Skip to content

Instantly share code, notes, and snippets.

@e-chankov
Created September 3, 2016 19:52
Show Gist options
  • Save e-chankov/5199763277e5a12768d9c361beaf054d to your computer and use it in GitHub Desktop.
Save e-chankov/5199763277e5a12768d9c361beaf054d to your computer and use it in GitHub Desktop.
Example of a Gaussian copula graphical model
license: gpl-3.0
This file has been truncated, but you can view the full file.
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8" />
<script src="data:application/x-javascript;base64,KGZ1bmN0aW9uKCkgewogIC8vIElmIHdpbmRvdy5IVE1MV2lkZ2V0cyBpcyBhbHJlYWR5IGRlZmluZWQsIHRoZW4gdXNlIGl0OyBvdGhlcndpc2UgY3JlYXRlIGEKICAvLyBuZXcgb2JqZWN0LiBUaGlzIGFsbG93cyBwcmVjZWRpbmcgY29kZSB0byBzZXQgb3B0aW9ucyB0aGF0IGFmZmVjdCB0aGUKICAvLyBpbml0aWFsaXphdGlvbiBwcm9jZXNzICh0aG91Z2ggbm9uZSBjdXJyZW50bHkgZXhpc3QpLgogIHdpbmRvdy5IVE1MV2lkZ2V0cyA9IHdpbmRvdy5IVE1MV2lkZ2V0cyB8fCB7fTsKCiAgLy8gU2VlIGlmIHdlJ3JlIHJ1bm5pbmcgaW4gYSB2aWV3ZXIgcGFuZS4gSWYgbm90LCB3ZSdyZSBpbiBhIHdlYiBicm93c2VyLgogIHZhciB2aWV3ZXJNb2RlID0gd2luZG93LkhUTUxXaWRnZXRzLnZpZXdlck1vZGUgPQogICAgICAvXGJ2aWV3ZXJfcGFuZT0xXGIvLnRlc3Qod2luZG93LmxvY2F0aW9uKTsKCiAgLy8gU2VlIGlmIHdlJ3JlIHJ1bm5pbmcgaW4gU2hpbnkgbW9kZS4gSWYgbm90LCBpdCdzIGEgc3RhdGljIGRvY3VtZW50LgogIC8vIE5vdGUgdGhhdCBzdGF0aWMgd2lkZ2V0cyBjYW4gYXBwZWFyIGluIGJvdGggU2hpbnkgYW5kIHN0YXRpYyBtb2RlcywgYnV0CiAgLy8gb2J2aW91c2x5LCBTaGlueSB3aWRnZXRzIGNhbiBvbmx5IGFwcGVhciBpbiBTaGlueSBhcHBzL2RvY3VtZW50cy4KICB2YXIgc2hpbnlNb2RlID0gd2luZG93LkhUTUxXaWRnZXRzLnNoaW55TW9kZSA9CiAgICAgIHR5cGVvZih3aW5kb3cuU2hpbnkpICE9PSAidW5kZWZpbmVkIiAmJiAhIXdpbmRvdy5TaGlueS5vdXRwdXRCaW5kaW5nczsKCiAgLy8gV2UgY2FuJ3QgY291bnQgb24galF1ZXJ5IGJlaW5nIGF2YWlsYWJsZSwgc28gd2UgaW1wbGVtZW50IG91ciBvd24KICAvLyB2ZXJzaW9uIGlmIG5lY2Vzc2FyeS4KICBmdW5jdGlvbiBxdWVyeVNlbGVjdG9yQWxsKHNjb3BlLCBzZWxlY3RvcikgewogICAgaWYgKHR5cGVvZihqUXVlcnkpICE9PSAidW5kZWZpbmVkIiAmJiBzY29wZSBpbnN0YW5jZW9mIGpRdWVyeSkgewogICAgICByZXR1cm4gc2NvcGUuZmluZChzZWxlY3Rvcik7CiAgICB9CiAgICBpZiAoc2NvcGUucXVlcnlTZWxlY3RvckFsbCkgewogICAgICByZXR1cm4gc2NvcGUucXVlcnlTZWxlY3RvckFsbChzZWxlY3Rvcik7CiAgICB9CiAgfQoKICBmdW5jdGlvbiBhc0FycmF5KHZhbHVlKSB7CiAgICBpZiAodmFsdWUgPT09IG51bGwpCiAgICAgIHJldHVybiBbXTsKICAgIGlmICgkLmlzQXJyYXkodmFsdWUpKQogICAgICByZXR1cm4gdmFsdWU7CiAgICByZXR1cm4gW3ZhbHVlXTsKICB9CgogIC8vIEltcGxlbWVudCBqUXVlcnkncyBleHRlbmQKICBmdW5jdGlvbiBleHRlbmQodGFyZ2V0IC8qLCAuLi4gKi8pIHsKICAgIGlmIChhcmd1bWVudHMubGVuZ3RoID09IDEpIHsKICAgICAgcmV0dXJuIHRhcmdldDsKICAgIH0KICAgIGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7CiAgICAgIHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07CiAgICAgIGZvciAodmFyIHByb3AgaW4gc291cmNlKSB7CiAgICAgICAgaWYgKHNvdXJjZS5oYXNPd25Qcm9wZXJ0eShwcm9wKSkgewogICAgICAgICAgdGFyZ2V0W3Byb3BdID0gc291cmNlW3Byb3BdOwogICAgICAgIH0KICAgICAgfQogICAgfQogICAgcmV0dXJuIHRhcmdldDsKICB9CgogIC8vIElFOCBkb2Vzbid0IHN1cHBvcnQgQXJyYXkuZm9yRWFjaC4KICBmdW5jdGlvbiBmb3JFYWNoKHZhbHVlcywgY2FsbGJhY2ssIHRoaXNBcmcpIHsKICAgIGlmICh2YWx1ZXMuZm9yRWFjaCkgewogICAgICB2YWx1ZXMuZm9yRWFjaChjYWxsYmFjaywgdGhpc0FyZyk7CiAgICB9IGVsc2UgewogICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHZhbHVlcy5sZW5ndGg7IGkrKykgewogICAgICAgIGNhbGxiYWNrLmNhbGwodGhpc0FyZywgdmFsdWVzW2ldLCBpLCB2YWx1ZXMpOwogICAgICB9CiAgICB9CiAgfQoKICAvLyBSZXBsYWNlcyB0aGUgc3BlY2lmaWVkIG1ldGhvZCB3aXRoIHRoZSByZXR1cm4gdmFsdWUgb2YgZnVuY1NvdXJjZS4KICAvLwogIC8vIE5vdGUgdGhhdCBmdW5jU291cmNlIHNob3VsZCBub3QgQkUgdGhlIG5ldyBtZXRob2QsIGl0IHNob3VsZCBiZSBhIGZ1bmN0aW9uCiAgLy8gdGhhdCBSRVRVUk5TIHRoZSBuZXcgbWV0aG9kLiBmdW5jU291cmNlIHJlY2VpdmVzIGEgc2luZ2xlIGFyZ3VtZW50IHRoYXQgaXMKICAvLyB0aGUgb3ZlcnJpZGRlbiBtZXRob2QsIGl0IGNhbiBiZSBjYWxsZWQgZnJvbSB0aGUgbmV3IG1ldGhvZC4gVGhlIG92ZXJyaWRkZW4KICAvLyBtZXRob2QgY2FuIGJlIGNhbGxlZCBsaWtlIGEgcmVndWxhciBmdW5jdGlvbiwgaXQgaGFzIHRoZSB0YXJnZXQgcGVybWFuZW50bHkKICAvLyBib3VuZCB0byBpdCBzbyAidGhpcyIgd2lsbCB3b3JrIGNvcnJlY3RseS4KICBmdW5jdGlvbiBvdmVycmlkZU1ldGhvZCh0YXJnZXQsIG1ldGhvZE5hbWUsIGZ1bmNTb3VyY2UpIHsKICAgIHZhciBzdXBlckZ1bmMgPSB0YXJnZXRbbWV0aG9kTmFtZV0gfHwgZnVuY3Rpb24oKSB7fTsKICAgIHZhciBzdXBlckZ1bmNCb3VuZCA9IGZ1bmN0aW9uKCkgewogICAgICByZXR1cm4gc3VwZXJGdW5jLmFwcGx5KHRhcmdldCwgYXJndW1lbnRzKTsKICAgIH07CiAgICB0YXJnZXRbbWV0aG9kTmFtZV0gPSBmdW5jU291cmNlKHN1cGVyRnVuY0JvdW5kKTsKICB9CgogIC8vIEFkZCBhIG1ldGhvZCB0byBkZWxlZ2F0b3IgdGhhdCwgd2hlbiBpbnZva2VkLCBjYWxscwogIC8vIGRlbGVnYXRlZS5tZXRob2ROYW1lLiBJZiB0aGVyZSBpcyBubyBzdWNoIG1ldGhvZCBvbgogIC8vIHRoZSBkZWxlZ2F0ZWUsIGJ1dCB0aGVyZSB3YXMgb25lIG9uIGRlbGVnYXRvciBiZWZvcmUKICAvLyBkZWxlZ2F0ZU1ldGhvZCB3YXMgY2FsbGVkLCB0aGVuIHRoZSBvcmlnaW5hbCB2ZXJzaW9uCiAgLy8gaXMgaW52b2tlZCBpbnN0ZWFkLgogIC8vIEZvciBleGFtcGxlOgogIC8vCiAgLy8gdmFyIGEgPSB7CiAgLy8gICBtZXRob2QxOiBmdW5jdGlvbigpIHsgY29uc29sZS5sb2coJ2ExJyk7IH0KICAvLyAgIG1ldGhvZDI6IGZ1bmN0aW9uKCkgeyBjb25zb2xlLmxvZygnYTInKTsgfQogIC8vIH07CiAgLy8gdmFyIGIgPSB7CiAgLy8gICBtZXRob2QxOiBmdW5jdGlvbigpIHsgY29uc29sZS5sb2coJ2IxJyk7IH0KICAvLyB9OwogIC8vIGRlbGVnYXRlTWV0aG9kKGEsIGIsICJtZXRob2QxIik7CiAgLy8gZGVsZWdhdGVNZXRob2QoYSwgYiwgIm1ldGhvZDIiKTsKICAvLyBhLm1ldGhvZDEoKTsKICAvLyBhLm1ldGhvZDIoKTsKICAvLwogIC8vIFRoZSBvdXRwdXQgd291bGQgYmUgImIxIiwgImEyIi4KICBmdW5jdGlvbiBkZWxlZ2F0ZU1ldGhvZChkZWxlZ2F0b3IsIGRlbGVnYXRlZSwgbWV0aG9kTmFtZSkgewogICAgdmFyIGluaGVyaXRlZCA9IGRlbGVnYXRvclttZXRob2ROYW1lXTsKICAgIGRlbGVnYXRvclttZXRob2ROYW1lXSA9IGZ1bmN0aW9uKCkgewogICAgICB2YXIgdGFyZ2V0ID0gZGVsZWdhdGVlOwogICAgICB2YXIgbWV0aG9kID0gZGVsZWdhdGVlW21ldGhvZE5hbWVdOwoKICAgICAgLy8gVGhlIG1ldGhvZCBkb2Vzbid0IGV4aXN0IG9uIHRoZSBkZWxlZ2F0ZWUuIEluc3RlYWQsCiAgICAgIC8vIGNhbGwgdGhlIG1ldGhvZCBvbiB0aGUgZGVsZWdhdG9yLCBpZiBpdCBleGlzdHMuCiAgICAgIGlmICghbWV0aG9kKSB7CiAgICAgICAgdGFyZ2V0ID0gZGVsZWdhdG9yOwogICAgICAgIG1ldGhvZCA9IGluaGVyaXRlZDsKICAgICAgfQoKICAgICAgaWYgKG1ldGhvZCkgewogICAgICAgIHJldHVybiBtZXRob2QuYXBwbHkodGFyZ2V0LCBhcmd1bWVudHMpOwogICAgICB9CiAgICB9OwogIH0KCiAgLy8gSW1wbGVtZW50IGEgdmFndWUgZmFjc2ltaWxpZSBvZiBqUXVlcnkncyBkYXRhIG1ldGhvZAogIGZ1bmN0aW9uIGVsZW1lbnREYXRhKGVsLCBuYW1lLCB2YWx1ZSkgewogICAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPT0gMikgewogICAgICByZXR1cm4gZWxbImh0bWx3aWRnZXRfZGF0YV8iICsgbmFtZV07CiAgICB9IGVsc2UgaWYgKGFyZ3VtZW50cy5sZW5ndGggPT0gMykgewogICAgICBlbFsiaHRtbHdpZGdldF9kYXRhXyIgKyBuYW1lXSA9IHZhbHVlOwogICAgICByZXR1cm4gZWw7CiAgICB9IGVsc2UgewogICAgICB0aHJvdyBuZXcgRXJyb3IoIldyb25nIG51bWJlciBvZiBhcmd1bWVudHMgZm9yIGVsZW1lbnREYXRhOiAiICsKICAgICAgICBhcmd1bWVudHMubGVuZ3RoKTsKICAgIH0KICB9CgogIC8vIGh0dHA6Ly9zdGFja292ZXJmbG93LmNvbS9xdWVzdGlvbnMvMzQ0NjE3MC9lc2NhcGUtc3RyaW5nLWZvci11c2UtaW4tamF2YXNjcmlwdC1yZWdleAogIGZ1bmN0aW9uIGVzY2FwZVJlZ0V4cChzdHIpIHsKICAgIHJldHVybiBzdHIucmVwbGFjZSgvW1wtXFtcXVwvXHtcfVwoXClcKlwrXD9cLlxcXF5cJFx8XS9nLCAiXFwkJiIpOwogIH0KCiAgZnVuY3Rpb24gaGFzQ2xhc3MoZWwsIGNsYXNzTmFtZSkgewogICAgdmFyIHJlID0gbmV3IFJlZ0V4cCgiXFxiIiArIGVzY2FwZVJlZ0V4cChjbGFzc05hbWUpICsgIlxcYiIpOwogICAgcmV0dXJuIHJlLnRlc3QoZWwuY2xhc3NOYW1lKTsKICB9CgogIC8vIGVsZW1lbnRzIC0gYXJyYXkgKG9yIGFycmF5LWxpa2Ugb2JqZWN0KSBvZiBIVE1MIGVsZW1lbnRzCiAgLy8gY2xhc3NOYW1lIC0gY2xhc3MgbmFtZSB0byB0ZXN0IGZvcgogIC8vIGluY2x1ZGUgLSBpZiB0cnVlLCBvbmx5IHJldHVybiBlbGVtZW50cyB3aXRoIGdpdmVuIGNsYXNzTmFtZTsKICAvLyAgIGlmIGZhbHNlLCBvbmx5IHJldHVybiBlbGVtZW50cyAqd2l0aG91dCogZ2l2ZW4gY2xhc3NOYW1lCiAgZnVuY3Rpb24gZmlsdGVyQnlDbGFzcyhlbGVtZW50cywgY2xhc3NOYW1lLCBpbmNsdWRlKSB7CiAgICB2YXIgcmVzdWx0cyA9IFtdOwogICAgZm9yICh2YXIgaSA9IDA7IGkgPCBlbGVtZW50cy5sZW5ndGg7IGkrKykgewogICAgICBpZiAoaGFzQ2xhc3MoZWxlbWVudHNbaV0sIGNsYXNzTmFtZSkgPT0gaW5jbHVkZSkKICAgICAgICByZXN1bHRzLnB1c2goZWxlbWVudHNbaV0pOwogICAgfQogICAgcmV0dXJuIHJlc3VsdHM7CiAgfQoKICBmdW5jdGlvbiBvbihvYmosIGV2ZW50TmFtZSwgZnVuYykgewogICAgaWYgKG9iai5hZGRFdmVudExpc3RlbmVyKSB7CiAgICAgIG9iai5hZGRFdmVudExpc3RlbmVyKGV2ZW50TmFtZSwgZnVuYywgZmFsc2UpOwogICAgfSBlbHNlIGlmIChvYmouYXR0YWNoRXZlbnQpIHsKICAgICAgb2JqLmF0dGFjaEV2ZW50KGV2ZW50TmFtZSwgZnVuYyk7CiAgICB9CiAgfQoKICBmdW5jdGlvbiBvZmYob2JqLCBldmVudE5hbWUsIGZ1bmMpIHsKICAgIGlmIChvYmoucmVtb3ZlRXZlbnRMaXN0ZW5lcikKICAgICAgb2JqLnJlbW92ZUV2ZW50TGlzdGVuZXIoZXZlbnROYW1lLCBmdW5jLCBmYWxzZSk7CiAgICBlbHNlIGlmIChvYmouZGV0YWNoRXZlbnQpIHsKICAgICAgb2JqLmRldGFjaEV2ZW50KGV2ZW50TmFtZSwgZnVuYyk7CiAgICB9CiAgfQoKICAvLyBUcmFuc2xhdGUgYXJyYXkgb2YgdmFsdWVzIHRvIHRvcC9yaWdodC9ib3R0b20vbGVmdCwgYXMgdXN1YWwgd2l0aAogIC8vIHRoZSAicGFkZGluZyIgQ1NTIHByb3BlcnR5CiAgLy8gaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvQ1NTL3BhZGRpbmcKICBmdW5jdGlvbiB1bnBhY2tQYWRkaW5nKHZhbHVlKSB7CiAgICBpZiAodHlwZW9mKHZhbHVlKSA9PT0gIm51bWJlciIpCiAgICAgIHZhbHVlID0gW3ZhbHVlXTsKICAgIGlmICh2YWx1ZS5sZW5ndGggPT09IDEpIHsKICAgICAgcmV0dXJuIHt0b3A6IHZhbHVlWzBdLCByaWdodDogdmFsdWVbMF0sIGJvdHRvbTogdmFsdWVbMF0sIGxlZnQ6IHZhbHVlWzBdfTsKICAgIH0KICAgIGlmICh2YWx1ZS5sZW5ndGggPT09IDIpIHsKICAgICAgcmV0dXJuIHt0b3A6IHZhbHVlWzBdLCByaWdodDogdmFsdWVbMV0sIGJvdHRvbTogdmFsdWVbMF0sIGxlZnQ6IHZhbHVlWzFdfTsKICAgIH0KICAgIGlmICh2YWx1ZS5sZW5ndGggPT09IDMpIHsKICAgICAgcmV0dXJuIHt0b3A6IHZhbHVlWzBdLCByaWdodDogdmFsdWVbMV0sIGJvdHRvbTogdmFsdWVbMl0sIGxlZnQ6IHZhbHVlWzFdfTsKICAgIH0KICAgIGlmICh2YWx1ZS5sZW5ndGggPT09IDQpIHsKICAgICAgcmV0dXJuIHt0b3A6IHZhbHVlWzBdLCByaWdodDogdmFsdWVbMV0sIGJvdHRvbTogdmFsdWVbMl0sIGxlZnQ6IHZhbHVlWzNdfTsKICAgIH0KICB9CgogIC8vIENvbnZlcnQgYW4gdW5wYWNrZWQgcGFkZGluZyBvYmplY3QgdG8gYSBDU1MgdmFsdWUKICBmdW5jdGlvbiBwYWRkaW5nVG9Dc3MocGFkZGluZ09iaikgewogICAgcmV0dXJuIHBhZGRpbmdPYmoudG9wICsgInB4ICIgKyBwYWRkaW5nT2JqLnJpZ2h0ICsgInB4ICIgKyBwYWRkaW5nT2JqLmJvdHRvbSArICJweCAiICsgcGFkZGluZ09iai5sZWZ0ICsgInB4IjsKICB9CgogIC8vIE1ha2VzIGEgbnVtYmVyIHN1aXRhYmxlIGZvciBDU1MKICBmdW5jdGlvbiBweCh4KSB7CiAgICBpZiAodHlwZW9mKHgpID09PSAibnVtYmVyIikKICAgICAgcmV0dXJuIHggKyAicHgiOwogICAgZWxzZQogICAgICByZXR1cm4geDsKICB9CgogIC8vIFJldHJpZXZlcyBydW50aW1lIHdpZGdldCBzaXppbmcgaW5mb3JtYXRpb24gZm9yIGFuIGVsZW1lbnQuCiAgLy8gVGhlIHJldHVybiB2YWx1ZSBpcyBlaXRoZXIgbnVsbCwgb3IgYW4gb2JqZWN0IHdpdGggZmlsbCwgcGFkZGluZywKICAvLyBkZWZhdWx0V2lkdGgsIGRlZmF1bHRIZWlnaHQgZmllbGRzLgogIGZ1bmN0aW9uIHNpemluZ1BvbGljeShlbCkgewogICAgdmFyIHNpemluZ0VsID0gZG9jdW1lbnQucXVlcnlTZWxlY3Rvcigic2NyaXB0W2RhdGEtZm9yPSciICsgZWwuaWQgKyAiJ11bdHlwZT0nYXBwbGljYXRpb24vaHRtbHdpZGdldC1zaXppbmcnXSIpOwogICAgaWYgKCFzaXppbmdFbCkKICAgICAgcmV0dXJuIG51bGw7CiAgICB2YXIgc3AgPSBKU09OLnBhcnNlKHNpemluZ0VsLnRleHRDb250ZW50IHx8IHNpemluZ0VsLnRleHQgfHwgInt9Iik7CiAgICBpZiAodmlld2VyTW9kZSkgewogICAgICByZXR1cm4gc3Audmlld2VyOwogICAgfSBlbHNlIHsKICAgICAgcmV0dXJuIHNwLmJyb3dzZXI7CiAgICB9CiAgfQoKICAvLyBAcGFyYW0gdGFza3MgQXJyYXkgb2Ygc3RyaW5ncyAob3IgZmFsc3kgdmFsdWUsIGluIHdoaWNoIGNhc2Ugbm8tb3ApLgogIC8vICAgRWFjaCBlbGVtZW50IG11c3QgYmUgYSB2YWxpZCBKYXZhU2NyaXB0IGV4cHJlc3Npb24gdGhhdCB5aWVsZHMgYQogIC8vICAgZnVuY3Rpb24uCiAgLy8gQHBhcmFtIHRhcmdldCBUaGUgb2JqZWN0IHRoYXQgd2lsbCBiZSAidGhpcyIgZm9yIGVhY2ggZnVuY3Rpb24KICAvLyAgIGV4ZWN1dGlvbi4KICAvLyBAcGFyYW0gYXJncyBBcnJheSBvZiBhcmd1bWVudHMgdG8gYmUgcGFzc2VkIHRvIHRoZSBmdW5jdGlvbnMuIChUaGUKICAvLyAgIHNhbWUgYXJndW1lbnRzIHdpbGwgYmUgcGFzc2VkIHRvIGFsbCBmdW5jdGlvbnMuKQogIGZ1bmN0aW9uIGV2YWxBbmRSdW4odGFza3MsIHRhcmdldCwgYXJncykgewogICAgaWYgKHRhc2tzKSB7CiAgICAgIGZvckVhY2godGFza3MsIGZ1bmN0aW9uKHRhc2spIHsKICAgICAgICB2YXIgdGFza0Z1bmMgPSBldmFsKCIoIiArIHRhc2sgKyAiKSIpOwogICAgICAgIGlmICh0eXBlb2YodGFza0Z1bmMpICE9PSAiZnVuY3Rpb24iKSB7CiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoIlRhc2sgbXVzdCBiZSBhIGZ1bmN0aW9uISBTb3VyY2U6XG4iICsgdGFzayk7CiAgICAgICAgfQogICAgICAgIHRhc2tGdW5jLmFwcGx5KHRhcmdldCwgYXJncyk7CiAgICAgIH0pOwogICAgfQogIH0KCiAgZnVuY3Rpb24gaW5pdFNpemluZyhlbCkgewogICAgdmFyIHNpemluZyA9IHNpemluZ1BvbGljeShlbCk7CiAgICBpZiAoIXNpemluZykKICAgICAgcmV0dXJuOwoKICAgIHZhciBjZWwgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiaHRtbHdpZGdldF9jb250YWluZXIiKTsKICAgIGlmICghY2VsKQogICAgICByZXR1cm47CgogICAgaWYgKHR5cGVvZihzaXppbmcucGFkZGluZykgIT09ICJ1bmRlZmluZWQiKSB7CiAgICAgIGRvY3VtZW50LmJvZHkuc3R5bGUubWFyZ2luID0gIjAiOwogICAgICBkb2N1bWVudC5ib2R5LnN0eWxlLnBhZGRpbmcgPSBwYWRkaW5nVG9Dc3ModW5wYWNrUGFkZGluZyhzaXppbmcucGFkZGluZykpOwogICAgfQoKICAgIGlmIChzaXppbmcuZmlsbCkgewogICAgICBkb2N1bWVudC5ib2R5LnN0eWxlLm92ZXJmbG93ID0gImhpZGRlbiI7CiAgICAgIGRvY3VtZW50LmJvZHkuc3R5bGUud2lkdGggPSAiMTAwJSI7CiAgICAgIGRvY3VtZW50LmJvZHkuc3R5bGUuaGVpZ2h0ID0gIjEwMCUiOwogICAgICBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuc3R5bGUud2lkdGggPSAiMTAwJSI7CiAgICAgIGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5zdHlsZS5oZWlnaHQgPSAiMTAwJSI7CiAgICAgIGlmIChjZWwpIHsKICAgICAgICBjZWwuc3R5bGUucG9zaXRpb24gPSAiYWJzb2x1dGUiOwogICAgICAgIHZhciBwYWQgPSB1bnBhY2tQYWRkaW5nKHNpemluZy5wYWRkaW5nKTsKICAgICAgICBjZWwuc3R5bGUudG9wID0gcGFkLnRvcCArICJweCI7CiAgICAgICAgY2VsLnN0eWxlLnJpZ2h0ID0gcGFkLnJpZ2h0ICsgInB4IjsKICAgICAgICBjZWwuc3R5bGUuYm90dG9tID0gcGFkLmJvdHRvbSArICJweCI7CiAgICAgICAgY2VsLnN0eWxlLmxlZnQgPSBwYWQubGVmdCArICJweCI7CiAgICAgICAgZWwuc3R5bGUud2lkdGggPSAiMTAwJSI7CiAgICAgICAgZWwuc3R5bGUuaGVpZ2h0ID0gIjEwMCUiOwogICAgICB9CgogICAgICByZXR1cm4gewogICAgICAgIGdldFdpZHRoOiBmdW5jdGlvbigpIHsgcmV0dXJuIGNlbC5vZmZzZXRXaWR0aDsgfSwKICAgICAgICBnZXRIZWlnaHQ6IGZ1bmN0aW9uKCkgeyByZXR1cm4gY2VsLm9mZnNldEhlaWdodDsgfQogICAgICB9OwoKICAgIH0gZWxzZSB7CiAgICAgIGVsLnN0eWxlLndpZHRoID0gcHgoc2l6aW5nLndpZHRoKTsKICAgICAgZWwuc3R5bGUuaGVpZ2h0ID0gcHgoc2l6aW5nLmhlaWdodCk7CgogICAgICByZXR1cm4gewogICAgICAgIGdldFdpZHRoOiBmdW5jdGlvbigpIHsgcmV0dXJuIGVsLm9mZnNldFdpZHRoOyB9LAogICAgICAgIGdldEhlaWdodDogZnVuY3Rpb24oKSB7IHJldHVybiBlbC5vZmZzZXRIZWlnaHQ7IH0KICAgICAgfTsKICAgIH0KICB9CgogIC8vIERlZmF1bHQgaW1wbGVtZW50YXRpb25zIGZvciBtZXRob2RzCiAgdmFyIGRlZmF1bHRzID0gewogICAgZmluZDogZnVuY3Rpb24oc2NvcGUpIHsKICAgICAgcmV0dXJuIHF1ZXJ5U2VsZWN0b3JBbGwoc2NvcGUsICIuIiArIHRoaXMubmFtZSk7CiAgICB9LAogICAgcmVuZGVyRXJyb3I6IGZ1bmN0aW9uKGVsLCBlcnIpIHsKICAgICAgdmFyICRlbCA9ICQoZWwpOwoKICAgICAgdGhpcy5jbGVhckVycm9yKGVsKTsKCiAgICAgIC8vIEFkZCBhbGwgdGhlc2UgZXJyb3IgY2xhc3NlcywgYXMgU2hpbnkgZG9lcwogICAgICB2YXIgZXJyQ2xhc3MgPSAic2hpbnktb3V0cHV0LWVycm9yIjsKICAgICAgaWYgKGVyci50eXBlICE9PSBudWxsKSB7CiAgICAgICAgLy8gdXNlIHRoZSBjbGFzc2VzIG9mIHRoZSBlcnJvciBjb25kaXRpb24gYXMgQ1NTIGNsYXNzIG5hbWVzCiAgICAgICAgZXJyQ2xhc3MgPSBlcnJDbGFzcyArICIgIiArICQubWFwKGFzQXJyYXkoZXJyLnR5cGUpLCBmdW5jdGlvbih0eXBlKSB7CiAgICAgICAgICByZXR1cm4gZXJyQ2xhc3MgKyAiLSIgKyB0eXBlOwogICAgICAgIH0pLmpvaW4oIiAiKTsKICAgICAgfQogICAgICBlcnJDbGFzcyA9IGVyckNsYXNzICsgIiBodG1sd2lkZ2V0cy1lcnJvciI7CgogICAgICAvLyBJcyBlbCBpbmxpbmUgb3IgYmxvY2s/IElmIGlubGluZSBvciBpbmxpbmUtYmxvY2ssIGp1c3QgZGlzcGxheTpub25lIGl0CiAgICAgIC8vIGFuZCBhZGQgYW4gaW5saW5lIGVycm9yLgogICAgICB2YXIgZGlzcGxheSA9ICRlbC5jc3MoImRpc3BsYXkiKTsKICAgICAgJGVsLmRhdGEoInJlc3RvcmUtZGlzcGxheS1tb2RlIiwgZGlzcGxheSk7CgogICAgICBpZiAoZGlzcGxheSA9PT0gImlubGluZSIgfHwgZGlzcGxheSA9PT0gImlubGluZS1ibG9jayIpIHsKICAgICAgICAkZWwuaGlkZSgpOwogICAgICAgIGlmIChlcnIubWVzc2FnZSAhPT0gIiIpIHsKICAgICAgICAgIHZhciBlcnJvclNwYW4gPSAkKCI8c3Bhbj4iKS5hZGRDbGFzcyhlcnJDbGFzcyk7CiAgICAgICAgICBlcnJvclNwYW4udGV4dChlcnIubWVzc2FnZSk7CiAgICAgICAgICAkZWwuYWZ0ZXIoZXJyb3JTcGFuKTsKICAgICAgICB9CiAgICAgIH0gZWxzZSBpZiAoZGlzcGxheSA9PT0gImJsb2NrIikgewogICAgICAgIC8vIElmIGJsb2NrLCBhZGQgYW4gZXJyb3IganVzdCBhZnRlciB0aGUgZWwsIHNldCB2aXNpYmlsaXR5Om5vbmUgb24gdGhlCiAgICAgICAgLy8gZWwsIGFuZCBwb3NpdGlvbiB0aGUgZXJyb3IgdG8gYmUgb24gdG9wIG9mIHRoZSBlbC4KICAgICAgICAvLyBNYXJrIGl0IHdpdGggYSB1bmlxdWUgSUQgYW5kIENTUyBjbGFzcyBzbyB3ZSBjYW4gcmVtb3ZlIGl0IGxhdGVyLgogICAgICAgICRlbC5jc3MoInZpc2liaWxpdHkiLCAiaGlkZGVuIik7CiAgICAgICAgaWYgKGVyci5tZXNzYWdlICE9PSAiIikgewogICAgICAgICAgdmFyIGVycm9yRGl2ID0gJCgiPGRpdj4iKS5hZGRDbGFzcyhlcnJDbGFzcykuY3NzKCJwb3NpdGlvbiIsICJhYnNvbHV0ZSIpCiAgICAgICAgICAgIC5jc3MoInRvcCIsIGVsLm9mZnNldFRvcCkKICAgICAgICAgICAgLmNzcygibGVmdCIsIGVsLm9mZnNldExlZnQpCiAgICAgICAgICAgIC8vIHNldHRpbmcgd2lkdGggY2FuIHB1c2ggb3V0IHRoZSBwYWdlIHNpemUsIGZvcmNpbmcgb3RoZXJ3aXNlCiAgICAgICAgICAgIC8vIHVubmVjZXNzYXJ5IHNjcm9sbGJhcnMgdG8gYXBwZWFyIGFuZCBtYWtpbmcgaXQgaW1wb3NzaWJsZSBmb3IKICAgICAgICAgICAgLy8gdGhlIGVsZW1lbnQgdG8gc2hyaW5rOyBzbyB1c2UgbWF4LXdpZHRoIGluc3RlYWQKICAgICAgICAgICAgLmNzcygibWF4V2lkdGgiLCBlbC5vZmZzZXRXaWR0aCkKICAgICAgICAgICAgLmNzcygiaGVpZ2h0IiwgZWwub2Zmc2V0SGVpZ2h0KTsKICAgICAgICAgIGVycm9yRGl2LnRleHQoZXJyLm1lc3NhZ2UpOwogICAgICAgICAgJGVsLmFmdGVyKGVycm9yRGl2KTsKCiAgICAgICAgICAvLyBSZWFsbHkgZHVtYiB3YXkgdG8ga2VlcCB0aGUgc2l6ZS9wb3NpdGlvbiBvZiB0aGUgZXJyb3IgaW4gc3luYyB3aXRoCiAgICAgICAgICAvLyB0aGUgcGFyZW50IGVsZW1lbnQgYXMgdGhlIHdpbmRvdyBpcyByZXNpemVkIG9yIHdoYXRldmVyLgogICAgICAgICAgdmFyIGludElkID0gc2V0SW50ZXJ2YWwoZnVuY3Rpb24oKSB7CiAgICAgICAgICAgIGlmICghZXJyb3JEaXZbMF0ucGFyZW50RWxlbWVudCkgewogICAgICAgICAgICAgIGNsZWFySW50ZXJ2YWwoaW50SWQpOwogICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgfQogICAgICAgICAgICBlcnJvckRpdgogICAgICAgICAgICAgIC5jc3MoInRvcCIsIGVsLm9mZnNldFRvcCkKICAgICAgICAgICAgICAuY3NzKCJsZWZ0IiwgZWwub2Zmc2V0TGVmdCkKICAgICAgICAgICAgICAuY3NzKCJtYXhXaWR0aCIsIGVsLm9mZnNldFdpZHRoKQogICAgICAgICAgICAgIC5jc3MoImhlaWdodCIsIGVsLm9mZnNldEhlaWdodCk7CiAgICAgICAgICB9LCA1MDApOwogICAgICAgIH0KICAgICAgfQogICAgfSwKICAgIGNsZWFyRXJyb3I6IGZ1bmN0aW9uKGVsKSB7CiAgICAgIHZhciAkZWwgPSAkKGVsKTsKICAgICAgdmFyIGRpc3BsYXkgPSAkZWwuZGF0YSgicmVzdG9yZS1kaXNwbGF5LW1vZGUiKTsKICAgICAgJGVsLmRhdGEoInJlc3RvcmUtZGlzcGxheS1tb2RlIiwgbnVsbCk7CgogICAgICBpZiAoZGlzcGxheSA9PT0gImlubGluZSIgfHwgZGlzcGxheSA9PT0gImlubGluZS1ibG9jayIpIHsKICAgICAgICBpZiAoZGlzcGxheSkKICAgICAgICAgICRlbC5jc3MoImRpc3BsYXkiLCBkaXNwbGF5KTsKICAgICAgICAkKGVsLm5leHRTaWJsaW5nKS5maWx0ZXIoIi5odG1sd2lkZ2V0cy1lcnJvciIpLnJlbW92ZSgpOwogICAgICB9IGVsc2UgaWYgKGRpc3BsYXkgPT09ICJibG9jayIpewogICAgICAgICRlbC5jc3MoInZpc2liaWxpdHkiLCAiaW5oZXJpdCIpOwogICAgICAgICQoZWwubmV4dFNpYmxpbmcpLmZpbHRlcigiLmh0bWx3aWRnZXRzLWVycm9yIikucmVtb3ZlKCk7CiAgICAgIH0KICAgIH0sCiAgICBzaXppbmc6IHt9CiAgfTsKCiAgLy8gQ2FsbGVkIGJ5IHdpZGdldCBiaW5kaW5ncyB0byByZWdpc3RlciBhIG5ldyB0eXBlIG9mIHdpZGdldC4gVGhlIGRlZmluaXRpb24KICAvLyBvYmplY3QgY2FuIGNvbnRhaW4gdGhlIGZvbGxvd2luZyBwcm9wZXJ0aWVzOgogIC8vIC0gbmFtZSAocmVxdWlyZWQpIC0gQSBzdHJpbmcgaW5kaWNhdGluZyB0aGUgYmluZGluZyBuYW1lLCB3aGljaCB3aWxsIGJlCiAgLy8gICB1c2VkIGJ5IGRlZmF1bHQgYXMgdGhlIENTUyBjbGFzc25hbWUgdG8gbG9vayBmb3IuCiAgLy8gLSBpbml0aWFsaXplIChvcHRpb25hbCkgLSBBIGZ1bmN0aW9uKGVsKSB0aGF0IHdpbGwgYmUgY2FsbGVkIG9uY2UgcGVyCiAgLy8gICB3aWRnZXQgZWxlbWVudDsgaWYgYSB2YWx1ZSBpcyByZXR1cm5lZCwgaXQgd2lsbCBiZSBwYXNzZWQgYXMgdGhlIHRoaXJkCiAgLy8gICB2YWx1ZSB0byByZW5kZXJWYWx1ZS4KICAvLyAtIHJlbmRlclZhbHVlIChyZXF1aXJlZCkgLSBBIGZ1bmN0aW9uKGVsLCBkYXRhLCBpbml0VmFsdWUpIHRoYXQgd2lsbCBiZQogIC8vICAgY2FsbGVkIHdpdGggZGF0YS4gU3RhdGljIGNvbnRleHRzIHdpbGwgY2F1c2UgdGhpcyB0byBiZSBjYWxsZWQgb25jZSBwZXIKICAvLyAgIGVsZW1lbnQ7IFNoaW55IGFwcHMgd2lsbCBjYXVzZSB0aGlzIHRvIGJlIGNhbGxlZCBtdWx0aXBsZSB0aW1lcyBwZXIKICAvLyAgIGVsZW1lbnQsIGFzIHRoZSBkYXRhIGNoYW5nZXMuCiAgd2luZG93LkhUTUxXaWRnZXRzLndpZGdldCA9IGZ1bmN0aW9uKGRlZmluaXRpb24pIHsKICAgIGlmICghZGVmaW5pdGlvbi5uYW1lKSB7CiAgICAgIHRocm93IG5ldyBFcnJvcigiV2lkZ2V0IG11c3QgaGF2ZSBhIG5hbWUiKTsKICAgIH0KICAgIGlmICghZGVmaW5pdGlvbi50eXBlKSB7CiAgICAgIHRocm93IG5ldyBFcnJvcigiV2lkZ2V0IG11c3QgaGF2ZSBhIHR5cGUiKTsKICAgIH0KICAgIC8vIEN1cnJlbnRseSB3ZSBvbmx5IHN1cHBvcnQgb3V0cHV0IHdpZGdldHMKICAgIGlmIChkZWZpbml0aW9uLnR5cGUgIT09ICJvdXRwdXQiKSB7CiAgICAgIHRocm93IG5ldyBFcnJvcigiVW5yZWNvZ25pemVkIHdpZGdldCB0eXBlICciICsgZGVmaW5pdGlvbi50eXBlICsgIiciKTsKICAgIH0KICAgIC8vIFRPRE86IFZlcmlmeSB0aGF0IC5uYW1lIGlzIGEgdmFsaWQgQ1NTIGNsYXNzbmFtZQoKICAgIC8vIFN1cHBvcnQgbmV3LXN0eWxlIGluc3RhbmNlLWJvdW5kIGRlZmluaXRpb25zLiBPbGQtc3R5bGUgY2xhc3MtYm91bmQKICAgIC8vIGRlZmluaXRpb25zIGhhdmUgb25lIHdpZGdldCAib2JqZWN0IiBwZXIgd2lkZ2V0IHBlciB0eXBlL2NsYXNzIG9mCiAgICAvLyB3aWRnZXQ7IHRoZSByZW5kZXJWYWx1ZSBhbmQgcmVzaXplIG1ldGhvZHMgb24gc3VjaCB3aWRnZXQgb2JqZWN0cwogICAgLy8gdGFrZSBlbCBhbmQgaW5zdGFuY2UgYXJndW1lbnRzLCBiZWNhdXNlIHRoZSB3aWRnZXQgb2JqZWN0IGNhbid0CiAgICAvLyBzdG9yZSB0aGVtLiBOZXctc3R5bGUgaW5zdGFuY2UtYm91bmQgZGVmaW5pdGlvbnMgaGF2ZSBvbmUgd2lkZ2V0CiAgICAvLyBvYmplY3QgcGVyIHdpZGdldCBpbnN0YW5jZTsgdGhlIGRlZmluaXRpb24gdGhhdCdzIHBhc3NlZCBpbiBkb2Vzbid0CiAgICAvLyBwcm92aWRlIHJlbmRlclZhbHVlIG9yIHJlc2l6ZSBtZXRob2RzIGF0IGFsbCwganVzdCB0aGUgc2luZ2xlIG1ldGhvZAogICAgLy8gICBmYWN0b3J5KGVsLCB3aWR0aCwgaGVpZ2h0KQogICAgLy8gd2hpY2ggcmV0dXJucyBhbiBvYmplY3QgdGhhdCBoYXMgcmVuZGVyVmFsdWUoeCkgYW5kIHJlc2l6ZSh3LCBoKS4KICAgIC8vIFRoaXMgZW5hYmxlcyBhIGZhciBtb3JlIG5hdHVyYWwgcHJvZ3JhbW1pbmcgc3R5bGUgZm9yIHRoZSB3aWRnZXQKICAgIC8vIGF1dGhvciwgd2hvIGNhbiBzdG9yZSBwZXItaW5zdGFuY2Ugc3RhdGUgdXNpbmcgZWl0aGVyIE9PLXN0eWxlCiAgICAvLyBpbnN0YW5jZSBmaWVsZHMgb3IgZnVuY3Rpb25hbC1zdHlsZSBjbG9zdXJlIHZhcmlhYmxlcyAoSSBndWVzcyB0aGlzCiAgICAvLyBpcyBpbiBjb250cmFzdCB0byB3aGF0IGNhbiBvbmx5IGJlIGNhbGxlZCBDLXN0eWxlIHBzZXVkby1PTyB3aGljaCBpcwogICAgLy8gd2hhdCB3ZSByZXF1aXJlZCBiZWZvcmUpLgogICAgaWYgKGRlZmluaXRpb24uZmFjdG9yeSkgewogICAgICBkZWZpbml0aW9uID0gY3JlYXRlTGVnYWN5RGVmaW5pdGlvbkFkYXB0ZXIoZGVmaW5pdGlvbik7CiAgICB9CgogICAgaWYgKCFkZWZpbml0aW9uLnJlbmRlclZhbHVlKSB7CiAgICAgIHRocm93IG5ldyBFcnJvcigiV2lkZ2V0IG11c3QgaGF2ZSBhIHJlbmRlclZhbHVlIGZ1bmN0aW9uIik7CiAgICB9CgogICAgLy8gRm9yIHN0YXRpYyByZW5kZXJpbmcgKG5vbi1TaGlueSksIHVzZSBhIHNpbXBsZSB3aWRnZXQgcmVnaXN0cmF0aW9uCiAgICAvLyBzY2hlbWUuIFdlIGFsc28gdXNlIHRoaXMgc2NoZW1lIGZvciBTaGlueSBhcHBzL2RvY3VtZW50cyB0aGF0IGFsc28KICAgIC8vIGNvbnRhaW4gc3RhdGljIHdpZGdldHMuCiAgICB3aW5kb3cuSFRNTFdpZGdldHMud2lkZ2V0cyA9IHdpbmRvdy5IVE1MV2lkZ2V0cy53aWRnZXRzIHx8IFtdOwogICAgLy8gTWVyZ2UgZGVmYXVsdHMgaW50byB0aGUgZGVmaW5pdGlvbjsgZG9uJ3QgbXV0YXRlIHRoZSBvcmlnaW5hbCBkZWZpbml0aW9uLgogICAgdmFyIHN0YXRpY0JpbmRpbmcgPSBleHRlbmQoe30sIGRlZmF1bHRzLCBkZWZpbml0aW9uKTsKICAgIG92ZXJyaWRlTWV0aG9kKHN0YXRpY0JpbmRpbmcsICJmaW5kIiwgZnVuY3Rpb24oc3VwZXJmdW5jKSB7CiAgICAgIHJldHVybiBmdW5jdGlvbihzY29wZSkgewogICAgICAgIHZhciByZXN1bHRzID0gc3VwZXJmdW5jKHNjb3BlKTsKICAgICAgICAvLyBGaWx0ZXIgb3V0IFNoaW55IG91dHB1dHMsIHdlIG9ubHkgd2FudCB0aGUgc3RhdGljIGtpbmQKICAgICAgICByZXR1cm4gZmlsdGVyQnlDbGFzcyhyZXN1bHRzLCAiaHRtbC13aWRnZXQtb3V0cHV0IiwgZmFsc2UpOwogICAgICB9OwogICAgfSk7CiAgICB3aW5kb3cuSFRNTFdpZGdldHMud2lkZ2V0cy5wdXNoKHN0YXRpY0JpbmRpbmcpOwoKICAgIGlmIChzaGlueU1vZGUpIHsKICAgICAgLy8gU2hpbnkgaXMgcnVubmluZy4gUmVnaXN0ZXIgdGhlIGRlZmluaXRpb24gd2l0aCBhbiBvdXRwdXQgYmluZGluZy4KICAgICAgLy8gVGhlIGRlZmluaXRpb24gaXRzZWxmIHdpbGwgbm90IGJlIHRoZSBvdXRwdXQgYmluZGluZywgaW5zdGVhZAogICAgICAvLyB3ZSB3aWxsIG1ha2UgYW4gb3V0cHV0IGJpbmRpbmcgb2JqZWN0IHRoYXQgZGVsZWdhdGVzIHRvIHRoZQogICAgICAvLyBkZWZpbml0aW9uLiBUaGlzIGlzIGJlY2F1c2Ugd2UgZm9vbGlzaGx5IHVzZWQgdGhlIHNhbWUgbWV0aG9kCiAgICAgIC8vIG5hbWUgKHJlbmRlclZhbHVlKSBmb3IgaHRtbHdpZGdldHMgZGVmaW5pdGlvbiBhbmQgU2hpbnkgYmluZGluZ3MKICAgICAgLy8gYnV0IHRoZXkgYWN0dWFsbHkgaGF2ZSBxdWl0ZSBkaWZmZXJlbnQgc2VtYW50aWNzICh0aGUgU2hpbnkKICAgICAgLy8gYmluZGluZ3MgcmVjZWl2ZSBkYXRhIHRoYXQgaW5jbHVkZXMgbG90cyBvZiBtZXRhZGF0YSB0aGF0IGl0CiAgICAgIC8vIHN0cmlwcyBvZmYgYmVmb3JlIGNhbGxpbmcgaHRtbHdpZGdldHMgcmVuZGVyVmFsdWUpLiBXZSBjYW4ndAogICAgICAvLyBqdXN0IGlnbm9yZSB0aGUgZGlmZmVyZW5jZSBiZWNhdXNlIGluIHNvbWUgd2lkZ2V0cyBpdCdzIGhlbHBmdWwKICAgICAgLy8gdG8gY2FsbCB0aGlzLnJlbmRlclZhbHVlKCkgZnJvbSBpbnNpZGUgb2YgcmVzaXplKCksIGFuZCBpZgogICAgICAvLyB3ZSdyZSBub3QgZGVsZWdhdGluZywgdGhlbiB0aGF0IGNhbGwgd2lsbCBnbyB0byB0aGUgU2hpbnkKICAgICAgLy8gdmVyc2lvbiBpbnN0ZWFkIG9mIHRoZSBodG1sd2lkZ2V0cyB2ZXJzaW9uLgoKICAgICAgLy8gTWVyZ2UgZGVmYXVsdHMgd2l0aCBkZWZpbml0aW9uLCB3aXRob3V0IG11dGF0aW5nIGVpdGhlci4KICAgICAgdmFyIGJpbmRpbmdEZWYgPSBleHRlbmQoe30sIGRlZmF1bHRzLCBkZWZpbml0aW9uKTsKCiAgICAgIC8vIFRoaXMgb2JqZWN0IHdpbGwgYmUgb3VyIGFjdHVhbCBTaGlueSBiaW5kaW5nLgogICAgICB2YXIgc2hpbnlCaW5kaW5nID0gbmV3IFNoaW55Lk91dHB1dEJpbmRpbmcoKTsKCiAgICAgIC8vIFdpdGggYSBmZXcgZXhjZXB0aW9ucywgd2UnbGwgd2FudCB0byBzaW1wbHkgdXNlIHRoZSBiaW5kaW5nRGVmJ3MKICAgICAgLy8gdmVyc2lvbiBvZiBtZXRob2RzIGlmIHRoZXkgYXJlIGF2YWlsYWJsZSwgb3RoZXJ3aXNlIGZhbGwgYmFjayB0bwogICAgICAvLyBTaGlueSdzIGRlZmF1bHRzLiBOT1RFOiBJZiBTaGlueSdzIG91dHB1dCBiaW5kaW5ncyBnYWluIGFkZGl0aW9uYWwKICAgICAgLy8gbWV0aG9kcyBpbiB0aGUgZnV0dXJlLCBhbmQgd2Ugd2FudCB0aGVtIHRvIGJlIG92ZXJyaWRlYWJsZSBieQogICAgICAvLyBIVE1MV2lkZ2V0IGJpbmRpbmcgZGVmaW5pdGlvbnMsIHRoZW4gd2UnbGwgbmVlZCB0byBhZGQgdGhlbSB0byB0aGlzCiAgICAgIC8vIGxpc3QuCiAgICAgIGRlbGVnYXRlTWV0aG9kKHNoaW55QmluZGluZywgYmluZGluZ0RlZiwgImdldElkIik7CiAgICAgIGRlbGVnYXRlTWV0aG9kKHNoaW55QmluZGluZywgYmluZGluZ0RlZiwgIm9uVmFsdWVDaGFuZ2UiKTsKICAgICAgZGVsZWdhdGVNZXRob2Qoc2hpbnlCaW5kaW5nLCBiaW5kaW5nRGVmLCAib25WYWx1ZUVycm9yIik7CiAgICAgIGRlbGVnYXRlTWV0aG9kKHNoaW55QmluZGluZywgYmluZGluZ0RlZiwgInJlbmRlckVycm9yIik7CiAgICAgIGRlbGVnYXRlTWV0aG9kKHNoaW55QmluZGluZywgYmluZGluZ0RlZiwgImNsZWFyRXJyb3IiKTsKICAgICAgZGVsZWdhdGVNZXRob2Qoc2hpbnlCaW5kaW5nLCBiaW5kaW5nRGVmLCAic2hvd1Byb2dyZXNzIik7CgogICAgICAvLyBUaGUgZmluZCwgcmVuZGVyVmFsdWUsIGFuZCByZXNpemUgYXJlIGhhbmRsZWQgZGlmZmVyZW50bHksIGJlY2F1c2Ugd2UKICAgICAgLy8gd2FudCB0byBhY3R1YWxseSBkZWNvcmF0ZSB0aGUgYmVoYXZpb3Igb2YgdGhlIGJpbmRpbmdEZWYgbWV0aG9kcy4KCiAgICAgIHNoaW55QmluZGluZy5maW5kID0gZnVuY3Rpb24oc2NvcGUpIHsKICAgICAgICB2YXIgcmVzdWx0cyA9IGJpbmRpbmdEZWYuZmluZChzY29wZSk7CgogICAgICAgIC8vIE9ubHkgcmV0dXJuIGVsZW1lbnRzIHRoYXQgYXJlIFNoaW55IG91dHB1dHMsIG5vdCBzdGF0aWMgb25lcwogICAgICAgIHZhciBkeW5hbWljUmVzdWx0cyA9IHJlc3VsdHMuZmlsdGVyKCIuaHRtbC13aWRnZXQtb3V0cHV0Iik7CgogICAgICAgIC8vIEl0J3MgcG9zc2libGUgdGhhdCB3aGF0ZXZlciBjYXVzZWQgU2hpbnkgdG8gdGhpbmsgdGhlcmUgbWlnaHQgYmUKICAgICAgICAvLyBuZXcgZHluYW1pYyBvdXRwdXRzLCBhbHNvIGNhdXNlZCB0aGVyZSB0byBiZSBuZXcgc3RhdGljIG91dHB1dHMuCiAgICAgICAgLy8gU2luY2UgdGhlcmUgbWlnaHQgYmUgbG90cyBvZiBkaWZmZXJlbnQgaHRtbHdpZGdldHMgYmluZGluZ3MsIHdlCiAgICAgICAgLy8gc2NoZWR1bGUgZXhlY3V0aW9uIGZvciBsYXRlci0tbm8gbmVlZCB0byBzdGF0aWNSZW5kZXIgbXVsdGlwbGUKICAgICAgICAvLyB0aW1lcy4KICAgICAgICBpZiAocmVzdWx0cy5sZW5ndGggIT09IGR5bmFtaWNSZXN1bHRzLmxlbmd0aCkKICAgICAgICAgIHNjaGVkdWxlU3RhdGljUmVuZGVyKCk7CgogICAgICAgIHJldHVybiBkeW5hbWljUmVzdWx0czsKICAgICAgfTsKCiAgICAgIC8vIFdyYXAgcmVuZGVyVmFsdWUgdG8gaGFuZGxlIGluaXRpYWxpemF0aW9uLCB3aGljaCB1bmZvcnR1bmF0ZWx5IGlzbid0CiAgICAgIC8vIHN1cHBvcnRlZCBuYXRpdmVseSBieSBTaGlueSBhdCB0aGUgdGltZSBvZiB0aGlzIHdyaXRpbmcuCgogICAgICBzaGlueUJpbmRpbmcucmVuZGVyVmFsdWUgPSBmdW5jdGlvbihlbCwgZGF0YSkgewogICAgICAgIC8vIFJlc29sdmUgc3RyaW5ncyBtYXJrZWQgYXMgamF2YXNjcmlwdCBsaXRlcmFscyB0byBvYmplY3RzCiAgICAgICAgaWYgKCEoZGF0YS5ldmFscyBpbnN0YW5jZW9mIEFycmF5KSkgZGF0YS5ldmFscyA9IFtkYXRhLmV2YWxzXTsKICAgICAgICBmb3IgKHZhciBpID0gMDsgZGF0YS5ldmFscyAmJiBpIDwgZGF0YS5ldmFscy5sZW5ndGg7IGkrKykgewogICAgICAgICAgd2luZG93LkhUTUxXaWRnZXRzLmV2YWx1YXRlU3RyaW5nTWVtYmVyKGRhdGEueCwgZGF0YS5ldmFsc1tpXSk7CiAgICAgICAgfQogICAgICAgIGlmICghYmluZGluZ0RlZi5yZW5kZXJPbk51bGxWYWx1ZSkgewogICAgICAgICAgaWYgKGRhdGEueCA9PT0gbnVsbCkgewogICAgICAgICAgICBlbC5zdHlsZS52aXNpYmlsaXR5ID0gImhpZGRlbiI7CiAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgIGVsLnN0eWxlLnZpc2liaWxpdHkgPSAiaW5oZXJpdCI7CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIGlmICghZWxlbWVudERhdGEoZWwsICJpbml0aWFsaXplZCIpKSB7CiAgICAgICAgICBpbml0U2l6aW5nKGVsKTsKCiAgICAgICAgICBlbGVtZW50RGF0YShlbCwgImluaXRpYWxpemVkIiwgdHJ1ZSk7CiAgICAgICAgICBpZiAoYmluZGluZ0RlZi5pbml0aWFsaXplKSB7CiAgICAgICAgICAgIHZhciByZXN1bHQgPSBiaW5kaW5nRGVmLmluaXRpYWxpemUoZWwsIGVsLm9mZnNldFdpZHRoLAogICAgICAgICAgICAgIGVsLm9mZnNldEhlaWdodCk7CiAgICAgICAgICAgIGVsZW1lbnREYXRhKGVsLCAiaW5pdF9yZXN1bHQiLCByZXN1bHQpOwogICAgICAgICAgfQogICAgICAgICAgZXZhbEFuZFJ1bihkYXRhLmpzSG9va3MucmVuZGVyLCBlbGVtZW50RGF0YShlbCwgImluaXRfcmVzdWx0IiksIFtlbCwgZGF0YS54XSk7CiAgICAgICAgfQogICAgICAgIFNoaW55LnJlbmRlckRlcGVuZGVuY2llcyhkYXRhLmRlcHMpOwogICAgICAgIGJpbmRpbmdEZWYucmVuZGVyVmFsdWUoZWwsIGRhdGEueCwgZWxlbWVudERhdGEoZWwsICJpbml0X3Jlc3VsdCIpKTsKICAgICAgfTsKCiAgICAgIC8vIE9ubHkgb3ZlcnJpZGUgcmVzaXplIGlmIGJpbmRpbmdEZWYgaW1wbGVtZW50cyBpdAogICAgICBpZiAoYmluZGluZ0RlZi5yZXNpemUpIHsKICAgICAgICBzaGlueUJpbmRpbmcucmVzaXplID0gZnVuY3Rpb24oZWwsIHdpZHRoLCBoZWlnaHQpIHsKICAgICAgICAgIC8vIFNoaW55IGNhbiBjYWxsIHJlc2l6ZSBiZWZvcmUgaW5pdGlhbGl6ZS9yZW5kZXJWYWx1ZSBoYXZlIGJlZW4KICAgICAgICAgIC8vIGNhbGxlZCwgd2hpY2ggZG9lc24ndCBtYWtlIHNlbnNlIGZvciB3aWRnZXRzLgogICAgICAgICAgaWYgKGVsZW1lbnREYXRhKGVsLCAiaW5pdGlhbGl6ZWQiKSkgewogICAgICAgICAgICBiaW5kaW5nRGVmLnJlc2l6ZShlbCwgd2lkdGgsIGhlaWdodCwgZWxlbWVudERhdGEoZWwsICJpbml0X3Jlc3VsdCIpKTsKICAgICAgICAgIH0KICAgICAgICB9OwogICAgICB9CgogICAgICBTaGlueS5vdXRwdXRCaW5kaW5ncy5yZWdpc3RlcihzaGlueUJpbmRpbmcsIGJpbmRpbmdEZWYubmFtZSk7CiAgICB9CiAgfTsKCiAgdmFyIHNjaGVkdWxlU3RhdGljUmVuZGVyVGltZXJJZCA9IG51bGw7CiAgZnVuY3Rpb24gc2NoZWR1bGVTdGF0aWNSZW5kZXIoKSB7CiAgICBpZiAoIXNjaGVkdWxlU3RhdGljUmVuZGVyVGltZXJJZCkgewogICAgICBzY2hlZHVsZVN0YXRpY1JlbmRlclRpbWVySWQgPSBzZXRUaW1lb3V0KGZ1bmN0aW9uKCkgewogICAgICAgIHNjaGVkdWxlU3RhdGljUmVuZGVyVGltZXJJZCA9IG51bGw7CiAgICAgICAgd2luZG93LkhUTUxXaWRnZXRzLnN0YXRpY1JlbmRlcigpOwogICAgICB9LCAxKTsKICAgIH0KICB9CgogIC8vIFJlbmRlciBzdGF0aWMgd2lkZ2V0cyBhZnRlciB0aGUgZG9jdW1lbnQgZmluaXNoZXMgbG9hZGluZwogIC8vIFN0YXRpY2FsbHkgcmVuZGVyIGFsbCBlbGVtZW50cyB0aGF0IGFyZSBvZiB0aGlzIHdpZGdldCdzIGNsYXNzCiAgd2luZG93LkhUTUxXaWRnZXRzLnN0YXRpY1JlbmRlciA9IGZ1bmN0aW9uKCkgewogICAgdmFyIGJpbmRpbmdzID0gd2luZG93LkhUTUxXaWRnZXRzLndpZGdldHMgfHwgW107CiAgICBmb3JFYWNoKGJpbmRpbmdzLCBmdW5jdGlvbihiaW5kaW5nKSB7CiAgICAgIHZhciBtYXRjaGVzID0gYmluZGluZy5maW5kKGRvY3VtZW50LmRvY3VtZW50RWxlbWVudCk7CiAgICAgIGZvckVhY2gobWF0Y2hlcywgZnVuY3Rpb24oZWwpIHsKICAgICAgICB2YXIgc2l6ZU9iaiA9IGluaXRTaXppbmcoZWwsIGJpbmRpbmcpOwoKICAgICAgICBpZiAoaGFzQ2xhc3MoZWwsICJodG1sLXdpZGdldC1zdGF0aWMtYm91bmQiKSkKICAgICAgICAgIHJldHVybjsKICAgICAgICBlbC5jbGFzc05hbWUgPSBlbC5jbGFzc05hbWUgKyAiIGh0bWwtd2lkZ2V0LXN0YXRpYy1ib3VuZCI7CgogICAgICAgIHZhciBpbml0UmVzdWx0OwogICAgICAgIGlmIChiaW5kaW5nLmluaXRpYWxpemUpIHsKICAgICAgICAgIGluaXRSZXN1bHQgPSBiaW5kaW5nLmluaXRpYWxpemUoZWwsCiAgICAgICAgICAgIHNpemVPYmogPyBzaXplT2JqLmdldFdpZHRoKCkgOiBlbC5vZmZzZXRXaWR0aCwKICAgICAgICAgICAgc2l6ZU9iaiA/IHNpemVPYmouZ2V0SGVpZ2h0KCkgOiBlbC5vZmZzZXRIZWlnaHQKICAgICAgICAgICk7CiAgICAgICAgICBlbGVtZW50RGF0YShlbCwgImluaXRfcmVzdWx0IiwgaW5pdFJlc3VsdCk7CiAgICAgICAgfQoKICAgICAgICBpZiAoYmluZGluZy5yZXNpemUpIHsKICAgICAgICAgIHZhciBsYXN0U2l6ZSA9IHt9OwogICAgICAgICAgdmFyIHJlc2l6ZUhhbmRsZXIgPSBmdW5jdGlvbihlKSB7CiAgICAgICAgICAgIHZhciBzaXplID0gewogICAgICAgICAgICAgIHc6IHNpemVPYmogPyBzaXplT2JqLmdldFdpZHRoKCkgOiBlbC5vZmZzZXRXaWR0aCwKICAgICAgICAgICAgICBoOiBzaXplT2JqID8gc2l6ZU9iai5nZXRIZWlnaHQoKSA6IGVsLm9mZnNldEhlaWdodAogICAgICAgICAgICB9OwogICAgICAgICAgICBpZiAoc2l6ZS53ID09PSAwICYmIHNpemUuaCA9PT0gMCkKICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgIGlmIChzaXplLncgPT09IGxhc3RTaXplLncgJiYgc2l6ZS5oID09PSBsYXN0U2l6ZS5oKQogICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgbGFzdFNpemUgPSBzaXplOwogICAgICAgICAgICBiaW5kaW5nLnJlc2l6ZShlbCwgc2l6ZS53LCBzaXplLmgsIGluaXRSZXN1bHQpOwogICAgICAgICAgfTsKCiAgICAgICAgICBvbih3aW5kb3csICJyZXNpemUiLCByZXNpemVIYW5kbGVyKTsKCiAgICAgICAgICAvLyBUaGlzIGlzIG5lZWRlZCBmb3IgY2FzZXMgd2hlcmUgd2UncmUgcnVubmluZyBpbiBhIFNoaW55CiAgICAgICAgICAvLyBhcHAsIGJ1dCB0aGUgd2lkZ2V0IGl0c2VsZiBpcyBub3QgYSBTaGlueSBvdXRwdXQsIGJ1dAogICAgICAgICAgLy8gcmF0aGVyIGEgc2ltcGxlIHN0YXRpYyB3aWRnZXQuIE9uZSBleGFtcGxlIG9mIHRoaXMgaXMKICAgICAgICAgIC8vIGFuIHJtYXJrZG93biBkb2N1bWVudCB0aGF0IGhhcyBydW50aW1lOnNoaW55IGFuZCB3aWRnZXQKICAgICAgICAgIC8vIHRoYXQgaXNuJ3QgaW4gYSByZW5kZXIgZnVuY3Rpb24uIFNoaW55IG9ubHkga25vd3MgdG8KICAgICAgICAgIC8vIGNhbGwgcmVzaXplIGhhbmRsZXJzIGZvciBTaGlueSBvdXRwdXRzLCBub3QgZm9yIHN0YXRpYwogICAgICAgICAgLy8gd2lkZ2V0cywgc28gd2UgZG8gaXQgb3Vyc2VsdmVzLgogICAgICAgICAgaWYgKHdpbmRvdy5qUXVlcnkpIHsKICAgICAgICAgICAgd2luZG93LmpRdWVyeShkb2N1bWVudCkub24oInNob3duLmh0bWx3aWRnZXRzIHNob3duLmJzLnRhYi5odG1sd2lkZ2V0cyIsIHJlc2l6ZUhhbmRsZXIpOwogICAgICAgICAgICB3aW5kb3cualF1ZXJ5KGRvY3VtZW50KS5vbigiaGlkZGVuLmh0bWx3aWRnZXRzIGhpZGRlbi5icy50YWIuaHRtbHdpZGdldHMiLCByZXNpemVIYW5kbGVyKTsKICAgICAgICAgIH0KCiAgICAgICAgICAvLyBUaGlzIGlzIG5lZWRlZCBmb3IgdGhlIHNwZWNpZmljIGNhc2Ugb2YgaW9zbGlkZXMsIHdoaWNoCiAgICAgICAgICAvLyBmbGlwcyBzbGlkZXMgYmV0d2VlbiBkaXNwbGF5Om5vbmUgYW5kIGRpc3BsYXk6YmxvY2suCiAgICAgICAgICAvLyBJZGVhbGx5IHdlIHdvdWxkIG5vdCBoYXZlIHRvIGhhdmUgaW9zbGlkZS1zcGVjaWZpYyBjb2RlCiAgICAgICAgICAvLyBoZXJlLCBidXQgcmF0aGVyIGhhdmUgaW9zbGlkZXMgcmFpc2UgYSBnZW5lcmljIGV2ZW50LAogICAgICAgICAgLy8gYnV0IHRoZSBybWFya2Rvd24gcGFja2FnZSBqdXN0IHdlbnQgdG8gQ1JBTiBzbyB0aGUKICAgICAgICAgIC8vIHdpbmRvdyB0byBnZXR0aW5nIHRoYXQgZml4ZWQgbWF5IGJlIGxvbmcuCiAgICAgICAgICBpZiAod2luZG93LmFkZEV2ZW50TGlzdGVuZXIpIHsKICAgICAgICAgICAgLy8gSXQncyBPSyB0byBsaW1pdCB0aGlzIHRvIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyCiAgICAgICAgICAgIC8vIGJyb3dzZXJzIGJlY2F1c2UgaW9zbGlkZXMgaXRzZWxmIG9ubHkgc3VwcG9ydHMKICAgICAgICAgICAgLy8gc3VjaCBicm93c2Vycy4KICAgICAgICAgICAgb24oZG9jdW1lbnQsICJzbGlkZWVudGVyIiwgcmVzaXplSGFuZGxlcik7CiAgICAgICAgICAgIG9uKGRvY3VtZW50LCAic2xpZGVsZWF2ZSIsIHJlc2l6ZUhhbmRsZXIpOwogICAgICAgICAgfQogICAgICAgIH0KCiAgICAgICAgdmFyIHNjcmlwdERhdGEgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCJzY3JpcHRbZGF0YS1mb3I9JyIgKyBlbC5pZCArICInXVt0eXBlPSdhcHBsaWNhdGlvbi9qc29uJ10iKTsKICAgICAgICBpZiAoc2NyaXB0RGF0YSkgewogICAgICAgICAgdmFyIGRhdGEgPSBKU09OLnBhcnNlKHNjcmlwdERhdGEudGV4dENvbnRlbnQgfHwgc2NyaXB0RGF0YS50ZXh0KTsKICAgICAgICAgIC8vIFJlc29sdmUgc3RyaW5ncyBtYXJrZWQgYXMgamF2YXNjcmlwdCBsaXRlcmFscyB0byBvYmplY3RzCiAgICAgICAgICBpZiAoIShkYXRhLmV2YWxzIGluc3RhbmNlb2YgQXJyYXkpKSBkYXRhLmV2YWxzID0gW2RhdGEuZXZhbHNdOwogICAgICAgICAgZm9yICh2YXIgayA9IDA7IGRhdGEuZXZhbHMgJiYgayA8IGRhdGEuZXZhbHMubGVuZ3RoOyBrKyspIHsKICAgICAgICAgICAgd2luZG93LkhUTUxXaWRnZXRzLmV2YWx1YXRlU3RyaW5nTWVtYmVyKGRhdGEueCwgZGF0YS5ldmFsc1trXSk7CiAgICAgICAgICB9CiAgICAgICAgICBiaW5kaW5nLnJlbmRlclZhbHVlKGVsLCBkYXRhLngsIGluaXRSZXN1bHQpOwogICAgICAgICAgZXZhbEFuZFJ1bihkYXRhLmpzSG9va3MucmVuZGVyLCBpbml0UmVzdWx0LCBbZWwsIGRhdGEueF0pOwogICAgICAgIH0KICAgICAgfSk7CiAgICB9KTsKCiAgICBpbnZva2VQb3N0UmVuZGVySGFuZGxlcnMoKTsKICB9CgogIC8vIFdhaXQgdW50aWwgYWZ0ZXIgdGhlIGRvY3VtZW50IGhhcyBsb2FkZWQgdG8gcmVuZGVyIHRoZSB3aWRnZXRzLgogIGlmIChkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKSB7CiAgICBkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCJET01Db250ZW50TG9hZGVkIiwgZnVuY3Rpb24oKSB7CiAgICAgIGRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoIkRPTUNvbnRlbnRMb2FkZWQiLCBhcmd1bWVudHMuY2FsbGVlLCBmYWxzZSk7CiAgICAgIHdpbmRvdy5IVE1MV2lkZ2V0cy5zdGF0aWNSZW5kZXIoKTsKICAgIH0sIGZhbHNlKTsKICB9IGVsc2UgaWYgKGRvY3VtZW50LmF0dGFjaEV2ZW50KSB7CiAgICBkb2N1bWVudC5hdHRhY2hFdmVudCgib25yZWFkeXN0YXRlY2hhbmdlIiwgZnVuY3Rpb24oKSB7CiAgICAgIGlmIChkb2N1bWVudC5yZWFkeVN0YXRlID09PSAiY29tcGxldGUiKSB7CiAgICAgICAgZG9jdW1lbnQuZGV0YWNoRXZlbnQoIm9ucmVhZHlzdGF0ZWNoYW5nZSIsIGFyZ3VtZW50cy5jYWxsZWUpOwogICAgICAgIHdpbmRvdy5IVE1MV2lkZ2V0cy5zdGF0aWNSZW5kZXIoKTsKICAgICAgfQogICAgfSk7CiAgfQoKCiAgd2luZG93LkhUTUxXaWRnZXRzLmdldEF0dGFjaG1lbnRVcmwgPSBmdW5jdGlvbihkZXBuYW1lLCBrZXkpIHsKICAgIC8vIElmIG5vIGtleSwgZGVmYXVsdCB0byB0aGUgZmlyc3QgaXRlbQogICAgaWYgKHR5cGVvZihrZXkpID09PSAidW5kZWZpbmVkIikKICAgICAga2V5ID0gMTsKCiAgICB2YXIgbGluayA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGRlcG5hbWUgKyAiLSIgKyBrZXkgKyAiLWF0dGFjaG1lbnQiKTsKICAgIGlmICghbGluaykgewogICAgICB0aHJvdyBuZXcgRXJyb3IoIkF0dGFjaG1lbnQgIiArIGRlcG5hbWUgKyAiLyIgKyBrZXkgKyAiIG5vdCBmb3VuZCBpbiBkb2N1bWVudCIpOwogICAgfQogICAgcmV0dXJuIGxpbmsuZ2V0QXR0cmlidXRlKCJocmVmIik7CiAgfTsKCiAgd2luZG93LkhUTUxXaWRnZXRzLmRhdGFmcmFtZVRvRDMgPSBmdW5jdGlvbihkZikgewogICAgdmFyIG5hbWVzID0gW107CiAgICB2YXIgbGVuZ3RoOwogICAgZm9yICh2YXIgbmFtZSBpbiBkZikgewogICAgICAgIGlmIChkZi5oYXNPd25Qcm9wZXJ0eShuYW1lKSkKICAgICAgICAgICAgbmFtZXMucHVzaChuYW1lKTsKICAgICAgICBpZiAodHlwZW9mKGRmW25hbWVdKSAhPT0gIm9iamVjdCIgfHwgdHlwZW9mKGRmW25hbWVdLmxlbmd0aCkgPT09ICJ1bmRlZmluZWQiKSB7CiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcigiQWxsIGZpZWxkcyBtdXN0IGJlIGFycmF5cyIpOwogICAgICAgIH0gZWxzZSBpZiAodHlwZW9mKGxlbmd0aCkgIT09ICJ1bmRlZmluZWQiICYmIGxlbmd0aCAhPT0gZGZbbmFtZV0ubGVuZ3RoKSB7CiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcigiQWxsIGZpZWxkcyBtdXN0IGJlIGFycmF5cyBvZiB0aGUgc2FtZSBsZW5ndGgiKTsKICAgICAgICB9CiAgICAgICAgbGVuZ3RoID0gZGZbbmFtZV0ubGVuZ3RoOwogICAgfQogICAgdmFyIHJlc3VsdHMgPSBbXTsKICAgIHZhciBpdGVtOwogICAgZm9yICh2YXIgcm93ID0gMDsgcm93IDwgbGVuZ3RoOyByb3crKykgewogICAgICAgIGl0ZW0gPSB7fTsKICAgICAgICBmb3IgKHZhciBjb2wgPSAwOyBjb2wgPCBuYW1lcy5sZW5ndGg7IGNvbCsrKSB7CiAgICAgICAgICAgIGl0ZW1bbmFtZXNbY29sXV0gPSBkZltuYW1lc1tjb2xdXVtyb3ddOwogICAgICAgIH0KICAgICAgICByZXN1bHRzLnB1c2goaXRlbSk7CiAgICB9CiAgICByZXR1cm4gcmVzdWx0czsKICB9OwoKICB3aW5kb3cuSFRNTFdpZGdldHMudHJhbnNwb3NlQXJyYXkyRCA9IGZ1bmN0aW9uKGFycmF5KSB7CiAgICAgIGlmIChhcnJheS5sZW5ndGggPT09IDApIHJldHVybiBhcnJheTsKICAgICAgdmFyIG5ld0FycmF5ID0gYXJyYXlbMF0ubWFwKGZ1bmN0aW9uKGNvbCwgaSkgewogICAgICAgICAgcmV0dXJuIGFycmF5Lm1hcChmdW5jdGlvbihyb3cpIHsKICAgICAgICAgICAgICByZXR1cm4gcm93W2ldCiAgICAgICAgICB9KQogICAgICB9KTsKICAgICAgcmV0dXJuIG5ld0FycmF5OwogIH07CiAgLy8gU3BsaXQgdmFsdWUgYXQgc3BsaXRDaGFyLCBidXQgYWxsb3cgc3BsaXRDaGFyIHRvIGJlIGVzY2FwZWQKICAvLyB1c2luZyBlc2NhcGVDaGFyLiBBbnkgb3RoZXIgY2hhcmFjdGVycyBlc2NhcGVkIGJ5IGVzY2FwZUNoYXIKICAvLyB3aWxsIGJlIGluY2x1ZGVkIGFzIHVzdWFsIChpbmNsdWRpbmcgZXNjYXBlQ2hhciBpdHNlbGYpLgogIGZ1bmN0aW9uIHNwbGl0V2l0aEVzY2FwZSh2YWx1ZSwgc3BsaXRDaGFyLCBlc2NhcGVDaGFyKSB7CiAgICB2YXIgcmVzdWx0cyA9IFtdOwogICAgdmFyIGVzY2FwZU1vZGUgPSBmYWxzZTsKICAgIHZhciBjdXJyZW50UmVzdWx0ID0gIiI7CiAgICBmb3IgKHZhciBwb3MgPSAwOyBwb3MgPCB2YWx1ZS5sZW5ndGg7IHBvcysrKSB7CiAgICAgIGlmICghZXNjYXBlTW9kZSkgewogICAgICAgIGlmICh2YWx1ZVtwb3NdID09PSBzcGxpdENoYXIpIHsKICAgICAgICAgIHJlc3VsdHMucHVzaChjdXJyZW50UmVzdWx0KTsKICAgICAgICAgIGN1cnJlbnRSZXN1bHQgPSAiIjsKICAgICAgICB9IGVsc2UgaWYgKHZhbHVlW3Bvc10gPT09IGVzY2FwZUNoYXIpIHsKICAgICAgICAgIGVzY2FwZU1vZGUgPSB0cnVlOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICBjdXJyZW50UmVzdWx0ICs9IHZhbHVlW3Bvc107CiAgICAgICAgfQogICAgICB9IGVsc2UgewogICAgICAgIGN1cnJlbnRSZXN1bHQgKz0gdmFsdWVbcG9zXTsKICAgICAgICBlc2NhcGVNb2RlID0gZmFsc2U7CiAgICAgIH0KICAgIH0KICAgIGlmIChjdXJyZW50UmVzdWx0ICE9PSAiIikgewogICAgICByZXN1bHRzLnB1c2goY3VycmVudFJlc3VsdCk7CiAgICB9CiAgICByZXR1cm4gcmVzdWx0czsKICB9CiAgLy8gRnVuY3Rpb24gYXV0aG9yZWQgYnkgWWlodWkvSkogQWxsYWlyZQogIHdpbmRvdy5IVE1MV2lkZ2V0cy5ldmFsdWF0ZVN0cmluZ01lbWJlciA9IGZ1bmN0aW9uKG8sIG1lbWJlcikgewogICAgdmFyIHBhcnRzID0gc3BsaXRXaXRoRXNjYXBlKG1lbWJlciwgJy4nLCAnXFwnKTsKICAgIGZvciAodmFyIGkgPSAwLCBsID0gcGFydHMubGVuZ3RoOyBpIDwgbDsgaSsrKSB7CiAgICAgIHZhciBwYXJ0ID0gcGFydHNbaV07CiAgICAgIC8vIHBhcnQgbWF5IGJlIGEgY2hhcmFjdGVyIG9yICdudW1lcmljJyBtZW1iZXIgbmFtZQogICAgICBpZiAobyAhPT0gbnVsbCAmJiB0eXBlb2YgbyA9PT0gIm9iamVjdCIgJiYgcGFydCBpbiBvKSB7CiAgICAgICAgaWYgKGkgPT0gKGwgLSAxKSkgeyAvLyBpZiB3ZSBhcmUgYXQgdGhlIGVuZCBvZiB0aGUgbGluZSB0aGVuIGV2YWx1bGF0ZQogICAgICAgICAgaWYgKHR5cGVvZiBvW3BhcnRdID09PSAic3RyaW5nIikKICAgICAgICAgICAgb1twYXJ0XSA9IGV2YWwoIigiICsgb1twYXJ0XSArICIpIik7CiAgICAgICAgfSBlbHNlIHsgLy8gb3RoZXJ3aXNlIGNvbnRpbnVlIHRvIG5leHQgZW1iZWRkZWQgb2JqZWN0CiAgICAgICAgICBvID0gb1twYXJ0XTsKICAgICAgICB9CiAgICAgIH0KICAgIH0KICB9OwoKICAvLyBSZXRyaWV2ZSB0aGUgSFRNTFdpZGdldCBpbnN0YW5jZSAoaS5lLiB0aGUgcmV0dXJuIHZhbHVlIG9mIGFuCiAgLy8gSFRNTFdpZGdldCBiaW5kaW5nJ3MgaW5pdGlhbGl6ZSgpIG9yIGZhY3RvcnkoKSBmdW5jdGlvbikKICAvLyBhc3NvY2lhdGVkIHdpdGggYW4gZWxlbWVudCwgb3IgbnVsbCBpZiBub25lLgogIHdpbmRvdy5IVE1MV2lkZ2V0cy5nZXRJbnN0YW5jZSA9IGZ1bmN0aW9uKGVsKSB7CiAgICByZXR1cm4gZWxlbWVudERhdGEoZWwsICJpbml0X3Jlc3VsdCIpOwogIH07CgogIC8vIEZpbmRzIHRoZSBmaXJzdCBlbGVtZW50IGluIHRoZSBzY29wZSB0aGF0IG1hdGNoZXMgdGhlIHNlbGVjdG9yLAogIC8vIGFuZCByZXR1cm5zIHRoZSBIVE1MV2lkZ2V0IGluc3RhbmNlIChpLmUuIHRoZSByZXR1cm4gdmFsdWUgb2YKICAvLyBhbiBIVE1MV2lkZ2V0IGJpbmRpbmcncyBpbml0aWFsaXplKCkgb3IgZmFjdG9yeSgpIGZ1bmN0aW9uKQogIC8vIGFzc29jaWF0ZWQgd2l0aCB0aGF0IGVsZW1lbnQsIGlmIGFueS4gSWYgbm8gZWxlbWVudCBtYXRjaGVzIHRoZQogIC8vIHNlbGVjdG9yLCBvciB0aGUgZmlyc3QgbWF0Y2hpbmcgZWxlbWVudCBoYXMgbm8gSFRNTFdpZGdldAogIC8vIGluc3RhbmNlIGFzc29jaWF0ZWQgd2l0aCBpdCwgdGhlbiBudWxsIGlzIHJldHVybmVkLgogIC8vCiAgLy8gVGhlIHNjb3BlIGFyZ3VtZW50IGlzIG9wdGlvbmFsLCBhbmQgZGVmYXVsdHMgdG8gd2luZG93LmRvY3VtZW50LgogIHdpbmRvdy5IVE1MV2lkZ2V0cy5maW5kID0gZnVuY3Rpb24oc2NvcGUsIHNlbGVjdG9yKSB7CiAgICBpZiAoYXJndW1lbnRzLmxlbmd0aCA9PSAxKSB7CiAgICAgIHNlbGVjdG9yID0gc2NvcGU7CiAgICAgIHNjb3BlID0gZG9jdW1lbnQ7CiAgICB9CgogICAgdmFyIGVsID0gc2NvcGUucXVlcnlTZWxlY3RvcihzZWxlY3Rvcik7CiAgICBpZiAoZWwgPT09IG51bGwpIHsKICAgICAgcmV0dXJuIG51bGw7CiAgICB9IGVsc2UgewogICAgICByZXR1cm4gd2luZG93LkhUTUxXaWRnZXRzLmdldEluc3RhbmNlKGVsKTsKICAgIH0KICB9OwoKICAvLyBGaW5kcyBhbGwgZWxlbWVudHMgaW4gdGhlIHNjb3BlIHRoYXQgbWF0Y2ggdGhlIHNlbGVjdG9yLCBhbmQKICAvLyByZXR1cm5zIHRoZSBIVE1MV2lkZ2V0IGluc3RhbmNlcyAoaS5lLiB0aGUgcmV0dXJuIHZhbHVlcyBvZgogIC8vIGFuIEhUTUxXaWRnZXQgYmluZGluZydzIGluaXRpYWxpemUoKSBvciBmYWN0b3J5KCkgZnVuY3Rpb24pCiAgLy8gYXNzb2NpYXRlZCB3aXRoIHRoZSBlbGVtZW50cywgaW4gYW4gYXJyYXkuIElmIGVsZW1lbnRzIHRoYXQKICAvLyBtYXRjaCB0aGUgc2VsZWN0b3IgZG9uJ3QgaGF2ZSBhbiBhc3NvY2lhdGVkIEhUTUxXaWRnZXQKICAvLyBpbnN0YW5jZSwgdGhlIHJldHVybmVkIGFycmF5IHdpbGwgY29udGFpbiBudWxscy4KICAvLwogIC8vIFRoZSBzY29wZSBhcmd1bWVudCBpcyBvcHRpb25hbCwgYW5kIGRlZmF1bHRzIHRvIHdpbmRvdy5kb2N1bWVudC4KICB3aW5kb3cuSFRNTFdpZGdldHMuZmluZEFsbCA9IGZ1bmN0aW9uKHNjb3BlLCBzZWxlY3RvcikgewogICAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPT0gMSkgewogICAgICBzZWxlY3RvciA9IHNjb3BlOwogICAgICBzY29wZSA9IGRvY3VtZW50OwogICAgfQoKICAgIHZhciBub2RlcyA9IHNjb3BlLnF1ZXJ5U2VsZWN0b3JBbGwoc2VsZWN0b3IpOwogICAgdmFyIHJlc3VsdHMgPSBbXTsKICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbm9kZXMubGVuZ3RoOyBpKyspIHsKICAgICAgcmVzdWx0cy5wdXNoKHdpbmRvdy5IVE1MV2lkZ2V0cy5nZXRJbnN0YW5jZShub2Rlc1tpXSkpOwogICAgfQogICAgcmV0dXJuIHJlc3VsdHM7CiAgfTsKCiAgdmFyIHBvc3RSZW5kZXJIYW5kbGVycyA9IFtdOwogIGZ1bmN0aW9uIGludm9rZVBvc3RSZW5kZXJIYW5kbGVycygpIHsKICAgIHdoaWxlIChwb3N0UmVuZGVySGFuZGxlcnMubGVuZ3RoKSB7CiAgICAgIHZhciBoYW5kbGVyID0gcG9zdFJlbmRlckhhbmRsZXJzLnNoaWZ0KCk7CiAgICAgIGlmIChoYW5kbGVyKSB7CiAgICAgICAgaGFuZGxlcigpOwogICAgICB9CiAgICB9CiAgfQoKICAvLyBSZWdpc3RlciB0aGUgZ2l2ZW4gY2FsbGJhY2sgZnVuY3Rpb24gdG8gYmUgaW52b2tlZCBhZnRlciB0aGUKICAvLyBuZXh0IHRpbWUgc3RhdGljIHdpZGdldHMgYXJlIHJlbmRlcmVkLgogIHdpbmRvdy5IVE1MV2lkZ2V0cy5hZGRQb3N0UmVuZGVySGFuZGxlciA9IGZ1bmN0aW9uKGNhbGxiYWNrKSB7CiAgICBwb3N0UmVuZGVySGFuZGxlcnMucHVzaChjYWxsYmFjayk7CiAgfTsKCiAgLy8gVGFrZXMgYSBuZXctc3R5bGUgaW5zdGFuY2UtYm91bmQgZGVmaW5pdGlvbiwgYW5kIHJldHVybnMgYW4KICAvLyBvbGQtc3R5bGUgY2xhc3MtYm91bmQgZGVmaW5pdGlvbi4gVGhpcyBzYXZlcyB1cyBmcm9tIGhhdmluZwogIC8vIHRvIHJld3JpdGUgYWxsIHRoZSBsb2dpYyBpbiB0aGlzIGZpbGUgdG8gYWNjb21vZGF0ZSBib3RoCiAgLy8gdHlwZXMgb2YgZGVmaW5pdGlvbnMuCiAgZnVuY3Rpb24gY3JlYXRlTGVnYWN5RGVmaW5pdGlvbkFkYXB0ZXIoZGVmbikgewogICAgdmFyIHJlc3VsdCA9IHsKICAgICAgbmFtZTogZGVmbi5uYW1lLAogICAgICB0eXBlOiBkZWZuLnR5cGUsCiAgICAgIGluaXRpYWxpemU6IGZ1bmN0aW9uKGVsLCB3aWR0aCwgaGVpZ2h0KSB7CiAgICAgICAgcmV0dXJuIGRlZm4uZmFjdG9yeShlbCwgd2lkdGgsIGhlaWdodCk7CiAgICAgIH0sCiAgICAgIHJlbmRlclZhbHVlOiBmdW5jdGlvbihlbCwgeCwgaW5zdGFuY2UpIHsKICAgICAgICByZXR1cm4gaW5zdGFuY2UucmVuZGVyVmFsdWUoeCk7CiAgICAgIH0sCiAgICAgIHJlc2l6ZTogZnVuY3Rpb24oZWwsIHdpZHRoLCBoZWlnaHQsIGluc3RhbmNlKSB7CiAgICAgICAgcmV0dXJuIGluc3RhbmNlLnJlc2l6ZSh3aWR0aCwgaGVpZ2h0KTsKICAgICAgfQogICAgfTsKCiAgICBpZiAoZGVmbi5maW5kKQogICAgICByZXN1bHQuZmluZCA9IGRlZm4uZmluZDsKICAgIGlmIChkZWZuLnJlbmRlckVycm9yKQogICAgICByZXN1bHQucmVuZGVyRXJyb3IgPSBkZWZuLnJlbmRlckVycm9yOwogICAgaWYgKGRlZm4uY2xlYXJFcnJvcikKICAgICAgcmVzdWx0LmNsZWFyRXJyb3IgPSBkZWZuLmNsZWFyRXJyb3I7CgogICAgcmV0dXJuIHJlc3VsdDsKICB9Cn0pKCk7Cgo="></script>
<link href="data:text/css;charset=utf-8,%2Evis%2Dbackground%2C%2Evis%2Dlabelset%2C%2Evis%2Dtimeline%7Boverflow%3Ahidden%7D%2Evis%20%2Eoverlay%7Bposition%3Aabsolute%3Btop%3A0%3Bleft%3A0%3Bwidth%3A100%25%3Bheight%3A100%25%3Bz%2Dindex%3A10%7D%2Evis%2Dactive%7Bbox%2Dshadow%3A0%200%2010px%20%2386d5f8%7D%2Evis%20%5Bclass%2A%3Dspan%5D%7Bmin%2Dheight%3A0%3Bwidth%3Aauto%7Ddiv%2Evis%2Dconfiguration%7Bposition%3Arelative%3Bdisplay%3Ablock%3Bfloat%3Aleft%3Bfont%2Dsize%3A12px%7Ddiv%2Evis%2Dconfiguration%2Dwrapper%7Bdisplay%3Ablock%3Bwidth%3A700px%7Ddiv%2Evis%2Dconfiguration%2Evis%2Dconfig%2Doption%2Dcontainer%7Bdisplay%3Ablock%3Bwidth%3A495px%3Bbackground%2Dcolor%3A%23fff%3Bborder%3A2px%20solid%20%23f7f8fa%3Bborder%2Dradius%3A4px%3Bmargin%2Dtop%3A20px%3Bleft%3A10px%3Bpadding%2Dleft%3A5px%7Ddiv%2Evis%2Dconfiguration%2Evis%2Dconfig%2Dbutton%7Bdisplay%3Ablock%3Bwidth%3A495px%3Bheight%3A25px%3Bvertical%2Dalign%3Amiddle%3Bline%2Dheight%3A25px%3Bbackground%2Dcolor%3A%23f7f8fa%3Bborder%3A2px%20solid%20%23ceced0%3Bborder%2Dradius%3A4px%3Bmargin%2Dtop%3A20px%3Bleft%3A10px%3Bpadding%2Dleft%3A5px%3Bcursor%3Apointer%3Bmargin%2Dbottom%3A30px%7Ddiv%2Evis%2Dconfiguration%2Evis%2Dconfig%2Dbutton%2Ehover%7Bbackground%2Dcolor%3A%234588e6%3Bborder%3A2px%20solid%20%23214373%3Bcolor%3A%23fff%7Ddiv%2Evis%2Dconfiguration%2Evis%2Dconfig%2Ditem%7Bdisplay%3Ablock%3Bfloat%3Aleft%3Bwidth%3A495px%3Bheight%3A25px%3Bvertical%2Dalign%3Amiddle%3Bline%2Dheight%3A25px%7Ddiv%2Evis%2Dconfiguration%2Evis%2Dconfig%2Ditem%2Evis%2Dconfig%2Ds2%7Bleft%3A10px%3Bbackground%2Dcolor%3A%23f7f8fa%3Bpadding%2Dleft%3A5px%3Bborder%2Dradius%3A3px%7Ddiv%2Evis%2Dconfiguration%2Evis%2Dconfig%2Ditem%2Evis%2Dconfig%2Ds3%7Bleft%3A20px%3Bbackground%2Dcolor%3A%23e4e9f0%3Bpadding%2Dleft%3A5px%3Bborder%2Dradius%3A3px%7Ddiv%2Evis%2Dconfiguration%2Evis%2Dconfig%2Ditem%2Evis%2Dconfig%2Ds4%7Bleft%3A30px%3Bbackground%2Dcolor%3A%23cfd8e6%3Bpadding%2Dleft%3A5px%3Bborder%2Dradius%3A3px%7Ddiv%2Evis%2Dconfiguration%2Evis%2Dconfig%2Dheader%7Bfont%2Dsize%3A18px%3Bfont%2Dweight%3A700%7Ddiv%2Evis%2Dconfiguration%2Evis%2Dconfig%2Dlabel%7Bwidth%3A120px%3Bheight%3A25px%3Bline%2Dheight%3A25px%7Ddiv%2Evis%2Dconfiguration%2Evis%2Dconfig%2Dlabel%2Evis%2Dconfig%2Ds3%7Bwidth%3A110px%7Ddiv%2Evis%2Dconfiguration%2Evis%2Dconfig%2Dlabel%2Evis%2Dconfig%2Ds4%7Bwidth%3A100px%7Ddiv%2Evis%2Dconfiguration%2Evis%2Dconfig%2DcolorBlock%7Btop%3A1px%3Bwidth%3A30px%3Bheight%3A19px%3Bborder%3A1px%20solid%20%23444%3Bborder%2Dradius%3A2px%3Bpadding%3A0%3Bmargin%3A0%3Bcursor%3Apointer%7Dinput%2Evis%2Dconfiguration%2Evis%2Dconfig%2Dcheckbox%7Bleft%3A%2D5px%7Dinput%2Evis%2Dconfiguration%2Evis%2Dconfig%2Drangeinput%7Bposition%3Arelative%3Btop%3A%2D5px%3Bwidth%3A60px%3Bheight%3A13px%3Bpadding%3A1px%3Bmargin%3A0%3Bpointer%2Devents%3Anone%7D%2Evis%2Dpanel%2C%2Evis%2Dtimeline%7Bpadding%3A0%3Bbox%2Dsizing%3Aborder%2Dbox%7Dinput%2Evis%2Dconfiguration%2Evis%2Dconfig%2Drange%7B%2Dwebkit%2Dappearance%3Anone%3Bborder%3A0%20solid%20%23fff%3Bbackground%2Dcolor%3Argba%280%2C0%2C0%2C0%29%3Bwidth%3A300px%3Bheight%3A20px%7Dinput%2Evis%2Dconfiguration%2Evis%2Dconfig%2Drange%3A%3A%2Dwebkit%2Dslider%2Drunnable%2Dtrack%7Bwidth%3A300px%3Bheight%3A5px%3Bbackground%3A%23dedede%3Bbackground%3A%2Dmoz%2Dlinear%2Dgradient%28top%2C%23dedede%200%2C%23c8c8c8%2099%25%29%3Bbackground%3A%2Dwebkit%2Dgradient%28linear%2Cleft%20top%2Cleft%20bottom%2Ccolor%2Dstop%280%2C%23dedede%29%2Ccolor%2Dstop%2899%25%2C%23c8c8c8%29%29%3Bbackground%3A%2Dwebkit%2Dlinear%2Dgradient%28top%2C%23dedede%200%2C%23c8c8c8%2099%25%29%3Bbackground%3A%2Do%2Dlinear%2Dgradient%28top%2C%23dedede%200%2C%23c8c8c8%2099%25%29%3Bbackground%3A%2Dms%2Dlinear%2Dgradient%28top%2C%23dedede%200%2C%23c8c8c8%2099%25%29%3Bbackground%3Alinear%2Dgradient%28to%20bottom%2C%23dedede%200%2C%23c8c8c8%2099%25%29%3Bfilter%3Aprogid%3ADXImageTransform%2EMicrosoft%2Egradient%28%20startColorstr%3D%27%23dedede%27%2C%20endColorstr%3D%27%23c8c8c8%27%2C%20GradientType%3D0%20%29%3Bborder%3A1px%20solid%20%23999%3Bbox%2Dshadow%3A%23aaa%200%200%203px%200%3Bborder%2Dradius%3A3px%7Dinput%2Evis%2Dconfiguration%2Evis%2Dconfig%2Drange%3A%3A%2Dwebkit%2Dslider%2Dthumb%7B%2Dwebkit%2Dappearance%3Anone%3Bborder%3A1px%20solid%20%2314334b%3Bheight%3A17px%3Bwidth%3A17px%3Bborder%2Dradius%3A50%25%3Bbackground%3A%233876c2%3Bbackground%3A%2Dmoz%2Dlinear%2Dgradient%28top%2C%233876c2%200%2C%23385380%20100%25%29%3Bbackground%3A%2Dwebkit%2Dgradient%28linear%2Cleft%20top%2Cleft%20bottom%2Ccolor%2Dstop%280%2C%233876c2%29%2Ccolor%2Dstop%28100%25%2C%23385380%29%29%3Bbackground%3A%2Dwebkit%2Dlinear%2Dgradient%28top%2C%233876c2%200%2C%23385380%20100%25%29%3Bbackground%3A%2Do%2Dlinear%2Dgradient%28top%2C%233876c2%200%2C%23385380%20100%25%29%3Bbackground%3A%2Dms%2Dlinear%2Dgradient%28top%2C%233876c2%200%2C%23385380%20100%25%29%3Bbackground%3Alinear%2Dgradient%28to%20bottom%2C%233876c2%200%2C%23385380%20100%25%29%3Bfilter%3Aprogid%3ADXImageTransform%2EMicrosoft%2Egradient%28%20startColorstr%3D%27%233876c2%27%2C%20endColorstr%3D%27%23385380%27%2C%20GradientType%3D0%20%29%3Bbox%2Dshadow%3A%23111927%200%200%201px%200%3Bmargin%2Dtop%3A%2D7px%7Dinput%2Evis%2Dconfiguration%2Evis%2Dconfig%2Drange%3Afocus%7Boutline%3A0%7Dinput%2Evis%2Dconfiguration%2Evis%2Dconfig%2Drange%3Afocus%3A%3A%2Dwebkit%2Dslider%2Drunnable%2Dtrack%7Bbackground%3A%239d9d9d%3Bbackground%3A%2Dmoz%2Dlinear%2Dgradient%28top%2C%239d9d9d%200%2C%23c8c8c8%2099%25%29%3Bbackground%3A%2Dwebkit%2Dgradient%28linear%2Cleft%20top%2Cleft%20bottom%2Ccolor%2Dstop%280%2C%239d9d9d%29%2Ccolor%2Dstop%2899%25%2C%23c8c8c8%29%29%3Bbackground%3A%2Dwebkit%2Dlinear%2Dgradient%28top%2C%239d9d9d%200%2C%23c8c8c8%2099%25%29%3Bbackground%3A%2Do%2Dlinear%2Dgradient%28top%2C%239d9d9d%200%2C%23c8c8c8%2099%25%29%3Bbackground%3A%2Dms%2Dlinear%2Dgradient%28top%2C%239d9d9d%200%2C%23c8c8c8%2099%25%29%3Bbackground%3Alinear%2Dgradient%28to%20bottom%2C%239d9d9d%200%2C%23c8c8c8%2099%25%29%3Bfilter%3Aprogid%3ADXImageTransform%2EMicrosoft%2Egradient%28%20startColorstr%3D%27%239d9d9d%27%2C%20endColorstr%3D%27%23c8c8c8%27%2C%20GradientType%3D0%20%29%7Dinput%2Evis%2Dconfiguration%2Evis%2Dconfig%2Drange%3A%3A%2Dmoz%2Drange%2Dtrack%7Bwidth%3A300px%3Bheight%3A10px%3Bbackground%3A%23dedede%3Bbackground%3A%2Dmoz%2Dlinear%2Dgradient%28top%2C%23dedede%200%2C%23c8c8c8%2099%25%29%3Bbackground%3A%2Dwebkit%2Dgradient%28linear%2Cleft%20top%2Cleft%20bottom%2Ccolor%2Dstop%280%2C%23dedede%29%2Ccolor%2Dstop%2899%25%2C%23c8c8c8%29%29%3Bbackground%3A%2Dwebkit%2Dlinear%2Dgradient%28top%2C%23dedede%200%2C%23c8c8c8%2099%25%29%3Bbackground%3A%2Do%2Dlinear%2Dgradient%28top%2C%23dedede%200%2C%23c8c8c8%2099%25%29%3Bbackground%3A%2Dms%2Dlinear%2Dgradient%28top%2C%23dedede%200%2C%23c8c8c8%2099%25%29%3Bbackground%3Alinear%2Dgradient%28to%20bottom%2C%23dedede%200%2C%23c8c8c8%2099%25%29%3Bfilter%3Aprogid%3ADXImageTransform%2EMicrosoft%2Egradient%28%20startColorstr%3D%27%23dedede%27%2C%20endColorstr%3D%27%23c8c8c8%27%2C%20GradientType%3D0%20%29%3Bborder%3A1px%20solid%20%23999%3Bbox%2Dshadow%3A%23aaa%200%200%203px%200%3Bborder%2Dradius%3A3px%7Dinput%2Evis%2Dconfiguration%2Evis%2Dconfig%2Drange%3A%3A%2Dmoz%2Drange%2Dthumb%7Bborder%3Anone%3Bheight%3A16px%3Bwidth%3A16px%3Bborder%2Dradius%3A50%25%3Bbackground%3A%23385380%7Dinput%2Evis%2Dconfiguration%2Evis%2Dconfig%2Drange%3A%2Dmoz%2Dfocusring%7Boutline%3A%23fff%20solid%201px%3Boutline%2Doffset%3A%2D1px%7Dinput%2Evis%2Dconfiguration%2Evis%2Dconfig%2Drange%3A%3A%2Dms%2Dtrack%7Bwidth%3A300px%3Bheight%3A5px%3Bbackground%3A0%200%3Bborder%2Dcolor%3Atransparent%3Bborder%2Dwidth%3A6px%200%3Bcolor%3Atransparent%7Dinput%2Evis%2Dconfiguration%2Evis%2Dconfig%2Drange%3A%3A%2Dms%2Dfill%2Dlower%7Bbackground%3A%23777%3Bborder%2Dradius%3A10px%7Dinput%2Evis%2Dconfiguration%2Evis%2Dconfig%2Drange%3A%3A%2Dms%2Dfill%2Dupper%7Bbackground%3A%23ddd%3Bborder%2Dradius%3A10px%7Dinput%2Evis%2Dconfiguration%2Evis%2Dconfig%2Drange%3A%3A%2Dms%2Dthumb%7Bborder%3Anone%3Bheight%3A16px%3Bwidth%3A16px%3Bborder%2Dradius%3A50%25%3Bbackground%3A%23385380%7Dinput%2Evis%2Dconfiguration%2Evis%2Dconfig%2Drange%3Afocus%3A%3A%2Dms%2Dfill%2Dlower%7Bbackground%3A%23888%7Dinput%2Evis%2Dconfiguration%2Evis%2Dconfig%2Drange%3Afocus%3A%3A%2Dms%2Dfill%2Dupper%7Bbackground%3A%23ccc%7D%2Evis%2Dconfiguration%2Dpopup%7Bposition%3Aabsolute%3Bbackground%3Argba%2857%2C76%2C89%2C%2E85%29%3Bborder%3A2px%20solid%20%23f2faff%3Bline%2Dheight%3A30px%3Bheight%3A30px%3Bwidth%3A150px%3Btext%2Dalign%3Acenter%3Bcolor%3A%23fff%3Bfont%2Dsize%3A14px%3Bborder%2Dradius%3A4px%3B%2Dwebkit%2Dtransition%3Aopacity%20%2E3s%20ease%2Din%2Dout%3B%2Dmoz%2Dtransition%3Aopacity%20%2E3s%20ease%2Din%2Dout%3Btransition%3Aopacity%20%2E3s%20ease%2Din%2Dout%7D%2Evis%2Dconfiguration%2Dpopup%3Aafter%2C%2Evis%2Dconfiguration%2Dpopup%3Abefore%7Bleft%3A100%25%3Btop%3A50%25%3Bborder%3Asolid%20transparent%3Bcontent%3A%22%20%22%3Bheight%3A0%3Bwidth%3A0%3Bposition%3Aabsolute%3Bpointer%2Devents%3Anone%7D%2Evis%2Dconfiguration%2Dpopup%3Aafter%7Bborder%2Dcolor%3Argba%28136%2C183%2C213%2C0%29%3Bborder%2Dleft%2Dcolor%3Argba%2857%2C76%2C89%2C%2E85%29%3Bborder%2Dwidth%3A8px%3Bmargin%2Dtop%3A%2D8px%7D%2Evis%2Dconfiguration%2Dpopup%3Abefore%7Bborder%2Dcolor%3Argba%28194%2C225%2C245%2C0%29%3Bborder%2Dleft%2Dcolor%3A%23f2faff%3Bborder%2Dwidth%3A12px%3Bmargin%2Dtop%3A%2D12px%7D%2Evis%2Dtimeline%7Bposition%3Arelative%3Bborder%3A1px%20solid%20%23bfbfbf%3Bmargin%3A0%7D%2Evis%2Dpanel%7Bposition%3Aabsolute%3Bmargin%3A0%7D%2Evis%2Dpanel%2Evis%2Dbottom%2C%2Evis%2Dpanel%2Evis%2Dcenter%2C%2Evis%2Dpanel%2Evis%2Dleft%2C%2Evis%2Dpanel%2Evis%2Dright%2C%2Evis%2Dpanel%2Evis%2Dtop%7Bborder%3A1px%20%23bfbfbf%7D%2Evis%2Dpanel%2Evis%2Dcenter%2C%2Evis%2Dpanel%2Evis%2Dleft%2C%2Evis%2Dpanel%2Evis%2Dright%7Bborder%2Dtop%2Dstyle%3Asolid%3Bborder%2Dbottom%2Dstyle%3Asolid%3Boverflow%3Ahidden%7D%2Evis%2Dpanel%2Evis%2Dbottom%2C%2Evis%2Dpanel%2Evis%2Dcenter%2C%2Evis%2Dpanel%2Evis%2Dtop%7Bborder%2Dleft%2Dstyle%3Asolid%3Bborder%2Dright%2Dstyle%3Asolid%7D%2Evis%2Dpanel%3E%2Evis%2Dcontent%7Bposition%3Arelative%7D%2Evis%2Dpanel%20%2Evis%2Dshadow%7Bposition%3Aabsolute%3Bwidth%3A100%25%3Bheight%3A1px%3Bbox%2Dshadow%3A0%200%2010px%20rgba%280%2C0%2C0%2C%2E8%29%7D%2Evis%2Ditemset%2C%2Evis%2Dlabelset%2C%2Evis%2Dlabelset%20%2Evis%2Dlabel%7Bposition%3Arelative%3Bbox%2Dsizing%3Aborder%2Dbox%7D%2Evis%2Dpanel%20%2Evis%2Dshadow%2Evis%2Dtop%7Btop%3A%2D1px%3Bleft%3A0%7D%2Evis%2Dpanel%20%2Evis%2Dshadow%2Evis%2Dbottom%7Bbottom%3A%2D1px%3Bleft%3A0%7D%2Evis%2Dlabelset%20%2Evis%2Dlabel%7Bleft%3A0%3Btop%3A0%3Bwidth%3A100%25%3Bcolor%3A%234d4d4d%3Bborder%2Dbottom%3A1px%20solid%20%23bfbfbf%7D%2Evis%2Dlabelset%20%2Evis%2Dlabel%2Edraggable%7Bcursor%3Apointer%7D%2Evis%2Dlabelset%20%2Evis%2Dlabel%3Alast%2Dchild%7Bborder%2Dbottom%3Anone%7D%2Evis%2Dlabelset%20%2Evis%2Dlabel%20%2Evis%2Dinner%7Bdisplay%3Ainline%2Dblock%3Bpadding%3A5px%7D%2Evis%2Dlabelset%20%2Evis%2Dlabel%20%2Evis%2Dinner%2Evis%2Dhidden%7Bpadding%3A0%7D%2Evis%2Ditemset%7Bpadding%3A0%3Bmargin%3A0%7D%2Evis%2Ditemset%20%2Evis%2Dbackground%2C%2Evis%2Ditemset%20%2Evis%2Dforeground%7Bposition%3Aabsolute%3Bwidth%3A100%25%3Bheight%3A100%25%3Boverflow%3Avisible%7D%2Evis%2Daxis%7Bposition%3Aabsolute%3Bwidth%3A100%25%3Bheight%3A0%3Bleft%3A0%3Bz%2Dindex%3A1%7D%2Evis%2Dforeground%20%2Evis%2Dgroup%7Bposition%3Arelative%3Bbox%2Dsizing%3Aborder%2Dbox%3Bborder%2Dbottom%3A1px%20solid%20%23bfbfbf%7D%2Evis%2Dforeground%20%2Evis%2Dgroup%3Alast%2Dchild%7Bborder%2Dbottom%3Anone%7D%2Evis%2Doverlay%7Bposition%3Aabsolute%3Btop%3A0%3Bleft%3A0%3Bwidth%3A100%25%3Bheight%3A100%25%3Bz%2Dindex%3A10%7D%2Evis%2Ditem%7Bposition%3Aabsolute%3Bcolor%3A%231A1A1A%3Bborder%2Dcolor%3A%2397B0F8%3Bborder%2Dwidth%3A1px%3Bbackground%2Dcolor%3A%23D5DDF6%3Bdisplay%3Ainline%2Dblock%7D%2Evis%2Ditem%2Evis%2Dpoint%2Evis%2Dselected%2C%2Evis%2Ditem%2Evis%2Dselected%7Bbackground%2Dcolor%3A%23FFF785%7D%2Evis%2Ditem%2Evis%2Dselected%7Bborder%2Dcolor%3A%23FFC200%3Bz%2Dindex%3A2%7D%2Evis%2Deditable%2Evis%2Dselected%7Bcursor%3Amove%7D%2Evis%2Ditem%2Evis%2Dbox%7Btext%2Dalign%3Acenter%3Bborder%2Dstyle%3Asolid%3Bborder%2Dradius%3A2px%7D%2Evis%2Ditem%2Evis%2Dpoint%7Bbackground%3A0%200%7D%2Evis%2Ditem%2Evis%2Ddot%7Bposition%3Aabsolute%3Bpadding%3A0%3Bborder%2Dwidth%3A4px%3Bborder%2Dstyle%3Asolid%3Bborder%2Dradius%3A4px%7D%2Evis%2Ditem%2Evis%2Drange%7Bborder%2Dstyle%3Asolid%3Bborder%2Dradius%3A2px%3Bbox%2Dsizing%3Aborder%2Dbox%7D%2Evis%2Ditem%2Evis%2Dbackground%7Bborder%3Anone%3Bbackground%2Dcolor%3Argba%28213%2C221%2C246%2C%2E4%29%3Bbox%2Dsizing%3Aborder%2Dbox%3Bpadding%3A0%3Bmargin%3A0%7D%2Evis%2Ditem%20%2Evis%2Ditem%2Doverflow%7Bposition%3Arelative%3Bwidth%3A100%25%3Bheight%3A100%25%3Bpadding%3A0%3Bmargin%3A0%3Boverflow%3Ahidden%7D%2Evis%2Ditem%2Evis%2Drange%20%2Evis%2Ditem%2Dcontent%7Bposition%3Arelative%3Bdisplay%3Ainline%2Dblock%7D%2Evis%2Ditem%2Evis%2Dbackground%20%2Evis%2Ditem%2Dcontent%7Bposition%3Aabsolute%3Bdisplay%3Ainline%2Dblock%7D%2Evis%2Ditem%2Evis%2Dline%7Bpadding%3A0%3Bposition%3Aabsolute%3Bwidth%3A0%3Bborder%2Dleft%2Dwidth%3A1px%3Bborder%2Dleft%2Dstyle%3Asolid%7D%2Evis%2Ditem%20%2Evis%2Ditem%2Dcontent%7Bwhite%2Dspace%3Anowrap%3Bbox%2Dsizing%3Aborder%2Dbox%3Bpadding%3A5px%7D%2Evis%2Ditem%20%2Evis%2Ddelete%7Bbackground%3Aurl%28data%3Aimage%2Fpng%3Bbase64%2CiVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8%2F9hAAAABGdBTUEAALGPC%2FxhBQAAAAFzUkdCAK7OHOkAAAAgY0hSTQAAeiYAAICEAAD6AAAAgOgAAHUwAADqYAAAOpgAABdwnLpRPAAAAAZiS0dEAP8A%2FwD%2FoL2nkwAAAAlwSFlzAAALEwAACxMBAJqcGAAAAAl2cEFnAAAAEAAAABAAXMatwwAAAVRJREFUOMt108FKG1EUBuBvYtxbRGwxiGBXeYCW0mVpDSKVvIJ0F%2FsyJsFdn6GCkaZ9gro3G1u0ILQgheJKRUwXPQNnxvTAcGf%2Bc%2F7%2FnPvfO8UEKLCFJg5w31aNqGtgG3c4xLSZyP0QgI8Tpu0quQhyPwTgsBnkAVYD3MM9DibVId5GbiW%2BB%2BVIt7hJha1IdhPWDayVsBvcFtHlDYZ4mgou8D7e%2BzXyN%2FTwuUhjbkSXLHIZ61KNvItxaYyayBDrZsf36DyGdilQE%2BngA57UyD%2Bxg08luTSxHvP%2FwRuRewDm7uV9WJ4hsBy5rczJJm7G%2FtcS6VesjxN2Hj4c5S10Qj2Tz%2FAunrOEr0VtB%2BZ6vMJ%2BzfkfcVQjnMbRvcRC5B%2FhBU4auMbVjBFHCRsFdp6wK1yXHjz37xItRuejfFQ1nwb4HXVfs4nPYsQv0p%2BoKlLgNf7gGP4Cw4ZUK7kMJVEAAAAZdEVYdENvbW1lbnQAQ3JlYXRlZCB3aXRoIEdJTVBXgQ4XAAAAJXRFWHRkYXRlOmNyZWF0ZQAyMDExLTA1LTE2VDExOjM1OjIxKzAyOjAw9uVF5gAAACV0RVh0ZGF0ZTptb2RpZnkAMjAxMS0wNS0xNlQxMTozNToyMSswMjowMIe4%2FVoAAAAASUVORK5CYII%3D%29%20center%20no%2Drepeat%3Bposition%3Aabsolute%3Bwidth%3A24px%3Bheight%3A24px%3Btop%3A%2D4px%3Bright%3A%2D24px%3Bcursor%3Apointer%7D%2Evis%2Ditem%2Evis%2Drange%20%2Evis%2Ddrag%2Dleft%7Bposition%3Aabsolute%3Bwidth%3A24px%3Bmax%2Dwidth%3A20%25%3Bmin%2Dwidth%3A2px%3Bheight%3A100%25%3Btop%3A0%3Bleft%3A%2D4px%3Bcursor%3Aw%2Dresize%7D%2Evis%2Ditem%2Evis%2Drange%20%2Evis%2Ddrag%2Dright%7Bposition%3Aabsolute%3Bwidth%3A24px%3Bmax%2Dwidth%3A20%25%3Bmin%2Dwidth%3A2px%3Bheight%3A100%25%3Btop%3A0%3Bright%3A%2D4px%3Bcursor%3Ae%2Dresize%7D%2Evis%2Drange%2Evis%2Ditem%2Evis%2Dreadonly%20%2Evis%2Ddrag%2Dleft%2C%2Evis%2Drange%2Evis%2Ditem%2Evis%2Dreadonly%20%2Evis%2Ddrag%2Dright%7Bcursor%3Aauto%7D%2Evis%2Dtime%2Daxis%7Bposition%3Arelative%3Boverflow%3Ahidden%7D%2Evis%2Dtime%2Daxis%2Evis%2Dforeground%7Btop%3A0%3Bleft%3A0%3Bwidth%3A100%25%7D%2Evis%2Dtime%2Daxis%2Evis%2Dbackground%7Bposition%3Aabsolute%3Btop%3A0%3Bleft%3A0%3Bwidth%3A100%25%3Bheight%3A100%25%7D%2Evis%2Dtime%2Daxis%20%2Evis%2Dtext%7Bposition%3Aabsolute%3Bcolor%3A%234d4d4d%3Bpadding%3A3px%3Boverflow%3Ahidden%3Bbox%2Dsizing%3Aborder%2Dbox%3Bwhite%2Dspace%3Anowrap%7D%2Evis%2Dtime%2Daxis%20%2Evis%2Dtext%2Evis%2Dmeasure%7Bposition%3Aabsolute%3Bpadding%2Dleft%3A0%3Bpadding%2Dright%3A0%3Bmargin%2Dleft%3A0%3Bmargin%2Dright%3A0%3Bvisibility%3Ahidden%7D%2Evis%2Dtime%2Daxis%20%2Evis%2Dgrid%2Evis%2Dvertical%7Bposition%3Aabsolute%3Bborder%2Dleft%3A1px%20solid%7D%2Evis%2Dtime%2Daxis%20%2Evis%2Dgrid%2Evis%2Dminor%7Bborder%2Dcolor%3A%23e5e5e5%7D%2Evis%2Dtime%2Daxis%20%2Evis%2Dgrid%2Evis%2Dmajor%7Bborder%2Dcolor%3A%23bfbfbf%7D%2Evis%2Dcurrent%2Dtime%7Bbackground%2Dcolor%3A%23FF7F6E%3Bwidth%3A2px%3Bz%2Dindex%3A1%7D%2Evis%2Dcustom%2Dtime%7Bbackground%2Dcolor%3A%236E94FF%3Bwidth%3A2px%3Bcursor%3Amove%3Bz%2Dindex%3A1%7Ddiv%2Evis%2Dnetwork%20div%2Evis%2Dclose%2Cdiv%2Evis%2Dnetwork%20div%2Evis%2Dedit%2Dmode%20div%2Evis%2Dbutton%2Cdiv%2Evis%2Dnetwork%20div%2Evis%2Dmanipulation%20div%2Evis%2Dbutton%7Bcursor%3Apointer%3B%2Dwebkit%2Duser%2Dselect%3Anone%3B%2Dmoz%2Duser%2Dselect%3Anone%3B%2Dms%2Duser%2Dselect%3Anone%3B%2Dwebkit%2Dtouch%2Dcallout%3Anone%3B%2Dkhtml%2Duser%2Dselect%3Anone%7D%2Evis%2Dpanel%2Evis%2Dbackground%2Evis%2Dhorizontal%20%2Evis%2Dgrid%2Evis%2Dhorizontal%7Bposition%3Aabsolute%3Bwidth%3A100%25%3Bheight%3A0%3Bborder%2Dbottom%3A1px%20solid%7D%2Evis%2Dpanel%2Evis%2Dbackground%2Evis%2Dhorizontal%20%2Evis%2Dgrid%2Evis%2Dminor%7Bborder%2Dcolor%3A%23e5e5e5%7D%2Evis%2Dpanel%2Evis%2Dbackground%2Evis%2Dhorizontal%20%2Evis%2Dgrid%2Evis%2Dmajor%7Bborder%2Dcolor%3A%23bfbfbf%7D%2Evis%2Ddata%2Daxis%20%2Evis%2Dy%2Daxis%2Evis%2Dmajor%7Bwidth%3A100%25%3Bposition%3Aabsolute%3Bcolor%3A%234d4d4d%3Bwhite%2Dspace%3Anowrap%7D%2Evis%2Ddata%2Daxis%20%2Evis%2Dy%2Daxis%2Evis%2Dmajor%2Evis%2Dmeasure%7Bpadding%3A0%3Bmargin%3A0%3Bborder%3A0%3Bvisibility%3Ahidden%3Bwidth%3Aauto%7D%2Evis%2Ddata%2Daxis%20%2Evis%2Dy%2Daxis%2Evis%2Dminor%7Bposition%3Aabsolute%3Bwidth%3A100%25%3Bcolor%3A%23bebebe%3Bwhite%2Dspace%3Anowrap%7D%2Evis%2Ddata%2Daxis%20%2Evis%2Dy%2Daxis%2Evis%2Dminor%2Evis%2Dmeasure%7Bpadding%3A0%3Bmargin%3A0%3Bborder%3A0%3Bvisibility%3Ahidden%3Bwidth%3Aauto%7D%2Evis%2Ddata%2Daxis%20%2Evis%2Dy%2Daxis%2Evis%2Dtitle%7Bposition%3Aabsolute%3Bcolor%3A%234d4d4d%3Bwhite%2Dspace%3Anowrap%3Bbottom%3A20px%3Btext%2Dalign%3Acenter%7D%2Evis%2Ddata%2Daxis%20%2Evis%2Dy%2Daxis%2Evis%2Dtitle%2Evis%2Dmeasure%7Bpadding%3A0%3Bmargin%3A0%3Bvisibility%3Ahidden%3Bwidth%3Aauto%7D%2Evis%2Ddata%2Daxis%20%2Evis%2Dy%2Daxis%2Evis%2Dtitle%2Evis%2Dleft%7Bbottom%3A0%3B%2Dwebkit%2Dtransform%2Dorigin%3Aleft%20top%3B%2Dmoz%2Dtransform%2Dorigin%3Aleft%20top%3B%2Dms%2Dtransform%2Dorigin%3Aleft%20top%3B%2Do%2Dtransform%2Dorigin%3Aleft%20top%3Btransform%2Dorigin%3Aleft%20bottom%3B%2Dwebkit%2Dtransform%3Arotate%28%2D90deg%29%3B%2Dmoz%2Dtransform%3Arotate%28%2D90deg%29%3B%2Dms%2Dtransform%3Arotate%28%2D90deg%29%3B%2Do%2Dtransform%3Arotate%28%2D90deg%29%3Btransform%3Arotate%28%2D90deg%29%7D%2Evis%2Ddata%2Daxis%20%2Evis%2Dy%2Daxis%2Evis%2Dtitle%2Evis%2Dright%7Bbottom%3A0%3B%2Dwebkit%2Dtransform%2Dorigin%3Aright%20bottom%3B%2Dmoz%2Dtransform%2Dorigin%3Aright%20bottom%3B%2Dms%2Dtransform%2Dorigin%3Aright%20bottom%3B%2Do%2Dtransform%2Dorigin%3Aright%20bottom%3Btransform%2Dorigin%3Aright%20bottom%3B%2Dwebkit%2Dtransform%3Arotate%2890deg%29%3B%2Dmoz%2Dtransform%3Arotate%2890deg%29%3B%2Dms%2Dtransform%3Arotate%2890deg%29%3B%2Do%2Dtransform%3Arotate%2890deg%29%3Btransform%3Arotate%2890deg%29%7D%2Evis%2Dlegend%7Bbackground%2Dcolor%3Argba%28247%2C252%2C255%2C%2E65%29%3Bpadding%3A5px%3Bborder%3A1px%20solid%20%23b3b3b3%3Bbox%2Dshadow%3A2px%202px%2010px%20rgba%28154%2C154%2C154%2C%2E55%29%7D%2Evis%2Dlegend%2Dtext%7Bwhite%2Dspace%3Anowrap%3Bdisplay%3Ainline%2Dblock%7D%2Evis%2Dgraph%2Dgroup0%7Bfill%3A%234f81bd%3Bfill%2Dopacity%3A0%3Bstroke%2Dwidth%3A2px%3Bstroke%3A%234f81bd%7D%2Evis%2Dgraph%2Dgroup1%7Bfill%3A%23f79646%3Bfill%2Dopacity%3A0%3Bstroke%2Dwidth%3A2px%3Bstroke%3A%23f79646%7D%2Evis%2Dgraph%2Dgroup2%7Bfill%3A%238c51cf%3Bfill%2Dopacity%3A0%3Bstroke%2Dwidth%3A2px%3Bstroke%3A%238c51cf%7D%2Evis%2Dgraph%2Dgroup3%7Bfill%3A%2375c841%3Bfill%2Dopacity%3A0%3Bstroke%2Dwidth%3A2px%3Bstroke%3A%2375c841%7D%2Evis%2Dgraph%2Dgroup4%7Bfill%3A%23ff0100%3Bfill%2Dopacity%3A0%3Bstroke%2Dwidth%3A2px%3Bstroke%3A%23ff0100%7D%2Evis%2Dgraph%2Dgroup5%7Bfill%3A%2337d8e6%3Bfill%2Dopacity%3A0%3Bstroke%2Dwidth%3A2px%3Bstroke%3A%2337d8e6%7D%2Evis%2Dgraph%2Dgroup6%7Bfill%3A%23042662%3Bfill%2Dopacity%3A0%3Bstroke%2Dwidth%3A2px%3Bstroke%3A%23042662%7D%2Evis%2Dgraph%2Dgroup7%7Bfill%3A%2300ff26%3Bfill%2Dopacity%3A0%3Bstroke%2Dwidth%3A2px%3Bstroke%3A%2300ff26%7D%2Evis%2Dgraph%2Dgroup8%7Bfill%3A%23f0f%3Bfill%2Dopacity%3A0%3Bstroke%2Dwidth%3A2px%3Bstroke%3A%23f0f%7D%2Evis%2Dgraph%2Dgroup9%7Bfill%3A%238f3938%3Bfill%2Dopacity%3A0%3Bstroke%2Dwidth%3A2px%3Bstroke%3A%238f3938%7D%2Evis%2Dtimeline%20%2Evis%2Dfill%7Bfill%2Dopacity%3A%2E1%3Bstroke%3Anone%7D%2Evis%2Dtimeline%20%2Evis%2Dbar%7Bfill%2Dopacity%3A%2E5%3Bstroke%2Dwidth%3A1px%7D%2Evis%2Dtimeline%20%2Evis%2Dpoint%7Bstroke%2Dwidth%3A2px%3Bfill%2Dopacity%3A1%7D%2Evis%2Dtimeline%20%2Evis%2Dlegend%2Dbackground%7Bstroke%2Dwidth%3A1px%3Bfill%2Dopacity%3A%2E9%3Bfill%3A%23fff%3Bstroke%3A%23c2c2c2%7D%2Evis%2Dtimeline%20%2Evis%2Doutline%7Bstroke%2Dwidth%3A1px%3Bfill%2Dopacity%3A1%3Bfill%3A%23fff%3Bstroke%3A%23e5e5e5%7D%2Evis%2Dtimeline%20%2Evis%2Dicon%2Dfill%7Bfill%2Dopacity%3A%2E3%3Bstroke%3Anone%7Ddiv%2Evis%2Dnetwork%20div%2Evis%2Dmanipulation%7Bborder%2Dwidth%3A0%3Bborder%2Dbottom%3A1px%3Bborder%2Dstyle%3Asolid%3Bborder%2Dcolor%3A%23d6d9d8%3Bbackground%3A%23fff%3Bbackground%3A%2Dmoz%2Dlinear%2Dgradient%28top%2C%23fff%200%2C%23fcfcfc%2048%25%2C%23fafafa%2050%25%2C%23fcfcfc%20100%25%29%3Bbackground%3A%2Dwebkit%2Dgradient%28linear%2Cleft%20top%2Cleft%20bottom%2Ccolor%2Dstop%280%2C%23fff%29%2Ccolor%2Dstop%2848%25%2C%23fcfcfc%29%2Ccolor%2Dstop%2850%25%2C%23fafafa%29%2Ccolor%2Dstop%28100%25%2C%23fcfcfc%29%29%3Bbackground%3A%2Dwebkit%2Dlinear%2Dgradient%28top%2C%23fff%200%2C%23fcfcfc%2048%25%2C%23fafafa%2050%25%2C%23fcfcfc%20100%25%29%3Bbackground%3A%2Do%2Dlinear%2Dgradient%28top%2C%23fff%200%2C%23fcfcfc%2048%25%2C%23fafafa%2050%25%2C%23fcfcfc%20100%25%29%3Bbackground%3A%2Dms%2Dlinear%2Dgradient%28top%2C%23fff%200%2C%23fcfcfc%2048%25%2C%23fafafa%2050%25%2C%23fcfcfc%20100%25%29%3Bbackground%3Alinear%2Dgradient%28to%20bottom%2C%23fff%200%2C%23fcfcfc%2048%25%2C%23fafafa%2050%25%2C%23fcfcfc%20100%25%29%3Bfilter%3Aprogid%3ADXImageTransform%2EMicrosoft%2Egradient%28%20startColorstr%3D%27%23ffffff%27%2C%20endColorstr%3D%27%23fcfcfc%27%2C%20GradientType%3D0%20%29%3Bpadding%2Dtop%3A4px%3Bposition%3Aabsolute%3Bleft%3A0%3Btop%3A0%3Bwidth%3A100%25%3Bheight%3A28px%7Ddiv%2Evis%2Dnetwork%20div%2Evis%2Dedit%2Dmode%7Bposition%3Aabsolute%3Bleft%3A0%3Btop%3A5px%3Bheight%3A30px%7Ddiv%2Evis%2Dnetwork%20div%2Evis%2Dclose%7Bposition%3Aabsolute%3Bright%3A0%3Btop%3A0%3Bwidth%3A30px%3Bheight%3A30px%3Bbackground%2Dposition%3A20px%203px%3Bbackground%2Drepeat%3Ano%2Drepeat%3Bbackground%2Dimage%3Aurl%28data%3Aimage%2Fpng%3Bbase64%2CiVBORw0KGgoAAAANSUhEUgAAAAcAAAAHCAYAAADEUlfTAAAACXBIWXMAAAsTAAALEwEAmpwYAAAKT2lDQ1BQaG90b3Nob3AgSUNDIHByb2ZpbGUAAHjanVNnVFPpFj333vRCS4iAlEtvUhUIIFJCi4AUkSYqIQkQSoghodkVUcERRUUEG8igiAOOjoCMFVEsDIoK2AfkIaKOg6OIisr74Xuja9a89%2BbN%2FrXXPues852zzwfACAyWSDNRNYAMqUIeEeCDx8TG4eQuQIEKJHAAEAizZCFz%2FSMBAPh%2BPDwrIsAHvgABeNMLCADATZvAMByH%2Fw%2FqQplcAYCEAcB0kThLCIAUAEB6jkKmAEBGAYCdmCZTAKAEAGDLY2LjAFAtAGAnf%2BbTAICd%2BJl7AQBblCEVAaCRACATZYhEAGg7AKzPVopFAFgwABRmS8Q5ANgtADBJV2ZIALC3AMDOEAuyAAgMADBRiIUpAAR7AGDIIyN4AISZABRG8lc88SuuEOcqAAB4mbI8uSQ5RYFbCC1xB1dXLh4ozkkXKxQ2YQJhmkAuwnmZGTKBNA%2Fg88wAAKCRFRHgg%2FP9eM4Ors7ONo62Dl8t6r8G%2FyJiYuP%2B5c%2BrcEAAAOF0ftH%2BLC%2BzGoA7BoBt%2FqIl7gRoXgugdfeLZrIPQLUAoOnaV%2FNw%2BH48PEWhkLnZ2eXk5NhKxEJbYcpXff5nwl%2FAV%2F1s%2BX48%2FPf14L7iJIEyXYFHBPjgwsz0TKUcz5IJhGLc5o9H%2FLcL%2F%2Fwd0yLESWK5WCoU41EScY5EmozzMqUiiUKSKcUl0v9k4t8s%2BwM%2B3zUAsGo%2BAXuRLahdYwP2SycQWHTA4vcAAPK7b8HUKAgDgGiD4c93%2F%2B8%2F%2FUegJQCAZkmScQAAXkQkLlTKsz%2FHCAAARKCBKrBBG%2FTBGCzABhzBBdzBC%2FxgNoRCJMTCQhBCCmSAHHJgKayCQiiGzbAdKmAv1EAdNMBRaIaTcA4uwlW4Dj1wD%2FphCJ7BKLyBCQRByAgTYSHaiAFiilgjjggXmYX4IcFIBBKLJCDJiBRRIkuRNUgxUopUIFVIHfI9cgI5h1xGupE7yAAygvyGvEcxlIGyUT3UDLVDuag3GoRGogvQZHQxmo8WoJvQcrQaPYw2oefQq2gP2o8%2BQ8cwwOgYBzPEbDAuxsNCsTgsCZNjy7EirAyrxhqwVqwDu4n1Y8%2BxdwQSgUXACTYEd0IgYR5BSFhMWE7YSKggHCQ0EdoJNwkDhFHCJyKTqEu0JroR%2BcQYYjIxh1hILCPWEo8TLxB7iEPENyQSiUMyJ7mQAkmxpFTSEtJG0m5SI%2BksqZs0SBojk8naZGuyBzmULCAryIXkneTD5DPkG%2BQh8lsKnWJAcaT4U%2BIoUspqShnlEOU05QZlmDJBVaOaUt2ooVQRNY9aQq2htlKvUYeoEzR1mjnNgxZJS6WtopXTGmgXaPdpr%2Bh0uhHdlR5Ol9BX0svpR%2BiX6AP0dwwNhhWDx4hnKBmbGAcYZxl3GK%2BYTKYZ04sZx1QwNzHrmOeZD5lvVVgqtip8FZHKCpVKlSaVGyovVKmqpqreqgtV81XLVI%2BpXlN9rkZVM1PjqQnUlqtVqp1Q61MbU2epO6iHqmeob1Q%2FpH5Z%2FYkGWcNMw09DpFGgsV%2FjvMYgC2MZs3gsIWsNq4Z1gTXEJrHN2Xx2KruY%2FR27iz2qqaE5QzNKM1ezUvOUZj8H45hx%2BJx0TgnnKKeX836K3hTvKeIpG6Y0TLkxZVxrqpaXllirSKtRq0frvTau7aedpr1Fu1n7gQ5Bx0onXCdHZ4%2FOBZ3nU9lT3acKpxZNPTr1ri6qa6UbobtEd79up%2B6Ynr5egJ5Mb6feeb3n%2Bhx9L%2F1U%2FW36p%2FVHDFgGswwkBtsMzhg8xTVxbzwdL8fb8VFDXcNAQ6VhlWGX4YSRudE8o9VGjUYPjGnGXOMk423GbcajJgYmISZLTepN7ppSTbmmKaY7TDtMx83MzaLN1pk1mz0x1zLnm%2Beb15vft2BaeFostqi2uGVJsuRaplnutrxuhVo5WaVYVVpds0atna0l1rutu6cRp7lOk06rntZnw7Dxtsm2qbcZsOXYBtuutm22fWFnYhdnt8Wuw%2B6TvZN9un2N%2FT0HDYfZDqsdWh1%2Bc7RyFDpWOt6azpzuP33F9JbpL2dYzxDP2DPjthPLKcRpnVOb00dnF2e5c4PziIuJS4LLLpc%2BLpsbxt3IveRKdPVxXeF60vWdm7Obwu2o26%2FuNu5p7ofcn8w0nymeWTNz0MPIQ%2BBR5dE%2FC5%2BVMGvfrH5PQ0%2BBZ7XnIy9jL5FXrdewt6V3qvdh7xc%2B9j5yn%2BM%2B4zw33jLeWV%2FMN8C3yLfLT8Nvnl%2BF30N%2FI%2F9k%2F3r%2F0QCngCUBZwOJgUGBWwL7%2BHp8Ib%2BOPzrbZfay2e1BjKC5QRVBj4KtguXBrSFoyOyQrSH355jOkc5pDoVQfujW0Adh5mGLw34MJ4WHhVeGP45wiFga0TGXNXfR3ENz30T6RJZE3ptnMU85ry1KNSo%2Bqi5qPNo3ujS6P8YuZlnM1VidWElsSxw5LiquNm5svt%2F87fOH4p3iC%2BN7F5gvyF1weaHOwvSFpxapLhIsOpZATIhOOJTwQRAqqBaMJfITdyWOCnnCHcJnIi%2FRNtGI2ENcKh5O8kgqTXqS7JG8NXkkxTOlLOW5hCepkLxMDUzdmzqeFpp2IG0yPTq9MYOSkZBxQqohTZO2Z%2Bpn5mZ2y6xlhbL%2BxW6Lty8elQfJa7OQrAVZLQq2QqboVFoo1yoHsmdlV2a%2FzYnKOZarnivN7cyzytuQN5zvn%2F%2FtEsIS4ZK2pYZLVy0dWOa9rGo5sjxxedsK4xUFK4ZWBqw8uIq2Km3VT6vtV5eufr0mek1rgV7ByoLBtQFr6wtVCuWFfevc1%2B1dT1gvWd%2B1YfqGnRs%2BFYmKrhTbF5cVf9go3HjlG4dvyr%2BZ3JS0qavEuWTPZtJm6ebeLZ5bDpaql%2BaXDm4N2dq0Dd9WtO319kXbL5fNKNu7g7ZDuaO%2FPLi8ZafJzs07P1SkVPRU%2BlQ27tLdtWHX%2BG7R7ht7vPY07NXbW7z3%2FT7JvttVAVVN1WbVZftJ%2B7P3P66Jqun4lvttXa1ObXHtxwPSA%2F0HIw6217nU1R3SPVRSj9Yr60cOxx%2B%2B%2Fp3vdy0NNg1VjZzG4iNwRHnk6fcJ3%2FceDTradox7rOEH0x92HWcdL2pCmvKaRptTmvtbYlu6T8w%2B0dbq3nr8R9sfD5w0PFl5SvNUyWna6YLTk2fyz4ydlZ19fi753GDborZ752PO32oPb%2B%2B6EHTh0kX%2Fi%2Bc7vDvOXPK4dPKy2%2BUTV7hXmq86X23qdOo8%2FpPTT8e7nLuarrlca7nuer21e2b36RueN87d9L158Rb%2F1tWeOT3dvfN6b%2FfF9%2FXfFt1%2Bcif9zsu72Xcn7q28T7xf9EDtQdlD3YfVP1v%2B3Njv3H9qwHeg89HcR%2FcGhYPP%2FpH1jw9DBY%2BZj8uGDYbrnjg%2BOTniP3L96fynQ89kzyaeF%2F6i%2FsuuFxYvfvjV69fO0ZjRoZfyl5O%2FbXyl%2FerA6xmv28bCxh6%2ByXgzMV70VvvtwXfcdx3vo98PT%2BR8IH8o%2F2j5sfVT0Kf7kxmTk%2F8EA5jz%2FGMzLdsAADvGaVRYdFhNTDpjb20uYWRvYmUueG1wAAAAAAA8P3hwYWNrZXQgYmVnaW49Iu%2B7vyIgaWQ9Ilc1TTBNcENlaGlIenJlU3pOVGN6a2M5ZCI%2FPgo8eDp4bXBtZXRhIHhtbG5zOng9ImFkb2JlOm5zOm1ldGEvIiB4OnhtcHRrPSJBZG9iZSBYTVAgQ29yZSA1LjUtYzAyMSA3OS4xNTQ5MTEsIDIwMTMvMTAvMjktMTE6NDc6MTYgICAgICAgICI%2BCiAgIDxyZGY6UkRGIHhtbG5zOnJkZj0iaHR0cDovL3d3dy53My5vcmcvMTk5OS8wMi8yMi1yZGYtc3ludGF4LW5zIyI%2BCiAgICAgIDxyZGY6RGVzY3JpcHRpb24gcmRmOmFib3V0PSIiCiAgICAgICAgICAgIHhtbG5zOnhtcD0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wLyIKICAgICAgICAgICAgeG1sbnM6eG1wTU09Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9tbS8iCiAgICAgICAgICAgIHhtbG5zOnN0RXZ0PSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvc1R5cGUvUmVzb3VyY2VFdmVudCMiCiAgICAgICAgICAgIHhtbG5zOmRjPSJodHRwOi8vcHVybC5vcmcvZGMvZWxlbWVudHMvMS4xLyIKICAgICAgICAgICAgeG1sbnM6cGhvdG9zaG9wPSJodHRwOi8vbnMuYWRvYmUuY29tL3Bob3Rvc2hvcC8xLjAvIgogICAgICAgICAgICB4bWxuczp0aWZmPSJodHRwOi8vbnMuYWRvYmUuY29tL3RpZmYvMS4wLyIKICAgICAgICAgICAgeG1sbnM6ZXhpZj0iaHR0cDovL25zLmFkb2JlLmNvbS9leGlmLzEuMC8iPgogICAgICAgICA8eG1wOkNyZWF0b3JUb29sPkFkb2JlIFBob3Rvc2hvcCBDQyAoV2luZG93cyk8L3htcDpDcmVhdG9yVG9vbD4KICAgICAgICAgPHhtcDpDcmVhdGVEYXRlPjIwMTQtMDItMTRUMTE6NTU6MzUrMDE6MDA8L3htcDpDcmVhdGVEYXRlPgogICAgICAgICA8eG1wOk1ldGFkYXRhRGF0ZT4yMDE0LTAyLTE0VDEyOjA1OjE3KzAxOjAwPC94bXA6TWV0YWRhdGFEYXRlPgogICAgICAgICA8eG1wOk1vZGlmeURhdGU%2BMjAxNC0wMi0xNFQxMjowNToxNyswMTowMDwveG1wOk1vZGlmeURhdGU%2BCiAgICAgICAgIDx4bXBNTTpJbnN0YW5jZUlEPnhtcC5paWQ6NjU0YmM5YmQtMWI2Yi1jYjRhLTllOWQtNWY2MzgxNDVjZjk0PC94bXBNTTpJbnN0YW5jZUlEPgogICAgICAgICA8eG1wTU06RG9jdW1lbnRJRD54bXAuZGlkOjk4MmM2MGIwLWUzZjMtMDk0MC04MjU0LTFiZTliNWE0ZTE4MzwveG1wTU06RG9jdW1lbnRJRD4KICAgICAgICAgPHhtcE1NOk9yaWdpbmFsRG9jdW1lbnRJRD54bXAuZGlkOjk4MmM2MGIwLWUzZjMtMDk0MC04MjU0LTFiZTliNWE0ZTE4MzwveG1wTU06T3JpZ2luYWxEb2N1bWVudElEPgogICAgICAgICA8eG1wTU06SGlzdG9yeT4KICAgICAgICAgICAgPHJkZjpTZXE%2BCiAgICAgICAgICAgICAgIDxyZGY6bGkgcmRmOnBhcnNlVHlwZT0iUmVzb3VyY2UiPgogICAgICAgICAgICAgICAgICA8c3RFdnQ6YWN0aW9uPmNyZWF0ZWQ8L3N0RXZ0OmFjdGlvbj4KICAgICAgICAgICAgICAgICAgPHN0RXZ0Omluc3RhbmNlSUQ%2BeG1wLmlpZDo5ODJjNjBiMC1lM2YzLTA5NDAtODI1NC0xYmU5YjVhNGUxODM8L3N0RXZ0Omluc3RhbmNlSUQ%2BCiAgICAgICAgICAgICAgICAgIDxzdEV2dDp3aGVuPjIwMTQtMDItMTRUMTE6NTU6MzUrMDE6MDA8L3N0RXZ0OndoZW4%2BCiAgICAgICAgICAgICAgICAgIDxzdEV2dDpzb2Z0d2FyZUFnZW50PkFkb2JlIFBob3Rvc2hvcCBDQyAoV2luZG93cyk8L3N0RXZ0OnNvZnR3YXJlQWdlbnQ%2BCiAgICAgICAgICAgICAgIDwvcmRmOmxpPgogICAgICAgICAgICAgICA8cmRmOmxpIHJkZjpwYXJzZVR5cGU9IlJlc291cmNlIj4KICAgICAgICAgICAgICAgICAgPHN0RXZ0OmFjdGlvbj5zYXZlZDwvc3RFdnQ6YWN0aW9uPgogICAgICAgICAgICAgICAgICA8c3RFdnQ6aW5zdGFuY2VJRD54bXAuaWlkOjIxODYxNmM2LTM1MWMtNDI0OS04YWFkLWJkZDQ2ZTczNWE0NDwvc3RFdnQ6aW5zdGFuY2VJRD4KICAgICAgICAgICAgICAgICAgPHN0RXZ0OndoZW4%2BMjAxNC0wMi0xNFQxMTo1NTozNSswMTowMDwvc3RFdnQ6d2hlbj4KICAgICAgICAgICAgICAgICAgPHN0RXZ0OnNvZnR3YXJlQWdlbnQ%2BQWRvYmUgUGhvdG9zaG9wIENDIChXaW5kb3dzKTwvc3RFdnQ6c29mdHdhcmVBZ2VudD4KICAgICAgICAgICAgICAgICAgPHN0RXZ0OmNoYW5nZWQ%2BLzwvc3RFdnQ6Y2hhbmdlZD4KICAgICAgICAgICAgICAgPC9yZGY6bGk%2BCiAgICAgICAgICAgICAgIDxyZGY6bGkgcmRmOnBhcnNlVHlwZT0iUmVzb3VyY2UiPgogICAgICAgICAgICAgICAgICA8c3RFdnQ6YWN0aW9uPnNhdmVkPC9zdEV2dDphY3Rpb24%2BCiAgICAgICAgICAgICAgICAgIDxzdEV2dDppbnN0YW5jZUlEPnhtcC5paWQ6NjU0YmM5YmQtMWI2Yi1jYjRhLTllOWQtNWY2MzgxNDVjZjk0PC9zdEV2dDppbnN0YW5jZUlEPgogICAgICAgICAgICAgICAgICA8c3RFdnQ6d2hlbj4yMDE0LTAyLTE0VDEyOjA1OjE3KzAxOjAwPC9zdEV2dDp3aGVuPgogICAgICAgICAgICAgICAgICA8c3RFdnQ6c29mdHdhcmVBZ2VudD5BZG9iZSBQaG90b3Nob3AgQ0MgKFdpbmRvd3MpPC9zdEV2dDpzb2Z0d2FyZUFnZW50PgogICAgICAgICAgICAgICAgICA8c3RFdnQ6Y2hhbmdlZD4vPC9zdEV2dDpjaGFuZ2VkPgogICAgICAgICAgICAgICA8L3JkZjpsaT4KICAgICAgICAgICAgPC9yZGY6U2VxPgogICAgICAgICA8L3htcE1NOkhpc3Rvcnk%2BCiAgICAgICAgIDxkYzpmb3JtYXQ%2BaW1hZ2UvcG5nPC9kYzpmb3JtYXQ%2BCiAgICAgICAgIDxwaG90b3Nob3A6Q29sb3JNb2RlPjM8L3Bob3Rvc2hvcDpDb2xvck1vZGU%2BCiAgICAgICAgIDxwaG90b3Nob3A6SUNDUHJvZmlsZT5zUkdCIElFQzYxOTY2LTIuMTwvcGhvdG9zaG9wOklDQ1Byb2ZpbGU%2BCiAgICAgICAgIDx0aWZmOk9yaWVudGF0aW9uPjE8L3RpZmY6T3JpZW50YXRpb24%2BCiAgICAgICAgIDx0aWZmOlhSZXNvbHV0aW9uPjcyMDAwMC8xMDAwMDwvdGlmZjpYUmVzb2x1dGlvbj4KICAgICAgICAgPHRpZmY6WVJlc29sdXRpb24%2BNzIwMDAwLzEwMDAwPC90aWZmOllSZXNvbHV0aW9uPgogICAgICAgICA8dGlmZjpSZXNvbHV0aW9uVW5pdD4yPC90aWZmOlJlc29sdXRpb25Vbml0PgogICAgICAgICA8ZXhpZjpDb2xvclNwYWNlPjE8L2V4aWY6Q29sb3JTcGFjZT4KICAgICAgICAgPGV4aWY6UGl4ZWxYRGltZW5zaW9uPjc8L2V4aWY6UGl4ZWxYRGltZW5zaW9uPgogICAgICAgICA8ZXhpZjpQaXhlbFlEaW1lbnNpb24%2BNzwvZXhpZjpQaXhlbFlEaW1lbnNpb24%2BCiAgICAgIDwvcmRmOkRlc2NyaXB0aW9uPgogICA8L3JkZjpSREY%2BCjwveDp4bXBtZXRhPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgIAo8P3hwYWNrZXQgZW5kPSJ3Ij8%2BcZUZMwAAACBjSFJNAAB6JQAAgIMAAPn%2FAACA6QAAdTAAAOpgAAA6mAAAF2%2BSX8VGAAAA2ElEQVR42gDLADT%2FAS0tLUQFBQUVFxcXtPHx8fPl5eUNCAgITCkpKesEHx8fGgYGBjH%2B%2Fv4a%2BPj4qgQEBFU6OjodMTExzwQUFBSvEBAQEfX19SD19fVqNDQ0CElJSd%2F9%2Ff2vAwEBAfrn5%2BfkBwcHLRYWFgsXFxfz29vbo9LS0uwDDQ0NDfPz81orKysXIyMj%2BODg4Avh4eEa%2Ff391gMkJCRYPz8%2FKUhISOMCAgKh8fHxHRsbGx4UFBQQBDk5OeY7Ozv7CAgItPb29vMEBASaJSUlTQ0NDesDAEwpT0Ko8Ri2AAAAAElFTkSuQmCC%29%3Buser%2Dselect%3Anone%7Ddiv%2Evis%2Dnetwork%20div%2Evis%2Dclose%3Ahover%7Bopacity%3A%2E6%7Ddiv%2Evis%2Dnetwork%20div%2Evis%2Dedit%2Dmode%20div%2Evis%2Dbutton%2Cdiv%2Evis%2Dnetwork%20div%2Evis%2Dmanipulation%20div%2Evis%2Dbutton%7Bfloat%3Aleft%3Bfont%2Dfamily%3Averdana%3Bfont%2Dsize%3A12px%3B%2Dmoz%2Dborder%2Dradius%3A15px%3Bborder%2Dradius%3A15px%3Bdisplay%3Ainline%2Dblock%3Bbackground%2Dposition%3A0%200%3Bbackground%2Drepeat%3Ano%2Drepeat%3Bheight%3A24px%3Bmargin%2Dleft%3A10px%3Bpadding%3A0%208px%3Buser%2Dselect%3Anone%7Ddiv%2Evis%2Dnetwork%20div%2Evis%2Dmanipulation%20div%2Evis%2Dbutton%3Ahover%7Bbox%2Dshadow%3A1px%201px%208px%20rgba%280%2C0%2C0%2C%2E2%29%7Ddiv%2Evis%2Dnetwork%20div%2Evis%2Dmanipulation%20div%2Evis%2Dbutton%3Aactive%7Bbox%2Dshadow%3A1px%201px%208px%20rgba%280%2C0%2C0%2C%2E5%29%7Ddiv%2Evis%2Dnetwork%20div%2Evis%2Dmanipulation%20div%2Evis%2Dbutton%2Evis%2Dback%7Bbackground%2Dimage%3Aurl%28data%3Aimage%2Fpng%3Bbase64%2CiVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAAACXBIWXMAAAsTAAALEwEAmpwYAAAKT2lDQ1BQaG90b3Nob3AgSUNDIHByb2ZpbGUAAHjanVNnVFPpFj333vRCS4iAlEtvUhUIIFJCi4AUkSYqIQkQSoghodkVUcERRUUEG8igiAOOjoCMFVEsDIoK2AfkIaKOg6OIisr74Xuja9a89%2BbN%2FrXXPues852zzwfACAyWSDNRNYAMqUIeEeCDx8TG4eQuQIEKJHAAEAizZCFz%2FSMBAPh%2BPDwrIsAHvgABeNMLCADATZvAMByH%2Fw%2FqQplcAYCEAcB0kThLCIAUAEB6jkKmAEBGAYCdmCZTAKAEAGDLY2LjAFAtAGAnf%2BbTAICd%2BJl7AQBblCEVAaCRACATZYhEAGg7AKzPVopFAFgwABRmS8Q5ANgtADBJV2ZIALC3AMDOEAuyAAgMADBRiIUpAAR7AGDIIyN4AISZABRG8lc88SuuEOcqAAB4mbI8uSQ5RYFbCC1xB1dXLh4ozkkXKxQ2YQJhmkAuwnmZGTKBNA%2Fg88wAAKCRFRHgg%2FP9eM4Ors7ONo62Dl8t6r8G%2FyJiYuP%2B5c%2BrcEAAAOF0ftH%2BLC%2BzGoA7BoBt%2FqIl7gRoXgugdfeLZrIPQLUAoOnaV%2FNw%2BH48PEWhkLnZ2eXk5NhKxEJbYcpXff5nwl%2FAV%2F1s%2BX48%2FPf14L7iJIEyXYFHBPjgwsz0TKUcz5IJhGLc5o9H%2FLcL%2F%2Fwd0yLESWK5WCoU41EScY5EmozzMqUiiUKSKcUl0v9k4t8s%2BwM%2B3zUAsGo%2BAXuRLahdYwP2SycQWHTA4vcAAPK7b8HUKAgDgGiD4c93%2F%2B8%2F%2FUegJQCAZkmScQAAXkQkLlTKsz%2FHCAAARKCBKrBBG%2FTBGCzABhzBBdzBC%2FxgNoRCJMTCQhBCCmSAHHJgKayCQiiGzbAdKmAv1EAdNMBRaIaTcA4uwlW4Dj1wD%2FphCJ7BKLyBCQRByAgTYSHaiAFiilgjjggXmYX4IcFIBBKLJCDJiBRRIkuRNUgxUopUIFVIHfI9cgI5h1xGupE7yAAygvyGvEcxlIGyUT3UDLVDuag3GoRGogvQZHQxmo8WoJvQcrQaPYw2oefQq2gP2o8%2BQ8cwwOgYBzPEbDAuxsNCsTgsCZNjy7EirAyrxhqwVqwDu4n1Y8%2BxdwQSgUXACTYEd0IgYR5BSFhMWE7YSKggHCQ0EdoJNwkDhFHCJyKTqEu0JroR%2BcQYYjIxh1hILCPWEo8TLxB7iEPENyQSiUMyJ7mQAkmxpFTSEtJG0m5SI%2BksqZs0SBojk8naZGuyBzmULCAryIXkneTD5DPkG%2BQh8lsKnWJAcaT4U%2BIoUspqShnlEOU05QZlmDJBVaOaUt2ooVQRNY9aQq2htlKvUYeoEzR1mjnNgxZJS6WtopXTGmgXaPdpr%2Bh0uhHdlR5Ol9BX0svpR%2BiX6AP0dwwNhhWDx4hnKBmbGAcYZxl3GK%2BYTKYZ04sZx1QwNzHrmOeZD5lvVVgqtip8FZHKCpVKlSaVGyovVKmqpqreqgtV81XLVI%2BpXlN9rkZVM1PjqQnUlqtVqp1Q61MbU2epO6iHqmeob1Q%2FpH5Z%2FYkGWcNMw09DpFGgsV%2FjvMYgC2MZs3gsIWsNq4Z1gTXEJrHN2Xx2KruY%2FR27iz2qqaE5QzNKM1ezUvOUZj8H45hx%2BJx0TgnnKKeX836K3hTvKeIpG6Y0TLkxZVxrqpaXllirSKtRq0frvTau7aedpr1Fu1n7gQ5Bx0onXCdHZ4%2FOBZ3nU9lT3acKpxZNPTr1ri6qa6UbobtEd79up%2B6Ynr5egJ5Mb6feeb3n%2Bhx9L%2F1U%2FW36p%2FVHDFgGswwkBtsMzhg8xTVxbzwdL8fb8VFDXcNAQ6VhlWGX4YSRudE8o9VGjUYPjGnGXOMk423GbcajJgYmISZLTepN7ppSTbmmKaY7TDtMx83MzaLN1pk1mz0x1zLnm%2Beb15vft2BaeFostqi2uGVJsuRaplnutrxuhVo5WaVYVVpds0atna0l1rutu6cRp7lOk06rntZnw7Dxtsm2qbcZsOXYBtuutm22fWFnYhdnt8Wuw%2B6TvZN9un2N%2FT0HDYfZDqsdWh1%2Bc7RyFDpWOt6azpzuP33F9JbpL2dYzxDP2DPjthPLKcRpnVOb00dnF2e5c4PziIuJS4LLLpc%2BLpsbxt3IveRKdPVxXeF60vWdm7Obwu2o26%2FuNu5p7ofcn8w0nymeWTNz0MPIQ%2BBR5dE%2FC5%2BVMGvfrH5PQ0%2BBZ7XnIy9jL5FXrdewt6V3qvdh7xc%2B9j5yn%2BM%2B4zw33jLeWV%2FMN8C3yLfLT8Nvnl%2BF30N%2FI%2F9k%2F3r%2F0QCngCUBZwOJgUGBWwL7%2BHp8Ib%2BOPzrbZfay2e1BjKC5QRVBj4KtguXBrSFoyOyQrSH355jOkc5pDoVQfujW0Adh5mGLw34MJ4WHhVeGP45wiFga0TGXNXfR3ENz30T6RJZE3ptnMU85ry1KNSo%2Bqi5qPNo3ujS6P8YuZlnM1VidWElsSxw5LiquNm5svt%2F87fOH4p3iC%2BN7F5gvyF1weaHOwvSFpxapLhIsOpZATIhOOJTwQRAqqBaMJfITdyWOCnnCHcJnIi%2FRNtGI2ENcKh5O8kgqTXqS7JG8NXkkxTOlLOW5hCepkLxMDUzdmzqeFpp2IG0yPTq9MYOSkZBxQqohTZO2Z%2Bpn5mZ2y6xlhbL%2BxW6Lty8elQfJa7OQrAVZLQq2QqboVFoo1yoHsmdlV2a%2FzYnKOZarnivN7cyzytuQN5zvn%2F%2FtEsIS4ZK2pYZLVy0dWOa9rGo5sjxxedsK4xUFK4ZWBqw8uIq2Km3VT6vtV5eufr0mek1rgV7ByoLBtQFr6wtVCuWFfevc1%2B1dT1gvWd%2B1YfqGnRs%2BFYmKrhTbF5cVf9go3HjlG4dvyr%2BZ3JS0qavEuWTPZtJm6ebeLZ5bDpaql%2BaXDm4N2dq0Dd9WtO319kXbL5fNKNu7g7ZDuaO%2FPLi8ZafJzs07P1SkVPRU%2BlQ27tLdtWHX%2BG7R7ht7vPY07NXbW7z3%2FT7JvttVAVVN1WbVZftJ%2B7P3P66Jqun4lvttXa1ObXHtxwPSA%2F0HIw6217nU1R3SPVRSj9Yr60cOxx%2B%2B%2Fp3vdy0NNg1VjZzG4iNwRHnk6fcJ3%2FceDTradox7rOEH0x92HWcdL2pCmvKaRptTmvtbYlu6T8w%2B0dbq3nr8R9sfD5w0PFl5SvNUyWna6YLTk2fyz4ydlZ19fi753GDborZ752PO32oPb%2B%2B6EHTh0kX%2Fi%2Bc7vDvOXPK4dPKy2%2BUTV7hXmq86X23qdOo8%2FpPTT8e7nLuarrlca7nuer21e2b36RueN87d9L158Rb%2F1tWeOT3dvfN6b%2FfF9%2FXfFt1%2Bcif9zsu72Xcn7q28T7xf9EDtQdlD3YfVP1v%2B3Njv3H9qwHeg89HcR%2FcGhYPP%2FpH1jw9DBY%2BZj8uGDYbrnjg%2BOTniP3L96fynQ89kzyaeF%2F6i%2FsuuFxYvfvjV69fO0ZjRoZfyl5O%2FbXyl%2FerA6xmv28bCxh6%2ByXgzMV70VvvtwXfcdx3vo98PT%2BR8IH8o%2F2j5sfVT0Kf7kxmTk%2F8EA5jz%2FGMzLdsAAEEOaVRYdFhNTDpjb20uYWRvYmUueG1wAAAAAAA8P3hwYWNrZXQgYmVnaW49Iu%2B7vyIgaWQ9Ilc1TTBNcENlaGlIenJlU3pOVGN6a2M5ZCI%2FPgo8eDp4bXBtZXRhIHhtbG5zOng9ImFkb2JlOm5zOm1ldGEvIiB4OnhtcHRrPSJBZG9iZSBYTVAgQ29yZSA1LjUtYzAyMSA3OS4xNTQ5MTEsIDIwMTMvMTAvMjktMTE6NDc6MTYgICAgICAgICI%2BCiAgIDxyZGY6UkRGIHhtbG5zOnJkZj0iaHR0cDovL3d3dy53My5vcmcvMTk5OS8wMi8yMi1yZGYtc3ludGF4LW5zIyI%2BCiAgICAgIDxyZGY6RGVzY3JpcHRpb24gcmRmOmFib3V0PSIiCiAgICAgICAgICAgIHhtbG5zOnhtcD0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wLyIKICAgICAgICAgICAgeG1sbnM6ZGM9Imh0dHA6Ly9wdXJsLm9yZy9kYy9lbGVtZW50cy8xLjEvIgogICAgICAgICAgICB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIKICAgICAgICAgICAgeG1sbnM6c3RFdnQ9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZUV2ZW50IyIKICAgICAgICAgICAgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZVJlZiMiCiAgICAgICAgICAgIHhtbG5zOnBob3Rvc2hvcD0iaHR0cDovL25zLmFkb2JlLmNvbS9waG90b3Nob3AvMS4wLyIKICAgICAgICAgICAgeG1sbnM6dGlmZj0iaHR0cDovL25zLmFkb2JlLmNvbS90aWZmLzEuMC8iCiAgICAgICAgICAgIHhtbG5zOmV4aWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20vZXhpZi8xLjAvIj4KICAgICAgICAgPHhtcDpDcmVhdG9yVG9vbD5BZG9iZSBQaG90b3Nob3AgQ0MgKFdpbmRvd3MpPC94bXA6Q3JlYXRvclRvb2w%2BCiAgICAgICAgIDx4bXA6Q3JlYXRlRGF0ZT4yMDE0LTAxLTIyVDE5OjI0OjUxKzAxOjAwPC94bXA6Q3JlYXRlRGF0ZT4KICAgICAgICAgPHhtcDpNZXRhZGF0YURhdGU%2BMjAxNC0wMi0wNFQxNTowMTowOSswMTowMDwveG1wOk1ldGFkYXRhRGF0ZT4KICAgICAgICAgPHhtcDpNb2RpZnlEYXRlPjIwMTQtMDItMDRUMTU6MDE6MDkrMDE6MDA8L3htcDpNb2RpZnlEYXRlPgogICAgICAgICA8ZGM6Zm9ybWF0PmltYWdlL3BuZzwvZGM6Zm9ybWF0PgogICAgICAgICA8eG1wTU06SW5zdGFuY2VJRD54bXAuaWlkOmI2YjQwMjVkLTAxNjQtMzU0OC1hOTdlLTQ4ZmYxMWM3NTYzMzwveG1wTU06SW5zdGFuY2VJRD4KICAgICAgICAgPHhtcE1NOkRvY3VtZW50SUQ%2BeG1wLmRpZDpFQTc2MkY5Njc0ODNFMzExOTQ4QkQxM0UyQkU3OTlBMTwveG1wTU06RG9jdW1lbnRJRD4KICAgICAgICAgPHhtcE1NOk9yaWdpbmFsRG9jdW1lbnRJRD54bXAuZGlkOjczQjYyQUFEOTE4M0UzMTE5NDhCRDEzRTJCRTc5OUExPC94bXBNTTpPcmlnaW5hbERvY3VtZW50SUQ%2BCiAgICAgICAgIDx4bXBNTTpIaXN0b3J5PgogICAgICAgICAgICA8cmRmOlNlcT4KICAgICAgICAgICAgICAgPHJkZjpsaSByZGY6cGFyc2VUeXBlPSJSZXNvdXJjZSI%2BCiAgICAgICAgICAgICAgICAgIDxzdEV2dDphY3Rpb24%2BY3JlYXRlZDwvc3RFdnQ6YWN0aW9uPgogICAgICAgICAgICAgICAgICA8c3RFdnQ6aW5zdGFuY2VJRD54bXAuaWlkOjczQjYyQUFEOTE4M0UzMTE5NDhCRDEzRTJCRTc5OUExPC9zdEV2dDppbnN0YW5jZUlEPgogICAgICAgICAgICAgICAgICA8c3RFdnQ6d2hlbj4yMDE0LTAxLTIyVDE5OjI0OjUxKzAxOjAwPC9zdEV2dDp3aGVuPgogICAgICAgICAgICAgICAgICA8c3RFdnQ6c29mdHdhcmVBZ2VudD5BZG9iZSBQaG90b3Nob3AgQ1M2IChXaW5kb3dzKTwvc3RFdnQ6c29mdHdhcmVBZ2VudD4KICAgICAgICAgICAgICAgPC9yZGY6bGk%2BCiAgICAgICAgICAgICAgIDxyZGY6bGkgcmRmOnBhcnNlVHlwZT0iUmVzb3VyY2UiPgogICAgICAgICAgICAgICAgICA8c3RFdnQ6YWN0aW9uPnNhdmVkPC9zdEV2dDphY3Rpb24%2BCiAgICAgICAgICAgICAgICAgIDxzdEV2dDppbnN0YW5jZUlEPnhtcC5paWQ6RUE2MEEyNEUxOTg0RTMxMUFEQUZFRkU2RUMzMzNFMDM8L3N0RXZ0Omluc3RhbmNlSUQ%2BCiAgICAgICAgICAgICAgICAgIDxzdEV2dDp3aGVuPjIwMTQtMDEtMjNUMTk6MTg6MDcrMDE6MDA8L3N0RXZ0OndoZW4%2BCiAgICAgICAgICAgICAgICAgIDxzdEV2dDpzb2Z0d2FyZUFnZW50PkFkb2JlIFBob3Rvc2hvcCBDUzYgKFdpbmRvd3MpPC9zdEV2dDpzb2Z0d2FyZUFnZW50PgogICAgICAgICAgICAgICAgICA8c3RFdnQ6Y2hhbmdlZD4vPC9zdEV2dDpjaGFuZ2VkPgogICAgICAgICAgICAgICA8L3JkZjpsaT4KICAgICAgICAgICAgICAgPHJkZjpsaSByZGY6cGFyc2VUeXBlPSJSZXNvdXJjZSI%2BCiAgICAgICAgICAgICAgICAgIDxzdEV2dDphY3Rpb24%2Bc2F2ZWQ8L3N0RXZ0OmFjdGlvbj4KICAgICAgICAgICAgICAgICAgPHN0RXZ0Omluc3RhbmNlSUQ%2BeG1wLmlpZDpmOWQ3OGY4ZC1lNzY0LTc1NDgtODZiNy1iNmQ1OGMzZDg2OTc8L3N0RXZ0Omluc3RhbmNlSUQ%2BCiAgICAgICAgICAgICAgICAgIDxzdEV2dDp3aGVuPjIwMTQtMDItMDRUMTU6MDE6MDkrMDE6MDA8L3N0RXZ0OndoZW4%2BCiAgICAgICAgICAgICAgICAgIDxzdEV2dDpzb2Z0d2FyZUFnZW50PkFkb2JlIFBob3Rvc2hvcCBDQyAoV2luZG93cyk8L3N0RXZ0OnNvZnR3YXJlQWdlbnQ%2BCiAgICAgICAgICAgICAgICAgIDxzdEV2dDpjaGFuZ2VkPi88L3N0RXZ0OmNoYW5nZWQ%2BCiAgICAgICAgICAgICAgIDwvcmRmOmxpPgogICAgICAgICAgICAgICA8cmRmOmxpIHJkZjpwYXJzZVR5cGU9IlJlc291cmNlIj4KICAgICAgICAgICAgICAgICAgPHN0RXZ0OmFjdGlvbj5jb252ZXJ0ZWQ8L3N0RXZ0OmFjdGlvbj4KICAgICAgICAgICAgICAgICAgPHN0RXZ0OnBhcmFtZXRlcnM%2BZnJvbSBhcHBsaWNhdGlvbi92bmQuYWRvYmUucGhvdG9zaG9wIHRvIGltYWdlL3BuZzwvc3RFdnQ6cGFyYW1ldGVycz4KICAgICAgICAgICAgICAgPC9yZGY6bGk%2BCiAgICAgICAgICAgICAgIDxyZGY6bGkgcmRmOnBhcnNlVHlwZT0iUmVzb3VyY2UiPgogICAgICAgICAgICAgICAgICA8c3RFdnQ6YWN0aW9uPmRlcml2ZWQ8L3N0RXZ0OmFjdGlvbj4KICAgICAgICAgICAgICAgICAgPHN0RXZ0OnBhcmFtZXRlcnM%2BY29udmVydGVkIGZyb20gYXBwbGljYXRpb24vdm5kLmFkb2JlLnBob3Rvc2hvcCB0byBpbWFnZS9wbmc8L3N0RXZ0OnBhcmFtZXRlcnM%2BCiAgICAgICAgICAgICAgIDwvcmRmOmxpPgogICAgICAgICAgICAgICA8cmRmOmxpIHJkZjpwYXJzZVR5cGU9IlJlc291cmNlIj4KICAgICAgICAgICAgICAgICAgPHN0RXZ0OmFjdGlvbj5zYXZlZDwvc3RFdnQ6YWN0aW9uPgogICAgICAgICAgICAgICAgICA8c3RFdnQ6aW5zdGFuY2VJRD54bXAuaWlkOmI2YjQwMjVkLTAxNjQtMzU0OC1hOTdlLTQ4ZmYxMWM3NTYzMzwvc3RFdnQ6aW5zdGFuY2VJRD4KICAgICAgICAgICAgICAgICAgPHN0RXZ0OndoZW4%2BMjAxNC0wMi0wNFQxNTowMTowOSswMTowMDwvc3RFdnQ6d2hlbj4KICAgICAgICAgICAgICAgICAgPHN0RXZ0OnNvZnR3YXJlQWdlbnQ%2BQWRvYmUgUGhvdG9zaG9wIENDIChXaW5kb3dzKTwvc3RFdnQ6c29mdHdhcmVBZ2VudD4KICAgICAgICAgICAgICAgICAgPHN0RXZ0OmNoYW5nZWQ%2BLzwvc3RFdnQ6Y2hhbmdlZD4KICAgICAgICAgICAgICAgPC9yZGY6bGk%2BCiAgICAgICAgICAgIDwvcmRmOlNlcT4KICAgICAgICAgPC94bXBNTTpIaXN0b3J5PgogICAgICAgICA8eG1wTU06RGVyaXZlZEZyb20gcmRmOnBhcnNlVHlwZT0iUmVzb3VyY2UiPgogICAgICAgICAgICA8c3RSZWY6aW5zdGFuY2VJRD54bXAuaWlkOmY5ZDc4ZjhkLWU3NjQtNzU0OC04NmI3LWI2ZDU4YzNkODY5Nzwvc3RSZWY6aW5zdGFuY2VJRD4KICAgICAgICAgICAgPHN0UmVmOmRvY3VtZW50SUQ%2BeG1wLmRpZDpFQTc2MkY5Njc0ODNFMzExOTQ4QkQxM0UyQkU3OTlBMTwvc3RSZWY6ZG9jdW1lbnRJRD4KICAgICAgICAgICAgPHN0UmVmOm9yaWdpbmFsRG9jdW1lbnRJRD54bXAuZGlkOjczQjYyQUFEOTE4M0UzMTE5NDhCRDEzRTJCRTc5OUExPC9zdFJlZjpvcmlnaW5hbERvY3VtZW50SUQ%2BCiAgICAgICAgIDwveG1wTU06RGVyaXZlZEZyb20%2BCiAgICAgICAgIDxwaG90b3Nob3A6Q29sb3JNb2RlPjM8L3Bob3Rvc2hvcDpDb2xvck1vZGU%2BCiAgICAgICAgIDxwaG90b3Nob3A6SUNDUHJvZmlsZT5zUkdCIElFQzYxOTY2LTIuMTwvcGhvdG9zaG9wOklDQ1Byb2ZpbGU%2BCiAgICAgICAgIDx0aWZmOk9yaWVudGF0aW9uPjE8L3RpZmY6T3JpZW50YXRpb24%2BCiAgICAgICAgIDx0aWZmOlhSZXNvbHV0aW9uPjcyMDA5MC8xMDAwMDwvdGlmZjpYUmVzb2x1dGlvbj4KICAgICAgICAgPHRpZmY6WVJlc29sdXRpb24%2BNzIwMDkwLzEwMDAwPC90aWZmOllSZXNvbHV0aW9uPgogICAgICAgICA8dGlmZjpSZXNvbHV0aW9uVW5pdD4yPC90aWZmOlJlc29sdXRpb25Vbml0PgogICAgICAgICA8ZXhpZjpDb2xvclNwYWNlPjE8L2V4aWY6Q29sb3JTcGFjZT4KICAgICAgICAgPGV4aWY6UGl4ZWxYRGltZW5zaW9uPjI0PC9leGlmOlBpeGVsWERpbWVuc2lvbj4KICAgICAgICAgPGV4aWY6UGl4ZWxZRGltZW5zaW9uPjI0PC9leGlmOlBpeGVsWURpbWVuc2lvbj4KICAgICAgPC9yZGY6RGVzY3JpcHRpb24%2BCiAgIDwvcmRmOlJERj4KPC94OnhtcG1ldGE%2BCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgCjw%2FeHBhY2tldCBlbmQ9InciPz4jq1U%2FAAAAIGNIUk0AAHolAACAgwAA%2Bf8AAIDpAAB1MAAA6mAAADqYAAAXb5JfxUYAAAVTSURBVHjanFVfTFNnFP%2Bd77ve8qeVFbBrpcVgRrCRFikFByLxwSAaE32oRCHD6JMxxhhn8G2RxxH3MsOTbyYsmCAxPMmMMYtkIUYmK60OO0qAK23BFlNob0uh3x7WS5jLZPpLbm6%2Bk%2FP9zrm5v9855PF4UFhYCABgjIExBgAgIqRSqRIi6gDQRkQ1RGTB3wgR0e8AHgH4Sa%2FXR%2FEBiAiJRAJ04cIF5Ofng4g2n0gkUkxENwF0c843LzHGQEQQQkCLExEA9ALotVgsUQAQQmgNQhJCbF5kjCEUCl0moj4t5na7fTU1NUpVVVXUYrEkASAcDhe8efOmxOfzWScmJqoBdBNR99LS0hWz2dynNSSEAF28eBGFhYVgjCEcDn9HRD1EhIMHD3o9Hs9kWVlZAh9BKBQqGB4edr58%2BdKZ%2B6JbJpOpBwBWV1fB6%2BrqIMsyIpHIFcZYL2MMra2tY5cuXRrfuXNnBtvAYDBk3G63oqpqZm5uzgrgSDKZjBoMhueZTAbc5XIhFouVEtFTxhiOHTs2dv78eS8%2BEfv374%2BoqpqZnZ21cs5PJJPJPlmWkyynnBuMMTQ0NHi7uro%2BmVyDx%2BPxulwu71ZOlkqlSonoJhGhvb39s8k1nDx50ss5hyRJN9PpdKlERB2aWjSVaEilUvzBgwcORVEs5eXloXPnzk1sV8BkMiUdDofP7%2FdXZ7PZDilnIhw4cGBeS1pbW2P37t1zBwKBikQiUUREWFhYsHHO0d7evm0Ru90%2B%2F%2BrVq2rO%2BXGJiJxEhMrKyhgAjI6OWoeHh5tWVla%2B4JzDZrO9bW5unhwcHGzz%2B%2F32np4e%2BxaDbfoHAMxmc6ijo2O0oqIiJkkSNjY2HBIRmRljMJvNyWfPnln7%2B%2FtPMMZQXl6%2B0NbW9qK2tjYcj8floaEhqKpq%2BHCkbD3PzMwYBgYG0NXV9UuusFna2kEgELAQEQ4dOvSis7PzN41Ar9dnrl27NqCNkv%2FC3bt3zy4tLVmICJxzEBFJRBQmorLFxcWCqqqq0Pj4eO3Y2JhbUZTdra2tL2pra8OJRGLHnTt3zkqS9K%2BhuHU4EhHMZnMoGo0W5OIh7nK5jjLGKq1W69vDhw8rRqMxMjc3t2t5eXnX5ORklc%2FnM%2Bfl5SWnpqa%2B0uv1K%2Fn5%2BWs6nW5NluXNd15e3ppOp1uz2WyzZ86cGQ0Gg6ZAIFCZzWZ%2FlYjokRDiuN%2Fvt7W0tMw3NTUpbrd78P79%2B%2B5gMFgRiUTKHj58WMYYQ3V19etTp05tq6Lp6Wkb5xxCiEfc7XZPM8a6FxcXTfX19a%2F1en2Gcy5qamreNjY2%2FqGq6joRZe12%2B9Tp06e3JY%2FFYgWPHz8%2Bmhvr3%2FCWlpbk%2Bvp6PmOseWVlBS6XS9GSJUkSdrs93NDQ8Oe%2BffvC%2F8fJIyMjddFo9Esi6pVleVjT2m0A8Hq9zqGhIefnjoknT544A4GAM%2FeDbxMReFNTE0pKSpKqqsaI6Pj8%2FLxVVdWM3W6PfCr5xMTE1zllXS0uLn6aSqXAGxsbodPpoNfrn6uqCs75EUVRrJFIZMfevXsXdTrdxseIE4mEPDIyUu%2F3%2B%2Btynd8yGo29RIR0Og26fv06ioqKwBgD5xzv3r27zBjrIyJIkgSHwzFZWVmp7NmzJ1ZaWpoAgGg0WqgoSvHMzIw1GAw6tvjhitFo7NPW5fv370Hd3d0oKCgA53zTQMvLy%2BVCiKuSJH0rSdLmztZytIWv5RPRD0T0Y3Fx8dzWfby6ugopHo%2F%2Fw4mcc8iyPMc5v5FOp7%2FPZrOdQohWInIC2C2EgBBigYi8Qoifs9lsv06nWyIiaFxagXg8jr8GAGxuIe7LBeWhAAAAAElFTkSuQmCC%29%7Ddiv%2Evis%2Dnetwork%20div%2Evis%2Dmanipulation%20div%2Evis%2Dbutton%2Evis%2Dnone%3Ahover%7Bbox%2Dshadow%3A1px%201px%208px%20transparent%3Bcursor%3Adefault%7Ddiv%2Evis%2Dnetwork%20div%2Evis%2Dmanipulation%20div%2Evis%2Dbutton%2Evis%2Dnone%3Aactive%7Bbox%2Dshadow%3A1px%201px%208px%20transparent%7Ddiv%2Evis%2Dnetwork%20div%2Evis%2Dmanipulation%20div%2Evis%2Dbutton%2Evis%2Dnone%7Bpadding%3A0%7Ddiv%2Evis%2Dnetwork%20div%2Evis%2Dmanipulation%20div%2Enotification%7Bmargin%3A2px%3Bfont%2Dweight%3A700%7Ddiv%2Evis%2Dnetwork%20div%2Evis%2Dmanipulation%20div%2Evis%2Dbutton%2Evis%2Dadd%7Bbackground%2Dimage%3Aurl%28data%3Aimage%2Fpng%3Bbase64%2CiVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAAACXBIWXMAAAsTAAALEwEAmpwYAAAKT2lDQ1BQaG90b3Nob3AgSUNDIHByb2ZpbGUAAHjanVNnVFPpFj333vRCS4iAlEtvUhUIIFJCi4AUkSYqIQkQSoghodkVUcERRUUEG8igiAOOjoCMFVEsDIoK2AfkIaKOg6OIisr74Xuja9a89%2BbN%2FrXXPues852zzwfACAyWSDNRNYAMqUIeEeCDx8TG4eQuQIEKJHAAEAizZCFz%2FSMBAPh%2BPDwrIsAHvgABeNMLCADATZvAMByH%2Fw%2FqQplcAYCEAcB0kThLCIAUAEB6jkKmAEBGAYCdmCZTAKAEAGDLY2LjAFAtAGAnf%2BbTAICd%2BJl7AQBblCEVAaCRACATZYhEAGg7AKzPVopFAFgwABRmS8Q5ANgtADBJV2ZIALC3AMDOEAuyAAgMADBRiIUpAAR7AGDIIyN4AISZABRG8lc88SuuEOcqAAB4mbI8uSQ5RYFbCC1xB1dXLh4ozkkXKxQ2YQJhmkAuwnmZGTKBNA%2Fg88wAAKCRFRHgg%2FP9eM4Ors7ONo62Dl8t6r8G%2FyJiYuP%2B5c%2BrcEAAAOF0ftH%2BLC%2BzGoA7BoBt%2FqIl7gRoXgugdfeLZrIPQLUAoOnaV%2FNw%2BH48PEWhkLnZ2eXk5NhKxEJbYcpXff5nwl%2FAV%2F1s%2BX48%2FPf14L7iJIEyXYFHBPjgwsz0TKUcz5IJhGLc5o9H%2FLcL%2F%2Fwd0yLESWK5WCoU41EScY5EmozzMqUiiUKSKcUl0v9k4t8s%2BwM%2B3zUAsGo%2BAXuRLahdYwP2SycQWHTA4vcAAPK7b8HUKAgDgGiD4c93%2F%2B8%2F%2FUegJQCAZkmScQAAXkQkLlTKsz%2FHCAAARKCBKrBBG%2FTBGCzABhzBBdzBC%2FxgNoRCJMTCQhBCCmSAHHJgKayCQiiGzbAdKmAv1EAdNMBRaIaTcA4uwlW4Dj1wD%2FphCJ7BKLyBCQRByAgTYSHaiAFiilgjjggXmYX4IcFIBBKLJCDJiBRRIkuRNUgxUopUIFVIHfI9cgI5h1xGupE7yAAygvyGvEcxlIGyUT3UDLVDuag3GoRGogvQZHQxmo8WoJvQcrQaPYw2oefQq2gP2o8%2BQ8cwwOgYBzPEbDAuxsNCsTgsCZNjy7EirAyrxhqwVqwDu4n1Y8%2BxdwQSgUXACTYEd0IgYR5BSFhMWE7YSKggHCQ0EdoJNwkDhFHCJyKTqEu0JroR%2BcQYYjIxh1hILCPWEo8TLxB7iEPENyQSiUMyJ7mQAkmxpFTSEtJG0m5SI%2BksqZs0SBojk8naZGuyBzmULCAryIXkneTD5DPkG%2BQh8lsKnWJAcaT4U%2BIoUspqShnlEOU05QZlmDJBVaOaUt2ooVQRNY9aQq2htlKvUYeoEzR1mjnNgxZJS6WtopXTGmgXaPdpr%2Bh0uhHdlR5Ol9BX0svpR%2BiX6AP0dwwNhhWDx4hnKBmbGAcYZxl3GK%2BYTKYZ04sZx1QwNzHrmOeZD5lvVVgqtip8FZHKCpVKlSaVGyovVKmqpqreqgtV81XLVI%2BpXlN9rkZVM1PjqQnUlqtVqp1Q61MbU2epO6iHqmeob1Q%2FpH5Z%2FYkGWcNMw09DpFGgsV%2FjvMYgC2MZs3gsIWsNq4Z1gTXEJrHN2Xx2KruY%2FR27iz2qqaE5QzNKM1ezUvOUZj8H45hx%2BJx0TgnnKKeX836K3hTvKeIpG6Y0TLkxZVxrqpaXllirSKtRq0frvTau7aedpr1Fu1n7gQ5Bx0onXCdHZ4%2FOBZ3nU9lT3acKpxZNPTr1ri6qa6UbobtEd79up%2B6Ynr5egJ5Mb6feeb3n%2Bhx9L%2F1U%2FW36p%2FVHDFgGswwkBtsMzhg8xTVxbzwdL8fb8VFDXcNAQ6VhlWGX4YSRudE8o9VGjUYPjGnGXOMk423GbcajJgYmISZLTepN7ppSTbmmKaY7TDtMx83MzaLN1pk1mz0x1zLnm%2Beb15vft2BaeFostqi2uGVJsuRaplnutrxuhVo5WaVYVVpds0atna0l1rutu6cRp7lOk06rntZnw7Dxtsm2qbcZsOXYBtuutm22fWFnYhdnt8Wuw%2B6TvZN9un2N%2FT0HDYfZDqsdWh1%2Bc7RyFDpWOt6azpzuP33F9JbpL2dYzxDP2DPjthPLKcRpnVOb00dnF2e5c4PziIuJS4LLLpc%2BLpsbxt3IveRKdPVxXeF60vWdm7Obwu2o26%2FuNu5p7ofcn8w0nymeWTNz0MPIQ%2BBR5dE%2FC5%2BVMGvfrH5PQ0%2BBZ7XnIy9jL5FXrdewt6V3qvdh7xc%2B9j5yn%2BM%2B4zw33jLeWV%2FMN8C3yLfLT8Nvnl%2BF30N%2FI%2F9k%2F3r%2F0QCngCUBZwOJgUGBWwL7%2BHp8Ib%2BOPzrbZfay2e1BjKC5QRVBj4KtguXBrSFoyOyQrSH355jOkc5pDoVQfujW0Adh5mGLw34MJ4WHhVeGP45wiFga0TGXNXfR3ENz30T6RJZE3ptnMU85ry1KNSo%2Bqi5qPNo3ujS6P8YuZlnM1VidWElsSxw5LiquNm5svt%2F87fOH4p3iC%2BN7F5gvyF1weaHOwvSFpxapLhIsOpZATIhOOJTwQRAqqBaMJfITdyWOCnnCHcJnIi%2FRNtGI2ENcKh5O8kgqTXqS7JG8NXkkxTOlLOW5hCepkLxMDUzdmzqeFpp2IG0yPTq9MYOSkZBxQqohTZO2Z%2Bpn5mZ2y6xlhbL%2BxW6Lty8elQfJa7OQrAVZLQq2QqboVFoo1yoHsmdlV2a%2FzYnKOZarnivN7cyzytuQN5zvn%2F%2FtEsIS4ZK2pYZLVy0dWOa9rGo5sjxxedsK4xUFK4ZWBqw8uIq2Km3VT6vtV5eufr0mek1rgV7ByoLBtQFr6wtVCuWFfevc1%2B1dT1gvWd%2B1YfqGnRs%2BFYmKrhTbF5cVf9go3HjlG4dvyr%2BZ3JS0qavEuWTPZtJm6ebeLZ5bDpaql%2BaXDm4N2dq0Dd9WtO319kXbL5fNKNu7g7ZDuaO%2FPLi8ZafJzs07P1SkVPRU%2BlQ27tLdtWHX%2BG7R7ht7vPY07NXbW7z3%2FT7JvttVAVVN1WbVZftJ%2B7P3P66Jqun4lvttXa1ObXHtxwPSA%2F0HIw6217nU1R3SPVRSj9Yr60cOxx%2B%2B%2Fp3vdy0NNg1VjZzG4iNwRHnk6fcJ3%2FceDTradox7rOEH0x92HWcdL2pCmvKaRptTmvtbYlu6T8w%2B0dbq3nr8R9sfD5w0PFl5SvNUyWna6YLTk2fyz4ydlZ19fi753GDborZ752PO32oPb%2B%2B6EHTh0kX%2Fi%2Bc7vDvOXPK4dPKy2%2BUTV7hXmq86X23qdOo8%2FpPTT8e7nLuarrlca7nuer21e2b36RueN87d9L158Rb%2F1tWeOT3dvfN6b%2FfF9%2FXfFt1%2Bcif9zsu72Xcn7q28T7xf9EDtQdlD3YfVP1v%2B3Njv3H9qwHeg89HcR%2FcGhYPP%2FpH1jw9DBY%2BZj8uGDYbrnjg%2BOTniP3L96fynQ89kzyaeF%2F6i%2FsuuFxYvfvjV69fO0ZjRoZfyl5O%2FbXyl%2FerA6xmv28bCxh6%2ByXgzMV70VvvtwXfcdx3vo98PT%2BR8IH8o%2F2j5sfVT0Kf7kxmTk%2F8EA5jz%2FGMzLdsAAEEOaVRYdFhNTDpjb20uYWRvYmUueG1wAAAAAAA8P3hwYWNrZXQgYmVnaW49Iu%2B7vyIgaWQ9Ilc1TTBNcENlaGlIenJlU3pOVGN6a2M5ZCI%2FPgo8eDp4bXBtZXRhIHhtbG5zOng9ImFkb2JlOm5zOm1ldGEvIiB4OnhtcHRrPSJBZG9iZSBYTVAgQ29yZSA1LjUtYzAyMSA3OS4xNTQ5MTEsIDIwMTMvMTAvMjktMTE6NDc6MTYgICAgICAgICI%2BCiAgIDxyZGY6UkRGIHhtbG5zOnJkZj0iaHR0cDovL3d3dy53My5vcmcvMTk5OS8wMi8yMi1yZGYtc3ludGF4LW5zIyI%2BCiAgICAgIDxyZGY6RGVzY3JpcHRpb24gcmRmOmFib3V0PSIiCiAgICAgICAgICAgIHhtbG5zOnhtcD0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wLyIKICAgICAgICAgICAgeG1sbnM6ZGM9Imh0dHA6Ly9wdXJsLm9yZy9kYy9lbGVtZW50cy8xLjEvIgogICAgICAgICAgICB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIKICAgICAgICAgICAgeG1sbnM6c3RFdnQ9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZUV2ZW50IyIKICAgICAgICAgICAgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZVJlZiMiCiAgICAgICAgICAgIHhtbG5zOnBob3Rvc2hvcD0iaHR0cDovL25zLmFkb2JlLmNvbS9waG90b3Nob3AvMS4wLyIKICAgICAgICAgICAgeG1sbnM6dGlmZj0iaHR0cDovL25zLmFkb2JlLmNvbS90aWZmLzEuMC8iCiAgICAgICAgICAgIHhtbG5zOmV4aWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20vZXhpZi8xLjAvIj4KICAgICAgICAgPHhtcDpDcmVhdG9yVG9vbD5BZG9iZSBQaG90b3Nob3AgQ0MgKFdpbmRvd3MpPC94bXA6Q3JlYXRvclRvb2w%2BCiAgICAgICAgIDx4bXA6Q3JlYXRlRGF0ZT4yMDE0LTAxLTIyVDE5OjI0OjUxKzAxOjAwPC94bXA6Q3JlYXRlRGF0ZT4KICAgICAgICAgPHhtcDpNZXRhZGF0YURhdGU%2BMjAxNC0wMi0wNFQxNDo0MDoyOSswMTowMDwveG1wOk1ldGFkYXRhRGF0ZT4KICAgICAgICAgPHhtcDpNb2RpZnlEYXRlPjIwMTQtMDItMDRUMTQ6NDA6MjkrMDE6MDA8L3htcDpNb2RpZnlEYXRlPgogICAgICAgICA8ZGM6Zm9ybWF0PmltYWdlL3BuZzwvZGM6Zm9ybWF0PgogICAgICAgICA8eG1wTU06SW5zdGFuY2VJRD54bXAuaWlkOjVkNWIwNmQwLTVmMjAtOGE0NC1hMzIwLWZmMTEzMzQwNDc0YjwveG1wTU06SW5zdGFuY2VJRD4KICAgICAgICAgPHhtcE1NOkRvY3VtZW50SUQ%2BeG1wLmRpZDpFQTc2MkY5Njc0ODNFMzExOTQ4QkQxM0UyQkU3OTlBMTwveG1wTU06RG9jdW1lbnRJRD4KICAgICAgICAgPHhtcE1NOk9yaWdpbmFsRG9jdW1lbnRJRD54bXAuZGlkOjczQjYyQUFEOTE4M0UzMTE5NDhCRDEzRTJCRTc5OUExPC94bXBNTTpPcmlnaW5hbERvY3VtZW50SUQ%2BCiAgICAgICAgIDx4bXBNTTpIaXN0b3J5PgogICAgICAgICAgICA8cmRmOlNlcT4KICAgICAgICAgICAgICAgPHJkZjpsaSByZGY6cGFyc2VUeXBlPSJSZXNvdXJjZSI%2BCiAgICAgICAgICAgICAgICAgIDxzdEV2dDphY3Rpb24%2BY3JlYXRlZDwvc3RFdnQ6YWN0aW9uPgogICAgICAgICAgICAgICAgICA8c3RFdnQ6aW5zdGFuY2VJRD54bXAuaWlkOjczQjYyQUFEOTE4M0UzMTE5NDhCRDEzRTJCRTc5OUExPC9zdEV2dDppbnN0YW5jZUlEPgogICAgICAgICAgICAgICAgICA8c3RFdnQ6d2hlbj4yMDE0LTAxLTIyVDE5OjI0OjUxKzAxOjAwPC9zdEV2dDp3aGVuPgogICAgICAgICAgICAgICAgICA8c3RFdnQ6c29mdHdhcmVBZ2VudD5BZG9iZSBQaG90b3Nob3AgQ1M2IChXaW5kb3dzKTwvc3RFdnQ6c29mdHdhcmVBZ2VudD4KICAgICAgICAgICAgICAgPC9yZGY6bGk%2BCiAgICAgICAgICAgICAgIDxyZGY6bGkgcmRmOnBhcnNlVHlwZT0iUmVzb3VyY2UiPgogICAgICAgICAgICAgICAgICA8c3RFdnQ6YWN0aW9uPnNhdmVkPC9zdEV2dDphY3Rpb24%2BCiAgICAgICAgICAgICAgICAgIDxzdEV2dDppbnN0YW5jZUlEPnhtcC5paWQ6RUE2MEEyNEUxOTg0RTMxMUFEQUZFRkU2RUMzMzNFMDM8L3N0RXZ0Omluc3RhbmNlSUQ%2BCiAgICAgICAgICAgICAgICAgIDxzdEV2dDp3aGVuPjIwMTQtMDEtMjNUMTk6MTg6MDcrMDE6MDA8L3N0RXZ0OndoZW4%2BCiAgICAgICAgICAgICAgICAgIDxzdEV2dDpzb2Z0d2FyZUFnZW50PkFkb2JlIFBob3Rvc2hvcCBDUzYgKFdpbmRvd3MpPC9zdEV2dDpzb2Z0d2FyZUFnZW50PgogICAgICAgICAgICAgICAgICA8c3RFdnQ6Y2hhbmdlZD4vPC9zdEV2dDpjaGFuZ2VkPgogICAgICAgICAgICAgICA8L3JkZjpsaT4KICAgICAgICAgICAgICAgPHJkZjpsaSByZGY6cGFyc2VUeXBlPSJSZXNvdXJjZSI%2BCiAgICAgICAgICAgICAgICAgIDxzdEV2dDphY3Rpb24%2Bc2F2ZWQ8L3N0RXZ0OmFjdGlvbj4KICAgICAgICAgICAgICAgICAgPHN0RXZ0Omluc3RhbmNlSUQ%2BeG1wLmlpZDo2OWVmYWE1NS01ZTI5LTIzNGUtYTUzMy0xNDkxYjM1NDNmYmE8L3N0RXZ0Omluc3RhbmNlSUQ%2BCiAgICAgICAgICAgICAgICAgIDxzdEV2dDp3aGVuPjIwMTQtMDItMDRUMTQ6NDA6MjkrMDE6MDA8L3N0RXZ0OndoZW4%2BCiAgICAgICAgICAgICAgICAgIDxzdEV2dDpzb2Z0d2FyZUFnZW50PkFkb2JlIFBob3Rvc2hvcCBDQyAoV2luZG93cyk8L3N0RXZ0OnNvZnR3YXJlQWdlbnQ%2BCiAgICAgICAgICAgICAgICAgIDxzdEV2dDpjaGFuZ2VkPi88L3N0RXZ0OmNoYW5nZWQ%2BCiAgICAgICAgICAgICAgIDwvcmRmOmxpPgogICAgICAgICAgICAgICA8cmRmOmxpIHJkZjpwYXJzZVR5cGU9IlJlc291cmNlIj4KICAgICAgICAgICAgICAgICAgPHN0RXZ0OmFjdGlvbj5jb252ZXJ0ZWQ8L3N0RXZ0OmFjdGlvbj4KICAgICAgICAgICAgICAgICAgPHN0RXZ0OnBhcmFtZXRlcnM%2BZnJvbSBhcHBsaWNhdGlvbi92bmQuYWRvYmUucGhvdG9zaG9wIHRvIGltYWdlL3BuZzwvc3RFdnQ6cGFyYW1ldGVycz4KICAgICAgICAgICAgICAgPC9yZGY6bGk%2BCiAgICAgICAgICAgICAgIDxyZGY6bGkgcmRmOnBhcnNlVHlwZT0iUmVzb3VyY2UiPgogICAgICAgICAgICAgICAgICA8c3RFdnQ6YWN0aW9uPmRlcml2ZWQ8L3N0RXZ0OmFjdGlvbj4KICAgICAgICAgICAgICAgICAgPHN0RXZ0OnBhcmFtZXRlcnM%2BY29udmVydGVkIGZyb20gYXBwbGljYXRpb24vdm5kLmFkb2JlLnBob3Rvc2hvcCB0byBpbWFnZS9wbmc8L3N0RXZ0OnBhcmFtZXRlcnM%2BCiAgICAgICAgICAgICAgIDwvcmRmOmxpPgogICAgICAgICAgICAgICA8cmRmOmxpIHJkZjpwYXJzZVR5cGU9IlJlc291cmNlIj4KICAgICAgICAgICAgICAgICAgPHN0RXZ0OmFjdGlvbj5zYXZlZDwvc3RFdnQ6YWN0aW9uPgogICAgICAgICAgICAgICAgICA8c3RFdnQ6aW5zdGFuY2VJRD54bXAuaWlkOjVkNWIwNmQwLTVmMjAtOGE0NC1hMzIwLWZmMTEzMzQwNDc0Yjwvc3RFdnQ6aW5zdGFuY2VJRD4KICAgICAgICAgICAgICAgICAgPHN0RXZ0OndoZW4%2BMjAxNC0wMi0wNFQxNDo0MDoyOSswMTowMDwvc3RFdnQ6d2hlbj4KICAgICAgICAgICAgICAgICAgPHN0RXZ0OnNvZnR3YXJlQWdlbnQ%2BQWRvYmUgUGhvdG9zaG9wIENDIChXaW5kb3dzKTwvc3RFdnQ6c29mdHdhcmVBZ2VudD4KICAgICAgICAgICAgICAgICAgPHN0RXZ0OmNoYW5nZWQ%2BLzwvc3RFdnQ6Y2hhbmdlZD4KICAgICAgICAgICAgICAgPC9yZGY6bGk%2BCiAgICAgICAgICAgIDwvcmRmOlNlcT4KICAgICAgICAgPC94bXBNTTpIaXN0b3J5PgogICAgICAgICA8eG1wTU06RGVyaXZlZEZyb20gcmRmOnBhcnNlVHlwZT0iUmVzb3VyY2UiPgogICAgICAgICAgICA8c3RSZWY6aW5zdGFuY2VJRD54bXAuaWlkOjY5ZWZhYTU1LTVlMjktMjM0ZS1hNTMzLTE0OTFiMzU0M2ZiYTwvc3RSZWY6aW5zdGFuY2VJRD4KICAgICAgICAgICAgPHN0UmVmOmRvY3VtZW50SUQ%2BeG1wLmRpZDpFQTc2MkY5Njc0ODNFMzExOTQ4QkQxM0UyQkU3OTlBMTwvc3RSZWY6ZG9jdW1lbnRJRD4KICAgICAgICAgICAgPHN0UmVmOm9yaWdpbmFsRG9jdW1lbnRJRD54bXAuZGlkOjczQjYyQUFEOTE4M0UzMTE5NDhCRDEzRTJCRTc5OUExPC9zdFJlZjpvcmlnaW5hbERvY3VtZW50SUQ%2BCiAgICAgICAgIDwveG1wTU06RGVyaXZlZEZyb20%2BCiAgICAgICAgIDxwaG90b3Nob3A6Q29sb3JNb2RlPjM8L3Bob3Rvc2hvcDpDb2xvck1vZGU%2BCiAgICAgICAgIDxwaG90b3Nob3A6SUNDUHJvZmlsZT5zUkdCIElFQzYxOTY2LTIuMTwvcGhvdG9zaG9wOklDQ1Byb2ZpbGU%2BCiAgICAgICAgIDx0aWZmOk9yaWVudGF0aW9uPjE8L3RpZmY6T3JpZW50YXRpb24%2BCiAgICAgICAgIDx0aWZmOlhSZXNvbHV0aW9uPjcyMDA5MC8xMDAwMDwvdGlmZjpYUmVzb2x1dGlvbj4KICAgICAgICAgPHRpZmY6WVJlc29sdXRpb24%2BNzIwMDkwLzEwMDAwPC90aWZmOllSZXNvbHV0aW9uPgogICAgICAgICA8dGlmZjpSZXNvbHV0aW9uVW5pdD4yPC90aWZmOlJlc29sdXRpb25Vbml0PgogICAgICAgICA8ZXhpZjpDb2xvclNwYWNlPjE8L2V4aWY6Q29sb3JTcGFjZT4KICAgICAgICAgPGV4aWY6UGl4ZWxYRGltZW5zaW9uPjI0PC9leGlmOlBpeGVsWERpbWVuc2lvbj4KICAgICAgICAgPGV4aWY6UGl4ZWxZRGltZW5zaW9uPjI0PC9leGlmOlBpeGVsWURpbWVuc2lvbj4KICAgICAgPC9yZGY6RGVzY3JpcHRpb24%2BCiAgIDwvcmRmOlJERj4KPC94OnhtcG1ldGE%2BCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgCjw%2FeHBhY2tldCBlbmQ9InciPz5WKqp9AAAAIGNIUk0AAHolAACAgwAA%2Bf8AAIDpAAB1MAAA6mAAADqYAAAXb5JfxUYAAAYXSURBVHjafFZtUFTXGX7e9z27sveuMCwYV8ElrA7YSFYHtJUPkaaI0aRqG8wP00zUzljDINNSA%2F2ROtpO24SxnahlxjYd7SSjmUkymcxYlDhQPzHGisEVp8HwYWCVVVgEsrsuLnL74%2B5uqTF9Z%2B7cO%2Fd8PO95zvO851BlZSV0XQcAMDOYGQBARDhX3JRmMDYZwLPMWAzGHACYIgwS46oBNBNwtOL8CwE8EkSEUCgE2rJlC2w2G4go8Zwo%2FbMDgnoG6gxLfAAAYvPDMCCszKTAMIAGAhrWnf15AAAMwwARIRKJgDZv3gy73Q4iAjPjxIr9VVOMRhbAYKB8zvrO0llrfEsdKwLZek6YAPSFvtSu3GtLawu0ZJ6625SHGBQB1T88t6MxvopgMAjaunUrdF0HM%2BP4yv27DMYeJmB1RqW3Jnf3tQX2p0L4P9EXuqEd7PmDp%2BXuMU9sRbvXnnt1TxxACgoKYLVacbzsQDUJGkSATe6qi28uPtzusM6Kxie6NHLGUX3lxVUNX9StPHnn4wy3njuUYcu6n2pNi66avcEXnByP%2Fnv8aiaIyrqz2gO5A9%2B9FI1GIfn5%2BWhZdTAdjFMkwMvZOy7uWnTAOz3L4Yk71m3t69fdfTDoUGTBeHTUfiHQ6lo7Z2OXJvpDAChKe%2BaOCdKRKWxZ2%2B1qb3yyd3GYmRkQ7GQBVs99wfv6on3eR2k4PdTkDEbH7IuS8%2Fsvld%2F561PJS%2FpDk1%2Fbzwx94pze7xc5v%2FH%2BYPY6r5BAkdrJzODTK46lE6PeYEJt7u%2B8j%2BOZwCBiEAgAoNgKJoEQf6PvNvdrXgtZoNhSf7q0KZ3B2AQmVMze0Jmt54S%2FDcDCVig2NcvEUGxJAE4Pl%2BYOr0iv6BRSIPAmBeBZAmHlE2sH4p1uhrq1s0MnnEQMBsf8wRASAICQQCCITN1X7%2FsOuc0kgOVp3%2FfPs2WHv%2BcoG7gQOJUnLGsUCTxEjPzUohEA%2BNfIWUdtx0%2BefzA1kSSkIGyBAQNCKgHAEBAJ3u79U7kiAcWoem%2Fgb5Fd33nrH3kp%2BSMWtuAB%2BGllMJxMjCx9QRgA3uiqL5kwHiTlpxb3smlfMDGYGPP1hcMAkJvs8ScpfdJspdj%2BMK6Pf%2B5%2Bu29vyb4lR4%2BBGEziVESAkEpw6Av1OhUpHCz4qOXbzFWz4Ncdj%2Fv%2Fo08Lt92ODDgZDCEFJYoUGH4mzugP92puPTf0pD3H7wvfdFZdqSxnMtWjoGAAmG9fOLxjwesdjT2%2FXzIQ7ks3sycYMSEwGHNtWf5bkX5NkYCJBxUBXiGV0XHvosOt54Zey33j%2FK%2B8P33%2B%2BvjnbiGJbbLE%2BJ9SANAb6nJ2B79wcUwETAwQQ7fMjPzMvfP8ja87HUIKMOiaAqMZhrGmLdAy78eZrwwsTS0eObTs%2BIdtgVanxBUExqGbb5VzrIISGIoUXsmqbgEhJldCQWqRf27SvPAn%2Fo8XmgLhZsUkR4ll37mhk3n94Z4OlzY%2F7NLcYZfm7o1z2zT4vsvUNSXqprBCkmiTFbPX90%2Ffh8GIT2sf%2BzTPdDMf4dVnNg4z%2BE0ixsGeBs9jd5ViSgLHjCb%2FpeaR%2BMD3d4%2FZJg2llyuG2Vwy7QWAs8PNnn1f7vkGSGxAzE6mk%2Bkxkx%2Fp%2F4unffSCR0hAoL1EBCYiPNdWNcwkNQTCR7feWX6g%2B7f%2FA7I8rcw%2FU6UEe0Ndrhc%2FW7mtL9ztmqlSgstSS%2FzTJ28dalpOpkRryrwbhwBACgsLMWPGDOT4ll3qyeqAkJTdCF7P%2FCrUY%2FGkLL1rE%2B2hTbSH8%2B0Lb%2FWEuhzhyaA905blf9Vd%2F895WnZwLHrPevir%2FcvOB1oLYpTtLrm6oYGIMDExAaqtrUVKSgqYGSKCk0WHq5ikkWEWtNL0imv5qUW%2BRclLRjJsrhBAuH1%2FQL8R7HR4xy5nescuP23E6hOA6mLv%2Bsb4uTw6Ogqqq6uDpmkQkcStorX4XRcM1FjZ%2BkvFFjCJKU1WpkNJJUqIMtX1RyLeX3JtQ0JRhmGYZ%2FL27duRnJycuFGISOJ9pqh5lrB6iYgqGOxRrOaa54DcZmKvkJxk8JHC9rKh%2BKVhOsD4%2BDj%2BMwADIf8n5m4xGwAAAABJRU5ErkJggg%3D%3D%29%7Ddiv%2Evis%2Dnetwork%20div%2Evis%2Dedit%2Dmode%20div%2Evis%2Dbutton%2Evis%2Dedit%2Cdiv%2Evis%2Dnetwork%20div%2Evis%2Dmanipulation%20div%2Evis%2Dbutton%2Evis%2Dedit%7Bbackground%2Dimage%3Aurl%28data%3Aimage%2Fpng%3Bbase64%2CiVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAAACXBIWXMAAAsTAAALEwEAmpwYAAAKT2lDQ1BQaG90b3Nob3AgSUNDIHByb2ZpbGUAAHjanVNnVFPpFj333vRCS4iAlEtvUhUIIFJCi4AUkSYqIQkQSoghodkVUcERRUUEG8igiAOOjoCMFVEsDIoK2AfkIaKOg6OIisr74Xuja9a89%2BbN%2FrXXPues852zzwfACAyWSDNRNYAMqUIeEeCDx8TG4eQuQIEKJHAAEAizZCFz%2FSMBAPh%2BPDwrIsAHvgABeNMLCADATZvAMByH%2Fw%2FqQplcAYCEAcB0kThLCIAUAEB6jkKmAEBGAYCdmCZTAKAEAGDLY2LjAFAtAGAnf%2BbTAICd%2BJl7AQBblCEVAaCRACATZYhEAGg7AKzPVopFAFgwABRmS8Q5ANgtADBJV2ZIALC3AMDOEAuyAAgMADBRiIUpAAR7AGDIIyN4AISZABRG8lc88SuuEOcqAAB4mbI8uSQ5RYFbCC1xB1dXLh4ozkkXKxQ2YQJhmkAuwnmZGTKBNA%2Fg88wAAKCRFRHgg%2FP9eM4Ors7ONo62Dl8t6r8G%2FyJiYuP%2B5c%2BrcEAAAOF0ftH%2BLC%2BzGoA7BoBt%2FqIl7gRoXgugdfeLZrIPQLUAoOnaV%2FNw%2BH48PEWhkLnZ2eXk5NhKxEJbYcpXff5nwl%2FAV%2F1s%2BX48%2FPf14L7iJIEyXYFHBPjgwsz0TKUcz5IJhGLc5o9H%2FLcL%2F%2Fwd0yLESWK5WCoU41EScY5EmozzMqUiiUKSKcUl0v9k4t8s%2BwM%2B3zUAsGo%2BAXuRLahdYwP2SycQWHTA4vcAAPK7b8HUKAgDgGiD4c93%2F%2B8%2F%2FUegJQCAZkmScQAAXkQkLlTKsz%2FHCAAARKCBKrBBG%2FTBGCzABhzBBdzBC%2FxgNoRCJMTCQhBCCmSAHHJgKayCQiiGzbAdKmAv1EAdNMBRaIaTcA4uwlW4Dj1wD%2FphCJ7BKLyBCQRByAgTYSHaiAFiilgjjggXmYX4IcFIBBKLJCDJiBRRIkuRNUgxUopUIFVIHfI9cgI5h1xGupE7yAAygvyGvEcxlIGyUT3UDLVDuag3GoRGogvQZHQxmo8WoJvQcrQaPYw2oefQq2gP2o8%2BQ8cwwOgYBzPEbDAuxsNCsTgsCZNjy7EirAyrxhqwVqwDu4n1Y8%2BxdwQSgUXACTYEd0IgYR5BSFhMWE7YSKggHCQ0EdoJNwkDhFHCJyKTqEu0JroR%2BcQYYjIxh1hILCPWEo8TLxB7iEPENyQSiUMyJ7mQAkmxpFTSEtJG0m5SI%2BksqZs0SBojk8naZGuyBzmULCAryIXkneTD5DPkG%2BQh8lsKnWJAcaT4U%2BIoUspqShnlEOU05QZlmDJBVaOaUt2ooVQRNY9aQq2htlKvUYeoEzR1mjnNgxZJS6WtopXTGmgXaPdpr%2Bh0uhHdlR5Ol9BX0svpR%2BiX6AP0dwwNhhWDx4hnKBmbGAcYZxl3GK%2BYTKYZ04sZx1QwNzHrmOeZD5lvVVgqtip8FZHKCpVKlSaVGyovVKmqpqreqgtV81XLVI%2BpXlN9rkZVM1PjqQnUlqtVqp1Q61MbU2epO6iHqmeob1Q%2FpH5Z%2FYkGWcNMw09DpFGgsV%2FjvMYgC2MZs3gsIWsNq4Z1gTXEJrHN2Xx2KruY%2FR27iz2qqaE5QzNKM1ezUvOUZj8H45hx%2BJx0TgnnKKeX836K3hTvKeIpG6Y0TLkxZVxrqpaXllirSKtRq0frvTau7aedpr1Fu1n7gQ5Bx0onXCdHZ4%2FOBZ3nU9lT3acKpxZNPTr1ri6qa6UbobtEd79up%2B6Ynr5egJ5Mb6feeb3n%2Bhx9L%2F1U%2FW36p%2FVHDFgGswwkBtsMzhg8xTVxbzwdL8fb8VFDXcNAQ6VhlWGX4YSRudE8o9VGjUYPjGnGXOMk423GbcajJgYmISZLTepN7ppSTbmmKaY7TDtMx83MzaLN1pk1mz0x1zLnm%2Beb15vft2BaeFostqi2uGVJsuRaplnutrxuhVo5WaVYVVpds0atna0l1rutu6cRp7lOk06rntZnw7Dxtsm2qbcZsOXYBtuutm22fWFnYhdnt8Wuw%2B6TvZN9un2N%2FT0HDYfZDqsdWh1%2Bc7RyFDpWOt6azpzuP33F9JbpL2dYzxDP2DPjthPLKcRpnVOb00dnF2e5c4PziIuJS4LLLpc%2BLpsbxt3IveRKdPVxXeF60vWdm7Obwu2o26%2FuNu5p7ofcn8w0nymeWTNz0MPIQ%2BBR5dE%2FC5%2BVMGvfrH5PQ0%2BBZ7XnIy9jL5FXrdewt6V3qvdh7xc%2B9j5yn%2BM%2B4zw33jLeWV%2FMN8C3yLfLT8Nvnl%2BF30N%2FI%2F9k%2F3r%2F0QCngCUBZwOJgUGBWwL7%2BHp8Ib%2BOPzrbZfay2e1BjKC5QRVBj4KtguXBrSFoyOyQrSH355jOkc5pDoVQfujW0Adh5mGLw34MJ4WHhVeGP45wiFga0TGXNXfR3ENz30T6RJZE3ptnMU85ry1KNSo%2Bqi5qPNo3ujS6P8YuZlnM1VidWElsSxw5LiquNm5svt%2F87fOH4p3iC%2BN7F5gvyF1weaHOwvSFpxapLhIsOpZATIhOOJTwQRAqqBaMJfITdyWOCnnCHcJnIi%2FRNtGI2ENcKh5O8kgqTXqS7JG8NXkkxTOlLOW5hCepkLxMDUzdmzqeFpp2IG0yPTq9MYOSkZBxQqohTZO2Z%2Bpn5mZ2y6xlhbL%2BxW6Lty8elQfJa7OQrAVZLQq2QqboVFoo1yoHsmdlV2a%2FzYnKOZarnivN7cyzytuQN5zvn%2F%2FtEsIS4ZK2pYZLVy0dWOa9rGo5sjxxedsK4xUFK4ZWBqw8uIq2Km3VT6vtV5eufr0mek1rgV7ByoLBtQFr6wtVCuWFfevc1%2B1dT1gvWd%2B1YfqGnRs%2BFYmKrhTbF5cVf9go3HjlG4dvyr%2BZ3JS0qavEuWTPZtJm6ebeLZ5bDpaql%2BaXDm4N2dq0Dd9WtO319kXbL5fNKNu7g7ZDuaO%2FPLi8ZafJzs07P1SkVPRU%2BlQ27tLdtWHX%2BG7R7ht7vPY07NXbW7z3%2FT7JvttVAVVN1WbVZftJ%2B7P3P66Jqun4lvttXa1ObXHtxwPSA%2F0HIw6217nU1R3SPVRSj9Yr60cOxx%2B%2B%2Fp3vdy0NNg1VjZzG4iNwRHnk6fcJ3%2FceDTradox7rOEH0x92HWcdL2pCmvKaRptTmvtbYlu6T8w%2B0dbq3nr8R9sfD5w0PFl5SvNUyWna6YLTk2fyz4ydlZ19fi753GDborZ752PO32oPb%2B%2B6EHTh0kX%2Fi%2Bc7vDvOXPK4dPKy2%2BUTV7hXmq86X23qdOo8%2FpPTT8e7nLuarrlca7nuer21e2b36RueN87d9L158Rb%2F1tWeOT3dvfN6b%2FfF9%2FXfFt1%2Bcif9zsu72Xcn7q28T7xf9EDtQdlD3YfVP1v%2B3Njv3H9qwHeg89HcR%2FcGhYPP%2FpH1jw9DBY%2BZj8uGDYbrnjg%2BOTniP3L96fynQ89kzyaeF%2F6i%2FsuuFxYvfvjV69fO0ZjRoZfyl5O%2FbXyl%2FerA6xmv28bCxh6%2ByXgzMV70VvvtwXfcdx3vo98PT%2BR8IH8o%2F2j5sfVT0Kf7kxmTk%2F8EA5jz%2FGMzLdsAAEEOaVRYdFhNTDpjb20uYWRvYmUueG1wAAAAAAA8P3hwYWNrZXQgYmVnaW49Iu%2B7vyIgaWQ9Ilc1TTBNcENlaGlIenJlU3pOVGN6a2M5ZCI%2FPgo8eDp4bXBtZXRhIHhtbG5zOng9ImFkb2JlOm5zOm1ldGEvIiB4OnhtcHRrPSJBZG9iZSBYTVAgQ29yZSA1LjUtYzAyMSA3OS4xNTQ5MTEsIDIwMTMvMTAvMjktMTE6NDc6MTYgICAgICAgICI%2BCiAgIDxyZGY6UkRGIHhtbG5zOnJkZj0iaHR0cDovL3d3dy53My5vcmcvMTk5OS8wMi8yMi1yZGYtc3ludGF4LW5zIyI%2BCiAgICAgIDxyZGY6RGVzY3JpcHRpb24gcmRmOmFib3V0PSIiCiAgICAgICAgICAgIHhtbG5zOnhtcD0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wLyIKICAgICAgICAgICAgeG1sbnM6ZGM9Imh0dHA6Ly9wdXJsLm9yZy9kYy9lbGVtZW50cy8xLjEvIgogICAgICAgICAgICB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIKICAgICAgICAgICAgeG1sbnM6c3RFdnQ9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZUV2ZW50IyIKICAgICAgICAgICAgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZVJlZiMiCiAgICAgICAgICAgIHhtbG5zOnBob3Rvc2hvcD0iaHR0cDovL25zLmFkb2JlLmNvbS9waG90b3Nob3AvMS4wLyIKICAgICAgICAgICAgeG1sbnM6dGlmZj0iaHR0cDovL25zLmFkb2JlLmNvbS90aWZmLzEuMC8iCiAgICAgICAgICAgIHhtbG5zOmV4aWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20vZXhpZi8xLjAvIj4KICAgICAgICAgPHhtcDpDcmVhdG9yVG9vbD5BZG9iZSBQaG90b3Nob3AgQ0MgKFdpbmRvd3MpPC94bXA6Q3JlYXRvclRvb2w%2BCiAgICAgICAgIDx4bXA6Q3JlYXRlRGF0ZT4yMDE0LTAxLTIyVDE5OjI0OjUxKzAxOjAwPC94bXA6Q3JlYXRlRGF0ZT4KICAgICAgICAgPHhtcDpNZXRhZGF0YURhdGU%2BMjAxNC0wMi0wNVQxNDoxMjoyNSswMTowMDwveG1wOk1ldGFkYXRhRGF0ZT4KICAgICAgICAgPHhtcDpNb2RpZnlEYXRlPjIwMTQtMDItMDVUMTQ6MTI6MjUrMDE6MDA8L3htcDpNb2RpZnlEYXRlPgogICAgICAgICA8ZGM6Zm9ybWF0PmltYWdlL3BuZzwvZGM6Zm9ybWF0PgogICAgICAgICA8eG1wTU06SW5zdGFuY2VJRD54bXAuaWlkOjY5OTM3ZGZjLTJjNzQtYTU0YS05OTIzLTQyMmZhNDNkMjljNDwveG1wTU06SW5zdGFuY2VJRD4KICAgICAgICAgPHhtcE1NOkRvY3VtZW50SUQ%2BeG1wLmRpZDpFQTc2MkY5Njc0ODNFMzExOTQ4QkQxM0UyQkU3OTlBMTwveG1wTU06RG9jdW1lbnRJRD4KICAgICAgICAgPHhtcE1NOk9yaWdpbmFsRG9jdW1lbnRJRD54bXAuZGlkOjczQjYyQUFEOTE4M0UzMTE5NDhCRDEzRTJCRTc5OUExPC94bXBNTTpPcmlnaW5hbERvY3VtZW50SUQ%2BCiAgICAgICAgIDx4bXBNTTpIaXN0b3J5PgogICAgICAgICAgICA8cmRmOlNlcT4KICAgICAgICAgICAgICAgPHJkZjpsaSByZGY6cGFyc2VUeXBlPSJSZXNvdXJjZSI%2BCiAgICAgICAgICAgICAgICAgIDxzdEV2dDphY3Rpb24%2BY3JlYXRlZDwvc3RFdnQ6YWN0aW9uPgogICAgICAgICAgICAgICAgICA8c3RFdnQ6aW5zdGFuY2VJRD54bXAuaWlkOjczQjYyQUFEOTE4M0UzMTE5NDhCRDEzRTJCRTc5OUExPC9zdEV2dDppbnN0YW5jZUlEPgogICAgICAgICAgICAgICAgICA8c3RFdnQ6d2hlbj4yMDE0LTAxLTIyVDE5OjI0OjUxKzAxOjAwPC9zdEV2dDp3aGVuPgogICAgICAgICAgICAgICAgICA8c3RFdnQ6c29mdHdhcmVBZ2VudD5BZG9iZSBQaG90b3Nob3AgQ1M2IChXaW5kb3dzKTwvc3RFdnQ6c29mdHdhcmVBZ2VudD4KICAgICAgICAgICAgICAgPC9yZGY6bGk%2BCiAgICAgICAgICAgICAgIDxyZGY6bGkgcmRmOnBhcnNlVHlwZT0iUmVzb3VyY2UiPgogICAgICAgICAgICAgICAgICA8c3RFdnQ6YWN0aW9uPnNhdmVkPC9zdEV2dDphY3Rpb24%2BCiAgICAgICAgICAgICAgICAgIDxzdEV2dDppbnN0YW5jZUlEPnhtcC5paWQ6RUE2MEEyNEUxOTg0RTMxMUFEQUZFRkU2RUMzMzNFMDM8L3N0RXZ0Omluc3RhbmNlSUQ%2BCiAgICAgICAgICAgICAgICAgIDxzdEV2dDp3aGVuPjIwMTQtMDEtMjNUMTk6MTg6MDcrMDE6MDA8L3N0RXZ0OndoZW4%2BCiAgICAgICAgICAgICAgICAgIDxzdEV2dDpzb2Z0d2FyZUFnZW50PkFkb2JlIFBob3Rvc2hvcCBDUzYgKFdpbmRvd3MpPC9zdEV2dDpzb2Z0d2FyZUFnZW50PgogICAgICAgICAgICAgICAgICA8c3RFdnQ6Y2hhbmdlZD4vPC9zdEV2dDpjaGFuZ2VkPgogICAgICAgICAgICAgICA8L3JkZjpsaT4KICAgICAgICAgICAgICAgPHJkZjpsaSByZGY6cGFyc2VUeXBlPSJSZXNvdXJjZSI%2BCiAgICAgICAgICAgICAgICAgIDxzdEV2dDphY3Rpb24%2Bc2F2ZWQ8L3N0RXZ0OmFjdGlvbj4KICAgICAgICAgICAgICAgICAgPHN0RXZ0Omluc3RhbmNlSUQ%2BeG1wLmlpZDozOWNhNzE5ZC03YzNlLTUyNGEtYmY1NS03NGVmMmM1MzE0YTc8L3N0RXZ0Omluc3RhbmNlSUQ%2BCiAgICAgICAgICAgICAgICAgIDxzdEV2dDp3aGVuPjIwMTQtMDItMDVUMTQ6MTI6MjUrMDE6MDA8L3N0RXZ0OndoZW4%2BCiAgICAgICAgICAgICAgICAgIDxzdEV2dDpzb2Z0d2FyZUFnZW50PkFkb2JlIFBob3Rvc2hvcCBDQyAoV2luZG93cyk8L3N0RXZ0OnNvZnR3YXJlQWdlbnQ%2BCiAgICAgICAgICAgICAgICAgIDxzdEV2dDpjaGFuZ2VkPi88L3N0RXZ0OmNoYW5nZWQ%2BCiAgICAgICAgICAgICAgIDwvcmRmOmxpPgogICAgICAgICAgICAgICA8cmRmOmxpIHJkZjpwYXJzZVR5cGU9IlJlc291cmNlIj4KICAgICAgICAgICAgICAgICAgPHN0RXZ0OmFjdGlvbj5jb252ZXJ0ZWQ8L3N0RXZ0OmFjdGlvbj4KICAgICAgICAgICAgICAgICAgPHN0RXZ0OnBhcmFtZXRlcnM%2BZnJvbSBhcHBsaWNhdGlvbi92bmQuYWRvYmUucGhvdG9zaG9wIHRvIGltYWdlL3BuZzwvc3RFdnQ6cGFyYW1ldGVycz4KICAgICAgICAgICAgICAgPC9yZGY6bGk%2BCiAgICAgICAgICAgICAgIDxyZGY6bGkgcmRmOnBhcnNlVHlwZT0iUmVzb3VyY2UiPgogICAgICAgICAgICAgICAgICA8c3RFdnQ6YWN0aW9uPmRlcml2ZWQ8L3N0RXZ0OmFjdGlvbj4KICAgICAgICAgICAgICAgICAgPHN0RXZ0OnBhcmFtZXRlcnM%2BY29udmVydGVkIGZyb20gYXBwbGljYXRpb24vdm5kLmFkb2JlLnBob3Rvc2hvcCB0byBpbWFnZS9wbmc8L3N0RXZ0OnBhcmFtZXRlcnM%2BCiAgICAgICAgICAgICAgIDwvcmRmOmxpPgogICAgICAgICAgICAgICA8cmRmOmxpIHJkZjpwYXJzZVR5cGU9IlJlc291cmNlIj4KICAgICAgICAgICAgICAgICAgPHN0RXZ0OmFjdGlvbj5zYXZlZDwvc3RFdnQ6YWN0aW9uPgogICAgICAgICAgICAgICAgICA8c3RFdnQ6aW5zdGFuY2VJRD54bXAuaWlkOjY5OTM3ZGZjLTJjNzQtYTU0YS05OTIzLTQyMmZhNDNkMjljNDwvc3RFdnQ6aW5zdGFuY2VJRD4KICAgICAgICAgICAgICAgICAgPHN0RXZ0OndoZW4%2BMjAxNC0wMi0wNVQxNDoxMjoyNSswMTowMDwvc3RFdnQ6d2hlbj4KICAgICAgICAgICAgICAgICAgPHN0RXZ0OnNvZnR3YXJlQWdlbnQ%2BQWRvYmUgUGhvdG9zaG9wIENDIChXaW5kb3dzKTwvc3RFdnQ6c29mdHdhcmVBZ2VudD4KICAgICAgICAgICAgICAgICAgPHN0RXZ0OmNoYW5nZWQ%2BLzwvc3RFdnQ6Y2hhbmdlZD4KICAgICAgICAgICAgICAgPC9yZGY6bGk%2BCiAgICAgICAgICAgIDwvcmRmOlNlcT4KICAgICAgICAgPC94bXBNTTpIaXN0b3J5PgogICAgICAgICA8eG1wTU06RGVyaXZlZEZyb20gcmRmOnBhcnNlVHlwZT0iUmVzb3VyY2UiPgogICAgICAgICAgICA8c3RSZWY6aW5zdGFuY2VJRD54bXAuaWlkOjM5Y2E3MTlkLTdjM2UtNTI0YS1iZjU1LTc0ZWYyYzUzMTRhNzwvc3RSZWY6aW5zdGFuY2VJRD4KICAgICAgICAgICAgPHN0UmVmOmRvY3VtZW50SUQ%2BeG1wLmRpZDpFQTc2MkY5Njc0ODNFMzExOTQ4QkQxM0UyQkU3OTlBMTwvc3RSZWY6ZG9jdW1lbnRJRD4KICAgICAgICAgICAgPHN0UmVmOm9yaWdpbmFsRG9jdW1lbnRJRD54bXAuZGlkOjczQjYyQUFEOTE4M0UzMTE5NDhCRDEzRTJCRTc5OUExPC9zdFJlZjpvcmlnaW5hbERvY3VtZW50SUQ%2BCiAgICAgICAgIDwveG1wTU06RGVyaXZlZEZyb20%2BCiAgICAgICAgIDxwaG90b3Nob3A6Q29sb3JNb2RlPjM8L3Bob3Rvc2hvcDpDb2xvck1vZGU%2BCiAgICAgICAgIDxwaG90b3Nob3A6SUNDUHJvZmlsZT5zUkdCIElFQzYxOTY2LTIuMTwvcGhvdG9zaG9wOklDQ1Byb2ZpbGU%2BCiAgICAgICAgIDx0aWZmOk9yaWVudGF0aW9uPjE8L3RpZmY6T3JpZW50YXRpb24%2BCiAgICAgICAgIDx0aWZmOlhSZXNvbHV0aW9uPjcyMDA5MC8xMDAwMDwvdGlmZjpYUmVzb2x1dGlvbj4KICAgICAgICAgPHRpZmY6WVJlc29sdXRpb24%2BNzIwMDkwLzEwMDAwPC90aWZmOllSZXNvbHV0aW9uPgogICAgICAgICA8dGlmZjpSZXNvbHV0aW9uVW5pdD4yPC90aWZmOlJlc29sdXRpb25Vbml0PgogICAgICAgICA8ZXhpZjpDb2xvclNwYWNlPjE8L2V4aWY6Q29sb3JTcGFjZT4KICAgICAgICAgPGV4aWY6UGl4ZWxYRGltZW5zaW9uPjI0PC9leGlmOlBpeGVsWERpbWVuc2lvbj4KICAgICAgICAgPGV4aWY6UGl4ZWxZRGltZW5zaW9uPjI0PC9leGlmOlBpeGVsWURpbWVuc2lvbj4KICAgICAgPC9yZGY6RGVzY3JpcHRpb24%2BCiAgIDwvcmRmOlJERj4KPC94OnhtcG1ldGE%2BCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgCjw%2FeHBhY2tldCBlbmQ9InciPz4ykninAAAAIGNIUk0AAHolAACAgwAA%2Bf8AAIDpAAB1MAAA6mAAADqYAAAXb5JfxUYAAAYpSURBVHjafFZtTFvnFX7Oea%2BNudiY2Hwam4CBlgQwXdKREDKUoYg0jbRJ29RJ2VZ1mjRFUxSpA3VTfkzJfkQbS7spU6rtx5Z2UtppScjaHxvLuiatWi2jLEoMIUDCh23g2gbj7%2BtPuPvhOurawPl1dc99n%2Bc55z33fV46ceIEZFkGADAziAgAQERoe%2F9ZK4GPM%2FAcgbsIXAcABCgMvkfAqAa89eDoJyF8LogIqqqChoaGYDAYHr8kItS8uc8iIH6iAa9IkAo5EAQX8pqmgUVBCBggYFgDhv0%2FGAsBgKZpICJkMhnQ4OAgZFkGEYGZUXmp%2B0cS%2BCKBwWA0DVRPOg5Zl2q6zaHyJlnVAMQXVTkwHrUqH0Xsvn%2BtdQAAMQDgpPLS2MViFY8rkGUZzIzaS%2Ft%2FxqCzGggtz9e697zsnKhoLUtim4jOq%2FLE6x7X0nsh16dEZ5a%2FO3a2SCAOHjwInU6Hujd6ThJ4mCDQ%2Bb2G232v7v6vwarPbQn8MGlMr%2BX0kpE3Wr5Zt5hL5HPhqYSdQIfKJ%2ByhxDPKWC6Xg%2Bjt7UXD5b5KBt1kCHS85Ljd8%2FOn3NupfnhFaZj4rWff1B98B1R%2FhnUmKd36bdtCNl4g0en4edNE%2FcXwLq8qMTMIPAQwmo%2FWuHvObA8%2B9c58k%2FdKtD0TyZWXN5YGA7ej7epKxspM%2F%2F7SoNOdWc%2FJyq2wiwhDzPxT8cP0jys3VMM7OmL0%2F77zn4Ydui3b8uiK0jD7RrA77c9Wd57cefPpF%2B2T6bWsFPWkaiPTCWvTsZpHFU%2BXrS%2B8G3AR08F6X%2B1FJvBxQQzHQOWk2SmrW4FPX%2FU2LVwPuDZj%2BfJKl2khPpeyAqA9rzR%2FYqwuiWXX8taN%2FCabGkrVuq9YJlkQQDjOAJ5jAhz9Vt9W4N5%2FrNp8I%2BvtMV%2FaZm4zLnUNNt0urdYnF68HWoJj4Wo1mLGUNRr8LEgDgNqeCh8xQIKOsgC7iAjVe83rT9zQa8uNM28u70kspessu8q8zq%2FV3NcZpVzb9%2B0zmVhOvvvrhaMVzrJg0zeq7xMVCCwdpnWSGBqjUyJwLTFgbvxie3w31uoWR1Y74r60rdxZqrR8q85t2W2MGCp12bm%2FKC3hyaSTiMhxuGrKcahqpbjOaDOoEhOEoFqJQCCJvqA85I6bfTdDjQlf2lbxVNlS6wt19yy7jRHZZlDnrinNj%2F6sHMhnNw2Ogco7O79e5fm%2FxQywRBBCEAuwn4gQ96bkYj4Vyuq9N1Z3Bj4Od5bs0MXt%2FdZZ21ctiqFan174q985P%2BLfp%2BU1g7XDON%2F1ctP458WlVjLyJhOISZE0wM0S1QfuRC3lTjkJAKKEtNC9eIOhSh9xHLZOJRZTFuXDsEoStLkR%2F768ummsaJG9Pb9oe%2B9J%2BxaeSVokiQDSJphAo5uaBuWjiKP4QTqS1cUWU7ayesN66wu22frD1vmVW6GW6T8u9eVjGyZzs%2Bw78Nqu0a2mbvVu1KEJQAgeZRL0liQYyx%2BGOmKeQpu0rMYsAJPNEFGD2dLodLIy6c9Ys7G8yeSUl3tf2%2FX3rcBVJSOv34l3sCBogi7z1LH%2FrBHjl4IJ93%2FncQFAnjeImJD0Z8zuCwu9q3djDXqTlAKID5xv%2B9t2R8n8VcUFBljQ8Gyfe40BYBM4DwDLt8Kue79ZcFkbzfEdbUbv%2BoN4c9KTtsfm1MbYQqqh%2B2zrVZYKs%2F7Ef%2Bbyimt1POYiJhDhPBFBIiIEXhxfs7%2FdfYoIF%2BauBfYTE%2Fpebx%2FV8hqBP2ODvD34yvuh%2FWCAmU75Bx6sIgaI%2Fv5%2B6PV6JLqUsYr7dpDAoehs0h73pHTWrvKgThYbRSt9UmSjef3MpaUvBz4O72UmADgTOPJguGiZor%2B%2FHyUlJWBmJFz%2BD8xTtlUiOpbwpmrmrweeSXrT%2Bg11k4SBN3RGKUcAVCVdFhyP1nreDbY%2F%2FNPyEXUlU%2FPp4XYycGT6V0Ux2WwWdO7cOZSWlkII8diX7SPPNgDaKdbxoNAxwATBAEkEEgSWCEQAqPAMwqvMdCEwMO0tVqZpWsGTT58%2BDaPR%2BPhGIYQAAAgh0P7B3ioW%2FB0iGiCGiwXbCuOHFSJys6AbYFye2T%2BxWhT3WYJEIoH%2FDQBMw3kes8OJPgAAAABJRU5ErkJggg%3D%3D%29%7Ddiv%2Evis%2Dnetwork%20div%2Evis%2Dedit%2Dmode%20div%2Evis%2Dbutton%2Evis%2Dedit%2Evis%2Dedit%2Dmode%7Bbackground%2Dcolor%3A%23fcfcfc%3Bborder%3A1px%20solid%20%23ccc%7Ddiv%2Evis%2Dnetwork%20div%2Evis%2Dmanipulation%20div%2Evis%2Dbutton%2Evis%2Dconnect%7Bbackground%2Dimage%3Aurl%28data%3Aimage%2Fpng%3Bbase64%2CiVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAAACXBIWXMAAAsTAAALEwEAmpwYAAAKT2lDQ1BQaG90b3Nob3AgSUNDIHByb2ZpbGUAAHjanVNnVFPpFj333vRCS4iAlEtvUhUIIFJCi4AUkSYqIQkQSoghodkVUcERRUUEG8igiAOOjoCMFVEsDIoK2AfkIaKOg6OIisr74Xuja9a89%2BbN%2FrXXPues852zzwfACAyWSDNRNYAMqUIeEeCDx8TG4eQuQIEKJHAAEAizZCFz%2FSMBAPh%2BPDwrIsAHvgABeNMLCADATZvAMByH%2Fw%2FqQplcAYCEAcB0kThLCIAUAEB6jkKmAEBGAYCdmCZTAKAEAGDLY2LjAFAtAGAnf%2BbTAICd%2BJl7AQBblCEVAaCRACATZYhEAGg7AKzPVopFAFgwABRmS8Q5ANgtADBJV2ZIALC3AMDOEAuyAAgMADBRiIUpAAR7AGDIIyN4AISZABRG8lc88SuuEOcqAAB4mbI8uSQ5RYFbCC1xB1dXLh4ozkkXKxQ2YQJhmkAuwnmZGTKBNA%2Fg88wAAKCRFRHgg%2FP9eM4Ors7ONo62Dl8t6r8G%2FyJiYuP%2B5c%2BrcEAAAOF0ftH%2BLC%2BzGoA7BoBt%2FqIl7gRoXgugdfeLZrIPQLUAoOnaV%2FNw%2BH48PEWhkLnZ2eXk5NhKxEJbYcpXff5nwl%2FAV%2F1s%2BX48%2FPf14L7iJIEyXYFHBPjgwsz0TKUcz5IJhGLc5o9H%2FLcL%2F%2Fwd0yLESWK5WCoU41EScY5EmozzMqUiiUKSKcUl0v9k4t8s%2BwM%2B3zUAsGo%2BAXuRLahdYwP2SycQWHTA4vcAAPK7b8HUKAgDgGiD4c93%2F%2B8%2F%2FUegJQCAZkmScQAAXkQkLlTKsz%2FHCAAARKCBKrBBG%2FTBGCzABhzBBdzBC%2FxgNoRCJMTCQhBCCmSAHHJgKayCQiiGzbAdKmAv1EAdNMBRaIaTcA4uwlW4Dj1wD%2FphCJ7BKLyBCQRByAgTYSHaiAFiilgjjggXmYX4IcFIBBKLJCDJiBRRIkuRNUgxUopUIFVIHfI9cgI5h1xGupE7yAAygvyGvEcxlIGyUT3UDLVDuag3GoRGogvQZHQxmo8WoJvQcrQaPYw2oefQq2gP2o8%2BQ8cwwOgYBzPEbDAuxsNCsTgsCZNjy7EirAyrxhqwVqwDu4n1Y8%2BxdwQSgUXACTYEd0IgYR5BSFhMWE7YSKggHCQ0EdoJNwkDhFHCJyKTqEu0JroR%2BcQYYjIxh1hILCPWEo8TLxB7iEPENyQSiUMyJ7mQAkmxpFTSEtJG0m5SI%2BksqZs0SBojk8naZGuyBzmULCAryIXkneTD5DPkG%2BQh8lsKnWJAcaT4U%2BIoUspqShnlEOU05QZlmDJBVaOaUt2ooVQRNY9aQq2htlKvUYeoEzR1mjnNgxZJS6WtopXTGmgXaPdpr%2Bh0uhHdlR5Ol9BX0svpR%2BiX6AP0dwwNhhWDx4hnKBmbGAcYZxl3GK%2BYTKYZ04sZx1QwNzHrmOeZD5lvVVgqtip8FZHKCpVKlSaVGyovVKmqpqreqgtV81XLVI%2BpXlN9rkZVM1PjqQnUlqtVqp1Q61MbU2epO6iHqmeob1Q%2FpH5Z%2FYkGWcNMw09DpFGgsV%2FjvMYgC2MZs3gsIWsNq4Z1gTXEJrHN2Xx2KruY%2FR27iz2qqaE5QzNKM1ezUvOUZj8H45hx%2BJx0TgnnKKeX836K3hTvKeIpG6Y0TLkxZVxrqpaXllirSKtRq0frvTau7aedpr1Fu1n7gQ5Bx0onXCdHZ4%2FOBZ3nU9lT3acKpxZNPTr1ri6qa6UbobtEd79up%2B6Ynr5egJ5Mb6feeb3n%2Bhx9L%2F1U%2FW36p%2FVHDFgGswwkBtsMzhg8xTVxbzwdL8fb8VFDXcNAQ6VhlWGX4YSRudE8o9VGjUYPjGnGXOMk423GbcajJgYmISZLTepN7ppSTbmmKaY7TDtMx83MzaLN1pk1mz0x1zLnm%2Beb15vft2BaeFostqi2uGVJsuRaplnutrxuhVo5WaVYVVpds0atna0l1rutu6cRp7lOk06rntZnw7Dxtsm2qbcZsOXYBtuutm22fWFnYhdnt8Wuw%2B6TvZN9un2N%2FT0HDYfZDqsdWh1%2Bc7RyFDpWOt6azpzuP33F9JbpL2dYzxDP2DPjthPLKcRpnVOb00dnF2e5c4PziIuJS4LLLpc%2BLpsbxt3IveRKdPVxXeF60vWdm7Obwu2o26%2FuNu5p7ofcn8w0nymeWTNz0MPIQ%2BBR5dE%2FC5%2BVMGvfrH5PQ0%2BBZ7XnIy9jL5FXrdewt6V3qvdh7xc%2B9j5yn%2BM%2B4zw33jLeWV%2FMN8C3yLfLT8Nvnl%2BF30N%2FI%2F9k%2F3r%2F0QCngCUBZwOJgUGBWwL7%2BHp8Ib%2BOPzrbZfay2e1BjKC5QRVBj4KtguXBrSFoyOyQrSH355jOkc5pDoVQfujW0Adh5mGLw34MJ4WHhVeGP45wiFga0TGXNXfR3ENz30T6RJZE3ptnMU85ry1KNSo%2Bqi5qPNo3ujS6P8YuZlnM1VidWElsSxw5LiquNm5svt%2F87fOH4p3iC%2BN7F5gvyF1weaHOwvSFpxapLhIsOpZATIhOOJTwQRAqqBaMJfITdyWOCnnCHcJnIi%2FRNtGI2ENcKh5O8kgqTXqS7JG8NXkkxTOlLOW5hCepkLxMDUzdmzqeFpp2IG0yPTq9MYOSkZBxQqohTZO2Z%2Bpn5mZ2y6xlhbL%2BxW6Lty8elQfJa7OQrAVZLQq2QqboVFoo1yoHsmdlV2a%2FzYnKOZarnivN7cyzytuQN5zvn%2F%2FtEsIS4ZK2pYZLVy0dWOa9rGo5sjxxedsK4xUFK4ZWBqw8uIq2Km3VT6vtV5eufr0mek1rgV7ByoLBtQFr6wtVCuWFfevc1%2B1dT1gvWd%2B1YfqGnRs%2BFYmKrhTbF5cVf9go3HjlG4dvyr%2BZ3JS0qavEuWTPZtJm6ebeLZ5bDpaql%2BaXDm4N2dq0Dd9WtO319kXbL5fNKNu7g7ZDuaO%2FPLi8ZafJzs07P1SkVPRU%2BlQ27tLdtWHX%2BG7R7ht7vPY07NXbW7z3%2FT7JvttVAVVN1WbVZftJ%2B7P3P66Jqun4lvttXa1ObXHtxwPSA%2F0HIw6217nU1R3SPVRSj9Yr60cOxx%2B%2B%2Fp3vdy0NNg1VjZzG4iNwRHnk6fcJ3%2FceDTradox7rOEH0x92HWcdL2pCmvKaRptTmvtbYlu6T8w%2B0dbq3nr8R9sfD5w0PFl5SvNUyWna6YLTk2fyz4ydlZ19fi753GDborZ752PO32oPb%2B%2B6EHTh0kX%2Fi%2Bc7vDvOXPK4dPKy2%2BUTV7hXmq86X23qdOo8%2FpPTT8e7nLuarrlca7nuer21e2b36RueN87d9L158Rb%2F1tWeOT3dvfN6b%2FfF9%2FXfFt1%2Bcif9zsu72Xcn7q28T7xf9EDtQdlD3YfVP1v%2B3Njv3H9qwHeg89HcR%2FcGhYPP%2FpH1jw9DBY%2BZj8uGDYbrnjg%2BOTniP3L96fynQ89kzyaeF%2F6i%2FsuuFxYvfvjV69fO0ZjRoZfyl5O%2FbXyl%2FerA6xmv28bCxh6%2ByXgzMV70VvvtwXfcdx3vo98PT%2BR8IH8o%2F2j5sfVT0Kf7kxmTk%2F8EA5jz%2FGMzLdsAAEEOaVRYdFhNTDpjb20uYWRvYmUueG1wAAAAAAA8P3hwYWNrZXQgYmVnaW49Iu%2B7vyIgaWQ9Ilc1TTBNcENlaGlIenJlU3pOVGN6a2M5ZCI%2FPgo8eDp4bXBtZXRhIHhtbG5zOng9ImFkb2JlOm5zOm1ldGEvIiB4OnhtcHRrPSJBZG9iZSBYTVAgQ29yZSA1LjUtYzAyMSA3OS4xNTQ5MTEsIDIwMTMvMTAvMjktMTE6NDc6MTYgICAgICAgICI%2BCiAgIDxyZGY6UkRGIHhtbG5zOnJkZj0iaHR0cDovL3d3dy53My5vcmcvMTk5OS8wMi8yMi1yZGYtc3ludGF4LW5zIyI%2BCiAgICAgIDxyZGY6RGVzY3JpcHRpb24gcmRmOmFib3V0PSIiCiAgICAgICAgICAgIHhtbG5zOnhtcD0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wLyIKICAgICAgICAgICAgeG1sbnM6ZGM9Imh0dHA6Ly9wdXJsLm9yZy9kYy9lbGVtZW50cy8xLjEvIgogICAgICAgICAgICB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIKICAgICAgICAgICAgeG1sbnM6c3RFdnQ9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZUV2ZW50IyIKICAgICAgICAgICAgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZVJlZiMiCiAgICAgICAgICAgIHhtbG5zOnBob3Rvc2hvcD0iaHR0cDovL25zLmFkb2JlLmNvbS9waG90b3Nob3AvMS4wLyIKICAgICAgICAgICAgeG1sbnM6dGlmZj0iaHR0cDovL25zLmFkb2JlLmNvbS90aWZmLzEuMC8iCiAgICAgICAgICAgIHhtbG5zOmV4aWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20vZXhpZi8xLjAvIj4KICAgICAgICAgPHhtcDpDcmVhdG9yVG9vbD5BZG9iZSBQaG90b3Nob3AgQ0MgKFdpbmRvd3MpPC94bXA6Q3JlYXRvclRvb2w%2BCiAgICAgICAgIDx4bXA6Q3JlYXRlRGF0ZT4yMDE0LTAxLTIyVDE5OjI0OjUxKzAxOjAwPC94bXA6Q3JlYXRlRGF0ZT4KICAgICAgICAgPHhtcDpNZXRhZGF0YURhdGU%2BMjAxNC0wMi0wNFQxNDozODo1NyswMTowMDwveG1wOk1ldGFkYXRhRGF0ZT4KICAgICAgICAgPHhtcDpNb2RpZnlEYXRlPjIwMTQtMDItMDRUMTQ6Mzg6NTcrMDE6MDA8L3htcDpNb2RpZnlEYXRlPgogICAgICAgICA8ZGM6Zm9ybWF0PmltYWdlL3BuZzwvZGM6Zm9ybWF0PgogICAgICAgICA8eG1wTU06SW5zdGFuY2VJRD54bXAuaWlkOjlmYjUwMDU0LWE3ODEtMWQ0OC05ZTllLTU2ZWQ5YzhlYjdjNjwveG1wTU06SW5zdGFuY2VJRD4KICAgICAgICAgPHhtcE1NOkRvY3VtZW50SUQ%2BeG1wLmRpZDpFQTc2MkY5Njc0ODNFMzExOTQ4QkQxM0UyQkU3OTlBMTwveG1wTU06RG9jdW1lbnRJRD4KICAgICAgICAgPHhtcE1NOk9yaWdpbmFsRG9jdW1lbnRJRD54bXAuZGlkOjczQjYyQUFEOTE4M0UzMTE5NDhCRDEzRTJCRTc5OUExPC94bXBNTTpPcmlnaW5hbERvY3VtZW50SUQ%2BCiAgICAgICAgIDx4bXBNTTpIaXN0b3J5PgogICAgICAgICAgICA8cmRmOlNlcT4KICAgICAgICAgICAgICAgPHJkZjpsaSByZGY6cGFyc2VUeXBlPSJSZXNvdXJjZSI%2BCiAgICAgICAgICAgICAgICAgIDxzdEV2dDphY3Rpb24%2BY3JlYXRlZDwvc3RFdnQ6YWN0aW9uPgogICAgICAgICAgICAgICAgICA8c3RFdnQ6aW5zdGFuY2VJRD54bXAuaWlkOjczQjYyQUFEOTE4M0UzMTE5NDhCRDEzRTJCRTc5OUExPC9zdEV2dDppbnN0YW5jZUlEPgogICAgICAgICAgICAgICAgICA8c3RFdnQ6d2hlbj4yMDE0LTAxLTIyVDE5OjI0OjUxKzAxOjAwPC9zdEV2dDp3aGVuPgogICAgICAgICAgICAgICAgICA8c3RFdnQ6c29mdHdhcmVBZ2VudD5BZG9iZSBQaG90b3Nob3AgQ1M2IChXaW5kb3dzKTwvc3RFdnQ6c29mdHdhcmVBZ2VudD4KICAgICAgICAgICAgICAgPC9yZGY6bGk%2BCiAgICAgICAgICAgICAgIDxyZGY6bGkgcmRmOnBhcnNlVHlwZT0iUmVzb3VyY2UiPgogICAgICAgICAgICAgICAgICA8c3RFdnQ6YWN0aW9uPnNhdmVkPC9zdEV2dDphY3Rpb24%2BCiAgICAgICAgICAgICAgICAgIDxzdEV2dDppbnN0YW5jZUlEPnhtcC5paWQ6RUE2MEEyNEUxOTg0RTMxMUFEQUZFRkU2RUMzMzNFMDM8L3N0RXZ0Omluc3RhbmNlSUQ%2BCiAgICAgICAgICAgICAgICAgIDxzdEV2dDp3aGVuPjIwMTQtMDEtMjNUMTk6MTg6MDcrMDE6MDA8L3N0RXZ0OndoZW4%2BCiAgICAgICAgICAgICAgICAgIDxzdEV2dDpzb2Z0d2FyZUFnZW50PkFkb2JlIFBob3Rvc2hvcCBDUzYgKFdpbmRvd3MpPC9zdEV2dDpzb2Z0d2FyZUFnZW50PgogICAgICAgICAgICAgICAgICA8c3RFdnQ6Y2hhbmdlZD4vPC9zdEV2dDpjaGFuZ2VkPgogICAgICAgICAgICAgICA8L3JkZjpsaT4KICAgICAgICAgICAgICAgPHJkZjpsaSByZGY6cGFyc2VUeXBlPSJSZXNvdXJjZSI%2BCiAgICAgICAgICAgICAgICAgIDxzdEV2dDphY3Rpb24%2Bc2F2ZWQ8L3N0RXZ0OmFjdGlvbj4KICAgICAgICAgICAgICAgICAgPHN0RXZ0Omluc3RhbmNlSUQ%2BeG1wLmlpZDo3ZWRhMjI0MC0yYTQxLTNlNDQtYWM2My1iNzNiYTE5OWI3Y2E8L3N0RXZ0Omluc3RhbmNlSUQ%2BCiAgICAgICAgICAgICAgICAgIDxzdEV2dDp3aGVuPjIwMTQtMDItMDRUMTQ6Mzg6NTcrMDE6MDA8L3N0RXZ0OndoZW4%2BCiAgICAgICAgICAgICAgICAgIDxzdEV2dDpzb2Z0d2FyZUFnZW50PkFkb2JlIFBob3Rvc2hvcCBDQyAoV2luZG93cyk8L3N0RXZ0OnNvZnR3YXJlQWdlbnQ%2BCiAgICAgICAgICAgICAgICAgIDxzdEV2dDpjaGFuZ2VkPi88L3N0RXZ0OmNoYW5nZWQ%2BCiAgICAgICAgICAgICAgIDwvcmRmOmxpPgogICAgICAgICAgICAgICA8cmRmOmxpIHJkZjpwYXJzZVR5cGU9IlJlc291cmNlIj4KICAgICAgICAgICAgICAgICAgPHN0RXZ0OmFjdGlvbj5jb252ZXJ0ZWQ8L3N0RXZ0OmFjdGlvbj4KICAgICAgICAgICAgICAgICAgPHN0RXZ0OnBhcmFtZXRlcnM%2BZnJvbSBhcHBsaWNhdGlvbi92bmQuYWRvYmUucGhvdG9zaG9wIHRvIGltYWdlL3BuZzwvc3RFdnQ6cGFyYW1ldGVycz4KICAgICAgICAgICAgICAgPC9yZGY6bGk%2BCiAgICAgICAgICAgICAgIDxyZGY6bGkgcmRmOnBhcnNlVHlwZT0iUmVzb3VyY2UiPgogICAgICAgICAgICAgICAgICA8c3RFdnQ6YWN0aW9uPmRlcml2ZWQ8L3N0RXZ0OmFjdGlvbj4KICAgICAgICAgICAgICAgICAgPHN0RXZ0OnBhcmFtZXRlcnM%2BY29udmVydGVkIGZyb20gYXBwbGljYXRpb24vdm5kLmFkb2JlLnBob3Rvc2hvcCB0byBpbWFnZS9wbmc8L3N0RXZ0OnBhcmFtZXRlcnM%2BCiAgICAgICAgICAgICAgIDwvcmRmOmxpPgogICAgICAgICAgICAgICA8cmRmOmxpIHJkZjpwYXJzZVR5cGU9IlJlc291cmNlIj4KICAgICAgICAgICAgICAgICAgPHN0RXZ0OmFjdGlvbj5zYXZlZDwvc3RFdnQ6YWN0aW9uPgogICAgICAgICAgICAgICAgICA8c3RFdnQ6aW5zdGFuY2VJRD54bXAuaWlkOjlmYjUwMDU0LWE3ODEtMWQ0OC05ZTllLTU2ZWQ5YzhlYjdjNjwvc3RFdnQ6aW5zdGFuY2VJRD4KICAgICAgICAgICAgICAgICAgPHN0RXZ0OndoZW4%2BMjAxNC0wMi0wNFQxNDozODo1NyswMTowMDwvc3RFdnQ6d2hlbj4KICAgICAgICAgICAgICAgICAgPHN0RXZ0OnNvZnR3YXJlQWdlbnQ%2BQWRvYmUgUGhvdG9zaG9wIENDIChXaW5kb3dzKTwvc3RFdnQ6c29mdHdhcmVBZ2VudD4KICAgICAgICAgICAgICAgICAgPHN0RXZ0OmNoYW5nZWQ%2BLzwvc3RFdnQ6Y2hhbmdlZD4KICAgICAgICAgICAgICAgPC9yZGY6bGk%2BCiAgICAgICAgICAgIDwvcmRmOlNlcT4KICAgICAgICAgPC94bXBNTTpIaXN0b3J5PgogICAgICAgICA8eG1wTU06RGVyaXZlZEZyb20gcmRmOnBhcnNlVHlwZT0iUmVzb3VyY2UiPgogICAgICAgICAgICA8c3RSZWY6aW5zdGFuY2VJRD54bXAuaWlkOjdlZGEyMjQwLTJhNDEtM2U0NC1hYzYzLWI3M2JhMTk5YjdjYTwvc3RSZWY6aW5zdGFuY2VJRD4KICAgICAgICAgICAgPHN0UmVmOmRvY3VtZW50SUQ%2BeG1wLmRpZDpFQTc2MkY5Njc0ODNFMzExOTQ4QkQxM0UyQkU3OTlBMTwvc3RSZWY6ZG9jdW1lbnRJRD4KICAgICAgICAgICAgPHN0UmVmOm9yaWdpbmFsRG9jdW1lbnRJRD54bXAuZGlkOjczQjYyQUFEOTE4M0UzMTE5NDhCRDEzRTJCRTc5OUExPC9zdFJlZjpvcmlnaW5hbERvY3VtZW50SUQ%2BCiAgICAgICAgIDwveG1wTU06RGVyaXZlZEZyb20%2BCiAgICAgICAgIDxwaG90b3Nob3A6Q29sb3JNb2RlPjM8L3Bob3Rvc2hvcDpDb2xvck1vZGU%2BCiAgICAgICAgIDxwaG90b3Nob3A6SUNDUHJvZmlsZT5zUkdCIElFQzYxOTY2LTIuMTwvcGhvdG9zaG9wOklDQ1Byb2ZpbGU%2BCiAgICAgICAgIDx0aWZmOk9yaWVudGF0aW9uPjE8L3RpZmY6T3JpZW50YXRpb24%2BCiAgICAgICAgIDx0aWZmOlhSZXNvbHV0aW9uPjcyMDA5MC8xMDAwMDwvdGlmZjpYUmVzb2x1dGlvbj4KICAgICAgICAgPHRpZmY6WVJlc29sdXRpb24%2BNzIwMDkwLzEwMDAwPC90aWZmOllSZXNvbHV0aW9uPgogICAgICAgICA8dGlmZjpSZXNvbHV0aW9uVW5pdD4yPC90aWZmOlJlc29sdXRpb25Vbml0PgogICAgICAgICA8ZXhpZjpDb2xvclNwYWNlPjE8L2V4aWY6Q29sb3JTcGFjZT4KICAgICAgICAgPGV4aWY6UGl4ZWxYRGltZW5zaW9uPjI0PC9leGlmOlBpeGVsWERpbWVuc2lvbj4KICAgICAgICAgPGV4aWY6UGl4ZWxZRGltZW5zaW9uPjI0PC9leGlmOlBpeGVsWURpbWVuc2lvbj4KICAgICAgPC9yZGY6RGVzY3JpcHRpb24%2BCiAgIDwvcmRmOlJERj4KPC94OnhtcG1ldGE%2BCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgCjw%2FeHBhY2tldCBlbmQ9InciPz4ubxs%2BAAAAIGNIUk0AAHolAACAgwAA%2Bf8AAIDpAAB1MAAA6mAAADqYAAAXb5JfxUYAAAUtSURBVHjajJZ%2FbNT1Gcdfz%2FP53PV6B4W7VltLqdAaplIOiMOoyxxJCSs%2FGv%2FyB4gzJroAosmmDklwkYWR0bQsdmkykoojTpcsWYLxD%2FlRZdMQkTHRtkLZRqG0tIVe7662vTu43n32x%2FVKZ%2Fjh89cn38%2FzvN7P5%2Fl88zwf2blzJz6fDwARQUSm1n8s31CM0%2FVAnbNmsUPuAsDpgEO%2BBg4C7%2F%2Fiyv5hvmMiQiqVQpqamvB6vVNwEeG1JZtCBrYi%2FMrkAwDNgjhwAlbzICBLA0rDb0%2B%2F839C6XQaaWxspLCw8Dp86cbNmqVFJQddE6KzdjZ9D89g%2BB6fSyCOcyn1nxil%2BO9xKg5HqWFSHGXLjrP7W%2FICqVQK2bNnDz6fDxFh65KNvxbHDhF4rJj2bXPo%2BIGfcW5h5xL4f99P%2BFCEMIAob75x9t0dAMlkElNXV4e1lteXbNqiQoMaeOFOjrdU868SD2luYyEP6dUh%2BsYmSHeOU6GO5Z8VLx5%2BNNZxIpPJ5AS2L3upROCoCvz8Lo7vnkf77cAHhpiz%2FzIL9vWz8L8p%2FNvupmM0Q7pjnAoLqz8tDrc8MnQqYVUVhVdF4LEg7b%2BrvDn8wDDlH0WoPpukLJImSBaMwjcJqmwWts2jPZLG%2F8kwYVFeVdXXZcFf4yVDc2cNKfBFmD9X%2B0ncCP58F48eG%2BFeo2CAUkvs4dl0V%2FuJvdXLiiV%2But%2B%2Bn7YLSfxPfMMG54ChzB3WIesVWB2i82bw1AR6fJR7C4VsfYiv6u%2Fk3A9nEgP4zXke8DiYHyAOMK%2BQxPIgnZ9GqSHr1itQJ8DK2fTerDQ%2BS%2FbHRXQJaHSCwNIZ2Xh%2B7%2BS3VAmwNMBA%2FtuPZtErgKquUmdMWIFlRURvdamRNEXGwIWrlP47pTMzLiunxghGMwTLvcTWlHAp77s4QNSrYMQtss6ZMgWqCm5cHoDHO1nbk6K8zEN8%2B3zatv2Hn1b59EqJZdxmYUERg9P9KwpIiAOTdWUWBXuLzB%2FvZG3P1Un4PNp2d1MbmyD45TWCxuCsQm0x56bHGHFYEZwxok7toAA9Sfw3hCcoL%2FNOwi9QO5wmWO1j4JEgZxTkodmcWRGkf3pcX0r8xoAaBixKu4U5%2FxwndM%2B0tpAvS6mP%2BPZK2nb1UBvPEKwKMLDvPj4ESGc55lGy303sdJKQdZB2rkMdctAB%2F4gzN%2B%2FQ2ENNd4LyUi%2FxN%2BbTtquX2thk5nk4wI3gAF%2BOMNcA1nFQDfK%2BBY5GqbkwWabTY5QZhXWlnNx1ntrY1Rz87fuvw29m%2FSn8J%2BPUGAFj5T19baA1IspuBZp7cx1x4SwG1cEf%2BlgRSROs8jGwb%2BHt4QB%2FGSSsAhYano39LWIBxNEIbP14hPDuiyS2VtJuHXQlKKvxM%2FjiXDq%2FD%2FxPlwifGMkJZB2NIoKpr69nxeiZxLHicFSFVWfGqBidIP3LSjrWltD94CyufF%2F4kQgPuVz2Lz93%2BdDRa9eu5QQ8Hg8%2FiXee%2BDy4CKMs7xqn4nwKz9IirhQqmVuB42m8ey%2Bx7LMoD6iAON782eChhqmRuXfvXgKBAKqKqtI0%2F8nNKrQI4BVYXkzHgzPpC88gWuHL%2FcaXrhLoGiN0apSKr0ZZRBZM7q2w5ZnLR1oAnHOMjY0hra2tFBQUYIyZmstvVT1Z6eDlAuEVq7merxmwueNPDXy9PvybjKP5mctHLk4%2FXTKZRJqbm%2FH7%2FVNw1VyEMYbW4FN3WNWnnchKoy5sHeVGBRX6VWi3ymFx7r11Ix8MTX%2Fy5C2RSPC%2FAQB61erowbpqSwAAAABJRU5ErkJggg%3D%3D%29%7Ddiv%2Evis%2Dnetwork%20div%2Evis%2Dmanipulation%20div%2Evis%2Dbutton%2Evis%2Ddelete%7Bbackground%2Dimage%3Aurl%28data%3Aimage%2Fpng%3Bbase64%2CiVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAAACXBIWXMAAAsTAAALEwEAmpwYAAAKT2lDQ1BQaG90b3Nob3AgSUNDIHByb2ZpbGUAAHjanVNnVFPpFj333vRCS4iAlEtvUhUIIFJCi4AUkSYqIQkQSoghodkVUcERRUUEG8igiAOOjoCMFVEsDIoK2AfkIaKOg6OIisr74Xuja9a89%2BbN%2FrXXPues852zzwfACAyWSDNRNYAMqUIeEeCDx8TG4eQuQIEKJHAAEAizZCFz%2FSMBAPh%2BPDwrIsAHvgABeNMLCADATZvAMByH%2Fw%2FqQplcAYCEAcB0kThLCIAUAEB6jkKmAEBGAYCdmCZTAKAEAGDLY2LjAFAtAGAnf%2BbTAICd%2BJl7AQBblCEVAaCRACATZYhEAGg7AKzPVopFAFgwABRmS8Q5ANgtADBJV2ZIALC3AMDOEAuyAAgMADBRiIUpAAR7AGDIIyN4AISZABRG8lc88SuuEOcqAAB4mbI8uSQ5RYFbCC1xB1dXLh4ozkkXKxQ2YQJhmkAuwnmZGTKBNA%2Fg88wAAKCRFRHgg%2FP9eM4Ors7ONo62Dl8t6r8G%2FyJiYuP%2B5c%2BrcEAAAOF0ftH%2BLC%2BzGoA7BoBt%2FqIl7gRoXgugdfeLZrIPQLUAoOnaV%2FNw%2BH48PEWhkLnZ2eXk5NhKxEJbYcpXff5nwl%2FAV%2F1s%2BX48%2FPf14L7iJIEyXYFHBPjgwsz0TKUcz5IJhGLc5o9H%2FLcL%2F%2Fwd0yLESWK5WCoU41EScY5EmozzMqUiiUKSKcUl0v9k4t8s%2BwM%2B3zUAsGo%2BAXuRLahdYwP2SycQWHTA4vcAAPK7b8HUKAgDgGiD4c93%2F%2B8%2F%2FUegJQCAZkmScQAAXkQkLlTKsz%2FHCAAARKCBKrBBG%2FTBGCzABhzBBdzBC%2FxgNoRCJMTCQhBCCmSAHHJgKayCQiiGzbAdKmAv1EAdNMBRaIaTcA4uwlW4Dj1wD%2FphCJ7BKLyBCQRByAgTYSHaiAFiilgjjggXmYX4IcFIBBKLJCDJiBRRIkuRNUgxUopUIFVIHfI9cgI5h1xGupE7yAAygvyGvEcxlIGyUT3UDLVDuag3GoRGogvQZHQxmo8WoJvQcrQaPYw2oefQq2gP2o8%2BQ8cwwOgYBzPEbDAuxsNCsTgsCZNjy7EirAyrxhqwVqwDu4n1Y8%2BxdwQSgUXACTYEd0IgYR5BSFhMWE7YSKggHCQ0EdoJNwkDhFHCJyKTqEu0JroR%2BcQYYjIxh1hILCPWEo8TLxB7iEPENyQSiUMyJ7mQAkmxpFTSEtJG0m5SI%2BksqZs0SBojk8naZGuyBzmULCAryIXkneTD5DPkG%2BQh8lsKnWJAcaT4U%2BIoUspqShnlEOU05QZlmDJBVaOaUt2ooVQRNY9aQq2htlKvUYeoEzR1mjnNgxZJS6WtopXTGmgXaPdpr%2Bh0uhHdlR5Ol9BX0svpR%2BiX6AP0dwwNhhWDx4hnKBmbGAcYZxl3GK%2BYTKYZ04sZx1QwNzHrmOeZD5lvVVgqtip8FZHKCpVKlSaVGyovVKmqpqreqgtV81XLVI%2BpXlN9rkZVM1PjqQnUlqtVqp1Q61MbU2epO6iHqmeob1Q%2FpH5Z%2FYkGWcNMw09DpFGgsV%2FjvMYgC2MZs3gsIWsNq4Z1gTXEJrHN2Xx2KruY%2FR27iz2qqaE5QzNKM1ezUvOUZj8H45hx%2BJx0TgnnKKeX836K3hTvKeIpG6Y0TLkxZVxrqpaXllirSKtRq0frvTau7aedpr1Fu1n7gQ5Bx0onXCdHZ4%2FOBZ3nU9lT3acKpxZNPTr1ri6qa6UbobtEd79up%2B6Ynr5egJ5Mb6feeb3n%2Bhx9L%2F1U%2FW36p%2FVHDFgGswwkBtsMzhg8xTVxbzwdL8fb8VFDXcNAQ6VhlWGX4YSRudE8o9VGjUYPjGnGXOMk423GbcajJgYmISZLTepN7ppSTbmmKaY7TDtMx83MzaLN1pk1mz0x1zLnm%2Beb15vft2BaeFostqi2uGVJsuRaplnutrxuhVo5WaVYVVpds0atna0l1rutu6cRp7lOk06rntZnw7Dxtsm2qbcZsOXYBtuutm22fWFnYhdnt8Wuw%2B6TvZN9un2N%2FT0HDYfZDqsdWh1%2Bc7RyFDpWOt6azpzuP33F9JbpL2dYzxDP2DPjthPLKcRpnVOb00dnF2e5c4PziIuJS4LLLpc%2BLpsbxt3IveRKdPVxXeF60vWdm7Obwu2o26%2FuNu5p7ofcn8w0nymeWTNz0MPIQ%2BBR5dE%2FC5%2BVMGvfrH5PQ0%2BBZ7XnIy9jL5FXrdewt6V3qvdh7xc%2B9j5yn%2BM%2B4zw33jLeWV%2FMN8C3yLfLT8Nvnl%2BF30N%2FI%2F9k%2F3r%2F0QCngCUBZwOJgUGBWwL7%2BHp8Ib%2BOPzrbZfay2e1BjKC5QRVBj4KtguXBrSFoyOyQrSH355jOkc5pDoVQfujW0Adh5mGLw34MJ4WHhVeGP45wiFga0TGXNXfR3ENz30T6RJZE3ptnMU85ry1KNSo%2Bqi5qPNo3ujS6P8YuZlnM1VidWElsSxw5LiquNm5svt%2F87fOH4p3iC%2BN7F5gvyF1weaHOwvSFpxapLhIsOpZATIhOOJTwQRAqqBaMJfITdyWOCnnCHcJnIi%2FRNtGI2ENcKh5O8kgqTXqS7JG8NXkkxTOlLOW5hCepkLxMDUzdmzqeFpp2IG0yPTq9MYOSkZBxQqohTZO2Z%2Bpn5mZ2y6xlhbL%2BxW6Lty8elQfJa7OQrAVZLQq2QqboVFoo1yoHsmdlV2a%2FzYnKOZarnivN7cyzytuQN5zvn%2F%2FtEsIS4ZK2pYZLVy0dWOa9rGo5sjxxedsK4xUFK4ZWBqw8uIq2Km3VT6vtV5eufr0mek1rgV7ByoLBtQFr6wtVCuWFfevc1%2B1dT1gvWd%2B1YfqGnRs%2BFYmKrhTbF5cVf9go3HjlG4dvyr%2BZ3JS0qavEuWTPZtJm6ebeLZ5bDpaql%2BaXDm4N2dq0Dd9WtO319kXbL5fNKNu7g7ZDuaO%2FPLi8ZafJzs07P1SkVPRU%2BlQ27tLdtWHX%2BG7R7ht7vPY07NXbW7z3%2FT7JvttVAVVN1WbVZftJ%2B7P3P66Jqun4lvttXa1ObXHtxwPSA%2F0HIw6217nU1R3SPVRSj9Yr60cOxx%2B%2B%2Fp3vdy0NNg1VjZzG4iNwRHnk6fcJ3%2FceDTradox7rOEH0x92HWcdL2pCmvKaRptTmvtbYlu6T8w%2B0dbq3nr8R9sfD5w0PFl5SvNUyWna6YLTk2fyz4ydlZ19fi753GDborZ752PO32oPb%2B%2B6EHTh0kX%2Fi%2Bc7vDvOXPK4dPKy2%2BUTV7hXmq86X23qdOo8%2FpPTT8e7nLuarrlca7nuer21e2b36RueN87d9L158Rb%2F1tWeOT3dvfN6b%2FfF9%2FXfFt1%2Bcif9zsu72Xcn7q28T7xf9EDtQdlD3YfVP1v%2B3Njv3H9qwHeg89HcR%2FcGhYPP%2FpH1jw9DBY%2BZj8uGDYbrnjg%2BOTniP3L96fynQ89kzyaeF%2F6i%2FsuuFxYvfvjV69fO0ZjRoZfyl5O%2FbXyl%2FerA6xmv28bCxh6%2ByXgzMV70VvvtwXfcdx3vo98PT%2BR8IH8o%2F2j5sfVT0Kf7kxmTk%2F8EA5jz%2FGMzLdsAAEEOaVRYdFhNTDpjb20uYWRvYmUueG1wAAAAAAA8P3hwYWNrZXQgYmVnaW49Iu%2B7vyIgaWQ9Ilc1TTBNcENlaGlIenJlU3pOVGN6a2M5ZCI%2FPgo8eDp4bXBtZXRhIHhtbG5zOng9ImFkb2JlOm5zOm1ldGEvIiB4OnhtcHRrPSJBZG9iZSBYTVAgQ29yZSA1LjUtYzAyMSA3OS4xNTQ5MTEsIDIwMTMvMTAvMjktMTE6NDc6MTYgICAgICAgICI%2BCiAgIDxyZGY6UkRGIHhtbG5zOnJkZj0iaHR0cDovL3d3dy53My5vcmcvMTk5OS8wMi8yMi1yZGYtc3ludGF4LW5zIyI%2BCiAgICAgIDxyZGY6RGVzY3JpcHRpb24gcmRmOmFib3V0PSIiCiAgICAgICAgICAgIHhtbG5zOnhtcD0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wLyIKICAgICAgICAgICAgeG1sbnM6ZGM9Imh0dHA6Ly9wdXJsLm9yZy9kYy9lbGVtZW50cy8xLjEvIgogICAgICAgICAgICB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIKICAgICAgICAgICAgeG1sbnM6c3RFdnQ9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZUV2ZW50IyIKICAgICAgICAgICAgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZVJlZiMiCiAgICAgICAgICAgIHhtbG5zOnBob3Rvc2hvcD0iaHR0cDovL25zLmFkb2JlLmNvbS9waG90b3Nob3AvMS4wLyIKICAgICAgICAgICAgeG1sbnM6dGlmZj0iaHR0cDovL25zLmFkb2JlLmNvbS90aWZmLzEuMC8iCiAgICAgICAgICAgIHhtbG5zOmV4aWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20vZXhpZi8xLjAvIj4KICAgICAgICAgPHhtcDpDcmVhdG9yVG9vbD5BZG9iZSBQaG90b3Nob3AgQ0MgKFdpbmRvd3MpPC94bXA6Q3JlYXRvclRvb2w%2BCiAgICAgICAgIDx4bXA6Q3JlYXRlRGF0ZT4yMDE0LTAxLTIyVDE5OjI0OjUxKzAxOjAwPC94bXA6Q3JlYXRlRGF0ZT4KICAgICAgICAgPHhtcDpNZXRhZGF0YURhdGU%2BMjAxNC0wMi0wNFQxNDo0MTowNCswMTowMDwveG1wOk1ldGFkYXRhRGF0ZT4KICAgICAgICAgPHhtcDpNb2RpZnlEYXRlPjIwMTQtMDItMDRUMTQ6NDE6MDQrMDE6MDA8L3htcDpNb2RpZnlEYXRlPgogICAgICAgICA8ZGM6Zm9ybWF0PmltYWdlL3BuZzwvZGM6Zm9ybWF0PgogICAgICAgICA8eG1wTU06SW5zdGFuY2VJRD54bXAuaWlkOjc3NDkzYmUxLTEyZGItOTg0NC1iNDYyLTg2NGVmNGIzMzM3MTwveG1wTU06SW5zdGFuY2VJRD4KICAgICAgICAgPHhtcE1NOkRvY3VtZW50SUQ%2BeG1wLmRpZDpFQTc2MkY5Njc0ODNFMzExOTQ4QkQxM0UyQkU3OTlBMTwveG1wTU06RG9jdW1lbnRJRD4KICAgICAgICAgPHhtcE1NOk9yaWdpbmFsRG9jdW1lbnRJRD54bXAuZGlkOjczQjYyQUFEOTE4M0UzMTE5NDhCRDEzRTJCRTc5OUExPC94bXBNTTpPcmlnaW5hbERvY3VtZW50SUQ%2BCiAgICAgICAgIDx4bXBNTTpIaXN0b3J5PgogICAgICAgICAgICA8cmRmOlNlcT4KICAgICAgICAgICAgICAgPHJkZjpsaSByZGY6cGFyc2VUeXBlPSJSZXNvdXJjZSI%2BCiAgICAgICAgICAgICAgICAgIDxzdEV2dDphY3Rpb24%2BY3JlYXRlZDwvc3RFdnQ6YWN0aW9uPgogICAgICAgICAgICAgICAgICA8c3RFdnQ6aW5zdGFuY2VJRD54bXAuaWlkOjczQjYyQUFEOTE4M0UzMTE5NDhCRDEzRTJCRTc5OUExPC9zdEV2dDppbnN0YW5jZUlEPgogICAgICAgICAgICAgICAgICA8c3RFdnQ6d2hlbj4yMDE0LTAxLTIyVDE5OjI0OjUxKzAxOjAwPC9zdEV2dDp3aGVuPgogICAgICAgICAgICAgICAgICA8c3RFdnQ6c29mdHdhcmVBZ2VudD5BZG9iZSBQaG90b3Nob3AgQ1M2IChXaW5kb3dzKTwvc3RFdnQ6c29mdHdhcmVBZ2VudD4KICAgICAgICAgICAgICAgPC9yZGY6bGk%2BCiAgICAgICAgICAgICAgIDxyZGY6bGkgcmRmOnBhcnNlVHlwZT0iUmVzb3VyY2UiPgogICAgICAgICAgICAgICAgICA8c3RFdnQ6YWN0aW9uPnNhdmVkPC9zdEV2dDphY3Rpb24%2BCiAgICAgICAgICAgICAgICAgIDxzdEV2dDppbnN0YW5jZUlEPnhtcC5paWQ6RUE2MEEyNEUxOTg0RTMxMUFEQUZFRkU2RUMzMzNFMDM8L3N0RXZ0Omluc3RhbmNlSUQ%2BCiAgICAgICAgICAgICAgICAgIDxzdEV2dDp3aGVuPjIwMTQtMDEtMjNUMTk6MTg6MDcrMDE6MDA8L3N0RXZ0OndoZW4%2BCiAgICAgICAgICAgICAgICAgIDxzdEV2dDpzb2Z0d2FyZUFnZW50PkFkb2JlIFBob3Rvc2hvcCBDUzYgKFdpbmRvd3MpPC9zdEV2dDpzb2Z0d2FyZUFnZW50PgogICAgICAgICAgICAgICAgICA8c3RFdnQ6Y2hhbmdlZD4vPC9zdEV2dDpjaGFuZ2VkPgogICAgICAgICAgICAgICA8L3JkZjpsaT4KICAgICAgICAgICAgICAgPHJkZjpsaSByZGY6cGFyc2VUeXBlPSJSZXNvdXJjZSI%2BCiAgICAgICAgICAgICAgICAgIDxzdEV2dDphY3Rpb24%2Bc2F2ZWQ8L3N0RXZ0OmFjdGlvbj4KICAgICAgICAgICAgICAgICAgPHN0RXZ0Omluc3RhbmNlSUQ%2BeG1wLmlpZDowNmE3NWYwMy04MDdhLWUzNGYtYjk1Zi1jZGU2MjM0Mzg4OGY8L3N0RXZ0Omluc3RhbmNlSUQ%2BCiAgICAgICAgICAgICAgICAgIDxzdEV2dDp3aGVuPjIwMTQtMDItMDRUMTQ6NDE6MDQrMDE6MDA8L3N0RXZ0OndoZW4%2BCiAgICAgICAgICAgICAgICAgIDxzdEV2dDpzb2Z0d2FyZUFnZW50PkFkb2JlIFBob3Rvc2hvcCBDQyAoV2luZG93cyk8L3N0RXZ0OnNvZnR3YXJlQWdlbnQ%2BCiAgICAgICAgICAgICAgICAgIDxzdEV2dDpjaGFuZ2VkPi88L3N0RXZ0OmNoYW5nZWQ%2BCiAgICAgICAgICAgICAgIDwvcmRmOmxpPgogICAgICAgICAgICAgICA8cmRmOmxpIHJkZjpwYXJzZVR5cGU9IlJlc291cmNlIj4KICAgICAgICAgICAgICAgICAgPHN0RXZ0OmFjdGlvbj5jb252ZXJ0ZWQ8L3N0RXZ0OmFjdGlvbj4KICAgICAgICAgICAgICAgICAgPHN0RXZ0OnBhcmFtZXRlcnM%2BZnJvbSBhcHBsaWNhdGlvbi92bmQuYWRvYmUucGhvdG9zaG9wIHRvIGltYWdlL3BuZzwvc3RFdnQ6cGFyYW1ldGVycz4KICAgICAgICAgICAgICAgPC9yZGY6bGk%2BCiAgICAgICAgICAgICAgIDxyZGY6bGkgcmRmOnBhcnNlVHlwZT0iUmVzb3VyY2UiPgogICAgICAgICAgICAgICAgICA8c3RFdnQ6YWN0aW9uPmRlcml2ZWQ8L3N0RXZ0OmFjdGlvbj4KICAgICAgICAgICAgICAgICAgPHN0RXZ0OnBhcmFtZXRlcnM%2BY29udmVydGVkIGZyb20gYXBwbGljYXRpb24vdm5kLmFkb2JlLnBob3Rvc2hvcCB0byBpbWFnZS9wbmc8L3N0RXZ0OnBhcmFtZXRlcnM%2BCiAgICAgICAgICAgICAgIDwvcmRmOmxpPgogICAgICAgICAgICAgICA8cmRmOmxpIHJkZjpwYXJzZVR5cGU9IlJlc291cmNlIj4KICAgICAgICAgICAgICAgICAgPHN0RXZ0OmFjdGlvbj5zYXZlZDwvc3RFdnQ6YWN0aW9uPgogICAgICAgICAgICAgICAgICA8c3RFdnQ6aW5zdGFuY2VJRD54bXAuaWlkOjc3NDkzYmUxLTEyZGItOTg0NC1iNDYyLTg2NGVmNGIzMzM3MTwvc3RFdnQ6aW5zdGFuY2VJRD4KICAgICAgICAgICAgICAgICAgPHN0RXZ0OndoZW4%2BMjAxNC0wMi0wNFQxNDo0MTowNCswMTowMDwvc3RFdnQ6d2hlbj4KICAgICAgICAgICAgICAgICAgPHN0RXZ0OnNvZnR3YXJlQWdlbnQ%2BQWRvYmUgUGhvdG9zaG9wIENDIChXaW5kb3dzKTwvc3RFdnQ6c29mdHdhcmVBZ2VudD4KICAgICAgICAgICAgICAgICAgPHN0RXZ0OmNoYW5nZWQ%2BLzwvc3RFdnQ6Y2hhbmdlZD4KICAgICAgICAgICAgICAgPC9yZGY6bGk%2BCiAgICAgICAgICAgIDwvcmRmOlNlcT4KICAgICAgICAgPC94bXBNTTpIaXN0b3J5PgogICAgICAgICA8eG1wTU06RGVyaXZlZEZyb20gcmRmOnBhcnNlVHlwZT0iUmVzb3VyY2UiPgogICAgICAgICAgICA8c3RSZWY6aW5zdGFuY2VJRD54bXAuaWlkOjA2YTc1ZjAzLTgwN2EtZTM0Zi1iOTVmLWNkZTYyMzQzODg4Zjwvc3RSZWY6aW5zdGFuY2VJRD4KICAgICAgICAgICAgPHN0UmVmOmRvY3VtZW50SUQ%2BeG1wLmRpZDpFQTc2MkY5Njc0ODNFMzExOTQ4QkQxM0UyQkU3OTlBMTwvc3RSZWY6ZG9jdW1lbnRJRD4KICAgICAgICAgICAgPHN0UmVmOm9yaWdpbmFsRG9jdW1lbnRJRD54bXAuZGlkOjczQjYyQUFEOTE4M0UzMTE5NDhCRDEzRTJCRTc5OUExPC9zdFJlZjpvcmlnaW5hbERvY3VtZW50SUQ%2BCiAgICAgICAgIDwveG1wTU06RGVyaXZlZEZyb20%2BCiAgICAgICAgIDxwaG90b3Nob3A6Q29sb3JNb2RlPjM8L3Bob3Rvc2hvcDpDb2xvck1vZGU%2BCiAgICAgICAgIDxwaG90b3Nob3A6SUNDUHJvZmlsZT5zUkdCIElFQzYxOTY2LTIuMTwvcGhvdG9zaG9wOklDQ1Byb2ZpbGU%2BCiAgICAgICAgIDx0aWZmOk9yaWVudGF0aW9uPjE8L3RpZmY6T3JpZW50YXRpb24%2BCiAgICAgICAgIDx0aWZmOlhSZXNvbHV0aW9uPjcyMDA5MC8xMDAwMDwvdGlmZjpYUmVzb2x1dGlvbj4KICAgICAgICAgPHRpZmY6WVJlc29sdXRpb24%2BNzIwMDkwLzEwMDAwPC90aWZmOllSZXNvbHV0aW9uPgogICAgICAgICA8dGlmZjpSZXNvbHV0aW9uVW5pdD4yPC90aWZmOlJlc29sdXRpb25Vbml0PgogICAgICAgICA8ZXhpZjpDb2xvclNwYWNlPjE8L2V4aWY6Q29sb3JTcGFjZT4KICAgICAgICAgPGV4aWY6UGl4ZWxYRGltZW5zaW9uPjI0PC9leGlmOlBpeGVsWERpbWVuc2lvbj4KICAgICAgICAgPGV4aWY6UGl4ZWxZRGltZW5zaW9uPjI0PC9leGlmOlBpeGVsWURpbWVuc2lvbj4KICAgICAgPC9yZGY6RGVzY3JpcHRpb24%2BCiAgIDwvcmRmOlJERj4KPC94OnhtcG1ldGE%2BCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgCjw%2FeHBhY2tldCBlbmQ9InciPz4aYJzYAAAAIGNIUk0AAHolAACAgwAA%2Bf8AAIDpAAB1MAAA6mAAADqYAAAXb5JfxUYAAAYGSURBVHjalJZ7UJTnFcZ%2F73m%2F72PdJY1RbhoQp6lkXRAvmIYxdCUadLVOozPNtGObap1JsKipjiShbdoRbeKEiQHpQK3xj0xa03aamTbaTGyAYV1QGeqFi%2BJyiZFLAlmESBkWRmS3fyzslGkmnZ5%2Fv%2FM873Oe75zzvqqoqAibzQaAiKCUAkApRdHIK%2FNFsx2NR91nOSILADDoJyzNaM4xxbtvPHh0iC%2BJiYkJ1OHDh4mJiUEpFSXPv%2FziPC28TIiXDCOSrAClQDSEpsCwJPIhrEBRQpiSytXlQwDhcBilFPfu3UMVFxdjt9ujFTzfcLBADCoEEAFr1ZbrrNjch2vtEImPBgHob7fTcWE%2BbVXJNJ%2FNiFQlEGLvieXHKmYqGB8fRx05cgSbzYaIsPvywV8pKFaA7fGtLTzz61YWpo%2FxVTHQbufsq5lcez9zWuWhk5mvFwMEg0H0%2BvXrMU2Tn1wp3CtCiQ5DjGd3A%2Fm%2Fv8IDCZP8r4iNmyRrWx%2Fj%2F5qktykZpXKzAjVDVxPzGqemptDr1q1jX3NRnIJarcDKK2hgR2ULXRfncv7UYv7xpovhnhiW5Mz%2BkefeSKO6LJ1A1xzEuk%2FOjm4mRibpuZaMZW3OCtRUND60NmiICCIUShisx7a2sLMiQn4s77uEQgIabnqdfHIlgT1%2FqQeg8vs5dHhdCNB1wYn3RIiC995j26stjAbsNH%2BYiZJCESnS1Y%2FXxIXu8r4YIPv%2FVkVs3CTnTy2ms34xro1%2Bsp9po6sxlTu34ultmsPVvy6is86FCHgO%2BDDs49zpjufBpCG%2BseYOC9OHaTidieicb9ouVAhKtouAseI710ma7pLuqwmgYfHqAFt%2B6WdLoQ%2FLBl11Lm7VudAa8vb72PCin9TlAWIsGGhLACD%2BkSAZnusYBii1XQAPYWDllt6ov2lrBkDBR2%2B6Ofuak2%2F%2F3M%2BG%2FT4wAAPW7fPhKfRTVeqk9qQbFKRmDUTxS3N7QYGYmwzCkqklBGlPDEcTNv%2Bsg9tNCbTXuvBWujE0bHrZj9JE1B%2FwU1Pm5PwJN6YBS9a2kVvQEcWnrh5GTFD3lxkYkqRMgYQlwVldUvDnen73LHTUuqitdKM0eAr9AFQfd1J%2Fyo2aJn%2B2sn4Wdn5qEFODJskgBIjx5T0uCrQA08pnIjS9PERDjPnfOKXAMEBECUoGEIHBj%2B2zkt76UQ6dXheGAev3%2Bcg74Kf6uJPqcicbfuond7cPy4SOiy7%2BtD9nFvZurx00KOk3CNEC%2BmE%2BvjSPBc7IWqgqTaPT60IMcO%2FxsXGa3HfKjRgRdbl7%2FKDg0jtubje6aHj7c7J3dgLQ2zoPwwQ91SooOQdAW1VKVMHty0kA5Bb48BycJn%2FLjWFGbLv4thvvb53kFvjJ%2BXEdWkPfjQVR%2FCcNKYgGMc8JWt5Fa2j%2BMIPPuyI2pa4IoHSkt6vLIuRaQ9q32khzt4GCxtNu6k46GeiIR2lIfDQQsafPzq1LGRGL9Gk9d%2BvrwewvfHPQOoexQVjxdB%2Fauk%2FzmaUMdsfz6bVUtIalT7bxveP1ZHh6GPDPYeSzeD69kcpIfxymFWLNrka%2BljhBTWkWwz2JiJT84YHnz2iPx0P20PkmRF5i6HYiwZFJsn%2FYzdezbzE3cQibY5xV266z6RfXohakb%2BxB9CjanCD9qTbW7Grk4WV38VZm0l6dhQiEw9taHSuDqrS0FIfDwXM3X9mHMsvRAk%2FsauDpQy38P%2BGtzOTGB9mEpkD0C2dS8n8zOjqK9ng8WJZFU%2BJTjasGvaCNXPpvJBPoMlm0OoDNMfWVxONfWNSUPUZ7TUQ56tCZlPwSgMnJSVRpaSmxsbFE1raw82ZxAZZRQUiBYUKGp5UlOX2krBzmoUVjiIKhHge9rfPo%2BWcy3ZeXIYASgL1%2FX5RfMXMvj46OosrLy7HZbGitUUohIuzoem0RofALaOsghgWGjky0MiJTL8b0lOvI8hN1DKXKP0jd3TNTWDgcJhgMoo4ePYrD4Yi%2BKmaeLlprnrtXFo9h%2FAAlG1AqE8yFmBrC%2BjO0bgH9EVpO%2F1F2Dc5g%2F%2FOAsbEx%2Fj0Af%2BUSsQynL1UAAAAASUVORK5CYII%3D%29%7Ddiv%2Evis%2Dnetwork%20div%2Evis%2Dedit%2Dmode%20div%2Evis%2Dlabel%2Cdiv%2Evis%2Dnetwork%20div%2Evis%2Dmanipulation%20div%2Evis%2Dlabel%7Bmargin%3A0%200%200%2023px%3Bline%2Dheight%3A25px%7Ddiv%2Evis%2Dnetwork%20div%2Evis%2Dmanipulation%20div%2Evis%2Dseparator%2Dline%7Bfloat%3Aleft%3Bdisplay%3Ainline%2Dblock%3Bwidth%3A1px%3Bheight%3A21px%3Bbackground%2Dcolor%3A%23bdbdbd%3Bmargin%3A0%207px%200%2015px%7Ddiv%2Evis%2Dnetwork%2Dtooltip%7Bposition%3Aabsolute%3Bvisibility%3Ahidden%3Bpadding%3A5px%3Bwhite%2Dspace%3Anowrap%3Bfont%2Dfamily%3Averdana%3Bfont%2Dsize%3A14px%3Bfont%2Dcolor%3A%23000%3Bbackground%2Dcolor%3A%23f5f4ed%3B%2Dmoz%2Dborder%2Dradius%3A3px%3B%2Dwebkit%2Dborder%2Dradius%3A3px%3Bborder%2Dradius%3A3px%3Bborder%3A1px%20solid%20%23808074%3Bbox%2Dshadow%3A3px%203px%2010px%20rgba%280%2C0%2C0%2C%2E2%29%3Bpointer%2Devents%3Anone%7Ddiv%2Evis%2Dnetwork%20div%2Evis%2Dnavigation%20div%2Evis%2Dbutton%7Bwidth%3A34px%3Bheight%3A34px%3B%2Dmoz%2Dborder%2Dradius%3A17px%3Bborder%2Dradius%3A17px%3Bposition%3Aabsolute%3Bdisplay%3Ainline%2Dblock%3Bbackground%2Dposition%3A2px%202px%3Bbackground%2Drepeat%3Ano%2Drepeat%3Bcursor%3Apointer%3B%2Dwebkit%2Dtouch%2Dcallout%3Anone%3B%2Dwebkit%2Duser%2Dselect%3Anone%3B%2Dkhtml%2Duser%2Dselect%3Anone%3B%2Dmoz%2Duser%2Dselect%3Anone%3B%2Dms%2Duser%2Dselect%3Anone%3Buser%2Dselect%3Anone%7Ddiv%2Evis%2Dnetwork%20div%2Evis%2Dnavigation%20div%2Evis%2Dbutton%3Ahover%7Bbox%2Dshadow%3A0%200%203px%203px%20rgba%2856%2C207%2C21%2C%2E3%29%7Ddiv%2Evis%2Dnetwork%20div%2Evis%2Dnavigation%20div%2Evis%2Dbutton%3Aactive%7Bbox%2Dshadow%3A0%200%201px%203px%20rgba%2856%2C207%2C21%2C%2E95%29%7Ddiv%2Evis%2Dnetwork%20div%2Evis%2Dnavigation%20div%2Evis%2Dbutton%2Evis%2Dup%7Bbackground%2Dimage%3Aurl%28data%3Aimage%2Fpng%3Bbase64%2CiVBORw0KGgoAAAANSUhEUgAAAB4AAAAeCAYAAAA7MK6iAAAACXBIWXMAAAsTAAALEwEAmpwYAAAKT2lDQ1BQaG90b3Nob3AgSUNDIHByb2ZpbGUAAHjanVNnVFPpFj333vRCS4iAlEtvUhUIIFJCi4AUkSYqIQkQSoghodkVUcERRUUEG8igiAOOjoCMFVEsDIoK2AfkIaKOg6OIisr74Xuja9a89%2BbN%2FrXXPues852zzwfACAyWSDNRNYAMqUIeEeCDx8TG4eQuQIEKJHAAEAizZCFz%2FSMBAPh%2BPDwrIsAHvgABeNMLCADATZvAMByH%2Fw%2FqQplcAYCEAcB0kThLCIAUAEB6jkKmAEBGAYCdmCZTAKAEAGDLY2LjAFAtAGAnf%2BbTAICd%2BJl7AQBblCEVAaCRACATZYhEAGg7AKzPVopFAFgwABRmS8Q5ANgtADBJV2ZIALC3AMDOEAuyAAgMADBRiIUpAAR7AGDIIyN4AISZABRG8lc88SuuEOcqAAB4mbI8uSQ5RYFbCC1xB1dXLh4ozkkXKxQ2YQJhmkAuwnmZGTKBNA%2Fg88wAAKCRFRHgg%2FP9eM4Ors7ONo62Dl8t6r8G%2FyJiYuP%2B5c%2BrcEAAAOF0ftH%2BLC%2BzGoA7BoBt%2FqIl7gRoXgugdfeLZrIPQLUAoOnaV%2FNw%2BH48PEWhkLnZ2eXk5NhKxEJbYcpXff5nwl%2FAV%2F1s%2BX48%2FPf14L7iJIEyXYFHBPjgwsz0TKUcz5IJhGLc5o9H%2FLcL%2F%2Fwd0yLESWK5WCoU41EScY5EmozzMqUiiUKSKcUl0v9k4t8s%2BwM%2B3zUAsGo%2BAXuRLahdYwP2SycQWHTA4vcAAPK7b8HUKAgDgGiD4c93%2F%2B8%2F%2FUegJQCAZkmScQAAXkQkLlTKsz%2FHCAAARKCBKrBBG%2FTBGCzABhzBBdzBC%2FxgNoRCJMTCQhBCCmSAHHJgKayCQiiGzbAdKmAv1EAdNMBRaIaTcA4uwlW4Dj1wD%2FphCJ7BKLyBCQRByAgTYSHaiAFiilgjjggXmYX4IcFIBBKLJCDJiBRRIkuRNUgxUopUIFVIHfI9cgI5h1xGupE7yAAygvyGvEcxlIGyUT3UDLVDuag3GoRGogvQZHQxmo8WoJvQcrQaPYw2oefQq2gP2o8%2BQ8cwwOgYBzPEbDAuxsNCsTgsCZNjy7EirAyrxhqwVqwDu4n1Y8%2BxdwQSgUXACTYEd0IgYR5BSFhMWE7YSKggHCQ0EdoJNwkDhFHCJyKTqEu0JroR%2BcQYYjIxh1hILCPWEo8TLxB7iEPENyQSiUMyJ7mQAkmxpFTSEtJG0m5SI%2BksqZs0SBojk8naZGuyBzmULCAryIXkneTD5DPkG%2BQh8lsKnWJAcaT4U%2BIoUspqShnlEOU05QZlmDJBVaOaUt2ooVQRNY9aQq2htlKvUYeoEzR1mjnNgxZJS6WtopXTGmgXaPdpr%2Bh0uhHdlR5Ol9BX0svpR%2BiX6AP0dwwNhhWDx4hnKBmbGAcYZxl3GK%2BYTKYZ04sZx1QwNzHrmOeZD5lvVVgqtip8FZHKCpVKlSaVGyovVKmqpqreqgtV81XLVI%2BpXlN9rkZVM1PjqQnUlqtVqp1Q61MbU2epO6iHqmeob1Q%2FpH5Z%2FYkGWcNMw09DpFGgsV%2FjvMYgC2MZs3gsIWsNq4Z1gTXEJrHN2Xx2KruY%2FR27iz2qqaE5QzNKM1ezUvOUZj8H45hx%2BJx0TgnnKKeX836K3hTvKeIpG6Y0TLkxZVxrqpaXllirSKtRq0frvTau7aedpr1Fu1n7gQ5Bx0onXCdHZ4%2FOBZ3nU9lT3acKpxZNPTr1ri6qa6UbobtEd79up%2B6Ynr5egJ5Mb6feeb3n%2Bhx9L%2F1U%2FW36p%2FVHDFgGswwkBtsMzhg8xTVxbzwdL8fb8VFDXcNAQ6VhlWGX4YSRudE8o9VGjUYPjGnGXOMk423GbcajJgYmISZLTepN7ppSTbmmKaY7TDtMx83MzaLN1pk1mz0x1zLnm%2Beb15vft2BaeFostqi2uGVJsuRaplnutrxuhVo5WaVYVVpds0atna0l1rutu6cRp7lOk06rntZnw7Dxtsm2qbcZsOXYBtuutm22fWFnYhdnt8Wuw%2B6TvZN9un2N%2FT0HDYfZDqsdWh1%2Bc7RyFDpWOt6azpzuP33F9JbpL2dYzxDP2DPjthPLKcRpnVOb00dnF2e5c4PziIuJS4LLLpc%2BLpsbxt3IveRKdPVxXeF60vWdm7Obwu2o26%2FuNu5p7ofcn8w0nymeWTNz0MPIQ%2BBR5dE%2FC5%2BVMGvfrH5PQ0%2BBZ7XnIy9jL5FXrdewt6V3qvdh7xc%2B9j5yn%2BM%2B4zw33jLeWV%2FMN8C3yLfLT8Nvnl%2BF30N%2FI%2F9k%2F3r%2F0QCngCUBZwOJgUGBWwL7%2BHp8Ib%2BOPzrbZfay2e1BjKC5QRVBj4KtguXBrSFoyOyQrSH355jOkc5pDoVQfujW0Adh5mGLw34MJ4WHhVeGP45wiFga0TGXNXfR3ENz30T6RJZE3ptnMU85ry1KNSo%2Bqi5qPNo3ujS6P8YuZlnM1VidWElsSxw5LiquNm5svt%2F87fOH4p3iC%2BN7F5gvyF1weaHOwvSFpxapLhIsOpZATIhOOJTwQRAqqBaMJfITdyWOCnnCHcJnIi%2FRNtGI2ENcKh5O8kgqTXqS7JG8NXkkxTOlLOW5hCepkLxMDUzdmzqeFpp2IG0yPTq9MYOSkZBxQqohTZO2Z%2Bpn5mZ2y6xlhbL%2BxW6Lty8elQfJa7OQrAVZLQq2QqboVFoo1yoHsmdlV2a%2FzYnKOZarnivN7cyzytuQN5zvn%2F%2FtEsIS4ZK2pYZLVy0dWOa9rGo5sjxxedsK4xUFK4ZWBqw8uIq2Km3VT6vtV5eufr0mek1rgV7ByoLBtQFr6wtVCuWFfevc1%2B1dT1gvWd%2B1YfqGnRs%2BFYmKrhTbF5cVf9go3HjlG4dvyr%2BZ3JS0qavEuWTPZtJm6ebeLZ5bDpaql%2BaXDm4N2dq0Dd9WtO319kXbL5fNKNu7g7ZDuaO%2FPLi8ZafJzs07P1SkVPRU%2BlQ27tLdtWHX%2BG7R7ht7vPY07NXbW7z3%2FT7JvttVAVVN1WbVZftJ%2B7P3P66Jqun4lvttXa1ObXHtxwPSA%2F0HIw6217nU1R3SPVRSj9Yr60cOxx%2B%2B%2Fp3vdy0NNg1VjZzG4iNwRHnk6fcJ3%2FceDTradox7rOEH0x92HWcdL2pCmvKaRptTmvtbYlu6T8w%2B0dbq3nr8R9sfD5w0PFl5SvNUyWna6YLTk2fyz4ydlZ19fi753GDborZ752PO32oPb%2B%2B6EHTh0kX%2Fi%2Bc7vDvOXPK4dPKy2%2BUTV7hXmq86X23qdOo8%2FpPTT8e7nLuarrlca7nuer21e2b36RueN87d9L158Rb%2F1tWeOT3dvfN6b%2FfF9%2FXfFt1%2Bcif9zsu72Xcn7q28T7xf9EDtQdlD3YfVP1v%2B3Njv3H9qwHeg89HcR%2FcGhYPP%2FpH1jw9DBY%2BZj8uGDYbrnjg%2BOTniP3L96fynQ89kzyaeF%2F6i%2FsuuFxYvfvjV69fO0ZjRoZfyl5O%2FbXyl%2FerA6xmv28bCxh6%2ByXgzMV70VvvtwXfcdx3vo98PT%2BR8IH8o%2F2j5sfVT0Kf7kxmTk%2F8EA5jz%2FGMzLdsAAAAgY0hSTQAAeiUAAICDAAD5%2FwAAgOkAAHUwAADqYAAAOpgAABdvkl%2FFRgAABphJREFUeNqcV2twU9cR%2FnbPlVTHxpKRbNnBLyEbPyJisLEcPwgwUMKQtjNJAzNJZkgNNJOmJaZAaDKlxaXDTIBAcJtOOzSYKSkdiimhAdIMjyT4bYgBYxA2BgcUQPLrCiGDR4qt2x%2ByXTASFt1%2F957d7zt3z3d39xDCMQWUfgAz%2FRI%2FT4pSTAJpAGL8rECAXX7QFQGq9wOHOxYO1oCgjAdJj1wtB095Giv9TFuZAIWHAziATMPhTAwiHgUkYPXFJu92lMP%2F2MTpB1AKUCVEgNAcleUo1M%2B2F8TO6crSTncb1QleAOj2OTSX3Ge1p%2BVa42m5JrnzbnsCE8Ov%2BEHgpa0LPLvCJjZ%2FwhuIlN8wAcXG%2Be1LUn9hm238QU84p1Ld83nsXvuO7Lq%2BLzKYGAT6%2Fdn58m%2FHJTYf4O3EShkT8Irpzab1Uz9sGevT5%2BtWn%2Bj6NB4A5hp%2F5NSr43xjfd5rW5tT9e3OAhCBiCua5%2FWsDEls%2FhdvYklZSwDefmrT8eXmtzuDkb5YZ33p9ndylICAVjWxf39xw%2F5g5Luv%2F9H84ZWNcwNEypZT87rXjqyJB85UYDMJYN3U7UdLJ6%2F6JlgqV517teRqf9uTlug8e1zEk27HgD22o98WsTBh8fWxvjm6ApdONbGvse8LM5NUPOm1Cfabuz3nACAgxX0QEFTJAnjNvLJ%2BSepb14KRHnN%2BEv%2B1XJOhZs3Qu1mbG97J2NQgsXroa1dtxrGuf8cHi1mUtPTay0lv1DMJSCRVLtoX%2BFgGgDQNysBAcez89l9nbbsQSji7rlXkEhjPxb%2FQatHOcFu0M9zz419oFSRhj%2F3PuaHiyqasv1Con9NGxHAYUsoCxAqImbYSgCWmFbZQwdsur7N0eC4m6tT6%2FjUZ750Zeb82c%2BOZGLWh%2F2p%2FW%2BKfrmy0hIp%2FaVKpTSIJEqu2QgFx2iE8CwDp0RbH7Ljng%2F4yXr%2BXT3QdyhYsodS0slGr0g2OrEUK7eCrKW82SqzCVz3%2Fyfb6vRwM4xn9rN7JkRkOQRLmfJn2LBPxQjDBqp9lD7XbX7X8pKTP160zR2bdeiX5jYeU%2FnLSTztNkem3XL5eXbltRUkonBxdgZ2IIUmahUxERQSCVT%2BrK5hzQ89xQ6P8VaaK1f5VmRvqQ4G%2Blba%2Bnlnlb5brMhvlk7FBiaPzuwQEmEQhg5BOxMjWTncHc2501cQLkjDTsMCWpyuRQxFP0xXIJfp5FyVW4Zy7KajC06ItbiIGg6ZITBxDxIgbrr1jTSM0fibGIHz8O9sKK0GAibEua9spANh4aY2VmcEg%2BDEkiBgR%2FL2hYFgGtcErkQQAMVJgBxyy9hboZzv32v%2BKpr7qbEECTAIMAoaJa3qPTmNiiAAgJAjk6J5xhu6HDAIgQYGLmI29PocmMcI8MNYvT1ckfzD9H%2Fub5br4e4Me9WfOKqtyX6Ud2cwC449PRamifDm6Auc0rTXokci%2BXo1EAgBckiDuYGLjpTvntcGIA%2BSFcp6uUAaAI879VhWrRteYAqn%2Fedq758brXJ1327QMhgJcZjA3EBjNrgZjOG1PkAjyTGENMjZPq5ECQ0MDE9ERBqFZrk0OJ3i4x%2F7vyIjBxGERt3takgVJEAp9xq3f769WiPDNvSsJdT3HDOEASPelmoBRYT3Kzt5uMtwauJEgSOCpwrk1DIJCoNUMwj9v7MweP9XSQ8%2FhJPp496fZTAICvLqcyv2B7nRbrgCA03JN5h8ub7A8VqpB437xHvsOy3l3cyaB4L2uqxhti1WLMcSgZQCw7%2BbOooO3Pk4JBZIYYXISMV5sKH59UePM10GESRGpIf%2FbE92HU452HywSJIGIllctrhp6YAK5%2BfHds0lLtJFMXNwkV6fFqA29mROefqiMJj1h6um4a5vY%2F92dKGaBxIhU5zJTWW2cJmEgGOmeb3c8FxAfb9mdf2RzyGGv5MvU7QwuEySwKHFp%2Fc%2FM71zA%2F2F7b1RajnYdLAqMukMVu2YcfmDYE2MD7H%2B7%2FXlq6cRIJqm4zXM%2Bqd3TGjVBir43KSLlXjiELe5TsX%2B3%2FyW%2FST45PaAHbKmccWh12AP93JNZywj0kSABIobpiXRHjtZ6faout2tyZMadGLXBCxBcvl6NfaAz%2BtKdFmObpzWl2%2BtIIBACYy0t%2Fyj34M7HvsKUK%2BCGassvicX7alYDwwq%2BvykIEqPVa%2BQ9gdYk5%2BV%2BUE7lj3%2BFGbuBM%2FX5JUT8QwIVSSSZiTgmoFR2MfiqYFFPfjpkyrfWPopwxP47AP1pK1g9%2FdqeAAAAAElFTkSuQmCC%29%3Bbottom%3A50px%3Bleft%3A55px%7Ddiv%2Evis%2Dnetwork%20div%2Evis%2Dnavigation%20div%2Evis%2Dbutton%2Evis%2Ddown%7Bbackground%2Dimage%3Aurl%28data%3Aimage%2Fpng%3Bbase64%2CiVBORw0KGgoAAAANSUhEUgAAAB4AAAAeCAYAAAA7MK6iAAAACXBIWXMAAAsTAAALEwEAmpwYAAAKT2lDQ1BQaG90b3Nob3AgSUNDIHByb2ZpbGUAAHjanVNnVFPpFj333vRCS4iAlEtvUhUIIFJCi4AUkSYqIQkQSoghodkVUcERRUUEG8igiAOOjoCMFVEsDIoK2AfkIaKOg6OIisr74Xuja9a89%2BbN%2FrXXPues852zzwfACAyWSDNRNYAMqUIeEeCDx8TG4eQuQIEKJHAAEAizZCFz%2FSMBAPh%2BPDwrIsAHvgABeNMLCADATZvAMByH%2Fw%2FqQplcAYCEAcB0kThLCIAUAEB6jkKmAEBGAYCdmCZTAKAEAGDLY2LjAFAtAGAnf%2BbTAICd%2BJl7AQBblCEVAaCRACATZYhEAGg7AKzPVopFAFgwABRmS8Q5ANgtADBJV2ZIALC3AMDOEAuyAAgMADBRiIUpAAR7AGDIIyN4AISZABRG8lc88SuuEOcqAAB4mbI8uSQ5RYFbCC1xB1dXLh4ozkkXKxQ2YQJhmkAuwnmZGTKBNA%2Fg88wAAKCRFRHgg%2FP9eM4Ors7ONo62Dl8t6r8G%2FyJiYuP%2B5c%2BrcEAAAOF0ftH%2BLC%2BzGoA7BoBt%2FqIl7gRoXgugdfeLZrIPQLUAoOnaV%2FNw%2BH48PEWhkLnZ2eXk5NhKxEJbYcpXff5nwl%2FAV%2F1s%2BX48%2FPf14L7iJIEyXYFHBPjgwsz0TKUcz5IJhGLc5o9H%2FLcL%2F%2Fwd0yLESWK5WCoU41EScY5EmozzMqUiiUKSKcUl0v9k4t8s%2BwM%2B3zUAsGo%2BAXuRLahdYwP2SycQWHTA4vcAAPK7b8HUKAgDgGiD4c93%2F%2B8%2F%2FUegJQCAZkmScQAAXkQkLlTKsz%2FHCAAARKCBKrBBG%2FTBGCzABhzBBdzBC%2FxgNoRCJMTCQhBCCmSAHHJgKayCQiiGzbAdKmAv1EAdNMBRaIaTcA4uwlW4Dj1wD%2FphCJ7BKLyBCQRByAgTYSHaiAFiilgjjggXmYX4IcFIBBKLJCDJiBRRIkuRNUgxUopUIFVIHfI9cgI5h1xGupE7yAAygvyGvEcxlIGyUT3UDLVDuag3GoRGogvQZHQxmo8WoJvQcrQaPYw2oefQq2gP2o8%2BQ8cwwOgYBzPEbDAuxsNCsTgsCZNjy7EirAyrxhqwVqwDu4n1Y8%2BxdwQSgUXACTYEd0IgYR5BSFhMWE7YSKggHCQ0EdoJNwkDhFHCJyKTqEu0JroR%2BcQYYjIxh1hILCPWEo8TLxB7iEPENyQSiUMyJ7mQAkmxpFTSEtJG0m5SI%2BksqZs0SBojk8naZGuyBzmULCAryIXkneTD5DPkG%2BQh8lsKnWJAcaT4U%2BIoUspqShnlEOU05QZlmDJBVaOaUt2ooVQRNY9aQq2htlKvUYeoEzR1mjnNgxZJS6WtopXTGmgXaPdpr%2Bh0uhHdlR5Ol9BX0svpR%2BiX6AP0dwwNhhWDx4hnKBmbGAcYZxl3GK%2BYTKYZ04sZx1QwNzHrmOeZD5lvVVgqtip8FZHKCpVKlSaVGyovVKmqpqreqgtV81XLVI%2BpXlN9rkZVM1PjqQnUlqtVqp1Q61MbU2epO6iHqmeob1Q%2FpH5Z%2FYkGWcNMw09DpFGgsV%2FjvMYgC2MZs3gsIWsNq4Z1gTXEJrHN2Xx2KruY%2FR27iz2qqaE5QzNKM1ezUvOUZj8H45hx%2BJx0TgnnKKeX836K3hTvKeIpG6Y0TLkxZVxrqpaXllirSKtRq0frvTau7aedpr1Fu1n7gQ5Bx0onXCdHZ4%2FOBZ3nU9lT3acKpxZNPTr1ri6qa6UbobtEd79up%2B6Ynr5egJ5Mb6feeb3n%2Bhx9L%2F1U%2FW36p%2FVHDFgGswwkBtsMzhg8xTVxbzwdL8fb8VFDXcNAQ6VhlWGX4YSRudE8o9VGjUYPjGnGXOMk423GbcajJgYmISZLTepN7ppSTbmmKaY7TDtMx83MzaLN1pk1mz0x1zLnm%2Beb15vft2BaeFostqi2uGVJsuRaplnutrxuhVo5WaVYVVpds0atna0l1rutu6cRp7lOk06rntZnw7Dxtsm2qbcZsOXYBtuutm22fWFnYhdnt8Wuw%2B6TvZN9un2N%2FT0HDYfZDqsdWh1%2Bc7RyFDpWOt6azpzuP33F9JbpL2dYzxDP2DPjthPLKcRpnVOb00dnF2e5c4PziIuJS4LLLpc%2BLpsbxt3IveRKdPVxXeF60vWdm7Obwu2o26%2FuNu5p7ofcn8w0nymeWTNz0MPIQ%2BBR5dE%2FC5%2BVMGvfrH5PQ0%2BBZ7XnIy9jL5FXrdewt6V3qvdh7xc%2B9j5yn%2BM%2B4zw33jLeWV%2FMN8C3yLfLT8Nvnl%2BF30N%2FI%2F9k%2F3r%2F0QCngCUBZwOJgUGBWwL7%2BHp8Ib%2BOPzrbZfay2e1BjKC5QRVBj4KtguXBrSFoyOyQrSH355jOkc5pDoVQfujW0Adh5mGLw34MJ4WHhVeGP45wiFga0TGXNXfR3ENz30T6RJZE3ptnMU85ry1KNSo%2Bqi5qPNo3ujS6P8YuZlnM1VidWElsSxw5LiquNm5svt%2F87fOH4p3iC%2BN7F5gvyF1weaHOwvSFpxapLhIsOpZATIhOOJTwQRAqqBaMJfITdyWOCnnCHcJnIi%2FRNtGI2ENcKh5O8kgqTXqS7JG8NXkkxTOlLOW5hCepkLxMDUzdmzqeFpp2IG0yPTq9MYOSkZBxQqohTZO2Z%2Bpn5mZ2y6xlhbL%2BxW6Lty8elQfJa7OQrAVZLQq2QqboVFoo1yoHsmdlV2a%2FzYnKOZarnivN7cyzytuQN5zvn%2F%2FtEsIS4ZK2pYZLVy0dWOa9rGo5sjxxedsK4xUFK4ZWBqw8uIq2Km3VT6vtV5eufr0mek1rgV7ByoLBtQFr6wtVCuWFfevc1%2B1dT1gvWd%2B1YfqGnRs%2BFYmKrhTbF5cVf9go3HjlG4dvyr%2BZ3JS0qavEuWTPZtJm6ebeLZ5bDpaql%2BaXDm4N2dq0Dd9WtO319kXbL5fNKNu7g7ZDuaO%2FPLi8ZafJzs07P1SkVPRU%2BlQ27tLdtWHX%2BG7R7ht7vPY07NXbW7z3%2FT7JvttVAVVN1WbVZftJ%2B7P3P66Jqun4lvttXa1ObXHtxwPSA%2F0HIw6217nU1R3SPVRSj9Yr60cOxx%2B%2B%2Fp3vdy0NNg1VjZzG4iNwRHnk6fcJ3%2FceDTradox7rOEH0x92HWcdL2pCmvKaRptTmvtbYlu6T8w%2B0dbq3nr8R9sfD5w0PFl5SvNUyWna6YLTk2fyz4ydlZ19fi753GDborZ752PO32oPb%2B%2B6EHTh0kX%2Fi%2Bc7vDvOXPK4dPKy2%2BUTV7hXmq86X23qdOo8%2FpPTT8e7nLuarrlca7nuer21e2b36RueN87d9L158Rb%2F1tWeOT3dvfN6b%2FfF9%2FXfFt1%2Bcif9zsu72Xcn7q28T7xf9EDtQdlD3YfVP1v%2B3Njv3H9qwHeg89HcR%2FcGhYPP%2FpH1jw9DBY%2BZj8uGDYbrnjg%2BOTniP3L96fynQ89kzyaeF%2F6i%2FsuuFxYvfvjV69fO0ZjRoZfyl5O%2FbXyl%2FerA6xmv28bCxh6%2ByXgzMV70VvvtwXfcdx3vo98PT%2BR8IH8o%2F2j5sfVT0Kf7kxmTk%2F8EA5jz%2FGMzLdsAAAAgY0hSTQAAeiUAAICDAAD5%2FwAAgOkAAHUwAADqYAAAOpgAABdvkl%2FFRgAABpdJREFUeNqcV21QlNcVfp5zX9ikoAvLEsAIIgsoHwpqWAQUNKLNaNv8iZ1JMkNG6%2FQj%2FdDUyCSTtCHpmEkwVk3TToZRMjXj5MOG2KidjIkxQYSAQUAtX6IgIN8su8KCoOzbH4sk4q5g77%2F33uee555z7rnneYmZDB2MKcJKlyYbqOsZVIgGEOgSHQoy4AKbFFjqAo5dWn%2FrNAh9OpO852oeJHYxtrmEu4WALhMbxG2ZE9uFAlImDRLY%2Ft%2Fy0b3Ig%2Bu%2BiWOKsAlgIZSb0OIf15kWtKo1NXh1d5xxiSPEN2wUAHrGOg11jirjWVtJyFnb6YgrzoYwocClu0DI5guPDb43Y2LLp%2FIaqf9JCGSErGvIifxd7aqQn%2FTOJCvFvZ8Hf9haEH%2Bm%2F6sFQgHBv1Sts%2F15WmJLkeyl6FuFwFPzny1%2FZdE7Nfg%2Fxhv1uUmH2w6kggQp%2Byqze7d5JbZ8Im%2BKpucSwI6EN7%2FcYtlxZarBCts3ptfrtq9odjaGKihE%2BsV0vRC3u8RqWmmbij149W%2BWd5p2rnET6bsqsntyb6%2BpO3KqkE8FvLxo74lNUX9s9uTJb8%2F9fG2L81KoogJFYfCm3b9usNq0MXxzw1RsUkDqQICPqf%2Fb%2Fq8sQi3j4WdmtV47OFgNAO6r%2BDEUFAtFAc9YtpXmRP6hxVsI24cvhyoqnFtrK6jM7isgBa3Dl0O94TeGb255MvzXpUIFjVrhxo%2FdzgoARBuwFQJkBK9reCnurxfvXX8CRW3yW1G749vT2Br7ysW0oNX1pKDTPG%2Brm1gHRbibAHLm%2F7522sKnQCZqFgCUaBCqaS%2FbEw9vqtWoQROf3dBBiT6KTACImZ3YueqhDdOWjDbFQ4IzIl4elNUX5begU1HD6lPRmULKeghhDcpqnUmZuD3%2BnkgTH6gZEE9ctlZSoGmG9UIynSCsQVndMyX%2BIZGiBoHMjHh2SreCglClaSBiSEG8cYnD24bv7CWms%2F3FocO3hnw13plTggAFb196NdlPM44tC0zrSg5ItXmyEz070UEKCMRqQgkkBQ9NvL2eSJ%2BrevoJTORSpoT6do4%2F7%2F7UShBFHQexM%2BHdfyUHWO8iN%2FuaRzX3%2FQjUSLlnqM72F4cCRIY5u9Zf%2BY%2BBAv4AvzpkQ7WAIBRujA%2F7Vg6cia9xlId6InafVEAAGnQMUCSkb6zTMPdBy8hU3JjrphIq%2BCrD%2BMvxeyumrr%2B4IH9y7o2GF5eDghuuGx4L2zbWZ9Dc0RoQRbkkFNRdP2%2F0BH7EtLJLKCjr%2Bzqh2l5u8haZ847vTBW24kRFQXKAtcsT5oqz3igQENIoECkjBJUDZSGewBlBj%2FammjLrdX1c%2Ft70ero34gMte9IByLLAjPrUwKweT5jawQshdIuGMiF5XEBU2koivBl9NeEfJeYHwuxtI81zPrn2z6ip60c6DkV1jLTOCTaE2HNjd5Z4s9MwWBOhqEHp%2FI9cWDtUrJNoHm4KO9P7hdnTBoMYXI8Gb6gVCg63FS53jg9O5tA57tSOdHywnCAygrJrfcTgUe5U2cvNHSPtYYoKCWlrTgsIneB2AfFR%2B4F4b6f9ZdTzF6P8Ytud407%2Fdy%2FnL7k9X9i8J9l5y%2BEf6RfbnjPvWa8N5suez%2BKFCgqyPY95Lnd3stv2AcBZ2%2BmFbze%2Blui1xc3dXCUUlPafXNx4%2FaKxcajWWNp%2FMklRw8%2FmPFntbd%2Bh1oLE847KhQQxejVg36QQqD0MPTzHv42Ux%2BuGasJNBnPfwllJd71kkX7RQ3WDNf7dox3BLcNNs6vt34bbbvYHJhlTGp6O%2BJVHb0%2F2HJtX1PH%2BaqECqG%2F5YN1nlXcokGvvO6vCc4x%2BQskotxVHB%2Fqa%2BxbOWuzw8NB3nuo%2BHt0z2hHsuGU3GrWAoZfi3jrxgHpw3BPpobaCH7vbqOw6mHI836vYW3Eqcq9AtioqbJy7ufQ3lhfu8sR%2Bs9%2B3vL8klACsQSu7AnxMY1MxH7YXJp7oPpLulrrj%2B9575Ni2aeVt1teWfEWfHQLCaspseHzOU7VWU%2BaM5G2NoyL4i%2B6j8XWDNQsmGsKu%2Fcv%2BnTtjQb%2Fmm7hfENyvqEAK5v8opjPJaL26KGBpd5TfguuBvuZRgBgY6zO0jlyZXXe9JqR%2B8MK8ntHOMHfHIkhu2b%2F0yIH7%2FoXJ0yFlxYnPUdRbvuILgO7%2By%2B91l6Ka6M%2BcnCf4fMSypXvymHf%2FvzBTD3CuNGUFKT8lmK5Rs5ASqKiBlAGBXFaiSuni0fkp1pJ7Ed4e%2FxsAqLk46EWsG1EAAAAASUVORK5CYII%3D%29%3Bbottom%3A10px%3Bleft%3A55px%7Ddiv%2Evis%2Dnetwork%20div%2Evis%2Dnavigation%20div%2Evis%2Dbutton%2Evis%2Dleft%7Bbackground%2Dimage%3Aurl%28data%3Aimage%2Fpng%3Bbase64%2CiVBORw0KGgoAAAANSUhEUgAAAB4AAAAeCAYAAAA7MK6iAAAACXBIWXMAAAsTAAALEwEAmpwYAAAKT2lDQ1BQaG90b3Nob3AgSUNDIHByb2ZpbGUAAHjanVNnVFPpFj333vRCS4iAlEtvUhUIIFJCi4AUkSYqIQkQSoghodkVUcERRUUEG8igiAOOjoCMFVEsDIoK2AfkIaKOg6OIisr74Xuja9a89%2BbN%2FrXXPues852zzwfACAyWSDNRNYAMqUIeEeCDx8TG4eQuQIEKJHAAEAizZCFz%2FSMBAPh%2BPDwrIsAHvgABeNMLCADATZvAMByH%2Fw%2FqQplcAYCEAcB0kThLCIAUAEB6jkKmAEBGAYCdmCZTAKAEAGDLY2LjAFAtAGAnf%2BbTAICd%2BJl7AQBblCEVAaCRACATZYhEAGg7AKzPVopFAFgwABRmS8Q5ANgtADBJV2ZIALC3AMDOEAuyAAgMADBRiIUpAAR7AGDIIyN4AISZABRG8lc88SuuEOcqAAB4mbI8uSQ5RYFbCC1xB1dXLh4ozkkXKxQ2YQJhmkAuwnmZGTKBNA%2Fg88wAAKCRFRHgg%2FP9eM4Ors7ONo62Dl8t6r8G%2FyJiYuP%2B5c%2BrcEAAAOF0ftH%2BLC%2BzGoA7BoBt%2FqIl7gRoXgugdfeLZrIPQLUAoOnaV%2FNw%2BH48PEWhkLnZ2eXk5NhKxEJbYcpXff5nwl%2FAV%2F1s%2BX48%2FPf14L7iJIEyXYFHBPjgwsz0TKUcz5IJhGLc5o9H%2FLcL%2F%2Fwd0yLESWK5WCoU41EScY5EmozzMqUiiUKSKcUl0v9k4t8s%2BwM%2B3zUAsGo%2BAXuRLahdYwP2SycQWHTA4vcAAPK7b8HUKAgDgGiD4c93%2F%2B8%2F%2FUegJQCAZkmScQAAXkQkLlTKsz%2FHCAAARKCBKrBBG%2FTBGCzABhzBBdzBC%2FxgNoRCJMTCQhBCCmSAHHJgKayCQiiGzbAdKmAv1EAdNMBRaIaTcA4uwlW4Dj1wD%2FphCJ7BKLyBCQRByAgTYSHaiAFiilgjjggXmYX4IcFIBBKLJCDJiBRRIkuRNUgxUopUIFVIHfI9cgI5h1xGupE7yAAygvyGvEcxlIGyUT3UDLVDuag3GoRGogvQZHQxmo8WoJvQcrQaPYw2oefQq2gP2o8%2BQ8cwwOgYBzPEbDAuxsNCsTgsCZNjy7EirAyrxhqwVqwDu4n1Y8%2BxdwQSgUXACTYEd0IgYR5BSFhMWE7YSKggHCQ0EdoJNwkDhFHCJyKTqEu0JroR%2BcQYYjIxh1hILCPWEo8TLxB7iEPENyQSiUMyJ7mQAkmxpFTSEtJG0m5SI%2BksqZs0SBojk8naZGuyBzmULCAryIXkneTD5DPkG%2BQh8lsKnWJAcaT4U%2BIoUspqShnlEOU05QZlmDJBVaOaUt2ooVQRNY9aQq2htlKvUYeoEzR1mjnNgxZJS6WtopXTGmgXaPdpr%2Bh0uhHdlR5Ol9BX0svpR%2BiX6AP0dwwNhhWDx4hnKBmbGAcYZxl3GK%2BYTKYZ04sZx1QwNzHrmOeZD5lvVVgqtip8FZHKCpVKlSaVGyovVKmqpqreqgtV81XLVI%2BpXlN9rkZVM1PjqQnUlqtVqp1Q61MbU2epO6iHqmeob1Q%2FpH5Z%2FYkGWcNMw09DpFGgsV%2FjvMYgC2MZs3gsIWsNq4Z1gTXEJrHN2Xx2KruY%2FR27iz2qqaE5QzNKM1ezUvOUZj8H45hx%2BJx0TgnnKKeX836K3hTvKeIpG6Y0TLkxZVxrqpaXllirSKtRq0frvTau7aedpr1Fu1n7gQ5Bx0onXCdHZ4%2FOBZ3nU9lT3acKpxZNPTr1ri6qa6UbobtEd79up%2B6Ynr5egJ5Mb6feeb3n%2Bhx9L%2F1U%2FW36p%2FVHDFgGswwkBtsMzhg8xTVxbzwdL8fb8VFDXcNAQ6VhlWGX4YSRudE8o9VGjUYPjGnGXOMk423GbcajJgYmISZLTepN7ppSTbmmKaY7TDtMx83MzaLN1pk1mz0x1zLnm%2Beb15vft2BaeFostqi2uGVJsuRaplnutrxuhVo5WaVYVVpds0atna0l1rutu6cRp7lOk06rntZnw7Dxtsm2qbcZsOXYBtuutm22fWFnYhdnt8Wuw%2B6TvZN9un2N%2FT0HDYfZDqsdWh1%2Bc7RyFDpWOt6azpzuP33F9JbpL2dYzxDP2DPjthPLKcRpnVOb00dnF2e5c4PziIuJS4LLLpc%2BLpsbxt3IveRKdPVxXeF60vWdm7Obwu2o26%2FuNu5p7ofcn8w0nymeWTNz0MPIQ%2BBR5dE%2FC5%2BVMGvfrH5PQ0%2BBZ7XnIy9jL5FXrdewt6V3qvdh7xc%2B9j5yn%2BM%2B4zw33jLeWV%2FMN8C3yLfLT8Nvnl%2BF30N%2FI%2F9k%2F3r%2F0QCngCUBZwOJgUGBWwL7%2BHp8Ib%2BOPzrbZfay2e1BjKC5QRVBj4KtguXBrSFoyOyQrSH355jOkc5pDoVQfujW0Adh5mGLw34MJ4WHhVeGP45wiFga0TGXNXfR3ENz30T6RJZE3ptnMU85ry1KNSo%2Bqi5qPNo3ujS6P8YuZlnM1VidWElsSxw5LiquNm5svt%2F87fOH4p3iC%2BN7F5gvyF1weaHOwvSFpxapLhIsOpZATIhOOJTwQRAqqBaMJfITdyWOCnnCHcJnIi%2FRNtGI2ENcKh5O8kgqTXqS7JG8NXkkxTOlLOW5hCepkLxMDUzdmzqeFpp2IG0yPTq9MYOSkZBxQqohTZO2Z%2Bpn5mZ2y6xlhbL%2BxW6Lty8elQfJa7OQrAVZLQq2QqboVFoo1yoHsmdlV2a%2FzYnKOZarnivN7cyzytuQN5zvn%2F%2FtEsIS4ZK2pYZLVy0dWOa9rGo5sjxxedsK4xUFK4ZWBqw8uIq2Km3VT6vtV5eufr0mek1rgV7ByoLBtQFr6wtVCuWFfevc1%2B1dT1gvWd%2B1YfqGnRs%2BFYmKrhTbF5cVf9go3HjlG4dvyr%2BZ3JS0qavEuWTPZtJm6ebeLZ5bDpaql%2BaXDm4N2dq0Dd9WtO319kXbL5fNKNu7g7ZDuaO%2FPLi8ZafJzs07P1SkVPRU%2BlQ27tLdtWHX%2BG7R7ht7vPY07NXbW7z3%2FT7JvttVAVVN1WbVZftJ%2B7P3P66Jqun4lvttXa1ObXHtxwPSA%2F0HIw6217nU1R3SPVRSj9Yr60cOxx%2B%2B%2Fp3vdy0NNg1VjZzG4iNwRHnk6fcJ3%2FceDTradox7rOEH0x92HWcdL2pCmvKaRptTmvtbYlu6T8w%2B0dbq3nr8R9sfD5w0PFl5SvNUyWna6YLTk2fyz4ydlZ19fi753GDborZ752PO32oPb%2B%2B6EHTh0kX%2Fi%2Bc7vDvOXPK4dPKy2%2BUTV7hXmq86X23qdOo8%2FpPTT8e7nLuarrlca7nuer21e2b36RueN87d9L158Rb%2F1tWeOT3dvfN6b%2FfF9%2FXfFt1%2Bcif9zsu72Xcn7q28T7xf9EDtQdlD3YfVP1v%2B3Njv3H9qwHeg89HcR%2FcGhYPP%2FpH1jw9DBY%2BZj8uGDYbrnjg%2BOTniP3L96fynQ89kzyaeF%2F6i%2FsuuFxYvfvjV69fO0ZjRoZfyl5O%2FbXyl%2FerA6xmv28bCxh6%2ByXgzMV70VvvtwXfcdx3vo98PT%2BR8IH8o%2F2j5sfVT0Kf7kxmTk%2F8EA5jz%2FGMzLdsAAAAgY0hSTQAAeiUAAICDAAD5%2FwAAgOkAAHUwAADqYAAAOpgAABdvkl%2FFRgAABt5JREFUeNqsl2lUlOcVx%2F%2F3Pi9DZRsGBgYiS2RYBQKIjAhEJW4pNrXNMbZpWtTGNkttYmJMG5soSZckRk%2B0p%2BdYPYY0Gk0ihlhRj63GhVUgBhDD5oIOy8AAMwzD4lCYtx%2BGqCQKuNyP7%2FPc%2B3u2%2B7%2F3JUzEZFBYLh62S7yIZDmVBEIBqOwsQ4DNdtBFASq2A4cuZAwVgCCPF5LGHM0Chz%2BE1XamzUyAzCMO7IhMI%2B5MDCK%2BHpCANd%2BU2rYgC%2FY7BoflYgVA2RAOoNYtyjDTe45%2Bhk96e5QywaJR%2BNsAwDhocK61VCjLTYWaclNB0OW%2Ben8mhl22g8C%2Frn7U%2BuGEwdov%2BC0i%2BQ0mIFWzoD7zwVU1czQ%2F6pjIreR3HPX5VL9jalHXiQgmBoH%2BXLHAtH5csDaXtxDLLzIBv5jyfOmG2H9U4S7snbpX43KaPpgBIhDx1rPzOlbfPC5GQT%2Fnd1mS1zABa6PfPf5y5F%2FrcJeWpp7fPkly6f7KXBRCoOSATFfXll19x74HDsvFCghsJAG8HrvlvytCXm7EPVqc5wyzp5NX15muE1omKXXyMnd9yy5r5Q3wPghvJzrLAlimXV38%2B7D1DbhPFq1M6O4b6rPVWKsCBfHi5EWWv9TkQBYAEPpLvERMC9N8FtRvjt9dPl6wwo5jPvuas7WV5jNqEjz8wA%2BCBsaan%2Bw9x1hrrXJtuaZX97ooLfqPLCUEGRR%2BiOwAsF2X98Uc30W3fb02u41frVqeVmo6FUkkwCAwCWxJ2Ls%2F0TPFNBb8TNdp9WvnVz4OAKdmX2QOzcMsAAjziDGMBd3asCF6SXHyknJTfqQTK%2BzpvhnVKT5zawCgzFTgN94pJXvP7gxxjTAIkpB%2BMnSWRMQZYEDnPVt%2FK4ejbZ%2F77726Lb6h95tAAiPELaJ1bcTbRfGeM8xv1azWSeyEa0P9igk%2BNr1%2BoNFfkpwzJCJKIQA679ntN08yDXYo3qh%2BLuUrc0E4EcNL4dP7VNDzpU8FP3vpekoQQ5CEw4bPdEfa9%2BsAgEZUmkmAAAS5hLQ9p11XGO%2BpM8V5JLUfMeQARDMlEMKIGFOVCZYb0C7Fz0oeXmIZ6nZzYoV9od%2FjVS%2BGbahUOnn9b7T6sEOviUGyA8bMDlUa0W79wBW%2FbZf%2BlrY98cDBUI8YCxGDgHCJiVVEDN8R7QWAE8Z%2F%2B1mGut2i3eP1r0S%2BXRztkdBzq6NbF7WpbF3UprKxjvfHxbrfttla%2FQBArVDbJJIAQCURMRg8ugrKIAKBSNxzHtN3VdmxY0iQYSZmTeegwTlgknYAAB7RZBh2Nm7urbeeC1r19ROT52kWn3shfH2Fu1AO3RxjY%2F0fdac7%2FhPPJMDE11GC%2BHpBJmIEuAS3Oa6w01lybMbMgvgCE6O255zy24DeCr%2FBvckn9%2Bu8ZjXYIYvjxoMJy8oeXZrT9GHIqMWTwA2oI6cFMeDIcAiSEOyibXsmZG0hAFzuq1OyY6xBAnMJgdPOmks08zU%2FbbsB9x18P37PqS%2Fb8%2Bo%2Fa96ZcLm3PmBH46Z5x40HW1eFvl4Uq0w0MwiCBOb7%2FqTsd6GvVY537DXWas1Iw1AiNJnOgwJi%2BbXhAbE08OnvaXSIW0TvYw88eaF%2FuM%2FWNdju3m5r9TlhPBzVNNDoPGC%2F5tRma%2FGJ80xqjPPUjVuvP2narrMOWd1Jlv%2FE1fN782UiNPZf9C%2FqOKa%2BndOz2j%2Bcz046sn%2B6KrVOsODirpOxld0lUxmEBK%2FktvGgFd2l6taBZn9BAtEz5xYIvAn4%2F8rFKkgstAyZ6Yf%2BS67ezlkiSU73XXRV6xqh93TyssR4JF75efBvymLdE03jgT%2FWb5tutLWpGbTm7wHZxQQAT%2ByDuKLyHRIk4cnAZ4pfCF9%2FHvfR9uh3xBxtz00BANsVDylnac6wAICaHMiBmW5NRLy4trcq0MtZ3RnpHme5H9AvjYeCc1t3pzMJgOSVnyw4eHZUB9Kyu68iMFPpysSppab8UJVC3Rnp%2FpDlXqF7mnYsdKQbv7cr6fDGW%2FZczbt6jgUtV6kIlFxuyg%2FtH%2B6zJXmlGe8G%2BmlzdsyB1j3pTAwZ9q3%2FSspbc9tmDwD0H3UffXCFlyuTlFpnPRdYb612c5c8%2BidPCu6fCLDKUubzsf6fSaWm0wmO9hbvZU8fDR2zoZ97OuppAu0UJEDEmOISZohT6q7Gek5rD3GN6FEp1DaAYB7sdNYPXPao7anS1Fmrg402g7%2BjYhGIaOXOaQc%2BuONfmCwZXJIf8xKx2KRgxYgOS%2BCROuyoyQKCxIhkOr4T6JWgxGnvZ1HWnf%2FCfHcBXxcnpRHxYwRKkUjSErFKkAQiNjP4kmBRTHbKm5KkKxwL%2BK39fwDX1XGF8ct%2B%2BQAAAABJRU5ErkJggg%3D%3D%29%3Bbottom%3A10px%3Bleft%3A15px%7Ddiv%2Evis%2Dnetwork%20div%2Evis%2Dnavigation%20div%2Evis%2Dbutton%2Evis%2Dright%7Bbackground%2Dimage%3Aurl%28data%3Aimage%2Fpng%3Bbase64%2CiVBORw0KGgoAAAANSUhEUgAAAB4AAAAeCAYAAAA7MK6iAAAACXBIWXMAAAsTAAALEwEAmpwYAAAKT2lDQ1BQaG90b3Nob3AgSUNDIHByb2ZpbGUAAHjanVNnVFPpFj333vRCS4iAlEtvUhUIIFJCi4AUkSYqIQkQSoghodkVUcERRUUEG8igiAOOjoCMFVEsDIoK2AfkIaKOg6OIisr74Xuja9a89%2BbN%2FrXXPues852zzwfACAyWSDNRNYAMqUIeEeCDx8TG4eQuQIEKJHAAEAizZCFz%2FSMBAPh%2BPDwrIsAHvgABeNMLCADATZvAMByH%2Fw%2FqQplcAYCEAcB0kThLCIAUAEB6jkKmAEBGAYCdmCZTAKAEAGDLY2LjAFAtAGAnf%2BbTAICd%2BJl7AQBblCEVAaCRACATZYhEAGg7AKzPVopFAFgwABRmS8Q5ANgtADBJV2ZIALC3AMDOEAuyAAgMADBRiIUpAAR7AGDIIyN4AISZABRG8lc88SuuEOcqAAB4mbI8uSQ5RYFbCC1xB1dXLh4ozkkXKxQ2YQJhmkAuwnmZGTKBNA%2Fg88wAAKCRFRHgg%2FP9eM4Ors7ONo62Dl8t6r8G%2FyJiYuP%2B5c%2BrcEAAAOF0ftH%2BLC%2BzGoA7BoBt%2FqIl7gRoXgugdfeLZrIPQLUAoOnaV%2FNw%2BH48PEWhkLnZ2eXk5NhKxEJbYcpXff5nwl%2FAV%2F1s%2BX48%2FPf14L7iJIEyXYFHBPjgwsz0TKUcz5IJhGLc5o9H%2FLcL%2F%2Fwd0yLESWK5WCoU41EScY5EmozzMqUiiUKSKcUl0v9k4t8s%2BwM%2B3zUAsGo%2BAXuRLahdYwP2SycQWHTA4vcAAPK7b8HUKAgDgGiD4c93%2F%2B8%2F%2FUegJQCAZkmScQAAXkQkLlTKsz%2FHCAAARKCBKrBBG%2FTBGCzABhzBBdzBC%2FxgNoRCJMTCQhBCCmSAHHJgKayCQiiGzbAdKmAv1EAdNMBRaIaTcA4uwlW4Dj1wD%2FphCJ7BKLyBCQRByAgTYSHaiAFiilgjjggXmYX4IcFIBBKLJCDJiBRRIkuRNUgxUopUIFVIHfI9cgI5h1xGupE7yAAygvyGvEcxlIGyUT3UDLVDuag3GoRGogvQZHQxmo8WoJvQcrQaPYw2oefQq2gP2o8%2BQ8cwwOgYBzPEbDAuxsNCsTgsCZNjy7EirAyrxhqwVqwDu4n1Y8%2BxdwQSgUXACTYEd0IgYR5BSFhMWE7YSKggHCQ0EdoJNwkDhFHCJyKTqEu0JroR%2BcQYYjIxh1hILCPWEo8TLxB7iEPENyQSiUMyJ7mQAkmxpFTSEtJG0m5SI%2BksqZs0SBojk8naZGuyBzmULCAryIXkneTD5DPkG%2BQh8lsKnWJAcaT4U%2BIoUspqShnlEOU05QZlmDJBVaOaUt2ooVQRNY9aQq2htlKvUYeoEzR1mjnNgxZJS6WtopXTGmgXaPdpr%2Bh0uhHdlR5Ol9BX0svpR%2BiX6AP0dwwNhhWDx4hnKBmbGAcYZxl3GK%2BYTKYZ04sZx1QwNzHrmOeZD5lvVVgqtip8FZHKCpVKlSaVGyovVKmqpqreqgtV81XLVI%2BpXlN9rkZVM1PjqQnUlqtVqp1Q61MbU2epO6iHqmeob1Q%2FpH5Z%2FYkGWcNMw09DpFGgsV%2FjvMYgC2MZs3gsIWsNq4Z1gTXEJrHN2Xx2KruY%2FR27iz2qqaE5QzNKM1ezUvOUZj8H45hx%2BJx0TgnnKKeX836K3hTvKeIpG6Y0TLkxZVxrqpaXllirSKtRq0frvTau7aedpr1Fu1n7gQ5Bx0onXCdHZ4%2FOBZ3nU9lT3acKpxZNPTr1ri6qa6UbobtEd79up%2B6Ynr5egJ5Mb6feeb3n%2Bhx9L%2F1U%2FW36p%2FVHDFgGswwkBtsMzhg8xTVxbzwdL8fb8VFDXcNAQ6VhlWGX4YSRudE8o9VGjUYPjGnGXOMk423GbcajJgYmISZLTepN7ppSTbmmKaY7TDtMx83MzaLN1pk1mz0x1zLnm%2Beb15vft2BaeFostqi2uGVJsuRaplnutrxuhVo5WaVYVVpds0atna0l1rutu6cRp7lOk06rntZnw7Dxtsm2qbcZsOXYBtuutm22fWFnYhdnt8Wuw%2B6TvZN9un2N%2FT0HDYfZDqsdWh1%2Bc7RyFDpWOt6azpzuP33F9JbpL2dYzxDP2DPjthPLKcRpnVOb00dnF2e5c4PziIuJS4LLLpc%2BLpsbxt3IveRKdPVxXeF60vWdm7Obwu2o26%2FuNu5p7ofcn8w0nymeWTNz0MPIQ%2BBR5dE%2FC5%2BVMGvfrH5PQ0%2BBZ7XnIy9jL5FXrdewt6V3qvdh7xc%2B9j5yn%2BM%2B4zw33jLeWV%2FMN8C3yLfLT8Nvnl%2BF30N%2FI%2F9k%2F3r%2F0QCngCUBZwOJgUGBWwL7%2BHp8Ib%2BOPzrbZfay2e1BjKC5QRVBj4KtguXBrSFoyOyQrSH355jOkc5pDoVQfujW0Adh5mGLw34MJ4WHhVeGP45wiFga0TGXNXfR3ENz30T6RJZE3ptnMU85ry1KNSo%2Bqi5qPNo3ujS6P8YuZlnM1VidWElsSxw5LiquNm5svt%2F87fOH4p3iC%2BN7F5gvyF1weaHOwvSFpxapLhIsOpZATIhOOJTwQRAqqBaMJfITdyWOCnnCHcJnIi%2FRNtGI2ENcKh5O8kgqTXqS7JG8NXkkxTOlLOW5hCepkLxMDUzdmzqeFpp2IG0yPTq9MYOSkZBxQqohTZO2Z%2Bpn5mZ2y6xlhbL%2BxW6Lty8elQfJa7OQrAVZLQq2QqboVFoo1yoHsmdlV2a%2FzYnKOZarnivN7cyzytuQN5zvn%2F%2FtEsIS4ZK2pYZLVy0dWOa9rGo5sjxxedsK4xUFK4ZWBqw8uIq2Km3VT6vtV5eufr0mek1rgV7ByoLBtQFr6wtVCuWFfevc1%2B1dT1gvWd%2B1YfqGnRs%2BFYmKrhTbF5cVf9go3HjlG4dvyr%2BZ3JS0qavEuWTPZtJm6ebeLZ5bDpaql%2BaXDm4N2dq0Dd9WtO319kXbL5fNKNu7g7ZDuaO%2FPLi8ZafJzs07P1SkVPRU%2BlQ27tLdtWHX%2BG7R7ht7vPY07NXbW7z3%2FT7JvttVAVVN1WbVZftJ%2B7P3P66Jqun4lvttXa1ObXHtxwPSA%2F0HIw6217nU1R3SPVRSj9Yr60cOxx%2B%2B%2Fp3vdy0NNg1VjZzG4iNwRHnk6fcJ3%2FceDTradox7rOEH0x92HWcdL2pCmvKaRptTmvtbYlu6T8w%2B0dbq3nr8R9sfD5w0PFl5SvNUyWna6YLTk2fyz4ydlZ19fi753GDborZ752PO32oPb%2B%2B6EHTh0kX%2Fi%2Bc7vDvOXPK4dPKy2%2BUTV7hXmq86X23qdOo8%2FpPTT8e7nLuarrlca7nuer21e2b36RueN87d9L158Rb%2F1tWeOT3dvfN6b%2FfF9%2FXfFt1%2Bcif9zsu72Xcn7q28T7xf9EDtQdlD3YfVP1v%2B3Njv3H9qwHeg89HcR%2FcGhYPP%2FpH1jw9DBY%2BZj8uGDYbrnjg%2BOTniP3L96fynQ89kzyaeF%2F6i%2FsuuFxYvfvjV69fO0ZjRoZfyl5O%2FbXyl%2FerA6xmv28bCxh6%2ByXgzMV70VvvtwXfcdx3vo98PT%2BR8IH8o%2F2j5sfVT0Kf7kxmTk%2F8EA5jz%2FGMzLdsAAAAgY0hSTQAAeiUAAICDAAD5%2FwAAgOkAAHUwAADqYAAAOpgAABdvkl%2FFRgAABs1JREFUeNqsl3tQlOcVxp9z3m%2BXygK7C4sLxkW5o4CAkYssFSkRjabjJEOSJm1IbZx2krapiZdeprW0NVVJ0pqMM0kYJQlqkoZImGioE1ItiCAgIsFwE4Es99vCslwChf36xy5EW1A0Pn9%2B73fO772e93kJC5EMCszFd20SbyFZNpJAAACtjWUI8KAN1CRAJTbg9LXNU%2BdBkG%2BXkm7Zmg4OWoUdNqZXmQCZHQFsz0yOcCYGEc8mJGDnl2UTh5AO2x2DA3OxDaAsCDvQ32VF11qP9aZYz6SeFeooi17pPQEAvZNdTnWWKnWFuVhfYT7v0zza4M3EsMk2EPgnNZusby8Y7P8x%2F5lI%2FgMTYNSnNKQt%2F0Xtev1DfQtZlaK%2BM54fmDJXXhg4G8zEINBfqlLMe28L9s%2FlQ8Tyr5iAJ32fK%2Ftj%2BOFq3IUO1O%2BJyGk7GgsiEPFrlQ%2F07bixXdwEPckHWZJ3MgG7Qw9%2B%2FmLIS%2FW4SyXoNvQskpyHLg1e8CNQ3NI0laoje7Tg%2F8CBudgGgQwSwO%2FDD322ze%2FFFnxLRWhiBzUK94GLA2f9mSTjfU%2B7mjqyrVe%2BAX8I4aGgShbA0%2F47Sn4ZuLcR90ih6qih0anRiVprtUEQb43bYtlXmwNZAEDAj%2FACMW1M8ExpeDXyWMVCEl4yF7vntR%2FzLeov8JJlWfZR%2BY3N92%2Bcx%2FreOmu1quNrk27EWW0xvWspJcigoNNkA4C3Yk59vH7xltvu3ktDxe7PX34ilQCQfeci1j2xfn94ZrGCneY8uxcHCnW%2Fvbr9EQD4d2ITc8AprAOAQLewroVAAaB8oMiLiRHvmVy7znNTjWCFrXKoJOSHFQ%2BkvnF9f%2Bjco07s91MFdwmSkHQuYB0T8WYwIcYj0bTQdRufGlFKJMFVaCb%2FGvZW6aGI4yeXOwd2mr%2Fu05zsyDY%2BW5X64Nm%2BfO85NpuJiCFJTpslIoonADEeiT2zIzIXuh%2Bo25PQNtbsNVMOBUn2g08MiSTHN3uZjNTEDr4dnX%2F6H%2B1H%2FXPasmKvW%2BsMGfW%2FMXzende4K3h%2FibvSYxIAItyie%2FK7cgCitQxCIBFjpTrKMgM%2BWPfrhLbxFi9iMQtlYjAJSCSBSYBAIPBNI3p86TPXj8bk56R4PVylFE626uFLQc9efiTVPDmgBIAAtzALEYNBQRITa4kYix21FwBax655CVagPLk7806Pj1qo%2F7MraF%2FFQ14%2FaMhszYhvGqn3KTef89rklWrSKXUTkn3mtJK9Bzf3XJA0e%2FPcrdgxIwSCDPmbZMQgABJkDBKzvn%2Byy2npIv9xAPB1Ceo2jTZ7Gc8afipIgEhAkACDwcSQQZBIIGnx5it7gg%2BU3wgcnbZKR1r%2BFnW%2Bv2DVtDwtXCXNSKz797oAwDzZ7ySRAIBBFsTXmBh1w1%2BoZ4J3h%2Bwv9lUFdbMDOrO%2B5IAqWIGZthuV13nC77nKRx8r7PssyibLIkoT1%2Fh65HsfzWyu5tF6NYNB4EYJzKUETqgcLNVv0D%2FcDQBrNAnm9%2BLOfTLfNB5u2hf5z%2B6TMexYji%2BtVdrM5leMbWOtSwQx%2FF1C2rcuebIqwSO568a4WmuN3mEYSiUi%2BpRl2l1pLvYBsKArUKVwnZRYgdHpMWVG4%2B%2FWXhwoDBXE7OmkHzJ6JNemLfv51bniGqzVPoIkyLbpfK7ZMFIkE6FlrMn7Ql%2BBbiHg%2BzXGbgLjylDpyosD58KZmKM0cfWHI9%2F%2FaD5o1VCZrnO83VuQQOja5PMCfwK8n3K2ChIbLVOD9KB36le3A%2Bu%2Fs2Q81C2yRavQmQNdVnamLnmq4nHD9jpB0rwm77jpjTW9E906Bu18fWlWCQHAox9CtGoXTwmS8IThZyXPB%2B29inuoE6bMsDM9ufEAMNHqJuU8ljMtAKA2B7IhzaWNiLfWjVQb3J10%2FSGuEZZ7Af1X7%2BlluZ3HkpgEQPL291M%2BqbzJgXQcG60ypKlVTGwsMxcFaJW6%2FhDXVZZvCz3RlrmRiQHwy9nRn2bM6bnas4cLfH6s1RIorsJcFDA2PToR7Z7QezfQD9qzwvI6TyTZC47ttXeiT%2B2c1%2BwBgOndoTPLt7mrmCRjvfULQ4O1xsVVchu7b9GysYUAqy3lnsdNb0aXmQuj7PYWL2etuRl6S0OfXLjiGQIdEY6K5esc2BWhjvkqXLO6x08VPKxV6iYAwuBkv5NpvNmtbrhaX2%2BtWdY70eVNINhtLW0%2Fsjrv6B0%2FYdJlcGlR2AvE4hUlKwHQ7BU5cz8LRx0HaPY7gXb53L%2F67%2BmUfudPmP%2FtwOWS6AQi%2Fj6B4iWS%2FIlYK%2ByGYJDB1wWLErLRKd%2FomOJbAWf03wEAyO9m%2B%2FTtS3AAAAAASUVORK5CYII%3D%29%3Bbottom%3A10px%3Bleft%3A95px%7Ddiv%2Evis%2Dnetwork%20div%2Evis%2Dnavigation%20div%2Evis%2Dbutton%2Evis%2DzoomIn%7Bbackground%2Dimage%3Aurl%28data%3Aimage%2Fpng%3Bbase64%2CiVBORw0KGgoAAAANSUhEUgAAAB4AAAAeCAYAAAA7MK6iAAAACXBIWXMAAAsTAAALEwEAmpwYAAAKT2lDQ1BQaG90b3Nob3AgSUNDIHByb2ZpbGUAAHjanVNnVFPpFj333vRCS4iAlEtvUhUIIFJCi4AUkSYqIQkQSoghodkVUcERRUUEG8igiAOOjoCMFVEsDIoK2AfkIaKOg6OIisr74Xuja9a89%2BbN%2FrXXPues852zzwfACAyWSDNRNYAMqUIeEeCDx8TG4eQuQIEKJHAAEAizZCFz%2FSMBAPh%2BPDwrIsAHvgABeNMLCADATZvAMByH%2Fw%2FqQplcAYCEAcB0kThLCIAUAEB6jkKmAEBGAYCdmCZTAKAEAGDLY2LjAFAtAGAnf%2BbTAICd%2BJl7AQBblCEVAaCRACATZYhEAGg7AKzPVopFAFgwABRmS8Q5ANgtADBJV2ZIALC3AMDOEAuyAAgMADBRiIUpAAR7AGDIIyN4AISZABRG8lc88SuuEOcqAAB4mbI8uSQ5RYFbCC1xB1dXLh4ozkkXKxQ2YQJhmkAuwnmZGTKBNA%2Fg88wAAKCRFRHgg%2FP9eM4Ors7ONo62Dl8t6r8G%2FyJiYuP%2B5c%2BrcEAAAOF0ftH%2BLC%2BzGoA7BoBt%2FqIl7gRoXgugdfeLZrIPQLUAoOnaV%2FNw%2BH48PEWhkLnZ2eXk5NhKxEJbYcpXff5nwl%2FAV%2F1s%2BX48%2FPf14L7iJIEyXYFHBPjgwsz0TKUcz5IJhGLc5o9H%2FLcL%2F%2Fwd0yLESWK5WCoU41EScY5EmozzMqUiiUKSKcUl0v9k4t8s%2BwM%2B3zUAsGo%2BAXuRLahdYwP2SycQWHTA4vcAAPK7b8HUKAgDgGiD4c93%2F%2B8%2F%2FUegJQCAZkmScQAAXkQkLlTKsz%2FHCAAARKCBKrBBG%2FTBGCzABhzBBdzBC%2FxgNoRCJMTCQhBCCmSAHHJgKayCQiiGzbAdKmAv1EAdNMBRaIaTcA4uwlW4Dj1wD%2FphCJ7BKLyBCQRByAgTYSHaiAFiilgjjggXmYX4IcFIBBKLJCDJiBRRIkuRNUgxUopUIFVIHfI9cgI5h1xGupE7yAAygvyGvEcxlIGyUT3UDLVDuag3GoRGogvQZHQxmo8WoJvQcrQaPYw2oefQq2gP2o8%2BQ8cwwOgYBzPEbDAuxsNCsTgsCZNjy7EirAyrxhqwVqwDu4n1Y8%2BxdwQSgUXACTYEd0IgYR5BSFhMWE7YSKggHCQ0EdoJNwkDhFHCJyKTqEu0JroR%2BcQYYjIxh1hILCPWEo8TLxB7iEPENyQSiUMyJ7mQAkmxpFTSEtJG0m5SI%2BksqZs0SBojk8naZGuyBzmULCAryIXkneTD5DPkG%2BQh8lsKnWJAcaT4U%2BIoUspqShnlEOU05QZlmDJBVaOaUt2ooVQRNY9aQq2htlKvUYeoEzR1mjnNgxZJS6WtopXTGmgXaPdpr%2Bh0uhHdlR5Ol9BX0svpR%2BiX6AP0dwwNhhWDx4hnKBmbGAcYZxl3GK%2BYTKYZ04sZx1QwNzHrmOeZD5lvVVgqtip8FZHKCpVKlSaVGyovVKmqpqreqgtV81XLVI%2BpXlN9rkZVM1PjqQnUlqtVqp1Q61MbU2epO6iHqmeob1Q%2FpH5Z%2FYkGWcNMw09DpFGgsV%2FjvMYgC2MZs3gsIWsNq4Z1gTXEJrHN2Xx2KruY%2FR27iz2qqaE5QzNKM1ezUvOUZj8H45hx%2BJx0TgnnKKeX836K3hTvKeIpG6Y0TLkxZVxrqpaXllirSKtRq0frvTau7aedpr1Fu1n7gQ5Bx0onXCdHZ4%2FOBZ3nU9lT3acKpxZNPTr1ri6qa6UbobtEd79up%2B6Ynr5egJ5Mb6feeb3n%2Bhx9L%2F1U%2FW36p%2FVHDFgGswwkBtsMzhg8xTVxbzwdL8fb8VFDXcNAQ6VhlWGX4YSRudE8o9VGjUYPjGnGXOMk423GbcajJgYmISZLTepN7ppSTbmmKaY7TDtMx83MzaLN1pk1mz0x1zLnm%2Beb15vft2BaeFostqi2uGVJsuRaplnutrxuhVo5WaVYVVpds0atna0l1rutu6cRp7lOk06rntZnw7Dxtsm2qbcZsOXYBtuutm22fWFnYhdnt8Wuw%2B6TvZN9un2N%2FT0HDYfZDqsdWh1%2Bc7RyFDpWOt6azpzuP33F9JbpL2dYzxDP2DPjthPLKcRpnVOb00dnF2e5c4PziIuJS4LLLpc%2BLpsbxt3IveRKdPVxXeF60vWdm7Obwu2o26%2FuNu5p7ofcn8w0nymeWTNz0MPIQ%2BBR5dE%2FC5%2BVMGvfrH5PQ0%2BBZ7XnIy9jL5FXrdewt6V3qvdh7xc%2B9j5yn%2BM%2B4zw33jLeWV%2FMN8C3yLfLT8Nvnl%2BF30N%2FI%2F9k%2F3r%2F0QCngCUBZwOJgUGBWwL7%2BHp8Ib%2BOPzrbZfay2e1BjKC5QRVBj4KtguXBrSFoyOyQrSH355jOkc5pDoVQfujW0Adh5mGLw34MJ4WHhVeGP45wiFga0TGXNXfR3ENz30T6RJZE3ptnMU85ry1KNSo%2Bqi5qPNo3ujS6P8YuZlnM1VidWElsSxw5LiquNm5svt%2F87fOH4p3iC%2BN7F5gvyF1weaHOwvSFpxapLhIsOpZATIhOOJTwQRAqqBaMJfITdyWOCnnCHcJnIi%2FRNtGI2ENcKh5O8kgqTXqS7JG8NXkkxTOlLOW5hCepkLxMDUzdmzqeFpp2IG0yPTq9MYOSkZBxQqohTZO2Z%2Bpn5mZ2y6xlhbL%2BxW6Lty8elQfJa7OQrAVZLQq2QqboVFoo1yoHsmdlV2a%2FzYnKOZarnivN7cyzytuQN5zvn%2F%2FtEsIS4ZK2pYZLVy0dWOa9rGo5sjxxedsK4xUFK4ZWBqw8uIq2Km3VT6vtV5eufr0mek1rgV7ByoLBtQFr6wtVCuWFfevc1%2B1dT1gvWd%2B1YfqGnRs%2BFYmKrhTbF5cVf9go3HjlG4dvyr%2BZ3JS0qavEuWTPZtJm6ebeLZ5bDpaql%2BaXDm4N2dq0Dd9WtO319kXbL5fNKNu7g7ZDuaO%2FPLi8ZafJzs07P1SkVPRU%2BlQ27tLdtWHX%2BG7R7ht7vPY07NXbW7z3%2FT7JvttVAVVN1WbVZftJ%2B7P3P66Jqun4lvttXa1ObXHtxwPSA%2F0HIw6217nU1R3SPVRSj9Yr60cOxx%2B%2B%2Fp3vdy0NNg1VjZzG4iNwRHnk6fcJ3%2FceDTradox7rOEH0x92HWcdL2pCmvKaRptTmvtbYlu6T8w%2B0dbq3nr8R9sfD5w0PFl5SvNUyWna6YLTk2fyz4ydlZ19fi753GDborZ752PO32oPb%2B%2B6EHTh0kX%2Fi%2Bc7vDvOXPK4dPKy2%2BUTV7hXmq86X23qdOo8%2FpPTT8e7nLuarrlca7nuer21e2b36RueN87d9L158Rb%2F1tWeOT3dvfN6b%2FfF9%2FXfFt1%2Bcif9zsu72Xcn7q28T7xf9EDtQdlD3YfVP1v%2B3Njv3H9qwHeg89HcR%2FcGhYPP%2FpH1jw9DBY%2BZj8uGDYbrnjg%2BOTniP3L96fynQ89kzyaeF%2F6i%2FsuuFxYvfvjV69fO0ZjRoZfyl5O%2FbXyl%2FerA6xmv28bCxh6%2ByXgzMV70VvvtwXfcdx3vo98PT%2BR8IH8o%2F2j5sfVT0Kf7kxmTk%2F8EA5jz%2FGMzLdsAAAAgY0hSTQAAeiUAAICDAAD5%2FwAAgOkAAHUwAADqYAAAOpgAABdvkl%2FFRgAABiBJREFUeNqkV2tQlOcVfp7zvgvDRe66y8htXUBR1GoFI%2BBtFJvRtjPJBGeaH2a8DGmbttgSTWbSJEw6TWOsrbbpTIeJZGqaTipTa6LJZDTVUTYQdNAohoso6qLucnERN0Axcb%2F8%2BHaJUHDX9Pz6vnnPe57vXJ5zzkeEIwaYcwBL%2FVrW0TCKqZANINEvBhSk3w9eUmC9HzjcsfarOhBGKJN84GkVJHcetvqFu4SAIYELYlpm4LpQQMqoQQKVnzeO7EYV%2FA8NnHMAGwHWQJmAjtg895LkFa7FU1d258UvGLBGpI4AQM9dd2TrwNn4016n9bS3LqNzsD1VKPAbfhCyqflR31thAzv%2BLa%2BQxotCoNi6pn1D1s9aVli%2F3xtOVk72fjT1XVf17E9uHZspFBD8zdk13pdCAjsOyG6KUSEEnrT%2FtPHluW%2Bcw7eQ19q2z6%2Ft2rsYJEjZ07S6d%2BukwI5%2FyQ7RxnYC2DZnx8dbHNs6xxs85T2R9GprZcmVwYs2BYWsmBzP83m7nIVJS73jdfdd%2B7PjjUu%2FXWUCGTtPre7ZHjxTY3Kq8DoV8Ou5u49snPGrKxN58syZ9aVXBztsigoUBd%2BXt2NbfZ8llaVvah%2BvOz9hcX%2BCJenWp7eOOYS6ePpTU1w39vk%2BAwCzFPdDQbFGFPCUY2v9hqxfXJ0shNeHLtsUFc6UequbVvdVkwLX0GXbZPpl6Zuu%2Fij9x%2FVCBU1dU7bfdFYAIDsSFRCgeOqa9hfy%2FnDhwfwTKOrRd0U95n0iqch9%2BcKS5JVtpMCdkllhAhugCHcRwAb7z1tCEp8CCXAWAJRoCFXIYnti%2BsYWTQ0tll0wQMk%2BhGUAkBOX714xbV1IyuhxHhIMC%2FiR5OV9M2JmuhU1Vh7PXiakrIUQhcnLXeHQxPT4GyAtFqgwgAPF5iIFWkeu1SSLCKAweXn3%2FZR5rXV7SddQpy3YDoNems9qTI5hGCitm1MOAAx0aaFCerTd84zjBed3Egq9ADA%2FrqD7Q3ctQC4REDmkYHb8goGgsR2tz5V0DV%2BxUdQoqAQ81RybU4IgFWgACgpaLLCIBUo0bv63y%2FaXy6%2BWBHWz4%2FIHSIGAuVooiaRgWqD3AsDVoQ6bEgtOrfJUhwrf0WUtk%2Br8sL6wvHvk5ijVUiJSRrQZuURtfoGMuaCoRyfP%2FyMy0XykgAA0DPRTxNp31x2ZFuUYBgB7bK7HNdhpKz6WXq6oQCooKghMKhkgji77vBoA1jkXlAvVfRQjFMUcmxSkRWd6gpjeu32R2kxTvyhKh1DQeud8fFBh26zfOe0xuR4JgAbzywCoRSzfeDUKatJKUQK%2BCjKiHZ6nZ2xzBnU7B9vixTy7qCHSQEhJU3%2BDtdT6mAcAFiWUeP%2FxyPH3Jwrfo3XzysemRcEA8F5RY8h6aPE1WwMLQ4OQ%2FEBANHmdGWHlzZyxk3ayB0m771yGooYy%2BKE0l35x0iBxZehS6ie9R1PCMaDvCzWDXA4hZ283ptwcvp6qqDBnyao6AWEQrBQQ%2F7y%2Bd3YoA%2BNBTAaElo973p8tVFCQyipW%2Bc3pdNu7BwBOe%2Btm%2FeniK%2FkPFWowpMfvuKrzzw80zSKIkWsJe0bHYu163BNwMwDsv7G36ODNtzMnM5IWZfeQgscbisvLPl1aDhLTo7I8k%2Bn%2Fp%2Bdw5pGeg0WKGiS31K6vvTdmA7nx9uDZ9A3xMUIpbvSezE6MSOmbNWXewHhD6dH23o7BlqQvvrwTK6KQFpXl2WyvcE6LTB2eCPSdrurvmcUnO%2FcVfPD6pMteyfGs3QKpUFQoS9tU%2FxPH8xe%2BTdd693pN%2FpHug0Xmqntvz1uLDo9Z9v5nnrn%2BdvujrI1JMUJd3OY7n97ua46douOGpkdlDoUDeG7g1NS%2Fu%2F5a0Og9scCsB%2BysWXSoMuyFftWJvM0E31SBjmWPznHPjy%2B8NjdhYfeMmJl3EiNSRgCi%2F25fpGu4M671zjlrm685s2fEnUoQ5lrLLW8uPLj3oX9hqgxIw8n8X1LU7yMkItCHzREZrGQV6ONmy5TggHk247sL%2F1jFqof%2FhRn%2FAWfqC0pI%2BQHBIk3tICXRrFTpF8hlJaqefh6yFxQ6HwQYlK8HAKyt3WsWxl7fAAAAAElFTkSuQmCC%29%3Bbottom%3A10px%3Bright%3A15px%7Ddiv%2Evis%2Dnetwork%20div%2Evis%2Dnavigation%20div%2Evis%2Dbutton%2Evis%2DzoomOut%7Bbackground%2Dimage%3Aurl%28data%3Aimage%2Fpng%3Bbase64%2CiVBORw0KGgoAAAANSUhEUgAAAB4AAAAeCAYAAAA7MK6iAAAACXBIWXMAAAsTAAALEwEAmpwYAAAKT2lDQ1BQaG90b3Nob3AgSUNDIHByb2ZpbGUAAHjanVNnVFPpFj333vRCS4iAlEtvUhUIIFJCi4AUkSYqIQkQSoghodkVUcERRUUEG8igiAOOjoCMFVEsDIoK2AfkIaKOg6OIisr74Xuja9a89%2BbN%2FrXXPues852zzwfACAyWSDNRNYAMqUIeEeCDx8TG4eQuQIEKJHAAEAizZCFz%2FSMBAPh%2BPDwrIsAHvgABeNMLCADATZvAMByH%2Fw%2FqQplcAYCEAcB0kThLCIAUAEB6jkKmAEBGAYCdmCZTAKAEAGDLY2LjAFAtAGAnf%2BbTAICd%2BJl7AQBblCEVAaCRACATZYhEAGg7AKzPVopFAFgwABRmS8Q5ANgtADBJV2ZIALC3AMDOEAuyAAgMADBRiIUpAAR7AGDIIyN4AISZABRG8lc88SuuEOcqAAB4mbI8uSQ5RYFbCC1xB1dXLh4ozkkXKxQ2YQJhmkAuwnmZGTKBNA%2Fg88wAAKCRFRHgg%2FP9eM4Ors7ONo62Dl8t6r8G%2FyJiYuP%2B5c%2BrcEAAAOF0ftH%2BLC%2BzGoA7BoBt%2FqIl7gRoXgugdfeLZrIPQLUAoOnaV%2FNw%2BH48PEWhkLnZ2eXk5NhKxEJbYcpXff5nwl%2FAV%2F1s%2BX48%2FPf14L7iJIEyXYFHBPjgwsz0TKUcz5IJhGLc5o9H%2FLcL%2F%2Fwd0yLESWK5WCoU41EScY5EmozzMqUiiUKSKcUl0v9k4t8s%2BwM%2B3zUAsGo%2BAXuRLahdYwP2SycQWHTA4vcAAPK7b8HUKAgDgGiD4c93%2F%2B8%2F%2FUegJQCAZkmScQAAXkQkLlTKsz%2FHCAAARKCBKrBBG%2FTBGCzABhzBBdzBC%2FxgNoRCJMTCQhBCCmSAHHJgKayCQiiGzbAdKmAv1EAdNMBRaIaTcA4uwlW4Dj1wD%2FphCJ7BKLyBCQRByAgTYSHaiAFiilgjjggXmYX4IcFIBBKLJCDJiBRRIkuRNUgxUopUIFVIHfI9cgI5h1xGupE7yAAygvyGvEcxlIGyUT3UDLVDuag3GoRGogvQZHQxmo8WoJvQcrQaPYw2oefQq2gP2o8%2BQ8cwwOgYBzPEbDAuxsNCsTgsCZNjy7EirAyrxhqwVqwDu4n1Y8%2BxdwQSgUXACTYEd0IgYR5BSFhMWE7YSKggHCQ0EdoJNwkDhFHCJyKTqEu0JroR%2BcQYYjIxh1hILCPWEo8TLxB7iEPENyQSiUMyJ7mQAkmxpFTSEtJG0m5SI%2BksqZs0SBojk8naZGuyBzmULCAryIXkneTD5DPkG%2BQh8lsKnWJAcaT4U%2BIoUspqShnlEOU05QZlmDJBVaOaUt2ooVQRNY9aQq2htlKvUYeoEzR1mjnNgxZJS6WtopXTGmgXaPdpr%2Bh0uhHdlR5Ol9BX0svpR%2BiX6AP0dwwNhhWDx4hnKBmbGAcYZxl3GK%2BYTKYZ04sZx1QwNzHrmOeZD5lvVVgqtip8FZHKCpVKlSaVGyovVKmqpqreqgtV81XLVI%2BpXlN9rkZVM1PjqQnUlqtVqp1Q61MbU2epO6iHqmeob1Q%2FpH5Z%2FYkGWcNMw09DpFGgsV%2FjvMYgC2MZs3gsIWsNq4Z1gTXEJrHN2Xx2KruY%2FR27iz2qqaE5QzNKM1ezUvOUZj8H45hx%2BJx0TgnnKKeX836K3hTvKeIpG6Y0TLkxZVxrqpaXllirSKtRq0frvTau7aedpr1Fu1n7gQ5Bx0onXCdHZ4%2FOBZ3nU9lT3acKpxZNPTr1ri6qa6UbobtEd79up%2B6Ynr5egJ5Mb6feeb3n%2Bhx9L%2F1U%2FW36p%2FVHDFgGswwkBtsMzhg8xTVxbzwdL8fb8VFDXcNAQ6VhlWGX4YSRudE8o9VGjUYPjGnGXOMk423GbcajJgYmISZLTepN7ppSTbmmKaY7TDtMx83MzaLN1pk1mz0x1zLnm%2Beb15vft2BaeFostqi2uGVJsuRaplnutrxuhVo5WaVYVVpds0atna0l1rutu6cRp7lOk06rntZnw7Dxtsm2qbcZsOXYBtuutm22fWFnYhdnt8Wuw%2B6TvZN9un2N%2FT0HDYfZDqsdWh1%2Bc7RyFDpWOt6azpzuP33F9JbpL2dYzxDP2DPjthPLKcRpnVOb00dnF2e5c4PziIuJS4LLLpc%2BLpsbxt3IveRKdPVxXeF60vWdm7Obwu2o26%2FuNu5p7ofcn8w0nymeWTNz0MPIQ%2BBR5dE%2FC5%2BVMGvfrH5PQ0%2BBZ7XnIy9jL5FXrdewt6V3qvdh7xc%2B9j5yn%2BM%2B4zw33jLeWV%2FMN8C3yLfLT8Nvnl%2BF30N%2FI%2F9k%2F3r%2F0QCngCUBZwOJgUGBWwL7%2BHp8Ib%2BOPzrbZfay2e1BjKC5QRVBj4KtguXBrSFoyOyQrSH355jOkc5pDoVQfujW0Adh5mGLw34MJ4WHhVeGP45wiFga0TGXNXfR3ENz30T6RJZE3ptnMU85ry1KNSo%2Bqi5qPNo3ujS6P8YuZlnM1VidWElsSxw5LiquNm5svt%2F87fOH4p3iC%2BN7F5gvyF1weaHOwvSFpxapLhIsOpZATIhOOJTwQRAqqBaMJfITdyWOCnnCHcJnIi%2FRNtGI2ENcKh5O8kgqTXqS7JG8NXkkxTOlLOW5hCepkLxMDUzdmzqeFpp2IG0yPTq9MYOSkZBxQqohTZO2Z%2Bpn5mZ2y6xlhbL%2BxW6Lty8elQfJa7OQrAVZLQq2QqboVFoo1yoHsmdlV2a%2FzYnKOZarnivN7cyzytuQN5zvn%2F%2FtEsIS4ZK2pYZLVy0dWOa9rGo5sjxxedsK4xUFK4ZWBqw8uIq2Km3VT6vtV5eufr0mek1rgV7ByoLBtQFr6wtVCuWFfevc1%2B1dT1gvWd%2B1YfqGnRs%2BFYmKrhTbF5cVf9go3HjlG4dvyr%2BZ3JS0qavEuWTPZtJm6ebeLZ5bDpaql%2BaXDm4N2dq0Dd9WtO319kXbL5fNKNu7g7ZDuaO%2FPLi8ZafJzs07P1SkVPRU%2BlQ27tLdtWHX%2BG7R7ht7vPY07NXbW7z3%2FT7JvttVAVVN1WbVZftJ%2B7P3P66Jqun4lvttXa1ObXHtxwPSA%2F0HIw6217nU1R3SPVRSj9Yr60cOxx%2B%2B%2Fp3vdy0NNg1VjZzG4iNwRHnk6fcJ3%2FceDTradox7rOEH0x92HWcdL2pCmvKaRptTmvtbYlu6T8w%2B0dbq3nr8R9sfD5w0PFl5SvNUyWna6YLTk2fyz4ydlZ19fi753GDborZ752PO32oPb%2B%2B6EHTh0kX%2Fi%2Bc7vDvOXPK4dPKy2%2BUTV7hXmq86X23qdOo8%2FpPTT8e7nLuarrlca7nuer21e2b36RueN87d9L158Rb%2F1tWeOT3dvfN6b%2FfF9%2FXfFt1%2Bcif9zsu72Xcn7q28T7xf9EDtQdlD3YfVP1v%2B3Njv3H9qwHeg89HcR%2FcGhYPP%2FpH1jw9DBY%2BZj8uGDYbrnjg%2BOTniP3L96fynQ89kzyaeF%2F6i%2FsuuFxYvfvjV69fO0ZjRoZfyl5O%2FbXyl%2FerA6xmv28bCxh6%2ByXgzMV70VvvtwXfcdx3vo98PT%2BR8IH8o%2F2j5sfVT0Kf7kxmTk%2F8EA5jz%2FGMzLdsAAAAgY0hSTQAAeiUAAICDAAD5%2FwAAgOkAAHUwAADqYAAAOpgAABdvkl%2FFRgAABV5JREFUeNq0l2tQVVUYht%2F3W%2FvACMr16IFRQDiAgChpgiikMqY1WjnN9KsfGOXYTOVgkvbDUsZuXrK0qZmGUSvNspjI8TZOmo6AGBoZYly8YB6Qw80DBwQ6jJ3dj30OZZmiwvtv77XW96y91l7v9y1iMNLBuCI84tZkIXU9gwqxAILdokNBOtzgJQWWuYEDFxfcLAGh3y0k79iaD4mfjOVu4WYhoItngBiR6RkuFJAyEJBA3m%2Flri3Ih%2FuewXFFyAG4A8oAWkcm2meEzrFNH53Vkhg4xWnxCXcBQGu%2F3bfGeTbwjKPUcsZRElnfUxcuFLh1Nwh5vurx7s8GDbZ%2BL%2BtI%2FU0hkGGZX5c9%2FpXqOZYn2gazK8Vth0fvsRUknbx%2BbIJQQPCts%2FMda%2B4KthbJFoqeKwSejX6pfO2kjytxH1pfuyqlsGH7dJAgZWvFo23L%2F9muboF%2BJxtE0%2FOEwMqJG46uSHinFvepTPO8lhGaX%2BfPHSdjCKaPy%2Fb3v7az58h%2FwHFFyIHCRirgjUlbfsiJWXEFD6iUoOkdQaaQ6z9dP2YVahljF4%2ByXdvZ%2Fevf4G%2BhQk2sEAUsti4vWxa35gKGSBMDp3T23OxxVXdXRijKovSFzrerC6ELAMT6IhcCZIyeX7c68YPzGGLlxq89PyM0q5YU2M1RuQAg0EERbiaA7Ohl1RgmPTM2p1qjBk1Mm6GDErsfswAgLiDZPmfMwrbhAqeHzm6P8Z9gV9SQdTx2lpCyAEKkhc62YZiVEjTdRgo0zXeBRnImAaSFzm7xdjjtOBGyvmZVZkNvfZjXDhU14%2BBToFEDKRAQpAJ0HRTjP6XHpYUKEX7RzS9bV5c%2BFJTmAICUgNSWQ%2FZCgJwhIOJIQVLgFKcXvKHm9cyGvithFDUAFQqECho1CBUIggYapAJ1QEFBExNMYoISDU1%2FNIR9cvndTG%2Fc2IBkp2fC8ZpQgknBGI%2F3AsDvvRfDlJhwem5zwYMs7VNlaUtbXE1h3mezj9mlGSsXrBkzkFsGKGoDmedBJLfLjxQQgAYdHRSxtPfbfceNsPYBQPTI%2BGZbT31YxrGIpYoKpIKigkAgFOggNBrbQBBCBaEM2L%2BiGGmTgnF%2BUc1epqO%2F3VejAoAOUZSLQkFN17lAb4eVCe%2BVRvvHN4sH6t1feqAmMUGoPHvvhdLzTjzfKoj0sza%2FGLOy1Bu3vqc20Pgl5YIGkVOEZFZ0nLLMszzdDADTgjIdX6Uf3zfUx6m6u8riKRhOCcmDAqLCURo53Oe4rrsyUlGD0nlIqubdKNZJXOm9FH6y7Yh5uKBnO8vNTX2N4YoKE2fMLREQOsE8AfFN4%2Fak4QIfbd2XJFRQkLx85ruN7NTp2AoAZxwlCR9dWJc81NDdtoLkc86KBIJwXQ3aOpCPqwuhR2SPbCBlUc2NyogQX3N7wqgU51BAf2w9EFXUtCtLqADqS76ev6%2Filgrk2q6esxHZgf5CySh3FMcG%2B5jbE0ZNdj4odHdDwWPGcZNNO1MPbrxtzdW4s%2BtI5HPBwQTTzziKY3v%2F7HGlhmS23g90T%2BOO5L1Nu7MMw3Fv%2FTx1f97%2FFnsAYPui8%2FD4nBB%2FoZZR230uoq67auQoLaB37Iio3sEAK52nR39p%2BzS13HFiilHeYtOOabdC71jQzz2R%2BALBbcrjWNF%2BcfaUwLSrk4KmtsT4T%2BgK9jG7AKKjv93X1lcfUNNVaantropqddnDCcIoa7lk29S92%2B%2F5CpOvQ04VJ79KUe%2F7iI%2FHh40U6c3PyuPjhmWKN8G8Fvnw1A%2FzmX%2FvV5h%2FT%2BCXstRMUp4kOFOjZiUlWBkFQYdALitRZXRzf3RqWumdgF79NQDBOa2V%2FiYSHAAAAABJRU5ErkJggg%3D%3D%29%3Bbottom%3A10px%3Bright%3A55px%7Ddiv%2Evis%2Dnetwork%20div%2Evis%2Dnavigation%20div%2Evis%2Dbutton%2Evis%2DzoomExtends%7Bbackground%2Dimage%3Aurl%28data%3Aimage%2Fpng%3Bbase64%2CiVBORw0KGgoAAAANSUhEUgAAAB4AAAAeCAYAAAA7MK6iAAAACXBIWXMAAAsTAAALEwEAmpwYAAAKT2lDQ1BQaG90b3Nob3AgSUNDIHByb2ZpbGUAAHjanVNnVFPpFj333vRCS4iAlEtvUhUIIFJCi4AUkSYqIQkQSoghodkVUcERRUUEG8igiAOOjoCMFVEsDIoK2AfkIaKOg6OIisr74Xuja9a89%2BbN%2FrXXPues852zzwfACAyWSDNRNYAMqUIeEeCDx8TG4eQuQIEKJHAAEAizZCFz%2FSMBAPh%2BPDwrIsAHvgABeNMLCADATZvAMByH%2Fw%2FqQplcAYCEAcB0kThLCIAUAEB6jkKmAEBGAYCdmCZTAKAEAGDLY2LjAFAtAGAnf%2BbTAICd%2BJl7AQBblCEVAaCRACATZYhEAGg7AKzPVopFAFgwABRmS8Q5ANgtADBJV2ZIALC3AMDOEAuyAAgMADBRiIUpAAR7AGDIIyN4AISZABRG8lc88SuuEOcqAAB4mbI8uSQ5RYFbCC1xB1dXLh4ozkkXKxQ2YQJhmkAuwnmZGTKBNA%2Fg88wAAKCRFRHgg%2FP9eM4Ors7ONo62Dl8t6r8G%2FyJiYuP%2B5c%2BrcEAAAOF0ftH%2BLC%2BzGoA7BoBt%2FqIl7gRoXgugdfeLZrIPQLUAoOnaV%2FNw%2BH48PEWhkLnZ2eXk5NhKxEJbYcpXff5nwl%2FAV%2F1s%2BX48%2FPf14L7iJIEyXYFHBPjgwsz0TKUcz5IJhGLc5o9H%2FLcL%2F%2Fwd0yLESWK5WCoU41EScY5EmozzMqUiiUKSKcUl0v9k4t8s%2BwM%2B3zUAsGo%2BAXuRLahdYwP2SycQWHTA4vcAAPK7b8HUKAgDgGiD4c93%2F%2B8%2F%2FUegJQCAZkmScQAAXkQkLlTKsz%2FHCAAARKCBKrBBG%2FTBGCzABhzBBdzBC%2FxgNoRCJMTCQhBCCmSAHHJgKayCQiiGzbAdKmAv1EAdNMBRaIaTcA4uwlW4Dj1wD%2FphCJ7BKLyBCQRByAgTYSHaiAFiilgjjggXmYX4IcFIBBKLJCDJiBRRIkuRNUgxUopUIFVIHfI9cgI5h1xGupE7yAAygvyGvEcxlIGyUT3UDLVDuag3GoRGogvQZHQxmo8WoJvQcrQaPYw2oefQq2gP2o8%2BQ8cwwOgYBzPEbDAuxsNCsTgsCZNjy7EirAyrxhqwVqwDu4n1Y8%2BxdwQSgUXACTYEd0IgYR5BSFhMWE7YSKggHCQ0EdoJNwkDhFHCJyKTqEu0JroR%2BcQYYjIxh1hILCPWEo8TLxB7iEPENyQSiUMyJ7mQAkmxpFTSEtJG0m5SI%2BksqZs0SBojk8naZGuyBzmULCAryIXkneTD5DPkG%2BQh8lsKnWJAcaT4U%2BIoUspqShnlEOU05QZlmDJBVaOaUt2ooVQRNY9aQq2htlKvUYeoEzR1mjnNgxZJS6WtopXTGmgXaPdpr%2Bh0uhHdlR5Ol9BX0svpR%2BiX6AP0dwwNhhWDx4hnKBmbGAcYZxl3GK%2BYTKYZ04sZx1QwNzHrmOeZD5lvVVgqtip8FZHKCpVKlSaVGyovVKmqpqreqgtV81XLVI%2BpXlN9rkZVM1PjqQnUlqtVqp1Q61MbU2epO6iHqmeob1Q%2FpH5Z%2FYkGWcNMw09DpFGgsV%2FjvMYgC2MZs3gsIWsNq4Z1gTXEJrHN2Xx2KruY%2FR27iz2qqaE5QzNKM1ezUvOUZj8H45hx%2BJx0TgnnKKeX836K3hTvKeIpG6Y0TLkxZVxrqpaXllirSKtRq0frvTau7aedpr1Fu1n7gQ5Bx0onXCdHZ4%2FOBZ3nU9lT3acKpxZNPTr1ri6qa6UbobtEd79up%2B6Ynr5egJ5Mb6feeb3n%2Bhx9L%2F1U%2FW36p%2FVHDFgGswwkBtsMzhg8xTVxbzwdL8fb8VFDXcNAQ6VhlWGX4YSRudE8o9VGjUYPjGnGXOMk423GbcajJgYmISZLTepN7ppSTbmmKaY7TDtMx83MzaLN1pk1mz0x1zLnm%2Beb15vft2BaeFostqi2uGVJsuRaplnutrxuhVo5WaVYVVpds0atna0l1rutu6cRp7lOk06rntZnw7Dxtsm2qbcZsOXYBtuutm22fWFnYhdnt8Wuw%2B6TvZN9un2N%2FT0HDYfZDqsdWh1%2Bc7RyFDpWOt6azpzuP33F9JbpL2dYzxDP2DPjthPLKcRpnVOb00dnF2e5c4PziIuJS4LLLpc%2BLpsbxt3IveRKdPVxXeF60vWdm7Obwu2o26%2FuNu5p7ofcn8w0nymeWTNz0MPIQ%2BBR5dE%2FC5%2BVMGvfrH5PQ0%2BBZ7XnIy9jL5FXrdewt6V3qvdh7xc%2B9j5yn%2BM%2B4zw33jLeWV%2FMN8C3yLfLT8Nvnl%2BF30N%2FI%2F9k%2F3r%2F0QCngCUBZwOJgUGBWwL7%2BHp8Ib%2BOPzrbZfay2e1BjKC5QRVBj4KtguXBrSFoyOyQrSH355jOkc5pDoVQfujW0Adh5mGLw34MJ4WHhVeGP45wiFga0TGXNXfR3ENz30T6RJZE3ptnMU85ry1KNSo%2Bqi5qPNo3ujS6P8YuZlnM1VidWElsSxw5LiquNm5svt%2F87fOH4p3iC%2BN7F5gvyF1weaHOwvSFpxapLhIsOpZATIhOOJTwQRAqqBaMJfITdyWOCnnCHcJnIi%2FRNtGI2ENcKh5O8kgqTXqS7JG8NXkkxTOlLOW5hCepkLxMDUzdmzqeFpp2IG0yPTq9MYOSkZBxQqohTZO2Z%2Bpn5mZ2y6xlhbL%2BxW6Lty8elQfJa7OQrAVZLQq2QqboVFoo1yoHsmdlV2a%2FzYnKOZarnivN7cyzytuQN5zvn%2F%2FtEsIS4ZK2pYZLVy0dWOa9rGo5sjxxedsK4xUFK4ZWBqw8uIq2Km3VT6vtV5eufr0mek1rgV7ByoLBtQFr6wtVCuWFfevc1%2B1dT1gvWd%2B1YfqGnRs%2BFYmKrhTbF5cVf9go3HjlG4dvyr%2BZ3JS0qavEuWTPZtJm6ebeLZ5bDpaql%2BaXDm4N2dq0Dd9WtO319kXbL5fNKNu7g7ZDuaO%2FPLi8ZafJzs07P1SkVPRU%2BlQ27tLdtWHX%2BG7R7ht7vPY07NXbW7z3%2FT7JvttVAVVN1WbVZftJ%2B7P3P66Jqun4lvttXa1ObXHtxwPSA%2F0HIw6217nU1R3SPVRSj9Yr60cOxx%2B%2B%2Fp3vdy0NNg1VjZzG4iNwRHnk6fcJ3%2FceDTradox7rOEH0x92HWcdL2pCmvKaRptTmvtbYlu6T8w%2B0dbq3nr8R9sfD5w0PFl5SvNUyWna6YLTk2fyz4ydlZ19fi753GDborZ752PO32oPb%2B%2B6EHTh0kX%2Fi%2Bc7vDvOXPK4dPKy2%2BUTV7hXmq86X23qdOo8%2FpPTT8e7nLuarrlca7nuer21e2b36RueN87d9L158Rb%2F1tWeOT3dvfN6b%2FfF9%2FXfFt1%2Bcif9zsu72Xcn7q28T7xf9EDtQdlD3YfVP1v%2B3Njv3H9qwHeg89HcR%2FcGhYPP%2FpH1jw9DBY%2BZj8uGDYbrnjg%2BOTniP3L96fynQ89kzyaeF%2F6i%2FsuuFxYvfvjV69fO0ZjRoZfyl5O%2FbXyl%2FerA6xmv28bCxh6%2ByXgzMV70VvvtwXfcdx3vo98PT%2BR8IH8o%2F2j5sfVT0Kf7kxmTk%2F8EA5jz%2FGMzLdsAAAAgY0hSTQAAeiUAAICDAAD5%2FwAAgOkAAHUwAADqYAAAOpgAABdvkl%2FFRgAABptJREFUeNqsl21QlNcVx%2F%2F%2Fcx9hIipuAJHasgHlRdw0xay7yK7smg6sb2DSdtqZduLUNENmOk1tQuM4U7UzTvshSRlFZzoNCWSSSTJp%2B6VNkLCAeQHBoCCgqNBE0wUqL%2BKuwIiiZZ9%2BeHa3aAS3Sf8zO8%2FL3nt%2B95x7z7n3YWlpKUQEJAEgch9%2BJola9xEC2ADBVgAOKqwCYAqKDgUJBIHPBWwFWQNdbyZFBwAC0GGIAHQSj3%2F8HHRdhzYbdDfwg4IjAsGvICgXAroYBiCEDkBBACBZoyST4gDwQqh7mQ4cEkhQD0EBIIggRMQAh2EiEvEYAGrdR3YSqIYCIEDaotVDeYnu%2FryEjSOr43PHl8WmTBPA6PRQ7IWJrvhT%2FubkU%2F7m1EvX%2B1KEUh7Ug%2BWkPEXgdUSkR%2Bxrd0NJ4qjr8AEI9pGAI7mo78mHfnF%2BY%2FK2K7iHUheuvJG6cOUNz%2FLvDwPobrpSl%2FRuf2VOy9UPs4RSTSANwH4Y449EVdnt9ojHIeghCHYLgR%2Bn%2F7zt4Np32tIWZU4hSpnjVk1t%2FcaPfOO3%2Ff%2B%2BMNH5TVJcisoEoo4ksgbsXwYfdR1%2BkQplQuCFNS82Pp%2F9%2B158RTkTC0ce0OKutQeOp5PME0qcUBqyBmwGOC8vz4AWVOyE4CUqYO%2FDh%2Bp3pj%2F%2FBb6mHllqCyxd8ODVT69%2BuFKoOYTSnzFg7SJpzHFNQYWiQrUIsCN9V%2BuOh375zz179pSGI1FSUuK12%2B2%2BaGDt7e3muro6T%2Fh57969lZdvDrT%2BZbA6n0B1nfPVN7e0PjMjIgIIdkEAR1JR329yDvaE0%2Bl%2FhQKA1Wr1bd682SsikUW7K%2BO3PesTNvaSAiXaLhGBvO86RFEoJ4Adac%2BeDxsgiZKSEm9NTY3n5MmT5mjBHR0d5vr6es%2BmTZu8SqnI%2Bx%2Bs%2BOl5jRo0auX1jtepQaEAADKWWIbcy7ZGUmb79u1eu93uI%2Bmtra31HLj5TGDs9rBJICCNn1GRCKGCUJAUuzzw6CfbTB6Px7t27VofAG%2FYXl6Ceyw9LmvIN3UxZUafKRACWyCELcHVP3vk4fDabDZf%2B2N%2FD9g%2BfsLEEFSooFGDogZNFkBRgSCsTcWm066jgRAU4et%2FF5u9nxRosmCLRmE%2BQdgSXCNzhW%2Fs9rDJ63wVJx77V%2BV8YS6UNaW8BdOcqzx%2B3Ujt0F8Bcr1GMIMU5CzJHZ%2Brg6IGCYV2PimoyIK6lzIWrxkPTVGmRoqJFCyLTZmeq4MB5f3BVADnbpcQkzStUQMAk0YKBPfzxlhA95NQQe43QBotBECAFFyZHo6dz6CKCizAPFPivzUWqxm2AqIgnwkFvZNn4uczGK3Hah7wpet98UZ85R8aKScIcXYEWpMLkx8fvleHpNjlAWtTsakQa0pVKGcJQqMGUqCHBvfdjp%2FgTP6xwFzg85PdyaH2J4SUowKiw3889e4KBACnT582W5uKTV2uusAdUFlgzBcFQoFGDT35HwW%2B82mhqaenxwwA4WtYfRNnUkMZUqsJpEkn8cXU5yktYw2JjsTCMQDwer0ekt6GhgZPUVGRd3fu7qjqdU9Mj7mlpcVD0tvS0uKxWCyVANB5rS3x8s3BFEUFgTTLtuZndQHLBMSfB6pyZtfqMDQ3NzfqTcJisficTqc3BI%2B8bxh9L8corarM3fnDoIT%2BrACAU%2F7m7MOfHbCEwQDQ2Njo6erqinqTOHfuXNjjiI23%2BystZ8c7smmkWgVJcN%2B%2BfRARfLDhlacEUqVEQ1nm77xPrHjSh%2F%2BDjo3WmN%2Fs%2F6OHEOgIPr2h63tVuq5Dud1ukETWoK3zorkzTiiONn%2FTKlNM4lj24m%2BPf13o2wOVHqGA5MsAXjKPrDaqnMvlQnjTzhy0Nlw0d5oI5p3yN62amrk%2Bve5B5%2BhXgb47WGX52%2BV3NgoFOvQKAGUkkTqcbZy5XC7XHYf4zEFr3aXU7jih5uidPPOtvsmzixZr8VMrHjBHddLsHj%2BZ9Fb%2Fn9a1%2BT%2FJDaXey0IpEzEKkHnU8Jj79%2B%2BPeEwSSimQRGP%2BGz8j5DVFBVKQtjBj6JGlNt%2FD8Y%2BOpMdlTphiEqcB4tqtsVjfjUtLLkx0J%2FdOnjWPTg%2BlEARIEHwaQJVQIYggACC%2Fqxi6rn8ZHL4XETSsf0MU1HOk%2FCFGYgAwskUqY5eBitRxzn7%2Fa0V1EEBwdqkN6jPI7y4xPmHmC5unbWdQRMqP2d86qANOksU6gvmArNQRNClqABnQgYuK0krI%2BwCOAyH3DK%2FvqOXhaf3PAO7mIRjDNV25AAAAAElFTkSuQmCC%29%3Bbottom%3A50px%3Bright%3A15px%7Ddiv%2Evis%2Dcolor%2Dpicker%7Bposition%3Aabsolute%3Btop%3A0%3Bleft%3A30px%3Bmargin%2Dtop%3A%2D140px%3Bmargin%2Dleft%3A30px%3Bwidth%3A310px%3Bheight%3A444px%3Bz%2Dindex%3A1%3Bpadding%3A10px%3Bborder%2Dradius%3A15px%3Bbackground%2Dcolor%3A%23fff%3Bdisplay%3Anone%3Bbox%2Dshadow%3Argba%280%2C0%2C0%2C%2E5%29%200%200%2010px%200%7Ddiv%2Evis%2Dcolor%2Dpicker%20div%2Evis%2Darrow%7Bposition%3Aabsolute%3Btop%3A147px%3Bleft%3A5px%7Ddiv%2Evis%2Dcolor%2Dpicker%20div%2Evis%2Darrow%3A%3Aafter%2Cdiv%2Evis%2Dcolor%2Dpicker%20div%2Evis%2Darrow%3A%3Abefore%7Bright%3A100%25%3Btop%3A50%25%3Bborder%3Asolid%20transparent%3Bcontent%3A%22%20%22%3Bheight%3A0%3Bwidth%3A0%3Bposition%3Aabsolute%3Bpointer%2Devents%3Anone%7Ddiv%2Evis%2Dcolor%2Dpicker%20div%2Evis%2Darrow%3Aafter%7Bborder%2Dcolor%3Argba%28255%2C255%2C255%2C0%29%3Bborder%2Dright%2Dcolor%3A%23fff%3Bborder%2Dwidth%3A30px%3Bmargin%2Dtop%3A%2D30px%7Ddiv%2Evis%2Dcolor%2Dpicker%20div%2Evis%2Dcolor%7Bposition%3Aabsolute%3Bwidth%3A289px%3Bheight%3A289px%3Bcursor%3Apointer%7Ddiv%2Evis%2Dcolor%2Dpicker%20div%2Evis%2Dbrightness%7Bposition%3Aabsolute%3Btop%3A313px%7Ddiv%2Evis%2Dcolor%2Dpicker%20div%2Evis%2Dopacity%7Bposition%3Aabsolute%3Btop%3A350px%7Ddiv%2Evis%2Dcolor%2Dpicker%20div%2Evis%2Dselector%7Bposition%3Aabsolute%3Btop%3A137px%3Bleft%3A137px%3Bwidth%3A15px%3Bheight%3A15px%3Bborder%2Dradius%3A15px%3Bborder%3A1px%20solid%20%23fff%3Bbackground%3A%234c4c4c%3Bbackground%3A%2Dmoz%2Dlinear%2Dgradient%28top%2C%234c4c4c%200%2C%23595959%2012%25%2C%23666%2025%25%2C%23474747%2039%25%2C%232c2c2c%2050%25%2C%23000%2051%25%2C%23111%2060%25%2C%232b2b2b%2076%25%2C%231c1c1c%2091%25%2C%23131313%20100%25%29%3Bbackground%3A%2Dwebkit%2Dgradient%28linear%2Cleft%20top%2Cleft%20bottom%2Ccolor%2Dstop%280%2C%234c4c4c%29%2Ccolor%2Dstop%2812%25%2C%23595959%29%2Ccolor%2Dstop%2825%25%2C%23666%29%2Ccolor%2Dstop%2839%25%2C%23474747%29%2Ccolor%2Dstop%2850%25%2C%232c2c2c%29%2Ccolor%2Dstop%2851%25%2C%23000%29%2Ccolor%2Dstop%2860%25%2C%23111%29%2Ccolor%2Dstop%2876%25%2C%232b2b2b%29%2Ccolor%2Dstop%2891%25%2C%231c1c1c%29%2Ccolor%2Dstop%28100%25%2C%23131313%29%29%3Bbackground%3A%2Dwebkit%2Dlinear%2Dgradient%28top%2C%234c4c4c%200%2C%23595959%2012%25%2C%23666%2025%25%2C%23474747%2039%25%2C%232c2c2c%2050%25%2C%23000%2051%25%2C%23111%2060%25%2C%232b2b2b%2076%25%2C%231c1c1c%2091%25%2C%23131313%20100%25%29%3Bbackground%3A%2Do%2Dlinear%2Dgradient%28top%2C%234c4c4c%200%2C%23595959%2012%25%2C%23666%2025%25%2C%23474747%2039%25%2C%232c2c2c%2050%25%2C%23000%2051%25%2C%23111%2060%25%2C%232b2b2b%2076%25%2C%231c1c1c%2091%25%2C%23131313%20100%25%29%3Bbackground%3A%2Dms%2Dlinear%2Dgradient%28top%2C%234c4c4c%200%2C%23595959%2012%25%2C%23666%2025%25%2C%23474747%2039%25%2C%232c2c2c%2050%25%2C%23000%2051%25%2C%23111%2060%25%2C%232b2b2b%2076%25%2C%231c1c1c%2091%25%2C%23131313%20100%25%29%3Bbackground%3Alinear%2Dgradient%28to%20bottom%2C%234c4c4c%200%2C%23595959%2012%25%2C%23666%2025%25%2C%23474747%2039%25%2C%232c2c2c%2050%25%2C%23000%2051%25%2C%23111%2060%25%2C%232b2b2b%2076%25%2C%231c1c1c%2091%25%2C%23131313%20100%25%29%3Bfilter%3Aprogid%3ADXImageTransform%2EMicrosoft%2Egradient%28%20startColorstr%3D%27%234c4c4c%27%2C%20endColorstr%3D%27%23131313%27%2C%20GradientType%3D0%20%29%7Ddiv%2Evis%2Dcolor%2Dpicker%20div%2Evis%2Dinitial%2Dcolor%2Cdiv%2Evis%2Dcolor%2Dpicker%20div%2Evis%2Dnew%2Dcolor%7Bwidth%3A140px%3Bheight%3A20px%3Btop%3A380px%3Bfont%2Dsize%3A10px%3Bcolor%3Argba%280%2C0%2C0%2C%2E4%29%3Bline%2Dheight%3A20px%3Bposition%3Aabsolute%3Bvertical%2Dalign%3Amiddle%7Ddiv%2Evis%2Dcolor%2Dpicker%20div%2Evis%2Dnew%2Dcolor%7Bborder%3A1px%20solid%20rgba%280%2C0%2C0%2C%2E1%29%3Bborder%2Dradius%3A5px%3Bleft%3A159px%3Btext%2Dalign%3Aright%3Bpadding%2Dright%3A2px%7Ddiv%2Evis%2Dcolor%2Dpicker%20div%2Evis%2Dinitial%2Dcolor%7Bborder%3A1px%20solid%20rgba%280%2C0%2C0%2C%2E1%29%3Bborder%2Dradius%3A5px%3Bleft%3A10px%3Btext%2Dalign%3Aleft%3Bpadding%2Dleft%3A2px%7Ddiv%2Evis%2Dcolor%2Dpicker%20div%2Evis%2Dlabel%7Bposition%3Aabsolute%3Bwidth%3A300px%3Bleft%3A10px%7Ddiv%2Evis%2Dcolor%2Dpicker%20div%2Evis%2Dlabel%2Evis%2Dbrightness%7Btop%3A300px%7Ddiv%2Evis%2Dcolor%2Dpicker%20div%2Evis%2Dlabel%2Evis%2Dopacity%7Btop%3A338px%7Ddiv%2Evis%2Dcolor%2Dpicker%20div%2Evis%2Dbutton%7Bposition%3Aabsolute%3Bwidth%3A68px%3Bheight%3A25px%3Bborder%2Dradius%3A10px%3Bvertical%2Dalign%3Amiddle%3Btext%2Dalign%3Acenter%3Bline%2Dheight%3A25px%3Btop%3A410px%3Bborder%3A2px%20solid%20%23d9d9d9%3Bbackground%2Dcolor%3A%23f7f7f7%3Bcursor%3Apointer%7Ddiv%2Evis%2Dcolor%2Dpicker%20div%2Evis%2Dbutton%2Evis%2Dcancel%7Bleft%3A5px%7Ddiv%2Evis%2Dcolor%2Dpicker%20div%2Evis%2Dbutton%2Evis%2Dload%7Bleft%3A82px%7Ddiv%2Evis%2Dcolor%2Dpicker%20div%2Evis%2Dbutton%2Evis%2Dapply%7Bleft%3A159px%7Ddiv%2Evis%2Dcolor%2Dpicker%20div%2Evis%2Dbutton%2Evis%2Dsave%7Bleft%3A236px%7Ddiv%2Evis%2Dcolor%2Dpicker%20input%2Evis%2Drange%7Bwidth%3A290px%3Bheight%3A20px%7D" rel="stylesheet" />
<script src="data:application/x-javascript;base64,LyoqCiAqIHZpcy5qcwogKiBodHRwczovL2dpdGh1Yi5jb20vYWxtZW5kZS92aXMKICoKICogQSBkeW5hbWljLCBicm93c2VyLWJhc2VkIHZpc3VhbGl6YXRpb24gbGlicmFyeS4KICoKICogQHZlcnNpb24gNC4xMi4wCiAqIEBkYXRlICAgIDIwMTYtMDEtMDgKICoKICogQGxpY2Vuc2UKICogQ29weXJpZ2h0IChDKSAyMDExLTIwMTYgQWxtZW5kZSBCLlYsIGh0dHA6Ly9hbG1lbmRlLmNvbQogKgogKiBWaXMuanMgaXMgZHVhbCBsaWNlbnNlZCB1bmRlciBib3RoCiAqCiAqICogVGhlIEFwYWNoZSAyLjAgTGljZW5zZQogKiAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAogKgogKiBhbmQKICoKICogKiBUaGUgTUlUIExpY2Vuc2UKICogICBodHRwOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvTUlUCiAqCiAqIFZpcy5qcyBtYXkgYmUgZGlzdHJpYnV0ZWQgdW5kZXIgZWl0aGVyIGxpY2Vuc2UuCiAqLwoidXNlIHN0cmljdCI7IWZ1bmN0aW9uKHQsZSl7Im9iamVjdCI9PXR5cGVvZiBleHBvcnRzJiYib2JqZWN0Ij09dHlwZW9mIG1vZHVsZT9tb2R1bGUuZXhwb3J0cz1lKCk6ImZ1bmN0aW9uIj09dHlwZW9mIGRlZmluZSYmZGVmaW5lLmFtZD9kZWZpbmUoW10sZSk6Im9iamVjdCI9PXR5cGVvZiBleHBvcnRzP2V4cG9ydHMudmlzPWUoKTp0LnZpcz1lKCl9KHRoaXMsZnVuY3Rpb24oKXtyZXR1cm4gZnVuY3Rpb24odCl7ZnVuY3Rpb24gZShvKXtpZihpW29dKXJldHVybiBpW29dLmV4cG9ydHM7dmFyIG49aVtvXT17ZXhwb3J0czp7fSxpZDpvLGxvYWRlZDohMX07cmV0dXJuIHRbb10uY2FsbChuLmV4cG9ydHMsbixuLmV4cG9ydHMsZSksbi5sb2FkZWQ9ITAsbi5leHBvcnRzfXZhciBpPXt9O3JldHVybiBlLm09dCxlLmM9aSxlLnA9IiIsZSgwKX0oW2Z1bmN0aW9uKHQsZSxpKXtlLnV0aWw9aSgxKSxlLkRPTXV0aWw9aSg3KSxlLkRhdGFTZXQ9aSg4KSxlLkRhdGFWaWV3PWkoMTApLGUuUXVldWU9aSg5KSxlLkdyYXBoM2Q9aSgxMSksZS5ncmFwaDNkPXtDYW1lcmE6aSgxNSksRmlsdGVyOmkoMTYpLFBvaW50MmQ6aSgxNCksUG9pbnQzZDppKDEzKSxTbGlkZXI6aSgxNyksU3RlcE51bWJlcjppKDE4KX0sZS5UaW1lbGluZT1pKDE5KSxlLkdyYXBoMmQ9aSg0OCksZS50aW1lbGluZT17Q29yZTppKDI3KSxEYXRhU3RlcDppKDUxKSxEYXRlVXRpbDppKDI2KSxSYW5nZTppKDIzKSxzdGFjazppKDMxKSxUaW1lU3RlcDppKDI5KSxjb21wb25lbnRzOntpdGVtczp7SXRlbTppKDMzKSxCYWNrZ3JvdW5kSXRlbTppKDM3KSxCb3hJdGVtOmkoMzUpLFBvaW50SXRlbTppKDM2KSxSYW5nZUl0ZW06aSgzMil9LEJhY2tncm91bmRHcm91cDppKDM0KSxDb21wb25lbnQ6aSgyNSksQ3VycmVudFRpbWU6aSg0MyksQ3VzdG9tVGltZTppKDQxKSxEYXRhQXhpczppKDUwKSxHcmFwaEdyb3VwOmkoNTIpLEdyb3VwOmkoMzApLEl0ZW1TZXQ6aSgyOCksTGVnZW5kOmkoNTYpLExpbmVHcmFwaDppKDQ5KSxUaW1lQXhpczppKDM4KX19LGUuTmV0d29yaz1pKDU4KSxlLm5ldHdvcms9e0ltYWdlczppKDExNiksZG90cGFyc2VyOmkoMTE0KSxnZXBoaVBhcnNlcjppKDExNSksYWxsT3B0aW9uczppKDExMCl9LGUubmV0d29yay5jb252ZXJ0RG90PWZ1bmN0aW9uKHQpe3JldHVybiBlLm5ldHdvcmsuZG90cGFyc2VyLkRPVFRvR3JhcGgodCl9LGUubmV0d29yay5jb252ZXJ0R2VwaGk9ZnVuY3Rpb24odCxpKXtyZXR1cm4gZS5uZXR3b3JrLmdlcGhpUGFyc2VyLnBhcnNlR2VwaGkodCxpKX0sZS5tb21lbnQ9aSgyKSxlLkhhbW1lcj1pKDIwKSxlLmtleWNoYXJtPWkoNDApfSxmdW5jdGlvbih0LGUsaSl7dmFyIG89aSgyKSxuPWkoNik7ZS5pc051bWJlcj1mdW5jdGlvbih0KXtyZXR1cm4gdCBpbnN0YW5jZW9mIE51bWJlcnx8Im51bWJlciI9PXR5cGVvZiB0fSxlLnJlY3Vyc2l2ZURPTURlbGV0ZT1mdW5jdGlvbih0KXtpZih0KWZvcig7dC5oYXNDaGlsZE5vZGVzKCk9PT0hMDspZS5yZWN1cnNpdmVET01EZWxldGUodC5maXJzdENoaWxkKSx0LnJlbW92ZUNoaWxkKHQuZmlyc3RDaGlsZCl9LGUuZ2l2ZVJhbmdlPWZ1bmN0aW9uKHQsZSxpLG8pe2lmKGU9PXQpcmV0dXJuLjU7dmFyIG49MS8oZS10KTtyZXR1cm4gTWF0aC5tYXgoMCwoby10KSpuKX0sZS5pc1N0cmluZz1mdW5jdGlvbih0KXtyZXR1cm4gdCBpbnN0YW5jZW9mIFN0cmluZ3x8InN0cmluZyI9PXR5cGVvZiB0fSxlLmlzRGF0ZT1mdW5jdGlvbih0KXtpZih0IGluc3RhbmNlb2YgRGF0ZSlyZXR1cm4hMDtpZihlLmlzU3RyaW5nKHQpKXt2YXIgaT1zLmV4ZWModCk7aWYoaSlyZXR1cm4hMDtpZighaXNOYU4oRGF0ZS5wYXJzZSh0KSkpcmV0dXJuITB9cmV0dXJuITF9LGUucmFuZG9tVVVJRD1mdW5jdGlvbigpe3JldHVybiBuLnY0KCl9LGUuYXNzaWduQWxsS2V5cz1mdW5jdGlvbih0LGUpe2Zvcih2YXIgaSBpbiB0KXQuaGFzT3duUHJvcGVydHkoaSkmJiJvYmplY3QiIT10eXBlb2YgdFtpXSYmKHRbaV09ZSl9LGUuZmlsbElmRGVmaW5lZD1mdW5jdGlvbih0LGkpe3ZhciBvPWFyZ3VtZW50cy5sZW5ndGg8PTJ8fHZvaWQgMD09PWFyZ3VtZW50c1syXT8hMTphcmd1bWVudHNbMl07Zm9yKHZhciBuIGluIHQpdm9pZCAwIT09aVtuXSYmKCJvYmplY3QiIT10eXBlb2YgaVtuXT92b2lkIDAhPT1pW25dJiZudWxsIT09aVtuXXx8dm9pZCAwPT09dFtuXXx8byE9PSEwP3Rbbl09aVtuXTpkZWxldGUgdFtuXToib2JqZWN0Ij09dHlwZW9mIHRbbl0mJmUuZmlsbElmRGVmaW5lZCh0W25dLGlbbl0sbykpfSxlLnByb3RvRXh0ZW5kPWZ1bmN0aW9uKHQsZSl7Zm9yKHZhciBpPTE7aTxhcmd1bWVudHMubGVuZ3RoO2krKyl7dmFyIG89YXJndW1lbnRzW2ldO2Zvcih2YXIgbiBpbiBvKXRbbl09b1tuXX1yZXR1cm4gdH0sZS5leHRlbmQ9ZnVuY3Rpb24odCxlKXtmb3IodmFyIGk9MTtpPGFyZ3VtZW50cy5sZW5ndGg7aSsrKXt2YXIgbz1hcmd1bWVudHNbaV07Zm9yKHZhciBuIGluIG8pby5oYXNPd25Qcm9wZXJ0eShuKSYmKHRbbl09b1tuXSl9cmV0dXJuIHR9LGUuc2VsZWN0aXZlRXh0ZW5kPWZ1bmN0aW9uKHQsZSxpKXtpZighQXJyYXkuaXNBcnJheSh0KSl0aHJvdyBuZXcgRXJyb3IoIkFycmF5IHdpdGggcHJvcGVydHkgbmFtZXMgZXhwZWN0ZWQgYXMgZmlyc3QgYXJndW1lbnQiKTtmb3IodmFyIG89MjtvPGFyZ3VtZW50cy5sZW5ndGg7bysrKWZvcih2YXIgbj1hcmd1bWVudHNbb10scz0wO3M8dC5sZW5ndGg7cysrKXt2YXIgcj10W3NdO24uaGFzT3duUHJvcGVydHkocikmJihlW3JdPW5bcl0pfXJldHVybiBlfSxlLnNlbGVjdGl2ZURlZXBFeHRlbmQ9ZnVuY3Rpb24odCxpLG8pe3ZhciBuPWFyZ3VtZW50cy5sZW5ndGg8PTN8fHZvaWQgMD09PWFyZ3VtZW50c1szXT8hMTphcmd1bWVudHNbM107aWYoQXJyYXkuaXNBcnJheShvKSl0aHJvdyBuZXcgVHlwZUVycm9yKCJBcnJheXMgYXJlIG5vdCBzdXBwb3J0ZWQgYnkgZGVlcEV4dGVuZCIpO2Zvcih2YXIgcz0yO3M8YXJndW1lbnRzLmxlbmd0aDtzKyspZm9yKHZhciByPWFyZ3VtZW50c1tzXSxhPTA7YTx0Lmxlbmd0aDthKyspe3ZhciBoPXRbYV07aWYoci5oYXNPd25Qcm9wZXJ0eShoKSlpZihvW2hdJiZvW2hdLmNvbnN0cnVjdG9yPT09T2JqZWN0KXZvaWQgMD09PWlbaF0mJihpW2hdPXt9KSxpW2hdLmNvbnN0cnVjdG9yPT09T2JqZWN0P2UuZGVlcEV4dGVuZChpW2hdLG9baF0sITEsbik6bnVsbD09PW9baF0mJnZvaWQgMCE9PWlbaF0mJm49PT0hMD9kZWxldGUgaVtoXTppW2hdPW9baF07ZWxzZXtpZihBcnJheS5pc0FycmF5KG9baF0pKXRocm93IG5ldyBUeXBlRXJyb3IoIkFycmF5cyBhcmUgbm90IHN1cHBvcnRlZCBieSBkZWVwRXh0ZW5kIik7bnVsbD09PW9baF0mJnZvaWQgMCE9PWlbaF0mJm49PT0hMD9kZWxldGUgaVtoXTppW2hdPW9baF19fXJldHVybiBpfSxlLnNlbGVjdGl2ZU5vdERlZXBFeHRlbmQ9ZnVuY3Rpb24odCxpLG8pe3ZhciBuPWFyZ3VtZW50cy5sZW5ndGg8PTN8fHZvaWQgMD09PWFyZ3VtZW50c1szXT8hMTphcmd1bWVudHNbM107aWYoQXJyYXkuaXNBcnJheShvKSl0aHJvdyBuZXcgVHlwZUVycm9yKCJBcnJheXMgYXJlIG5vdCBzdXBwb3J0ZWQgYnkgZGVlcEV4dGVuZCIpO2Zvcih2YXIgcyBpbiBvKWlmKG8uaGFzT3duUHJvcGVydHkocykmJi0xPT10LmluZGV4T2YocykpaWYob1tzXSYmb1tzXS5jb25zdHJ1Y3Rvcj09PU9iamVjdCl2b2lkIDA9PT1pW3NdJiYoaVtzXT17fSksaVtzXS5jb25zdHJ1Y3Rvcj09PU9iamVjdD9lLmRlZXBFeHRlbmQoaVtzXSxvW3NdKTpudWxsPT09b1tzXSYmdm9pZCAwIT09aVtzXSYmbj09PSEwP2RlbGV0ZSBpW3NdOmlbc109b1tzXTtlbHNlIGlmKEFycmF5LmlzQXJyYXkob1tzXSkpe2lbc109W107Zm9yKHZhciByPTA7cjxvW3NdLmxlbmd0aDtyKyspaVtzXS5wdXNoKG9bc11bcl0pfWVsc2UgbnVsbD09PW9bc10mJnZvaWQgMCE9PWlbc10mJm49PT0hMD9kZWxldGUgaVtzXTppW3NdPW9bc107cmV0dXJuIGl9LGUuZGVlcEV4dGVuZD1mdW5jdGlvbih0LGksbyxuKXtmb3IodmFyIHMgaW4gaSlpZihpLmhhc093blByb3BlcnR5KHMpfHxvPT09ITApaWYoaVtzXSYmaVtzXS5jb25zdHJ1Y3Rvcj09PU9iamVjdCl2b2lkIDA9PT10W3NdJiYodFtzXT17fSksdFtzXS5jb25zdHJ1Y3Rvcj09PU9iamVjdD9lLmRlZXBFeHRlbmQodFtzXSxpW3NdLG8pOm51bGw9PT1pW3NdJiZ2b2lkIDAhPT10W3NdJiZuPT09ITA/ZGVsZXRlIHRbc106dFtzXT1pW3NdO2Vsc2UgaWYoQXJyYXkuaXNBcnJheShpW3NdKSl7dFtzXT1bXTtmb3IodmFyIHI9MDtyPGlbc10ubGVuZ3RoO3IrKyl0W3NdLnB1c2goaVtzXVtyXSl9ZWxzZSBudWxsPT09aVtzXSYmdm9pZCAwIT09dFtzXSYmbj09PSEwP2RlbGV0ZSB0W3NdOnRbc109aVtzXTtyZXR1cm4gdH0sZS5lcXVhbEFycmF5PWZ1bmN0aW9uKHQsZSl7aWYodC5sZW5ndGghPWUubGVuZ3RoKXJldHVybiExO2Zvcih2YXIgaT0wLG89dC5sZW5ndGg7bz5pO2krKylpZih0W2ldIT1lW2ldKXJldHVybiExO3JldHVybiEwfSxlLmNvbnZlcnQ9ZnVuY3Rpb24odCxpKXt2YXIgbjtpZih2b2lkIDAhPT10KXtpZihudWxsPT09dClyZXR1cm4gbnVsbDtpZighaSlyZXR1cm4gdDtpZigic3RyaW5nIiE9dHlwZW9mIGkmJiEoaSBpbnN0YW5jZW9mIFN0cmluZykpdGhyb3cgbmV3IEVycm9yKCJUeXBlIG11c3QgYmUgYSBzdHJpbmciKTtzd2l0Y2goaSl7Y2FzZSJib29sZWFuIjpjYXNlIkJvb2xlYW4iOnJldHVybiBCb29sZWFuKHQpO2Nhc2UibnVtYmVyIjpjYXNlIk51bWJlciI6cmV0dXJuIE51bWJlcih0LnZhbHVlT2YoKSk7Y2FzZSJzdHJpbmciOmNhc2UiU3RyaW5nIjpyZXR1cm4gU3RyaW5nKHQpO2Nhc2UiRGF0ZSI6aWYoZS5pc051bWJlcih0KSlyZXR1cm4gbmV3IERhdGUodCk7aWYodCBpbnN0YW5jZW9mIERhdGUpcmV0dXJuIG5ldyBEYXRlKHQudmFsdWVPZigpKTtpZihvLmlzTW9tZW50KHQpKXJldHVybiBuZXcgRGF0ZSh0LnZhbHVlT2YoKSk7aWYoZS5pc1N0cmluZyh0KSlyZXR1cm4gbj1zLmV4ZWModCksbj9uZXcgRGF0ZShOdW1iZXIoblsxXSkpOm8odCkudG9EYXRlKCk7dGhyb3cgbmV3IEVycm9yKCJDYW5ub3QgY29udmVydCBvYmplY3Qgb2YgdHlwZSAiK2UuZ2V0VHlwZSh0KSsiIHRvIHR5cGUgRGF0ZSIpO2Nhc2UiTW9tZW50IjppZihlLmlzTnVtYmVyKHQpKXJldHVybiBvKHQpO2lmKHQgaW5zdGFuY2VvZiBEYXRlKXJldHVybiBvKHQudmFsdWVPZigpKTtpZihvLmlzTW9tZW50KHQpKXJldHVybiBvKHQpO2lmKGUuaXNTdHJpbmcodCkpcmV0dXJuIG49cy5leGVjKHQpLG8obj9OdW1iZXIoblsxXSk6dCk7dGhyb3cgbmV3IEVycm9yKCJDYW5ub3QgY29udmVydCBvYmplY3Qgb2YgdHlwZSAiK2UuZ2V0VHlwZSh0KSsiIHRvIHR5cGUgRGF0ZSIpO2Nhc2UiSVNPRGF0ZSI6aWYoZS5pc051bWJlcih0KSlyZXR1cm4gbmV3IERhdGUodCk7aWYodCBpbnN0YW5jZW9mIERhdGUpcmV0dXJuIHQudG9JU09TdHJpbmcoKTtpZihvLmlzTW9tZW50KHQpKXJldHVybiB0LnRvRGF0ZSgpLnRvSVNPU3RyaW5nKCk7aWYoZS5pc1N0cmluZyh0KSlyZXR1cm4gbj1zLmV4ZWModCksbj9uZXcgRGF0ZShOdW1iZXIoblsxXSkpLnRvSVNPU3RyaW5nKCk6bmV3IERhdGUodCkudG9JU09TdHJpbmcoKTt0aHJvdyBuZXcgRXJyb3IoIkNhbm5vdCBjb252ZXJ0IG9iamVjdCBvZiB0eXBlICIrZS5nZXRUeXBlKHQpKyIgdG8gdHlwZSBJU09EYXRlIik7Y2FzZSJBU1BEYXRlIjppZihlLmlzTnVtYmVyKHQpKXJldHVybiIvRGF0ZSgiK3QrIikvIjtpZih0IGluc3RhbmNlb2YgRGF0ZSlyZXR1cm4iL0RhdGUoIit0LnZhbHVlT2YoKSsiKS8iO2lmKGUuaXNTdHJpbmcodCkpe249cy5leGVjKHQpO3ZhciByO3JldHVybiByPW4/bmV3IERhdGUoTnVtYmVyKG5bMV0pKS52YWx1ZU9mKCk6bmV3IERhdGUodCkudmFsdWVPZigpLCIvRGF0ZSgiK3IrIikvIn10aHJvdyBuZXcgRXJyb3IoIkNhbm5vdCBjb252ZXJ0IG9iamVjdCBvZiB0eXBlICIrZS5nZXRUeXBlKHQpKyIgdG8gdHlwZSBBU1BEYXRlIik7ZGVmYXVsdDp0aHJvdyBuZXcgRXJyb3IoJ1Vua25vd24gdHlwZSAiJytpKyciJyl9fX07dmFyIHM9L15cLz9EYXRlXCgoXC0/XGQrKS9pO2UuZ2V0VHlwZT1mdW5jdGlvbih0KXt2YXIgZT10eXBlb2YgdDtyZXR1cm4ib2JqZWN0Ij09ZT9udWxsPT09dD8ibnVsbCI6dCBpbnN0YW5jZW9mIEJvb2xlYW4/IkJvb2xlYW4iOnQgaW5zdGFuY2VvZiBOdW1iZXI/Ik51bWJlciI6dCBpbnN0YW5jZW9mIFN0cmluZz8iU3RyaW5nIjpBcnJheS5pc0FycmF5KHQpPyJBcnJheSI6dCBpbnN0YW5jZW9mIERhdGU/IkRhdGUiOiJPYmplY3QiOiJudW1iZXIiPT1lPyJOdW1iZXIiOiJib29sZWFuIj09ZT8iQm9vbGVhbiI6InN0cmluZyI9PWU/IlN0cmluZyI6dm9pZCAwPT09ZT8idW5kZWZpbmVkIjplfSxlLmNvcHlBbmRFeHRlbmRBcnJheT1mdW5jdGlvbih0LGUpe2Zvcih2YXIgaT1bXSxvPTA7bzx0Lmxlbmd0aDtvKyspaS5wdXNoKHRbb10pO3JldHVybiBpLnB1c2goZSksaX0sZS5jb3B5QXJyYXk9ZnVuY3Rpb24odCl7Zm9yKHZhciBlPVtdLGk9MDtpPHQubGVuZ3RoO2krKyllLnB1c2godFtpXSk7cmV0dXJuIGV9LGUuZ2V0QWJzb2x1dGVMZWZ0PWZ1bmN0aW9uKHQpe3JldHVybiB0LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLmxlZnR9LGUuZ2V0QWJzb2x1dGVUb3A9ZnVuY3Rpb24odCl7cmV0dXJuIHQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkudG9wfSxlLmFkZENsYXNzTmFtZT1mdW5jdGlvbih0LGUpe3ZhciBpPXQuY2xhc3NOYW1lLnNwbGl0KCIgIik7LTE9PWkuaW5kZXhPZihlKSYmKGkucHVzaChlKSx0LmNsYXNzTmFtZT1pLmpvaW4oIiAiKSl9LGUucmVtb3ZlQ2xhc3NOYW1lPWZ1bmN0aW9uKHQsZSl7dmFyIGk9dC5jbGFzc05hbWUuc3BsaXQoIiAiKSxvPWkuaW5kZXhPZihlKTstMSE9byYmKGkuc3BsaWNlKG8sMSksdC5jbGFzc05hbWU9aS5qb2luKCIgIikpfSxlLmZvckVhY2g9ZnVuY3Rpb24odCxlKXt2YXIgaSxvO2lmKEFycmF5LmlzQXJyYXkodCkpZm9yKGk9MCxvPXQubGVuZ3RoO28+aTtpKyspZSh0W2ldLGksdCk7ZWxzZSBmb3IoaSBpbiB0KXQuaGFzT3duUHJvcGVydHkoaSkmJmUodFtpXSxpLHQpfSxlLnRvQXJyYXk9ZnVuY3Rpb24odCl7dmFyIGU9W107Zm9yKHZhciBpIGluIHQpdC5oYXNPd25Qcm9wZXJ0eShpKSYmZS5wdXNoKHRbaV0pO3JldHVybiBlfSxlLnVwZGF0ZVByb3BlcnR5PWZ1bmN0aW9uKHQsZSxpKXtyZXR1cm4gdFtlXSE9PWk/KHRbZV09aSwhMCk6ITF9LGUudGhyb3R0bGU9ZnVuY3Rpb24odCxlKXt2YXIgaT1udWxsLG89ITE7cmV0dXJuIGZ1bmN0aW9uIG4oKXtpP289ITA6KG89ITEsdCgpLGk9c2V0VGltZW91dChmdW5jdGlvbigpe2k9bnVsbCxvJiZuKCl9LGUpKX19LGUuYWRkRXZlbnRMaXN0ZW5lcj1mdW5jdGlvbih0LGUsaSxvKXt0LmFkZEV2ZW50TGlzdGVuZXI/KHZvaWQgMD09PW8mJihvPSExKSwibW91c2V3aGVlbCI9PT1lJiZuYXZpZ2F0b3IudXNlckFnZW50LmluZGV4T2YoIkZpcmVmb3giKT49MCYmKGU9IkRPTU1vdXNlU2Nyb2xsIiksdC5hZGRFdmVudExpc3RlbmVyKGUsaSxvKSk6dC5hdHRhY2hFdmVudCgib24iK2UsaSl9LGUucmVtb3ZlRXZlbnRMaXN0ZW5lcj1mdW5jdGlvbih0LGUsaSxvKXt0LnJlbW92ZUV2ZW50TGlzdGVuZXI/KHZvaWQgMD09PW8mJihvPSExKSwibW91c2V3aGVlbCI9PT1lJiZuYXZpZ2F0b3IudXNlckFnZW50LmluZGV4T2YoIkZpcmVmb3giKT49MCYmKGU9IkRPTU1vdXNlU2Nyb2xsIiksdC5yZW1vdmVFdmVudExpc3RlbmVyKGUsaSxvKSk6dC5kZXRhY2hFdmVudCgib24iK2UsaSl9LGUucHJldmVudERlZmF1bHQ9ZnVuY3Rpb24odCl7dHx8KHQ9d2luZG93LmV2ZW50KSx0LnByZXZlbnREZWZhdWx0P3QucHJldmVudERlZmF1bHQoKTp0LnJldHVyblZhbHVlPSExfSxlLmdldFRhcmdldD1mdW5jdGlvbih0KXt0fHwodD13aW5kb3cuZXZlbnQpO3ZhciBlO3JldHVybiB0LnRhcmdldD9lPXQudGFyZ2V0OnQuc3JjRWxlbWVudCYmKGU9dC5zcmNFbGVtZW50KSx2b2lkIDAhPWUubm9kZVR5cGUmJjM9PWUubm9kZVR5cGUmJihlPWUucGFyZW50Tm9kZSksZX0sZS5oYXNQYXJlbnQ9ZnVuY3Rpb24odCxlKXtmb3IodmFyIGk9dDtpOyl7aWYoaT09PWUpcmV0dXJuITA7aT1pLnBhcmVudE5vZGV9cmV0dXJuITF9LGUub3B0aW9uPXt9LGUub3B0aW9uLmFzQm9vbGVhbj1mdW5jdGlvbih0LGUpe3JldHVybiJmdW5jdGlvbiI9PXR5cGVvZiB0JiYodD10KCkpLG51bGwhPXQ/MCE9dDplfHxudWxsfSxlLm9wdGlvbi5hc051bWJlcj1mdW5jdGlvbih0LGUpe3JldHVybiJmdW5jdGlvbiI9PXR5cGVvZiB0JiYodD10KCkpLG51bGwhPXQ/TnVtYmVyKHQpfHxlfHxudWxsOmV8fG51bGx9LGUub3B0aW9uLmFzU3RyaW5nPWZ1bmN0aW9uKHQsZSl7cmV0dXJuImZ1bmN0aW9uIj09dHlwZW9mIHQmJih0PXQoKSksbnVsbCE9dD9TdHJpbmcodCk6ZXx8bnVsbH0sZS5vcHRpb24uYXNTaXplPWZ1bmN0aW9uKHQsaSl7cmV0dXJuImZ1bmN0aW9uIj09dHlwZW9mIHQmJih0PXQoKSksZS5pc1N0cmluZyh0KT90OmUuaXNOdW1iZXIodCk/dCsicHgiOml8fG51bGx9LGUub3B0aW9uLmFzRWxlbWVudD1mdW5jdGlvbih0LGUpe3JldHVybiJmdW5jdGlvbiI9PXR5cGVvZiB0JiYodD10KCkpLHR8fGV8fG51bGx9LGUuaGV4VG9SR0I9ZnVuY3Rpb24odCl7dmFyIGU9L14jPyhbYS1mXGRdKShbYS1mXGRdKShbYS1mXGRdKSQvaTt0PXQucmVwbGFjZShlLGZ1bmN0aW9uKHQsZSxpLG8pe3JldHVybiBlK2UraStpK28rb30pO3ZhciBpPS9eIz8oW2EtZlxkXXsyfSkoW2EtZlxkXXsyfSkoW2EtZlxkXXsyfSkkL2kuZXhlYyh0KTtyZXR1cm4gaT97cjpwYXJzZUludChpWzFdLDE2KSxnOnBhcnNlSW50KGlbMl0sMTYpLGI6cGFyc2VJbnQoaVszXSwxNil9Om51bGx9LGUub3ZlcnJpZGVPcGFjaXR5PWZ1bmN0aW9uKHQsaSl7aWYoLTEhPXQuaW5kZXhPZigicmdiYSIpKXJldHVybiB0O2lmKC0xIT10LmluZGV4T2YoInJnYiIpKXt2YXIgbz10LnN1YnN0cih0LmluZGV4T2YoIigiKSsxKS5yZXBsYWNlKCIpIiwiIikuc3BsaXQoIiwiKTtyZXR1cm4icmdiYSgiK29bMF0rIiwiK29bMV0rIiwiK29bMl0rIiwiK2krIikifXZhciBvPWUuaGV4VG9SR0IodCk7cmV0dXJuIG51bGw9PW8/dDoicmdiYSgiK28ucisiLCIrby5nKyIsIitvLmIrIiwiK2krIikifSxlLlJHQlRvSGV4PWZ1bmN0aW9uKHQsZSxpKXtyZXR1cm4iIyIrKCgxPDwyNCkrKHQ8PDE2KSsoZTw8OCkraSkudG9TdHJpbmcoMTYpLnNsaWNlKDEpfSxlLnBhcnNlQ29sb3I9ZnVuY3Rpb24odCl7dmFyIGk7aWYoZS5pc1N0cmluZyh0KT09PSEwKXtpZihlLmlzVmFsaWRSR0IodCk9PT0hMCl7dmFyIG89dC5zdWJzdHIoNCkuc3Vic3RyKDAsdC5sZW5ndGgtNSkuc3BsaXQoIiwiKS5tYXAoZnVuY3Rpb24odCl7cmV0dXJuIHBhcnNlSW50KHQpfSk7dD1lLlJHQlRvSGV4KG9bMF0sb1sxXSxvWzJdKX1pZihlLmlzVmFsaWRIZXgodCk9PT0hMCl7dmFyIG49ZS5oZXhUb0hTVih0KSxzPXtoOm4uaCxzOi44Km4ucyx2Ok1hdGgubWluKDEsMS4wMipuLnYpfSxyPXtoOm4uaCxzOk1hdGgubWluKDEsMS4yNSpuLnMpLHY6Ljgqbi52fSxhPWUuSFNWVG9IZXgoci5oLHIucyxyLnYpLGg9ZS5IU1ZUb0hleChzLmgscy5zLHMudik7aT17YmFja2dyb3VuZDp0LGJvcmRlcjphLGhpZ2hsaWdodDp7YmFja2dyb3VuZDpoLGJvcmRlcjphfSxob3Zlcjp7YmFja2dyb3VuZDpoLGJvcmRlcjphfX19ZWxzZSBpPXtiYWNrZ3JvdW5kOnQsYm9yZGVyOnQsaGlnaGxpZ2h0OntiYWNrZ3JvdW5kOnQsYm9yZGVyOnR9LGhvdmVyOntiYWNrZ3JvdW5kOnQsYm9yZGVyOnR9fX1lbHNlIGk9e30saS5iYWNrZ3JvdW5kPXQuYmFja2dyb3VuZHx8dm9pZCAwLGkuYm9yZGVyPXQuYm9yZGVyfHx2b2lkIDAsZS5pc1N0cmluZyh0LmhpZ2hsaWdodCk/aS5oaWdobGlnaHQ9e2JvcmRlcjp0LmhpZ2hsaWdodCxiYWNrZ3JvdW5kOnQuaGlnaGxpZ2h0fTooaS5oaWdobGlnaHQ9e30saS5oaWdobGlnaHQuYmFja2dyb3VuZD10LmhpZ2hsaWdodCYmdC5oaWdobGlnaHQuYmFja2dyb3VuZHx8dm9pZCAwLGkuaGlnaGxpZ2h0LmJvcmRlcj10LmhpZ2hsaWdodCYmdC5oaWdobGlnaHQuYm9yZGVyfHx2b2lkIDApLGUuaXNTdHJpbmcodC5ob3Zlcik/aS5ob3Zlcj17Ym9yZGVyOnQuaG92ZXIsYmFja2dyb3VuZDp0LmhvdmVyfTooaS5ob3Zlcj17fSxpLmhvdmVyLmJhY2tncm91bmQ9dC5ob3ZlciYmdC5ob3Zlci5iYWNrZ3JvdW5kfHx2b2lkIDAsaS5ob3Zlci5ib3JkZXI9dC5ob3ZlciYmdC5ob3Zlci5ib3JkZXJ8fHZvaWQgMCk7cmV0dXJuIGl9LGUuUkdCVG9IU1Y9ZnVuY3Rpb24odCxlLGkpe3QvPTI1NSxlLz0yNTUsaS89MjU1O3ZhciBvPU1hdGgubWluKHQsTWF0aC5taW4oZSxpKSksbj1NYXRoLm1heCh0LE1hdGgubWF4KGUsaSkpO2lmKG89PW4pcmV0dXJue2g6MCxzOjAsdjpvfTt2YXIgcz10PT1vP2UtaTppPT1vP3QtZTppLXQscj10PT1vPzM6aT09bz8xOjUsYT02MCooci1zLyhuLW8pKS8zNjAsaD0obi1vKS9uLGQ9bjtyZXR1cm57aDphLHM6aCx2OmR9fTt2YXIgcj17c3BsaXQ6ZnVuY3Rpb24odCl7dmFyIGU9e307cmV0dXJuIHQuc3BsaXQoIjsiKS5mb3JFYWNoKGZ1bmN0aW9uKHQpe2lmKCIiIT10LnRyaW0oKSl7dmFyIGk9dC5zcGxpdCgiOiIpLG89aVswXS50cmltKCksbj1pWzFdLnRyaW0oKTtlW29dPW59fSksZX0sam9pbjpmdW5jdGlvbih0KXtyZXR1cm4gT2JqZWN0LmtleXModCkubWFwKGZ1bmN0aW9uKGUpe3JldHVybiBlKyI6ICIrdFtlXX0pLmpvaW4oIjsgIil9fTtlLmFkZENzc1RleHQ9ZnVuY3Rpb24odCxpKXt2YXIgbz1yLnNwbGl0KHQuc3R5bGUuY3NzVGV4dCksbj1yLnNwbGl0KGkpLHM9ZS5leHRlbmQobyxuKTt0LnN0eWxlLmNzc1RleHQ9ci5qb2luKHMpfSxlLnJlbW92ZUNzc1RleHQ9ZnVuY3Rpb24odCxlKXt2YXIgaT1yLnNwbGl0KHQuc3R5bGUuY3NzVGV4dCksbz1yLnNwbGl0KGUpO2Zvcih2YXIgbiBpbiBvKW8uaGFzT3duUHJvcGVydHkobikmJmRlbGV0ZSBpW25dO3Quc3R5bGUuY3NzVGV4dD1yLmpvaW4oaSl9LGUuSFNWVG9SR0I9ZnVuY3Rpb24odCxlLGkpe3ZhciBvLG4scyxyPU1hdGguZmxvb3IoNip0KSxhPTYqdC1yLGg9aSooMS1lKSxkPWkqKDEtYSplKSxsPWkqKDEtKDEtYSkqZSk7c3dpdGNoKHIlNil7Y2FzZSAwOm89aSxuPWwscz1oO2JyZWFrO2Nhc2UgMTpvPWQsbj1pLHM9aDticmVhaztjYXNlIDI6bz1oLG49aSxzPWw7YnJlYWs7Y2FzZSAzOm89aCxuPWQscz1pO2JyZWFrO2Nhc2UgNDpvPWwsbj1oLHM9aTticmVhaztjYXNlIDU6bz1pLG49aCxzPWR9cmV0dXJue3I6TWF0aC5mbG9vcigyNTUqbyksZzpNYXRoLmZsb29yKDI1NSpuKSxiOk1hdGguZmxvb3IoMjU1KnMpfX0sZS5IU1ZUb0hleD1mdW5jdGlvbih0LGksbyl7dmFyIG49ZS5IU1ZUb1JHQih0LGksbyk7cmV0dXJuIGUuUkdCVG9IZXgobi5yLG4uZyxuLmIpfSxlLmhleFRvSFNWPWZ1bmN0aW9uKHQpe3ZhciBpPWUuaGV4VG9SR0IodCk7cmV0dXJuIGUuUkdCVG9IU1YoaS5yLGkuZyxpLmIpfSxlLmlzVmFsaWRIZXg9ZnVuY3Rpb24odCl7dmFyIGU9LyheI1swLTlBLUZdezZ9JCl8KF4jWzAtOUEtRl17M30kKS9pLnRlc3QodCk7cmV0dXJuIGV9LGUuaXNWYWxpZFJHQj1mdW5jdGlvbih0KXt0PXQucmVwbGFjZSgiICIsIiIpO3ZhciBlPS9yZ2JcKChcZHsxLDN9KSwoXGR7MSwzfSksKFxkezEsM30pXCkvaS50ZXN0KHQpO3JldHVybiBlfSxlLmlzVmFsaWRSR0JBPWZ1bmN0aW9uKHQpe3Q9dC5yZXBsYWNlKCIgIiwiIik7dmFyIGU9L3JnYmFcKChcZHsxLDN9KSwoXGR7MSwzfSksKFxkezEsM30pLCguezEsM30pXCkvaS50ZXN0KHQpO3JldHVybiBlfSxlLnNlbGVjdGl2ZUJyaWRnZU9iamVjdD1mdW5jdGlvbih0LGkpe2lmKCJvYmplY3QiPT10eXBlb2YgaSl7Zm9yKHZhciBvPU9iamVjdC5jcmVhdGUoaSksbj0wO248dC5sZW5ndGg7bisrKWkuaGFzT3duUHJvcGVydHkodFtuXSkmJiJvYmplY3QiPT10eXBlb2YgaVt0W25dXSYmKG9bdFtuXV09ZS5icmlkZ2VPYmplY3QoaVt0W25dXSkpO3JldHVybiBvfXJldHVybiBudWxsfSxlLmJyaWRnZU9iamVjdD1mdW5jdGlvbih0KXtpZigib2JqZWN0Ij09dHlwZW9mIHQpe3ZhciBpPU9iamVjdC5jcmVhdGUodCk7Zm9yKHZhciBvIGluIHQpdC5oYXNPd25Qcm9wZXJ0eShvKSYmIm9iamVjdCI9PXR5cGVvZiB0W29dJiYoaVtvXT1lLmJyaWRnZU9iamVjdCh0W29dKSk7cmV0dXJuIGl9cmV0dXJuIG51bGx9LGUuaW5zZXJ0U29ydD1mdW5jdGlvbih0LGUpe2Zvcih2YXIgaT0wO2k8dC5sZW5ndGg7aSsrKXtmb3IodmFyIG89dFtpXSxuPWk7bj4wJiZlKG8sdFtuLTFdKTwwO24tLSl0W25dPXRbbi0xXTt0W25dPW99cmV0dXJuIHR9LGUubWVyZ2VPcHRpb25zPWZ1bmN0aW9uKHQsZSxpKXt2YXIgbz0oYXJndW1lbnRzLmxlbmd0aDw9M3x8dm9pZCAwPT09YXJndW1lbnRzWzNdPyExOmFyZ3VtZW50c1szXSxhcmd1bWVudHMubGVuZ3RoPD00fHx2b2lkIDA9PT1hcmd1bWVudHNbNF0/e306YXJndW1lbnRzWzRdKTtpZihudWxsPT09ZVtpXSl0W2ldPU9iamVjdC5jcmVhdGUob1tpXSk7ZWxzZSBpZih2b2lkIDAhPT1lW2ldKWlmKCJib29sZWFuIj09dHlwZW9mIGVbaV0pdFtpXS5lbmFibGVkPWVbaV07ZWxzZXt2b2lkIDA9PT1lW2ldLmVuYWJsZWQmJih0W2ldLmVuYWJsZWQ9ITApO2Zvcih2YXIgbiBpbiBlW2ldKWVbaV0uaGFzT3duUHJvcGVydHkobikmJih0W2ldW25dPWVbaV1bbl0pfX0sZS5iaW5hcnlTZWFyY2hDdXN0b209ZnVuY3Rpb24odCxlLGksbyl7Zm9yKHZhciBuPTFlNCxzPTAscj0wLGE9dC5sZW5ndGgtMTthPj1yJiZuPnM7KXt2YXIgaD1NYXRoLmZsb29yKChyK2EpLzIpLGQ9dFtoXSxsPXZvaWQgMD09PW8/ZFtpXTpkW2ldW29dLHU9ZShsKTtpZigwPT11KXJldHVybiBoOy0xPT11P3I9aCsxOmE9aC0xLHMrK31yZXR1cm4tMX0sZS5iaW5hcnlTZWFyY2hWYWx1ZT1mdW5jdGlvbih0LGUsaSxvKXtmb3IodmFyIG4scyxyLGEsaD0xZTQsZD0wLGw9MCx1PXQubGVuZ3RoLTE7dT49bCYmaD5kOyl7aWYoYT1NYXRoLmZsb29yKC41Kih1K2wpKSxuPXRbTWF0aC5tYXgoMCxhLTEpXVtpXSxzPXRbYV1baV0scj10W01hdGgubWluKHQubGVuZ3RoLTEsYSsxKV1baV0scz09ZSlyZXR1cm4gYTtpZihlPm4mJnM+ZSlyZXR1cm4iYmVmb3JlIj09bz9NYXRoLm1heCgwLGEtMSk6YTtpZihlPnMmJnI+ZSlyZXR1cm4iYmVmb3JlIj09bz9hOk1hdGgubWluKHQubGVuZ3RoLTEsYSsxKTtlPnM/bD1hKzE6dT1hLTEsZCsrfXJldHVybi0xfSxlLmVhc2luZ0Z1bmN0aW9ucz17bGluZWFyOmZ1bmN0aW9uKHQpe3JldHVybiB0fSxlYXNlSW5RdWFkOmZ1bmN0aW9uKHQpe3JldHVybiB0KnR9LGVhc2VPdXRRdWFkOmZ1bmN0aW9uKHQpe3JldHVybiB0KigyLXQpfSxlYXNlSW5PdXRRdWFkOmZ1bmN0aW9uKHQpe3JldHVybi41PnQ/Mip0KnQ6LTErKDQtMip0KSp0fSxlYXNlSW5DdWJpYzpmdW5jdGlvbih0KXtyZXR1cm4gdCp0KnR9LGVhc2VPdXRDdWJpYzpmdW5jdGlvbih0KXtyZXR1cm4tLXQqdCp0KzF9LGVhc2VJbk91dEN1YmljOmZ1bmN0aW9uKHQpe3JldHVybi41PnQ/NCp0KnQqdDoodC0xKSooMip0LTIpKigyKnQtMikrMX0sZWFzZUluUXVhcnQ6ZnVuY3Rpb24odCl7cmV0dXJuIHQqdCp0KnR9LGVhc2VPdXRRdWFydDpmdW5jdGlvbih0KXtyZXR1cm4gMS0gLS10KnQqdCp0fSxlYXNlSW5PdXRRdWFydDpmdW5jdGlvbih0KXtyZXR1cm4uNT50PzgqdCp0KnQqdDoxLTgqLS10KnQqdCp0fSxlYXNlSW5RdWludDpmdW5jdGlvbih0KXtyZXR1cm4gdCp0KnQqdCp0fSxlYXNlT3V0UXVpbnQ6ZnVuY3Rpb24odCl7cmV0dXJuIDErLS10KnQqdCp0KnR9LGVhc2VJbk91dFF1aW50OmZ1bmN0aW9uKHQpe3JldHVybi41PnQ/MTYqdCp0KnQqdCp0OjErMTYqLS10KnQqdCp0KnR9fX0sZnVuY3Rpb24odCxlLGkpe3QuZXhwb3J0cz0idW5kZWZpbmVkIiE9dHlwZW9mIHdpbmRvdyYmd2luZG93Lm1vbWVudHx8aSgzKX0sZnVuY3Rpb24odCxlLGkpeyhmdW5jdGlvbih0KXshZnVuY3Rpb24oZSxpKXt0LmV4cG9ydHM9aSgpfSh0aGlzLGZ1bmN0aW9uKCl7ZnVuY3Rpb24gZSgpe3JldHVybiBZaS5hcHBseShudWxsLGFyZ3VtZW50cyl9ZnVuY3Rpb24gaSh0KXtZaT10fWZ1bmN0aW9uIG8odCl7cmV0dXJuIltvYmplY3QgQXJyYXldIj09PU9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbCh0KX1mdW5jdGlvbiBuKHQpe3JldHVybiB0IGluc3RhbmNlb2YgRGF0ZXx8IltvYmplY3QgRGF0ZV0iPT09T2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKHQpfWZ1bmN0aW9uIHModCxlKXt2YXIgaSxvPVtdO2ZvcihpPTA7aTx0Lmxlbmd0aDsrK2kpby5wdXNoKGUodFtpXSxpKSk7cmV0dXJuIG99ZnVuY3Rpb24gcih0LGUpe3JldHVybiBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwodCxlKX1mdW5jdGlvbiBhKHQsZSl7Zm9yKHZhciBpIGluIGUpcihlLGkpJiYodFtpXT1lW2ldKTtyZXR1cm4gcihlLCJ0b1N0cmluZyIpJiYodC50b1N0cmluZz1lLnRvU3RyaW5nKSxyKGUsInZhbHVlT2YiKSYmKHQudmFsdWVPZj1lLnZhbHVlT2YpLHR9ZnVuY3Rpb24gaCh0LGUsaSxvKXtyZXR1cm4gRHQodCxlLGksbywhMCkudXRjKCl9ZnVuY3Rpb24gZCgpe3JldHVybntlbXB0eTohMSx1bnVzZWRUb2tlbnM6W10sdW51c2VkSW5wdXQ6W10sb3ZlcmZsb3c6LTIsY2hhcnNMZWZ0T3ZlcjowLG51bGxJbnB1dDohMSxpbnZhbGlkTW9udGg6bnVsbCxpbnZhbGlkRm9ybWF0OiExLHVzZXJJbnZhbGlkYXRlZDohMSxpc286ITF9fWZ1bmN0aW9uIGwodCl7cmV0dXJuIG51bGw9PXQuX3BmJiYodC5fcGY9ZCgpKSx0Ll9wZn1mdW5jdGlvbiB1KHQpe2lmKG51bGw9PXQuX2lzVmFsaWQpe3ZhciBlPWwodCk7dC5faXNWYWxpZD0hKGlzTmFOKHQuX2QuZ2V0VGltZSgpKXx8IShlLm92ZXJmbG93PDApfHxlLmVtcHR5fHxlLmludmFsaWRNb250aHx8ZS5pbnZhbGlkV2Vla2RheXx8ZS5udWxsSW5wdXR8fGUuaW52YWxpZEZvcm1hdHx8ZS51c2VySW52YWxpZGF0ZWQpLHQuX3N0cmljdCYmKHQuX2lzVmFsaWQ9dC5faXNWYWxpZCYmMD09PWUuY2hhcnNMZWZ0T3ZlciYmMD09PWUudW51c2VkVG9rZW5zLmxlbmd0aCYmdm9pZCAwPT09ZS5iaWdIb3VyKX1yZXR1cm4gdC5faXNWYWxpZH1mdW5jdGlvbiBjKHQpe3ZhciBlPWgoTmFOKTtyZXR1cm4gbnVsbCE9dD9hKGwoZSksdCk6bChlKS51c2VySW52YWxpZGF0ZWQ9ITAsZX1mdW5jdGlvbiBwKHQpe3JldHVybiB2b2lkIDA9PT10fWZ1bmN0aW9uIGYodCxlKXt2YXIgaSxvLG47aWYocChlLl9pc0FNb21lbnRPYmplY3QpfHwodC5faXNBTW9tZW50T2JqZWN0PWUuX2lzQU1vbWVudE9iamVjdCkscChlLl9pKXx8KHQuX2k9ZS5faSkscChlLl9mKXx8KHQuX2Y9ZS5fZikscChlLl9sKXx8KHQuX2w9ZS5fbCkscChlLl9zdHJpY3QpfHwodC5fc3RyaWN0PWUuX3N0cmljdCkscChlLl90em0pfHwodC5fdHptPWUuX3R6bSkscChlLl9pc1VUQyl8fCh0Ll9pc1VUQz1lLl9pc1VUQykscChlLl9vZmZzZXQpfHwodC5fb2Zmc2V0PWUuX29mZnNldCkscChlLl9wZil8fCh0Ll9wZj1sKGUpKSxwKGUuX2xvY2FsZSl8fCh0Ll9sb2NhbGU9ZS5fbG9jYWxlKSxWaS5sZW5ndGg+MClmb3IoaSBpbiBWaSlvPVZpW2ldLG49ZVtvXSxwKG4pfHwodFtvXT1uKTtyZXR1cm4gdH1mdW5jdGlvbiBtKHQpe2YodGhpcyx0KSx0aGlzLl9kPW5ldyBEYXRlKG51bGwhPXQuX2Q/dC5fZC5nZXRUaW1lKCk6TmFOKSxVaT09PSExJiYoVWk9ITAsZS51cGRhdGVPZmZzZXQodGhpcyksVWk9ITEpfWZ1bmN0aW9uIHYodCl7cmV0dXJuIHQgaW5zdGFuY2VvZiBtfHxudWxsIT10JiZudWxsIT10Ll9pc0FNb21lbnRPYmplY3R9ZnVuY3Rpb24gZyh0KXtyZXR1cm4gMD50P01hdGguY2VpbCh0KTpNYXRoLmZsb29yKHQpfWZ1bmN0aW9uIHkodCl7dmFyIGU9K3QsaT0wO3JldHVybiAwIT09ZSYmaXNGaW5pdGUoZSkmJihpPWcoZSkpLGl9ZnVuY3Rpb24gYih0LGUsaSl7dmFyIG8sbj1NYXRoLm1pbih0Lmxlbmd0aCxlLmxlbmd0aCkscz1NYXRoLmFicyh0Lmxlbmd0aC1lLmxlbmd0aCkscj0wO2ZvcihvPTA7bj5vO28rKykoaSYmdFtvXSE9PWVbb118fCFpJiZ5KHRbb10pIT09eShlW29dKSkmJnIrKztyZXR1cm4gcitzfWZ1bmN0aW9uIHcoKXt9ZnVuY3Rpb24gXyh0KXtyZXR1cm4gdD90LnRvTG93ZXJDYXNlKCkucmVwbGFjZSgiXyIsIi0iKTp0fWZ1bmN0aW9uIHgodCl7Zm9yKHZhciBlLGksbyxuLHM9MDtzPHQubGVuZ3RoOyl7Zm9yKG49Xyh0W3NdKS5zcGxpdCgiLSIpLGU9bi5sZW5ndGgsaT1fKHRbcysxXSksaT1pP2kuc3BsaXQoIi0iKTpudWxsO2U+MDspe2lmKG89ayhuLnNsaWNlKDAsZSkuam9pbigiLSIpKSlyZXR1cm4gbztpZihpJiZpLmxlbmd0aD49ZSYmYihuLGksITApPj1lLTEpYnJlYWs7ZS0tfXMrK31yZXR1cm4gbnVsbH1mdW5jdGlvbiBrKGUpe3ZhciBpPW51bGw7aWYoIXFpW2VdJiYhcCh0KSYmdCYmdC5leHBvcnRzKXRyeXtpPUdpLl9hYmJyLCFmdW5jdGlvbigpe3ZhciB0PW5ldyBFcnJvcignQ2Fubm90IGZpbmQgbW9kdWxlICIuL2xvY2FsZSInKTt0aHJvdyB0LmNvZGU9Ik1PRFVMRV9OT1RfRk9VTkQiLHR9KCksTyhpKX1jYXRjaChvKXt9cmV0dXJuIHFpW2VdfWZ1bmN0aW9uIE8odCxlKXt2YXIgaTtyZXR1cm4gdCYmKGk9cChlKT9EKHQpOk0odCxlKSxpJiYoR2k9aSkpLEdpLl9hYmJyfWZ1bmN0aW9uIE0odCxlKXtyZXR1cm4gbnVsbCE9PWU/KGUuYWJicj10LHFpW3RdPXFpW3RdfHxuZXcgdyxxaVt0XS5zZXQoZSksTyh0KSxxaVt0XSk6KGRlbGV0ZSBxaVt0XSxudWxsKX1mdW5jdGlvbiBEKHQpe3ZhciBlO2lmKHQmJnQuX2xvY2FsZSYmdC5fbG9jYWxlLl9hYmJyJiYodD10Ll9sb2NhbGUuX2FiYnIpLCF0KXJldHVybiBHaTtpZighbyh0KSl7aWYoZT1rKHQpKXJldHVybiBlO3Q9W3RdfXJldHVybiB4KHQpfWZ1bmN0aW9uIEModCxlKXt2YXIgaT10LnRvTG93ZXJDYXNlKCk7WGlbaV09WGlbaSsicyJdPVhpW2VdPXR9ZnVuY3Rpb24gVCh0KXtyZXR1cm4ic3RyaW5nIj09dHlwZW9mIHQ/WGlbdF18fFhpW3QudG9Mb3dlckNhc2UoKV06dm9pZCAwfWZ1bmN0aW9uIEUodCl7dmFyIGUsaSxvPXt9O2ZvcihpIGluIHQpcih0LGkpJiYoZT1UKGkpLGUmJihvW2VdPXRbaV0pKTtyZXR1cm4gb31mdW5jdGlvbiBTKHQpe3JldHVybiB0IGluc3RhbmNlb2YgRnVuY3Rpb258fCJbb2JqZWN0IEZ1bmN0aW9uXSI9PT1PYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwodCl9ZnVuY3Rpb24gUCh0LGkpe3JldHVybiBmdW5jdGlvbihvKXtyZXR1cm4gbnVsbCE9bz8oTih0aGlzLHQsbyksZS51cGRhdGVPZmZzZXQodGhpcyxpKSx0aGlzKTpJKHRoaXMsdCl9fWZ1bmN0aW9uIEkodCxlKXtyZXR1cm4gdC5pc1ZhbGlkKCk/dC5fZFsiZ2V0IisodC5faXNVVEM/IlVUQyI6IiIpK2VdKCk6TmFOfWZ1bmN0aW9uIE4odCxlLGkpe3QuaXNWYWxpZCgpJiZ0Ll9kWyJzZXQiKyh0Ll9pc1VUQz8iVVRDIjoiIikrZV0oaSl9ZnVuY3Rpb24geih0LGUpe3ZhciBpO2lmKCJvYmplY3QiPT10eXBlb2YgdClmb3IoaSBpbiB0KXRoaXMuc2V0KGksdFtpXSk7ZWxzZSBpZih0PVQodCksUyh0aGlzW3RdKSlyZXR1cm4gdGhpc1t0XShlKTtyZXR1cm4gdGhpc31mdW5jdGlvbiBMKHQsZSxpKXt2YXIgbz0iIitNYXRoLmFicyh0KSxuPWUtby5sZW5ndGgscz10Pj0wO3JldHVybihzP2k/IisiOiIiOiItIikrTWF0aC5wb3coMTAsTWF0aC5tYXgoMCxuKSkudG9TdHJpbmcoKS5zdWJzdHIoMSkrb31mdW5jdGlvbiBBKHQsZSxpLG8pe3ZhciBuPW87InN0cmluZyI9PXR5cGVvZiBvJiYobj1mdW5jdGlvbigpe3JldHVybiB0aGlzW29dKCl9KSx0JiYoSmlbdF09biksZSYmKEppW2VbMF1dPWZ1bmN0aW9uKCl7cmV0dXJuIEwobi5hcHBseSh0aGlzLGFyZ3VtZW50cyksZVsxXSxlWzJdKX0pLGkmJihKaVtpXT1mdW5jdGlvbigpe3JldHVybiB0aGlzLmxvY2FsZURhdGEoKS5vcmRpbmFsKG4uYXBwbHkodGhpcyxhcmd1bWVudHMpLHQpfSl9ZnVuY3Rpb24gQih0KXtyZXR1cm4gdC5tYXRjaCgvXFtbXHNcU10vKT90LnJlcGxhY2UoL15cW3xcXSQvZywiIik6dC5yZXBsYWNlKC9cXC9nLCIiKX1mdW5jdGlvbiBGKHQpe3ZhciBlLGksbz10Lm1hdGNoKFppKTtmb3IoZT0wLGk9by5sZW5ndGg7aT5lO2UrKylKaVtvW2VdXT9vW2VdPUppW29bZV1dOm9bZV09QihvW2VdKTtyZXR1cm4gZnVuY3Rpb24obil7dmFyIHM9IiI7Zm9yKGU9MDtpPmU7ZSsrKXMrPW9bZV1pbnN0YW5jZW9mIEZ1bmN0aW9uP29bZV0uY2FsbChuLHQpOm9bZV07cmV0dXJuIHN9fWZ1bmN0aW9uIGoodCxlKXtyZXR1cm4gdC5pc1ZhbGlkKCk/KGU9UihlLHQubG9jYWxlRGF0YSgpKSwkaVtlXT0kaVtlXXx8RihlKSwkaVtlXSh0KSk6dC5sb2NhbGVEYXRhKCkuaW52YWxpZERhdGUoKX1mdW5jdGlvbiBSKHQsZSl7ZnVuY3Rpb24gaSh0KXtyZXR1cm4gZS5sb25nRGF0ZUZvcm1hdCh0KXx8dH12YXIgbz01O2ZvcihLaS5sYXN0SW5kZXg9MDtvPj0wJiZLaS50ZXN0KHQpOyl0PXQucmVwbGFjZShLaSxpKSxLaS5sYXN0SW5kZXg9MCxvLT0xO3JldHVybiB0fWZ1bmN0aW9uIEgodCxlLGkpe2dvW3RdPVMoZSk/ZTpmdW5jdGlvbih0KXtyZXR1cm4gdCYmaT9pOmV9fWZ1bmN0aW9uIFcodCxlKXtyZXR1cm4gcihnbyx0KT9nb1t0XShlLl9zdHJpY3QsZS5fbG9jYWxlKTpuZXcgUmVnRXhwKFkodCkpfWZ1bmN0aW9uIFkodCl7cmV0dXJuIHQucmVwbGFjZSgiXFwiLCIiKS5yZXBsYWNlKC9cXChcWyl8XFwoXF0pfFxbKFteXF1cW10qKVxdfFxcKC4pL2csZnVuY3Rpb24odCxlLGksbyxuKXtyZXR1cm4gZXx8aXx8b3x8bn0pLnJlcGxhY2UoL1stXC9cXF4kKis/LigpfFtcXXt9XS9nLCJcXCQmIil9ZnVuY3Rpb24gRyh0LGUpe3ZhciBpLG89ZTtmb3IoInN0cmluZyI9PXR5cGVvZiB0JiYodD1bdF0pLCJudW1iZXIiPT10eXBlb2YgZSYmKG89ZnVuY3Rpb24odCxpKXtpW2VdPXkodCl9KSxpPTA7aTx0Lmxlbmd0aDtpKyspeW9bdFtpXV09b31mdW5jdGlvbiBWKHQsZSl7Ryh0LGZ1bmN0aW9uKHQsaSxvLG4pe28uX3c9by5fd3x8e30sZSh0LG8uX3csbyxuKX0pfWZ1bmN0aW9uIFUodCxlLGkpe251bGwhPWUmJnIoeW8sdCkmJnlvW3RdKGUsaS5fYSxpLHQpfWZ1bmN0aW9uIHEodCxlKXtyZXR1cm4gbmV3IERhdGUoRGF0ZS5VVEModCxlKzEsMCkpLmdldFVUQ0RhdGUoKX1mdW5jdGlvbiBYKHQsZSl7cmV0dXJuIG8odGhpcy5fbW9udGhzKT90aGlzLl9tb250aHNbdC5tb250aCgpXTp0aGlzLl9tb250aHNbVG8udGVzdChlKT8iZm9ybWF0Ijoic3RhbmRhbG9uZSJdW3QubW9udGgoKV19ZnVuY3Rpb24gWih0LGUpe3JldHVybiBvKHRoaXMuX21vbnRoc1Nob3J0KT90aGlzLl9tb250aHNTaG9ydFt0Lm1vbnRoKCldOnRoaXMuX21vbnRoc1Nob3J0W1RvLnRlc3QoZSk/ImZvcm1hdCI6InN0YW5kYWxvbmUiXVt0Lm1vbnRoKCldfWZ1bmN0aW9uIEsodCxlLGkpe3ZhciBvLG4scztmb3IodGhpcy5fbW9udGhzUGFyc2V8fCh0aGlzLl9tb250aHNQYXJzZT1bXSx0aGlzLl9sb25nTW9udGhzUGFyc2U9W10sdGhpcy5fc2hvcnRNb250aHNQYXJzZT1bXSksbz0wOzEyPm87bysrKXtpZihuPWgoWzJlMyxvXSksaSYmIXRoaXMuX2xvbmdNb250aHNQYXJzZVtvXSYmKHRoaXMuX2xvbmdNb250aHNQYXJzZVtvXT1uZXcgUmVnRXhwKCJeIit0aGlzLm1vbnRocyhuLCIiKS5yZXBsYWNlKCIuIiwiIikrIiQiLCJpIiksdGhpcy5fc2hvcnRNb250aHNQYXJzZVtvXT1uZXcgUmVnRXhwKCJeIit0aGlzLm1vbnRoc1Nob3J0KG4sIiIpLnJlcGxhY2UoIi4iLCIiKSsiJCIsImkiKSksaXx8dGhpcy5fbW9udGhzUGFyc2Vbb118fChzPSJeIit0aGlzLm1vbnRocyhuLCIiKSsifF4iK3RoaXMubW9udGhzU2hvcnQobiwiIiksdGhpcy5fbW9udGhzUGFyc2Vbb109bmV3IFJlZ0V4cChzLnJlcGxhY2UoIi4iLCIiKSwiaSIpKSxpJiYiTU1NTSI9PT1lJiZ0aGlzLl9sb25nTW9udGhzUGFyc2Vbb10udGVzdCh0KSlyZXR1cm4gbztpZihpJiYiTU1NIj09PWUmJnRoaXMuX3Nob3J0TW9udGhzUGFyc2Vbb10udGVzdCh0KSlyZXR1cm4gbztpZighaSYmdGhpcy5fbW9udGhzUGFyc2Vbb10udGVzdCh0KSlyZXR1cm4gb319ZnVuY3Rpb24gJCh0LGUpe3ZhciBpO3JldHVybiB0LmlzVmFsaWQoKT8ic3RyaW5nIj09dHlwZW9mIGUmJihlPXQubG9jYWxlRGF0YSgpLm1vbnRoc1BhcnNlKGUpLCJudW1iZXIiIT10eXBlb2YgZSk/dDooaT1NYXRoLm1pbih0LmRhdGUoKSxxKHQueWVhcigpLGUpKSx0Ll9kWyJzZXQiKyh0Ll9pc1VUQz8iVVRDIjoiIikrIk1vbnRoIl0oZSxpKSx0KTp0fWZ1bmN0aW9uIEoodCl7cmV0dXJuIG51bGwhPXQ/KCQodGhpcyx0KSxlLnVwZGF0ZU9mZnNldCh0aGlzLCEwKSx0aGlzKTpJKHRoaXMsIk1vbnRoIil9ZnVuY3Rpb24gUSgpe3JldHVybiBxKHRoaXMueWVhcigpLHRoaXMubW9udGgoKSl9ZnVuY3Rpb24gdHQodCl7dmFyIGUsaT10Ll9hO3JldHVybiBpJiYtMj09PWwodCkub3ZlcmZsb3cmJihlPWlbd29dPDB8fGlbd29dPjExP3dvOmlbX29dPDF8fGlbX29dPnEoaVtib10saVt3b10pP19vOmlbeG9dPDB8fGlbeG9dPjI0fHwyND09PWlbeG9dJiYoMCE9PWlba29dfHwwIT09aVtPb118fDAhPT1pW01vXSk/eG86aVtrb108MHx8aVtrb10+NTk/a286aVtPb108MHx8aVtPb10+NTk/T286aVtNb108MHx8aVtNb10+OTk5P01vOi0xLGwodCkuX292ZXJmbG93RGF5T2ZZZWFyJiYoYm8+ZXx8ZT5fbykmJihlPV9vKSxsKHQpLl9vdmVyZmxvd1dlZWtzJiYtMT09PWUmJihlPURvKSxsKHQpLl9vdmVyZmxvd1dlZWtkYXkmJi0xPT09ZSYmKGU9Q28pLGwodCkub3ZlcmZsb3c9ZSksdH1mdW5jdGlvbiBldCh0KXtlLnN1cHByZXNzRGVwcmVjYXRpb25XYXJuaW5ncz09PSExJiYhcChjb25zb2xlKSYmY29uc29sZS53YXJuJiZjb25zb2xlLndhcm4oIkRlcHJlY2F0aW9uIHdhcm5pbmc6ICIrdCl9ZnVuY3Rpb24gaXQodCxlKXt2YXIgaT0hMDtyZXR1cm4gYShmdW5jdGlvbigpe3JldHVybiBpJiYoZXQodCsiXG5Bcmd1bWVudHM6ICIrQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYXJndW1lbnRzKS5qb2luKCIsICIpKyJcbiIrKG5ldyBFcnJvcikuc3RhY2spLGk9ITEpLGUuYXBwbHkodGhpcyxhcmd1bWVudHMpfSxlKX1mdW5jdGlvbiBvdCh0LGUpe1BvW3RdfHwoZXQoZSksUG9bdF09ITApfWZ1bmN0aW9uIG50KHQpe3ZhciBlLGksbyxuLHMscixhPXQuX2ksaD1Jby5leGVjKGEpfHxOby5leGVjKGEpO2lmKGgpe2ZvcihsKHQpLmlzbz0hMCxlPTAsaT1Mby5sZW5ndGg7aT5lO2UrKylpZihMb1tlXVsxXS5leGVjKGhbMV0pKXtuPUxvW2VdWzBdLG89TG9bZV1bMl0hPT0hMTticmVha31pZihudWxsPT1uKXJldHVybiB2b2lkKHQuX2lzVmFsaWQ9ITEpO2lmKGhbM10pe2ZvcihlPTAsaT1Bby5sZW5ndGg7aT5lO2UrKylpZihBb1tlXVsxXS5leGVjKGhbM10pKXtzPShoWzJdfHwiICIpK0FvW2VdWzBdO2JyZWFrfWlmKG51bGw9PXMpcmV0dXJuIHZvaWQodC5faXNWYWxpZD0hMSl9aWYoIW8mJm51bGwhPXMpcmV0dXJuIHZvaWQodC5faXNWYWxpZD0hMSk7aWYoaFs0XSl7aWYoIXpvLmV4ZWMoaFs0XSkpcmV0dXJuIHZvaWQodC5faXNWYWxpZD0hMSk7cj0iWiJ9dC5fZj1uKyhzfHwiIikrKHJ8fCIiKSxidCh0KX1lbHNlIHQuX2lzVmFsaWQ9ITF9ZnVuY3Rpb24gc3QodCl7dmFyIGk9Qm8uZXhlYyh0Ll9pKTtyZXR1cm4gbnVsbCE9PWk/dm9pZCh0Ll9kPW5ldyBEYXRlKCtpWzFdKSk6KG50KHQpLHZvaWQodC5faXNWYWxpZD09PSExJiYoZGVsZXRlIHQuX2lzVmFsaWQsZS5jcmVhdGVGcm9tSW5wdXRGYWxsYmFjayh0KSkpKX1mdW5jdGlvbiBydCh0LGUsaSxvLG4scyxyKXt2YXIgYT1uZXcgRGF0ZSh0LGUsaSxvLG4scyxyKTtyZXR1cm4gMTAwPnQmJnQ+PTAmJmlzRmluaXRlKGEuZ2V0RnVsbFllYXIoKSkmJmEuc2V0RnVsbFllYXIodCksYX1mdW5jdGlvbiBhdCh0KXt2YXIgZT1uZXcgRGF0ZShEYXRlLlVUQy5hcHBseShudWxsLGFyZ3VtZW50cykpO3JldHVybiAxMDA+dCYmdD49MCYmaXNGaW5pdGUoZS5nZXRVVENGdWxsWWVhcigpKSYmZS5zZXRVVENGdWxsWWVhcih0KSxlfWZ1bmN0aW9uIGh0KHQpe3JldHVybiBkdCh0KT8zNjY6MzY1fWZ1bmN0aW9uIGR0KHQpe3JldHVybiB0JTQ9PT0wJiZ0JTEwMCE9PTB8fHQlNDAwPT09MH1mdW5jdGlvbiBsdCgpe3JldHVybiBkdCh0aGlzLnllYXIoKSl9ZnVuY3Rpb24gdXQodCxlLGkpe3ZhciBvPTcrZS1pLG49KDcrYXQodCwwLG8pLmdldFVUQ0RheSgpLWUpJTc7cmV0dXJuLW4rby0xfWZ1bmN0aW9uIGN0KHQsZSxpLG8sbil7dmFyIHMscixhPSg3K2ktbyklNyxoPXV0KHQsbyxuKSxkPTErNyooZS0xKSthK2g7cmV0dXJuIDA+PWQ/KHM9dC0xLHI9aHQocykrZCk6ZD5odCh0KT8ocz10KzEscj1kLWh0KHQpKToocz10LHI9ZCkse3llYXI6cyxkYXlPZlllYXI6cn19ZnVuY3Rpb24gcHQodCxlLGkpe3ZhciBvLG4scz11dCh0LnllYXIoKSxlLGkpLHI9TWF0aC5mbG9vcigodC5kYXlPZlllYXIoKS1zLTEpLzcpKzE7cmV0dXJuIDE+cj8obj10LnllYXIoKS0xLG89citmdChuLGUsaSkpOnI+ZnQodC55ZWFyKCksZSxpKT8obz1yLWZ0KHQueWVhcigpLGUsaSksbj10LnllYXIoKSsxKToobj10LnllYXIoKSxvPXIpLHt3ZWVrOm8seWVhcjpufX1mdW5jdGlvbiBmdCh0LGUsaSl7dmFyIG89dXQodCxlLGkpLG49dXQodCsxLGUsaSk7cmV0dXJuKGh0KHQpLW8rbikvN31mdW5jdGlvbiBtdCh0LGUsaSl7cmV0dXJuIG51bGwhPXQ/dDpudWxsIT1lP2U6aX1mdW5jdGlvbiB2dCh0KXt2YXIgaT1uZXcgRGF0ZShlLm5vdygpKTtyZXR1cm4gdC5fdXNlVVRDP1tpLmdldFVUQ0Z1bGxZZWFyKCksaS5nZXRVVENNb250aCgpLGkuZ2V0VVRDRGF0ZSgpXTpbaS5nZXRGdWxsWWVhcigpLGkuZ2V0TW9udGgoKSxpLmdldERhdGUoKV19ZnVuY3Rpb24gZ3QodCl7dmFyIGUsaSxvLG4scz1bXTtpZighdC5fZCl7Zm9yKG89dnQodCksdC5fdyYmbnVsbD09dC5fYVtfb10mJm51bGw9PXQuX2Fbd29dJiZ5dCh0KSx0Ll9kYXlPZlllYXImJihuPW10KHQuX2FbYm9dLG9bYm9dKSx0Ll9kYXlPZlllYXI+aHQobikmJihsKHQpLl9vdmVyZmxvd0RheU9mWWVhcj0hMCksaT1hdChuLDAsdC5fZGF5T2ZZZWFyKSx0Ll9hW3dvXT1pLmdldFVUQ01vbnRoKCksdC5fYVtfb109aS5nZXRVVENEYXRlKCkpLGU9MDszPmUmJm51bGw9PXQuX2FbZV07KytlKXQuX2FbZV09c1tlXT1vW2VdO2Zvcig7Nz5lO2UrKyl0Ll9hW2VdPXNbZV09bnVsbD09dC5fYVtlXT8yPT09ZT8xOjA6dC5fYVtlXTsyND09PXQuX2FbeG9dJiYwPT09dC5fYVtrb10mJjA9PT10Ll9hW09vXSYmMD09PXQuX2FbTW9dJiYodC5fbmV4dERheT0hMCx0Ll9hW3hvXT0wKSx0Ll9kPSh0Ll91c2VVVEM/YXQ6cnQpLmFwcGx5KG51bGwscyksbnVsbCE9dC5fdHptJiZ0Ll9kLnNldFVUQ01pbnV0ZXModC5fZC5nZXRVVENNaW51dGVzKCktdC5fdHptKSx0Ll9uZXh0RGF5JiYodC5fYVt4b109MjQpfX1mdW5jdGlvbiB5dCh0KXt2YXIgZSxpLG8sbixzLHIsYSxoO2U9dC5fdyxudWxsIT1lLkdHfHxudWxsIT1lLld8fG51bGwhPWUuRT8ocz0xLHI9NCxpPW10KGUuR0csdC5fYVtib10scHQoQ3QoKSwxLDQpLnllYXIpLG89bXQoZS5XLDEpLG49bXQoZS5FLDEpLCgxPm58fG4+NykmJihoPSEwKSk6KHM9dC5fbG9jYWxlLl93ZWVrLmRvdyxyPXQuX2xvY2FsZS5fd2Vlay5kb3ksaT1tdChlLmdnLHQuX2FbYm9dLHB0KEN0KCkscyxyKS55ZWFyKSxvPW10KGUudywxKSxudWxsIT1lLmQ/KG49ZS5kLCgwPm58fG4+NikmJihoPSEwKSk6bnVsbCE9ZS5lPyhuPWUuZStzLChlLmU8MHx8ZS5lPjYpJiYoaD0hMCkpOm49cyksMT5vfHxvPmZ0KGkscyxyKT9sKHQpLl9vdmVyZmxvd1dlZWtzPSEwOm51bGwhPWg/bCh0KS5fb3ZlcmZsb3dXZWVrZGF5PSEwOihhPWN0KGksbyxuLHMsciksdC5fYVtib109YS55ZWFyLHQuX2RheU9mWWVhcj1hLmRheU9mWWVhcil9ZnVuY3Rpb24gYnQodCl7aWYodC5fZj09PWUuSVNPXzg2MDEpcmV0dXJuIHZvaWQgbnQodCk7dC5fYT1bXSxsKHQpLmVtcHR5PSEwO3ZhciBpLG8sbixzLHIsYT0iIit0Ll9pLGg9YS5sZW5ndGgsZD0wO2ZvcihuPVIodC5fZix0Ll9sb2NhbGUpLm1hdGNoKFppKXx8W10saT0wO2k8bi5sZW5ndGg7aSsrKXM9bltpXSxvPShhLm1hdGNoKFcocyx0KSl8fFtdKVswXSxvJiYocj1hLnN1YnN0cigwLGEuaW5kZXhPZihvKSksci5sZW5ndGg+MCYmbCh0KS51bnVzZWRJbnB1dC5wdXNoKHIpLGE9YS5zbGljZShhLmluZGV4T2Yobykrby5sZW5ndGgpLGQrPW8ubGVuZ3RoKSxKaVtzXT8obz9sKHQpLmVtcHR5PSExOmwodCkudW51c2VkVG9rZW5zLnB1c2gocyksVShzLG8sdCkpOnQuX3N0cmljdCYmIW8mJmwodCkudW51c2VkVG9rZW5zLnB1c2gocyk7bCh0KS5jaGFyc0xlZnRPdmVyPWgtZCxhLmxlbmd0aD4wJiZsKHQpLnVudXNlZElucHV0LnB1c2goYSksbCh0KS5iaWdIb3VyPT09ITAmJnQuX2FbeG9dPD0xMiYmdC5fYVt4b10+MCYmKGwodCkuYmlnSG91cj12b2lkIDApLHQuX2FbeG9dPXd0KHQuX2xvY2FsZSx0Ll9hW3hvXSx0Ll9tZXJpZGllbSksZ3QodCksdHQodCl9ZnVuY3Rpb24gd3QodCxlLGkpe3ZhciBvO3JldHVybiBudWxsPT1pP2U6bnVsbCE9dC5tZXJpZGllbUhvdXI/dC5tZXJpZGllbUhvdXIoZSxpKTpudWxsIT10LmlzUE0/KG89dC5pc1BNKGkpLG8mJjEyPmUmJihlKz0xMiksb3x8MTIhPT1lfHwoZT0wKSxlKTplfWZ1bmN0aW9uIF90KHQpe3ZhciBlLGksbyxuLHM7aWYoMD09PXQuX2YubGVuZ3RoKXJldHVybiBsKHQpLmludmFsaWRGb3JtYXQ9ITAsdm9pZCh0Ll9kPW5ldyBEYXRlKE5hTikpO2ZvcihuPTA7bjx0Ll9mLmxlbmd0aDtuKyspcz0wLGU9Zih7fSx0KSxudWxsIT10Ll91c2VVVEMmJihlLl91c2VVVEM9dC5fdXNlVVRDKSxlLl9mPXQuX2Zbbl0sYnQoZSksdShlKSYmKHMrPWwoZSkuY2hhcnNMZWZ0T3ZlcixzKz0xMCpsKGUpLnVudXNlZFRva2Vucy5sZW5ndGgsbChlKS5zY29yZT1zLChudWxsPT1vfHxvPnMpJiYobz1zLGk9ZSkpO2EodCxpfHxlKX1mdW5jdGlvbiB4dCh0KXtpZighdC5fZCl7dmFyIGU9RSh0Ll9pKTt0Ll9hPXMoW2UueWVhcixlLm1vbnRoLGUuZGF5fHxlLmRhdGUsZS5ob3VyLGUubWludXRlLGUuc2Vjb25kLGUubWlsbGlzZWNvbmRdLGZ1bmN0aW9uKHQpe3JldHVybiB0JiZwYXJzZUludCh0LDEwKX0pLGd0KHQpfX1mdW5jdGlvbiBrdCh0KXt2YXIgZT1uZXcgbSh0dChPdCh0KSkpO3JldHVybiBlLl9uZXh0RGF5JiYoZS5hZGQoMSwiZCIpLGUuX25leHREYXk9dm9pZCAwKSxlfWZ1bmN0aW9uIE90KHQpe3ZhciBlPXQuX2ksaT10Ll9mO3JldHVybiB0Ll9sb2NhbGU9dC5fbG9jYWxlfHxEKHQuX2wpLG51bGw9PT1lfHx2b2lkIDA9PT1pJiYiIj09PWU/Yyh7bnVsbElucHV0OiEwfSk6KCJzdHJpbmciPT10eXBlb2YgZSYmKHQuX2k9ZT10Ll9sb2NhbGUucHJlcGFyc2UoZSkpLHYoZSk/bmV3IG0odHQoZSkpOihvKGkpP190KHQpOmk/YnQodCk6bihlKT90Ll9kPWU6TXQodCksdSh0KXx8KHQuX2Q9bnVsbCksdCkpfWZ1bmN0aW9uIE10KHQpe3ZhciBpPXQuX2k7dm9pZCAwPT09aT90Ll9kPW5ldyBEYXRlKGUubm93KCkpOm4oaSk/dC5fZD1uZXcgRGF0ZSgraSk6InN0cmluZyI9PXR5cGVvZiBpP3N0KHQpOm8oaSk/KHQuX2E9cyhpLnNsaWNlKDApLGZ1bmN0aW9uKHQpe3JldHVybiBwYXJzZUludCh0LDEwKX0pLGd0KHQpKToib2JqZWN0Ij09dHlwZW9mIGk/eHQodCk6Im51bWJlciI9PXR5cGVvZiBpP3QuX2Q9bmV3IERhdGUoaSk6ZS5jcmVhdGVGcm9tSW5wdXRGYWxsYmFjayh0KX1mdW5jdGlvbiBEdCh0LGUsaSxvLG4pe3ZhciBzPXt9O3JldHVybiJib29sZWFuIj09dHlwZW9mIGkmJihvPWksaT12b2lkIDApLHMuX2lzQU1vbWVudE9iamVjdD0hMCxzLl91c2VVVEM9cy5faXNVVEM9bixzLl9sPWkscy5faT10LHMuX2Y9ZSxzLl9zdHJpY3Q9byxrdChzKX1mdW5jdGlvbiBDdCh0LGUsaSxvKXtyZXR1cm4gRHQodCxlLGksbywhMSl9ZnVuY3Rpb24gVHQodCxlKXt2YXIgaSxuO2lmKDE9PT1lLmxlbmd0aCYmbyhlWzBdKSYmKGU9ZVswXSksIWUubGVuZ3RoKXJldHVybiBDdCgpO2ZvcihpPWVbMF0sbj0xO248ZS5sZW5ndGg7KytuKSghZVtuXS5pc1ZhbGlkKCl8fGVbbl1bdF0oaSkpJiYoaT1lW25dKTtyZXR1cm4gaX1mdW5jdGlvbiBFdCgpe3ZhciB0PVtdLnNsaWNlLmNhbGwoYXJndW1lbnRzLDApO3JldHVybiBUdCgiaXNCZWZvcmUiLHQpfWZ1bmN0aW9uIFN0KCl7dmFyIHQ9W10uc2xpY2UuY2FsbChhcmd1bWVudHMsMCk7cmV0dXJuIFR0KCJpc0FmdGVyIix0KX1mdW5jdGlvbiBQdCh0KXt2YXIgZT1FKHQpLGk9ZS55ZWFyfHwwLG89ZS5xdWFydGVyfHwwLG49ZS5tb250aHx8MCxzPWUud2Vla3x8MCxyPWUuZGF5fHwwLGE9ZS5ob3VyfHwwLGg9ZS5taW51dGV8fDAsZD1lLnNlY29uZHx8MCxsPWUubWlsbGlzZWNvbmR8fDA7dGhpcy5fbWlsbGlzZWNvbmRzPStsKzFlMypkKzZlNCpoKzM2ZTUqYSx0aGlzLl9kYXlzPStyKzcqcyx0aGlzLl9tb250aHM9K24rMypvKzEyKmksdGhpcy5fZGF0YT17fSx0aGlzLl9sb2NhbGU9RCgpLHRoaXMuX2J1YmJsZSgpfWZ1bmN0aW9uIEl0KHQpe3JldHVybiB0IGluc3RhbmNlb2YgUHR9ZnVuY3Rpb24gTnQodCxlKXtBKHQsMCwwLGZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy51dGNPZmZzZXQoKSxpPSIrIjtyZXR1cm4gMD50JiYodD0tdCxpPSItIiksaStMKH5+KHQvNjApLDIpK2UrTCh+fnQlNjAsMil9KX1mdW5jdGlvbiB6dCh0LGUpe3ZhciBpPShlfHwiIikubWF0Y2godCl8fFtdLG89aVtpLmxlbmd0aC0xXXx8W10sbj0obysiIikubWF0Y2goV28pfHxbIi0iLDAsMF0scz0rKDYwKm5bMV0pK3koblsyXSk7cmV0dXJuIisiPT09blswXT9zOi1zfWZ1bmN0aW9uIEx0KHQsaSl7dmFyIG8scztyZXR1cm4gaS5faXNVVEM/KG89aS5jbG9uZSgpLHM9KHYodCl8fG4odCk/K3Q6K0N0KHQpKS0rbyxvLl9kLnNldFRpbWUoK28uX2QrcyksZS51cGRhdGVPZmZzZXQobywhMSksbyk6Q3QodCkubG9jYWwoKX1mdW5jdGlvbiBBdCh0KXtyZXR1cm4gMTUqLU1hdGgucm91bmQodC5fZC5nZXRUaW1lem9uZU9mZnNldCgpLzE1KX1mdW5jdGlvbiBCdCh0LGkpe3ZhciBvLG49dGhpcy5fb2Zmc2V0fHwwO3JldHVybiB0aGlzLmlzVmFsaWQoKT9udWxsIT10Pygic3RyaW5nIj09dHlwZW9mIHQ/dD16dChmbyx0KTpNYXRoLmFicyh0KTwxNiYmKHQ9NjAqdCksIXRoaXMuX2lzVVRDJiZpJiYobz1BdCh0aGlzKSksdGhpcy5fb2Zmc2V0PXQsdGhpcy5faXNVVEM9ITAsbnVsbCE9byYmdGhpcy5hZGQobywibSIpLG4hPT10JiYoIWl8fHRoaXMuX2NoYW5nZUluUHJvZ3Jlc3M/UXQodGhpcyxYdCh0LW4sIm0iKSwxLCExKTp0aGlzLl9jaGFuZ2VJblByb2dyZXNzfHwodGhpcy5fY2hhbmdlSW5Qcm9ncmVzcz0hMCxlLnVwZGF0ZU9mZnNldCh0aGlzLCEwKSx0aGlzLl9jaGFuZ2VJblByb2dyZXNzPW51bGwpKSx0aGlzKTp0aGlzLl9pc1VUQz9uOkF0KHRoaXMpOm51bGwhPXQ/dGhpczpOYU59ZnVuY3Rpb24gRnQodCxlKXtyZXR1cm4gbnVsbCE9dD8oInN0cmluZyIhPXR5cGVvZiB0JiYodD0tdCksdGhpcy51dGNPZmZzZXQodCxlKSx0aGlzKTotdGhpcy51dGNPZmZzZXQoKX1mdW5jdGlvbiBqdCh0KXtyZXR1cm4gdGhpcy51dGNPZmZzZXQoMCx0KX1mdW5jdGlvbiBSdCh0KXtyZXR1cm4gdGhpcy5faXNVVEMmJih0aGlzLnV0Y09mZnNldCgwLHQpLHRoaXMuX2lzVVRDPSExLHQmJnRoaXMuc3VidHJhY3QoQXQodGhpcyksIm0iKSksdGhpc31mdW5jdGlvbiBIdCgpe3JldHVybiB0aGlzLl90em0/dGhpcy51dGNPZmZzZXQodGhpcy5fdHptKToic3RyaW5nIj09dHlwZW9mIHRoaXMuX2kmJnRoaXMudXRjT2Zmc2V0KHp0KHBvLHRoaXMuX2kpKSx0aGlzfWZ1bmN0aW9uIFd0KHQpe3JldHVybiB0aGlzLmlzVmFsaWQoKT8odD10P0N0KHQpLnV0Y09mZnNldCgpOjAsKHRoaXMudXRjT2Zmc2V0KCktdCklNjA9PT0wKTohMX1mdW5jdGlvbiBZdCgpe3JldHVybiB0aGlzLnV0Y09mZnNldCgpPnRoaXMuY2xvbmUoKS5tb250aCgwKS51dGNPZmZzZXQoKXx8dGhpcy51dGNPZmZzZXQoKT50aGlzLmNsb25lKCkubW9udGgoNSkudXRjT2Zmc2V0KCl9ZnVuY3Rpb24gR3QoKXtpZighcCh0aGlzLl9pc0RTVFNoaWZ0ZWQpKXJldHVybiB0aGlzLl9pc0RTVFNoaWZ0ZWQ7dmFyIHQ9e307aWYoZih0LHRoaXMpLHQ9T3QodCksdC5fYSl7dmFyIGU9dC5faXNVVEM/aCh0Ll9hKTpDdCh0Ll9hKTt0aGlzLl9pc0RTVFNoaWZ0ZWQ9dGhpcy5pc1ZhbGlkKCkmJmIodC5fYSxlLnRvQXJyYXkoKSk+MH1lbHNlIHRoaXMuX2lzRFNUU2hpZnRlZD0hMTtyZXR1cm4gdGhpcy5faXNEU1RTaGlmdGVkfWZ1bmN0aW9uIFZ0KCl7cmV0dXJuIHRoaXMuaXNWYWxpZCgpPyF0aGlzLl9pc1VUQzohMX1mdW5jdGlvbiBVdCgpe3JldHVybiB0aGlzLmlzVmFsaWQoKT90aGlzLl9pc1VUQzohMX1mdW5jdGlvbiBxdCgpe3JldHVybiB0aGlzLmlzVmFsaWQoKT90aGlzLl9pc1VUQyYmMD09PXRoaXMuX29mZnNldDohMX1mdW5jdGlvbiBYdCh0LGUpe3ZhciBpLG8sbixzPXQsYT1udWxsO3JldHVybiBJdCh0KT9zPXttczp0Ll9taWxsaXNlY29uZHMsZDp0Ll9kYXlzLE06dC5fbW9udGhzfToibnVtYmVyIj09dHlwZW9mIHQ/KHM9e30sZT9zW2VdPXQ6cy5taWxsaXNlY29uZHM9dCk6KGE9WW8uZXhlYyh0KSk/KGk9Ii0iPT09YVsxXT8tMToxLHM9e3k6MCxkOnkoYVtfb10pKmksaDp5KGFbeG9dKSppLG06eShhW2tvXSkqaSxzOnkoYVtPb10pKmksbXM6eShhW01vXSkqaX0pOihhPUdvLmV4ZWModCkpPyhpPSItIj09PWFbMV0/LTE6MSxzPXt5Olp0KGFbMl0saSksTTpadChhWzNdLGkpLGQ6WnQoYVs0XSxpKSxoOlp0KGFbNV0saSksbTpadChhWzZdLGkpLHM6WnQoYVs3XSxpKSx3Olp0KGFbOF0saSl9KTpudWxsPT1zP3M9e306Im9iamVjdCI9PXR5cGVvZiBzJiYoImZyb20iaW4gc3x8InRvImluIHMpJiYobj0kdChDdChzLmZyb20pLEN0KHMudG8pKSxzPXt9LHMubXM9bi5taWxsaXNlY29uZHMscy5NPW4ubW9udGhzKSxvPW5ldyBQdChzKSxJdCh0KSYmcih0LCJfbG9jYWxlIikmJihvLl9sb2NhbGU9dC5fbG9jYWxlKSxvfWZ1bmN0aW9uIFp0KHQsZSl7dmFyIGk9dCYmcGFyc2VGbG9hdCh0LnJlcGxhY2UoIiwiLCIuIikpO3JldHVybihpc05hTihpKT8wOmkpKmV9ZnVuY3Rpb24gS3QodCxlKXt2YXIgaT17bWlsbGlzZWNvbmRzOjAsbW9udGhzOjB9O3JldHVybiBpLm1vbnRocz1lLm1vbnRoKCktdC5tb250aCgpKzEyKihlLnllYXIoKS10LnllYXIoKSksdC5jbG9uZSgpLmFkZChpLm1vbnRocywiTSIpLmlzQWZ0ZXIoZSkmJi0taS5tb250aHMsaS5taWxsaXNlY29uZHM9K2UtK3QuY2xvbmUoKS5hZGQoaS5tb250aHMsIk0iKSxpfWZ1bmN0aW9uICR0KHQsZSl7dmFyIGk7cmV0dXJuIHQuaXNWYWxpZCgpJiZlLmlzVmFsaWQoKT8oZT1MdChlLHQpLHQuaXNCZWZvcmUoZSk/aT1LdCh0LGUpOihpPUt0KGUsdCksaS5taWxsaXNlY29uZHM9LWkubWlsbGlzZWNvbmRzLGkubW9udGhzPS1pLm1vbnRocyksaSk6e21pbGxpc2Vjb25kczowLG1vbnRoczowfX1mdW5jdGlvbiBKdCh0LGUpe3JldHVybiBmdW5jdGlvbihpLG8pe3ZhciBuLHM7cmV0dXJuIG51bGw9PT1vfHxpc05hTigrbyl8fChvdChlLCJtb21lbnQoKS4iK2UrIihwZXJpb2QsIG51bWJlcikgaXMgZGVwcmVjYXRlZC4gUGxlYXNlIHVzZSBtb21lbnQoKS4iK2UrIihudW1iZXIsIHBlcmlvZCkuIikscz1pLGk9byxvPXMpLGk9InN0cmluZyI9PXR5cGVvZiBpPytpOmksbj1YdChpLG8pLFF0KHRoaXMsbix0KSx0aGlzfX1mdW5jdGlvbiBRdCh0LGksbyxuKXt2YXIgcz1pLl9taWxsaXNlY29uZHMscj1pLl9kYXlzLGE9aS5fbW9udGhzO3QuaXNWYWxpZCgpJiYobj1udWxsPT1uPyEwOm4scyYmdC5fZC5zZXRUaW1lKCt0Ll9kK3MqbyksciYmTih0LCJEYXRlIixJKHQsIkRhdGUiKStyKm8pLGEmJiQodCxJKHQsIk1vbnRoIikrYSpvKSxuJiZlLnVwZGF0ZU9mZnNldCh0LHJ8fGEpKX1mdW5jdGlvbiB0ZSh0LGUpe3ZhciBpPXR8fEN0KCksbz1MdChpLHRoaXMpLnN0YXJ0T2YoImRheSIpLG49dGhpcy5kaWZmKG8sImRheXMiLCEwKSxzPS02Pm4/InNhbWVFbHNlIjotMT5uPyJsYXN0V2VlayI6MD5uPyJsYXN0RGF5IjoxPm4/InNhbWVEYXkiOjI+bj8ibmV4dERheSI6Nz5uPyJuZXh0V2VlayI6InNhbWVFbHNlIixyPWUmJihTKGVbc10pP2Vbc10oKTplW3NdKTtyZXR1cm4gdGhpcy5mb3JtYXQocnx8dGhpcy5sb2NhbGVEYXRhKCkuY2FsZW5kYXIocyx0aGlzLEN0KGkpKSl9ZnVuY3Rpb24gZWUoKXtyZXR1cm4gbmV3IG0odGhpcyl9ZnVuY3Rpb24gaWUodCxlKXt2YXIgaT12KHQpP3Q6Q3QodCk7cmV0dXJuIHRoaXMuaXNWYWxpZCgpJiZpLmlzVmFsaWQoKT8oZT1UKHAoZSk/Im1pbGxpc2Vjb25kIjplKSwibWlsbGlzZWNvbmQiPT09ZT8rdGhpcz4raToraTwrdGhpcy5jbG9uZSgpLnN0YXJ0T2YoZSkpOiExfWZ1bmN0aW9uIG9lKHQsZSl7dmFyIGk9dih0KT90OkN0KHQpO3JldHVybiB0aGlzLmlzVmFsaWQoKSYmaS5pc1ZhbGlkKCk/KGU9VChwKGUpPyJtaWxsaXNlY29uZCI6ZSksIm1pbGxpc2Vjb25kIj09PWU/K2k+K3RoaXM6K3RoaXMuY2xvbmUoKS5lbmRPZihlKTwraSk6ITF9ZnVuY3Rpb24gbmUodCxlLGkpe3JldHVybiB0aGlzLmlzQWZ0ZXIodCxpKSYmdGhpcy5pc0JlZm9yZShlLGkpfWZ1bmN0aW9uIHNlKHQsZSl7dmFyIGksbz12KHQpP3Q6Q3QodCk7cmV0dXJuIHRoaXMuaXNWYWxpZCgpJiZvLmlzVmFsaWQoKT8oZT1UKGV8fCJtaWxsaXNlY29uZCIpLCJtaWxsaXNlY29uZCI9PT1lPyt0aGlzPT09K286KGk9K28sK3RoaXMuY2xvbmUoKS5zdGFydE9mKGUpPD1pJiZpPD0rdGhpcy5jbG9uZSgpLmVuZE9mKGUpKSk6ITF9ZnVuY3Rpb24gcmUodCxlKXtyZXR1cm4gdGhpcy5pc1NhbWUodCxlKXx8dGhpcy5pc0FmdGVyKHQsZSl9ZnVuY3Rpb24gYWUodCxlKXtyZXR1cm4gdGhpcy5pc1NhbWUodCxlKXx8dGhpcy5pc0JlZm9yZSh0LGUpfWZ1bmN0aW9uIGhlKHQsZSxpKXt2YXIgbyxuLHMscjtyZXR1cm4gdGhpcy5pc1ZhbGlkKCk/KG89THQodCx0aGlzKSxvLmlzVmFsaWQoKT8obj02ZTQqKG8udXRjT2Zmc2V0KCktdGhpcy51dGNPZmZzZXQoKSksZT1UKGUpLCJ5ZWFyIj09PWV8fCJtb250aCI9PT1lfHwicXVhcnRlciI9PT1lPyhyPWRlKHRoaXMsbyksInF1YXJ0ZXIiPT09ZT9yLz0zOiJ5ZWFyIj09PWUmJihyLz0xMikpOihzPXRoaXMtbyxyPSJzZWNvbmQiPT09ZT9zLzFlMzoibWludXRlIj09PWU/cy82ZTQ6ImhvdXIiPT09ZT9zLzM2ZTU6ImRheSI9PT1lPyhzLW4pLzg2NGU1OiJ3ZWVrIj09PWU/KHMtbikvNjA0OGU1OnMpLGk/cjpnKHIpKTpOYU4pOk5hTn1mdW5jdGlvbiBkZSh0LGUpe3ZhciBpLG8sbj0xMiooZS55ZWFyKCktdC55ZWFyKCkpKyhlLm1vbnRoKCktdC5tb250aCgpKSxzPXQuY2xvbmUoKS5hZGQobiwibW9udGhzIik7cmV0dXJuIDA+ZS1zPyhpPXQuY2xvbmUoKS5hZGQobi0xLCJtb250aHMiKSxvPShlLXMpLyhzLWkpKTooaT10LmNsb25lKCkuYWRkKG4rMSwibW9udGhzIiksbz0oZS1zKS8oaS1zKSksLShuK28pfWZ1bmN0aW9uIGxlKCl7cmV0dXJuIHRoaXMuY2xvbmUoKS5sb2NhbGUoImVuIikuZm9ybWF0KCJkZGQgTU1NIEREIFlZWVkgSEg6bW06c3MgW0dNVF1aWiIpfWZ1bmN0aW9uIHVlKCl7dmFyIHQ9dGhpcy5jbG9uZSgpLnV0YygpO3JldHVybiAwPHQueWVhcigpJiZ0LnllYXIoKTw9OTk5OT9TKERhdGUucHJvdG90eXBlLnRvSVNPU3RyaW5nKT90aGlzLnRvRGF0ZSgpLnRvSVNPU3RyaW5nKCk6aih0LCJZWVlZLU1NLUREW1RdSEg6bW06c3MuU1NTW1pdIik6aih0LCJZWVlZWVktTU0tRERbVF1ISDptbTpzcy5TU1NbWl0iKX1mdW5jdGlvbiBjZSh0KXt2YXIgaT1qKHRoaXMsdHx8ZS5kZWZhdWx0Rm9ybWF0KTtyZXR1cm4gdGhpcy5sb2NhbGVEYXRhKCkucG9zdGZvcm1hdChpKX1mdW5jdGlvbiBwZSh0LGUpe3JldHVybiB0aGlzLmlzVmFsaWQoKSYmKHYodCkmJnQuaXNWYWxpZCgpfHxDdCh0KS5pc1ZhbGlkKCkpP1h0KHt0bzp0aGlzLGZyb206dAp9KS5sb2NhbGUodGhpcy5sb2NhbGUoKSkuaHVtYW5pemUoIWUpOnRoaXMubG9jYWxlRGF0YSgpLmludmFsaWREYXRlKCl9ZnVuY3Rpb24gZmUodCl7cmV0dXJuIHRoaXMuZnJvbShDdCgpLHQpfWZ1bmN0aW9uIG1lKHQsZSl7cmV0dXJuIHRoaXMuaXNWYWxpZCgpJiYodih0KSYmdC5pc1ZhbGlkKCl8fEN0KHQpLmlzVmFsaWQoKSk/WHQoe2Zyb206dGhpcyx0bzp0fSkubG9jYWxlKHRoaXMubG9jYWxlKCkpLmh1bWFuaXplKCFlKTp0aGlzLmxvY2FsZURhdGEoKS5pbnZhbGlkRGF0ZSgpfWZ1bmN0aW9uIHZlKHQpe3JldHVybiB0aGlzLnRvKEN0KCksdCl9ZnVuY3Rpb24gZ2UodCl7dmFyIGU7cmV0dXJuIHZvaWQgMD09PXQ/dGhpcy5fbG9jYWxlLl9hYmJyOihlPUQodCksbnVsbCE9ZSYmKHRoaXMuX2xvY2FsZT1lKSx0aGlzKX1mdW5jdGlvbiB5ZSgpe3JldHVybiB0aGlzLl9sb2NhbGV9ZnVuY3Rpb24gYmUodCl7c3dpdGNoKHQ9VCh0KSl7Y2FzZSJ5ZWFyIjp0aGlzLm1vbnRoKDApO2Nhc2UicXVhcnRlciI6Y2FzZSJtb250aCI6dGhpcy5kYXRlKDEpO2Nhc2Uid2VlayI6Y2FzZSJpc29XZWVrIjpjYXNlImRheSI6dGhpcy5ob3VycygwKTtjYXNlImhvdXIiOnRoaXMubWludXRlcygwKTtjYXNlIm1pbnV0ZSI6dGhpcy5zZWNvbmRzKDApO2Nhc2Uic2Vjb25kIjp0aGlzLm1pbGxpc2Vjb25kcygwKX1yZXR1cm4id2VlayI9PT10JiZ0aGlzLndlZWtkYXkoMCksImlzb1dlZWsiPT09dCYmdGhpcy5pc29XZWVrZGF5KDEpLCJxdWFydGVyIj09PXQmJnRoaXMubW9udGgoMypNYXRoLmZsb29yKHRoaXMubW9udGgoKS8zKSksdGhpc31mdW5jdGlvbiB3ZSh0KXtyZXR1cm4gdD1UKHQpLHZvaWQgMD09PXR8fCJtaWxsaXNlY29uZCI9PT10P3RoaXM6dGhpcy5zdGFydE9mKHQpLmFkZCgxLCJpc29XZWVrIj09PXQ/IndlZWsiOnQpLnN1YnRyYWN0KDEsIm1zIil9ZnVuY3Rpb24gX2UoKXtyZXR1cm4rdGhpcy5fZC02ZTQqKHRoaXMuX29mZnNldHx8MCl9ZnVuY3Rpb24geGUoKXtyZXR1cm4gTWF0aC5mbG9vcigrdGhpcy8xZTMpfWZ1bmN0aW9uIGtlKCl7cmV0dXJuIHRoaXMuX29mZnNldD9uZXcgRGF0ZSgrdGhpcyk6dGhpcy5fZH1mdW5jdGlvbiBPZSgpe3ZhciB0PXRoaXM7cmV0dXJuW3QueWVhcigpLHQubW9udGgoKSx0LmRhdGUoKSx0LmhvdXIoKSx0Lm1pbnV0ZSgpLHQuc2Vjb25kKCksdC5taWxsaXNlY29uZCgpXX1mdW5jdGlvbiBNZSgpe3ZhciB0PXRoaXM7cmV0dXJue3llYXJzOnQueWVhcigpLG1vbnRoczp0Lm1vbnRoKCksZGF0ZTp0LmRhdGUoKSxob3Vyczp0LmhvdXJzKCksbWludXRlczp0Lm1pbnV0ZXMoKSxzZWNvbmRzOnQuc2Vjb25kcygpLG1pbGxpc2Vjb25kczp0Lm1pbGxpc2Vjb25kcygpfX1mdW5jdGlvbiBEZSgpe3JldHVybiB0aGlzLmlzVmFsaWQoKT90aGlzLnRvSVNPU3RyaW5nKCk6Im51bGwifWZ1bmN0aW9uIENlKCl7cmV0dXJuIHUodGhpcyl9ZnVuY3Rpb24gVGUoKXtyZXR1cm4gYSh7fSxsKHRoaXMpKX1mdW5jdGlvbiBFZSgpe3JldHVybiBsKHRoaXMpLm92ZXJmbG93fWZ1bmN0aW9uIFNlKCl7cmV0dXJue2lucHV0OnRoaXMuX2ksZm9ybWF0OnRoaXMuX2YsbG9jYWxlOnRoaXMuX2xvY2FsZSxpc1VUQzp0aGlzLl9pc1VUQyxzdHJpY3Q6dGhpcy5fc3RyaWN0fX1mdW5jdGlvbiBQZSh0LGUpe0EoMCxbdCx0Lmxlbmd0aF0sMCxlKX1mdW5jdGlvbiBJZSh0KXtyZXR1cm4gQWUuY2FsbCh0aGlzLHQsdGhpcy53ZWVrKCksdGhpcy53ZWVrZGF5KCksdGhpcy5sb2NhbGVEYXRhKCkuX3dlZWsuZG93LHRoaXMubG9jYWxlRGF0YSgpLl93ZWVrLmRveSl9ZnVuY3Rpb24gTmUodCl7cmV0dXJuIEFlLmNhbGwodGhpcyx0LHRoaXMuaXNvV2VlaygpLHRoaXMuaXNvV2Vla2RheSgpLDEsNCl9ZnVuY3Rpb24gemUoKXtyZXR1cm4gZnQodGhpcy55ZWFyKCksMSw0KX1mdW5jdGlvbiBMZSgpe3ZhciB0PXRoaXMubG9jYWxlRGF0YSgpLl93ZWVrO3JldHVybiBmdCh0aGlzLnllYXIoKSx0LmRvdyx0LmRveSl9ZnVuY3Rpb24gQWUodCxlLGksbyxuKXt2YXIgcztyZXR1cm4gbnVsbD09dD9wdCh0aGlzLG8sbikueWVhcjoocz1mdCh0LG8sbiksZT5zJiYoZT1zKSxCZS5jYWxsKHRoaXMsdCxlLGksbyxuKSl9ZnVuY3Rpb24gQmUodCxlLGksbyxuKXt2YXIgcz1jdCh0LGUsaSxvLG4pLHI9YXQocy55ZWFyLDAscy5kYXlPZlllYXIpO3JldHVybiB0aGlzLnllYXIoci5nZXRVVENGdWxsWWVhcigpKSx0aGlzLm1vbnRoKHIuZ2V0VVRDTW9udGgoKSksdGhpcy5kYXRlKHIuZ2V0VVRDRGF0ZSgpKSx0aGlzfWZ1bmN0aW9uIEZlKHQpe3JldHVybiBudWxsPT10P01hdGguY2VpbCgodGhpcy5tb250aCgpKzEpLzMpOnRoaXMubW9udGgoMyoodC0xKSt0aGlzLm1vbnRoKCklMyl9ZnVuY3Rpb24gamUodCl7cmV0dXJuIHB0KHQsdGhpcy5fd2Vlay5kb3csdGhpcy5fd2Vlay5kb3kpLndlZWt9ZnVuY3Rpb24gUmUoKXtyZXR1cm4gdGhpcy5fd2Vlay5kb3d9ZnVuY3Rpb24gSGUoKXtyZXR1cm4gdGhpcy5fd2Vlay5kb3l9ZnVuY3Rpb24gV2UodCl7dmFyIGU9dGhpcy5sb2NhbGVEYXRhKCkud2Vlayh0aGlzKTtyZXR1cm4gbnVsbD09dD9lOnRoaXMuYWRkKDcqKHQtZSksImQiKX1mdW5jdGlvbiBZZSh0KXt2YXIgZT1wdCh0aGlzLDEsNCkud2VlaztyZXR1cm4gbnVsbD09dD9lOnRoaXMuYWRkKDcqKHQtZSksImQiKX1mdW5jdGlvbiBHZSh0LGUpe3JldHVybiJzdHJpbmciIT10eXBlb2YgdD90OmlzTmFOKHQpPyh0PWUud2Vla2RheXNQYXJzZSh0KSwibnVtYmVyIj09dHlwZW9mIHQ/dDpudWxsKTpwYXJzZUludCh0LDEwKX1mdW5jdGlvbiBWZSh0LGUpe3JldHVybiBvKHRoaXMuX3dlZWtkYXlzKT90aGlzLl93ZWVrZGF5c1t0LmRheSgpXTp0aGlzLl93ZWVrZGF5c1t0aGlzLl93ZWVrZGF5cy5pc0Zvcm1hdC50ZXN0KGUpPyJmb3JtYXQiOiJzdGFuZGFsb25lIl1bdC5kYXkoKV19ZnVuY3Rpb24gVWUodCl7cmV0dXJuIHRoaXMuX3dlZWtkYXlzU2hvcnRbdC5kYXkoKV19ZnVuY3Rpb24gcWUodCl7cmV0dXJuIHRoaXMuX3dlZWtkYXlzTWluW3QuZGF5KCldfWZ1bmN0aW9uIFhlKHQsZSxpKXt2YXIgbyxuLHM7Zm9yKHRoaXMuX3dlZWtkYXlzUGFyc2V8fCh0aGlzLl93ZWVrZGF5c1BhcnNlPVtdLHRoaXMuX21pbldlZWtkYXlzUGFyc2U9W10sdGhpcy5fc2hvcnRXZWVrZGF5c1BhcnNlPVtdLHRoaXMuX2Z1bGxXZWVrZGF5c1BhcnNlPVtdKSxvPTA7Nz5vO28rKyl7aWYobj1DdChbMmUzLDFdKS5kYXkobyksaSYmIXRoaXMuX2Z1bGxXZWVrZGF5c1BhcnNlW29dJiYodGhpcy5fZnVsbFdlZWtkYXlzUGFyc2Vbb109bmV3IFJlZ0V4cCgiXiIrdGhpcy53ZWVrZGF5cyhuLCIiKS5yZXBsYWNlKCIuIiwiLj8iKSsiJCIsImkiKSx0aGlzLl9zaG9ydFdlZWtkYXlzUGFyc2Vbb109bmV3IFJlZ0V4cCgiXiIrdGhpcy53ZWVrZGF5c1Nob3J0KG4sIiIpLnJlcGxhY2UoIi4iLCIuPyIpKyIkIiwiaSIpLHRoaXMuX21pbldlZWtkYXlzUGFyc2Vbb109bmV3IFJlZ0V4cCgiXiIrdGhpcy53ZWVrZGF5c01pbihuLCIiKS5yZXBsYWNlKCIuIiwiLj8iKSsiJCIsImkiKSksdGhpcy5fd2Vla2RheXNQYXJzZVtvXXx8KHM9Il4iK3RoaXMud2Vla2RheXMobiwiIikrInxeIit0aGlzLndlZWtkYXlzU2hvcnQobiwiIikrInxeIit0aGlzLndlZWtkYXlzTWluKG4sIiIpLHRoaXMuX3dlZWtkYXlzUGFyc2Vbb109bmV3IFJlZ0V4cChzLnJlcGxhY2UoIi4iLCIiKSwiaSIpKSxpJiYiZGRkZCI9PT1lJiZ0aGlzLl9mdWxsV2Vla2RheXNQYXJzZVtvXS50ZXN0KHQpKXJldHVybiBvO2lmKGkmJiJkZGQiPT09ZSYmdGhpcy5fc2hvcnRXZWVrZGF5c1BhcnNlW29dLnRlc3QodCkpcmV0dXJuIG87aWYoaSYmImRkIj09PWUmJnRoaXMuX21pbldlZWtkYXlzUGFyc2Vbb10udGVzdCh0KSlyZXR1cm4gbztpZighaSYmdGhpcy5fd2Vla2RheXNQYXJzZVtvXS50ZXN0KHQpKXJldHVybiBvfX1mdW5jdGlvbiBaZSh0KXtpZighdGhpcy5pc1ZhbGlkKCkpcmV0dXJuIG51bGwhPXQ/dGhpczpOYU47dmFyIGU9dGhpcy5faXNVVEM/dGhpcy5fZC5nZXRVVENEYXkoKTp0aGlzLl9kLmdldERheSgpO3JldHVybiBudWxsIT10Pyh0PUdlKHQsdGhpcy5sb2NhbGVEYXRhKCkpLHRoaXMuYWRkKHQtZSwiZCIpKTplfWZ1bmN0aW9uIEtlKHQpe2lmKCF0aGlzLmlzVmFsaWQoKSlyZXR1cm4gbnVsbCE9dD90aGlzOk5hTjt2YXIgZT0odGhpcy5kYXkoKSs3LXRoaXMubG9jYWxlRGF0YSgpLl93ZWVrLmRvdyklNztyZXR1cm4gbnVsbD09dD9lOnRoaXMuYWRkKHQtZSwiZCIpfWZ1bmN0aW9uICRlKHQpe3JldHVybiB0aGlzLmlzVmFsaWQoKT9udWxsPT10P3RoaXMuZGF5KCl8fDc6dGhpcy5kYXkodGhpcy5kYXkoKSU3P3Q6dC03KTpudWxsIT10P3RoaXM6TmFOfWZ1bmN0aW9uIEplKHQpe3ZhciBlPU1hdGgucm91bmQoKHRoaXMuY2xvbmUoKS5zdGFydE9mKCJkYXkiKS10aGlzLmNsb25lKCkuc3RhcnRPZigieWVhciIpKS84NjRlNSkrMTtyZXR1cm4gbnVsbD09dD9lOnRoaXMuYWRkKHQtZSwiZCIpfWZ1bmN0aW9uIFFlKCl7cmV0dXJuIHRoaXMuaG91cnMoKSUxMnx8MTJ9ZnVuY3Rpb24gdGkodCxlKXtBKHQsMCwwLGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMubG9jYWxlRGF0YSgpLm1lcmlkaWVtKHRoaXMuaG91cnMoKSx0aGlzLm1pbnV0ZXMoKSxlKX0pfWZ1bmN0aW9uIGVpKHQsZSl7cmV0dXJuIGUuX21lcmlkaWVtUGFyc2V9ZnVuY3Rpb24gaWkodCl7cmV0dXJuInAiPT09KHQrIiIpLnRvTG93ZXJDYXNlKCkuY2hhckF0KDApfWZ1bmN0aW9uIG9pKHQsZSxpKXtyZXR1cm4gdD4xMT9pPyJwbSI6IlBNIjppPyJhbSI6IkFNIn1mdW5jdGlvbiBuaSh0LGUpe2VbTW9dPXkoMWUzKigiMC4iK3QpKX1mdW5jdGlvbiBzaSgpe3JldHVybiB0aGlzLl9pc1VUQz8iVVRDIjoiIn1mdW5jdGlvbiByaSgpe3JldHVybiB0aGlzLl9pc1VUQz8iQ29vcmRpbmF0ZWQgVW5pdmVyc2FsIFRpbWUiOiIifWZ1bmN0aW9uIGFpKHQpe3JldHVybiBDdCgxZTMqdCl9ZnVuY3Rpb24gaGkoKXtyZXR1cm4gQ3QuYXBwbHkobnVsbCxhcmd1bWVudHMpLnBhcnNlWm9uZSgpfWZ1bmN0aW9uIGRpKHQsZSxpKXt2YXIgbz10aGlzLl9jYWxlbmRhclt0XTtyZXR1cm4gUyhvKT9vLmNhbGwoZSxpKTpvfWZ1bmN0aW9uIGxpKHQpe3ZhciBlPXRoaXMuX2xvbmdEYXRlRm9ybWF0W3RdLGk9dGhpcy5fbG9uZ0RhdGVGb3JtYXRbdC50b1VwcGVyQ2FzZSgpXTtyZXR1cm4gZXx8IWk/ZToodGhpcy5fbG9uZ0RhdGVGb3JtYXRbdF09aS5yZXBsYWNlKC9NTU1NfE1NfEREfGRkZGQvZyxmdW5jdGlvbih0KXtyZXR1cm4gdC5zbGljZSgxKX0pLHRoaXMuX2xvbmdEYXRlRm9ybWF0W3RdKX1mdW5jdGlvbiB1aSgpe3JldHVybiB0aGlzLl9pbnZhbGlkRGF0ZX1mdW5jdGlvbiBjaSh0KXtyZXR1cm4gdGhpcy5fb3JkaW5hbC5yZXBsYWNlKCIlZCIsdCl9ZnVuY3Rpb24gcGkodCl7cmV0dXJuIHR9ZnVuY3Rpb24gZmkodCxlLGksbyl7dmFyIG49dGhpcy5fcmVsYXRpdmVUaW1lW2ldO3JldHVybiBTKG4pP24odCxlLGksbyk6bi5yZXBsYWNlKC8lZC9pLHQpfWZ1bmN0aW9uIG1pKHQsZSl7dmFyIGk9dGhpcy5fcmVsYXRpdmVUaW1lW3Q+MD8iZnV0dXJlIjoicGFzdCJdO3JldHVybiBTKGkpP2koZSk6aS5yZXBsYWNlKC8lcy9pLGUpfWZ1bmN0aW9uIHZpKHQpe3ZhciBlLGk7Zm9yKGkgaW4gdCllPXRbaV0sUyhlKT90aGlzW2ldPWU6dGhpc1siXyIraV09ZTt0aGlzLl9vcmRpbmFsUGFyc2VMZW5pZW50PW5ldyBSZWdFeHAodGhpcy5fb3JkaW5hbFBhcnNlLnNvdXJjZSsifCIrL1xkezEsMn0vLnNvdXJjZSl9ZnVuY3Rpb24gZ2kodCxlLGksbyl7dmFyIG49RCgpLHM9aCgpLnNldChvLGUpO3JldHVybiBuW2ldKHMsdCl9ZnVuY3Rpb24geWkodCxlLGksbyxuKXtpZigibnVtYmVyIj09dHlwZW9mIHQmJihlPXQsdD12b2lkIDApLHQ9dHx8IiIsbnVsbCE9ZSlyZXR1cm4gZ2kodCxlLGksbik7dmFyIHMscj1bXTtmb3Iocz0wO28+cztzKyspcltzXT1naSh0LHMsaSxuKTtyZXR1cm4gcn1mdW5jdGlvbiBiaSh0LGUpe3JldHVybiB5aSh0LGUsIm1vbnRocyIsMTIsIm1vbnRoIil9ZnVuY3Rpb24gd2kodCxlKXtyZXR1cm4geWkodCxlLCJtb250aHNTaG9ydCIsMTIsIm1vbnRoIil9ZnVuY3Rpb24gX2kodCxlKXtyZXR1cm4geWkodCxlLCJ3ZWVrZGF5cyIsNywiZGF5Iil9ZnVuY3Rpb24geGkodCxlKXtyZXR1cm4geWkodCxlLCJ3ZWVrZGF5c1Nob3J0Iiw3LCJkYXkiKX1mdW5jdGlvbiBraSh0LGUpe3JldHVybiB5aSh0LGUsIndlZWtkYXlzTWluIiw3LCJkYXkiKX1mdW5jdGlvbiBPaSgpe3ZhciB0PXRoaXMuX2RhdGE7cmV0dXJuIHRoaXMuX21pbGxpc2Vjb25kcz1tbih0aGlzLl9taWxsaXNlY29uZHMpLHRoaXMuX2RheXM9bW4odGhpcy5fZGF5cyksdGhpcy5fbW9udGhzPW1uKHRoaXMuX21vbnRocyksdC5taWxsaXNlY29uZHM9bW4odC5taWxsaXNlY29uZHMpLHQuc2Vjb25kcz1tbih0LnNlY29uZHMpLHQubWludXRlcz1tbih0Lm1pbnV0ZXMpLHQuaG91cnM9bW4odC5ob3VycyksdC5tb250aHM9bW4odC5tb250aHMpLHQueWVhcnM9bW4odC55ZWFycyksdGhpc31mdW5jdGlvbiBNaSh0LGUsaSxvKXt2YXIgbj1YdChlLGkpO3JldHVybiB0Ll9taWxsaXNlY29uZHMrPW8qbi5fbWlsbGlzZWNvbmRzLHQuX2RheXMrPW8qbi5fZGF5cyx0Ll9tb250aHMrPW8qbi5fbW9udGhzLHQuX2J1YmJsZSgpfWZ1bmN0aW9uIERpKHQsZSl7cmV0dXJuIE1pKHRoaXMsdCxlLDEpfWZ1bmN0aW9uIENpKHQsZSl7cmV0dXJuIE1pKHRoaXMsdCxlLC0xKX1mdW5jdGlvbiBUaSh0KXtyZXR1cm4gMD50P01hdGguZmxvb3IodCk6TWF0aC5jZWlsKHQpfWZ1bmN0aW9uIEVpKCl7dmFyIHQsZSxpLG8sbixzPXRoaXMuX21pbGxpc2Vjb25kcyxyPXRoaXMuX2RheXMsYT10aGlzLl9tb250aHMsaD10aGlzLl9kYXRhO3JldHVybiBzPj0wJiZyPj0wJiZhPj0wfHwwPj1zJiYwPj1yJiYwPj1hfHwocys9ODY0ZTUqVGkoUGkoYSkrcikscj0wLGE9MCksaC5taWxsaXNlY29uZHM9cyUxZTMsdD1nKHMvMWUzKSxoLnNlY29uZHM9dCU2MCxlPWcodC82MCksaC5taW51dGVzPWUlNjAsaT1nKGUvNjApLGguaG91cnM9aSUyNCxyKz1nKGkvMjQpLG49ZyhTaShyKSksYSs9bixyLT1UaShQaShuKSksbz1nKGEvMTIpLGElPTEyLGguZGF5cz1yLGgubW9udGhzPWEsaC55ZWFycz1vLHRoaXN9ZnVuY3Rpb24gU2kodCl7cmV0dXJuIDQ4MDAqdC8xNDYwOTd9ZnVuY3Rpb24gUGkodCl7cmV0dXJuIDE0NjA5Nyp0LzQ4MDB9ZnVuY3Rpb24gSWkodCl7dmFyIGUsaSxvPXRoaXMuX21pbGxpc2Vjb25kcztpZih0PVQodCksIm1vbnRoIj09PXR8fCJ5ZWFyIj09PXQpcmV0dXJuIGU9dGhpcy5fZGF5cytvLzg2NGU1LGk9dGhpcy5fbW9udGhzK1NpKGUpLCJtb250aCI9PT10P2k6aS8xMjtzd2l0Y2goZT10aGlzLl9kYXlzK01hdGgucm91bmQoUGkodGhpcy5fbW9udGhzKSksdCl7Y2FzZSJ3ZWVrIjpyZXR1cm4gZS83K28vNjA0OGU1O2Nhc2UiZGF5IjpyZXR1cm4gZStvLzg2NGU1O2Nhc2UiaG91ciI6cmV0dXJuIDI0KmUrby8zNmU1O2Nhc2UibWludXRlIjpyZXR1cm4gMTQ0MCplK28vNmU0O2Nhc2Uic2Vjb25kIjpyZXR1cm4gODY0MDAqZStvLzFlMztjYXNlIm1pbGxpc2Vjb25kIjpyZXR1cm4gTWF0aC5mbG9vcig4NjRlNSplKStvO2RlZmF1bHQ6dGhyb3cgbmV3IEVycm9yKCJVbmtub3duIHVuaXQgIit0KX19ZnVuY3Rpb24gTmkoKXtyZXR1cm4gdGhpcy5fbWlsbGlzZWNvbmRzKzg2NGU1KnRoaXMuX2RheXMrdGhpcy5fbW9udGhzJTEyKjI1OTJlNiszMTUzNmU2KnkodGhpcy5fbW9udGhzLzEyKX1mdW5jdGlvbiB6aSh0KXtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5hcyh0KX19ZnVuY3Rpb24gTGkodCl7cmV0dXJuIHQ9VCh0KSx0aGlzW3QrInMiXSgpfWZ1bmN0aW9uIEFpKHQpe3JldHVybiBmdW5jdGlvbigpe3JldHVybiB0aGlzLl9kYXRhW3RdfX1mdW5jdGlvbiBCaSgpe3JldHVybiBnKHRoaXMuZGF5cygpLzcpfWZ1bmN0aW9uIEZpKHQsZSxpLG8sbil7cmV0dXJuIG4ucmVsYXRpdmVUaW1lKGV8fDEsISFpLHQsbyl9ZnVuY3Rpb24gamkodCxlLGkpe3ZhciBvPVh0KHQpLmFicygpLG49UG4oby5hcygicyIpKSxzPVBuKG8uYXMoIm0iKSkscj1QbihvLmFzKCJoIikpLGE9UG4oby5hcygiZCIpKSxoPVBuKG8uYXMoIk0iKSksZD1QbihvLmFzKCJ5IikpLGw9bjxJbi5zJiZbInMiLG5dfHwxPj1zJiZbIm0iXXx8czxJbi5tJiZbIm1tIixzXXx8MT49ciYmWyJoIl18fHI8SW4uaCYmWyJoaCIscl18fDE+PWEmJlsiZCJdfHxhPEluLmQmJlsiZGQiLGFdfHwxPj1oJiZbIk0iXXx8aDxJbi5NJiZbIk1NIixoXXx8MT49ZCYmWyJ5Il18fFsieXkiLGRdO3JldHVybiBsWzJdPWUsbFszXT0rdD4wLGxbNF09aSxGaS5hcHBseShudWxsLGwpfWZ1bmN0aW9uIFJpKHQsZSl7cmV0dXJuIHZvaWQgMD09PUluW3RdPyExOnZvaWQgMD09PWU/SW5bdF06KEluW3RdPWUsITApfWZ1bmN0aW9uIEhpKHQpe3ZhciBlPXRoaXMubG9jYWxlRGF0YSgpLGk9amkodGhpcywhdCxlKTtyZXR1cm4gdCYmKGk9ZS5wYXN0RnV0dXJlKCt0aGlzLGkpKSxlLnBvc3Rmb3JtYXQoaSl9ZnVuY3Rpb24gV2koKXt2YXIgdCxlLGksbz1Obih0aGlzLl9taWxsaXNlY29uZHMpLzFlMyxuPU5uKHRoaXMuX2RheXMpLHM9Tm4odGhpcy5fbW9udGhzKTt0PWcoby82MCksZT1nKHQvNjApLG8lPTYwLHQlPTYwLGk9ZyhzLzEyKSxzJT0xMjt2YXIgcj1pLGE9cyxoPW4sZD1lLGw9dCx1PW8sYz10aGlzLmFzU2Vjb25kcygpO3JldHVybiBjPygwPmM/Ii0iOiIiKSsiUCIrKHI/cisiWSI6IiIpKyhhP2ErIk0iOiIiKSsoaD9oKyJEIjoiIikrKGR8fGx8fHU/IlQiOiIiKSsoZD9kKyJIIjoiIikrKGw/bCsiTSI6IiIpKyh1P3UrIlMiOiIiKToiUDBEIn12YXIgWWksR2ksVmk9ZS5tb21lbnRQcm9wZXJ0aWVzPVtdLFVpPSExLHFpPXt9LFhpPXt9LFppPS8oXFtbXlxbXSpcXSl8KFxcKT8oW0hoXW1tKHNzKT98TW98TU0/TT9NP3xEb3xERERvfEREP0Q/RD98ZGRkP2Q/fGRvP3x3W298d10/fFdbb3xXXT98UW8/fFlZWVlZWXxZWVlZWXxZWVlZfFlZfGdnKGdnZz8pP3xHRyhHR0c/KT98ZXxFfGF8QXxoaD98SEg/fG1tP3xzcz98U3sxLDl9fHh8WHx6ej98Wlo/fC4pL2csS2k9LyhcW1teXFtdKlxdKXwoXFwpPyhMVFN8TFR8TEw/TD9MP3xsezEsNH0pL2csJGk9e30sSmk9e30sUWk9L1xkLyx0bz0vXGRcZC8sZW89L1xkezN9Lyxpbz0vXGR7NH0vLG9vPS9bKy1dP1xkezZ9Lyxubz0vXGRcZD8vLHNvPS9cZFxkXGRcZD8vLHJvPS9cZFxkXGRcZFxkXGQ/Lyxhbz0vXGR7MSwzfS8saG89L1xkezEsNH0vLGxvPS9bKy1dP1xkezEsNn0vLHVvPS9cZCsvLGNvPS9bKy1dP1xkKy8scG89L1p8WystXVxkXGQ6P1xkXGQvZ2ksZm89L1p8WystXVxkXGQoPzo6P1xkXGQpPy9naSxtbz0vWystXT9cZCsoXC5cZHsxLDN9KT8vLHZvPS9bMC05XSooYVttbl1ccz8pP1snYS16XHUwMEEwLVx1MDVGRlx1MDcwMC1cdUQ3RkZcdUY5MDAtXHVGRENGXHVGREYwLVx1RkZFRlwtXSt8W1x1MDYwMC1cdTA2RkZcL10rKFxzKj9bXHUwNjAwLVx1MDZGRl0rKXsxLDJ9L2ksZ289e30seW89e30sYm89MCx3bz0xLF9vPTIseG89Myxrbz00LE9vPTUsTW89NixEbz03LENvPTg7QSgiTSIsWyJNTSIsMl0sIk1vIixmdW5jdGlvbigpe3JldHVybiB0aGlzLm1vbnRoKCkrMX0pLEEoIk1NTSIsMCwwLGZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLmxvY2FsZURhdGEoKS5tb250aHNTaG9ydCh0aGlzLHQpfSksQSgiTU1NTSIsMCwwLGZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLmxvY2FsZURhdGEoKS5tb250aHModGhpcyx0KX0pLEMoIm1vbnRoIiwiTSIpLEgoIk0iLG5vKSxIKCJNTSIsbm8sdG8pLEgoIk1NTSIsdm8pLEgoIk1NTU0iLHZvKSxHKFsiTSIsIk1NIl0sZnVuY3Rpb24odCxlKXtlW3dvXT15KHQpLTF9KSxHKFsiTU1NIiwiTU1NTSJdLGZ1bmN0aW9uKHQsZSxpLG8pe3ZhciBuPWkuX2xvY2FsZS5tb250aHNQYXJzZSh0LG8saS5fc3RyaWN0KTtudWxsIT1uP2Vbd29dPW46bChpKS5pbnZhbGlkTW9udGg9dH0pO3ZhciBUbz0vRFtvRF0/KFxbW15cW1xdXSpcXXxccyspK01NTU0/LyxFbz0iSmFudWFyeV9GZWJydWFyeV9NYXJjaF9BcHJpbF9NYXlfSnVuZV9KdWx5X0F1Z3VzdF9TZXB0ZW1iZXJfT2N0b2Jlcl9Ob3ZlbWJlcl9EZWNlbWJlciIuc3BsaXQoIl8iKSxTbz0iSmFuX0ZlYl9NYXJfQXByX01heV9KdW5fSnVsX0F1Z19TZXB0X09jdF9Ob3ZfRGVjIi5zcGxpdCgiXyIpLFBvPXt9O2Uuc3VwcHJlc3NEZXByZWNhdGlvbldhcm5pbmdzPSExO3ZhciBJbz0vXlxzKigoPzpbKy1dXGR7Nn18XGR7NH0pLSg/OlxkXGQtXGRcZHxXXGRcZC1cZHxXXGRcZHxcZFxkXGR8XGRcZCkpKD86KFR8ICkoXGRcZCg/OjpcZFxkKD86OlxkXGQoPzpbLixdXGQrKT8pPyk/KShbXCtcLV1cZFxkKD86Oj9cZFxkKT98XHMqWik/KT8vLE5vPS9eXHMqKCg/OlsrLV1cZHs2fXxcZHs0fSkoPzpcZFxkXGRcZHxXXGRcZFxkfFdcZFxkfFxkXGRcZHxcZFxkKSkoPzooVHwgKShcZFxkKD86XGRcZCg/OlxkXGQoPzpbLixdXGQrKT8pPyk/KShbXCtcLV1cZFxkKD86Oj9cZFxkKT98XHMqWik/KT8vLHpvPS9afFsrLV1cZFxkKD86Oj9cZFxkKT8vLExvPVtbIllZWVlZWS1NTS1ERCIsL1srLV1cZHs2fS1cZFxkLVxkXGQvXSxbIllZWVktTU0tREQiLC9cZHs0fS1cZFxkLVxkXGQvXSxbIkdHR0ctW1ddV1ctRSIsL1xkezR9LVdcZFxkLVxkL10sWyJHR0dHLVtXXVdXIiwvXGR7NH0tV1xkXGQvLCExXSxbIllZWVktREREIiwvXGR7NH0tXGR7M30vXSxbIllZWVktTU0iLC9cZHs0fS1cZFxkLywhMV0sWyJZWVlZWVlNTUREIiwvWystXVxkezEwfS9dLFsiWVlZWU1NREQiLC9cZHs4fS9dLFsiR0dHR1tXXVdXRSIsL1xkezR9V1xkezN9L10sWyJHR0dHW1ddV1ciLC9cZHs0fVdcZHsyfS8sITFdLFsiWVlZWURERCIsL1xkezd9L11dLEFvPVtbIkhIOm1tOnNzLlNTU1MiLC9cZFxkOlxkXGQ6XGRcZFwuXGQrL10sWyJISDptbTpzcyxTU1NTIiwvXGRcZDpcZFxkOlxkXGQsXGQrL10sWyJISDptbTpzcyIsL1xkXGQ6XGRcZDpcZFxkL10sWyJISDptbSIsL1xkXGQ6XGRcZC9dLFsiSEhtbXNzLlNTU1MiLC9cZFxkXGRcZFxkXGRcLlxkKy9dLFsiSEhtbXNzLFNTU1MiLC9cZFxkXGRcZFxkXGQsXGQrL10sWyJISG1tc3MiLC9cZFxkXGRcZFxkXGQvXSxbIkhIbW0iLC9cZFxkXGRcZC9dLFsiSEgiLC9cZFxkL11dLEJvPS9eXC8/RGF0ZVwoKFwtP1xkKykvaTtlLmNyZWF0ZUZyb21JbnB1dEZhbGxiYWNrPWl0KCJtb21lbnQgY29uc3RydWN0aW9uIGZhbGxzIGJhY2sgdG8ganMgRGF0ZS4gVGhpcyBpcyBkaXNjb3VyYWdlZCBhbmQgd2lsbCBiZSByZW1vdmVkIGluIHVwY29taW5nIG1ham9yIHJlbGVhc2UuIFBsZWFzZSByZWZlciB0byBodHRwczovL2dpdGh1Yi5jb20vbW9tZW50L21vbWVudC9pc3N1ZXMvMTQwNyBmb3IgbW9yZSBpbmZvLiIsZnVuY3Rpb24odCl7dC5fZD1uZXcgRGF0ZSh0Ll9pKyh0Ll91c2VVVEM/IiBVVEMiOiIiKSl9KSxBKDAsWyJZWSIsMl0sMCxmdW5jdGlvbigpe3JldHVybiB0aGlzLnllYXIoKSUxMDB9KSxBKDAsWyJZWVlZIiw0XSwwLCJ5ZWFyIiksQSgwLFsiWVlZWVkiLDVdLDAsInllYXIiKSxBKDAsWyJZWVlZWVkiLDYsITBdLDAsInllYXIiKSxDKCJ5ZWFyIiwieSIpLEgoIlkiLGNvKSxIKCJZWSIsbm8sdG8pLEgoIllZWVkiLGhvLGlvKSxIKCJZWVlZWSIsbG8sb28pLEgoIllZWVlZWSIsbG8sb28pLEcoWyJZWVlZWSIsIllZWVlZWSJdLGJvKSxHKCJZWVlZIixmdW5jdGlvbih0LGkpe2lbYm9dPTI9PT10Lmxlbmd0aD9lLnBhcnNlVHdvRGlnaXRZZWFyKHQpOnkodCl9KSxHKCJZWSIsZnVuY3Rpb24odCxpKXtpW2JvXT1lLnBhcnNlVHdvRGlnaXRZZWFyKHQpfSksZS5wYXJzZVR3b0RpZ2l0WWVhcj1mdW5jdGlvbih0KXtyZXR1cm4geSh0KSsoeSh0KT42OD8xOTAwOjJlMyl9O3ZhciBGbz1QKCJGdWxsWWVhciIsITEpO2UuSVNPXzg2MDE9ZnVuY3Rpb24oKXt9O3ZhciBqbz1pdCgibW9tZW50KCkubWluIGlzIGRlcHJlY2F0ZWQsIHVzZSBtb21lbnQubWluIGluc3RlYWQuIGh0dHBzOi8vZ2l0aHViLmNvbS9tb21lbnQvbW9tZW50L2lzc3Vlcy8xNTQ4IixmdW5jdGlvbigpe3ZhciB0PUN0LmFwcGx5KG51bGwsYXJndW1lbnRzKTtyZXR1cm4gdGhpcy5pc1ZhbGlkKCkmJnQuaXNWYWxpZCgpP3RoaXM+dD90aGlzOnQ6YygpfSksUm89aXQoIm1vbWVudCgpLm1heCBpcyBkZXByZWNhdGVkLCB1c2UgbW9tZW50Lm1heCBpbnN0ZWFkLiBodHRwczovL2dpdGh1Yi5jb20vbW9tZW50L21vbWVudC9pc3N1ZXMvMTU0OCIsZnVuY3Rpb24oKXt2YXIgdD1DdC5hcHBseShudWxsLGFyZ3VtZW50cyk7cmV0dXJuIHRoaXMuaXNWYWxpZCgpJiZ0LmlzVmFsaWQoKT90PnRoaXM/dGhpczp0OmMoKX0pLEhvPURhdGUubm93fHxmdW5jdGlvbigpe3JldHVybituZXcgRGF0ZX07TnQoIloiLCI6IiksTnQoIlpaIiwiIiksSCgiWiIsZm8pLEgoIlpaIixmbyksRyhbIloiLCJaWiJdLGZ1bmN0aW9uKHQsZSxpKXtpLl91c2VVVEM9ITAsaS5fdHptPXp0KGZvLHQpfSk7dmFyIFdvPS8oW1wrXC1dfFxkXGQpL2dpO2UudXBkYXRlT2Zmc2V0PWZ1bmN0aW9uKCl7fTt2YXIgWW89LyhcLSk/KD86KFxkKilbLiBdKT8oXGQrKVw6KFxkKykoPzpcOihcZCspXC4/KFxkezN9KT8pPy8sR289L14oLSk/UCg/Oig/OihbMC05LC5dKilZKT8oPzooWzAtOSwuXSopTSk/KD86KFswLTksLl0qKUQpPyg/OlQoPzooWzAtOSwuXSopSCk/KD86KFswLTksLl0qKU0pPyg/OihbMC05LC5dKilTKT8pP3woWzAtOSwuXSopVykkLztYdC5mbj1QdC5wcm90b3R5cGU7dmFyIFZvPUp0KDEsImFkZCIpLFVvPUp0KC0xLCJzdWJ0cmFjdCIpO2UuZGVmYXVsdEZvcm1hdD0iWVlZWS1NTS1ERFRISDptbTpzc1oiO3ZhciBxbz1pdCgibW9tZW50KCkubGFuZygpIGlzIGRlcHJlY2F0ZWQuIEluc3RlYWQsIHVzZSBtb21lbnQoKS5sb2NhbGVEYXRhKCkgdG8gZ2V0IHRoZSBsYW5ndWFnZSBjb25maWd1cmF0aW9uLiBVc2UgbW9tZW50KCkubG9jYWxlKCkgdG8gY2hhbmdlIGxhbmd1YWdlcy4iLGZ1bmN0aW9uKHQpe3JldHVybiB2b2lkIDA9PT10P3RoaXMubG9jYWxlRGF0YSgpOnRoaXMubG9jYWxlKHQpfSk7QSgwLFsiZ2ciLDJdLDAsZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy53ZWVrWWVhcigpJTEwMH0pLEEoMCxbIkdHIiwyXSwwLGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuaXNvV2Vla1llYXIoKSUxMDB9KSxQZSgiZ2dnZyIsIndlZWtZZWFyIiksUGUoImdnZ2dnIiwid2Vla1llYXIiKSxQZSgiR0dHRyIsImlzb1dlZWtZZWFyIiksUGUoIkdHR0dHIiwiaXNvV2Vla1llYXIiKSxDKCJ3ZWVrWWVhciIsImdnIiksQygiaXNvV2Vla1llYXIiLCJHRyIpLEgoIkciLGNvKSxIKCJnIixjbyksSCgiR0ciLG5vLHRvKSxIKCJnZyIsbm8sdG8pLEgoIkdHR0ciLGhvLGlvKSxIKCJnZ2dnIixobyxpbyksSCgiR0dHR0ciLGxvLG9vKSxIKCJnZ2dnZyIsbG8sb28pLFYoWyJnZ2dnIiwiZ2dnZ2ciLCJHR0dHIiwiR0dHR0ciXSxmdW5jdGlvbih0LGUsaSxvKXtlW28uc3Vic3RyKDAsMildPXkodCl9KSxWKFsiZ2ciLCJHRyJdLGZ1bmN0aW9uKHQsaSxvLG4pe2lbbl09ZS5wYXJzZVR3b0RpZ2l0WWVhcih0KX0pLEEoIlEiLDAsIlFvIiwicXVhcnRlciIpLEMoInF1YXJ0ZXIiLCJRIiksSCgiUSIsUWkpLEcoIlEiLGZ1bmN0aW9uKHQsZSl7ZVt3b109MyooeSh0KS0xKX0pLEEoInciLFsid3ciLDJdLCJ3byIsIndlZWsiKSxBKCJXIixbIldXIiwyXSwiV28iLCJpc29XZWVrIiksQygid2VlayIsInciKSxDKCJpc29XZWVrIiwiVyIpLEgoInciLG5vKSxIKCJ3dyIsbm8sdG8pLEgoIlciLG5vKSxIKCJXVyIsbm8sdG8pLFYoWyJ3Iiwid3ciLCJXIiwiV1ciXSxmdW5jdGlvbih0LGUsaSxvKXtlW28uc3Vic3RyKDAsMSldPXkodCl9KTt2YXIgWG89e2RvdzowLGRveTo2fTtBKCJEIixbIkREIiwyXSwiRG8iLCJkYXRlIiksQygiZGF0ZSIsIkQiKSxIKCJEIixubyksSCgiREQiLG5vLHRvKSxIKCJEbyIsZnVuY3Rpb24odCxlKXtyZXR1cm4gdD9lLl9vcmRpbmFsUGFyc2U6ZS5fb3JkaW5hbFBhcnNlTGVuaWVudH0pLEcoWyJEIiwiREQiXSxfbyksRygiRG8iLGZ1bmN0aW9uKHQsZSl7ZVtfb109eSh0Lm1hdGNoKG5vKVswXSwxMCl9KTt2YXIgWm89UCgiRGF0ZSIsITApO0EoImQiLDAsImRvIiwiZGF5IiksQSgiZGQiLDAsMCxmdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5sb2NhbGVEYXRhKCkud2Vla2RheXNNaW4odGhpcyx0KX0pLEEoImRkZCIsMCwwLGZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLmxvY2FsZURhdGEoKS53ZWVrZGF5c1Nob3J0KHRoaXMsdCl9KSxBKCJkZGRkIiwwLDAsZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMubG9jYWxlRGF0YSgpLndlZWtkYXlzKHRoaXMsdCl9KSxBKCJlIiwwLDAsIndlZWtkYXkiKSxBKCJFIiwwLDAsImlzb1dlZWtkYXkiKSxDKCJkYXkiLCJkIiksQygid2Vla2RheSIsImUiKSxDKCJpc29XZWVrZGF5IiwiRSIpLEgoImQiLG5vKSxIKCJlIixubyksSCgiRSIsbm8pLEgoImRkIix2byksSCgiZGRkIix2byksSCgiZGRkZCIsdm8pLFYoWyJkZCIsImRkZCIsImRkZGQiXSxmdW5jdGlvbih0LGUsaSxvKXt2YXIgbj1pLl9sb2NhbGUud2Vla2RheXNQYXJzZSh0LG8saS5fc3RyaWN0KTtudWxsIT1uP2UuZD1uOmwoaSkuaW52YWxpZFdlZWtkYXk9dH0pLFYoWyJkIiwiZSIsIkUiXSxmdW5jdGlvbih0LGUsaSxvKXtlW29dPXkodCl9KTt2YXIgS289IlN1bmRheV9Nb25kYXlfVHVlc2RheV9XZWRuZXNkYXlfVGh1cnNkYXlfRnJpZGF5X1NhdHVyZGF5Ii5zcGxpdCgiXyIpLCRvPSJTdW5fTW9uX1R1ZV9XZWRfVGh1X0ZyaV9TYXQiLnNwbGl0KCJfIiksSm89IlN1X01vX1R1X1dlX1RoX0ZyX1NhIi5zcGxpdCgiXyIpO0EoIkRERCIsWyJEREREIiwzXSwiREREbyIsImRheU9mWWVhciIpLEMoImRheU9mWWVhciIsIkRERCIpLEgoIkRERCIsYW8pLEgoIkREREQiLGVvKSxHKFsiREREIiwiRERERCJdLGZ1bmN0aW9uKHQsZSxpKXtpLl9kYXlPZlllYXI9eSh0KX0pLEEoIkgiLFsiSEgiLDJdLDAsImhvdXIiKSxBKCJoIixbImhoIiwyXSwwLFFlKSxBKCJobW0iLDAsMCxmdW5jdGlvbigpe3JldHVybiIiK1FlLmFwcGx5KHRoaXMpK0wodGhpcy5taW51dGVzKCksMil9KSxBKCJobW1zcyIsMCwwLGZ1bmN0aW9uKCl7cmV0dXJuIiIrUWUuYXBwbHkodGhpcykrTCh0aGlzLm1pbnV0ZXMoKSwyKStMKHRoaXMuc2Vjb25kcygpLDIpfSksQSgiSG1tIiwwLDAsZnVuY3Rpb24oKXtyZXR1cm4iIit0aGlzLmhvdXJzKCkrTCh0aGlzLm1pbnV0ZXMoKSwyKX0pLEEoIkhtbXNzIiwwLDAsZnVuY3Rpb24oKXtyZXR1cm4iIit0aGlzLmhvdXJzKCkrTCh0aGlzLm1pbnV0ZXMoKSwyKStMKHRoaXMuc2Vjb25kcygpLDIpfSksdGkoImEiLCEwKSx0aSgiQSIsITEpLEMoImhvdXIiLCJoIiksSCgiYSIsZWkpLEgoIkEiLGVpKSxIKCJIIixubyksSCgiaCIsbm8pLEgoIkhIIixubyx0byksSCgiaGgiLG5vLHRvKSxIKCJobW0iLHNvKSxIKCJobW1zcyIscm8pLEgoIkhtbSIsc28pLEgoIkhtbXNzIixybyksRyhbIkgiLCJISCJdLHhvKSxHKFsiYSIsIkEiXSxmdW5jdGlvbih0LGUsaSl7aS5faXNQbT1pLl9sb2NhbGUuaXNQTSh0KSxpLl9tZXJpZGllbT10fSksRyhbImgiLCJoaCJdLGZ1bmN0aW9uKHQsZSxpKXtlW3hvXT15KHQpLGwoaSkuYmlnSG91cj0hMH0pLEcoImhtbSIsZnVuY3Rpb24odCxlLGkpe3ZhciBvPXQubGVuZ3RoLTI7ZVt4b109eSh0LnN1YnN0cigwLG8pKSxlW2tvXT15KHQuc3Vic3RyKG8pKSxsKGkpLmJpZ0hvdXI9ITB9KSxHKCJobW1zcyIsZnVuY3Rpb24odCxlLGkpe3ZhciBvPXQubGVuZ3RoLTQsbj10Lmxlbmd0aC0yO2VbeG9dPXkodC5zdWJzdHIoMCxvKSksZVtrb109eSh0LnN1YnN0cihvLDIpKSxlW09vXT15KHQuc3Vic3RyKG4pKSxsKGkpLmJpZ0hvdXI9ITB9KSxHKCJIbW0iLGZ1bmN0aW9uKHQsZSxpKXt2YXIgbz10Lmxlbmd0aC0yO2VbeG9dPXkodC5zdWJzdHIoMCxvKSksZVtrb109eSh0LnN1YnN0cihvKSl9KSxHKCJIbW1zcyIsZnVuY3Rpb24odCxlLGkpe3ZhciBvPXQubGVuZ3RoLTQsbj10Lmxlbmd0aC0yO2VbeG9dPXkodC5zdWJzdHIoMCxvKSksZVtrb109eSh0LnN1YnN0cihvLDIpKSxlW09vXT15KHQuc3Vic3RyKG4pKX0pO3ZhciBRbz0vW2FwXVwuP20/XC4/L2ksdG49UCgiSG91cnMiLCEwKTtBKCJtIixbIm1tIiwyXSwwLCJtaW51dGUiKSxDKCJtaW51dGUiLCJtIiksSCgibSIsbm8pLEgoIm1tIixubyx0byksRyhbIm0iLCJtbSJdLGtvKTt2YXIgZW49UCgiTWludXRlcyIsITEpO0EoInMiLFsic3MiLDJdLDAsInNlY29uZCIpLEMoInNlY29uZCIsInMiKSxIKCJzIixubyksSCgic3MiLG5vLHRvKSxHKFsicyIsInNzIl0sT28pO3ZhciBvbj1QKCJTZWNvbmRzIiwhMSk7QSgiUyIsMCwwLGZ1bmN0aW9uKCl7cmV0dXJufn4odGhpcy5taWxsaXNlY29uZCgpLzEwMCl9KSxBKDAsWyJTUyIsMl0sMCxmdW5jdGlvbigpe3JldHVybn5+KHRoaXMubWlsbGlzZWNvbmQoKS8xMCl9KSxBKDAsWyJTU1MiLDNdLDAsIm1pbGxpc2Vjb25kIiksQSgwLFsiU1NTUyIsNF0sMCxmdW5jdGlvbigpe3JldHVybiAxMCp0aGlzLm1pbGxpc2Vjb25kKCl9KSxBKDAsWyJTU1NTUyIsNV0sMCxmdW5jdGlvbigpe3JldHVybiAxMDAqdGhpcy5taWxsaXNlY29uZCgpfSksQSgwLFsiU1NTU1NTIiw2XSwwLGZ1bmN0aW9uKCl7cmV0dXJuIDFlMyp0aGlzLm1pbGxpc2Vjb25kKCl9KSxBKDAsWyJTU1NTU1NTIiw3XSwwLGZ1bmN0aW9uKCl7cmV0dXJuIDFlNCp0aGlzLm1pbGxpc2Vjb25kKCl9KSxBKDAsWyJTU1NTU1NTUyIsOF0sMCxmdW5jdGlvbigpe3JldHVybiAxZTUqdGhpcy5taWxsaXNlY29uZCgpfSksQSgwLFsiU1NTU1NTU1NTIiw5XSwwLGZ1bmN0aW9uKCl7cmV0dXJuIDFlNip0aGlzLm1pbGxpc2Vjb25kKCl9KSxDKCJtaWxsaXNlY29uZCIsIm1zIiksSCgiUyIsYW8sUWkpLEgoIlNTIixhbyx0byksSCgiU1NTIixhbyxlbyk7dmFyIG5uO2Zvcihubj0iU1NTUyI7bm4ubGVuZ3RoPD05O25uKz0iUyIpSChubix1byk7Zm9yKG5uPSJTIjtubi5sZW5ndGg8PTk7bm4rPSJTIilHKG5uLG5pKTt2YXIgc249UCgiTWlsbGlzZWNvbmRzIiwhMSk7QSgieiIsMCwwLCJ6b25lQWJiciIpLEEoInp6IiwwLDAsInpvbmVOYW1lIik7dmFyIHJuPW0ucHJvdG90eXBlO3JuLmFkZD1Wbyxybi5jYWxlbmRhcj10ZSxybi5jbG9uZT1lZSxybi5kaWZmPWhlLHJuLmVuZE9mPXdlLHJuLmZvcm1hdD1jZSxybi5mcm9tPXBlLHJuLmZyb21Ob3c9ZmUscm4udG89bWUscm4udG9Ob3c9dmUscm4uZ2V0PXoscm4uaW52YWxpZEF0PUVlLHJuLmlzQWZ0ZXI9aWUscm4uaXNCZWZvcmU9b2Uscm4uaXNCZXR3ZWVuPW5lLHJuLmlzU2FtZT1zZSxybi5pc1NhbWVPckFmdGVyPXJlLHJuLmlzU2FtZU9yQmVmb3JlPWFlLHJuLmlzVmFsaWQ9Q2Uscm4ubGFuZz1xbyxybi5sb2NhbGU9Z2Uscm4ubG9jYWxlRGF0YT15ZSxybi5tYXg9Um8scm4ubWluPWpvLHJuLnBhcnNpbmdGbGFncz1UZSxybi5zZXQ9eixybi5zdGFydE9mPWJlLHJuLnN1YnRyYWN0PVVvLHJuLnRvQXJyYXk9T2Uscm4udG9PYmplY3Q9TWUscm4udG9EYXRlPWtlLHJuLnRvSVNPU3RyaW5nPXVlLHJuLnRvSlNPTj1EZSxybi50b1N0cmluZz1sZSxybi51bml4PXhlLHJuLnZhbHVlT2Y9X2Uscm4uY3JlYXRpb25EYXRhPVNlLHJuLnllYXI9Rm8scm4uaXNMZWFwWWVhcj1sdCxybi53ZWVrWWVhcj1JZSxybi5pc29XZWVrWWVhcj1OZSxybi5xdWFydGVyPXJuLnF1YXJ0ZXJzPUZlLHJuLm1vbnRoPUoscm4uZGF5c0luTW9udGg9USxybi53ZWVrPXJuLndlZWtzPVdlLHJuLmlzb1dlZWs9cm4uaXNvV2Vla3M9WWUscm4ud2Vla3NJblllYXI9TGUscm4uaXNvV2Vla3NJblllYXI9emUscm4uZGF0ZT1abyxybi5kYXk9cm4uZGF5cz1aZSxybi53ZWVrZGF5PUtlLHJuLmlzb1dlZWtkYXk9JGUscm4uZGF5T2ZZZWFyPUplLHJuLmhvdXI9cm4uaG91cnM9dG4scm4ubWludXRlPXJuLm1pbnV0ZXM9ZW4scm4uc2Vjb25kPXJuLnNlY29uZHM9b24scm4ubWlsbGlzZWNvbmQ9cm4ubWlsbGlzZWNvbmRzPXNuLHJuLnV0Y09mZnNldD1CdCxybi51dGM9anQscm4ubG9jYWw9UnQscm4ucGFyc2Vab25lPUh0LHJuLmhhc0FsaWduZWRIb3VyT2Zmc2V0PVd0LHJuLmlzRFNUPVl0LHJuLmlzRFNUU2hpZnRlZD1HdCxybi5pc0xvY2FsPVZ0LHJuLmlzVXRjT2Zmc2V0PVV0LHJuLmlzVXRjPXF0LHJuLmlzVVRDPXF0LHJuLnpvbmVBYmJyPXNpLHJuLnpvbmVOYW1lPXJpLHJuLmRhdGVzPWl0KCJkYXRlcyBhY2Nlc3NvciBpcyBkZXByZWNhdGVkLiBVc2UgZGF0ZSBpbnN0ZWFkLiIsWm8pLHJuLm1vbnRocz1pdCgibW9udGhzIGFjY2Vzc29yIGlzIGRlcHJlY2F0ZWQuIFVzZSBtb250aCBpbnN0ZWFkIixKKSxybi55ZWFycz1pdCgieWVhcnMgYWNjZXNzb3IgaXMgZGVwcmVjYXRlZC4gVXNlIHllYXIgaW5zdGVhZCIsRm8pLHJuLnpvbmU9aXQoIm1vbWVudCgpLnpvbmUgaXMgZGVwcmVjYXRlZCwgdXNlIG1vbWVudCgpLnV0Y09mZnNldCBpbnN0ZWFkLiBodHRwczovL2dpdGh1Yi5jb20vbW9tZW50L21vbWVudC9pc3N1ZXMvMTc3OSIsRnQpO3ZhciBhbj1ybixobj17c2FtZURheToiW1RvZGF5IGF0XSBMVCIsbmV4dERheToiW1RvbW9ycm93IGF0XSBMVCIsbmV4dFdlZWs6ImRkZGQgW2F0XSBMVCIsbGFzdERheToiW1llc3RlcmRheSBhdF0gTFQiLGxhc3RXZWVrOiJbTGFzdF0gZGRkZCBbYXRdIExUIixzYW1lRWxzZToiTCJ9LGRuPXtMVFM6Img6bW06c3MgQSIsTFQ6Img6bW0gQSIsTDoiTU0vREQvWVlZWSIsTEw6Ik1NTU0gRCwgWVlZWSIsTExMOiJNTU1NIEQsIFlZWVkgaDptbSBBIixMTExMOiJkZGRkLCBNTU1NIEQsIFlZWVkgaDptbSBBIn0sbG49IkludmFsaWQgZGF0ZSIsdW49IiVkIixjbj0vXGR7MSwyfS8scG49e2Z1dHVyZToiaW4gJXMiLHBhc3Q6IiVzIGFnbyIsczoiYSBmZXcgc2Vjb25kcyIsbToiYSBtaW51dGUiLG1tOiIlZCBtaW51dGVzIixoOiJhbiBob3VyIixoaDoiJWQgaG91cnMiLGQ6ImEgZGF5IixkZDoiJWQgZGF5cyIsTToiYSBtb250aCIsTU06IiVkIG1vbnRocyIseToiYSB5ZWFyIix5eToiJWQgeWVhcnMifSxmbj13LnByb3RvdHlwZTtmbi5fY2FsZW5kYXI9aG4sZm4uY2FsZW5kYXI9ZGksZm4uX2xvbmdEYXRlRm9ybWF0PWRuLGZuLmxvbmdEYXRlRm9ybWF0PWxpLGZuLl9pbnZhbGlkRGF0ZT1sbixmbi5pbnZhbGlkRGF0ZT11aSxmbi5fb3JkaW5hbD11bixmbi5vcmRpbmFsPWNpLGZuLl9vcmRpbmFsUGFyc2U9Y24sZm4ucHJlcGFyc2U9cGksZm4ucG9zdGZvcm1hdD1waSxmbi5fcmVsYXRpdmVUaW1lPXBuLGZuLnJlbGF0aXZlVGltZT1maSxmbi5wYXN0RnV0dXJlPW1pLGZuLnNldD12aSxmbi5tb250aHM9WCxmbi5fbW9udGhzPUVvLGZuLm1vbnRoc1Nob3J0PVosZm4uX21vbnRoc1Nob3J0PVNvLGZuLm1vbnRoc1BhcnNlPUssZm4ud2Vlaz1qZSxmbi5fd2Vlaz1Ybyxmbi5maXJzdERheU9mWWVhcj1IZSxmbi5maXJzdERheU9mV2Vlaz1SZSxmbi53ZWVrZGF5cz1WZSxmbi5fd2Vla2RheXM9S28sZm4ud2Vla2RheXNNaW49cWUsZm4uX3dlZWtkYXlzTWluPUpvLGZuLndlZWtkYXlzU2hvcnQ9VWUsZm4uX3dlZWtkYXlzU2hvcnQ9JG8sZm4ud2Vla2RheXNQYXJzZT1YZSxmbi5pc1BNPWlpLGZuLl9tZXJpZGllbVBhcnNlPVFvLGZuLm1lcmlkaWVtPW9pLE8oImVuIix7bW9udGhzUGFyc2U6Wy9eamFuL2ksL15mZWIvaSwvXm1hci9pLC9eYXByL2ksL15tYXkvaSwvXmp1bi9pLC9eanVsL2ksL15hdWcvaSwvXnNlcC9pLC9eb2N0L2ksL15ub3YvaSwvXmRlYy9pXSxsb25nTW9udGhzUGFyc2U6Wy9eamFudWFyeSQvaSwvXmZlYnJ1YXJ5JC9pLC9ebWFyY2gkL2ksL15hcHJpbCQvaSwvXm1heSQvaSwvXmp1bmUkL2ksL15qdWx5JC9pLC9eYXVndXN0JC9pLC9ec2VwdGVtYmVyJC9pLC9eb2N0b2JlciQvaSwvXm5vdmVtYmVyJC9pLC9eZGVjZW1iZXIkL2ldLHNob3J0TW9udGhzUGFyc2U6Wy9eamFuJC9pLC9eZmViJC9pLC9ebWFyJC9pLC9eYXByJC9pLC9ebWF5JC9pLC9eanVuJC9pLC9eanVsJC9pLC9eYXVnL2ksL15zZXB0PyQvaSwvXm9jdCQvaSwvXm5vdiQvaSwvXmRlYyQvaV0sb3JkaW5hbFBhcnNlOi9cZHsxLDJ9KHRofHN0fG5kfHJkKS8sb3JkaW5hbDpmdW5jdGlvbih0KXt2YXIgZT10JTEwLGk9MT09PXkodCUxMDAvMTApPyJ0aCI6MT09PWU/InN0IjoyPT09ZT8ibmQiOjM9PT1lPyJyZCI6InRoIjtyZXR1cm4gdCtpfX0pLGUubGFuZz1pdCgibW9tZW50LmxhbmcgaXMgZGVwcmVjYXRlZC4gVXNlIG1vbWVudC5sb2NhbGUgaW5zdGVhZC4iLE8pLGUubGFuZ0RhdGE9aXQoIm1vbWVudC5sYW5nRGF0YSBpcyBkZXByZWNhdGVkLiBVc2UgbW9tZW50LmxvY2FsZURhdGEgaW5zdGVhZC4iLEQpO3ZhciBtbj1NYXRoLmFicyx2bj16aSgibXMiKSxnbj16aSgicyIpLHluPXppKCJtIiksYm49emkoImgiKSx3bj16aSgiZCIpLF9uPXppKCJ3IikseG49emkoIk0iKSxrbj16aSgieSIpLE9uPUFpKCJtaWxsaXNlY29uZHMiKSxNbj1BaSgic2Vjb25kcyIpLERuPUFpKCJtaW51dGVzIiksQ249QWkoImhvdXJzIiksVG49QWkoImRheXMiKSxFbj1BaSgibW9udGhzIiksU249QWkoInllYXJzIiksUG49TWF0aC5yb3VuZCxJbj17czo0NSxtOjQ1LGg6MjIsZDoyNixNOjExfSxObj1NYXRoLmFicyx6bj1QdC5wcm90b3R5cGU7em4uYWJzPU9pLHpuLmFkZD1EaSx6bi5zdWJ0cmFjdD1DaSx6bi5hcz1JaSx6bi5hc01pbGxpc2Vjb25kcz12bix6bi5hc1NlY29uZHM9Z24sem4uYXNNaW51dGVzPXluLHpuLmFzSG91cnM9Ym4sem4uYXNEYXlzPXduLHpuLmFzV2Vla3M9X24sem4uYXNNb250aHM9eG4sem4uYXNZZWFycz1rbix6bi52YWx1ZU9mPU5pLHpuLl9idWJibGU9RWksem4uZ2V0PUxpLHpuLm1pbGxpc2Vjb25kcz1Pbix6bi5zZWNvbmRzPU1uLHpuLm1pbnV0ZXM9RG4sem4uaG91cnM9Q24sem4uZGF5cz1Ubix6bi53ZWVrcz1CaSx6bi5tb250aHM9RW4sem4ueWVhcnM9U24sem4uaHVtYW5pemU9SGksem4udG9JU09TdHJpbmc9V2ksem4udG9TdHJpbmc9V2ksem4udG9KU09OPVdpLHpuLmxvY2FsZT1nZSx6bi5sb2NhbGVEYXRhPXllLHpuLnRvSXNvU3RyaW5nPWl0KCJ0b0lzb1N0cmluZygpIGlzIGRlcHJlY2F0ZWQuIFBsZWFzZSB1c2UgdG9JU09TdHJpbmcoKSBpbnN0ZWFkIChub3RpY2UgdGhlIGNhcGl0YWxzKSIsV2kpLHpuLmxhbmc9cW8sQSgiWCIsMCwwLCJ1bml4IiksQSgieCIsMCwwLCJ2YWx1ZU9mIiksSCgieCIsY28pLEgoIlgiLG1vKSxHKCJYIixmdW5jdGlvbih0LGUsaSl7aS5fZD1uZXcgRGF0ZSgxZTMqcGFyc2VGbG9hdCh0LDEwKSl9KSxHKCJ4IixmdW5jdGlvbih0LGUsaSl7aS5fZD1uZXcgRGF0ZSh5KHQpKX0pLGUudmVyc2lvbj0iMi4xMS4wIixpKEN0KSxlLmZuPWFuLGUubWluPUV0LGUubWF4PVN0LGUubm93PUhvLGUudXRjPWgsZS51bml4PWFpLGUubW9udGhzPWJpLGUuaXNEYXRlPW4sZS5sb2NhbGU9TyxlLmludmFsaWQ9YyxlLmR1cmF0aW9uPVh0LGUuaXNNb21lbnQ9dixlLndlZWtkYXlzPV9pLGUucGFyc2Vab25lPWhpLGUubG9jYWxlRGF0YT1ELGUuaXNEdXJhdGlvbj1JdCxlLm1vbnRoc1Nob3J0PXdpLGUud2Vla2RheXNNaW49a2ksZS5kZWZpbmVMb2NhbGU9TSxlLndlZWtkYXlzU2hvcnQ9eGksZS5ub3JtYWxpemVVbml0cz1ULGUucmVsYXRpdmVUaW1lVGhyZXNob2xkPVJpLGUucHJvdG90eXBlPWFuO3ZhciBMbj1lO3JldHVybiBMbn0pfSkuY2FsbChlLGkoNCkodCkpfSxmdW5jdGlvbih0LGUpe3QuZXhwb3J0cz1mdW5jdGlvbih0KXtyZXR1cm4gdC53ZWJwYWNrUG9seWZpbGx8fCh0LmRlcHJlY2F0ZT1mdW5jdGlvbigpe30sdC5wYXRocz1bXSx0LmNoaWxkcmVuPVtdLHQud2VicGFja1BvbHlmaWxsPTEpLHR9fSxmdW5jdGlvbih0LGUpe2Z1bmN0aW9uIGkodCl7dGhyb3cgbmV3IEVycm9yKCJDYW5ub3QgZmluZCBtb2R1bGUgJyIrdCsiJy4iKX1pLmtleXM9ZnVuY3Rpb24oKXtyZXR1cm5bXX0saS5yZXNvbHZlPWksdC5leHBvcnRzPWksaS5pZD01fSxmdW5jdGlvbih0LGUpeyhmdW5jdGlvbihlKXtmdW5jdGlvbiBpKHQsZSxpKXt2YXIgbz1lJiZpfHwwLG49MDtmb3IoZT1lfHxbXSx0LnRvTG93ZXJDYXNlKCkucmVwbGFjZSgvWzAtOWEtZl17Mn0vZyxmdW5jdGlvbih0KXsxNj5uJiYoZVtvK24rK109dVt0XSl9KTsxNj5uOyllW28rbisrXT0wO3JldHVybiBlfWZ1bmN0aW9uIG8odCxlKXt2YXIgaT1lfHwwLG89bDtyZXR1cm4gb1t0W2krK11dK29bdFtpKytdXStvW3RbaSsrXV0rb1t0W2krK11dKyItIitvW3RbaSsrXV0rb1t0W2krK11dKyItIitvW3RbaSsrXV0rb1t0W2krK11dKyItIitvW3RbaSsrXV0rb1t0W2krK11dKyItIitvW3RbaSsrXV0rb1t0W2krK11dK29bdFtpKytdXStvW3RbaSsrXV0rb1t0W2krK11dK29bdFtpKytdXX1mdW5jdGlvbiBuKHQsZSxpKXt2YXIgbj1lJiZpfHwwLHM9ZXx8W107dD10fHx7fTt2YXIgcj12b2lkIDAhPT10LmNsb2Nrc2VxP3QuY2xvY2tzZXE6bSxhPXZvaWQgMCE9PXQubXNlY3M/dC5tc2VjczoobmV3IERhdGUpLmdldFRpbWUoKSxoPXZvaWQgMCE9PXQubnNlY3M/dC5uc2VjczpnKzEsZD1hLXYrKGgtZykvMWU0O2lmKDA+ZCYmdm9pZCAwPT09dC5jbG9ja3NlcSYmKHI9cisxJjE2MzgzKSwoMD5kfHxhPnYpJiZ2b2lkIDA9PT10Lm5zZWNzJiYoaD0wKSxoPj0xZTQpdGhyb3cgbmV3IEVycm9yKCJ1dWlkLnYxKCk6IENhbid0IGNyZWF0ZSBtb3JlIHRoYW4gMTBNIHV1aWRzL3NlYyIpO3Y9YSxnPWgsbT1yLGErPTEyMjE5MjkyOGU1O3ZhciBsPSgxZTQqKDI2ODQzNTQ1NSZhKStoKSU0Mjk0OTY3Mjk2O3NbbisrXT1sPj4+MjQmMjU1LHNbbisrXT1sPj4+MTYmMjU1LHNbbisrXT1sPj4+OCYyNTUsc1tuKytdPTI1NSZsO3ZhciB1PWEvNDI5NDk2NzI5NioxZTQmMjY4NDM1NDU1O3NbbisrXT11Pj4+OCYyNTUsc1tuKytdPTI1NSZ1LHNbbisrXT11Pj4+MjQmMTV8MTYsc1tuKytdPXU+Pj4xNiYyNTUsc1tuKytdPXI+Pj44fDEyOCxzW24rK109MjU1JnI7Zm9yKHZhciBjPXQubm9kZXx8ZixwPTA7Nj5wO3ArKylzW24rcF09Y1twXTtyZXR1cm4gZT9lOm8ocyl9ZnVuY3Rpb24gcyh0LGUsaSl7dmFyIG49ZSYmaXx8MDsic3RyaW5nIj09dHlwZW9mIHQmJihlPSJiaW5hcnkiPT10P25ldyBBcnJheSgxNik6bnVsbCx0PW51bGwpLHQ9dHx8e307dmFyIHM9dC5yYW5kb218fCh0LnJuZ3x8cikoKTtpZihzWzZdPTE1JnNbNl18NjQsc1s4XT02MyZzWzhdfDEyOCxlKWZvcih2YXIgYT0wOzE2PmE7YSsrKWVbbithXT1zW2FdO3JldHVybiBlfHxvKHMpfXZhciByLGE9InVuZGVmaW5lZCIhPXR5cGVvZiB3aW5kb3c/d2luZG93OiJ1bmRlZmluZWQiIT10eXBlb2YgZT9lOm51bGw7aWYoYSYmYS5jcnlwdG8mJmNyeXB0by5nZXRSYW5kb21WYWx1ZXMpe3ZhciBoPW5ldyBVaW50OEFycmF5KDE2KTtyPWZ1bmN0aW9uKCl7cmV0dXJuIGNyeXB0by5nZXRSYW5kb21WYWx1ZXMoaCksaH19aWYoIXIpe3ZhciBkPW5ldyBBcnJheSgxNik7cj1mdW5jdGlvbigpe2Zvcih2YXIgdCxlPTA7MTY+ZTtlKyspMD09PSgzJmUpJiYodD00Mjk0OTY3Mjk2Kk1hdGgucmFuZG9tKCkpLGRbZV09dD4+PigoMyZlKTw8MykmMjU1O3JldHVybiBkfX1mb3IodmFyIGw9W10sdT17fSxjPTA7MjU2PmM7YysrKWxbY109KGMrMjU2KS50b1N0cmluZygxNikuc3Vic3RyKDEpLHVbbFtjXV09Yzt2YXIgcD1yKCksZj1bMXxwWzBdLHBbMV0scFsyXSxwWzNdLHBbNF0scFs1XV0sbT0xNjM4MyYocFs2XTw8OHxwWzddKSx2PTAsZz0wLHk9czt5LnYxPW4seS52ND1zLHkucGFyc2U9aSx5LnVucGFyc2U9byx0LmV4cG9ydHM9eX0pLmNhbGwoZSxmdW5jdGlvbigpe3JldHVybiB0aGlzfSgpKX0sZnVuY3Rpb24odCxlKXtlLnByZXBhcmVFbGVtZW50cz1mdW5jdGlvbih0KXtmb3IodmFyIGUgaW4gdCl0Lmhhc093blByb3BlcnR5KGUpJiYodFtlXS5yZWR1bmRhbnQ9dFtlXS51c2VkLHRbZV0udXNlZD1bXSl9LGUuY2xlYW51cEVsZW1lbnRzPWZ1bmN0aW9uKHQpe2Zvcih2YXIgZSBpbiB0KWlmKHQuaGFzT3duUHJvcGVydHkoZSkmJnRbZV0ucmVkdW5kYW50KXtmb3IodmFyIGk9MDtpPHRbZV0ucmVkdW5kYW50Lmxlbmd0aDtpKyspdFtlXS5yZWR1bmRhbnRbaV0ucGFyZW50Tm9kZS5yZW1vdmVDaGlsZCh0W2VdLnJlZHVuZGFudFtpXSk7dFtlXS5yZWR1bmRhbnQ9W119fSxlLnJlc2V0RWxlbWVudHM9ZnVuY3Rpb24odCl7ZS5wcmVwYXJlRWxlbWVudHModCksZS5jbGVhbnVwRWxlbWVudHModCksZS5wcmVwYXJlRWxlbWVudHModCl9LGUuZ2V0U1ZHRWxlbWVudD1mdW5jdGlvbih0LGUsaSl7dmFyIG87cmV0dXJuIGUuaGFzT3duUHJvcGVydHkodCk/ZVt0XS5yZWR1bmRhbnQubGVuZ3RoPjA/KG89ZVt0XS5yZWR1bmRhbnRbMF0sZVt0XS5yZWR1bmRhbnQuc2hpZnQoKSk6KG89ZG9jdW1lbnQuY3JlYXRlRWxlbWVudE5TKCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIsdCksaS5hcHBlbmRDaGlsZChvKSk6KG89ZG9jdW1lbnQuY3JlYXRlRWxlbWVudE5TKCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIsdCksZVt0XT17dXNlZDpbXSxyZWR1bmRhbnQ6W119LGkuYXBwZW5kQ2hpbGQobykpLGVbdF0udXNlZC5wdXNoKG8pLG99LGUuZ2V0RE9NRWxlbWVudD1mdW5jdGlvbih0LGUsaSxvKXt2YXIgbjtyZXR1cm4gZS5oYXNPd25Qcm9wZXJ0eSh0KT9lW3RdLnJlZHVuZGFudC5sZW5ndGg+MD8obj1lW3RdLnJlZHVuZGFudFswXSxlW3RdLnJlZHVuZGFudC5zaGlmdCgpKToobj1kb2N1bWVudC5jcmVhdGVFbGVtZW50KHQpLHZvaWQgMCE9PW8/aS5pbnNlcnRCZWZvcmUobixvKTppLmFwcGVuZENoaWxkKG4pKToobj1kb2N1bWVudC5jcmVhdGVFbGVtZW50KHQpLGVbdF09e3VzZWQ6W10scmVkdW5kYW50OltdfSx2b2lkIDAhPT1vP2kuaW5zZXJ0QmVmb3JlKG4sbyk6aS5hcHBlbmRDaGlsZChuKSksZVt0XS51c2VkLnB1c2gobiksbn0sZS5kcmF3UG9pbnQ9ZnVuY3Rpb24odCxpLG8sbixzLHIpe3ZhciBhO2lmKCJjaXJjbGUiPT1vLnN0eWxlPyhhPWUuZ2V0U1ZHRWxlbWVudCgiY2lyY2xlIixuLHMpLGEuc2V0QXR0cmlidXRlTlMobnVsbCwiY3giLHQpLGEuc2V0QXR0cmlidXRlTlMobnVsbCwiY3kiLGkpLGEuc2V0QXR0cmlidXRlTlMobnVsbCwiciIsLjUqby5zaXplKSk6KGE9ZS5nZXRTVkdFbGVtZW50KCJyZWN0IixuLHMpLGEuc2V0QXR0cmlidXRlTlMobnVsbCwieCIsdC0uNSpvLnNpemUpLGEuc2V0QXR0cmlidXRlTlMobnVsbCwieSIsaS0uNSpvLnNpemUpLGEuc2V0QXR0cmlidXRlTlMobnVsbCwid2lkdGgiLG8uc2l6ZSksYS5zZXRBdHRyaWJ1dGVOUyhudWxsLCJoZWlnaHQiLG8uc2l6ZSkpLHZvaWQgMCE9PW8uc3R5bGVzJiZhLnNldEF0dHJpYnV0ZU5TKG51bGwsInN0eWxlIixvLnN0eWxlcyksYS5zZXRBdHRyaWJ1dGVOUyhudWxsLCJjbGFzcyIsby5jbGFzc05hbWUrIiB2aXMtcG9pbnQiKSxyKXt2YXIgaD1lLmdldFNWR0VsZW1lbnQoInRleHQiLG4scyk7ci54T2Zmc2V0JiYodCs9ci54T2Zmc2V0KSxyLnlPZmZzZXQmJihpKz1yLnlPZmZzZXQpLHIuY29udGVudCYmKGgudGV4dENvbnRlbnQ9ci5jb250ZW50KSxyLmNsYXNzTmFtZSYmaC5zZXRBdHRyaWJ1dGVOUyhudWxsLCJjbGFzcyIsci5jbGFzc05hbWUrIiB2aXMtbGFiZWwiKSxoLnNldEF0dHJpYnV0ZU5TKG51bGwsIngiLHQpLGguc2V0QXR0cmlidXRlTlMobnVsbCwieSIsaSl9cmV0dXJuIGF9LGUuZHJhd0Jhcj1mdW5jdGlvbih0LGksbyxuLHMscixhLGgpe2lmKDAhPW4pezA+biYmKG4qPS0xLGktPW4pO3ZhciBkPWUuZ2V0U1ZHRWxlbWVudCgicmVjdCIscixhKTtkLnNldEF0dHJpYnV0ZU5TKG51bGwsIngiLHQtLjUqbyksZC5zZXRBdHRyaWJ1dGVOUyhudWxsLCJ5IixpKSxkLnNldEF0dHJpYnV0ZU5TKG51bGwsIndpZHRoIixvKSxkLnNldEF0dHJpYnV0ZU5TKG51bGwsImhlaWdodCIsbiksZC5zZXRBdHRyaWJ1dGVOUyhudWxsLCJjbGFzcyIscyksaCYmZC5zZXRBdHRyaWJ1dGVOUyhudWxsLCJzdHlsZSIsaCl9fX0sZnVuY3Rpb24odCxlLGkpe2Z1bmN0aW9uIG8odCxlKXtpZih0JiYhQXJyYXkuaXNBcnJheSh0KSYmKGU9dCx0PW51bGwpLHRoaXMuX29wdGlvbnM9ZXx8e30sdGhpcy5fZGF0YT17fSx0aGlzLmxlbmd0aD0wLHRoaXMuX2ZpZWxkSWQ9dGhpcy5fb3B0aW9ucy5maWVsZElkfHwiaWQiLHRoaXMuX3R5cGU9e30sdGhpcy5fb3B0aW9ucy50eXBlKWZvcih2YXIgaT1PYmplY3Qua2V5cyh0aGlzLl9vcHRpb25zLnR5cGUpLG89MCxuPWkubGVuZ3RoO24+bztvKyspe3ZhciBzPWlbb10scj10aGlzLl9vcHRpb25zLnR5cGVbc107IkRhdGUiPT1yfHwiSVNPRGF0ZSI9PXJ8fCJBU1BEYXRlIj09cj90aGlzLl90eXBlW3NdPSJEYXRlIjp0aGlzLl90eXBlW3NdPXJ9aWYodGhpcy5fb3B0aW9ucy5jb252ZXJ0KXRocm93IG5ldyBFcnJvcignT3B0aW9uICJjb252ZXJ0IiBpcyBkZXByZWNhdGVkLiBVc2UgInR5cGUiIGluc3RlYWQuJyk7dGhpcy5fc3Vic2NyaWJlcnM9e30sdCYmdGhpcy5hZGQodCksdGhpcy5zZXRPcHRpb25zKGUpfXZhciBuPWkoMSkscz1pKDkpO28ucHJvdG90eXBlLnNldE9wdGlvbnM9ZnVuY3Rpb24odCl7dCYmdm9pZCAwIT09dC5xdWV1ZSYmKHQucXVldWU9PT0hMT90aGlzLl9xdWV1ZSYmKHRoaXMuX3F1ZXVlLmRlc3Ryb3koKSxkZWxldGUgdGhpcy5fcXVldWUpOih0aGlzLl9xdWV1ZXx8KHRoaXMuX3F1ZXVlPXMuZXh0ZW5kKHRoaXMse3JlcGxhY2U6WyJhZGQiLCJ1cGRhdGUiLCJyZW1vdmUiXX0pKSwib2JqZWN0Ij09dHlwZW9mIHQucXVldWUmJnRoaXMuX3F1ZXVlLnNldE9wdGlvbnModC5xdWV1ZSkpKX0sby5wcm90b3R5cGUub249ZnVuY3Rpb24odCxlKXt2YXIgaT10aGlzLl9zdWJzY3JpYmVyc1t0XTtpfHwoaT1bXSx0aGlzLl9zdWJzY3JpYmVyc1t0XT1pKSxpLnB1c2goe2NhbGxiYWNrOmV9KX0sby5wcm90b3R5cGUuc3Vic2NyaWJlPWZ1bmN0aW9uKCl7dGhyb3cgbmV3IEVycm9yKCJEYXRhU2V0LnN1YnNjcmliZSBpcyBkZXByZWNhdGVkLiBVc2UgRGF0YVNldC5vbiBpbnN0ZWFkLiIpfSxvLnByb3RvdHlwZS5vZmY9ZnVuY3Rpb24odCxlKXt2YXIgaT10aGlzLl9zdWJzY3JpYmVyc1t0XTtpJiYodGhpcy5fc3Vic2NyaWJlcnNbdF09aS5maWx0ZXIoZnVuY3Rpb24odCl7cmV0dXJuIHQuY2FsbGJhY2shPWV9KSl9LG8ucHJvdG90eXBlLnVuc3Vic2NyaWJlPWZ1bmN0aW9uKCl7dGhyb3cgbmV3IEVycm9yKCJEYXRhU2V0LnVuc3Vic2NyaWJlIGlzIGRlcHJlY2F0ZWQuIFVzZSBEYXRhU2V0Lm9mZiBpbnN0ZWFkLiIpfSxvLnByb3RvdHlwZS5fdHJpZ2dlcj1mdW5jdGlvbih0LGUsaSl7aWYoIioiPT10KXRocm93IG5ldyBFcnJvcigiQ2Fubm90IHRyaWdnZXIgZXZlbnQgKiIpO3ZhciBvPVtdO3QgaW4gdGhpcy5fc3Vic2NyaWJlcnMmJihvPW8uY29uY2F0KHRoaXMuX3N1YnNjcmliZXJzW3RdKSksIioiaW4gdGhpcy5fc3Vic2NyaWJlcnMmJihvPW8uY29uY2F0KHRoaXMuX3N1YnNjcmliZXJzWyIqIl0pKTtmb3IodmFyIG49MCxzPW8ubGVuZ3RoO3M+bjtuKyspe3ZhciByPW9bbl07ci5jYWxsYmFjayYmci5jYWxsYmFjayh0LGUsaXx8bnVsbCl9fSxvLnByb3RvdHlwZS5hZGQ9ZnVuY3Rpb24odCxlKXt2YXIgaSxvPVtdLG49dGhpcztpZihBcnJheS5pc0FycmF5KHQpKWZvcih2YXIgcz0wLHI9dC5sZW5ndGg7cj5zO3MrKylpPW4uX2FkZEl0ZW0odFtzXSksby5wdXNoKGkpO2Vsc2V7aWYoISh0IGluc3RhbmNlb2YgT2JqZWN0KSl0aHJvdyBuZXcgRXJyb3IoIlVua25vd24gZGF0YVR5cGUiKTtpPW4uX2FkZEl0ZW0odCksby5wdXNoKGkpfXJldHVybiBvLmxlbmd0aCYmdGhpcy5fdHJpZ2dlcigiYWRkIix7aXRlbXM6b30sZSksb30sby5wcm90b3R5cGUudXBkYXRlPWZ1bmN0aW9uKHQsZSl7dmFyIGk9W10sbz1bXSxzPVtdLHI9W10sYT10aGlzLGg9YS5fZmllbGRJZCxkPWZ1bmN0aW9uKHQpe3ZhciBlPXRbaF07aWYoYS5fZGF0YVtlXSl7dmFyIGQ9bi5leHRlbmQoe30sYS5fZGF0YVtlXSk7ZT1hLl91cGRhdGVJdGVtKHQpLG8ucHVzaChlKSxyLnB1c2godCkscy5wdXNoKGQpfWVsc2UgZT1hLl9hZGRJdGVtKHQpLGkucHVzaChlKX07aWYoQXJyYXkuaXNBcnJheSh0KSlmb3IodmFyIGw9MCx1PXQubGVuZ3RoO3U+bDtsKyspdFtsXWluc3RhbmNlb2YgT2JqZWN0P2QodFtsXSk6Y29uc29sZS53YXJuKCJJZ25vcmluZyBpbnB1dCBpdGVtLCB3aGljaCBpcyBub3QgYW4gb2JqZWN0IGF0IGluZGV4ICIrbCk7ZWxzZXtpZighKHQgaW5zdGFuY2VvZiBPYmplY3QpKXRocm93IG5ldyBFcnJvcigiVW5rbm93biBkYXRhVHlwZSIpO2QodCl9aWYoaS5sZW5ndGgmJnRoaXMuX3RyaWdnZXIoImFkZCIse2l0ZW1zOml9LGUpLG8ubGVuZ3RoKXt2YXIgYz17aXRlbXM6byxvbGREYXRhOnMsZGF0YTpyfTt0aGlzLl90cmlnZ2VyKCJ1cGRhdGUiLGMsZSl9cmV0dXJuIGkuY29uY2F0KG8pfSxvLnByb3RvdHlwZS5nZXQ9ZnVuY3Rpb24odCl7dmFyIGUsaSxvLHM9dGhpcyxyPW4uZ2V0VHlwZShhcmd1bWVudHNbMF0pOyJTdHJpbmciPT1yfHwiTnVtYmVyIj09cj8oZT1hcmd1bWVudHNbMF0sbz1hcmd1bWVudHNbMV0pOiJBcnJheSI9PXI/KGk9YXJndW1lbnRzWzBdLG89YXJndW1lbnRzWzFdKTpvPWFyZ3VtZW50c1swXTt2YXIgYTtpZihvJiZvLnJldHVyblR5cGUpe3ZhciBoPVsiQXJyYXkiLCJPYmplY3QiXTthPS0xPT1oLmluZGV4T2Yoby5yZXR1cm5UeXBlKT8iQXJyYXkiOm8ucmV0dXJuVHlwZX1lbHNlIGE9IkFycmF5Ijt2YXIgZCxsLHUsYyxwLGY9byYmby50eXBlfHx0aGlzLl9vcHRpb25zLnR5cGUsbT1vJiZvLmZpbHRlcix2PVtdO2lmKHZvaWQgMCE9ZSlkPXMuX2dldEl0ZW0oZSxmKSxkJiZtJiYhbShkKSYmKGQ9bnVsbCk7ZWxzZSBpZih2b2lkIDAhPWkpZm9yKGM9MCxwPWkubGVuZ3RoO3A+YztjKyspZD1zLl9nZXRJdGVtKGlbY10sZiksKCFtfHxtKGQpKSYmdi5wdXNoKGQpO2Vsc2UgZm9yKGw9T2JqZWN0LmtleXModGhpcy5fZGF0YSksYz0wLHA9bC5sZW5ndGg7cD5jO2MrKyl1PWxbY10sZD1zLl9nZXRJdGVtKHUsZiksKCFtfHxtKGQpKSYmdi5wdXNoKGQpO2lmKG8mJm8ub3JkZXImJnZvaWQgMD09ZSYmdGhpcy5fc29ydCh2LG8ub3JkZXIpLG8mJm8uZmllbGRzKXt2YXIgZz1vLmZpZWxkcztpZih2b2lkIDAhPWUpZD10aGlzLl9maWx0ZXJGaWVsZHMoZCxnKTtlbHNlIGZvcihjPTAscD12Lmxlbmd0aDtwPmM7YysrKXZbY109dGhpcy5fZmlsdGVyRmllbGRzKHZbY10sZyl9aWYoIk9iamVjdCI9PWEpe3ZhciB5LGI9e307Zm9yKGM9MCxwPXYubGVuZ3RoO3A+YztjKyspeT12W2NdLGJbeS5pZF09eTtyZXR1cm4gYn1yZXR1cm4gdm9pZCAwIT1lP2Q6dn0sby5wcm90b3R5cGUuZ2V0SWRzPWZ1bmN0aW9uKHQpe3ZhciBlLGksbyxuLHMscj10aGlzLl9kYXRhLGE9dCYmdC5maWx0ZXIsaD10JiZ0Lm9yZGVyLGQ9dCYmdC50eXBlfHx0aGlzLl9vcHRpb25zLnR5cGUsbD1PYmplY3Qua2V5cyhyKSx1PVtdO2lmKGEpaWYoaCl7Zm9yKHM9W10sZT0wLGk9bC5sZW5ndGg7aT5lO2UrKylvPWxbZV0sbj10aGlzLl9nZXRJdGVtKG8sZCksYShuKSYmcy5wdXNoKG4pO2Zvcih0aGlzLl9zb3J0KHMsaCksZT0wLGk9cy5sZW5ndGg7aT5lO2UrKyl1LnB1c2goc1tlXVt0aGlzLl9maWVsZElkXSl9ZWxzZSBmb3IoZT0wLGk9bC5sZW5ndGg7aT5lO2UrKylvPWxbZV0sbj10aGlzLl9nZXRJdGVtKG8sZCksYShuKSYmdS5wdXNoKG5bdGhpcy5fZmllbGRJZF0pO2Vsc2UgaWYoaCl7Zm9yKHM9W10sZT0wLGk9bC5sZW5ndGg7aT5lO2UrKylvPWxbZV0scy5wdXNoKHJbb10pO2Zvcih0aGlzLl9zb3J0KHMsaCksZT0wLGk9cy5sZW5ndGg7aT5lO2UrKyl1LnB1c2goc1tlXVt0aGlzLl9maWVsZElkXSl9ZWxzZSBmb3IoZT0wLGk9bC5sZW5ndGg7aT5lO2UrKylvPWxbZV0sbj1yW29dLHUucHVzaChuW3RoaXMuX2ZpZWxkSWRdKTtyZXR1cm4gdX0sby5wcm90b3R5cGUuZ2V0RGF0YVNldD1mdW5jdGlvbigpe3JldHVybiB0aGlzfSxvLnByb3RvdHlwZS5mb3JFYWNoPWZ1bmN0aW9uKHQsZSl7dmFyIGksbyxuLHMscj1lJiZlLmZpbHRlcixhPWUmJmUudHlwZXx8dGhpcy5fb3B0aW9ucy50eXBlLGg9dGhpcy5fZGF0YSxkPU9iamVjdC5rZXlzKGgpO2lmKGUmJmUub3JkZXIpe3ZhciBsPXRoaXMuZ2V0KGUpO2ZvcihpPTAsbz1sLmxlbmd0aDtvPmk7aSsrKW49bFtpXSxzPW5bdGhpcy5fZmllbGRJZF0sdChuLHMpfWVsc2UgZm9yKGk9MCxvPWQubGVuZ3RoO28+aTtpKyspcz1kW2ldLG49dGhpcy5fZ2V0SXRlbShzLGEpLCghcnx8cihuKSkmJnQobixzKX0sby5wcm90b3R5cGUubWFwPWZ1bmN0aW9uKHQsZSl7dmFyIGksbyxuLHMscj1lJiZlLmZpbHRlcixhPWUmJmUudHlwZXx8dGhpcy5fb3B0aW9ucy50eXBlLGg9W10sZD10aGlzLl9kYXRhLGw9T2JqZWN0LmtleXMoZCk7Zm9yKGk9MCxvPWwubGVuZ3RoO28+aTtpKyspbj1sW2ldLHM9dGhpcy5fZ2V0SXRlbShuLGEpLCghcnx8cihzKSkmJmgucHVzaCh0KHMsbikpO3JldHVybiBlJiZlLm9yZGVyJiZ0aGlzLl9zb3J0KGgsZS5vcmRlciksaH0sby5wcm90b3R5cGUuX2ZpbHRlckZpZWxkcz1mdW5jdGlvbih0LGUpe2lmKCF0KXJldHVybiB0O3ZhciBpLG8sbj17fSxzPU9iamVjdC5rZXlzKHQpLHI9cy5sZW5ndGg7aWYoQXJyYXkuaXNBcnJheShlKSlmb3IoaT0wO3I+aTtpKyspbz1zW2ldLC0xIT1lLmluZGV4T2YobykmJihuW29dPXRbb10pO2Vsc2UgZm9yKGk9MDtyPmk7aSsrKW89c1tpXSxlLmhhc093blByb3BlcnR5KG8pJiYobltlW29dXT10W29dKTtyZXR1cm4gbn0sby5wcm90b3R5cGUuX3NvcnQ9ZnVuY3Rpb24odCxlKXtpZihuLmlzU3RyaW5nKGUpKXt2YXIgaT1lO3Quc29ydChmdW5jdGlvbih0LGUpe3ZhciBvPXRbaV0sbj1lW2ldO3JldHVybiBvPm4/MTpuPm8/LTE6MH0pfWVsc2V7aWYoImZ1bmN0aW9uIiE9dHlwZW9mIGUpdGhyb3cgbmV3IFR5cGVFcnJvcigiT3JkZXIgbXVzdCBiZSBhIGZ1bmN0aW9uIG9yIGEgc3RyaW5nIik7dC5zb3J0KGUpfX0sby5wcm90b3R5cGUucmVtb3ZlPWZ1bmN0aW9uKHQsZSl7dmFyIGksbyxuLHM9W107aWYoQXJyYXkuaXNBcnJheSh0KSlmb3IoaT0wLG89dC5sZW5ndGg7bz5pO2krKyluPXRoaXMuX3JlbW92ZSh0W2ldKSxudWxsIT1uJiZzLnB1c2gobik7ZWxzZSBuPXRoaXMuX3JlbW92ZSh0KSxudWxsIT1uJiZzLnB1c2gobik7cmV0dXJuIHMubGVuZ3RoJiZ0aGlzLl90cmlnZ2VyKCJyZW1vdmUiLHtpdGVtczpzfSxlKSxzfSxvLnByb3RvdHlwZS5fcmVtb3ZlPWZ1bmN0aW9uKHQpe2lmKG4uaXNOdW1iZXIodCl8fG4uaXNTdHJpbmcodCkpe2lmKHRoaXMuX2RhdGFbdF0pcmV0dXJuIGRlbGV0ZSB0aGlzLl9kYXRhW3RdLHRoaXMubGVuZ3RoLS0sdH1lbHNlIGlmKHQgaW5zdGFuY2VvZiBPYmplY3Qpe3ZhciBlPXRbdGhpcy5fZmllbGRJZF07aWYodm9pZCAwIT09ZSYmdGhpcy5fZGF0YVtlXSlyZXR1cm4gZGVsZXRlIHRoaXMuX2RhdGFbZV0sdGhpcy5sZW5ndGgtLSxlfXJldHVybiBudWxsfSxvLnByb3RvdHlwZS5jbGVhcj1mdW5jdGlvbih0KXt2YXIgZT1PYmplY3Qua2V5cyh0aGlzLl9kYXRhKTtyZXR1cm4gdGhpcy5fZGF0YT17fSx0aGlzLmxlbmd0aD0wLHRoaXMuX3RyaWdnZXIoInJlbW92ZSIse2l0ZW1zOmV9LHQpLGV9LG8ucHJvdG90eXBlLm1heD1mdW5jdGlvbih0KXt2YXIgZSxpLG89dGhpcy5fZGF0YSxuPU9iamVjdC5rZXlzKG8pLHM9bnVsbCxyPW51bGw7Zm9yKGU9MCxpPW4ubGVuZ3RoO2k+ZTtlKyspe3ZhciBhPW5bZV0saD1vW2FdLGQ9aFt0XTtudWxsIT1kJiYoIXN8fGQ+cikmJihzPWgscj1kKX1yZXR1cm4gc30sby5wcm90b3R5cGUubWluPWZ1bmN0aW9uKHQpe3ZhciBlLGksbz10aGlzLl9kYXRhLG49T2JqZWN0LmtleXMobykscz1udWxsLHI9bnVsbDtmb3IoZT0wLGk9bi5sZW5ndGg7aT5lO2UrKyl7dmFyIGE9bltlXSxoPW9bYV0sZD1oW3RdO251bGwhPWQmJighc3x8cj5kKSYmKHM9aCxyPWQpfXJldHVybiBzfSxvLnByb3RvdHlwZS5kaXN0aW5jdD1mdW5jdGlvbih0KXt2YXIgZSxpLG8scz10aGlzLl9kYXRhLHI9T2JqZWN0LmtleXMocyksYT1bXSxoPXRoaXMuX29wdGlvbnMudHlwZSYmdGhpcy5fb3B0aW9ucy50eXBlW3RdfHxudWxsLGQ9MDsKZm9yKGU9MCxvPXIubGVuZ3RoO28+ZTtlKyspe3ZhciBsPXJbZV0sdT1zW2xdLGM9dVt0XSxwPSExO2ZvcihpPTA7ZD5pO2krKylpZihhW2ldPT1jKXtwPSEwO2JyZWFrfXB8fHZvaWQgMD09PWN8fChhW2RdPWMsZCsrKX1pZihoKWZvcihlPTAsbz1hLmxlbmd0aDtvPmU7ZSsrKWFbZV09bi5jb252ZXJ0KGFbZV0saCk7cmV0dXJuIGF9LG8ucHJvdG90eXBlLl9hZGRJdGVtPWZ1bmN0aW9uKHQpe3ZhciBlPXRbdGhpcy5fZmllbGRJZF07aWYodm9pZCAwIT1lKXtpZih0aGlzLl9kYXRhW2VdKXRocm93IG5ldyBFcnJvcigiQ2Fubm90IGFkZCBpdGVtOiBpdGVtIHdpdGggaWQgIitlKyIgYWxyZWFkeSBleGlzdHMiKX1lbHNlIGU9bi5yYW5kb21VVUlEKCksdFt0aGlzLl9maWVsZElkXT1lO3ZhciBpLG8scz17fSxyPU9iamVjdC5rZXlzKHQpO2ZvcihpPTAsbz1yLmxlbmd0aDtvPmk7aSsrKXt2YXIgYT1yW2ldLGg9dGhpcy5fdHlwZVthXTtzW2FdPW4uY29udmVydCh0W2FdLGgpfXJldHVybiB0aGlzLl9kYXRhW2VdPXMsdGhpcy5sZW5ndGgrKyxlfSxvLnByb3RvdHlwZS5fZ2V0SXRlbT1mdW5jdGlvbih0LGUpe3ZhciBpLG8scyxyLGE9dGhpcy5fZGF0YVt0XTtpZighYSlyZXR1cm4gbnVsbDt2YXIgaD17fSxkPU9iamVjdC5rZXlzKGEpO2lmKGUpZm9yKHM9MCxyPWQubGVuZ3RoO3I+cztzKyspaT1kW3NdLG89YVtpXSxoW2ldPW4uY29udmVydChvLGVbaV0pO2Vsc2UgZm9yKHM9MCxyPWQubGVuZ3RoO3I+cztzKyspaT1kW3NdLG89YVtpXSxoW2ldPW87cmV0dXJuIGh9LG8ucHJvdG90eXBlLl91cGRhdGVJdGVtPWZ1bmN0aW9uKHQpe3ZhciBlPXRbdGhpcy5fZmllbGRJZF07aWYodm9pZCAwPT1lKXRocm93IG5ldyBFcnJvcigiQ2Fubm90IHVwZGF0ZSBpdGVtOiBpdGVtIGhhcyBubyBpZCAoaXRlbTogIitKU09OLnN0cmluZ2lmeSh0KSsiKSIpO3ZhciBpPXRoaXMuX2RhdGFbZV07aWYoIWkpdGhyb3cgbmV3IEVycm9yKCJDYW5ub3QgdXBkYXRlIGl0ZW06IG5vIGl0ZW0gd2l0aCBpZCAiK2UrIiBmb3VuZCIpO2Zvcih2YXIgbz1PYmplY3Qua2V5cyh0KSxzPTAscj1vLmxlbmd0aDtyPnM7cysrKXt2YXIgYT1vW3NdLGg9dGhpcy5fdHlwZVthXTtpW2FdPW4uY29udmVydCh0W2FdLGgpfXJldHVybiBlfSx0LmV4cG9ydHM9b30sZnVuY3Rpb24odCxlKXtmdW5jdGlvbiBpKHQpe3RoaXMuZGVsYXk9bnVsbCx0aGlzLm1heD0xLzAsdGhpcy5fcXVldWU9W10sdGhpcy5fdGltZW91dD1udWxsLHRoaXMuX2V4dGVuZGVkPW51bGwsdGhpcy5zZXRPcHRpb25zKHQpfWkucHJvdG90eXBlLnNldE9wdGlvbnM9ZnVuY3Rpb24odCl7dCYmInVuZGVmaW5lZCIhPXR5cGVvZiB0LmRlbGF5JiYodGhpcy5kZWxheT10LmRlbGF5KSx0JiYidW5kZWZpbmVkIiE9dHlwZW9mIHQubWF4JiYodGhpcy5tYXg9dC5tYXgpLHRoaXMuX2ZsdXNoSWZOZWVkZWQoKX0saS5leHRlbmQ9ZnVuY3Rpb24odCxlKXt2YXIgbz1uZXcgaShlKTtpZih2b2lkIDAhPT10LmZsdXNoKXRocm93IG5ldyBFcnJvcigiVGFyZ2V0IG9iamVjdCBhbHJlYWR5IGhhcyBhIHByb3BlcnR5IGZsdXNoIik7dC5mbHVzaD1mdW5jdGlvbigpe28uZmx1c2goKX07dmFyIG49W3tuYW1lOiJmbHVzaCIsb3JpZ2luYWw6dm9pZCAwfV07aWYoZSYmZS5yZXBsYWNlKWZvcih2YXIgcz0wO3M8ZS5yZXBsYWNlLmxlbmd0aDtzKyspe3ZhciByPWUucmVwbGFjZVtzXTtuLnB1c2goe25hbWU6cixvcmlnaW5hbDp0W3JdfSksby5yZXBsYWNlKHQscil9cmV0dXJuIG8uX2V4dGVuZGVkPXtvYmplY3Q6dCxtZXRob2RzOm59LG99LGkucHJvdG90eXBlLmRlc3Ryb3k9ZnVuY3Rpb24oKXtpZih0aGlzLmZsdXNoKCksdGhpcy5fZXh0ZW5kZWQpe2Zvcih2YXIgdD10aGlzLl9leHRlbmRlZC5vYmplY3QsZT10aGlzLl9leHRlbmRlZC5tZXRob2RzLGk9MDtpPGUubGVuZ3RoO2krKyl7dmFyIG89ZVtpXTtvLm9yaWdpbmFsP3Rbby5uYW1lXT1vLm9yaWdpbmFsOmRlbGV0ZSB0W28ubmFtZV19dGhpcy5fZXh0ZW5kZWQ9bnVsbH19LGkucHJvdG90eXBlLnJlcGxhY2U9ZnVuY3Rpb24odCxlKXt2YXIgaT10aGlzLG89dFtlXTtpZighbyl0aHJvdyBuZXcgRXJyb3IoIk1ldGhvZCAiK2UrIiB1bmRlZmluZWQiKTt0W2VdPWZ1bmN0aW9uKCl7Zm9yKHZhciB0PVtdLGU9MDtlPGFyZ3VtZW50cy5sZW5ndGg7ZSsrKXRbZV09YXJndW1lbnRzW2VdO2kucXVldWUoe2FyZ3M6dCxmbjpvLGNvbnRleHQ6dGhpc30pfX0saS5wcm90b3R5cGUucXVldWU9ZnVuY3Rpb24odCl7ImZ1bmN0aW9uIj09dHlwZW9mIHQ/dGhpcy5fcXVldWUucHVzaCh7Zm46dH0pOnRoaXMuX3F1ZXVlLnB1c2godCksdGhpcy5fZmx1c2hJZk5lZWRlZCgpfSxpLnByb3RvdHlwZS5fZmx1c2hJZk5lZWRlZD1mdW5jdGlvbigpe2lmKHRoaXMuX3F1ZXVlLmxlbmd0aD50aGlzLm1heCYmdGhpcy5mbHVzaCgpLGNsZWFyVGltZW91dCh0aGlzLl90aW1lb3V0KSx0aGlzLnF1ZXVlLmxlbmd0aD4wJiYibnVtYmVyIj09dHlwZW9mIHRoaXMuZGVsYXkpe3ZhciB0PXRoaXM7dGhpcy5fdGltZW91dD1zZXRUaW1lb3V0KGZ1bmN0aW9uKCl7dC5mbHVzaCgpfSx0aGlzLmRlbGF5KX19LGkucHJvdG90eXBlLmZsdXNoPWZ1bmN0aW9uKCl7Zm9yKDt0aGlzLl9xdWV1ZS5sZW5ndGg+MDspe3ZhciB0PXRoaXMuX3F1ZXVlLnNoaWZ0KCk7dC5mbi5hcHBseSh0LmNvbnRleHR8fHQuZm4sdC5hcmdzfHxbXSl9fSx0LmV4cG9ydHM9aX0sZnVuY3Rpb24odCxlLGkpe2Z1bmN0aW9uIG8odCxlKXt0aGlzLl9kYXRhPW51bGwsdGhpcy5faWRzPXt9LHRoaXMubGVuZ3RoPTAsdGhpcy5fb3B0aW9ucz1lfHx7fSx0aGlzLl9maWVsZElkPSJpZCIsdGhpcy5fc3Vic2NyaWJlcnM9e307dmFyIGk9dGhpczt0aGlzLmxpc3RlbmVyPWZ1bmN0aW9uKCl7aS5fb25FdmVudC5hcHBseShpLGFyZ3VtZW50cyl9LHRoaXMuc2V0RGF0YSh0KX12YXIgbj1pKDEpLHM9aSg4KTtvLnByb3RvdHlwZS5zZXREYXRhPWZ1bmN0aW9uKHQpe3ZhciBlLGksbyxuO2lmKHRoaXMuX2RhdGEmJih0aGlzLl9kYXRhLm9mZiYmdGhpcy5fZGF0YS5vZmYoIioiLHRoaXMubGlzdGVuZXIpLGU9T2JqZWN0LmtleXModGhpcy5faWRzKSx0aGlzLl9pZHM9e30sdGhpcy5sZW5ndGg9MCx0aGlzLl90cmlnZ2VyKCJyZW1vdmUiLHtpdGVtczplfSkpLHRoaXMuX2RhdGE9dCx0aGlzLl9kYXRhKXtmb3IodGhpcy5fZmllbGRJZD10aGlzLl9vcHRpb25zLmZpZWxkSWR8fHRoaXMuX2RhdGEmJnRoaXMuX2RhdGEub3B0aW9ucyYmdGhpcy5fZGF0YS5vcHRpb25zLmZpZWxkSWR8fCJpZCIsZT10aGlzLl9kYXRhLmdldElkcyh7ZmlsdGVyOnRoaXMuX29wdGlvbnMmJnRoaXMuX29wdGlvbnMuZmlsdGVyfSksbz0wLG49ZS5sZW5ndGg7bj5vO28rKylpPWVbb10sdGhpcy5faWRzW2ldPSEwO3RoaXMubGVuZ3RoPWUubGVuZ3RoLHRoaXMuX3RyaWdnZXIoImFkZCIse2l0ZW1zOmV9KSx0aGlzLl9kYXRhLm9uJiZ0aGlzLl9kYXRhLm9uKCIqIix0aGlzLmxpc3RlbmVyKX19LG8ucHJvdG90eXBlLnJlZnJlc2g9ZnVuY3Rpb24oKXt2YXIgdCxlLGksbz10aGlzLl9kYXRhLmdldElkcyh7ZmlsdGVyOnRoaXMuX29wdGlvbnMmJnRoaXMuX29wdGlvbnMuZmlsdGVyfSksbj1PYmplY3Qua2V5cyh0aGlzLl9pZHMpLHM9e30scj1bXSxhPVtdO2ZvcihlPTAsaT1vLmxlbmd0aDtpPmU7ZSsrKXQ9b1tlXSxzW3RdPSEwLHRoaXMuX2lkc1t0XXx8KHIucHVzaCh0KSx0aGlzLl9pZHNbdF09ITApO2ZvcihlPTAsaT1uLmxlbmd0aDtpPmU7ZSsrKXQ9bltlXSxzW3RdfHwoYS5wdXNoKHQpLGRlbGV0ZSB0aGlzLl9pZHNbdF0pO3RoaXMubGVuZ3RoKz1yLmxlbmd0aC1hLmxlbmd0aCxyLmxlbmd0aCYmdGhpcy5fdHJpZ2dlcigiYWRkIix7aXRlbXM6cn0pLGEubGVuZ3RoJiZ0aGlzLl90cmlnZ2VyKCJyZW1vdmUiLHtpdGVtczphfSl9LG8ucHJvdG90eXBlLmdldD1mdW5jdGlvbih0KXt2YXIgZSxpLG8scz10aGlzLHI9bi5nZXRUeXBlKGFyZ3VtZW50c1swXSk7IlN0cmluZyI9PXJ8fCJOdW1iZXIiPT1yfHwiQXJyYXkiPT1yPyhlPWFyZ3VtZW50c1swXSxpPWFyZ3VtZW50c1sxXSxvPWFyZ3VtZW50c1syXSk6KGk9YXJndW1lbnRzWzBdLG89YXJndW1lbnRzWzFdKTt2YXIgYT1uLmV4dGVuZCh7fSx0aGlzLl9vcHRpb25zLGkpO3RoaXMuX29wdGlvbnMuZmlsdGVyJiZpJiZpLmZpbHRlciYmKGEuZmlsdGVyPWZ1bmN0aW9uKHQpe3JldHVybiBzLl9vcHRpb25zLmZpbHRlcih0KSYmaS5maWx0ZXIodCl9KTt2YXIgaD1bXTtyZXR1cm4gdm9pZCAwIT1lJiZoLnB1c2goZSksaC5wdXNoKGEpLGgucHVzaChvKSx0aGlzLl9kYXRhJiZ0aGlzLl9kYXRhLmdldC5hcHBseSh0aGlzLl9kYXRhLGgpfSxvLnByb3RvdHlwZS5nZXRJZHM9ZnVuY3Rpb24odCl7dmFyIGU7aWYodGhpcy5fZGF0YSl7dmFyIGksbz10aGlzLl9vcHRpb25zLmZpbHRlcjtpPXQmJnQuZmlsdGVyP28/ZnVuY3Rpb24oZSl7cmV0dXJuIG8oZSkmJnQuZmlsdGVyKGUpfTp0LmZpbHRlcjpvLGU9dGhpcy5fZGF0YS5nZXRJZHMoe2ZpbHRlcjppLG9yZGVyOnQmJnQub3JkZXJ9KX1lbHNlIGU9W107cmV0dXJuIGV9LG8ucHJvdG90eXBlLm1hcD1mdW5jdGlvbih0LGUpe3ZhciBpPVtdO2lmKHRoaXMuX2RhdGEpe3ZhciBvLG49dGhpcy5fb3B0aW9ucy5maWx0ZXI7bz1lJiZlLmZpbHRlcj9uP2Z1bmN0aW9uKHQpe3JldHVybiBuKHQpJiZlLmZpbHRlcih0KX06ZS5maWx0ZXI6bixpPXRoaXMuX2RhdGEubWFwKHQse2ZpbHRlcjpvLG9yZGVyOmUmJmUub3JkZXJ9KX1lbHNlIGk9W107cmV0dXJuIGl9LG8ucHJvdG90eXBlLmdldERhdGFTZXQ9ZnVuY3Rpb24oKXtmb3IodmFyIHQ9dGhpczt0IGluc3RhbmNlb2YgbzspdD10Ll9kYXRhO3JldHVybiB0fHxudWxsfSxvLnByb3RvdHlwZS5fb25FdmVudD1mdW5jdGlvbih0LGUsaSl7dmFyIG8sbixzLHIsYT1lJiZlLml0ZW1zLGg9dGhpcy5fZGF0YSxkPVtdLGw9W10sdT1bXSxjPVtdO2lmKGEmJmgpe3N3aXRjaCh0KXtjYXNlImFkZCI6Zm9yKG89MCxuPWEubGVuZ3RoO24+bztvKyspcz1hW29dLHI9dGhpcy5nZXQocyksciYmKHRoaXMuX2lkc1tzXT0hMCxsLnB1c2gocykpO2JyZWFrO2Nhc2UidXBkYXRlIjpmb3Iobz0wLG49YS5sZW5ndGg7bj5vO28rKylzPWFbb10scj10aGlzLmdldChzKSxyP3RoaXMuX2lkc1tzXT8odS5wdXNoKHMpLGQucHVzaChlLmRhdGFbb10pKToodGhpcy5faWRzW3NdPSEwLGwucHVzaChzKSk6dGhpcy5faWRzW3NdJiYoZGVsZXRlIHRoaXMuX2lkc1tzXSxjLnB1c2gocykpO2JyZWFrO2Nhc2UicmVtb3ZlIjpmb3Iobz0wLG49YS5sZW5ndGg7bj5vO28rKylzPWFbb10sdGhpcy5faWRzW3NdJiYoZGVsZXRlIHRoaXMuX2lkc1tzXSxjLnB1c2gocykpfXRoaXMubGVuZ3RoKz1sLmxlbmd0aC1jLmxlbmd0aCxsLmxlbmd0aCYmdGhpcy5fdHJpZ2dlcigiYWRkIix7aXRlbXM6bH0saSksdS5sZW5ndGgmJnRoaXMuX3RyaWdnZXIoInVwZGF0ZSIse2l0ZW1zOnUsZGF0YTpkfSxpKSxjLmxlbmd0aCYmdGhpcy5fdHJpZ2dlcigicmVtb3ZlIix7aXRlbXM6Y30saSl9fSxvLnByb3RvdHlwZS5vbj1zLnByb3RvdHlwZS5vbixvLnByb3RvdHlwZS5vZmY9cy5wcm90b3R5cGUub2ZmLG8ucHJvdG90eXBlLl90cmlnZ2VyPXMucHJvdG90eXBlLl90cmlnZ2VyLG8ucHJvdG90eXBlLnN1YnNjcmliZT1vLnByb3RvdHlwZS5vbixvLnByb3RvdHlwZS51bnN1YnNjcmliZT1vLnByb3RvdHlwZS5vZmYsdC5leHBvcnRzPW99LGZ1bmN0aW9uKHQsZSxpKXtmdW5jdGlvbiBvKHQsZSxpKXtpZighKHRoaXMgaW5zdGFuY2VvZiBvKSl0aHJvdyBuZXcgU3ludGF4RXJyb3IoIkNvbnN0cnVjdG9yIG11c3QgYmUgY2FsbGVkIHdpdGggdGhlIG5ldyBvcGVyYXRvciIpO3RoaXMuY29udGFpbmVyRWxlbWVudD10LHRoaXMud2lkdGg9IjQwMHB4Iix0aGlzLmhlaWdodD0iNDAwcHgiLHRoaXMubWFyZ2luPTEwLHRoaXMuZGVmYXVsdFhDZW50ZXI9IjU1JSIsdGhpcy5kZWZhdWx0WUNlbnRlcj0iNTAlIix0aGlzLnhMYWJlbD0ieCIsdGhpcy55TGFiZWw9InkiLHRoaXMuekxhYmVsPSJ6Ijt2YXIgbj1mdW5jdGlvbih0KXtyZXR1cm4gdH07dGhpcy54VmFsdWVMYWJlbD1uLHRoaXMueVZhbHVlTGFiZWw9bix0aGlzLnpWYWx1ZUxhYmVsPW4sdGhpcy5maWx0ZXJMYWJlbD0idGltZSIsdGhpcy5sZWdlbmRMYWJlbD0idmFsdWUiLHRoaXMuc3R5bGU9by5TVFlMRS5ET1QsdGhpcy5zaG93UGVyc3BlY3RpdmU9ITAsdGhpcy5zaG93R3JpZD0hMCx0aGlzLmtlZXBBc3BlY3RSYXRpbz0hMCx0aGlzLnNob3dTaGFkb3c9ITEsdGhpcy5zaG93R3JheUJvdHRvbT0hMSx0aGlzLnNob3dUb29sdGlwPSExLHRoaXMudmVydGljYWxSYXRpbz0uNSx0aGlzLmFuaW1hdGlvbkludGVydmFsPTFlMyx0aGlzLmFuaW1hdGlvblByZWxvYWQ9ITEsdGhpcy5jYW1lcmE9bmV3IGMsdGhpcy5jYW1lcmEuc2V0QXJtUm90YXRpb24oMSwuNSksdGhpcy5jYW1lcmEuc2V0QXJtTGVuZ3RoKDEuNyksdGhpcy5leWU9bmV3IGwoMCwwLC0xKSx0aGlzLmRhdGFUYWJsZT1udWxsLHRoaXMuZGF0YVBvaW50cz1udWxsLHRoaXMuY29sWD12b2lkIDAsdGhpcy5jb2xZPXZvaWQgMCx0aGlzLmNvbFo9dm9pZCAwLHRoaXMuY29sVmFsdWU9dm9pZCAwLHRoaXMuY29sRmlsdGVyPXZvaWQgMCx0aGlzLnhNaW49MCx0aGlzLnhTdGVwPXZvaWQgMCx0aGlzLnhNYXg9MSx0aGlzLnlNaW49MCx0aGlzLnlTdGVwPXZvaWQgMCx0aGlzLnlNYXg9MSx0aGlzLnpNaW49MCx0aGlzLnpTdGVwPXZvaWQgMCx0aGlzLnpNYXg9MSx0aGlzLnZhbHVlTWluPTAsdGhpcy52YWx1ZU1heD0xLHRoaXMueEJhcldpZHRoPTEsdGhpcy55QmFyV2lkdGg9MSx0aGlzLmF4aXNDb2xvcj0iIzRENEQ0RCIsdGhpcy5ncmlkQ29sb3I9IiNEM0QzRDMiLHRoaXMuZGF0YUNvbG9yPXtmaWxsOiIjN0RDMUZGIixzdHJva2U6IiMzMjY3RDIiLHN0cm9rZVdpZHRoOjF9LHRoaXMuY3JlYXRlKCksdGhpcy5zZXRPcHRpb25zKGkpLGUmJnRoaXMuc2V0RGF0YShlKX1mdW5jdGlvbiBuKHQpe3JldHVybiJjbGllbnRYImluIHQ/dC5jbGllbnRYOnQudGFyZ2V0VG91Y2hlc1swXSYmdC50YXJnZXRUb3VjaGVzWzBdLmNsaWVudFh8fDB9ZnVuY3Rpb24gcyh0KXtyZXR1cm4iY2xpZW50WSJpbiB0P3QuY2xpZW50WTp0LnRhcmdldFRvdWNoZXNbMF0mJnQudGFyZ2V0VG91Y2hlc1swXS5jbGllbnRZfHwwfXZhciByPWkoMTIpLGE9aSg4KSxoPWkoMTApLGQ9aSgxKSxsPWkoMTMpLHU9aSgxNCksYz1pKDE1KSxwPWkoMTYpLGY9aSgxNyksbT1pKDE4KTtyKG8ucHJvdG90eXBlKSxvLnByb3RvdHlwZS5fc2V0U2NhbGU9ZnVuY3Rpb24oKXt0aGlzLnNjYWxlPW5ldyBsKDEvKHRoaXMueE1heC10aGlzLnhNaW4pLDEvKHRoaXMueU1heC10aGlzLnlNaW4pLDEvKHRoaXMuek1heC10aGlzLnpNaW4pKSx0aGlzLmtlZXBBc3BlY3RSYXRpbyYmKHRoaXMuc2NhbGUueDx0aGlzLnNjYWxlLnk/dGhpcy5zY2FsZS55PXRoaXMuc2NhbGUueDp0aGlzLnNjYWxlLng9dGhpcy5zY2FsZS55KSx0aGlzLnNjYWxlLnoqPXRoaXMudmVydGljYWxSYXRpbyx0aGlzLnNjYWxlLnZhbHVlPTEvKHRoaXMudmFsdWVNYXgtdGhpcy52YWx1ZU1pbik7dmFyIHQ9KHRoaXMueE1heCt0aGlzLnhNaW4pLzIqdGhpcy5zY2FsZS54LGU9KHRoaXMueU1heCt0aGlzLnlNaW4pLzIqdGhpcy5zY2FsZS55LGk9KHRoaXMuek1heCt0aGlzLnpNaW4pLzIqdGhpcy5zY2FsZS56O3RoaXMuY2FtZXJhLnNldEFybUxvY2F0aW9uKHQsZSxpKX0sby5wcm90b3R5cGUuX2NvbnZlcnQzRHRvMkQ9ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5fY29udmVydFBvaW50VG9UcmFuc2xhdGlvbih0KTtyZXR1cm4gdGhpcy5fY29udmVydFRyYW5zbGF0aW9uVG9TY3JlZW4oZSl9LG8ucHJvdG90eXBlLl9jb252ZXJ0UG9pbnRUb1RyYW5zbGF0aW9uPWZ1bmN0aW9uKHQpe3ZhciBlPXQueCp0aGlzLnNjYWxlLngsaT10LnkqdGhpcy5zY2FsZS55LG89dC56KnRoaXMuc2NhbGUueixuPXRoaXMuY2FtZXJhLmdldENhbWVyYUxvY2F0aW9uKCkueCxzPXRoaXMuY2FtZXJhLmdldENhbWVyYUxvY2F0aW9uKCkueSxyPXRoaXMuY2FtZXJhLmdldENhbWVyYUxvY2F0aW9uKCkueixhPU1hdGguc2luKHRoaXMuY2FtZXJhLmdldENhbWVyYVJvdGF0aW9uKCkueCksaD1NYXRoLmNvcyh0aGlzLmNhbWVyYS5nZXRDYW1lcmFSb3RhdGlvbigpLngpLGQ9TWF0aC5zaW4odGhpcy5jYW1lcmEuZ2V0Q2FtZXJhUm90YXRpb24oKS55KSx1PU1hdGguY29zKHRoaXMuY2FtZXJhLmdldENhbWVyYVJvdGF0aW9uKCkueSksYz1NYXRoLnNpbih0aGlzLmNhbWVyYS5nZXRDYW1lcmFSb3RhdGlvbigpLnopLHA9TWF0aC5jb3ModGhpcy5jYW1lcmEuZ2V0Q2FtZXJhUm90YXRpb24oKS56KSxmPXUqKGMqKGktcykrcCooZS1uKSktZCooby1yKSxtPWEqKHUqKG8tcikrZCooYyooaS1zKStwKihlLW4pKSkraCoocCooaS1zKS1jKihlLW4pKSx2PWgqKHUqKG8tcikrZCooYyooaS1zKStwKihlLW4pKSktYSoocCooaS1zKS1jKihlLW4pKTtyZXR1cm4gbmV3IGwoZixtLHYpfSxvLnByb3RvdHlwZS5fY29udmVydFRyYW5zbGF0aW9uVG9TY3JlZW49ZnVuY3Rpb24odCl7dmFyIGUsaSxvPXRoaXMuZXllLngsbj10aGlzLmV5ZS55LHM9dGhpcy5leWUueixyPXQueCxhPXQueSxoPXQuejtyZXR1cm4gdGhpcy5zaG93UGVyc3BlY3RpdmU/KGU9KHItbykqKHMvaCksaT0oYS1uKSoocy9oKSk6KGU9ciotKHMvdGhpcy5jYW1lcmEuZ2V0QXJtTGVuZ3RoKCkpLGk9YSotKHMvdGhpcy5jYW1lcmEuZ2V0QXJtTGVuZ3RoKCkpKSxuZXcgdSh0aGlzLnhjZW50ZXIrZSp0aGlzLmZyYW1lLmNhbnZhcy5jbGllbnRXaWR0aCx0aGlzLnljZW50ZXItaSp0aGlzLmZyYW1lLmNhbnZhcy5jbGllbnRXaWR0aCl9LG8ucHJvdG90eXBlLl9zZXRCYWNrZ3JvdW5kQ29sb3I9ZnVuY3Rpb24odCl7dmFyIGU9IndoaXRlIixpPSJncmF5IixvPTE7aWYoInN0cmluZyI9PXR5cGVvZiB0KWU9dCxpPSJub25lIixvPTA7ZWxzZSBpZigib2JqZWN0Ij09dHlwZW9mIHQpdm9pZCAwIT09dC5maWxsJiYoZT10LmZpbGwpLHZvaWQgMCE9PXQuc3Ryb2tlJiYoaT10LnN0cm9rZSksdm9pZCAwIT09dC5zdHJva2VXaWR0aCYmKG89dC5zdHJva2VXaWR0aCk7ZWxzZSBpZih2b2lkIDAhPT10KXRocm93IlVuc3VwcG9ydGVkIHR5cGUgb2YgYmFja2dyb3VuZENvbG9yIjt0aGlzLmZyYW1lLnN0eWxlLmJhY2tncm91bmRDb2xvcj1lLHRoaXMuZnJhbWUuc3R5bGUuYm9yZGVyQ29sb3I9aSx0aGlzLmZyYW1lLnN0eWxlLmJvcmRlcldpZHRoPW8rInB4Iix0aGlzLmZyYW1lLnN0eWxlLmJvcmRlclN0eWxlPSJzb2xpZCJ9LG8uU1RZTEU9e0JBUjowLEJBUkNPTE9SOjEsQkFSU0laRToyLERPVDozLERPVExJTkU6NCxET1RDT0xPUjo1LERPVFNJWkU6NixHUklEOjcsTElORTo4LFNVUkZBQ0U6OX0sby5wcm90b3R5cGUuX2dldFN0eWxlTnVtYmVyPWZ1bmN0aW9uKHQpe3N3aXRjaCh0KXtjYXNlImRvdCI6cmV0dXJuIG8uU1RZTEUuRE9UO2Nhc2UiZG90LWxpbmUiOnJldHVybiBvLlNUWUxFLkRPVExJTkU7Y2FzZSJkb3QtY29sb3IiOnJldHVybiBvLlNUWUxFLkRPVENPTE9SO2Nhc2UiZG90LXNpemUiOnJldHVybiBvLlNUWUxFLkRPVFNJWkU7Y2FzZSJsaW5lIjpyZXR1cm4gby5TVFlMRS5MSU5FO2Nhc2UiZ3JpZCI6cmV0dXJuIG8uU1RZTEUuR1JJRDtjYXNlInN1cmZhY2UiOnJldHVybiBvLlNUWUxFLlNVUkZBQ0U7Y2FzZSJiYXIiOnJldHVybiBvLlNUWUxFLkJBUjtjYXNlImJhci1jb2xvciI6cmV0dXJuIG8uU1RZTEUuQkFSQ09MT1I7Y2FzZSJiYXItc2l6ZSI6cmV0dXJuIG8uU1RZTEUuQkFSU0laRX1yZXR1cm4tMX0sby5wcm90b3R5cGUuX2RldGVybWluZUNvbHVtbkluZGV4ZXM9ZnVuY3Rpb24odCxlKXtpZih0aGlzLnN0eWxlPT09by5TVFlMRS5ET1R8fHRoaXMuc3R5bGU9PT1vLlNUWUxFLkRPVExJTkV8fHRoaXMuc3R5bGU9PT1vLlNUWUxFLkxJTkV8fHRoaXMuc3R5bGU9PT1vLlNUWUxFLkdSSUR8fHRoaXMuc3R5bGU9PT1vLlNUWUxFLlNVUkZBQ0V8fHRoaXMuc3R5bGU9PT1vLlNUWUxFLkJBUil0aGlzLmNvbFg9MCx0aGlzLmNvbFk9MSx0aGlzLmNvbFo9Mix0aGlzLmNvbFZhbHVlPXZvaWQgMCx0LmdldE51bWJlck9mQ29sdW1ucygpPjMmJih0aGlzLmNvbEZpbHRlcj0zKTtlbHNle2lmKHRoaXMuc3R5bGUhPT1vLlNUWUxFLkRPVENPTE9SJiZ0aGlzLnN0eWxlIT09by5TVFlMRS5ET1RTSVpFJiZ0aGlzLnN0eWxlIT09by5TVFlMRS5CQVJDT0xPUiYmdGhpcy5zdHlsZSE9PW8uU1RZTEUuQkFSU0laRSl0aHJvdydVbmtub3duIHN0eWxlICInK3RoaXMuc3R5bGUrJyInO3RoaXMuY29sWD0wLHRoaXMuY29sWT0xLHRoaXMuY29sWj0yLHRoaXMuY29sVmFsdWU9Myx0LmdldE51bWJlck9mQ29sdW1ucygpPjQmJih0aGlzLmNvbEZpbHRlcj00KX19LG8ucHJvdG90eXBlLmdldE51bWJlck9mUm93cz1mdW5jdGlvbih0KXtyZXR1cm4gdC5sZW5ndGh9LG8ucHJvdG90eXBlLmdldE51bWJlck9mQ29sdW1ucz1mdW5jdGlvbih0KXt2YXIgZT0wO2Zvcih2YXIgaSBpbiB0WzBdKXRbMF0uaGFzT3duUHJvcGVydHkoaSkmJmUrKztyZXR1cm4gZX0sby5wcm90b3R5cGUuZ2V0RGlzdGluY3RWYWx1ZXM9ZnVuY3Rpb24odCxlKXtmb3IodmFyIGk9W10sbz0wO288dC5sZW5ndGg7bysrKS0xPT1pLmluZGV4T2YodFtvXVtlXSkmJmkucHVzaCh0W29dW2VdKTtyZXR1cm4gaX0sby5wcm90b3R5cGUuZ2V0Q29sdW1uUmFuZ2U9ZnVuY3Rpb24odCxlKXtmb3IodmFyIGk9e21pbjp0WzBdW2VdLG1heDp0WzBdW2VdfSxvPTA7bzx0Lmxlbmd0aDtvKyspaS5taW4+dFtvXVtlXSYmKGkubWluPXRbb11bZV0pLGkubWF4PHRbb11bZV0mJihpLm1heD10W29dW2VdKTtyZXR1cm4gaX0sby5wcm90b3R5cGUuX2RhdGFJbml0aWFsaXplPWZ1bmN0aW9uKHQsZSl7dmFyIGk9dGhpcztpZih0aGlzLmRhdGFTZXQmJnRoaXMuZGF0YVNldC5vZmYoIioiLHRoaXMuX29uQ2hhbmdlKSx2b2lkIDAhPT10KXtBcnJheS5pc0FycmF5KHQpJiYodD1uZXcgYSh0KSk7dmFyIG47aWYoISh0IGluc3RhbmNlb2YgYXx8dCBpbnN0YW5jZW9mIGgpKXRocm93IG5ldyBFcnJvcigiQXJyYXksIERhdGFTZXQsIG9yIERhdGFWaWV3IGV4cGVjdGVkIik7aWYobj10LmdldCgpLDAhPW4ubGVuZ3RoKXt0aGlzLmRhdGFTZXQ9dCx0aGlzLmRhdGFUYWJsZT1uLHRoaXMuX29uQ2hhbmdlPWZ1bmN0aW9uKCl7aS5zZXREYXRhKGkuZGF0YVNldCl9LHRoaXMuZGF0YVNldC5vbigiKiIsdGhpcy5fb25DaGFuZ2UpLHRoaXMuY29sWD0ieCIsdGhpcy5jb2xZPSJ5Iix0aGlzLmNvbFo9InoiLHRoaXMuY29sVmFsdWU9InN0eWxlIix0aGlzLmNvbEZpbHRlcj0iZmlsdGVyIixuWzBdLmhhc093blByb3BlcnR5KCJmaWx0ZXIiKSYmdm9pZCAwPT09dGhpcy5kYXRhRmlsdGVyJiYodGhpcy5kYXRhRmlsdGVyPW5ldyBwKHQsdGhpcy5jb2xGaWx0ZXIsdGhpcyksdGhpcy5kYXRhRmlsdGVyLnNldE9uTG9hZENhbGxiYWNrKGZ1bmN0aW9uKCl7aS5yZWRyYXcoKX0pKTt2YXIgcz10aGlzLnN0eWxlPT1vLlNUWUxFLkJBUnx8dGhpcy5zdHlsZT09by5TVFlMRS5CQVJDT0xPUnx8dGhpcy5zdHlsZT09by5TVFlMRS5CQVJTSVpFO2lmKHMpe2lmKHZvaWQgMCE9PXRoaXMuZGVmYXVsdFhCYXJXaWR0aCl0aGlzLnhCYXJXaWR0aD10aGlzLmRlZmF1bHRYQmFyV2lkdGg7ZWxzZXt2YXIgcj10aGlzLmdldERpc3RpbmN0VmFsdWVzKG4sdGhpcy5jb2xYKTt0aGlzLnhCYXJXaWR0aD1yWzFdLXJbMF18fDF9aWYodm9pZCAwIT09dGhpcy5kZWZhdWx0WUJhcldpZHRoKXRoaXMueUJhcldpZHRoPXRoaXMuZGVmYXVsdFlCYXJXaWR0aDtlbHNle3ZhciBkPXRoaXMuZ2V0RGlzdGluY3RWYWx1ZXMobix0aGlzLmNvbFkpO3RoaXMueUJhcldpZHRoPWRbMV0tZFswXXx8MX19dmFyIGw9dGhpcy5nZXRDb2x1bW5SYW5nZShuLHRoaXMuY29sWCk7cyYmKGwubWluLT10aGlzLnhCYXJXaWR0aC8yLGwubWF4Kz10aGlzLnhCYXJXaWR0aC8yKSx0aGlzLnhNaW49dm9pZCAwIT09dGhpcy5kZWZhdWx0WE1pbj90aGlzLmRlZmF1bHRYTWluOmwubWluLHRoaXMueE1heD12b2lkIDAhPT10aGlzLmRlZmF1bHRYTWF4P3RoaXMuZGVmYXVsdFhNYXg6bC5tYXgsdGhpcy54TWF4PD10aGlzLnhNaW4mJih0aGlzLnhNYXg9dGhpcy54TWluKzEpLHRoaXMueFN0ZXA9dm9pZCAwIT09dGhpcy5kZWZhdWx0WFN0ZXA/dGhpcy5kZWZhdWx0WFN0ZXA6KHRoaXMueE1heC10aGlzLnhNaW4pLzU7dmFyIHU9dGhpcy5nZXRDb2x1bW5SYW5nZShuLHRoaXMuY29sWSk7cyYmKHUubWluLT10aGlzLnlCYXJXaWR0aC8yLHUubWF4Kz10aGlzLnlCYXJXaWR0aC8yKSx0aGlzLnlNaW49dm9pZCAwIT09dGhpcy5kZWZhdWx0WU1pbj90aGlzLmRlZmF1bHRZTWluOnUubWluLHRoaXMueU1heD12b2lkIDAhPT10aGlzLmRlZmF1bHRZTWF4P3RoaXMuZGVmYXVsdFlNYXg6dS5tYXgsdGhpcy55TWF4PD10aGlzLnlNaW4mJih0aGlzLnlNYXg9dGhpcy55TWluKzEpLHRoaXMueVN0ZXA9dm9pZCAwIT09dGhpcy5kZWZhdWx0WVN0ZXA/dGhpcy5kZWZhdWx0WVN0ZXA6KHRoaXMueU1heC10aGlzLnlNaW4pLzU7dmFyIGM9dGhpcy5nZXRDb2x1bW5SYW5nZShuLHRoaXMuY29sWik7aWYodGhpcy56TWluPXZvaWQgMCE9PXRoaXMuZGVmYXVsdFpNaW4/dGhpcy5kZWZhdWx0Wk1pbjpjLm1pbix0aGlzLnpNYXg9dm9pZCAwIT09dGhpcy5kZWZhdWx0Wk1heD90aGlzLmRlZmF1bHRaTWF4OmMubWF4LHRoaXMuek1heDw9dGhpcy56TWluJiYodGhpcy56TWF4PXRoaXMuek1pbisxKSx0aGlzLnpTdGVwPXZvaWQgMCE9PXRoaXMuZGVmYXVsdFpTdGVwP3RoaXMuZGVmYXVsdFpTdGVwOih0aGlzLnpNYXgtdGhpcy56TWluKS81LHZvaWQgMCE9PXRoaXMuY29sVmFsdWUpe3ZhciBmPXRoaXMuZ2V0Q29sdW1uUmFuZ2Uobix0aGlzLmNvbFZhbHVlKTt0aGlzLnZhbHVlTWluPXZvaWQgMCE9PXRoaXMuZGVmYXVsdFZhbHVlTWluP3RoaXMuZGVmYXVsdFZhbHVlTWluOmYubWluLHRoaXMudmFsdWVNYXg9dm9pZCAwIT09dGhpcy5kZWZhdWx0VmFsdWVNYXg/dGhpcy5kZWZhdWx0VmFsdWVNYXg6Zi5tYXgsdGhpcy52YWx1ZU1heDw9dGhpcy52YWx1ZU1pbiYmKHRoaXMudmFsdWVNYXg9dGhpcy52YWx1ZU1pbisxKX10aGlzLl9zZXRTY2FsZSgpfX19LG8ucHJvdG90eXBlLl9nZXREYXRhUG9pbnRzPWZ1bmN0aW9uKHQpe3ZhciBlLGksbixzLHIsYSxoPVtdO2lmKHRoaXMuc3R5bGU9PT1vLlNUWUxFLkdSSUR8fHRoaXMuc3R5bGU9PT1vLlNUWUxFLlNVUkZBQ0Upe3ZhciBkPVtdLHU9W107Zm9yKG49MDtuPHRoaXMuZ2V0TnVtYmVyT2ZSb3dzKHQpO24rKyllPXRbbl1bdGhpcy5jb2xYXXx8MCxpPXRbbl1bdGhpcy5jb2xZXXx8MCwtMT09PWQuaW5kZXhPZihlKSYmZC5wdXNoKGUpLC0xPT09dS5pbmRleE9mKGkpJiZ1LnB1c2goaSk7dmFyIGM9ZnVuY3Rpb24odCxlKXtyZXR1cm4gdC1lfTtkLnNvcnQoYyksdS5zb3J0KGMpO3ZhciBwPVtdO2ZvcihuPTA7bjx0Lmxlbmd0aDtuKyspe2U9dFtuXVt0aGlzLmNvbFhdfHwwLGk9dFtuXVt0aGlzLmNvbFldfHwwLHM9dFtuXVt0aGlzLmNvbFpdfHwwO3ZhciBmPWQuaW5kZXhPZihlKSxtPXUuaW5kZXhPZihpKTt2b2lkIDA9PT1wW2ZdJiYocFtmXT1bXSk7dmFyIHY9bmV3IGw7di54PWUsdi55PWksdi56PXMscj17fSxyLnBvaW50PXYsci50cmFucz12b2lkIDAsci5zY3JlZW49dm9pZCAwLHIuYm90dG9tPW5ldyBsKGUsaSx0aGlzLnpNaW4pLHBbZl1bbV09cixoLnB1c2gocil9Zm9yKGU9MDtlPHAubGVuZ3RoO2UrKylmb3IoaT0wO2k8cFtlXS5sZW5ndGg7aSsrKXBbZV1baV0mJihwW2VdW2ldLnBvaW50UmlnaHQ9ZTxwLmxlbmd0aC0xP3BbZSsxXVtpXTp2b2lkIDAscFtlXVtpXS5wb2ludFRvcD1pPHBbZV0ubGVuZ3RoLTE/cFtlXVtpKzFdOnZvaWQgMCxwW2VdW2ldLnBvaW50Q3Jvc3M9ZTxwLmxlbmd0aC0xJiZpPHBbZV0ubGVuZ3RoLTE/cFtlKzFdW2krMV06dm9pZCAwKX1lbHNlIGZvcihuPTA7bjx0Lmxlbmd0aDtuKyspYT1uZXcgbCxhLng9dFtuXVt0aGlzLmNvbFhdfHwwLGEueT10W25dW3RoaXMuY29sWV18fDAsYS56PXRbbl1bdGhpcy5jb2xaXXx8MCx2b2lkIDAhPT10aGlzLmNvbFZhbHVlJiYoYS52YWx1ZT10W25dW3RoaXMuY29sVmFsdWVdfHwwKSxyPXt9LHIucG9pbnQ9YSxyLmJvdHRvbT1uZXcgbChhLngsYS55LHRoaXMuek1pbiksci50cmFucz12b2lkIDAsci5zY3JlZW49dm9pZCAwLGgucHVzaChyKTtyZXR1cm4gaH0sby5wcm90b3R5cGUuY3JlYXRlPWZ1bmN0aW9uKCl7Zm9yKDt0aGlzLmNvbnRhaW5lckVsZW1lbnQuaGFzQ2hpbGROb2RlcygpOyl0aGlzLmNvbnRhaW5lckVsZW1lbnQucmVtb3ZlQ2hpbGQodGhpcy5jb250YWluZXJFbGVtZW50LmZpcnN0Q2hpbGQpO3RoaXMuZnJhbWU9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2IiksdGhpcy5mcmFtZS5zdHlsZS5wb3NpdGlvbj0icmVsYXRpdmUiLHRoaXMuZnJhbWUuc3R5bGUub3ZlcmZsb3c9ImhpZGRlbiIsdGhpcy5mcmFtZS5jYW52YXM9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiY2FudmFzIiksdGhpcy5mcmFtZS5jYW52YXMuc3R5bGUucG9zaXRpb249InJlbGF0aXZlIix0aGlzLmZyYW1lLmFwcGVuZENoaWxkKHRoaXMuZnJhbWUuY2FudmFzKTt2YXIgdD1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJESVYiKTt0LnN0eWxlLmNvbG9yPSJyZWQiLHQuc3R5bGUuZm9udFdlaWdodD0iYm9sZCIsdC5zdHlsZS5wYWRkaW5nPSIxMHB4Iix0LmlubmVySFRNTD0iRXJyb3I6IHlvdXIgYnJvd3NlciBkb2VzIG5vdCBzdXBwb3J0IEhUTUwgY2FudmFzIix0aGlzLmZyYW1lLmNhbnZhcy5hcHBlbmRDaGlsZCh0KSx0aGlzLmZyYW1lLmZpbHRlcj1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKSx0aGlzLmZyYW1lLmZpbHRlci5zdHlsZS5wb3NpdGlvbj0iYWJzb2x1dGUiLHRoaXMuZnJhbWUuZmlsdGVyLnN0eWxlLmJvdHRvbT0iMHB4Iix0aGlzLmZyYW1lLmZpbHRlci5zdHlsZS5sZWZ0PSIwcHgiLHRoaXMuZnJhbWUuZmlsdGVyLnN0eWxlLndpZHRoPSIxMDAlIix0aGlzLmZyYW1lLmFwcGVuZENoaWxkKHRoaXMuZnJhbWUuZmlsdGVyKTt2YXIgZT10aGlzLGk9ZnVuY3Rpb24odCl7ZS5fb25Nb3VzZURvd24odCl9LG89ZnVuY3Rpb24odCl7ZS5fb25Ub3VjaFN0YXJ0KHQpfSxuPWZ1bmN0aW9uKHQpe2UuX29uV2hlZWwodCl9LHM9ZnVuY3Rpb24odCl7ZS5fb25Ub29sdGlwKHQpfTtkLmFkZEV2ZW50TGlzdGVuZXIodGhpcy5mcmFtZS5jYW52YXMsImtleWRvd24iLG9ua2V5ZG93biksZC5hZGRFdmVudExpc3RlbmVyKHRoaXMuZnJhbWUuY2FudmFzLCJtb3VzZWRvd24iLGkpLGQuYWRkRXZlbnRMaXN0ZW5lcih0aGlzLmZyYW1lLmNhbnZhcywidG91Y2hzdGFydCIsbyksZC5hZGRFdmVudExpc3RlbmVyKHRoaXMuZnJhbWUuY2FudmFzLCJtb3VzZXdoZWVsIixuKSxkLmFkZEV2ZW50TGlzdGVuZXIodGhpcy5mcmFtZS5jYW52YXMsIm1vdXNlbW92ZSIscyksdGhpcy5jb250YWluZXJFbGVtZW50LmFwcGVuZENoaWxkKHRoaXMuZnJhbWUpfSxvLnByb3RvdHlwZS5zZXRTaXplPWZ1bmN0aW9uKHQsZSl7dGhpcy5mcmFtZS5zdHlsZS53aWR0aD10LHRoaXMuZnJhbWUuc3R5bGUuaGVpZ2h0PWUsdGhpcy5fcmVzaXplQ2FudmFzKCl9LG8ucHJvdG90eXBlLl9yZXNpemVDYW52YXM9ZnVuY3Rpb24oKXt0aGlzLmZyYW1lLmNhbnZhcy5zdHlsZS53aWR0aD0iMTAwJSIsdGhpcy5mcmFtZS5jYW52YXMuc3R5bGUuaGVpZ2h0PSIxMDAlIix0aGlzLmZyYW1lLmNhbnZhcy53aWR0aD10aGlzLmZyYW1lLmNhbnZhcy5jbGllbnRXaWR0aCx0aGlzLmZyYW1lLmNhbnZhcy5oZWlnaHQ9dGhpcy5mcmFtZS5jYW52YXMuY2xpZW50SGVpZ2h0LHRoaXMuZnJhbWUuZmlsdGVyLnN0eWxlLndpZHRoPXRoaXMuZnJhbWUuY2FudmFzLmNsaWVudFdpZHRoLTIwKyJweCJ9LG8ucHJvdG90eXBlLmFuaW1hdGlvblN0YXJ0PWZ1bmN0aW9uKCl7aWYoIXRoaXMuZnJhbWUuZmlsdGVyfHwhdGhpcy5mcmFtZS5maWx0ZXIuc2xpZGVyKXRocm93Ik5vIGFuaW1hdGlvbiBhdmFpbGFibGUiO3RoaXMuZnJhbWUuZmlsdGVyLnNsaWRlci5wbGF5KCl9LG8ucHJvdG90eXBlLmFuaW1hdGlvblN0b3A9ZnVuY3Rpb24oKXt0aGlzLmZyYW1lLmZpbHRlciYmdGhpcy5mcmFtZS5maWx0ZXIuc2xpZGVyJiZ0aGlzLmZyYW1lLmZpbHRlci5zbGlkZXIuc3RvcCgpfSxvLnByb3RvdHlwZS5fcmVzaXplQ2VudGVyPWZ1bmN0aW9uKCl7IiUiPT09dGhpcy5kZWZhdWx0WENlbnRlci5jaGFyQXQodGhpcy5kZWZhdWx0WENlbnRlci5sZW5ndGgtMSk/dGhpcy54Y2VudGVyPXBhcnNlRmxvYXQodGhpcy5kZWZhdWx0WENlbnRlcikvMTAwKnRoaXMuZnJhbWUuY2FudmFzLmNsaWVudFdpZHRoOnRoaXMueGNlbnRlcj1wYXJzZUZsb2F0KHRoaXMuZGVmYXVsdFhDZW50ZXIpLCIlIj09PXRoaXMuZGVmYXVsdFlDZW50ZXIuY2hhckF0KHRoaXMuZGVmYXVsdFlDZW50ZXIubGVuZ3RoLTEpP3RoaXMueWNlbnRlcj1wYXJzZUZsb2F0KHRoaXMuZGVmYXVsdFlDZW50ZXIpLzEwMCoodGhpcy5mcmFtZS5jYW52YXMuY2xpZW50SGVpZ2h0LXRoaXMuZnJhbWUuZmlsdGVyLmNsaWVudEhlaWdodCk6dGhpcy55Y2VudGVyPXBhcnNlRmxvYXQodGhpcy5kZWZhdWx0WUNlbnRlcil9LG8ucHJvdG90eXBlLnNldENhbWVyYVBvc2l0aW9uPWZ1bmN0aW9uKHQpe3ZvaWQgMCE9PXQmJih2b2lkIDAhPT10Lmhvcml6b250YWwmJnZvaWQgMCE9PXQudmVydGljYWwmJnRoaXMuY2FtZXJhLnNldEFybVJvdGF0aW9uKHQuaG9yaXpvbnRhbCx0LnZlcnRpY2FsKSx2b2lkIDAhPT10LmRpc3RhbmNlJiZ0aGlzLmNhbWVyYS5zZXRBcm1MZW5ndGgodC5kaXN0YW5jZSksdGhpcy5yZWRyYXcoKSl9LG8ucHJvdG90eXBlLmdldENhbWVyYVBvc2l0aW9uPWZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5jYW1lcmEuZ2V0QXJtUm90YXRpb24oKTtyZXR1cm4gdC5kaXN0YW5jZT10aGlzLmNhbWVyYS5nZXRBcm1MZW5ndGgoKSx0fSxvLnByb3RvdHlwZS5fcmVhZERhdGE9ZnVuY3Rpb24odCl7dGhpcy5fZGF0YUluaXRpYWxpemUodCx0aGlzLnN0eWxlKSx0aGlzLmRhdGFGaWx0ZXI/dGhpcy5kYXRhUG9pbnRzPXRoaXMuZGF0YUZpbHRlci5fZ2V0RGF0YVBvaW50cygpOnRoaXMuZGF0YVBvaW50cz10aGlzLl9nZXREYXRhUG9pbnRzKHRoaXMuZGF0YVRhYmxlKSx0aGlzLl9yZWRyYXdGaWx0ZXIoKX0sby5wcm90b3R5cGUuc2V0RGF0YT1mdW5jdGlvbih0KXt0aGlzLl9yZWFkRGF0YSh0KSx0aGlzLnJlZHJhdygpLHRoaXMuYW5pbWF0aW9uQXV0b1N0YXJ0JiZ0aGlzLmRhdGFGaWx0ZXImJnRoaXMuYW5pbWF0aW9uU3RhcnQoKX0sby5wcm90b3R5cGUuc2V0T3B0aW9ucz1mdW5jdGlvbih0KXt2YXIgZT12b2lkIDA7aWYodGhpcy5hbmltYXRpb25TdG9wKCksdm9pZCAwIT09dCl7aWYodm9pZCAwIT09dC53aWR0aCYmKHRoaXMud2lkdGg9dC53aWR0aCksdm9pZCAwIT09dC5oZWlnaHQmJih0aGlzLmhlaWdodD10LmhlaWdodCksdm9pZCAwIT09dC54Q2VudGVyJiYodGhpcy5kZWZhdWx0WENlbnRlcj10LnhDZW50ZXIpLHZvaWQgMCE9PXQueUNlbnRlciYmKHRoaXMuZGVmYXVsdFlDZW50ZXI9dC55Q2VudGVyKSx2b2lkIDAhPT10LmZpbHRlckxhYmVsJiYodGhpcy5maWx0ZXJMYWJlbD10LmZpbHRlckxhYmVsKSx2b2lkIDAhPT10LmxlZ2VuZExhYmVsJiYodGhpcy5sZWdlbmRMYWJlbD10LmxlZ2VuZExhYmVsKSx2b2lkIDAhPT10LnhMYWJlbCYmKHRoaXMueExhYmVsPXQueExhYmVsKSx2b2lkIDAhPT10LnlMYWJlbCYmKHRoaXMueUxhYmVsPXQueUxhYmVsKSx2b2lkIDAhPT10LnpMYWJlbCYmKHRoaXMuekxhYmVsPXQuekxhYmVsKSx2b2lkIDAhPT10LnhWYWx1ZUxhYmVsJiYodGhpcy54VmFsdWVMYWJlbD10LnhWYWx1ZUxhYmVsKSx2b2lkIDAhPT10LnlWYWx1ZUxhYmVsJiYodGhpcy55VmFsdWVMYWJlbD10LnlWYWx1ZUxhYmVsKSx2b2lkIDAhPT10LnpWYWx1ZUxhYmVsJiYodGhpcy56VmFsdWVMYWJlbD10LnpWYWx1ZUxhYmVsKSx2b2lkIDAhPT10LnN0eWxlKXt2YXIgaT10aGlzLl9nZXRTdHlsZU51bWJlcih0LnN0eWxlKTstMSE9PWkmJih0aGlzLnN0eWxlPWkpfXZvaWQgMCE9PXQuc2hvd0dyaWQmJih0aGlzLnNob3dHcmlkPXQuc2hvd0dyaWQpLHZvaWQgMCE9PXQuc2hvd1BlcnNwZWN0aXZlJiYodGhpcy5zaG93UGVyc3BlY3RpdmU9dC5zaG93UGVyc3BlY3RpdmUpLHZvaWQgMCE9PXQuc2hvd1NoYWRvdyYmKHRoaXMuc2hvd1NoYWRvdz10LnNob3dTaGFkb3cpLHZvaWQgMCE9PXQudG9vbHRpcCYmKHRoaXMuc2hvd1Rvb2x0aXA9dC50b29sdGlwKSx2b2lkIDAhPT10LnNob3dBbmltYXRpb25Db250cm9scyYmKHRoaXMuc2hvd0FuaW1hdGlvbkNvbnRyb2xzPXQuc2hvd0FuaW1hdGlvbkNvbnRyb2xzKSx2b2lkIDAhPT10LmtlZXBBc3BlY3RSYXRpbyYmKHRoaXMua2VlcEFzcGVjdFJhdGlvPXQua2VlcEFzcGVjdFJhdGlvKSx2b2lkIDAhPT10LnZlcnRpY2FsUmF0aW8mJih0aGlzLnZlcnRpY2FsUmF0aW89dC52ZXJ0aWNhbFJhdGlvKSx2b2lkIDAhPT10LmFuaW1hdGlvbkludGVydmFsJiYodGhpcy5hbmltYXRpb25JbnRlcnZhbD10LmFuaW1hdGlvbkludGVydmFsKSx2b2lkIDAhPT10LmFuaW1hdGlvblByZWxvYWQmJih0aGlzLmFuaW1hdGlvblByZWxvYWQ9dC5hbmltYXRpb25QcmVsb2FkKSx2b2lkIDAhPT10LmFuaW1hdGlvbkF1dG9TdGFydCYmKHRoaXMuYW5pbWF0aW9uQXV0b1N0YXJ0PXQuYW5pbWF0aW9uQXV0b1N0YXJ0KSx2b2lkIDAhPT10LnhCYXJXaWR0aCYmKHRoaXMuZGVmYXVsdFhCYXJXaWR0aD10LnhCYXJXaWR0aCksdm9pZCAwIT09dC55QmFyV2lkdGgmJih0aGlzLmRlZmF1bHRZQmFyV2lkdGg9dC55QmFyV2lkdGgpLHZvaWQgMCE9PXQueE1pbiYmKHRoaXMuZGVmYXVsdFhNaW49dC54TWluKSx2b2lkIDAhPT10LnhTdGVwJiYodGhpcy5kZWZhdWx0WFN0ZXA9dC54U3RlcCksdm9pZCAwIT09dC54TWF4JiYodGhpcy5kZWZhdWx0WE1heD10LnhNYXgpLHZvaWQgMCE9PXQueU1pbiYmKHRoaXMuZGVmYXVsdFlNaW49dC55TWluKSx2b2lkIDAhPT10LnlTdGVwJiYodGhpcy5kZWZhdWx0WVN0ZXA9dC55U3RlcCksdm9pZCAwIT09dC55TWF4JiYodGhpcy5kZWZhdWx0WU1heD10LnlNYXgpLHZvaWQgMCE9PXQuek1pbiYmKHRoaXMuZGVmYXVsdFpNaW49dC56TWluKSx2b2lkIDAhPT10LnpTdGVwJiYodGhpcy5kZWZhdWx0WlN0ZXA9dC56U3RlcCksdm9pZCAwIT09dC56TWF4JiYodGhpcy5kZWZhdWx0Wk1heD10LnpNYXgpLHZvaWQgMCE9PXQudmFsdWVNaW4mJih0aGlzLmRlZmF1bHRWYWx1ZU1pbj10LnZhbHVlTWluKSx2b2lkIDAhPT10LnZhbHVlTWF4JiYodGhpcy5kZWZhdWx0VmFsdWVNYXg9dC52YWx1ZU1heCksdm9pZCAwIT09dC5iYWNrZ3JvdW5kQ29sb3ImJnRoaXMuX3NldEJhY2tncm91bmRDb2xvcih0LmJhY2tncm91bmRDb2xvciksdm9pZCAwIT09dC5jYW1lcmFQb3NpdGlvbiYmKGU9dC5jYW1lcmFQb3NpdGlvbiksdm9pZCAwIT09ZSYmKHRoaXMuY2FtZXJhLnNldEFybVJvdGF0aW9uKGUuaG9yaXpvbnRhbCxlLnZlcnRpY2FsKSx0aGlzLmNhbWVyYS5zZXRBcm1MZW5ndGgoZS5kaXN0YW5jZSkpLHZvaWQgMCE9PXQuYXhpc0NvbG9yJiYodGhpcy5heGlzQ29sb3I9dC5heGlzQ29sb3IpLHZvaWQgMCE9PXQuZ3JpZENvbG9yJiYodGhpcy5ncmlkQ29sb3I9dC5ncmlkQ29sb3IpLHQuZGF0YUNvbG9yJiYoInN0cmluZyI9PXR5cGVvZiB0LmRhdGFDb2xvcj8odGhpcy5kYXRhQ29sb3IuZmlsbD10LmRhdGFDb2xvcix0aGlzLmRhdGFDb2xvci5zdHJva2U9dC5kYXRhQ29sb3IpOih0LmRhdGFDb2xvci5maWxsJiYodGhpcy5kYXRhQ29sb3IuZmlsbD10LmRhdGFDb2xvci5maWxsKSx0LmRhdGFDb2xvci5zdHJva2UmJih0aGlzLmRhdGFDb2xvci5zdHJva2U9dC5kYXRhQ29sb3Iuc3Ryb2tlKSx2b2lkIDAhPT10LmRhdGFDb2xvci5zdHJva2VXaWR0aCYmKHRoaXMuZGF0YUNvbG9yLnN0cm9rZVdpZHRoPXQuZGF0YUNvbG9yLnN0cm9rZVdpZHRoKSkpfXRoaXMuc2V0U2l6ZSh0aGlzLndpZHRoLHRoaXMuaGVpZ2h0KSx0aGlzLmRhdGFUYWJsZSYmdGhpcy5zZXREYXRhKHRoaXMuZGF0YVRhYmxlKSx0aGlzLmFuaW1hdGlvbkF1dG9TdGFydCYmdGhpcy5kYXRhRmlsdGVyJiZ0aGlzLmFuaW1hdGlvblN0YXJ0KCl9LG8ucHJvdG90eXBlLnJlZHJhdz1mdW5jdGlvbigpe2lmKHZvaWQgMD09PXRoaXMuZGF0YVBvaW50cyl0aHJvdyJFcnJvcjogZ3JhcGggZGF0YSBub3QgaW5pdGlhbGl6ZWQiO3RoaXMuX3Jlc2l6ZUNhbnZhcygpLHRoaXMuX3Jlc2l6ZUNlbnRlcigpLHRoaXMuX3JlZHJhd1NsaWRlcigpLHRoaXMuX3JlZHJhd0NsZWFyKCksdGhpcy5fcmVkcmF3QXhpcygpLHRoaXMuc3R5bGU9PT1vLlNUWUxFLkdSSUR8fHRoaXMuc3R5bGU9PT1vLlNUWUxFLlNVUkZBQ0U/dGhpcy5fcmVkcmF3RGF0YUdyaWQoKTp0aGlzLnN0eWxlPT09by5TVFlMRS5MSU5FP3RoaXMuX3JlZHJhd0RhdGFMaW5lKCk6dGhpcy5zdHlsZT09PW8uU1RZTEUuQkFSfHx0aGlzLnN0eWxlPT09by5TVFlMRS5CQVJDT0xPUnx8dGhpcy5zdHlsZT09PW8uU1RZTEUuQkFSU0laRT90aGlzLl9yZWRyYXdEYXRhQmFyKCk6dGhpcy5fcmVkcmF3RGF0YURvdCgpLHRoaXMuX3JlZHJhd0luZm8oKSx0aGlzLl9yZWRyYXdMZWdlbmQoKX0sby5wcm90b3R5cGUuX3JlZHJhd0NsZWFyPWZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5mcmFtZS5jYW52YXMsZT10LmdldENvbnRleHQoIjJkIik7ZS5jbGVhclJlY3QoMCwwLHQud2lkdGgsdC5oZWlnaHQpfSxvLnByb3RvdHlwZS5fcmVkcmF3TGVnZW5kPWZ1bmN0aW9uKCl7dmFyIHQ7aWYodGhpcy5zdHlsZT09PW8uU1RZTEUuRE9UQ09MT1J8fHRoaXMuc3R5bGU9PT1vLlNUWUxFLkRPVFNJWkUpe3ZhciBlLGksbj0uMDIqdGhpcy5mcmFtZS5jbGllbnRXaWR0aDt0aGlzLnN0eWxlPT09by5TVFlMRS5ET1RTSVpFPyhlPW4vMixpPW4vMisyKm4pOihlPTIwLGk9MjApO3ZhciBzPU1hdGgubWF4KC4yNSp0aGlzLmZyYW1lLmNsaWVudEhlaWdodCwxMDApLHI9dGhpcy5tYXJnaW4sYT10aGlzLmZyYW1lLmNsaWVudFdpZHRoLXRoaXMubWFyZ2luLGg9YS1pLGQ9citzfXZhciBsPXRoaXMuZnJhbWUuY2FudmFzLHU9bC5nZXRDb250ZXh0KCIyZCIpO2lmKHUubGluZVdpZHRoPTEsdS5mb250PSIxNHB4IGFyaWFsIix0aGlzLnN0eWxlPT09by5TVFlMRS5ET1RDT0xPUil7dmFyIGM9MCxwPXM7Zm9yKHQ9YztwPnQ7dCsrKXt2YXIgZj0odC1jKS8ocC1jKSx2PTI0MCpmLGc9dGhpcy5faHN2MnJnYih2LDEsMSk7dS5zdHJva2VTdHlsZT1nLHUuYmVnaW5QYXRoKCksdS5tb3ZlVG8oaCxyK3QpLHUubGluZVRvKGEscit0KSx1LnN0cm9rZSgpfXUuc3Ryb2tlU3R5bGU9dGhpcy5heGlzQ29sb3IsdS5zdHJva2VSZWN0KGgscixpLHMpfWlmKHRoaXMuc3R5bGU9PT1vLlNUWUxFLkRPVFNJWkUmJih1LnN0cm9rZVN0eWxlPXRoaXMuYXhpc0NvbG9yLHUuZmlsbFN0eWxlPXRoaXMuZGF0YUNvbG9yLmZpbGwsdS5iZWdpblBhdGgoKSx1Lm1vdmVUbyhoLHIpLHUubGluZVRvKGEsciksdS5saW5lVG8oYS1pK2UsZCksdS5saW5lVG8oaCxkKSx1LmNsb3NlUGF0aCgpLHUuZmlsbCgpLHUuc3Ryb2tlKCkpLHRoaXMuc3R5bGU9PT1vLlNUWUxFLkRPVENPTE9SfHx0aGlzLnN0eWxlPT09by5TVFlMRS5ET1RTSVpFKXt2YXIgeT01LGI9bmV3IG0odGhpcy52YWx1ZU1pbix0aGlzLnZhbHVlTWF4LCh0aGlzLnZhbHVlTWF4LXRoaXMudmFsdWVNaW4pLzUsITApO2ZvcihiLnN0YXJ0KCksYi5nZXRDdXJyZW50KCk8dGhpcy52YWx1ZU1pbiYmYi5uZXh0KCk7IWIuZW5kKCk7KXQ9ZC0oYi5nZXRDdXJyZW50KCktdGhpcy52YWx1ZU1pbikvKHRoaXMudmFsdWVNYXgtdGhpcy52YWx1ZU1pbikqcyx1LmJlZ2luUGF0aCgpLHUubW92ZVRvKGgteSx0KSx1LmxpbmVUbyhoLHQpLHUuc3Ryb2tlKCksdS50ZXh0QWxpZ249InJpZ2h0Iix1LnRleHRCYXNlbGluZT0ibWlkZGxlIix1LmZpbGxTdHlsZT10aGlzLmF4aXNDb2xvcix1LmZpbGxUZXh0KGIuZ2V0Q3VycmVudCgpLGgtMip5LHQpLGIubmV4dCgpO3UudGV4dEFsaWduPSJyaWdodCIsdS50ZXh0QmFzZWxpbmU9InRvcCI7dmFyIHc9dGhpcy5sZWdlbmRMYWJlbDt1LmZpbGxUZXh0KHcsYSxkK3RoaXMubWFyZ2luKX19LG8ucHJvdG90eXBlLl9yZWRyYXdGaWx0ZXI9ZnVuY3Rpb24oKXtpZih0aGlzLmZyYW1lLmZpbHRlci5pbm5lckhUTUw9IiIsdGhpcy5kYXRhRmlsdGVyKXt2YXIgdD17dmlzaWJsZTp0aGlzLnNob3dBbmltYXRpb25Db250cm9sc30sZT1uZXcgZih0aGlzLmZyYW1lLmZpbHRlcix0KTt0aGlzLmZyYW1lLmZpbHRlci5zbGlkZXI9ZSx0aGlzLmZyYW1lLmZpbHRlci5zdHlsZS5wYWRkaW5nPSIxMHB4IixlLnNldFZhbHVlcyh0aGlzLmRhdGFGaWx0ZXIudmFsdWVzKSxlLnNldFBsYXlJbnRlcnZhbCh0aGlzLmFuaW1hdGlvbkludGVydmFsKTt2YXIgaT10aGlzLG89ZnVuY3Rpb24oKXt2YXIgdD1lLmdldEluZGV4KCk7aS5kYXRhRmlsdGVyLnNlbGVjdFZhbHVlKHQpLGkuZGF0YVBvaW50cz1pLmRhdGFGaWx0ZXIuX2dldERhdGFQb2ludHMoKSxpLnJlZHJhdygpfTtlLnNldE9uQ2hhbmdlQ2FsbGJhY2sobyl9ZWxzZSB0aGlzLmZyYW1lLmZpbHRlci5zbGlkZXI9dm9pZCAwfSxvLnByb3RvdHlwZS5fcmVkcmF3U2xpZGVyPWZ1bmN0aW9uKCl7dm9pZCAwIT09dGhpcy5mcmFtZS5maWx0ZXIuc2xpZGVyJiZ0aGlzLmZyYW1lLmZpbHRlci5zbGlkZXIucmVkcmF3KCl9LG8ucHJvdG90eXBlLl9yZWRyYXdJbmZvPWZ1bmN0aW9uKCl7aWYodGhpcy5kYXRhRmlsdGVyKXt2YXIgdD10aGlzLmZyYW1lLmNhbnZhcyxlPXQuZ2V0Q29udGV4dCgiMmQiKTtlLmZvbnQ9IjE0cHggYXJpYWwiLGUubGluZVN0eWxlPSJncmF5IixlLmZpbGxTdHlsZT0iZ3JheSIsZS50ZXh0QWxpZ249ImxlZnQiLGUudGV4dEJhc2VsaW5lPSJ0b3AiO3ZhciBpPXRoaXMubWFyZ2luLG89dGhpcy5tYXJnaW47ZS5maWxsVGV4dCh0aGlzLmRhdGFGaWx0ZXIuZ2V0TGFiZWwoKSsiOiAiK3RoaXMuZGF0YUZpbHRlci5nZXRTZWxlY3RlZFZhbHVlKCksaSxvKX19LG8ucHJvdG90eXBlLl9yZWRyYXdBeGlzPWZ1bmN0aW9uKCl7dmFyIHQsZSxpLG8sbixzLHIsYSxoLGQsdSxjLHAsZj10aGlzLmZyYW1lLmNhbnZhcyx2PWYuZ2V0Q29udGV4dCgiMmQiKTt2LmZvbnQ9MjQvdGhpcy5jYW1lcmEuZ2V0QXJtTGVuZ3RoKCkrInB4IGFyaWFsIjt2YXIgZz0uMDI1L3RoaXMuc2NhbGUueCx5PS4wMjUvdGhpcy5zY2FsZS55LGI9NS90aGlzLmNhbWVyYS5nZXRBcm1MZW5ndGgoKSx3PXRoaXMuY2FtZXJhLmdldEFybVJvdGF0aW9uKCkuaG9yaXpvbnRhbDtmb3Iodi5saW5lV2lkdGg9MSxvPXZvaWQgMD09PXRoaXMuZGVmYXVsdFhTdGVwLGk9bmV3IG0odGhpcy54TWluLHRoaXMueE1heCx0aGlzLnhTdGVwLG8pLGkuc3RhcnQoKSxpLmdldEN1cnJlbnQoKTx0aGlzLnhNaW4mJmkubmV4dCgpOyFpLmVuZCgpOyl7dmFyIF89aS5nZXRDdXJyZW50KCk7dGhpcy5zaG93R3JpZD8odD10aGlzLl9jb252ZXJ0M0R0bzJEKG5ldyBsKF8sdGhpcy55TWluLHRoaXMuek1pbikpLGU9dGhpcy5fY29udmVydDNEdG8yRChuZXcgbChfLHRoaXMueU1heCx0aGlzLnpNaW4pKSx2LnN0cm9rZVN0eWxlPXRoaXMuZ3JpZENvbG9yLHYuYmVnaW5QYXRoKCksdi5tb3ZlVG8odC54LHQueSksdi5saW5lVG8oZS54LGUueSksdi5zdHJva2UoKSk6KHQ9dGhpcy5fY29udmVydDNEdG8yRChuZXcgbChfLHRoaXMueU1pbix0aGlzLnpNaW4pKSxlPXRoaXMuX2NvbnZlcnQzRHRvMkQobmV3IGwoXyx0aGlzLnlNaW4rZyx0aGlzLnpNaW4pKSx2LnN0cm9rZVN0eWxlPXRoaXMuYXhpc0NvbG9yLHYuYmVnaW5QYXRoKCksdi5tb3ZlVG8odC54LHQueSksdi5saW5lVG8oZS54LGUueSksdi5zdHJva2UoKSx0PXRoaXMuX2NvbnZlcnQzRHRvMkQobmV3IGwoXyx0aGlzLnlNYXgsdGhpcy56TWluKSksZT10aGlzLl9jb252ZXJ0M0R0bzJEKG5ldyBsKF8sdGhpcy55TWF4LWcsdGhpcy56TWluKSksdi5zdHJva2VTdHlsZT10aGlzLmF4aXNDb2xvcix2LmJlZ2luUGF0aCgpLHYubW92ZVRvKHQueCx0LnkpLHYubGluZVRvKGUueCxlLnkpLHYuc3Ryb2tlKCkpLHI9TWF0aC5jb3Modyk+MD90aGlzLnlNaW46dGhpcy55TWF4LG49dGhpcy5fY29udmVydDNEdG8yRChuZXcgbChfLHIsdGhpcy56TWluKSksTWF0aC5jb3MoMip3KT4wPyh2LnRleHRBbGlnbj0iY2VudGVyIix2LnRleHRCYXNlbGluZT0idG9wIixuLnkrPWIpOk1hdGguc2luKDIqdyk8MD8odi50ZXh0QWxpZ249InJpZ2h0Iix2LnRleHRCYXNlbGluZT0ibWlkZGxlIik6KHYudGV4dEFsaWduPSJsZWZ0Iix2LnRleHRCYXNlbGluZT0ibWlkZGxlIiksdi5maWxsU3R5bGU9dGhpcy5heGlzQ29sb3Isdi5maWxsVGV4dCgiICAiK3RoaXMueFZhbHVlTGFiZWwoaS5nZXRDdXJyZW50KCkpKyIgICIsbi54LG4ueSksaS5uZXh0KCl9Zm9yKHYubGluZVdpZHRoPTEsbz12b2lkIDA9PT10aGlzLmRlZmF1bHRZU3RlcCxpPW5ldyBtKHRoaXMueU1pbix0aGlzLnlNYXgsdGhpcy55U3RlcCxvKSxpLnN0YXJ0KCksaS5nZXRDdXJyZW50KCk8dGhpcy55TWluJiZpLm5leHQoKTshaS5lbmQoKTspdGhpcy5zaG93R3JpZD8odD10aGlzLl9jb252ZXJ0M0R0bzJEKG5ldyBsKHRoaXMueE1pbixpLmdldEN1cnJlbnQoKSx0aGlzLnpNaW4pKSxlPXRoaXMuX2NvbnZlcnQzRHRvMkQobmV3IGwodGhpcy54TWF4LGkuZ2V0Q3VycmVudCgpLHRoaXMuek1pbikpLHYuc3Ryb2tlU3R5bGU9dGhpcy5ncmlkQ29sb3Isdi5iZWdpblBhdGgoKSx2Lm1vdmVUbyh0LngsdC55KSx2LmxpbmVUbyhlLngsZS55KSx2LnN0cm9rZSgpKToodD10aGlzLl9jb252ZXJ0M0R0bzJEKG5ldyBsKHRoaXMueE1pbixpLmdldEN1cnJlbnQoKSx0aGlzLnpNaW4pKSxlPXRoaXMuX2NvbnZlcnQzRHRvMkQobmV3IGwodGhpcy54TWluK3ksaS5nZXRDdXJyZW50KCksdGhpcy56TWluKSksdi5zdHJva2VTdHlsZT10aGlzLmF4aXNDb2xvcix2LmJlZ2luUGF0aCgpLHYubW92ZVRvKHQueCx0LnkpLHYubGluZVRvKGUueCxlLnkpLHYuc3Ryb2tlKCksdD10aGlzLl9jb252ZXJ0M0R0bzJEKG5ldyBsKHRoaXMueE1heCxpLmdldEN1cnJlbnQoKSx0aGlzLnpNaW4pKSxlPXRoaXMuX2NvbnZlcnQzRHRvMkQobmV3IGwodGhpcy54TWF4LXksaS5nZXRDdXJyZW50KCksdGhpcy56TWluKSksdi5zdHJva2VTdHlsZT10aGlzLmF4aXNDb2xvcix2LmJlZ2luUGF0aCgpLHYubW92ZVRvKHQueCx0LnkpLHYubGluZVRvKGUueCxlLnkpLHYuc3Ryb2tlKCkpLHM9TWF0aC5zaW4odyk+MD90aGlzLnhNaW46dGhpcy54TWF4LG49dGhpcy5fY29udmVydDNEdG8yRChuZXcgbChzLGkuZ2V0Q3VycmVudCgpLHRoaXMuek1pbikpLE1hdGguY29zKDIqdyk8MD8odi50ZXh0QWxpZ249ImNlbnRlciIsdi50ZXh0QmFzZWxpbmU9InRvcCIsbi55Kz1iKTpNYXRoLnNpbigyKncpPjA/KHYudGV4dEFsaWduPSJyaWdodCIsdi50ZXh0QmFzZWxpbmU9Im1pZGRsZSIpOih2LnRleHRBbGlnbj0ibGVmdCIsdi50ZXh0QmFzZWxpbmU9Im1pZGRsZSIpLHYuZmlsbFN0eWxlPXRoaXMuYXhpc0NvbG9yLHYuZmlsbFRleHQoIiAgIit0aGlzLnlWYWx1ZUxhYmVsKGkuZ2V0Q3VycmVudCgpKSsiICAiLG4ueCxuLnkpLGkubmV4dCgpO2Zvcih2LmxpbmVXaWR0aD0xLG89dm9pZCAwPT09dGhpcy5kZWZhdWx0WlN0ZXAsaT1uZXcgbSh0aGlzLnpNaW4sdGhpcy56TWF4LHRoaXMuelN0ZXAsbyksaS5zdGFydCgpLGkuZ2V0Q3VycmVudCgpPHRoaXMuek1pbiYmaS5uZXh0KCkscz1NYXRoLmNvcyh3KT4wP3RoaXMueE1pbjp0aGlzLnhNYXgscj1NYXRoLnNpbih3KTwwP3RoaXMueU1pbjp0aGlzLnlNYXg7IWkuZW5kKCk7KXQ9dGhpcy5fY29udmVydDNEdG8yRChuZXcgbChzLHIsaS5nZXRDdXJyZW50KCkpKSx2LnN0cm9rZVN0eWxlPXRoaXMuYXhpc0NvbG9yLHYuYmVnaW5QYXRoKCksdi5tb3ZlVG8odC54LHQueSksdi5saW5lVG8odC54LWIsdC55KSx2LnN0cm9rZSgpLHYudGV4dEFsaWduPSJyaWdodCIsdi50ZXh0QmFzZWxpbmU9Im1pZGRsZSIsdi5maWxsU3R5bGU9dGhpcy5heGlzQ29sb3Isdi5maWxsVGV4dCh0aGlzLnpWYWx1ZUxhYmVsKGkuZ2V0Q3VycmVudCgpKSsiICIsdC54LTUsdC55KSxpLm5leHQoKTt2LmxpbmVXaWR0aD0xLHQ9dGhpcy5fY29udmVydDNEdG8yRChuZXcgbChzLHIsdGhpcy56TWluKSksZT10aGlzLl9jb252ZXJ0M0R0bzJEKG5ldyBsKHMscix0aGlzLnpNYXgpKSx2LnN0cm9rZVN0eWxlPXRoaXMuYXhpc0NvbG9yLHYuYmVnaW5QYXRoKCksdi5tb3ZlVG8odC54LHQueSksdi5saW5lVG8oZS54LGUueSksdi5zdHJva2UoKSx2LmxpbmVXaWR0aD0xLGM9dGhpcy5fY29udmVydDNEdG8yRChuZXcgbCh0aGlzLnhNaW4sdGhpcy55TWluLHRoaXMuek1pbikpLHA9dGhpcy5fY29udmVydDNEdG8yRChuZXcgbCh0aGlzLnhNYXgsdGhpcy55TWluLHRoaXMuek1pbikpLHYuc3Ryb2tlU3R5bGU9dGhpcy5heGlzQ29sb3Isdi5iZWdpblBhdGgoKSx2Lm1vdmVUbyhjLngsYy55KSx2LmxpbmVUbyhwLngscC55KSx2LnN0cm9rZSgpLGM9dGhpcy5fY29udmVydDNEdG8yRChuZXcgbCh0aGlzLnhNaW4sdGhpcy55TWF4LHRoaXMuek1pbikpLHA9dGhpcy5fY29udmVydDNEdG8yRChuZXcgbCh0aGlzLnhNYXgsdGhpcy55TWF4LHRoaXMuek1pbikpLHYuc3Ryb2tlU3R5bGU9dGhpcy5heGlzQ29sb3Isdi5iZWdpblBhdGgoKSx2Lm1vdmVUbyhjLngsYy55KSx2LmxpbmVUbyhwLngscC55KSx2LnN0cm9rZSgpLHYubGluZVdpZHRoPTEsdD10aGlzLl9jb252ZXJ0M0R0bzJEKG5ldyBsKHRoaXMueE1pbix0aGlzLnlNaW4sdGhpcy56TWluKSksZT10aGlzLl9jb252ZXJ0M0R0bzJEKG5ldyBsKHRoaXMueE1pbix0aGlzLnlNYXgsdGhpcy56TWluKSksdi5zdHJva2VTdHlsZT10aGlzLmF4aXNDb2xvcix2LmJlZ2luUGF0aCgpLHYubW92ZVRvKHQueCx0LnkpLHYubGluZVRvKGUueCxlLnkpLHYuc3Ryb2tlKCksdD10aGlzLl9jb252ZXJ0M0R0bzJEKG5ldyBsKHRoaXMueE1heCx0aGlzLnlNaW4sdGhpcy56TWluKSksZT10aGlzLl9jb252ZXJ0M0R0bzJEKG5ldyBsKHRoaXMueE1heCx0aGlzLnlNYXgsdGhpcy56TWluKSksdi5zdHJva2VTdHlsZT10aGlzLmF4aXNDb2xvcix2LmJlZ2luUGF0aCgpLHYubW92ZVRvKHQueCx0LnkpLHYubGluZVRvKGUueCxlLnkpLHYuc3Ryb2tlKCk7dmFyIHg9dGhpcy54TGFiZWw7eC5sZW5ndGg+MCYmKHU9LjEvdGhpcy5zY2FsZS55LHM9KHRoaXMueE1pbit0aGlzLnhNYXgpLzIscj1NYXRoLmNvcyh3KT4wP3RoaXMueU1pbi11OnRoaXMueU1heCt1LG49dGhpcy5fY29udmVydDNEdG8yRChuZXcgbChzLHIsdGhpcy56TWluKSksTWF0aC5jb3MoMip3KT4wPyh2LnRleHRBbGlnbj0iY2VudGVyIix2LnRleHRCYXNlbGluZT0idG9wIik6TWF0aC5zaW4oMip3KTwwPyh2LnRleHRBbGlnbj0icmlnaHQiLHYudGV4dEJhc2VsaW5lPSJtaWRkbGUiKToodi50ZXh0QWxpZ249ImxlZnQiLHYudGV4dEJhc2VsaW5lPSJtaWRkbGUiKSx2LmZpbGxTdHlsZT10aGlzLmF4aXNDb2xvcix2LmZpbGxUZXh0KHgsbi54LG4ueSkpO3ZhciBrPXRoaXMueUxhYmVsO2subGVuZ3RoPjAmJihkPS4xL3RoaXMuc2NhbGUueCxzPU1hdGguc2luKHcpPjA/dGhpcy54TWluLWQ6dGhpcy54TWF4K2Qscj0odGhpcy55TWluK3RoaXMueU1heCkvMixuPXRoaXMuX2NvbnZlcnQzRHRvMkQobmV3IGwocyxyLHRoaXMuek1pbikpLE1hdGguY29zKDIqdyk8MD8odi50ZXh0QWxpZ249ImNlbnRlciIsdi50ZXh0QmFzZWxpbmU9InRvcCIpOk1hdGguc2luKDIqdyk+MD8odi50ZXh0QWxpZ249InJpZ2h0Iix2LnRleHRCYXNlbGluZT0ibWlkZGxlIik6KHYudGV4dEFsaWduPSJsZWZ0Iix2LnRleHRCYXNlbGluZT0ibWlkZGxlIiksdi5maWxsU3R5bGU9dGhpcy5heGlzQ29sb3Isdi5maWxsVGV4dChrLG4ueCxuLnkpKTt2YXIgTz10aGlzLnpMYWJlbDtPLmxlbmd0aD4wJiYoaD0zMCxzPU1hdGguY29zKHcpPjA/dGhpcy54TWluOnRoaXMueE1heCxyPU1hdGguc2luKHcpPDA/dGhpcy55TWluOnRoaXMueU1heCxhPSh0aGlzLnpNaW4rdGhpcy56TWF4KS8yLG49dGhpcy5fY29udmVydDNEdG8yRChuZXcgbChzLHIsYSkpLHYudGV4dEFsaWduPSJyaWdodCIsdi50ZXh0QmFzZWxpbmU9Im1pZGRsZSIsdi5maWxsU3R5bGU9dGhpcy5heGlzQ29sb3Isdi5maWxsVGV4dChPLG4ueC1oLG4ueSkpfSxvLnByb3RvdHlwZS5faHN2MnJnYj1mdW5jdGlvbih0LGUsaSl7dmFyIG8sbixzLHIsYSxoO3N3aXRjaChyPWkqZSxhPU1hdGguZmxvb3IodC82MCksaD1yKigxLU1hdGguYWJzKHQvNjAlMi0xKSksYSl7Y2FzZSAwOm89cixuPWgscz0wO2JyZWFrO2Nhc2UgMTpvPWgsbj1yLHM9MDticmVhaztjYXNlIDI6bz0wLG49cixzPWg7YnJlYWs7Y2FzZSAzOm89MCxuPWgscz1yO2JyZWFrO2Nhc2UgNDpvPWgsbj0wLHM9cjticmVhaztjYXNlIDU6bz1yLG49MCxzPWg7YnJlYWs7ZGVmYXVsdDpvPTAsbj0wLHM9MH1yZXR1cm4iUkdCKCIrcGFyc2VJbnQoMjU1Km8pKyIsIitwYXJzZUludCgyNTUqbikrIiwiK3BhcnNlSW50KDI1NSpzKSsiKSJ9LG8ucHJvdG90eXBlLl9yZWRyYXdEYXRhR3JpZD1mdW5jdGlvbigpe3ZhciB0LGUsaSxuLHMscixhLGgsZCx1LGMscCxmPXRoaXMuZnJhbWUuY2FudmFzLG09Zi5nZXRDb250ZXh0KCIyZCIpO2lmKG0ubGluZUpvaW49InJvdW5kIixtLmxpbmVDYXA9InJvdW5kIiwhKHZvaWQgMD09PXRoaXMuZGF0YVBvaW50c3x8dGhpcy5kYXRhUG9pbnRzLmxlbmd0aDw9MCkpe2ZvcihzPTA7czx0aGlzLmRhdGFQb2ludHMubGVuZ3RoO3MrKyl7dmFyIHY9dGhpcy5fY29udmVydFBvaW50VG9UcmFuc2xhdGlvbih0aGlzLmRhdGFQb2ludHNbc10ucG9pbnQpLGc9dGhpcy5fY29udmVydFRyYW5zbGF0aW9uVG9TY3JlZW4odik7dGhpcy5kYXRhUG9pbnRzW3NdLnRyYW5zPXYsdGhpcy5kYXRhUG9pbnRzW3NdLnNjcmVlbj1nO3ZhciB5PXRoaXMuX2NvbnZlcnRQb2ludFRvVHJhbnNsYXRpb24odGhpcy5kYXRhUG9pbnRzW3NdLmJvdHRvbSk7dGhpcy5kYXRhUG9pbnRzW3NdLmRpc3Q9dGhpcy5zaG93UGVyc3BlY3RpdmU/eS5sZW5ndGgoKToteS56fXZhciBiPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIGUuZGlzdC10LmRpc3R9O2lmKHRoaXMuZGF0YVBvaW50cy5zb3J0KGIpLHRoaXMuc3R5bGU9PT1vLlNUWUxFLlNVUkZBQ0Upe2ZvcihzPTA7czx0aGlzLmRhdGFQb2ludHMubGVuZ3RoO3MrKylpZih0PXRoaXMuZGF0YVBvaW50c1tzXSxlPXRoaXMuZGF0YVBvaW50c1tzXS5wb2ludFJpZ2h0LGk9dGhpcy5kYXRhUG9pbnRzW3NdLnBvaW50VG9wLG49dGhpcy5kYXRhUG9pbnRzW3NdLnBvaW50Q3Jvc3Msdm9pZCAwIT09dCYmdm9pZCAwIT09ZSYmdm9pZCAwIT09aSYmdm9pZCAwIT09bil7aWYodGhpcy5zaG93R3JheUJvdHRvbXx8dGhpcy5zaG93U2hhZG93KXt2YXIgdz1sLnN1YnRyYWN0KG4udHJhbnMsdC50cmFucyksXz1sLnN1YnRyYWN0KGkudHJhbnMsZS50cmFucykseD1sLmNyb3NzUHJvZHVjdCh3LF8pLGs9eC5sZW5ndGgoKTtyPXguej4wfWVsc2Ugcj0hMDtyPyhwPSh0LnBvaW50LnorZS5wb2ludC56K2kucG9pbnQueituLnBvaW50LnopLzQsZD0yNDAqKDEtKHAtdGhpcy56TWluKSp0aGlzLnNjYWxlLnovdGhpcy52ZXJ0aWNhbFJhdGlvKSx1PTEsdGhpcy5zaG93U2hhZG93PyhjPU1hdGgubWluKDEreC54L2svMiwxKSxhPXRoaXMuX2hzdjJyZ2IoZCx1LGMpLGg9YSk6KGM9MSxhPXRoaXMuX2hzdjJyZ2IoZCx1LGMpLGg9dGhpcy5heGlzQ29sb3IpKTooYT0iZ3JheSIsaD10aGlzLmF4aXNDb2xvciksbS5saW5lV2lkdGg9dGhpcy5fZ2V0U3Ryb2tlV2lkdGgodCksbS5maWxsU3R5bGU9YSxtLnN0cm9rZVN0eWxlPWgsbS5iZWdpblBhdGgoKSxtLm1vdmVUbyh0LnNjcmVlbi54LHQuc2NyZWVuLnkpLG0ubGluZVRvKGUuc2NyZWVuLngsZS5zY3JlZW4ueSksbS5saW5lVG8obi5zY3JlZW4ueCxuLnNjcmVlbi55KSxtLmxpbmVUbyhpLnNjcmVlbi54LGkuc2NyZWVuLnkpLG0uY2xvc2VQYXRoKCksbS5maWxsKCksbS5zdHJva2UoKX19ZWxzZSBmb3Iocz0wO3M8dGhpcy5kYXRhUG9pbnRzLmxlbmd0aDtzKyspdD10aGlzLmRhdGFQb2ludHNbc10sZT10aGlzLmRhdGFQb2ludHNbc10ucG9pbnRSaWdodCxpPXRoaXMuZGF0YVBvaW50c1tzXS5wb2ludFRvcCx2b2lkIDAhPT10JiZ2b2lkIDAhPT1lJiYocD0odC5wb2ludC56K2UucG9pbnQueikvMixkPTI0MCooMS0ocC10aGlzLnpNaW4pKnRoaXMuc2NhbGUuei90aGlzLnZlcnRpY2FsUmF0aW8pLG0ubGluZVdpZHRoPTIqdGhpcy5fZ2V0U3Ryb2tlV2lkdGgodCksbS5zdHJva2VTdHlsZT10aGlzLl9oc3YycmdiKGQsMSwxKSxtLmJlZ2luUGF0aCgpLG0ubW92ZVRvKHQuc2NyZWVuLngsdC5zY3JlZW4ueSksbS5saW5lVG8oZS5zY3JlZW4ueCxlLnNjcmVlbi55KSxtLnN0cm9rZSgpKSx2b2lkIDAhPT10JiZ2b2lkIDAhPT1pJiYocD0odC5wb2ludC56K2kucG9pbnQueikvMixkPTI0MCooMS0ocC10aGlzLnpNaW4pKnRoaXMuc2NhbGUuei90aGlzLnZlcnRpY2FsUmF0aW8pLG0ubGluZVdpZHRoPTIqdGhpcy5fZ2V0U3Ryb2tlV2lkdGgodCksbS5zdHJva2VTdHlsZT10aGlzLl9oc3YycmdiKGQsMSwxKSxtLmJlZ2luUGF0aCgpLG0ubW92ZVRvKHQuc2NyZWVuLngsdC5zY3JlZW4ueSksbS5saW5lVG8oaS5zY3JlZW4ueCxpLnNjcmVlbi55KSxtLnN0cm9rZSgpKX19LG8ucHJvdG90eXBlLl9nZXRTdHJva2VXaWR0aD1mdW5jdGlvbih0KXtyZXR1cm4gdm9pZCAwIT09dD90aGlzLnNob3dQZXJzcGVjdGl2ZT8xLy10LnRyYW5zLnoqdGhpcy5kYXRhQ29sb3Iuc3Ryb2tlV2lkdGg6LSh0aGlzLmV5ZS56L3RoaXMuY2FtZXJhLmdldEFybUxlbmd0aCgpKSp0aGlzLmRhdGFDb2xvci5zdHJva2VXaWR0aDp0aGlzLmRhdGFDb2xvci5zdHJva2VXaWR0aH0sby5wcm90b3R5cGUuX3JlZHJhd0RhdGFEb3Q9ZnVuY3Rpb24oKXt2YXIgdCxlPXRoaXMuZnJhbWUuY2FudmFzLGk9ZS5nZXRDb250ZXh0KCIyZCIpO2lmKCEodm9pZCAwPT09dGhpcy5kYXRhUG9pbnRzfHx0aGlzLmRhdGFQb2ludHMubGVuZ3RoPD0wKSl7Zm9yKHQ9MDt0PHRoaXMuZGF0YVBvaW50cy5sZW5ndGg7dCsrKXt2YXIgbj10aGlzLl9jb252ZXJ0UG9pbnRUb1RyYW5zbGF0aW9uKHRoaXMuZGF0YVBvaW50c1t0XS5wb2ludCkscz10aGlzLl9jb252ZXJ0VHJhbnNsYXRpb25Ub1NjcmVlbihuKTt0aGlzLmRhdGFQb2ludHNbdF0udHJhbnM9bix0aGlzLmRhdGFQb2ludHNbdF0uc2NyZWVuPXM7dmFyIHI9dGhpcy5fY29udmVydFBvaW50VG9UcmFuc2xhdGlvbih0aGlzLmRhdGFQb2ludHNbdF0uYm90dG9tKTt0aGlzLmRhdGFQb2ludHNbdF0uZGlzdD10aGlzLnNob3dQZXJzcGVjdGl2ZT9yLmxlbmd0aCgpOi1yLnp9dmFyIGE9ZnVuY3Rpb24odCxlKXtyZXR1cm4gZS5kaXN0LXQuZGlzdH07dGhpcy5kYXRhUG9pbnRzLnNvcnQoYSk7dmFyIGg9LjAyKnRoaXMuZnJhbWUuY2xpZW50V2lkdGg7Zm9yKHQ9MDt0PHRoaXMuZGF0YVBvaW50cy5sZW5ndGg7dCsrKXt2YXIgZD10aGlzLmRhdGFQb2ludHNbdF07aWYodGhpcy5zdHlsZT09PW8uU1RZTEUuRE9UTElORSl7dmFyIGw9dGhpcy5fY29udmVydDNEdG8yRChkLmJvdHRvbSk7aS5saW5lV2lkdGg9MSxpLnN0cm9rZVN0eWxlPXRoaXMuZ3JpZENvbG9yLGkuYmVnaW5QYXRoKCksaS5tb3ZlVG8obC54LGwueSksaS5saW5lVG8oZC5zY3JlZW4ueCxkLnNjcmVlbi55KSxpLnN0cm9rZSgpfXZhciB1O3U9dGhpcy5zdHlsZT09PW8uU1RZTEUuRE9UU0laRT9oLzIrMipoKihkLnBvaW50LnZhbHVlLXRoaXMudmFsdWVNaW4pLyh0aGlzLnZhbHVlTWF4LXRoaXMudmFsdWVNaW4pOmg7dmFyIGM7Yz10aGlzLnNob3dQZXJzcGVjdGl2ZT91Ly1kLnRyYW5zLno6dSotKHRoaXMuZXllLnovdGhpcy5jYW1lcmEuZ2V0QXJtTGVuZ3RoKCkpLDA+YyYmKGM9MCk7dmFyIHAsZixtO3RoaXMuc3R5bGU9PT1vLlNUWUxFLkRPVENPTE9SPyhwPTI0MCooMS0oZC5wb2ludC52YWx1ZS10aGlzLnZhbHVlTWluKSp0aGlzLnNjYWxlLnZhbHVlKSwKZj10aGlzLl9oc3YycmdiKHAsMSwxKSxtPXRoaXMuX2hzdjJyZ2IocCwxLC44KSk6dGhpcy5zdHlsZT09PW8uU1RZTEUuRE9UU0laRT8oZj10aGlzLmRhdGFDb2xvci5maWxsLG09dGhpcy5kYXRhQ29sb3Iuc3Ryb2tlKToocD0yNDAqKDEtKGQucG9pbnQuei10aGlzLnpNaW4pKnRoaXMuc2NhbGUuei90aGlzLnZlcnRpY2FsUmF0aW8pLGY9dGhpcy5faHN2MnJnYihwLDEsMSksbT10aGlzLl9oc3YycmdiKHAsMSwuOCkpLGkubGluZVdpZHRoPXRoaXMuX2dldFN0cm9rZVdpZHRoKGQpLGkuc3Ryb2tlU3R5bGU9bSxpLmZpbGxTdHlsZT1mLGkuYmVnaW5QYXRoKCksaS5hcmMoZC5zY3JlZW4ueCxkLnNjcmVlbi55LGMsMCwyKk1hdGguUEksITApLGkuZmlsbCgpLGkuc3Ryb2tlKCl9fX0sby5wcm90b3R5cGUuX3JlZHJhd0RhdGFCYXI9ZnVuY3Rpb24oKXt2YXIgdCxlLGksbixzPXRoaXMuZnJhbWUuY2FudmFzLHI9cy5nZXRDb250ZXh0KCIyZCIpO2lmKCEodm9pZCAwPT09dGhpcy5kYXRhUG9pbnRzfHx0aGlzLmRhdGFQb2ludHMubGVuZ3RoPD0wKSl7Zm9yKHQ9MDt0PHRoaXMuZGF0YVBvaW50cy5sZW5ndGg7dCsrKXt2YXIgYT10aGlzLl9jb252ZXJ0UG9pbnRUb1RyYW5zbGF0aW9uKHRoaXMuZGF0YVBvaW50c1t0XS5wb2ludCksaD10aGlzLl9jb252ZXJ0VHJhbnNsYXRpb25Ub1NjcmVlbihhKTt0aGlzLmRhdGFQb2ludHNbdF0udHJhbnM9YSx0aGlzLmRhdGFQb2ludHNbdF0uc2NyZWVuPWg7dmFyIGQ9dGhpcy5fY29udmVydFBvaW50VG9UcmFuc2xhdGlvbih0aGlzLmRhdGFQb2ludHNbdF0uYm90dG9tKTt0aGlzLmRhdGFQb2ludHNbdF0uZGlzdD10aGlzLnNob3dQZXJzcGVjdGl2ZT9kLmxlbmd0aCgpOi1kLnp9dmFyIHU9ZnVuY3Rpb24odCxlKXtyZXR1cm4gZS5kaXN0LXQuZGlzdH07dGhpcy5kYXRhUG9pbnRzLnNvcnQodSksci5saW5lSm9pbj0icm91bmQiLHIubGluZUNhcD0icm91bmQiO3ZhciBjPXRoaXMueEJhcldpZHRoLzIscD10aGlzLnlCYXJXaWR0aC8yO2Zvcih0PTA7dDx0aGlzLmRhdGFQb2ludHMubGVuZ3RoO3QrKyl7dmFyIGYsbSx2LGc9dGhpcy5kYXRhUG9pbnRzW3RdO3RoaXMuc3R5bGU9PT1vLlNUWUxFLkJBUkNPTE9SPyhmPTI0MCooMS0oZy5wb2ludC52YWx1ZS10aGlzLnZhbHVlTWluKSp0aGlzLnNjYWxlLnZhbHVlKSxtPXRoaXMuX2hzdjJyZ2IoZiwxLDEpLHY9dGhpcy5faHN2MnJnYihmLDEsLjgpKTp0aGlzLnN0eWxlPT09by5TVFlMRS5CQVJTSVpFPyhtPXRoaXMuZGF0YUNvbG9yLmZpbGwsdj10aGlzLmRhdGFDb2xvci5zdHJva2UpOihmPTI0MCooMS0oZy5wb2ludC56LXRoaXMuek1pbikqdGhpcy5zY2FsZS56L3RoaXMudmVydGljYWxSYXRpbyksbT10aGlzLl9oc3YycmdiKGYsMSwxKSx2PXRoaXMuX2hzdjJyZ2IoZiwxLC44KSksdGhpcy5zdHlsZT09PW8uU1RZTEUuQkFSU0laRSYmKGM9dGhpcy54QmFyV2lkdGgvMiooKGcucG9pbnQudmFsdWUtdGhpcy52YWx1ZU1pbikvKHRoaXMudmFsdWVNYXgtdGhpcy52YWx1ZU1pbikqLjgrLjIpLHA9dGhpcy55QmFyV2lkdGgvMiooKGcucG9pbnQudmFsdWUtdGhpcy52YWx1ZU1pbikvKHRoaXMudmFsdWVNYXgtdGhpcy52YWx1ZU1pbikqLjgrLjIpKTt2YXIgeT10aGlzLGI9Zy5wb2ludCx3PVt7cG9pbnQ6bmV3IGwoYi54LWMsYi55LXAsYi56KX0se3BvaW50Om5ldyBsKGIueCtjLGIueS1wLGIueil9LHtwb2ludDpuZXcgbChiLngrYyxiLnkrcCxiLnopfSx7cG9pbnQ6bmV3IGwoYi54LWMsYi55K3AsYi56KX1dLF89W3twb2ludDpuZXcgbChiLngtYyxiLnktcCx0aGlzLnpNaW4pfSx7cG9pbnQ6bmV3IGwoYi54K2MsYi55LXAsdGhpcy56TWluKX0se3BvaW50Om5ldyBsKGIueCtjLGIueStwLHRoaXMuek1pbil9LHtwb2ludDpuZXcgbChiLngtYyxiLnkrcCx0aGlzLnpNaW4pfV07dy5mb3JFYWNoKGZ1bmN0aW9uKHQpe3Quc2NyZWVuPXkuX2NvbnZlcnQzRHRvMkQodC5wb2ludCl9KSxfLmZvckVhY2goZnVuY3Rpb24odCl7dC5zY3JlZW49eS5fY29udmVydDNEdG8yRCh0LnBvaW50KX0pO3ZhciB4PVt7Y29ybmVyczp3LGNlbnRlcjpsLmF2ZyhfWzBdLnBvaW50LF9bMl0ucG9pbnQpfSx7Y29ybmVyczpbd1swXSx3WzFdLF9bMV0sX1swXV0sY2VudGVyOmwuYXZnKF9bMV0ucG9pbnQsX1swXS5wb2ludCl9LHtjb3JuZXJzOlt3WzFdLHdbMl0sX1syXSxfWzFdXSxjZW50ZXI6bC5hdmcoX1syXS5wb2ludCxfWzFdLnBvaW50KX0se2Nvcm5lcnM6W3dbMl0sd1szXSxfWzNdLF9bMl1dLGNlbnRlcjpsLmF2ZyhfWzNdLnBvaW50LF9bMl0ucG9pbnQpfSx7Y29ybmVyczpbd1szXSx3WzBdLF9bMF0sX1szXV0sY2VudGVyOmwuYXZnKF9bMF0ucG9pbnQsX1szXS5wb2ludCl9XTtmb3IoZy5zdXJmYWNlcz14LGU9MDtlPHgubGVuZ3RoO2UrKyl7aT14W2VdO3ZhciBrPXRoaXMuX2NvbnZlcnRQb2ludFRvVHJhbnNsYXRpb24oaS5jZW50ZXIpO2kuZGlzdD10aGlzLnNob3dQZXJzcGVjdGl2ZT9rLmxlbmd0aCgpOi1rLnp9Zm9yKHguc29ydChmdW5jdGlvbih0LGUpe3ZhciBpPWUuZGlzdC10LmRpc3Q7cmV0dXJuIGk/aTp0LmNvcm5lcnM9PT13PzE6ZS5jb3JuZXJzPT09dz8tMTowfSksci5saW5lV2lkdGg9dGhpcy5fZ2V0U3Ryb2tlV2lkdGgoZyksci5zdHJva2VTdHlsZT12LHIuZmlsbFN0eWxlPW0sZT0yO2U8eC5sZW5ndGg7ZSsrKWk9eFtlXSxuPWkuY29ybmVycyxyLmJlZ2luUGF0aCgpLHIubW92ZVRvKG5bM10uc2NyZWVuLngsblszXS5zY3JlZW4ueSksci5saW5lVG8oblswXS5zY3JlZW4ueCxuWzBdLnNjcmVlbi55KSxyLmxpbmVUbyhuWzFdLnNjcmVlbi54LG5bMV0uc2NyZWVuLnkpLHIubGluZVRvKG5bMl0uc2NyZWVuLngsblsyXS5zY3JlZW4ueSksci5saW5lVG8oblszXS5zY3JlZW4ueCxuWzNdLnNjcmVlbi55KSxyLmZpbGwoKSxyLnN0cm9rZSgpfX19LG8ucHJvdG90eXBlLl9yZWRyYXdEYXRhTGluZT1mdW5jdGlvbigpe3ZhciB0LGUsaT10aGlzLmZyYW1lLmNhbnZhcyxvPWkuZ2V0Q29udGV4dCgiMmQiKTtpZighKHZvaWQgMD09PXRoaXMuZGF0YVBvaW50c3x8dGhpcy5kYXRhUG9pbnRzLmxlbmd0aDw9MCkpe2ZvcihlPTA7ZTx0aGlzLmRhdGFQb2ludHMubGVuZ3RoO2UrKyl7dmFyIG49dGhpcy5fY29udmVydFBvaW50VG9UcmFuc2xhdGlvbih0aGlzLmRhdGFQb2ludHNbZV0ucG9pbnQpLHM9dGhpcy5fY29udmVydFRyYW5zbGF0aW9uVG9TY3JlZW4obik7dGhpcy5kYXRhUG9pbnRzW2VdLnRyYW5zPW4sdGhpcy5kYXRhUG9pbnRzW2VdLnNjcmVlbj1zfWlmKHRoaXMuZGF0YVBvaW50cy5sZW5ndGg+MCl7Zm9yKHQ9dGhpcy5kYXRhUG9pbnRzWzBdLG8ubGluZVdpZHRoPXRoaXMuX2dldFN0cm9rZVdpZHRoKHQpLG8ubGluZUpvaW49InJvdW5kIixvLmxpbmVDYXA9InJvdW5kIixvLnN0cm9rZVN0eWxlPXRoaXMuZGF0YUNvbG9yLnN0cm9rZSxvLmJlZ2luUGF0aCgpLG8ubW92ZVRvKHQuc2NyZWVuLngsdC5zY3JlZW4ueSksZT0xO2U8dGhpcy5kYXRhUG9pbnRzLmxlbmd0aDtlKyspdD10aGlzLmRhdGFQb2ludHNbZV0sby5saW5lVG8odC5zY3JlZW4ueCx0LnNjcmVlbi55KTtvLnN0cm9rZSgpfX19LG8ucHJvdG90eXBlLl9vbk1vdXNlRG93bj1mdW5jdGlvbih0KXtpZih0PXR8fHdpbmRvdy5ldmVudCx0aGlzLmxlZnRCdXR0b25Eb3duJiZ0aGlzLl9vbk1vdXNlVXAodCksdGhpcy5sZWZ0QnV0dG9uRG93bj10LndoaWNoPzE9PT10LndoaWNoOjE9PT10LmJ1dHRvbix0aGlzLmxlZnRCdXR0b25Eb3dufHx0aGlzLnRvdWNoRG93bil7dGhpcy5zdGFydE1vdXNlWD1uKHQpLHRoaXMuc3RhcnRNb3VzZVk9cyh0KSx0aGlzLnN0YXJ0U3RhcnQ9bmV3IERhdGUodGhpcy5zdGFydCksdGhpcy5zdGFydEVuZD1uZXcgRGF0ZSh0aGlzLmVuZCksdGhpcy5zdGFydEFybVJvdGF0aW9uPXRoaXMuY2FtZXJhLmdldEFybVJvdGF0aW9uKCksdGhpcy5mcmFtZS5zdHlsZS5jdXJzb3I9Im1vdmUiO3ZhciBlPXRoaXM7dGhpcy5vbm1vdXNlbW92ZT1mdW5jdGlvbih0KXtlLl9vbk1vdXNlTW92ZSh0KX0sdGhpcy5vbm1vdXNldXA9ZnVuY3Rpb24odCl7ZS5fb25Nb3VzZVVwKHQpfSxkLmFkZEV2ZW50TGlzdGVuZXIoZG9jdW1lbnQsIm1vdXNlbW92ZSIsZS5vbm1vdXNlbW92ZSksZC5hZGRFdmVudExpc3RlbmVyKGRvY3VtZW50LCJtb3VzZXVwIixlLm9ubW91c2V1cCksZC5wcmV2ZW50RGVmYXVsdCh0KX19LG8ucHJvdG90eXBlLl9vbk1vdXNlTW92ZT1mdW5jdGlvbih0KXt0PXR8fHdpbmRvdy5ldmVudDt2YXIgZT1wYXJzZUZsb2F0KG4odCkpLXRoaXMuc3RhcnRNb3VzZVgsaT1wYXJzZUZsb2F0KHModCkpLXRoaXMuc3RhcnRNb3VzZVksbz10aGlzLnN0YXJ0QXJtUm90YXRpb24uaG9yaXpvbnRhbCtlLzIwMCxyPXRoaXMuc3RhcnRBcm1Sb3RhdGlvbi52ZXJ0aWNhbCtpLzIwMCxhPTQsaD1NYXRoLnNpbihhLzM2MCoyKk1hdGguUEkpO01hdGguYWJzKE1hdGguc2luKG8pKTxoJiYobz1NYXRoLnJvdW5kKG8vTWF0aC5QSSkqTWF0aC5QSS0uMDAxKSxNYXRoLmFicyhNYXRoLmNvcyhvKSk8aCYmKG89KE1hdGgucm91bmQoby9NYXRoLlBJLS41KSsuNSkqTWF0aC5QSS0uMDAxKSxNYXRoLmFicyhNYXRoLnNpbihyKSk8aCYmKHI9TWF0aC5yb3VuZChyL01hdGguUEkpKk1hdGguUEkpLE1hdGguYWJzKE1hdGguY29zKHIpKTxoJiYocj0oTWF0aC5yb3VuZChyL01hdGguUEktLjUpKy41KSpNYXRoLlBJKSx0aGlzLmNhbWVyYS5zZXRBcm1Sb3RhdGlvbihvLHIpLHRoaXMucmVkcmF3KCk7dmFyIGw9dGhpcy5nZXRDYW1lcmFQb3NpdGlvbigpO3RoaXMuZW1pdCgiY2FtZXJhUG9zaXRpb25DaGFuZ2UiLGwpLGQucHJldmVudERlZmF1bHQodCl9LG8ucHJvdG90eXBlLl9vbk1vdXNlVXA9ZnVuY3Rpb24odCl7dGhpcy5mcmFtZS5zdHlsZS5jdXJzb3I9ImF1dG8iLHRoaXMubGVmdEJ1dHRvbkRvd249ITEsZC5yZW1vdmVFdmVudExpc3RlbmVyKGRvY3VtZW50LCJtb3VzZW1vdmUiLHRoaXMub25tb3VzZW1vdmUpLGQucmVtb3ZlRXZlbnRMaXN0ZW5lcihkb2N1bWVudCwibW91c2V1cCIsdGhpcy5vbm1vdXNldXApLGQucHJldmVudERlZmF1bHQodCl9LG8ucHJvdG90eXBlLl9vblRvb2x0aXA9ZnVuY3Rpb24odCl7dmFyIGU9MzAwLGk9dGhpcy5mcmFtZS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKSxvPW4odCktaS5sZWZ0LHI9cyh0KS1pLnRvcDtpZih0aGlzLnNob3dUb29sdGlwKXtpZih0aGlzLnRvb2x0aXBUaW1lb3V0JiZjbGVhclRpbWVvdXQodGhpcy50b29sdGlwVGltZW91dCksdGhpcy5sZWZ0QnV0dG9uRG93bilyZXR1cm4gdm9pZCB0aGlzLl9oaWRlVG9vbHRpcCgpO2lmKHRoaXMudG9vbHRpcCYmdGhpcy50b29sdGlwLmRhdGFQb2ludCl7dmFyIGE9dGhpcy5fZGF0YVBvaW50RnJvbVhZKG8scik7YSE9PXRoaXMudG9vbHRpcC5kYXRhUG9pbnQmJihhP3RoaXMuX3Nob3dUb29sdGlwKGEpOnRoaXMuX2hpZGVUb29sdGlwKCkpfWVsc2V7dmFyIGg9dGhpczt0aGlzLnRvb2x0aXBUaW1lb3V0PXNldFRpbWVvdXQoZnVuY3Rpb24oKXtoLnRvb2x0aXBUaW1lb3V0PW51bGw7dmFyIHQ9aC5fZGF0YVBvaW50RnJvbVhZKG8scik7dCYmaC5fc2hvd1Rvb2x0aXAodCl9LGUpfX19LG8ucHJvdG90eXBlLl9vblRvdWNoU3RhcnQ9ZnVuY3Rpb24odCl7dGhpcy50b3VjaERvd249ITA7dmFyIGU9dGhpczt0aGlzLm9udG91Y2htb3ZlPWZ1bmN0aW9uKHQpe2UuX29uVG91Y2hNb3ZlKHQpfSx0aGlzLm9udG91Y2hlbmQ9ZnVuY3Rpb24odCl7ZS5fb25Ub3VjaEVuZCh0KX0sZC5hZGRFdmVudExpc3RlbmVyKGRvY3VtZW50LCJ0b3VjaG1vdmUiLGUub250b3VjaG1vdmUpLGQuYWRkRXZlbnRMaXN0ZW5lcihkb2N1bWVudCwidG91Y2hlbmQiLGUub250b3VjaGVuZCksdGhpcy5fb25Nb3VzZURvd24odCl9LG8ucHJvdG90eXBlLl9vblRvdWNoTW92ZT1mdW5jdGlvbih0KXt0aGlzLl9vbk1vdXNlTW92ZSh0KX0sby5wcm90b3R5cGUuX29uVG91Y2hFbmQ9ZnVuY3Rpb24odCl7dGhpcy50b3VjaERvd249ITEsZC5yZW1vdmVFdmVudExpc3RlbmVyKGRvY3VtZW50LCJ0b3VjaG1vdmUiLHRoaXMub250b3VjaG1vdmUpLGQucmVtb3ZlRXZlbnRMaXN0ZW5lcihkb2N1bWVudCwidG91Y2hlbmQiLHRoaXMub250b3VjaGVuZCksdGhpcy5fb25Nb3VzZVVwKHQpfSxvLnByb3RvdHlwZS5fb25XaGVlbD1mdW5jdGlvbih0KXt0fHwodD13aW5kb3cuZXZlbnQpO3ZhciBlPTA7aWYodC53aGVlbERlbHRhP2U9dC53aGVlbERlbHRhLzEyMDp0LmRldGFpbCYmKGU9LXQuZGV0YWlsLzMpLGUpe3ZhciBpPXRoaXMuY2FtZXJhLmdldEFybUxlbmd0aCgpLG89aSooMS1lLzEwKTt0aGlzLmNhbWVyYS5zZXRBcm1MZW5ndGgobyksdGhpcy5yZWRyYXcoKSx0aGlzLl9oaWRlVG9vbHRpcCgpfXZhciBuPXRoaXMuZ2V0Q2FtZXJhUG9zaXRpb24oKTt0aGlzLmVtaXQoImNhbWVyYVBvc2l0aW9uQ2hhbmdlIixuKSxkLnByZXZlbnREZWZhdWx0KHQpfSxvLnByb3RvdHlwZS5faW5zaWRlVHJpYW5nbGU9ZnVuY3Rpb24odCxlKXtmdW5jdGlvbiBpKHQpe3JldHVybiB0PjA/MTowPnQ/LTE6MH12YXIgbz1lWzBdLG49ZVsxXSxzPWVbMl0scj1pKChuLngtby54KSoodC55LW8ueSktKG4ueS1vLnkpKih0Lngtby54KSksYT1pKChzLngtbi54KSoodC55LW4ueSktKHMueS1uLnkpKih0Lngtbi54KSksaD1pKChvLngtcy54KSoodC55LXMueSktKG8ueS1zLnkpKih0Lngtcy54KSk7cmV0dXJuISgwIT1yJiYwIT1hJiZyIT1hfHwwIT1hJiYwIT1oJiZhIT1ofHwwIT1yJiYwIT1oJiZyIT1oKX0sby5wcm90b3R5cGUuX2RhdGFQb2ludEZyb21YWT1mdW5jdGlvbih0LGUpe3ZhciBpLG49MTAwLHM9bnVsbCxyPW51bGwsYT1udWxsLGg9bmV3IHUodCxlKTtpZih0aGlzLnN0eWxlPT09by5TVFlMRS5CQVJ8fHRoaXMuc3R5bGU9PT1vLlNUWUxFLkJBUkNPTE9SfHx0aGlzLnN0eWxlPT09by5TVFlMRS5CQVJTSVpFKWZvcihpPXRoaXMuZGF0YVBvaW50cy5sZW5ndGgtMTtpPj0wO2ktLSl7cz10aGlzLmRhdGFQb2ludHNbaV07dmFyIGQ9cy5zdXJmYWNlcztpZihkKWZvcih2YXIgbD1kLmxlbmd0aC0xO2w+PTA7bC0tKXt2YXIgYz1kW2xdLHA9Yy5jb3JuZXJzLGY9W3BbMF0uc2NyZWVuLHBbMV0uc2NyZWVuLHBbMl0uc2NyZWVuXSxtPVtwWzJdLnNjcmVlbixwWzNdLnNjcmVlbixwWzBdLnNjcmVlbl07aWYodGhpcy5faW5zaWRlVHJpYW5nbGUoaCxmKXx8dGhpcy5faW5zaWRlVHJpYW5nbGUoaCxtKSlyZXR1cm4gc319ZWxzZSBmb3IoaT0wO2k8dGhpcy5kYXRhUG9pbnRzLmxlbmd0aDtpKyspe3M9dGhpcy5kYXRhUG9pbnRzW2ldO3ZhciB2PXMuc2NyZWVuO2lmKHYpe3ZhciBnPU1hdGguYWJzKHQtdi54KSx5PU1hdGguYWJzKGUtdi55KSxiPU1hdGguc3FydChnKmcreSp5KTsobnVsbD09PWF8fGE+YikmJm4+YiYmKGE9YixyPXMpfX1yZXR1cm4gcn0sby5wcm90b3R5cGUuX3Nob3dUb29sdGlwPWZ1bmN0aW9uKHQpe3ZhciBlLGksbzt0aGlzLnRvb2x0aXA/KGU9dGhpcy50b29sdGlwLmRvbS5jb250ZW50LGk9dGhpcy50b29sdGlwLmRvbS5saW5lLG89dGhpcy50b29sdGlwLmRvbS5kb3QpOihlPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpLGUuc3R5bGUucG9zaXRpb249ImFic29sdXRlIixlLnN0eWxlLnBhZGRpbmc9IjEwcHgiLGUuc3R5bGUuYm9yZGVyPSIxcHggc29saWQgIzRkNGQ0ZCIsZS5zdHlsZS5jb2xvcj0iIzFhMWExYSIsZS5zdHlsZS5iYWNrZ3JvdW5kPSJyZ2JhKDI1NSwyNTUsMjU1LDAuNykiLGUuc3R5bGUuYm9yZGVyUmFkaXVzPSIycHgiLGUuc3R5bGUuYm94U2hhZG93PSI1cHggNXB4IDEwcHggcmdiYSgxMjgsMTI4LDEyOCwwLjUpIixpPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpLGkuc3R5bGUucG9zaXRpb249ImFic29sdXRlIixpLnN0eWxlLmhlaWdodD0iNDBweCIsaS5zdHlsZS53aWR0aD0iMCIsaS5zdHlsZS5ib3JkZXJMZWZ0PSIxcHggc29saWQgIzRkNGQ0ZCIsbz1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKSxvLnN0eWxlLnBvc2l0aW9uPSJhYnNvbHV0ZSIsby5zdHlsZS5oZWlnaHQ9IjAiLG8uc3R5bGUud2lkdGg9IjAiLG8uc3R5bGUuYm9yZGVyPSI1cHggc29saWQgIzRkNGQ0ZCIsby5zdHlsZS5ib3JkZXJSYWRpdXM9IjVweCIsdGhpcy50b29sdGlwPXtkYXRhUG9pbnQ6bnVsbCxkb206e2NvbnRlbnQ6ZSxsaW5lOmksZG90Om99fSksdGhpcy5faGlkZVRvb2x0aXAoKSx0aGlzLnRvb2x0aXAuZGF0YVBvaW50PXQsImZ1bmN0aW9uIj09dHlwZW9mIHRoaXMuc2hvd1Rvb2x0aXA/ZS5pbm5lckhUTUw9dGhpcy5zaG93VG9vbHRpcCh0LnBvaW50KTplLmlubmVySFRNTD0iPHRhYmxlPjx0cj48dGQ+eDo8L3RkPjx0ZD4iK3QucG9pbnQueCsiPC90ZD48L3RyPjx0cj48dGQ+eTo8L3RkPjx0ZD4iK3QucG9pbnQueSsiPC90ZD48L3RyPjx0cj48dGQ+ejo8L3RkPjx0ZD4iK3QucG9pbnQueisiPC90ZD48L3RyPjwvdGFibGU+IixlLnN0eWxlLmxlZnQ9IjAiLGUuc3R5bGUudG9wPSIwIix0aGlzLmZyYW1lLmFwcGVuZENoaWxkKGUpLHRoaXMuZnJhbWUuYXBwZW5kQ2hpbGQoaSksdGhpcy5mcmFtZS5hcHBlbmRDaGlsZChvKTt2YXIgbj1lLm9mZnNldFdpZHRoLHM9ZS5vZmZzZXRIZWlnaHQscj1pLm9mZnNldEhlaWdodCxhPW8ub2Zmc2V0V2lkdGgsaD1vLm9mZnNldEhlaWdodCxkPXQuc2NyZWVuLngtbi8yO2Q9TWF0aC5taW4oTWF0aC5tYXgoZCwxMCksdGhpcy5mcmFtZS5jbGllbnRXaWR0aC0xMC1uKSxpLnN0eWxlLmxlZnQ9dC5zY3JlZW4ueCsicHgiLGkuc3R5bGUudG9wPXQuc2NyZWVuLnktcisicHgiLGUuc3R5bGUubGVmdD1kKyJweCIsZS5zdHlsZS50b3A9dC5zY3JlZW4ueS1yLXMrInB4IixvLnN0eWxlLmxlZnQ9dC5zY3JlZW4ueC1hLzIrInB4IixvLnN0eWxlLnRvcD10LnNjcmVlbi55LWgvMisicHgifSxvLnByb3RvdHlwZS5faGlkZVRvb2x0aXA9ZnVuY3Rpb24oKXtpZih0aGlzLnRvb2x0aXApe3RoaXMudG9vbHRpcC5kYXRhUG9pbnQ9bnVsbDtmb3IodmFyIHQgaW4gdGhpcy50b29sdGlwLmRvbSlpZih0aGlzLnRvb2x0aXAuZG9tLmhhc093blByb3BlcnR5KHQpKXt2YXIgZT10aGlzLnRvb2x0aXAuZG9tW3RdO2UmJmUucGFyZW50Tm9kZSYmZS5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKGUpfX19LHQuZXhwb3J0cz1vfSxmdW5jdGlvbih0LGUpe2Z1bmN0aW9uIGkodCl7cmV0dXJuIHQ/byh0KTp2b2lkIDB9ZnVuY3Rpb24gbyh0KXtmb3IodmFyIGUgaW4gaS5wcm90b3R5cGUpdFtlXT1pLnByb3RvdHlwZVtlXTtyZXR1cm4gdH10LmV4cG9ydHM9aSxpLnByb3RvdHlwZS5vbj1pLnByb3RvdHlwZS5hZGRFdmVudExpc3RlbmVyPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHRoaXMuX2NhbGxiYWNrcz10aGlzLl9jYWxsYmFja3N8fHt9LCh0aGlzLl9jYWxsYmFja3NbdF09dGhpcy5fY2FsbGJhY2tzW3RdfHxbXSkucHVzaChlKSx0aGlzfSxpLnByb3RvdHlwZS5vbmNlPWZ1bmN0aW9uKHQsZSl7ZnVuY3Rpb24gaSgpe28ub2ZmKHQsaSksZS5hcHBseSh0aGlzLGFyZ3VtZW50cyl9dmFyIG89dGhpcztyZXR1cm4gdGhpcy5fY2FsbGJhY2tzPXRoaXMuX2NhbGxiYWNrc3x8e30saS5mbj1lLHRoaXMub24odCxpKSx0aGlzfSxpLnByb3RvdHlwZS5vZmY9aS5wcm90b3R5cGUucmVtb3ZlTGlzdGVuZXI9aS5wcm90b3R5cGUucmVtb3ZlQWxsTGlzdGVuZXJzPWkucHJvdG90eXBlLnJlbW92ZUV2ZW50TGlzdGVuZXI9ZnVuY3Rpb24odCxlKXtpZih0aGlzLl9jYWxsYmFja3M9dGhpcy5fY2FsbGJhY2tzfHx7fSwwPT1hcmd1bWVudHMubGVuZ3RoKXJldHVybiB0aGlzLl9jYWxsYmFja3M9e30sdGhpczt2YXIgaT10aGlzLl9jYWxsYmFja3NbdF07aWYoIWkpcmV0dXJuIHRoaXM7aWYoMT09YXJndW1lbnRzLmxlbmd0aClyZXR1cm4gZGVsZXRlIHRoaXMuX2NhbGxiYWNrc1t0XSx0aGlzO2Zvcih2YXIgbyxuPTA7bjxpLmxlbmd0aDtuKyspaWYobz1pW25dLG89PT1lfHxvLmZuPT09ZSl7aS5zcGxpY2UobiwxKTticmVha31yZXR1cm4gdGhpc30saS5wcm90b3R5cGUuZW1pdD1mdW5jdGlvbih0KXt0aGlzLl9jYWxsYmFja3M9dGhpcy5fY2FsbGJhY2tzfHx7fTt2YXIgZT1bXS5zbGljZS5jYWxsKGFyZ3VtZW50cywxKSxpPXRoaXMuX2NhbGxiYWNrc1t0XTtpZihpKXtpPWkuc2xpY2UoMCk7Zm9yKHZhciBvPTAsbj1pLmxlbmd0aDtuPm87KytvKWlbb10uYXBwbHkodGhpcyxlKX1yZXR1cm4gdGhpc30saS5wcm90b3R5cGUubGlzdGVuZXJzPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLl9jYWxsYmFja3M9dGhpcy5fY2FsbGJhY2tzfHx7fSx0aGlzLl9jYWxsYmFja3NbdF18fFtdfSxpLnByb3RvdHlwZS5oYXNMaXN0ZW5lcnM9ZnVuY3Rpb24odCl7cmV0dXJuISF0aGlzLmxpc3RlbmVycyh0KS5sZW5ndGh9fSxmdW5jdGlvbih0LGUpe2Z1bmN0aW9uIGkodCxlLGkpe3RoaXMueD12b2lkIDAhPT10P3Q6MCx0aGlzLnk9dm9pZCAwIT09ZT9lOjAsdGhpcy56PXZvaWQgMCE9PWk/aTowfWkuc3VidHJhY3Q9ZnVuY3Rpb24odCxlKXt2YXIgbz1uZXcgaTtyZXR1cm4gby54PXQueC1lLngsby55PXQueS1lLnksby56PXQuei1lLnosb30saS5hZGQ9ZnVuY3Rpb24odCxlKXt2YXIgbz1uZXcgaTtyZXR1cm4gby54PXQueCtlLngsby55PXQueStlLnksby56PXQueitlLnosb30saS5hdmc9ZnVuY3Rpb24odCxlKXtyZXR1cm4gbmV3IGkoKHQueCtlLngpLzIsKHQueStlLnkpLzIsKHQueitlLnopLzIpfSxpLmNyb3NzUHJvZHVjdD1mdW5jdGlvbih0LGUpe3ZhciBvPW5ldyBpO3JldHVybiBvLng9dC55KmUuei10LnoqZS55LG8ueT10LnoqZS54LXQueCplLnosby56PXQueCplLnktdC55KmUueCxvfSxpLnByb3RvdHlwZS5sZW5ndGg9ZnVuY3Rpb24oKXtyZXR1cm4gTWF0aC5zcXJ0KHRoaXMueCp0aGlzLngrdGhpcy55KnRoaXMueSt0aGlzLnoqdGhpcy56KX0sdC5leHBvcnRzPWl9LGZ1bmN0aW9uKHQsZSl7ZnVuY3Rpb24gaSh0LGUpe3RoaXMueD12b2lkIDAhPT10P3Q6MCx0aGlzLnk9dm9pZCAwIT09ZT9lOjB9dC5leHBvcnRzPWl9LGZ1bmN0aW9uKHQsZSxpKXtmdW5jdGlvbiBvKCl7dGhpcy5hcm1Mb2NhdGlvbj1uZXcgbix0aGlzLmFybVJvdGF0aW9uPXt9LHRoaXMuYXJtUm90YXRpb24uaG9yaXpvbnRhbD0wLHRoaXMuYXJtUm90YXRpb24udmVydGljYWw9MCx0aGlzLmFybUxlbmd0aD0xLjcsdGhpcy5jYW1lcmFMb2NhdGlvbj1uZXcgbix0aGlzLmNhbWVyYVJvdGF0aW9uPW5ldyBuKC41Kk1hdGguUEksMCwwKSx0aGlzLmNhbGN1bGF0ZUNhbWVyYU9yaWVudGF0aW9uKCl9dmFyIG49aSgxMyk7by5wcm90b3R5cGUuc2V0QXJtTG9jYXRpb249ZnVuY3Rpb24odCxlLGkpe3RoaXMuYXJtTG9jYXRpb24ueD10LHRoaXMuYXJtTG9jYXRpb24ueT1lLHRoaXMuYXJtTG9jYXRpb24uej1pLHRoaXMuY2FsY3VsYXRlQ2FtZXJhT3JpZW50YXRpb24oKX0sby5wcm90b3R5cGUuc2V0QXJtUm90YXRpb249ZnVuY3Rpb24odCxlKXt2b2lkIDAhPT10JiYodGhpcy5hcm1Sb3RhdGlvbi5ob3Jpem9udGFsPXQpLHZvaWQgMCE9PWUmJih0aGlzLmFybVJvdGF0aW9uLnZlcnRpY2FsPWUsdGhpcy5hcm1Sb3RhdGlvbi52ZXJ0aWNhbDwwJiYodGhpcy5hcm1Sb3RhdGlvbi52ZXJ0aWNhbD0wKSx0aGlzLmFybVJvdGF0aW9uLnZlcnRpY2FsPi41Kk1hdGguUEkmJih0aGlzLmFybVJvdGF0aW9uLnZlcnRpY2FsPS41Kk1hdGguUEkpKSwodm9pZCAwIT09dHx8dm9pZCAwIT09ZSkmJnRoaXMuY2FsY3VsYXRlQ2FtZXJhT3JpZW50YXRpb24oKX0sby5wcm90b3R5cGUuZ2V0QXJtUm90YXRpb249ZnVuY3Rpb24oKXt2YXIgdD17fTtyZXR1cm4gdC5ob3Jpem9udGFsPXRoaXMuYXJtUm90YXRpb24uaG9yaXpvbnRhbCx0LnZlcnRpY2FsPXRoaXMuYXJtUm90YXRpb24udmVydGljYWwsdH0sby5wcm90b3R5cGUuc2V0QXJtTGVuZ3RoPWZ1bmN0aW9uKHQpe3ZvaWQgMCE9PXQmJih0aGlzLmFybUxlbmd0aD10LHRoaXMuYXJtTGVuZ3RoPC43MSYmKHRoaXMuYXJtTGVuZ3RoPS43MSksdGhpcy5hcm1MZW5ndGg+NSYmKHRoaXMuYXJtTGVuZ3RoPTUpLHRoaXMuY2FsY3VsYXRlQ2FtZXJhT3JpZW50YXRpb24oKSl9LG8ucHJvdG90eXBlLmdldEFybUxlbmd0aD1mdW5jdGlvbigpe3JldHVybiB0aGlzLmFybUxlbmd0aH0sby5wcm90b3R5cGUuZ2V0Q2FtZXJhTG9jYXRpb249ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5jYW1lcmFMb2NhdGlvbn0sby5wcm90b3R5cGUuZ2V0Q2FtZXJhUm90YXRpb249ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5jYW1lcmFSb3RhdGlvbn0sby5wcm90b3R5cGUuY2FsY3VsYXRlQ2FtZXJhT3JpZW50YXRpb249ZnVuY3Rpb24oKXt0aGlzLmNhbWVyYUxvY2F0aW9uLng9dGhpcy5hcm1Mb2NhdGlvbi54LXRoaXMuYXJtTGVuZ3RoKk1hdGguc2luKHRoaXMuYXJtUm90YXRpb24uaG9yaXpvbnRhbCkqTWF0aC5jb3ModGhpcy5hcm1Sb3RhdGlvbi52ZXJ0aWNhbCksdGhpcy5jYW1lcmFMb2NhdGlvbi55PXRoaXMuYXJtTG9jYXRpb24ueS10aGlzLmFybUxlbmd0aCpNYXRoLmNvcyh0aGlzLmFybVJvdGF0aW9uLmhvcml6b250YWwpKk1hdGguY29zKHRoaXMuYXJtUm90YXRpb24udmVydGljYWwpLHRoaXMuY2FtZXJhTG9jYXRpb24uej10aGlzLmFybUxvY2F0aW9uLnordGhpcy5hcm1MZW5ndGgqTWF0aC5zaW4odGhpcy5hcm1Sb3RhdGlvbi52ZXJ0aWNhbCksdGhpcy5jYW1lcmFSb3RhdGlvbi54PU1hdGguUEkvMi10aGlzLmFybVJvdGF0aW9uLnZlcnRpY2FsLHRoaXMuY2FtZXJhUm90YXRpb24ueT0wLHRoaXMuY2FtZXJhUm90YXRpb24uej0tdGhpcy5hcm1Sb3RhdGlvbi5ob3Jpem9udGFsfSx0LmV4cG9ydHM9b30sZnVuY3Rpb24odCxlLGkpe2Z1bmN0aW9uIG8odCxlLGkpe3RoaXMuZGF0YT10LHRoaXMuY29sdW1uPWUsdGhpcy5ncmFwaD1pLHRoaXMuaW5kZXg9dm9pZCAwLHRoaXMudmFsdWU9dm9pZCAwLHRoaXMudmFsdWVzPWkuZ2V0RGlzdGluY3RWYWx1ZXModC5nZXQoKSx0aGlzLmNvbHVtbiksdGhpcy52YWx1ZXMuc29ydChmdW5jdGlvbih0LGUpe3JldHVybiB0PmU/MTplPnQ/LTE6MH0pLHRoaXMudmFsdWVzLmxlbmd0aD4wJiZ0aGlzLnNlbGVjdFZhbHVlKDApLHRoaXMuZGF0YVBvaW50cz1bXSx0aGlzLmxvYWRlZD0hMSx0aGlzLm9uTG9hZENhbGxiYWNrPXZvaWQgMCxpLmFuaW1hdGlvblByZWxvYWQ/KHRoaXMubG9hZGVkPSExLHRoaXMubG9hZEluQmFja2dyb3VuZCgpKTp0aGlzLmxvYWRlZD0hMH12YXIgbj1pKDEwKTtvLnByb3RvdHlwZS5pc0xvYWRlZD1mdW5jdGlvbigpe3JldHVybiB0aGlzLmxvYWRlZH0sby5wcm90b3R5cGUuZ2V0TG9hZGVkUHJvZ3Jlc3M9ZnVuY3Rpb24oKXtmb3IodmFyIHQ9dGhpcy52YWx1ZXMubGVuZ3RoLGU9MDt0aGlzLmRhdGFQb2ludHNbZV07KWUrKztyZXR1cm4gTWF0aC5yb3VuZChlL3QqMTAwKX0sby5wcm90b3R5cGUuZ2V0TGFiZWw9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5ncmFwaC5maWx0ZXJMYWJlbH0sby5wcm90b3R5cGUuZ2V0Q29sdW1uPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuY29sdW1ufSxvLnByb3RvdHlwZS5nZXRTZWxlY3RlZFZhbHVlPWZ1bmN0aW9uKCl7cmV0dXJuIHZvaWQgMCE9PXRoaXMuaW5kZXg/dGhpcy52YWx1ZXNbdGhpcy5pbmRleF06dm9pZCAwfSxvLnByb3RvdHlwZS5nZXRWYWx1ZXM9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy52YWx1ZXN9LG8ucHJvdG90eXBlLmdldFZhbHVlPWZ1bmN0aW9uKHQpe2lmKHQ+PXRoaXMudmFsdWVzLmxlbmd0aCl0aHJvdyJFcnJvcjogaW5kZXggb3V0IG9mIHJhbmdlIjtyZXR1cm4gdGhpcy52YWx1ZXNbdF19LG8ucHJvdG90eXBlLl9nZXREYXRhUG9pbnRzPWZ1bmN0aW9uKHQpe2lmKHZvaWQgMD09PXQmJih0PXRoaXMuaW5kZXgpLHZvaWQgMD09PXQpcmV0dXJuW107dmFyIGU7aWYodGhpcy5kYXRhUG9pbnRzW3RdKWU9dGhpcy5kYXRhUG9pbnRzW3RdO2Vsc2V7dmFyIGk9e307aS5jb2x1bW49dGhpcy5jb2x1bW4saS52YWx1ZT10aGlzLnZhbHVlc1t0XTt2YXIgbz1uZXcgbih0aGlzLmRhdGEse2ZpbHRlcjpmdW5jdGlvbih0KXtyZXR1cm4gdFtpLmNvbHVtbl09PWkudmFsdWV9fSkuZ2V0KCk7ZT10aGlzLmdyYXBoLl9nZXREYXRhUG9pbnRzKG8pLHRoaXMuZGF0YVBvaW50c1t0XT1lfXJldHVybiBlfSxvLnByb3RvdHlwZS5zZXRPbkxvYWRDYWxsYmFjaz1mdW5jdGlvbih0KXt0aGlzLm9uTG9hZENhbGxiYWNrPXR9LG8ucHJvdG90eXBlLnNlbGVjdFZhbHVlPWZ1bmN0aW9uKHQpe2lmKHQ+PXRoaXMudmFsdWVzLmxlbmd0aCl0aHJvdyJFcnJvcjogaW5kZXggb3V0IG9mIHJhbmdlIjt0aGlzLmluZGV4PXQsdGhpcy52YWx1ZT10aGlzLnZhbHVlc1t0XX0sby5wcm90b3R5cGUubG9hZEluQmFja2dyb3VuZD1mdW5jdGlvbih0KXt2b2lkIDA9PT10JiYodD0wKTt2YXIgZT10aGlzLmdyYXBoLmZyYW1lO2lmKHQ8dGhpcy52YWx1ZXMubGVuZ3RoKXt0aGlzLl9nZXREYXRhUG9pbnRzKHQpO3ZvaWQgMD09PWUucHJvZ3Jlc3MmJihlLnByb2dyZXNzPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoIkRJViIpLGUucHJvZ3Jlc3Muc3R5bGUucG9zaXRpb249ImFic29sdXRlIixlLnByb2dyZXNzLnN0eWxlLmNvbG9yPSJncmF5IixlLmFwcGVuZENoaWxkKGUucHJvZ3Jlc3MpKTt2YXIgaT10aGlzLmdldExvYWRlZFByb2dyZXNzKCk7ZS5wcm9ncmVzcy5pbm5lckhUTUw9IkxvYWRpbmcgYW5pbWF0aW9uLi4uICIraSsiJSIsZS5wcm9ncmVzcy5zdHlsZS5ib3R0b209IjYwcHgiLGUucHJvZ3Jlc3Muc3R5bGUubGVmdD0iMTBweCI7dmFyIG89dGhpcztzZXRUaW1lb3V0KGZ1bmN0aW9uKCl7by5sb2FkSW5CYWNrZ3JvdW5kKHQrMSl9LDEwKSx0aGlzLmxvYWRlZD0hMX1lbHNlIHRoaXMubG9hZGVkPSEwLHZvaWQgMCE9PWUucHJvZ3Jlc3MmJihlLnJlbW92ZUNoaWxkKGUucHJvZ3Jlc3MpLGUucHJvZ3Jlc3M9dm9pZCAwKSx0aGlzLm9uTG9hZENhbGxiYWNrJiZ0aGlzLm9uTG9hZENhbGxiYWNrKCl9LHQuZXhwb3J0cz1vfSxmdW5jdGlvbih0LGUsaSl7ZnVuY3Rpb24gbyh0LGUpe2lmKHZvaWQgMD09PXQpdGhyb3ciRXJyb3I6IE5vIGNvbnRhaW5lciBlbGVtZW50IGRlZmluZWQiO2lmKHRoaXMuY29udGFpbmVyPXQsdGhpcy52aXNpYmxlPWUmJnZvaWQgMCE9ZS52aXNpYmxlP2UudmlzaWJsZTohMCx0aGlzLnZpc2libGUpe3RoaXMuZnJhbWU9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiRElWIiksdGhpcy5mcmFtZS5zdHlsZS53aWR0aD0iMTAwJSIsdGhpcy5mcmFtZS5zdHlsZS5wb3NpdGlvbj0icmVsYXRpdmUiLHRoaXMuY29udGFpbmVyLmFwcGVuZENoaWxkKHRoaXMuZnJhbWUpLHRoaXMuZnJhbWUucHJldj1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJJTlBVVCIpLHRoaXMuZnJhbWUucHJldi50eXBlPSJCVVRUT04iLHRoaXMuZnJhbWUucHJldi52YWx1ZT0iUHJldiIsdGhpcy5mcmFtZS5hcHBlbmRDaGlsZCh0aGlzLmZyYW1lLnByZXYpLHRoaXMuZnJhbWUucGxheT1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJJTlBVVCIpLHRoaXMuZnJhbWUucGxheS50eXBlPSJCVVRUT04iLHRoaXMuZnJhbWUucGxheS52YWx1ZT0iUGxheSIsdGhpcy5mcmFtZS5hcHBlbmRDaGlsZCh0aGlzLmZyYW1lLnBsYXkpLHRoaXMuZnJhbWUubmV4dD1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJJTlBVVCIpLHRoaXMuZnJhbWUubmV4dC50eXBlPSJCVVRUT04iLHRoaXMuZnJhbWUubmV4dC52YWx1ZT0iTmV4dCIsdGhpcy5mcmFtZS5hcHBlbmRDaGlsZCh0aGlzLmZyYW1lLm5leHQpLHRoaXMuZnJhbWUuYmFyPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoIklOUFVUIiksdGhpcy5mcmFtZS5iYXIudHlwZT0iQlVUVE9OIix0aGlzLmZyYW1lLmJhci5zdHlsZS5wb3NpdGlvbj0iYWJzb2x1dGUiLHRoaXMuZnJhbWUuYmFyLnN0eWxlLmJvcmRlcj0iMXB4IHNvbGlkIHJlZCIsdGhpcy5mcmFtZS5iYXIuc3R5bGUud2lkdGg9IjEwMHB4Iix0aGlzLmZyYW1lLmJhci5zdHlsZS5oZWlnaHQ9IjZweCIsdGhpcy5mcmFtZS5iYXIuc3R5bGUuYm9yZGVyUmFkaXVzPSIycHgiLHRoaXMuZnJhbWUuYmFyLnN0eWxlLk1vekJvcmRlclJhZGl1cz0iMnB4Iix0aGlzLmZyYW1lLmJhci5zdHlsZS5ib3JkZXI9IjFweCBzb2xpZCAjN0Y3RjdGIix0aGlzLmZyYW1lLmJhci5zdHlsZS5iYWNrZ3JvdW5kQ29sb3I9IiNFNUU1RTUiLHRoaXMuZnJhbWUuYXBwZW5kQ2hpbGQodGhpcy5mcmFtZS5iYXIpLHRoaXMuZnJhbWUuc2xpZGU9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiSU5QVVQiKSx0aGlzLmZyYW1lLnNsaWRlLnR5cGU9IkJVVFRPTiIsdGhpcy5mcmFtZS5zbGlkZS5zdHlsZS5tYXJnaW49IjBweCIsdGhpcy5mcmFtZS5zbGlkZS52YWx1ZT0iICIsdGhpcy5mcmFtZS5zbGlkZS5zdHlsZS5wb3NpdGlvbj0icmVsYXRpdmUiLHRoaXMuZnJhbWUuc2xpZGUuc3R5bGUubGVmdD0iLTEwMHB4Iix0aGlzLmZyYW1lLmFwcGVuZENoaWxkKHRoaXMuZnJhbWUuc2xpZGUpO3ZhciBpPXRoaXM7dGhpcy5mcmFtZS5zbGlkZS5vbm1vdXNlZG93bj1mdW5jdGlvbih0KXtpLl9vbk1vdXNlRG93bih0KX0sdGhpcy5mcmFtZS5wcmV2Lm9uY2xpY2s9ZnVuY3Rpb24odCl7aS5wcmV2KHQpfSx0aGlzLmZyYW1lLnBsYXkub25jbGljaz1mdW5jdGlvbih0KXtpLnRvZ2dsZVBsYXkodCl9LHRoaXMuZnJhbWUubmV4dC5vbmNsaWNrPWZ1bmN0aW9uKHQpe2kubmV4dCh0KX19dGhpcy5vbkNoYW5nZUNhbGxiYWNrPXZvaWQgMCx0aGlzLnZhbHVlcz1bXSx0aGlzLmluZGV4PXZvaWQgMCx0aGlzLnBsYXlUaW1lb3V0PXZvaWQgMCx0aGlzLnBsYXlJbnRlcnZhbD0xZTMsdGhpcy5wbGF5TG9vcD0hMH12YXIgbj1pKDEpO28ucHJvdG90eXBlLnByZXY9ZnVuY3Rpb24oKXt2YXIgdD10aGlzLmdldEluZGV4KCk7dD4wJiYodC0tLHRoaXMuc2V0SW5kZXgodCkpfSxvLnByb3RvdHlwZS5uZXh0PWZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5nZXRJbmRleCgpO3Q8dGhpcy52YWx1ZXMubGVuZ3RoLTEmJih0KyssdGhpcy5zZXRJbmRleCh0KSl9LG8ucHJvdG90eXBlLnBsYXlOZXh0PWZ1bmN0aW9uKCl7dmFyIHQ9bmV3IERhdGUsZT10aGlzLmdldEluZGV4KCk7ZTx0aGlzLnZhbHVlcy5sZW5ndGgtMT8oZSsrLHRoaXMuc2V0SW5kZXgoZSkpOnRoaXMucGxheUxvb3AmJihlPTAsdGhpcy5zZXRJbmRleChlKSk7dmFyIGk9bmV3IERhdGUsbz1pLXQsbj1NYXRoLm1heCh0aGlzLnBsYXlJbnRlcnZhbC1vLDApLHM9dGhpczt0aGlzLnBsYXlUaW1lb3V0PXNldFRpbWVvdXQoZnVuY3Rpb24oKXtzLnBsYXlOZXh0KCl9LG4pfSxvLnByb3RvdHlwZS50b2dnbGVQbGF5PWZ1bmN0aW9uKCl7dm9pZCAwPT09dGhpcy5wbGF5VGltZW91dD90aGlzLnBsYXkoKTp0aGlzLnN0b3AoKX0sby5wcm90b3R5cGUucGxheT1mdW5jdGlvbigpe3RoaXMucGxheVRpbWVvdXR8fCh0aGlzLnBsYXlOZXh0KCksdGhpcy5mcmFtZSYmKHRoaXMuZnJhbWUucGxheS52YWx1ZT0iU3RvcCIpKX0sby5wcm90b3R5cGUuc3RvcD1mdW5jdGlvbigpe2NsZWFySW50ZXJ2YWwodGhpcy5wbGF5VGltZW91dCksdGhpcy5wbGF5VGltZW91dD12b2lkIDAsdGhpcy5mcmFtZSYmKHRoaXMuZnJhbWUucGxheS52YWx1ZT0iUGxheSIpfSxvLnByb3RvdHlwZS5zZXRPbkNoYW5nZUNhbGxiYWNrPWZ1bmN0aW9uKHQpe3RoaXMub25DaGFuZ2VDYWxsYmFjaz10fSxvLnByb3RvdHlwZS5zZXRQbGF5SW50ZXJ2YWw9ZnVuY3Rpb24odCl7dGhpcy5wbGF5SW50ZXJ2YWw9dH0sby5wcm90b3R5cGUuZ2V0UGxheUludGVydmFsPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLnBsYXlJbnRlcnZhbH0sby5wcm90b3R5cGUuc2V0UGxheUxvb3A9ZnVuY3Rpb24odCl7dGhpcy5wbGF5TG9vcD10fSxvLnByb3RvdHlwZS5vbkNoYW5nZT1mdW5jdGlvbigpe3ZvaWQgMCE9PXRoaXMub25DaGFuZ2VDYWxsYmFjayYmdGhpcy5vbkNoYW5nZUNhbGxiYWNrKCl9LG8ucHJvdG90eXBlLnJlZHJhdz1mdW5jdGlvbigpe2lmKHRoaXMuZnJhbWUpe3RoaXMuZnJhbWUuYmFyLnN0eWxlLnRvcD10aGlzLmZyYW1lLmNsaWVudEhlaWdodC8yLXRoaXMuZnJhbWUuYmFyLm9mZnNldEhlaWdodC8yKyJweCIsdGhpcy5mcmFtZS5iYXIuc3R5bGUud2lkdGg9dGhpcy5mcmFtZS5jbGllbnRXaWR0aC10aGlzLmZyYW1lLnByZXYuY2xpZW50V2lkdGgtdGhpcy5mcmFtZS5wbGF5LmNsaWVudFdpZHRoLXRoaXMuZnJhbWUubmV4dC5jbGllbnRXaWR0aC0zMCsicHgiO3ZhciB0PXRoaXMuaW5kZXhUb0xlZnQodGhpcy5pbmRleCk7dGhpcy5mcmFtZS5zbGlkZS5zdHlsZS5sZWZ0PXQrInB4In19LG8ucHJvdG90eXBlLnNldFZhbHVlcz1mdW5jdGlvbih0KXt0aGlzLnZhbHVlcz10LHRoaXMudmFsdWVzLmxlbmd0aD4wP3RoaXMuc2V0SW5kZXgoMCk6dGhpcy5pbmRleD12b2lkIDB9LG8ucHJvdG90eXBlLnNldEluZGV4PWZ1bmN0aW9uKHQpe2lmKCEodDx0aGlzLnZhbHVlcy5sZW5ndGgpKXRocm93IkVycm9yOiBpbmRleCBvdXQgb2YgcmFuZ2UiO3RoaXMuaW5kZXg9dCx0aGlzLnJlZHJhdygpLHRoaXMub25DaGFuZ2UoKX0sby5wcm90b3R5cGUuZ2V0SW5kZXg9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5pbmRleH0sby5wcm90b3R5cGUuZ2V0PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMudmFsdWVzW3RoaXMuaW5kZXhdfSxvLnByb3RvdHlwZS5fb25Nb3VzZURvd249ZnVuY3Rpb24odCl7dmFyIGU9dC53aGljaD8xPT09dC53aGljaDoxPT09dC5idXR0b247aWYoZSl7dGhpcy5zdGFydENsaWVudFg9dC5jbGllbnRYLHRoaXMuc3RhcnRTbGlkZVg9cGFyc2VGbG9hdCh0aGlzLmZyYW1lLnNsaWRlLnN0eWxlLmxlZnQpLHRoaXMuZnJhbWUuc3R5bGUuY3Vyc29yPSJtb3ZlIjt2YXIgaT10aGlzO3RoaXMub25tb3VzZW1vdmU9ZnVuY3Rpb24odCl7aS5fb25Nb3VzZU1vdmUodCl9LHRoaXMub25tb3VzZXVwPWZ1bmN0aW9uKHQpe2kuX29uTW91c2VVcCh0KX0sbi5hZGRFdmVudExpc3RlbmVyKGRvY3VtZW50LCJtb3VzZW1vdmUiLHRoaXMub25tb3VzZW1vdmUpLG4uYWRkRXZlbnRMaXN0ZW5lcihkb2N1bWVudCwibW91c2V1cCIsdGhpcy5vbm1vdXNldXApLG4ucHJldmVudERlZmF1bHQodCl9fSxvLnByb3RvdHlwZS5sZWZ0VG9JbmRleD1mdW5jdGlvbih0KXt2YXIgZT1wYXJzZUZsb2F0KHRoaXMuZnJhbWUuYmFyLnN0eWxlLndpZHRoKS10aGlzLmZyYW1lLnNsaWRlLmNsaWVudFdpZHRoLTEwLGk9dC0zLG89TWF0aC5yb3VuZChpL2UqKHRoaXMudmFsdWVzLmxlbmd0aC0xKSk7cmV0dXJuIDA+byYmKG89MCksbz50aGlzLnZhbHVlcy5sZW5ndGgtMSYmKG89dGhpcy52YWx1ZXMubGVuZ3RoLTEpLG99LG8ucHJvdG90eXBlLmluZGV4VG9MZWZ0PWZ1bmN0aW9uKHQpe3ZhciBlPXBhcnNlRmxvYXQodGhpcy5mcmFtZS5iYXIuc3R5bGUud2lkdGgpLXRoaXMuZnJhbWUuc2xpZGUuY2xpZW50V2lkdGgtMTAsaT10Lyh0aGlzLnZhbHVlcy5sZW5ndGgtMSkqZSxvPWkrMztyZXR1cm4gb30sby5wcm90b3R5cGUuX29uTW91c2VNb3ZlPWZ1bmN0aW9uKHQpe3ZhciBlPXQuY2xpZW50WC10aGlzLnN0YXJ0Q2xpZW50WCxpPXRoaXMuc3RhcnRTbGlkZVgrZSxvPXRoaXMubGVmdFRvSW5kZXgoaSk7dGhpcy5zZXRJbmRleChvKSxuLnByZXZlbnREZWZhdWx0KCl9LG8ucHJvdG90eXBlLl9vbk1vdXNlVXA9ZnVuY3Rpb24odCl7dGhpcy5mcmFtZS5zdHlsZS5jdXJzb3I9ImF1dG8iLG4ucmVtb3ZlRXZlbnRMaXN0ZW5lcihkb2N1bWVudCwibW91c2Vtb3ZlIix0aGlzLm9ubW91c2Vtb3ZlKSxuLnJlbW92ZUV2ZW50TGlzdGVuZXIoZG9jdW1lbnQsIm1vdXNldXAiLHRoaXMub25tb3VzZXVwKSxuLnByZXZlbnREZWZhdWx0KCl9LHQuZXhwb3J0cz1vfSxmdW5jdGlvbih0LGUpe2Z1bmN0aW9uIGkodCxlLGksbyl7dGhpcy5fc3RhcnQ9MCx0aGlzLl9lbmQ9MCx0aGlzLl9zdGVwPTEsdGhpcy5wcmV0dHlTdGVwPSEwLHRoaXMucHJlY2lzaW9uPTUsdGhpcy5fY3VycmVudD0wLHRoaXMuc2V0UmFuZ2UodCxlLGksbyl9aS5wcm90b3R5cGUuc2V0UmFuZ2U9ZnVuY3Rpb24odCxlLGksbyl7dGhpcy5fc3RhcnQ9dD90OjAsdGhpcy5fZW5kPWU/ZTowLHRoaXMuc2V0U3RlcChpLG8pfSxpLnByb3RvdHlwZS5zZXRTdGVwPWZ1bmN0aW9uKHQsZSl7dm9pZCAwPT09dHx8MD49dHx8KHZvaWQgMCE9PWUmJih0aGlzLnByZXR0eVN0ZXA9ZSksdGhpcy5wcmV0dHlTdGVwPT09ITA/dGhpcy5fc3RlcD1pLmNhbGN1bGF0ZVByZXR0eVN0ZXAodCk6dGhpcy5fc3RlcD10KX0saS5jYWxjdWxhdGVQcmV0dHlTdGVwPWZ1bmN0aW9uKHQpe3ZhciBlPWZ1bmN0aW9uKHQpe3JldHVybiBNYXRoLmxvZyh0KS9NYXRoLkxOMTB9LGk9TWF0aC5wb3coMTAsTWF0aC5yb3VuZChlKHQpKSksbz0yKk1hdGgucG93KDEwLE1hdGgucm91bmQoZSh0LzIpKSksbj01Kk1hdGgucG93KDEwLE1hdGgucm91bmQoZSh0LzUpKSkscz1pO3JldHVybiBNYXRoLmFicyhvLXQpPD1NYXRoLmFicyhzLXQpJiYocz1vKSxNYXRoLmFicyhuLXQpPD1NYXRoLmFicyhzLXQpJiYocz1uKSwwPj1zJiYocz0xKSxzfSxpLnByb3RvdHlwZS5nZXRDdXJyZW50PWZ1bmN0aW9uKCl7cmV0dXJuIHBhcnNlRmxvYXQodGhpcy5fY3VycmVudC50b1ByZWNpc2lvbih0aGlzLnByZWNpc2lvbikpfSxpLnByb3RvdHlwZS5nZXRTdGVwPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3N0ZXB9LGkucHJvdG90eXBlLnN0YXJ0PWZ1bmN0aW9uKCl7dGhpcy5fY3VycmVudD10aGlzLl9zdGFydC10aGlzLl9zdGFydCV0aGlzLl9zdGVwfSxpLnByb3RvdHlwZS5uZXh0PWZ1bmN0aW9uKCl7dGhpcy5fY3VycmVudCs9dGhpcy5fc3RlcH0saS5wcm90b3R5cGUuZW5kPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2N1cnJlbnQ+dGhpcy5fZW5kfSx0LmV4cG9ydHM9aX0sZnVuY3Rpb24odCxlLGkpe2Z1bmN0aW9uIG8odCxlLGksZCl7aWYoISh0aGlzIGluc3RhbmNlb2YgbykpdGhyb3cgbmV3IFN5bnRheEVycm9yKCJDb25zdHJ1Y3RvciBtdXN0IGJlIGNhbGxlZCB3aXRoIHRoZSBuZXcgb3BlcmF0b3IiKTtpZighKEFycmF5LmlzQXJyYXkoaSl8fGkgaW5zdGFuY2VvZiByfHxpIGluc3RhbmNlb2YgYSkmJmkgaW5zdGFuY2VvZiBPYmplY3Qpe3ZhciBjPWQ7ZD1pLGk9Y312YXIgZj10aGlzO3RoaXMuZGVmYXVsdE9wdGlvbnM9e3N0YXJ0Om51bGwsZW5kOm51bGwsYXV0b1Jlc2l6ZTohMCx0aHJvdHRsZVJlZHJhdzowLG9yaWVudGF0aW9uOntheGlzOiJib3R0b20iLGl0ZW06ImJvdHRvbSJ9LG1vbWVudDpuLHdpZHRoOm51bGwsaGVpZ2h0Om51bGwsbWF4SGVpZ2h0Om51bGwsbWluSGVpZ2h0Om51bGx9LHRoaXMub3B0aW9ucz1zLmRlZXBFeHRlbmQoe30sdGhpcy5kZWZhdWx0T3B0aW9ucyksdGhpcy5fY3JlYXRlKHQpLHRoaXMuY29tcG9uZW50cz1bXSx0aGlzLmJvZHk9e2RvbTp0aGlzLmRvbSxkb21Qcm9wczp0aGlzLnByb3BzLGVtaXR0ZXI6e29uOnRoaXMub24uYmluZCh0aGlzKSxvZmY6dGhpcy5vZmYuYmluZCh0aGlzKSxlbWl0OnRoaXMuZW1pdC5iaW5kKHRoaXMpfSxoaWRkZW5EYXRlczpbXSx1dGlsOntnZXRTY2FsZTpmdW5jdGlvbigpe3JldHVybiBmLnRpbWVBeGlzLnN0ZXAuc2NhbGV9LGdldFN0ZXA6ZnVuY3Rpb24oKXtyZXR1cm4gZi50aW1lQXhpcy5zdGVwLnN0ZXB9LHRvU2NyZWVuOmYuX3RvU2NyZWVuLmJpbmQoZiksdG9HbG9iYWxTY3JlZW46Zi5fdG9HbG9iYWxTY3JlZW4uYmluZChmKSx0b1RpbWU6Zi5fdG9UaW1lLmJpbmQoZiksdG9HbG9iYWxUaW1lOmYuX3RvR2xvYmFsVGltZS5iaW5kKGYpfX0sdGhpcy5yYW5nZT1uZXcgaCh0aGlzLmJvZHkpLHRoaXMuY29tcG9uZW50cy5wdXNoKHRoaXMucmFuZ2UpLHRoaXMuYm9keS5yYW5nZT10aGlzLnJhbmdlLHRoaXMudGltZUF4aXM9bmV3IGwodGhpcy5ib2R5KSx0aGlzLnRpbWVBeGlzMj1udWxsLHRoaXMuY29tcG9uZW50cy5wdXNoKHRoaXMudGltZUF4aXMpLHRoaXMuY3VycmVudFRpbWU9bmV3IHUodGhpcy5ib2R5KSx0aGlzLmNvbXBvbmVudHMucHVzaCh0aGlzLmN1cnJlbnRUaW1lKSx0aGlzLml0ZW1TZXQ9bmV3IHAodGhpcy5ib2R5KSx0aGlzLmNvbXBvbmVudHMucHVzaCh0aGlzLml0ZW1TZXQpLHRoaXMuaXRlbXNEYXRhPW51bGwsdGhpcy5ncm91cHNEYXRhPW51bGwsdGhpcy5vbigidGFwIixmdW5jdGlvbih0KXtmLmVtaXQoImNsaWNrIixmLmdldEV2ZW50UHJvcGVydGllcyh0KSl9KSx0aGlzLm9uKCJkb3VibGV0YXAiLGZ1bmN0aW9uKHQpe2YuZW1pdCgiZG91YmxlQ2xpY2siLGYuZ2V0RXZlbnRQcm9wZXJ0aWVzKHQpKX0pLHRoaXMuZG9tLnJvb3Qub25jb250ZXh0bWVudT1mdW5jdGlvbih0KXtmLmVtaXQoImNvbnRleHRtZW51IixmLmdldEV2ZW50UHJvcGVydGllcyh0KSl9LGQmJnRoaXMuc2V0T3B0aW9ucyhkKSxpJiZ0aGlzLnNldEdyb3VwcyhpKSxlP3RoaXMuc2V0SXRlbXMoZSk6dGhpcy5fcmVkcmF3KCl9dmFyIG49KGkoMTIpLGkoMjApLGkoMikpLHM9aSgxKSxyPWkoOCksYT1pKDEwKSxoPWkoMjMpLGQ9aSgyNyksbD1pKDM4KSx1PWkoNDMpLGM9aSg0MSkscD1pKDI4KSxmPWkoNDQpLG09aSg0NilbImRlZmF1bHQiXSx2PWkoNDYpLnByaW50U3R5bGUsZz1pKDQ3KS5hbGxPcHRpb25zLHk9aSg0NykuY29uZmlndXJlT3B0aW9ucztvLnByb3RvdHlwZT1uZXcgZCxvLnByb3RvdHlwZS5fY3JlYXRlQ29uZmlndXJhdG9yPWZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBmKHRoaXMsdGhpcy5kb20uY29udGFpbmVyLHkpfSxvLnByb3RvdHlwZS5yZWRyYXc9ZnVuY3Rpb24oKXt0aGlzLml0ZW1TZXQmJnRoaXMuaXRlbVNldC5tYXJrRGlydHkoe3JlZnJlc2hJdGVtczohMH0pLHRoaXMuX3JlZHJhdygpfSxvLnByb3RvdHlwZS5zZXRPcHRpb25zPWZ1bmN0aW9uKHQpe3ZhciBlPW0udmFsaWRhdGUodCxnKTtpZihlPT09ITAmJmNvbnNvbGUubG9nKCIlY0Vycm9ycyBoYXZlIGJlZW4gZm91bmQgaW4gdGhlIHN1cHBsaWVkIG9wdGlvbnMgb2JqZWN0LiIsdiksZC5wcm90b3R5cGUuc2V0T3B0aW9ucy5jYWxsKHRoaXMsdCksInR5cGUiaW4gdCYmdC50eXBlIT09dGhpcy5vcHRpb25zLnR5cGUpe3RoaXMub3B0aW9ucy50eXBlPXQudHlwZTt2YXIgaT10aGlzLml0ZW1zRGF0YTtpZihpKXt2YXIgbz10aGlzLmdldFNlbGVjdGlvbigpO3RoaXMuc2V0SXRlbXMobnVsbCksdGhpcy5zZXRJdGVtcyhpKSx0aGlzLnNldFNlbGVjdGlvbihvKX19fSxvLnByb3RvdHlwZS5zZXRJdGVtcz1mdW5jdGlvbih0KXt2YXIgZSxpPW51bGw9PXRoaXMuaXRlbXNEYXRhO2lmKGU9dD90IGluc3RhbmNlb2Ygcnx8dCBpbnN0YW5jZW9mIGE/dDpuZXcgcih0LHt0eXBlOntzdGFydDoiRGF0ZSIsZW5kOiJEYXRlIn19KTpudWxsLHRoaXMuaXRlbXNEYXRhPWUsdGhpcy5pdGVtU2V0JiZ0aGlzLml0ZW1TZXQuc2V0SXRlbXMoZSksaSlpZih2b2lkIDAhPXRoaXMub3B0aW9ucy5zdGFydHx8dm9pZCAwIT10aGlzLm9wdGlvbnMuZW5kKXtpZih2b2lkIDA9PXRoaXMub3B0aW9ucy5zdGFydHx8dm9pZCAwPT10aGlzLm9wdGlvbnMuZW5kKXZhciBvPXRoaXMuZ2V0SXRlbVJhbmdlKCk7dmFyIG49dm9pZCAwIT10aGlzLm9wdGlvbnMuc3RhcnQ/dGhpcy5vcHRpb25zLnN0YXJ0Om8ubWluLHM9dm9pZCAwIT10aGlzLm9wdGlvbnMuZW5kP3RoaXMub3B0aW9ucy5lbmQ6by5tYXg7dGhpcy5zZXRXaW5kb3cobixzLHthbmltYXRpb246ITF9KX1lbHNlIHRoaXMuZml0KHthbmltYXRpb246ITF9KX0sby5wcm90b3R5cGUuc2V0R3JvdXBzPWZ1bmN0aW9uKHQpe3ZhciBlO2U9dD90IGluc3RhbmNlb2Ygcnx8dCBpbnN0YW5jZW9mIGE/dDpuZXcgcih0KTpudWxsLHRoaXMuZ3JvdXBzRGF0YT1lLHRoaXMuaXRlbVNldC5zZXRHcm91cHMoZSl9LG8ucHJvdG90eXBlLnNldERhdGE9ZnVuY3Rpb24odCl7dCYmdC5ncm91cHMmJnRoaXMuc2V0R3JvdXBzKHQuZ3JvdXBzKSx0JiZ0Lml0ZW1zJiZ0aGlzLnNldEl0ZW1zKHQuaXRlbXMpfSxvLnByb3RvdHlwZS5zZXRTZWxlY3Rpb249ZnVuY3Rpb24odCxlKXt0aGlzLml0ZW1TZXQmJnRoaXMuaXRlbVNldC5zZXRTZWxlY3Rpb24odCksZSYmZS5mb2N1cyYmdGhpcy5mb2N1cyh0LGUpfSxvLnByb3RvdHlwZS5nZXRTZWxlY3Rpb249ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5pdGVtU2V0JiZ0aGlzLml0ZW1TZXQuZ2V0U2VsZWN0aW9uKCl8fFtdfSxvLnByb3RvdHlwZS5mb2N1cz1mdW5jdGlvbih0LGUpe2lmKHRoaXMuaXRlbXNEYXRhJiZ2b2lkIDAhPXQpe3ZhciBpPUFycmF5LmlzQXJyYXkodCk/dDpbdF0sbz10aGlzLml0ZW1zRGF0YS5nZXREYXRhU2V0KCkuZ2V0KGkse3R5cGU6e3N0YXJ0OiJEYXRlIixlbmQ6IkRhdGUifX0pLG49bnVsbCxzPW51bGw7aWYoby5mb3JFYWNoKGZ1bmN0aW9uKHQpe3ZhciBlPXQuc3RhcnQudmFsdWVPZigpLGk9ImVuZCJpbiB0P3QuZW5kLnZhbHVlT2YoKTp0LnN0YXJ0LnZhbHVlT2YoKTsobnVsbD09PW58fG4+ZSkmJihuPWUpLChudWxsPT09c3x8aT5zKSYmKHM9aSl9KSxudWxsIT09biYmbnVsbCE9PXMpe3ZhciByPShuK3MpLzIsYT1NYXRoLm1heCh0aGlzLnJhbmdlLmVuZC10aGlzLnJhbmdlLnN0YXJ0LDEuMSoocy1uKSksaD1lJiZ2b2lkIDAhPT1lLmFuaW1hdGlvbj9lLmFuaW1hdGlvbjohMDt0aGlzLnJhbmdlLnNldFJhbmdlKHItYS8yLHIrYS8yLGgpfX19LG8ucHJvdG90eXBlLmZpdD1mdW5jdGlvbih0KXt2YXIgZT10JiZ2b2lkIDAhPT10LmFuaW1hdGlvbj90LmFuaW1hdGlvbjohMCxpPXRoaXMuZ2V0SXRlbVJhbmdlKCk7dGhpcy5yYW5nZS5zZXRSYW5nZShpLm1pbixpLm1heCxlKX0sby5wcm90b3R5cGUuZ2V0SXRlbVJhbmdlPWZ1bmN0aW9uKCl7dmFyIHQ9dGhpcyxlPXRoaXMuZ2V0RGF0YVJhbmdlKCksaT1udWxsIT09ZS5taW4/ZS5taW4udmFsdWVPZigpOm51bGwsbz1udWxsIT09ZS5tYXg/ZS5tYXgudmFsdWVPZigpOm51bGwsbj1udWxsLHI9bnVsbDtpZihudWxsIT1pJiZudWxsIT1vKXt2YXIgYSxoLGQsbCx1OyFmdW5jdGlvbigpe3ZhciBlPWZ1bmN0aW9uKHQpe3JldHVybiBzLmNvbnZlcnQodC5kYXRhLnN0YXJ0LCJEYXRlIikudmFsdWVPZigpfSxjPWZ1bmN0aW9uKHQpe3ZhciBlPXZvaWQgMCE9dC5kYXRhLmVuZD90LmRhdGEuZW5kOnQuZGF0YS5zdGFydDtyZXR1cm4gcy5jb252ZXJ0KGUsIkRhdGUiKS52YWx1ZU9mKCl9O2E9by1pLDA+PWEmJihhPTEwKSxoPWEvdC5wcm9wcy5jZW50ZXIud2lkdGgscy5mb3JFYWNoKHQuaXRlbVNldC5pdGVtcyxmdW5jdGlvbih0KXt0LnNob3coKTt2YXIgcz1lKHQpLGE9Yyh0KSxkPXMtKHQuZ2V0V2lkdGhMZWZ0KCkrMTApKmgsbD1hKyh0LmdldFdpZHRoUmlnaHQoKSsxMCkqaDtpPmQmJihpPWQsbj10KSxsPm8mJihvPWwscj10KX0uYmluZCh0KSksbiYmciYmKGQ9bi5nZXRXaWR0aExlZnQoKSsxMCxsPXIuZ2V0V2lkdGhSaWdodCgpKzEwLHU9dC5wcm9wcy5jZW50ZXIud2lkdGgtZC1sLHU+MCYmKGk9ZShuKS1kKmEvdSxvPWMocikrbCphL3UpKX0oKX1yZXR1cm57bWluOm51bGwhPWk/bmV3IERhdGUoaSk6bnVsbCxtYXg6bnVsbCE9bz9uZXcgRGF0ZShvKTpudWxsfX0sby5wcm90b3R5cGUuZ2V0RGF0YVJhbmdlPWZ1bmN0aW9uKCl7dmFyIHQ9bnVsbCxlPW51bGwsaT10aGlzLml0ZW1zRGF0YSYmdGhpcy5pdGVtc0RhdGEuZ2V0RGF0YVNldCgpO3JldHVybiBpJiZpLmZvckVhY2goZnVuY3Rpb24oaSl7dmFyIG89cy5jb252ZXJ0KGkuc3RhcnQsIkRhdGUiKS52YWx1ZU9mKCksbj1zLmNvbnZlcnQodm9pZCAwIT1pLmVuZD9pLmVuZDppLnN0YXJ0LCJEYXRlIikudmFsdWVPZigpOyhudWxsPT09dHx8dD5vKSYmKHQ9byksKG51bGw9PT1lfHxuPmUpJiYoZT1uKX0pLHttaW46bnVsbCE9dD9uZXcgRGF0ZSh0KTpudWxsLG1heDpudWxsIT1lP25ldyBEYXRlKGUpOm51bGx9fSxvLnByb3RvdHlwZS5nZXRFdmVudFByb3BlcnRpZXM9ZnVuY3Rpb24odCl7dmFyIGU9dC5jZW50ZXI/dC5jZW50ZXIueDp0LmNsaWVudFgsaT10LmNlbnRlcj90LmNlbnRlci55OnQuY2xpZW50WSxvPWUtcy5nZXRBYnNvbHV0ZUxlZnQodGhpcy5kb20uY2VudGVyQ29udGFpbmVyKSxuPWktcy5nZXRBYnNvbHV0ZVRvcCh0aGlzLmRvbS5jZW50ZXJDb250YWluZXIpLHI9dGhpcy5pdGVtU2V0Lml0ZW1Gcm9tVGFyZ2V0KHQpLGE9dGhpcy5pdGVtU2V0Lmdyb3VwRnJvbVRhcmdldCh0KSxoPWMuY3VzdG9tVGltZUZyb21UYXJnZXQodCksZD10aGlzLml0ZW1TZXQub3B0aW9ucy5zbmFwfHxudWxsLGw9dGhpcy5ib2R5LnV0aWwuZ2V0U2NhbGUoKSx1PXRoaXMuYm9keS51dGlsLmdldFN0ZXAoKSxwPXRoaXMuX3RvVGltZShvKSxmPWQ/ZChwLGwsdSk6cCxtPXMuZ2V0VGFyZ2V0KHQpLHY9bnVsbDtyZXR1cm4gbnVsbCE9cj92PSJpdGVtIjpudWxsIT1oP3Y9ImN1c3RvbS10aW1lIjpzLmhhc1BhcmVudChtLHRoaXMudGltZUF4aXMuZG9tLmZvcmVncm91bmQpP3Y9ImF4aXMiOnRoaXMudGltZUF4aXMyJiZzLmhhc1BhcmVudChtLHRoaXMudGltZUF4aXMyLmRvbS5mb3JlZ3JvdW5kKT92PSJheGlzIjpzLmhhc1BhcmVudChtLHRoaXMuaXRlbVNldC5kb20ubGFiZWxTZXQpP3Y9Imdyb3VwLWxhYmVsIjpzLmhhc1BhcmVudChtLHRoaXMuY3VycmVudFRpbWUuYmFyKT92PSJjdXJyZW50LXRpbWUiOnMuaGFzUGFyZW50KG0sdGhpcy5kb20uY2VudGVyKSYmKHY9ImJhY2tncm91bmQiKSx7ZXZlbnQ6dCxpdGVtOnI/ci5pZDpudWxsLGdyb3VwOmE/YS5ncm91cElkOm51bGwsd2hhdDp2LHBhZ2VYOnQuc3JjRXZlbnQ/dC5zcmNFdmVudC5wYWdlWDp0LnBhZ2VYLHBhZ2VZOnQuc3JjRXZlbnQ/dC5zcmNFdmVudC5wYWdlWTp0LnBhZ2VZLHg6byx5Om4sdGltZTpwLHNuYXBwZWRUaW1lOmZ9fSx0LmV4cG9ydHM9b30sZnVuY3Rpb24odCxlLGkpe2lmKCJ1bmRlZmluZWQiIT10eXBlb2Ygd2luZG93KXt2YXIgbz1pKDIxKSxuPXdpbmRvdy5IYW1tZXJ8fGkoMjIpO3QuZXhwb3J0cz1vKG4se3ByZXZlbnREZWZhdWx0OiJtb3VzZSJ9KX1lbHNlIHQuZXhwb3J0cz1mdW5jdGlvbigpe3Rocm93IEVycm9yKCJoYW1tZXIuanMgaXMgb25seSBhdmFpbGFibGUgaW4gYSBicm93c2VyLCBub3QgaW4gbm9kZS5qcy4iKX19LGZ1bmN0aW9uKHQsZSxpKXt2YXIgbyxuLHM7IWZ1bmN0aW9uKGkpe249W10sbz1pLHM9ImZ1bmN0aW9uIj09dHlwZW9mIG8/by5hcHBseShlLG4pOm8sISh2b2lkIDAhPT1zJiYodC5leHBvcnRzPXMpKX0oZnVuY3Rpb24oKXt2YXIgdD1udWxsO3JldHVybiBmdW5jdGlvbiBlKGksbyl7ZnVuY3Rpb24gbih0KXtyZXR1cm4gdC5tYXRjaCgvW14gXSsvZyl9ZnVuY3Rpb24gcyhlKXtpZigiaGFtbWVyLmlucHV0IiE9PWUudHlwZSl7aWYoZS5zcmNFdmVudC5faGFuZGxlZHx8KGUuc3JjRXZlbnQuX2hhbmRsZWQ9e30pLGUuc3JjRXZlbnQuX2hhbmRsZWRbZS50eXBlXSlyZXR1cm47ZS5zcmNFdmVudC5faGFuZGxlZFtlLnR5cGVdPSEwfXZhciBpPSExO2Uuc3RvcFByb3BhZ2F0aW9uPWZ1bmN0aW9uKCl7aT0hMH07dmFyIG89ZS5zcmNFdmVudC5zdG9wUHJvcGFnYXRpb247ImZ1bmN0aW9uIj09dHlwZW9mIG8mJihlLnNyY0V2ZW50LnN0b3BQcm9wYWdhdGlvbj1mdW5jdGlvbigpe28oKSxlLnN0b3BQcm9wYWdhdGlvbigpfSksZS5maXJzdFRhcmdldD10O2Zvcih2YXIgbj10O24mJiFpOyl7aWYobi5oYW1tZXIpZm9yKHZhciBzLHI9MDtyPG4uaGFtbWVyLmxlbmd0aDtyKyspaWYocz1uLmhhbW1lcltyXS5faGFuZGxlcnNbZS50eXBlXSlmb3IodmFyIGE9MDthPHMubGVuZ3RoJiYhaTthKyspc1thXShlKTtuPW4ucGFyZW50Tm9kZX19dmFyIHI9b3x8e3ByZXZlbnREZWZhdWx0OiExfTtpZihpLk1hbmFnZXIpe3ZhciBhPWksaD1mdW5jdGlvbih0LGkpe3ZhciBvPU9iamVjdC5jcmVhdGUocik7cmV0dXJuIGkmJmEuYXNzaWduKG8saSksZShuZXcgYSh0LG8pLG8pfTtyZXR1cm4gYS5hc3NpZ24oaCxhKSxoLk1hbmFnZXI9ZnVuY3Rpb24odCxpKXt2YXIgbz1PYmplY3QuY3JlYXRlKHIpO3JldHVybiBpJiZhLmFzc2lnbihvLGkpLGUobmV3IGEuTWFuYWdlcih0LG8pLG8pfSxofXZhciBkPU9iamVjdC5jcmVhdGUoaSksbD1pLmVsZW1lbnQ7cmV0dXJuIGwuaGFtbWVyfHwobC5oYW1tZXI9W10pLGwuaGFtbWVyLnB1c2goZCksaS5vbigiaGFtbWVyLmlucHV0IixmdW5jdGlvbihlKXsoci5wcmV2ZW50RGVmYXVsdD09PSEwfHxyLnByZXZlbnREZWZhdWx0PT09ZS5wb2ludGVyVHlwZSkmJmUucHJldmVudERlZmF1bHQoKSxlLmlzRmlyc3QmJih0PWUudGFyZ2V0KX0pLGQuX2hhbmRsZXJzPXt9LGQub249ZnVuY3Rpb24odCxlKXtyZXR1cm4gbih0KS5mb3JFYWNoKGZ1bmN0aW9uKHQpe3ZhciBvPWQuX2hhbmRsZXJzW3RdO298fChkLl9oYW5kbGVyc1t0XT1vPVtdLGkub24odCxzKSksby5wdXNoKGUpfSksZH0sZC5vZmY9ZnVuY3Rpb24odCxlKXtyZXR1cm4gbih0KS5mb3JFYWNoKGZ1bmN0aW9uKHQpe3ZhciBvPWQuX2hhbmRsZXJzW3RdO28mJihvPWU/by5maWx0ZXIoZnVuY3Rpb24odCl7cmV0dXJuIHQhPT1lfSk6W10sby5sZW5ndGg+MD9kLl9oYW5kbGVyc1t0XT1vOihpLm9mZih0LHMpLGRlbGV0ZSBkLl9oYW5kbGVyc1t0XSkpfSksZH0sZC5lbWl0PWZ1bmN0aW9uKGUsbyl7dD1vLnRhcmdldCxpLmVtaXQoZSxvKX0sZC5kZXN0cm95PWZ1bmN0aW9uKCl7dmFyIHQ9aS5lbGVtZW50LmhhbW1lcixlPXQuaW5kZXhPZihkKTstMSE9PWUmJnQuc3BsaWNlKGUsMSksdC5sZW5ndGh8fGRlbGV0ZSBpLmVsZW1lbnQuaGFtbWVyLGQuX2hhbmRsZXJzPXt9LGkuZGVzdHJveSgpfSxkfX0pfSxmdW5jdGlvbih0LGUsaSl7dmFyIG87IWZ1bmN0aW9uKG4scyxyLGEpe2Z1bmN0aW9uIGgodCxlLGkpe3JldHVybiBzZXRUaW1lb3V0KHAodCxpKSxlKX1mdW5jdGlvbiBkKHQsZSxpKXtyZXR1cm4gQXJyYXkuaXNBcnJheSh0KT8obCh0LGlbZV0saSksITApOiExfWZ1bmN0aW9uIGwodCxlLGkpe3ZhciBvO2lmKHQpaWYodC5mb3JFYWNoKXQuZm9yRWFjaChlLGkpO2Vsc2UgaWYodC5sZW5ndGghPT1hKWZvcihvPTA7bzx0Lmxlbmd0aDspZS5jYWxsKGksdFtvXSxvLHQpLG8rKztlbHNlIGZvcihvIGluIHQpdC5oYXNPd25Qcm9wZXJ0eShvKSYmZS5jYWxsKGksdFtvXSxvLHQpfWZ1bmN0aW9uIHUodCxlLGkpe3ZhciBvPSJERVBSRUNBVEVEIE1FVEhPRDogIitlKyJcbiIraSsiIEFUIFxuIjtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgZT1uZXcgRXJyb3IoImdldC1zdGFjay10cmFjZSIpLGk9ZSYmZS5zdGFjaz9lLnN0YWNrLnJlcGxhY2UoL15bXlwoXSs/W1xuJF0vZ20sIiIpLnJlcGxhY2UoL15ccythdFxzKy9nbSwiIikucmVwbGFjZSgvXk9iamVjdC48YW5vbnltb3VzPlxzKlwoL2dtLCJ7YW5vbnltb3VzfSgpQCIpOiJVbmtub3duIFN0YWNrIFRyYWNlIixzPW4uY29uc29sZSYmKG4uY29uc29sZS53YXJufHxuLmNvbnNvbGUubG9nKTtyZXR1cm4gcyYmcy5jYWxsKG4uY29uc29sZSxvLGkpLHQuYXBwbHkodGhpcyxhcmd1bWVudHMpfX1mdW5jdGlvbiBjKHQsZSxpKXt2YXIgbyxuPWUucHJvdG90eXBlO289dC5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZShuKSxvLmNvbnN0cnVjdG9yPXQsby5fc3VwZXI9bixpJiZ1dChvLGkpfWZ1bmN0aW9uIHAodCxlKXtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gdC5hcHBseShlLGFyZ3VtZW50cyl9fWZ1bmN0aW9uIGYodCxlKXtyZXR1cm4gdHlwZW9mIHQ9PWZ0P3QuYXBwbHkoZT9lWzBdfHxhOmEsZSk6dH1mdW5jdGlvbiBtKHQsZSl7cmV0dXJuIHQ9PT1hP2U6dH1mdW5jdGlvbiB2KHQsZSxpKXtsKHcoZSksZnVuY3Rpb24oZSl7dC5hZGRFdmVudExpc3RlbmVyKGUsaSwhMSl9KX1mdW5jdGlvbiBnKHQsZSxpKXtsKHcoZSksZnVuY3Rpb24oZSl7dC5yZW1vdmVFdmVudExpc3RlbmVyKGUsaSwhMSl9KX1mdW5jdGlvbiB5KHQsZSl7Zm9yKDt0Oyl7aWYodD09ZSlyZXR1cm4hMDt0PXQucGFyZW50Tm9kZX1yZXR1cm4hMX1mdW5jdGlvbiBiKHQsZSl7cmV0dXJuIHQuaW5kZXhPZihlKT4tMX1mdW5jdGlvbiB3KHQpe3JldHVybiB0LnRyaW0oKS5zcGxpdCgvXHMrL2cpfWZ1bmN0aW9uIF8odCxlLGkpe2lmKHQuaW5kZXhPZiYmIWkpcmV0dXJuIHQuaW5kZXhPZihlKTtmb3IodmFyIG89MDtvPHQubGVuZ3RoOyl7aWYoaSYmdFtvXVtpXT09ZXx8IWkmJnRbb109PT1lKXJldHVybiBvO28rK31yZXR1cm4tMX1mdW5jdGlvbiB4KHQpe3JldHVybiBBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbCh0LDApfWZ1bmN0aW9uIGsodCxlLGkpe2Zvcih2YXIgbz1bXSxuPVtdLHM9MDtzPHQubGVuZ3RoOyl7dmFyIHI9ZT90W3NdW2VdOnRbc107XyhuLHIpPDAmJm8ucHVzaCh0W3NdKSxuW3NdPXIscysrfXJldHVybiBpJiYobz1lP28uc29ydChmdW5jdGlvbih0LGkpe3JldHVybiB0W2VdPmlbZV19KTpvLnNvcnQoKSksb31mdW5jdGlvbiBPKHQsZSl7Zm9yKHZhciBpLG8sbj1lWzBdLnRvVXBwZXJDYXNlKCkrZS5zbGljZSgxKSxzPTA7czxjdC5sZW5ndGg7KXtpZihpPWN0W3NdLG89aT9pK246ZSxvIGluIHQpcmV0dXJuIG87cysrfXJldHVybiBhfWZ1bmN0aW9uIE0oKXtyZXR1cm4gd3QrK31mdW5jdGlvbiBEKHQpe3ZhciBlPXQub3duZXJEb2N1bWVudHx8dDtyZXR1cm4gZS5kZWZhdWx0Vmlld3x8ZS5wYXJlbnRXaW5kb3d8fG59ZnVuY3Rpb24gQyh0LGUpe3ZhciBpPXRoaXM7dGhpcy5tYW5hZ2VyPXQsdGhpcy5jYWxsYmFjaz1lLHRoaXMuZWxlbWVudD10LmVsZW1lbnQsdGhpcy50YXJnZXQ9dC5vcHRpb25zLmlucHV0VGFyZ2V0LHRoaXMuZG9tSGFuZGxlcj1mdW5jdGlvbihlKXtmKHQub3B0aW9ucy5lbmFibGUsW3RdKSYmaS5oYW5kbGVyKGUpfSx0aGlzLmluaXQoKX1mdW5jdGlvbiBUKHQpe3ZhciBlLGk9dC5vcHRpb25zLmlucHV0Q2xhc3M7cmV0dXJuIG5ldyhlPWk/aTprdD9XOk90P1Y6eHQ/cTpIKSh0LEUpfWZ1bmN0aW9uIEUodCxlLGkpe3ZhciBvPWkucG9pbnRlcnMubGVuZ3RoLG49aS5jaGFuZ2VkUG9pbnRlcnMubGVuZ3RoLHM9ZSZTdCYmby1uPT09MCxyPWUmKEl0fE50KSYmby1uPT09MDtpLmlzRmlyc3Q9ISFzLGkuaXNGaW5hbD0hIXIscyYmKHQuc2Vzc2lvbj17fSksaS5ldmVudFR5cGU9ZSxTKHQsaSksdC5lbWl0KCJoYW1tZXIuaW5wdXQiLGkpLHQucmVjb2duaXplKGkpLHQuc2Vzc2lvbi5wcmV2SW5wdXQ9aX1mdW5jdGlvbiBTKHQsZSl7dmFyIGk9dC5zZXNzaW9uLG89ZS5wb2ludGVycyxuPW8ubGVuZ3RoO2kuZmlyc3RJbnB1dHx8KGkuZmlyc3RJbnB1dD1OKGUpKSxuPjEmJiFpLmZpcnN0TXVsdGlwbGU/aS5maXJzdE11bHRpcGxlPU4oZSk6MT09PW4mJihpLmZpcnN0TXVsdGlwbGU9ITEpO3ZhciBzPWkuZmlyc3RJbnB1dCxyPWkuZmlyc3RNdWx0aXBsZSxhPXI/ci5jZW50ZXI6cy5jZW50ZXIsaD1lLmNlbnRlcj16KG8pO2UudGltZVN0YW1wPWd0KCksZS5kZWx0YVRpbWU9ZS50aW1lU3RhbXAtcy50aW1lU3RhbXAsZS5hbmdsZT1GKGEsaCksZS5kaXN0YW5jZT1CKGEsaCksUChpLGUpLGUub2Zmc2V0RGlyZWN0aW9uPUEoZS5kZWx0YVgsZS5kZWx0YVkpO3ZhciBkPUwoZS5kZWx0YVRpbWUsZS5kZWx0YVgsZS5kZWx0YVkpO2Uub3ZlcmFsbFZlbG9jaXR5WD1kLngsZS5vdmVyYWxsVmVsb2NpdHlZPWQueSxlLm92ZXJhbGxWZWxvY2l0eT12dChkLngpPnZ0KGQueSk/ZC54OmQueSxlLnNjYWxlPXI/UihyLnBvaW50ZXJzLG8pOjEsZS5yb3RhdGlvbj1yP2ooci5wb2ludGVycyxvKTowLGUubWF4UG9pbnRlcnM9aS5wcmV2SW5wdXQ/ZS5wb2ludGVycy5sZW5ndGg+aS5wcmV2SW5wdXQubWF4UG9pbnRlcnM/ZS5wb2ludGVycy5sZW5ndGg6aS5wcmV2SW5wdXQubWF4UG9pbnRlcnM6ZS5wb2ludGVycy5sZW5ndGgsSShpLGUpO3ZhciBsPXQuZWxlbWVudDt5KGUuc3JjRXZlbnQudGFyZ2V0LGwpJiYobD1lLnNyY0V2ZW50LnRhcmdldCksZS50YXJnZXQ9bH1mdW5jdGlvbiBQKHQsZSl7dmFyIGk9ZS5jZW50ZXIsbz10Lm9mZnNldERlbHRhfHx7fSxuPXQucHJldkRlbHRhfHx7fSxzPXQucHJldklucHV0fHx7fTsoZS5ldmVudFR5cGU9PT1TdHx8cy5ldmVudFR5cGU9PT1JdCkmJihuPXQucHJldkRlbHRhPXt4OnMuZGVsdGFYfHwwLHk6cy5kZWx0YVl8fDB9LG89dC5vZmZzZXREZWx0YT17eDppLngseTppLnl9KSxlLmRlbHRhWD1uLngrKGkueC1vLngpLGUuZGVsdGFZPW4ueSsoaS55LW8ueSl9ZnVuY3Rpb24gSSh0LGUpe3ZhciBpLG8sbixzLHI9dC5sYXN0SW50ZXJ2YWx8fGUsaD1lLnRpbWVTdGFtcC1yLnRpbWVTdGFtcDsKaWYoZS5ldmVudFR5cGUhPU50JiYoaD5FdHx8ci52ZWxvY2l0eT09PWEpKXt2YXIgZD1lLmRlbHRhWC1yLmRlbHRhWCxsPWUuZGVsdGFZLXIuZGVsdGFZLHU9TChoLGQsbCk7bz11Lngsbj11LnksaT12dCh1LngpPnZ0KHUueSk/dS54OnUueSxzPUEoZCxsKSx0Lmxhc3RJbnRlcnZhbD1lfWVsc2UgaT1yLnZlbG9jaXR5LG89ci52ZWxvY2l0eVgsbj1yLnZlbG9jaXR5WSxzPXIuZGlyZWN0aW9uO2UudmVsb2NpdHk9aSxlLnZlbG9jaXR5WD1vLGUudmVsb2NpdHlZPW4sZS5kaXJlY3Rpb249c31mdW5jdGlvbiBOKHQpe2Zvcih2YXIgZT1bXSxpPTA7aTx0LnBvaW50ZXJzLmxlbmd0aDspZVtpXT17Y2xpZW50WDptdCh0LnBvaW50ZXJzW2ldLmNsaWVudFgpLGNsaWVudFk6bXQodC5wb2ludGVyc1tpXS5jbGllbnRZKX0saSsrO3JldHVybnt0aW1lU3RhbXA6Z3QoKSxwb2ludGVyczplLGNlbnRlcjp6KGUpLGRlbHRhWDp0LmRlbHRhWCxkZWx0YVk6dC5kZWx0YVl9fWZ1bmN0aW9uIHoodCl7dmFyIGU9dC5sZW5ndGg7aWYoMT09PWUpcmV0dXJue3g6bXQodFswXS5jbGllbnRYKSx5Om10KHRbMF0uY2xpZW50WSl9O2Zvcih2YXIgaT0wLG89MCxuPTA7ZT5uOylpKz10W25dLmNsaWVudFgsbys9dFtuXS5jbGllbnRZLG4rKztyZXR1cm57eDptdChpL2UpLHk6bXQoby9lKX19ZnVuY3Rpb24gTCh0LGUsaSl7cmV0dXJue3g6ZS90fHwwLHk6aS90fHwwfX1mdW5jdGlvbiBBKHQsZSl7cmV0dXJuIHQ9PT1lP3p0OnZ0KHQpPj12dChlKT8wPnQ/THQ6QXQ6MD5lP0J0OkZ0fWZ1bmN0aW9uIEIodCxlLGkpe2l8fChpPVd0KTt2YXIgbz1lW2lbMF1dLXRbaVswXV0sbj1lW2lbMV1dLXRbaVsxXV07cmV0dXJuIE1hdGguc3FydChvKm8rbipuKX1mdW5jdGlvbiBGKHQsZSxpKXtpfHwoaT1XdCk7dmFyIG89ZVtpWzBdXS10W2lbMF1dLG49ZVtpWzFdXS10W2lbMV1dO3JldHVybiAxODAqTWF0aC5hdGFuMihuLG8pL01hdGguUEl9ZnVuY3Rpb24gaih0LGUpe3JldHVybiBGKGVbMV0sZVswXSxZdCkrRih0WzFdLHRbMF0sWXQpfWZ1bmN0aW9uIFIodCxlKXtyZXR1cm4gQihlWzBdLGVbMV0sWXQpL0IodFswXSx0WzFdLFl0KX1mdW5jdGlvbiBIKCl7dGhpcy5ldkVsPVZ0LHRoaXMuZXZXaW49VXQsdGhpcy5hbGxvdz0hMCx0aGlzLnByZXNzZWQ9ITEsQy5hcHBseSh0aGlzLGFyZ3VtZW50cyl9ZnVuY3Rpb24gVygpe3RoaXMuZXZFbD1adCx0aGlzLmV2V2luPUt0LEMuYXBwbHkodGhpcyxhcmd1bWVudHMpLHRoaXMuc3RvcmU9dGhpcy5tYW5hZ2VyLnNlc3Npb24ucG9pbnRlckV2ZW50cz1bXX1mdW5jdGlvbiBZKCl7dGhpcy5ldlRhcmdldD1KdCx0aGlzLmV2V2luPVF0LHRoaXMuc3RhcnRlZD0hMSxDLmFwcGx5KHRoaXMsYXJndW1lbnRzKX1mdW5jdGlvbiBHKHQsZSl7dmFyIGk9eCh0LnRvdWNoZXMpLG89eCh0LmNoYW5nZWRUb3VjaGVzKTtyZXR1cm4gZSYoSXR8TnQpJiYoaT1rKGkuY29uY2F0KG8pLCJpZGVudGlmaWVyIiwhMCkpLFtpLG9dfWZ1bmN0aW9uIFYoKXt0aGlzLmV2VGFyZ2V0PWVlLHRoaXMudGFyZ2V0SWRzPXt9LEMuYXBwbHkodGhpcyxhcmd1bWVudHMpfWZ1bmN0aW9uIFUodCxlKXt2YXIgaT14KHQudG91Y2hlcyksbz10aGlzLnRhcmdldElkcztpZihlJihTdHxQdCkmJjE9PT1pLmxlbmd0aClyZXR1cm4gb1tpWzBdLmlkZW50aWZpZXJdPSEwLFtpLGldO3ZhciBuLHMscj14KHQuY2hhbmdlZFRvdWNoZXMpLGE9W10saD10aGlzLnRhcmdldDtpZihzPWkuZmlsdGVyKGZ1bmN0aW9uKHQpe3JldHVybiB5KHQudGFyZ2V0LGgpfSksZT09PVN0KWZvcihuPTA7bjxzLmxlbmd0aDspb1tzW25dLmlkZW50aWZpZXJdPSEwLG4rKztmb3Iobj0wO248ci5sZW5ndGg7KW9bcltuXS5pZGVudGlmaWVyXSYmYS5wdXNoKHJbbl0pLGUmKEl0fE50KSYmZGVsZXRlIG9bcltuXS5pZGVudGlmaWVyXSxuKys7cmV0dXJuIGEubGVuZ3RoP1trKHMuY29uY2F0KGEpLCJpZGVudGlmaWVyIiwhMCksYV06dm9pZCAwfWZ1bmN0aW9uIHEoKXtDLmFwcGx5KHRoaXMsYXJndW1lbnRzKTt2YXIgdD1wKHRoaXMuaGFuZGxlcix0aGlzKTt0aGlzLnRvdWNoPW5ldyBWKHRoaXMubWFuYWdlcix0KSx0aGlzLm1vdXNlPW5ldyBIKHRoaXMubWFuYWdlcix0KX1mdW5jdGlvbiBYKHQsZSl7dGhpcy5tYW5hZ2VyPXQsdGhpcy5zZXQoZSl9ZnVuY3Rpb24gWih0KXtpZihiKHQsYWUpKXJldHVybiBhZTt2YXIgZT1iKHQsaGUpLGk9Yih0LGRlKTtyZXR1cm4gZSYmaT9hZTplfHxpP2U/aGU6ZGU6Yih0LHJlKT9yZTpzZX1mdW5jdGlvbiBLKHQpe3RoaXMub3B0aW9ucz11dCh7fSx0aGlzLmRlZmF1bHRzLHR8fHt9KSx0aGlzLmlkPU0oKSx0aGlzLm1hbmFnZXI9bnVsbCx0aGlzLm9wdGlvbnMuZW5hYmxlPW0odGhpcy5vcHRpb25zLmVuYWJsZSwhMCksdGhpcy5zdGF0ZT1sZSx0aGlzLnNpbXVsdGFuZW91cz17fSx0aGlzLnJlcXVpcmVGYWlsPVtdfWZ1bmN0aW9uICQodCl7cmV0dXJuIHQmbWU/ImNhbmNlbCI6dCZwZT8iZW5kIjp0JmNlPyJtb3ZlIjp0JnVlPyJzdGFydCI6IiJ9ZnVuY3Rpb24gSih0KXtyZXR1cm4gdD09RnQ/ImRvd24iOnQ9PUJ0PyJ1cCI6dD09THQ/ImxlZnQiOnQ9PUF0PyJyaWdodCI6IiJ9ZnVuY3Rpb24gUSh0LGUpe3ZhciBpPWUubWFuYWdlcjtyZXR1cm4gaT9pLmdldCh0KTp0fWZ1bmN0aW9uIHR0KCl7Sy5hcHBseSh0aGlzLGFyZ3VtZW50cyl9ZnVuY3Rpb24gZXQoKXt0dC5hcHBseSh0aGlzLGFyZ3VtZW50cyksdGhpcy5wWD1udWxsLHRoaXMucFk9bnVsbH1mdW5jdGlvbiBpdCgpe3R0LmFwcGx5KHRoaXMsYXJndW1lbnRzKX1mdW5jdGlvbiBvdCgpe0suYXBwbHkodGhpcyxhcmd1bWVudHMpLHRoaXMuX3RpbWVyPW51bGwsdGhpcy5faW5wdXQ9bnVsbH1mdW5jdGlvbiBudCgpe3R0LmFwcGx5KHRoaXMsYXJndW1lbnRzKX1mdW5jdGlvbiBzdCgpe3R0LmFwcGx5KHRoaXMsYXJndW1lbnRzKX1mdW5jdGlvbiBydCgpe0suYXBwbHkodGhpcyxhcmd1bWVudHMpLHRoaXMucFRpbWU9ITEsdGhpcy5wQ2VudGVyPSExLHRoaXMuX3RpbWVyPW51bGwsdGhpcy5faW5wdXQ9bnVsbCx0aGlzLmNvdW50PTB9ZnVuY3Rpb24gYXQodCxlKXtyZXR1cm4gZT1lfHx7fSxlLnJlY29nbml6ZXJzPW0oZS5yZWNvZ25pemVycyxhdC5kZWZhdWx0cy5wcmVzZXQpLG5ldyBodCh0LGUpfWZ1bmN0aW9uIGh0KHQsZSl7dGhpcy5vcHRpb25zPXV0KHt9LGF0LmRlZmF1bHRzLGV8fHt9KSx0aGlzLm9wdGlvbnMuaW5wdXRUYXJnZXQ9dGhpcy5vcHRpb25zLmlucHV0VGFyZ2V0fHx0LHRoaXMuaGFuZGxlcnM9e30sdGhpcy5zZXNzaW9uPXt9LHRoaXMucmVjb2duaXplcnM9W10sdGhpcy5lbGVtZW50PXQsdGhpcy5pbnB1dD1UKHRoaXMpLHRoaXMudG91Y2hBY3Rpb249bmV3IFgodGhpcyx0aGlzLm9wdGlvbnMudG91Y2hBY3Rpb24pLGR0KHRoaXMsITApLGwodGhpcy5vcHRpb25zLnJlY29nbml6ZXJzLGZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMuYWRkKG5ldyB0WzBdKHRbMV0pKTt0WzJdJiZlLnJlY29nbml6ZVdpdGgodFsyXSksdFszXSYmZS5yZXF1aXJlRmFpbHVyZSh0WzNdKX0sdGhpcyl9ZnVuY3Rpb24gZHQodCxlKXt2YXIgaT10LmVsZW1lbnQ7aS5zdHlsZSYmbCh0Lm9wdGlvbnMuY3NzUHJvcHMsZnVuY3Rpb24odCxvKXtpLnN0eWxlW08oaS5zdHlsZSxvKV09ZT90OiIifSl9ZnVuY3Rpb24gbHQodCxlKXt2YXIgaT1zLmNyZWF0ZUV2ZW50KCJFdmVudCIpO2kuaW5pdEV2ZW50KHQsITAsITApLGkuZ2VzdHVyZT1lLGUudGFyZ2V0LmRpc3BhdGNoRXZlbnQoaSl9dmFyIHV0LGN0PVsiIiwid2Via2l0IiwiTW96IiwiTVMiLCJtcyIsIm8iXSxwdD1zLmNyZWF0ZUVsZW1lbnQoImRpdiIpLGZ0PSJmdW5jdGlvbiIsbXQ9TWF0aC5yb3VuZCx2dD1NYXRoLmFicyxndD1EYXRlLm5vdzt1dD0iZnVuY3Rpb24iIT10eXBlb2YgT2JqZWN0LmFzc2lnbj9mdW5jdGlvbih0KXtpZih0PT09YXx8bnVsbD09PXQpdGhyb3cgbmV3IFR5cGVFcnJvcigiQ2Fubm90IGNvbnZlcnQgdW5kZWZpbmVkIG9yIG51bGwgdG8gb2JqZWN0Iik7Zm9yKHZhciBlPU9iamVjdCh0KSxpPTE7aTxhcmd1bWVudHMubGVuZ3RoO2krKyl7dmFyIG89YXJndW1lbnRzW2ldO2lmKG8hPT1hJiZudWxsIT09bylmb3IodmFyIG4gaW4gbylvLmhhc093blByb3BlcnR5KG4pJiYoZVtuXT1vW25dKX1yZXR1cm4gZX06T2JqZWN0LmFzc2lnbjt2YXIgeXQ9dShmdW5jdGlvbih0LGUsaSl7Zm9yKHZhciBvPU9iamVjdC5rZXlzKGUpLG49MDtuPG8ubGVuZ3RoOykoIWl8fGkmJnRbb1tuXV09PT1hKSYmKHRbb1tuXV09ZVtvW25dXSksbisrO3JldHVybiB0fSwiZXh0ZW5kIiwiVXNlIGBhc3NpZ25gLiIpLGJ0PXUoZnVuY3Rpb24odCxlKXtyZXR1cm4geXQodCxlLCEwKX0sIm1lcmdlIiwiVXNlIGBhc3NpZ25gLiIpLHd0PTEsX3Q9L21vYmlsZXx0YWJsZXR8aXAoYWR8aG9uZXxvZCl8YW5kcm9pZC9pLHh0PSJvbnRvdWNoc3RhcnQiaW4gbixrdD1PKG4sIlBvaW50ZXJFdmVudCIpIT09YSxPdD14dCYmX3QudGVzdChuYXZpZ2F0b3IudXNlckFnZW50KSxNdD0idG91Y2giLER0PSJwZW4iLEN0PSJtb3VzZSIsVHQ9ImtpbmVjdCIsRXQ9MjUsU3Q9MSxQdD0yLEl0PTQsTnQ9OCx6dD0xLEx0PTIsQXQ9NCxCdD04LEZ0PTE2LGp0PUx0fEF0LFJ0PUJ0fEZ0LEh0PWp0fFJ0LFd0PVsieCIsInkiXSxZdD1bImNsaWVudFgiLCJjbGllbnRZIl07Qy5wcm90b3R5cGU9e2hhbmRsZXI6ZnVuY3Rpb24oKXt9LGluaXQ6ZnVuY3Rpb24oKXt0aGlzLmV2RWwmJnYodGhpcy5lbGVtZW50LHRoaXMuZXZFbCx0aGlzLmRvbUhhbmRsZXIpLHRoaXMuZXZUYXJnZXQmJnYodGhpcy50YXJnZXQsdGhpcy5ldlRhcmdldCx0aGlzLmRvbUhhbmRsZXIpLHRoaXMuZXZXaW4mJnYoRCh0aGlzLmVsZW1lbnQpLHRoaXMuZXZXaW4sdGhpcy5kb21IYW5kbGVyKX0sZGVzdHJveTpmdW5jdGlvbigpe3RoaXMuZXZFbCYmZyh0aGlzLmVsZW1lbnQsdGhpcy5ldkVsLHRoaXMuZG9tSGFuZGxlciksdGhpcy5ldlRhcmdldCYmZyh0aGlzLnRhcmdldCx0aGlzLmV2VGFyZ2V0LHRoaXMuZG9tSGFuZGxlciksdGhpcy5ldldpbiYmZyhEKHRoaXMuZWxlbWVudCksdGhpcy5ldldpbix0aGlzLmRvbUhhbmRsZXIpfX07dmFyIEd0PXttb3VzZWRvd246U3QsbW91c2Vtb3ZlOlB0LG1vdXNldXA6SXR9LFZ0PSJtb3VzZWRvd24iLFV0PSJtb3VzZW1vdmUgbW91c2V1cCI7YyhILEMse2hhbmRsZXI6ZnVuY3Rpb24odCl7dmFyIGU9R3RbdC50eXBlXTtlJlN0JiYwPT09dC5idXR0b24mJih0aGlzLnByZXNzZWQ9ITApLGUmUHQmJjEhPT10LndoaWNoJiYoZT1JdCksdGhpcy5wcmVzc2VkJiZ0aGlzLmFsbG93JiYoZSZJdCYmKHRoaXMucHJlc3NlZD0hMSksdGhpcy5jYWxsYmFjayh0aGlzLm1hbmFnZXIsZSx7cG9pbnRlcnM6W3RdLGNoYW5nZWRQb2ludGVyczpbdF0scG9pbnRlclR5cGU6Q3Qsc3JjRXZlbnQ6dH0pKX19KTt2YXIgcXQ9e3BvaW50ZXJkb3duOlN0LHBvaW50ZXJtb3ZlOlB0LHBvaW50ZXJ1cDpJdCxwb2ludGVyY2FuY2VsOk50LHBvaW50ZXJvdXQ6TnR9LFh0PXsyOk10LDM6RHQsNDpDdCw1OlR0fSxadD0icG9pbnRlcmRvd24iLEt0PSJwb2ludGVybW92ZSBwb2ludGVydXAgcG9pbnRlcmNhbmNlbCI7bi5NU1BvaW50ZXJFdmVudCYmIW4uUG9pbnRlckV2ZW50JiYoWnQ9Ik1TUG9pbnRlckRvd24iLEt0PSJNU1BvaW50ZXJNb3ZlIE1TUG9pbnRlclVwIE1TUG9pbnRlckNhbmNlbCIpLGMoVyxDLHtoYW5kbGVyOmZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMuc3RvcmUsaT0hMSxvPXQudHlwZS50b0xvd2VyQ2FzZSgpLnJlcGxhY2UoIm1zIiwiIiksbj1xdFtvXSxzPVh0W3QucG9pbnRlclR5cGVdfHx0LnBvaW50ZXJUeXBlLHI9cz09TXQsYT1fKGUsdC5wb2ludGVySWQsInBvaW50ZXJJZCIpO24mU3QmJigwPT09dC5idXR0b258fHIpPzA+YSYmKGUucHVzaCh0KSxhPWUubGVuZ3RoLTEpOm4mKEl0fE50KSYmKGk9ITApLDA+YXx8KGVbYV09dCx0aGlzLmNhbGxiYWNrKHRoaXMubWFuYWdlcixuLHtwb2ludGVyczplLGNoYW5nZWRQb2ludGVyczpbdF0scG9pbnRlclR5cGU6cyxzcmNFdmVudDp0fSksaSYmZS5zcGxpY2UoYSwxKSl9fSk7dmFyICR0PXt0b3VjaHN0YXJ0OlN0LHRvdWNobW92ZTpQdCx0b3VjaGVuZDpJdCx0b3VjaGNhbmNlbDpOdH0sSnQ9InRvdWNoc3RhcnQiLFF0PSJ0b3VjaHN0YXJ0IHRvdWNobW92ZSB0b3VjaGVuZCB0b3VjaGNhbmNlbCI7YyhZLEMse2hhbmRsZXI6ZnVuY3Rpb24odCl7dmFyIGU9JHRbdC50eXBlXTtpZihlPT09U3QmJih0aGlzLnN0YXJ0ZWQ9ITApLHRoaXMuc3RhcnRlZCl7dmFyIGk9Ry5jYWxsKHRoaXMsdCxlKTtlJihJdHxOdCkmJmlbMF0ubGVuZ3RoLWlbMV0ubGVuZ3RoPT09MCYmKHRoaXMuc3RhcnRlZD0hMSksdGhpcy5jYWxsYmFjayh0aGlzLm1hbmFnZXIsZSx7cG9pbnRlcnM6aVswXSxjaGFuZ2VkUG9pbnRlcnM6aVsxXSxwb2ludGVyVHlwZTpNdCxzcmNFdmVudDp0fSl9fX0pO3ZhciB0ZT17dG91Y2hzdGFydDpTdCx0b3VjaG1vdmU6UHQsdG91Y2hlbmQ6SXQsdG91Y2hjYW5jZWw6TnR9LGVlPSJ0b3VjaHN0YXJ0IHRvdWNobW92ZSB0b3VjaGVuZCB0b3VjaGNhbmNlbCI7YyhWLEMse2hhbmRsZXI6ZnVuY3Rpb24odCl7dmFyIGU9dGVbdC50eXBlXSxpPVUuY2FsbCh0aGlzLHQsZSk7aSYmdGhpcy5jYWxsYmFjayh0aGlzLm1hbmFnZXIsZSx7cG9pbnRlcnM6aVswXSxjaGFuZ2VkUG9pbnRlcnM6aVsxXSxwb2ludGVyVHlwZTpNdCxzcmNFdmVudDp0fSl9fSksYyhxLEMse2hhbmRsZXI6ZnVuY3Rpb24odCxlLGkpe3ZhciBvPWkucG9pbnRlclR5cGU9PU10LG49aS5wb2ludGVyVHlwZT09Q3Q7aWYobyl0aGlzLm1vdXNlLmFsbG93PSExO2Vsc2UgaWYobiYmIXRoaXMubW91c2UuYWxsb3cpcmV0dXJuO2UmKEl0fE50KSYmKHRoaXMubW91c2UuYWxsb3c9ITApLHRoaXMuY2FsbGJhY2sodCxlLGkpfSxkZXN0cm95OmZ1bmN0aW9uKCl7dGhpcy50b3VjaC5kZXN0cm95KCksdGhpcy5tb3VzZS5kZXN0cm95KCl9fSk7dmFyIGllPU8ocHQuc3R5bGUsInRvdWNoQWN0aW9uIiksb2U9aWUhPT1hLG5lPSJjb21wdXRlIixzZT0iYXV0byIscmU9Im1hbmlwdWxhdGlvbiIsYWU9Im5vbmUiLGhlPSJwYW4teCIsZGU9InBhbi15IjtYLnByb3RvdHlwZT17c2V0OmZ1bmN0aW9uKHQpe3Q9PW5lJiYodD10aGlzLmNvbXB1dGUoKSksb2UmJnRoaXMubWFuYWdlci5lbGVtZW50LnN0eWxlJiYodGhpcy5tYW5hZ2VyLmVsZW1lbnQuc3R5bGVbaWVdPXQpLHRoaXMuYWN0aW9ucz10LnRvTG93ZXJDYXNlKCkudHJpbSgpfSx1cGRhdGU6ZnVuY3Rpb24oKXt0aGlzLnNldCh0aGlzLm1hbmFnZXIub3B0aW9ucy50b3VjaEFjdGlvbil9LGNvbXB1dGU6ZnVuY3Rpb24oKXt2YXIgdD1bXTtyZXR1cm4gbCh0aGlzLm1hbmFnZXIucmVjb2duaXplcnMsZnVuY3Rpb24oZSl7ZihlLm9wdGlvbnMuZW5hYmxlLFtlXSkmJih0PXQuY29uY2F0KGUuZ2V0VG91Y2hBY3Rpb24oKSkpfSksWih0LmpvaW4oIiAiKSl9LHByZXZlbnREZWZhdWx0czpmdW5jdGlvbih0KXtpZighb2Upe3ZhciBlPXQuc3JjRXZlbnQsaT10Lm9mZnNldERpcmVjdGlvbjtpZih0aGlzLm1hbmFnZXIuc2Vzc2lvbi5wcmV2ZW50ZWQpcmV0dXJuIHZvaWQgZS5wcmV2ZW50RGVmYXVsdCgpO3ZhciBvPXRoaXMuYWN0aW9ucyxuPWIobyxhZSkscz1iKG8sZGUpLHI9YihvLGhlKTtpZihuKXt2YXIgYT0xPT09dC5wb2ludGVycy5sZW5ndGgsaD10LmRpc3RhbmNlPDIsZD10LmRlbHRhVGltZTwyNTA7aWYoYSYmaCYmZClyZXR1cm59aWYoIXJ8fCFzKXJldHVybiBufHxzJiZpJmp0fHxyJiZpJlJ0P3RoaXMucHJldmVudFNyYyhlKTp2b2lkIDB9fSxwcmV2ZW50U3JjOmZ1bmN0aW9uKHQpe3RoaXMubWFuYWdlci5zZXNzaW9uLnByZXZlbnRlZD0hMCx0LnByZXZlbnREZWZhdWx0KCl9fTt2YXIgbGU9MSx1ZT0yLGNlPTQscGU9OCxmZT1wZSxtZT0xNix2ZT0zMjtLLnByb3RvdHlwZT17ZGVmYXVsdHM6e30sc2V0OmZ1bmN0aW9uKHQpe3JldHVybiB1dCh0aGlzLm9wdGlvbnMsdCksdGhpcy5tYW5hZ2VyJiZ0aGlzLm1hbmFnZXIudG91Y2hBY3Rpb24udXBkYXRlKCksdGhpc30scmVjb2duaXplV2l0aDpmdW5jdGlvbih0KXtpZihkKHQsInJlY29nbml6ZVdpdGgiLHRoaXMpKXJldHVybiB0aGlzO3ZhciBlPXRoaXMuc2ltdWx0YW5lb3VzO3JldHVybiB0PVEodCx0aGlzKSxlW3QuaWRdfHwoZVt0LmlkXT10LHQucmVjb2duaXplV2l0aCh0aGlzKSksdGhpc30sZHJvcFJlY29nbml6ZVdpdGg6ZnVuY3Rpb24odCl7cmV0dXJuIGQodCwiZHJvcFJlY29nbml6ZVdpdGgiLHRoaXMpP3RoaXM6KHQ9USh0LHRoaXMpLGRlbGV0ZSB0aGlzLnNpbXVsdGFuZW91c1t0LmlkXSx0aGlzKX0scmVxdWlyZUZhaWx1cmU6ZnVuY3Rpb24odCl7aWYoZCh0LCJyZXF1aXJlRmFpbHVyZSIsdGhpcykpcmV0dXJuIHRoaXM7dmFyIGU9dGhpcy5yZXF1aXJlRmFpbDtyZXR1cm4gdD1RKHQsdGhpcyksLTE9PT1fKGUsdCkmJihlLnB1c2godCksdC5yZXF1aXJlRmFpbHVyZSh0aGlzKSksdGhpc30sZHJvcFJlcXVpcmVGYWlsdXJlOmZ1bmN0aW9uKHQpe2lmKGQodCwiZHJvcFJlcXVpcmVGYWlsdXJlIix0aGlzKSlyZXR1cm4gdGhpczt0PVEodCx0aGlzKTt2YXIgZT1fKHRoaXMucmVxdWlyZUZhaWwsdCk7cmV0dXJuIGU+LTEmJnRoaXMucmVxdWlyZUZhaWwuc3BsaWNlKGUsMSksdGhpc30saGFzUmVxdWlyZUZhaWx1cmVzOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMucmVxdWlyZUZhaWwubGVuZ3RoPjB9LGNhblJlY29nbml6ZVdpdGg6ZnVuY3Rpb24odCl7cmV0dXJuISF0aGlzLnNpbXVsdGFuZW91c1t0LmlkXX0sZW1pdDpmdW5jdGlvbih0KXtmdW5jdGlvbiBlKGUpe2kubWFuYWdlci5lbWl0KGUsdCl9dmFyIGk9dGhpcyxvPXRoaXMuc3RhdGU7cGU+byYmZShpLm9wdGlvbnMuZXZlbnQrJChvKSksZShpLm9wdGlvbnMuZXZlbnQpLHQuYWRkaXRpb25hbEV2ZW50JiZlKHQuYWRkaXRpb25hbEV2ZW50KSxvPj1wZSYmZShpLm9wdGlvbnMuZXZlbnQrJChvKSl9LHRyeUVtaXQ6ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuY2FuRW1pdCgpP3RoaXMuZW1pdCh0KTp2b2lkKHRoaXMuc3RhdGU9dmUpfSxjYW5FbWl0OmZ1bmN0aW9uKCl7Zm9yKHZhciB0PTA7dDx0aGlzLnJlcXVpcmVGYWlsLmxlbmd0aDspe2lmKCEodGhpcy5yZXF1aXJlRmFpbFt0XS5zdGF0ZSYodmV8bGUpKSlyZXR1cm4hMTt0Kyt9cmV0dXJuITB9LHJlY29nbml6ZTpmdW5jdGlvbih0KXt2YXIgZT11dCh7fSx0KTtyZXR1cm4gZih0aGlzLm9wdGlvbnMuZW5hYmxlLFt0aGlzLGVdKT8odGhpcy5zdGF0ZSYoZmV8bWV8dmUpJiYodGhpcy5zdGF0ZT1sZSksdGhpcy5zdGF0ZT10aGlzLnByb2Nlc3MoZSksdm9pZCh0aGlzLnN0YXRlJih1ZXxjZXxwZXxtZSkmJnRoaXMudHJ5RW1pdChlKSkpOih0aGlzLnJlc2V0KCksdm9pZCh0aGlzLnN0YXRlPXZlKSl9LHByb2Nlc3M6ZnVuY3Rpb24odCl7fSxnZXRUb3VjaEFjdGlvbjpmdW5jdGlvbigpe30scmVzZXQ6ZnVuY3Rpb24oKXt9fSxjKHR0LEsse2RlZmF1bHRzOntwb2ludGVyczoxfSxhdHRyVGVzdDpmdW5jdGlvbih0KXt2YXIgZT10aGlzLm9wdGlvbnMucG9pbnRlcnM7cmV0dXJuIDA9PT1lfHx0LnBvaW50ZXJzLmxlbmd0aD09PWV9LHByb2Nlc3M6ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5zdGF0ZSxpPXQuZXZlbnRUeXBlLG89ZSYodWV8Y2UpLG49dGhpcy5hdHRyVGVzdCh0KTtyZXR1cm4gbyYmKGkmTnR8fCFuKT9lfG1lOm98fG4/aSZJdD9lfHBlOmUmdWU/ZXxjZTp1ZTp2ZX19KSxjKGV0LHR0LHtkZWZhdWx0czp7ZXZlbnQ6InBhbiIsdGhyZXNob2xkOjEwLHBvaW50ZXJzOjEsZGlyZWN0aW9uOkh0fSxnZXRUb3VjaEFjdGlvbjpmdW5jdGlvbigpe3ZhciB0PXRoaXMub3B0aW9ucy5kaXJlY3Rpb24sZT1bXTtyZXR1cm4gdCZqdCYmZS5wdXNoKGRlKSx0JlJ0JiZlLnB1c2goaGUpLGV9LGRpcmVjdGlvblRlc3Q6ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5vcHRpb25zLGk9ITAsbz10LmRpc3RhbmNlLG49dC5kaXJlY3Rpb24scz10LmRlbHRhWCxyPXQuZGVsdGFZO3JldHVybiBuJmUuZGlyZWN0aW9ufHwoZS5kaXJlY3Rpb24manQ/KG49MD09PXM/enQ6MD5zP0x0OkF0LGk9cyE9dGhpcy5wWCxvPU1hdGguYWJzKHQuZGVsdGFYKSk6KG49MD09PXI/enQ6MD5yP0J0OkZ0LGk9ciE9dGhpcy5wWSxvPU1hdGguYWJzKHQuZGVsdGFZKSkpLHQuZGlyZWN0aW9uPW4saSYmbz5lLnRocmVzaG9sZCYmbiZlLmRpcmVjdGlvbn0sYXR0clRlc3Q6ZnVuY3Rpb24odCl7cmV0dXJuIHR0LnByb3RvdHlwZS5hdHRyVGVzdC5jYWxsKHRoaXMsdCkmJih0aGlzLnN0YXRlJnVlfHwhKHRoaXMuc3RhdGUmdWUpJiZ0aGlzLmRpcmVjdGlvblRlc3QodCkpfSxlbWl0OmZ1bmN0aW9uKHQpe3RoaXMucFg9dC5kZWx0YVgsdGhpcy5wWT10LmRlbHRhWTt2YXIgZT1KKHQuZGlyZWN0aW9uKTtlJiYodC5hZGRpdGlvbmFsRXZlbnQ9dGhpcy5vcHRpb25zLmV2ZW50K2UpLHRoaXMuX3N1cGVyLmVtaXQuY2FsbCh0aGlzLHQpfX0pLGMoaXQsdHQse2RlZmF1bHRzOntldmVudDoicGluY2giLHRocmVzaG9sZDowLHBvaW50ZXJzOjJ9LGdldFRvdWNoQWN0aW9uOmZ1bmN0aW9uKCl7cmV0dXJuW2FlXX0sYXR0clRlc3Q6ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuX3N1cGVyLmF0dHJUZXN0LmNhbGwodGhpcyx0KSYmKE1hdGguYWJzKHQuc2NhbGUtMSk+dGhpcy5vcHRpb25zLnRocmVzaG9sZHx8dGhpcy5zdGF0ZSZ1ZSl9LGVtaXQ6ZnVuY3Rpb24odCl7aWYoMSE9PXQuc2NhbGUpe3ZhciBlPXQuc2NhbGU8MT8iaW4iOiJvdXQiO3QuYWRkaXRpb25hbEV2ZW50PXRoaXMub3B0aW9ucy5ldmVudCtlfXRoaXMuX3N1cGVyLmVtaXQuY2FsbCh0aGlzLHQpfX0pLGMob3QsSyx7ZGVmYXVsdHM6e2V2ZW50OiJwcmVzcyIscG9pbnRlcnM6MSx0aW1lOjI1MSx0aHJlc2hvbGQ6OX0sZ2V0VG91Y2hBY3Rpb246ZnVuY3Rpb24oKXtyZXR1cm5bc2VdfSxwcm9jZXNzOmZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMub3B0aW9ucyxpPXQucG9pbnRlcnMubGVuZ3RoPT09ZS5wb2ludGVycyxvPXQuZGlzdGFuY2U8ZS50aHJlc2hvbGQsbj10LmRlbHRhVGltZT5lLnRpbWU7aWYodGhpcy5faW5wdXQ9dCwhb3x8IWl8fHQuZXZlbnRUeXBlJihJdHxOdCkmJiFuKXRoaXMucmVzZXQoKTtlbHNlIGlmKHQuZXZlbnRUeXBlJlN0KXRoaXMucmVzZXQoKSx0aGlzLl90aW1lcj1oKGZ1bmN0aW9uKCl7dGhpcy5zdGF0ZT1mZSx0aGlzLnRyeUVtaXQoKX0sZS50aW1lLHRoaXMpO2Vsc2UgaWYodC5ldmVudFR5cGUmSXQpcmV0dXJuIGZlO3JldHVybiB2ZX0scmVzZXQ6ZnVuY3Rpb24oKXtjbGVhclRpbWVvdXQodGhpcy5fdGltZXIpfSxlbWl0OmZ1bmN0aW9uKHQpe3RoaXMuc3RhdGU9PT1mZSYmKHQmJnQuZXZlbnRUeXBlJkl0P3RoaXMubWFuYWdlci5lbWl0KHRoaXMub3B0aW9ucy5ldmVudCsidXAiLHQpOih0aGlzLl9pbnB1dC50aW1lU3RhbXA9Z3QoKSx0aGlzLm1hbmFnZXIuZW1pdCh0aGlzLm9wdGlvbnMuZXZlbnQsdGhpcy5faW5wdXQpKSl9fSksYyhudCx0dCx7ZGVmYXVsdHM6e2V2ZW50OiJyb3RhdGUiLHRocmVzaG9sZDowLHBvaW50ZXJzOjJ9LGdldFRvdWNoQWN0aW9uOmZ1bmN0aW9uKCl7cmV0dXJuW2FlXX0sYXR0clRlc3Q6ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuX3N1cGVyLmF0dHJUZXN0LmNhbGwodGhpcyx0KSYmKE1hdGguYWJzKHQucm90YXRpb24pPnRoaXMub3B0aW9ucy50aHJlc2hvbGR8fHRoaXMuc3RhdGUmdWUpfX0pLGMoc3QsdHQse2RlZmF1bHRzOntldmVudDoic3dpcGUiLHRocmVzaG9sZDoxMCx2ZWxvY2l0eTouMyxkaXJlY3Rpb246anR8UnQscG9pbnRlcnM6MX0sZ2V0VG91Y2hBY3Rpb246ZnVuY3Rpb24oKXtyZXR1cm4gZXQucHJvdG90eXBlLmdldFRvdWNoQWN0aW9uLmNhbGwodGhpcyl9LGF0dHJUZXN0OmZ1bmN0aW9uKHQpe3ZhciBlLGk9dGhpcy5vcHRpb25zLmRpcmVjdGlvbjtyZXR1cm4gaSYoanR8UnQpP2U9dC5vdmVyYWxsVmVsb2NpdHk6aSZqdD9lPXQub3ZlcmFsbFZlbG9jaXR5WDppJlJ0JiYoZT10Lm92ZXJhbGxWZWxvY2l0eVkpLHRoaXMuX3N1cGVyLmF0dHJUZXN0LmNhbGwodGhpcyx0KSYmaSZ0Lm9mZnNldERpcmVjdGlvbiYmdC5kaXN0YW5jZT50aGlzLm9wdGlvbnMudGhyZXNob2xkJiZ0Lm1heFBvaW50ZXJzPT10aGlzLm9wdGlvbnMucG9pbnRlcnMmJnZ0KGUpPnRoaXMub3B0aW9ucy52ZWxvY2l0eSYmdC5ldmVudFR5cGUmSXR9LGVtaXQ6ZnVuY3Rpb24odCl7dmFyIGU9Sih0Lm9mZnNldERpcmVjdGlvbik7ZSYmdGhpcy5tYW5hZ2VyLmVtaXQodGhpcy5vcHRpb25zLmV2ZW50K2UsdCksdGhpcy5tYW5hZ2VyLmVtaXQodGhpcy5vcHRpb25zLmV2ZW50LHQpfX0pLGMocnQsSyx7ZGVmYXVsdHM6e2V2ZW50OiJ0YXAiLHBvaW50ZXJzOjEsdGFwczoxLGludGVydmFsOjMwMCx0aW1lOjI1MCx0aHJlc2hvbGQ6OSxwb3NUaHJlc2hvbGQ6MTB9LGdldFRvdWNoQWN0aW9uOmZ1bmN0aW9uKCl7cmV0dXJuW3JlXX0scHJvY2VzczpmdW5jdGlvbih0KXt2YXIgZT10aGlzLm9wdGlvbnMsaT10LnBvaW50ZXJzLmxlbmd0aD09PWUucG9pbnRlcnMsbz10LmRpc3RhbmNlPGUudGhyZXNob2xkLG49dC5kZWx0YVRpbWU8ZS50aW1lO2lmKHRoaXMucmVzZXQoKSx0LmV2ZW50VHlwZSZTdCYmMD09PXRoaXMuY291bnQpcmV0dXJuIHRoaXMuZmFpbFRpbWVvdXQoKTtpZihvJiZuJiZpKXtpZih0LmV2ZW50VHlwZSE9SXQpcmV0dXJuIHRoaXMuZmFpbFRpbWVvdXQoKTt2YXIgcz10aGlzLnBUaW1lP3QudGltZVN0YW1wLXRoaXMucFRpbWU8ZS5pbnRlcnZhbDohMCxyPSF0aGlzLnBDZW50ZXJ8fEIodGhpcy5wQ2VudGVyLHQuY2VudGVyKTxlLnBvc1RocmVzaG9sZDt0aGlzLnBUaW1lPXQudGltZVN0YW1wLHRoaXMucENlbnRlcj10LmNlbnRlcixyJiZzP3RoaXMuY291bnQrPTE6dGhpcy5jb3VudD0xLHRoaXMuX2lucHV0PXQ7dmFyIGE9dGhpcy5jb3VudCVlLnRhcHM7aWYoMD09PWEpcmV0dXJuIHRoaXMuaGFzUmVxdWlyZUZhaWx1cmVzKCk/KHRoaXMuX3RpbWVyPWgoZnVuY3Rpb24oKXt0aGlzLnN0YXRlPWZlLHRoaXMudHJ5RW1pdCgpfSxlLmludGVydmFsLHRoaXMpLHVlKTpmZX1yZXR1cm4gdmV9LGZhaWxUaW1lb3V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3RpbWVyPWgoZnVuY3Rpb24oKXt0aGlzLnN0YXRlPXZlfSx0aGlzLm9wdGlvbnMuaW50ZXJ2YWwsdGhpcyksdmV9LHJlc2V0OmZ1bmN0aW9uKCl7Y2xlYXJUaW1lb3V0KHRoaXMuX3RpbWVyKX0sZW1pdDpmdW5jdGlvbigpe3RoaXMuc3RhdGU9PWZlJiYodGhpcy5faW5wdXQudGFwQ291bnQ9dGhpcy5jb3VudCx0aGlzLm1hbmFnZXIuZW1pdCh0aGlzLm9wdGlvbnMuZXZlbnQsdGhpcy5faW5wdXQpKX19KSxhdC5WRVJTSU9OPSIyLjAuNiIsYXQuZGVmYXVsdHM9e2RvbUV2ZW50czohMSx0b3VjaEFjdGlvbjpuZSxlbmFibGU6ITAsaW5wdXRUYXJnZXQ6bnVsbCxpbnB1dENsYXNzOm51bGwscHJlc2V0OltbbnQse2VuYWJsZTohMX1dLFtpdCx7ZW5hYmxlOiExfSxbInJvdGF0ZSJdXSxbc3Qse2RpcmVjdGlvbjpqdH1dLFtldCx7ZGlyZWN0aW9uOmp0fSxbInN3aXBlIl1dLFtydF0sW3J0LHtldmVudDoiZG91YmxldGFwIix0YXBzOjJ9LFsidGFwIl1dLFtvdF1dLGNzc1Byb3BzOnt1c2VyU2VsZWN0OiJub25lIix0b3VjaFNlbGVjdDoibm9uZSIsdG91Y2hDYWxsb3V0OiJub25lIixjb250ZW50Wm9vbWluZzoibm9uZSIsdXNlckRyYWc6Im5vbmUiLHRhcEhpZ2hsaWdodENvbG9yOiJyZ2JhKDAsMCwwLDApIn19O3ZhciBnZT0xLHllPTI7aHQucHJvdG90eXBlPXtzZXQ6ZnVuY3Rpb24odCl7cmV0dXJuIHV0KHRoaXMub3B0aW9ucyx0KSx0LnRvdWNoQWN0aW9uJiZ0aGlzLnRvdWNoQWN0aW9uLnVwZGF0ZSgpLHQuaW5wdXRUYXJnZXQmJih0aGlzLmlucHV0LmRlc3Ryb3koKSx0aGlzLmlucHV0LnRhcmdldD10LmlucHV0VGFyZ2V0LHRoaXMuaW5wdXQuaW5pdCgpKSx0aGlzfSxzdG9wOmZ1bmN0aW9uKHQpe3RoaXMuc2Vzc2lvbi5zdG9wcGVkPXQ/eWU6Z2V9LHJlY29nbml6ZTpmdW5jdGlvbih0KXt2YXIgZT10aGlzLnNlc3Npb247aWYoIWUuc3RvcHBlZCl7dGhpcy50b3VjaEFjdGlvbi5wcmV2ZW50RGVmYXVsdHModCk7dmFyIGksbz10aGlzLnJlY29nbml6ZXJzLG49ZS5jdXJSZWNvZ25pemVyOyghbnx8biYmbi5zdGF0ZSZmZSkmJihuPWUuY3VyUmVjb2duaXplcj1udWxsKTtmb3IodmFyIHM9MDtzPG8ubGVuZ3RoOylpPW9bc10sZS5zdG9wcGVkPT09eWV8fG4mJmkhPW4mJiFpLmNhblJlY29nbml6ZVdpdGgobik/aS5yZXNldCgpOmkucmVjb2duaXplKHQpLCFuJiZpLnN0YXRlJih1ZXxjZXxwZSkmJihuPWUuY3VyUmVjb2duaXplcj1pKSxzKyt9fSxnZXQ6ZnVuY3Rpb24odCl7aWYodCBpbnN0YW5jZW9mIEspcmV0dXJuIHQ7Zm9yKHZhciBlPXRoaXMucmVjb2duaXplcnMsaT0wO2k8ZS5sZW5ndGg7aSsrKWlmKGVbaV0ub3B0aW9ucy5ldmVudD09dClyZXR1cm4gZVtpXTtyZXR1cm4gbnVsbH0sYWRkOmZ1bmN0aW9uKHQpe2lmKGQodCwiYWRkIix0aGlzKSlyZXR1cm4gdGhpczt2YXIgZT10aGlzLmdldCh0Lm9wdGlvbnMuZXZlbnQpO3JldHVybiBlJiZ0aGlzLnJlbW92ZShlKSx0aGlzLnJlY29nbml6ZXJzLnB1c2godCksdC5tYW5hZ2VyPXRoaXMsdGhpcy50b3VjaEFjdGlvbi51cGRhdGUoKSx0fSxyZW1vdmU6ZnVuY3Rpb24odCl7aWYoZCh0LCJyZW1vdmUiLHRoaXMpKXJldHVybiB0aGlzO2lmKHQ9dGhpcy5nZXQodCkpe3ZhciBlPXRoaXMucmVjb2duaXplcnMsaT1fKGUsdCk7LTEhPT1pJiYoZS5zcGxpY2UoaSwxKSx0aGlzLnRvdWNoQWN0aW9uLnVwZGF0ZSgpKX1yZXR1cm4gdGhpc30sb246ZnVuY3Rpb24odCxlKXt2YXIgaT10aGlzLmhhbmRsZXJzO3JldHVybiBsKHcodCksZnVuY3Rpb24odCl7aVt0XT1pW3RdfHxbXSxpW3RdLnB1c2goZSl9KSx0aGlzfSxvZmY6ZnVuY3Rpb24odCxlKXt2YXIgaT10aGlzLmhhbmRsZXJzO3JldHVybiBsKHcodCksZnVuY3Rpb24odCl7ZT9pW3RdJiZpW3RdLnNwbGljZShfKGlbdF0sZSksMSk6ZGVsZXRlIGlbdF19KSx0aGlzfSxlbWl0OmZ1bmN0aW9uKHQsZSl7dGhpcy5vcHRpb25zLmRvbUV2ZW50cyYmbHQodCxlKTt2YXIgaT10aGlzLmhhbmRsZXJzW3RdJiZ0aGlzLmhhbmRsZXJzW3RdLnNsaWNlKCk7aWYoaSYmaS5sZW5ndGgpe2UudHlwZT10LGUucHJldmVudERlZmF1bHQ9ZnVuY3Rpb24oKXtlLnNyY0V2ZW50LnByZXZlbnREZWZhdWx0KCl9O2Zvcih2YXIgbz0wO288aS5sZW5ndGg7KWlbb10oZSksbysrfX0sZGVzdHJveTpmdW5jdGlvbigpe3RoaXMuZWxlbWVudCYmZHQodGhpcywhMSksdGhpcy5oYW5kbGVycz17fSx0aGlzLnNlc3Npb249e30sdGhpcy5pbnB1dC5kZXN0cm95KCksdGhpcy5lbGVtZW50PW51bGx9fSx1dChhdCx7SU5QVVRfU1RBUlQ6U3QsSU5QVVRfTU9WRTpQdCxJTlBVVF9FTkQ6SXQsSU5QVVRfQ0FOQ0VMOk50LFNUQVRFX1BPU1NJQkxFOmxlLFNUQVRFX0JFR0FOOnVlLFNUQVRFX0NIQU5HRUQ6Y2UsU1RBVEVfRU5ERUQ6cGUsU1RBVEVfUkVDT0dOSVpFRDpmZSxTVEFURV9DQU5DRUxMRUQ6bWUsU1RBVEVfRkFJTEVEOnZlLERJUkVDVElPTl9OT05FOnp0LERJUkVDVElPTl9MRUZUOkx0LERJUkVDVElPTl9SSUdIVDpBdCxESVJFQ1RJT05fVVA6QnQsRElSRUNUSU9OX0RPV046RnQsRElSRUNUSU9OX0hPUklaT05UQUw6anQsRElSRUNUSU9OX1ZFUlRJQ0FMOlJ0LERJUkVDVElPTl9BTEw6SHQsTWFuYWdlcjpodCxJbnB1dDpDLFRvdWNoQWN0aW9uOlgsVG91Y2hJbnB1dDpWLE1vdXNlSW5wdXQ6SCxQb2ludGVyRXZlbnRJbnB1dDpXLFRvdWNoTW91c2VJbnB1dDpxLFNpbmdsZVRvdWNoSW5wdXQ6WSxSZWNvZ25pemVyOkssQXR0clJlY29nbml6ZXI6dHQsVGFwOnJ0LFBhbjpldCxTd2lwZTpzdCxQaW5jaDppdCxSb3RhdGU6bnQsUHJlc3M6b3Qsb246dixvZmY6ZyxlYWNoOmwsbWVyZ2U6YnQsZXh0ZW5kOnl0LGFzc2lnbjp1dCxpbmhlcml0OmMsYmluZEZuOnAscHJlZml4ZWQ6T30pO3ZhciBiZT0idW5kZWZpbmVkIiE9dHlwZW9mIG4/bjoidW5kZWZpbmVkIiE9dHlwZW9mIHNlbGY/c2VsZjp7fTtiZS5IYW1tZXI9YXQsbz1mdW5jdGlvbigpe3JldHVybiBhdH0uY2FsbChlLGksZSx0KSwhKG8hPT1hJiYodC5leHBvcnRzPW8pKX0od2luZG93LGRvY3VtZW50LCJIYW1tZXIiKX0sZnVuY3Rpb24odCxlLGkpe2Z1bmN0aW9uIG8odCxlKXt2YXIgaT1hKCkuaG91cnMoMCkubWludXRlcygwKS5zZWNvbmRzKDApLm1pbGxpc2Vjb25kcygwKTt0aGlzLnN0YXJ0PWkuY2xvbmUoKS5hZGQoLTMsImRheXMiKS52YWx1ZU9mKCksdGhpcy5lbmQ9aS5jbG9uZSgpLmFkZCg0LCJkYXlzIikudmFsdWVPZigpLHRoaXMuYm9keT10LHRoaXMuZGVsdGFEaWZmZXJlbmNlPTAsdGhpcy5zY2FsZU9mZnNldD0wLHRoaXMuc3RhcnRUb0Zyb250PSExLHRoaXMuZW5kVG9Gcm9udD0hMCx0aGlzLmRlZmF1bHRPcHRpb25zPXtzdGFydDpudWxsLGVuZDpudWxsLG1vbWVudDphLGRpcmVjdGlvbjoiaG9yaXpvbnRhbCIsbW92ZWFibGU6ITAsem9vbWFibGU6ITAsbWluOm51bGwsbWF4Om51bGwsem9vbU1pbjoxMCx6b29tTWF4OjMxNTM2ZTEwfSx0aGlzLm9wdGlvbnM9ci5leHRlbmQoe30sdGhpcy5kZWZhdWx0T3B0aW9ucyksdGhpcy5wcm9wcz17dG91Y2g6e319LHRoaXMuYW5pbWF0aW9uVGltZXI9bnVsbCx0aGlzLmJvZHkuZW1pdHRlci5vbigicGFuc3RhcnQiLHRoaXMuX29uRHJhZ1N0YXJ0LmJpbmQodGhpcykpLHRoaXMuYm9keS5lbWl0dGVyLm9uKCJwYW5tb3ZlIix0aGlzLl9vbkRyYWcuYmluZCh0aGlzKSksdGhpcy5ib2R5LmVtaXR0ZXIub24oInBhbmVuZCIsdGhpcy5fb25EcmFnRW5kLmJpbmQodGhpcykpLHRoaXMuYm9keS5lbWl0dGVyLm9uKCJtb3VzZXdoZWVsIix0aGlzLl9vbk1vdXNlV2hlZWwuYmluZCh0aGlzKSksdGhpcy5ib2R5LmVtaXR0ZXIub24oInRvdWNoIix0aGlzLl9vblRvdWNoLmJpbmQodGhpcykpLHRoaXMuYm9keS5lbWl0dGVyLm9uKCJwaW5jaCIsdGhpcy5fb25QaW5jaC5iaW5kKHRoaXMpKSx0aGlzLnNldE9wdGlvbnMoZSl9ZnVuY3Rpb24gbih0KXtpZigiaG9yaXpvbnRhbCIhPXQmJiJ2ZXJ0aWNhbCIhPXQpdGhyb3cgbmV3IFR5cGVFcnJvcignVW5rbm93biBkaXJlY3Rpb24gIicrdCsnIi4gQ2hvb3NlICJob3Jpem9udGFsIiBvciAidmVydGljYWwiLicpfWZ1bmN0aW9uIHModCxlKXtyZXR1cm57eDp0Lngtci5nZXRBYnNvbHV0ZUxlZnQoZSkseTp0Lnktci5nZXRBYnNvbHV0ZVRvcChlKX19dmFyIHI9aSgxKSxhPShpKDI0KSxpKDIpKSxoPWkoMjUpLGQ9aSgyNik7by5wcm90b3R5cGU9bmV3IGgsby5wcm90b3R5cGUuc2V0T3B0aW9ucz1mdW5jdGlvbih0KXtpZih0KXt2YXIgZT1bImRpcmVjdGlvbiIsIm1pbiIsIm1heCIsInpvb21NaW4iLCJ6b29tTWF4IiwibW92ZWFibGUiLCJ6b29tYWJsZSIsIm1vbWVudCIsImFjdGl2YXRlIiwiaGlkZGVuRGF0ZXMiLCJ6b29tS2V5Il07ci5zZWxlY3RpdmVFeHRlbmQoZSx0aGlzLm9wdGlvbnMsdCksKCJzdGFydCJpbiB0fHwiZW5kImluIHQpJiZ0aGlzLnNldFJhbmdlKHQuc3RhcnQsdC5lbmQpfX0sby5wcm90b3R5cGUuc2V0UmFuZ2U9ZnVuY3Rpb24odCxlLGksbyl7byE9PSEwJiYobz0hMSk7dmFyIG49dm9pZCAwIT10P3IuY29udmVydCh0LCJEYXRlIikudmFsdWVPZigpOm51bGwscz12b2lkIDAhPWU/ci5jb252ZXJ0KGUsIkRhdGUiKS52YWx1ZU9mKCk6bnVsbDtpZih0aGlzLl9jYW5jZWxBbmltYXRpb24oKSxpKXt2YXIgYT10aGlzLGg9dGhpcy5zdGFydCxsPXRoaXMuZW5kLHU9Im9iamVjdCI9PXR5cGVvZiBpJiYiZHVyYXRpb24iaW4gaT9pLmR1cmF0aW9uOjUwMCxjPSJvYmplY3QiPT10eXBlb2YgaSYmImVhc2luZ0Z1bmN0aW9uImluIGk/aS5lYXNpbmdGdW5jdGlvbjoiZWFzZUluT3V0UXVhZCIscD1yLmVhc2luZ0Z1bmN0aW9uc1tjXTtpZighcCl0aHJvdyBuZXcgRXJyb3IoIlVua25vd24gZWFzaW5nIGZ1bmN0aW9uICIrSlNPTi5zdHJpbmdpZnkoYykrIi4gQ2hvb3NlIGZyb206ICIrT2JqZWN0LmtleXMoci5lYXNpbmdGdW5jdGlvbnMpLmpvaW4oIiwgIikpO3ZhciBmPShuZXcgRGF0ZSkudmFsdWVPZigpLG09ITEsdj1mdW5jdGlvbiBiKCl7aWYoIWEucHJvcHMudG91Y2guZHJhZ2dpbmcpe3ZhciB0PShuZXcgRGF0ZSkudmFsdWVPZigpLGU9dC1mLGk9cChlL3UpLHI9ZT51LGM9cnx8bnVsbD09PW4/bjpoKyhuLWgpKmksdj1yfHxudWxsPT09cz9zOmwrKHMtbCkqaTtnPWEuX2FwcGx5UmFuZ2UoYyx2KSxkLnVwZGF0ZUhpZGRlbkRhdGVzKGEub3B0aW9ucy5tb21lbnQsYS5ib2R5LGEub3B0aW9ucy5oaWRkZW5EYXRlcyksbT1tfHxnLGcmJmEuYm9keS5lbWl0dGVyLmVtaXQoInJhbmdlY2hhbmdlIix7c3RhcnQ6bmV3IERhdGUoYS5zdGFydCksZW5kOm5ldyBEYXRlKGEuZW5kKSxieVVzZXI6b30pLHI/bSYmYS5ib2R5LmVtaXR0ZXIuZW1pdCgicmFuZ2VjaGFuZ2VkIix7c3RhcnQ6bmV3IERhdGUoYS5zdGFydCksZW5kOm5ldyBEYXRlKGEuZW5kKSxieVVzZXI6b30pOmEuYW5pbWF0aW9uVGltZXI9c2V0VGltZW91dChiLDIwKX19O3JldHVybiB2KCl9dmFyIGc9dGhpcy5fYXBwbHlSYW5nZShuLHMpO2lmKGQudXBkYXRlSGlkZGVuRGF0ZXModGhpcy5vcHRpb25zLm1vbWVudCx0aGlzLmJvZHksdGhpcy5vcHRpb25zLmhpZGRlbkRhdGVzKSxnKXt2YXIgeT17c3RhcnQ6bmV3IERhdGUodGhpcy5zdGFydCksZW5kOm5ldyBEYXRlKHRoaXMuZW5kKSxieVVzZXI6b307dGhpcy5ib2R5LmVtaXR0ZXIuZW1pdCgicmFuZ2VjaGFuZ2UiLHkpLHRoaXMuYm9keS5lbWl0dGVyLmVtaXQoInJhbmdlY2hhbmdlZCIseSl9fSxvLnByb3RvdHlwZS5fY2FuY2VsQW5pbWF0aW9uPWZ1bmN0aW9uKCl7dGhpcy5hbmltYXRpb25UaW1lciYmKGNsZWFyVGltZW91dCh0aGlzLmFuaW1hdGlvblRpbWVyKSx0aGlzLmFuaW1hdGlvblRpbWVyPW51bGwpfSxvLnByb3RvdHlwZS5fYXBwbHlSYW5nZT1mdW5jdGlvbih0LGUpe3ZhciBpLG89bnVsbCE9dD9yLmNvbnZlcnQodCwiRGF0ZSIpLnZhbHVlT2YoKTp0aGlzLnN0YXJ0LG49bnVsbCE9ZT9yLmNvbnZlcnQoZSwiRGF0ZSIpLnZhbHVlT2YoKTp0aGlzLmVuZCxzPW51bGwhPXRoaXMub3B0aW9ucy5tYXg/ci5jb252ZXJ0KHRoaXMub3B0aW9ucy5tYXgsIkRhdGUiKS52YWx1ZU9mKCk6bnVsbCxhPW51bGwhPXRoaXMub3B0aW9ucy5taW4/ci5jb252ZXJ0KHRoaXMub3B0aW9ucy5taW4sIkRhdGUiKS52YWx1ZU9mKCk6bnVsbDtpZihpc05hTihvKXx8bnVsbD09PW8pdGhyb3cgbmV3IEVycm9yKCdJbnZhbGlkIHN0YXJ0ICInK3QrJyInKTtpZihpc05hTihuKXx8bnVsbD09PW4pdGhyb3cgbmV3IEVycm9yKCdJbnZhbGlkIGVuZCAiJytlKyciJyk7aWYobz5uJiYobj1vKSxudWxsIT09YSYmYT5vJiYoaT1hLW8sbys9aSxuKz1pLG51bGwhPXMmJm4+cyYmKG49cykpLG51bGwhPT1zJiZuPnMmJihpPW4tcyxvLT1pLG4tPWksbnVsbCE9YSYmYT5vJiYobz1hKSksbnVsbCE9PXRoaXMub3B0aW9ucy56b29tTWluKXt2YXIgaD1wYXJzZUZsb2F0KHRoaXMub3B0aW9ucy56b29tTWluKTswPmgmJihoPTApLGg+bi1vJiYodGhpcy5lbmQtdGhpcy5zdGFydD09PWgmJm8+dGhpcy5zdGFydCYmbjx0aGlzLmVuZD8obz10aGlzLnN0YXJ0LG49dGhpcy5lbmQpOihpPWgtKG4tbyksby09aS8yLG4rPWkvMikpfWlmKG51bGwhPT10aGlzLm9wdGlvbnMuem9vbU1heCl7dmFyIGQ9cGFyc2VGbG9hdCh0aGlzLm9wdGlvbnMuem9vbU1heCk7MD5kJiYoZD0wKSxuLW8+ZCYmKHRoaXMuZW5kLXRoaXMuc3RhcnQ9PT1kJiZvPHRoaXMuc3RhcnQmJm4+dGhpcy5lbmQ/KG89dGhpcy5zdGFydCxuPXRoaXMuZW5kKTooaT1uLW8tZCxvKz1pLzIsbi09aS8yKSl9dmFyIGw9dGhpcy5zdGFydCE9b3x8dGhpcy5lbmQhPW47cmV0dXJuIG8+PXRoaXMuc3RhcnQmJm88PXRoaXMuZW5kfHxuPj10aGlzLnN0YXJ0JiZuPD10aGlzLmVuZHx8dGhpcy5zdGFydD49byYmdGhpcy5zdGFydDw9bnx8dGhpcy5lbmQ+PW8mJnRoaXMuZW5kPD1ufHx0aGlzLmJvZHkuZW1pdHRlci5lbWl0KCJjaGVja1JhbmdlZEl0ZW1zIiksdGhpcy5zdGFydD1vLHRoaXMuZW5kPW4sbH0sby5wcm90b3R5cGUuZ2V0UmFuZ2U9ZnVuY3Rpb24oKXtyZXR1cm57c3RhcnQ6dGhpcy5zdGFydCxlbmQ6dGhpcy5lbmR9fSxvLnByb3RvdHlwZS5jb252ZXJzaW9uPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIG8uY29udmVyc2lvbih0aGlzLnN0YXJ0LHRoaXMuZW5kLHQsZSl9LG8uY29udmVyc2lvbj1mdW5jdGlvbih0LGUsaSxvKXtyZXR1cm4gdm9pZCAwPT09byYmKG89MCksMCE9aSYmZS10IT0wP3tvZmZzZXQ6dCxzY2FsZTppLyhlLXQtbyl9OntvZmZzZXQ6MCxzY2FsZToxfX0sby5wcm90b3R5cGUuX29uRHJhZ1N0YXJ0PWZ1bmN0aW9uKHQpe3RoaXMuZGVsdGFEaWZmZXJlbmNlPTAsdGhpcy5wcmV2aW91c0RlbHRhPTAsdGhpcy5vcHRpb25zLm1vdmVhYmxlJiZ0aGlzLl9pc0luc2lkZVJhbmdlKHQpJiZ0aGlzLnByb3BzLnRvdWNoLmFsbG93RHJhZ2dpbmcmJih0aGlzLnByb3BzLnRvdWNoLnN0YXJ0PXRoaXMuc3RhcnQsdGhpcy5wcm9wcy50b3VjaC5lbmQ9dGhpcy5lbmQsdGhpcy5wcm9wcy50b3VjaC5kcmFnZ2luZz0hMCx0aGlzLmJvZHkuZG9tLnJvb3QmJih0aGlzLmJvZHkuZG9tLnJvb3Quc3R5bGUuY3Vyc29yPSJtb3ZlIikpfSxvLnByb3RvdHlwZS5fb25EcmFnPWZ1bmN0aW9uKHQpe2lmKHRoaXMucHJvcHMudG91Y2guZHJhZ2dpbmcmJnRoaXMub3B0aW9ucy5tb3ZlYWJsZSYmdGhpcy5wcm9wcy50b3VjaC5hbGxvd0RyYWdnaW5nKXt2YXIgZT10aGlzLm9wdGlvbnMuZGlyZWN0aW9uO24oZSk7dmFyIGk9Imhvcml6b250YWwiPT1lP3QuZGVsdGFYOnQuZGVsdGFZO2ktPXRoaXMuZGVsdGFEaWZmZXJlbmNlO3ZhciBvPXRoaXMucHJvcHMudG91Y2guZW5kLXRoaXMucHJvcHMudG91Y2guc3RhcnQscz1kLmdldEhpZGRlbkR1cmF0aW9uQmV0d2Vlbih0aGlzLmJvZHkuaGlkZGVuRGF0ZXMsdGhpcy5zdGFydCx0aGlzLmVuZCk7by09czt2YXIgcj0iaG9yaXpvbnRhbCI9PWU/dGhpcy5ib2R5LmRvbVByb3BzLmNlbnRlci53aWR0aDp0aGlzLmJvZHkuZG9tUHJvcHMuY2VudGVyLmhlaWdodCxhPS1pL3IqbyxoPXRoaXMucHJvcHMudG91Y2guc3RhcnQrYSxsPXRoaXMucHJvcHMudG91Y2guZW5kK2EsdT1kLnNuYXBBd2F5RnJvbUhpZGRlbih0aGlzLmJvZHkuaGlkZGVuRGF0ZXMsaCx0aGlzLnByZXZpb3VzRGVsdGEtaSwhMCksYz1kLnNuYXBBd2F5RnJvbUhpZGRlbih0aGlzLmJvZHkuaGlkZGVuRGF0ZXMsbCx0aGlzLnByZXZpb3VzRGVsdGEtaSwhMCk7aWYodSE9aHx8YyE9bClyZXR1cm4gdGhpcy5kZWx0YURpZmZlcmVuY2UrPWksdGhpcy5wcm9wcy50b3VjaC5zdGFydD11LHRoaXMucHJvcHMudG91Y2guZW5kPWMsdm9pZCB0aGlzLl9vbkRyYWcodCk7dGhpcy5wcmV2aW91c0RlbHRhPWksdGhpcy5fYXBwbHlSYW5nZShoLGwpLHRoaXMuYm9keS5lbWl0dGVyLmVtaXQoInJhbmdlY2hhbmdlIix7c3RhcnQ6bmV3IERhdGUodGhpcy5zdGFydCksZW5kOm5ldyBEYXRlKHRoaXMuZW5kKSxieVVzZXI6ITB9KX19LG8ucHJvdG90eXBlLl9vbkRyYWdFbmQ9ZnVuY3Rpb24odCl7dGhpcy5wcm9wcy50b3VjaC5kcmFnZ2luZyYmdGhpcy5vcHRpb25zLm1vdmVhYmxlJiZ0aGlzLnByb3BzLnRvdWNoLmFsbG93RHJhZ2dpbmcmJih0aGlzLnByb3BzLnRvdWNoLmRyYWdnaW5nPSExLHRoaXMuYm9keS5kb20ucm9vdCYmKHRoaXMuYm9keS5kb20ucm9vdC5zdHlsZS5jdXJzb3I9ImF1dG8iKSx0aGlzLmJvZHkuZW1pdHRlci5lbWl0KCJyYW5nZWNoYW5nZWQiLHtzdGFydDpuZXcgRGF0ZSh0aGlzLnN0YXJ0KSxlbmQ6bmV3IERhdGUodGhpcy5lbmQpLGJ5VXNlcjohMH0pKX0sby5wcm90b3R5cGUuX29uTW91c2VXaGVlbD1mdW5jdGlvbih0KXtpZih0aGlzLm9wdGlvbnMuem9vbWFibGUmJnRoaXMub3B0aW9ucy5tb3ZlYWJsZSYmdGhpcy5faXNJbnNpZGVSYW5nZSh0KSYmKCF0aGlzLm9wdGlvbnMuem9vbUtleXx8dFt0aGlzLm9wdGlvbnMuem9vbUtleV0pKXt2YXIgZT0wO2lmKHQud2hlZWxEZWx0YT9lPXQud2hlZWxEZWx0YS8xMjA6dC5kZXRhaWwmJihlPS10LmRldGFpbC8zKSxlKXt2YXIgaTtpPTA+ZT8xLWUvNToxLygxK2UvNSk7dmFyIG89cyh7eDp0LmNsaWVudFgseTp0LmNsaWVudFl9LHRoaXMuYm9keS5kb20uY2VudGVyKSxuPXRoaXMuX3BvaW50ZXJUb0RhdGUobyk7dGhpcy56b29tKGksbixlKX10LnByZXZlbnREZWZhdWx0KCl9fSxvLnByb3RvdHlwZS5fb25Ub3VjaD1mdW5jdGlvbih0KXt0aGlzLnByb3BzLnRvdWNoLnN0YXJ0PXRoaXMuc3RhcnQsdGhpcy5wcm9wcy50b3VjaC5lbmQ9dGhpcy5lbmQsdGhpcy5wcm9wcy50b3VjaC5hbGxvd0RyYWdnaW5nPSEwLHRoaXMucHJvcHMudG91Y2guY2VudGVyPW51bGwsdGhpcy5zY2FsZU9mZnNldD0wLHRoaXMuZGVsdGFEaWZmZXJlbmNlPTB9LG8ucHJvdG90eXBlLl9vblBpbmNoPWZ1bmN0aW9uKHQpe2lmKHRoaXMub3B0aW9ucy56b29tYWJsZSYmdGhpcy5vcHRpb25zLm1vdmVhYmxlKXt0aGlzLnByb3BzLnRvdWNoLmFsbG93RHJhZ2dpbmc9ITEsdGhpcy5wcm9wcy50b3VjaC5jZW50ZXJ8fCh0aGlzLnByb3BzLnRvdWNoLmNlbnRlcj1zKHQuY2VudGVyLHRoaXMuYm9keS5kb20uY2VudGVyKSk7dmFyIGU9MS8odC5zY2FsZSt0aGlzLnNjYWxlT2Zmc2V0KSxpPXRoaXMuX3BvaW50ZXJUb0RhdGUodGhpcy5wcm9wcy50b3VjaC5jZW50ZXIpLG89ZC5nZXRIaWRkZW5EdXJhdGlvbkJldHdlZW4odGhpcy5ib2R5LmhpZGRlbkRhdGVzLHRoaXMuc3RhcnQsdGhpcy5lbmQpLG49ZC5nZXRIaWRkZW5EdXJhdGlvbkJlZm9yZSh0aGlzLm9wdGlvbnMubW9tZW50LHRoaXMuYm9keS5oaWRkZW5EYXRlcyx0aGlzLGkpLHI9by1uLGE9aS1uKyh0aGlzLnByb3BzLnRvdWNoLnN0YXJ0LShpLW4pKSplLGg9aStyKyh0aGlzLnByb3BzLnRvdWNoLmVuZC0oaStyKSkqZTt0aGlzLnN0YXJ0VG9Gcm9udD0wPj0xLWUsdGhpcy5lbmRUb0Zyb250PTA+PWUtMTt2YXIgbD1kLnNuYXBBd2F5RnJvbUhpZGRlbih0aGlzLmJvZHkuaGlkZGVuRGF0ZXMsYSwxLWUsITApLHU9ZC5zbmFwQXdheUZyb21IaWRkZW4odGhpcy5ib2R5LmhpZGRlbkRhdGVzLGgsZS0xLCEwKTsobCE9YXx8dSE9aCkmJih0aGlzLnByb3BzLnRvdWNoLnN0YXJ0PWwsdGhpcy5wcm9wcy50b3VjaC5lbmQ9dSx0aGlzLnNjYWxlT2Zmc2V0PTEtdC5zY2FsZSxhPWwsaD11KSx0aGlzLnNldFJhbmdlKGEsaCwhMSwhMCksdGhpcy5zdGFydFRvRnJvbnQ9ITEsdGhpcy5lbmRUb0Zyb250PSEwfX0sby5wcm90b3R5cGUuX2lzSW5zaWRlUmFuZ2U9ZnVuY3Rpb24odCl7dmFyIGU9dC5jZW50ZXI/dC5jZW50ZXIueDp0LmNsaWVudFgsaT1lLXIuZ2V0QWJzb2x1dGVMZWZ0KHRoaXMuYm9keS5kb20uY2VudGVyQ29udGFpbmVyKSxvPXRoaXMuYm9keS51dGlsLnRvVGltZShpKTtyZXR1cm4gbz49dGhpcy5zdGFydCYmbzw9dGhpcy5lbmR9LG8ucHJvdG90eXBlLl9wb2ludGVyVG9EYXRlPWZ1bmN0aW9uKHQpe3ZhciBlLGk9dGhpcy5vcHRpb25zLmRpcmVjdGlvbjtpZihuKGkpLCJob3Jpem9udGFsIj09aSlyZXR1cm4gdGhpcy5ib2R5LnV0aWwudG9UaW1lKHQueCkudmFsdWVPZigpO3ZhciBvPXRoaXMuYm9keS5kb21Qcm9wcy5jZW50ZXIuaGVpZ2h0O3JldHVybiBlPXRoaXMuY29udmVyc2lvbihvKSx0LnkvZS5zY2FsZStlLm9mZnNldH0sby5wcm90b3R5cGUuem9vbT1mdW5jdGlvbih0LGUsaSl7bnVsbD09ZSYmKGU9KHRoaXMuc3RhcnQrdGhpcy5lbmQpLzIpO3ZhciBvPWQuZ2V0SGlkZGVuRHVyYXRpb25CZXR3ZWVuKHRoaXMuYm9keS5oaWRkZW5EYXRlcyx0aGlzLnN0YXJ0LHRoaXMuZW5kKSxuPWQuZ2V0SGlkZGVuRHVyYXRpb25CZWZvcmUodGhpcy5vcHRpb25zLm1vbWVudCx0aGlzLmJvZHkuaGlkZGVuRGF0ZXMsdGhpcyxlKSxzPW8tbixyPWUtbisodGhpcy5zdGFydC0oZS1uKSkqdCxhPWUrcysodGhpcy5lbmQtKGUrcykpKnQ7dGhpcy5zdGFydFRvRnJvbnQ9aT4wPyExOiEwLHRoaXMuZW5kVG9Gcm9udD0taT4wPyExOiEwO3ZhciBoPWQuc25hcEF3YXlGcm9tSGlkZGVuKHRoaXMuYm9keS5oaWRkZW5EYXRlcyxyLGksITApLGw9ZC5zbmFwQXdheUZyb21IaWRkZW4odGhpcy5ib2R5LmhpZGRlbkRhdGVzLGEsLWksITApOyhoIT1yfHxsIT1hKSYmKHI9aCxhPWwpLHRoaXMuc2V0UmFuZ2UocixhLCExLCEwKSx0aGlzLnN0YXJ0VG9Gcm9udD0hMSx0aGlzLmVuZFRvRnJvbnQ9ITB9LG8ucHJvdG90eXBlLm1vdmU9ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5lbmQtdGhpcy5zdGFydCxpPXRoaXMuc3RhcnQrZSp0LG89dGhpcy5lbmQrZSp0O3RoaXMuc3RhcnQ9aSx0aGlzLmVuZD1vfSxvLnByb3RvdHlwZS5tb3ZlVG89ZnVuY3Rpb24odCl7dmFyIGU9KHRoaXMuc3RhcnQrdGhpcy5lbmQpLzIsaT1lLXQsbz10aGlzLnN0YXJ0LWksbj10aGlzLmVuZC1pO3RoaXMuc2V0UmFuZ2UobyxuKX0sdC5leHBvcnRzPW99LGZ1bmN0aW9uKHQsZSxpKXtpKDIwKTtlLm9uVG91Y2g9ZnVuY3Rpb24odCxlKXtlLmlucHV0SGFuZGxlcj1mdW5jdGlvbih0KXt0LmlzRmlyc3QmJiFvJiYoZSh0KSxvPSEwLHNldFRpbWVvdXQoZnVuY3Rpb24oKXtvPSExfSwwKSl9LHQub24oImhhbW1lci5pbnB1dCIsZS5pbnB1dEhhbmRsZXIpfTt2YXIgbz0hMTtlLm9uUmVsZWFzZT1mdW5jdGlvbih0LGUpe3JldHVybiBlLmlucHV0SGFuZGxlcj1mdW5jdGlvbih0KXt0LmlzRmluYWwmJiFuJiYoZSh0KSxuPSEwLHNldFRpbWVvdXQoZnVuY3Rpb24oKXtuPSExfSwwKSl9LHQub24oImhhbW1lci5pbnB1dCIsZS5pbnB1dEhhbmRsZXIpfTt2YXIgbj0hMTtlLm9mZlRvdWNoPWZ1bmN0aW9uKHQsZSl7dC5vZmYoImhhbW1lci5pbnB1dCIsZS5pbnB1dEhhbmRsZXIpfSxlLm9mZlJlbGVhc2U9ZS5vZmZUb3VjaH0sZnVuY3Rpb24odCxlKXtmdW5jdGlvbiBpKHQsZSl7dGhpcy5vcHRpb25zPW51bGwsdGhpcy5wcm9wcz1udWxsfWkucHJvdG90eXBlLnNldE9wdGlvbnM9ZnVuY3Rpb24odCl7dCYmdXRpbC5leHRlbmQodGhpcy5vcHRpb25zLHQpfSxpLnByb3RvdHlwZS5yZWRyYXc9ZnVuY3Rpb24oKXtyZXR1cm4hMX0saS5wcm90b3R5cGUuZGVzdHJveT1mdW5jdGlvbigpe30saS5wcm90b3R5cGUuX2lzUmVzaXplZD1mdW5jdGlvbigpe3ZhciB0PXRoaXMucHJvcHMuX3ByZXZpb3VzV2lkdGghPT10aGlzLnByb3BzLndpZHRofHx0aGlzLnByb3BzLl9wcmV2aW91c0hlaWdodCE9PXRoaXMucHJvcHMuaGVpZ2h0O3JldHVybiB0aGlzLnByb3BzLl9wcmV2aW91c1dpZHRoPXRoaXMucHJvcHMud2lkdGgsdGhpcy5wcm9wcy5fcHJldmlvdXNIZWlnaHQ9dGhpcy5wcm9wcy5oZWlnaHQsdH0sdC5leHBvcnRzPWl9LGZ1bmN0aW9uKHQsZSl7ZS5jb252ZXJ0SGlkZGVuT3B0aW9ucz1mdW5jdGlvbih0LGksbyl7aWYobyYmIUFycmF5LmlzQXJyYXkobykpcmV0dXJuIGUuY29udmVydEhpZGRlbk9wdGlvbnModCxpLFtvXSk7aWYoaS5oaWRkZW5EYXRlcz1bXSxvJiYxPT1BcnJheS5pc0FycmF5KG8pKXtmb3IodmFyIG49MDtuPG8ubGVuZ3RoO24rKylpZih2b2lkIDA9PT1vW25dLnJlcGVhdCl7dmFyIHM9e307cy5zdGFydD10KG9bbl0uc3RhcnQpLnRvRGF0ZSgpLnZhbHVlT2YoKSxzLmVuZD10KG9bbl0uZW5kKS50b0RhdGUoKS52YWx1ZU9mKCksaS5oaWRkZW5EYXRlcy5wdXNoKHMpfWkuaGlkZGVuRGF0ZXMuc29ydChmdW5jdGlvbih0LGUpe3JldHVybiB0LnN0YXJ0LWUuc3RhcnR9KX19LGUudXBkYXRlSGlkZGVuRGF0ZXM9ZnVuY3Rpb24odCxpLG8pe2lmKG8mJiFBcnJheS5pc0FycmF5KG8pKXJldHVybiBlLnVwZGF0ZUhpZGRlbkRhdGVzKHQsaSxbb10pO2lmKG8mJnZvaWQgMCE9PWkuZG9tUHJvcHMuY2VudGVyQ29udGFpbmVyLndpZHRoKXtlLmNvbnZlcnRIaWRkZW5PcHRpb25zKHQsaSxvKTtmb3IodmFyIG49dChpLnJhbmdlLnN0YXJ0KSxzPXQoaS5yYW5nZS5lbmQpLHI9aS5yYW5nZS5lbmQtaS5yYW5nZS5zdGFydCxhPXIvaS5kb21Qcm9wcy5jZW50ZXJDb250YWluZXIud2lkdGgsaD0wO2g8by5sZW5ndGg7aCsrKWlmKHZvaWQgMCE9PW9baF0ucmVwZWF0KXt2YXIgZD10KG9baF0uc3RhcnQpLGw9dChvW2hdLmVuZCk7aWYoIkludmFsaWQgRGF0ZSI9PWQuX2QpdGhyb3cgbmV3IEVycm9yKCJTdXBwbGllZCBzdGFydCBkYXRlIGlzIG5vdCB2YWxpZDogIitvW2hdLnN0YXJ0KTtpZigiSW52YWxpZCBEYXRlIj09bC5fZCl0aHJvdyBuZXcgRXJyb3IoIlN1cHBsaWVkIGVuZCBkYXRlIGlzIG5vdCB2YWxpZDogIitvW2hdLmVuZCk7dmFyIHU9bC1kO2lmKHU+PTQqYSl7dmFyIGM9MCxwPXMuY2xvbmUoKTtzd2l0Y2gob1toXS5yZXBlYXQpe2Nhc2UiZGFpbHkiOmQuZGF5KCkhPWwuZGF5KCkmJihjPTEpLGQuZGF5T2ZZZWFyKG4uZGF5T2ZZZWFyKCkpLGQueWVhcihuLnllYXIoKSksZC5zdWJ0cmFjdCg3LCJkYXlzIiksbC5kYXlPZlllYXIobi5kYXlPZlllYXIoKSksbC55ZWFyKG4ueWVhcigpKSxsLnN1YnRyYWN0KDctYywiZGF5cyIpLHAuYWRkKDEsIndlZWtzIik7YnJlYWs7Y2FzZSJ3ZWVrbHkiOnZhciBmPWwuZGlmZihkLCJkYXlzIiksbT1kLmRheSgpO2QuZGF0ZShuLmRhdGUoKSksZC5tb250aChuLm1vbnRoKCkpLGQueWVhcihuLnllYXIoKSksbD1kLmNsb25lKCksZC5kYXkobSksbC5kYXkobSksbC5hZGQoZiwiZGF5cyIpLGQuc3VidHJhY3QoMSwid2Vla3MiKSxsLnN1YnRyYWN0KDEsIndlZWtzIikscC5hZGQoMSwid2Vla3MiKTticmVhaztjYXNlIm1vbnRobHkiOmQubW9udGgoKSE9bC5tb250aCgpJiYoYz0xKSxkLm1vbnRoKG4ubW9udGgoKSksZC55ZWFyKG4ueWVhcigpKSxkLnN1YnRyYWN0KDEsIm1vbnRocyIpLGwubW9udGgobi5tb250aCgpKSxsLnllYXIobi55ZWFyKCkpLGwuc3VidHJhY3QoMSwibW9udGhzIiksbC5hZGQoYywibW9udGhzIikscC5hZGQoMSwibW9udGhzIik7YnJlYWs7Y2FzZSJ5ZWFybHkiOmQueWVhcigpIT1sLnllYXIoKSYmKGM9MSksZC55ZWFyKG4ueWVhcigpKSxkLnN1YnRyYWN0KDEsInllYXJzIiksbC55ZWFyKG4ueWVhcigpKSxsLnN1YnRyYWN0KDEsInllYXJzIiksbC5hZGQoYywieWVhcnMiKSxwLmFkZCgxLCJ5ZWFycyIpO2JyZWFrO2RlZmF1bHQ6cmV0dXJuIHZvaWQgY29uc29sZS5sb2coIldyb25nIHJlcGVhdCBmb3JtYXQsIGFsbG93ZWQgYXJlOiBkYWlseSwgd2Vla2x5LCBtb250aGx5LCB5ZWFybHkuIEdpdmVuOiIsb1toXS5yZXBlYXQpfWZvcig7cD5kOylzd2l0Y2goaS5oaWRkZW5EYXRlcy5wdXNoKHtzdGFydDpkLnZhbHVlT2YoKSxlbmQ6bC52YWx1ZU9mKCl9KSxvW2hdLnJlcGVhdCl7Y2FzZSJkYWlseSI6ZC5hZGQoMSwiZGF5cyIpLGwuYWRkKDEsImRheXMiKTticmVhaztjYXNlIndlZWtseSI6ZC5hZGQoMSwid2Vla3MiKSxsLmFkZCgxLCJ3ZWVrcyIpO2JyZWFrO2Nhc2UibW9udGhseSI6ZC5hZGQoMSwibW9udGhzIiksbC5hZGQoMSwibW9udGhzIik7YnJlYWs7Y2FzZSJ5ZWFybHkiOmQuYWRkKDEsInkiKSxsLmFkZCgxLCJ5Iik7YnJlYWs7ZGVmYXVsdDpyZXR1cm4gdm9pZCBjb25zb2xlLmxvZygiV3JvbmcgcmVwZWF0IGZvcm1hdCwgYWxsb3dlZCBhcmU6IGRhaWx5LCB3ZWVrbHksIG1vbnRobHksIHllYXJseS4gR2l2ZW46IixvW2hdLnJlcGVhdCl9aS5oaWRkZW5EYXRlcy5wdXNoKHtzdGFydDpkLnZhbHVlT2YoKSxlbmQ6bC52YWx1ZU9mKCl9KX19ZS5yZW1vdmVEdXBsaWNhdGVzKGkpO3ZhciB2PWUuaXNIaWRkZW4oaS5yYW5nZS5zdGFydCxpLmhpZGRlbkRhdGVzKSxnPWUuaXNIaWRkZW4oaS5yYW5nZS5lbmQsaS5oaWRkZW5EYXRlcykseT1pLnJhbmdlLnN0YXJ0LGI9aS5yYW5nZS5lbmQ7MT09di5oaWRkZW4mJih5PTE9PWkucmFuZ2Uuc3RhcnRUb0Zyb250P3Yuc3RhcnREYXRlLTE6di5lbmREYXRlKzEpLDE9PWcuaGlkZGVuJiYoYj0xPT1pLnJhbmdlLmVuZFRvRnJvbnQ/Zy5zdGFydERhdGUtMTpnLmVuZERhdGUrMSksKDE9PXYuaGlkZGVufHwxPT1nLmhpZGRlbikmJmkucmFuZ2UuX2FwcGx5UmFuZ2UoeSxiKX19LGUucmVtb3ZlRHVwbGljYXRlcz1mdW5jdGlvbih0KXtmb3IodmFyIGU9dC5oaWRkZW5EYXRlcyxpPVtdLG89MDtvPGUubGVuZ3RoO28rKylmb3IodmFyIG49MDtuPGUubGVuZ3RoO24rKylvIT1uJiYxIT1lW25dLnJlbW92ZSYmMSE9ZVtvXS5yZW1vdmUmJihlW25dLnN0YXJ0Pj1lW29dLnN0YXJ0JiZlW25dLmVuZDw9ZVtvXS5lbmQ/ZVtuXS5yZW1vdmU9ITA6ZVtuXS5zdGFydD49ZVtvXS5zdGFydCYmZVtuXS5zdGFydDw9ZVtvXS5lbmQ/KGVbb10uZW5kPWVbbl0uZW5kLGVbbl0ucmVtb3ZlPSEwKTplW25dLmVuZD49ZVtvXS5zdGFydCYmZVtuXS5lbmQ8PWVbb10uZW5kJiYoZVtvXS5zdGFydD1lW25dLnN0YXJ0LGVbbl0ucmVtb3ZlPSEwKSk7Zm9yKHZhciBvPTA7bzxlLmxlbmd0aDtvKyspZVtvXS5yZW1vdmUhPT0hMCYmaS5wdXNoKGVbb10pO3QuaGlkZGVuRGF0ZXM9aSx0LmhpZGRlbkRhdGVzLnNvcnQoZnVuY3Rpb24odCxlKXtyZXR1cm4gdC5zdGFydC1lLnN0YXJ0fSl9LGUucHJpbnREYXRlcz1mdW5jdGlvbih0KXtmb3IodmFyIGU9MDtlPHQubGVuZ3RoO2UrKyljb25zb2xlLmxvZyhlLG5ldyBEYXRlKHRbZV0uc3RhcnQpLG5ldyBEYXRlKHRbZV0uZW5kKSx0W2VdLnN0YXJ0LHRbZV0uZW5kLHRbZV0ucmVtb3ZlKX0sZS5zdGVwT3ZlckhpZGRlbkRhdGVzPWZ1bmN0aW9uKHQsZSxpKXtmb3IodmFyIG89ITEsbj1lLmN1cnJlbnQudmFsdWVPZigpLHM9MDtzPGUuaGlkZGVuRGF0ZXMubGVuZ3RoO3MrKyl7dmFyIHI9ZS5oaWRkZW5EYXRlc1tzXS5zdGFydCxhPWUuaGlkZGVuRGF0ZXNbc10uZW5kO2lmKG4+PXImJmE+bil7bz0hMDticmVha319aWYoMT09byYmbjxlLl9lbmQudmFsdWVPZigpJiZuIT1pKXt2YXIgaD10KGkpLGQ9dChhKTtoLnllYXIoKSE9ZC55ZWFyKCk/ZS5zd2l0Y2hlZFllYXI9ITA6aC5tb250aCgpIT1kLm1vbnRoKCk/ZS5zd2l0Y2hlZE1vbnRoPSEwOmguZGF5T2ZZZWFyKCkhPWQuZGF5T2ZZZWFyKCkmJihlLnN3aXRjaGVkRGF5PSEwKSxlLmN1cnJlbnQ9ZH19LGUudG9TY3JlZW49ZnVuY3Rpb24odCxpLG8pe2lmKDA9PXQuYm9keS5oaWRkZW5EYXRlcy5sZW5ndGgpe3ZhciBuPXQucmFuZ2UuY29udmVyc2lvbihvKTtyZXR1cm4oaS52YWx1ZU9mKCktbi5vZmZzZXQpKm4uc2NhbGV9dmFyIHM9ZS5pc0hpZGRlbihpLHQuYm9keS5oaWRkZW5EYXRlcyk7MT09cy5oaWRkZW4mJihpPXMuc3RhcnREYXRlKTt2YXIgcj1lLmdldEhpZGRlbkR1cmF0aW9uQmV0d2Vlbih0LmJvZHkuaGlkZGVuRGF0ZXMsdC5yYW5nZS5zdGFydCx0LnJhbmdlLmVuZCk7aT1lLmNvcnJlY3RUaW1lRm9ySGlkZGVuKHQub3B0aW9ucy5tb21lbnQsdC5ib2R5LmhpZGRlbkRhdGVzLHQucmFuZ2UsaSk7dmFyIG49dC5yYW5nZS5jb252ZXJzaW9uKG8scik7cmV0dXJuKGkudmFsdWVPZigpLW4ub2Zmc2V0KSpuLnNjYWxlfSxlLnRvVGltZT1mdW5jdGlvbih0LGksbyl7aWYoMD09dC5ib2R5LmhpZGRlbkRhdGVzLmxlbmd0aCl7dmFyIG49dC5yYW5nZS5jb252ZXJzaW9uKG8pO3JldHVybiBuZXcgRGF0ZShpL24uc2NhbGUrbi5vZmZzZXQpfXZhciBzPWUuZ2V0SGlkZGVuRHVyYXRpb25CZXR3ZWVuKHQuYm9keS5oaWRkZW5EYXRlcyx0LnJhbmdlLnN0YXJ0LHQucmFuZ2UuZW5kKSxyPXQucmFuZ2UuZW5kLXQucmFuZ2Uuc3RhcnQtcyxhPXIqaS9vLGg9ZS5nZXRBY2N1bXVsYXRlZEhpZGRlbkR1cmF0aW9uKHQuYm9keS5oaWRkZW5EYXRlcyx0LnJhbmdlLGEpLGQ9bmV3IERhdGUoaCthK3QucmFuZ2Uuc3RhcnQpO3JldHVybiBkfSxlLmdldEhpZGRlbkR1cmF0aW9uQmV0d2Vlbj1mdW5jdGlvbih0LGUsaSl7Zm9yKHZhciBvPTAsbj0wO248dC5sZW5ndGg7bisrKXt2YXIgcz10W25dLnN0YXJ0LHI9dFtuXS5lbmQ7cz49ZSYmaT5yJiYobys9ci1zKX1yZXR1cm4gb30sZS5jb3JyZWN0VGltZUZvckhpZGRlbj1mdW5jdGlvbih0LGksbyxuKXtyZXR1cm4gbj10KG4pLnRvRGF0ZSgpLnZhbHVlT2YoKSxuLT1lLmdldEhpZGRlbkR1cmF0aW9uQmVmb3JlKHQsaSxvLG4pfSxlLmdldEhpZGRlbkR1cmF0aW9uQmVmb3JlPWZ1bmN0aW9uKHQsZSxpLG8pe3ZhciBuPTA7bz10KG8pLnRvRGF0ZSgpLnZhbHVlT2YoKTtmb3IodmFyIHM9MDtzPGUubGVuZ3RoO3MrKyl7dmFyIHI9ZVtzXS5zdGFydCxhPWVbc10uZW5kO3I+PWkuc3RhcnQmJmE8aS5lbmQmJm8+PWEmJihuKz1hLXIpfXJldHVybiBufSxlLmdldEFjY3VtdWxhdGVkSGlkZGVuRHVyYXRpb249ZnVuY3Rpb24odCxlLGkpe2Zvcih2YXIgbz0wLG49MCxzPWUuc3RhcnQscj0wO3I8dC5sZW5ndGg7cisrKXt2YXIgYT10W3JdLnN0YXJ0LGg9dFtyXS5lbmQ7aWYoYT49ZS5zdGFydCYmaDxlLmVuZCl7aWYobis9YS1zLHM9aCxuPj1pKWJyZWFrO28rPWgtYX19cmV0dXJuIG99LGUuc25hcEF3YXlGcm9tSGlkZGVuPWZ1bmN0aW9uKHQsaSxvLG4pe3ZhciBzPWUuaXNIaWRkZW4oaSx0KTtyZXR1cm4gMT09cy5oaWRkZW4/MD5vPzE9PW4/cy5zdGFydERhdGUtKHMuZW5kRGF0ZS1pKS0xOnMuc3RhcnREYXRlLTE6MT09bj9zLmVuZERhdGUrKGktcy5zdGFydERhdGUpKzE6cy5lbmREYXRlKzE6aX0sZS5pc0hpZGRlbj1mdW5jdGlvbih0LGUpe2Zvcih2YXIgaT0wO2k8ZS5sZW5ndGg7aSsrKXt2YXIgbz1lW2ldLnN0YXJ0LG49ZVtpXS5lbmQ7aWYodD49byYmbj50KXJldHVybntoaWRkZW46ITAsc3RhcnREYXRlOm8sZW5kRGF0ZTpufX1yZXR1cm57aGlkZGVuOiExLHN0YXJ0RGF0ZTpvLGVuZERhdGU6bn19fSxmdW5jdGlvbih0LGUsaSl7ZnVuY3Rpb24gbygpe312YXIgbj1pKDEyKSxzPWkoMjApLHI9aSgyNCksYT1pKDEpLGg9KGkoOCksaSgxMCksaSgyMyksaSgyOCksaSgzOCkpLGQ9aSgzOSksbD1pKDI2KSx1PWkoNDEpO24oby5wcm90b3R5cGUpLG8ucHJvdG90eXBlLl9jcmVhdGU9ZnVuY3Rpb24odCl7ZnVuY3Rpb24gZSh0KXtpLmlzQWN0aXZlKCkmJmkuZW1pdCgibW91c2V3aGVlbCIsdCl9dGhpcy5kb209e30sdGhpcy5kb20uY29udGFpbmVyPXQsdGhpcy5kb20ucm9vdD1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKSx0aGlzLmRvbS5iYWNrZ3JvdW5kPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpLHRoaXMuZG9tLmJhY2tncm91bmRWZXJ0aWNhbD1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKSx0aGlzLmRvbS5iYWNrZ3JvdW5kSG9yaXpvbnRhbD1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKSx0aGlzLmRvbS5jZW50ZXJDb250YWluZXI9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2IiksdGhpcy5kb20ubGVmdENvbnRhaW5lcj1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKSx0aGlzLmRvbS5yaWdodENvbnRhaW5lcj1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKSx0aGlzLmRvbS5jZW50ZXI9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2IiksdGhpcy5kb20ubGVmdD1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKSx0aGlzLmRvbS5yaWdodD1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKSx0aGlzLmRvbS50b3A9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2IiksdGhpcy5kb20uYm90dG9tPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpLHRoaXMuZG9tLnNoYWRvd1RvcD1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKSx0aGlzLmRvbS5zaGFkb3dCb3R0b209ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2IiksdGhpcy5kb20uc2hhZG93VG9wTGVmdD1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKSx0aGlzLmRvbS5zaGFkb3dCb3R0b21MZWZ0PWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpLHRoaXMuZG9tLnNoYWRvd1RvcFJpZ2h0PWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpLHRoaXMuZG9tLnNoYWRvd0JvdHRvbVJpZ2h0PWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpLHRoaXMuZG9tLnJvb3QuY2xhc3NOYW1lPSJ2aXMtdGltZWxpbmUiLHRoaXMuZG9tLmJhY2tncm91bmQuY2xhc3NOYW1lPSJ2aXMtcGFuZWwgdmlzLWJhY2tncm91bmQiLHRoaXMuZG9tLmJhY2tncm91bmRWZXJ0aWNhbC5jbGFzc05hbWU9InZpcy1wYW5lbCB2aXMtYmFja2dyb3VuZCB2aXMtdmVydGljYWwiLAp0aGlzLmRvbS5iYWNrZ3JvdW5kSG9yaXpvbnRhbC5jbGFzc05hbWU9InZpcy1wYW5lbCB2aXMtYmFja2dyb3VuZCB2aXMtaG9yaXpvbnRhbCIsdGhpcy5kb20uY2VudGVyQ29udGFpbmVyLmNsYXNzTmFtZT0idmlzLXBhbmVsIHZpcy1jZW50ZXIiLHRoaXMuZG9tLmxlZnRDb250YWluZXIuY2xhc3NOYW1lPSJ2aXMtcGFuZWwgdmlzLWxlZnQiLHRoaXMuZG9tLnJpZ2h0Q29udGFpbmVyLmNsYXNzTmFtZT0idmlzLXBhbmVsIHZpcy1yaWdodCIsdGhpcy5kb20udG9wLmNsYXNzTmFtZT0idmlzLXBhbmVsIHZpcy10b3AiLHRoaXMuZG9tLmJvdHRvbS5jbGFzc05hbWU9InZpcy1wYW5lbCB2aXMtYm90dG9tIix0aGlzLmRvbS5sZWZ0LmNsYXNzTmFtZT0idmlzLWNvbnRlbnQiLHRoaXMuZG9tLmNlbnRlci5jbGFzc05hbWU9InZpcy1jb250ZW50Iix0aGlzLmRvbS5yaWdodC5jbGFzc05hbWU9InZpcy1jb250ZW50Iix0aGlzLmRvbS5zaGFkb3dUb3AuY2xhc3NOYW1lPSJ2aXMtc2hhZG93IHZpcy10b3AiLHRoaXMuZG9tLnNoYWRvd0JvdHRvbS5jbGFzc05hbWU9InZpcy1zaGFkb3cgdmlzLWJvdHRvbSIsdGhpcy5kb20uc2hhZG93VG9wTGVmdC5jbGFzc05hbWU9InZpcy1zaGFkb3cgdmlzLXRvcCIsdGhpcy5kb20uc2hhZG93Qm90dG9tTGVmdC5jbGFzc05hbWU9InZpcy1zaGFkb3cgdmlzLWJvdHRvbSIsdGhpcy5kb20uc2hhZG93VG9wUmlnaHQuY2xhc3NOYW1lPSJ2aXMtc2hhZG93IHZpcy10b3AiLHRoaXMuZG9tLnNoYWRvd0JvdHRvbVJpZ2h0LmNsYXNzTmFtZT0idmlzLXNoYWRvdyB2aXMtYm90dG9tIix0aGlzLmRvbS5yb290LmFwcGVuZENoaWxkKHRoaXMuZG9tLmJhY2tncm91bmQpLHRoaXMuZG9tLnJvb3QuYXBwZW5kQ2hpbGQodGhpcy5kb20uYmFja2dyb3VuZFZlcnRpY2FsKSx0aGlzLmRvbS5yb290LmFwcGVuZENoaWxkKHRoaXMuZG9tLmJhY2tncm91bmRIb3Jpem9udGFsKSx0aGlzLmRvbS5yb290LmFwcGVuZENoaWxkKHRoaXMuZG9tLmNlbnRlckNvbnRhaW5lciksdGhpcy5kb20ucm9vdC5hcHBlbmRDaGlsZCh0aGlzLmRvbS5sZWZ0Q29udGFpbmVyKSx0aGlzLmRvbS5yb290LmFwcGVuZENoaWxkKHRoaXMuZG9tLnJpZ2h0Q29udGFpbmVyKSx0aGlzLmRvbS5yb290LmFwcGVuZENoaWxkKHRoaXMuZG9tLnRvcCksdGhpcy5kb20ucm9vdC5hcHBlbmRDaGlsZCh0aGlzLmRvbS5ib3R0b20pLHRoaXMuZG9tLmNlbnRlckNvbnRhaW5lci5hcHBlbmRDaGlsZCh0aGlzLmRvbS5jZW50ZXIpLHRoaXMuZG9tLmxlZnRDb250YWluZXIuYXBwZW5kQ2hpbGQodGhpcy5kb20ubGVmdCksdGhpcy5kb20ucmlnaHRDb250YWluZXIuYXBwZW5kQ2hpbGQodGhpcy5kb20ucmlnaHQpLHRoaXMuZG9tLmNlbnRlckNvbnRhaW5lci5hcHBlbmRDaGlsZCh0aGlzLmRvbS5zaGFkb3dUb3ApLHRoaXMuZG9tLmNlbnRlckNvbnRhaW5lci5hcHBlbmRDaGlsZCh0aGlzLmRvbS5zaGFkb3dCb3R0b20pLHRoaXMuZG9tLmxlZnRDb250YWluZXIuYXBwZW5kQ2hpbGQodGhpcy5kb20uc2hhZG93VG9wTGVmdCksdGhpcy5kb20ubGVmdENvbnRhaW5lci5hcHBlbmRDaGlsZCh0aGlzLmRvbS5zaGFkb3dCb3R0b21MZWZ0KSx0aGlzLmRvbS5yaWdodENvbnRhaW5lci5hcHBlbmRDaGlsZCh0aGlzLmRvbS5zaGFkb3dUb3BSaWdodCksdGhpcy5kb20ucmlnaHRDb250YWluZXIuYXBwZW5kQ2hpbGQodGhpcy5kb20uc2hhZG93Qm90dG9tUmlnaHQpLHRoaXMub24oInJhbmdlY2hhbmdlIixmdW5jdGlvbigpe3RoaXMuX3JlZHJhdygpfS5iaW5kKHRoaXMpKSx0aGlzLm9uKCJ0b3VjaCIsdGhpcy5fb25Ub3VjaC5iaW5kKHRoaXMpKSx0aGlzLm9uKCJwYW4iLHRoaXMuX29uRHJhZy5iaW5kKHRoaXMpKTt2YXIgaT10aGlzO3RoaXMub24oImNoYW5nZSIsZnVuY3Rpb24odCl7dCYmMT09dC5xdWV1ZT9pLl9yZWRyYXdUaW1lcnx8KGkuX3JlZHJhd1RpbWVyPXNldFRpbWVvdXQoZnVuY3Rpb24oKXtpLl9yZWRyYXdUaW1lcj1udWxsLGkuX3JlZHJhdygpfSwwKSk6aS5fcmVkcmF3KCl9KSx0aGlzLmhhbW1lcj1uZXcgcyh0aGlzLmRvbS5yb290KSx0aGlzLmhhbW1lci5nZXQoInBpbmNoIikuc2V0KHtlbmFibGU6ITB9KSx0aGlzLmhhbW1lci5nZXQoInBhbiIpLnNldCh7dGhyZXNob2xkOjUsZGlyZWN0aW9uOjMwfSksdGhpcy5saXN0ZW5lcnM9e307dmFyIG89WyJ0YXAiLCJkb3VibGV0YXAiLCJwcmVzcyIsInBpbmNoIiwicGFuIiwicGFuc3RhcnQiLCJwYW5tb3ZlIiwicGFuZW5kIl07aWYoby5mb3JFYWNoKGZ1bmN0aW9uKHQpe3ZhciBlPWZ1bmN0aW9uKGUpe2kuaXNBY3RpdmUoKSYmaS5lbWl0KHQsZSl9O2kuaGFtbWVyLm9uKHQsZSksaS5saXN0ZW5lcnNbdF09ZX0pLHIub25Ub3VjaCh0aGlzLmhhbW1lcixmdW5jdGlvbih0KXtpLmVtaXQoInRvdWNoIix0KX0uYmluZCh0aGlzKSksci5vblJlbGVhc2UodGhpcy5oYW1tZXIsZnVuY3Rpb24odCl7aS5lbWl0KCJyZWxlYXNlIix0KX0uYmluZCh0aGlzKSksdGhpcy5kb20ucm9vdC5hZGRFdmVudExpc3RlbmVyKCJtb3VzZXdoZWVsIixlKSx0aGlzLmRvbS5yb290LmFkZEV2ZW50TGlzdGVuZXIoIkRPTU1vdXNlU2Nyb2xsIixlKSx0aGlzLnByb3BzPXtyb290Ont9LGJhY2tncm91bmQ6e30sY2VudGVyQ29udGFpbmVyOnt9LGxlZnRDb250YWluZXI6e30scmlnaHRDb250YWluZXI6e30sY2VudGVyOnt9LGxlZnQ6e30scmlnaHQ6e30sdG9wOnt9LGJvdHRvbTp7fSxib3JkZXI6e30sc2Nyb2xsVG9wOjAsc2Nyb2xsVG9wTWluOjB9LHRoaXMuY3VzdG9tVGltZXM9W10sdGhpcy50b3VjaD17fSx0aGlzLnJlZHJhd0NvdW50PTAsIXQpdGhyb3cgbmV3IEVycm9yKCJObyBjb250YWluZXIgcHJvdmlkZWQiKTt0LmFwcGVuZENoaWxkKHRoaXMuZG9tLnJvb3QpfSxvLnByb3RvdHlwZS5zZXRPcHRpb25zPWZ1bmN0aW9uKHQpe2lmKHQpe3ZhciBlPVsid2lkdGgiLCJoZWlnaHQiLCJtaW5IZWlnaHQiLCJtYXhIZWlnaHQiLCJhdXRvUmVzaXplIiwic3RhcnQiLCJlbmQiLCJjbGlja1RvVXNlIiwiZGF0YUF0dHJpYnV0ZXMiLCJoaWRkZW5EYXRlcyIsImxvY2FsZSIsImxvY2FsZXMiLCJtb21lbnQiLCJ0aHJvdHRsZVJlZHJhdyJdO2lmKGEuc2VsZWN0aXZlRXh0ZW5kKGUsdGhpcy5vcHRpb25zLHQpLCJvcmllbnRhdGlvbiJpbiB0JiYoInN0cmluZyI9PXR5cGVvZiB0Lm9yaWVudGF0aW9uP3RoaXMub3B0aW9ucy5vcmllbnRhdGlvbj17aXRlbTp0Lm9yaWVudGF0aW9uLGF4aXM6dC5vcmllbnRhdGlvbn06Im9iamVjdCI9PXR5cGVvZiB0Lm9yaWVudGF0aW9uJiYoIml0ZW0iaW4gdC5vcmllbnRhdGlvbiYmKHRoaXMub3B0aW9ucy5vcmllbnRhdGlvbi5pdGVtPXQub3JpZW50YXRpb24uaXRlbSksImF4aXMiaW4gdC5vcmllbnRhdGlvbiYmKHRoaXMub3B0aW9ucy5vcmllbnRhdGlvbi5heGlzPXQub3JpZW50YXRpb24uYXhpcykpKSwiYm90aCI9PT10aGlzLm9wdGlvbnMub3JpZW50YXRpb24uYXhpcyl7aWYoIXRoaXMudGltZUF4aXMyKXt2YXIgaT10aGlzLnRpbWVBeGlzMj1uZXcgaCh0aGlzLmJvZHkpO2kuc2V0T3B0aW9ucz1mdW5jdGlvbih0KXt2YXIgZT10P2EuZXh0ZW5kKHt9LHQpOnt9O2Uub3JpZW50YXRpb249InRvcCIsaC5wcm90b3R5cGUuc2V0T3B0aW9ucy5jYWxsKGksZSl9LHRoaXMuY29tcG9uZW50cy5wdXNoKGkpfX1lbHNlIGlmKHRoaXMudGltZUF4aXMyKXt2YXIgbz10aGlzLmNvbXBvbmVudHMuaW5kZXhPZih0aGlzLnRpbWVBeGlzMik7LTEhPT1vJiZ0aGlzLmNvbXBvbmVudHMuc3BsaWNlKG8sMSksdGhpcy50aW1lQXhpczIuZGVzdHJveSgpLHRoaXMudGltZUF4aXMyPW51bGx9aWYoImZ1bmN0aW9uIj09dHlwZW9mIHQuZHJhd1BvaW50cyYmKHQuZHJhd1BvaW50cz17b25SZW5kZXI6dC5kcmF3UG9pbnRzfSksImhpZGRlbkRhdGVzImluIHRoaXMub3B0aW9ucyYmbC5jb252ZXJ0SGlkZGVuT3B0aW9ucyh0aGlzLm9wdGlvbnMubW9tZW50LHRoaXMuYm9keSx0aGlzLm9wdGlvbnMuaGlkZGVuRGF0ZXMpLCJjbGlja1RvVXNlImluIHQmJih0LmNsaWNrVG9Vc2U/dGhpcy5hY3RpdmF0b3J8fCh0aGlzLmFjdGl2YXRvcj1uZXcgZCh0aGlzLmRvbS5yb290KSk6dGhpcy5hY3RpdmF0b3ImJih0aGlzLmFjdGl2YXRvci5kZXN0cm95KCksZGVsZXRlIHRoaXMuYWN0aXZhdG9yKSksInNob3dDdXN0b21UaW1lImluIHQpdGhyb3cgbmV3IEVycm9yKCJPcHRpb24gYHNob3dDdXN0b21UaW1lYCBpcyBkZXByZWNhdGVkLiBDcmVhdGUgYSBjdXN0b20gdGltZSBiYXIgdmlhIHRpbWVsaW5lLmFkZEN1c3RvbVRpbWUodGltZSBbLCBpZF0pIik7dGhpcy5faW5pdEF1dG9SZXNpemUoKX1pZih0aGlzLmNvbXBvbmVudHMuZm9yRWFjaChmdW5jdGlvbihlKXtyZXR1cm4gZS5zZXRPcHRpb25zKHQpfSksImNvbmZpZ3VyZSJpbiB0KXt0aGlzLmNvbmZpZ3VyYXRvcnx8KHRoaXMuY29uZmlndXJhdG9yPXRoaXMuX2NyZWF0ZUNvbmZpZ3VyYXRvcigpKSx0aGlzLmNvbmZpZ3VyYXRvci5zZXRPcHRpb25zKHQuY29uZmlndXJlKTt2YXIgbj1hLmRlZXBFeHRlbmQoe30sdGhpcy5vcHRpb25zKTt0aGlzLmNvbXBvbmVudHMuZm9yRWFjaChmdW5jdGlvbih0KXthLmRlZXBFeHRlbmQobix0Lm9wdGlvbnMpfSksdGhpcy5jb25maWd1cmF0b3Iuc2V0TW9kdWxlT3B0aW9ucyh7Z2xvYmFsOm59KX10aGlzLl9vcmlnUmVkcmF3fHwodGhpcy5fb3JpZ1JlZHJhdz10aGlzLl9yZWRyYXcuYmluZCh0aGlzKSksdGhpcy5fcmVkcmF3PWEudGhyb3R0bGUodGhpcy5fb3JpZ1JlZHJhdyx0aGlzLm9wdGlvbnMudGhyb3R0bGVSZWRyYXcpLHRoaXMuX3JlZHJhdygpfSxvLnByb3RvdHlwZS5pc0FjdGl2ZT1mdW5jdGlvbigpe3JldHVybiF0aGlzLmFjdGl2YXRvcnx8dGhpcy5hY3RpdmF0b3IuYWN0aXZlfSxvLnByb3RvdHlwZS5kZXN0cm95PWZ1bmN0aW9uKCl7dGhpcy5zZXRJdGVtcyhudWxsKSx0aGlzLnNldEdyb3VwcyhudWxsKSx0aGlzLm9mZigpLHRoaXMuX3N0b3BBdXRvUmVzaXplKCksdGhpcy5kb20ucm9vdC5wYXJlbnROb2RlJiZ0aGlzLmRvbS5yb290LnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQodGhpcy5kb20ucm9vdCksdGhpcy5kb209bnVsbCx0aGlzLmFjdGl2YXRvciYmKHRoaXMuYWN0aXZhdG9yLmRlc3Ryb3koKSxkZWxldGUgdGhpcy5hY3RpdmF0b3IpO2Zvcih2YXIgdCBpbiB0aGlzLmxpc3RlbmVycyl0aGlzLmxpc3RlbmVycy5oYXNPd25Qcm9wZXJ0eSh0KSYmZGVsZXRlIHRoaXMubGlzdGVuZXJzW3RdO3RoaXMubGlzdGVuZXJzPW51bGwsdGhpcy5oYW1tZXI9bnVsbCx0aGlzLmNvbXBvbmVudHMuZm9yRWFjaChmdW5jdGlvbih0KXtyZXR1cm4gdC5kZXN0cm95KCl9KSx0aGlzLmJvZHk9bnVsbH0sby5wcm90b3R5cGUuc2V0Q3VzdG9tVGltZT1mdW5jdGlvbih0LGUpe3ZhciBpPXRoaXMuY3VzdG9tVGltZXMuZmlsdGVyKGZ1bmN0aW9uKHQpe3JldHVybiBlPT09dC5vcHRpb25zLmlkfSk7aWYoMD09PWkubGVuZ3RoKXRocm93IG5ldyBFcnJvcigiTm8gY3VzdG9tIHRpbWUgYmFyIGZvdW5kIHdpdGggaWQgIitKU09OLnN0cmluZ2lmeShlKSk7aS5sZW5ndGg+MCYmaVswXS5zZXRDdXN0b21UaW1lKHQpfSxvLnByb3RvdHlwZS5nZXRDdXN0b21UaW1lPWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMuY3VzdG9tVGltZXMuZmlsdGVyKGZ1bmN0aW9uKGUpe3JldHVybiBlLm9wdGlvbnMuaWQ9PT10fSk7aWYoMD09PWUubGVuZ3RoKXRocm93IG5ldyBFcnJvcigiTm8gY3VzdG9tIHRpbWUgYmFyIGZvdW5kIHdpdGggaWQgIitKU09OLnN0cmluZ2lmeSh0KSk7cmV0dXJuIGVbMF0uZ2V0Q3VzdG9tVGltZSgpfSxvLnByb3RvdHlwZS5zZXRDdXN0b21UaW1lVGl0bGU9ZnVuY3Rpb24odCxlKXt2YXIgaT10aGlzLmN1c3RvbVRpbWVzLmZpbHRlcihmdW5jdGlvbih0KXtyZXR1cm4gdC5vcHRpb25zLmlkPT09ZX0pO2lmKDA9PT1pLmxlbmd0aCl0aHJvdyBuZXcgRXJyb3IoIk5vIGN1c3RvbSB0aW1lIGJhciBmb3VuZCB3aXRoIGlkICIrSlNPTi5zdHJpbmdpZnkoZSkpO3JldHVybiBpLmxlbmd0aD4wP2lbMF0uc2V0Q3VzdG9tVGl0bGUodCk6dm9pZCAwfSxvLnByb3RvdHlwZS5nZXRFdmVudFByb3BlcnRpZXM9ZnVuY3Rpb24odCl7cmV0dXJue2V2ZW50OnR9fSxvLnByb3RvdHlwZS5hZGRDdXN0b21UaW1lPWZ1bmN0aW9uKHQsZSl7dmFyIGk9dm9pZCAwIT09dD9hLmNvbnZlcnQodCwiRGF0ZSIpLnZhbHVlT2YoKTpuZXcgRGF0ZSxvPXRoaXMuY3VzdG9tVGltZXMuc29tZShmdW5jdGlvbih0KXtyZXR1cm4gdC5vcHRpb25zLmlkPT09ZX0pO2lmKG8pdGhyb3cgbmV3IEVycm9yKCJBIGN1c3RvbSB0aW1lIHdpdGggaWQgIitKU09OLnN0cmluZ2lmeShlKSsiIGFscmVhZHkgZXhpc3RzIik7dmFyIG49bmV3IHUodGhpcy5ib2R5LGEuZXh0ZW5kKHt9LHRoaXMub3B0aW9ucyx7dGltZTppLGlkOmV9KSk7cmV0dXJuIHRoaXMuY3VzdG9tVGltZXMucHVzaChuKSx0aGlzLmNvbXBvbmVudHMucHVzaChuKSx0aGlzLl9yZWRyYXcoKSxlfSxvLnByb3RvdHlwZS5yZW1vdmVDdXN0b21UaW1lPWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMuY3VzdG9tVGltZXMuZmlsdGVyKGZ1bmN0aW9uKGUpe3JldHVybiBlLm9wdGlvbnMuaWQ9PT10fSk7aWYoMD09PWUubGVuZ3RoKXRocm93IG5ldyBFcnJvcigiTm8gY3VzdG9tIHRpbWUgYmFyIGZvdW5kIHdpdGggaWQgIitKU09OLnN0cmluZ2lmeSh0KSk7ZS5mb3JFYWNoKGZ1bmN0aW9uKHQpe3RoaXMuY3VzdG9tVGltZXMuc3BsaWNlKHRoaXMuY3VzdG9tVGltZXMuaW5kZXhPZih0KSwxKSx0aGlzLmNvbXBvbmVudHMuc3BsaWNlKHRoaXMuY29tcG9uZW50cy5pbmRleE9mKHQpLDEpLHQuZGVzdHJveSgpfS5iaW5kKHRoaXMpKX0sby5wcm90b3R5cGUuZ2V0VmlzaWJsZUl0ZW1zPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuaXRlbVNldCYmdGhpcy5pdGVtU2V0LmdldFZpc2libGVJdGVtcygpfHxbXX0sby5wcm90b3R5cGUuZml0PWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMuZ2V0RGF0YVJhbmdlKCk7aWYobnVsbCE9PWUubWlufHxudWxsIT09ZS5tYXgpe3ZhciBpPWUubWF4LWUubWluLG89bmV3IERhdGUoZS5taW4udmFsdWVPZigpLS4wMSppKSxuPW5ldyBEYXRlKGUubWF4LnZhbHVlT2YoKSsuMDEqaSkscz10JiZ2b2lkIDAhPT10LmFuaW1hdGlvbj90LmFuaW1hdGlvbjohMDt0aGlzLnJhbmdlLnNldFJhbmdlKG8sbixzKX19LG8ucHJvdG90eXBlLmdldERhdGFSYW5nZT1mdW5jdGlvbigpe3Rocm93IG5ldyBFcnJvcigiQ2Fubm90IGludm9rZSBhYnN0cmFjdCBtZXRob2QgZ2V0RGF0YVJhbmdlIil9LG8ucHJvdG90eXBlLnNldFdpbmRvdz1mdW5jdGlvbih0LGUsaSl7dmFyIG87aWYoMT09YXJndW1lbnRzLmxlbmd0aCl7dmFyIG49YXJndW1lbnRzWzBdO289dm9pZCAwIT09bi5hbmltYXRpb24/bi5hbmltYXRpb246ITAsdGhpcy5yYW5nZS5zZXRSYW5nZShuLnN0YXJ0LG4uZW5kLG8pfWVsc2Ugbz1pJiZ2b2lkIDAhPT1pLmFuaW1hdGlvbj9pLmFuaW1hdGlvbjohMCx0aGlzLnJhbmdlLnNldFJhbmdlKHQsZSxvKX0sby5wcm90b3R5cGUubW92ZVRvPWZ1bmN0aW9uKHQsZSl7dmFyIGk9dGhpcy5yYW5nZS5lbmQtdGhpcy5yYW5nZS5zdGFydCxvPWEuY29udmVydCh0LCJEYXRlIikudmFsdWVPZigpLG49by1pLzIscz1vK2kvMixyPWUmJnZvaWQgMCE9PWUuYW5pbWF0aW9uP2UuYW5pbWF0aW9uOiEwO3RoaXMucmFuZ2Uuc2V0UmFuZ2UobixzLHIpfSxvLnByb3RvdHlwZS5nZXRXaW5kb3c9ZnVuY3Rpb24oKXt2YXIgdD10aGlzLnJhbmdlLmdldFJhbmdlKCk7cmV0dXJue3N0YXJ0Om5ldyBEYXRlKHQuc3RhcnQpLGVuZDpuZXcgRGF0ZSh0LmVuZCl9fSxvLnByb3RvdHlwZS5yZWRyYXc9ZnVuY3Rpb24oKXt0aGlzLl9yZWRyYXcoKX0sby5wcm90b3R5cGUuX3JlZHJhdz1mdW5jdGlvbigpe3ZhciB0PSExLGU9dGhpcy5vcHRpb25zLGk9dGhpcy5wcm9wcyxvPXRoaXMuZG9tO2lmKG8pe2wudXBkYXRlSGlkZGVuRGF0ZXModGhpcy5vcHRpb25zLm1vbWVudCx0aGlzLmJvZHksdGhpcy5vcHRpb25zLmhpZGRlbkRhdGVzKSwidG9wIj09ZS5vcmllbnRhdGlvbj8oYS5hZGRDbGFzc05hbWUoby5yb290LCJ2aXMtdG9wIiksYS5yZW1vdmVDbGFzc05hbWUoby5yb290LCJ2aXMtYm90dG9tIikpOihhLnJlbW92ZUNsYXNzTmFtZShvLnJvb3QsInZpcy10b3AiKSxhLmFkZENsYXNzTmFtZShvLnJvb3QsInZpcy1ib3R0b20iKSksby5yb290LnN0eWxlLm1heEhlaWdodD1hLm9wdGlvbi5hc1NpemUoZS5tYXhIZWlnaHQsIiIpLG8ucm9vdC5zdHlsZS5taW5IZWlnaHQ9YS5vcHRpb24uYXNTaXplKGUubWluSGVpZ2h0LCIiKSxvLnJvb3Quc3R5bGUud2lkdGg9YS5vcHRpb24uYXNTaXplKGUud2lkdGgsIiIpLGkuYm9yZGVyLmxlZnQ9KG8uY2VudGVyQ29udGFpbmVyLm9mZnNldFdpZHRoLW8uY2VudGVyQ29udGFpbmVyLmNsaWVudFdpZHRoKS8yLGkuYm9yZGVyLnJpZ2h0PWkuYm9yZGVyLmxlZnQsaS5ib3JkZXIudG9wPShvLmNlbnRlckNvbnRhaW5lci5vZmZzZXRIZWlnaHQtby5jZW50ZXJDb250YWluZXIuY2xpZW50SGVpZ2h0KS8yLGkuYm9yZGVyLmJvdHRvbT1pLmJvcmRlci50b3A7dmFyIG49by5yb290Lm9mZnNldEhlaWdodC1vLnJvb3QuY2xpZW50SGVpZ2h0LHM9by5yb290Lm9mZnNldFdpZHRoLW8ucm9vdC5jbGllbnRXaWR0aDswPT09by5jZW50ZXJDb250YWluZXIuY2xpZW50SGVpZ2h0JiYoaS5ib3JkZXIubGVmdD1pLmJvcmRlci50b3AsaS5ib3JkZXIucmlnaHQ9aS5ib3JkZXIubGVmdCksMD09PW8ucm9vdC5jbGllbnRIZWlnaHQmJihzPW4pLGkuY2VudGVyLmhlaWdodD1vLmNlbnRlci5vZmZzZXRIZWlnaHQsaS5sZWZ0LmhlaWdodD1vLmxlZnQub2Zmc2V0SGVpZ2h0LGkucmlnaHQuaGVpZ2h0PW8ucmlnaHQub2Zmc2V0SGVpZ2h0LGkudG9wLmhlaWdodD1vLnRvcC5jbGllbnRIZWlnaHR8fC1pLmJvcmRlci50b3AsaS5ib3R0b20uaGVpZ2h0PW8uYm90dG9tLmNsaWVudEhlaWdodHx8LWkuYm9yZGVyLmJvdHRvbTt2YXIgcj1NYXRoLm1heChpLmxlZnQuaGVpZ2h0LGkuY2VudGVyLmhlaWdodCxpLnJpZ2h0LmhlaWdodCksaD1pLnRvcC5oZWlnaHQrcitpLmJvdHRvbS5oZWlnaHQrbitpLmJvcmRlci50b3AraS5ib3JkZXIuYm90dG9tO28ucm9vdC5zdHlsZS5oZWlnaHQ9YS5vcHRpb24uYXNTaXplKGUuaGVpZ2h0LGgrInB4IiksaS5yb290LmhlaWdodD1vLnJvb3Qub2Zmc2V0SGVpZ2h0LGkuYmFja2dyb3VuZC5oZWlnaHQ9aS5yb290LmhlaWdodC1uO3ZhciBkPWkucm9vdC5oZWlnaHQtaS50b3AuaGVpZ2h0LWkuYm90dG9tLmhlaWdodC1uO2kuY2VudGVyQ29udGFpbmVyLmhlaWdodD1kLGkubGVmdENvbnRhaW5lci5oZWlnaHQ9ZCxpLnJpZ2h0Q29udGFpbmVyLmhlaWdodD1pLmxlZnRDb250YWluZXIuaGVpZ2h0LGkucm9vdC53aWR0aD1vLnJvb3Qub2Zmc2V0V2lkdGgsaS5iYWNrZ3JvdW5kLndpZHRoPWkucm9vdC53aWR0aC1zLGkubGVmdC53aWR0aD1vLmxlZnRDb250YWluZXIuY2xpZW50V2lkdGh8fC1pLmJvcmRlci5sZWZ0LGkubGVmdENvbnRhaW5lci53aWR0aD1pLmxlZnQud2lkdGgsaS5yaWdodC53aWR0aD1vLnJpZ2h0Q29udGFpbmVyLmNsaWVudFdpZHRofHwtaS5ib3JkZXIucmlnaHQsaS5yaWdodENvbnRhaW5lci53aWR0aD1pLnJpZ2h0LndpZHRoO3ZhciB1PWkucm9vdC53aWR0aC1pLmxlZnQud2lkdGgtaS5yaWdodC53aWR0aC1zO2kuY2VudGVyLndpZHRoPXUsaS5jZW50ZXJDb250YWluZXIud2lkdGg9dSxpLnRvcC53aWR0aD11LGkuYm90dG9tLndpZHRoPXUsby5iYWNrZ3JvdW5kLnN0eWxlLmhlaWdodD1pLmJhY2tncm91bmQuaGVpZ2h0KyJweCIsby5iYWNrZ3JvdW5kVmVydGljYWwuc3R5bGUuaGVpZ2h0PWkuYmFja2dyb3VuZC5oZWlnaHQrInB4IixvLmJhY2tncm91bmRIb3Jpem9udGFsLnN0eWxlLmhlaWdodD1pLmNlbnRlckNvbnRhaW5lci5oZWlnaHQrInB4IixvLmNlbnRlckNvbnRhaW5lci5zdHlsZS5oZWlnaHQ9aS5jZW50ZXJDb250YWluZXIuaGVpZ2h0KyJweCIsby5sZWZ0Q29udGFpbmVyLnN0eWxlLmhlaWdodD1pLmxlZnRDb250YWluZXIuaGVpZ2h0KyJweCIsby5yaWdodENvbnRhaW5lci5zdHlsZS5oZWlnaHQ9aS5yaWdodENvbnRhaW5lci5oZWlnaHQrInB4IixvLmJhY2tncm91bmQuc3R5bGUud2lkdGg9aS5iYWNrZ3JvdW5kLndpZHRoKyJweCIsby5iYWNrZ3JvdW5kVmVydGljYWwuc3R5bGUud2lkdGg9aS5jZW50ZXJDb250YWluZXIud2lkdGgrInB4IixvLmJhY2tncm91bmRIb3Jpem9udGFsLnN0eWxlLndpZHRoPWkuYmFja2dyb3VuZC53aWR0aCsicHgiLG8uY2VudGVyQ29udGFpbmVyLnN0eWxlLndpZHRoPWkuY2VudGVyLndpZHRoKyJweCIsby50b3Auc3R5bGUud2lkdGg9aS50b3Aud2lkdGgrInB4IixvLmJvdHRvbS5zdHlsZS53aWR0aD1pLmJvdHRvbS53aWR0aCsicHgiLG8uYmFja2dyb3VuZC5zdHlsZS5sZWZ0PSIwIixvLmJhY2tncm91bmQuc3R5bGUudG9wPSIwIixvLmJhY2tncm91bmRWZXJ0aWNhbC5zdHlsZS5sZWZ0PWkubGVmdC53aWR0aCtpLmJvcmRlci5sZWZ0KyJweCIsby5iYWNrZ3JvdW5kVmVydGljYWwuc3R5bGUudG9wPSIwIixvLmJhY2tncm91bmRIb3Jpem9udGFsLnN0eWxlLmxlZnQ9IjAiLG8uYmFja2dyb3VuZEhvcml6b250YWwuc3R5bGUudG9wPWkudG9wLmhlaWdodCsicHgiLG8uY2VudGVyQ29udGFpbmVyLnN0eWxlLmxlZnQ9aS5sZWZ0LndpZHRoKyJweCIsby5jZW50ZXJDb250YWluZXIuc3R5bGUudG9wPWkudG9wLmhlaWdodCsicHgiLG8ubGVmdENvbnRhaW5lci5zdHlsZS5sZWZ0PSIwIixvLmxlZnRDb250YWluZXIuc3R5bGUudG9wPWkudG9wLmhlaWdodCsicHgiLG8ucmlnaHRDb250YWluZXIuc3R5bGUubGVmdD1pLmxlZnQud2lkdGgraS5jZW50ZXIud2lkdGgrInB4IixvLnJpZ2h0Q29udGFpbmVyLnN0eWxlLnRvcD1pLnRvcC5oZWlnaHQrInB4IixvLnRvcC5zdHlsZS5sZWZ0PWkubGVmdC53aWR0aCsicHgiLG8udG9wLnN0eWxlLnRvcD0iMCIsby5ib3R0b20uc3R5bGUubGVmdD1pLmxlZnQud2lkdGgrInB4IixvLmJvdHRvbS5zdHlsZS50b3A9aS50b3AuaGVpZ2h0K2kuY2VudGVyQ29udGFpbmVyLmhlaWdodCsicHgiLHRoaXMuX3VwZGF0ZVNjcm9sbFRvcCgpO3ZhciBjPXRoaXMucHJvcHMuc2Nyb2xsVG9wOyJ0b3AiIT1lLm9yaWVudGF0aW9uLml0ZW0mJihjKz1NYXRoLm1heCh0aGlzLnByb3BzLmNlbnRlckNvbnRhaW5lci5oZWlnaHQtdGhpcy5wcm9wcy5jZW50ZXIuaGVpZ2h0LXRoaXMucHJvcHMuYm9yZGVyLnRvcC10aGlzLnByb3BzLmJvcmRlci5ib3R0b20sMCkpLG8uY2VudGVyLnN0eWxlLmxlZnQ9IjAiLG8uY2VudGVyLnN0eWxlLnRvcD1jKyJweCIsby5sZWZ0LnN0eWxlLmxlZnQ9IjAiLG8ubGVmdC5zdHlsZS50b3A9YysicHgiLG8ucmlnaHQuc3R5bGUubGVmdD0iMCIsby5yaWdodC5zdHlsZS50b3A9YysicHgiO3ZhciBwPTA9PXRoaXMucHJvcHMuc2Nyb2xsVG9wPyJoaWRkZW4iOiIiLGY9dGhpcy5wcm9wcy5zY3JvbGxUb3A9PXRoaXMucHJvcHMuc2Nyb2xsVG9wTWluPyJoaWRkZW4iOiIiO2lmKG8uc2hhZG93VG9wLnN0eWxlLnZpc2liaWxpdHk9cCxvLnNoYWRvd0JvdHRvbS5zdHlsZS52aXNpYmlsaXR5PWYsby5zaGFkb3dUb3BMZWZ0LnN0eWxlLnZpc2liaWxpdHk9cCxvLnNoYWRvd0JvdHRvbUxlZnQuc3R5bGUudmlzaWJpbGl0eT1mLG8uc2hhZG93VG9wUmlnaHQuc3R5bGUudmlzaWJpbGl0eT1wLG8uc2hhZG93Qm90dG9tUmlnaHQuc3R5bGUudmlzaWJpbGl0eT1mLHRoaXMuY29tcG9uZW50cy5mb3JFYWNoKGZ1bmN0aW9uKGUpe3Q9ZS5yZWRyYXcoKXx8dH0pLHQpe3ZhciBtPTM7dGhpcy5yZWRyYXdDb3VudDxtPyh0aGlzLnJlZHJhd0NvdW50KyssdGhpcy5fcmVkcmF3KCkpOmNvbnNvbGUubG9nKCJXQVJOSU5HOiBpbmZpbml0ZSBsb29wIGluIHJlZHJhdz8iKSx0aGlzLnJlZHJhd0NvdW50PTB9fX0sby5wcm90b3R5cGUucmVwYWludD1mdW5jdGlvbigpe3Rocm93IG5ldyBFcnJvcigiRnVuY3Rpb24gcmVwYWludCBpcyBkZXByZWNhdGVkLiBVc2UgcmVkcmF3IGluc3RlYWQuIil9LG8ucHJvdG90eXBlLnNldEN1cnJlbnRUaW1lPWZ1bmN0aW9uKHQpe2lmKCF0aGlzLmN1cnJlbnRUaW1lKXRocm93IG5ldyBFcnJvcigiT3B0aW9uIHNob3dDdXJyZW50VGltZSBtdXN0IGJlIHRydWUiKTt0aGlzLmN1cnJlbnRUaW1lLnNldEN1cnJlbnRUaW1lKHQpfSxvLnByb3RvdHlwZS5nZXRDdXJyZW50VGltZT1mdW5jdGlvbigpe2lmKCF0aGlzLmN1cnJlbnRUaW1lKXRocm93IG5ldyBFcnJvcigiT3B0aW9uIHNob3dDdXJyZW50VGltZSBtdXN0IGJlIHRydWUiKTtyZXR1cm4gdGhpcy5jdXJyZW50VGltZS5nZXRDdXJyZW50VGltZSgpfSxvLnByb3RvdHlwZS5fdG9UaW1lPWZ1bmN0aW9uKHQpe3JldHVybiBsLnRvVGltZSh0aGlzLHQsdGhpcy5wcm9wcy5jZW50ZXIud2lkdGgpfSxvLnByb3RvdHlwZS5fdG9HbG9iYWxUaW1lPWZ1bmN0aW9uKHQpe3JldHVybiBsLnRvVGltZSh0aGlzLHQsdGhpcy5wcm9wcy5yb290LndpZHRoKX0sby5wcm90b3R5cGUuX3RvU2NyZWVuPWZ1bmN0aW9uKHQpe3JldHVybiBsLnRvU2NyZWVuKHRoaXMsdCx0aGlzLnByb3BzLmNlbnRlci53aWR0aCl9LG8ucHJvdG90eXBlLl90b0dsb2JhbFNjcmVlbj1mdW5jdGlvbih0KXtyZXR1cm4gbC50b1NjcmVlbih0aGlzLHQsdGhpcy5wcm9wcy5yb290LndpZHRoKX0sby5wcm90b3R5cGUuX2luaXRBdXRvUmVzaXplPWZ1bmN0aW9uKCl7MT09dGhpcy5vcHRpb25zLmF1dG9SZXNpemU/dGhpcy5fc3RhcnRBdXRvUmVzaXplKCk6dGhpcy5fc3RvcEF1dG9SZXNpemUoKX0sby5wcm90b3R5cGUuX3N0YXJ0QXV0b1Jlc2l6ZT1mdW5jdGlvbigpe3ZhciB0PXRoaXM7dGhpcy5fc3RvcEF1dG9SZXNpemUoKSx0aGlzLl9vblJlc2l6ZT1mdW5jdGlvbigpe3JldHVybiAxIT10Lm9wdGlvbnMuYXV0b1Jlc2l6ZT92b2lkIHQuX3N0b3BBdXRvUmVzaXplKCk6dm9pZCh0LmRvbS5yb290JiYodC5kb20ucm9vdC5vZmZzZXRXaWR0aCE9dC5wcm9wcy5sYXN0V2lkdGh8fHQuZG9tLnJvb3Qub2Zmc2V0SGVpZ2h0IT10LnByb3BzLmxhc3RIZWlnaHQpJiYodC5wcm9wcy5sYXN0V2lkdGg9dC5kb20ucm9vdC5vZmZzZXRXaWR0aCx0LnByb3BzLmxhc3RIZWlnaHQ9dC5kb20ucm9vdC5vZmZzZXRIZWlnaHQsdC5lbWl0KCJjaGFuZ2UiKSkpfSxhLmFkZEV2ZW50TGlzdGVuZXIod2luZG93LCJyZXNpemUiLHRoaXMuX29uUmVzaXplKSx0aGlzLndhdGNoVGltZXI9c2V0SW50ZXJ2YWwodGhpcy5fb25SZXNpemUsMWUzKX0sby5wcm90b3R5cGUuX3N0b3BBdXRvUmVzaXplPWZ1bmN0aW9uKCl7dGhpcy53YXRjaFRpbWVyJiYoY2xlYXJJbnRlcnZhbCh0aGlzLndhdGNoVGltZXIpLHRoaXMud2F0Y2hUaW1lcj12b2lkIDApLHRoaXMuX29uUmVzaXplJiYoYS5yZW1vdmVFdmVudExpc3RlbmVyKHdpbmRvdywicmVzaXplIix0aGlzLl9vblJlc2l6ZSksdGhpcy5fb25SZXNpemU9bnVsbCl9LG8ucHJvdG90eXBlLl9vblRvdWNoPWZ1bmN0aW9uKHQpe3RoaXMudG91Y2guYWxsb3dEcmFnZ2luZz0hMCx0aGlzLnRvdWNoLmluaXRpYWxTY3JvbGxUb3A9dGhpcy5wcm9wcy5zY3JvbGxUb3B9LG8ucHJvdG90eXBlLl9vblBpbmNoPWZ1bmN0aW9uKHQpe3RoaXMudG91Y2guYWxsb3dEcmFnZ2luZz0hMX0sby5wcm90b3R5cGUuX29uRHJhZz1mdW5jdGlvbih0KXtpZih0aGlzLnRvdWNoLmFsbG93RHJhZ2dpbmcpe3ZhciBlPXQuZGVsdGFZLGk9dGhpcy5fZ2V0U2Nyb2xsVG9wKCksbz10aGlzLl9zZXRTY3JvbGxUb3AodGhpcy50b3VjaC5pbml0aWFsU2Nyb2xsVG9wK2UpO28hPWkmJih0aGlzLl9yZWRyYXcoKSx0aGlzLmVtaXQoInZlcnRpY2FsRHJhZyIpKX19LG8ucHJvdG90eXBlLl9zZXRTY3JvbGxUb3A9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMucHJvcHMuc2Nyb2xsVG9wPXQsdGhpcy5fdXBkYXRlU2Nyb2xsVG9wKCksdGhpcy5wcm9wcy5zY3JvbGxUb3B9LG8ucHJvdG90eXBlLl91cGRhdGVTY3JvbGxUb3A9ZnVuY3Rpb24oKXt2YXIgdD1NYXRoLm1pbih0aGlzLnByb3BzLmNlbnRlckNvbnRhaW5lci5oZWlnaHQtdGhpcy5wcm9wcy5jZW50ZXIuaGVpZ2h0LDApO3JldHVybiB0IT10aGlzLnByb3BzLnNjcm9sbFRvcE1pbiYmKCJ0b3AiIT10aGlzLm9wdGlvbnMub3JpZW50YXRpb24uaXRlbSYmKHRoaXMucHJvcHMuc2Nyb2xsVG9wKz10LXRoaXMucHJvcHMuc2Nyb2xsVG9wTWluKSx0aGlzLnByb3BzLnNjcm9sbFRvcE1pbj10KSx0aGlzLnByb3BzLnNjcm9sbFRvcD4wJiYodGhpcy5wcm9wcy5zY3JvbGxUb3A9MCksdGhpcy5wcm9wcy5zY3JvbGxUb3A8dCYmKHRoaXMucHJvcHMuc2Nyb2xsVG9wPXQpLHRoaXMucHJvcHMuc2Nyb2xsVG9wfSxvLnByb3RvdHlwZS5fZ2V0U2Nyb2xsVG9wPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMucHJvcHMuc2Nyb2xsVG9wfSxvLnByb3RvdHlwZS5fY3JlYXRlQ29uZmlndXJhdG9yPWZ1bmN0aW9uKCl7dGhyb3cgbmV3IEVycm9yKCJDYW5ub3QgaW52b2tlIGFic3RyYWN0IG1ldGhvZCBfY3JlYXRlQ29uZmlndXJhdG9yIil9LHQuZXhwb3J0cz1vfSxmdW5jdGlvbih0LGUsaSl7ZnVuY3Rpb24gbyh0LGUpe3RoaXMuYm9keT10LHRoaXMuZGVmYXVsdE9wdGlvbnM9e3R5cGU6bnVsbCxvcmllbnRhdGlvbjp7aXRlbToiYm90dG9tIn0sYWxpZ246ImF1dG8iLHN0YWNrOiEwLGdyb3VwT3JkZXJTd2FwOmZ1bmN0aW9uKHQsZSxpKXt2YXIgbz1lLm9yZGVyO2Uub3JkZXI9dC5vcmRlcix0Lm9yZGVyPW99LGdyb3VwT3JkZXI6Im9yZGVyIixzZWxlY3RhYmxlOiEwLG11bHRpc2VsZWN0OiExLGl0ZW1zQWx3YXlzRHJhZ2dhYmxlOiExLGVkaXRhYmxlOnt1cGRhdGVUaW1lOiExLHVwZGF0ZUdyb3VwOiExLGFkZDohMSxyZW1vdmU6ITF9LGdyb3VwRWRpdGFibGU6e29yZGVyOiExLGFkZDohMSxyZW1vdmU6ITF9LHNuYXA6aC5zbmFwLG9uQWRkOmZ1bmN0aW9uKHQsZSl7ZSh0KX0sb25VcGRhdGU6ZnVuY3Rpb24odCxlKXtlKHQpfSxvbk1vdmU6ZnVuY3Rpb24odCxlKXtlKHQpfSxvblJlbW92ZTpmdW5jdGlvbih0LGUpe2UodCl9LG9uTW92aW5nOmZ1bmN0aW9uKHQsZSl7ZSh0KX0sb25BZGRHcm91cDpmdW5jdGlvbih0LGUpe2UodCl9LG9uTW92ZUdyb3VwOmZ1bmN0aW9uKHQsZSl7ZSh0KX0sb25SZW1vdmVHcm91cDpmdW5jdGlvbih0LGUpe2UodCl9LG1hcmdpbjp7aXRlbTp7aG9yaXpvbnRhbDoxMCx2ZXJ0aWNhbDoxMH0sYXhpczoyMH19LHRoaXMub3B0aW9ucz1zLmV4dGVuZCh7fSx0aGlzLmRlZmF1bHRPcHRpb25zKSx0aGlzLml0ZW1PcHRpb25zPXt0eXBlOntzdGFydDoiRGF0ZSIsZW5kOiJEYXRlIn19LHRoaXMuY29udmVyc2lvbj17dG9TY3JlZW46dC51dGlsLnRvU2NyZWVuLHRvVGltZTp0LnV0aWwudG9UaW1lfSx0aGlzLmRvbT17fSx0aGlzLnByb3BzPXt9LHRoaXMuaGFtbWVyPW51bGw7dmFyIGk9dGhpczt0aGlzLml0ZW1zRGF0YT1udWxsLHRoaXMuZ3JvdXBzRGF0YT1udWxsLHRoaXMuaXRlbUxpc3RlbmVycz17YWRkOmZ1bmN0aW9uKHQsZSxvKXtpLl9vbkFkZChlLml0ZW1zKX0sdXBkYXRlOmZ1bmN0aW9uKHQsZSxvKXtpLl9vblVwZGF0ZShlLml0ZW1zKX0scmVtb3ZlOmZ1bmN0aW9uKHQsZSxvKXtpLl9vblJlbW92ZShlLml0ZW1zKX19LHRoaXMuZ3JvdXBMaXN0ZW5lcnM9e2FkZDpmdW5jdGlvbih0LGUsbyl7aS5fb25BZGRHcm91cHMoZS5pdGVtcyl9LHVwZGF0ZTpmdW5jdGlvbih0LGUsbyl7aS5fb25VcGRhdGVHcm91cHMoZS5pdGVtcyl9LHJlbW92ZTpmdW5jdGlvbih0LGUsbyl7aS5fb25SZW1vdmVHcm91cHMoZS5pdGVtcyl9fSx0aGlzLml0ZW1zPXt9LHRoaXMuZ3JvdXBzPXt9LHRoaXMuZ3JvdXBJZHM9W10sdGhpcy5zZWxlY3Rpb249W10sdGhpcy5zdGFja0RpcnR5PSEwLHRoaXMudG91Y2hQYXJhbXM9e30sdGhpcy5ncm91cFRvdWNoUGFyYW1zPXt9LHRoaXMuX2NyZWF0ZSgpLHRoaXMuc2V0T3B0aW9ucyhlKX12YXIgbj1pKDIwKSxzPWkoMSkscj1pKDgpLGE9aSgxMCksaD1pKDI5KSxkPWkoMjUpLGw9aSgzMCksdT1pKDM0KSxjPWkoMzUpLHA9aSgzNiksZj1pKDMyKSxtPWkoMzcpLHY9Il9fdW5ncm91cGVkX18iLGc9Il9fYmFja2dyb3VuZF9fIjtvLnByb3RvdHlwZT1uZXcgZCxvLnR5cGVzPXtiYWNrZ3JvdW5kOm0sYm94OmMscmFuZ2U6Zixwb2ludDpwfSxvLnByb3RvdHlwZS5fY3JlYXRlPWZ1bmN0aW9uKCl7dmFyIHQ9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2Iik7dC5jbGFzc05hbWU9InZpcy1pdGVtc2V0Iix0WyJ0aW1lbGluZS1pdGVtc2V0Il09dGhpcyx0aGlzLmRvbS5mcmFtZT10O3ZhciBlPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpO2UuY2xhc3NOYW1lPSJ2aXMtYmFja2dyb3VuZCIsdC5hcHBlbmRDaGlsZChlKSx0aGlzLmRvbS5iYWNrZ3JvdW5kPWU7dmFyIGk9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2Iik7aS5jbGFzc05hbWU9InZpcy1mb3JlZ3JvdW5kIix0LmFwcGVuZENoaWxkKGkpLHRoaXMuZG9tLmZvcmVncm91bmQ9aTt2YXIgbz1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKTtvLmNsYXNzTmFtZT0idmlzLWF4aXMiLHRoaXMuZG9tLmF4aXM9bzt2YXIgcz1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKTtzLmNsYXNzTmFtZT0idmlzLWxhYmVsc2V0Iix0aGlzLmRvbS5sYWJlbFNldD1zLHRoaXMuX3VwZGF0ZVVuZ3JvdXBlZCgpO3ZhciByPW5ldyB1KGcsbnVsbCx0aGlzKTtyLnNob3coKSx0aGlzLmdyb3Vwc1tnXT1yLHRoaXMuaGFtbWVyPW5ldyBuKHRoaXMuYm9keS5kb20uY2VudGVyQ29udGFpbmVyKSx0aGlzLmhhbW1lci5vbigiaGFtbWVyLmlucHV0IixmdW5jdGlvbih0KXt0LmlzRmlyc3QmJnRoaXMuX29uVG91Y2godCl9LmJpbmQodGhpcykpLHRoaXMuaGFtbWVyLm9uKCJwYW5zdGFydCIsdGhpcy5fb25EcmFnU3RhcnQuYmluZCh0aGlzKSksdGhpcy5oYW1tZXIub24oInBhbm1vdmUiLHRoaXMuX29uRHJhZy5iaW5kKHRoaXMpKSx0aGlzLmhhbW1lci5vbigicGFuZW5kIix0aGlzLl9vbkRyYWdFbmQuYmluZCh0aGlzKSksdGhpcy5oYW1tZXIuZ2V0KCJwYW4iKS5zZXQoe3RocmVzaG9sZDo1LGRpcmVjdGlvbjozMH0pLHRoaXMuaGFtbWVyLm9uKCJ0YXAiLHRoaXMuX29uU2VsZWN0SXRlbS5iaW5kKHRoaXMpKSx0aGlzLmhhbW1lci5vbigicHJlc3MiLHRoaXMuX29uTXVsdGlTZWxlY3RJdGVtLmJpbmQodGhpcykpLHRoaXMuaGFtbWVyLm9uKCJkb3VibGV0YXAiLHRoaXMuX29uQWRkSXRlbS5iaW5kKHRoaXMpKSx0aGlzLmdyb3VwSGFtbWVyPW5ldyBuKHRoaXMuYm9keS5kb20ubGVmdENvbnRhaW5lciksdGhpcy5ncm91cEhhbW1lci5vbigicGFuc3RhcnQiLHRoaXMuX29uR3JvdXBEcmFnU3RhcnQuYmluZCh0aGlzKSksdGhpcy5ncm91cEhhbW1lci5vbigicGFubW92ZSIsdGhpcy5fb25Hcm91cERyYWcuYmluZCh0aGlzKSksdGhpcy5ncm91cEhhbW1lci5vbigicGFuZW5kIix0aGlzLl9vbkdyb3VwRHJhZ0VuZC5iaW5kKHRoaXMpKSx0aGlzLmdyb3VwSGFtbWVyLmdldCgicGFuIikuc2V0KHt0aHJlc2hvbGQ6NSxkaXJlY3Rpb246MzB9KSx0aGlzLnNob3coKX0sby5wcm90b3R5cGUuc2V0T3B0aW9ucz1mdW5jdGlvbih0KXtpZih0KXt2YXIgZT1bInR5cGUiLCJhbGlnbiIsIm9yZGVyIiwic3RhY2siLCJzZWxlY3RhYmxlIiwibXVsdGlzZWxlY3QiLCJpdGVtc0Fsd2F5c0RyYWdnYWJsZSIsIm11bHRpc2VsZWN0UGVyR3JvdXAiLCJncm91cE9yZGVyIiwiZGF0YUF0dHJpYnV0ZXMiLCJ0ZW1wbGF0ZSIsImdyb3VwVGVtcGxhdGUiLCJoaWRlIiwic25hcCIsImdyb3VwT3JkZXJTd2FwIl07cy5zZWxlY3RpdmVFeHRlbmQoZSx0aGlzLm9wdGlvbnMsdCksIm9yaWVudGF0aW9uImluIHQmJigic3RyaW5nIj09dHlwZW9mIHQub3JpZW50YXRpb24/dGhpcy5vcHRpb25zLm9yaWVudGF0aW9uLml0ZW09InRvcCI9PT10Lm9yaWVudGF0aW9uPyJ0b3AiOiJib3R0b20iOiJvYmplY3QiPT10eXBlb2YgdC5vcmllbnRhdGlvbiYmIml0ZW0iaW4gdC5vcmllbnRhdGlvbiYmKHRoaXMub3B0aW9ucy5vcmllbnRhdGlvbi5pdGVtPXQub3JpZW50YXRpb24uaXRlbSkpLCJtYXJnaW4iaW4gdCYmKCJudW1iZXIiPT10eXBlb2YgdC5tYXJnaW4/KHRoaXMub3B0aW9ucy5tYXJnaW4uYXhpcz10Lm1hcmdpbix0aGlzLm9wdGlvbnMubWFyZ2luLml0ZW0uaG9yaXpvbnRhbD10Lm1hcmdpbix0aGlzLm9wdGlvbnMubWFyZ2luLml0ZW0udmVydGljYWw9dC5tYXJnaW4pOiJvYmplY3QiPT10eXBlb2YgdC5tYXJnaW4mJihzLnNlbGVjdGl2ZUV4dGVuZChbImF4aXMiXSx0aGlzLm9wdGlvbnMubWFyZ2luLHQubWFyZ2luKSwiaXRlbSJpbiB0Lm1hcmdpbiYmKCJudW1iZXIiPT10eXBlb2YgdC5tYXJnaW4uaXRlbT8odGhpcy5vcHRpb25zLm1hcmdpbi5pdGVtLmhvcml6b250YWw9dC5tYXJnaW4uaXRlbSx0aGlzLm9wdGlvbnMubWFyZ2luLml0ZW0udmVydGljYWw9dC5tYXJnaW4uaXRlbSk6Im9iamVjdCI9PXR5cGVvZiB0Lm1hcmdpbi5pdGVtJiZzLnNlbGVjdGl2ZUV4dGVuZChbImhvcml6b250YWwiLCJ2ZXJ0aWNhbCJdLHRoaXMub3B0aW9ucy5tYXJnaW4uaXRlbSx0Lm1hcmdpbi5pdGVtKSkpKSwiZWRpdGFibGUiaW4gdCYmKCJib29sZWFuIj09dHlwZW9mIHQuZWRpdGFibGU/KHRoaXMub3B0aW9ucy5lZGl0YWJsZS51cGRhdGVUaW1lPXQuZWRpdGFibGUsdGhpcy5vcHRpb25zLmVkaXRhYmxlLnVwZGF0ZUdyb3VwPXQuZWRpdGFibGUsdGhpcy5vcHRpb25zLmVkaXRhYmxlLmFkZD10LmVkaXRhYmxlLHRoaXMub3B0aW9ucy5lZGl0YWJsZS5yZW1vdmU9dC5lZGl0YWJsZSk6Im9iamVjdCI9PXR5cGVvZiB0LmVkaXRhYmxlJiZzLnNlbGVjdGl2ZUV4dGVuZChbInVwZGF0ZVRpbWUiLCJ1cGRhdGVHcm91cCIsImFkZCIsInJlbW92ZSJdLHRoaXMub3B0aW9ucy5lZGl0YWJsZSx0LmVkaXRhYmxlKSksImdyb3VwRWRpdGFibGUiaW4gdCYmKCJib29sZWFuIj09dHlwZW9mIHQuZ3JvdXBFZGl0YWJsZT8odGhpcy5vcHRpb25zLmdyb3VwRWRpdGFibGUub3JkZXI9dC5ncm91cEVkaXRhYmxlLHRoaXMub3B0aW9ucy5ncm91cEVkaXRhYmxlLmFkZD10Lmdyb3VwRWRpdGFibGUsdGhpcy5vcHRpb25zLmdyb3VwRWRpdGFibGUucmVtb3ZlPXQuZ3JvdXBFZGl0YWJsZSk6Im9iamVjdCI9PXR5cGVvZiB0Lmdyb3VwRWRpdGFibGUmJnMuc2VsZWN0aXZlRXh0ZW5kKFsib3JkZXIiLCJhZGQiLCJyZW1vdmUiXSx0aGlzLm9wdGlvbnMuZ3JvdXBFZGl0YWJsZSx0Lmdyb3VwRWRpdGFibGUpKTt2YXIgaT1mdW5jdGlvbihlKXt2YXIgaT10W2VdO2lmKGkpe2lmKCEoaSBpbnN0YW5jZW9mIEZ1bmN0aW9uKSl0aHJvdyBuZXcgRXJyb3IoIm9wdGlvbiAiK2UrIiBtdXN0IGJlIGEgZnVuY3Rpb24gIitlKyIoaXRlbSwgY2FsbGJhY2spIik7dGhpcy5vcHRpb25zW2VdPWl9fS5iaW5kKHRoaXMpO1sib25BZGQiLCJvblVwZGF0ZSIsIm9uUmVtb3ZlIiwib25Nb3ZlIiwib25Nb3ZpbmciLCJvbkFkZEdyb3VwIiwib25Nb3ZlR3JvdXAiLCJvblJlbW92ZUdyb3VwIl0uZm9yRWFjaChpKSx0aGlzLm1hcmtEaXJ0eSgpfX0sby5wcm90b3R5cGUubWFya0RpcnR5PWZ1bmN0aW9uKHQpe3RoaXMuZ3JvdXBJZHM9W10sdGhpcy5zdGFja0RpcnR5PSEwLHQmJnQucmVmcmVzaEl0ZW1zJiZzLmZvckVhY2godGhpcy5pdGVtcyxmdW5jdGlvbih0KXt0LmRpcnR5PSEwLHQuZGlzcGxheWVkJiZ0LnJlZHJhdygpfSl9LG8ucHJvdG90eXBlLmRlc3Ryb3k9ZnVuY3Rpb24oKXt0aGlzLmhpZGUoKSx0aGlzLnNldEl0ZW1zKG51bGwpLHRoaXMuc2V0R3JvdXBzKG51bGwpLHRoaXMuaGFtbWVyPW51bGwsdGhpcy5ib2R5PW51bGwsdGhpcy5jb252ZXJzaW9uPW51bGx9LG8ucHJvdG90eXBlLmhpZGU9ZnVuY3Rpb24oKXt0aGlzLmRvbS5mcmFtZS5wYXJlbnROb2RlJiZ0aGlzLmRvbS5mcmFtZS5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKHRoaXMuZG9tLmZyYW1lKSx0aGlzLmRvbS5heGlzLnBhcmVudE5vZGUmJnRoaXMuZG9tLmF4aXMucGFyZW50Tm9kZS5yZW1vdmVDaGlsZCh0aGlzLmRvbS5heGlzKSx0aGlzLmRvbS5sYWJlbFNldC5wYXJlbnROb2RlJiZ0aGlzLmRvbS5sYWJlbFNldC5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKHRoaXMuZG9tLmxhYmVsU2V0KX0sby5wcm90b3R5cGUuc2hvdz1mdW5jdGlvbigpe3RoaXMuZG9tLmZyYW1lLnBhcmVudE5vZGV8fHRoaXMuYm9keS5kb20uY2VudGVyLmFwcGVuZENoaWxkKHRoaXMuZG9tLmZyYW1lKSx0aGlzLmRvbS5heGlzLnBhcmVudE5vZGV8fHRoaXMuYm9keS5kb20uYmFja2dyb3VuZFZlcnRpY2FsLmFwcGVuZENoaWxkKHRoaXMuZG9tLmF4aXMpLHRoaXMuZG9tLmxhYmVsU2V0LnBhcmVudE5vZGV8fHRoaXMuYm9keS5kb20ubGVmdC5hcHBlbmRDaGlsZCh0aGlzLmRvbS5sYWJlbFNldCl9LG8ucHJvdG90eXBlLnNldFNlbGVjdGlvbj1mdW5jdGlvbih0KXt2YXIgZSxpLG8sbjtmb3Iodm9pZCAwPT10JiYodD1bXSksQXJyYXkuaXNBcnJheSh0KXx8KHQ9W3RdKSxlPTAsaT10aGlzLnNlbGVjdGlvbi5sZW5ndGg7aT5lO2UrKylvPXRoaXMuc2VsZWN0aW9uW2VdLG49dGhpcy5pdGVtc1tvXSxuJiZuLnVuc2VsZWN0KCk7Zm9yKHRoaXMuc2VsZWN0aW9uPVtdLGU9MCxpPXQubGVuZ3RoO2k+ZTtlKyspbz10W2VdLG49dGhpcy5pdGVtc1tvXSxuJiYodGhpcy5zZWxlY3Rpb24ucHVzaChvKSxuLnNlbGVjdCgpKX0sby5wcm90b3R5cGUuZ2V0U2VsZWN0aW9uPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuc2VsZWN0aW9uLmNvbmNhdChbXSl9LG8ucHJvdG90eXBlLmdldFZpc2libGVJdGVtcz1mdW5jdGlvbigpe3ZhciB0PXRoaXMuYm9keS5yYW5nZS5nZXRSYW5nZSgpLGU9dGhpcy5ib2R5LnV0aWwudG9TY3JlZW4odC5zdGFydCksaT10aGlzLmJvZHkudXRpbC50b1NjcmVlbih0LmVuZCksbz1bXTtmb3IodmFyIG4gaW4gdGhpcy5ncm91cHMpaWYodGhpcy5ncm91cHMuaGFzT3duUHJvcGVydHkobikpZm9yKHZhciBzPXRoaXMuZ3JvdXBzW25dLHI9cy52aXNpYmxlSXRlbXMsYT0wO2E8ci5sZW5ndGg7YSsrKXt2YXIgaD1yW2FdO2gubGVmdDxpJiZoLmxlZnQraC53aWR0aD5lJiZvLnB1c2goaC5pZCl9cmV0dXJuIG99LG8ucHJvdG90eXBlLl9kZXNlbGVjdD1mdW5jdGlvbih0KXtmb3IodmFyIGU9dGhpcy5zZWxlY3Rpb24saT0wLG89ZS5sZW5ndGg7bz5pO2krKylpZihlW2ldPT10KXtlLnNwbGljZShpLDEpO2JyZWFrfX0sby5wcm90b3R5cGUucmVkcmF3PWZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5vcHRpb25zLm1hcmdpbixlPXRoaXMuYm9keS5yYW5nZSxpPXMub3B0aW9uLmFzU2l6ZSxvPXRoaXMub3B0aW9ucyxuPW8ub3JpZW50YXRpb24uaXRlbSxyPSExLGE9dGhpcy5kb20uZnJhbWU7dGhpcy5wcm9wcy50b3A9dGhpcy5ib2R5LmRvbVByb3BzLnRvcC5oZWlnaHQrdGhpcy5ib2R5LmRvbVByb3BzLmJvcmRlci50b3AsdGhpcy5wcm9wcy5sZWZ0PXRoaXMuYm9keS5kb21Qcm9wcy5sZWZ0LndpZHRoK3RoaXMuYm9keS5kb21Qcm9wcy5ib3JkZXIubGVmdCxhLmNsYXNzTmFtZT0idmlzLWl0ZW1zZXQiLHI9dGhpcy5fb3JkZXJHcm91cHMoKXx8cjt2YXIgaD1lLmVuZC1lLnN0YXJ0LGQ9aCE9dGhpcy5sYXN0VmlzaWJsZUludGVydmFsfHx0aGlzLnByb3BzLndpZHRoIT10aGlzLnByb3BzLmxhc3RXaWR0aDtkJiYodGhpcy5zdGFja0RpcnR5PSEwKSx0aGlzLmxhc3RWaXNpYmxlSW50ZXJ2YWw9aCx0aGlzLnByb3BzLmxhc3RXaWR0aD10aGlzLnByb3BzLndpZHRoO3ZhciBsPXRoaXMuc3RhY2tEaXJ0eSx1PXRoaXMuX2ZpcnN0R3JvdXAoKSxjPXtpdGVtOnQuaXRlbSxheGlzOnQuYXhpc30scD17aXRlbTp0Lml0ZW0sYXhpczp0Lml0ZW0udmVydGljYWwvMn0sZj0wLG09dC5heGlzK3QuaXRlbS52ZXJ0aWNhbDtyZXR1cm4gdGhpcy5ncm91cHNbZ10ucmVkcmF3KGUscCxsKSxzLmZvckVhY2godGhpcy5ncm91cHMsZnVuY3Rpb24odCl7dmFyIGk9dD09dT9jOnAsbz10LnJlZHJhdyhlLGksbCk7cj1vfHxyLGYrPXQuaGVpZ2h0fSksZj1NYXRoLm1heChmLG0pLHRoaXMuc3RhY2tEaXJ0eT0hMSxhLnN0eWxlLmhlaWdodD1pKGYpLHRoaXMucHJvcHMud2lkdGg9YS5vZmZzZXRXaWR0aCx0aGlzLnByb3BzLmhlaWdodD1mLHRoaXMuZG9tLmF4aXMuc3R5bGUudG9wPWkoInRvcCI9PW4/dGhpcy5ib2R5LmRvbVByb3BzLnRvcC5oZWlnaHQrdGhpcy5ib2R5LmRvbVByb3BzLmJvcmRlci50b3A6dGhpcy5ib2R5LmRvbVByb3BzLnRvcC5oZWlnaHQrdGhpcy5ib2R5LmRvbVByb3BzLmNlbnRlckNvbnRhaW5lci5oZWlnaHQpLHRoaXMuZG9tLmF4aXMuc3R5bGUubGVmdD0iMCIscj10aGlzLl9pc1Jlc2l6ZWQoKXx8cn0sby5wcm90b3R5cGUuX2ZpcnN0R3JvdXA9ZnVuY3Rpb24oKXt2YXIgdD0idG9wIj09dGhpcy5vcHRpb25zLm9yaWVudGF0aW9uLml0ZW0/MDp0aGlzLmdyb3VwSWRzLmxlbmd0aC0xLGU9dGhpcy5ncm91cElkc1t0XSxpPXRoaXMuZ3JvdXBzW2VdfHx0aGlzLmdyb3Vwc1t2XTtyZXR1cm4gaXx8bnVsbH0sby5wcm90b3R5cGUuX3VwZGF0ZVVuZ3JvdXBlZD1mdW5jdGlvbigpe3ZhciB0LGUsaT10aGlzLmdyb3Vwc1t2XTt0aGlzLmdyb3Vwc1tnXTtpZih0aGlzLmdyb3Vwc0RhdGEpe2lmKGkpe2kuaGlkZSgpLGRlbGV0ZSB0aGlzLmdyb3Vwc1t2XTtmb3IoZSBpbiB0aGlzLml0ZW1zKWlmKHRoaXMuaXRlbXMuaGFzT3duUHJvcGVydHkoZSkpe3Q9dGhpcy5pdGVtc1tlXSx0LnBhcmVudCYmdC5wYXJlbnQucmVtb3ZlKHQpO3ZhciBvPXRoaXMuX2dldEdyb3VwSWQodC5kYXRhKSxuPXRoaXMuZ3JvdXBzW29dO24mJm4uYWRkKHQpfHx0LmhpZGUoKX19fWVsc2UgaWYoIWkpe3ZhciBzPW51bGwscj1udWxsO2k9bmV3IGwocyxyLHRoaXMpLHRoaXMuZ3JvdXBzW3ZdPWk7Zm9yKGUgaW4gdGhpcy5pdGVtcyl0aGlzLml0ZW1zLmhhc093blByb3BlcnR5KGUpJiYodD10aGlzLml0ZW1zW2VdLGkuYWRkKHQpKTtpLnNob3coKX19LG8ucHJvdG90eXBlLmdldExhYmVsU2V0PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZG9tLmxhYmVsU2V0fSxvLnByb3RvdHlwZS5zZXRJdGVtcz1mdW5jdGlvbih0KXt2YXIgZSxpPXRoaXMsbz10aGlzLml0ZW1zRGF0YTtpZih0KXtpZighKHQgaW5zdGFuY2VvZiByfHx0IGluc3RhbmNlb2YgYSkpdGhyb3cgbmV3IFR5cGVFcnJvcigiRGF0YSBtdXN0IGJlIGFuIGluc3RhbmNlIG9mIERhdGFTZXQgb3IgRGF0YVZpZXciKTt0aGlzLml0ZW1zRGF0YT10fWVsc2UgdGhpcy5pdGVtc0RhdGE9bnVsbDtpZihvJiYocy5mb3JFYWNoKHRoaXMuaXRlbUxpc3RlbmVycyxmdW5jdGlvbih0LGUpe28ub2ZmKGUsdCl9KSxlPW8uZ2V0SWRzKCksdGhpcy5fb25SZW1vdmUoZSkpLHRoaXMuaXRlbXNEYXRhKXt2YXIgbj10aGlzLmlkO3MuZm9yRWFjaCh0aGlzLml0ZW1MaXN0ZW5lcnMsZnVuY3Rpb24odCxlKXtpLml0ZW1zRGF0YS5vbihlLHQsbil9KSxlPXRoaXMuaXRlbXNEYXRhLmdldElkcygpLHRoaXMuX29uQWRkKGUpLHRoaXMuX3VwZGF0ZVVuZ3JvdXBlZCgpfX0sby5wcm90b3R5cGUuZ2V0SXRlbXM9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5pdGVtc0RhdGF9LG8ucHJvdG90eXBlLnNldEdyb3Vwcz1mdW5jdGlvbih0KXt2YXIgZSxpPXRoaXM7aWYodGhpcy5ncm91cHNEYXRhJiYocy5mb3JFYWNoKHRoaXMuZ3JvdXBMaXN0ZW5lcnMsZnVuY3Rpb24odCxlKXtpLmdyb3Vwc0RhdGEub2ZmKGUsdCl9KSxlPXRoaXMuZ3JvdXBzRGF0YS5nZXRJZHMoKSx0aGlzLmdyb3Vwc0RhdGE9bnVsbCx0aGlzLl9vblJlbW92ZUdyb3VwcyhlKSksdCl7aWYoISh0IGluc3RhbmNlb2Ygcnx8dCBpbnN0YW5jZW9mIGEpKXRocm93IG5ldyBUeXBlRXJyb3IoIkRhdGEgbXVzdCBiZSBhbiBpbnN0YW5jZSBvZiBEYXRhU2V0IG9yIERhdGFWaWV3Iik7dGhpcy5ncm91cHNEYXRhPXR9ZWxzZSB0aGlzLmdyb3Vwc0RhdGE9bnVsbDtpZih0aGlzLmdyb3Vwc0RhdGEpe3ZhciBvPXRoaXMuaWQ7cy5mb3JFYWNoKHRoaXMuZ3JvdXBMaXN0ZW5lcnMsZnVuY3Rpb24odCxlKXtpLmdyb3Vwc0RhdGEub24oZSx0LG8pfSksZT10aGlzLmdyb3Vwc0RhdGEuZ2V0SWRzKCksdGhpcy5fb25BZGRHcm91cHMoZSl9dGhpcy5fdXBkYXRlVW5ncm91cGVkKCksdGhpcy5fb3JkZXIoKSx0aGlzLmJvZHkuZW1pdHRlci5lbWl0KCJjaGFuZ2UiLHtxdWV1ZTohMH0pfSxvLnByb3RvdHlwZS5nZXRHcm91cHM9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5ncm91cHNEYXRhfSxvLnByb3RvdHlwZS5yZW1vdmVJdGVtPWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMuaXRlbXNEYXRhLmdldCh0KSxpPXRoaXMuaXRlbXNEYXRhLmdldERhdGFTZXQoKTtlJiZ0aGlzLm9wdGlvbnMub25SZW1vdmUoZSxmdW5jdGlvbihlKXtlJiZpLnJlbW92ZSh0KX0pfSxvLnByb3RvdHlwZS5fZ2V0VHlwZT1mdW5jdGlvbih0KXtyZXR1cm4gdC50eXBlfHx0aGlzLm9wdGlvbnMudHlwZXx8KHQuZW5kPyJyYW5nZSI6ImJveCIpfSxvLnByb3RvdHlwZS5fZ2V0R3JvdXBJZD1mdW5jdGlvbih0KXt2YXIgZT10aGlzLl9nZXRUeXBlKHQpO3JldHVybiJiYWNrZ3JvdW5kIj09ZSYmdm9pZCAwPT10Lmdyb3VwP2c6dGhpcy5ncm91cHNEYXRhP3QuZ3JvdXA6dn0sby5wcm90b3R5cGUuX29uVXBkYXRlPWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXM7dC5mb3JFYWNoKGZ1bmN0aW9uKHQpe3ZhciBpLG49ZS5pdGVtc0RhdGEuZ2V0KHQsZS5pdGVtT3B0aW9ucykscz1lLml0ZW1zW3RdLHI9ZS5fZ2V0VHlwZShuKSxhPW8udHlwZXNbcl07aWYocyYmKGEmJnMgaW5zdGFuY2VvZiBhP2UuX3VwZGF0ZUl0ZW0ocyxuKTooaT1zLnNlbGVjdGVkLGUuX3JlbW92ZUl0ZW0ocykscz1udWxsKSksIXMpe2lmKCFhKXRocm93InJhbmdlb3ZlcmZsb3ciPT1yP25ldyBUeXBlRXJyb3IoJ0l0ZW0gdHlwZSAicmFuZ2VvdmVyZmxvdyIgaXMgZGVwcmVjYXRlZC4gVXNlIGNzcyBzdHlsaW5nIGluc3RlYWQ6IC52aXMtaXRlbS52aXMtcmFuZ2UgLnZpcy1pdGVtLWNvbnRlbnQge292ZXJmbG93OiB2aXNpYmxlO30nKTpuZXcgVHlwZUVycm9yKCdVbmtub3duIGl0ZW0gdHlwZSAiJytyKyciJyk7cz1uZXcgYShuLGUuY29udmVyc2lvbixlLm9wdGlvbnMpLHMuaWQ9dCxlLl9hZGRJdGVtKHMpLGkmJih0aGlzLnNlbGVjdGlvbi5wdXNoKHQpLHMuc2VsZWN0KCkpfX0uYmluZCh0aGlzKSksdGhpcy5fb3JkZXIoKSx0aGlzLnN0YWNrRGlydHk9ITAsdGhpcy5ib2R5LmVtaXR0ZXIuZW1pdCgiY2hhbmdlIix7cXVldWU6ITB9KX0sby5wcm90b3R5cGUuX29uQWRkPW8ucHJvdG90eXBlLl9vblVwZGF0ZSxvLnByb3RvdHlwZS5fb25SZW1vdmU9ZnVuY3Rpb24odCl7dmFyIGU9MCxpPXRoaXM7dC5mb3JFYWNoKGZ1bmN0aW9uKHQpe3ZhciBvPWkuaXRlbXNbdF07byYmKGUrKyxpLl9yZW1vdmVJdGVtKG8pKX0pLGUmJih0aGlzLl9vcmRlcigpLHRoaXMuc3RhY2tEaXJ0eT0hMCx0aGlzLmJvZHkuZW1pdHRlci5lbWl0KCJjaGFuZ2UiLHtxdWV1ZTohMH0pKX0sby5wcm90b3R5cGUuX29yZGVyPWZ1bmN0aW9uKCl7cy5mb3JFYWNoKHRoaXMuZ3JvdXBzLGZ1bmN0aW9uKHQpe3Qub3JkZXIoKX0pfSxvLnByb3RvdHlwZS5fb25VcGRhdGVHcm91cHM9ZnVuY3Rpb24odCl7dGhpcy5fb25BZGRHcm91cHModCl9LG8ucHJvdG90eXBlLl9vbkFkZEdyb3Vwcz1mdW5jdGlvbih0KXt2YXIgZT10aGlzO3QuZm9yRWFjaChmdW5jdGlvbih0KXt2YXIgaT1lLmdyb3Vwc0RhdGEuZ2V0KHQpLG89ZS5ncm91cHNbdF07aWYobylvLnNldERhdGEoaSk7ZWxzZXtpZih0PT12fHx0PT1nKXRocm93IG5ldyBFcnJvcigiSWxsZWdhbCBncm91cCBpZC4gIit0KyIgaXMgYSByZXNlcnZlZCBpZC4iKTt2YXIgbj1PYmplY3QuY3JlYXRlKGUub3B0aW9ucyk7cy5leHRlbmQobix7aGVpZ2h0Om51bGx9KSxvPW5ldyBsKHQsaSxlKSxlLmdyb3Vwc1t0XT1vO2Zvcih2YXIgciBpbiBlLml0ZW1zKWlmKGUuaXRlbXMuaGFzT3duUHJvcGVydHkocikpe3ZhciBhPWUuaXRlbXNbcl07YS5kYXRhLmdyb3VwPT10JiZvLmFkZChhKX1vLm9yZGVyKCksby5zaG93KCl9fSksdGhpcy5ib2R5LmVtaXR0ZXIuZW1pdCgiY2hhbmdlIix7cXVldWU6ITB9KX0sby5wcm90b3R5cGUuX29uUmVtb3ZlR3JvdXBzPWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMuZ3JvdXBzO3QuZm9yRWFjaChmdW5jdGlvbih0KXt2YXIgaT1lW3RdO2kmJihpLmhpZGUoKSxkZWxldGUgZVt0XSl9KSx0aGlzLm1hcmtEaXJ0eSgpLHRoaXMuYm9keS5lbWl0dGVyLmVtaXQoImNoYW5nZSIse3F1ZXVlOiEwfSl9LG8ucHJvdG90eXBlLl9vcmRlckdyb3Vwcz1mdW5jdGlvbigpe2lmKHRoaXMuZ3JvdXBzRGF0YSl7dmFyIHQ9dGhpcy5ncm91cHNEYXRhLmdldElkcyh7b3JkZXI6dGhpcy5vcHRpb25zLmdyb3VwT3JkZXJ9KSxlPSFzLmVxdWFsQXJyYXkodCx0aGlzLmdyb3VwSWRzKTtpZihlKXt2YXIgaT10aGlzLmdyb3Vwczt0LmZvckVhY2goZnVuY3Rpb24odCl7aVt0XS5oaWRlKCl9KSx0LmZvckVhY2goZnVuY3Rpb24odCl7aVt0XS5zaG93KCl9KSx0aGlzLmdyb3VwSWRzPXR9cmV0dXJuIGV9cmV0dXJuITF9LG8ucHJvdG90eXBlLl9hZGRJdGVtPWZ1bmN0aW9uKHQpe3RoaXMuaXRlbXNbdC5pZF09dDt2YXIgZT10aGlzLl9nZXRHcm91cElkKHQuZGF0YSksaT10aGlzLmdyb3Vwc1tlXTtpJiZpLmFkZCh0KX0sby5wcm90b3R5cGUuX3VwZGF0ZUl0ZW09ZnVuY3Rpb24odCxlKXt2YXIgaT10LmRhdGEuZ3JvdXAsbz10LmRhdGEuc3ViZ3JvdXA7aWYodC5zZXREYXRhKGUpLGkhPXQuZGF0YS5ncm91cHx8byE9dC5kYXRhLnN1Ymdyb3VwKXt2YXIgbj10aGlzLmdyb3Vwc1tpXTtuJiZuLnJlbW92ZSh0KTt2YXIgcz10aGlzLl9nZXRHcm91cElkKHQuZGF0YSkscj10aGlzLmdyb3Vwc1tzXTtyJiZyLmFkZCh0KX19LG8ucHJvdG90eXBlLl9yZW1vdmVJdGVtPWZ1bmN0aW9uKHQpe3QuaGlkZSgpLGRlbGV0ZSB0aGlzLml0ZW1zW3QuaWRdO3ZhciBlPXRoaXMuc2VsZWN0aW9uLmluZGV4T2YodC5pZCk7LTEhPWUmJnRoaXMuc2VsZWN0aW9uLnNwbGljZShlLDEpLHQucGFyZW50JiZ0LnBhcmVudC5yZW1vdmUodCl9LG8ucHJvdG90eXBlLl9jb25zdHJ1Y3RCeUVuZEFycmF5PWZ1bmN0aW9uKHQpe2Zvcih2YXIgZT1bXSxpPTA7aTx0Lmxlbmd0aDtpKyspdFtpXWluc3RhbmNlb2YgZiYmZS5wdXNoKHRbaV0pO3JldHVybiBlfSxvLnByb3RvdHlwZS5fb25Ub3VjaD1mdW5jdGlvbih0KXt0aGlzLnRvdWNoUGFyYW1zLml0ZW09dGhpcy5pdGVtRnJvbVRhcmdldCh0KSx0aGlzLnRvdWNoUGFyYW1zLmRyYWdMZWZ0SXRlbT10LnRhcmdldC5kcmFnTGVmdEl0ZW18fCExLHRoaXMudG91Y2hQYXJhbXMuZHJhZ1JpZ2h0SXRlbT10LnRhcmdldC5kcmFnUmlnaHRJdGVtfHwhMSx0aGlzLnRvdWNoUGFyYW1zLml0ZW1Qcm9wcz1udWxsfSxvLnByb3RvdHlwZS5fZ2V0R3JvdXBJbmRleD1mdW5jdGlvbih0KXtmb3IodmFyIGU9MDtlPHRoaXMuZ3JvdXBJZHMubGVuZ3RoO2UrKylpZih0PT10aGlzLmdyb3VwSWRzW2VdKXJldHVybiBlfSxvLnByb3RvdHlwZS5fb25EcmFnU3RhcnQ9ZnVuY3Rpb24odCl7dmFyIGUsaT10aGlzLnRvdWNoUGFyYW1zLml0ZW18fG51bGwsbz10aGlzO2lmKGkmJihpLnNlbGVjdGVkfHx0aGlzLm9wdGlvbnMuaXRlbXNBbHdheXNEcmFnZ2FibGUpKXtpZighdGhpcy5vcHRpb25zLmVkaXRhYmxlLnVwZGF0ZVRpbWUmJiF0aGlzLm9wdGlvbnMuZWRpdGFibGUudXBkYXRlR3JvdXAmJiFpLmVkaXRhYmxlKXJldHVybjtpZihpLmVkaXRhYmxlPT09ITEpcmV0dXJuO3ZhciBuPXRoaXMudG91Y2hQYXJhbXMuZHJhZ0xlZnRJdGVtLHM9dGhpcy50b3VjaFBhcmFtcy5kcmFnUmlnaHRJdGVtO2lmKG4pZT17aXRlbTpuLGluaXRpYWxYOnQuY2VudGVyLngsZHJhZ0xlZnQ6ITAsZGF0YTp0aGlzLl9jbG9uZUl0ZW1EYXRhKGkuZGF0YSl9LHRoaXMudG91Y2hQYXJhbXMuaXRlbVByb3BzPVtlXTtlbHNlIGlmKHMpZT17aXRlbTpzLGluaXRpYWxYOnQuY2VudGVyLngsZHJhZ1JpZ2h0OiEwLGRhdGE6dGhpcy5fY2xvbmVJdGVtRGF0YShpLmRhdGEpfSx0aGlzLnRvdWNoUGFyYW1zLml0ZW1Qcm9wcz1bZV07ZWxzZXt0aGlzLnRvdWNoUGFyYW1zLnNlbGVjdGVkSXRlbT1pO3ZhciByPXRoaXMuX2dldEdyb3VwSW5kZXgoaS5kYXRhLmdyb3VwKSxhPXRoaXMub3B0aW9ucy5pdGVtc0Fsd2F5c0RyYWdnYWJsZSYmIWkuc2VsZWN0ZWQ/W2kuaWRdOnRoaXMuZ2V0U2VsZWN0aW9uKCk7dGhpcy50b3VjaFBhcmFtcy5pdGVtUHJvcHM9YS5tYXAoZnVuY3Rpb24oZSl7dmFyIGk9by5pdGVtc1tlXSxuPW8uX2dldEdyb3VwSW5kZXgoaS5kYXRhLmdyb3VwKTtyZXR1cm57aXRlbTppLGluaXRpYWxYOnQuY2VudGVyLngsZ3JvdXBPZmZzZXQ6ci1uLGRhdGE6dGhpcy5fY2xvbmVJdGVtRGF0YShpLmRhdGEpfX0uYmluZCh0aGlzKSl9dC5zdG9wUHJvcGFnYXRpb24oKX1lbHNlIHRoaXMub3B0aW9ucy5lZGl0YWJsZS5hZGQmJih0LnNyY0V2ZW50LmN0cmxLZXl8fHQuc3JjRXZlbnQubWV0YUtleSkmJnRoaXMuX29uRHJhZ1N0YXJ0QWRkSXRlbSh0KX0sby5wcm90b3R5cGUuX29uRHJhZ1N0YXJ0QWRkSXRlbT1mdW5jdGlvbih0KXt2YXIgZT10aGlzLm9wdGlvbnMuc25hcHx8bnVsbCxpPXMuZ2V0QWJzb2x1dGVMZWZ0KHRoaXMuZG9tLmZyYW1lKSxvPXQuY2VudGVyLngtaS0xMCxuPXRoaXMuYm9keS51dGlsLnRvVGltZShvKSxyPXRoaXMuYm9keS51dGlsLmdldFNjYWxlKCksYT10aGlzLmJvZHkudXRpbC5nZXRTdGVwKCksaD1lP2UobixyLGEpOm4sZD1oLGw9e3R5cGU6InJhbmdlIixzdGFydDpoLGVuZDpkLGNvbnRlbnQ6Im5ldyBpdGVtIn0sdT1zLnJhbmRvbVVVSUQoKTtsW3RoaXMuaXRlbXNEYXRhLl9maWVsZElkXT11O3ZhciBjPXRoaXMuZ3JvdXBGcm9tVGFyZ2V0KHQpO2MmJihsLmdyb3VwPWMuZ3JvdXBJZCk7dmFyIHA9bmV3IGYobCx0aGlzLmNvbnZlcnNpb24sdGhpcy5vcHRpb25zKTtwLmlkPXUscC5kYXRhPXRoaXMuX2Nsb25lSXRlbURhdGEobCksdGhpcy5fYWRkSXRlbShwKTt2YXIgbT17aXRlbTpwLGRyYWdSaWdodDohMCxpbml0aWFsWDp0LmNlbnRlci54LGRhdGE6cC5kYXRhfTt0aGlzLnRvdWNoUGFyYW1zLml0ZW1Qcm9wcz1bbV0sdC5zdG9wUHJvcGFnYXRpb24oKX0sby5wcm90b3R5cGUuX29uRHJhZz1mdW5jdGlvbih0KXtpZih0aGlzLnRvdWNoUGFyYW1zLml0ZW1Qcm9wcyl7dC5zdG9wUHJvcGFnYXRpb24oKTt2YXIgZT10aGlzLGk9dGhpcy5vcHRpb25zLnNuYXB8fG51bGwsbz10aGlzLmJvZHkuZG9tLnJvb3Qub2Zmc2V0TGVmdCt0aGlzLmJvZHkuZG9tUHJvcHMubGVmdC53aWR0aCxuPXRoaXMuYm9keS51dGlsLmdldFNjYWxlKCkscj10aGlzLmJvZHkudXRpbC5nZXRTdGVwKCksYT10aGlzLnRvdWNoUGFyYW1zLnNlbGVjdGVkSXRlbSxoPWUub3B0aW9ucy5lZGl0YWJsZS51cGRhdGVHcm91cCxkPW51bGw7aWYoaCYmYSYmdm9pZCAwIT1hLmRhdGEuZ3JvdXApe3ZhciBsPWUuZ3JvdXBGcm9tVGFyZ2V0KHQpO2wmJihkPXRoaXMuX2dldEdyb3VwSW5kZXgobC5ncm91cElkKSl9dGhpcy50b3VjaFBhcmFtcy5pdGVtUHJvcHMuZm9yRWFjaChmdW5jdGlvbihhKXt2YXIgaD1lLmJvZHkudXRpbC50b1RpbWUodC5jZW50ZXIueC1vKSxsPWUuYm9keS51dGlsLnRvVGltZShhLmluaXRpYWxYLW8pLHU9aC1sLGM9dGhpcy5fY2xvbmVJdGVtRGF0YShhLml0ZW0uZGF0YSk7aWYoYS5pdGVtLmVkaXRhYmxlIT09ITEpe3ZhciBwPWUub3B0aW9ucy5lZGl0YWJsZS51cGRhdGVUaW1lfHxhLml0ZW0uZWRpdGFibGU9PT0hMDtpZihwKWlmKGEuZHJhZ0xlZnQpe2lmKHZvaWQgMCE9Yy5zdGFydCl7dmFyIGY9cy5jb252ZXJ0KGEuZGF0YS5zdGFydCwiRGF0ZSIpLG09bmV3IERhdGUoZi52YWx1ZU9mKCkrdSk7Yy5zdGFydD1pP2kobSxuLHIpOm19fWVsc2UgaWYoYS5kcmFnUmlnaHQpe2lmKHZvaWQgMCE9Yy5lbmQpe3ZhciB2PXMuY29udmVydChhLmRhdGEuZW5kLCJEYXRlIiksZz1uZXcgRGF0ZSh2LnZhbHVlT2YoKSt1KTtjLmVuZD1pP2koZyxuLHIpOmd9fWVsc2UgaWYodm9pZCAwIT1jLnN0YXJ0KXt2YXIgZj1zLmNvbnZlcnQoYS5kYXRhLnN0YXJ0LCJEYXRlIikudmFsdWVPZigpLG09bmV3IERhdGUoZit1KTtpZih2b2lkIDAhPWMuZW5kKXt2YXIgdj1zLmNvbnZlcnQoYS5kYXRhLmVuZCwiRGF0ZSIpLHk9di52YWx1ZU9mKCktZi52YWx1ZU9mKCk7Yy5zdGFydD1pP2kobSxuLHIpOm0sYy5lbmQ9bmV3IERhdGUoYy5zdGFydC52YWx1ZU9mKCkreSl9ZWxzZSBjLnN0YXJ0PWk/aShtLG4scik6bX12YXIgYj1lLm9wdGlvbnMuZWRpdGFibGUudXBkYXRlR3JvdXB8fGEuaXRlbS5lZGl0YWJsZT09PSEwO2lmKGImJiFhLmRyYWdMZWZ0JiYhYS5kcmFnUmlnaHQmJm51bGwhPWQmJnZvaWQgMCE9Yy5ncm91cCl7dmFyIHc9ZC1hLmdyb3VwT2Zmc2V0O3c9TWF0aC5tYXgoMCx3KSx3PU1hdGgubWluKGUuZ3JvdXBJZHMubGVuZ3RoLTEsdyksYy5ncm91cD1lLmdyb3VwSWRzW3ddfWM9dGhpcy5fY2xvbmVJdGVtRGF0YShjKSxlLm9wdGlvbnMub25Nb3ZpbmcoYyxmdW5jdGlvbih0KXt0JiZhLml0ZW0uc2V0RGF0YSh0aGlzLl9jbG9uZUl0ZW1EYXRhKHQsIkRhdGUiKSl9LmJpbmQodGhpcykpfX0uYmluZCh0aGlzKSksdGhpcy5zdGFja0RpcnR5PSEwLHRoaXMuYm9keS5lbWl0dGVyLmVtaXQoImNoYW5nZSIpfX0sby5wcm90b3R5cGUuX21vdmVUb0dyb3VwPWZ1bmN0aW9uKHQsZSl7dmFyIGk9dGhpcy5ncm91cHNbZV07aWYoaSYmaS5ncm91cElkIT10LmRhdGEuZ3JvdXApe3ZhciBvPXQucGFyZW50O28ucmVtb3ZlKHQpLG8ub3JkZXIoKSxpLmFkZCh0KSxpLm9yZGVyKCksdC5kYXRhLmdyb3VwPWkuZ3JvdXBJZH19LG8ucHJvdG90eXBlLl9vbkRyYWdFbmQ9ZnVuY3Rpb24odCl7aWYodGhpcy50b3VjaFBhcmFtcy5pdGVtUHJvcHMpe3Quc3RvcFByb3BhZ2F0aW9uKCk7dmFyIGU9dGhpcyxpPXRoaXMuaXRlbXNEYXRhLmdldERhdGFTZXQoKSxvPXRoaXMudG91Y2hQYXJhbXMuaXRlbVByb3BzO3RoaXMudG91Y2hQYXJhbXMuaXRlbVByb3BzPW51bGwsby5mb3JFYWNoKGZ1bmN0aW9uKHQpe3ZhciBvPXQuaXRlbS5pZCxuPW51bGwhPWUuaXRlbXNEYXRhLmdldChvLGUuaXRlbU9wdGlvbnMpO2lmKG4pe3ZhciBzPXRoaXMuX2Nsb25lSXRlbURhdGEodC5pdGVtLmRhdGEpO2Uub3B0aW9ucy5vbk1vdmUocyxmdW5jdGlvbihuKXtuPyhuW2kuX2ZpZWxkSWRdPW8saS51cGRhdGUobikpOih0Lml0ZW0uc2V0RGF0YSh0LmRhdGEpLGUuc3RhY2tEaXJ0eT0hMCxlLmJvZHkuZW1pdHRlci5lbWl0KCJjaGFuZ2UiKSl9KX1lbHNlIGUub3B0aW9ucy5vbkFkZCh0Lml0ZW0uZGF0YSxmdW5jdGlvbihpKXtlLl9yZW1vdmVJdGVtKHQuaXRlbSksaSYmZS5pdGVtc0RhdGEuZ2V0RGF0YVNldCgpLmFkZChpKSxlLnN0YWNrRGlydHk9ITAsZS5ib2R5LmVtaXR0ZXIuZW1pdCgiY2hhbmdlIil9KX0uYmluZCh0aGlzKSl9fSxvLnByb3RvdHlwZS5fb25Hcm91cERyYWdTdGFydD1mdW5jdGlvbih0KXt0aGlzLm9wdGlvbnMuZ3JvdXBFZGl0YWJsZS5vcmRlciYmKHRoaXMuZ3JvdXBUb3VjaFBhcmFtcy5ncm91cD10aGlzLmdyb3VwRnJvbVRhcmdldCh0KSx0aGlzLmdyb3VwVG91Y2hQYXJhbXMuZ3JvdXAmJih0LnN0b3BQcm9wYWdhdGlvbigpLHRoaXMuZ3JvdXBUb3VjaFBhcmFtcy5vcmlnaW5hbE9yZGVyPXRoaXMuZ3JvdXBzRGF0YS5nZXRJZHMoe29yZGVyOnRoaXMub3B0aW9ucy5ncm91cE9yZGVyfSkpKX0sby5wcm90b3R5cGUuX29uR3JvdXBEcmFnPWZ1bmN0aW9uKHQpe2lmKHRoaXMub3B0aW9ucy5ncm91cEVkaXRhYmxlLm9yZGVyJiZ0aGlzLmdyb3VwVG91Y2hQYXJhbXMuZ3JvdXApe3Quc3RvcFByb3BhZ2F0aW9uKCk7dmFyIGU9dGhpcy5ncm91cEZyb21UYXJnZXQodCk7aWYoZSYmZS5oZWlnaHQhPXRoaXMuZ3JvdXBUb3VjaFBhcmFtcy5ncm91cC5oZWlnaHQpe3ZhciBpPWUudG9wPHRoaXMuZ3JvdXBUb3VjaFBhcmFtcy5ncm91cC50b3Asbz10LmNlbnRlcj90LmNlbnRlci55OnQuY2xpZW50WSxuPXMuZ2V0QWJzb2x1dGVUb3AoZS5kb20uZm9yZWdyb3VuZCkscj10aGlzLmdyb3VwVG91Y2hQYXJhbXMuZ3JvdXAuaGVpZ2h0O2lmKGkpe2lmKG8+bityKXJldHVybjsKfWVsc2V7dmFyIGE9ZS5oZWlnaHQ7aWYobithLXI+bylyZXR1cm59fWlmKGUmJmUhPXRoaXMuZ3JvdXBUb3VjaFBhcmFtcy5ncm91cCl7dmFyIGg9dGhpcy5ncm91cHNEYXRhLGQ9aC5nZXQoZS5ncm91cElkKSxsPWguZ2V0KHRoaXMuZ3JvdXBUb3VjaFBhcmFtcy5ncm91cC5ncm91cElkKTtsJiZkJiYodGhpcy5vcHRpb25zLmdyb3VwT3JkZXJTd2FwKGwsZCx0aGlzLmdyb3Vwc0RhdGEpLHRoaXMuZ3JvdXBzRGF0YS51cGRhdGUobCksdGhpcy5ncm91cHNEYXRhLnVwZGF0ZShkKSk7dmFyIHU9dGhpcy5ncm91cHNEYXRhLmdldElkcyh7b3JkZXI6dGhpcy5vcHRpb25zLmdyb3VwT3JkZXJ9KTtpZighcy5lcXVhbEFycmF5KHUsdGhpcy5ncm91cFRvdWNoUGFyYW1zLm9yaWdpbmFsT3JkZXIpKWZvcih2YXIgaD10aGlzLmdyb3Vwc0RhdGEsYz10aGlzLmdyb3VwVG91Y2hQYXJhbXMub3JpZ2luYWxPcmRlcixwPXRoaXMuZ3JvdXBUb3VjaFBhcmFtcy5ncm91cC5ncm91cElkLGY9TWF0aC5taW4oYy5sZW5ndGgsdS5sZW5ndGgpLG09MCx2PTAsZz0wO2Y+bTspe2Zvcig7Zj5tK3YmJmY+bStnJiZ1W20rdl09PWNbbStnXTspbSsrO2lmKG0rdj49ZilicmVhaztpZih1W20rdl0hPXApaWYoY1ttK2ddIT1wKXt2YXIgeT11LmluZGV4T2YoY1ttK2ddKSxiPWguZ2V0KHVbbSt2XSksdz1oLmdldChjW20rZ10pO3RoaXMub3B0aW9ucy5ncm91cE9yZGVyU3dhcChiLHcsaCksaC51cGRhdGUoYiksaC51cGRhdGUodyk7dmFyIF89dVttK3ZdO3VbbSt2XT1jW20rZ10sdVt5XT1fLG0rK31lbHNlIGc9MTtlbHNlIHY9MX19fX0sby5wcm90b3R5cGUuX29uR3JvdXBEcmFnRW5kPWZ1bmN0aW9uKHQpe2lmKHRoaXMub3B0aW9ucy5ncm91cEVkaXRhYmxlLm9yZGVyJiZ0aGlzLmdyb3VwVG91Y2hQYXJhbXMuZ3JvdXApe3Quc3RvcFByb3BhZ2F0aW9uKCk7dmFyIGU9dGhpcyxpPWUuZ3JvdXBUb3VjaFBhcmFtcy5ncm91cC5ncm91cElkLG89ZS5ncm91cHNEYXRhLmdldERhdGFTZXQoKSxuPXMuZXh0ZW5kKHt9LG8uZ2V0KGkpKTtlLm9wdGlvbnMub25Nb3ZlR3JvdXAobixmdW5jdGlvbih0KXtpZih0KXRbby5fZmllbGRJZF09aSxvLnVwZGF0ZSh0KTtlbHNle3ZhciBuPW8uZ2V0SWRzKHtvcmRlcjplLm9wdGlvbnMuZ3JvdXBPcmRlcn0pO2lmKCFzLmVxdWFsQXJyYXkobixlLmdyb3VwVG91Y2hQYXJhbXMub3JpZ2luYWxPcmRlcikpZm9yKHZhciByPWUuZ3JvdXBUb3VjaFBhcmFtcy5vcmlnaW5hbE9yZGVyLGE9TWF0aC5taW4oci5sZW5ndGgsbi5sZW5ndGgpLGg9MDthPmg7KXtmb3IoO2E+aCYmbltoXT09cltoXTspaCsrO2lmKGg+PWEpYnJlYWs7dmFyIGQ9bi5pbmRleE9mKHJbaF0pLGw9by5nZXQobltoXSksdT1vLmdldChyW2hdKTtlLm9wdGlvbnMuZ3JvdXBPcmRlclN3YXAobCx1LG8pLGdyb3Vwc0RhdGEudXBkYXRlKGwpLGdyb3Vwc0RhdGEudXBkYXRlKHUpO3ZhciBjPW5baF07bltoXT1yW2hdLG5bZF09YyxoKyt9fX0pLGUuYm9keS5lbWl0dGVyLmVtaXQoImdyb3VwRHJhZ2dlZCIse2dyb3VwSWQ6aX0pfX0sby5wcm90b3R5cGUuX29uU2VsZWN0SXRlbT1mdW5jdGlvbih0KXtpZih0aGlzLm9wdGlvbnMuc2VsZWN0YWJsZSl7dmFyIGU9dC5zcmNFdmVudCYmKHQuc3JjRXZlbnQuY3RybEtleXx8dC5zcmNFdmVudC5tZXRhS2V5KSxpPXQuc3JjRXZlbnQmJnQuc3JjRXZlbnQuc2hpZnRLZXk7aWYoZXx8aSlyZXR1cm4gdm9pZCB0aGlzLl9vbk11bHRpU2VsZWN0SXRlbSh0KTt2YXIgbz10aGlzLmdldFNlbGVjdGlvbigpLG49dGhpcy5pdGVtRnJvbVRhcmdldCh0KSxzPW4/W24uaWRdOltdO3RoaXMuc2V0U2VsZWN0aW9uKHMpO3ZhciByPXRoaXMuZ2V0U2VsZWN0aW9uKCk7KHIubGVuZ3RoPjB8fG8ubGVuZ3RoPjApJiZ0aGlzLmJvZHkuZW1pdHRlci5lbWl0KCJzZWxlY3QiLHtpdGVtczpyLGV2ZW50OnR9KX19LG8ucHJvdG90eXBlLl9vbkFkZEl0ZW09ZnVuY3Rpb24odCl7aWYodGhpcy5vcHRpb25zLnNlbGVjdGFibGUmJnRoaXMub3B0aW9ucy5lZGl0YWJsZS5hZGQpe3ZhciBlPXRoaXMsaT10aGlzLm9wdGlvbnMuc25hcHx8bnVsbCxvPXRoaXMuaXRlbUZyb21UYXJnZXQodCk7aWYobyl7dmFyIG49ZS5pdGVtc0RhdGEuZ2V0KG8uaWQpO3RoaXMub3B0aW9ucy5vblVwZGF0ZShuLGZ1bmN0aW9uKHQpe3QmJmUuaXRlbXNEYXRhLmdldERhdGFTZXQoKS51cGRhdGUodCl9KX1lbHNle3ZhciByPXMuZ2V0QWJzb2x1dGVMZWZ0KHRoaXMuZG9tLmZyYW1lKSxhPXQuY2VudGVyLngtcixoPXRoaXMuYm9keS51dGlsLnRvVGltZShhKSxkPXRoaXMuYm9keS51dGlsLmdldFNjYWxlKCksbD10aGlzLmJvZHkudXRpbC5nZXRTdGVwKCksdT17c3RhcnQ6aT9pKGgsZCxsKTpoLGNvbnRlbnQ6Im5ldyBpdGVtIn07aWYoInJhbmdlIj09PXRoaXMub3B0aW9ucy50eXBlKXt2YXIgYz10aGlzLmJvZHkudXRpbC50b1RpbWUoYSt0aGlzLnByb3BzLndpZHRoLzUpO3UuZW5kPWk/aShjLGQsbCk6Y311W3RoaXMuaXRlbXNEYXRhLl9maWVsZElkXT1zLnJhbmRvbVVVSUQoKTt2YXIgcD10aGlzLmdyb3VwRnJvbVRhcmdldCh0KTtwJiYodS5ncm91cD1wLmdyb3VwSWQpLHU9dGhpcy5fY2xvbmVJdGVtRGF0YSh1KSx0aGlzLm9wdGlvbnMub25BZGQodSxmdW5jdGlvbih0KXt0JiZlLml0ZW1zRGF0YS5nZXREYXRhU2V0KCkuYWRkKHQpfSl9fX0sby5wcm90b3R5cGUuX29uTXVsdGlTZWxlY3RJdGVtPWZ1bmN0aW9uKHQpe2lmKHRoaXMub3B0aW9ucy5zZWxlY3RhYmxlKXt2YXIgZT10aGlzLml0ZW1Gcm9tVGFyZ2V0KHQpO2lmKGUpe3ZhciBpPXRoaXMub3B0aW9ucy5tdWx0aXNlbGVjdD90aGlzLmdldFNlbGVjdGlvbigpOltdLG49dC5zcmNFdmVudCYmdC5zcmNFdmVudC5zaGlmdEtleXx8ITE7aWYobiYmdGhpcy5vcHRpb25zLm11bHRpc2VsZWN0KXt2YXIgcz10aGlzLml0ZW1zRGF0YS5nZXQoZS5pZCkuZ3JvdXAscj12b2lkIDA7dGhpcy5vcHRpb25zLm11bHRpc2VsZWN0UGVyR3JvdXAmJmkubGVuZ3RoPjAmJihyPXRoaXMuaXRlbXNEYXRhLmdldChpWzBdKS5ncm91cCksdGhpcy5vcHRpb25zLm11bHRpc2VsZWN0UGVyR3JvdXAmJnZvaWQgMCE9ciYmciE9c3x8aS5wdXNoKGUuaWQpO3ZhciBhPW8uX2dldEl0ZW1SYW5nZSh0aGlzLml0ZW1zRGF0YS5nZXQoaSx0aGlzLml0ZW1PcHRpb25zKSk7aWYoIXRoaXMub3B0aW9ucy5tdWx0aXNlbGVjdFBlckdyb3VwfHxyPT1zKXtpPVtdO2Zvcih2YXIgaCBpbiB0aGlzLml0ZW1zKWlmKHRoaXMuaXRlbXMuaGFzT3duUHJvcGVydHkoaCkpe3ZhciBkPXRoaXMuaXRlbXNbaF0sbD1kLmRhdGEuc3RhcnQsdT12b2lkIDAhPT1kLmRhdGEuZW5kP2QuZGF0YS5lbmQ6bDshKGw+PWEubWluJiZ1PD1hLm1heCl8fHRoaXMub3B0aW9ucy5tdWx0aXNlbGVjdFBlckdyb3VwJiZyIT10aGlzLml0ZW1zRGF0YS5nZXQoZC5pZCkuZ3JvdXB8fGQgaW5zdGFuY2VvZiBtfHxpLnB1c2goZC5pZCl9fX1lbHNle3ZhciBjPWkuaW5kZXhPZihlLmlkKTstMT09Yz9pLnB1c2goZS5pZCk6aS5zcGxpY2UoYywxKX10aGlzLnNldFNlbGVjdGlvbihpKSx0aGlzLmJvZHkuZW1pdHRlci5lbWl0KCJzZWxlY3QiLHtpdGVtczp0aGlzLmdldFNlbGVjdGlvbigpLGV2ZW50OnR9KX19fSxvLl9nZXRJdGVtUmFuZ2U9ZnVuY3Rpb24odCl7dmFyIGU9bnVsbCxpPW51bGw7cmV0dXJuIHQuZm9yRWFjaChmdW5jdGlvbih0KXsobnVsbD09aXx8dC5zdGFydDxpKSYmKGk9dC5zdGFydCksdm9pZCAwIT10LmVuZD8obnVsbD09ZXx8dC5lbmQ+ZSkmJihlPXQuZW5kKToobnVsbD09ZXx8dC5zdGFydD5lKSYmKGU9dC5zdGFydCl9KSx7bWluOmksbWF4OmV9fSxvLnByb3RvdHlwZS5pdGVtRnJvbVRhcmdldD1mdW5jdGlvbih0KXtmb3IodmFyIGU9dC50YXJnZXQ7ZTspe2lmKGUuaGFzT3duUHJvcGVydHkoInRpbWVsaW5lLWl0ZW0iKSlyZXR1cm4gZVsidGltZWxpbmUtaXRlbSJdO2U9ZS5wYXJlbnROb2RlfXJldHVybiBudWxsfSxvLnByb3RvdHlwZS5ncm91cEZyb21UYXJnZXQ9ZnVuY3Rpb24odCl7Zm9yKHZhciBlPXQuY2VudGVyP3QuY2VudGVyLnk6dC5jbGllbnRZLGk9MDtpPHRoaXMuZ3JvdXBJZHMubGVuZ3RoO2krKyl7dmFyIG89dGhpcy5ncm91cElkc1tpXSxuPXRoaXMuZ3JvdXBzW29dLHI9bi5kb20uZm9yZWdyb3VuZCxhPXMuZ2V0QWJzb2x1dGVUb3Aocik7aWYoZT5hJiZlPGErci5vZmZzZXRIZWlnaHQpcmV0dXJuIG47aWYoInRvcCI9PT10aGlzLm9wdGlvbnMub3JpZW50YXRpb24uaXRlbSl7aWYoaT09PXRoaXMuZ3JvdXBJZHMubGVuZ3RoLTEmJmU+YSlyZXR1cm4gbn1lbHNlIGlmKDA9PT1pJiZlPGErci5vZmZzZXQpcmV0dXJuIG59cmV0dXJuIG51bGx9LG8uaXRlbVNldEZyb21UYXJnZXQ9ZnVuY3Rpb24odCl7Zm9yKHZhciBlPXQudGFyZ2V0O2U7KXtpZihlLmhhc093blByb3BlcnR5KCJ0aW1lbGluZS1pdGVtc2V0IikpcmV0dXJuIGVbInRpbWVsaW5lLWl0ZW1zZXQiXTtlPWUucGFyZW50Tm9kZX1yZXR1cm4gbnVsbH0sby5wcm90b3R5cGUuX2Nsb25lSXRlbURhdGE9ZnVuY3Rpb24odCxlKXt2YXIgaT1zLmV4dGVuZCh7fSx0KTtyZXR1cm4gZXx8KGU9dGhpcy5pdGVtc0RhdGEuZ2V0RGF0YVNldCgpLl9vcHRpb25zLnR5cGUpLHZvaWQgMCE9aS5zdGFydCYmKGkuc3RhcnQ9cy5jb252ZXJ0KGkuc3RhcnQsZSYmZS5zdGFydHx8IkRhdGUiKSksdm9pZCAwIT1pLmVuZCYmKGkuZW5kPXMuY29udmVydChpLmVuZCxlJiZlLmVuZHx8IkRhdGUiKSksaX0sdC5leHBvcnRzPW99LGZ1bmN0aW9uKHQsZSxpKXtmdW5jdGlvbiBvKHQsZSxpLHMpe3RoaXMubW9tZW50PW4sdGhpcy5jdXJyZW50PXRoaXMubW9tZW50KCksdGhpcy5fc3RhcnQ9dGhpcy5tb21lbnQoKSx0aGlzLl9lbmQ9dGhpcy5tb21lbnQoKSx0aGlzLmF1dG9TY2FsZT0hMCx0aGlzLnNjYWxlPSJkYXkiLHRoaXMuc3RlcD0xLHRoaXMuc2V0UmFuZ2UodCxlLGkpLHRoaXMuc3dpdGNoZWREYXk9ITEsdGhpcy5zd2l0Y2hlZE1vbnRoPSExLHRoaXMuc3dpdGNoZWRZZWFyPSExLEFycmF5LmlzQXJyYXkocyk/dGhpcy5oaWRkZW5EYXRlcz1zOnZvaWQgMCE9cz90aGlzLmhpZGRlbkRhdGVzPVtzXTp0aGlzLmhpZGRlbkRhdGVzPVtdLHRoaXMuZm9ybWF0PW8uRk9STUFUfXZhciBuPWkoMikscz1pKDI2KSxyPWkoMSk7by5GT1JNQVQ9e21pbm9yTGFiZWxzOnttaWxsaXNlY29uZDoiU1NTIixzZWNvbmQ6InMiLG1pbnV0ZToiSEg6bW0iLGhvdXI6IkhIOm1tIix3ZWVrZGF5OiJkZGQgRCIsZGF5OiJEIixtb250aDoiTU1NIix5ZWFyOiJZWVlZIn0sbWFqb3JMYWJlbHM6e21pbGxpc2Vjb25kOiJISDptbTpzcyIsc2Vjb25kOiJEIE1NTU0gSEg6bW0iLG1pbnV0ZToiZGRkIEQgTU1NTSIsaG91cjoiZGRkIEQgTU1NTSIsd2Vla2RheToiTU1NTSBZWVlZIixkYXk6Ik1NTU0gWVlZWSIsbW9udGg6IllZWVkiLHllYXI6IiJ9fSxvLnByb3RvdHlwZS5zZXRNb21lbnQ9ZnVuY3Rpb24odCl7dGhpcy5tb21lbnQ9dCx0aGlzLmN1cnJlbnQ9dGhpcy5tb21lbnQodGhpcy5jdXJyZW50KSx0aGlzLl9zdGFydD10aGlzLm1vbWVudCh0aGlzLl9zdGFydCksdGhpcy5fZW5kPXRoaXMubW9tZW50KHRoaXMuX2VuZCl9LG8ucHJvdG90eXBlLnNldEZvcm1hdD1mdW5jdGlvbih0KXt2YXIgZT1yLmRlZXBFeHRlbmQoe30sby5GT1JNQVQpO3RoaXMuZm9ybWF0PXIuZGVlcEV4dGVuZChlLHQpfSxvLnByb3RvdHlwZS5zZXRSYW5nZT1mdW5jdGlvbih0LGUsaSl7aWYoISh0IGluc3RhbmNlb2YgRGF0ZSYmZSBpbnN0YW5jZW9mIERhdGUpKXRocm93Ik5vIGxlZ2FsIHN0YXJ0IG9yIGVuZCBkYXRlIGluIG1ldGhvZCBzZXRSYW5nZSI7dGhpcy5fc3RhcnQ9dm9pZCAwIT10P3RoaXMubW9tZW50KHQudmFsdWVPZigpKTpuZXcgRGF0ZSx0aGlzLl9lbmQ9dm9pZCAwIT1lP3RoaXMubW9tZW50KGUudmFsdWVPZigpKTpuZXcgRGF0ZSx0aGlzLmF1dG9TY2FsZSYmdGhpcy5zZXRNaW5pbXVtU3RlcChpKX0sby5wcm90b3R5cGUuc3RhcnQ9ZnVuY3Rpb24oKXt0aGlzLmN1cnJlbnQ9dGhpcy5fc3RhcnQuY2xvbmUoKSx0aGlzLnJvdW5kVG9NaW5vcigpfSxvLnByb3RvdHlwZS5yb3VuZFRvTWlub3I9ZnVuY3Rpb24oKXtzd2l0Y2godGhpcy5zY2FsZSl7Y2FzZSJ5ZWFyIjp0aGlzLmN1cnJlbnQueWVhcih0aGlzLnN0ZXAqTWF0aC5mbG9vcih0aGlzLmN1cnJlbnQueWVhcigpL3RoaXMuc3RlcCkpLHRoaXMuY3VycmVudC5tb250aCgwKTtjYXNlIm1vbnRoIjp0aGlzLmN1cnJlbnQuZGF0ZSgxKTtjYXNlImRheSI6Y2FzZSJ3ZWVrZGF5Ijp0aGlzLmN1cnJlbnQuaG91cnMoMCk7Y2FzZSJob3VyIjp0aGlzLmN1cnJlbnQubWludXRlcygwKTtjYXNlIm1pbnV0ZSI6dGhpcy5jdXJyZW50LnNlY29uZHMoMCk7Y2FzZSJzZWNvbmQiOnRoaXMuY3VycmVudC5taWxsaXNlY29uZHMoMCl9aWYoMSE9dGhpcy5zdGVwKXN3aXRjaCh0aGlzLnNjYWxlKXtjYXNlIm1pbGxpc2Vjb25kIjp0aGlzLmN1cnJlbnQuc3VidHJhY3QodGhpcy5jdXJyZW50Lm1pbGxpc2Vjb25kcygpJXRoaXMuc3RlcCwibWlsbGlzZWNvbmRzIik7YnJlYWs7Y2FzZSJzZWNvbmQiOnRoaXMuY3VycmVudC5zdWJ0cmFjdCh0aGlzLmN1cnJlbnQuc2Vjb25kcygpJXRoaXMuc3RlcCwic2Vjb25kcyIpO2JyZWFrO2Nhc2UibWludXRlIjp0aGlzLmN1cnJlbnQuc3VidHJhY3QodGhpcy5jdXJyZW50Lm1pbnV0ZXMoKSV0aGlzLnN0ZXAsIm1pbnV0ZXMiKTticmVhaztjYXNlImhvdXIiOnRoaXMuY3VycmVudC5zdWJ0cmFjdCh0aGlzLmN1cnJlbnQuaG91cnMoKSV0aGlzLnN0ZXAsImhvdXJzIik7YnJlYWs7Y2FzZSJ3ZWVrZGF5IjpjYXNlImRheSI6dGhpcy5jdXJyZW50LnN1YnRyYWN0KCh0aGlzLmN1cnJlbnQuZGF0ZSgpLTEpJXRoaXMuc3RlcCwiZGF5Iik7YnJlYWs7Y2FzZSJtb250aCI6dGhpcy5jdXJyZW50LnN1YnRyYWN0KHRoaXMuY3VycmVudC5tb250aCgpJXRoaXMuc3RlcCwibW9udGgiKTticmVhaztjYXNlInllYXIiOnRoaXMuY3VycmVudC5zdWJ0cmFjdCh0aGlzLmN1cnJlbnQueWVhcigpJXRoaXMuc3RlcCwieWVhciIpfX0sby5wcm90b3R5cGUuaGFzTmV4dD1mdW5jdGlvbigpe3JldHVybiB0aGlzLmN1cnJlbnQudmFsdWVPZigpPD10aGlzLl9lbmQudmFsdWVPZigpfSxvLnByb3RvdHlwZS5uZXh0PWZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5jdXJyZW50LnZhbHVlT2YoKTtpZih0aGlzLmN1cnJlbnQubW9udGgoKTw2KXN3aXRjaCh0aGlzLnNjYWxlKXtjYXNlIm1pbGxpc2Vjb25kIjp0aGlzLmN1cnJlbnQuYWRkKHRoaXMuc3RlcCwibWlsbGlzZWNvbmQiKTticmVhaztjYXNlInNlY29uZCI6dGhpcy5jdXJyZW50LmFkZCh0aGlzLnN0ZXAsInNlY29uZCIpO2JyZWFrO2Nhc2UibWludXRlIjp0aGlzLmN1cnJlbnQuYWRkKHRoaXMuc3RlcCwibWludXRlIik7YnJlYWs7Y2FzZSJob3VyIjp0aGlzLmN1cnJlbnQuYWRkKHRoaXMuc3RlcCwiaG91ciIpLHRoaXMuY3VycmVudC5zdWJ0cmFjdCh0aGlzLmN1cnJlbnQuaG91cnMoKSV0aGlzLnN0ZXAsImhvdXIiKTticmVhaztjYXNlIndlZWtkYXkiOmNhc2UiZGF5Ijp0aGlzLmN1cnJlbnQuYWRkKHRoaXMuc3RlcCwiZGF5Iik7YnJlYWs7Y2FzZSJtb250aCI6dGhpcy5jdXJyZW50LmFkZCh0aGlzLnN0ZXAsIm1vbnRoIik7YnJlYWs7Y2FzZSJ5ZWFyIjp0aGlzLmN1cnJlbnQuYWRkKHRoaXMuc3RlcCwieWVhciIpfWVsc2Ugc3dpdGNoKHRoaXMuc2NhbGUpe2Nhc2UibWlsbGlzZWNvbmQiOnRoaXMuY3VycmVudC5hZGQodGhpcy5zdGVwLCJtaWxsaXNlY29uZCIpO2JyZWFrO2Nhc2Uic2Vjb25kIjp0aGlzLmN1cnJlbnQuYWRkKHRoaXMuc3RlcCwic2Vjb25kIik7YnJlYWs7Y2FzZSJtaW51dGUiOnRoaXMuY3VycmVudC5hZGQodGhpcy5zdGVwLCJtaW51dGUiKTticmVhaztjYXNlImhvdXIiOnRoaXMuY3VycmVudC5hZGQodGhpcy5zdGVwLCJob3VyIik7YnJlYWs7Y2FzZSJ3ZWVrZGF5IjpjYXNlImRheSI6dGhpcy5jdXJyZW50LmFkZCh0aGlzLnN0ZXAsImRheSIpO2JyZWFrO2Nhc2UibW9udGgiOnRoaXMuY3VycmVudC5hZGQodGhpcy5zdGVwLCJtb250aCIpO2JyZWFrO2Nhc2UieWVhciI6dGhpcy5jdXJyZW50LmFkZCh0aGlzLnN0ZXAsInllYXIiKX1pZigxIT10aGlzLnN0ZXApc3dpdGNoKHRoaXMuc2NhbGUpe2Nhc2UibWlsbGlzZWNvbmQiOnRoaXMuY3VycmVudC5taWxsaXNlY29uZHMoKTx0aGlzLnN0ZXAmJnRoaXMuY3VycmVudC5taWxsaXNlY29uZHMoMCk7YnJlYWs7Y2FzZSJzZWNvbmQiOnRoaXMuY3VycmVudC5zZWNvbmRzKCk8dGhpcy5zdGVwJiZ0aGlzLmN1cnJlbnQuc2Vjb25kcygwKTticmVhaztjYXNlIm1pbnV0ZSI6dGhpcy5jdXJyZW50Lm1pbnV0ZXMoKTx0aGlzLnN0ZXAmJnRoaXMuY3VycmVudC5taW51dGVzKDApO2JyZWFrO2Nhc2UiaG91ciI6dGhpcy5jdXJyZW50LmhvdXJzKCk8dGhpcy5zdGVwJiZ0aGlzLmN1cnJlbnQuaG91cnMoMCk7YnJlYWs7Y2FzZSJ3ZWVrZGF5IjpjYXNlImRheSI6dGhpcy5jdXJyZW50LmRhdGUoKTx0aGlzLnN0ZXArMSYmdGhpcy5jdXJyZW50LmRhdGUoMSk7YnJlYWs7Y2FzZSJtb250aCI6dGhpcy5jdXJyZW50Lm1vbnRoKCk8dGhpcy5zdGVwJiZ0aGlzLmN1cnJlbnQubW9udGgoMCk7YnJlYWs7Y2FzZSJ5ZWFyIjp9dGhpcy5jdXJyZW50LnZhbHVlT2YoKT09dCYmKHRoaXMuY3VycmVudD10aGlzLl9lbmQuY2xvbmUoKSkscy5zdGVwT3ZlckhpZGRlbkRhdGVzKHRoaXMubW9tZW50LHRoaXMsdCl9LG8ucHJvdG90eXBlLmdldEN1cnJlbnQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5jdXJyZW50fSxvLnByb3RvdHlwZS5zZXRTY2FsZT1mdW5jdGlvbih0KXt0JiYic3RyaW5nIj09dHlwZW9mIHQuc2NhbGUmJih0aGlzLnNjYWxlPXQuc2NhbGUsdGhpcy5zdGVwPXQuc3RlcD4wP3Quc3RlcDoxLHRoaXMuYXV0b1NjYWxlPSExKX0sby5wcm90b3R5cGUuc2V0QXV0b1NjYWxlPWZ1bmN0aW9uKHQpe3RoaXMuYXV0b1NjYWxlPXR9LG8ucHJvdG90eXBlLnNldE1pbmltdW1TdGVwPWZ1bmN0aW9uKHQpe2lmKHZvaWQgMCE9dCl7dmFyIGU9MzExMDRlNixpPTI1OTJlNixvPTg2NGU1LG49MzZlNSxzPTZlNCxyPTFlMyxhPTE7MWUzKmU+dCYmKHRoaXMuc2NhbGU9InllYXIiLHRoaXMuc3RlcD0xZTMpLDUwMCplPnQmJih0aGlzLnNjYWxlPSJ5ZWFyIix0aGlzLnN0ZXA9NTAwKSwxMDAqZT50JiYodGhpcy5zY2FsZT0ieWVhciIsdGhpcy5zdGVwPTEwMCksNTAqZT50JiYodGhpcy5zY2FsZT0ieWVhciIsdGhpcy5zdGVwPTUwKSwxMCplPnQmJih0aGlzLnNjYWxlPSJ5ZWFyIix0aGlzLnN0ZXA9MTApLDUqZT50JiYodGhpcy5zY2FsZT0ieWVhciIsdGhpcy5zdGVwPTUpLGU+dCYmKHRoaXMuc2NhbGU9InllYXIiLHRoaXMuc3RlcD0xKSwzKmk+dCYmKHRoaXMuc2NhbGU9Im1vbnRoIix0aGlzLnN0ZXA9MyksaT50JiYodGhpcy5zY2FsZT0ibW9udGgiLHRoaXMuc3RlcD0xKSw1Km8+dCYmKHRoaXMuc2NhbGU9ImRheSIsdGhpcy5zdGVwPTUpLDIqbz50JiYodGhpcy5zY2FsZT0iZGF5Iix0aGlzLnN0ZXA9Miksbz50JiYodGhpcy5zY2FsZT0iZGF5Iix0aGlzLnN0ZXA9MSksby8yPnQmJih0aGlzLnNjYWxlPSJ3ZWVrZGF5Iix0aGlzLnN0ZXA9MSksNCpuPnQmJih0aGlzLnNjYWxlPSJob3VyIix0aGlzLnN0ZXA9NCksbj50JiYodGhpcy5zY2FsZT0iaG91ciIsdGhpcy5zdGVwPTEpLDE1KnM+dCYmKHRoaXMuc2NhbGU9Im1pbnV0ZSIsdGhpcy5zdGVwPTE1KSwxMCpzPnQmJih0aGlzLnNjYWxlPSJtaW51dGUiLHRoaXMuc3RlcD0xMCksNSpzPnQmJih0aGlzLnNjYWxlPSJtaW51dGUiLHRoaXMuc3RlcD01KSxzPnQmJih0aGlzLnNjYWxlPSJtaW51dGUiLHRoaXMuc3RlcD0xKSwxNSpyPnQmJih0aGlzLnNjYWxlPSJzZWNvbmQiLHRoaXMuc3RlcD0xNSksMTAqcj50JiYodGhpcy5zY2FsZT0ic2Vjb25kIix0aGlzLnN0ZXA9MTApLDUqcj50JiYodGhpcy5zY2FsZT0ic2Vjb25kIix0aGlzLnN0ZXA9NSkscj50JiYodGhpcy5zY2FsZT0ic2Vjb25kIix0aGlzLnN0ZXA9MSksMjAwKmE+dCYmKHRoaXMuc2NhbGU9Im1pbGxpc2Vjb25kIix0aGlzLnN0ZXA9MjAwKSwxMDAqYT50JiYodGhpcy5zY2FsZT0ibWlsbGlzZWNvbmQiLHRoaXMuc3RlcD0xMDApLDUwKmE+dCYmKHRoaXMuc2NhbGU9Im1pbGxpc2Vjb25kIix0aGlzLnN0ZXA9NTApLDEwKmE+dCYmKHRoaXMuc2NhbGU9Im1pbGxpc2Vjb25kIix0aGlzLnN0ZXA9MTApLDUqYT50JiYodGhpcy5zY2FsZT0ibWlsbGlzZWNvbmQiLHRoaXMuc3RlcD01KSxhPnQmJih0aGlzLnNjYWxlPSJtaWxsaXNlY29uZCIsdGhpcy5zdGVwPTEpfX0sby5zbmFwPWZ1bmN0aW9uKHQsZSxpKXt2YXIgbz1uKHQpO2lmKCJ5ZWFyIj09ZSl7dmFyIHM9by55ZWFyKCkrTWF0aC5yb3VuZChvLm1vbnRoKCkvMTIpO28ueWVhcihNYXRoLnJvdW5kKHMvaSkqaSksby5tb250aCgwKSxvLmRhdGUoMCksby5ob3VycygwKSxvLm1pbnV0ZXMoMCksby5zZWNvbmRzKDApLG8ubWlsbGlzZWNvbmRzKDApfWVsc2UgaWYoIm1vbnRoIj09ZSlvLmRhdGUoKT4xNT8oby5kYXRlKDEpLG8uYWRkKDEsIm1vbnRoIikpOm8uZGF0ZSgxKSxvLmhvdXJzKDApLG8ubWludXRlcygwKSxvLnNlY29uZHMoMCksby5taWxsaXNlY29uZHMoMCk7ZWxzZSBpZigiZGF5Ij09ZSl7c3dpdGNoKGkpe2Nhc2UgNTpjYXNlIDI6by5ob3VycygyNCpNYXRoLnJvdW5kKG8uaG91cnMoKS8yNCkpO2JyZWFrO2RlZmF1bHQ6by5ob3VycygxMipNYXRoLnJvdW5kKG8uaG91cnMoKS8xMikpfW8ubWludXRlcygwKSxvLnNlY29uZHMoMCksby5taWxsaXNlY29uZHMoMCl9ZWxzZSBpZigid2Vla2RheSI9PWUpe3N3aXRjaChpKXtjYXNlIDU6Y2FzZSAyOm8uaG91cnMoMTIqTWF0aC5yb3VuZChvLmhvdXJzKCkvMTIpKTticmVhaztkZWZhdWx0Om8uaG91cnMoNipNYXRoLnJvdW5kKG8uaG91cnMoKS82KSl9by5taW51dGVzKDApLG8uc2Vjb25kcygwKSxvLm1pbGxpc2Vjb25kcygwKX1lbHNlIGlmKCJob3VyIj09ZSl7c3dpdGNoKGkpe2Nhc2UgNDpvLm1pbnV0ZXMoNjAqTWF0aC5yb3VuZChvLm1pbnV0ZXMoKS82MCkpO2JyZWFrO2RlZmF1bHQ6by5taW51dGVzKDMwKk1hdGgucm91bmQoby5taW51dGVzKCkvMzApKX1vLnNlY29uZHMoMCksby5taWxsaXNlY29uZHMoMCl9ZWxzZSBpZigibWludXRlIj09ZSl7c3dpdGNoKGkpe2Nhc2UgMTU6Y2FzZSAxMDpvLm1pbnV0ZXMoNSpNYXRoLnJvdW5kKG8ubWludXRlcygpLzUpKSxvLnNlY29uZHMoMCk7YnJlYWs7Y2FzZSA1Om8uc2Vjb25kcyg2MCpNYXRoLnJvdW5kKG8uc2Vjb25kcygpLzYwKSk7YnJlYWs7ZGVmYXVsdDpvLnNlY29uZHMoMzAqTWF0aC5yb3VuZChvLnNlY29uZHMoKS8zMCkpfW8ubWlsbGlzZWNvbmRzKDApfWVsc2UgaWYoInNlY29uZCI9PWUpc3dpdGNoKGkpe2Nhc2UgMTU6Y2FzZSAxMDpvLnNlY29uZHMoNSpNYXRoLnJvdW5kKG8uc2Vjb25kcygpLzUpKSxvLm1pbGxpc2Vjb25kcygwKTticmVhaztjYXNlIDU6by5taWxsaXNlY29uZHMoMWUzKk1hdGgucm91bmQoby5taWxsaXNlY29uZHMoKS8xZTMpKTticmVhaztkZWZhdWx0Om8ubWlsbGlzZWNvbmRzKDUwMCpNYXRoLnJvdW5kKG8ubWlsbGlzZWNvbmRzKCkvNTAwKSl9ZWxzZSBpZigibWlsbGlzZWNvbmQiPT1lKXt2YXIgcj1pPjU/aS8yOjE7by5taWxsaXNlY29uZHMoTWF0aC5yb3VuZChvLm1pbGxpc2Vjb25kcygpL3IpKnIpfXJldHVybiBvfSxvLnByb3RvdHlwZS5pc01ham9yPWZ1bmN0aW9uKCl7aWYoMT09dGhpcy5zd2l0Y2hlZFllYXIpc3dpdGNoKHRoaXMuc3dpdGNoZWRZZWFyPSExLHRoaXMuc2NhbGUpe2Nhc2UieWVhciI6Y2FzZSJtb250aCI6Y2FzZSJ3ZWVrZGF5IjpjYXNlImRheSI6Y2FzZSJob3VyIjpjYXNlIm1pbnV0ZSI6Y2FzZSJzZWNvbmQiOmNhc2UibWlsbGlzZWNvbmQiOnJldHVybiEwO2RlZmF1bHQ6cmV0dXJuITF9ZWxzZSBpZigxPT10aGlzLnN3aXRjaGVkTW9udGgpc3dpdGNoKHRoaXMuc3dpdGNoZWRNb250aD0hMSx0aGlzLnNjYWxlKXtjYXNlIndlZWtkYXkiOmNhc2UiZGF5IjpjYXNlImhvdXIiOmNhc2UibWludXRlIjpjYXNlInNlY29uZCI6Y2FzZSJtaWxsaXNlY29uZCI6cmV0dXJuITA7ZGVmYXVsdDpyZXR1cm4hMX1lbHNlIGlmKDE9PXRoaXMuc3dpdGNoZWREYXkpc3dpdGNoKHRoaXMuc3dpdGNoZWREYXk9ITEsdGhpcy5zY2FsZSl7Y2FzZSJtaWxsaXNlY29uZCI6Y2FzZSJzZWNvbmQiOmNhc2UibWludXRlIjpjYXNlImhvdXIiOnJldHVybiEwO2RlZmF1bHQ6cmV0dXJuITF9dmFyIHQ9dGhpcy5tb21lbnQodGhpcy5jdXJyZW50KTtzd2l0Y2godGhpcy5zY2FsZSl7Y2FzZSJtaWxsaXNlY29uZCI6cmV0dXJuIDA9PXQubWlsbGlzZWNvbmRzKCk7Y2FzZSJzZWNvbmQiOnJldHVybiAwPT10LnNlY29uZHMoKTtjYXNlIm1pbnV0ZSI6cmV0dXJuIDA9PXQuaG91cnMoKSYmMD09dC5taW51dGVzKCk7Y2FzZSJob3VyIjpyZXR1cm4gMD09dC5ob3VycygpO2Nhc2Uid2Vla2RheSI6Y2FzZSJkYXkiOnJldHVybiAxPT10LmRhdGUoKTtjYXNlIm1vbnRoIjpyZXR1cm4gMD09dC5tb250aCgpO2Nhc2UieWVhciI6cmV0dXJuITE7ZGVmYXVsdDpyZXR1cm4hMX19LG8ucHJvdG90eXBlLmdldExhYmVsTWlub3I9ZnVuY3Rpb24odCl7dm9pZCAwPT10JiYodD10aGlzLmN1cnJlbnQpO3ZhciBlPXRoaXMuZm9ybWF0Lm1pbm9yTGFiZWxzW3RoaXMuc2NhbGVdO3JldHVybiBlJiZlLmxlbmd0aD4wP3RoaXMubW9tZW50KHQpLmZvcm1hdChlKToiIn0sby5wcm90b3R5cGUuZ2V0TGFiZWxNYWpvcj1mdW5jdGlvbih0KXt2b2lkIDA9PXQmJih0PXRoaXMuY3VycmVudCk7dmFyIGU9dGhpcy5mb3JtYXQubWFqb3JMYWJlbHNbdGhpcy5zY2FsZV07cmV0dXJuIGUmJmUubGVuZ3RoPjA/dGhpcy5tb21lbnQodCkuZm9ybWF0KGUpOiIifSxvLnByb3RvdHlwZS5nZXRDbGFzc05hbWU9ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KHQpe3JldHVybiB0L2glMj09MD8iIHZpcy1ldmVuIjoiIHZpcy1vZGQifWZ1bmN0aW9uIGUodCl7cmV0dXJuIHQuaXNTYW1lKG5ldyBEYXRlLCJkYXkiKT8iIHZpcy10b2RheSI6dC5pc1NhbWUocygpLmFkZCgxLCJkYXkiKSwiZGF5Iik/IiB2aXMtdG9tb3Jyb3ciOnQuaXNTYW1lKHMoKS5hZGQoLTEsImRheSIpLCJkYXkiKT8iIHZpcy15ZXN0ZXJkYXkiOiIifWZ1bmN0aW9uIGkodCl7cmV0dXJuIHQuaXNTYW1lKG5ldyBEYXRlLCJ3ZWVrIik/IiB2aXMtY3VycmVudC13ZWVrIjoiIn1mdW5jdGlvbiBvKHQpe3JldHVybiB0LmlzU2FtZShuZXcgRGF0ZSwibW9udGgiKT8iIHZpcy1jdXJyZW50LW1vbnRoIjoiIn1mdW5jdGlvbiBuKHQpe3JldHVybiB0LmlzU2FtZShuZXcgRGF0ZSwieWVhciIpPyIgdmlzLWN1cnJlbnQteWVhciI6IiJ9dmFyIHM9dGhpcy5tb21lbnQscj10aGlzLm1vbWVudCh0aGlzLmN1cnJlbnQpLGE9ci5sb2NhbGU/ci5sb2NhbGUoImVuIik6ci5sYW5nKCJlbiIpLGg9dGhpcy5zdGVwO3N3aXRjaCh0aGlzLnNjYWxlKXtjYXNlIm1pbGxpc2Vjb25kIjpyZXR1cm4gdChhLm1pbGxpc2Vjb25kcygpKS50cmltKCk7Y2FzZSJzZWNvbmQiOnJldHVybiB0KGEuc2Vjb25kcygpKS50cmltKCk7Y2FzZSJtaW51dGUiOnJldHVybiB0KGEubWludXRlcygpKS50cmltKCk7Y2FzZSJob3VyIjp2YXIgZD1hLmhvdXJzKCk7cmV0dXJuIDQ9PXRoaXMuc3RlcCYmKGQ9ZCsiLWgiKyhkKzQpKSwidmlzLWgiK2QrZShhKSt0KGEuaG91cnMoKSk7Y2FzZSJ3ZWVrZGF5IjpyZXR1cm4idmlzLSIrYS5mb3JtYXQoImRkZGQiKS50b0xvd2VyQ2FzZSgpK2UoYSkraShhKSt0KGEuZGF0ZSgpKTtjYXNlImRheSI6dmFyIGw9YS5kYXRlKCksdT1hLmZvcm1hdCgiTU1NTSIpLnRvTG93ZXJDYXNlKCk7cmV0dXJuInZpcy1kYXkiK2wrIiB2aXMtIit1K28oYSkrdChsLTEpO2Nhc2UibW9udGgiOnJldHVybiJ2aXMtIithLmZvcm1hdCgiTU1NTSIpLnRvTG93ZXJDYXNlKCkrbyhhKSt0KGEubW9udGgoKSk7Y2FzZSJ5ZWFyIjp2YXIgYz1hLnllYXIoKTtyZXR1cm4idmlzLXllYXIiK2MrbihhKSt0KGMpO2RlZmF1bHQ6cmV0dXJuIiJ9fSx0LmV4cG9ydHM9b30sZnVuY3Rpb24odCxlLGkpe2Z1bmN0aW9uIG8odCxlLGkpe3RoaXMuZ3JvdXBJZD10LHRoaXMuc3ViZ3JvdXBzPXt9LHRoaXMuc3ViZ3JvdXBJbmRleD0wLHRoaXMuc3ViZ3JvdXBPcmRlcmVyPWUmJmUuc3ViZ3JvdXBPcmRlcix0aGlzLml0ZW1TZXQ9aSx0aGlzLmRvbT17fSx0aGlzLnByb3BzPXtsYWJlbDp7d2lkdGg6MCxoZWlnaHQ6MH19LHRoaXMuY2xhc3NOYW1lPW51bGwsdGhpcy5pdGVtcz17fSx0aGlzLnZpc2libGVJdGVtcz1bXSx0aGlzLm9yZGVyZWRJdGVtcz17YnlTdGFydDpbXSxieUVuZDpbXX0sdGhpcy5jaGVja1JhbmdlZEl0ZW1zPSExO3ZhciBvPXRoaXM7dGhpcy5pdGVtU2V0LmJvZHkuZW1pdHRlci5vbigiY2hlY2tSYW5nZWRJdGVtcyIsZnVuY3Rpb24oKXtvLmNoZWNrUmFuZ2VkSXRlbXM9ITB9KSx0aGlzLl9jcmVhdGUoKSx0aGlzLnNldERhdGEoZSl9dmFyIG49aSgxKSxzPWkoMzEpO2koMzIpO28ucHJvdG90eXBlLl9jcmVhdGU9ZnVuY3Rpb24oKXt2YXIgdD1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKTt0aGlzLml0ZW1TZXQub3B0aW9ucy5ncm91cEVkaXRhYmxlLm9yZGVyP3QuY2xhc3NOYW1lPSJ2aXMtbGFiZWwgZHJhZ2dhYmxlIjp0LmNsYXNzTmFtZT0idmlzLWxhYmVsIix0aGlzLmRvbS5sYWJlbD10O3ZhciBlPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpO2UuY2xhc3NOYW1lPSJ2aXMtaW5uZXIiLHQuYXBwZW5kQ2hpbGQoZSksdGhpcy5kb20uaW5uZXI9ZTt2YXIgaT1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKTtpLmNsYXNzTmFtZT0idmlzLWdyb3VwIixpWyJ0aW1lbGluZS1ncm91cCJdPXRoaXMsdGhpcy5kb20uZm9yZWdyb3VuZD1pLHRoaXMuZG9tLmJhY2tncm91bmQ9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2IiksdGhpcy5kb20uYmFja2dyb3VuZC5jbGFzc05hbWU9InZpcy1ncm91cCIsdGhpcy5kb20uYXhpcz1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKSx0aGlzLmRvbS5heGlzLmNsYXNzTmFtZT0idmlzLWdyb3VwIix0aGlzLmRvbS5tYXJrZXI9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2IiksdGhpcy5kb20ubWFya2VyLnN0eWxlLnZpc2liaWxpdHk9ImhpZGRlbiIsdGhpcy5kb20ubWFya2VyLmlubmVySFRNTD0iPyIsdGhpcy5kb20uYmFja2dyb3VuZC5hcHBlbmRDaGlsZCh0aGlzLmRvbS5tYXJrZXIpfSxvLnByb3RvdHlwZS5zZXREYXRhPWZ1bmN0aW9uKHQpe3ZhciBlO2lmKGU9dGhpcy5pdGVtU2V0Lm9wdGlvbnMmJnRoaXMuaXRlbVNldC5vcHRpb25zLmdyb3VwVGVtcGxhdGU/dGhpcy5pdGVtU2V0Lm9wdGlvbnMuZ3JvdXBUZW1wbGF0ZSh0KTp0JiZ0LmNvbnRlbnQsZSBpbnN0YW5jZW9mIEVsZW1lbnQpe2Zvcih0aGlzLmRvbS5pbm5lci5hcHBlbmRDaGlsZChlKTt0aGlzLmRvbS5pbm5lci5maXJzdENoaWxkOyl0aGlzLmRvbS5pbm5lci5yZW1vdmVDaGlsZCh0aGlzLmRvbS5pbm5lci5maXJzdENoaWxkKTt0aGlzLmRvbS5pbm5lci5hcHBlbmRDaGlsZChlKX1lbHNlIHZvaWQgMCE9PWUmJm51bGwhPT1lP3RoaXMuZG9tLmlubmVyLmlubmVySFRNTD1lOnRoaXMuZG9tLmlubmVyLmlubmVySFRNTD10aGlzLmdyb3VwSWR8fCIiO3RoaXMuZG9tLmxhYmVsLnRpdGxlPXQmJnQudGl0bGV8fCIiLHRoaXMuZG9tLmlubmVyLmZpcnN0Q2hpbGQ/bi5yZW1vdmVDbGFzc05hbWUodGhpcy5kb20uaW5uZXIsInZpcy1oaWRkZW4iKTpuLmFkZENsYXNzTmFtZSh0aGlzLmRvbS5pbm5lciwidmlzLWhpZGRlbiIpO3ZhciBpPXQmJnQuY2xhc3NOYW1lfHxudWxsO2khPXRoaXMuY2xhc3NOYW1lJiYodGhpcy5jbGFzc05hbWUmJihuLnJlbW92ZUNsYXNzTmFtZSh0aGlzLmRvbS5sYWJlbCx0aGlzLmNsYXNzTmFtZSksbi5yZW1vdmVDbGFzc05hbWUodGhpcy5kb20uZm9yZWdyb3VuZCx0aGlzLmNsYXNzTmFtZSksbi5yZW1vdmVDbGFzc05hbWUodGhpcy5kb20uYmFja2dyb3VuZCx0aGlzLmNsYXNzTmFtZSksbi5yZW1vdmVDbGFzc05hbWUodGhpcy5kb20uYXhpcyx0aGlzLmNsYXNzTmFtZSkpLG4uYWRkQ2xhc3NOYW1lKHRoaXMuZG9tLmxhYmVsLGkpLG4uYWRkQ2xhc3NOYW1lKHRoaXMuZG9tLmZvcmVncm91bmQsaSksbi5hZGRDbGFzc05hbWUodGhpcy5kb20uYmFja2dyb3VuZCxpKSxuLmFkZENsYXNzTmFtZSh0aGlzLmRvbS5heGlzLGkpLHRoaXMuY2xhc3NOYW1lPWkpLHRoaXMuc3R5bGUmJihuLnJlbW92ZUNzc1RleHQodGhpcy5kb20ubGFiZWwsdGhpcy5zdHlsZSksdGhpcy5zdHlsZT1udWxsKSx0JiZ0LnN0eWxlJiYobi5hZGRDc3NUZXh0KHRoaXMuZG9tLmxhYmVsLHQuc3R5bGUpLHRoaXMuc3R5bGU9dC5zdHlsZSl9LG8ucHJvdG90eXBlLmdldExhYmVsV2lkdGg9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5wcm9wcy5sYWJlbC53aWR0aH0sby5wcm90b3R5cGUucmVkcmF3PWZ1bmN0aW9uKHQsZSxpKXt2YXIgbz0hMSxyPXRoaXMuZG9tLm1hcmtlci5jbGllbnRIZWlnaHQ7aWYociE9dGhpcy5sYXN0TWFya2VySGVpZ2h0JiYodGhpcy5sYXN0TWFya2VySGVpZ2h0PXIsbi5mb3JFYWNoKHRoaXMuaXRlbXMsZnVuY3Rpb24odCl7dC5kaXJ0eT0hMCx0LmRpc3BsYXllZCYmdC5yZWRyYXcoKX0pLGk9ITApLHRoaXMuX2NhbGN1bGF0ZVN1Ykdyb3VwSGVpZ2h0cygpLCJmdW5jdGlvbiI9PXR5cGVvZiB0aGlzLml0ZW1TZXQub3B0aW9ucy5vcmRlcil7aWYoaSl7dmFyIGE9dGhpcyxoPSExO24uZm9yRWFjaCh0aGlzLml0ZW1zLGZ1bmN0aW9uKHQpe3QuZGlzcGxheWVkfHwodC5yZWRyYXcoKSxhLnZpc2libGVJdGVtcy5wdXNoKHQpKSx0LnJlcG9zaXRpb25YKGgpfSk7dmFyIGQ9dGhpcy5vcmRlcmVkSXRlbXMuYnlTdGFydC5zbGljZSgpLnNvcnQoZnVuY3Rpb24odCxlKXtyZXR1cm4gYS5pdGVtU2V0Lm9wdGlvbnMub3JkZXIodC5kYXRhLGUuZGF0YSl9KTtzLnN0YWNrKGQsZSwhMCl9dGhpcy52aXNpYmxlSXRlbXM9dGhpcy5fdXBkYXRlVmlzaWJsZUl0ZW1zKHRoaXMub3JkZXJlZEl0ZW1zLHRoaXMudmlzaWJsZUl0ZW1zLHQpfWVsc2UgdGhpcy52aXNpYmxlSXRlbXM9dGhpcy5fdXBkYXRlVmlzaWJsZUl0ZW1zKHRoaXMub3JkZXJlZEl0ZW1zLHRoaXMudmlzaWJsZUl0ZW1zLHQpLHRoaXMuaXRlbVNldC5vcHRpb25zLnN0YWNrP3Muc3RhY2sodGhpcy52aXNpYmxlSXRlbXMsZSxpKTpzLm5vc3RhY2sodGhpcy52aXNpYmxlSXRlbXMsZSx0aGlzLnN1Ymdyb3Vwcyk7dmFyIGw9dGhpcy5fY2FsY3VsYXRlSGVpZ2h0KGUpLHU9dGhpcy5kb20uZm9yZWdyb3VuZDt0aGlzLnRvcD11Lm9mZnNldFRvcCx0aGlzLmxlZnQ9dS5vZmZzZXRMZWZ0LHRoaXMud2lkdGg9dS5vZmZzZXRXaWR0aCxvPW4udXBkYXRlUHJvcGVydHkodGhpcywiaGVpZ2h0IixsKXx8byxvPW4udXBkYXRlUHJvcGVydHkodGhpcy5wcm9wcy5sYWJlbCwid2lkdGgiLHRoaXMuZG9tLmlubmVyLmNsaWVudFdpZHRoKXx8byxvPW4udXBkYXRlUHJvcGVydHkodGhpcy5wcm9wcy5sYWJlbCwiaGVpZ2h0Iix0aGlzLmRvbS5pbm5lci5jbGllbnRIZWlnaHQpfHxvLHRoaXMuZG9tLmJhY2tncm91bmQuc3R5bGUuaGVpZ2h0PWwrInB4Iix0aGlzLmRvbS5mb3JlZ3JvdW5kLnN0eWxlLmhlaWdodD1sKyJweCIsdGhpcy5kb20ubGFiZWwuc3R5bGUuaGVpZ2h0PWwrInB4Ijtmb3IodmFyIGM9MCxwPXRoaXMudmlzaWJsZUl0ZW1zLmxlbmd0aDtwPmM7YysrKXt2YXIgZj10aGlzLnZpc2libGVJdGVtc1tjXTtmLnJlcG9zaXRpb25ZKGUpfXJldHVybiBvfSxvLnByb3RvdHlwZS5fY2FsY3VsYXRlU3ViR3JvdXBIZWlnaHRzPWZ1bmN0aW9uKCl7aWYoT2JqZWN0LmtleXModGhpcy5zdWJncm91cHMpLmxlbmd0aD4wKXt2YXIgdD10aGlzO3RoaXMucmVzZXRTdWJncm91cHMoKSxuLmZvckVhY2godGhpcy52aXNpYmxlSXRlbXMsZnVuY3Rpb24oZSl7dm9pZCAwIT09ZS5kYXRhLnN1Ymdyb3VwJiYodC5zdWJncm91cHNbZS5kYXRhLnN1Ymdyb3VwXS5oZWlnaHQ9TWF0aC5tYXgodC5zdWJncm91cHNbZS5kYXRhLnN1Ymdyb3VwXS5oZWlnaHQsZS5oZWlnaHQpLHQuc3ViZ3JvdXBzW2UuZGF0YS5zdWJncm91cF0udmlzaWJsZT0hMCl9KX19LG8ucHJvdG90eXBlLl9jYWxjdWxhdGVIZWlnaHQ9ZnVuY3Rpb24odCl7dmFyIGUsaT10aGlzLnZpc2libGVJdGVtcztpZihpLmxlbmd0aD4wKXt2YXIgbz1pWzBdLnRvcCxzPWlbMF0udG9wK2lbMF0uaGVpZ2h0O2lmKG4uZm9yRWFjaChpLGZ1bmN0aW9uKHQpe289TWF0aC5taW4obyx0LnRvcCkscz1NYXRoLm1heChzLHQudG9wK3QuaGVpZ2h0KX0pLG8+dC5heGlzKXt2YXIgcj1vLXQuYXhpcztzLT1yLG4uZm9yRWFjaChpLGZ1bmN0aW9uKHQpe3QudG9wLT1yfSl9ZT1zK3QuaXRlbS52ZXJ0aWNhbC8yfWVsc2UgZT0wO3JldHVybiBlPU1hdGgubWF4KGUsdGhpcy5wcm9wcy5sYWJlbC5oZWlnaHQpfSxvLnByb3RvdHlwZS5zaG93PWZ1bmN0aW9uKCl7dGhpcy5kb20ubGFiZWwucGFyZW50Tm9kZXx8dGhpcy5pdGVtU2V0LmRvbS5sYWJlbFNldC5hcHBlbmRDaGlsZCh0aGlzLmRvbS5sYWJlbCksdGhpcy5kb20uZm9yZWdyb3VuZC5wYXJlbnROb2RlfHx0aGlzLml0ZW1TZXQuZG9tLmZvcmVncm91bmQuYXBwZW5kQ2hpbGQodGhpcy5kb20uZm9yZWdyb3VuZCksdGhpcy5kb20uYmFja2dyb3VuZC5wYXJlbnROb2RlfHx0aGlzLml0ZW1TZXQuZG9tLmJhY2tncm91bmQuYXBwZW5kQ2hpbGQodGhpcy5kb20uYmFja2dyb3VuZCksdGhpcy5kb20uYXhpcy5wYXJlbnROb2RlfHx0aGlzLml0ZW1TZXQuZG9tLmF4aXMuYXBwZW5kQ2hpbGQodGhpcy5kb20uYXhpcyl9LG8ucHJvdG90eXBlLmhpZGU9ZnVuY3Rpb24oKXt2YXIgdD10aGlzLmRvbS5sYWJlbDt0LnBhcmVudE5vZGUmJnQucGFyZW50Tm9kZS5yZW1vdmVDaGlsZCh0KTt2YXIgZT10aGlzLmRvbS5mb3JlZ3JvdW5kO2UucGFyZW50Tm9kZSYmZS5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKGUpO3ZhciBpPXRoaXMuZG9tLmJhY2tncm91bmQ7aS5wYXJlbnROb2RlJiZpLnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQoaSk7dmFyIG89dGhpcy5kb20uYXhpcztvLnBhcmVudE5vZGUmJm8ucGFyZW50Tm9kZS5yZW1vdmVDaGlsZChvKX0sby5wcm90b3R5cGUuYWRkPWZ1bmN0aW9uKHQpe2lmKHRoaXMuaXRlbXNbdC5pZF09dCx0LnNldFBhcmVudCh0aGlzKSx2b2lkIDAhPT10LmRhdGEuc3ViZ3JvdXAmJih2b2lkIDA9PT10aGlzLnN1Ymdyb3Vwc1t0LmRhdGEuc3ViZ3JvdXBdJiYodGhpcy5zdWJncm91cHNbdC5kYXRhLnN1Ymdyb3VwXT17aGVpZ2h0OjAsdmlzaWJsZTohMSxpbmRleDp0aGlzLnN1Ymdyb3VwSW5kZXgsaXRlbXM6W119LHRoaXMuc3ViZ3JvdXBJbmRleCsrKSx0aGlzLnN1Ymdyb3Vwc1t0LmRhdGEuc3ViZ3JvdXBdLml0ZW1zLnB1c2godCkpLHRoaXMub3JkZXJTdWJncm91cHMoKSwtMT09dGhpcy52aXNpYmxlSXRlbXMuaW5kZXhPZih0KSl7dmFyIGU9dGhpcy5pdGVtU2V0LmJvZHkucmFuZ2U7dGhpcy5fY2hlY2tJZlZpc2libGUodCx0aGlzLnZpc2libGVJdGVtcyxlKX19LG8ucHJvdG90eXBlLm9yZGVyU3ViZ3JvdXBzPWZ1bmN0aW9uKCl7aWYodm9pZCAwIT09dGhpcy5zdWJncm91cE9yZGVyZXIpe3ZhciB0PVtdO2lmKCJzdHJpbmciPT10eXBlb2YgdGhpcy5zdWJncm91cE9yZGVyZXIpe2Zvcih2YXIgZSBpbiB0aGlzLnN1Ymdyb3Vwcyl0LnB1c2goe3N1Ymdyb3VwOmUsc29ydEZpZWxkOnRoaXMuc3ViZ3JvdXBzW2VdLml0ZW1zWzBdLmRhdGFbdGhpcy5zdWJncm91cE9yZGVyZXJdfSk7dC5zb3J0KGZ1bmN0aW9uKHQsZSl7cmV0dXJuIHQuc29ydEZpZWxkLWUuc29ydEZpZWxkfSl9ZWxzZSBpZigiZnVuY3Rpb24iPT10eXBlb2YgdGhpcy5zdWJncm91cE9yZGVyZXIpe2Zvcih2YXIgZSBpbiB0aGlzLnN1Ymdyb3Vwcyl0LnB1c2godGhpcy5zdWJncm91cHNbZV0uaXRlbXNbMF0uZGF0YSk7dC5zb3J0KHRoaXMuc3ViZ3JvdXBPcmRlcmVyKX1pZih0Lmxlbmd0aD4wKWZvcih2YXIgaT0wO2k8dC5sZW5ndGg7aSsrKXRoaXMuc3ViZ3JvdXBzW3RbaV0uc3ViZ3JvdXBdLmluZGV4PWl9fSxvLnByb3RvdHlwZS5yZXNldFN1Ymdyb3Vwcz1mdW5jdGlvbigpe2Zvcih2YXIgdCBpbiB0aGlzLnN1Ymdyb3Vwcyl0aGlzLnN1Ymdyb3Vwcy5oYXNPd25Qcm9wZXJ0eSh0KSYmKHRoaXMuc3ViZ3JvdXBzW3RdLnZpc2libGU9ITEpfSxvLnByb3RvdHlwZS5yZW1vdmU9ZnVuY3Rpb24odCl7ZGVsZXRlIHRoaXMuaXRlbXNbdC5pZF0sdC5zZXRQYXJlbnQobnVsbCk7dmFyIGU9dGhpcy52aXNpYmxlSXRlbXMuaW5kZXhPZih0KTtpZigtMSE9ZSYmdGhpcy52aXNpYmxlSXRlbXMuc3BsaWNlKGUsMSksdm9pZCAwIT09dC5kYXRhLnN1Ymdyb3VwKXt2YXIgaT10aGlzLnN1Ymdyb3Vwc1t0LmRhdGEuc3ViZ3JvdXBdO2lmKGkpe3ZhciBvPWkuaXRlbXMuaW5kZXhPZih0KTtpLml0ZW1zLnNwbGljZShvLDEpLGkuaXRlbXMubGVuZ3RofHwoZGVsZXRlIHRoaXMuc3ViZ3JvdXBzW3QuZGF0YS5zdWJncm91cF0sdGhpcy5zdWJncm91cEluZGV4LS0pLHRoaXMub3JkZXJTdWJncm91cHMoKX19fSxvLnByb3RvdHlwZS5yZW1vdmVGcm9tRGF0YVNldD1mdW5jdGlvbih0KXt0aGlzLml0ZW1TZXQucmVtb3ZlSXRlbSh0LmlkKX0sby5wcm90b3R5cGUub3JkZXI9ZnVuY3Rpb24oKXtmb3IodmFyIHQ9bi50b0FycmF5KHRoaXMuaXRlbXMpLGU9W10saT1bXSxvPTA7bzx0Lmxlbmd0aDtvKyspdm9pZCAwIT09dFtvXS5kYXRhLmVuZCYmaS5wdXNoKHRbb10pLGUucHVzaCh0W29dKTt0aGlzLm9yZGVyZWRJdGVtcz17YnlTdGFydDplLGJ5RW5kOml9LHMub3JkZXJCeVN0YXJ0KHRoaXMub3JkZXJlZEl0ZW1zLmJ5U3RhcnQpLHMub3JkZXJCeUVuZCh0aGlzLm9yZGVyZWRJdGVtcy5ieUVuZCl9LG8ucHJvdG90eXBlLl91cGRhdGVWaXNpYmxlSXRlbXM9ZnVuY3Rpb24odCxlLGkpe3ZhciBvLHMscj1bXSxhPXt9LGg9KGkuZW5kLWkuc3RhcnQpLzQsZD1pLnN0YXJ0LWgsbD1pLmVuZCtoLHU9ZnVuY3Rpb24odCl7cmV0dXJuIGQ+dD8tMTpsPj10PzA6MX07aWYoZS5sZW5ndGg+MClmb3Iocz0wO3M8ZS5sZW5ndGg7cysrKXRoaXMuX2NoZWNrSWZWaXNpYmxlV2l0aFJlZmVyZW5jZShlW3NdLHIsYSxpKTt2YXIgYz1uLmJpbmFyeVNlYXJjaEN1c3RvbSh0LmJ5U3RhcnQsdSwiZGF0YSIsInN0YXJ0Iik7aWYodGhpcy5fdHJhY2VWaXNpYmxlKGMsdC5ieVN0YXJ0LHIsYSxmdW5jdGlvbih0KXtyZXR1cm4gdC5kYXRhLnN0YXJ0PGR8fHQuZGF0YS5zdGFydD5sfSksMT09dGhpcy5jaGVja1JhbmdlZEl0ZW1zKWZvcih0aGlzLmNoZWNrUmFuZ2VkSXRlbXM9ITEscz0wO3M8dC5ieUVuZC5sZW5ndGg7cysrKXRoaXMuX2NoZWNrSWZWaXNpYmxlV2l0aFJlZmVyZW5jZSh0LmJ5RW5kW3NdLHIsYSxpKTtlbHNle3ZhciBwPW4uYmluYXJ5U2VhcmNoQ3VzdG9tKHQuYnlFbmQsdSwiZGF0YSIsImVuZCIpO3RoaXMuX3RyYWNlVmlzaWJsZShwLHQuYnlFbmQscixhLGZ1bmN0aW9uKHQpe3JldHVybiB0LmRhdGEuZW5kPGR8fHQuZGF0YS5lbmQ+bH0pfWZvcihzPTA7czxyLmxlbmd0aDtzKyspbz1yW3NdLG8uZGlzcGxheWVkfHxvLnNob3coKSxvLnJlcG9zaXRpb25YKCk7cmV0dXJuIHJ9LG8ucHJvdG90eXBlLl90cmFjZVZpc2libGU9ZnVuY3Rpb24odCxlLGksbyxuKXt2YXIgcyxyO2lmKC0xIT10KXtmb3Iocj10O3I+PTAmJihzPWVbcl0sIW4ocykpO3ItLSl2b2lkIDA9PT1vW3MuaWRdJiYob1tzLmlkXT0hMCxpLnB1c2gocykpO2ZvcihyPXQrMTtyPGUubGVuZ3RoJiYocz1lW3JdLCFuKHMpKTtyKyspdm9pZCAwPT09b1tzLmlkXSYmKG9bcy5pZF09ITAsaS5wdXNoKHMpKX19LG8ucHJvdG90eXBlLl9jaGVja0lmVmlzaWJsZT1mdW5jdGlvbih0LGUsaSl7dC5pc1Zpc2libGUoaSk/KHQuZGlzcGxheWVkfHx0LnNob3coKSx0LnJlcG9zaXRpb25YKCksZS5wdXNoKHQpKTp0LmRpc3BsYXllZCYmdC5oaWRlKCl9LG8ucHJvdG90eXBlLl9jaGVja0lmVmlzaWJsZVdpdGhSZWZlcmVuY2U9ZnVuY3Rpb24odCxlLGksbyl7dC5pc1Zpc2libGUobyk/dm9pZCAwPT09aVt0LmlkXSYmKGlbdC5pZF09ITAsZS5wdXNoKHQpKTp0LmRpc3BsYXllZCYmdC5oaWRlKCl9LHQuZXhwb3J0cz1vfSxmdW5jdGlvbih0LGUpe3ZhciBpPS4wMDE7ZS5vcmRlckJ5U3RhcnQ9ZnVuY3Rpb24odCl7dC5zb3J0KGZ1bmN0aW9uKHQsZSl7cmV0dXJuIHQuZGF0YS5zdGFydC1lLmRhdGEuc3RhcnR9KX0sZS5vcmRlckJ5RW5kPWZ1bmN0aW9uKHQpe3Quc29ydChmdW5jdGlvbih0LGUpe3ZhciBpPSJlbmQiaW4gdC5kYXRhP3QuZGF0YS5lbmQ6dC5kYXRhLnN0YXJ0LG89ImVuZCJpbiBlLmRhdGE/ZS5kYXRhLmVuZDplLmRhdGEuc3RhcnQ7cmV0dXJuIGktb30pfSxlLnN0YWNrPWZ1bmN0aW9uKHQsaSxvKXt2YXIgbixzO2lmKG8pZm9yKG49MCxzPXQubGVuZ3RoO3M+bjtuKyspdFtuXS50b3A9bnVsbDtmb3Iobj0wLHM9dC5sZW5ndGg7cz5uO24rKyl7dmFyIHI9dFtuXTtpZihyLnN0YWNrJiZudWxsPT09ci50b3Ape3IudG9wPWkuYXhpcztkb3tmb3IodmFyIGE9bnVsbCxoPTAsZD10Lmxlbmd0aDtkPmg7aCsrKXt2YXIgbD10W2hdO2lmKG51bGwhPT1sLnRvcCYmbCE9PXImJmwuc3RhY2smJmUuY29sbGlzaW9uKHIsbCxpLml0ZW0pKXthPWw7YnJlYWt9fW51bGwhPWEmJihyLnRvcD1hLnRvcCthLmhlaWdodCtpLml0ZW0udmVydGljYWwpfXdoaWxlKGEpfX19LGUubm9zdGFjaz1mdW5jdGlvbih0LGUsaSl7dmFyIG8sbixzO2ZvcihvPTAsbj10Lmxlbmd0aDtuPm87bysrKWlmKHZvaWQgMCE9PXRbb10uZGF0YS5zdWJncm91cCl7cz1lLmF4aXM7Zm9yKHZhciByIGluIGkpaS5oYXNPd25Qcm9wZXJ0eShyKSYmMT09aVtyXS52aXNpYmxlJiZpW3JdLmluZGV4PGlbdFtvXS5kYXRhLnN1Ymdyb3VwXS5pbmRleCYmKHMrPWlbcl0uaGVpZ2h0K2UuaXRlbS52ZXJ0aWNhbCk7dFtvXS50b3A9c31lbHNlIHRbb10udG9wPWUuYXhpc30sZS5jb2xsaXNpb249ZnVuY3Rpb24odCxlLG8pe3JldHVybiB0LmxlZnQtby5ob3Jpem9udGFsK2k8ZS5sZWZ0K2Uud2lkdGgmJnQubGVmdCt0LndpZHRoK28uaG9yaXpvbnRhbC1pPmUubGVmdCYmdC50b3Atby52ZXJ0aWNhbCtpPGUudG9wK2UuaGVpZ2h0JiZ0LnRvcCt0LmhlaWdodCtvLnZlcnRpY2FsLWk+ZS50b3B9fSxmdW5jdGlvbih0LGUsaSl7ZnVuY3Rpb24gbyh0LGUsaSl7aWYodGhpcy5wcm9wcz17Y29udGVudDp7d2lkdGg6MH19LHRoaXMub3ZlcmZsb3c9ITEsdCl7aWYodm9pZCAwPT10LnN0YXJ0KXRocm93IG5ldyBFcnJvcignUHJvcGVydHkgInN0YXJ0IiBtaXNzaW5nIGluIGl0ZW0gJyt0LmlkKTtpZih2b2lkIDA9PXQuZW5kKXRocm93IG5ldyBFcnJvcignUHJvcGVydHkgImVuZCIgbWlzc2luZyBpbiBpdGVtICcrdC5pZCl9bi5jYWxsKHRoaXMsdCxlLGkpfXZhciBuPShpKDIwKSxpKDMzKSk7by5wcm90b3R5cGU9bmV3IG4obnVsbCxudWxsLG51bGwpLG8ucHJvdG90eXBlLmJhc2VDbGFzc05hbWU9InZpcy1pdGVtIHZpcy1yYW5nZSIsby5wcm90b3R5cGUuaXNWaXNpYmxlPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLmRhdGEuc3RhcnQ8dC5lbmQmJnRoaXMuZGF0YS5lbmQ+dC5zdGFydH0sby5wcm90b3R5cGUucmVkcmF3PWZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5kb207aWYodHx8KHRoaXMuZG9tPXt9LHQ9dGhpcy5kb20sdC5ib3g9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2IiksdC5mcmFtZT1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKSx0LmZyYW1lLmNsYXNzTmFtZT0idmlzLWl0ZW0tb3ZlcmZsb3ciLHQuYm94LmFwcGVuZENoaWxkKHQuZnJhbWUpLHQuY29udGVudD1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKSx0LmNvbnRlbnQuY2xhc3NOYW1lPSJ2aXMtaXRlbS1jb250ZW50Iix0LmZyYW1lLmFwcGVuZENoaWxkKHQuY29udGVudCksdC5ib3hbInRpbWVsaW5lLWl0ZW0iXT10aGlzLHRoaXMuZGlydHk9ITApLCF0aGlzLnBhcmVudCl0aHJvdyBuZXcgRXJyb3IoIkNhbm5vdCByZWRyYXcgaXRlbTogbm8gcGFyZW50IGF0dGFjaGVkIik7aWYoIXQuYm94LnBhcmVudE5vZGUpe3ZhciBlPXRoaXMucGFyZW50LmRvbS5mb3JlZ3JvdW5kO2lmKCFlKXRocm93IG5ldyBFcnJvcigiQ2Fubm90IHJlZHJhdyBpdGVtOiBwYXJlbnQgaGFzIG5vIGZvcmVncm91bmQgY29udGFpbmVyIGVsZW1lbnQiKTtlLmFwcGVuZENoaWxkKHQuYm94KX1pZih0aGlzLmRpc3BsYXllZD0hMCx0aGlzLmRpcnR5KXt0aGlzLl91cGRhdGVDb250ZW50cyh0aGlzLmRvbS5jb250ZW50KSx0aGlzLl91cGRhdGVUaXRsZSh0aGlzLmRvbS5ib3gpLHRoaXMuX3VwZGF0ZURhdGFBdHRyaWJ1dGVzKHRoaXMuZG9tLmJveCksdGhpcy5fdXBkYXRlU3R5bGUodGhpcy5kb20uYm94KTt2YXIgaT0odGhpcy5vcHRpb25zLmVkaXRhYmxlLnVwZGF0ZVRpbWV8fHRoaXMub3B0aW9ucy5lZGl0YWJsZS51cGRhdGVHcm91cHx8dGhpcy5lZGl0YWJsZT09PSEwKSYmdGhpcy5lZGl0YWJsZSE9PSExLG89KHRoaXMuZGF0YS5jbGFzc05hbWU/IiAiK3RoaXMuZGF0YS5jbGFzc05hbWU6IiIpKyh0aGlzLnNlbGVjdGVkPyIgdmlzLXNlbGVjdGVkIjoiIikrKGk/IiB2aXMtZWRpdGFibGUiOiIgdmlzLXJlYWRvbmx5Iik7dC5ib3guY2xhc3NOYW1lPXRoaXMuYmFzZUNsYXNzTmFtZStvLHRoaXMub3ZlcmZsb3c9ImhpZGRlbiIhPT13aW5kb3cuZ2V0Q29tcHV0ZWRTdHlsZSh0LmZyYW1lKS5vdmVyZmxvdyx0aGlzLmRvbS5jb250ZW50LnN0eWxlLm1heFdpZHRoPSJub25lIix0aGlzLnByb3BzLmNvbnRlbnQud2lkdGg9dGhpcy5kb20uY29udGVudC5vZmZzZXRXaWR0aCx0aGlzLmhlaWdodD10aGlzLmRvbS5ib3gub2Zmc2V0SGVpZ2h0LHRoaXMuZG9tLmNvbnRlbnQuc3R5bGUubWF4V2lkdGg9IiIsdGhpcy5kaXJ0eT0hMX10aGlzLl9yZXBhaW50RGVsZXRlQnV0dG9uKHQuYm94KSx0aGlzLl9yZXBhaW50RHJhZ0xlZnQoKSx0aGlzLl9yZXBhaW50RHJhZ1JpZ2h0KCl9LG8ucHJvdG90eXBlLnNob3c9ZnVuY3Rpb24oKXt0aGlzLmRpc3BsYXllZHx8dGhpcy5yZWRyYXcoKX0sby5wcm90b3R5cGUuaGlkZT1mdW5jdGlvbigpe2lmKHRoaXMuZGlzcGxheWVkKXt2YXIgdD10aGlzLmRvbS5ib3g7dC5wYXJlbnROb2RlJiZ0LnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQodCksdGhpcy5kaXNwbGF5ZWQ9ITF9fSxvLnByb3RvdHlwZS5yZXBvc2l0aW9uWD1mdW5jdGlvbih0KXt2YXIgZSxpLG89dGhpcy5wYXJlbnQud2lkdGgsbj10aGlzLmNvbnZlcnNpb24udG9TY3JlZW4odGhpcy5kYXRhLnN0YXJ0KSxzPXRoaXMuY29udmVyc2lvbi50b1NjcmVlbih0aGlzLmRhdGEuZW5kKTsodm9pZCAwPT09dHx8dD09PSEwKSYmKC1vPm4mJihuPS1vKSxzPjIqbyYmKHM9MipvKSk7dmFyIHI9TWF0aC5tYXgocy1uLDEpO3N3aXRjaCh0aGlzLm92ZXJmbG93Pyh0aGlzLmxlZnQ9bix0aGlzLndpZHRoPXIrdGhpcy5wcm9wcy5jb250ZW50LndpZHRoLGk9dGhpcy5wcm9wcy5jb250ZW50LndpZHRoKToodGhpcy5sZWZ0PW4sdGhpcy53aWR0aD1yLGk9TWF0aC5taW4ocy1uLHRoaXMucHJvcHMuY29udGVudC53aWR0aCkpLHRoaXMuZG9tLmJveC5zdHlsZS5sZWZ0PXRoaXMubGVmdCsicHgiLHRoaXMuZG9tLmJveC5zdHlsZS53aWR0aD1yKyJweCIsdGhpcy5vcHRpb25zLmFsaWduKXtjYXNlImxlZnQiOnRoaXMuZG9tLmNvbnRlbnQuc3R5bGUubGVmdD0iMCI7YnJlYWs7Y2FzZSJyaWdodCI6dGhpcy5kb20uY29udGVudC5zdHlsZS5sZWZ0PU1hdGgubWF4KHItaSwwKSsicHgiO2JyZWFrO2Nhc2UiY2VudGVyIjp0aGlzLmRvbS5jb250ZW50LnN0eWxlLmxlZnQ9TWF0aC5tYXgoKHItaSkvMiwwKSsicHgiO2JyZWFrO2RlZmF1bHQ6ZT10aGlzLm92ZXJmbG93P3M+MD9NYXRoLm1heCgtbiwwKTotaTowPm4/LW46MCx0aGlzLmRvbS5jb250ZW50LnN0eWxlLmxlZnQ9ZSsicHgifX0sby5wcm90b3R5cGUucmVwb3NpdGlvblk9ZnVuY3Rpb24oKXt2YXIgdD10aGlzLm9wdGlvbnMub3JpZW50YXRpb24uaXRlbSxlPXRoaXMuZG9tLmJveDsidG9wIj09dD9lLnN0eWxlLnRvcD10aGlzLnRvcCsicHgiOmUuc3R5bGUudG9wPXRoaXMucGFyZW50LmhlaWdodC10aGlzLnRvcC10aGlzLmhlaWdodCsicHgifSxvLnByb3RvdHlwZS5fcmVwYWludERyYWdMZWZ0PWZ1bmN0aW9uKCl7aWYodGhpcy5zZWxlY3RlZCYmdGhpcy5vcHRpb25zLmVkaXRhYmxlLnVwZGF0ZVRpbWUmJiF0aGlzLmRvbS5kcmFnTGVmdCl7dmFyIHQ9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2Iik7dC5jbGFzc05hbWU9InZpcy1kcmFnLWxlZnQiLHQuZHJhZ0xlZnRJdGVtPXRoaXMsdGhpcy5kb20uYm94LmFwcGVuZENoaWxkKHQpLHRoaXMuZG9tLmRyYWdMZWZ0PXR9ZWxzZSF0aGlzLnNlbGVjdGVkJiZ0aGlzLmRvbS5kcmFnTGVmdCYmKHRoaXMuZG9tLmRyYWdMZWZ0LnBhcmVudE5vZGUmJnRoaXMuZG9tLmRyYWdMZWZ0LnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQodGhpcy5kb20uZHJhZ0xlZnQpLHRoaXMuZG9tLmRyYWdMZWZ0PW51bGwpfSxvLnByb3RvdHlwZS5fcmVwYWludERyYWdSaWdodD1mdW5jdGlvbigpe2lmKHRoaXMuc2VsZWN0ZWQmJnRoaXMub3B0aW9ucy5lZGl0YWJsZS51cGRhdGVUaW1lJiYhdGhpcy5kb20uZHJhZ1JpZ2h0KXt2YXIgdD1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKTt0LmNsYXNzTmFtZT0idmlzLWRyYWctcmlnaHQiLHQuZHJhZ1JpZ2h0SXRlbT10aGlzLHRoaXMuZG9tLmJveC5hcHBlbmRDaGlsZCh0KSx0aGlzLmRvbS5kcmFnUmlnaHQ9dH1lbHNlIXRoaXMuc2VsZWN0ZWQmJnRoaXMuZG9tLmRyYWdSaWdodCYmKHRoaXMuZG9tLmRyYWdSaWdodC5wYXJlbnROb2RlJiZ0aGlzLmRvbS5kcmFnUmlnaHQucGFyZW50Tm9kZS5yZW1vdmVDaGlsZCh0aGlzLmRvbS5kcmFnUmlnaHQpLHRoaXMuZG9tLmRyYWdSaWdodD1udWxsKX0sdC5leHBvcnRzPW99LGZ1bmN0aW9uKHQsZSxpKXtmdW5jdGlvbiBvKHQsZSxpKXt0aGlzLmlkPW51bGwsdGhpcy5wYXJlbnQ9bnVsbCx0aGlzLmRhdGE9dCx0aGlzLmRvbT1udWxsLHRoaXMuY29udmVyc2lvbj1lfHx7fSx0aGlzLm9wdGlvbnM9aXx8e30sdGhpcy5zZWxlY3RlZD0hMSx0aGlzLmRpc3BsYXllZD0hMSx0aGlzLmRpcnR5PSEwLHRoaXMudG9wPW51bGwsdGhpcy5sZWZ0PW51bGwsdGhpcy53aWR0aD1udWxsLHRoaXMuaGVpZ2h0PW51bGwsdGhpcy5lZGl0YWJsZT1udWxsLHRoaXMuZGF0YSYmdGhpcy5kYXRhLmhhc093blByb3BlcnR5KCJlZGl0YWJsZSIpJiYiYm9vbGVhbiI9PXR5cGVvZiB0aGlzLmRhdGEuZWRpdGFibGUmJih0aGlzLmVkaXRhYmxlPXQuZWRpdGFibGUpfXZhciBuPWkoMjApLHM9aSgxKTtvLnByb3RvdHlwZS5zdGFjaz0hMCxvLnByb3RvdHlwZS5zZWxlY3Q9ZnVuY3Rpb24oKXt0aGlzLnNlbGVjdGVkPSEwLHRoaXMuZGlydHk9ITAsdGhpcy5kaXNwbGF5ZWQmJnRoaXMucmVkcmF3KCl9LG8ucHJvdG90eXBlLnVuc2VsZWN0PWZ1bmN0aW9uKCl7dGhpcy5zZWxlY3RlZD0hMSx0aGlzLmRpcnR5PSEwLHRoaXMuZGlzcGxheWVkJiZ0aGlzLnJlZHJhdygpfSxvLnByb3RvdHlwZS5zZXREYXRhPWZ1bmN0aW9uKHQpe3ZhciBlPXZvaWQgMCE9dC5ncm91cCYmdGhpcy5kYXRhLmdyb3VwIT10Lmdyb3VwO2UmJnRoaXMucGFyZW50Lml0ZW1TZXQuX21vdmVUb0dyb3VwKHRoaXMsdC5ncm91cCksdC5oYXNPd25Qcm9wZXJ0eSgiZWRpdGFibGUiKSYmImJvb2xlYW4iPT10eXBlb2YgdC5lZGl0YWJsZSYmKHRoaXMuZWRpdGFibGU9dC5lZGl0YWJsZSksdGhpcy5kYXRhPXQsdGhpcy5kaXJ0eT0hMCx0aGlzLmRpc3BsYXllZCYmdGhpcy5yZWRyYXcoKX0sby5wcm90b3R5cGUuc2V0UGFyZW50PWZ1bmN0aW9uKHQpe3RoaXMuZGlzcGxheWVkPyh0aGlzLmhpZGUoKSx0aGlzLnBhcmVudD10LHRoaXMucGFyZW50JiZ0aGlzLnNob3coKSk6dGhpcy5wYXJlbnQ9dH0sby5wcm90b3R5cGUuaXNWaXNpYmxlPWZ1bmN0aW9uKHQpe3JldHVybiExfSxvLnByb3RvdHlwZS5zaG93PWZ1bmN0aW9uKCl7cmV0dXJuITF9LG8ucHJvdG90eXBlLmhpZGU9ZnVuY3Rpb24oKXtyZXR1cm4hMX0sby5wcm90b3R5cGUucmVkcmF3PWZ1bmN0aW9uKCl7fSxvLnByb3RvdHlwZS5yZXBvc2l0aW9uWD1mdW5jdGlvbigpe30sby5wcm90b3R5cGUucmVwb3NpdGlvblk9ZnVuY3Rpb24oKXt9LG8ucHJvdG90eXBlLl9yZXBhaW50RGVsZXRlQnV0dG9uPWZ1bmN0aW9uKHQpe3ZhciBlPSh0aGlzLm9wdGlvbnMuZWRpdGFibGUucmVtb3ZlfHx0aGlzLmRhdGEuZWRpdGFibGU9PT0hMCkmJnRoaXMuZGF0YS5lZGl0YWJsZSE9PSExO2lmKHRoaXMuc2VsZWN0ZWQmJmUmJiF0aGlzLmRvbS5kZWxldGVCdXR0b24pe3ZhciBpPXRoaXMsbz1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKTtvLmNsYXNzTmFtZT0idmlzLWRlbGV0ZSIsby50aXRsZT0iRGVsZXRlIHRoaXMgaXRlbSIsbmV3IG4obykub24oInRhcCIsZnVuY3Rpb24odCl7dC5zdG9wUHJvcGFnYXRpb24oKSxpLnBhcmVudC5yZW1vdmVGcm9tRGF0YVNldChpKX0pLHQuYXBwZW5kQ2hpbGQobyksdGhpcy5kb20uZGVsZXRlQnV0dG9uPW99ZWxzZSF0aGlzLnNlbGVjdGVkJiZ0aGlzLmRvbS5kZWxldGVCdXR0b24mJih0aGlzLmRvbS5kZWxldGVCdXR0b24ucGFyZW50Tm9kZSYmdGhpcy5kb20uZGVsZXRlQnV0dG9uLnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQodGhpcy5kb20uZGVsZXRlQnV0dG9uKSx0aGlzLmRvbS5kZWxldGVCdXR0b249bnVsbCl9LG8ucHJvdG90eXBlLl91cGRhdGVDb250ZW50cz1mdW5jdGlvbih0KXt2YXIgZTtpZih0aGlzLm9wdGlvbnMudGVtcGxhdGUpe3ZhciBpPXRoaXMucGFyZW50Lml0ZW1TZXQuaXRlbXNEYXRhLmdldCh0aGlzLmlkKTtlPXRoaXMub3B0aW9ucy50ZW1wbGF0ZShpKX1lbHNlIGU9dGhpcy5kYXRhLmNvbnRlbnQ7dmFyIG89dGhpcy5fY29udGVudFRvU3RyaW5nKHRoaXMuY29udGVudCkhPT10aGlzLl9jb250ZW50VG9TdHJpbmcoZSk7aWYobyl7aWYoZSBpbnN0YW5jZW9mIEVsZW1lbnQpdC5pbm5lckhUTUw9IiIsdC5hcHBlbmRDaGlsZChlKTtlbHNlIGlmKHZvaWQgMCE9ZSl0LmlubmVySFRNTD1lO2Vsc2UgaWYoImJhY2tncm91bmQiIT10aGlzLmRhdGEudHlwZXx8dm9pZCAwIT09dGhpcy5kYXRhLmNvbnRlbnQpdGhyb3cgbmV3IEVycm9yKCdQcm9wZXJ0eSAiY29udGVudCIgbWlzc2luZyBpbiBpdGVtICcrdGhpcy5pZCk7dGhpcy5jb250ZW50PWV9fSxvLnByb3RvdHlwZS5fdXBkYXRlVGl0bGU9ZnVuY3Rpb24odCl7bnVsbCE9dGhpcy5kYXRhLnRpdGxlP3QudGl0bGU9dGhpcy5kYXRhLnRpdGxlfHwiIjp0LnJlbW92ZUF0dHJpYnV0ZSgidmlzLXRpdGxlIil9LG8ucHJvdG90eXBlLl91cGRhdGVEYXRhQXR0cmlidXRlcz1mdW5jdGlvbih0KXtpZih0aGlzLm9wdGlvbnMuZGF0YUF0dHJpYnV0ZXMmJnRoaXMub3B0aW9ucy5kYXRhQXR0cmlidXRlcy5sZW5ndGg+MCl7dmFyIGU9W107aWYoQXJyYXkuaXNBcnJheSh0aGlzLm9wdGlvbnMuZGF0YUF0dHJpYnV0ZXMpKWU9dGhpcy5vcHRpb25zLmRhdGFBdHRyaWJ1dGVzO2Vsc2V7aWYoImFsbCIhPXRoaXMub3B0aW9ucy5kYXRhQXR0cmlidXRlcylyZXR1cm47ZT1PYmplY3Qua2V5cyh0aGlzLmRhdGEpfWZvcih2YXIgaT0wO2k8ZS5sZW5ndGg7aSsrKXt2YXIgbz1lW2ldLG49dGhpcy5kYXRhW29dO251bGwhPW4/dC5zZXRBdHRyaWJ1dGUoImRhdGEtIitvLG4pOnQucmVtb3ZlQXR0cmlidXRlKCJkYXRhLSIrbyl9fX0sby5wcm90b3R5cGUuX3VwZGF0ZVN0eWxlPWZ1bmN0aW9uKHQpe3RoaXMuc3R5bGUmJihzLnJlbW92ZUNzc1RleHQodCx0aGlzLnN0eWxlKSx0aGlzLnN0eWxlPW51bGwpLHRoaXMuZGF0YS5zdHlsZSYmKHMuYWRkQ3NzVGV4dCh0LHRoaXMuZGF0YS5zdHlsZSksdGhpcy5zdHlsZT10aGlzLmRhdGEuc3R5bGUpfSxvLnByb3RvdHlwZS5fY29udGVudFRvU3RyaW5nPWZ1bmN0aW9uKHQpe3JldHVybiJzdHJpbmciPT10eXBlb2YgdD90OnQmJiJvdXRlckhUTUwiaW4gdD90Lm91dGVySFRNTDp0fSxvLnByb3RvdHlwZS5nZXRXaWR0aExlZnQ9ZnVuY3Rpb24oKXtyZXR1cm4gMH0sby5wcm90b3R5cGUuZ2V0V2lkdGhSaWdodD1mdW5jdGlvbigpe3JldHVybiAwfSx0LmV4cG9ydHM9b30sZnVuY3Rpb24odCxlLGkpe2Z1bmN0aW9uIG8odCxlLGkpe24uY2FsbCh0aGlzLHQsZSxpKSx0aGlzLndpZHRoPTAsdGhpcy5oZWlnaHQ9MCx0aGlzLnRvcD0wLHRoaXMubGVmdD0wfXZhciBuPShpKDEpLGkoMzApKTtvLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKG4ucHJvdG90eXBlKSxvLnByb3RvdHlwZS5yZWRyYXc9ZnVuY3Rpb24odCxlLGkpe3ZhciBvPSExO3RoaXMudmlzaWJsZUl0ZW1zPXRoaXMuX3VwZGF0ZVZpc2libGVJdGVtcyh0aGlzLm9yZGVyZWRJdGVtcyx0aGlzLnZpc2libGVJdGVtcyx0KSx0aGlzLndpZHRoPXRoaXMuZG9tLmJhY2tncm91bmQub2Zmc2V0V2lkdGgsdGhpcy5kb20uYmFja2dyb3VuZC5zdHlsZS5oZWlnaHQ9IjAiO2Zvcih2YXIgbj0wLHM9dGhpcy52aXNpYmxlSXRlbXMubGVuZ3RoO3M+bjtuKyspe3ZhciByPXRoaXMudmlzaWJsZUl0ZW1zW25dO3IucmVwb3NpdGlvblkoZSl9cmV0dXJuIG99LG8ucHJvdG90eXBlLnNob3c9ZnVuY3Rpb24oKXt0aGlzLmRvbS5iYWNrZ3JvdW5kLnBhcmVudE5vZGV8fHRoaXMuaXRlbVNldC5kb20uYmFja2dyb3VuZC5hcHBlbmRDaGlsZCh0aGlzLmRvbS5iYWNrZ3JvdW5kKX0sdC5leHBvcnRzPW99LGZ1bmN0aW9uKHQsZSxpKXtmdW5jdGlvbiBvKHQsZSxpKXtpZih0aGlzLnByb3BzPXtkb3Q6e3dpZHRoOjAsaGVpZ2h0OjB9LGxpbmU6e3dpZHRoOjAsaGVpZ2h0OjB9fSx0JiZ2b2lkIDA9PXQuc3RhcnQpdGhyb3cgbmV3IEVycm9yKCdQcm9wZXJ0eSAic3RhcnQiIG1pc3NpbmcgaW4gaXRlbSAnK3QpO24uY2FsbCh0aGlzLHQsZSxpKX12YXIgbj1pKDMzKTtpKDEpO28ucHJvdG90eXBlPW5ldyBuKG51bGwsbnVsbCxudWxsKSxvLnByb3RvdHlwZS5pc1Zpc2libGU9ZnVuY3Rpb24odCl7dmFyIGU9KHQuZW5kLXQuc3RhcnQpLzQ7cmV0dXJuIHRoaXMuZGF0YS5zdGFydD50LnN0YXJ0LWUmJnRoaXMuZGF0YS5zdGFydDx0LmVuZCtlfSxvLnByb3RvdHlwZS5yZWRyYXc9ZnVuY3Rpb24oKXt2YXIgdD10aGlzLmRvbTtpZih0fHwodGhpcy5kb209e30sdD10aGlzLmRvbSx0LmJveD1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJESVYiKSx0LmNvbnRlbnQ9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiRElWIiksdC5jb250ZW50LmNsYXNzTmFtZT0idmlzLWl0ZW0tY29udGVudCIsdC5ib3guYXBwZW5kQ2hpbGQodC5jb250ZW50KSx0LmxpbmU9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiRElWIiksdC5saW5lLmNsYXNzTmFtZT0idmlzLWxpbmUiLHQuZG90PWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoIkRJViIpLHQuZG90LmNsYXNzTmFtZT0idmlzLWRvdCIsdC5ib3hbInRpbWVsaW5lLWl0ZW0iXT10aGlzLHRoaXMuZGlydHk9ITApLCF0aGlzLnBhcmVudCl0aHJvdyBuZXcgRXJyb3IoIkNhbm5vdCByZWRyYXcgaXRlbTogbm8gcGFyZW50IGF0dGFjaGVkIik7aWYoIXQuYm94LnBhcmVudE5vZGUpe3ZhciBlPXRoaXMucGFyZW50LmRvbS5mb3JlZ3JvdW5kO2lmKCFlKXRocm93IG5ldyBFcnJvcigiQ2Fubm90IHJlZHJhdyBpdGVtOiBwYXJlbnQgaGFzIG5vIGZvcmVncm91bmQgY29udGFpbmVyIGVsZW1lbnQiKTtlLmFwcGVuZENoaWxkKHQuYm94KX1pZighdC5saW5lLnBhcmVudE5vZGUpe3ZhciBpPXRoaXMucGFyZW50LmRvbS5iYWNrZ3JvdW5kO2lmKCFpKXRocm93IG5ldyBFcnJvcigiQ2Fubm90IHJlZHJhdyBpdGVtOiBwYXJlbnQgaGFzIG5vIGJhY2tncm91bmQgY29udGFpbmVyIGVsZW1lbnQiKTtpLmFwcGVuZENoaWxkKHQubGluZSl9aWYoIXQuZG90LnBhcmVudE5vZGUpe3ZhciBvPXRoaXMucGFyZW50LmRvbS5heGlzO2lmKCFpKXRocm93IG5ldyBFcnJvcigiQ2Fubm90IHJlZHJhdyBpdGVtOiBwYXJlbnQgaGFzIG5vIGF4aXMgY29udGFpbmVyIGVsZW1lbnQiKTtvLmFwcGVuZENoaWxkKHQuZG90KX1pZih0aGlzLmRpc3BsYXllZD0hMCx0aGlzLmRpcnR5KXt0aGlzLl91cGRhdGVDb250ZW50cyh0aGlzLmRvbS5jb250ZW50KSx0aGlzLl91cGRhdGVUaXRsZSh0aGlzLmRvbS5ib3gpLAp0aGlzLl91cGRhdGVEYXRhQXR0cmlidXRlcyh0aGlzLmRvbS5ib3gpLHRoaXMuX3VwZGF0ZVN0eWxlKHRoaXMuZG9tLmJveCk7dmFyIG49KHRoaXMub3B0aW9ucy5lZGl0YWJsZS51cGRhdGVUaW1lfHx0aGlzLm9wdGlvbnMuZWRpdGFibGUudXBkYXRlR3JvdXB8fHRoaXMuZWRpdGFibGU9PT0hMCkmJnRoaXMuZWRpdGFibGUhPT0hMSxzPSh0aGlzLmRhdGEuY2xhc3NOYW1lPyIgIit0aGlzLmRhdGEuY2xhc3NOYW1lOiIiKSsodGhpcy5zZWxlY3RlZD8iIHZpcy1zZWxlY3RlZCI6IiIpKyhuPyIgdmlzLWVkaXRhYmxlIjoiIHZpcy1yZWFkb25seSIpO3QuYm94LmNsYXNzTmFtZT0idmlzLWl0ZW0gdmlzLWJveCIrcyx0LmxpbmUuY2xhc3NOYW1lPSJ2aXMtaXRlbSB2aXMtbGluZSIrcyx0LmRvdC5jbGFzc05hbWU9InZpcy1pdGVtIHZpcy1kb3QiK3MsdGhpcy5wcm9wcy5kb3QuaGVpZ2h0PXQuZG90Lm9mZnNldEhlaWdodCx0aGlzLnByb3BzLmRvdC53aWR0aD10LmRvdC5vZmZzZXRXaWR0aCx0aGlzLnByb3BzLmxpbmUud2lkdGg9dC5saW5lLm9mZnNldFdpZHRoLHRoaXMud2lkdGg9dC5ib3gub2Zmc2V0V2lkdGgsdGhpcy5oZWlnaHQ9dC5ib3gub2Zmc2V0SGVpZ2h0LHRoaXMuZGlydHk9ITF9dGhpcy5fcmVwYWludERlbGV0ZUJ1dHRvbih0LmJveCl9LG8ucHJvdG90eXBlLnNob3c9ZnVuY3Rpb24oKXt0aGlzLmRpc3BsYXllZHx8dGhpcy5yZWRyYXcoKX0sby5wcm90b3R5cGUuaGlkZT1mdW5jdGlvbigpe2lmKHRoaXMuZGlzcGxheWVkKXt2YXIgdD10aGlzLmRvbTt0LmJveC5wYXJlbnROb2RlJiZ0LmJveC5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKHQuYm94KSx0LmxpbmUucGFyZW50Tm9kZSYmdC5saW5lLnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQodC5saW5lKSx0LmRvdC5wYXJlbnROb2RlJiZ0LmRvdC5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKHQuZG90KSx0aGlzLmRpc3BsYXllZD0hMX19LG8ucHJvdG90eXBlLnJlcG9zaXRpb25YPWZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5jb252ZXJzaW9uLnRvU2NyZWVuKHRoaXMuZGF0YS5zdGFydCksZT10aGlzLm9wdGlvbnMuYWxpZ247InJpZ2h0Ij09ZT90aGlzLmxlZnQ9dC10aGlzLndpZHRoOiJsZWZ0Ij09ZT90aGlzLmxlZnQ9dDp0aGlzLmxlZnQ9dC10aGlzLndpZHRoLzIsdGhpcy5kb20uYm94LnN0eWxlLmxlZnQ9dGhpcy5sZWZ0KyJweCIsdGhpcy5kb20ubGluZS5zdHlsZS5sZWZ0PXQtdGhpcy5wcm9wcy5saW5lLndpZHRoLzIrInB4Iix0aGlzLmRvbS5kb3Quc3R5bGUubGVmdD10LXRoaXMucHJvcHMuZG90LndpZHRoLzIrInB4In0sby5wcm90b3R5cGUucmVwb3NpdGlvblk9ZnVuY3Rpb24oKXt2YXIgdD10aGlzLm9wdGlvbnMub3JpZW50YXRpb24uaXRlbSxlPXRoaXMuZG9tLmJveCxpPXRoaXMuZG9tLmxpbmUsbz10aGlzLmRvbS5kb3Q7aWYoInRvcCI9PXQpZS5zdHlsZS50b3A9KHRoaXMudG9wfHwwKSsicHgiLGkuc3R5bGUudG9wPSIwIixpLnN0eWxlLmhlaWdodD10aGlzLnBhcmVudC50b3ArdGhpcy50b3ArMSsicHgiLGkuc3R5bGUuYm90dG9tPSIiO2Vsc2V7dmFyIG49dGhpcy5wYXJlbnQuaXRlbVNldC5wcm9wcy5oZWlnaHQscz1uLXRoaXMucGFyZW50LnRvcC10aGlzLnBhcmVudC5oZWlnaHQrdGhpcy50b3A7ZS5zdHlsZS50b3A9KHRoaXMucGFyZW50LmhlaWdodC10aGlzLnRvcC10aGlzLmhlaWdodHx8MCkrInB4IixpLnN0eWxlLnRvcD1uLXMrInB4IixpLnN0eWxlLmJvdHRvbT0iMCJ9by5zdHlsZS50b3A9LXRoaXMucHJvcHMuZG90LmhlaWdodC8yKyJweCJ9LG8ucHJvdG90eXBlLmdldFdpZHRoTGVmdD1mdW5jdGlvbigpe3JldHVybiB0aGlzLndpZHRoLzJ9LG8ucHJvdG90eXBlLmdldFdpZHRoUmlnaHQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy53aWR0aC8yfSx0LmV4cG9ydHM9b30sZnVuY3Rpb24odCxlLGkpe2Z1bmN0aW9uIG8odCxlLGkpe2lmKHRoaXMucHJvcHM9e2RvdDp7dG9wOjAsd2lkdGg6MCxoZWlnaHQ6MH0sY29udGVudDp7aGVpZ2h0OjAsbWFyZ2luTGVmdDowfX0sdCYmdm9pZCAwPT10LnN0YXJ0KXRocm93IG5ldyBFcnJvcignUHJvcGVydHkgInN0YXJ0IiBtaXNzaW5nIGluIGl0ZW0gJyt0KTtuLmNhbGwodGhpcyx0LGUsaSl9dmFyIG49aSgzMyk7by5wcm90b3R5cGU9bmV3IG4obnVsbCxudWxsLG51bGwpLG8ucHJvdG90eXBlLmlzVmlzaWJsZT1mdW5jdGlvbih0KXt2YXIgZT0odC5lbmQtdC5zdGFydCkvNDtyZXR1cm4gdGhpcy5kYXRhLnN0YXJ0PnQuc3RhcnQtZSYmdGhpcy5kYXRhLnN0YXJ0PHQuZW5kK2V9LG8ucHJvdG90eXBlLnJlZHJhdz1mdW5jdGlvbigpe3ZhciB0PXRoaXMuZG9tO2lmKHR8fCh0aGlzLmRvbT17fSx0PXRoaXMuZG9tLHQucG9pbnQ9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2IiksdC5jb250ZW50PWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpLHQuY29udGVudC5jbGFzc05hbWU9InZpcy1pdGVtLWNvbnRlbnQiLHQucG9pbnQuYXBwZW5kQ2hpbGQodC5jb250ZW50KSx0LmRvdD1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKSx0LnBvaW50LmFwcGVuZENoaWxkKHQuZG90KSx0LnBvaW50WyJ0aW1lbGluZS1pdGVtIl09dGhpcyx0aGlzLmRpcnR5PSEwKSwhdGhpcy5wYXJlbnQpdGhyb3cgbmV3IEVycm9yKCJDYW5ub3QgcmVkcmF3IGl0ZW06IG5vIHBhcmVudCBhdHRhY2hlZCIpO2lmKCF0LnBvaW50LnBhcmVudE5vZGUpe3ZhciBlPXRoaXMucGFyZW50LmRvbS5mb3JlZ3JvdW5kO2lmKCFlKXRocm93IG5ldyBFcnJvcigiQ2Fubm90IHJlZHJhdyBpdGVtOiBwYXJlbnQgaGFzIG5vIGZvcmVncm91bmQgY29udGFpbmVyIGVsZW1lbnQiKTtlLmFwcGVuZENoaWxkKHQucG9pbnQpfWlmKHRoaXMuZGlzcGxheWVkPSEwLHRoaXMuZGlydHkpe3RoaXMuX3VwZGF0ZUNvbnRlbnRzKHRoaXMuZG9tLmNvbnRlbnQpLHRoaXMuX3VwZGF0ZVRpdGxlKHRoaXMuZG9tLnBvaW50KSx0aGlzLl91cGRhdGVEYXRhQXR0cmlidXRlcyh0aGlzLmRvbS5wb2ludCksdGhpcy5fdXBkYXRlU3R5bGUodGhpcy5kb20ucG9pbnQpO3ZhciBpPSh0aGlzLm9wdGlvbnMuZWRpdGFibGUudXBkYXRlVGltZXx8dGhpcy5vcHRpb25zLmVkaXRhYmxlLnVwZGF0ZUdyb3VwfHx0aGlzLmVkaXRhYmxlPT09ITApJiZ0aGlzLmVkaXRhYmxlIT09ITEsbz0odGhpcy5kYXRhLmNsYXNzTmFtZT8iICIrdGhpcy5kYXRhLmNsYXNzTmFtZToiIikrKHRoaXMuc2VsZWN0ZWQ/IiB2aXMtc2VsZWN0ZWQiOiIiKSsoaT8iIHZpcy1lZGl0YWJsZSI6IiB2aXMtcmVhZG9ubHkiKTt0LnBvaW50LmNsYXNzTmFtZT0idmlzLWl0ZW0gdmlzLXBvaW50IitvLHQuZG90LmNsYXNzTmFtZT0idmlzLWl0ZW0gdmlzLWRvdCIrbyx0aGlzLnByb3BzLmRvdC53aWR0aD10LmRvdC5vZmZzZXRXaWR0aCx0aGlzLnByb3BzLmRvdC5oZWlnaHQ9dC5kb3Qub2Zmc2V0SGVpZ2h0LHRoaXMucHJvcHMuY29udGVudC5oZWlnaHQ9dC5jb250ZW50Lm9mZnNldEhlaWdodCx0LmNvbnRlbnQuc3R5bGUubWFyZ2luTGVmdD0yKnRoaXMucHJvcHMuZG90LndpZHRoKyJweCIsdGhpcy53aWR0aD10LnBvaW50Lm9mZnNldFdpZHRoLHRoaXMuaGVpZ2h0PXQucG9pbnQub2Zmc2V0SGVpZ2h0LHQuZG90LnN0eWxlLnRvcD0odGhpcy5oZWlnaHQtdGhpcy5wcm9wcy5kb3QuaGVpZ2h0KS8yKyJweCIsdC5kb3Quc3R5bGUubGVmdD10aGlzLnByb3BzLmRvdC53aWR0aC8yKyJweCIsdGhpcy5kaXJ0eT0hMX10aGlzLl9yZXBhaW50RGVsZXRlQnV0dG9uKHQucG9pbnQpfSxvLnByb3RvdHlwZS5zaG93PWZ1bmN0aW9uKCl7dGhpcy5kaXNwbGF5ZWR8fHRoaXMucmVkcmF3KCl9LG8ucHJvdG90eXBlLmhpZGU9ZnVuY3Rpb24oKXt0aGlzLmRpc3BsYXllZCYmKHRoaXMuZG9tLnBvaW50LnBhcmVudE5vZGUmJnRoaXMuZG9tLnBvaW50LnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQodGhpcy5kb20ucG9pbnQpLHRoaXMuZGlzcGxheWVkPSExKX0sby5wcm90b3R5cGUucmVwb3NpdGlvblg9ZnVuY3Rpb24oKXt2YXIgdD10aGlzLmNvbnZlcnNpb24udG9TY3JlZW4odGhpcy5kYXRhLnN0YXJ0KTt0aGlzLmxlZnQ9dC10aGlzLnByb3BzLmRvdC53aWR0aCx0aGlzLmRvbS5wb2ludC5zdHlsZS5sZWZ0PXRoaXMubGVmdCsicHgifSxvLnByb3RvdHlwZS5yZXBvc2l0aW9uWT1mdW5jdGlvbigpe3ZhciB0PXRoaXMub3B0aW9ucy5vcmllbnRhdGlvbi5pdGVtLGU9dGhpcy5kb20ucG9pbnQ7InRvcCI9PXQ/ZS5zdHlsZS50b3A9dGhpcy50b3ArInB4IjplLnN0eWxlLnRvcD10aGlzLnBhcmVudC5oZWlnaHQtdGhpcy50b3AtdGhpcy5oZWlnaHQrInB4In0sby5wcm90b3R5cGUuZ2V0V2lkdGhMZWZ0PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMucHJvcHMuZG90LndpZHRofSxvLnByb3RvdHlwZS5nZXRXaWR0aFJpZ2h0PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMud2lkdGgtdGhpcy5wcm9wcy5kb3Qud2lkdGh9LHQuZXhwb3J0cz1vfSxmdW5jdGlvbih0LGUsaSl7ZnVuY3Rpb24gbyh0LGUsaSl7aWYodGhpcy5wcm9wcz17Y29udGVudDp7d2lkdGg6MH19LHRoaXMub3ZlcmZsb3c9ITEsdCl7aWYodm9pZCAwPT10LnN0YXJ0KXRocm93IG5ldyBFcnJvcignUHJvcGVydHkgInN0YXJ0IiBtaXNzaW5nIGluIGl0ZW0gJyt0LmlkKTtpZih2b2lkIDA9PXQuZW5kKXRocm93IG5ldyBFcnJvcignUHJvcGVydHkgImVuZCIgbWlzc2luZyBpbiBpdGVtICcrdC5pZCl9bi5jYWxsKHRoaXMsdCxlLGkpfXZhciBuPShpKDIwKSxpKDMzKSkscz1pKDM0KSxyPWkoMzIpO28ucHJvdG90eXBlPW5ldyBuKG51bGwsbnVsbCxudWxsKSxvLnByb3RvdHlwZS5iYXNlQ2xhc3NOYW1lPSJ2aXMtaXRlbSB2aXMtYmFja2dyb3VuZCIsby5wcm90b3R5cGUuc3RhY2s9ITEsby5wcm90b3R5cGUuaXNWaXNpYmxlPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLmRhdGEuc3RhcnQ8dC5lbmQmJnRoaXMuZGF0YS5lbmQ+dC5zdGFydH0sby5wcm90b3R5cGUucmVkcmF3PWZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5kb207aWYodHx8KHRoaXMuZG9tPXt9LHQ9dGhpcy5kb20sdC5ib3g9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2IiksdC5mcmFtZT1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKSx0LmZyYW1lLmNsYXNzTmFtZT0idmlzLWl0ZW0tb3ZlcmZsb3ciLHQuYm94LmFwcGVuZENoaWxkKHQuZnJhbWUpLHQuY29udGVudD1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKSx0LmNvbnRlbnQuY2xhc3NOYW1lPSJ2aXMtaXRlbS1jb250ZW50Iix0LmZyYW1lLmFwcGVuZENoaWxkKHQuY29udGVudCksdGhpcy5kaXJ0eT0hMCksIXRoaXMucGFyZW50KXRocm93IG5ldyBFcnJvcigiQ2Fubm90IHJlZHJhdyBpdGVtOiBubyBwYXJlbnQgYXR0YWNoZWQiKTtpZighdC5ib3gucGFyZW50Tm9kZSl7dmFyIGU9dGhpcy5wYXJlbnQuZG9tLmJhY2tncm91bmQ7aWYoIWUpdGhyb3cgbmV3IEVycm9yKCJDYW5ub3QgcmVkcmF3IGl0ZW06IHBhcmVudCBoYXMgbm8gYmFja2dyb3VuZCBjb250YWluZXIgZWxlbWVudCIpO2UuYXBwZW5kQ2hpbGQodC5ib3gpfWlmKHRoaXMuZGlzcGxheWVkPSEwLHRoaXMuZGlydHkpe3RoaXMuX3VwZGF0ZUNvbnRlbnRzKHRoaXMuZG9tLmNvbnRlbnQpLHRoaXMuX3VwZGF0ZVRpdGxlKHRoaXMuZG9tLmNvbnRlbnQpLHRoaXMuX3VwZGF0ZURhdGFBdHRyaWJ1dGVzKHRoaXMuZG9tLmNvbnRlbnQpLHRoaXMuX3VwZGF0ZVN0eWxlKHRoaXMuZG9tLmJveCk7dmFyIGk9KHRoaXMuZGF0YS5jbGFzc05hbWU/IiAiK3RoaXMuZGF0YS5jbGFzc05hbWU6IiIpKyh0aGlzLnNlbGVjdGVkPyIgdmlzLXNlbGVjdGVkIjoiIik7dC5ib3guY2xhc3NOYW1lPXRoaXMuYmFzZUNsYXNzTmFtZStpLHRoaXMub3ZlcmZsb3c9ImhpZGRlbiIhPT13aW5kb3cuZ2V0Q29tcHV0ZWRTdHlsZSh0LmNvbnRlbnQpLm92ZXJmbG93LHRoaXMucHJvcHMuY29udGVudC53aWR0aD10aGlzLmRvbS5jb250ZW50Lm9mZnNldFdpZHRoLHRoaXMuaGVpZ2h0PTAsdGhpcy5kaXJ0eT0hMX19LG8ucHJvdG90eXBlLnNob3c9ci5wcm90b3R5cGUuc2hvdyxvLnByb3RvdHlwZS5oaWRlPXIucHJvdG90eXBlLmhpZGUsby5wcm90b3R5cGUucmVwb3NpdGlvblg9ci5wcm90b3R5cGUucmVwb3NpdGlvblgsby5wcm90b3R5cGUucmVwb3NpdGlvblk9ZnVuY3Rpb24odCl7dmFyIGU9InRvcCI9PT10aGlzLm9wdGlvbnMub3JpZW50YXRpb24uaXRlbTt0aGlzLmRvbS5jb250ZW50LnN0eWxlLnRvcD1lPyIiOiIwIix0aGlzLmRvbS5jb250ZW50LnN0eWxlLmJvdHRvbT1lPyIwIjoiIjt2YXIgaTtpZih2b2lkIDAhPT10aGlzLmRhdGEuc3ViZ3JvdXApe3ZhciBvPXRoaXMuZGF0YS5zdWJncm91cCxuPXRoaXMucGFyZW50LnN1Ymdyb3VwcyxyPW5bb10uaW5kZXg7aWYoMT09ZSl7aT10aGlzLnBhcmVudC5zdWJncm91cHNbb10uaGVpZ2h0K3QuaXRlbS52ZXJ0aWNhbCxpKz0wPT1yP3QuYXhpcy0uNSp0Lml0ZW0udmVydGljYWw6MDt2YXIgYT10aGlzLnBhcmVudC50b3A7Zm9yKHZhciBoIGluIG4pbi5oYXNPd25Qcm9wZXJ0eShoKSYmMT09bltoXS52aXNpYmxlJiZuW2hdLmluZGV4PHImJihhKz1uW2hdLmhlaWdodCt0Lml0ZW0udmVydGljYWwpO2ErPTAhPXI/dC5heGlzLS41KnQuaXRlbS52ZXJ0aWNhbDowLHRoaXMuZG9tLmJveC5zdHlsZS50b3A9YSsicHgiLHRoaXMuZG9tLmJveC5zdHlsZS5ib3R0b209IiJ9ZWxzZXt2YXIgYT10aGlzLnBhcmVudC50b3AsZD0wO2Zvcih2YXIgaCBpbiBuKWlmKG4uaGFzT3duUHJvcGVydHkoaCkmJjE9PW5baF0udmlzaWJsZSl7dmFyIGw9bltoXS5oZWlnaHQrdC5pdGVtLnZlcnRpY2FsO2QrPWwsbltoXS5pbmRleD5yJiYoYSs9bCl9aT10aGlzLnBhcmVudC5zdWJncm91cHNbb10uaGVpZ2h0K3QuaXRlbS52ZXJ0aWNhbCx0aGlzLmRvbS5ib3guc3R5bGUudG9wPXRoaXMucGFyZW50LmhlaWdodC1kK2ErInB4Iix0aGlzLmRvbS5ib3guc3R5bGUuYm90dG9tPSIifX1lbHNlIHRoaXMucGFyZW50IGluc3RhbmNlb2Ygcz8oaT1NYXRoLm1heCh0aGlzLnBhcmVudC5oZWlnaHQsdGhpcy5wYXJlbnQuaXRlbVNldC5ib2R5LmRvbVByb3BzLmNlbnRlci5oZWlnaHQsdGhpcy5wYXJlbnQuaXRlbVNldC5ib2R5LmRvbVByb3BzLmNlbnRlckNvbnRhaW5lci5oZWlnaHQpLHRoaXMuZG9tLmJveC5zdHlsZS50b3A9ZT8iMCI6IiIsdGhpcy5kb20uYm94LnN0eWxlLmJvdHRvbT1lPyIiOiIwIik6KGk9dGhpcy5wYXJlbnQuaGVpZ2h0LHRoaXMuZG9tLmJveC5zdHlsZS50b3A9dGhpcy5wYXJlbnQudG9wKyJweCIsdGhpcy5kb20uYm94LnN0eWxlLmJvdHRvbT0iIik7dGhpcy5kb20uYm94LnN0eWxlLmhlaWdodD1pKyJweCJ9LHQuZXhwb3J0cz1vfSxmdW5jdGlvbih0LGUsaSl7ZnVuY3Rpb24gbyh0LGUpe3RoaXMuZG9tPXtmb3JlZ3JvdW5kOm51bGwsbGluZXM6W10sbWFqb3JUZXh0czpbXSxtaW5vclRleHRzOltdLHJlZHVuZGFudDp7bGluZXM6W10sbWFqb3JUZXh0czpbXSxtaW5vclRleHRzOltdfX0sdGhpcy5wcm9wcz17cmFuZ2U6e3N0YXJ0OjAsZW5kOjAsbWluaW11bVN0ZXA6MH0sbGluZVRvcDowfSx0aGlzLmRlZmF1bHRPcHRpb25zPXtvcmllbnRhdGlvbjp7YXhpczoiYm90dG9tIn0sc2hvd01pbm9yTGFiZWxzOiEwLHNob3dNYWpvckxhYmVsczohMCxtYXhNaW5vckNoYXJzOjcsZm9ybWF0OnIuRk9STUFULG1vbWVudDpoLHRpbWVBeGlzOm51bGx9LHRoaXMub3B0aW9ucz1uLmV4dGVuZCh7fSx0aGlzLmRlZmF1bHRPcHRpb25zKSx0aGlzLmJvZHk9dCx0aGlzLl9jcmVhdGUoKSx0aGlzLnNldE9wdGlvbnMoZSl9dmFyIG49aSgxKSxzPWkoMjUpLHI9aSgyOSksYT1pKDI2KSxoPWkoMik7by5wcm90b3R5cGU9bmV3IHMsby5wcm90b3R5cGUuc2V0T3B0aW9ucz1mdW5jdGlvbih0KXt0JiYobi5zZWxlY3RpdmVFeHRlbmQoWyJzaG93TWlub3JMYWJlbHMiLCJzaG93TWFqb3JMYWJlbHMiLCJtYXhNaW5vckNoYXJzIiwiaGlkZGVuRGF0ZXMiLCJ0aW1lQXhpcyIsIm1vbWVudCJdLHRoaXMub3B0aW9ucyx0KSxuLnNlbGVjdGl2ZURlZXBFeHRlbmQoWyJmb3JtYXQiXSx0aGlzLm9wdGlvbnMsdCksIm9yaWVudGF0aW9uImluIHQmJigic3RyaW5nIj09dHlwZW9mIHQub3JpZW50YXRpb24/dGhpcy5vcHRpb25zLm9yaWVudGF0aW9uLmF4aXM9dC5vcmllbnRhdGlvbjoib2JqZWN0Ij09dHlwZW9mIHQub3JpZW50YXRpb24mJiJheGlzImluIHQub3JpZW50YXRpb24mJih0aGlzLm9wdGlvbnMub3JpZW50YXRpb24uYXhpcz10Lm9yaWVudGF0aW9uLmF4aXMpKSwibG9jYWxlImluIHQmJigiZnVuY3Rpb24iPT10eXBlb2YgaC5sb2NhbGU/aC5sb2NhbGUodC5sb2NhbGUpOmgubGFuZyh0LmxvY2FsZSkpKX0sby5wcm90b3R5cGUuX2NyZWF0ZT1mdW5jdGlvbigpe3RoaXMuZG9tLmZvcmVncm91bmQ9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2IiksdGhpcy5kb20uYmFja2dyb3VuZD1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKSx0aGlzLmRvbS5mb3JlZ3JvdW5kLmNsYXNzTmFtZT0idmlzLXRpbWUtYXhpcyB2aXMtZm9yZWdyb3VuZCIsdGhpcy5kb20uYmFja2dyb3VuZC5jbGFzc05hbWU9InZpcy10aW1lLWF4aXMgdmlzLWJhY2tncm91bmQifSxvLnByb3RvdHlwZS5kZXN0cm95PWZ1bmN0aW9uKCl7dGhpcy5kb20uZm9yZWdyb3VuZC5wYXJlbnROb2RlJiZ0aGlzLmRvbS5mb3JlZ3JvdW5kLnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQodGhpcy5kb20uZm9yZWdyb3VuZCksdGhpcy5kb20uYmFja2dyb3VuZC5wYXJlbnROb2RlJiZ0aGlzLmRvbS5iYWNrZ3JvdW5kLnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQodGhpcy5kb20uYmFja2dyb3VuZCksdGhpcy5ib2R5PW51bGx9LG8ucHJvdG90eXBlLnJlZHJhdz1mdW5jdGlvbigpe3ZhciB0PXRoaXMucHJvcHMsZT10aGlzLmRvbS5mb3JlZ3JvdW5kLGk9dGhpcy5kb20uYmFja2dyb3VuZCxvPSJ0b3AiPT10aGlzLm9wdGlvbnMub3JpZW50YXRpb24uYXhpcz90aGlzLmJvZHkuZG9tLnRvcDp0aGlzLmJvZHkuZG9tLmJvdHRvbSxuPWUucGFyZW50Tm9kZSE9PW87dGhpcy5fY2FsY3VsYXRlQ2hhclNpemUoKTt2YXIgcz10aGlzLm9wdGlvbnMuc2hvd01pbm9yTGFiZWxzJiYibm9uZSIhPT10aGlzLm9wdGlvbnMub3JpZW50YXRpb24uYXhpcyxyPXRoaXMub3B0aW9ucy5zaG93TWFqb3JMYWJlbHMmJiJub25lIiE9PXRoaXMub3B0aW9ucy5vcmllbnRhdGlvbi5heGlzO3QubWlub3JMYWJlbEhlaWdodD1zP3QubWlub3JDaGFySGVpZ2h0OjAsdC5tYWpvckxhYmVsSGVpZ2h0PXI/dC5tYWpvckNoYXJIZWlnaHQ6MCx0LmhlaWdodD10Lm1pbm9yTGFiZWxIZWlnaHQrdC5tYWpvckxhYmVsSGVpZ2h0LHQud2lkdGg9ZS5vZmZzZXRXaWR0aCx0Lm1pbm9yTGluZUhlaWdodD10aGlzLmJvZHkuZG9tUHJvcHMucm9vdC5oZWlnaHQtdC5tYWpvckxhYmVsSGVpZ2h0LSgidG9wIj09dGhpcy5vcHRpb25zLm9yaWVudGF0aW9uLmF4aXM/dGhpcy5ib2R5LmRvbVByb3BzLmJvdHRvbS5oZWlnaHQ6dGhpcy5ib2R5LmRvbVByb3BzLnRvcC5oZWlnaHQpLHQubWlub3JMaW5lV2lkdGg9MSx0Lm1ham9yTGluZUhlaWdodD10Lm1pbm9yTGluZUhlaWdodCt0Lm1ham9yTGFiZWxIZWlnaHQsdC5tYWpvckxpbmVXaWR0aD0xO3ZhciBhPWUubmV4dFNpYmxpbmcsaD1pLm5leHRTaWJsaW5nO3JldHVybiBlLnBhcmVudE5vZGUmJmUucGFyZW50Tm9kZS5yZW1vdmVDaGlsZChlKSxpLnBhcmVudE5vZGUmJmkucGFyZW50Tm9kZS5yZW1vdmVDaGlsZChpKSxlLnN0eWxlLmhlaWdodD10aGlzLnByb3BzLmhlaWdodCsicHgiLHRoaXMuX3JlcGFpbnRMYWJlbHMoKSxhP28uaW5zZXJ0QmVmb3JlKGUsYSk6by5hcHBlbmRDaGlsZChlKSxoP3RoaXMuYm9keS5kb20uYmFja2dyb3VuZFZlcnRpY2FsLmluc2VydEJlZm9yZShpLGgpOnRoaXMuYm9keS5kb20uYmFja2dyb3VuZFZlcnRpY2FsLmFwcGVuZENoaWxkKGkpLHRoaXMuX2lzUmVzaXplZCgpfHxufSxvLnByb3RvdHlwZS5fcmVwYWludExhYmVscz1mdW5jdGlvbigpe3ZhciB0PXRoaXMub3B0aW9ucy5vcmllbnRhdGlvbi5heGlzLGU9bi5jb252ZXJ0KHRoaXMuYm9keS5yYW5nZS5zdGFydCwiTnVtYmVyIiksaT1uLmNvbnZlcnQodGhpcy5ib2R5LnJhbmdlLmVuZCwiTnVtYmVyIiksbz10aGlzLmJvZHkudXRpbC50b1RpbWUoKHRoaXMucHJvcHMubWlub3JDaGFyV2lkdGh8fDEwKSp0aGlzLm9wdGlvbnMubWF4TWlub3JDaGFycykudmFsdWVPZigpLHM9by1hLmdldEhpZGRlbkR1cmF0aW9uQmVmb3JlKHRoaXMub3B0aW9ucy5tb21lbnQsdGhpcy5ib2R5LmhpZGRlbkRhdGVzLHRoaXMuYm9keS5yYW5nZSxvKTtzLT10aGlzLmJvZHkudXRpbC50b1RpbWUoMCkudmFsdWVPZigpO3ZhciBoPW5ldyByKG5ldyBEYXRlKGUpLG5ldyBEYXRlKGkpLHMsdGhpcy5ib2R5LmhpZGRlbkRhdGVzKTtoLnNldE1vbWVudCh0aGlzLm9wdGlvbnMubW9tZW50KSx0aGlzLm9wdGlvbnMuZm9ybWF0JiZoLnNldEZvcm1hdCh0aGlzLm9wdGlvbnMuZm9ybWF0KSx0aGlzLm9wdGlvbnMudGltZUF4aXMmJmguc2V0U2NhbGUodGhpcy5vcHRpb25zLnRpbWVBeGlzKSx0aGlzLnN0ZXA9aDt2YXIgbD10aGlzLmRvbTtsLnJlZHVuZGFudC5saW5lcz1sLmxpbmVzLGwucmVkdW5kYW50Lm1ham9yVGV4dHM9bC5tYWpvclRleHRzLGwucmVkdW5kYW50Lm1pbm9yVGV4dHM9bC5taW5vclRleHRzLGwubGluZXM9W10sbC5tYWpvclRleHRzPVtdLGwubWlub3JUZXh0cz1bXTt2YXIgdSxjLHAsZixtLHYsZyx5LGIsdyxfPTAseD12b2lkIDAsaz0wLE89MWUzO2ZvcihoLnN0YXJ0KCksYz1oLmdldEN1cnJlbnQoKSxmPXRoaXMuYm9keS51dGlsLnRvU2NyZWVuKGMpO2guaGFzTmV4dCgpJiZPPms7KXtrKyssbT1oLmlzTWFqb3IoKSx3PWguZ2V0Q2xhc3NOYW1lKCksYj1oLmdldExhYmVsTWlub3IoKSx1PWMscD1mLGgubmV4dCgpLGM9aC5nZXRDdXJyZW50KCksdj1oLmlzTWFqb3IoKSxmPXRoaXMuYm9keS51dGlsLnRvU2NyZWVuKGMpLGc9XyxfPWYtcDt2YXIgTT1fPj0uNCpnO2lmKHRoaXMub3B0aW9ucy5zaG93TWlub3JMYWJlbHMmJk0pe3ZhciBEPXRoaXMuX3JlcGFpbnRNaW5vclRleHQocCxiLHQsdyk7RC5zdHlsZS53aWR0aD1fKyJweCJ9bSYmdGhpcy5vcHRpb25zLnNob3dNYWpvckxhYmVscz8ocD4wJiYodm9pZCAwPT14JiYoeD1wKSxEPXRoaXMuX3JlcGFpbnRNYWpvclRleHQocCxoLmdldExhYmVsTWFqb3IoKSx0LHcpKSx5PXRoaXMuX3JlcGFpbnRNYWpvckxpbmUocCxfLHQsdykpOk0/eT10aGlzLl9yZXBhaW50TWlub3JMaW5lKHAsXyx0LHcpOnkmJih5LnN0eWxlLndpZHRoPXBhcnNlSW50KHkuc3R5bGUud2lkdGgpK18rInB4Iil9aWYoayE9PU98fGR8fChjb25zb2xlLndhcm4oIlNvbWV0aGluZyBpcyB3cm9uZyB3aXRoIHRoZSBUaW1lbGluZSBzY2FsZS4gTGltaXRlZCBkcmF3aW5nIG9mIGdyaWQgbGluZXMgdG8gIitPKyIgbGluZXMuIiksZD0hMCksdGhpcy5vcHRpb25zLnNob3dNYWpvckxhYmVscyl7dmFyIEM9dGhpcy5ib2R5LnV0aWwudG9UaW1lKDApLFQ9aC5nZXRMYWJlbE1ham9yKEMpLEU9VC5sZW5ndGgqKHRoaXMucHJvcHMubWFqb3JDaGFyV2lkdGh8fDEwKSsxMDsodm9pZCAwPT14fHx4PkUpJiZ0aGlzLl9yZXBhaW50TWFqb3JUZXh0KDAsVCx0LHcpfW4uZm9yRWFjaCh0aGlzLmRvbS5yZWR1bmRhbnQsZnVuY3Rpb24odCl7Zm9yKDt0Lmxlbmd0aDspe3ZhciBlPXQucG9wKCk7ZSYmZS5wYXJlbnROb2RlJiZlLnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQoZSl9fSl9LG8ucHJvdG90eXBlLl9yZXBhaW50TWlub3JUZXh0PWZ1bmN0aW9uKHQsZSxpLG8pe3ZhciBuPXRoaXMuZG9tLnJlZHVuZGFudC5taW5vclRleHRzLnNoaWZ0KCk7aWYoIW4pe3ZhciBzPWRvY3VtZW50LmNyZWF0ZVRleHROb2RlKCIiKTtuPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpLG4uYXBwZW5kQ2hpbGQocyksdGhpcy5kb20uZm9yZWdyb3VuZC5hcHBlbmRDaGlsZChuKX1yZXR1cm4gdGhpcy5kb20ubWlub3JUZXh0cy5wdXNoKG4pLG4uY2hpbGROb2Rlc1swXS5ub2RlVmFsdWU9ZSxuLnN0eWxlLnRvcD0idG9wIj09aT90aGlzLnByb3BzLm1ham9yTGFiZWxIZWlnaHQrInB4IjoiMCIsbi5zdHlsZS5sZWZ0PXQrInB4IixuLmNsYXNzTmFtZT0idmlzLXRleHQgdmlzLW1pbm9yICIrbyxufSxvLnByb3RvdHlwZS5fcmVwYWludE1ham9yVGV4dD1mdW5jdGlvbih0LGUsaSxvKXt2YXIgbj10aGlzLmRvbS5yZWR1bmRhbnQubWFqb3JUZXh0cy5zaGlmdCgpO2lmKCFuKXt2YXIgcz1kb2N1bWVudC5jcmVhdGVUZXh0Tm9kZShlKTtuPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpLG4uYXBwZW5kQ2hpbGQocyksdGhpcy5kb20uZm9yZWdyb3VuZC5hcHBlbmRDaGlsZChuKX1yZXR1cm4gdGhpcy5kb20ubWFqb3JUZXh0cy5wdXNoKG4pLG4uY2hpbGROb2Rlc1swXS5ub2RlVmFsdWU9ZSxuLmNsYXNzTmFtZT0idmlzLXRleHQgdmlzLW1ham9yICIrbyxuLnN0eWxlLnRvcD0idG9wIj09aT8iMCI6dGhpcy5wcm9wcy5taW5vckxhYmVsSGVpZ2h0KyJweCIsbi5zdHlsZS5sZWZ0PXQrInB4IixufSxvLnByb3RvdHlwZS5fcmVwYWludE1pbm9yTGluZT1mdW5jdGlvbih0LGUsaSxvKXt2YXIgbj10aGlzLmRvbS5yZWR1bmRhbnQubGluZXMuc2hpZnQoKTtufHwobj1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKSx0aGlzLmRvbS5iYWNrZ3JvdW5kLmFwcGVuZENoaWxkKG4pKSx0aGlzLmRvbS5saW5lcy5wdXNoKG4pO3ZhciBzPXRoaXMucHJvcHM7cmV0dXJuInRvcCI9PWk/bi5zdHlsZS50b3A9cy5tYWpvckxhYmVsSGVpZ2h0KyJweCI6bi5zdHlsZS50b3A9dGhpcy5ib2R5LmRvbVByb3BzLnRvcC5oZWlnaHQrInB4IixuLnN0eWxlLmhlaWdodD1zLm1pbm9yTGluZUhlaWdodCsicHgiLG4uc3R5bGUubGVmdD10LXMubWlub3JMaW5lV2lkdGgvMisicHgiLG4uc3R5bGUud2lkdGg9ZSsicHgiLG4uY2xhc3NOYW1lPSJ2aXMtZ3JpZCB2aXMtdmVydGljYWwgdmlzLW1pbm9yICIrbyxufSxvLnByb3RvdHlwZS5fcmVwYWludE1ham9yTGluZT1mdW5jdGlvbih0LGUsaSxvKXt2YXIgbj10aGlzLmRvbS5yZWR1bmRhbnQubGluZXMuc2hpZnQoKTtufHwobj1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKSx0aGlzLmRvbS5iYWNrZ3JvdW5kLmFwcGVuZENoaWxkKG4pKSx0aGlzLmRvbS5saW5lcy5wdXNoKG4pO3ZhciBzPXRoaXMucHJvcHM7cmV0dXJuInRvcCI9PWk/bi5zdHlsZS50b3A9IjAiOm4uc3R5bGUudG9wPXRoaXMuYm9keS5kb21Qcm9wcy50b3AuaGVpZ2h0KyJweCIsbi5zdHlsZS5sZWZ0PXQtcy5tYWpvckxpbmVXaWR0aC8yKyJweCIsbi5zdHlsZS5oZWlnaHQ9cy5tYWpvckxpbmVIZWlnaHQrInB4IixuLnN0eWxlLndpZHRoPWUrInB4IixuLmNsYXNzTmFtZT0idmlzLWdyaWQgdmlzLXZlcnRpY2FsIHZpcy1tYWpvciAiK28sbn0sby5wcm90b3R5cGUuX2NhbGN1bGF0ZUNoYXJTaXplPWZ1bmN0aW9uKCl7dGhpcy5kb20ubWVhc3VyZUNoYXJNaW5vcnx8KHRoaXMuZG9tLm1lYXN1cmVDaGFyTWlub3I9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiRElWIiksdGhpcy5kb20ubWVhc3VyZUNoYXJNaW5vci5jbGFzc05hbWU9InZpcy10ZXh0IHZpcy1taW5vciB2aXMtbWVhc3VyZSIsdGhpcy5kb20ubWVhc3VyZUNoYXJNaW5vci5zdHlsZS5wb3NpdGlvbj0iYWJzb2x1dGUiLHRoaXMuZG9tLm1lYXN1cmVDaGFyTWlub3IuYXBwZW5kQ2hpbGQoZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUoIjAiKSksdGhpcy5kb20uZm9yZWdyb3VuZC5hcHBlbmRDaGlsZCh0aGlzLmRvbS5tZWFzdXJlQ2hhck1pbm9yKSksdGhpcy5wcm9wcy5taW5vckNoYXJIZWlnaHQ9dGhpcy5kb20ubWVhc3VyZUNoYXJNaW5vci5jbGllbnRIZWlnaHQsdGhpcy5wcm9wcy5taW5vckNoYXJXaWR0aD10aGlzLmRvbS5tZWFzdXJlQ2hhck1pbm9yLmNsaWVudFdpZHRoLHRoaXMuZG9tLm1lYXN1cmVDaGFyTWFqb3J8fCh0aGlzLmRvbS5tZWFzdXJlQ2hhck1ham9yPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoIkRJViIpLHRoaXMuZG9tLm1lYXN1cmVDaGFyTWFqb3IuY2xhc3NOYW1lPSJ2aXMtdGV4dCB2aXMtbWFqb3IgdmlzLW1lYXN1cmUiLHRoaXMuZG9tLm1lYXN1cmVDaGFyTWFqb3Iuc3R5bGUucG9zaXRpb249ImFic29sdXRlIix0aGlzLmRvbS5tZWFzdXJlQ2hhck1ham9yLmFwcGVuZENoaWxkKGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKCIwIikpLHRoaXMuZG9tLmZvcmVncm91bmQuYXBwZW5kQ2hpbGQodGhpcy5kb20ubWVhc3VyZUNoYXJNYWpvcikpLHRoaXMucHJvcHMubWFqb3JDaGFySGVpZ2h0PXRoaXMuZG9tLm1lYXN1cmVDaGFyTWFqb3IuY2xpZW50SGVpZ2h0LHRoaXMucHJvcHMubWFqb3JDaGFyV2lkdGg9dGhpcy5kb20ubWVhc3VyZUNoYXJNYWpvci5jbGllbnRXaWR0aH07dmFyIGQ9ITE7dC5leHBvcnRzPW99LGZ1bmN0aW9uKHQsZSxpKXtmdW5jdGlvbiBvKHQpe3RoaXMuYWN0aXZlPSExLHRoaXMuZG9tPXtjb250YWluZXI6dH0sdGhpcy5kb20ub3ZlcmxheT1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKSx0aGlzLmRvbS5vdmVybGF5LmNsYXNzTmFtZT0idmlzLW92ZXJsYXkiLHRoaXMuZG9tLmNvbnRhaW5lci5hcHBlbmRDaGlsZCh0aGlzLmRvbS5vdmVybGF5KSx0aGlzLmhhbW1lcj1hKHRoaXMuZG9tLm92ZXJsYXkpLHRoaXMuaGFtbWVyLm9uKCJ0YXAiLHRoaXMuX29uVGFwT3ZlcmxheS5iaW5kKHRoaXMpKTt2YXIgZT10aGlzLGk9WyJ0YXAiLCJkb3VibGV0YXAiLCJwcmVzcyIsInBpbmNoIiwicGFuIiwicGFuc3RhcnQiLCJwYW5tb3ZlIiwicGFuZW5kIl07aS5mb3JFYWNoKGZ1bmN0aW9uKHQpe2UuaGFtbWVyLm9uKHQsZnVuY3Rpb24odCl7dC5zdG9wUHJvcGFnYXRpb24oKX0pfSksZG9jdW1lbnQmJmRvY3VtZW50LmJvZHkmJih0aGlzLm9uQ2xpY2s9ZnVuY3Rpb24oaSl7bihpLnRhcmdldCx0KXx8ZS5kZWFjdGl2YXRlKCl9LGRvY3VtZW50LmJvZHkuYWRkRXZlbnRMaXN0ZW5lcigiY2xpY2siLHRoaXMub25DbGljaykpLHZvaWQgMCE9PXRoaXMua2V5Y2hhcm0mJnRoaXMua2V5Y2hhcm0uZGVzdHJveSgpLHRoaXMua2V5Y2hhcm09cygpLHRoaXMuZXNjTGlzdGVuZXI9dGhpcy5kZWFjdGl2YXRlLmJpbmQodGhpcyl9ZnVuY3Rpb24gbih0LGUpe2Zvcig7dDspe2lmKHQ9PT1lKXJldHVybiEwO3Q9dC5wYXJlbnROb2RlfXJldHVybiExfXZhciBzPWkoNDApLHI9aSgxMiksYT1pKDIwKSxoPWkoMSk7cihvLnByb3RvdHlwZSksby5jdXJyZW50PW51bGwsby5wcm90b3R5cGUuZGVzdHJveT1mdW5jdGlvbigpe3RoaXMuZGVhY3RpdmF0ZSgpLHRoaXMuZG9tLm92ZXJsYXkucGFyZW50Tm9kZS5yZW1vdmVDaGlsZCh0aGlzLmRvbS5vdmVybGF5KSx0aGlzLm9uQ2xpY2smJmRvY3VtZW50LmJvZHkucmVtb3ZlRXZlbnRMaXN0ZW5lcigiY2xpY2siLHRoaXMub25DbGljayksdGhpcy5oYW1tZXIuZGVzdHJveSgpLHRoaXMuaGFtbWVyPW51bGx9LG8ucHJvdG90eXBlLmFjdGl2YXRlPWZ1bmN0aW9uKCl7by5jdXJyZW50JiZvLmN1cnJlbnQuZGVhY3RpdmF0ZSgpLG8uY3VycmVudD10aGlzLHRoaXMuYWN0aXZlPSEwLHRoaXMuZG9tLm92ZXJsYXkuc3R5bGUuZGlzcGxheT0ibm9uZSIsaC5hZGRDbGFzc05hbWUodGhpcy5kb20uY29udGFpbmVyLCJ2aXMtYWN0aXZlIiksdGhpcy5lbWl0KCJjaGFuZ2UiKSx0aGlzLmVtaXQoImFjdGl2YXRlIiksdGhpcy5rZXljaGFybS5iaW5kKCJlc2MiLHRoaXMuZXNjTGlzdGVuZXIpfSxvLnByb3RvdHlwZS5kZWFjdGl2YXRlPWZ1bmN0aW9uKCl7dGhpcy5hY3RpdmU9ITEsdGhpcy5kb20ub3ZlcmxheS5zdHlsZS5kaXNwbGF5PSIiLGgucmVtb3ZlQ2xhc3NOYW1lKHRoaXMuZG9tLmNvbnRhaW5lciwidmlzLWFjdGl2ZSIpLHRoaXMua2V5Y2hhcm0udW5iaW5kKCJlc2MiLHRoaXMuZXNjTGlzdGVuZXIpLHRoaXMuZW1pdCgiY2hhbmdlIiksdGhpcy5lbWl0KCJkZWFjdGl2YXRlIil9LG8ucHJvdG90eXBlLl9vblRhcE92ZXJsYXk9ZnVuY3Rpb24odCl7dGhpcy5hY3RpdmF0ZSgpLHQuc3RvcFByb3BhZ2F0aW9uKCl9LHQuZXhwb3J0cz1vfSxmdW5jdGlvbih0LGUsaSl7dmFyIG8sbixzOyFmdW5jdGlvbihpLHIpe249W10sbz1yLHM9ImZ1bmN0aW9uIj09dHlwZW9mIG8/by5hcHBseShlLG4pOm8sISh2b2lkIDAhPT1zJiYodC5leHBvcnRzPXMpKX0odGhpcyxmdW5jdGlvbigpe2Z1bmN0aW9uIHQodCl7dmFyIGUsaT10JiZ0LnByZXZlbnREZWZhdWx0fHwhMSxvPXQmJnQuY29udGFpbmVyfHx3aW5kb3csbj17fSxzPXtrZXlkb3duOnt9LGtleXVwOnt9fSxyPXt9O2ZvcihlPTk3OzEyMj49ZTtlKyspcltTdHJpbmcuZnJvbUNoYXJDb2RlKGUpXT17Y29kZTo2NSsoZS05Nyksc2hpZnQ6ITF9O2ZvcihlPTY1OzkwPj1lO2UrKylyW1N0cmluZy5mcm9tQ2hhckNvZGUoZSldPXtjb2RlOmUsc2hpZnQ6ITB9O2ZvcihlPTA7OT49ZTtlKyspclsiIitlXT17Y29kZTo0OCtlLHNoaWZ0OiExfTtmb3IoZT0xOzEyPj1lO2UrKylyWyJGIitlXT17Y29kZToxMTErZSxzaGlmdDohMX07Zm9yKGU9MDs5Pj1lO2UrKylyWyJudW0iK2VdPXtjb2RlOjk2K2Usc2hpZnQ6ITF9O3JbIm51bSoiXT17Y29kZToxMDYsc2hpZnQ6ITF9LHJbIm51bSsiXT17Y29kZToxMDcsc2hpZnQ6ITF9LHJbIm51bS0iXT17Y29kZToxMDksc2hpZnQ6ITF9LHJbIm51bS8iXT17Y29kZToxMTEsc2hpZnQ6ITF9LHJbIm51bS4iXT17Y29kZToxMTAsc2hpZnQ6ITF9LHIubGVmdD17Y29kZTozNyxzaGlmdDohMX0sci51cD17Y29kZTozOCxzaGlmdDohMX0sci5yaWdodD17Y29kZTozOSxzaGlmdDohMX0sci5kb3duPXtjb2RlOjQwLHNoaWZ0OiExfSxyLnNwYWNlPXtjb2RlOjMyLHNoaWZ0OiExfSxyLmVudGVyPXtjb2RlOjEzLHNoaWZ0OiExfSxyLnNoaWZ0PXtjb2RlOjE2LHNoaWZ0OnZvaWQgMH0sci5lc2M9e2NvZGU6Mjcsc2hpZnQ6ITF9LHIuYmFja3NwYWNlPXtjb2RlOjgsc2hpZnQ6ITF9LHIudGFiPXtjb2RlOjksc2hpZnQ6ITF9LHIuY3RybD17Y29kZToxNyxzaGlmdDohMX0sci5hbHQ9e2NvZGU6MTgsc2hpZnQ6ITF9LHJbImRlbGV0ZSJdPXtjb2RlOjQ2LHNoaWZ0OiExfSxyLnBhZ2V1cD17Y29kZTozMyxzaGlmdDohMX0sci5wYWdlZG93bj17Y29kZTozNCxzaGlmdDohMX0sclsiPSJdPXtjb2RlOjE4NyxzaGlmdDohMX0sclsiLSJdPXtjb2RlOjE4OSxzaGlmdDohMX0sclsiXSJdPXtjb2RlOjIyMSxzaGlmdDohMX0sclsiWyJdPXtjb2RlOjIxOSxzaGlmdDohMX07dmFyIGE9ZnVuY3Rpb24odCl7ZCh0LCJrZXlkb3duIil9LGg9ZnVuY3Rpb24odCl7ZCh0LCJrZXl1cCIpfSxkPWZ1bmN0aW9uKHQsZSl7aWYodm9pZCAwIT09c1tlXVt0LmtleUNvZGVdKXtmb3IodmFyIG89c1tlXVt0LmtleUNvZGVdLG49MDtuPG8ubGVuZ3RoO24rKyl2b2lkIDA9PT1vW25dLnNoaWZ0P29bbl0uZm4odCk6MT09b1tuXS5zaGlmdCYmMT09dC5zaGlmdEtleT9vW25dLmZuKHQpOjA9PW9bbl0uc2hpZnQmJjA9PXQuc2hpZnRLZXkmJm9bbl0uZm4odCk7MT09aSYmdC5wcmV2ZW50RGVmYXVsdCgpfX07cmV0dXJuIG4uYmluZD1mdW5jdGlvbih0LGUsaSl7aWYodm9pZCAwPT09aSYmKGk9ImtleWRvd24iKSx2b2lkIDA9PT1yW3RdKXRocm93IG5ldyBFcnJvcigidW5zdXBwb3J0ZWQga2V5OiAiK3QpO3ZvaWQgMD09PXNbaV1bclt0XS5jb2RlXSYmKHNbaV1bclt0XS5jb2RlXT1bXSksc1tpXVtyW3RdLmNvZGVdLnB1c2goe2ZuOmUsc2hpZnQ6clt0XS5zaGlmdH0pfSxuLmJpbmRBbGw9ZnVuY3Rpb24odCxlKXt2b2lkIDA9PT1lJiYoZT0ia2V5ZG93biIpO2Zvcih2YXIgaSBpbiByKXIuaGFzT3duUHJvcGVydHkoaSkmJm4uYmluZChpLHQsZSl9LG4uZ2V0S2V5PWZ1bmN0aW9uKHQpe2Zvcih2YXIgZSBpbiByKWlmKHIuaGFzT3duUHJvcGVydHkoZSkpe2lmKDE9PXQuc2hpZnRLZXkmJjE9PXJbZV0uc2hpZnQmJnQua2V5Q29kZT09cltlXS5jb2RlKXJldHVybiBlO2lmKDA9PXQuc2hpZnRLZXkmJjA9PXJbZV0uc2hpZnQmJnQua2V5Q29kZT09cltlXS5jb2RlKXJldHVybiBlO2lmKHQua2V5Q29kZT09cltlXS5jb2RlJiYic2hpZnQiPT1lKXJldHVybiBlfXJldHVybiJ1bmtub3duIGtleSwgY3VycmVudGx5IG5vdCBzdXBwb3J0ZWQifSxuLnVuYmluZD1mdW5jdGlvbih0LGUsaSl7aWYodm9pZCAwPT09aSYmKGk9ImtleWRvd24iKSx2b2lkIDA9PT1yW3RdKXRocm93IG5ldyBFcnJvcigidW5zdXBwb3J0ZWQga2V5OiAiK3QpO2lmKHZvaWQgMCE9PWUpe3ZhciBvPVtdLG49c1tpXVtyW3RdLmNvZGVdO2lmKHZvaWQgMCE9PW4pZm9yKHZhciBhPTA7YTxuLmxlbmd0aDthKyspKG5bYV0uZm4hPWV8fG5bYV0uc2hpZnQhPXJbdF0uc2hpZnQpJiZvLnB1c2goc1tpXVtyW3RdLmNvZGVdW2FdKTtzW2ldW3JbdF0uY29kZV09b31lbHNlIHNbaV1bclt0XS5jb2RlXT1bXX0sbi5yZXNldD1mdW5jdGlvbigpe3M9e2tleWRvd246e30sa2V5dXA6e319fSxuLmRlc3Ryb3k9ZnVuY3Rpb24oKXtzPXtrZXlkb3duOnt9LGtleXVwOnt9fSxvLnJlbW92ZUV2ZW50TGlzdGVuZXIoImtleWRvd24iLGEsITApLG8ucmVtb3ZlRXZlbnRMaXN0ZW5lcigia2V5dXAiLGgsITApfSxvLmFkZEV2ZW50TGlzdGVuZXIoImtleWRvd24iLGEsITApLG8uYWRkRXZlbnRMaXN0ZW5lcigia2V5dXAiLGgsITApLG59cmV0dXJuIHR9KX0sZnVuY3Rpb24odCxlLGkpe2Z1bmN0aW9uIG8odCxlKXt0aGlzLmJvZHk9dCx0aGlzLmRlZmF1bHRPcHRpb25zPXttb21lbnQ6YSxsb2NhbGVzOmgsbG9jYWxlOiJlbiIsaWQ6dm9pZCAwLHRpdGxlOnZvaWQgMH0sdGhpcy5vcHRpb25zPXMuZXh0ZW5kKHt9LHRoaXMuZGVmYXVsdE9wdGlvbnMpLGUmJmUudGltZT90aGlzLmN1c3RvbVRpbWU9ZS50aW1lOnRoaXMuY3VzdG9tVGltZT1uZXcgRGF0ZSx0aGlzLmV2ZW50UGFyYW1zPXt9LHRoaXMuc2V0T3B0aW9ucyhlKSx0aGlzLl9jcmVhdGUoKX12YXIgbj1pKDIwKSxzPWkoMSkscj1pKDI1KSxhPWkoMiksaD1pKDQyKTtvLnByb3RvdHlwZT1uZXcgcixvLnByb3RvdHlwZS5zZXRPcHRpb25zPWZ1bmN0aW9uKHQpe3QmJnMuc2VsZWN0aXZlRXh0ZW5kKFsibW9tZW50IiwibG9jYWxlIiwibG9jYWxlcyIsImlkIl0sdGhpcy5vcHRpb25zLHQpfSxvLnByb3RvdHlwZS5fY3JlYXRlPWZ1bmN0aW9uKCl7dmFyIHQ9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2Iik7dFsiY3VzdG9tLXRpbWUiXT10aGlzLHQuY2xhc3NOYW1lPSJ2aXMtY3VzdG9tLXRpbWUgIisodGhpcy5vcHRpb25zLmlkfHwiIiksdC5zdHlsZS5wb3NpdGlvbj0iYWJzb2x1dGUiLHQuc3R5bGUudG9wPSIwcHgiLHQuc3R5bGUuaGVpZ2h0PSIxMDAlIix0aGlzLmJhcj10O3ZhciBlPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpO2Uuc3R5bGUucG9zaXRpb249InJlbGF0aXZlIixlLnN0eWxlLnRvcD0iMHB4IixlLnN0eWxlLmxlZnQ9Ii0xMHB4IixlLnN0eWxlLmhlaWdodD0iMTAwJSIsZS5zdHlsZS53aWR0aD0iMjBweCIsdC5hcHBlbmRDaGlsZChlKSx0aGlzLmhhbW1lcj1uZXcgbihlKSx0aGlzLmhhbW1lci5vbigicGFuc3RhcnQiLHRoaXMuX29uRHJhZ1N0YXJ0LmJpbmQodGhpcykpLHRoaXMuaGFtbWVyLm9uKCJwYW5tb3ZlIix0aGlzLl9vbkRyYWcuYmluZCh0aGlzKSksdGhpcy5oYW1tZXIub24oInBhbmVuZCIsdGhpcy5fb25EcmFnRW5kLmJpbmQodGhpcykpLHRoaXMuaGFtbWVyLmdldCgicGFuIikuc2V0KHt0aHJlc2hvbGQ6NSxkaXJlY3Rpb246MzB9KX0sby5wcm90b3R5cGUuZGVzdHJveT1mdW5jdGlvbigpe3RoaXMuaGlkZSgpLHRoaXMuaGFtbWVyLmRlc3Ryb3koKSx0aGlzLmhhbW1lcj1udWxsLHRoaXMuYm9keT1udWxsfSxvLnByb3RvdHlwZS5yZWRyYXc9ZnVuY3Rpb24oKXt2YXIgdD10aGlzLmJvZHkuZG9tLmJhY2tncm91bmRWZXJ0aWNhbDt0aGlzLmJhci5wYXJlbnROb2RlIT10JiYodGhpcy5iYXIucGFyZW50Tm9kZSYmdGhpcy5iYXIucGFyZW50Tm9kZS5yZW1vdmVDaGlsZCh0aGlzLmJhciksdC5hcHBlbmRDaGlsZCh0aGlzLmJhcikpO3ZhciBlPXRoaXMuYm9keS51dGlsLnRvU2NyZWVuKHRoaXMuY3VzdG9tVGltZSksaT10aGlzLm9wdGlvbnMubG9jYWxlc1t0aGlzLm9wdGlvbnMubG9jYWxlXTtpfHwodGhpcy53YXJuZWR8fChjb25zb2xlLmxvZygiV0FSTklORzogb3B0aW9ucy5sb2NhbGVzWyciK3RoaXMub3B0aW9ucy5sb2NhbGUrIiddIG5vdCBmb3VuZC4gU2VlIGh0dHA6Ly92aXNqcy5vcmcvZG9jcy90aW1lbGluZS5odG1sI0xvY2FsaXphdGlvbiIpLHRoaXMud2FybmVkPSEwKSxpPXRoaXMub3B0aW9ucy5sb2NhbGVzLmVuKTt2YXIgbz10aGlzLm9wdGlvbnMudGl0bGU7cmV0dXJuIHZvaWQgMD09PW8mJihvPWkudGltZSsiOiAiK3RoaXMub3B0aW9ucy5tb21lbnQodGhpcy5jdXN0b21UaW1lKS5mb3JtYXQoImRkZGQsIE1NTU0gRG8gWVlZWSwgSDptbTpzcyIpLG89by5jaGFyQXQoMCkudG9VcHBlckNhc2UoKStvLnN1YnN0cmluZygxKSksdGhpcy5iYXIuc3R5bGUubGVmdD1lKyJweCIsdGhpcy5iYXIudGl0bGU9bywhMX0sby5wcm90b3R5cGUuaGlkZT1mdW5jdGlvbigpe3RoaXMuYmFyLnBhcmVudE5vZGUmJnRoaXMuYmFyLnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQodGhpcy5iYXIpfSxvLnByb3RvdHlwZS5zZXRDdXN0b21UaW1lPWZ1bmN0aW9uKHQpe3RoaXMuY3VzdG9tVGltZT1zLmNvbnZlcnQodCwiRGF0ZSIpLHRoaXMucmVkcmF3KCl9LG8ucHJvdG90eXBlLmdldEN1c3RvbVRpbWU9ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IERhdGUodGhpcy5jdXN0b21UaW1lLnZhbHVlT2YoKSl9LG8ucHJvdG90eXBlLnNldEN1c3RvbVRpdGxlPWZ1bmN0aW9uKHQpe3RoaXMub3B0aW9ucy50aXRsZT10fSxvLnByb3RvdHlwZS5fb25EcmFnU3RhcnQ9ZnVuY3Rpb24odCl7dGhpcy5ldmVudFBhcmFtcy5kcmFnZ2luZz0hMCx0aGlzLmV2ZW50UGFyYW1zLmN1c3RvbVRpbWU9dGhpcy5jdXN0b21UaW1lLHQuc3RvcFByb3BhZ2F0aW9uKCl9LG8ucHJvdG90eXBlLl9vbkRyYWc9ZnVuY3Rpb24odCl7aWYodGhpcy5ldmVudFBhcmFtcy5kcmFnZ2luZyl7dmFyIGU9dGhpcy5ib2R5LnV0aWwudG9TY3JlZW4odGhpcy5ldmVudFBhcmFtcy5jdXN0b21UaW1lKSt0LmRlbHRhWCxpPXRoaXMuYm9keS51dGlsLnRvVGltZShlKTt0aGlzLnNldEN1c3RvbVRpbWUoaSksdGhpcy5ib2R5LmVtaXR0ZXIuZW1pdCgidGltZWNoYW5nZSIse2lkOnRoaXMub3B0aW9ucy5pZCx0aW1lOm5ldyBEYXRlKHRoaXMuY3VzdG9tVGltZS52YWx1ZU9mKCkpfSksdC5zdG9wUHJvcGFnYXRpb24oKX19LG8ucHJvdG90eXBlLl9vbkRyYWdFbmQ9ZnVuY3Rpb24odCl7dGhpcy5ldmVudFBhcmFtcy5kcmFnZ2luZyYmKHRoaXMuYm9keS5lbWl0dGVyLmVtaXQoInRpbWVjaGFuZ2VkIix7aWQ6dGhpcy5vcHRpb25zLmlkLHRpbWU6bmV3IERhdGUodGhpcy5jdXN0b21UaW1lLnZhbHVlT2YoKSl9KSx0LnN0b3BQcm9wYWdhdGlvbigpKX0sby5jdXN0b21UaW1lRnJvbVRhcmdldD1mdW5jdGlvbih0KXtmb3IodmFyIGU9dC50YXJnZXQ7ZTspe2lmKGUuaGFzT3duUHJvcGVydHkoImN1c3RvbS10aW1lIikpcmV0dXJuIGVbImN1c3RvbS10aW1lIl07ZT1lLnBhcmVudE5vZGV9cmV0dXJuIG51bGx9LHQuZXhwb3J0cz1vfSxmdW5jdGlvbih0LGUpe2UuZW49e2N1cnJlbnQ6ImN1cnJlbnQiLHRpbWU6InRpbWUifSxlLmVuX0VOPWUuZW4sZS5lbl9VUz1lLmVuLGUubmw9e2N1cnJlbnQ6Imh1aWRpZ2UiLHRpbWU6InRpamQifSxlLm5sX05MPWUubmwsZS5ubF9CRT1lLm5sfSxmdW5jdGlvbih0LGUsaSl7ZnVuY3Rpb24gbyh0LGUpe3RoaXMuYm9keT10LHRoaXMuZGVmYXVsdE9wdGlvbnM9e3Nob3dDdXJyZW50VGltZTohMCxtb21lbnQ6cixsb2NhbGVzOmEsbG9jYWxlOiJlbiJ9LHRoaXMub3B0aW9ucz1uLmV4dGVuZCh7fSx0aGlzLmRlZmF1bHRPcHRpb25zKSx0aGlzLm9mZnNldD0wLHRoaXMuX2NyZWF0ZSgpLHRoaXMuc2V0T3B0aW9ucyhlKX12YXIgbj1pKDEpLHM9aSgyNSkscj1pKDIpLGE9aSg0Mik7by5wcm90b3R5cGU9bmV3IHMsby5wcm90b3R5cGUuX2NyZWF0ZT1mdW5jdGlvbigpe3ZhciB0PWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpO3QuY2xhc3NOYW1lPSJ2aXMtY3VycmVudC10aW1lIix0LnN0eWxlLnBvc2l0aW9uPSJhYnNvbHV0ZSIsdC5zdHlsZS50b3A9IjBweCIsdC5zdHlsZS5oZWlnaHQ9IjEwMCUiLHRoaXMuYmFyPXR9LG8ucHJvdG90eXBlLmRlc3Ryb3k9ZnVuY3Rpb24oKXt0aGlzLm9wdGlvbnMuc2hvd0N1cnJlbnRUaW1lPSExLHRoaXMucmVkcmF3KCksdGhpcy5ib2R5PW51bGx9LG8ucHJvdG90eXBlLnNldE9wdGlvbnM9ZnVuY3Rpb24odCl7dCYmbi5zZWxlY3RpdmVFeHRlbmQoWyJzaG93Q3VycmVudFRpbWUiLCJtb21lbnQiLCJsb2NhbGUiLCJsb2NhbGVzIl0sdGhpcy5vcHRpb25zLHQpfSxvLnByb3RvdHlwZS5yZWRyYXc9ZnVuY3Rpb24oKXtpZih0aGlzLm9wdGlvbnMuc2hvd0N1cnJlbnRUaW1lKXt2YXIgdD10aGlzLmJvZHkuZG9tLmJhY2tncm91bmRWZXJ0aWNhbDt0aGlzLmJhci5wYXJlbnROb2RlIT10JiYodGhpcy5iYXIucGFyZW50Tm9kZSYmdGhpcy5iYXIucGFyZW50Tm9kZS5yZW1vdmVDaGlsZCh0aGlzLmJhciksdC5hcHBlbmRDaGlsZCh0aGlzLmJhciksdGhpcy5zdGFydCgpKTt2YXIgZT10aGlzLm9wdGlvbnMubW9tZW50KChuZXcgRGF0ZSkudmFsdWVPZigpK3RoaXMub2Zmc2V0KSxpPXRoaXMuYm9keS51dGlsLnRvU2NyZWVuKGUpLG89dGhpcy5vcHRpb25zLmxvY2FsZXNbdGhpcy5vcHRpb25zLmxvY2FsZV07b3x8KHRoaXMud2FybmVkfHwoY29uc29sZS5sb2coIldBUk5JTkc6IG9wdGlvbnMubG9jYWxlc1snIit0aGlzLm9wdGlvbnMubG9jYWxlKyInXSBub3QgZm91bmQuIFNlZSBodHRwOi8vdmlzanMub3JnL2RvY3MvdGltZWxpbmUvI0xvY2FsaXphdGlvbiIpLHRoaXMud2FybmVkPSEwKSxvPXRoaXMub3B0aW9ucy5sb2NhbGVzLmVuKTt2YXIgbj1vLmN1cnJlbnQrIiAiK28udGltZSsiOiAiK2UuZm9ybWF0KCJkZGRkLCBNTU1NIERvIFlZWVksIEg6bW06c3MiKTtuPW4uY2hhckF0KDApLnRvVXBwZXJDYXNlKCkrbi5zdWJzdHJpbmcoMSksdGhpcy5iYXIuc3R5bGUubGVmdD1pKyJweCIsdGhpcy5iYXIudGl0bGU9bn1lbHNlIHRoaXMuYmFyLnBhcmVudE5vZGUmJnRoaXMuYmFyLnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQodGhpcy5iYXIpLHRoaXMuc3RvcCgpO3JldHVybiExfSxvLnByb3RvdHlwZS5zdGFydD1mdW5jdGlvbigpe2Z1bmN0aW9uIHQoKXtlLnN0b3AoKTt2YXIgaT1lLmJvZHkucmFuZ2UuY29udmVyc2lvbihlLmJvZHkuZG9tUHJvcHMuY2VudGVyLndpZHRoKS5zY2FsZSxvPTEvaS8xMDszMD5vJiYobz0zMCksbz4xZTMmJihvPTFlMyksZS5yZWRyYXcoKSxlLmN1cnJlbnRUaW1lVGltZXI9c2V0VGltZW91dCh0LG8pfXZhciBlPXRoaXM7dCgpfSxvLnByb3RvdHlwZS5zdG9wPWZ1bmN0aW9uKCl7dm9pZCAwIT09dGhpcy5jdXJyZW50VGltZVRpbWVyJiYoY2xlYXJUaW1lb3V0KHRoaXMuY3VycmVudFRpbWVUaW1lciksZGVsZXRlIHRoaXMuY3VycmVudFRpbWVUaW1lcil9LG8ucHJvdG90eXBlLnNldEN1cnJlbnRUaW1lPWZ1bmN0aW9uKHQpe3ZhciBlPW4uY29udmVydCh0LCJEYXRlIikudmFsdWVPZigpLGk9KG5ldyBEYXRlKS52YWx1ZU9mKCk7dGhpcy5vZmZzZXQ9ZS1pLHRoaXMucmVkcmF3KCl9LG8ucHJvdG90eXBlLmdldEN1cnJlbnRUaW1lPWZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBEYXRlKChuZXcgRGF0ZSkudmFsdWVPZigpK3RoaXMub2Zmc2V0KX0sdC5leHBvcnRzPW99LGZ1bmN0aW9uKHQsZSxpKXtmdW5jdGlvbiBvKHQpe3JldHVybiB0JiZ0Ll9fZXNNb2R1bGU/dDp7ImRlZmF1bHQiOnR9fWZ1bmN0aW9uIG4odCxlKXtpZighKHQgaW5zdGFuY2VvZiBlKSl0aHJvdyBuZXcgVHlwZUVycm9yKCJDYW5ub3QgY2FsbCBhIGNsYXNzIGFzIGEgZnVuY3Rpb24iKX1PYmplY3QuZGVmaW5lUHJvcGVydHkoZSwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7dmFyIHM9ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KHQsZSl7Zm9yKHZhciBpPTA7aTxlLmxlbmd0aDtpKyspe3ZhciBvPWVbaV07by5lbnVtZXJhYmxlPW8uZW51bWVyYWJsZXx8ITEsby5jb25maWd1cmFibGU9ITAsInZhbHVlImluIG8mJihvLndyaXRhYmxlPSEwKSxPYmplY3QuZGVmaW5lUHJvcGVydHkodCxvLmtleSxvKX19cmV0dXJuIGZ1bmN0aW9uKGUsaSxvKXtyZXR1cm4gaSYmdChlLnByb3RvdHlwZSxpKSxvJiZ0KGUsbyksZX19KCkscj1pKDQ1KSxhPW8ociksaD1pKDEpLGQ9ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KGUsaSxvKXt2YXIgcz1hcmd1bWVudHMubGVuZ3RoPD0zfHx2b2lkIDA9PT1hcmd1bWVudHNbM10/MTphcmd1bWVudHNbM107bih0aGlzLHQpLHRoaXMucGFyZW50PWUsdGhpcy5jaGFuZ2VkT3B0aW9ucz1bXSx0aGlzLmNvbnRhaW5lcj1pLHRoaXMuYWxsb3dDcmVhdGlvbj0hMSx0aGlzLm9wdGlvbnM9e30sdGhpcy5pbml0aWFsaXplZD0hMSx0aGlzLnBvcHVwQ291bnRlcj0wLHRoaXMuZGVmYXVsdE9wdGlvbnM9e2VuYWJsZWQ6ITEsZmlsdGVyOiEwLGNvbnRhaW5lcjp2b2lkIDAsc2hvd0J1dHRvbjohMH0saC5leHRlbmQodGhpcy5vcHRpb25zLHRoaXMuZGVmYXVsdE9wdGlvbnMpLHRoaXMuY29uZmlndXJlT3B0aW9ucz1vLHRoaXMubW9kdWxlT3B0aW9ucz17fSx0aGlzLmRvbUVsZW1lbnRzPVtdLHRoaXMucG9wdXBEaXY9e30sdGhpcy5wb3B1cExpbWl0PTUsdGhpcy5wb3B1cEhpc3Rvcnk9e30sdGhpcy5jb2xvclBpY2tlcj1uZXcgYVsiZGVmYXVsdCJdKHMpLHRoaXMud3JhcHBlcj12b2lkIDB9cmV0dXJuIHModCxbe2tleToic2V0T3B0aW9ucyIsdmFsdWU6ZnVuY3Rpb24odCl7aWYodm9pZCAwIT09dCl7dGhpcy5wb3B1cEhpc3Rvcnk9e30sdGhpcy5fcmVtb3ZlUG9wdXAoKTt2YXIgZT0hMDsic3RyaW5nIj09dHlwZW9mIHQ/dGhpcy5vcHRpb25zLmZpbHRlcj10OnQgaW5zdGFuY2VvZiBBcnJheT90aGlzLm9wdGlvbnMuZmlsdGVyPXQuam9pbigpOiJvYmplY3QiPT10eXBlb2YgdD8odm9pZCAwIT09dC5jb250YWluZXImJih0aGlzLm9wdGlvbnMuY29udGFpbmVyPXQuY29udGFpbmVyKSx2b2lkIDAhPT10LmZpbHRlciYmKHRoaXMub3B0aW9ucy5maWx0ZXI9dC5maWx0ZXIpLHZvaWQgMCE9PXQuc2hvd0J1dHRvbiYmKHRoaXMub3B0aW9ucy5zaG93QnV0dG9uPXQuc2hvd0J1dHRvbiksdm9pZCAwIT09dC5lbmFibGVkJiYoZT10LmVuYWJsZWQpKToiYm9vbGVhbiI9PXR5cGVvZiB0Pyh0aGlzLm9wdGlvbnMuZmlsdGVyPSEwLGU9dCk6ImZ1bmN0aW9uIj09dHlwZW9mIHQmJih0aGlzLm9wdGlvbnMuZmlsdGVyPXQsZT0hMCksdGhpcy5vcHRpb25zLmZpbHRlcj09PSExJiYoZT0hMSksdGhpcy5vcHRpb25zLmVuYWJsZWQ9ZX10aGlzLl9jbGVhbigpfX0se2tleToic2V0TW9kdWxlT3B0aW9ucyIsdmFsdWU6ZnVuY3Rpb24odCl7dGhpcy5tb2R1bGVPcHRpb25zPXQsdGhpcy5vcHRpb25zLmVuYWJsZWQ9PT0hMCYmKHRoaXMuX2NsZWFuKCksdm9pZCAwIT09dGhpcy5vcHRpb25zLmNvbnRhaW5lciYmKHRoaXMuY29udGFpbmVyPXRoaXMub3B0aW9ucy5jb250YWluZXIpLHRoaXMuX2NyZWF0ZSgpKX19LHtrZXk6Il9jcmVhdGUiLHZhbHVlOmZ1bmN0aW9uKCl7dmFyIHQ9dGhpczt0aGlzLl9jbGVhbigpLHRoaXMuY2hhbmdlZE9wdGlvbnM9W107dmFyIGU9dGhpcy5vcHRpb25zLmZpbHRlcixpPTAsbz0hMTtmb3IodmFyIG4gaW4gdGhpcy5jb25maWd1cmVPcHRpb25zKXRoaXMuY29uZmlndXJlT3B0aW9ucy5oYXNPd25Qcm9wZXJ0eShuKSYmKHRoaXMuYWxsb3dDcmVhdGlvbj0hMSxvPSExLCJmdW5jdGlvbiI9PXR5cGVvZiBlPyhvPWUobixbXSksbz1vfHx0aGlzLl9oYW5kbGVPYmplY3QodGhpcy5jb25maWd1cmVPcHRpb25zW25dLFtuXSwhMCkpOihlPT09ITB8fC0xIT09ZS5pbmRleE9mKG4pKSYmKG89ITApLG8hPT0hMSYmKHRoaXMuYWxsb3dDcmVhdGlvbj0hMCxpPjAmJnRoaXMuX21ha2VJdGVtKFtdKSx0aGlzLl9tYWtlSGVhZGVyKG4pLHRoaXMuX2hhbmRsZU9iamVjdCh0aGlzLmNvbmZpZ3VyZU9wdGlvbnNbbl0sW25dKSksaSsrKTt0aGlzLm9wdGlvbnMuc2hvd0J1dHRvbj09PSEwJiYhZnVuY3Rpb24oKXt2YXIgZT1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKTtlLmNsYXNzTmFtZT0idmlzLWNvbmZpZ3VyYXRpb24gdmlzLWNvbmZpZy1idXR0b24iLGUuaW5uZXJIVE1MPSJnZW5lcmF0ZSBvcHRpb25zIixlLm9uY2xpY2s9ZnVuY3Rpb24oKXt0Ll9wcmludE9wdGlvbnMoKX0sZS5vbm1vdXNlb3Zlcj1mdW5jdGlvbigpe2UuY2xhc3NOYW1lPSJ2aXMtY29uZmlndXJhdGlvbiB2aXMtY29uZmlnLWJ1dHRvbiBob3ZlciJ9LGUub25tb3VzZW91dD1mdW5jdGlvbigpe2UuY2xhc3NOYW1lPSJ2aXMtY29uZmlndXJhdGlvbiB2aXMtY29uZmlnLWJ1dHRvbiJ9LHQub3B0aW9uc0NvbnRhaW5lcj1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKSx0Lm9wdGlvbnNDb250YWluZXIuY2xhc3NOYW1lPSJ2aXMtY29uZmlndXJhdGlvbiB2aXMtY29uZmlnLW9wdGlvbi1jb250YWluZXIiLHQuZG9tRWxlbWVudHMucHVzaCh0Lm9wdGlvbnNDb250YWluZXIpLHQuZG9tRWxlbWVudHMucHVzaChlKX0oKSx0aGlzLl9wdXNoKCl9fSx7a2V5OiJfcHVzaCIsdmFsdWU6ZnVuY3Rpb24oKXt0aGlzLndyYXBwZXI9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2IiksdGhpcy53cmFwcGVyLmNsYXNzTmFtZT0idmlzLWNvbmZpZ3VyYXRpb24td3JhcHBlciIsdGhpcy5jb250YWluZXIuYXBwZW5kQ2hpbGQodGhpcy53cmFwcGVyKTtmb3IodmFyIHQ9MDt0PHRoaXMuZG9tRWxlbWVudHMubGVuZ3RoO3QrKyl0aGlzLndyYXBwZXIuYXBwZW5kQ2hpbGQodGhpcy5kb21FbGVtZW50c1t0XSk7dGhpcy5fc2hvd1BvcHVwSWZOZWVkZWQoKX19LHtrZXk6Il9jbGVhbiIsdmFsdWU6ZnVuY3Rpb24oKXtmb3IodmFyIHQ9MDt0PHRoaXMuZG9tRWxlbWVudHMubGVuZ3RoO3QrKyl0aGlzLndyYXBwZXIucmVtb3ZlQ2hpbGQodGhpcy5kb21FbGVtZW50c1t0XSk7dm9pZCAwIT09dGhpcy53cmFwcGVyJiYodGhpcy5jb250YWluZXIucmVtb3ZlQ2hpbGQodGhpcy53cmFwcGVyKSx0aGlzLndyYXBwZXI9dm9pZCAwKSx0aGlzLmRvbUVsZW1lbnRzPVtdLHRoaXMuX3JlbW92ZVBvcHVwKCl9fSx7a2V5OiJfZ2V0VmFsdWUiLHZhbHVlOmZ1bmN0aW9uKHQpe2Zvcih2YXIgZT10aGlzLm1vZHVsZU9wdGlvbnMsaT0wO2k8dC5sZW5ndGg7aSsrKXtpZih2b2lkIDA9PT1lW3RbaV1dKXtlPXZvaWQgMDticmVha31lPWVbdFtpXV19cmV0dXJuIGV9fSx7a2V5OiJfbWFrZUl0ZW0iLHZhbHVlOmZ1bmN0aW9uKHQpe3ZhciBlPWFyZ3VtZW50cyxpPXRoaXM7aWYodGhpcy5hbGxvd0NyZWF0aW9uPT09ITApe3ZhciBvLG4scyxyPWZ1bmN0aW9uKCl7dmFyIHI9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2Iik7Zm9yKHIuY2xhc3NOYW1lPSJ2aXMtY29uZmlndXJhdGlvbiB2aXMtY29uZmlnLWl0ZW0gdmlzLWNvbmZpZy1zIit0Lmxlbmd0aCxvPWUubGVuZ3RoLG49QXJyYXkobz4xP28tMTowKSxzPTE7bz5zO3MrKyluW3MtMV09ZVtzXTtyZXR1cm4gbi5mb3JFYWNoKGZ1bmN0aW9uKHQpe3IuYXBwZW5kQ2hpbGQodCl9KSxpLmRvbUVsZW1lbnRzLnB1c2gocikse3Y6aS5kb21FbGVtZW50cy5sZW5ndGh9fSgpO2lmKCJvYmplY3QiPT10eXBlb2YgcilyZXR1cm4gci52fXJldHVybiAwfX0se2tleToiX21ha2VIZWFkZXIiLHZhbHVlOmZ1bmN0aW9uKHQpe3ZhciBlPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpO2UuY2xhc3NOYW1lPSJ2aXMtY29uZmlndXJhdGlvbiB2aXMtY29uZmlnLWhlYWRlciIsZS5pbm5lckhUTUw9dCx0aGlzLl9tYWtlSXRlbShbXSxlKX19LHtrZXk6Il9tYWtlTGFiZWwiLHZhbHVlOmZ1bmN0aW9uKHQsZSl7dmFyIGk9YXJndW1lbnRzLmxlbmd0aDw9Mnx8dm9pZCAwPT09YXJndW1lbnRzWzJdPyExOmFyZ3VtZW50c1syXSxvPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpO3JldHVybiBvLmNsYXNzTmFtZT0idmlzLWNvbmZpZ3VyYXRpb24gdmlzLWNvbmZpZy1sYWJlbCB2aXMtY29uZmlnLXMiK2UubGVuZ3RoLGk9PT0hMD9vLmlubmVySFRNTD0iPGk+PGI+Iit0KyI6PC9iPjwvaT4iOm8uaW5uZXJIVE1MPXQrIjoiLG99fSx7a2V5OiJfbWFrZURyb3Bkb3duIix2YWx1ZTpmdW5jdGlvbih0LGUsaSl7dmFyIG89ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgic2VsZWN0Iik7by5jbGFzc05hbWU9InZpcy1jb25maWd1cmF0aW9uIHZpcy1jb25maWctc2VsZWN0Ijt2YXIgbj0wO3ZvaWQgMCE9PWUmJi0xIT09dC5pbmRleE9mKGUpJiYobj10LmluZGV4T2YoZSkpO2Zvcih2YXIgcz0wO3M8dC5sZW5ndGg7cysrKXt2YXIgcj1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJvcHRpb24iKTtyLnZhbHVlPXRbc10scz09PW4mJihyLnNlbGVjdGVkPSJzZWxlY3RlZCIpLHIuaW5uZXJIVE1MPXRbc10sby5hcHBlbmRDaGlsZChyKX12YXIgYT10aGlzO28ub25jaGFuZ2U9ZnVuY3Rpb24oKXthLl91cGRhdGUodGhpcy52YWx1ZSxpKX07dmFyIGg9dGhpcy5fbWFrZUxhYmVsKGlbaS5sZW5ndGgtMV0saSk7dGhpcy5fbWFrZUl0ZW0oaSxoLG8pfX0se2tleToiX21ha2VSYW5nZSIsdmFsdWU6ZnVuY3Rpb24odCxlLGkpe3ZhciBvPXRbMF0sbj10WzFdLHM9dFsyXSxyPXRbM10sYT1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJpbnB1dCIpO2EuY2xhc3NOYW1lPSJ2aXMtY29uZmlndXJhdGlvbiB2aXMtY29uZmlnLXJhbmdlIjt0cnl7YS50eXBlPSJyYW5nZSIsYS5taW49bixhLm1heD1zfWNhdGNoKGgpe31hLnN0ZXA9cjt2YXIgZD0iIixsPTA7aWYodm9pZCAwIT09ZSl7dmFyIHU9MS4yOzA+ZSYmbj5lKnU/KGEubWluPU1hdGguY2VpbChlKnUpLGw9YS5taW4sZD0icmFuZ2UgaW5jcmVhc2VkIik6bj5lL3UmJihhLm1pbj1NYXRoLmNlaWwoZS91KSxsPWEubWluLGQ9InJhbmdlIGluY3JlYXNlZCIpLGUqdT5zJiYxIT09cyYmKGEubWF4PU1hdGguY2VpbChlKnUpLGw9YS5tYXgsZD0icmFuZ2UgaW5jcmVhc2VkIiksYS52YWx1ZT1lfWVsc2UgYS52YWx1ZT1vO3ZhciBjPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImlucHV0Iik7Yy5jbGFzc05hbWU9InZpcy1jb25maWd1cmF0aW9uIHZpcy1jb25maWctcmFuZ2VpbnB1dCIsYy52YWx1ZT1hLnZhbHVlO3ZhciBwPXRoaXM7YS5vbmNoYW5nZT1mdW5jdGlvbigpe2MudmFsdWU9dGhpcy52YWx1ZSxwLl91cGRhdGUoTnVtYmVyKHRoaXMudmFsdWUpLGkpfSxhLm9uaW5wdXQ9ZnVuY3Rpb24oKXtjLnZhbHVlPXRoaXMudmFsdWV9O3ZhciBmPXRoaXMuX21ha2VMYWJlbChpW2kubGVuZ3RoLTFdLGkpLG09dGhpcy5fbWFrZUl0ZW0oaSxmLGEsYyk7IiIhPT1kJiZ0aGlzLnBvcHVwSGlzdG9yeVttXSE9PWwmJih0aGlzLnBvcHVwSGlzdG9yeVttXT1sLHRoaXMuX3NldHVwUG9wdXAoZCxtKSl9fSx7a2V5OiJfc2V0dXBQb3B1cCIsdmFsdWU6ZnVuY3Rpb24odCxlKXt2YXIgaT10aGlzO2lmKHRoaXMuaW5pdGlhbGl6ZWQ9PT0hMCYmdGhpcy5hbGxvd0NyZWF0aW9uPT09ITAmJnRoaXMucG9wdXBDb3VudGVyPHRoaXMucG9wdXBMaW1pdCl7dmFyIG89ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2Iik7by5pZD0idmlzLWNvbmZpZ3VyYXRpb24tcG9wdXAiLG8uY2xhc3NOYW1lPSJ2aXMtY29uZmlndXJhdGlvbi1wb3B1cCIsby5pbm5lckhUTUw9dCxvLm9uY2xpY2s9ZnVuY3Rpb24oKXtpLl9yZW1vdmVQb3B1cCgpfSx0aGlzLnBvcHVwQ291bnRlcis9MSx0aGlzLnBvcHVwRGl2PXtodG1sOm8saW5kZXg6ZX19fX0se2tleToiX3JlbW92ZVBvcHVwIix2YWx1ZTpmdW5jdGlvbigpe3ZvaWQgMCE9PXRoaXMucG9wdXBEaXYuaHRtbCYmKHRoaXMucG9wdXBEaXYuaHRtbC5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKHRoaXMucG9wdXBEaXYuaHRtbCksY2xlYXJUaW1lb3V0KHRoaXMucG9wdXBEaXYuaGlkZVRpbWVvdXQpLGNsZWFyVGltZW91dCh0aGlzLnBvcHVwRGl2LmRlbGV0ZVRpbWVvdXQpLHRoaXMucG9wdXBEaXY9e30pfX0se2tleToiX3Nob3dQb3B1cElmTmVlZGVkIix2YWx1ZTpmdW5jdGlvbigpe3ZhciB0PXRoaXM7aWYodm9pZCAwIT09dGhpcy5wb3B1cERpdi5odG1sKXt2YXIgZT10aGlzLmRvbUVsZW1lbnRzW3RoaXMucG9wdXBEaXYuaW5kZXhdLGk9ZS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTt0aGlzLnBvcHVwRGl2Lmh0bWwuc3R5bGUubGVmdD1pLmxlZnQrInB4Iix0aGlzLnBvcHVwRGl2Lmh0bWwuc3R5bGUudG9wPWkudG9wLTMwKyJweCIsZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZCh0aGlzLnBvcHVwRGl2Lmh0bWwpLHRoaXMucG9wdXBEaXYuaGlkZVRpbWVvdXQ9c2V0VGltZW91dChmdW5jdGlvbigpe3QucG9wdXBEaXYuaHRtbC5zdHlsZS5vcGFjaXR5PTB9LDE1MDApLHRoaXMucG9wdXBEaXYuZGVsZXRlVGltZW91dD1zZXRUaW1lb3V0KGZ1bmN0aW9uKCl7dC5fcmVtb3ZlUG9wdXAoKX0sMTgwMCl9fX0se2tleToiX21ha2VDaGVja2JveCIsdmFsdWU6ZnVuY3Rpb24odCxlLGkpe3ZhciBvPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImlucHV0Iik7by50eXBlPSJjaGVja2JveCIsby5jbGFzc05hbWU9InZpcy1jb25maWd1cmF0aW9uIHZpcy1jb25maWctY2hlY2tib3giLG8uY2hlY2tlZD10LHZvaWQgMCE9PWUmJihvLmNoZWNrZWQ9ZSxlIT09dCYmKCJvYmplY3QiPT10eXBlb2YgdD9lIT09dC5lbmFibGVkJiZ0aGlzLmNoYW5nZWRPcHRpb25zLnB1c2goe3BhdGg6aSx2YWx1ZTplfSk6dGhpcy5jaGFuZ2VkT3B0aW9ucy5wdXNoKHtwYXRoOmksdmFsdWU6ZX0pKSk7dmFyIG49dGhpcztvLm9uY2hhbmdlPWZ1bmN0aW9uKCl7bi5fdXBkYXRlKHRoaXMuY2hlY2tlZCxpKX07dmFyIHM9dGhpcy5fbWFrZUxhYmVsKGlbaS5sZW5ndGgtMV0saSk7dGhpcy5fbWFrZUl0ZW0oaSxzLG8pfX0se2tleToiX21ha2VUZXh0SW5wdXQiLHZhbHVlOmZ1bmN0aW9uKHQsZSxpKXt2YXIgbz1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJpbnB1dCIpO28udHlwZT0idGV4dCIsby5jbGFzc05hbWU9InZpcy1jb25maWd1cmF0aW9uIHZpcy1jb25maWctdGV4dCIsby52YWx1ZT1lLGUhPT10JiZ0aGlzLmNoYW5nZWRPcHRpb25zLnB1c2goe3BhdGg6aSx2YWx1ZTplfSk7dmFyIG49dGhpcztvLm9uY2hhbmdlPWZ1bmN0aW9uKCl7bi5fdXBkYXRlKHRoaXMudmFsdWUsaSl9O3ZhciBzPXRoaXMuX21ha2VMYWJlbChpW2kubGVuZ3RoLTFdLGkpO3RoaXMuX21ha2VJdGVtKGkscyxvKX19LHtrZXk6Il9tYWtlQ29sb3JGaWVsZCIsdmFsdWU6ZnVuY3Rpb24odCxlLGkpe3ZhciBvPXRoaXMsbj10WzFdLHM9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2Iik7ZT12b2lkIDA9PT1lP246ZSwibm9uZSIhPT1lPyhzLmNsYXNzTmFtZT0idmlzLWNvbmZpZ3VyYXRpb24gdmlzLWNvbmZpZy1jb2xvckJsb2NrIixzLnN0eWxlLmJhY2tncm91bmRDb2xvcj1lKTpzLmNsYXNzTmFtZT0idmlzLWNvbmZpZ3VyYXRpb24gdmlzLWNvbmZpZy1jb2xvckJsb2NrIG5vbmUiLGU9dm9pZCAwPT09ZT9uOmUscy5vbmNsaWNrPWZ1bmN0aW9uKCl7by5fc2hvd0NvbG9yUGlja2VyKGUscyxpKX07dmFyIHI9dGhpcy5fbWFrZUxhYmVsKGlbaS5sZW5ndGgtMV0saSk7dGhpcy5fbWFrZUl0ZW0oaSxyLHMpfX0se2tleToiX3Nob3dDb2xvclBpY2tlciIsdmFsdWU6ZnVuY3Rpb24odCxlLGkpe3ZhciBvPXRoaXM7ZS5vbmNsaWNrPWZ1bmN0aW9uKCl7fSx0aGlzLmNvbG9yUGlja2VyLmluc2VydFRvKGUpLHRoaXMuY29sb3JQaWNrZXIuc2hvdygpLHRoaXMuY29sb3JQaWNrZXIuc2V0Q29sb3IodCksdGhpcy5jb2xvclBpY2tlci5zZXRVcGRhdGVDYWxsYmFjayhmdW5jdGlvbih0KXt2YXIgbj0icmdiYSgiK3QucisiLCIrdC5nKyIsIit0LmIrIiwiK3QuYSsiKSI7ZS5zdHlsZS5iYWNrZ3JvdW5kQ29sb3I9bixvLl91cGRhdGUobixpKX0pLHRoaXMuY29sb3JQaWNrZXIuc2V0Q2xvc2VDYWxsYmFjayhmdW5jdGlvbigpe2Uub25jbGljaz1mdW5jdGlvbigpe28uX3Nob3dDb2xvclBpY2tlcih0LGUsaSl9fSl9fSx7a2V5OiJfaGFuZGxlT2JqZWN0Iix2YWx1ZTpmdW5jdGlvbih0KXt2YXIgZT1hcmd1bWVudHMubGVuZ3RoPD0xfHx2b2lkIDA9PT1hcmd1bWVudHNbMV0/W106YXJndW1lbnRzWzFdLGk9YXJndW1lbnRzLmxlbmd0aDw9Mnx8dm9pZCAwPT09YXJndW1lbnRzWzJdPyExOmFyZ3VtZW50c1syXSxvPSExLG49dGhpcy5vcHRpb25zLmZpbHRlcixzPSExOwpmb3IodmFyIHIgaW4gdClpZih0Lmhhc093blByb3BlcnR5KHIpKXtvPSEwO3ZhciBhPXRbcl0sZD1oLmNvcHlBbmRFeHRlbmRBcnJheShlLHIpO2lmKCJmdW5jdGlvbiI9PXR5cGVvZiBuJiYobz1uKHIsZSksbz09PSExJiYhKGEgaW5zdGFuY2VvZiBBcnJheSkmJiJzdHJpbmciIT10eXBlb2YgYSYmImJvb2xlYW4iIT10eXBlb2YgYSYmYSBpbnN0YW5jZW9mIE9iamVjdCYmKHRoaXMuYWxsb3dDcmVhdGlvbj0hMSxvPXRoaXMuX2hhbmRsZU9iamVjdChhLGQsITApLHRoaXMuYWxsb3dDcmVhdGlvbj1pPT09ITEpKSxvIT09ITEpe3M9ITA7dmFyIGw9dGhpcy5fZ2V0VmFsdWUoZCk7aWYoYSBpbnN0YW5jZW9mIEFycmF5KXRoaXMuX2hhbmRsZUFycmF5KGEsbCxkKTtlbHNlIGlmKCJzdHJpbmciPT10eXBlb2YgYSl0aGlzLl9tYWtlVGV4dElucHV0KGEsbCxkKTtlbHNlIGlmKCJib29sZWFuIj09dHlwZW9mIGEpdGhpcy5fbWFrZUNoZWNrYm94KGEsbCxkKTtlbHNlIGlmKGEgaW5zdGFuY2VvZiBPYmplY3Qpe3ZhciB1PSEwO2lmKC0xIT09ZS5pbmRleE9mKCJwaHlzaWNzIikmJnRoaXMubW9kdWxlT3B0aW9ucy5waHlzaWNzLnNvbHZlciE9PXImJih1PSExKSx1PT09ITApaWYodm9pZCAwIT09YS5lbmFibGVkKXt2YXIgYz1oLmNvcHlBbmRFeHRlbmRBcnJheShkLCJlbmFibGVkIikscD10aGlzLl9nZXRWYWx1ZShjKTtpZihwPT09ITApe3ZhciBmPXRoaXMuX21ha2VMYWJlbChyLGQsITApO3RoaXMuX21ha2VJdGVtKGQsZikscz10aGlzLl9oYW5kbGVPYmplY3QoYSxkKXx8c31lbHNlIHRoaXMuX21ha2VDaGVja2JveChhLHAsZCl9ZWxzZXt2YXIgZj10aGlzLl9tYWtlTGFiZWwocixkLCEwKTt0aGlzLl9tYWtlSXRlbShkLGYpLHM9dGhpcy5faGFuZGxlT2JqZWN0KGEsZCl8fHN9fWVsc2UgY29uc29sZS5lcnJvcigiZG9udCBrbm93IGhvdyB0byBoYW5kbGUiLGEscixkKX19cmV0dXJuIHN9fSx7a2V5OiJfaGFuZGxlQXJyYXkiLHZhbHVlOmZ1bmN0aW9uKHQsZSxpKXsic3RyaW5nIj09dHlwZW9mIHRbMF0mJiJjb2xvciI9PT10WzBdPyh0aGlzLl9tYWtlQ29sb3JGaWVsZCh0LGUsaSksdFsxXSE9PWUmJnRoaXMuY2hhbmdlZE9wdGlvbnMucHVzaCh7cGF0aDppLHZhbHVlOmV9KSk6InN0cmluZyI9PXR5cGVvZiB0WzBdPyh0aGlzLl9tYWtlRHJvcGRvd24odCxlLGkpLHRbMF0hPT1lJiZ0aGlzLmNoYW5nZWRPcHRpb25zLnB1c2goe3BhdGg6aSx2YWx1ZTplfSkpOiJudW1iZXIiPT10eXBlb2YgdFswXSYmKHRoaXMuX21ha2VSYW5nZSh0LGUsaSksdFswXSE9PWUmJnRoaXMuY2hhbmdlZE9wdGlvbnMucHVzaCh7cGF0aDppLHZhbHVlOk51bWJlcihlKX0pKX19LHtrZXk6Il91cGRhdGUiLHZhbHVlOmZ1bmN0aW9uKHQsZSl7dmFyIGk9dGhpcy5fY29uc3RydWN0T3B0aW9ucyh0LGUpO3RoaXMucGFyZW50LmJvZHkmJnRoaXMucGFyZW50LmJvZHkuZW1pdHRlciYmdGhpcy5wYXJlbnQuYm9keS5lbWl0dGVyLmVtaXQmJnRoaXMucGFyZW50LmJvZHkuZW1pdHRlci5lbWl0KCJjb25maWdDaGFuZ2UiLGkpLHRoaXMuaW5pdGlhbGl6ZWQ9ITAsdGhpcy5wYXJlbnQuc2V0T3B0aW9ucyhpKX19LHtrZXk6Il9jb25zdHJ1Y3RPcHRpb25zIix2YWx1ZTpmdW5jdGlvbih0LGUpe3ZhciBpPWFyZ3VtZW50cy5sZW5ndGg8PTJ8fHZvaWQgMD09PWFyZ3VtZW50c1syXT97fTphcmd1bWVudHNbMl0sbz1pO3Q9InRydWUiPT09dD8hMDp0LHQ9ImZhbHNlIj09PXQ/ITE6dDtmb3IodmFyIG49MDtuPGUubGVuZ3RoO24rKykiZ2xvYmFsIiE9PWVbbl0mJih2b2lkIDA9PT1vW2Vbbl1dJiYob1tlW25dXT17fSksbiE9PWUubGVuZ3RoLTE/bz1vW2Vbbl1dOm9bZVtuXV09dCk7cmV0dXJuIGl9fSx7a2V5OiJfcHJpbnRPcHRpb25zIix2YWx1ZTpmdW5jdGlvbigpe3ZhciB0PXRoaXMuZ2V0T3B0aW9ucygpO3RoaXMub3B0aW9uc0NvbnRhaW5lci5pbm5lckhUTUw9IjxwcmU+dmFyIG9wdGlvbnMgPSAiK0pTT04uc3RyaW5naWZ5KHQsbnVsbCwyKSsiPC9wcmU+In19LHtrZXk6ImdldE9wdGlvbnMiLHZhbHVlOmZ1bmN0aW9uKCl7Zm9yKHZhciB0PXt9LGU9MDtlPHRoaXMuY2hhbmdlZE9wdGlvbnMubGVuZ3RoO2UrKyl0aGlzLl9jb25zdHJ1Y3RPcHRpb25zKHRoaXMuY2hhbmdlZE9wdGlvbnNbZV0udmFsdWUsdGhpcy5jaGFuZ2VkT3B0aW9uc1tlXS5wYXRoLHQpO3JldHVybiB0fX1dKSx0fSgpO2VbImRlZmF1bHQiXT1kLHQuZXhwb3J0cz1lWyJkZWZhdWx0Il19LGZ1bmN0aW9uKHQsZSxpKXtmdW5jdGlvbiBvKHQsZSl7aWYoISh0IGluc3RhbmNlb2YgZSkpdGhyb3cgbmV3IFR5cGVFcnJvcigiQ2Fubm90IGNhbGwgYSBjbGFzcyBhcyBhIGZ1bmN0aW9uIil9T2JqZWN0LmRlZmluZVByb3BlcnR5KGUsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3ZhciBuPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCh0LGUpe2Zvcih2YXIgaT0wO2k8ZS5sZW5ndGg7aSsrKXt2YXIgbz1lW2ldO28uZW51bWVyYWJsZT1vLmVudW1lcmFibGV8fCExLG8uY29uZmlndXJhYmxlPSEwLCJ2YWx1ZSJpbiBvJiYoby53cml0YWJsZT0hMCksT2JqZWN0LmRlZmluZVByb3BlcnR5KHQsby5rZXksbyl9fXJldHVybiBmdW5jdGlvbihlLGksbyl7cmV0dXJuIGkmJnQoZS5wcm90b3R5cGUsaSksbyYmdChlLG8pLGV9fSgpLHM9aSgyMCkscj1pKDI0KSxhPWkoMSksaD1mdW5jdGlvbigpe2Z1bmN0aW9uIHQoKXt2YXIgZT1hcmd1bWVudHMubGVuZ3RoPD0wfHx2b2lkIDA9PT1hcmd1bWVudHNbMF0/MTphcmd1bWVudHNbMF07byh0aGlzLHQpLHRoaXMucGl4ZWxSYXRpbz1lLHRoaXMuZ2VuZXJhdGVkPSExLHRoaXMuY2VudGVyQ29vcmRpbmF0ZXM9e3g6MTQ0LjUseToxNDQuNX0sdGhpcy5yPTI4OSouNDksdGhpcy5jb2xvcj17cjoyNTUsZzoyNTUsYjoyNTUsYToxfSx0aGlzLmh1ZUNpcmNsZT12b2lkIDAsdGhpcy5pbml0aWFsQ29sb3I9e3I6MjU1LGc6MjU1LGI6MjU1LGE6MX0sdGhpcy5wcmV2aW91c0NvbG9yPXZvaWQgMCx0aGlzLmFwcGxpZWQ9ITEsdGhpcy51cGRhdGVDYWxsYmFjaz1mdW5jdGlvbigpe30sdGhpcy5jbG9zZUNhbGxiYWNrPWZ1bmN0aW9uKCl7fSx0aGlzLl9jcmVhdGUoKX1yZXR1cm4gbih0LFt7a2V5OiJpbnNlcnRUbyIsdmFsdWU6ZnVuY3Rpb24odCl7dm9pZCAwIT09dGhpcy5oYW1tZXImJih0aGlzLmhhbW1lci5kZXN0cm95KCksdGhpcy5oYW1tZXI9dm9pZCAwKSx0aGlzLmNvbnRhaW5lcj10LHRoaXMuY29udGFpbmVyLmFwcGVuZENoaWxkKHRoaXMuZnJhbWUpLHRoaXMuX2JpbmRIYW1tZXIoKSx0aGlzLl9zZXRTaXplKCl9fSx7a2V5OiJzZXRVcGRhdGVDYWxsYmFjayIsdmFsdWU6ZnVuY3Rpb24odCl7aWYoImZ1bmN0aW9uIiE9dHlwZW9mIHQpdGhyb3cgbmV3IEVycm9yKCJGdW5jdGlvbiBhdHRlbXB0ZWQgdG8gc2V0IGFzIGNvbG9yUGlja2VyIHVwZGF0ZSBjYWxsYmFjayBpcyBub3QgYSBmdW5jdGlvbi4iKTt0aGlzLnVwZGF0ZUNhbGxiYWNrPXR9fSx7a2V5OiJzZXRDbG9zZUNhbGxiYWNrIix2YWx1ZTpmdW5jdGlvbih0KXtpZigiZnVuY3Rpb24iIT10eXBlb2YgdCl0aHJvdyBuZXcgRXJyb3IoIkZ1bmN0aW9uIGF0dGVtcHRlZCB0byBzZXQgYXMgY29sb3JQaWNrZXIgY2xvc2luZyBjYWxsYmFjayBpcyBub3QgYSBmdW5jdGlvbi4iKTt0aGlzLmNsb3NlQ2FsbGJhY2s9dH19LHtrZXk6Il9pc0NvbG9yU3RyaW5nIix2YWx1ZTpmdW5jdGlvbih0KXt2YXIgZT17YmxhY2s6IiMwMDAwMDAiLG5hdnk6IiMwMDAwODAiLGRhcmtibHVlOiIjMDAwMDhCIixtZWRpdW1ibHVlOiIjMDAwMENEIixibHVlOiIjMDAwMEZGIixkYXJrZ3JlZW46IiMwMDY0MDAiLGdyZWVuOiIjMDA4MDAwIix0ZWFsOiIjMDA4MDgwIixkYXJrY3lhbjoiIzAwOEI4QiIsZGVlcHNreWJsdWU6IiMwMEJGRkYiLGRhcmt0dXJxdW9pc2U6IiMwMENFRDEiLG1lZGl1bXNwcmluZ2dyZWVuOiIjMDBGQTlBIixsaW1lOiIjMDBGRjAwIixzcHJpbmdncmVlbjoiIzAwRkY3RiIsYXF1YToiIzAwRkZGRiIsY3lhbjoiIzAwRkZGRiIsbWlkbmlnaHRibHVlOiIjMTkxOTcwIixkb2RnZXJibHVlOiIjMUU5MEZGIixsaWdodHNlYWdyZWVuOiIjMjBCMkFBIixmb3Jlc3RncmVlbjoiIzIyOEIyMiIsc2VhZ3JlZW46IiMyRThCNTciLGRhcmtzbGF0ZWdyYXk6IiMyRjRGNEYiLGxpbWVncmVlbjoiIzMyQ0QzMiIsbWVkaXVtc2VhZ3JlZW46IiMzQ0IzNzEiLHR1cnF1b2lzZToiIzQwRTBEMCIscm95YWxibHVlOiIjNDE2OUUxIixzdGVlbGJsdWU6IiM0NjgyQjQiLGRhcmtzbGF0ZWJsdWU6IiM0ODNEOEIiLG1lZGl1bXR1cnF1b2lzZToiIzQ4RDFDQyIsaW5kaWdvOiIjNEIwMDgyIixkYXJrb2xpdmVncmVlbjoiIzU1NkIyRiIsY2FkZXRibHVlOiIjNUY5RUEwIixjb3JuZmxvd2VyYmx1ZToiIzY0OTVFRCIsbWVkaXVtYXF1YW1hcmluZToiIzY2Q0RBQSIsZGltZ3JheToiIzY5Njk2OSIsc2xhdGVibHVlOiIjNkE1QUNEIixvbGl2ZWRyYWI6IiM2QjhFMjMiLHNsYXRlZ3JheToiIzcwODA5MCIsbGlnaHRzbGF0ZWdyYXk6IiM3Nzg4OTkiLG1lZGl1bXNsYXRlYmx1ZToiIzdCNjhFRSIsbGF3bmdyZWVuOiIjN0NGQzAwIixjaGFydHJldXNlOiIjN0ZGRjAwIixhcXVhbWFyaW5lOiIjN0ZGRkQ0IixtYXJvb246IiM4MDAwMDAiLHB1cnBsZToiIzgwMDA4MCIsb2xpdmU6IiM4MDgwMDAiLGdyYXk6IiM4MDgwODAiLHNreWJsdWU6IiM4N0NFRUIiLGxpZ2h0c2t5Ymx1ZToiIzg3Q0VGQSIsYmx1ZXZpb2xldDoiIzhBMkJFMiIsZGFya3JlZDoiIzhCMDAwMCIsZGFya21hZ2VudGE6IiM4QjAwOEIiLHNhZGRsZWJyb3duOiIjOEI0NTEzIixkYXJrc2VhZ3JlZW46IiM4RkJDOEYiLGxpZ2h0Z3JlZW46IiM5MEVFOTAiLG1lZGl1bXB1cnBsZToiIzkzNzBEOCIsZGFya3Zpb2xldDoiIzk0MDBEMyIscGFsZWdyZWVuOiIjOThGQjk4IixkYXJrb3JjaGlkOiIjOTkzMkNDIix5ZWxsb3dncmVlbjoiIzlBQ0QzMiIsc2llbm5hOiIjQTA1MjJEIixicm93bjoiI0E1MkEyQSIsZGFya2dyYXk6IiNBOUE5QTkiLGxpZ2h0Ymx1ZToiI0FERDhFNiIsZ3JlZW55ZWxsb3c6IiNBREZGMkYiLHBhbGV0dXJxdW9pc2U6IiNBRkVFRUUiLGxpZ2h0c3RlZWxibHVlOiIjQjBDNERFIixwb3dkZXJibHVlOiIjQjBFMEU2IixmaXJlYnJpY2s6IiNCMjIyMjIiLGRhcmtnb2xkZW5yb2Q6IiNCODg2MEIiLG1lZGl1bW9yY2hpZDoiI0JBNTVEMyIscm9zeWJyb3duOiIjQkM4RjhGIixkYXJra2hha2k6IiNCREI3NkIiLHNpbHZlcjoiI0MwQzBDMCIsbWVkaXVtdmlvbGV0cmVkOiIjQzcxNTg1IixpbmRpYW5yZWQ6IiNDRDVDNUMiLHBlcnU6IiNDRDg1M0YiLGNob2NvbGF0ZToiI0QyNjkxRSIsdGFuOiIjRDJCNDhDIixsaWdodGdyZXk6IiNEM0QzRDMiLHBhbGV2aW9sZXRyZWQ6IiNEODcwOTMiLHRoaXN0bGU6IiNEOEJGRDgiLG9yY2hpZDoiI0RBNzBENiIsZ29sZGVucm9kOiIjREFBNTIwIixjcmltc29uOiIjREMxNDNDIixnYWluc2Jvcm86IiNEQ0RDREMiLHBsdW06IiNEREEwREQiLGJ1cmx5d29vZDoiI0RFQjg4NyIsbGlnaHRjeWFuOiIjRTBGRkZGIixsYXZlbmRlcjoiI0U2RTZGQSIsZGFya3NhbG1vbjoiI0U5OTY3QSIsdmlvbGV0OiIjRUU4MkVFIixwYWxlZ29sZGVucm9kOiIjRUVFOEFBIixsaWdodGNvcmFsOiIjRjA4MDgwIixraGFraToiI0YwRTY4QyIsYWxpY2VibHVlOiIjRjBGOEZGIixob25leWRldzoiI0YwRkZGMCIsYXp1cmU6IiNGMEZGRkYiLHNhbmR5YnJvd246IiNGNEE0NjAiLHdoZWF0OiIjRjVERUIzIixiZWlnZToiI0Y1RjVEQyIsd2hpdGVzbW9rZToiI0Y1RjVGNSIsbWludGNyZWFtOiIjRjVGRkZBIixnaG9zdHdoaXRlOiIjRjhGOEZGIixzYWxtb246IiNGQTgwNzIiLGFudGlxdWV3aGl0ZToiI0ZBRUJENyIsbGluZW46IiNGQUYwRTYiLGxpZ2h0Z29sZGVucm9keWVsbG93OiIjRkFGQUQyIixvbGRsYWNlOiIjRkRGNUU2IixyZWQ6IiNGRjAwMDAiLGZ1Y2hzaWE6IiNGRjAwRkYiLG1hZ2VudGE6IiNGRjAwRkYiLGRlZXBwaW5rOiIjRkYxNDkzIixvcmFuZ2VyZWQ6IiNGRjQ1MDAiLHRvbWF0bzoiI0ZGNjM0NyIsaG90cGluazoiI0ZGNjlCNCIsY29yYWw6IiNGRjdGNTAiLGRhcmtvcmFuZ2U6IiNGRjhDMDAiLGxpZ2h0c2FsbW9uOiIjRkZBMDdBIixvcmFuZ2U6IiNGRkE1MDAiLGxpZ2h0cGluazoiI0ZGQjZDMSIscGluazoiI0ZGQzBDQiIsZ29sZDoiI0ZGRDcwMCIscGVhY2hwdWZmOiIjRkZEQUI5IixuYXZham93aGl0ZToiI0ZGREVBRCIsbW9jY2FzaW46IiNGRkU0QjUiLGJpc3F1ZToiI0ZGRTRDNCIsbWlzdHlyb3NlOiIjRkZFNEUxIixibGFuY2hlZGFsbW9uZDoiI0ZGRUJDRCIscGFwYXlhd2hpcDoiI0ZGRUZENSIsbGF2ZW5kZXJibHVzaDoiI0ZGRjBGNSIsc2Vhc2hlbGw6IiNGRkY1RUUiLGNvcm5zaWxrOiIjRkZGOERDIixsZW1vbmNoaWZmb246IiNGRkZBQ0QiLGZsb3JhbHdoaXRlOiIjRkZGQUYwIixzbm93OiIjRkZGQUZBIix5ZWxsb3c6IiNGRkZGMDAiLGxpZ2h0eWVsbG93OiIjRkZGRkUwIixpdm9yeToiI0ZGRkZGMCIsd2hpdGU6IiNGRkZGRkYifTtyZXR1cm4ic3RyaW5nIj09dHlwZW9mIHQ/ZVt0XTp2b2lkIDB9fSx7a2V5OiJzZXRDb2xvciIsdmFsdWU6ZnVuY3Rpb24odCl7dmFyIGU9YXJndW1lbnRzLmxlbmd0aDw9MXx8dm9pZCAwPT09YXJndW1lbnRzWzFdPyEwOmFyZ3VtZW50c1sxXTtpZigibm9uZSIhPT10KXt2YXIgaT12b2lkIDAsbz10aGlzLl9pc0NvbG9yU3RyaW5nKHQpO2lmKHZvaWQgMCE9PW8mJih0PW8pLGEuaXNTdHJpbmcodCk9PT0hMCl7aWYoYS5pc1ZhbGlkUkdCKHQpPT09ITApe3ZhciBuPXQuc3Vic3RyKDQpLnN1YnN0cigwLHQubGVuZ3RoLTUpLnNwbGl0KCIsIik7aT17cjpuWzBdLGc6blsxXSxiOm5bMl0sYToxfX1lbHNlIGlmKGEuaXNWYWxpZFJHQkEodCk9PT0hMCl7dmFyIG49dC5zdWJzdHIoNSkuc3Vic3RyKDAsdC5sZW5ndGgtNikuc3BsaXQoIiwiKTtpPXtyOm5bMF0sZzpuWzFdLGI6blsyXSxhOm5bM119fWVsc2UgaWYoYS5pc1ZhbGlkSGV4KHQpPT09ITApe3ZhciBzPWEuaGV4VG9SR0IodCk7aT17cjpzLnIsZzpzLmcsYjpzLmIsYToxfX19ZWxzZSBpZih0IGluc3RhbmNlb2YgT2JqZWN0JiZ2b2lkIDAhPT10LnImJnZvaWQgMCE9PXQuZyYmdm9pZCAwIT09dC5iKXt2YXIgcj12b2lkIDAhPT10LmE/dC5hOiIxLjAiO2k9e3I6dC5yLGc6dC5nLGI6dC5iLGE6cn19aWYodm9pZCAwPT09aSl0aHJvdyBuZXcgRXJyb3IoIlVua25vd24gY29sb3IgcGFzc2VkIHRvIHRoZSBjb2xvclBpY2tlci4gU3VwcG9ydGVkIGFyZSBzdHJpbmdzOiByZ2IsIGhleCwgcmdiYS4gT2JqZWN0OiByZ2IgKHtyOnIsZzpnLGI6YixbYTphXX0pLiBTdXBwbGllZDogIitKU09OLnN0cmluZ2lmeSh0KSk7dGhpcy5fc2V0Q29sb3IoaSxlKX19fSx7a2V5OiJzaG93Iix2YWx1ZTpmdW5jdGlvbigpe3ZvaWQgMCE9PXRoaXMuY2xvc2VDYWxsYmFjayYmKHRoaXMuY2xvc2VDYWxsYmFjaygpLHRoaXMuY2xvc2VDYWxsYmFjaz12b2lkIDApLHRoaXMuYXBwbGllZD0hMSx0aGlzLmZyYW1lLnN0eWxlLmRpc3BsYXk9ImJsb2NrIix0aGlzLl9nZW5lcmF0ZUh1ZUNpcmNsZSgpfX0se2tleToiX2hpZGUiLHZhbHVlOmZ1bmN0aW9uKCl7dmFyIHQ9YXJndW1lbnRzLmxlbmd0aDw9MHx8dm9pZCAwPT09YXJndW1lbnRzWzBdPyEwOmFyZ3VtZW50c1swXTt0PT09ITAmJih0aGlzLnByZXZpb3VzQ29sb3I9YS5leHRlbmQoe30sdGhpcy5jb2xvcikpLHRoaXMuYXBwbGllZD09PSEwJiZ0aGlzLnVwZGF0ZUNhbGxiYWNrKHRoaXMuaW5pdGlhbENvbG9yKSx0aGlzLmZyYW1lLnN0eWxlLmRpc3BsYXk9Im5vbmUiLHZvaWQgMCE9PXRoaXMuY2xvc2VDYWxsYmFjayYmKHRoaXMuY2xvc2VDYWxsYmFjaygpLHRoaXMuY2xvc2VDYWxsYmFjaz12b2lkIDApfX0se2tleToiX3NhdmUiLHZhbHVlOmZ1bmN0aW9uKCl7dGhpcy51cGRhdGVDYWxsYmFjayh0aGlzLmNvbG9yKSx0aGlzLmFwcGxpZWQ9ITEsdGhpcy5faGlkZSgpfX0se2tleToiX2FwcGx5Iix2YWx1ZTpmdW5jdGlvbigpe3RoaXMuYXBwbGllZD0hMCx0aGlzLnVwZGF0ZUNhbGxiYWNrKHRoaXMuY29sb3IpLHRoaXMuX3VwZGF0ZVBpY2tlcih0aGlzLmNvbG9yKX19LHtrZXk6Il9sb2FkTGFzdCIsdmFsdWU6ZnVuY3Rpb24oKXt2b2lkIDAhPT10aGlzLnByZXZpb3VzQ29sb3I/dGhpcy5zZXRDb2xvcih0aGlzLnByZXZpb3VzQ29sb3IsITEpOmFsZXJ0KCJUaGVyZSBpcyBubyBsYXN0IGNvbG9yIHRvIGxvYWQuLi4iKX19LHtrZXk6Il9zZXRDb2xvciIsdmFsdWU6ZnVuY3Rpb24odCl7dmFyIGU9YXJndW1lbnRzLmxlbmd0aDw9MXx8dm9pZCAwPT09YXJndW1lbnRzWzFdPyEwOmFyZ3VtZW50c1sxXTtlPT09ITAmJih0aGlzLmluaXRpYWxDb2xvcj1hLmV4dGVuZCh7fSx0KSksdGhpcy5jb2xvcj10O3ZhciBpPWEuUkdCVG9IU1YodC5yLHQuZyx0LmIpLG89MipNYXRoLlBJLG49dGhpcy5yKmkucyxzPXRoaXMuY2VudGVyQ29vcmRpbmF0ZXMueCtuKk1hdGguc2luKG8qaS5oKSxyPXRoaXMuY2VudGVyQ29vcmRpbmF0ZXMueStuKk1hdGguY29zKG8qaS5oKTt0aGlzLmNvbG9yUGlja2VyU2VsZWN0b3Iuc3R5bGUubGVmdD1zLS41KnRoaXMuY29sb3JQaWNrZXJTZWxlY3Rvci5jbGllbnRXaWR0aCsicHgiLHRoaXMuY29sb3JQaWNrZXJTZWxlY3Rvci5zdHlsZS50b3A9ci0uNSp0aGlzLmNvbG9yUGlja2VyU2VsZWN0b3IuY2xpZW50SGVpZ2h0KyJweCIsdGhpcy5fdXBkYXRlUGlja2VyKHQpfX0se2tleToiX3NldE9wYWNpdHkiLHZhbHVlOmZ1bmN0aW9uKHQpe3RoaXMuY29sb3IuYT10LzEwMCx0aGlzLl91cGRhdGVQaWNrZXIodGhpcy5jb2xvcil9fSx7a2V5OiJfc2V0QnJpZ2h0bmVzcyIsdmFsdWU6ZnVuY3Rpb24odCl7dmFyIGU9YS5SR0JUb0hTVih0aGlzLmNvbG9yLnIsdGhpcy5jb2xvci5nLHRoaXMuY29sb3IuYik7ZS52PXQvMTAwO3ZhciBpPWEuSFNWVG9SR0IoZS5oLGUucyxlLnYpO2kuYT10aGlzLmNvbG9yLmEsdGhpcy5jb2xvcj1pLHRoaXMuX3VwZGF0ZVBpY2tlcigpfX0se2tleToiX3VwZGF0ZVBpY2tlciIsdmFsdWU6ZnVuY3Rpb24oKXt2YXIgdD1hcmd1bWVudHMubGVuZ3RoPD0wfHx2b2lkIDA9PT1hcmd1bWVudHNbMF0/dGhpcy5jb2xvcjphcmd1bWVudHNbMF0sZT1hLlJHQlRvSFNWKHQucix0LmcsdC5iKSxpPXRoaXMuY29sb3JQaWNrZXJDYW52YXMuZ2V0Q29udGV4dCgiMmQiKTt2b2lkIDA9PT10aGlzLnBpeGVsUmF0aW9uJiYodGhpcy5waXhlbFJhdGlvPSh3aW5kb3cuZGV2aWNlUGl4ZWxSYXRpb3x8MSkvKGkud2Via2l0QmFja2luZ1N0b3JlUGl4ZWxSYXRpb3x8aS5tb3pCYWNraW5nU3RvcmVQaXhlbFJhdGlvfHxpLm1zQmFja2luZ1N0b3JlUGl4ZWxSYXRpb3x8aS5vQmFja2luZ1N0b3JlUGl4ZWxSYXRpb3x8aS5iYWNraW5nU3RvcmVQaXhlbFJhdGlvfHwxKSksaS5zZXRUcmFuc2Zvcm0odGhpcy5waXhlbFJhdGlvLDAsMCx0aGlzLnBpeGVsUmF0aW8sMCwwKTt2YXIgbz10aGlzLmNvbG9yUGlja2VyQ2FudmFzLmNsaWVudFdpZHRoLG49dGhpcy5jb2xvclBpY2tlckNhbnZhcy5jbGllbnRIZWlnaHQ7aS5jbGVhclJlY3QoMCwwLG8sbiksaS5wdXRJbWFnZURhdGEodGhpcy5odWVDaXJjbGUsMCwwKSxpLmZpbGxTdHlsZT0icmdiYSgwLDAsMCwiKygxLWUudikrIikiLGkuY2lyY2xlKHRoaXMuY2VudGVyQ29vcmRpbmF0ZXMueCx0aGlzLmNlbnRlckNvb3JkaW5hdGVzLnksdGhpcy5yKSxpLmZpbGwoKSx0aGlzLmJyaWdodG5lc3NSYW5nZS52YWx1ZT0xMDAqZS52LHRoaXMub3BhY2l0eVJhbmdlLnZhbHVlPTEwMCp0LmEsdGhpcy5pbml0aWFsQ29sb3JEaXYuc3R5bGUuYmFja2dyb3VuZENvbG9yPSJyZ2JhKCIrdGhpcy5pbml0aWFsQ29sb3IucisiLCIrdGhpcy5pbml0aWFsQ29sb3IuZysiLCIrdGhpcy5pbml0aWFsQ29sb3IuYisiLCIrdGhpcy5pbml0aWFsQ29sb3IuYSsiKSIsdGhpcy5uZXdDb2xvckRpdi5zdHlsZS5iYWNrZ3JvdW5kQ29sb3I9InJnYmEoIit0aGlzLmNvbG9yLnIrIiwiK3RoaXMuY29sb3IuZysiLCIrdGhpcy5jb2xvci5iKyIsIit0aGlzLmNvbG9yLmErIikifX0se2tleToiX3NldFNpemUiLHZhbHVlOmZ1bmN0aW9uKCl7dGhpcy5jb2xvclBpY2tlckNhbnZhcy5zdHlsZS53aWR0aD0iMTAwJSIsdGhpcy5jb2xvclBpY2tlckNhbnZhcy5zdHlsZS5oZWlnaHQ9IjEwMCUiLHRoaXMuY29sb3JQaWNrZXJDYW52YXMud2lkdGg9Mjg5KnRoaXMucGl4ZWxSYXRpbyx0aGlzLmNvbG9yUGlja2VyQ2FudmFzLmhlaWdodD0yODkqdGhpcy5waXhlbFJhdGlvfX0se2tleToiX2NyZWF0ZSIsdmFsdWU6ZnVuY3Rpb24oKXtpZih0aGlzLmZyYW1lPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpLHRoaXMuZnJhbWUuY2xhc3NOYW1lPSJ2aXMtY29sb3ItcGlja2VyIix0aGlzLmNvbG9yUGlja2VyRGl2PWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpLHRoaXMuY29sb3JQaWNrZXJTZWxlY3Rvcj1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKSx0aGlzLmNvbG9yUGlja2VyU2VsZWN0b3IuY2xhc3NOYW1lPSJ2aXMtc2VsZWN0b3IiLHRoaXMuY29sb3JQaWNrZXJEaXYuYXBwZW5kQ2hpbGQodGhpcy5jb2xvclBpY2tlclNlbGVjdG9yKSx0aGlzLmNvbG9yUGlja2VyQ2FudmFzPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImNhbnZhcyIpLHRoaXMuY29sb3JQaWNrZXJEaXYuYXBwZW5kQ2hpbGQodGhpcy5jb2xvclBpY2tlckNhbnZhcyksdGhpcy5jb2xvclBpY2tlckNhbnZhcy5nZXRDb250ZXh0KXt2YXIgdD10aGlzLmNvbG9yUGlja2VyQ2FudmFzLmdldENvbnRleHQoIjJkIik7dGhpcy5waXhlbFJhdGlvPSh3aW5kb3cuZGV2aWNlUGl4ZWxSYXRpb3x8MSkvKHQud2Via2l0QmFja2luZ1N0b3JlUGl4ZWxSYXRpb3x8dC5tb3pCYWNraW5nU3RvcmVQaXhlbFJhdGlvfHx0Lm1zQmFja2luZ1N0b3JlUGl4ZWxSYXRpb3x8dC5vQmFja2luZ1N0b3JlUGl4ZWxSYXRpb3x8dC5iYWNraW5nU3RvcmVQaXhlbFJhdGlvfHwxKSx0aGlzLmNvbG9yUGlja2VyQ2FudmFzLmdldENvbnRleHQoIjJkIikuc2V0VHJhbnNmb3JtKHRoaXMucGl4ZWxSYXRpbywwLDAsdGhpcy5waXhlbFJhdGlvLDAsMCl9ZWxzZXt2YXIgZT1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJESVYiKTtlLnN0eWxlLmNvbG9yPSJyZWQiLGUuc3R5bGUuZm9udFdlaWdodD0iYm9sZCIsZS5zdHlsZS5wYWRkaW5nPSIxMHB4IixlLmlubmVySFRNTD0iRXJyb3I6IHlvdXIgYnJvd3NlciBkb2VzIG5vdCBzdXBwb3J0IEhUTUwgY2FudmFzIix0aGlzLmNvbG9yUGlja2VyQ2FudmFzLmFwcGVuZENoaWxkKGUpfXRoaXMuY29sb3JQaWNrZXJEaXYuY2xhc3NOYW1lPSJ2aXMtY29sb3IiLHRoaXMub3BhY2l0eURpdj1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKSx0aGlzLm9wYWNpdHlEaXYuY2xhc3NOYW1lPSJ2aXMtb3BhY2l0eSIsdGhpcy5icmlnaHRuZXNzRGl2PWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpLHRoaXMuYnJpZ2h0bmVzc0Rpdi5jbGFzc05hbWU9InZpcy1icmlnaHRuZXNzIix0aGlzLmFycm93RGl2PWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpLHRoaXMuYXJyb3dEaXYuY2xhc3NOYW1lPSJ2aXMtYXJyb3ciLHRoaXMub3BhY2l0eVJhbmdlPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImlucHV0Iik7dHJ5e3RoaXMub3BhY2l0eVJhbmdlLnR5cGU9InJhbmdlIix0aGlzLm9wYWNpdHlSYW5nZS5taW49IjAiLHRoaXMub3BhY2l0eVJhbmdlLm1heD0iMTAwIn1jYXRjaChpKXt9dGhpcy5vcGFjaXR5UmFuZ2UudmFsdWU9IjEwMCIsdGhpcy5vcGFjaXR5UmFuZ2UuY2xhc3NOYW1lPSJ2aXMtcmFuZ2UiLHRoaXMuYnJpZ2h0bmVzc1JhbmdlPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImlucHV0Iik7dHJ5e3RoaXMuYnJpZ2h0bmVzc1JhbmdlLnR5cGU9InJhbmdlIix0aGlzLmJyaWdodG5lc3NSYW5nZS5taW49IjAiLHRoaXMuYnJpZ2h0bmVzc1JhbmdlLm1heD0iMTAwIn1jYXRjaChpKXt9dGhpcy5icmlnaHRuZXNzUmFuZ2UudmFsdWU9IjEwMCIsdGhpcy5icmlnaHRuZXNzUmFuZ2UuY2xhc3NOYW1lPSJ2aXMtcmFuZ2UiLHRoaXMub3BhY2l0eURpdi5hcHBlbmRDaGlsZCh0aGlzLm9wYWNpdHlSYW5nZSksdGhpcy5icmlnaHRuZXNzRGl2LmFwcGVuZENoaWxkKHRoaXMuYnJpZ2h0bmVzc1JhbmdlKTt2YXIgbz10aGlzO3RoaXMub3BhY2l0eVJhbmdlLm9uY2hhbmdlPWZ1bmN0aW9uKCl7by5fc2V0T3BhY2l0eSh0aGlzLnZhbHVlKX0sdGhpcy5vcGFjaXR5UmFuZ2Uub25pbnB1dD1mdW5jdGlvbigpe28uX3NldE9wYWNpdHkodGhpcy52YWx1ZSl9LHRoaXMuYnJpZ2h0bmVzc1JhbmdlLm9uY2hhbmdlPWZ1bmN0aW9uKCl7by5fc2V0QnJpZ2h0bmVzcyh0aGlzLnZhbHVlKX0sdGhpcy5icmlnaHRuZXNzUmFuZ2Uub25pbnB1dD1mdW5jdGlvbigpe28uX3NldEJyaWdodG5lc3ModGhpcy52YWx1ZSl9LHRoaXMuYnJpZ2h0bmVzc0xhYmVsPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpLHRoaXMuYnJpZ2h0bmVzc0xhYmVsLmNsYXNzTmFtZT0idmlzLWxhYmVsIHZpcy1icmlnaHRuZXNzIix0aGlzLmJyaWdodG5lc3NMYWJlbC5pbm5lckhUTUw9ImJyaWdodG5lc3M6Iix0aGlzLm9wYWNpdHlMYWJlbD1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKSx0aGlzLm9wYWNpdHlMYWJlbC5jbGFzc05hbWU9InZpcy1sYWJlbCB2aXMtb3BhY2l0eSIsdGhpcy5vcGFjaXR5TGFiZWwuaW5uZXJIVE1MPSJvcGFjaXR5OiIsdGhpcy5uZXdDb2xvckRpdj1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKSx0aGlzLm5ld0NvbG9yRGl2LmNsYXNzTmFtZT0idmlzLW5ldy1jb2xvciIsdGhpcy5uZXdDb2xvckRpdi5pbm5lckhUTUw9Im5ldyIsdGhpcy5pbml0aWFsQ29sb3JEaXY9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2IiksdGhpcy5pbml0aWFsQ29sb3JEaXYuY2xhc3NOYW1lPSJ2aXMtaW5pdGlhbC1jb2xvciIsdGhpcy5pbml0aWFsQ29sb3JEaXYuaW5uZXJIVE1MPSJpbml0aWFsIix0aGlzLmNhbmNlbEJ1dHRvbj1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKSx0aGlzLmNhbmNlbEJ1dHRvbi5jbGFzc05hbWU9InZpcy1idXR0b24gdmlzLWNhbmNlbCIsdGhpcy5jYW5jZWxCdXR0b24uaW5uZXJIVE1MPSJjYW5jZWwiLHRoaXMuY2FuY2VsQnV0dG9uLm9uY2xpY2s9dGhpcy5faGlkZS5iaW5kKHRoaXMsITEpLHRoaXMuYXBwbHlCdXR0b249ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2IiksdGhpcy5hcHBseUJ1dHRvbi5jbGFzc05hbWU9InZpcy1idXR0b24gdmlzLWFwcGx5Iix0aGlzLmFwcGx5QnV0dG9uLmlubmVySFRNTD0iYXBwbHkiLHRoaXMuYXBwbHlCdXR0b24ub25jbGljaz10aGlzLl9hcHBseS5iaW5kKHRoaXMpLHRoaXMuc2F2ZUJ1dHRvbj1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKSx0aGlzLnNhdmVCdXR0b24uY2xhc3NOYW1lPSJ2aXMtYnV0dG9uIHZpcy1zYXZlIix0aGlzLnNhdmVCdXR0b24uaW5uZXJIVE1MPSJzYXZlIix0aGlzLnNhdmVCdXR0b24ub25jbGljaz10aGlzLl9zYXZlLmJpbmQodGhpcyksdGhpcy5sb2FkQnV0dG9uPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpLHRoaXMubG9hZEJ1dHRvbi5jbGFzc05hbWU9InZpcy1idXR0b24gdmlzLWxvYWQiLHRoaXMubG9hZEJ1dHRvbi5pbm5lckhUTUw9ImxvYWQgbGFzdCIsdGhpcy5sb2FkQnV0dG9uLm9uY2xpY2s9dGhpcy5fbG9hZExhc3QuYmluZCh0aGlzKSx0aGlzLmZyYW1lLmFwcGVuZENoaWxkKHRoaXMuY29sb3JQaWNrZXJEaXYpLHRoaXMuZnJhbWUuYXBwZW5kQ2hpbGQodGhpcy5hcnJvd0RpdiksdGhpcy5mcmFtZS5hcHBlbmRDaGlsZCh0aGlzLmJyaWdodG5lc3NMYWJlbCksdGhpcy5mcmFtZS5hcHBlbmRDaGlsZCh0aGlzLmJyaWdodG5lc3NEaXYpLHRoaXMuZnJhbWUuYXBwZW5kQ2hpbGQodGhpcy5vcGFjaXR5TGFiZWwpLHRoaXMuZnJhbWUuYXBwZW5kQ2hpbGQodGhpcy5vcGFjaXR5RGl2KSx0aGlzLmZyYW1lLmFwcGVuZENoaWxkKHRoaXMubmV3Q29sb3JEaXYpLHRoaXMuZnJhbWUuYXBwZW5kQ2hpbGQodGhpcy5pbml0aWFsQ29sb3JEaXYpLHRoaXMuZnJhbWUuYXBwZW5kQ2hpbGQodGhpcy5jYW5jZWxCdXR0b24pLHRoaXMuZnJhbWUuYXBwZW5kQ2hpbGQodGhpcy5hcHBseUJ1dHRvbiksdGhpcy5mcmFtZS5hcHBlbmRDaGlsZCh0aGlzLnNhdmVCdXR0b24pLHRoaXMuZnJhbWUuYXBwZW5kQ2hpbGQodGhpcy5sb2FkQnV0dG9uKX19LHtrZXk6Il9iaW5kSGFtbWVyIix2YWx1ZTpmdW5jdGlvbigpe3ZhciB0PXRoaXM7dGhpcy5kcmFnPXt9LHRoaXMucGluY2g9e30sdGhpcy5oYW1tZXI9bmV3IHModGhpcy5jb2xvclBpY2tlckNhbnZhcyksdGhpcy5oYW1tZXIuZ2V0KCJwaW5jaCIpLnNldCh7ZW5hYmxlOiEwfSksci5vblRvdWNoKHRoaXMuaGFtbWVyLGZ1bmN0aW9uKGUpe3QuX21vdmVTZWxlY3RvcihlKX0pLHRoaXMuaGFtbWVyLm9uKCJ0YXAiLGZ1bmN0aW9uKGUpe3QuX21vdmVTZWxlY3RvcihlKX0pLHRoaXMuaGFtbWVyLm9uKCJwYW5zdGFydCIsZnVuY3Rpb24oZSl7dC5fbW92ZVNlbGVjdG9yKGUpfSksdGhpcy5oYW1tZXIub24oInBhbm1vdmUiLGZ1bmN0aW9uKGUpe3QuX21vdmVTZWxlY3RvcihlKX0pLHRoaXMuaGFtbWVyLm9uKCJwYW5lbmQiLGZ1bmN0aW9uKGUpe3QuX21vdmVTZWxlY3RvcihlKX0pfX0se2tleToiX2dlbmVyYXRlSHVlQ2lyY2xlIix2YWx1ZTpmdW5jdGlvbigpe2lmKHRoaXMuZ2VuZXJhdGVkPT09ITEpe3ZhciB0PXRoaXMuY29sb3JQaWNrZXJDYW52YXMuZ2V0Q29udGV4dCgiMmQiKTt2b2lkIDA9PT10aGlzLnBpeGVsUmF0aW9uJiYodGhpcy5waXhlbFJhdGlvPSh3aW5kb3cuZGV2aWNlUGl4ZWxSYXRpb3x8MSkvKHQud2Via2l0QmFja2luZ1N0b3JlUGl4ZWxSYXRpb3x8dC5tb3pCYWNraW5nU3RvcmVQaXhlbFJhdGlvfHx0Lm1zQmFja2luZ1N0b3JlUGl4ZWxSYXRpb3x8dC5vQmFja2luZ1N0b3JlUGl4ZWxSYXRpb3x8dC5iYWNraW5nU3RvcmVQaXhlbFJhdGlvfHwxKSksdC5zZXRUcmFuc2Zvcm0odGhpcy5waXhlbFJhdGlvLDAsMCx0aGlzLnBpeGVsUmF0aW8sMCwwKTt2YXIgZT10aGlzLmNvbG9yUGlja2VyQ2FudmFzLmNsaWVudFdpZHRoLGk9dGhpcy5jb2xvclBpY2tlckNhbnZhcy5jbGllbnRIZWlnaHQ7dC5jbGVhclJlY3QoMCwwLGUsaSk7dmFyIG89dm9pZCAwLG49dm9pZCAwLHM9dm9pZCAwLHI9dm9pZCAwO3RoaXMuY2VudGVyQ29vcmRpbmF0ZXM9e3g6LjUqZSx5Oi41Kml9LHRoaXMucj0uNDkqZTt2YXIgaD0yKk1hdGguUEkvMzYwLGQ9MS8zNjAsbD0xL3RoaXMucix1PXZvaWQgMDtmb3Iocz0wOzM2MD5zO3MrKylmb3Iocj0wO3I8dGhpcy5yO3IrKylvPXRoaXMuY2VudGVyQ29vcmRpbmF0ZXMueCtyKk1hdGguc2luKGgqcyksbj10aGlzLmNlbnRlckNvb3JkaW5hdGVzLnkrcipNYXRoLmNvcyhoKnMpLHU9YS5IU1ZUb1JHQihzKmQscipsLDEpLHQuZmlsbFN0eWxlPSJyZ2IoIit1LnIrIiwiK3UuZysiLCIrdS5iKyIpIix0LmZpbGxSZWN0KG8tLjUsbi0uNSwyLDIpO3Quc3Ryb2tlU3R5bGU9InJnYmEoMCwwLDAsMSkiLHQuY2lyY2xlKHRoaXMuY2VudGVyQ29vcmRpbmF0ZXMueCx0aGlzLmNlbnRlckNvb3JkaW5hdGVzLnksdGhpcy5yKSx0LnN0cm9rZSgpLHRoaXMuaHVlQ2lyY2xlPXQuZ2V0SW1hZ2VEYXRhKDAsMCxlLGkpfXRoaXMuZ2VuZXJhdGVkPSEwfX0se2tleToiX21vdmVTZWxlY3RvciIsdmFsdWU6ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5jb2xvclBpY2tlckRpdi5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKSxpPXQuY2VudGVyLngtZS5sZWZ0LG89dC5jZW50ZXIueS1lLnRvcCxuPS41KnRoaXMuY29sb3JQaWNrZXJEaXYuY2xpZW50SGVpZ2h0LHM9LjUqdGhpcy5jb2xvclBpY2tlckRpdi5jbGllbnRXaWR0aCxyPWktcyxoPW8tbixkPU1hdGguYXRhbjIocixoKSxsPS45OCpNYXRoLm1pbihNYXRoLnNxcnQocipyK2gqaCkscyksdT1NYXRoLmNvcyhkKSpsK24sYz1NYXRoLnNpbihkKSpsK3M7dGhpcy5jb2xvclBpY2tlclNlbGVjdG9yLnN0eWxlLnRvcD11LS41KnRoaXMuY29sb3JQaWNrZXJTZWxlY3Rvci5jbGllbnRIZWlnaHQrInB4Iix0aGlzLmNvbG9yUGlja2VyU2VsZWN0b3Iuc3R5bGUubGVmdD1jLS41KnRoaXMuY29sb3JQaWNrZXJTZWxlY3Rvci5jbGllbnRXaWR0aCsicHgiO3ZhciBwPWQvKDIqTWF0aC5QSSk7cD0wPnA/cCsxOnA7dmFyIGY9bC90aGlzLnIsbT1hLlJHQlRvSFNWKHRoaXMuY29sb3Iucix0aGlzLmNvbG9yLmcsdGhpcy5jb2xvci5iKTttLmg9cCxtLnM9Zjt2YXIgdj1hLkhTVlRvUkdCKG0uaCxtLnMsbS52KTt2LmE9dGhpcy5jb2xvci5hLHRoaXMuY29sb3I9dix0aGlzLmluaXRpYWxDb2xvckRpdi5zdHlsZS5iYWNrZ3JvdW5kQ29sb3I9InJnYmEoIit0aGlzLmluaXRpYWxDb2xvci5yKyIsIit0aGlzLmluaXRpYWxDb2xvci5nKyIsIit0aGlzLmluaXRpYWxDb2xvci5iKyIsIit0aGlzLmluaXRpYWxDb2xvci5hKyIpIix0aGlzLm5ld0NvbG9yRGl2LnN0eWxlLmJhY2tncm91bmRDb2xvcj0icmdiYSgiK3RoaXMuY29sb3IucisiLCIrdGhpcy5jb2xvci5nKyIsIit0aGlzLmNvbG9yLmIrIiwiK3RoaXMuY29sb3IuYSsiKSJ9fV0pLHR9KCk7ZVsiZGVmYXVsdCJdPWgsdC5leHBvcnRzPWVbImRlZmF1bHQiXX0sZnVuY3Rpb24odCxlLGkpe2Z1bmN0aW9uIG8odCxlKXtpZighKHQgaW5zdGFuY2VvZiBlKSl0aHJvdyBuZXcgVHlwZUVycm9yKCJDYW5ub3QgY2FsbCBhIGNsYXNzIGFzIGEgZnVuY3Rpb24iKX1PYmplY3QuZGVmaW5lUHJvcGVydHkoZSwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7dmFyIG49ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KHQsZSl7Zm9yKHZhciBpPTA7aTxlLmxlbmd0aDtpKyspe3ZhciBvPWVbaV07by5lbnVtZXJhYmxlPW8uZW51bWVyYWJsZXx8ITEsby5jb25maWd1cmFibGU9ITAsInZhbHVlImluIG8mJihvLndyaXRhYmxlPSEwKSxPYmplY3QuZGVmaW5lUHJvcGVydHkodCxvLmtleSxvKX19cmV0dXJuIGZ1bmN0aW9uKGUsaSxvKXtyZXR1cm4gaSYmdChlLnByb3RvdHlwZSxpKSxvJiZ0KGUsbyksZX19KCkscz1pKDEpLHI9ITEsYT12b2lkIDAsaD0iYmFja2dyb3VuZDogI0ZGZWVlZTsgY29sb3I6ICNkZDAwMDAiLGQ9ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KCl7byh0aGlzLHQpfXJldHVybiBuKHQsbnVsbCxbe2tleToidmFsaWRhdGUiLHZhbHVlOmZ1bmN0aW9uKGUsaSxvKXtyPSExLGE9aTt2YXIgbj1pO3JldHVybiB2b2lkIDAhPT1vJiYobj1pW29dKSx0LnBhcnNlKGUsbixbXSkscn19LHtrZXk6InBhcnNlIix2YWx1ZTpmdW5jdGlvbihlLGksbyl7Zm9yKHZhciBuIGluIGUpZS5oYXNPd25Qcm9wZXJ0eShuKSYmdC5jaGVjayhuLGUsaSxvKX19LHtrZXk6ImNoZWNrIix2YWx1ZTpmdW5jdGlvbihlLGksbyxuKXt2b2lkIDA9PT1vW2VdJiZ2b2lkIDA9PT1vLl9fYW55X18/dC5nZXRTdWdnZXN0aW9uKGUsbyxuKTp2b2lkIDA9PT1vW2VdJiZ2b2lkIDAhPT1vLl9fYW55X18/Im9iamVjdCI9PT10LmdldFR5cGUoaVtlXSkmJnZvaWQgMCE9PW8uX19hbnlfXy5fX3R5cGVfXz90LmNoZWNrRmllbGRzKGUsaSxvLCJfX2FueV9fIixvLl9fYW55X18uX190eXBlX18sbik6dC5jaGVja0ZpZWxkcyhlLGksbywiX19hbnlfXyIsby5fX2FueV9fLG4pOnZvaWQgMCE9PW9bZV0uX190eXBlX18/dC5jaGVja0ZpZWxkcyhlLGksbyxlLG9bZV0uX190eXBlX18sbik6dC5jaGVja0ZpZWxkcyhlLGksbyxlLG9bZV0sbil9fSx7a2V5OiJjaGVja0ZpZWxkcyIsdmFsdWU6ZnVuY3Rpb24oZSxpLG8sbixhLGQpe3ZhciBsPXQuZ2V0VHlwZShpW2VdKSx1PWFbbF07dm9pZCAwIT09dT8iYXJyYXkiPT09dC5nZXRUeXBlKHUpJiYtMT09PXUuaW5kZXhPZihpW2VdKT8oY29uc29sZS5sb2coJyVjSW52YWxpZCBvcHRpb24gZGV0ZWN0ZWQgaW4gIicrZSsnIi4gQWxsb3dlZCB2YWx1ZXMgYXJlOicrdC5wcmludCh1KSsnIG5vdCAiJytpW2VdKyciLiAnK3QucHJpbnRMb2NhdGlvbihkLGUpLGgpLHI9ITApOiJvYmplY3QiPT09bCYmIl9fYW55X18iIT09biYmKGQ9cy5jb3B5QW5kRXh0ZW5kQXJyYXkoZCxlKSx0LnBhcnNlKGlbZV0sb1tuXSxkKSk6dm9pZCAwPT09YS5hbnkmJihjb25zb2xlLmxvZygnJWNJbnZhbGlkIHR5cGUgcmVjZWl2ZWQgZm9yICInK2UrJyIuIEV4cGVjdGVkOiAnK3QucHJpbnQoT2JqZWN0LmtleXMoYSkpKyIuIFJlY2VpdmVkIFsiK2wrJ10gIicraVtlXSsnIicrdC5wcmludExvY2F0aW9uKGQsZSksaCkscj0hMCl9fSx7a2V5OiJnZXRUeXBlIix2YWx1ZTpmdW5jdGlvbih0KXt2YXIgZT10eXBlb2YgdDtyZXR1cm4ib2JqZWN0Ij09PWU/bnVsbD09PXQ/Im51bGwiOnQgaW5zdGFuY2VvZiBCb29sZWFuPyJib29sZWFuIjp0IGluc3RhbmNlb2YgTnVtYmVyPyJudW1iZXIiOnQgaW5zdGFuY2VvZiBTdHJpbmc/InN0cmluZyI6QXJyYXkuaXNBcnJheSh0KT8iYXJyYXkiOnQgaW5zdGFuY2VvZiBEYXRlPyJkYXRlIjp2b2lkIDAhPT10Lm5vZGVUeXBlPyJkb20iOnQuX2lzQU1vbWVudE9iamVjdD09PSEwPyJtb21lbnQiOiJvYmplY3QiOiJudW1iZXIiPT09ZT8ibnVtYmVyIjoiYm9vbGVhbiI9PT1lPyJib29sZWFuIjoic3RyaW5nIj09PWU/InN0cmluZyI6dm9pZCAwPT09ZT8idW5kZWZpbmVkIjplfX0se2tleToiZ2V0U3VnZ2VzdGlvbiIsdmFsdWU6ZnVuY3Rpb24oZSxpLG8pe3ZhciBuPXQuZmluZEluT3B0aW9ucyhlLGksbywhMSkscz10LmZpbmRJbk9wdGlvbnMoZSxhLFtdLCEwKSxkPTgsbD00O3ZvaWQgMCE9PW4uaW5kZXhNYXRjaD9jb25zb2xlLmxvZygnJWNVbmtub3duIG9wdGlvbiBkZXRlY3RlZDogIicrZSsnIiBpbiAnK3QucHJpbnRMb2NhdGlvbihuLnBhdGgsZSwiIikrJ1BlcmhhcHMgaXQgd2FzIGluY29tcGxldGU/IERpZCB5b3UgbWVhbjogIicrbi5pbmRleE1hdGNoKyciP1xuXG4nLGgpOnMuZGlzdGFuY2U8PWwmJm4uZGlzdGFuY2U+cy5kaXN0YW5jZT9jb25zb2xlLmxvZygnJWNVbmtub3duIG9wdGlvbiBkZXRlY3RlZDogIicrZSsnIiBpbiAnK3QucHJpbnRMb2NhdGlvbihuLnBhdGgsZSwiIikrIlBlcmhhcHMgaXQgd2FzIG1pc3BsYWNlZD8gTWF0Y2hpbmcgb3B0aW9uIGZvdW5kIGF0OiAiK3QucHJpbnRMb2NhdGlvbihzLnBhdGgscy5jbG9zZXN0TWF0Y2gsIiIpLGgpOm4uZGlzdGFuY2U8PWQ/Y29uc29sZS5sb2coJyVjVW5rbm93biBvcHRpb24gZGV0ZWN0ZWQ6ICInK2UrJyIuIERpZCB5b3UgbWVhbiAiJytuLmNsb3Nlc3RNYXRjaCsnIj8nK3QucHJpbnRMb2NhdGlvbihuLnBhdGgsZSksaCk6Y29uc29sZS5sb2coJyVjVW5rbm93biBvcHRpb24gZGV0ZWN0ZWQ6ICInK2UrJyIuIERpZCB5b3UgbWVhbiBvbmUgb2YgdGhlc2U6ICcrdC5wcmludChPYmplY3Qua2V5cyhpKSkrdC5wcmludExvY2F0aW9uKG8sZSksaCkscj0hMH19LHtrZXk6ImZpbmRJbk9wdGlvbnMiLHZhbHVlOmZ1bmN0aW9uKGUsaSxvKXt2YXIgbj1hcmd1bWVudHMubGVuZ3RoPD0zfHx2b2lkIDA9PT1hcmd1bWVudHNbM10/ITE6YXJndW1lbnRzWzNdLHI9MWU5LGE9IiIsaD1bXSxkPWUudG9Mb3dlckNhc2UoKSxsPXZvaWQgMDtmb3IodmFyIHUgaW4gaSl7dmFyIGM9dm9pZCAwO2lmKHZvaWQgMCE9PWlbdV0uX190eXBlX18mJm49PT0hMCl7dmFyIHA9dC5maW5kSW5PcHRpb25zKGUsaVt1XSxzLmNvcHlBbmRFeHRlbmRBcnJheShvLHUpKTtyPnAuZGlzdGFuY2UmJihhPXAuY2xvc2VzdE1hdGNoLGg9cC5wYXRoLHI9cC5kaXN0YW5jZSxsPXAuaW5kZXhNYXRjaCl9ZWxzZS0xIT09dS50b0xvd2VyQ2FzZSgpLmluZGV4T2YoZCkmJihsPXUpLGM9dC5sZXZlbnNodGVpbkRpc3RhbmNlKGUsdSkscj5jJiYoYT11LGg9cy5jb3B5QXJyYXkobykscj1jKX1yZXR1cm57Y2xvc2VzdE1hdGNoOmEscGF0aDpoLGRpc3RhbmNlOnIsaW5kZXhNYXRjaDpsfX19LHtrZXk6InByaW50TG9jYXRpb24iLHZhbHVlOmZ1bmN0aW9uKHQsZSl7Zm9yKHZhciBpPWFyZ3VtZW50cy5sZW5ndGg8PTJ8fHZvaWQgMD09PWFyZ3VtZW50c1syXT8iUHJvYmxlbSB2YWx1ZSBmb3VuZCBhdDogXG4iOmFyZ3VtZW50c1syXSxvPSJcblxuIitpKyJvcHRpb25zID0ge1xuIixuPTA7bjx0Lmxlbmd0aDtuKyspe2Zvcih2YXIgcz0wO24rMT5zO3MrKylvKz0iICAiO28rPXRbbl0rIjoge1xuIn1mb3IodmFyIHM9MDtzPHQubGVuZ3RoKzE7cysrKW8rPSIgICI7bys9ZSsiXG4iO2Zvcih2YXIgbj0wO248dC5sZW5ndGgrMTtuKyspe2Zvcih2YXIgcz0wO3M8dC5sZW5ndGgtbjtzKyspbys9IiAgIjtvKz0ifVxuIn1yZXR1cm4gbysiXG5cbiJ9fSx7a2V5OiJwcmludCIsdmFsdWU6ZnVuY3Rpb24odCl7cmV0dXJuIEpTT04uc3RyaW5naWZ5KHQpLnJlcGxhY2UoLyhcIil8KFxbKXwoXF0pfCgsIl9fdHlwZV9fIikvZywiIikucmVwbGFjZSgvKFwsKS9nLCIsICIpfX0se2tleToibGV2ZW5zaHRlaW5EaXN0YW5jZSIsdmFsdWU6ZnVuY3Rpb24odCxlKXtpZigwPT09dC5sZW5ndGgpcmV0dXJuIGUubGVuZ3RoO2lmKDA9PT1lLmxlbmd0aClyZXR1cm4gdC5sZW5ndGg7dmFyIGksbz1bXTtmb3IoaT0wO2k8PWUubGVuZ3RoO2krKylvW2ldPVtpXTt2YXIgbjtmb3Iobj0wO248PXQubGVuZ3RoO24rKylvWzBdW25dPW47Zm9yKGk9MTtpPD1lLmxlbmd0aDtpKyspZm9yKG49MTtuPD10Lmxlbmd0aDtuKyspZS5jaGFyQXQoaS0xKT09dC5jaGFyQXQobi0xKT9vW2ldW25dPW9baS0xXVtuLTFdOm9baV1bbl09TWF0aC5taW4ob1tpLTFdW24tMV0rMSxNYXRoLm1pbihvW2ldW24tMV0rMSxvW2ktMV1bbl0rMSkpO3JldHVybiBvW2UubGVuZ3RoXVt0Lmxlbmd0aF19fV0pLHR9KCk7ZVsiZGVmYXVsdCJdPWQsZS5wcmludFN0eWxlPWh9LGZ1bmN0aW9uKHQsZSl7T2JqZWN0LmRlZmluZVByb3BlcnR5KGUsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3ZhciBpPSJzdHJpbmciLG89ImJvb2xlYW4iLG49Im51bWJlciIscz0iYXJyYXkiLHI9ImRhdGUiLGE9Im9iamVjdCIsaD0iZG9tIixkPSJtb21lbnQiLGw9ImFueSIsdT17Y29uZmlndXJlOntlbmFibGVkOnsiYm9vbGVhbiI6b30sZmlsdGVyOnsiYm9vbGVhbiI6bywiZnVuY3Rpb24iOiJmdW5jdGlvbiJ9LGNvbnRhaW5lcjp7ZG9tOmh9LF9fdHlwZV9fOntvYmplY3Q6YSwiYm9vbGVhbiI6bywiZnVuY3Rpb24iOiJmdW5jdGlvbiJ9fSxhbGlnbjp7c3RyaW5nOml9LGF1dG9SZXNpemU6eyJib29sZWFuIjpvfSx0aHJvdHRsZVJlZHJhdzp7bnVtYmVyOm59LGNsaWNrVG9Vc2U6eyJib29sZWFuIjpvfSxkYXRhQXR0cmlidXRlczp7c3RyaW5nOmksYXJyYXk6c30sZWRpdGFibGU6e2FkZDp7ImJvb2xlYW4iOm8sdW5kZWZpbmVkOiJ1bmRlZmluZWQifSxyZW1vdmU6eyJib29sZWFuIjpvLHVuZGVmaW5lZDoidW5kZWZpbmVkIn0sdXBkYXRlR3JvdXA6eyJib29sZWFuIjpvLHVuZGVmaW5lZDoidW5kZWZpbmVkIn0sdXBkYXRlVGltZTp7ImJvb2xlYW4iOm8sdW5kZWZpbmVkOiJ1bmRlZmluZWQifSxfX3R5cGVfXzp7ImJvb2xlYW4iOm8sb2JqZWN0OmF9fSxlbmQ6e251bWJlcjpuLGRhdGU6cixzdHJpbmc6aSxtb21lbnQ6ZH0sZm9ybWF0OnttaW5vckxhYmVsczp7bWlsbGlzZWNvbmQ6e3N0cmluZzppLHVuZGVmaW5lZDoidW5kZWZpbmVkIn0sc2Vjb25kOntzdHJpbmc6aSx1bmRlZmluZWQ6InVuZGVmaW5lZCJ9LG1pbnV0ZTp7c3RyaW5nOmksdW5kZWZpbmVkOiJ1bmRlZmluZWQifSxob3VyOntzdHJpbmc6aSx1bmRlZmluZWQ6InVuZGVmaW5lZCJ9LHdlZWtkYXk6e3N0cmluZzppLHVuZGVmaW5lZDoidW5kZWZpbmVkIn0sZGF5OntzdHJpbmc6aSx1bmRlZmluZWQ6InVuZGVmaW5lZCJ9LG1vbnRoOntzdHJpbmc6aSx1bmRlZmluZWQ6InVuZGVmaW5lZCJ9LHllYXI6e3N0cmluZzppLHVuZGVmaW5lZDoidW5kZWZpbmVkIn0sX190eXBlX186e29iamVjdDphfX0sbWFqb3JMYWJlbHM6e21pbGxpc2Vjb25kOntzdHJpbmc6aSx1bmRlZmluZWQ6InVuZGVmaW5lZCJ9LHNlY29uZDp7c3RyaW5nOmksdW5kZWZpbmVkOiJ1bmRlZmluZWQifSxtaW51dGU6e3N0cmluZzppLHVuZGVmaW5lZDoidW5kZWZpbmVkIn0saG91cjp7c3RyaW5nOmksdW5kZWZpbmVkOiJ1bmRlZmluZWQifSx3ZWVrZGF5OntzdHJpbmc6aSx1bmRlZmluZWQ6InVuZGVmaW5lZCJ9LGRheTp7c3RyaW5nOmksdW5kZWZpbmVkOiJ1bmRlZmluZWQifSxtb250aDp7c3RyaW5nOmksdW5kZWZpbmVkOiJ1bmRlZmluZWQifSx5ZWFyOntzdHJpbmc6aSx1bmRlZmluZWQ6InVuZGVmaW5lZCJ9LF9fdHlwZV9fOntvYmplY3Q6YX19LF9fdHlwZV9fOntvYmplY3Q6YX19LG1vbWVudDp7ImZ1bmN0aW9uIjoiZnVuY3Rpb24ifSxncm91cE9yZGVyOntzdHJpbmc6aSwiZnVuY3Rpb24iOiJmdW5jdGlvbiJ9LGdyb3VwRWRpdGFibGU6e2FkZDp7ImJvb2xlYW4iOm8sdW5kZWZpbmVkOiJ1bmRlZmluZWQifSxyZW1vdmU6eyJib29sZWFuIjpvLHVuZGVmaW5lZDoidW5kZWZpbmVkIn0sb3JkZXI6eyJib29sZWFuIjpvLHVuZGVmaW5lZDoidW5kZWZpbmVkIn0sX190eXBlX186eyJib29sZWFuIjpvLG9iamVjdDphfX0sZ3JvdXBPcmRlclN3YXA6eyJmdW5jdGlvbiI6ImZ1bmN0aW9uIn0saGVpZ2h0OntzdHJpbmc6aSxudW1iZXI6bn0saGlkZGVuRGF0ZXM6e3N0YXJ0OntkYXRlOnIsbnVtYmVyOm4sc3RyaW5nOmksbW9tZW50OmR9LGVuZDp7ZGF0ZTpyLG51bWJlcjpuLHN0cmluZzppLG1vbWVudDpkfSxyZXBlYXQ6e3N0cmluZzppfSxfX3R5cGVfXzp7b2JqZWN0OmEsYXJyYXk6c319LGl0ZW1zQWx3YXlzRHJhZ2dhYmxlOnsiYm9vbGVhbiI6b30sbG9jYWxlOntzdHJpbmc6aX0sbG9jYWxlczp7X19hbnlfXzp7YW55Omx9LF9fdHlwZV9fOntvYmplY3Q6YX19LG1hcmdpbjp7YXhpczp7bnVtYmVyOm59LGl0ZW06e2hvcml6b250YWw6e251bWJlcjpuLHVuZGVmaW5lZDoidW5kZWZpbmVkIn0sdmVydGljYWw6e251bWJlcjpuLHVuZGVmaW5lZDoidW5kZWZpbmVkIn0sX190eXBlX186e29iamVjdDphLG51bWJlcjpufX0sX190eXBlX186e29iamVjdDphLG51bWJlcjpufX0sbWF4OntkYXRlOnIsbnVtYmVyOm4sc3RyaW5nOmksbW9tZW50OmR9LG1heEhlaWdodDp7bnVtYmVyOm4sc3RyaW5nOml9LG1heE1pbm9yQ2hhcnM6e251bWJlcjpufSxtaW46e2RhdGU6cixudW1iZXI6bixzdHJpbmc6aSxtb21lbnQ6ZH0sbWluSGVpZ2h0OntudW1iZXI6bixzdHJpbmc6aX0sbW92ZWFibGU6eyJib29sZWFuIjpvfSxtdWx0aXNlbGVjdDp7ImJvb2xlYW4iOm99LG11bHRpc2VsZWN0UGVyR3JvdXA6eyJib29sZWFuIjpvfSxvbkFkZDp7ImZ1bmN0aW9uIjoiZnVuY3Rpb24ifSxvblVwZGF0ZTp7ImZ1bmN0aW9uIjoiZnVuY3Rpb24ifSxvbk1vdmU6eyJmdW5jdGlvbiI6ImZ1bmN0aW9uIn0sb25Nb3Zpbmc6eyJmdW5jdGlvbiI6ImZ1bmN0aW9uIn0sb25SZW1vdmU6eyJmdW5jdGlvbiI6ImZ1bmN0aW9uIn0sb25BZGRHcm91cDp7ImZ1bmN0aW9uIjoiZnVuY3Rpb24ifSxvbk1vdmVHcm91cDp7ImZ1bmN0aW9uIjoiZnVuY3Rpb24ifSxvblJlbW92ZUdyb3VwOnsiZnVuY3Rpb24iOiJmdW5jdGlvbiJ9LG9yZGVyOnsiZnVuY3Rpb24iOiJmdW5jdGlvbiJ9LG9yaWVudGF0aW9uOntheGlzOntzdHJpbmc6aSx1bmRlZmluZWQ6InVuZGVmaW5lZCJ9LGl0ZW06e3N0cmluZzppLHVuZGVmaW5lZDoidW5kZWZpbmVkIn0sX190eXBlX186e3N0cmluZzppLG9iamVjdDphfX0sc2VsZWN0YWJsZTp7ImJvb2xlYW4iOm99LHNob3dDdXJyZW50VGltZTp7ImJvb2xlYW4iOm99LHNob3dNYWpvckxhYmVsczp7ImJvb2xlYW4iOm99LHNob3dNaW5vckxhYmVsczp7ImJvb2xlYW4iOm99LHN0YWNrOnsiYm9vbGVhbiI6b30sc25hcDp7ImZ1bmN0aW9uIjoiZnVuY3Rpb24iLCJudWxsIjoibnVsbCJ9LHN0YXJ0OntkYXRlOnIsbnVtYmVyOm4sc3RyaW5nOmksbW9tZW50OmR9LHRlbXBsYXRlOnsiZnVuY3Rpb24iOiJmdW5jdGlvbiJ9LGdyb3VwVGVtcGxhdGU6eyJmdW5jdGlvbiI6ImZ1bmN0aW9uIn0sdGltZUF4aXM6e3NjYWxlOntzdHJpbmc6aSx1bmRlZmluZWQ6InVuZGVmaW5lZCJ9LHN0ZXA6e251bWJlcjpuLHVuZGVmaW5lZDoidW5kZWZpbmVkIn0sX190eXBlX186e29iamVjdDphfX0sdHlwZTp7c3RyaW5nOml9LHdpZHRoOntzdHJpbmc6aSxudW1iZXI6bn0sem9vbWFibGU6eyJib29sZWFuIjpvfSx6b29tS2V5OntzdHJpbmc6WyJjdHJsS2V5IiwiYWx0S2V5IiwibWV0YUtleSIsIiJdfSx6b29tTWF4OntudW1iZXI6bn0sem9vbU1pbjp7bnVtYmVyOm59LF9fdHlwZV9fOntvYmplY3Q6YX19LGM9e2dsb2JhbDp7YWxpZ246WyJjZW50ZXIiLCJsZWZ0IiwicmlnaHQiXSxhdXRvUmVzaXplOiEwLHRocm90dGxlUmVkcmF3OlsxMCwwLDFlMywxMF0sY2xpY2tUb1VzZTohMSxlZGl0YWJsZTp7YWRkOiExLHJlbW92ZTohMSx1cGRhdGVHcm91cDohMSx1cGRhdGVUaW1lOiExfSxlbmQ6IiIsZm9ybWF0OnttaW5vckxhYmVsczp7bWlsbGlzZWNvbmQ6IlNTUyIsc2Vjb25kOiJzIixtaW51dGU6IkhIOm1tIixob3VyOiJISDptbSIsd2Vla2RheToiZGRkIEQiLGRheToiRCIsbW9udGg6Ik1NTSIseWVhcjoiWVlZWSJ9LG1ham9yTGFiZWxzOnttaWxsaXNlY29uZDoiSEg6bW06c3MiLHNlY29uZDoiRCBNTU1NIEhIOm1tIixtaW51dGU6ImRkZCBEIE1NTU0iLGhvdXI6ImRkZCBEIE1NTU0iLHdlZWtkYXk6Ik1NTU0gWVlZWSIsZGF5OiJNTU1NIFlZWVkiLG1vbnRoOiJZWVlZIix5ZWFyOiIifX0sZ3JvdXBzRHJhZ2dhYmxlOiExLGhlaWdodDoiIixsb2NhbGU6IiIsbWFyZ2luOntheGlzOlsyMCwwLDEwMCwxXSxpdGVtOntob3Jpem9udGFsOlsxMCwwLDEwMCwxXSx2ZXJ0aWNhbDpbMTAsMCwxMDAsMV19fSxtYXg6IiIsbWF4SGVpZ2h0OiIiLG1heE1pbm9yQ2hhcnM6WzcsMCwyMCwxXSxtaW46IiIsbWluSGVpZ2h0OiIiLG1vdmVhYmxlOiExLG11bHRpc2VsZWN0OiExLG11bHRpc2VsZWN0UGVyR3JvdXA6ITEsb3JpZW50YXRpb246e2F4aXM6WyJib3RoIiwiYm90dG9tIiwidG9wIl0saXRlbTpbImJvdHRvbSIsInRvcCJdfSxzZWxlY3RhYmxlOiEwLHNob3dDdXJyZW50VGltZTohMSxzaG93TWFqb3JMYWJlbHM6ITAsc2hvd01pbm9yTGFiZWxzOiEwLHN0YWNrOiEwLHN0YXJ0OiIiLHR5cGU6WyJib3giLCJwb2ludCIsInJhbmdlIiwiYmFja2dyb3VuZCJdLHdpZHRoOiIxMDAlIix6b29tYWJsZTohMCx6b29tS2V5OlsiY3RybEtleSIsImFsdEtleSIsIm1ldGFLZXkiLCIiXSx6b29tTWF4OlszMTUzNmUxMCwxMCwzMTUzNmUxMCwxXSx6b29tTWluOlsxMCwxMCwzMTUzNmUxMCwxXX19O2UuYWxsT3B0aW9ucz11LGUuY29uZmlndXJlT3B0aW9ucz1jfSxmdW5jdGlvbih0LGUsaSl7ZnVuY3Rpb24gbyh0LGUsaSxvKXtpZighKEFycmF5LmlzQXJyYXkoaSl8fGkgaW5zdGFuY2VvZiByfHxpIGluc3RhbmNlb2YgYSkmJmkgaW5zdGFuY2VvZiBPYmplY3Qpe3ZhciBkPW87bz1pLGk9ZH12YXIgYz10aGlzO3RoaXMuZGVmYXVsdE9wdGlvbnM9e3N0YXJ0Om51bGwsZW5kOm51bGwsYXV0b1Jlc2l6ZTohMCxvcmllbnRhdGlvbjp7YXhpczoiYm90dG9tIixpdGVtOiJib3R0b20ifSxtb21lbnQ6bix3aWR0aDpudWxsLGhlaWdodDpudWxsLG1heEhlaWdodDpudWxsLG1pbkhlaWdodDpudWxsfSx0aGlzLm9wdGlvbnM9cy5kZWVwRXh0ZW5kKHt9LHRoaXMuZGVmYXVsdE9wdGlvbnMpLHRoaXMuX2NyZWF0ZSh0KSx0aGlzLmNvbXBvbmVudHM9W10sdGhpcy5ib2R5PXtkb206dGhpcy5kb20sZG9tUHJvcHM6dGhpcy5wcm9wcyxlbWl0dGVyOntvbjp0aGlzLm9uLmJpbmQodGhpcyksb2ZmOnRoaXMub2ZmLmJpbmQodGhpcyksZW1pdDp0aGlzLmVtaXQuYmluZCh0aGlzKX0saGlkZGVuRGF0ZXM6W10sdXRpbDp7dG9TY3JlZW46Yy5fdG9TY3JlZW4uYmluZChjKSx0b0dsb2JhbFNjcmVlbjpjLl90b0dsb2JhbFNjcmVlbi5iaW5kKGMpLHRvVGltZTpjLl90b1RpbWUuYmluZChjKSx0b0dsb2JhbFRpbWU6Yy5fdG9HbG9iYWxUaW1lLmJpbmQoYyl9fSx0aGlzLnJhbmdlPW5ldyBoKHRoaXMuYm9keSksdGhpcy5jb21wb25lbnRzLnB1c2godGhpcy5yYW5nZSksdGhpcy5ib2R5LnJhbmdlPXRoaXMucmFuZ2UsdGhpcy50aW1lQXhpcz1uZXcgbCh0aGlzLmJvZHkpLHRoaXMuY29tcG9uZW50cy5wdXNoKHRoaXMudGltZUF4aXMpLHRoaXMuY3VycmVudFRpbWU9bmV3IHUodGhpcy5ib2R5KSx0aGlzLmNvbXBvbmVudHMucHVzaCh0aGlzLmN1cnJlbnRUaW1lKSx0aGlzLmxpbmVncmFwaD1uZXcgcCh0aGlzLmJvZHkpLHRoaXMuY29tcG9uZW50cy5wdXNoKHRoaXMubGluZWdyYXBoKSx0aGlzLml0ZW1zRGF0YT1udWxsLHRoaXMuZ3JvdXBzRGF0YT1udWxsLHRoaXMub24oInRhcCIsZnVuY3Rpb24odCl7Yy5lbWl0KCJjbGljayIsYy5nZXRFdmVudFByb3BlcnRpZXModCkpfSksdGhpcy5vbigiZG91YmxldGFwIixmdW5jdGlvbih0KXtjLmVtaXQoImRvdWJsZUNsaWNrIixjLmdldEV2ZW50UHJvcGVydGllcyh0KSl9KSx0aGlzLmRvbS5yb290Lm9uY29udGV4dG1lbnU9ZnVuY3Rpb24odCl7Yy5lbWl0KCJjb250ZXh0bWVudSIsYy5nZXRFdmVudFByb3BlcnRpZXModCkpfSxvJiZ0aGlzLnNldE9wdGlvbnMobyksaSYmdGhpcy5zZXRHcm91cHMoaSksZT90aGlzLnNldEl0ZW1zKGUpOnRoaXMuX3JlZHJhdygpfXZhciBuPShpKDEyKSxpKDIwKSxpKDIpKSxzPWkoMSkscj1pKDgpLGE9aSgxMCksaD1pKDIzKSxkPWkoMjcpLGw9aSgzOCksdT1pKDQzKSxjPWkoNDEpLHA9aSg0OSksZj1pKDQ0KSxtPWkoNDYpWyJkZWZhdWx0Il0sdj1pKDQ2KS5wcmludFN0eWxlLGc9aSg1NykuYWxsT3B0aW9ucyx5PWkoNTcpLmNvbmZpZ3VyZU9wdGlvbnM7by5wcm90b3R5cGU9bmV3IGQsby5wcm90b3R5cGUuc2V0T3B0aW9ucz1mdW5jdGlvbih0KXt2YXIgZT1tLnZhbGlkYXRlKHQsZyk7ZT09PSEwJiZjb25zb2xlLmxvZygiJWNFcnJvcnMgaGF2ZSBiZWVuIGZvdW5kIGluIHRoZSBzdXBwbGllZCBvcHRpb25zIG9iamVjdC4iLHYpLGQucHJvdG90eXBlLnNldE9wdGlvbnMuY2FsbCh0aGlzLHQpfSxvLnByb3RvdHlwZS5zZXRJdGVtcz1mdW5jdGlvbih0KXt2YXIgZSxpPW51bGw9PXRoaXMuaXRlbXNEYXRhO2lmKGU9dD90IGluc3RhbmNlb2Ygcnx8dCBpbnN0YW5jZW9mIGE/dDpuZXcgcih0LHt0eXBlOntzdGFydDoiRGF0ZSIsZW5kOiJEYXRlIn19KTpudWxsLHRoaXMuaXRlbXNEYXRhPWUsdGhpcy5saW5lZ3JhcGgmJnRoaXMubGluZWdyYXBoLnNldEl0ZW1zKGUpLGkpaWYodm9pZCAwIT10aGlzLm9wdGlvbnMuc3RhcnR8fHZvaWQgMCE9dGhpcy5vcHRpb25zLmVuZCl7dmFyIG89dm9pZCAwIT10aGlzLm9wdGlvbnMuc3RhcnQ/dGhpcy5vcHRpb25zLnN0YXJ0Om51bGwsbj12b2lkIDAhPXRoaXMub3B0aW9ucy5lbmQ/dGhpcy5vcHRpb25zLmVuZDpudWxsO3RoaXMuc2V0V2luZG93KG8sbix7YW5pbWF0aW9uOiExfSl9ZWxzZSB0aGlzLmZpdCh7YW5pbWF0aW9uOiExfSl9LG8ucHJvdG90eXBlLnNldEdyb3Vwcz1mdW5jdGlvbih0KXt2YXIgZTtlPXQ/dCBpbnN0YW5jZW9mIHJ8fHQgaW5zdGFuY2VvZiBhP3Q6bmV3IHIodCk6bnVsbCx0aGlzLmdyb3Vwc0RhdGE9ZSx0aGlzLmxpbmVncmFwaC5zZXRHcm91cHMoZSl9LG8ucHJvdG90eXBlLmdldExlZ2VuZD1mdW5jdGlvbih0LGUsaSl7cmV0dXJuIHZvaWQgMD09PWUmJihlPTE1KSx2b2lkIDA9PT1pJiYoaT0xNSksdm9pZCAwIT09dGhpcy5saW5lZ3JhcGguZ3JvdXBzW3RdP3RoaXMubGluZWdyYXBoLmdyb3Vwc1t0XS5nZXRMZWdlbmQoZSxpKToiY2Fubm90IGZpbmQgZ3JvdXA6JyIrdCsiJyJ9LG8ucHJvdG90eXBlLmlzR3JvdXBWaXNpYmxlPWZ1bmN0aW9uKHQpe3JldHVybiB2b2lkIDAhPT10aGlzLmxpbmVncmFwaC5ncm91cHNbdF0/dGhpcy5saW5lZ3JhcGguZ3JvdXBzW3RdLnZpc2libGUmJih2b2lkIDA9PT10aGlzLmxpbmVncmFwaC5vcHRpb25zLmdyb3Vwcy52aXNpYmlsaXR5W3RdfHwxPT10aGlzLmxpbmVncmFwaC5vcHRpb25zLmdyb3Vwcy52aXNpYmlsaXR5W3RdKTohMX0sby5wcm90b3R5cGUuZ2V0RGF0YVJhbmdlPWZ1bmN0aW9uKCl7dmFyIHQ9bnVsbCxlPW51bGw7Zm9yKHZhciBpIGluIHRoaXMubGluZWdyYXBoLmdyb3VwcylpZih0aGlzLmxpbmVncmFwaC5ncm91cHMuaGFzT3duUHJvcGVydHkoaSkmJjE9PXRoaXMubGluZWdyYXBoLmdyb3Vwc1tpXS52aXNpYmxlKWZvcih2YXIgbz0wO288dGhpcy5saW5lZ3JhcGguZ3JvdXBzW2ldLml0ZW1zRGF0YS5sZW5ndGg7bysrKXt2YXIgbj10aGlzLmxpbmVncmFwaC5ncm91cHNbaV0uaXRlbXNEYXRhW29dLHI9cy5jb252ZXJ0KG4ueCwiRGF0ZSIpLnZhbHVlT2YoKTt0PW51bGw9PXQ/cjp0PnI/cjp0LGU9bnVsbD09ZT9yOnI+ZT9yOmV9cmV0dXJue21pbjpudWxsIT10P25ldyBEYXRlKHQpOm51bGwsbWF4Om51bGwhPWU/bmV3IERhdGUoZSk6bnVsbH19LG8ucHJvdG90eXBlLmdldEV2ZW50UHJvcGVydGllcz1mdW5jdGlvbih0KXt2YXIgZT10LmNlbnRlcj90LmNlbnRlci54OnQuY2xpZW50WCxpPXQuY2VudGVyP3QuY2VudGVyLnk6dC5jbGllbnRZLG89ZS1zLmdldEFic29sdXRlTGVmdCh0aGlzLmRvbS5jZW50ZXJDb250YWluZXIpLG49aS1zLmdldEFic29sdXRlVG9wKHRoaXMuZG9tLmNlbnRlckNvbnRhaW5lcikscj10aGlzLl90b1RpbWUobyksYT1jLmN1c3RvbVRpbWVGcm9tVGFyZ2V0KHQpLGg9cy5nZXRUYXJnZXQodCksZD1udWxsO3MuaGFzUGFyZW50KGgsdGhpcy50aW1lQXhpcy5kb20uZm9yZWdyb3VuZCk/ZD0iYXhpcyI6dGhpcy50aW1lQXhpczImJnMuaGFzUGFyZW50KGgsdGhpcy50aW1lQXhpczIuZG9tLmZvcmVncm91bmQpP2Q9ImF4aXMiOnMuaGFzUGFyZW50KGgsdGhpcy5saW5lZ3JhcGgueUF4aXNMZWZ0LmRvbS5mcmFtZSk/ZD0iZGF0YS1heGlzIjpzLmhhc1BhcmVudChoLHRoaXMubGluZWdyYXBoLnlBeGlzUmlnaHQuZG9tLmZyYW1lKT9kPSJkYXRhLWF4aXMiOnMuaGFzUGFyZW50KGgsdGhpcy5saW5lZ3JhcGgubGVnZW5kTGVmdC5kb20uZnJhbWUpP2Q9ImxlZ2VuZCI6cy5oYXNQYXJlbnQoaCx0aGlzLmxpbmVncmFwaC5sZWdlbmRSaWdodC5kb20uZnJhbWUpP2Q9ImxlZ2VuZCI6bnVsbCE9YT9kPSJjdXN0b20tdGltZSI6cy5oYXNQYXJlbnQoaCx0aGlzLmN1cnJlbnRUaW1lLmJhcik/ZD0iY3VycmVudC10aW1lIjpzLmhhc1BhcmVudChoLHRoaXMuZG9tLmNlbnRlcikmJihkPSJiYWNrZ3JvdW5kIik7dmFyIGw9W10sdT10aGlzLmxpbmVncmFwaC55QXhpc0xlZnQscD10aGlzLmxpbmVncmFwaC55QXhpc1JpZ2h0O3JldHVybiB1LmhpZGRlbnx8bC5wdXNoKHUuc2NyZWVuVG9WYWx1ZShuKSkscC5oaWRkZW58fGwucHVzaChwLnNjcmVlblRvVmFsdWUobikpLHtldmVudDp0LHdoYXQ6ZCxwYWdlWDp0LnNyY0V2ZW50P3Quc3JjRXZlbnQucGFnZVg6dC5wYWdlWCxwYWdlWTp0LnNyY0V2ZW50P3Quc3JjRXZlbnQucGFnZVk6dC5wYWdlWSx4Om8seTpuLHRpbWU6cix2YWx1ZTpsfX0sby5wcm90b3R5cGUuX2NyZWF0ZUNvbmZpZ3VyYXRvcj1mdW5jdGlvbigpe3JldHVybiBuZXcgZih0aGlzLHRoaXMuZG9tLmNvbnRhaW5lcix5KX0sdC5leHBvcnRzPW99LGZ1bmN0aW9uKHQsZSxpKXtmdW5jdGlvbiBvKHQsZSl7dGhpcy5pZD1uLnJhbmRvbVVVSUQoKSx0aGlzLmJvZHk9dCx0aGlzLmRlZmF1bHRPcHRpb25zPXt5QXhpc09yaWVudGF0aW9uOiJsZWZ0IixkZWZhdWx0R3JvdXA6ImRlZmF1bHQiLHNvcnQ6ITAsc2FtcGxpbmc6ITAsc3RhY2s6ITEsZ3JhcGhIZWlnaHQ6IjQwMHB4IixzaGFkZWQ6e2VuYWJsZWQ6ITEsb3JpZW50YXRpb246ImJvdHRvbSJ9LHN0eWxlOiJsaW5lIixiYXJDaGFydDp7d2lkdGg6NTAsc2lkZUJ5U2lkZTohMSxhbGlnbjoiY2VudGVyIn0saW50ZXJwb2xhdGlvbjp7ZW5hYmxlZDohMCxwYXJhbWV0cml6YXRpb246ImNlbnRyaXBldGFsIixhbHBoYTouNX0sZHJhd1BvaW50czp7ZW5hYmxlZDohMCxzaXplOjYsc3R5bGU6InNxdWFyZSJ9LGRhdGFBeGlzOntzaG93TWlub3JMYWJlbHM6ITAsc2hvd01ham9yTGFiZWxzOiEwLGljb25zOiExLHdpZHRoOiI0MHB4Iix2aXNpYmxlOiEwLGFsaWduWmVyb3M6ITAsbGVmdDp7cmFuZ2U6e21pbjp2b2lkIDAsbWF4OnZvaWQgMH0sZm9ybWF0OmZ1bmN0aW9uKHQpe3JldHVybiB0fSx0aXRsZTp7dGV4dDp2b2lkIDAsc3R5bGU6dm9pZCAwfX0scmlnaHQ6e3JhbmdlOnttaW46dm9pZCAwLG1heDp2b2lkIDB9LGZvcm1hdDpmdW5jdGlvbih0KXtyZXR1cm4gdH0sdGl0bGU6e3RleHQ6dm9pZCAwLHN0eWxlOnZvaWQgMH19fSxsZWdlbmQ6e2VuYWJsZWQ6ITEsaWNvbnM6ITAsbGVmdDp7dmlzaWJsZTohMCxwb3NpdGlvbjoidG9wLWxlZnQifSxyaWdodDp7dmlzaWJsZTohMCxwb3NpdGlvbjoidG9wLXJpZ2h0In19LGdyb3Vwczp7dmlzaWJpbGl0eTp7fX19LHRoaXMub3B0aW9ucz1uLmV4dGVuZCh7fSx0aGlzLmRlZmF1bHRPcHRpb25zKSx0aGlzLmRvbT17fSx0aGlzLnByb3BzPXt9LHRoaXMuaGFtbWVyPW51bGwsdGhpcy5ncm91cHM9e30sdGhpcy5hYm9ydGVkR3JhcGhVcGRhdGU9ITEsdGhpcy51cGRhdGVTVkdoZWlnaHQ9ITEsdGhpcy51cGRhdGVTVkdoZWlnaHRPblJlc2l6ZT0hMTt2YXIgaT10aGlzO3RoaXMuaXRlbXNEYXRhPW51bGwsdGhpcy5ncm91cHNEYXRhPW51bGwsdGhpcy5pdGVtTGlzdGVuZXJzPXthZGQ6ZnVuY3Rpb24odCxlLG8pe2kuX29uQWRkKGUuaXRlbXMpfSx1cGRhdGU6ZnVuY3Rpb24odCxlLG8pe2kuX29uVXBkYXRlKGUuaXRlbXMpfSxyZW1vdmU6ZnVuY3Rpb24odCxlLG8pe2kuX29uUmVtb3ZlKGUuaXRlbXMpfX0sdGhpcy5ncm91cExpc3RlbmVycz17YWRkOmZ1bmN0aW9uKHQsZSxvKXtpLl9vbkFkZEdyb3VwcyhlLml0ZW1zKX0sdXBkYXRlOmZ1bmN0aW9uKHQsZSxvKXtpLl9vblVwZGF0ZUdyb3VwcyhlLml0ZW1zKX0scmVtb3ZlOmZ1bmN0aW9uKHQsZSxvKXtpLl9vblJlbW92ZUdyb3VwcyhlLml0ZW1zKX19LHRoaXMuaXRlbXM9e30sdGhpcy5zZWxlY3Rpb249W10sdGhpcy5sYXN0U3RhcnQ9dGhpcy5ib2R5LnJhbmdlLnN0YXJ0LHRoaXMudG91Y2hQYXJhbXM9e30sdGhpcy5zdmdFbGVtZW50cz17fSx0aGlzLnNldE9wdGlvbnMoZSksdGhpcy5ncm91cHNVc2luZ0RlZmF1bHRTdHlsZXM9WzBdLHRoaXMuQ09VTlRFUj0wLHRoaXMuYm9keS5lbWl0dGVyLm9uKCJyYW5nZWNoYW5nZWQiLGZ1bmN0aW9uKCl7aS5sYXN0U3RhcnQ9aS5ib2R5LnJhbmdlLnN0YXJ0LGkuc3ZnLnN0eWxlLmxlZnQ9bi5vcHRpb24uYXNTaXplKC1pLnByb3BzLndpZHRoKSxpLnJlZHJhdy5jYWxsKGksITApfSksdGhpcy5fY3JlYXRlKCksdGhpcy5mcmFtZXdvcms9e3N2Zzp0aGlzLnN2ZyxzdmdFbGVtZW50czp0aGlzLnN2Z0VsZW1lbnRzLG9wdGlvbnM6dGhpcy5vcHRpb25zLGdyb3Vwczp0aGlzLmdyb3Vwc30sdGhpcy5ib2R5LmVtaXR0ZXIuZW1pdCgiY2hhbmdlIil9dmFyIG49aSgxKSxzPWkoNykscj1pKDgpLGE9aSgxMCksaD1pKDI1KSxkPWkoNTApLGw9aSg1MiksdT1pKDU2KSxjPWkoNTMpLHA9aSg1NSksZj1pKDU0KSxtPSJfX3VuZ3JvdXBlZF9fIjtvLnByb3RvdHlwZT1uZXcgaCxvLnByb3RvdHlwZS5fY3JlYXRlPWZ1bmN0aW9uKCl7dmFyIHQ9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2Iik7dC5jbGFzc05hbWU9InZpcy1saW5lLWdyYXBoIix0aGlzLmRvbS5mcmFtZT10LHRoaXMuc3ZnPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnROUygiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciLCJzdmciKSx0aGlzLnN2Zy5zdHlsZS5wb3NpdGlvbj0icmVsYXRpdmUiLHRoaXMuc3ZnLnN0eWxlLmhlaWdodD0oIiIrdGhpcy5vcHRpb25zLmdyYXBoSGVpZ2h0KS5yZXBsYWNlKCJweCIsIiIpKyJweCIsdGhpcy5zdmcuc3R5bGUuZGlzcGxheT0iYmxvY2siLHQuYXBwZW5kQ2hpbGQodGhpcy5zdmcpLHRoaXMub3B0aW9ucy5kYXRhQXhpcy5vcmllbnRhdGlvbj0ibGVmdCIsdGhpcy55QXhpc0xlZnQ9bmV3IGQodGhpcy5ib2R5LHRoaXMub3B0aW9ucy5kYXRhQXhpcyx0aGlzLnN2Zyx0aGlzLm9wdGlvbnMuZ3JvdXBzKSx0aGlzLm9wdGlvbnMuZGF0YUF4aXMub3JpZW50YXRpb249InJpZ2h0Iix0aGlzLnlBeGlzUmlnaHQ9bmV3IGQodGhpcy5ib2R5LHRoaXMub3B0aW9ucy5kYXRhQXhpcyx0aGlzLnN2Zyx0aGlzLm9wdGlvbnMuZ3JvdXBzKSxkZWxldGUgdGhpcy5vcHRpb25zLmRhdGFBeGlzLm9yaWVudGF0aW9uLAp0aGlzLmxlZ2VuZExlZnQ9bmV3IHUodGhpcy5ib2R5LHRoaXMub3B0aW9ucy5sZWdlbmQsImxlZnQiLHRoaXMub3B0aW9ucy5ncm91cHMpLHRoaXMubGVnZW5kUmlnaHQ9bmV3IHUodGhpcy5ib2R5LHRoaXMub3B0aW9ucy5sZWdlbmQsInJpZ2h0Iix0aGlzLm9wdGlvbnMuZ3JvdXBzKSx0aGlzLnNob3coKX0sby5wcm90b3R5cGUuc2V0T3B0aW9ucz1mdW5jdGlvbih0KXtpZih0KXt2YXIgZT1bInNhbXBsaW5nIiwiZGVmYXVsdEdyb3VwIiwic3RhY2siLCJoZWlnaHQiLCJncmFwaEhlaWdodCIsInlBeGlzT3JpZW50YXRpb24iLCJzdHlsZSIsImJhckNoYXJ0IiwiZGF0YUF4aXMiLCJzb3J0IiwiZ3JvdXBzIl07dm9pZCAwPT09dC5ncmFwaEhlaWdodCYmdm9pZCAwIT09dC5oZWlnaHQmJnZvaWQgMCE9PXRoaXMuYm9keS5kb21Qcm9wcy5jZW50ZXJDb250YWluZXIuaGVpZ2h0Pyh0aGlzLnVwZGF0ZVNWR2hlaWdodD0hMCx0aGlzLnVwZGF0ZVNWR2hlaWdodE9uUmVzaXplPSEwKTp2b2lkIDAhPT10aGlzLmJvZHkuZG9tUHJvcHMuY2VudGVyQ29udGFpbmVyLmhlaWdodCYmdm9pZCAwIT09dC5ncmFwaEhlaWdodCYmcGFyc2VJbnQoKHQuZ3JhcGhIZWlnaHQrIiIpLnJlcGxhY2UoInB4IiwiIikpPHRoaXMuYm9keS5kb21Qcm9wcy5jZW50ZXJDb250YWluZXIuaGVpZ2h0JiYodGhpcy51cGRhdGVTVkdoZWlnaHQ9ITApLG4uc2VsZWN0aXZlRGVlcEV4dGVuZChlLHRoaXMub3B0aW9ucyx0KSxuLm1lcmdlT3B0aW9ucyh0aGlzLm9wdGlvbnMsdCwiaW50ZXJwb2xhdGlvbiIpLG4ubWVyZ2VPcHRpb25zKHRoaXMub3B0aW9ucyx0LCJkcmF3UG9pbnRzIiksbi5tZXJnZU9wdGlvbnModGhpcy5vcHRpb25zLHQsInNoYWRlZCIpLG4ubWVyZ2VPcHRpb25zKHRoaXMub3B0aW9ucyx0LCJsZWdlbmQiKSx0LmludGVycG9sYXRpb24mJiJvYmplY3QiPT10eXBlb2YgdC5pbnRlcnBvbGF0aW9uJiZ0LmludGVycG9sYXRpb24ucGFyYW1ldHJpemF0aW9uJiYoInVuaWZvcm0iPT10LmludGVycG9sYXRpb24ucGFyYW1ldHJpemF0aW9uP3RoaXMub3B0aW9ucy5pbnRlcnBvbGF0aW9uLmFscGhhPTA6ImNob3JkYWwiPT10LmludGVycG9sYXRpb24ucGFyYW1ldHJpemF0aW9uP3RoaXMub3B0aW9ucy5pbnRlcnBvbGF0aW9uLmFscGhhPTE6KHRoaXMub3B0aW9ucy5pbnRlcnBvbGF0aW9uLnBhcmFtZXRyaXphdGlvbj0iY2VudHJpcGV0YWwiLHRoaXMub3B0aW9ucy5pbnRlcnBvbGF0aW9uLmFscGhhPS41KSksdGhpcy55QXhpc0xlZnQmJnZvaWQgMCE9PXQuZGF0YUF4aXMmJih0aGlzLnlBeGlzTGVmdC5zZXRPcHRpb25zKHRoaXMub3B0aW9ucy5kYXRhQXhpcyksdGhpcy55QXhpc1JpZ2h0LnNldE9wdGlvbnModGhpcy5vcHRpb25zLmRhdGFBeGlzKSksdGhpcy5sZWdlbmRMZWZ0JiZ2b2lkIDAhPT10LmxlZ2VuZCYmKHRoaXMubGVnZW5kTGVmdC5zZXRPcHRpb25zKHRoaXMub3B0aW9ucy5sZWdlbmQpLHRoaXMubGVnZW5kUmlnaHQuc2V0T3B0aW9ucyh0aGlzLm9wdGlvbnMubGVnZW5kKSksdGhpcy5ncm91cHMuaGFzT3duUHJvcGVydHkobSkmJnRoaXMuZ3JvdXBzW21dLnNldE9wdGlvbnModCl9dGhpcy5kb20uZnJhbWUmJnRoaXMucmVkcmF3KCEwKX0sby5wcm90b3R5cGUuaGlkZT1mdW5jdGlvbigpe3RoaXMuZG9tLmZyYW1lLnBhcmVudE5vZGUmJnRoaXMuZG9tLmZyYW1lLnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQodGhpcy5kb20uZnJhbWUpfSxvLnByb3RvdHlwZS5zaG93PWZ1bmN0aW9uKCl7dGhpcy5kb20uZnJhbWUucGFyZW50Tm9kZXx8dGhpcy5ib2R5LmRvbS5jZW50ZXIuYXBwZW5kQ2hpbGQodGhpcy5kb20uZnJhbWUpfSxvLnByb3RvdHlwZS5zZXRJdGVtcz1mdW5jdGlvbih0KXt2YXIgZSxpPXRoaXMsbz10aGlzLml0ZW1zRGF0YTtpZih0KXtpZighKHQgaW5zdGFuY2VvZiByfHx0IGluc3RhbmNlb2YgYSkpdGhyb3cgbmV3IFR5cGVFcnJvcigiRGF0YSBtdXN0IGJlIGFuIGluc3RhbmNlIG9mIERhdGFTZXQgb3IgRGF0YVZpZXciKTt0aGlzLml0ZW1zRGF0YT10fWVsc2UgdGhpcy5pdGVtc0RhdGE9bnVsbDtpZihvJiYobi5mb3JFYWNoKHRoaXMuaXRlbUxpc3RlbmVycyxmdW5jdGlvbih0LGUpe28ub2ZmKGUsdCl9KSxlPW8uZ2V0SWRzKCksdGhpcy5fb25SZW1vdmUoZSkpLHRoaXMuaXRlbXNEYXRhKXt2YXIgcz10aGlzLmlkO24uZm9yRWFjaCh0aGlzLml0ZW1MaXN0ZW5lcnMsZnVuY3Rpb24odCxlKXtpLml0ZW1zRGF0YS5vbihlLHQscyl9KSxlPXRoaXMuaXRlbXNEYXRhLmdldElkcygpLHRoaXMuX29uQWRkKGUpfX0sby5wcm90b3R5cGUuc2V0R3JvdXBzPWZ1bmN0aW9uKHQpe3ZhciBlLGk9dGhpcztpZih0aGlzLmdyb3Vwc0RhdGEpe24uZm9yRWFjaCh0aGlzLmdyb3VwTGlzdGVuZXJzLGZ1bmN0aW9uKHQsZSl7aS5ncm91cHNEYXRhLm9mZihlLHQpfSksZT10aGlzLmdyb3Vwc0RhdGEuZ2V0SWRzKCksdGhpcy5ncm91cHNEYXRhPW51bGw7Zm9yKHZhciBvPTA7bzxlLmxlbmd0aDtvKyspdGhpcy5fcmVtb3ZlR3JvdXAoZVtvXSl9aWYodCl7aWYoISh0IGluc3RhbmNlb2Ygcnx8dCBpbnN0YW5jZW9mIGEpKXRocm93IG5ldyBUeXBlRXJyb3IoIkRhdGEgbXVzdCBiZSBhbiBpbnN0YW5jZSBvZiBEYXRhU2V0IG9yIERhdGFWaWV3Iik7dGhpcy5ncm91cHNEYXRhPXR9ZWxzZSB0aGlzLmdyb3Vwc0RhdGE9bnVsbDtpZih0aGlzLmdyb3Vwc0RhdGEpe3ZhciBzPXRoaXMuaWQ7bi5mb3JFYWNoKHRoaXMuZ3JvdXBMaXN0ZW5lcnMsZnVuY3Rpb24odCxlKXtpLmdyb3Vwc0RhdGEub24oZSx0LHMpfSksZT10aGlzLmdyb3Vwc0RhdGEuZ2V0SWRzKCksdGhpcy5fb25BZGRHcm91cHMoZSl9fSxvLnByb3RvdHlwZS5fb25VcGRhdGU9ZnVuY3Rpb24odCl7dGhpcy5fdXBkYXRlQWxsR3JvdXBEYXRhKCksdGhpcy5yZWRyYXcoITApfSxvLnByb3RvdHlwZS5fb25BZGQ9ZnVuY3Rpb24odCl7dGhpcy5fb25VcGRhdGUodCl9LG8ucHJvdG90eXBlLl9vblJlbW92ZT1mdW5jdGlvbih0KXt0aGlzLl9vblVwZGF0ZSh0KX0sby5wcm90b3R5cGUuX29uVXBkYXRlR3JvdXBzPWZ1bmN0aW9uKHQpe3RoaXMuX3VwZGF0ZUFsbEdyb3VwRGF0YSgpLHRoaXMucmVkcmF3KCEwKX0sby5wcm90b3R5cGUuX29uQWRkR3JvdXBzPWZ1bmN0aW9uKHQpe3RoaXMuX29uVXBkYXRlR3JvdXBzKHQpfSxvLnByb3RvdHlwZS5fb25SZW1vdmVHcm91cHM9ZnVuY3Rpb24odCl7Zm9yKHZhciBlPTA7ZTx0Lmxlbmd0aDtlKyspdGhpcy5fcmVtb3ZlR3JvdXAodFtlXSk7dGhpcy5yZWRyYXcoITApfSxvLnByb3RvdHlwZS5fcmVtb3ZlR3JvdXA9ZnVuY3Rpb24odCl7dGhpcy5ncm91cHMuaGFzT3duUHJvcGVydHkodCkmJigicmlnaHQiPT10aGlzLmdyb3Vwc1t0XS5vcHRpb25zLnlBeGlzT3JpZW50YXRpb24/KHRoaXMueUF4aXNSaWdodC5yZW1vdmVHcm91cCh0KSx0aGlzLmxlZ2VuZFJpZ2h0LnJlbW92ZUdyb3VwKHQpLHRoaXMubGVnZW5kUmlnaHQucmVkcmF3KCkpOih0aGlzLnlBeGlzTGVmdC5yZW1vdmVHcm91cCh0KSx0aGlzLmxlZ2VuZExlZnQucmVtb3ZlR3JvdXAodCksdGhpcy5sZWdlbmRMZWZ0LnJlZHJhdygpKSxkZWxldGUgdGhpcy5ncm91cHNbdF0pfSxvLnByb3RvdHlwZS5fdXBkYXRlR3JvdXA9ZnVuY3Rpb24odCxlKXt0aGlzLmdyb3Vwcy5oYXNPd25Qcm9wZXJ0eShlKT8odGhpcy5ncm91cHNbZV0udXBkYXRlKHQpLCJyaWdodCI9PXRoaXMuZ3JvdXBzW2VdLm9wdGlvbnMueUF4aXNPcmllbnRhdGlvbj8odGhpcy55QXhpc1JpZ2h0LnVwZGF0ZUdyb3VwKGUsdGhpcy5ncm91cHNbZV0pLHRoaXMubGVnZW5kUmlnaHQudXBkYXRlR3JvdXAoZSx0aGlzLmdyb3Vwc1tlXSkpOih0aGlzLnlBeGlzTGVmdC51cGRhdGVHcm91cChlLHRoaXMuZ3JvdXBzW2VdKSx0aGlzLmxlZ2VuZExlZnQudXBkYXRlR3JvdXAoZSx0aGlzLmdyb3Vwc1tlXSkpKToodGhpcy5ncm91cHNbZV09bmV3IGwodCxlLHRoaXMub3B0aW9ucyx0aGlzLmdyb3Vwc1VzaW5nRGVmYXVsdFN0eWxlcyksInJpZ2h0Ij09dGhpcy5ncm91cHNbZV0ub3B0aW9ucy55QXhpc09yaWVudGF0aW9uPyh0aGlzLnlBeGlzUmlnaHQuYWRkR3JvdXAoZSx0aGlzLmdyb3Vwc1tlXSksdGhpcy5sZWdlbmRSaWdodC5hZGRHcm91cChlLHRoaXMuZ3JvdXBzW2VdKSk6KHRoaXMueUF4aXNMZWZ0LmFkZEdyb3VwKGUsdGhpcy5ncm91cHNbZV0pLHRoaXMubGVnZW5kTGVmdC5hZGRHcm91cChlLHRoaXMuZ3JvdXBzW2VdKSkpLHRoaXMubGVnZW5kTGVmdC5yZWRyYXcoKSx0aGlzLmxlZ2VuZFJpZ2h0LnJlZHJhdygpfSxvLnByb3RvdHlwZS5fdXBkYXRlQWxsR3JvdXBEYXRhPWZ1bmN0aW9uKCl7aWYobnVsbCE9dGhpcy5pdGVtc0RhdGEpe2Zvcih2YXIgdD17fSxlPXRoaXMuaXRlbXNEYXRhLmdldCgpLGk9e30sbz0wO288ZS5sZW5ndGg7bysrKXt2YXIgcz1lW29dLHI9cy5ncm91cDsobnVsbD09PXJ8fHZvaWQgMD09PXIpJiYocj1tKSxpLmhhc093blByb3BlcnR5KHIpP2lbcl0rKzppW3JdPTF9Zm9yKHZhciBvPTA7bzxlLmxlbmd0aDtvKyspe3ZhciBzPWVbb10scj1zLmdyb3VwOyhudWxsPT09cnx8dm9pZCAwPT09cikmJihyPW0pLHQuaGFzT3duUHJvcGVydHkocil8fCh0W3JdPW5ldyBBcnJheShpW3JdKSk7dmFyIGE9bi5icmlkZ2VPYmplY3Qocyk7YS54PW4uY29udmVydChzLngsIkRhdGUiKSxhLm9yZ2luYWxZPXMueSxhLnk9TnVtYmVyKHMueSk7dmFyIGg9dFtyXS5sZW5ndGgtaVtyXS0tO3Rbcl1baF09YX1mb3IodmFyIHIgaW4gdGhpcy5ncm91cHMpdGhpcy5ncm91cHMuaGFzT3duUHJvcGVydHkocikmJih0Lmhhc093blByb3BlcnR5KHIpfHwodFtyXT1uZXcgQXJyYXkoMCkpKTtmb3IodmFyIHIgaW4gdClpZih0Lmhhc093blByb3BlcnR5KHIpKWlmKDA9PXRbcl0ubGVuZ3RoKXRoaXMuZ3JvdXBzLmhhc093blByb3BlcnR5KHIpJiZ0aGlzLl9yZW1vdmVHcm91cChyKTtlbHNle3ZhciBkPXZvaWQgMDt2b2lkIDAhPXRoaXMuZ3JvdXBzRGF0YSYmKGQ9dGhpcy5ncm91cHNEYXRhLmdldChyKSksdm9pZCAwPT1kJiYoZD17aWQ6cixjb250ZW50OnRoaXMub3B0aW9ucy5kZWZhdWx0R3JvdXArcn0pLHRoaXMuX3VwZGF0ZUdyb3VwKGQsciksdGhpcy5ncm91cHNbcl0uc2V0SXRlbXModFtyXSl9fX0sby5wcm90b3R5cGUucmVkcmF3PWZ1bmN0aW9uKHQpe3ZhciBlPSExO3RoaXMucHJvcHMud2lkdGg9dGhpcy5kb20uZnJhbWUub2Zmc2V0V2lkdGgsdGhpcy5wcm9wcy5oZWlnaHQ9dGhpcy5ib2R5LmRvbVByb3BzLmNlbnRlckNvbnRhaW5lci5oZWlnaHQtdGhpcy5ib2R5LmRvbVByb3BzLmJvcmRlci50b3AtdGhpcy5ib2R5LmRvbVByb3BzLmJvcmRlci5ib3R0b20sdm9pZCAwPT09dGhpcy5sYXN0V2lkdGgmJnRoaXMucHJvcHMud2lkdGgmJih0PSEwKSxlPXRoaXMuX2lzUmVzaXplZCgpfHxlO3ZhciBpPXRoaXMuYm9keS5yYW5nZS5lbmQtdGhpcy5ib2R5LnJhbmdlLnN0YXJ0LG89aSE9dGhpcy5sYXN0VmlzaWJsZUludGVydmFsO2lmKHRoaXMubGFzdFZpc2libGVJbnRlcnZhbD1pLDE9PWUmJih0aGlzLnN2Zy5zdHlsZS53aWR0aD1uLm9wdGlvbi5hc1NpemUoMyp0aGlzLnByb3BzLndpZHRoKSx0aGlzLnN2Zy5zdHlsZS5sZWZ0PW4ub3B0aW9uLmFzU2l6ZSgtdGhpcy5wcm9wcy53aWR0aCksKC0xIT0odGhpcy5vcHRpb25zLmhlaWdodCsiIikuaW5kZXhPZigiJSIpfHwxPT10aGlzLnVwZGF0ZVNWR2hlaWdodE9uUmVzaXplKSYmKHRoaXMudXBkYXRlU1ZHaGVpZ2h0PSEwKSksMT09dGhpcy51cGRhdGVTVkdoZWlnaHQ/KHRoaXMub3B0aW9ucy5ncmFwaEhlaWdodCE9dGhpcy5wcm9wcy5oZWlnaHQrInB4IiYmKHRoaXMub3B0aW9ucy5ncmFwaEhlaWdodD10aGlzLnByb3BzLmhlaWdodCsicHgiLHRoaXMuc3ZnLnN0eWxlLmhlaWdodD10aGlzLnByb3BzLmhlaWdodCsicHgiKSx0aGlzLnVwZGF0ZVNWR2hlaWdodD0hMSk6dGhpcy5zdmcuc3R5bGUuaGVpZ2h0PSgiIit0aGlzLm9wdGlvbnMuZ3JhcGhIZWlnaHQpLnJlcGxhY2UoInB4IiwiIikrInB4IiwxPT1lfHwxPT1vfHwxPT10aGlzLmFib3J0ZWRHcmFwaFVwZGF0ZXx8MT09dCllPXRoaXMuX3VwZGF0ZUdyYXBoKCl8fGU7ZWxzZSBpZigwIT10aGlzLmxhc3RTdGFydCl7dmFyIHM9dGhpcy5ib2R5LnJhbmdlLnN0YXJ0LXRoaXMubGFzdFN0YXJ0LHI9dGhpcy5ib2R5LnJhbmdlLmVuZC10aGlzLmJvZHkucmFuZ2Uuc3RhcnQ7aWYoMCE9dGhpcy5wcm9wcy53aWR0aCl7dmFyIGE9dGhpcy5wcm9wcy53aWR0aC9yLGg9cyphO3RoaXMuc3ZnLnN0eWxlLmxlZnQ9LXRoaXMucHJvcHMud2lkdGgtaCsicHgifX1yZXR1cm4gdGhpcy5sZWdlbmRMZWZ0LnJlZHJhdygpLHRoaXMubGVnZW5kUmlnaHQucmVkcmF3KCksZX0sby5wcm90b3R5cGUuX2dldFNvcnRlZEdyb3VwSWRzPWZ1bmN0aW9uKCl7dmFyIHQ9W107Zm9yKHZhciBlIGluIHRoaXMuZ3JvdXBzKWlmKHRoaXMuZ3JvdXBzLmhhc093blByb3BlcnR5KGUpKXt2YXIgaT10aGlzLmdyb3Vwc1tlXTsxIT1pLnZpc2libGV8fHZvaWQgMCE9PXRoaXMub3B0aW9ucy5ncm91cHMudmlzaWJpbGl0eVtlXSYmMSE9dGhpcy5vcHRpb25zLmdyb3Vwcy52aXNpYmlsaXR5W2VdfHx0LnB1c2goe2lkOmUsekluZGV4Omkub3B0aW9ucy56SW5kZXh9KX1uLmluc2VydFNvcnQodCxmdW5jdGlvbih0LGUpe3ZhciBpPXQuekluZGV4LG89ZS56SW5kZXg7cmV0dXJuIHZvaWQgMD09PWkmJihpPTApLHZvaWQgMD09PW8mJihvPTApLGk9PW8/MDpvPmk/LTE6MX0pO2Zvcih2YXIgbz1uZXcgQXJyYXkodC5sZW5ndGgpLHM9MDtzPHQubGVuZ3RoO3MrKylvW3NdPXRbc10uaWQ7cmV0dXJuIG99LG8ucHJvdG90eXBlLl91cGRhdGVHcmFwaD1mdW5jdGlvbigpe2lmKHMucHJlcGFyZUVsZW1lbnRzKHRoaXMuc3ZnRWxlbWVudHMpLDAhPXRoaXMucHJvcHMud2lkdGgmJm51bGwhPXRoaXMuaXRlbXNEYXRhKXt2YXIgdCxlLGk9e30sbz0hMSxuPXRoaXMuYm9keS51dGlsLnRvR2xvYmFsVGltZSgtdGhpcy5ib2R5LmRvbVByb3BzLnJvb3Qud2lkdGgpLHI9dGhpcy5ib2R5LnV0aWwudG9HbG9iYWxUaW1lKDIqdGhpcy5ib2R5LmRvbVByb3BzLnJvb3Qud2lkdGgpLGE9dGhpcy5fZ2V0U29ydGVkR3JvdXBJZHMoKTtpZihhLmxlbmd0aD4wKXt2YXIgaD17fTtmb3IodGhpcy5fZ2V0UmVsZXZhbnREYXRhKGEsaCxuLHIpLHRoaXMuX2FwcGx5U2FtcGxpbmcoYSxoKSxlPTA7ZTxhLmxlbmd0aDtlKyspdGhpcy5fY29udmVydFhjb29yZGluYXRlcyhoW2FbZV1dKTt0aGlzLl9nZXRZUmFuZ2VzKGEsaCxpKSxvPXRoaXMuX3VwZGF0ZVlBeGlzKGEsaSk7dmFyIGQ9NTtpZigxPT1vJiZ0aGlzLkNPVU5URVI8ZClyZXR1cm4gcy5jbGVhbnVwRWxlbWVudHModGhpcy5zdmdFbGVtZW50cyksdGhpcy5hYm9ydGVkR3JhcGhVcGRhdGU9ITAsdGhpcy5DT1VOVEVSKyssdGhpcy5ib2R5LmVtaXR0ZXIuZW1pdCgiY2hhbmdlIiksITA7dGhpcy5DT1VOVEVSPmQmJmNvbnNvbGUubG9nKCJXQVJOSU5HOiB0aGVyZSBtYXkgYmUgYW4gaW5maW5pdGUgbG9vcCBpbiB0aGUgX3VwZGF0ZUdyYXBoIGVtaXR0ZXIgY3ljbGUuIiksdGhpcy5DT1VOVEVSPTAsdGhpcy5hYm9ydGVkR3JhcGhVcGRhdGU9ITE7dmFyIGw9dm9pZCAwO2ZvcihlPTA7ZTxhLmxlbmd0aDtlKyspdD10aGlzLmdyb3Vwc1thW2VdXSx0aGlzLm9wdGlvbnMuc3RhY2s9PT0hMCYmImxpbmUiPT09dGhpcy5vcHRpb25zLnN0eWxlJiYodm9pZCAwIT10Lm9wdGlvbnMuZXhjbHVkZUZyb21TdGFja2luZyYmdC5vcHRpb25zLmV4Y2x1ZGVGcm9tU3RhY2tpbmd8fCh2b2lkIDAhPWwmJih0aGlzLl9zdGFjayhoW3QuaWRdLGhbbC5pZF0pLDE9PXQub3B0aW9ucy5zaGFkZWQuZW5hYmxlZCYmImdyb3VwIiE9PXQub3B0aW9ucy5zaGFkZWQub3JpZW50YXRpb24mJigidG9wIj09dC5vcHRpb25zLnNoYWRlZC5vcmllbnRhdGlvbiYmImdyb3VwIiE9PWwub3B0aW9ucy5zaGFkZWQub3JpZW50YXRpb24/KGwub3B0aW9ucy5zaGFkZWQub3JpZW50YXRpb249Imdyb3VwIixsLm9wdGlvbnMuc2hhZGVkLmdyb3VwSWQ9dC5pZCk6KHQub3B0aW9ucy5zaGFkZWQub3JpZW50YXRpb249Imdyb3VwIix0Lm9wdGlvbnMuc2hhZGVkLmdyb3VwSWQ9bC5pZCkpKSxsPXQpKSx0aGlzLl9jb252ZXJ0WWNvb3JkaW5hdGVzKGhbYVtlXV0sdCk7dmFyIHU9e307Zm9yKGU9MDtlPGEubGVuZ3RoO2UrKylpZih0PXRoaXMuZ3JvdXBzW2FbZV1dLCJsaW5lIj09PXQub3B0aW9ucy5zdHlsZSYmMT09dC5vcHRpb25zLnNoYWRlZC5lbmFibGVkKXt2YXIgbT1oW2FbZV1dO2lmKHUuaGFzT3duUHJvcGVydHkoYVtlXSl8fCh1W2FbZV1dPXAuY2FsY1BhdGgobSx0KSksImdyb3VwIj09PXQub3B0aW9ucy5zaGFkZWQub3JpZW50YXRpb24pe3ZhciB2PXQub3B0aW9ucy5zaGFkZWQuZ3JvdXBJZDtpZigtMT09PWEuaW5kZXhPZih2KSl7Y29uc29sZS5sb2codC5pZCsiOiBVbmtub3duIHNoYWRpbmcgZ3JvdXAgdGFyZ2V0IGdpdmVuOiIrdik7Y29udGludWV9dS5oYXNPd25Qcm9wZXJ0eSh2KXx8KHVbdl09cC5jYWxjUGF0aChoW3ZdLHRoaXMuZ3JvdXBzW3ZdKSkscC5kcmF3U2hhZGluZyh1W2FbZV1dLHQsdVt2XSx0aGlzLmZyYW1ld29yayl9ZWxzZSBwLmRyYXdTaGFkaW5nKHVbYVtlXV0sdCx2b2lkIDAsdGhpcy5mcmFtZXdvcmspfWZvcihjLmRyYXcoYSxoLHRoaXMuZnJhbWV3b3JrKSxlPTA7ZTxhLmxlbmd0aDtlKyspaWYodD10aGlzLmdyb3Vwc1thW2VdXSxoW2FbZV1dLmxlbmd0aD4wKXN3aXRjaCh0Lm9wdGlvbnMuc3R5bGUpe2Nhc2UibGluZSI6dS5oYXNPd25Qcm9wZXJ0eShhW2VdKXx8KHVbYVtlXV09cC5jYWxjUGF0aChoW2FbZV1dLHQpKSxwLmRyYXcodVthW2VdXSx0LHRoaXMuZnJhbWV3b3JrKTtjYXNlInBvaW50IjpjYXNlInBvaW50cyI6KCJwb2ludCI9PXQub3B0aW9ucy5zdHlsZXx8InBvaW50cyI9PXQub3B0aW9ucy5zdHlsZXx8MT09dC5vcHRpb25zLmRyYXdQb2ludHMuZW5hYmxlZCkmJmYuZHJhdyhoW2FbZV1dLHQsdGhpcy5mcmFtZXdvcmspO2JyZWFrO2Nhc2UiYmFyIjp9fX1yZXR1cm4gcy5jbGVhbnVwRWxlbWVudHModGhpcy5zdmdFbGVtZW50cyksITF9LG8ucHJvdG90eXBlLl9zdGFjaz1mdW5jdGlvbih0LGUpe3ZhciBpLG8sbixzLHI7aT0wO2Zvcih2YXIgYT0wO2E8dC5sZW5ndGg7YSsrKXtzPXZvaWQgMCxyPXZvaWQgMDtmb3IodmFyIGg9aTtoPGUubGVuZ3RoO2grKyl7aWYoZVtoXS54PT09dFthXS54KXtzPWVbaF0scj1lW2hdLGk9aDticmVha31pZihlW2hdLng+dFthXS54KXtyPWVbaF0scz0wPT1oP3I6ZVtoLTFdLGk9aDticmVha319dm9pZCAwPT09ciYmKHM9ZVtlLmxlbmd0aC0xXSxyPWVbZS5sZW5ndGgtMV0pLG89ci54LXMueCxuPXIueS1zLnksMD09bz90W2FdLnk9dFthXS5vcmdpbmFsWStyLnk6dFthXS55PXRbYV0ub3JnaW5hbFkrbi9vKih0W2FdLngtcy54KStzLnl9fSxvLnByb3RvdHlwZS5fZ2V0UmVsZXZhbnREYXRhPWZ1bmN0aW9uKHQsZSxpLG8pe3ZhciBzLHIsYSxoO2lmKHQubGVuZ3RoPjApZm9yKHI9MDtyPHQubGVuZ3RoO3IrKyl7cz10aGlzLmdyb3Vwc1t0W3JdXTt2YXIgZD1zLmdldEl0ZW1zKCk7aWYoMT09cy5vcHRpb25zLnNvcnQpe3ZhciBsPU1hdGgubWF4KDAsbi5iaW5hcnlTZWFyY2hWYWx1ZShkLGksIngiLCJiZWZvcmUiKSksdT1NYXRoLm1pbihkLmxlbmd0aCxuLmJpbmFyeVNlYXJjaFZhbHVlKGQsbywieCIsImFmdGVyIikrMSk7MD49dSYmKHU9ZC5sZW5ndGgpO3ZhciBjPW5ldyBBcnJheSh1LWwpO2ZvcihhPWw7dT5hO2ErKyloPXMuaXRlbXNEYXRhW2FdLGNbYS1sXT1oO2VbdFtyXV09Y31lbHNlIGVbdFtyXV09cy5pdGVtc0RhdGF9fSxvLnByb3RvdHlwZS5fYXBwbHlTYW1wbGluZz1mdW5jdGlvbih0LGUpe3ZhciBpO2lmKHQubGVuZ3RoPjApZm9yKHZhciBvPTA7bzx0Lmxlbmd0aDtvKyspaWYoaT10aGlzLmdyb3Vwc1t0W29dXSwxPT1pLm9wdGlvbnMuc2FtcGxpbmcpe3ZhciBuPWVbdFtvXV07aWYobi5sZW5ndGg+MCl7dmFyIHM9MSxyPW4ubGVuZ3RoLGE9dGhpcy5ib2R5LnV0aWwudG9HbG9iYWxTY3JlZW4obltuLmxlbmd0aC0xXS54KS10aGlzLmJvZHkudXRpbC50b0dsb2JhbFNjcmVlbihuWzBdLngpLGg9ci9hO3M9TWF0aC5taW4oTWF0aC5jZWlsKC4yKnIpLE1hdGgubWF4KDEsTWF0aC5yb3VuZChoKSkpO2Zvcih2YXIgZD1uZXcgQXJyYXkociksbD0wO3I+bDtsKz1zKXt2YXIgdT1NYXRoLnJvdW5kKGwvcyk7ZFt1XT1uW2xdfWVbdFtvXV09ZC5zcGxpY2UoMCxNYXRoLnJvdW5kKHIvcykpfX19LG8ucHJvdG90eXBlLl9nZXRZUmFuZ2VzPWZ1bmN0aW9uKHQsZSxpKXt2YXIgbyxuLHMscixhPVtdLGg9W107aWYodC5sZW5ndGg+MCl7Zm9yKHM9MDtzPHQubGVuZ3RoO3MrKylvPWVbdFtzXV0scj10aGlzLmdyb3Vwc1t0W3NdXS5vcHRpb25zLG8ubGVuZ3RoPjAmJihuPXRoaXMuZ3JvdXBzW3Rbc11dLHIuc3RhY2s9PT0hMCYmImJhciI9PT1yLnN0eWxlPyJsZWZ0Ij09PXIueUF4aXNPcmllbnRhdGlvbj9hPWEuY29uY2F0KG4uZ2V0SXRlbXMoKSk6aD1oLmNvbmNhdChuLmdldEl0ZW1zKCkpOmlbdFtzXV09bi5nZXRZUmFuZ2Uobyx0W3NdKSk7Yy5nZXRTdGFja2VkWVJhbmdlKGEsaSx0LCJfX2JhclN0YWNrTGVmdCIsImxlZnQiKSxjLmdldFN0YWNrZWRZUmFuZ2UoaCxpLHQsIl9fYmFyU3RhY2tSaWdodCIsInJpZ2h0Iil9fSxvLnByb3RvdHlwZS5fdXBkYXRlWUF4aXM9ZnVuY3Rpb24odCxlKXt2YXIgaSxvLG49ITEscz0hMSxyPSExLGE9MWU5LGg9MWU5LGQ9LTFlOSxsPS0xZTk7aWYodC5sZW5ndGg+MCl7Zm9yKHZhciB1PTA7dTx0Lmxlbmd0aDt1Kyspe3ZhciBjPXRoaXMuZ3JvdXBzW3RbdV1dO2MmJiJyaWdodCIhPWMub3B0aW9ucy55QXhpc09yaWVudGF0aW9uPyhzPSEwLGE9MWU5LGQ9LTFlOSk6YyYmYy5vcHRpb25zLnlBeGlzT3JpZW50YXRpb24mJihyPSEwLGg9MWU5LGw9LTFlOSl9Zm9yKHZhciB1PTA7dTx0Lmxlbmd0aDt1KyspZS5oYXNPd25Qcm9wZXJ0eSh0W3VdKSYmZVt0W3VdXS5pZ25vcmUhPT0hMCYmKGk9ZVt0W3VdXS5taW4sbz1lW3RbdV1dLm1heCwicmlnaHQiIT1lW3RbdV1dLnlBeGlzT3JpZW50YXRpb24/KHM9ITAsYT1hPmk/aTphLGQ9bz5kP286ZCk6KHI9ITAsaD1oPmk/aTpoLGw9bz5sP286bCkpOzE9PXMmJnRoaXMueUF4aXNMZWZ0LnNldFJhbmdlKGEsZCksMT09ciYmdGhpcy55QXhpc1JpZ2h0LnNldFJhbmdlKGgsbCl9bj10aGlzLl90b2dnbGVBeGlzVmlzaWJsaXR5KHMsdGhpcy55QXhpc0xlZnQpfHxuLG49dGhpcy5fdG9nZ2xlQXhpc1Zpc2libGl0eShyLHRoaXMueUF4aXNSaWdodCl8fG4sMT09ciYmMT09cz8odGhpcy55QXhpc0xlZnQuZHJhd0ljb25zPSEwLHRoaXMueUF4aXNSaWdodC5kcmF3SWNvbnM9ITApOih0aGlzLnlBeGlzTGVmdC5kcmF3SWNvbnM9ITEsdGhpcy55QXhpc1JpZ2h0LmRyYXdJY29ucz0hMSksdGhpcy55QXhpc1JpZ2h0Lm1hc3Rlcj0hcywwPT10aGlzLnlBeGlzUmlnaHQubWFzdGVyPygxPT1yP3RoaXMueUF4aXNMZWZ0LmxpbmVPZmZzZXQ9dGhpcy55QXhpc1JpZ2h0LndpZHRoOnRoaXMueUF4aXNMZWZ0LmxpbmVPZmZzZXQ9MCxuPXRoaXMueUF4aXNMZWZ0LnJlZHJhdygpfHxuLHRoaXMueUF4aXNSaWdodC5zdGVwUGl4ZWxzPXRoaXMueUF4aXNMZWZ0LnN0ZXBQaXhlbHMsdGhpcy55QXhpc1JpZ2h0Lnplcm9Dcm9zc2luZz10aGlzLnlBeGlzTGVmdC56ZXJvQ3Jvc3NpbmcsdGhpcy55QXhpc1JpZ2h0LmFtb3VudE9mU3RlcHM9dGhpcy55QXhpc0xlZnQuYW1vdW50T2ZTdGVwcyxuPXRoaXMueUF4aXNSaWdodC5yZWRyYXcoKXx8bik6bj10aGlzLnlBeGlzUmlnaHQucmVkcmF3KCl8fG47Zm9yKHZhciBwPVsiX19iYXJTdGFja0xlZnQiLCJfX2JhclN0YWNrUmlnaHQiLCJfX2xpbmVTdGFja0xlZnQiLCJfX2xpbmVTdGFja1JpZ2h0Il0sdT0wO3U8cC5sZW5ndGg7dSsrKS0xIT10LmluZGV4T2YocFt1XSkmJnQuc3BsaWNlKHQuaW5kZXhPZihwW3VdKSwxKTtyZXR1cm4gbn0sby5wcm90b3R5cGUuX3RvZ2dsZUF4aXNWaXNpYmxpdHk9ZnVuY3Rpb24odCxlKXt2YXIgaT0hMTtyZXR1cm4gMD09dD9lLmRvbS5mcmFtZS5wYXJlbnROb2RlJiYwPT1lLmhpZGRlbiYmKGUuaGlkZSgpLGk9ITApOmUuZG9tLmZyYW1lLnBhcmVudE5vZGV8fDEhPWUuaGlkZGVufHwoZS5zaG93KCksaT0hMCksaX0sby5wcm90b3R5cGUuX2NvbnZlcnRYY29vcmRpbmF0ZXM9ZnVuY3Rpb24odCl7Zm9yKHZhciBlPXRoaXMuYm9keS51dGlsLnRvU2NyZWVuLGk9MDtpPHQubGVuZ3RoO2krKyl0W2ldLnNjcmVlbl94PWUodFtpXS54KSt0aGlzLnByb3BzLndpZHRoLHRbaV0uc2NyZWVuX3k9dFtpXS55fSxvLnByb3RvdHlwZS5fY29udmVydFljb29yZGluYXRlcz1mdW5jdGlvbih0LGUpe3ZhciBpPXRoaXMueUF4aXNMZWZ0LG89TnVtYmVyKHRoaXMuc3ZnLnN0eWxlLmhlaWdodC5yZXBsYWNlKCJweCIsIiIpKTsicmlnaHQiPT1lLm9wdGlvbnMueUF4aXNPcmllbnRhdGlvbiYmKGk9dGhpcy55QXhpc1JpZ2h0KTtmb3IodmFyIG49MDtuPHQubGVuZ3RoO24rKyl0W25dLnNjcmVlbl95PU1hdGgucm91bmQoaS5jb252ZXJ0VmFsdWUodFtuXS55KSk7ZS5zZXRaZXJvUG9zaXRpb24oTWF0aC5taW4obyxpLmNvbnZlcnRWYWx1ZSgwKSkpfSx0LmV4cG9ydHM9b30sZnVuY3Rpb24odCxlLGkpe2Z1bmN0aW9uIG8odCxlLGksbyl7dGhpcy5pZD1uLnJhbmRvbVVVSUQoKSx0aGlzLmJvZHk9dCx0aGlzLmRlZmF1bHRPcHRpb25zPXtvcmllbnRhdGlvbjoibGVmdCIsc2hvd01pbm9yTGFiZWxzOiEwLHNob3dNYWpvckxhYmVsczohMCxpY29uczohMCxtYWpvckxpbmVzT2Zmc2V0OjcsbWlub3JMaW5lc09mZnNldDo0LGxhYmVsT2Zmc2V0WDoxMCxsYWJlbE9mZnNldFk6MixpY29uV2lkdGg6MjAsd2lkdGg6IjQwcHgiLHZpc2libGU6ITAsYWxpZ25aZXJvczohMCxsZWZ0OntyYW5nZTp7bWluOnZvaWQgMCxtYXg6dm9pZCAwfSxmb3JtYXQ6ZnVuY3Rpb24odCl7cmV0dXJuIHR9LHRpdGxlOnt0ZXh0OnZvaWQgMCxzdHlsZTp2b2lkIDB9fSxyaWdodDp7cmFuZ2U6e21pbjp2b2lkIDAsbWF4OnZvaWQgMH0sZm9ybWF0OmZ1bmN0aW9uKHQpe3JldHVybiB0fSx0aXRsZTp7dGV4dDp2b2lkIDAsc3R5bGU6dm9pZCAwfX19LHRoaXMubGluZWdyYXBoT3B0aW9ucz1vLHRoaXMubGluZWdyYXBoU1ZHPWksdGhpcy5wcm9wcz17fSx0aGlzLkRPTWVsZW1lbnRzPXtsaW5lczp7fSxsYWJlbHM6e30sdGl0bGU6e319LHRoaXMuZG9tPXt9LHRoaXMucmFuZ2U9e3N0YXJ0OjAsZW5kOjB9LHRoaXMub3B0aW9ucz1uLmV4dGVuZCh7fSx0aGlzLmRlZmF1bHRPcHRpb25zKSx0aGlzLmNvbnZlcnNpb25GYWN0b3I9MSx0aGlzLnNldE9wdGlvbnMoZSksdGhpcy53aWR0aD1OdW1iZXIoKCIiK3RoaXMub3B0aW9ucy53aWR0aCkucmVwbGFjZSgicHgiLCIiKSksdGhpcy5taW5XaWR0aD10aGlzLndpZHRoLHRoaXMuaGVpZ2h0PXRoaXMubGluZWdyYXBoU1ZHLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLmhlaWdodCx0aGlzLmhpZGRlbj0hMSx0aGlzLnN0ZXBQaXhlbHM9MjUsdGhpcy56ZXJvQ3Jvc3Npbmc9LTEsdGhpcy5hbW91bnRPZlN0ZXBzPS0xLHRoaXMubGluZU9mZnNldD0wLHRoaXMubWFzdGVyPSEwLHRoaXMuc3ZnRWxlbWVudHM9e30sdGhpcy5pY29uc1JlbW92ZWQ9ITEsdGhpcy5ncm91cHM9e30sdGhpcy5hbW91bnRPZkdyb3Vwcz0wLHRoaXMuX2NyZWF0ZSgpLHRoaXMuZnJhbWV3b3JrPXtzdmc6dGhpcy5zdmcsc3ZnRWxlbWVudHM6dGhpcy5zdmdFbGVtZW50cyxvcHRpb25zOnRoaXMub3B0aW9ucyxncm91cHM6dGhpcy5ncm91cHN9O3ZhciBzPXRoaXM7dGhpcy5ib2R5LmVtaXR0ZXIub24oInZlcnRpY2FsRHJhZyIsZnVuY3Rpb24oKXtzLmRvbS5saW5lQ29udGFpbmVyLnN0eWxlLnRvcD1zLmJvZHkuZG9tUHJvcHMuc2Nyb2xsVG9wKyJweCJ9KX12YXIgbj1pKDEpLHM9aSg3KSxyPWkoMjUpLGE9aSg1MSk7by5wcm90b3R5cGU9bmV3IHIsby5wcm90b3R5cGUuYWRkR3JvdXA9ZnVuY3Rpb24odCxlKXt0aGlzLmdyb3Vwcy5oYXNPd25Qcm9wZXJ0eSh0KXx8KHRoaXMuZ3JvdXBzW3RdPWUpLHRoaXMuYW1vdW50T2ZHcm91cHMrPTF9LG8ucHJvdG90eXBlLnVwZGF0ZUdyb3VwPWZ1bmN0aW9uKHQsZSl7dGhpcy5ncm91cHNbdF09ZX0sby5wcm90b3R5cGUucmVtb3ZlR3JvdXA9ZnVuY3Rpb24odCl7dGhpcy5ncm91cHMuaGFzT3duUHJvcGVydHkodCkmJihkZWxldGUgdGhpcy5ncm91cHNbdF0sdGhpcy5hbW91bnRPZkdyb3Vwcy09MSl9LG8ucHJvdG90eXBlLnNldE9wdGlvbnM9ZnVuY3Rpb24odCl7aWYodCl7dmFyIGU9ITE7dGhpcy5vcHRpb25zLm9yaWVudGF0aW9uIT10Lm9yaWVudGF0aW9uJiZ2b2lkIDAhPT10Lm9yaWVudGF0aW9uJiYoZT0hMCk7dmFyIGk9WyJvcmllbnRhdGlvbiIsInNob3dNaW5vckxhYmVscyIsInNob3dNYWpvckxhYmVscyIsImljb25zIiwibWFqb3JMaW5lc09mZnNldCIsIm1pbm9yTGluZXNPZmZzZXQiLCJsYWJlbE9mZnNldFgiLCJsYWJlbE9mZnNldFkiLCJpY29uV2lkdGgiLCJ3aWR0aCIsInZpc2libGUiLCJsZWZ0IiwicmlnaHQiLCJhbGlnblplcm9zIl07bi5zZWxlY3RpdmVFeHRlbmQoaSx0aGlzLm9wdGlvbnMsdCksdGhpcy5taW5XaWR0aD1OdW1iZXIoKCIiK3RoaXMub3B0aW9ucy53aWR0aCkucmVwbGFjZSgicHgiLCIiKSksZT09PSEwJiZ0aGlzLmRvbS5mcmFtZSYmKHRoaXMuaGlkZSgpLHRoaXMuc2hvdygpKX19LG8ucHJvdG90eXBlLl9jcmVhdGU9ZnVuY3Rpb24oKXt0aGlzLmRvbS5mcmFtZT1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKSx0aGlzLmRvbS5mcmFtZS5zdHlsZS53aWR0aD10aGlzLm9wdGlvbnMud2lkdGgsdGhpcy5kb20uZnJhbWUuc3R5bGUuaGVpZ2h0PXRoaXMuaGVpZ2h0LHRoaXMuZG9tLmxpbmVDb250YWluZXI9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2IiksdGhpcy5kb20ubGluZUNvbnRhaW5lci5zdHlsZS53aWR0aD0iMTAwJSIsdGhpcy5kb20ubGluZUNvbnRhaW5lci5zdHlsZS5oZWlnaHQ9dGhpcy5oZWlnaHQsdGhpcy5kb20ubGluZUNvbnRhaW5lci5zdHlsZS5wb3NpdGlvbj0icmVsYXRpdmUiLHRoaXMuc3ZnPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnROUygiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciLCJzdmciKSx0aGlzLnN2Zy5zdHlsZS5wb3NpdGlvbj0iYWJzb2x1dGUiLHRoaXMuc3ZnLnN0eWxlLnRvcD0iMHB4Iix0aGlzLnN2Zy5zdHlsZS5oZWlnaHQ9IjEwMCUiLHRoaXMuc3ZnLnN0eWxlLndpZHRoPSIxMDAlIix0aGlzLnN2Zy5zdHlsZS5kaXNwbGF5PSJibG9jayIsdGhpcy5kb20uZnJhbWUuYXBwZW5kQ2hpbGQodGhpcy5zdmcpfSxvLnByb3RvdHlwZS5fcmVkcmF3R3JvdXBJY29ucz1mdW5jdGlvbigpe3MucHJlcGFyZUVsZW1lbnRzKHRoaXMuc3ZnRWxlbWVudHMpO3ZhciB0LGU9dGhpcy5vcHRpb25zLmljb25XaWR0aCxpPTE1LG89NCxuPW8rLjUqaTt0PSJsZWZ0Ij09PXRoaXMub3B0aW9ucy5vcmllbnRhdGlvbj9vOnRoaXMud2lkdGgtZS1vO3ZhciByPU9iamVjdC5rZXlzKHRoaXMuZ3JvdXBzKTtyLnNvcnQoZnVuY3Rpb24odCxlKXtyZXR1cm4gZT50Py0xOjF9KTtmb3IodmFyIGE9MDthPHIubGVuZ3RoO2ErKyl7dmFyIGg9clthXTt0aGlzLmdyb3Vwc1toXS52aXNpYmxlIT09ITB8fHZvaWQgMCE9PXRoaXMubGluZWdyYXBoT3B0aW9ucy52aXNpYmlsaXR5W2hdJiZ0aGlzLmxpbmVncmFwaE9wdGlvbnMudmlzaWJpbGl0eVtoXSE9PSEwfHwodGhpcy5ncm91cHNbaF0uZ2V0TGVnZW5kKGUsaSx0aGlzLmZyYW1ld29yayx0LG4pLG4rPWkrbyl9cy5jbGVhbnVwRWxlbWVudHModGhpcy5zdmdFbGVtZW50cyksdGhpcy5pY29uc1JlbW92ZWQ9ITF9LG8ucHJvdG90eXBlLl9jbGVhbnVwSWNvbnM9ZnVuY3Rpb24oKXt0aGlzLmljb25zUmVtb3ZlZD09PSExJiYocy5wcmVwYXJlRWxlbWVudHModGhpcy5zdmdFbGVtZW50cykscy5jbGVhbnVwRWxlbWVudHModGhpcy5zdmdFbGVtZW50cyksdGhpcy5pY29uc1JlbW92ZWQ9ITApfSxvLnByb3RvdHlwZS5zaG93PWZ1bmN0aW9uKCl7dGhpcy5oaWRkZW49ITEsdGhpcy5kb20uZnJhbWUucGFyZW50Tm9kZXx8KCJsZWZ0Ij09PXRoaXMub3B0aW9ucy5vcmllbnRhdGlvbj90aGlzLmJvZHkuZG9tLmxlZnQuYXBwZW5kQ2hpbGQodGhpcy5kb20uZnJhbWUpOnRoaXMuYm9keS5kb20ucmlnaHQuYXBwZW5kQ2hpbGQodGhpcy5kb20uZnJhbWUpKSx0aGlzLmRvbS5saW5lQ29udGFpbmVyLnBhcmVudE5vZGV8fHRoaXMuYm9keS5kb20uYmFja2dyb3VuZEhvcml6b250YWwuYXBwZW5kQ2hpbGQodGhpcy5kb20ubGluZUNvbnRhaW5lcil9LG8ucHJvdG90eXBlLmhpZGU9ZnVuY3Rpb24oKXt0aGlzLmhpZGRlbj0hMCx0aGlzLmRvbS5mcmFtZS5wYXJlbnROb2RlJiZ0aGlzLmRvbS5mcmFtZS5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKHRoaXMuZG9tLmZyYW1lKSx0aGlzLmRvbS5saW5lQ29udGFpbmVyLnBhcmVudE5vZGUmJnRoaXMuZG9tLmxpbmVDb250YWluZXIucGFyZW50Tm9kZS5yZW1vdmVDaGlsZCh0aGlzLmRvbS5saW5lQ29udGFpbmVyKX0sby5wcm90b3R5cGUuc2V0UmFuZ2U9ZnVuY3Rpb24odCxlKXt0aGlzLm1hc3Rlcj09PSExJiZ0aGlzLm9wdGlvbnMuYWxpZ25aZXJvcz09PSEwJiYtMSE9dGhpcy56ZXJvQ3Jvc3NpbmcmJnQ+MCYmKHQ9MCksdGhpcy5yYW5nZS5zdGFydD10LHRoaXMucmFuZ2UuZW5kPWV9LG8ucHJvdG90eXBlLnJlZHJhdz1mdW5jdGlvbigpe3ZhciB0PSExLGU9MDt0aGlzLmRvbS5saW5lQ29udGFpbmVyLnN0eWxlLnRvcD10aGlzLmJvZHkuZG9tUHJvcHMuc2Nyb2xsVG9wKyJweCI7Zm9yKHZhciBpIGluIHRoaXMuZ3JvdXBzKXRoaXMuZ3JvdXBzLmhhc093blByb3BlcnR5KGkpJiYodGhpcy5ncm91cHNbaV0udmlzaWJsZSE9PSEwfHx2b2lkIDAhPT10aGlzLmxpbmVncmFwaE9wdGlvbnMudmlzaWJpbGl0eVtpXSYmdGhpcy5saW5lZ3JhcGhPcHRpb25zLnZpc2liaWxpdHlbaV0hPT0hMHx8ZSsrKTtpZigwPT09dGhpcy5hbW91bnRPZkdyb3Vwc3x8MD09PWUpdGhpcy5oaWRlKCk7ZWxzZXt0aGlzLnNob3coKSx0aGlzLmhlaWdodD1OdW1iZXIodGhpcy5saW5lZ3JhcGhTVkcuc3R5bGUuaGVpZ2h0LnJlcGxhY2UoInB4IiwiIikpLHRoaXMuZG9tLmxpbmVDb250YWluZXIuc3R5bGUuaGVpZ2h0PXRoaXMuaGVpZ2h0KyJweCIsdGhpcy53aWR0aD10aGlzLm9wdGlvbnMudmlzaWJsZT09PSEwP051bWJlcigoIiIrdGhpcy5vcHRpb25zLndpZHRoKS5yZXBsYWNlKCJweCIsIiIpKTowO3ZhciBvPXRoaXMucHJvcHMsbj10aGlzLmRvbS5mcmFtZTtuLmNsYXNzTmFtZT0idmlzLWRhdGEtYXhpcyIsdGhpcy5fY2FsY3VsYXRlQ2hhclNpemUoKTt2YXIgcz10aGlzLm9wdGlvbnMub3JpZW50YXRpb24scj10aGlzLm9wdGlvbnMuc2hvd01pbm9yTGFiZWxzLGE9dGhpcy5vcHRpb25zLnNob3dNYWpvckxhYmVscztvLm1pbm9yTGFiZWxIZWlnaHQ9cj9vLm1pbm9yQ2hhckhlaWdodDowLG8ubWFqb3JMYWJlbEhlaWdodD1hP28ubWFqb3JDaGFySGVpZ2h0OjAsby5taW5vckxpbmVXaWR0aD10aGlzLmJvZHkuZG9tLmJhY2tncm91bmRIb3Jpem9udGFsLm9mZnNldFdpZHRoLXRoaXMubGluZU9mZnNldC10aGlzLndpZHRoKzIqdGhpcy5vcHRpb25zLm1pbm9yTGluZXNPZmZzZXQsby5taW5vckxpbmVIZWlnaHQ9MSxvLm1ham9yTGluZVdpZHRoPXRoaXMuYm9keS5kb20uYmFja2dyb3VuZEhvcml6b250YWwub2Zmc2V0V2lkdGgtdGhpcy5saW5lT2Zmc2V0LXRoaXMud2lkdGgrMip0aGlzLm9wdGlvbnMubWFqb3JMaW5lc09mZnNldCxvLm1ham9yTGluZUhlaWdodD0xLCJsZWZ0Ij09PXM/KG4uc3R5bGUudG9wPSIwIixuLnN0eWxlLmxlZnQ9IjAiLG4uc3R5bGUuYm90dG9tPSIiLG4uc3R5bGUud2lkdGg9dGhpcy53aWR0aCsicHgiLG4uc3R5bGUuaGVpZ2h0PXRoaXMuaGVpZ2h0KyJweCIsdGhpcy5wcm9wcy53aWR0aD10aGlzLmJvZHkuZG9tUHJvcHMubGVmdC53aWR0aCx0aGlzLnByb3BzLmhlaWdodD10aGlzLmJvZHkuZG9tUHJvcHMubGVmdC5oZWlnaHQpOihuLnN0eWxlLnRvcD0iIixuLnN0eWxlLmJvdHRvbT0iMCIsbi5zdHlsZS5sZWZ0PSIwIixuLnN0eWxlLndpZHRoPXRoaXMud2lkdGgrInB4IixuLnN0eWxlLmhlaWdodD10aGlzLmhlaWdodCsicHgiLHRoaXMucHJvcHMud2lkdGg9dGhpcy5ib2R5LmRvbVByb3BzLnJpZ2h0LndpZHRoLHRoaXMucHJvcHMuaGVpZ2h0PXRoaXMuYm9keS5kb21Qcm9wcy5yaWdodC5oZWlnaHQpLHQ9dGhpcy5fcmVkcmF3TGFiZWxzKCksdD10aGlzLl9pc1Jlc2l6ZWQoKXx8dCx0aGlzLm9wdGlvbnMuaWNvbnM9PT0hMD90aGlzLl9yZWRyYXdHcm91cEljb25zKCk6dGhpcy5fY2xlYW51cEljb25zKCksdGhpcy5fcmVkcmF3VGl0bGUocyl9cmV0dXJuIHR9LG8ucHJvdG90eXBlLl9yZWRyYXdMYWJlbHM9ZnVuY3Rpb24oKXt2YXIgdD0hMTtzLnByZXBhcmVFbGVtZW50cyh0aGlzLkRPTWVsZW1lbnRzLmxpbmVzKSxzLnByZXBhcmVFbGVtZW50cyh0aGlzLkRPTWVsZW1lbnRzLmxhYmVscyk7dmFyIGUsaT10aGlzLm9wdGlvbnMub3JpZW50YXRpb247aWYodGhpcy5tYXN0ZXI9PT0hMSl7dmFyIG8sbixyLGg7LTEhPT10aGlzLnplcm9Dcm9zc2luZyYmdGhpcy5vcHRpb25zLmFsaWduWmVyb3M9PT0hMD90aGlzLnJhbmdlLmVuZD4wPyhvPXRoaXMucmFuZ2UuZW5kL3RoaXMuemVyb0Nyb3NzaW5nLG49dGhpcy5yYW5nZS5lbmQtdGhpcy5hbW91bnRPZlN0ZXBzKm8scj10aGlzLnJhbmdlLmVuZCk6KG89LTEqdGhpcy5yYW5nZS5zdGFydC8odGhpcy5hbW91bnRPZlN0ZXBzLXRoaXMuemVyb0Nyb3NzaW5nKSxuPXRoaXMucmFuZ2Uuc3RhcnQscj10aGlzLnJhbmdlLnN0YXJ0K28qdGhpcy5hbW91bnRPZlN0ZXBzKToobj10aGlzLnJhbmdlLnN0YXJ0LHI9dGhpcy5yYW5nZS5lbmQpLGg9dGhpcy5zdGVwUGl4ZWxzfWVsc2UgaD10aGlzLnByb3BzLm1ham9yQ2hhckhlaWdodCxuPXRoaXMucmFuZ2Uuc3RhcnQscj10aGlzLnJhbmdlLmVuZDtpZih0aGlzLnN0ZXA9ZT1uZXcgYShuLHIsaCx0aGlzLmRvbS5mcmFtZS5vZmZzZXRIZWlnaHQsdGhpcy5vcHRpb25zW3RoaXMub3B0aW9ucy5vcmllbnRhdGlvbl0ucmFuZ2UsdGhpcy5vcHRpb25zW3RoaXMub3B0aW9ucy5vcmllbnRhdGlvbl0uZm9ybWF0LHRoaXMubWFzdGVyPT09ITEmJnRoaXMub3B0aW9ucy5hbGlnblplcm9zKSx0aGlzLm1hc3Rlcj09PSEwKXRoaXMuc3RlcFBpeGVscz10aGlzLmRvbS5mcmFtZS5vZmZzZXRIZWlnaHQvZS5tYXJnaW5SYW5nZSplLnN0ZXAsdGhpcy5hbW91bnRPZlN0ZXBzPU1hdGguY2VpbCh0aGlzLmRvbS5mcmFtZS5vZmZzZXRIZWlnaHQvdGhpcy5zdGVwUGl4ZWxzKTtlbHNlIGlmKHRoaXMub3B0aW9ucy5hbGlnblplcm9zPT09ITAmJi0xIT09dGhpcy56ZXJvQ3Jvc3Npbmcpe3ZhciBkPShlLmN1cnJlbnQtdGhpcy56ZXJvQ3Jvc3NpbmcqZS5zdGVwKS9lLnN0ZXA7dGhpcy5zdGVwLnNoaWZ0KGQpfXRoaXMudmFsdWVBdEJvdHRvbT1lLm1hcmdpbkVuZCx0aGlzLm1heExhYmVsU2l6ZT0wO2Zvcih2YXIgbD0wLHU9MCxjPSExO3U8dGhpcy5hbW91bnRPZlN0ZXBzOylsPU1hdGgucm91bmQodSp0aGlzLnN0ZXBQaXhlbHMpLGM9ZS5pc01ham9yKCksdT4wJiZ1IT09dGhpcy5hbW91bnRPZlN0ZXBzJiYoKHRoaXMub3B0aW9ucy5zaG93TWlub3JMYWJlbHMmJmM9PT0hMXx8dGhpcy5tYXN0ZXI9PT0hMSYmdGhpcy5vcHRpb25zLnNob3dNaW5vckxhYmVscz09PSEwKSYmdGhpcy5fcmVkcmF3TGFiZWwobC0yLGUuZ2V0Q3VycmVudCgpLGksInZpcy15LWF4aXMgdmlzLW1pbm9yIix0aGlzLnByb3BzLm1pbm9yQ2hhckhlaWdodCksYyYmdGhpcy5vcHRpb25zLnNob3dNYWpvckxhYmVscyYmdGhpcy5tYXN0ZXI9PT0hMHx8dGhpcy5vcHRpb25zLnNob3dNaW5vckxhYmVscz09PSExJiZ0aGlzLm1hc3Rlcj09PSExJiZjPT09ITA/KGw+PTAmJnRoaXMuX3JlZHJhd0xhYmVsKGwtMixlLmdldEN1cnJlbnQoKSxpLCJ2aXMteS1heGlzIHZpcy1tYWpvciIsdGhpcy5wcm9wcy5tYWpvckNoYXJIZWlnaHQpLHRoaXMuX3JlZHJhd0xpbmUobCxpLCJ2aXMtZ3JpZCB2aXMtaG9yaXpvbnRhbCB2aXMtbWFqb3IiLHRoaXMub3B0aW9ucy5tYWpvckxpbmVzT2Zmc2V0LHRoaXMucHJvcHMubWFqb3JMaW5lV2lkdGgpKTp0aGlzLl9yZWRyYXdMaW5lKGwsaSwidmlzLWdyaWQgdmlzLWhvcml6b250YWwgdmlzLW1pbm9yIix0aGlzLm9wdGlvbnMubWlub3JMaW5lc09mZnNldCx0aGlzLnByb3BzLm1pbm9yTGluZVdpZHRoKSksdGhpcy5tYXN0ZXI9PT0hMCYmMD09PWUuY3VycmVudCYmKHRoaXMuemVyb0Nyb3NzaW5nPXUpLGUubmV4dCgpLHUrPTE7dGhpcy5tYXN0ZXI9PT0hMCYmMD09PWUuY3VycmVudCYmKHRoaXMuemVyb0Nyb3NzaW5nPXUpLHRoaXMuY29udmVyc2lvbkZhY3Rvcj10aGlzLnN0ZXBQaXhlbHMvZS5zdGVwO3ZhciBwPTA7dm9pZCAwIT09dGhpcy5vcHRpb25zW2ldLnRpdGxlJiZ2b2lkIDAhPT10aGlzLm9wdGlvbnNbaV0udGl0bGUudGV4dCYmKHA9dGhpcy5wcm9wcy50aXRsZUNoYXJIZWlnaHQpO3ZhciBmPXRoaXMub3B0aW9ucy5pY29ucz09PSEwP01hdGgubWF4KHRoaXMub3B0aW9ucy5pY29uV2lkdGgscCkrdGhpcy5vcHRpb25zLmxhYmVsT2Zmc2V0WCsxNTpwK3RoaXMub3B0aW9ucy5sYWJlbE9mZnNldFgrMTU7cmV0dXJuIHRoaXMubWF4TGFiZWxTaXplPnRoaXMud2lkdGgtZiYmdGhpcy5vcHRpb25zLnZpc2libGU9PT0hMD8odGhpcy53aWR0aD10aGlzLm1heExhYmVsU2l6ZStmLHRoaXMub3B0aW9ucy53aWR0aD10aGlzLndpZHRoKyJweCIscy5jbGVhbnVwRWxlbWVudHModGhpcy5ET01lbGVtZW50cy5saW5lcykscy5jbGVhbnVwRWxlbWVudHModGhpcy5ET01lbGVtZW50cy5sYWJlbHMpLHRoaXMucmVkcmF3KCksdD0hMCk6dGhpcy5tYXhMYWJlbFNpemU8dGhpcy53aWR0aC1mJiZ0aGlzLm9wdGlvbnMudmlzaWJsZT09PSEwJiZ0aGlzLndpZHRoPnRoaXMubWluV2lkdGg/KHRoaXMud2lkdGg9TWF0aC5tYXgodGhpcy5taW5XaWR0aCx0aGlzLm1heExhYmVsU2l6ZStmKSx0aGlzLm9wdGlvbnMud2lkdGg9dGhpcy53aWR0aCsicHgiLHMuY2xlYW51cEVsZW1lbnRzKHRoaXMuRE9NZWxlbWVudHMubGluZXMpLHMuY2xlYW51cEVsZW1lbnRzKHRoaXMuRE9NZWxlbWVudHMubGFiZWxzKSx0aGlzLnJlZHJhdygpLHQ9ITApOihzLmNsZWFudXBFbGVtZW50cyh0aGlzLkRPTWVsZW1lbnRzLmxpbmVzKSxzLmNsZWFudXBFbGVtZW50cyh0aGlzLkRPTWVsZW1lbnRzLmxhYmVscyksdD0hMSksdH0sby5wcm90b3R5cGUuY29udmVydFZhbHVlPWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMudmFsdWVBdEJvdHRvbS10LGk9ZSp0aGlzLmNvbnZlcnNpb25GYWN0b3I7cmV0dXJuIGl9LG8ucHJvdG90eXBlLnNjcmVlblRvVmFsdWU9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMudmFsdWVBdEJvdHRvbS10L3RoaXMuY29udmVyc2lvbkZhY3Rvcn0sby5wcm90b3R5cGUuX3JlZHJhd0xhYmVsPWZ1bmN0aW9uKHQsZSxpLG8sbil7dmFyIHI9cy5nZXRET01FbGVtZW50KCJkaXYiLHRoaXMuRE9NZWxlbWVudHMubGFiZWxzLHRoaXMuZG9tLmZyYW1lKTtyLmNsYXNzTmFtZT1vLHIuaW5uZXJIVE1MPWUsImxlZnQiPT09aT8oci5zdHlsZS5sZWZ0PSItIit0aGlzLm9wdGlvbnMubGFiZWxPZmZzZXRYKyJweCIsci5zdHlsZS50ZXh0QWxpZ249InJpZ2h0Iik6KHIuc3R5bGUucmlnaHQ9Ii0iK3RoaXMub3B0aW9ucy5sYWJlbE9mZnNldFgrInB4IixyLnN0eWxlLnRleHRBbGlnbj0ibGVmdCIpLHIuc3R5bGUudG9wPXQtLjUqbit0aGlzLm9wdGlvbnMubGFiZWxPZmZzZXRZKyJweCIsZSs9IiI7dmFyIGE9TWF0aC5tYXgodGhpcy5wcm9wcy5tYWpvckNoYXJXaWR0aCx0aGlzLnByb3BzLm1pbm9yQ2hhcldpZHRoKTt0aGlzLm1heExhYmVsU2l6ZTxlLmxlbmd0aCphJiYodGhpcy5tYXhMYWJlbFNpemU9ZS5sZW5ndGgqYSl9LG8ucHJvdG90eXBlLl9yZWRyYXdMaW5lPWZ1bmN0aW9uKHQsZSxpLG8sbil7aWYodGhpcy5tYXN0ZXI9PT0hMCl7dmFyIHI9cy5nZXRET01FbGVtZW50KCJkaXYiLHRoaXMuRE9NZWxlbWVudHMubGluZXMsdGhpcy5kb20ubGluZUNvbnRhaW5lcik7ci5jbGFzc05hbWU9aSxyLmlubmVySFRNTD0iIiwibGVmdCI9PT1lP3Iuc3R5bGUubGVmdD10aGlzLndpZHRoLW8rInB4IjpyLnN0eWxlLnJpZ2h0PXRoaXMud2lkdGgtbysicHgiLHIuc3R5bGUud2lkdGg9bisicHgiLHIuc3R5bGUudG9wPXQrInB4In19LG8ucHJvdG90eXBlLl9yZWRyYXdUaXRsZT1mdW5jdGlvbih0KXtpZihzLnByZXBhcmVFbGVtZW50cyh0aGlzLkRPTWVsZW1lbnRzLnRpdGxlKSx2b2lkIDAhPT10aGlzLm9wdGlvbnNbdF0udGl0bGUmJnZvaWQgMCE9PXRoaXMub3B0aW9uc1t0XS50aXRsZS50ZXh0KXt2YXIgZT1zLmdldERPTUVsZW1lbnQoImRpdiIsdGhpcy5ET01lbGVtZW50cy50aXRsZSx0aGlzLmRvbS5mcmFtZSk7ZS5jbGFzc05hbWU9InZpcy15LWF4aXMgdmlzLXRpdGxlIHZpcy0iK3QsZS5pbm5lckhUTUw9dGhpcy5vcHRpb25zW3RdLnRpdGxlLnRleHQsdm9pZCAwIT09dGhpcy5vcHRpb25zW3RdLnRpdGxlLnN0eWxlJiZuLmFkZENzc1RleHQoZSx0aGlzLm9wdGlvbnNbdF0udGl0bGUuc3R5bGUpLCJsZWZ0Ij09PXQ/ZS5zdHlsZS5sZWZ0PXRoaXMucHJvcHMudGl0bGVDaGFySGVpZ2h0KyJweCI6ZS5zdHlsZS5yaWdodD10aGlzLnByb3BzLnRpdGxlQ2hhckhlaWdodCsicHgiLGUuc3R5bGUud2lkdGg9dGhpcy5oZWlnaHQrInB4In1zLmNsZWFudXBFbGVtZW50cyh0aGlzLkRPTWVsZW1lbnRzLnRpdGxlKX0sby5wcm90b3R5cGUuX2NhbGN1bGF0ZUNoYXJTaXplPWZ1bmN0aW9uKCl7aWYoISgibWlub3JDaGFySGVpZ2h0ImluIHRoaXMucHJvcHMpKXt2YXIgdD1kb2N1bWVudC5jcmVhdGVUZXh0Tm9kZSgiMCIpLGU9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2Iik7ZS5jbGFzc05hbWU9InZpcy15LWF4aXMgdmlzLW1pbm9yIHZpcy1tZWFzdXJlIixlLmFwcGVuZENoaWxkKHQpLHRoaXMuZG9tLmZyYW1lLmFwcGVuZENoaWxkKGUpLHRoaXMucHJvcHMubWlub3JDaGFySGVpZ2h0PWUuY2xpZW50SGVpZ2h0LHRoaXMucHJvcHMubWlub3JDaGFyV2lkdGg9ZS5jbGllbnRXaWR0aCx0aGlzLmRvbS5mcmFtZS5yZW1vdmVDaGlsZChlKX1pZighKCJtYWpvckNoYXJIZWlnaHQiaW4gdGhpcy5wcm9wcykpe3ZhciBpPWRvY3VtZW50LmNyZWF0ZVRleHROb2RlKCIwIiksbz1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKTtvLmNsYXNzTmFtZT0idmlzLXktYXhpcyB2aXMtbWFqb3IgdmlzLW1lYXN1cmUiLG8uYXBwZW5kQ2hpbGQoaSksdGhpcy5kb20uZnJhbWUuYXBwZW5kQ2hpbGQobyksdGhpcy5wcm9wcy5tYWpvckNoYXJIZWlnaHQ9by5jbGllbnRIZWlnaHQsdGhpcy5wcm9wcy5tYWpvckNoYXJXaWR0aD1vLmNsaWVudFdpZHRoLHRoaXMuZG9tLmZyYW1lLnJlbW92ZUNoaWxkKG8pfWlmKCEoInRpdGxlQ2hhckhlaWdodCJpbiB0aGlzLnByb3BzKSl7dmFyIG49ZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUoIjAiKSxzPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpO3MuY2xhc3NOYW1lPSJ2aXMteS1heGlzIHZpcy10aXRsZSB2aXMtbWVhc3VyZSIscy5hcHBlbmRDaGlsZChuKSx0aGlzLmRvbS5mcmFtZS5hcHBlbmRDaGlsZChzKSx0aGlzLnByb3BzLnRpdGxlQ2hhckhlaWdodD1zLmNsaWVudEhlaWdodCx0aGlzLnByb3BzLnRpdGxlQ2hhcldpZHRoPXMuY2xpZW50V2lkdGgsdGhpcy5kb20uZnJhbWUucmVtb3ZlQ2hpbGQocyl9fSx0LmV4cG9ydHM9b30sZnVuY3Rpb24odCxlKXtmdW5jdGlvbiBpKHQsZSxpLG8sbixzLHIpe3RoaXMuY3VycmVudD0wLHRoaXMuYXV0b1NjYWxlPSEwLHRoaXMuc3RlcEluZGV4PTAsdGhpcy5zdGVwPTEsdGhpcy5zY2FsZT0xLHRoaXMuZm9ybWF0dGluZ0Z1bmN0aW9uPXMsdGhpcy5tYXJnaW5TdGFydCx0aGlzLm1hcmdpbkVuZCx0aGlzLmRlYWRTcGFjZT0wLHRoaXMubWFqb3JTdGVwcz1bMSwyLDUsMTBdLHRoaXMubWlub3JTdGVwcz1bLjI1LC41LDEsMl0sdGhpcy5hbGlnblplcm9zPXIsdGhpcy5zZXRSYW5nZSh0LGUsaSxvLG4pfWkucHJvdG90eXBlLnNldFJhbmdlPWZ1bmN0aW9uKHQsZSxpLG8sbil7dGhpcy5fc3RhcnQ9dm9pZCAwPT09bi5taW4/dDpuLm1pbix0aGlzLl9lbmQ9dm9pZCAwPT09bi5tYXg/ZTpuLm1heCx0aGlzLl9zdGFydD09PXRoaXMuX2VuZCYmKHRoaXMuX3N0YXJ0PXZvaWQgMD09PW4ubWluP3RoaXMuX3N0YXJ0LS43NTp0aGlzLl9zdGFydCx0aGlzLl9lbmQ9dm9pZCAwPT09bi5tYXg/dGhpcy5fZW5kKzE6dGhpcy5fZW5kKSx0aGlzLmF1dG9TY2FsZT09PSEwJiZ0aGlzLnNldE1pbmltdW1TdGVwKGksbyksdGhpcy5zZXRGaXJzdChuKX0saS5wcm90b3R5cGUuc2V0TWluaW11bVN0ZXA9ZnVuY3Rpb24odCxlKXt2YXIgaT10aGlzLl9lbmQtdGhpcy5fc3RhcnQsbz0xLjIqaSxuPXQqKG8vZSkscz1NYXRoLnJvdW5kKE1hdGgubG9nKG8pL01hdGguTE4xMCkscj0tMSxhPU1hdGgucG93KDEwLHMpLGg9MDswPnMmJihoPXMpO2Zvcih2YXIgZD0hMSxsPWg7TWF0aC5hYnMobCk8PU1hdGguYWJzKHMpO2wrKyl7YT1NYXRoLnBvdygxMCxsKTtmb3IodmFyIHU9MDt1PHRoaXMubWlub3JTdGVwcy5sZW5ndGg7dSsrKXt2YXIgYz1hKnRoaXMubWlub3JTdGVwc1t1XTtpZihjPj1uKXtkPSEwLHI9dTticmVha319aWYoZD09PSEwKWJyZWFrfXRoaXMuc3RlcEluZGV4PXIsdGhpcy5zY2FsZT1hLHRoaXMuc3RlcD1hKnRoaXMubWlub3JTdGVwc1tyXX0saS5wcm90b3R5cGUuc2V0Rmlyc3Q9ZnVuY3Rpb24odCl7dm9pZCAwPT09dCYmKHQ9e30pO3ZhciBlPXZvaWQgMD09PXQubWluP3RoaXMuX3N0YXJ0LTIqdGhpcy5zY2FsZSp0aGlzLm1pbm9yU3RlcHNbdGhpcy5zdGVwSW5kZXhdOnQubWluLGk9dm9pZCAwPT09dC5tYXg/dGhpcy5fZW5kK3RoaXMuc2NhbGUqdGhpcy5taW5vclN0ZXBzW3RoaXMuc3RlcEluZGV4XTp0Lm1heDt0aGlzLm1hcmdpbkVuZD12b2lkIDA9PT10Lm1heD90aGlzLnJvdW5kVG9NaW5vcihpKTp0Lm1heCx0aGlzLm1hcmdpblN0YXJ0PXZvaWQgMD09PXQubWluP3RoaXMucm91bmRUb01pbm9yKGUpOnQubWluLHRoaXMuYWxpZ25aZXJvcz09PSEwJiYodGhpcy5tYXJnaW5FbmQtdGhpcy5tYXJnaW5TdGFydCkldGhpcy5zdGVwIT0wJiYodGhpcy5tYXJnaW5FbmQrPXRoaXMubWFyZ2luRW5kJXRoaXMuc3RlcCksdGhpcy5kZWFkU3BhY2U9dGhpcy5yb3VuZFRvTWlub3IoaSktaSt0aGlzLnJvdW5kVG9NaW5vcihlKS1lLHRoaXMubWFyZ2luUmFuZ2U9dGhpcy5tYXJnaW5FbmQtdGhpcy5tYXJnaW5TdGFydCx0aGlzLmN1cnJlbnQ9dGhpcy5tYXJnaW5FbmR9LGkucHJvdG90eXBlLnJvdW5kVG9NaW5vcj1mdW5jdGlvbih0KXt2YXIgZT10LXQlKHRoaXMuc2NhbGUqdGhpcy5taW5vclN0ZXBzW3RoaXMuc3RlcEluZGV4XSk7cmV0dXJuIHQlKHRoaXMuc2NhbGUqdGhpcy5taW5vclN0ZXBzW3RoaXMuc3RlcEluZGV4XSk+LjUqKHRoaXMuc2NhbGUqdGhpcy5taW5vclN0ZXBzW3RoaXMuc3RlcEluZGV4XSk/ZSt0aGlzLnNjYWxlKnRoaXMubWlub3JTdGVwc1t0aGlzLnN0ZXBJbmRleF06ZX0saS5wcm90b3R5cGUuaGFzTmV4dD1mdW5jdGlvbigpe3JldHVybiB0aGlzLmN1cnJlbnQ+PXRoaXMubWFyZ2luU3RhcnR9LGkucHJvdG90eXBlLm5leHQ9ZnVuY3Rpb24oKXt2YXIgdD10aGlzLmN1cnJlbnQ7dGhpcy5jdXJyZW50LT10aGlzLnN0ZXAsdGhpcy5jdXJyZW50PT09dCYmKHRoaXMuY3VycmVudD10aGlzLl9lbmQpfSxpLnByb3RvdHlwZS5wcmV2aW91cz1mdW5jdGlvbigpe3RoaXMuY3VycmVudCs9dGhpcy5zdGVwLHRoaXMubWFyZ2luRW5kKz10aGlzLnN0ZXAsdGhpcy5tYXJnaW5SYW5nZT10aGlzLm1hcmdpbkVuZC10aGlzLm1hcmdpblN0YXJ0fSxpLnByb3RvdHlwZS5nZXRDdXJyZW50PWZ1bmN0aW9uKCl7dmFyIHQ9TWF0aC5hYnModGhpcy5jdXJyZW50KTx0aGlzLnN0ZXAvMj8wOnRoaXMuY3VycmVudCxlPXQudG9QcmVjaXNpb24oNSk7cmV0dXJuImZ1bmN0aW9uIj09dHlwZW9mIHRoaXMuZm9ybWF0dGluZ0Z1bmN0aW9uJiYoZT10aGlzLmZvcm1hdHRpbmdGdW5jdGlvbih0KSksIm51bWJlciI9PXR5cGVvZiBlPyIiK2U6InN0cmluZyI9PXR5cGVvZiBlP2U6dC50b1ByZWNpc2lvbig1KX0saS5wcm90b3R5cGUuaXNNYWpvcj1mdW5jdGlvbigpe3JldHVybiB0aGlzLmN1cnJlbnQlKHRoaXMuc2NhbGUqdGhpcy5tYWpvclN0ZXBzW3RoaXMuc3RlcEluZGV4XSk9PT0wfSxpLnByb3RvdHlwZS5zaGlmdD1mdW5jdGlvbih0KXtpZigwPnQpZm9yKHZhciBlPTA7LXQ+ZTtlKyspdGhpcy5wcmV2aW91cygpO2Vsc2UgaWYodD4wKWZvcih2YXIgZT0wO3Q+ZTtlKyspdGhpcy5uZXh0KCl9LHQuZXhwb3J0cz1pfSxmdW5jdGlvbih0LGUsaSl7ZnVuY3Rpb24gbyh0LGUsaSxvKXt0aGlzLmlkPWU7dmFyIHM9WyJzYW1wbGluZyIsInN0eWxlIiwic29ydCIsInlBeGlzT3JpZW50YXRpb24iLCJiYXJDaGFydCIsImRyYXdQb2ludHMiLCJzaGFkZWQiLCJpbnRlcnBvbGF0aW9uIiwiekluZGV4Il07dGhpcy5vcHRpb25zPW4uc2VsZWN0aXZlQnJpZGdlT2JqZWN0KHMsaSksdGhpcy51c2luZ0RlZmF1bHRTdHlsZT12b2lkIDA9PT10LmNsYXNzTmFtZSx0aGlzLmdyb3Vwc1VzaW5nRGVmYXVsdFN0eWxlcz1vLHRoaXMuemVyb1Bvc2l0aW9uPTAsdGhpcy51cGRhdGUodCksMT09dGhpcy51c2luZ0RlZmF1bHRTdHlsZSYmKHRoaXMuZ3JvdXBzVXNpbmdEZWZhdWx0U3R5bGVzWzBdKz0xKSx0aGlzLml0ZW1zRGF0YT1bXSx0aGlzLnZpc2libGU9dm9pZCAwPT09dC52aXNpYmxlPyEwOnQudmlzaWJsZX12YXIgbj1pKDEpLHM9KGkoNyksaSg1MykpLHI9aSg1NSksYT1pKDU0KTtvLnByb3RvdHlwZS5zZXRJdGVtcz1mdW5jdGlvbih0KXtudWxsIT10Pyh0aGlzLml0ZW1zRGF0YT10LDE9PXRoaXMub3B0aW9ucy5zb3J0JiZuLmluc2VydFNvcnQodGhpcy5pdGVtc0RhdGEsZnVuY3Rpb24odCxlKXtyZXR1cm4gdC54PmUueD8xOi0xfSkpOnRoaXMuaXRlbXNEYXRhPVtdfSxvLnByb3RvdHlwZS5nZXRJdGVtcz1mdW5jdGlvbigpe3JldHVybiB0aGlzLml0ZW1zRGF0YX0sby5wcm90b3R5cGUuc2V0WmVyb1Bvc2l0aW9uPWZ1bmN0aW9uKHQpe3RoaXMuemVyb1Bvc2l0aW9uPXR9LG8ucHJvdG90eXBlLnNldE9wdGlvbnM9ZnVuY3Rpb24odCl7aWYodm9pZCAwIT09dCl7dmFyIGU9WyJzYW1wbGluZyIsInN0eWxlIiwic29ydCIsInlBeGlzT3JpZW50YXRpb24iLCJiYXJDaGFydCIsImV4Y2x1ZGVGcm9tTGVnZW5kIiwiZXhjbHVkZUZyb21TdGFja2luZyIsInpJbmRleCJdO24uc2VsZWN0aXZlRGVlcEV4dGVuZChlLHRoaXMub3B0aW9ucyx0KSwiZnVuY3Rpb24iPT10eXBlb2YgdC5kcmF3UG9pbnRzJiYodC5kcmF3UG9pbnRzPXtvblJlbmRlcjp0LmRyYXdQb2ludHN9KSxuLm1lcmdlT3B0aW9ucyh0aGlzLm9wdGlvbnMsdCwiaW50ZXJwb2xhdGlvbiIpLG4ubWVyZ2VPcHRpb25zKHRoaXMub3B0aW9ucyx0LCJkcmF3UG9pbnRzIiksbi5tZXJnZU9wdGlvbnModGhpcy5vcHRpb25zLHQsInNoYWRlZCIpLHQuaW50ZXJwb2xhdGlvbiYmIm9iamVjdCI9PXR5cGVvZiB0LmludGVycG9sYXRpb24mJnQuaW50ZXJwb2xhdGlvbi5wYXJhbWV0cml6YXRpb24mJigidW5pZm9ybSI9PXQuaW50ZXJwb2xhdGlvbi5wYXJhbWV0cml6YXRpb24/dGhpcy5vcHRpb25zLmludGVycG9sYXRpb24uYWxwaGE9MDoiY2hvcmRhbCI9PXQuaW50ZXJwb2xhdGlvbi5wYXJhbWV0cml6YXRpb24/dGhpcy5vcHRpb25zLmludGVycG9sYXRpb24uYWxwaGE9MToodGhpcy5vcHRpb25zLmludGVycG9sYXRpb24ucGFyYW1ldHJpemF0aW9uPSJjZW50cmlwZXRhbCIsdGhpcy5vcHRpb25zLmludGVycG9sYXRpb24uYWxwaGE9LjUpKX19LG8ucHJvdG90eXBlLnVwZGF0ZT1mdW5jdGlvbih0KXt0aGlzLmdyb3VwPXQsdGhpcy5jb250ZW50PXQuY29udGVudHx8ImdyYXBoIix0aGlzLmNsYXNzTmFtZT10LmNsYXNzTmFtZXx8dGhpcy5jbGFzc05hbWV8fCJ2aXMtZ3JhcGgtZ3JvdXAiK3RoaXMuZ3JvdXBzVXNpbmdEZWZhdWx0U3R5bGVzWzBdJTEwLHRoaXMudmlzaWJsZT12b2lkIDA9PT10LnZpc2libGU/ITA6dC52aXNpYmxlLHRoaXMuc3R5bGU9dC5zdHlsZSx0aGlzLnNldE9wdGlvbnModC5vcHRpb25zKX0sby5wcm90b3R5cGUuZ2V0TGVnZW5kPWZ1bmN0aW9uKHQsZSxpLG8sbil7aWYodm9pZCAwPT1pfHxudWxsPT1pKXt2YXIgaD1kb2N1bWVudC5jcmVhdGVFbGVtZW50TlMoImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiwic3ZnIik7aT17c3ZnOmgsc3ZnRWxlbWVudHM6e30sb3B0aW9uczp0aGlzLm9wdGlvbnMsZ3JvdXBzOlt0aGlzXX19c3dpdGNoKCh2b2lkIDA9PW98fG51bGw9PW8pJiYobz0wKSwodm9pZCAwPT1ufHxudWxsPT1uKSYmKG49LjUqZSksdGhpcy5vcHRpb25zLnN0eWxlKXtjYXNlImxpbmUiOnIuZHJhd0ljb24odGhpcyxvLG4sdCxlLGkpO2JyZWFrO2Nhc2UicG9pbnRzIjpjYXNlInBvaW50IjphLmRyYXdJY29uKHRoaXMsbyxuLHQsZSxpKTticmVhaztjYXNlImJhciI6cy5kcmF3SWNvbih0aGlzLG8sbix0LGUsaSl9cmV0dXJue2ljb246aS5zdmcsbGFiZWw6dGhpcy5jb250ZW50LG9yaWVudGF0aW9uOnRoaXMub3B0aW9ucy55QXhpc09yaWVudGF0aW9ufX0sby5wcm90b3R5cGUuZ2V0WVJhbmdlPWZ1bmN0aW9uKHQpe2Zvcih2YXIgZT10WzBdLnksaT10WzBdLnksbz0wO288dC5sZW5ndGg7bysrKWU9ZT50W29dLnk/dFtvXS55OmUsaT1pPHRbb10ueT90W29dLnk6aTtyZXR1cm57bWluOmUsbWF4OmkseUF4aXNPcmllbnRhdGlvbjp0aGlzLm9wdGlvbnMueUF4aXNPcmllbnRhdGlvbn19LHQuZXhwb3J0cz1vfSxmdW5jdGlvbih0LGUsaSl7ZnVuY3Rpb24gbyh0LGUpe312YXIgbj1pKDcpLHM9aSg1NCk7by5kcmF3SWNvbj1mdW5jdGlvbih0LGUsaSxvLHMscil7dmFyIGE9LjUqcyxoPW4uZ2V0U1ZHRWxlbWVudCgicmVjdCIsci5zdmdFbGVtZW50cyxyLnN2Zyk7aC5zZXRBdHRyaWJ1dGVOUyhudWxsLCJ4IixlKSxoLnNldEF0dHJpYnV0ZU5TKG51bGwsInkiLGktYSksaC5zZXRBdHRyaWJ1dGVOUyhudWxsLCJ3aWR0aCIsbyksaC5zZXRBdHRyaWJ1dGVOUyhudWxsLCJoZWlnaHQiLDIqYSksaC5zZXRBdHRyaWJ1dGVOUyhudWxsLCJjbGFzcyIsInZpcy1vdXRsaW5lIik7dmFyIGQ9TWF0aC5yb3VuZCguMypvKSxsPXQub3B0aW9ucy5iYXJDaGFydC53aWR0aCx1PWwvZCxjPU1hdGgucm91bmQoLjQqcykscD1NYXRoLnJvdW5kKC43NSpzKSxmPU1hdGgucm91bmQoKG8tMipkKS8zKTtpZihuLmRyYXdCYXIoZSsuNSpkK2YsaSthLWMtMSxkLGMsdC5jbGFzc05hbWUrIiB2aXMtYmFyIixyLnN2Z0VsZW1lbnRzLHIuc3ZnLHQuc3R5bGUpLG4uZHJhd0JhcihlKzEuNSpkK2YrMixpK2EtcC0xLGQscCx0LmNsYXNzTmFtZSsiIHZpcy1iYXIiLHIuc3ZnRWxlbWVudHMsci5zdmcsdC5zdHlsZSksMT09dC5vcHRpb25zLmRyYXdQb2ludHMuZW5hYmxlZCl7dmFyIG09e3N0eWxlOnQub3B0aW9ucy5kcmF3UG9pbnRzLnN0eWxlLHN0eWxlczp0Lm9wdGlvbnMuZHJhd1BvaW50cy5zdHlsZXMsc2l6ZTp0Lm9wdGlvbnMuZHJhd1BvaW50cy5zaXplL3UsY2xhc3NOYW1lOnQuY2xhc3NOYW1lfTtuLmRyYXdQb2ludChlKy41KmQrZixpK2EtYy0xLG0sci5zdmdFbGVtZW50cyxyLnN2Zyksbi5kcmF3UG9pbnQoZSsxLjUqZCtmKzIsaSthLXAtMSxtLHIuc3ZnRWxlbWVudHMsci5zdmcpfX0sby5kcmF3PWZ1bmN0aW9uKHQsZSxpKXt2YXIgcixhLGgsZCxsLHUsYz1bXSxwPXt9LGY9MDtmb3IobD0wO2w8dC5sZW5ndGg7bCsrKWlmKGQ9aS5ncm91cHNbdFtsXV0sImJhciI9PT1kLm9wdGlvbnMuc3R5bGUmJmQudmlzaWJsZT09PSEwJiYodm9pZCAwPT09aS5vcHRpb25zLmdyb3Vwcy52aXNpYmlsaXR5W3RbbF1dfHxpLm9wdGlvbnMuZ3JvdXBzLnZpc2liaWxpdHlbdFtsXV09PT0hMCkpZm9yKHU9MDt1PGVbdFtsXV0ubGVuZ3RoO3UrKyljLnB1c2goe3NjcmVlbl94OmVbdFtsXV1bdV0uc2NyZWVuX3gsc2NyZWVuX3k6ZVt0W2xdXVt1XS5zY3JlZW5feSx4OmVbdFtsXV1bdV0ueCx5OmVbdFtsXV1bdV0ueSxncm91cElkOnRbbF0sbGFiZWw6ZVt0W2xdXVt1XS5sYWJlbH0pLGYrPTE7aWYoMCE9PWYpZm9yKGMuc29ydChmdW5jdGlvbih0LGUpe3JldHVybiB0LnNjcmVlbl94PT09ZS5zY3JlZW5feD90Lmdyb3VwSWQ8ZS5ncm91cElkPy0xOjE6dC5zY3JlZW5feC1lLnNjcmVlbl94fSksby5fZ2V0RGF0YUludGVyc2VjdGlvbnMocCxjKSxsPTA7bDxjLmxlbmd0aDtsKyspe2Q9aS5ncm91cHNbY1tsXS5ncm91cElkXTt2YXIgbT0uMSpkLm9wdGlvbnMuYmFyQ2hhcnQud2lkdGg7YT1jW2xdLnNjcmVlbl94O3ZhciB2PTA7aWYodm9pZCAwPT09cFthXSlsKzE8Yy5sZW5ndGgmJihyPU1hdGguYWJzKGNbbCsxXS5zY3JlZW5feC1hKSksbD4wJiYocj1NYXRoLm1pbihyLE1hdGguYWJzKGNbbC0xXS5zY3JlZW5feC1hKSkpLGg9by5fZ2V0U2FmZURyYXdEYXRhKHIsZCxtKTtlbHNle3ZhciBnPWwrKHBbYV0uYW1vdW50LXBbYV0ucmVzb2x2ZWQpLHk9bC0ocFthXS5yZXNvbHZlZCsxKTtnPGMubGVuZ3RoJiYocj1NYXRoLmFicyhjW2ddLnNjcmVlbl94LWEpKSx5PjAmJihyPU1hdGgubWluKHIsTWF0aC5hYnMoY1t5XS5zY3JlZW5feC1hKSkpLGg9by5fZ2V0U2FmZURyYXdEYXRhKHIsZCxtKSxwW2FdLnJlc29sdmVkKz0xLGQub3B0aW9ucy5zdGFjaz09PSEwP2NbbF0uc2NyZWVuX3k8ZC56ZXJvUG9zaXRpb24/KHY9cFthXS5hY2N1bXVsYXRlZE5lZ2F0aXZlLHBbYV0uYWNjdW11bGF0ZWROZWdhdGl2ZSs9ZC56ZXJvUG9zaXRpb24tY1tsXS5zY3JlZW5feSk6KHY9cFthXS5hY2N1bXVsYXRlZFBvc2l0aXZlLHBbYV0uYWNjdW11bGF0ZWRQb3NpdGl2ZSs9ZC56ZXJvUG9zaXRpb24tY1tsXS5zY3JlZW5feSk6ZC5vcHRpb25zLmJhckNoYXJ0LnNpZGVCeVNpZGU9PT0hMCYmKGgud2lkdGg9aC53aWR0aC9wW2FdLmFtb3VudCxoLm9mZnNldCs9cFthXS5yZXNvbHZlZCpoLndpZHRoLS41Kmgud2lkdGgqKHBbYV0uYW1vdW50KzEpLCJsZWZ0Ij09PWQub3B0aW9ucy5iYXJDaGFydC5hbGlnbj9oLm9mZnNldC09LjUqaC53aWR0aDoicmlnaHQiPT09ZC5vcHRpb25zLmJhckNoYXJ0LmFsaWduJiYoaC5vZmZzZXQrPS41Kmgud2lkdGgpKX1pZihuLmRyYXdCYXIoY1tsXS5zY3JlZW5feCtoLm9mZnNldCxjW2xdLnNjcmVlbl95LXYsaC53aWR0aCxkLnplcm9Qb3NpdGlvbi1jW2xdLnNjcmVlbl95LGQuY2xhc3NOYW1lKyIgdmlzLWJhciIsaS5zdmdFbGVtZW50cyxpLnN2ZyxkLnN0eWxlKSxkLm9wdGlvbnMuZHJhd1BvaW50cy5lbmFibGVkPT09ITApe3ZhciBiPXtzY3JlZW5feDpjW2xdLnNjcmVlbl94LHNjcmVlbl95OmNbbF0uc2NyZWVuX3ktdix4OmNbbF0ueCx5OmNbbF0ueSxncm91cElkOmNbbF0uZ3JvdXBJZCxsYWJlbDpjW2xdLmxhYmVsfTtzLmRyYXcoW2JdLGQsaSxoLm9mZnNldCl9fX0sby5fZ2V0RGF0YUludGVyc2VjdGlvbnM9ZnVuY3Rpb24odCxlKXtmb3IodmFyIGksbz0wO288ZS5sZW5ndGg7bysrKW8rMTxlLmxlbmd0aCYmKGk9TWF0aC5hYnMoZVtvKzFdLnNjcmVlbl94LWVbb10uc2NyZWVuX3gpKSxvPjAmJihpPU1hdGgubWluKGksTWF0aC5hYnMoZVtvLTFdLnNjcmVlbl94LWVbb10uc2NyZWVuX3gpKSksMD09PWkmJih2b2lkIDA9PT10W2Vbb10uc2NyZWVuX3hdJiYodFtlW29dLnNjcmVlbl94XT17YW1vdW50OjAscmVzb2x2ZWQ6MCxhY2N1bXVsYXRlZFBvc2l0aXZlOjAsYWNjdW11bGF0ZWROZWdhdGl2ZTowfSksdFtlW29dLnNjcmVlbl94XS5hbW91bnQrPTEpfSxvLl9nZXRTYWZlRHJhd0RhdGE9ZnVuY3Rpb24odCxlLGkpe3ZhciBvLG47cmV0dXJuIHQ8ZS5vcHRpb25zLmJhckNoYXJ0LndpZHRoJiZ0PjA/KG89aT50P2k6dCxuPTAsImxlZnQiPT09ZS5vcHRpb25zLmJhckNoYXJ0LmFsaWduP24tPS41KnQ6InJpZ2h0Ij09PWUub3B0aW9ucy5iYXJDaGFydC5hbGlnbiYmKG4rPS41KnQpKToobz1lLm9wdGlvbnMuYmFyQ2hhcnQud2lkdGgsbj0wLAoibGVmdCI9PT1lLm9wdGlvbnMuYmFyQ2hhcnQuYWxpZ24/bi09LjUqZS5vcHRpb25zLmJhckNoYXJ0LndpZHRoOiJyaWdodCI9PT1lLm9wdGlvbnMuYmFyQ2hhcnQuYWxpZ24mJihuKz0uNSplLm9wdGlvbnMuYmFyQ2hhcnQud2lkdGgpKSx7d2lkdGg6byxvZmZzZXQ6bn19LG8uZ2V0U3RhY2tlZFlSYW5nZT1mdW5jdGlvbih0LGUsaSxuLHMpe2lmKHQubGVuZ3RoPjApe3Quc29ydChmdW5jdGlvbih0LGUpe3JldHVybiB0LnNjcmVlbl94PT09ZS5zY3JlZW5feD90Lmdyb3VwSWQ8ZS5ncm91cElkPy0xOjE6dC5zY3JlZW5feC1lLnNjcmVlbl94fSk7dmFyIHI9e307by5fZ2V0RGF0YUludGVyc2VjdGlvbnMocix0KSxlW25dPW8uX2dldFN0YWNrZWRZUmFuZ2Uocix0KSxlW25dLnlBeGlzT3JpZW50YXRpb249cyxpLnB1c2gobil9fSxvLl9nZXRTdGFja2VkWVJhbmdlPWZ1bmN0aW9uKHQsZSl7Zm9yKHZhciBpLG89ZVswXS5zY3JlZW5feSxuPWVbMF0uc2NyZWVuX3kscz0wO3M8ZS5sZW5ndGg7cysrKWk9ZVtzXS5zY3JlZW5feCx2b2lkIDA9PT10W2ldPyhvPW8+ZVtzXS5zY3JlZW5feT9lW3NdLnNjcmVlbl95Om8sbj1uPGVbc10uc2NyZWVuX3k/ZVtzXS5zY3JlZW5feTpuKTplW3NdLnNjcmVlbl95PDA/dFtpXS5hY2N1bXVsYXRlZE5lZ2F0aXZlKz1lW3NdLnNjcmVlbl95OnRbaV0uYWNjdW11bGF0ZWRQb3NpdGl2ZSs9ZVtzXS5zY3JlZW5feTtmb3IodmFyIHIgaW4gdCl0Lmhhc093blByb3BlcnR5KHIpJiYobz1vPnRbcl0uYWNjdW11bGF0ZWROZWdhdGl2ZT90W3JdLmFjY3VtdWxhdGVkTmVnYXRpdmU6byxvPW8+dFtyXS5hY2N1bXVsYXRlZFBvc2l0aXZlP3Rbcl0uYWNjdW11bGF0ZWRQb3NpdGl2ZTpvLG49bjx0W3JdLmFjY3VtdWxhdGVkTmVnYXRpdmU/dFtyXS5hY2N1bXVsYXRlZE5lZ2F0aXZlOm4sbj1uPHRbcl0uYWNjdW11bGF0ZWRQb3NpdGl2ZT90W3JdLmFjY3VtdWxhdGVkUG9zaXRpdmU6bik7cmV0dXJue21pbjpvLG1heDpufX0sdC5leHBvcnRzPW99LGZ1bmN0aW9uKHQsZSxpKXtmdW5jdGlvbiBvKHQsZSl7fWZ1bmN0aW9uIG4odCxlKXtyZXR1cm4gZT0idW5kZWZpbmVkIj09dHlwZW9mIGU/e306ZSx7c3R5bGU6ZS5zdHlsZXx8dC5vcHRpb25zLmRyYXdQb2ludHMuc3R5bGUsc3R5bGVzOmUuc3R5bGVzfHx0Lm9wdGlvbnMuZHJhd1BvaW50cy5zdHlsZXMsc2l6ZTplLnNpemV8fHQub3B0aW9ucy5kcmF3UG9pbnRzLnNpemUsY2xhc3NOYW1lOmUuY2xhc3NOYW1lfHx0LmNsYXNzTmFtZX19ZnVuY3Rpb24gcyh0LGUpe3ZhciBpPXZvaWQgMDtyZXR1cm4gdC5vcHRpb25zJiZ0Lm9wdGlvbnMuZHJhd1BvaW50cyYmdC5vcHRpb25zLmRyYXdQb2ludHMub25SZW5kZXImJiJmdW5jdGlvbiI9PXR5cGVvZiB0Lm9wdGlvbnMuZHJhd1BvaW50cy5vblJlbmRlciYmKGk9dC5vcHRpb25zLmRyYXdQb2ludHMub25SZW5kZXIpLGUuZ3JvdXAub3B0aW9ucyYmZS5ncm91cC5vcHRpb25zLmRyYXdQb2ludHMmJmUuZ3JvdXAub3B0aW9ucy5kcmF3UG9pbnRzLm9uUmVuZGVyJiYiZnVuY3Rpb24iPT10eXBlb2YgZS5ncm91cC5vcHRpb25zLmRyYXdQb2ludHMub25SZW5kZXImJihpPWUuZ3JvdXAub3B0aW9ucy5kcmF3UG9pbnRzLm9uUmVuZGVyKSxpfXZhciByPWkoNyk7by5kcmF3PWZ1bmN0aW9uKHQsZSxpLG8pe289b3x8MDtmb3IodmFyIGE9cyhpLGUpLGg9MDtoPHQubGVuZ3RoO2grKylpZihhKXt2YXIgZD1hKHRbaF0sZSk7KGQ9PT0hMHx8Im9iamVjdCI9PXR5cGVvZiBkKSYmci5kcmF3UG9pbnQodFtoXS5zY3JlZW5feCtvLHRbaF0uc2NyZWVuX3ksbihlLGQpLGkuc3ZnRWxlbWVudHMsaS5zdmcsdFtoXS5sYWJlbCl9ZWxzZSByLmRyYXdQb2ludCh0W2hdLnNjcmVlbl94K28sdFtoXS5zY3JlZW5feSxuKGUpLGkuc3ZnRWxlbWVudHMsaS5zdmcsdFtoXS5sYWJlbCl9LG8uZHJhd0ljb249ZnVuY3Rpb24odCxlLGksbyxzLGEpe3ZhciBoPS41KnMsZD1yLmdldFNWR0VsZW1lbnQoInJlY3QiLGEuc3ZnRWxlbWVudHMsYS5zdmcpO2Quc2V0QXR0cmlidXRlTlMobnVsbCwieCIsZSksZC5zZXRBdHRyaWJ1dGVOUyhudWxsLCJ5IixpLWgpLGQuc2V0QXR0cmlidXRlTlMobnVsbCwid2lkdGgiLG8pLGQuc2V0QXR0cmlidXRlTlMobnVsbCwiaGVpZ2h0IiwyKmgpLGQuc2V0QXR0cmlidXRlTlMobnVsbCwiY2xhc3MiLCJ2aXMtb3V0bGluZSIpLHIuZHJhd1BvaW50KGUrLjUqbyxpLG4odCksYS5zdmdFbGVtZW50cyxhLnN2Zyl9LHQuZXhwb3J0cz1vfSxmdW5jdGlvbih0LGUsaSl7ZnVuY3Rpb24gbyh0LGUpe312YXIgbj1pKDcpO28uY2FsY1BhdGg9ZnVuY3Rpb24odCxlKXtpZihudWxsIT10JiZ0Lmxlbmd0aD4wKXt2YXIgaT1bXTtyZXR1cm4gaT0xPT1lLm9wdGlvbnMuaW50ZXJwb2xhdGlvbi5lbmFibGVkP28uX2NhdG11bGxSb20odCxlKTpvLl9saW5lYXIodCl9fSxvLmRyYXdJY29uPWZ1bmN0aW9uKHQsZSxpLG8scyxyKXt2YXIgYSxoLGQ9LjUqcyxsPW4uZ2V0U1ZHRWxlbWVudCgicmVjdCIsci5zdmdFbGVtZW50cyxyLnN2Zyk7aWYobC5zZXRBdHRyaWJ1dGVOUyhudWxsLCJ4IixlKSxsLnNldEF0dHJpYnV0ZU5TKG51bGwsInkiLGktZCksbC5zZXRBdHRyaWJ1dGVOUyhudWxsLCJ3aWR0aCIsbyksbC5zZXRBdHRyaWJ1dGVOUyhudWxsLCJoZWlnaHQiLDIqZCksbC5zZXRBdHRyaWJ1dGVOUyhudWxsLCJjbGFzcyIsInZpcy1vdXRsaW5lIiksYT1uLmdldFNWR0VsZW1lbnQoInBhdGgiLHIuc3ZnRWxlbWVudHMsci5zdmcpLGEuc2V0QXR0cmlidXRlTlMobnVsbCwiY2xhc3MiLHQuY2xhc3NOYW1lKSx2b2lkIDAhPT10LnN0eWxlJiZhLnNldEF0dHJpYnV0ZU5TKG51bGwsInN0eWxlIix0LnN0eWxlKSxhLnNldEF0dHJpYnV0ZU5TKG51bGwsImQiLCJNIitlKyIsIitpKyIgTCIrKGUrbykrIiwiK2kpLDE9PXQub3B0aW9ucy5zaGFkZWQuZW5hYmxlZCYmKGg9bi5nZXRTVkdFbGVtZW50KCJwYXRoIixyLnN2Z0VsZW1lbnRzLHIuc3ZnKSwidG9wIj09dC5vcHRpb25zLnNoYWRlZC5vcmllbnRhdGlvbj9oLnNldEF0dHJpYnV0ZU5TKG51bGwsImQiLCJNIitlKyIsICIrKGktZCkrIkwiK2UrIiwiK2krIiBMIisoZStvKSsiLCIraSsiIEwiKyhlK28pKyIsIisoaS1kKSk6aC5zZXRBdHRyaWJ1dGVOUyhudWxsLCJkIiwiTSIrZSsiLCIraSsiIEwiK2UrIiwiKyhpK2QpKyIgTCIrKGUrbykrIiwiKyhpK2QpKyJMIisoZStvKSsiLCIraSksaC5zZXRBdHRyaWJ1dGVOUyhudWxsLCJjbGFzcyIsdC5jbGFzc05hbWUrIiB2aXMtaWNvbi1maWxsIiksdm9pZCAwIT09dC5vcHRpb25zLnNoYWRlZC5zdHlsZSYmIiIhPT10Lm9wdGlvbnMuc2hhZGVkLnN0eWxlJiZoLnNldEF0dHJpYnV0ZU5TKG51bGwsInN0eWxlIix0Lm9wdGlvbnMuc2hhZGVkLnN0eWxlKSksMT09dC5vcHRpb25zLmRyYXdQb2ludHMuZW5hYmxlZCl7dmFyIHU9e3N0eWxlOnQub3B0aW9ucy5kcmF3UG9pbnRzLnN0eWxlLHN0eWxlczp0Lm9wdGlvbnMuZHJhd1BvaW50cy5zdHlsZXMsc2l6ZTp0Lm9wdGlvbnMuZHJhd1BvaW50cy5zaXplLGNsYXNzTmFtZTp0LmNsYXNzTmFtZX07bi5kcmF3UG9pbnQoZSsuNSpvLGksdSxyLnN2Z0VsZW1lbnRzLHIuc3ZnKX19LG8uZHJhd1NoYWRpbmc9ZnVuY3Rpb24odCxlLGksbyl7aWYoMT09ZS5vcHRpb25zLnNoYWRlZC5lbmFibGVkKXt2YXIgcz1OdW1iZXIoby5zdmcuc3R5bGUuaGVpZ2h0LnJlcGxhY2UoInB4IiwiIikpLHI9bi5nZXRTVkdFbGVtZW50KCJwYXRoIixvLnN2Z0VsZW1lbnRzLG8uc3ZnKSxhPSJMIjsxPT1lLm9wdGlvbnMuaW50ZXJwb2xhdGlvbi5lbmFibGVkJiYoYT0iQyIpO3ZhciBoLGQ9MDtkPSJ0b3AiPT1lLm9wdGlvbnMuc2hhZGVkLm9yaWVudGF0aW9uPzA6ImJvdHRvbSI9PWUub3B0aW9ucy5zaGFkZWQub3JpZW50YXRpb24/czpNYXRoLm1pbihNYXRoLm1heCgwLGUuemVyb1Bvc2l0aW9uKSxzKSxoPSJncm91cCI9PWUub3B0aW9ucy5zaGFkZWQub3JpZW50YXRpb24mJm51bGwhPWkmJnZvaWQgMCE9aT8iTSIrdFswXVswXSsiLCIrdFswXVsxXSsiICIrdGhpcy5zZXJpYWxpemVQYXRoKHQsYSwhMSkrIiBMIitpW2kubGVuZ3RoLTFdWzBdKyIsIitpW2kubGVuZ3RoLTFdWzFdKyIgIit0aGlzLnNlcmlhbGl6ZVBhdGgoaSxhLCEwKStpWzBdWzBdKyIsIitpWzBdWzFdKyIgWiI6Ik0iK3RbMF1bMF0rIiwiK3RbMF1bMV0rIiAiK3RoaXMuc2VyaWFsaXplUGF0aCh0LGEsITEpKyIgViIrZCsiIEgiK3RbMF1bMF0rIiBaIixyLnNldEF0dHJpYnV0ZU5TKG51bGwsImNsYXNzIixlLmNsYXNzTmFtZSsiIHZpcy1maWxsIiksdm9pZCAwIT09ZS5vcHRpb25zLnNoYWRlZC5zdHlsZSYmci5zZXRBdHRyaWJ1dGVOUyhudWxsLCJzdHlsZSIsZS5vcHRpb25zLnNoYWRlZC5zdHlsZSksci5zZXRBdHRyaWJ1dGVOUyhudWxsLCJkIixoKX19LG8uZHJhdz1mdW5jdGlvbih0LGUsaSl7aWYobnVsbCE9dCYmdm9pZCAwIT10KXt2YXIgbz1uLmdldFNWR0VsZW1lbnQoInBhdGgiLGkuc3ZnRWxlbWVudHMsaS5zdmcpO28uc2V0QXR0cmlidXRlTlMobnVsbCwiY2xhc3MiLGUuY2xhc3NOYW1lKSx2b2lkIDAhPT1lLnN0eWxlJiZvLnNldEF0dHJpYnV0ZU5TKG51bGwsInN0eWxlIixlLnN0eWxlKTt2YXIgcz0iTCI7MT09ZS5vcHRpb25zLmludGVycG9sYXRpb24uZW5hYmxlZCYmKHM9IkMiKSxvLnNldEF0dHJpYnV0ZU5TKG51bGwsImQiLCJNIit0WzBdWzBdKyIsIit0WzBdWzFdKyIgIit0aGlzLnNlcmlhbGl6ZVBhdGgodCxzLCExKSl9fSxvLnNlcmlhbGl6ZVBhdGg9ZnVuY3Rpb24odCxlLGkpe2lmKHQubGVuZ3RoPDIpcmV0dXJuIiI7dmFyIG89ZTtpZihpKWZvcih2YXIgbj10Lmxlbmd0aC0yO24+MDtuLS0pbys9dFtuXVswXSsiLCIrdFtuXVsxXSsiICI7ZWxzZSBmb3IodmFyIG49MTtuPHQubGVuZ3RoO24rKylvKz10W25dWzBdKyIsIit0W25dWzFdKyIgIjtyZXR1cm4gb30sby5fY2F0bXVsbFJvbVVuaWZvcm09ZnVuY3Rpb24odCl7dmFyIGUsaSxvLG4scyxyLGE9W107YS5wdXNoKFtNYXRoLnJvdW5kKHRbMF0uc2NyZWVuX3gpLE1hdGgucm91bmQodFswXS5zY3JlZW5feSldKTtmb3IodmFyIGg9MS82LGQ9dC5sZW5ndGgsbD0wO2QtMT5sO2wrKyllPTA9PWw/dFswXTp0W2wtMV0saT10W2xdLG89dFtsKzFdLG49ZD5sKzI/dFtsKzJdOm8scz17c2NyZWVuX3g6KC1lLnNjcmVlbl94KzYqaS5zY3JlZW5feCtvLnNjcmVlbl94KSpoLHNjcmVlbl95OigtZS5zY3JlZW5feSs2Kmkuc2NyZWVuX3krby5zY3JlZW5feSkqaH0scj17c2NyZWVuX3g6KGkuc2NyZWVuX3grNipvLnNjcmVlbl94LW4uc2NyZWVuX3gpKmgsc2NyZWVuX3k6KGkuc2NyZWVuX3krNipvLnNjcmVlbl95LW4uc2NyZWVuX3kpKmh9LGEucHVzaChbcy5zY3JlZW5feCxzLnNjcmVlbl95XSksYS5wdXNoKFtyLnNjcmVlbl94LHIuc2NyZWVuX3ldKSxhLnB1c2goW28uc2NyZWVuX3gsby5zY3JlZW5feV0pO3JldHVybiBhfSxvLl9jYXRtdWxsUm9tPWZ1bmN0aW9uKHQsZSl7dmFyIGk9ZS5vcHRpb25zLmludGVycG9sYXRpb24uYWxwaGE7aWYoMD09aXx8dm9pZCAwPT09aSlyZXR1cm4gdGhpcy5fY2F0bXVsbFJvbVVuaWZvcm0odCk7dmFyIG8sbixzLHIsYSxoLGQsbCx1LGMscCxmLG0sdixnLHksYix3LF8seD1bXTt4LnB1c2goW01hdGgucm91bmQodFswXS5zY3JlZW5feCksTWF0aC5yb3VuZCh0WzBdLnNjcmVlbl95KV0pO2Zvcih2YXIgaz10Lmxlbmd0aCxPPTA7ay0xPk87TysrKW89MD09Tz90WzBdOnRbTy0xXSxuPXRbT10scz10W08rMV0scj1rPk8rMj90W08rMl06cyxkPU1hdGguc3FydChNYXRoLnBvdyhvLnNjcmVlbl94LW4uc2NyZWVuX3gsMikrTWF0aC5wb3coby5zY3JlZW5feS1uLnNjcmVlbl95LDIpKSxsPU1hdGguc3FydChNYXRoLnBvdyhuLnNjcmVlbl94LXMuc2NyZWVuX3gsMikrTWF0aC5wb3cobi5zY3JlZW5feS1zLnNjcmVlbl95LDIpKSx1PU1hdGguc3FydChNYXRoLnBvdyhzLnNjcmVlbl94LXIuc2NyZWVuX3gsMikrTWF0aC5wb3cocy5zY3JlZW5feS1yLnNjcmVlbl95LDIpKSx2PU1hdGgucG93KHUsaSkseT1NYXRoLnBvdyh1LDIqaSksZz1NYXRoLnBvdyhsLGkpLGI9TWF0aC5wb3cobCwyKmkpLF89TWF0aC5wb3coZCxpKSx3PU1hdGgucG93KGQsMippKSxjPTIqdyszKl8qZytiLHA9Mip5KzMqdipnK2IsZj0zKl8qKF8rZyksZj4wJiYoZj0xL2YpLG09Myp2Kih2K2cpLG0+MCYmKG09MS9tKSxhPXtzY3JlZW5feDooLWIqby5zY3JlZW5feCtjKm4uc2NyZWVuX3grdypzLnNjcmVlbl94KSpmLHNjcmVlbl95OigtYipvLnNjcmVlbl95K2Mqbi5zY3JlZW5feSt3KnMuc2NyZWVuX3kpKmZ9LGg9e3NjcmVlbl94Oih5Km4uc2NyZWVuX3grcCpzLnNjcmVlbl94LWIqci5zY3JlZW5feCkqbSxzY3JlZW5feTooeSpuLnNjcmVlbl95K3Aqcy5zY3JlZW5feS1iKnIuc2NyZWVuX3kpKm19LDA9PWEuc2NyZWVuX3gmJjA9PWEuc2NyZWVuX3kmJihhPW4pLDA9PWguc2NyZWVuX3gmJjA9PWguc2NyZWVuX3kmJihoPXMpLHgucHVzaChbYS5zY3JlZW5feCxhLnNjcmVlbl95XSkseC5wdXNoKFtoLnNjcmVlbl94LGguc2NyZWVuX3ldKSx4LnB1c2goW3Muc2NyZWVuX3gscy5zY3JlZW5feV0pO3JldHVybiB4fSxvLl9saW5lYXI9ZnVuY3Rpb24odCl7Zm9yKHZhciBlPVtdLGk9MDtpPHQubGVuZ3RoO2krKyllLnB1c2goW3RbaV0uc2NyZWVuX3gsdFtpXS5zY3JlZW5feV0pO3JldHVybiBlfSx0LmV4cG9ydHM9b30sZnVuY3Rpb24odCxlLGkpe2Z1bmN0aW9uIG8odCxlLGksbyl7dGhpcy5ib2R5PXQsdGhpcy5kZWZhdWx0T3B0aW9ucz17ZW5hYmxlZDohMCxpY29uczohMCxpY29uU2l6ZToyMCxpY29uU3BhY2luZzo2LGxlZnQ6e3Zpc2libGU6ITAscG9zaXRpb246InRvcC1sZWZ0In0scmlnaHQ6e3Zpc2libGU6ITAscG9zaXRpb246InRvcC1sZWZ0In19LHRoaXMuc2lkZT1pLHRoaXMub3B0aW9ucz1uLmV4dGVuZCh7fSx0aGlzLmRlZmF1bHRPcHRpb25zKSx0aGlzLmxpbmVncmFwaE9wdGlvbnM9byx0aGlzLnN2Z0VsZW1lbnRzPXt9LHRoaXMuZG9tPXt9LHRoaXMuZ3JvdXBzPXt9LHRoaXMuYW1vdW50T2ZHcm91cHM9MCx0aGlzLl9jcmVhdGUoKSx0aGlzLmZyYW1ld29yaz17c3ZnOnRoaXMuc3ZnLHN2Z0VsZW1lbnRzOnRoaXMuc3ZnRWxlbWVudHMsb3B0aW9uczp0aGlzLm9wdGlvbnMsZ3JvdXBzOnRoaXMuZ3JvdXBzfSx0aGlzLnNldE9wdGlvbnMoZSl9dmFyIG49aSgxKSxzPWkoNykscj1pKDI1KTtvLnByb3RvdHlwZT1uZXcgcixvLnByb3RvdHlwZS5jbGVhcj1mdW5jdGlvbigpe3RoaXMuZ3JvdXBzPXt9LHRoaXMuYW1vdW50T2ZHcm91cHM9MH0sby5wcm90b3R5cGUuYWRkR3JvdXA9ZnVuY3Rpb24odCxlKXsxIT1lLm9wdGlvbnMuZXhjbHVkZUZyb21MZWdlbmQmJih0aGlzLmdyb3Vwcy5oYXNPd25Qcm9wZXJ0eSh0KXx8KHRoaXMuZ3JvdXBzW3RdPWUpLHRoaXMuYW1vdW50T2ZHcm91cHMrPTEpfSxvLnByb3RvdHlwZS51cGRhdGVHcm91cD1mdW5jdGlvbih0LGUpe3RoaXMuZ3JvdXBzW3RdPWV9LG8ucHJvdG90eXBlLnJlbW92ZUdyb3VwPWZ1bmN0aW9uKHQpe3RoaXMuZ3JvdXBzLmhhc093blByb3BlcnR5KHQpJiYoZGVsZXRlIHRoaXMuZ3JvdXBzW3RdLHRoaXMuYW1vdW50T2ZHcm91cHMtPTEpfSxvLnByb3RvdHlwZS5fY3JlYXRlPWZ1bmN0aW9uKCl7dGhpcy5kb20uZnJhbWU9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2IiksdGhpcy5kb20uZnJhbWUuY2xhc3NOYW1lPSJ2aXMtbGVnZW5kIix0aGlzLmRvbS5mcmFtZS5zdHlsZS5wb3NpdGlvbj0iYWJzb2x1dGUiLHRoaXMuZG9tLmZyYW1lLnN0eWxlLnRvcD0iMTBweCIsdGhpcy5kb20uZnJhbWUuc3R5bGUuZGlzcGxheT0iYmxvY2siLHRoaXMuZG9tLnRleHRBcmVhPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpLHRoaXMuZG9tLnRleHRBcmVhLmNsYXNzTmFtZT0idmlzLWxlZ2VuZC10ZXh0Iix0aGlzLmRvbS50ZXh0QXJlYS5zdHlsZS5wb3NpdGlvbj0icmVsYXRpdmUiLHRoaXMuZG9tLnRleHRBcmVhLnN0eWxlLnRvcD0iMHB4Iix0aGlzLnN2Zz1kb2N1bWVudC5jcmVhdGVFbGVtZW50TlMoImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiwic3ZnIiksdGhpcy5zdmcuc3R5bGUucG9zaXRpb249ImFic29sdXRlIix0aGlzLnN2Zy5zdHlsZS50b3A9IjBweCIsdGhpcy5zdmcuc3R5bGUud2lkdGg9dGhpcy5vcHRpb25zLmljb25TaXplKzUrInB4Iix0aGlzLnN2Zy5zdHlsZS5oZWlnaHQ9IjEwMCUiLHRoaXMuZG9tLmZyYW1lLmFwcGVuZENoaWxkKHRoaXMuc3ZnKSx0aGlzLmRvbS5mcmFtZS5hcHBlbmRDaGlsZCh0aGlzLmRvbS50ZXh0QXJlYSl9LG8ucHJvdG90eXBlLmhpZGU9ZnVuY3Rpb24oKXt0aGlzLmRvbS5mcmFtZS5wYXJlbnROb2RlJiZ0aGlzLmRvbS5mcmFtZS5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKHRoaXMuZG9tLmZyYW1lKX0sby5wcm90b3R5cGUuc2hvdz1mdW5jdGlvbigpe3RoaXMuZG9tLmZyYW1lLnBhcmVudE5vZGV8fHRoaXMuYm9keS5kb20uY2VudGVyLmFwcGVuZENoaWxkKHRoaXMuZG9tLmZyYW1lKX0sby5wcm90b3R5cGUuc2V0T3B0aW9ucz1mdW5jdGlvbih0KXt2YXIgZT1bImVuYWJsZWQiLCJvcmllbnRhdGlvbiIsImljb25zIiwibGVmdCIsInJpZ2h0Il07bi5zZWxlY3RpdmVEZWVwRXh0ZW5kKGUsdGhpcy5vcHRpb25zLHQpfSxvLnByb3RvdHlwZS5yZWRyYXc9ZnVuY3Rpb24oKXt2YXIgdD0wLGU9T2JqZWN0LmtleXModGhpcy5ncm91cHMpO2Uuc29ydChmdW5jdGlvbih0LGUpe3JldHVybiBlPnQ/LTE6MX0pO2Zvcih2YXIgaT0wO2k8ZS5sZW5ndGg7aSsrKXt2YXIgbz1lW2ldOzEhPXRoaXMuZ3JvdXBzW29dLnZpc2libGV8fHZvaWQgMCE9PXRoaXMubGluZWdyYXBoT3B0aW9ucy52aXNpYmlsaXR5W29dJiYxIT10aGlzLmxpbmVncmFwaE9wdGlvbnMudmlzaWJpbGl0eVtvXXx8dCsrfWlmKDA9PXRoaXMub3B0aW9uc1t0aGlzLnNpZGVdLnZpc2libGV8fDA9PXRoaXMuYW1vdW50T2ZHcm91cHN8fDA9PXRoaXMub3B0aW9ucy5lbmFibGVkfHwwPT10KXRoaXMuaGlkZSgpO2Vsc2V7aWYodGhpcy5zaG93KCksInRvcC1sZWZ0Ij09dGhpcy5vcHRpb25zW3RoaXMuc2lkZV0ucG9zaXRpb258fCJib3R0b20tbGVmdCI9PXRoaXMub3B0aW9uc1t0aGlzLnNpZGVdLnBvc2l0aW9uPyh0aGlzLmRvbS5mcmFtZS5zdHlsZS5sZWZ0PSI0cHgiLHRoaXMuZG9tLmZyYW1lLnN0eWxlLnRleHRBbGlnbj0ibGVmdCIsdGhpcy5kb20udGV4dEFyZWEuc3R5bGUudGV4dEFsaWduPSJsZWZ0Iix0aGlzLmRvbS50ZXh0QXJlYS5zdHlsZS5sZWZ0PXRoaXMub3B0aW9ucy5pY29uU2l6ZSsxNSsicHgiLHRoaXMuZG9tLnRleHRBcmVhLnN0eWxlLnJpZ2h0PSIiLHRoaXMuc3ZnLnN0eWxlLmxlZnQ9IjBweCIsdGhpcy5zdmcuc3R5bGUucmlnaHQ9IiIpOih0aGlzLmRvbS5mcmFtZS5zdHlsZS5yaWdodD0iNHB4Iix0aGlzLmRvbS5mcmFtZS5zdHlsZS50ZXh0QWxpZ249InJpZ2h0Iix0aGlzLmRvbS50ZXh0QXJlYS5zdHlsZS50ZXh0QWxpZ249InJpZ2h0Iix0aGlzLmRvbS50ZXh0QXJlYS5zdHlsZS5yaWdodD10aGlzLm9wdGlvbnMuaWNvblNpemUrMTUrInB4Iix0aGlzLmRvbS50ZXh0QXJlYS5zdHlsZS5sZWZ0PSIiLHRoaXMuc3ZnLnN0eWxlLnJpZ2h0PSIwcHgiLHRoaXMuc3ZnLnN0eWxlLmxlZnQ9IiIpLCJ0b3AtbGVmdCI9PXRoaXMub3B0aW9uc1t0aGlzLnNpZGVdLnBvc2l0aW9ufHwidG9wLXJpZ2h0Ij09dGhpcy5vcHRpb25zW3RoaXMuc2lkZV0ucG9zaXRpb24pdGhpcy5kb20uZnJhbWUuc3R5bGUudG9wPTQtTnVtYmVyKHRoaXMuYm9keS5kb20uY2VudGVyLnN0eWxlLnRvcC5yZXBsYWNlKCJweCIsIiIpKSsicHgiLHRoaXMuZG9tLmZyYW1lLnN0eWxlLmJvdHRvbT0iIjtlbHNle3ZhciBuPXRoaXMuYm9keS5kb21Qcm9wcy5jZW50ZXIuaGVpZ2h0LXRoaXMuYm9keS5kb21Qcm9wcy5jZW50ZXJDb250YWluZXIuaGVpZ2h0O3RoaXMuZG9tLmZyYW1lLnN0eWxlLmJvdHRvbT00K24rTnVtYmVyKHRoaXMuYm9keS5kb20uY2VudGVyLnN0eWxlLnRvcC5yZXBsYWNlKCJweCIsIiIpKSsicHgiLHRoaXMuZG9tLmZyYW1lLnN0eWxlLnRvcD0iIn0wPT10aGlzLm9wdGlvbnMuaWNvbnM/KHRoaXMuZG9tLmZyYW1lLnN0eWxlLndpZHRoPXRoaXMuZG9tLnRleHRBcmVhLm9mZnNldFdpZHRoKzEwKyJweCIsdGhpcy5kb20udGV4dEFyZWEuc3R5bGUucmlnaHQ9IiIsdGhpcy5kb20udGV4dEFyZWEuc3R5bGUubGVmdD0iIix0aGlzLnN2Zy5zdHlsZS53aWR0aD0iMHB4Iik6KHRoaXMuZG9tLmZyYW1lLnN0eWxlLndpZHRoPXRoaXMub3B0aW9ucy5pY29uU2l6ZSsxNSt0aGlzLmRvbS50ZXh0QXJlYS5vZmZzZXRXaWR0aCsxMCsicHgiLHRoaXMuZHJhd0xlZ2VuZEljb25zKCkpO2Zvcih2YXIgcz0iIixpPTA7aTxlLmxlbmd0aDtpKyspe3ZhciBvPWVbaV07MSE9dGhpcy5ncm91cHNbb10udmlzaWJsZXx8dm9pZCAwIT09dGhpcy5saW5lZ3JhcGhPcHRpb25zLnZpc2liaWxpdHlbb10mJjEhPXRoaXMubGluZWdyYXBoT3B0aW9ucy52aXNpYmlsaXR5W29dfHwocys9dGhpcy5ncm91cHNbb10uY29udGVudCsiPGJyIC8+Iil9dGhpcy5kb20udGV4dEFyZWEuaW5uZXJIVE1MPXMsdGhpcy5kb20udGV4dEFyZWEuc3R5bGUubGluZUhlaWdodD0uNzUqdGhpcy5vcHRpb25zLmljb25TaXplK3RoaXMub3B0aW9ucy5pY29uU3BhY2luZysicHgifX0sby5wcm90b3R5cGUuZHJhd0xlZ2VuZEljb25zPWZ1bmN0aW9uKCl7aWYodGhpcy5kb20uZnJhbWUucGFyZW50Tm9kZSl7dmFyIHQ9T2JqZWN0LmtleXModGhpcy5ncm91cHMpO3Quc29ydChmdW5jdGlvbih0LGUpe3JldHVybiBlPnQ/LTE6MX0pLHMucmVzZXRFbGVtZW50cyh0aGlzLnN2Z0VsZW1lbnRzKTt2YXIgZT13aW5kb3cuZ2V0Q29tcHV0ZWRTdHlsZSh0aGlzLmRvbS5mcmFtZSkucGFkZGluZ1RvcCxpPU51bWJlcihlLnJlcGxhY2UoInB4IiwiIikpLG89aSxuPXRoaXMub3B0aW9ucy5pY29uU2l6ZSxyPS43NSp0aGlzLm9wdGlvbnMuaWNvblNpemUsYT1pKy41KnIrMzt0aGlzLnN2Zy5zdHlsZS53aWR0aD1uKzUraSsicHgiO2Zvcih2YXIgaD0wO2g8dC5sZW5ndGg7aCsrKXt2YXIgZD10W2hdOzEhPXRoaXMuZ3JvdXBzW2RdLnZpc2libGV8fHZvaWQgMCE9PXRoaXMubGluZWdyYXBoT3B0aW9ucy52aXNpYmlsaXR5W2RdJiYxIT10aGlzLmxpbmVncmFwaE9wdGlvbnMudmlzaWJpbGl0eVtkXXx8KHRoaXMuZ3JvdXBzW2RdLmdldExlZ2VuZChuLHIsdGhpcy5mcmFtZXdvcmssbyxhKSxhKz1yK3RoaXMub3B0aW9ucy5pY29uU3BhY2luZyl9fX0sdC5leHBvcnRzPW99LGZ1bmN0aW9uKHQsZSl7T2JqZWN0LmRlZmluZVByb3BlcnR5KGUsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3ZhciBpPSJzdHJpbmciLG89ImJvb2xlYW4iLG49Im51bWJlciIscz0iYXJyYXkiLHI9ImRhdGUiLGE9Im9iamVjdCIsaD0iZG9tIixkPSJtb21lbnQiLGw9ImFueSIsdT17Y29uZmlndXJlOntlbmFibGVkOnsiYm9vbGVhbiI6b30sZmlsdGVyOnsiYm9vbGVhbiI6bywiZnVuY3Rpb24iOiJmdW5jdGlvbiJ9LGNvbnRhaW5lcjp7ZG9tOmh9LF9fdHlwZV9fOntvYmplY3Q6YSwiYm9vbGVhbiI6bywiZnVuY3Rpb24iOiJmdW5jdGlvbiJ9fSx5QXhpc09yaWVudGF0aW9uOntzdHJpbmc6WyJsZWZ0IiwicmlnaHQiXX0sZGVmYXVsdEdyb3VwOntzdHJpbmc6aX0sc29ydDp7ImJvb2xlYW4iOm99LHNhbXBsaW5nOnsiYm9vbGVhbiI6b30sc3RhY2s6eyJib29sZWFuIjpvfSxncmFwaEhlaWdodDp7c3RyaW5nOmksbnVtYmVyOm59LHNoYWRlZDp7ZW5hYmxlZDp7ImJvb2xlYW4iOm99LG9yaWVudGF0aW9uOntzdHJpbmc6WyJib3R0b20iLCJ0b3AiLCJ6ZXJvIiwiZ3JvdXAiXX0sZ3JvdXBJZDp7b2JqZWN0OmF9LF9fdHlwZV9fOnsiYm9vbGVhbiI6byxvYmplY3Q6YX19LHN0eWxlOntzdHJpbmc6WyJsaW5lIiwiYmFyIiwicG9pbnRzIl19LGJhckNoYXJ0Ont3aWR0aDp7bnVtYmVyOm59LHNpZGVCeVNpZGU6eyJib29sZWFuIjpvfSxhbGlnbjp7c3RyaW5nOlsibGVmdCIsImNlbnRlciIsInJpZ2h0Il19LF9fdHlwZV9fOntvYmplY3Q6YX19LGludGVycG9sYXRpb246e2VuYWJsZWQ6eyJib29sZWFuIjpvfSxwYXJhbWV0cml6YXRpb246e3N0cmluZzpbImNlbnRyaXBldGFsIiwiY2hvcmRhbCIsInVuaWZvcm0iXX0sYWxwaGE6e251bWJlcjpufSxfX3R5cGVfXzp7b2JqZWN0OmEsImJvb2xlYW4iOm99fSxkcmF3UG9pbnRzOntlbmFibGVkOnsiYm9vbGVhbiI6b30sb25SZW5kZXI6eyJmdW5jdGlvbiI6ImZ1bmN0aW9uIn0sc2l6ZTp7bnVtYmVyOm59LHN0eWxlOntzdHJpbmc6WyJzcXVhcmUiLCJjaXJjbGUiXX0sX190eXBlX186e29iamVjdDphLCJib29sZWFuIjpvLCJmdW5jdGlvbiI6ImZ1bmN0aW9uIn19LGRhdGFBeGlzOntzaG93TWlub3JMYWJlbHM6eyJib29sZWFuIjpvfSxzaG93TWFqb3JMYWJlbHM6eyJib29sZWFuIjpvfSxpY29uczp7ImJvb2xlYW4iOm99LHdpZHRoOntzdHJpbmc6aSxudW1iZXI6bn0sdmlzaWJsZTp7ImJvb2xlYW4iOm99LGFsaWduWmVyb3M6eyJib29sZWFuIjpvfSxsZWZ0OntyYW5nZTp7bWluOntudW1iZXI6bn0sbWF4OntudW1iZXI6bn0sX190eXBlX186e29iamVjdDphfX0sZm9ybWF0OnsiZnVuY3Rpb24iOiJmdW5jdGlvbiJ9LHRpdGxlOnt0ZXh0OntzdHJpbmc6aSxudW1iZXI6bn0sc3R5bGU6e3N0cmluZzppfSxfX3R5cGVfXzp7b2JqZWN0OmF9fSxfX3R5cGVfXzp7b2JqZWN0OmF9fSxyaWdodDp7cmFuZ2U6e21pbjp7bnVtYmVyOm59LG1heDp7bnVtYmVyOm59LF9fdHlwZV9fOntvYmplY3Q6YX19LGZvcm1hdDp7ImZ1bmN0aW9uIjoiZnVuY3Rpb24ifSx0aXRsZTp7dGV4dDp7c3RyaW5nOmksbnVtYmVyOm59LHN0eWxlOntzdHJpbmc6aX0sX190eXBlX186e29iamVjdDphfX0sX190eXBlX186e29iamVjdDphfX0sX190eXBlX186e29iamVjdDphfX0sbGVnZW5kOntlbmFibGVkOnsiYm9vbGVhbiI6b30saWNvbnM6eyJib29sZWFuIjpvfSxsZWZ0Ont2aXNpYmxlOnsiYm9vbGVhbiI6b30scG9zaXRpb246e3N0cmluZzpbInRvcC1yaWdodCIsImJvdHRvbS1yaWdodCIsInRvcC1sZWZ0IiwiYm90dG9tLWxlZnQiXX0sX190eXBlX186e29iamVjdDphfX0scmlnaHQ6e3Zpc2libGU6eyJib29sZWFuIjpvfSxwb3NpdGlvbjp7c3RyaW5nOlsidG9wLXJpZ2h0IiwiYm90dG9tLXJpZ2h0IiwidG9wLWxlZnQiLCJib3R0b20tbGVmdCJdfSxfX3R5cGVfXzp7b2JqZWN0OmF9fSxfX3R5cGVfXzp7b2JqZWN0OmEsImJvb2xlYW4iOm99fSxncm91cHM6e3Zpc2liaWxpdHk6e2FueTpsfSxfX3R5cGVfXzp7b2JqZWN0OmF9fSxhdXRvUmVzaXplOnsiYm9vbGVhbiI6b30sdGhyb3R0bGVSZWRyYXc6e251bWJlcjpufSxjbGlja1RvVXNlOnsiYm9vbGVhbiI6b30sZW5kOntudW1iZXI6bixkYXRlOnIsc3RyaW5nOmksbW9tZW50OmR9LGZvcm1hdDp7bWlub3JMYWJlbHM6e21pbGxpc2Vjb25kOntzdHJpbmc6aSx1bmRlZmluZWQ6InVuZGVmaW5lZCJ9LHNlY29uZDp7c3RyaW5nOmksdW5kZWZpbmVkOiJ1bmRlZmluZWQifSxtaW51dGU6e3N0cmluZzppLHVuZGVmaW5lZDoidW5kZWZpbmVkIn0saG91cjp7c3RyaW5nOmksdW5kZWZpbmVkOiJ1bmRlZmluZWQifSx3ZWVrZGF5OntzdHJpbmc6aSx1bmRlZmluZWQ6InVuZGVmaW5lZCJ9LGRheTp7c3RyaW5nOmksdW5kZWZpbmVkOiJ1bmRlZmluZWQifSxtb250aDp7c3RyaW5nOmksdW5kZWZpbmVkOiJ1bmRlZmluZWQifSx5ZWFyOntzdHJpbmc6aSx1bmRlZmluZWQ6InVuZGVmaW5lZCJ9LF9fdHlwZV9fOntvYmplY3Q6YX19LG1ham9yTGFiZWxzOnttaWxsaXNlY29uZDp7c3RyaW5nOmksdW5kZWZpbmVkOiJ1bmRlZmluZWQifSxzZWNvbmQ6e3N0cmluZzppLHVuZGVmaW5lZDoidW5kZWZpbmVkIn0sbWludXRlOntzdHJpbmc6aSx1bmRlZmluZWQ6InVuZGVmaW5lZCJ9LGhvdXI6e3N0cmluZzppLHVuZGVmaW5lZDoidW5kZWZpbmVkIn0sd2Vla2RheTp7c3RyaW5nOmksdW5kZWZpbmVkOiJ1bmRlZmluZWQifSxkYXk6e3N0cmluZzppLHVuZGVmaW5lZDoidW5kZWZpbmVkIn0sbW9udGg6e3N0cmluZzppLHVuZGVmaW5lZDoidW5kZWZpbmVkIn0seWVhcjp7c3RyaW5nOmksdW5kZWZpbmVkOiJ1bmRlZmluZWQifSxfX3R5cGVfXzp7b2JqZWN0OmF9fSxfX3R5cGVfXzp7b2JqZWN0OmF9fSxtb21lbnQ6eyJmdW5jdGlvbiI6ImZ1bmN0aW9uIn0saGVpZ2h0OntzdHJpbmc6aSxudW1iZXI6bn0saGlkZGVuRGF0ZXM6e3N0YXJ0OntkYXRlOnIsbnVtYmVyOm4sc3RyaW5nOmksbW9tZW50OmR9LGVuZDp7ZGF0ZTpyLG51bWJlcjpuLHN0cmluZzppLG1vbWVudDpkfSxyZXBlYXQ6e3N0cmluZzppfSxfX3R5cGVfXzp7b2JqZWN0OmEsYXJyYXk6c319LGxvY2FsZTp7c3RyaW5nOml9LGxvY2FsZXM6e19fYW55X186e2FueTpsfSxfX3R5cGVfXzp7b2JqZWN0OmF9fSxtYXg6e2RhdGU6cixudW1iZXI6bixzdHJpbmc6aSxtb21lbnQ6ZH0sbWF4SGVpZ2h0OntudW1iZXI6bixzdHJpbmc6aX0sbWF4TWlub3JDaGFyczp7bnVtYmVyOm59LG1pbjp7ZGF0ZTpyLG51bWJlcjpuLHN0cmluZzppLG1vbWVudDpkfSxtaW5IZWlnaHQ6e251bWJlcjpuLHN0cmluZzppfSxtb3ZlYWJsZTp7ImJvb2xlYW4iOm99LG11bHRpc2VsZWN0OnsiYm9vbGVhbiI6b30sb3JpZW50YXRpb246e3N0cmluZzppfSxzaG93Q3VycmVudFRpbWU6eyJib29sZWFuIjpvfSxzaG93TWFqb3JMYWJlbHM6eyJib29sZWFuIjpvfSxzaG93TWlub3JMYWJlbHM6eyJib29sZWFuIjpvfSxzdGFydDp7ZGF0ZTpyLG51bWJlcjpuLHN0cmluZzppLG1vbWVudDpkfSx0aW1lQXhpczp7c2NhbGU6e3N0cmluZzppLHVuZGVmaW5lZDoidW5kZWZpbmVkIn0sc3RlcDp7bnVtYmVyOm4sdW5kZWZpbmVkOiJ1bmRlZmluZWQifSxfX3R5cGVfXzp7b2JqZWN0OmF9fSx3aWR0aDp7c3RyaW5nOmksbnVtYmVyOm59LHpvb21hYmxlOnsiYm9vbGVhbiI6b30sem9vbUtleTp7c3RyaW5nOlsiY3RybEtleSIsImFsdEtleSIsIm1ldGFLZXkiLCIiXX0sem9vbU1heDp7bnVtYmVyOm59LHpvb21NaW46e251bWJlcjpufSx6SW5kZXg6e251bWJlcjpufSxfX3R5cGVfXzp7b2JqZWN0OmF9fSxjPXtnbG9iYWw6e3NvcnQ6ITAsc2FtcGxpbmc6ITAsc3RhY2s6ITEsc2hhZGVkOntlbmFibGVkOiExLG9yaWVudGF0aW9uOlsiemVybyIsInRvcCIsImJvdHRvbSIsImdyb3VwIl19LHN0eWxlOlsibGluZSIsImJhciIsInBvaW50cyJdLGJhckNoYXJ0Ont3aWR0aDpbNTAsNSwxMDAsNV0sc2lkZUJ5U2lkZTohMSxhbGlnbjpbImxlZnQiLCJjZW50ZXIiLCJyaWdodCJdfSxpbnRlcnBvbGF0aW9uOntlbmFibGVkOiEwLHBhcmFtZXRyaXphdGlvbjpbImNlbnRyaXBldGFsIiwiY2hvcmRhbCIsInVuaWZvcm0iXX0sZHJhd1BvaW50czp7ZW5hYmxlZDohMCxzaXplOls2LDIsMzAsMV0sc3R5bGU6WyJzcXVhcmUiLCJjaXJjbGUiXX0sZGF0YUF4aXM6e3Nob3dNaW5vckxhYmVsczohMCxzaG93TWFqb3JMYWJlbHM6ITAsaWNvbnM6ITEsd2lkdGg6WzQwLDAsMjAwLDFdLHZpc2libGU6ITAsYWxpZ25aZXJvczohMCxsZWZ0Ont0aXRsZTp7dGV4dDoiIixzdHlsZToiIn19LHJpZ2h0Ont0aXRsZTp7dGV4dDoiIixzdHlsZToiIn19fSxsZWdlbmQ6e2VuYWJsZWQ6ITEsaWNvbnM6ITAsbGVmdDp7dmlzaWJsZTohMCxwb3NpdGlvbjpbInRvcC1yaWdodCIsImJvdHRvbS1yaWdodCIsInRvcC1sZWZ0IiwiYm90dG9tLWxlZnQiXX0scmlnaHQ6e3Zpc2libGU6ITAscG9zaXRpb246WyJ0b3AtcmlnaHQiLCJib3R0b20tcmlnaHQiLCJ0b3AtbGVmdCIsImJvdHRvbS1sZWZ0Il19fSxhdXRvUmVzaXplOiEwLHRocm90dGxlUmVkcmF3OlsxMCwwLDFlMywxMF0sY2xpY2tUb1VzZTohMSxlbmQ6IiIsZm9ybWF0OnttaW5vckxhYmVsczp7bWlsbGlzZWNvbmQ6IlNTUyIsc2Vjb25kOiJzIixtaW51dGU6IkhIOm1tIixob3VyOiJISDptbSIsd2Vla2RheToiZGRkIEQiLGRheToiRCIsbW9udGg6Ik1NTSIseWVhcjoiWVlZWSJ9LG1ham9yTGFiZWxzOnttaWxsaXNlY29uZDoiSEg6bW06c3MiLHNlY29uZDoiRCBNTU1NIEhIOm1tIixtaW51dGU6ImRkZCBEIE1NTU0iLGhvdXI6ImRkZCBEIE1NTU0iLHdlZWtkYXk6Ik1NTU0gWVlZWSIsZGF5OiJNTU1NIFlZWVkiLG1vbnRoOiJZWVlZIix5ZWFyOiIifX0saGVpZ2h0OiIiLGxvY2FsZToiIixtYXg6IiIsbWF4SGVpZ2h0OiIiLG1heE1pbm9yQ2hhcnM6WzcsMCwyMCwxXSxtaW46IiIsbWluSGVpZ2h0OiIiLG1vdmVhYmxlOiEwLG9yaWVudGF0aW9uOlsiYm90aCIsImJvdHRvbSIsInRvcCJdLHNob3dDdXJyZW50VGltZTohMSxzaG93TWFqb3JMYWJlbHM6ITAsc2hvd01pbm9yTGFiZWxzOiEwLHN0YXJ0OiIiLHdpZHRoOiIxMDAlIix6b29tYWJsZTohMCx6b29tS2V5OlsiY3RybEtleSIsImFsdEtleSIsIm1ldGFLZXkiLCIiXSx6b29tTWF4OlszMTUzNmUxMCwxMCwzMTUzNmUxMCwxXSx6b29tTWluOlsxMCwxMCwzMTUzNmUxMCwxXSx6SW5kZXg6MH19O2UuYWxsT3B0aW9ucz11LGUuY29uZmlndXJlT3B0aW9ucz1jfSxmdW5jdGlvbih0LGUsaSl7ZnVuY3Rpb24gbyh0KXtyZXR1cm4gdCYmdC5fX2VzTW9kdWxlP3Q6eyJkZWZhdWx0Ijp0fX1mdW5jdGlvbiBuKHQsZSxpKXt2YXIgbz10aGlzO2lmKCEodGhpcyBpbnN0YW5jZW9mIG4pKXRocm93IG5ldyBTeW50YXhFcnJvcigiQ29uc3RydWN0b3IgbXVzdCBiZSBjYWxsZWQgd2l0aCB0aGUgbmV3IG9wZXJhdG9yIik7dGhpcy5vcHRpb25zPXt9LHRoaXMuZGVmYXVsdE9wdGlvbnM9e2xvY2FsZToiZW4iLGxvY2FsZXM6VyxjbGlja1RvVXNlOiExfSxCLmV4dGVuZCh0aGlzLm9wdGlvbnMsdGhpcy5kZWZhdWx0T3B0aW9ucyksdGhpcy5ib2R5PXtjb250YWluZXI6dCxub2Rlczp7fSxub2RlSW5kaWNlczpbXSxlZGdlczp7fSxlZGdlSW5kaWNlczpbXSxlbWl0dGVyOntvbjp0aGlzLm9uLmJpbmQodGhpcyksb2ZmOnRoaXMub2ZmLmJpbmQodGhpcyksZW1pdDp0aGlzLmVtaXQuYmluZCh0aGlzKSxvbmNlOnRoaXMub25jZS5iaW5kKHRoaXMpfSxldmVudExpc3RlbmVyczp7b25UYXA6ZnVuY3Rpb24oKXt9LG9uVG91Y2g6ZnVuY3Rpb24oKXt9LG9uRG91YmxlVGFwOmZ1bmN0aW9uKCl7fSxvbkhvbGQ6ZnVuY3Rpb24oKXt9LG9uRHJhZ1N0YXJ0OmZ1bmN0aW9uKCl7fSxvbkRyYWc6ZnVuY3Rpb24oKXt9LG9uRHJhZ0VuZDpmdW5jdGlvbigpe30sb25Nb3VzZVdoZWVsOmZ1bmN0aW9uKCl7fSxvblBpbmNoOmZ1bmN0aW9uKCl7fSxvbk1vdXNlTW92ZTpmdW5jdGlvbigpe30sb25SZWxlYXNlOmZ1bmN0aW9uKCl7fSxvbkNvbnRleHQ6ZnVuY3Rpb24oKXt9fSxkYXRhOntub2RlczpudWxsLGVkZ2VzOm51bGx9LGZ1bmN0aW9uczp7Y3JlYXRlTm9kZTpmdW5jdGlvbigpe30sY3JlYXRlRWRnZTpmdW5jdGlvbigpe30sZ2V0UG9pbnRlcjpmdW5jdGlvbigpe319LG1vZHVsZXM6e30sdmlldzp7c2NhbGU6MSx0cmFuc2xhdGlvbjp7eDowLHk6MH19fSx0aGlzLmJpbmRFdmVudExpc3RlbmVycygpLHRoaXMuaW1hZ2VzPW5ldyBSKGZ1bmN0aW9uKCl7cmV0dXJuIG8uYm9keS5lbWl0dGVyLmVtaXQoIl9yZXF1ZXN0UmVkcmF3Iil9KSx0aGlzLmdyb3Vwcz1uZXcgclsiZGVmYXVsdCJdLHRoaXMuY2FudmFzPW5ldyB5WyJkZWZhdWx0Il0odGhpcy5ib2R5KSx0aGlzLnNlbGVjdGlvbkhhbmRsZXI9bmV3IE9bImRlZmF1bHQiXSh0aGlzLmJvZHksdGhpcy5jYW52YXMpLHRoaXMuaW50ZXJhY3Rpb25IYW5kbGVyPW5ldyB4WyJkZWZhdWx0Il0odGhpcy5ib2R5LHRoaXMuY2FudmFzLHRoaXMuc2VsZWN0aW9uSGFuZGxlciksdGhpcy52aWV3PW5ldyB3WyJkZWZhdWx0Il0odGhpcy5ib2R5LHRoaXMuY2FudmFzKSx0aGlzLnJlbmRlcmVyPW5ldyB2WyJkZWZhdWx0Il0odGhpcy5ib2R5LHRoaXMuY2FudmFzKSx0aGlzLnBoeXNpY3M9bmV3IGNbImRlZmF1bHQiXSh0aGlzLmJvZHkpLHRoaXMubGF5b3V0RW5naW5lPW5ldyBEWyJkZWZhdWx0Il0odGhpcy5ib2R5KSx0aGlzLmNsdXN0ZXJpbmc9bmV3IGZbImRlZmF1bHQiXSh0aGlzLmJvZHkpLHRoaXMubWFuaXB1bGF0aW9uPW5ldyBUWyJkZWZhdWx0Il0odGhpcy5ib2R5LHRoaXMuY2FudmFzLHRoaXMuc2VsZWN0aW9uSGFuZGxlciksdGhpcy5ub2Rlc0hhbmRsZXI9bmV3IGhbImRlZmF1bHQiXSh0aGlzLmJvZHksdGhpcy5pbWFnZXMsdGhpcy5ncm91cHMsdGhpcy5sYXlvdXRFbmdpbmUpLHRoaXMuZWRnZXNIYW5kbGVyPW5ldyBsWyJkZWZhdWx0Il0odGhpcy5ib2R5LHRoaXMuaW1hZ2VzLHRoaXMuZ3JvdXBzKSx0aGlzLmJvZHkubW9kdWxlcy5rYW1hZGFLYXdhaT1uZXcgTFsiZGVmYXVsdCJdKHRoaXMuYm9keSwxNTAsLjA1KSx0aGlzLmJvZHkubW9kdWxlcy5jbHVzdGVyaW5nPXRoaXMuY2x1c3RlcmluZyx0aGlzLmNhbnZhcy5fY3JlYXRlKCksdGhpcy5zZXRPcHRpb25zKGkpLHRoaXMuc2V0RGF0YShlKX12YXIgcz1pKDU5KSxyPW8ocyksYT1pKDYwKSxoPW8oYSksZD1pKDgwKSxsPW8oZCksdT1pKDg5KSxjPW8odSkscD1pKDk4KSxmPW8ocCksbT1pKDEwMSksdj1vKG0pLGc9aSgxMDIpLHk9byhnKSxiPWkoMTAzKSx3PW8oYiksXz1pKDEwNCkseD1vKF8pLGs9aSgxMDcpLE89byhrKSxNPWkoMTA4KSxEPW8oTSksQz1pKDEwOSksVD1vKEMpLEU9aSg0NCksUz1vKEUpLFA9aSg0NiksST1vKFApLE49aSgxMTApLHo9aSgxMTEpLEw9byh6KTtpKDExMyk7dmFyIEE9aSgxMiksQj0oaSgyMCksaSgxKSksRj0oaSg4KSxpKDEwKSxpKDExNCkpLGo9aSgxMTUpLFI9aSgxMTYpLEg9aSgzOSksVz1pKDExNyk7QShuLnByb3RvdHlwZSksbi5wcm90b3R5cGUuc2V0T3B0aW9ucz1mdW5jdGlvbih0KXt2YXIgZT10aGlzO2lmKHZvaWQgMCE9PXQpe3ZhciBpPUlbImRlZmF1bHQiXS52YWxpZGF0ZSh0LE4uYWxsT3B0aW9ucyk7aT09PSEwJiZjb25zb2xlLmxvZygiJWNFcnJvcnMgaGF2ZSBiZWVuIGZvdW5kIGluIHRoZSBzdXBwbGllZCBvcHRpb25zIG9iamVjdC4iLFAucHJpbnRTdHlsZSk7dmFyIG89WyJsb2NhbGUiLCJsb2NhbGVzIiwiY2xpY2tUb1VzZSJdO2lmKEIuc2VsZWN0aXZlRGVlcEV4dGVuZChvLHRoaXMub3B0aW9ucyx0KSx0PXRoaXMubGF5b3V0RW5naW5lLnNldE9wdGlvbnModC5sYXlvdXQsdCksdGhpcy5jYW52YXMuc2V0T3B0aW9ucyh0KSx0aGlzLmdyb3Vwcy5zZXRPcHRpb25zKHQuZ3JvdXBzKSx0aGlzLm5vZGVzSGFuZGxlci5zZXRPcHRpb25zKHQubm9kZXMpLHRoaXMuZWRnZXNIYW5kbGVyLnNldE9wdGlvbnModC5lZGdlcyksdGhpcy5waHlzaWNzLnNldE9wdGlvbnModC5waHlzaWNzKSx0aGlzLm1hbmlwdWxhdGlvbi5zZXRPcHRpb25zKHQubWFuaXB1bGF0aW9uLHQsdGhpcy5vcHRpb25zKSx0aGlzLmludGVyYWN0aW9uSGFuZGxlci5zZXRPcHRpb25zKHQuaW50ZXJhY3Rpb24pLHRoaXMucmVuZGVyZXIuc2V0T3B0aW9ucyh0LmludGVyYWN0aW9uKSx0aGlzLnNlbGVjdGlvbkhhbmRsZXIuc2V0T3B0aW9ucyh0LmludGVyYWN0aW9uKSx2b2lkIDAhPT10Lmdyb3VwcyYmdGhpcy5ib2R5LmVtaXR0ZXIuZW1pdCgicmVmcmVzaE5vZGVzIiksImNvbmZpZ3VyZSJpbiB0JiYodGhpcy5jb25maWd1cmF0b3J8fCh0aGlzLmNvbmZpZ3VyYXRvcj1uZXcgU1siZGVmYXVsdCJdKHRoaXMsdGhpcy5ib2R5LmNvbnRhaW5lcixOLmNvbmZpZ3VyZU9wdGlvbnMsdGhpcy5jYW52YXMucGl4ZWxSYXRpbykpLHRoaXMuY29uZmlndXJhdG9yLnNldE9wdGlvbnModC5jb25maWd1cmUpKSx0aGlzLmNvbmZpZ3VyYXRvciYmdGhpcy5jb25maWd1cmF0b3Iub3B0aW9ucy5lbmFibGVkPT09ITApe3ZhciBuPXtub2Rlczp7fSxlZGdlczp7fSxsYXlvdXQ6e30saW50ZXJhY3Rpb246e30sbWFuaXB1bGF0aW9uOnt9LHBoeXNpY3M6e30sZ2xvYmFsOnt9fTtCLmRlZXBFeHRlbmQobi5ub2Rlcyx0aGlzLm5vZGVzSGFuZGxlci5vcHRpb25zKSxCLmRlZXBFeHRlbmQobi5lZGdlcyx0aGlzLmVkZ2VzSGFuZGxlci5vcHRpb25zKSxCLmRlZXBFeHRlbmQobi5sYXlvdXQsdGhpcy5sYXlvdXRFbmdpbmUub3B0aW9ucyksQi5kZWVwRXh0ZW5kKG4uaW50ZXJhY3Rpb24sdGhpcy5zZWxlY3Rpb25IYW5kbGVyLm9wdGlvbnMpLEIuZGVlcEV4dGVuZChuLmludGVyYWN0aW9uLHRoaXMucmVuZGVyZXIub3B0aW9ucyksQi5kZWVwRXh0ZW5kKG4uaW50ZXJhY3Rpb24sdGhpcy5pbnRlcmFjdGlvbkhhbmRsZXIub3B0aW9ucyksQi5kZWVwRXh0ZW5kKG4ubWFuaXB1bGF0aW9uLHRoaXMubWFuaXB1bGF0aW9uLm9wdGlvbnMpLEIuZGVlcEV4dGVuZChuLnBoeXNpY3MsdGhpcy5waHlzaWNzLm9wdGlvbnMpLEIuZGVlcEV4dGVuZChuLmdsb2JhbCx0aGlzLmNhbnZhcy5vcHRpb25zKSxCLmRlZXBFeHRlbmQobi5nbG9iYWwsdGhpcy5vcHRpb25zKSx0aGlzLmNvbmZpZ3VyYXRvci5zZXRNb2R1bGVPcHRpb25zKG4pfXZvaWQgMCE9PXQuY2xpY2tUb1VzZT90LmNsaWNrVG9Vc2U9PT0hMD92b2lkIDA9PT10aGlzLmFjdGl2YXRvciYmKHRoaXMuYWN0aXZhdG9yPW5ldyBIKHRoaXMuY2FudmFzLmZyYW1lKSx0aGlzLmFjdGl2YXRvci5vbigiY2hhbmdlIixmdW5jdGlvbigpe2UuYm9keS5lbWl0dGVyLmVtaXQoImFjdGl2YXRlIil9KSk6KHZvaWQgMCE9PXRoaXMuYWN0aXZhdG9yJiYodGhpcy5hY3RpdmF0b3IuZGVzdHJveSgpLGRlbGV0ZSB0aGlzLmFjdGl2YXRvciksdGhpcy5ib2R5LmVtaXR0ZXIuZW1pdCgiYWN0aXZhdGUiKSk6dGhpcy5ib2R5LmVtaXR0ZXIuZW1pdCgiYWN0aXZhdGUiKSx0aGlzLmNhbnZhcy5zZXRTaXplKCksdGhpcy5ib2R5LmVtaXR0ZXIuZW1pdCgic3RhcnRTaW11bGF0aW9uIil9fSxuLnByb3RvdHlwZS5fdXBkYXRlVmlzaWJsZUluZGljZXM9ZnVuY3Rpb24oKXt2YXIgdD10aGlzLmJvZHkubm9kZXMsZT10aGlzLmJvZHkuZWRnZXM7dGhpcy5ib2R5Lm5vZGVJbmRpY2VzPVtdLHRoaXMuYm9keS5lZGdlSW5kaWNlcz1bXTtmb3IodmFyIGkgaW4gdCl0Lmhhc093blByb3BlcnR5KGkpJiZ0W2ldLm9wdGlvbnMuaGlkZGVuPT09ITEmJnRoaXMuYm9keS5ub2RlSW5kaWNlcy5wdXNoKHRbaV0uaWQpO2Zvcih2YXIgbyBpbiBlKWUuaGFzT3duUHJvcGVydHkobykmJmVbb10ub3B0aW9ucy5oaWRkZW49PT0hMSYmdGhpcy5ib2R5LmVkZ2VJbmRpY2VzLnB1c2goZVtvXS5pZCl9LG4ucHJvdG90eXBlLmJpbmRFdmVudExpc3RlbmVycz1mdW5jdGlvbigpe3ZhciB0PXRoaXM7dGhpcy5ib2R5LmVtaXR0ZXIub24oIl9kYXRhQ2hhbmdlZCIsZnVuY3Rpb24oKXt0Ll91cGRhdGVWaXNpYmxlSW5kaWNlcygpLHQuYm9keS5lbWl0dGVyLmVtaXQoIl9yZXF1ZXN0UmVkcmF3IiksdC5ib2R5LmVtaXR0ZXIuZW1pdCgiX2RhdGFVcGRhdGVkIil9KSx0aGlzLmJvZHkuZW1pdHRlci5vbigiX2RhdGFVcGRhdGVkIixmdW5jdGlvbigpe3QuX3VwZGF0ZVZhbHVlUmFuZ2UodC5ib2R5Lm5vZGVzKSx0Ll91cGRhdGVWYWx1ZVJhbmdlKHQuYm9keS5lZGdlcyksdC5ib2R5LmVtaXR0ZXIuZW1pdCgic3RhcnRTaW11bGF0aW9uIiksdC5ib2R5LmVtaXR0ZXIuZW1pdCgiX3JlcXVlc3RSZWRyYXciKX0pfSxuLnByb3RvdHlwZS5zZXREYXRhPWZ1bmN0aW9uKHQpe2lmKHRoaXMuYm9keS5lbWl0dGVyLmVtaXQoInJlc2V0UGh5c2ljcyIpLHRoaXMuYm9keS5lbWl0dGVyLmVtaXQoIl9yZXNldERhdGEiKSx0aGlzLnNlbGVjdGlvbkhhbmRsZXIudW5zZWxlY3RBbGwoKSx0JiZ0LmRvdCYmKHQubm9kZXN8fHQuZWRnZXMpKXRocm93IG5ldyBTeW50YXhFcnJvcignRGF0YSBtdXN0IGNvbnRhaW4gZWl0aGVyIHBhcmFtZXRlciAiZG90IiBvciAgcGFyYW1ldGVyIHBhaXIgIm5vZGVzIiBhbmQgImVkZ2VzIiwgYnV0IG5vdCBib3RoLicpO2lmKHRoaXMuc2V0T3B0aW9ucyh0JiZ0Lm9wdGlvbnMpLHQmJnQuZG90KXtjb25zb2xlLmxvZygiVGhlIGRvdCBwcm9wZXJ0eSBoYXMgYmVlbiBkZXByaWNhdGVkLiBQbGVhc2UgdXNlIHRoZSBzdGF0aWMgY29udmVydERvdCBtZXRob2QgdG8gY29udmVydCBET1QgaW50byB2aXMubmV0d29yayBmb3JtYXQgYW5kIHVzZSB0aGUgbm9ybWFsIGRhdGEgZm9ybWF0IHdpdGggbm9kZXMgYW5kIGVkZ2VzLiBUaGlzIGNvbnZlcnRlciBpcyB1c2VkIGxpa2UgdGhpczogdmFyIGRhdGEgPSB2aXMubmV0d29yay5jb252ZXJ0RG90KGRvdFN0cmluZyk7Iik7dmFyIGU9Ri5ET1RUb0dyYXBoKHQuZG90KTtyZXR1cm4gdm9pZCB0aGlzLnNldERhdGEoZSl9aWYodCYmdC5nZXBoaSl7Y29uc29sZS5sb2coIlRoZSBnZXBoaSBwcm9wZXJ0eSBoYXMgYmVlbiBkZXByaWNhdGVkLiBQbGVhc2UgdXNlIHRoZSBzdGF0aWMgY29udmVydEdlcGhpIG1ldGhvZCB0byBjb252ZXJ0IGdlcGhpIGludG8gdmlzLm5ldHdvcmsgZm9ybWF0IGFuZCB1c2UgdGhlIG5vcm1hbCBkYXRhIGZvcm1hdCB3aXRoIG5vZGVzIGFuZCBlZGdlcy4gVGhpcyBjb252ZXJ0ZXIgaXMgdXNlZCBsaWtlIHRoaXM6IHZhciBkYXRhID0gdmlzLm5ldHdvcmsuY29udmVydEdlcGhpKGdlcGhpSnNvbik7Iik7dmFyIGk9ai5wYXJzZUdlcGhpKHQuZ2VwaGkpO3JldHVybiB2b2lkIHRoaXMuc2V0RGF0YShpKX10aGlzLm5vZGVzSGFuZGxlci5zZXREYXRhKHQmJnQubm9kZXMsITApLHRoaXMuZWRnZXNIYW5kbGVyLnNldERhdGEodCYmdC5lZGdlcywhMCksdGhpcy5ib2R5LmVtaXR0ZXIuZW1pdCgiX2RhdGFDaGFuZ2VkIiksdGhpcy5ib2R5LmVtaXR0ZXIuZW1pdCgiX2RhdGFMb2FkZWQiKSx0aGlzLmJvZHkuZW1pdHRlci5lbWl0KCJpbml0UGh5c2ljcyIpfSxuLnByb3RvdHlwZS5kZXN0cm95PWZ1bmN0aW9uKCl7dGhpcy5ib2R5LmVtaXR0ZXIuZW1pdCgiZGVzdHJveSIpLHRoaXMuYm9keS5lbWl0dGVyLm9mZigpLHRoaXMub2ZmKCksZGVsZXRlIHRoaXMuZ3JvdXBzLGRlbGV0ZSB0aGlzLmNhbnZhcyxkZWxldGUgdGhpcy5zZWxlY3Rpb25IYW5kbGVyLGRlbGV0ZSB0aGlzLmludGVyYWN0aW9uSGFuZGxlcixkZWxldGUgdGhpcy52aWV3LGRlbGV0ZSB0aGlzLnJlbmRlcmVyLGRlbGV0ZSB0aGlzLnBoeXNpY3MsZGVsZXRlIHRoaXMubGF5b3V0RW5naW5lLGRlbGV0ZSB0aGlzLmNsdXN0ZXJpbmcsZGVsZXRlIHRoaXMubWFuaXB1bGF0aW9uLGRlbGV0ZSB0aGlzLm5vZGVzSGFuZGxlcixkZWxldGUgdGhpcy5lZGdlc0hhbmRsZXIsZGVsZXRlIHRoaXMuY29uZmlndXJhdG9yLGRlbGV0ZSB0aGlzLmltYWdlcztmb3IodmFyIHQgaW4gdGhpcy5ib2R5Lm5vZGVzKWRlbGV0ZSB0aGlzLmJvZHkubm9kZXNbdF07Zm9yKHZhciBlIGluIHRoaXMuYm9keS5lZGdlcylkZWxldGUgdGhpcy5ib2R5LmVkZ2VzW2VdO0IucmVjdXJzaXZlRE9NRGVsZXRlKHRoaXMuYm9keS5jb250YWluZXIpfSxuLnByb3RvdHlwZS5fdXBkYXRlVmFsdWVSYW5nZT1mdW5jdGlvbih0KXt2YXIgZSxpPXZvaWQgMCxvPXZvaWQgMCxuPTA7Zm9yKGUgaW4gdClpZih0Lmhhc093blByb3BlcnR5KGUpKXt2YXIgcz10W2VdLmdldFZhbHVlKCk7dm9pZCAwIT09cyYmKGk9dm9pZCAwPT09aT9zOk1hdGgubWluKHMsaSksbz12b2lkIDA9PT1vP3M6TWF0aC5tYXgocyxvKSxuKz1zKX1pZih2b2lkIDAhPT1pJiZ2b2lkIDAhPT1vKWZvcihlIGluIHQpdC5oYXNPd25Qcm9wZXJ0eShlKSYmdFtlXS5zZXRWYWx1ZVJhbmdlKGksbyxuKX0sbi5wcm90b3R5cGUuaXNBY3RpdmU9ZnVuY3Rpb24oKXtyZXR1cm4hdGhpcy5hY3RpdmF0b3J8fHRoaXMuYWN0aXZhdG9yLmFjdGl2ZX0sbi5wcm90b3R5cGUuc2V0U2l6ZT1mdW5jdGlvbigpe3JldHVybiB0aGlzLmNhbnZhcy5zZXRTaXplLmFwcGx5KHRoaXMuY2FudmFzLGFyZ3VtZW50cyl9LG4ucHJvdG90eXBlLmNhbnZhc1RvRE9NPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuY2FudmFzLmNhbnZhc1RvRE9NLmFwcGx5KHRoaXMuY2FudmFzLGFyZ3VtZW50cyl9LG4ucHJvdG90eXBlLkRPTXRvQ2FudmFzPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuY2FudmFzLkRPTXRvQ2FudmFzLmFwcGx5KHRoaXMuY2FudmFzLGFyZ3VtZW50cyl9LG4ucHJvdG90eXBlLmZpbmROb2RlPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuY2x1c3RlcmluZy5maW5kTm9kZS5hcHBseSh0aGlzLmNsdXN0ZXJpbmcsYXJndW1lbnRzKX0sbi5wcm90b3R5cGUuaXNDbHVzdGVyPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuY2x1c3RlcmluZy5pc0NsdXN0ZXIuYXBwbHkodGhpcy5jbHVzdGVyaW5nLGFyZ3VtZW50cyl9LG4ucHJvdG90eXBlLm9wZW5DbHVzdGVyPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuY2x1c3RlcmluZy5vcGVuQ2x1c3Rlci5hcHBseSh0aGlzLmNsdXN0ZXJpbmcsYXJndW1lbnRzKX0sbi5wcm90b3R5cGUuY2x1c3Rlcj1mdW5jdGlvbigpe3JldHVybiB0aGlzLmNsdXN0ZXJpbmcuY2x1c3Rlci5hcHBseSh0aGlzLmNsdXN0ZXJpbmcsYXJndW1lbnRzKX0sbi5wcm90b3R5cGUuZ2V0Tm9kZXNJbkNsdXN0ZXI9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5jbHVzdGVyaW5nLmdldE5vZGVzSW5DbHVzdGVyLmFwcGx5KHRoaXMuY2x1c3RlcmluZyxhcmd1bWVudHMpfSxuLnByb3RvdHlwZS5jbHVzdGVyQnlDb25uZWN0aW9uPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuY2x1c3RlcmluZy5jbHVzdGVyQnlDb25uZWN0aW9uLmFwcGx5KHRoaXMuY2x1c3RlcmluZyxhcmd1bWVudHMpfSxuLnByb3RvdHlwZS5jbHVzdGVyQnlIdWJzaXplPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuY2x1c3RlcmluZy5jbHVzdGVyQnlIdWJzaXplLmFwcGx5KHRoaXMuY2x1c3RlcmluZyxhcmd1bWVudHMpfSxuLnByb3RvdHlwZS5jbHVzdGVyT3V0bGllcnM9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5jbHVzdGVyaW5nLmNsdXN0ZXJPdXRsaWVycy5hcHBseSh0aGlzLmNsdXN0ZXJpbmcsYXJndW1lbnRzKX0sbi5wcm90b3R5cGUuZ2V0U2VlZD1mdW5jdGlvbigpe3JldHVybiB0aGlzLmxheW91dEVuZ2luZS5nZXRTZWVkLmFwcGx5KHRoaXMubGF5b3V0RW5naW5lLGFyZ3VtZW50cyl9LG4ucHJvdG90eXBlLmVuYWJsZUVkaXRNb2RlPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMubWFuaXB1bGF0aW9uLmVuYWJsZUVkaXRNb2RlLmFwcGx5KHRoaXMubWFuaXB1bGF0aW9uLGFyZ3VtZW50cyl9LG4ucHJvdG90eXBlLmRpc2FibGVFZGl0TW9kZT1mdW5jdGlvbigpe3JldHVybiB0aGlzLm1hbmlwdWxhdGlvbi5kaXNhYmxlRWRpdE1vZGUuYXBwbHkodGhpcy5tYW5pcHVsYXRpb24sYXJndW1lbnRzKX0sbi5wcm90b3R5cGUuYWRkTm9kZU1vZGU9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5tYW5pcHVsYXRpb24uYWRkTm9kZU1vZGUuYXBwbHkodGhpcy5tYW5pcHVsYXRpb24sYXJndW1lbnRzKX0sbi5wcm90b3R5cGUuZWRpdE5vZGU9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5tYW5pcHVsYXRpb24uZWRpdE5vZGUuYXBwbHkodGhpcy5tYW5pcHVsYXRpb24sYXJndW1lbnRzKX0sbi5wcm90b3R5cGUuZWRpdE5vZGVNb2RlPWZ1bmN0aW9uKCl7cmV0dXJuIGNvbnNvbGUubG9nKCJEZXByZWNhdGVkOiBQbGVhc2UgdXNlIGVkaXROb2RlIGluc3RlYWQgb2YgZWRpdE5vZGVNb2RlLiIpLHRoaXMubWFuaXB1bGF0aW9uLmVkaXROb2RlLmFwcGx5KHRoaXMubWFuaXB1bGF0aW9uLGFyZ3VtZW50cyl9LG4ucHJvdG90eXBlLmFkZEVkZ2VNb2RlPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMubWFuaXB1bGF0aW9uLmFkZEVkZ2VNb2RlLmFwcGx5KHRoaXMubWFuaXB1bGF0aW9uLGFyZ3VtZW50cyl9LG4ucHJvdG90eXBlLmVkaXRFZGdlTW9kZT1mdW5jdGlvbigpe3JldHVybiB0aGlzLm1hbmlwdWxhdGlvbi5lZGl0RWRnZU1vZGUuYXBwbHkodGhpcy5tYW5pcHVsYXRpb24sYXJndW1lbnRzKX0sbi5wcm90b3R5cGUuZGVsZXRlU2VsZWN0ZWQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5tYW5pcHVsYXRpb24uZGVsZXRlU2VsZWN0ZWQuYXBwbHkodGhpcy5tYW5pcHVsYXRpb24sYXJndW1lbnRzKX0sbi5wcm90b3R5cGUuZ2V0UG9zaXRpb25zPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMubm9kZXNIYW5kbGVyLmdldFBvc2l0aW9ucy5hcHBseSh0aGlzLm5vZGVzSGFuZGxlcixhcmd1bWVudHMpfSxuLnByb3RvdHlwZS5zdG9yZVBvc2l0aW9ucz1mdW5jdGlvbigpe3JldHVybiB0aGlzLm5vZGVzSGFuZGxlci5zdG9yZVBvc2l0aW9ucy5hcHBseSh0aGlzLm5vZGVzSGFuZGxlcixhcmd1bWVudHMpfSxuLnByb3RvdHlwZS5tb3ZlTm9kZT1mdW5jdGlvbigpe3JldHVybiB0aGlzLm5vZGVzSGFuZGxlci5tb3ZlTm9kZS5hcHBseSh0aGlzLm5vZGVzSGFuZGxlcixhcmd1bWVudHMpfSxuLnByb3RvdHlwZS5nZXRCb3VuZGluZ0JveD1mdW5jdGlvbigpe3JldHVybiB0aGlzLm5vZGVzSGFuZGxlci5nZXRCb3VuZGluZ0JveC5hcHBseSh0aGlzLm5vZGVzSGFuZGxlcixhcmd1bWVudHMpfSxuLnByb3RvdHlwZS5nZXRDb25uZWN0ZWROb2Rlcz1mdW5jdGlvbih0KXtyZXR1cm4gdm9pZCAwIT09dGhpcy5ib2R5Lm5vZGVzW3RdP3RoaXMubm9kZXNIYW5kbGVyLmdldENvbm5lY3RlZE5vZGVzLmFwcGx5KHRoaXMubm9kZXNIYW5kbGVyLGFyZ3VtZW50cyk6dGhpcy5lZGdlc0hhbmRsZXIuZ2V0Q29ubmVjdGVkTm9kZXMuYXBwbHkodGhpcy5lZGdlc0hhbmRsZXIsYXJndW1lbnRzKX0sbi5wcm90b3R5cGUuZ2V0Q29ubmVjdGVkRWRnZXM9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5ub2Rlc0hhbmRsZXIuZ2V0Q29ubmVjdGVkRWRnZXMuYXBwbHkodGhpcy5ub2Rlc0hhbmRsZXIsYXJndW1lbnRzKX0sbi5wcm90b3R5cGUuc3RhcnRTaW11bGF0aW9uPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMucGh5c2ljcy5zdGFydFNpbXVsYXRpb24uYXBwbHkodGhpcy5waHlzaWNzLGFyZ3VtZW50cyl9LG4ucHJvdG90eXBlLnN0b3BTaW11bGF0aW9uPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMucGh5c2ljcy5zdG9wU2ltdWxhdGlvbi5hcHBseSh0aGlzLnBoeXNpY3MsYXJndW1lbnRzKX0sbi5wcm90b3R5cGUuc3RhYmlsaXplPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMucGh5c2ljcy5zdGFiaWxpemUuYXBwbHkodGhpcy5waHlzaWNzLGFyZ3VtZW50cyl9LG4ucHJvdG90eXBlLmdldFNlbGVjdGlvbj1mdW5jdGlvbigpe3JldHVybiB0aGlzLnNlbGVjdGlvbkhhbmRsZXIuZ2V0U2VsZWN0aW9uLmFwcGx5KHRoaXMuc2VsZWN0aW9uSGFuZGxlcixhcmd1bWVudHMpfSxuLnByb3RvdHlwZS5zZXRTZWxlY3Rpb249ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5zZWxlY3Rpb25IYW5kbGVyLnNldFNlbGVjdGlvbi5hcHBseSh0aGlzLnNlbGVjdGlvbkhhbmRsZXIsYXJndW1lbnRzKX0sbi5wcm90b3R5cGUuZ2V0U2VsZWN0ZWROb2Rlcz1mdW5jdGlvbigpe3JldHVybiB0aGlzLnNlbGVjdGlvbkhhbmRsZXIuZ2V0U2VsZWN0ZWROb2Rlcy5hcHBseSh0aGlzLnNlbGVjdGlvbkhhbmRsZXIsYXJndW1lbnRzKX0sbi5wcm90b3R5cGUuZ2V0U2VsZWN0ZWRFZGdlcz1mdW5jdGlvbigpe3JldHVybiB0aGlzLnNlbGVjdGlvbkhhbmRsZXIuZ2V0U2VsZWN0ZWRFZGdlcy5hcHBseSh0aGlzLnNlbGVjdGlvbkhhbmRsZXIsYXJndW1lbnRzKX0sbi5wcm90b3R5cGUuZ2V0Tm9kZUF0PWZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5zZWxlY3Rpb25IYW5kbGVyLmdldE5vZGVBdC5hcHBseSh0aGlzLnNlbGVjdGlvbkhhbmRsZXIsYXJndW1lbnRzKTtyZXR1cm4gdm9pZCAwIT09dCYmdm9pZCAwIT09dC5pZD90LmlkOnR9LG4ucHJvdG90eXBlLmdldEVkZ2VBdD1mdW5jdGlvbigpe3ZhciB0PXRoaXMuc2VsZWN0aW9uSGFuZGxlci5nZXRFZGdlQXQuYXBwbHkodGhpcy5zZWxlY3Rpb25IYW5kbGVyLGFyZ3VtZW50cyk7cmV0dXJuIHZvaWQgMCE9PXQmJnZvaWQgMCE9PXQuaWQ/dC5pZDp0fSxuLnByb3RvdHlwZS5zZWxlY3ROb2Rlcz1mdW5jdGlvbigpe3JldHVybiB0aGlzLnNlbGVjdGlvbkhhbmRsZXIuc2VsZWN0Tm9kZXMuYXBwbHkodGhpcy5zZWxlY3Rpb25IYW5kbGVyLGFyZ3VtZW50cyl9LG4ucHJvdG90eXBlLnNlbGVjdEVkZ2VzPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuc2VsZWN0aW9uSGFuZGxlci5zZWxlY3RFZGdlcy5hcHBseSh0aGlzLnNlbGVjdGlvbkhhbmRsZXIsYXJndW1lbnRzKX0sbi5wcm90b3R5cGUudW5zZWxlY3RBbGw9ZnVuY3Rpb24oKXt0aGlzLnNlbGVjdGlvbkhhbmRsZXIudW5zZWxlY3RBbGwuYXBwbHkodGhpcy5zZWxlY3Rpb25IYW5kbGVyLGFyZ3VtZW50cyksdGhpcy5yZWRyYXcoKX0sbi5wcm90b3R5cGUucmVkcmF3PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMucmVuZGVyZXIucmVkcmF3LmFwcGx5KHRoaXMucmVuZGVyZXIsYXJndW1lbnRzKX0sbi5wcm90b3R5cGUuZ2V0U2NhbGU9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy52aWV3LmdldFNjYWxlLmFwcGx5KHRoaXMudmlldyxhcmd1bWVudHMpfSxuLnByb3RvdHlwZS5nZXRWaWV3UG9zaXRpb249ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy52aWV3LmdldFZpZXdQb3NpdGlvbi5hcHBseSh0aGlzLnZpZXcsYXJndW1lbnRzKX0sbi5wcm90b3R5cGUuZml0PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMudmlldy5maXQuYXBwbHkodGhpcy52aWV3LGFyZ3VtZW50cyl9LG4ucHJvdG90eXBlLm1vdmVUbz1mdW5jdGlvbigpe3JldHVybiB0aGlzLnZpZXcubW92ZVRvLmFwcGx5KHRoaXMudmlldyxhcmd1bWVudHMpfSxuLnByb3RvdHlwZS5mb2N1cz1mdW5jdGlvbigpe3JldHVybiB0aGlzLnZpZXcuZm9jdXMuYXBwbHkodGhpcy52aWV3LGFyZ3VtZW50cyl9LG4ucHJvdG90eXBlLnJlbGVhc2VOb2RlPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMudmlldy5yZWxlYXNlTm9kZS5hcHBseSh0aGlzLnZpZXcsYXJndW1lbnRzKX0sbi5wcm90b3R5cGUuZ2V0T3B0aW9uc0Zyb21Db25maWd1cmF0b3I9ZnVuY3Rpb24oKXt2YXIgdD17fTtyZXR1cm4gdGhpcy5jb25maWd1cmF0b3ImJih0PXRoaXMuY29uZmlndXJhdG9yLmdldE9wdGlvbnMuYXBwbHkodGhpcy5jb25maWd1cmF0b3IpKSx0fSx0LmV4cG9ydHM9bn0sZnVuY3Rpb24odCxlLGkpe2Z1bmN0aW9uIG8odCxlKXtpZighKHQgaW5zdGFuY2VvZiBlKSl0aHJvdyBuZXcgVHlwZUVycm9yKCJDYW5ub3QgY2FsbCBhIGNsYXNzIGFzIGEgZnVuY3Rpb24iKX1PYmplY3QuZGVmaW5lUHJvcGVydHkoZSwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7dmFyIG49ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KHQsZSl7Zm9yKHZhciBpPTA7aTxlLmxlbmd0aDtpKyspe3ZhciBvPWVbaV07by5lbnVtZXJhYmxlPW8uZW51bWVyYWJsZXx8ITEsby5jb25maWd1cmFibGU9ITAsInZhbHVlImluIG8mJihvLndyaXRhYmxlPSEwKSxPYmplY3QuZGVmaW5lUHJvcGVydHkodCxvLmtleSxvKX19cmV0dXJuIGZ1bmN0aW9uKGUsaSxvKXtyZXR1cm4gaSYmdChlLnByb3RvdHlwZSxpKSxvJiZ0KGUsbyksZX19KCkscz1pKDEpLHI9ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KCl7byh0aGlzLHQpLHRoaXMuY2xlYXIoKSx0aGlzLmRlZmF1bHRJbmRleD0wLHRoaXMuZ3JvdXBzQXJyYXk9W10sdGhpcy5ncm91cEluZGV4PTAsdGhpcy5kZWZhdWx0R3JvdXBzPVt7Ym9yZGVyOiIjMkI3Q0U5IixiYWNrZ3JvdW5kOiIjOTdDMkZDIixoaWdobGlnaHQ6e2JvcmRlcjoiIzJCN0NFOSIsYmFja2dyb3VuZDoiI0QyRTVGRiJ9LGhvdmVyOntib3JkZXI6IiMyQjdDRTkiLGJhY2tncm91bmQ6IiNEMkU1RkYifX0se2JvcmRlcjoiI0ZGQTUwMCIsYmFja2dyb3VuZDoiI0ZGRkYwMCIsaGlnaGxpZ2h0Ontib3JkZXI6IiNGRkE1MDAiLGJhY2tncm91bmQ6IiNGRkZGQTMifSxob3Zlcjp7Ym9yZGVyOiIjRkZBNTAwIixiYWNrZ3JvdW5kOiIjRkZGRkEzIn19LHtib3JkZXI6IiNGQTBBMTAiLGJhY2tncm91bmQ6IiNGQjdFODEiLGhpZ2hsaWdodDp7Ym9yZGVyOiIjRkEwQTEwIixiYWNrZ3JvdW5kOiIjRkZBRkIxIn0saG92ZXI6e2JvcmRlcjoiI0ZBMEExMCIsYmFja2dyb3VuZDoiI0ZGQUZCMSJ9fSx7Ym9yZGVyOiIjNDFBOTA2IixiYWNrZ3JvdW5kOiIjN0JFMTQxIixoaWdobGlnaHQ6e2JvcmRlcjoiIzQxQTkwNiIsYmFja2dyb3VuZDoiI0ExRUM3NiJ9LGhvdmVyOntib3JkZXI6IiM0MUE5MDYiLGJhY2tncm91bmQ6IiNBMUVDNzYifX0se2JvcmRlcjoiI0UxMjlGMCIsYmFja2dyb3VuZDoiI0VCN0RGNCIsaGlnaGxpZ2h0Ontib3JkZXI6IiNFMTI5RjAiLGJhY2tncm91bmQ6IiNGMEIzRjUifSxob3Zlcjp7Ym9yZGVyOiIjRTEyOUYwIixiYWNrZ3JvdW5kOiIjRjBCM0Y1In19LHtib3JkZXI6IiM3QzI5RjAiLGJhY2tncm91bmQ6IiNBRDg1RTQiLGhpZ2hsaWdodDp7Ym9yZGVyOiIjN0MyOUYwIixiYWNrZ3JvdW5kOiIjRDNCREYwIn0saG92ZXI6e2JvcmRlcjoiIzdDMjlGMCIsYmFja2dyb3VuZDoiI0QzQkRGMCJ9fSx7Ym9yZGVyOiIjQzM3RjAwIixiYWNrZ3JvdW5kOiIjRkZBODA3IixoaWdobGlnaHQ6e2JvcmRlcjoiI0MzN0YwMCIsYmFja2dyb3VuZDoiI0ZGQ0E2NiJ9LGhvdmVyOntib3JkZXI6IiNDMzdGMDAiLGJhY2tncm91bmQ6IiNGRkNBNjYifX0se2JvcmRlcjoiIzQyMjBGQiIsYmFja2dyb3VuZDoiIzZFNkVGRCIsaGlnaGxpZ2h0Ontib3JkZXI6IiM0MjIwRkIiLGJhY2tncm91bmQ6IiM5QjlCRkQifSxob3Zlcjp7Ym9yZGVyOiIjNDIyMEZCIixiYWNrZ3JvdW5kOiIjOUI5QkZEIn19LHtib3JkZXI6IiNGRDVBNzciLGJhY2tncm91bmQ6IiNGRkMwQ0IiLGhpZ2hsaWdodDp7Ym9yZGVyOiIjRkQ1QTc3IixiYWNrZ3JvdW5kOiIjRkZEMUQ5In0saG92ZXI6e2JvcmRlcjoiI0ZENUE3NyIsYmFja2dyb3VuZDoiI0ZGRDFEOSJ9fSx7Ym9yZGVyOiIjNEFENjNBIixiYWNrZ3JvdW5kOiIjQzJGQUJDIixoaWdobGlnaHQ6e2JvcmRlcjoiIzRBRDYzQSIsYmFja2dyb3VuZDoiI0U2RkZFMyJ9LGhvdmVyOntib3JkZXI6IiM0QUQ2M0EiLGJhY2tncm91bmQ6IiNFNkZGRTMifX0se2JvcmRlcjoiIzk5MDAwMCIsYmFja2dyb3VuZDoiI0VFMDAwMCIsaGlnaGxpZ2h0Ontib3JkZXI6IiNCQjAwMDAiLGJhY2tncm91bmQ6IiNGRjMzMzMifSxob3Zlcjp7Ym9yZGVyOiIjQkIwMDAwIixiYWNrZ3JvdW5kOiIjRkYzMzMzIn19LHtib3JkZXI6IiNGRjYwMDAiLGJhY2tncm91bmQ6IiNGRjYwMDAiLGhpZ2hsaWdodDp7Ym9yZGVyOiIjRkY2MDAwIixiYWNrZ3JvdW5kOiIjRkY2MDAwIn0saG92ZXI6e2JvcmRlcjoiI0ZGNjAwMCIsYmFja2dyb3VuZDoiI0ZGNjAwMCJ9fSx7Ym9yZGVyOiIjOTdDMkZDIixiYWNrZ3JvdW5kOiIjMkI3Q0U5IixoaWdobGlnaHQ6e2JvcmRlcjoiI0QyRTVGRiIsYmFja2dyb3VuZDoiIzJCN0NFOSJ9LGhvdmVyOntib3JkZXI6IiNEMkU1RkYiLGJhY2tncm91bmQ6IiMyQjdDRTkifX0se2JvcmRlcjoiIzM5OTYwNSIsYmFja2dyb3VuZDoiIzI1NUMwMyIsaGlnaGxpZ2h0Ontib3JkZXI6IiMzOTk2MDUiLGJhY2tncm91bmQ6IiMyNTVDMDMifSxob3Zlcjp7Ym9yZGVyOiIjMzk5NjA1IixiYWNrZ3JvdW5kOiIjMjU1QzAzIn19LHtib3JkZXI6IiNCNzAwNTQiLGJhY2tncm91bmQ6IiNGRjAwN0UiLGhpZ2hsaWdodDp7Ym9yZGVyOiIjQjcwMDU0IixiYWNrZ3JvdW5kOiIjRkYwMDdFIn0saG92ZXI6e2JvcmRlcjoiI0I3MDA1NCIsYmFja2dyb3VuZDoiI0ZGMDA3RSJ9fSx7Ym9yZGVyOiIjQUQ4NUU0IixiYWNrZ3JvdW5kOiIjN0MyOUYwIixoaWdobGlnaHQ6e2JvcmRlcjoiI0QzQkRGMCIsYmFja2dyb3VuZDoiIzdDMjlGMCJ9LGhvdmVyOntib3JkZXI6IiNEM0JERjAiLGJhY2tncm91bmQ6IiM3QzI5RjAifX0se2JvcmRlcjoiIzQ1NTdGQSIsYmFja2dyb3VuZDoiIzAwMEVBMSIsaGlnaGxpZ2h0Ontib3JkZXI6IiM2RTZFRkQiLGJhY2tncm91bmQ6IiMwMDBFQTEifSxob3Zlcjp7Ym9yZGVyOiIjNkU2RUZEIixiYWNrZ3JvdW5kOiIjMDAwRUExIn19LHtib3JkZXI6IiNGRkMwQ0IiLGJhY2tncm91bmQ6IiNGRDVBNzciLGhpZ2hsaWdodDp7Ym9yZGVyOiIjRkZEMUQ5IixiYWNrZ3JvdW5kOiIjRkQ1QTc3In0saG92ZXI6e2JvcmRlcjoiI0ZGRDFEOSIsYmFja2dyb3VuZDoiI0ZENUE3NyJ9fSx7Ym9yZGVyOiIjQzJGQUJDIixiYWNrZ3JvdW5kOiIjNzRENjZBIixoaWdobGlnaHQ6e2JvcmRlcjoiI0U2RkZFMyIsYmFja2dyb3VuZDoiIzc0RDY2QSJ9LGhvdmVyOntib3JkZXI6IiNFNkZGRTMiLGJhY2tncm91bmQ6IiM3NEQ2NkEifX0se2JvcmRlcjoiI0VFMDAwMCIsYmFja2dyb3VuZDoiIzk5MDAwMCIsaGlnaGxpZ2h0Ontib3JkZXI6IiNGRjMzMzMiLGJhY2tncm91bmQ6IiNCQjAwMDAifSxob3Zlcjp7Ym9yZGVyOiIjRkYzMzMzIixiYWNrZ3JvdW5kOiIjQkIwMDAwIgp9fV0sdGhpcy5vcHRpb25zPXt9LHRoaXMuZGVmYXVsdE9wdGlvbnM9e3VzZURlZmF1bHRHcm91cHM6ITB9LHMuZXh0ZW5kKHRoaXMub3B0aW9ucyx0aGlzLmRlZmF1bHRPcHRpb25zKX1yZXR1cm4gbih0LFt7a2V5OiJzZXRPcHRpb25zIix2YWx1ZTpmdW5jdGlvbih0KXt2YXIgZT1bInVzZURlZmF1bHRHcm91cHMiXTtpZih2b2lkIDAhPT10KWZvcih2YXIgaSBpbiB0KWlmKHQuaGFzT3duUHJvcGVydHkoaSkmJi0xPT09ZS5pbmRleE9mKGkpKXt2YXIgbz10W2ldO3RoaXMuYWRkKGksbyl9fX0se2tleToiY2xlYXIiLHZhbHVlOmZ1bmN0aW9uKCl7dGhpcy5ncm91cHM9e30sdGhpcy5ncm91cHNBcnJheT1bXX19LHtrZXk6ImdldCIsdmFsdWU6ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5ncm91cHNbdF07aWYodm9pZCAwPT09ZSlpZih0aGlzLm9wdGlvbnMudXNlRGVmYXVsdEdyb3Vwcz09PSExJiZ0aGlzLmdyb3Vwc0FycmF5Lmxlbmd0aD4wKXt2YXIgaT10aGlzLmdyb3VwSW5kZXgldGhpcy5ncm91cHNBcnJheS5sZW5ndGg7dGhpcy5ncm91cEluZGV4KyssZT17fSxlLmNvbG9yPXRoaXMuZ3JvdXBzW3RoaXMuZ3JvdXBzQXJyYXlbaV1dLHRoaXMuZ3JvdXBzW3RdPWV9ZWxzZXt2YXIgaT10aGlzLmRlZmF1bHRJbmRleCV0aGlzLmRlZmF1bHRHcm91cHMubGVuZ3RoO3RoaXMuZGVmYXVsdEluZGV4KyssZT17fSxlLmNvbG9yPXRoaXMuZGVmYXVsdEdyb3Vwc1tpXSx0aGlzLmdyb3Vwc1t0XT1lfXJldHVybiBlfX0se2tleToiYWRkIix2YWx1ZTpmdW5jdGlvbih0LGUpe3JldHVybiB0aGlzLmdyb3Vwc1t0XT1lLHRoaXMuZ3JvdXBzQXJyYXkucHVzaCh0KSxlfX1dKSx0fSgpO2VbImRlZmF1bHQiXT1yLHQuZXhwb3J0cz1lWyJkZWZhdWx0Il19LGZ1bmN0aW9uKHQsZSxpKXtmdW5jdGlvbiBvKHQpe3JldHVybiB0JiZ0Ll9fZXNNb2R1bGU/dDp7ImRlZmF1bHQiOnR9fWZ1bmN0aW9uIG4odCxlKXtpZighKHQgaW5zdGFuY2VvZiBlKSl0aHJvdyBuZXcgVHlwZUVycm9yKCJDYW5ub3QgY2FsbCBhIGNsYXNzIGFzIGEgZnVuY3Rpb24iKX1PYmplY3QuZGVmaW5lUHJvcGVydHkoZSwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7dmFyIHM9ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KHQsZSl7Zm9yKHZhciBpPTA7aTxlLmxlbmd0aDtpKyspe3ZhciBvPWVbaV07by5lbnVtZXJhYmxlPW8uZW51bWVyYWJsZXx8ITEsby5jb25maWd1cmFibGU9ITAsInZhbHVlImluIG8mJihvLndyaXRhYmxlPSEwKSxPYmplY3QuZGVmaW5lUHJvcGVydHkodCxvLmtleSxvKX19cmV0dXJuIGZ1bmN0aW9uKGUsaSxvKXtyZXR1cm4gaSYmdChlLnByb3RvdHlwZSxpKSxvJiZ0KGUsbyksZX19KCkscj1pKDYxKSxhPW8ociksaD1pKDYyKSxkPW8oaCksbD1pKDEpLHU9aSg4KSxjPWkoMTApLHA9ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KGUsaSxvLHMpe3ZhciByPXRoaXM7bih0aGlzLHQpLHRoaXMuYm9keT1lLHRoaXMuaW1hZ2VzPWksdGhpcy5ncm91cHM9byx0aGlzLmxheW91dEVuZ2luZT1zLHRoaXMuYm9keS5mdW5jdGlvbnMuY3JlYXRlTm9kZT10aGlzLmNyZWF0ZS5iaW5kKHRoaXMpLHRoaXMubm9kZXNMaXN0ZW5lcnM9e2FkZDpmdW5jdGlvbih0LGUpe3IuYWRkKGUuaXRlbXMpfSx1cGRhdGU6ZnVuY3Rpb24odCxlKXtyLnVwZGF0ZShlLml0ZW1zLGUuZGF0YSl9LHJlbW92ZTpmdW5jdGlvbih0LGUpe3IucmVtb3ZlKGUuaXRlbXMpfX0sdGhpcy5vcHRpb25zPXt9LHRoaXMuZGVmYXVsdE9wdGlvbnM9e2JvcmRlcldpZHRoOjEsYm9yZGVyV2lkdGhTZWxlY3RlZDoyLGJyb2tlbkltYWdlOnZvaWQgMCxjb2xvcjp7Ym9yZGVyOiIjMkI3Q0U5IixiYWNrZ3JvdW5kOiIjOTdDMkZDIixoaWdobGlnaHQ6e2JvcmRlcjoiIzJCN0NFOSIsYmFja2dyb3VuZDoiI0QyRTVGRiJ9LGhvdmVyOntib3JkZXI6IiMyQjdDRTkiLGJhY2tncm91bmQ6IiNEMkU1RkYifX0sZml4ZWQ6e3g6ITEseTohMX0sZm9udDp7Y29sb3I6IiMzNDM0MzQiLHNpemU6MTQsZmFjZToiYXJpYWwiLGJhY2tncm91bmQ6Im5vbmUiLHN0cm9rZVdpZHRoOjAsc3Ryb2tlQ29sb3I6IiNmZmZmZmYiLGFsaWduOiJob3Jpem9udGFsIn0sZ3JvdXA6dm9pZCAwLGhpZGRlbjohMSxpY29uOntmYWNlOiJGb250QXdlc29tZSIsY29kZTp2b2lkIDAsc2l6ZTo1MCxjb2xvcjoiIzJCN0NFOSJ9LGltYWdlOnZvaWQgMCxsYWJlbDp2b2lkIDAsbGFiZWxIaWdobGlnaHRCb2xkOiEwLGxldmVsOnZvaWQgMCxtYXNzOjEscGh5c2ljczohMCxzY2FsaW5nOnttaW46MTAsbWF4OjMwLGxhYmVsOntlbmFibGVkOiExLG1pbjoxNCxtYXg6MzAsbWF4VmlzaWJsZTozMCxkcmF3VGhyZXNob2xkOjV9LGN1c3RvbVNjYWxpbmdGdW5jdGlvbjpmdW5jdGlvbih0LGUsaSxvKXtpZihlPT09dClyZXR1cm4uNTt2YXIgbj0xLyhlLXQpO3JldHVybiBNYXRoLm1heCgwLChvLXQpKm4pfX0sc2hhZG93OntlbmFibGVkOiExLGNvbG9yOiJyZ2JhKDAsMCwwLDAuNSkiLHNpemU6MTAseDo1LHk6NX0sc2hhcGU6ImVsbGlwc2UiLHNoYXBlUHJvcGVydGllczp7Ym9yZGVyRGFzaGVzOiExLGJvcmRlclJhZGl1czo2LHVzZUltYWdlU2l6ZTohMSx1c2VCb3JkZXJXaXRoSW1hZ2U6ITF9LHNpemU6MjUsdGl0bGU6dm9pZCAwLHZhbHVlOnZvaWQgMCx4OnZvaWQgMCx5OnZvaWQgMH0sbC5leHRlbmQodGhpcy5vcHRpb25zLHRoaXMuZGVmYXVsdE9wdGlvbnMpLHRoaXMuYmluZEV2ZW50TGlzdGVuZXJzKCl9cmV0dXJuIHModCxbe2tleToiYmluZEV2ZW50TGlzdGVuZXJzIix2YWx1ZTpmdW5jdGlvbigpe3ZhciB0PXRoaXM7dGhpcy5ib2R5LmVtaXR0ZXIub24oInJlZnJlc2hOb2RlcyIsdGhpcy5yZWZyZXNoLmJpbmQodGhpcykpLHRoaXMuYm9keS5lbWl0dGVyLm9uKCJyZWZyZXNoIix0aGlzLnJlZnJlc2guYmluZCh0aGlzKSksdGhpcy5ib2R5LmVtaXR0ZXIub24oImRlc3Ryb3kiLGZ1bmN0aW9uKCl7ZGVsZXRlIHQuYm9keS5mdW5jdGlvbnMuY3JlYXRlTm9kZSxkZWxldGUgdC5ub2Rlc0xpc3RlbmVycy5hZGQsZGVsZXRlIHQubm9kZXNMaXN0ZW5lcnMudXBkYXRlLGRlbGV0ZSB0Lm5vZGVzTGlzdGVuZXJzLnJlbW92ZSxkZWxldGUgdC5ub2Rlc0xpc3RlbmVyc30pfX0se2tleToic2V0T3B0aW9ucyIsdmFsdWU6ZnVuY3Rpb24odCl7aWYodm9pZCAwIT09dCl7aWYoYVsiZGVmYXVsdCJdLnBhcnNlT3B0aW9ucyh0aGlzLm9wdGlvbnMsdCksdm9pZCAwIT09dC5zaGFwZSlmb3IodmFyIGUgaW4gdGhpcy5ib2R5Lm5vZGVzKXRoaXMuYm9keS5ub2Rlcy5oYXNPd25Qcm9wZXJ0eShlKSYmdGhpcy5ib2R5Lm5vZGVzW2VdLnVwZGF0ZVNoYXBlKCk7aWYodm9pZCAwIT09dC5mb250KXtkWyJkZWZhdWx0Il0ucGFyc2VPcHRpb25zKHRoaXMub3B0aW9ucy5mb250LHQpO2Zvcih2YXIgZSBpbiB0aGlzLmJvZHkubm9kZXMpdGhpcy5ib2R5Lm5vZGVzLmhhc093blByb3BlcnR5KGUpJiYodGhpcy5ib2R5Lm5vZGVzW2VdLnVwZGF0ZUxhYmVsTW9kdWxlKCksdGhpcy5ib2R5Lm5vZGVzW2VdLl9yZXNldCgpKX1pZih2b2lkIDAhPT10LnNpemUpZm9yKHZhciBlIGluIHRoaXMuYm9keS5ub2Rlcyl0aGlzLmJvZHkubm9kZXMuaGFzT3duUHJvcGVydHkoZSkmJnRoaXMuYm9keS5ub2Rlc1tlXS5fcmVzZXQoKTsodm9pZCAwIT09dC5oaWRkZW58fHZvaWQgMCE9PXQucGh5c2ljcykmJnRoaXMuYm9keS5lbWl0dGVyLmVtaXQoIl9kYXRhQ2hhbmdlZCIpfX19LHtrZXk6InNldERhdGEiLHZhbHVlOmZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMsaT1hcmd1bWVudHMubGVuZ3RoPD0xfHx2b2lkIDA9PT1hcmd1bWVudHNbMV0/ITE6YXJndW1lbnRzWzFdLG89dGhpcy5ib2R5LmRhdGEubm9kZXM7aWYodCBpbnN0YW5jZW9mIHV8fHQgaW5zdGFuY2VvZiBjKXRoaXMuYm9keS5kYXRhLm5vZGVzPXQ7ZWxzZSBpZihBcnJheS5pc0FycmF5KHQpKXRoaXMuYm9keS5kYXRhLm5vZGVzPW5ldyB1LHRoaXMuYm9keS5kYXRhLm5vZGVzLmFkZCh0KTtlbHNle2lmKHQpdGhyb3cgbmV3IFR5cGVFcnJvcigiQXJyYXkgb3IgRGF0YVNldCBleHBlY3RlZCIpO3RoaXMuYm9keS5kYXRhLm5vZGVzPW5ldyB1fW8mJmwuZm9yRWFjaCh0aGlzLm5vZGVzTGlzdGVuZXJzLGZ1bmN0aW9uKHQsZSl7by5vZmYoZSx0KX0pLHRoaXMuYm9keS5ub2Rlcz17fSx0aGlzLmJvZHkuZGF0YS5ub2RlcyYmIWZ1bmN0aW9uKCl7dmFyIHQ9ZTtsLmZvckVhY2goZS5ub2Rlc0xpc3RlbmVycyxmdW5jdGlvbihlLGkpe3QuYm9keS5kYXRhLm5vZGVzLm9uKGksZSl9KTt2YXIgaT1lLmJvZHkuZGF0YS5ub2Rlcy5nZXRJZHMoKTtlLmFkZChpLCEwKX0oKSxpPT09ITEmJnRoaXMuYm9keS5lbWl0dGVyLmVtaXQoIl9kYXRhQ2hhbmdlZCIpfX0se2tleToiYWRkIix2YWx1ZTpmdW5jdGlvbih0KXtmb3IodmFyIGU9YXJndW1lbnRzLmxlbmd0aDw9MXx8dm9pZCAwPT09YXJndW1lbnRzWzFdPyExOmFyZ3VtZW50c1sxXSxpPXZvaWQgMCxvPVtdLG49MDtuPHQubGVuZ3RoO24rKyl7aT10W25dO3ZhciBzPXRoaXMuYm9keS5kYXRhLm5vZGVzLmdldChpKSxyPXRoaXMuY3JlYXRlKHMpO28ucHVzaChyKSx0aGlzLmJvZHkubm9kZXNbaV09cn10aGlzLmxheW91dEVuZ2luZS5wb3NpdGlvbkluaXRpYWxseShvKSxlPT09ITEmJnRoaXMuYm9keS5lbWl0dGVyLmVtaXQoIl9kYXRhQ2hhbmdlZCIpfX0se2tleToidXBkYXRlIix2YWx1ZTpmdW5jdGlvbih0LGUpe2Zvcih2YXIgaT10aGlzLmJvZHkubm9kZXMsbz0hMSxuPTA7bjx0Lmxlbmd0aDtuKyspe3ZhciBzPXRbbl0scj1pW3NdLGE9ZVtuXTt2b2lkIDAhPT1yP289ci5zZXRPcHRpb25zKGEpOihvPSEwLHI9dGhpcy5jcmVhdGUoYSksaVtzXT1yKX1vPT09ITA/dGhpcy5ib2R5LmVtaXR0ZXIuZW1pdCgiX2RhdGFDaGFuZ2VkIik6dGhpcy5ib2R5LmVtaXR0ZXIuZW1pdCgiX2RhdGFVcGRhdGVkIil9fSx7a2V5OiJyZW1vdmUiLHZhbHVlOmZ1bmN0aW9uKHQpe2Zvcih2YXIgZT10aGlzLmJvZHkubm9kZXMsaT0wO2k8dC5sZW5ndGg7aSsrKXt2YXIgbz10W2ldO2RlbGV0ZSBlW29dfXRoaXMuYm9keS5lbWl0dGVyLmVtaXQoIl9kYXRhQ2hhbmdlZCIpfX0se2tleToiY3JlYXRlIix2YWx1ZTpmdW5jdGlvbih0KXt2YXIgZT1hcmd1bWVudHMubGVuZ3RoPD0xfHx2b2lkIDA9PT1hcmd1bWVudHNbMV0/YVsiZGVmYXVsdCJdOmFyZ3VtZW50c1sxXTtyZXR1cm4gbmV3IGUodCx0aGlzLmJvZHksdGhpcy5pbWFnZXMsdGhpcy5ncm91cHMsdGhpcy5vcHRpb25zKX19LHtrZXk6InJlZnJlc2giLHZhbHVlOmZ1bmN0aW9uKCl7dmFyIHQ9YXJndW1lbnRzLmxlbmd0aDw9MHx8dm9pZCAwPT09YXJndW1lbnRzWzBdPyExOmFyZ3VtZW50c1swXSxlPXRoaXMuYm9keS5ub2Rlcztmb3IodmFyIGkgaW4gZSl7dmFyIG89dm9pZCAwO2UuaGFzT3duUHJvcGVydHkoaSkmJihvPWVbaV0pO3ZhciBuPXRoaXMuYm9keS5kYXRhLm5vZGVzLl9kYXRhW2ldO3ZvaWQgMCE9PW8mJnZvaWQgMCE9PW4mJih0PT09ITAmJm8uc2V0T3B0aW9ucyh7eDpudWxsLHk6bnVsbH0pLG8uc2V0T3B0aW9ucyh7Zml4ZWQ6ITF9KSxvLnNldE9wdGlvbnMobikpfX19LHtrZXk6ImdldFBvc2l0aW9ucyIsdmFsdWU6ZnVuY3Rpb24odCl7dmFyIGU9e307aWYodm9pZCAwIT09dCl7aWYoQXJyYXkuaXNBcnJheSh0KT09PSEwKXtmb3IodmFyIGk9MDtpPHQubGVuZ3RoO2krKylpZih2b2lkIDAhPT10aGlzLmJvZHkubm9kZXNbdFtpXV0pe3ZhciBvPXRoaXMuYm9keS5ub2Rlc1t0W2ldXTtlW3RbaV1dPXt4Ok1hdGgucm91bmQoby54KSx5Ok1hdGgucm91bmQoby55KX19fWVsc2UgaWYodm9pZCAwIT09dGhpcy5ib2R5Lm5vZGVzW3RdKXt2YXIgbz10aGlzLmJvZHkubm9kZXNbdF07ZVt0XT17eDpNYXRoLnJvdW5kKG8ueCkseTpNYXRoLnJvdW5kKG8ueSl9fX1lbHNlIGZvcih2YXIgaT0wO2k8dGhpcy5ib2R5Lm5vZGVJbmRpY2VzLmxlbmd0aDtpKyspe3ZhciBvPXRoaXMuYm9keS5ub2Rlc1t0aGlzLmJvZHkubm9kZUluZGljZXNbaV1dO2VbdGhpcy5ib2R5Lm5vZGVJbmRpY2VzW2ldXT17eDpNYXRoLnJvdW5kKG8ueCkseTpNYXRoLnJvdW5kKG8ueSl9fXJldHVybiBlfX0se2tleToic3RvcmVQb3NpdGlvbnMiLHZhbHVlOmZ1bmN0aW9uKCl7dmFyIHQ9W10sZT10aGlzLmJvZHkuZGF0YS5ub2Rlcy5nZXREYXRhU2V0KCk7Zm9yKHZhciBpIGluIGUuX2RhdGEpaWYoZS5fZGF0YS5oYXNPd25Qcm9wZXJ0eShpKSl7dmFyIG89dGhpcy5ib2R5Lm5vZGVzW2ldOyhlLl9kYXRhW2ldLnghPU1hdGgucm91bmQoby54KXx8ZS5fZGF0YVtpXS55IT1NYXRoLnJvdW5kKG8ueSkpJiZ0LnB1c2goe2lkOm8uaWQseDpNYXRoLnJvdW5kKG8ueCkseTpNYXRoLnJvdW5kKG8ueSl9KX1lLnVwZGF0ZSh0KX19LHtrZXk6ImdldEJvdW5kaW5nQm94Iix2YWx1ZTpmdW5jdGlvbih0KXtyZXR1cm4gdm9pZCAwIT09dGhpcy5ib2R5Lm5vZGVzW3RdP3RoaXMuYm9keS5ub2Rlc1t0XS5zaGFwZS5ib3VuZGluZ0JveDp2b2lkIDB9fSx7a2V5OiJnZXRDb25uZWN0ZWROb2RlcyIsdmFsdWU6ZnVuY3Rpb24odCl7dmFyIGU9W107aWYodm9pZCAwIT09dGhpcy5ib2R5Lm5vZGVzW3RdKWZvcih2YXIgaT10aGlzLmJvZHkubm9kZXNbdF0sbz17fSxuPTA7bjxpLmVkZ2VzLmxlbmd0aDtuKyspe3ZhciBzPWkuZWRnZXNbbl07cy50b0lkPT1pLmlkP3ZvaWQgMD09PW9bcy5mcm9tSWRdJiYoZS5wdXNoKHMuZnJvbUlkKSxvW3MuZnJvbUlkXT0hMCk6cy5mcm9tSWQ9PWkuaWQmJnZvaWQgMD09PW9bcy50b0lkXSYmKGUucHVzaChzLnRvSWQpLG9bcy50b0lkXT0hMCl9cmV0dXJuIGV9fSx7a2V5OiJnZXRDb25uZWN0ZWRFZGdlcyIsdmFsdWU6ZnVuY3Rpb24odCl7dmFyIGU9W107aWYodm9pZCAwIT09dGhpcy5ib2R5Lm5vZGVzW3RdKWZvcih2YXIgaT10aGlzLmJvZHkubm9kZXNbdF0sbz0wO288aS5lZGdlcy5sZW5ndGg7bysrKWUucHVzaChpLmVkZ2VzW29dLmlkKTtlbHNlIGNvbnNvbGUubG9nKCJOb2RlSWQgcHJvdmlkZWQgZm9yIGdldENvbm5lY3RlZEVkZ2VzIGRvZXMgbm90IGV4aXN0LiBQcm92aWRlZDogIix0KTtyZXR1cm4gZX19LHtrZXk6Im1vdmVOb2RlIix2YWx1ZTpmdW5jdGlvbih0LGUsaSl7dmFyIG89dGhpczt2b2lkIDAhPT10aGlzLmJvZHkubm9kZXNbdF0/KHRoaXMuYm9keS5ub2Rlc1t0XS54PU51bWJlcihlKSx0aGlzLmJvZHkubm9kZXNbdF0ueT1OdW1iZXIoaSksc2V0VGltZW91dChmdW5jdGlvbigpe28uYm9keS5lbWl0dGVyLmVtaXQoInN0YXJ0U2ltdWxhdGlvbiIpfSwwKSk6Y29uc29sZS5sb2coIk5vZGUgaWQgc3VwcGxpZWQgdG8gbW92ZU5vZGUgZG9lcyBub3QgZXhpc3QuIFByb3ZpZGVkOiAiLHQpfX1dKSx0fSgpO2VbImRlZmF1bHQiXT1wLHQuZXhwb3J0cz1lWyJkZWZhdWx0Il19LGZ1bmN0aW9uKHQsZSxpKXtmdW5jdGlvbiBvKHQpe3JldHVybiB0JiZ0Ll9fZXNNb2R1bGU/dDp7ImRlZmF1bHQiOnR9fWZ1bmN0aW9uIG4odCxlKXtpZighKHQgaW5zdGFuY2VvZiBlKSl0aHJvdyBuZXcgVHlwZUVycm9yKCJDYW5ub3QgY2FsbCBhIGNsYXNzIGFzIGEgZnVuY3Rpb24iKX1PYmplY3QuZGVmaW5lUHJvcGVydHkoZSwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7dmFyIHM9ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KHQsZSl7Zm9yKHZhciBpPTA7aTxlLmxlbmd0aDtpKyspe3ZhciBvPWVbaV07by5lbnVtZXJhYmxlPW8uZW51bWVyYWJsZXx8ITEsby5jb25maWd1cmFibGU9ITAsInZhbHVlImluIG8mJihvLndyaXRhYmxlPSEwKSxPYmplY3QuZGVmaW5lUHJvcGVydHkodCxvLmtleSxvKX19cmV0dXJuIGZ1bmN0aW9uKGUsaSxvKXtyZXR1cm4gaSYmdChlLnByb3RvdHlwZSxpKSxvJiZ0KGUsbyksZX19KCkscj1pKDYyKSxhPW8ociksaD1pKDYzKSxkPW8oaCksbD1pKDY1KSx1PW8obCksYz1pKDY3KSxwPW8oYyksZj1pKDY4KSxtPW8oZiksdj1pKDY5KSxnPW8odikseT1pKDcxKSxiPW8oeSksdz1pKDcyKSxfPW8odykseD1pKDczKSxrPW8oeCksTz1pKDc0KSxNPW8oTyksRD1pKDc1KSxDPW8oRCksVD1pKDc2KSxFPW8oVCksUz1pKDc3KSxQPW8oUyksST1pKDc4KSxOPW8oSSksej1pKDc5KSxMPW8oeiksQT1pKDQ2KSxCPShvKEEpLGkoMSkpLEY9ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KGUsaSxvLHMscil7bih0aGlzLHQpLHRoaXMub3B0aW9ucz1CLmJyaWRnZU9iamVjdChyKSx0aGlzLmdsb2JhbE9wdGlvbnM9cix0aGlzLmJvZHk9aSx0aGlzLmVkZ2VzPVtdLHRoaXMuaWQ9dm9pZCAwLHRoaXMuaW1hZ2VsaXN0PW8sdGhpcy5ncm91cGxpc3Q9cyx0aGlzLng9dm9pZCAwLHRoaXMueT12b2lkIDAsdGhpcy5iYXNlU2l6ZT10aGlzLm9wdGlvbnMuc2l6ZSx0aGlzLmJhc2VGb250U2l6ZT10aGlzLm9wdGlvbnMuZm9udC5zaXplLHRoaXMucHJlZGVmaW5lZFBvc2l0aW9uPSExLHRoaXMuc2VsZWN0ZWQ9ITEsdGhpcy5ob3Zlcj0hMSx0aGlzLmxhYmVsTW9kdWxlPW5ldyBhWyJkZWZhdWx0Il0odGhpcy5ib2R5LHRoaXMub3B0aW9ucyksdGhpcy5zZXRPcHRpb25zKGUpfXJldHVybiBzKHQsW3trZXk6ImF0dGFjaEVkZ2UiLHZhbHVlOmZ1bmN0aW9uKHQpey0xPT09dGhpcy5lZGdlcy5pbmRleE9mKHQpJiZ0aGlzLmVkZ2VzLnB1c2godCl9fSx7a2V5OiJkZXRhY2hFZGdlIix2YWx1ZTpmdW5jdGlvbih0KXt2YXIgZT10aGlzLmVkZ2VzLmluZGV4T2YodCk7LTEhPWUmJnRoaXMuZWRnZXMuc3BsaWNlKGUsMSl9fSx7a2V5OiJzZXRPcHRpb25zIix2YWx1ZTpmdW5jdGlvbihlKXt2YXIgaT10aGlzLm9wdGlvbnMuc2hhcGU7aWYoZSl7aWYodm9pZCAwIT09ZS5pZCYmKHRoaXMuaWQ9ZS5pZCksdm9pZCAwPT09dGhpcy5pZCl0aHJvdyJOb2RlIG11c3QgaGF2ZSBhbiBpZCI7aWYodm9pZCAwIT09ZS54JiYobnVsbD09PWUueD8odGhpcy54PXZvaWQgMCx0aGlzLnByZWRlZmluZWRQb3NpdGlvbj0hMSk6KHRoaXMueD1wYXJzZUludChlLngpLHRoaXMucHJlZGVmaW5lZFBvc2l0aW9uPSEwKSksdm9pZCAwIT09ZS55JiYobnVsbD09PWUueT8odGhpcy55PXZvaWQgMCx0aGlzLnByZWRlZmluZWRQb3NpdGlvbj0hMSk6KHRoaXMueT1wYXJzZUludChlLnkpLHRoaXMucHJlZGVmaW5lZFBvc2l0aW9uPSEwKSksdm9pZCAwIT09ZS5zaXplJiYodGhpcy5iYXNlU2l6ZT1lLnNpemUpLHZvaWQgMCE9PWUudmFsdWUmJihlLnZhbHVlPXBhcnNlRmxvYXQoZS52YWx1ZSkpLCJudW1iZXIiPT10eXBlb2YgZS5ncm91cHx8InN0cmluZyI9PXR5cGVvZiBlLmdyb3VwJiYiIiE9ZS5ncm91cCl7dmFyIG89dGhpcy5ncm91cGxpc3QuZ2V0KGUuZ3JvdXApO0IuZGVlcEV4dGVuZCh0aGlzLm9wdGlvbnMsbyksdGhpcy5vcHRpb25zLmNvbG9yPUIucGFyc2VDb2xvcih0aGlzLm9wdGlvbnMuY29sb3IpfWlmKHQucGFyc2VPcHRpb25zKHRoaXMub3B0aW9ucyxlLCEwLHRoaXMuZ2xvYmFsT3B0aW9ucyksdm9pZCAwIT09dGhpcy5vcHRpb25zLmltYWdlKXtpZighdGhpcy5pbWFnZWxpc3QpdGhyb3ciTm8gaW1hZ2VsaXN0IHByb3ZpZGVkIjt0aGlzLmltYWdlT2JqPXRoaXMuaW1hZ2VsaXN0LmxvYWQodGhpcy5vcHRpb25zLmltYWdlLHRoaXMub3B0aW9ucy5icm9rZW5JbWFnZSx0aGlzLmlkKX1yZXR1cm4gdGhpcy51cGRhdGVMYWJlbE1vZHVsZSgpLHRoaXMudXBkYXRlU2hhcGUoaSksdm9pZCAwIT09ZS5oaWRkZW58fHZvaWQgMCE9PWUucGh5c2ljcz8hMDohMX19fSx7a2V5OiJ1cGRhdGVMYWJlbE1vZHVsZSIsdmFsdWU6ZnVuY3Rpb24oKXsodm9pZCAwPT09dGhpcy5vcHRpb25zLmxhYmVsfHxudWxsPT09dGhpcy5vcHRpb25zLmxhYmVsKSYmKHRoaXMub3B0aW9ucy5sYWJlbD0iIiksdGhpcy5sYWJlbE1vZHVsZS5zZXRPcHRpb25zKHRoaXMub3B0aW9ucywhMCksdm9pZCAwIT09dGhpcy5sYWJlbE1vZHVsZS5iYXNlU2l6ZSYmKHRoaXMuYmFzZUZvbnRTaXplPXRoaXMubGFiZWxNb2R1bGUuYmFzZVNpemUpfX0se2tleToidXBkYXRlU2hhcGUiLHZhbHVlOmZ1bmN0aW9uKHQpe2lmKHQ9PT10aGlzLm9wdGlvbnMuc2hhcGUmJnRoaXMuc2hhcGUpdGhpcy5zaGFwZS5zZXRPcHRpb25zKHRoaXMub3B0aW9ucyx0aGlzLmltYWdlT2JqKTtlbHNlIHN3aXRjaCh0aGlzLm9wdGlvbnMuc2hhcGUpe2Nhc2UiYm94Ijp0aGlzLnNoYXBlPW5ldyBkWyJkZWZhdWx0Il0odGhpcy5vcHRpb25zLHRoaXMuYm9keSx0aGlzLmxhYmVsTW9kdWxlKTticmVhaztjYXNlImNpcmNsZSI6dGhpcy5zaGFwZT1uZXcgdVsiZGVmYXVsdCJdKHRoaXMub3B0aW9ucyx0aGlzLmJvZHksdGhpcy5sYWJlbE1vZHVsZSk7YnJlYWs7Y2FzZSJjaXJjdWxhckltYWdlIjp0aGlzLnNoYXBlPW5ldyBwWyJkZWZhdWx0Il0odGhpcy5vcHRpb25zLHRoaXMuYm9keSx0aGlzLmxhYmVsTW9kdWxlLHRoaXMuaW1hZ2VPYmopO2JyZWFrO2Nhc2UiZGF0YWJhc2UiOnRoaXMuc2hhcGU9bmV3IG1bImRlZmF1bHQiXSh0aGlzLm9wdGlvbnMsdGhpcy5ib2R5LHRoaXMubGFiZWxNb2R1bGUpO2JyZWFrO2Nhc2UiZGlhbW9uZCI6dGhpcy5zaGFwZT1uZXcgZ1siZGVmYXVsdCJdKHRoaXMub3B0aW9ucyx0aGlzLmJvZHksdGhpcy5sYWJlbE1vZHVsZSk7YnJlYWs7Y2FzZSJkb3QiOnRoaXMuc2hhcGU9bmV3IGJbImRlZmF1bHQiXSh0aGlzLm9wdGlvbnMsdGhpcy5ib2R5LHRoaXMubGFiZWxNb2R1bGUpO2JyZWFrO2Nhc2UiZWxsaXBzZSI6dGhpcy5zaGFwZT1uZXcgX1siZGVmYXVsdCJdKHRoaXMub3B0aW9ucyx0aGlzLmJvZHksdGhpcy5sYWJlbE1vZHVsZSk7YnJlYWs7Y2FzZSJpY29uIjp0aGlzLnNoYXBlPW5ldyBrWyJkZWZhdWx0Il0odGhpcy5vcHRpb25zLHRoaXMuYm9keSx0aGlzLmxhYmVsTW9kdWxlKTticmVhaztjYXNlImltYWdlIjp0aGlzLnNoYXBlPW5ldyBNWyJkZWZhdWx0Il0odGhpcy5vcHRpb25zLHRoaXMuYm9keSx0aGlzLmxhYmVsTW9kdWxlLHRoaXMuaW1hZ2VPYmopO2JyZWFrO2Nhc2Uic3F1YXJlIjp0aGlzLnNoYXBlPW5ldyBDWyJkZWZhdWx0Il0odGhpcy5vcHRpb25zLHRoaXMuYm9keSx0aGlzLmxhYmVsTW9kdWxlKTticmVhaztjYXNlInN0YXIiOnRoaXMuc2hhcGU9bmV3IEVbImRlZmF1bHQiXSh0aGlzLm9wdGlvbnMsdGhpcy5ib2R5LHRoaXMubGFiZWxNb2R1bGUpO2JyZWFrO2Nhc2UidGV4dCI6dGhpcy5zaGFwZT1uZXcgUFsiZGVmYXVsdCJdKHRoaXMub3B0aW9ucyx0aGlzLmJvZHksdGhpcy5sYWJlbE1vZHVsZSk7YnJlYWs7Y2FzZSJ0cmlhbmdsZSI6dGhpcy5zaGFwZT1uZXcgTlsiZGVmYXVsdCJdKHRoaXMub3B0aW9ucyx0aGlzLmJvZHksdGhpcy5sYWJlbE1vZHVsZSk7YnJlYWs7Y2FzZSJ0cmlhbmdsZURvd24iOnRoaXMuc2hhcGU9bmV3IExbImRlZmF1bHQiXSh0aGlzLm9wdGlvbnMsdGhpcy5ib2R5LHRoaXMubGFiZWxNb2R1bGUpO2JyZWFrO2RlZmF1bHQ6dGhpcy5zaGFwZT1uZXcgX1siZGVmYXVsdCJdKHRoaXMub3B0aW9ucyx0aGlzLmJvZHksdGhpcy5sYWJlbE1vZHVsZSl9dGhpcy5fcmVzZXQoKX19LHtrZXk6InNlbGVjdCIsdmFsdWU6ZnVuY3Rpb24oKXt0aGlzLnNlbGVjdGVkPSEwLHRoaXMuX3Jlc2V0KCl9fSx7a2V5OiJ1bnNlbGVjdCIsdmFsdWU6ZnVuY3Rpb24oKXt0aGlzLnNlbGVjdGVkPSExLHRoaXMuX3Jlc2V0KCl9fSx7a2V5OiJfcmVzZXQiLHZhbHVlOmZ1bmN0aW9uKCl7dGhpcy5zaGFwZS53aWR0aD12b2lkIDAsdGhpcy5zaGFwZS5oZWlnaHQ9dm9pZCAwfX0se2tleToiZ2V0VGl0bGUiLHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMub3B0aW9ucy50aXRsZX19LHtrZXk6ImRpc3RhbmNlVG9Cb3JkZXIiLHZhbHVlOmZ1bmN0aW9uKHQsZSl7cmV0dXJuIHRoaXMuc2hhcGUuZGlzdGFuY2VUb0JvcmRlcih0LGUpfX0se2tleToiaXNGaXhlZCIsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5vcHRpb25zLmZpeGVkLngmJnRoaXMub3B0aW9ucy5maXhlZC55fX0se2tleToiaXNTZWxlY3RlZCIsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5zZWxlY3RlZH19LHtrZXk6ImdldFZhbHVlIix2YWx1ZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLm9wdGlvbnMudmFsdWV9fSx7a2V5OiJzZXRWYWx1ZVJhbmdlIix2YWx1ZTpmdW5jdGlvbih0LGUsaSl7aWYodm9pZCAwIT09dGhpcy5vcHRpb25zLnZhbHVlKXt2YXIgbz10aGlzLm9wdGlvbnMuc2NhbGluZy5jdXN0b21TY2FsaW5nRnVuY3Rpb24odCxlLGksdGhpcy5vcHRpb25zLnZhbHVlKSxuPXRoaXMub3B0aW9ucy5zY2FsaW5nLm1heC10aGlzLm9wdGlvbnMuc2NhbGluZy5taW47aWYodGhpcy5vcHRpb25zLnNjYWxpbmcubGFiZWwuZW5hYmxlZD09PSEwKXt2YXIgcz10aGlzLm9wdGlvbnMuc2NhbGluZy5sYWJlbC5tYXgtdGhpcy5vcHRpb25zLnNjYWxpbmcubGFiZWwubWluO3RoaXMub3B0aW9ucy5mb250LnNpemU9dGhpcy5vcHRpb25zLnNjYWxpbmcubGFiZWwubWluK28qc310aGlzLm9wdGlvbnMuc2l6ZT10aGlzLm9wdGlvbnMuc2NhbGluZy5taW4rbypufWVsc2UgdGhpcy5vcHRpb25zLnNpemU9dGhpcy5iYXNlU2l6ZSx0aGlzLm9wdGlvbnMuZm9udC5zaXplPXRoaXMuYmFzZUZvbnRTaXplO3RoaXMudXBkYXRlTGFiZWxNb2R1bGUoKX19LHtrZXk6ImRyYXciLHZhbHVlOmZ1bmN0aW9uKHQpe3RoaXMuc2hhcGUuZHJhdyh0LHRoaXMueCx0aGlzLnksdGhpcy5zZWxlY3RlZCx0aGlzLmhvdmVyKX19LHtrZXk6InVwZGF0ZUJvdW5kaW5nQm94Iix2YWx1ZTpmdW5jdGlvbih0KXt0aGlzLnNoYXBlLnVwZGF0ZUJvdW5kaW5nQm94KHRoaXMueCx0aGlzLnksdCl9fSx7a2V5OiJyZXNpemUiLHZhbHVlOmZ1bmN0aW9uKHQpe3RoaXMuc2hhcGUucmVzaXplKHQsdGhpcy5zZWxlY3RlZCl9fSx7a2V5OiJpc092ZXJsYXBwaW5nV2l0aCIsdmFsdWU6ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuc2hhcGUubGVmdDx0LnJpZ2h0JiZ0aGlzLnNoYXBlLmxlZnQrdGhpcy5zaGFwZS53aWR0aD50LmxlZnQmJnRoaXMuc2hhcGUudG9wPHQuYm90dG9tJiZ0aGlzLnNoYXBlLnRvcCt0aGlzLnNoYXBlLmhlaWdodD50LnRvcH19LHtrZXk6ImlzQm91bmRpbmdCb3hPdmVybGFwcGluZ1dpdGgiLHZhbHVlOmZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLnNoYXBlLmJvdW5kaW5nQm94LmxlZnQ8dC5yaWdodCYmdGhpcy5zaGFwZS5ib3VuZGluZ0JveC5yaWdodD50LmxlZnQmJnRoaXMuc2hhcGUuYm91bmRpbmdCb3gudG9wPHQuYm90dG9tJiZ0aGlzLnNoYXBlLmJvdW5kaW5nQm94LmJvdHRvbT50LnRvcH19XSxbe2tleToicGFyc2VPcHRpb25zIix2YWx1ZTpmdW5jdGlvbih0LGUpe3ZhciBpPWFyZ3VtZW50cy5sZW5ndGg8PTJ8fHZvaWQgMD09PWFyZ3VtZW50c1syXT8hMTphcmd1bWVudHNbMl0sbz1hcmd1bWVudHMubGVuZ3RoPD0zfHx2b2lkIDA9PT1hcmd1bWVudHNbM10/e306YXJndW1lbnRzWzNdLG49WyJjb2xvciIsImZvbnQiLCJmaXhlZCIsInNoYWRvdyJdO2lmKEIuc2VsZWN0aXZlTm90RGVlcEV4dGVuZChuLHQsZSxpKSxCLm1lcmdlT3B0aW9ucyh0LGUsInNoYWRvdyIsaSxvKSx2b2lkIDAhPT1lLmNvbG9yJiZudWxsIT09ZS5jb2xvcil7dmFyIHM9Qi5wYXJzZUNvbG9yKGUuY29sb3IpO0IuZmlsbElmRGVmaW5lZCh0LmNvbG9yLHMpfWVsc2UgaT09PSEwJiZudWxsPT09ZS5jb2xvciYmKHQuY29sb3I9Qi5icmlkZ2VPYmplY3Qoby5jb2xvcikpO3ZvaWQgMCE9PWUuZml4ZWQmJm51bGwhPT1lLmZpeGVkJiYoImJvb2xlYW4iPT10eXBlb2YgZS5maXhlZD8odC5maXhlZC54PWUuZml4ZWQsdC5maXhlZC55PWUuZml4ZWQpOih2b2lkIDAhPT1lLmZpeGVkLngmJiJib29sZWFuIj09dHlwZW9mIGUuZml4ZWQueCYmKHQuZml4ZWQueD1lLmZpeGVkLngpLHZvaWQgMCE9PWUuZml4ZWQueSYmImJvb2xlYW4iPT10eXBlb2YgZS5maXhlZC55JiYodC5maXhlZC55PWUuZml4ZWQueSkpKSx2b2lkIDAhPT1lLmZvbnQmJm51bGwhPT1lLmZvbnQ/YVsiZGVmYXVsdCJdLnBhcnNlT3B0aW9ucyh0LmZvbnQsZSk6aT09PSEwJiZudWxsPT09ZS5mb250JiYodC5mb250PUIuYnJpZGdlT2JqZWN0KG8uZm9udCkpLHZvaWQgMCE9PWUuc2NhbGluZyYmQi5tZXJnZU9wdGlvbnModC5zY2FsaW5nLGUuc2NhbGluZywibGFiZWwiLGksby5zY2FsaW5nKX19XSksdH0oKTtlWyJkZWZhdWx0Il09Rix0LmV4cG9ydHM9ZVsiZGVmYXVsdCJdfSxmdW5jdGlvbih0LGUsaSl7ZnVuY3Rpb24gbyh0LGUpe2lmKCEodCBpbnN0YW5jZW9mIGUpKXRocm93IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCBjYWxsIGEgY2xhc3MgYXMgYSBmdW5jdGlvbiIpfU9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt2YXIgbj1mdW5jdGlvbigpe2Z1bmN0aW9uIHQodCxlKXt2YXIgaT1bXSxvPSEwLG49ITEscz12b2lkIDA7dHJ5e2Zvcih2YXIgcixhPXRbU3ltYm9sLml0ZXJhdG9yXSgpOyEobz0ocj1hLm5leHQoKSkuZG9uZSkmJihpLnB1c2goci52YWx1ZSksIWV8fGkubGVuZ3RoIT09ZSk7bz0hMCk7fWNhdGNoKGgpe249ITAscz1ofWZpbmFsbHl7dHJ5eyFvJiZhWyJyZXR1cm4iXSYmYVsicmV0dXJuIl0oKX1maW5hbGx5e2lmKG4pdGhyb3cgc319cmV0dXJuIGl9cmV0dXJuIGZ1bmN0aW9uKGUsaSl7aWYoQXJyYXkuaXNBcnJheShlKSlyZXR1cm4gZTtpZihTeW1ib2wuaXRlcmF0b3IgaW4gT2JqZWN0KGUpKXJldHVybiB0KGUsaSk7dGhyb3cgbmV3IFR5cGVFcnJvcigiSW52YWxpZCBhdHRlbXB0IHRvIGRlc3RydWN0dXJlIG5vbi1pdGVyYWJsZSBpbnN0YW5jZSIpfX0oKSxzPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCh0LGUpe2Zvcih2YXIgaT0wO2k8ZS5sZW5ndGg7aSsrKXt2YXIgbz1lW2ldO28uZW51bWVyYWJsZT1vLmVudW1lcmFibGV8fCExLG8uY29uZmlndXJhYmxlPSEwLCJ2YWx1ZSJpbiBvJiYoby53cml0YWJsZT0hMCksT2JqZWN0LmRlZmluZVByb3BlcnR5KHQsby5rZXksbyl9fXJldHVybiBmdW5jdGlvbihlLGksbyl7cmV0dXJuIGkmJnQoZS5wcm90b3R5cGUsaSksbyYmdChlLG8pLGV9fSgpLHI9aSgxKSxhPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdChlLGkpe28odGhpcyx0KSx0aGlzLmJvZHk9ZSx0aGlzLnBvaW50VG9TZWxmPSExLHRoaXMuYmFzZVNpemU9dm9pZCAwLHRoaXMuZm9udE9wdGlvbnM9e30sdGhpcy5zZXRPcHRpb25zKGkpLHRoaXMuc2l6ZT17dG9wOjAsbGVmdDowLHdpZHRoOjAsaGVpZ2h0OjAseUxpbmU6MH19cmV0dXJuIHModCxbe2tleToic2V0T3B0aW9ucyIsdmFsdWU6ZnVuY3Rpb24oZSl7dmFyIGk9YXJndW1lbnRzLmxlbmd0aDw9MXx8dm9pZCAwPT09YXJndW1lbnRzWzFdPyExOmFyZ3VtZW50c1sxXTt0aGlzLm5vZGVPcHRpb25zPWUsdGhpcy5mb250T3B0aW9ucz1yLmRlZXBFeHRlbmQoe30sZS5mb250LCEwKSx2b2lkIDAhPT1lLmxhYmVsJiYodGhpcy5sYWJlbERpcnR5PSEwKSx2b2lkIDAhPT1lLmZvbnQmJih0LnBhcnNlT3B0aW9ucyh0aGlzLmZvbnRPcHRpb25zLGUsaSksInN0cmluZyI9PXR5cGVvZiBlLmZvbnQ/dGhpcy5iYXNlU2l6ZT10aGlzLmZvbnRPcHRpb25zLnNpemU6Im9iamVjdCI9PXR5cGVvZiBlLmZvbnQmJnZvaWQgMCE9PWUuZm9udC5zaXplJiYodGhpcy5iYXNlU2l6ZT1lLmZvbnQuc2l6ZSkpfX0se2tleToiZHJhdyIsdmFsdWU6ZnVuY3Rpb24odCxlLGksbyl7dmFyIG49YXJndW1lbnRzLmxlbmd0aDw9NHx8dm9pZCAwPT09YXJndW1lbnRzWzRdPyJtaWRkbGUiOmFyZ3VtZW50c1s0XTtpZih2b2lkIDAhPT10aGlzLm5vZGVPcHRpb25zLmxhYmVsKXt2YXIgcz10aGlzLmZvbnRPcHRpb25zLnNpemUqdGhpcy5ib2R5LnZpZXcuc2NhbGU7dGhpcy5ub2RlT3B0aW9ucy5sYWJlbCYmczx0aGlzLm5vZGVPcHRpb25zLnNjYWxpbmcubGFiZWwuZHJhd1RocmVzaG9sZC0xfHwodGhpcy5jYWxjdWxhdGVMYWJlbFNpemUodCxvLGUsaSxuKSx0aGlzLl9kcmF3QmFja2dyb3VuZCh0KSx0aGlzLl9kcmF3VGV4dCh0LG8sZSxpLG4pKX19fSx7a2V5OiJfZHJhd0JhY2tncm91bmQiLHZhbHVlOmZ1bmN0aW9uKHQpe2lmKHZvaWQgMCE9PXRoaXMuZm9udE9wdGlvbnMuYmFja2dyb3VuZCYmIm5vbmUiIT09dGhpcy5mb250T3B0aW9ucy5iYWNrZ3JvdW5kKXt0LmZpbGxTdHlsZT10aGlzLmZvbnRPcHRpb25zLmJhY2tncm91bmQ7dmFyIGU9Mjtzd2l0Y2godGhpcy5mb250T3B0aW9ucy5hbGlnbil7Y2FzZSJtaWRkbGUiOnQuZmlsbFJlY3QoLjUqLXRoaXMuc2l6ZS53aWR0aCwuNSotdGhpcy5zaXplLmhlaWdodCx0aGlzLnNpemUud2lkdGgsdGhpcy5zaXplLmhlaWdodCk7YnJlYWs7Y2FzZSJ0b3AiOnQuZmlsbFJlY3QoLjUqLXRoaXMuc2l6ZS53aWR0aCwtKHRoaXMuc2l6ZS5oZWlnaHQrZSksdGhpcy5zaXplLndpZHRoLHRoaXMuc2l6ZS5oZWlnaHQpO2JyZWFrO2Nhc2UiYm90dG9tIjp0LmZpbGxSZWN0KC41Ki10aGlzLnNpemUud2lkdGgsZSx0aGlzLnNpemUud2lkdGgsdGhpcy5zaXplLmhlaWdodCk7YnJlYWs7ZGVmYXVsdDp0LmZpbGxSZWN0KHRoaXMuc2l6ZS5sZWZ0LHRoaXMuc2l6ZS50b3AtLjUqZSx0aGlzLnNpemUud2lkdGgsdGhpcy5zaXplLmhlaWdodCl9fX19LHtrZXk6Il9kcmF3VGV4dCIsdmFsdWU6ZnVuY3Rpb24odCxlLGksbyl7dmFyIHM9YXJndW1lbnRzLmxlbmd0aDw9NHx8dm9pZCAwPT09YXJndW1lbnRzWzRdPyJtaWRkbGUiOmFyZ3VtZW50c1s0XSxyPXRoaXMuZm9udE9wdGlvbnMuc2l6ZSxhPXIqdGhpcy5ib2R5LnZpZXcuc2NhbGU7YT49dGhpcy5ub2RlT3B0aW9ucy5zY2FsaW5nLmxhYmVsLm1heFZpc2libGUmJihyPU51bWJlcih0aGlzLm5vZGVPcHRpb25zLnNjYWxpbmcubGFiZWwubWF4VmlzaWJsZSkvdGhpcy5ib2R5LnZpZXcuc2NhbGUpO3ZhciBoPXRoaXMuc2l6ZS55TGluZSxkPXRoaXMuX2dldENvbG9yKGEpLGw9bihkLDIpLHU9bFswXSxjPWxbMV0scD10aGlzLl9zZXRBbGlnbm1lbnQodCxpLGgscyksZj1uKHAsMik7aT1mWzBdLGg9ZlsxXSx0LmZvbnQ9KGUmJnRoaXMubm9kZU9wdGlvbnMubGFiZWxIaWdobGlnaHRCb2xkPyJib2xkICI6IiIpK3IrInB4ICIrdGhpcy5mb250T3B0aW9ucy5mYWNlLHQuZmlsbFN0eWxlPXUsdC50ZXh0QWxpZ249ImNlbnRlciIsdGhpcy5mb250T3B0aW9ucy5zdHJva2VXaWR0aD4wJiYodC5saW5lV2lkdGg9dGhpcy5mb250T3B0aW9ucy5zdHJva2VXaWR0aCx0LnN0cm9rZVN0eWxlPWMsdC5saW5lSm9pbj0icm91bmQiKTtmb3IodmFyIG09MDttPHRoaXMubGluZUNvdW50O20rKyl0aGlzLmZvbnRPcHRpb25zLnN0cm9rZVdpZHRoPjAmJnQuc3Ryb2tlVGV4dCh0aGlzLmxpbmVzW21dLGksaCksdC5maWxsVGV4dCh0aGlzLmxpbmVzW21dLGksaCksaCs9cn19LHtrZXk6Il9zZXRBbGlnbm1lbnQiLHZhbHVlOmZ1bmN0aW9uKHQsZSxpLG8pe2lmKCJob3Jpem9udGFsIiE9PXRoaXMuZm9udE9wdGlvbnMuYWxpZ24mJnRoaXMucG9pbnRUb1NlbGY9PT0hMSl7ZT0wLGk9MDt2YXIgbj0yOyJ0b3AiPT09dGhpcy5mb250T3B0aW9ucy5hbGlnbj8odC50ZXh0QmFzZWxpbmU9ImFscGhhYmV0aWMiLGktPTIqbik6ImJvdHRvbSI9PT10aGlzLmZvbnRPcHRpb25zLmFsaWduPyh0LnRleHRCYXNlbGluZT0iaGFuZ2luZyIsaSs9MipuKTp0LnRleHRCYXNlbGluZT0ibWlkZGxlIn1lbHNlIHQudGV4dEJhc2VsaW5lPW87cmV0dXJuW2UsaV19fSx7a2V5OiJfZ2V0Q29sb3IiLHZhbHVlOmZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMuZm9udE9wdGlvbnMuY29sb3J8fCIjMDAwMDAwIixpPXRoaXMuZm9udE9wdGlvbnMuc3Ryb2tlQ29sb3J8fCIjZmZmZmZmIjtpZih0PD10aGlzLm5vZGVPcHRpb25zLnNjYWxpbmcubGFiZWwuZHJhd1RocmVzaG9sZCl7dmFyIG89TWF0aC5tYXgoMCxNYXRoLm1pbigxLDEtKHRoaXMubm9kZU9wdGlvbnMuc2NhbGluZy5sYWJlbC5kcmF3VGhyZXNob2xkLXQpKSk7ZT1yLm92ZXJyaWRlT3BhY2l0eShlLG8pLGk9ci5vdmVycmlkZU9wYWNpdHkoaSxvKX1yZXR1cm5bZSxpXX19LHtrZXk6ImdldFRleHRTaXplIix2YWx1ZTpmdW5jdGlvbih0KXt2YXIgZT1hcmd1bWVudHMubGVuZ3RoPD0xfHx2b2lkIDA9PT1hcmd1bWVudHNbMV0/ITE6YXJndW1lbnRzWzFdLGk9e3dpZHRoOnRoaXMuX3Byb2Nlc3NMYWJlbCh0LGUpLGhlaWdodDp0aGlzLmZvbnRPcHRpb25zLnNpemUqdGhpcy5saW5lQ291bnQsbGluZUNvdW50OnRoaXMubGluZUNvdW50fTtyZXR1cm4gaX19LHtrZXk6ImNhbGN1bGF0ZUxhYmVsU2l6ZSIsdmFsdWU6ZnVuY3Rpb24odCxlKXt2YXIgaT1hcmd1bWVudHMubGVuZ3RoPD0yfHx2b2lkIDA9PT1hcmd1bWVudHNbMl0/MDphcmd1bWVudHNbMl0sbz1hcmd1bWVudHMubGVuZ3RoPD0zfHx2b2lkIDA9PT1hcmd1bWVudHNbM10/MDphcmd1bWVudHNbM10sbj1hcmd1bWVudHMubGVuZ3RoPD00fHx2b2lkIDA9PT1hcmd1bWVudHNbNF0/Im1pZGRsZSI6YXJndW1lbnRzWzRdO3RoaXMubGFiZWxEaXJ0eT09PSEwJiYodGhpcy5zaXplLndpZHRoPXRoaXMuX3Byb2Nlc3NMYWJlbCh0LGUpKSx0aGlzLnNpemUuaGVpZ2h0PXRoaXMuZm9udE9wdGlvbnMuc2l6ZSp0aGlzLmxpbmVDb3VudCx0aGlzLnNpemUubGVmdD1pLS41KnRoaXMuc2l6ZS53aWR0aCx0aGlzLnNpemUudG9wPW8tLjUqdGhpcy5zaXplLmhlaWdodCx0aGlzLnNpemUueUxpbmU9bysuNSooMS10aGlzLmxpbmVDb3VudCkqdGhpcy5mb250T3B0aW9ucy5zaXplLCJoYW5naW5nIj09PW4mJih0aGlzLnNpemUudG9wKz0uNSp0aGlzLmZvbnRPcHRpb25zLnNpemUsdGhpcy5zaXplLnRvcCs9NCx0aGlzLnNpemUueUxpbmUrPTQpLHRoaXMubGFiZWxEaXJ0eT0hMX19LHtrZXk6Il9wcm9jZXNzTGFiZWwiLHZhbHVlOmZ1bmN0aW9uKHQsZSl7dmFyIGk9MCxvPVsiIl0sbj0wO2lmKHZvaWQgMCE9PXRoaXMubm9kZU9wdGlvbnMubGFiZWwpe289U3RyaW5nKHRoaXMubm9kZU9wdGlvbnMubGFiZWwpLnNwbGl0KCJcbiIpLG49by5sZW5ndGgsdC5mb250PShlJiZ0aGlzLm5vZGVPcHRpb25zLmxhYmVsSGlnaGxpZ2h0Qm9sZD8iYm9sZCAiOiIiKSt0aGlzLmZvbnRPcHRpb25zLnNpemUrInB4ICIrdGhpcy5mb250T3B0aW9ucy5mYWNlLGk9dC5tZWFzdXJlVGV4dChvWzBdKS53aWR0aDtmb3IodmFyIHM9MTtuPnM7cysrKXt2YXIgcj10Lm1lYXN1cmVUZXh0KG9bc10pLndpZHRoO2k9cj5pP3I6aX19cmV0dXJuIHRoaXMubGluZXM9byx0aGlzLmxpbmVDb3VudD1uLGl9fV0sW3trZXk6InBhcnNlT3B0aW9ucyIsdmFsdWU6ZnVuY3Rpb24odCxlKXt2YXIgaT1hcmd1bWVudHMubGVuZ3RoPD0yfHx2b2lkIDA9PT1hcmd1bWVudHNbMl0/ITE6YXJndW1lbnRzWzJdO2lmKCJzdHJpbmciPT10eXBlb2YgZS5mb250KXt2YXIgbz1lLmZvbnQuc3BsaXQoIiAiKTt0LnNpemU9b1swXS5yZXBsYWNlKCJweCIsIiIpLHQuZmFjZT1vWzFdLHQuY29sb3I9b1syXX1lbHNlIm9iamVjdCI9PXR5cGVvZiBlLmZvbnQmJnIuZmlsbElmRGVmaW5lZCh0LGUuZm9udCxpKTt0LnNpemU9TnVtYmVyKHQuc2l6ZSl9fV0pLHR9KCk7ZVsiZGVmYXVsdCJdPWEsdC5leHBvcnRzPWVbImRlZmF1bHQiXX0sZnVuY3Rpb24odCxlLGkpe2Z1bmN0aW9uIG8odCl7cmV0dXJuIHQmJnQuX19lc01vZHVsZT90OnsiZGVmYXVsdCI6dH19ZnVuY3Rpb24gbih0LGUpe2lmKCEodCBpbnN0YW5jZW9mIGUpKXRocm93IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCBjYWxsIGEgY2xhc3MgYXMgYSBmdW5jdGlvbiIpfWZ1bmN0aW9uIHModCxlKXtpZigiZnVuY3Rpb24iIT10eXBlb2YgZSYmbnVsbCE9PWUpdGhyb3cgbmV3IFR5cGVFcnJvcigiU3VwZXIgZXhwcmVzc2lvbiBtdXN0IGVpdGhlciBiZSBudWxsIG9yIGEgZnVuY3Rpb24sIG5vdCAiK3R5cGVvZiBlKTt0LnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKGUmJmUucHJvdG90eXBlLHtjb25zdHJ1Y3Rvcjp7dmFsdWU6dCxlbnVtZXJhYmxlOiExLHdyaXRhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH19KSxlJiYoT2JqZWN0LnNldFByb3RvdHlwZU9mP09iamVjdC5zZXRQcm90b3R5cGVPZih0LGUpOnQuX19wcm90b19fPWUpfU9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt2YXIgcj1mdW5jdGlvbigpe2Z1bmN0aW9uIHQodCxlKXtmb3IodmFyIGk9MDtpPGUubGVuZ3RoO2krKyl7dmFyIG89ZVtpXTtvLmVudW1lcmFibGU9by5lbnVtZXJhYmxlfHwhMSxvLmNvbmZpZ3VyYWJsZT0hMCwidmFsdWUiaW4gbyYmKG8ud3JpdGFibGU9ITApLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LG8ua2V5LG8pfX1yZXR1cm4gZnVuY3Rpb24oZSxpLG8pe3JldHVybiBpJiZ0KGUucHJvdG90eXBlLGkpLG8mJnQoZSxvKSxlfX0oKSxhPWZ1bmN0aW9uKHQsZSxpKXtmb3IodmFyIG89ITA7bzspe3ZhciBuPXQscz1lLHI9aTtvPSExLG51bGw9PT1uJiYobj1GdW5jdGlvbi5wcm90b3R5cGUpO3ZhciBhPU9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IobixzKTtpZih2b2lkIDAhPT1hKXtpZigidmFsdWUiaW4gYSlyZXR1cm4gYS52YWx1ZTt2YXIgaD1hLmdldDtpZih2b2lkIDA9PT1oKXJldHVybjtyZXR1cm4gaC5jYWxsKHIpfXZhciBkPU9iamVjdC5nZXRQcm90b3R5cGVPZihuKTtpZihudWxsPT09ZClyZXR1cm47dD1kLGU9cyxpPXIsbz0hMCxhPWQ9dm9pZCAwfX0saD1pKDY0KSxkPW8oaCksbD1mdW5jdGlvbih0KXtmdW5jdGlvbiBlKHQsaSxvKXtuKHRoaXMsZSksYShPYmplY3QuZ2V0UHJvdG90eXBlT2YoZS5wcm90b3R5cGUpLCJjb25zdHJ1Y3RvciIsdGhpcykuY2FsbCh0aGlzLHQsaSxvKX1yZXR1cm4gcyhlLHQpLHIoZSxbe2tleToicmVzaXplIix2YWx1ZTpmdW5jdGlvbih0LGUpe2lmKHZvaWQgMD09PXRoaXMud2lkdGgpe3ZhciBpPTUsbz10aGlzLmxhYmVsTW9kdWxlLmdldFRleHRTaXplKHQsZSk7dGhpcy53aWR0aD1vLndpZHRoKzIqaSx0aGlzLmhlaWdodD1vLmhlaWdodCsyKmksdGhpcy5yYWRpdXM9LjUqdGhpcy53aWR0aH19fSx7a2V5OiJkcmF3Iix2YWx1ZTpmdW5jdGlvbih0LGUsaSxvLG4pe3RoaXMucmVzaXplKHQsbyksdGhpcy5sZWZ0PWUtdGhpcy53aWR0aC8yLHRoaXMudG9wPWktdGhpcy5oZWlnaHQvMjt2YXIgcz10aGlzLm9wdGlvbnMuYm9yZGVyV2lkdGgscj10aGlzLm9wdGlvbnMuYm9yZGVyV2lkdGhTZWxlY3RlZHx8Mip0aGlzLm9wdGlvbnMuYm9yZGVyV2lkdGg7dC5zdHJva2VTdHlsZT1vP3RoaXMub3B0aW9ucy5jb2xvci5oaWdobGlnaHQuYm9yZGVyOm4/dGhpcy5vcHRpb25zLmNvbG9yLmhvdmVyLmJvcmRlcjp0aGlzLm9wdGlvbnMuY29sb3IuYm9yZGVyLHQubGluZVdpZHRoPW8/cjpzLHQubGluZVdpZHRoLz10aGlzLmJvZHkudmlldy5zY2FsZSx0LmxpbmVXaWR0aD1NYXRoLm1pbih0aGlzLndpZHRoLHQubGluZVdpZHRoKSx0LmZpbGxTdHlsZT1vP3RoaXMub3B0aW9ucy5jb2xvci5oaWdobGlnaHQuYmFja2dyb3VuZDpuP3RoaXMub3B0aW9ucy5jb2xvci5ob3Zlci5iYWNrZ3JvdW5kOnRoaXMub3B0aW9ucy5jb2xvci5iYWNrZ3JvdW5kO3ZhciBhPXRoaXMub3B0aW9ucy5zaGFwZVByb3BlcnRpZXMuYm9yZGVyUmFkaXVzO3Qucm91bmRSZWN0KHRoaXMubGVmdCx0aGlzLnRvcCx0aGlzLndpZHRoLHRoaXMuaGVpZ2h0LGEpLHRoaXMuZW5hYmxlU2hhZG93KHQpLHQuZmlsbCgpLHRoaXMuZGlzYWJsZVNoYWRvdyh0KSx0LnNhdmUoKSx0aGlzLmVuYWJsZUJvcmRlckRhc2hlcyh0KSx0LnN0cm9rZSgpLHRoaXMuZGlzYWJsZUJvcmRlckRhc2hlcyh0KSx0LnJlc3RvcmUoKSx0aGlzLnVwZGF0ZUJvdW5kaW5nQm94KGUsaSx0LG8pLHRoaXMubGFiZWxNb2R1bGUuZHJhdyh0LGUsaSxvKX19LHtrZXk6InVwZGF0ZUJvdW5kaW5nQm94Iix2YWx1ZTpmdW5jdGlvbih0LGUsaSxvKXt0aGlzLnJlc2l6ZShpLG8pLHRoaXMubGVmdD10LS41KnRoaXMud2lkdGgsdGhpcy50b3A9ZS0uNSp0aGlzLmhlaWdodDt2YXIgbj10aGlzLm9wdGlvbnMuc2hhcGVQcm9wZXJ0aWVzLmJvcmRlclJhZGl1czt0aGlzLmJvdW5kaW5nQm94LmxlZnQ9dGhpcy5sZWZ0LW4sdGhpcy5ib3VuZGluZ0JveC50b3A9dGhpcy50b3Atbix0aGlzLmJvdW5kaW5nQm94LmJvdHRvbT10aGlzLnRvcCt0aGlzLmhlaWdodCtuLHRoaXMuYm91bmRpbmdCb3gucmlnaHQ9dGhpcy5sZWZ0K3RoaXMud2lkdGgrbn19LHtrZXk6ImRpc3RhbmNlVG9Cb3JkZXIiLHZhbHVlOmZ1bmN0aW9uKHQsZSl7dGhpcy5yZXNpemUodCk7dmFyIGk9dGhpcy5vcHRpb25zLmJvcmRlcldpZHRoO3JldHVybiBNYXRoLm1pbihNYXRoLmFicyh0aGlzLndpZHRoLzIvTWF0aC5jb3MoZSkpLE1hdGguYWJzKHRoaXMuaGVpZ2h0LzIvTWF0aC5zaW4oZSkpKStpfX1dKSxlfShkWyJkZWZhdWx0Il0pO2VbImRlZmF1bHQiXT1sLHQuZXhwb3J0cz1lWyJkZWZhdWx0Il19LGZ1bmN0aW9uKHQsZSl7ZnVuY3Rpb24gaSh0LGUpe2lmKCEodCBpbnN0YW5jZW9mIGUpKXRocm93IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCBjYWxsIGEgY2xhc3MgYXMgYSBmdW5jdGlvbiIpfU9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt2YXIgbz1mdW5jdGlvbigpe2Z1bmN0aW9uIHQodCxlKXtmb3IodmFyIGk9MDtpPGUubGVuZ3RoO2krKyl7dmFyIG89ZVtpXTtvLmVudW1lcmFibGU9by5lbnVtZXJhYmxlfHwhMSxvLmNvbmZpZ3VyYWJsZT0hMCwidmFsdWUiaW4gbyYmKG8ud3JpdGFibGU9ITApLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LG8ua2V5LG8pfX1yZXR1cm4gZnVuY3Rpb24oZSxpLG8pe3JldHVybiBpJiZ0KGUucHJvdG90eXBlLGkpLG8mJnQoZSxvKSxlfX0oKSxuPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdChlLG8sbil7aSh0aGlzLHQpLHRoaXMuYm9keT1vLHRoaXMubGFiZWxNb2R1bGU9bix0aGlzLnNldE9wdGlvbnMoZSksdGhpcy50b3A9dm9pZCAwLHRoaXMubGVmdD12b2lkIDAsdGhpcy5oZWlnaHQ9dm9pZCAwLHRoaXMud2lkdGg9dm9pZCAwLHRoaXMucmFkaXVzPXZvaWQgMCx0aGlzLmJvdW5kaW5nQm94PXt0b3A6MCxsZWZ0OjAscmlnaHQ6MCxib3R0b206MH19cmV0dXJuIG8odCxbe2tleToic2V0T3B0aW9ucyIsdmFsdWU6ZnVuY3Rpb24odCl7dGhpcy5vcHRpb25zPXR9fSx7a2V5OiJfZGlzdGFuY2VUb0JvcmRlciIsdmFsdWU6ZnVuY3Rpb24odCxlKXt2YXIgaT10aGlzLm9wdGlvbnMuYm9yZGVyV2lkdGg7cmV0dXJuIHRoaXMucmVzaXplKHQpLE1hdGgubWluKE1hdGguYWJzKHRoaXMud2lkdGgvMi9NYXRoLmNvcyhlKSksTWF0aC5hYnModGhpcy5oZWlnaHQvMi9NYXRoLnNpbihlKSkpK2l9fSx7a2V5OiJlbmFibGVTaGFkb3ciLHZhbHVlOmZ1bmN0aW9uKHQpe3RoaXMub3B0aW9ucy5zaGFkb3cuZW5hYmxlZD09PSEwJiYodC5zaGFkb3dDb2xvcj10aGlzLm9wdGlvbnMuc2hhZG93LmNvbG9yLHQuc2hhZG93Qmx1cj10aGlzLm9wdGlvbnMuc2hhZG93LnNpemUsdC5zaGFkb3dPZmZzZXRYPXRoaXMub3B0aW9ucy5zaGFkb3cueCx0LnNoYWRvd09mZnNldFk9dGhpcy5vcHRpb25zLnNoYWRvdy55KX19LHtrZXk6ImRpc2FibGVTaGFkb3ciLHZhbHVlOmZ1bmN0aW9uKHQpe3RoaXMub3B0aW9ucy5zaGFkb3cuZW5hYmxlZD09PSEwJiYodC5zaGFkb3dDb2xvcj0icmdiYSgwLDAsMCwwKSIsdC5zaGFkb3dCbHVyPTAsdC5zaGFkb3dPZmZzZXRYPTAsdC5zaGFkb3dPZmZzZXRZPTApfX0se2tleToiZW5hYmxlQm9yZGVyRGFzaGVzIix2YWx1ZTpmdW5jdGlvbih0KXtpZih0aGlzLm9wdGlvbnMuc2hhcGVQcm9wZXJ0aWVzLmJvcmRlckRhc2hlcyE9PSExKWlmKHZvaWQgMCE9PXQuc2V0TGluZURhc2gpe3ZhciBlPXRoaXMub3B0aW9ucy5zaGFwZVByb3BlcnRpZXMuYm9yZGVyRGFzaGVzO2U9PT0hMCYmKGU9WzUsMTVdKSx0LnNldExpbmVEYXNoKGUpfWVsc2UgY29uc29sZS53YXJuKCJzZXRMaW5lRGFzaCBpcyBub3Qgc3VwcG9ydGVkIGluIHRoaXMgYnJvd3Nlci4gVGhlIGRhc2hlZCBib3JkZXJzIGNhbm5vdCBiZSB1c2VkLiIpLHRoaXMub3B0aW9ucy5zaGFwZVByb3BlcnRpZXMuYm9yZGVyRGFzaGVzPSExfX0se2tleToiZGlzYWJsZUJvcmRlckRhc2hlcyIsdmFsdWU6ZnVuY3Rpb24odCl7dGhpcy5vcHRpb25zLnNoYXBlUHJvcGVydGllcy5ib3JkZXJEYXNoZXMhPT0hMSYmKHZvaWQgMCE9PXQuc2V0TGluZURhc2g/dC5zZXRMaW5lRGFzaChbMF0pOihjb25zb2xlLndhcm4oInNldExpbmVEYXNoIGlzIG5vdCBzdXBwb3J0ZWQgaW4gdGhpcyBicm93c2VyLiBUaGUgZGFzaGVkIGJvcmRlcnMgY2Fubm90IGJlIHVzZWQuIiksdGhpcy5vcHRpb25zLnNoYXBlUHJvcGVydGllcy5ib3JkZXJEYXNoZXM9ITEpKX19XSksdH0oKTtlWyJkZWZhdWx0Il09bix0LmV4cG9ydHM9ZVsiZGVmYXVsdCJdfSxmdW5jdGlvbih0LGUsaSl7ZnVuY3Rpb24gbyh0KXtyZXR1cm4gdCYmdC5fX2VzTW9kdWxlP3Q6eyJkZWZhdWx0Ijp0fX1mdW5jdGlvbiBuKHQsZSl7aWYoISh0IGluc3RhbmNlb2YgZSkpdGhyb3cgbmV3IFR5cGVFcnJvcigiQ2Fubm90IGNhbGwgYSBjbGFzcyBhcyBhIGZ1bmN0aW9uIil9ZnVuY3Rpb24gcyh0LGUpe2lmKCJmdW5jdGlvbiIhPXR5cGVvZiBlJiZudWxsIT09ZSl0aHJvdyBuZXcgVHlwZUVycm9yKCJTdXBlciBleHByZXNzaW9uIG11c3QgZWl0aGVyIGJlIG51bGwgb3IgYSBmdW5jdGlvbiwgbm90ICIrdHlwZW9mIGUpO3QucHJvdG90eXBlPU9iamVjdC5jcmVhdGUoZSYmZS5wcm90b3R5cGUse2NvbnN0cnVjdG9yOnt2YWx1ZTp0LGVudW1lcmFibGU6ITEsd3JpdGFibGU6ITAsY29uZmlndXJhYmxlOiEwfX0pLGUmJihPYmplY3Quc2V0UHJvdG90eXBlT2Y/T2JqZWN0LnNldFByb3RvdHlwZU9mKHQsZSk6dC5fX3Byb3RvX189ZSl9T2JqZWN0LmRlZmluZVByb3BlcnR5KGUsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3ZhciByPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCh0LGUpe2Zvcih2YXIgaT0wO2k8ZS5sZW5ndGg7aSsrKXt2YXIgbz1lW2ldO28uZW51bWVyYWJsZT1vLmVudW1lcmFibGV8fCExLG8uY29uZmlndXJhYmxlPSEwLCJ2YWx1ZSJpbiBvJiYoby53cml0YWJsZT0hMCksT2JqZWN0LmRlZmluZVByb3BlcnR5KHQsby5rZXksbyl9fXJldHVybiBmdW5jdGlvbihlLGksbyl7cmV0dXJuIGkmJnQoZS5wcm90b3R5cGUsaSksbyYmdChlLG8pLGV9fSgpLGE9ZnVuY3Rpb24odCxlLGkpe2Zvcih2YXIgbz0hMDtvOyl7dmFyIG49dCxzPWUscj1pO289ITEsbnVsbD09PW4mJihuPUZ1bmN0aW9uLnByb3RvdHlwZSk7dmFyIGE9T2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihuLHMpO2lmKHZvaWQgMCE9PWEpe2lmKCJ2YWx1ZSJpbiBhKXJldHVybiBhLnZhbHVlO3ZhciBoPWEuZ2V0O2lmKHZvaWQgMD09PWgpcmV0dXJuO3JldHVybiBoLmNhbGwocil9dmFyIGQ9T2JqZWN0LmdldFByb3RvdHlwZU9mKG4pO2lmKG51bGw9PT1kKXJldHVybjt0PWQsZT1zLGk9cixvPSEwLGE9ZD12b2lkIDB9fSxoPWkoNjYpLGQ9byhoKSxsPWZ1bmN0aW9uKHQpe2Z1bmN0aW9uIGUodCxpLG8pe24odGhpcyxlKSxhKE9iamVjdC5nZXRQcm90b3R5cGVPZihlLnByb3RvdHlwZSksImNvbnN0cnVjdG9yIix0aGlzKS5jYWxsKHRoaXMsdCxpLG8pfXJldHVybiBzKGUsdCkscihlLFt7a2V5OiJyZXNpemUiLHZhbHVlOmZ1bmN0aW9uKHQsZSl7aWYodm9pZCAwPT09dGhpcy53aWR0aCl7dmFyIGk9NSxvPXRoaXMubGFiZWxNb2R1bGUuZ2V0VGV4dFNpemUodCxlKSxuPU1hdGgubWF4KG8ud2lkdGgsby5oZWlnaHQpKzIqaTt0aGlzLm9wdGlvbnMuc2l6ZT1uLzIsdGhpcy53aWR0aD1uLHRoaXMuaGVpZ2h0PW4sdGhpcy5yYWRpdXM9LjUqdGhpcy53aWR0aH19fSx7a2V5OiJkcmF3Iix2YWx1ZTpmdW5jdGlvbih0LGUsaSxvLG4pe3RoaXMucmVzaXplKHQsbyksdGhpcy5sZWZ0PWUtdGhpcy53aWR0aC8yLHRoaXMudG9wPWktdGhpcy5oZWlnaHQvMix0aGlzLl9kcmF3UmF3Q2lyY2xlKHQsZSxpLG8sbix0aGlzLm9wdGlvbnMuc2l6ZSksdGhpcy5ib3VuZGluZ0JveC50b3A9aS10aGlzLm9wdGlvbnMuc2l6ZSx0aGlzLmJvdW5kaW5nQm94LmxlZnQ9ZS10aGlzLm9wdGlvbnMuc2l6ZSx0aGlzLmJvdW5kaW5nQm94LnJpZ2h0PWUrdGhpcy5vcHRpb25zLnNpemUsdGhpcy5ib3VuZGluZ0JveC5ib3R0b209aSt0aGlzLm9wdGlvbnMuc2l6ZSx0aGlzLnVwZGF0ZUJvdW5kaW5nQm94KGUsaSksdGhpcy5sYWJlbE1vZHVsZS5kcmF3KHQsZSxpLG8pfX0se2tleToidXBkYXRlQm91bmRpbmdCb3giLHZhbHVlOmZ1bmN0aW9uKHQsZSl7dGhpcy5ib3VuZGluZ0JveC50b3A9ZS10aGlzLm9wdGlvbnMuc2l6ZSx0aGlzLmJvdW5kaW5nQm94LmxlZnQ9dC10aGlzLm9wdGlvbnMuc2l6ZSx0aGlzLmJvdW5kaW5nQm94LnJpZ2h0PXQrdGhpcy5vcHRpb25zLnNpemUsdGhpcy5ib3VuZGluZ0JveC5ib3R0b209ZSt0aGlzLm9wdGlvbnMuc2l6ZX19LHtrZXk6ImRpc3RhbmNlVG9Cb3JkZXIiLHZhbHVlOmZ1bmN0aW9uKHQsZSl7cmV0dXJuIHRoaXMucmVzaXplKHQpLC41KnRoaXMud2lkdGh9fV0pLGV9KGRbImRlZmF1bHQiXSk7ZVsiZGVmYXVsdCJdPWwsdC5leHBvcnRzPWVbImRlZmF1bHQiXX0sZnVuY3Rpb24odCxlLGkpe2Z1bmN0aW9uIG8odCl7cmV0dXJuIHQmJnQuX19lc01vZHVsZT90OnsiZGVmYXVsdCI6dH19ZnVuY3Rpb24gbih0LGUpe2lmKCEodCBpbnN0YW5jZW9mIGUpKXRocm93IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCBjYWxsIGEgY2xhc3MgYXMgYSBmdW5jdGlvbiIpfWZ1bmN0aW9uIHModCxlKXtpZigiZnVuY3Rpb24iIT10eXBlb2YgZSYmbnVsbCE9PWUpdGhyb3cgbmV3IFR5cGVFcnJvcigiU3VwZXIgZXhwcmVzc2lvbiBtdXN0IGVpdGhlciBiZSBudWxsIG9yIGEgZnVuY3Rpb24sIG5vdCAiK3R5cGVvZiBlKTt0LnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKGUmJmUucHJvdG90eXBlLHtjb25zdHJ1Y3Rvcjp7dmFsdWU6dCxlbnVtZXJhYmxlOiExLHdyaXRhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH19KSxlJiYoT2JqZWN0LnNldFByb3RvdHlwZU9mP09iamVjdC5zZXRQcm90b3R5cGVPZih0LGUpOnQuX19wcm90b19fPWUpfU9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt2YXIgcj1mdW5jdGlvbigpe2Z1bmN0aW9uIHQodCxlKXtmb3IodmFyIGk9MDtpPGUubGVuZ3RoO2krKyl7dmFyIG89ZVtpXTtvLmVudW1lcmFibGU9by5lbnVtZXJhYmxlfHwhMSxvLmNvbmZpZ3VyYWJsZT0hMCwidmFsdWUiaW4gbyYmKG8ud3JpdGFibGU9ITApLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LG8ua2V5LG8pfX1yZXR1cm4gZnVuY3Rpb24oZSxpLG8pe3JldHVybiBpJiZ0KGUucHJvdG90eXBlLGkpLG8mJnQoZSxvKSxlfX0oKSxhPWZ1bmN0aW9uKHQsZSxpKXtmb3IodmFyIG89ITA7bzspe3ZhciBuPXQscz1lLHI9aTtvPSExLG51bGw9PT1uJiYobj1GdW5jdGlvbi5wcm90b3R5cGUpO3ZhciBhPU9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IobixzKTtpZih2b2lkIDAhPT1hKXtpZigidmFsdWUiaW4gYSlyZXR1cm4gYS52YWx1ZTt2YXIgaD1hLmdldDtpZih2b2lkIDA9PT1oKXJldHVybjtyZXR1cm4gaC5jYWxsKHIpfXZhciBkPU9iamVjdC5nZXRQcm90b3R5cGVPZihuKTtpZihudWxsPT09ZClyZXR1cm47dD1kLGU9cyxpPXIsbz0hMCxhPWQ9dm9pZCAwfX0saD1pKDY0KSxkPW8oaCksbD1mdW5jdGlvbih0KXtmdW5jdGlvbiBlKHQsaSxvKXtuKHRoaXMsZSksYShPYmplY3QuZ2V0UHJvdG90eXBlT2YoZS5wcm90b3R5cGUpLCJjb25zdHJ1Y3RvciIsdGhpcykuY2FsbCh0aGlzLHQsaSxvKSx0aGlzLmxhYmVsT2Zmc2V0PTAsdGhpcy5pbWFnZUxvYWRlZD0hMX1yZXR1cm4gcyhlLHQpLHIoZSxbe2tleToic2V0T3B0aW9ucyIsdmFsdWU6ZnVuY3Rpb24odCxlKXt0aGlzLm9wdGlvbnM9dCxlJiYodGhpcy5pbWFnZU9iaj1lKX19LHtrZXk6Il9yZXNpemVJbWFnZSIsdmFsdWU6ZnVuY3Rpb24oKXt2YXIgdD0hMTtpZih0aGlzLmltYWdlT2JqLndpZHRoJiZ0aGlzLmltYWdlT2JqLmhlaWdodD90aGlzLmltYWdlTG9hZGVkPT09ITEmJih0aGlzLmltYWdlTG9hZGVkPSEwLHQ9ITApOnRoaXMuaW1hZ2VMb2FkZWQ9ITEsIXRoaXMud2lkdGh8fCF0aGlzLmhlaWdodHx8dD09PSEwKXt2YXIgZSxpLG87dGhpcy5pbWFnZU9iai53aWR0aCYmdGhpcy5pbWFnZU9iai5oZWlnaHQmJihlPTAsaT0wKSx0aGlzLm9wdGlvbnMuc2hhcGVQcm9wZXJ0aWVzLnVzZUltYWdlU2l6ZT09PSExP3RoaXMuaW1hZ2VPYmoud2lkdGg+dGhpcy5pbWFnZU9iai5oZWlnaHQ/KG89dGhpcy5pbWFnZU9iai53aWR0aC90aGlzLmltYWdlT2JqLmhlaWdodCxlPTIqdGhpcy5vcHRpb25zLnNpemUqb3x8dGhpcy5pbWFnZU9iai53aWR0aCxpPTIqdGhpcy5vcHRpb25zLnNpemV8fHRoaXMuaW1hZ2VPYmouaGVpZ2h0KToobz10aGlzLmltYWdlT2JqLndpZHRoJiZ0aGlzLmltYWdlT2JqLmhlaWdodD90aGlzLmltYWdlT2JqLmhlaWdodC90aGlzLmltYWdlT2JqLndpZHRoOjEsZT0yKnRoaXMub3B0aW9ucy5zaXplLGk9Mip0aGlzLm9wdGlvbnMuc2l6ZSpvKTooZT10aGlzLmltYWdlT2JqLndpZHRoLGk9dGhpcy5pbWFnZU9iai5oZWlnaHQpLHRoaXMud2lkdGg9ZSx0aGlzLmhlaWdodD1pLHRoaXMucmFkaXVzPS41KnRoaXMud2lkdGh9fX0se2tleToiX2RyYXdSYXdDaXJjbGUiLHZhbHVlOmZ1bmN0aW9uKHQsZSxpLG8sbixzKXt2YXIgcj10aGlzLm9wdGlvbnMuYm9yZGVyV2lkdGgsYT10aGlzLm9wdGlvbnMuYm9yZGVyV2lkdGhTZWxlY3RlZHx8Mip0aGlzLm9wdGlvbnMuYm9yZGVyV2lkdGg7dC5zdHJva2VTdHlsZT1vP3RoaXMub3B0aW9ucy5jb2xvci5oaWdobGlnaHQuYm9yZGVyOm4/dGhpcy5vcHRpb25zLmNvbG9yLmhvdmVyLmJvcmRlcjp0aGlzLm9wdGlvbnMuY29sb3IuYm9yZGVyLHQubGluZVdpZHRoPW8/YTpyLHQubGluZVdpZHRoKj10aGlzLm5ldHdvcmtTY2FsZUludix0LmxpbmVXaWR0aD1NYXRoLm1pbih0aGlzLndpZHRoLHQubGluZVdpZHRoKSx0LmZpbGxTdHlsZT1vP3RoaXMub3B0aW9ucy5jb2xvci5oaWdobGlnaHQuYmFja2dyb3VuZDpuP3RoaXMub3B0aW9ucy5jb2xvci5ob3Zlci5iYWNrZ3JvdW5kOnRoaXMub3B0aW9ucy5jb2xvci5iYWNrZ3JvdW5kLHQuY2lyY2xlKGUsaSxzKSx0aGlzLmVuYWJsZVNoYWRvdyh0KSx0LmZpbGwoKSx0aGlzLmRpc2FibGVTaGFkb3codCksdC5zYXZlKCksdGhpcy5lbmFibGVCb3JkZXJEYXNoZXModCksdC5zdHJva2UoKSx0aGlzLmRpc2FibGVCb3JkZXJEYXNoZXModCksdC5yZXN0b3JlKCl9fSx7a2V5OiJfZHJhd0ltYWdlQXRQb3NpdGlvbiIsdmFsdWU6ZnVuY3Rpb24odCl7MCE9dGhpcy5pbWFnZU9iai53aWR0aCYmKHQuZ2xvYmFsQWxwaGE9MSx0aGlzLmVuYWJsZVNoYWRvdyh0KSx0LmRyYXdJbWFnZSh0aGlzLmltYWdlT2JqLHRoaXMubGVmdCx0aGlzLnRvcCx0aGlzLndpZHRoLHRoaXMuaGVpZ2h0KSx0aGlzLmRpc2FibGVTaGFkb3codCkpfX0se2tleToiX2RyYXdJbWFnZUxhYmVsIix2YWx1ZTpmdW5jdGlvbih0LGUsaSxvKXt2YXIgbixzPTA7aWYodm9pZCAwIT09dGhpcy5oZWlnaHQpe3M9LjUqdGhpcy5oZWlnaHQ7dmFyIHI9dGhpcy5sYWJlbE1vZHVsZS5nZXRUZXh0U2l6ZSh0KTtyLmxpbmVDb3VudD49MSYmKHMrPXIuaGVpZ2h0LzIpfW49aStzLHRoaXMub3B0aW9ucy5sYWJlbCYmKHRoaXMubGFiZWxPZmZzZXQ9cyksdGhpcy5sYWJlbE1vZHVsZS5kcmF3KHQsZSxuLG8sImhhbmdpbmciKX19XSksZX0oZFsiZGVmYXVsdCJdKTtlWyJkZWZhdWx0Il09bCx0LmV4cG9ydHM9ZVsiZGVmYXVsdCJdfSxmdW5jdGlvbih0LGUsaSl7ZnVuY3Rpb24gbyh0KXtyZXR1cm4gdCYmdC5fX2VzTW9kdWxlP3Q6eyJkZWZhdWx0Ijp0fX1mdW5jdGlvbiBuKHQsZSl7aWYoISh0IGluc3RhbmNlb2YgZSkpdGhyb3cgbmV3IFR5cGVFcnJvcigiQ2Fubm90IGNhbGwgYSBjbGFzcyBhcyBhIGZ1bmN0aW9uIil9ZnVuY3Rpb24gcyh0LGUpe2lmKCJmdW5jdGlvbiIhPXR5cGVvZiBlJiZudWxsIT09ZSl0aHJvdyBuZXcgVHlwZUVycm9yKCJTdXBlciBleHByZXNzaW9uIG11c3QgZWl0aGVyIGJlIG51bGwgb3IgYSBmdW5jdGlvbiwgbm90ICIrdHlwZW9mIGUpO3QucHJvdG90eXBlPU9iamVjdC5jcmVhdGUoZSYmZS5wcm90b3R5cGUse2NvbnN0cnVjdG9yOnt2YWx1ZTp0LGVudW1lcmFibGU6ITEsd3JpdGFibGU6ITAsY29uZmlndXJhYmxlOiEwfX0pLGUmJihPYmplY3Quc2V0UHJvdG90eXBlT2Y/T2JqZWN0LnNldFByb3RvdHlwZU9mKHQsZSk6dC5fX3Byb3RvX189ZSl9T2JqZWN0LmRlZmluZVByb3BlcnR5KGUsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3ZhciByPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCh0LGUpe2Zvcih2YXIgaT0wO2k8ZS5sZW5ndGg7aSsrKXt2YXIgbz1lW2ldO28uZW51bWVyYWJsZT1vLmVudW1lcmFibGV8fCExLG8uY29uZmlndXJhYmxlPSEwLCJ2YWx1ZSJpbiBvJiYoby53cml0YWJsZT0hMCksT2JqZWN0LmRlZmluZVByb3BlcnR5KHQsby5rZXksbyl9fXJldHVybiBmdW5jdGlvbihlLGksbyl7cmV0dXJuIGkmJnQoZS5wcm90b3R5cGUsaSksbyYmdChlLG8pLGV9fSgpLGE9ZnVuY3Rpb24odCxlLGkpe2Zvcih2YXIgbz0hMDtvOyl7dmFyIG49dCxzPWUscj1pO289ITEsbnVsbD09PW4mJihuPUZ1bmN0aW9uLnByb3RvdHlwZSk7dmFyIGE9T2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihuLHMpO2lmKHZvaWQgMCE9PWEpe2lmKCJ2YWx1ZSJpbiBhKXJldHVybiBhLnZhbHVlO3ZhciBoPWEuZ2V0O2lmKHZvaWQgMD09PWgpcmV0dXJuO3JldHVybiBoLmNhbGwocil9dmFyIGQ9T2JqZWN0LmdldFByb3RvdHlwZU9mKG4pO2lmKG51bGw9PT1kKXJldHVybjt0PWQsZT1zLGk9cixvPSEwLGE9ZD12b2lkIDB9fSxoPWkoNjYpLGQ9byhoKSxsPWZ1bmN0aW9uKHQpe2Z1bmN0aW9uIGUodCxpLG8scyl7bih0aGlzLGUpLGEoT2JqZWN0LmdldFByb3RvdHlwZU9mKGUucHJvdG90eXBlKSwiY29uc3RydWN0b3IiLHRoaXMpLmNhbGwodGhpcyx0LGksbyksdGhpcy5pbWFnZU9iaj1zLHRoaXMuX3N3YXBUb0ltYWdlUmVzaXplV2hlbkltYWdlTG9hZGVkPSEwfXJldHVybiBzKGUsdCkscihlLFt7a2V5OiJyZXNpemUiLHZhbHVlOmZ1bmN0aW9uKCl7aWYodm9pZCAwPT09dGhpcy5pbWFnZU9iai5zcmN8fHZvaWQgMD09PXRoaXMuaW1hZ2VPYmoud2lkdGh8fHZvaWQgMD09PXRoaXMuaW1hZ2VPYmouaGVpZ2h0KXtpZighdGhpcy53aWR0aCl7dmFyIHQ9Mip0aGlzLm9wdGlvbnMuc2l6ZTt0aGlzLndpZHRoPXQsdGhpcy5oZWlnaHQ9dCx0aGlzLl9zd2FwVG9JbWFnZVJlc2l6ZVdoZW5JbWFnZUxvYWRlZD0hMCx0aGlzLnJhZGl1cz0uNSp0aGlzLndpZHRofX1lbHNlIHRoaXMuX3N3YXBUb0ltYWdlUmVzaXplV2hlbkltYWdlTG9hZGVkJiYodGhpcy53aWR0aD12b2lkIDAsdGhpcy5oZWlnaHQ9dm9pZCAwLHRoaXMuX3N3YXBUb0ltYWdlUmVzaXplV2hlbkltYWdlTG9hZGVkPSExKSx0aGlzLl9yZXNpemVJbWFnZSgpfX0se2tleToiZHJhdyIsdmFsdWU6ZnVuY3Rpb24odCxlLGksbyxuKXt0aGlzLnJlc2l6ZSgpLHRoaXMubGVmdD1lLXRoaXMud2lkdGgvMix0aGlzLnRvcD1pLXRoaXMuaGVpZ2h0LzI7dmFyIHM9TWF0aC5taW4oLjUqdGhpcy5oZWlnaHQsLjUqdGhpcy53aWR0aCk7dGhpcy5fZHJhd1Jhd0NpcmNsZSh0LGUsaSxvLG4scyksdC5zYXZlKCksdC5jbGlwKCksdGhpcy5fZHJhd0ltYWdlQXRQb3NpdGlvbih0KSx0LnJlc3RvcmUoKSx0aGlzLl9kcmF3SW1hZ2VMYWJlbCh0LGUsaSxvKSx0aGlzLnVwZGF0ZUJvdW5kaW5nQm94KGUsaSl9fSx7a2V5OiJ1cGRhdGVCb3VuZGluZ0JveCIsdmFsdWU6ZnVuY3Rpb24odCxlKXt0aGlzLmJvdW5kaW5nQm94LnRvcD1lLXRoaXMub3B0aW9ucy5zaXplLHRoaXMuYm91bmRpbmdCb3gubGVmdD10LXRoaXMub3B0aW9ucy5zaXplLHRoaXMuYm91bmRpbmdCb3gucmlnaHQ9dCt0aGlzLm9wdGlvbnMuc2l6ZSx0aGlzLmJvdW5kaW5nQm94LmJvdHRvbT1lK3RoaXMub3B0aW9ucy5zaXplLHRoaXMuYm91bmRpbmdCb3gubGVmdD1NYXRoLm1pbih0aGlzLmJvdW5kaW5nQm94LmxlZnQsdGhpcy5sYWJlbE1vZHVsZS5zaXplLmxlZnQpLHRoaXMuYm91bmRpbmdCb3gucmlnaHQ9TWF0aC5tYXgodGhpcy5ib3VuZGluZ0JveC5yaWdodCx0aGlzLmxhYmVsTW9kdWxlLnNpemUubGVmdCt0aGlzLmxhYmVsTW9kdWxlLnNpemUud2lkdGgpLHRoaXMuYm91bmRpbmdCb3guYm90dG9tPU1hdGgubWF4KHRoaXMuYm91bmRpbmdCb3guYm90dG9tLHRoaXMuYm91bmRpbmdCb3guYm90dG9tK3RoaXMubGFiZWxPZmZzZXQpOwp9fSx7a2V5OiJkaXN0YW5jZVRvQm9yZGVyIix2YWx1ZTpmdW5jdGlvbih0LGUpe3JldHVybiB0aGlzLnJlc2l6ZSh0KSwuNSp0aGlzLndpZHRofX1dKSxlfShkWyJkZWZhdWx0Il0pO2VbImRlZmF1bHQiXT1sLHQuZXhwb3J0cz1lWyJkZWZhdWx0Il19LGZ1bmN0aW9uKHQsZSxpKXtmdW5jdGlvbiBvKHQpe3JldHVybiB0JiZ0Ll9fZXNNb2R1bGU/dDp7ImRlZmF1bHQiOnR9fWZ1bmN0aW9uIG4odCxlKXtpZighKHQgaW5zdGFuY2VvZiBlKSl0aHJvdyBuZXcgVHlwZUVycm9yKCJDYW5ub3QgY2FsbCBhIGNsYXNzIGFzIGEgZnVuY3Rpb24iKX1mdW5jdGlvbiBzKHQsZSl7aWYoImZ1bmN0aW9uIiE9dHlwZW9mIGUmJm51bGwhPT1lKXRocm93IG5ldyBUeXBlRXJyb3IoIlN1cGVyIGV4cHJlc3Npb24gbXVzdCBlaXRoZXIgYmUgbnVsbCBvciBhIGZ1bmN0aW9uLCBub3QgIit0eXBlb2YgZSk7dC5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZShlJiZlLnByb3RvdHlwZSx7Y29uc3RydWN0b3I6e3ZhbHVlOnQsZW51bWVyYWJsZTohMSx3cml0YWJsZTohMCxjb25maWd1cmFibGU6ITB9fSksZSYmKE9iamVjdC5zZXRQcm90b3R5cGVPZj9PYmplY3Quc2V0UHJvdG90eXBlT2YodCxlKTp0Ll9fcHJvdG9fXz1lKX1PYmplY3QuZGVmaW5lUHJvcGVydHkoZSwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7dmFyIHI9ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KHQsZSl7Zm9yKHZhciBpPTA7aTxlLmxlbmd0aDtpKyspe3ZhciBvPWVbaV07by5lbnVtZXJhYmxlPW8uZW51bWVyYWJsZXx8ITEsby5jb25maWd1cmFibGU9ITAsInZhbHVlImluIG8mJihvLndyaXRhYmxlPSEwKSxPYmplY3QuZGVmaW5lUHJvcGVydHkodCxvLmtleSxvKX19cmV0dXJuIGZ1bmN0aW9uKGUsaSxvKXtyZXR1cm4gaSYmdChlLnByb3RvdHlwZSxpKSxvJiZ0KGUsbyksZX19KCksYT1mdW5jdGlvbih0LGUsaSl7Zm9yKHZhciBvPSEwO287KXt2YXIgbj10LHM9ZSxyPWk7bz0hMSxudWxsPT09biYmKG49RnVuY3Rpb24ucHJvdG90eXBlKTt2YXIgYT1PYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKG4scyk7aWYodm9pZCAwIT09YSl7aWYoInZhbHVlImluIGEpcmV0dXJuIGEudmFsdWU7dmFyIGg9YS5nZXQ7aWYodm9pZCAwPT09aClyZXR1cm47cmV0dXJuIGguY2FsbChyKX12YXIgZD1PYmplY3QuZ2V0UHJvdG90eXBlT2Yobik7aWYobnVsbD09PWQpcmV0dXJuO3Q9ZCxlPXMsaT1yLG89ITAsYT1kPXZvaWQgMH19LGg9aSg2NCksZD1vKGgpLGw9ZnVuY3Rpb24odCl7ZnVuY3Rpb24gZSh0LGksbyl7bih0aGlzLGUpLGEoT2JqZWN0LmdldFByb3RvdHlwZU9mKGUucHJvdG90eXBlKSwiY29uc3RydWN0b3IiLHRoaXMpLmNhbGwodGhpcyx0LGksbyl9cmV0dXJuIHMoZSx0KSxyKGUsW3trZXk6InJlc2l6ZSIsdmFsdWU6ZnVuY3Rpb24odCxlKXtpZih2b2lkIDA9PT10aGlzLndpZHRoKXt2YXIgaT01LG89dGhpcy5sYWJlbE1vZHVsZS5nZXRUZXh0U2l6ZSh0LGUpLG49by53aWR0aCsyKmk7dGhpcy53aWR0aD1uLHRoaXMuaGVpZ2h0PW4sdGhpcy5yYWRpdXM9LjUqdGhpcy53aWR0aH19fSx7a2V5OiJkcmF3Iix2YWx1ZTpmdW5jdGlvbih0LGUsaSxvLG4pe3RoaXMucmVzaXplKHQsbyksdGhpcy5sZWZ0PWUtdGhpcy53aWR0aC8yLHRoaXMudG9wPWktdGhpcy5oZWlnaHQvMjt2YXIgcz10aGlzLm9wdGlvbnMuYm9yZGVyV2lkdGgscj10aGlzLm9wdGlvbnMuYm9yZGVyV2lkdGhTZWxlY3RlZHx8Mip0aGlzLm9wdGlvbnMuYm9yZGVyV2lkdGg7dC5zdHJva2VTdHlsZT1vP3RoaXMub3B0aW9ucy5jb2xvci5oaWdobGlnaHQuYm9yZGVyOm4/dGhpcy5vcHRpb25zLmNvbG9yLmhvdmVyLmJvcmRlcjp0aGlzLm9wdGlvbnMuY29sb3IuYm9yZGVyLHQubGluZVdpZHRoPXRoaXMuc2VsZWN0ZWQ/cjpzLHQubGluZVdpZHRoKj10aGlzLm5ldHdvcmtTY2FsZUludix0LmxpbmVXaWR0aD1NYXRoLm1pbih0aGlzLndpZHRoLHQubGluZVdpZHRoKSx0LmZpbGxTdHlsZT1vP3RoaXMub3B0aW9ucy5jb2xvci5oaWdobGlnaHQuYmFja2dyb3VuZDpuP3RoaXMub3B0aW9ucy5jb2xvci5ob3Zlci5iYWNrZ3JvdW5kOnRoaXMub3B0aW9ucy5jb2xvci5iYWNrZ3JvdW5kLHQuZGF0YWJhc2UoZS10aGlzLndpZHRoLzIsaS0uNSp0aGlzLmhlaWdodCx0aGlzLndpZHRoLHRoaXMuaGVpZ2h0KSx0aGlzLmVuYWJsZVNoYWRvdyh0KSx0LmZpbGwoKSx0aGlzLmRpc2FibGVTaGFkb3codCksdC5zYXZlKCksdGhpcy5lbmFibGVCb3JkZXJEYXNoZXModCksdC5zdHJva2UoKSx0aGlzLmRpc2FibGVCb3JkZXJEYXNoZXModCksdC5yZXN0b3JlKCksdGhpcy51cGRhdGVCb3VuZGluZ0JveChlLGksdCxvKSx0aGlzLmxhYmVsTW9kdWxlLmRyYXcodCxlLGksbyl9fSx7a2V5OiJ1cGRhdGVCb3VuZGluZ0JveCIsdmFsdWU6ZnVuY3Rpb24odCxlLGksbyl7dGhpcy5yZXNpemUoaSxvKSx0aGlzLmxlZnQ9dC0uNSp0aGlzLndpZHRoLHRoaXMudG9wPWUtLjUqdGhpcy5oZWlnaHQsdGhpcy5ib3VuZGluZ0JveC5sZWZ0PXRoaXMubGVmdCx0aGlzLmJvdW5kaW5nQm94LnRvcD10aGlzLnRvcCx0aGlzLmJvdW5kaW5nQm94LmJvdHRvbT10aGlzLnRvcCt0aGlzLmhlaWdodCx0aGlzLmJvdW5kaW5nQm94LnJpZ2h0PXRoaXMubGVmdCt0aGlzLndpZHRofX0se2tleToiZGlzdGFuY2VUb0JvcmRlciIsdmFsdWU6ZnVuY3Rpb24odCxlKXtyZXR1cm4gdGhpcy5fZGlzdGFuY2VUb0JvcmRlcih0LGUpfX1dKSxlfShkWyJkZWZhdWx0Il0pO2VbImRlZmF1bHQiXT1sLHQuZXhwb3J0cz1lWyJkZWZhdWx0Il19LGZ1bmN0aW9uKHQsZSxpKXtmdW5jdGlvbiBvKHQpe3JldHVybiB0JiZ0Ll9fZXNNb2R1bGU/dDp7ImRlZmF1bHQiOnR9fWZ1bmN0aW9uIG4odCxlKXtpZighKHQgaW5zdGFuY2VvZiBlKSl0aHJvdyBuZXcgVHlwZUVycm9yKCJDYW5ub3QgY2FsbCBhIGNsYXNzIGFzIGEgZnVuY3Rpb24iKX1mdW5jdGlvbiBzKHQsZSl7aWYoImZ1bmN0aW9uIiE9dHlwZW9mIGUmJm51bGwhPT1lKXRocm93IG5ldyBUeXBlRXJyb3IoIlN1cGVyIGV4cHJlc3Npb24gbXVzdCBlaXRoZXIgYmUgbnVsbCBvciBhIGZ1bmN0aW9uLCBub3QgIit0eXBlb2YgZSk7dC5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZShlJiZlLnByb3RvdHlwZSx7Y29uc3RydWN0b3I6e3ZhbHVlOnQsZW51bWVyYWJsZTohMSx3cml0YWJsZTohMCxjb25maWd1cmFibGU6ITB9fSksZSYmKE9iamVjdC5zZXRQcm90b3R5cGVPZj9PYmplY3Quc2V0UHJvdG90eXBlT2YodCxlKTp0Ll9fcHJvdG9fXz1lKX1PYmplY3QuZGVmaW5lUHJvcGVydHkoZSwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7dmFyIHI9ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KHQsZSl7Zm9yKHZhciBpPTA7aTxlLmxlbmd0aDtpKyspe3ZhciBvPWVbaV07by5lbnVtZXJhYmxlPW8uZW51bWVyYWJsZXx8ITEsby5jb25maWd1cmFibGU9ITAsInZhbHVlImluIG8mJihvLndyaXRhYmxlPSEwKSxPYmplY3QuZGVmaW5lUHJvcGVydHkodCxvLmtleSxvKX19cmV0dXJuIGZ1bmN0aW9uKGUsaSxvKXtyZXR1cm4gaSYmdChlLnByb3RvdHlwZSxpKSxvJiZ0KGUsbyksZX19KCksYT1mdW5jdGlvbih0LGUsaSl7Zm9yKHZhciBvPSEwO287KXt2YXIgbj10LHM9ZSxyPWk7bz0hMSxudWxsPT09biYmKG49RnVuY3Rpb24ucHJvdG90eXBlKTt2YXIgYT1PYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKG4scyk7aWYodm9pZCAwIT09YSl7aWYoInZhbHVlImluIGEpcmV0dXJuIGEudmFsdWU7dmFyIGg9YS5nZXQ7aWYodm9pZCAwPT09aClyZXR1cm47cmV0dXJuIGguY2FsbChyKX12YXIgZD1PYmplY3QuZ2V0UHJvdG90eXBlT2Yobik7aWYobnVsbD09PWQpcmV0dXJuO3Q9ZCxlPXMsaT1yLG89ITAsYT1kPXZvaWQgMH19LGg9aSg3MCksZD1vKGgpLGw9ZnVuY3Rpb24odCl7ZnVuY3Rpb24gZSh0LGksbyl7bih0aGlzLGUpLGEoT2JqZWN0LmdldFByb3RvdHlwZU9mKGUucHJvdG90eXBlKSwiY29uc3RydWN0b3IiLHRoaXMpLmNhbGwodGhpcyx0LGksbyl9cmV0dXJuIHMoZSx0KSxyKGUsW3trZXk6InJlc2l6ZSIsdmFsdWU6ZnVuY3Rpb24odCl7dGhpcy5fcmVzaXplU2hhcGUoKX19LHtrZXk6ImRyYXciLHZhbHVlOmZ1bmN0aW9uKHQsZSxpLG8sbil7dGhpcy5fZHJhd1NoYXBlKHQsImRpYW1vbmQiLDQsZSxpLG8sbil9fSx7a2V5OiJkaXN0YW5jZVRvQm9yZGVyIix2YWx1ZTpmdW5jdGlvbih0LGUpe3JldHVybiB0aGlzLl9kaXN0YW5jZVRvQm9yZGVyKHQsZSl9fV0pLGV9KGRbImRlZmF1bHQiXSk7ZVsiZGVmYXVsdCJdPWwsdC5leHBvcnRzPWVbImRlZmF1bHQiXX0sZnVuY3Rpb24odCxlLGkpe2Z1bmN0aW9uIG8odCl7cmV0dXJuIHQmJnQuX19lc01vZHVsZT90OnsiZGVmYXVsdCI6dH19ZnVuY3Rpb24gbih0LGUpe2lmKCEodCBpbnN0YW5jZW9mIGUpKXRocm93IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCBjYWxsIGEgY2xhc3MgYXMgYSBmdW5jdGlvbiIpfWZ1bmN0aW9uIHModCxlKXtpZigiZnVuY3Rpb24iIT10eXBlb2YgZSYmbnVsbCE9PWUpdGhyb3cgbmV3IFR5cGVFcnJvcigiU3VwZXIgZXhwcmVzc2lvbiBtdXN0IGVpdGhlciBiZSBudWxsIG9yIGEgZnVuY3Rpb24sIG5vdCAiK3R5cGVvZiBlKTt0LnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKGUmJmUucHJvdG90eXBlLHtjb25zdHJ1Y3Rvcjp7dmFsdWU6dCxlbnVtZXJhYmxlOiExLHdyaXRhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH19KSxlJiYoT2JqZWN0LnNldFByb3RvdHlwZU9mP09iamVjdC5zZXRQcm90b3R5cGVPZih0LGUpOnQuX19wcm90b19fPWUpfU9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt2YXIgcj1mdW5jdGlvbigpe2Z1bmN0aW9uIHQodCxlKXtmb3IodmFyIGk9MDtpPGUubGVuZ3RoO2krKyl7dmFyIG89ZVtpXTtvLmVudW1lcmFibGU9by5lbnVtZXJhYmxlfHwhMSxvLmNvbmZpZ3VyYWJsZT0hMCwidmFsdWUiaW4gbyYmKG8ud3JpdGFibGU9ITApLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LG8ua2V5LG8pfX1yZXR1cm4gZnVuY3Rpb24oZSxpLG8pe3JldHVybiBpJiZ0KGUucHJvdG90eXBlLGkpLG8mJnQoZSxvKSxlfX0oKSxhPWZ1bmN0aW9uKHQsZSxpKXtmb3IodmFyIG89ITA7bzspe3ZhciBuPXQscz1lLHI9aTtvPSExLG51bGw9PT1uJiYobj1GdW5jdGlvbi5wcm90b3R5cGUpO3ZhciBhPU9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IobixzKTtpZih2b2lkIDAhPT1hKXtpZigidmFsdWUiaW4gYSlyZXR1cm4gYS52YWx1ZTt2YXIgaD1hLmdldDtpZih2b2lkIDA9PT1oKXJldHVybjtyZXR1cm4gaC5jYWxsKHIpfXZhciBkPU9iamVjdC5nZXRQcm90b3R5cGVPZihuKTtpZihudWxsPT09ZClyZXR1cm47dD1kLGU9cyxpPXIsbz0hMCxhPWQ9dm9pZCAwfX0saD1pKDY0KSxkPW8oaCksbD1mdW5jdGlvbih0KXtmdW5jdGlvbiBlKHQsaSxvKXtuKHRoaXMsZSksYShPYmplY3QuZ2V0UHJvdG90eXBlT2YoZS5wcm90b3R5cGUpLCJjb25zdHJ1Y3RvciIsdGhpcykuY2FsbCh0aGlzLHQsaSxvKX1yZXR1cm4gcyhlLHQpLHIoZSxbe2tleToiX3Jlc2l6ZVNoYXBlIix2YWx1ZTpmdW5jdGlvbigpe2lmKHZvaWQgMD09PXRoaXMud2lkdGgpe3ZhciB0PTIqdGhpcy5vcHRpb25zLnNpemU7dGhpcy53aWR0aD10LHRoaXMuaGVpZ2h0PXQsdGhpcy5yYWRpdXM9LjUqdGhpcy53aWR0aH19fSx7a2V5OiJfZHJhd1NoYXBlIix2YWx1ZTpmdW5jdGlvbih0LGUsaSxvLG4scyxyKXt0aGlzLl9yZXNpemVTaGFwZSgpLHRoaXMubGVmdD1vLXRoaXMud2lkdGgvMix0aGlzLnRvcD1uLXRoaXMuaGVpZ2h0LzI7dmFyIGE9dGhpcy5vcHRpb25zLmJvcmRlcldpZHRoLGg9dGhpcy5vcHRpb25zLmJvcmRlcldpZHRoU2VsZWN0ZWR8fDIqdGhpcy5vcHRpb25zLmJvcmRlcldpZHRoO2lmKHQuc3Ryb2tlU3R5bGU9cz90aGlzLm9wdGlvbnMuY29sb3IuaGlnaGxpZ2h0LmJvcmRlcjpyP3RoaXMub3B0aW9ucy5jb2xvci5ob3Zlci5ib3JkZXI6dGhpcy5vcHRpb25zLmNvbG9yLmJvcmRlcix0LmxpbmVXaWR0aD1zP2g6YSx0LmxpbmVXaWR0aC89dGhpcy5ib2R5LnZpZXcuc2NhbGUsdC5saW5lV2lkdGg9TWF0aC5taW4odGhpcy53aWR0aCx0LmxpbmVXaWR0aCksdC5maWxsU3R5bGU9cz90aGlzLm9wdGlvbnMuY29sb3IuaGlnaGxpZ2h0LmJhY2tncm91bmQ6cj90aGlzLm9wdGlvbnMuY29sb3IuaG92ZXIuYmFja2dyb3VuZDp0aGlzLm9wdGlvbnMuY29sb3IuYmFja2dyb3VuZCx0W2VdKG8sbix0aGlzLm9wdGlvbnMuc2l6ZSksdGhpcy5lbmFibGVTaGFkb3codCksdC5maWxsKCksdGhpcy5kaXNhYmxlU2hhZG93KHQpLHQuc2F2ZSgpLHRoaXMuZW5hYmxlQm9yZGVyRGFzaGVzKHQpLHQuc3Ryb2tlKCksdGhpcy5kaXNhYmxlQm9yZGVyRGFzaGVzKHQpLHQucmVzdG9yZSgpLHZvaWQgMCE9PXRoaXMub3B0aW9ucy5sYWJlbCl7dmFyIGQ9bisuNSp0aGlzLmhlaWdodCszO3RoaXMubGFiZWxNb2R1bGUuZHJhdyh0LG8sZCxzLCJoYW5naW5nIil9dGhpcy51cGRhdGVCb3VuZGluZ0JveChvLG4pfX0se2tleToidXBkYXRlQm91bmRpbmdCb3giLHZhbHVlOmZ1bmN0aW9uKHQsZSl7dGhpcy5ib3VuZGluZ0JveC50b3A9ZS10aGlzLm9wdGlvbnMuc2l6ZSx0aGlzLmJvdW5kaW5nQm94LmxlZnQ9dC10aGlzLm9wdGlvbnMuc2l6ZSx0aGlzLmJvdW5kaW5nQm94LnJpZ2h0PXQrdGhpcy5vcHRpb25zLnNpemUsdGhpcy5ib3VuZGluZ0JveC5ib3R0b209ZSt0aGlzLm9wdGlvbnMuc2l6ZSx2b2lkIDAhPT10aGlzLm9wdGlvbnMubGFiZWwmJnRoaXMubGFiZWxNb2R1bGUuc2l6ZS53aWR0aD4wJiYodGhpcy5ib3VuZGluZ0JveC5sZWZ0PU1hdGgubWluKHRoaXMuYm91bmRpbmdCb3gubGVmdCx0aGlzLmxhYmVsTW9kdWxlLnNpemUubGVmdCksdGhpcy5ib3VuZGluZ0JveC5yaWdodD1NYXRoLm1heCh0aGlzLmJvdW5kaW5nQm94LnJpZ2h0LHRoaXMubGFiZWxNb2R1bGUuc2l6ZS5sZWZ0K3RoaXMubGFiZWxNb2R1bGUuc2l6ZS53aWR0aCksdGhpcy5ib3VuZGluZ0JveC5ib3R0b209TWF0aC5tYXgodGhpcy5ib3VuZGluZ0JveC5ib3R0b20sdGhpcy5ib3VuZGluZ0JveC5ib3R0b20rdGhpcy5sYWJlbE1vZHVsZS5zaXplLmhlaWdodCszKSl9fV0pLGV9KGRbImRlZmF1bHQiXSk7ZVsiZGVmYXVsdCJdPWwsdC5leHBvcnRzPWVbImRlZmF1bHQiXX0sZnVuY3Rpb24odCxlLGkpe2Z1bmN0aW9uIG8odCl7cmV0dXJuIHQmJnQuX19lc01vZHVsZT90OnsiZGVmYXVsdCI6dH19ZnVuY3Rpb24gbih0LGUpe2lmKCEodCBpbnN0YW5jZW9mIGUpKXRocm93IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCBjYWxsIGEgY2xhc3MgYXMgYSBmdW5jdGlvbiIpfWZ1bmN0aW9uIHModCxlKXtpZigiZnVuY3Rpb24iIT10eXBlb2YgZSYmbnVsbCE9PWUpdGhyb3cgbmV3IFR5cGVFcnJvcigiU3VwZXIgZXhwcmVzc2lvbiBtdXN0IGVpdGhlciBiZSBudWxsIG9yIGEgZnVuY3Rpb24sIG5vdCAiK3R5cGVvZiBlKTt0LnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKGUmJmUucHJvdG90eXBlLHtjb25zdHJ1Y3Rvcjp7dmFsdWU6dCxlbnVtZXJhYmxlOiExLHdyaXRhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH19KSxlJiYoT2JqZWN0LnNldFByb3RvdHlwZU9mP09iamVjdC5zZXRQcm90b3R5cGVPZih0LGUpOnQuX19wcm90b19fPWUpfU9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt2YXIgcj1mdW5jdGlvbigpe2Z1bmN0aW9uIHQodCxlKXtmb3IodmFyIGk9MDtpPGUubGVuZ3RoO2krKyl7dmFyIG89ZVtpXTtvLmVudW1lcmFibGU9by5lbnVtZXJhYmxlfHwhMSxvLmNvbmZpZ3VyYWJsZT0hMCwidmFsdWUiaW4gbyYmKG8ud3JpdGFibGU9ITApLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LG8ua2V5LG8pfX1yZXR1cm4gZnVuY3Rpb24oZSxpLG8pe3JldHVybiBpJiZ0KGUucHJvdG90eXBlLGkpLG8mJnQoZSxvKSxlfX0oKSxhPWZ1bmN0aW9uKHQsZSxpKXtmb3IodmFyIG89ITA7bzspe3ZhciBuPXQscz1lLHI9aTtvPSExLG51bGw9PT1uJiYobj1GdW5jdGlvbi5wcm90b3R5cGUpO3ZhciBhPU9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IobixzKTtpZih2b2lkIDAhPT1hKXtpZigidmFsdWUiaW4gYSlyZXR1cm4gYS52YWx1ZTt2YXIgaD1hLmdldDtpZih2b2lkIDA9PT1oKXJldHVybjtyZXR1cm4gaC5jYWxsKHIpfXZhciBkPU9iamVjdC5nZXRQcm90b3R5cGVPZihuKTtpZihudWxsPT09ZClyZXR1cm47dD1kLGU9cyxpPXIsbz0hMCxhPWQ9dm9pZCAwfX0saD1pKDcwKSxkPW8oaCksbD1mdW5jdGlvbih0KXtmdW5jdGlvbiBlKHQsaSxvKXtuKHRoaXMsZSksYShPYmplY3QuZ2V0UHJvdG90eXBlT2YoZS5wcm90b3R5cGUpLCJjb25zdHJ1Y3RvciIsdGhpcykuY2FsbCh0aGlzLHQsaSxvKX1yZXR1cm4gcyhlLHQpLHIoZSxbe2tleToicmVzaXplIix2YWx1ZTpmdW5jdGlvbih0KXt0aGlzLl9yZXNpemVTaGFwZSgpfX0se2tleToiZHJhdyIsdmFsdWU6ZnVuY3Rpb24odCxlLGksbyxuKXt0aGlzLl9kcmF3U2hhcGUodCwiY2lyY2xlIiwyLGUsaSxvLG4pfX0se2tleToiZGlzdGFuY2VUb0JvcmRlciIsdmFsdWU6ZnVuY3Rpb24odCxlKXtyZXR1cm4gdGhpcy5yZXNpemUodCksdGhpcy5vcHRpb25zLnNpemUrdGhpcy5vcHRpb25zLmJvcmRlcldpZHRofX1dKSxlfShkWyJkZWZhdWx0Il0pO2VbImRlZmF1bHQiXT1sLHQuZXhwb3J0cz1lWyJkZWZhdWx0Il19LGZ1bmN0aW9uKHQsZSxpKXtmdW5jdGlvbiBvKHQpe3JldHVybiB0JiZ0Ll9fZXNNb2R1bGU/dDp7ImRlZmF1bHQiOnR9fWZ1bmN0aW9uIG4odCxlKXtpZighKHQgaW5zdGFuY2VvZiBlKSl0aHJvdyBuZXcgVHlwZUVycm9yKCJDYW5ub3QgY2FsbCBhIGNsYXNzIGFzIGEgZnVuY3Rpb24iKX1mdW5jdGlvbiBzKHQsZSl7aWYoImZ1bmN0aW9uIiE9dHlwZW9mIGUmJm51bGwhPT1lKXRocm93IG5ldyBUeXBlRXJyb3IoIlN1cGVyIGV4cHJlc3Npb24gbXVzdCBlaXRoZXIgYmUgbnVsbCBvciBhIGZ1bmN0aW9uLCBub3QgIit0eXBlb2YgZSk7dC5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZShlJiZlLnByb3RvdHlwZSx7Y29uc3RydWN0b3I6e3ZhbHVlOnQsZW51bWVyYWJsZTohMSx3cml0YWJsZTohMCxjb25maWd1cmFibGU6ITB9fSksZSYmKE9iamVjdC5zZXRQcm90b3R5cGVPZj9PYmplY3Quc2V0UHJvdG90eXBlT2YodCxlKTp0Ll9fcHJvdG9fXz1lKX1PYmplY3QuZGVmaW5lUHJvcGVydHkoZSwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7dmFyIHI9ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KHQsZSl7Zm9yKHZhciBpPTA7aTxlLmxlbmd0aDtpKyspe3ZhciBvPWVbaV07by5lbnVtZXJhYmxlPW8uZW51bWVyYWJsZXx8ITEsby5jb25maWd1cmFibGU9ITAsInZhbHVlImluIG8mJihvLndyaXRhYmxlPSEwKSxPYmplY3QuZGVmaW5lUHJvcGVydHkodCxvLmtleSxvKX19cmV0dXJuIGZ1bmN0aW9uKGUsaSxvKXtyZXR1cm4gaSYmdChlLnByb3RvdHlwZSxpKSxvJiZ0KGUsbyksZX19KCksYT1mdW5jdGlvbih0LGUsaSl7Zm9yKHZhciBvPSEwO287KXt2YXIgbj10LHM9ZSxyPWk7bz0hMSxudWxsPT09biYmKG49RnVuY3Rpb24ucHJvdG90eXBlKTt2YXIgYT1PYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKG4scyk7aWYodm9pZCAwIT09YSl7aWYoInZhbHVlImluIGEpcmV0dXJuIGEudmFsdWU7dmFyIGg9YS5nZXQ7aWYodm9pZCAwPT09aClyZXR1cm47cmV0dXJuIGguY2FsbChyKX12YXIgZD1PYmplY3QuZ2V0UHJvdG90eXBlT2Yobik7aWYobnVsbD09PWQpcmV0dXJuO3Q9ZCxlPXMsaT1yLG89ITAsYT1kPXZvaWQgMH19LGg9aSg2NCksZD1vKGgpLGw9ZnVuY3Rpb24odCl7ZnVuY3Rpb24gZSh0LGksbyl7bih0aGlzLGUpLGEoT2JqZWN0LmdldFByb3RvdHlwZU9mKGUucHJvdG90eXBlKSwiY29uc3RydWN0b3IiLHRoaXMpLmNhbGwodGhpcyx0LGksbyl9cmV0dXJuIHMoZSx0KSxyKGUsW3trZXk6InJlc2l6ZSIsdmFsdWU6ZnVuY3Rpb24odCxlKXtpZih2b2lkIDA9PT10aGlzLndpZHRoKXt2YXIgaT10aGlzLmxhYmVsTW9kdWxlLmdldFRleHRTaXplKHQsZSk7dGhpcy53aWR0aD0xLjUqaS53aWR0aCx0aGlzLmhlaWdodD0yKmkuaGVpZ2h0LHRoaXMud2lkdGg8dGhpcy5oZWlnaHQmJih0aGlzLndpZHRoPXRoaXMuaGVpZ2h0KSx0aGlzLnJhZGl1cz0uNSp0aGlzLndpZHRofX19LHtrZXk6ImRyYXciLHZhbHVlOmZ1bmN0aW9uKHQsZSxpLG8sbil7dGhpcy5yZXNpemUodCxvKSx0aGlzLmxlZnQ9ZS0uNSp0aGlzLndpZHRoLHRoaXMudG9wPWktLjUqdGhpcy5oZWlnaHQ7dmFyIHM9dGhpcy5vcHRpb25zLmJvcmRlcldpZHRoLHI9dGhpcy5vcHRpb25zLmJvcmRlcldpZHRoU2VsZWN0ZWR8fDIqdGhpcy5vcHRpb25zLmJvcmRlcldpZHRoO3Quc3Ryb2tlU3R5bGU9bz90aGlzLm9wdGlvbnMuY29sb3IuaGlnaGxpZ2h0LmJvcmRlcjpuP3RoaXMub3B0aW9ucy5jb2xvci5ob3Zlci5ib3JkZXI6dGhpcy5vcHRpb25zLmNvbG9yLmJvcmRlcix0LmxpbmVXaWR0aD1vP3I6cyx0LmxpbmVXaWR0aC89dGhpcy5ib2R5LnZpZXcuc2NhbGUsdC5saW5lV2lkdGg9TWF0aC5taW4odGhpcy53aWR0aCx0LmxpbmVXaWR0aCksdC5maWxsU3R5bGU9bz90aGlzLm9wdGlvbnMuY29sb3IuaGlnaGxpZ2h0LmJhY2tncm91bmQ6bj90aGlzLm9wdGlvbnMuY29sb3IuaG92ZXIuYmFja2dyb3VuZDp0aGlzLm9wdGlvbnMuY29sb3IuYmFja2dyb3VuZCx0LmVsbGlwc2UodGhpcy5sZWZ0LHRoaXMudG9wLHRoaXMud2lkdGgsdGhpcy5oZWlnaHQpLHRoaXMuZW5hYmxlU2hhZG93KHQpLHQuZmlsbCgpLHRoaXMuZGlzYWJsZVNoYWRvdyh0KSx0LnNhdmUoKSx0aGlzLmVuYWJsZUJvcmRlckRhc2hlcyh0KSx0LnN0cm9rZSgpLHRoaXMuZGlzYWJsZUJvcmRlckRhc2hlcyh0KSx0LnJlc3RvcmUoKSx0aGlzLnVwZGF0ZUJvdW5kaW5nQm94KGUsaSx0LG8pLHRoaXMubGFiZWxNb2R1bGUuZHJhdyh0LGUsaSxvKX19LHtrZXk6InVwZGF0ZUJvdW5kaW5nQm94Iix2YWx1ZTpmdW5jdGlvbih0LGUsaSxvKXt0aGlzLnJlc2l6ZShpLG8pLHRoaXMubGVmdD10LS41KnRoaXMud2lkdGgsdGhpcy50b3A9ZS0uNSp0aGlzLmhlaWdodCx0aGlzLmJvdW5kaW5nQm94LmxlZnQ9dGhpcy5sZWZ0LHRoaXMuYm91bmRpbmdCb3gudG9wPXRoaXMudG9wLHRoaXMuYm91bmRpbmdCb3guYm90dG9tPXRoaXMudG9wK3RoaXMuaGVpZ2h0LHRoaXMuYm91bmRpbmdCb3gucmlnaHQ9dGhpcy5sZWZ0K3RoaXMud2lkdGh9fSx7a2V5OiJkaXN0YW5jZVRvQm9yZGVyIix2YWx1ZTpmdW5jdGlvbih0LGUpe3RoaXMucmVzaXplKHQpO3ZhciBpPS41KnRoaXMud2lkdGgsbz0uNSp0aGlzLmhlaWdodCxuPU1hdGguc2luKGUpKmkscz1NYXRoLmNvcyhlKSpvO3JldHVybiBpKm8vTWF0aC5zcXJ0KG4qbitzKnMpfX1dKSxlfShkWyJkZWZhdWx0Il0pO2VbImRlZmF1bHQiXT1sLHQuZXhwb3J0cz1lWyJkZWZhdWx0Il19LGZ1bmN0aW9uKHQsZSxpKXtmdW5jdGlvbiBvKHQpe3JldHVybiB0JiZ0Ll9fZXNNb2R1bGU/dDp7ImRlZmF1bHQiOnR9fWZ1bmN0aW9uIG4odCxlKXtpZighKHQgaW5zdGFuY2VvZiBlKSl0aHJvdyBuZXcgVHlwZUVycm9yKCJDYW5ub3QgY2FsbCBhIGNsYXNzIGFzIGEgZnVuY3Rpb24iKX1mdW5jdGlvbiBzKHQsZSl7aWYoImZ1bmN0aW9uIiE9dHlwZW9mIGUmJm51bGwhPT1lKXRocm93IG5ldyBUeXBlRXJyb3IoIlN1cGVyIGV4cHJlc3Npb24gbXVzdCBlaXRoZXIgYmUgbnVsbCBvciBhIGZ1bmN0aW9uLCBub3QgIit0eXBlb2YgZSk7dC5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZShlJiZlLnByb3RvdHlwZSx7Y29uc3RydWN0b3I6e3ZhbHVlOnQsZW51bWVyYWJsZTohMSx3cml0YWJsZTohMCxjb25maWd1cmFibGU6ITB9fSksZSYmKE9iamVjdC5zZXRQcm90b3R5cGVPZj9PYmplY3Quc2V0UHJvdG90eXBlT2YodCxlKTp0Ll9fcHJvdG9fXz1lKX1PYmplY3QuZGVmaW5lUHJvcGVydHkoZSwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7dmFyIHI9ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KHQsZSl7Zm9yKHZhciBpPTA7aTxlLmxlbmd0aDtpKyspe3ZhciBvPWVbaV07by5lbnVtZXJhYmxlPW8uZW51bWVyYWJsZXx8ITEsby5jb25maWd1cmFibGU9ITAsInZhbHVlImluIG8mJihvLndyaXRhYmxlPSEwKSxPYmplY3QuZGVmaW5lUHJvcGVydHkodCxvLmtleSxvKX19cmV0dXJuIGZ1bmN0aW9uKGUsaSxvKXtyZXR1cm4gaSYmdChlLnByb3RvdHlwZSxpKSxvJiZ0KGUsbyksZX19KCksYT1mdW5jdGlvbih0LGUsaSl7Zm9yKHZhciBvPSEwO287KXt2YXIgbj10LHM9ZSxyPWk7bz0hMSxudWxsPT09biYmKG49RnVuY3Rpb24ucHJvdG90eXBlKTt2YXIgYT1PYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKG4scyk7aWYodm9pZCAwIT09YSl7aWYoInZhbHVlImluIGEpcmV0dXJuIGEudmFsdWU7dmFyIGg9YS5nZXQ7aWYodm9pZCAwPT09aClyZXR1cm47cmV0dXJuIGguY2FsbChyKX12YXIgZD1PYmplY3QuZ2V0UHJvdG90eXBlT2Yobik7aWYobnVsbD09PWQpcmV0dXJuO3Q9ZCxlPXMsaT1yLG89ITAsYT1kPXZvaWQgMH19LGg9aSg2NCksZD1vKGgpLGw9ZnVuY3Rpb24odCl7ZnVuY3Rpb24gZSh0LGksbyl7bih0aGlzLGUpLGEoT2JqZWN0LmdldFByb3RvdHlwZU9mKGUucHJvdG90eXBlKSwiY29uc3RydWN0b3IiLHRoaXMpLmNhbGwodGhpcyx0LGksbyl9cmV0dXJuIHMoZSx0KSxyKGUsW3trZXk6InJlc2l6ZSIsdmFsdWU6ZnVuY3Rpb24odCl7aWYodm9pZCAwPT09dGhpcy53aWR0aCl7dmFyIGU9NSxpPXt3aWR0aDpOdW1iZXIodGhpcy5vcHRpb25zLmljb24uc2l6ZSksaGVpZ2h0Ok51bWJlcih0aGlzLm9wdGlvbnMuaWNvbi5zaXplKX07dGhpcy53aWR0aD1pLndpZHRoKzIqZSx0aGlzLmhlaWdodD1pLmhlaWdodCsyKmUsdGhpcy5yYWRpdXM9LjUqdGhpcy53aWR0aH19fSx7a2V5OiJkcmF3Iix2YWx1ZTpmdW5jdGlvbih0LGUsaSxvLG4pe2lmKHRoaXMucmVzaXplKHQpLHRoaXMub3B0aW9ucy5pY29uLnNpemU9dGhpcy5vcHRpb25zLmljb24uc2l6ZXx8NTAsdGhpcy5sZWZ0PWUtLjUqdGhpcy53aWR0aCx0aGlzLnRvcD1pLS41KnRoaXMuaGVpZ2h0LHRoaXMuX2ljb24odCxlLGksbyksdm9pZCAwIT09dGhpcy5vcHRpb25zLmxhYmVsKXt2YXIgcz01O3RoaXMubGFiZWxNb2R1bGUuZHJhdyh0LGUsaSsuNSp0aGlzLmhlaWdodCtzLG8pfXRoaXMudXBkYXRlQm91bmRpbmdCb3goZSxpKX19LHtrZXk6InVwZGF0ZUJvdW5kaW5nQm94Iix2YWx1ZTpmdW5jdGlvbih0LGUpe2lmKHRoaXMuYm91bmRpbmdCb3gudG9wPWUtLjUqdGhpcy5vcHRpb25zLmljb24uc2l6ZSx0aGlzLmJvdW5kaW5nQm94LmxlZnQ9dC0uNSp0aGlzLm9wdGlvbnMuaWNvbi5zaXplLHRoaXMuYm91bmRpbmdCb3gucmlnaHQ9dCsuNSp0aGlzLm9wdGlvbnMuaWNvbi5zaXplLHRoaXMuYm91bmRpbmdCb3guYm90dG9tPWUrLjUqdGhpcy5vcHRpb25zLmljb24uc2l6ZSx2b2lkIDAhPT10aGlzLm9wdGlvbnMubGFiZWwmJnRoaXMubGFiZWxNb2R1bGUuc2l6ZS53aWR0aD4wKXt2YXIgaT01O3RoaXMuYm91bmRpbmdCb3gubGVmdD1NYXRoLm1pbih0aGlzLmJvdW5kaW5nQm94LmxlZnQsdGhpcy5sYWJlbE1vZHVsZS5zaXplLmxlZnQpLHRoaXMuYm91bmRpbmdCb3gucmlnaHQ9TWF0aC5tYXgodGhpcy5ib3VuZGluZ0JveC5yaWdodCx0aGlzLmxhYmVsTW9kdWxlLnNpemUubGVmdCt0aGlzLmxhYmVsTW9kdWxlLnNpemUud2lkdGgpLHRoaXMuYm91bmRpbmdCb3guYm90dG9tPU1hdGgubWF4KHRoaXMuYm91bmRpbmdCb3guYm90dG9tLHRoaXMuYm91bmRpbmdCb3guYm90dG9tK3RoaXMubGFiZWxNb2R1bGUuc2l6ZS5oZWlnaHQraSl9fX0se2tleToiX2ljb24iLHZhbHVlOmZ1bmN0aW9uKHQsZSxpLG8pe3ZhciBuPU51bWJlcih0aGlzLm9wdGlvbnMuaWNvbi5zaXplKTt2b2lkIDAhPT10aGlzLm9wdGlvbnMuaWNvbi5jb2RlPyh0LmZvbnQ9KG8/ImJvbGQgIjoiIikrbisicHggIit0aGlzLm9wdGlvbnMuaWNvbi5mYWNlLHQuZmlsbFN0eWxlPXRoaXMub3B0aW9ucy5pY29uLmNvbG9yfHwiYmxhY2siLHQudGV4dEFsaWduPSJjZW50ZXIiLHQudGV4dEJhc2VsaW5lPSJtaWRkbGUiLHRoaXMuZW5hYmxlU2hhZG93KHQpLHQuZmlsbFRleHQodGhpcy5vcHRpb25zLmljb24uY29kZSxlLGkpLHRoaXMuZGlzYWJsZVNoYWRvdyh0KSk6Y29uc29sZS5lcnJvcigiV2hlbiB1c2luZyB0aGUgaWNvbiBzaGFwZSwgeW91IG5lZWQgdG8gZGVmaW5lIHRoZSBjb2RlIGluIHRoZSBpY29uIG9wdGlvbnMgb2JqZWN0LiBUaGlzIGNhbiBiZSBkb25lIHBlciBub2RlIG9yIGdsb2JhbGx5LiIpfX0se2tleToiZGlzdGFuY2VUb0JvcmRlciIsdmFsdWU6ZnVuY3Rpb24odCxlKXtyZXR1cm4gdGhpcy5fZGlzdGFuY2VUb0JvcmRlcih0LGUpfX1dKSxlfShkWyJkZWZhdWx0Il0pO2VbImRlZmF1bHQiXT1sLHQuZXhwb3J0cz1lWyJkZWZhdWx0Il19LGZ1bmN0aW9uKHQsZSxpKXtmdW5jdGlvbiBvKHQpe3JldHVybiB0JiZ0Ll9fZXNNb2R1bGU/dDp7ImRlZmF1bHQiOnR9fWZ1bmN0aW9uIG4odCxlKXtpZighKHQgaW5zdGFuY2VvZiBlKSl0aHJvdyBuZXcgVHlwZUVycm9yKCJDYW5ub3QgY2FsbCBhIGNsYXNzIGFzIGEgZnVuY3Rpb24iKX1mdW5jdGlvbiBzKHQsZSl7aWYoImZ1bmN0aW9uIiE9dHlwZW9mIGUmJm51bGwhPT1lKXRocm93IG5ldyBUeXBlRXJyb3IoIlN1cGVyIGV4cHJlc3Npb24gbXVzdCBlaXRoZXIgYmUgbnVsbCBvciBhIGZ1bmN0aW9uLCBub3QgIit0eXBlb2YgZSk7dC5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZShlJiZlLnByb3RvdHlwZSx7Y29uc3RydWN0b3I6e3ZhbHVlOnQsZW51bWVyYWJsZTohMSx3cml0YWJsZTohMCxjb25maWd1cmFibGU6ITB9fSksZSYmKE9iamVjdC5zZXRQcm90b3R5cGVPZj9PYmplY3Quc2V0UHJvdG90eXBlT2YodCxlKTp0Ll9fcHJvdG9fXz1lKX1PYmplY3QuZGVmaW5lUHJvcGVydHkoZSwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7dmFyIHI9ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KHQsZSl7Zm9yKHZhciBpPTA7aTxlLmxlbmd0aDtpKyspe3ZhciBvPWVbaV07by5lbnVtZXJhYmxlPW8uZW51bWVyYWJsZXx8ITEsby5jb25maWd1cmFibGU9ITAsInZhbHVlImluIG8mJihvLndyaXRhYmxlPSEwKSxPYmplY3QuZGVmaW5lUHJvcGVydHkodCxvLmtleSxvKX19cmV0dXJuIGZ1bmN0aW9uKGUsaSxvKXtyZXR1cm4gaSYmdChlLnByb3RvdHlwZSxpKSxvJiZ0KGUsbyksZX19KCksYT1mdW5jdGlvbih0LGUsaSl7Zm9yKHZhciBvPSEwO287KXt2YXIgbj10LHM9ZSxyPWk7bz0hMSxudWxsPT09biYmKG49RnVuY3Rpb24ucHJvdG90eXBlKTt2YXIgYT1PYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKG4scyk7aWYodm9pZCAwIT09YSl7aWYoInZhbHVlImluIGEpcmV0dXJuIGEudmFsdWU7dmFyIGg9YS5nZXQ7aWYodm9pZCAwPT09aClyZXR1cm47cmV0dXJuIGguY2FsbChyKX12YXIgZD1PYmplY3QuZ2V0UHJvdG90eXBlT2Yobik7aWYobnVsbD09PWQpcmV0dXJuO3Q9ZCxlPXMsaT1yLG89ITAsYT1kPXZvaWQgMH19LGg9aSg2NiksZD1vKGgpLGw9ZnVuY3Rpb24odCl7ZnVuY3Rpb24gZSh0LGksbyxzKXtuKHRoaXMsZSksYShPYmplY3QuZ2V0UHJvdG90eXBlT2YoZS5wcm90b3R5cGUpLCJjb25zdHJ1Y3RvciIsdGhpcykuY2FsbCh0aGlzLHQsaSxvKSx0aGlzLmltYWdlT2JqPXN9cmV0dXJuIHMoZSx0KSxyKGUsW3trZXk6InJlc2l6ZSIsdmFsdWU6ZnVuY3Rpb24oKXt0aGlzLl9yZXNpemVJbWFnZSgpfX0se2tleToiZHJhdyIsdmFsdWU6ZnVuY3Rpb24odCxlLGksbyxuKXtpZih0aGlzLnJlc2l6ZSgpLHRoaXMubGVmdD1lLXRoaXMud2lkdGgvMix0aGlzLnRvcD1pLXRoaXMuaGVpZ2h0LzIsdGhpcy5vcHRpb25zLnNoYXBlUHJvcGVydGllcy51c2VCb3JkZXJXaXRoSW1hZ2U9PT0hMCl7dmFyIHM9dGhpcy5vcHRpb25zLmJvcmRlcldpZHRoLHI9dGhpcy5vcHRpb25zLmJvcmRlcldpZHRoU2VsZWN0ZWR8fDIqdGhpcy5vcHRpb25zLmJvcmRlcldpZHRoO3QuYmVnaW5QYXRoKCksdC5zdHJva2VTdHlsZT1vP3RoaXMub3B0aW9ucy5jb2xvci5oaWdobGlnaHQuYm9yZGVyOm4/dGhpcy5vcHRpb25zLmNvbG9yLmhvdmVyLmJvcmRlcjp0aGlzLm9wdGlvbnMuY29sb3IuYm9yZGVyLHQubGluZVdpZHRoPW8/cjpzLHQubGluZVdpZHRoLz10aGlzLmJvZHkudmlldy5zY2FsZSx0LmxpbmVXaWR0aD1NYXRoLm1pbih0aGlzLndpZHRoLHQubGluZVdpZHRoKSx0LmZpbGxTdHlsZT1vP3RoaXMub3B0aW9ucy5jb2xvci5oaWdobGlnaHQuYmFja2dyb3VuZDpuP3RoaXMub3B0aW9ucy5jb2xvci5ob3Zlci5iYWNrZ3JvdW5kOnRoaXMub3B0aW9ucy5jb2xvci5iYWNrZ3JvdW5kLHQucmVjdCh0aGlzLmxlZnQtLjUqdC5saW5lV2lkdGgsdGhpcy50b3AtLjUqdC5saW5lV2lkdGgsdGhpcy53aWR0aCt0LmxpbmVXaWR0aCx0aGlzLmhlaWdodCt0LmxpbmVXaWR0aCksdC5maWxsKCksdC5zYXZlKCksdGhpcy5lbmFibGVCb3JkZXJEYXNoZXModCksdC5zdHJva2UoKSx0aGlzLmRpc2FibGVCb3JkZXJEYXNoZXModCksdC5yZXN0b3JlKCksdC5jbG9zZVBhdGgoKX10aGlzLl9kcmF3SW1hZ2VBdFBvc2l0aW9uKHQpLHRoaXMuX2RyYXdJbWFnZUxhYmVsKHQsZSxpLG98fG4pLHRoaXMudXBkYXRlQm91bmRpbmdCb3goZSxpKX19LHtrZXk6InVwZGF0ZUJvdW5kaW5nQm94Iix2YWx1ZTpmdW5jdGlvbih0LGUpe3RoaXMucmVzaXplKCksdGhpcy5sZWZ0PXQtdGhpcy53aWR0aC8yLHRoaXMudG9wPWUtdGhpcy5oZWlnaHQvMix0aGlzLmJvdW5kaW5nQm94LnRvcD10aGlzLnRvcCx0aGlzLmJvdW5kaW5nQm94LmxlZnQ9dGhpcy5sZWZ0LHRoaXMuYm91bmRpbmdCb3gucmlnaHQ9dGhpcy5sZWZ0K3RoaXMud2lkdGgsdGhpcy5ib3VuZGluZ0JveC5ib3R0b209dGhpcy50b3ArdGhpcy5oZWlnaHQsdm9pZCAwIT09dGhpcy5vcHRpb25zLmxhYmVsJiZ0aGlzLmxhYmVsTW9kdWxlLnNpemUud2lkdGg+MCYmKHRoaXMuYm91bmRpbmdCb3gubGVmdD1NYXRoLm1pbih0aGlzLmJvdW5kaW5nQm94LmxlZnQsdGhpcy5sYWJlbE1vZHVsZS5zaXplLmxlZnQpLHRoaXMuYm91bmRpbmdCb3gucmlnaHQ9TWF0aC5tYXgodGhpcy5ib3VuZGluZ0JveC5yaWdodCx0aGlzLmxhYmVsTW9kdWxlLnNpemUubGVmdCt0aGlzLmxhYmVsTW9kdWxlLnNpemUud2lkdGgpLHRoaXMuYm91bmRpbmdCb3guYm90dG9tPU1hdGgubWF4KHRoaXMuYm91bmRpbmdCb3guYm90dG9tLHRoaXMuYm91bmRpbmdCb3guYm90dG9tK3RoaXMubGFiZWxPZmZzZXQpKX19LHtrZXk6ImRpc3RhbmNlVG9Cb3JkZXIiLHZhbHVlOmZ1bmN0aW9uKHQsZSl7cmV0dXJuIHRoaXMuX2Rpc3RhbmNlVG9Cb3JkZXIodCxlKX19XSksZX0oZFsiZGVmYXVsdCJdKTtlWyJkZWZhdWx0Il09bCx0LmV4cG9ydHM9ZVsiZGVmYXVsdCJdfSxmdW5jdGlvbih0LGUsaSl7ZnVuY3Rpb24gbyh0KXtyZXR1cm4gdCYmdC5fX2VzTW9kdWxlP3Q6eyJkZWZhdWx0Ijp0fX1mdW5jdGlvbiBuKHQsZSl7aWYoISh0IGluc3RhbmNlb2YgZSkpdGhyb3cgbmV3IFR5cGVFcnJvcigiQ2Fubm90IGNhbGwgYSBjbGFzcyBhcyBhIGZ1bmN0aW9uIil9ZnVuY3Rpb24gcyh0LGUpe2lmKCJmdW5jdGlvbiIhPXR5cGVvZiBlJiZudWxsIT09ZSl0aHJvdyBuZXcgVHlwZUVycm9yKCJTdXBlciBleHByZXNzaW9uIG11c3QgZWl0aGVyIGJlIG51bGwgb3IgYSBmdW5jdGlvbiwgbm90ICIrdHlwZW9mIGUpO3QucHJvdG90eXBlPU9iamVjdC5jcmVhdGUoZSYmZS5wcm90b3R5cGUse2NvbnN0cnVjdG9yOnt2YWx1ZTp0LGVudW1lcmFibGU6ITEsd3JpdGFibGU6ITAsY29uZmlndXJhYmxlOiEwfX0pLGUmJihPYmplY3Quc2V0UHJvdG90eXBlT2Y/T2JqZWN0LnNldFByb3RvdHlwZU9mKHQsZSk6dC5fX3Byb3RvX189ZSl9T2JqZWN0LmRlZmluZVByb3BlcnR5KGUsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3ZhciByPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCh0LGUpe2Zvcih2YXIgaT0wO2k8ZS5sZW5ndGg7aSsrKXt2YXIgbz1lW2ldO28uZW51bWVyYWJsZT1vLmVudW1lcmFibGV8fCExLG8uY29uZmlndXJhYmxlPSEwLCJ2YWx1ZSJpbiBvJiYoby53cml0YWJsZT0hMCksT2JqZWN0LmRlZmluZVByb3BlcnR5KHQsby5rZXksbyl9fXJldHVybiBmdW5jdGlvbihlLGksbyl7cmV0dXJuIGkmJnQoZS5wcm90b3R5cGUsaSksbyYmdChlLG8pLGV9fSgpLGE9ZnVuY3Rpb24odCxlLGkpe2Zvcih2YXIgbz0hMDtvOyl7dmFyIG49dCxzPWUscj1pO289ITEsbnVsbD09PW4mJihuPUZ1bmN0aW9uLnByb3RvdHlwZSk7dmFyIGE9T2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihuLHMpO2lmKHZvaWQgMCE9PWEpe2lmKCJ2YWx1ZSJpbiBhKXJldHVybiBhLnZhbHVlO3ZhciBoPWEuZ2V0O2lmKHZvaWQgMD09PWgpcmV0dXJuO3JldHVybiBoLmNhbGwocil9dmFyIGQ9T2JqZWN0LmdldFByb3RvdHlwZU9mKG4pO2lmKG51bGw9PT1kKXJldHVybjt0PWQsZT1zLGk9cixvPSEwLGE9ZD12b2lkIDB9fSxoPWkoNzApLGQ9byhoKSxsPWZ1bmN0aW9uKHQpe2Z1bmN0aW9uIGUodCxpLG8pe24odGhpcyxlKSxhKE9iamVjdC5nZXRQcm90b3R5cGVPZihlLnByb3RvdHlwZSksImNvbnN0cnVjdG9yIix0aGlzKS5jYWxsKHRoaXMsdCxpLG8pfXJldHVybiBzKGUsdCkscihlLFt7a2V5OiJyZXNpemUiLHZhbHVlOmZ1bmN0aW9uKCl7dGhpcy5fcmVzaXplU2hhcGUoKX19LHtrZXk6ImRyYXciLHZhbHVlOmZ1bmN0aW9uKHQsZSxpLG8sbil7dGhpcy5fZHJhd1NoYXBlKHQsInNxdWFyZSIsMixlLGksbyxuKX19LHtrZXk6ImRpc3RhbmNlVG9Cb3JkZXIiLHZhbHVlOmZ1bmN0aW9uKHQsZSl7cmV0dXJuIHRoaXMuX2Rpc3RhbmNlVG9Cb3JkZXIodCxlKX19XSksZX0oZFsiZGVmYXVsdCJdKTtlWyJkZWZhdWx0Il09bCx0LmV4cG9ydHM9ZVsiZGVmYXVsdCJdfSxmdW5jdGlvbih0LGUsaSl7ZnVuY3Rpb24gbyh0KXtyZXR1cm4gdCYmdC5fX2VzTW9kdWxlP3Q6eyJkZWZhdWx0Ijp0fX1mdW5jdGlvbiBuKHQsZSl7aWYoISh0IGluc3RhbmNlb2YgZSkpdGhyb3cgbmV3IFR5cGVFcnJvcigiQ2Fubm90IGNhbGwgYSBjbGFzcyBhcyBhIGZ1bmN0aW9uIil9ZnVuY3Rpb24gcyh0LGUpe2lmKCJmdW5jdGlvbiIhPXR5cGVvZiBlJiZudWxsIT09ZSl0aHJvdyBuZXcgVHlwZUVycm9yKCJTdXBlciBleHByZXNzaW9uIG11c3QgZWl0aGVyIGJlIG51bGwgb3IgYSBmdW5jdGlvbiwgbm90ICIrdHlwZW9mIGUpO3QucHJvdG90eXBlPU9iamVjdC5jcmVhdGUoZSYmZS5wcm90b3R5cGUse2NvbnN0cnVjdG9yOnt2YWx1ZTp0LGVudW1lcmFibGU6ITEsd3JpdGFibGU6ITAsY29uZmlndXJhYmxlOiEwfX0pLGUmJihPYmplY3Quc2V0UHJvdG90eXBlT2Y/T2JqZWN0LnNldFByb3RvdHlwZU9mKHQsZSk6dC5fX3Byb3RvX189ZSl9T2JqZWN0LmRlZmluZVByb3BlcnR5KGUsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3ZhciByPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCh0LGUpe2Zvcih2YXIgaT0wO2k8ZS5sZW5ndGg7aSsrKXt2YXIgbz1lW2ldO28uZW51bWVyYWJsZT1vLmVudW1lcmFibGV8fCExLG8uY29uZmlndXJhYmxlPSEwLCJ2YWx1ZSJpbiBvJiYoby53cml0YWJsZT0hMCksT2JqZWN0LmRlZmluZVByb3BlcnR5KHQsby5rZXksbyl9fXJldHVybiBmdW5jdGlvbihlLGksbyl7cmV0dXJuIGkmJnQoZS5wcm90b3R5cGUsaSksbyYmdChlLG8pLGV9fSgpLGE9ZnVuY3Rpb24odCxlLGkpe2Zvcih2YXIgbz0hMDtvOyl7dmFyIG49dCxzPWUscj1pO289ITEsbnVsbD09PW4mJihuPUZ1bmN0aW9uLnByb3RvdHlwZSk7dmFyIGE9T2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihuLHMpO2lmKHZvaWQgMCE9PWEpe2lmKCJ2YWx1ZSJpbiBhKXJldHVybiBhLnZhbHVlO3ZhciBoPWEuZ2V0O2lmKHZvaWQgMD09PWgpcmV0dXJuO3JldHVybiBoLmNhbGwocil9dmFyIGQ9T2JqZWN0LmdldFByb3RvdHlwZU9mKG4pO2lmKG51bGw9PT1kKXJldHVybjt0PWQsZT1zLGk9cixvPSEwLGE9ZD12b2lkIDB9fSxoPWkoNzApLGQ9byhoKSxsPWZ1bmN0aW9uKHQpe2Z1bmN0aW9uIGUodCxpLG8pe24odGhpcyxlKSxhKE9iamVjdC5nZXRQcm90b3R5cGVPZihlLnByb3RvdHlwZSksImNvbnN0cnVjdG9yIix0aGlzKS5jYWxsKHRoaXMsdCxpLG8pfXJldHVybiBzKGUsdCkscihlLFt7a2V5OiJyZXNpemUiLHZhbHVlOmZ1bmN0aW9uKHQpe3RoaXMuX3Jlc2l6ZVNoYXBlKCl9fSx7a2V5OiJkcmF3Iix2YWx1ZTpmdW5jdGlvbih0LGUsaSxvLG4pe3RoaXMuX2RyYXdTaGFwZSh0LCJzdGFyIiw0LGUsaSxvLG4pfX0se2tleToiZGlzdGFuY2VUb0JvcmRlciIsdmFsdWU6ZnVuY3Rpb24odCxlKXtyZXR1cm4gdGhpcy5fZGlzdGFuY2VUb0JvcmRlcih0LGUpfX1dKSxlfShkWyJkZWZhdWx0Il0pO2VbImRlZmF1bHQiXT1sLHQuZXhwb3J0cz1lWyJkZWZhdWx0Il19LGZ1bmN0aW9uKHQsZSxpKXtmdW5jdGlvbiBvKHQpe3JldHVybiB0JiZ0Ll9fZXNNb2R1bGU/dDp7ImRlZmF1bHQiOnR9fWZ1bmN0aW9uIG4odCxlKXtpZighKHQgaW5zdGFuY2VvZiBlKSl0aHJvdyBuZXcgVHlwZUVycm9yKCJDYW5ub3QgY2FsbCBhIGNsYXNzIGFzIGEgZnVuY3Rpb24iKX1mdW5jdGlvbiBzKHQsZSl7aWYoImZ1bmN0aW9uIiE9dHlwZW9mIGUmJm51bGwhPT1lKXRocm93IG5ldyBUeXBlRXJyb3IoIlN1cGVyIGV4cHJlc3Npb24gbXVzdCBlaXRoZXIgYmUgbnVsbCBvciBhIGZ1bmN0aW9uLCBub3QgIit0eXBlb2YgZSk7dC5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZShlJiZlLnByb3RvdHlwZSx7Y29uc3RydWN0b3I6e3ZhbHVlOnQsZW51bWVyYWJsZTohMSx3cml0YWJsZTohMCxjb25maWd1cmFibGU6ITB9fSksZSYmKE9iamVjdC5zZXRQcm90b3R5cGVPZj9PYmplY3Quc2V0UHJvdG90eXBlT2YodCxlKTp0Ll9fcHJvdG9fXz1lKX1PYmplY3QuZGVmaW5lUHJvcGVydHkoZSwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7dmFyIHI9ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KHQsZSl7Zm9yKHZhciBpPTA7aTxlLmxlbmd0aDtpKyspe3ZhciBvPWVbaV07by5lbnVtZXJhYmxlPW8uZW51bWVyYWJsZXx8ITEsby5jb25maWd1cmFibGU9ITAsInZhbHVlImluIG8mJihvLndyaXRhYmxlPSEwKSxPYmplY3QuZGVmaW5lUHJvcGVydHkodCxvLmtleSxvKX19cmV0dXJuIGZ1bmN0aW9uKGUsaSxvKXtyZXR1cm4gaSYmdChlLnByb3RvdHlwZSxpKSxvJiZ0KGUsbyksZX19KCksYT1mdW5jdGlvbih0LGUsaSl7Zm9yKHZhciBvPSEwO287KXt2YXIgbj10LHM9ZSxyPWk7bz0hMSxudWxsPT09biYmKG49RnVuY3Rpb24ucHJvdG90eXBlKTt2YXIgYT1PYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKG4scyk7aWYodm9pZCAwIT09YSl7aWYoInZhbHVlImluIGEpcmV0dXJuIGEudmFsdWU7dmFyIGg9YS5nZXQ7aWYodm9pZCAwPT09aClyZXR1cm47cmV0dXJuIGguY2FsbChyKX12YXIgZD1PYmplY3QuZ2V0UHJvdG90eXBlT2Yobik7aWYobnVsbD09PWQpcmV0dXJuO3Q9ZCxlPXMsaT1yLG89ITAsYT1kPXZvaWQgMH19LGg9aSg2NCksZD1vKGgpLGw9ZnVuY3Rpb24odCl7ZnVuY3Rpb24gZSh0LGksbyl7bih0aGlzLGUpLGEoT2JqZWN0LmdldFByb3RvdHlwZU9mKGUucHJvdG90eXBlKSwiY29uc3RydWN0b3IiLHRoaXMpLmNhbGwodGhpcyx0LGksbyl9cmV0dXJuIHMoZSx0KSxyKGUsW3trZXk6InJlc2l6ZSIsdmFsdWU6ZnVuY3Rpb24odCxlKXtpZih2b2lkIDA9PT10aGlzLndpZHRoKXt2YXIgaT01LG89dGhpcy5sYWJlbE1vZHVsZS5nZXRUZXh0U2l6ZSh0LGUpO3RoaXMud2lkdGg9by53aWR0aCsyKmksdGhpcy5oZWlnaHQ9by5oZWlnaHQrMippLHRoaXMucmFkaXVzPS41KnRoaXMud2lkdGh9fX0se2tleToiZHJhdyIsdmFsdWU6ZnVuY3Rpb24odCxlLGksbyxuKXt0aGlzLnJlc2l6ZSh0LG98fG4pLHRoaXMubGVmdD1lLXRoaXMud2lkdGgvMix0aGlzLnRvcD1pLXRoaXMuaGVpZ2h0LzIsdGhpcy5lbmFibGVTaGFkb3codCksdGhpcy5sYWJlbE1vZHVsZS5kcmF3KHQsZSxpLG98fG4pLHRoaXMuZGlzYWJsZVNoYWRvdyh0KSx0aGlzLnVwZGF0ZUJvdW5kaW5nQm94KGUsaSx0LG8pfX0se2tleToidXBkYXRlQm91bmRpbmdCb3giLHZhbHVlOmZ1bmN0aW9uKHQsZSxpLG8pe3RoaXMucmVzaXplKGksbyksdGhpcy5sZWZ0PXQtdGhpcy53aWR0aC8yLHRoaXMudG9wPWUtdGhpcy5oZWlnaHQvMix0aGlzLmJvdW5kaW5nQm94LnRvcD10aGlzLnRvcCx0aGlzLmJvdW5kaW5nQm94LmxlZnQ9dGhpcy5sZWZ0LHRoaXMuYm91bmRpbmdCb3gucmlnaHQ9dGhpcy5sZWZ0K3RoaXMud2lkdGgsdGhpcy5ib3VuZGluZ0JveC5ib3R0b209dGhpcy50b3ArdGhpcy5oZWlnaHR9fSx7a2V5OiJkaXN0YW5jZVRvQm9yZGVyIix2YWx1ZTpmdW5jdGlvbih0LGUpe3JldHVybiB0aGlzLl9kaXN0YW5jZVRvQm9yZGVyKHQsZSl9fV0pLGV9KGRbImRlZmF1bHQiXSk7ZVsiZGVmYXVsdCJdPWwsdC5leHBvcnRzPWVbImRlZmF1bHQiXX0sZnVuY3Rpb24odCxlLGkpe2Z1bmN0aW9uIG8odCl7cmV0dXJuIHQmJnQuX19lc01vZHVsZT90OnsiZGVmYXVsdCI6dH19ZnVuY3Rpb24gbih0LGUpe2lmKCEodCBpbnN0YW5jZW9mIGUpKXRocm93IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCBjYWxsIGEgY2xhc3MgYXMgYSBmdW5jdGlvbiIpfWZ1bmN0aW9uIHModCxlKXtpZigiZnVuY3Rpb24iIT10eXBlb2YgZSYmbnVsbCE9PWUpdGhyb3cgbmV3IFR5cGVFcnJvcigiU3VwZXIgZXhwcmVzc2lvbiBtdXN0IGVpdGhlciBiZSBudWxsIG9yIGEgZnVuY3Rpb24sIG5vdCAiK3R5cGVvZiBlKTt0LnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKGUmJmUucHJvdG90eXBlLHtjb25zdHJ1Y3Rvcjp7dmFsdWU6dCxlbnVtZXJhYmxlOiExLHdyaXRhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH19KSxlJiYoT2JqZWN0LnNldFByb3RvdHlwZU9mP09iamVjdC5zZXRQcm90b3R5cGVPZih0LGUpOnQuX19wcm90b19fPWUpfU9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt2YXIgcj1mdW5jdGlvbigpe2Z1bmN0aW9uIHQodCxlKXtmb3IodmFyIGk9MDtpPGUubGVuZ3RoO2krKyl7dmFyIG89ZVtpXTtvLmVudW1lcmFibGU9by5lbnVtZXJhYmxlfHwhMSxvLmNvbmZpZ3VyYWJsZT0hMCwidmFsdWUiaW4gbyYmKG8ud3JpdGFibGU9ITApLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LG8ua2V5LG8pfX1yZXR1cm4gZnVuY3Rpb24oZSxpLG8pe3JldHVybiBpJiZ0KGUucHJvdG90eXBlLGkpLG8mJnQoZSxvKSxlfX0oKSxhPWZ1bmN0aW9uKHQsZSxpKXtmb3IodmFyIG89ITA7bzspe3ZhciBuPXQscz1lLHI9aTtvPSExLG51bGw9PT1uJiYobj1GdW5jdGlvbi5wcm90b3R5cGUpO3ZhciBhPU9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IobixzKTtpZih2b2lkIDAhPT1hKXtpZigidmFsdWUiaW4gYSlyZXR1cm4gYS52YWx1ZTt2YXIgaD1hLmdldDtpZih2b2lkIDA9PT1oKXJldHVybjtyZXR1cm4gaC5jYWxsKHIpfXZhciBkPU9iamVjdC5nZXRQcm90b3R5cGVPZihuKTtpZihudWxsPT09ZClyZXR1cm47dD1kLGU9cyxpPXIsbz0hMCxhPWQ9dm9pZCAwfX0saD1pKDcwKSxkPW8oaCksbD1mdW5jdGlvbih0KXtmdW5jdGlvbiBlKHQsaSxvKXtuKHRoaXMsZSksYShPYmplY3QuZ2V0UHJvdG90eXBlT2YoZS5wcm90b3R5cGUpLCJjb25zdHJ1Y3RvciIsdGhpcykuY2FsbCh0aGlzLHQsaSxvKX1yZXR1cm4gcyhlLHQpLHIoZSxbe2tleToicmVzaXplIix2YWx1ZTpmdW5jdGlvbih0KXt0aGlzLl9yZXNpemVTaGFwZSgpfX0se2tleToiZHJhdyIsdmFsdWU6ZnVuY3Rpb24odCxlLGksbyxuKXt0aGlzLl9kcmF3U2hhcGUodCwidHJpYW5nbGUiLDMsZSxpLG8sbil9fSx7a2V5OiJkaXN0YW5jZVRvQm9yZGVyIix2YWx1ZTpmdW5jdGlvbih0LGUpe3JldHVybiB0aGlzLl9kaXN0YW5jZVRvQm9yZGVyKHQsZSl9fV0pLGV9KGRbImRlZmF1bHQiXSk7ZVsiZGVmYXVsdCJdPWwsdC5leHBvcnRzPWVbImRlZmF1bHQiXX0sZnVuY3Rpb24odCxlLGkpe2Z1bmN0aW9uIG8odCl7cmV0dXJuIHQmJnQuX19lc01vZHVsZT90OnsiZGVmYXVsdCI6dH19ZnVuY3Rpb24gbih0LGUpe2lmKCEodCBpbnN0YW5jZW9mIGUpKXRocm93IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCBjYWxsIGEgY2xhc3MgYXMgYSBmdW5jdGlvbiIpfWZ1bmN0aW9uIHModCxlKXtpZigiZnVuY3Rpb24iIT10eXBlb2YgZSYmbnVsbCE9PWUpdGhyb3cgbmV3IFR5cGVFcnJvcigiU3VwZXIgZXhwcmVzc2lvbiBtdXN0IGVpdGhlciBiZSBudWxsIG9yIGEgZnVuY3Rpb24sIG5vdCAiK3R5cGVvZiBlKTt0LnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKGUmJmUucHJvdG90eXBlLHtjb25zdHJ1Y3Rvcjp7dmFsdWU6dCxlbnVtZXJhYmxlOiExLHdyaXRhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH19KSxlJiYoT2JqZWN0LnNldFByb3RvdHlwZU9mP09iamVjdC5zZXRQcm90b3R5cGVPZih0LGUpOnQuX19wcm90b19fPWUpfU9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt2YXIgcj1mdW5jdGlvbigpe2Z1bmN0aW9uIHQodCxlKXtmb3IodmFyIGk9MDtpPGUubGVuZ3RoO2krKyl7dmFyIG89ZVtpXTtvLmVudW1lcmFibGU9by5lbnVtZXJhYmxlfHwhMSxvLmNvbmZpZ3VyYWJsZT0hMCwidmFsdWUiaW4gbyYmKG8ud3JpdGFibGU9ITApLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LG8ua2V5LG8pfX1yZXR1cm4gZnVuY3Rpb24oZSxpLG8pe3JldHVybiBpJiZ0KGUucHJvdG90eXBlLGkpLG8mJnQoZSxvKSxlfX0oKSxhPWZ1bmN0aW9uKHQsZSxpKXtmb3IodmFyIG89ITA7bzspe3ZhciBuPXQscz1lLHI9aTtvPSExLG51bGw9PT1uJiYobj1GdW5jdGlvbi5wcm90b3R5cGUpO3ZhciBhPU9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IobixzKTtpZih2b2lkIDAhPT1hKXtpZigidmFsdWUiaW4gYSlyZXR1cm4gYS52YWx1ZTt2YXIgaD1hLmdldDtpZih2b2lkIDA9PT1oKXJldHVybjtyZXR1cm4gaC5jYWxsKHIpfXZhciBkPU9iamVjdC5nZXRQcm90b3R5cGVPZihuKTtpZihudWxsPT09ZClyZXR1cm47dD1kLGU9cyxpPXIsbz0hMCxhPWQ9dm9pZCAwfX0saD1pKDcwKSxkPW8oaCksbD1mdW5jdGlvbih0KXtmdW5jdGlvbiBlKHQsaSxvKXtuKHRoaXMsZSksYShPYmplY3QuZ2V0UHJvdG90eXBlT2YoZS5wcm90b3R5cGUpLCJjb25zdHJ1Y3RvciIsdGhpcykuY2FsbCh0aGlzLHQsaSxvKX1yZXR1cm4gcyhlLHQpLHIoZSxbe2tleToicmVzaXplIix2YWx1ZTpmdW5jdGlvbih0KXt0aGlzLl9yZXNpemVTaGFwZSgpfX0se2tleToiZHJhdyIsdmFsdWU6ZnVuY3Rpb24odCxlLGksbyxuKXt0aGlzLl9kcmF3U2hhcGUodCwidHJpYW5nbGVEb3duIiwzLGUsaSxvLG4pfX0se2tleToiZGlzdGFuY2VUb0JvcmRlciIsdmFsdWU6ZnVuY3Rpb24odCxlKXtyZXR1cm4gdGhpcy5fZGlzdGFuY2VUb0JvcmRlcih0LGUpfX1dKSxlfShkWyJkZWZhdWx0Il0pO2VbImRlZmF1bHQiXT1sLHQuZXhwb3J0cz1lWyJkZWZhdWx0Il19LGZ1bmN0aW9uKHQsZSxpKXtmdW5jdGlvbiBvKHQpe3JldHVybiB0JiZ0Ll9fZXNNb2R1bGU/dDp7ImRlZmF1bHQiOnR9fWZ1bmN0aW9uIG4odCxlKXtpZighKHQgaW5zdGFuY2VvZiBlKSl0aHJvdyBuZXcgVHlwZUVycm9yKCJDYW5ub3QgY2FsbCBhIGNsYXNzIGFzIGEgZnVuY3Rpb24iKX1PYmplY3QuZGVmaW5lUHJvcGVydHkoZSwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7dmFyIHM9ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KHQsZSl7Zm9yKHZhciBpPTA7aTxlLmxlbmd0aDtpKyspe3ZhciBvPWVbaV07by5lbnVtZXJhYmxlPW8uZW51bWVyYWJsZXx8ITEsby5jb25maWd1cmFibGU9ITAsInZhbHVlImluIG8mJihvLndyaXRhYmxlPSEwKSxPYmplY3QuZGVmaW5lUHJvcGVydHkodCxvLmtleSxvKX19cmV0dXJuIGZ1bmN0aW9uKGUsaSxvKXtyZXR1cm4gaSYmdChlLnByb3RvdHlwZSxpKSxvJiZ0KGUsbyksZX19KCkscj1pKDgxKSxhPW8ociksaD1pKDYyKSxkPW8oaCksbD1pKDEpLHU9aSg4KSxjPWkoMTApLHA9ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KGUsaSxvKXt2YXIgcz10aGlzO24odGhpcyx0KSx0aGlzLmJvZHk9ZSx0aGlzLmltYWdlcz1pLHRoaXMuZ3JvdXBzPW8sdGhpcy5ib2R5LmZ1bmN0aW9ucy5jcmVhdGVFZGdlPXRoaXMuY3JlYXRlLmJpbmQodGhpcyksdGhpcy5lZGdlc0xpc3RlbmVycz17YWRkOmZ1bmN0aW9uKHQsZSl7cy5hZGQoZS5pdGVtcyl9LHVwZGF0ZTpmdW5jdGlvbih0LGUpe3MudXBkYXRlKGUuaXRlbXMpfSxyZW1vdmU6ZnVuY3Rpb24odCxlKXtzLnJlbW92ZShlLml0ZW1zKX19LHRoaXMub3B0aW9ucz17fSx0aGlzLmRlZmF1bHRPcHRpb25zPXthcnJvd3M6e3RvOntlbmFibGVkOiExLHNjYWxlRmFjdG9yOjF9LG1pZGRsZTp7ZW5hYmxlZDohMSxzY2FsZUZhY3RvcjoxfSxmcm9tOntlbmFibGVkOiExLHNjYWxlRmFjdG9yOjF9fSxjb2xvcjp7Y29sb3I6IiM4NDg0ODQiLGhpZ2hsaWdodDoiIzg0ODQ4NCIsaG92ZXI6IiM4NDg0ODQiLGluaGVyaXQ6ImZyb20iLG9wYWNpdHk6MX0sZGFzaGVzOiExLGZvbnQ6e2NvbG9yOiIjMzQzNDM0IixzaXplOjE0LGZhY2U6ImFyaWFsIixiYWNrZ3JvdW5kOiJub25lIixzdHJva2VXaWR0aDoyLHN0cm9rZUNvbG9yOiIjZmZmZmZmIixhbGlnbjoiaG9yaXpvbnRhbCJ9LGhpZGRlbjohMSxob3ZlcldpZHRoOjEuNSxsYWJlbDp2b2lkIDAsbGFiZWxIaWdobGlnaHRCb2xkOiEwLGxlbmd0aDp2b2lkIDAscGh5c2ljczohMCxzY2FsaW5nOnttaW46MSxtYXg6MTUsbGFiZWw6e2VuYWJsZWQ6ITAsbWluOjE0LG1heDozMCxtYXhWaXNpYmxlOjMwLGRyYXdUaHJlc2hvbGQ6NX0sY3VzdG9tU2NhbGluZ0Z1bmN0aW9uOmZ1bmN0aW9uKHQsZSxpLG8pe2lmKGU9PT10KXJldHVybi41O3ZhciBuPTEvKGUtdCk7cmV0dXJuIE1hdGgubWF4KDAsKG8tdCkqbil9fSxzZWxlY3Rpb25XaWR0aDoxLjUsc2VsZlJlZmVyZW5jZVNpemU6MjAsc2hhZG93OntlbmFibGVkOiExLGNvbG9yOiJyZ2JhKDAsMCwwLDAuNSkiLHNpemU6MTAseDo1LHk6NX0sc21vb3RoOntlbmFibGVkOiEwLHR5cGU6ImR5bmFtaWMiLGZvcmNlRGlyZWN0aW9uOiJub25lIixyb3VuZG5lc3M6LjV9LHRpdGxlOnZvaWQgMCx3aWR0aDoxLHZhbHVlOnZvaWQgMH0sbC5leHRlbmQodGhpcy5vcHRpb25zLHRoaXMuZGVmYXVsdE9wdGlvbnMpLHRoaXMuYmluZEV2ZW50TGlzdGVuZXJzKCl9cmV0dXJuIHModCxbe2tleToiYmluZEV2ZW50TGlzdGVuZXJzIix2YWx1ZTpmdW5jdGlvbigpe3ZhciB0PXRoaXM7dGhpcy5ib2R5LmVtaXR0ZXIub24oIl9mb3JjZURpc2FibGVEeW5hbWljQ3VydmVzIixmdW5jdGlvbihlKXsiZHluYW1pYyI9PT1lJiYoZT0iY29udGludW91cyIpO3ZhciBpPSExO2Zvcih2YXIgbyBpbiB0LmJvZHkuZWRnZXMpaWYodC5ib2R5LmVkZ2VzLmhhc093blByb3BlcnR5KG8pKXt2YXIgbj10LmJvZHkuZWRnZXNbb10scz10LmJvZHkuZGF0YS5lZGdlcy5fZGF0YVtvXTtpZih2b2lkIDAhPT1zKXt2YXIgcj1zLnNtb290aDt2b2lkIDAhPT1yJiZyLmVuYWJsZWQ9PT0hMCYmImR5bmFtaWMiPT09ci50eXBlJiYodm9pZCAwPT09ZT9uLnNldE9wdGlvbnMoe3Ntb290aDohMX0pOm4uc2V0T3B0aW9ucyh7c21vb3RoOnt0eXBlOmV9fSksaT0hMCl9fWk9PT0hMCYmdC5ib2R5LmVtaXR0ZXIuZW1pdCgiX2RhdGFDaGFuZ2VkIil9KSx0aGlzLmJvZHkuZW1pdHRlci5vbigiX2RhdGFVcGRhdGVkIixmdW5jdGlvbigpe3QucmVjb25uZWN0RWRnZXMoKSx0Lm1hcmtBbGxFZGdlc0FzRGlydHkoKX0pLHRoaXMuYm9keS5lbWl0dGVyLm9uKCJyZWZyZXNoRWRnZXMiLHRoaXMucmVmcmVzaC5iaW5kKHRoaXMpKSx0aGlzLmJvZHkuZW1pdHRlci5vbigicmVmcmVzaCIsdGhpcy5yZWZyZXNoLmJpbmQodGhpcykpLHRoaXMuYm9keS5lbWl0dGVyLm9uKCJkZXN0cm95IixmdW5jdGlvbigpe2RlbGV0ZSB0LmJvZHkuZnVuY3Rpb25zLmNyZWF0ZUVkZ2UsZGVsZXRlIHQuZWRnZXNMaXN0ZW5lcnMuYWRkLGRlbGV0ZSB0LmVkZ2VzTGlzdGVuZXJzLnVwZGF0ZSxkZWxldGUgdC5lZGdlc0xpc3RlbmVycy5yZW1vdmUsZGVsZXRlIHQuZWRnZXNMaXN0ZW5lcnN9KX19LHtrZXk6InNldE9wdGlvbnMiLHZhbHVlOmZ1bmN0aW9uKHQpe2lmKHZvaWQgMCE9PXQpe2FbImRlZmF1bHQiXS5wYXJzZU9wdGlvbnModGhpcy5vcHRpb25zLHQpLHZvaWQgMCE9PXQuY29sb3ImJnRoaXMubWFya0FsbEVkZ2VzQXNEaXJ0eSgpO3ZhciBlPSExO2lmKHZvaWQgMCE9PXQuc21vb3RoKWZvcih2YXIgaSBpbiB0aGlzLmJvZHkuZWRnZXMpdGhpcy5ib2R5LmVkZ2VzLmhhc093blByb3BlcnR5KGkpJiYoZT10aGlzLmJvZHkuZWRnZXNbaV0udXBkYXRlRWRnZVR5cGUoKXx8ZSk7aWYodm9pZCAwIT09dC5mb250KXtkWyJkZWZhdWx0Il0ucGFyc2VPcHRpb25zKHRoaXMub3B0aW9ucy5mb250LHQpO2Zvcih2YXIgaSBpbiB0aGlzLmJvZHkuZWRnZXMpdGhpcy5ib2R5LmVkZ2VzLmhhc093blByb3BlcnR5KGkpJiZ0aGlzLmJvZHkuZWRnZXNbaV0udXBkYXRlTGFiZWxNb2R1bGUoKX0odm9pZCAwIT09dC5oaWRkZW58fHZvaWQgMCE9PXQucGh5c2ljc3x8ZT09PSEwKSYmdGhpcy5ib2R5LmVtaXR0ZXIuZW1pdCgiX2RhdGFDaGFuZ2VkIil9fX0se2tleToic2V0RGF0YSIsdmFsdWU6ZnVuY3Rpb24odCl7dmFyIGU9dGhpcyxpPWFyZ3VtZW50cy5sZW5ndGg8PTF8fHZvaWQgMD09PWFyZ3VtZW50c1sxXT8hMTphcmd1bWVudHNbMV0sbz10aGlzLmJvZHkuZGF0YS5lZGdlcztpZih0IGluc3RhbmNlb2YgdXx8dCBpbnN0YW5jZW9mIGMpdGhpcy5ib2R5LmRhdGEuZWRnZXM9dDtlbHNlIGlmKEFycmF5LmlzQXJyYXkodCkpdGhpcy5ib2R5LmRhdGEuZWRnZXM9bmV3IHUsdGhpcy5ib2R5LmRhdGEuZWRnZXMuYWRkKHQpO2Vsc2V7aWYodCl0aHJvdyBuZXcgVHlwZUVycm9yKCJBcnJheSBvciBEYXRhU2V0IGV4cGVjdGVkIik7dGhpcy5ib2R5LmRhdGEuZWRnZXM9bmV3IHV9aWYobyYmbC5mb3JFYWNoKHRoaXMuZWRnZXNMaXN0ZW5lcnMsZnVuY3Rpb24odCxlKXtvLm9mZihlLHQpfSksdGhpcy5ib2R5LmVkZ2VzPXt9LHRoaXMuYm9keS5kYXRhLmVkZ2VzKXtsLmZvckVhY2godGhpcy5lZGdlc0xpc3RlbmVycyxmdW5jdGlvbih0LGkpe2UuYm9keS5kYXRhLmVkZ2VzLm9uKGksdCl9KTt2YXIgbj10aGlzLmJvZHkuZGF0YS5lZGdlcy5nZXRJZHMoKTt0aGlzLmFkZChuLCEwKX1pPT09ITEmJnRoaXMuYm9keS5lbWl0dGVyLmVtaXQoIl9kYXRhQ2hhbmdlZCIpfX0se2tleToiYWRkIix2YWx1ZTpmdW5jdGlvbih0KXtmb3IodmFyIGU9YXJndW1lbnRzLmxlbmd0aDw9MXx8dm9pZCAwPT09YXJndW1lbnRzWzFdPyExOmFyZ3VtZW50c1sxXSxpPXRoaXMuYm9keS5lZGdlcyxvPXRoaXMuYm9keS5kYXRhLmVkZ2VzLG49MDtuPHQubGVuZ3RoO24rKyl7dmFyIHM9dFtuXSxyPWlbc107ciYmci5kaXNjb25uZWN0KCk7dmFyIGE9by5nZXQocyx7c2hvd0ludGVybmFsSWRzOiEwfSk7aVtzXT10aGlzLmNyZWF0ZShhKX1lPT09ITEmJnRoaXMuYm9keS5lbWl0dGVyLmVtaXQoIl9kYXRhQ2hhbmdlZCIpfX0se2tleToidXBkYXRlIix2YWx1ZTpmdW5jdGlvbih0KXtmb3IodmFyIGU9dGhpcy5ib2R5LmVkZ2VzLGk9dGhpcy5ib2R5LmRhdGEuZWRnZXMsbz0hMSxuPTA7bjx0Lmxlbmd0aDtuKyspe3ZhciBzPXRbbl0scj1pLmdldChzKSxhPWVbc107dm9pZCAwIT09YT8oYS5kaXNjb25uZWN0KCksbz1hLnNldE9wdGlvbnMocil8fG8sYS5jb25uZWN0KCkpOih0aGlzLmJvZHkuZWRnZXNbc109dGhpcy5jcmVhdGUociksbz0hMCl9bz09PSEwP3RoaXMuYm9keS5lbWl0dGVyLmVtaXQoIl9kYXRhQ2hhbmdlZCIpOnRoaXMuYm9keS5lbWl0dGVyLmVtaXQoIl9kYXRhVXBkYXRlZCIpfX0se2tleToicmVtb3ZlIix2YWx1ZTpmdW5jdGlvbih0KXtmb3IodmFyIGU9dGhpcy5ib2R5LmVkZ2VzLGk9MDtpPHQubGVuZ3RoO2krKyl7dmFyIG89dFtpXSxuPWVbb107dm9pZCAwIT09biYmKG4uY2xlYW51cCgpLG4uZGlzY29ubmVjdCgpLGRlbGV0ZSBlW29dKX10aGlzLmJvZHkuZW1pdHRlci5lbWl0KCJfZGF0YUNoYW5nZWQiKX19LHtrZXk6InJlZnJlc2giLHZhbHVlOmZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5ib2R5LmVkZ2VzO2Zvcih2YXIgZSBpbiB0KXt2YXIgaT12b2lkIDA7dC5oYXNPd25Qcm9wZXJ0eShlKSYmKGk9dFtlXSk7dmFyIG89dGhpcy5ib2R5LmRhdGEuZWRnZXMuX2RhdGFbZV07dm9pZCAwIT09aSYmdm9pZCAwIT09byYmaS5zZXRPcHRpb25zKG8pfX19LHtrZXk6ImNyZWF0ZSIsdmFsdWU6ZnVuY3Rpb24odCl7cmV0dXJuIG5ldyBhWyJkZWZhdWx0Il0odCx0aGlzLmJvZHksdGhpcy5vcHRpb25zKX19LHtrZXk6Im1hcmtBbGxFZGdlc0FzRGlydHkiLHZhbHVlOmZ1bmN0aW9uKCl7Zm9yKHZhciB0IGluIHRoaXMuYm9keS5lZGdlcyl0aGlzLmJvZHkuZWRnZXNbdF0uZWRnZVR5cGUuY29sb3JEaXJ0eT0hMH19LHtrZXk6InJlY29ubmVjdEVkZ2VzIix2YWx1ZTpmdW5jdGlvbigpe3ZhciB0LGU9dGhpcy5ib2R5Lm5vZGVzLGk9dGhpcy5ib2R5LmVkZ2VzO2Zvcih0IGluIGUpZS5oYXNPd25Qcm9wZXJ0eSh0KSYmKGVbdF0uZWRnZXM9W10pO2Zvcih0IGluIGkpaWYoaS5oYXNPd25Qcm9wZXJ0eSh0KSl7dmFyIG89aVt0XTtvLmZyb209bnVsbCxvLnRvPW51bGwsby5jb25uZWN0KCl9fX0se2tleToiZ2V0Q29ubmVjdGVkTm9kZXMiLHZhbHVlOmZ1bmN0aW9uKHQpe3ZhciBlPVtdO2lmKHZvaWQgMCE9PXRoaXMuYm9keS5lZGdlc1t0XSl7dmFyIGk9dGhpcy5ib2R5LmVkZ2VzW3RdO2kuZnJvbUlkJiZlLnB1c2goaS5mcm9tSWQpLGkudG9JZCYmZS5wdXNoKGkudG9JZCl9cmV0dXJuIGV9fV0pLHR9KCk7ZVsiZGVmYXVsdCJdPXAsdC5leHBvcnRzPWVbImRlZmF1bHQiXX0sZnVuY3Rpb24odCxlLGkpe2Z1bmN0aW9uIG8odCl7cmV0dXJuIHQmJnQuX19lc01vZHVsZT90OnsiZGVmYXVsdCI6dH19ZnVuY3Rpb24gbih0LGUpe2lmKCEodCBpbnN0YW5jZW9mIGUpKXRocm93IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCBjYWxsIGEgY2xhc3MgYXMgYSBmdW5jdGlvbiIpfU9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt2YXIgcz1mdW5jdGlvbigpe2Z1bmN0aW9uIHQodCxlKXtmb3IodmFyIGk9MDtpPGUubGVuZ3RoO2krKyl7dmFyIG89ZVtpXTtvLmVudW1lcmFibGU9by5lbnVtZXJhYmxlfHwhMSxvLmNvbmZpZ3VyYWJsZT0hMCwidmFsdWUiaW4gbyYmKG8ud3JpdGFibGU9ITApLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LG8ua2V5LG8pfX1yZXR1cm4gZnVuY3Rpb24oZSxpLG8pe3JldHVybiBpJiZ0KGUucHJvdG90eXBlLGkpLG8mJnQoZSxvKSxlfX0oKSxyPWkoNjIpLGE9byhyKSxoPWkoODIpLGQ9byhoKSxsPWkoODYpLHU9byhsKSxjPWkoODcpLHA9byhjKSxmPWkoODgpLG09byhmKSx2PWkoMSksZz1mdW5jdGlvbigpe2Z1bmN0aW9uIHQoZSxpLG8pe2lmKG4odGhpcyx0KSx2b2lkIDA9PT1pKXRocm93Ik5vIGJvZHkgcHJvdmlkZWQiO3RoaXMub3B0aW9ucz12LmJyaWRnZU9iamVjdChvKSx0aGlzLmdsb2JhbE9wdGlvbnM9byx0aGlzLmJvZHk9aSx0aGlzLmlkPXZvaWQgMCx0aGlzLmZyb21JZD12b2lkIDAsdGhpcy50b0lkPXZvaWQgMCx0aGlzLnNlbGVjdGVkPSExLHRoaXMuaG92ZXI9ITEsdGhpcy5sYWJlbERpcnR5PSEwLHRoaXMuY29sb3JEaXJ0eT0hMCx0aGlzLmJhc2VXaWR0aD10aGlzLm9wdGlvbnMud2lkdGgsdGhpcy5iYXNlRm9udFNpemU9dGhpcy5vcHRpb25zLmZvbnQuc2l6ZSx0aGlzLmZyb209dm9pZCAwLHRoaXMudG89dm9pZCAwLHRoaXMuZWRnZVR5cGU9dm9pZCAwLHRoaXMuY29ubmVjdGVkPSExLHRoaXMubGFiZWxNb2R1bGU9bmV3IGFbImRlZmF1bHQiXSh0aGlzLmJvZHksdGhpcy5vcHRpb25zKSx0aGlzLnNldE9wdGlvbnMoZSl9cmV0dXJuIHModCxbe2tleToic2V0T3B0aW9ucyIsdmFsdWU6ZnVuY3Rpb24oZSl7aWYoZSl7dGhpcy5jb2xvckRpcnR5PSEwLHQucGFyc2VPcHRpb25zKHRoaXMub3B0aW9ucyxlLCEwLHRoaXMuZ2xvYmFsT3B0aW9ucyksdm9pZCAwIT09ZS5pZCYmKHRoaXMuaWQ9ZS5pZCksdm9pZCAwIT09ZS5mcm9tJiYodGhpcy5mcm9tSWQ9ZS5mcm9tKSwKdm9pZCAwIT09ZS50byYmKHRoaXMudG9JZD1lLnRvKSx2b2lkIDAhPT1lLnRpdGxlJiYodGhpcy50aXRsZT1lLnRpdGxlKSx2b2lkIDAhPT1lLnZhbHVlJiYoZS52YWx1ZT1wYXJzZUZsb2F0KGUudmFsdWUpKSx0aGlzLnVwZGF0ZUxhYmVsTW9kdWxlKCk7dmFyIGk9dGhpcy51cGRhdGVFZGdlVHlwZSgpO3JldHVybiB0aGlzLl9zZXRJbnRlcmFjdGlvbldpZHRocygpLHRoaXMuY29ubmVjdCgpLCh2b2lkIDAhPT1lLmhpZGRlbnx8dm9pZCAwIT09ZS5waHlzaWNzKSYmKGk9ITApLGl9fX0se2tleToidXBkYXRlTGFiZWxNb2R1bGUiLHZhbHVlOmZ1bmN0aW9uKCl7dGhpcy5sYWJlbE1vZHVsZS5zZXRPcHRpb25zKHRoaXMub3B0aW9ucywhMCksdm9pZCAwIT09dGhpcy5sYWJlbE1vZHVsZS5iYXNlU2l6ZSYmKHRoaXMuYmFzZUZvbnRTaXplPXRoaXMubGFiZWxNb2R1bGUuYmFzZVNpemUpfX0se2tleToidXBkYXRlRWRnZVR5cGUiLHZhbHVlOmZ1bmN0aW9uKCl7dmFyIHQ9ITEsZT0hMCxpPXRoaXMub3B0aW9ucy5zbW9vdGg7cmV0dXJuIHZvaWQgMCE9PXRoaXMuZWRnZVR5cGUmJih0aGlzLmVkZ2VUeXBlIGluc3RhbmNlb2YgdVsiZGVmYXVsdCJdJiZpLmVuYWJsZWQ9PT0hMCYmImR5bmFtaWMiPT09aS50eXBlJiYoZT0hMSksdGhpcy5lZGdlVHlwZSBpbnN0YW5jZW9mIGRbImRlZmF1bHQiXSYmaS5lbmFibGVkPT09ITAmJiJjdWJpY0JlemllciI9PT1pLnR5cGUmJihlPSExKSx0aGlzLmVkZ2VUeXBlIGluc3RhbmNlb2YgcFsiZGVmYXVsdCJdJiZpLmVuYWJsZWQ9PT0hMCYmImR5bmFtaWMiIT09aS50eXBlJiYiY3ViaWNCZXppZXIiIT09aS50eXBlJiYoZT0hMSksdGhpcy5lZGdlVHlwZSBpbnN0YW5jZW9mIG1bImRlZmF1bHQiXSYmaS5lbmFibGVkPT09ITEmJihlPSExKSxlPT09ITAmJih0PXRoaXMuY2xlYW51cCgpKSksZT09PSEwP3RoaXMub3B0aW9ucy5zbW9vdGguZW5hYmxlZD09PSEwPyJkeW5hbWljIj09PXRoaXMub3B0aW9ucy5zbW9vdGgudHlwZT8odD0hMCx0aGlzLmVkZ2VUeXBlPW5ldyB1WyJkZWZhdWx0Il0odGhpcy5vcHRpb25zLHRoaXMuYm9keSx0aGlzLmxhYmVsTW9kdWxlKSk6ImN1YmljQmV6aWVyIj09PXRoaXMub3B0aW9ucy5zbW9vdGgudHlwZT90aGlzLmVkZ2VUeXBlPW5ldyBkWyJkZWZhdWx0Il0odGhpcy5vcHRpb25zLHRoaXMuYm9keSx0aGlzLmxhYmVsTW9kdWxlKTp0aGlzLmVkZ2VUeXBlPW5ldyBwWyJkZWZhdWx0Il0odGhpcy5vcHRpb25zLHRoaXMuYm9keSx0aGlzLmxhYmVsTW9kdWxlKTp0aGlzLmVkZ2VUeXBlPW5ldyBtWyJkZWZhdWx0Il0odGhpcy5vcHRpb25zLHRoaXMuYm9keSx0aGlzLmxhYmVsTW9kdWxlKTp0aGlzLmVkZ2VUeXBlLnNldE9wdGlvbnModGhpcy5vcHRpb25zKSx0fX0se2tleToiY29ubmVjdCIsdmFsdWU6ZnVuY3Rpb24oKXt0aGlzLmRpc2Nvbm5lY3QoKSx0aGlzLmZyb209dGhpcy5ib2R5Lm5vZGVzW3RoaXMuZnJvbUlkXXx8dm9pZCAwLHRoaXMudG89dGhpcy5ib2R5Lm5vZGVzW3RoaXMudG9JZF18fHZvaWQgMCx0aGlzLmNvbm5lY3RlZD12b2lkIDAhPT10aGlzLmZyb20mJnZvaWQgMCE9PXRoaXMudG8sdGhpcy5jb25uZWN0ZWQ9PT0hMD8odGhpcy5mcm9tLmF0dGFjaEVkZ2UodGhpcyksdGhpcy50by5hdHRhY2hFZGdlKHRoaXMpKToodGhpcy5mcm9tJiZ0aGlzLmZyb20uZGV0YWNoRWRnZSh0aGlzKSx0aGlzLnRvJiZ0aGlzLnRvLmRldGFjaEVkZ2UodGhpcykpLHRoaXMuZWRnZVR5cGUuY29ubmVjdCgpfX0se2tleToiZGlzY29ubmVjdCIsdmFsdWU6ZnVuY3Rpb24oKXt0aGlzLmZyb20mJih0aGlzLmZyb20uZGV0YWNoRWRnZSh0aGlzKSx0aGlzLmZyb209dm9pZCAwKSx0aGlzLnRvJiYodGhpcy50by5kZXRhY2hFZGdlKHRoaXMpLHRoaXMudG89dm9pZCAwKSx0aGlzLmNvbm5lY3RlZD0hMX19LHtrZXk6ImdldFRpdGxlIix2YWx1ZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLnRpdGxlfX0se2tleToiaXNTZWxlY3RlZCIsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5zZWxlY3RlZH19LHtrZXk6ImdldFZhbHVlIix2YWx1ZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLm9wdGlvbnMudmFsdWV9fSx7a2V5OiJzZXRWYWx1ZVJhbmdlIix2YWx1ZTpmdW5jdGlvbih0LGUsaSl7aWYodm9pZCAwIT09dGhpcy5vcHRpb25zLnZhbHVlKXt2YXIgbz10aGlzLm9wdGlvbnMuc2NhbGluZy5jdXN0b21TY2FsaW5nRnVuY3Rpb24odCxlLGksdGhpcy5vcHRpb25zLnZhbHVlKSxuPXRoaXMub3B0aW9ucy5zY2FsaW5nLm1heC10aGlzLm9wdGlvbnMuc2NhbGluZy5taW47aWYodGhpcy5vcHRpb25zLnNjYWxpbmcubGFiZWwuZW5hYmxlZD09PSEwKXt2YXIgcz10aGlzLm9wdGlvbnMuc2NhbGluZy5sYWJlbC5tYXgtdGhpcy5vcHRpb25zLnNjYWxpbmcubGFiZWwubWluO3RoaXMub3B0aW9ucy5mb250LnNpemU9dGhpcy5vcHRpb25zLnNjYWxpbmcubGFiZWwubWluK28qc310aGlzLm9wdGlvbnMud2lkdGg9dGhpcy5vcHRpb25zLnNjYWxpbmcubWluK28qbn1lbHNlIHRoaXMub3B0aW9ucy53aWR0aD10aGlzLmJhc2VXaWR0aCx0aGlzLm9wdGlvbnMuZm9udC5zaXplPXRoaXMuYmFzZUZvbnRTaXplO3RoaXMuX3NldEludGVyYWN0aW9uV2lkdGhzKCksdGhpcy51cGRhdGVMYWJlbE1vZHVsZSgpfX0se2tleToiX3NldEludGVyYWN0aW9uV2lkdGhzIix2YWx1ZTpmdW5jdGlvbigpeyJmdW5jdGlvbiI9PXR5cGVvZiB0aGlzLm9wdGlvbnMuaG92ZXJXaWR0aD90aGlzLmVkZ2VUeXBlLmhvdmVyV2lkdGg9dGhpcy5vcHRpb25zLmhvdmVyV2lkdGgodGhpcy5vcHRpb25zLndpZHRoKTp0aGlzLmVkZ2VUeXBlLmhvdmVyV2lkdGg9dGhpcy5vcHRpb25zLmhvdmVyV2lkdGgrdGhpcy5vcHRpb25zLndpZHRoLCJmdW5jdGlvbiI9PXR5cGVvZiB0aGlzLm9wdGlvbnMuc2VsZWN0aW9uV2lkdGg/dGhpcy5lZGdlVHlwZS5zZWxlY3Rpb25XaWR0aD10aGlzLm9wdGlvbnMuc2VsZWN0aW9uV2lkdGgodGhpcy5vcHRpb25zLndpZHRoKTp0aGlzLmVkZ2VUeXBlLnNlbGVjdGlvbldpZHRoPXRoaXMub3B0aW9ucy5zZWxlY3Rpb25XaWR0aCt0aGlzLm9wdGlvbnMud2lkdGh9fSx7a2V5OiJkcmF3Iix2YWx1ZTpmdW5jdGlvbih0KXt2YXIgZT10aGlzLmVkZ2VUeXBlLmRyYXdMaW5lKHQsdGhpcy5zZWxlY3RlZCx0aGlzLmhvdmVyKTt0aGlzLmRyYXdBcnJvd3ModCxlKSx0aGlzLmRyYXdMYWJlbCh0LGUpfX0se2tleToiZHJhd0Fycm93cyIsdmFsdWU6ZnVuY3Rpb24odCxlKXt0aGlzLm9wdGlvbnMuYXJyb3dzLmZyb20uZW5hYmxlZD09PSEwJiZ0aGlzLmVkZ2VUeXBlLmRyYXdBcnJvd0hlYWQodCwiZnJvbSIsZSx0aGlzLnNlbGVjdGVkLHRoaXMuaG92ZXIpLHRoaXMub3B0aW9ucy5hcnJvd3MubWlkZGxlLmVuYWJsZWQ9PT0hMCYmdGhpcy5lZGdlVHlwZS5kcmF3QXJyb3dIZWFkKHQsIm1pZGRsZSIsZSx0aGlzLnNlbGVjdGVkLHRoaXMuaG92ZXIpLHRoaXMub3B0aW9ucy5hcnJvd3MudG8uZW5hYmxlZD09PSEwJiZ0aGlzLmVkZ2VUeXBlLmRyYXdBcnJvd0hlYWQodCwidG8iLGUsdGhpcy5zZWxlY3RlZCx0aGlzLmhvdmVyKX19LHtrZXk6ImRyYXdMYWJlbCIsdmFsdWU6ZnVuY3Rpb24odCxlKXtpZih2b2lkIDAhPT10aGlzLm9wdGlvbnMubGFiZWwpe3ZhciBpPXRoaXMuZnJvbSxvPXRoaXMudG8sbj10aGlzLmZyb20uc2VsZWN0ZWR8fHRoaXMudG8uc2VsZWN0ZWR8fHRoaXMuc2VsZWN0ZWQ7aWYoaS5pZCE9by5pZCl7dGhpcy5sYWJlbE1vZHVsZS5wb2ludFRvU2VsZj0hMTt2YXIgcz10aGlzLmVkZ2VUeXBlLmdldFBvaW50KC41LGUpO3Quc2F2ZSgpLCJob3Jpem9udGFsIiE9PXRoaXMub3B0aW9ucy5mb250LmFsaWduJiYodGhpcy5sYWJlbE1vZHVsZS5jYWxjdWxhdGVMYWJlbFNpemUodCxuLHMueCxzLnkpLHQudHJhbnNsYXRlKHMueCx0aGlzLmxhYmVsTW9kdWxlLnNpemUueUxpbmUpLHRoaXMuX3JvdGF0ZUZvckxhYmVsQWxpZ25tZW50KHQpKSx0aGlzLmxhYmVsTW9kdWxlLmRyYXcodCxzLngscy55LG4pLHQucmVzdG9yZSgpfWVsc2V7dGhpcy5sYWJlbE1vZHVsZS5wb2ludFRvU2VsZj0hMDt2YXIgcixhLGg9dGhpcy5vcHRpb25zLnNlbGZSZWZlcmVuY2VTaXplO2kuc2hhcGUud2lkdGg+aS5zaGFwZS5oZWlnaHQ/KHI9aS54Ky41Kmkuc2hhcGUud2lkdGgsYT1pLnktaCk6KHI9aS54K2gsYT1pLnktLjUqaS5zaGFwZS5oZWlnaHQpLHM9dGhpcy5fcG9pbnRPbkNpcmNsZShyLGEsaCwuMTI1KSx0aGlzLmxhYmVsTW9kdWxlLmRyYXcodCxzLngscy55LG4pfX19fSx7a2V5OiJpc092ZXJsYXBwaW5nV2l0aCIsdmFsdWU6ZnVuY3Rpb24odCl7aWYodGhpcy5jb25uZWN0ZWQpe3ZhciBlPTEwLGk9dGhpcy5mcm9tLngsbz10aGlzLmZyb20ueSxuPXRoaXMudG8ueCxzPXRoaXMudG8ueSxyPXQubGVmdCxhPXQudG9wLGg9dGhpcy5lZGdlVHlwZS5nZXREaXN0YW5jZVRvRWRnZShpLG8sbixzLHIsYSk7cmV0dXJuIGU+aH1yZXR1cm4hMX19LHtrZXk6Il9yb3RhdGVGb3JMYWJlbEFsaWdubWVudCIsdmFsdWU6ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5mcm9tLnktdGhpcy50by55LGk9dGhpcy5mcm9tLngtdGhpcy50by54LG89TWF0aC5hdGFuMihlLGkpOygtMT5vJiYwPml8fG8+MCYmMD5pKSYmKG8rPU1hdGguUEkpLHQucm90YXRlKG8pfX0se2tleToiX3BvaW50T25DaXJjbGUiLHZhbHVlOmZ1bmN0aW9uKHQsZSxpLG8pe3ZhciBuPTIqbypNYXRoLlBJO3JldHVybnt4OnQraSpNYXRoLmNvcyhuKSx5OmUtaSpNYXRoLnNpbihuKX19fSx7a2V5OiJzZWxlY3QiLHZhbHVlOmZ1bmN0aW9uKCl7dGhpcy5zZWxlY3RlZD0hMH19LHtrZXk6InVuc2VsZWN0Iix2YWx1ZTpmdW5jdGlvbigpe3RoaXMuc2VsZWN0ZWQ9ITF9fSx7a2V5OiJjbGVhbnVwIix2YWx1ZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLmVkZ2VUeXBlLmNsZWFudXAoKX19XSxbe2tleToicGFyc2VPcHRpb25zIix2YWx1ZTpmdW5jdGlvbih0LGUpe3ZhciBpPWFyZ3VtZW50cy5sZW5ndGg8PTJ8fHZvaWQgMD09PWFyZ3VtZW50c1syXT8hMTphcmd1bWVudHNbMl0sbz1hcmd1bWVudHMubGVuZ3RoPD0zfHx2b2lkIDA9PT1hcmd1bWVudHNbM10/e306YXJndW1lbnRzWzNdLG49WyJpZCIsImZyb20iLCJoaWRkZW4iLCJob3ZlcldpZHRoIiwibGFiZWwiLCJsYWJlbEhpZ2hsaWdodEJvbGQiLCJsZW5ndGgiLCJsaW5lIiwib3BhY2l0eSIsInBoeXNpY3MiLCJzY2FsaW5nIiwic2VsZWN0aW9uV2lkdGgiLCJzZWxmUmVmZXJlbmNlU2l6ZSIsInRvIiwidGl0bGUiLCJ2YWx1ZSIsIndpZHRoIl07aWYodi5zZWxlY3RpdmVEZWVwRXh0ZW5kKG4sdCxlLGkpLHYubWVyZ2VPcHRpb25zKHQsZSwic21vb3RoIixpLG8pLHYubWVyZ2VPcHRpb25zKHQsZSwic2hhZG93IixpLG8pLHZvaWQgMCE9PWUuZGFzaGVzJiZudWxsIT09ZS5kYXNoZXM/dC5kYXNoZXM9ZS5kYXNoZXM6aT09PSEwJiZudWxsPT09ZS5kYXNoZXMmJih0LmRhc2hlcz1PYmplY3QuY3JlYXRlKG8uZGFzaGVzKSksdm9pZCAwIT09ZS5zY2FsaW5nJiZudWxsIT09ZS5zY2FsaW5nPyh2b2lkIDAhPT1lLnNjYWxpbmcubWluJiYodC5zY2FsaW5nLm1pbj1lLnNjYWxpbmcubWluKSx2b2lkIDAhPT1lLnNjYWxpbmcubWF4JiYodC5zY2FsaW5nLm1heD1lLnNjYWxpbmcubWF4KSx2Lm1lcmdlT3B0aW9ucyh0LnNjYWxpbmcsZS5zY2FsaW5nLCJsYWJlbCIsaSxvLnNjYWxpbmcpKTppPT09ITAmJm51bGw9PT1lLnNjYWxpbmcmJih0LnNjYWxpbmc9T2JqZWN0LmNyZWF0ZShvLnNjYWxpbmcpKSx2b2lkIDAhPT1lLmFycm93cyYmbnVsbCE9PWUuYXJyb3dzKWlmKCJzdHJpbmciPT10eXBlb2YgZS5hcnJvd3Mpe3ZhciBzPWUuYXJyb3dzLnRvTG93ZXJDYXNlKCk7LTEhPXMuaW5kZXhPZigidG8iKSYmKHQuYXJyb3dzLnRvLmVuYWJsZWQ9ITApLC0xIT1zLmluZGV4T2YoIm1pZGRsZSIpJiYodC5hcnJvd3MubWlkZGxlLmVuYWJsZWQ9ITApLC0xIT1zLmluZGV4T2YoImZyb20iKSYmKHQuYXJyb3dzLmZyb20uZW5hYmxlZD0hMCl9ZWxzZXtpZigib2JqZWN0IiE9dHlwZW9mIGUuYXJyb3dzKXRocm93IG5ldyBFcnJvcigiVGhlIGFycm93IG5ld09wdGlvbnMgY2FuIG9ubHkgYmUgYW4gb2JqZWN0IG9yIGEgc3RyaW5nLiBSZWZlciB0byB0aGUgZG9jdW1lbnRhdGlvbi4gWW91IHVzZWQ6IitKU09OLnN0cmluZ2lmeShlLmFycm93cykpO3YubWVyZ2VPcHRpb25zKHQuYXJyb3dzLGUuYXJyb3dzLCJ0byIsaSxvLmFycm93cyksdi5tZXJnZU9wdGlvbnModC5hcnJvd3MsZS5hcnJvd3MsIm1pZGRsZSIsaSxvLmFycm93cyksdi5tZXJnZU9wdGlvbnModC5hcnJvd3MsZS5hcnJvd3MsImZyb20iLGksby5hcnJvd3MpfWVsc2UgaT09PSEwJiZudWxsPT09ZS5hcnJvd3MmJih0LmFycm93cz1PYmplY3QuY3JlYXRlKG8uYXJyb3dzKSk7aWYodm9pZCAwIT09ZS5jb2xvciYmbnVsbCE9PWUuY29sb3IpaWYodC5jb2xvcj12LmRlZXBFeHRlbmQoe30sdC5jb2xvciwhMCksdi5pc1N0cmluZyhlLmNvbG9yKSl0LmNvbG9yLmNvbG9yPWUuY29sb3IsdC5jb2xvci5oaWdobGlnaHQ9ZS5jb2xvcix0LmNvbG9yLmhvdmVyPWUuY29sb3IsdC5jb2xvci5pbmhlcml0PSExO2Vsc2V7dmFyIHI9ITE7dm9pZCAwIT09ZS5jb2xvci5jb2xvciYmKHQuY29sb3IuY29sb3I9ZS5jb2xvci5jb2xvcixyPSEwKSx2b2lkIDAhPT1lLmNvbG9yLmhpZ2hsaWdodCYmKHQuY29sb3IuaGlnaGxpZ2h0PWUuY29sb3IuaGlnaGxpZ2h0LHI9ITApLHZvaWQgMCE9PWUuY29sb3IuaG92ZXImJih0LmNvbG9yLmhvdmVyPWUuY29sb3IuaG92ZXIscj0hMCksdm9pZCAwIT09ZS5jb2xvci5pbmhlcml0JiYodC5jb2xvci5pbmhlcml0PWUuY29sb3IuaW5oZXJpdCksdm9pZCAwIT09ZS5jb2xvci5vcGFjaXR5JiYodC5jb2xvci5vcGFjaXR5PU1hdGgubWluKDEsTWF0aC5tYXgoMCxlLmNvbG9yLm9wYWNpdHkpKSksdm9pZCAwPT09ZS5jb2xvci5pbmhlcml0JiZyPT09ITAmJih0LmNvbG9yLmluaGVyaXQ9ITEpfWVsc2UgaT09PSEwJiZudWxsPT09ZS5jb2xvciYmKHQuY29sb3I9di5icmlkZ2VPYmplY3Qoby5jb2xvcikpO3ZvaWQgMCE9PWUuZm9udCYmbnVsbCE9PWUuZm9udD9hWyJkZWZhdWx0Il0ucGFyc2VPcHRpb25zKHQuZm9udCxlKTppPT09ITAmJm51bGw9PT1lLmZvbnQmJih0LmZvbnQ9di5icmlkZ2VPYmplY3Qoby5mb250KSl9fV0pLHR9KCk7ZVsiZGVmYXVsdCJdPWcsdC5leHBvcnRzPWVbImRlZmF1bHQiXX0sZnVuY3Rpb24odCxlLGkpe2Z1bmN0aW9uIG8odCl7cmV0dXJuIHQmJnQuX19lc01vZHVsZT90OnsiZGVmYXVsdCI6dH19ZnVuY3Rpb24gbih0LGUpe2lmKCEodCBpbnN0YW5jZW9mIGUpKXRocm93IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCBjYWxsIGEgY2xhc3MgYXMgYSBmdW5jdGlvbiIpfWZ1bmN0aW9uIHModCxlKXtpZigiZnVuY3Rpb24iIT10eXBlb2YgZSYmbnVsbCE9PWUpdGhyb3cgbmV3IFR5cGVFcnJvcigiU3VwZXIgZXhwcmVzc2lvbiBtdXN0IGVpdGhlciBiZSBudWxsIG9yIGEgZnVuY3Rpb24sIG5vdCAiK3R5cGVvZiBlKTt0LnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKGUmJmUucHJvdG90eXBlLHtjb25zdHJ1Y3Rvcjp7dmFsdWU6dCxlbnVtZXJhYmxlOiExLHdyaXRhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH19KSxlJiYoT2JqZWN0LnNldFByb3RvdHlwZU9mP09iamVjdC5zZXRQcm90b3R5cGVPZih0LGUpOnQuX19wcm90b19fPWUpfU9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt2YXIgcj1mdW5jdGlvbigpe2Z1bmN0aW9uIHQodCxlKXt2YXIgaT1bXSxvPSEwLG49ITEscz12b2lkIDA7dHJ5e2Zvcih2YXIgcixhPXRbU3ltYm9sLml0ZXJhdG9yXSgpOyEobz0ocj1hLm5leHQoKSkuZG9uZSkmJihpLnB1c2goci52YWx1ZSksIWV8fGkubGVuZ3RoIT09ZSk7bz0hMCk7fWNhdGNoKGgpe249ITAscz1ofWZpbmFsbHl7dHJ5eyFvJiZhWyJyZXR1cm4iXSYmYVsicmV0dXJuIl0oKX1maW5hbGx5e2lmKG4pdGhyb3cgc319cmV0dXJuIGl9cmV0dXJuIGZ1bmN0aW9uKGUsaSl7aWYoQXJyYXkuaXNBcnJheShlKSlyZXR1cm4gZTtpZihTeW1ib2wuaXRlcmF0b3IgaW4gT2JqZWN0KGUpKXJldHVybiB0KGUsaSk7dGhyb3cgbmV3IFR5cGVFcnJvcigiSW52YWxpZCBhdHRlbXB0IHRvIGRlc3RydWN0dXJlIG5vbi1pdGVyYWJsZSBpbnN0YW5jZSIpfX0oKSxhPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCh0LGUpe2Zvcih2YXIgaT0wO2k8ZS5sZW5ndGg7aSsrKXt2YXIgbz1lW2ldO28uZW51bWVyYWJsZT1vLmVudW1lcmFibGV8fCExLG8uY29uZmlndXJhYmxlPSEwLCJ2YWx1ZSJpbiBvJiYoby53cml0YWJsZT0hMCksT2JqZWN0LmRlZmluZVByb3BlcnR5KHQsby5rZXksbyl9fXJldHVybiBmdW5jdGlvbihlLGksbyl7cmV0dXJuIGkmJnQoZS5wcm90b3R5cGUsaSksbyYmdChlLG8pLGV9fSgpLGg9ZnVuY3Rpb24odCxlLGkpe2Zvcih2YXIgbz0hMDtvOyl7dmFyIG49dCxzPWUscj1pO289ITEsbnVsbD09PW4mJihuPUZ1bmN0aW9uLnByb3RvdHlwZSk7dmFyIGE9T2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihuLHMpO2lmKHZvaWQgMCE9PWEpe2lmKCJ2YWx1ZSJpbiBhKXJldHVybiBhLnZhbHVlO3ZhciBoPWEuZ2V0O2lmKHZvaWQgMD09PWgpcmV0dXJuO3JldHVybiBoLmNhbGwocil9dmFyIGQ9T2JqZWN0LmdldFByb3RvdHlwZU9mKG4pO2lmKG51bGw9PT1kKXJldHVybjt0PWQsZT1zLGk9cixvPSEwLGE9ZD12b2lkIDB9fSxkPWkoODMpLGw9byhkKSx1PWZ1bmN0aW9uKHQpe2Z1bmN0aW9uIGUodCxpLG8pe24odGhpcyxlKSxoKE9iamVjdC5nZXRQcm90b3R5cGVPZihlLnByb3RvdHlwZSksImNvbnN0cnVjdG9yIix0aGlzKS5jYWxsKHRoaXMsdCxpLG8pfXJldHVybiBzKGUsdCksYShlLFt7a2V5OiJfbGluZSIsdmFsdWU6ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5fZ2V0VmlhQ29vcmRpbmF0ZXMoKSxpPXIoZSwyKSxvPWlbMF0sbj1pWzFdLHM9W28sbl07cmV0dXJuIHQuYmVnaW5QYXRoKCksdC5tb3ZlVG8odGhpcy5mcm9tLngsdGhpcy5mcm9tLnkpLHZvaWQgMD09PW8ueD8odC5saW5lVG8odGhpcy50by54LHRoaXMudG8ueSkscz12b2lkIDApOnQuYmV6aWVyQ3VydmVUbyhvLngsby55LG4ueCxuLnksdGhpcy50by54LHRoaXMudG8ueSksdGhpcy5lbmFibGVTaGFkb3codCksdC5zdHJva2UoKSx0aGlzLmRpc2FibGVTaGFkb3codCksc319LHtrZXk6Il9nZXRWaWFDb29yZGluYXRlcyIsdmFsdWU6ZnVuY3Rpb24oKXt2YXIgdD10aGlzLmZyb20ueC10aGlzLnRvLngsZT10aGlzLmZyb20ueS10aGlzLnRvLnksaT12b2lkIDAsbz12b2lkIDAsbj12b2lkIDAscz12b2lkIDAscj10aGlzLm9wdGlvbnMuc21vb3RoLnJvdW5kbmVzcztyZXR1cm4oTWF0aC5hYnModCk+TWF0aC5hYnMoZSl8fHRoaXMub3B0aW9ucy5zbW9vdGguZm9yY2VEaXJlY3Rpb249PT0hMHx8Imhvcml6b250YWwiPT09dGhpcy5vcHRpb25zLnNtb290aC5mb3JjZURpcmVjdGlvbikmJiJ2ZXJ0aWNhbCIhPT10aGlzLm9wdGlvbnMuc21vb3RoLmZvcmNlRGlyZWN0aW9uPyhvPXRoaXMuZnJvbS55LHM9dGhpcy50by55LGk9dGhpcy5mcm9tLngtcip0LG49dGhpcy50by54K3IqdCk6KG89dGhpcy5mcm9tLnktciplLHM9dGhpcy50by55K3IqZSxpPXRoaXMuZnJvbS54LG49dGhpcy50by54KSxbe3g6aSx5Om99LHt4Om4seTpzfV19fSx7a2V5OiJfZmluZEJvcmRlclBvc2l0aW9uIix2YWx1ZTpmdW5jdGlvbih0LGUpe3JldHVybiB0aGlzLl9maW5kQm9yZGVyUG9zaXRpb25CZXppZXIodCxlKX19LHtrZXk6Il9nZXREaXN0YW5jZVRvRWRnZSIsdmFsdWU6ZnVuY3Rpb24odCxlLGksbyxuLHMpe3ZhciBhPWFyZ3VtZW50cy5sZW5ndGg8PTZ8fHZvaWQgMD09PWFyZ3VtZW50c1s2XT90aGlzLl9nZXRWaWFDb29yZGluYXRlcygpOmFyZ3VtZW50c1s2XSxoPXIoYSwyKSxkPWhbMF0sbD1oWzFdO3JldHVybiB0aGlzLl9nZXREaXN0YW5jZVRvQmV6aWVyRWRnZSh0LGUsaSxvLG4scyxkLGwpfX0se2tleToiZ2V0UG9pbnQiLHZhbHVlOmZ1bmN0aW9uKHQpe3ZhciBlPWFyZ3VtZW50cy5sZW5ndGg8PTF8fHZvaWQgMD09PWFyZ3VtZW50c1sxXT90aGlzLl9nZXRWaWFDb29yZGluYXRlcygpOmFyZ3VtZW50c1sxXSxpPXIoZSwyKSxvPWlbMF0sbj1pWzFdLHM9dCxhPVtdO2FbMF09TWF0aC5wb3coMS1zLDMpLGFbMV09MypzKk1hdGgucG93KDEtcywyKSxhWzJdPTMqTWF0aC5wb3cocywyKSooMS1zKSxhWzNdPU1hdGgucG93KHMsMyk7dmFyIGg9YVswXSp0aGlzLmZyb20ueCthWzFdKm8ueCthWzJdKm4ueCthWzNdKnRoaXMudG8ueCxkPWFbMF0qdGhpcy5mcm9tLnkrYVsxXSpvLnkrYVsyXSpuLnkrYVszXSp0aGlzLnRvLnk7cmV0dXJue3g6aCx5OmR9fX1dKSxlfShsWyJkZWZhdWx0Il0pO2VbImRlZmF1bHQiXT11LHQuZXhwb3J0cz1lWyJkZWZhdWx0Il19LGZ1bmN0aW9uKHQsZSxpKXtmdW5jdGlvbiBvKHQpe3JldHVybiB0JiZ0Ll9fZXNNb2R1bGU/dDp7ImRlZmF1bHQiOnR9fWZ1bmN0aW9uIG4odCxlKXtpZighKHQgaW5zdGFuY2VvZiBlKSl0aHJvdyBuZXcgVHlwZUVycm9yKCJDYW5ub3QgY2FsbCBhIGNsYXNzIGFzIGEgZnVuY3Rpb24iKX1mdW5jdGlvbiBzKHQsZSl7aWYoImZ1bmN0aW9uIiE9dHlwZW9mIGUmJm51bGwhPT1lKXRocm93IG5ldyBUeXBlRXJyb3IoIlN1cGVyIGV4cHJlc3Npb24gbXVzdCBlaXRoZXIgYmUgbnVsbCBvciBhIGZ1bmN0aW9uLCBub3QgIit0eXBlb2YgZSk7dC5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZShlJiZlLnByb3RvdHlwZSx7Y29uc3RydWN0b3I6e3ZhbHVlOnQsZW51bWVyYWJsZTohMSx3cml0YWJsZTohMCxjb25maWd1cmFibGU6ITB9fSksZSYmKE9iamVjdC5zZXRQcm90b3R5cGVPZj9PYmplY3Quc2V0UHJvdG90eXBlT2YodCxlKTp0Ll9fcHJvdG9fXz1lKX1PYmplY3QuZGVmaW5lUHJvcGVydHkoZSwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7dmFyIHI9ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KHQsZSl7Zm9yKHZhciBpPTA7aTxlLmxlbmd0aDtpKyspe3ZhciBvPWVbaV07by5lbnVtZXJhYmxlPW8uZW51bWVyYWJsZXx8ITEsby5jb25maWd1cmFibGU9ITAsInZhbHVlImluIG8mJihvLndyaXRhYmxlPSEwKSxPYmplY3QuZGVmaW5lUHJvcGVydHkodCxvLmtleSxvKX19cmV0dXJuIGZ1bmN0aW9uKGUsaSxvKXtyZXR1cm4gaSYmdChlLnByb3RvdHlwZSxpKSxvJiZ0KGUsbyksZX19KCksYT1mdW5jdGlvbih0LGUsaSl7Zm9yKHZhciBvPSEwO287KXt2YXIgbj10LHM9ZSxyPWk7bz0hMSxudWxsPT09biYmKG49RnVuY3Rpb24ucHJvdG90eXBlKTt2YXIgYT1PYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKG4scyk7aWYodm9pZCAwIT09YSl7aWYoInZhbHVlImluIGEpcmV0dXJuIGEudmFsdWU7dmFyIGg9YS5nZXQ7aWYodm9pZCAwPT09aClyZXR1cm47cmV0dXJuIGguY2FsbChyKX12YXIgZD1PYmplY3QuZ2V0UHJvdG90eXBlT2Yobik7aWYobnVsbD09PWQpcmV0dXJuO3Q9ZCxlPXMsaT1yLG89ITAsYT1kPXZvaWQgMH19LGg9aSg4NCksZD1vKGgpLGw9ZnVuY3Rpb24odCl7ZnVuY3Rpb24gZSh0LGksbyl7bih0aGlzLGUpLGEoT2JqZWN0LmdldFByb3RvdHlwZU9mKGUucHJvdG90eXBlKSwiY29uc3RydWN0b3IiLHRoaXMpLmNhbGwodGhpcyx0LGksbyl9cmV0dXJuIHMoZSx0KSxyKGUsW3trZXk6Il9nZXREaXN0YW5jZVRvQmV6aWVyRWRnZSIsdmFsdWU6ZnVuY3Rpb24odCxlLGksbyxuLHMscixhKXt2YXIgaD0xZTksZD12b2lkIDAsbD12b2lkIDAsdT12b2lkIDAsYz12b2lkIDAscD12b2lkIDAsZj10LG09ZSx2PVswLDAsMCwwXTtmb3IobD0xOzEwPmw7bCsrKXU9LjEqbCx2WzBdPU1hdGgucG93KDEtdSwzKSx2WzFdPTMqdSpNYXRoLnBvdygxLXUsMiksdlsyXT0zKk1hdGgucG93KHUsMikqKDEtdSksdlszXT1NYXRoLnBvdyh1LDMpLGM9dlswXSp0K3ZbMV0qci54K3ZbMl0qYS54K3ZbM10qaSxwPXZbMF0qZSt2WzFdKnIueSt2WzJdKmEueSt2WzNdKm8sbD4wJiYoZD10aGlzLl9nZXREaXN0YW5jZVRvTGluZShmLG0sYyxwLG4scyksaD1oPmQ/ZDpoKSxmPWMsbT1wO3JldHVybiBofX1dKSxlfShkWyJkZWZhdWx0Il0pO2VbImRlZmF1bHQiXT1sLHQuZXhwb3J0cz1lWyJkZWZhdWx0Il19LGZ1bmN0aW9uKHQsZSxpKXtmdW5jdGlvbiBvKHQpe3JldHVybiB0JiZ0Ll9fZXNNb2R1bGU/dDp7ImRlZmF1bHQiOnR9fWZ1bmN0aW9uIG4odCxlKXtpZighKHQgaW5zdGFuY2VvZiBlKSl0aHJvdyBuZXcgVHlwZUVycm9yKCJDYW5ub3QgY2FsbCBhIGNsYXNzIGFzIGEgZnVuY3Rpb24iKX1mdW5jdGlvbiBzKHQsZSl7aWYoImZ1bmN0aW9uIiE9dHlwZW9mIGUmJm51bGwhPT1lKXRocm93IG5ldyBUeXBlRXJyb3IoIlN1cGVyIGV4cHJlc3Npb24gbXVzdCBlaXRoZXIgYmUgbnVsbCBvciBhIGZ1bmN0aW9uLCBub3QgIit0eXBlb2YgZSk7dC5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZShlJiZlLnByb3RvdHlwZSx7Y29uc3RydWN0b3I6e3ZhbHVlOnQsZW51bWVyYWJsZTohMSx3cml0YWJsZTohMCxjb25maWd1cmFibGU6ITB9fSksZSYmKE9iamVjdC5zZXRQcm90b3R5cGVPZj9PYmplY3Quc2V0UHJvdG90eXBlT2YodCxlKTp0Ll9fcHJvdG9fXz1lKX1PYmplY3QuZGVmaW5lUHJvcGVydHkoZSwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7dmFyIHI9ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KHQsZSl7Zm9yKHZhciBpPTA7aTxlLmxlbmd0aDtpKyspe3ZhciBvPWVbaV07by5lbnVtZXJhYmxlPW8uZW51bWVyYWJsZXx8ITEsby5jb25maWd1cmFibGU9ITAsInZhbHVlImluIG8mJihvLndyaXRhYmxlPSEwKSxPYmplY3QuZGVmaW5lUHJvcGVydHkodCxvLmtleSxvKX19cmV0dXJuIGZ1bmN0aW9uKGUsaSxvKXtyZXR1cm4gaSYmdChlLnByb3RvdHlwZSxpKSxvJiZ0KGUsbyksZX19KCksYT1mdW5jdGlvbih0LGUsaSl7Zm9yKHZhciBvPSEwO287KXt2YXIgbj10LHM9ZSxyPWk7bz0hMSxudWxsPT09biYmKG49RnVuY3Rpb24ucHJvdG90eXBlKTt2YXIgYT1PYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKG4scyk7aWYodm9pZCAwIT09YSl7aWYoInZhbHVlImluIGEpcmV0dXJuIGEudmFsdWU7dmFyIGg9YS5nZXQ7aWYodm9pZCAwPT09aClyZXR1cm47cmV0dXJuIGguY2FsbChyKX12YXIgZD1PYmplY3QuZ2V0UHJvdG90eXBlT2Yobik7aWYobnVsbD09PWQpcmV0dXJuO3Q9ZCxlPXMsaT1yLG89ITAsYT1kPXZvaWQgMH19LGg9aSg4NSksZD1vKGgpLGw9ZnVuY3Rpb24odCl7ZnVuY3Rpb24gZSh0LGksbyl7bih0aGlzLGUpLGEoT2JqZWN0LmdldFByb3RvdHlwZU9mKGUucHJvdG90eXBlKSwiY29uc3RydWN0b3IiLHRoaXMpLmNhbGwodGhpcyx0LGksbyl9cmV0dXJuIHMoZSx0KSxyKGUsW3trZXk6Il9maW5kQm9yZGVyUG9zaXRpb25CZXppZXIiLHZhbHVlOmZ1bmN0aW9uKHQsZSl7dmFyIGksbyxuLHMscixhPWFyZ3VtZW50cy5sZW5ndGg8PTJ8fHZvaWQgMD09PWFyZ3VtZW50c1syXT90aGlzLl9nZXRWaWFDb29yZGluYXRlcygpOmFyZ3VtZW50c1syXSxoPTEwLGQ9MCxsPTAsdT0xLGM9LjIscD10aGlzLnRvLGY9ITE7Zm9yKHQuaWQ9PT10aGlzLmZyb20uaWQmJihwPXRoaXMuZnJvbSxmPSEwKTt1Pj1sJiZoPmQ7KXt2YXIgbT0uNSoobCt1KTtpZihpPXRoaXMuZ2V0UG9pbnQobSxhKSxvPU1hdGguYXRhbjIocC55LWkueSxwLngtaS54KSxuPXAuZGlzdGFuY2VUb0JvcmRlcihlLG8pLHM9TWF0aC5zcXJ0KE1hdGgucG93KGkueC1wLngsMikrTWF0aC5wb3coaS55LXAueSwyKSkscj1uLXMsTWF0aC5hYnMocik8YylicmVhazswPnI/Zj09PSExP2w9bTp1PW06Zj09PSExP3U9bTpsPW0sZCsrfXJldHVybiBpLnQ9bSxpfX0se2tleToiX2dldERpc3RhbmNlVG9CZXppZXJFZGdlIix2YWx1ZTpmdW5jdGlvbih0LGUsaSxvLG4scyxyKXt2YXIgYT0xZTksaD12b2lkIDAsZD12b2lkIDAsbD12b2lkIDAsdT12b2lkIDAsYz12b2lkIDAscD10LGY9ZTtmb3IoZD0xOzEwPmQ7ZCsrKWw9LjEqZCx1PU1hdGgucG93KDEtbCwyKSp0KzIqbCooMS1sKSpyLngrTWF0aC5wb3cobCwyKSppLGM9TWF0aC5wb3coMS1sLDIpKmUrMipsKigxLWwpKnIueStNYXRoLnBvdyhsLDIpKm8sZD4wJiYoaD10aGlzLl9nZXREaXN0YW5jZVRvTGluZShwLGYsdSxjLG4scyksYT1hPmg/aDphKSxwPXUsZj1jO3JldHVybiBhfX1dKSxlfShkWyJkZWZhdWx0Il0pO2VbImRlZmF1bHQiXT1sLHQuZXhwb3J0cz1lWyJkZWZhdWx0Il19LGZ1bmN0aW9uKHQsZSxpKXtmdW5jdGlvbiBvKHQsZSl7aWYoISh0IGluc3RhbmNlb2YgZSkpdGhyb3cgbmV3IFR5cGVFcnJvcigiQ2Fubm90IGNhbGwgYSBjbGFzcyBhcyBhIGZ1bmN0aW9uIil9T2JqZWN0LmRlZmluZVByb3BlcnR5KGUsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3ZhciBuPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCh0LGUpe3ZhciBpPVtdLG89ITAsbj0hMSxzPXZvaWQgMDt0cnl7Zm9yKHZhciByLGE9dFtTeW1ib2wuaXRlcmF0b3JdKCk7IShvPShyPWEubmV4dCgpKS5kb25lKSYmKGkucHVzaChyLnZhbHVlKSwhZXx8aS5sZW5ndGghPT1lKTtvPSEwKTt9Y2F0Y2goaCl7bj0hMCxzPWh9ZmluYWxseXt0cnl7IW8mJmFbInJldHVybiJdJiZhWyJyZXR1cm4iXSgpfWZpbmFsbHl7aWYobil0aHJvdyBzfX1yZXR1cm4gaX1yZXR1cm4gZnVuY3Rpb24oZSxpKXtpZihBcnJheS5pc0FycmF5KGUpKXJldHVybiBlO2lmKFN5bWJvbC5pdGVyYXRvciBpbiBPYmplY3QoZSkpcmV0dXJuIHQoZSxpKTt0aHJvdyBuZXcgVHlwZUVycm9yKCJJbnZhbGlkIGF0dGVtcHQgdG8gZGVzdHJ1Y3R1cmUgbm9uLWl0ZXJhYmxlIGluc3RhbmNlIil9fSgpLHM9ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KHQsZSl7Zm9yKHZhciBpPTA7aTxlLmxlbmd0aDtpKyspe3ZhciBvPWVbaV07by5lbnVtZXJhYmxlPW8uZW51bWVyYWJsZXx8ITEsby5jb25maWd1cmFibGU9ITAsInZhbHVlImluIG8mJihvLndyaXRhYmxlPSEwKSxPYmplY3QuZGVmaW5lUHJvcGVydHkodCxvLmtleSxvKX19cmV0dXJuIGZ1bmN0aW9uKGUsaSxvKXtyZXR1cm4gaSYmdChlLnByb3RvdHlwZSxpKSxvJiZ0KGUsbyksZX19KCkscj1pKDEpLGE9ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KGUsaSxuKXtvKHRoaXMsdCksdGhpcy5ib2R5PWksdGhpcy5sYWJlbE1vZHVsZT1uLHRoaXMub3B0aW9ucz17fSx0aGlzLnNldE9wdGlvbnMoZSksdGhpcy5jb2xvckRpcnR5PSEwLHRoaXMuY29sb3I9e30sdGhpcy5zZWxlY3Rpb25XaWR0aD0yLHRoaXMuaG92ZXJXaWR0aD0xLjV9cmV0dXJuIHModCxbe2tleToiY29ubmVjdCIsdmFsdWU6ZnVuY3Rpb24oKXt0aGlzLmZyb209dGhpcy5ib2R5Lm5vZGVzW3RoaXMub3B0aW9ucy5mcm9tXSx0aGlzLnRvPXRoaXMuYm9keS5ub2Rlc1t0aGlzLm9wdGlvbnMudG9dfX0se2tleToiY2xlYW51cCIsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4hMX19LHtrZXk6InNldE9wdGlvbnMiLHZhbHVlOmZ1bmN0aW9uKHQpe3RoaXMub3B0aW9ucz10LHRoaXMuZnJvbT10aGlzLmJvZHkubm9kZXNbdGhpcy5vcHRpb25zLmZyb21dLHRoaXMudG89dGhpcy5ib2R5Lm5vZGVzW3RoaXMub3B0aW9ucy50b10sdGhpcy5pZD10aGlzLm9wdGlvbnMuaWR9fSx7a2V5OiJkcmF3TGluZSIsdmFsdWU6ZnVuY3Rpb24odCxlLGkpe3Quc3Ryb2tlU3R5bGU9dGhpcy5nZXRDb2xvcih0LGUsaSksdC5saW5lV2lkdGg9dGhpcy5nZXRMaW5lV2lkdGgoZSxpKTt2YXIgbz12b2lkIDA7cmV0dXJuIG89dGhpcy5vcHRpb25zLmRhc2hlcyE9PSExP3RoaXMuX2RyYXdEYXNoZWRMaW5lKHQpOnRoaXMuX2RyYXdMaW5lKHQpfX0se2tleToiX2RyYXdMaW5lIix2YWx1ZTpmdW5jdGlvbih0KXt2YXIgZT12b2lkIDA7aWYodGhpcy5mcm9tIT10aGlzLnRvKWU9dGhpcy5fbGluZSh0KTtlbHNle3ZhciBpPXRoaXMuX2dldENpcmNsZURhdGEodCksbz1uKGksMykscz1vWzBdLHI9b1sxXSxhPW9bMl07dGhpcy5fY2lyY2xlKHQscyxyLGEpfXJldHVybiBlfX0se2tleToiX2RyYXdEYXNoZWRMaW5lIix2YWx1ZTpmdW5jdGlvbih0KXt2YXIgZT12b2lkIDA7dC5saW5lQ2FwPSJyb3VuZCI7dmFyIGk9WzUsNV07aWYoQXJyYXkuaXNBcnJheSh0aGlzLm9wdGlvbnMuZGFzaGVzKT09PSEwJiYoaT10aGlzLm9wdGlvbnMuZGFzaGVzKSx2b2lkIDAhPT10LnNldExpbmVEYXNoKXtpZih0LnNhdmUoKSx0LnNldExpbmVEYXNoKGkpLHQubGluZURhc2hPZmZzZXQ9MCx0aGlzLmZyb20hPXRoaXMudG8pZT10aGlzLl9saW5lKHQpO2Vsc2V7dmFyIG89dGhpcy5fZ2V0Q2lyY2xlRGF0YSh0KSxzPW4obywzKSxyPXNbMF0sYT1zWzFdLGg9c1syXTt0aGlzLl9jaXJjbGUodCxyLGEsaCl9dC5zZXRMaW5lRGFzaChbMF0pLHQubGluZURhc2hPZmZzZXQ9MCx0LnJlc3RvcmUoKX1lbHNle2lmKHRoaXMuZnJvbSE9dGhpcy50byl0LmRhc2hlZExpbmUodGhpcy5mcm9tLngsdGhpcy5mcm9tLnksdGhpcy50by54LHRoaXMudG8ueSxpKTtlbHNle3ZhciBkPXRoaXMuX2dldENpcmNsZURhdGEodCksbD1uKGQsMykscj1sWzBdLGE9bFsxXSxoPWxbMl07dGhpcy5fY2lyY2xlKHQscixhLGgpfXRoaXMuZW5hYmxlU2hhZG93KHQpLHQuc3Ryb2tlKCksdGhpcy5kaXNhYmxlU2hhZG93KHQpfXJldHVybiBlfX0se2tleToiZmluZEJvcmRlclBvc2l0aW9uIix2YWx1ZTpmdW5jdGlvbih0LGUsaSl7cmV0dXJuIHRoaXMuZnJvbSE9dGhpcy50bz90aGlzLl9maW5kQm9yZGVyUG9zaXRpb24odCxlLGkpOnRoaXMuX2ZpbmRCb3JkZXJQb3NpdGlvbkNpcmNsZSh0LGUsaSl9fSx7a2V5OiJmaW5kQm9yZGVyUG9zaXRpb25zIix2YWx1ZTpmdW5jdGlvbih0KXt2YXIgZT17fSxpPXt9O2lmKHRoaXMuZnJvbSE9dGhpcy50byllPXRoaXMuX2ZpbmRCb3JkZXJQb3NpdGlvbih0aGlzLmZyb20sdCksaT10aGlzLl9maW5kQm9yZGVyUG9zaXRpb24odGhpcy50byx0KTtlbHNle3ZhciBvPXRoaXMuX2dldENpcmNsZURhdGEodCkscz1uKG8sMykscj1zWzBdLGE9c1sxXTtzWzJdO2U9dGhpcy5fZmluZEJvcmRlclBvc2l0aW9uQ2lyY2xlKHRoaXMuZnJvbSx0LHt4OnIseTphLGxvdzouMjUsaGlnaDouNixkaXJlY3Rpb246LTF9KSxpPXRoaXMuX2ZpbmRCb3JkZXJQb3NpdGlvbkNpcmNsZSh0aGlzLmZyb20sdCx7eDpyLHk6YSxsb3c6LjYsaGlnaDouOCxkaXJlY3Rpb246MX0pfXJldHVybntmcm9tOmUsdG86aX19fSx7a2V5OiJfZ2V0Q2lyY2xlRGF0YSIsdmFsdWU6ZnVuY3Rpb24odCl7dmFyIGU9dm9pZCAwLGk9dm9pZCAwLG89dGhpcy5mcm9tLG49dGhpcy5vcHRpb25zLnNlbGZSZWZlcmVuY2VTaXplO3JldHVybiB2b2lkIDAhPT10JiZ2b2lkIDA9PT1vLnNoYXBlLndpZHRoJiZvLnNoYXBlLnJlc2l6ZSh0KSxvLnNoYXBlLndpZHRoPm8uc2hhcGUuaGVpZ2h0PyhlPW8ueCsuNSpvLnNoYXBlLndpZHRoLGk9by55LW4pOihlPW8ueCtuLGk9by55LS41Km8uc2hhcGUuaGVpZ2h0KSxbZSxpLG5dfX0se2tleToiX3BvaW50T25DaXJjbGUiLHZhbHVlOmZ1bmN0aW9uKHQsZSxpLG8pe3ZhciBuPTIqbypNYXRoLlBJO3JldHVybnt4OnQraSpNYXRoLmNvcyhuKSx5OmUtaSpNYXRoLnNpbihuKX19fSx7a2V5OiJfZmluZEJvcmRlclBvc2l0aW9uQ2lyY2xlIix2YWx1ZTpmdW5jdGlvbih0LGUsaSl7Zm9yKHZhciBvPWkueCxuPWkueSxzPWkubG93LHI9aS5oaWdoLGE9aS5kaXJlY3Rpb24saD0xMCxkPTAsbD10aGlzLm9wdGlvbnMuc2VsZlJlZmVyZW5jZVNpemUsdT12b2lkIDAsYz12b2lkIDAscD12b2lkIDAsZj12b2lkIDAsbT12b2lkIDAsdj0uMDUsZz0uNSoocytyKTtyPj1zJiZoPmQmJihnPS41KihzK3IpLHU9dGhpcy5fcG9pbnRPbkNpcmNsZShvLG4sbCxnKSxjPU1hdGguYXRhbjIodC55LXUueSx0LngtdS54KSxwPXQuZGlzdGFuY2VUb0JvcmRlcihlLGMpLGY9TWF0aC5zcXJ0KE1hdGgucG93KHUueC10LngsMikrTWF0aC5wb3codS55LXQueSwyKSksbT1wLWYsIShNYXRoLmFicyhtKTx2KSk7KW0+MD9hPjA/cz1nOnI9ZzphPjA/cj1nOnM9ZyxkKys7cmV0dXJuIHUudD1nLHV9fSx7a2V5OiJnZXRMaW5lV2lkdGgiLHZhbHVlOmZ1bmN0aW9uKHQsZSl7cmV0dXJuIHQ9PT0hMD9NYXRoLm1heCh0aGlzLnNlbGVjdGlvbldpZHRoLC4zL3RoaXMuYm9keS52aWV3LnNjYWxlKTplPT09ITA/TWF0aC5tYXgodGhpcy5ob3ZlcldpZHRoLC4zL3RoaXMuYm9keS52aWV3LnNjYWxlKTpNYXRoLm1heCh0aGlzLm9wdGlvbnMud2lkdGgsLjMvdGhpcy5ib2R5LnZpZXcuc2NhbGUpfX0se2tleToiZ2V0Q29sb3IiLHZhbHVlOmZ1bmN0aW9uKHQsZSxpKXt2YXIgbz10aGlzLm9wdGlvbnMuY29sb3I7aWYoby5pbmhlcml0IT09ITEpe2lmKCJib3RoIj09PW8uaW5oZXJpdCYmdGhpcy5mcm9tLmlkIT09dGhpcy50by5pZCl7dmFyIG49dC5jcmVhdGVMaW5lYXJHcmFkaWVudCh0aGlzLmZyb20ueCx0aGlzLmZyb20ueSx0aGlzLnRvLngsdGhpcy50by55KSxzPXZvaWQgMCxhPXZvaWQgMDtyZXR1cm4gcz10aGlzLmZyb20ub3B0aW9ucy5jb2xvci5oaWdobGlnaHQuYm9yZGVyLGE9dGhpcy50by5vcHRpb25zLmNvbG9yLmhpZ2hsaWdodC5ib3JkZXIsdGhpcy5mcm9tLnNlbGVjdGVkPT09ITEmJnRoaXMudG8uc2VsZWN0ZWQ9PT0hMT8ocz1yLm92ZXJyaWRlT3BhY2l0eSh0aGlzLmZyb20ub3B0aW9ucy5jb2xvci5ib3JkZXIsdGhpcy5vcHRpb25zLmNvbG9yLm9wYWNpdHkpLGE9ci5vdmVycmlkZU9wYWNpdHkodGhpcy50by5vcHRpb25zLmNvbG9yLmJvcmRlcix0aGlzLm9wdGlvbnMuY29sb3Iub3BhY2l0eSkpOnRoaXMuZnJvbS5zZWxlY3RlZD09PSEwJiZ0aGlzLnRvLnNlbGVjdGVkPT09ITE/YT10aGlzLnRvLm9wdGlvbnMuY29sb3IuYm9yZGVyOnRoaXMuZnJvbS5zZWxlY3RlZD09PSExJiZ0aGlzLnRvLnNlbGVjdGVkPT09ITAmJihzPXRoaXMuZnJvbS5vcHRpb25zLmNvbG9yLmJvcmRlciksbi5hZGRDb2xvclN0b3AoMCxzKSxuLmFkZENvbG9yU3RvcCgxLGEpLG59dGhpcy5jb2xvckRpcnR5PT09ITAmJigidG8iPT09by5pbmhlcml0Pyh0aGlzLmNvbG9yLmhpZ2hsaWdodD10aGlzLnRvLm9wdGlvbnMuY29sb3IuaGlnaGxpZ2h0LmJvcmRlcix0aGlzLmNvbG9yLmhvdmVyPXRoaXMudG8ub3B0aW9ucy5jb2xvci5ob3Zlci5ib3JkZXIsdGhpcy5jb2xvci5jb2xvcj1yLm92ZXJyaWRlT3BhY2l0eSh0aGlzLnRvLm9wdGlvbnMuY29sb3IuYm9yZGVyLG8ub3BhY2l0eSkpOih0aGlzLmNvbG9yLmhpZ2hsaWdodD10aGlzLmZyb20ub3B0aW9ucy5jb2xvci5oaWdobGlnaHQuYm9yZGVyLHRoaXMuY29sb3IuaG92ZXI9dGhpcy5mcm9tLm9wdGlvbnMuY29sb3IuaG92ZXIuYm9yZGVyLHRoaXMuY29sb3IuY29sb3I9ci5vdmVycmlkZU9wYWNpdHkodGhpcy5mcm9tLm9wdGlvbnMuY29sb3IuYm9yZGVyLG8ub3BhY2l0eSkpKX1lbHNlIHRoaXMuY29sb3JEaXJ0eT09PSEwJiYodGhpcy5jb2xvci5oaWdobGlnaHQ9by5oaWdobGlnaHQsdGhpcy5jb2xvci5ob3Zlcj1vLmhvdmVyLHRoaXMuY29sb3IuY29sb3I9ci5vdmVycmlkZU9wYWNpdHkoby5jb2xvcixvLm9wYWNpdHkpKTtyZXR1cm4gdGhpcy5jb2xvckRpcnR5PSExLGU9PT0hMD90aGlzLmNvbG9yLmhpZ2hsaWdodDppPT09ITA/dGhpcy5jb2xvci5ob3Zlcjp0aGlzLmNvbG9yLmNvbG9yfX0se2tleToiX2NpcmNsZSIsdmFsdWU6ZnVuY3Rpb24odCxlLGksbyl7dGhpcy5lbmFibGVTaGFkb3codCksdC5iZWdpblBhdGgoKSx0LmFyYyhlLGksbywwLDIqTWF0aC5QSSwhMSksdC5zdHJva2UoKSx0aGlzLmRpc2FibGVTaGFkb3codCl9fSx7a2V5OiJnZXREaXN0YW5jZVRvRWRnZSIsdmFsdWU6ZnVuY3Rpb24odCxlLGksbyxzLHIsYSl7dmFyIGg9MDtpZih0aGlzLmZyb20hPXRoaXMudG8paD10aGlzLl9nZXREaXN0YW5jZVRvRWRnZSh0LGUsaSxvLHMscixhKTtlbHNle3ZhciBkPXRoaXMuX2dldENpcmNsZURhdGEoKSxsPW4oZCwzKSx1PWxbMF0sYz1sWzFdLHA9bFsyXSxmPXUtcyxtPWMtcjtoPU1hdGguYWJzKE1hdGguc3FydChmKmYrbSptKS1wKX1yZXR1cm4gdGhpcy5sYWJlbE1vZHVsZS5zaXplLmxlZnQ8cyYmdGhpcy5sYWJlbE1vZHVsZS5zaXplLmxlZnQrdGhpcy5sYWJlbE1vZHVsZS5zaXplLndpZHRoPnMmJnRoaXMubGFiZWxNb2R1bGUuc2l6ZS50b3A8ciYmdGhpcy5sYWJlbE1vZHVsZS5zaXplLnRvcCt0aGlzLmxhYmVsTW9kdWxlLnNpemUuaGVpZ2h0PnI/MDpofX0se2tleToiX2dldERpc3RhbmNlVG9MaW5lIix2YWx1ZTpmdW5jdGlvbih0LGUsaSxvLG4scyl7dmFyIHI9aS10LGE9by1lLGg9cipyK2EqYSxkPSgobi10KSpyKyhzLWUpKmEpL2g7ZD4xP2Q9MTowPmQmJihkPTApO3ZhciBsPXQrZCpyLHU9ZStkKmEsYz1sLW4scD11LXM7cmV0dXJuIE1hdGguc3FydChjKmMrcCpwKX19LHtrZXk6ImRyYXdBcnJvd0hlYWQiLHZhbHVlOmZ1bmN0aW9uKHQsZSxpLG8scyl7dC5zdHJva2VTdHlsZT10aGlzLmdldENvbG9yKHQsbyxzKSx0LmZpbGxTdHlsZT10LnN0cm9rZVN0eWxlLHQubGluZVdpZHRoPXRoaXMuZ2V0TGluZVdpZHRoKG8scyk7dmFyIHI9dm9pZCAwLGE9dm9pZCAwLGg9dm9pZCAwLGQ9dm9pZCAwLGw9dm9pZCAwLHU9dm9pZCAwLGM9dm9pZCAwO2lmKCJmcm9tIj09PWU/KGQ9dGhpcy5mcm9tLGw9dGhpcy50byx1PS4xLGM9dGhpcy5vcHRpb25zLmFycm93cy5mcm9tLnNjYWxlRmFjdG9yKToidG8iPT09ZT8oZD10aGlzLnRvLGw9dGhpcy5mcm9tLHU9LS4xLGM9dGhpcy5vcHRpb25zLmFycm93cy50by5zY2FsZUZhY3Rvcik6KGQ9dGhpcy50byxsPXRoaXMuZnJvbSxjPXRoaXMub3B0aW9ucy5hcnJvd3MubWlkZGxlLnNjYWxlRmFjdG9yKSxkIT1sKXtpZigibWlkZGxlIiE9PWUpaWYodGhpcy5vcHRpb25zLnNtb290aC5lbmFibGVkPT09ITApe2g9dGhpcy5maW5kQm9yZGVyUG9zaXRpb24oZCx0LHt2aWE6aX0pO3ZhciBwPXRoaXMuZ2V0UG9pbnQoTWF0aC5tYXgoMCxNYXRoLm1pbigxLGgudCt1KSksaSk7cj1NYXRoLmF0YW4yKGgueS1wLnksaC54LXAueCl9ZWxzZSByPU1hdGguYXRhbjIoZC55LWwueSxkLngtbC54KSxoPXRoaXMuZmluZEJvcmRlclBvc2l0aW9uKGQsdCk7ZWxzZSByPU1hdGguYXRhbjIoZC55LWwueSxkLngtbC54KSxoPXRoaXMuZ2V0UG9pbnQoLjYsaSk7YT0oMTArNSp0aGlzLm9wdGlvbnMud2lkdGgpKmMsdC5hcnJvdyhoLngsaC55LHIsYSksdGhpcy5lbmFibGVTaGFkb3codCksdC5maWxsKCksdGhpcy5kaXNhYmxlU2hhZG93KHQpLHQuc3Ryb2tlKCl9ZWxzZXt2YXIgZj12b2lkIDAsbT12b2lkIDAsdj10aGlzLl9nZXRDaXJjbGVEYXRhKHQpLGc9bih2LDMpLHk9Z1swXSxiPWdbMV0sdz1nWzJdOyJmcm9tIj09PWU/KG09dGhpcy5maW5kQm9yZGVyUG9zaXRpb24odGhpcy5mcm9tLHQse3g6eSx5OmIsbG93Oi4yNSxoaWdoOi42LGRpcmVjdGlvbjotMX0pLGY9LTIqbS50Kk1hdGguUEkrMS41Kk1hdGguUEkrLjEqTWF0aC5QSSk6InRvIj09PWU/KG09dGhpcy5maW5kQm9yZGVyUG9zaXRpb24odGhpcy5mcm9tLHQse3g6eSx5OmIsbG93Oi42LGhpZ2g6MSxkaXJlY3Rpb246MX0pLGY9LTIqbS50Kk1hdGguUEkrMS41Kk1hdGguUEktMS4xKk1hdGguUEkpOihtPXRoaXMuX3BvaW50T25DaXJjbGUoeSxiLHcsLjE3NSksZj0zLjkyNjk5MDgxNjk4NzI0MTQpO3ZhciBfPSgxMCs1KnRoaXMub3B0aW9ucy53aWR0aCkqYzt0LmFycm93KG0ueCxtLnksZixfKSx0aGlzLmVuYWJsZVNoYWRvdyh0KSx0LmZpbGwoKSx0aGlzLmRpc2FibGVTaGFkb3codCksdC5zdHJva2UoKX19fSx7a2V5OiJlbmFibGVTaGFkb3ciLHZhbHVlOmZ1bmN0aW9uKHQpe3RoaXMub3B0aW9ucy5zaGFkb3cuZW5hYmxlZD09PSEwJiYodC5zaGFkb3dDb2xvcj10aGlzLm9wdGlvbnMuc2hhZG93LmNvbG9yLHQuc2hhZG93Qmx1cj10aGlzLm9wdGlvbnMuc2hhZG93LnNpemUsdC5zaGFkb3dPZmZzZXRYPXRoaXMub3B0aW9ucy5zaGFkb3cueCx0LnNoYWRvd09mZnNldFk9dGhpcy5vcHRpb25zLnNoYWRvdy55KX19LHtrZXk6ImRpc2FibGVTaGFkb3ciLHZhbHVlOmZ1bmN0aW9uKHQpe3RoaXMub3B0aW9ucy5zaGFkb3cuZW5hYmxlZD09PSEwJiYodC5zaGFkb3dDb2xvcj0icmdiYSgwLDAsMCwwKSIsdC5zaGFkb3dCbHVyPTAsdC5zaGFkb3dPZmZzZXRYPTAsdC5zaGFkb3dPZmZzZXRZPTApfX1dKSx0fSgpO2VbImRlZmF1bHQiXT1hLHQuZXhwb3J0cz1lWyJkZWZhdWx0Il19LGZ1bmN0aW9uKHQsZSxpKXtmdW5jdGlvbiBvKHQpe3JldHVybiB0JiZ0Ll9fZXNNb2R1bGU/dDp7ImRlZmF1bHQiOnR9fWZ1bmN0aW9uIG4odCxlKXtpZighKHQgaW5zdGFuY2VvZiBlKSl0aHJvdyBuZXcgVHlwZUVycm9yKCJDYW5ub3QgY2FsbCBhIGNsYXNzIGFzIGEgZnVuY3Rpb24iKX1mdW5jdGlvbiBzKHQsZSl7aWYoImZ1bmN0aW9uIiE9dHlwZW9mIGUmJm51bGwhPT1lKXRocm93IG5ldyBUeXBlRXJyb3IoIlN1cGVyIGV4cHJlc3Npb24gbXVzdCBlaXRoZXIgYmUgbnVsbCBvciBhIGZ1bmN0aW9uLCBub3QgIit0eXBlb2YgZSk7dC5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZShlJiZlLnByb3RvdHlwZSx7Y29uc3RydWN0b3I6e3ZhbHVlOnQsZW51bWVyYWJsZTohMSx3cml0YWJsZTohMCxjb25maWd1cmFibGU6ITB9fSksZSYmKE9iamVjdC5zZXRQcm90b3R5cGVPZj9PYmplY3Quc2V0UHJvdG90eXBlT2YodCxlKTp0Ll9fcHJvdG9fXz1lKX1PYmplY3QuZGVmaW5lUHJvcGVydHkoZSwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7dmFyIHI9ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KHQsZSl7Zm9yKHZhciBpPTA7aTxlLmxlbmd0aDtpKyspe3ZhciBvPWVbaV07by5lbnVtZXJhYmxlPW8uZW51bWVyYWJsZXx8ITEsby5jb25maWd1cmFibGU9ITAsInZhbHVlImluIG8mJihvLndyaXRhYmxlPSEwKSxPYmplY3QuZGVmaW5lUHJvcGVydHkodCxvLmtleSxvKX19cmV0dXJuIGZ1bmN0aW9uKGUsaSxvKXtyZXR1cm4gaSYmdChlLnByb3RvdHlwZSxpKSxvJiZ0KGUsbyksZX19KCksYT1mdW5jdGlvbih0LGUsaSl7Zm9yKHZhciBvPSEwO287KXt2YXIgbj10LHM9ZSxyPWk7bz0hMSxudWxsPT09biYmKG49RnVuY3Rpb24ucHJvdG90eXBlKTt2YXIgYT1PYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKG4scyk7aWYodm9pZCAwIT09YSl7aWYoInZhbHVlImluIGEpcmV0dXJuIGEudmFsdWU7dmFyIGg9YS5nZXQ7aWYodm9pZCAwPT09aClyZXR1cm47cmV0dXJuIGguY2FsbChyKX12YXIgZD1PYmplY3QuZ2V0UHJvdG90eXBlT2Yobik7aWYobnVsbD09PWQpcmV0dXJuO3Q9ZCxlPXMsaT1yLG89ITAsYT1kPXZvaWQgMH19LGg9aSg4NCksZD1vKGgpLGw9ZnVuY3Rpb24odCl7ZnVuY3Rpb24gZSh0LGksbyl7dmFyIHM9dGhpcztuKHRoaXMsZSksYShPYmplY3QuZ2V0UHJvdG90eXBlT2YoZS5wcm90b3R5cGUpLCJjb25zdHJ1Y3RvciIsdGhpcykuY2FsbCh0aGlzLHQsaSxvKSx0aGlzLl9ib3VuZEZ1bmN0aW9uPWZ1bmN0aW9uKCl7cy5wb3NpdGlvbkJlemllck5vZGUoKX0sdGhpcy5ib2R5LmVtaXR0ZXIub24oIl9yZXBvc2l0aW9uQmV6aWVyTm9kZXMiLHRoaXMuX2JvdW5kRnVuY3Rpb24pfXJldHVybiBzKGUsdCkscihlLFt7a2V5OiJzZXRPcHRpb25zIix2YWx1ZTpmdW5jdGlvbih0KXt2YXIgZT0hMTt0aGlzLm9wdGlvbnMucGh5c2ljcyE9PXQucGh5c2ljcyYmKGU9ITApLHRoaXMub3B0aW9ucz10LHRoaXMuaWQ9dGhpcy5vcHRpb25zLmlkLHRoaXMuZnJvbT10aGlzLmJvZHkubm9kZXNbdGhpcy5vcHRpb25zLmZyb21dLHRoaXMudG89dGhpcy5ib2R5Lm5vZGVzW3RoaXMub3B0aW9ucy50b10sdGhpcy5zZXR1cFN1cHBvcnROb2RlKCksdGhpcy5jb25uZWN0KCksZT09PSEwJiYodGhpcy52aWEuc2V0T3B0aW9ucyh7cGh5c2ljczp0aGlzLm9wdGlvbnMucGh5c2ljc30pLHRoaXMucG9zaXRpb25CZXppZXJOb2RlKCkpfX0se2tleToiY29ubmVjdCIsdmFsdWU6ZnVuY3Rpb24oKXt0aGlzLmZyb209dGhpcy5ib2R5Lm5vZGVzW3RoaXMub3B0aW9ucy5mcm9tXSx0aGlzLnRvPXRoaXMuYm9keS5ub2Rlc1t0aGlzLm9wdGlvbnMudG9dLHZvaWQgMD09PXRoaXMuZnJvbXx8dm9pZCAwPT09dGhpcy50b3x8dGhpcy5vcHRpb25zLnBoeXNpY3M9PT0hMT90aGlzLnZpYS5zZXRPcHRpb25zKHtwaHlzaWNzOiExfSk6dGhpcy5mcm9tLmlkPT09dGhpcy50by5pZD90aGlzLnZpYS5zZXRPcHRpb25zKHtwaHlzaWNzOiExfSk6dGhpcy52aWEuc2V0T3B0aW9ucyh7cGh5c2ljczohMH0pfX0se2tleToiY2xlYW51cCIsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5ib2R5LmVtaXR0ZXIub2ZmKCJfcmVwb3NpdGlvbkJlemllck5vZGVzIix0aGlzLl9ib3VuZEZ1bmN0aW9uKSx2b2lkIDAhPT10aGlzLnZpYT8oZGVsZXRlIHRoaXMuYm9keS5ub2Rlc1t0aGlzLnZpYS5pZF0sdGhpcy52aWE9dm9pZCAwLCEwKTohMX19LHtrZXk6InNldHVwU3VwcG9ydE5vZGUiLHZhbHVlOmZ1bmN0aW9uKCl7aWYodm9pZCAwPT09dGhpcy52aWEpe3ZhciB0PSJlZGdlSWQ6Iit0aGlzLmlkLGU9dGhpcy5ib2R5LmZ1bmN0aW9ucy5jcmVhdGVOb2RlKHtpZDp0LHNoYXBlOiJjaXJjbGUiLHBoeXNpY3M6ITAsaGlkZGVuOiEwfSk7dGhpcy5ib2R5Lm5vZGVzW3RdPWUsdGhpcy52aWE9ZSx0aGlzLnZpYS5wYXJlbnRFZGdlSWQ9dGhpcy5pZCx0aGlzLnBvc2l0aW9uQmV6aWVyTm9kZSgpfX19LHtrZXk6InBvc2l0aW9uQmV6aWVyTm9kZSIsdmFsdWU6ZnVuY3Rpb24oKXt2b2lkIDAhPT10aGlzLnZpYSYmdm9pZCAwIT09dGhpcy5mcm9tJiZ2b2lkIDAhPT10aGlzLnRvPyh0aGlzLnZpYS54PS41Kih0aGlzLmZyb20ueCt0aGlzLnRvLngpLHRoaXMudmlhLnk9LjUqKHRoaXMuZnJvbS55K3RoaXMudG8ueSkpOnZvaWQgMCE9PXRoaXMudmlhJiYodGhpcy52aWEueD0wLHRoaXMudmlhLnk9MCl9fSx7a2V5OiJfbGluZSIsdmFsdWU6ZnVuY3Rpb24odCl7cmV0dXJuIHQuYmVnaW5QYXRoKCksdC5tb3ZlVG8odGhpcy5mcm9tLngsdGhpcy5mcm9tLnkpLHQucXVhZHJhdGljQ3VydmVUbyh0aGlzLnZpYS54LHRoaXMudmlhLnksdGhpcy50by54LHRoaXMudG8ueSksdGhpcy5lbmFibGVTaGFkb3codCksdC5zdHJva2UoKSx0aGlzLmRpc2FibGVTaGFkb3codCksdGhpcy52aWF9fSx7a2V5OiJnZXRQb2ludCIsdmFsdWU6ZnVuY3Rpb24odCl7dmFyIGU9dCxpPU1hdGgucG93KDEtZSwyKSp0aGlzLmZyb20ueCsyKmUqKDEtZSkqdGhpcy52aWEueCtNYXRoLnBvdyhlLDIpKnRoaXMudG8ueCxvPU1hdGgucG93KDEtZSwyKSp0aGlzLmZyb20ueSsyKmUqKDEtZSkqdGhpcy52aWEueStNYXRoLnBvdyhlLDIpKnRoaXMudG8ueTtyZXR1cm57eDppLHk6b319fSx7a2V5OiJfZmluZEJvcmRlclBvc2l0aW9uIix2YWx1ZTpmdW5jdGlvbih0LGUpe3JldHVybiB0aGlzLl9maW5kQm9yZGVyUG9zaXRpb25CZXppZXIodCxlLHRoaXMudmlhKX19LHtrZXk6Il9nZXREaXN0YW5jZVRvRWRnZSIsdmFsdWU6ZnVuY3Rpb24odCxlLGksbyxuLHMpe3JldHVybiB0aGlzLl9nZXREaXN0YW5jZVRvQmV6aWVyRWRnZSh0LGUsaSxvLG4scyx0aGlzLnZpYSl9fV0pLGV9KGRbImRlZmF1bHQiXSk7ZVsiZGVmYXVsdCJdPWwsdC5leHBvcnRzPWVbImRlZmF1bHQiXX0sZnVuY3Rpb24odCxlLGkpe2Z1bmN0aW9uIG8odCl7cmV0dXJuIHQmJnQuX19lc01vZHVsZT90OnsiZGVmYXVsdCI6dH19ZnVuY3Rpb24gbih0LGUpe2lmKCEodCBpbnN0YW5jZW9mIGUpKXRocm93IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCBjYWxsIGEgY2xhc3MgYXMgYSBmdW5jdGlvbiIpfWZ1bmN0aW9uIHModCxlKXtpZigiZnVuY3Rpb24iIT10eXBlb2YgZSYmbnVsbCE9PWUpdGhyb3cgbmV3IFR5cGVFcnJvcigiU3VwZXIgZXhwcmVzc2lvbiBtdXN0IGVpdGhlciBiZSBudWxsIG9yIGEgZnVuY3Rpb24sIG5vdCAiK3R5cGVvZiBlKTt0LnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKGUmJmUucHJvdG90eXBlLHtjb25zdHJ1Y3Rvcjp7dmFsdWU6dCxlbnVtZXJhYmxlOiExLHdyaXRhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH19KSxlJiYoT2JqZWN0LnNldFByb3RvdHlwZU9mP09iamVjdC5zZXRQcm90b3R5cGVPZih0LGUpOnQuX19wcm90b19fPWUpfU9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt2YXIgcj1mdW5jdGlvbigpe2Z1bmN0aW9uIHQodCxlKXtmb3IodmFyIGk9MDtpPGUubGVuZ3RoO2krKyl7dmFyIG89ZVtpXTtvLmVudW1lcmFibGU9by5lbnVtZXJhYmxlfHwhMSxvLmNvbmZpZ3VyYWJsZT0hMCwidmFsdWUiaW4gbyYmKG8ud3JpdGFibGU9ITApLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LG8ua2V5LG8pfX1yZXR1cm4gZnVuY3Rpb24oZSxpLG8pe3JldHVybiBpJiZ0KGUucHJvdG90eXBlLGkpLG8mJnQoZSxvKSxlfX0oKSxhPWZ1bmN0aW9uKHQsZSxpKXtmb3IodmFyIG89ITA7bzspe3ZhciBuPXQscz1lLHI9aTtvPSExLG51bGw9PT1uJiYobj1GdW5jdGlvbi5wcm90b3R5cGUpO3ZhciBhPU9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IobixzKTtpZih2b2lkIDAhPT1hKXtpZigidmFsdWUiaW4gYSlyZXR1cm4gYS52YWx1ZTt2YXIgaD1hLmdldDtpZih2b2lkIDA9PT1oKXJldHVybjtyZXR1cm4gaC5jYWxsKHIpfXZhciBkPU9iamVjdC5nZXRQcm90b3R5cGVPZihuKTtpZihudWxsPT09ZClyZXR1cm47dD1kLGU9cyxpPXIsbz0hMCxhPWQ9dm9pZCAwfX0saD1pKDg0KSxkPW8oaCksbD1mdW5jdGlvbih0KXtmdW5jdGlvbiBlKHQsaSxvKXtuKHRoaXMsZSksYShPYmplY3QuZ2V0UHJvdG90eXBlT2YoZS5wcm90b3R5cGUpLCJjb25zdHJ1Y3RvciIsdGhpcykuY2FsbCh0aGlzLHQsaSxvKX1yZXR1cm4gcyhlLHQpLHIoZSxbe2tleToiX2xpbmUiLHZhbHVlOmZ1bmN0aW9uKHQpe3QuYmVnaW5QYXRoKCksdC5tb3ZlVG8odGhpcy5mcm9tLngsdGhpcy5mcm9tLnkpO3ZhciBlPXRoaXMuX2dldFZpYUNvb3JkaW5hdGVzKCksaT1lO3JldHVybiB2b2lkIDA9PT1lLng/KHQubGluZVRvKHRoaXMudG8ueCx0aGlzLnRvLnkpLGk9dm9pZCAwKTp0LnF1YWRyYXRpY0N1cnZlVG8oZS54LGUueSx0aGlzLnRvLngsdGhpcy50by55KSx0aGlzLmVuYWJsZVNoYWRvdyh0KSx0LnN0cm9rZSgpLHRoaXMuZGlzYWJsZVNoYWRvdyh0KSxpfX0se2tleToiX2dldFZpYUNvb3JkaW5hdGVzIix2YWx1ZTpmdW5jdGlvbigpe3ZhciB0PXZvaWQgMCxlPXZvaWQgMCxpPXRoaXMub3B0aW9ucy5zbW9vdGgucm91bmRuZXNzLG89dGhpcy5vcHRpb25zLnNtb290aC50eXBlLG49TWF0aC5hYnModGhpcy5mcm9tLngtdGhpcy50by54KSxzPU1hdGguYWJzKHRoaXMuZnJvbS55LXRoaXMudG8ueSk7aWYoImRpc2NyZXRlIj09PW98fCJkaWFnb25hbENyb3NzIj09PW8pTWF0aC5hYnModGhpcy5mcm9tLngtdGhpcy50by54KTw9TWF0aC5hYnModGhpcy5mcm9tLnktdGhpcy50by55KT8odGhpcy5mcm9tLnk+PXRoaXMudG8ueT90aGlzLmZyb20ueDw9dGhpcy50by54Pyh0PXRoaXMuZnJvbS54K2kqcyxlPXRoaXMuZnJvbS55LWkqcyk6dGhpcy5mcm9tLng+dGhpcy50by54JiYodD10aGlzLmZyb20ueC1pKnMsZT10aGlzLmZyb20ueS1pKnMpOnRoaXMuZnJvbS55PHRoaXMudG8ueSYmKHRoaXMuZnJvbS54PD10aGlzLnRvLng/KHQ9dGhpcy5mcm9tLngraSpzLGU9dGhpcy5mcm9tLnkraSpzKTp0aGlzLmZyb20ueD50aGlzLnRvLngmJih0PXRoaXMuZnJvbS54LWkqcyxlPXRoaXMuZnJvbS55K2kqcykpLCJkaXNjcmV0ZSI9PT1vJiYodD1pKnM+bj90aGlzLmZyb20ueDp0KSk6TWF0aC5hYnModGhpcy5mcm9tLngtdGhpcy50by54KT5NYXRoLmFicyh0aGlzLmZyb20ueS10aGlzLnRvLnkpJiYodGhpcy5mcm9tLnk+PXRoaXMudG8ueT90aGlzLmZyb20ueDw9dGhpcy50by54Pyh0PXRoaXMuZnJvbS54K2kqbixlPXRoaXMuZnJvbS55LWkqbik6dGhpcy5mcm9tLng+dGhpcy50by54JiYodD10aGlzLmZyb20ueC1pKm4sZT10aGlzLmZyb20ueS1pKm4pOnRoaXMuZnJvbS55PHRoaXMudG8ueSYmKHRoaXMuZnJvbS54PD10aGlzLnRvLng/KHQ9dGhpcy5mcm9tLngraSpuLGU9dGhpcy5mcm9tLnkraSpuKTp0aGlzLmZyb20ueD50aGlzLnRvLngmJih0PXRoaXMuZnJvbS54LWkqbixlPXRoaXMuZnJvbS55K2kqbikpLCJkaXNjcmV0ZSI9PT1vJiYoZT1pKm4+cz90aGlzLmZyb20ueTplKSk7ZWxzZSBpZigic3RyYWlnaHRDcm9zcyI9PT1vKU1hdGguYWJzKHRoaXMuZnJvbS54LXRoaXMudG8ueCk8PU1hdGguYWJzKHRoaXMuZnJvbS55LXRoaXMudG8ueSk/KHQ9dGhpcy5mcm9tLngsZT10aGlzLmZyb20ueTx0aGlzLnRvLnk/dGhpcy50by55LSgxLWkpKnM6dGhpcy50by55KygxLWkpKnMpOk1hdGguYWJzKHRoaXMuZnJvbS54LXRoaXMudG8ueCk+TWF0aC5hYnModGhpcy5mcm9tLnktdGhpcy50by55KSYmKHQ9dGhpcy5mcm9tLng8dGhpcy50by54P3RoaXMudG8ueC0oMS1pKSpuOnRoaXMudG8ueCsoMS1pKSpuLGU9dGhpcy5mcm9tLnkpO2Vsc2UgaWYoImhvcml6b250YWwiPT09byl0PXRoaXMuZnJvbS54PHRoaXMudG8ueD90aGlzLnRvLngtKDEtaSkqbjp0aGlzLnRvLngrKDEtaSkqbixlPXRoaXMuZnJvbS55O2Vsc2UgaWYoInZlcnRpY2FsIj09PW8pdD10aGlzLmZyb20ueCxlPXRoaXMuZnJvbS55PHRoaXMudG8ueT90aGlzLnRvLnktKDEtaSkqczp0aGlzLnRvLnkrKDEtaSkqcztlbHNlIGlmKCJjdXJ2ZWRDVyI9PT1vKXtuPXRoaXMudG8ueC10aGlzLmZyb20ueCxzPXRoaXMuZnJvbS55LXRoaXMudG8ueTt2YXIgcj1NYXRoLnNxcnQobipuK3MqcyksYT1NYXRoLlBJLGg9TWF0aC5hdGFuMihzLG4pLGQ9KGgrKC41KmkrLjUpKmEpJSgyKmEpO3Q9dGhpcy5mcm9tLngrKC41KmkrLjUpKnIqTWF0aC5zaW4oZCksZT10aGlzLmZyb20ueSsoLjUqaSsuNSkqcipNYXRoLmNvcyhkKX1lbHNlIGlmKCJjdXJ2ZWRDQ1ciPT09byl7bj10aGlzLnRvLngtdGhpcy5mcm9tLngscz10aGlzLmZyb20ueS10aGlzLnRvLnk7dmFyIHI9TWF0aC5zcXJ0KG4qbitzKnMpLGE9TWF0aC5QSSxoPU1hdGguYXRhbjIocyxuKSxkPShoKyguNSotaSsuNSkqYSklKDIqYSk7dD10aGlzLmZyb20ueCsoLjUqaSsuNSkqcipNYXRoLnNpbihkKSxlPXRoaXMuZnJvbS55KyguNSppKy41KSpyKk1hdGguY29zKGQpfWVsc2UgTWF0aC5hYnModGhpcy5mcm9tLngtdGhpcy50by54KTw9TWF0aC5hYnModGhpcy5mcm9tLnktdGhpcy50by55KT90aGlzLmZyb20ueT49dGhpcy50by55P3RoaXMuZnJvbS54PD10aGlzLnRvLng/KHQ9dGhpcy5mcm9tLngraSpzLGU9dGhpcy5mcm9tLnktaSpzLHQ9dGhpcy50by54PHQ/dGhpcy50by54OnQpOnRoaXMuZnJvbS54PnRoaXMudG8ueCYmKHQ9dGhpcy5mcm9tLngtaSpzLGU9dGhpcy5mcm9tLnktaSpzLHQ9dGhpcy50by54PnQ/dGhpcy50by54OnQpOnRoaXMuZnJvbS55PHRoaXMudG8ueSYmKHRoaXMuZnJvbS54PD10aGlzLnRvLng/KHQ9dGhpcy5mcm9tLngraSpzLGU9dGhpcy5mcm9tLnkraSpzLHQ9dGhpcy50by54PHQ/dGhpcy50by54OnQpOnRoaXMuZnJvbS54PnRoaXMudG8ueCYmKHQ9dGhpcy5mcm9tLngtaSpzLGU9dGhpcy5mcm9tLnkraSpzLHQ9dGhpcy50by54PnQ/dGhpcy50by54OnQpKTpNYXRoLmFicyh0aGlzLmZyb20ueC10aGlzLnRvLngpPk1hdGguYWJzKHRoaXMuZnJvbS55LXRoaXMudG8ueSkmJih0aGlzLmZyb20ueT49dGhpcy50by55P3RoaXMuZnJvbS54PD10aGlzLnRvLng/KHQ9dGhpcy5mcm9tLngraSpuLGU9dGhpcy5mcm9tLnktaSpuLGU9dGhpcy50by55PmU/dGhpcy50by55OmUpOnRoaXMuZnJvbS54PnRoaXMudG8ueCYmKHQ9dGhpcy5mcm9tLngtaSpuLGU9dGhpcy5mcm9tLnktaSpuLGU9dGhpcy50by55PmU/dGhpcy50by55OmUpOnRoaXMuZnJvbS55PHRoaXMudG8ueSYmKHRoaXMuZnJvbS54PD10aGlzLnRvLng/KHQ9dGhpcy5mcm9tLngraSpuLGU9dGhpcy5mcm9tLnkraSpuLGU9dGhpcy50by55PGU/dGhpcy50by55OmUpOnRoaXMuZnJvbS54PnRoaXMudG8ueCYmKHQ9dGhpcy5mcm9tLngtaSpuLGU9dGhpcy5mcm9tLnkraSpuLGU9dGhpcy50by55PGU/dGhpcy50by55OmUpKSk7cmV0dXJue3g6dCx5OmV9fX0se2tleToiX2ZpbmRCb3JkZXJQb3NpdGlvbiIsdmFsdWU6ZnVuY3Rpb24odCxlKXt2YXIgaT1hcmd1bWVudHMubGVuZ3RoPD0yfHx2b2lkIDA9PT1hcmd1bWVudHNbMl0/e306YXJndW1lbnRzWzJdO3JldHVybiB0aGlzLl9maW5kQm9yZGVyUG9zaXRpb25CZXppZXIodCxlLGkudmlhKX19LHtrZXk6Il9nZXREaXN0YW5jZVRvRWRnZSIsdmFsdWU6ZnVuY3Rpb24odCxlLGksbyxuLHMpe3ZhciByPWFyZ3VtZW50cy5sZW5ndGg8PTZ8fHZvaWQgMD09PWFyZ3VtZW50c1s2XT90aGlzLl9nZXRWaWFDb29yZGluYXRlcygpOmFyZ3VtZW50c1s2XTtyZXR1cm4gdGhpcy5fZ2V0RGlzdGFuY2VUb0JlemllckVkZ2UodCxlLGksbyxuLHMscil9fSx7a2V5OiJnZXRQb2ludCIsdmFsdWU6ZnVuY3Rpb24odCl7dmFyIGU9YXJndW1lbnRzLmxlbmd0aDw9MXx8dm9pZCAwPT09YXJndW1lbnRzWzFdP3RoaXMuX2dldFZpYUNvb3JkaW5hdGVzKCk6YXJndW1lbnRzWzFdLGk9dCxvPU1hdGgucG93KDEtaSwyKSp0aGlzLmZyb20ueCsyKmkqKDEtaSkqZS54K01hdGgucG93KGksMikqdGhpcy50by54LG49TWF0aC5wb3coMS1pLDIpKnRoaXMuZnJvbS55KzIqaSooMS1pKSplLnkrTWF0aC5wb3coaSwyKSp0aGlzLnRvLnk7cmV0dXJue3g6byx5Om59fX1dKSxlfShkWyJkZWZhdWx0Il0pO2VbImRlZmF1bHQiXT1sLHQuZXhwb3J0cz1lWyJkZWZhdWx0Il19LGZ1bmN0aW9uKHQsZSxpKXtmdW5jdGlvbiBvKHQpe3JldHVybiB0JiZ0Ll9fZXNNb2R1bGU/dDp7ImRlZmF1bHQiOnR9fWZ1bmN0aW9uIG4odCxlKXtpZighKHQgaW5zdGFuY2VvZiBlKSl0aHJvdyBuZXcgVHlwZUVycm9yKCJDYW5ub3QgY2FsbCBhIGNsYXNzIGFzIGEgZnVuY3Rpb24iKX1mdW5jdGlvbiBzKHQsZSl7aWYoImZ1bmN0aW9uIiE9dHlwZW9mIGUmJm51bGwhPT1lKXRocm93IG5ldyBUeXBlRXJyb3IoIlN1cGVyIGV4cHJlc3Npb24gbXVzdCBlaXRoZXIgYmUgbnVsbCBvciBhIGZ1bmN0aW9uLCBub3QgIit0eXBlb2YgZSk7dC5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZShlJiZlLnByb3RvdHlwZSx7Y29uc3RydWN0b3I6e3ZhbHVlOnQsZW51bWVyYWJsZTohMSx3cml0YWJsZTohMCxjb25maWd1cmFibGU6ITB9fSksZSYmKE9iamVjdC5zZXRQcm90b3R5cGVPZj9PYmplY3Quc2V0UHJvdG90eXBlT2YodCxlKTp0Ll9fcHJvdG9fXz1lKX1PYmplY3QuZGVmaW5lUHJvcGVydHkoZSwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7dmFyIHI9ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KHQsZSl7Zm9yKHZhciBpPTA7aTxlLmxlbmd0aDtpKyspe3ZhciBvPWVbaV07by5lbnVtZXJhYmxlPW8uZW51bWVyYWJsZXx8ITEsby5jb25maWd1cmFibGU9ITAsInZhbHVlImluIG8mJihvLndyaXRhYmxlPSEwKSxPYmplY3QuZGVmaW5lUHJvcGVydHkodCxvLmtleSxvKX19cmV0dXJuIGZ1bmN0aW9uKGUsaSxvKXtyZXR1cm4gaSYmdChlLnByb3RvdHlwZSxpKSxvJiZ0KGUsbyksZX19KCksYT1mdW5jdGlvbih0LGUsaSl7Zm9yKHZhciBvPSEwO287KXt2YXIgbj10LHM9ZSxyPWk7bz0hMSxudWxsPT09biYmKG49RnVuY3Rpb24ucHJvdG90eXBlKTt2YXIgYT1PYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKG4scyk7aWYodm9pZCAwIT09YSl7aWYoInZhbHVlImluIGEpcmV0dXJuIGEudmFsdWU7dmFyIGg9YS5nZXQ7aWYodm9pZCAwPT09aClyZXR1cm47cmV0dXJuIGguY2FsbChyKX12YXIgZD1PYmplY3QuZ2V0UHJvdG90eXBlT2Yobik7aWYobnVsbD09PWQpcmV0dXJuO3Q9ZCxlPXMsaT1yLG89ITAsYT1kPXZvaWQgMH19LGg9aSg4NSksZD1vKGgpLGw9ZnVuY3Rpb24odCl7ZnVuY3Rpb24gZSh0LGksbyl7bih0aGlzLGUpLGEoT2JqZWN0LmdldFByb3RvdHlwZU9mKGUucHJvdG90eXBlKSwiY29uc3RydWN0b3IiLHRoaXMpLmNhbGwodGhpcyx0LGksbyl9cmV0dXJuIHMoZSx0KSxyKGUsW3trZXk6Il9saW5lIix2YWx1ZTpmdW5jdGlvbih0KXt0LmJlZ2luUGF0aCgpLHQubW92ZVRvKHRoaXMuZnJvbS54LHRoaXMuZnJvbS55KSx0LmxpbmVUbyh0aGlzLnRvLngsdGhpcy50by55KSx0aGlzLmVuYWJsZVNoYWRvdyh0KSx0LnN0cm9rZSgpLHRoaXMuZGlzYWJsZVNoYWRvdyh0KX19LHsKa2V5OiJnZXRQb2ludCIsdmFsdWU6ZnVuY3Rpb24odCl7cmV0dXJue3g6KDEtdCkqdGhpcy5mcm9tLngrdCp0aGlzLnRvLngseTooMS10KSp0aGlzLmZyb20ueSt0KnRoaXMudG8ueX19fSx7a2V5OiJfZmluZEJvcmRlclBvc2l0aW9uIix2YWx1ZTpmdW5jdGlvbih0LGUpe3ZhciBpPXRoaXMudG8sbz10aGlzLmZyb207dC5pZD09PXRoaXMuZnJvbS5pZCYmKGk9dGhpcy5mcm9tLG89dGhpcy50byk7dmFyIG49TWF0aC5hdGFuMihpLnktby55LGkueC1vLngpLHM9aS54LW8ueCxyPWkueS1vLnksYT1NYXRoLnNxcnQocypzK3IqciksaD10LmRpc3RhbmNlVG9Cb3JkZXIoZSxuKSxkPShhLWgpL2EsbD17fTtyZXR1cm4gbC54PSgxLWQpKm8ueCtkKmkueCxsLnk9KDEtZCkqby55K2QqaS55LGx9fSx7a2V5OiJfZ2V0RGlzdGFuY2VUb0VkZ2UiLHZhbHVlOmZ1bmN0aW9uKHQsZSxpLG8sbixzKXtyZXR1cm4gdGhpcy5fZ2V0RGlzdGFuY2VUb0xpbmUodCxlLGksbyxuLHMpfX1dKSxlfShkWyJkZWZhdWx0Il0pO2VbImRlZmF1bHQiXT1sLHQuZXhwb3J0cz1lWyJkZWZhdWx0Il19LGZ1bmN0aW9uKHQsZSxpKXtmdW5jdGlvbiBvKHQpe3JldHVybiB0JiZ0Ll9fZXNNb2R1bGU/dDp7ImRlZmF1bHQiOnR9fWZ1bmN0aW9uIG4odCxlKXtpZighKHQgaW5zdGFuY2VvZiBlKSl0aHJvdyBuZXcgVHlwZUVycm9yKCJDYW5ub3QgY2FsbCBhIGNsYXNzIGFzIGEgZnVuY3Rpb24iKX1PYmplY3QuZGVmaW5lUHJvcGVydHkoZSwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7dmFyIHM9ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KHQsZSl7Zm9yKHZhciBpPTA7aTxlLmxlbmd0aDtpKyspe3ZhciBvPWVbaV07by5lbnVtZXJhYmxlPW8uZW51bWVyYWJsZXx8ITEsby5jb25maWd1cmFibGU9ITAsInZhbHVlImluIG8mJihvLndyaXRhYmxlPSEwKSxPYmplY3QuZGVmaW5lUHJvcGVydHkodCxvLmtleSxvKX19cmV0dXJuIGZ1bmN0aW9uKGUsaSxvKXtyZXR1cm4gaSYmdChlLnByb3RvdHlwZSxpKSxvJiZ0KGUsbyksZX19KCkscj1pKDkwKSxhPW8ociksaD1pKDkxKSxkPW8oaCksbD1pKDkyKSx1PW8obCksYz1pKDkzKSxwPW8oYyksZj1pKDk0KSxtPW8oZiksdj1pKDk1KSxnPW8odikseT1pKDk2KSxiPW8oeSksdz1pKDk3KSxfPW8odykseD1pKDEpLGs9ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KGUpe24odGhpcyx0KSx0aGlzLmJvZHk9ZSx0aGlzLnBoeXNpY3NCb2R5PXtwaHlzaWNzTm9kZUluZGljZXM6W10scGh5c2ljc0VkZ2VJbmRpY2VzOltdLGZvcmNlczp7fSx2ZWxvY2l0aWVzOnt9fSx0aGlzLnBoeXNpY3NFbmFibGVkPSEwLHRoaXMuc2ltdWxhdGlvbkludGVydmFsPTFlMy82MCx0aGlzLnJlcXVpcmVzVGltZW91dD0hMCx0aGlzLnByZXZpb3VzU3RhdGVzPXt9LHRoaXMucmVmZXJlbmNlU3RhdGU9e30sdGhpcy5mcmVlemVDYWNoZT17fSx0aGlzLnJlbmRlclRpbWVyPXZvaWQgMCx0aGlzLmFkYXB0aXZlVGltZXN0ZXA9ITEsdGhpcy5hZGFwdGl2ZVRpbWVzdGVwRW5hYmxlZD0hMSx0aGlzLmFkYXB0aXZlQ291bnRlcj0wLHRoaXMuYWRhcHRpdmVJbnRlcnZhbD0zLHRoaXMuc3RhYmlsaXplZD0hMSx0aGlzLnN0YXJ0ZWRTdGFiaWxpemF0aW9uPSExLHRoaXMuc3RhYmlsaXphdGlvbkl0ZXJhdGlvbnM9MCx0aGlzLnJlYWR5PSExLHRoaXMub3B0aW9ucz17fSx0aGlzLmRlZmF1bHRPcHRpb25zPXtlbmFibGVkOiEwLGJhcm5lc0h1dDp7dGhldGE6LjUsZ3Jhdml0YXRpb25hbENvbnN0YW50Oi0yZTMsY2VudHJhbEdyYXZpdHk6LjMsc3ByaW5nTGVuZ3RoOjk1LHNwcmluZ0NvbnN0YW50Oi4wNCxkYW1waW5nOi4wOSxhdm9pZE92ZXJsYXA6MH0sZm9yY2VBdGxhczJCYXNlZDp7dGhldGE6LjUsZ3Jhdml0YXRpb25hbENvbnN0YW50Oi01MCxjZW50cmFsR3Jhdml0eTouMDEsc3ByaW5nQ29uc3RhbnQ6LjA4LHNwcmluZ0xlbmd0aDoxMDAsZGFtcGluZzouNCxhdm9pZE92ZXJsYXA6MH0scmVwdWxzaW9uOntjZW50cmFsR3Jhdml0eTouMixzcHJpbmdMZW5ndGg6MjAwLHNwcmluZ0NvbnN0YW50Oi4wNSxub2RlRGlzdGFuY2U6MTAwLGRhbXBpbmc6LjA5LGF2b2lkT3ZlcmxhcDowfSxoaWVyYXJjaGljYWxSZXB1bHNpb246e2NlbnRyYWxHcmF2aXR5OjAsc3ByaW5nTGVuZ3RoOjEwMCxzcHJpbmdDb25zdGFudDouMDEsbm9kZURpc3RhbmNlOjEyMCxkYW1waW5nOi4wOX0sbWF4VmVsb2NpdHk6NTAsbWluVmVsb2NpdHk6Ljc1LHNvbHZlcjoiYmFybmVzSHV0IixzdGFiaWxpemF0aW9uOntlbmFibGVkOiEwLGl0ZXJhdGlvbnM6MWUzLHVwZGF0ZUludGVydmFsOjUwLG9ubHlEeW5hbWljRWRnZXM6ITEsZml0OiEwfSx0aW1lc3RlcDouNSxhZGFwdGl2ZVRpbWVzdGVwOiEwfSx4LmV4dGVuZCh0aGlzLm9wdGlvbnMsdGhpcy5kZWZhdWx0T3B0aW9ucyksdGhpcy50aW1lc3RlcD0uNSx0aGlzLmxheW91dEZhaWxlZD0hMSx0aGlzLmJpbmRFdmVudExpc3RlbmVycygpfXJldHVybiBzKHQsW3trZXk6ImJpbmRFdmVudExpc3RlbmVycyIsdmFsdWU6ZnVuY3Rpb24oKXt2YXIgdD10aGlzO3RoaXMuYm9keS5lbWl0dGVyLm9uKCJpbml0UGh5c2ljcyIsZnVuY3Rpb24oKXt0LmluaXRQaHlzaWNzKCl9KSx0aGlzLmJvZHkuZW1pdHRlci5vbigiX2xheW91dEZhaWxlZCIsZnVuY3Rpb24oKXt0LmxheW91dEZhaWxlZD0hMH0pLHRoaXMuYm9keS5lbWl0dGVyLm9uKCJyZXNldFBoeXNpY3MiLGZ1bmN0aW9uKCl7dC5zdG9wU2ltdWxhdGlvbigpLHQucmVhZHk9ITF9KSx0aGlzLmJvZHkuZW1pdHRlci5vbigiZGlzYWJsZVBoeXNpY3MiLGZ1bmN0aW9uKCl7dC5waHlzaWNzRW5hYmxlZD0hMSx0LnN0b3BTaW11bGF0aW9uKCl9KSx0aGlzLmJvZHkuZW1pdHRlci5vbigicmVzdG9yZVBoeXNpY3MiLGZ1bmN0aW9uKCl7dC5zZXRPcHRpb25zKHQub3B0aW9ucyksdC5yZWFkeT09PSEwJiZ0LnN0YXJ0U2ltdWxhdGlvbigpfSksdGhpcy5ib2R5LmVtaXR0ZXIub24oInN0YXJ0U2ltdWxhdGlvbiIsZnVuY3Rpb24oKXt0LnJlYWR5PT09ITAmJnQuc3RhcnRTaW11bGF0aW9uKCl9KSx0aGlzLmJvZHkuZW1pdHRlci5vbigic3RvcFNpbXVsYXRpb24iLGZ1bmN0aW9uKCl7dC5zdG9wU2ltdWxhdGlvbigpfSksdGhpcy5ib2R5LmVtaXR0ZXIub24oImRlc3Ryb3kiLGZ1bmN0aW9uKCl7dC5zdG9wU2ltdWxhdGlvbighMSksdC5ib2R5LmVtaXR0ZXIub2ZmKCl9KSx0aGlzLmJvZHkuZW1pdHRlci5vbigiX2RhdGFDaGFuZ2VkIixmdW5jdGlvbigpe3QudXBkYXRlUGh5c2ljc0RhdGEoKX0pfX0se2tleToic2V0T3B0aW9ucyIsdmFsdWU6ZnVuY3Rpb24odCl7dm9pZCAwIT09dCYmKHQ9PT0hMT8odGhpcy5vcHRpb25zLmVuYWJsZWQ9ITEsdGhpcy5waHlzaWNzRW5hYmxlZD0hMSx0aGlzLnN0b3BTaW11bGF0aW9uKCkpOih0aGlzLnBoeXNpY3NFbmFibGVkPSEwLHguc2VsZWN0aXZlTm90RGVlcEV4dGVuZChbInN0YWJpbGl6YXRpb24iXSx0aGlzLm9wdGlvbnMsdCkseC5tZXJnZU9wdGlvbnModGhpcy5vcHRpb25zLHQsInN0YWJpbGl6YXRpb24iKSx2b2lkIDA9PT10LmVuYWJsZWQmJih0aGlzLm9wdGlvbnMuZW5hYmxlZD0hMCksdGhpcy5vcHRpb25zLmVuYWJsZWQ9PT0hMSYmKHRoaXMucGh5c2ljc0VuYWJsZWQ9ITEsdGhpcy5zdG9wU2ltdWxhdGlvbigpKSx0aGlzLnRpbWVzdGVwPXRoaXMub3B0aW9ucy50aW1lc3RlcCkpLHRoaXMuaW5pdCgpfX0se2tleToiaW5pdCIsdmFsdWU6ZnVuY3Rpb24oKXt2YXIgdDsiZm9yY2VBdGxhczJCYXNlZCI9PT10aGlzLm9wdGlvbnMuc29sdmVyPyh0PXRoaXMub3B0aW9ucy5mb3JjZUF0bGFzMkJhc2VkLHRoaXMubm9kZXNTb2x2ZXI9bmV3IGJbImRlZmF1bHQiXSh0aGlzLmJvZHksdGhpcy5waHlzaWNzQm9keSx0KSx0aGlzLmVkZ2VzU29sdmVyPW5ldyBwWyJkZWZhdWx0Il0odGhpcy5ib2R5LHRoaXMucGh5c2ljc0JvZHksdCksdGhpcy5ncmF2aXR5U29sdmVyPW5ldyBfWyJkZWZhdWx0Il0odGhpcy5ib2R5LHRoaXMucGh5c2ljc0JvZHksdCkpOiJyZXB1bHNpb24iPT09dGhpcy5vcHRpb25zLnNvbHZlcj8odD10aGlzLm9wdGlvbnMucmVwdWxzaW9uLHRoaXMubm9kZXNTb2x2ZXI9bmV3IGRbImRlZmF1bHQiXSh0aGlzLmJvZHksdGhpcy5waHlzaWNzQm9keSx0KSx0aGlzLmVkZ2VzU29sdmVyPW5ldyBwWyJkZWZhdWx0Il0odGhpcy5ib2R5LHRoaXMucGh5c2ljc0JvZHksdCksdGhpcy5ncmF2aXR5U29sdmVyPW5ldyBnWyJkZWZhdWx0Il0odGhpcy5ib2R5LHRoaXMucGh5c2ljc0JvZHksdCkpOiJoaWVyYXJjaGljYWxSZXB1bHNpb24iPT09dGhpcy5vcHRpb25zLnNvbHZlcj8odD10aGlzLm9wdGlvbnMuaGllcmFyY2hpY2FsUmVwdWxzaW9uLHRoaXMubm9kZXNTb2x2ZXI9bmV3IHVbImRlZmF1bHQiXSh0aGlzLmJvZHksdGhpcy5waHlzaWNzQm9keSx0KSx0aGlzLmVkZ2VzU29sdmVyPW5ldyBtWyJkZWZhdWx0Il0odGhpcy5ib2R5LHRoaXMucGh5c2ljc0JvZHksdCksdGhpcy5ncmF2aXR5U29sdmVyPW5ldyBnWyJkZWZhdWx0Il0odGhpcy5ib2R5LHRoaXMucGh5c2ljc0JvZHksdCkpOih0PXRoaXMub3B0aW9ucy5iYXJuZXNIdXQsdGhpcy5ub2Rlc1NvbHZlcj1uZXcgYVsiZGVmYXVsdCJdKHRoaXMuYm9keSx0aGlzLnBoeXNpY3NCb2R5LHQpLHRoaXMuZWRnZXNTb2x2ZXI9bmV3IHBbImRlZmF1bHQiXSh0aGlzLmJvZHksdGhpcy5waHlzaWNzQm9keSx0KSx0aGlzLmdyYXZpdHlTb2x2ZXI9bmV3IGdbImRlZmF1bHQiXSh0aGlzLmJvZHksdGhpcy5waHlzaWNzQm9keSx0KSksdGhpcy5tb2RlbE9wdGlvbnM9dH19LHtrZXk6ImluaXRQaHlzaWNzIix2YWx1ZTpmdW5jdGlvbigpe3RoaXMucGh5c2ljc0VuYWJsZWQ9PT0hMCYmdGhpcy5vcHRpb25zLmVuYWJsZWQ9PT0hMD90aGlzLm9wdGlvbnMuc3RhYmlsaXphdGlvbi5lbmFibGVkPT09ITA/dGhpcy5zdGFiaWxpemUoKToodGhpcy5zdGFiaWxpemVkPSExLHRoaXMucmVhZHk9ITAsdGhpcy5ib2R5LmVtaXR0ZXIuZW1pdCgiZml0Iix7fSx0aGlzLmxheW91dEZhaWxlZCksdGhpcy5zdGFydFNpbXVsYXRpb24oKSk6KHRoaXMucmVhZHk9ITAsdGhpcy5ib2R5LmVtaXR0ZXIuZW1pdCgiZml0IikpfX0se2tleToic3RhcnRTaW11bGF0aW9uIix2YWx1ZTpmdW5jdGlvbigpe3RoaXMucGh5c2ljc0VuYWJsZWQ9PT0hMCYmdGhpcy5vcHRpb25zLmVuYWJsZWQ9PT0hMD8odGhpcy5zdGFiaWxpemVkPSExLHRoaXMuYWRhcHRpdmVUaW1lc3RlcD0hMSx0aGlzLmJvZHkuZW1pdHRlci5lbWl0KCJfcmVzaXplTm9kZXMiKSx2b2lkIDA9PT10aGlzLnZpZXdGdW5jdGlvbiYmKHRoaXMudmlld0Z1bmN0aW9uPXRoaXMuc2ltdWxhdGlvblN0ZXAuYmluZCh0aGlzKSx0aGlzLmJvZHkuZW1pdHRlci5vbigiaW5pdFJlZHJhdyIsdGhpcy52aWV3RnVuY3Rpb24pLHRoaXMuYm9keS5lbWl0dGVyLmVtaXQoIl9zdGFydFJlbmRlcmluZyIpKSk6dGhpcy5ib2R5LmVtaXR0ZXIuZW1pdCgiX3JlZHJhdyIpfX0se2tleToic3RvcFNpbXVsYXRpb24iLHZhbHVlOmZ1bmN0aW9uKCl7dmFyIHQ9YXJndW1lbnRzLmxlbmd0aDw9MHx8dm9pZCAwPT09YXJndW1lbnRzWzBdPyEwOmFyZ3VtZW50c1swXTt0aGlzLnN0YWJpbGl6ZWQ9ITAsdD09PSEwJiZ0aGlzLl9lbWl0U3RhYmlsaXplZCgpLHZvaWQgMCE9PXRoaXMudmlld0Z1bmN0aW9uJiYodGhpcy5ib2R5LmVtaXR0ZXIub2ZmKCJpbml0UmVkcmF3Iix0aGlzLnZpZXdGdW5jdGlvbiksdGhpcy52aWV3RnVuY3Rpb249dm9pZCAwLHQ9PT0hMCYmdGhpcy5ib2R5LmVtaXR0ZXIuZW1pdCgiX3N0b3BSZW5kZXJpbmciKSl9fSx7a2V5OiJzaW11bGF0aW9uU3RlcCIsdmFsdWU6ZnVuY3Rpb24oKXt2YXIgdD1EYXRlLm5vdygpO3RoaXMucGh5c2ljc1RpY2soKTt2YXIgZT1EYXRlLm5vdygpLXQ7KGU8LjQqdGhpcy5zaW11bGF0aW9uSW50ZXJ2YWx8fHRoaXMucnVuRG91YmxlU3BlZWQ9PT0hMCkmJnRoaXMuc3RhYmlsaXplZD09PSExJiYodGhpcy5waHlzaWNzVGljaygpLHRoaXMucnVuRG91YmxlU3BlZWQ9ITApLHRoaXMuc3RhYmlsaXplZD09PSEwJiZ0aGlzLnN0b3BTaW11bGF0aW9uKCl9fSx7a2V5OiJfZW1pdFN0YWJpbGl6ZWQiLHZhbHVlOmZ1bmN0aW9uKCl7dmFyIHQ9dGhpcyxlPWFyZ3VtZW50cy5sZW5ndGg8PTB8fHZvaWQgMD09PWFyZ3VtZW50c1swXT90aGlzLnN0YWJpbGl6YXRpb25JdGVyYXRpb25zOmFyZ3VtZW50c1swXTsodGhpcy5zdGFiaWxpemF0aW9uSXRlcmF0aW9ucz4xfHx0aGlzLnN0YXJ0ZWRTdGFiaWxpemF0aW9uPT09ITApJiZzZXRUaW1lb3V0KGZ1bmN0aW9uKCl7dC5ib2R5LmVtaXR0ZXIuZW1pdCgic3RhYmlsaXplZCIse2l0ZXJhdGlvbnM6ZX0pLHQuc3RhcnRlZFN0YWJpbGl6YXRpb249ITEsdC5zdGFiaWxpemF0aW9uSXRlcmF0aW9ucz0wfSwwKX19LHtrZXk6InBoeXNpY3NUaWNrIix2YWx1ZTpmdW5jdGlvbigpe2lmKHRoaXMuc3RhcnRlZFN0YWJpbGl6YXRpb249PT0hMSYmKHRoaXMuYm9keS5lbWl0dGVyLmVtaXQoInN0YXJ0U3RhYmlsaXppbmciKSx0aGlzLnN0YXJ0ZWRTdGFiaWxpemF0aW9uPSEwKSx0aGlzLnN0YWJpbGl6ZWQ9PT0hMSl7aWYodGhpcy5hZGFwdGl2ZVRpbWVzdGVwPT09ITAmJnRoaXMuYWRhcHRpdmVUaW1lc3RlcEVuYWJsZWQ9PT0hMCl7dmFyIHQ9MS4yO3RoaXMuYWRhcHRpdmVDb3VudGVyJXRoaXMuYWRhcHRpdmVJbnRlcnZhbD09PTA/KHRoaXMudGltZXN0ZXA9Mip0aGlzLnRpbWVzdGVwLHRoaXMuY2FsY3VsYXRlRm9yY2VzKCksdGhpcy5tb3ZlTm9kZXMoKSx0aGlzLnJldmVydCgpLHRoaXMudGltZXN0ZXA9LjUqdGhpcy50aW1lc3RlcCx0aGlzLmNhbGN1bGF0ZUZvcmNlcygpLHRoaXMubW92ZU5vZGVzKCksdGhpcy5jYWxjdWxhdGVGb3JjZXMoKSx0aGlzLm1vdmVOb2RlcygpLHRoaXMuX2V2YWx1YXRlU3RlcFF1YWxpdHkoKT09PSEwP3RoaXMudGltZXN0ZXA9dCp0aGlzLnRpbWVzdGVwOnRoaXMudGltZXN0ZXAvdDx0aGlzLm9wdGlvbnMudGltZXN0ZXA/dGhpcy50aW1lc3RlcD10aGlzLm9wdGlvbnMudGltZXN0ZXA6KHRoaXMuYWRhcHRpdmVDb3VudGVyPS0xLHRoaXMudGltZXN0ZXA9TWF0aC5tYXgodGhpcy5vcHRpb25zLnRpbWVzdGVwLHRoaXMudGltZXN0ZXAvdCkpKToodGhpcy5jYWxjdWxhdGVGb3JjZXMoKSx0aGlzLm1vdmVOb2RlcygpKSx0aGlzLmFkYXB0aXZlQ291bnRlcis9MX1lbHNlIHRoaXMudGltZXN0ZXA9dGhpcy5vcHRpb25zLnRpbWVzdGVwLHRoaXMuY2FsY3VsYXRlRm9yY2VzKCksdGhpcy5tb3ZlTm9kZXMoKTt0aGlzLnN0YWJpbGl6ZWQ9PT0hMCYmdGhpcy5yZXZlcnQoKSx0aGlzLnN0YWJpbGl6YXRpb25JdGVyYXRpb25zKyt9fX0se2tleToidXBkYXRlUGh5c2ljc0RhdGEiLHZhbHVlOmZ1bmN0aW9uKCl7dGhpcy5waHlzaWNzQm9keS5mb3JjZXM9e30sdGhpcy5waHlzaWNzQm9keS5waHlzaWNzTm9kZUluZGljZXM9W10sdGhpcy5waHlzaWNzQm9keS5waHlzaWNzRWRnZUluZGljZXM9W107dmFyIHQ9dGhpcy5ib2R5Lm5vZGVzLGU9dGhpcy5ib2R5LmVkZ2VzO2Zvcih2YXIgaSBpbiB0KXQuaGFzT3duUHJvcGVydHkoaSkmJnRbaV0ub3B0aW9ucy5waHlzaWNzPT09ITAmJnRoaXMucGh5c2ljc0JvZHkucGh5c2ljc05vZGVJbmRpY2VzLnB1c2godFtpXS5pZCk7Zm9yKHZhciBvIGluIGUpZS5oYXNPd25Qcm9wZXJ0eShvKSYmZVtvXS5vcHRpb25zLnBoeXNpY3M9PT0hMCYmdGhpcy5waHlzaWNzQm9keS5waHlzaWNzRWRnZUluZGljZXMucHVzaChlW29dLmlkKTtmb3IodmFyIG49MDtuPHRoaXMucGh5c2ljc0JvZHkucGh5c2ljc05vZGVJbmRpY2VzLmxlbmd0aDtuKyspe3ZhciBpPXRoaXMucGh5c2ljc0JvZHkucGh5c2ljc05vZGVJbmRpY2VzW25dO3RoaXMucGh5c2ljc0JvZHkuZm9yY2VzW2ldPXt4OjAseTowfSx2b2lkIDA9PT10aGlzLnBoeXNpY3NCb2R5LnZlbG9jaXRpZXNbaV0mJih0aGlzLnBoeXNpY3NCb2R5LnZlbG9jaXRpZXNbaV09e3g6MCx5OjB9KX1mb3IodmFyIGkgaW4gdGhpcy5waHlzaWNzQm9keS52ZWxvY2l0aWVzKXZvaWQgMD09PXRbaV0mJmRlbGV0ZSB0aGlzLnBoeXNpY3NCb2R5LnZlbG9jaXRpZXNbaV19fSx7a2V5OiJyZXZlcnQiLHZhbHVlOmZ1bmN0aW9uKCl7dmFyIHQ9T2JqZWN0LmtleXModGhpcy5wcmV2aW91c1N0YXRlcyksZT10aGlzLmJvZHkubm9kZXMsaT10aGlzLnBoeXNpY3NCb2R5LnZlbG9jaXRpZXM7dGhpcy5yZWZlcmVuY2VTdGF0ZT17fTtmb3IodmFyIG89MDtvPHQubGVuZ3RoO28rKyl7dmFyIG49dFtvXTt2b2lkIDAhPT1lW25dP2Vbbl0ub3B0aW9ucy5waHlzaWNzPT09ITAmJih0aGlzLnJlZmVyZW5jZVN0YXRlW25dPXtwb3NpdGlvbnM6e3g6ZVtuXS54LHk6ZVtuXS55fX0saVtuXS54PXRoaXMucHJldmlvdXNTdGF0ZXNbbl0udngsaVtuXS55PXRoaXMucHJldmlvdXNTdGF0ZXNbbl0udnksZVtuXS54PXRoaXMucHJldmlvdXNTdGF0ZXNbbl0ueCxlW25dLnk9dGhpcy5wcmV2aW91c1N0YXRlc1tuXS55KTpkZWxldGUgdGhpcy5wcmV2aW91c1N0YXRlc1tuXX19fSx7a2V5OiJfZXZhbHVhdGVTdGVwUXVhbGl0eSIsdmFsdWU6ZnVuY3Rpb24oKXt2YXIgdD12b2lkIDAsZT12b2lkIDAsaT12b2lkIDAsbz10aGlzLmJvZHkubm9kZXMsbj10aGlzLnJlZmVyZW5jZVN0YXRlLHM9LjM7Zm9yKHZhciByIGluIHRoaXMucmVmZXJlbmNlU3RhdGUpaWYodGhpcy5yZWZlcmVuY2VTdGF0ZS5oYXNPd25Qcm9wZXJ0eShyKSYmdm9pZCAwIT09b1tyXSYmKHQ9b1tyXS54LW5bcl0ucG9zaXRpb25zLngsZT1vW3JdLnktbltyXS5wb3NpdGlvbnMueSxpPU1hdGguc3FydChNYXRoLnBvdyh0LDIpK01hdGgucG93KGUsMikpLGk+cykpcmV0dXJuITE7cmV0dXJuITB9fSx7a2V5OiJtb3ZlTm9kZXMiLHZhbHVlOmZ1bmN0aW9uKCl7Zm9yKHZhciB0PXRoaXMucGh5c2ljc0JvZHkucGh5c2ljc05vZGVJbmRpY2VzLGU9dGhpcy5vcHRpb25zLm1heFZlbG9jaXR5P3RoaXMub3B0aW9ucy5tYXhWZWxvY2l0eToxZTksaT0wLG89MCxuPTUscz0wO3M8dC5sZW5ndGg7cysrKXt2YXIgcj10W3NdLGE9dGhpcy5fcGVyZm9ybVN0ZXAocixlKTtpPU1hdGgubWF4KGksYSksbys9YX10aGlzLmFkYXB0aXZlVGltZXN0ZXBFbmFibGVkPW8vdC5sZW5ndGg8bix0aGlzLnN0YWJpbGl6ZWQ9aTx0aGlzLm9wdGlvbnMubWluVmVsb2NpdHl9fSx7a2V5OiJfcGVyZm9ybVN0ZXAiLHZhbHVlOmZ1bmN0aW9uKHQsZSl7dmFyIGk9dGhpcy5ib2R5Lm5vZGVzW3RdLG89dGhpcy50aW1lc3RlcCxuPXRoaXMucGh5c2ljc0JvZHkuZm9yY2VzLHM9dGhpcy5waHlzaWNzQm9keS52ZWxvY2l0aWVzO2lmKHRoaXMucHJldmlvdXNTdGF0ZXNbdF09e3g6aS54LHk6aS55LHZ4OnNbdF0ueCx2eTpzW3RdLnl9LGkub3B0aW9ucy5maXhlZC54PT09ITEpe3ZhciByPXRoaXMubW9kZWxPcHRpb25zLmRhbXBpbmcqc1t0XS54LGE9KG5bdF0ueC1yKS9pLm9wdGlvbnMubWFzcztzW3RdLngrPWEqbyxzW3RdLng9TWF0aC5hYnMoc1t0XS54KT5lP3NbdF0ueD4wP2U6LWU6c1t0XS54LGkueCs9c1t0XS54Km99ZWxzZSBuW3RdLng9MCxzW3RdLng9MDtpZihpLm9wdGlvbnMuZml4ZWQueT09PSExKXt2YXIgaD10aGlzLm1vZGVsT3B0aW9ucy5kYW1waW5nKnNbdF0ueSxkPShuW3RdLnktaCkvaS5vcHRpb25zLm1hc3M7c1t0XS55Kz1kKm8sc1t0XS55PU1hdGguYWJzKHNbdF0ueSk+ZT9zW3RdLnk+MD9lOi1lOnNbdF0ueSxpLnkrPXNbdF0ueSpvfWVsc2Ugblt0XS55PTAsc1t0XS55PTA7dmFyIGw9TWF0aC5zcXJ0KE1hdGgucG93KHNbdF0ueCwyKStNYXRoLnBvdyhzW3RdLnksMikpO3JldHVybiBsfX0se2tleToiY2FsY3VsYXRlRm9yY2VzIix2YWx1ZTpmdW5jdGlvbigpe3RoaXMuZ3Jhdml0eVNvbHZlci5zb2x2ZSgpLHRoaXMubm9kZXNTb2x2ZXIuc29sdmUoKSx0aGlzLmVkZ2VzU29sdmVyLnNvbHZlKCl9fSx7a2V5OiJfZnJlZXplTm9kZXMiLHZhbHVlOmZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5ib2R5Lm5vZGVzO2Zvcih2YXIgZSBpbiB0KXQuaGFzT3duUHJvcGVydHkoZSkmJnRbZV0ueCYmdFtlXS55JiYodGhpcy5mcmVlemVDYWNoZVtlXT17eDp0W2VdLm9wdGlvbnMuZml4ZWQueCx5OnRbZV0ub3B0aW9ucy5maXhlZC55fSx0W2VdLm9wdGlvbnMuZml4ZWQueD0hMCx0W2VdLm9wdGlvbnMuZml4ZWQueT0hMCl9fSx7a2V5OiJfcmVzdG9yZUZyb3plbk5vZGVzIix2YWx1ZTpmdW5jdGlvbigpe3ZhciB0PXRoaXMuYm9keS5ub2Rlcztmb3IodmFyIGUgaW4gdCl0Lmhhc093blByb3BlcnR5KGUpJiZ2b2lkIDAhPT10aGlzLmZyZWV6ZUNhY2hlW2VdJiYodFtlXS5vcHRpb25zLmZpeGVkLng9dGhpcy5mcmVlemVDYWNoZVtlXS54LHRbZV0ub3B0aW9ucy5maXhlZC55PXRoaXMuZnJlZXplQ2FjaGVbZV0ueSk7dGhpcy5mcmVlemVDYWNoZT17fX19LHtrZXk6InN0YWJpbGl6ZSIsdmFsdWU6ZnVuY3Rpb24oKXt2YXIgdD10aGlzLGU9YXJndW1lbnRzLmxlbmd0aDw9MHx8dm9pZCAwPT09YXJndW1lbnRzWzBdP3RoaXMub3B0aW9ucy5zdGFiaWxpemF0aW9uLml0ZXJhdGlvbnM6YXJndW1lbnRzWzBdO3JldHVybiJudW1iZXIiIT10eXBlb2YgZSYmKGNvbnNvbGUubG9nKCJUaGUgc3RhYmlsaXplIG1ldGhvZCBuZWVkcyBhIG51bWVyaWMgYW1vdW50IG9mIGl0ZXJhdGlvbnMuIFN3aXRjaGluZyB0byBkZWZhdWx0OiAiLHRoaXMub3B0aW9ucy5zdGFiaWxpemF0aW9uLml0ZXJhdGlvbnMpLGU9dGhpcy5vcHRpb25zLnN0YWJpbGl6YXRpb24uaXRlcmF0aW9ucyksMD09PXRoaXMucGh5c2ljc0JvZHkucGh5c2ljc05vZGVJbmRpY2VzLmxlbmd0aD92b2lkKHRoaXMucmVhZHk9ITApOih0aGlzLmFkYXB0aXZlVGltZXN0ZXA9dGhpcy5vcHRpb25zLmFkYXB0aXZlVGltZXN0ZXAsdGhpcy5ib2R5LmVtaXR0ZXIuZW1pdCgiX3Jlc2l6ZU5vZGVzIiksdGhpcy5zdG9wU2ltdWxhdGlvbigpLHRoaXMuc3RhYmlsaXplZD0hMSx0aGlzLmJvZHkuZW1pdHRlci5lbWl0KCJfYmxvY2tSZWRyYXciKSx0aGlzLnRhcmdldEl0ZXJhdGlvbnM9ZSx0aGlzLm9wdGlvbnMuc3RhYmlsaXphdGlvbi5vbmx5RHluYW1pY0VkZ2VzPT09ITAmJnRoaXMuX2ZyZWV6ZU5vZGVzKCksdGhpcy5zdGFiaWxpemF0aW9uSXRlcmF0aW9ucz0wLHZvaWQgc2V0VGltZW91dChmdW5jdGlvbigpe3JldHVybiB0Ll9zdGFiaWxpemF0aW9uQmF0Y2goKX0sMCkpfX0se2tleToiX3N0YWJpbGl6YXRpb25CYXRjaCIsdmFsdWU6ZnVuY3Rpb24oKXt0aGlzLnN0YXJ0ZWRTdGFiaWxpemF0aW9uPT09ITEmJih0aGlzLmJvZHkuZW1pdHRlci5lbWl0KCJzdGFydFN0YWJpbGl6aW5nIiksdGhpcy5zdGFydGVkU3RhYmlsaXphdGlvbj0hMCk7Zm9yKHZhciB0PTA7dGhpcy5zdGFiaWxpemVkPT09ITEmJnQ8dGhpcy5vcHRpb25zLnN0YWJpbGl6YXRpb24udXBkYXRlSW50ZXJ2YWwmJnRoaXMuc3RhYmlsaXphdGlvbkl0ZXJhdGlvbnM8dGhpcy50YXJnZXRJdGVyYXRpb25zOyl0aGlzLnBoeXNpY3NUaWNrKCksdCsrO3RoaXMuc3RhYmlsaXplZD09PSExJiZ0aGlzLnN0YWJpbGl6YXRpb25JdGVyYXRpb25zPHRoaXMudGFyZ2V0SXRlcmF0aW9ucz8odGhpcy5ib2R5LmVtaXR0ZXIuZW1pdCgic3RhYmlsaXphdGlvblByb2dyZXNzIix7aXRlcmF0aW9uczp0aGlzLnN0YWJpbGl6YXRpb25JdGVyYXRpb25zLHRvdGFsOnRoaXMudGFyZ2V0SXRlcmF0aW9uc30pLHNldFRpbWVvdXQodGhpcy5fc3RhYmlsaXphdGlvbkJhdGNoLmJpbmQodGhpcyksMCkpOnRoaXMuX2ZpbmFsaXplU3RhYmlsaXphdGlvbigpfX0se2tleToiX2ZpbmFsaXplU3RhYmlsaXphdGlvbiIsdmFsdWU6ZnVuY3Rpb24oKXt0aGlzLmJvZHkuZW1pdHRlci5lbWl0KCJfYWxsb3dSZWRyYXciKSx0aGlzLm9wdGlvbnMuc3RhYmlsaXphdGlvbi5maXQ9PT0hMCYmdGhpcy5ib2R5LmVtaXR0ZXIuZW1pdCgiZml0IiksdGhpcy5vcHRpb25zLnN0YWJpbGl6YXRpb24ub25seUR5bmFtaWNFZGdlcz09PSEwJiZ0aGlzLl9yZXN0b3JlRnJvemVuTm9kZXMoKSx0aGlzLmJvZHkuZW1pdHRlci5lbWl0KCJzdGFiaWxpemF0aW9uSXRlcmF0aW9uc0RvbmUiKSx0aGlzLmJvZHkuZW1pdHRlci5lbWl0KCJfcmVxdWVzdFJlZHJhdyIpLHRoaXMuc3RhYmlsaXplZD09PSEwP3RoaXMuX2VtaXRTdGFiaWxpemVkKCk6dGhpcy5zdGFydFNpbXVsYXRpb24oKSx0aGlzLnJlYWR5PSEwfX0se2tleToiX2RyYXdGb3JjZXMiLHZhbHVlOmZ1bmN0aW9uKHQpe2Zvcih2YXIgZT0wO2U8dGhpcy5waHlzaWNzQm9keS5waHlzaWNzTm9kZUluZGljZXMubGVuZ3RoO2UrKyl7dmFyIGk9dGhpcy5ib2R5Lm5vZGVzW3RoaXMucGh5c2ljc0JvZHkucGh5c2ljc05vZGVJbmRpY2VzW2VdXSxvPXRoaXMucGh5c2ljc0JvZHkuZm9yY2VzW3RoaXMucGh5c2ljc0JvZHkucGh5c2ljc05vZGVJbmRpY2VzW2VdXSxuPTIwLHM9LjAzLHI9TWF0aC5zcXJ0KE1hdGgucG93KG8ueCwyKStNYXRoLnBvdyhvLngsMikpLGE9TWF0aC5taW4oTWF0aC5tYXgoNSxyKSwxNSksaD0zKmEsZD14LkhTVlRvSGV4KCgxODAtMTgwKk1hdGgubWluKDEsTWF0aC5tYXgoMCxzKnIpKSkvMzYwLDEsMSk7dC5saW5lV2lkdGg9YSx0LnN0cm9rZVN0eWxlPWQsdC5iZWdpblBhdGgoKSx0Lm1vdmVUbyhpLngsaS55KSx0LmxpbmVUbyhpLngrbipvLngsaS55K24qby55KSx0LnN0cm9rZSgpO3ZhciBsPU1hdGguYXRhbjIoby55LG8ueCk7dC5maWxsU3R5bGU9ZCx0LmFycm93KGkueCtuKm8ueCtNYXRoLmNvcyhsKSpoLGkueStuKm8ueStNYXRoLnNpbihsKSpoLGwsaCksdC5maWxsKCl9fX1dKSx0fSgpO2VbImRlZmF1bHQiXT1rLHQuZXhwb3J0cz1lWyJkZWZhdWx0Il19LGZ1bmN0aW9uKHQsZSl7ZnVuY3Rpb24gaSh0LGUpe2lmKCEodCBpbnN0YW5jZW9mIGUpKXRocm93IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCBjYWxsIGEgY2xhc3MgYXMgYSBmdW5jdGlvbiIpfU9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt2YXIgbz1mdW5jdGlvbigpe2Z1bmN0aW9uIHQodCxlKXtmb3IodmFyIGk9MDtpPGUubGVuZ3RoO2krKyl7dmFyIG89ZVtpXTtvLmVudW1lcmFibGU9by5lbnVtZXJhYmxlfHwhMSxvLmNvbmZpZ3VyYWJsZT0hMCwidmFsdWUiaW4gbyYmKG8ud3JpdGFibGU9ITApLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LG8ua2V5LG8pfX1yZXR1cm4gZnVuY3Rpb24oZSxpLG8pe3JldHVybiBpJiZ0KGUucHJvdG90eXBlLGkpLG8mJnQoZSxvKSxlfX0oKSxuPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdChlLG8sbil7aSh0aGlzLHQpLHRoaXMuYm9keT1lLHRoaXMucGh5c2ljc0JvZHk9byx0aGlzLmJhcm5lc0h1dFRyZWUsdGhpcy5zZXRPcHRpb25zKG4pLHRoaXMucmFuZG9tU2VlZD01fXJldHVybiBvKHQsW3trZXk6InNldE9wdGlvbnMiLHZhbHVlOmZ1bmN0aW9uKHQpe3RoaXMub3B0aW9ucz10LHRoaXMudGhldGFJbnZlcnNlZD0xL3RoaXMub3B0aW9ucy50aGV0YSx0aGlzLm92ZXJsYXBBdm9pZGFuY2VGYWN0b3I9MS1NYXRoLm1heCgwLE1hdGgubWluKDEsdGhpcy5vcHRpb25zLmF2b2lkT3ZlcmxhcCkpfX0se2tleToic2VlZGVkUmFuZG9tIix2YWx1ZTpmdW5jdGlvbigpe3ZhciB0PTFlNCpNYXRoLnNpbih0aGlzLnJhbmRvbVNlZWQrKyk7cmV0dXJuIHQtTWF0aC5mbG9vcih0KX19LHtrZXk6InNvbHZlIix2YWx1ZTpmdW5jdGlvbigpe2lmKDAhPT10aGlzLm9wdGlvbnMuZ3Jhdml0YXRpb25hbENvbnN0YW50JiZ0aGlzLnBoeXNpY3NCb2R5LnBoeXNpY3NOb2RlSW5kaWNlcy5sZW5ndGg+MCl7dmFyIHQ9dm9pZCAwLGU9dGhpcy5ib2R5Lm5vZGVzLGk9dGhpcy5waHlzaWNzQm9keS5waHlzaWNzTm9kZUluZGljZXMsbz1pLmxlbmd0aCxuPXRoaXMuX2Zvcm1CYXJuZXNIdXRUcmVlKGUsaSk7dGhpcy5iYXJuZXNIdXRUcmVlPW47Zm9yKHZhciBzPTA7bz5zO3MrKyl0PWVbaVtzXV0sdC5vcHRpb25zLm1hc3M+MCYmKHRoaXMuX2dldEZvcmNlQ29udHJpYnV0aW9uKG4ucm9vdC5jaGlsZHJlbi5OVyx0KSx0aGlzLl9nZXRGb3JjZUNvbnRyaWJ1dGlvbihuLnJvb3QuY2hpbGRyZW4uTkUsdCksdGhpcy5fZ2V0Rm9yY2VDb250cmlidXRpb24obi5yb290LmNoaWxkcmVuLlNXLHQpLHRoaXMuX2dldEZvcmNlQ29udHJpYnV0aW9uKG4ucm9vdC5jaGlsZHJlbi5TRSx0KSl9fX0se2tleToiX2dldEZvcmNlQ29udHJpYnV0aW9uIix2YWx1ZTpmdW5jdGlvbih0LGUpe2lmKHQuY2hpbGRyZW5Db3VudD4wKXt2YXIgaT12b2lkIDAsbz12b2lkIDAsbj12b2lkIDA7aT10LmNlbnRlck9mTWFzcy54LWUueCxvPXQuY2VudGVyT2ZNYXNzLnktZS55LG49TWF0aC5zcXJ0KGkqaStvKm8pLG4qdC5jYWxjU2l6ZT50aGlzLnRoZXRhSW52ZXJzZWQ/dGhpcy5fY2FsY3VsYXRlRm9yY2VzKG4saSxvLGUsdCk6ND09PXQuY2hpbGRyZW5Db3VudD8odGhpcy5fZ2V0Rm9yY2VDb250cmlidXRpb24odC5jaGlsZHJlbi5OVyxlKSx0aGlzLl9nZXRGb3JjZUNvbnRyaWJ1dGlvbih0LmNoaWxkcmVuLk5FLGUpLHRoaXMuX2dldEZvcmNlQ29udHJpYnV0aW9uKHQuY2hpbGRyZW4uU1csZSksdGhpcy5fZ2V0Rm9yY2VDb250cmlidXRpb24odC5jaGlsZHJlbi5TRSxlKSk6dC5jaGlsZHJlbi5kYXRhLmlkIT1lLmlkJiZ0aGlzLl9jYWxjdWxhdGVGb3JjZXMobixpLG8sZSx0KX19fSx7a2V5OiJfY2FsY3VsYXRlRm9yY2VzIix2YWx1ZTpmdW5jdGlvbih0LGUsaSxvLG4pezA9PT10JiYodD0uMSxlPXQpLHRoaXMub3ZlcmxhcEF2b2lkYW5jZUZhY3RvcjwxJiYodD1NYXRoLm1heCguMSt0aGlzLm92ZXJsYXBBdm9pZGFuY2VGYWN0b3Iqby5zaGFwZS5yYWRpdXMsdC1vLnNoYXBlLnJhZGl1cykpO3ZhciBzPXRoaXMub3B0aW9ucy5ncmF2aXRhdGlvbmFsQ29uc3RhbnQqbi5tYXNzKm8ub3B0aW9ucy5tYXNzL01hdGgucG93KHQsMykscj1lKnMsYT1pKnM7dGhpcy5waHlzaWNzQm9keS5mb3JjZXNbby5pZF0ueCs9cix0aGlzLnBoeXNpY3NCb2R5LmZvcmNlc1tvLmlkXS55Kz1hfX0se2tleToiX2Zvcm1CYXJuZXNIdXRUcmVlIix2YWx1ZTpmdW5jdGlvbih0LGUpe2Zvcih2YXIgaT12b2lkIDAsbz1lLmxlbmd0aCxuPXRbZVswXV0ueCxzPXRbZVswXV0ueSxyPXRbZVswXV0ueCxhPXRbZVswXV0ueSxoPTE7bz5oO2grKyl7dmFyIGQ9dFtlW2hdXS54LGw9dFtlW2hdXS55O3RbZVtoXV0ub3B0aW9ucy5tYXNzPjAmJihuPmQmJihuPWQpLGQ+ciYmKHI9ZCkscz5sJiYocz1sKSxsPmEmJihhPWwpKX12YXIgdT1NYXRoLmFicyhyLW4pLU1hdGguYWJzKGEtcyk7dT4wPyhzLT0uNSp1LGErPS41KnUpOihuKz0uNSp1LHItPS41KnUpO3ZhciBjPTFlLTUscD1NYXRoLm1heChjLE1hdGguYWJzKHItbikpLGY9LjUqcCxtPS41KihuK3IpLHY9LjUqKHMrYSksZz17cm9vdDp7Y2VudGVyT2ZNYXNzOnt4OjAseTowfSxtYXNzOjAscmFuZ2U6e21pblg6bS1mLG1heFg6bStmLG1pblk6di1mLG1heFk6ditmfSxzaXplOnAsY2FsY1NpemU6MS9wLGNoaWxkcmVuOntkYXRhOm51bGx9LG1heFdpZHRoOjAsbGV2ZWw6MCxjaGlsZHJlbkNvdW50OjR9fTt0aGlzLl9zcGxpdEJyYW5jaChnLnJvb3QpO2Zvcih2YXIgaD0wO28+aDtoKyspaT10W2VbaF1dLGkub3B0aW9ucy5tYXNzPjAmJnRoaXMuX3BsYWNlSW5UcmVlKGcucm9vdCxpKTtyZXR1cm4gZ319LHtrZXk6Il91cGRhdGVCcmFuY2hNYXNzIix2YWx1ZTpmdW5jdGlvbih0LGUpe3ZhciBpPXQubWFzcytlLm9wdGlvbnMubWFzcyxvPTEvaTt0LmNlbnRlck9mTWFzcy54PXQuY2VudGVyT2ZNYXNzLngqdC5tYXNzK2UueCplLm9wdGlvbnMubWFzcyx0LmNlbnRlck9mTWFzcy54Kj1vLHQuY2VudGVyT2ZNYXNzLnk9dC5jZW50ZXJPZk1hc3MueSp0Lm1hc3MrZS55KmUub3B0aW9ucy5tYXNzLHQuY2VudGVyT2ZNYXNzLnkqPW8sdC5tYXNzPWk7dmFyIG49TWF0aC5tYXgoTWF0aC5tYXgoZS5oZWlnaHQsZS5yYWRpdXMpLGUud2lkdGgpO3QubWF4V2lkdGg9dC5tYXhXaWR0aDxuP246dC5tYXhXaWR0aH19LHtrZXk6Il9wbGFjZUluVHJlZSIsdmFsdWU6ZnVuY3Rpb24odCxlLGkpeygxIT1pfHx2b2lkIDA9PT1pKSYmdGhpcy5fdXBkYXRlQnJhbmNoTWFzcyh0LGUpLHQuY2hpbGRyZW4uTlcucmFuZ2UubWF4WD5lLng/dC5jaGlsZHJlbi5OVy5yYW5nZS5tYXhZPmUueT90aGlzLl9wbGFjZUluUmVnaW9uKHQsZSwiTlciKTp0aGlzLl9wbGFjZUluUmVnaW9uKHQsZSwiU1ciKTp0LmNoaWxkcmVuLk5XLnJhbmdlLm1heFk+ZS55P3RoaXMuX3BsYWNlSW5SZWdpb24odCxlLCJORSIpOnRoaXMuX3BsYWNlSW5SZWdpb24odCxlLCJTRSIpfX0se2tleToiX3BsYWNlSW5SZWdpb24iLHZhbHVlOmZ1bmN0aW9uKHQsZSxpKXtzd2l0Y2godC5jaGlsZHJlbltpXS5jaGlsZHJlbkNvdW50KXtjYXNlIDA6dC5jaGlsZHJlbltpXS5jaGlsZHJlbi5kYXRhPWUsdC5jaGlsZHJlbltpXS5jaGlsZHJlbkNvdW50PTEsdGhpcy5fdXBkYXRlQnJhbmNoTWFzcyh0LmNoaWxkcmVuW2ldLGUpO2JyZWFrO2Nhc2UgMTp0LmNoaWxkcmVuW2ldLmNoaWxkcmVuLmRhdGEueD09PWUueCYmdC5jaGlsZHJlbltpXS5jaGlsZHJlbi5kYXRhLnk9PT1lLnk/KGUueCs9dGhpcy5zZWVkZWRSYW5kb20oKSxlLnkrPXRoaXMuc2VlZGVkUmFuZG9tKCkpOih0aGlzLl9zcGxpdEJyYW5jaCh0LmNoaWxkcmVuW2ldKSx0aGlzLl9wbGFjZUluVHJlZSh0LmNoaWxkcmVuW2ldLGUpKTticmVhaztjYXNlIDQ6dGhpcy5fcGxhY2VJblRyZWUodC5jaGlsZHJlbltpXSxlKX19fSx7a2V5OiJfc3BsaXRCcmFuY2giLHZhbHVlOmZ1bmN0aW9uKHQpe3ZhciBlPW51bGw7MT09PXQuY2hpbGRyZW5Db3VudCYmKGU9dC5jaGlsZHJlbi5kYXRhLHQubWFzcz0wLHQuY2VudGVyT2ZNYXNzLng9MCx0LmNlbnRlck9mTWFzcy55PTApLHQuY2hpbGRyZW5Db3VudD00LHQuY2hpbGRyZW4uZGF0YT1udWxsLHRoaXMuX2luc2VydFJlZ2lvbih0LCJOVyIpLHRoaXMuX2luc2VydFJlZ2lvbih0LCJORSIpLHRoaXMuX2luc2VydFJlZ2lvbih0LCJTVyIpLHRoaXMuX2luc2VydFJlZ2lvbih0LCJTRSIpLG51bGwhPWUmJnRoaXMuX3BsYWNlSW5UcmVlKHQsZSl9fSx7a2V5OiJfaW5zZXJ0UmVnaW9uIix2YWx1ZTpmdW5jdGlvbih0LGUpe3ZhciBpPXZvaWQgMCxvPXZvaWQgMCxuPXZvaWQgMCxzPXZvaWQgMCxyPS41KnQuc2l6ZTtzd2l0Y2goZSl7Y2FzZSJOVyI6aT10LnJhbmdlLm1pblgsbz10LnJhbmdlLm1pblgrcixuPXQucmFuZ2UubWluWSxzPXQucmFuZ2UubWluWStyO2JyZWFrO2Nhc2UiTkUiOmk9dC5yYW5nZS5taW5YK3Isbz10LnJhbmdlLm1heFgsbj10LnJhbmdlLm1pblkscz10LnJhbmdlLm1pblkrcjticmVhaztjYXNlIlNXIjppPXQucmFuZ2UubWluWCxvPXQucmFuZ2UubWluWCtyLG49dC5yYW5nZS5taW5ZK3Iscz10LnJhbmdlLm1heFk7YnJlYWs7Y2FzZSJTRSI6aT10LnJhbmdlLm1pblgrcixvPXQucmFuZ2UubWF4WCxuPXQucmFuZ2UubWluWStyLHM9dC5yYW5nZS5tYXhZfXQuY2hpbGRyZW5bZV09e2NlbnRlck9mTWFzczp7eDowLHk6MH0sbWFzczowLHJhbmdlOnttaW5YOmksbWF4WDpvLG1pblk6bixtYXhZOnN9LHNpemU6LjUqdC5zaXplLGNhbGNTaXplOjIqdC5jYWxjU2l6ZSxjaGlsZHJlbjp7ZGF0YTpudWxsfSxtYXhXaWR0aDowLGxldmVsOnQubGV2ZWwrMSxjaGlsZHJlbkNvdW50OjB9fX0se2tleToiX2RlYnVnIix2YWx1ZTpmdW5jdGlvbih0LGUpe3ZvaWQgMCE9PXRoaXMuYmFybmVzSHV0VHJlZSYmKHQubGluZVdpZHRoPTEsdGhpcy5fZHJhd0JyYW5jaCh0aGlzLmJhcm5lc0h1dFRyZWUucm9vdCx0LGUpKX19LHtrZXk6Il9kcmF3QnJhbmNoIix2YWx1ZTpmdW5jdGlvbih0LGUsaSl7dm9pZCAwPT09aSYmKGk9IiNGRjAwMDAiKSw0PT09dC5jaGlsZHJlbkNvdW50JiYodGhpcy5fZHJhd0JyYW5jaCh0LmNoaWxkcmVuLk5XLGUpLHRoaXMuX2RyYXdCcmFuY2godC5jaGlsZHJlbi5ORSxlKSx0aGlzLl9kcmF3QnJhbmNoKHQuY2hpbGRyZW4uU0UsZSksdGhpcy5fZHJhd0JyYW5jaCh0LmNoaWxkcmVuLlNXLGUpKSxlLnN0cm9rZVN0eWxlPWksZS5iZWdpblBhdGgoKSxlLm1vdmVUbyh0LnJhbmdlLm1pblgsdC5yYW5nZS5taW5ZKSxlLmxpbmVUbyh0LnJhbmdlLm1heFgsdC5yYW5nZS5taW5ZKSxlLnN0cm9rZSgpLGUuYmVnaW5QYXRoKCksZS5tb3ZlVG8odC5yYW5nZS5tYXhYLHQucmFuZ2UubWluWSksZS5saW5lVG8odC5yYW5nZS5tYXhYLHQucmFuZ2UubWF4WSksZS5zdHJva2UoKSxlLmJlZ2luUGF0aCgpLGUubW92ZVRvKHQucmFuZ2UubWF4WCx0LnJhbmdlLm1heFkpLGUubGluZVRvKHQucmFuZ2UubWluWCx0LnJhbmdlLm1heFkpLGUuc3Ryb2tlKCksZS5iZWdpblBhdGgoKSxlLm1vdmVUbyh0LnJhbmdlLm1pblgsdC5yYW5nZS5tYXhZKSxlLmxpbmVUbyh0LnJhbmdlLm1pblgsdC5yYW5nZS5taW5ZKSxlLnN0cm9rZSgpfX1dKSx0fSgpO2VbImRlZmF1bHQiXT1uLHQuZXhwb3J0cz1lWyJkZWZhdWx0Il19LGZ1bmN0aW9uKHQsZSl7ZnVuY3Rpb24gaSh0LGUpe2lmKCEodCBpbnN0YW5jZW9mIGUpKXRocm93IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCBjYWxsIGEgY2xhc3MgYXMgYSBmdW5jdGlvbiIpfU9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt2YXIgbz1mdW5jdGlvbigpe2Z1bmN0aW9uIHQodCxlKXtmb3IodmFyIGk9MDtpPGUubGVuZ3RoO2krKyl7dmFyIG89ZVtpXTtvLmVudW1lcmFibGU9by5lbnVtZXJhYmxlfHwhMSxvLmNvbmZpZ3VyYWJsZT0hMCwidmFsdWUiaW4gbyYmKG8ud3JpdGFibGU9ITApLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LG8ua2V5LG8pfX1yZXR1cm4gZnVuY3Rpb24oZSxpLG8pe3JldHVybiBpJiZ0KGUucHJvdG90eXBlLGkpLG8mJnQoZSxvKSxlfX0oKSxuPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdChlLG8sbil7aSh0aGlzLHQpLHRoaXMuYm9keT1lLHRoaXMucGh5c2ljc0JvZHk9byx0aGlzLnNldE9wdGlvbnMobil9cmV0dXJuIG8odCxbe2tleToic2V0T3B0aW9ucyIsdmFsdWU6ZnVuY3Rpb24odCl7dGhpcy5vcHRpb25zPXR9fSx7a2V5OiJzb2x2ZSIsdmFsdWU6ZnVuY3Rpb24oKXtmb3IodmFyIHQsZSxpLG8sbixzLHIsYSxoPXRoaXMuYm9keS5ub2RlcyxkPXRoaXMucGh5c2ljc0JvZHkucGh5c2ljc05vZGVJbmRpY2VzLGw9dGhpcy5waHlzaWNzQm9keS5mb3JjZXMsdT10aGlzLm9wdGlvbnMubm9kZURpc3RhbmNlLGM9LTIvMy91LHA9NC8zLGY9MDtmPGQubGVuZ3RoLTE7ZisrKXtyPWhbZFtmXV07Zm9yKHZhciBtPWYrMTttPGQubGVuZ3RoO20rKylhPWhbZFttXV0sdD1hLngtci54LGU9YS55LXIueSxpPU1hdGguc3FydCh0KnQrZSplKSwwPT09aSYmKGk9LjEqTWF0aC5yYW5kb20oKSx0PWkpLDIqdT5pJiYocz0uNSp1Pmk/MTpjKmkrcCxzLz1pLG89dCpzLG49ZSpzLGxbci5pZF0ueC09byxsW3IuaWRdLnktPW4sbFthLmlkXS54Kz1vLGxbYS5pZF0ueSs9bil9fX1dKSx0fSgpO2VbImRlZmF1bHQiXT1uLHQuZXhwb3J0cz1lWyJkZWZhdWx0Il19LGZ1bmN0aW9uKHQsZSl7ZnVuY3Rpb24gaSh0LGUpe2lmKCEodCBpbnN0YW5jZW9mIGUpKXRocm93IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCBjYWxsIGEgY2xhc3MgYXMgYSBmdW5jdGlvbiIpfU9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt2YXIgbz1mdW5jdGlvbigpe2Z1bmN0aW9uIHQodCxlKXtmb3IodmFyIGk9MDtpPGUubGVuZ3RoO2krKyl7dmFyIG89ZVtpXTtvLmVudW1lcmFibGU9by5lbnVtZXJhYmxlfHwhMSxvLmNvbmZpZ3VyYWJsZT0hMCwidmFsdWUiaW4gbyYmKG8ud3JpdGFibGU9ITApLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LG8ua2V5LG8pfX1yZXR1cm4gZnVuY3Rpb24oZSxpLG8pe3JldHVybiBpJiZ0KGUucHJvdG90eXBlLGkpLG8mJnQoZSxvKSxlfX0oKSxuPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdChlLG8sbil7aSh0aGlzLHQpLHRoaXMuYm9keT1lLHRoaXMucGh5c2ljc0JvZHk9byx0aGlzLnNldE9wdGlvbnMobil9cmV0dXJuIG8odCxbe2tleToic2V0T3B0aW9ucyIsdmFsdWU6ZnVuY3Rpb24odCl7dGhpcy5vcHRpb25zPXR9fSx7a2V5OiJzb2x2ZSIsdmFsdWU6ZnVuY3Rpb24oKXt2YXIgdCxlLGksbyxuLHMscixhLGgsZCxsPXRoaXMuYm9keS5ub2Rlcyx1PXRoaXMucGh5c2ljc0JvZHkucGh5c2ljc05vZGVJbmRpY2VzLGM9dGhpcy5waHlzaWNzQm9keS5mb3JjZXMscD10aGlzLm9wdGlvbnMubm9kZURpc3RhbmNlO2ZvcihoPTA7aDx1Lmxlbmd0aC0xO2grKylmb3Iocj1sW3VbaF1dLGQ9aCsxO2Q8dS5sZW5ndGg7ZCsrKWlmKGE9bFt1W2RdXSxyLmxldmVsPT09YS5sZXZlbCl7dD1hLngtci54LGU9YS55LXIueSxpPU1hdGguc3FydCh0KnQrZSplKTt2YXIgZj0uMDU7cz1wPmk/LU1hdGgucG93KGYqaSwyKStNYXRoLnBvdyhmKnAsMik6MCwwPT09aT9pPS4wMTpzLz1pLG89dCpzLG49ZSpzLGNbci5pZF0ueC09byxjW3IuaWRdLnktPW4sY1thLmlkXS54Kz1vLGNbYS5pZF0ueSs9bn19fV0pLHR9KCk7ZVsiZGVmYXVsdCJdPW4sdC5leHBvcnRzPWVbImRlZmF1bHQiXX0sZnVuY3Rpb24odCxlKXtmdW5jdGlvbiBpKHQsZSl7aWYoISh0IGluc3RhbmNlb2YgZSkpdGhyb3cgbmV3IFR5cGVFcnJvcigiQ2Fubm90IGNhbGwgYSBjbGFzcyBhcyBhIGZ1bmN0aW9uIil9T2JqZWN0LmRlZmluZVByb3BlcnR5KGUsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3ZhciBvPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCh0LGUpe2Zvcih2YXIgaT0wO2k8ZS5sZW5ndGg7aSsrKXt2YXIgbz1lW2ldO28uZW51bWVyYWJsZT1vLmVudW1lcmFibGV8fCExLG8uY29uZmlndXJhYmxlPSEwLCJ2YWx1ZSJpbiBvJiYoby53cml0YWJsZT0hMCksT2JqZWN0LmRlZmluZVByb3BlcnR5KHQsby5rZXksbyl9fXJldHVybiBmdW5jdGlvbihlLGksbyl7cmV0dXJuIGkmJnQoZS5wcm90b3R5cGUsaSksbyYmdChlLG8pLGV9fSgpLG49ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KGUsbyxuKXtpKHRoaXMsdCksdGhpcy5ib2R5PWUsdGhpcy5waHlzaWNzQm9keT1vLHRoaXMuc2V0T3B0aW9ucyhuKX1yZXR1cm4gbyh0LFt7a2V5OiJzZXRPcHRpb25zIix2YWx1ZTpmdW5jdGlvbih0KXt0aGlzLm9wdGlvbnM9dH19LHtrZXk6InNvbHZlIix2YWx1ZTpmdW5jdGlvbigpe2Zvcih2YXIgdD12b2lkIDAsZT12b2lkIDAsaT10aGlzLnBoeXNpY3NCb2R5LnBoeXNpY3NFZGdlSW5kaWNlcyxvPXRoaXMuYm9keS5lZGdlcyxuPXZvaWQgMCxzPXZvaWQgMCxyPXZvaWQgMCxhPTA7YTxpLmxlbmd0aDthKyspZT1vW2lbYV1dLGUuY29ubmVjdGVkPT09ITAmJmUudG9JZCE9PWUuZnJvbUlkJiZ2b2lkIDAhPT10aGlzLmJvZHkubm9kZXNbZS50b0lkXSYmdm9pZCAwIT09dGhpcy5ib2R5Lm5vZGVzW2UuZnJvbUlkXSYmKHZvaWQgMCE9PWUuZWRnZVR5cGUudmlhPyh0PXZvaWQgMD09PWUub3B0aW9ucy5sZW5ndGg/dGhpcy5vcHRpb25zLnNwcmluZ0xlbmd0aDplLm9wdGlvbnMubGVuZ3RoLG49ZS50byxzPWUuZWRnZVR5cGUudmlhLHI9ZS5mcm9tLHRoaXMuX2NhbGN1bGF0ZVNwcmluZ0ZvcmNlKG4scywuNSp0KSx0aGlzLl9jYWxjdWxhdGVTcHJpbmdGb3JjZShzLHIsLjUqdCkpOih0PXZvaWQgMD09PWUub3B0aW9ucy5sZW5ndGg/MS41KnRoaXMub3B0aW9ucy5zcHJpbmdMZW5ndGg6ZS5vcHRpb25zLmxlbmd0aCx0aGlzLl9jYWxjdWxhdGVTcHJpbmdGb3JjZShlLmZyb20sZS50byx0KSkpfX0se2tleToiX2NhbGN1bGF0ZVNwcmluZ0ZvcmNlIix2YWx1ZTpmdW5jdGlvbih0LGUsaSl7dmFyIG89dC54LWUueCxuPXQueS1lLnkscz1NYXRoLm1heChNYXRoLnNxcnQobypvK24qbiksLjAxKSxyPXRoaXMub3B0aW9ucy5zcHJpbmdDb25zdGFudCooaS1zKS9zLGE9bypyLGg9bipyO3ZvaWQgMCE9PXRoaXMucGh5c2ljc0JvZHkuZm9yY2VzW3QuaWRdJiYodGhpcy5waHlzaWNzQm9keS5mb3JjZXNbdC5pZF0ueCs9YSx0aGlzLnBoeXNpY3NCb2R5LmZvcmNlc1t0LmlkXS55Kz1oKSx2b2lkIDAhPT10aGlzLnBoeXNpY3NCb2R5LmZvcmNlc1tlLmlkXSYmKHRoaXMucGh5c2ljc0JvZHkuZm9yY2VzW2UuaWRdLngtPWEsdGhpcy5waHlzaWNzQm9keS5mb3JjZXNbZS5pZF0ueS09aCl9fV0pLHR9KCk7ZVsiZGVmYXVsdCJdPW4sdC5leHBvcnRzPWVbImRlZmF1bHQiXX0sZnVuY3Rpb24odCxlKXtmdW5jdGlvbiBpKHQsZSl7aWYoISh0IGluc3RhbmNlb2YgZSkpdGhyb3cgbmV3IFR5cGVFcnJvcigiQ2Fubm90IGNhbGwgYSBjbGFzcyBhcyBhIGZ1bmN0aW9uIil9T2JqZWN0LmRlZmluZVByb3BlcnR5KGUsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3ZhciBvPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCh0LGUpe2Zvcih2YXIgaT0wO2k8ZS5sZW5ndGg7aSsrKXt2YXIgbz1lW2ldO28uZW51bWVyYWJsZT1vLmVudW1lcmFibGV8fCExLG8uY29uZmlndXJhYmxlPSEwLCJ2YWx1ZSJpbiBvJiYoby53cml0YWJsZT0hMCksT2JqZWN0LmRlZmluZVByb3BlcnR5KHQsby5rZXksbyl9fXJldHVybiBmdW5jdGlvbihlLGksbyl7cmV0dXJuIGkmJnQoZS5wcm90b3R5cGUsaSksbyYmdChlLG8pLGV9fSgpLG49ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KGUsbyxuKXtpKHRoaXMsdCksdGhpcy5ib2R5PWUsdGhpcy5waHlzaWNzQm9keT1vLHRoaXMuc2V0T3B0aW9ucyhuKX1yZXR1cm4gbyh0LFt7a2V5OiJzZXRPcHRpb25zIix2YWx1ZTpmdW5jdGlvbih0KXt0aGlzLm9wdGlvbnM9dH19LHtrZXk6InNvbHZlIix2YWx1ZTpmdW5jdGlvbigpe2Zvcih2YXIgdCxlLGksbyxuLHMscixhLGg9dGhpcy5ib2R5LmVkZ2VzLGQ9LjUsbD10aGlzLnBoeXNpY3NCb2R5LnBoeXNpY3NFZGdlSW5kaWNlcyx1PXRoaXMucGh5c2ljc0JvZHkucGh5c2ljc05vZGVJbmRpY2VzLGM9dGhpcy5waHlzaWNzQm9keS5mb3JjZXMscD0wO3A8dS5sZW5ndGg7cCsrKXt2YXIgZj11W3BdO2NbZl0uc3ByaW5nRng9MCxjW2ZdLnNwcmluZ0Z5PTB9Zm9yKHZhciBwPTA7cDxsLmxlbmd0aDtwKyspZT1oW2xbcF1dLGUuY29ubmVjdGVkPT09ITAmJih0PXZvaWQgMD09PWUub3B0aW9ucy5sZW5ndGg/dGhpcy5vcHRpb25zLnNwcmluZ0xlbmd0aDplLm9wdGlvbnMubGVuZ3RoLGk9ZS5mcm9tLngtZS50by54LG89ZS5mcm9tLnktZS50by55LGE9TWF0aC5zcXJ0KGkqaStvKm8pLGE9MD09PWE/LjAxOmEscj10aGlzLm9wdGlvbnMuc3ByaW5nQ29uc3RhbnQqKHQtYSkvYSxuPWkqcixzPW8qcixlLnRvLmxldmVsIT1lLmZyb20ubGV2ZWw/KHZvaWQgMCE9PWNbZS50b0lkXSYmKGNbZS50b0lkXS5zcHJpbmdGeC09bixjW2UudG9JZF0uc3ByaW5nRnktPXMpLHZvaWQgMCE9PWNbZS5mcm9tSWRdJiYoY1tlLmZyb21JZF0uc3ByaW5nRngrPW4sY1tlLmZyb21JZF0uc3ByaW5nRnkrPXMpKToodm9pZCAwIT09Y1tlLnRvSWRdJiYoY1tlLnRvSWRdLngtPWQqbixjW2UudG9JZF0ueS09ZCpzKSx2b2lkIDAhPT1jW2UuZnJvbUlkXSYmKGNbZS5mcm9tSWRdLngrPWQqbixjW2UuZnJvbUlkXS55Kz1kKnMpKSk7Zm9yKHZhciBtLHYscj0xLHA9MDtwPHUubGVuZ3RoO3ArKyl7dmFyIGY9dVtwXTttPU1hdGgubWluKHIsTWF0aC5tYXgoLXIsY1tmXS5zcHJpbmdGeCkpLHY9TWF0aC5taW4ocixNYXRoLm1heCgtcixjW2ZdLnNwcmluZ0Z5KSksY1tmXS54Kz1tLGNbZl0ueSs9dn1mb3IodmFyIGc9MCx5PTAscD0wO3A8dS5sZW5ndGg7cCsrKXt2YXIgZj11W3BdO2crPWNbZl0ueCx5Kz1jW2ZdLnl9Zm9yKHZhciBiPWcvdS5sZW5ndGgsdz15L3UubGVuZ3RoLHA9MDtwPHUubGVuZ3RoO3ArKyl7dmFyIGY9dVtwXTtjW2ZdLngtPWIsY1tmXS55LT13fX19XSksdH0oKTtlWyJkZWZhdWx0Il09bix0LmV4cG9ydHM9ZVsiZGVmYXVsdCJdfSxmdW5jdGlvbih0LGUpe2Z1bmN0aW9uIGkodCxlKXtpZighKHQgaW5zdGFuY2VvZiBlKSl0aHJvdyBuZXcgVHlwZUVycm9yKCJDYW5ub3QgY2FsbCBhIGNsYXNzIGFzIGEgZnVuY3Rpb24iKX1PYmplY3QuZGVmaW5lUHJvcGVydHkoZSwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7dmFyIG89ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KHQsZSl7Zm9yKHZhciBpPTA7aTxlLmxlbmd0aDtpKyspe3ZhciBvPWVbaV07by5lbnVtZXJhYmxlPW8uZW51bWVyYWJsZXx8ITEsby5jb25maWd1cmFibGU9ITAsInZhbHVlImluIG8mJihvLndyaXRhYmxlPSEwKSxPYmplY3QuZGVmaW5lUHJvcGVydHkodCxvLmtleSxvKX19cmV0dXJuIGZ1bmN0aW9uKGUsaSxvKXtyZXR1cm4gaSYmdChlLnByb3RvdHlwZSxpKSxvJiZ0KGUsbyksZX19KCksbj1mdW5jdGlvbigpe2Z1bmN0aW9uIHQoZSxvLG4pe2kodGhpcyx0KSx0aGlzLmJvZHk9ZSx0aGlzLnBoeXNpY3NCb2R5PW8sdGhpcy5zZXRPcHRpb25zKG4pfXJldHVybiBvKHQsW3trZXk6InNldE9wdGlvbnMiLHZhbHVlOmZ1bmN0aW9uKHQpe3RoaXMub3B0aW9ucz10fX0se2tleToic29sdmUiLHZhbHVlOmZ1bmN0aW9uKCl7Zm9yKHZhciB0PXZvaWQgMCxlPXZvaWQgMCxpPXZvaWQgMCxvPXZvaWQgMCxuPXRoaXMuYm9keS5ub2RlcyxzPXRoaXMucGh5c2ljc0JvZHkucGh5c2ljc05vZGVJbmRpY2VzLHI9dGhpcy5waHlzaWNzQm9keS5mb3JjZXMsYT0wO2E8cy5sZW5ndGg7YSsrKXt2YXIgaD1zW2FdO289bltoXSx0PS1vLngsZT0tby55LGk9TWF0aC5zcXJ0KHQqdCtlKmUpLHRoaXMuX2NhbGN1bGF0ZUZvcmNlcyhpLHQsZSxyLG8pfX19LHtrZXk6Il9jYWxjdWxhdGVGb3JjZXMiLHZhbHVlOmZ1bmN0aW9uKHQsZSxpLG8sbil7dmFyIHM9MD09PXQ/MDp0aGlzLm9wdGlvbnMuY2VudHJhbEdyYXZpdHkvdDtvW24uaWRdLng9ZSpzLG9bbi5pZF0ueT1pKnN9fV0pLHR9KCk7ZVsiZGVmYXVsdCJdPW4sdC5leHBvcnRzPWVbImRlZmF1bHQiXX0sZnVuY3Rpb24odCxlLGkpe2Z1bmN0aW9uIG8odCl7cmV0dXJuIHQmJnQuX19lc01vZHVsZT90OnsiZGVmYXVsdCI6dH19ZnVuY3Rpb24gbih0LGUpe2lmKCEodCBpbnN0YW5jZW9mIGUpKXRocm93IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCBjYWxsIGEgY2xhc3MgYXMgYSBmdW5jdGlvbiIpfWZ1bmN0aW9uIHModCxlKXtpZigiZnVuY3Rpb24iIT10eXBlb2YgZSYmbnVsbCE9PWUpdGhyb3cgbmV3IFR5cGVFcnJvcigiU3VwZXIgZXhwcmVzc2lvbiBtdXN0IGVpdGhlciBiZSBudWxsIG9yIGEgZnVuY3Rpb24sIG5vdCAiK3R5cGVvZiBlKTt0LnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKGUmJmUucHJvdG90eXBlLHtjb25zdHJ1Y3Rvcjp7dmFsdWU6dCxlbnVtZXJhYmxlOiExLHdyaXRhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH19KSxlJiYoT2JqZWN0LnNldFByb3RvdHlwZU9mP09iamVjdC5zZXRQcm90b3R5cGVPZih0LGUpOnQuX19wcm90b19fPWUpfU9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt2YXIgcj1mdW5jdGlvbigpe2Z1bmN0aW9uIHQodCxlKXtmb3IodmFyIGk9MDtpPGUubGVuZ3RoO2krKyl7dmFyIG89ZVtpXTtvLmVudW1lcmFibGU9by5lbnVtZXJhYmxlfHwhMSxvLmNvbmZpZ3VyYWJsZT0hMCwidmFsdWUiaW4gbyYmKG8ud3JpdGFibGU9ITApLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LG8ua2V5LG8pfX1yZXR1cm4gZnVuY3Rpb24oZSxpLG8pe3JldHVybiBpJiZ0KGUucHJvdG90eXBlLGkpLG8mJnQoZSxvKSxlfX0oKSxhPWZ1bmN0aW9uKHQsZSxpKXtmb3IodmFyIG89ITA7bzspe3ZhciBuPXQscz1lLHI9aTtvPSExLG51bGw9PT1uJiYobj1GdW5jdGlvbi5wcm90b3R5cGUpO3ZhciBhPU9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IobixzKTtpZih2b2lkIDAhPT1hKXtpZigidmFsdWUiaW4gYSlyZXR1cm4gYS52YWx1ZTt2YXIgaD1hLmdldDtpZih2b2lkIDA9PT1oKXJldHVybjtyZXR1cm4gaC5jYWxsKHIpfXZhciBkPU9iamVjdC5nZXRQcm90b3R5cGVPZihuKTtpZihudWxsPT09ZClyZXR1cm47dD1kLGU9cyxpPXIsbz0hMCxhPWQ9dm9pZCAwfX0saD1pKDkwKSxkPW8oaCksbD1mdW5jdGlvbih0KXtmdW5jdGlvbiBlKHQsaSxvKXtuKHRoaXMsZSksYShPYmplY3QuZ2V0UHJvdG90eXBlT2YoZS5wcm90b3R5cGUpLCJjb25zdHJ1Y3RvciIsdGhpcykuY2FsbCh0aGlzLHQsaSxvKX1yZXR1cm4gcyhlLHQpLHIoZSxbe2tleToiX2NhbGN1bGF0ZUZvcmNlcyIsdmFsdWU6ZnVuY3Rpb24odCxlLGksbyxuKXswPT09dCYmKHQ9LjEqTWF0aC5yYW5kb20oKSxlPXQpLHRoaXMub3ZlcmxhcEF2b2lkYW5jZUZhY3RvcjwxJiYodD1NYXRoLm1heCguMSt0aGlzLm92ZXJsYXBBdm9pZGFuY2VGYWN0b3Iqby5zaGFwZS5yYWRpdXMsdC1vLnNoYXBlLnJhZGl1cykpO3ZhciBzPW8uZWRnZXMubGVuZ3RoKzEscj10aGlzLm9wdGlvbnMuZ3Jhdml0YXRpb25hbENvbnN0YW50Km4ubWFzcypvLm9wdGlvbnMubWFzcypzL01hdGgucG93KHQsMiksYT1lKnIsaD1pKnI7dGhpcy5waHlzaWNzQm9keS5mb3JjZXNbby5pZF0ueCs9YSx0aGlzLnBoeXNpY3NCb2R5LmZvcmNlc1tvLmlkXS55Kz1ofX1dKSxlfShkWyJkZWZhdWx0Il0pO2VbImRlZmF1bHQiXT1sLHQuZXhwb3J0cz1lWyJkZWZhdWx0Il19LGZ1bmN0aW9uKHQsZSxpKXtmdW5jdGlvbiBvKHQpe3JldHVybiB0JiZ0Ll9fZXNNb2R1bGU/dDp7ImRlZmF1bHQiOnR9fWZ1bmN0aW9uIG4odCxlKXtpZighKHQgaW5zdGFuY2VvZiBlKSl0aHJvdyBuZXcgVHlwZUVycm9yKCJDYW5ub3QgY2FsbCBhIGNsYXNzIGFzIGEgZnVuY3Rpb24iKX1mdW5jdGlvbiBzKHQsZSl7aWYoImZ1bmN0aW9uIiE9dHlwZW9mIGUmJm51bGwhPT1lKXRocm93IG5ldyBUeXBlRXJyb3IoIlN1cGVyIGV4cHJlc3Npb24gbXVzdCBlaXRoZXIgYmUgbnVsbCBvciBhIGZ1bmN0aW9uLCBub3QgIit0eXBlb2YgZSk7dC5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZShlJiZlLnByb3RvdHlwZSx7Y29uc3RydWN0b3I6e3ZhbHVlOnQsZW51bWVyYWJsZTohMSx3cml0YWJsZTohMCxjb25maWd1cmFibGU6ITB9fSksZSYmKE9iamVjdC5zZXRQcm90b3R5cGVPZj9PYmplY3Quc2V0UHJvdG90eXBlT2YodCxlKTp0Ll9fcHJvdG9fXz1lKX1PYmplY3QuZGVmaW5lUHJvcGVydHkoZSwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7dmFyIHI9ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KHQsZSl7Zm9yKHZhciBpPTA7aTxlLmxlbmd0aDtpKyspe3ZhciBvPWVbaV07by5lbnVtZXJhYmxlPW8uZW51bWVyYWJsZXx8ITEsby5jb25maWd1cmFibGU9ITAsInZhbHVlImluIG8mJihvLndyaXRhYmxlPSEwKSxPYmplY3QuZGVmaW5lUHJvcGVydHkodCxvLmtleSxvKX19cmV0dXJuIGZ1bmN0aW9uKGUsaSxvKXtyZXR1cm4gaSYmdChlLnByb3RvdHlwZSxpKSxvJiZ0KGUsbyksZX19KCksYT1mdW5jdGlvbih0LGUsaSl7Zm9yKHZhciBvPSEwO287KXt2YXIgbj10LHM9ZSxyPWk7bz0hMSxudWxsPT09biYmKG49RnVuY3Rpb24ucHJvdG90eXBlKTt2YXIgYT1PYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKG4scyk7aWYodm9pZCAwIT09YSl7aWYoInZhbHVlImluIGEpcmV0dXJuIGEudmFsdWU7dmFyIGg9YS5nZXQ7aWYodm9pZCAwPT09aClyZXR1cm47cmV0dXJuIGguY2FsbChyKX12YXIgZD1PYmplY3QuZ2V0UHJvdG90eXBlT2Yobik7aWYobnVsbD09PWQpcmV0dXJuO3Q9ZCxlPXMsaT1yLG89ITAsYT1kPXZvaWQgMH19LGg9aSg5NSksZD1vKGgpLGw9ZnVuY3Rpb24odCl7ZnVuY3Rpb24gZSh0LGksbyl7bih0aGlzLGUpLGEoT2JqZWN0LmdldFByb3RvdHlwZU9mKGUucHJvdG90eXBlKSwiY29uc3RydWN0b3IiLHRoaXMpLmNhbGwodGhpcyx0LGksbyl9cmV0dXJuIHMoZSx0KSxyKGUsW3trZXk6Il9jYWxjdWxhdGVGb3JjZXMiLHZhbHVlOmZ1bmN0aW9uKHQsZSxpLG8sbil7aWYodD4wKXt2YXIgcz1uLmVkZ2VzLmxlbmd0aCsxLHI9dGhpcy5vcHRpb25zLmNlbnRyYWxHcmF2aXR5KnMqbi5vcHRpb25zLm1hc3M7b1tuLmlkXS54PWUqcixvW24uaWRdLnk9aSpyfX19XSksZX0oZFsiZGVmYXVsdCJdKTtlWyJkZWZhdWx0Il09bCx0LmV4cG9ydHM9ZVsiZGVmYXVsdCJdfSxmdW5jdGlvbih0LGUsaSl7ZnVuY3Rpb24gbyh0KXtyZXR1cm4gdCYmdC5fX2VzTW9kdWxlP3Q6eyJkZWZhdWx0Ijp0fX1mdW5jdGlvbiBuKHQsZSl7aWYoISh0IGluc3RhbmNlb2YgZSkpdGhyb3cgbmV3IFR5cGVFcnJvcigiQ2Fubm90IGNhbGwgYSBjbGFzcyBhcyBhIGZ1bmN0aW9uIil9T2JqZWN0LmRlZmluZVByb3BlcnR5KGUsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3ZhciBzPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCh0LGUpe2Zvcih2YXIgaT0wO2k8ZS5sZW5ndGg7aSsrKXt2YXIgbz1lW2ldO28uZW51bWVyYWJsZT1vLmVudW1lcmFibGV8fCExLG8uY29uZmlndXJhYmxlPSEwLCJ2YWx1ZSJpbiBvJiYoby53cml0YWJsZT0hMCksT2JqZWN0LmRlZmluZVByb3BlcnR5KHQsby5rZXksbyl9fXJldHVybiBmdW5jdGlvbihlLGksbyl7cmV0dXJuIGkmJnQoZS5wcm90b3R5cGUsaSksbyYmdChlLG8pLGV9fSgpLHI9aSg5OSksYT1vKHIpLGg9aSgxMDApLGQ9byhoKSxsPWkoMSksdT1mdW5jdGlvbigpe2Z1bmN0aW9uIHQoZSl7dmFyIGk9dGhpcztuKHRoaXMsdCksdGhpcy5ib2R5PWUsdGhpcy5jbHVzdGVyZWROb2Rlcz17fSx0aGlzLmNsdXN0ZXJlZEVkZ2VzPXt9LHRoaXMub3B0aW9ucz17fSx0aGlzLmRlZmF1bHRPcHRpb25zPXt9LGwuZXh0ZW5kKHRoaXMub3B0aW9ucyx0aGlzLmRlZmF1bHRPcHRpb25zKSx0aGlzLmJvZHkuZW1pdHRlci5vbigiX3Jlc2V0RGF0YSIsZnVuY3Rpb24oKXtpLmNsdXN0ZXJlZE5vZGVzPXt9LGkuY2x1c3RlcmVkRWRnZXM9e319KX1yZXR1cm4gcyh0LFt7a2V5OiJzZXRPcHRpb25zIix2YWx1ZTpmdW5jdGlvbih0KXt9fSx7a2V5OiJjbHVzdGVyQnlIdWJzaXplIix2YWx1ZTpmdW5jdGlvbih0LGUpe3ZvaWQgMD09PXQ/dD10aGlzLl9nZXRIdWJTaXplKCk6Im9iamVjdCI9PXR5cGVvZiB0JiYoZT10aGlzLl9jaGVja09wdGlvbnModCksdD10aGlzLl9nZXRIdWJTaXplKCkpO2Zvcih2YXIgaT1bXSxvPTA7bzx0aGlzLmJvZHkubm9kZUluZGljZXMubGVuZ3RoO28rKyl7dmFyIG49dGhpcy5ib2R5Lm5vZGVzW3RoaXMuYm9keS5ub2RlSW5kaWNlc1tvXV07bi5lZGdlcy5sZW5ndGg+PXQmJmkucHVzaChuLmlkKX1mb3IodmFyIG89MDtvPGkubGVuZ3RoO28rKyl0aGlzLmNsdXN0ZXJCeUNvbm5lY3Rpb24oaVtvXSxlLCEwKTt0aGlzLmJvZHkuZW1pdHRlci5lbWl0KCJfZGF0YUNoYW5nZWQiKX19LHtrZXk6ImNsdXN0ZXIiLHZhbHVlOmZ1bmN0aW9uKCl7dmFyIHQ9YXJndW1lbnRzLmxlbmd0aDw9MHx8dm9pZCAwPT09YXJndW1lbnRzWzBdP3t9OmFyZ3VtZW50c1swXSxlPWFyZ3VtZW50cy5sZW5ndGg8PTF8fHZvaWQgMD09PWFyZ3VtZW50c1sxXT8hMDphcmd1bWVudHNbMV07aWYodm9pZCAwPT09dC5qb2luQ29uZGl0aW9uKXRocm93IG5ldyBFcnJvcigiQ2Fubm90IGNhbGwgY2x1c3RlckJ5Tm9kZURhdGEgd2l0aG91dCBhIGpvaW5Db25kaXRpb24gZnVuY3Rpb24gaW4gdGhlIG9wdGlvbnMuIik7dD10aGlzLl9jaGVja09wdGlvbnModCk7Zm9yKHZhciBpPXt9LG89e30sbj0wO248dGhpcy5ib2R5Lm5vZGVJbmRpY2VzLmxlbmd0aDtuKyspe3ZhciBzPXRoaXMuYm9keS5ub2RlSW5kaWNlc1tuXSxyPXRoaXMuYm9keS5ub2Rlc1tzXSxoPWFbImRlZmF1bHQiXS5jbG9uZU9wdGlvbnMocik7aWYodC5qb2luQ29uZGl0aW9uKGgpPT09ITApe2lbc109dGhpcy5ib2R5Lm5vZGVzW3NdO2Zvcih2YXIgZD0wO2Q8ci5lZGdlcy5sZW5ndGg7ZCsrKXt2YXIgbD1yLmVkZ2VzW2RdO3ZvaWQgMD09PXRoaXMuY2x1c3RlcmVkRWRnZXNbbC5pZF0mJihvW2wuaWRdPWwpfX19dGhpcy5fY2x1c3RlcihpLG8sdCxlKX19LHtrZXk6ImNsdXN0ZXJCeUVkZ2VDb3VudCIsdmFsdWU6ZnVuY3Rpb24odCxlKXt2YXIgaT1hcmd1bWVudHMubGVuZ3RoPD0yfHx2b2lkIDA9PT1hcmd1bWVudHNbMl0/ITA6YXJndW1lbnRzWzJdO2U9dGhpcy5fY2hlY2tPcHRpb25zKGUpO2Zvcih2YXIgbz1bXSxuPXt
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment