Skip to content

Instantly share code, notes, and snippets.

@timelyportfolio
Created January 31, 2018 13:01
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save timelyportfolio/b450a1c1c7e6c41aa82b4ce19f31b71a to your computer and use it in GitHub Desktop.
Save timelyportfolio/b450a1c1c7e6c41aa82b4ce19f31b71a to your computer and use it in GitHub Desktop.
parcoords w/ coordinated outside filters
license: mit
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8" />
<script src="data:application/x-javascript;base64,KGZ1bmN0aW9uKCkgewogIC8vIElmIHdpbmRvdy5IVE1MV2lkZ2V0cyBpcyBhbHJlYWR5IGRlZmluZWQsIHRoZW4gdXNlIGl0OyBvdGhlcndpc2UgY3JlYXRlIGEKICAvLyBuZXcgb2JqZWN0LiBUaGlzIGFsbG93cyBwcmVjZWRpbmcgY29kZSB0byBzZXQgb3B0aW9ucyB0aGF0IGFmZmVjdCB0aGUKICAvLyBpbml0aWFsaXphdGlvbiBwcm9jZXNzICh0aG91Z2ggbm9uZSBjdXJyZW50bHkgZXhpc3QpLgogIHdpbmRvdy5IVE1MV2lkZ2V0cyA9IHdpbmRvdy5IVE1MV2lkZ2V0cyB8fCB7fTsKCiAgLy8gU2VlIGlmIHdlJ3JlIHJ1bm5pbmcgaW4gYSB2aWV3ZXIgcGFuZS4gSWYgbm90LCB3ZSdyZSBpbiBhIHdlYiBicm93c2VyLgogIHZhciB2aWV3ZXJNb2RlID0gd2luZG93LkhUTUxXaWRnZXRzLnZpZXdlck1vZGUgPQogICAgICAvXGJ2aWV3ZXJfcGFuZT0xXGIvLnRlc3Qod2luZG93LmxvY2F0aW9uKTsKCiAgLy8gU2VlIGlmIHdlJ3JlIHJ1bm5pbmcgaW4gU2hpbnkgbW9kZS4gSWYgbm90LCBpdCdzIGEgc3RhdGljIGRvY3VtZW50LgogIC8vIE5vdGUgdGhhdCBzdGF0aWMgd2lkZ2V0cyBjYW4gYXBwZWFyIGluIGJvdGggU2hpbnkgYW5kIHN0YXRpYyBtb2RlcywgYnV0CiAgLy8gb2J2aW91c2x5LCBTaGlueSB3aWRnZXRzIGNhbiBvbmx5IGFwcGVhciBpbiBTaGlueSBhcHBzL2RvY3VtZW50cy4KICB2YXIgc2hpbnlNb2RlID0gd2luZG93LkhUTUxXaWRnZXRzLnNoaW55TW9kZSA9CiAgICAgIHR5cGVvZih3aW5kb3cuU2hpbnkpICE9PSAidW5kZWZpbmVkIiAmJiAhIXdpbmRvdy5TaGlueS5vdXRwdXRCaW5kaW5nczsKCiAgLy8gV2UgY2FuJ3QgY291bnQgb24galF1ZXJ5IGJlaW5nIGF2YWlsYWJsZSwgc28gd2UgaW1wbGVtZW50IG91ciBvd24KICAvLyB2ZXJzaW9uIGlmIG5lY2Vzc2FyeS4KICBmdW5jdGlvbiBxdWVyeVNlbGVjdG9yQWxsKHNjb3BlLCBzZWxlY3RvcikgewogICAgaWYgKHR5cGVvZihqUXVlcnkpICE9PSAidW5kZWZpbmVkIiAmJiBzY29wZSBpbnN0YW5jZW9mIGpRdWVyeSkgewogICAgICByZXR1cm4gc2NvcGUuZmluZChzZWxlY3Rvcik7CiAgICB9CiAgICBpZiAoc2NvcGUucXVlcnlTZWxlY3RvckFsbCkgewogICAgICByZXR1cm4gc2NvcGUucXVlcnlTZWxlY3RvckFsbChzZWxlY3Rvcik7CiAgICB9CiAgfQoKICBmdW5jdGlvbiBhc0FycmF5KHZhbHVlKSB7CiAgICBpZiAodmFsdWUgPT09IG51bGwpCiAgICAgIHJldHVybiBbXTsKICAgIGlmICgkLmlzQXJyYXkodmFsdWUpKQogICAgICByZXR1cm4gdmFsdWU7CiAgICByZXR1cm4gW3ZhbHVlXTsKICB9CgogIC8vIEltcGxlbWVudCBqUXVlcnkncyBleHRlbmQKICBmdW5jdGlvbiBleHRlbmQodGFyZ2V0IC8qLCAuLi4gKi8pIHsKICAgIGlmIChhcmd1bWVudHMubGVuZ3RoID09IDEpIHsKICAgICAgcmV0dXJuIHRhcmdldDsKICAgIH0KICAgIGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7CiAgICAgIHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07CiAgICAgIGZvciAodmFyIHByb3AgaW4gc291cmNlKSB7CiAgICAgICAgaWYgKHNvdXJjZS5oYXNPd25Qcm9wZXJ0eShwcm9wKSkgewogICAgICAgICAgdGFyZ2V0W3Byb3BdID0gc291cmNlW3Byb3BdOwogICAgICAgIH0KICAgICAgfQogICAgfQogICAgcmV0dXJuIHRhcmdldDsKICB9CgogIC8vIElFOCBkb2Vzbid0IHN1cHBvcnQgQXJyYXkuZm9yRWFjaC4KICBmdW5jdGlvbiBmb3JFYWNoKHZhbHVlcywgY2FsbGJhY2ssIHRoaXNBcmcpIHsKICAgIGlmICh2YWx1ZXMuZm9yRWFjaCkgewogICAgICB2YWx1ZXMuZm9yRWFjaChjYWxsYmFjaywgdGhpc0FyZyk7CiAgICB9IGVsc2UgewogICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHZhbHVlcy5sZW5ndGg7IGkrKykgewogICAgICAgIGNhbGxiYWNrLmNhbGwodGhpc0FyZywgdmFsdWVzW2ldLCBpLCB2YWx1ZXMpOwogICAgICB9CiAgICB9CiAgfQoKICAvLyBSZXBsYWNlcyB0aGUgc3BlY2lmaWVkIG1ldGhvZCB3aXRoIHRoZSByZXR1cm4gdmFsdWUgb2YgZnVuY1NvdXJjZS4KICAvLwogIC8vIE5vdGUgdGhhdCBmdW5jU291cmNlIHNob3VsZCBub3QgQkUgdGhlIG5ldyBtZXRob2QsIGl0IHNob3VsZCBiZSBhIGZ1bmN0aW9uCiAgLy8gdGhhdCBSRVRVUk5TIHRoZSBuZXcgbWV0aG9kLiBmdW5jU291cmNlIHJlY2VpdmVzIGEgc2luZ2xlIGFyZ3VtZW50IHRoYXQgaXMKICAvLyB0aGUgb3ZlcnJpZGRlbiBtZXRob2QsIGl0IGNhbiBiZSBjYWxsZWQgZnJvbSB0aGUgbmV3IG1ldGhvZC4gVGhlIG92ZXJyaWRkZW4KICAvLyBtZXRob2QgY2FuIGJlIGNhbGxlZCBsaWtlIGEgcmVndWxhciBmdW5jdGlvbiwgaXQgaGFzIHRoZSB0YXJnZXQgcGVybWFuZW50bHkKICAvLyBib3VuZCB0byBpdCBzbyAidGhpcyIgd2lsbCB3b3JrIGNvcnJlY3RseS4KICBmdW5jdGlvbiBvdmVycmlkZU1ldGhvZCh0YXJnZXQsIG1ldGhvZE5hbWUsIGZ1bmNTb3VyY2UpIHsKICAgIHZhciBzdXBlckZ1bmMgPSB0YXJnZXRbbWV0aG9kTmFtZV0gfHwgZnVuY3Rpb24oKSB7fTsKICAgIHZhciBzdXBlckZ1bmNCb3VuZCA9IGZ1bmN0aW9uKCkgewogICAgICByZXR1cm4gc3VwZXJGdW5jLmFwcGx5KHRhcmdldCwgYXJndW1lbnRzKTsKICAgIH07CiAgICB0YXJnZXRbbWV0aG9kTmFtZV0gPSBmdW5jU291cmNlKHN1cGVyRnVuY0JvdW5kKTsKICB9CgogIC8vIEFkZCBhIG1ldGhvZCB0byBkZWxlZ2F0b3IgdGhhdCwgd2hlbiBpbnZva2VkLCBjYWxscwogIC8vIGRlbGVnYXRlZS5tZXRob2ROYW1lLiBJZiB0aGVyZSBpcyBubyBzdWNoIG1ldGhvZCBvbgogIC8vIHRoZSBkZWxlZ2F0ZWUsIGJ1dCB0aGVyZSB3YXMgb25lIG9uIGRlbGVnYXRvciBiZWZvcmUKICAvLyBkZWxlZ2F0ZU1ldGhvZCB3YXMgY2FsbGVkLCB0aGVuIHRoZSBvcmlnaW5hbCB2ZXJzaW9uCiAgLy8gaXMgaW52b2tlZCBpbnN0ZWFkLgogIC8vIEZvciBleGFtcGxlOgogIC8vCiAgLy8gdmFyIGEgPSB7CiAgLy8gICBtZXRob2QxOiBmdW5jdGlvbigpIHsgY29uc29sZS5sb2coJ2ExJyk7IH0KICAvLyAgIG1ldGhvZDI6IGZ1bmN0aW9uKCkgeyBjb25zb2xlLmxvZygnYTInKTsgfQogIC8vIH07CiAgLy8gdmFyIGIgPSB7CiAgLy8gICBtZXRob2QxOiBmdW5jdGlvbigpIHsgY29uc29sZS5sb2coJ2IxJyk7IH0KICAvLyB9OwogIC8vIGRlbGVnYXRlTWV0aG9kKGEsIGIsICJtZXRob2QxIik7CiAgLy8gZGVsZWdhdGVNZXRob2QoYSwgYiwgIm1ldGhvZDIiKTsKICAvLyBhLm1ldGhvZDEoKTsKICAvLyBhLm1ldGhvZDIoKTsKICAvLwogIC8vIFRoZSBvdXRwdXQgd291bGQgYmUgImIxIiwgImEyIi4KICBmdW5jdGlvbiBkZWxlZ2F0ZU1ldGhvZChkZWxlZ2F0b3IsIGRlbGVnYXRlZSwgbWV0aG9kTmFtZSkgewogICAgdmFyIGluaGVyaXRlZCA9IGRlbGVnYXRvclttZXRob2ROYW1lXTsKICAgIGRlbGVnYXRvclttZXRob2ROYW1lXSA9IGZ1bmN0aW9uKCkgewogICAgICB2YXIgdGFyZ2V0ID0gZGVsZWdhdGVlOwogICAgICB2YXIgbWV0aG9kID0gZGVsZWdhdGVlW21ldGhvZE5hbWVdOwoKICAgICAgLy8gVGhlIG1ldGhvZCBkb2Vzbid0IGV4aXN0IG9uIHRoZSBkZWxlZ2F0ZWUuIEluc3RlYWQsCiAgICAgIC8vIGNhbGwgdGhlIG1ldGhvZCBvbiB0aGUgZGVsZWdhdG9yLCBpZiBpdCBleGlzdHMuCiAgICAgIGlmICghbWV0aG9kKSB7CiAgICAgICAgdGFyZ2V0ID0gZGVsZWdhdG9yOwogICAgICAgIG1ldGhvZCA9IGluaGVyaXRlZDsKICAgICAgfQoKICAgICAgaWYgKG1ldGhvZCkgewogICAgICAgIHJldHVybiBtZXRob2QuYXBwbHkodGFyZ2V0LCBhcmd1bWVudHMpOwogICAgICB9CiAgICB9OwogIH0KCiAgLy8gSW1wbGVtZW50IGEgdmFndWUgZmFjc2ltaWxpZSBvZiBqUXVlcnkncyBkYXRhIG1ldGhvZAogIGZ1bmN0aW9uIGVsZW1lbnREYXRhKGVsLCBuYW1lLCB2YWx1ZSkgewogICAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPT0gMikgewogICAgICByZXR1cm4gZWxbImh0bWx3aWRnZXRfZGF0YV8iICsgbmFtZV07CiAgICB9IGVsc2UgaWYgKGFyZ3VtZW50cy5sZW5ndGggPT0gMykgewogICAgICBlbFsiaHRtbHdpZGdldF9kYXRhXyIgKyBuYW1lXSA9IHZhbHVlOwogICAgICByZXR1cm4gZWw7CiAgICB9IGVsc2UgewogICAgICB0aHJvdyBuZXcgRXJyb3IoIldyb25nIG51bWJlciBvZiBhcmd1bWVudHMgZm9yIGVsZW1lbnREYXRhOiAiICsKICAgICAgICBhcmd1bWVudHMubGVuZ3RoKTsKICAgIH0KICB9CgogIC8vIGh0dHA6Ly9zdGFja292ZXJmbG93LmNvbS9xdWVzdGlvbnMvMzQ0NjE3MC9lc2NhcGUtc3RyaW5nLWZvci11c2UtaW4tamF2YXNjcmlwdC1yZWdleAogIGZ1bmN0aW9uIGVzY2FwZVJlZ0V4cChzdHIpIHsKICAgIHJldHVybiBzdHIucmVwbGFjZSgvW1wtXFtcXVwvXHtcfVwoXClcKlwrXD9cLlxcXF5cJFx8XS9nLCAiXFwkJiIpOwogIH0KCiAgZnVuY3Rpb24gaGFzQ2xhc3MoZWwsIGNsYXNzTmFtZSkgewogICAgdmFyIHJlID0gbmV3IFJlZ0V4cCgiXFxiIiArIGVzY2FwZVJlZ0V4cChjbGFzc05hbWUpICsgIlxcYiIpOwogICAgcmV0dXJuIHJlLnRlc3QoZWwuY2xhc3NOYW1lKTsKICB9CgogIC8vIGVsZW1lbnRzIC0gYXJyYXkgKG9yIGFycmF5LWxpa2Ugb2JqZWN0KSBvZiBIVE1MIGVsZW1lbnRzCiAgLy8gY2xhc3NOYW1lIC0gY2xhc3MgbmFtZSB0byB0ZXN0IGZvcgogIC8vIGluY2x1ZGUgLSBpZiB0cnVlLCBvbmx5IHJldHVybiBlbGVtZW50cyB3aXRoIGdpdmVuIGNsYXNzTmFtZTsKICAvLyAgIGlmIGZhbHNlLCBvbmx5IHJldHVybiBlbGVtZW50cyAqd2l0aG91dCogZ2l2ZW4gY2xhc3NOYW1lCiAgZnVuY3Rpb24gZmlsdGVyQnlDbGFzcyhlbGVtZW50cywgY2xhc3NOYW1lLCBpbmNsdWRlKSB7CiAgICB2YXIgcmVzdWx0cyA9IFtdOwogICAgZm9yICh2YXIgaSA9IDA7IGkgPCBlbGVtZW50cy5sZW5ndGg7IGkrKykgewogICAgICBpZiAoaGFzQ2xhc3MoZWxlbWVudHNbaV0sIGNsYXNzTmFtZSkgPT0gaW5jbHVkZSkKICAgICAgICByZXN1bHRzLnB1c2goZWxlbWVudHNbaV0pOwogICAgfQogICAgcmV0dXJuIHJlc3VsdHM7CiAgfQoKICBmdW5jdGlvbiBvbihvYmosIGV2ZW50TmFtZSwgZnVuYykgewogICAgaWYgKG9iai5hZGRFdmVudExpc3RlbmVyKSB7CiAgICAgIG9iai5hZGRFdmVudExpc3RlbmVyKGV2ZW50TmFtZSwgZnVuYywgZmFsc2UpOwogICAgfSBlbHNlIGlmIChvYmouYXR0YWNoRXZlbnQpIHsKICAgICAgb2JqLmF0dGFjaEV2ZW50KGV2ZW50TmFtZSwgZnVuYyk7CiAgICB9CiAgfQoKICBmdW5jdGlvbiBvZmYob2JqLCBldmVudE5hbWUsIGZ1bmMpIHsKICAgIGlmIChvYmoucmVtb3ZlRXZlbnRMaXN0ZW5lcikKICAgICAgb2JqLnJlbW92ZUV2ZW50TGlzdGVuZXIoZXZlbnROYW1lLCBmdW5jLCBmYWxzZSk7CiAgICBlbHNlIGlmIChvYmouZGV0YWNoRXZlbnQpIHsKICAgICAgb2JqLmRldGFjaEV2ZW50KGV2ZW50TmFtZSwgZnVuYyk7CiAgICB9CiAgfQoKICAvLyBUcmFuc2xhdGUgYXJyYXkgb2YgdmFsdWVzIHRvIHRvcC9yaWdodC9ib3R0b20vbGVmdCwgYXMgdXN1YWwgd2l0aAogIC8vIHRoZSAicGFkZGluZyIgQ1NTIHByb3BlcnR5CiAgLy8gaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvQ1NTL3BhZGRpbmcKICBmdW5jdGlvbiB1bnBhY2tQYWRkaW5nKHZhbHVlKSB7CiAgICBpZiAodHlwZW9mKHZhbHVlKSA9PT0gIm51bWJlciIpCiAgICAgIHZhbHVlID0gW3ZhbHVlXTsKICAgIGlmICh2YWx1ZS5sZW5ndGggPT09IDEpIHsKICAgICAgcmV0dXJuIHt0b3A6IHZhbHVlWzBdLCByaWdodDogdmFsdWVbMF0sIGJvdHRvbTogdmFsdWVbMF0sIGxlZnQ6IHZhbHVlWzBdfTsKICAgIH0KICAgIGlmICh2YWx1ZS5sZW5ndGggPT09IDIpIHsKICAgICAgcmV0dXJuIHt0b3A6IHZhbHVlWzBdLCByaWdodDogdmFsdWVbMV0sIGJvdHRvbTogdmFsdWVbMF0sIGxlZnQ6IHZhbHVlWzFdfTsKICAgIH0KICAgIGlmICh2YWx1ZS5sZW5ndGggPT09IDMpIHsKICAgICAgcmV0dXJuIHt0b3A6IHZhbHVlWzBdLCByaWdodDogdmFsdWVbMV0sIGJvdHRvbTogdmFsdWVbMl0sIGxlZnQ6IHZhbHVlWzFdfTsKICAgIH0KICAgIGlmICh2YWx1ZS5sZW5ndGggPT09IDQpIHsKICAgICAgcmV0dXJuIHt0b3A6IHZhbHVlWzBdLCByaWdodDogdmFsdWVbMV0sIGJvdHRvbTogdmFsdWVbMl0sIGxlZnQ6IHZhbHVlWzNdfTsKICAgIH0KICB9CgogIC8vIENvbnZlcnQgYW4gdW5wYWNrZWQgcGFkZGluZyBvYmplY3QgdG8gYSBDU1MgdmFsdWUKICBmdW5jdGlvbiBwYWRkaW5nVG9Dc3MocGFkZGluZ09iaikgewogICAgcmV0dXJuIHBhZGRpbmdPYmoudG9wICsgInB4ICIgKyBwYWRkaW5nT2JqLnJpZ2h0ICsgInB4ICIgKyBwYWRkaW5nT2JqLmJvdHRvbSArICJweCAiICsgcGFkZGluZ09iai5sZWZ0ICsgInB4IjsKICB9CgogIC8vIE1ha2VzIGEgbnVtYmVyIHN1aXRhYmxlIGZvciBDU1MKICBmdW5jdGlvbiBweCh4KSB7CiAgICBpZiAodHlwZW9mKHgpID09PSAibnVtYmVyIikKICAgICAgcmV0dXJuIHggKyAicHgiOwogICAgZWxzZQogICAgICByZXR1cm4geDsKICB9CgogIC8vIFJldHJpZXZlcyBydW50aW1lIHdpZGdldCBzaXppbmcgaW5mb3JtYXRpb24gZm9yIGFuIGVsZW1lbnQuCiAgLy8gVGhlIHJldHVybiB2YWx1ZSBpcyBlaXRoZXIgbnVsbCwgb3IgYW4gb2JqZWN0IHdpdGggZmlsbCwgcGFkZGluZywKICAvLyBkZWZhdWx0V2lkdGgsIGRlZmF1bHRIZWlnaHQgZmllbGRzLgogIGZ1bmN0aW9uIHNpemluZ1BvbGljeShlbCkgewogICAgdmFyIHNpemluZ0VsID0gZG9jdW1lbnQucXVlcnlTZWxlY3Rvcigic2NyaXB0W2RhdGEtZm9yPSciICsgZWwuaWQgKyAiJ11bdHlwZT0nYXBwbGljYXRpb24vaHRtbHdpZGdldC1zaXppbmcnXSIpOwogICAgaWYgKCFzaXppbmdFbCkKICAgICAgcmV0dXJuIG51bGw7CiAgICB2YXIgc3AgPSBKU09OLnBhcnNlKHNpemluZ0VsLnRleHRDb250ZW50IHx8IHNpemluZ0VsLnRleHQgfHwgInt9Iik7CiAgICBpZiAodmlld2VyTW9kZSkgewogICAgICByZXR1cm4gc3Audmlld2VyOwogICAgfSBlbHNlIHsKICAgICAgcmV0dXJuIHNwLmJyb3dzZXI7CiAgICB9CiAgfQoKICAvLyBAcGFyYW0gdGFza3MgQXJyYXkgb2Ygc3RyaW5ncyAob3IgZmFsc3kgdmFsdWUsIGluIHdoaWNoIGNhc2Ugbm8tb3ApLgogIC8vICAgRWFjaCBlbGVtZW50IG11c3QgYmUgYSB2YWxpZCBKYXZhU2NyaXB0IGV4cHJlc3Npb24gdGhhdCB5aWVsZHMgYQogIC8vICAgZnVuY3Rpb24uIE9yLCBjYW4gYmUgYW4gYXJyYXkgb2Ygb2JqZWN0cyB3aXRoICJjb2RlIiBhbmQgImRhdGEiCiAgLy8gICBwcm9wZXJ0aWVzOyBpbiB0aGlzIGNhc2UsIHRoZSAiY29kZSIgcHJvcGVydHkgc2hvdWxkIGJlIGEgc3RyaW5nCiAgLy8gICBvZiBKUyB0aGF0J3MgYW4gZXhwciB0aGF0IHlpZWxkcyBhIGZ1bmN0aW9uLCBhbmQgImRhdGEiIHNob3VsZCBiZQogIC8vICAgYW4gb2JqZWN0IHRoYXQgd2lsbCBiZSBhZGRlZCBhcyBhbiBhZGRpdGlvbmFsIGFyZ3VtZW50IHdoZW4gdGhhdAogIC8vICAgZnVuY3Rpb24gaXMgY2FsbGVkLgogIC8vIEBwYXJhbSB0YXJnZXQgVGhlIG9iamVjdCB0aGF0IHdpbGwgYmUgInRoaXMiIGZvciBlYWNoIGZ1bmN0aW9uCiAgLy8gICBleGVjdXRpb24uCiAgLy8gQHBhcmFtIGFyZ3MgQXJyYXkgb2YgYXJndW1lbnRzIHRvIGJlIHBhc3NlZCB0byB0aGUgZnVuY3Rpb25zLiAoVGhlCiAgLy8gICBzYW1lIGFyZ3VtZW50cyB3aWxsIGJlIHBhc3NlZCB0byBhbGwgZnVuY3Rpb25zLikKICBmdW5jdGlvbiBldmFsQW5kUnVuKHRhc2tzLCB0YXJnZXQsIGFyZ3MpIHsKICAgIGlmICh0YXNrcykgewogICAgICBmb3JFYWNoKHRhc2tzLCBmdW5jdGlvbih0YXNrKSB7CiAgICAgICAgdmFyIHRoZXNlQXJncyA9IGFyZ3M7CiAgICAgICAgaWYgKHR5cGVvZih0YXNrKSA9PT0gIm9iamVjdCIpIHsKICAgICAgICAgIHRoZXNlQXJncyA9IHRoZXNlQXJncy5jb25jYXQoW3Rhc2suZGF0YV0pOwogICAgICAgICAgdGFzayA9IHRhc2suY29kZTsKICAgICAgICB9CiAgICAgICAgdmFyIHRhc2tGdW5jID0gZXZhbCgiKCIgKyB0YXNrICsgIikiKTsKICAgICAgICBpZiAodHlwZW9mKHRhc2tGdW5jKSAhPT0gImZ1bmN0aW9uIikgewogICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCJUYXNrIG11c3QgYmUgYSBmdW5jdGlvbiEgU291cmNlOlxuIiArIHRhc2spOwogICAgICAgIH0KICAgICAgICB0YXNrRnVuYy5hcHBseSh0YXJnZXQsIHRoZXNlQXJncyk7CiAgICAgIH0pOwogICAgfQogIH0KCiAgZnVuY3Rpb24gaW5pdFNpemluZyhlbCkgewogICAgdmFyIHNpemluZyA9IHNpemluZ1BvbGljeShlbCk7CiAgICBpZiAoIXNpemluZykKICAgICAgcmV0dXJuOwoKICAgIHZhciBjZWwgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiaHRtbHdpZGdldF9jb250YWluZXIiKTsKICAgIGlmICghY2VsKQogICAgICByZXR1cm47CgogICAgaWYgKHR5cGVvZihzaXppbmcucGFkZGluZykgIT09ICJ1bmRlZmluZWQiKSB7CiAgICAgIGRvY3VtZW50LmJvZHkuc3R5bGUubWFyZ2luID0gIjAiOwogICAgICBkb2N1bWVudC5ib2R5LnN0eWxlLnBhZGRpbmcgPSBwYWRkaW5nVG9Dc3ModW5wYWNrUGFkZGluZyhzaXppbmcucGFkZGluZykpOwogICAgfQoKICAgIGlmIChzaXppbmcuZmlsbCkgewogICAgICBkb2N1bWVudC5ib2R5LnN0eWxlLm92ZXJmbG93ID0gImhpZGRlbiI7CiAgICAgIGRvY3VtZW50LmJvZHkuc3R5bGUud2lkdGggPSAiMTAwJSI7CiAgICAgIGRvY3VtZW50LmJvZHkuc3R5bGUuaGVpZ2h0ID0gIjEwMCUiOwogICAgICBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuc3R5bGUud2lkdGggPSAiMTAwJSI7CiAgICAgIGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5zdHlsZS5oZWlnaHQgPSAiMTAwJSI7CiAgICAgIGlmIChjZWwpIHsKICAgICAgICBjZWwuc3R5bGUucG9zaXRpb24gPSAiYWJzb2x1dGUiOwogICAgICAgIHZhciBwYWQgPSB1bnBhY2tQYWRkaW5nKHNpemluZy5wYWRkaW5nKTsKICAgICAgICBjZWwuc3R5bGUudG9wID0gcGFkLnRvcCArICJweCI7CiAgICAgICAgY2VsLnN0eWxlLnJpZ2h0ID0gcGFkLnJpZ2h0ICsgInB4IjsKICAgICAgICBjZWwuc3R5bGUuYm90dG9tID0gcGFkLmJvdHRvbSArICJweCI7CiAgICAgICAgY2VsLnN0eWxlLmxlZnQgPSBwYWQubGVmdCArICJweCI7CiAgICAgICAgZWwuc3R5bGUud2lkdGggPSAiMTAwJSI7CiAgICAgICAgZWwuc3R5bGUuaGVpZ2h0ID0gIjEwMCUiOwogICAgICB9CgogICAgICByZXR1cm4gewogICAgICAgIGdldFdpZHRoOiBmdW5jdGlvbigpIHsgcmV0dXJuIGNlbC5vZmZzZXRXaWR0aDsgfSwKICAgICAgICBnZXRIZWlnaHQ6IGZ1bmN0aW9uKCkgeyByZXR1cm4gY2VsLm9mZnNldEhlaWdodDsgfQogICAgICB9OwoKICAgIH0gZWxzZSB7CiAgICAgIGVsLnN0eWxlLndpZHRoID0gcHgoc2l6aW5nLndpZHRoKTsKICAgICAgZWwuc3R5bGUuaGVpZ2h0ID0gcHgoc2l6aW5nLmhlaWdodCk7CgogICAgICByZXR1cm4gewogICAgICAgIGdldFdpZHRoOiBmdW5jdGlvbigpIHsgcmV0dXJuIGVsLm9mZnNldFdpZHRoOyB9LAogICAgICAgIGdldEhlaWdodDogZnVuY3Rpb24oKSB7IHJldHVybiBlbC5vZmZzZXRIZWlnaHQ7IH0KICAgICAgfTsKICAgIH0KICB9CgogIC8vIERlZmF1bHQgaW1wbGVtZW50YXRpb25zIGZvciBtZXRob2RzCiAgdmFyIGRlZmF1bHRzID0gewogICAgZmluZDogZnVuY3Rpb24oc2NvcGUpIHsKICAgICAgcmV0dXJuIHF1ZXJ5U2VsZWN0b3JBbGwoc2NvcGUsICIuIiArIHRoaXMubmFtZSk7CiAgICB9LAogICAgcmVuZGVyRXJyb3I6IGZ1bmN0aW9uKGVsLCBlcnIpIHsKICAgICAgdmFyICRlbCA9ICQoZWwpOwoKICAgICAgdGhpcy5jbGVhckVycm9yKGVsKTsKCiAgICAgIC8vIEFkZCBhbGwgdGhlc2UgZXJyb3IgY2xhc3NlcywgYXMgU2hpbnkgZG9lcwogICAgICB2YXIgZXJyQ2xhc3MgPSAic2hpbnktb3V0cHV0LWVycm9yIjsKICAgICAgaWYgKGVyci50eXBlICE9PSBudWxsKSB7CiAgICAgICAgLy8gdXNlIHRoZSBjbGFzc2VzIG9mIHRoZSBlcnJvciBjb25kaXRpb24gYXMgQ1NTIGNsYXNzIG5hbWVzCiAgICAgICAgZXJyQ2xhc3MgPSBlcnJDbGFzcyArICIgIiArICQubWFwKGFzQXJyYXkoZXJyLnR5cGUpLCBmdW5jdGlvbih0eXBlKSB7CiAgICAgICAgICByZXR1cm4gZXJyQ2xhc3MgKyAiLSIgKyB0eXBlOwogICAgICAgIH0pLmpvaW4oIiAiKTsKICAgICAgfQogICAgICBlcnJDbGFzcyA9IGVyckNsYXNzICsgIiBodG1sd2lkZ2V0cy1lcnJvciI7CgogICAgICAvLyBJcyBlbCBpbmxpbmUgb3IgYmxvY2s/IElmIGlubGluZSBvciBpbmxpbmUtYmxvY2ssIGp1c3QgZGlzcGxheTpub25lIGl0CiAgICAgIC8vIGFuZCBhZGQgYW4gaW5saW5lIGVycm9yLgogICAgICB2YXIgZGlzcGxheSA9ICRlbC5jc3MoImRpc3BsYXkiKTsKICAgICAgJGVsLmRhdGEoInJlc3RvcmUtZGlzcGxheS1tb2RlIiwgZGlzcGxheSk7CgogICAgICBpZiAoZGlzcGxheSA9PT0gImlubGluZSIgfHwgZGlzcGxheSA9PT0gImlubGluZS1ibG9jayIpIHsKICAgICAgICAkZWwuaGlkZSgpOwogICAgICAgIGlmIChlcnIubWVzc2FnZSAhPT0gIiIpIHsKICAgICAgICAgIHZhciBlcnJvclNwYW4gPSAkKCI8c3Bhbj4iKS5hZGRDbGFzcyhlcnJDbGFzcyk7CiAgICAgICAgICBlcnJvclNwYW4udGV4dChlcnIubWVzc2FnZSk7CiAgICAgICAgICAkZWwuYWZ0ZXIoZXJyb3JTcGFuKTsKICAgICAgICB9CiAgICAgIH0gZWxzZSBpZiAoZGlzcGxheSA9PT0gImJsb2NrIikgewogICAgICAgIC8vIElmIGJsb2NrLCBhZGQgYW4gZXJyb3IganVzdCBhZnRlciB0aGUgZWwsIHNldCB2aXNpYmlsaXR5Om5vbmUgb24gdGhlCiAgICAgICAgLy8gZWwsIGFuZCBwb3NpdGlvbiB0aGUgZXJyb3IgdG8gYmUgb24gdG9wIG9mIHRoZSBlbC4KICAgICAgICAvLyBNYXJrIGl0IHdpdGggYSB1bmlxdWUgSUQgYW5kIENTUyBjbGFzcyBzbyB3ZSBjYW4gcmVtb3ZlIGl0IGxhdGVyLgogICAgICAgICRlbC5jc3MoInZpc2liaWxpdHkiLCAiaGlkZGVuIik7CiAgICAgICAgaWYgKGVyci5tZXNzYWdlICE9PSAiIikgewogICAgICAgICAgdmFyIGVycm9yRGl2ID0gJCgiPGRpdj4iKS5hZGRDbGFzcyhlcnJDbGFzcykuY3NzKCJwb3NpdGlvbiIsICJhYnNvbHV0ZSIpCiAgICAgICAgICAgIC5jc3MoInRvcCIsIGVsLm9mZnNldFRvcCkKICAgICAgICAgICAgLmNzcygibGVmdCIsIGVsLm9mZnNldExlZnQpCiAgICAgICAgICAgIC8vIHNldHRpbmcgd2lkdGggY2FuIHB1c2ggb3V0IHRoZSBwYWdlIHNpemUsIGZvcmNpbmcgb3RoZXJ3aXNlCiAgICAgICAgICAgIC8vIHVubmVjZXNzYXJ5IHNjcm9sbGJhcnMgdG8gYXBwZWFyIGFuZCBtYWtpbmcgaXQgaW1wb3NzaWJsZSBmb3IKICAgICAgICAgICAgLy8gdGhlIGVsZW1lbnQgdG8gc2hyaW5rOyBzbyB1c2UgbWF4LXdpZHRoIGluc3RlYWQKICAgICAgICAgICAgLmNzcygibWF4V2lkdGgiLCBlbC5vZmZzZXRXaWR0aCkKICAgICAgICAgICAgLmNzcygiaGVpZ2h0IiwgZWwub2Zmc2V0SGVpZ2h0KTsKICAgICAgICAgIGVycm9yRGl2LnRleHQoZXJyLm1lc3NhZ2UpOwogICAgICAgICAgJGVsLmFmdGVyKGVycm9yRGl2KTsKCiAgICAgICAgICAvLyBSZWFsbHkgZHVtYiB3YXkgdG8ga2VlcCB0aGUgc2l6ZS9wb3NpdGlvbiBvZiB0aGUgZXJyb3IgaW4gc3luYyB3aXRoCiAgICAgICAgICAvLyB0aGUgcGFyZW50IGVsZW1lbnQgYXMgdGhlIHdpbmRvdyBpcyByZXNpemVkIG9yIHdoYXRldmVyLgogICAgICAgICAgdmFyIGludElkID0gc2V0SW50ZXJ2YWwoZnVuY3Rpb24oKSB7CiAgICAgICAgICAgIGlmICghZXJyb3JEaXZbMF0ucGFyZW50RWxlbWVudCkgewogICAgICAgICAgICAgIGNsZWFySW50ZXJ2YWwoaW50SWQpOwogICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgfQogICAgICAgICAgICBlcnJvckRpdgogICAgICAgICAgICAgIC5jc3MoInRvcCIsIGVsLm9mZnNldFRvcCkKICAgICAgICAgICAgICAuY3NzKCJsZWZ0IiwgZWwub2Zmc2V0TGVmdCkKICAgICAgICAgICAgICAuY3NzKCJtYXhXaWR0aCIsIGVsLm9mZnNldFdpZHRoKQogICAgICAgICAgICAgIC5jc3MoImhlaWdodCIsIGVsLm9mZnNldEhlaWdodCk7CiAgICAgICAgICB9LCA1MDApOwogICAgICAgIH0KICAgICAgfQogICAgfSwKICAgIGNsZWFyRXJyb3I6IGZ1bmN0aW9uKGVsKSB7CiAgICAgIHZhciAkZWwgPSAkKGVsKTsKICAgICAgdmFyIGRpc3BsYXkgPSAkZWwuZGF0YSgicmVzdG9yZS1kaXNwbGF5LW1vZGUiKTsKICAgICAgJGVsLmRhdGEoInJlc3RvcmUtZGlzcGxheS1tb2RlIiwgbnVsbCk7CgogICAgICBpZiAoZGlzcGxheSA9PT0gImlubGluZSIgfHwgZGlzcGxheSA9PT0gImlubGluZS1ibG9jayIpIHsKICAgICAgICBpZiAoZGlzcGxheSkKICAgICAgICAgICRlbC5jc3MoImRpc3BsYXkiLCBkaXNwbGF5KTsKICAgICAgICAkKGVsLm5leHRTaWJsaW5nKS5maWx0ZXIoIi5odG1sd2lkZ2V0cy1lcnJvciIpLnJlbW92ZSgpOwogICAgICB9IGVsc2UgaWYgKGRpc3BsYXkgPT09ICJibG9jayIpewogICAgICAgICRlbC5jc3MoInZpc2liaWxpdHkiLCAiaW5oZXJpdCIpOwogICAgICAgICQoZWwubmV4dFNpYmxpbmcpLmZpbHRlcigiLmh0bWx3aWRnZXRzLWVycm9yIikucmVtb3ZlKCk7CiAgICAgIH0KICAgIH0sCiAgICBzaXppbmc6IHt9CiAgfTsKCiAgLy8gQ2FsbGVkIGJ5IHdpZGdldCBiaW5kaW5ncyB0byByZWdpc3RlciBhIG5ldyB0eXBlIG9mIHdpZGdldC4gVGhlIGRlZmluaXRpb24KICAvLyBvYmplY3QgY2FuIGNvbnRhaW4gdGhlIGZvbGxvd2luZyBwcm9wZXJ0aWVzOgogIC8vIC0gbmFtZSAocmVxdWlyZWQpIC0gQSBzdHJpbmcgaW5kaWNhdGluZyB0aGUgYmluZGluZyBuYW1lLCB3aGljaCB3aWxsIGJlCiAgLy8gICB1c2VkIGJ5IGRlZmF1bHQgYXMgdGhlIENTUyBjbGFzc25hbWUgdG8gbG9vayBmb3IuCiAgLy8gLSBpbml0aWFsaXplIChvcHRpb25hbCkgLSBBIGZ1bmN0aW9uKGVsKSB0aGF0IHdpbGwgYmUgY2FsbGVkIG9uY2UgcGVyCiAgLy8gICB3aWRnZXQgZWxlbWVudDsgaWYgYSB2YWx1ZSBpcyByZXR1cm5lZCwgaXQgd2lsbCBiZSBwYXNzZWQgYXMgdGhlIHRoaXJkCiAgLy8gICB2YWx1ZSB0byByZW5kZXJWYWx1ZS4KICAvLyAtIHJlbmRlclZhbHVlIChyZXF1aXJlZCkgLSBBIGZ1bmN0aW9uKGVsLCBkYXRhLCBpbml0VmFsdWUpIHRoYXQgd2lsbCBiZQogIC8vICAgY2FsbGVkIHdpdGggZGF0YS4gU3RhdGljIGNvbnRleHRzIHdpbGwgY2F1c2UgdGhpcyB0byBiZSBjYWxsZWQgb25jZSBwZXIKICAvLyAgIGVsZW1lbnQ7IFNoaW55IGFwcHMgd2lsbCBjYXVzZSB0aGlzIHRvIGJlIGNhbGxlZCBtdWx0aXBsZSB0aW1lcyBwZXIKICAvLyAgIGVsZW1lbnQsIGFzIHRoZSBkYXRhIGNoYW5nZXMuCiAgd2luZG93LkhUTUxXaWRnZXRzLndpZGdldCA9IGZ1bmN0aW9uKGRlZmluaXRpb24pIHsKICAgIGlmICghZGVmaW5pdGlvbi5uYW1lKSB7CiAgICAgIHRocm93IG5ldyBFcnJvcigiV2lkZ2V0IG11c3QgaGF2ZSBhIG5hbWUiKTsKICAgIH0KICAgIGlmICghZGVmaW5pdGlvbi50eXBlKSB7CiAgICAgIHRocm93IG5ldyBFcnJvcigiV2lkZ2V0IG11c3QgaGF2ZSBhIHR5cGUiKTsKICAgIH0KICAgIC8vIEN1cnJlbnRseSB3ZSBvbmx5IHN1cHBvcnQgb3V0cHV0IHdpZGdldHMKICAgIGlmIChkZWZpbml0aW9uLnR5cGUgIT09ICJvdXRwdXQiKSB7CiAgICAgIHRocm93IG5ldyBFcnJvcigiVW5yZWNvZ25pemVkIHdpZGdldCB0eXBlICciICsgZGVmaW5pdGlvbi50eXBlICsgIiciKTsKICAgIH0KICAgIC8vIFRPRE86IFZlcmlmeSB0aGF0IC5uYW1lIGlzIGEgdmFsaWQgQ1NTIGNsYXNzbmFtZQoKICAgIC8vIFN1cHBvcnQgbmV3LXN0eWxlIGluc3RhbmNlLWJvdW5kIGRlZmluaXRpb25zLiBPbGQtc3R5bGUgY2xhc3MtYm91bmQKICAgIC8vIGRlZmluaXRpb25zIGhhdmUgb25lIHdpZGdldCAib2JqZWN0IiBwZXIgd2lkZ2V0IHBlciB0eXBlL2NsYXNzIG9mCiAgICAvLyB3aWRnZXQ7IHRoZSByZW5kZXJWYWx1ZSBhbmQgcmVzaXplIG1ldGhvZHMgb24gc3VjaCB3aWRnZXQgb2JqZWN0cwogICAgLy8gdGFrZSBlbCBhbmQgaW5zdGFuY2UgYXJndW1lbnRzLCBiZWNhdXNlIHRoZSB3aWRnZXQgb2JqZWN0IGNhbid0CiAgICAvLyBzdG9yZSB0aGVtLiBOZXctc3R5bGUgaW5zdGFuY2UtYm91bmQgZGVmaW5pdGlvbnMgaGF2ZSBvbmUgd2lkZ2V0CiAgICAvLyBvYmplY3QgcGVyIHdpZGdldCBpbnN0YW5jZTsgdGhlIGRlZmluaXRpb24gdGhhdCdzIHBhc3NlZCBpbiBkb2Vzbid0CiAgICAvLyBwcm92aWRlIHJlbmRlclZhbHVlIG9yIHJlc2l6ZSBtZXRob2RzIGF0IGFsbCwganVzdCB0aGUgc2luZ2xlIG1ldGhvZAogICAgLy8gICBmYWN0b3J5KGVsLCB3aWR0aCwgaGVpZ2h0KQogICAgLy8gd2hpY2ggcmV0dXJucyBhbiBvYmplY3QgdGhhdCBoYXMgcmVuZGVyVmFsdWUoeCkgYW5kIHJlc2l6ZSh3LCBoKS4KICAgIC8vIFRoaXMgZW5hYmxlcyBhIGZhciBtb3JlIG5hdHVyYWwgcHJvZ3JhbW1pbmcgc3R5bGUgZm9yIHRoZSB3aWRnZXQKICAgIC8vIGF1dGhvciwgd2hvIGNhbiBzdG9yZSBwZXItaW5zdGFuY2Ugc3RhdGUgdXNpbmcgZWl0aGVyIE9PLXN0eWxlCiAgICAvLyBpbnN0YW5jZSBmaWVsZHMgb3IgZnVuY3Rpb25hbC1zdHlsZSBjbG9zdXJlIHZhcmlhYmxlcyAoSSBndWVzcyB0aGlzCiAgICAvLyBpcyBpbiBjb250cmFzdCB0byB3aGF0IGNhbiBvbmx5IGJlIGNhbGxlZCBDLXN0eWxlIHBzZXVkby1PTyB3aGljaCBpcwogICAgLy8gd2hhdCB3ZSByZXF1aXJlZCBiZWZvcmUpLgogICAgaWYgKGRlZmluaXRpb24uZmFjdG9yeSkgewogICAgICBkZWZpbml0aW9uID0gY3JlYXRlTGVnYWN5RGVmaW5pdGlvbkFkYXB0ZXIoZGVmaW5pdGlvbik7CiAgICB9CgogICAgaWYgKCFkZWZpbml0aW9uLnJlbmRlclZhbHVlKSB7CiAgICAgIHRocm93IG5ldyBFcnJvcigiV2lkZ2V0IG11c3QgaGF2ZSBhIHJlbmRlclZhbHVlIGZ1bmN0aW9uIik7CiAgICB9CgogICAgLy8gRm9yIHN0YXRpYyByZW5kZXJpbmcgKG5vbi1TaGlueSksIHVzZSBhIHNpbXBsZSB3aWRnZXQgcmVnaXN0cmF0aW9uCiAgICAvLyBzY2hlbWUuIFdlIGFsc28gdXNlIHRoaXMgc2NoZW1lIGZvciBTaGlueSBhcHBzL2RvY3VtZW50cyB0aGF0IGFsc28KICAgIC8vIGNvbnRhaW4gc3RhdGljIHdpZGdldHMuCiAgICB3aW5kb3cuSFRNTFdpZGdldHMud2lkZ2V0cyA9IHdpbmRvdy5IVE1MV2lkZ2V0cy53aWRnZXRzIHx8IFtdOwogICAgLy8gTWVyZ2UgZGVmYXVsdHMgaW50byB0aGUgZGVmaW5pdGlvbjsgZG9uJ3QgbXV0YXRlIHRoZSBvcmlnaW5hbCBkZWZpbml0aW9uLgogICAgdmFyIHN0YXRpY0JpbmRpbmcgPSBleHRlbmQoe30sIGRlZmF1bHRzLCBkZWZpbml0aW9uKTsKICAgIG92ZXJyaWRlTWV0aG9kKHN0YXRpY0JpbmRpbmcsICJmaW5kIiwgZnVuY3Rpb24oc3VwZXJmdW5jKSB7CiAgICAgIHJldHVybiBmdW5jdGlvbihzY29wZSkgewogICAgICAgIHZhciByZXN1bHRzID0gc3VwZXJmdW5jKHNjb3BlKTsKICAgICAgICAvLyBGaWx0ZXIgb3V0IFNoaW55IG91dHB1dHMsIHdlIG9ubHkgd2FudCB0aGUgc3RhdGljIGtpbmQKICAgICAgICByZXR1cm4gZmlsdGVyQnlDbGFzcyhyZXN1bHRzLCAiaHRtbC13aWRnZXQtb3V0cHV0IiwgZmFsc2UpOwogICAgICB9OwogICAgfSk7CiAgICB3aW5kb3cuSFRNTFdpZGdldHMud2lkZ2V0cy5wdXNoKHN0YXRpY0JpbmRpbmcpOwoKICAgIGlmIChzaGlueU1vZGUpIHsKICAgICAgLy8gU2hpbnkgaXMgcnVubmluZy4gUmVnaXN0ZXIgdGhlIGRlZmluaXRpb24gd2l0aCBhbiBvdXRwdXQgYmluZGluZy4KICAgICAgLy8gVGhlIGRlZmluaXRpb24gaXRzZWxmIHdpbGwgbm90IGJlIHRoZSBvdXRwdXQgYmluZGluZywgaW5zdGVhZAogICAgICAvLyB3ZSB3aWxsIG1ha2UgYW4gb3V0cHV0IGJpbmRpbmcgb2JqZWN0IHRoYXQgZGVsZWdhdGVzIHRvIHRoZQogICAgICAvLyBkZWZpbml0aW9uLiBUaGlzIGlzIGJlY2F1c2Ugd2UgZm9vbGlzaGx5IHVzZWQgdGhlIHNhbWUgbWV0aG9kCiAgICAgIC8vIG5hbWUgKHJlbmRlclZhbHVlKSBmb3IgaHRtbHdpZGdldHMgZGVmaW5pdGlvbiBhbmQgU2hpbnkgYmluZGluZ3MKICAgICAgLy8gYnV0IHRoZXkgYWN0dWFsbHkgaGF2ZSBxdWl0ZSBkaWZmZXJlbnQgc2VtYW50aWNzICh0aGUgU2hpbnkKICAgICAgLy8gYmluZGluZ3MgcmVjZWl2ZSBkYXRhIHRoYXQgaW5jbHVkZXMgbG90cyBvZiBtZXRhZGF0YSB0aGF0IGl0CiAgICAgIC8vIHN0cmlwcyBvZmYgYmVmb3JlIGNhbGxpbmcgaHRtbHdpZGdldHMgcmVuZGVyVmFsdWUpLiBXZSBjYW4ndAogICAgICAvLyBqdXN0IGlnbm9yZSB0aGUgZGlmZmVyZW5jZSBiZWNhdXNlIGluIHNvbWUgd2lkZ2V0cyBpdCdzIGhlbHBmdWwKICAgICAgLy8gdG8gY2FsbCB0aGlzLnJlbmRlclZhbHVlKCkgZnJvbSBpbnNpZGUgb2YgcmVzaXplKCksIGFuZCBpZgogICAgICAvLyB3ZSdyZSBub3QgZGVsZWdhdGluZywgdGhlbiB0aGF0IGNhbGwgd2lsbCBnbyB0byB0aGUgU2hpbnkKICAgICAgLy8gdmVyc2lvbiBpbnN0ZWFkIG9mIHRoZSBodG1sd2lkZ2V0cyB2ZXJzaW9uLgoKICAgICAgLy8gTWVyZ2UgZGVmYXVsdHMgd2l0aCBkZWZpbml0aW9uLCB3aXRob3V0IG11dGF0aW5nIGVpdGhlci4KICAgICAgdmFyIGJpbmRpbmdEZWYgPSBleHRlbmQoe30sIGRlZmF1bHRzLCBkZWZpbml0aW9uKTsKCiAgICAgIC8vIFRoaXMgb2JqZWN0IHdpbGwgYmUgb3VyIGFjdHVhbCBTaGlueSBiaW5kaW5nLgogICAgICB2YXIgc2hpbnlCaW5kaW5nID0gbmV3IFNoaW55Lk91dHB1dEJpbmRpbmcoKTsKCiAgICAgIC8vIFdpdGggYSBmZXcgZXhjZXB0aW9ucywgd2UnbGwgd2FudCB0byBzaW1wbHkgdXNlIHRoZSBiaW5kaW5nRGVmJ3MKICAgICAgLy8gdmVyc2lvbiBvZiBtZXRob2RzIGlmIHRoZXkgYXJlIGF2YWlsYWJsZSwgb3RoZXJ3aXNlIGZhbGwgYmFjayB0bwogICAgICAvLyBTaGlueSdzIGRlZmF1bHRzLiBOT1RFOiBJZiBTaGlueSdzIG91dHB1dCBiaW5kaW5ncyBnYWluIGFkZGl0aW9uYWwKICAgICAgLy8gbWV0aG9kcyBpbiB0aGUgZnV0dXJlLCBhbmQgd2Ugd2FudCB0aGVtIHRvIGJlIG92ZXJyaWRlYWJsZSBieQogICAgICAvLyBIVE1MV2lkZ2V0IGJpbmRpbmcgZGVmaW5pdGlvbnMsIHRoZW4gd2UnbGwgbmVlZCB0byBhZGQgdGhlbSB0byB0aGlzCiAgICAgIC8vIGxpc3QuCiAgICAgIGRlbGVnYXRlTWV0aG9kKHNoaW55QmluZGluZywgYmluZGluZ0RlZiwgImdldElkIik7CiAgICAgIGRlbGVnYXRlTWV0aG9kKHNoaW55QmluZGluZywgYmluZGluZ0RlZiwgIm9uVmFsdWVDaGFuZ2UiKTsKICAgICAgZGVsZWdhdGVNZXRob2Qoc2hpbnlCaW5kaW5nLCBiaW5kaW5nRGVmLCAib25WYWx1ZUVycm9yIik7CiAgICAgIGRlbGVnYXRlTWV0aG9kKHNoaW55QmluZGluZywgYmluZGluZ0RlZiwgInJlbmRlckVycm9yIik7CiAgICAgIGRlbGVnYXRlTWV0aG9kKHNoaW55QmluZGluZywgYmluZGluZ0RlZiwgImNsZWFyRXJyb3IiKTsKICAgICAgZGVsZWdhdGVNZXRob2Qoc2hpbnlCaW5kaW5nLCBiaW5kaW5nRGVmLCAic2hvd1Byb2dyZXNzIik7CgogICAgICAvLyBUaGUgZmluZCwgcmVuZGVyVmFsdWUsIGFuZCByZXNpemUgYXJlIGhhbmRsZWQgZGlmZmVyZW50bHksIGJlY2F1c2Ugd2UKICAgICAgLy8gd2FudCB0byBhY3R1YWxseSBkZWNvcmF0ZSB0aGUgYmVoYXZpb3Igb2YgdGhlIGJpbmRpbmdEZWYgbWV0aG9kcy4KCiAgICAgIHNoaW55QmluZGluZy5maW5kID0gZnVuY3Rpb24oc2NvcGUpIHsKICAgICAgICB2YXIgcmVzdWx0cyA9IGJpbmRpbmdEZWYuZmluZChzY29wZSk7CgogICAgICAgIC8vIE9ubHkgcmV0dXJuIGVsZW1lbnRzIHRoYXQgYXJlIFNoaW55IG91dHB1dHMsIG5vdCBzdGF0aWMgb25lcwogICAgICAgIHZhciBkeW5hbWljUmVzdWx0cyA9IHJlc3VsdHMuZmlsdGVyKCIuaHRtbC13aWRnZXQtb3V0cHV0Iik7CgogICAgICAgIC8vIEl0J3MgcG9zc2libGUgdGhhdCB3aGF0ZXZlciBjYXVzZWQgU2hpbnkgdG8gdGhpbmsgdGhlcmUgbWlnaHQgYmUKICAgICAgICAvLyBuZXcgZHluYW1pYyBvdXRwdXRzLCBhbHNvIGNhdXNlZCB0aGVyZSB0byBiZSBuZXcgc3RhdGljIG91dHB1dHMuCiAgICAgICAgLy8gU2luY2UgdGhlcmUgbWlnaHQgYmUgbG90cyBvZiBkaWZmZXJlbnQgaHRtbHdpZGdldHMgYmluZGluZ3MsIHdlCiAgICAgICAgLy8gc2NoZWR1bGUgZXhlY3V0aW9uIGZvciBsYXRlci0tbm8gbmVlZCB0byBzdGF0aWNSZW5kZXIgbXVsdGlwbGUKICAgICAgICAvLyB0aW1lcy4KICAgICAgICBpZiAocmVzdWx0cy5sZW5ndGggIT09IGR5bmFtaWNSZXN1bHRzLmxlbmd0aCkKICAgICAgICAgIHNjaGVkdWxlU3RhdGljUmVuZGVyKCk7CgogICAgICAgIHJldHVybiBkeW5hbWljUmVzdWx0czsKICAgICAgfTsKCiAgICAgIC8vIFdyYXAgcmVuZGVyVmFsdWUgdG8gaGFuZGxlIGluaXRpYWxpemF0aW9uLCB3aGljaCB1bmZvcnR1bmF0ZWx5IGlzbid0CiAgICAgIC8vIHN1cHBvcnRlZCBuYXRpdmVseSBieSBTaGlueSBhdCB0aGUgdGltZSBvZiB0aGlzIHdyaXRpbmcuCgogICAgICBzaGlueUJpbmRpbmcucmVuZGVyVmFsdWUgPSBmdW5jdGlvbihlbCwgZGF0YSkgewogICAgICAgIFNoaW55LnJlbmRlckRlcGVuZGVuY2llcyhkYXRhLmRlcHMpOwogICAgICAgIC8vIFJlc29sdmUgc3RyaW5ncyBtYXJrZWQgYXMgamF2YXNjcmlwdCBsaXRlcmFscyB0byBvYmplY3RzCiAgICAgICAgaWYgKCEoZGF0YS5ldmFscyBpbnN0YW5jZW9mIEFycmF5KSkgZGF0YS5ldmFscyA9IFtkYXRhLmV2YWxzXTsKICAgICAgICBmb3IgKHZhciBpID0gMDsgZGF0YS5ldmFscyAmJiBpIDwgZGF0YS5ldmFscy5sZW5ndGg7IGkrKykgewogICAgICAgICAgd2luZG93LkhUTUxXaWRnZXRzLmV2YWx1YXRlU3RyaW5nTWVtYmVyKGRhdGEueCwgZGF0YS5ldmFsc1tpXSk7CiAgICAgICAgfQogICAgICAgIGlmICghYmluZGluZ0RlZi5yZW5kZXJPbk51bGxWYWx1ZSkgewogICAgICAgICAgaWYgKGRhdGEueCA9PT0gbnVsbCkgewogICAgICAgICAgICBlbC5zdHlsZS52aXNpYmlsaXR5ID0gImhpZGRlbiI7CiAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgIGVsLnN0eWxlLnZpc2liaWxpdHkgPSAiaW5oZXJpdCI7CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIGlmICghZWxlbWVudERhdGEoZWwsICJpbml0aWFsaXplZCIpKSB7CiAgICAgICAgICBpbml0U2l6aW5nKGVsKTsKCiAgICAgICAgICBlbGVtZW50RGF0YShlbCwgImluaXRpYWxpemVkIiwgdHJ1ZSk7CiAgICAgICAgICBpZiAoYmluZGluZ0RlZi5pbml0aWFsaXplKSB7CiAgICAgICAgICAgIHZhciByZXN1bHQgPSBiaW5kaW5nRGVmLmluaXRpYWxpemUoZWwsIGVsLm9mZnNldFdpZHRoLAogICAgICAgICAgICAgIGVsLm9mZnNldEhlaWdodCk7CiAgICAgICAgICAgIGVsZW1lbnREYXRhKGVsLCAiaW5pdF9yZXN1bHQiLCByZXN1bHQpOwogICAgICAgICAgfQogICAgICAgIH0KICAgICAgICBiaW5kaW5nRGVmLnJlbmRlclZhbHVlKGVsLCBkYXRhLngsIGVsZW1lbnREYXRhKGVsLCAiaW5pdF9yZXN1bHQiKSk7CiAgICAgICAgZXZhbEFuZFJ1bihkYXRhLmpzSG9va3MucmVuZGVyLCBlbGVtZW50RGF0YShlbCwgImluaXRfcmVzdWx0IiksIFtlbCwgZGF0YS54XSk7CiAgICAgIH07CgogICAgICAvLyBPbmx5IG92ZXJyaWRlIHJlc2l6ZSBpZiBiaW5kaW5nRGVmIGltcGxlbWVudHMgaXQKICAgICAgaWYgKGJpbmRpbmdEZWYucmVzaXplKSB7CiAgICAgICAgc2hpbnlCaW5kaW5nLnJlc2l6ZSA9IGZ1bmN0aW9uKGVsLCB3aWR0aCwgaGVpZ2h0KSB7CiAgICAgICAgICAvLyBTaGlueSBjYW4gY2FsbCByZXNpemUgYmVmb3JlIGluaXRpYWxpemUvcmVuZGVyVmFsdWUgaGF2ZSBiZWVuCiAgICAgICAgICAvLyBjYWxsZWQsIHdoaWNoIGRvZXNuJ3QgbWFrZSBzZW5zZSBmb3Igd2lkZ2V0cy4KICAgICAgICAgIGlmIChlbGVtZW50RGF0YShlbCwgImluaXRpYWxpemVkIikpIHsKICAgICAgICAgICAgYmluZGluZ0RlZi5yZXNpemUoZWwsIHdpZHRoLCBoZWlnaHQsIGVsZW1lbnREYXRhKGVsLCAiaW5pdF9yZXN1bHQiKSk7CiAgICAgICAgICB9CiAgICAgICAgfTsKICAgICAgfQoKICAgICAgU2hpbnkub3V0cHV0QmluZGluZ3MucmVnaXN0ZXIoc2hpbnlCaW5kaW5nLCBiaW5kaW5nRGVmLm5hbWUpOwogICAgfQogIH07CgogIHZhciBzY2hlZHVsZVN0YXRpY1JlbmRlclRpbWVySWQgPSBudWxsOwogIGZ1bmN0aW9uIHNjaGVkdWxlU3RhdGljUmVuZGVyKCkgewogICAgaWYgKCFzY2hlZHVsZVN0YXRpY1JlbmRlclRpbWVySWQpIHsKICAgICAgc2NoZWR1bGVTdGF0aWNSZW5kZXJUaW1lcklkID0gc2V0VGltZW91dChmdW5jdGlvbigpIHsKICAgICAgICBzY2hlZHVsZVN0YXRpY1JlbmRlclRpbWVySWQgPSBudWxsOwogICAgICAgIHdpbmRvdy5IVE1MV2lkZ2V0cy5zdGF0aWNSZW5kZXIoKTsKICAgICAgfSwgMSk7CiAgICB9CiAgfQoKICAvLyBSZW5kZXIgc3RhdGljIHdpZGdldHMgYWZ0ZXIgdGhlIGRvY3VtZW50IGZpbmlzaGVzIGxvYWRpbmcKICAvLyBTdGF0aWNhbGx5IHJlbmRlciBhbGwgZWxlbWVudHMgdGhhdCBhcmUgb2YgdGhpcyB3aWRnZXQncyBjbGFzcwogIHdpbmRvdy5IVE1MV2lkZ2V0cy5zdGF0aWNSZW5kZXIgPSBmdW5jdGlvbigpIHsKICAgIHZhciBiaW5kaW5ncyA9IHdpbmRvdy5IVE1MV2lkZ2V0cy53aWRnZXRzIHx8IFtdOwogICAgZm9yRWFjaChiaW5kaW5ncywgZnVuY3Rpb24oYmluZGluZykgewogICAgICB2YXIgbWF0Y2hlcyA9IGJpbmRpbmcuZmluZChkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQpOwogICAgICBmb3JFYWNoKG1hdGNoZXMsIGZ1bmN0aW9uKGVsKSB7CiAgICAgICAgdmFyIHNpemVPYmogPSBpbml0U2l6aW5nKGVsLCBiaW5kaW5nKTsKCiAgICAgICAgaWYgKGhhc0NsYXNzKGVsLCAiaHRtbC13aWRnZXQtc3RhdGljLWJvdW5kIikpCiAgICAgICAgICByZXR1cm47CiAgICAgICAgZWwuY2xhc3NOYW1lID0gZWwuY2xhc3NOYW1lICsgIiBodG1sLXdpZGdldC1zdGF0aWMtYm91bmQiOwoKICAgICAgICB2YXIgaW5pdFJlc3VsdDsKICAgICAgICBpZiAoYmluZGluZy5pbml0aWFsaXplKSB7CiAgICAgICAgICBpbml0UmVzdWx0ID0gYmluZGluZy5pbml0aWFsaXplKGVsLAogICAgICAgICAgICBzaXplT2JqID8gc2l6ZU9iai5nZXRXaWR0aCgpIDogZWwub2Zmc2V0V2lkdGgsCiAgICAgICAgICAgIHNpemVPYmogPyBzaXplT2JqLmdldEhlaWdodCgpIDogZWwub2Zmc2V0SGVpZ2h0CiAgICAgICAgICApOwogICAgICAgICAgZWxlbWVudERhdGEoZWwsICJpbml0X3Jlc3VsdCIsIGluaXRSZXN1bHQpOwogICAgICAgIH0KCiAgICAgICAgaWYgKGJpbmRpbmcucmVzaXplKSB7CiAgICAgICAgICB2YXIgbGFzdFNpemUgPSB7fTsKICAgICAgICAgIHZhciByZXNpemVIYW5kbGVyID0gZnVuY3Rpb24oZSkgewogICAgICAgICAgICB2YXIgc2l6ZSA9IHsKICAgICAgICAgICAgICB3OiBzaXplT2JqID8gc2l6ZU9iai5nZXRXaWR0aCgpIDogZWwub2Zmc2V0V2lkdGgsCiAgICAgICAgICAgICAgaDogc2l6ZU9iaiA/IHNpemVPYmouZ2V0SGVpZ2h0KCkgOiBlbC5vZmZzZXRIZWlnaHQKICAgICAgICAgICAgfTsKICAgICAgICAgICAgaWYgKHNpemUudyA9PT0gMCAmJiBzaXplLmggPT09IDApCiAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICBpZiAoc2l6ZS53ID09PSBsYXN0U2l6ZS53ICYmIHNpemUuaCA9PT0gbGFzdFNpemUuaCkKICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgIGxhc3RTaXplID0gc2l6ZTsKICAgICAgICAgICAgYmluZGluZy5yZXNpemUoZWwsIHNpemUudywgc2l6ZS5oLCBpbml0UmVzdWx0KTsKICAgICAgICAgIH07CgogICAgICAgICAgb24od2luZG93LCAicmVzaXplIiwgcmVzaXplSGFuZGxlcik7CgogICAgICAgICAgLy8gVGhpcyBpcyBuZWVkZWQgZm9yIGNhc2VzIHdoZXJlIHdlJ3JlIHJ1bm5pbmcgaW4gYSBTaGlueQogICAgICAgICAgLy8gYXBwLCBidXQgdGhlIHdpZGdldCBpdHNlbGYgaXMgbm90IGEgU2hpbnkgb3V0cHV0LCBidXQKICAgICAgICAgIC8vIHJhdGhlciBhIHNpbXBsZSBzdGF0aWMgd2lkZ2V0LiBPbmUgZXhhbXBsZSBvZiB0aGlzIGlzCiAgICAgICAgICAvLyBhbiBybWFya2Rvd24gZG9jdW1lbnQgdGhhdCBoYXMgcnVudGltZTpzaGlueSBhbmQgd2lkZ2V0CiAgICAgICAgICAvLyB0aGF0IGlzbid0IGluIGEgcmVuZGVyIGZ1bmN0aW9uLiBTaGlueSBvbmx5IGtub3dzIHRvCiAgICAgICAgICAvLyBjYWxsIHJlc2l6ZSBoYW5kbGVycyBmb3IgU2hpbnkgb3V0cHV0cywgbm90IGZvciBzdGF0aWMKICAgICAgICAgIC8vIHdpZGdldHMsIHNvIHdlIGRvIGl0IG91cnNlbHZlcy4KICAgICAgICAgIGlmICh3aW5kb3cualF1ZXJ5KSB7CiAgICAgICAgICAgIHdpbmRvdy5qUXVlcnkoZG9jdW1lbnQpLm9uKAogICAgICAgICAgICAgICJzaG93bi5odG1sd2lkZ2V0cyBzaG93bi5icy50YWIuaHRtbHdpZGdldHMgc2hvd24uYnMuY29sbGFwc2UuaHRtbHdpZGdldHMiLAogICAgICAgICAgICAgIHJlc2l6ZUhhbmRsZXIKICAgICAgICAgICAgKTsKICAgICAgICAgICAgd2luZG93LmpRdWVyeShkb2N1bWVudCkub24oCiAgICAgICAgICAgICAgImhpZGRlbi5odG1sd2lkZ2V0cyBoaWRkZW4uYnMudGFiLmh0bWx3aWRnZXRzIGhpZGRlbi5icy5jb2xsYXBzZS5odG1sd2lkZ2V0cyIsCiAgICAgICAgICAgICAgcmVzaXplSGFuZGxlcgogICAgICAgICAgICApOwogICAgICAgICAgfQoKICAgICAgICAgIC8vIFRoaXMgaXMgbmVlZGVkIGZvciB0aGUgc3BlY2lmaWMgY2FzZSBvZiBpb3NsaWRlcywgd2hpY2gKICAgICAgICAgIC8vIGZsaXBzIHNsaWRlcyBiZXR3ZWVuIGRpc3BsYXk6bm9uZSBhbmQgZGlzcGxheTpibG9jay4KICAgICAgICAgIC8vIElkZWFsbHkgd2Ugd291bGQgbm90IGhhdmUgdG8gaGF2ZSBpb3NsaWRlLXNwZWNpZmljIGNvZGUKICAgICAgICAgIC8vIGhlcmUsIGJ1dCByYXRoZXIgaGF2ZSBpb3NsaWRlcyByYWlzZSBhIGdlbmVyaWMgZXZlbnQsCiAgICAgICAgICAvLyBidXQgdGhlIHJtYXJrZG93biBwYWNrYWdlIGp1c3Qgd2VudCB0byBDUkFOIHNvIHRoZQogICAgICAgICAgLy8gd2luZG93IHRvIGdldHRpbmcgdGhhdCBmaXhlZCBtYXkgYmUgbG9uZy4KICAgICAgICAgIGlmICh3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcikgewogICAgICAgICAgICAvLyBJdCdzIE9LIHRvIGxpbWl0IHRoaXMgdG8gd2luZG93LmFkZEV2ZW50TGlzdGVuZXIKICAgICAgICAgICAgLy8gYnJvd3NlcnMgYmVjYXVzZSBpb3NsaWRlcyBpdHNlbGYgb25seSBzdXBwb3J0cwogICAgICAgICAgICAvLyBzdWNoIGJyb3dzZXJzLgogICAgICAgICAgICBvbihkb2N1bWVudCwgInNsaWRlZW50ZXIiLCByZXNpemVIYW5kbGVyKTsKICAgICAgICAgICAgb24oZG9jdW1lbnQsICJzbGlkZWxlYXZlIiwgcmVzaXplSGFuZGxlcik7CiAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgICB2YXIgc2NyaXB0RGF0YSA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoInNjcmlwdFtkYXRhLWZvcj0nIiArIGVsLmlkICsgIiddW3R5cGU9J2FwcGxpY2F0aW9uL2pzb24nXSIpOwogICAgICAgIGlmIChzY3JpcHREYXRhKSB7CiAgICAgICAgICB2YXIgZGF0YSA9IEpTT04ucGFyc2Uoc2NyaXB0RGF0YS50ZXh0Q29udGVudCB8fCBzY3JpcHREYXRhLnRleHQpOwogICAgICAgICAgLy8gUmVzb2x2ZSBzdHJpbmdzIG1hcmtlZCBhcyBqYXZhc2NyaXB0IGxpdGVyYWxzIHRvIG9iamVjdHMKICAgICAgICAgIGlmICghKGRhdGEuZXZhbHMgaW5zdGFuY2VvZiBBcnJheSkpIGRhdGEuZXZhbHMgPSBbZGF0YS5ldmFsc107CiAgICAgICAgICBmb3IgKHZhciBrID0gMDsgZGF0YS5ldmFscyAmJiBrIDwgZGF0YS5ldmFscy5sZW5ndGg7IGsrKykgewogICAgICAgICAgICB3aW5kb3cuSFRNTFdpZGdldHMuZXZhbHVhdGVTdHJpbmdNZW1iZXIoZGF0YS54LCBkYXRhLmV2YWxzW2tdKTsKICAgICAgICAgIH0KICAgICAgICAgIGJpbmRpbmcucmVuZGVyVmFsdWUoZWwsIGRhdGEueCwgaW5pdFJlc3VsdCk7CiAgICAgICAgICBldmFsQW5kUnVuKGRhdGEuanNIb29rcy5yZW5kZXIsIGluaXRSZXN1bHQsIFtlbCwgZGF0YS54XSk7CiAgICAgICAgfQogICAgICB9KTsKICAgIH0pOwoKICAgIGludm9rZVBvc3RSZW5kZXJIYW5kbGVycygpOwogIH0KCiAgLy8gV2FpdCB1bnRpbCBhZnRlciB0aGUgZG9jdW1lbnQgaGFzIGxvYWRlZCB0byByZW5kZXIgdGhlIHdpZGdldHMuCiAgaWYgKGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIpIHsKICAgIGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoIkRPTUNvbnRlbnRMb2FkZWQiLCBmdW5jdGlvbigpIHsKICAgICAgZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcigiRE9NQ29udGVudExvYWRlZCIsIGFyZ3VtZW50cy5jYWxsZWUsIGZhbHNlKTsKICAgICAgd2luZG93LkhUTUxXaWRnZXRzLnN0YXRpY1JlbmRlcigpOwogICAgfSwgZmFsc2UpOwogIH0gZWxzZSBpZiAoZG9jdW1lbnQuYXR0YWNoRXZlbnQpIHsKICAgIGRvY3VtZW50LmF0dGFjaEV2ZW50KCJvbnJlYWR5c3RhdGVjaGFuZ2UiLCBmdW5jdGlvbigpIHsKICAgICAgaWYgKGRvY3VtZW50LnJlYWR5U3RhdGUgPT09ICJjb21wbGV0ZSIpIHsKICAgICAgICBkb2N1bWVudC5kZXRhY2hFdmVudCgib25yZWFkeXN0YXRlY2hhbmdlIiwgYXJndW1lbnRzLmNhbGxlZSk7CiAgICAgICAgd2luZG93LkhUTUxXaWRnZXRzLnN0YXRpY1JlbmRlcigpOwogICAgICB9CiAgICB9KTsKICB9CgoKICB3aW5kb3cuSFRNTFdpZGdldHMuZ2V0QXR0YWNobWVudFVybCA9IGZ1bmN0aW9uKGRlcG5hbWUsIGtleSkgewogICAgLy8gSWYgbm8ga2V5LCBkZWZhdWx0IHRvIHRoZSBmaXJzdCBpdGVtCiAgICBpZiAodHlwZW9mKGtleSkgPT09ICJ1bmRlZmluZWQiKQogICAgICBrZXkgPSAxOwoKICAgIHZhciBsaW5rID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoZGVwbmFtZSArICItIiArIGtleSArICItYXR0YWNobWVudCIpOwogICAgaWYgKCFsaW5rKSB7CiAgICAgIHRocm93IG5ldyBFcnJvcigiQXR0YWNobWVudCAiICsgZGVwbmFtZSArICIvIiArIGtleSArICIgbm90IGZvdW5kIGluIGRvY3VtZW50Iik7CiAgICB9CiAgICByZXR1cm4gbGluay5nZXRBdHRyaWJ1dGUoImhyZWYiKTsKICB9OwoKICB3aW5kb3cuSFRNTFdpZGdldHMuZGF0YWZyYW1lVG9EMyA9IGZ1bmN0aW9uKGRmKSB7CiAgICB2YXIgbmFtZXMgPSBbXTsKICAgIHZhciBsZW5ndGg7CiAgICBmb3IgKHZhciBuYW1lIGluIGRmKSB7CiAgICAgICAgaWYgKGRmLmhhc093blByb3BlcnR5KG5hbWUpKQogICAgICAgICAgICBuYW1lcy5wdXNoKG5hbWUpOwogICAgICAgIGlmICh0eXBlb2YoZGZbbmFtZV0pICE9PSAib2JqZWN0IiB8fCB0eXBlb2YoZGZbbmFtZV0ubGVuZ3RoKSA9PT0gInVuZGVmaW5lZCIpIHsKICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCJBbGwgZmllbGRzIG11c3QgYmUgYXJyYXlzIik7CiAgICAgICAgfSBlbHNlIGlmICh0eXBlb2YobGVuZ3RoKSAhPT0gInVuZGVmaW5lZCIgJiYgbGVuZ3RoICE9PSBkZltuYW1lXS5sZW5ndGgpIHsKICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCJBbGwgZmllbGRzIG11c3QgYmUgYXJyYXlzIG9mIHRoZSBzYW1lIGxlbmd0aCIpOwogICAgICAgIH0KICAgICAgICBsZW5ndGggPSBkZltuYW1lXS5sZW5ndGg7CiAgICB9CiAgICB2YXIgcmVzdWx0cyA9IFtdOwogICAgdmFyIGl0ZW07CiAgICBmb3IgKHZhciByb3cgPSAwOyByb3cgPCBsZW5ndGg7IHJvdysrKSB7CiAgICAgICAgaXRlbSA9IHt9OwogICAgICAgIGZvciAodmFyIGNvbCA9IDA7IGNvbCA8IG5hbWVzLmxlbmd0aDsgY29sKyspIHsKICAgICAgICAgICAgaXRlbVtuYW1lc1tjb2xdXSA9IGRmW25hbWVzW2NvbF1dW3Jvd107CiAgICAgICAgfQogICAgICAgIHJlc3VsdHMucHVzaChpdGVtKTsKICAgIH0KICAgIHJldHVybiByZXN1bHRzOwogIH07CgogIHdpbmRvdy5IVE1MV2lkZ2V0cy50cmFuc3Bvc2VBcnJheTJEID0gZnVuY3Rpb24oYXJyYXkpIHsKICAgICAgaWYgKGFycmF5Lmxlbmd0aCA9PT0gMCkgcmV0dXJuIGFycmF5OwogICAgICB2YXIgbmV3QXJyYXkgPSBhcnJheVswXS5tYXAoZnVuY3Rpb24oY29sLCBpKSB7CiAgICAgICAgICByZXR1cm4gYXJyYXkubWFwKGZ1bmN0aW9uKHJvdykgewogICAgICAgICAgICAgIHJldHVybiByb3dbaV0KICAgICAgICAgIH0pCiAgICAgIH0pOwogICAgICByZXR1cm4gbmV3QXJyYXk7CiAgfTsKICAvLyBTcGxpdCB2YWx1ZSBhdCBzcGxpdENoYXIsIGJ1dCBhbGxvdyBzcGxpdENoYXIgdG8gYmUgZXNjYXBlZAogIC8vIHVzaW5nIGVzY2FwZUNoYXIuIEFueSBvdGhlciBjaGFyYWN0ZXJzIGVzY2FwZWQgYnkgZXNjYXBlQ2hhcgogIC8vIHdpbGwgYmUgaW5jbHVkZWQgYXMgdXN1YWwgKGluY2x1ZGluZyBlc2NhcGVDaGFyIGl0c2VsZikuCiAgZnVuY3Rpb24gc3BsaXRXaXRoRXNjYXBlKHZhbHVlLCBzcGxpdENoYXIsIGVzY2FwZUNoYXIpIHsKICAgIHZhciByZXN1bHRzID0gW107CiAgICB2YXIgZXNjYXBlTW9kZSA9IGZhbHNlOwogICAgdmFyIGN1cnJlbnRSZXN1bHQgPSAiIjsKICAgIGZvciAodmFyIHBvcyA9IDA7IHBvcyA8IHZhbHVlLmxlbmd0aDsgcG9zKyspIHsKICAgICAgaWYgKCFlc2NhcGVNb2RlKSB7CiAgICAgICAgaWYgKHZhbHVlW3Bvc10gPT09IHNwbGl0Q2hhcikgewogICAgICAgICAgcmVzdWx0cy5wdXNoKGN1cnJlbnRSZXN1bHQpOwogICAgICAgICAgY3VycmVudFJlc3VsdCA9ICIiOwogICAgICAgIH0gZWxzZSBpZiAodmFsdWVbcG9zXSA9PT0gZXNjYXBlQ2hhcikgewogICAgICAgICAgZXNjYXBlTW9kZSA9IHRydWU7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgIGN1cnJlbnRSZXN1bHQgKz0gdmFsdWVbcG9zXTsKICAgICAgICB9CiAgICAgIH0gZWxzZSB7CiAgICAgICAgY3VycmVudFJlc3VsdCArPSB2YWx1ZVtwb3NdOwogICAgICAgIGVzY2FwZU1vZGUgPSBmYWxzZTsKICAgICAgfQogICAgfQogICAgaWYgKGN1cnJlbnRSZXN1bHQgIT09ICIiKSB7CiAgICAgIHJlc3VsdHMucHVzaChjdXJyZW50UmVzdWx0KTsKICAgIH0KICAgIHJldHVybiByZXN1bHRzOwogIH0KICAvLyBGdW5jdGlvbiBhdXRob3JlZCBieSBZaWh1aS9KSiBBbGxhaXJlCiAgd2luZG93LkhUTUxXaWRnZXRzLmV2YWx1YXRlU3RyaW5nTWVtYmVyID0gZnVuY3Rpb24obywgbWVtYmVyKSB7CiAgICB2YXIgcGFydHMgPSBzcGxpdFdpdGhFc2NhcGUobWVtYmVyLCAnLicsICdcXCcpOwogICAgZm9yICh2YXIgaSA9IDAsIGwgPSBwYXJ0cy5sZW5ndGg7IGkgPCBsOyBpKyspIHsKICAgICAgdmFyIHBhcnQgPSBwYXJ0c1tpXTsKICAgICAgLy8gcGFydCBtYXkgYmUgYSBjaGFyYWN0ZXIgb3IgJ251bWVyaWMnIG1lbWJlciBuYW1lCiAgICAgIGlmIChvICE9PSBudWxsICYmIHR5cGVvZiBvID09PSAib2JqZWN0IiAmJiBwYXJ0IGluIG8pIHsKICAgICAgICBpZiAoaSA9PSAobCAtIDEpKSB7IC8vIGlmIHdlIGFyZSBhdCB0aGUgZW5kIG9mIHRoZSBsaW5lIHRoZW4gZXZhbHVsYXRlCiAgICAgICAgICBpZiAodHlwZW9mIG9bcGFydF0gPT09ICJzdHJpbmciKQogICAgICAgICAgICBvW3BhcnRdID0gZXZhbCgiKCIgKyBvW3BhcnRdICsgIikiKTsKICAgICAgICB9IGVsc2UgeyAvLyBvdGhlcndpc2UgY29udGludWUgdG8gbmV4dCBlbWJlZGRlZCBvYmplY3QKICAgICAgICAgIG8gPSBvW3BhcnRdOwogICAgICAgIH0KICAgICAgfQogICAgfQogIH07CgogIC8vIFJldHJpZXZlIHRoZSBIVE1MV2lkZ2V0IGluc3RhbmNlIChpLmUuIHRoZSByZXR1cm4gdmFsdWUgb2YgYW4KICAvLyBIVE1MV2lkZ2V0IGJpbmRpbmcncyBpbml0aWFsaXplKCkgb3IgZmFjdG9yeSgpIGZ1bmN0aW9uKQogIC8vIGFzc29jaWF0ZWQgd2l0aCBhbiBlbGVtZW50LCBvciBudWxsIGlmIG5vbmUuCiAgd2luZG93LkhUTUxXaWRnZXRzLmdldEluc3RhbmNlID0gZnVuY3Rpb24oZWwpIHsKICAgIHJldHVybiBlbGVtZW50RGF0YShlbCwgImluaXRfcmVzdWx0Iik7CiAgfTsKCiAgLy8gRmluZHMgdGhlIGZpcnN0IGVsZW1lbnQgaW4gdGhlIHNjb3BlIHRoYXQgbWF0Y2hlcyB0aGUgc2VsZWN0b3IsCiAgLy8gYW5kIHJldHVybnMgdGhlIEhUTUxXaWRnZXQgaW5zdGFuY2UgKGkuZS4gdGhlIHJldHVybiB2YWx1ZSBvZgogIC8vIGFuIEhUTUxXaWRnZXQgYmluZGluZydzIGluaXRpYWxpemUoKSBvciBmYWN0b3J5KCkgZnVuY3Rpb24pCiAgLy8gYXNzb2NpYXRlZCB3aXRoIHRoYXQgZWxlbWVudCwgaWYgYW55LiBJZiBubyBlbGVtZW50IG1hdGNoZXMgdGhlCiAgLy8gc2VsZWN0b3IsIG9yIHRoZSBmaXJzdCBtYXRjaGluZyBlbGVtZW50IGhhcyBubyBIVE1MV2lkZ2V0CiAgLy8gaW5zdGFuY2UgYXNzb2NpYXRlZCB3aXRoIGl0LCB0aGVuIG51bGwgaXMgcmV0dXJuZWQuCiAgLy8KICAvLyBUaGUgc2NvcGUgYXJndW1lbnQgaXMgb3B0aW9uYWwsIGFuZCBkZWZhdWx0cyB0byB3aW5kb3cuZG9jdW1lbnQuCiAgd2luZG93LkhUTUxXaWRnZXRzLmZpbmQgPSBmdW5jdGlvbihzY29wZSwgc2VsZWN0b3IpIHsKICAgIGlmIChhcmd1bWVudHMubGVuZ3RoID09IDEpIHsKICAgICAgc2VsZWN0b3IgPSBzY29wZTsKICAgICAgc2NvcGUgPSBkb2N1bWVudDsKICAgIH0KCiAgICB2YXIgZWwgPSBzY29wZS5xdWVyeVNlbGVjdG9yKHNlbGVjdG9yKTsKICAgIGlmIChlbCA9PT0gbnVsbCkgewogICAgICByZXR1cm4gbnVsbDsKICAgIH0gZWxzZSB7CiAgICAgIHJldHVybiB3aW5kb3cuSFRNTFdpZGdldHMuZ2V0SW5zdGFuY2UoZWwpOwogICAgfQogIH07CgogIC8vIEZpbmRzIGFsbCBlbGVtZW50cyBpbiB0aGUgc2NvcGUgdGhhdCBtYXRjaCB0aGUgc2VsZWN0b3IsIGFuZAogIC8vIHJldHVybnMgdGhlIEhUTUxXaWRnZXQgaW5zdGFuY2VzIChpLmUuIHRoZSByZXR1cm4gdmFsdWVzIG9mCiAgLy8gYW4gSFRNTFdpZGdldCBiaW5kaW5nJ3MgaW5pdGlhbGl6ZSgpIG9yIGZhY3RvcnkoKSBmdW5jdGlvbikKICAvLyBhc3NvY2lhdGVkIHdpdGggdGhlIGVsZW1lbnRzLCBpbiBhbiBhcnJheS4gSWYgZWxlbWVudHMgdGhhdAogIC8vIG1hdGNoIHRoZSBzZWxlY3RvciBkb24ndCBoYXZlIGFuIGFzc29jaWF0ZWQgSFRNTFdpZGdldAogIC8vIGluc3RhbmNlLCB0aGUgcmV0dXJuZWQgYXJyYXkgd2lsbCBjb250YWluIG51bGxzLgogIC8vCiAgLy8gVGhlIHNjb3BlIGFyZ3VtZW50IGlzIG9wdGlvbmFsLCBhbmQgZGVmYXVsdHMgdG8gd2luZG93LmRvY3VtZW50LgogIHdpbmRvdy5IVE1MV2lkZ2V0cy5maW5kQWxsID0gZnVuY3Rpb24oc2NvcGUsIHNlbGVjdG9yKSB7CiAgICBpZiAoYXJndW1lbnRzLmxlbmd0aCA9PSAxKSB7CiAgICAgIHNlbGVjdG9yID0gc2NvcGU7CiAgICAgIHNjb3BlID0gZG9jdW1lbnQ7CiAgICB9CgogICAgdmFyIG5vZGVzID0gc2NvcGUucXVlcnlTZWxlY3RvckFsbChzZWxlY3Rvcik7CiAgICB2YXIgcmVzdWx0cyA9IFtdOwogICAgZm9yICh2YXIgaSA9IDA7IGkgPCBub2Rlcy5sZW5ndGg7IGkrKykgewogICAgICByZXN1bHRzLnB1c2god2luZG93LkhUTUxXaWRnZXRzLmdldEluc3RhbmNlKG5vZGVzW2ldKSk7CiAgICB9CiAgICByZXR1cm4gcmVzdWx0czsKICB9OwoKICB2YXIgcG9zdFJlbmRlckhhbmRsZXJzID0gW107CiAgZnVuY3Rpb24gaW52b2tlUG9zdFJlbmRlckhhbmRsZXJzKCkgewogICAgd2hpbGUgKHBvc3RSZW5kZXJIYW5kbGVycy5sZW5ndGgpIHsKICAgICAgdmFyIGhhbmRsZXIgPSBwb3N0UmVuZGVySGFuZGxlcnMuc2hpZnQoKTsKICAgICAgaWYgKGhhbmRsZXIpIHsKICAgICAgICBoYW5kbGVyKCk7CiAgICAgIH0KICAgIH0KICB9CgogIC8vIFJlZ2lzdGVyIHRoZSBnaXZlbiBjYWxsYmFjayBmdW5jdGlvbiB0byBiZSBpbnZva2VkIGFmdGVyIHRoZQogIC8vIG5leHQgdGltZSBzdGF0aWMgd2lkZ2V0cyBhcmUgcmVuZGVyZWQuCiAgd2luZG93LkhUTUxXaWRnZXRzLmFkZFBvc3RSZW5kZXJIYW5kbGVyID0gZnVuY3Rpb24oY2FsbGJhY2spIHsKICAgIHBvc3RSZW5kZXJIYW5kbGVycy5wdXNoKGNhbGxiYWNrKTsKICB9OwoKICAvLyBUYWtlcyBhIG5ldy1zdHlsZSBpbnN0YW5jZS1ib3VuZCBkZWZpbml0aW9uLCBhbmQgcmV0dXJucyBhbgogIC8vIG9sZC1zdHlsZSBjbGFzcy1ib3VuZCBkZWZpbml0aW9uLiBUaGlzIHNhdmVzIHVzIGZyb20gaGF2aW5nCiAgLy8gdG8gcmV3cml0ZSBhbGwgdGhlIGxvZ2ljIGluIHRoaXMgZmlsZSB0byBhY2NvbW9kYXRlIGJvdGgKICAvLyB0eXBlcyBvZiBkZWZpbml0aW9ucy4KICBmdW5jdGlvbiBjcmVhdGVMZWdhY3lEZWZpbml0aW9uQWRhcHRlcihkZWZuKSB7CiAgICB2YXIgcmVzdWx0ID0gewogICAgICBuYW1lOiBkZWZuLm5hbWUsCiAgICAgIHR5cGU6IGRlZm4udHlwZSwKICAgICAgaW5pdGlhbGl6ZTogZnVuY3Rpb24oZWwsIHdpZHRoLCBoZWlnaHQpIHsKICAgICAgICByZXR1cm4gZGVmbi5mYWN0b3J5KGVsLCB3aWR0aCwgaGVpZ2h0KTsKICAgICAgfSwKICAgICAgcmVuZGVyVmFsdWU6IGZ1bmN0aW9uKGVsLCB4LCBpbnN0YW5jZSkgewogICAgICAgIHJldHVybiBpbnN0YW5jZS5yZW5kZXJWYWx1ZSh4KTsKICAgICAgfSwKICAgICAgcmVzaXplOiBmdW5jdGlvbihlbCwgd2lkdGgsIGhlaWdodCwgaW5zdGFuY2UpIHsKICAgICAgICByZXR1cm4gaW5zdGFuY2UucmVzaXplKHdpZHRoLCBoZWlnaHQpOwogICAgICB9CiAgICB9OwoKICAgIGlmIChkZWZuLmZpbmQpCiAgICAgIHJlc3VsdC5maW5kID0gZGVmbi5maW5kOwogICAgaWYgKGRlZm4ucmVuZGVyRXJyb3IpCiAgICAgIHJlc3VsdC5yZW5kZXJFcnJvciA9IGRlZm4ucmVuZGVyRXJyb3I7CiAgICBpZiAoZGVmbi5jbGVhckVycm9yKQogICAgICByZXN1bHQuY2xlYXJFcnJvciA9IGRlZm4uY2xlYXJFcnJvcjsKCiAgICByZXR1cm4gcmVzdWx0OwogIH0KfSkoKTsKCg=="></script>
<script src="data:application/x-javascript;base64,IWZ1bmN0aW9uKCl7ZnVuY3Rpb24gbihuKXtyZXR1cm4gbiYmKG4ub3duZXJEb2N1bWVudHx8bi5kb2N1bWVudHx8bikuZG9jdW1lbnRFbGVtZW50fWZ1bmN0aW9uIHQobil7cmV0dXJuIG4mJihuLm93bmVyRG9jdW1lbnQmJm4ub3duZXJEb2N1bWVudC5kZWZhdWx0Vmlld3x8bi5kb2N1bWVudCYmbnx8bi5kZWZhdWx0Vmlldyl9ZnVuY3Rpb24gZShuLHQpe3JldHVybiB0Pm4/LTE6bj50PzE6bj49dD8wOjAvMH1mdW5jdGlvbiByKG4pe3JldHVybiBudWxsPT09bj8wLzA6K259ZnVuY3Rpb24gdShuKXtyZXR1cm4haXNOYU4obil9ZnVuY3Rpb24gaShuKXtyZXR1cm57bGVmdDpmdW5jdGlvbih0LGUscix1KXtmb3IoYXJndW1lbnRzLmxlbmd0aDwzJiYocj0wKSxhcmd1bWVudHMubGVuZ3RoPDQmJih1PXQubGVuZ3RoKTt1PnI7KXt2YXIgaT1yK3U+Pj4xO24odFtpXSxlKTwwP3I9aSsxOnU9aX1yZXR1cm4gcn0scmlnaHQ6ZnVuY3Rpb24odCxlLHIsdSl7Zm9yKGFyZ3VtZW50cy5sZW5ndGg8MyYmKHI9MCksYXJndW1lbnRzLmxlbmd0aDw0JiYodT10Lmxlbmd0aCk7dT5yOyl7dmFyIGk9cit1Pj4+MTtuKHRbaV0sZSk+MD91PWk6cj1pKzF9cmV0dXJuIHJ9fX1mdW5jdGlvbiBvKG4pe3JldHVybiBuLmxlbmd0aH1mdW5jdGlvbiBhKG4pe2Zvcih2YXIgdD0xO24qdCUxOyl0Kj0xMDtyZXR1cm4gdH1mdW5jdGlvbiBjKG4sdCl7Zm9yKHZhciBlIGluIHQpT2JqZWN0LmRlZmluZVByb3BlcnR5KG4ucHJvdG90eXBlLGUse3ZhbHVlOnRbZV0sZW51bWVyYWJsZTohMX0pfWZ1bmN0aW9uIGwoKXt0aGlzLl89T2JqZWN0LmNyZWF0ZShudWxsKX1mdW5jdGlvbiBzKG4pe3JldHVybihuKz0iIik9PT1wYXx8blswXT09PXZhP3ZhK246bn1mdW5jdGlvbiBmKG4pe3JldHVybihuKz0iIilbMF09PT12YT9uLnNsaWNlKDEpOm59ZnVuY3Rpb24gaChuKXtyZXR1cm4gcyhuKWluIHRoaXMuX31mdW5jdGlvbiBnKG4pe3JldHVybihuPXMobikpaW4gdGhpcy5fJiZkZWxldGUgdGhpcy5fW25dfWZ1bmN0aW9uIHAoKXt2YXIgbj1bXTtmb3IodmFyIHQgaW4gdGhpcy5fKW4ucHVzaChmKHQpKTtyZXR1cm4gbn1mdW5jdGlvbiB2KCl7dmFyIG49MDtmb3IodmFyIHQgaW4gdGhpcy5fKSsrbjtyZXR1cm4gbn1mdW5jdGlvbiBkKCl7Zm9yKHZhciBuIGluIHRoaXMuXylyZXR1cm4hMTtyZXR1cm4hMH1mdW5jdGlvbiBtKCl7dGhpcy5fPU9iamVjdC5jcmVhdGUobnVsbCl9ZnVuY3Rpb24geShuKXtyZXR1cm4gbn1mdW5jdGlvbiBNKG4sdCxlKXtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgcj1lLmFwcGx5KHQsYXJndW1lbnRzKTtyZXR1cm4gcj09PXQ/bjpyfX1mdW5jdGlvbiB4KG4sdCl7aWYodCBpbiBuKXJldHVybiB0O3Q9dC5jaGFyQXQoMCkudG9VcHBlckNhc2UoKSt0LnNsaWNlKDEpO2Zvcih2YXIgZT0wLHI9ZGEubGVuZ3RoO3I+ZTsrK2Upe3ZhciB1PWRhW2VdK3Q7aWYodSBpbiBuKXJldHVybiB1fX1mdW5jdGlvbiBiKCl7fWZ1bmN0aW9uIF8oKXt9ZnVuY3Rpb24gdyhuKXtmdW5jdGlvbiB0KCl7Zm9yKHZhciB0LHI9ZSx1PS0xLGk9ci5sZW5ndGg7Kyt1PGk7KSh0PXJbdV0ub24pJiZ0LmFwcGx5KHRoaXMsYXJndW1lbnRzKTtyZXR1cm4gbn12YXIgZT1bXSxyPW5ldyBsO3JldHVybiB0Lm9uPWZ1bmN0aW9uKHQsdSl7dmFyIGksbz1yLmdldCh0KTtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aDwyP28mJm8ub246KG8mJihvLm9uPW51bGwsZT1lLnNsaWNlKDAsaT1lLmluZGV4T2YobykpLmNvbmNhdChlLnNsaWNlKGkrMSkpLHIucmVtb3ZlKHQpKSx1JiZlLnB1c2goci5zZXQodCx7b246dX0pKSxuKX0sdH1mdW5jdGlvbiBTKCl7dGEuZXZlbnQucHJldmVudERlZmF1bHQoKX1mdW5jdGlvbiBrKCl7Zm9yKHZhciBuLHQ9dGEuZXZlbnQ7bj10LnNvdXJjZUV2ZW50Oyl0PW47cmV0dXJuIHR9ZnVuY3Rpb24gRShuKXtmb3IodmFyIHQ9bmV3IF8sZT0wLHI9YXJndW1lbnRzLmxlbmd0aDsrK2U8cjspdFthcmd1bWVudHNbZV1dPXcodCk7cmV0dXJuIHQub2Y9ZnVuY3Rpb24oZSxyKXtyZXR1cm4gZnVuY3Rpb24odSl7dHJ5e3ZhciBpPXUuc291cmNlRXZlbnQ9dGEuZXZlbnQ7dS50YXJnZXQ9bix0YS5ldmVudD11LHRbdS50eXBlXS5hcHBseShlLHIpfWZpbmFsbHl7dGEuZXZlbnQ9aX19fSx0fWZ1bmN0aW9uIEEobil7cmV0dXJuIHlhKG4sX2EpLG59ZnVuY3Rpb24gTihuKXtyZXR1cm4iZnVuY3Rpb24iPT10eXBlb2Ygbj9uOmZ1bmN0aW9uKCl7cmV0dXJuIE1hKG4sdGhpcyl9fWZ1bmN0aW9uIEMobil7cmV0dXJuImZ1bmN0aW9uIj09dHlwZW9mIG4/bjpmdW5jdGlvbigpe3JldHVybiB4YShuLHRoaXMpfX1mdW5jdGlvbiB6KG4sdCl7ZnVuY3Rpb24gZSgpe3RoaXMucmVtb3ZlQXR0cmlidXRlKG4pfWZ1bmN0aW9uIHIoKXt0aGlzLnJlbW92ZUF0dHJpYnV0ZU5TKG4uc3BhY2Usbi5sb2NhbCl9ZnVuY3Rpb24gdSgpe3RoaXMuc2V0QXR0cmlidXRlKG4sdCl9ZnVuY3Rpb24gaSgpe3RoaXMuc2V0QXR0cmlidXRlTlMobi5zcGFjZSxuLmxvY2FsLHQpfWZ1bmN0aW9uIG8oKXt2YXIgZT10LmFwcGx5KHRoaXMsYXJndW1lbnRzKTtudWxsPT1lP3RoaXMucmVtb3ZlQXR0cmlidXRlKG4pOnRoaXMuc2V0QXR0cmlidXRlKG4sZSl9ZnVuY3Rpb24gYSgpe3ZhciBlPXQuYXBwbHkodGhpcyxhcmd1bWVudHMpO251bGw9PWU/dGhpcy5yZW1vdmVBdHRyaWJ1dGVOUyhuLnNwYWNlLG4ubG9jYWwpOnRoaXMuc2V0QXR0cmlidXRlTlMobi5zcGFjZSxuLmxvY2FsLGUpfXJldHVybiBuPXRhLm5zLnF1YWxpZnkobiksbnVsbD09dD9uLmxvY2FsP3I6ZToiZnVuY3Rpb24iPT10eXBlb2YgdD9uLmxvY2FsP2E6bzpuLmxvY2FsP2k6dX1mdW5jdGlvbiBxKG4pe3JldHVybiBuLnRyaW0oKS5yZXBsYWNlKC9ccysvZywiICIpfWZ1bmN0aW9uIEwobil7cmV0dXJuIG5ldyBSZWdFeHAoIig/Ol58XFxzKykiK3RhLnJlcXVvdGUobikrIig/Olxccyt8JCkiLCJnIil9ZnVuY3Rpb24gVChuKXtyZXR1cm4obisiIikudHJpbSgpLnNwbGl0KC9efFxzKy8pfWZ1bmN0aW9uIFIobix0KXtmdW5jdGlvbiBlKCl7Zm9yKHZhciBlPS0xOysrZTx1OyluW2VdKHRoaXMsdCl9ZnVuY3Rpb24gcigpe2Zvcih2YXIgZT0tMSxyPXQuYXBwbHkodGhpcyxhcmd1bWVudHMpOysrZTx1OyluW2VdKHRoaXMscil9bj1UKG4pLm1hcChEKTt2YXIgdT1uLmxlbmd0aDtyZXR1cm4iZnVuY3Rpb24iPT10eXBlb2YgdD9yOmV9ZnVuY3Rpb24gRChuKXt2YXIgdD1MKG4pO3JldHVybiBmdW5jdGlvbihlLHIpe2lmKHU9ZS5jbGFzc0xpc3QpcmV0dXJuIHI/dS5hZGQobik6dS5yZW1vdmUobik7dmFyIHU9ZS5nZXRBdHRyaWJ1dGUoImNsYXNzIil8fCIiO3I/KHQubGFzdEluZGV4PTAsdC50ZXN0KHUpfHxlLnNldEF0dHJpYnV0ZSgiY2xhc3MiLHEodSsiICIrbikpKTplLnNldEF0dHJpYnV0ZSgiY2xhc3MiLHEodS5yZXBsYWNlKHQsIiAiKSkpfX1mdW5jdGlvbiBQKG4sdCxlKXtmdW5jdGlvbiByKCl7dGhpcy5zdHlsZS5yZW1vdmVQcm9wZXJ0eShuKX1mdW5jdGlvbiB1KCl7dGhpcy5zdHlsZS5zZXRQcm9wZXJ0eShuLHQsZSl9ZnVuY3Rpb24gaSgpe3ZhciByPXQuYXBwbHkodGhpcyxhcmd1bWVudHMpO251bGw9PXI/dGhpcy5zdHlsZS5yZW1vdmVQcm9wZXJ0eShuKTp0aGlzLnN0eWxlLnNldFByb3BlcnR5KG4scixlKX1yZXR1cm4gbnVsbD09dD9yOiJmdW5jdGlvbiI9PXR5cGVvZiB0P2k6dX1mdW5jdGlvbiBVKG4sdCl7ZnVuY3Rpb24gZSgpe2RlbGV0ZSB0aGlzW25dfWZ1bmN0aW9uIHIoKXt0aGlzW25dPXR9ZnVuY3Rpb24gdSgpe3ZhciBlPXQuYXBwbHkodGhpcyxhcmd1bWVudHMpO251bGw9PWU/ZGVsZXRlIHRoaXNbbl06dGhpc1tuXT1lfXJldHVybiBudWxsPT10P2U6ImZ1bmN0aW9uIj09dHlwZW9mIHQ/dTpyfWZ1bmN0aW9uIGoobil7ZnVuY3Rpb24gdCgpe3ZhciB0PXRoaXMub3duZXJEb2N1bWVudCxlPXRoaXMubmFtZXNwYWNlVVJJO3JldHVybiBlP3QuY3JlYXRlRWxlbWVudE5TKGUsbik6dC5jcmVhdGVFbGVtZW50KG4pfWZ1bmN0aW9uIGUoKXtyZXR1cm4gdGhpcy5vd25lckRvY3VtZW50LmNyZWF0ZUVsZW1lbnROUyhuLnNwYWNlLG4ubG9jYWwpfXJldHVybiJmdW5jdGlvbiI9PXR5cGVvZiBuP246KG49dGEubnMucXVhbGlmeShuKSkubG9jYWw/ZTp0fWZ1bmN0aW9uIEYoKXt2YXIgbj10aGlzLnBhcmVudE5vZGU7biYmbi5yZW1vdmVDaGlsZCh0aGlzKX1mdW5jdGlvbiBIKG4pe3JldHVybntfX2RhdGFfXzpufX1mdW5jdGlvbiBPKG4pe3JldHVybiBmdW5jdGlvbigpe3JldHVybiBiYSh0aGlzLG4pfX1mdW5jdGlvbiBJKG4pe3JldHVybiBhcmd1bWVudHMubGVuZ3RofHwobj1lKSxmdW5jdGlvbih0LGUpe3JldHVybiB0JiZlP24odC5fX2RhdGFfXyxlLl9fZGF0YV9fKTohdC0hZX19ZnVuY3Rpb24gWShuLHQpe2Zvcih2YXIgZT0wLHI9bi5sZW5ndGg7cj5lO2UrKylmb3IodmFyIHUsaT1uW2VdLG89MCxhPWkubGVuZ3RoO2E+bztvKyspKHU9aVtvXSkmJnQodSxvLGUpO3JldHVybiBufWZ1bmN0aW9uIFoobil7cmV0dXJuIHlhKG4sU2EpLG59ZnVuY3Rpb24gVihuKXt2YXIgdCxlO3JldHVybiBmdW5jdGlvbihyLHUsaSl7dmFyIG8sYT1uW2ldLnVwZGF0ZSxjPWEubGVuZ3RoO2ZvcihpIT1lJiYoZT1pLHQ9MCksdT49dCYmKHQ9dSsxKTshKG89YVt0XSkmJisrdDxjOyk7cmV0dXJuIG99fWZ1bmN0aW9uIFgobix0LGUpe2Z1bmN0aW9uIHIoKXt2YXIgdD10aGlzW29dO3QmJih0aGlzLnJlbW92ZUV2ZW50TGlzdGVuZXIobix0LHQuJCksZGVsZXRlIHRoaXNbb10pfWZ1bmN0aW9uIHUoKXt2YXIgdT1jKHQscmEoYXJndW1lbnRzKSk7ci5jYWxsKHRoaXMpLHRoaXMuYWRkRXZlbnRMaXN0ZW5lcihuLHRoaXNbb109dSx1LiQ9ZSksdS5fPXR9ZnVuY3Rpb24gaSgpe3ZhciB0LGU9bmV3IFJlZ0V4cCgiXl9fb24oW14uXSspIit0YS5yZXF1b3RlKG4pKyIkIik7Zm9yKHZhciByIGluIHRoaXMpaWYodD1yLm1hdGNoKGUpKXt2YXIgdT10aGlzW3JdO3RoaXMucmVtb3ZlRXZlbnRMaXN0ZW5lcih0WzFdLHUsdS4kKSxkZWxldGUgdGhpc1tyXX19dmFyIG89Il9fb24iK24sYT1uLmluZGV4T2YoIi4iKSxjPSQ7YT4wJiYobj1uLnNsaWNlKDAsYSkpO3ZhciBsPWthLmdldChuKTtyZXR1cm4gbCYmKG49bCxjPUIpLGE/dD91OnI6dD9iOml9ZnVuY3Rpb24gJChuLHQpe3JldHVybiBmdW5jdGlvbihlKXt2YXIgcj10YS5ldmVudDt0YS5ldmVudD1lLHRbMF09dGhpcy5fX2RhdGFfXzt0cnl7bi5hcHBseSh0aGlzLHQpfWZpbmFsbHl7dGEuZXZlbnQ9cn19fWZ1bmN0aW9uIEIobix0KXt2YXIgZT0kKG4sdCk7cmV0dXJuIGZ1bmN0aW9uKG4pe3ZhciB0PXRoaXMscj1uLnJlbGF0ZWRUYXJnZXQ7ciYmKHI9PT10fHw4JnIuY29tcGFyZURvY3VtZW50UG9zaXRpb24odCkpfHxlLmNhbGwodCxuKX19ZnVuY3Rpb24gVyhlKXt2YXIgcj0iLmRyYWdzdXBwcmVzcy0iKyArK0FhLHU9ImNsaWNrIityLGk9dGEuc2VsZWN0KHQoZSkpLm9uKCJ0b3VjaG1vdmUiK3IsUykub24oImRyYWdzdGFydCIrcixTKS5vbigic2VsZWN0c3RhcnQiK3IsUyk7aWYobnVsbD09RWEmJihFYT0ib25zZWxlY3RzdGFydCJpbiBlPyExOngoZS5zdHlsZSwidXNlclNlbGVjdCIpKSxFYSl7dmFyIG89bihlKS5zdHlsZSxhPW9bRWFdO29bRWFdPSJub25lIn1yZXR1cm4gZnVuY3Rpb24obil7aWYoaS5vbihyLG51bGwpLEVhJiYob1tFYV09YSksbil7dmFyIHQ9ZnVuY3Rpb24oKXtpLm9uKHUsbnVsbCl9O2kub24odSxmdW5jdGlvbigpe1MoKSx0KCl9LCEwKSxzZXRUaW1lb3V0KHQsMCl9fX1mdW5jdGlvbiBKKG4sZSl7ZS5jaGFuZ2VkVG91Y2hlcyYmKGU9ZS5jaGFuZ2VkVG91Y2hlc1swXSk7dmFyIHI9bi5vd25lclNWR0VsZW1lbnR8fG47aWYoci5jcmVhdGVTVkdQb2ludCl7dmFyIHU9ci5jcmVhdGVTVkdQb2ludCgpO2lmKDA+TmEpe3ZhciBpPXQobik7aWYoaS5zY3JvbGxYfHxpLnNjcm9sbFkpe3I9dGEuc2VsZWN0KCJib2R5IikuYXBwZW5kKCJzdmciKS5zdHlsZSh7cG9zaXRpb246ImFic29sdXRlIix0b3A6MCxsZWZ0OjAsbWFyZ2luOjAscGFkZGluZzowLGJvcmRlcjoibm9uZSJ9LCJpbXBvcnRhbnQiKTt2YXIgbz1yWzBdWzBdLmdldFNjcmVlbkNUTSgpO05hPSEoby5mfHxvLmUpLHIucmVtb3ZlKCl9fXJldHVybiBOYT8odS54PWUucGFnZVgsdS55PWUucGFnZVkpOih1Lng9ZS5jbGllbnRYLHUueT1lLmNsaWVudFkpLHU9dS5tYXRyaXhUcmFuc2Zvcm0obi5nZXRTY3JlZW5DVE0oKS5pbnZlcnNlKCkpLFt1LngsdS55XX12YXIgYT1uLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO3JldHVybltlLmNsaWVudFgtYS5sZWZ0LW4uY2xpZW50TGVmdCxlLmNsaWVudFktYS50b3Atbi5jbGllbnRUb3BdfWZ1bmN0aW9uIEcoKXtyZXR1cm4gdGEuZXZlbnQuY2hhbmdlZFRvdWNoZXNbMF0uaWRlbnRpZmllcn1mdW5jdGlvbiBLKG4pe3JldHVybiBuPjA/MTowPm4/LTE6MH1mdW5jdGlvbiBRKG4sdCxlKXtyZXR1cm4odFswXS1uWzBdKSooZVsxXS1uWzFdKS0odFsxXS1uWzFdKSooZVswXS1uWzBdKX1mdW5jdGlvbiBudChuKXtyZXR1cm4gbj4xPzA6LTE+bj9xYTpNYXRoLmFjb3Mobil9ZnVuY3Rpb24gdHQobil7cmV0dXJuIG4+MT9SYTotMT5uPy1SYTpNYXRoLmFzaW4obil9ZnVuY3Rpb24gZXQobil7cmV0dXJuKChuPU1hdGguZXhwKG4pKS0xL24pLzJ9ZnVuY3Rpb24gcnQobil7cmV0dXJuKChuPU1hdGguZXhwKG4pKSsxL24pLzJ9ZnVuY3Rpb24gdXQobil7cmV0dXJuKChuPU1hdGguZXhwKDIqbikpLTEpLyhuKzEpfWZ1bmN0aW9uIGl0KG4pe3JldHVybihuPU1hdGguc2luKG4vMikpKm59ZnVuY3Rpb24gb3QoKXt9ZnVuY3Rpb24gYXQobix0LGUpe3JldHVybiB0aGlzIGluc3RhbmNlb2YgYXQ/KHRoaXMuaD0rbix0aGlzLnM9K3Qsdm9pZCh0aGlzLmw9K2UpKTphcmd1bWVudHMubGVuZ3RoPDI/biBpbnN0YW5jZW9mIGF0P25ldyBhdChuLmgsbi5zLG4ubCk6YnQoIiIrbixfdCxhdCk6bmV3IGF0KG4sdCxlKX1mdW5jdGlvbiBjdChuLHQsZSl7ZnVuY3Rpb24gcihuKXtyZXR1cm4gbj4zNjA/bi09MzYwOjA+biYmKG4rPTM2MCksNjA+bj9pKyhvLWkpKm4vNjA6MTgwPm4/bzoyNDA+bj9pKyhvLWkpKigyNDAtbikvNjA6aX1mdW5jdGlvbiB1KG4pe3JldHVybiBNYXRoLnJvdW5kKDI1NSpyKG4pKX12YXIgaSxvO3JldHVybiBuPWlzTmFOKG4pPzA6KG4lPTM2MCk8MD9uKzM2MDpuLHQ9aXNOYU4odCk/MDowPnQ/MDp0PjE/MTp0LGU9MD5lPzA6ZT4xPzE6ZSxvPS41Pj1lP2UqKDErdCk6ZSt0LWUqdCxpPTIqZS1vLG5ldyBtdCh1KG4rMTIwKSx1KG4pLHUobi0xMjApKX1mdW5jdGlvbiBsdChuLHQsZSl7cmV0dXJuIHRoaXMgaW5zdGFuY2VvZiBsdD8odGhpcy5oPStuLHRoaXMuYz0rdCx2b2lkKHRoaXMubD0rZSkpOmFyZ3VtZW50cy5sZW5ndGg8Mj9uIGluc3RhbmNlb2YgbHQ/bmV3IGx0KG4uaCxuLmMsbi5sKTpuIGluc3RhbmNlb2YgZnQ/Z3Qobi5sLG4uYSxuLmIpOmd0KChuPXd0KChuPXRhLnJnYihuKSkucixuLmcsbi5iKSkubCxuLmEsbi5iKTpuZXcgbHQobix0LGUpfWZ1bmN0aW9uIHN0KG4sdCxlKXtyZXR1cm4gaXNOYU4obikmJihuPTApLGlzTmFOKHQpJiYodD0wKSxuZXcgZnQoZSxNYXRoLmNvcyhuKj1EYSkqdCxNYXRoLnNpbihuKSp0KX1mdW5jdGlvbiBmdChuLHQsZSl7cmV0dXJuIHRoaXMgaW5zdGFuY2VvZiBmdD8odGhpcy5sPStuLHRoaXMuYT0rdCx2b2lkKHRoaXMuYj0rZSkpOmFyZ3VtZW50cy5sZW5ndGg8Mj9uIGluc3RhbmNlb2YgZnQ/bmV3IGZ0KG4ubCxuLmEsbi5iKTpuIGluc3RhbmNlb2YgbHQ/c3Qobi5oLG4uYyxuLmwpOnd0KChuPW10KG4pKS5yLG4uZyxuLmIpOm5ldyBmdChuLHQsZSl9ZnVuY3Rpb24gaHQobix0LGUpe3ZhciByPShuKzE2KS8xMTYsdT1yK3QvNTAwLGk9ci1lLzIwMDtyZXR1cm4gdT1wdCh1KSpYYSxyPXB0KHIpKiRhLGk9cHQoaSkqQmEsbmV3IG10KGR0KDMuMjQwNDU0Mip1LTEuNTM3MTM4NSpyLS40OTg1MzE0KmkpLGR0KC0uOTY5MjY2KnUrMS44NzYwMTA4KnIrLjA0MTU1NippKSxkdCguMDU1NjQzNCp1LS4yMDQwMjU5KnIrMS4wNTcyMjUyKmkpKX1mdW5jdGlvbiBndChuLHQsZSl7cmV0dXJuIG4+MD9uZXcgbHQoTWF0aC5hdGFuMihlLHQpKlBhLE1hdGguc3FydCh0KnQrZSplKSxuKTpuZXcgbHQoMC8wLDAvMCxuKX1mdW5jdGlvbiBwdChuKXtyZXR1cm4gbj4uMjA2ODkzMDM0P24qbipuOihuLTQvMjkpLzcuNzg3MDM3fWZ1bmN0aW9uIHZ0KG4pe3JldHVybiBuPi4wMDg4NTY/TWF0aC5wb3cobiwxLzMpOjcuNzg3MDM3Km4rNC8yOX1mdW5jdGlvbiBkdChuKXtyZXR1cm4gTWF0aC5yb3VuZCgyNTUqKC4wMDMwND49bj8xMi45MipuOjEuMDU1Kk1hdGgucG93KG4sMS8yLjQpLS4wNTUpKX1mdW5jdGlvbiBtdChuLHQsZSl7cmV0dXJuIHRoaXMgaW5zdGFuY2VvZiBtdD8odGhpcy5yPX5+bix0aGlzLmc9fn50LHZvaWQodGhpcy5iPX5+ZSkpOmFyZ3VtZW50cy5sZW5ndGg8Mj9uIGluc3RhbmNlb2YgbXQ/bmV3IG10KG4ucixuLmcsbi5iKTpidCgiIituLG10LGN0KTpuZXcgbXQobix0LGUpfWZ1bmN0aW9uIHl0KG4pe3JldHVybiBuZXcgbXQobj4+MTYsbj4+OCYyNTUsMjU1Jm4pfWZ1bmN0aW9uIE10KG4pe3JldHVybiB5dChuKSsiIn1mdW5jdGlvbiB4dChuKXtyZXR1cm4gMTY+bj8iMCIrTWF0aC5tYXgoMCxuKS50b1N0cmluZygxNik6TWF0aC5taW4oMjU1LG4pLnRvU3RyaW5nKDE2KX1mdW5jdGlvbiBidChuLHQsZSl7dmFyIHIsdSxpLG89MCxhPTAsYz0wO2lmKHI9LyhbYS16XSspXCgoLiopXCkvaS5leGVjKG4pKXN3aXRjaCh1PXJbMl0uc3BsaXQoIiwiKSxyWzFdKXtjYXNlImhzbCI6cmV0dXJuIGUocGFyc2VGbG9hdCh1WzBdKSxwYXJzZUZsb2F0KHVbMV0pLzEwMCxwYXJzZUZsb2F0KHVbMl0pLzEwMCk7Y2FzZSJyZ2IiOnJldHVybiB0KGt0KHVbMF0pLGt0KHVbMV0pLGt0KHVbMl0pKX1yZXR1cm4oaT1HYS5nZXQobi50b0xvd2VyQ2FzZSgpKSk/dChpLnIsaS5nLGkuYik6KG51bGw9PW58fCIjIiE9PW4uY2hhckF0KDApfHxpc05hTihpPXBhcnNlSW50KG4uc2xpY2UoMSksMTYpKXx8KDQ9PT1uLmxlbmd0aD8obz0oMzg0MCZpKT4+NCxvPW8+PjR8byxhPTI0MCZpLGE9YT4+NHxhLGM9MTUmaSxjPWM8PDR8Yyk6Nz09PW4ubGVuZ3RoJiYobz0oMTY3MTE2ODAmaSk+PjE2LGE9KDY1MjgwJmkpPj44LGM9MjU1JmkpKSx0KG8sYSxjKSl9ZnVuY3Rpb24gX3Qobix0LGUpe3ZhciByLHUsaT1NYXRoLm1pbihuLz0yNTUsdC89MjU1LGUvPTI1NSksbz1NYXRoLm1heChuLHQsZSksYT1vLWksYz0obytpKS8yO3JldHVybiBhPyh1PS41PmM/YS8obytpKTphLygyLW8taSkscj1uPT1vPyh0LWUpL2ErKGU+dD82OjApOnQ9PW8/KGUtbikvYSsyOihuLXQpL2ErNCxyKj02MCk6KHI9MC8wLHU9Yz4wJiYxPmM/MDpyKSxuZXcgYXQocix1LGMpfWZ1bmN0aW9uIHd0KG4sdCxlKXtuPVN0KG4pLHQ9U3QodCksZT1TdChlKTt2YXIgcj12dCgoLjQxMjQ1NjQqbisuMzU3NTc2MSp0Ky4xODA0Mzc1KmUpL1hhKSx1PXZ0KCguMjEyNjcyOSpuKy43MTUxNTIyKnQrLjA3MjE3NSplKS8kYSksaT12dCgoLjAxOTMzMzkqbisuMTE5MTkyKnQrLjk1MDMwNDEqZSkvQmEpO3JldHVybiBmdCgxMTYqdS0xNiw1MDAqKHItdSksMjAwKih1LWkpKX1mdW5jdGlvbiBTdChuKXtyZXR1cm4obi89MjU1KTw9LjA0MDQ1P24vMTIuOTI6TWF0aC5wb3coKG4rLjA1NSkvMS4wNTUsMi40KX1mdW5jdGlvbiBrdChuKXt2YXIgdD1wYXJzZUZsb2F0KG4pO3JldHVybiIlIj09PW4uY2hhckF0KG4ubGVuZ3RoLTEpP01hdGgucm91bmQoMi41NSp0KTp0fWZ1bmN0aW9uIEV0KG4pe3JldHVybiJmdW5jdGlvbiI9PXR5cGVvZiBuP246ZnVuY3Rpb24oKXtyZXR1cm4gbn19ZnVuY3Rpb24gQXQobil7cmV0dXJuIGZ1bmN0aW9uKHQsZSxyKXtyZXR1cm4gMj09PWFyZ3VtZW50cy5sZW5ndGgmJiJmdW5jdGlvbiI9PXR5cGVvZiBlJiYocj1lLGU9bnVsbCksTnQodCxlLG4scil9fWZ1bmN0aW9uIE50KG4sdCxlLHIpe2Z1bmN0aW9uIHUoKXt2YXIgbix0PWMuc3RhdHVzO2lmKCF0JiZ6dChjKXx8dD49MjAwJiYzMDA+dHx8MzA0PT09dCl7dHJ5e249ZS5jYWxsKGksYyl9Y2F0Y2gocil7cmV0dXJuIHZvaWQgby5lcnJvci5jYWxsKGkscil9by5sb2FkLmNhbGwoaSxuKX1lbHNlIG8uZXJyb3IuY2FsbChpLGMpfXZhciBpPXt9LG89dGEuZGlzcGF0Y2goImJlZm9yZXNlbmQiLCJwcm9ncmVzcyIsImxvYWQiLCJlcnJvciIpLGE9e30sYz1uZXcgWE1MSHR0cFJlcXVlc3QsbD1udWxsO3JldHVybiF0aGlzLlhEb21haW5SZXF1ZXN0fHwid2l0aENyZWRlbnRpYWxzImluIGN8fCEvXihodHRwKHMpPzopP1wvXC8vLnRlc3Qobil8fChjPW5ldyBYRG9tYWluUmVxdWVzdCksIm9ubG9hZCJpbiBjP2Mub25sb2FkPWMub25lcnJvcj11OmMub25yZWFkeXN0YXRlY2hhbmdlPWZ1bmN0aW9uKCl7Yy5yZWFkeVN0YXRlPjMmJnUoKX0sYy5vbnByb2dyZXNzPWZ1bmN0aW9uKG4pe3ZhciB0PXRhLmV2ZW50O3RhLmV2ZW50PW47dHJ5e28ucHJvZ3Jlc3MuY2FsbChpLGMpfWZpbmFsbHl7dGEuZXZlbnQ9dH19LGkuaGVhZGVyPWZ1bmN0aW9uKG4sdCl7cmV0dXJuIG49KG4rIiIpLnRvTG93ZXJDYXNlKCksYXJndW1lbnRzLmxlbmd0aDwyP2Fbbl06KG51bGw9PXQ/ZGVsZXRlIGFbbl06YVtuXT10KyIiLGkpfSxpLm1pbWVUeXBlPWZ1bmN0aW9uKG4pe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh0PW51bGw9PW4/bnVsbDpuKyIiLGkpOnR9LGkucmVzcG9uc2VUeXBlPWZ1bmN0aW9uKG4pe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhsPW4saSk6bH0saS5yZXNwb25zZT1mdW5jdGlvbihuKXtyZXR1cm4gZT1uLGl9LFsiZ2V0IiwicG9zdCJdLmZvckVhY2goZnVuY3Rpb24obil7aVtuXT1mdW5jdGlvbigpe3JldHVybiBpLnNlbmQuYXBwbHkoaSxbbl0uY29uY2F0KHJhKGFyZ3VtZW50cykpKX19KSxpLnNlbmQ9ZnVuY3Rpb24oZSxyLHUpe2lmKDI9PT1hcmd1bWVudHMubGVuZ3RoJiYiZnVuY3Rpb24iPT10eXBlb2YgciYmKHU9cixyPW51bGwpLGMub3BlbihlLG4sITApLG51bGw9PXR8fCJhY2NlcHQiaW4gYXx8KGEuYWNjZXB0PXQrIiwqLyoiKSxjLnNldFJlcXVlc3RIZWFkZXIpZm9yKHZhciBzIGluIGEpYy5zZXRSZXF1ZXN0SGVhZGVyKHMsYVtzXSk7cmV0dXJuIG51bGwhPXQmJmMub3ZlcnJpZGVNaW1lVHlwZSYmYy5vdmVycmlkZU1pbWVUeXBlKHQpLG51bGwhPWwmJihjLnJlc3BvbnNlVHlwZT1sKSxudWxsIT11JiZpLm9uKCJlcnJvciIsdSkub24oImxvYWQiLGZ1bmN0aW9uKG4pe3UobnVsbCxuKX0pLG8uYmVmb3Jlc2VuZC5jYWxsKGksYyksYy5zZW5kKG51bGw9PXI/bnVsbDpyKSxpfSxpLmFib3J0PWZ1bmN0aW9uKCl7cmV0dXJuIGMuYWJvcnQoKSxpfSx0YS5yZWJpbmQoaSxvLCJvbiIpLG51bGw9PXI/aTppLmdldChDdChyKSl9ZnVuY3Rpb24gQ3Qobil7cmV0dXJuIDE9PT1uLmxlbmd0aD9mdW5jdGlvbih0LGUpe24obnVsbD09dD9lOm51bGwpfTpufWZ1bmN0aW9uIHp0KG4pe3ZhciB0PW4ucmVzcG9uc2VUeXBlO3JldHVybiB0JiYidGV4dCIhPT10P24ucmVzcG9uc2U6bi5yZXNwb25zZVRleHR9ZnVuY3Rpb24gcXQoKXt2YXIgbj1MdCgpLHQ9VHQoKS1uO3Q+MjQ/KGlzRmluaXRlKHQpJiYoY2xlYXJUaW1lb3V0KHRjKSx0Yz1zZXRUaW1lb3V0KHF0LHQpKSxuYz0wKToobmM9MSxyYyhxdCkpfWZ1bmN0aW9uIEx0KCl7dmFyIG49RGF0ZS5ub3coKTtmb3IoZWM9S2E7ZWM7KW4+PWVjLnQmJihlYy5mPWVjLmMobi1lYy50KSksZWM9ZWMubjtyZXR1cm4gbn1mdW5jdGlvbiBUdCgpe2Zvcih2YXIgbix0PUthLGU9MS8wO3Q7KXQuZj90PW4/bi5uPXQubjpLYT10Lm46KHQudDxlJiYoZT10LnQpLHQ9KG49dCkubik7cmV0dXJuIFFhPW4sZX1mdW5jdGlvbiBSdChuLHQpe3JldHVybiB0LShuP01hdGguY2VpbChNYXRoLmxvZyhuKS9NYXRoLkxOMTApOjEpfWZ1bmN0aW9uIER0KG4sdCl7dmFyIGU9TWF0aC5wb3coMTAsMypnYSg4LXQpKTtyZXR1cm57c2NhbGU6dD44P2Z1bmN0aW9uKG4pe3JldHVybiBuL2V9OmZ1bmN0aW9uKG4pe3JldHVybiBuKmV9LHN5bWJvbDpufX1mdW5jdGlvbiBQdChuKXt2YXIgdD1uLmRlY2ltYWwsZT1uLnRob3VzYW5kcyxyPW4uZ3JvdXBpbmcsdT1uLmN1cnJlbmN5LGk9ciYmZT9mdW5jdGlvbihuLHQpe2Zvcih2YXIgdT1uLmxlbmd0aCxpPVtdLG89MCxhPXJbMF0sYz0wO3U+MCYmYT4wJiYoYythKzE+dCYmKGE9TWF0aC5tYXgoMSx0LWMpKSxpLnB1c2gobi5zdWJzdHJpbmcodS09YSx1K2EpKSwhKChjKz1hKzEpPnQpKTspYT1yW289KG8rMSklci5sZW5ndGhdO3JldHVybiBpLnJldmVyc2UoKS5qb2luKGUpfTp5O3JldHVybiBmdW5jdGlvbihuKXt2YXIgZT1pYy5leGVjKG4pLHI9ZVsxXXx8IiAiLG89ZVsyXXx8Ij4iLGE9ZVszXXx8Ii0iLGM9ZVs0XXx8IiIsbD1lWzVdLHM9K2VbNl0sZj1lWzddLGg9ZVs4XSxnPWVbOV0scD0xLHY9IiIsZD0iIixtPSExLHk9ITA7c3dpdGNoKGgmJihoPStoLnN1YnN0cmluZygxKSksKGx8fCIwIj09PXImJiI9Ij09PW8pJiYobD1yPSIwIixvPSI9IiksZyl7Y2FzZSJuIjpmPSEwLGc9ImciO2JyZWFrO2Nhc2UiJSI6cD0xMDAsZD0iJSIsZz0iZiI7YnJlYWs7Y2FzZSJwIjpwPTEwMCxkPSIlIixnPSJyIjticmVhaztjYXNlImIiOmNhc2UibyI6Y2FzZSJ4IjpjYXNlIlgiOiIjIj09PWMmJih2PSIwIitnLnRvTG93ZXJDYXNlKCkpO2Nhc2UiYyI6eT0hMTtjYXNlImQiOm09ITAsaD0wO2JyZWFrO2Nhc2UicyI6cD0tMSxnPSJyIn0iJCI9PT1jJiYodj11WzBdLGQ9dVsxXSksInIiIT1nfHxofHwoZz0iZyIpLG51bGwhPWgmJigiZyI9PWc/aD1NYXRoLm1heCgxLE1hdGgubWluKDIxLGgpKTooImUiPT1nfHwiZiI9PWcpJiYoaD1NYXRoLm1heCgwLE1hdGgubWluKDIwLGgpKSkpLGc9b2MuZ2V0KGcpfHxVdDt2YXIgTT1sJiZmO3JldHVybiBmdW5jdGlvbihuKXt2YXIgZT1kO2lmKG0mJm4lMSlyZXR1cm4iIjt2YXIgdT0wPm58fDA9PT1uJiYwPjEvbj8obj0tbiwiLSIpOiItIj09PWE/IiI6YTtpZigwPnApe3ZhciBjPXRhLmZvcm1hdFByZWZpeChuLGgpO249Yy5zY2FsZShuKSxlPWMuc3ltYm9sK2R9ZWxzZSBuKj1wO249ZyhuLGgpO3ZhciB4LGIsXz1uLmxhc3RJbmRleE9mKCIuIik7aWYoMD5fKXt2YXIgdz15P24ubGFzdEluZGV4T2YoImUiKTotMTswPnc/KHg9bixiPSIiKTooeD1uLnN1YnN0cmluZygwLHcpLGI9bi5zdWJzdHJpbmcodykpfWVsc2UgeD1uLnN1YnN0cmluZygwLF8pLGI9dCtuLnN1YnN0cmluZyhfKzEpOyFsJiZmJiYoeD1pKHgsMS8wKSk7dmFyIFM9di5sZW5ndGgreC5sZW5ndGgrYi5sZW5ndGgrKE0/MDp1Lmxlbmd0aCksaz1zPlM/bmV3IEFycmF5KFM9cy1TKzEpLmpvaW4ocik6IiI7cmV0dXJuIE0mJih4PWkoayt4LGsubGVuZ3RoP3MtYi5sZW5ndGg6MS8wKSksdSs9dixuPXgrYiwoIjwiPT09bz91K24razoiPiI9PT1vP2srdStuOiJeIj09PW8/ay5zdWJzdHJpbmcoMCxTPj49MSkrdStuK2suc3Vic3RyaW5nKFMpOnUrKE0/bjprK24pKStlfX19ZnVuY3Rpb24gVXQobil7cmV0dXJuIG4rIiJ9ZnVuY3Rpb24ganQoKXt0aGlzLl89bmV3IERhdGUoYXJndW1lbnRzLmxlbmd0aD4xP0RhdGUuVVRDLmFwcGx5KHRoaXMsYXJndW1lbnRzKTphcmd1bWVudHNbMF0pfWZ1bmN0aW9uIEZ0KG4sdCxlKXtmdW5jdGlvbiByKHQpe3ZhciBlPW4odCkscj1pKGUsMSk7cmV0dXJuIHItdD50LWU/ZTpyfWZ1bmN0aW9uIHUoZSl7cmV0dXJuIHQoZT1uKG5ldyBjYyhlLTEpKSwxKSxlfWZ1bmN0aW9uIGkobixlKXtyZXR1cm4gdChuPW5ldyBjYygrbiksZSksbn1mdW5jdGlvbiBvKG4scixpKXt2YXIgbz11KG4pLGE9W107aWYoaT4xKWZvcig7cj5vOyllKG8pJWl8fGEucHVzaChuZXcgRGF0ZSgrbykpLHQobywxKTtlbHNlIGZvcig7cj5vOylhLnB1c2gobmV3IERhdGUoK28pKSx0KG8sMSk7cmV0dXJuIGF9ZnVuY3Rpb24gYShuLHQsZSl7dHJ5e2NjPWp0O3ZhciByPW5ldyBqdDtyZXR1cm4gci5fPW4sbyhyLHQsZSl9ZmluYWxseXtjYz1EYXRlfX1uLmZsb29yPW4sbi5yb3VuZD1yLG4uY2VpbD11LG4ub2Zmc2V0PWksbi5yYW5nZT1vO3ZhciBjPW4udXRjPUh0KG4pO3JldHVybiBjLmZsb29yPWMsYy5yb3VuZD1IdChyKSxjLmNlaWw9SHQodSksYy5vZmZzZXQ9SHQoaSksYy5yYW5nZT1hLG59ZnVuY3Rpb24gSHQobil7cmV0dXJuIGZ1bmN0aW9uKHQsZSl7dHJ5e2NjPWp0O3ZhciByPW5ldyBqdDtyZXR1cm4gci5fPXQsbihyLGUpLl99ZmluYWxseXtjYz1EYXRlfX19ZnVuY3Rpb24gT3Qobil7ZnVuY3Rpb24gdChuKXtmdW5jdGlvbiB0KHQpe2Zvcih2YXIgZSx1LGksbz1bXSxhPS0xLGM9MDsrK2E8cjspMzc9PT1uLmNoYXJDb2RlQXQoYSkmJihvLnB1c2gobi5zbGljZShjLGEpKSxudWxsIT0odT1zY1tlPW4uY2hhckF0KCsrYSldKSYmKGU9bi5jaGFyQXQoKythKSksKGk9TltlXSkmJihlPWkodCxudWxsPT11PyJlIj09PWU/IiAiOiIwIjp1KSksby5wdXNoKGUpLGM9YSsxKTtyZXR1cm4gby5wdXNoKG4uc2xpY2UoYyxhKSksby5qb2luKCIiKX12YXIgcj1uLmxlbmd0aDtyZXR1cm4gdC5wYXJzZT1mdW5jdGlvbih0KXt2YXIgcj17eToxOTAwLG06MCxkOjEsSDowLE06MCxTOjAsTDowLFo6bnVsbH0sdT1lKHIsbix0LDApO2lmKHUhPXQubGVuZ3RoKXJldHVybiBudWxsOyJwImluIHImJihyLkg9ci5IJTEyKzEyKnIucCk7dmFyIGk9bnVsbCE9ci5aJiZjYyE9PWp0LG89bmV3KGk/anQ6Y2MpO3JldHVybiJqImluIHI/by5zZXRGdWxsWWVhcihyLnksMCxyLmopOiJ3ImluIHImJigiVyJpbiByfHwiVSJpbiByKT8oby5zZXRGdWxsWWVhcihyLnksMCwxKSxvLnNldEZ1bGxZZWFyKHIueSwwLCJXImluIHI/KHIudys2KSU3Kzcqci5XLShvLmdldERheSgpKzUpJTc6ci53Kzcqci5VLShvLmdldERheSgpKzYpJTcpKTpvLnNldEZ1bGxZZWFyKHIueSxyLm0sci5kKSxvLnNldEhvdXJzKHIuSCsoci5aLzEwMHwwKSxyLk0rci5aJTEwMCxyLlMsci5MKSxpP28uXzpvfSx0LnRvU3RyaW5nPWZ1bmN0aW9uKCl7cmV0dXJuIG59LHR9ZnVuY3Rpb24gZShuLHQsZSxyKXtmb3IodmFyIHUsaSxvLGE9MCxjPXQubGVuZ3RoLGw9ZS5sZW5ndGg7Yz5hOyl7aWYocj49bClyZXR1cm4tMTtpZih1PXQuY2hhckNvZGVBdChhKyspLDM3PT09dSl7aWYobz10LmNoYXJBdChhKyspLGk9Q1tvIGluIHNjP3QuY2hhckF0KGErKyk6b10sIWl8fChyPWkobixlLHIpKTwwKXJldHVybi0xfWVsc2UgaWYodSE9ZS5jaGFyQ29kZUF0KHIrKykpcmV0dXJuLTF9cmV0dXJuIHJ9ZnVuY3Rpb24gcihuLHQsZSl7Xy5sYXN0SW5kZXg9MDt2YXIgcj1fLmV4ZWModC5zbGljZShlKSk7cmV0dXJuIHI/KG4udz13LmdldChyWzBdLnRvTG93ZXJDYXNlKCkpLGUrclswXS5sZW5ndGgpOi0xfWZ1bmN0aW9uIHUobix0LGUpe3gubGFzdEluZGV4PTA7dmFyIHI9eC5leGVjKHQuc2xpY2UoZSkpO3JldHVybiByPyhuLnc9Yi5nZXQoclswXS50b0xvd2VyQ2FzZSgpKSxlK3JbMF0ubGVuZ3RoKTotMX1mdW5jdGlvbiBpKG4sdCxlKXtFLmxhc3RJbmRleD0wO3ZhciByPUUuZXhlYyh0LnNsaWNlKGUpKTtyZXR1cm4gcj8obi5tPUEuZ2V0KHJbMF0udG9Mb3dlckNhc2UoKSksZStyWzBdLmxlbmd0aCk6LTF9ZnVuY3Rpb24gbyhuLHQsZSl7Uy5sYXN0SW5kZXg9MDt2YXIgcj1TLmV4ZWModC5zbGljZShlKSk7cmV0dXJuIHI/KG4ubT1rLmdldChyWzBdLnRvTG93ZXJDYXNlKCkpLGUrclswXS5sZW5ndGgpOi0xfWZ1bmN0aW9uIGEobix0LHIpe3JldHVybiBlKG4sTi5jLnRvU3RyaW5nKCksdCxyKX1mdW5jdGlvbiBjKG4sdCxyKXtyZXR1cm4gZShuLE4ueC50b1N0cmluZygpLHQscil9ZnVuY3Rpb24gbChuLHQscil7cmV0dXJuIGUobixOLlgudG9TdHJpbmcoKSx0LHIpfWZ1bmN0aW9uIHMobix0LGUpe3ZhciByPU0uZ2V0KHQuc2xpY2UoZSxlKz0yKS50b0xvd2VyQ2FzZSgpKTtyZXR1cm4gbnVsbD09cj8tMToobi5wPXIsZSl9dmFyIGY9bi5kYXRlVGltZSxoPW4uZGF0ZSxnPW4udGltZSxwPW4ucGVyaW9kcyx2PW4uZGF5cyxkPW4uc2hvcnREYXlzLG09bi5tb250aHMseT1uLnNob3J0TW9udGhzO3QudXRjPWZ1bmN0aW9uKG4pe2Z1bmN0aW9uIGUobil7dHJ5e2NjPWp0O3ZhciB0PW5ldyBjYztyZXR1cm4gdC5fPW4scih0KX1maW5hbGx5e2NjPURhdGV9fXZhciByPXQobik7cmV0dXJuIGUucGFyc2U9ZnVuY3Rpb24obil7dHJ5e2NjPWp0O3ZhciB0PXIucGFyc2Uobik7cmV0dXJuIHQmJnQuX31maW5hbGx5e2NjPURhdGV9fSxlLnRvU3RyaW5nPXIudG9TdHJpbmcsZX0sdC5tdWx0aT10LnV0Yy5tdWx0aT1hZTt2YXIgTT10YS5tYXAoKSx4PVl0KHYpLGI9WnQodiksXz1ZdChkKSx3PVp0KGQpLFM9WXQobSksaz1adChtKSxFPVl0KHkpLEE9WnQoeSk7cC5mb3JFYWNoKGZ1bmN0aW9uKG4sdCl7TS5zZXQobi50b0xvd2VyQ2FzZSgpLHQpfSk7dmFyIE49e2E6ZnVuY3Rpb24obil7cmV0dXJuIGRbbi5nZXREYXkoKV19LEE6ZnVuY3Rpb24obil7cmV0dXJuIHZbbi5nZXREYXkoKV19LGI6ZnVuY3Rpb24obil7cmV0dXJuIHlbbi5nZXRNb250aCgpXX0sQjpmdW5jdGlvbihuKXtyZXR1cm4gbVtuLmdldE1vbnRoKCldfSxjOnQoZiksZDpmdW5jdGlvbihuLHQpe3JldHVybiBJdChuLmdldERhdGUoKSx0LDIpfSxlOmZ1bmN0aW9uKG4sdCl7cmV0dXJuIEl0KG4uZ2V0RGF0ZSgpLHQsMil9LEg6ZnVuY3Rpb24obix0KXtyZXR1cm4gSXQobi5nZXRIb3VycygpLHQsMil9LEk6ZnVuY3Rpb24obix0KXtyZXR1cm4gSXQobi5nZXRIb3VycygpJTEyfHwxMix0LDIpfSxqOmZ1bmN0aW9uKG4sdCl7cmV0dXJuIEl0KDErYWMuZGF5T2ZZZWFyKG4pLHQsMyl9LEw6ZnVuY3Rpb24obix0KXtyZXR1cm4gSXQobi5nZXRNaWxsaXNlY29uZHMoKSx0LDMpfSxtOmZ1bmN0aW9uKG4sdCl7cmV0dXJuIEl0KG4uZ2V0TW9udGgoKSsxLHQsMil9LE06ZnVuY3Rpb24obix0KXtyZXR1cm4gSXQobi5nZXRNaW51dGVzKCksdCwyKX0scDpmdW5jdGlvbihuKXtyZXR1cm4gcFsrKG4uZ2V0SG91cnMoKT49MTIpXX0sUzpmdW5jdGlvbihuLHQpe3JldHVybiBJdChuLmdldFNlY29uZHMoKSx0LDIpfSxVOmZ1bmN0aW9uKG4sdCl7cmV0dXJuIEl0KGFjLnN1bmRheU9mWWVhcihuKSx0LDIpfSx3OmZ1bmN0aW9uKG4pe3JldHVybiBuLmdldERheSgpfSxXOmZ1bmN0aW9uKG4sdCl7cmV0dXJuIEl0KGFjLm1vbmRheU9mWWVhcihuKSx0LDIpfSx4OnQoaCksWDp0KGcpLHk6ZnVuY3Rpb24obix0KXtyZXR1cm4gSXQobi5nZXRGdWxsWWVhcigpJTEwMCx0LDIpfSxZOmZ1bmN0aW9uKG4sdCl7cmV0dXJuIEl0KG4uZ2V0RnVsbFllYXIoKSUxZTQsdCw0KX0sWjppZSwiJSI6ZnVuY3Rpb24oKXtyZXR1cm4iJSJ9fSxDPXthOnIsQTp1LGI6aSxCOm8sYzphLGQ6UXQsZTpRdCxIOnRlLEk6dGUsajpuZSxMOnVlLG06S3QsTTplZSxwOnMsUzpyZSxVOlh0LHc6VnQsVzokdCx4OmMsWDpsLHk6V3QsWTpCdCxaOkp0LCIlIjpvZX07cmV0dXJuIHR9ZnVuY3Rpb24gSXQobix0LGUpe3ZhciByPTA+bj8iLSI6IiIsdT0ocj8tbjpuKSsiIixpPXUubGVuZ3RoO3JldHVybiByKyhlPmk/bmV3IEFycmF5KGUtaSsxKS5qb2luKHQpK3U6dSl9ZnVuY3Rpb24gWXQobil7cmV0dXJuIG5ldyBSZWdFeHAoIl4oPzoiK24ubWFwKHRhLnJlcXVvdGUpLmpvaW4oInwiKSsiKSIsImkiKX1mdW5jdGlvbiBadChuKXtmb3IodmFyIHQ9bmV3IGwsZT0tMSxyPW4ubGVuZ3RoOysrZTxyOyl0LnNldChuW2VdLnRvTG93ZXJDYXNlKCksZSk7cmV0dXJuIHR9ZnVuY3Rpb24gVnQobix0LGUpe2ZjLmxhc3RJbmRleD0wO3ZhciByPWZjLmV4ZWModC5zbGljZShlLGUrMSkpO3JldHVybiByPyhuLnc9K3JbMF0sZStyWzBdLmxlbmd0aCk6LTF9ZnVuY3Rpb24gWHQobix0LGUpe2ZjLmxhc3RJbmRleD0wO3ZhciByPWZjLmV4ZWModC5zbGljZShlKSk7cmV0dXJuIHI/KG4uVT0rclswXSxlK3JbMF0ubGVuZ3RoKTotMX1mdW5jdGlvbiAkdChuLHQsZSl7ZmMubGFzdEluZGV4PTA7dmFyIHI9ZmMuZXhlYyh0LnNsaWNlKGUpKTtyZXR1cm4gcj8obi5XPStyWzBdLGUrclswXS5sZW5ndGgpOi0xfWZ1bmN0aW9uIEJ0KG4sdCxlKXtmYy5sYXN0SW5kZXg9MDt2YXIgcj1mYy5leGVjKHQuc2xpY2UoZSxlKzQpKTtyZXR1cm4gcj8obi55PStyWzBdLGUrclswXS5sZW5ndGgpOi0xfWZ1bmN0aW9uIFd0KG4sdCxlKXtmYy5sYXN0SW5kZXg9MDt2YXIgcj1mYy5leGVjKHQuc2xpY2UoZSxlKzIpKTtyZXR1cm4gcj8obi55PUd0KCtyWzBdKSxlK3JbMF0ubGVuZ3RoKTotMX1mdW5jdGlvbiBKdChuLHQsZSl7cmV0dXJuL15bKy1dXGR7NH0kLy50ZXN0KHQ9dC5zbGljZShlLGUrNSkpPyhuLlo9LXQsZSs1KTotMX1mdW5jdGlvbiBHdChuKXtyZXR1cm4gbisobj42OD8xOTAwOjJlMyl9ZnVuY3Rpb24gS3Qobix0LGUpe2ZjLmxhc3RJbmRleD0wO3ZhciByPWZjLmV4ZWModC5zbGljZShlLGUrMikpO3JldHVybiByPyhuLm09clswXS0xLGUrclswXS5sZW5ndGgpOi0xfWZ1bmN0aW9uIFF0KG4sdCxlKXtmYy5sYXN0SW5kZXg9MDt2YXIgcj1mYy5leGVjKHQuc2xpY2UoZSxlKzIpKTtyZXR1cm4gcj8obi5kPStyWzBdLGUrclswXS5sZW5ndGgpOi0xfWZ1bmN0aW9uIG5lKG4sdCxlKXtmYy5sYXN0SW5kZXg9MDt2YXIgcj1mYy5leGVjKHQuc2xpY2UoZSxlKzMpKTtyZXR1cm4gcj8obi5qPStyWzBdLGUrclswXS5sZW5ndGgpOi0xfWZ1bmN0aW9uIHRlKG4sdCxlKXtmYy5sYXN0SW5kZXg9MDt2YXIgcj1mYy5leGVjKHQuc2xpY2UoZSxlKzIpKTtyZXR1cm4gcj8obi5IPStyWzBdLGUrclswXS5sZW5ndGgpOi0xfWZ1bmN0aW9uIGVlKG4sdCxlKXtmYy5sYXN0SW5kZXg9MDt2YXIgcj1mYy5leGVjKHQuc2xpY2UoZSxlKzIpKTtyZXR1cm4gcj8obi5NPStyWzBdLGUrclswXS5sZW5ndGgpOi0xfWZ1bmN0aW9uIHJlKG4sdCxlKXtmYy5sYXN0SW5kZXg9MDt2YXIgcj1mYy5leGVjKHQuc2xpY2UoZSxlKzIpKTtyZXR1cm4gcj8obi5TPStyWzBdLGUrclswXS5sZW5ndGgpOi0xfWZ1bmN0aW9uIHVlKG4sdCxlKXtmYy5sYXN0SW5kZXg9MDt2YXIgcj1mYy5leGVjKHQuc2xpY2UoZSxlKzMpKTtyZXR1cm4gcj8obi5MPStyWzBdLGUrclswXS5sZW5ndGgpOi0xfWZ1bmN0aW9uIGllKG4pe3ZhciB0PW4uZ2V0VGltZXpvbmVPZmZzZXQoKSxlPXQ+MD8iLSI6IisiLHI9Z2EodCkvNjB8MCx1PWdhKHQpJTYwO3JldHVybiBlK0l0KHIsIjAiLDIpK0l0KHUsIjAiLDIpfWZ1bmN0aW9uIG9lKG4sdCxlKXtoYy5sYXN0SW5kZXg9MDt2YXIgcj1oYy5leGVjKHQuc2xpY2UoZSxlKzEpKTtyZXR1cm4gcj9lK3JbMF0ubGVuZ3RoOi0xfWZ1bmN0aW9uIGFlKG4pe2Zvcih2YXIgdD1uLmxlbmd0aCxlPS0xOysrZTx0OyluW2VdWzBdPXRoaXMobltlXVswXSk7cmV0dXJuIGZ1bmN0aW9uKHQpe2Zvcih2YXIgZT0wLHI9bltlXTshclsxXSh0KTspcj1uWysrZV07cmV0dXJuIHJbMF0odCl9fWZ1bmN0aW9uIGNlKCl7fWZ1bmN0aW9uIGxlKG4sdCxlKXt2YXIgcj1lLnM9bit0LHU9ci1uLGk9ci11O2UudD1uLWkrKHQtdSl9ZnVuY3Rpb24gc2Uobix0KXtuJiZkYy5oYXNPd25Qcm9wZXJ0eShuLnR5cGUpJiZkY1tuLnR5cGVdKG4sdCl9ZnVuY3Rpb24gZmUobix0LGUpe3ZhciByLHU9LTEsaT1uLmxlbmd0aC1lO2Zvcih0LmxpbmVTdGFydCgpOysrdTxpOylyPW5bdV0sdC5wb2ludChyWzBdLHJbMV0sclsyXSk7dC5saW5lRW5kKCl9ZnVuY3Rpb24gaGUobix0KXt2YXIgZT0tMSxyPW4ubGVuZ3RoO2Zvcih0LnBvbHlnb25TdGFydCgpOysrZTxyOylmZShuW2VdLHQsMSk7dC5wb2x5Z29uRW5kKCl9ZnVuY3Rpb24gZ2UoKXtmdW5jdGlvbiBuKG4sdCl7bio9RGEsdD10KkRhLzIrcWEvNDt2YXIgZT1uLXIsbz1lPj0wPzE6LTEsYT1vKmUsYz1NYXRoLmNvcyh0KSxsPU1hdGguc2luKHQpLHM9aSpsLGY9dSpjK3MqTWF0aC5jb3MoYSksaD1zKm8qTWF0aC5zaW4oYSk7eWMuYWRkKE1hdGguYXRhbjIoaCxmKSkscj1uLHU9YyxpPWx9dmFyIHQsZSxyLHUsaTtNYy5wb2ludD1mdW5jdGlvbihvLGEpe01jLnBvaW50PW4scj0odD1vKSpEYSx1PU1hdGguY29zKGE9KGU9YSkqRGEvMitxYS80KSxpPU1hdGguc2luKGEpfSxNYy5saW5lRW5kPWZ1bmN0aW9uKCl7bih0LGUpfX1mdW5jdGlvbiBwZShuKXt2YXIgdD1uWzBdLGU9blsxXSxyPU1hdGguY29zKGUpO3JldHVybltyKk1hdGguY29zKHQpLHIqTWF0aC5zaW4odCksTWF0aC5zaW4oZSldfWZ1bmN0aW9uIHZlKG4sdCl7cmV0dXJuIG5bMF0qdFswXStuWzFdKnRbMV0rblsyXSp0WzJdfWZ1bmN0aW9uIGRlKG4sdCl7cmV0dXJuW25bMV0qdFsyXS1uWzJdKnRbMV0sblsyXSp0WzBdLW5bMF0qdFsyXSxuWzBdKnRbMV0tblsxXSp0WzBdXX1mdW5jdGlvbiBtZShuLHQpe25bMF0rPXRbMF0sblsxXSs9dFsxXSxuWzJdKz10WzJdfWZ1bmN0aW9uIHllKG4sdCl7cmV0dXJuW25bMF0qdCxuWzFdKnQsblsyXSp0XX1mdW5jdGlvbiBNZShuKXt2YXIgdD1NYXRoLnNxcnQoblswXSpuWzBdK25bMV0qblsxXStuWzJdKm5bMl0pO25bMF0vPXQsblsxXS89dCxuWzJdLz10fWZ1bmN0aW9uIHhlKG4pe3JldHVybltNYXRoLmF0YW4yKG5bMV0sblswXSksdHQoblsyXSldfWZ1bmN0aW9uIGJlKG4sdCl7cmV0dXJuIGdhKG5bMF0tdFswXSk8Q2EmJmdhKG5bMV0tdFsxXSk8Q2F9ZnVuY3Rpb24gX2Uobix0KXtuKj1EYTt2YXIgZT1NYXRoLmNvcyh0Kj1EYSk7d2UoZSpNYXRoLmNvcyhuKSxlKk1hdGguc2luKG4pLE1hdGguc2luKHQpKX1mdW5jdGlvbiB3ZShuLHQsZSl7Kyt4YyxfYys9KG4tX2MpL3hjLHdjKz0odC13YykveGMsU2MrPShlLVNjKS94Y31mdW5jdGlvbiBTZSgpe2Z1bmN0aW9uIG4obix1KXtuKj1EYTt2YXIgaT1NYXRoLmNvcyh1Kj1EYSksbz1pKk1hdGguY29zKG4pLGE9aSpNYXRoLnNpbihuKSxjPU1hdGguc2luKHUpLGw9TWF0aC5hdGFuMihNYXRoLnNxcnQoKGw9ZSpjLXIqYSkqbCsobD1yKm8tdCpjKSpsKyhsPXQqYS1lKm8pKmwpLHQqbytlKmErcipjKTtiYys9bCxrYys9bCoodCsodD1vKSksRWMrPWwqKGUrKGU9YSkpLEFjKz1sKihyKyhyPWMpKSx3ZSh0LGUscil9dmFyIHQsZSxyO3FjLnBvaW50PWZ1bmN0aW9uKHUsaSl7dSo9RGE7dmFyIG89TWF0aC5jb3MoaSo9RGEpO3Q9bypNYXRoLmNvcyh1KSxlPW8qTWF0aC5zaW4odSkscj1NYXRoLnNpbihpKSxxYy5wb2ludD1uLHdlKHQsZSxyKX19ZnVuY3Rpb24ga2UoKXtxYy5wb2ludD1fZX1mdW5jdGlvbiBFZSgpe2Z1bmN0aW9uIG4obix0KXtuKj1EYTt2YXIgZT1NYXRoLmNvcyh0Kj1EYSksbz1lKk1hdGguY29zKG4pLGE9ZSpNYXRoLnNpbihuKSxjPU1hdGguc2luKHQpLGw9dSpjLWkqYSxzPWkqby1yKmMsZj1yKmEtdSpvLGg9TWF0aC5zcXJ0KGwqbCtzKnMrZipmKSxnPXIqbyt1KmEraSpjLHA9aCYmLW50KGcpL2gsdj1NYXRoLmF0YW4yKGgsZyk7TmMrPXAqbCxDYys9cCpzLHpjKz1wKmYsYmMrPXYsa2MrPXYqKHIrKHI9bykpLEVjKz12Kih1Kyh1PWEpKSxBYys9diooaSsoaT1jKSksd2Uocix1LGkpfXZhciB0LGUscix1LGk7cWMucG9pbnQ9ZnVuY3Rpb24obyxhKXt0PW8sZT1hLHFjLnBvaW50PW4sbyo9RGE7dmFyIGM9TWF0aC5jb3MoYSo9RGEpO3I9YypNYXRoLmNvcyhvKSx1PWMqTWF0aC5zaW4obyksaT1NYXRoLnNpbihhKSx3ZShyLHUsaSl9LHFjLmxpbmVFbmQ9ZnVuY3Rpb24oKXtuKHQsZSkscWMubGluZUVuZD1rZSxxYy5wb2ludD1fZX19ZnVuY3Rpb24gQWUobix0KXtmdW5jdGlvbiBlKGUscil7cmV0dXJuIGU9bihlLHIpLHQoZVswXSxlWzFdKX1yZXR1cm4gbi5pbnZlcnQmJnQuaW52ZXJ0JiYoZS5pbnZlcnQ9ZnVuY3Rpb24oZSxyKXtyZXR1cm4gZT10LmludmVydChlLHIpLGUmJm4uaW52ZXJ0KGVbMF0sZVsxXSl9KSxlfWZ1bmN0aW9uIE5lKCl7cmV0dXJuITB9ZnVuY3Rpb24gQ2Uobix0LGUscix1KXt2YXIgaT1bXSxvPVtdO2lmKG4uZm9yRWFjaChmdW5jdGlvbihuKXtpZighKCh0PW4ubGVuZ3RoLTEpPD0wKSl7dmFyIHQsZT1uWzBdLHI9blt0XTtpZihiZShlLHIpKXt1LmxpbmVTdGFydCgpO2Zvcih2YXIgYT0wO3Q+YTsrK2EpdS5wb2ludCgoZT1uW2FdKVswXSxlWzFdKTtyZXR1cm4gdm9pZCB1LmxpbmVFbmQoKX12YXIgYz1uZXcgcWUoZSxuLG51bGwsITApLGw9bmV3IHFlKGUsbnVsbCxjLCExKTtjLm89bCxpLnB1c2goYyksby5wdXNoKGwpLGM9bmV3IHFlKHIsbixudWxsLCExKSxsPW5ldyBxZShyLG51bGwsYywhMCksYy5vPWwsaS5wdXNoKGMpLG8ucHVzaChsKX19KSxvLnNvcnQodCksemUoaSksemUobyksaS5sZW5ndGgpe2Zvcih2YXIgYT0wLGM9ZSxsPW8ubGVuZ3RoO2w+YTsrK2Epb1thXS5lPWM9IWM7Zm9yKHZhciBzLGYsaD1pWzBdOzspe2Zvcih2YXIgZz1oLHA9ITA7Zy52OylpZigoZz1nLm4pPT09aClyZXR1cm47cz1nLnosdS5saW5lU3RhcnQoKTtkb3tpZihnLnY9Zy5vLnY9ITAsZy5lKXtpZihwKWZvcih2YXIgYT0wLGw9cy5sZW5ndGg7bD5hOysrYSl1LnBvaW50KChmPXNbYV0pWzBdLGZbMV0pO2Vsc2UgcihnLngsZy5uLngsMSx1KTtnPWcubn1lbHNle2lmKHApe3M9Zy5wLno7Zm9yKHZhciBhPXMubGVuZ3RoLTE7YT49MDstLWEpdS5wb2ludCgoZj1zW2FdKVswXSxmWzFdKX1lbHNlIHIoZy54LGcucC54LC0xLHUpO2c9Zy5wfWc9Zy5vLHM9Zy56LHA9IXB9d2hpbGUoIWcudik7dS5saW5lRW5kKCl9fX1mdW5jdGlvbiB6ZShuKXtpZih0PW4ubGVuZ3RoKXtmb3IodmFyIHQsZSxyPTAsdT1uWzBdOysrcjx0Oyl1Lm49ZT1uW3JdLGUucD11LHU9ZTt1Lm49ZT1uWzBdLGUucD11fX1mdW5jdGlvbiBxZShuLHQsZSxyKXt0aGlzLng9bix0aGlzLno9dCx0aGlzLm89ZSx0aGlzLmU9cix0aGlzLnY9ITEsdGhpcy5uPXRoaXMucD1udWxsfWZ1bmN0aW9uIExlKG4sdCxlLHIpe3JldHVybiBmdW5jdGlvbih1LGkpe2Z1bmN0aW9uIG8odCxlKXt2YXIgcj11KHQsZSk7bih0PXJbMF0sZT1yWzFdKSYmaS5wb2ludCh0LGUpfWZ1bmN0aW9uIGEobix0KXt2YXIgZT11KG4sdCk7ZC5wb2ludChlWzBdLGVbMV0pfWZ1bmN0aW9uIGMoKXt5LnBvaW50PWEsZC5saW5lU3RhcnQoKX1mdW5jdGlvbiBsKCl7eS5wb2ludD1vLGQubGluZUVuZCgpfWZ1bmN0aW9uIHMobix0KXt2LnB1c2goW24sdF0pO3ZhciBlPXUobix0KTt4LnBvaW50KGVbMF0sZVsxXSl9ZnVuY3Rpb24gZigpe3gubGluZVN0YXJ0KCksdj1bXX1mdW5jdGlvbiBoKCl7cyh2WzBdWzBdLHZbMF1bMV0pLHgubGluZUVuZCgpO3ZhciBuLHQ9eC5jbGVhbigpLGU9TS5idWZmZXIoKSxyPWUubGVuZ3RoO2lmKHYucG9wKCkscC5wdXNoKHYpLHY9bnVsbCxyKWlmKDEmdCl7bj1lWzBdO3ZhciB1LHI9bi5sZW5ndGgtMSxvPS0xO2lmKHI+MCl7Zm9yKGJ8fChpLnBvbHlnb25TdGFydCgpLGI9ITApLGkubGluZVN0YXJ0KCk7KytvPHI7KWkucG9pbnQoKHU9bltvXSlbMF0sdVsxXSk7aS5saW5lRW5kKCl9fWVsc2Ugcj4xJiYyJnQmJmUucHVzaChlLnBvcCgpLmNvbmNhdChlLnNoaWZ0KCkpKSxnLnB1c2goZS5maWx0ZXIoVGUpKX12YXIgZyxwLHYsZD10KGkpLG09dS5pbnZlcnQoclswXSxyWzFdKSx5PXtwb2ludDpvLGxpbmVTdGFydDpjLGxpbmVFbmQ6bCxwb2x5Z29uU3RhcnQ6ZnVuY3Rpb24oKXt5LnBvaW50PXMseS5saW5lU3RhcnQ9Zix5LmxpbmVFbmQ9aCxnPVtdLHA9W119LHBvbHlnb25FbmQ6ZnVuY3Rpb24oKXt5LnBvaW50PW8seS5saW5lU3RhcnQ9Yyx5LmxpbmVFbmQ9bCxnPXRhLm1lcmdlKGcpO3ZhciBuPUZlKG0scCk7Zy5sZW5ndGg/KGJ8fChpLnBvbHlnb25TdGFydCgpLGI9ITApLENlKGcsRGUsbixlLGkpKTpuJiYoYnx8KGkucG9seWdvblN0YXJ0KCksYj0hMCksaS5saW5lU3RhcnQoKSxlKG51bGwsbnVsbCwxLGkpLGkubGluZUVuZCgpKSxiJiYoaS5wb2x5Z29uRW5kKCksYj0hMSksZz1wPW51bGx9LHNwaGVyZTpmdW5jdGlvbigpe2kucG9seWdvblN0YXJ0KCksaS5saW5lU3RhcnQoKSxlKG51bGwsbnVsbCwxLGkpLGkubGluZUVuZCgpLGkucG9seWdvbkVuZCgpfX0sTT1SZSgpLHg9dChNKSxiPSExO3JldHVybiB5fX1mdW5jdGlvbiBUZShuKXtyZXR1cm4gbi5sZW5ndGg+MX1mdW5jdGlvbiBSZSgpe3ZhciBuLHQ9W107cmV0dXJue2xpbmVTdGFydDpmdW5jdGlvbigpe3QucHVzaChuPVtdKX0scG9pbnQ6ZnVuY3Rpb24odCxlKXtuLnB1c2goW3QsZV0pfSxsaW5lRW5kOmIsYnVmZmVyOmZ1bmN0aW9uKCl7dmFyIGU9dDtyZXR1cm4gdD1bXSxuPW51bGwsZX0scmVqb2luOmZ1bmN0aW9uKCl7dC5sZW5ndGg+MSYmdC5wdXNoKHQucG9wKCkuY29uY2F0KHQuc2hpZnQoKSkpfX19ZnVuY3Rpb24gRGUobix0KXtyZXR1cm4oKG49bi54KVswXTwwP25bMV0tUmEtQ2E6UmEtblsxXSktKCh0PXQueClbMF08MD90WzFdLVJhLUNhOlJhLXRbMV0pfWZ1bmN0aW9uIFBlKG4pe3ZhciB0LGU9MC8wLHI9MC8wLHU9MC8wO3JldHVybntsaW5lU3RhcnQ6ZnVuY3Rpb24oKXtuLmxpbmVTdGFydCgpLHQ9MX0scG9pbnQ6ZnVuY3Rpb24oaSxvKXt2YXIgYT1pPjA/cWE6LXFhLGM9Z2EoaS1lKTtnYShjLXFhKTxDYT8obi5wb2ludChlLHI9KHIrbykvMj4wP1JhOi1SYSksbi5wb2ludCh1LHIpLG4ubGluZUVuZCgpLG4ubGluZVN0YXJ0KCksbi5wb2ludChhLHIpLG4ucG9pbnQoaSxyKSx0PTApOnUhPT1hJiZjPj1xYSYmKGdhKGUtdSk8Q2EmJihlLT11KkNhKSxnYShpLWEpPENhJiYoaS09YSpDYSkscj1VZShlLHIsaSxvKSxuLnBvaW50KHUsciksbi5saW5lRW5kKCksbi5saW5lU3RhcnQoKSxuLnBvaW50KGEsciksdD0wKSxuLnBvaW50KGU9aSxyPW8pLHU9YX0sbGluZUVuZDpmdW5jdGlvbigpe24ubGluZUVuZCgpLGU9cj0wLzB9LGNsZWFuOmZ1bmN0aW9uKCl7cmV0dXJuIDItdH19fWZ1bmN0aW9uIFVlKG4sdCxlLHIpe3ZhciB1LGksbz1NYXRoLnNpbihuLWUpO3JldHVybiBnYShvKT5DYT9NYXRoLmF0YW4oKE1hdGguc2luKHQpKihpPU1hdGguY29zKHIpKSpNYXRoLnNpbihlKS1NYXRoLnNpbihyKSoodT1NYXRoLmNvcyh0KSkqTWF0aC5zaW4obikpLyh1KmkqbykpOih0K3IpLzJ9ZnVuY3Rpb24gamUobix0LGUscil7dmFyIHU7aWYobnVsbD09bil1PWUqUmEsci5wb2ludCgtcWEsdSksci5wb2ludCgwLHUpLHIucG9pbnQocWEsdSksci5wb2ludChxYSwwKSxyLnBvaW50KHFhLC11KSxyLnBvaW50KDAsLXUpLHIucG9pbnQoLXFhLC11KSxyLnBvaW50KC1xYSwwKSxyLnBvaW50KC1xYSx1KTtlbHNlIGlmKGdhKG5bMF0tdFswXSk+Q2Epe3ZhciBpPW5bMF08dFswXT9xYTotcWE7dT1lKmkvMixyLnBvaW50KC1pLHUpLHIucG9pbnQoMCx1KSxyLnBvaW50KGksdSl9ZWxzZSByLnBvaW50KHRbMF0sdFsxXSl9ZnVuY3Rpb24gRmUobix0KXt2YXIgZT1uWzBdLHI9blsxXSx1PVtNYXRoLnNpbihlKSwtTWF0aC5jb3MoZSksMF0saT0wLG89MDt5Yy5yZXNldCgpO2Zvcih2YXIgYT0wLGM9dC5sZW5ndGg7Yz5hOysrYSl7dmFyIGw9dFthXSxzPWwubGVuZ3RoO2lmKHMpZm9yKHZhciBmPWxbMF0saD1mWzBdLGc9ZlsxXS8yK3FhLzQscD1NYXRoLnNpbihnKSx2PU1hdGguY29zKGcpLGQ9MTs7KXtkPT09cyYmKGQ9MCksbj1sW2RdO3ZhciBtPW5bMF0seT1uWzFdLzIrcWEvNCxNPU1hdGguc2luKHkpLHg9TWF0aC5jb3MoeSksYj1tLWgsXz1iPj0wPzE6LTEsdz1fKmIsUz13PnFhLGs9cCpNO2lmKHljLmFkZChNYXRoLmF0YW4yKGsqXypNYXRoLnNpbih3KSx2KngraypNYXRoLmNvcyh3KSkpLGkrPVM/YitfKkxhOmIsU15oPj1lXm0+PWUpe3ZhciBFPWRlKHBlKGYpLHBlKG4pKTtNZShFKTt2YXIgQT1kZSh1LEUpO01lKEEpO3ZhciBOPShTXmI+PTA/LTE6MSkqdHQoQVsyXSk7KHI+Tnx8cj09PU4mJihFWzBdfHxFWzFdKSkmJihvKz1TXmI+PTA/MTotMSl9aWYoIWQrKylicmVhaztoPW0scD1NLHY9eCxmPW59fXJldHVybigtQ2E+aXx8Q2E+aSYmMD55YyleMSZvfWZ1bmN0aW9uIEhlKG4pe2Z1bmN0aW9uIHQobix0KXtyZXR1cm4gTWF0aC5jb3MobikqTWF0aC5jb3ModCk+aX1mdW5jdGlvbiBlKG4pe3ZhciBlLGksYyxsLHM7cmV0dXJue2xpbmVTdGFydDpmdW5jdGlvbigpe2w9Yz0hMSxzPTF9LHBvaW50OmZ1bmN0aW9uKGYsaCl7dmFyIGcscD1bZixoXSx2PXQoZixoKSxkPW8/dj8wOnUoZixoKTp2P3UoZisoMD5mP3FhOi1xYSksaCk6MDtpZighZSYmKGw9Yz12KSYmbi5saW5lU3RhcnQoKSx2IT09YyYmKGc9cihlLHApLChiZShlLGcpfHxiZShwLGcpKSYmKHBbMF0rPUNhLHBbMV0rPUNhLHY9dChwWzBdLHBbMV0pKSksdiE9PWMpcz0wLHY/KG4ubGluZVN0YXJ0KCksZz1yKHAsZSksbi5wb2ludChnWzBdLGdbMV0pKTooZz1yKGUscCksbi5wb2ludChnWzBdLGdbMV0pLG4ubGluZUVuZCgpKSxlPWc7ZWxzZSBpZihhJiZlJiZvXnYpe3ZhciBtO2QmaXx8IShtPXIocCxlLCEwKSl8fChzPTAsbz8obi5saW5lU3RhcnQoKSxuLnBvaW50KG1bMF1bMF0sbVswXVsxXSksbi5wb2ludChtWzFdWzBdLG1bMV1bMV0pLG4ubGluZUVuZCgpKToobi5wb2ludChtWzFdWzBdLG1bMV1bMV0pLG4ubGluZUVuZCgpLG4ubGluZVN0YXJ0KCksbi5wb2ludChtWzBdWzBdLG1bMF1bMV0pKSl9IXZ8fGUmJmJlKGUscCl8fG4ucG9pbnQocFswXSxwWzFdKSxlPXAsYz12LGk9ZH0sbGluZUVuZDpmdW5jdGlvbigpe2MmJm4ubGluZUVuZCgpLGU9bnVsbH0sY2xlYW46ZnVuY3Rpb24oKXtyZXR1cm4gc3wobCYmYyk8PDF9fX1mdW5jdGlvbiByKG4sdCxlKXt2YXIgcj1wZShuKSx1PXBlKHQpLG89WzEsMCwwXSxhPWRlKHIsdSksYz12ZShhLGEpLGw9YVswXSxzPWMtbCpsO2lmKCFzKXJldHVybiFlJiZuO3ZhciBmPWkqYy9zLGg9LWkqbC9zLGc9ZGUobyxhKSxwPXllKG8sZiksdj15ZShhLGgpO21lKHAsdik7dmFyIGQ9ZyxtPXZlKHAsZCkseT12ZShkLGQpLE09bSptLXkqKHZlKHAscCktMSk7aWYoISgwPk0pKXt2YXIgeD1NYXRoLnNxcnQoTSksYj15ZShkLCgtbS14KS95KTtpZihtZShiLHApLGI9eGUoYiksIWUpcmV0dXJuIGI7dmFyIF8sdz1uWzBdLFM9dFswXSxrPW5bMV0sRT10WzFdO3c+UyYmKF89dyx3PVMsUz1fKTt2YXIgQT1TLXcsTj1nYShBLXFhKTxDYSxDPU58fENhPkE7aWYoIU4mJms+RSYmKF89ayxrPUUsRT1fKSxDP04/aytFPjBeYlsxXTwoZ2EoYlswXS13KTxDYT9rOkUpOms8PWJbMV0mJmJbMV08PUU6QT5xYV4odzw9YlswXSYmYlswXTw9Uykpe3ZhciB6PXllKGQsKC1tK3gpL3kpO3JldHVybiBtZSh6LHApLFtiLHhlKHopXX19fWZ1bmN0aW9uIHUodCxlKXt2YXIgcj1vP246cWEtbix1PTA7cmV0dXJuLXI+dD91fD0xOnQ+ciYmKHV8PTIpLC1yPmU/dXw9NDplPnImJih1fD04KSx1fXZhciBpPU1hdGguY29zKG4pLG89aT4wLGE9Z2EoaSk+Q2EsYz1ncihuLDYqRGEpO3JldHVybiBMZSh0LGUsYyxvP1swLC1uXTpbLXFhLG4tcWFdKX1mdW5jdGlvbiBPZShuLHQsZSxyKXtyZXR1cm4gZnVuY3Rpb24odSl7dmFyIGksbz11LmEsYT11LmIsYz1vLngsbD1vLnkscz1hLngsZj1hLnksaD0wLGc9MSxwPXMtYyx2PWYtbDtpZihpPW4tYyxwfHwhKGk+MCkpe2lmKGkvPXAsMD5wKXtpZihoPmkpcmV0dXJuO2c+aSYmKGc9aSl9ZWxzZSBpZihwPjApe2lmKGk+ZylyZXR1cm47aT5oJiYoaD1pKX1pZihpPWUtYyxwfHwhKDA+aSkpe2lmKGkvPXAsMD5wKXtpZihpPmcpcmV0dXJuO2k+aCYmKGg9aSl9ZWxzZSBpZihwPjApe2lmKGg+aSlyZXR1cm47Zz5pJiYoZz1pKX1pZihpPXQtbCx2fHwhKGk+MCkpe2lmKGkvPXYsMD52KXtpZihoPmkpcmV0dXJuO2c+aSYmKGc9aSl9ZWxzZSBpZih2PjApe2lmKGk+ZylyZXR1cm47aT5oJiYoaD1pKX1pZihpPXItbCx2fHwhKDA+aSkpe2lmKGkvPXYsMD52KXtpZihpPmcpcmV0dXJuO2k+aCYmKGg9aSl9ZWxzZSBpZih2PjApe2lmKGg+aSlyZXR1cm47Zz5pJiYoZz1pKX1yZXR1cm4gaD4wJiYodS5hPXt4OmMraCpwLHk6bCtoKnZ9KSwxPmcmJih1LmI9e3g6YytnKnAseTpsK2cqdn0pLHV9fX19fX1mdW5jdGlvbiBJZShuLHQsZSxyKXtmdW5jdGlvbiB1KHIsdSl7cmV0dXJuIGdhKHJbMF0tbik8Q2E/dT4wPzA6MzpnYShyWzBdLWUpPENhP3U+MD8yOjE6Z2EoclsxXS10KTxDYT91PjA/MTowOnU+MD8zOjJ9ZnVuY3Rpb24gaShuLHQpe3JldHVybiBvKG4ueCx0LngpfWZ1bmN0aW9uIG8obix0KXt2YXIgZT11KG4sMSkscj11KHQsMSk7cmV0dXJuIGUhPT1yP2UtcjowPT09ZT90WzFdLW5bMV06MT09PWU/blswXS10WzBdOjI9PT1lP25bMV0tdFsxXTp0WzBdLW5bMF19cmV0dXJuIGZ1bmN0aW9uKGEpe2Z1bmN0aW9uIGMobil7Zm9yKHZhciB0PTAsZT1kLmxlbmd0aCxyPW5bMV0sdT0wO2U+dTsrK3UpZm9yKHZhciBpLG89MSxhPWRbdV0sYz1hLmxlbmd0aCxsPWFbMF07Yz5vOysrbylpPWFbb10sbFsxXTw9cj9pWzFdPnImJlEobCxpLG4pPjAmJisrdDppWzFdPD1yJiZRKGwsaSxuKTwwJiYtLXQsbD1pO3JldHVybiAwIT09dH1mdW5jdGlvbiBsKGksYSxjLGwpe3ZhciBzPTAsZj0wO2lmKG51bGw9PWl8fChzPXUoaSxjKSkhPT0oZj11KGEsYykpfHxvKGksYSk8MF5jPjApe2RvIGwucG9pbnQoMD09PXN8fDM9PT1zP246ZSxzPjE/cjp0KTt3aGlsZSgocz0ocytjKzQpJTQpIT09Zil9ZWxzZSBsLnBvaW50KGFbMF0sYVsxXSl9ZnVuY3Rpb24gcyh1LGkpe3JldHVybiB1Pj1uJiZlPj11JiZpPj10JiZyPj1pfWZ1bmN0aW9uIGYobix0KXtzKG4sdCkmJmEucG9pbnQobix0KX1mdW5jdGlvbiBoKCl7Qy5wb2ludD1wLGQmJmQucHVzaChtPVtdKSxTPSEwLHc9ITEsYj1fPTAvMH1mdW5jdGlvbiBnKCl7diYmKHAoeSxNKSx4JiZ3JiZBLnJlam9pbigpLHYucHVzaChBLmJ1ZmZlcigpKSksQy5wb2ludD1mLHcmJmEubGluZUVuZCgpfWZ1bmN0aW9uIHAobix0KXtuPU1hdGgubWF4KC1UYyxNYXRoLm1pbihUYyxuKSksdD1NYXRoLm1heCgtVGMsTWF0aC5taW4oVGMsdCkpO3ZhciBlPXMobix0KTtpZihkJiZtLnB1c2goW24sdF0pLFMpeT1uLE09dCx4PWUsUz0hMSxlJiYoYS5saW5lU3RhcnQoKSxhLnBvaW50KG4sdCkpO2Vsc2UgaWYoZSYmdylhLnBvaW50KG4sdCk7ZWxzZXt2YXIgcj17YTp7eDpiLHk6X30sYjp7eDpuLHk6dH19O04ocik/KHd8fChhLmxpbmVTdGFydCgpLGEucG9pbnQoci5hLngsci5hLnkpKSxhLnBvaW50KHIuYi54LHIuYi55KSxlfHxhLmxpbmVFbmQoKSxrPSExKTplJiYoYS5saW5lU3RhcnQoKSxhLnBvaW50KG4sdCksaz0hMSl9Yj1uLF89dCx3PWV9dmFyIHYsZCxtLHksTSx4LGIsXyx3LFMsayxFPWEsQT1SZSgpLE49T2Uobix0LGUsciksQz17cG9pbnQ6ZixsaW5lU3RhcnQ6aCxsaW5lRW5kOmcscG9seWdvblN0YXJ0OmZ1bmN0aW9uKCl7YT1BLHY9W10sZD1bXSxrPSEwfSxwb2x5Z29uRW5kOmZ1bmN0aW9uKCl7YT1FLHY9dGEubWVyZ2Uodik7dmFyIHQ9YyhbbixyXSksZT1rJiZ0LHU9di5sZW5ndGg7KGV8fHUpJiYoYS5wb2x5Z29uU3RhcnQoKSxlJiYoYS5saW5lU3RhcnQoKSxsKG51bGwsbnVsbCwxLGEpLGEubGluZUVuZCgpKSx1JiZDZSh2LGksdCxsLGEpLGEucG9seWdvbkVuZCgpKSx2PWQ9bT1udWxsfX07cmV0dXJuIEN9fWZ1bmN0aW9uIFllKG4pe3ZhciB0PTAsZT1xYS8zLHI9aXIobiksdT1yKHQsZSk7cmV0dXJuIHUucGFyYWxsZWxzPWZ1bmN0aW9uKG4pe3JldHVybiBhcmd1bWVudHMubGVuZ3RoP3IodD1uWzBdKnFhLzE4MCxlPW5bMV0qcWEvMTgwKTpbdC9xYSoxODAsZS9xYSoxODBdfSx1fWZ1bmN0aW9uIFplKG4sdCl7ZnVuY3Rpb24gZShuLHQpe3ZhciBlPU1hdGguc3FydChpLTIqdSpNYXRoLnNpbih0KSkvdTtyZXR1cm5bZSpNYXRoLnNpbihuKj11KSxvLWUqTWF0aC5jb3MobildfXZhciByPU1hdGguc2luKG4pLHU9KHIrTWF0aC5zaW4odCkpLzIsaT0xK3IqKDIqdS1yKSxvPU1hdGguc3FydChpKS91O3JldHVybiBlLmludmVydD1mdW5jdGlvbihuLHQpe3ZhciBlPW8tdDtyZXR1cm5bTWF0aC5hdGFuMihuLGUpL3UsdHQoKGktKG4qbitlKmUpKnUqdSkvKDIqdSkpXX0sZX1mdW5jdGlvbiBWZSgpe2Z1bmN0aW9uIG4obix0KXtEYys9dSpuLXIqdCxyPW4sdT10fXZhciB0LGUscix1O0hjLnBvaW50PWZ1bmN0aW9uKGksbyl7SGMucG9pbnQ9bix0PXI9aSxlPXU9b30sSGMubGluZUVuZD1mdW5jdGlvbigpe24odCxlKX19ZnVuY3Rpb24gWGUobix0KXtQYz5uJiYoUGM9biksbj5qYyYmKGpjPW4pLFVjPnQmJihVYz10KSx0PkZjJiYoRmM9dCl9ZnVuY3Rpb24gJGUoKXtmdW5jdGlvbiBuKG4sdCl7by5wdXNoKCJNIixuLCIsIix0LGkpfWZ1bmN0aW9uIHQobix0KXtvLnB1c2goIk0iLG4sIiwiLHQpLGEucG9pbnQ9ZX1mdW5jdGlvbiBlKG4sdCl7by5wdXNoKCJMIixuLCIsIix0KX1mdW5jdGlvbiByKCl7YS5wb2ludD1ufWZ1bmN0aW9uIHUoKXtvLnB1c2goIloiKX12YXIgaT1CZSg0LjUpLG89W10sYT17cG9pbnQ6bixsaW5lU3RhcnQ6ZnVuY3Rpb24oKXthLnBvaW50PXR9LGxpbmVFbmQ6cixwb2x5Z29uU3RhcnQ6ZnVuY3Rpb24oKXthLmxpbmVFbmQ9dX0scG9seWdvbkVuZDpmdW5jdGlvbigpe2EubGluZUVuZD1yLGEucG9pbnQ9bn0scG9pbnRSYWRpdXM6ZnVuY3Rpb24obil7cmV0dXJuIGk9QmUobiksYX0scmVzdWx0OmZ1bmN0aW9uKCl7aWYoby5sZW5ndGgpe3ZhciBuPW8uam9pbigiIik7cmV0dXJuIG89W10sbn19fTtyZXR1cm4gYX1mdW5jdGlvbiBCZShuKXtyZXR1cm4ibTAsIituKyJhIituKyIsIituKyIgMCAxLDEgMCwiKy0yKm4rImEiK24rIiwiK24rIiAwIDEsMSAwLCIrMipuKyJ6In1mdW5jdGlvbiBXZShuLHQpe19jKz1uLHdjKz10LCsrU2N9ZnVuY3Rpb24gSmUoKXtmdW5jdGlvbiBuKG4scil7dmFyIHU9bi10LGk9ci1lLG89TWF0aC5zcXJ0KHUqdStpKmkpO2tjKz1vKih0K24pLzIsRWMrPW8qKGUrcikvMixBYys9byxXZSh0PW4sZT1yKX12YXIgdCxlO0ljLnBvaW50PWZ1bmN0aW9uKHIsdSl7SWMucG9pbnQ9bixXZSh0PXIsZT11KX19ZnVuY3Rpb24gR2UoKXtJYy5wb2ludD1XZX1mdW5jdGlvbiBLZSgpe2Z1bmN0aW9uIG4obix0KXt2YXIgZT1uLXIsaT10LXUsbz1NYXRoLnNxcnQoZSplK2kqaSk7a2MrPW8qKHIrbikvMixFYys9byoodSt0KS8yLEFjKz1vLG89dSpuLXIqdCxOYys9byoocituKSxDYys9byoodSt0KSx6Yys9MypvLFdlKHI9bix1PXQpfXZhciB0LGUscix1O0ljLnBvaW50PWZ1bmN0aW9uKGksbyl7SWMucG9pbnQ9bixXZSh0PXI9aSxlPXU9byl9LEljLmxpbmVFbmQ9ZnVuY3Rpb24oKXtuKHQsZSl9fWZ1bmN0aW9uIFFlKG4pe2Z1bmN0aW9uIHQodCxlKXtuLm1vdmVUbyh0K28sZSksbi5hcmModCxlLG8sMCxMYSl9ZnVuY3Rpb24gZSh0LGUpe24ubW92ZVRvKHQsZSksYS5wb2ludD1yfWZ1bmN0aW9uIHIodCxlKXtuLmxpbmVUbyh0LGUpfWZ1bmN0aW9uIHUoKXthLnBvaW50PXR9ZnVuY3Rpb24gaSgpe24uY2xvc2VQYXRoKCl9dmFyIG89NC41LGE9e3BvaW50OnQsbGluZVN0YXJ0OmZ1bmN0aW9uKCl7YS5wb2ludD1lfSxsaW5lRW5kOnUscG9seWdvblN0YXJ0OmZ1bmN0aW9uKCl7YS5saW5lRW5kPWl9LHBvbHlnb25FbmQ6ZnVuY3Rpb24oKXthLmxpbmVFbmQ9dSxhLnBvaW50PXR9LHBvaW50UmFkaXVzOmZ1bmN0aW9uKG4pe3JldHVybiBvPW4sYX0scmVzdWx0OmJ9O3JldHVybiBhfWZ1bmN0aW9uIG5yKG4pe2Z1bmN0aW9uIHQobil7cmV0dXJuKGE/cjplKShuKX1mdW5jdGlvbiBlKHQpe3JldHVybiBycih0LGZ1bmN0aW9uKGUscil7ZT1uKGUsciksdC5wb2ludChlWzBdLGVbMV0pfSl9ZnVuY3Rpb24gcih0KXtmdW5jdGlvbiBlKGUscil7ZT1uKGUsciksdC5wb2ludChlWzBdLGVbMV0pfWZ1bmN0aW9uIHIoKXtNPTAvMCxTLnBvaW50PWksdC5saW5lU3RhcnQoKX1mdW5jdGlvbiBpKGUscil7dmFyIGk9cGUoW2Uscl0pLG89bihlLHIpO3UoTSx4LHksYixfLHcsTT1vWzBdLHg9b1sxXSx5PWUsYj1pWzBdLF89aVsxXSx3PWlbMl0sYSx0KSx0LnBvaW50KE0seCl9ZnVuY3Rpb24gbygpe1MucG9pbnQ9ZSx0LmxpbmVFbmQoKX1mdW5jdGlvbiBjKCl7cigpLFMucG9pbnQ9bCxTLmxpbmVFbmQ9c31mdW5jdGlvbiBsKG4sdCl7aShmPW4saD10KSxnPU0scD14LHY9YixkPV8sbT13LFMucG9pbnQ9aX1mdW5jdGlvbiBzKCl7dShNLHgseSxiLF8sdyxnLHAsZix2LGQsbSxhLHQpLFMubGluZUVuZD1vLG8oKX12YXIgZixoLGcscCx2LGQsbSx5LE0seCxiLF8sdyxTPXtwb2ludDplLGxpbmVTdGFydDpyLGxpbmVFbmQ6byxwb2x5Z29uU3RhcnQ6ZnVuY3Rpb24oKXt0LnBvbHlnb25TdGFydCgpLFMubGluZVN0YXJ0PWMNCn0scG9seWdvbkVuZDpmdW5jdGlvbigpe3QucG9seWdvbkVuZCgpLFMubGluZVN0YXJ0PXJ9fTtyZXR1cm4gU31mdW5jdGlvbiB1KHQsZSxyLGEsYyxsLHMsZixoLGcscCx2LGQsbSl7dmFyIHk9cy10LE09Zi1lLHg9eSp5K00qTTtpZih4PjQqaSYmZC0tKXt2YXIgYj1hK2csXz1jK3Asdz1sK3YsUz1NYXRoLnNxcnQoYipiK18qXyt3KncpLGs9TWF0aC5hc2luKHcvPVMpLEU9Z2EoZ2EodyktMSk8Q2F8fGdhKHItaCk8Q2E/KHIraCkvMjpNYXRoLmF0YW4yKF8sYiksQT1uKEUsayksTj1BWzBdLEM9QVsxXSx6PU4tdCxxPUMtZSxMPU0qei15KnE7KEwqTC94Pml8fGdhKCh5KnorTSpxKS94LS41KT4uM3x8bz5hKmcrYypwK2wqdikmJih1KHQsZSxyLGEsYyxsLE4sQyxFLGIvPVMsXy89Uyx3LGQsbSksbS5wb2ludChOLEMpLHUoTixDLEUsYixfLHcscyxmLGgsZyxwLHYsZCxtKSl9fXZhciBpPS41LG89TWF0aC5jb3MoMzAqRGEpLGE9MTY7cmV0dXJuIHQucHJlY2lzaW9uPWZ1bmN0aW9uKG4pe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhhPShpPW4qbik+MCYmMTYsdCk6TWF0aC5zcXJ0KGkpfSx0fWZ1bmN0aW9uIHRyKG4pe3ZhciB0PW5yKGZ1bmN0aW9uKHQsZSl7cmV0dXJuIG4oW3QqUGEsZSpQYV0pfSk7cmV0dXJuIGZ1bmN0aW9uKG4pe3JldHVybiBvcih0KG4pKX19ZnVuY3Rpb24gZXIobil7dGhpcy5zdHJlYW09bn1mdW5jdGlvbiBycihuLHQpe3JldHVybntwb2ludDp0LHNwaGVyZTpmdW5jdGlvbigpe24uc3BoZXJlKCl9LGxpbmVTdGFydDpmdW5jdGlvbigpe24ubGluZVN0YXJ0KCl9LGxpbmVFbmQ6ZnVuY3Rpb24oKXtuLmxpbmVFbmQoKX0scG9seWdvblN0YXJ0OmZ1bmN0aW9uKCl7bi5wb2x5Z29uU3RhcnQoKX0scG9seWdvbkVuZDpmdW5jdGlvbigpe24ucG9seWdvbkVuZCgpfX19ZnVuY3Rpb24gdXIobil7cmV0dXJuIGlyKGZ1bmN0aW9uKCl7cmV0dXJuIG59KSgpfWZ1bmN0aW9uIGlyKG4pe2Z1bmN0aW9uIHQobil7cmV0dXJuIG49YShuWzBdKkRhLG5bMV0qRGEpLFtuWzBdKmgrYyxsLW5bMV0qaF19ZnVuY3Rpb24gZShuKXtyZXR1cm4gbj1hLmludmVydCgoblswXS1jKS9oLChsLW5bMV0pL2gpLG4mJltuWzBdKlBhLG5bMV0qUGFdfWZ1bmN0aW9uIHIoKXthPUFlKG89bHIobSxNLHgpLGkpO3ZhciBuPWkodixkKTtyZXR1cm4gYz1nLW5bMF0qaCxsPXArblsxXSpoLHUoKX1mdW5jdGlvbiB1KCl7cmV0dXJuIHMmJihzLnZhbGlkPSExLHM9bnVsbCksdH12YXIgaSxvLGEsYyxsLHMsZj1ucihmdW5jdGlvbihuLHQpe3JldHVybiBuPWkobix0KSxbblswXSpoK2MsbC1uWzFdKmhdfSksaD0xNTAsZz00ODAscD0yNTAsdj0wLGQ9MCxtPTAsTT0wLHg9MCxiPUxjLF89eSx3PW51bGwsUz1udWxsO3JldHVybiB0LnN0cmVhbT1mdW5jdGlvbihuKXtyZXR1cm4gcyYmKHMudmFsaWQ9ITEpLHM9b3IoYihvLGYoXyhuKSkpKSxzLnZhbGlkPSEwLHN9LHQuY2xpcEFuZ2xlPWZ1bmN0aW9uKG4pe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhiPW51bGw9PW4/KHc9bixMYyk6SGUoKHc9K24pKkRhKSx1KCkpOnd9LHQuY2xpcEV4dGVudD1mdW5jdGlvbihuKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oUz1uLF89bj9JZShuWzBdWzBdLG5bMF1bMV0sblsxXVswXSxuWzFdWzFdKTp5LHUoKSk6U30sdC5zY2FsZT1mdW5jdGlvbihuKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oaD0rbixyKCkpOmh9LHQudHJhbnNsYXRlPWZ1bmN0aW9uKG4pe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhnPStuWzBdLHA9K25bMV0scigpKTpbZyxwXX0sdC5jZW50ZXI9ZnVuY3Rpb24obil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHY9blswXSUzNjAqRGEsZD1uWzFdJTM2MCpEYSxyKCkpOlt2KlBhLGQqUGFdfSx0LnJvdGF0ZT1mdW5jdGlvbihuKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obT1uWzBdJTM2MCpEYSxNPW5bMV0lMzYwKkRhLHg9bi5sZW5ndGg+Mj9uWzJdJTM2MCpEYTowLHIoKSk6W20qUGEsTSpQYSx4KlBhXX0sdGEucmViaW5kKHQsZiwicHJlY2lzaW9uIiksZnVuY3Rpb24oKXtyZXR1cm4gaT1uLmFwcGx5KHRoaXMsYXJndW1lbnRzKSx0LmludmVydD1pLmludmVydCYmZSxyKCl9fWZ1bmN0aW9uIG9yKG4pe3JldHVybiBycihuLGZ1bmN0aW9uKHQsZSl7bi5wb2ludCh0KkRhLGUqRGEpfSl9ZnVuY3Rpb24gYXIobix0KXtyZXR1cm5bbix0XX1mdW5jdGlvbiBjcihuLHQpe3JldHVybltuPnFhP24tTGE6LXFhPm4/bitMYTpuLHRdfWZ1bmN0aW9uIGxyKG4sdCxlKXtyZXR1cm4gbj90fHxlP0FlKGZyKG4pLGhyKHQsZSkpOmZyKG4pOnR8fGU/aHIodCxlKTpjcn1mdW5jdGlvbiBzcihuKXtyZXR1cm4gZnVuY3Rpb24odCxlKXtyZXR1cm4gdCs9bixbdD5xYT90LUxhOi1xYT50P3QrTGE6dCxlXX19ZnVuY3Rpb24gZnIobil7dmFyIHQ9c3Iobik7cmV0dXJuIHQuaW52ZXJ0PXNyKC1uKSx0fWZ1bmN0aW9uIGhyKG4sdCl7ZnVuY3Rpb24gZShuLHQpe3ZhciBlPU1hdGguY29zKHQpLGE9TWF0aC5jb3MobikqZSxjPU1hdGguc2luKG4pKmUsbD1NYXRoLnNpbih0KSxzPWwqcithKnU7cmV0dXJuW01hdGguYXRhbjIoYyppLXMqbyxhKnItbCp1KSx0dChzKmkrYypvKV19dmFyIHI9TWF0aC5jb3MobiksdT1NYXRoLnNpbihuKSxpPU1hdGguY29zKHQpLG89TWF0aC5zaW4odCk7cmV0dXJuIGUuaW52ZXJ0PWZ1bmN0aW9uKG4sdCl7dmFyIGU9TWF0aC5jb3ModCksYT1NYXRoLmNvcyhuKSplLGM9TWF0aC5zaW4obikqZSxsPU1hdGguc2luKHQpLHM9bCppLWMqbztyZXR1cm5bTWF0aC5hdGFuMihjKmkrbCpvLGEqcitzKnUpLHR0KHMqci1hKnUpXX0sZX1mdW5jdGlvbiBncihuLHQpe3ZhciBlPU1hdGguY29zKG4pLHI9TWF0aC5zaW4obik7cmV0dXJuIGZ1bmN0aW9uKHUsaSxvLGEpe3ZhciBjPW8qdDtudWxsIT11Pyh1PXByKGUsdSksaT1wcihlLGkpLChvPjA/aT51OnU+aSkmJih1Kz1vKkxhKSk6KHU9bitvKkxhLGk9bi0uNSpjKTtmb3IodmFyIGwscz11O28+MD9zPmk6aT5zO3MtPWMpYS5wb2ludCgobD14ZShbZSwtcipNYXRoLmNvcyhzKSwtcipNYXRoLnNpbihzKV0pKVswXSxsWzFdKX19ZnVuY3Rpb24gcHIobix0KXt2YXIgZT1wZSh0KTtlWzBdLT1uLE1lKGUpO3ZhciByPW50KC1lWzFdKTtyZXR1cm4oKC1lWzJdPDA/LXI6cikrMipNYXRoLlBJLUNhKSUoMipNYXRoLlBJKX1mdW5jdGlvbiB2cihuLHQsZSl7dmFyIHI9dGEucmFuZ2Uobix0LUNhLGUpLmNvbmNhdCh0KTtyZXR1cm4gZnVuY3Rpb24obil7cmV0dXJuIHIubWFwKGZ1bmN0aW9uKHQpe3JldHVybltuLHRdfSl9fWZ1bmN0aW9uIGRyKG4sdCxlKXt2YXIgcj10YS5yYW5nZShuLHQtQ2EsZSkuY29uY2F0KHQpO3JldHVybiBmdW5jdGlvbihuKXtyZXR1cm4gci5tYXAoZnVuY3Rpb24odCl7cmV0dXJuW3Qsbl19KX19ZnVuY3Rpb24gbXIobil7cmV0dXJuIG4uc291cmNlfWZ1bmN0aW9uIHlyKG4pe3JldHVybiBuLnRhcmdldH1mdW5jdGlvbiBNcihuLHQsZSxyKXt2YXIgdT1NYXRoLmNvcyh0KSxpPU1hdGguc2luKHQpLG89TWF0aC5jb3MociksYT1NYXRoLnNpbihyKSxjPXUqTWF0aC5jb3MobiksbD11Kk1hdGguc2luKG4pLHM9bypNYXRoLmNvcyhlKSxmPW8qTWF0aC5zaW4oZSksaD0yKk1hdGguYXNpbihNYXRoLnNxcnQoaXQoci10KSt1Km8qaXQoZS1uKSkpLGc9MS9NYXRoLnNpbihoKSxwPWg/ZnVuY3Rpb24obil7dmFyIHQ9TWF0aC5zaW4obio9aCkqZyxlPU1hdGguc2luKGgtbikqZyxyPWUqYyt0KnMsdT1lKmwrdCpmLG89ZSppK3QqYTtyZXR1cm5bTWF0aC5hdGFuMih1LHIpKlBhLE1hdGguYXRhbjIobyxNYXRoLnNxcnQocipyK3UqdSkpKlBhXX06ZnVuY3Rpb24oKXtyZXR1cm5bbipQYSx0KlBhXX07cmV0dXJuIHAuZGlzdGFuY2U9aCxwfWZ1bmN0aW9uIHhyKCl7ZnVuY3Rpb24gbihuLHUpe3ZhciBpPU1hdGguc2luKHUqPURhKSxvPU1hdGguY29zKHUpLGE9Z2EoKG4qPURhKS10KSxjPU1hdGguY29zKGEpO1ljKz1NYXRoLmF0YW4yKE1hdGguc3FydCgoYT1vKk1hdGguc2luKGEpKSphKyhhPXIqaS1lKm8qYykqYSksZSppK3IqbypjKSx0PW4sZT1pLHI9b312YXIgdCxlLHI7WmMucG9pbnQ9ZnVuY3Rpb24odSxpKXt0PXUqRGEsZT1NYXRoLnNpbihpKj1EYSkscj1NYXRoLmNvcyhpKSxaYy5wb2ludD1ufSxaYy5saW5lRW5kPWZ1bmN0aW9uKCl7WmMucG9pbnQ9WmMubGluZUVuZD1ifX1mdW5jdGlvbiBicihuLHQpe2Z1bmN0aW9uIGUodCxlKXt2YXIgcj1NYXRoLmNvcyh0KSx1PU1hdGguY29zKGUpLGk9bihyKnUpO3JldHVybltpKnUqTWF0aC5zaW4odCksaSpNYXRoLnNpbihlKV19cmV0dXJuIGUuaW52ZXJ0PWZ1bmN0aW9uKG4sZSl7dmFyIHI9TWF0aC5zcXJ0KG4qbitlKmUpLHU9dChyKSxpPU1hdGguc2luKHUpLG89TWF0aC5jb3ModSk7cmV0dXJuW01hdGguYXRhbjIobippLHIqbyksTWF0aC5hc2luKHImJmUqaS9yKV19LGV9ZnVuY3Rpb24gX3Iobix0KXtmdW5jdGlvbiBlKG4sdCl7bz4wPy1SYStDYT50JiYodD0tUmErQ2EpOnQ+UmEtQ2EmJih0PVJhLUNhKTt2YXIgZT1vL01hdGgucG93KHUodCksaSk7cmV0dXJuW2UqTWF0aC5zaW4oaSpuKSxvLWUqTWF0aC5jb3MoaSpuKV19dmFyIHI9TWF0aC5jb3MobiksdT1mdW5jdGlvbihuKXtyZXR1cm4gTWF0aC50YW4ocWEvNCtuLzIpfSxpPW49PT10P01hdGguc2luKG4pOk1hdGgubG9nKHIvTWF0aC5jb3ModCkpL01hdGgubG9nKHUodCkvdShuKSksbz1yKk1hdGgucG93KHUobiksaSkvaTtyZXR1cm4gaT8oZS5pbnZlcnQ9ZnVuY3Rpb24obix0KXt2YXIgZT1vLXQscj1LKGkpKk1hdGguc3FydChuKm4rZSplKTtyZXR1cm5bTWF0aC5hdGFuMihuLGUpL2ksMipNYXRoLmF0YW4oTWF0aC5wb3coby9yLDEvaSkpLVJhXX0sZSk6U3J9ZnVuY3Rpb24gd3Iobix0KXtmdW5jdGlvbiBlKG4sdCl7dmFyIGU9aS10O3JldHVybltlKk1hdGguc2luKHUqbiksaS1lKk1hdGguY29zKHUqbildfXZhciByPU1hdGguY29zKG4pLHU9bj09PXQ/TWF0aC5zaW4obik6KHItTWF0aC5jb3ModCkpLyh0LW4pLGk9ci91K247cmV0dXJuIGdhKHUpPENhP2FyOihlLmludmVydD1mdW5jdGlvbihuLHQpe3ZhciBlPWktdDtyZXR1cm5bTWF0aC5hdGFuMihuLGUpL3UsaS1LKHUpKk1hdGguc3FydChuKm4rZSplKV19LGUpfWZ1bmN0aW9uIFNyKG4sdCl7cmV0dXJuW24sTWF0aC5sb2coTWF0aC50YW4ocWEvNCt0LzIpKV19ZnVuY3Rpb24ga3Iobil7dmFyIHQsZT11cihuKSxyPWUuc2NhbGUsdT1lLnRyYW5zbGF0ZSxpPWUuY2xpcEV4dGVudDtyZXR1cm4gZS5zY2FsZT1mdW5jdGlvbigpe3ZhciBuPXIuYXBwbHkoZSxhcmd1bWVudHMpO3JldHVybiBuPT09ZT90P2UuY2xpcEV4dGVudChudWxsKTplOm59LGUudHJhbnNsYXRlPWZ1bmN0aW9uKCl7dmFyIG49dS5hcHBseShlLGFyZ3VtZW50cyk7cmV0dXJuIG49PT1lP3Q/ZS5jbGlwRXh0ZW50KG51bGwpOmU6bn0sZS5jbGlwRXh0ZW50PWZ1bmN0aW9uKG4pe3ZhciBvPWkuYXBwbHkoZSxhcmd1bWVudHMpO2lmKG89PT1lKXtpZih0PW51bGw9PW4pe3ZhciBhPXFhKnIoKSxjPXUoKTtpKFtbY1swXS1hLGNbMV0tYV0sW2NbMF0rYSxjWzFdK2FdXSl9fWVsc2UgdCYmKG89bnVsbCk7cmV0dXJuIG99LGUuY2xpcEV4dGVudChudWxsKX1mdW5jdGlvbiBFcihuLHQpe3JldHVybltNYXRoLmxvZyhNYXRoLnRhbihxYS80K3QvMikpLC1uXX1mdW5jdGlvbiBBcihuKXtyZXR1cm4gblswXX1mdW5jdGlvbiBOcihuKXtyZXR1cm4gblsxXX1mdW5jdGlvbiBDcihuKXtmb3IodmFyIHQ9bi5sZW5ndGgsZT1bMCwxXSxyPTIsdT0yO3Q+dTt1Kyspe2Zvcig7cj4xJiZRKG5bZVtyLTJdXSxuW2Vbci0xXV0sblt1XSk8PTA7KS0tcjtlW3IrK109dX1yZXR1cm4gZS5zbGljZSgwLHIpfWZ1bmN0aW9uIHpyKG4sdCl7cmV0dXJuIG5bMF0tdFswXXx8blsxXS10WzFdfWZ1bmN0aW9uIHFyKG4sdCxlKXtyZXR1cm4oZVswXS10WzBdKSooblsxXS10WzFdKTwoZVsxXS10WzFdKSooblswXS10WzBdKX1mdW5jdGlvbiBMcihuLHQsZSxyKXt2YXIgdT1uWzBdLGk9ZVswXSxvPXRbMF0tdSxhPXJbMF0taSxjPW5bMV0sbD1lWzFdLHM9dFsxXS1jLGY9clsxXS1sLGg9KGEqKGMtbCktZioodS1pKSkvKGYqby1hKnMpO3JldHVyblt1K2gqbyxjK2gqc119ZnVuY3Rpb24gVHIobil7dmFyIHQ9blswXSxlPW5bbi5sZW5ndGgtMV07cmV0dXJuISh0WzBdLWVbMF18fHRbMV0tZVsxXSl9ZnVuY3Rpb24gUnIoKXt0dSh0aGlzKSx0aGlzLmVkZ2U9dGhpcy5zaXRlPXRoaXMuY2lyY2xlPW51bGx9ZnVuY3Rpb24gRHIobil7dmFyIHQ9ZWwucG9wKCl8fG5ldyBScjtyZXR1cm4gdC5zaXRlPW4sdH1mdW5jdGlvbiBQcihuKXtYcihuKSxRYy5yZW1vdmUobiksZWwucHVzaChuKSx0dShuKX1mdW5jdGlvbiBVcihuKXt2YXIgdD1uLmNpcmNsZSxlPXQueCxyPXQuY3ksdT17eDplLHk6cn0saT1uLlAsbz1uLk4sYT1bbl07UHIobik7Zm9yKHZhciBjPWk7Yy5jaXJjbGUmJmdhKGUtYy5jaXJjbGUueCk8Q2EmJmdhKHItYy5jaXJjbGUuY3kpPENhOylpPWMuUCxhLnVuc2hpZnQoYyksUHIoYyksYz1pO2EudW5zaGlmdChjKSxYcihjKTtmb3IodmFyIGw9bztsLmNpcmNsZSYmZ2EoZS1sLmNpcmNsZS54KTxDYSYmZ2Eoci1sLmNpcmNsZS5jeSk8Q2E7KW89bC5OLGEucHVzaChsKSxQcihsKSxsPW87YS5wdXNoKGwpLFhyKGwpO3ZhciBzLGY9YS5sZW5ndGg7Zm9yKHM9MTtmPnM7KytzKWw9YVtzXSxjPWFbcy0xXSxLcihsLmVkZ2UsYy5zaXRlLGwuc2l0ZSx1KTtjPWFbMF0sbD1hW2YtMV0sbC5lZGdlPUpyKGMuc2l0ZSxsLnNpdGUsbnVsbCx1KSxWcihjKSxWcihsKX1mdW5jdGlvbiBqcihuKXtmb3IodmFyIHQsZSxyLHUsaT1uLngsbz1uLnksYT1RYy5fO2E7KWlmKHI9RnIoYSxvKS1pLHI+Q2EpYT1hLkw7ZWxzZXtpZih1PWktSHIoYSxvKSwhKHU+Q2EpKXtyPi1DYT8odD1hLlAsZT1hKTp1Pi1DYT8odD1hLGU9YS5OKTp0PWU9YTticmVha31pZighYS5SKXt0PWE7YnJlYWt9YT1hLlJ9dmFyIGM9RHIobik7aWYoUWMuaW5zZXJ0KHQsYyksdHx8ZSl7aWYodD09PWUpcmV0dXJuIFhyKHQpLGU9RHIodC5zaXRlKSxRYy5pbnNlcnQoYyxlKSxjLmVkZ2U9ZS5lZGdlPUpyKHQuc2l0ZSxjLnNpdGUpLFZyKHQpLHZvaWQgVnIoZSk7aWYoIWUpcmV0dXJuIHZvaWQoYy5lZGdlPUpyKHQuc2l0ZSxjLnNpdGUpKTtYcih0KSxYcihlKTt2YXIgbD10LnNpdGUscz1sLngsZj1sLnksaD1uLngtcyxnPW4ueS1mLHA9ZS5zaXRlLHY9cC54LXMsZD1wLnktZixtPTIqKGgqZC1nKnYpLHk9aCpoK2cqZyxNPXYqditkKmQseD17eDooZCp5LWcqTSkvbStzLHk6KGgqTS12KnkpL20rZn07S3IoZS5lZGdlLGwscCx4KSxjLmVkZ2U9SnIobCxuLG51bGwseCksZS5lZGdlPUpyKG4scCxudWxsLHgpLFZyKHQpLFZyKGUpfX1mdW5jdGlvbiBGcihuLHQpe3ZhciBlPW4uc2l0ZSxyPWUueCx1PWUueSxpPXUtdDtpZighaSlyZXR1cm4gcjt2YXIgbz1uLlA7aWYoIW8pcmV0dXJuLTEvMDtlPW8uc2l0ZTt2YXIgYT1lLngsYz1lLnksbD1jLXQ7aWYoIWwpcmV0dXJuIGE7dmFyIHM9YS1yLGY9MS9pLTEvbCxoPXMvbDtyZXR1cm4gZj8oLWgrTWF0aC5zcXJ0KGgqaC0yKmYqKHMqcy8oLTIqbCktYytsLzIrdS1pLzIpKSkvZityOihyK2EpLzJ9ZnVuY3Rpb24gSHIobix0KXt2YXIgZT1uLk47aWYoZSlyZXR1cm4gRnIoZSx0KTt2YXIgcj1uLnNpdGU7cmV0dXJuIHIueT09PXQ/ci54OjEvMH1mdW5jdGlvbiBPcihuKXt0aGlzLnNpdGU9bix0aGlzLmVkZ2VzPVtdfWZ1bmN0aW9uIElyKG4pe2Zvcih2YXIgdCxlLHIsdSxpLG8sYSxjLGwscyxmPW5bMF1bMF0saD1uWzFdWzBdLGc9blswXVsxXSxwPW5bMV1bMV0sdj1LYyxkPXYubGVuZ3RoO2QtLTspaWYoaT12W2RdLGkmJmkucHJlcGFyZSgpKWZvcihhPWkuZWRnZXMsYz1hLmxlbmd0aCxvPTA7Yz5vOylzPWFbb10uZW5kKCkscj1zLngsdT1zLnksbD1hWysrbyVjXS5zdGFydCgpLHQ9bC54LGU9bC55LChnYShyLXQpPkNhfHxnYSh1LWUpPkNhKSYmKGEuc3BsaWNlKG8sMCxuZXcgUXIoR3IoaS5zaXRlLHMsZ2Eoci1mKTxDYSYmcC11PkNhP3t4OmYseTpnYSh0LWYpPENhP2U6cH06Z2EodS1wKTxDYSYmaC1yPkNhP3t4OmdhKGUtcCk8Q2E/dDpoLHk6cH06Z2Eoci1oKTxDYSYmdS1nPkNhP3t4OmgseTpnYSh0LWgpPENhP2U6Z306Z2EodS1nKTxDYSYmci1mPkNhP3t4OmdhKGUtZyk8Q2E/dDpmLHk6Z306bnVsbCksaS5zaXRlLG51bGwpKSwrK2MpfWZ1bmN0aW9uIFlyKG4sdCl7cmV0dXJuIHQuYW5nbGUtbi5hbmdsZX1mdW5jdGlvbiBacigpe3R1KHRoaXMpLHRoaXMueD10aGlzLnk9dGhpcy5hcmM9dGhpcy5zaXRlPXRoaXMuY3k9bnVsbH1mdW5jdGlvbiBWcihuKXt2YXIgdD1uLlAsZT1uLk47aWYodCYmZSl7dmFyIHI9dC5zaXRlLHU9bi5zaXRlLGk9ZS5zaXRlO2lmKHIhPT1pKXt2YXIgbz11LngsYT11LnksYz1yLngtbyxsPXIueS1hLHM9aS54LW8sZj1pLnktYSxoPTIqKGMqZi1sKnMpO2lmKCEoaD49LXphKSl7dmFyIGc9YypjK2wqbCxwPXMqcytmKmYsdj0oZipnLWwqcCkvaCxkPShjKnAtcypnKS9oLGY9ZCthLG09cmwucG9wKCl8fG5ldyBacjttLmFyYz1uLG0uc2l0ZT11LG0ueD12K28sbS55PWYrTWF0aC5zcXJ0KHYqditkKmQpLG0uY3k9ZixuLmNpcmNsZT1tO2Zvcih2YXIgeT1udWxsLE09dGwuXztNOylpZihtLnk8TS55fHxtLnk9PT1NLnkmJm0ueDw9TS54KXtpZighTS5MKXt5PU0uUDticmVha31NPU0uTH1lbHNle2lmKCFNLlIpe3k9TTticmVha31NPU0uUn10bC5pbnNlcnQoeSxtKSx5fHwobmw9bSl9fX19ZnVuY3Rpb24gWHIobil7dmFyIHQ9bi5jaXJjbGU7dCYmKHQuUHx8KG5sPXQuTiksdGwucmVtb3ZlKHQpLHJsLnB1c2godCksdHUodCksbi5jaXJjbGU9bnVsbCl9ZnVuY3Rpb24gJHIobil7Zm9yKHZhciB0LGU9R2Mscj1PZShuWzBdWzBdLG5bMF1bMV0sblsxXVswXSxuWzFdWzFdKSx1PWUubGVuZ3RoO3UtLTspdD1lW3VdLCghQnIodCxuKXx8IXIodCl8fGdhKHQuYS54LXQuYi54KTxDYSYmZ2EodC5hLnktdC5iLnkpPENhKSYmKHQuYT10LmI9bnVsbCxlLnNwbGljZSh1LDEpKX1mdW5jdGlvbiBCcihuLHQpe3ZhciBlPW4uYjtpZihlKXJldHVybiEwO3ZhciByLHUsaT1uLmEsbz10WzBdWzBdLGE9dFsxXVswXSxjPXRbMF1bMV0sbD10WzFdWzFdLHM9bi5sLGY9bi5yLGg9cy54LGc9cy55LHA9Zi54LHY9Zi55LGQ9KGgrcCkvMixtPShnK3YpLzI7aWYodj09PWcpe2lmKG8+ZHx8ZD49YSlyZXR1cm47aWYoaD5wKXtpZihpKXtpZihpLnk+PWwpcmV0dXJufWVsc2UgaT17eDpkLHk6Y307ZT17eDpkLHk6bH19ZWxzZXtpZihpKXtpZihpLnk8YylyZXR1cm59ZWxzZSBpPXt4OmQseTpsfTtlPXt4OmQseTpjfX19ZWxzZSBpZihyPShoLXApLyh2LWcpLHU9bS1yKmQsLTE+cnx8cj4xKWlmKGg+cCl7aWYoaSl7aWYoaS55Pj1sKXJldHVybn1lbHNlIGk9e3g6KGMtdSkvcix5OmN9O2U9e3g6KGwtdSkvcix5Omx9fWVsc2V7aWYoaSl7aWYoaS55PGMpcmV0dXJufWVsc2UgaT17eDoobC11KS9yLHk6bH07ZT17eDooYy11KS9yLHk6Y319ZWxzZSBpZih2Pmcpe2lmKGkpe2lmKGkueD49YSlyZXR1cm59ZWxzZSBpPXt4Om8seTpyKm8rdX07ZT17eDphLHk6ciphK3V9fWVsc2V7aWYoaSl7aWYoaS54PG8pcmV0dXJufWVsc2UgaT17eDphLHk6ciphK3V9O2U9e3g6byx5OnIqbyt1fX1yZXR1cm4gbi5hPWksbi5iPWUsITB9ZnVuY3Rpb24gV3Iobix0KXt0aGlzLmw9bix0aGlzLnI9dCx0aGlzLmE9dGhpcy5iPW51bGx9ZnVuY3Rpb24gSnIobix0LGUscil7dmFyIHU9bmV3IFdyKG4sdCk7cmV0dXJuIEdjLnB1c2godSksZSYmS3IodSxuLHQsZSksciYmS3IodSx0LG4sciksS2Nbbi5pXS5lZGdlcy5wdXNoKG5ldyBRcih1LG4sdCkpLEtjW3QuaV0uZWRnZXMucHVzaChuZXcgUXIodSx0LG4pKSx1fWZ1bmN0aW9uIEdyKG4sdCxlKXt2YXIgcj1uZXcgV3IobixudWxsKTtyZXR1cm4gci5hPXQsci5iPWUsR2MucHVzaChyKSxyfWZ1bmN0aW9uIEtyKG4sdCxlLHIpe24uYXx8bi5iP24ubD09PWU/bi5iPXI6bi5hPXI6KG4uYT1yLG4ubD10LG4ucj1lKX1mdW5jdGlvbiBRcihuLHQsZSl7dmFyIHI9bi5hLHU9bi5iO3RoaXMuZWRnZT1uLHRoaXMuc2l0ZT10LHRoaXMuYW5nbGU9ZT9NYXRoLmF0YW4yKGUueS10LnksZS54LXQueCk6bi5sPT09dD9NYXRoLmF0YW4yKHUueC1yLngsci55LXUueSk6TWF0aC5hdGFuMihyLngtdS54LHUueS1yLnkpfWZ1bmN0aW9uIG51KCl7dGhpcy5fPW51bGx9ZnVuY3Rpb24gdHUobil7bi5VPW4uQz1uLkw9bi5SPW4uUD1uLk49bnVsbH1mdW5jdGlvbiBldShuLHQpe3ZhciBlPXQscj10LlIsdT1lLlU7dT91Lkw9PT1lP3UuTD1yOnUuUj1yOm4uXz1yLHIuVT11LGUuVT1yLGUuUj1yLkwsZS5SJiYoZS5SLlU9ZSksci5MPWV9ZnVuY3Rpb24gcnUobix0KXt2YXIgZT10LHI9dC5MLHU9ZS5VO3U/dS5MPT09ZT91Lkw9cjp1LlI9cjpuLl89cixyLlU9dSxlLlU9cixlLkw9ci5SLGUuTCYmKGUuTC5VPWUpLHIuUj1lfWZ1bmN0aW9uIHV1KG4pe2Zvcig7bi5MOyluPW4uTDtyZXR1cm4gbn1mdW5jdGlvbiBpdShuLHQpe3ZhciBlLHIsdSxpPW4uc29ydChvdSkucG9wKCk7Zm9yKEdjPVtdLEtjPW5ldyBBcnJheShuLmxlbmd0aCksUWM9bmV3IG51LHRsPW5ldyBudTs7KWlmKHU9bmwsaSYmKCF1fHxpLnk8dS55fHxpLnk9PT11LnkmJmkueDx1LngpKShpLnghPT1lfHxpLnkhPT1yKSYmKEtjW2kuaV09bmV3IE9yKGkpLGpyKGkpLGU9aS54LHI9aS55KSxpPW4ucG9wKCk7ZWxzZXtpZighdSlicmVhaztVcih1LmFyYyl9dCYmKCRyKHQpLElyKHQpKTt2YXIgbz17Y2VsbHM6S2MsZWRnZXM6R2N9O3JldHVybiBRYz10bD1HYz1LYz1udWxsLG99ZnVuY3Rpb24gb3Uobix0KXtyZXR1cm4gdC55LW4ueXx8dC54LW4ueH1mdW5jdGlvbiBhdShuLHQsZSl7cmV0dXJuKG4ueC1lLngpKih0Lnktbi55KS0obi54LXQueCkqKGUueS1uLnkpfWZ1bmN0aW9uIGN1KG4pe3JldHVybiBuLnh9ZnVuY3Rpb24gbHUobil7cmV0dXJuIG4ueX1mdW5jdGlvbiBzdSgpe3JldHVybntsZWFmOiEwLG5vZGVzOltdLHBvaW50Om51bGwseDpudWxsLHk6bnVsbH19ZnVuY3Rpb24gZnUobix0LGUscix1LGkpe2lmKCFuKHQsZSxyLHUsaSkpe3ZhciBvPS41KihlK3UpLGE9LjUqKHIraSksYz10Lm5vZGVzO2NbMF0mJmZ1KG4sY1swXSxlLHIsbyxhKSxjWzFdJiZmdShuLGNbMV0sbyxyLHUsYSksY1syXSYmZnUobixjWzJdLGUsYSxvLGkpLGNbM10mJmZ1KG4sY1szXSxvLGEsdSxpKX19ZnVuY3Rpb24gaHUobix0LGUscix1LGksbyl7dmFyIGEsYz0xLzA7cmV0dXJuIGZ1bmN0aW9uIGwobixzLGYsaCxnKXtpZighKHM+aXx8Zj5vfHxyPmh8fHU+Zykpe2lmKHA9bi5wb2ludCl7dmFyIHAsdj10LW4ueCxkPWUtbi55LG09dip2K2QqZDtpZihjPm0pe3ZhciB5PU1hdGguc3FydChjPW0pO3I9dC15LHU9ZS15LGk9dCt5LG89ZSt5LGE9cH19Zm9yKHZhciBNPW4ubm9kZXMseD0uNSoocytoKSxiPS41KihmK2cpLF89dD49eCx3PWU+PWIsUz13PDwxfF8saz1TKzQ7az5TOysrUylpZihuPU1bMyZTXSlzd2l0Y2goMyZTKXtjYXNlIDA6bChuLHMsZix4LGIpO2JyZWFrO2Nhc2UgMTpsKG4seCxmLGgsYik7YnJlYWs7Y2FzZSAyOmwobixzLGIseCxnKTticmVhaztjYXNlIDM6bChuLHgsYixoLGcpfX19KG4scix1LGksbyksYX1mdW5jdGlvbiBndShuLHQpe249dGEucmdiKG4pLHQ9dGEucmdiKHQpO3ZhciBlPW4ucixyPW4uZyx1PW4uYixpPXQuci1lLG89dC5nLXIsYT10LmItdTtyZXR1cm4gZnVuY3Rpb24obil7cmV0dXJuIiMiK3h0KE1hdGgucm91bmQoZStpKm4pKSt4dChNYXRoLnJvdW5kKHIrbypuKSkreHQoTWF0aC5yb3VuZCh1K2EqbikpfX1mdW5jdGlvbiBwdShuLHQpe3ZhciBlLHI9e30sdT17fTtmb3IoZSBpbiBuKWUgaW4gdD9yW2VdPW11KG5bZV0sdFtlXSk6dVtlXT1uW2VdO2ZvcihlIGluIHQpZSBpbiBufHwodVtlXT10W2VdKTtyZXR1cm4gZnVuY3Rpb24obil7Zm9yKGUgaW4gcil1W2VdPXJbZV0obik7cmV0dXJuIHV9fWZ1bmN0aW9uIHZ1KG4sdCl7cmV0dXJuIG49K24sdD0rdCxmdW5jdGlvbihlKXtyZXR1cm4gbiooMS1lKSt0KmV9fWZ1bmN0aW9uIGR1KG4sdCl7dmFyIGUscix1LGk9aWwubGFzdEluZGV4PW9sLmxhc3RJbmRleD0wLG89LTEsYT1bXSxjPVtdO2ZvcihuKz0iIix0Kz0iIjsoZT1pbC5leGVjKG4pKSYmKHI9b2wuZXhlYyh0KSk7KSh1PXIuaW5kZXgpPmkmJih1PXQuc2xpY2UoaSx1KSxhW29dP2Fbb10rPXU6YVsrK29dPXUpLChlPWVbMF0pPT09KHI9clswXSk/YVtvXT9hW29dKz1yOmFbKytvXT1yOihhWysrb109bnVsbCxjLnB1c2goe2k6byx4OnZ1KGUscil9KSksaT1vbC5sYXN0SW5kZXg7cmV0dXJuIGk8dC5sZW5ndGgmJih1PXQuc2xpY2UoaSksYVtvXT9hW29dKz11OmFbKytvXT11KSxhLmxlbmd0aDwyP2NbMF0/KHQ9Y1swXS54LGZ1bmN0aW9uKG4pe3JldHVybiB0KG4pKyIifSk6ZnVuY3Rpb24oKXtyZXR1cm4gdH06KHQ9Yy5sZW5ndGgsZnVuY3Rpb24obil7Zm9yKHZhciBlLHI9MDt0PnI7KytyKWFbKGU9Y1tyXSkuaV09ZS54KG4pO3JldHVybiBhLmpvaW4oIiIpfSl9ZnVuY3Rpb24gbXUobix0KXtmb3IodmFyIGUscj10YS5pbnRlcnBvbGF0b3JzLmxlbmd0aDstLXI+PTAmJiEoZT10YS5pbnRlcnBvbGF0b3JzW3JdKG4sdCkpOyk7cmV0dXJuIGV9ZnVuY3Rpb24geXUobix0KXt2YXIgZSxyPVtdLHU9W10saT1uLmxlbmd0aCxvPXQubGVuZ3RoLGE9TWF0aC5taW4obi5sZW5ndGgsdC5sZW5ndGgpO2ZvcihlPTA7YT5lOysrZSlyLnB1c2gobXUobltlXSx0W2VdKSk7Zm9yKDtpPmU7KytlKXVbZV09bltlXTtmb3IoO28+ZTsrK2UpdVtlXT10W2VdO3JldHVybiBmdW5jdGlvbihuKXtmb3IoZT0wO2E+ZTsrK2UpdVtlXT1yW2VdKG4pO3JldHVybiB1fX1mdW5jdGlvbiBNdShuKXtyZXR1cm4gZnVuY3Rpb24odCl7cmV0dXJuIDA+PXQ/MDp0Pj0xPzE6bih0KX19ZnVuY3Rpb24geHUobil7cmV0dXJuIGZ1bmN0aW9uKHQpe3JldHVybiAxLW4oMS10KX19ZnVuY3Rpb24gYnUobil7cmV0dXJuIGZ1bmN0aW9uKHQpe3JldHVybi41KiguNT50P24oMip0KToyLW4oMi0yKnQpKX19ZnVuY3Rpb24gX3Uobil7cmV0dXJuIG4qbn1mdW5jdGlvbiB3dShuKXtyZXR1cm4gbipuKm59ZnVuY3Rpb24gU3Uobil7aWYoMD49bilyZXR1cm4gMDtpZihuPj0xKXJldHVybiAxO3ZhciB0PW4qbixlPXQqbjtyZXR1cm4gNCooLjU+bj9lOjMqKG4tdCkrZS0uNzUpfWZ1bmN0aW9uIGt1KG4pe3JldHVybiBmdW5jdGlvbih0KXtyZXR1cm4gTWF0aC5wb3codCxuKX19ZnVuY3Rpb24gRXUobil7cmV0dXJuIDEtTWF0aC5jb3MobipSYSl9ZnVuY3Rpb24gQXUobil7cmV0dXJuIE1hdGgucG93KDIsMTAqKG4tMSkpfWZ1bmN0aW9uIE51KG4pe3JldHVybiAxLU1hdGguc3FydCgxLW4qbil9ZnVuY3Rpb24gQ3Uobix0KXt2YXIgZTtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aDwyJiYodD0uNDUpLGFyZ3VtZW50cy5sZW5ndGg/ZT10L0xhKk1hdGguYXNpbigxL24pOihuPTEsZT10LzQpLGZ1bmN0aW9uKHIpe3JldHVybiAxK24qTWF0aC5wb3coMiwtMTAqcikqTWF0aC5zaW4oKHItZSkqTGEvdCl9fWZ1bmN0aW9uIHp1KG4pe3JldHVybiBufHwobj0xLjcwMTU4KSxmdW5jdGlvbih0KXtyZXR1cm4gdCp0KigobisxKSp0LW4pfX1mdW5jdGlvbiBxdShuKXtyZXR1cm4gMS8yLjc1Pm4/Ny41NjI1Km4qbjoyLzIuNzU+bj83LjU2MjUqKG4tPTEuNS8yLjc1KSpuKy43NToyLjUvMi43NT5uPzcuNTYyNSoobi09Mi4yNS8yLjc1KSpuKy45Mzc1OjcuNTYyNSoobi09Mi42MjUvMi43NSkqbisuOTg0Mzc1fWZ1bmN0aW9uIEx1KG4sdCl7bj10YS5oY2wobiksdD10YS5oY2wodCk7dmFyIGU9bi5oLHI9bi5jLHU9bi5sLGk9dC5oLWUsbz10LmMtcixhPXQubC11O3JldHVybiBpc05hTihvKSYmKG89MCxyPWlzTmFOKHIpP3QuYzpyKSxpc05hTihpKT8oaT0wLGU9aXNOYU4oZSk/dC5oOmUpOmk+MTgwP2ktPTM2MDotMTgwPmkmJihpKz0zNjApLGZ1bmN0aW9uKG4pe3JldHVybiBzdChlK2kqbixyK28qbix1K2EqbikrIiJ9fWZ1bmN0aW9uIFR1KG4sdCl7bj10YS5oc2wobiksdD10YS5oc2wodCk7dmFyIGU9bi5oLHI9bi5zLHU9bi5sLGk9dC5oLWUsbz10LnMtcixhPXQubC11O3JldHVybiBpc05hTihvKSYmKG89MCxyPWlzTmFOKHIpP3QuczpyKSxpc05hTihpKT8oaT0wLGU9aXNOYU4oZSk/dC5oOmUpOmk+MTgwP2ktPTM2MDotMTgwPmkmJihpKz0zNjApLGZ1bmN0aW9uKG4pe3JldHVybiBjdChlK2kqbixyK28qbix1K2EqbikrIiJ9fWZ1bmN0aW9uIFJ1KG4sdCl7bj10YS5sYWIobiksdD10YS5sYWIodCk7dmFyIGU9bi5sLHI9bi5hLHU9bi5iLGk9dC5sLWUsbz10LmEtcixhPXQuYi11O3JldHVybiBmdW5jdGlvbihuKXtyZXR1cm4gaHQoZStpKm4scitvKm4sdSthKm4pKyIifX1mdW5jdGlvbiBEdShuLHQpe3JldHVybiB0LT1uLGZ1bmN0aW9uKGUpe3JldHVybiBNYXRoLnJvdW5kKG4rdCplKX19ZnVuY3Rpb24gUHUobil7dmFyIHQ9W24uYSxuLmJdLGU9W24uYyxuLmRdLHI9anUodCksdT1VdSh0LGUpLGk9anUoRnUoZSx0LC11KSl8fDA7dFswXSplWzFdPGVbMF0qdFsxXSYmKHRbMF0qPS0xLHRbMV0qPS0xLHIqPS0xLHUqPS0xKSx0aGlzLnJvdGF0ZT0ocj9NYXRoLmF0YW4yKHRbMV0sdFswXSk6TWF0aC5hdGFuMigtZVswXSxlWzFdKSkqUGEsdGhpcy50cmFuc2xhdGU9W24uZSxuLmZdLHRoaXMuc2NhbGU9W3IsaV0sdGhpcy5za2V3PWk/TWF0aC5hdGFuMih1LGkpKlBhOjB9ZnVuY3Rpb24gVXUobix0KXtyZXR1cm4gblswXSp0WzBdK25bMV0qdFsxXX1mdW5jdGlvbiBqdShuKXt2YXIgdD1NYXRoLnNxcnQoVXUobixuKSk7cmV0dXJuIHQmJihuWzBdLz10LG5bMV0vPXQpLHR9ZnVuY3Rpb24gRnUobix0LGUpe3JldHVybiBuWzBdKz1lKnRbMF0sblsxXSs9ZSp0WzFdLG59ZnVuY3Rpb24gSHUobix0KXt2YXIgZSxyPVtdLHU9W10saT10YS50cmFuc2Zvcm0obiksbz10YS50cmFuc2Zvcm0odCksYT1pLnRyYW5zbGF0ZSxjPW8udHJhbnNsYXRlLGw9aS5yb3RhdGUscz1vLnJvdGF0ZSxmPWkuc2tldyxoPW8uc2tldyxnPWkuc2NhbGUscD1vLnNjYWxlO3JldHVybiBhWzBdIT1jWzBdfHxhWzFdIT1jWzFdPyhyLnB1c2goInRyYW5zbGF0ZSgiLG51bGwsIiwiLG51bGwsIikiKSx1LnB1c2goe2k6MSx4OnZ1KGFbMF0sY1swXSl9LHtpOjMseDp2dShhWzFdLGNbMV0pfSkpOnIucHVzaChjWzBdfHxjWzFdPyJ0cmFuc2xhdGUoIitjKyIpIjoiIiksbCE9cz8obC1zPjE4MD9zKz0zNjA6cy1sPjE4MCYmKGwrPTM2MCksdS5wdXNoKHtpOnIucHVzaChyLnBvcCgpKyJyb3RhdGUoIixudWxsLCIpIiktMix4OnZ1KGwscyl9KSk6cyYmci5wdXNoKHIucG9wKCkrInJvdGF0ZSgiK3MrIikiKSxmIT1oP3UucHVzaCh7aTpyLnB1c2goci5wb3AoKSsic2tld1goIixudWxsLCIpIiktMix4OnZ1KGYsaCl9KTpoJiZyLnB1c2goci5wb3AoKSsic2tld1goIitoKyIpIiksZ1swXSE9cFswXXx8Z1sxXSE9cFsxXT8oZT1yLnB1c2goci5wb3AoKSsic2NhbGUoIixudWxsLCIsIixudWxsLCIpIiksdS5wdXNoKHtpOmUtNCx4OnZ1KGdbMF0scFswXSl9LHtpOmUtMix4OnZ1KGdbMV0scFsxXSl9KSk6KDEhPXBbMF18fDEhPXBbMV0pJiZyLnB1c2goci5wb3AoKSsic2NhbGUoIitwKyIpIiksZT11Lmxlbmd0aCxmdW5jdGlvbihuKXtmb3IodmFyIHQsaT0tMTsrK2k8ZTspclsodD11W2ldKS5pXT10Lngobik7cmV0dXJuIHIuam9pbigiIil9fWZ1bmN0aW9uIE91KG4sdCl7cmV0dXJuIHQ9KHQtPW49K24pfHwxL3QsZnVuY3Rpb24oZSl7cmV0dXJuKGUtbikvdH19ZnVuY3Rpb24gSXUobix0KXtyZXR1cm4gdD0odC09bj0rbil8fDEvdCxmdW5jdGlvbihlKXtyZXR1cm4gTWF0aC5tYXgoMCxNYXRoLm1pbigxLChlLW4pL3QpKX19ZnVuY3Rpb24gWXUobil7Zm9yKHZhciB0PW4uc291cmNlLGU9bi50YXJnZXQscj1WdSh0LGUpLHU9W3RdO3QhPT1yOyl0PXQucGFyZW50LHUucHVzaCh0KTtmb3IodmFyIGk9dS5sZW5ndGg7ZSE9PXI7KXUuc3BsaWNlKGksMCxlKSxlPWUucGFyZW50O3JldHVybiB1fWZ1bmN0aW9uIFp1KG4pe2Zvcih2YXIgdD1bXSxlPW4ucGFyZW50O251bGwhPWU7KXQucHVzaChuKSxuPWUsZT1lLnBhcmVudDtyZXR1cm4gdC5wdXNoKG4pLHR9ZnVuY3Rpb24gVnUobix0KXtpZihuPT09dClyZXR1cm4gbjtmb3IodmFyIGU9WnUobikscj1adSh0KSx1PWUucG9wKCksaT1yLnBvcCgpLG89bnVsbDt1PT09aTspbz11LHU9ZS5wb3AoKSxpPXIucG9wKCk7cmV0dXJuIG99ZnVuY3Rpb24gWHUobil7bi5maXhlZHw9Mn1mdW5jdGlvbiAkdShuKXtuLmZpeGVkJj0tN31mdW5jdGlvbiBCdShuKXtuLmZpeGVkfD00LG4ucHg9bi54LG4ucHk9bi55fWZ1bmN0aW9uIFd1KG4pe24uZml4ZWQmPS01fWZ1bmN0aW9uIEp1KG4sdCxlKXt2YXIgcj0wLHU9MDtpZihuLmNoYXJnZT0wLCFuLmxlYWYpZm9yKHZhciBpLG89bi5ub2RlcyxhPW8ubGVuZ3RoLGM9LTE7KytjPGE7KWk9b1tjXSxudWxsIT1pJiYoSnUoaSx0LGUpLG4uY2hhcmdlKz1pLmNoYXJnZSxyKz1pLmNoYXJnZSppLmN4LHUrPWkuY2hhcmdlKmkuY3kpO2lmKG4ucG9pbnQpe24ubGVhZnx8KG4ucG9pbnQueCs9TWF0aC5yYW5kb20oKS0uNSxuLnBvaW50LnkrPU1hdGgucmFuZG9tKCktLjUpO3ZhciBsPXQqZVtuLnBvaW50LmluZGV4XTtuLmNoYXJnZSs9bi5wb2ludENoYXJnZT1sLHIrPWwqbi5wb2ludC54LHUrPWwqbi5wb2ludC55fW4uY3g9ci9uLmNoYXJnZSxuLmN5PXUvbi5jaGFyZ2V9ZnVuY3Rpb24gR3Uobix0KXtyZXR1cm4gdGEucmViaW5kKG4sdCwic29ydCIsImNoaWxkcmVuIiwidmFsdWUiKSxuLm5vZGVzPW4sbi5saW5rcz1yaSxufWZ1bmN0aW9uIEt1KG4sdCl7Zm9yKHZhciBlPVtuXTtudWxsIT0obj1lLnBvcCgpKTspaWYodChuKSwodT1uLmNoaWxkcmVuKSYmKHI9dS5sZW5ndGgpKWZvcih2YXIgcix1Oy0tcj49MDspZS5wdXNoKHVbcl0pfWZ1bmN0aW9uIFF1KG4sdCl7Zm9yKHZhciBlPVtuXSxyPVtdO251bGwhPShuPWUucG9wKCkpOylpZihyLnB1c2gobiksKGk9bi5jaGlsZHJlbikmJih1PWkubGVuZ3RoKSlmb3IodmFyIHUsaSxvPS0xOysrbzx1OyllLnB1c2goaVtvXSk7Zm9yKDtudWxsIT0obj1yLnBvcCgpKTspdChuKX1mdW5jdGlvbiBuaShuKXtyZXR1cm4gbi5jaGlsZHJlbn1mdW5jdGlvbiB0aShuKXtyZXR1cm4gbi52YWx1ZX1mdW5jdGlvbiBlaShuLHQpe3JldHVybiB0LnZhbHVlLW4udmFsdWV9ZnVuY3Rpb24gcmkobil7cmV0dXJuIHRhLm1lcmdlKG4ubWFwKGZ1bmN0aW9uKG4pe3JldHVybihuLmNoaWxkcmVufHxbXSkubWFwKGZ1bmN0aW9uKHQpe3JldHVybntzb3VyY2U6bix0YXJnZXQ6dH19KX0pKX1mdW5jdGlvbiB1aShuKXtyZXR1cm4gbi54fWZ1bmN0aW9uIGlpKG4pe3JldHVybiBuLnl9ZnVuY3Rpb24gb2kobix0LGUpe24ueTA9dCxuLnk9ZX1mdW5jdGlvbiBhaShuKXtyZXR1cm4gdGEucmFuZ2Uobi5sZW5ndGgpfWZ1bmN0aW9uIGNpKG4pe2Zvcih2YXIgdD0tMSxlPW5bMF0ubGVuZ3RoLHI9W107Kyt0PGU7KXJbdF09MDtyZXR1cm4gcn1mdW5jdGlvbiBsaShuKXtmb3IodmFyIHQsZT0xLHI9MCx1PW5bMF1bMV0saT1uLmxlbmd0aDtpPmU7KytlKSh0PW5bZV1bMV0pPnUmJihyPWUsdT10KTtyZXR1cm4gcn1mdW5jdGlvbiBzaShuKXtyZXR1cm4gbi5yZWR1Y2UoZmksMCl9ZnVuY3Rpb24gZmkobix0KXtyZXR1cm4gbit0WzFdfWZ1bmN0aW9uIGhpKG4sdCl7cmV0dXJuIGdpKG4sTWF0aC5jZWlsKE1hdGgubG9nKHQubGVuZ3RoKS9NYXRoLkxOMisxKSl9ZnVuY3Rpb24gZ2kobix0KXtmb3IodmFyIGU9LTEscj0rblswXSx1PShuWzFdLXIpL3QsaT1bXTsrK2U8PXQ7KWlbZV09dSplK3I7cmV0dXJuIGl9ZnVuY3Rpb24gcGkobil7cmV0dXJuW3RhLm1pbihuKSx0YS5tYXgobildfWZ1bmN0aW9uIHZpKG4sdCl7cmV0dXJuIG4udmFsdWUtdC52YWx1ZX1mdW5jdGlvbiBkaShuLHQpe3ZhciBlPW4uX3BhY2tfbmV4dDtuLl9wYWNrX25leHQ9dCx0Ll9wYWNrX3ByZXY9bix0Ll9wYWNrX25leHQ9ZSxlLl9wYWNrX3ByZXY9dH1mdW5jdGlvbiBtaShuLHQpe24uX3BhY2tfbmV4dD10LHQuX3BhY2tfcHJldj1ufWZ1bmN0aW9uIHlpKG4sdCl7dmFyIGU9dC54LW4ueCxyPXQueS1uLnksdT1uLnIrdC5yO3JldHVybi45OTkqdSp1PmUqZStyKnJ9ZnVuY3Rpb24gTWkobil7ZnVuY3Rpb24gdChuKXtzPU1hdGgubWluKG4ueC1uLnIscyksZj1NYXRoLm1heChuLngrbi5yLGYpLGg9TWF0aC5taW4obi55LW4ucixoKSxnPU1hdGgubWF4KG4ueStuLnIsZyl9aWYoKGU9bi5jaGlsZHJlbikmJihsPWUubGVuZ3RoKSl7dmFyIGUscix1LGksbyxhLGMsbCxzPTEvMCxmPS0xLzAsaD0xLzAsZz0tMS8wO2lmKGUuZm9yRWFjaCh4aSkscj1lWzBdLHIueD0tci5yLHIueT0wLHQociksbD4xJiYodT1lWzFdLHUueD11LnIsdS55PTAsdCh1KSxsPjIpKWZvcihpPWVbMl0sd2kocix1LGkpLHQoaSksZGkocixpKSxyLl9wYWNrX3ByZXY9aSxkaShpLHUpLHU9ci5fcGFja19uZXh0LG89MztsPm87bysrKXt3aShyLHUsaT1lW29dKTt2YXIgcD0wLHY9MSxkPTE7Zm9yKGE9dS5fcGFja19uZXh0O2EhPT11O2E9YS5fcGFja19uZXh0LHYrKylpZih5aShhLGkpKXtwPTE7YnJlYWt9aWYoMT09cClmb3IoYz1yLl9wYWNrX3ByZXY7YyE9PWEuX3BhY2tfcHJldiYmIXlpKGMsaSk7Yz1jLl9wYWNrX3ByZXYsZCsrKTtwPyhkPnZ8fHY9PWQmJnUucjxyLnI/bWkocix1PWEpOm1pKHI9Yyx1KSxvLS0pOihkaShyLGkpLHU9aSx0KGkpKX12YXIgbT0ocytmKS8yLHk9KGgrZykvMixNPTA7Zm9yKG89MDtsPm87bysrKWk9ZVtvXSxpLngtPW0saS55LT15LE09TWF0aC5tYXgoTSxpLnIrTWF0aC5zcXJ0KGkueCppLngraS55KmkueSkpO24ucj1NLGUuZm9yRWFjaChiaSl9fWZ1bmN0aW9uIHhpKG4pe24uX3BhY2tfbmV4dD1uLl9wYWNrX3ByZXY9bn1mdW5jdGlvbiBiaShuKXtkZWxldGUgbi5fcGFja19uZXh0LGRlbGV0ZSBuLl9wYWNrX3ByZXZ9ZnVuY3Rpb24gX2kobix0LGUscil7dmFyIHU9bi5jaGlsZHJlbjtpZihuLng9dCs9cipuLngsbi55PWUrPXIqbi55LG4ucio9cix1KWZvcih2YXIgaT0tMSxvPXUubGVuZ3RoOysraTxvOylfaSh1W2ldLHQsZSxyKX1mdW5jdGlvbiB3aShuLHQsZSl7dmFyIHI9bi5yK2Uucix1PXQueC1uLngsaT10Lnktbi55O2lmKHImJih1fHxpKSl7dmFyIG89dC5yK2UucixhPXUqdStpKmk7byo9byxyKj1yO3ZhciBjPS41KyhyLW8pLygyKmEpLGw9TWF0aC5zcXJ0KE1hdGgubWF4KDAsMipvKihyK2EpLShyLT1hKSpyLW8qbykpLygyKmEpO2UueD1uLngrYyp1K2wqaSxlLnk9bi55K2MqaS1sKnV9ZWxzZSBlLng9bi54K3IsZS55PW4ueX1mdW5jdGlvbiBTaShuLHQpe3JldHVybiBuLnBhcmVudD09dC5wYXJlbnQ/MToyfWZ1bmN0aW9uIGtpKG4pe3ZhciB0PW4uY2hpbGRyZW47cmV0dXJuIHQubGVuZ3RoP3RbMF06bi50fWZ1bmN0aW9uIEVpKG4pe3ZhciB0LGU9bi5jaGlsZHJlbjtyZXR1cm4odD1lLmxlbmd0aCk/ZVt0LTFdOm4udH1mdW5jdGlvbiBBaShuLHQsZSl7dmFyIHI9ZS8odC5pLW4uaSk7dC5jLT1yLHQucys9ZSxuLmMrPXIsdC56Kz1lLHQubSs9ZX1mdW5jdGlvbiBOaShuKXtmb3IodmFyIHQsZT0wLHI9MCx1PW4uY2hpbGRyZW4saT11Lmxlbmd0aDstLWk+PTA7KXQ9dVtpXSx0LnorPWUsdC5tKz1lLGUrPXQucysocis9dC5jKX1mdW5jdGlvbiBDaShuLHQsZSl7cmV0dXJuIG4uYS5wYXJlbnQ9PT10LnBhcmVudD9uLmE6ZX1mdW5jdGlvbiB6aShuKXtyZXR1cm4gMSt0YS5tYXgobixmdW5jdGlvbihuKXtyZXR1cm4gbi55fSl9ZnVuY3Rpb24gcWkobil7cmV0dXJuIG4ucmVkdWNlKGZ1bmN0aW9uKG4sdCl7cmV0dXJuIG4rdC54fSwwKS9uLmxlbmd0aH1mdW5jdGlvbiBMaShuKXt2YXIgdD1uLmNoaWxkcmVuO3JldHVybiB0JiZ0Lmxlbmd0aD9MaSh0WzBdKTpufWZ1bmN0aW9uIFRpKG4pe3ZhciB0LGU9bi5jaGlsZHJlbjtyZXR1cm4gZSYmKHQ9ZS5sZW5ndGgpP1RpKGVbdC0xXSk6bn1mdW5jdGlvbiBSaShuKXtyZXR1cm57eDpuLngseTpuLnksZHg6bi5keCxkeTpuLmR5fX1mdW5jdGlvbiBEaShuLHQpe3ZhciBlPW4ueCt0WzNdLHI9bi55K3RbMF0sdT1uLmR4LXRbMV0tdFszXSxpPW4uZHktdFswXS10WzJdO3JldHVybiAwPnUmJihlKz11LzIsdT0wKSwwPmkmJihyKz1pLzIsaT0wKSx7eDplLHk6cixkeDp1LGR5Oml9fWZ1bmN0aW9uIFBpKG4pe3ZhciB0PW5bMF0sZT1uW24ubGVuZ3RoLTFdO3JldHVybiBlPnQ/W3QsZV06W2UsdF19ZnVuY3Rpb24gVWkobil7cmV0dXJuIG4ucmFuZ2VFeHRlbnQ/bi5yYW5nZUV4dGVudCgpOlBpKG4ucmFuZ2UoKSl9ZnVuY3Rpb24gamkobix0LGUscil7dmFyIHU9ZShuWzBdLG5bMV0pLGk9cih0WzBdLHRbMV0pO3JldHVybiBmdW5jdGlvbihuKXtyZXR1cm4gaSh1KG4pKX19ZnVuY3Rpb24gRmkobix0KXt2YXIgZSxyPTAsdT1uLmxlbmd0aC0xLGk9bltyXSxvPW5bdV07cmV0dXJuIGk+byYmKGU9cixyPXUsdT1lLGU9aSxpPW8sbz1lKSxuW3JdPXQuZmxvb3IoaSksblt1XT10LmNlaWwobyksbn1mdW5jdGlvbiBIaShuKXtyZXR1cm4gbj97Zmxvb3I6ZnVuY3Rpb24odCl7cmV0dXJuIE1hdGguZmxvb3IodC9uKSpufSxjZWlsOmZ1bmN0aW9uKHQpe3JldHVybiBNYXRoLmNlaWwodC9uKSpufX06bWx9ZnVuY3Rpb24gT2kobix0LGUscil7dmFyIHU9W10saT1bXSxvPTAsYT1NYXRoLm1pbihuLmxlbmd0aCx0Lmxlbmd0aCktMTtmb3IoblthXTxuWzBdJiYobj1uLnNsaWNlKCkucmV2ZXJzZSgpLHQ9dC5zbGljZSgpLnJldmVyc2UoKSk7KytvPD1hOyl1LnB1c2goZShuW28tMV0sbltvXSkpLGkucHVzaChyKHRbby0xXSx0W29dKSk7cmV0dXJuIGZ1bmN0aW9uKHQpe3ZhciBlPXRhLmJpc2VjdChuLHQsMSxhKS0xO3JldHVybiBpW2VdKHVbZV0odCkpfX1mdW5jdGlvbiBJaShuLHQsZSxyKXtmdW5jdGlvbiB1KCl7dmFyIHU9TWF0aC5taW4obi5sZW5ndGgsdC5sZW5ndGgpPjI/T2k6amksYz1yP0l1Ok91O3JldHVybiBvPXUobix0LGMsZSksYT11KHQsbixjLG11KSxpfWZ1bmN0aW9uIGkobil7cmV0dXJuIG8obil9dmFyIG8sYTtyZXR1cm4gaS5pbnZlcnQ9ZnVuY3Rpb24obil7cmV0dXJuIGEobil9LGkuZG9tYWluPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhuPXQubWFwKE51bWJlciksdSgpKTpufSxpLnJhbmdlPWZ1bmN0aW9uKG4pe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh0PW4sdSgpKTp0fSxpLnJhbmdlUm91bmQ9ZnVuY3Rpb24obil7cmV0dXJuIGkucmFuZ2UobikuaW50ZXJwb2xhdGUoRHUpfSxpLmNsYW1wPWZ1bmN0aW9uKG4pe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhyPW4sdSgpKTpyfSxpLmludGVycG9sYXRlPWZ1bmN0aW9uKG4pe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhlPW4sdSgpKTplfSxpLnRpY2tzPWZ1bmN0aW9uKHQpe3JldHVybiBYaShuLHQpfSxpLnRpY2tGb3JtYXQ9ZnVuY3Rpb24odCxlKXtyZXR1cm4gJGkobix0LGUpfSxpLm5pY2U9ZnVuY3Rpb24odCl7cmV0dXJuIFppKG4sdCksdSgpfSxpLmNvcHk9ZnVuY3Rpb24oKXtyZXR1cm4gSWkobix0LGUscil9LHUoKX1mdW5jdGlvbiBZaShuLHQpe3JldHVybiB0YS5yZWJpbmQobix0LCJyYW5nZSIsInJhbmdlUm91bmQiLCJpbnRlcnBvbGF0ZSIsImNsYW1wIil9ZnVuY3Rpb24gWmkobix0KXtyZXR1cm4gRmkobixIaShWaShuLHQpWzJdKSl9ZnVuY3Rpb24gVmkobix0KXtudWxsPT10JiYodD0xMCk7dmFyIGU9UGkobikscj1lWzFdLWVbMF0sdT1NYXRoLnBvdygxMCxNYXRoLmZsb29yKE1hdGgubG9nKHIvdCkvTWF0aC5MTjEwKSksaT10L3IqdTtyZXR1cm4uMTU+PWk/dSo9MTA6LjM1Pj1pP3UqPTU6Ljc1Pj1pJiYodSo9MiksZVswXT1NYXRoLmNlaWwoZVswXS91KSp1LGVbMV09TWF0aC5mbG9vcihlWzFdL3UpKnUrLjUqdSxlWzJdPXUsZX1mdW5jdGlvbiBYaShuLHQpe3JldHVybiB0YS5yYW5nZS5hcHBseSh0YSxWaShuLHQpKX1mdW5jdGlvbiAkaShuLHQsZSl7dmFyIHI9Vmkobix0KTtpZihlKXt2YXIgdT1pYy5leGVjKGUpO2lmKHUuc2hpZnQoKSwicyI9PT11WzhdKXt2YXIgaT10YS5mb3JtYXRQcmVmaXgoTWF0aC5tYXgoZ2EoclswXSksZ2EoclsxXSkpKTtyZXR1cm4gdVs3XXx8KHVbN109Ii4iK0JpKGkuc2NhbGUoclsyXSkpKSx1WzhdPSJmIixlPXRhLmZvcm1hdCh1LmpvaW4oIiIpKSxmdW5jdGlvbihuKXtyZXR1cm4gZShpLnNjYWxlKG4pKStpLnN5bWJvbH19dVs3XXx8KHVbN109Ii4iK1dpKHVbOF0scikpLGU9dS5qb2luKCIiKX1lbHNlIGU9IiwuIitCaShyWzJdKSsiZiI7cmV0dXJuIHRhLmZvcm1hdChlKX1mdW5jdGlvbiBCaShuKXtyZXR1cm4tTWF0aC5mbG9vcihNYXRoLmxvZyhuKS9NYXRoLkxOMTArLjAxKX1mdW5jdGlvbiBXaShuLHQpe3ZhciBlPUJpKHRbMl0pO3JldHVybiBuIGluIHlsP01hdGguYWJzKGUtQmkoTWF0aC5tYXgoZ2EodFswXSksZ2EodFsxXSkpKSkrICsoImUiIT09bik6ZS0yKigiJSI9PT1uKX1mdW5jdGlvbiBKaShuLHQsZSxyKXtmdW5jdGlvbiB1KG4pe3JldHVybihlP01hdGgubG9nKDA+bj8wOm4pOi1NYXRoLmxvZyhuPjA/MDotbikpL01hdGgubG9nKHQpfWZ1bmN0aW9uIGkobil7cmV0dXJuIGU/TWF0aC5wb3codCxuKTotTWF0aC5wb3codCwtbil9ZnVuY3Rpb24gbyh0KXtyZXR1cm4gbih1KHQpKX1yZXR1cm4gby5pbnZlcnQ9ZnVuY3Rpb24odCl7cmV0dXJuIGkobi5pbnZlcnQodCkpfSxvLmRvbWFpbj1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oZT10WzBdPj0wLG4uZG9tYWluKChyPXQubWFwKE51bWJlcikpLm1hcCh1KSksbyk6cn0sby5iYXNlPWZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh0PStlLG4uZG9tYWluKHIubWFwKHUpKSxvKTp0fSxvLm5pY2U9ZnVuY3Rpb24oKXt2YXIgdD1GaShyLm1hcCh1KSxlP01hdGg6eGwpO3JldHVybiBuLmRvbWFpbih0KSxyPXQubWFwKGkpLG99LG8udGlja3M9ZnVuY3Rpb24oKXt2YXIgbj1QaShyKSxvPVtdLGE9blswXSxjPW5bMV0sbD1NYXRoLmZsb29yKHUoYSkpLHM9TWF0aC5jZWlsKHUoYykpLGY9dCUxPzI6dDtpZihpc0Zpbml0ZShzLWwpKXtpZihlKXtmb3IoO3M+bDtsKyspZm9yKHZhciBoPTE7Zj5oO2grKylvLnB1c2goaShsKSpoKTtvLnB1c2goaShsKSl9ZWxzZSBmb3Ioby5wdXNoKGkobCkpO2wrKzxzOylmb3IodmFyIGg9Zi0xO2g+MDtoLS0pby5wdXNoKGkobCkqaCk7Zm9yKGw9MDtvW2xdPGE7bCsrKTtmb3Iocz1vLmxlbmd0aDtvW3MtMV0+YztzLS0pO289by5zbGljZShsLHMpfXJldHVybiBvfSxvLnRpY2tGb3JtYXQ9ZnVuY3Rpb24obix0KXtpZighYXJndW1lbnRzLmxlbmd0aClyZXR1cm4gTWw7YXJndW1lbnRzLmxlbmd0aDwyP3Q9TWw6ImZ1bmN0aW9uIiE9dHlwZW9mIHQmJih0PXRhLmZvcm1hdCh0KSk7dmFyIHIsYT1NYXRoLm1heCguMSxuL28udGlja3MoKS5sZW5ndGgpLGM9ZT8ocj0xZS0xMixNYXRoLmNlaWwpOihyPS0xZS0xMixNYXRoLmZsb29yKTtyZXR1cm4gZnVuY3Rpb24obil7cmV0dXJuIG4vaShjKHUobikrcikpPD1hP3Qobik6IiJ9fSxvLmNvcHk9ZnVuY3Rpb24oKXtyZXR1cm4gSmkobi5jb3B5KCksdCxlLHIpfSxZaShvLG4pfWZ1bmN0aW9uIEdpKG4sdCxlKXtmdW5jdGlvbiByKHQpe3JldHVybiBuKHUodCkpfXZhciB1PUtpKHQpLGk9S2koMS90KTtyZXR1cm4gci5pbnZlcnQ9ZnVuY3Rpb24odCl7cmV0dXJuIGkobi5pbnZlcnQodCkpfSxyLmRvbWFpbj1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obi5kb21haW4oKGU9dC5tYXAoTnVtYmVyKSkubWFwKHUpKSxyKTplfSxyLnRpY2tzPWZ1bmN0aW9uKG4pe3JldHVybiBYaShlLG4pfSxyLnRpY2tGb3JtYXQ9ZnVuY3Rpb24obix0KXtyZXR1cm4gJGkoZSxuLHQpfSxyLm5pY2U9ZnVuY3Rpb24obil7cmV0dXJuIHIuZG9tYWluKFppKGUsbikpfSxyLmV4cG9uZW50PWZ1bmN0aW9uKG8pe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh1PUtpKHQ9byksaT1LaSgxL3QpLG4uZG9tYWluKGUubWFwKHUpKSxyKTp0fSxyLmNvcHk9ZnVuY3Rpb24oKXtyZXR1cm4gR2kobi5jb3B5KCksdCxlKX0sWWkocixuKX1mdW5jdGlvbiBLaShuKXtyZXR1cm4gZnVuY3Rpb24odCl7cmV0dXJuIDA+dD8tTWF0aC5wb3coLXQsbik6TWF0aC5wb3codCxuKX19ZnVuY3Rpb24gUWkobix0KXtmdW5jdGlvbiBlKGUpe3JldHVybiBpWygodS5nZXQoZSl8fCgicmFuZ2UiPT09dC50P3Uuc2V0KGUsbi5wdXNoKGUpKTowLzApKS0xKSVpLmxlbmd0aF19ZnVuY3Rpb24gcih0LGUpe3JldHVybiB0YS5yYW5nZShuLmxlbmd0aCkubWFwKGZ1bmN0aW9uKG4pe3JldHVybiB0K2Uqbn0pfXZhciB1LGksbztyZXR1cm4gZS5kb21haW49ZnVuY3Rpb24ocil7aWYoIWFyZ3VtZW50cy5sZW5ndGgpcmV0dXJuIG47bj1bXSx1PW5ldyBsO2Zvcih2YXIgaSxvPS0xLGE9ci5sZW5ndGg7KytvPGE7KXUuaGFzKGk9cltvXSl8fHUuc2V0KGksbi5wdXNoKGkpKTtyZXR1cm4gZVt0LnRdLmFwcGx5KGUsdC5hKX0sZS5yYW5nZT1mdW5jdGlvbihuKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oaT1uLG89MCx0PXt0OiJyYW5nZSIsYTphcmd1bWVudHN9LGUpOml9LGUucmFuZ2VQb2ludHM9ZnVuY3Rpb24odSxhKXthcmd1bWVudHMubGVuZ3RoPDImJihhPTApO3ZhciBjPXVbMF0sbD11WzFdLHM9bi5sZW5ndGg8Mj8oYz0oYytsKS8yLDApOihsLWMpLyhuLmxlbmd0aC0xK2EpO3JldHVybiBpPXIoYytzKmEvMixzKSxvPTAsdD17dDoicmFuZ2VQb2ludHMiLGE6YXJndW1lbnRzfSxlfSxlLnJhbmdlUm91bmRQb2ludHM9ZnVuY3Rpb24odSxhKXthcmd1bWVudHMubGVuZ3RoPDImJihhPTApO3ZhciBjPXVbMF0sbD11WzFdLHM9bi5sZW5ndGg8Mj8oYz1sPU1hdGgucm91bmQoKGMrbCkvMiksMCk6KGwtYykvKG4ubGVuZ3RoLTErYSl8MDtyZXR1cm4gaT1yKGMrTWF0aC5yb3VuZChzKmEvMisobC1jLShuLmxlbmd0aC0xK2EpKnMpLzIpLHMpLG89MCx0PXt0OiJyYW5nZVJvdW5kUG9pbnRzIixhOmFyZ3VtZW50c30sZX0sZS5yYW5nZUJhbmRzPWZ1bmN0aW9uKHUsYSxjKXthcmd1bWVudHMubGVuZ3RoPDImJihhPTApLGFyZ3VtZW50cy5sZW5ndGg8MyYmKGM9YSk7dmFyIGw9dVsxXTx1WzBdLHM9dVtsLTBdLGY9dVsxLWxdLGg9KGYtcykvKG4ubGVuZ3RoLWErMipjKTtyZXR1cm4gaT1yKHMraCpjLGgpLGwmJmkucmV2ZXJzZSgpLG89aCooMS1hKSx0PXt0OiJyYW5nZUJhbmRzIixhOmFyZ3VtZW50c30sZX0sZS5yYW5nZVJvdW5kQmFuZHM9ZnVuY3Rpb24odSxhLGMpe2FyZ3VtZW50cy5sZW5ndGg8MiYmKGE9MCksYXJndW1lbnRzLmxlbmd0aDwzJiYoYz1hKTt2YXIgbD11WzFdPHVbMF0scz11W2wtMF0sZj11WzEtbF0saD1NYXRoLmZsb29yKChmLXMpLyhuLmxlbmd0aC1hKzIqYykpO3JldHVybiBpPXIocytNYXRoLnJvdW5kKChmLXMtKG4ubGVuZ3RoLWEpKmgpLzIpLGgpLGwmJmkucmV2ZXJzZSgpLG89TWF0aC5yb3VuZChoKigxLWEpKSx0PXt0OiJyYW5nZVJvdW5kQmFuZHMiLGE6YXJndW1lbnRzfSxlfSxlLnJhbmdlQmFuZD1mdW5jdGlvbigpe3JldHVybiBvfSxlLnJhbmdlRXh0ZW50PWZ1bmN0aW9uKCl7cmV0dXJuIFBpKHQuYVswXSl9LGUuY29weT1mdW5jdGlvbigpe3JldHVybiBRaShuLHQpfSxlLmRvbWFpbihuKX1mdW5jdGlvbiBubyhuLHQpe2Z1bmN0aW9uIGkoKXt2YXIgZT0wLHI9dC5sZW5ndGg7Zm9yKGE9W107KytlPHI7KWFbZS0xXT10YS5xdWFudGlsZShuLGUvcik7cmV0dXJuIG99ZnVuY3Rpb24gbyhuKXtyZXR1cm4gaXNOYU4obj0rbik/dm9pZCAwOnRbdGEuYmlzZWN0KGEsbildfXZhciBhO3JldHVybiBvLmRvbWFpbj1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obj10Lm1hcChyKS5maWx0ZXIodSkuc29ydChlKSxpKCkpOm59LG8ucmFuZ2U9ZnVuY3Rpb24obil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHQ9bixpKCkpOnR9LG8ucXVhbnRpbGVzPWZ1bmN0aW9uKCl7cmV0dXJuIGF9LG8uaW52ZXJ0RXh0ZW50PWZ1bmN0aW9uKGUpe3JldHVybiBlPXQuaW5kZXhPZihlKSwwPmU/WzAvMCwwLzBdOltlPjA/YVtlLTFdOm5bMF0sZTxhLmxlbmd0aD9hW2VdOm5bbi5sZW5ndGgtMV1dfSxvLmNvcHk9ZnVuY3Rpb24oKXtyZXR1cm4gbm8obix0KX0saSgpfWZ1bmN0aW9uIHRvKG4sdCxlKXtmdW5jdGlvbiByKHQpe3JldHVybiBlW01hdGgubWF4KDAsTWF0aC5taW4obyxNYXRoLmZsb29yKGkqKHQtbikpKSldfWZ1bmN0aW9uIHUoKXtyZXR1cm4gaT1lLmxlbmd0aC8odC1uKSxvPWUubGVuZ3RoLTEscn12YXIgaSxvO3JldHVybiByLmRvbWFpbj1mdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obj0rZVswXSx0PStlW2UubGVuZ3RoLTFdLHUoKSk6W24sdF19LHIucmFuZ2U9ZnVuY3Rpb24obil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGU9bix1KCkpOmV9LHIuaW52ZXJ0RXh0ZW50PWZ1bmN0aW9uKHQpe3JldHVybiB0PWUuaW5kZXhPZih0KSx0PTA+dD8wLzA6dC9pK24sW3QsdCsxL2ldfSxyLmNvcHk9ZnVuY3Rpb24oKXtyZXR1cm4gdG8obix0LGUpfSx1KCl9ZnVuY3Rpb24gZW8obix0KXtmdW5jdGlvbiBlKGUpe3JldHVybiBlPj1lP3RbdGEuYmlzZWN0KG4sZSldOnZvaWQgMH1yZXR1cm4gZS5kb21haW49ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG49dCxlKTpufSxlLnJhbmdlPWZ1bmN0aW9uKG4pe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh0PW4sZSk6dH0sZS5pbnZlcnRFeHRlbnQ9ZnVuY3Rpb24oZSl7cmV0dXJuIGU9dC5pbmRleE9mKGUpLFtuW2UtMV0sbltlXV19LGUuY29weT1mdW5jdGlvbigpe3JldHVybiBlbyhuLHQpfSxlfWZ1bmN0aW9uIHJvKG4pe2Z1bmN0aW9uIHQobil7cmV0dXJuK259cmV0dXJuIHQuaW52ZXJ0PXQsdC5kb21haW49dC5yYW5nZT1mdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obj1lLm1hcCh0KSx0KTpufSx0LnRpY2tzPWZ1bmN0aW9uKHQpe3JldHVybiBYaShuLHQpfSx0LnRpY2tGb3JtYXQ9ZnVuY3Rpb24odCxlKXtyZXR1cm4gJGkobix0LGUpfSx0LmNvcHk9ZnVuY3Rpb24oKXtyZXR1cm4gcm8obil9LHR9ZnVuY3Rpb24gdW8oKXtyZXR1cm4gMH1mdW5jdGlvbiBpbyhuKXtyZXR1cm4gbi5pbm5lclJhZGl1c31mdW5jdGlvbiBvbyhuKXtyZXR1cm4gbi5vdXRlclJhZGl1c31mdW5jdGlvbiBhbyhuKXtyZXR1cm4gbi5zdGFydEFuZ2xlfWZ1bmN0aW9uIGNvKG4pe3JldHVybiBuLmVuZEFuZ2xlfWZ1bmN0aW9uIGxvKG4pe3JldHVybiBuJiZuLnBhZEFuZ2xlfWZ1bmN0aW9uIHNvKG4sdCxlLHIpe3JldHVybihuLWUpKnQtKHQtcikqbj4wPzA6MX1mdW5jdGlvbiBmbyhuLHQsZSxyLHUpe3ZhciBpPW5bMF0tdFswXSxvPW5bMV0tdFsxXSxhPSh1P3I6LXIpL01hdGguc3FydChpKmkrbypvKSxjPWEqbyxsPS1hKmkscz1uWzBdK2MsZj1uWzFdK2wsaD10WzBdK2MsZz10WzFdK2wscD0ocytoKS8yLHY9KGYrZykvMixkPWgtcyxtPWctZix5PWQqZCttKm0sTT1lLXIseD1zKmctaCpmLGI9KDA+bT8tMToxKSpNYXRoLnNxcnQoTSpNKnkteCp4KSxfPSh4Km0tZCpiKS95LHc9KC14KmQtbSpiKS95LFM9KHgqbStkKmIpL3ksaz0oLXgqZCttKmIpL3ksRT1fLXAsQT13LXYsTj1TLXAsQz1rLXY7cmV0dXJuIEUqRStBKkE+TipOK0MqQyYmKF89Uyx3PWspLFtbXy1jLHctbF0sW18qZS9NLHcqZS9NXV19ZnVuY3Rpb24gaG8obil7ZnVuY3Rpb24gdCh0KXtmdW5jdGlvbiBvKCl7bC5wdXNoKCJNIixpKG4ocyksYSkpfWZvcih2YXIgYyxsPVtdLHM9W10sZj0tMSxoPXQubGVuZ3RoLGc9RXQoZSkscD1FdChyKTsrK2Y8aDspdS5jYWxsKHRoaXMsYz10W2ZdLGYpP3MucHVzaChbK2cuY2FsbCh0aGlzLGMsZiksK3AuY2FsbCh0aGlzLGMsZildKTpzLmxlbmd0aCYmKG8oKSxzPVtdKTtyZXR1cm4gcy5sZW5ndGgmJm8oKSxsLmxlbmd0aD9sLmpvaW4oIiIpOm51bGx9dmFyIGU9QXIscj1Ocix1PU5lLGk9Z28sbz1pLmtleSxhPS43O3JldHVybiB0Lng9ZnVuY3Rpb24obil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGU9bix0KTplfSx0Lnk9ZnVuY3Rpb24obil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHI9bix0KTpyfSx0LmRlZmluZWQ9ZnVuY3Rpb24obil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHU9bix0KTp1fSx0LmludGVycG9sYXRlPWZ1bmN0aW9uKG4pe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhvPSJmdW5jdGlvbiI9PXR5cGVvZiBuP2k9bjooaT1FbC5nZXQobil8fGdvKS5rZXksdCk6b30sdC50ZW5zaW9uPWZ1bmN0aW9uKG4pe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhhPW4sdCk6YX0sdH1mdW5jdGlvbiBnbyhuKXtyZXR1cm4gbi5qb2luKCJMIil9ZnVuY3Rpb24gcG8obil7cmV0dXJuIGdvKG4pKyJaIn1mdW5jdGlvbiB2byhuKXtmb3IodmFyIHQ9MCxlPW4ubGVuZ3RoLHI9blswXSx1PVtyWzBdLCIsIixyWzFdXTsrK3Q8ZTspdS5wdXNoKCJIIiwoclswXSsocj1uW3RdKVswXSkvMiwiViIsclsxXSk7cmV0dXJuIGU+MSYmdS5wdXNoKCJIIixyWzBdKSx1LmpvaW4oIiIpfWZ1bmN0aW9uIG1vKG4pe2Zvcih2YXIgdD0wLGU9bi5sZW5ndGgscj1uWzBdLHU9W3JbMF0sIiwiLHJbMV1dOysrdDxlOyl1LnB1c2goIlYiLChyPW5bdF0pWzFdLCJIIixyWzBdKTtyZXR1cm4gdS5qb2luKCIiKX1mdW5jdGlvbiB5byhuKXtmb3IodmFyIHQ9MCxlPW4ubGVuZ3RoLHI9blswXSx1PVtyWzBdLCIsIixyWzFdXTsrK3Q8ZTspdS5wdXNoKCJIIiwocj1uW3RdKVswXSwiViIsclsxXSk7cmV0dXJuIHUuam9pbigiIil9ZnVuY3Rpb24gTW8obix0KXtyZXR1cm4gbi5sZW5ndGg8ND9nbyhuKTpuWzFdK19vKG4uc2xpY2UoMSwtMSksd28obix0KSl9ZnVuY3Rpb24geG8obix0KXtyZXR1cm4gbi5sZW5ndGg8Mz9nbyhuKTpuWzBdK19vKChuLnB1c2goblswXSksbiksd28oW25bbi5sZW5ndGgtMl1dLmNvbmNhdChuLFtuWzFdXSksdCkpfWZ1bmN0aW9uIGJvKG4sdCl7cmV0dXJuIG4ubGVuZ3RoPDM/Z28obik6blswXStfbyhuLHdvKG4sdCkpfWZ1bmN0aW9uIF9vKG4sdCl7aWYodC5sZW5ndGg8MXx8bi5sZW5ndGghPXQubGVuZ3RoJiZuLmxlbmd0aCE9dC5sZW5ndGgrMilyZXR1cm4gZ28obik7dmFyIGU9bi5sZW5ndGghPXQubGVuZ3RoLHI9IiIsdT1uWzBdLGk9blsxXSxvPXRbMF0sYT1vLGM9MTtpZihlJiYocis9IlEiKyhpWzBdLTIqb1swXS8zKSsiLCIrKGlbMV0tMipvWzFdLzMpKyIsIitpWzBdKyIsIitpWzFdLHU9blsxXSxjPTIpLHQubGVuZ3RoPjEpe2E9dFsxXSxpPW5bY10sYysrLHIrPSJDIisodVswXStvWzBdKSsiLCIrKHVbMV0rb1sxXSkrIiwiKyhpWzBdLWFbMF0pKyIsIisoaVsxXS1hWzFdKSsiLCIraVswXSsiLCIraVsxXTtmb3IodmFyIGw9MjtsPHQubGVuZ3RoO2wrKyxjKyspaT1uW2NdLGE9dFtsXSxyKz0iUyIrKGlbMF0tYVswXSkrIiwiKyhpWzFdLWFbMV0pKyIsIitpWzBdKyIsIitpWzFdfWlmKGUpe3ZhciBzPW5bY107cis9IlEiKyhpWzBdKzIqYVswXS8zKSsiLCIrKGlbMV0rMiphWzFdLzMpKyIsIitzWzBdKyIsIitzWzFdfXJldHVybiByfWZ1bmN0aW9uIHdvKG4sdCl7Zm9yKHZhciBlLHI9W10sdT0oMS10KS8yLGk9blswXSxvPW5bMV0sYT0xLGM9bi5sZW5ndGg7KythPGM7KWU9aSxpPW8sbz1uW2FdLHIucHVzaChbdSoob1swXS1lWzBdKSx1KihvWzFdLWVbMV0pXSk7cmV0dXJuIHJ9ZnVuY3Rpb24gU28obil7aWYobi5sZW5ndGg8MylyZXR1cm4gZ28obik7dmFyIHQ9MSxlPW4ubGVuZ3RoLHI9blswXSx1PXJbMF0saT1yWzFdLG89W3UsdSx1LChyPW5bMV0pWzBdXSxhPVtpLGksaSxyWzFdXSxjPVt1LCIsIixpLCJMIixObyhDbCxvKSwiLCIsTm8oQ2wsYSldO2ZvcihuLnB1c2gobltlLTFdKTsrK3Q8PWU7KXI9blt0XSxvLnNoaWZ0KCksby5wdXNoKHJbMF0pLGEuc2hpZnQoKSxhLnB1c2goclsxXSksQ28oYyxvLGEpO3JldHVybiBuLnBvcCgpLGMucHVzaCgiTCIsciksYy5qb2luKCIiKX1mdW5jdGlvbiBrbyhuKXtpZihuLmxlbmd0aDw0KXJldHVybiBnbyhuKTtmb3IodmFyIHQsZT1bXSxyPS0xLHU9bi5sZW5ndGgsaT1bMF0sbz1bMF07KytyPDM7KXQ9bltyXSxpLnB1c2godFswXSksby5wdXNoKHRbMV0pO2ZvcihlLnB1c2goTm8oQ2wsaSkrIiwiK05vKENsLG8pKSwtLXI7KytyPHU7KXQ9bltyXSxpLnNoaWZ0KCksaS5wdXNoKHRbMF0pLG8uc2hpZnQoKSxvLnB1c2godFsxXSksQ28oZSxpLG8pO3JldHVybiBlLmpvaW4oIiIpfWZ1bmN0aW9uIEVvKG4pe2Zvcih2YXIgdCxlLHI9LTEsdT1uLmxlbmd0aCxpPXUrNCxvPVtdLGE9W107KytyPDQ7KWU9bltyJXVdLG8ucHVzaChlWzBdKSxhLnB1c2goZVsxXSk7Zm9yKHQ9W05vKENsLG8pLCIsIixObyhDbCxhKV0sLS1yOysrcjxpOyllPW5bciV1XSxvLnNoaWZ0KCksby5wdXNoKGVbMF0pLGEuc2hpZnQoKSxhLnB1c2goZVsxXSksQ28odCxvLGEpO3JldHVybiB0LmpvaW4oIiIpfWZ1bmN0aW9uIEFvKG4sdCl7dmFyIGU9bi5sZW5ndGgtMTtpZihlKWZvcih2YXIgcix1LGk9blswXVswXSxvPW5bMF1bMV0sYT1uW2VdWzBdLWksYz1uW2VdWzFdLW8sbD0tMTsrK2w8PWU7KXI9bltsXSx1PWwvZSxyWzBdPXQqclswXSsoMS10KSooaSt1KmEpLHJbMV09dCpyWzFdKygxLXQpKihvK3UqYyk7cmV0dXJuIFNvKG4pfWZ1bmN0aW9uIE5vKG4sdCl7cmV0dXJuIG5bMF0qdFswXStuWzFdKnRbMV0rblsyXSp0WzJdK25bM10qdFszXX1mdW5jdGlvbiBDbyhuLHQsZSl7bi5wdXNoKCJDIixObyhBbCx0KSwiLCIsTm8oQWwsZSksIiwiLE5vKE5sLHQpLCIsIixObyhObCxlKSwiLCIsTm8oQ2wsdCksIiwiLE5vKENsLGUpKX1mdW5jdGlvbiB6byhuLHQpe3JldHVybih0WzFdLW5bMV0pLyh0WzBdLW5bMF0pfWZ1bmN0aW9uIHFvKG4pe2Zvcih2YXIgdD0wLGU9bi5sZW5ndGgtMSxyPVtdLHU9blswXSxpPW5bMV0sbz1yWzBdPXpvKHUsaSk7Kyt0PGU7KXJbdF09KG8rKG89em8odT1pLGk9blt0KzFdKSkpLzI7cmV0dXJuIHJbdF09byxyfWZ1bmN0aW9uIExvKG4pe2Zvcih2YXIgdCxlLHIsdSxpPVtdLG89cW8obiksYT0tMSxjPW4ubGVuZ3RoLTE7KythPGM7KXQ9em8oblthXSxuW2ErMV0pLGdhKHQpPENhP29bYV09b1thKzFdPTA6KGU9b1thXS90LHI9b1thKzFdL3QsdT1lKmUrcipyLHU+OSYmKHU9Myp0L01hdGguc3FydCh1KSxvW2FdPXUqZSxvW2ErMV09dSpyKSk7Zm9yKGE9LTE7KythPD1jOyl1PShuW01hdGgubWluKGMsYSsxKV1bMF0tbltNYXRoLm1heCgwLGEtMSldWzBdKS8oNiooMStvW2FdKm9bYV0pKSxpLnB1c2goW3V8fDAsb1thXSp1fHwwXSk7cmV0dXJuIGl9ZnVuY3Rpb24gVG8obil7cmV0dXJuIG4ubGVuZ3RoPDM/Z28obik6blswXStfbyhuLExvKG4pKX1mdW5jdGlvbiBSbyhuKXtmb3IodmFyIHQsZSxyLHU9LTEsaT1uLmxlbmd0aDsrK3U8aTspdD1uW3VdLGU9dFswXSxyPXRbMV0tUmEsdFswXT1lKk1hdGguY29zKHIpLHRbMV09ZSpNYXRoLnNpbihyKTtyZXR1cm4gbn1mdW5jdGlvbiBEbyhuKXtmdW5jdGlvbiB0KHQpe2Z1bmN0aW9uIGMoKXt2LnB1c2goIk0iLGEobihtKSxmKSxzLGwobihkLnJldmVyc2UoKSksZiksIloiKX1mb3IodmFyIGgsZyxwLHY9W10sZD1bXSxtPVtdLHk9LTEsTT10Lmxlbmd0aCx4PUV0KGUpLGI9RXQodSksXz1lPT09cj9mdW5jdGlvbigpe3JldHVybiBnfTpFdChyKSx3PXU9PT1pP2Z1bmN0aW9uKCl7cmV0dXJuIHB9OkV0KGkpOysreTxNOylvLmNhbGwodGhpcyxoPXRbeV0seSk/KGQucHVzaChbZz0reC5jYWxsKHRoaXMsaCx5KSxwPStiLmNhbGwodGhpcyxoLHkpXSksbS5wdXNoKFsrXy5jYWxsKHRoaXMsaCx5KSwrdy5jYWxsKHRoaXMsaCx5KV0pKTpkLmxlbmd0aCYmKGMoKSxkPVtdLG09W10pO3JldHVybiBkLmxlbmd0aCYmYygpLHYubGVuZ3RoP3Yuam9pbigiIik6bnVsbH12YXIgZT1BcixyPUFyLHU9MCxpPU5yLG89TmUsYT1nbyxjPWEua2V5LGw9YSxzPSJMIixmPS43O3JldHVybiB0Lng9ZnVuY3Rpb24obil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGU9cj1uLHQpOnJ9LHQueDA9ZnVuY3Rpb24obil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGU9bix0KTplfSx0LngxPWZ1bmN0aW9uKG4pe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhyPW4sdCk6cg0KfSx0Lnk9ZnVuY3Rpb24obil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHU9aT1uLHQpOml9LHQueTA9ZnVuY3Rpb24obil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHU9bix0KTp1fSx0LnkxPWZ1bmN0aW9uKG4pe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhpPW4sdCk6aX0sdC5kZWZpbmVkPWZ1bmN0aW9uKG4pe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhvPW4sdCk6b30sdC5pbnRlcnBvbGF0ZT1mdW5jdGlvbihuKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oYz0iZnVuY3Rpb24iPT10eXBlb2Ygbj9hPW46KGE9RWwuZ2V0KG4pfHxnbykua2V5LGw9YS5yZXZlcnNlfHxhLHM9YS5jbG9zZWQ/Ik0iOiJMIix0KTpjfSx0LnRlbnNpb249ZnVuY3Rpb24obil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGY9bix0KTpmfSx0fWZ1bmN0aW9uIFBvKG4pe3JldHVybiBuLnJhZGl1c31mdW5jdGlvbiBVbyhuKXtyZXR1cm5bbi54LG4ueV19ZnVuY3Rpb24gam8obil7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIHQ9bi5hcHBseSh0aGlzLGFyZ3VtZW50cyksZT10WzBdLHI9dFsxXS1SYTtyZXR1cm5bZSpNYXRoLmNvcyhyKSxlKk1hdGguc2luKHIpXX19ZnVuY3Rpb24gRm8oKXtyZXR1cm4gNjR9ZnVuY3Rpb24gSG8oKXtyZXR1cm4iY2lyY2xlIn1mdW5jdGlvbiBPbyhuKXt2YXIgdD1NYXRoLnNxcnQobi9xYSk7cmV0dXJuIk0wLCIrdCsiQSIrdCsiLCIrdCsiIDAgMSwxIDAsIistdCsiQSIrdCsiLCIrdCsiIDAgMSwxIDAsIit0KyJaIn1mdW5jdGlvbiBJbyhuKXtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgdCxlOyh0PXRoaXNbbl0pJiYoZT10W3QuYWN0aXZlXSkmJigtLXQuY291bnQ/ZGVsZXRlIHRbdC5hY3RpdmVdOmRlbGV0ZSB0aGlzW25dLHQuYWN0aXZlKz0uNSxlLmV2ZW50JiZlLmV2ZW50LmludGVycnVwdC5jYWxsKHRoaXMsdGhpcy5fX2RhdGFfXyxlLmluZGV4KSl9fWZ1bmN0aW9uIFlvKG4sdCxlKXtyZXR1cm4geWEobixQbCksbi5uYW1lc3BhY2U9dCxuLmlkPWUsbn1mdW5jdGlvbiBabyhuLHQsZSxyKXt2YXIgdT1uLmlkLGk9bi5uYW1lc3BhY2U7cmV0dXJuIFkobiwiZnVuY3Rpb24iPT10eXBlb2YgZT9mdW5jdGlvbihuLG8sYSl7bltpXVt1XS50d2Vlbi5zZXQodCxyKGUuY2FsbChuLG4uX19kYXRhX18sbyxhKSkpfTooZT1yKGUpLGZ1bmN0aW9uKG4pe25baV1bdV0udHdlZW4uc2V0KHQsZSl9KSl9ZnVuY3Rpb24gVm8obil7cmV0dXJuIG51bGw9PW4mJihuPSIiKSxmdW5jdGlvbigpe3RoaXMudGV4dENvbnRlbnQ9bn19ZnVuY3Rpb24gWG8obil7cmV0dXJuIG51bGw9PW4/Il9fdHJhbnNpdGlvbl9fIjoiX190cmFuc2l0aW9uXyIrbisiX18ifWZ1bmN0aW9uICRvKG4sdCxlLHIsdSl7dmFyIGk9bltlXXx8KG5bZV09e2FjdGl2ZTowLGNvdW50OjB9KSxvPWlbcl07aWYoIW8pe3ZhciBhPXUudGltZTtvPWlbcl09e3R3ZWVuOm5ldyBsLHRpbWU6YSxkZWxheTp1LmRlbGF5LGR1cmF0aW9uOnUuZHVyYXRpb24sZWFzZTp1LmVhc2UsaW5kZXg6dH0sdT1udWxsLCsraS5jb3VudCx0YS50aW1lcihmdW5jdGlvbih1KXtmdW5jdGlvbiBjKGUpe2lmKGkuYWN0aXZlPnIpcmV0dXJuIHMoKTt2YXIgdT1pW2kuYWN0aXZlXTt1JiYoLS1pLmNvdW50LGRlbGV0ZSBpW2kuYWN0aXZlXSx1LmV2ZW50JiZ1LmV2ZW50LmludGVycnVwdC5jYWxsKG4sbi5fX2RhdGFfXyx1LmluZGV4KSksaS5hY3RpdmU9cixvLmV2ZW50JiZvLmV2ZW50LnN0YXJ0LmNhbGwobixuLl9fZGF0YV9fLHQpLG8udHdlZW4uZm9yRWFjaChmdW5jdGlvbihlLHIpeyhyPXIuY2FsbChuLG4uX19kYXRhX18sdCkpJiZ2LnB1c2gocil9KSxoPW8uZWFzZSxmPW8uZHVyYXRpb24sdGEudGltZXIoZnVuY3Rpb24oKXtyZXR1cm4gcC5jPWwoZXx8MSk/TmU6bCwxfSwwLGEpfWZ1bmN0aW9uIGwoZSl7aWYoaS5hY3RpdmUhPT1yKXJldHVybiAxO2Zvcih2YXIgdT1lL2YsYT1oKHUpLGM9di5sZW5ndGg7Yz4wOyl2Wy0tY10uY2FsbChuLGEpO3JldHVybiB1Pj0xPyhvLmV2ZW50JiZvLmV2ZW50LmVuZC5jYWxsKG4sbi5fX2RhdGFfXyx0KSxzKCkpOnZvaWQgMH1mdW5jdGlvbiBzKCl7cmV0dXJuLS1pLmNvdW50P2RlbGV0ZSBpW3JdOmRlbGV0ZSBuW2VdLDF9dmFyIGYsaCxnPW8uZGVsYXkscD1lYyx2PVtdO3JldHVybiBwLnQ9ZythLHU+PWc/Yyh1LWcpOnZvaWQocC5jPWMpfSwwLGEpfX1mdW5jdGlvbiBCbyhuLHQsZSl7bi5hdHRyKCJ0cmFuc2Zvcm0iLGZ1bmN0aW9uKG4pe3ZhciByPXQobik7cmV0dXJuInRyYW5zbGF0ZSgiKyhpc0Zpbml0ZShyKT9yOmUobikpKyIsMCkifSl9ZnVuY3Rpb24gV28obix0LGUpe24uYXR0cigidHJhbnNmb3JtIixmdW5jdGlvbihuKXt2YXIgcj10KG4pO3JldHVybiJ0cmFuc2xhdGUoMCwiKyhpc0Zpbml0ZShyKT9yOmUobikpKyIpIn0pfWZ1bmN0aW9uIEpvKG4pe3JldHVybiBuLnRvSVNPU3RyaW5nKCl9ZnVuY3Rpb24gR28obix0LGUpe2Z1bmN0aW9uIHIodCl7cmV0dXJuIG4odCl9ZnVuY3Rpb24gdShuLGUpe3ZhciByPW5bMV0tblswXSx1PXIvZSxpPXRhLmJpc2VjdChWbCx1KTtyZXR1cm4gaT09VmwubGVuZ3RoP1t0LnllYXIsVmkobi5tYXAoZnVuY3Rpb24obil7cmV0dXJuIG4vMzE1MzZlNn0pLGUpWzJdXTppP3RbdS9WbFtpLTFdPFZsW2ldL3U/aS0xOmldOltCbCxWaShuLGUpWzJdXX1yZXR1cm4gci5pbnZlcnQ9ZnVuY3Rpb24odCl7cmV0dXJuIEtvKG4uaW52ZXJ0KHQpKX0sci5kb21haW49ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG4uZG9tYWluKHQpLHIpOm4uZG9tYWluKCkubWFwKEtvKX0sci5uaWNlPWZ1bmN0aW9uKG4sdCl7ZnVuY3Rpb24gZShlKXtyZXR1cm4haXNOYU4oZSkmJiFuLnJhbmdlKGUsS28oK2UrMSksdCkubGVuZ3RofXZhciBpPXIuZG9tYWluKCksbz1QaShpKSxhPW51bGw9PW4/dShvLDEwKToibnVtYmVyIj09dHlwZW9mIG4mJnUobyxuKTtyZXR1cm4gYSYmKG49YVswXSx0PWFbMV0pLHIuZG9tYWluKEZpKGksdD4xP3tmbG9vcjpmdW5jdGlvbih0KXtmb3IoO2UodD1uLmZsb29yKHQpKTspdD1Lbyh0LTEpO3JldHVybiB0fSxjZWlsOmZ1bmN0aW9uKHQpe2Zvcig7ZSh0PW4uY2VpbCh0KSk7KXQ9S28oK3QrMSk7cmV0dXJuIHR9fTpuKSl9LHIudGlja3M9ZnVuY3Rpb24obix0KXt2YXIgZT1QaShyLmRvbWFpbigpKSxpPW51bGw9PW4/dShlLDEwKToibnVtYmVyIj09dHlwZW9mIG4/dShlLG4pOiFuLnJhbmdlJiZbe3JhbmdlOm59LHRdO3JldHVybiBpJiYobj1pWzBdLHQ9aVsxXSksbi5yYW5nZShlWzBdLEtvKCtlWzFdKzEpLDE+dD8xOnQpfSxyLnRpY2tGb3JtYXQ9ZnVuY3Rpb24oKXtyZXR1cm4gZX0sci5jb3B5PWZ1bmN0aW9uKCl7cmV0dXJuIEdvKG4uY29weSgpLHQsZSl9LFlpKHIsbil9ZnVuY3Rpb24gS28obil7cmV0dXJuIG5ldyBEYXRlKG4pfWZ1bmN0aW9uIFFvKG4pe3JldHVybiBKU09OLnBhcnNlKG4ucmVzcG9uc2VUZXh0KX1mdW5jdGlvbiBuYShuKXt2YXIgdD11YS5jcmVhdGVSYW5nZSgpO3JldHVybiB0LnNlbGVjdE5vZGUodWEuYm9keSksdC5jcmVhdGVDb250ZXh0dWFsRnJhZ21lbnQobi5yZXNwb25zZVRleHQpfXZhciB0YT17dmVyc2lvbjoiMy41LjUifSxlYT1bXS5zbGljZSxyYT1mdW5jdGlvbihuKXtyZXR1cm4gZWEuY2FsbChuKX0sdWE9dGhpcy5kb2N1bWVudDtpZih1YSl0cnl7cmEodWEuZG9jdW1lbnRFbGVtZW50LmNoaWxkTm9kZXMpWzBdLm5vZGVUeXBlfWNhdGNoKGlhKXtyYT1mdW5jdGlvbihuKXtmb3IodmFyIHQ9bi5sZW5ndGgsZT1uZXcgQXJyYXkodCk7dC0tOyllW3RdPW5bdF07cmV0dXJuIGV9fWlmKERhdGUubm93fHwoRGF0ZS5ub3c9ZnVuY3Rpb24oKXtyZXR1cm4rbmV3IERhdGV9KSx1YSl0cnl7dWEuY3JlYXRlRWxlbWVudCgiRElWIikuc3R5bGUuc2V0UHJvcGVydHkoIm9wYWNpdHkiLDAsIiIpfWNhdGNoKG9hKXt2YXIgYWE9dGhpcy5FbGVtZW50LnByb3RvdHlwZSxjYT1hYS5zZXRBdHRyaWJ1dGUsbGE9YWEuc2V0QXR0cmlidXRlTlMsc2E9dGhpcy5DU1NTdHlsZURlY2xhcmF0aW9uLnByb3RvdHlwZSxmYT1zYS5zZXRQcm9wZXJ0eTthYS5zZXRBdHRyaWJ1dGU9ZnVuY3Rpb24obix0KXtjYS5jYWxsKHRoaXMsbix0KyIiKX0sYWEuc2V0QXR0cmlidXRlTlM9ZnVuY3Rpb24obix0LGUpe2xhLmNhbGwodGhpcyxuLHQsZSsiIil9LHNhLnNldFByb3BlcnR5PWZ1bmN0aW9uKG4sdCxlKXtmYS5jYWxsKHRoaXMsbix0KyIiLGUpfX10YS5hc2NlbmRpbmc9ZSx0YS5kZXNjZW5kaW5nPWZ1bmN0aW9uKG4sdCl7cmV0dXJuIG4+dD8tMTp0Pm4/MTp0Pj1uPzA6MC8wfSx0YS5taW49ZnVuY3Rpb24obix0KXt2YXIgZSxyLHU9LTEsaT1uLmxlbmd0aDtpZigxPT09YXJndW1lbnRzLmxlbmd0aCl7Zm9yKDsrK3U8aTspaWYobnVsbCE9KHI9blt1XSkmJnI+PXIpe2U9cjticmVha31mb3IoOysrdTxpOyludWxsIT0ocj1uW3VdKSYmZT5yJiYoZT1yKX1lbHNle2Zvcig7Kyt1PGk7KWlmKG51bGwhPShyPXQuY2FsbChuLG5bdV0sdSkpJiZyPj1yKXtlPXI7YnJlYWt9Zm9yKDsrK3U8aTspbnVsbCE9KHI9dC5jYWxsKG4sblt1XSx1KSkmJmU+ciYmKGU9cil9cmV0dXJuIGV9LHRhLm1heD1mdW5jdGlvbihuLHQpe3ZhciBlLHIsdT0tMSxpPW4ubGVuZ3RoO2lmKDE9PT1hcmd1bWVudHMubGVuZ3RoKXtmb3IoOysrdTxpOylpZihudWxsIT0ocj1uW3VdKSYmcj49cil7ZT1yO2JyZWFrfWZvcig7Kyt1PGk7KW51bGwhPShyPW5bdV0pJiZyPmUmJihlPXIpfWVsc2V7Zm9yKDsrK3U8aTspaWYobnVsbCE9KHI9dC5jYWxsKG4sblt1XSx1KSkmJnI+PXIpe2U9cjticmVha31mb3IoOysrdTxpOyludWxsIT0ocj10LmNhbGwobixuW3VdLHUpKSYmcj5lJiYoZT1yKX1yZXR1cm4gZX0sdGEuZXh0ZW50PWZ1bmN0aW9uKG4sdCl7dmFyIGUscix1LGk9LTEsbz1uLmxlbmd0aDtpZigxPT09YXJndW1lbnRzLmxlbmd0aCl7Zm9yKDsrK2k8bzspaWYobnVsbCE9KHI9bltpXSkmJnI+PXIpe2U9dT1yO2JyZWFrfWZvcig7KytpPG87KW51bGwhPShyPW5baV0pJiYoZT5yJiYoZT1yKSxyPnUmJih1PXIpKX1lbHNle2Zvcig7KytpPG87KWlmKG51bGwhPShyPXQuY2FsbChuLG5baV0saSkpJiZyPj1yKXtlPXU9cjticmVha31mb3IoOysraTxvOyludWxsIT0ocj10LmNhbGwobixuW2ldLGkpKSYmKGU+ciYmKGU9cikscj51JiYodT1yKSl9cmV0dXJuW2UsdV19LHRhLnN1bT1mdW5jdGlvbihuLHQpe3ZhciBlLHI9MCxpPW4ubGVuZ3RoLG89LTE7aWYoMT09PWFyZ3VtZW50cy5sZW5ndGgpZm9yKDsrK288aTspdShlPStuW29dKSYmKHIrPWUpO2Vsc2UgZm9yKDsrK288aTspdShlPSt0LmNhbGwobixuW29dLG8pKSYmKHIrPWUpO3JldHVybiByfSx0YS5tZWFuPWZ1bmN0aW9uKG4sdCl7dmFyIGUsaT0wLG89bi5sZW5ndGgsYT0tMSxjPW87aWYoMT09PWFyZ3VtZW50cy5sZW5ndGgpZm9yKDsrK2E8bzspdShlPXIoblthXSkpP2krPWU6LS1jO2Vsc2UgZm9yKDsrK2E8bzspdShlPXIodC5jYWxsKG4sblthXSxhKSkpP2krPWU6LS1jO3JldHVybiBjP2kvYzp2b2lkIDB9LHRhLnF1YW50aWxlPWZ1bmN0aW9uKG4sdCl7dmFyIGU9KG4ubGVuZ3RoLTEpKnQrMSxyPU1hdGguZmxvb3IoZSksdT0rbltyLTFdLGk9ZS1yO3JldHVybiBpP3UraSoobltyXS11KTp1fSx0YS5tZWRpYW49ZnVuY3Rpb24obix0KXt2YXIgaSxvPVtdLGE9bi5sZW5ndGgsYz0tMTtpZigxPT09YXJndW1lbnRzLmxlbmd0aClmb3IoOysrYzxhOyl1KGk9cihuW2NdKSkmJm8ucHVzaChpKTtlbHNlIGZvcig7KytjPGE7KXUoaT1yKHQuY2FsbChuLG5bY10sYykpKSYmby5wdXNoKGkpO3JldHVybiBvLmxlbmd0aD90YS5xdWFudGlsZShvLnNvcnQoZSksLjUpOnZvaWQgMH0sdGEudmFyaWFuY2U9ZnVuY3Rpb24obix0KXt2YXIgZSxpLG89bi5sZW5ndGgsYT0wLGM9MCxsPS0xLHM9MDtpZigxPT09YXJndW1lbnRzLmxlbmd0aClmb3IoOysrbDxvOyl1KGU9cihuW2xdKSkmJihpPWUtYSxhKz1pLysrcyxjKz1pKihlLWEpKTtlbHNlIGZvcig7KytsPG87KXUoZT1yKHQuY2FsbChuLG5bbF0sbCkpKSYmKGk9ZS1hLGErPWkvKytzLGMrPWkqKGUtYSkpO3JldHVybiBzPjE/Yy8ocy0xKTp2b2lkIDB9LHRhLmRldmlhdGlvbj1mdW5jdGlvbigpe3ZhciBuPXRhLnZhcmlhbmNlLmFwcGx5KHRoaXMsYXJndW1lbnRzKTtyZXR1cm4gbj9NYXRoLnNxcnQobik6bn07dmFyIGhhPWkoZSk7dGEuYmlzZWN0TGVmdD1oYS5sZWZ0LHRhLmJpc2VjdD10YS5iaXNlY3RSaWdodD1oYS5yaWdodCx0YS5iaXNlY3Rvcj1mdW5jdGlvbihuKXtyZXR1cm4gaSgxPT09bi5sZW5ndGg/ZnVuY3Rpb24odCxyKXtyZXR1cm4gZShuKHQpLHIpfTpuKX0sdGEuc2h1ZmZsZT1mdW5jdGlvbihuLHQsZSl7KGk9YXJndW1lbnRzLmxlbmd0aCk8MyYmKGU9bi5sZW5ndGgsMj5pJiYodD0wKSk7Zm9yKHZhciByLHUsaT1lLXQ7aTspdT1NYXRoLnJhbmRvbSgpKmktLXwwLHI9bltpK3RdLG5baSt0XT1uW3UrdF0sblt1K3RdPXI7cmV0dXJuIG59LHRhLnBlcm11dGU9ZnVuY3Rpb24obix0KXtmb3IodmFyIGU9dC5sZW5ndGgscj1uZXcgQXJyYXkoZSk7ZS0tOylyW2VdPW5bdFtlXV07cmV0dXJuIHJ9LHRhLnBhaXJzPWZ1bmN0aW9uKG4pe2Zvcih2YXIgdCxlPTAscj1uLmxlbmd0aC0xLHU9blswXSxpPW5ldyBBcnJheSgwPnI/MDpyKTtyPmU7KWlbZV09W3Q9dSx1PW5bKytlXV07cmV0dXJuIGl9LHRhLnppcD1mdW5jdGlvbigpe2lmKCEocj1hcmd1bWVudHMubGVuZ3RoKSlyZXR1cm5bXTtmb3IodmFyIG49LTEsdD10YS5taW4oYXJndW1lbnRzLG8pLGU9bmV3IEFycmF5KHQpOysrbjx0Oylmb3IodmFyIHIsdT0tMSxpPWVbbl09bmV3IEFycmF5KHIpOysrdTxyOylpW3VdPWFyZ3VtZW50c1t1XVtuXTtyZXR1cm4gZX0sdGEudHJhbnNwb3NlPWZ1bmN0aW9uKG4pe3JldHVybiB0YS56aXAuYXBwbHkodGEsbil9LHRhLmtleXM9ZnVuY3Rpb24obil7dmFyIHQ9W107Zm9yKHZhciBlIGluIG4pdC5wdXNoKGUpO3JldHVybiB0fSx0YS52YWx1ZXM9ZnVuY3Rpb24obil7dmFyIHQ9W107Zm9yKHZhciBlIGluIG4pdC5wdXNoKG5bZV0pO3JldHVybiB0fSx0YS5lbnRyaWVzPWZ1bmN0aW9uKG4pe3ZhciB0PVtdO2Zvcih2YXIgZSBpbiBuKXQucHVzaCh7a2V5OmUsdmFsdWU6bltlXX0pO3JldHVybiB0fSx0YS5tZXJnZT1mdW5jdGlvbihuKXtmb3IodmFyIHQsZSxyLHU9bi5sZW5ndGgsaT0tMSxvPTA7KytpPHU7KW8rPW5baV0ubGVuZ3RoO2ZvcihlPW5ldyBBcnJheShvKTstLXU+PTA7KWZvcihyPW5bdV0sdD1yLmxlbmd0aDstLXQ+PTA7KWVbLS1vXT1yW3RdO3JldHVybiBlfTt2YXIgZ2E9TWF0aC5hYnM7dGEucmFuZ2U9ZnVuY3Rpb24obix0LGUpe2lmKGFyZ3VtZW50cy5sZW5ndGg8MyYmKGU9MSxhcmd1bWVudHMubGVuZ3RoPDImJih0PW4sbj0wKSksKHQtbikvZT09PTEvMCl0aHJvdyBuZXcgRXJyb3IoImluZmluaXRlIHJhbmdlIik7dmFyIHIsdT1bXSxpPWEoZ2EoZSkpLG89LTE7aWYobio9aSx0Kj1pLGUqPWksMD5lKWZvcig7KHI9bitlKisrbyk+dDspdS5wdXNoKHIvaSk7ZWxzZSBmb3IoOyhyPW4rZSorK28pPHQ7KXUucHVzaChyL2kpO3JldHVybiB1fSx0YS5tYXA9ZnVuY3Rpb24obix0KXt2YXIgZT1uZXcgbDtpZihuIGluc3RhbmNlb2YgbCluLmZvckVhY2goZnVuY3Rpb24obix0KXtlLnNldChuLHQpfSk7ZWxzZSBpZihBcnJheS5pc0FycmF5KG4pKXt2YXIgcix1PS0xLGk9bi5sZW5ndGg7aWYoMT09PWFyZ3VtZW50cy5sZW5ndGgpZm9yKDsrK3U8aTspZS5zZXQodSxuW3VdKTtlbHNlIGZvcig7Kyt1PGk7KWUuc2V0KHQuY2FsbChuLHI9blt1XSx1KSxyKX1lbHNlIGZvcih2YXIgbyBpbiBuKWUuc2V0KG8sbltvXSk7cmV0dXJuIGV9O3ZhciBwYT0iX19wcm90b19fIix2YT0iXHgwMCI7YyhsLHtoYXM6aCxnZXQ6ZnVuY3Rpb24obil7cmV0dXJuIHRoaXMuX1tzKG4pXX0sc2V0OmZ1bmN0aW9uKG4sdCl7cmV0dXJuIHRoaXMuX1tzKG4pXT10fSxyZW1vdmU6ZyxrZXlzOnAsdmFsdWVzOmZ1bmN0aW9uKCl7dmFyIG49W107Zm9yKHZhciB0IGluIHRoaXMuXyluLnB1c2godGhpcy5fW3RdKTtyZXR1cm4gbn0sZW50cmllczpmdW5jdGlvbigpe3ZhciBuPVtdO2Zvcih2YXIgdCBpbiB0aGlzLl8pbi5wdXNoKHtrZXk6Zih0KSx2YWx1ZTp0aGlzLl9bdF19KTtyZXR1cm4gbn0sc2l6ZTp2LGVtcHR5OmQsZm9yRWFjaDpmdW5jdGlvbihuKXtmb3IodmFyIHQgaW4gdGhpcy5fKW4uY2FsbCh0aGlzLGYodCksdGhpcy5fW3RdKX19KSx0YS5uZXN0PWZ1bmN0aW9uKCl7ZnVuY3Rpb24gbih0LG8sYSl7aWYoYT49aS5sZW5ndGgpcmV0dXJuIHI/ci5jYWxsKHUsbyk6ZT9vLnNvcnQoZSk6bztmb3IodmFyIGMscyxmLGgsZz0tMSxwPW8ubGVuZ3RoLHY9aVthKytdLGQ9bmV3IGw7KytnPHA7KShoPWQuZ2V0KGM9dihzPW9bZ10pKSk/aC5wdXNoKHMpOmQuc2V0KGMsW3NdKTtyZXR1cm4gdD8ocz10KCksZj1mdW5jdGlvbihlLHIpe3Muc2V0KGUsbih0LHIsYSkpfSk6KHM9e30sZj1mdW5jdGlvbihlLHIpe3NbZV09bih0LHIsYSl9KSxkLmZvckVhY2goZiksc31mdW5jdGlvbiB0KG4sZSl7aWYoZT49aS5sZW5ndGgpcmV0dXJuIG47dmFyIHI9W10sdT1vW2UrK107cmV0dXJuIG4uZm9yRWFjaChmdW5jdGlvbihuLHUpe3IucHVzaCh7a2V5Om4sdmFsdWVzOnQodSxlKX0pfSksdT9yLnNvcnQoZnVuY3Rpb24obix0KXtyZXR1cm4gdShuLmtleSx0LmtleSl9KTpyfXZhciBlLHIsdT17fSxpPVtdLG89W107cmV0dXJuIHUubWFwPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIG4oZSx0LDApfSx1LmVudHJpZXM9ZnVuY3Rpb24oZSl7cmV0dXJuIHQobih0YS5tYXAsZSwwKSwwKX0sdS5rZXk9ZnVuY3Rpb24obil7cmV0dXJuIGkucHVzaChuKSx1fSx1LnNvcnRLZXlzPWZ1bmN0aW9uKG4pe3JldHVybiBvW2kubGVuZ3RoLTFdPW4sdX0sdS5zb3J0VmFsdWVzPWZ1bmN0aW9uKG4pe3JldHVybiBlPW4sdX0sdS5yb2xsdXA9ZnVuY3Rpb24obil7cmV0dXJuIHI9bix1fSx1fSx0YS5zZXQ9ZnVuY3Rpb24obil7dmFyIHQ9bmV3IG07aWYobilmb3IodmFyIGU9MCxyPW4ubGVuZ3RoO3I+ZTsrK2UpdC5hZGQobltlXSk7cmV0dXJuIHR9LGMobSx7aGFzOmgsYWRkOmZ1bmN0aW9uKG4pe3JldHVybiB0aGlzLl9bcyhuKz0iIildPSEwLG59LHJlbW92ZTpnLHZhbHVlczpwLHNpemU6dixlbXB0eTpkLGZvckVhY2g6ZnVuY3Rpb24obil7Zm9yKHZhciB0IGluIHRoaXMuXyluLmNhbGwodGhpcyxmKHQpKX19KSx0YS5iZWhhdmlvcj17fSx0YS5yZWJpbmQ9ZnVuY3Rpb24obix0KXtmb3IodmFyIGUscj0xLHU9YXJndW1lbnRzLmxlbmd0aDsrK3I8dTspbltlPWFyZ3VtZW50c1tyXV09TShuLHQsdFtlXSk7cmV0dXJuIG59O3ZhciBkYT1bIndlYmtpdCIsIm1zIiwibW96IiwiTW96IiwibyIsIk8iXTt0YS5kaXNwYXRjaD1mdW5jdGlvbigpe2Zvcih2YXIgbj1uZXcgXyx0PS0xLGU9YXJndW1lbnRzLmxlbmd0aDsrK3Q8ZTspblthcmd1bWVudHNbdF1dPXcobik7cmV0dXJuIG59LF8ucHJvdG90eXBlLm9uPWZ1bmN0aW9uKG4sdCl7dmFyIGU9bi5pbmRleE9mKCIuIikscj0iIjtpZihlPj0wJiYocj1uLnNsaWNlKGUrMSksbj1uLnNsaWNlKDAsZSkpLG4pcmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg8Mj90aGlzW25dLm9uKHIpOnRoaXNbbl0ub24ocix0KTtpZigyPT09YXJndW1lbnRzLmxlbmd0aCl7aWYobnVsbD09dClmb3IobiBpbiB0aGlzKXRoaXMuaGFzT3duUHJvcGVydHkobikmJnRoaXNbbl0ub24ocixudWxsKTtyZXR1cm4gdGhpc319LHRhLmV2ZW50PW51bGwsdGEucmVxdW90ZT1mdW5jdGlvbihuKXtyZXR1cm4gbi5yZXBsYWNlKG1hLCJcXCQmIil9O3ZhciBtYT0vW1xcXF5cJFwqXCtcP1x8XFtcXVwoXClcLlx7XH1dL2cseWE9e30uX19wcm90b19fP2Z1bmN0aW9uKG4sdCl7bi5fX3Byb3RvX189dH06ZnVuY3Rpb24obix0KXtmb3IodmFyIGUgaW4gdCluW2VdPXRbZV19LE1hPWZ1bmN0aW9uKG4sdCl7cmV0dXJuIHQucXVlcnlTZWxlY3RvcihuKX0seGE9ZnVuY3Rpb24obix0KXtyZXR1cm4gdC5xdWVyeVNlbGVjdG9yQWxsKG4pfSxiYT1mdW5jdGlvbihuLHQpe3ZhciBlPW4ubWF0Y2hlc3x8blt4KG4sIm1hdGNoZXNTZWxlY3RvciIpXTtyZXR1cm4oYmE9ZnVuY3Rpb24obix0KXtyZXR1cm4gZS5jYWxsKG4sdCl9KShuLHQpfTsiZnVuY3Rpb24iPT10eXBlb2YgU2l6emxlJiYoTWE9ZnVuY3Rpb24obix0KXtyZXR1cm4gU2l6emxlKG4sdClbMF18fG51bGx9LHhhPVNpenpsZSxiYT1TaXp6bGUubWF0Y2hlc1NlbGVjdG9yKSx0YS5zZWxlY3Rpb249ZnVuY3Rpb24oKXtyZXR1cm4gdGEuc2VsZWN0KHVhLmRvY3VtZW50RWxlbWVudCl9O3ZhciBfYT10YS5zZWxlY3Rpb24ucHJvdG90eXBlPVtdO19hLnNlbGVjdD1mdW5jdGlvbihuKXt2YXIgdCxlLHIsdSxpPVtdO249TihuKTtmb3IodmFyIG89LTEsYT10aGlzLmxlbmd0aDsrK288YTspe2kucHVzaCh0PVtdKSx0LnBhcmVudE5vZGU9KHI9dGhpc1tvXSkucGFyZW50Tm9kZTtmb3IodmFyIGM9LTEsbD1yLmxlbmd0aDsrK2M8bDspKHU9cltjXSk/KHQucHVzaChlPW4uY2FsbCh1LHUuX19kYXRhX18sYyxvKSksZSYmIl9fZGF0YV9fImluIHUmJihlLl9fZGF0YV9fPXUuX19kYXRhX18pKTp0LnB1c2gobnVsbCl9cmV0dXJuIEEoaSl9LF9hLnNlbGVjdEFsbD1mdW5jdGlvbihuKXt2YXIgdCxlLHI9W107bj1DKG4pO2Zvcih2YXIgdT0tMSxpPXRoaXMubGVuZ3RoOysrdTxpOylmb3IodmFyIG89dGhpc1t1XSxhPS0xLGM9by5sZW5ndGg7KythPGM7KShlPW9bYV0pJiYoci5wdXNoKHQ9cmEobi5jYWxsKGUsZS5fX2RhdGFfXyxhLHUpKSksdC5wYXJlbnROb2RlPWUpO3JldHVybiBBKHIpfTt2YXIgd2E9e3N2ZzoiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciLHhodG1sOiJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hodG1sIix4bGluazoiaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGluayIseG1sOiJodHRwOi8vd3d3LnczLm9yZy9YTUwvMTk5OC9uYW1lc3BhY2UiLHhtbG5zOiJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3htbG5zLyJ9O3RhLm5zPXtwcmVmaXg6d2EscXVhbGlmeTpmdW5jdGlvbihuKXt2YXIgdD1uLmluZGV4T2YoIjoiKSxlPW47cmV0dXJuIHQ+PTAmJihlPW4uc2xpY2UoMCx0KSxuPW4uc2xpY2UodCsxKSksd2EuaGFzT3duUHJvcGVydHkoZSk/e3NwYWNlOndhW2VdLGxvY2FsOm59Om59fSxfYS5hdHRyPWZ1bmN0aW9uKG4sdCl7aWYoYXJndW1lbnRzLmxlbmd0aDwyKXtpZigic3RyaW5nIj09dHlwZW9mIG4pe3ZhciBlPXRoaXMubm9kZSgpO3JldHVybiBuPXRhLm5zLnF1YWxpZnkobiksbi5sb2NhbD9lLmdldEF0dHJpYnV0ZU5TKG4uc3BhY2Usbi5sb2NhbCk6ZS5nZXRBdHRyaWJ1dGUobil9Zm9yKHQgaW4gbil0aGlzLmVhY2goeih0LG5bdF0pKTtyZXR1cm4gdGhpc31yZXR1cm4gdGhpcy5lYWNoKHoobix0KSl9LF9hLmNsYXNzZWQ9ZnVuY3Rpb24obix0KXtpZihhcmd1bWVudHMubGVuZ3RoPDIpe2lmKCJzdHJpbmciPT10eXBlb2Ygbil7dmFyIGU9dGhpcy5ub2RlKCkscj0obj1UKG4pKS5sZW5ndGgsdT0tMTtpZih0PWUuY2xhc3NMaXN0KXtmb3IoOysrdTxyOylpZighdC5jb250YWlucyhuW3VdKSlyZXR1cm4hMX1lbHNlIGZvcih0PWUuZ2V0QXR0cmlidXRlKCJjbGFzcyIpOysrdTxyOylpZighTChuW3VdKS50ZXN0KHQpKXJldHVybiExO3JldHVybiEwfWZvcih0IGluIG4pdGhpcy5lYWNoKFIodCxuW3RdKSk7cmV0dXJuIHRoaXN9cmV0dXJuIHRoaXMuZWFjaChSKG4sdCkpfSxfYS5zdHlsZT1mdW5jdGlvbihuLGUscil7dmFyIHU9YXJndW1lbnRzLmxlbmd0aDtpZigzPnUpe2lmKCJzdHJpbmciIT10eXBlb2Ygbil7Mj51JiYoZT0iIik7Zm9yKHIgaW4gbil0aGlzLmVhY2goUChyLG5bcl0sZSkpO3JldHVybiB0aGlzfWlmKDI+dSl7dmFyIGk9dGhpcy5ub2RlKCk7cmV0dXJuIHQoaSkuZ2V0Q29tcHV0ZWRTdHlsZShpLG51bGwpLmdldFByb3BlcnR5VmFsdWUobil9cj0iIn1yZXR1cm4gdGhpcy5lYWNoKFAobixlLHIpKX0sX2EucHJvcGVydHk9ZnVuY3Rpb24obix0KXtpZihhcmd1bWVudHMubGVuZ3RoPDIpe2lmKCJzdHJpbmciPT10eXBlb2YgbilyZXR1cm4gdGhpcy5ub2RlKClbbl07Zm9yKHQgaW4gbil0aGlzLmVhY2goVSh0LG5bdF0pKTtyZXR1cm4gdGhpc31yZXR1cm4gdGhpcy5lYWNoKFUobix0KSl9LF9hLnRleHQ9ZnVuY3Rpb24obil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/dGhpcy5lYWNoKCJmdW5jdGlvbiI9PXR5cGVvZiBuP2Z1bmN0aW9uKCl7dmFyIHQ9bi5hcHBseSh0aGlzLGFyZ3VtZW50cyk7dGhpcy50ZXh0Q29udGVudD1udWxsPT10PyIiOnR9Om51bGw9PW4/ZnVuY3Rpb24oKXt0aGlzLnRleHRDb250ZW50PSIifTpmdW5jdGlvbigpe3RoaXMudGV4dENvbnRlbnQ9bn0pOnRoaXMubm9kZSgpLnRleHRDb250ZW50fSxfYS5odG1sPWZ1bmN0aW9uKG4pe3JldHVybiBhcmd1bWVudHMubGVuZ3RoP3RoaXMuZWFjaCgiZnVuY3Rpb24iPT10eXBlb2Ygbj9mdW5jdGlvbigpe3ZhciB0PW4uYXBwbHkodGhpcyxhcmd1bWVudHMpO3RoaXMuaW5uZXJIVE1MPW51bGw9PXQ/IiI6dH06bnVsbD09bj9mdW5jdGlvbigpe3RoaXMuaW5uZXJIVE1MPSIifTpmdW5jdGlvbigpe3RoaXMuaW5uZXJIVE1MPW59KTp0aGlzLm5vZGUoKS5pbm5lckhUTUx9LF9hLmFwcGVuZD1mdW5jdGlvbihuKXtyZXR1cm4gbj1qKG4pLHRoaXMuc2VsZWN0KGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuYXBwZW5kQ2hpbGQobi5hcHBseSh0aGlzLGFyZ3VtZW50cykpfSl9LF9hLmluc2VydD1mdW5jdGlvbihuLHQpe3JldHVybiBuPWoobiksdD1OKHQpLHRoaXMuc2VsZWN0KGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuaW5zZXJ0QmVmb3JlKG4uYXBwbHkodGhpcyxhcmd1bWVudHMpLHQuYXBwbHkodGhpcyxhcmd1bWVudHMpfHxudWxsKX0pfSxfYS5yZW1vdmU9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5lYWNoKEYpfSxfYS5kYXRhPWZ1bmN0aW9uKG4sdCl7ZnVuY3Rpb24gZShuLGUpe3ZhciByLHUsaSxvPW4ubGVuZ3RoLGY9ZS5sZW5ndGgsaD1NYXRoLm1pbihvLGYpLGc9bmV3IEFycmF5KGYpLHA9bmV3IEFycmF5KGYpLHY9bmV3IEFycmF5KG8pO2lmKHQpe3ZhciBkLG09bmV3IGwseT1uZXcgQXJyYXkobyk7Zm9yKHI9LTE7KytyPG87KW0uaGFzKGQ9dC5jYWxsKHU9bltyXSx1Ll9fZGF0YV9fLHIpKT92W3JdPXU6bS5zZXQoZCx1KSx5W3JdPWQ7Zm9yKHI9LTE7KytyPGY7KSh1PW0uZ2V0KGQ9dC5jYWxsKGUsaT1lW3JdLHIpKSk/dSE9PSEwJiYoZ1tyXT11LHUuX19kYXRhX189aSk6cFtyXT1IKGkpLG0uc2V0KGQsITApO2ZvcihyPS0xOysrcjxvOyltLmdldCh5W3JdKSE9PSEwJiYodltyXT1uW3JdKX1lbHNle2ZvcihyPS0xOysrcjxoOyl1PW5bcl0saT1lW3JdLHU/KHUuX19kYXRhX189aSxnW3JdPXUpOnBbcl09SChpKTtmb3IoO2Y+cjsrK3IpcFtyXT1IKGVbcl0pO2Zvcig7bz5yOysrcil2W3JdPW5bcl19cC51cGRhdGU9ZyxwLnBhcmVudE5vZGU9Zy5wYXJlbnROb2RlPXYucGFyZW50Tm9kZT1uLnBhcmVudE5vZGUsYS5wdXNoKHApLGMucHVzaChnKSxzLnB1c2godil9dmFyIHIsdSxpPS0xLG89dGhpcy5sZW5ndGg7aWYoIWFyZ3VtZW50cy5sZW5ndGgpe2ZvcihuPW5ldyBBcnJheShvPShyPXRoaXNbMF0pLmxlbmd0aCk7KytpPG87KSh1PXJbaV0pJiYobltpXT11Ll9fZGF0YV9fKTtyZXR1cm4gbn12YXIgYT1aKFtdKSxjPUEoW10pLHM9QShbXSk7aWYoImZ1bmN0aW9uIj09dHlwZW9mIG4pZm9yKDsrK2k8bzspZShyPXRoaXNbaV0sbi5jYWxsKHIsci5wYXJlbnROb2RlLl9fZGF0YV9fLGkpKTtlbHNlIGZvcig7KytpPG87KWUocj10aGlzW2ldLG4pO3JldHVybiBjLmVudGVyPWZ1bmN0aW9uKCl7cmV0dXJuIGF9LGMuZXhpdD1mdW5jdGlvbigpe3JldHVybiBzfSxjfSxfYS5kYXR1bT1mdW5jdGlvbihuKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD90aGlzLnByb3BlcnR5KCJfX2RhdGFfXyIsbik6dGhpcy5wcm9wZXJ0eSgiX19kYXRhX18iKX0sX2EuZmlsdGVyPWZ1bmN0aW9uKG4pe3ZhciB0LGUscix1PVtdOyJmdW5jdGlvbiIhPXR5cGVvZiBuJiYobj1PKG4pKTtmb3IodmFyIGk9MCxvPXRoaXMubGVuZ3RoO28+aTtpKyspe3UucHVzaCh0PVtdKSx0LnBhcmVudE5vZGU9KGU9dGhpc1tpXSkucGFyZW50Tm9kZTtmb3IodmFyIGE9MCxjPWUubGVuZ3RoO2M+YTthKyspKHI9ZVthXSkmJm4uY2FsbChyLHIuX19kYXRhX18sYSxpKSYmdC5wdXNoKHIpfXJldHVybiBBKHUpfSxfYS5vcmRlcj1mdW5jdGlvbigpe2Zvcih2YXIgbj0tMSx0PXRoaXMubGVuZ3RoOysrbjx0Oylmb3IodmFyIGUscj10aGlzW25dLHU9ci5sZW5ndGgtMSxpPXJbdV07LS11Pj0wOykoZT1yW3VdKSYmKGkmJmkhPT1lLm5leHRTaWJsaW5nJiZpLnBhcmVudE5vZGUuaW5zZXJ0QmVmb3JlKGUsaSksaT1lKTtyZXR1cm4gdGhpc30sX2Euc29ydD1mdW5jdGlvbihuKXtuPUkuYXBwbHkodGhpcyxhcmd1bWVudHMpO2Zvcih2YXIgdD0tMSxlPXRoaXMubGVuZ3RoOysrdDxlOyl0aGlzW3RdLnNvcnQobik7cmV0dXJuIHRoaXMub3JkZXIoKX0sX2EuZWFjaD1mdW5jdGlvbihuKXtyZXR1cm4gWSh0aGlzLGZ1bmN0aW9uKHQsZSxyKXtuLmNhbGwodCx0Ll9fZGF0YV9fLGUscil9KX0sX2EuY2FsbD1mdW5jdGlvbihuKXt2YXIgdD1yYShhcmd1bWVudHMpO3JldHVybiBuLmFwcGx5KHRbMF09dGhpcyx0KSx0aGlzfSxfYS5lbXB0eT1mdW5jdGlvbigpe3JldHVybiF0aGlzLm5vZGUoKX0sX2Eubm9kZT1mdW5jdGlvbigpe2Zvcih2YXIgbj0wLHQ9dGhpcy5sZW5ndGg7dD5uO24rKylmb3IodmFyIGU9dGhpc1tuXSxyPTAsdT1lLmxlbmd0aDt1PnI7cisrKXt2YXIgaT1lW3JdO2lmKGkpcmV0dXJuIGl9cmV0dXJuIG51bGx9LF9hLnNpemU9ZnVuY3Rpb24oKXt2YXIgbj0wO3JldHVybiBZKHRoaXMsZnVuY3Rpb24oKXsrK259KSxufTt2YXIgU2E9W107dGEuc2VsZWN0aW9uLmVudGVyPVosdGEuc2VsZWN0aW9uLmVudGVyLnByb3RvdHlwZT1TYSxTYS5hcHBlbmQ9X2EuYXBwZW5kLFNhLmVtcHR5PV9hLmVtcHR5LFNhLm5vZGU9X2Eubm9kZSxTYS5jYWxsPV9hLmNhbGwsU2Euc2l6ZT1fYS5zaXplLFNhLnNlbGVjdD1mdW5jdGlvbihuKXtmb3IodmFyIHQsZSxyLHUsaSxvPVtdLGE9LTEsYz10aGlzLmxlbmd0aDsrK2E8Yzspe3I9KHU9dGhpc1thXSkudXBkYXRlLG8ucHVzaCh0PVtdKSx0LnBhcmVudE5vZGU9dS5wYXJlbnROb2RlO2Zvcih2YXIgbD0tMSxzPXUubGVuZ3RoOysrbDxzOykoaT11W2xdKT8odC5wdXNoKHJbbF09ZT1uLmNhbGwodS5wYXJlbnROb2RlLGkuX19kYXRhX18sbCxhKSksZS5fX2RhdGFfXz1pLl9fZGF0YV9fKTp0LnB1c2gobnVsbCl9cmV0dXJuIEEobyl9LFNhLmluc2VydD1mdW5jdGlvbihuLHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPDImJih0PVYodGhpcykpLF9hLmluc2VydC5jYWxsKHRoaXMsbix0KX0sdGEuc2VsZWN0PWZ1bmN0aW9uKHQpe3ZhciBlO3JldHVybiJzdHJpbmciPT10eXBlb2YgdD8oZT1bTWEodCx1YSldLGUucGFyZW50Tm9kZT11YS5kb2N1bWVudEVsZW1lbnQpOihlPVt0XSxlLnBhcmVudE5vZGU9bih0KSksQShbZV0pfSx0YS5zZWxlY3RBbGw9ZnVuY3Rpb24obil7dmFyIHQ7cmV0dXJuInN0cmluZyI9PXR5cGVvZiBuPyh0PXJhKHhhKG4sdWEpKSx0LnBhcmVudE5vZGU9dWEuZG9jdW1lbnRFbGVtZW50KToodD1uLHQucGFyZW50Tm9kZT1udWxsKSxBKFt0XSl9LF9hLm9uPWZ1bmN0aW9uKG4sdCxlKXt2YXIgcj1hcmd1bWVudHMubGVuZ3RoO2lmKDM+cil7aWYoInN0cmluZyIhPXR5cGVvZiBuKXsyPnImJih0PSExKTtmb3IoZSBpbiBuKXRoaXMuZWFjaChYKGUsbltlXSx0KSk7cmV0dXJuIHRoaXN9aWYoMj5yKXJldHVybihyPXRoaXMubm9kZSgpWyJfX29uIituXSkmJnIuXztlPSExfXJldHVybiB0aGlzLmVhY2goWChuLHQsZSkpfTt2YXIga2E9dGEubWFwKHttb3VzZWVudGVyOiJtb3VzZW92ZXIiLG1vdXNlbGVhdmU6Im1vdXNlb3V0In0pO3VhJiZrYS5mb3JFYWNoKGZ1bmN0aW9uKG4peyJvbiIrbiBpbiB1YSYma2EucmVtb3ZlKG4pfSk7dmFyIEVhLEFhPTA7dGEubW91c2U9ZnVuY3Rpb24obil7cmV0dXJuIEoobixrKCkpfTt2YXIgTmE9dGhpcy5uYXZpZ2F0b3ImJi9XZWJLaXQvLnRlc3QodGhpcy5uYXZpZ2F0b3IudXNlckFnZW50KT8tMTowO3RhLnRvdWNoPWZ1bmN0aW9uKG4sdCxlKXtpZihhcmd1bWVudHMubGVuZ3RoPDMmJihlPXQsdD1rKCkuY2hhbmdlZFRvdWNoZXMpLHQpZm9yKHZhciByLHU9MCxpPXQubGVuZ3RoO2k+dTsrK3UpaWYoKHI9dFt1XSkuaWRlbnRpZmllcj09PWUpcmV0dXJuIEoobixyKX0sdGEuYmVoYXZpb3IuZHJhZz1mdW5jdGlvbigpe2Z1bmN0aW9uIG4oKXt0aGlzLm9uKCJtb3VzZWRvd24uZHJhZyIsaSkub24oInRvdWNoc3RhcnQuZHJhZyIsbyl9ZnVuY3Rpb24gZShuLHQsZSxpLG8pe3JldHVybiBmdW5jdGlvbigpe2Z1bmN0aW9uIGEoKXt2YXIgbixlLHI9dChoLHYpO3ImJihuPXJbMF0tTVswXSxlPXJbMV0tTVsxXSxwfD1ufGUsTT1yLGcoe3R5cGU6ImRyYWciLHg6clswXStsWzBdLHk6clsxXStsWzFdLGR4Om4sZHk6ZX0pKX1mdW5jdGlvbiBjKCl7dChoLHYpJiYobS5vbihpK2QsbnVsbCkub24obytkLG51bGwpLHkocCYmdGEuZXZlbnQudGFyZ2V0PT09ZiksZyh7dHlwZToiZHJhZ2VuZCJ9KSl9dmFyIGwscz10aGlzLGY9dGEuZXZlbnQudGFyZ2V0LGg9cy5wYXJlbnROb2RlLGc9ci5vZihzLGFyZ3VtZW50cykscD0wLHY9bigpLGQ9Ii5kcmFnIisobnVsbD09dj8iIjoiLSIrdiksbT10YS5zZWxlY3QoZShmKSkub24oaStkLGEpLm9uKG8rZCxjKSx5PVcoZiksTT10KGgsdik7dT8obD11LmFwcGx5KHMsYXJndW1lbnRzKSxsPVtsLngtTVswXSxsLnktTVsxXV0pOmw9WzAsMF0sZyh7dHlwZToiZHJhZ3N0YXJ0In0pfX12YXIgcj1FKG4sImRyYWciLCJkcmFnc3RhcnQiLCJkcmFnZW5kIiksdT1udWxsLGk9ZShiLHRhLm1vdXNlLHQsIm1vdXNlbW92ZSIsIm1vdXNldXAiKSxvPWUoRyx0YS50b3VjaCx5LCJ0b3VjaG1vdmUiLCJ0b3VjaGVuZCIpO3JldHVybiBuLm9yaWdpbj1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8odT10LG4pOnV9LHRhLnJlYmluZChuLHIsIm9uIil9LHRhLnRvdWNoZXM9ZnVuY3Rpb24obix0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aDwyJiYodD1rKCkudG91Y2hlcyksdD9yYSh0KS5tYXAoZnVuY3Rpb24odCl7dmFyIGU9SihuLHQpO3JldHVybiBlLmlkZW50aWZpZXI9dC5pZGVudGlmaWVyLGV9KTpbXX07dmFyIENhPTFlLTYsemE9Q2EqQ2EscWE9TWF0aC5QSSxMYT0yKnFhLFRhPUxhLUNhLFJhPXFhLzIsRGE9cWEvMTgwLFBhPTE4MC9xYSxVYT1NYXRoLlNRUlQyLGphPTIsRmE9NDt0YS5pbnRlcnBvbGF0ZVpvb209ZnVuY3Rpb24obix0KXtmdW5jdGlvbiBlKG4pe3ZhciB0PW4qeTtpZihtKXt2YXIgZT1ydCh2KSxvPWkvKGphKmgpKihlKnV0KFVhKnQrdiktZXQodikpO3JldHVybltyK28qbCx1K28qcyxpKmUvcnQoVWEqdCt2KV19cmV0dXJuW3IrbipsLHUrbipzLGkqTWF0aC5leHAoVWEqdCldfXZhciByPW5bMF0sdT1uWzFdLGk9blsyXSxvPXRbMF0sYT10WzFdLGM9dFsyXSxsPW8tcixzPWEtdSxmPWwqbCtzKnMsaD1NYXRoLnNxcnQoZiksZz0oYypjLWkqaStGYSpmKS8oMippKmphKmgpLHA9KGMqYy1pKmktRmEqZikvKDIqYypqYSpoKSx2PU1hdGgubG9nKE1hdGguc3FydChnKmcrMSktZyksZD1NYXRoLmxvZyhNYXRoLnNxcnQocCpwKzEpLXApLG09ZC12LHk9KG18fE1hdGgubG9nKGMvaSkpL1VhO3JldHVybiBlLmR1cmF0aW9uPTFlMyp5LGV9LHRhLmJlaGF2aW9yLnpvb209ZnVuY3Rpb24oKXtmdW5jdGlvbiBuKG4pe24ub24ocSxmKS5vbihPYSsiLnpvb20iLGcpLm9uKCJkYmxjbGljay56b29tIixwKS5vbihSLGgpfWZ1bmN0aW9uIGUobil7cmV0dXJuWyhuWzBdLWsueCkvay5rLChuWzFdLWsueSkvay5rXX1mdW5jdGlvbiByKG4pe3JldHVybltuWzBdKmsuaytrLngsblsxXSprLmsray55XX1mdW5jdGlvbiB1KG4pe2suaz1NYXRoLm1heChOWzBdLE1hdGgubWluKE5bMV0sbikpfWZ1bmN0aW9uIGkobix0KXt0PXIodCksay54Kz1uWzBdLXRbMF0say55Kz1uWzFdLXRbMV19ZnVuY3Rpb24gbyh0LGUscixvKXt0Ll9fY2hhcnRfXz17eDprLngseTprLnksazprLmt9LHUoTWF0aC5wb3coMixvKSksaShkPWUsciksdD10YS5zZWxlY3QodCksQz4wJiYodD10LnRyYW5zaXRpb24oKS5kdXJhdGlvbihDKSksdC5jYWxsKG4uZXZlbnQpfWZ1bmN0aW9uIGEoKXtiJiZiLmRvbWFpbih4LnJhbmdlKCkubWFwKGZ1bmN0aW9uKG4pe3JldHVybihuLWsueCkvay5rfSkubWFwKHguaW52ZXJ0KSksdyYmdy5kb21haW4oXy5yYW5nZSgpLm1hcChmdW5jdGlvbihuKXtyZXR1cm4obi1rLnkpL2sua30pLm1hcChfLmludmVydCkpfWZ1bmN0aW9uIGMobil7eisrfHxuKHt0eXBlOiJ6b29tc3RhcnQifSl9ZnVuY3Rpb24gbChuKXthKCksbih7dHlwZToiem9vbSIsc2NhbGU6ay5rLHRyYW5zbGF0ZTpbay54LGsueV19KX1mdW5jdGlvbiBzKG4pey0tenx8bih7dHlwZToiem9vbWVuZCJ9KSxkPW51bGx9ZnVuY3Rpb24gZigpe2Z1bmN0aW9uIG4oKXtmPTEsaSh0YS5tb3VzZSh1KSxnKSxsKGEpfWZ1bmN0aW9uIHIoKXtoLm9uKEwsbnVsbCkub24oVCxudWxsKSxwKGYmJnRhLmV2ZW50LnRhcmdldD09PW8pLHMoYSl9dmFyIHU9dGhpcyxvPXRhLmV2ZW50LnRhcmdldCxhPUQub2YodSxhcmd1bWVudHMpLGY9MCxoPXRhLnNlbGVjdCh0KHUpKS5vbihMLG4pLm9uKFQsciksZz1lKHRhLm1vdXNlKHUpKSxwPVcodSk7RGwuY2FsbCh1KSxjKGEpfWZ1bmN0aW9uIGgoKXtmdW5jdGlvbiBuKCl7dmFyIG49dGEudG91Y2hlcyhwKTtyZXR1cm4gZz1rLmssbi5mb3JFYWNoKGZ1bmN0aW9uKG4pe24uaWRlbnRpZmllciBpbiBkJiYoZFtuLmlkZW50aWZpZXJdPWUobikpfSksbn1mdW5jdGlvbiB0KCl7dmFyIHQ9dGEuZXZlbnQudGFyZ2V0O3RhLnNlbGVjdCh0KS5vbih4LHIpLm9uKGIsYSksXy5wdXNoKHQpO2Zvcih2YXIgZT10YS5ldmVudC5jaGFuZ2VkVG91Y2hlcyx1PTAsaT1lLmxlbmd0aDtpPnU7Kyt1KWRbZVt1XS5pZGVudGlmaWVyXT1udWxsO3ZhciBjPW4oKSxsPURhdGUubm93KCk7aWYoMT09PWMubGVuZ3RoKXtpZig1MDA+bC1NKXt2YXIgcz1jWzBdO28ocCxzLGRbcy5pZGVudGlmaWVyXSxNYXRoLmZsb29yKE1hdGgubG9nKGsuaykvTWF0aC5MTjIpKzEpLFMoKX1NPWx9ZWxzZSBpZihjLmxlbmd0aD4xKXt2YXIgcz1jWzBdLGY9Y1sxXSxoPXNbMF0tZlswXSxnPXNbMV0tZlsxXTttPWgqaCtnKmd9fWZ1bmN0aW9uIHIoKXt2YXIgbix0LGUscixvPXRhLnRvdWNoZXMocCk7RGwuY2FsbChwKTtmb3IodmFyIGE9MCxjPW8ubGVuZ3RoO2M+YTsrK2Escj1udWxsKWlmKGU9b1thXSxyPWRbZS5pZGVudGlmaWVyXSl7aWYodClicmVhaztuPWUsdD1yfWlmKHIpe3ZhciBzPShzPWVbMF0tblswXSkqcysocz1lWzFdLW5bMV0pKnMsZj1tJiZNYXRoLnNxcnQocy9tKTtuPVsoblswXStlWzBdKS8yLChuWzFdK2VbMV0pLzJdLHQ9Wyh0WzBdK3JbMF0pLzIsKHRbMV0rclsxXSkvMl0sdShmKmcpfU09bnVsbCxpKG4sdCksbCh2KX1mdW5jdGlvbiBhKCl7aWYodGEuZXZlbnQudG91Y2hlcy5sZW5ndGgpe2Zvcih2YXIgdD10YS5ldmVudC5jaGFuZ2VkVG91Y2hlcyxlPTAscj10Lmxlbmd0aDtyPmU7KytlKWRlbGV0ZSBkW3RbZV0uaWRlbnRpZmllcl07Zm9yKHZhciB1IGluIGQpcmV0dXJuIHZvaWQgbigpfXRhLnNlbGVjdEFsbChfKS5vbih5LG51bGwpLHcub24ocSxmKS5vbihSLGgpLEUoKSxzKHYpfXZhciBnLHA9dGhpcyx2PUQub2YocCxhcmd1bWVudHMpLGQ9e30sbT0wLHk9Ii56b29tLSIrdGEuZXZlbnQuY2hhbmdlZFRvdWNoZXNbMF0uaWRlbnRpZmllcix4PSJ0b3VjaG1vdmUiK3ksYj0idG91Y2hlbmQiK3ksXz1bXSx3PXRhLnNlbGVjdChwKSxFPVcocCk7dCgpLGModiksdy5vbihxLG51bGwpLm9uKFIsdCl9ZnVuY3Rpb24gZygpe3ZhciBuPUQub2YodGhpcyxhcmd1bWVudHMpO3k/Y2xlYXJUaW1lb3V0KHkpOih2PWUoZD1tfHx0YS5tb3VzZSh0aGlzKSksRGwuY2FsbCh0aGlzKSxjKG4pKSx5PXNldFRpbWVvdXQoZnVuY3Rpb24oKXt5PW51bGwscyhuKX0sNTApLFMoKSx1KE1hdGgucG93KDIsLjAwMipIYSgpKSprLmspLGkoZCx2KSxsKG4pfWZ1bmN0aW9uIHAoKXt2YXIgbj10YS5tb3VzZSh0aGlzKSx0PU1hdGgubG9nKGsuaykvTWF0aC5MTjI7byh0aGlzLG4sZShuKSx0YS5ldmVudC5zaGlmdEtleT9NYXRoLmNlaWwodCktMTpNYXRoLmZsb29yKHQpKzEpfXZhciB2LGQsbSx5LE0seCxiLF8sdyxrPXt4OjAseTowLGs6MX0sQT1bOTYwLDUwMF0sTj1JYSxDPTI1MCx6PTAscT0ibW91c2Vkb3duLnpvb20iLEw9Im1vdXNlbW92ZS56b29tIixUPSJtb3VzZXVwLnpvb20iLFI9InRvdWNoc3RhcnQuem9vbSIsRD1FKG4sInpvb21zdGFydCIsInpvb20iLCJ6b29tZW5kIik7cmV0dXJuIE9hfHwoT2E9Im9ud2hlZWwiaW4gdWE/KEhhPWZ1bmN0aW9uKCl7cmV0dXJuLXRhLmV2ZW50LmRlbHRhWSoodGEuZXZlbnQuZGVsdGFNb2RlPzEyMDoxKX0sIndoZWVsIik6Im9ubW91c2V3aGVlbCJpbiB1YT8oSGE9ZnVuY3Rpb24oKXtyZXR1cm4gdGEuZXZlbnQud2hlZWxEZWx0YX0sIm1vdXNld2hlZWwiKTooSGE9ZnVuY3Rpb24oKXtyZXR1cm4tdGEuZXZlbnQuZGV0YWlsfSwiTW96TW91c2VQaXhlbFNjcm9sbCIpKSxuLmV2ZW50PWZ1bmN0aW9uKG4pe24uZWFjaChmdW5jdGlvbigpe3ZhciBuPUQub2YodGhpcyxhcmd1bWVudHMpLHQ9aztUbD90YS5zZWxlY3QodGhpcykudHJhbnNpdGlvbigpLmVhY2goInN0YXJ0Lnpvb20iLGZ1bmN0aW9uKCl7az10aGlzLl9fY2hhcnRfX3x8e3g6MCx5OjAsazoxfSxjKG4pfSkudHdlZW4oInpvb206em9vbSIsZnVuY3Rpb24oKXt2YXIgZT1BWzBdLHI9QVsxXSx1PWQ/ZFswXTplLzIsaT1kP2RbMV06ci8yLG89dGEuaW50ZXJwb2xhdGVab29tKFsodS1rLngpL2suaywoaS1rLnkpL2suayxlL2sua10sWyh1LXQueCkvdC5rLChpLXQueSkvdC5rLGUvdC5rXSk7cmV0dXJuIGZ1bmN0aW9uKHQpe3ZhciByPW8odCksYT1lL3JbMl07dGhpcy5fX2NoYXJ0X189az17eDp1LXJbMF0qYSx5OmktclsxXSphLGs6YX0sbChuKX19KS5lYWNoKCJpbnRlcnJ1cHQuem9vbSIsZnVuY3Rpb24oKXtzKG4pfSkuZWFjaCgiZW5kLnpvb20iLGZ1bmN0aW9uKCl7cyhuKX0pOih0aGlzLl9fY2hhcnRfXz1rLGMobiksbChuKSxzKG4pKX0pfSxuLnRyYW5zbGF0ZT1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oaz17eDordFswXSx5Oit0WzFdLGs6ay5rfSxhKCksbik6W2sueCxrLnldfSxuLnNjYWxlPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhrPXt4OmsueCx5OmsueSxrOit0fSxhKCksbik6ay5rfSxuLnNjYWxlRXh0ZW50PWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhOPW51bGw9PXQ/SWE6Wyt0WzBdLCt0WzFdXSxuKTpOfSxuLmNlbnRlcj1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obT10JiZbK3RbMF0sK3RbMV1dLG4pOm19LG4uc2l6ZT1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oQT10JiZbK3RbMF0sK3RbMV1dLG4pOkF9LG4uZHVyYXRpb249ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KEM9K3Qsbik6Q30sbi54PWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhiPXQseD10LmNvcHkoKSxrPXt4OjAseTowLGs6MX0sbik6Yn0sbi55PWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh3PXQsXz10LmNvcHkoKSxrPXt4OjAseTowLGs6MX0sbik6d30sdGEucmViaW5kKG4sRCwib24iKX07dmFyIEhhLE9hLElhPVswLDEvMF07dGEuY29sb3I9b3Qsb3QucHJvdG90eXBlLnRvU3RyaW5nPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMucmdiKCkrIiJ9LHRhLmhzbD1hdDt2YXIgWWE9YXQucHJvdG90eXBlPW5ldyBvdDtZYS5icmlnaHRlcj1mdW5jdGlvbihuKXtyZXR1cm4gbj1NYXRoLnBvdyguNyxhcmd1bWVudHMubGVuZ3RoP246MSksbmV3IGF0KHRoaXMuaCx0aGlzLnMsdGhpcy5sL24pfSxZYS5kYXJrZXI9ZnVuY3Rpb24obil7cmV0dXJuIG49TWF0aC5wb3coLjcsYXJndW1lbnRzLmxlbmd0aD9uOjEpLG5ldyBhdCh0aGlzLmgsdGhpcy5zLG4qdGhpcy5sKX0sWWEucmdiPWZ1bmN0aW9uKCl7cmV0dXJuIGN0KHRoaXMuaCx0aGlzLnMsdGhpcy5sKX0sdGEuaGNsPWx0O3ZhciBaYT1sdC5wcm90b3R5cGU9bmV3IG90O1phLmJyaWdodGVyPWZ1bmN0aW9uKG4pe3JldHVybiBuZXcgbHQodGhpcy5oLHRoaXMuYyxNYXRoLm1pbigxMDAsdGhpcy5sK1ZhKihhcmd1bWVudHMubGVuZ3RoP246MSkpKX0sWmEuZGFya2VyPWZ1bmN0aW9uKG4pe3JldHVybiBuZXcgbHQodGhpcy5oLHRoaXMuYyxNYXRoLm1heCgwLHRoaXMubC1WYSooYXJndW1lbnRzLmxlbmd0aD9uOjEpKSl9LFphLnJnYj1mdW5jdGlvbigpe3JldHVybiBzdCh0aGlzLmgsdGhpcy5jLHRoaXMubCkucmdiKCl9LHRhLmxhYj1mdDt2YXIgVmE9MTgsWGE9Ljk1MDQ3LCRhPTEsQmE9MS4wODg4MyxXYT1mdC5wcm90b3R5cGU9bmV3IG90O1dhLmJyaWdodGVyPWZ1bmN0aW9uKG4pe3JldHVybiBuZXcgZnQoTWF0aC5taW4oMTAwLHRoaXMubCtWYSooYXJndW1lbnRzLmxlbmd0aD9uOjEpKSx0aGlzLmEsdGhpcy5iKX0sV2EuZGFya2VyPWZ1bmN0aW9uKG4pe3JldHVybiBuZXcgZnQoTWF0aC5tYXgoMCx0aGlzLmwtVmEqKGFyZ3VtZW50cy5sZW5ndGg/bjoxKSksdGhpcy5hLHRoaXMuYil9LFdhLnJnYj1mdW5jdGlvbigpe3JldHVybiBodCh0aGlzLmwsdGhpcy5hLHRoaXMuYil9LHRhLnJnYj1tdDt2YXIgSmE9bXQucHJvdG90eXBlPW5ldyBvdDtKYS5icmlnaHRlcj1mdW5jdGlvbihuKXtuPU1hdGgucG93KC43LGFyZ3VtZW50cy5sZW5ndGg/bjoxKTt2YXIgdD10aGlzLnIsZT10aGlzLmcscj10aGlzLmIsdT0zMDtyZXR1cm4gdHx8ZXx8cj8odCYmdT50JiYodD11KSxlJiZ1PmUmJihlPXUpLHImJnU+ciYmKHI9dSksbmV3IG10KE1hdGgubWluKDI1NSx0L24pLE1hdGgubWluKDI1NSxlL24pLE1hdGgubWluKDI1NSxyL24pKSk6bmV3IG10KHUsdSx1KX0sSmEuZGFya2VyPWZ1bmN0aW9uKG4pe3JldHVybiBuPU1hdGgucG93KC43LGFyZ3VtZW50cy5sZW5ndGg/bjoxKSxuZXcgbXQobip0aGlzLnIsbip0aGlzLmcsbip0aGlzLmIpfSxKYS5oc2w9ZnVuY3Rpb24oKXtyZXR1cm4gX3QodGhpcy5yLHRoaXMuZyx0aGlzLmIpfSxKYS50b1N0cmluZz1mdW5jdGlvbigpe3JldHVybiIjIit4dCh0aGlzLnIpK3h0KHRoaXMuZykreHQodGhpcy5iKX07dmFyIEdhPXRhLm1hcCh7YWxpY2VibHVlOjE1NzkyMzgzLGFudGlxdWV3aGl0ZToxNjQ0NDM3NSxhcXVhOjY1NTM1LGFxdWFtYXJpbmU6ODM4ODU2NCxhenVyZToxNTc5NDE3NSxiZWlnZToxNjExOTI2MCxiaXNxdWU6MTY3NzAyNDQsYmxhY2s6MCxibGFuY2hlZGFsbW9uZDoxNjc3MjA0NSxibHVlOjI1NSxibHVldmlvbGV0OjkwNTUyMDIsYnJvd246MTA4MjQyMzQsYnVybHl3b29kOjE0NTk2MjMxLGNhZGV0Ymx1ZTo2MjY2NTI4LGNoYXJ0cmV1c2U6ODM4ODM1MixjaG9jb2xhdGU6MTM3ODk0NzAsY29yYWw6MTY3NDQyNzIsY29ybmZsb3dlcmJsdWU6NjU5MTk4MSxjb3Juc2lsazoxNjc3NTM4OCxjcmltc29uOjE0NDIzMTAwLGN5YW46NjU1MzUsZGFya2JsdWU6MTM5LGRhcmtjeWFuOjM1NzIzLGRhcmtnb2xkZW5yb2Q6MTIwOTI5MzksZGFya2dyYXk6MTExMTkwMTcsZGFya2dyZWVuOjI1NjAwLGRhcmtncmV5OjExMTE5MDE3LGRhcmtraGFraToxMjQzMzI1OSxkYXJrbWFnZW50YTo5MTA5NjQzLGRhcmtvbGl2ZWdyZWVuOjU1OTc5OTksZGFya29yYW5nZToxNjc0NzUyMCxkYXJrb3JjaGlkOjEwMDQwMDEyLGRhcmtyZWQ6OTEwOTUwNCxkYXJrc2FsbW9uOjE1MzA4NDEwLGRhcmtzZWFncmVlbjo5NDE5OTE5LGRhcmtzbGF0ZWJsdWU6NDczNDM0NyxkYXJrc2xhdGVncmF5OjMxMDA0OTUsZGFya3NsYXRlZ3JleTozMTAwNDk1LGRhcmt0dXJxdW9pc2U6NTI5NDUsZGFya3Zpb2xldDo5Njk5NTM5LGRlZXBwaW5rOjE2NzE2OTQ3LGRlZXBza3libHVlOjQ5MTUxLGRpbWdyYXk6NjkwODI2NSxkaW1ncmV5OjY5MDgyNjUsZG9kZ2VyYmx1ZToyMDAzMTk5LGZpcmVicmljazoxMTY3NDE0NixmbG9yYWx3aGl0ZToxNjc3NTkyMCxmb3Jlc3RncmVlbjoyMjYzODQyLGZ1Y2hzaWE6MTY3MTE5MzUsZ2FpbnNib3JvOjE0NDc0NDYwLGdob3N0d2hpdGU6MTYzMTY2NzEsZ29sZDoxNjc2NjcyMCxnb2xkZW5yb2Q6MTQzMjkxMjAsZ3JheTo4NDIxNTA0LGdyZWVuOjMyNzY4LGdyZWVueWVsbG93OjExNDAzMDU1LGdyZXk6ODQyMTUwNCxob25leWRldzoxNTc5NDE2MCxob3RwaW5rOjE2NzM4NzQwLGluZGlhbnJlZDoxMzQ1ODUyNCxpbmRpZ286NDkxNTMzMCxpdm9yeToxNjc3NzIwMCxraGFraToxNTc4NzY2MCxsYXZlbmRlcjoxNTEzMjQxMCxsYXZlbmRlcmJsdXNoOjE2NzczMzY1LGxhd25ncmVlbjo4MTkwOTc2LGxlbW9uY2hpZmZvbjoxNjc3NTg4NSxsaWdodGJsdWU6MTEzOTMyNTQsbGlnaHRjb3JhbDoxNTc2MTUzNixsaWdodGN5YW46MTQ3NDU1OTksbGlnaHRnb2xkZW5yb2R5ZWxsb3c6MTY0NDgyMTAsbGlnaHRncmF5OjEzODgyMzIzLGxpZ2h0Z3JlZW46OTQ5ODI1NixsaWdodGdyZXk6MTM4ODIzMjMsbGlnaHRwaW5rOjE2NzU4NDY1LGxpZ2h0c2FsbW9uOjE2NzUyNzYyLGxpZ2h0c2VhZ3JlZW46MjE0Mjg5MCxsaWdodHNreWJsdWU6ODkwMDM0NixsaWdodHNsYXRlZ3JheTo3ODMzNzUzLGxpZ2h0c2xhdGVncmV5Ojc4MzM3NTMsbGlnaHRzdGVlbGJsdWU6MTE1ODQ3MzQsbGlnaHR5ZWxsb3c6MTY3NzcxODQsbGltZTo2NTI4MCxsaW1lZ3JlZW46MzMyOTMzMCxsaW5lbjoxNjQ0NTY3MCxtYWdlbnRhOjE2NzExOTM1LG1hcm9vbjo4Mzg4NjA4LG1lZGl1bWFxdWFtYXJpbmU6NjczNzMyMixtZWRpdW1ibHVlOjIwNSxtZWRpdW1vcmNoaWQ6MTIyMTE2NjcsbWVkaXVtcHVycGxlOjk2NjI2ODMsbWVkaXVtc2VhZ3JlZW46Mzk3ODA5NyxtZWRpdW1zbGF0ZWJsdWU6ODA4Nzc5MCxtZWRpdW1zcHJpbmdncmVlbjo2NDE1NCxtZWRpdW10dXJxdW9pc2U6NDc3MjMwMCxtZWRpdW12aW9sZXRyZWQ6MTMwNDcxNzMsbWlkbmlnaHRibHVlOjE2NDQ5MTIsbWludGNyZWFtOjE2MTIxODUwLG1pc3R5cm9zZToxNjc3MDI3Myxtb2NjYXNpbjoxNjc3MDIyOSxuYXZham93aGl0ZToxNjc2ODY4NSxuYXZ5OjEyOCxvbGRsYWNlOjE2NjQzNTU4LG9saXZlOjg0MjEzNzYsb2xpdmVkcmFiOjcwNDg3Mzksb3JhbmdlOjE2NzUzOTIwLG9yYW5nZXJlZDoxNjcyOTM0NCxvcmNoaWQ6MTQzMTU3MzQscGFsZWdvbGRlbnJvZDoxNTY1NzEzMCxwYWxlZ3JlZW46MTAwMjU4ODAscGFsZXR1cnF1b2lzZToxMTUyOTk2NixwYWxldmlvbGV0cmVkOjE0MzgxMjAzLHBhcGF5YXdoaXA6MTY3NzMwNzcscGVhY2hwdWZmOjE2NzY3NjczLHBlcnU6MTM0Njg5OTEscGluazoxNjc2MTAzNSxwbHVtOjE0NTI0NjM3LHBvd2RlcmJsdWU6MTE1OTE5MTAscHVycGxlOjgzODg3MzYscmViZWNjYXB1cnBsZTo2Njk3ODgxLHJlZDoxNjcxMTY4MCxyb3N5YnJvd246MTIzNTc1MTkscm95YWxibHVlOjQyODY5NDUsc2FkZGxlYnJvd246OTEyNzE4NyxzYWxtb246MTY0MTY4ODIsc2FuZHlicm93bjoxNjAzMjg2NCxzZWFncmVlbjozMDUwMzI3LHNlYXNoZWxsOjE2Nzc0NjM4LHNpZW5uYToxMDUwNjc5NyxzaWx2ZXI6MTI2MzIyNTYsc2t5Ymx1ZTo4OTAwMzMxLHNsYXRlYmx1ZTo2OTcwMDYxLHNsYXRlZ3JheTo3MzcyOTQ0LHNsYXRlZ3JleTo3MzcyOTQ0LHNub3c6MTY3NzU5MzAsc3ByaW5nZ3JlZW46NjU0MDcsc3RlZWxibHVlOjQ2MjA5ODAsdGFuOjEzODA4NzgwLHRlYWw6MzI4OTYsdGhpc3RsZToxNDIwNDg4OCx0b21hdG86MTY3MzcwOTUsdHVycXVvaXNlOjQyNTE4NTYsdmlvbGV0OjE1NjMxMDg2LHdoZWF0OjE2MTEzMzMxLHdoaXRlOjE2Nzc3MjE1LHdoaXRlc21va2U6MTYxMTkyODUseWVsbG93OjE2Nzc2OTYwLHllbGxvd2dyZWVuOjEwMTQ1MDc0fSk7R2EuZm9yRWFjaChmdW5jdGlvbihuLHQpe0dhLnNldChuLHl0KHQpKX0pLHRhLmZ1bmN0b3I9RXQsdGEueGhyPUF0KHkpLHRhLmRzdj1mdW5jdGlvbihuLHQpe2Z1bmN0aW9uIGUobixlLGkpe2FyZ3VtZW50cy5sZW5ndGg8MyYmKGk9ZSxlPW51bGwpO3ZhciBvPU50KG4sdCxudWxsPT1lP3I6dShlKSxpKTtyZXR1cm4gby5yb3c9ZnVuY3Rpb24obil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/by5yZXNwb25zZShudWxsPT0oZT1uKT9yOnUobikpOmV9LG99ZnVuY3Rpb24gcihuKXtyZXR1cm4gZS5wYXJzZShuLnJlc3BvbnNlVGV4dCl9ZnVuY3Rpb24gdShuKXtyZXR1cm4gZnVuY3Rpb24odCl7cmV0dXJuIGUucGFyc2UodC5yZXNwb25zZVRleHQsbil9fWZ1bmN0aW9uIGkodCl7cmV0dXJuIHQubWFwKG8pLmpvaW4obil9ZnVuY3Rpb24gbyhuKXtyZXR1cm4gYS50ZXN0KG4pPyciJytuLnJlcGxhY2UoL1wiL2csJyIiJykrJyInOm59dmFyIGE9bmV3IFJlZ0V4cCgnWyInK24rIlxuXSIpLGM9bi5jaGFyQ29kZUF0KDApO3JldHVybiBlLnBhcnNlPWZ1bmN0aW9uKG4sdCl7dmFyIHI7cmV0dXJuIGUucGFyc2VSb3dzKG4sZnVuY3Rpb24obixlKXtpZihyKXJldHVybiByKG4sZS0xKTt2YXIgdT1uZXcgRnVuY3Rpb24oImQiLCJyZXR1cm4geyIrbi5tYXAoZnVuY3Rpb24obix0KXtyZXR1cm4gSlNPTi5zdHJpbmdpZnkobikrIjogZFsiK3QrIl0ifSkuam9pbigiLCIpKyJ9Iik7cj10P2Z1bmN0aW9uKG4sZSl7cmV0dXJuIHQodShuKSxlKX06dX0pfSxlLnBhcnNlUm93cz1mdW5jdGlvbihuLHQpe2Z1bmN0aW9uIGUoKXtpZihzPj1sKXJldHVybiBvO2lmKHUpcmV0dXJuIHU9ITEsaTt2YXIgdD1zO2lmKDM0PT09bi5jaGFyQ29kZUF0KHQpKXtmb3IodmFyIGU9dDtlKys8bDspaWYoMzQ9PT1uLmNoYXJDb2RlQXQoZSkpe2lmKDM0IT09bi5jaGFyQ29kZUF0KGUrMSkpYnJlYWs7KytlfXM9ZSsyO3ZhciByPW4uY2hhckNvZGVBdChlKzEpO3JldHVybiAxMz09PXI/KHU9ITAsMTA9PT1uLmNoYXJDb2RlQXQoZSsyKSYmKytzKToxMD09PXImJih1PSEwKSxuLnNsaWNlKHQrMSxlKS5yZXBsYWNlKC8iIi9nLCciJyl9Zm9yKDtsPnM7KXt2YXIgcj1uLmNoYXJDb2RlQXQocysrKSxhPTE7aWYoMTA9PT1yKXU9ITA7ZWxzZSBpZigxMz09PXIpdT0hMCwxMD09PW4uY2hhckNvZGVBdChzKSYmKCsrcywrK2EpO2Vsc2UgaWYociE9PWMpY29udGludWU7cmV0dXJuIG4uc2xpY2UodCxzLWEpfXJldHVybiBuLnNsaWNlKHQpfWZvcih2YXIgcix1LGk9e30sbz17fSxhPVtdLGw9bi5sZW5ndGgscz0wLGY9MDsocj1lKCkpIT09bzspe2Zvcih2YXIgaD1bXTtyIT09aSYmciE9PW87KWgucHVzaChyKSxyPWUoKTt0JiZudWxsPT0oaD10KGgsZisrKSl8fGEucHVzaChoKX1yZXR1cm4gYX0sZS5mb3JtYXQ9ZnVuY3Rpb24odCl7aWYoQXJyYXkuaXNBcnJheSh0WzBdKSlyZXR1cm4gZS5mb3JtYXRSb3dzKHQpO3ZhciByPW5ldyBtLHU9W107cmV0dXJuIHQuZm9yRWFjaChmdW5jdGlvbihuKXtmb3IodmFyIHQgaW4gbilyLmhhcyh0KXx8dS5wdXNoKHIuYWRkKHQpKX0pLFt1Lm1hcChvKS5qb2luKG4pXS5jb25jYXQodC5tYXAoZnVuY3Rpb24odCl7cmV0dXJuIHUubWFwKGZ1bmN0aW9uKG4pe3JldHVybiBvKHRbbl0pfSkuam9pbihuKX0pKS5qb2luKCJcbiIpfSxlLmZvcm1hdFJvd3M9ZnVuY3Rpb24obil7cmV0dXJuIG4ubWFwKGkpLmpvaW4oIlxuIil9LGV9LHRhLmNzdj10YS5kc3YoIiwiLCJ0ZXh0L2NzdiIpLHRhLnRzdj10YS5kc3YoIgkiLCJ0ZXh0L3RhYi1zZXBhcmF0ZWQtdmFsdWVzIik7dmFyIEthLFFhLG5jLHRjLGVjLHJjPXRoaXNbeCh0aGlzLCJyZXF1ZXN0QW5pbWF0aW9uRnJhbWUiKV18fGZ1bmN0aW9uKG4pe3NldFRpbWVvdXQobiwxNyl9O3RhLnRpbWVyPWZ1bmN0aW9uKG4sdCxlKXt2YXIgcj1hcmd1bWVudHMubGVuZ3RoOzI+ciYmKHQ9MCksMz5yJiYoZT1EYXRlLm5vdygpKTt2YXIgdT1lK3QsaT17YzpuLHQ6dSxmOiExLG46bnVsbH07UWE/UWEubj1pOkthPWksUWE9aSxuY3x8KHRjPWNsZWFyVGltZW91dCh0YyksbmM9MSxyYyhxdCkpfSx0YS50aW1lci5mbHVzaD1mdW5jdGlvbigpe0x0KCksVHQoKX0sdGEucm91bmQ9ZnVuY3Rpb24obix0KXtyZXR1cm4gdD9NYXRoLnJvdW5kKG4qKHQ9TWF0aC5wb3coMTAsdCkpKS90Ok1hdGgucm91bmQobil9O3ZhciB1Yz1bInkiLCJ6IiwiYSIsImYiLCJwIiwibiIsIlx4YjUiLCJtIiwiIiwiayIsIk0iLCJHIiwiVCIsIlAiLCJFIiwiWiIsIlkiXS5tYXAoRHQpO3RhLmZvcm1hdFByZWZpeD1mdW5jdGlvbihuLHQpe3ZhciBlPTA7cmV0dXJuIG4mJigwPm4mJihuKj0tMSksdCYmKG49dGEucm91bmQobixSdChuLHQpKSksZT0xK01hdGguZmxvb3IoMWUtMTIrTWF0aC5sb2cobikvTWF0aC5MTjEwKSxlPU1hdGgubWF4KC0yNCxNYXRoLm1pbigyNCwzKk1hdGguZmxvb3IoKGUtMSkvMykpKSksdWNbOCtlLzNdfTt2YXIgaWM9Lyg/OihbXntdKT8oWzw+PV5dKSk/KFsrXC0gXSk/KFskI10pPygwKT8oXGQrKT8oLCk/KFwuLT9cZCspPyhbYS16JV0pPy9pLG9jPXRhLm1hcCh7YjpmdW5jdGlvbihuKXtyZXR1cm4gbi50b1N0cmluZygyKX0sYzpmdW5jdGlvbihuKXtyZXR1cm4gU3RyaW5nLmZyb21DaGFyQ29kZShuKX0sbzpmdW5jdGlvbihuKXtyZXR1cm4gbi50b1N0cmluZyg4KX0seDpmdW5jdGlvbihuKXtyZXR1cm4gbi50b1N0cmluZygxNil9LFg6ZnVuY3Rpb24obil7cmV0dXJuIG4udG9TdHJpbmcoMTYpLnRvVXBwZXJDYXNlKCl9LGc6ZnVuY3Rpb24obix0KXtyZXR1cm4gbi50b1ByZWNpc2lvbih0KX0sZTpmdW5jdGlvbihuLHQpe3JldHVybiBuLnRvRXhwb25lbnRpYWwodCl9LGY6ZnVuY3Rpb24obix0KXtyZXR1cm4gbi50b0ZpeGVkKHQpfSxyOmZ1bmN0aW9uKG4sdCl7cmV0dXJuKG49dGEucm91bmQobixSdChuLHQpKSkudG9GaXhlZChNYXRoLm1heCgwLE1hdGgubWluKDIwLFJ0KG4qKDErMWUtMTUpLHQpKSkpfX0pLGFjPXRhLnRpbWU9e30sY2M9RGF0ZTtqdC5wcm90b3R5cGU9e2dldERhdGU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fLmdldFVUQ0RhdGUoKX0sZ2V0RGF5OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuXy5nZXRVVENEYXkoKX0sZ2V0RnVsbFllYXI6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fLmdldFVUQ0Z1bGxZZWFyKCl9LGdldEhvdXJzOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuXy5nZXRVVENIb3VycygpfSxnZXRNaWxsaXNlY29uZHM6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fLmdldFVUQ01pbGxpc2Vjb25kcygpfSxnZXRNaW51dGVzOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuXy5nZXRVVENNaW51dGVzKCl9LGdldE1vbnRoOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuXy5nZXRVVENNb250aCgpfSxnZXRTZWNvbmRzOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuXy5nZXRVVENTZWNvbmRzKCl9LGdldFRpbWU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fLmdldFRpbWUoKX0sZ2V0VGltZXpvbmVPZmZzZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gMH0sdmFsdWVPZjpmdW5jdGlvbigpe3JldHVybiB0aGlzLl8udmFsdWVPZigpfSxzZXREYXRlOmZ1bmN0aW9uKCl7bGMuc2V0VVRDRGF0ZS5hcHBseSh0aGlzLl8sYXJndW1lbnRzKX0sc2V0RGF5OmZ1bmN0aW9uKCl7bGMuc2V0VVRDRGF5LmFwcGx5KHRoaXMuXyxhcmd1bWVudHMpfSxzZXRGdWxsWWVhcjpmdW5jdGlvbigpe2xjLnNldFVUQ0Z1bGxZZWFyLmFwcGx5KHRoaXMuXyxhcmd1bWVudHMpfSxzZXRIb3VyczpmdW5jdGlvbigpe2xjLnNldFVUQ0hvdXJzLmFwcGx5KHRoaXMuXyxhcmd1bWVudHMpfSxzZXRNaWxsaXNlY29uZHM6ZnVuY3Rpb24oKXtsYy5zZXRVVENNaWxsaXNlY29uZHMuYXBwbHkodGhpcy5fLGFyZ3VtZW50cyl9LHNldE1pbnV0ZXM6ZnVuY3Rpb24oKXtsYy5zZXRVVENNaW51dGVzLmFwcGx5KHRoaXMuXyxhcmd1bWVudHMpfSxzZXRNb250aDpmdW5jdGlvbigpe2xjLnNldFVUQ01vbnRoLmFwcGx5KHRoaXMuXyxhcmd1bWVudHMpfSxzZXRTZWNvbmRzOmZ1bmN0aW9uKCl7bGMuc2V0VVRDU2Vjb25kcy5hcHBseSh0aGlzLl8sYXJndW1lbnRzKX0sc2V0VGltZTpmdW5jdGlvbigpe2xjLnNldFRpbWUuYXBwbHkodGhpcy5fLGFyZ3VtZW50cyl9fTt2YXIgbGM9RGF0ZS5wcm90b3R5cGU7YWMueWVhcj1GdChmdW5jdGlvbihuKXtyZXR1cm4gbj1hYy5kYXkobiksbi5zZXRNb250aCgwLDEpLG59LGZ1bmN0aW9uKG4sdCl7bi5zZXRGdWxsWWVhcihuLmdldEZ1bGxZZWFyKCkrdCl9LGZ1bmN0aW9uKG4pe3JldHVybiBuLmdldEZ1bGxZZWFyKCl9KSxhYy55ZWFycz1hYy55ZWFyLnJhbmdlLGFjLnllYXJzLnV0Yz1hYy55ZWFyLnV0Yy5yYW5nZSxhYy5kYXk9RnQoZnVuY3Rpb24obil7dmFyIHQ9bmV3IGNjKDJlMywwKTtyZXR1cm4gdC5zZXRGdWxsWWVhcihuLmdldEZ1bGxZZWFyKCksbi5nZXRNb250aCgpLG4uZ2V0RGF0ZSgpKSx0fSxmdW5jdGlvbihuLHQpe24uc2V0RGF0ZShuLmdldERhdGUoKSt0KX0sZnVuY3Rpb24obil7cmV0dXJuIG4uZ2V0RGF0ZSgpLTF9KSxhYy5kYXlzPWFjLmRheS5yYW5nZSxhYy5kYXlzLnV0Yz1hYy5kYXkudXRjLnJhbmdlLGFjLmRheU9mWWVhcj1mdW5jdGlvbihuKXt2YXIgdD1hYy55ZWFyKG4pO3JldHVybiBNYXRoLmZsb29yKChuLXQtNmU0KihuLmdldFRpbWV6b25lT2Zmc2V0KCktdC5nZXRUaW1lem9uZU9mZnNldCgpKSkvODY0ZTUpfSxbInN1bmRheSIsIm1vbmRheSIsInR1ZXNkYXkiLCJ3ZWRuZXNkYXkiLCJ0aHVyc2RheSIsImZyaWRheSIsInNhdHVyZGF5Il0uZm9yRWFjaChmdW5jdGlvbihuLHQpe3Q9Ny10O3ZhciBlPWFjW25dPUZ0KGZ1bmN0aW9uKG4pe3JldHVybihuPWFjLmRheShuKSkuc2V0RGF0ZShuLmdldERhdGUoKS0obi5nZXREYXkoKSt0KSU3KSxufSxmdW5jdGlvbihuLHQpe24uc2V0RGF0ZShuLmdldERhdGUoKSs3Kk1hdGguZmxvb3IodCkpfSxmdW5jdGlvbihuKXt2YXIgZT1hYy55ZWFyKG4pLmdldERheSgpO3JldHVybiBNYXRoLmZsb29yKChhYy5kYXlPZlllYXIobikrKGUrdCklNykvNyktKGUhPT10KX0pO2FjW24rInMiXT1lLnJhbmdlLGFjW24rInMiXS51dGM9ZS51dGMucmFuZ2UsYWNbbisiT2ZZZWFyIl09ZnVuY3Rpb24obil7dmFyIGU9YWMueWVhcihuKS5nZXREYXkoKTtyZXR1cm4gTWF0aC5mbG9vcigoYWMuZGF5T2ZZZWFyKG4pKyhlK3QpJTcpLzcpfX0pLGFjLndlZWs9YWMuc3VuZGF5LGFjLndlZWtzPWFjLnN1bmRheS5yYW5nZSxhYy53ZWVrcy51dGM9YWMuc3VuZGF5LnV0Yy5yYW5nZSxhYy53ZWVrT2ZZZWFyPWFjLnN1bmRheU9mWWVhcjt2YXIgc2M9eyItIjoiIixfOiIgIiwwOiIwIn0sZmM9L15ccypcZCsvLGhjPS9eJS87dGEubG9jYWxlPWZ1bmN0aW9uKG4pe3JldHVybntudW1iZXJGb3JtYXQ6UHQobiksdGltZUZvcm1hdDpPdChuKX19O3ZhciBnYz10YS5sb2NhbGUoe2RlY2ltYWw6Ii4iLHRob3VzYW5kczoiLCIsZ3JvdXBpbmc6WzNdLGN1cnJlbmN5OlsiJCIsIiJdLGRhdGVUaW1lOiIlYSAlYiAlZSAlWCAlWSIsZGF0ZToiJW0vJWQvJVkiLHRpbWU6IiVIOiVNOiVTIixwZXJpb2RzOlsiQU0iLCJQTSJdLGRheXM6WyJTdW5kYXkiLCJNb25kYXkiLCJUdWVzZGF5IiwiV2VkbmVzZGF5IiwiVGh1cnNkYXkiLCJGcmlkYXkiLCJTYXR1cmRheSJdLHNob3J0RGF5czpbIlN1biIsIk1vbiIsIlR1ZSIsIldlZCIsIlRodSIsIkZyaSIsIlNhdCJdLG1vbnRoczpbIkphbnVhcnkiLCJGZWJydWFyeSIsIk1hcmNoIiwiQXByaWwiLCJNYXkiLCJKdW5lIiwiSnVseSIsIkF1Z3VzdCIsIlNlcHRlbWJlciIsIk9jdG9iZXIiLCJOb3ZlbWJlciIsIkRlY2VtYmVyIl0sc2hvcnRNb250aHM6WyJKYW4iLCJGZWIiLCJNYXIiLCJBcHIiLCJNYXkiLCJKdW4iLCJKdWwiLCJBdWciLCJTZXAiLCJPY3QiLCJOb3YiLCJEZWMiXX0pO3RhLmZvcm1hdD1nYy5udW1iZXJGb3JtYXQsdGEuZ2VvPXt9LGNlLnByb3RvdHlwZT17czowLHQ6MCxhZGQ6ZnVuY3Rpb24obil7bGUobix0aGlzLnQscGMpLGxlKHBjLnMsdGhpcy5zLHRoaXMpLHRoaXMucz90aGlzLnQrPXBjLnQ6dGhpcy5zPXBjLnQNCn0scmVzZXQ6ZnVuY3Rpb24oKXt0aGlzLnM9dGhpcy50PTB9LHZhbHVlT2Y6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5zfX07dmFyIHBjPW5ldyBjZTt0YS5nZW8uc3RyZWFtPWZ1bmN0aW9uKG4sdCl7biYmdmMuaGFzT3duUHJvcGVydHkobi50eXBlKT92Y1tuLnR5cGVdKG4sdCk6c2Uobix0KX07dmFyIHZjPXtGZWF0dXJlOmZ1bmN0aW9uKG4sdCl7c2Uobi5nZW9tZXRyeSx0KX0sRmVhdHVyZUNvbGxlY3Rpb246ZnVuY3Rpb24obix0KXtmb3IodmFyIGU9bi5mZWF0dXJlcyxyPS0xLHU9ZS5sZW5ndGg7KytyPHU7KXNlKGVbcl0uZ2VvbWV0cnksdCl9fSxkYz17U3BoZXJlOmZ1bmN0aW9uKG4sdCl7dC5zcGhlcmUoKX0sUG9pbnQ6ZnVuY3Rpb24obix0KXtuPW4uY29vcmRpbmF0ZXMsdC5wb2ludChuWzBdLG5bMV0sblsyXSl9LE11bHRpUG9pbnQ6ZnVuY3Rpb24obix0KXtmb3IodmFyIGU9bi5jb29yZGluYXRlcyxyPS0xLHU9ZS5sZW5ndGg7KytyPHU7KW49ZVtyXSx0LnBvaW50KG5bMF0sblsxXSxuWzJdKX0sTGluZVN0cmluZzpmdW5jdGlvbihuLHQpe2ZlKG4uY29vcmRpbmF0ZXMsdCwwKX0sTXVsdGlMaW5lU3RyaW5nOmZ1bmN0aW9uKG4sdCl7Zm9yKHZhciBlPW4uY29vcmRpbmF0ZXMscj0tMSx1PWUubGVuZ3RoOysrcjx1OylmZShlW3JdLHQsMCl9LFBvbHlnb246ZnVuY3Rpb24obix0KXtoZShuLmNvb3JkaW5hdGVzLHQpfSxNdWx0aVBvbHlnb246ZnVuY3Rpb24obix0KXtmb3IodmFyIGU9bi5jb29yZGluYXRlcyxyPS0xLHU9ZS5sZW5ndGg7KytyPHU7KWhlKGVbcl0sdCl9LEdlb21ldHJ5Q29sbGVjdGlvbjpmdW5jdGlvbihuLHQpe2Zvcih2YXIgZT1uLmdlb21ldHJpZXMscj0tMSx1PWUubGVuZ3RoOysrcjx1OylzZShlW3JdLHQpfX07dGEuZ2VvLmFyZWE9ZnVuY3Rpb24obil7cmV0dXJuIG1jPTAsdGEuZ2VvLnN0cmVhbShuLE1jKSxtY307dmFyIG1jLHljPW5ldyBjZSxNYz17c3BoZXJlOmZ1bmN0aW9uKCl7bWMrPTQqcWF9LHBvaW50OmIsbGluZVN0YXJ0OmIsbGluZUVuZDpiLHBvbHlnb25TdGFydDpmdW5jdGlvbigpe3ljLnJlc2V0KCksTWMubGluZVN0YXJ0PWdlfSxwb2x5Z29uRW5kOmZ1bmN0aW9uKCl7dmFyIG49Mip5YzttYys9MD5uPzQqcWErbjpuLE1jLmxpbmVTdGFydD1NYy5saW5lRW5kPU1jLnBvaW50PWJ9fTt0YS5nZW8uYm91bmRzPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gbihuLHQpe00ucHVzaCh4PVtzPW4saD1uXSksZj50JiYoZj10KSx0PmcmJihnPXQpfWZ1bmN0aW9uIHQodCxlKXt2YXIgcj1wZShbdCpEYSxlKkRhXSk7aWYobSl7dmFyIHU9ZGUobSxyKSxpPVt1WzFdLC11WzBdLDBdLG89ZGUoaSx1KTtNZShvKSxvPXhlKG8pO3ZhciBjPXQtcCxsPWM+MD8xOi0xLHY9b1swXSpQYSpsLGQ9Z2EoYyk+MTgwO2lmKGReKHY+bCpwJiZsKnQ+dikpe3ZhciB5PW9bMV0qUGE7eT5nJiYoZz15KX1lbHNlIGlmKHY9KHYrMzYwKSUzNjAtMTgwLGReKHY+bCpwJiZsKnQ+dikpe3ZhciB5PS1vWzFdKlBhO2Y+eSYmKGY9eSl9ZWxzZSBmPmUmJihmPWUpLGU+ZyYmKGc9ZSk7ZD9wPnQ/YShzLHQpPmEocyxoKSYmKGg9dCk6YSh0LGgpPmEocyxoKSYmKHM9dCk6aD49cz8ocz50JiYocz10KSx0PmgmJihoPXQpKTp0PnA/YShzLHQpPmEocyxoKSYmKGg9dCk6YSh0LGgpPmEocyxoKSYmKHM9dCl9ZWxzZSBuKHQsZSk7bT1yLHA9dH1mdW5jdGlvbiBlKCl7Yi5wb2ludD10fWZ1bmN0aW9uIHIoKXt4WzBdPXMseFsxXT1oLGIucG9pbnQ9bixtPW51bGx9ZnVuY3Rpb24gdShuLGUpe2lmKG0pe3ZhciByPW4tcDt5Kz1nYShyKT4xODA/cisocj4wPzM2MDotMzYwKTpyfWVsc2Ugdj1uLGQ9ZTtNYy5wb2ludChuLGUpLHQobixlKX1mdW5jdGlvbiBpKCl7TWMubGluZVN0YXJ0KCl9ZnVuY3Rpb24gbygpe3UodixkKSxNYy5saW5lRW5kKCksZ2EoeSk+Q2EmJihzPS0oaD0xODApKSx4WzBdPXMseFsxXT1oLG09bnVsbH1mdW5jdGlvbiBhKG4sdCl7cmV0dXJuKHQtPW4pPDA/dCszNjA6dH1mdW5jdGlvbiBjKG4sdCl7cmV0dXJuIG5bMF0tdFswXX1mdW5jdGlvbiBsKG4sdCl7cmV0dXJuIHRbMF08PXRbMV0/dFswXTw9biYmbjw9dFsxXTpuPHRbMF18fHRbMV08bn12YXIgcyxmLGgsZyxwLHYsZCxtLHksTSx4LGI9e3BvaW50Om4sbGluZVN0YXJ0OmUsbGluZUVuZDpyLHBvbHlnb25TdGFydDpmdW5jdGlvbigpe2IucG9pbnQ9dSxiLmxpbmVTdGFydD1pLGIubGluZUVuZD1vLHk9MCxNYy5wb2x5Z29uU3RhcnQoKX0scG9seWdvbkVuZDpmdW5jdGlvbigpe01jLnBvbHlnb25FbmQoKSxiLnBvaW50PW4sYi5saW5lU3RhcnQ9ZSxiLmxpbmVFbmQ9ciwwPnljPyhzPS0oaD0xODApLGY9LShnPTkwKSk6eT5DYT9nPTkwOi1DYT55JiYoZj0tOTApLHhbMF09cyx4WzFdPWh9fTtyZXR1cm4gZnVuY3Rpb24obil7Zz1oPS0ocz1mPTEvMCksTT1bXSx0YS5nZW8uc3RyZWFtKG4sYik7dmFyIHQ9TS5sZW5ndGg7aWYodCl7TS5zb3J0KGMpO2Zvcih2YXIgZSxyPTEsdT1NWzBdLGk9W3VdO3Q+cjsrK3IpZT1NW3JdLGwoZVswXSx1KXx8bChlWzFdLHUpPyhhKHVbMF0sZVsxXSk+YSh1WzBdLHVbMV0pJiYodVsxXT1lWzFdKSxhKGVbMF0sdVsxXSk+YSh1WzBdLHVbMV0pJiYodVswXT1lWzBdKSk6aS5wdXNoKHU9ZSk7Zm9yKHZhciBvLGUscD0tMS8wLHQ9aS5sZW5ndGgtMSxyPTAsdT1pW3RdO3Q+PXI7dT1lLCsrcillPWlbcl0sKG89YSh1WzFdLGVbMF0pKT5wJiYocD1vLHM9ZVswXSxoPXVbMV0pfXJldHVybiBNPXg9bnVsbCwxLzA9PT1zfHwxLzA9PT1mP1tbMC8wLDAvMF0sWzAvMCwwLzBdXTpbW3MsZl0sW2gsZ11dfX0oKSx0YS5nZW8uY2VudHJvaWQ9ZnVuY3Rpb24obil7eGM9YmM9X2M9d2M9U2M9a2M9RWM9QWM9TmM9Q2M9emM9MCx0YS5nZW8uc3RyZWFtKG4scWMpO3ZhciB0PU5jLGU9Q2Mscj16Yyx1PXQqdCtlKmUrcipyO3JldHVybiB6YT51JiYodD1rYyxlPUVjLHI9QWMsQ2E+YmMmJih0PV9jLGU9d2Mscj1TYyksdT10KnQrZSplK3Iqcix6YT51KT9bMC8wLDAvMF06W01hdGguYXRhbjIoZSx0KSpQYSx0dChyL01hdGguc3FydCh1KSkqUGFdfTt2YXIgeGMsYmMsX2Msd2MsU2Msa2MsRWMsQWMsTmMsQ2MsemMscWM9e3NwaGVyZTpiLHBvaW50Ol9lLGxpbmVTdGFydDpTZSxsaW5lRW5kOmtlLHBvbHlnb25TdGFydDpmdW5jdGlvbigpe3FjLmxpbmVTdGFydD1FZX0scG9seWdvbkVuZDpmdW5jdGlvbigpe3FjLmxpbmVTdGFydD1TZX19LExjPUxlKE5lLFBlLGplLFstcWEsLXFhLzJdKSxUYz0xZTk7dGEuZ2VvLmNsaXBFeHRlbnQ9ZnVuY3Rpb24oKXt2YXIgbix0LGUscix1LGksbz17c3RyZWFtOmZ1bmN0aW9uKG4pe3JldHVybiB1JiYodS52YWxpZD0hMSksdT1pKG4pLHUudmFsaWQ9ITAsdX0sZXh0ZW50OmZ1bmN0aW9uKGEpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhpPUllKG49K2FbMF1bMF0sdD0rYVswXVsxXSxlPSthWzFdWzBdLHI9K2FbMV1bMV0pLHUmJih1LnZhbGlkPSExLHU9bnVsbCksbyk6W1tuLHRdLFtlLHJdXX19O3JldHVybiBvLmV4dGVudChbWzAsMF0sWzk2MCw1MDBdXSl9LCh0YS5nZW8uY29uaWNFcXVhbEFyZWE9ZnVuY3Rpb24oKXtyZXR1cm4gWWUoWmUpfSkucmF3PVplLHRhLmdlby5hbGJlcnM9ZnVuY3Rpb24oKXtyZXR1cm4gdGEuZ2VvLmNvbmljRXF1YWxBcmVhKCkucm90YXRlKFs5NiwwXSkuY2VudGVyKFstLjYsMzguN10pLnBhcmFsbGVscyhbMjkuNSw0NS41XSkuc2NhbGUoMTA3MCl9LHRhLmdlby5hbGJlcnNVc2E9ZnVuY3Rpb24oKXtmdW5jdGlvbiBuKG4pe3ZhciBpPW5bMF0sbz1uWzFdO3JldHVybiB0PW51bGwsZShpLG8pLHR8fChyKGksbyksdCl8fHUoaSxvKSx0fXZhciB0LGUscix1LGk9dGEuZ2VvLmFsYmVycygpLG89dGEuZ2VvLmNvbmljRXF1YWxBcmVhKCkucm90YXRlKFsxNTQsMF0pLmNlbnRlcihbLTIsNTguNV0pLnBhcmFsbGVscyhbNTUsNjVdKSxhPXRhLmdlby5jb25pY0VxdWFsQXJlYSgpLnJvdGF0ZShbMTU3LDBdKS5jZW50ZXIoWy0zLDE5LjldKS5wYXJhbGxlbHMoWzgsMThdKSxjPXtwb2ludDpmdW5jdGlvbihuLGUpe3Q9W24sZV19fTtyZXR1cm4gbi5pbnZlcnQ9ZnVuY3Rpb24obil7dmFyIHQ9aS5zY2FsZSgpLGU9aS50cmFuc2xhdGUoKSxyPShuWzBdLWVbMF0pL3QsdT0oblsxXS1lWzFdKS90O3JldHVybih1Pj0uMTImJi4yMzQ+dSYmcj49LS40MjUmJi0uMjE0PnI/bzp1Pj0uMTY2JiYuMjM0PnUmJnI+PS0uMjE0JiYtLjExNT5yP2E6aSkuaW52ZXJ0KG4pfSxuLnN0cmVhbT1mdW5jdGlvbihuKXt2YXIgdD1pLnN0cmVhbShuKSxlPW8uc3RyZWFtKG4pLHI9YS5zdHJlYW0obik7cmV0dXJue3BvaW50OmZ1bmN0aW9uKG4sdSl7dC5wb2ludChuLHUpLGUucG9pbnQobix1KSxyLnBvaW50KG4sdSl9LHNwaGVyZTpmdW5jdGlvbigpe3Quc3BoZXJlKCksZS5zcGhlcmUoKSxyLnNwaGVyZSgpfSxsaW5lU3RhcnQ6ZnVuY3Rpb24oKXt0LmxpbmVTdGFydCgpLGUubGluZVN0YXJ0KCksci5saW5lU3RhcnQoKX0sbGluZUVuZDpmdW5jdGlvbigpe3QubGluZUVuZCgpLGUubGluZUVuZCgpLHIubGluZUVuZCgpfSxwb2x5Z29uU3RhcnQ6ZnVuY3Rpb24oKXt0LnBvbHlnb25TdGFydCgpLGUucG9seWdvblN0YXJ0KCksci5wb2x5Z29uU3RhcnQoKX0scG9seWdvbkVuZDpmdW5jdGlvbigpe3QucG9seWdvbkVuZCgpLGUucG9seWdvbkVuZCgpLHIucG9seWdvbkVuZCgpfX19LG4ucHJlY2lzaW9uPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhpLnByZWNpc2lvbih0KSxvLnByZWNpc2lvbih0KSxhLnByZWNpc2lvbih0KSxuKTppLnByZWNpc2lvbigpfSxuLnNjYWxlPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhpLnNjYWxlKHQpLG8uc2NhbGUoLjM1KnQpLGEuc2NhbGUodCksbi50cmFuc2xhdGUoaS50cmFuc2xhdGUoKSkpOmkuc2NhbGUoKX0sbi50cmFuc2xhdGU9ZnVuY3Rpb24odCl7aWYoIWFyZ3VtZW50cy5sZW5ndGgpcmV0dXJuIGkudHJhbnNsYXRlKCk7dmFyIGw9aS5zY2FsZSgpLHM9K3RbMF0sZj0rdFsxXTtyZXR1cm4gZT1pLnRyYW5zbGF0ZSh0KS5jbGlwRXh0ZW50KFtbcy0uNDU1KmwsZi0uMjM4KmxdLFtzKy40NTUqbCxmKy4yMzgqbF1dKS5zdHJlYW0oYykucG9pbnQscj1vLnRyYW5zbGF0ZShbcy0uMzA3KmwsZisuMjAxKmxdKS5jbGlwRXh0ZW50KFtbcy0uNDI1KmwrQ2EsZisuMTIqbCtDYV0sW3MtLjIxNCpsLUNhLGYrLjIzNCpsLUNhXV0pLnN0cmVhbShjKS5wb2ludCx1PWEudHJhbnNsYXRlKFtzLS4yMDUqbCxmKy4yMTIqbF0pLmNsaXBFeHRlbnQoW1tzLS4yMTQqbCtDYSxmKy4xNjYqbCtDYV0sW3MtLjExNSpsLUNhLGYrLjIzNCpsLUNhXV0pLnN0cmVhbShjKS5wb2ludCxufSxuLnNjYWxlKDEwNzApfTt2YXIgUmMsRGMsUGMsVWMsamMsRmMsSGM9e3BvaW50OmIsbGluZVN0YXJ0OmIsbGluZUVuZDpiLHBvbHlnb25TdGFydDpmdW5jdGlvbigpe0RjPTAsSGMubGluZVN0YXJ0PVZlfSxwb2x5Z29uRW5kOmZ1bmN0aW9uKCl7SGMubGluZVN0YXJ0PUhjLmxpbmVFbmQ9SGMucG9pbnQ9YixSYys9Z2EoRGMvMil9fSxPYz17cG9pbnQ6WGUsbGluZVN0YXJ0OmIsbGluZUVuZDpiLHBvbHlnb25TdGFydDpiLHBvbHlnb25FbmQ6Yn0sSWM9e3BvaW50OldlLGxpbmVTdGFydDpKZSxsaW5lRW5kOkdlLHBvbHlnb25TdGFydDpmdW5jdGlvbigpe0ljLmxpbmVTdGFydD1LZX0scG9seWdvbkVuZDpmdW5jdGlvbigpe0ljLnBvaW50PVdlLEljLmxpbmVTdGFydD1KZSxJYy5saW5lRW5kPUdlfX07dGEuZ2VvLnBhdGg9ZnVuY3Rpb24oKXtmdW5jdGlvbiBuKG4pe3JldHVybiBuJiYoImZ1bmN0aW9uIj09dHlwZW9mIGEmJmkucG9pbnRSYWRpdXMoK2EuYXBwbHkodGhpcyxhcmd1bWVudHMpKSxvJiZvLnZhbGlkfHwobz11KGkpKSx0YS5nZW8uc3RyZWFtKG4sbykpLGkucmVzdWx0KCl9ZnVuY3Rpb24gdCgpe3JldHVybiBvPW51bGwsbn12YXIgZSxyLHUsaSxvLGE9NC41O3JldHVybiBuLmFyZWE9ZnVuY3Rpb24obil7cmV0dXJuIFJjPTAsdGEuZ2VvLnN0cmVhbShuLHUoSGMpKSxSY30sbi5jZW50cm9pZD1mdW5jdGlvbihuKXtyZXR1cm4gX2M9d2M9U2M9a2M9RWM9QWM9TmM9Q2M9emM9MCx0YS5nZW8uc3RyZWFtKG4sdShJYykpLHpjP1tOYy96YyxDYy96Y106QWM/W2tjL0FjLEVjL0FjXTpTYz9bX2MvU2Msd2MvU2NdOlswLzAsMC8wXX0sbi5ib3VuZHM9ZnVuY3Rpb24obil7cmV0dXJuIGpjPUZjPS0oUGM9VWM9MS8wKSx0YS5nZW8uc3RyZWFtKG4sdShPYykpLFtbUGMsVWNdLFtqYyxGY11dfSxuLnByb2plY3Rpb249ZnVuY3Rpb24obil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHU9KGU9bik/bi5zdHJlYW18fHRyKG4pOnksdCgpKTplfSxuLmNvbnRleHQ9ZnVuY3Rpb24obil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGk9bnVsbD09KHI9bik/bmV3ICRlOm5ldyBRZShuKSwiZnVuY3Rpb24iIT10eXBlb2YgYSYmaS5wb2ludFJhZGl1cyhhKSx0KCkpOnJ9LG4ucG9pbnRSYWRpdXM9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGE9ImZ1bmN0aW9uIj09dHlwZW9mIHQ/dDooaS5wb2ludFJhZGl1cygrdCksK3QpLG4pOmF9LG4ucHJvamVjdGlvbih0YS5nZW8uYWxiZXJzVXNhKCkpLmNvbnRleHQobnVsbCl9LHRhLmdlby50cmFuc2Zvcm09ZnVuY3Rpb24obil7cmV0dXJue3N0cmVhbTpmdW5jdGlvbih0KXt2YXIgZT1uZXcgZXIodCk7Zm9yKHZhciByIGluIG4pZVtyXT1uW3JdO3JldHVybiBlfX19LGVyLnByb3RvdHlwZT17cG9pbnQ6ZnVuY3Rpb24obix0KXt0aGlzLnN0cmVhbS5wb2ludChuLHQpfSxzcGhlcmU6ZnVuY3Rpb24oKXt0aGlzLnN0cmVhbS5zcGhlcmUoKX0sbGluZVN0YXJ0OmZ1bmN0aW9uKCl7dGhpcy5zdHJlYW0ubGluZVN0YXJ0KCl9LGxpbmVFbmQ6ZnVuY3Rpb24oKXt0aGlzLnN0cmVhbS5saW5lRW5kKCl9LHBvbHlnb25TdGFydDpmdW5jdGlvbigpe3RoaXMuc3RyZWFtLnBvbHlnb25TdGFydCgpfSxwb2x5Z29uRW5kOmZ1bmN0aW9uKCl7dGhpcy5zdHJlYW0ucG9seWdvbkVuZCgpfX0sdGEuZ2VvLnByb2plY3Rpb249dXIsdGEuZ2VvLnByb2plY3Rpb25NdXRhdG9yPWlyLCh0YS5nZW8uZXF1aXJlY3Rhbmd1bGFyPWZ1bmN0aW9uKCl7cmV0dXJuIHVyKGFyKX0pLnJhdz1hci5pbnZlcnQ9YXIsdGEuZ2VvLnJvdGF0aW9uPWZ1bmN0aW9uKG4pe2Z1bmN0aW9uIHQodCl7cmV0dXJuIHQ9bih0WzBdKkRhLHRbMV0qRGEpLHRbMF0qPVBhLHRbMV0qPVBhLHR9cmV0dXJuIG49bHIoblswXSUzNjAqRGEsblsxXSpEYSxuLmxlbmd0aD4yP25bMl0qRGE6MCksdC5pbnZlcnQ9ZnVuY3Rpb24odCl7cmV0dXJuIHQ9bi5pbnZlcnQodFswXSpEYSx0WzFdKkRhKSx0WzBdKj1QYSx0WzFdKj1QYSx0fSx0fSxjci5pbnZlcnQ9YXIsdGEuZ2VvLmNpcmNsZT1mdW5jdGlvbigpe2Z1bmN0aW9uIG4oKXt2YXIgbj0iZnVuY3Rpb24iPT10eXBlb2Ygcj9yLmFwcGx5KHRoaXMsYXJndW1lbnRzKTpyLHQ9bHIoLW5bMF0qRGEsLW5bMV0qRGEsMCkuaW52ZXJ0LHU9W107cmV0dXJuIGUobnVsbCxudWxsLDEse3BvaW50OmZ1bmN0aW9uKG4sZSl7dS5wdXNoKG49dChuLGUpKSxuWzBdKj1QYSxuWzFdKj1QYX19KSx7dHlwZToiUG9seWdvbiIsY29vcmRpbmF0ZXM6W3VdfX12YXIgdCxlLHI9WzAsMF0sdT02O3JldHVybiBuLm9yaWdpbj1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8ocj10LG4pOnJ9LG4uYW5nbGU9ZnVuY3Rpb24ocil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGU9Z3IoKHQ9K3IpKkRhLHUqRGEpLG4pOnR9LG4ucHJlY2lzaW9uPWZ1bmN0aW9uKHIpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhlPWdyKHQqRGEsKHU9K3IpKkRhKSxuKTp1fSxuLmFuZ2xlKDkwKX0sdGEuZ2VvLmRpc3RhbmNlPWZ1bmN0aW9uKG4sdCl7dmFyIGUscj0odFswXS1uWzBdKSpEYSx1PW5bMV0qRGEsaT10WzFdKkRhLG89TWF0aC5zaW4ociksYT1NYXRoLmNvcyhyKSxjPU1hdGguc2luKHUpLGw9TWF0aC5jb3ModSkscz1NYXRoLnNpbihpKSxmPU1hdGguY29zKGkpO3JldHVybiBNYXRoLmF0YW4yKE1hdGguc3FydCgoZT1mKm8pKmUrKGU9bCpzLWMqZiphKSplKSxjKnMrbCpmKmEpfSx0YS5nZW8uZ3JhdGljdWxlPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gbigpe3JldHVybnt0eXBlOiJNdWx0aUxpbmVTdHJpbmciLGNvb3JkaW5hdGVzOnQoKX19ZnVuY3Rpb24gdCgpe3JldHVybiB0YS5yYW5nZShNYXRoLmNlaWwoaS9kKSpkLHUsZCkubWFwKGgpLmNvbmNhdCh0YS5yYW5nZShNYXRoLmNlaWwobC9tKSptLGMsbSkubWFwKGcpKS5jb25jYXQodGEucmFuZ2UoTWF0aC5jZWlsKHIvcCkqcCxlLHApLmZpbHRlcihmdW5jdGlvbihuKXtyZXR1cm4gZ2EobiVkKT5DYX0pLm1hcChzKSkuY29uY2F0KHRhLnJhbmdlKE1hdGguY2VpbChhL3YpKnYsbyx2KS5maWx0ZXIoZnVuY3Rpb24obil7cmV0dXJuIGdhKG4lbSk+Q2F9KS5tYXAoZikpfXZhciBlLHIsdSxpLG8sYSxjLGwscyxmLGgsZyxwPTEwLHY9cCxkPTkwLG09MzYwLHk9Mi41O3JldHVybiBuLmxpbmVzPWZ1bmN0aW9uKCl7cmV0dXJuIHQoKS5tYXAoZnVuY3Rpb24obil7cmV0dXJue3R5cGU6IkxpbmVTdHJpbmciLGNvb3JkaW5hdGVzOm59fSl9LG4ub3V0bGluZT1mdW5jdGlvbigpe3JldHVybnt0eXBlOiJQb2x5Z29uIixjb29yZGluYXRlczpbaChpKS5jb25jYXQoZyhjKS5zbGljZSgxKSxoKHUpLnJldmVyc2UoKS5zbGljZSgxKSxnKGwpLnJldmVyc2UoKS5zbGljZSgxKSldfX0sbi5leHRlbnQ9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/bi5tYWpvckV4dGVudCh0KS5taW5vckV4dGVudCh0KTpuLm1pbm9yRXh0ZW50KCl9LG4ubWFqb3JFeHRlbnQ9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGk9K3RbMF1bMF0sdT0rdFsxXVswXSxsPSt0WzBdWzFdLGM9K3RbMV1bMV0saT51JiYodD1pLGk9dSx1PXQpLGw+YyYmKHQ9bCxsPWMsYz10KSxuLnByZWNpc2lvbih5KSk6W1tpLGxdLFt1LGNdXX0sbi5taW5vckV4dGVudD1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8ocj0rdFswXVswXSxlPSt0WzFdWzBdLGE9K3RbMF1bMV0sbz0rdFsxXVsxXSxyPmUmJih0PXIscj1lLGU9dCksYT5vJiYodD1hLGE9byxvPXQpLG4ucHJlY2lzaW9uKHkpKTpbW3IsYV0sW2Usb11dfSxuLnN0ZXA9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/bi5tYWpvclN0ZXAodCkubWlub3JTdGVwKHQpOm4ubWlub3JTdGVwKCl9LG4ubWFqb3JTdGVwPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhkPSt0WzBdLG09K3RbMV0sbik6W2QsbV19LG4ubWlub3JTdGVwPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhwPSt0WzBdLHY9K3RbMV0sbik6W3Asdl19LG4ucHJlY2lzaW9uPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh5PSt0LHM9dnIoYSxvLDkwKSxmPWRyKHIsZSx5KSxoPXZyKGwsYyw5MCksZz1kcihpLHUseSksbik6eX0sbi5tYWpvckV4dGVudChbWy0xODAsLTkwK0NhXSxbMTgwLDkwLUNhXV0pLm1pbm9yRXh0ZW50KFtbLTE4MCwtODAtQ2FdLFsxODAsODArQ2FdXSl9LHRhLmdlby5ncmVhdEFyYz1mdW5jdGlvbigpe2Z1bmN0aW9uIG4oKXtyZXR1cm57dHlwZToiTGluZVN0cmluZyIsY29vcmRpbmF0ZXM6W3R8fHIuYXBwbHkodGhpcyxhcmd1bWVudHMpLGV8fHUuYXBwbHkodGhpcyxhcmd1bWVudHMpXX19dmFyIHQsZSxyPW1yLHU9eXI7cmV0dXJuIG4uZGlzdGFuY2U9ZnVuY3Rpb24oKXtyZXR1cm4gdGEuZ2VvLmRpc3RhbmNlKHR8fHIuYXBwbHkodGhpcyxhcmd1bWVudHMpLGV8fHUuYXBwbHkodGhpcyxhcmd1bWVudHMpKX0sbi5zb3VyY2U9ZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHI9ZSx0PSJmdW5jdGlvbiI9PXR5cGVvZiBlP251bGw6ZSxuKTpyfSxuLnRhcmdldD1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8odT10LGU9ImZ1bmN0aW9uIj09dHlwZW9mIHQ/bnVsbDp0LG4pOnV9LG4ucHJlY2lzaW9uPWZ1bmN0aW9uKCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/bjowfSxufSx0YS5nZW8uaW50ZXJwb2xhdGU9ZnVuY3Rpb24obix0KXtyZXR1cm4gTXIoblswXSpEYSxuWzFdKkRhLHRbMF0qRGEsdFsxXSpEYSl9LHRhLmdlby5sZW5ndGg9ZnVuY3Rpb24obil7cmV0dXJuIFljPTAsdGEuZ2VvLnN0cmVhbShuLFpjKSxZY307dmFyIFljLFpjPXtzcGhlcmU6Yixwb2ludDpiLGxpbmVTdGFydDp4cixsaW5lRW5kOmIscG9seWdvblN0YXJ0OmIscG9seWdvbkVuZDpifSxWYz1icihmdW5jdGlvbihuKXtyZXR1cm4gTWF0aC5zcXJ0KDIvKDErbikpfSxmdW5jdGlvbihuKXtyZXR1cm4gMipNYXRoLmFzaW4obi8yKX0pOyh0YS5nZW8uYXppbXV0aGFsRXF1YWxBcmVhPWZ1bmN0aW9uKCl7cmV0dXJuIHVyKFZjKX0pLnJhdz1WYzt2YXIgWGM9YnIoZnVuY3Rpb24obil7dmFyIHQ9TWF0aC5hY29zKG4pO3JldHVybiB0JiZ0L01hdGguc2luKHQpfSx5KTsodGEuZ2VvLmF6aW11dGhhbEVxdWlkaXN0YW50PWZ1bmN0aW9uKCl7cmV0dXJuIHVyKFhjKX0pLnJhdz1YYywodGEuZ2VvLmNvbmljQ29uZm9ybWFsPWZ1bmN0aW9uKCl7cmV0dXJuIFllKF9yKX0pLnJhdz1fciwodGEuZ2VvLmNvbmljRXF1aWRpc3RhbnQ9ZnVuY3Rpb24oKXtyZXR1cm4gWWUod3IpfSkucmF3PXdyO3ZhciAkYz1icihmdW5jdGlvbihuKXtyZXR1cm4gMS9ufSxNYXRoLmF0YW4pOyh0YS5nZW8uZ25vbW9uaWM9ZnVuY3Rpb24oKXtyZXR1cm4gdXIoJGMpfSkucmF3PSRjLFNyLmludmVydD1mdW5jdGlvbihuLHQpe3JldHVybltuLDIqTWF0aC5hdGFuKE1hdGguZXhwKHQpKS1SYV19LCh0YS5nZW8ubWVyY2F0b3I9ZnVuY3Rpb24oKXtyZXR1cm4ga3IoU3IpfSkucmF3PVNyO3ZhciBCYz1icihmdW5jdGlvbigpe3JldHVybiAxfSxNYXRoLmFzaW4pOyh0YS5nZW8ub3J0aG9ncmFwaGljPWZ1bmN0aW9uKCl7cmV0dXJuIHVyKEJjKX0pLnJhdz1CYzt2YXIgV2M9YnIoZnVuY3Rpb24obil7cmV0dXJuIDEvKDErbil9LGZ1bmN0aW9uKG4pe3JldHVybiAyKk1hdGguYXRhbihuKX0pOyh0YS5nZW8uc3RlcmVvZ3JhcGhpYz1mdW5jdGlvbigpe3JldHVybiB1cihXYyl9KS5yYXc9V2MsRXIuaW52ZXJ0PWZ1bmN0aW9uKG4sdCl7cmV0dXJuWy10LDIqTWF0aC5hdGFuKE1hdGguZXhwKG4pKS1SYV19LCh0YS5nZW8udHJhbnN2ZXJzZU1lcmNhdG9yPWZ1bmN0aW9uKCl7dmFyIG49a3IoRXIpLHQ9bi5jZW50ZXIsZT1uLnJvdGF0ZTtyZXR1cm4gbi5jZW50ZXI9ZnVuY3Rpb24obil7cmV0dXJuIG4/dChbLW5bMV0sblswXV0pOihuPXQoKSxbblsxXSwtblswXV0pfSxuLnJvdGF0ZT1mdW5jdGlvbihuKXtyZXR1cm4gbj9lKFtuWzBdLG5bMV0sbi5sZW5ndGg+Mj9uWzJdKzkwOjkwXSk6KG49ZSgpLFtuWzBdLG5bMV0sblsyXS05MF0pfSxlKFswLDAsOTBdKX0pLnJhdz1Fcix0YS5nZW9tPXt9LHRhLmdlb20uaHVsbD1mdW5jdGlvbihuKXtmdW5jdGlvbiB0KG4pe2lmKG4ubGVuZ3RoPDMpcmV0dXJuW107dmFyIHQsdT1FdChlKSxpPUV0KHIpLG89bi5sZW5ndGgsYT1bXSxjPVtdO2Zvcih0PTA7bz50O3QrKylhLnB1c2goWyt1LmNhbGwodGhpcyxuW3RdLHQpLCtpLmNhbGwodGhpcyxuW3RdLHQpLHRdKTtmb3IoYS5zb3J0KHpyKSx0PTA7bz50O3QrKyljLnB1c2goW2FbdF1bMF0sLWFbdF1bMV1dKTt2YXIgbD1DcihhKSxzPUNyKGMpLGY9c1swXT09PWxbMF0saD1zW3MubGVuZ3RoLTFdPT09bFtsLmxlbmd0aC0xXSxnPVtdO2Zvcih0PWwubGVuZ3RoLTE7dD49MDstLXQpZy5wdXNoKG5bYVtsW3RdXVsyXV0pO2Zvcih0PStmO3Q8cy5sZW5ndGgtaDsrK3QpZy5wdXNoKG5bYVtzW3RdXVsyXV0pO3JldHVybiBnfXZhciBlPUFyLHI9TnI7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/dChuKToodC54PWZ1bmN0aW9uKG4pe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhlPW4sdCk6ZX0sdC55PWZ1bmN0aW9uKG4pe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhyPW4sdCk6cn0sdCl9LHRhLmdlb20ucG9seWdvbj1mdW5jdGlvbihuKXtyZXR1cm4geWEobixKYyksbn07dmFyIEpjPXRhLmdlb20ucG9seWdvbi5wcm90b3R5cGU9W107SmMuYXJlYT1mdW5jdGlvbigpe2Zvcih2YXIgbix0PS0xLGU9dGhpcy5sZW5ndGgscj10aGlzW2UtMV0sdT0wOysrdDxlOyluPXIscj10aGlzW3RdLHUrPW5bMV0qclswXS1uWzBdKnJbMV07cmV0dXJuLjUqdX0sSmMuY2VudHJvaWQ9ZnVuY3Rpb24obil7dmFyIHQsZSxyPS0xLHU9dGhpcy5sZW5ndGgsaT0wLG89MCxhPXRoaXNbdS0xXTtmb3IoYXJndW1lbnRzLmxlbmd0aHx8KG49LTEvKDYqdGhpcy5hcmVhKCkpKTsrK3I8dTspdD1hLGE9dGhpc1tyXSxlPXRbMF0qYVsxXS1hWzBdKnRbMV0saSs9KHRbMF0rYVswXSkqZSxvKz0odFsxXSthWzFdKSplO3JldHVybltpKm4sbypuXX0sSmMuY2xpcD1mdW5jdGlvbihuKXtmb3IodmFyIHQsZSxyLHUsaSxvLGE9VHIobiksYz0tMSxsPXRoaXMubGVuZ3RoLVRyKHRoaXMpLHM9dGhpc1tsLTFdOysrYzxsOyl7Zm9yKHQ9bi5zbGljZSgpLG4ubGVuZ3RoPTAsdT10aGlzW2NdLGk9dFsocj10Lmxlbmd0aC1hKS0xXSxlPS0xOysrZTxyOylvPXRbZV0scXIobyxzLHUpPyhxcihpLHMsdSl8fG4ucHVzaChMcihpLG8scyx1KSksbi5wdXNoKG8pKTpxcihpLHMsdSkmJm4ucHVzaChMcihpLG8scyx1KSksaT1vO2EmJm4ucHVzaChuWzBdKSxzPXV9cmV0dXJuIG59O3ZhciBHYyxLYyxRYyxubCx0bCxlbD1bXSxybD1bXTtPci5wcm90b3R5cGUucHJlcGFyZT1mdW5jdGlvbigpe2Zvcih2YXIgbix0PXRoaXMuZWRnZXMsZT10Lmxlbmd0aDtlLS07KW49dFtlXS5lZGdlLG4uYiYmbi5hfHx0LnNwbGljZShlLDEpO3JldHVybiB0LnNvcnQoWXIpLHQubGVuZ3RofSxRci5wcm90b3R5cGU9e3N0YXJ0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZWRnZS5sPT09dGhpcy5zaXRlP3RoaXMuZWRnZS5hOnRoaXMuZWRnZS5ifSxlbmQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5lZGdlLmw9PT10aGlzLnNpdGU/dGhpcy5lZGdlLmI6dGhpcy5lZGdlLmF9fSxudS5wcm90b3R5cGU9e2luc2VydDpmdW5jdGlvbihuLHQpe3ZhciBlLHIsdTtpZihuKXtpZih0LlA9bix0Lk49bi5OLG4uTiYmKG4uTi5QPXQpLG4uTj10LG4uUil7Zm9yKG49bi5SO24uTDspbj1uLkw7bi5MPXR9ZWxzZSBuLlI9dDtlPW59ZWxzZSB0aGlzLl8/KG49dXUodGhpcy5fKSx0LlA9bnVsbCx0Lk49bixuLlA9bi5MPXQsZT1uKToodC5QPXQuTj1udWxsLHRoaXMuXz10LGU9bnVsbCk7Zm9yKHQuTD10LlI9bnVsbCx0LlU9ZSx0LkM9ITAsbj10O2UmJmUuQzspcj1lLlUsZT09PXIuTD8odT1yLlIsdSYmdS5DPyhlLkM9dS5DPSExLHIuQz0hMCxuPXIpOihuPT09ZS5SJiYoZXUodGhpcyxlKSxuPWUsZT1uLlUpLGUuQz0hMSxyLkM9ITAscnUodGhpcyxyKSkpOih1PXIuTCx1JiZ1LkM/KGUuQz11LkM9ITEsci5DPSEwLG49cik6KG49PT1lLkwmJihydSh0aGlzLGUpLG49ZSxlPW4uVSksZS5DPSExLHIuQz0hMCxldSh0aGlzLHIpKSksZT1uLlU7dGhpcy5fLkM9ITF9LHJlbW92ZTpmdW5jdGlvbihuKXtuLk4mJihuLk4uUD1uLlApLG4uUCYmKG4uUC5OPW4uTiksbi5OPW4uUD1udWxsO3ZhciB0LGUscix1PW4uVSxpPW4uTCxvPW4uUjtpZihlPWk/bz91dShvKTppOm8sdT91Lkw9PT1uP3UuTD1lOnUuUj1lOnRoaXMuXz1lLGkmJm8/KHI9ZS5DLGUuQz1uLkMsZS5MPWksaS5VPWUsZSE9PW8/KHU9ZS5VLGUuVT1uLlUsbj1lLlIsdS5MPW4sZS5SPW8sby5VPWUpOihlLlU9dSx1PWUsbj1lLlIpKToocj1uLkMsbj1lKSxuJiYobi5VPXUpLCFyKXtpZihuJiZuLkMpcmV0dXJuIHZvaWQobi5DPSExKTtkb3tpZihuPT09dGhpcy5fKWJyZWFrO2lmKG49PT11Lkwpe2lmKHQ9dS5SLHQuQyYmKHQuQz0hMSx1LkM9ITAsZXUodGhpcyx1KSx0PXUuUiksdC5MJiZ0LkwuQ3x8dC5SJiZ0LlIuQyl7dC5SJiZ0LlIuQ3x8KHQuTC5DPSExLHQuQz0hMCxydSh0aGlzLHQpLHQ9dS5SKSx0LkM9dS5DLHUuQz10LlIuQz0hMSxldSh0aGlzLHUpLG49dGhpcy5fO2JyZWFrfX1lbHNlIGlmKHQ9dS5MLHQuQyYmKHQuQz0hMSx1LkM9ITAscnUodGhpcyx1KSx0PXUuTCksdC5MJiZ0LkwuQ3x8dC5SJiZ0LlIuQyl7dC5MJiZ0LkwuQ3x8KHQuUi5DPSExLHQuQz0hMCxldSh0aGlzLHQpLHQ9dS5MKSx0LkM9dS5DLHUuQz10LkwuQz0hMSxydSh0aGlzLHUpLG49dGhpcy5fO2JyZWFrfXQuQz0hMCxuPXUsdT11LlV9d2hpbGUoIW4uQyk7biYmKG4uQz0hMSl9fX0sdGEuZ2VvbS52b3Jvbm9pPWZ1bmN0aW9uKG4pe2Z1bmN0aW9uIHQobil7dmFyIHQ9bmV3IEFycmF5KG4ubGVuZ3RoKSxyPWFbMF1bMF0sdT1hWzBdWzFdLGk9YVsxXVswXSxvPWFbMV1bMV07cmV0dXJuIGl1KGUobiksYSkuY2VsbHMuZm9yRWFjaChmdW5jdGlvbihlLGEpe3ZhciBjPWUuZWRnZXMsbD1lLnNpdGUscz10W2FdPWMubGVuZ3RoP2MubWFwKGZ1bmN0aW9uKG4pe3ZhciB0PW4uc3RhcnQoKTtyZXR1cm5bdC54LHQueV19KTpsLng+PXImJmwueDw9aSYmbC55Pj11JiZsLnk8PW8/W1tyLG9dLFtpLG9dLFtpLHVdLFtyLHVdXTpbXTtzLnBvaW50PW5bYV19KSx0fWZ1bmN0aW9uIGUobil7cmV0dXJuIG4ubWFwKGZ1bmN0aW9uKG4sdCl7cmV0dXJue3g6TWF0aC5yb3VuZChpKG4sdCkvQ2EpKkNhLHk6TWF0aC5yb3VuZChvKG4sdCkvQ2EpKkNhLGk6dH19KX12YXIgcj1Bcix1PU5yLGk9cixvPXUsYT11bDtyZXR1cm4gbj90KG4pOih0LmxpbmtzPWZ1bmN0aW9uKG4pe3JldHVybiBpdShlKG4pKS5lZGdlcy5maWx0ZXIoZnVuY3Rpb24obil7cmV0dXJuIG4ubCYmbi5yfSkubWFwKGZ1bmN0aW9uKHQpe3JldHVybntzb3VyY2U6blt0LmwuaV0sdGFyZ2V0Om5bdC5yLmldfX0pfSx0LnRyaWFuZ2xlcz1mdW5jdGlvbihuKXt2YXIgdD1bXTtyZXR1cm4gaXUoZShuKSkuY2VsbHMuZm9yRWFjaChmdW5jdGlvbihlLHIpe2Zvcih2YXIgdSxpLG89ZS5zaXRlLGE9ZS5lZGdlcy5zb3J0KFlyKSxjPS0xLGw9YS5sZW5ndGgscz1hW2wtMV0uZWRnZSxmPXMubD09PW8/cy5yOnMubDsrK2M8bDspdT1zLGk9ZixzPWFbY10uZWRnZSxmPXMubD09PW8/cy5yOnMubCxyPGkuaSYmcjxmLmkmJmF1KG8saSxmKTwwJiZ0LnB1c2goW25bcl0sbltpLmldLG5bZi5pXV0pfSksdH0sdC54PWZ1bmN0aW9uKG4pe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhpPUV0KHI9biksdCk6cn0sdC55PWZ1bmN0aW9uKG4pe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhvPUV0KHU9biksdCk6dX0sdC5jbGlwRXh0ZW50PWZ1bmN0aW9uKG4pe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhhPW51bGw9PW4/dWw6bix0KTphPT09dWw/bnVsbDphfSx0LnNpemU9ZnVuY3Rpb24obil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/dC5jbGlwRXh0ZW50KG4mJltbMCwwXSxuXSk6YT09PXVsP251bGw6YSYmYVsxXX0sdCl9O3ZhciB1bD1bWy0xZTYsLTFlNl0sWzFlNiwxZTZdXTt0YS5nZW9tLmRlbGF1bmF5PWZ1bmN0aW9uKG4pe3JldHVybiB0YS5nZW9tLnZvcm9ub2koKS50cmlhbmdsZXMobil9LHRhLmdlb20ucXVhZHRyZWU9ZnVuY3Rpb24obix0LGUscix1KXtmdW5jdGlvbiBpKG4pe2Z1bmN0aW9uIGkobix0LGUscix1LGksbyxhKXtpZighaXNOYU4oZSkmJiFpc05hTihyKSlpZihuLmxlYWYpe3ZhciBjPW4ueCxzPW4ueTtpZihudWxsIT1jKWlmKGdhKGMtZSkrZ2Eocy1yKTwuMDEpbChuLHQsZSxyLHUsaSxvLGEpO2Vsc2V7dmFyIGY9bi5wb2ludDtuLng9bi55PW4ucG9pbnQ9bnVsbCxsKG4sZixjLHMsdSxpLG8sYSksbChuLHQsZSxyLHUsaSxvLGEpfWVsc2Ugbi54PWUsbi55PXIsbi5wb2ludD10fWVsc2UgbChuLHQsZSxyLHUsaSxvLGEpfWZ1bmN0aW9uIGwobix0LGUscix1LG8sYSxjKXt2YXIgbD0uNSoodSthKSxzPS41KihvK2MpLGY9ZT49bCxoPXI+PXMsZz1oPDwxfGY7bi5sZWFmPSExLG49bi5ub2Rlc1tnXXx8KG4ubm9kZXNbZ109c3UoKSksZj91PWw6YT1sLGg/bz1zOmM9cyxpKG4sdCxlLHIsdSxvLGEsYyl9dmFyIHMsZixoLGcscCx2LGQsbSx5LE09RXQoYSkseD1FdChjKTtpZihudWxsIT10KXY9dCxkPWUsbT1yLHk9dTtlbHNlIGlmKG09eT0tKHY9ZD0xLzApLGY9W10saD1bXSxwPW4ubGVuZ3RoLG8pZm9yKGc9MDtwPmc7KytnKXM9bltnXSxzLng8diYmKHY9cy54KSxzLnk8ZCYmKGQ9cy55KSxzLng+bSYmKG09cy54KSxzLnk+eSYmKHk9cy55KSxmLnB1c2gocy54KSxoLnB1c2gocy55KTtlbHNlIGZvcihnPTA7cD5nOysrZyl7dmFyIGI9K00ocz1uW2ddLGcpLF89K3gocyxnKTt2PmImJih2PWIpLGQ+XyYmKGQ9XyksYj5tJiYobT1iKSxfPnkmJih5PV8pLGYucHVzaChiKSxoLnB1c2goXyl9dmFyIHc9bS12LFM9eS1kO3c+Uz95PWQrdzptPXYrUzt2YXIgaz1zdSgpO2lmKGsuYWRkPWZ1bmN0aW9uKG4pe2koayxuLCtNKG4sKytnKSwreChuLGcpLHYsZCxtLHkpfSxrLnZpc2l0PWZ1bmN0aW9uKG4pe2Z1KG4sayx2LGQsbSx5KX0say5maW5kPWZ1bmN0aW9uKG4pe3JldHVybiBodShrLG5bMF0sblsxXSx2LGQsbSx5KX0sZz0tMSxudWxsPT10KXtmb3IoOysrZzxwOylpKGssbltnXSxmW2ddLGhbZ10sdixkLG0seSk7LS1nfWVsc2Ugbi5mb3JFYWNoKGsuYWRkKTtyZXR1cm4gZj1oPW49cz1udWxsLGt9dmFyIG8sYT1BcixjPU5yO3JldHVybihvPWFyZ3VtZW50cy5sZW5ndGgpPyhhPWN1LGM9bHUsMz09PW8mJih1PWUscj10LGU9dD0wKSxpKG4pKTooaS54PWZ1bmN0aW9uKG4pe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhhPW4saSk6YX0saS55PWZ1bmN0aW9uKG4pe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhjPW4saSk6Y30saS5leHRlbnQ9ZnVuY3Rpb24obil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG51bGw9PW4/dD1lPXI9dT1udWxsOih0PStuWzBdWzBdLGU9K25bMF1bMV0scj0rblsxXVswXSx1PStuWzFdWzFdKSxpKTpudWxsPT10P251bGw6W1t0LGVdLFtyLHVdXX0saS5zaXplPWZ1bmN0aW9uKG4pe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhudWxsPT1uP3Q9ZT1yPXU9bnVsbDoodD1lPTAscj0rblswXSx1PStuWzFdKSxpKTpudWxsPT10P251bGw6W3ItdCx1LWVdfSxpKX0sdGEuaW50ZXJwb2xhdGVSZ2I9Z3UsdGEuaW50ZXJwb2xhdGVPYmplY3Q9cHUsdGEuaW50ZXJwb2xhdGVOdW1iZXI9dnUsdGEuaW50ZXJwb2xhdGVTdHJpbmc9ZHU7dmFyIGlsPS9bLStdPyg/OlxkK1wuP1xkKnxcLj9cZCspKD86W2VFXVstK10/XGQrKT8vZyxvbD1uZXcgUmVnRXhwKGlsLnNvdXJjZSwiZyIpO3RhLmludGVycG9sYXRlPW11LHRhLmludGVycG9sYXRvcnM9W2Z1bmN0aW9uKG4sdCl7dmFyIGU9dHlwZW9mIHQ7cmV0dXJuKCJzdHJpbmciPT09ZT9HYS5oYXModCl8fC9eKCN8cmdiXCh8aHNsXCgpLy50ZXN0KHQpP2d1OmR1OnQgaW5zdGFuY2VvZiBvdD9ndTpBcnJheS5pc0FycmF5KHQpP3l1OiJvYmplY3QiPT09ZSYmaXNOYU4odCk/cHU6dnUpKG4sdCl9XSx0YS5pbnRlcnBvbGF0ZUFycmF5PXl1O3ZhciBhbD1mdW5jdGlvbigpe3JldHVybiB5fSxjbD10YS5tYXAoe2xpbmVhcjphbCxwb2x5Omt1LHF1YWQ6ZnVuY3Rpb24oKXtyZXR1cm4gX3V9LGN1YmljOmZ1bmN0aW9uKCl7cmV0dXJuIHd1fSxzaW46ZnVuY3Rpb24oKXtyZXR1cm4gRXV9LGV4cDpmdW5jdGlvbigpe3JldHVybiBBdX0sY2lyY2xlOmZ1bmN0aW9uKCl7cmV0dXJuIE51fSxlbGFzdGljOkN1LGJhY2s6enUsYm91bmNlOmZ1bmN0aW9uKCl7cmV0dXJuIHF1fX0pLGxsPXRhLm1hcCh7ImluIjp5LG91dDp4dSwiaW4tb3V0IjpidSwib3V0LWluIjpmdW5jdGlvbihuKXtyZXR1cm4gYnUoeHUobikpfX0pO3RhLmVhc2U9ZnVuY3Rpb24obil7dmFyIHQ9bi5pbmRleE9mKCItIiksZT10Pj0wP24uc2xpY2UoMCx0KTpuLHI9dD49MD9uLnNsaWNlKHQrMSk6ImluIjtyZXR1cm4gZT1jbC5nZXQoZSl8fGFsLHI9bGwuZ2V0KHIpfHx5LE11KHIoZS5hcHBseShudWxsLGVhLmNhbGwoYXJndW1lbnRzLDEpKSkpfSx0YS5pbnRlcnBvbGF0ZUhjbD1MdSx0YS5pbnRlcnBvbGF0ZUhzbD1UdSx0YS5pbnRlcnBvbGF0ZUxhYj1SdSx0YS5pbnRlcnBvbGF0ZVJvdW5kPUR1LHRhLnRyYW5zZm9ybT1mdW5jdGlvbihuKXt2YXIgdD11YS5jcmVhdGVFbGVtZW50TlModGEubnMucHJlZml4LnN2ZywiZyIpO3JldHVybih0YS50cmFuc2Zvcm09ZnVuY3Rpb24obil7aWYobnVsbCE9bil7dC5zZXRBdHRyaWJ1dGUoInRyYW5zZm9ybSIsbik7dmFyIGU9dC50cmFuc2Zvcm0uYmFzZVZhbC5jb25zb2xpZGF0ZSgpfXJldHVybiBuZXcgUHUoZT9lLm1hdHJpeDpzbCl9KShuKX0sUHUucHJvdG90eXBlLnRvU3RyaW5nPWZ1bmN0aW9uKCl7cmV0dXJuInRyYW5zbGF0ZSgiK3RoaXMudHJhbnNsYXRlKyIpcm90YXRlKCIrdGhpcy5yb3RhdGUrIilza2V3WCgiK3RoaXMuc2tldysiKXNjYWxlKCIrdGhpcy5zY2FsZSsiKSJ9O3ZhciBzbD17YToxLGI6MCxjOjAsZDoxLGU6MCxmOjB9O3RhLmludGVycG9sYXRlVHJhbnNmb3JtPUh1LHRhLmxheW91dD17fSx0YS5sYXlvdXQuYnVuZGxlPWZ1bmN0aW9uKCl7cmV0dXJuIGZ1bmN0aW9uKG4pe2Zvcih2YXIgdD1bXSxlPS0xLHI9bi5sZW5ndGg7KytlPHI7KXQucHVzaChZdShuW2VdKSk7cmV0dXJuIHR9fSx0YS5sYXlvdXQuY2hvcmQ9ZnVuY3Rpb24oKXtmdW5jdGlvbiBuKCl7dmFyIG4sbCxmLGgsZyxwPXt9LHY9W10sZD10YS5yYW5nZShpKSxtPVtdO2ZvcihlPVtdLHI9W10sbj0wLGg9LTE7KytoPGk7KXtmb3IobD0wLGc9LTE7KytnPGk7KWwrPXVbaF1bZ107di5wdXNoKGwpLG0ucHVzaCh0YS5yYW5nZShpKSksbis9bH1mb3IobyYmZC5zb3J0KGZ1bmN0aW9uKG4sdCl7cmV0dXJuIG8odltuXSx2W3RdKX0pLGEmJm0uZm9yRWFjaChmdW5jdGlvbihuLHQpe24uc29ydChmdW5jdGlvbihuLGUpe3JldHVybiBhKHVbdF1bbl0sdVt0XVtlXSl9KX0pLG49KExhLXMqaSkvbixsPTAsaD0tMTsrK2g8aTspe2ZvcihmPWwsZz0tMTsrK2c8aTspe3ZhciB5PWRbaF0sTT1tW3ldW2ddLHg9dVt5XVtNXSxiPWwsXz1sKz14Km47cFt5KyItIitNXT17aW5kZXg6eSxzdWJpbmRleDpNLHN0YXJ0QW5nbGU6YixlbmRBbmdsZTpfLHZhbHVlOnh9fXJbeV09e2luZGV4Onksc3RhcnRBbmdsZTpmLGVuZEFuZ2xlOmwsdmFsdWU6KGwtZikvbn0sbCs9c31mb3IoaD0tMTsrK2g8aTspZm9yKGc9aC0xOysrZzxpOyl7dmFyIHc9cFtoKyItIitnXSxTPXBbZysiLSIraF07KHcudmFsdWV8fFMudmFsdWUpJiZlLnB1c2gody52YWx1ZTxTLnZhbHVlP3tzb3VyY2U6Uyx0YXJnZXQ6d306e3NvdXJjZTp3LHRhcmdldDpTfSl9YyYmdCgpfWZ1bmN0aW9uIHQoKXtlLnNvcnQoZnVuY3Rpb24obix0KXtyZXR1cm4gYygobi5zb3VyY2UudmFsdWUrbi50YXJnZXQudmFsdWUpLzIsKHQuc291cmNlLnZhbHVlK3QudGFyZ2V0LnZhbHVlKS8yKX0pfXZhciBlLHIsdSxpLG8sYSxjLGw9e30scz0wO3JldHVybiBsLm1hdHJpeD1mdW5jdGlvbihuKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oaT0odT1uKSYmdS5sZW5ndGgsZT1yPW51bGwsbCk6dX0sbC5wYWRkaW5nPWZ1bmN0aW9uKG4pe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhzPW4sZT1yPW51bGwsbCk6c30sbC5zb3J0R3JvdXBzPWZ1bmN0aW9uKG4pe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhvPW4sZT1yPW51bGwsbCk6b30sbC5zb3J0U3ViZ3JvdXBzPWZ1bmN0aW9uKG4pe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhhPW4sZT1udWxsLGwpOmF9LGwuc29ydENob3Jkcz1mdW5jdGlvbihuKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oYz1uLGUmJnQoKSxsKTpjfSxsLmNob3Jkcz1mdW5jdGlvbigpe3JldHVybiBlfHxuKCksZX0sbC5ncm91cHM9ZnVuY3Rpb24oKXtyZXR1cm4gcnx8bigpLHJ9LGx9LHRhLmxheW91dC5mb3JjZT1mdW5jdGlvbigpe2Z1bmN0aW9uIG4obil7cmV0dXJuIGZ1bmN0aW9uKHQsZSxyLHUpe2lmKHQucG9pbnQhPT1uKXt2YXIgaT10LmN4LW4ueCxvPXQuY3ktbi55LGE9dS1lLGM9aSppK28qbztpZihjPmEqYS9kKXtpZihwPmMpe3ZhciBsPXQuY2hhcmdlL2M7bi5weC09aSpsLG4ucHktPW8qbH1yZXR1cm4hMH1pZih0LnBvaW50JiZjJiZwPmMpe3ZhciBsPXQucG9pbnRDaGFyZ2UvYztuLnB4LT1pKmwsbi5weS09bypsfX1yZXR1cm4hdC5jaGFyZ2V9fWZ1bmN0aW9uIHQobil7bi5weD10YS5ldmVudC54LG4ucHk9dGEuZXZlbnQueSxhLnJlc3VtZSgpfXZhciBlLHIsdSxpLG8sYT17fSxjPXRhLmRpc3BhdGNoKCJzdGFydCIsInRpY2siLCJlbmQiKSxsPVsxLDFdLHM9LjksZj1mbCxoPWhsLGc9LTMwLHA9Z2wsdj0uMSxkPS42NCxtPVtdLE09W107cmV0dXJuIGEudGljaz1mdW5jdGlvbigpe2lmKChyKj0uOTkpPC4wMDUpcmV0dXJuIGMuZW5kKHt0eXBlOiJlbmQiLGFscGhhOnI9MH0pLCEwO3ZhciB0LGUsYSxmLGgscCxkLHkseCxiPW0ubGVuZ3RoLF89TS5sZW5ndGg7Zm9yKGU9MDtfPmU7KytlKWE9TVtlXSxmPWEuc291cmNlLGg9YS50YXJnZXQseT1oLngtZi54LHg9aC55LWYueSwocD15KnkreCp4KSYmKHA9cippW2VdKigocD1NYXRoLnNxcnQocCkpLXVbZV0pL3AseSo9cCx4Kj1wLGgueC09eSooZD1mLndlaWdodC8oaC53ZWlnaHQrZi53ZWlnaHQpKSxoLnktPXgqZCxmLngrPXkqKGQ9MS1kKSxmLnkrPXgqZCk7aWYoKGQ9cip2KSYmKHk9bFswXS8yLHg9bFsxXS8yLGU9LTEsZCkpZm9yKDsrK2U8YjspYT1tW2VdLGEueCs9KHktYS54KSpkLGEueSs9KHgtYS55KSpkO2lmKGcpZm9yKEp1KHQ9dGEuZ2VvbS5xdWFkdHJlZShtKSxyLG8pLGU9LTE7KytlPGI7KShhPW1bZV0pLmZpeGVkfHx0LnZpc2l0KG4oYSkpO2ZvcihlPS0xOysrZTxiOylhPW1bZV0sYS5maXhlZD8oYS54PWEucHgsYS55PWEucHkpOihhLngtPShhLnB4LShhLnB4PWEueCkpKnMsYS55LT0oYS5weS0oYS5weT1hLnkpKSpzKTtjLnRpY2soe3R5cGU6InRpY2siLGFscGhhOnJ9KX0sYS5ub2Rlcz1mdW5jdGlvbihuKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obT1uLGEpOm19LGEubGlua3M9ZnVuY3Rpb24obil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KE09bixhKTpNfSxhLnNpemU9ZnVuY3Rpb24obil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGw9bixhKTpsfSxhLmxpbmtEaXN0YW5jZT1mdW5jdGlvbihuKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oZj0iZnVuY3Rpb24iPT10eXBlb2Ygbj9uOituLGEpOmZ9LGEuZGlzdGFuY2U9YS5saW5rRGlzdGFuY2UsYS5saW5rU3RyZW5ndGg9ZnVuY3Rpb24obil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGg9ImZ1bmN0aW9uIj09dHlwZW9mIG4/bjorbixhKTpofSxhLmZyaWN0aW9uPWZ1bmN0aW9uKG4pe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhzPStuLGEpOnN9LGEuY2hhcmdlPWZ1bmN0aW9uKG4pe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhnPSJmdW5jdGlvbiI9PXR5cGVvZiBuP246K24sYSk6Z30sYS5jaGFyZ2VEaXN0YW5jZT1mdW5jdGlvbihuKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8ocD1uKm4sYSk6TWF0aC5zcXJ0KHApfSxhLmdyYXZpdHk9ZnVuY3Rpb24obil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHY9K24sYSk6dn0sYS50aGV0YT1mdW5jdGlvbihuKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oZD1uKm4sYSk6TWF0aC5zcXJ0KGQpfSxhLmFscGhhPWZ1bmN0aW9uKG4pe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhuPStuLHI/cj1uPjA/bjowOm4+MCYmKGMuc3RhcnQoe3R5cGU6InN0YXJ0IixhbHBoYTpyPW59KSx0YS50aW1lcihhLnRpY2spKSxhKTpyfSxhLnN0YXJ0PWZ1bmN0aW9uKCl7ZnVuY3Rpb24gbihuLHIpe2lmKCFlKXtmb3IoZT1uZXcgQXJyYXkoYyksYT0wO2M+YTsrK2EpZVthXT1bXTtmb3IoYT0wO3M+YTsrK2Epe3ZhciB1PU1bYV07ZVt1LnNvdXJjZS5pbmRleF0ucHVzaCh1LnRhcmdldCksZVt1LnRhcmdldC5pbmRleF0ucHVzaCh1LnNvdXJjZSl9fWZvcih2YXIgaSxvPWVbdF0sYT0tMSxsPW8ubGVuZ3RoOysrYTxsOylpZighaXNOYU4oaT1vW2FdW25dKSlyZXR1cm4gaTtyZXR1cm4gTWF0aC5yYW5kb20oKSpyfXZhciB0LGUscixjPW0ubGVuZ3RoLHM9TS5sZW5ndGgscD1sWzBdLHY9bFsxXTtmb3IodD0wO2M+dDsrK3QpKHI9bVt0XSkuaW5kZXg9dCxyLndlaWdodD0wO2Zvcih0PTA7cz50OysrdClyPU1bdF0sIm51bWJlciI9PXR5cGVvZiByLnNvdXJjZSYmKHIuc291cmNlPW1bci5zb3VyY2VdKSwibnVtYmVyIj09dHlwZW9mIHIudGFyZ2V0JiYoci50YXJnZXQ9bVtyLnRhcmdldF0pLCsrci5zb3VyY2Uud2VpZ2h0LCsrci50YXJnZXQud2VpZ2h0O2Zvcih0PTA7Yz50OysrdClyPW1bdF0saXNOYU4oci54KSYmKHIueD1uKCJ4IixwKSksaXNOYU4oci55KSYmKHIueT1uKCJ5Iix2KSksaXNOYU4oci5weCkmJihyLnB4PXIueCksaXNOYU4oci5weSkmJihyLnB5PXIueSk7aWYodT1bXSwiZnVuY3Rpb24iPT10eXBlb2YgZilmb3IodD0wO3M+dDsrK3QpdVt0XT0rZi5jYWxsKHRoaXMsTVt0XSx0KTtlbHNlIGZvcih0PTA7cz50OysrdCl1W3RdPWY7aWYoaT1bXSwiZnVuY3Rpb24iPT10eXBlb2YgaClmb3IodD0wO3M+dDsrK3QpaVt0XT0raC5jYWxsKHRoaXMsTVt0XSx0KTtlbHNlIGZvcih0PTA7cz50OysrdClpW3RdPWg7aWYobz1bXSwiZnVuY3Rpb24iPT10eXBlb2YgZylmb3IodD0wO2M+dDsrK3Qpb1t0XT0rZy5jYWxsKHRoaXMsbVt0XSx0KTtlbHNlIGZvcih0PTA7Yz50OysrdClvW3RdPWc7cmV0dXJuIGEucmVzdW1lKCl9LGEucmVzdW1lPWZ1bmN0aW9uKCl7cmV0dXJuIGEuYWxwaGEoLjEpfSxhLnN0b3A9ZnVuY3Rpb24oKXtyZXR1cm4gYS5hbHBoYSgwKX0sYS5kcmFnPWZ1bmN0aW9uKCl7cmV0dXJuIGV8fChlPXRhLmJlaGF2aW9yLmRyYWcoKS5vcmlnaW4oeSkub24oImRyYWdzdGFydC5mb3JjZSIsWHUpLm9uKCJkcmFnLmZvcmNlIix0KS5vbigiZHJhZ2VuZC5mb3JjZSIsJHUpKSxhcmd1bWVudHMubGVuZ3RoP3ZvaWQgdGhpcy5vbigibW91c2VvdmVyLmZvcmNlIixCdSkub24oIm1vdXNlb3V0LmZvcmNlIixXdSkuY2FsbChlKTplfSx0YS5yZWJpbmQoYSxjLCJvbiIpfTt2YXIgZmw9MjAsaGw9MSxnbD0xLzA7dGEubGF5b3V0LmhpZXJhcmNoeT1mdW5jdGlvbigpe2Z1bmN0aW9uIG4odSl7dmFyIGksbz1bdV0sYT1bXTtmb3IodS5kZXB0aD0wO251bGwhPShpPW8ucG9wKCkpOylpZihhLnB1c2goaSksKGw9ZS5jYWxsKG4saSxpLmRlcHRoKSkmJihjPWwubGVuZ3RoKSl7Zm9yKHZhciBjLGwsczstLWM+PTA7KW8ucHVzaChzPWxbY10pLHMucGFyZW50PWkscy5kZXB0aD1pLmRlcHRoKzE7ciYmKGkudmFsdWU9MCksaS5jaGlsZHJlbj1sfWVsc2UgciYmKGkudmFsdWU9K3IuY2FsbChuLGksaS5kZXB0aCl8fDApLGRlbGV0ZSBpLmNoaWxkcmVuO3JldHVybiBRdSh1LGZ1bmN0aW9uKG4pe3ZhciBlLHU7dCYmKGU9bi5jaGlsZHJlbikmJmUuc29ydCh0KSxyJiYodT1uLnBhcmVudCkmJih1LnZhbHVlKz1uLnZhbHVlKX0pLGF9dmFyIHQ9ZWksZT1uaSxyPXRpO3JldHVybiBuLnNvcnQ9ZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHQ9ZSxuKTp0fSxuLmNoaWxkcmVuPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhlPXQsbik6ZX0sbi52YWx1ZT1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8ocj10LG4pOnJ9LG4ucmV2YWx1ZT1mdW5jdGlvbih0KXtyZXR1cm4gciYmKEt1KHQsZnVuY3Rpb24obil7bi5jaGlsZHJlbiYmKG4udmFsdWU9MCl9KSxRdSh0LGZ1bmN0aW9uKHQpe3ZhciBlO3QuY2hpbGRyZW58fCh0LnZhbHVlPStyLmNhbGwobix0LHQuZGVwdGgpfHwwKSwoZT10LnBhcmVudCkmJihlLnZhbHVlKz10LnZhbHVlKX0pKSx0fSxufSx0YS5sYXlvdXQucGFydGl0aW9uPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gbih0LGUscix1KXt2YXIgaT10LmNoaWxkcmVuO2lmKHQueD1lLHQueT10LmRlcHRoKnUsdC5keD1yLHQuZHk9dSxpJiYobz1pLmxlbmd0aCkpe3ZhciBvLGEsYyxsPS0xO2ZvcihyPXQudmFsdWU/ci90LnZhbHVlOjA7KytsPG87KW4oYT1pW2xdLGUsYz1hLnZhbHVlKnIsdSksZSs9Y319ZnVuY3Rpb24gdChuKXt2YXIgZT1uLmNoaWxkcmVuLHI9MDtpZihlJiYodT1lLmxlbmd0aCkpZm9yKHZhciB1LGk9LTE7KytpPHU7KXI9TWF0aC5tYXgocix0KGVbaV0pKTtyZXR1cm4gMStyfWZ1bmN0aW9uIGUoZSxpKXt2YXIgbz1yLmNhbGwodGhpcyxlLGkpO3JldHVybiBuKG9bMF0sMCx1WzBdLHVbMV0vdChvWzBdKSksb312YXIgcj10YS5sYXlvdXQuaGllcmFyY2h5KCksdT1bMSwxXTtyZXR1cm4gZS5zaXplPWZ1bmN0aW9uKG4pe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh1PW4sZSk6dX0sR3UoZSxyKX0sdGEubGF5b3V0LnBpZT1mdW5jdGlvbigpe2Z1bmN0aW9uIG4obyl7dmFyIGEsYz1vLmxlbmd0aCxsPW8ubWFwKGZ1bmN0aW9uKGUscil7cmV0dXJuK3QuY2FsbChuLGUscil9KSxzPSsoImZ1bmN0aW9uIj09dHlwZW9mIHI/ci5hcHBseSh0aGlzLGFyZ3VtZW50cyk6ciksZj0oImZ1bmN0aW9uIj09dHlwZW9mIHU/dS5hcHBseSh0aGlzLGFyZ3VtZW50cyk6dSktcyxoPU1hdGgubWluKE1hdGguYWJzKGYpL2MsKygiZnVuY3Rpb24iPT10eXBlb2YgaT9pLmFwcGx5KHRoaXMsYXJndW1lbnRzKTppKSksZz1oKigwPmY/LTE6MSkscD0oZi1jKmcpL3RhLnN1bShsKSx2PXRhLnJhbmdlKGMpLGQ9W107cmV0dXJuIG51bGwhPWUmJnYuc29ydChlPT09cGw/ZnVuY3Rpb24obix0KXtyZXR1cm4gbFt0XS1sW25dfTpmdW5jdGlvbihuLHQpe3JldHVybiBlKG9bbl0sb1t0XSl9KSx2LmZvckVhY2goZnVuY3Rpb24obil7ZFtuXT17ZGF0YTpvW25dLHZhbHVlOmE9bFtuXSxzdGFydEFuZ2xlOnMsZW5kQW5nbGU6cys9YSpwK2cscGFkQW5nbGU6aH19KSxkfXZhciB0PU51bWJlcixlPXBsLHI9MCx1PUxhLGk9MDtyZXR1cm4gbi52YWx1ZT1mdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8odD1lLG4pOnR9LG4uc29ydD1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oZT10LG4pOmV9LG4uc3RhcnRBbmdsZT1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8ocj10LG4pOnJ9LG4uZW5kQW5nbGU9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHU9dCxuKTp1fSxuLnBhZEFuZ2xlPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhpPXQsbik6aX0sbn07dmFyIHBsPXt9O3RhLmxheW91dC5zdGFjaz1mdW5jdGlvbigpe2Z1bmN0aW9uIG4oYSxjKXtpZighKGg9YS5sZW5ndGgpKXJldHVybiBhO3ZhciBsPWEubWFwKGZ1bmN0aW9uKGUscil7cmV0dXJuIHQuY2FsbChuLGUscil9KSxzPWwubWFwKGZ1bmN0aW9uKHQpe3JldHVybiB0Lm1hcChmdW5jdGlvbih0LGUpe3JldHVybltpLmNhbGwobix0LGUpLG8uY2FsbChuLHQsZSldfSl9KSxmPWUuY2FsbChuLHMsYyk7bD10YS5wZXJtdXRlKGwsZikscz10YS5wZXJtdXRlKHMsZik7dmFyIGgsZyxwLHYsZD1yLmNhbGwobixzLGMpLG09bFswXS5sZW5ndGg7Zm9yKHA9MDttPnA7KytwKWZvcih1LmNhbGwobixsWzBdW3BdLHY9ZFtwXSxzWzBdW3BdWzFdKSxnPTE7aD5nOysrZyl1LmNhbGwobixsW2ddW3BdLHYrPXNbZy0xXVtwXVsxXSxzW2ddW3BdWzFdKTtyZXR1cm4gYX12YXIgdD15LGU9YWkscj1jaSx1PW9pLGk9dWksbz1paTtyZXR1cm4gbi52YWx1ZXM9ZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHQ9ZSxuKTp0fSxuLm9yZGVyPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhlPSJmdW5jdGlvbiI9PXR5cGVvZiB0P3Q6dmwuZ2V0KHQpfHxhaSxuKTplfSxuLm9mZnNldD1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8ocj0iZnVuY3Rpb24iPT10eXBlb2YgdD90OmRsLmdldCh0KXx8Y2ksbik6cn0sbi54PWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhpPXQsbik6aX0sbi55PWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhvPXQsbik6b30sbi5vdXQ9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHU9dCxuKTp1fSxufTt2YXIgdmw9dGEubWFwKHsiaW5zaWRlLW91dCI6ZnVuY3Rpb24obil7dmFyIHQsZSxyPW4ubGVuZ3RoLHU9bi5tYXAobGkpLGk9bi5tYXAoc2kpLG89dGEucmFuZ2Uocikuc29ydChmdW5jdGlvbihuLHQpe3JldHVybiB1W25dLXVbdF19KSxhPTAsYz0wLGw9W10scz1bXTtmb3IodD0wO3I+dDsrK3QpZT1vW3RdLGM+YT8oYSs9aVtlXSxsLnB1c2goZSkpOihjKz1pW2VdLHMucHVzaChlKSk7cmV0dXJuIHMucmV2ZXJzZSgpLmNvbmNhdChsKX0scmV2ZXJzZTpmdW5jdGlvbihuKXtyZXR1cm4gdGEucmFuZ2Uobi5sZW5ndGgpLnJldmVyc2UoKX0sImRlZmF1bHQiOmFpfSksZGw9dGEubWFwKHtzaWxob3VldHRlOmZ1bmN0aW9uKG4pe3ZhciB0LGUscix1PW4ubGVuZ3RoLGk9blswXS5sZW5ndGgsbz1bXSxhPTAsYz1bXTtmb3IoZT0wO2k+ZTsrK2Upe2Zvcih0PTAscj0wO3U+dDt0Kyspcis9blt0XVtlXVsxXTtyPmEmJihhPXIpLG8ucHVzaChyKX1mb3IoZT0wO2k+ZTsrK2UpY1tlXT0oYS1vW2VdKS8yO3JldHVybiBjfSx3aWdnbGU6ZnVuY3Rpb24obil7dmFyIHQsZSxyLHUsaSxvLGEsYyxsLHM9bi5sZW5ndGgsZj1uWzBdLGg9Zi5sZW5ndGgsZz1bXTtmb3IoZ1swXT1jPWw9MCxlPTE7aD5lOysrZSl7Zm9yKHQ9MCx1PTA7cz50OysrdCl1Kz1uW3RdW2VdWzFdO2Zvcih0PTAsaT0wLGE9ZltlXVswXS1mW2UtMV1bMF07cz50OysrdCl7Zm9yKHI9MCxvPShuW3RdW2VdWzFdLW5bdF1bZS0xXVsxXSkvKDIqYSk7dD5yOysrcilvKz0obltyXVtlXVsxXS1uW3JdW2UtMV1bMV0pL2E7aSs9bypuW3RdW2VdWzFdfWdbZV09Yy09dT9pL3UqYTowLGw+YyYmKGw9Yyl9Zm9yKGU9MDtoPmU7KytlKWdbZV0tPWw7cmV0dXJuIGd9LGV4cGFuZDpmdW5jdGlvbihuKXt2YXIgdCxlLHIsdT1uLmxlbmd0aCxpPW5bMF0ubGVuZ3RoLG89MS91LGE9W107Zm9yKGU9MDtpPmU7KytlKXtmb3IodD0wLHI9MDt1PnQ7dCsrKXIrPW5bdF1bZV1bMV07aWYocilmb3IodD0wO3U+dDt0Kyspblt0XVtlXVsxXS89cjtlbHNlIGZvcih0PTA7dT50O3QrKyluW3RdW2VdWzFdPW99Zm9yKGU9MDtpPmU7KytlKWFbZV09MDtyZXR1cm4gYX0semVybzpjaX0pO3RhLmxheW91dC5oaXN0b2dyYW09ZnVuY3Rpb24oKXtmdW5jdGlvbiBuKG4saSl7Zm9yKHZhciBvLGEsYz1bXSxsPW4ubWFwKGUsdGhpcykscz1yLmNhbGwodGhpcyxsLGkpLGY9dS5jYWxsKHRoaXMscyxsLGkpLGk9LTEsaD1sLmxlbmd0aCxnPWYubGVuZ3RoLTEscD10PzE6MS9oOysraTxnOylvPWNbaV09W10sby5keD1mW2krMV0tKG8ueD1mW2ldKSxvLnk9MDtpZihnPjApZm9yKGk9LTE7KytpPGg7KWE9bFtpXSxhPj1zWzBdJiZhPD1zWzFdJiYobz1jW3RhLmJpc2VjdChmLGEsMSxnKS0xXSxvLnkrPXAsby5wdXNoKG5baV0pKTtyZXR1cm4gY312YXIgdD0hMCxlPU51bWJlcixyPXBpLHU9aGk7cmV0dXJuIG4udmFsdWU9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGU9dCxuKTplfSxuLnJhbmdlPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhyPUV0KHQpLG4pOnJ9LG4uYmlucz1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8odT0ibnVtYmVyIj09dHlwZW9mIHQ/ZnVuY3Rpb24obil7cmV0dXJuIGdpKG4sdCl9OkV0KHQpLG4pOnV9LG4uZnJlcXVlbmN5PWZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh0PSEhZSxuKTp0fSxufSx0YS5sYXlvdXQucGFjaz1mdW5jdGlvbigpe2Z1bmN0aW9uIG4obixpKXt2YXIgbz1lLmNhbGwodGhpcyxuLGkpLGE9b1swXSxjPXVbMF0sbD11WzFdLHM9bnVsbD09dD9NYXRoLnNxcnQ6ImZ1bmN0aW9uIj09dHlwZW9mIHQ/dDpmdW5jdGlvbigpe3JldHVybiB0fTtpZihhLng9YS55PTAsUXUoYSxmdW5jdGlvbihuKXtuLnI9K3Mobi52YWx1ZSl9KSxRdShhLE1pKSxyKXt2YXIgZj1yKih0PzE6TWF0aC5tYXgoMiphLnIvYywyKmEuci9sKSkvMjtRdShhLGZ1bmN0aW9uKG4pe24ucis9Zn0pLFF1KGEsTWkpLFF1KGEsZnVuY3Rpb24obil7bi5yLT1mfSl9cmV0dXJuIF9pKGEsYy8yLGwvMix0PzE6MS9NYXRoLm1heCgyKmEuci9jLDIqYS5yL2wpKSxvfXZhciB0LGU9dGEubGF5b3V0LmhpZXJhcmNoeSgpLnNvcnQodmkpLHI9MCx1PVsxLDFdO3JldHVybiBuLnNpemU9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHU9dCxuKTp1fSxuLnJhZGl1cz1mdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8odD1udWxsPT1lfHwiZnVuY3Rpb24iPT10eXBlb2YgZT9lOitlLG4pOnR9LG4ucGFkZGluZz1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8ocj0rdCxuKTpyfSxHdShuLGUpfSx0YS5sYXlvdXQudHJlZT1mdW5jdGlvbigpe2Z1bmN0aW9uIG4obix1KXt2YXIgcz1vLmNhbGwodGhpcyxuLHUpLGY9c1swXSxoPXQoZik7aWYoUXUoaCxlKSxoLnBhcmVudC5tPS1oLnosS3UoaCxyKSxsKUt1KGYsaSk7ZWxzZXt2YXIgZz1mLHA9Zix2PWY7S3UoZixmdW5jdGlvbihuKXtuLng8Zy54JiYoZz1uKSxuLng+cC54JiYocD1uKSxuLmRlcHRoPnYuZGVwdGgmJih2PW4pfSk7dmFyIGQ9YShnLHApLzItZy54LG09Y1swXS8ocC54K2EocCxnKS8yK2QpLHk9Y1sxXS8odi5kZXB0aHx8MSk7S3UoZixmdW5jdGlvbihuKXtuLng9KG4ueCtkKSptLG4ueT1uLmRlcHRoKnl9KX1yZXR1cm4gc31mdW5jdGlvbiB0KG4pe2Zvcih2YXIgdCxlPXtBOm51bGwsY2hpbGRyZW46W25dfSxyPVtlXTtudWxsIT0odD1yLnBvcCgpKTspZm9yKHZhciB1LGk9dC5jaGlsZHJlbixvPTAsYT1pLmxlbmd0aDthPm87KytvKXIucHVzaCgoaVtvXT11PXtfOmlbb10scGFyZW50OnQsY2hpbGRyZW46KHU9aVtvXS5jaGlsZHJlbikmJnUuc2xpY2UoKXx8W10sQTpudWxsLGE6bnVsbCx6OjAsbTowLGM6MCxzOjAsdDpudWxsLGk6b30pLmE9dSk7cmV0dXJuIGUuY2hpbGRyZW5bMF19ZnVuY3Rpb24gZShuKXt2YXIgdD1uLmNoaWxkcmVuLGU9bi5wYXJlbnQuY2hpbGRyZW4scj1uLmk/ZVtuLmktMV06bnVsbDtpZih0Lmxlbmd0aCl7Tmkobik7dmFyIGk9KHRbMF0ueit0W3QubGVuZ3RoLTFdLnopLzI7cj8obi56PXIueithKG4uXyxyLl8pLG4ubT1uLnotaSk6bi56PWl9ZWxzZSByJiYobi56PXIueithKG4uXyxyLl8pKTtuLnBhcmVudC5BPXUobixyLG4ucGFyZW50LkF8fGVbMF0pfWZ1bmN0aW9uIHIobil7bi5fLng9bi56K24ucGFyZW50Lm0sbi5tKz1uLnBhcmVudC5tfWZ1bmN0aW9uIHUobix0LGUpe2lmKHQpe2Zvcih2YXIgcix1PW4saT1uLG89dCxjPXUucGFyZW50LmNoaWxkcmVuWzBdLGw9dS5tLHM9aS5tLGY9by5tLGg9Yy5tO289RWkobyksdT1raSh1KSxvJiZ1OyljPWtpKGMpLGk9RWkoaSksaS5hPW4scj1vLnorZi11LnotbCthKG8uXyx1Ll8pLHI+MCYmKEFpKENpKG8sbixlKSxuLHIpLGwrPXIscys9ciksZis9by5tLGwrPXUubSxoKz1jLm0scys9aS5tO28mJiFFaShpKSYmKGkudD1vLGkubSs9Zi1zKSx1JiYha2koYykmJihjLnQ9dSxjLm0rPWwtaCxlPW4pfXJldHVybiBlfWZ1bmN0aW9uIGkobil7bi54Kj1jWzBdLG4ueT1uLmRlcHRoKmNbMV19dmFyIG89dGEubGF5b3V0LmhpZXJhcmNoeSgpLnNvcnQobnVsbCkudmFsdWUobnVsbCksYT1TaSxjPVsxLDFdLGw9bnVsbDtyZXR1cm4gbi5zZXBhcmF0aW9uPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhhPXQsbik6YX0sbi5zaXplPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhsPW51bGw9PShjPXQpP2k6bnVsbCxuKTpsP251bGw6Y30sbi5ub2RlU2l6ZT1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obD1udWxsPT0oYz10KT9udWxsOmksbik6bD9jOm51bGx9LEd1KG4sbyl9LHRhLmxheW91dC5jbHVzdGVyPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gbihuLGkpe3ZhciBvLGE9dC5jYWxsKHRoaXMsbixpKSxjPWFbMF0sbD0wO1F1KGMsZnVuY3Rpb24obil7dmFyIHQ9bi5jaGlsZHJlbjt0JiZ0Lmxlbmd0aD8obi54PXFpKHQpLG4ueT16aSh0KSk6KG4ueD1vP2wrPWUobixvKTowLG4ueT0wLG89bil9KTt2YXIgcz1MaShjKSxmPVRpKGMpLGg9cy54LWUocyxmKS8yLGc9Zi54K2UoZixzKS8yO3JldHVybiBRdShjLHU/ZnVuY3Rpb24obil7bi54PShuLngtYy54KSpyWzBdLG4ueT0oYy55LW4ueSkqclsxXX06ZnVuY3Rpb24obil7bi54PShuLngtaCkvKGctaCkqclswXSxuLnk9KDEtKGMueT9uLnkvYy55OjEpKSpyWzFdfSksYX12YXIgdD10YS5sYXlvdXQuaGllcmFyY2h5KCkuc29ydChudWxsKS52YWx1ZShudWxsKSxlPVNpLHI9WzEsMV0sdT0hMTtyZXR1cm4gbi5zZXBhcmF0aW9uPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhlPXQsbik6ZX0sbi5zaXplPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh1PW51bGw9PShyPXQpLG4pOnU/bnVsbDpyfSxuLm5vZGVTaXplPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh1PW51bGwhPShyPXQpLG4pOnU/cjpudWxsfSxHdShuLHQpfSx0YS5sYXlvdXQudHJlZW1hcD1mdW5jdGlvbigpe2Z1bmN0aW9uIG4obix0KXtmb3IodmFyIGUscix1PS0xLGk9bi5sZW5ndGg7Kyt1PGk7KXI9KGU9blt1XSkudmFsdWUqKDA+dD8wOnQpLGUuYXJlYT1pc05hTihyKXx8MD49cj8wOnJ9ZnVuY3Rpb24gdChlKXt2YXIgaT1lLmNoaWxkcmVuO2lmKGkmJmkubGVuZ3RoKXt2YXIgbyxhLGMsbD1mKGUpLHM9W10saD1pLnNsaWNlKCkscD0xLzAsdj0ic2xpY2UiPT09Zz9sLmR4OiJkaWNlIj09PWc/bC5keToic2xpY2UtZGljZSI9PT1nPzEmZS5kZXB0aD9sLmR5OmwuZHg6TWF0aC5taW4obC5keCxsLmR5KTtmb3IobihoLGwuZHgqbC5keS9lLnZhbHVlKSxzLmFyZWE9MDsoYz1oLmxlbmd0aCk+MDspcy5wdXNoKG89aFtjLTFdKSxzLmFyZWErPW8uYXJlYSwic3F1YXJpZnkiIT09Z3x8KGE9cihzLHYpKTw9cD8oaC5wb3AoKSxwPWEpOihzLmFyZWEtPXMucG9wKCkuYXJlYSx1KHMsdixsLCExKSx2PU1hdGgubWluKGwuZHgsbC5keSkscy5sZW5ndGg9cy5hcmVhPTAscD0xLzApO3MubGVuZ3RoJiYodShzLHYsbCwhMCkscy5sZW5ndGg9cy5hcmVhPTApLGkuZm9yRWFjaCh0KX19ZnVuY3Rpb24gZSh0KXt2YXIgcj10LmNoaWxkcmVuO2lmKHImJnIubGVuZ3RoKXt2YXIgaSxvPWYodCksYT1yLnNsaWNlKCksYz1bXTtmb3IobihhLG8uZHgqby5keS90LnZhbHVlKSxjLmFyZWE9MDtpPWEucG9wKCk7KWMucHVzaChpKSxjLmFyZWErPWkuYXJlYSxudWxsIT1pLnomJih1KGMsaS56P28uZHg6by5keSxvLCFhLmxlbmd0aCksYy5sZW5ndGg9Yy5hcmVhPTApO3IuZm9yRWFjaChlKX19ZnVuY3Rpb24gcihuLHQpe2Zvcih2YXIgZSxyPW4uYXJlYSx1PTAsaT0xLzAsbz0tMSxhPW4ubGVuZ3RoOysrbzxhOykoZT1uW29dLmFyZWEpJiYoaT5lJiYoaT1lKSxlPnUmJih1PWUpKTtyZXR1cm4gcio9cix0Kj10LHI/TWF0aC5tYXgodCp1KnAvcixyLyh0KmkqcCkpOjEvMH1mdW5jdGlvbiB1KG4sdCxlLHIpe3ZhciB1LGk9LTEsbz1uLmxlbmd0aCxhPWUueCxsPWUueSxzPXQ/YyhuLmFyZWEvdCk6MDtpZih0PT1lLmR4KXtmb3IoKHJ8fHM+ZS5keSkmJihzPWUuZHkpOysraTxvOyl1PW5baV0sdS54PWEsdS55PWwsdS5keT1zLGErPXUuZHg9TWF0aC5taW4oZS54K2UuZHgtYSxzP2ModS5hcmVhL3MpOjApO3Uuej0hMCx1LmR4Kz1lLngrZS5keC1hLGUueSs9cyxlLmR5LT1zfWVsc2V7Zm9yKChyfHxzPmUuZHgpJiYocz1lLmR4KTsrK2k8bzspdT1uW2ldLHUueD1hLHUueT1sLHUuZHg9cyxsKz11LmR5PU1hdGgubWluKGUueStlLmR5LWwscz9jKHUuYXJlYS9zKTowKTt1Lno9ITEsdS5keSs9ZS55K2UuZHktbCxlLngrPXMsZS5keC09c319ZnVuY3Rpb24gaShyKXt2YXIgdT1vfHxhKHIpLGk9dVswXTtyZXR1cm4gaS54PTAsaS55PTAsaS5keD1sWzBdLGkuZHk9bFsxXSxvJiZhLnJldmFsdWUoaSksbihbaV0saS5keCppLmR5L2kudmFsdWUpLChvP2U6dCkoaSksaCYmKG89dSksdX12YXIgbyxhPXRhLmxheW91dC5oaWVyYXJjaHkoKSxjPU1hdGgucm91bmQsbD1bMSwxXSxzPW51bGwsZj1SaSxoPSExLGc9InNxdWFyaWZ5IixwPS41KigxK01hdGguc3FydCg1KSk7DQpyZXR1cm4gaS5zaXplPWZ1bmN0aW9uKG4pe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhsPW4saSk6bH0saS5wYWRkaW5nPWZ1bmN0aW9uKG4pe2Z1bmN0aW9uIHQodCl7dmFyIGU9bi5jYWxsKGksdCx0LmRlcHRoKTtyZXR1cm4gbnVsbD09ZT9SaSh0KTpEaSh0LCJudW1iZXIiPT10eXBlb2YgZT9bZSxlLGUsZV06ZSl9ZnVuY3Rpb24gZSh0KXtyZXR1cm4gRGkodCxuKX1pZighYXJndW1lbnRzLmxlbmd0aClyZXR1cm4gczt2YXIgcjtyZXR1cm4gZj1udWxsPT0ocz1uKT9SaToiZnVuY3Rpb24iPT0ocj10eXBlb2Ygbik/dDoibnVtYmVyIj09PXI/KG49W24sbixuLG5dLGUpOmUsaX0saS5yb3VuZD1mdW5jdGlvbihuKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oYz1uP01hdGgucm91bmQ6TnVtYmVyLGkpOmMhPU51bWJlcn0saS5zdGlja3k9ZnVuY3Rpb24obil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGg9bixvPW51bGwsaSk6aH0saS5yYXRpbz1mdW5jdGlvbihuKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8ocD1uLGkpOnB9LGkubW9kZT1mdW5jdGlvbihuKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oZz1uKyIiLGkpOmd9LEd1KGksYSl9LHRhLnJhbmRvbT17bm9ybWFsOmZ1bmN0aW9uKG4sdCl7dmFyIGU9YXJndW1lbnRzLmxlbmd0aDtyZXR1cm4gMj5lJiYodD0xKSwxPmUmJihuPTApLGZ1bmN0aW9uKCl7dmFyIGUscix1O2RvIGU9MipNYXRoLnJhbmRvbSgpLTEscj0yKk1hdGgucmFuZG9tKCktMSx1PWUqZStyKnI7d2hpbGUoIXV8fHU+MSk7cmV0dXJuIG4rdCplKk1hdGguc3FydCgtMipNYXRoLmxvZyh1KS91KX19LGxvZ05vcm1hbDpmdW5jdGlvbigpe3ZhciBuPXRhLnJhbmRvbS5ub3JtYWwuYXBwbHkodGEsYXJndW1lbnRzKTtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gTWF0aC5leHAobigpKX19LGJhdGVzOmZ1bmN0aW9uKG4pe3ZhciB0PXRhLnJhbmRvbS5pcndpbkhhbGwobik7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIHQoKS9ufX0saXJ3aW5IYWxsOmZ1bmN0aW9uKG4pe3JldHVybiBmdW5jdGlvbigpe2Zvcih2YXIgdD0wLGU9MDtuPmU7ZSsrKXQrPU1hdGgucmFuZG9tKCk7cmV0dXJuIHR9fX0sdGEuc2NhbGU9e307dmFyIG1sPXtmbG9vcjp5LGNlaWw6eX07dGEuc2NhbGUubGluZWFyPWZ1bmN0aW9uKCl7cmV0dXJuIElpKFswLDFdLFswLDFdLG11LCExKX07dmFyIHlsPXtzOjEsZzoxLHA6MSxyOjEsZToxfTt0YS5zY2FsZS5sb2c9ZnVuY3Rpb24oKXtyZXR1cm4gSmkodGEuc2NhbGUubGluZWFyKCkuZG9tYWluKFswLDFdKSwxMCwhMCxbMSwxMF0pfTt2YXIgTWw9dGEuZm9ybWF0KCIuMGUiKSx4bD17Zmxvb3I6ZnVuY3Rpb24obil7cmV0dXJuLU1hdGguY2VpbCgtbil9LGNlaWw6ZnVuY3Rpb24obil7cmV0dXJuLU1hdGguZmxvb3IoLW4pfX07dGEuc2NhbGUucG93PWZ1bmN0aW9uKCl7cmV0dXJuIEdpKHRhLnNjYWxlLmxpbmVhcigpLDEsWzAsMV0pfSx0YS5zY2FsZS5zcXJ0PWZ1bmN0aW9uKCl7cmV0dXJuIHRhLnNjYWxlLnBvdygpLmV4cG9uZW50KC41KX0sdGEuc2NhbGUub3JkaW5hbD1mdW5jdGlvbigpe3JldHVybiBRaShbXSx7dDoicmFuZ2UiLGE6W1tdXX0pfSx0YS5zY2FsZS5jYXRlZ29yeTEwPWZ1bmN0aW9uKCl7cmV0dXJuIHRhLnNjYWxlLm9yZGluYWwoKS5yYW5nZShibCl9LHRhLnNjYWxlLmNhdGVnb3J5MjA9ZnVuY3Rpb24oKXtyZXR1cm4gdGEuc2NhbGUub3JkaW5hbCgpLnJhbmdlKF9sKX0sdGEuc2NhbGUuY2F0ZWdvcnkyMGI9ZnVuY3Rpb24oKXtyZXR1cm4gdGEuc2NhbGUub3JkaW5hbCgpLnJhbmdlKHdsKX0sdGEuc2NhbGUuY2F0ZWdvcnkyMGM9ZnVuY3Rpb24oKXtyZXR1cm4gdGEuc2NhbGUub3JkaW5hbCgpLnJhbmdlKFNsKX07dmFyIGJsPVsyMDYyMjYwLDE2NzQ0MjA2LDI5MjQ1ODgsMTQwMzQ3MjgsOTcyNTg4NSw5MTk3MTMxLDE0OTA3MzMwLDgzNTU3MTEsMTIzNjkxODYsMTU1NjE3NV0ubWFwKE10KSxfbD1bMjA2MjI2MCwxMTQ1NDQ0MCwxNjc0NDIwNiwxNjc1OTY3MiwyOTI0NTg4LDEwMDE4Njk4LDE0MDM0NzI4LDE2NzUwNzQyLDk3MjU4ODUsMTI5NTU4NjEsOTE5NzEzMSwxMjg4NTE0MCwxNDkwNzMzMCwxNjIzNDE5NCw4MzU1NzExLDEzMDkyODA3LDEyMzY5MTg2LDE0NDA4NTg5LDE1NTYxNzUsMTA0MTA3MjVdLm1hcChNdCksd2w9WzM3NTA3NzcsNTM5NTYxOSw3MDQwNzE5LDEwMjY0Mjg2LDY1MTkwOTcsOTIxNjU5NCwxMTkxNTExNSwxMzU1NjYzNiw5MjAyOTkzLDEyNDI2ODA5LDE1MTg2NTE0LDE1MTkwOTMyLDg2NjYxNjksMTEzNTY0OTAsMTQwNDk2NDMsMTUxNzczNzIsODA3NzY4MywxMDgzNDMyNCwxMzUyODUwOSwxNDU4OTY1NF0ubWFwKE10KSxTbD1bMzI0NDczMyw3MDU3MTEwLDEwNDA2NjI1LDEzMDMyNDMxLDE1MDk1MDUzLDE2NjE2NzY0LDE2NjI1MjU5LDE2NjM0MDE4LDMyNTMwNzYsNzY1MjQ3MCwxMDYwNzAwMywxMzEwMTUwNCw3Njk1MjgxLDEwMzk0MzEyLDEyMzY5MzcyLDE0MzQyODkxLDY1MTM1MDcsOTg2ODk1MCwxMjQzNDg3NywxNDI3NzA4MV0ubWFwKE10KTt0YS5zY2FsZS5xdWFudGlsZT1mdW5jdGlvbigpe3JldHVybiBubyhbXSxbXSl9LHRhLnNjYWxlLnF1YW50aXplPWZ1bmN0aW9uKCl7cmV0dXJuIHRvKDAsMSxbMCwxXSl9LHRhLnNjYWxlLnRocmVzaG9sZD1mdW5jdGlvbigpe3JldHVybiBlbyhbLjVdLFswLDFdKX0sdGEuc2NhbGUuaWRlbnRpdHk9ZnVuY3Rpb24oKXtyZXR1cm4gcm8oWzAsMV0pfSx0YS5zdmc9e30sdGEuc3ZnLmFyYz1mdW5jdGlvbigpe2Z1bmN0aW9uIG4oKXt2YXIgbj1NYXRoLm1heCgwLCtlLmFwcGx5KHRoaXMsYXJndW1lbnRzKSksbD1NYXRoLm1heCgwLCtyLmFwcGx5KHRoaXMsYXJndW1lbnRzKSkscz1vLmFwcGx5KHRoaXMsYXJndW1lbnRzKS1SYSxmPWEuYXBwbHkodGhpcyxhcmd1bWVudHMpLVJhLGg9TWF0aC5hYnMoZi1zKSxnPXM+Zj8wOjE7aWYobj5sJiYocD1sLGw9bixuPXApLGg+PVRhKXJldHVybiB0KGwsZykrKG4/dChuLDEtZyk6IiIpKyJaIjt2YXIgcCx2LGQsbSx5LE0seCxiLF8sdyxTLGssRT0wLEE9MCxOPVtdO2lmKChtPSgrYy5hcHBseSh0aGlzLGFyZ3VtZW50cyl8fDApLzIpJiYoZD1pPT09a2w/TWF0aC5zcXJ0KG4qbitsKmwpOitpLmFwcGx5KHRoaXMsYXJndW1lbnRzKSxnfHwoQSo9LTEpLGwmJihBPXR0KGQvbCpNYXRoLnNpbihtKSkpLG4mJihFPXR0KGQvbipNYXRoLnNpbihtKSkpKSxsKXt5PWwqTWF0aC5jb3MocytBKSxNPWwqTWF0aC5zaW4ocytBKSx4PWwqTWF0aC5jb3MoZi1BKSxiPWwqTWF0aC5zaW4oZi1BKTt2YXIgQz1NYXRoLmFicyhmLXMtMipBKTw9cWE/MDoxO2lmKEEmJnNvKHksTSx4LGIpPT09Z15DKXt2YXIgej0ocytmKS8yO3k9bCpNYXRoLmNvcyh6KSxNPWwqTWF0aC5zaW4oeikseD1iPW51bGx9fWVsc2UgeT1NPTA7aWYobil7Xz1uKk1hdGguY29zKGYtRSksdz1uKk1hdGguc2luKGYtRSksUz1uKk1hdGguY29zKHMrRSksaz1uKk1hdGguc2luKHMrRSk7dmFyIHE9TWF0aC5hYnMocy1mKzIqRSk8PXFhPzA6MTtpZihFJiZzbyhfLHcsUyxrKT09PTEtZ15xKXt2YXIgTD0ocytmKS8yO189bipNYXRoLmNvcyhMKSx3PW4qTWF0aC5zaW4oTCksUz1rPW51bGx9fWVsc2UgXz13PTA7aWYoKHA9TWF0aC5taW4oTWF0aC5hYnMobC1uKS8yLCt1LmFwcGx5KHRoaXMsYXJndW1lbnRzKSkpPi4wMDEpe3Y9bD5uXmc/MDoxO3ZhciBUPW51bGw9PVM/W18sd106bnVsbD09eD9beSxNXTpMcihbeSxNXSxbUyxrXSxbeCxiXSxbXyx3XSksUj15LVRbMF0sRD1NLVRbMV0sUD14LVRbMF0sVT1iLVRbMV0saj0xL01hdGguc2luKE1hdGguYWNvcygoUipQK0QqVSkvKE1hdGguc3FydChSKlIrRCpEKSpNYXRoLnNxcnQoUCpQK1UqVSkpKS8yKSxGPU1hdGguc3FydChUWzBdKlRbMF0rVFsxXSpUWzFdKTtpZihudWxsIT14KXt2YXIgSD1NYXRoLm1pbihwLChsLUYpLyhqKzEpKSxPPWZvKG51bGw9PVM/W18sd106W1Msa10sW3ksTV0sbCxILGcpLEk9Zm8oW3gsYl0sW18sd10sbCxILGcpO3A9PT1IP04ucHVzaCgiTSIsT1swXSwiQSIsSCwiLCIsSCwiIDAgMCwiLHYsIiAiLE9bMV0sIkEiLGwsIiwiLGwsIiAwICIsMS1nXnNvKE9bMV1bMF0sT1sxXVsxXSxJWzFdWzBdLElbMV1bMV0pLCIsIixnLCIgIixJWzFdLCJBIixILCIsIixILCIgMCAwLCIsdiwiICIsSVswXSk6Ti5wdXNoKCJNIixPWzBdLCJBIixILCIsIixILCIgMCAxLCIsdiwiICIsSVswXSl9ZWxzZSBOLnB1c2goIk0iLHksIiwiLE0pO2lmKG51bGwhPVMpe3ZhciBZPU1hdGgubWluKHAsKG4tRikvKGotMSkpLFo9Zm8oW3ksTV0sW1Msa10sbiwtWSxnKSxWPWZvKFtfLHddLG51bGw9PXg/W3ksTV06W3gsYl0sbiwtWSxnKTtwPT09WT9OLnB1c2goIkwiLFZbMF0sIkEiLFksIiwiLFksIiAwIDAsIix2LCIgIixWWzFdLCJBIixuLCIsIixuLCIgMCAiLGdec28oVlsxXVswXSxWWzFdWzFdLFpbMV1bMF0sWlsxXVsxXSksIiwiLDEtZywiICIsWlsxXSwiQSIsWSwiLCIsWSwiIDAgMCwiLHYsIiAiLFpbMF0pOk4ucHVzaCgiTCIsVlswXSwiQSIsWSwiLCIsWSwiIDAgMCwiLHYsIiAiLFpbMF0pfWVsc2UgTi5wdXNoKCJMIixfLCIsIix3KX1lbHNlIE4ucHVzaCgiTSIseSwiLCIsTSksbnVsbCE9eCYmTi5wdXNoKCJBIixsLCIsIixsLCIgMCAiLEMsIiwiLGcsIiAiLHgsIiwiLGIpLE4ucHVzaCgiTCIsXywiLCIsdyksbnVsbCE9UyYmTi5wdXNoKCJBIixuLCIsIixuLCIgMCAiLHEsIiwiLDEtZywiICIsUywiLCIsayk7cmV0dXJuIE4ucHVzaCgiWiIpLE4uam9pbigiIil9ZnVuY3Rpb24gdChuLHQpe3JldHVybiJNMCwiK24rIkEiK24rIiwiK24rIiAwIDEsIit0KyIgMCwiKy1uKyJBIituKyIsIituKyIgMCAxLCIrdCsiIDAsIitufXZhciBlPWlvLHI9b28sdT11byxpPWtsLG89YW8sYT1jbyxjPWxvO3JldHVybiBuLmlubmVyUmFkaXVzPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhlPUV0KHQpLG4pOmV9LG4ub3V0ZXJSYWRpdXM9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHI9RXQodCksbik6cn0sbi5jb3JuZXJSYWRpdXM9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHU9RXQodCksbik6dX0sbi5wYWRSYWRpdXM9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGk9dD09a2w/a2w6RXQodCksbik6aX0sbi5zdGFydEFuZ2xlPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhvPUV0KHQpLG4pOm99LG4uZW5kQW5nbGU9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGE9RXQodCksbik6YX0sbi5wYWRBbmdsZT1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oYz1FdCh0KSxuKTpjfSxuLmNlbnRyb2lkPWZ1bmN0aW9uKCl7dmFyIG49KCtlLmFwcGx5KHRoaXMsYXJndW1lbnRzKSsgK3IuYXBwbHkodGhpcyxhcmd1bWVudHMpKS8yLHQ9KCtvLmFwcGx5KHRoaXMsYXJndW1lbnRzKSsgK2EuYXBwbHkodGhpcyxhcmd1bWVudHMpKS8yLVJhO3JldHVybltNYXRoLmNvcyh0KSpuLE1hdGguc2luKHQpKm5dfSxufTt2YXIga2w9ImF1dG8iO3RhLnN2Zy5saW5lPWZ1bmN0aW9uKCl7cmV0dXJuIGhvKHkpfTt2YXIgRWw9dGEubWFwKHtsaW5lYXI6Z28sImxpbmVhci1jbG9zZWQiOnBvLHN0ZXA6dm8sInN0ZXAtYmVmb3JlIjptbywic3RlcC1hZnRlciI6eW8sYmFzaXM6U28sImJhc2lzLW9wZW4iOmtvLCJiYXNpcy1jbG9zZWQiOkVvLGJ1bmRsZTpBbyxjYXJkaW5hbDpibywiY2FyZGluYWwtb3BlbiI6TW8sImNhcmRpbmFsLWNsb3NlZCI6eG8sbW9ub3RvbmU6VG99KTtFbC5mb3JFYWNoKGZ1bmN0aW9uKG4sdCl7dC5rZXk9bix0LmNsb3NlZD0vLWNsb3NlZCQvLnRlc3Qobil9KTt2YXIgQWw9WzAsMi8zLDEvMywwXSxObD1bMCwxLzMsMi8zLDBdLENsPVswLDEvNiwyLzMsMS82XTt0YS5zdmcubGluZS5yYWRpYWw9ZnVuY3Rpb24oKXt2YXIgbj1obyhSbyk7cmV0dXJuIG4ucmFkaXVzPW4ueCxkZWxldGUgbi54LG4uYW5nbGU9bi55LGRlbGV0ZSBuLnksbn0sbW8ucmV2ZXJzZT15byx5by5yZXZlcnNlPW1vLHRhLnN2Zy5hcmVhPWZ1bmN0aW9uKCl7cmV0dXJuIERvKHkpfSx0YS5zdmcuYXJlYS5yYWRpYWw9ZnVuY3Rpb24oKXt2YXIgbj1EbyhSbyk7cmV0dXJuIG4ucmFkaXVzPW4ueCxkZWxldGUgbi54LG4uaW5uZXJSYWRpdXM9bi54MCxkZWxldGUgbi54MCxuLm91dGVyUmFkaXVzPW4ueDEsZGVsZXRlIG4ueDEsbi5hbmdsZT1uLnksZGVsZXRlIG4ueSxuLnN0YXJ0QW5nbGU9bi55MCxkZWxldGUgbi55MCxuLmVuZEFuZ2xlPW4ueTEsZGVsZXRlIG4ueTEsbn0sdGEuc3ZnLmNob3JkPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gbihuLGEpe3ZhciBjPXQodGhpcyxpLG4sYSksbD10KHRoaXMsbyxuLGEpO3JldHVybiJNIitjLnAwK3IoYy5yLGMucDEsYy5hMS1jLmEwKSsoZShjLGwpP3UoYy5yLGMucDEsYy5yLGMucDApOnUoYy5yLGMucDEsbC5yLGwucDApK3IobC5yLGwucDEsbC5hMS1sLmEwKSt1KGwucixsLnAxLGMucixjLnAwKSkrIloifWZ1bmN0aW9uIHQobix0LGUscil7dmFyIHU9dC5jYWxsKG4sZSxyKSxpPWEuY2FsbChuLHUsciksbz1jLmNhbGwobix1LHIpLVJhLHM9bC5jYWxsKG4sdSxyKS1SYTtyZXR1cm57cjppLGEwOm8sYTE6cyxwMDpbaSpNYXRoLmNvcyhvKSxpKk1hdGguc2luKG8pXSxwMTpbaSpNYXRoLmNvcyhzKSxpKk1hdGguc2luKHMpXX19ZnVuY3Rpb24gZShuLHQpe3JldHVybiBuLmEwPT10LmEwJiZuLmExPT10LmExfWZ1bmN0aW9uIHIobix0LGUpe3JldHVybiJBIituKyIsIituKyIgMCAiKyArKGU+cWEpKyIsMSAiK3R9ZnVuY3Rpb24gdShuLHQsZSxyKXtyZXR1cm4iUSAwLDAgIityfXZhciBpPW1yLG89eXIsYT1QbyxjPWFvLGw9Y287cmV0dXJuIG4ucmFkaXVzPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhhPUV0KHQpLG4pOmF9LG4uc291cmNlPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhpPUV0KHQpLG4pOml9LG4udGFyZ2V0PWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhvPUV0KHQpLG4pOm99LG4uc3RhcnRBbmdsZT1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oYz1FdCh0KSxuKTpjfSxuLmVuZEFuZ2xlPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhsPUV0KHQpLG4pOmx9LG59LHRhLnN2Zy5kaWFnb25hbD1mdW5jdGlvbigpe2Z1bmN0aW9uIG4obix1KXt2YXIgaT10LmNhbGwodGhpcyxuLHUpLG89ZS5jYWxsKHRoaXMsbix1KSxhPShpLnkrby55KS8yLGM9W2kse3g6aS54LHk6YX0se3g6by54LHk6YX0sb107cmV0dXJuIGM9Yy5tYXAociksIk0iK2NbMF0rIkMiK2NbMV0rIiAiK2NbMl0rIiAiK2NbM119dmFyIHQ9bXIsZT15cixyPVVvO3JldHVybiBuLnNvdXJjZT1mdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8odD1FdChlKSxuKTp0fSxuLnRhcmdldD1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oZT1FdCh0KSxuKTplfSxuLnByb2plY3Rpb249ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHI9dCxuKTpyfSxufSx0YS5zdmcuZGlhZ29uYWwucmFkaWFsPWZ1bmN0aW9uKCl7dmFyIG49dGEuc3ZnLmRpYWdvbmFsKCksdD1VbyxlPW4ucHJvamVjdGlvbjtyZXR1cm4gbi5wcm9qZWN0aW9uPWZ1bmN0aW9uKG4pe3JldHVybiBhcmd1bWVudHMubGVuZ3RoP2Uoam8odD1uKSk6dH0sbn0sdGEuc3ZnLnN5bWJvbD1mdW5jdGlvbigpe2Z1bmN0aW9uIG4obixyKXtyZXR1cm4oemwuZ2V0KHQuY2FsbCh0aGlzLG4scikpfHxPbykoZS5jYWxsKHRoaXMsbixyKSl9dmFyIHQ9SG8sZT1GbztyZXR1cm4gbi50eXBlPWZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh0PUV0KGUpLG4pOnR9LG4uc2l6ZT1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oZT1FdCh0KSxuKTplfSxufTt2YXIgemw9dGEubWFwKHtjaXJjbGU6T28sY3Jvc3M6ZnVuY3Rpb24obil7dmFyIHQ9TWF0aC5zcXJ0KG4vNSkvMjtyZXR1cm4iTSIrLTMqdCsiLCIrLXQrIkgiKy10KyJWIistMyp0KyJIIit0KyJWIistdCsiSCIrMyp0KyJWIit0KyJIIit0KyJWIiszKnQrIkgiKy10KyJWIit0KyJIIistMyp0KyJaIn0sZGlhbW9uZDpmdW5jdGlvbihuKXt2YXIgdD1NYXRoLnNxcnQobi8oMipMbCkpLGU9dCpMbDtyZXR1cm4iTTAsIistdCsiTCIrZSsiLDAgMCwiK3QrIiAiKy1lKyIsMFoifSxzcXVhcmU6ZnVuY3Rpb24obil7dmFyIHQ9TWF0aC5zcXJ0KG4pLzI7cmV0dXJuIk0iKy10KyIsIistdCsiTCIrdCsiLCIrLXQrIiAiK3QrIiwiK3QrIiAiKy10KyIsIit0KyJaIn0sInRyaWFuZ2xlLWRvd24iOmZ1bmN0aW9uKG4pe3ZhciB0PU1hdGguc3FydChuL3FsKSxlPXQqcWwvMjtyZXR1cm4iTTAsIitlKyJMIit0KyIsIistZSsiICIrLXQrIiwiKy1lKyJaIn0sInRyaWFuZ2xlLXVwIjpmdW5jdGlvbihuKXt2YXIgdD1NYXRoLnNxcnQobi9xbCksZT10KnFsLzI7cmV0dXJuIk0wLCIrLWUrIkwiK3QrIiwiK2UrIiAiKy10KyIsIitlKyJaIn19KTt0YS5zdmcuc3ltYm9sVHlwZXM9emwua2V5cygpO3ZhciBxbD1NYXRoLnNxcnQoMyksTGw9TWF0aC50YW4oMzAqRGEpO19hLnRyYW5zaXRpb249ZnVuY3Rpb24obil7Zm9yKHZhciB0LGUscj1UbHx8KytVbCx1PVhvKG4pLGk9W10sbz1SbHx8e3RpbWU6RGF0ZS5ub3coKSxlYXNlOlN1LGRlbGF5OjAsZHVyYXRpb246MjUwfSxhPS0xLGM9dGhpcy5sZW5ndGg7KythPGM7KXtpLnB1c2godD1bXSk7Zm9yKHZhciBsPXRoaXNbYV0scz0tMSxmPWwubGVuZ3RoOysrczxmOykoZT1sW3NdKSYmJG8oZSxzLHUscixvKSx0LnB1c2goZSl9cmV0dXJuIFlvKGksdSxyKX0sX2EuaW50ZXJydXB0PWZ1bmN0aW9uKG4pe3JldHVybiB0aGlzLmVhY2gobnVsbD09bj9EbDpJbyhYbyhuKSkpfTt2YXIgVGwsUmwsRGw9SW8oWG8oKSksUGw9W10sVWw9MDtQbC5jYWxsPV9hLmNhbGwsUGwuZW1wdHk9X2EuZW1wdHksUGwubm9kZT1fYS5ub2RlLFBsLnNpemU9X2Euc2l6ZSx0YS50cmFuc2l0aW9uPWZ1bmN0aW9uKG4sdCl7cmV0dXJuIG4mJm4udHJhbnNpdGlvbj9UbD9uLnRyYW5zaXRpb24odCk6bjp0YS5zZWxlY3Rpb24oKS50cmFuc2l0aW9uKG4pfSx0YS50cmFuc2l0aW9uLnByb3RvdHlwZT1QbCxQbC5zZWxlY3Q9ZnVuY3Rpb24obil7dmFyIHQsZSxyLHU9dGhpcy5pZCxpPXRoaXMubmFtZXNwYWNlLG89W107bj1OKG4pO2Zvcih2YXIgYT0tMSxjPXRoaXMubGVuZ3RoOysrYTxjOyl7by5wdXNoKHQ9W10pO2Zvcih2YXIgbD10aGlzW2FdLHM9LTEsZj1sLmxlbmd0aDsrK3M8ZjspKHI9bFtzXSkmJihlPW4uY2FsbChyLHIuX19kYXRhX18scyxhKSk/KCJfX2RhdGFfXyJpbiByJiYoZS5fX2RhdGFfXz1yLl9fZGF0YV9fKSwkbyhlLHMsaSx1LHJbaV1bdV0pLHQucHVzaChlKSk6dC5wdXNoKG51bGwpfXJldHVybiBZbyhvLGksdSl9LFBsLnNlbGVjdEFsbD1mdW5jdGlvbihuKXt2YXIgdCxlLHIsdSxpLG89dGhpcy5pZCxhPXRoaXMubmFtZXNwYWNlLGM9W107bj1DKG4pO2Zvcih2YXIgbD0tMSxzPXRoaXMubGVuZ3RoOysrbDxzOylmb3IodmFyIGY9dGhpc1tsXSxoPS0xLGc9Zi5sZW5ndGg7KytoPGc7KWlmKHI9ZltoXSl7aT1yW2FdW29dLGU9bi5jYWxsKHIsci5fX2RhdGFfXyxoLGwpLGMucHVzaCh0PVtdKTtmb3IodmFyIHA9LTEsdj1lLmxlbmd0aDsrK3A8djspKHU9ZVtwXSkmJiRvKHUscCxhLG8saSksdC5wdXNoKHUpfXJldHVybiBZbyhjLGEsbyl9LFBsLmZpbHRlcj1mdW5jdGlvbihuKXt2YXIgdCxlLHIsdT1bXTsiZnVuY3Rpb24iIT10eXBlb2YgbiYmKG49TyhuKSk7Zm9yKHZhciBpPTAsbz10aGlzLmxlbmd0aDtvPmk7aSsrKXt1LnB1c2godD1bXSk7Zm9yKHZhciBlPXRoaXNbaV0sYT0wLGM9ZS5sZW5ndGg7Yz5hO2ErKykocj1lW2FdKSYmbi5jYWxsKHIsci5fX2RhdGFfXyxhLGkpJiZ0LnB1c2gocil9cmV0dXJuIFlvKHUsdGhpcy5uYW1lc3BhY2UsdGhpcy5pZCl9LFBsLnR3ZWVuPWZ1bmN0aW9uKG4sdCl7dmFyIGU9dGhpcy5pZCxyPXRoaXMubmFtZXNwYWNlO3JldHVybiBhcmd1bWVudHMubGVuZ3RoPDI/dGhpcy5ub2RlKClbcl1bZV0udHdlZW4uZ2V0KG4pOlkodGhpcyxudWxsPT10P2Z1bmN0aW9uKHQpe3Rbcl1bZV0udHdlZW4ucmVtb3ZlKG4pfTpmdW5jdGlvbih1KXt1W3JdW2VdLnR3ZWVuLnNldChuLHQpfSl9LFBsLmF0dHI9ZnVuY3Rpb24obix0KXtmdW5jdGlvbiBlKCl7dGhpcy5yZW1vdmVBdHRyaWJ1dGUoYSl9ZnVuY3Rpb24gcigpe3RoaXMucmVtb3ZlQXR0cmlidXRlTlMoYS5zcGFjZSxhLmxvY2FsKX1mdW5jdGlvbiB1KG4pe3JldHVybiBudWxsPT1uP2U6KG4rPSIiLGZ1bmN0aW9uKCl7dmFyIHQsZT10aGlzLmdldEF0dHJpYnV0ZShhKTtyZXR1cm4gZSE9PW4mJih0PW8oZSxuKSxmdW5jdGlvbihuKXt0aGlzLnNldEF0dHJpYnV0ZShhLHQobikpfSl9KX1mdW5jdGlvbiBpKG4pe3JldHVybiBudWxsPT1uP3I6KG4rPSIiLGZ1bmN0aW9uKCl7dmFyIHQsZT10aGlzLmdldEF0dHJpYnV0ZU5TKGEuc3BhY2UsYS5sb2NhbCk7cmV0dXJuIGUhPT1uJiYodD1vKGUsbiksZnVuY3Rpb24obil7dGhpcy5zZXRBdHRyaWJ1dGVOUyhhLnNwYWNlLGEubG9jYWwsdChuKSl9KX0pfWlmKGFyZ3VtZW50cy5sZW5ndGg8Mil7Zm9yKHQgaW4gbil0aGlzLmF0dHIodCxuW3RdKTtyZXR1cm4gdGhpc312YXIgbz0idHJhbnNmb3JtIj09bj9IdTptdSxhPXRhLm5zLnF1YWxpZnkobik7cmV0dXJuIFpvKHRoaXMsImF0dHIuIituLHQsYS5sb2NhbD9pOnUpfSxQbC5hdHRyVHdlZW49ZnVuY3Rpb24obix0KXtmdW5jdGlvbiBlKG4sZSl7dmFyIHI9dC5jYWxsKHRoaXMsbixlLHRoaXMuZ2V0QXR0cmlidXRlKHUpKTtyZXR1cm4gciYmZnVuY3Rpb24obil7dGhpcy5zZXRBdHRyaWJ1dGUodSxyKG4pKX19ZnVuY3Rpb24gcihuLGUpe3ZhciByPXQuY2FsbCh0aGlzLG4sZSx0aGlzLmdldEF0dHJpYnV0ZU5TKHUuc3BhY2UsdS5sb2NhbCkpO3JldHVybiByJiZmdW5jdGlvbihuKXt0aGlzLnNldEF0dHJpYnV0ZU5TKHUuc3BhY2UsdS5sb2NhbCxyKG4pKX19dmFyIHU9dGEubnMucXVhbGlmeShuKTtyZXR1cm4gdGhpcy50d2VlbigiYXR0ci4iK24sdS5sb2NhbD9yOmUpfSxQbC5zdHlsZT1mdW5jdGlvbihuLGUscil7ZnVuY3Rpb24gdSgpe3RoaXMuc3R5bGUucmVtb3ZlUHJvcGVydHkobil9ZnVuY3Rpb24gaShlKXtyZXR1cm4gbnVsbD09ZT91OihlKz0iIixmdW5jdGlvbigpe3ZhciB1LGk9dCh0aGlzKS5nZXRDb21wdXRlZFN0eWxlKHRoaXMsbnVsbCkuZ2V0UHJvcGVydHlWYWx1ZShuKTtyZXR1cm4gaSE9PWUmJih1PW11KGksZSksZnVuY3Rpb24odCl7dGhpcy5zdHlsZS5zZXRQcm9wZXJ0eShuLHUodCkscil9KX0pfXZhciBvPWFyZ3VtZW50cy5sZW5ndGg7aWYoMz5vKXtpZigic3RyaW5nIiE9dHlwZW9mIG4pezI+byYmKGU9IiIpO2ZvcihyIGluIG4pdGhpcy5zdHlsZShyLG5bcl0sZSk7cmV0dXJuIHRoaXN9cj0iIn1yZXR1cm4gWm8odGhpcywic3R5bGUuIituLGUsaSl9LFBsLnN0eWxlVHdlZW49ZnVuY3Rpb24obixlLHIpe2Z1bmN0aW9uIHUodSxpKXt2YXIgbz1lLmNhbGwodGhpcyx1LGksdCh0aGlzKS5nZXRDb21wdXRlZFN0eWxlKHRoaXMsbnVsbCkuZ2V0UHJvcGVydHlWYWx1ZShuKSk7cmV0dXJuIG8mJmZ1bmN0aW9uKHQpe3RoaXMuc3R5bGUuc2V0UHJvcGVydHkobixvKHQpLHIpfX1yZXR1cm4gYXJndW1lbnRzLmxlbmd0aDwzJiYocj0iIiksdGhpcy50d2Vlbigic3R5bGUuIituLHUpfSxQbC50ZXh0PWZ1bmN0aW9uKG4pe3JldHVybiBabyh0aGlzLCJ0ZXh0IixuLFZvKX0sUGwucmVtb3ZlPWZ1bmN0aW9uKCl7dmFyIG49dGhpcy5uYW1lc3BhY2U7cmV0dXJuIHRoaXMuZWFjaCgiZW5kLnRyYW5zaXRpb24iLGZ1bmN0aW9uKCl7dmFyIHQ7dGhpc1tuXS5jb3VudDwyJiYodD10aGlzLnBhcmVudE5vZGUpJiZ0LnJlbW92ZUNoaWxkKHRoaXMpfSl9LFBsLmVhc2U9ZnVuY3Rpb24obil7dmFyIHQ9dGhpcy5pZCxlPXRoaXMubmFtZXNwYWNlO3JldHVybiBhcmd1bWVudHMubGVuZ3RoPDE/dGhpcy5ub2RlKClbZV1bdF0uZWFzZTooImZ1bmN0aW9uIiE9dHlwZW9mIG4mJihuPXRhLmVhc2UuYXBwbHkodGEsYXJndW1lbnRzKSksWSh0aGlzLGZ1bmN0aW9uKHIpe3JbZV1bdF0uZWFzZT1ufSkpfSxQbC5kZWxheT1mdW5jdGlvbihuKXt2YXIgdD10aGlzLmlkLGU9dGhpcy5uYW1lc3BhY2U7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg8MT90aGlzLm5vZGUoKVtlXVt0XS5kZWxheTpZKHRoaXMsImZ1bmN0aW9uIj09dHlwZW9mIG4/ZnVuY3Rpb24ocix1LGkpe3JbZV1bdF0uZGVsYXk9K24uY2FsbChyLHIuX19kYXRhX18sdSxpKX06KG49K24sZnVuY3Rpb24ocil7cltlXVt0XS5kZWxheT1ufSkpfSxQbC5kdXJhdGlvbj1mdW5jdGlvbihuKXt2YXIgdD10aGlzLmlkLGU9dGhpcy5uYW1lc3BhY2U7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg8MT90aGlzLm5vZGUoKVtlXVt0XS5kdXJhdGlvbjpZKHRoaXMsImZ1bmN0aW9uIj09dHlwZW9mIG4/ZnVuY3Rpb24ocix1LGkpe3JbZV1bdF0uZHVyYXRpb249TWF0aC5tYXgoMSxuLmNhbGwocixyLl9fZGF0YV9fLHUsaSkpfToobj1NYXRoLm1heCgxLG4pLGZ1bmN0aW9uKHIpe3JbZV1bdF0uZHVyYXRpb249bn0pKX0sUGwuZWFjaD1mdW5jdGlvbihuLHQpe3ZhciBlPXRoaXMuaWQscj10aGlzLm5hbWVzcGFjZTtpZihhcmd1bWVudHMubGVuZ3RoPDIpe3ZhciB1PVJsLGk9VGw7dHJ5e1RsPWUsWSh0aGlzLGZ1bmN0aW9uKHQsdSxpKXtSbD10W3JdW2VdLG4uY2FsbCh0LHQuX19kYXRhX18sdSxpKX0pfWZpbmFsbHl7Umw9dSxUbD1pfX1lbHNlIFkodGhpcyxmdW5jdGlvbih1KXt2YXIgaT11W3JdW2VdOyhpLmV2ZW50fHwoaS5ldmVudD10YS5kaXNwYXRjaCgic3RhcnQiLCJlbmQiLCJpbnRlcnJ1cHQiKSkpLm9uKG4sdCl9KTtyZXR1cm4gdGhpc30sUGwudHJhbnNpdGlvbj1mdW5jdGlvbigpe2Zvcih2YXIgbix0LGUscix1PXRoaXMuaWQsaT0rK1VsLG89dGhpcy5uYW1lc3BhY2UsYT1bXSxjPTAsbD10aGlzLmxlbmd0aDtsPmM7YysrKXthLnB1c2gobj1bXSk7Zm9yKHZhciB0PXRoaXNbY10scz0wLGY9dC5sZW5ndGg7Zj5zO3MrKykoZT10W3NdKSYmKHI9ZVtvXVt1XSwkbyhlLHMsbyxpLHt0aW1lOnIudGltZSxlYXNlOnIuZWFzZSxkZWxheTpyLmRlbGF5K3IuZHVyYXRpb24sZHVyYXRpb246ci5kdXJhdGlvbn0pKSxuLnB1c2goZSl9cmV0dXJuIFlvKGEsbyxpKX0sdGEuc3ZnLmF4aXM9ZnVuY3Rpb24oKXtmdW5jdGlvbiBuKG4pe24uZWFjaChmdW5jdGlvbigpe3ZhciBuLGw9dGEuc2VsZWN0KHRoaXMpLHM9dGhpcy5fX2NoYXJ0X198fGUsZj10aGlzLl9fY2hhcnRfXz1lLmNvcHkoKSxoPW51bGw9PWM/Zi50aWNrcz9mLnRpY2tzLmFwcGx5KGYsYSk6Zi5kb21haW4oKTpjLGc9bnVsbD09dD9mLnRpY2tGb3JtYXQ/Zi50aWNrRm9ybWF0LmFwcGx5KGYsYSk6eTp0LHA9bC5zZWxlY3RBbGwoIi50aWNrIikuZGF0YShoLGYpLHY9cC5lbnRlcigpLmluc2VydCgiZyIsIi5kb21haW4iKS5hdHRyKCJjbGFzcyIsInRpY2siKS5zdHlsZSgib3BhY2l0eSIsQ2EpLGQ9dGEudHJhbnNpdGlvbihwLmV4aXQoKSkuc3R5bGUoIm9wYWNpdHkiLENhKS5yZW1vdmUoKSxtPXRhLnRyYW5zaXRpb24ocC5vcmRlcigpKS5zdHlsZSgib3BhY2l0eSIsMSksTT1NYXRoLm1heCh1LDApK28seD1VaShmKSxiPWwuc2VsZWN0QWxsKCIuZG9tYWluIikuZGF0YShbMF0pLF89KGIuZW50ZXIoKS5hcHBlbmQoInBhdGgiKS5hdHRyKCJjbGFzcyIsImRvbWFpbiIpLHRhLnRyYW5zaXRpb24oYikpO3YuYXBwZW5kKCJsaW5lIiksdi5hcHBlbmQoInRleHQiKTt2YXIgdyxTLGssRSxBPXYuc2VsZWN0KCJsaW5lIiksTj1tLnNlbGVjdCgibGluZSIpLEM9cC5zZWxlY3QoInRleHQiKS50ZXh0KGcpLHo9di5zZWxlY3QoInRleHQiKSxxPW0uc2VsZWN0KCJ0ZXh0IiksTD0idG9wIj09PXJ8fCJsZWZ0Ij09PXI/LTE6MTtpZigiYm90dG9tIj09PXJ8fCJ0b3AiPT09cj8obj1Cbyx3PSJ4IixrPSJ5IixTPSJ4MiIsRT0ieTIiLEMuYXR0cigiZHkiLDA+TD8iMGVtIjoiLjcxZW0iKS5zdHlsZSgidGV4dC1hbmNob3IiLCJtaWRkbGUiKSxfLmF0dHIoImQiLCJNIit4WzBdKyIsIitMKmkrIlYwSCIreFsxXSsiViIrTCppKSk6KG49V28sdz0ieSIsaz0ieCIsUz0ieTIiLEU9IngyIixDLmF0dHIoImR5IiwiLjMyZW0iKS5zdHlsZSgidGV4dC1hbmNob3IiLDA+TD8iZW5kIjoic3RhcnQiKSxfLmF0dHIoImQiLCJNIitMKmkrIiwiK3hbMF0rIkgwViIreFsxXSsiSCIrTCppKSksQS5hdHRyKEUsTCp1KSx6LmF0dHIoayxMKk0pLE4uYXR0cihTLDApLmF0dHIoRSxMKnUpLHEuYXR0cih3LDApLmF0dHIoayxMKk0pLGYucmFuZ2VCYW5kKXt2YXIgVD1mLFI9VC5yYW5nZUJhbmQoKS8yO3M9Zj1mdW5jdGlvbihuKXtyZXR1cm4gVChuKStSfX1lbHNlIHMucmFuZ2VCYW5kP3M9ZjpkLmNhbGwobixmLHMpO3YuY2FsbChuLHMsZiksbS5jYWxsKG4sZixmKX0pfXZhciB0LGU9dGEuc2NhbGUubGluZWFyKCkscj1qbCx1PTYsaT02LG89MyxhPVsxMF0sYz1udWxsO3JldHVybiBuLnNjYWxlPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhlPXQsbik6ZX0sbi5vcmllbnQ9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHI9dCBpbiBGbD90KyIiOmpsLG4pOnJ9LG4udGlja3M9ZnVuY3Rpb24oKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oYT1hcmd1bWVudHMsbik6YX0sbi50aWNrVmFsdWVzPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhjPXQsbik6Y30sbi50aWNrRm9ybWF0PWZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh0PWUsbik6dH0sbi50aWNrU2l6ZT1mdW5jdGlvbih0KXt2YXIgZT1hcmd1bWVudHMubGVuZ3RoO3JldHVybiBlPyh1PSt0LGk9K2FyZ3VtZW50c1tlLTFdLG4pOnV9LG4uaW5uZXJUaWNrU2l6ZT1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8odT0rdCxuKTp1fSxuLm91dGVyVGlja1NpemU9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGk9K3Qsbik6aX0sbi50aWNrUGFkZGluZz1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obz0rdCxuKTpvfSxuLnRpY2tTdWJkaXZpZGU9ZnVuY3Rpb24oKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aCYmbn0sbn07dmFyIGpsPSJib3R0b20iLEZsPXt0b3A6MSxyaWdodDoxLGJvdHRvbToxLGxlZnQ6MX07dGEuc3ZnLmJydXNoPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gbih0KXt0LmVhY2goZnVuY3Rpb24oKXt2YXIgdD10YS5zZWxlY3QodGhpcykuc3R5bGUoInBvaW50ZXItZXZlbnRzIiwiYWxsIikuc3R5bGUoIi13ZWJraXQtdGFwLWhpZ2hsaWdodC1jb2xvciIsInJnYmEoMCwwLDAsMCkiKS5vbigibW91c2Vkb3duLmJydXNoIixpKS5vbigidG91Y2hzdGFydC5icnVzaCIsaSksbz10LnNlbGVjdEFsbCgiLmJhY2tncm91bmQiKS5kYXRhKFswXSk7by5lbnRlcigpLmFwcGVuZCgicmVjdCIpLmF0dHIoImNsYXNzIiwiYmFja2dyb3VuZCIpLnN0eWxlKCJ2aXNpYmlsaXR5IiwiaGlkZGVuIikuc3R5bGUoImN1cnNvciIsImNyb3NzaGFpciIpLHQuc2VsZWN0QWxsKCIuZXh0ZW50IikuZGF0YShbMF0pLmVudGVyKCkuYXBwZW5kKCJyZWN0IikuYXR0cigiY2xhc3MiLCJleHRlbnQiKS5zdHlsZSgiY3Vyc29yIiwibW92ZSIpO3ZhciBhPXQuc2VsZWN0QWxsKCIucmVzaXplIikuZGF0YSh2LHkpO2EuZXhpdCgpLnJlbW92ZSgpLGEuZW50ZXIoKS5hcHBlbmQoImciKS5hdHRyKCJjbGFzcyIsZnVuY3Rpb24obil7cmV0dXJuInJlc2l6ZSAiK259KS5zdHlsZSgiY3Vyc29yIixmdW5jdGlvbihuKXtyZXR1cm4gSGxbbl19KS5hcHBlbmQoInJlY3QiKS5hdHRyKCJ4IixmdW5jdGlvbihuKXtyZXR1cm4vW2V3XSQvLnRlc3Qobik/LTM6bnVsbH0pLmF0dHIoInkiLGZ1bmN0aW9uKG4pe3JldHVybi9eW25zXS8udGVzdChuKT8tMzpudWxsfSkuYXR0cigid2lkdGgiLDYpLmF0dHIoImhlaWdodCIsNikuc3R5bGUoInZpc2liaWxpdHkiLCJoaWRkZW4iKSxhLnN0eWxlKCJkaXNwbGF5IixuLmVtcHR5KCk/Im5vbmUiOm51bGwpO3ZhciBjLGY9dGEudHJhbnNpdGlvbih0KSxoPXRhLnRyYW5zaXRpb24obyk7bCYmKGM9VWkobCksaC5hdHRyKCJ4IixjWzBdKS5hdHRyKCJ3aWR0aCIsY1sxXS1jWzBdKSxyKGYpKSxzJiYoYz1VaShzKSxoLmF0dHIoInkiLGNbMF0pLmF0dHIoImhlaWdodCIsY1sxXS1jWzBdKSx1KGYpKSxlKGYpfSl9ZnVuY3Rpb24gZShuKXtuLnNlbGVjdEFsbCgiLnJlc2l6ZSIpLmF0dHIoInRyYW5zZm9ybSIsZnVuY3Rpb24obil7cmV0dXJuInRyYW5zbGF0ZSgiK2ZbKy9lJC8udGVzdChuKV0rIiwiK2hbKy9ecy8udGVzdChuKV0rIikifSl9ZnVuY3Rpb24gcihuKXtuLnNlbGVjdCgiLmV4dGVudCIpLmF0dHIoIngiLGZbMF0pLG4uc2VsZWN0QWxsKCIuZXh0ZW50LC5uPnJlY3QsLnM+cmVjdCIpLmF0dHIoIndpZHRoIixmWzFdLWZbMF0pfWZ1bmN0aW9uIHUobil7bi5zZWxlY3QoIi5leHRlbnQiKS5hdHRyKCJ5IixoWzBdKSxuLnNlbGVjdEFsbCgiLmV4dGVudCwuZT5yZWN0LC53PnJlY3QiKS5hdHRyKCJoZWlnaHQiLGhbMV0taFswXSl9ZnVuY3Rpb24gaSgpe2Z1bmN0aW9uIGkoKXszMj09dGEuZXZlbnQua2V5Q29kZSYmKEN8fChNPW51bGwscVswXS09ZlsxXSxxWzFdLT1oWzFdLEM9MiksUygpKX1mdW5jdGlvbiB2KCl7MzI9PXRhLmV2ZW50LmtleUNvZGUmJjI9PUMmJihxWzBdKz1mWzFdLHFbMV0rPWhbMV0sQz0wLFMoKSl9ZnVuY3Rpb24gZCgpe3ZhciBuPXRhLm1vdXNlKGIpLHQ9ITE7eCYmKG5bMF0rPXhbMF0sblsxXSs9eFsxXSksQ3x8KHRhLmV2ZW50LmFsdEtleT8oTXx8KE09WyhmWzBdK2ZbMV0pLzIsKGhbMF0raFsxXSkvMl0pLHFbMF09ZlsrKG5bMF08TVswXSldLHFbMV09aFsrKG5bMV08TVsxXSldKTpNPW51bGwpLEEmJm0obixsLDApJiYocihrKSx0PSEwKSxOJiZtKG4scywxKSYmKHUoayksdD0hMCksdCYmKGUoayksdyh7dHlwZToiYnJ1c2giLG1vZGU6Qz8ibW92ZSI6InJlc2l6ZSJ9KSl9ZnVuY3Rpb24gbShuLHQsZSl7dmFyIHIsdSxpPVVpKHQpLGM9aVswXSxsPWlbMV0scz1xW2VdLHY9ZT9oOmYsZD12WzFdLXZbMF07cmV0dXJuIEMmJihjLT1zLGwtPWQrcykscj0oZT9wOmcpP01hdGgubWF4KGMsTWF0aC5taW4obCxuW2VdKSk6bltlXSxDP3U9KHIrPXMpK2Q6KE0mJihzPU1hdGgubWF4KGMsTWF0aC5taW4obCwyKk1bZV0tcikpKSxyPnM/KHU9cixyPXMpOnU9cyksdlswXSE9cnx8dlsxXSE9dT8oZT9hPW51bGw6bz1udWxsLHZbMF09cix2WzFdPXUsITApOnZvaWQgMH1mdW5jdGlvbiB5KCl7ZCgpLGsuc3R5bGUoInBvaW50ZXItZXZlbnRzIiwiYWxsIikuc2VsZWN0QWxsKCIucmVzaXplIikuc3R5bGUoImRpc3BsYXkiLG4uZW1wdHkoKT8ibm9uZSI6bnVsbCksdGEuc2VsZWN0KCJib2R5Iikuc3R5bGUoImN1cnNvciIsbnVsbCksTC5vbigibW91c2Vtb3ZlLmJydXNoIixudWxsKS5vbigibW91c2V1cC5icnVzaCIsbnVsbCkub24oInRvdWNobW92ZS5icnVzaCIsbnVsbCkub24oInRvdWNoZW5kLmJydXNoIixudWxsKS5vbigia2V5ZG93bi5icnVzaCIsbnVsbCkub24oImtleXVwLmJydXNoIixudWxsKSx6KCksdyh7dHlwZToiYnJ1c2hlbmQifSl9dmFyIE0seCxiPXRoaXMsXz10YS5zZWxlY3QodGEuZXZlbnQudGFyZ2V0KSx3PWMub2YoYixhcmd1bWVudHMpLGs9dGEuc2VsZWN0KGIpLEU9Xy5kYXR1bSgpLEE9IS9eKG58cykkLy50ZXN0KEUpJiZsLE49IS9eKGV8dykkLy50ZXN0KEUpJiZzLEM9Xy5jbGFzc2VkKCJleHRlbnQiKSx6PVcoYikscT10YS5tb3VzZShiKSxMPXRhLnNlbGVjdCh0KGIpKS5vbigia2V5ZG93bi5icnVzaCIsaSkub24oImtleXVwLmJydXNoIix2KTtpZih0YS5ldmVudC5jaGFuZ2VkVG91Y2hlcz9MLm9uKCJ0b3VjaG1vdmUuYnJ1c2giLGQpLm9uKCJ0b3VjaGVuZC5icnVzaCIseSk6TC5vbigibW91c2Vtb3ZlLmJydXNoIixkKS5vbigibW91c2V1cC5icnVzaCIseSksay5pbnRlcnJ1cHQoKS5zZWxlY3RBbGwoIioiKS5pbnRlcnJ1cHQoKSxDKXFbMF09ZlswXS1xWzBdLHFbMV09aFswXS1xWzFdO2Vsc2UgaWYoRSl7dmFyIFQ9Ky93JC8udGVzdChFKSxSPSsvXm4vLnRlc3QoRSk7eD1bZlsxLVRdLXFbMF0saFsxLVJdLXFbMV1dLHFbMF09ZltUXSxxWzFdPWhbUl19ZWxzZSB0YS5ldmVudC5hbHRLZXkmJihNPXEuc2xpY2UoKSk7ay5zdHlsZSgicG9pbnRlci1ldmVudHMiLCJub25lIikuc2VsZWN0QWxsKCIucmVzaXplIikuc3R5bGUoImRpc3BsYXkiLG51bGwpLHRhLnNlbGVjdCgiYm9keSIpLnN0eWxlKCJjdXJzb3IiLF8uc3R5bGUoImN1cnNvciIpKSx3KHt0eXBlOiJicnVzaHN0YXJ0In0pLGQoKX12YXIgbyxhLGM9RShuLCJicnVzaHN0YXJ0IiwiYnJ1c2giLCJicnVzaGVuZCIpLGw9bnVsbCxzPW51bGwsZj1bMCwwXSxoPVswLDBdLGc9ITAscD0hMCx2PU9sWzBdO3JldHVybiBuLmV2ZW50PWZ1bmN0aW9uKG4pe24uZWFjaChmdW5jdGlvbigpe3ZhciBuPWMub2YodGhpcyxhcmd1bWVudHMpLHQ9e3g6Zix5OmgsaTpvLGo6YX0sZT10aGlzLl9fY2hhcnRfX3x8dDt0aGlzLl9fY2hhcnRfXz10LFRsP3RhLnNlbGVjdCh0aGlzKS50cmFuc2l0aW9uKCkuZWFjaCgic3RhcnQuYnJ1c2giLGZ1bmN0aW9uKCl7bz1lLmksYT1lLmosZj1lLngsaD1lLnksbih7dHlwZToiYnJ1c2hzdGFydCJ9KX0pLnR3ZWVuKCJicnVzaDpicnVzaCIsZnVuY3Rpb24oKXt2YXIgZT15dShmLHQueCkscj15dShoLHQueSk7cmV0dXJuIG89YT1udWxsLGZ1bmN0aW9uKHUpe2Y9dC54PWUodSksaD10Lnk9cih1KSxuKHt0eXBlOiJicnVzaCIsbW9kZToicmVzaXplIn0pfX0pLmVhY2goImVuZC5icnVzaCIsZnVuY3Rpb24oKXtvPXQuaSxhPXQuaixuKHt0eXBlOiJicnVzaCIsbW9kZToicmVzaXplIn0pLG4oe3R5cGU6ImJydXNoZW5kIn0pfSk6KG4oe3R5cGU6ImJydXNoc3RhcnQifSksbih7dHlwZToiYnJ1c2giLG1vZGU6InJlc2l6ZSJ9KSxuKHt0eXBlOiJicnVzaGVuZCJ9KSl9KX0sbi54PWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhsPXQsdj1PbFshbDw8MXwhc10sbik6bH0sbi55PWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhzPXQsdj1PbFshbDw8MXwhc10sbik6c30sbi5jbGFtcD1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obCYmcz8oZz0hIXRbMF0scD0hIXRbMV0pOmw/Zz0hIXQ6cyYmKHA9ISF0KSxuKTpsJiZzP1tnLHBdOmw/ZzpzP3A6bnVsbH0sbi5leHRlbnQ9ZnVuY3Rpb24odCl7dmFyIGUscix1LGksYztyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obCYmKGU9dFswXSxyPXRbMV0scyYmKGU9ZVswXSxyPXJbMF0pLG89W2Uscl0sbC5pbnZlcnQmJihlPWwoZSkscj1sKHIpKSxlPnImJihjPWUsZT1yLHI9YyksKGUhPWZbMF18fHIhPWZbMV0pJiYoZj1bZSxyXSkpLHMmJih1PXRbMF0saT10WzFdLGwmJih1PXVbMV0saT1pWzFdKSxhPVt1LGldLHMuaW52ZXJ0JiYodT1zKHUpLGk9cyhpKSksdT5pJiYoYz11LHU9aSxpPWMpLCh1IT1oWzBdfHxpIT1oWzFdKSYmKGg9W3UsaV0pKSxuKToobCYmKG8/KGU9b1swXSxyPW9bMV0pOihlPWZbMF0scj1mWzFdLGwuaW52ZXJ0JiYoZT1sLmludmVydChlKSxyPWwuaW52ZXJ0KHIpKSxlPnImJihjPWUsZT1yLHI9YykpKSxzJiYoYT8odT1hWzBdLGk9YVsxXSk6KHU9aFswXSxpPWhbMV0scy5pbnZlcnQmJih1PXMuaW52ZXJ0KHUpLGk9cy5pbnZlcnQoaSkpLHU+aSYmKGM9dSx1PWksaT1jKSkpLGwmJnM/W1tlLHVdLFtyLGldXTpsP1tlLHJdOnMmJlt1LGldKX0sbi5jbGVhcj1mdW5jdGlvbigpe3JldHVybiBuLmVtcHR5KCl8fChmPVswLDBdLGg9WzAsMF0sbz1hPW51bGwpLG59LG4uZW1wdHk9ZnVuY3Rpb24oKXtyZXR1cm4hIWwmJmZbMF09PWZbMV18fCEhcyYmaFswXT09aFsxXX0sdGEucmViaW5kKG4sYywib24iKX07dmFyIEhsPXtuOiJucy1yZXNpemUiLGU6ImV3LXJlc2l6ZSIsczoibnMtcmVzaXplIix3OiJldy1yZXNpemUiLG53OiJud3NlLXJlc2l6ZSIsbmU6Im5lc3ctcmVzaXplIixzZToibndzZS1yZXNpemUiLHN3OiJuZXN3LXJlc2l6ZSJ9LE9sPVtbIm4iLCJlIiwicyIsInciLCJudyIsIm5lIiwic2UiLCJzdyJdLFsiZSIsInciXSxbIm4iLCJzIl0sW11dLElsPWFjLmZvcm1hdD1nYy50aW1lRm9ybWF0LFlsPUlsLnV0YyxabD1ZbCgiJVktJW0tJWRUJUg6JU06JVMuJUxaIik7SWwuaXNvPURhdGUucHJvdG90eXBlLnRvSVNPU3RyaW5nJiYrbmV3IERhdGUoIjIwMDAtMDEtMDFUMDA6MDA6MDAuMDAwWiIpP0pvOlpsLEpvLnBhcnNlPWZ1bmN0aW9uKG4pe3ZhciB0PW5ldyBEYXRlKG4pO3JldHVybiBpc05hTih0KT9udWxsOnR9LEpvLnRvU3RyaW5nPVpsLnRvU3RyaW5nLGFjLnNlY29uZD1GdChmdW5jdGlvbihuKXtyZXR1cm4gbmV3IGNjKDFlMypNYXRoLmZsb29yKG4vMWUzKSl9LGZ1bmN0aW9uKG4sdCl7bi5zZXRUaW1lKG4uZ2V0VGltZSgpKzFlMypNYXRoLmZsb29yKHQpKX0sZnVuY3Rpb24obil7cmV0dXJuIG4uZ2V0U2Vjb25kcygpfSksYWMuc2Vjb25kcz1hYy5zZWNvbmQucmFuZ2UsYWMuc2Vjb25kcy51dGM9YWMuc2Vjb25kLnV0Yy5yYW5nZSxhYy5taW51dGU9RnQoZnVuY3Rpb24obil7cmV0dXJuIG5ldyBjYyg2ZTQqTWF0aC5mbG9vcihuLzZlNCkpfSxmdW5jdGlvbihuLHQpe24uc2V0VGltZShuLmdldFRpbWUoKSs2ZTQqTWF0aC5mbG9vcih0KSl9LGZ1bmN0aW9uKG4pe3JldHVybiBuLmdldE1pbnV0ZXMoKX0pLGFjLm1pbnV0ZXM9YWMubWludXRlLnJhbmdlLGFjLm1pbnV0ZXMudXRjPWFjLm1pbnV0ZS51dGMucmFuZ2UsYWMuaG91cj1GdChmdW5jdGlvbihuKXt2YXIgdD1uLmdldFRpbWV6b25lT2Zmc2V0KCkvNjA7cmV0dXJuIG5ldyBjYygzNmU1KihNYXRoLmZsb29yKG4vMzZlNS10KSt0KSl9LGZ1bmN0aW9uKG4sdCl7bi5zZXRUaW1lKG4uZ2V0VGltZSgpKzM2ZTUqTWF0aC5mbG9vcih0KSl9LGZ1bmN0aW9uKG4pe3JldHVybiBuLmdldEhvdXJzKCl9KSxhYy5ob3Vycz1hYy5ob3VyLnJhbmdlLGFjLmhvdXJzLnV0Yz1hYy5ob3VyLnV0Yy5yYW5nZSxhYy5tb250aD1GdChmdW5jdGlvbihuKXtyZXR1cm4gbj1hYy5kYXkobiksbi5zZXREYXRlKDEpLG59LGZ1bmN0aW9uKG4sdCl7bi5zZXRNb250aChuLmdldE1vbnRoKCkrdCl9LGZ1bmN0aW9uKG4pe3JldHVybiBuLmdldE1vbnRoKCl9KSxhYy5tb250aHM9YWMubW9udGgucmFuZ2UsYWMubW9udGhzLnV0Yz1hYy5tb250aC51dGMucmFuZ2U7dmFyIFZsPVsxZTMsNWUzLDE1ZTMsM2U0LDZlNCwzZTUsOWU1LDE4ZTUsMzZlNSwxMDhlNSwyMTZlNSw0MzJlNSw4NjRlNSwxNzI4ZTUsNjA0OGU1LDI1OTJlNiw3Nzc2ZTYsMzE1MzZlNl0sWGw9W1thYy5zZWNvbmQsMV0sW2FjLnNlY29uZCw1XSxbYWMuc2Vjb25kLDE1XSxbYWMuc2Vjb25kLDMwXSxbYWMubWludXRlLDFdLFthYy5taW51dGUsNV0sW2FjLm1pbnV0ZSwxNV0sW2FjLm1pbnV0ZSwzMF0sW2FjLmhvdXIsMV0sW2FjLmhvdXIsM10sW2FjLmhvdXIsNl0sW2FjLmhvdXIsMTJdLFthYy5kYXksMV0sW2FjLmRheSwyXSxbYWMud2VlaywxXSxbYWMubW9udGgsMV0sW2FjLm1vbnRoLDNdLFthYy55ZWFyLDFdXSwkbD1JbC5tdWx0aShbWyIuJUwiLGZ1bmN0aW9uKG4pe3JldHVybiBuLmdldE1pbGxpc2Vjb25kcygpfV0sWyI6JVMiLGZ1bmN0aW9uKG4pe3JldHVybiBuLmdldFNlY29uZHMoKX1dLFsiJUk6JU0iLGZ1bmN0aW9uKG4pe3JldHVybiBuLmdldE1pbnV0ZXMoKX1dLFsiJUkgJXAiLGZ1bmN0aW9uKG4pe3JldHVybiBuLmdldEhvdXJzKCl9XSxbIiVhICVkIixmdW5jdGlvbihuKXtyZXR1cm4gbi5nZXREYXkoKSYmMSE9bi5nZXREYXRlKCl9XSxbIiViICVkIixmdW5jdGlvbihuKXtyZXR1cm4gMSE9bi5nZXREYXRlKCl9XSxbIiVCIixmdW5jdGlvbihuKXtyZXR1cm4gbi5nZXRNb250aCgpfV0sWyIlWSIsTmVdXSksQmw9e3JhbmdlOmZ1bmN0aW9uKG4sdCxlKXtyZXR1cm4gdGEucmFuZ2UoTWF0aC5jZWlsKG4vZSkqZSwrdCxlKS5tYXAoS28pfSxmbG9vcjp5LGNlaWw6eX07WGwueWVhcj1hYy55ZWFyLGFjLnNjYWxlPWZ1bmN0aW9uKCl7cmV0dXJuIEdvKHRhLnNjYWxlLmxpbmVhcigpLFhsLCRsKX07dmFyIFdsPVhsLm1hcChmdW5jdGlvbihuKXtyZXR1cm5bblswXS51dGMsblsxXV19KSxKbD1ZbC5tdWx0aShbWyIuJUwiLGZ1bmN0aW9uKG4pe3JldHVybiBuLmdldFVUQ01pbGxpc2Vjb25kcygpfV0sWyI6JVMiLGZ1bmN0aW9uKG4pe3JldHVybiBuLmdldFVUQ1NlY29uZHMoKX1dLFsiJUk6JU0iLGZ1bmN0aW9uKG4pe3JldHVybiBuLmdldFVUQ01pbnV0ZXMoKX1dLFsiJUkgJXAiLGZ1bmN0aW9uKG4pe3JldHVybiBuLmdldFVUQ0hvdXJzKCl9XSxbIiVhICVkIixmdW5jdGlvbihuKXtyZXR1cm4gbi5nZXRVVENEYXkoKSYmMSE9bi5nZXRVVENEYXRlKCl9XSxbIiViICVkIixmdW5jdGlvbihuKXtyZXR1cm4gMSE9bi5nZXRVVENEYXRlKCl9XSxbIiVCIixmdW5jdGlvbihuKXtyZXR1cm4gbi5nZXRVVENNb250aCgpfV0sWyIlWSIsTmVdXSk7V2wueWVhcj1hYy55ZWFyLnV0YyxhYy5zY2FsZS51dGM9ZnVuY3Rpb24oKXtyZXR1cm4gR28odGEuc2NhbGUubGluZWFyKCksV2wsSmwpfSx0YS50ZXh0PUF0KGZ1bmN0aW9uKG4pe3JldHVybiBuLnJlc3BvbnNlVGV4dH0pLHRhLmpzb249ZnVuY3Rpb24obix0KXtyZXR1cm4gTnQobiwiYXBwbGljYXRpb24vanNvbiIsUW8sdCl9LHRhLmh0bWw9ZnVuY3Rpb24obix0KXtyZXR1cm4gTnQobiwidGV4dC9odG1sIixuYSx0KX0sdGEueG1sPUF0KGZ1bmN0aW9uKG4pe3JldHVybiBuLnJlc3BvbnNlWE1MfSksImZ1bmN0aW9uIj09dHlwZW9mIGRlZmluZSYmZGVmaW5lLmFtZD9kZWZpbmUodGEpOiJvYmplY3QiPT10eXBlb2YgbW9kdWxlJiZtb2R1bGUuZXhwb3J0cyYmKG1vZHVsZS5leHBvcnRzPXRhKSx0aGlzLmQzPXRhfSgpOw=="></script>
<link href="data:text/css;charset=utf-8,%2Eparcoords%20%3E%20svg%2C%20%2Eparcoords%20%3E%20canvas%20%7B%0Afont%3A%2014px%20sans%2Dserif%3B%0Aposition%3A%20absolute%3B%0A%7D%0A%2Eparcoords%20%3E%20canvas%20%7B%0Apointer%2Devents%3A%20none%3B%0A%7D%0A%2Eparcoords%20text%2Elabel%20%7B%0Acursor%3A%20default%3B%0A%7D%0A%2Eparcoords%20rect%2Ebackground%20%7B%0Afill%3A%20transparent%3B%0A%7D%0A%2Eparcoords%20rect%2Ebackground%3Ahover%20%7B%0Afill%3A%20rgba%28120%2C120%2C120%2C0%2E2%29%3B%0A%7D%0A%2Eparcoords%20%2Eresize%20rect%20%7B%0Afill%3A%20rgba%280%2C0%2C0%2C0%2E1%29%3B%0A%7D%0A%2Eparcoords%20rect%2Eextent%20%7B%0Afill%3A%20rgba%28255%2C255%2C255%2C0%2E25%29%3B%0Astroke%3A%20rgba%280%2C0%2C0%2C0%2E6%29%3B%0A%7D%0A%2Eparcoords%20%2Eaxis%20line%2C%20%2Eparcoords%20%2Eaxis%20path%20%7B%0Afill%3A%20none%3B%0Astroke%3A%20%23222%3B%0Ashape%2Drendering%3A%20crispEdges%3B%0A%7D%0A%2Eparcoords%20canvas%20%7B%0Aopacity%3A%201%3B%0A%2Dmoz%2Dtransition%3A%20opacity%200%2E3s%3B%0A%2Dwebkit%2Dtransition%3A%20opacity%200%2E3s%3B%0A%2Do%2Dtransition%3A%20opacity%200%2E3s%3B%0A%7D%0A%2Eparcoords%20canvas%2Efaded%20%7B%0Aopacity%3A%200%2E25%3B%0A%7D%0A%2Eparcoords%20%7B%0A%2Dwebkit%2Dtouch%2Dcallout%3A%20none%3B%0A%2Dwebkit%2Duser%2Dselect%3A%20none%3B%0A%2Dkhtml%2Duser%2Dselect%3A%20none%3B%0A%2Dmoz%2Duser%2Dselect%3A%20none%3B%0A%2Dms%2Duser%2Dselect%3A%20none%3B%0Auser%2Dselect%3A%20none%3B%0Abackground%2Dcolor%3A%20white%3B%0A%7D%0A" rel="stylesheet" />
<script src="data:application/x-javascript;base64,KGZ1bmN0aW9uICgpIHsNCiAgZDMuc3ZnLm11bHRpYnJ1c2ggPSBmdW5jdGlvbigpIHsNCg0KICAgIC8vIEZyb20gZDMvc2NhbGUvc2NhbGUuanMNCiAgICBmdW5jdGlvbiBkM19zY2FsZUV4dGVudChkb21haW4pIHsNCiAgICAgIHZhciBzdGFydCA9IGRvbWFpblswXSwgc3RvcCA9IGRvbWFpbltkb21haW4ubGVuZ3RoIC0gMV07DQogICAgICByZXR1cm4gc3RhcnQgPCBzdG9wID8gWyBzdGFydCwgc3RvcCBdIDogWyBzdG9wLCBzdGFydCBdOw0KICAgIH0NCiAgICBmdW5jdGlvbiBkM19zY2FsZVJhbmdlKHNjYWxlKSB7DQogICAgICByZXR1cm4gc2NhbGUucmFuZ2VFeHRlbnQgPyBzY2FsZS5yYW5nZUV4dGVudCgpIDogZDNfc2NhbGVFeHRlbnQoc2NhbGUucmFuZ2UoKSk7DQogICAgfQ0KDQogICAgLy8gRnJvbSBkMw0KICAgIHZhciBkM19kb2N1bWVudCA9IHRoaXMuZG9jdW1lbnQ7DQogICAgZnVuY3Rpb24gZDNfZG9jdW1lbnRFbGVtZW50KG5vZGUpIHsNCiAgICAgIHJldHVybiBub2RlICYmIChub2RlLm93bmVyRG9jdW1lbnQgfHwgbm9kZS5kb2N1bWVudCB8fCBub2RlKS5kb2N1bWVudEVsZW1lbnQ7DQogICAgfQ0KICAgIGZ1bmN0aW9uIGQzX3dpbmRvdyhub2RlKSB7DQogICAgICByZXR1cm4gbm9kZSAmJiAobm9kZS5vd25lckRvY3VtZW50ICYmIG5vZGUub3duZXJEb2N1bWVudC5kZWZhdWx0VmlldyB8fCBub2RlLmRvY3VtZW50ICYmIG5vZGUgfHwgbm9kZS5kZWZhdWx0Vmlldyk7DQogICAgfQ0KICAgIGlmIChkM19kb2N1bWVudCkgew0KICAgICAgdHJ5IHsNCiAgICAgICAgZDNfYXJyYXkoZDNfZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LmNoaWxkTm9kZXMpWzBdLm5vZGVUeXBlOw0KICAgICAgfSBjYXRjaCAoZSkgew0KICAgICAgICBkM19hcnJheSA9IGZ1bmN0aW9uKGxpc3QpIHsNCiAgICAgICAgICB2YXIgaSA9IGxpc3QubGVuZ3RoLCBhcnJheSA9IG5ldyBBcnJheShpKTsNCiAgICAgICAgICB3aGlsZSAoaS0tKSBhcnJheVtpXSA9IGxpc3RbaV07DQogICAgICAgICAgcmV0dXJuIGFycmF5Ow0KICAgICAgICB9Ow0KICAgICAgfQ0KICAgIH0NCg0KICAgIGZ1bmN0aW9uIGQzX2V2ZW50UHJldmVudERlZmF1bHQoKSB7DQogICAgICBkMy5ldmVudC5wcmV2ZW50RGVmYXVsdCgpOw0KICAgIH0NCg0KICAgIGZ1bmN0aW9uIGQzX3ZlbmRvclN5bWJvbChvYmplY3QsIG5hbWUpIHsNCiAgICAgIGlmIChuYW1lIGluIG9iamVjdCkgcmV0dXJuIG5hbWU7DQogICAgICBuYW1lID0gbmFtZS5jaGFyQXQoMCkudG9VcHBlckNhc2UoKSArIG5hbWUuc2xpY2UoMSk7DQogICAgICBmb3IgKHZhciBpID0gMCwgbiA9IGQzX3ZlbmRvclByZWZpeGVzLmxlbmd0aDsgaSA8IG47ICsraSkgew0KICAgICAgICB2YXIgcHJlZml4TmFtZSA9IGQzX3ZlbmRvclByZWZpeGVzW2ldICsgbmFtZTsNCiAgICAgICAgaWYgKHByZWZpeE5hbWUgaW4gb2JqZWN0KSByZXR1cm4gcHJlZml4TmFtZTsNCiAgICAgIH0NCiAgICB9DQogICAgdmFyIGQzX3ZlbmRvclByZWZpeGVzID0gWyAid2Via2l0IiwgIm1zIiwgIm1veiIsICJNb3oiLCAibyIsICJPIiBdOw0KDQogICAgdmFyIGQzX2V2ZW50X2RyYWdTZWxlY3QgPSAib25zZWxlY3RzdGFydCIgaW4gZG9jdW1lbnQgPyBudWxsIDogZDNfdmVuZG9yU3ltYm9sKGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5zdHlsZSwgInVzZXJTZWxlY3QiKSwgZDNfZXZlbnRfZHJhZ0lkID0gMDsNCiAgICBmdW5jdGlvbiBkM19ldmVudF9kcmFnU3VwcHJlc3Mobm9kZSkgew0KICAgICAgdmFyIG5hbWUgPSAiLmRyYWdzdXBwcmVzcy0iICsgKytkM19ldmVudF9kcmFnSWQsIGNsaWNrID0gImNsaWNrIiArIG5hbWUsIHcgPSBkMy5zZWxlY3QoZDNfd2luZG93KG5vZGUpKS5vbigidG91Y2htb3ZlIiArIG5hbWUsIGQzX2V2ZW50UHJldmVudERlZmF1bHQpLm9uKCJkcmFnc3RhcnQiICsgbmFtZSwgZDNfZXZlbnRQcmV2ZW50RGVmYXVsdCkub24oInNlbGVjdHN0YXJ0IiArIG5hbWUsIGQzX2V2ZW50UHJldmVudERlZmF1bHQpOw0KICAgICAgaWYgKGQzX2V2ZW50X2RyYWdTZWxlY3QgPT0gbnVsbCkgew0KICAgICAgICBkM19ldmVudF9kcmFnU2VsZWN0ID0gIm9uc2VsZWN0c3RhcnQiIGluIG5vZGUgPyBmYWxzZSA6IGQzX3ZlbmRvclN5bWJvbChub2RlLnN0eWxlLCAidXNlclNlbGVjdCIpOw0KICAgICAgfQ0KICAgICAgaWYgKGQzX2V2ZW50X2RyYWdTZWxlY3QpIHsNCiAgICAgICAgdmFyIHN0eWxlID0gZDNfZG9jdW1lbnRFbGVtZW50KG5vZGUpLnN0eWxlLCBzZWxlY3QgPSBzdHlsZVtkM19ldmVudF9kcmFnU2VsZWN0XTsNCiAgICAgICAgc3R5bGVbZDNfZXZlbnRfZHJhZ1NlbGVjdF0gPSAibm9uZSI7DQogICAgICB9DQogICAgICByZXR1cm4gZnVuY3Rpb24oc3VwcHJlc3NDbGljaykgew0KICAgICAgICB3Lm9uKG5hbWUsIG51bGwpOw0KICAgICAgICBpZiAoZDNfZXZlbnRfZHJhZ1NlbGVjdCkgc3R5bGVbZDNfZXZlbnRfZHJhZ1NlbGVjdF0gPSBzZWxlY3Q7DQogICAgICAgIGlmIChzdXBwcmVzc0NsaWNrKSB7DQogICAgICAgICAgdmFyIG9mZiA9IGZ1bmN0aW9uKCkgew0KICAgICAgICAgICAgdy5vbihjbGljaywgbnVsbCk7DQogICAgICAgICAgfTsNCiAgICAgICAgICB3Lm9uKGNsaWNrLCBmdW5jdGlvbigpIHsNCiAgICAgICAgICAgIGQzX2V2ZW50UHJldmVudERlZmF1bHQoKTsNCiAgICAgICAgICAgIG9mZigpOw0KICAgICAgICAgIH0sIHRydWUpOw0KICAgICAgICAgIHNldFRpbWVvdXQob2ZmLCAwKTsNCiAgICAgICAgfQ0KICAgICAgfTsNCiAgICB9DQoNCiAgICB2YXIgZXZlbnQgPSBkMy5kaXNwYXRjaCgiYnJ1c2hzdGFydCIsICJicnVzaCIsICJicnVzaGVuZCIpLA0KICAgICAgICBicnVzaEVsZW1lbnQsDQogICAgICAgIHggPSBudWxsLCAvLyB4LXNjYWxlLCBvcHRpb25hbA0KICAgICAgICB5ID0gbnVsbCwgLy8geS1zY2FsZSwgb3B0aW9uYWwNCiAgICAgICAgeEV4dGVudCA9IFtbMCwgMF1dLCAvLyBbeDAsIHgxXSBpbiBpbnRlZ2VyIHBpeGVscw0KICAgICAgICB5RXh0ZW50ID0gW1swLCAwXV0sIC8vIFt5MCwgeTFdIGluIGludGVnZXIgcGl4ZWxzDQogICAgICAgIHhFeHRlbnREb21haW4gPSBbXSwgLy8geC1leHRlbnQgaW4gZGF0YSBzcGFjZQ0KICAgICAgICB5RXh0ZW50RG9tYWluID0gW10sIC8vIHktZXh0ZW50IGluIGRhdGEgc3BhY2UNCiAgICAgICAgeENsYW1wID0gdHJ1ZSwgLy8gd2hldGhlciB0byBjbGFtcCB0aGUgeC1leHRlbnQgdG8gdGhlIHJhbmdlDQogICAgICAgIHlDbGFtcCA9IHRydWUsIC8vIHdoZXRoZXIgdG8gY2xhbXAgdGhlIHktZXh0ZW50IHRvIHRoZSByYW5nZQ0KICAgICAgICByZXNpemVzID0gZDNfc3ZnX2JydXNoUmVzaXplc1swXSwNCiAgICAgICAgcmVzaXplQWRhcHRpb24gPSBmdW5jdGlvbiAoKSB7fSwgLy8gRnVuY3Rpb24gdG8gJ2NhbGwnIG9uIG5ldyByZXNpemUgc2VsZWN0aW9uDQogICAgICAgIGV4dGVudEFkYXB0aW9uID0gZnVuY3Rpb24gKCkge307IC8vIEZ1bmN0aW9uIHRvICdjYWxsJyBvbiBuZXcgZXh0ZW50IHNlbGVjdGlvbg0KDQogICAgZXZlbnQub2YgPSBmdW5jdGlvbih0aGl6LCBhcmd1bWVudHopIHsNCiAgICAgIHJldHVybiBmdW5jdGlvbihlMSkgew0KICAgICAgICB0cnkgew0KICAgICAgICAgIHZhciBlMCA9DQogICAgICAgICAgZTEuc291cmNlRXZlbnQgPSBkMy5ldmVudDsNCiAgICAgICAgICBlMS50YXJnZXQgPSBicnVzaDsNCiAgICAgICAgICBkMy5ldmVudCA9IGUxOw0KICAgICAgICAgIGV2ZW50W2UxLnR5cGVdLmFwcGx5KHRoaXosIGFyZ3VtZW50eik7DQogICAgICAgIH0gZmluYWxseSB7DQogICAgICAgICAgZDMuZXZlbnQgPSBlMDsNCiAgICAgICAgfQ0KICAgICAgfTsNCiAgICB9Ow0KDQogICAgZnVuY3Rpb24gYnJ1c2goZykgew0KICAgICAgZy5lYWNoKGZ1bmN0aW9uKCkgew0KDQogICAgICAgIC8vIFByZXBhcmUgdGhlIGJydXNoIGNvbnRhaW5lciBmb3IgZXZlbnRzLg0KICAgICAgICB2YXIgZyA9IGQzLnNlbGVjdCh0aGlzKQ0KICAgICAgICAgICAgLnN0eWxlKCJwb2ludGVyLWV2ZW50cyIsICJhbGwiKQ0KICAgICAgICAgICAgLnN0eWxlKCItd2Via2l0LXRhcC1oaWdobGlnaHQtY29sb3IiLCAicmdiYSgwLDAsMCwwKSIpDQogICAgICAgICAgICAub24oIm1vdXNlZG93bi5icnVzaCIsIGJydXNoc3RhcnQpDQogICAgICAgICAgICAub24oInRvdWNoc3RhcnQuYnJ1c2giLCBicnVzaHN0YXJ0KTsNCg0KICAgICAgICBicnVzaEVsZW1lbnQgPSBnOw0KDQogICAgICAgIC8vIEFuIGludmlzaWJsZSwgbW91c2VhYmxlIGFyZWEgZm9yIHN0YXJ0aW5nIGEgbmV3IGJydXNoLg0KICAgICAgICB2YXIgYmFja2dyb3VuZCA9IGcuc2VsZWN0QWxsKCIuYmFja2dyb3VuZCIpDQogICAgICAgICAgICAuZGF0YShbMF0pOw0KDQogICAgICAgIGJhY2tncm91bmQuZW50ZXIoKS5hcHBlbmQoInJlY3QiKQ0KICAgICAgICAgICAgLmF0dHIoImNsYXNzIiwgImJhY2tncm91bmQiKQ0KICAgICAgICAgICAgLnN0eWxlKCJ2aXNpYmlsaXR5IiwgImhpZGRlbiIpDQogICAgICAgICAgICAuc3R5bGUoImN1cnNvciIsICJjcm9zc2hhaXIiKTsNCg0KICAgICAgICBkcmF3RXh0ZW50cyhnKTsNCg0KICAgICAgICAvLyBXaGVuIGNhbGxlZCBvbiBhIHRyYW5zaXRpb24sIHVzZSBhIHRyYW5zaXRpb24gdG8gdXBkYXRlLg0KICAgICAgICB2YXIgZ1VwZGF0ZSA9IGQzLnRyYW5zaXRpb24oZyksDQogICAgICAgICAgICBiYWNrZ3JvdW5kVXBkYXRlID0gZDMudHJhbnNpdGlvbihiYWNrZ3JvdW5kKSwNCiAgICAgICAgICAgIHJhbmdlOw0KDQogICAgICAgIC8vIEluaXRpYWxpemUgdGhlIGJhY2tncm91bmQgdG8gZmlsbCB0aGUgZGVmaW5lZCByYW5nZS4NCiAgICAgICAgLy8gSWYgdGhlIHJhbmdlIGlzbid0IGRlZmluZWQsIHlvdSBjYW4gcG9zdC1wcm9jZXNzLg0KICAgICAgICBpZiAoeCkgew0KICAgICAgICAgIHJhbmdlID0gZDNfc2NhbGVSYW5nZSh4KTsNCiAgICAgICAgICBiYWNrZ3JvdW5kVXBkYXRlLmF0dHIoIngiLCByYW5nZVswXSkuYXR0cigid2lkdGgiLCByYW5nZVsxXSAtIHJhbmdlWzBdKTsNCiAgICAgICAgICByZWRyYXdYKGdVcGRhdGUpOw0KICAgICAgICB9DQogICAgICAgIGlmICh5KSB7DQogICAgICAgICAgcmFuZ2UgPSBkM19zY2FsZVJhbmdlKHkpOw0KICAgICAgICAgIGJhY2tncm91bmRVcGRhdGUuYXR0cigieSIsIHJhbmdlWzBdKS5hdHRyKCJoZWlnaHQiLCByYW5nZVsxXSAtIHJhbmdlWzBdKTsNCiAgICAgICAgICByZWRyYXdZKGdVcGRhdGUpOw0KICAgICAgICB9DQogICAgICAgIHJlZHJhdyhnVXBkYXRlKTsNCiAgICAgIH0pOw0KICAgIH0NCg0KICAgIGZ1bmN0aW9uIGRyYXdFeHRlbnRzKGcpIHsNCiAgICAgIHZhciBleCA9IHhFeHRlbnQubGVuZ3RoID4geUV4dGVudC5sZW5ndGggPyB4RXh0ZW50IDogeUV4dGVudCwNCiAgICAgICAgICBpID0gZXgubGVuZ3RoDQogICAgICAgICAgZXh0ZW50QXJyID0gZXgubWFwKGZ1bmN0aW9uKGQsaSkgeyByZXR1cm4gaTsgfSksDQogICAgICAgICAgZXh0ZW50UmVzaXplcyA9IGQzLm1lcmdlKGV4Lm1hcChmdW5jdGlvbihkLGkpIHsgcmV0dXJuIHJlc2l6ZXMubWFwKGZ1bmN0aW9uKHIpIHsgcmV0dXJuIFtyLCBpXTsgfSk7IH0pKTsNCg0KICAgICAgaWYoIWcpIGcgPSBicnVzaEVsZW1lbnQ7DQoNCiAgICAgIC8vIFRoZSB2aXNpYmxlIGJydXNoIGV4dGVudDsgc3R5bGUgdGhpcyBhcyB5b3UgbGlrZSENCiAgICAgIHZhciBleHRlbnQgPSBnLnNlbGVjdEFsbCgiLmV4dGVudCIpDQogICAgICAgICAgLmRhdGEoZXh0ZW50QXJyLCBmdW5jdGlvbiAoZCkgeyByZXR1cm4gZDsgfSk7DQoNCiAgICAgIGV4dGVudC5leGl0KCkucmVtb3ZlKCk7DQoNCiAgICAgIGV4dGVudC5lbnRlcigpLmFwcGVuZCgicmVjdCIpDQogICAgICAgICAgLmF0dHIoImNsYXNzIiwgImV4dGVudCIpDQogICAgICAgICAgLnN0eWxlKCJjdXJzb3IiLCAibW92ZSIpDQogICAgICAgICAgLmNhbGwoZXh0ZW50QWRhcHRpb24pOw0KDQogICAgICAvLyBNb3JlIGludmlzaWJsZSByZWN0cyBmb3IgcmVzaXppbmcgdGhlIGV4dGVudC4NCiAgICAgIHZhciByZXNpemUgPSBnLnNlbGVjdEFsbCgiLnJlc2l6ZSIpDQogICAgICAgICAgLmRhdGEoZXh0ZW50UmVzaXplcywgZnVuY3Rpb24gKGQpIHsgcmV0dXJuIGRbMF0gKyBkWzFdOyB9KTsNCg0KICAgICAgLy8gUmVtb3ZlIGFueSBzdXBlcmZsdW91cyByZXNpemVycy4NCiAgICAgIHJlc2l6ZS5leGl0KCkucmVtb3ZlKCk7DQoNCiAgICAgIHZhciBuZXdSZXNpemUgPSByZXNpemUuZW50ZXIoKS5hcHBlbmQoImciKQ0KICAgICAgICAgIC5hdHRyKCJjbGFzcyIsIGZ1bmN0aW9uKGQpIHsgcmV0dXJuICJyZXNpemUgIiArIGRbMF07IH0pDQogICAgICAgICAgLnN0eWxlKCJjdXJzb3IiLCBmdW5jdGlvbihkKSB7IHJldHVybiBkM19zdmdfYnJ1c2hDdXJzb3JbZFswXV07IH0pOw0KDQogICAgICBuZXdSZXNpemUuYXBwZW5kKCJyZWN0IikNCiAgICAgICAgICAuYXR0cigieCIsIGZ1bmN0aW9uKGQpIHsgcmV0dXJuIC9bZXddJC8udGVzdChkWzBdKSA/IC0zIDogbnVsbDsgfSkNCiAgICAgICAgICAuYXR0cigieSIsIGZ1bmN0aW9uKGQpIHsgcmV0dXJuIC9eW25zXS8udGVzdChkWzBdKSA/IC0zIDogbnVsbDsgfSkNCiAgICAgICAgICAuYXR0cigid2lkdGgiLCA2KQ0KICAgICAgICAgIC5hdHRyKCJoZWlnaHQiLCA2KQ0KICAgICAgICAgIC5zdHlsZSgidmlzaWJpbGl0eSIsICJoaWRkZW4iKTsNCg0KICAgICAgbmV3UmVzaXplLmNhbGwocmVzaXplQWRhcHRpb24pOw0KDQogICAgICAvLyBTaG93IG9yIGhpZGUgdGhlIHJlc2l6ZXJzLg0KICAgICAgcmVzaXplLnN0eWxlKCJkaXNwbGF5IiwgZnVuY3Rpb24gKGQpIHsgcmV0dXJuIGJydXNoLmVtcHR5KGRbMV0pID8gIm5vbmUiIDogbnVsbDsgfSk7DQogICAgfQ0KDQogICAgYnJ1c2guZXZlbnQgPSBmdW5jdGlvbihnKSB7DQogICAgICBnLmVhY2goZnVuY3Rpb24oKSB7DQogICAgICAgIHZhciBldmVudF8gPSBldmVudC5vZih0aGlzLCBhcmd1bWVudHMpLA0KICAgICAgICAgICAgZXh0ZW50MSA9IHt4OiB4RXh0ZW50LCB5OiB5RXh0ZW50LCBpOiB4RXh0ZW50RG9tYWluLCBqOiB5RXh0ZW50RG9tYWlufSwNCiAgICAgICAgICAgIGV4dGVudDAgPSB0aGlzLl9fY2hhcnRfXyB8fCBleHRlbnQxOw0KICAgICAgICB0aGlzLl9fY2hhcnRfXyA9IGV4dGVudDE7DQogICAgICAgIGlmIChkM190cmFuc2l0aW9uSW5oZXJpdElkKSB7DQogICAgICAgICAgZDMuc2VsZWN0KHRoaXMpLnRyYW5zaXRpb24oKQ0KICAgICAgICAgICAgICAuZWFjaCgic3RhcnQuYnJ1c2giLCBmdW5jdGlvbigpIHsNCiAgICAgICAgICAgICAgICB4RXh0ZW50RG9tYWluID0gZXh0ZW50MC5pOyAvLyBwcmUtdHJhbnNpdGlvbiBzdGF0ZQ0KICAgICAgICAgICAgICAgIHlFeHRlbnREb21haW4gPSBleHRlbnQwLmo7DQogICAgICAgICAgICAgICAgeEV4dGVudCA9IGV4dGVudDAueDsNCiAgICAgICAgICAgICAgICB5RXh0ZW50ID0gZXh0ZW50MC55Ow0KICAgICAgICAgICAgICAgIGV2ZW50Xyh7dHlwZTogImJydXNoc3RhcnQifSk7DQogICAgICAgICAgICAgIH0pDQogICAgICAgICAgICAgIC50d2VlbigiYnJ1c2g6YnJ1c2giLCBmdW5jdGlvbigpIHsNCiAgICAgICAgICAgICAgICAvLyBUT0RPOiB0cmFuc2l0aW9ucyBmb3IgYWxsIGV4dGVudHMNCiAgICAgICAgICAgICAgICB2YXIgeGkgPSBkM19pbnRlcnBvbGF0ZUFycmF5KHhFeHRlbnRbMF0sIGV4dGVudDEueFswXSksDQogICAgICAgICAgICAgICAgICAgIHlpID0gZDNfaW50ZXJwb2xhdGVBcnJheSh5RXh0ZW50WzBdLCBleHRlbnQxLnlbMF0pOw0KICAgICAgICAgICAgICAgIHhFeHRlbnREb21haW5bMF0gPSB5RXh0ZW50RG9tYWluWzBdID0gbnVsbDsgLy8gdHJhbnNpdGlvbiBzdGF0ZQ0KICAgICAgICAgICAgICAgIHJldHVybiBmdW5jdGlvbih0KSB7DQogICAgICAgICAgICAgICAgICB4RXh0ZW50WzBdID0gZXh0ZW50MS54WzBdID0geGkodCk7DQogICAgICAgICAgICAgICAgICB5RXh0ZW50WzBdID0gZXh0ZW50MS55WzBdID0geWkodCk7DQogICAgICAgICAgICAgICAgICBldmVudF8oe3R5cGU6ICJicnVzaCIsIG1vZGU6ICJyZXNpemUifSk7DQogICAgICAgICAgICAgICAgfTsNCiAgICAgICAgICAgICAgfSkNCiAgICAgICAgICAgICAgLmVhY2goImVuZC5icnVzaCIsIGZ1bmN0aW9uKCkgew0KICAgICAgICAgICAgICAgIHhFeHRlbnREb21haW4gPSBleHRlbnQxLmk7IC8vIHBvc3QtdHJhbnNpdGlvbiBzdGF0ZQ0KICAgICAgICAgICAgICAgIHlFeHRlbnREb21haW4gPSBleHRlbnQxLmo7DQogICAgICAgICAgICAgICAgZXZlbnRfKHt0eXBlOiAiYnJ1c2giLCBtb2RlOiAicmVzaXplIn0pOw0KICAgICAgICAgICAgICAgIGV2ZW50Xyh7dHlwZTogImJydXNoZW5kIn0pOw0KICAgICAgICAgICAgICB9KTsNCiAgICAgICAgfSBlbHNlIHsNCiAgICAgICAgICBldmVudF8oe3R5cGU6ICJicnVzaHN0YXJ0In0pOw0KICAgICAgICAgIGV2ZW50Xyh7dHlwZTogImJydXNoIiwgbW9kZTogInJlc2l6ZSJ9KTsNCiAgICAgICAgICBldmVudF8oe3R5cGU6ICJicnVzaGVuZCJ9KTsNCiAgICAgICAgfQ0KICAgICAgfSk7DQogICAgfTsNCg0KICAgIGZ1bmN0aW9uIHJlZHJhdyhnKSB7DQogICAgICBnLnNlbGVjdEFsbCgiLnJlc2l6ZSIpLmF0dHIoInRyYW5zZm9ybSIsIGZ1bmN0aW9uKGQpIHsNCiAgICAgICAgcmV0dXJuICJ0cmFuc2xhdGUoIiArIHhFeHRlbnRbZFsxXV1bKy9lJC8udGVzdChkWzBdKV0gKyAiLCIgKyB5RXh0ZW50W2RbMV1dWysvXnMvLnRlc3QoZFswXSldICsgIikiOw0KICAgICAgfSk7DQogICAgfQ0KDQogICAgZnVuY3Rpb24gcmVkcmF3WChnKSB7DQogICAgICBnLnNlbGVjdEFsbCgiLmV4dGVudCIpLmF0dHIoIngiLCBmdW5jdGlvbiAoZCkgeyByZXR1cm4geEV4dGVudFtkXVswXTsgfSk7DQogICAgICBnLnNlbGVjdEFsbCgiLmV4dGVudCIpLmF0dHIoIndpZHRoIiwgZnVuY3Rpb24oZCkgeyByZXR1cm4geEV4dGVudFtkXVsxXSAtIHhFeHRlbnRbZF1bMF07IH0pOw0KICAgIH0NCg0KICAgIGZ1bmN0aW9uIHJlZHJhd1koZykgew0KICAgICAgZy5zZWxlY3RBbGwoIi5leHRlbnQiKS5hdHRyKCJ5IiwgZnVuY3Rpb24gKGQpIHsgcmV0dXJuIHlFeHRlbnRbZF1bMF07IH0pOw0KICAgICAgZy5zZWxlY3RBbGwoIi5leHRlbnQiKS5hdHRyKCJoZWlnaHQiLCBmdW5jdGlvbiAoZCkgeyByZXR1cm4geUV4dGVudFtkXVsxXSAtIHlFeHRlbnRbZF1bMF07IH0pOw0KICAgIH0NCg0KICAgIGZ1bmN0aW9uIGJydXNoc3RhcnQoKSB7DQogICAgICB2YXIgdGFyZ2V0ID0gdGhpcywNCiAgICAgICAgICBldmVudFRhcmdldCA9IGQzLnNlbGVjdChkMy5ldmVudC50YXJnZXQpLA0KICAgICAgICAgIGV2ZW50XyA9IGV2ZW50Lm9mKHRhcmdldCwgYXJndW1lbnRzKSwNCiAgICAgICAgICBnID0gZDMuc2VsZWN0KHRhcmdldCksDQogICAgICAgICAgcmVzaXppbmcgPSBldmVudFRhcmdldC5kYXR1bSgpWzBdLA0KICAgICAgICAgIHJlc2l6aW5nWCA9ICEvXihufHMpJC8udGVzdChyZXNpemluZykgJiYgeCwNCiAgICAgICAgICByZXNpemluZ1kgPSAhL14oZXx3KSQvLnRlc3QocmVzaXppbmcpICYmIHksDQogICAgICAgICAgZHJhZ2dpbmcgPSBldmVudFRhcmdldC5jbGFzc2VkKCJleHRlbnQiKSwNCiAgICAgICAgICBkcmFnUmVzdG9yZSA9IGQzX2V2ZW50X2RyYWdTdXBwcmVzcyh0YXJnZXQpLA0KICAgICAgICAgIGNlbnRlciwNCiAgICAgICAgICBvcmlnaW4gPSBkMy5tb3VzZSh0YXJnZXQpLA0KICAgICAgICAgIG9mZnNldCwNCiAgICAgICAgICBpOw0KDQogICAgICB2YXIgdyA9IGQzLnNlbGVjdCh3aW5kb3cpDQogICAgICAgICAgLm9uKCJrZXlkb3duLmJydXNoIiwga2V5ZG93bikNCiAgICAgICAgICAub24oImtleXVwLmJydXNoIiwga2V5dXApOw0KDQogICAgICBpZiAoZDMuZXZlbnQuY2hhbmdlZFRvdWNoZXMpIHsNCiAgICAgICAgdy5vbigidG91Y2htb3ZlLmJydXNoIiwgYnJ1c2htb3ZlKS5vbigidG91Y2hlbmQuYnJ1c2giLCBicnVzaGVuZCk7DQogICAgICB9IGVsc2Ugew0KICAgICAgICB3Lm9uKCJtb3VzZW1vdmUuYnJ1c2giLCBicnVzaG1vdmUpLm9uKCJtb3VzZXVwLmJydXNoIiwgYnJ1c2hlbmQpOw0KICAgICAgfQ0KDQogICAgICAvLyBJbnRlcnJ1cHQgdGhlIHRyYW5zaXRpb24sIGlmIGFueS4NCiAgICAgIGcuaW50ZXJydXB0KCkuc2VsZWN0QWxsKCIqIikuaW50ZXJydXB0KCk7DQoNCiAgICAgIC8vIElmIHRoZSBleHRlbnQgd2FzIGNsaWNrZWQgb24sIGRyYWcgcmF0aGVyIHRoYW4gYnJ1c2g7DQogICAgICAvLyBzdG9yZSB0aGUgcG9pbnQgYmV0d2VlbiB0aGUgbW91c2UgYW5kIGV4dGVudCBvcmlnaW4gaW5zdGVhZC4NCiAgICAgIGlmIChkcmFnZ2luZykgew0KICAgICAgICBpID0gZXZlbnRUYXJnZXQuZGF0dW0oKTsNCiAgICAgICAgb3JpZ2luWzBdID0geEV4dGVudFtpXVswXSAtIG9yaWdpblswXTsNCiAgICAgICAgb3JpZ2luWzFdID0geUV4dGVudFtpXVswXSAtIG9yaWdpblsxXTsNCiAgICAgIH0NCg0KICAgICAgLy8gSWYgYSByZXNpemVyIHdhcyBjbGlja2VkIG9uLCByZWNvcmQgd2hpY2ggc2lkZSBpcyB0byBiZSByZXNpemVkLg0KICAgICAgLy8gQWxzbywgc2V0IHRoZSBvcmlnaW4gdG8gdGhlIG9wcG9zaXRlIHNpZGUuDQogICAgICBlbHNlIGlmIChyZXNpemluZykgew0KICAgICAgICB2YXIgZXggPSArL3ckLy50ZXN0KHJlc2l6aW5nKSwNCiAgICAgICAgICAgIGV5ID0gKy9ebi8udGVzdChyZXNpemluZyk7DQoNCiAgICAgICAgaSA9IGV2ZW50VGFyZ2V0LmRhdHVtKClbMV07DQogICAgICAgIG9mZnNldCA9IFt4RXh0ZW50W2ldWzEgLSBleF0gLSBvcmlnaW5bMF0sIHlFeHRlbnRbaV1bMSAtIGV5XSAtIG9yaWdpblsxXV07DQogICAgICAgIG9yaWdpblswXSA9IHhFeHRlbnRbaV1bZXhdOw0KICAgICAgICBvcmlnaW5bMV0gPSB5RXh0ZW50W2ldW2V5XTsNCiAgICAgIH0NCg0KICAgICAgZWxzZSB7DQogICAgICAgIGkgPSB4RXh0ZW50Lmxlbmd0aCAtIDE7IC8vIEZpZ3VyZSBvdXQgdGhlIGNvdW50IG9mIHRoZSBuZXcgZXh0ZW50Lg0KICAgICAgICB4RXh0ZW50LnB1c2goWzAsMF0pOw0KICAgICAgICB5RXh0ZW50LnB1c2goWzAsMF0pOw0KDQogICAgICAgIC8vIElmIHRoZSBBTFQga2V5IGlzIGRvd24gd2hlbiBzdGFydGluZyBhIGJydXNoLCB0aGUgY2VudGVyIGlzIGF0IHRoZSBtb3VzZS4NCiAgICAgICAgaWYgKGQzLmV2ZW50LmFsdEtleSkgY2VudGVyID0gb3JpZ2luLnNsaWNlKCk7DQogICAgICB9DQoNCiAgICAgIC8vIFByb3BhZ2F0ZSB0aGUgYWN0aXZlIGN1cnNvciB0byB0aGUgYm9keSBmb3IgdGhlIGRyYWcgZHVyYXRpb24uDQogICAgICBnLnN0eWxlKCJwb2ludGVyLWV2ZW50cyIsICJub25lIik7DQogICAgICBkMy5zZWxlY3QoImJvZHkiKS5zdHlsZSgiY3Vyc29yIiwgZXZlbnRUYXJnZXQuc3R5bGUoImN1cnNvciIpKTsNCg0KICAgICAgLy8gU2hvdyByZXNpemVycyBhcyBsb25nIGFzIHdlJ3JlIG5vdCBkcmFnZ2luZyBvciByZXNpemluZy4NCiAgICAgIGlmKCFkcmFnZ2luZyAmJiAhcmVzaXppbmcpIGcuc2VsZWN0QWxsKCIucmVzaXplIikuc3R5bGUoImRpc3BsYXkiLCBudWxsKQ0KDQogICAgICAvLyBOb3RpZnkgbGlzdGVuZXJzLg0KICAgICAgZXZlbnRfKHt0eXBlOiAiYnJ1c2hzdGFydCJ9KTsNCiAgICAgIGJydXNobW92ZSgpOw0KDQogICAgICBmdW5jdGlvbiBrZXlkb3duKCkgew0KICAgICAgICBpZiAoZDMuZXZlbnQua2V5Q29kZSA9PSAzMikgew0KICAgICAgICAgIGlmICghZHJhZ2dpbmcpIHsNCiAgICAgICAgICAgIGNlbnRlciA9IG51bGw7DQogICAgICAgICAgICBvcmlnaW5bMF0gLT0geEV4dGVudFtpXVsxXTsNCiAgICAgICAgICAgIG9yaWdpblsxXSAtPSB5RXh0ZW50W2ldWzFdOw0KICAgICAgICAgICAgZHJhZ2dpbmcgPSAyOw0KICAgICAgICAgIH0NCiAgICAgICAgICBkMy5ldmVudC5wcmV2ZW50RGVmYXVsdCgpOw0KICAgICAgICB9DQogICAgICB9DQoNCiAgICAgIGZ1bmN0aW9uIGtleXVwKCkgew0KICAgICAgICBpZiAoZDMuZXZlbnQua2V5Q29kZSA9PSAzMiAmJiBkcmFnZ2luZyA9PSAyKSB7DQogICAgICAgICAgb3JpZ2luWzBdICs9IHhFeHRlbnRbaV1bMV07DQogICAgICAgICAgb3JpZ2luWzFdICs9IHlFeHRlbnRbaV1bMV07DQogICAgICAgICAgZHJhZ2dpbmcgPSAwOw0KICAgICAgICAgIGQzLmV2ZW50LnByZXZlbnREZWZhdWx0KCk7DQogICAgICAgIH0NCiAgICAgIH0NCg0KICAgICAgZnVuY3Rpb24gYnJ1c2htb3ZlKCkgew0KICAgICAgICB2YXIgcG9pbnQgPSBkMy5tb3VzZSh0YXJnZXQpLA0KICAgICAgICAgICAgbW92ZWQgPSBmYWxzZTsNCg0KICAgICAgICAvLyBQcmVzZXJ2ZSB0aGUgb2Zmc2V0IGZvciB0aGljayByZXNpemVycy4NCiAgICAgICAgaWYgKG9mZnNldCkgew0KICAgICAgICAgIHBvaW50WzBdICs9IG9mZnNldFswXTsNCiAgICAgICAgICBwb2ludFsxXSArPSBvZmZzZXRbMV07DQogICAgICAgIH0NCg0KICAgICAgICBpZiAoIWRyYWdnaW5nKSB7DQoNCiAgICAgICAgICAvLyBJZiBuZWVkZWQsIGRldGVybWluZSB0aGUgY2VudGVyIGZyb20gdGhlIGN1cnJlbnQgZXh0ZW50Lg0KICAgICAgICAgIGlmIChkMy5ldmVudC5hbHRLZXkpIHsNCiAgICAgICAgICAgIGlmICghY2VudGVyKSBjZW50ZXIgPSBbKHhFeHRlbnRbaV1bMF0gKyB4RXh0ZW50W2ldWzFdKSAvIDIsICh5RXh0ZW50W2ldWzBdICsgeUV4dGVudFtpXVsxXSkgLyAyXTsNCg0KICAgICAgICAgICAgLy8gVXBkYXRlIHRoZSBvcmlnaW4sIGZvciB3aGVuIHRoZSBBTFQga2V5IGlzIHJlbGVhc2VkLg0KICAgICAgICAgICAgb3JpZ2luWzBdID0geEV4dGVudFtpXVsrKHBvaW50WzBdIDwgY2VudGVyWzBdKV07DQogICAgICAgICAgICBvcmlnaW5bMV0gPSB5RXh0ZW50W2ldWysocG9pbnRbMV0gPCBjZW50ZXJbMV0pXTsNCiAgICAgICAgICB9DQoNCiAgICAgICAgICAvLyBXaGVuIHRoZSBBTFQga2V5IGlzIHJlbGVhc2VkLCB3ZSBjbGVhciB0aGUgY2VudGVyLg0KICAgICAgICAgIGVsc2UgY2VudGVyID0gbnVsbDsNCiAgICAgICAgfQ0KDQogICAgICAgIC8vIFVwZGF0ZSB0aGUgYnJ1c2ggZXh0ZW50IGZvciBlYWNoIGRpbWVuc2lvbi4NCiAgICAgICAgaWYgKHJlc2l6aW5nWCAmJiBtb3ZlMShwb2ludCwgeCwgMCkpIHsNCiAgICAgICAgICByZWRyYXdYKGcsIGkpOw0KICAgICAgICAgIG1vdmVkID0gdHJ1ZTsNCiAgICAgICAgfQ0KICAgICAgICBpZiAocmVzaXppbmdZICYmIG1vdmUxKHBvaW50LCB5LCAxKSkgew0KICAgICAgICAgIHJlZHJhd1koZywgaSk7DQogICAgICAgICAgbW92ZWQgPSB0cnVlOw0KICAgICAgICB9DQoNCiAgICAgICAgLy8gRmluYWwgcmVkcmF3IGFuZCBub3RpZnkgbGlzdGVuZXJzLg0KICAgICAgICBpZiAobW92ZWQpIHsNCiAgICAgICAgICByZWRyYXcoZyk7DQogICAgICAgICAgZXZlbnRfKHt0eXBlOiAiYnJ1c2giLCBtb2RlOiBkcmFnZ2luZyA/ICJtb3ZlIiA6ICJyZXNpemUifSk7DQogICAgICAgIH0NCiAgICAgIH0NCg0KICAgICAgZnVuY3Rpb24gbW92ZTEocG9pbnQsIHNjYWxlLCBqKSB7DQogICAgICAgIHZhciByYW5nZSA9IGQzX3NjYWxlUmFuZ2Uoc2NhbGUpLA0KICAgICAgICAgICAgcjAgPSByYW5nZVswXSwNCiAgICAgICAgICAgIHIxID0gcmFuZ2VbMV0sDQogICAgICAgICAgICBwb3NpdGlvbiA9IG9yaWdpbltqXSwNCiAgICAgICAgICAgIGV4dGVudCA9IGogPyB5RXh0ZW50W2ldIDogeEV4dGVudFtpXSwNCiAgICAgICAgICAgIHNpemUgPSBleHRlbnRbMV0gLSBleHRlbnRbMF0sDQogICAgICAgICAgICBtaW4sDQogICAgICAgICAgICBtYXg7DQoNCiAgICAgICAgLy8gV2hlbiBkcmFnZ2luZywgcmVkdWNlIHRoZSByYW5nZSBieSB0aGUgZXh0ZW50IHNpemUgYW5kIHBvc2l0aW9uLg0KICAgICAgICBpZiAoZHJhZ2dpbmcpIHsNCiAgICAgICAgICByMCAtPSBwb3NpdGlvbjsNCiAgICAgICAgICByMSAtPSBzaXplICsgcG9zaXRpb247DQogICAgICAgIH0NCg0KICAgICAgICAvLyBDbGFtcCB0aGUgcG9pbnQgKHVubGVzcyBjbGFtcCBzZXQgdG8gZmFsc2UpIHNvIHRoYXQgdGhlIGV4dGVudCBmaXRzIHdpdGhpbiB0aGUgcmFuZ2UgZXh0ZW50Lg0KICAgICAgICBtaW4gPSAoaiA/IHlDbGFtcCA6IHhDbGFtcCkgPyBNYXRoLm1heChyMCwgTWF0aC5taW4ocjEsIHBvaW50W2pdKSkgOiBwb2ludFtqXTsNCg0KICAgICAgICAvLyBDb21wdXRlIHRoZSBuZXcgZXh0ZW50IGJvdW5kcy4NCiAgICAgICAgaWYgKGRyYWdnaW5nKSB7DQogICAgICAgICAgbWF4ID0gKG1pbiArPSBwb3NpdGlvbikgKyBzaXplOw0KICAgICAgICB9IGVsc2Ugew0KDQogICAgICAgICAgLy8gSWYgdGhlIEFMVCBrZXkgaXMgcHJlc3NlZCwgdGhlbiBwcmVzZXJ2ZSB0aGUgY2VudGVyIG9mIHRoZSBleHRlbnQuDQogICAgICAgICAgaWYgKGNlbnRlcikgcG9zaXRpb24gPSBNYXRoLm1heChyMCwgTWF0aC5taW4ocjEsIDIgKiBjZW50ZXJbal0gLSBtaW4pKTsNCg0KICAgICAgICAgIC8vIENvbXB1dGUgdGhlIG1pbiBhbmQgbWF4IG9mIHRoZSBwb3NpdGlvbiBhbmQgcG9pbnQuDQogICAgICAgICAgaWYgKHBvc2l0aW9uIDwgbWluKSB7DQogICAgICAgICAgICBtYXggPSBtaW47DQogICAgICAgICAgICBtaW4gPSBwb3NpdGlvbjsNCiAgICAgICAgICB9IGVsc2Ugew0KICAgICAgICAgICAgbWF4ID0gcG9zaXRpb247DQogICAgICAgICAgfQ0KICAgICAgICB9DQoNCiAgICAgICAgLy8gVXBkYXRlIHRoZSBzdG9yZWQgYm91bmRzLg0KICAgICAgICBpZiAoZXh0ZW50WzBdICE9IG1pbiB8fCBleHRlbnRbMV0gIT0gbWF4KSB7DQogICAgICAgICAgaWYgKGopIHlFeHRlbnREb21haW5baV0gPSBudWxsOw0KICAgICAgICAgIGVsc2UgeEV4dGVudERvbWFpbltpXSA9IG51bGw7DQogICAgICAgICAgZXh0ZW50WzBdID0gbWluOw0KICAgICAgICAgIGV4dGVudFsxXSA9IG1heDsNCiAgICAgICAgICByZXR1cm4gdHJ1ZTsNCiAgICAgICAgfQ0KICAgICAgfQ0KDQogICAgICBmdW5jdGlvbiBicnVzaGVuZCgpIHsNCiAgICAgICAgYnJ1c2htb3ZlKCk7DQoNCiAgICAgICAgLy8gSWYgdGhlIGN1cnJlbnQgZXh0ZW50IGlzIGVtcHR5LCBjbGVhciBldmVyeXRoaW5nLg0KICAgICAgICBpZih4ICYmIHhFeHRlbnRbaV1bMF0gPT0geEV4dGVudFtpXVsxXSB8fA0KICAgICAgICAgICB5ICYmIHlFeHRlbnRbaV1bMF0gPT0geUV4dGVudFtpXVsxXSkgew0KICAgICAgICAgIGJydXNoLmNsZWFyKCk7DQogICAgICAgIH0NCg0KICAgICAgICAvLyByZXNldCB0aGUgY3Vyc29yIHN0eWxlcw0KICAgICAgICBnLnN0eWxlKCJwb2ludGVyLWV2ZW50cyIsICJhbGwiKS5zZWxlY3RBbGwoIi5yZXNpemUiKS5zdHlsZSgiZGlzcGxheSIsIGZ1bmN0aW9uKGQpIHsgcmV0dXJuIGJydXNoLmVtcHR5KGRbMV0pID8gIm5vbmUiIDogbnVsbDsgfSk7DQogICAgICAgIGQzLnNlbGVjdCgiYm9keSIpLnN0eWxlKCJjdXJzb3IiLCBudWxsKTsNCg0KICAgICAgICB3IC5vbigibW91c2Vtb3ZlLmJydXNoIiwgbnVsbCkNCiAgICAgICAgICAub24oIm1vdXNldXAuYnJ1c2giLCBudWxsKQ0KICAgICAgICAgIC5vbigidG91Y2htb3ZlLmJydXNoIiwgbnVsbCkNCiAgICAgICAgICAub24oInRvdWNoZW5kLmJydXNoIiwgbnVsbCkNCiAgICAgICAgICAub24oImtleWRvd24uYnJ1c2giLCBudWxsKQ0KICAgICAgICAgIC5vbigia2V5dXAuYnJ1c2giLCBudWxsKTsNCg0KICAgICAgICBkcmF3RXh0ZW50cygpOw0KDQogICAgICAgIGRyYWdSZXN0b3JlKCk7DQogICAgICAgIGV2ZW50Xyh7dHlwZTogImJydXNoZW5kIn0pOw0KICAgICAgfQ0KICAgIH0NCg0KICAgIGJydXNoLnggPSBmdW5jdGlvbih6KSB7DQogICAgICBpZiAoIWFyZ3VtZW50cy5sZW5ndGgpIHJldHVybiB4Ow0KICAgICAgeCA9IHo7DQogICAgICByZXNpemVzID0gZDNfc3ZnX2JydXNoUmVzaXplc1sheCA8PCAxIHwgIXldOyAvLyBmb3JlIQ0KICAgICAgcmV0dXJuIGJydXNoOw0KICAgIH07DQoNCiAgICBicnVzaC55ID0gZnVuY3Rpb24oeikgew0KICAgICAgaWYgKCFhcmd1bWVudHMubGVuZ3RoKSByZXR1cm4geTsNCiAgICAgIHkgPSB6Ow0KICAgICAgcmVzaXplcyA9IGQzX3N2Z19icnVzaFJlc2l6ZXNbIXggPDwgMSB8ICF5XTsgLy8gZm9yZSENCiAgICAgIHJldHVybiBicnVzaDsNCiAgICB9Ow0KDQogICAgYnJ1c2gucmVzaXplQWRhcHRpb24gPSBmdW5jdGlvbih6KSB7DQogICAgICBpZiAoIWFyZ3VtZW50cy5sZW5ndGgpIHJldHVybiByZXNpemVBZGFwdGlvbjsNCiAgICAgIHJlc2l6ZUFkYXB0aW9uID0gejsNCiAgICAgIHJldHVybiBicnVzaDsNCiAgICB9DQoNCiAgICBicnVzaC5leHRlbnRBZGFwdGlvbiA9IGZ1bmN0aW9uKHopIHsNCiAgICAgIGlmICghYXJndW1lbnRzLmxlbmd0aCkgcmV0dXJuIGV4dGVudEFkYXB0aW9uOw0KICAgICAgZXh0ZW50QWRhcHRpb24gPSB6Ow0KICAgICAgcmV0dXJuIGJydXNoOw0KICAgIH0NCg0KICAgIGJydXNoLmNsYW1wID0gZnVuY3Rpb24oeikgew0KICAgICAgaWYgKCFhcmd1bWVudHMubGVuZ3RoKSByZXR1cm4geCAmJiB5ID8gW3hDbGFtcCwgeUNsYW1wXSA6IHggPyB4Q2xhbXAgOiB5ID8geUNsYW1wIDogbnVsbDsNCiAgICAgIGlmICh4ICYmIHkpIHhDbGFtcCA9ICEhelswXSwgeUNsYW1wID0gISF6WzFdOw0KICAgICAgZWxzZSBpZiAoeCkgeENsYW1wID0gISF6Ow0KICAgICAgZWxzZSBpZiAoeSkgeUNsYW1wID0gISF6Ow0KICAgICAgcmV0dXJuIGJydXNoOw0KICAgIH07DQoNCiAgICBicnVzaC5leHRlbnQgPSBmdW5jdGlvbih6KSB7DQogICAgICB2YXIgeDAsIHgxLCB5MCwgeTEsIHQ7DQogICAgICB2YXIgeE91dHB1dCwgeU91dHB1dCwgeHlPdXRwdXQgPSBbXTsNCg0KICAgICAgLy8gSW52ZXJ0IHRoZSBwaXhlbCBleHRlbnQgdG8gZGF0YS1zcGFjZS4NCiAgICAgIGlmICghYXJndW1lbnRzLmxlbmd0aCkgew0KICAgICAgICBpZiAoeCkgew0KICAgICAgICAgIGlmICh4RXh0ZW50RG9tYWluWzBdKSB7DQogICAgICAgICAgICB4T3V0cHV0ID0geEV4dGVudERvbWFpbjsNCiAgICAgICAgICB9IGVsc2Ugew0KICAgICAgICAgICAgeE91dHB1dCA9IHhFeHRlbnQubWFwKGZ1bmN0aW9uIChkKSB7DQogICAgICAgICAgICAgIGlmICh4LmludmVydCkgcmV0dXJuIFsgeC5pbnZlcnQoZFswXSksIHguaW52ZXJ0KGRbMV0pIF07DQogICAgICAgICAgICAgIHJldHVybiBkOw0KICAgICAgICAgICAgfSkubWFwKGZ1bmN0aW9uIChkKSB7DQogICAgICAgICAgICAgIGlmIChkWzFdIDwgZFswXSkgcmV0dXJuIFsgZFsxXSwgZFswXSBdOw0KICAgICAgICAgICAgICByZXR1cm4gZDsNCiAgICAgICAgICAgIH0pLmZpbHRlcihmdW5jdGlvbiAoZCkgeyByZXR1cm4gZFsxXSAtIGRbMF0gIT0gMDsgfSk7DQogICAgICAgICAgfQ0KICAgICAgICB9DQogICAgICAgIGlmICh5KSB7DQogICAgICAgICAgaWYgKHlFeHRlbnREb21haW5bMF0pIHsNCiAgICAgICAgICAgIHlPdXRwdXQgPSB5RXh0ZW50RG9tYWluOw0KICAgICAgICAgIH0gZWxzZSB7DQogICAgICAgICAgICB5T3V0cHV0ID0geUV4dGVudC5tYXAoZnVuY3Rpb24gKGQpIHsNCiAgICAgICAgICAgICAgaWYoeS5pbnZlcnQpIHJldHVybiBbIHkuaW52ZXJ0KGRbMF0pLCB5LmludmVydChkWzFdKSBdOw0KICAgICAgICAgICAgICByZXR1cm4gZDsNCiAgICAgICAgICAgIH0pLm1hcChmdW5jdGlvbiAoZCkgew0KICAgICAgICAgICAgICBpZiAoZFsxXSA8IGRbMF0pIHJldHVybiBbIGRbMV0sIGRbMF0gXTsNCiAgICAgICAgICAgICAgcmV0dXJuIGQ7DQogICAgICAgICAgICB9KS5maWx0ZXIoZnVuY3Rpb24gKGQpIHsgcmV0dXJuIGRbMV0gLSBkWzBdICE9IDA7IH0pOw0KICAgICAgICAgIH0NCiAgICAgICAgfQ0KICAgICAgICBpZih4ICYmIHkpIHsNCiAgICAgICAgICB4T3V0cHV0LmZvckVhY2goZnVuY3Rpb24gKGQsIGkpIHsNCiAgICAgICAgICAgIHh5T3V0cHV0LnB1c2goW1tkWzBdLCB5T3V0cHV0W2ldWzBdXSwgW2RbMV0sIHlPdXRwdXRbaV1bMV1dXSk7DQogICAgICAgICAgfSk7DQogICAgICAgIH0NCiAgICAgICAgcmV0dXJuIHggJiYgeSA/IHh5T3V0cHV0IDogeCA/IHhPdXRwdXQgOiB5ICYmIHlPdXRwdXQ7DQogICAgICB9DQoNCiAgICAgIC8vIFNjYWxlIHRoZSBkYXRhLXNwYWNlIGV4dGVudCB0byBwaXhlbHMuDQogICAgICBpZiAoeCkgew0KICAgICAgICB4T3V0cHV0ID0gejsNCiAgICAgICAgaWYgKHkpIHhPdXRwdXQgPSB4T3V0cHV0Lm1hcChmdW5jdGlvbiAoZCkgew0KICAgICAgICAgIHJldHVybiBbZFswXVswXSwgZFsxXVswXV07DQogICAgICAgIH0pOw0KICAgICAgICB4RXh0ZW50RG9tYWluID0geE91dHB1dDsNCiAgICAgICAgeE91dHB1dCA9IHhPdXRwdXQubWFwKGZ1bmN0aW9uIChkKSB7DQogICAgICAgICAgaWYgKHguaW52ZXJ0KSByZXR1cm4gW3goZFswXSksIHgoZFsxXSldOw0KICAgICAgICAgIHJldHVybiBkOw0KICAgICAgICB9KS5tYXAoZnVuY3Rpb24gKGQpIHsNCiAgICAgICAgICBpZihkWzFdIDwgZFswXSkgcmV0dXJuIFtkWzFdLCBkWzBdXTsNCiAgICAgICAgICByZXR1cm4gZDsNCiAgICAgICAgfSk7DQogICAgICAgIHhFeHRlbnQgPSB4T3V0cHV0Ow0KICAgICAgICBpZigheSkgeUV4dGVudCA9IHhPdXRwdXQubWFwKGZ1bmN0aW9uKCkgeyByZXR1cm4gWzAsMF07IH0pOw0KICAgICAgfQ0KICAgICAgaWYgKHkpIHsNCiAgICAgICAgeU91dHB1dCA9IHo7DQogICAgICAgIGlmICh4KSB5T3V0cHV0ID0geU91dHB1dC5tYXAoZnVuY3Rpb24gKGQpIHsNCiAgICAgICAgICByZXR1cm4gW2RbMF1bMV0sIGRbMV1bMV1dOw0KICAgICAgICB9KTsNCiAgICAgICAgeUV4dGVudERvbWFpbiA9IHlPdXRwdXQ7DQogICAgICAgIHlPdXRwdXQgPSB5T3V0cHV0Lm1hcChmdW5jdGlvbiAoZCkgew0KICAgICAgICAgIGlmICh5LmludmVydCkgcmV0dXJuIFt5KGRbMF0pLCB5KGRbMV0pXTsNCiAgICAgICAgICByZXR1cm4gZDsNCiAgICAgICAgfSkubWFwKGZ1bmN0aW9uIChkKSB7DQogICAgICAgICAgaWYoZFsxXSA8IGRbMF0pIHJldHVybiBbZFsxXSwgZFswXV07DQogICAgICAgICAgcmV0dXJuIGQ7DQogICAgICAgIH0pOw0KICAgICAgICB5RXh0ZW50ID0geU91dHB1dDsNCiAgICAgICAgaWYoIXgpIHhFeHRlbnQgPSB5T3V0cHV0Lm1hcChmdW5jdGlvbiAoKSB7IHJldHVybiBbMCwwXTsgfSk7DQogICAgICB9DQoNCiAgICAgIC8vIEhhbmRsZSB0aGUgY2FzZSB3aGVyZSB0aGUgZXh0ZW50cyBhcmUgc2V0IHRvIGVtcHR5IGFycmF5cy4NCiAgICAgIGlmKHhFeHRlbnQubGVuZ3RoID09PSAwKSB4RXh0ZW50ID0gW1swLDBdXTsNCiAgICAgIGlmKHlFeHRlbnQubGVuZ3RoID09PSAwKSB5RXh0ZW50ID0gW1swLDBdXTsNCg0KICAgICAgcmV0dXJuIGJydXNoOw0KICAgIH07DQoNCiAgICBicnVzaC5jbGVhciA9IGZ1bmN0aW9uKCkgew0KICAgICAgeEV4dGVudCA9IFtbMCwgMF1dLCB5RXh0ZW50ID0gW1swLCAwXV07DQogICAgICB4RXh0ZW50RG9tYWluID0geUV4dGVudERvbWFpbiA9IFtdOw0KICAgICAgZHJhd0V4dGVudHMoKTsNCiAgICAgIGlmKHgpIHJlZHJhd1goYnJ1c2hFbGVtZW50KTsNCiAgICAgIGlmKHkpIHJlZHJhd1koYnJ1c2hFbGVtZW50KTsNCiAgICAgIHJldHVybiBicnVzaDsNCiAgICB9Ow0KDQogICAgYnJ1c2guZW1wdHkgPSBmdW5jdGlvbihpKSB7DQogICAgaWYgKHRoaXMuZXh0ZW50KCkubGVuZ3RoID09PSAwKSB7DQogICAgICByZXR1cm4gdHJ1ZTsNCiAgICB9DQogICAgICBpZih4RXh0ZW50Lmxlbmd0aCA9PSAxICYmIHlFeHRlbnQubGVuZ3RoID09IDEpIGkgPSAwOw0KICAgICAgaWYoaSAhPT0gdW5kZWZpbmVkKSB7DQogICAgICAgIHJldHVybiAhIXggJiYgeEV4dGVudFtpXVswXSA9PSB4RXh0ZW50W2ldWzFdDQogICAgICAgICAgfHwgISF5ICYmIHlFeHRlbnRbaV1bMF0gPT0geUV4dGVudFtpXVsxXTsNCiAgICAgIH0gZWxzZSB7DQogICAgICAgIHJldHVybiBmYWxzZTsNCiAgICAgIH0NCiAgICB9Ow0KDQogICAgcmV0dXJuIGQzLnJlYmluZChicnVzaCwgZXZlbnQsICJvbiIpOw0KICB9Ow0KDQogIHZhciBkM19zdmdfYnJ1c2hDdXJzb3IgPSB7DQogICAgbjogIm5zLXJlc2l6ZSIsDQogICAgZTogImV3LXJlc2l6ZSIsDQogICAgczogIm5zLXJlc2l6ZSIsDQogICAgdzogImV3LXJlc2l6ZSIsDQogICAgbnc6ICJud3NlLXJlc2l6ZSIsDQogICAgbmU6ICJuZXN3LXJlc2l6ZSIsDQogICAgc2U6ICJud3NlLXJlc2l6ZSIsDQogICAgc3c6ICJuZXN3LXJlc2l6ZSINCiAgfTsNCg0KICB2YXIgZDNfc3ZnX2JydXNoUmVzaXplcyA9IFsNCiAgICBbIm4iLCAiZSIsICJzIiwgInciLCAibnciLCAibmUiLCAic2UiLCAic3ciXSwNCiAgICBbImUiLCAidyJdLA0KICAgIFsibiIsICJzIl0sDQogICAgW10NCiAgXTsNCn0pKCk7DQo="></script>
<script src="data:application/x-javascript;base64,ZDMucGFyY29vcmRzID0gZnVuY3Rpb24oY29uZmlnKSB7DQogIHZhciBfXyA9IHsNCiAgICBkYXRhOiBbXSwNCiAgICBoaWdobGlnaHRlZDogW10sDQogICAgZGltZW5zaW9uczoge30sDQogICAgZGltZW5zaW9uVGl0bGVSb3RhdGlvbjogMCwNCiAgICBicnVzaGVkOiBmYWxzZSwNCiAgICBicnVzaGVkQ29sb3I6IG51bGwsDQogICAgYWxwaGFPbkJydXNoZWQ6IDAuMCwNCiAgICBtb2RlOiAiZGVmYXVsdCIsDQogICAgcmF0ZTogMjAsDQogICAgd2lkdGg6IDYwMCwNCiAgICBoZWlnaHQ6IDMwMCwNCiAgICBtYXJnaW46IHsgdG9wOiAyNCwgcmlnaHQ6IDAsIGJvdHRvbTogMTIsIGxlZnQ6IDAgfSwNCiAgICBudWxsVmFsdWVTZXBhcmF0b3I6ICJ1bmRlZmluZWQiLCAvLyBzZXQgdG8gInRvcCIgb3IgImJvdHRvbSINCiAgICBudWxsVmFsdWVTZXBhcmF0b3JQYWRkaW5nOiB7IHRvcDogOCwgcmlnaHQ6IDAsIGJvdHRvbTogOCwgbGVmdDogMCB9LA0KICAgIGNvbG9yOiAiIzA2OSIsDQogICAgY29tcG9zaXRlOiAic291cmNlLW92ZXIiLA0KICAgIGFscGhhOiAwLjcsDQogICAgYnVuZGxpbmdTdHJlbmd0aDogMC41LA0KICAgIGJ1bmRsZURpbWVuc2lvbjogbnVsbCwNCiAgICBzbW9vdGhuZXNzOiAwLjAsDQogICAgc2hvd0NvbnRyb2xQb2ludHM6IGZhbHNlLA0KICAgIGhpZGVBeGlzIDogW10sDQogICAgZmxpcEF4ZXM6IFtdLA0KICAgIGFuaW1hdGlvblRpbWU6IDExMDAsIC8vIEhvdyBsb25nIGl0IHRha2VzIHRvIGZsaXAgdGhlIGF4aXMgd2hlbiB5b3UgZG91YmxlIGNsaWNrDQogICAgcm90YXRlTGFiZWxzOiBmYWxzZSwNCiAgICBvdXRzaWRlRmlsdGVyczogbnVsbA0KICB9Ow0KDQogIGV4dGVuZChfXywgY29uZmlnKTsNCg0KICBpZiAoY29uZmlnICYmIGNvbmZpZy5kaW1lbnNpb25UaXRsZXMpIHsNCiAgICBjb25zb2xlLndhcm4oImRpbWVuc2lvblRpdGxlcyBwYXNzZWQgaW4gY29uZmlnIGlzIGRlcHJlY2F0ZWQuIEFkZCB0aXRsZSB0byBkaW1lbnNpb24gb2JqZWN0LiIpOw0KICAgIGQzLmVudHJpZXMoY29uZmlnLmRpbWVuc2lvblRpdGxlcykuZm9yRWFjaChmdW5jdGlvbihkKSB7DQogICAgICBpZiAoX18uZGltZW5zaW9uc1tkLmtleV0pIHsNCiAgICAgICAgX18uZGltZW5zaW9uc1tkLmtleV0udGl0bGUgPSBfXy5kaW1lbnNpb25zW2Qua2V5XS50aXRsZSA/IF9fLmRpbWVuc2lvbnNbZC5rZXldLnRpdGxlIDogZC52YWx1ZTsNCiAgICAgIH0gZWxzZSB7DQogICAgICAgIF9fLmRpbWVuc2lvbnNbZC5rZXldID0gew0KICAgICAgICAgIHRpdGxlOiBkLnZhbHVlDQogICAgICAgIH07DQogICAgICB9DQogICAgfSk7DQogIH0NCnZhciBwYyA9IGZ1bmN0aW9uKHNlbGVjdGlvbikgew0KICBzZWxlY3Rpb24gPSBwYy5zZWxlY3Rpb24gPSBkMy5zZWxlY3Qoc2VsZWN0aW9uKTsNCg0KICBfXy53aWR0aCA9IHNlbGVjdGlvblswXVswXS5jbGllbnRXaWR0aDsNCiAgX18uaGVpZ2h0ID0gc2VsZWN0aW9uWzBdWzBdLmNsaWVudEhlaWdodDsNCg0KICAvLyBjYW52YXMgZGF0YSBsYXllcnMNCiAgWyJtYXJrcyIsICJmb3JlZ3JvdW5kIiwgImJydXNoZWQiLCAiaGlnaGxpZ2h0Il0uZm9yRWFjaChmdW5jdGlvbihsYXllcikgew0KICAgIGNhbnZhc1tsYXllcl0gPSBzZWxlY3Rpb24NCiAgICAgIC5hcHBlbmQoImNhbnZhcyIpDQogICAgICAuYXR0cigiY2xhc3MiLCBsYXllcilbMF1bMF07DQogICAgY3R4W2xheWVyXSA9IGNhbnZhc1tsYXllcl0uZ2V0Q29udGV4dCgiMmQiKTsNCiAgfSk7DQoNCiAgLy8gc3ZnIHRpY2sgYW5kIGJydXNoIGxheWVycw0KICBwYy5zdmcgPSBzZWxlY3Rpb24NCiAgICAuYXBwZW5kKCJzdmciKQ0KICAgICAgLmF0dHIoIndpZHRoIiwgX18ud2lkdGgpDQogICAgICAuYXR0cigiaGVpZ2h0IiwgX18uaGVpZ2h0KQ0KICAgICAgLnN0eWxlKCJmb250IiwgIjE0cHggc2Fucy1zZXJpZiIpDQogICAgICAuc3R5bGUoInBvc2l0aW9uIiwgImFic29sdXRlIikNCg0KICAgIC5hcHBlbmQoInN2ZzpnIikNCiAgICAgIC5hdHRyKCJ0cmFuc2Zvcm0iLCAidHJhbnNsYXRlKCIgKyBfXy5tYXJnaW4ubGVmdCArICIsIiArIF9fLm1hcmdpbi50b3AgKyAiKSIpOw0KDQogIHJldHVybiBwYzsNCn07DQp2YXIgZXZlbnRzID0gZDMuZGlzcGF0Y2guYXBwbHkodGhpcyxbInJlbmRlciIsICJyZXNpemUiLCAiaGlnaGxpZ2h0IiwgImJydXNoIiwgImJydXNoZW5kIiwgImJydXNoc3RhcnQiLCAiYXhlc3Jlb3JkZXIiXS5jb25jYXQoZDMua2V5cyhfXykpKSwNCiAgICB3ID0gZnVuY3Rpb24oKSB7IHJldHVybiBfXy53aWR0aCAtIF9fLm1hcmdpbi5yaWdodCAtIF9fLm1hcmdpbi5sZWZ0OyB9LA0KICAgIGggPSBmdW5jdGlvbigpIHsgcmV0dXJuIF9fLmhlaWdodCAtIF9fLm1hcmdpbi50b3AgLSBfXy5tYXJnaW4uYm90dG9tOyB9LA0KICAgIGZsYWdzID0gew0KICAgICAgYnJ1c2hhYmxlOiBmYWxzZSwNCiAgICAgIHJlb3JkZXJhYmxlOiBmYWxzZSwNCiAgICAgIGF4ZXM6IGZhbHNlLA0KICAgICAgaW50ZXJhY3RpdmU6IGZhbHNlLA0KICAgICAgZGVidWc6IGZhbHNlDQogICAgfSwNCiAgICB4c2NhbGUgPSBkMy5zY2FsZS5vcmRpbmFsKCksDQogICAgZHJhZ2dpbmcgPSB7fSwNCiAgICBsaW5lID0gZDMuc3ZnLmxpbmUoKSwNCiAgICBheGlzID0gZDMuc3ZnLmF4aXMoKS5vcmllbnQoImxlZnQiKS50aWNrcyg1KSwNCiAgICBnLCAvLyBncm91cHMgZm9yIGF4ZXMsIGJydXNoZXMNCiAgICBjdHggPSB7fSwNCiAgICBjYW52YXMgPSB7fSwNCiAgICBjbHVzdGVyQ2VudHJvaWRzID0gW107DQoNCi8vIHNpZGUgZWZmZWN0cyBmb3Igc2V0dGVycw0KdmFyIHNpZGVfZWZmZWN0cyA9IGQzLmRpc3BhdGNoLmFwcGx5KHRoaXMsZDMua2V5cyhfXykpDQogIC5vbigiY29tcG9zaXRlIiwgZnVuY3Rpb24oZCkgew0KICAgIGN0eC5mb3JlZ3JvdW5kLmdsb2JhbENvbXBvc2l0ZU9wZXJhdGlvbiA9IGQudmFsdWU7DQogICAgY3R4LmJydXNoZWQuZ2xvYmFsQ29tcG9zaXRlT3BlcmF0aW9uID0gZC52YWx1ZTsNCiAgfSkNCiAgLm9uKCJhbHBoYSIsIGZ1bmN0aW9uKGQpIHsNCiAgICBjdHguZm9yZWdyb3VuZC5nbG9iYWxBbHBoYSA9IGQudmFsdWU7DQogICAgY3R4LmJydXNoZWQuZ2xvYmFsQWxwaGEgPSBkLnZhbHVlOw0KICB9KQ0KICAub24oImJydXNoZWRDb2xvciIsIGZ1bmN0aW9uIChkKSB7DQogICAgY3R4LmJydXNoZWQuc3Ryb2tlU3R5bGUgPSBkLnZhbHVlOw0KICB9KQ0KICAub24oIndpZHRoIiwgZnVuY3Rpb24oZCkgeyBwYy5yZXNpemUoKTsgfSkNCiAgLm9uKCJoZWlnaHQiLCBmdW5jdGlvbihkKSB7IHBjLnJlc2l6ZSgpOyB9KQ0KICAub24oIm1hcmdpbiIsIGZ1bmN0aW9uKGQpIHsgcGMucmVzaXplKCk7IH0pDQogIC5vbigicmF0ZSIsIGZ1bmN0aW9uKGQpIHsNCiAgICBicnVzaGVkUXVldWUucmF0ZShkLnZhbHVlKTsNCiAgICBmb3JlZ3JvdW5kUXVldWUucmF0ZShkLnZhbHVlKTsNCiAgfSkNCiAgLm9uKCJkaW1lbnNpb25zIiwgZnVuY3Rpb24oZCkgew0KICAgIF9fLmRpbWVuc2lvbnMgPSBwYy5hcHBseURpbWVuc2lvbkRlZmF1bHRzKGQzLmtleXMoZC52YWx1ZSkpOw0KICAgIHhzY2FsZS5kb21haW4ocGMuZ2V0T3JkZXJlZERpbWVuc2lvbktleXMoKSk7DQogICAgcGMuc29ydERpbWVuc2lvbnMoKTsNCiAgICBpZiAoZmxhZ3MuaW50ZXJhY3RpdmUpe3BjLnJlbmRlcigpLnVwZGF0ZUF4ZXMoKTt9DQogIH0pDQogIC5vbigiYnVuZGxlRGltZW5zaW9uIiwgZnVuY3Rpb24oZCkgew0KICAgICAgaWYgKCFkMy5rZXlzKF9fLmRpbWVuc2lvbnMpLmxlbmd0aCkgcGMuZGV0ZWN0RGltZW5zaW9ucygpOw0KICAgICAgcGMuYXV0b3NjYWxlKCk7DQogICAgICBpZiAodHlwZW9mIGQudmFsdWUgPT09ICJudW1iZXIiKSB7DQogICAgICAgICAgaWYgKGQudmFsdWUgPCBkMy5rZXlzKF9fLmRpbWVuc2lvbnMpLmxlbmd0aCkgew0KICAgICAgICAgICAgICBfXy5idW5kbGVEaW1lbnNpb24gPSBfXy5kaW1lbnNpb25zW2QudmFsdWVdOw0KICAgICAgICAgIH0gZWxzZSBpZiAoZC52YWx1ZSA8IF9fLmhpZGVBeGlzLmxlbmd0aCkgew0KICAgICAgICAgICAgICBfXy5idW5kbGVEaW1lbnNpb24gPSBfXy5oaWRlQXhpc1tkLnZhbHVlXTsNCiAgICAgICAgICB9DQogICAgICB9IGVsc2Ugew0KICAgICAgICAgIF9fLmJ1bmRsZURpbWVuc2lvbiA9IGQudmFsdWU7DQogICAgICB9DQoNCiAgICAgIF9fLmNsdXN0ZXJDZW50cm9pZHMgPSBjb21wdXRlX2NsdXN0ZXJfY2VudHJvaWRzKF9fLmJ1bmRsZURpbWVuc2lvbik7DQogICAgaWYgKGZsYWdzLmludGVyYWN0aXZlKXtwYy5yZW5kZXIoKTt9DQogIH0pDQogIC5vbigiaGlkZUF4aXMiLCBmdW5jdGlvbihkKSB7DQogICAgcGMuZGltZW5zaW9ucyhwYy5hcHBseURpbWVuc2lvbkRlZmF1bHRzKCkpOw0KICAgIHBjLmRpbWVuc2lvbnMod2l0aG91dChfXy5kaW1lbnNpb25zLCBkLnZhbHVlKSk7DQogIH0pDQogIC5vbigiZmxpcEF4ZXMiLCBmdW5jdGlvbihkKSB7DQogICAgaWYgKGQudmFsdWUgJiYgZC52YWx1ZS5sZW5ndGgpIHsNCiAgICAgICAgZC52YWx1ZS5mb3JFYWNoKGZ1bmN0aW9uKGF4aXMpIHsNCiAgICAgICAgICAgIGZsaXBBeGlzQW5kVXBkYXRlUENQKGF4aXMpOw0KICAgICAgICB9KTsNCiAgICAgICAgcGMudXBkYXRlQXhlcygwKTsNCiAgICB9DQogIH0pOw0KDQovLyBleHBvc2UgdGhlIHN0YXRlIG9mIHRoZSBjaGFydA0KcGMuc3RhdGUgPSBfXzsNCnBjLmZsYWdzID0gZmxhZ3M7DQoNCi8vIGNyZWF0ZSBnZXR0ZXIvc2V0dGVycw0KZ2V0c2V0KHBjLCBfXywgZXZlbnRzKTsNCg0KLy8gZXhwb3NlIGV2ZW50cw0KZDMucmViaW5kKHBjLCBldmVudHMsICJvbiIpOw0KDQovLyBnZXR0ZXIvc2V0dGVyIHdpdGggZXZlbnQgZmlyaW5nDQpmdW5jdGlvbiBnZXRzZXQob2JqLHN0YXRlLGV2ZW50cykgIHsNCiAgZDMua2V5cyhzdGF0ZSkuZm9yRWFjaChmdW5jdGlvbihrZXkpIHsNCiAgICAgIG9ialtrZXldID0gZnVuY3Rpb24oeCkgew0KICAgICAgICBpZiAoIWFyZ3VtZW50cy5sZW5ndGgpIHsNCiAgICAgICAgICByZXR1cm4gc3RhdGVba2V5XTsNCiAgICAgICAgfQ0KICAgICAgICBpZiAoa2V5ID09PSAnZGltZW5zaW9ucycgJiYgT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKHgpID09PSAnW29iamVjdCBBcnJheV0nKSB7DQogICAgICAgICAgY29uc29sZS53YXJuKCJwYy5kaW1lbnNpb25zKFtdKSBpcyBkZXByZWNhdGVkLCB1c2UgcGMuZGltZW5zaW9ucyh7fSkiKTsNCiAgICAgICAgICB4ID0gcGMuYXBwbHlEaW1lbnNpb25EZWZhdWx0cyh4KTsNCiAgICAgICAgfQ0KICAgICAgICB2YXIgb2xkID0gc3RhdGVba2V5XTsNCiAgICAgICAgc3RhdGVba2V5XSA9IHg7DQogICAgICAgIHNpZGVfZWZmZWN0c1trZXldLmNhbGwocGMseyJ2YWx1ZSI6IHgsICJwcmV2aW91cyI6IG9sZH0pOw0KICAgICAgICBldmVudHNba2V5XS5jYWxsKHBjLHsidmFsdWUiOiB4LCAicHJldmlvdXMiOiBvbGR9KTsNCiAgICAgICAgcmV0dXJuIG9iajsNCiAgICAgIH07DQogIH0pOw0KfTsNCg0KZnVuY3Rpb24gZXh0ZW5kKHRhcmdldCwgc291cmNlKSB7DQogIGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsNCiAgICB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOw0KICB9DQogIHJldHVybiB0YXJnZXQ7DQp9Ow0KDQpmdW5jdGlvbiB3aXRob3V0KGFyciwgaXRlbXMpIHsNCiAgaXRlbXMuZm9yRWFjaChmdW5jdGlvbiAoZWwpIHsNCiAgICBkZWxldGUgYXJyW2VsXTsNCiAgfSk7DQogIHJldHVybiBhcnI7DQp9Ow0KLyoqIGFkanVzdHMgYW4gYXhpcycgZGVmYXVsdCByYW5nZSBbaCgpKzEsIDFdIGlmIGEgTnVsbFZhbHVlU2VwYXJhdG9yIGlzIHNldCAqLw0KZnVuY3Rpb24gZ2V0UmFuZ2UoKSB7DQoJaWYgKF9fLm51bGxWYWx1ZVNlcGFyYXRvcj09ImJvdHRvbSIpIHsNCgkJcmV0dXJuIFtoKCkrMS1fXy5udWxsVmFsdWVTZXBhcmF0b3JQYWRkaW5nLmJvdHRvbS1fXy5udWxsVmFsdWVTZXBhcmF0b3JQYWRkaW5nLnRvcCwgMV07DQoJfSBlbHNlIGlmIChfXy5udWxsVmFsdWVTZXBhcmF0b3I9PSJ0b3AiKSB7DQoJCXJldHVybiBbaCgpKzEsIDErX18ubnVsbFZhbHVlU2VwYXJhdG9yUGFkZGluZy5ib3R0b20rX18ubnVsbFZhbHVlU2VwYXJhdG9yUGFkZGluZy50b3BdOw0KCX0NCglyZXR1cm4gW2goKSsxLCAxXTsNCn07DQoNCnBjLmF1dG9zY2FsZSA9IGZ1bmN0aW9uKCkgew0KICAvLyB5c2NhbGUNCiAgdmFyIGRlZmF1bHRTY2FsZXMgPSB7DQogICAgImRhdGUiOiBmdW5jdGlvbihrKSB7DQogICAgICB2YXIgZXh0ZW50ID0gZDMuZXh0ZW50KF9fLmRhdGEsIGZ1bmN0aW9uKGQpIHsNCiAgICAgICAgcmV0dXJuIGRba10gPyBkW2tdLmdldFRpbWUoKSA6IG51bGw7DQogICAgICB9KTsNCg0KICAgICAgLy8gc3BlY2lhbCBjYXNlIGlmIHNpbmdsZSB2YWx1ZQ0KICAgICAgaWYgKGV4dGVudFswXSA9PT0gZXh0ZW50WzFdKSB7DQogICAgICAgIHJldHVybiBkMy5zY2FsZS5vcmRpbmFsKCkNCiAgICAgICAgICAuZG9tYWluKFtleHRlbnRbMF1dKQ0KICAgICAgICAgIC5yYW5nZVBvaW50cyhnZXRSYW5nZSgpKTsNCiAgICAgIH0NCg0KICAgICAgcmV0dXJuIGQzLnRpbWUuc2NhbGUoKQ0KICAgICAgICAuZG9tYWluKGV4dGVudCkNCiAgICAgICAgLnJhbmdlKGdldFJhbmdlKCkpOw0KICAgIH0sDQogICAgIm51bWJlciI6IGZ1bmN0aW9uKGspIHsNCiAgICAgIHZhciBleHRlbnQgPSBkMy5leHRlbnQoX18uZGF0YSwgZnVuY3Rpb24oZCkgeyByZXR1cm4gK2Rba107IH0pOw0KDQogICAgICAvLyBzcGVjaWFsIGNhc2UgaWYgc2luZ2xlIHZhbHVlDQogICAgICBpZiAoZXh0ZW50WzBdID09PSBleHRlbnRbMV0pIHsNCiAgICAgICAgcmV0dXJuIGQzLnNjYWxlLm9yZGluYWwoKQ0KICAgICAgICAgIC5kb21haW4oW2V4dGVudFswXV0pDQogICAgICAgICAgLnJhbmdlUG9pbnRzKGdldFJhbmdlKCkpOw0KICAgICAgfQ0KDQogICAgICByZXR1cm4gZDMuc2NhbGUubGluZWFyKCkNCiAgICAgICAgLmRvbWFpbihleHRlbnQpDQogICAgICAgIC5yYW5nZShnZXRSYW5nZSgpKTsNCiAgICB9LA0KICAgICJzdHJpbmciOiBmdW5jdGlvbihrKSB7DQogICAgICB2YXIgY291bnRzID0ge30sDQogICAgICAgICAgZG9tYWluID0gW107DQoNCiAgICAgIC8vIExldCdzIGdldCB0aGUgY291bnQgZm9yIGVhY2ggdmFsdWUgc28gdGhhdCB3ZSBjYW4gc29ydCB0aGUgZG9tYWluIGJhc2VkDQogICAgICAvLyBvbiB0aGUgbnVtYmVyIG9mIGl0ZW1zIGZvciBlYWNoIHZhbHVlLg0KICAgICAgX18uZGF0YS5tYXAoZnVuY3Rpb24ocCkgew0KICAgICAgICBpZiAocFtrXSA9PT0gdW5kZWZpbmVkICYmIF9fLm51bGxWYWx1ZVNlcGFyYXRvciE9PSAidW5kZWZpbmVkIil7DQogICAgICAgICAgcmV0dXJuOyAvLyBudWxsIHZhbHVlcyB3aWxsIGJlIGRyYXduIGJleW9uZCB0aGUgaG9yaXpvbnRhbCBudWxsIHZhbHVlIHNlcGFyYXRvciENCiAgICAgICAgfQ0KICAgICAgICBpZiAoY291bnRzW3Bba11dID09PSB1bmRlZmluZWQpIHsNCiAgICAgICAgICBjb3VudHNbcFtrXV0gPSAxOw0KICAgICAgICB9IGVsc2Ugew0KICAgICAgICAgIGNvdW50c1twW2tdXSA9IGNvdW50c1twW2tdXSArIDE7DQogICAgICAgIH0NCiAgICAgIH0pOw0KDQogICAgICBkb21haW4gPSBPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyhjb3VudHMpLnNvcnQoZnVuY3Rpb24oYSwgYikgew0KICAgICAgICByZXR1cm4gY291bnRzW2FdIC0gY291bnRzW2JdOw0KICAgICAgfSk7DQoNCiAgICAgIHJldHVybiBkMy5zY2FsZS5vcmRpbmFsKCkNCiAgICAgICAgLmRvbWFpbihkb21haW4pDQogICAgICAgIC5yYW5nZVBvaW50cyhnZXRSYW5nZSgpKTsNCiAgICB9DQogIH07DQoNCiAgZDMua2V5cyhfXy5kaW1lbnNpb25zKS5mb3JFYWNoKGZ1bmN0aW9uKGspIHsNCiAgICBpZiAoIV9fLmRpbWVuc2lvbnNba10ueXNjYWxlKXsNCiAgICAgIF9fLmRpbWVuc2lvbnNba10ueXNjYWxlID0gZGVmYXVsdFNjYWxlc1tfXy5kaW1lbnNpb25zW2tdLnR5cGVdKGspOw0KICAgIH0NCiAgfSk7DQoNCiAgLy8geHNjYWxlDQogIHhzY2FsZS5yYW5nZVBvaW50cyhbMCwgdygpXSwgMSk7DQoNCiAgLy8gUmV0aW5hIGRpc3BsYXksIGV0Yy4NCiAgdmFyIGRldmljZVBpeGVsUmF0aW8gPSB3aW5kb3cuZGV2aWNlUGl4ZWxSYXRpbyB8fCAxOw0KDQogIC8vIGNhbnZhcyBzaXplcw0KICBwYy5zZWxlY3Rpb24uc2VsZWN0QWxsKCJjYW52YXMiKQ0KICAgICAgLnN0eWxlKCJtYXJnaW4tdG9wIiwgX18ubWFyZ2luLnRvcCArICJweCIpDQogICAgICAuc3R5bGUoIm1hcmdpbi1sZWZ0IiwgX18ubWFyZ2luLmxlZnQgKyAicHgiKQ0KICAgICAgLnN0eWxlKCJ3aWR0aCIsICh3KCkrMikgKyAicHgiKQ0KICAgICAgLnN0eWxlKCJoZWlnaHQiLCAoaCgpKzIpICsgInB4IikNCiAgICAgIC5hdHRyKCJ3aWR0aCIsICh3KCkrMikgKiBkZXZpY2VQaXhlbFJhdGlvKQ0KICAgICAgLmF0dHIoImhlaWdodCIsIChoKCkrMikgKiBkZXZpY2VQaXhlbFJhdGlvKTsNCg0KICAvLyBkZWZhdWx0IHN0eWxlcywgbmVlZHMgdG8gYmUgc2V0IHdoZW4gY2FudmFzIHdpZHRoIGNoYW5nZXMNCiAgY3R4LmZvcmVncm91bmQuc3Ryb2tlU3R5bGUgPSBfXy5jb2xvcjsNCiAgY3R4LmZvcmVncm91bmQubGluZVdpZHRoID0gMS40Ow0KICBjdHguZm9yZWdyb3VuZC5nbG9iYWxDb21wb3NpdGVPcGVyYXRpb24gPSBfXy5jb21wb3NpdGU7DQogIGN0eC5mb3JlZ3JvdW5kLmdsb2JhbEFscGhhID0gX18uYWxwaGE7DQogIGN0eC5mb3JlZ3JvdW5kLnNjYWxlKGRldmljZVBpeGVsUmF0aW8sIGRldmljZVBpeGVsUmF0aW8pOw0KICBjdHguYnJ1c2hlZC5zdHJva2VTdHlsZSA9IF9fLmJydXNoZWRDb2xvcjsNCiAgY3R4LmJydXNoZWQubGluZVdpZHRoID0gMS40Ow0KICBjdHguYnJ1c2hlZC5nbG9iYWxDb21wb3NpdGVPcGVyYXRpb24gPSBfXy5jb21wb3NpdGU7DQogIGN0eC5icnVzaGVkLmdsb2JhbEFscGhhID0gX18uYWxwaGE7DQogIGN0eC5icnVzaGVkLnNjYWxlKGRldmljZVBpeGVsUmF0aW8sIGRldmljZVBpeGVsUmF0aW8pOw0KICBjdHguaGlnaGxpZ2h0LmxpbmVXaWR0aCA9IDM7DQogIGN0eC5oaWdobGlnaHQuc2NhbGUoZGV2aWNlUGl4ZWxSYXRpbywgZGV2aWNlUGl4ZWxSYXRpbyk7DQoNCiAgcmV0dXJuIHRoaXM7DQp9Ow0KDQpwYy5zY2FsZSA9IGZ1bmN0aW9uKGQsIGRvbWFpbikgew0KICBfXy5kaW1lbnNpb25zW2RdLnlzY2FsZS5kb21haW4oZG9tYWluKTsNCg0KICByZXR1cm4gdGhpczsNCn07DQoNCnBjLmZsaXAgPSBmdW5jdGlvbihkKSB7DQogIC8vX18uZGltZW5zaW9uc1tkXS55c2NhbGUuZG9tYWluKCkucmV2ZXJzZSgpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBkb2VzIG5vdCB3b3JrDQogIF9fLmRpbWVuc2lvbnNbZF0ueXNjYWxlLmRvbWFpbihfXy5kaW1lbnNpb25zW2RdLnlzY2FsZS5kb21haW4oKS5yZXZlcnNlKCkpOyAvLyB3b3Jrcw0KDQogIHJldHVybiB0aGlzOw0KfTsNCg0KcGMuY29tbW9uU2NhbGUgPSBmdW5jdGlvbihnbG9iYWwsIHR5cGUpIHsNCiAgdmFyIHQgPSB0eXBlIHx8ICJudW1iZXIiOw0KICBpZiAodHlwZW9mIGdsb2JhbCA9PT0gJ3VuZGVmaW5lZCcpIHsNCiAgICBnbG9iYWwgPSB0cnVlOw0KICB9DQoNCiAgLy8gdHJ5IHRvIGF1dG9kZXRlY3QgZGltZW5zaW9ucyBhbmQgY3JlYXRlIHNjYWxlcw0KICBpZiAoIWQzLmtleXMoX18uZGltZW5zaW9ucykubGVuZ3RoKSB7DQogICAgcGMuZGV0ZWN0RGltZW5zaW9ucygpDQogIH0NCiAgcGMuYXV0b3NjYWxlKCk7DQoNCiAgLy8gc2NhbGVzIG9mIHRoZSBzYW1lIHR5cGUNCiAgdmFyIHNjYWxlcyA9IGQzLmtleXMoX18uZGltZW5zaW9ucykuZmlsdGVyKGZ1bmN0aW9uKHApIHsNCiAgICByZXR1cm4gX18uZGltZW5zaW9uc1twXS50eXBlID09IHQ7DQogIH0pOw0KDQogIGlmIChnbG9iYWwpIHsNCiAgICB2YXIgZXh0ZW50ID0gZDMuZXh0ZW50KHNjYWxlcy5tYXAoZnVuY3Rpb24oZCxpKSB7DQogICAgICByZXR1cm4gX18uZGltZW5zaW9uc1tkXS55c2NhbGUuZG9tYWluKCk7DQogICAgfSkucmVkdWNlKGZ1bmN0aW9uKGEsYikgew0KICAgICAgcmV0dXJuIGEuY29uY2F0KGIpOw0KICAgIH0pKTsNCg0KICAgIHNjYWxlcy5mb3JFYWNoKGZ1bmN0aW9uKGQpIHsNCiAgICAgIF9fLmRpbWVuc2lvbnNbZF0ueXNjYWxlLmRvbWFpbihleHRlbnQpOw0KICAgIH0pOw0KDQogIH0gZWxzZSB7DQogICAgc2NhbGVzLmZvckVhY2goZnVuY3Rpb24oZCkgew0KICAgICAgX18uZGltZW5zaW9uc1tkXS55c2NhbGUuZG9tYWluKGQzLmV4dGVudChfXy5kYXRhLCBmdW5jdGlvbihkKSB7IHJldHVybiArZFtrXTsgfSkpOw0KICAgIH0pOw0KICB9DQoNCiAgLy8gdXBkYXRlIGNlbnRyb2lkcw0KICBpZiAoX18uYnVuZGxlRGltZW5zaW9uICE9PSBudWxsKSB7DQogICAgcGMuYnVuZGxlRGltZW5zaW9uKF9fLmJ1bmRsZURpbWVuc2lvbik7DQogIH0NCg0KICByZXR1cm4gdGhpczsNCn07DQpwYy5kZXRlY3REaW1lbnNpb25zID0gZnVuY3Rpb24oKSB7DQogIHBjLmRpbWVuc2lvbnMocGMuYXBwbHlEaW1lbnNpb25EZWZhdWx0cygpKTsNCiAgcmV0dXJuIHRoaXM7DQp9Ow0KDQpwYy5hcHBseURpbWVuc2lvbkRlZmF1bHRzID0gZnVuY3Rpb24oZGltcykgew0KICB2YXIgdHlwZXMgPSBwYy5kZXRlY3REaW1lbnNpb25UeXBlcyhfXy5kYXRhKTsNCiAgZGltcyA9IGRpbXMgPyBkaW1zIDogZDMua2V5cyh0eXBlcyk7DQogIHZhciBuZXdEaW1zID0ge307DQogIHZhciBjdXJySW5kZXggPSAwOw0KICBkaW1zLmZvckVhY2goZnVuY3Rpb24oaykgew0KICAgIG5ld0RpbXNba10gPSBfXy5kaW1lbnNpb25zW2tdID8gX18uZGltZW5zaW9uc1trXSA6IHt9Ow0KICAgIC8vU2V0IHVwIGRlZmF1bHRzDQogICAgbmV3RGltc1trXS5vcmllbnQ9IG5ld0RpbXNba10ub3JpZW50ID8gbmV3RGltc1trXS5vcmllbnQgOiAnbGVmdCc7DQogICAgbmV3RGltc1trXS50aWNrcz0gbmV3RGltc1trXS50aWNrcyAhPSBudWxsID8gbmV3RGltc1trXS50aWNrcyA6IDU7DQogICAgbmV3RGltc1trXS5pbm5lclRpY2tTaXplPSBuZXdEaW1zW2tdLmlubmVyVGlja1NpemUgIT0gbnVsbCA/IG5ld0RpbXNba10uaW5uZXJUaWNrU2l6ZSA6IDY7DQogICAgbmV3RGltc1trXS5vdXRlclRpY2tTaXplPSBuZXdEaW1zW2tdLm91dGVyVGlja1NpemUgIT0gbnVsbCA/IG5ld0RpbXNba10ub3V0ZXJUaWNrU2l6ZSA6IDA7DQogICAgbmV3RGltc1trXS50aWNrUGFkZGluZz0gbmV3RGltc1trXS50aWNrUGFkZGluZyAhPSBudWxsID8gbmV3RGltc1trXS50aWNrUGFkZGluZyA6IDM7DQogICAgbmV3RGltc1trXS50eXBlPSBuZXdEaW1zW2tdLnR5cGUgPyBuZXdEaW1zW2tdLnR5cGUgOiB0eXBlc1trXTsNCg0KICAgIG5ld0RpbXNba10uaW5kZXggPSBuZXdEaW1zW2tdLmluZGV4ICE9IG51bGwgPyBuZXdEaW1zW2tdLmluZGV4IDogY3VyckluZGV4Ow0KICAgIGN1cnJJbmRleCsrOw0KICB9KTsNCiAgcmV0dXJuIG5ld0RpbXM7DQp9Ow0KDQpwYy5nZXRPcmRlcmVkRGltZW5zaW9uS2V5cyA9IGZ1bmN0aW9uKCl7DQogIHJldHVybiBkMy5rZXlzKF9fLmRpbWVuc2lvbnMpLnNvcnQoZnVuY3Rpb24oeCwgeSl7DQogICAgcmV0dXJuIGQzLmFzY2VuZGluZyhfXy5kaW1lbnNpb25zW3hdLmluZGV4LCBfXy5kaW1lbnNpb25zW3ldLmluZGV4KTsNCiAgfSk7DQp9Ow0KDQovLyBhIGJldHRlciAidHlwZW9mIiBmcm9tIHRoaXMgcG9zdDogaHR0cDovL3N0YWNrb3ZlcmZsb3cuY29tL3F1ZXN0aW9ucy83MzkwNDI2L2JldHRlci13YXktdG8tZ2V0LXR5cGUtb2YtYS1qYXZhc2NyaXB0LXZhcmlhYmxlDQpwYy50b1R5cGUgPSBmdW5jdGlvbih2KSB7DQogIHJldHVybiAoe30pLnRvU3RyaW5nLmNhbGwodikubWF0Y2goL1xzKFthLXpBLVpdKykvKVsxXS50b0xvd2VyQ2FzZSgpOw0KfTsNCg0KLy8gdHJ5IHRvIGNvZXJjZSB0byBudW1iZXIgYmVmb3JlIHJldHVybmluZyB0eXBlDQpwYy50b1R5cGVDb2VyY2VOdW1iZXJzID0gZnVuY3Rpb24odikgew0KICBpZiAoKHBhcnNlRmxvYXQodikgPT0gdikgJiYgKHYgIT0gbnVsbCkpIHsNCiAgICByZXR1cm4gIm51bWJlciI7DQogIH0NCiAgcmV0dXJuIHBjLnRvVHlwZSh2KTsNCn07DQoNCi8vIGF0dGVtcHQgdG8gZGV0ZXJtaW5lIHR5cGVzIG9mIGVhY2ggZGltZW5zaW9uIGJhc2VkIG9uIGZpcnN0IHJvdyBvZiBkYXRhDQpwYy5kZXRlY3REaW1lbnNpb25UeXBlcyA9IGZ1bmN0aW9uKGRhdGEpIHsNCiAgdmFyIHR5cGVzID0ge307DQogIGQzLmtleXMoZGF0YVswXSkNCiAgICAuZm9yRWFjaChmdW5jdGlvbihjb2wpIHsNCiAgICAgIHR5cGVzW2lzTmFOKE51bWJlcihjb2wpKSA/IGNvbCA6IHBhcnNlSW50KGNvbCldID0gcGMudG9UeXBlQ29lcmNlTnVtYmVycyhkYXRhWzBdW2NvbF0pOw0KICAgIH0pOw0KICByZXR1cm4gdHlwZXM7DQp9Ow0KcGMucmVuZGVyID0gZnVuY3Rpb24oKSB7DQogIC8vIHRyeSB0byBhdXRvZGV0ZWN0IGRpbWVuc2lvbnMgYW5kIGNyZWF0ZSBzY2FsZXMNCiAgaWYgKCFkMy5rZXlzKF9fLmRpbWVuc2lvbnMpLmxlbmd0aCkgew0KICAgIHBjLmRldGVjdERpbWVuc2lvbnMoKQ0KICB9DQogIHBjLmF1dG9zY2FsZSgpOw0KDQogIHBjLnJlbmRlcltfXy5tb2RlXSgpOw0KDQogIGV2ZW50cy5yZW5kZXIuY2FsbCh0aGlzKTsNCiAgcmV0dXJuIHRoaXM7DQp9Ow0KDQpwYy5yZW5kZXJCcnVzaGVkID0gZnVuY3Rpb24oKSB7DQogIGlmICghZDMua2V5cyhfXy5kaW1lbnNpb25zKS5sZW5ndGgpIHBjLmRldGVjdERpbWVuc2lvbnMoKTsNCg0KICBwYy5yZW5kZXJCcnVzaGVkW19fLm1vZGVdKCk7DQoNCiAgZXZlbnRzLnJlbmRlci5jYWxsKHRoaXMpOw0KICByZXR1cm4gdGhpczsNCn07DQoNCmZ1bmN0aW9uIGlzQnJ1c2hlZCgpIHsNCiAgaWYgKF9fLmJydXNoZWQgJiYgX18uYnJ1c2hlZC5sZW5ndGggIT09IF9fLmRhdGEubGVuZ3RoKQ0KICAgIHJldHVybiB0cnVlOw0KDQogIHZhciBvYmplY3QgPSBicnVzaC5jdXJyZW50TW9kZSgpLmJydXNoU3RhdGUoKTsNCg0KICBmb3IgKHZhciBrZXkgaW4gb2JqZWN0KSB7DQogICAgaWYgKG9iamVjdC5oYXNPd25Qcm9wZXJ0eShrZXkpKSB7DQogICAgICByZXR1cm4gdHJ1ZTsNCiAgICB9DQogIH0NCiAgcmV0dXJuIGZhbHNlOw0KfTsNCg0KcGMucmVuZGVyLmRlZmF1bHQgPSBmdW5jdGlvbigpIHsNCiAgcGMuY2xlYXIoJ2ZvcmVncm91bmQnKTsNCiAgcGMuY2xlYXIoJ2hpZ2hsaWdodCcpOw0KDQogIHBjLnJlbmRlckJydXNoZWQuZGVmYXVsdCgpOw0KDQogIF9fLmRhdGEuZm9yRWFjaChwYXRoX2ZvcmVncm91bmQpOw0KfTsNCg0KdmFyIGZvcmVncm91bmRRdWV1ZSA9IGQzLnJlbmRlclF1ZXVlKHBhdGhfZm9yZWdyb3VuZCkNCiAgLnJhdGUoNTApDQogIC5jbGVhcihmdW5jdGlvbigpIHsNCiAgICBwYy5jbGVhcignZm9yZWdyb3VuZCcpOw0KICAgIHBjLmNsZWFyKCdoaWdobGlnaHQnKTsNCiAgfSk7DQoNCnBjLnJlbmRlci5xdWV1ZSA9IGZ1bmN0aW9uKCkgew0KICBwYy5yZW5kZXJCcnVzaGVkLnF1ZXVlKCk7DQoNCiAgZm9yZWdyb3VuZFF1ZXVlKF9fLmRhdGEpOw0KfTsNCg0KcGMucmVuZGVyQnJ1c2hlZC5kZWZhdWx0ID0gZnVuY3Rpb24oKSB7DQogIHBjLmNsZWFyKCdicnVzaGVkJyk7DQoNCiAgaWYgKGlzQnJ1c2hlZCgpKSB7DQogICAgX18uYnJ1c2hlZC5mb3JFYWNoKHBhdGhfYnJ1c2hlZCk7DQogIH0NCn07DQoNCnZhciBicnVzaGVkUXVldWUgPSBkMy5yZW5kZXJRdWV1ZShwYXRoX2JydXNoZWQpDQogIC5yYXRlKDUwKQ0KICAuY2xlYXIoZnVuY3Rpb24oKSB7DQogICAgcGMuY2xlYXIoJ2JydXNoZWQnKTsNCiAgfSk7DQoNCnBjLnJlbmRlckJydXNoZWQucXVldWUgPSBmdW5jdGlvbigpIHsNCiAgaWYgKGlzQnJ1c2hlZCgpKSB7DQogICAgYnJ1c2hlZFF1ZXVlKF9fLmJydXNoZWQpOw0KICB9IGVsc2Ugew0KICAgIGJydXNoZWRRdWV1ZShbXSk7IC8vIFRoaXMgaXMgbmVlZGVkIHRvIGNsZWFyIHRoZSBjdXJyZW50bHkgYnJ1c2hlZCBpdGVtcw0KICB9DQp9Ow0KZnVuY3Rpb24gY29tcHV0ZV9jbHVzdGVyX2NlbnRyb2lkcyhkKSB7DQoNCgl2YXIgY2x1c3RlckNlbnRyb2lkcyA9IGQzLm1hcCgpOw0KCXZhciBjbHVzdGVyQ291bnRzID0gZDMubWFwKCk7DQoJLy8gZGV0ZXJtaW5lIGNsdXN0ZXJDb3VudHMNCglfXy5kYXRhLmZvckVhY2goZnVuY3Rpb24ocm93KSB7DQoJCXZhciBzY2FsZWQgPSBfXy5kaW1lbnNpb25zW2RdLnlzY2FsZShyb3dbZF0pOw0KCQlpZiAoIWNsdXN0ZXJDb3VudHMuaGFzKHNjYWxlZCkpIHsNCgkJCWNsdXN0ZXJDb3VudHMuc2V0KHNjYWxlZCwgMCk7DQoJCX0NCgkJdmFyIGNvdW50ID0gY2x1c3RlckNvdW50cy5nZXQoc2NhbGVkKTsNCgkJY2x1c3RlckNvdW50cy5zZXQoc2NhbGVkLCBjb3VudCArIDEpOw0KCX0pOw0KDQoJX18uZGF0YS5mb3JFYWNoKGZ1bmN0aW9uKHJvdykgew0KCQlkMy5rZXlzKF9fLmRpbWVuc2lvbnMpLm1hcChmdW5jdGlvbihwLCBpKSB7DQoJCQl2YXIgc2NhbGVkID0gX18uZGltZW5zaW9uc1tkXS55c2NhbGUocm93W2RdKTsNCgkJCWlmICghY2x1c3RlckNlbnRyb2lkcy5oYXMoc2NhbGVkKSkgew0KCQkJCXZhciBtYXAgPSBkMy5tYXAoKTsNCgkJCQljbHVzdGVyQ2VudHJvaWRzLnNldChzY2FsZWQsIG1hcCk7DQoJCQl9DQoJCQlpZiAoIWNsdXN0ZXJDZW50cm9pZHMuZ2V0KHNjYWxlZCkuaGFzKHApKSB7DQoJCQkJY2x1c3RlckNlbnRyb2lkcy5nZXQoc2NhbGVkKS5zZXQocCwgMCk7DQoJCQl9DQoJCQl2YXIgdmFsdWUgPSBjbHVzdGVyQ2VudHJvaWRzLmdldChzY2FsZWQpLmdldChwKTsNCgkJCXZhbHVlICs9IF9fLmRpbWVuc2lvbnNbcF0ueXNjYWxlKHJvd1twXSkgLyBjbHVzdGVyQ291bnRzLmdldChzY2FsZWQpOw0KCQkJY2x1c3RlckNlbnRyb2lkcy5nZXQoc2NhbGVkKS5zZXQocCwgdmFsdWUpOw0KCQl9KTsNCgl9KTsNCg0KCXJldHVybiBjbHVzdGVyQ2VudHJvaWRzOw0KDQp9DQoNCmZ1bmN0aW9uIGNvbXB1dGVfY2VudHJvaWRzKHJvdykgew0KCXZhciBjZW50cm9pZHMgPSBbXTsNCg0KCXZhciBwID0gZDMua2V5cyhfXy5kaW1lbnNpb25zKTsNCgl2YXIgY29scyA9IHAubGVuZ3RoOw0KCXZhciBhID0gMC41OwkJCS8vIGNlbnRlciBiZXR3ZWVuIGF4ZXMNCglmb3IgKHZhciBpID0gMDsgaSA8IGNvbHM7ICsraSkgew0KCQkvLyBjZW50cm9pZHMgb24gJ3JlYWwnIGF4ZXMNCgkJdmFyIHggPSBwb3NpdGlvbihwW2ldKTsNCgkJdmFyIHkgPSBfXy5kaW1lbnNpb25zW3BbaV1dLnlzY2FsZShyb3dbcFtpXV0pOw0KCQljZW50cm9pZHMucHVzaCgkVihbeCwgeV0pKTsNCg0KCQkvLyBjZW50cm9pZHMgb24gJ3ZpcnR1YWwnIGF4ZXMNCgkJaWYgKGkgPCBjb2xzIC0gMSkgew0KCQkJdmFyIGN4ID0geCArIGEgKiAocG9zaXRpb24ocFtpKzFdKSAtIHgpOw0KCQkJdmFyIGN5ID0geSArIGEgKiAoX18uZGltZW5zaW9uc1twW2krMV1dLnlzY2FsZShyb3dbcFtpKzFdXSkgLSB5KTsNCgkJCWlmIChfXy5idW5kbGVEaW1lbnNpb24gIT09IG51bGwpIHsNCgkJCQl2YXIgbGVmdENlbnRyb2lkID0gX18uY2x1c3RlckNlbnRyb2lkcy5nZXQoX18uZGltZW5zaW9uc1tfXy5idW5kbGVEaW1lbnNpb25dLnlzY2FsZShyb3dbX18uYnVuZGxlRGltZW5zaW9uXSkpLmdldChwW2ldKTsNCgkJCQl2YXIgcmlnaHRDZW50cm9pZCA9IF9fLmNsdXN0ZXJDZW50cm9pZHMuZ2V0KF9fLmRpbWVuc2lvbnNbX18uYnVuZGxlRGltZW5zaW9uXS55c2NhbGUocm93W19fLmJ1bmRsZURpbWVuc2lvbl0pKS5nZXQocFtpKzFdKTsNCgkJCQl2YXIgY2VudHJvaWQgPSAwLjUgKiAobGVmdENlbnRyb2lkICsgcmlnaHRDZW50cm9pZCk7DQoJCQkJY3kgPSBjZW50cm9pZCArICgxIC0gX18uYnVuZGxpbmdTdHJlbmd0aCkgKiAoY3kgLSBjZW50cm9pZCk7DQoJCQl9DQoJCQljZW50cm9pZHMucHVzaCgkVihbY3gsIGN5XSkpOw0KCQl9DQoJfQ0KDQoJcmV0dXJuIGNlbnRyb2lkczsNCn0NCg0KcGMuY29tcHV0ZV9yZWFsX2NlbnRyb2lkcyA9IGZ1bmN0aW9uKHJvdykgew0KCXZhciByZWFsQ2VudHJvaWRzID0gW107DQoNCgl2YXIgcCA9IGQzLmtleXMoX18uZGltZW5zaW9ucyk7DQoJdmFyIGNvbHMgPSBwLmxlbmd0aDsNCgl2YXIgYSA9IDAuNTsNCg0KCWZvciAodmFyIGkgPSAwOyBpIDwgY29sczsgKytpKSB7DQoJCXZhciB4ID0gcG9zaXRpb24ocFtpXSk7DQoJCXZhciB5ID0gX18uZGltZW5zaW9uc1twW2ldXS55c2NhbGUocm93W3BbaV1dKTsNCgkJcmVhbENlbnRyb2lkcy5wdXNoKFt4LCB5XSk7DQoJfQ0KDQoJcmV0dXJuIHJlYWxDZW50cm9pZHM7DQp9DQoNCmZ1bmN0aW9uIGNvbXB1dGVfY29udHJvbF9wb2ludHMoY2VudHJvaWRzKSB7DQoNCgl2YXIgY29scyA9IGNlbnRyb2lkcy5sZW5ndGg7DQoJdmFyIGEgPSBfXy5zbW9vdGhuZXNzOw0KCXZhciBjcHMgPSBbXTsNCg0KCWNwcy5wdXNoKGNlbnRyb2lkc1swXSk7DQoJY3BzLnB1c2goJFYoW2NlbnRyb2lkc1swXS5lKDEpICsgYSoyKihjZW50cm9pZHNbMV0uZSgxKS1jZW50cm9pZHNbMF0uZSgxKSksIGNlbnRyb2lkc1swXS5lKDIpXSkpOw0KCWZvciAodmFyIGNvbCA9IDE7IGNvbCA8IGNvbHMgLSAxOyArK2NvbCkgew0KCQl2YXIgbWlkID0gY2VudHJvaWRzW2NvbF07DQoJCXZhciBsZWZ0ID0gY2VudHJvaWRzW2NvbCAtIDFdOw0KCQl2YXIgcmlnaHQgPSBjZW50cm9pZHNbY29sICsgMV07DQoNCgkJdmFyIGRpZmYgPSBsZWZ0LnN1YnRyYWN0KHJpZ2h0KTsNCgkJY3BzLnB1c2gobWlkLmFkZChkaWZmLngoYSkpKTsNCgkJY3BzLnB1c2gobWlkKTsNCgkJY3BzLnB1c2gobWlkLnN1YnRyYWN0KGRpZmYueChhKSkpOw0KCX0NCgljcHMucHVzaCgkVihbY2VudHJvaWRzW2NvbHMtMV0uZSgxKSArIGEqMiooY2VudHJvaWRzW2NvbHMtMl0uZSgxKS1jZW50cm9pZHNbY29scy0xXS5lKDEpKSwgY2VudHJvaWRzW2NvbHMtMV0uZSgyKV0pKTsNCgljcHMucHVzaChjZW50cm9pZHNbY29scyAtIDFdKTsNCg0KCXJldHVybiBjcHM7DQoNCn07cGMuc2hhZG93cyA9IGZ1bmN0aW9uKCkgew0KCWZsYWdzLnNoYWRvd3MgPSB0cnVlOw0KCXBjLmFscGhhT25CcnVzaGVkKDAuMSk7DQoJcGMucmVuZGVyKCk7DQoJcmV0dXJuIHRoaXM7DQp9Ow0KDQovLyBkcmF3IGRvdHMgd2l0aCByYWRpdXMgciBvbiB0aGUgYXhpcyBsaW5lIHdoZXJlIGRhdGEgaW50ZXJzZWN0cw0KcGMuYXhpc0RvdHMgPSBmdW5jdGlvbihyKSB7DQoJdmFyIHIgPSByIHx8IDAuMTsNCgl2YXIgY3R4ID0gcGMuY3R4Lm1hcmtzOw0KCXZhciBzdGFydEFuZ2xlID0gMDsNCgl2YXIgZW5kQW5nbGUgPSAyICogTWF0aC5QSTsNCgljdHguZ2xvYmFsQWxwaGEgPSBkMy5taW4oWyAxIC8gTWF0aC5wb3coX18uZGF0YS5sZW5ndGgsIDEgLyAyKSwgMSBdKTsNCglfXy5kYXRhLmZvckVhY2goZnVuY3Rpb24oZCkgew0KCQlkMy5lbnRyaWVzKF9fLmRpbWVuc2lvbnMpLmZvckVhY2goZnVuY3Rpb24ocCwgaSkgew0KCQkJY3R4LmJlZ2luUGF0aCgpOw0KCQkJY3R4LmFyYyhwb3NpdGlvbihwKSwgX18uZGltZW5zaW9uc1twLmtleV0ueXNjYWxlKGRbcF0pLCByLCBzdGFydEFuZ2xlLCBlbmRBbmdsZSk7DQoJCQljdHguc3Ryb2tlKCk7DQoJCQljdHguZmlsbCgpOw0KCQl9KTsNCgl9KTsNCglyZXR1cm4gdGhpczsNCn07DQoNCi8vIGRyYXcgc2luZ2xlIGN1YmljIGJlemllciBjdXJ2ZQ0KZnVuY3Rpb24gc2luZ2xlX2N1cnZlKGQsIGN0eCkgew0KDQoJdmFyIGNlbnRyb2lkcyA9IGNvbXB1dGVfY2VudHJvaWRzKGQpOw0KCXZhciBjcHMgPSBjb21wdXRlX2NvbnRyb2xfcG9pbnRzKGNlbnRyb2lkcyk7DQoNCgljdHgubW92ZVRvKGNwc1swXS5lKDEpLCBjcHNbMF0uZSgyKSk7DQoJZm9yICh2YXIgaSA9IDE7IGkgPCBjcHMubGVuZ3RoOyBpICs9IDMpIHsNCgkJaWYgKF9fLnNob3dDb250cm9sUG9pbnRzKSB7DQoJCQlmb3IgKHZhciBqID0gMDsgaiA8IDM7IGorKykgew0KCQkJCWN0eC5maWxsUmVjdChjcHNbaStqXS5lKDEpLCBjcHNbaStqXS5lKDIpLCAyLCAyKTsNCgkJCX0NCgkJfQ0KCQljdHguYmV6aWVyQ3VydmVUbyhjcHNbaV0uZSgxKSwgY3BzW2ldLmUoMiksIGNwc1tpKzFdLmUoMSksIGNwc1tpKzFdLmUoMiksIGNwc1tpKzJdLmUoMSksIGNwc1tpKzJdLmUoMikpOw0KCX0NCn07DQoNCi8vIGRyYXcgc2luZ2xlIHBvbHlsaW5lDQpmdW5jdGlvbiBjb2xvcl9wYXRoKGQsIGN0eCkgew0KCWN0eC5iZWdpblBhdGgoKTsNCglpZiAoKF9fLmJ1bmRsZURpbWVuc2lvbiAhPT0gbnVsbCAmJiBfXy5idW5kbGluZ1N0cmVuZ3RoID4gMCkgfHwgX18uc21vb3RobmVzcyA+IDApIHsNCgkJc2luZ2xlX2N1cnZlKGQsIGN0eCk7DQoJfSBlbHNlIHsNCgkJc2luZ2xlX3BhdGgoZCwgY3R4KTsNCgl9DQoJY3R4LnN0cm9rZSgpOw0KfTsNCg0KLy8gZHJhdyBtYW55IHBvbHlsaW5lcyBvZiB0aGUgc2FtZSBjb2xvcg0KZnVuY3Rpb24gcGF0aHMoZGF0YSwgY3R4KSB7DQoJY3R4LmNsZWFyUmVjdCgtMSwgLTEsIHcoKSArIDIsIGgoKSArIDIpOw0KCWN0eC5iZWdpblBhdGgoKTsNCglkYXRhLmZvckVhY2goZnVuY3Rpb24oZCkgew0KCQlpZiAoKF9fLmJ1bmRsZURpbWVuc2lvbiAhPT0gbnVsbCAmJiBfXy5idW5kbGluZ1N0cmVuZ3RoID4gMCkgfHwgX18uc21vb3RobmVzcyA+IDApIHsNCgkJCXNpbmdsZV9jdXJ2ZShkLCBjdHgpOw0KCQl9IGVsc2Ugew0KCQkJc2luZ2xlX3BhdGgoZCwgY3R4KTsNCgkJfQ0KCX0pOw0KCWN0eC5zdHJva2UoKTsNCn07DQoNCi8vIHJldHVybnMgdGhlIHktcG9zaXRpb24ganVzdCBiZXlvbmQgdGhlIHNlcGFyYXRpbmcgbnVsbCB2YWx1ZSBsaW5lDQpmdW5jdGlvbiBnZXROdWxsUG9zaXRpb24oKSB7DQoJaWYgKF9fLm51bGxWYWx1ZVNlcGFyYXRvcj09ImJvdHRvbSIpIHsNCgkJcmV0dXJuIGgoKSsxOw0KCX0gZWxzZSBpZiAoX18ubnVsbFZhbHVlU2VwYXJhdG9yPT0idG9wIikgew0KCQlyZXR1cm4gMTsNCgl9IGVsc2Ugew0KCQljb25zb2xlLmxvZygiQSB2YWx1ZSBpcyBOVUxMLCBidXQgbnVsbFZhbHVlU2VwYXJhdG9yIGlzIG5vdCBzZXQ7IHNldCBpdCB0byAnYm90dG9tJyBvciAndG9wJy4iKTsNCgl9DQoJcmV0dXJuIGgoKSsxOw0KfTsNCg0KZnVuY3Rpb24gc2luZ2xlX3BhdGgoZCwgY3R4KSB7DQoJZDMuZW50cmllcyhfXy5kaW1lbnNpb25zKS5mb3JFYWNoKGZ1bmN0aW9uKHAsIGkpIHsgIC8vcCBpc24ndCByZWFsbHkgcA0KCQlpZiAoaSA9PSAwKSB7DQoJCQljdHgubW92ZVRvKHBvc2l0aW9uKHAua2V5KSwgdHlwZW9mIGRbcC5rZXldID09J3VuZGVmaW5lZCcgPyBnZXROdWxsUG9zaXRpb24oKSA6IF9fLmRpbWVuc2lvbnNbcC5rZXldLnlzY2FsZShkW3Aua2V5XSkpOw0KCQl9IGVsc2Ugew0KCQkJY3R4LmxpbmVUbyhwb3NpdGlvbihwLmtleSksIHR5cGVvZiBkW3Aua2V5XSA9PSd1bmRlZmluZWQnID8gZ2V0TnVsbFBvc2l0aW9uKCkgOiBfXy5kaW1lbnNpb25zW3Aua2V5XS55c2NhbGUoZFtwLmtleV0pKTsNCgkJfQ0KCX0pOw0KfTsNCg0KZnVuY3Rpb24gcGF0aF9icnVzaGVkKGQsIGkpIHsNCiAgaWYgKF9fLmJydXNoZWRDb2xvciAhPT0gbnVsbCkgew0KICAgIGN0eC5icnVzaGVkLnN0cm9rZVN0eWxlID0gZDMuZnVuY3RvcihfXy5icnVzaGVkQ29sb3IpKGQsIGkpOw0KICB9IGVsc2Ugew0KICAgIGN0eC5icnVzaGVkLnN0cm9rZVN0eWxlID0gZDMuZnVuY3RvcihfXy5jb2xvcikoZCwgaSk7DQogIH0NCiAgcmV0dXJuIGNvbG9yX3BhdGgoZCwgY3R4LmJydXNoZWQpDQp9Ow0KDQpmdW5jdGlvbiBwYXRoX2ZvcmVncm91bmQoZCwgaSkgew0KICBjdHguZm9yZWdyb3VuZC5zdHJva2VTdHlsZSA9IGQzLmZ1bmN0b3IoX18uY29sb3IpKGQsIGkpOw0KCXJldHVybiBjb2xvcl9wYXRoKGQsIGN0eC5mb3JlZ3JvdW5kKTsNCn07DQoNCmZ1bmN0aW9uIHBhdGhfaGlnaGxpZ2h0KGQsIGkpIHsNCiAgY3R4LmhpZ2hsaWdodC5zdHJva2VTdHlsZSA9IGQzLmZ1bmN0b3IoX18uY29sb3IpKGQsIGkpOw0KCXJldHVybiBjb2xvcl9wYXRoKGQsIGN0eC5oaWdobGlnaHQpOw0KfTsNCnBjLmNsZWFyID0gZnVuY3Rpb24obGF5ZXIpIHsNCiAgY3R4W2xheWVyXS5jbGVhclJlY3QoMCwgMCwgdygpICsgMiwgaCgpICsgMik7DQoNCiAgLy8gVGhpcyB3aWxsIG1ha2Ugc3VyZSB0aGF0IHRoZSBmb3JlZ3JvdW5kIGl0ZW1zIGFyZSB0cmFuc3BhcmVudA0KICAvLyB3aXRob3V0IHRoZSBuZWVkIGZvciBjaGFuZ2luZyB0aGUgb3BhY2l0eSBzdHlsZSBvZiB0aGUgZm9yZWdyb3VuZCBjYW52YXMNCiAgLy8gYXMgdGhpcyB3b3VsZCBzdG9wIHRoZSBjc3Mgc3R5bGluZyBmcm9tIHdvcmtpbmcNCiAgaWYobGF5ZXIgPT09ICJicnVzaGVkIiAmJiBpc0JydXNoZWQoKSkgew0KICAgIGN0eC5icnVzaGVkLmZpbGxTdHlsZSA9IHBjLnNlbGVjdGlvbi5zdHlsZSgiYmFja2dyb3VuZC1jb2xvciIpOw0KICAgIGN0eC5icnVzaGVkLmdsb2JhbEFscGhhID0gMSAtIF9fLmFscGhhT25CcnVzaGVkOw0KICAgIGN0eC5icnVzaGVkLmZpbGxSZWN0KDAsIDAsIHcoKSArIDIsIGgoKSArIDIpOw0KICAgIGN0eC5icnVzaGVkLmdsb2JhbEFscGhhID0gX18uYWxwaGE7DQogIH0NCiAgcmV0dXJuIHRoaXM7DQp9Ow0KZDMucmViaW5kKHBjLCBheGlzLCAidGlja3MiLCAib3JpZW50IiwgInRpY2tWYWx1ZXMiLCAidGlja1N1YmRpdmlkZSIsICJ0aWNrU2l6ZSIsICJ0aWNrUGFkZGluZyIsICJ0aWNrRm9ybWF0Iik7DQoNCmZ1bmN0aW9uIGZsaXBBeGlzQW5kVXBkYXRlUENQKGRpbWVuc2lvbikgew0KICB2YXIgZyA9IHBjLnN2Zy5zZWxlY3RBbGwoIi5kaW1lbnNpb24iKTsNCg0KICBwYy5mbGlwKGRpbWVuc2lvbik7DQoNCiAgZDMuc2VsZWN0KHRoaXMucGFyZW50RWxlbWVudCkNCiAgICAudHJhbnNpdGlvbigpDQogICAgICAuZHVyYXRpb24oX18uYW5pbWF0aW9uVGltZSkNCiAgICAgIC5jYWxsKGF4aXMuc2NhbGUoX18uZGltZW5zaW9uc1tkaW1lbnNpb25dLnlzY2FsZSkpDQogICAgICAuY2FsbChheGlzLm9yaWVudChfXy5kaW1lbnNpb25zW2RpbWVuc2lvbl0ub3JpZW50KSkNCiAgICAgIC5jYWxsKGF4aXMudGlja3MoX18uZGltZW5zaW9uc1tkaW1lbnNpb25dLnRpY2tzKSkNCiAgICAgIC5jYWxsKGF4aXMuaW5uZXJUaWNrU2l6ZShfXy5kaW1lbnNpb25zW2RpbWVuc2lvbl0uaW5uZXJUaWNrU2l6ZSkpDQogICAgICAuY2FsbChheGlzLm91dGVyVGlja1NpemUoX18uZGltZW5zaW9uc1tkaW1lbnNpb25dLm91dGVyVGlja1NpemUpKQ0KICAgICAgLmNhbGwoYXhpcy50aWNrUGFkZGluZyhfXy5kaW1lbnNpb25zW2RpbWVuc2lvbl0udGlja1BhZGRpbmcpKQ0KICAgICAgLmNhbGwoYXhpcy50aWNrRm9ybWF0KF9fLmRpbWVuc2lvbnNbZGltZW5zaW9uXS50aWNrRm9ybWF0KSk7DQoNCiAgcGMucmVuZGVyKCk7DQp9DQoNCmZ1bmN0aW9uIHJvdGF0ZUxhYmVscygpIHsNCiAgaWYgKCFfXy5yb3RhdGVMYWJlbHMpIHJldHVybjsNCiAgDQogIHZhciBkZWx0YSA9IGQzLmV2ZW50LmRlbHRhWTsNCiAgZGVsdGEgPSBkZWx0YSA8IDAgPyAtNSA6IGRlbHRhOw0KICBkZWx0YSA9IGRlbHRhID4gMCA/IDUgOiBkZWx0YTsNCg0KICBfXy5kaW1lbnNpb25UaXRsZVJvdGF0aW9uICs9IGRlbHRhOw0KICBwYy5zdmcuc2VsZWN0QWxsKCJ0ZXh0LmxhYmVsIikNCiAgICAuYXR0cigidHJhbnNmb3JtIiwgInRyYW5zbGF0ZSgwLC01KSByb3RhdGUoIiArIF9fLmRpbWVuc2lvblRpdGxlUm90YXRpb24gKyAiKSIpOw0KICBkMy5ldmVudC5wcmV2ZW50RGVmYXVsdCgpOw0KfQ0KDQpmdW5jdGlvbiBkaW1lbnNpb25MYWJlbHMoZCkgew0KICByZXR1cm4gX18uZGltZW5zaW9uc1tkXS50aXRsZSA/IF9fLmRpbWVuc2lvbnNbZF0udGl0bGUgOiBkOyAgLy8gZGltZW5zaW9uIGRpc3BsYXkgbmFtZXMNCn0NCg0KcGMuY3JlYXRlQXhlcyA9IGZ1bmN0aW9uKCkgew0KICBpZiAoZykgcGMucmVtb3ZlQXhlcygpOw0KDQogIC8vIEFkZCBhIGdyb3VwIGVsZW1lbnQgZm9yIGVhY2ggZGltZW5zaW9uLg0KICBnID0gcGMuc3ZnLnNlbGVjdEFsbCgiLmRpbWVuc2lvbiIpDQogICAgICAuZGF0YShwYy5nZXRPcmRlcmVkRGltZW5zaW9uS2V5cygpLCBmdW5jdGlvbihkKSB7DQogICAgICAgIHJldHVybiBkOw0KICAgICAgfSkNCiAgICAuZW50ZXIoKS5hcHBlbmQoInN2ZzpnIikNCiAgICAgIC5hdHRyKCJjbGFzcyIsICJkaW1lbnNpb24iKQ0KICAgICAgLmF0dHIoInRyYW5zZm9ybSIsIGZ1bmN0aW9uKGQpIHsNCiAgICAgICAgcmV0dXJuICJ0cmFuc2xhdGUoIiArIHhzY2FsZShkKSArICIpIjsNCiAgICAgIH0pOw0KDQogIC8vIEFkZCBhbiBheGlzIGFuZCB0aXRsZS4NCiAgZy5hcHBlbmQoInN2ZzpnIikNCiAgICAgIC5hdHRyKCJjbGFzcyIsICJheGlzIikNCiAgICAgIC5hdHRyKCJ0cmFuc2Zvcm0iLCAidHJhbnNsYXRlKDAsMCkiKQ0KICAgICAgLmVhY2goZnVuY3Rpb24oZCkgew0KICAgICAgICB2YXIgYXhpc0VsZW1lbnQgPSBkMy5zZWxlY3QodGhpcykuY2FsbCggcGMuYXBwbHlBeGlzQ29uZmlnKGF4aXMsIF9fLmRpbWVuc2lvbnNbZF0pICk7DQoNCiAgICAgICAgYXhpc0VsZW1lbnQuc2VsZWN0QWxsKCJwYXRoIikNCiAgICAgICAgICAgIC5zdHlsZSgiZmlsbCIsICJub25lIikNCiAgICAgICAgICAgIC5zdHlsZSgic3Ryb2tlIiwgIiMyMjIiKQ0KICAgICAgICAgICAgLnN0eWxlKCJzaGFwZS1yZW5kZXJpbmciLCAiY3Jpc3BFZGdlcyIpOw0KDQogICAgICAgIGF4aXNFbGVtZW50LnNlbGVjdEFsbCgibGluZSIpDQogICAgICAgICAgICAuc3R5bGUoImZpbGwiLCAibm9uZSIpDQogICAgICAgICAgICAuc3R5bGUoInN0cm9rZSIsICIjMjIyIikNCiAgICAgICAgICAgIC5zdHlsZSgic2hhcGUtcmVuZGVyaW5nIiwgImNyaXNwRWRnZXMiKTsNCiAgICAgIH0pDQogICAgLmFwcGVuZCgic3ZnOnRleHQiKQ0KICAgICAgLmF0dHIoew0KICAgICAgICAidGV4dC1hbmNob3IiOiAibWlkZGxlIiwNCiAgICAgICAgInkiOiAwLA0KICAgICAgICAidHJhbnNmb3JtIjogInRyYW5zbGF0ZSgwLC01KSByb3RhdGUoIiArIF9fLmRpbWVuc2lvblRpdGxlUm90YXRpb24gKyAiKSIsDQogICAgICAgICJ4IjogMCwNCiAgICAgICAgImNsYXNzIjogImxhYmVsIg0KICAgICAgfSkNCiAgICAgIC50ZXh0KGRpbWVuc2lvbkxhYmVscykNCiAgICAgIC5vbigiZGJsY2xpY2siLCBmbGlwQXhpc0FuZFVwZGF0ZVBDUCkNCiAgICAgIC5vbigid2hlZWwiLCByb3RhdGVMYWJlbHMpOw0KDQogIGlmIChfXy5udWxsVmFsdWVTZXBhcmF0b3I9PSJ0b3AiKSB7DQogICAgcGMuc3ZnLmFwcGVuZCgibGluZSIpDQogICAgICAuYXR0cigieDEiLCAwKQ0KICAgICAgLmF0dHIoInkxIiwgMStfXy5udWxsVmFsdWVTZXBhcmF0b3JQYWRkaW5nLnRvcCkNCiAgICAgIC5hdHRyKCJ4MiIsIHcoKSkNCiAgICAgIC5hdHRyKCJ5MiIsIDErX18ubnVsbFZhbHVlU2VwYXJhdG9yUGFkZGluZy50b3ApDQogICAgICAuYXR0cigic3Ryb2tlLXdpZHRoIiwgMSkNCiAgICAgIC5hdHRyKCJzdHJva2UiLCAiIzc3NyIpDQogICAgICAuYXR0cigiZmlsbCIsICJub25lIikNCiAgICAgIC5hdHRyKCJzaGFwZS1yZW5kZXJpbmciLCAiY3Jpc3BFZGdlcyIpOw0KICB9IGVsc2UgaWYgKF9fLm51bGxWYWx1ZVNlcGFyYXRvcj09ImJvdHRvbSIpIHsNCiAgICBwYy5zdmcuYXBwZW5kKCJsaW5lIikNCiAgICAgIC5hdHRyKCJ4MSIsIDApDQogICAgICAuYXR0cigieTEiLCBoKCkrMS1fXy5udWxsVmFsdWVTZXBhcmF0b3JQYWRkaW5nLmJvdHRvbSkNCiAgICAgIC5hdHRyKCJ4MiIsIHcoKSkNCiAgICAgIC5hdHRyKCJ5MiIsIGgoKSsxLV9fLm51bGxWYWx1ZVNlcGFyYXRvclBhZGRpbmcuYm90dG9tKQ0KICAgICAgLmF0dHIoInN0cm9rZS13aWR0aCIsIDEpDQogICAgICAuYXR0cigic3Ryb2tlIiwgIiM3NzciKQ0KICAgICAgLmF0dHIoImZpbGwiLCAibm9uZSIpDQogICAgICAuYXR0cigic2hhcGUtcmVuZGVyaW5nIiwgImNyaXNwRWRnZXMiKTsNCiAgfQ0KDQogIGZsYWdzLmF4ZXM9IHRydWU7DQogIHJldHVybiB0aGlzOw0KfTsNCg0KcGMucmVtb3ZlQXhlcyA9IGZ1bmN0aW9uKCkgew0KICBnLnJlbW92ZSgpOw0KICBnID0gdW5kZWZpbmVkOw0KICByZXR1cm4gdGhpczsNCn07DQoNCnBjLnVwZGF0ZUF4ZXMgPSBmdW5jdGlvbihhbmltYXRpb25UaW1lKSB7DQogIGlmICh0eXBlb2YgYW5pbWF0aW9uVGltZSA9PT0gJ3VuZGVmaW5lZCcpIHsNCiAgICBhbmltYXRpb25UaW1lID0gX18uYW5pbWF0aW9uVGltZTsNCiAgfQ0KDQogIHZhciBnX2RhdGEgPSBwYy5zdmcuc2VsZWN0QWxsKCIuZGltZW5zaW9uIikuZGF0YShwYy5nZXRPcmRlcmVkRGltZW5zaW9uS2V5cygpKTsNCg0KICAvLyBFbnRlcg0KICBnX2RhdGEuZW50ZXIoKS5hcHBlbmQoInN2ZzpnIikNCiAgICAgIC5hdHRyKCJjbGFzcyIsICJkaW1lbnNpb24iKQ0KICAgICAgLmF0dHIoInRyYW5zZm9ybSIsIGZ1bmN0aW9uKHApIHsgcmV0dXJuICJ0cmFuc2xhdGUoIiArIHBvc2l0aW9uKHApICsgIikiOyB9KQ0KICAgICAgLnN0eWxlKCJvcGFjaXR5IiwgMCkNCiAgICAuYXBwZW5kKCJzdmc6ZyIpDQogICAgICAuYXR0cigiY2xhc3MiLCAiYXhpcyIpDQogICAgICAuYXR0cigidHJhbnNmb3JtIiwgInRyYW5zbGF0ZSgwLDApIikNCiAgICAgIC5lYWNoKGZ1bmN0aW9uKGQpIHsNCiAgICAgICAgdmFyIGF4aXNFbGVtZW50ID0gZDMuc2VsZWN0KHRoaXMpLmNhbGwoIHBjLmFwcGx5QXhpc0NvbmZpZyhheGlzLCBfXy5kaW1lbnNpb25zW2RdKSApOw0KDQogICAgICAgIGF4aXNFbGVtZW50LnNlbGVjdEFsbCgicGF0aCIpDQogICAgICAgICAgICAuc3R5bGUoImZpbGwiLCAibm9uZSIpDQogICAgICAgICAgICAuc3R5bGUoInN0cm9rZSIsICIjMjIyIikNCiAgICAgICAgICAgIC5zdHlsZSgic2hhcGUtcmVuZGVyaW5nIiwgImNyaXNwRWRnZXMiKTsNCg0KICAgICAgICBheGlzRWxlbWVudC5zZWxlY3RBbGwoImxpbmUiKQ0KICAgICAgICAgICAgLnN0eWxlKCJmaWxsIiwgIm5vbmUiKQ0KICAgICAgICAgICAgLnN0eWxlKCJzdHJva2UiLCAiIzIyMiIpDQogICAgICAgICAgICAuc3R5bGUoInNoYXBlLXJlbmRlcmluZyIsICJjcmlzcEVkZ2VzIik7DQogICAgICB9KQ0KICAgIC5hcHBlbmQoInN2Zzp0ZXh0IikNCiAgICAgIC5hdHRyKHsNCiAgICAgICAgInRleHQtYW5jaG9yIjogIm1pZGRsZSIsDQogICAgICAgICJ5IjogMCwNCiAgICAgICAgInRyYW5zZm9ybSI6ICJ0cmFuc2xhdGUoMCwtNSkgcm90YXRlKCIgKyBfXy5kaW1lbnNpb25UaXRsZVJvdGF0aW9uICsgIikiLA0KICAgICAgICAieCI6IDAsDQogICAgICAgICJjbGFzcyI6ICJsYWJlbCINCiAgICAgIH0pDQogICAgICAudGV4dChkaW1lbnNpb25MYWJlbHMpDQogICAgICAub24oImRibGNsaWNrIiwgZmxpcEF4aXNBbmRVcGRhdGVQQ1ApDQogICAgICAub24oIndoZWVsIiwgcm90YXRlTGFiZWxzKTsNCg0KICAvLyBVcGRhdGUNCiAgZ19kYXRhLmF0dHIoIm9wYWNpdHkiLCAwKTsNCiAgZ19kYXRhLnNlbGVjdCgiLmF4aXMiKQ0KICAgIC50cmFuc2l0aW9uKCkNCiAgICAgIC5kdXJhdGlvbihhbmltYXRpb25UaW1lKQ0KICAgICAgLmVhY2goZnVuY3Rpb24oZCkgeyBkMy5zZWxlY3QodGhpcykuY2FsbCggcGMuYXBwbHlBeGlzQ29uZmlnKGF4aXMsIF9fLmRpbWVuc2lvbnNbZF0pICkNCiAgICAgIH0pOw0KICBnX2RhdGEuc2VsZWN0KCIubGFiZWwiKQ0KICAgIC50cmFuc2l0aW9uKCkNCiAgICAgIC5kdXJhdGlvbihhbmltYXRpb25UaW1lKQ0KICAgICAgLnRleHQoZGltZW5zaW9uTGFiZWxzKQ0KICAgICAgLmF0dHIoInRyYW5zZm9ybSIsICJ0cmFuc2xhdGUoMCwtNSkgcm90YXRlKCIgKyBfXy5kaW1lbnNpb25UaXRsZVJvdGF0aW9uICsgIikiKTsNCg0KICAvLyBFeGl0DQogIGdfZGF0YS5leGl0KCkucmVtb3ZlKCk7DQoNCiAgZyA9IHBjLnN2Zy5zZWxlY3RBbGwoIi5kaW1lbnNpb24iKTsNCiAgZy50cmFuc2l0aW9uKCkuZHVyYXRpb24oYW5pbWF0aW9uVGltZSkNCiAgICAuYXR0cigidHJhbnNmb3JtIiwgZnVuY3Rpb24ocCkgeyByZXR1cm4gInRyYW5zbGF0ZSgiICsgcG9zaXRpb24ocCkgKyAiKSI7IH0pDQogICAgLnN0eWxlKCJvcGFjaXR5IiwgMSk7DQoNCiAgcGMuc3ZnLnNlbGVjdEFsbCgiLmF4aXMiKQ0KICAgIC50cmFuc2l0aW9uKCkNCiAgICAgIC5kdXJhdGlvbihhbmltYXRpb25UaW1lKQ0KICAgICAgLmVhY2goZnVuY3Rpb24oZCkgeyBkMy5zZWxlY3QodGhpcykuY2FsbCggcGMuYXBwbHlBeGlzQ29uZmlnKGF4aXMsIF9fLmRpbWVuc2lvbnNbZF0pICk7DQogICAgICB9KTsNCg0KICBpZiAoZmxhZ3MuYnJ1c2hhYmxlKSBwYy5icnVzaGFibGUoKTsNCiAgaWYgKGZsYWdzLnJlb3JkZXJhYmxlKSBwYy5yZW9yZGVyYWJsZSgpOw0KICBpZiAocGMuYnJ1c2hNb2RlKCkgIT09ICJOb25lIikgew0KICAgIHZhciBtb2RlID0gcGMuYnJ1c2hNb2RlKCk7DQogICAgcGMuYnJ1c2hNb2RlKCJOb25lIik7DQogICAgcGMuYnJ1c2hNb2RlKG1vZGUpOw0KICB9DQogIHJldHVybiB0aGlzOw0KfTsNCg0KcGMuYXBwbHlBeGlzQ29uZmlnID0gZnVuY3Rpb24oYXhpcywgZGltZW5zaW9uKSB7DQogIHJldHVybiBheGlzLnNjYWxlKGRpbWVuc2lvbi55c2NhbGUpDQogICAgLm9yaWVudChkaW1lbnNpb24ub3JpZW50KQ0KICAgIC50aWNrcyhkaW1lbnNpb24udGlja3MpDQogICAgLnRpY2tWYWx1ZXMoZGltZW5zaW9uLnRpY2tWYWx1ZXMpDQogICAgLmlubmVyVGlja1NpemUoZGltZW5zaW9uLmlubmVyVGlja1NpemUpDQogICAgLm91dGVyVGlja1NpemUoZGltZW5zaW9uLm91dGVyVGlja1NpemUpDQogICAgLnRpY2tQYWRkaW5nKGRpbWVuc2lvbi50aWNrUGFkZGluZykNCiAgICAudGlja0Zvcm1hdChkaW1lbnNpb24udGlja0Zvcm1hdCkNCn07DQoNCi8vIEphc29uIERhdmllcywgaHR0cDovL2JsLm9ja3Mub3JnLzEzNDEyODENCnBjLnJlb3JkZXJhYmxlID0gZnVuY3Rpb24oKSB7DQogIGlmICghZykgcGMuY3JlYXRlQXhlcygpOw0KDQogIGcuc3R5bGUoImN1cnNvciIsICJtb3ZlIikNCiAgICAuY2FsbChkMy5iZWhhdmlvci5kcmFnKCkNCiAgICAgIC5vbigiZHJhZ3N0YXJ0IiwgZnVuY3Rpb24oZCkgew0KICAgICAgICBkcmFnZ2luZ1tkXSA9IHRoaXMuX19vcmlnaW5fXyA9IHhzY2FsZShkKTsNCiAgICAgIH0pDQogICAgICAub24oImRyYWciLCBmdW5jdGlvbihkKSB7DQogICAgICAgIGRyYWdnaW5nW2RdID0gTWF0aC5taW4odygpLCBNYXRoLm1heCgwLCB0aGlzLl9fb3JpZ2luX18gKz0gZDMuZXZlbnQuZHgpKTsNCiAgICAgICAgcGMuc29ydERpbWVuc2lvbnMoKTsNCiAgICAgICAgeHNjYWxlLmRvbWFpbihwYy5nZXRPcmRlcmVkRGltZW5zaW9uS2V5cygpKTsNCiAgICAgICAgcGMucmVuZGVyKCk7DQogICAgICAgIGcuYXR0cigidHJhbnNmb3JtIiwgZnVuY3Rpb24oZCkgew0KICAgICAgICAgIHJldHVybiAidHJhbnNsYXRlKCIgKyBwb3NpdGlvbihkKSArICIpIjsNCiAgICAgICAgfSk7DQogICAgICB9KQ0KICAgICAgLm9uKCJkcmFnZW5kIiwgZnVuY3Rpb24oZCkgew0KICAgICAgICAvLyBMZXQncyBzZWUgaWYgdGhlIG9yZGVyIGhhcyBjaGFuZ2VkIGFuZCBzZW5kIG91dCBhbiBldmVudCBpZiBzby4NCiAgICAgICAgdmFyIGkgPSAwLA0KICAgICAgICAgICAgaiA9IF9fLmRpbWVuc2lvbnNbZF0uaW5kZXgsDQogICAgICAgICAgICBlbGVtID0gdGhpcywNCiAgICAgICAgICAgIHBhcmVudCA9IHRoaXMucGFyZW50RWxlbWVudDsNCg0KICAgICAgICB3aGlsZSgoZWxlbSA9IGVsZW0ucHJldmlvdXNFbGVtZW50U2libGluZykgIT0gbnVsbCkgKytpOw0KICAgICAgICBpZiAoaSAhPT0gaikgew0KICAgICAgICAgIGV2ZW50cy5heGVzcmVvcmRlci5jYWxsKHBjLCBwYy5nZXRPcmRlcmVkRGltZW5zaW9uS2V5cygpKTsNCiAgICAgICAgICAvLyBXZSBub3cgYWxzbyB3YW50IHRvIHJlb3JkZXIgdGhlIGFjdHVhbCBkb20gZWxlbWVudHMgdGhhdCByZXByZXNlbnQNCiAgICAgICAgICAvLyB0aGUgYXhlcy4gVGhhdCBpcywgdGhlIGcuZGltZW5zaW9uIGVsZW1lbnRzLiBJZiB3ZSBkb24ndCBkbyB0aGlzLA0KICAgICAgICAgIC8vIHdlIGdldCBhIHdlaXJkIGFuZCBjb25mdXNpbmcgdHJhbnNpdGlvbiB3aGVuIHVwZGF0ZUF4ZXMgaXMgY2FsbGVkLg0KICAgICAgICAgIC8vIFRoaXMgaXMgZHVlIHRvIHRoZSBmYWN0IHRoYXQsIGluaXRpYWxseSB0aGUgbnRoIGcuZGltZW5zaW9uIGVsZW1lbnQNCiAgICAgICAgICAvLyByZXByZXNlbnRzIHRoZSBudGggYXhpcy4gSG93ZXZlciwgYWZ0ZXIgYSBtYW51YWwgcmVvcmRlcmluZywNCiAgICAgICAgICAvLyB3aXRob3V0IHJlb3JkZXJpbmcgdGhlIGRvbSBlbGVtZW50cywgdGhlIG50aCBkb20gZWxlbWVudHMgbm8gbG9uZ2VyDQogICAgICAgICAgLy8gbmVjZXNzYXJpbHkgcmVwcmVzZW50cyB0aGUgbnRoIGF4aXMuDQogICAgICAgICAgLy8NCiAgICAgICAgICAvLyBpIGlzIHRoZSBvcmlnaW5hbCBpbmRleCBvZiB0aGUgZG9tIGVsZW1lbnQNCiAgICAgICAgICAvLyBqIGlzIHRoZSBuZXcgaW5kZXggb2YgdGhlIGRvbSBlbGVtZW50DQogICAgICAgICAgaWYgKGkgPiBqKSB7IC8vIEVsZW1lbnQgbW92ZWQgbGVmdA0KICAgICAgICAgICAgcGFyZW50Lmluc2VydEJlZm9yZSh0aGlzLCBwYXJlbnQuY2hpbGRyZW5baiAtIDFdKTsNCiAgICAgICAgICB9IGVsc2UgeyAgICAgLy8gRWxlbWVudCBtb3ZlZCByaWdodA0KICAgICAgICAgICAgaWYgKChqICsgMSkgPCBwYXJlbnQuY2hpbGRyZW4ubGVuZ3RoKSB7DQogICAgICAgICAgICAgIHBhcmVudC5pbnNlcnRCZWZvcmUodGhpcywgcGFyZW50LmNoaWxkcmVuW2ogKyAxXSk7DQogICAgICAgICAgICB9IGVsc2Ugew0KICAgICAgICAgICAgICBwYXJlbnQuYXBwZW5kQ2hpbGQodGhpcyk7DQogICAgICAgICAgICB9DQogICAgICAgICAgfQ0KICAgICAgICB9DQoNCiAgICAgICAgZGVsZXRlIHRoaXMuX19vcmlnaW5fXzsNCiAgICAgICAgZGVsZXRlIGRyYWdnaW5nW2RdOw0KICAgICAgICBkMy5zZWxlY3QodGhpcykudHJhbnNpdGlvbigpLmF0dHIoInRyYW5zZm9ybSIsICJ0cmFuc2xhdGUoIiArIHhzY2FsZShkKSArICIpIik7DQogICAgICAgIHBjLnJlbmRlcigpOw0KICAgICAgfSkpOw0KICBmbGFncy5yZW9yZGVyYWJsZSA9IHRydWU7DQogIHJldHVybiB0aGlzOw0KfTsNCg0KLy8gUmVvcmRlciBkaW1lbnNpb25zLCBzdWNoIHRoYXQgdGhlIGhpZ2hlc3QgdmFsdWUgKHZpc3VhbGx5KSBpcyBvbiB0aGUgbGVmdCBhbmQNCi8vIHRoZSBsb3dlc3Qgb24gdGhlIHJpZ2h0LiBWaXN1YWwgdmFsdWVzIGFyZSBkZXRlcm1pbmVkIGJ5IHRoZSBkYXRhIHZhbHVlcyBpbg0KLy8gdGhlIGdpdmVuIHJvdy4NCnBjLnJlb3JkZXIgPSBmdW5jdGlvbihyb3dkYXRhKSB7DQogIHZhciBmaXJzdERpbSA9IHBjLmdldE9yZGVyZWREaW1lbnNpb25LZXlzKClbMF07DQoNCiAgcGMuc29ydERpbWVuc2lvbnNCeVJvd0RhdGEocm93ZGF0YSk7DQogIC8vIE5PVEU6IHRoaXMgaXMgcmVsYXRpdmVseSBjaGVhcCBnaXZlbiB0aGF0Og0KICAvLyBudW1iZXIgb2YgZGltZW5zaW9ucyA8IG51bWJlciBvZiBkYXRhIGl0ZW1zDQogIC8vIFRodXMgd2UgY2hlY2sgZXF1YWxpdHkgb2Ygb3JkZXIgdG8gcHJldmVudCByZXJlbmRlcmluZyB3aGVuIHRoaXMgaXMgdGhlIGNhc2UuDQogIHZhciByZW9yZGVyZWQgPSBmYWxzZTsNCiAgcmVvcmRlcmVkID0gZmlyc3REaW0gIT09IHBjLmdldE9yZGVyZWREaW1lbnNpb25LZXlzKClbMF07DQoNCiAgaWYgKHJlb3JkZXJlZCkgew0KICAgIHhzY2FsZS5kb21haW4ocGMuZ2V0T3JkZXJlZERpbWVuc2lvbktleXMoKSk7DQogICAgdmFyIGhpZ2hsaWdodGVkID0gX18uaGlnaGxpZ2h0ZWQuc2xpY2UoMCk7DQogICAgcGMudW5oaWdobGlnaHQoKTsNCg0KICAgIGcudHJhbnNpdGlvbigpDQogICAgICAuZHVyYXRpb24oMTUwMCkNCiAgICAgIC5hdHRyKCJ0cmFuc2Zvcm0iLCBmdW5jdGlvbihkKSB7DQogICAgICAgIHJldHVybiAidHJhbnNsYXRlKCIgKyB4c2NhbGUoZCkgKyAiKSI7DQogICAgICB9KTsNCiAgICBwYy5yZW5kZXIoKTsNCg0KICAgIC8vIHBjLmhpZ2hsaWdodCgpIGRvZXMgbm90IGNoZWNrIHdoZXRoZXIgaGlnaGxpZ2h0ZWQgaXMgbGVuZ3RoIHplcm8sIHNvIHdlIGRvIHRoYXQgaGVyZS4NCiAgICBpZiAoaGlnaGxpZ2h0ZWQubGVuZ3RoICE9PSAwKSB7DQogICAgICBwYy5oaWdobGlnaHQoaGlnaGxpZ2h0ZWQpOw0KICAgIH0NCiAgfQ0KfQ0KDQpwYy5zb3J0RGltZW5zaW9uc0J5Um93RGF0YSA9IGZ1bmN0aW9uKHJvd2RhdGEpIHsNCiAgdmFyIGNvcHkgPSBfXy5kaW1lbnNpb25zOw0KICB2YXIgcG9zaXRpb25Tb3J0ZWRLZXlzID0gZDMua2V5cyhfXy5kaW1lbnNpb25zKS5zb3J0KGZ1bmN0aW9uKGEsIGIpIHsNCiAgICB2YXIgcGl4ZWxEaWZmZXJlbmNlID0gX18uZGltZW5zaW9uc1thXS55c2NhbGUocm93ZGF0YVthXSkgLSBfXy5kaW1lbnNpb25zW2JdLnlzY2FsZShyb3dkYXRhW2JdKTsNCg0KICAgIC8vIEFycmF5LnNvcnQgaXMgbm90IG5lY2Vzc2FyaWx5IHN0YWJsZSwgdGhpcyBtZWFucyB0aGF0IGlmIHBpeGVsRGlmZmVyZW5jZSBpcyB6ZXJvDQogICAgLy8gdGhlIG9yZGVyaW5nIG9mIGRpbWVuc2lvbnMgbWlnaHQgY2hhbmdlIHVuZXhwZWN0ZWRseS4gVGhpcyBpcyBzb2x2ZWQgYnkgc29ydGluZyBvbg0KICAgIC8vIHZhcmlhYmxlIG5hbWUgaW4gdGhhdCBjYXNlLg0KICAgIGlmIChwaXhlbERpZmZlcmVuY2UgPT09IDApIHsNCiAgICAgIHJldHVybiBhLmxvY2FsZUNvbXBhcmUoYik7DQogICAgfSAvLyBlbHNlDQogICAgcmV0dXJuIHBpeGVsRGlmZmVyZW5jZTsNCiAgfSk7DQogIF9fLmRpbWVuc2lvbnMgPSB7fTsNCiAgcG9zaXRpb25Tb3J0ZWRLZXlzLmZvckVhY2goZnVuY3Rpb24ocCwgaSl7DQogICAgX18uZGltZW5zaW9uc1twXSA9IGNvcHlbcF07DQogICAgX18uZGltZW5zaW9uc1twXS5pbmRleCA9IGk7DQogIH0pOw0KfQ0KDQpwYy5zb3J0RGltZW5zaW9ucyA9IGZ1bmN0aW9uKCkgew0KICB2YXIgY29weSA9IF9fLmRpbWVuc2lvbnM7DQogIHZhciBwb3NpdGlvblNvcnRlZEtleXMgPSBkMy5rZXlzKF9fLmRpbWVuc2lvbnMpLnNvcnQoZnVuY3Rpb24oYSwgYikgew0KICAgIHJldHVybiBwb3NpdGlvbihhKSAtIHBvc2l0aW9uKGIpOw0KICB9KTsNCiAgX18uZGltZW5zaW9ucyA9IHt9Ow0KICBwb3NpdGlvblNvcnRlZEtleXMuZm9yRWFjaChmdW5jdGlvbihwLCBpKXsNCiAgICBfXy5kaW1lbnNpb25zW3BdID0gY29weVtwXTsNCiAgICBfXy5kaW1lbnNpb25zW3BdLmluZGV4ID0gaTsNCiAgfSkNCn07DQoNCi8vIHBhaXJzIG9mIGFkamFjZW50IGRpbWVuc2lvbnMNCnBjLmFkamFjZW50X3BhaXJzID0gZnVuY3Rpb24oYXJyKSB7DQogIHZhciByZXQgPSBbXTsNCiAgZm9yICh2YXIgaSA9IDA7IGkgPCBhcnIubGVuZ3RoLTE7IGkrKykgew0KICAgIHJldC5wdXNoKFthcnJbaV0sYXJyW2krMV1dKTsNCiAgfTsNCiAgcmV0dXJuIHJldDsNCn07DQoNCnZhciBicnVzaCA9IHsNCiAgbW9kZXM6IHsNCiAgICAiTm9uZSI6IHsNCiAgICAgIGluc3RhbGw6IGZ1bmN0aW9uKHBjKSB7fSwgICAgICAgICAgICAvLyBOb3RoaW5nIHRvIGJlIGRvbmUuDQogICAgICB1bmluc3RhbGw6IGZ1bmN0aW9uKHBjKSB7fSwgICAgICAgICAgLy8gTm90aGluZyB0byBiZSBkb25lLg0KICAgICAgc2VsZWN0ZWQ6IGZ1bmN0aW9uKCkgeyByZXR1cm4gW107IH0sIC8vIE5vdGhpbmcgdG8gcmV0dXJuDQogICAgICBicnVzaFN0YXRlOiBmdW5jdGlvbigpIHsgcmV0dXJuIHt9OyB9DQogICAgfQ0KICB9LA0KICBtb2RlOiAiTm9uZSIsDQogIHByZWRpY2F0ZTogIkFORCIsDQogIGN1cnJlbnRNb2RlOiBmdW5jdGlvbigpIHsNCiAgICByZXR1cm4gdGhpcy5tb2Rlc1t0aGlzLm1vZGVdOw0KICB9DQp9Ow0KDQovLyBUaGlzIGZ1bmN0aW9uIGNhbiBiZSB1c2VkIGZvciAnbGl2ZScgdXBkYXRlcyBvZiBicnVzaGVzLiBUaGF0IGlzLCBkdXJpbmcgdGhlDQovLyBzcGVjaWZpY2F0aW9uIG9mIGEgYnJ1c2gsIHRoaXMgbWV0aG9kIGNhbiBiZSBjYWxsZWQgdG8gdXBkYXRlIHRoZSB2aWV3Lg0KLy8NCi8vIEBwYXJhbSBuZXdTZWxlY3Rpb24gLSBUaGUgbmV3IHNldCBvZiBkYXRhIGl0ZW1zIHRoYXQgaXMgY3VycmVudGx5IGNvbnRhaW5lZA0KLy8gICAgICAgICAgICAgICAgICAgICAgIGJ5IHRoZSBicnVzaGVzDQpmdW5jdGlvbiBicnVzaFVwZGF0ZWQobmV3U2VsZWN0aW9uLCBicnVzaF9lbCkgew0KICAvLyBpZiBvdXRzaWRlIGZpbHRlcnMgc2V0IHRoZW4gYXBwbHkgdGhlc2Ugb3V0c2lkZSBmaWx0ZXJzDQogIGlmKF9fLm91dHNpZGVGaWx0ZXJzKSB7DQogICAgbmV3U2VsZWN0aW9uID0gbmV3U2VsZWN0aW9uLmZpbHRlcihmdW5jdGlvbihkKSB7DQogICAgICByZXR1cm4gZDMua2V5cyhfXy5vdXRzaWRlRmlsdGVycykuZXZlcnkoZnVuY3Rpb24oZGltLCBpKSB7DQogICAgICAgIHJldHVybiBfXy5vdXRzaWRlRmlsdGVyc1tkaW1dLmluZGV4T2YoZFtkaW1dKSA+IC0xDQogICAgICB9KQ0KICAgIH0pDQogIH0NCiAgDQogIF9fLmJydXNoZWQgPSBuZXdTZWxlY3Rpb247DQogIGV2ZW50cy5icnVzaC5jYWxsKHBjLF9fLmJydXNoZWQsIGJydXNoX2VsKTsNCiAgcGMucmVuZGVyQnJ1c2hlZCgpOw0KfQ0KDQogICAgICAgIA0KLy8gYWRkIGJydXNoVXBkYXRlZCB0byBvdXIgcGFyY29vZHMNCi8vICAgdG8gbWFrZSBpdCBhY2Nlc3NpYmxlIGZyb20gb3V0c2lkZQ0KcGMuYnJ1c2hVcGRhdGVkID0gYnJ1c2hVcGRhdGVkDQoNCmZ1bmN0aW9uIGJydXNoUHJlZGljYXRlKHByZWRpY2F0ZSkgew0KICBpZiAoIWFyZ3VtZW50cy5sZW5ndGgpIHsgcmV0dXJuIGJydXNoLnByZWRpY2F0ZTsgfQ0KDQogIHByZWRpY2F0ZSA9IFN0cmluZyhwcmVkaWNhdGUpLnRvVXBwZXJDYXNlKCk7DQogIGlmIChwcmVkaWNhdGUgIT09ICJBTkQiICYmIHByZWRpY2F0ZSAhPT0gIk9SIikgew0KICAgIHRocm93IG5ldyBFcnJvcigiSW52YWxpZCBwcmVkaWNhdGUgIiArIHByZWRpY2F0ZSk7DQogIH0NCg0KICBicnVzaC5wcmVkaWNhdGUgPSBwcmVkaWNhdGU7DQogIF9fLmJydXNoZWQgPSBicnVzaC5jdXJyZW50TW9kZSgpLnNlbGVjdGVkKCk7DQogIHBjLnJlbmRlckJydXNoZWQoKTsNCiAgcmV0dXJuIHBjOw0KfQ0KDQpwYy5icnVzaE1vZGVzID0gZnVuY3Rpb24oKSB7DQogIHJldHVybiBPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyhicnVzaC5tb2Rlcyk7DQp9Ow0KDQpwYy5icnVzaE1vZGUgPSBmdW5jdGlvbihtb2RlKSB7DQogIGlmIChhcmd1bWVudHMubGVuZ3RoID09PSAwKSB7DQogICAgcmV0dXJuIGJydXNoLm1vZGU7DQogIH0NCg0KICBpZiAocGMuYnJ1c2hNb2RlcygpLmluZGV4T2YobW9kZSkgPT09IC0xKSB7DQogICAgdGhyb3cgbmV3IEVycm9yKCJwYy5icnVzaG1vZGU6IFVuc3VwcG9ydGVkIGJydXNoIG1vZGU6ICIgKyBtb2RlKTsNCiAgfQ0KDQogIC8vIE1ha2Ugc3VyZSB0aGF0IHdlIGRvbid0IHRyaWdnZXIgdW5uZWNlc3NhcnkgZXZlbnRzIGJ5IGNoZWNraW5nIGlmIHRoZSBtb2RlDQogIC8vIGFjdHVhbGx5IGNoYW5nZXMuDQogIGlmIChtb2RlICE9PSBicnVzaC5tb2RlKSB7DQogICAgLy8gV2hlbiBjaGFuZ2luZyBicnVzaCBtb2RlcywgdGhlIGZpcnN0IHRoaW5nIHdlIG5lZWQgdG8gZG8gaXMgY2xlYXJpbmcgYW55DQogICAgLy8gYnJ1c2hlcyBmcm9tIHRoZSBjdXJyZW50IG1vZGUsIGlmIGFueS4NCiAgICBpZiAoYnJ1c2gubW9kZSAhPT0gIk5vbmUiKSB7DQogICAgICBwYy5icnVzaFJlc2V0KCk7DQogICAgfQ0KDQogICAgLy8gTmV4dCwgd2UgbmVlZCB0byAndW5pbnN0YWxsJyB0aGUgY3VycmVudCBicnVzaE1vZGUuDQogICAgYnJ1c2gubW9kZXNbYnJ1c2gubW9kZV0udW5pbnN0YWxsKHBjKTsNCiAgICAvLyBGaW5hbGx5LCB3ZSBjYW4gaW5zdGFsbCB0aGUgcmVxdWVzdGVkIG9uZS4NCiAgICBicnVzaC5tb2RlID0gbW9kZTsNCiAgICBicnVzaC5tb2Rlc1ticnVzaC5tb2RlXS5pbnN0YWxsKCk7DQogICAgaWYgKG1vZGUgPT09ICJOb25lIikgew0KICAgICAgZGVsZXRlIHBjLmJydXNoUHJlZGljYXRlOw0KICAgIH0gZWxzZSB7DQogICAgICBwYy5icnVzaFByZWRpY2F0ZSA9IGJydXNoUHJlZGljYXRlOw0KICAgIH0NCiAgfQ0KDQogIHJldHVybiBwYzsNCn07DQoNCi8vIGJydXNoIG1vZGU6IDFELUF4ZXMNCg0KKGZ1bmN0aW9uKCkgew0KCXZhciBicnVzaGVzID0ge307DQoNCglmdW5jdGlvbiBpc19icnVzaGVkKHApIHsNCgkJcmV0dXJuICFicnVzaGVzW3BdLmVtcHR5KCk7DQoJfQ0KDQogIC8vIGRhdGEgd2l0aGluIGV4dGVudHMNCiAgZnVuY3Rpb24gc2VsZWN0ZWQoKSB7DQogICAgdmFyIGFjdGl2ZXMgPSBkMy5rZXlzKF9fLmRpbWVuc2lvbnMpLmZpbHRlcihpc19icnVzaGVkKSwNCiAgICAgICAgZXh0ZW50cyA9IGFjdGl2ZXMubWFwKGZ1bmN0aW9uKHApIHsgcmV0dXJuIGJydXNoZXNbcF0uZXh0ZW50KCk7IH0pOw0KDQoJCS8vIFdlIGRvbid0IHdhbnQgdG8gcmV0dXJuIHRoZSBmdWxsIGRhdGEgc2V0IHdoZW4gdGhlcmUgYXJlIG5vIGF4ZXMgYnJ1c2hlZC4NCgkJLy8gQWN0dWFsbHksIHdoZW4gdGhlcmUgYXJlIG5vIGF4ZXMgYnJ1c2hlZCwgYnkgZGVmaW5pdGlvbiwgbm8gaXRlbXMgYXJlDQoJCS8vIHNlbGVjdGVkLiBTbywgbGV0J3MgYXZvaWQgdGhlIGZpbHRlcmluZyBhbmQganVzdCByZXR1cm4gZmFsc2UuDQoJCS8vaWYgKGFjdGl2ZXMubGVuZ3RoID09PSAwKSByZXR1cm4gZmFsc2U7DQoNCgkJLy8gUmVzb2x2ZXMgYnJva2VuIGV4YW1wbGVzIGZvciBub3cuIFRoZXkgZXhwZWN0IHRvIGdldCB0aGUgZnVsbCBkYXRhc2V0IGJhY2sgZnJvbSBlbXB0eSBicnVzaGVzDQoJCWlmIChhY3RpdmVzLmxlbmd0aCA9PT0gMCkgcmV0dXJuIF9fLmRhdGE7DQoNCgkJLy8gdGVzdCBpZiB3aXRoaW4gcmFuZ2UNCgkJdmFyIHdpdGhpbiA9IHsNCgkJCSJkYXRlIjogZnVuY3Rpb24oZCxwLGRpbWVuc2lvbikgew0KCWlmICh0eXBlb2YgX18uZGltZW5zaW9uc1twXS55c2NhbGUucmFuZ2VQb2ludHMgPT09ICJmdW5jdGlvbiIpIHsgLy8gaWYgaXQgaXMgb3JkaW5hbA0KICAgICAgICAgIHJldHVybiBleHRlbnRzW2RpbWVuc2lvbl1bMF0gPD0gX18uZGltZW5zaW9uc1twXS55c2NhbGUoZFtwXSkgJiYgX18uZGltZW5zaW9uc1twXS55c2NhbGUoZFtwXSkgPD0gZXh0ZW50c1tkaW1lbnNpb25dWzFdDQogICAgICAgIH0gZWxzZSB7DQogICAgICAgICAgcmV0dXJuIGV4dGVudHNbZGltZW5zaW9uXVswXSA8PSBkW3BdICYmIGRbcF0gPD0gZXh0ZW50c1tkaW1lbnNpb25dWzFdDQogICAgICAgIH0NCiAgICAgIH0sDQogICAgICAibnVtYmVyIjogZnVuY3Rpb24oZCxwLGRpbWVuc2lvbikgew0KICAgICAgICBpZiAodHlwZW9mIF9fLmRpbWVuc2lvbnNbcF0ueXNjYWxlLnJhbmdlUG9pbnRzID09PSAiZnVuY3Rpb24iKSB7IC8vIGlmIGl0IGlzIG9yZGluYWwNCiAgICAgICAgICByZXR1cm4gZXh0ZW50c1tkaW1lbnNpb25dWzBdIDw9IF9fLmRpbWVuc2lvbnNbcF0ueXNjYWxlKGRbcF0pICYmIF9fLmRpbWVuc2lvbnNbcF0ueXNjYWxlKGRbcF0pIDw9IGV4dGVudHNbZGltZW5zaW9uXVsxXQ0KICAgICAgICB9IGVsc2Ugew0KICAgICAgICAgIHJldHVybiBleHRlbnRzW2RpbWVuc2lvbl1bMF0gPD0gZFtwXSAmJiBkW3BdIDw9IGV4dGVudHNbZGltZW5zaW9uXVsxXQ0KICAgICAgICB9DQogICAgICB9LA0KICAgICAgInN0cmluZyI6IGZ1bmN0aW9uKGQscCxkaW1lbnNpb24pIHsNCiAgICAgICAgcmV0dXJuIGV4dGVudHNbZGltZW5zaW9uXVswXSA8PSBfXy5kaW1lbnNpb25zW3BdLnlzY2FsZShkW3BdKSAmJiBfXy5kaW1lbnNpb25zW3BdLnlzY2FsZShkW3BdKSA8PSBleHRlbnRzW2RpbWVuc2lvbl1bMV0NCiAgICAgIH0NCiAgICB9Ow0KDQogICAgcmV0dXJuIF9fLmRhdGENCiAgICAgIC5maWx0ZXIoZnVuY3Rpb24oZCkgew0KICAgICAgICBzd2l0Y2goYnJ1c2gucHJlZGljYXRlKSB7DQogICAgICAgIGNhc2UgIkFORCI6DQogICAgICAgICAgcmV0dXJuIGFjdGl2ZXMuZXZlcnkoZnVuY3Rpb24ocCwgZGltZW5zaW9uKSB7DQogICAgICAgICAgICByZXR1cm4gd2l0aGluW19fLmRpbWVuc2lvbnNbcF0udHlwZV0oZCxwLGRpbWVuc2lvbik7DQogICAgICAgICAgfSk7DQogICAgICAgIGNhc2UgIk9SIjoNCiAgICAgICAgICByZXR1cm4gYWN0aXZlcy5zb21lKGZ1bmN0aW9uKHAsIGRpbWVuc2lvbikgew0KICAgICAgICAgICAgcmV0dXJuIHdpdGhpbltfXy5kaW1lbnNpb25zW3BdLnR5cGVdKGQscCxkaW1lbnNpb24pOw0KICAgICAgICAgIH0pOw0KICAgICAgICBkZWZhdWx0Og0KICAgICAgICAgIHRocm93IG5ldyBFcnJvcigiVW5rbm93biBicnVzaCBwcmVkaWNhdGUgIiArIF9fLmJydXNoUHJlZGljYXRlKTsNCiAgICAgICAgfQ0KICAgICAgfSk7DQogIH07DQoNCiAgZnVuY3Rpb24gYnJ1c2hFeHRlbnRzKGV4dGVudHMpIHsNCiAgICBpZih0eXBlb2YoZXh0ZW50cykgPT09ICd1bmRlZmluZWQnKQ0KCQl7DQoJCQl2YXIgZXh0ZW50cyA9IHt9Ow0KCQkJZDMua2V5cyhfXy5kaW1lbnNpb25zKS5mb3JFYWNoKGZ1bmN0aW9uKGQpIHsNCgkJCQl2YXIgYnJ1c2ggPSBicnVzaGVzW2RdOw0KCQkJCWlmIChicnVzaCAhPT0gdW5kZWZpbmVkICYmICFicnVzaC5lbXB0eSgpKSB7DQoJCQkJCXZhciBleHRlbnQgPSBicnVzaC5leHRlbnQoKTsNCgkJCQkJZXh0ZW50LnNvcnQoZDMuYXNjZW5kaW5nKTsNCgkJCQkJZXh0ZW50c1tkXSA9IGV4dGVudDsNCgkJCQl9DQoJCQl9KTsNCgkJCXJldHVybiBleHRlbnRzOw0KCQl9DQoJCWVsc2UNCgkJew0KCQkJLy9maXJzdCBnZXQgYWxsIHRoZSBicnVzaCBzZWxlY3Rpb25zDQoJCQl2YXIgYnJ1c2hTZWxlY3Rpb25zID0ge307DQoJCQlnLnNlbGVjdEFsbCgnLmJydXNoJykNCgkJCQkuZWFjaChmdW5jdGlvbihkKSB7DQoJCQkJCWJydXNoU2VsZWN0aW9uc1tkXSA9IGQzLnNlbGVjdCh0aGlzKTsNCg0KCQkJfSk7DQoNCgkJCS8vIGxvb3Agb3ZlciBlYWNoIGRpbWVuc2lvbiBhbmQgdXBkYXRlIGFwcHJvcHJpYXRlbHkgKGlmIGl0IHdhcyBwYXNzZWQgaW4gdGhyb3VnaCBleHRlbnRzKQ0KCQkJZDMua2V5cyhfXy5kaW1lbnNpb25zKS5mb3JFYWNoKGZ1bmN0aW9uKGQpIHsNCgkJCQlpZiAoZXh0ZW50c1tkXSA9PT0gdW5kZWZpbmVkKXsNCgkJCQkJcmV0dXJuOw0KCQkJCX0NCg0KCQkJCXZhciBicnVzaCA9IGJydXNoZXNbZF07DQoJCQkJaWYgKGJydXNoICE9PSB1bmRlZmluZWQpIHsNCgkJCQkJLy91cGRhdGUgdGhlIGV4dGVudA0KCQkJCQlicnVzaC5leHRlbnQoZXh0ZW50c1tkXSk7DQoNCgkJCQkJLy9yZWRyYXcgdGhlIGJydXNoDQoJCQkJCWJydXNoU2VsZWN0aW9uc1tkXQ0KCQkJCQkJLnRyYW5zaXRpb24oKQ0KCQkJCQkJLmR1cmF0aW9uKDApDQoJCQkJCQkuY2FsbChicnVzaCk7DQoNCgkJCQkJLy9maXJlIHNvbWUgZXZlbnRzDQoJCQkJCWJydXNoLmV2ZW50KGJydXNoU2VsZWN0aW9uc1tkXSk7DQoJCQkJfQ0KCQkJfSk7DQoNCgkJCS8vcmVkcmF3IHRoZSBjaGFydA0KCQkJcGMucmVuZGVyQnJ1c2hlZCgpOw0KDQoJCQlyZXR1cm4gcGM7DQoJCX0NCiAgfQ0KDQogIGZ1bmN0aW9uIGJydXNoRm9yKGF4aXMpIHsNCiAgICB2YXIgYnJ1c2ggPSBkMy5zdmcuYnJ1c2goKTsNCg0KICAgIGJydXNoDQogICAgICAueShfXy5kaW1lbnNpb25zW2F4aXNdLnlzY2FsZSkNCiAgICAgIC5vbigiYnJ1c2hzdGFydCIsIGZ1bmN0aW9uKCkgew0KCQkJCWlmKGQzLmV2ZW50LnNvdXJjZUV2ZW50ICE9PSBudWxsKSB7DQoJCQkJCWV2ZW50cy5icnVzaHN0YXJ0LmNhbGwocGMsIF9fLmJydXNoZWQsIHRoaXMpOw0KCQkJCQlkMy5ldmVudC5zb3VyY2VFdmVudC5zdG9wUHJvcGFnYXRpb24oKTsNCgkJCQl9DQoJCQl9KQ0KCQkJLm9uKCJicnVzaCIsIGZ1bmN0aW9uKCkgew0KCQkJCWJydXNoVXBkYXRlZChzZWxlY3RlZCgpLCB0aGlzKTsNCgkJCX0pDQoJCQkub24oImJydXNoZW5kIiwgZnVuY3Rpb24oKSB7DQoJCQkJZXZlbnRzLmJydXNoZW5kLmNhbGwocGMsIF9fLmJydXNoZWQsIHRoaXMpOw0KCQkJfSk7DQoNCgkJYnJ1c2hlc1theGlzXSA9IGJydXNoOw0KCQlyZXR1cm4gYnJ1c2g7DQoJfTsNCg0KCWZ1bmN0aW9uIGJydXNoUmVzZXQoZGltZW5zaW9uKSB7DQoJCWlmIChkaW1lbnNpb249PT11bmRlZmluZWQpIHsNCgkJCV9fLmJydXNoZWQgPSBmYWxzZTsNCgkJCWlmIChnKSB7DQoJCQkJZy5zZWxlY3RBbGwoJy5icnVzaCcpDQoJCQkJCS5lYWNoKGZ1bmN0aW9uKGQpIHsNCgkJCQkJCWQzLnNlbGVjdCh0aGlzKQ0KCQkJCQkJCS50cmFuc2l0aW9uKCkNCgkJCQkJCQkuZHVyYXRpb24oMCkNCgkJCQkJCQkuY2FsbChicnVzaGVzW2RdLmNsZWFyKCkpOw0KCQkJCQl9KTsNCgkJCQlwYy5yZW5kZXJCcnVzaGVkKCk7DQoJCQl9DQoJCX0NCgkJZWxzZSB7DQoJCQlpZiAoZykgew0KCQkJCWcuc2VsZWN0QWxsKCcuYnJ1c2gnKQ0KCQkJCQkuZWFjaChmdW5jdGlvbihkKSB7DQoJCQkJCQlpZiAoZCE9ZGltZW5zaW9uKSByZXR1cm47DQoJCQkJCQlkMy5zZWxlY3QodGhpcykNCgkJCQkJCQkudHJhbnNpdGlvbigpDQoJCQkJCQkJLmR1cmF0aW9uKDApDQoJCQkJCQkJLmNhbGwoYnJ1c2hlc1tkXS5jbGVhcigpKTsNCgkJCQkJCWJydXNoZXNbZF0uZXZlbnQoZDMuc2VsZWN0KHRoaXMpKTsNCgkJCQkJfSk7DQoJCQkJcGMucmVuZGVyQnJ1c2hlZCgpOw0KCQkJfQ0KCQl9DQoJCXJldHVybiB0aGlzOw0KCX07DQoNCglmdW5jdGlvbiBpbnN0YWxsKCkgew0KICAgIC8vIGFsc28gbWFrZSBzZWxlY3RlZCgpIGZ1bmN0aW9uIGF2YWlsYWJsZSBvdXRzaWRlCQkNCiAgICAvLyAgIG9mIHBhcmNvb3JkcyBmb3Igb3RoZXIgbm9uLWJydXNoIGZpbHRlcnMJCQ0KICAgIHBjLnNlbGVjdGVkID0gc2VsZWN0ZWQ7DQoNCgkJaWYgKCFnKSBwYy5jcmVhdGVBeGVzKCk7DQoNCgkJLy8gQWRkIGFuZCBzdG9yZSBhIGJydXNoIGZvciBlYWNoIGF4aXMuDQoJCXZhciBicnVzaCA9IGcuYXBwZW5kKCJzdmc6ZyIpDQoJCQkuYXR0cigiY2xhc3MiLCAiYnJ1c2giKQ0KCQkJLmVhY2goZnVuY3Rpb24oZCkgew0KCQkJCWQzLnNlbGVjdCh0aGlzKS5jYWxsKGJydXNoRm9yKGQpKTsNCgkJCX0pOw0KDQoJCWJydXNoLnNlbGVjdEFsbCgicmVjdCIpDQoJCQkJLnN0eWxlKCJ2aXNpYmlsaXR5IiwgbnVsbCkNCgkJCQkuYXR0cigieCIsIC0xNSkNCgkJCQkuYXR0cigid2lkdGgiLCAzMCk7DQoNCgkJYnJ1c2guc2VsZWN0QWxsKCJyZWN0LmJhY2tncm91bmQiKQ0KCQkJCS5zdHlsZSgiZmlsbCIsICJ0cmFuc3BhcmVudCIpOw0KDQoJCWJydXNoLnNlbGVjdEFsbCgicmVjdC5leHRlbnQiKQ0KCQkJCS5zdHlsZSgiZmlsbCIsICJyZ2JhKDI1NSwyNTUsMjU1LDAuMjUpIikNCgkJCQkuc3R5bGUoInN0cm9rZSIsICJyZ2JhKDAsMCwwLDAuNikiKTsNCg0KCQlicnVzaC5zZWxlY3RBbGwoIi5yZXNpemUgcmVjdCIpDQoJCQkJLnN0eWxlKCJmaWxsIiwgInJnYmEoMCwwLDAsMC4xKSIpOw0KDQoJCXBjLmJydXNoRXh0ZW50cyA9IGJydXNoRXh0ZW50czsNCgkJcGMuYnJ1c2hSZXNldCA9IGJydXNoUmVzZXQ7DQoJCXJldHVybiBwYzsNCgl9Ow0KDQoJYnJ1c2gubW9kZXNbIjFELWF4ZXMiXSA9IHsNCgkJaW5zdGFsbDogaW5zdGFsbCwNCgkJdW5pbnN0YWxsOiBmdW5jdGlvbigpIHsNCgkJCWcuc2VsZWN0QWxsKCIuYnJ1c2giKS5yZW1vdmUoKTsNCgkJCWJydXNoZXMgPSB7fTsNCgkJCWRlbGV0ZSBwYy5icnVzaEV4dGVudHM7DQoJCQlkZWxldGUgcGMuYnJ1c2hSZXNldDsNCgkJfSwNCgkJc2VsZWN0ZWQ6IHNlbGVjdGVkLA0KCQlicnVzaFN0YXRlOiBicnVzaEV4dGVudHMNCgl9DQp9KSgpOw0KLy8gYnJ1c2ggbW9kZTogMkQtc3RydW1zDQovLyBibC5vY2tzLm9yZy9zeW50YWdtYXRpYy81NDQxMDIyDQoNCihmdW5jdGlvbigpIHsNCiAgdmFyIHN0cnVtcyA9IHt9LA0KICAgICAgc3RydW1SZWN0Ow0KDQogIGZ1bmN0aW9uIGRyYXdTdHJ1bShzdHJ1bSwgYWN0aXZlUG9pbnQpIHsNCiAgICB2YXIgc3ZnID0gcGMuc2VsZWN0aW9uLnNlbGVjdCgic3ZnIikuc2VsZWN0KCJnI3N0cnVtcyIpLA0KICAgICAgICBpZCA9IHN0cnVtLmRpbXMuaSwNCiAgICAgICAgcG9pbnRzID0gW3N0cnVtLnAxLCBzdHJ1bS5wMl0sDQogICAgICAgIGxpbmUgPSBzdmcuc2VsZWN0QWxsKCJsaW5lI3N0cnVtLSIgKyBpZCkuZGF0YShbc3RydW1dKSwNCiAgICAgICAgY2lyY2xlcyA9IHN2Zy5zZWxlY3RBbGwoImNpcmNsZSNzdHJ1bS0iICsgaWQpLmRhdGEocG9pbnRzKSwNCiAgICAgICAgZHJhZyA9IGQzLmJlaGF2aW9yLmRyYWcoKTsNCg0KICAgIGxpbmUuZW50ZXIoKQ0KICAgICAgLmFwcGVuZCgibGluZSIpDQogICAgICAuYXR0cigiaWQiLCAic3RydW0tIiArIGlkKQ0KICAgICAgLmF0dHIoImNsYXNzIiwgInN0cnVtIik7DQoNCiAgICBsaW5lDQogICAgICAuYXR0cigieDEiLCBmdW5jdGlvbihkKSB7DQogICAgICAgIHJldHVybiBkLnAxWzBdOyB9KQ0KICAgICAgLmF0dHIoInkxIiwgZnVuY3Rpb24oZCkgew0KICAgICAgICByZXR1cm4gZC5wMVsxXTsgfSkNCiAgICAgIC5hdHRyKCJ4MiIsIGZ1bmN0aW9uKGQpIHsNCiAgICAgICAgcmV0dXJuIGQucDJbMF07IH0pDQogICAgICAuYXR0cigieTIiLCBmdW5jdGlvbihkKSB7DQogICAgICAgIHJldHVybiBkLnAyWzFdOyB9KQ0KICAgICAgLmF0dHIoInN0cm9rZSIsICJibGFjayIpDQogICAgICAuYXR0cigic3Ryb2tlLXdpZHRoIiwgMik7DQoNCiAgICBkcmFnDQogICAgICAub24oImRyYWciLCBmdW5jdGlvbihkLCBpKSB7IA0KICAgICAgICB2YXIgZXYgPSBkMy5ldmVudDsNCiAgICAgICAgaSA9IGkgKyAxOw0KICAgICAgICBzdHJ1bVsicCIgKyBpXVswXSA9IE1hdGgubWluKE1hdGgubWF4KHN0cnVtLm1pblggKyAxLCBldi54KSwgc3RydW0ubWF4WCk7DQogICAgICAgIHN0cnVtWyJwIiArIGldWzFdID0gTWF0aC5taW4oTWF0aC5tYXgoc3RydW0ubWluWSwgZXYueSksIHN0cnVtLm1heFkpOw0KICAgICAgICBkcmF3U3RydW0oc3RydW0sIGkgLSAxKTsNCiAgICAgIH0pDQogICAgICAub24oImRyYWdlbmQiLCBvbkRyYWdFbmQoKSk7DQoNCiAgICBjaXJjbGVzLmVudGVyKCkNCiAgICAgIC5hcHBlbmQoImNpcmNsZSIpDQogICAgICAuYXR0cigiaWQiLCAic3RydW0tIiArIGlkKQ0KICAgICAgLmF0dHIoImNsYXNzIiwgInN0cnVtIik7DQoNCiAgICBjaXJjbGVzDQogICAgICAuYXR0cigiY3giLCBmdW5jdGlvbihkKSB7IHJldHVybiBkWzBdOyB9KQ0KICAgICAgLmF0dHIoImN5IiwgZnVuY3Rpb24oZCkgeyByZXR1cm4gZFsxXTsgfSkNCiAgICAgIC5hdHRyKCJyIiwgNSkNCiAgICAgIC5zdHlsZSgib3BhY2l0eSIsIGZ1bmN0aW9uKGQsIGkpIHsNCiAgICAgICAgcmV0dXJuIChhY3RpdmVQb2ludCAhPT0gdW5kZWZpbmVkICYmIGkgPT09IGFjdGl2ZVBvaW50KSA/IDAuOCA6IDA7DQogICAgICB9KQ0KICAgICAgLm9uKCJtb3VzZW92ZXIiLCBmdW5jdGlvbigpIHsNCiAgICAgICAgZDMuc2VsZWN0KHRoaXMpLnN0eWxlKCJvcGFjaXR5IiwgMC44KTsNCiAgICAgIH0pDQogICAgICAub24oIm1vdXNlb3V0IiwgZnVuY3Rpb24oKSB7DQogICAgICAgIGQzLnNlbGVjdCh0aGlzKS5zdHlsZSgib3BhY2l0eSIsIDApOw0KICAgICAgfSkNCiAgICAgIC5jYWxsKGRyYWcpOw0KICB9DQoNCiAgZnVuY3Rpb24gZGltZW5zaW9uc0ZvclBvaW50KHApIHsNCiAgICB2YXIgZGltcyA9IHsgaTogLTEsIGxlZnQ6IHVuZGVmaW5lZCwgcmlnaHQ6IHVuZGVmaW5lZCB9Ow0KICAgIGQzLmtleXMoX18uZGltZW5zaW9ucykuc29tZShmdW5jdGlvbihkaW0sIGkpIHsNCiAgICAgIGlmICh4c2NhbGUoZGltKSA8IHBbMF0pIHsNCiAgICAgICAgdmFyIG5leHQgPSBkMy5rZXlzKF9fLmRpbWVuc2lvbnMpW3BjLmdldE9yZGVyZWREaW1lbnNpb25LZXlzKCkuaW5kZXhPZihkaW0pKzFdOw0KICAgICAgICBkaW1zLmkgPSBpOw0KICAgICAgICBkaW1zLmxlZnQgPSBkaW07DQogICAgICAgIGRpbXMucmlnaHQgPSBuZXh0Ow0KICAgICAgICByZXR1cm4gZmFsc2U7DQogICAgICB9DQogICAgICByZXR1cm4gdHJ1ZTsNCiAgICB9KTsNCg0KICAgIGlmIChkaW1zLmxlZnQgPT09IHVuZGVmaW5lZCkgew0KICAgICAgLy8gRXZlbnQgb24gdGhlIGxlZnQgc2lkZSBvZiB0aGUgZmlyc3QgYXhpcy4NCiAgICAgIGRpbXMuaSA9IDA7DQogICAgICBkaW1zLmxlZnQgPSBwYy5nZXRPcmRlcmVkRGltZW5zaW9uS2V5cygpWzBdOw0KICAgICAgZGltcy5yaWdodCA9IHBjLmdldE9yZGVyZWREaW1lbnNpb25LZXlzKClbMV07DQogICAgfSBlbHNlIGlmIChkaW1zLnJpZ2h0ID09PSB1bmRlZmluZWQpIHsNCiAgICAgIC8vIEV2ZW50IG9uIHRoZSByaWdodCBzaWRlIG9mIHRoZSBsYXN0IGF4aXMNCiAgICAgIGRpbXMuaSA9IGQzLmtleXMoX18uZGltZW5zaW9ucykubGVuZ3RoIC0gMTsNCiAgICAgIGRpbXMucmlnaHQgPSBkaW1zLmxlZnQ7DQogICAgICBkaW1zLmxlZnQgPSBwYy5nZXRPcmRlcmVkRGltZW5zaW9uS2V5cygpW2QzLmtleXMoX18uZGltZW5zaW9ucykubGVuZ3RoIC0gMl07DQogICAgfQ0KDQogICAgcmV0dXJuIGRpbXM7DQogIH0NCg0KICBmdW5jdGlvbiBvbkRyYWdTdGFydCgpIHsNCiAgICAvLyBGaXJzdCB3ZSBuZWVkIHRvIGRldGVybWluZSBiZXR3ZWVuIHdoaWNoIHR3byBheGVzIHRoZSBzdHVybSB3YXMgc3RhcnRlZC4NCiAgICAvLyBUaGlzIHdpbGwgZGV0ZXJtaW5lIHRoZSBmcmVlZG9tIG9mIG1vdmVtZW50LCBiZWNhdXNlIGEgc3RydW0gY2FuDQogICAgLy8gbG9naWNhbGx5IG9ubHkgaGFwcGVuIGJldHdlZW4gdHdvIGF4ZXMsIHNvIG5vIG1vdmVtZW50IG91dHNpZGUgdGhlc2UgYXhlcw0KICAgIC8vIHNob3VsZCBiZSBhbGxvd2VkLg0KICAgIHJldHVybiBmdW5jdGlvbigpIHsNCiAgICAgIHZhciBwID0gZDMubW91c2Uoc3RydW1SZWN0WzBdWzBdKSwNCiAgICAgICAgICBkaW1zLA0KICAgICAgICAgIHN0cnVtOw0KDQogICAgICBwWzBdID0gcFswXSAtIF9fLm1hcmdpbi5sZWZ0Ow0KICAgICAgcFsxXSA9IHBbMV0gLSBfXy5tYXJnaW4udG9wOw0KDQogICAgICBkaW1zID0gZGltZW5zaW9uc0ZvclBvaW50KHApLA0KICAgICAgc3RydW0gPSB7DQogICAgICAgIHAxOiBwLA0KICAgICAgICBkaW1zOiBkaW1zLA0KICAgICAgICBtaW5YOiB4c2NhbGUoZGltcy5sZWZ0KSwNCiAgICAgICAgbWF4WDogeHNjYWxlKGRpbXMucmlnaHQpLA0KICAgICAgICBtaW5ZOiAwLA0KICAgICAgICBtYXhZOiBoKCkNCiAgICAgIH07DQoNCiAgICAgIHN0cnVtc1tkaW1zLmldID0gc3RydW07DQogICAgICBzdHJ1bXMuYWN0aXZlID0gZGltcy5pOw0KDQogICAgICAvLyBNYWtlIHN1cmUgdGhhdCB0aGUgcG9pbnQgaXMgd2l0aGluIHRoZSBib3VuZHMNCiAgICAgIHN0cnVtLnAxWzBdID0gTWF0aC5taW4oTWF0aC5tYXgoc3RydW0ubWluWCwgcFswXSksIHN0cnVtLm1heFgpOw0KICAgICAgc3RydW0ucDIgPSBzdHJ1bS5wMS5zbGljZSgpOw0KICAgIH07DQogIH0NCg0KICBmdW5jdGlvbiBvbkRyYWcoKSB7DQogICAgcmV0dXJuIGZ1bmN0aW9uKCkgew0KICAgICAgdmFyIGV2ID0gZDMuZXZlbnQsDQogICAgICAgICAgc3RydW0gPSBzdHJ1bXNbc3RydW1zLmFjdGl2ZV07DQoNCiAgICAgIC8vIE1ha2Ugc3VyZSB0aGF0IHRoZSBwb2ludCBpcyB3aXRoaW4gdGhlIGJvdW5kcw0KICAgICAgc3RydW0ucDJbMF0gPSBNYXRoLm1pbihNYXRoLm1heChzdHJ1bS5taW5YICsgMSwgZXYueCAtIF9fLm1hcmdpbi5sZWZ0KSwgc3RydW0ubWF4WCk7DQogICAgICBzdHJ1bS5wMlsxXSA9IE1hdGgubWluKE1hdGgubWF4KHN0cnVtLm1pblksIGV2LnkgLSBfXy5tYXJnaW4udG9wKSwgc3RydW0ubWF4WSk7DQogICAgICBkcmF3U3RydW0oc3RydW0sIDEpOw0KICAgIH07DQogIH0NCg0KICBmdW5jdGlvbiBjb250YWlubWVudFRlc3Qoc3RydW0sIHdpZHRoKSB7DQogICAgdmFyIHAxID0gW3N0cnVtLnAxWzBdIC0gc3RydW0ubWluWCwgc3RydW0ucDFbMV0gLSBzdHJ1bS5taW5YXSwNCiAgICAgICAgcDIgPSBbc3RydW0ucDJbMF0gLSBzdHJ1bS5taW5YLCBzdHJ1bS5wMlsxXSAtIHN0cnVtLm1pblhdLA0KICAgICAgICBtMSA9IDEgLSB3aWR0aCAvIHAxWzBdLA0KICAgICAgICBiMSA9IHAxWzFdICogKDEgLSBtMSksDQogICAgICAgIG0yID0gMSAtIHdpZHRoIC8gcDJbMF0sDQogICAgICAgIGIyID0gcDJbMV0gKiAoMSAtIG0yKTsNCg0KICAgIC8vIHRlc3QgaWYgcG9pbnQgZmFsbHMgYmV0d2VlbiBsaW5lcw0KICAgIHJldHVybiBmdW5jdGlvbihwKSB7DQogICAgICB2YXIgeCA9IHBbMF0sDQogICAgICAgICAgeSA9IHBbMV0sDQogICAgICAgICAgeTEgPSBtMSAqIHggKyBiMSwNCiAgICAgICAgICB5MiA9IG0yICogeCArIGIyOw0KDQogICAgICBpZiAoeSA+IE1hdGgubWluKHkxLCB5MikgJiYgeSA8IE1hdGgubWF4KHkxLCB5MikpIHsNCiAgICAgICAgcmV0dXJuIHRydWU7DQogICAgICB9DQoNCiAgICAgIHJldHVybiBmYWxzZTsNCiAgICB9Ow0KICB9DQoNCiAgZnVuY3Rpb24gc2VsZWN0ZWQoKSB7DQogICAgdmFyIGlkcyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKHN0cnVtcyksDQogICAgICAgIGJydXNoZWQgPSBfXy5kYXRhOw0KDQogICAgLy8gR2V0IHRoZSBpZHMgb2YgdGhlIGN1cnJlbnRseSBhY3RpdmUgc3RydW1zLg0KICAgIGlkcyA9IGlkcy5maWx0ZXIoZnVuY3Rpb24oZCkgew0KICAgICAgcmV0dXJuICFpc05hTihkKTsNCiAgICB9KTsNCg0KICAgIGZ1bmN0aW9uIGNyb3NzZXNTdHJ1bShkLCBpZCkgew0KICAgICAgdmFyIHN0cnVtID0gc3RydW1zW2lkXSwNCiAgICAgICAgICB0ZXN0ID0gY29udGFpbm1lbnRUZXN0KHN0cnVtLCBzdHJ1bXMud2lkdGgoaWQpKSwNCiAgICAgICAgICBkMSA9IHN0cnVtLmRpbXMubGVmdCwNCiAgICAgICAgICBkMiA9IHN0cnVtLmRpbXMucmlnaHQsDQogICAgICAgICAgeTEgPSBfXy5kaW1lbnNpb25zW2QxXS55c2NhbGUsDQogICAgICAgICAgeTIgPSBfXy5kaW1lbnNpb25zW2QyXS55c2NhbGUsDQogICAgICAgICAgcG9pbnQgPSBbeTEoZFtkMV0pIC0gc3RydW0ubWluWCwgeTIoZFtkMl0pIC0gc3RydW0ubWluWF07DQogICAgICByZXR1cm4gdGVzdChwb2ludCk7DQogICAgfQ0KDQogICAgaWYgKGlkcy5sZW5ndGggPT09IDApIHsgcmV0dXJuIGJydXNoZWQ7IH0NCg0KICAgIHJldHVybiBicnVzaGVkLmZpbHRlcihmdW5jdGlvbihkKSB7DQogICAgICBzd2l0Y2goYnJ1c2gucHJlZGljYXRlKSB7DQogICAgICBjYXNlICJBTkQiOg0KICAgICAgICByZXR1cm4gaWRzLmV2ZXJ5KGZ1bmN0aW9uKGlkKSB7IHJldHVybiBjcm9zc2VzU3RydW0oZCwgaWQpOyB9KTsNCiAgICAgIGNhc2UgIk9SIjoNCiAgICAgICAgcmV0dXJuIGlkcy5zb21lKGZ1bmN0aW9uKGlkKSB7IHJldHVybiBjcm9zc2VzU3RydW0oZCwgaWQpOyB9KTsNCiAgICAgIGRlZmF1bHQ6DQogICAgICAgIHRocm93IG5ldyBFcnJvcigiVW5rbm93biBicnVzaCBwcmVkaWNhdGUgIiArIF9fLmJydXNoUHJlZGljYXRlKTsNCiAgICAgIH0NCiAgICB9KTsNCiAgfQ0KDQogIGZ1bmN0aW9uIHJlbW92ZVN0cnVtKCkgew0KICAgIHZhciBzdHJ1bSA9IHN0cnVtc1tzdHJ1bXMuYWN0aXZlXSwNCiAgICAgICAgc3ZnID0gcGMuc2VsZWN0aW9uLnNlbGVjdCgic3ZnIikuc2VsZWN0KCJnI3N0cnVtcyIpOw0KDQogICAgZGVsZXRlIHN0cnVtc1tzdHJ1bXMuYWN0aXZlXTsNCiAgICBzdHJ1bXMuYWN0aXZlID0gdW5kZWZpbmVkOw0KICAgIHN2Zy5zZWxlY3RBbGwoImxpbmUjc3RydW0tIiArIHN0cnVtLmRpbXMuaSkucmVtb3ZlKCk7DQogICAgc3ZnLnNlbGVjdEFsbCgiY2lyY2xlI3N0cnVtLSIgKyBzdHJ1bS5kaW1zLmkpLnJlbW92ZSgpOw0KICB9DQoNCiAgZnVuY3Rpb24gb25EcmFnRW5kKCkgew0KICAgIHJldHVybiBmdW5jdGlvbigpIHsNCiAgICAgIHZhciBicnVzaGVkID0gX18uZGF0YSwNCiAgICAgICAgICBzdHJ1bSA9IHN0cnVtc1tzdHJ1bXMuYWN0aXZlXTsNCg0KICAgICAgLy8gT2theSwgc29tZXdoYXQgdW5leHBlY3RlZCwgYnV0IG5vdCB0b3RhbGx5IHVuc3VycHJpc2luZywgYSBtb3VzY2xpY2sgaXMNCiAgICAgIC8vIGNvbnNpZGVyZWQgYSBkcmFnIHdpdGhvdXQgbW92ZS4gU28gd2UgaGF2ZSB0byBkZWFsIHdpdGggdGhhdCBjYXNlDQogICAgICBpZiAoc3RydW0gJiYgc3RydW0ucDFbMF0gPT09IHN0cnVtLnAyWzBdICYmIHN0cnVtLnAxWzFdID09PSBzdHJ1bS5wMlsxXSkgew0KICAgICAgICByZW1vdmVTdHJ1bShzdHJ1bXMpOw0KICAgICAgfQ0KDQogICAgICBicnVzaGVkID0gc2VsZWN0ZWQoc3RydW1zKTsNCiAgICAgIHN0cnVtcy5hY3RpdmUgPSB1bmRlZmluZWQ7DQogICAgICBfXy5icnVzaGVkID0gYnJ1c2hlZDsNCiAgICAgIHBjLnJlbmRlckJydXNoZWQoKTsNCiAgICAgIGV2ZW50cy5icnVzaGVuZC5jYWxsKHBjLCBfXy5icnVzaGVkKTsNCiAgICB9Ow0KICB9DQoNCiAgZnVuY3Rpb24gYnJ1c2hSZXNldChzdHJ1bXMpIHsNCiAgICByZXR1cm4gZnVuY3Rpb24oKSB7DQogICAgICB2YXIgaWRzID0gT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMoc3RydW1zKS5maWx0ZXIoZnVuY3Rpb24oZCkgew0KICAgICAgICByZXR1cm4gIWlzTmFOKGQpOw0KICAgICAgfSk7DQoNCiAgICAgIGlkcy5mb3JFYWNoKGZ1bmN0aW9uKGQpIHsNCiAgICAgICAgc3RydW1zLmFjdGl2ZSA9IGQ7DQogICAgICAgIHJlbW92ZVN0cnVtKHN0cnVtcyk7DQogICAgICB9KTsNCiAgICAgIG9uRHJhZ0VuZChzdHJ1bXMpKCk7DQogICAgfTsNCiAgfQ0KDQogIGZ1bmN0aW9uIGluc3RhbGwoKSB7DQogICAgdmFyIGRyYWcgPSBkMy5iZWhhdmlvci5kcmFnKCk7DQoNCiAgICAvLyBNYXAgb2YgY3VycmVudCBzdHJ1bXMuIFN0cnVtcyBhcmUgc3RvcmVkIHBlciBzZWdtZW50IG9mIHRoZSBQQy4gQSBzZWdtZW50LA0KICAgIC8vIGJlaW5nIHRoZSBhcmVhIGJldHdlZW4gdHdvIGF4ZXMuIFRoZSBsZWZ0IG1vc3QgYXJlYSBpcyBpbmRleGVkIGF0IDAuDQogICAgc3RydW1zLmFjdGl2ZSA9IHVuZGVmaW5lZDsNCiAgICAvLyBSZXR1cm5zIHRoZSB3aWR0aCBvZiB0aGUgUEMgc2VnbWVudCB3aGVyZSBjdXJyZW50bHkgYSBzdHJ1bSBpcyBiZWluZw0KICAgIC8vIHBsYWNlZC4gTk9URTogZXZlbiB0aG91Z2ggdGhleSBhcmUgZXZlbmx5IHNwYWNlZCBpbiBvdXIgY3VycmVudA0KICAgIC8vIGltcGxlbWVudGF0aW9uLCB3ZSBrZWVwIGZvciB3aGVuIG5vbi1ldmVuIHNwYWNlZCBzZWdtZW50cyBhcmUgc3VwcG9ydGVkIGFzDQogICAgLy8gd2VsbC4NCiAgICBzdHJ1bXMud2lkdGggPSBmdW5jdGlvbihpZCkgew0KICAgICAgdmFyIHN0cnVtID0gc3RydW1zW2lkXTsNCg0KICAgICAgaWYgKHN0cnVtID09PSB1bmRlZmluZWQpIHsNCiAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDsNCiAgICAgIH0NCg0KICAgICAgcmV0dXJuIHN0cnVtLm1heFggLSBzdHJ1bS5taW5YOw0KICAgIH07DQoNCiAgICBwYy5vbigiYXhlc3Jlb3JkZXIuc3RydW1zIiwgZnVuY3Rpb24oKSB7DQogICAgICB2YXIgaWRzID0gT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMoc3RydW1zKS5maWx0ZXIoZnVuY3Rpb24oZCkgew0KICAgICAgICByZXR1cm4gIWlzTmFOKGQpOw0KICAgICAgfSk7DQoNCiAgICAgIC8vIENoZWNrcyBpZiB0aGUgZmlyc3QgZGltZW5zaW9uIGlzIGRpcmVjdGx5IGxlZnQgb2YgdGhlIHNlY29uZCBkaW1lbnNpb24uDQogICAgICBmdW5jdGlvbiBjb25zZWN1dGl2ZShmaXJzdCwgc2Vjb25kKSB7DQogICAgICAgIHZhciBsZW5ndGggPSBkMy5rZXlzKF9fLmRpbWVuc2lvbnMpLmxlbmd0aDsNCiAgICAgICAgcmV0dXJuIGQzLmtleXMoX18uZGltZW5zaW9ucykuc29tZShmdW5jdGlvbihkLCBpKSB7DQogICAgICAgICAgcmV0dXJuIChkID09PSBmaXJzdCkNCiAgICAgICAgICAgID8gaSArIGkgPCBsZW5ndGggJiYgX18uZGltZW5zaW9uc1tpICsgMV0gPT09IHNlY29uZA0KICAgICAgICAgICAgOiBmYWxzZTsNCiAgICAgICAgfSk7DQogICAgICB9DQoNCiAgICAgIGlmIChpZHMubGVuZ3RoID4gMCkgeyAvLyBXZSBoYXZlIHNvbWUgc3RydW1zLCB3aGljaCBtaWdodCBuZWVkIHRvIGJlIHJlbW92ZWQuDQogICAgICAgIGlkcy5mb3JFYWNoKGZ1bmN0aW9uKGQpIHsNCiAgICAgICAgICB2YXIgZGltcyA9IHN0cnVtc1tkXS5kaW1zOw0KICAgICAgICAgIHN0cnVtcy5hY3RpdmUgPSBkOw0KICAgICAgICAgIC8vIElmIHRoZSB0d28gZGltZW5zaW9ucyBvZiB0aGUgY3VycmVudCBzdHJ1bSBhcmUgbm90IG5leHQgdG8gZWFjaCBvdGhlcg0KICAgICAgICAgIC8vIGFueSBtb3JlLCB0aGFuIHdlJ2xsIG5lZWQgdG8gcmVtb3ZlIHRoZSBzdHJ1bS4gT3RoZXJ3aXNlIHdlIGtlZXAgaXQuDQogICAgICAgICAgaWYgKCFjb25zZWN1dGl2ZShkaW1zLmxlZnQsIGRpbXMucmlnaHQpKSB7DQogICAgICAgICAgICByZW1vdmVTdHJ1bShzdHJ1bXMpOw0KICAgICAgICAgIH0NCiAgICAgICAgfSk7DQogICAgICAgIG9uRHJhZ0VuZChzdHJ1bXMpKCk7DQogICAgICB9DQogICAgfSk7DQoNCiAgICAvLyBBZGQgYSBuZXcgc3ZnIGdyb3VwIGluIHdoaWNoIHdlIGRyYXcgdGhlIHN0cnVtcy4NCiAgICBwYy5zZWxlY3Rpb24uc2VsZWN0KCJzdmciKS5hcHBlbmQoImciKQ0KICAgICAgLmF0dHIoImlkIiwgInN0cnVtcyIpDQogICAgICAuYXR0cigidHJhbnNmb3JtIiwgInRyYW5zbGF0ZSgiICsgX18ubWFyZ2luLmxlZnQgKyAiLCIgKyBfXy5tYXJnaW4udG9wICsgIikiKTsNCg0KICAgIC8vIEluc3RhbGwgdGhlIHJlcXVpcmVkIGJydXNoUmVzZXQgZnVuY3Rpb24NCiAgICBwYy5icnVzaFJlc2V0ID0gYnJ1c2hSZXNldChzdHJ1bXMpOw0KDQogICAgZHJhZw0KICAgICAgLm9uKCJkcmFnc3RhcnQiLCBvbkRyYWdTdGFydChzdHJ1bXMpKQ0KICAgICAgLm9uKCJkcmFnIiwgb25EcmFnKHN0cnVtcykpDQogICAgICAub24oImRyYWdlbmQiLCBvbkRyYWdFbmQoc3RydW1zKSk7DQoNCiAgICAvLyBOT1RFOiBUaGUgc3R5bGluZyBuZWVkcyB0byBiZSBkb25lIGhlcmUgYW5kIG5vdCBpbiB0aGUgY3NzLiBUaGlzIGlzIGJlY2F1c2UNCiAgICAvLyAgICAgICBmb3IgMUQgYnJ1c2hpbmcsIHRoZSBjYW52YXMgbGF5ZXJzIHNob3VsZCBub3QgbGlzdGVuIHRvDQogICAgLy8gICAgICAgcG9pbnRlci1ldmVudHMuDQogICAgc3RydW1SZWN0ID0gcGMuc2VsZWN0aW9uLnNlbGVjdCgic3ZnIikuaW5zZXJ0KCJyZWN0IiwgImcjc3RydW1zIikNCiAgICAgIC5hdHRyKCJpZCIsICJzdHJ1bS1ldmVudHMiKQ0KICAgICAgLmF0dHIoIngiLCBfXy5tYXJnaW4ubGVmdCkNCiAgICAgIC5hdHRyKCJ5IiwgX18ubWFyZ2luLnRvcCkNCiAgICAgIC5hdHRyKCJ3aWR0aCIsIHcoKSkNCiAgICAgIC5hdHRyKCJoZWlnaHQiLCBoKCkgKyAyKQ0KICAgICAgLnN0eWxlKCJvcGFjaXR5IiwgMCkNCiAgICAgIC5jYWxsKGRyYWcpOw0KICB9DQoNCiAgYnJ1c2gubW9kZXNbIjJELXN0cnVtcyJdID0gew0KICAgIGluc3RhbGw6IGluc3RhbGwsDQogICAgdW5pbnN0YWxsOiBmdW5jdGlvbigpIHsNCiAgICAgIHBjLnNlbGVjdGlvbi5zZWxlY3QoInN2ZyIpLnNlbGVjdCgiZyNzdHJ1bXMiKS5yZW1vdmUoKTsNCiAgICAgIHBjLnNlbGVjdGlvbi5zZWxlY3QoInN2ZyIpLnNlbGVjdCgicmVjdCNzdHJ1bS1ldmVudHMiKS5yZW1vdmUoKTsNCiAgICAgIHBjLm9uKCJheGVzcmVvcmRlci5zdHJ1bXMiLCB1bmRlZmluZWQpOw0KICAgICAgZGVsZXRlIHBjLmJydXNoUmVzZXQ7DQoNCiAgICAgIHN0cnVtUmVjdCA9IHVuZGVmaW5lZDsNCiAgICB9LA0KICAgIHNlbGVjdGVkOiBzZWxlY3RlZCwNCiAgICBicnVzaFN0YXRlOiBmdW5jdGlvbiAoKSB7IHJldHVybiBzdHJ1bXM7IH0NCiAgfTsNCg0KfSgpKTsNCg0KLy8gYnJ1c2ggbW9kZTogMUQtQXhlcyB3aXRoIG11bHRpcGxlIGV4dGVudHMNCi8vIHJlcXVpcmVzIGQzLnN2Zy5tdWx0aWJydXNoDQoNCihmdW5jdGlvbigpIHsNCiAgaWYgKHR5cGVvZiBkMy5zdmcubXVsdGlicnVzaCAhPT0gJ2Z1bmN0aW9uJykgew0KCSAgcmV0dXJuOw0KICB9DQogIHZhciBicnVzaGVzID0ge307DQoNCiAgZnVuY3Rpb24gaXNfYnJ1c2hlZChwKSB7DQogICAgcmV0dXJuICFicnVzaGVzW3BdLmVtcHR5KCk7DQogIH0NCg0KICAvLyBkYXRhIHdpdGhpbiBleHRlbnRzDQogIGZ1bmN0aW9uIHNlbGVjdGVkKCkgew0KICAgIHZhciBhY3RpdmVzID0gZDMua2V5cyhfXy5kaW1lbnNpb25zKS5maWx0ZXIoaXNfYnJ1c2hlZCksDQogICAgICAgIGV4dGVudHMgPSBhY3RpdmVzLm1hcChmdW5jdGlvbihwKSB7IHJldHVybiBicnVzaGVzW3BdLmV4dGVudCgpOyB9KTsNCg0KICAgIC8vIFdlIGRvbid0IHdhbnQgdG8gcmV0dXJuIHRoZSBmdWxsIGRhdGEgc2V0IHdoZW4gdGhlcmUgYXJlIG5vIGF4ZXMgYnJ1c2hlZC4NCiAgICAvLyBBY3R1YWxseSwgd2hlbiB0aGVyZSBhcmUgbm8gYXhlcyBicnVzaGVkLCBieSBkZWZpbml0aW9uLCBubyBpdGVtcyBhcmUNCiAgICAvLyBzZWxlY3RlZC4gU28sIGxldCdzIGF2b2lkIHRoZSBmaWx0ZXJpbmcgYW5kIGp1c3QgcmV0dXJuIGZhbHNlLg0KICAgIC8vaWYgKGFjdGl2ZXMubGVuZ3RoID09PSAwKSByZXR1cm4gZmFsc2U7DQoNCiAgICAvLyBSZXNvbHZlcyBicm9rZW4gZXhhbXBsZXMgZm9yIG5vdy4gVGhleSBleHBlY3QgdG8gZ2V0IHRoZSBmdWxsIGRhdGFzZXQgYmFjayBmcm9tIGVtcHR5IGJydXNoZXMNCiAgICBpZiAoYWN0aXZlcy5sZW5ndGggPT09IDApIHJldHVybiBfXy5kYXRhOw0KDQogICAgLy8gdGVzdCBpZiB3aXRoaW4gcmFuZ2UNCiAgICB2YXIgd2l0aGluID0gew0KICAgICAgImRhdGUiOiBmdW5jdGlvbihkLHAsZGltZW5zaW9uLGIpIHsNCiAgICAgICAgaWYgKHR5cGVvZiBfXy5kaW1lbnNpb25zW3BdLnlzY2FsZS5yYW5nZVBvaW50cyA9PT0gImZ1bmN0aW9uIikgeyAvLyBpZiBpdCBpcyBvcmRpbmFsDQogICAgICAgICAgcmV0dXJuIGJbMF0gPD0gX18uZGltZW5zaW9uc1twXS55c2NhbGUoZFtwXSkgJiYgX18uZGltZW5zaW9uc1twXS55c2NhbGUoZFtwXSkgPD0gYlsxXQ0KICAgICAgICB9IGVsc2Ugew0KICAgICAgICAgICAgcmV0dXJuIGJbMF0gPD0gZFtwXSAmJiBkW3BdIDw9IGJbMV0NCiAgICAgICAgfQ0KICAgICAgfSwNCiAgICAgICJudW1iZXIiOiBmdW5jdGlvbihkLHAsZGltZW5zaW9uLGIpIHsNCiAgICAgICAgaWYgKHR5cGVvZiBfXy5kaW1lbnNpb25zW3BdLnlzY2FsZS5yYW5nZVBvaW50cyA9PT0gImZ1bmN0aW9uIikgeyAvLyBpZiBpdCBpcyBvcmRpbmFsDQogICAgICAgICAgcmV0dXJuIGJbMF0gPD0gX18uZGltZW5zaW9uc1twXS55c2NhbGUoZFtwXSkgJiYgX18uZGltZW5zaW9uc1twXS55c2NhbGUoZFtwXSkgPD0gYlsxXQ0KICAgICAgICB9IGVsc2Ugew0KICAgICAgICAgICAgcmV0dXJuIGJbMF0gPD0gZFtwXSAmJiBkW3BdIDw9IGJbMV0NCiAgICAgICAgfQ0KICAgICAgfSwNCiAgICAgICJzdHJpbmciOiBmdW5jdGlvbihkLHAsZGltZW5zaW9uLGIpIHsNCiAgICAgICAgcmV0dXJuIGJbMF0gPD0gX18uZGltZW5zaW9uc1twXS55c2NhbGUoZFtwXSkgJiYgX18uZGltZW5zaW9uc1twXS55c2NhbGUoZFtwXSkgPD0gYlsxXQ0KICAgICAgfQ0KICAgIH07DQoNCiAgICByZXR1cm4gX18uZGF0YQ0KICAgIC5maWx0ZXIoZnVuY3Rpb24oZCkgew0KICAgICAgc3dpdGNoKGJydXNoLnByZWRpY2F0ZSkgew0KICAgICAgY2FzZSAiQU5EIjoNCiAgICAgICAgcmV0dXJuIGFjdGl2ZXMuZXZlcnkoZnVuY3Rpb24ocCwgZGltZW5zaW9uKSB7DQogICAgICAgICAgcmV0dXJuIGV4dGVudHNbZGltZW5zaW9uXS5zb21lKGZ1bmN0aW9uKGIpIHsNCiAgICAgICAgICAJcmV0dXJuIHdpdGhpbltfXy5kaW1lbnNpb25zW3BdLnR5cGVdKGQscCxkaW1lbnNpb24sYik7DQogICAgICAgICAgfSk7DQogICAgICAgIH0pOw0KICAgICAgY2FzZSAiT1IiOg0KICAgICAgICByZXR1cm4gYWN0aXZlcy5zb21lKGZ1bmN0aW9uKHAsIGRpbWVuc2lvbikgew0KICAgICAgCSAgcmV0dXJuIGV4dGVudHNbZGltZW5zaW9uXS5zb21lKGZ1bmN0aW9uKGIpIHsNCiAgICAgICAgICAgIAlyZXR1cm4gd2l0aGluW19fLmRpbWVuc2lvbnNbcF0udHlwZV0oZCxwLGRpbWVuc2lvbixiKTsNCiAgICAgICAgICAgIH0pOw0KICAgICAgICB9KTsNCiAgICAgIGRlZmF1bHQ6DQogICAgICAgIHRocm93IG5ldyBFcnJvcigiVW5rbm93biBicnVzaCBwcmVkaWNhdGUgIiArIF9fLmJydXNoUHJlZGljYXRlKTsNCiAgICAgIH0NCiAgICB9KTsNCiAgfTsNCg0KICBmdW5jdGlvbiBicnVzaEV4dGVudHMoZXh0ZW50cykgew0KICAgIGlmICh0eXBlb2YoZXh0ZW50cykgPT09ICd1bmRlZmluZWQnKSB7DQogICAgICBleHRlbnRzID0ge307DQogICAgICBkMy5rZXlzKF9fLmRpbWVuc2lvbnMpLmZvckVhY2goZnVuY3Rpb24gKGQpIHsNCiAgICAgICAgdmFyIGJydXNoID0gYnJ1c2hlc1tkXTsNCiAgICAgICAgaWYgKGJydXNoICE9PSB1bmRlZmluZWQgJiYgIWJydXNoLmVtcHR5KCkpIHsNCiAgICAgICAgICB2YXIgZXh0ZW50ID0gYnJ1c2guZXh0ZW50KCk7DQogICAgICAgICAgZXh0ZW50c1tkXSA9IGV4dGVudDsNCiAgICAgICAgfQ0KICAgICAgfSk7DQogICAgICByZXR1cm4gZXh0ZW50czsNCiAgICB9DQogICAgZWxzZSB7DQogICAgICAvL2ZpcnN0IGdldCBhbGwgdGhlIGJydXNoIHNlbGVjdGlvbnMNCiAgICAgIHZhciBicnVzaFNlbGVjdGlvbnMgPSB7fTsNCiAgICAgIGcuc2VsZWN0QWxsKCcuYnJ1c2gnKQ0KICAgICAgICAgIC5lYWNoKGZ1bmN0aW9uIChkKSB7DQogICAgICAgICAgICBicnVzaFNlbGVjdGlvbnNbZF0gPSBkMy5zZWxlY3QodGhpcyk7DQogICAgICAgICAgfSk7DQoNCiAgICAgIC8vIGxvb3Agb3ZlciBlYWNoIGRpbWVuc2lvbiBhbmQgdXBkYXRlIGFwcHJvcHJpYXRlbHkgKGlmIGl0IHdhcyBwYXNzZWQgaW4gdGhyb3VnaCBleHRlbnRzKQ0KICAgICAgZDMua2V5cyhfXy5kaW1lbnNpb25zKS5mb3JFYWNoKGZ1bmN0aW9uIChkKSB7DQogICAgICAgIGlmIChleHRlbnRzW2RdID09PSB1bmRlZmluZWQpIHsNCiAgICAgICAgICByZXR1cm47DQogICAgICAgIH0NCg0KICAgICAgICB2YXIgYnJ1c2ggPSBicnVzaGVzW2RdOw0KICAgICAgICBpZiAoYnJ1c2ggIT09IHVuZGVmaW5lZCkgew0KICAgICAgICAgIC8vdXBkYXRlIHRoZSBleHRlbnQNCiAgICAgICAgICBicnVzaC5leHRlbnQoZXh0ZW50c1tkXSk7DQoNCiAgICAgICAgICAvL3JlZHJhdyB0aGUgYnJ1c2gNCiAgICAgICAgICBicnVzaFNlbGVjdGlvbnNbZF0NCiAgICAgICAgICAgICAgLnRyYW5zaXRpb24oKQ0KICAgICAgICAgICAgICAuZHVyYXRpb24oMCkNCiAgICAgICAgICAgICAgLmNhbGwoYnJ1c2gpOw0KDQogICAgICAgICAgLy9maXJlIHNvbWUgZXZlbnRzDQogICAgICAgICAgYnJ1c2guZXZlbnQoYnJ1c2hTZWxlY3Rpb25zW2RdKTsNCiAgICAgICAgfQ0KICAgICAgfSk7DQoNCiAgICAgIC8vcmVkcmF3IHRoZSBjaGFydA0KICAgICAgcGMucmVuZGVyQnJ1c2hlZCgpOw0KDQogICAgICByZXR1cm4gcGM7DQogICAgfQ0KICB9DQoNCiAgLy9mdW5jdGlvbiBicnVzaEV4dGVudHMoKSB7DQogIC8vICB2YXIgZXh0ZW50cyA9IHt9Ow0KICAvLyAgZDMua2V5cyhfXy5kaW1lbnNpb25zKS5mb3JFYWNoKGZ1bmN0aW9uKGQpIHsNCiAgLy8gICAgdmFyIGJydXNoID0gYnJ1c2hlc1tkXTsNCiAgLy8gICAgaWYgKGJydXNoICE9PSB1bmRlZmluZWQgJiYgIWJydXNoLmVtcHR5KCkpIHsNCiAgLy8gICAgICB2YXIgZXh0ZW50ID0gYnJ1c2guZXh0ZW50KCk7DQogIC8vICAgICAgZXh0ZW50c1tkXSA9IGV4dGVudDsNCiAgLy8gICAgfQ0KICAvLyAgfSk7DQogIC8vICByZXR1cm4gZXh0ZW50czsNCiAgLy99DQoNCiAgZnVuY3Rpb24gYnJ1c2hGb3IoYXhpcykgew0KICAgIHZhciBicnVzaCA9IGQzLnN2Zy5tdWx0aWJydXNoKCk7DQoNCiAgICBicnVzaA0KICAgICAgLnkoX18uZGltZW5zaW9uc1theGlzXS55c2NhbGUpDQogICAgICAub24oImJydXNoc3RhcnQiLCBmdW5jdGlvbigpIHsNCgkJCQlpZihkMy5ldmVudC5zb3VyY2VFdmVudCAhPT0gbnVsbCkgew0KICAgICAgICAgICAgICAgICAgICBldmVudHMuYnJ1c2hzdGFydC5jYWxsKHBjLCBfXy5icnVzaGVkKTsNCgkJCQkJZDMuZXZlbnQuc291cmNlRXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7DQoJCQkJfQ0KICAgICAgfSkNCiAgICAgIC5vbigiYnJ1c2giLCBmdW5jdGlvbigpIHsNCiAgICAgICAgYnJ1c2hVcGRhdGVkKHNlbGVjdGVkKCkpOw0KICAgICAgfSkNCiAgICAgIC5vbigiYnJ1c2hlbmQiLCBmdW5jdGlvbigpIHsNCiAgICAJLy8gZDMuc3ZnLm11bHRpYnJ1c2ggY2xlYXJzIGV4dGVudHMganVzdCBiZWZvcmUgY2FsbGluZyAnYnJ1c2hlbmQnDQogICAgCS8vIHNvIHdlIGhhdmUgdG8gdXBkYXRlIGhlcmUgYWdhaW4uDQogICAgCS8vIFRoaXMgZml4ZXMgaXNzdWUgIzEwMyBmb3Igbm93LCBidXQgc2hvdWxkIGJlIGNoYW5nZWQgaW4gZDMuc3ZnLm11bHRpYnJ1c2gNCiAgICAJLy8gdG8gYXZvaWQgdW5uZWNlc3NhcnkgY29tcHV0YXRpb24uDQogICAgCWJydXNoVXBkYXRlZChzZWxlY3RlZCgpKTsNCiAgICAgICAgZXZlbnRzLmJydXNoZW5kLmNhbGwocGMsIF9fLmJydXNoZWQpOw0KICAgICAgfSkNCiAgICAgIC5leHRlbnRBZGFwdGlvbihmdW5jdGlvbihzZWxlY3Rpb24pIHsNCiAgICAJICBzZWxlY3Rpb24NCiAgICAJICAuc3R5bGUoInZpc2liaWxpdHkiLCBudWxsKQ0KICAgICAgICAgIC5hdHRyKCJ4IiwgLTE1KQ0KICAgICAgICAgIC5hdHRyKCJ3aWR0aCIsIDMwKQ0KICAgICAgICAgIC5zdHlsZSgiZmlsbCIsICJyZ2JhKDI1NSwyNTUsMjU1LDAuMjUpIikNCiAgICAgICAgICAuc3R5bGUoInN0cm9rZSIsICJyZ2JhKDAsMCwwLDAuNikiKTsNCiAgICAgIH0pDQogICAgICAucmVzaXplQWRhcHRpb24oZnVuY3Rpb24oc2VsZWN0aW9uKSB7DQogICAgCSBzZWxlY3Rpb24NCiAgICAJICAgLnNlbGVjdEFsbCgicmVjdCIpDQogICAgCSAgIC5hdHRyKCJ4IiwgLTE1KQ0KICAgIAkgICAuYXR0cigid2lkdGgiLCAzMCkNCiAgICAgICAgIC5zdHlsZSgidmlzaWJpbGl0eSIsIG51bGwpDQogICAgICAgICAuc3R5bGUoImZpbGwiLCAicmdiYSgwLDAsMCwwLjEpIik7DQogICAgICB9KTsNCg0KICAgIGJydXNoZXNbYXhpc10gPSBicnVzaDsNCiAgICByZXR1cm4gYnJ1c2g7DQogIH0NCg0KICBmdW5jdGlvbiBicnVzaFJlc2V0KGRpbWVuc2lvbikgew0KICAgIF9fLmJydXNoZWQgPSBmYWxzZTsNCiAgICBpZiAoZykgew0KICAgICAgZy5zZWxlY3RBbGwoJy5icnVzaCcpDQogICAgICAgIC5lYWNoKGZ1bmN0aW9uKGQpIHsNCiAgICAgICAgICBkMy5zZWxlY3QodGhpcykuY2FsbCgNCiAgICAgICAgICAgIGJydXNoZXNbZF0uY2xlYXIoKQ0KICAgICAgICAgICk7DQogICAgICAgIH0pOw0KICAgICAgcGMucmVuZGVyQnJ1c2hlZCgpOw0KICAgIH0NCiAgICByZXR1cm4gdGhpczsNCiAgfTsNCg0KICBmdW5jdGlvbiBpbnN0YWxsKCkgew0KICAgIGlmICghZykgcGMuY3JlYXRlQXhlcygpOw0KDQogICAgLy8gQWRkIGFuZCBzdG9yZSBhIGJydXNoIGZvciBlYWNoIGF4aXMuDQogICAgdmFyIGJydXNoID0gZy5hcHBlbmQoInN2ZzpnIikNCiAgICAgIC5hdHRyKCJjbGFzcyIsICJicnVzaCIpDQogICAgICAuZWFjaChmdW5jdGlvbihkKSB7DQogICAgICAgIGQzLnNlbGVjdCh0aGlzKS5jYWxsKGJydXNoRm9yKGQpKTsNCiAgICAgIH0pDQoNCiAgICBicnVzaC5zZWxlY3RBbGwoInJlY3QiKQ0KICAgICAgICAuc3R5bGUoInZpc2liaWxpdHkiLCBudWxsKQ0KICAgICAgICAuYXR0cigieCIsIC0xNSkNCiAgICAgICAgLmF0dHIoIndpZHRoIiwgMzApOw0KDQogICAgYnJ1c2guc2VsZWN0QWxsKCJyZWN0LmJhY2tncm91bmQiKQ0KICAgICAgICAuc3R5bGUoImZpbGwiLCAidHJhbnNwYXJlbnQiKTsNCg0KICAgIGJydXNoLnNlbGVjdEFsbCgicmVjdC5leHRlbnQiKQ0KICAgICAgICAuc3R5bGUoImZpbGwiLCAicmdiYSgyNTUsMjU1LDI1NSwwLjI1KSIpDQogICAgICAgIC5zdHlsZSgic3Ryb2tlIiwgInJnYmEoMCwwLDAsMC42KSIpOw0KDQogICAgYnJ1c2guc2VsZWN0QWxsKCIucmVzaXplIHJlY3QiKQ0KICAgICAgICAuc3R5bGUoImZpbGwiLCAicmdiYSgwLDAsMCwwLjEpIik7DQoNCiAgICBwYy5icnVzaEV4dGVudHMgPSBicnVzaEV4dGVudHM7DQogICAgcGMuYnJ1c2hSZXNldCA9IGJydXNoUmVzZXQ7DQogICAgcmV0dXJuIHBjOw0KICB9DQoNCiAgYnJ1c2gubW9kZXNbIjFELWF4ZXMtbXVsdGkiXSA9IHsNCiAgICBpbnN0YWxsOiBpbnN0YWxsLA0KICAgIHVuaW5zdGFsbDogZnVuY3Rpb24oKSB7DQogICAgICBnLnNlbGVjdEFsbCgiLmJydXNoIikucmVtb3ZlKCk7DQogICAgICBicnVzaGVzID0ge307DQogICAgICBkZWxldGUgcGMuYnJ1c2hFeHRlbnRzOw0KICAgICAgZGVsZXRlIHBjLmJydXNoUmVzZXQ7DQogICAgfSwNCiAgICBzZWxlY3RlZDogc2VsZWN0ZWQsDQogICAgYnJ1c2hTdGF0ZTogYnJ1c2hFeHRlbnRzDQogIH0NCn0pKCk7DQovLyBicnVzaCBtb2RlOiBhbmd1bGFyDQovLyBjb2RlIGJhc2VkIG9uIDJELnN0cnVtcy5qcw0KDQooZnVuY3Rpb24oKSB7DQogIHZhciBhcmNzID0ge30sDQogICAgICBzdHJ1bVJlY3Q7DQoNCiAgZnVuY3Rpb24gZHJhd1N0cnVtKGFyYywgYWN0aXZlUG9pbnQpIHsNCiAgICB2YXIgc3ZnID0gcGMuc2VsZWN0aW9uLnNlbGVjdCgic3ZnIikuc2VsZWN0KCJnI2FyY3MiKSwNCiAgICAgICAgaWQgPSBhcmMuZGltcy5pLA0KICAgICAgICBwb2ludHMgPSBbYXJjLnAyLCBhcmMucDNdLA0KICAgICAgICBsaW5lID0gc3ZnLnNlbGVjdEFsbCgibGluZSNhcmMtIiArIGlkKS5kYXRhKFt7cDE6YXJjLnAxLHAyOmFyYy5wMn0se3AxOmFyYy5wMSxwMjphcmMucDN9XSksDQogICAgICAgIGNpcmNsZXMgPSBzdmcuc2VsZWN0QWxsKCJjaXJjbGUjYXJjLSIgKyBpZCkuZGF0YShwb2ludHMpLA0KICAgICAgICBkcmFnID0gZDMuYmVoYXZpb3IuZHJhZygpLA0KICAgICAgICBwYXRoID0gc3ZnLnNlbGVjdEFsbCgicGF0aCNhcmMtIiArIGlkKS5kYXRhKFthcmNdKTsNCg0KICAgIHBhdGguZW50ZXIoKQ0KICAgICAgLmFwcGVuZCgicGF0aCIpDQogICAgICAuYXR0cigiaWQiLCAiYXJjLSIgKyBpZCkNCiAgICAgIC5hdHRyKCJjbGFzcyIsICJhcmMiKQ0KICAgICAgLnN0eWxlKCJmaWxsIiwgIm9yYW5nZSIpDQogICAgICAuc3R5bGUoIm9wYWNpdHkiLCAwLjUpOw0KDQogICAgcGF0aA0KICAgICAgLmF0dHIoImQiLCBhcmMuYXJjKQ0KICAgICAgLmF0dHIoInRyYW5zZm9ybSIsICJ0cmFuc2xhdGUoIiArIGFyYy5wMVswXSArICIsIiArIGFyYy5wMVsxXSArICIpIik7DQoNCiAgICBsaW5lLmVudGVyKCkNCiAgICAgIC5hcHBlbmQoImxpbmUiKQ0KICAgICAgLmF0dHIoImlkIiwgImFyYy0iICsgaWQpDQogICAgICAuYXR0cigiY2xhc3MiLCAiYXJjIik7DQoNCiAgICBsaW5lDQogICAgICAuYXR0cigieDEiLCBmdW5jdGlvbihkKSB7IHJldHVybiBkLnAxWzBdOyB9KQ0KICAgICAgLmF0dHIoInkxIiwgZnVuY3Rpb24oZCkgeyByZXR1cm4gZC5wMVsxXTsgfSkNCiAgICAgIC5hdHRyKCJ4MiIsIGZ1bmN0aW9uKGQpIHsgcmV0dXJuIGQucDJbMF07IH0pDQogICAgICAuYXR0cigieTIiLCBmdW5jdGlvbihkKSB7IHJldHVybiBkLnAyWzFdOyB9KQ0KICAgICAgLmF0dHIoInN0cm9rZSIsICJibGFjayIpDQogICAgICAuYXR0cigic3Ryb2tlLXdpZHRoIiwgMik7DQoNCiAgICBkcmFnDQogICAgICAub24oImRyYWciLCBmdW5jdGlvbihkLCBpKSB7DQogICAgICAgIHZhciBldiA9IGQzLmV2ZW50LA0KICAgICAgICAJYW5nbGUgPSAwOw0KDQogICAgICAgIGkgPSBpICsgMjsNCg0KICAgICAgICBhcmNbInAiICsgaV1bMF0gPSBNYXRoLm1pbihNYXRoLm1heChhcmMubWluWCArIDEsIGV2LngpLCBhcmMubWF4WCk7DQogICAgICAgIGFyY1sicCIgKyBpXVsxXSA9IE1hdGgubWluKE1hdGgubWF4KGFyYy5taW5ZLCBldi55KSwgYXJjLm1heFkpOw0KDQogICAgICAgIGFuZ2xlID0gaSA9PT0gMyA/IGFyY3Muc3RhcnRBbmdsZShpZCkgOiBhcmNzLmVuZEFuZ2xlKGlkKTsNCg0KICAgICAgICBpZiAoKGFyYy5zdGFydEFuZ2xlIDwgTWF0aC5QSSAmJiBhcmMuZW5kQW5nbGUgPCBNYXRoLlBJICYmIGFuZ2xlIDwgTWF0aC5QSSkgfHwNCiAgICAgICAgCQkoYXJjLnN0YXJ0QW5nbGUgPj0gTWF0aC5QSSAmJiBhcmMuZW5kQW5nbGUgPj0gTWF0aC5QSSAmJiBhbmdsZSA+PSBNYXRoLlBJKSkgew0KDQogICAgICAgIAlpZiAoaSA9PT0gMikgew0KCSAgICAgICAgCWFyYy5lbmRBbmdsZSA9IGFuZ2xlOw0KCSAgICAgICAgCWFyYy5hcmMuZW5kQW5nbGUoYW5nbGUpOw0KCSAgICAgICAgfSBlbHNlIGlmIChpID09PSAzKSB7DQoJICAgICAgICAJYXJjLnN0YXJ0QW5nbGUgPSBhbmdsZTsNCgkgICAgICAgIAlhcmMuYXJjLnN0YXJ0QW5nbGUoYW5nbGUpOw0KCSAgICAgICAgfQ0KDQogICAgICAgIH0NCg0KICAgICAgICBkcmF3U3RydW0oYXJjLCBpIC0gMik7DQogICAgICB9KQ0KICAgICAgLm9uKCJkcmFnZW5kIiwgb25EcmFnRW5kKCkpOw0KDQogICAgY2lyY2xlcy5lbnRlcigpDQogICAgICAuYXBwZW5kKCJjaXJjbGUiKQ0KICAgICAgLmF0dHIoImlkIiwgImFyYy0iICsgaWQpDQogICAgICAuYXR0cigiY2xhc3MiLCAiYXJjIik7DQoNCiAgICBjaXJjbGVzDQogICAgICAuYXR0cigiY3giLCBmdW5jdGlvbihkKSB7IHJldHVybiBkWzBdOyB9KQ0KICAgICAgLmF0dHIoImN5IiwgZnVuY3Rpb24oZCkgeyByZXR1cm4gZFsxXTsgfSkNCiAgICAgIC5hdHRyKCJyIiwgNSkNCiAgICAgIC5zdHlsZSgib3BhY2l0eSIsIGZ1bmN0aW9uKGQsIGkpIHsNCiAgICAgICAgcmV0dXJuIChhY3RpdmVQb2ludCAhPT0gdW5kZWZpbmVkICYmIGkgPT09IGFjdGl2ZVBvaW50KSA/IDAuOCA6IDA7DQogICAgICB9KQ0KICAgICAgLm9uKCJtb3VzZW92ZXIiLCBmdW5jdGlvbigpIHsNCiAgICAgICAgZDMuc2VsZWN0KHRoaXMpLnN0eWxlKCJvcGFjaXR5IiwgMC44KTsNCiAgICAgIH0pDQogICAgICAub24oIm1vdXNlb3V0IiwgZnVuY3Rpb24oKSB7DQogICAgICAgIGQzLnNlbGVjdCh0aGlzKS5zdHlsZSgib3BhY2l0eSIsIDApOw0KICAgICAgfSkNCiAgICAgIC5jYWxsKGRyYWcpOw0KICB9DQoNCiAgZnVuY3Rpb24gZGltZW5zaW9uc0ZvclBvaW50KHApIHsNCiAgICB2YXIgZGltcyA9IHsgaTogLTEsIGxlZnQ6IHVuZGVmaW5lZCwgcmlnaHQ6IHVuZGVmaW5lZCB9Ow0KICAgIGQzLmtleXMoX18uZGltZW5zaW9ucykuc29tZShmdW5jdGlvbihkaW0sIGkpIHsNCiAgICAgIGlmICh4c2NhbGUoZGltKSA8IHBbMF0pIHsNCiAgICAgICAgdmFyIG5leHQgPSBkMy5rZXlzKF9fLmRpbWVuc2lvbnMpW3BjLmdldE9yZGVyZWREaW1lbnNpb25LZXlzKCkuaW5kZXhPZihkaW0pKzFdOw0KICAgICAgICBkaW1zLmkgPSBpOw0KICAgICAgICBkaW1zLmxlZnQgPSBkaW07DQogICAgICAgIGRpbXMucmlnaHQgPSBuZXh0Ow0KICAgICAgICByZXR1cm4gZmFsc2U7DQogICAgICB9DQogICAgICByZXR1cm4gdHJ1ZTsNCiAgICB9KTsNCg0KICAgIGlmIChkaW1zLmxlZnQgPT09IHVuZGVmaW5lZCkgew0KICAgICAgLy8gRXZlbnQgb24gdGhlIGxlZnQgc2lkZSBvZiB0aGUgZmlyc3QgYXhpcy4NCiAgICAgIGRpbXMuaSA9IDA7DQogICAgICBkaW1zLmxlZnQgPSBwYy5nZXRPcmRlcmVkRGltZW5zaW9uS2V5cygpWzBdOw0KICAgICAgZGltcy5yaWdodCA9IHBjLmdldE9yZGVyZWREaW1lbnNpb25LZXlzKClbMV07DQogICAgfSBlbHNlIGlmIChkaW1zLnJpZ2h0ID09PSB1bmRlZmluZWQpIHsNCiAgICAgIC8vIEV2ZW50IG9uIHRoZSByaWdodCBzaWRlIG9mIHRoZSBsYXN0IGF4aXMNCiAgICAgIGRpbXMuaSA9IGQzLmtleXMoX18uZGltZW5zaW9ucykubGVuZ3RoIC0gMTsNCiAgICAgIGRpbXMucmlnaHQgPSBkaW1zLmxlZnQ7DQogICAgICBkaW1zLmxlZnQgPSBwYy5nZXRPcmRlcmVkRGltZW5zaW9uS2V5cygpW2QzLmtleXMoX18uZGltZW5zaW9ucykubGVuZ3RoIC0gMl07DQogICAgfQ0KDQogICAgcmV0dXJuIGRpbXM7DQogIH0NCg0KICBmdW5jdGlvbiBvbkRyYWdTdGFydCgpIHsNCiAgICAvLyBGaXJzdCB3ZSBuZWVkIHRvIGRldGVybWluZSBiZXR3ZWVuIHdoaWNoIHR3byBheGVzIHRoZSBhcmMgd2FzIHN0YXJ0ZWQuDQogICAgLy8gVGhpcyB3aWxsIGRldGVybWluZSB0aGUgZnJlZWRvbSBvZiBtb3ZlbWVudCwgYmVjYXVzZSBhIGFyYyBjYW4NCiAgICAvLyBsb2dpY2FsbHkgb25seSBoYXBwZW4gYmV0d2VlbiB0d28gYXhlcywgc28gbm8gbW92ZW1lbnQgb3V0c2lkZSB0aGVzZSBheGVzDQogICAgLy8gc2hvdWxkIGJlIGFsbG93ZWQuDQogICAgcmV0dXJuIGZ1bmN0aW9uKCkgew0KICAgICAgdmFyIHAgPSBkMy5tb3VzZShzdHJ1bVJlY3RbMF1bMF0pLA0KICAgICAgICAgIGRpbXMsDQogICAgICAgICAgYXJjOw0KDQogICAgICBwWzBdID0gcFswXSAtIF9fLm1hcmdpbi5sZWZ0Ow0KICAgICAgcFsxXSA9IHBbMV0gLSBfXy5tYXJnaW4udG9wOw0KDQogICAgICBkaW1zID0gZGltZW5zaW9uc0ZvclBvaW50KHApLA0KICAgICAgYXJjID0gew0KICAgICAgICBwMTogcCwNCiAgICAgICAgZGltczogZGltcywNCiAgICAgICAgbWluWDogeHNjYWxlKGRpbXMubGVmdCksDQogICAgICAgIG1heFg6IHhzY2FsZShkaW1zLnJpZ2h0KSwNCiAgICAgICAgbWluWTogMCwNCiAgICAgICAgbWF4WTogaCgpLA0KICAgICAgICBzdGFydEFuZ2xlOiB1bmRlZmluZWQsDQogICAgICAgIGVuZEFuZ2xlOiB1bmRlZmluZWQsDQogICAgICAgIGFyYzogZDMuc3ZnLmFyYygpLmlubmVyUmFkaXVzKDApDQogICAgICB9Ow0KDQogICAgICBhcmNzW2RpbXMuaV0gPSBhcmM7DQogICAgICBhcmNzLmFjdGl2ZSA9IGRpbXMuaTsNCg0KICAgICAgLy8gTWFrZSBzdXJlIHRoYXQgdGhlIHBvaW50IGlzIHdpdGhpbiB0aGUgYm91bmRzDQogICAgICBhcmMucDFbMF0gPSBNYXRoLm1pbihNYXRoLm1heChhcmMubWluWCwgcFswXSksIGFyYy5tYXhYKTsNCiAgICAgIGFyYy5wMiA9IGFyYy5wMS5zbGljZSgpOw0KICAgICAgYXJjLnAzID0gYXJjLnAxLnNsaWNlKCk7DQogICAgfTsNCiAgfQ0KDQogIGZ1bmN0aW9uIG9uRHJhZygpIHsNCiAgICByZXR1cm4gZnVuY3Rpb24oKSB7DQogICAgICB2YXIgZXYgPSBkMy5ldmVudCwNCiAgICAgICAgICBhcmMgPSBhcmNzW2FyY3MuYWN0aXZlXTsNCg0KICAgICAgLy8gTWFrZSBzdXJlIHRoYXQgdGhlIHBvaW50IGlzIHdpdGhpbiB0aGUgYm91bmRzDQogICAgICBhcmMucDJbMF0gPSBNYXRoLm1pbihNYXRoLm1heChhcmMubWluWCArIDEsIGV2LnggLSBfXy5tYXJnaW4ubGVmdCksIGFyYy5tYXhYKTsNCiAgICAgIGFyYy5wMlsxXSA9IE1hdGgubWluKE1hdGgubWF4KGFyYy5taW5ZLCBldi55IC0gX18ubWFyZ2luLnRvcCksIGFyYy5tYXhZKTsNCiAgICAgIGFyYy5wMyA9IGFyYy5wMi5zbGljZSgpOw0KLy8gICAgICBjb25zb2xlLmxvZyhhcmNzLmFuZ2xlKGFyY3MuYWN0aXZlKSk7DQovLyAgICAgIGNvbnNvbGUubG9nKHNpZ25lZEFuZ2xlKGFyY3MudW5zaWduZWRBbmdsZShhcmNzLmFjdGl2ZSkpKTsNCiAgICAgIGRyYXdTdHJ1bShhcmMsIDEpOw0KICAgIH07DQogIH0NCg0KICAvLyBzb21lIGhlbHBlciBmdW5jdGlvbnMNCiAgZnVuY3Rpb24gaHlwb3RoZW51c2UoYSwgYikgew0KCSAgcmV0dXJuIE1hdGguc3FydChhKmEgKyBiKmIpOw0KICB9DQoNCiAgdmFyIHJhZCA9IChmdW5jdGlvbigpIHsNCgkgIHZhciBjID0gTWF0aC5QSSAvIDE4MDsNCgkgIHJldHVybiBmdW5jdGlvbihhbmdsZSkgew0KCQkgIHJldHVybiBhbmdsZSAqIGM7DQoJICB9Ow0KICB9KSgpOw0KDQogIHZhciBkZWcgPSAoZnVuY3Rpb24oKSB7DQoJICB2YXIgYyA9IDE4MCAvIE1hdGguUEk7DQoJICByZXR1cm4gZnVuY3Rpb24oYW5nbGUpIHsNCgkJICByZXR1cm4gYW5nbGUgKiBjOw0KCSAgfTsNCiAgfSkoKTsNCg0KICAvLyBbMCwgMipQSV0gLT4gWy1QSS8yLCBQSS8yXQ0KICB2YXIgc2lnbmVkQW5nbGUgPSBmdW5jdGlvbihhbmdsZSkgew0KICAgIHZhciByZXQgPSBhbmdsZTsNCiAgICBpZiAoYW5nbGUgPiBNYXRoLlBJKSB7DQogICAgICByZXQgPSBhbmdsZSAtIDEuNSAqIE1hdGguUEk7DQogICAgICByZXQgPSBhbmdsZSAtIDEuNSAqIE1hdGguUEk7DQogICAgfSBlbHNlIHsNCiAgICAgIHJldCA9IGFuZ2xlIC0gMC41ICogTWF0aC5QSTsNCiAgICAgIHJldCA9IGFuZ2xlIC0gMC41ICogTWF0aC5QSTsNCiAgICB9DQogICAgcmV0dXJuIC1yZXQ7DQogIH0NCg0KICAvKioNCiAgICogYW5nbGVzIGFyZSBzdG9yZWQgaW4gcmFkaWFucyBmcm9tIGluIFswLCAyKlBJXSwgd2hlcmUgMCBpbiAxMiBvJ2Nsb2NrLg0KICAgKiBIb3dldmVyLCBvbmUgY2FuIG9ubHkgc2VsZWN0IGxpbmVzIGZyb20gMCB0byBQSSwgc28gd2UgY29tcHV0ZSB0aGUNCiAgICogJ3NpZ25lZCcgYW5nbGUsIHdoZXJlIDAgaXMgdGhlIGhvcml6b250YWwgbGluZSAoMyBvJ2Nsb2NrKSwgYW5kICsvLSBQSS8yDQogICAqIGFyZSAxMiBhbmQgNiBvJ2Nsb2NrIHJlc3BlY3RpdmVseS4NCiAgICovDQogIGZ1bmN0aW9uIGNvbnRhaW5tZW50VGVzdChhcmMpIHsNCiAgICB2YXIgc3RhcnRBbmdsZSA9IHNpZ25lZEFuZ2xlKGFyYy5zdGFydEFuZ2xlKTsNCiAgICB2YXIgZW5kQW5nbGUgPSBzaWduZWRBbmdsZShhcmMuZW5kQW5nbGUpOw0KDQogICAgaWYgKHN0YXJ0QW5nbGUgPiBlbmRBbmdsZSkgew0KICAgIAl2YXIgdG1wID0gc3RhcnRBbmdsZTsNCiAgICAJc3RhcnRBbmdsZSA9IGVuZEFuZ2xlOw0KICAgIAllbmRBbmdsZSA9IHRtcDsNCiAgICB9DQoNCiAgICAvLyB0ZXN0IGlmIHNlZ21lbnQgYW5nbGUgaXMgY29udGFpbmVkIGluIGFuZ2xlIGludGVydmFsDQogICAgcmV0dXJuIGZ1bmN0aW9uKGEpIHsNCg0KICAgICAgaWYgKGEgPj0gc3RhcnRBbmdsZSAmJiBhIDw9IGVuZEFuZ2xlKSB7DQogICAgICAgIHJldHVybiB0cnVlOw0KICAgICAgfQ0KDQogICAgICByZXR1cm4gZmFsc2U7DQogICAgfTsNCiAgfQ0KDQogIGZ1bmN0aW9uIHNlbGVjdGVkKCkgew0KICAgIHZhciBpZHMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyhhcmNzKSwNCiAgICAgICAgYnJ1c2hlZCA9IF9fLmRhdGE7DQoNCiAgICAvLyBHZXQgdGhlIGlkcyBvZiB0aGUgY3VycmVudGx5IGFjdGl2ZSBhcmNzLg0KICAgIGlkcyA9IGlkcy5maWx0ZXIoZnVuY3Rpb24oZCkgew0KICAgICAgcmV0dXJuICFpc05hTihkKTsNCiAgICB9KTsNCg0KICAgIGZ1bmN0aW9uIGNyb3NzZXNTdHJ1bShkLCBpZCkgew0KICAgICAgdmFyIGFyYyA9IGFyY3NbaWRdLA0KICAgICAgICAgIHRlc3QgPSBjb250YWlubWVudFRlc3QoYXJjKSwNCiAgICAgICAgICBkMSA9IGFyYy5kaW1zLmxlZnQsDQogICAgICAgICAgZDIgPSBhcmMuZGltcy5yaWdodCwNCiAgICAgICAgICB5MSA9IF9fLmRpbWVuc2lvbnNbZDFdLnlzY2FsZSwNCiAgICAgICAgICB5MiA9IF9fLmRpbWVuc2lvbnNbZDJdLnlzY2FsZSwNCiAgICAgICAgICBhID0gYXJjcy53aWR0aChpZCksDQogICAgICAgICAgYiA9IHkxKGRbZDFdKSAtIHkyKGRbZDJdKSwNCiAgICAgICAgICBjID0gaHlwb3RoZW51c2UoYSwgYiksDQogICAgICAgICAgYW5nbGUgPSBNYXRoLmFzaW4oYi9jKTsJLy8gcmFkIGluIFstUEkvMiwgUEkvMl0NCiAgICAgIHJldHVybiB0ZXN0KGFuZ2xlKTsNCiAgICB9DQoNCiAgICBpZiAoaWRzLmxlbmd0aCA9PT0gMCkgeyByZXR1cm4gYnJ1c2hlZDsgfQ0KDQogICAgcmV0dXJuIGJydXNoZWQuZmlsdGVyKGZ1bmN0aW9uKGQpIHsNCiAgICAgIHN3aXRjaChicnVzaC5wcmVkaWNhdGUpIHsNCiAgICAgIGNhc2UgIkFORCI6DQogICAgICAgIHJldHVybiBpZHMuZXZlcnkoZnVuY3Rpb24oaWQpIHsgcmV0dXJuIGNyb3NzZXNTdHJ1bShkLCBpZCk7IH0pOw0KICAgICAgY2FzZSAiT1IiOg0KICAgICAgICByZXR1cm4gaWRzLnNvbWUoZnVuY3Rpb24oaWQpIHsgcmV0dXJuIGNyb3NzZXNTdHJ1bShkLCBpZCk7IH0pOw0KICAgICAgZGVmYXVsdDoNCiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCJVbmtub3duIGJydXNoIHByZWRpY2F0ZSAiICsgX18uYnJ1c2hQcmVkaWNhdGUpOw0KICAgICAgfQ0KICAgIH0pOw0KICB9DQoNCiAgZnVuY3Rpb24gcmVtb3ZlU3RydW0oKSB7DQogICAgdmFyIGFyYyA9IGFyY3NbYXJjcy5hY3RpdmVdLA0KICAgICAgICBzdmcgPSBwYy5zZWxlY3Rpb24uc2VsZWN0KCJzdmciKS5zZWxlY3QoImcjYXJjcyIpOw0KDQogICAgZGVsZXRlIGFyY3NbYXJjcy5hY3RpdmVdOw0KICAgIGFyY3MuYWN0aXZlID0gdW5kZWZpbmVkOw0KICAgIHN2Zy5zZWxlY3RBbGwoImxpbmUjYXJjLSIgKyBhcmMuZGltcy5pKS5yZW1vdmUoKTsNCiAgICBzdmcuc2VsZWN0QWxsKCJjaXJjbGUjYXJjLSIgKyBhcmMuZGltcy5pKS5yZW1vdmUoKTsNCiAgICBzdmcuc2VsZWN0QWxsKCJwYXRoI2FyYy0iICsgYXJjLmRpbXMuaSkucmVtb3ZlKCk7DQogIH0NCg0KICBmdW5jdGlvbiBvbkRyYWdFbmQoKSB7DQogICAgcmV0dXJuIGZ1bmN0aW9uKCkgew0KICAgICAgdmFyIGJydXNoZWQgPSBfXy5kYXRhLA0KICAgICAgICAgIGFyYyA9IGFyY3NbYXJjcy5hY3RpdmVdOw0KDQogICAgICAvLyBPa2F5LCBzb21ld2hhdCB1bmV4cGVjdGVkLCBidXQgbm90IHRvdGFsbHkgdW5zdXJwcmlzaW5nLCBhIG1vdXNjbGljayBpcw0KICAgICAgLy8gY29uc2lkZXJlZCBhIGRyYWcgd2l0aG91dCBtb3ZlLiBTbyB3ZSBoYXZlIHRvIGRlYWwgd2l0aCB0aGF0IGNhc2UNCiAgICAgIGlmIChhcmMgJiYgYXJjLnAxWzBdID09PSBhcmMucDJbMF0gJiYgYXJjLnAxWzFdID09PSBhcmMucDJbMV0pIHsNCiAgICAgICAgcmVtb3ZlU3RydW0oYXJjcyk7DQogICAgICB9DQoNCiAgICAgIGlmIChhcmMpIHsNCiAgICAJICB2YXIgYW5nbGUgPSBhcmNzLnN0YXJ0QW5nbGUoYXJjcy5hY3RpdmUpOw0KDQogICAgCSAgYXJjLnN0YXJ0QW5nbGUgPSBhbmdsZTsNCiAgICAgICAgICBhcmMuZW5kQW5nbGUgPSBhbmdsZTsNCiAgICAgICAgICBhcmMuYXJjDQogICAgICAgICAgICAub3V0ZXJSYWRpdXMoYXJjcy5sZW5ndGgoYXJjcy5hY3RpdmUpKQ0KICAgICAgICAgICAgLnN0YXJ0QW5nbGUoYW5nbGUpDQogICAgICAgICAgICAuZW5kQW5nbGUoYW5nbGUpOw0KICAgICAgfQ0KDQoNCiAgICAgIGJydXNoZWQgPSBzZWxlY3RlZChhcmNzKTsNCiAgICAgIGFyY3MuYWN0aXZlID0gdW5kZWZpbmVkOw0KICAgICAgX18uYnJ1c2hlZCA9IGJydXNoZWQ7DQogICAgICBwYy5yZW5kZXJCcnVzaGVkKCk7DQogICAgICBldmVudHMuYnJ1c2hlbmQuY2FsbChwYywgX18uYnJ1c2hlZCk7DQogICAgfTsNCiAgfQ0KDQogIGZ1bmN0aW9uIGJydXNoUmVzZXQoYXJjcykgew0KICAgIHJldHVybiBmdW5jdGlvbigpIHsNCiAgICAgIHZhciBpZHMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyhhcmNzKS5maWx0ZXIoZnVuY3Rpb24oZCkgew0KICAgICAgICByZXR1cm4gIWlzTmFOKGQpOw0KICAgICAgfSk7DQoNCiAgICAgIGlkcy5mb3JFYWNoKGZ1bmN0aW9uKGQpIHsNCiAgICAgICAgYXJjcy5hY3RpdmUgPSBkOw0KICAgICAgICByZW1vdmVTdHJ1bShhcmNzKTsNCiAgICAgIH0pOw0KICAgICAgb25EcmFnRW5kKGFyY3MpKCk7DQogICAgfTsNCiAgfQ0KDQogIGZ1bmN0aW9uIGluc3RhbGwoKSB7DQogICAgdmFyIGRyYWcgPSBkMy5iZWhhdmlvci5kcmFnKCk7DQoNCiAgICAvLyBNYXAgb2YgY3VycmVudCBhcmNzLiBhcmNzIGFyZSBzdG9yZWQgcGVyIHNlZ21lbnQgb2YgdGhlIFBDLiBBIHNlZ21lbnQsDQogICAgLy8gYmVpbmcgdGhlIGFyZWEgYmV0d2VlbiB0d28gYXhlcy4gVGhlIGxlZnQgbW9zdCBhcmVhIGlzIGluZGV4ZWQgYXQgMC4NCiAgICBhcmNzLmFjdGl2ZSA9IHVuZGVmaW5lZDsNCiAgICAvLyBSZXR1cm5zIHRoZSB3aWR0aCBvZiB0aGUgUEMgc2VnbWVudCB3aGVyZSBjdXJyZW50bHkgYSBhcmMgaXMgYmVpbmcNCiAgICAvLyBwbGFjZWQuIE5PVEU6IGV2ZW4gdGhvdWdoIHRoZXkgYXJlIGV2ZW5seSBzcGFjZWQgaW4gb3VyIGN1cnJlbnQNCiAgICAvLyBpbXBsZW1lbnRhdGlvbiwgd2Uga2VlcCBmb3Igd2hlbiBub24tZXZlbiBzcGFjZWQgc2VnbWVudHMgYXJlIHN1cHBvcnRlZCBhcw0KICAgIC8vIHdlbGwuDQogICAgYXJjcy53aWR0aCA9IGZ1bmN0aW9uKGlkKSB7DQogICAgICB2YXIgYXJjID0gYXJjc1tpZF07DQoNCiAgICAgIGlmIChhcmMgPT09IHVuZGVmaW5lZCkgew0KICAgICAgICByZXR1cm4gdW5kZWZpbmVkOw0KICAgICAgfQ0KDQogICAgICByZXR1cm4gYXJjLm1heFggLSBhcmMubWluWDsNCiAgICB9Ow0KDQogICAgLy8gcmV0dXJucyBhbmdsZXMgaW4gWy1QSS8yLCBQSS8yXQ0KICAgIGFuZ2xlID0gZnVuY3Rpb24ocDEsIHAyKSB7DQogICAgICAgIHZhciBhID0gcDFbMF0gLSBwMlswXSwNCiAgICAgICAgCWIgPSBwMVsxXSAtIHAyWzFdLA0KICAgICAgICAJYyA9IGh5cG90aGVudXNlKGEsIGIpOw0KDQogICAgICAgIHJldHVybiBNYXRoLmFzaW4oYi9jKTsNCiAgICB9DQoNCiAgICAvLyByZXR1cm5zIGFuZ2xlcyBpbiBbMCwgMiAqIFBJXQ0KICAgIGFyY3MuZW5kQW5nbGUgPSBmdW5jdGlvbihpZCkgew0KICAgIAl2YXIgYXJjID0gYXJjc1tpZF07DQogICAgCWlmIChhcmMgPT09IHVuZGVmaW5lZCkgew0KICAgICAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDsNCiAgICAgICAgfQ0KICAgIAl2YXIgc0FuZ2xlID0gYW5nbGUoYXJjLnAxLCBhcmMucDIpLA0KICAgIAkJdUFuZ2xlID0gLXNBbmdsZSArIE1hdGguUEkgLyAyOw0KDQogICAgCWlmIChhcmMucDFbMF0gPiBhcmMucDJbMF0pIHsNCiAgICAJCXVBbmdsZSA9IDIgKiBNYXRoLlBJIC0gdUFuZ2xlOw0KICAgIAl9DQoNCiAgICAJcmV0dXJuIHVBbmdsZTsNCiAgICB9DQoNCiAgICBhcmNzLnN0YXJ0QW5nbGUgPSBmdW5jdGlvbihpZCkgew0KICAgIAl2YXIgYXJjID0gYXJjc1tpZF07DQogICAgCWlmIChhcmMgPT09IHVuZGVmaW5lZCkgew0KICAgICAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDsNCiAgICAgICAgfQ0KDQogICAgCXZhciBzQW5nbGUgPSBhbmdsZShhcmMucDEsIGFyYy5wMyksDQogICAgCQl1QW5nbGUgPSAtc0FuZ2xlICsgTWF0aC5QSSAvIDI7DQoNCiAgICAJaWYgKGFyYy5wMVswXSA+IGFyYy5wM1swXSkgew0KICAgIAkJdUFuZ2xlID0gMiAqIE1hdGguUEkgLSB1QW5nbGU7DQogICAgCX0NCg0KICAgIAlyZXR1cm4gdUFuZ2xlOw0KICAgIH0NCg0KICAgIGFyY3MubGVuZ3RoID0gZnVuY3Rpb24oaWQpIHsNCiAgICAJdmFyIGFyYyA9IGFyY3NbaWRdOw0KDQogICAgICAgIGlmIChhcmMgPT09IHVuZGVmaW5lZCkgew0KICAgICAgICAgIHJldHVybiB1bmRlZmluZWQ7DQogICAgICAgIH0NCg0KICAgICAgICB2YXIgYSA9IGFyYy5wMVswXSAtIGFyYy5wMlswXSwNCiAgICAgICAgCWIgPSBhcmMucDFbMV0gLSBhcmMucDJbMV0sDQogICAgICAgIAljID0gaHlwb3RoZW51c2UoYSwgYik7DQoNCiAgICAgICAgcmV0dXJuKGMpOw0KICAgIH0NCg0KICAgIHBjLm9uKCJheGVzcmVvcmRlci5hcmNzIiwgZnVuY3Rpb24oKSB7DQogICAgICB2YXIgaWRzID0gT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMoYXJjcykuZmlsdGVyKGZ1bmN0aW9uKGQpIHsNCiAgICAgICAgcmV0dXJuICFpc05hTihkKTsNCiAgICAgIH0pOw0KDQogICAgICAvLyBDaGVja3MgaWYgdGhlIGZpcnN0IGRpbWVuc2lvbiBpcyBkaXJlY3RseSBsZWZ0IG9mIHRoZSBzZWNvbmQgZGltZW5zaW9uLg0KICAgICAgZnVuY3Rpb24gY29uc2VjdXRpdmUoZmlyc3QsIHNlY29uZCkgew0KICAgICAgICB2YXIgbGVuZ3RoID0gZDMua2V5cyhfXy5kaW1lbnNpb25zKS5sZW5ndGg7DQogICAgICAgIHJldHVybiBkMy5rZXlzKF9fLmRpbWVuc2lvbnMpLnNvbWUoZnVuY3Rpb24oZCwgaSkgew0KICAgICAgICAgIHJldHVybiAoZCA9PT0gZmlyc3QpDQogICAgICAgICAgICA/IGkgKyBpIDwgbGVuZ3RoICYmIF9fLmRpbWVuc2lvbnNbaSArIDFdID09PSBzZWNvbmQNCiAgICAgICAgICAgIDogZmFsc2U7DQogICAgICAgIH0pOw0KICAgICAgfQ0KDQogICAgICBpZiAoaWRzLmxlbmd0aCA+IDApIHsgLy8gV2UgaGF2ZSBzb21lIGFyY3MsIHdoaWNoIG1pZ2h0IG5lZWQgdG8gYmUgcmVtb3ZlZC4NCiAgICAgICAgaWRzLmZvckVhY2goZnVuY3Rpb24oZCkgew0KICAgICAgICAgIHZhciBkaW1zID0gYXJjc1tkXS5kaW1zOw0KICAgICAgICAgIGFyY3MuYWN0aXZlID0gZDsNCiAgICAgICAgICAvLyBJZiB0aGUgdHdvIGRpbWVuc2lvbnMgb2YgdGhlIGN1cnJlbnQgYXJjIGFyZSBub3QgbmV4dCB0byBlYWNoIG90aGVyDQogICAgICAgICAgLy8gYW55IG1vcmUsIHRoYW4gd2UnbGwgbmVlZCB0byByZW1vdmUgdGhlIGFyYy4gT3RoZXJ3aXNlIHdlIGtlZXAgaXQuDQogICAgICAgICAgaWYgKCFjb25zZWN1dGl2ZShkaW1zLmxlZnQsIGRpbXMucmlnaHQpKSB7DQogICAgICAgICAgICByZW1vdmVTdHJ1bShhcmNzKTsNCiAgICAgICAgICB9DQogICAgICAgIH0pOw0KICAgICAgICBvbkRyYWdFbmQoYXJjcykoKTsNCiAgICAgIH0NCiAgICB9KTsNCg0KICAgIC8vIEFkZCBhIG5ldyBzdmcgZ3JvdXAgaW4gd2hpY2ggd2UgZHJhdyB0aGUgYXJjcy4NCiAgICBwYy5zZWxlY3Rpb24uc2VsZWN0KCJzdmciKS5hcHBlbmQoImciKQ0KICAgICAgLmF0dHIoImlkIiwgImFyY3MiKQ0KICAgICAgLmF0dHIoInRyYW5zZm9ybSIsICJ0cmFuc2xhdGUoIiArIF9fLm1hcmdpbi5sZWZ0ICsgIiwiICsgX18ubWFyZ2luLnRvcCArICIpIik7DQoNCiAgICAvLyBJbnN0YWxsIHRoZSByZXF1aXJlZCBicnVzaFJlc2V0IGZ1bmN0aW9uDQogICAgcGMuYnJ1c2hSZXNldCA9IGJydXNoUmVzZXQoYXJjcyk7DQoNCiAgICBkcmFnDQogICAgICAub24oImRyYWdzdGFydCIsIG9uRHJhZ1N0YXJ0KGFyY3MpKQ0KICAgICAgLm9uKCJkcmFnIiwgb25EcmFnKGFyY3MpKQ0KICAgICAgLm9uKCJkcmFnZW5kIiwgb25EcmFnRW5kKGFyY3MpKTsNCg0KICAgIC8vIE5PVEU6IFRoZSBzdHlsaW5nIG5lZWRzIHRvIGJlIGRvbmUgaGVyZSBhbmQgbm90IGluIHRoZSBjc3MuIFRoaXMgaXMgYmVjYXVzZQ0KICAgIC8vICAgICAgIGZvciAxRCBicnVzaGluZywgdGhlIGNhbnZhcyBsYXllcnMgc2hvdWxkIG5vdCBsaXN0ZW4gdG8NCiAgICAvLyAgICAgICBwb2ludGVyLWV2ZW50cy4NCiAgICBzdHJ1bVJlY3QgPSBwYy5zZWxlY3Rpb24uc2VsZWN0KCJzdmciKS5pbnNlcnQoInJlY3QiLCAiZyNhcmNzIikNCiAgICAgIC5hdHRyKCJpZCIsICJhcmMtZXZlbnRzIikNCiAgICAgIC5hdHRyKCJ4IiwgX18ubWFyZ2luLmxlZnQpDQogICAgICAuYXR0cigieSIsIF9fLm1hcmdpbi50b3ApDQogICAgICAuYXR0cigid2lkdGgiLCB3KCkpDQogICAgICAuYXR0cigiaGVpZ2h0IiwgaCgpICsgMikNCiAgICAgIC5zdHlsZSgib3BhY2l0eSIsIDApDQogICAgICAuY2FsbChkcmFnKTsNCiAgfQ0KDQogIGJydXNoLm1vZGVzWyJhbmd1bGFyIl0gPSB7DQogICAgaW5zdGFsbDogaW5zdGFsbCwNCiAgICB1bmluc3RhbGw6IGZ1bmN0aW9uKCkgew0KICAgICAgcGMuc2VsZWN0aW9uLnNlbGVjdCgic3ZnIikuc2VsZWN0KCJnI2FyY3MiKS5yZW1vdmUoKTsNCiAgICAgIHBjLnNlbGVjdGlvbi5zZWxlY3QoInN2ZyIpLnNlbGVjdCgicmVjdCNhcmMtZXZlbnRzIikucmVtb3ZlKCk7DQogICAgICBwYy5vbigiYXhlc3Jlb3JkZXIuYXJjcyIsIHVuZGVmaW5lZCk7DQogICAgICBkZWxldGUgcGMuYnJ1c2hSZXNldDsNCg0KICAgICAgc3RydW1SZWN0ID0gdW5kZWZpbmVkOw0KICAgIH0sDQogICAgc2VsZWN0ZWQ6IHNlbGVjdGVkLA0KICAgIGJydXNoU3RhdGU6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIGFyY3M7IH0NCiAgfTsNCg0KfSgpKTsNCnBjLmludGVyYWN0aXZlID0gZnVuY3Rpb24oKSB7DQogIGZsYWdzLmludGVyYWN0aXZlID0gdHJ1ZTsNCiAgcmV0dXJuIHRoaXM7DQp9Ow0KDQovLyBleHBvc2UgYSBmZXcgb2JqZWN0cw0KcGMueHNjYWxlID0geHNjYWxlOw0KcGMuY3R4ID0gY3R4Ow0KcGMuY2FudmFzID0gY2FudmFzOw0KcGMuZyA9IGZ1bmN0aW9uKCkgeyByZXR1cm4gZzsgfTsNCg0KLy8gcmVzY2FsZSBmb3IgaGVpZ2h0LCB3aWR0aCBhbmQgbWFyZ2lucw0KLy8gVE9ETyBjdXJyZW50bHkgYXNzdW1lcyBjaGFydCBpcyBicnVzaGFibGUsIGFuZCBkZXN0cm95cyBvbGQgYnJ1c2hlcw0KcGMucmVzaXplID0gZnVuY3Rpb24oKSB7DQogIC8vIHNlbGVjdGlvbiBzaXplDQogIHBjLnNlbGVjdGlvbi5zZWxlY3QoInN2ZyIpDQogICAgLmF0dHIoIndpZHRoIiwgX18ud2lkdGgpDQogICAgLmF0dHIoImhlaWdodCIsIF9fLmhlaWdodCkNCiAgcGMuc3ZnLmF0dHIoInRyYW5zZm9ybSIsICJ0cmFuc2xhdGUoIiArIF9fLm1hcmdpbi5sZWZ0ICsgIiwiICsgX18ubWFyZ2luLnRvcCArICIpIik7DQoNCiAgLy8gRklYTUU6IHRoZSBjdXJyZW50IGJydXNoIHN0YXRlIHNob3VsZCBwYXNzIHRocm91Z2gNCiAgaWYgKGZsYWdzLmJydXNoYWJsZSkgcGMuYnJ1c2hSZXNldCgpOw0KDQogIC8vIHNjYWxlcw0KICBwYy5hdXRvc2NhbGUoKTsNCg0KICAvLyBheGVzLCBkZXN0cm95cyBvbGQgYnJ1c2hlcy4NCiAgaWYgKGcpIHBjLmNyZWF0ZUF4ZXMoKTsNCiAgaWYgKGZsYWdzLmJydXNoYWJsZSkgcGMuYnJ1c2hhYmxlKCk7DQogIGlmIChmbGFncy5yZW9yZGVyYWJsZSkgcGMucmVvcmRlcmFibGUoKTsNCg0KICBldmVudHMucmVzaXplLmNhbGwodGhpcywge3dpZHRoOiBfXy53aWR0aCwgaGVpZ2h0OiBfXy5oZWlnaHQsIG1hcmdpbjogX18ubWFyZ2lufSk7DQogIHJldHVybiB0aGlzOw0KfTsNCg0KLy8gaGlnaGxpZ2h0IGFuIGFycmF5IG9mIGRhdGENCnBjLmhpZ2hsaWdodCA9IGZ1bmN0aW9uKGRhdGEpIHsNCiAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPT09IDApIHsNCiAgICByZXR1cm4gX18uaGlnaGxpZ2h0ZWQ7DQogIH0NCg0KICBfXy5oaWdobGlnaHRlZCA9IGRhdGE7DQogIHBjLmNsZWFyKCJoaWdobGlnaHQiKTsNCiAgZDMuc2VsZWN0QWxsKFtjYW52YXMuZm9yZWdyb3VuZCwgY2FudmFzLmJydXNoZWRdKS5jbGFzc2VkKCJmYWRlZCIsIHRydWUpOw0KICBkYXRhLmZvckVhY2gocGF0aF9oaWdobGlnaHQpOw0KICBldmVudHMuaGlnaGxpZ2h0LmNhbGwodGhpcywgZGF0YSk7DQogIHJldHVybiB0aGlzOw0KfTsNCg0KLy8gY2xlYXIgaGlnaGxpZ2h0aW5nDQpwYy51bmhpZ2hsaWdodCA9IGZ1bmN0aW9uKCkgew0KICBfXy5oaWdobGlnaHRlZCA9IFtdOw0KICBwYy5jbGVhcigiaGlnaGxpZ2h0Iik7DQogIGQzLnNlbGVjdEFsbChbY2FudmFzLmZvcmVncm91bmQsIGNhbnZhcy5icnVzaGVkXSkuY2xhc3NlZCgiZmFkZWQiLCBmYWxzZSk7DQogIHJldHVybiB0aGlzOw0KfTsNCg0KLy8gY2FsY3VsYXRlIDJkIGludGVyc2VjdGlvbiBvZiBsaW5lIGEtPmIgd2l0aCBsaW5lIGMtPmQNCi8vIHBvaW50cyBhcmUgb2JqZWN0cyB3aXRoIHggYW5kIHkgcHJvcGVydGllcw0KcGMuaW50ZXJzZWN0aW9uID0gIGZ1bmN0aW9uKGEsIGIsIGMsIGQpIHsNCiAgcmV0dXJuIHsNCiAgICB4OiAoKGEueCAqIGIueSAtIGEueSAqIGIueCkgKiAoYy54IC0gZC54KSAtIChhLnggLSBiLngpICogKGMueCAqIGQueSAtIGMueSAqIGQueCkpIC8gKChhLnggLSBiLngpICogKGMueSAtIGQueSkgLSAoYS55IC0gYi55KSAqIChjLnggLSBkLngpKSwNCiAgICB5OiAoKGEueCAqIGIueSAtIGEueSAqIGIueCkgKiAoYy55IC0gZC55KSAtIChhLnkgLSBiLnkpICogKGMueCAqIGQueSAtIGMueSAqIGQueCkpIC8gKChhLnggLSBiLngpICogKGMueSAtIGQueSkgLSAoYS55IC0gYi55KSAqIChjLnggLSBkLngpKQ0KICB9Ow0KfTsNCg0KZnVuY3Rpb24gcG9zaXRpb24oZCkgew0KICBpZiAoeHNjYWxlLnJhbmdlKCkubGVuZ3RoID09PSAwKSB7DQogICAgeHNjYWxlLnJhbmdlUG9pbnRzKFswLCB3KCldLCAxKTsNCiAgfQ0KICB2YXIgdiA9IGRyYWdnaW5nW2RdOw0KICByZXR1cm4gdiA9PSBudWxsID8geHNjYWxlKGQpIDogdjsNCn0NCg0KLy8gTWVyZ2VzIHRoZSBjYW52YXNlcyBhbmQgU1ZHIGVsZW1lbnRzIGludG8gb25lIGNhbnZhcyBlbGVtZW50IHdoaWNoIGlzIHRoZW4gcGFzc2VkIGludG8gdGhlIGNhbGxiYWNrDQovLyAoc28geW91IGNhbiBjaG9vc2UgdG8gc2F2ZSBpdCB0byBkaXNrLCBldGMuKQ0KcGMubWVyZ2VQYXJjb29yZHMgPSBmdW5jdGlvbihjYWxsYmFjaykgew0KICAvLyBSZXRpbmEgZGlzcGxheSwgZXRjLg0KICB2YXIgZGV2aWNlUGl4ZWxSYXRpbyA9IHdpbmRvdy5kZXZpY2VQaXhlbFJhdGlvIHx8IDE7DQoNCiAgLy8gQ3JlYXRlIGEgY2FudmFzIGVsZW1lbnQgdG8gc3RvcmUgdGhlIG1lcmdlZCBjYW52YXNlcw0KICB2YXIgbWVyZ2VkQ2FudmFzID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiY2FudmFzIik7DQogIG1lcmdlZENhbnZhcy53aWR0aCA9IHBjLmNhbnZhcy5mb3JlZ3JvdW5kLmNsaWVudFdpZHRoICogZGV2aWNlUGl4ZWxSYXRpbw0KICBtZXJnZWRDYW52YXMuaGVpZ2h0ID0gKHBjLmNhbnZhcy5mb3JlZ3JvdW5kLmNsaWVudEhlaWdodCArIDMwKSAqIGRldmljZVBpeGVsUmF0aW87DQogIG1lcmdlZENhbnZhcy5zdHlsZS53aWR0aCA9IG1lcmdlZENhbnZhcy53aWR0aCAvIGRldmljZVBpeGVsUmF0aW8gKyAicHgiOw0KICBtZXJnZWRDYW52YXMuc3R5bGUuaGVpZ2h0ID0gbWVyZ2VkQ2FudmFzLmhlaWdodCAvIGRldmljZVBpeGVsUmF0aW8gKyAicHgiOw0KDQogIC8vIEdpdmUgdGhlIGNhbnZhcyBhIHdoaXRlIGJhY2tncm91bmQNCiAgdmFyIGNvbnRleHQgPSBtZXJnZWRDYW52YXMuZ2V0Q29udGV4dCgiMmQiKTsNCiAgY29udGV4dC5maWxsU3R5bGUgPSAiI2ZmZmZmZiI7DQogIGNvbnRleHQuZmlsbFJlY3QoMCwgMCwgbWVyZ2VkQ2FudmFzLndpZHRoLCBtZXJnZWRDYW52YXMuaGVpZ2h0KTsNCg0KICAvLyBNZXJnZSBhbGwgdGhlIGNhbnZhc2VzDQogIGZvciAodmFyIGtleSBpbiBwYy5jYW52YXMpIHsNCiAgICBjb250ZXh0LmRyYXdJbWFnZShwYy5jYW52YXNba2V5XSwgMCwgMjQgKiBkZXZpY2VQaXhlbFJhdGlvLCBtZXJnZWRDYW52YXMud2lkdGgsIG1lcmdlZENhbnZhcy5oZWlnaHQgLSAzMCAqIGRldmljZVBpeGVsUmF0aW8pOw0KICB9DQoNCiAgLy8gQWRkIFNWRyBlbGVtZW50cyB0byBjYW52YXMNCiAgdmFyIERPTVVSTCA9IHdpbmRvdy5VUkwgfHwgd2luZG93LndlYmtpdFVSTCB8fCB3aW5kb3c7DQogIHZhciBzZXJpYWxpemVyID0gbmV3IFhNTFNlcmlhbGl6ZXIoKTsNCiAgdmFyIHN2Z1N0ciA9IHNlcmlhbGl6ZXIuc2VyaWFsaXplVG9TdHJpbmcocGMuc2VsZWN0aW9uLnNlbGVjdCgic3ZnIilbMF1bMF0pOw0KDQogIC8vIENyZWF0ZSBhIERhdGEgVVJJLg0KICB2YXIgc3JjID0gJ2RhdGE6aW1hZ2Uvc3ZnK3htbDtiYXNlNjQsJyArIHdpbmRvdy5idG9hKHN2Z1N0cik7DQogIHZhciBpbWcgPSBuZXcgSW1hZ2UoKTsNCiAgaW1nLm9ubG9hZCA9IGZ1bmN0aW9uICgpIHsNCiAgICBjb250ZXh0LmRyYXdJbWFnZShpbWcsIDAsIDAsIGltZy53aWR0aCAqIGRldmljZVBpeGVsUmF0aW8sIGltZy5oZWlnaHQgKiBkZXZpY2VQaXhlbFJhdGlvKTsNCiAgICBpZiAodHlwZW9mIGNhbGxiYWNrID09PSAiZnVuY3Rpb24iKSB7DQogICAgICBjYWxsYmFjayhtZXJnZWRDYW52YXMpOw0KICAgIH0NCiAgfTsNCiAgaW1nLnNyYyA9IHNyYzsNCn0NCnBjLnZlcnNpb24gPSAiMC43LjAiOw0KICAvLyB0aGlzIGRlc2NyaXB0aXZlIHRleHQgc2hvdWxkIGxpdmUgd2l0aCBvdGhlciBpbnRyb3NwZWN0aXZlIG1ldGhvZHMNCiAgcGMudG9TdHJpbmcgPSBmdW5jdGlvbigpIHsgcmV0dXJuICJQYXJhbGxlbCBDb29yZGluYXRlczogIiArIGQzLmtleXMoX18uZGltZW5zaW9ucykubGVuZ3RoICsgIiBkaW1lbnNpb25zICgiICsgZDMua2V5cyhfXy5kYXRhWzBdKS5sZW5ndGggKyAiIHRvdGFsKSAsICIgKyBfXy5kYXRhLmxlbmd0aCArICIgcm93cyI7IH07DQoNCiAgcmV0dXJuIHBjOw0KfTsNCg0KZDMucmVuZGVyUXVldWUgPSAoZnVuY3Rpb24oZnVuYykgew0KICB2YXIgX3F1ZXVlID0gW10sICAgICAgICAgICAgICAgICAgLy8gZGF0YSB0byBiZSByZW5kZXJlZA0KICAgICAgX3JhdGUgPSAxMCwgICAgICAgICAgICAgICAgICAgLy8gbnVtYmVyIG9mIGNhbGxzIHBlciBmcmFtZQ0KICAgICAgX2NsZWFyID0gZnVuY3Rpb24oKSB7fSwgICAgICAgLy8gY2xlYXJpbmcgZnVuY3Rpb24NCiAgICAgIF9pID0gMDsgICAgICAgICAgICAgICAgICAgICAgIC8vIGN1cnJlbnQgaXRlcmF0aW9uDQoNCiAgdmFyIHJxID0gZnVuY3Rpb24oZGF0YSkgew0KICAgIGlmIChkYXRhKSBycS5kYXRhKGRhdGEpOw0KICAgIHJxLmludmFsaWRhdGUoKTsNCiAgICBfY2xlYXIoKTsNCiAgICBycS5yZW5kZXIoKTsNCiAgfTsNCg0KICBycS5yZW5kZXIgPSBmdW5jdGlvbigpIHsNCiAgICBfaSA9IDA7DQogICAgdmFyIHZhbGlkID0gdHJ1ZTsNCiAgICBycS5pbnZhbGlkYXRlID0gZnVuY3Rpb24oKSB7IHZhbGlkID0gZmFsc2U7IH07DQoNCiAgICBmdW5jdGlvbiBkb0ZyYW1lKCkgew0KICAgICAgaWYgKCF2YWxpZCkgcmV0dXJuIHRydWU7DQogICAgICBpZiAoX2kgPiBfcXVldWUubGVuZ3RoKSByZXR1cm4gdHJ1ZTsNCg0KICAgICAgLy8gVHlwaWNhbCBkMyBiZWhhdmlvciBpcyB0byBwYXNzIGEgZGF0YSBpdGVtICphbmQqIGl0cyBpbmRleC4gQXMgdGhlDQogICAgICAvLyByZW5kZXIgcXVldWUgc3BsaXRzIHRoZSBvcmlnaW5hbCBkYXRhIHNldCwgd2UnbGwgaGF2ZSB0byBiZSBzbGlnaHRseQ0KICAgICAgLy8gbW9yZSBjYXJlZnVsbCBhYm91dCBwYXNzaW5nIHRoZSBjb3JyZWN0IGluZGV4IHdpdGggdGhlIGRhdGEgaXRlbS4NCiAgICAgIHZhciBlbmQgPSBNYXRoLm1pbihfaSArIF9yYXRlLCBfcXVldWUubGVuZ3RoKTsNCiAgICAgIGZvciAodmFyIGkgPSBfaTsgaSA8IGVuZDsgaSsrKSB7DQogICAgICAgIGZ1bmMoX3F1ZXVlW2ldLCBpKTsNCiAgICAgIH0NCiAgICAgIF9pICs9IF9yYXRlOw0KICAgIH0NCg0KICAgIGQzLnRpbWVyKGRvRnJhbWUpOw0KICB9Ow0KDQogIHJxLmRhdGEgPSBmdW5jdGlvbihkYXRhKSB7DQogICAgcnEuaW52YWxpZGF0ZSgpOw0KICAgIF9xdWV1ZSA9IGRhdGEuc2xpY2UoMCk7DQogICAgcmV0dXJuIHJxOw0KICB9Ow0KDQogIHJxLnJhdGUgPSBmdW5jdGlvbih2YWx1ZSkgew0KICAgIGlmICghYXJndW1lbnRzLmxlbmd0aCkgcmV0dXJuIF9yYXRlOw0KICAgIF9yYXRlID0gdmFsdWU7DQogICAgcmV0dXJuIHJxOw0KICB9Ow0KDQogIHJxLnJlbWFpbmluZyA9IGZ1bmN0aW9uKCkgew0KICAgIHJldHVybiBfcXVldWUubGVuZ3RoIC0gX2k7DQogIH07DQoNCiAgLy8gY2xlYXIgdGhlIGNhbnZhcw0KICBycS5jbGVhciA9IGZ1bmN0aW9uKGZ1bmMpIHsNCiAgICBpZiAoIWFyZ3VtZW50cy5sZW5ndGgpIHsNCiAgICAgIF9jbGVhcigpOw0KICAgICAgcmV0dXJuIHJxOw0KICAgIH0NCiAgICBfY2xlYXIgPSBmdW5jOw0KICAgIHJldHVybiBycTsNCiAgfTsNCg0KICBycS5pbnZhbGlkYXRlID0gZnVuY3Rpb24oKSB7fTsNCg0KICByZXR1cm4gcnE7DQp9KTsNCg=="></script>
<script src="data:application/x-javascript;base64,SFRNTFdpZGdldHMud2lkZ2V0KHsNCg0KICBuYW1lOiAncGFyY29vcmRzJywNCg0KICB0eXBlOiAnb3V0cHV0JywNCg0KICBmYWN0b3J5OiBmdW5jdGlvbihlbCwgd2lkdGgsIGhlaWdodCkgew0KDQogICAgdmFyIGluc3RhbmNlID0geyB9Ow0KDQogICAgdmFyIGRyYXcgPSBmdW5jdGlvbihlbCwgaW5zdGFuY2Upew0KDQogICAgICB2YXIgeCA9IGluc3RhbmNlLng7DQoNCiAgICAgIC8vdWdseSBidXQgY3VycmVudGx5IGhhdmUgdG8gY2xlYXIgb3V0DQogICAgICAvLyAgZWFjaCB0aW1lIHRvIGdldCBwcm9wZXIgcmVuZGVyDQogICAgICAvLyBkZWxldGUgYWxsIGNoaWxkcmVuIG9mIGVsDQogICAgICAvLyAgcG9zc2libHkgcmV2aXNpdCB0byBzZWUgaWYgd2Ugc2hvdWxkIGJlIGEgbGl0dGxlIG1vcmUgZGVsaWNhdGUNCiAgICAgIGQzLnNlbGVjdCggZWwgKS5zZWxlY3RBbGwoIioiKS5yZW1vdmUoKTsNCg0KICAgICAgLy8gaWYgaGVpZ2h0IG9yIHdpZHRoID0gMCB0aGVuIGJhaWwNCiAgICAgIC8vICAgdGhpcyBpcyBpbXBvcnRhbnQgZm9yIGZsZXhkYXNoYm9hcmQgYW5kIHRhYnNldHMNCiAgICAgIGlmKA0KICAgICAgICBlbC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS53aWR0aCA9PT0gMCB8fA0KICAgICAgICBlbC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS5oZWlnaHQgPT09IDANCiAgICAgICl7DQogICAgICAgIHJldHVybjsNCiAgICAgIH0NCg0KICAgICAgLy8gY3JlYXRlIG91ciBwYXJhbGxlbCBjb29yZGluYXRlcw0KICAgICAgdmFyIHBhcmNvb3JkcyA9IGQzLnBhcmNvb3JkcygpKCIjIiArIGVsLmlkKQ0KICAgICAgICAuZGF0YSggeC5kYXRhICk7DQoNCiAgICAgIC8vIHVzZSBleHBhbmRvIHRvIGF0dGFjaCBwYXJjb29yZHMgdG8gdGhlIGVsZW1lbnQNCiAgICAgIC8vICB0aGlzIGR1cGxpY2F0ZXMgdGhlIHN0ZXAgYmVsb3cNCiAgICAgIC8vICBidXQgbWlnaHQgbWFrZSBpdCBlYXNpZXIgZm9yIGEgdXNlcg0KICAgICAgLy8gIHRvIG1hbmlwdWxhdGUgdGhlIHBhcmNvb3Jkcw0KICAgICAgLy8gIGlmIHRoZXkgYXJlIG5vdCBmYW1pbGlhciB3aXRoIHRoZQ0KICAgICAgLy8gIGludGVybmFscyBvZiBodG1sd2lkZ2V0cw0KICAgICAgZWwucGFyY29vcmRzID0gcGFyY29vcmRzOw0KICAgICAgLy8gYWxzbyBhdHRhY2ggdGhlIHBhcmFsbGVsIGNvb3JkaW5hdGVzIGFuZCB4IHRvIGluc3RhbmNlDQogICAgICBpbnN0YW5jZS5wYXJjb29yZHMgPSBwYXJjb29yZHM7DQoNCiAgICAgIC8vaWRlbnRpZnkgdGhlIGJydXNoZWQgZWxlbWVudHMgYW5kIHJldHVybiB0aG9zZSBkYXRhIElEcyB0byBSc2hpbnkNCiAgICAgIC8vdGhlIHBhcmNvb3Jkcy5vbigiYnJ1c2giLGZ1bmN0aW9uKGQpKXt9IG9ubHkgd29ya3Mgd2l0aCAxRC1heGVzIHNlbGVjdGlvbg0KICAgICAgaWYgKEhUTUxXaWRnZXRzLnNoaW55TW9kZSl7DQogICAgICAgIHBhcmNvb3Jkcy5vbigicmVuZGVyIiwgZnVuY3Rpb24oKSB7DQogICAgICAgICAgdmFyIGlkcyA9IFtdOw0KICAgICAgICAgIGlmKHRoaXMuYnJ1c2hlZCgpKXsNCiAgICAgICAgICAgIGlkcyA9IHRoaXMuYnJ1c2hlZCgpLm1hcChmdW5jdGlvbihkKXsNCiAgICAgICAgICAgICAgcmV0dXJuIGQubmFtZXM7DQogICAgICAgICAgICB9KQ0KICAgICAgICAgIH0NCg0KICAgICAgICAgIC8vcmV0dXJuIHRoZSBicnVzaGVkIHJvdyBuYW1lcw0KICAgICAgICAgIGlmKFNoaW55Lm9uSW5wdXRDaGFuZ2Upew0KICAgICAgICAgICAgU2hpbnkub25JbnB1dENoYW5nZShlbC5pZCArICJfYnJ1c2hlZF9yb3dfbmFtZXMiLCBpZHMpOw0KICAgICAgICAgIH0NCiAgICAgICAgfSk7DQogICAgICB9DQoNCiAgICAgIC8vIHNlcGFyYXRlIGZyb20gYWJvdmUgU2hpbnkgaGFuZGxpbmcgZm9yIG5vdywNCiAgICAgIC8vICAgYnV0IGV2ZW50dWFsbHkgaW50ZWdyYXRlDQogICAgICB2YXIgY3Jvc3N0YWxrX3N1cHBvcnRlZCA9IHR5cGVvZihjcm9zc3RhbGspICE9PSAidW5kZWZpbmVkIiAmJg0KICAgICAgICAgIHR5cGVvZih4LmNyb3NzdGFsa19vcHRzKSAhPT0gInVuZGVmaW5lZCI7DQoNCiAgICAgIGlmKGNyb3NzdGFsa19zdXBwb3J0ZWQpIHsNCiAgICAgICAgdmFyIGN0X3NlbCA9IG5ldyBjcm9zc3RhbGsuU2VsZWN0aW9uSGFuZGxlKHguY3Jvc3N0YWxrX29wdHMuZ3JvdXApOw0KICAgICAgICBwYXJjb29yZHMub24oInJlbmRlciIsIGZ1bmN0aW9uKCkgew0KICAgICAgICAgIHZhciBpZHMgPSBbXTsNCiAgICAgICAgICBpZigNCiAgICAgICAgICAgIHRoaXMuYnJ1c2hlZCgpICYmDQogICAgICAgICAgICB0aGlzLmJydXNoZWQoKS5sZW5ndGggPCBwYXJjb29yZHMuZGF0YSgpLmxlbmd0aA0KICAgICAgICAgICl7DQogICAgICAgICAgICBpZHMgPSB0aGlzLmJydXNoZWQoKS5tYXAoZnVuY3Rpb24oZCl7DQogICAgICAgICAgICAgIHJldHVybiBkLmtleV87DQogICAgICAgICAgICB9KQ0KICAgICAgICAgICAgLy8gYWRkIGJydXNoZWQgdG8gZmlsdGVyDQogICAgICAgICAgICBjdF9zZWwuc2V0KGlkcyk7DQogICAgICAgICAgICB0aGlzLmhpZ2hsaWdodCh0aGlzLmJydXNoZWQoKSk7DQogICAgICAgICAgfSBlbHNlIHsNCiAgICAgICAgICAgIHBhcmNvb3Jkcy51bmhpZ2hsaWdodCgpOw0KICAgICAgICAgICAgLy8gaW5zdGVhZCBzZXQgdG8gZW1wdHkgYXJyYXkNCiAgICAgICAgICAgIC8vIGZpcnN0IGNoZWNrIHRvIG1ha2Ugc3VyZSBwYXJjb29yZHMgaW5pdGlhdGVkDQogICAgICAgICAgICAvLyAgYmVmb3JlIGNsZWFyaW5nDQogICAgICAgICAgICBpZih0eXBlb2YocGFyY29vcmRzLmJydXNoUmVzZXR0ZXIpICE9PSAidW5kZWZpbmVkIiAmJg0KICAgICAgICAgICAgICAgIHBhcmNvb3Jkcy5icnVzaFJlc2V0dGVyID09PSAic2VsZiINCiAgICAgICAgICAgICkgew0KICAgICAgICAgICAgICAvLyBzZWVtcyB0aGlzIHNldHMgdG8gdW5kZWZpbmVkDQogICAgICAgICAgICAgIC8vICAgd2hpY2ggUGxvdGx5IGRvZXMgbm90IGN1cnJlbnRseSBoYW5kbGUNCiAgICAgICAgICAgICAgLy9jdF9zZWwuY2xlYXIoKTsNCiAgICAgICAgICAgICAgY3Rfc2VsLnNldChudWxsKTsNCiAgICAgICAgICAgIH0NCiAgICAgICAgICB9DQoNCiAgICAgICAgfSk7DQogICAgICB9DQoNCg0KICAgICAgLy8gaGFuZGxlIGRpbWVuc2lvbnM7ICBpdCBhcHBlYXJzIHRoYXQgcGFyY29vcmRzDQogICAgICAvLyAgIGRldGVjdERpbWVuc2lvbnMgZG9lcyBub3QgcnVuIGlmIGN1c3RvbSBkaW1lbnNpb25zDQogICAgICAvLyAgIGFyZSBwcm92aWRlZCwgc28gd2UnbGwgbmVlZCB0byBkZXRlY3REaW1lbnNpb25zDQogICAgICAvLyAgIGFuZCB0aGVuIGluIGFueSB0aGF0IGFyZSBzcGVjaWZpZWQNCiAgICAgIGlmKCB4Lm9wdGlvbnMuZGltZW5zaW9ucyApew0KICAgICAgICBwYXJjb29yZHMuZGV0ZWN0RGltZW5zaW9ucygpOw0KICAgICAgICB2YXIgZGltcyA9IHBhcmNvb3Jkcy5kaW1lbnNpb25zKCk7DQogICAgICAgIC8vIHRoaXMgaXMgdWdseSBidXQgdHJ5aW5nIHRvIGF2b2lkIGRlcGVuZGVuY3kNCiAgICAgICAgLy8gT2JqZWN0LmFzc2lnbiBkaWQgbm90IHdvcmsgaW4gUlN0dWRpbw0KICAgICAgICBPYmplY3Qua2V5cyh4Lm9wdGlvbnMuZGltZW5zaW9ucykubWFwKGZ1bmN0aW9uKGspew0KICAgICAgICAgIE9iamVjdC5rZXlzKHgub3B0aW9ucy5kaW1lbnNpb25zW2tdKS5tYXAoZnVuY3Rpb24oa2spew0KICAgICAgICAgICAgZGltc1trXVtra10gPSB4Lm9wdGlvbnMuZGltZW5zaW9uc1trXVtra107DQogICAgICAgICAgfSkNCiAgICAgICAgfSkNCiAgICAgICAgeC5vcHRpb25zLmRpbWVuc2lvbnMgPSBkaW1zOw0KICAgICAgfQ0KDQogICAgICAvLyBjdXN0b21pemUgb3VyIHBhcmNvb3JkcyBhY2NvcmRpbmcgdG8gb3B0aW9ucw0KICAgICAgT2JqZWN0LmtleXMoIHgub3B0aW9ucyApLmZpbHRlcihmdW5jdGlvbihrKXsgcmV0dXJuIGsgIT09ICJyZW9yZGVyYWJsZSIgJiYgayAhPT0gImJydXNoTW9kZSIgJiYgayAhPT0gImJydXNoUHJlZGljYXRlIiAmJiBrIT09ICJjb2xvciIgJiYgayE9PSJyb3duYW1lcyJ9KS5tYXAoIGZ1bmN0aW9uKGspIHsNCiAgICAgICAgLy8gaWYgdGhlIGtleSBleGlzdHMgd2l0aGluIHBhcmNvb3Jkcw0KICAgICAgICBpZiAoIHBhcmNvb3Jkc1trXSApew0KICAgICAgICAgIGlmKCB0eXBlb2YgeC5vcHRpb25zW2tdID09PSAiYm9vbGVhbiIgKXsNCiAgICAgICAgICAgIHRyeSB7DQogICAgICAgICAgICAgIHBhcmNvb3Jkc1trXSgpOw0KICAgICAgICAgICAgfSBjYXRjaChlKSB7DQogICAgICAgICAgICAgIGNvbnNvbGUubG9nKCAia2V5L29wdGlvbjogIiArIGsgKyAiIGRpZCBub3Qgd29yayBzbyBpZ25vcmUgZm9yIG5vdy4iICkNCiAgICAgICAgICAgIH0NCiAgICAgICAgICB9IGVsc2Ugew0KICAgICAgICAgICAgdHJ5ew0KICAgICAgICAgICAgICBwYXJjb29yZHNba10oIHgub3B0aW9uc1trXSApOw0KICAgICAgICAgICAgfSBjYXRjaChlKSB7DQogICAgICAgICAgICAgIGNvbnNvbGUubG9nKCAia2V5L29wdGlvbjogIiArIGsgKyAiIHdpdGggdmFsdWUgIiArIHgub3B0aW9uc1trXSArICJkaWQgbm90IHdvcmsgc28gaWdub3JlIGZvciBub3cuIiApDQogICAgICAgICAgICB9DQogICAgICAgICAgfQ0KICAgICAgICB9IGVsc2Ugew0KICAgICAgICAgIGNvbnNvbGUubG9nKCAia2V5L29wdGlvbjogIiArIGsgKyAiIGlzIG5vdCBhdmFpbGFibGUgZm9yIGN1c3RvbWl6YXRpb24uIiApDQogICAgICAgIH0NCiAgICAgIH0pDQoNCg0KICAgICAgdmFyIGhpZGRlbl9heGVzID0gcGFyY29vcmRzLmhpZGVBeGlzKCkgfHwgW107DQogICAgICAvLyBhdCBvbmUgcG9pbnQgdGhvdWdodCBJIHNob3VsZA0KICAgICAgLy8gICByZW1vdmUgdGhpcyBiZWNhdXNlIG9mIGJ1ZyB3aXRoIGV4cGVyaW1lbnRhbCBkaW1lbnNpb25zDQogICAgICAvLyAgICBhbmQgaGFuZGxlIGZvciBub3cgYnkgcmVtb3Zpbmcgcm93bmFtZXMgZnJvbSB0aGUgZGF0YQ0KICAgICAgLy8gYnV0IGluc3RlYWQgSSBqdXN0IGhhZCB0byBtb3ZlIHRoaXMgcGllY2UgdG8gaGVyZQ0KICAgICAgaWYoIHR5cGVvZiB4Lm9wdGlvbnMucm93bmFtZXMgPT0gInVuZGVmaW5lZCIgfHwgeC5vcHRpb25zLnJvd25hbWVzID09PSBmYWxzZSApIHsNCiAgICAgICAgLy9yb3duYW1lcyA9IEYgc28gaGlkZSB0aGUgYXhpcw0KICAgICAgICBoaWRkZW5fYXhlcy5wdXNoKCJuYW1lcyIpOw0KICAgICAgfQ0KDQogICAgICAvLyBoaWRlIGNyb3NzdGFsayBrZXkgY29sdW1uDQogICAgICBpZihjcm9zc3RhbGtfc3VwcG9ydGVkKSB7DQogICAgICAgIGhpZGRlbl9heGVzLnB1c2goImtleV8iKTsNCiAgICAgIH0NCg0KICAgICAgcGFyY29vcmRzLmhpZGVBeGlzKGhpZGRlbl9heGVzKTsNCg0KICAgICAgLy8gY29sb3Igb3B0aW9uIHdpbGwgcmVxdWlyZSBzb21lIGN1c3RvbSBoYW5kbGluZw0KICAgICAgLy8gICBpZiBjb2xvciBpcyBhbiBvYmplY3Qgd2l0aCBjb2xvclNjYWxlIGFuZCBjb2xvckJ5DQogICAgICAvLyAgICB3aWxsIG5lZWQgdG8gaXRlcmF0ZSB0aHJvdWdoIGVhY2ggb2YgdGhlIHVuaXF1ZSBncm91cCB2YWx1ZXMNCiAgICAgIC8vICAgIGFuZCBhc3NpZ24gYSBjb2xvcg0KICAgICAgaWYgKCB0eXBlb2YgeC5vcHRpb25zLmNvbG9yICE9PSAidW5kZWZpbmVkIiApIHsNCiAgICAgICAgdmFyIGNvbG9yOw0KICAgICAgICBpZiggeC5vcHRpb25zLmNvbG9yLmNvbnN0cnVjdG9yLm5hbWUgPT09ICJPYmplY3QiICkgew0KICAgICAgICAgIGNvbG9yU2NhbGUgPSB4Lm9wdGlvbnMuY29sb3IuY29sb3JTY2FsZSAgPyB4Lm9wdGlvbnMuY29sb3IuY29sb3JTY2FsZSA6IGQzLnNjYWxlLmNhdGVnb3J5MjBiKCk7DQogICAgICAgICAgdmFyIGNvbG9ycyA9IHt9Ow0KICAgICAgICAgIGQzLmtleXMoZDMubmVzdCgpLmtleShmdW5jdGlvbihkKXtyZXR1cm4gZFt4Lm9wdGlvbnMuY29sb3IuY29sb3JCeV19KS5tYXAoeC5kYXRhKSkubWFwKGZ1bmN0aW9uKGMpew0KICAgICAgICAgICAgY29sb3JzW2NdID0gY29sb3JTY2FsZShjKTsNCiAgICAgICAgICB9KQ0KDQogICAgICAgICAgY29sb3IgPSBmdW5jdGlvbihkKSB7DQogICAgICAgICAgICByZXR1cm4gY29sb3JzW2RbeC5vcHRpb25zLmNvbG9yLmNvbG9yQnldXTsNCiAgICAgICAgICB9Ow0KICAgICAgICB9IGVsc2Ugew0KICAgICAgICAgIC8vICAgY29sb3IgY2FuIGJlIGEgc2luZ2xlIHZhbHVlIGluIHdoaWNoIGFsbCBsaW5lcyB3aWxsIGJlIHNhbWUgY29sb3INCiAgICAgICAgICAvLyAgICBmb3IgdGhpcyB3ZSBkbyBub3QgbmVlZCB0byBkbyBhbnl0aGluZw0KICAgICAgICAgIGNvbG9yID0geC5vcHRpb25zLmNvbG9yOw0KICAgICAgICB9DQoNCiAgICAgICAgcGFyY29vcmRzLmNvbG9yKCBjb2xvciApOw0KICAgICAgfQ0KDQogICAgICAvLyBub3cgcmVuZGVyIG91ciBwYXJjb29yZHMNCiAgICAgIHBhcmNvb3Jkcw0KICAgICAgICAucmVuZGVyKCkNCg0KICAgICAgaWYoIHgub3B0aW9ucy5yZW9yZGVyYWJsZSApIHsNCiAgICAgICAgcGFyY29vcmRzLnJlb3JkZXJhYmxlKCk7DQogICAgICB9IGVsc2Ugew0KICAgICAgICBwYXJjb29yZHMuY3JlYXRlQXhlcygpOw0KICAgICAgfQ0KDQogICAgICBpZiggeC5vcHRpb25zLmJydXNoTW9kZSApIHsNCiAgICAgICAgcGFyY29vcmRzLmJydXNoTW9kZSh4Lm9wdGlvbnMuYnJ1c2hNb2RlKTsNCiAgICAgICAgcGFyY29vcmRzLmJydXNoUHJlZGljYXRlKHgub3B0aW9ucy5icnVzaFByZWRpY2F0ZSk7DQogICAgICB9DQoNCiAgICAgIC8vIGlmIHJvd25hbWVzID0gVCB0aGVuIHJlbW92ZSBheGlzIHRpdGxlDQogICAgICBpZiggdHlwZW9mIHgub3B0aW9ucy5yb3duYW1lcyAhPT0gInVuZGVmaW5lZCIgJiYgeC5vcHRpb25zLnJvd25hbWVzID09PSB0cnVlICkgew0KICAgICAgICBkMy5zZWxlY3QoIiMiICsgZWwuaWQgKyAiIC5kaW1lbnNpb24gLmF4aXMgPiB0ZXh0IikucmVtb3ZlKCk7DQogICAgICB9DQoNCiAgICAgIC8vIHNsb3BweSBidXQgZm9yIG5vdyBsZXQncyBmb3JjZSB0ZXh0IHNtYWxsZXINCiAgICAgIC8vICAgPz8gaG93IGJlc3QgdG8gcHJvdmlkZSBwYXJhbWV0ZXIgaW4gUg0KICAgICAgZDMuc2VsZWN0QWxsKCIjIiArIGVsLmlkICsgIiBzdmcgdGV4dCIpDQogICAgICAgICAgLnN0eWxlKCJmb250LXNpemUiLCIxMHB4Iik7DQoNCiAgICAgIC8vIHNldCB1cCBhIGNvbnRhaW5lciBmb3IgdGFza3MgdG8gcGVyZm9ybSBhZnRlciBjb21wbGV0aW9uDQogICAgICAvLyAgb25lIGV4YW1wbGUgd291bGQgYmUgYWRkIGNhbGxiYWNrcyBmb3IgZXZlbnQgaGFuZGxpbmcNCiAgICAgIC8vICBzdHlsaW5nDQogICAgICBpZiAoISh0eXBlb2YgeC50YXNrcyA9PT0gInVuZGVmaW5lZCIgfHwgeC50YXNrcyA9PT0gbnVsbCkgKXsNCiAgICAgICAgaWYgKCAodHlwZW9mIHgudGFza3MubGVuZ3RoID09PSAidW5kZWZpbmVkIikgfHwNCiAgICAgICAgICh0eXBlb2YgeC50YXNrcyA9PT0gImZ1bmN0aW9uIiApICkgew0KICAgICAgICAgICAvLyBoYW5kbGUgYSBmdW5jdGlvbiBub3QgZW5jbG9zZWQgaW4gYXJyYXkNCiAgICAgICAgICAgLy8gc2hvdWxkIGJlIGFibGUgdG8gcmVtb3ZlIG9uY2UgdXNpbmcganNvbmxpdGUNCiAgICAgICAgICAgeC50YXNrcyA9IFt4LnRhc2tzXTsNCiAgICAgICAgfQ0KICAgICAgICB4LnRhc2tzLm1hcChmdW5jdGlvbih0KXsNCiAgICAgICAgICAvLyBmb3IgZWFjaCB0YXNrcyBjYWxsIHRoZSB0YXNrIHdpdGggZWwgc3VwcGxpZWQgYXMgYHRoaXNgDQogICAgICAgICAgdC5jYWxsKHtlbDplbCxwYXJjb29yZHM6cGFyY29vcmRzLHg6eH0pOw0KICAgICAgICB9KTsNCiAgICAgIH0NCg0KICAgICAgLy8gbm93IHRoYXQgd2UgaGF2ZSBkcmF3biBhbmQgZXhlY3V0ZWQgdGFza3MNCiAgICAgIC8vICAgd2lyZSB1cCBjcm9zc3RhbGsgc2VsZWN0aW9uIGZyb20gb3V0c2lkZSBwYXJjb29yZHMNCiAgICAgIGlmKGNyb3NzdGFsa19zdXBwb3J0ZWQpIHsNCiAgICAgICAgY3Rfc2VsLm9uKCJjaGFuZ2UiLCBmdW5jdGlvbihzZWwpew0KICAgICAgICAgIGlmKCEoDQogICAgICAgICAgICB0eXBlb2YoY3Rfc2VsLnZhbHVlKSA9PT0gInVuZGVmaW5lZCIgfHwNCiAgICAgICAgICAgIGN0X3NlbC52YWx1ZSA9PT0gbnVsbCB8fA0KICAgICAgICAgICAgKEFycmF5LmlzQXJyYXkoY3Rfc2VsLnZhbHVlKSAmJiBjdF9zZWwudmFsdWUubGVuZ3RoID09PSAwKQ0KICAgICAgICAgICkpIHsNCiAgICAgICAgICAgIHZhciBzZWxlY3RlZCA9IGN0X3NlbC52YWx1ZTsNCg0KICAgICAgICAgICAgLy8gaGFuZGxlIG5vbi1hcnJheSBzaW5nbGUtdmFsdWUNCiAgICAgICAgICAgIGlmKCFBcnJheS5pc0FycmF5KHNlbGVjdGVkKSkgew0KICAgICAgICAgICAgICBzZWxlY3RlZCA9IFtzZWxlY3RlZF07DQogICAgICAgICAgICB9DQogICAgICAgICAgICBpZihzZWwuc2VuZGVyID09PSBjdF9zZWwpew0KICAgICAgICAgICAgICAvLyBkbyBub3RoaW5nIGZvciBub3cNCiAgICAgICAgICAgIH0gZWxzZSB7DQogICAgICAgICAgICAgIC8vIGNsZWFyIGJydXNoZXMNCiAgICAgICAgICAgICAgaWYocGFyY29vcmRzLmJydXNoZWQoKSl7DQogICAgICAgICAgICAgICAgLy8gbmFzdHkgd2F5IG9mIGRldGVybWluaW5nIHNvdXJjZSBvZiBicnVzaCByZXNldA0KICAgICAgICAgICAgICAgIC8vICAgbmVlZCB0aGlzIHRvIGtub3cgd2hldGhlciB0byBjaGFuZ2UNCiAgICAgICAgICAgICAgICAvLyAgIGNyb3NzdGFsayBzZWxlY3Rpb24gb3IgaWYgdGhlIGJydXNoIHJlc2V0DQogICAgICAgICAgICAgICAgLy8gICBpcyBhbiBvdXRjb21lIGNhdXNlZCBieSBzb21ldGhpbmcgb3RoZXIgdGhhbg0KICAgICAgICAgICAgICAgIC8vICAgdGhpcyBwYXJjb29yZHMgY2hhbmdpbmcgdGhlIHNlbGVjdGlvbg0KICAgICAgICAgICAgICAgIHBhcmNvb3Jkcy5icnVzaFJlc2V0dGVyID0gIm90aGVyIjsNCiAgICAgICAgICAgICAgICBwYXJjb29yZHMuYnJ1c2hSZXNldCgpOw0KICAgICAgICAgICAgICAgIHBhcmNvb3Jkcy5icnVzaFJlc2V0dGVyID0gInNlbGYiOw0KICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgIC8vIHVzZSBoaWdobGlnaHQgdG8gc2hvdyB0aGUgc2VsZWN0aW9uDQogICAgICAgICAgICAgIHBhcmNvb3Jkcy5oaWdobGlnaHQocGFyY29vcmRzLmRhdGEoKS5maWx0ZXIoZnVuY3Rpb24oZCxpKSB7DQogICAgICAgICAgICAgICAgcmV0dXJuIHNlbGVjdGVkLmluZGV4T2YoZC5rZXlfKSA+PSAwOw0KICAgICAgICAgICAgICB9KSk7DQogICAgICAgICAgICB9DQogICAgICAgICAgfSBlbHNlIHsNCiAgICAgICAgICAgIHBhcmNvb3Jkcy51bmhpZ2hsaWdodCgpOw0KICAgICAgICAgIH0NCiAgICAgICAgfSk7DQogICAgICB9DQoNCiAgICAgIHJldHVybiBpbnN0YW5jZTsNCg0KICAgIH07DQoNCiAgICByZXR1cm4gew0KDQogICAgICByZW5kZXJWYWx1ZTogZnVuY3Rpb24oeCkgew0KDQogICAgICAgIC8vIGJhc2ljIGNoZWNrIG9mIGRhdGEgdG8gbWFrZSBzdXJlIHdlIHJlY2VpdmVkDQogICAgICAgIC8vICAgaW4gY29sdW1uIGZvcm1hdCBvciBvYmplY3Qgb2YgYXJyYXlzDQogICAgICAgIC8vICAgd2hpY2ggaXMgdGhlIGRlZmF1bHQgYmVoYXZpb3Igb2YgaHRtbHdpZGdldHMNCiAgICAgICAgLy8gICByZWFzb24gZm9yIHRoaXMgY2hlY2sgaXMNCiAgICAgICAgLy8gICAgICBmdXR1cmUtcHJvb2ZpbmcgaWYgYmVoYXZpb3IgY2hhbmdlcw0KICAgICAgICAvLyAgICAgIHNvbWVvbmUgc3VwcGxpZXMgZGF0YSBpbiBhbiBhdHlwaWNhbCB3YXkNCiAgICAgICAgaWYoIHguZGF0YS5jb25zdHJ1Y3Rvci5uYW1lID09PSAiT2JqZWN0IiApew0KICAgICAgICAgIC8vIHVzZSBIVE1MV2lkZ2V0cyBmdW5jdGlvbiB0byBjb252ZXJ0IHRvIGFuIGFycmF5IG9mIG9iamVjdHMgKHJvdyBmb3JtYXQpDQogICAgICAgICAgeC5kYXRhID0gSFRNTFdpZGdldHMuZGF0YWZyYW1lVG9EMyggeC5kYXRhICkNCiAgICAgICAgfQ0KDQogICAgICAgIGluc3RhbmNlLnggPSB4Ow0KDQogICAgICAgIGluc3RhbmNlID0gZHJhdyhlbCwgaW5zdGFuY2UpOw0KDQogICAgICB9LA0KDQogICAgICByZXNpemU6IGZ1bmN0aW9uKHdpZHRoLCBoZWlnaHQpIHsNCg0KICAgICAgICAvLyBvbmx5IHJlc2l6ZSBpZiBhdXRvcmVzaXplIHNldCB0byBUUlVFDQogICAgICAgIC8vICAgcmVzaXplIHdpbGwgY2F1c2UgdGhlIGVudGlyZSBwYXJjb29yZHMgdG8gcmUtcmVuZGVyDQogICAgICAgIC8vICAgc28gYnJ1c2hlZCBzZWxlY3Rpb25zLCBldGMuIHdpbGwgYmUgbG9zdA0KICAgICAgICAvLyAgIGFuZCBpbiBldmVudCBvZiBiaWdnZXIgZGF0YSwgZXhwZW5zaXZlIHJlLXJlbmRlcg0KICAgICAgICAvLyAgIHdpbGwgb2NjdXINCiAgICAgICAgaWYoaW5zdGFuY2UueC5hdXRvcmVzaXplKXsNCg0KICAgICAgICAgIGluc3RhbmNlID0gZHJhdyhlbCwgaW5zdGFuY2UpOw0KDQogICAgICAgIH0NCg0KICAgICAgfSwNCg0KICAgICAgaW5zdGFuY2U6IGluc3RhbmNlDQoNCiAgICB9Ow0KICB9DQp9KTsNCg=="></script>
<link href="data:text/css;charset=utf-8,%3Aroot%7B%2D%2Dblue%3A%23007bff%3B%2D%2Dindigo%3A%236610f2%3B%2D%2Dpurple%3A%236f42c1%3B%2D%2Dpink%3A%23e83e8c%3B%2D%2Dred%3A%23dc3545%3B%2D%2Dorange%3A%23fd7e14%3B%2D%2Dyellow%3A%23ffc107%3B%2D%2Dgreen%3A%2328a745%3B%2D%2Dteal%3A%2320c997%3B%2D%2Dcyan%3A%2317a2b8%3B%2D%2Dwhite%3A%23fff%3B%2D%2Dgray%3A%236c757d%3B%2D%2Dgray%2Ddark%3A%23343a40%3B%2D%2Dprimary%3A%23007bff%3B%2D%2Dsecondary%3A%236c757d%3B%2D%2Dsuccess%3A%2328a745%3B%2D%2Dinfo%3A%2317a2b8%3B%2D%2Dwarning%3A%23ffc107%3B%2D%2Ddanger%3A%23dc3545%3B%2D%2Dlight%3A%23f8f9fa%3B%2D%2Ddark%3A%23343a40%3B%2D%2Dbreakpoint%2Dxs%3A0%3B%2D%2Dbreakpoint%2Dsm%3A576px%3B%2D%2Dbreakpoint%2Dmd%3A768px%3B%2D%2Dbreakpoint%2Dlg%3A992px%3B%2D%2Dbreakpoint%2Dxl%3A1200px%3B%2D%2Dfont%2Dfamily%2Dsans%2Dserif%3A%2Dapple%2Dsystem%2CBlinkMacSystemFont%2C%22Segoe%20UI%22%2CRoboto%2C%22Helvetica%20Neue%22%2CArial%2Csans%2Dserif%2C%22Apple%20Color%20Emoji%22%2C%22Segoe%20UI%20Emoji%22%2C%22Segoe%20UI%20Symbol%22%3B%2D%2Dfont%2Dfamily%2Dmonospace%3ASFMono%2DRegular%2CMenlo%2CMonaco%2CConsolas%2C%22Liberation%20Mono%22%2C%22Courier%20New%22%2Cmonospace%7D%2A%2C%3A%3Aafter%2C%3A%3Abefore%7Bbox%2Dsizing%3Aborder%2Dbox%7Dhtml%7Bfont%2Dfamily%3Asans%2Dserif%3Bline%2Dheight%3A1%2E15%3B%2Dwebkit%2Dtext%2Dsize%2Dadjust%3A100%25%3B%2Dms%2Dtext%2Dsize%2Dadjust%3A100%25%3B%2Dms%2Doverflow%2Dstyle%3Ascrollbar%3B%2Dwebkit%2Dtap%2Dhighlight%2Dcolor%3Atransparent%7D%40%2Dms%2Dviewport%7Bwidth%3Adevice%2Dwidth%7Darticle%2Caside%2Cdialog%2Cfigcaption%2Cfigure%2Cfooter%2Cheader%2Chgroup%2Cmain%2Cnav%2Csection%7Bdisplay%3Ablock%7Dbody%7Bmargin%3A0%3Bfont%2Dfamily%3A%2Dapple%2Dsystem%2CBlinkMacSystemFont%2C%22Segoe%20UI%22%2CRoboto%2C%22Helvetica%20Neue%22%2CArial%2Csans%2Dserif%2C%22Apple%20Color%20Emoji%22%2C%22Segoe%20UI%20Emoji%22%2C%22Segoe%20UI%20Symbol%22%3Bfont%2Dsize%3A1rem%3Bfont%2Dweight%3A400%3Bline%2Dheight%3A1%2E5%3Bcolor%3A%23212529%3Btext%2Dalign%3Aleft%3Bbackground%2Dcolor%3A%23fff%7D%5Btabindex%3D%22%2D1%22%5D%3Afocus%7Boutline%3A0%21important%7Dhr%7Bbox%2Dsizing%3Acontent%2Dbox%3Bheight%3A0%3Boverflow%3Avisible%7Dh1%2Ch2%2Ch3%2Ch4%2Ch5%2Ch6%7Bmargin%2Dtop%3A0%3Bmargin%2Dbottom%3A%2E5rem%7Dp%7Bmargin%2Dtop%3A0%3Bmargin%2Dbottom%3A1rem%7Dabbr%5Bdata%2Doriginal%2Dtitle%5D%2Cabbr%5Btitle%5D%7Btext%2Ddecoration%3Aunderline%3B%2Dwebkit%2Dtext%2Ddecoration%3Aunderline%20dotted%3Btext%2Ddecoration%3Aunderline%20dotted%3Bcursor%3Ahelp%3Bborder%2Dbottom%3A0%7Daddress%7Bmargin%2Dbottom%3A1rem%3Bfont%2Dstyle%3Anormal%3Bline%2Dheight%3Ainherit%7Ddl%2Col%2Cul%7Bmargin%2Dtop%3A0%3Bmargin%2Dbottom%3A1rem%7Dol%20ol%2Col%20ul%2Cul%20ol%2Cul%20ul%7Bmargin%2Dbottom%3A0%7Ddt%7Bfont%2Dweight%3A700%7Ddd%7Bmargin%2Dbottom%3A%2E5rem%3Bmargin%2Dleft%3A0%7Dblockquote%7Bmargin%3A0%200%201rem%7Ddfn%7Bfont%2Dstyle%3Aitalic%7Db%2Cstrong%7Bfont%2Dweight%3Abolder%7Dsmall%7Bfont%2Dsize%3A80%25%7Dsub%2Csup%7Bposition%3Arelative%3Bfont%2Dsize%3A75%25%3Bline%2Dheight%3A0%3Bvertical%2Dalign%3Abaseline%7Dsub%7Bbottom%3A%2D%2E25em%7Dsup%7Btop%3A%2D%2E5em%7Da%7Bcolor%3A%23007bff%3Btext%2Ddecoration%3Anone%3Bbackground%2Dcolor%3Atransparent%3B%2Dwebkit%2Dtext%2Ddecoration%2Dskip%3Aobjects%7Da%3Ahover%7Bcolor%3A%230056b3%3Btext%2Ddecoration%3Aunderline%7Da%3Anot%28%5Bhref%5D%29%3Anot%28%5Btabindex%5D%29%7Bcolor%3Ainherit%3Btext%2Ddecoration%3Anone%7Da%3Anot%28%5Bhref%5D%29%3Anot%28%5Btabindex%5D%29%3Afocus%2Ca%3Anot%28%5Bhref%5D%29%3Anot%28%5Btabindex%5D%29%3Ahover%7Bcolor%3Ainherit%3Btext%2Ddecoration%3Anone%7Da%3Anot%28%5Bhref%5D%29%3Anot%28%5Btabindex%5D%29%3Afocus%7Boutline%3A0%7Dcode%2Ckbd%2Cpre%2Csamp%7Bfont%2Dfamily%3Amonospace%2Cmonospace%3Bfont%2Dsize%3A1em%7Dpre%7Bmargin%2Dtop%3A0%3Bmargin%2Dbottom%3A1rem%3Boverflow%3Aauto%3B%2Dms%2Doverflow%2Dstyle%3Ascrollbar%7Dfigure%7Bmargin%3A0%200%201rem%7Dimg%7Bvertical%2Dalign%3Amiddle%3Bborder%2Dstyle%3Anone%7Dsvg%3Anot%28%3Aroot%29%7Boverflow%3Ahidden%7Dtable%7Bborder%2Dcollapse%3Acollapse%7Dcaption%7Bpadding%2Dtop%3A%2E75rem%3Bpadding%2Dbottom%3A%2E75rem%3Bcolor%3A%236c757d%3Btext%2Dalign%3Aleft%3Bcaption%2Dside%3Abottom%7Dth%7Btext%2Dalign%3Ainherit%7Dlabel%7Bdisplay%3Ainline%2Dblock%3Bmargin%2Dbottom%3A%2E5rem%7Dbutton%7Bborder%2Dradius%3A0%7Dbutton%3Afocus%7Boutline%3A1px%20dotted%3Boutline%3A5px%20auto%20%2Dwebkit%2Dfocus%2Dring%2Dcolor%7Dbutton%2Cinput%2Coptgroup%2Cselect%2Ctextarea%7Bmargin%3A0%3Bfont%2Dfamily%3Ainherit%3Bfont%2Dsize%3Ainherit%3Bline%2Dheight%3Ainherit%7Dbutton%2Cinput%7Boverflow%3Avisible%7Dbutton%2Cselect%7Btext%2Dtransform%3Anone%7D%5Btype%3Dreset%5D%2C%5Btype%3Dsubmit%5D%2Cbutton%2Chtml%20%5Btype%3Dbutton%5D%7B%2Dwebkit%2Dappearance%3Abutton%7D%5Btype%3Dbutton%5D%3A%3A%2Dmoz%2Dfocus%2Dinner%2C%5Btype%3Dreset%5D%3A%3A%2Dmoz%2Dfocus%2Dinner%2C%5Btype%3Dsubmit%5D%3A%3A%2Dmoz%2Dfocus%2Dinner%2Cbutton%3A%3A%2Dmoz%2Dfocus%2Dinner%7Bpadding%3A0%3Bborder%2Dstyle%3Anone%7Dinput%5Btype%3Dcheckbox%5D%2Cinput%5Btype%3Dradio%5D%7Bbox%2Dsizing%3Aborder%2Dbox%3Bpadding%3A0%7Dinput%5Btype%3Ddate%5D%2Cinput%5Btype%3Ddatetime%2Dlocal%5D%2Cinput%5Btype%3Dmonth%5D%2Cinput%5Btype%3Dtime%5D%7B%2Dwebkit%2Dappearance%3Alistbox%7Dtextarea%7Boverflow%3Aauto%3Bresize%3Avertical%7Dfieldset%7Bmin%2Dwidth%3A0%3Bpadding%3A0%3Bmargin%3A0%3Bborder%3A0%7Dlegend%7Bdisplay%3Ablock%3Bwidth%3A100%25%3Bmax%2Dwidth%3A100%25%3Bpadding%3A0%3Bmargin%2Dbottom%3A%2E5rem%3Bfont%2Dsize%3A1%2E5rem%3Bline%2Dheight%3Ainherit%3Bcolor%3Ainherit%3Bwhite%2Dspace%3Anormal%7Dprogress%7Bvertical%2Dalign%3Abaseline%7D%5Btype%3Dnumber%5D%3A%3A%2Dwebkit%2Dinner%2Dspin%2Dbutton%2C%5Btype%3Dnumber%5D%3A%3A%2Dwebkit%2Douter%2Dspin%2Dbutton%7Bheight%3Aauto%7D%5Btype%3Dsearch%5D%7Boutline%2Doffset%3A%2D2px%3B%2Dwebkit%2Dappearance%3Anone%7D%5Btype%3Dsearch%5D%3A%3A%2Dwebkit%2Dsearch%2Dcancel%2Dbutton%2C%5Btype%3Dsearch%5D%3A%3A%2Dwebkit%2Dsearch%2Ddecoration%7B%2Dwebkit%2Dappearance%3Anone%7D%3A%3A%2Dwebkit%2Dfile%2Dupload%2Dbutton%7Bfont%3Ainherit%3B%2Dwebkit%2Dappearance%3Abutton%7Doutput%7Bdisplay%3Ainline%2Dblock%7Dsummary%7Bdisplay%3Alist%2Ditem%3Bcursor%3Apointer%7Dtemplate%7Bdisplay%3Anone%7D%5Bhidden%5D%7Bdisplay%3Anone%21important%7D%2Eh1%2C%2Eh2%2C%2Eh3%2C%2Eh4%2C%2Eh5%2C%2Eh6%2Ch1%2Ch2%2Ch3%2Ch4%2Ch5%2Ch6%7Bmargin%2Dbottom%3A%2E5rem%3Bfont%2Dfamily%3Ainherit%3Bfont%2Dweight%3A500%3Bline%2Dheight%3A1%2E2%3Bcolor%3Ainherit%7D%2Eh1%2Ch1%7Bfont%2Dsize%3A2%2E5rem%7D%2Eh2%2Ch2%7Bfont%2Dsize%3A2rem%7D%2Eh3%2Ch3%7Bfont%2Dsize%3A1%2E75rem%7D%2Eh4%2Ch4%7Bfont%2Dsize%3A1%2E5rem%7D%2Eh5%2Ch5%7Bfont%2Dsize%3A1%2E25rem%7D%2Eh6%2Ch6%7Bfont%2Dsize%3A1rem%7D%2Elead%7Bfont%2Dsize%3A1%2E25rem%3Bfont%2Dweight%3A300%7D%2Edisplay%2D1%7Bfont%2Dsize%3A6rem%3Bfont%2Dweight%3A300%3Bline%2Dheight%3A1%2E2%7D%2Edisplay%2D2%7Bfont%2Dsize%3A5%2E5rem%3Bfont%2Dweight%3A300%3Bline%2Dheight%3A1%2E2%7D%2Edisplay%2D3%7Bfont%2Dsize%3A4%2E5rem%3Bfont%2Dweight%3A300%3Bline%2Dheight%3A1%2E2%7D%2Edisplay%2D4%7Bfont%2Dsize%3A3%2E5rem%3Bfont%2Dweight%3A300%3Bline%2Dheight%3A1%2E2%7Dhr%7Bmargin%2Dtop%3A1rem%3Bmargin%2Dbottom%3A1rem%3Bborder%3A0%3Bborder%2Dtop%3A1px%20solid%20rgba%280%2C0%2C0%2C%2E1%29%7D%2Esmall%2Csmall%7Bfont%2Dsize%3A80%25%3Bfont%2Dweight%3A400%7D%2Emark%2Cmark%7Bpadding%3A%2E2em%3Bbackground%2Dcolor%3A%23fcf8e3%7D%2Elist%2Dunstyled%7Bpadding%2Dleft%3A0%3Blist%2Dstyle%3Anone%7D%2Elist%2Dinline%7Bpadding%2Dleft%3A0%3Blist%2Dstyle%3Anone%7D%2Elist%2Dinline%2Ditem%7Bdisplay%3Ainline%2Dblock%7D%2Elist%2Dinline%2Ditem%3Anot%28%3Alast%2Dchild%29%7Bmargin%2Dright%3A%2E5rem%7D%2Einitialism%7Bfont%2Dsize%3A90%25%3Btext%2Dtransform%3Auppercase%7D%2Eblockquote%7Bmargin%2Dbottom%3A1rem%3Bfont%2Dsize%3A1%2E25rem%7D%2Eblockquote%2Dfooter%7Bdisplay%3Ablock%3Bfont%2Dsize%3A80%25%3Bcolor%3A%236c757d%7D%2Eblockquote%2Dfooter%3A%3Abefore%7Bcontent%3A%22%5C2014%20%5C00A0%22%7D%2Eimg%2Dfluid%7Bmax%2Dwidth%3A100%25%3Bheight%3Aauto%7D%2Eimg%2Dthumbnail%7Bpadding%3A%2E25rem%3Bbackground%2Dcolor%3A%23fff%3Bborder%3A1px%20solid%20%23dee2e6%3Bborder%2Dradius%3A%2E25rem%3Bmax%2Dwidth%3A100%25%3Bheight%3Aauto%7D%2Efigure%7Bdisplay%3Ainline%2Dblock%7D%2Efigure%2Dimg%7Bmargin%2Dbottom%3A%2E5rem%3Bline%2Dheight%3A1%7D%2Efigure%2Dcaption%7Bfont%2Dsize%3A90%25%3Bcolor%3A%236c757d%7Dcode%2Ckbd%2Cpre%2Csamp%7Bfont%2Dfamily%3ASFMono%2DRegular%2CMenlo%2CMonaco%2CConsolas%2C%22Liberation%20Mono%22%2C%22Courier%20New%22%2Cmonospace%7Dcode%7Bfont%2Dsize%3A87%2E5%25%3Bcolor%3A%23e83e8c%3Bword%2Dbreak%3Abreak%2Dword%7Da%3Ecode%7Bcolor%3Ainherit%7Dkbd%7Bpadding%3A%2E2rem%20%2E4rem%3Bfont%2Dsize%3A87%2E5%25%3Bcolor%3A%23fff%3Bbackground%2Dcolor%3A%23212529%3Bborder%2Dradius%3A%2E2rem%7Dkbd%20kbd%7Bpadding%3A0%3Bfont%2Dsize%3A100%25%3Bfont%2Dweight%3A700%7Dpre%7Bdisplay%3Ablock%3Bfont%2Dsize%3A87%2E5%25%3Bcolor%3A%23212529%7Dpre%20code%7Bfont%2Dsize%3Ainherit%3Bcolor%3Ainherit%3Bword%2Dbreak%3Anormal%7D%2Epre%2Dscrollable%7Bmax%2Dheight%3A340px%3Boverflow%2Dy%3Ascroll%7D%2Econtainer%7Bwidth%3A100%25%3Bpadding%2Dright%3A15px%3Bpadding%2Dleft%3A15px%3Bmargin%2Dright%3Aauto%3Bmargin%2Dleft%3Aauto%7D%40media%20%28min%2Dwidth%3A576px%29%7B%2Econtainer%7Bmax%2Dwidth%3A540px%7D%7D%40media%20%28min%2Dwidth%3A768px%29%7B%2Econtainer%7Bmax%2Dwidth%3A720px%7D%7D%40media%20%28min%2Dwidth%3A992px%29%7B%2Econtainer%7Bmax%2Dwidth%3A960px%7D%7D%40media%20%28min%2Dwidth%3A1200px%29%7B%2Econtainer%7Bmax%2Dwidth%3A1140px%7D%7D%2Econtainer%2Dfluid%7Bwidth%3A100%25%3Bpadding%2Dright%3A15px%3Bpadding%2Dleft%3A15px%3Bmargin%2Dright%3Aauto%3Bmargin%2Dleft%3Aauto%7D%2Erow%7Bdisplay%3A%2Dwebkit%2Dbox%3Bdisplay%3A%2Dms%2Dflexbox%3Bdisplay%3Aflex%3B%2Dms%2Dflex%2Dwrap%3Awrap%3Bflex%2Dwrap%3Awrap%3Bmargin%2Dright%3A%2D15px%3Bmargin%2Dleft%3A%2D15px%7D%2Eno%2Dgutters%7Bmargin%2Dright%3A0%3Bmargin%2Dleft%3A0%7D%2Eno%2Dgutters%3E%2Ecol%2C%2Eno%2Dgutters%3E%5Bclass%2A%3Dcol%2D%5D%7Bpadding%2Dright%3A0%3Bpadding%2Dleft%3A0%7D%2Ecol%2C%2Ecol%2D1%2C%2Ecol%2D10%2C%2Ecol%2D11%2C%2Ecol%2D12%2C%2Ecol%2D2%2C%2Ecol%2D3%2C%2Ecol%2D4%2C%2Ecol%2D5%2C%2Ecol%2D6%2C%2Ecol%2D7%2C%2Ecol%2D8%2C%2Ecol%2D9%2C%2Ecol%2Dauto%2C%2Ecol%2Dlg%2C%2Ecol%2Dlg%2D1%2C%2Ecol%2Dlg%2D10%2C%2Ecol%2Dlg%2D11%2C%2Ecol%2Dlg%2D12%2C%2Ecol%2Dlg%2D2%2C%2Ecol%2Dlg%2D3%2C%2Ecol%2Dlg%2D4%2C%2Ecol%2Dlg%2D5%2C%2Ecol%2Dlg%2D6%2C%2Ecol%2Dlg%2D7%2C%2Ecol%2Dlg%2D8%2C%2Ecol%2Dlg%2D9%2C%2Ecol%2Dlg%2Dauto%2C%2Ecol%2Dmd%2C%2Ecol%2Dmd%2D1%2C%2Ecol%2Dmd%2D10%2C%2Ecol%2Dmd%2D11%2C%2Ecol%2Dmd%2D12%2C%2Ecol%2Dmd%2D2%2C%2Ecol%2Dmd%2D3%2C%2Ecol%2Dmd%2D4%2C%2Ecol%2Dmd%2D5%2C%2Ecol%2Dmd%2D6%2C%2Ecol%2Dmd%2D7%2C%2Ecol%2Dmd%2D8%2C%2Ecol%2Dmd%2D9%2C%2Ecol%2Dmd%2Dauto%2C%2Ecol%2Dsm%2C%2Ecol%2Dsm%2D1%2C%2Ecol%2Dsm%2D10%2C%2Ecol%2Dsm%2D11%2C%2Ecol%2Dsm%2D12%2C%2Ecol%2Dsm%2D2%2C%2Ecol%2Dsm%2D3%2C%2Ecol%2Dsm%2D4%2C%2Ecol%2Dsm%2D5%2C%2Ecol%2Dsm%2D6%2C%2Ecol%2Dsm%2D7%2C%2Ecol%2Dsm%2D8%2C%2Ecol%2Dsm%2D9%2C%2Ecol%2Dsm%2Dauto%2C%2Ecol%2Dxl%2C%2Ecol%2Dxl%2D1%2C%2Ecol%2Dxl%2D10%2C%2Ecol%2Dxl%2D11%2C%2Ecol%2Dxl%2D12%2C%2Ecol%2Dxl%2D2%2C%2Ecol%2Dxl%2D3%2C%2Ecol%2Dxl%2D4%2C%2Ecol%2Dxl%2D5%2C%2Ecol%2Dxl%2D6%2C%2Ecol%2Dxl%2D7%2C%2Ecol%2Dxl%2D8%2C%2Ecol%2Dxl%2D9%2C%2Ecol%2Dxl%2Dauto%7Bposition%3Arelative%3Bwidth%3A100%25%3Bmin%2Dheight%3A1px%3Bpadding%2Dright%3A15px%3Bpadding%2Dleft%3A15px%7D%2Ecol%7B%2Dms%2Dflex%2Dpreferred%2Dsize%3A0%3Bflex%2Dbasis%3A0%3B%2Dwebkit%2Dbox%2Dflex%3A1%3B%2Dms%2Dflex%2Dpositive%3A1%3Bflex%2Dgrow%3A1%3Bmax%2Dwidth%3A100%25%7D%2Ecol%2Dauto%7B%2Dwebkit%2Dbox%2Dflex%3A0%3B%2Dms%2Dflex%3A0%200%20auto%3Bflex%3A0%200%20auto%3Bwidth%3Aauto%3Bmax%2Dwidth%3Anone%7D%2Ecol%2D1%7B%2Dwebkit%2Dbox%2Dflex%3A0%3B%2Dms%2Dflex%3A0%200%208%2E333333%25%3Bflex%3A0%200%208%2E333333%25%3Bmax%2Dwidth%3A8%2E333333%25%7D%2Ecol%2D2%7B%2Dwebkit%2Dbox%2Dflex%3A0%3B%2Dms%2Dflex%3A0%200%2016%2E666667%25%3Bflex%3A0%200%2016%2E666667%25%3Bmax%2Dwidth%3A16%2E666667%25%7D%2Ecol%2D3%7B%2Dwebkit%2Dbox%2Dflex%3A0%3B%2Dms%2Dflex%3A0%200%2025%25%3Bflex%3A0%200%2025%25%3Bmax%2Dwidth%3A25%25%7D%2Ecol%2D4%7B%2Dwebkit%2Dbox%2Dflex%3A0%3B%2Dms%2Dflex%3A0%200%2033%2E333333%25%3Bflex%3A0%200%2033%2E333333%25%3Bmax%2Dwidth%3A33%2E333333%25%7D%2Ecol%2D5%7B%2Dwebkit%2Dbox%2Dflex%3A0%3B%2Dms%2Dflex%3A0%200%2041%2E666667%25%3Bflex%3A0%200%2041%2E666667%25%3Bmax%2Dwidth%3A41%2E666667%25%7D%2Ecol%2D6%7B%2Dwebkit%2Dbox%2Dflex%3A0%3B%2Dms%2Dflex%3A0%200%2050%25%3Bflex%3A0%200%2050%25%3Bmax%2Dwidth%3A50%25%7D%2Ecol%2D7%7B%2Dwebkit%2Dbox%2Dflex%3A0%3B%2Dms%2Dflex%3A0%200%2058%2E333333%25%3Bflex%3A0%200%2058%2E333333%25%3Bmax%2Dwidth%3A58%2E333333%25%7D%2Ecol%2D8%7B%2Dwebkit%2Dbox%2Dflex%3A0%3B%2Dms%2Dflex%3A0%200%2066%2E666667%25%3Bflex%3A0%200%2066%2E666667%25%3Bmax%2Dwidth%3A66%2E666667%25%7D%2Ecol%2D9%7B%2Dwebkit%2Dbox%2Dflex%3A0%3B%2Dms%2Dflex%3A0%200%2075%25%3Bflex%3A0%200%2075%25%3Bmax%2Dwidth%3A75%25%7D%2Ecol%2D10%7B%2Dwebkit%2Dbox%2Dflex%3A0%3B%2Dms%2Dflex%3A0%200%2083%2E333333%25%3Bflex%3A0%200%2083%2E333333%25%3Bmax%2Dwidth%3A83%2E333333%25%7D%2Ecol%2D11%7B%2Dwebkit%2Dbox%2Dflex%3A0%3B%2Dms%2Dflex%3A0%200%2091%2E666667%25%3Bflex%3A0%200%2091%2E666667%25%3Bmax%2Dwidth%3A91%2E666667%25%7D%2Ecol%2D12%7B%2Dwebkit%2Dbox%2Dflex%3A0%3B%2Dms%2Dflex%3A0%200%20100%25%3Bflex%3A0%200%20100%25%3Bmax%2Dwidth%3A100%25%7D%2Eorder%2Dfirst%7B%2Dwebkit%2Dbox%2Dordinal%2Dgroup%3A0%3B%2Dms%2Dflex%2Dorder%3A%2D1%3Border%3A%2D1%7D%2Eorder%2Dlast%7B%2Dwebkit%2Dbox%2Dordinal%2Dgroup%3A14%3B%2Dms%2Dflex%2Dorder%3A13%3Border%3A13%7D%2Eorder%2D0%7B%2Dwebkit%2Dbox%2Dordinal%2Dgroup%3A1%3B%2Dms%2Dflex%2Dorder%3A0%3Border%3A0%7D%2Eorder%2D1%7B%2Dwebkit%2Dbox%2Dordinal%2Dgroup%3A2%3B%2Dms%2Dflex%2Dorder%3A1%3Border%3A1%7D%2Eorder%2D2%7B%2Dwebkit%2Dbox%2Dordinal%2Dgroup%3A3%3B%2Dms%2Dflex%2Dorder%3A2%3Border%3A2%7D%2Eorder%2D3%7B%2Dwebkit%2Dbox%2Dordinal%2Dgroup%3A4%3B%2Dms%2Dflex%2Dorder%3A3%3Border%3A3%7D%2Eorder%2D4%7B%2Dwebkit%2Dbox%2Dordinal%2Dgroup%3A5%3B%2Dms%2Dflex%2Dorder%3A4%3Border%3A4%7D%2Eorder%2D5%7B%2Dwebkit%2Dbox%2Dordinal%2Dgroup%3A6%3B%2Dms%2Dflex%2Dorder%3A5%3Border%3A5%7D%2Eorder%2D6%7B%2Dwebkit%2Dbox%2Dordinal%2Dgroup%3A7%3B%2Dms%2Dflex%2Dorder%3A6%3Border%3A6%7D%2Eorder%2D7%7B%2Dwebkit%2Dbox%2Dordinal%2Dgroup%3A8%3B%2Dms%2Dflex%2Dorder%3A7%3Border%3A7%7D%2Eorder%2D8%7B%2Dwebkit%2Dbox%2Dordinal%2Dgroup%3A9%3B%2Dms%2Dflex%2Dorder%3A8%3Border%3A8%7D%2Eorder%2D9%7B%2Dwebkit%2Dbox%2Dordinal%2Dgroup%3A10%3B%2Dms%2Dflex%2Dorder%3A9%3Border%3A9%7D%2Eorder%2D10%7B%2Dwebkit%2Dbox%2Dordinal%2Dgroup%3A11%3B%2Dms%2Dflex%2Dorder%3A10%3Border%3A10%7D%2Eorder%2D11%7B%2Dwebkit%2Dbox%2Dordinal%2Dgroup%3A12%3B%2Dms%2Dflex%2Dorder%3A11%3Border%3A11%7D%2Eorder%2D12%7B%2Dwebkit%2Dbox%2Dordinal%2Dgroup%3A13%3B%2Dms%2Dflex%2Dorder%3A12%3Border%3A12%7D%2Eoffset%2D1%7Bmargin%2Dleft%3A8%2E333333%25%7D%2Eoffset%2D2%7Bmargin%2Dleft%3A16%2E666667%25%7D%2Eoffset%2D3%7Bmargin%2Dleft%3A25%25%7D%2Eoffset%2D4%7Bmargin%2Dleft%3A33%2E333333%25%7D%2Eoffset%2D5%7Bmargin%2Dleft%3A41%2E666667%25%7D%2Eoffset%2D6%7Bmargin%2Dleft%3A50%25%7D%2Eoffset%2D7%7Bmargin%2Dleft%3A58%2E333333%25%7D%2Eoffset%2D8%7Bmargin%2Dleft%3A66%2E666667%25%7D%2Eoffset%2D9%7Bmargin%2Dleft%3A75%25%7D%2Eoffset%2D10%7Bmargin%2Dleft%3A83%2E333333%25%7D%2Eoffset%2D11%7Bmargin%2Dleft%3A91%2E666667%25%7D%40media%20%28min%2Dwidth%3A576px%29%7B%2Ecol%2Dsm%7B%2Dms%2Dflex%2Dpreferred%2Dsize%3A0%3Bflex%2Dbasis%3A0%3B%2Dwebkit%2Dbox%2Dflex%3A1%3B%2Dms%2Dflex%2Dpositive%3A1%3Bflex%2Dgrow%3A1%3Bmax%2Dwidth%3A100%25%7D%2Ecol%2Dsm%2Dauto%7B%2Dwebkit%2Dbox%2Dflex%3A0%3B%2Dms%2Dflex%3A0%200%20auto%3Bflex%3A0%200%20auto%3Bwidth%3Aauto%3Bmax%2Dwidth%3Anone%7D%2Ecol%2Dsm%2D1%7B%2Dwebkit%2Dbox%2Dflex%3A0%3B%2Dms%2Dflex%3A0%200%208%2E333333%25%3Bflex%3A0%200%208%2E333333%25%3Bmax%2Dwidth%3A8%2E333333%25%7D%2Ecol%2Dsm%2D2%7B%2Dwebkit%2Dbox%2Dflex%3A0%3B%2Dms%2Dflex%3A0%200%2016%2E666667%25%3Bflex%3A0%200%2016%2E666667%25%3Bmax%2Dwidth%3A16%2E666667%25%7D%2Ecol%2Dsm%2D3%7B%2Dwebkit%2Dbox%2Dflex%3A0%3B%2Dms%2Dflex%3A0%200%2025%25%3Bflex%3A0%200%2025%25%3Bmax%2Dwidth%3A25%25%7D%2Ecol%2Dsm%2D4%7B%2Dwebkit%2Dbox%2Dflex%3A0%3B%2Dms%2Dflex%3A0%200%2033%2E333333%25%3Bflex%3A0%200%2033%2E333333%25%3Bmax%2Dwidth%3A33%2E333333%25%7D%2Ecol%2Dsm%2D5%7B%2Dwebkit%2Dbox%2Dflex%3A0%3B%2Dms%2Dflex%3A0%200%2041%2E666667%25%3Bflex%3A0%200%2041%2E666667%25%3Bmax%2Dwidth%3A41%2E666667%25%7D%2Ecol%2Dsm%2D6%7B%2Dwebkit%2Dbox%2Dflex%3A0%3B%2Dms%2Dflex%3A0%200%2050%25%3Bflex%3A0%200%2050%25%3Bmax%2Dwidth%3A50%25%7D%2Ecol%2Dsm%2D7%7B%2Dwebkit%2Dbox%2Dflex%3A0%3B%2Dms%2Dflex%3A0%200%2058%2E333333%25%3Bflex%3A0%200%2058%2E333333%25%3Bmax%2Dwidth%3A58%2E333333%25%7D%2Ecol%2Dsm%2D8%7B%2Dwebkit%2Dbox%2Dflex%3A0%3B%2Dms%2Dflex%3A0%200%2066%2E666667%25%3Bflex%3A0%200%2066%2E666667%25%3Bmax%2Dwidth%3A66%2E666667%25%7D%2Ecol%2Dsm%2D9%7B%2Dwebkit%2Dbox%2Dflex%3A0%3B%2Dms%2Dflex%3A0%200%2075%25%3Bflex%3A0%200%2075%25%3Bmax%2Dwidth%3A75%25%7D%2Ecol%2Dsm%2D10%7B%2Dwebkit%2Dbox%2Dflex%3A0%3B%2Dms%2Dflex%3A0%200%2083%2E333333%25%3Bflex%3A0%200%2083%2E333333%25%3Bmax%2Dwidth%3A83%2E333333%25%7D%2Ecol%2Dsm%2D11%7B%2Dwebkit%2Dbox%2Dflex%3A0%3B%2Dms%2Dflex%3A0%200%2091%2E666667%25%3Bflex%3A0%200%2091%2E666667%25%3Bmax%2Dwidth%3A91%2E666667%25%7D%2Ecol%2Dsm%2D12%7B%2Dwebkit%2Dbox%2Dflex%3A0%3B%2Dms%2Dflex%3A0%200%20100%25%3Bflex%3A0%200%20100%25%3Bmax%2Dwidth%3A100%25%7D%2Eorder%2Dsm%2Dfirst%7B%2Dwebkit%2Dbox%2Dordinal%2Dgroup%3A0%3B%2Dms%2Dflex%2Dorder%3A%2D1%3Border%3A%2D1%7D%2Eorder%2Dsm%2Dlast%7B%2Dwebkit%2Dbox%2Dordinal%2Dgroup%3A14%3B%2Dms%2Dflex%2Dorder%3A13%3Border%3A13%7D%2Eorder%2Dsm%2D0%7B%2Dwebkit%2Dbox%2Dordinal%2Dgroup%3A1%3B%2Dms%2Dflex%2Dorder%3A0%3Border%3A0%7D%2Eorder%2Dsm%2D1%7B%2Dwebkit%2Dbox%2Dordinal%2Dgroup%3A2%3B%2Dms%2Dflex%2Dorder%3A1%3Border%3A1%7D%2Eorder%2Dsm%2D2%7B%2Dwebkit%2Dbox%2Dordinal%2Dgroup%3A3%3B%2Dms%2Dflex%2Dorder%3A2%3Border%3A2%7D%2Eorder%2Dsm%2D3%7B%2Dwebkit%2Dbox%2Dordinal%2Dgroup%3A4%3B%2Dms%2Dflex%2Dorder%3A3%3Border%3A3%7D%2Eorder%2Dsm%2D4%7B%2Dwebkit%2Dbox%2Dordinal%2Dgroup%3A5%3B%2Dms%2Dflex%2Dorder%3A4%3Border%3A4%7D%2Eorder%2Dsm%2D5%7B%2Dwebkit%2Dbox%2Dordinal%2Dgroup%3A6%3B%2Dms%2Dflex%2Dorder%3A5%3Border%3A5%7D%2Eorder%2Dsm%2D6%7B%2Dwebkit%2Dbox%2Dordinal%2Dgroup%3A7%3B%2Dms%2Dflex%2Dorder%3A6%3Border%3A6%7D%2Eorder%2Dsm%2D7%7B%2Dwebkit%2Dbox%2Dordinal%2Dgroup%3A8%3B%2Dms%2Dflex%2Dorder%3A7%3Border%3A7%7D%2Eorder%2Dsm%2D8%7B%2Dwebkit%2Dbox%2Dordinal%2Dgroup%3A9%3B%2Dms%2Dflex%2Dorder%3A8%3Border%3A8%7D%2Eorder%2Dsm%2D9%7B%2Dwebkit%2Dbox%2Dordinal%2Dgroup%3A10%3B%2Dms%2Dflex%2Dorder%3A9%3Border%3A9%7D%2Eorder%2Dsm%2D10%7B%2Dwebkit%2Dbox%2Dordinal%2Dgroup%3A11%3B%2Dms%2Dflex%2Dorder%3A10%3Border%3A10%7D%2Eorder%2Dsm%2D11%7B%2Dwebkit%2Dbox%2Dordinal%2Dgroup%3A12%3B%2Dms%2Dflex%2Dorder%3A11%3Border%3A11%7D%2Eorder%2Dsm%2D12%7B%2Dwebkit%2Dbox%2Dordinal%2Dgroup%3A13%3B%2Dms%2Dflex%2Dorder%3A12%3Border%3A12%7D%2Eoffset%2Dsm%2D0%7Bmargin%2Dleft%3A0%7D%2Eoffset%2Dsm%2D1%7Bmargin%2Dleft%3A8%2E333333%25%7D%2Eoffset%2Dsm%2D2%7Bmargin%2Dleft%3A16%2E666667%25%7D%2Eoffset%2Dsm%2D3%7Bmargin%2Dleft%3A25%25%7D%2Eoffset%2Dsm%2D4%7Bmargin%2Dleft%3A33%2E333333%25%7D%2Eoffset%2Dsm%2D5%7Bmargin%2Dleft%3A41%2E666667%25%7D%2Eoffset%2Dsm%2D6%7Bmargin%2Dleft%3A50%25%7D%2Eoffset%2Dsm%2D7%7Bmargin%2Dleft%3A58%2E333333%25%7D%2Eoffset%2Dsm%2D8%7Bmargin%2Dleft%3A66%2E666667%25%7D%2Eoffset%2Dsm%2D9%7Bmargin%2Dleft%3A75%25%7D%2Eoffset%2Dsm%2D10%7Bmargin%2Dleft%3A83%2E333333%25%7D%2Eoffset%2Dsm%2D11%7Bmargin%2Dleft%3A91%2E666667%25%7D%7D%40media%20%28min%2Dwidth%3A768px%29%7B%2Ecol%2Dmd%7B%2Dms%2Dflex%2Dpreferred%2Dsize%3A0%3Bflex%2Dbasis%3A0%3B%2Dwebkit%2Dbox%2Dflex%3A1%3B%2Dms%2Dflex%2Dpositive%3A1%3Bflex%2Dgrow%3A1%3Bmax%2Dwidth%3A100%25%7D%2Ecol%2Dmd%2Dauto%7B%2Dwebkit%2Dbox%2Dflex%3A0%3B%2Dms%2Dflex%3A0%200%20auto%3Bflex%3A0%200%20auto%3Bwidth%3Aauto%3Bmax%2Dwidth%3Anone%7D%2Ecol%2Dmd%2D1%7B%2Dwebkit%2Dbox%2Dflex%3A0%3B%2Dms%2Dflex%3A0%200%208%2E333333%25%3Bflex%3A0%200%208%2E333333%25%3Bmax%2Dwidth%3A8%2E333333%25%7D%2Ecol%2Dmd%2D2%7B%2Dwebkit%2Dbox%2Dflex%3A0%3B%2Dms%2Dflex%3A0%200%2016%2E666667%25%3Bflex%3A0%200%2016%2E666667%25%3Bmax%2Dwidth%3A16%2E666667%25%7D%2Ecol%2Dmd%2D3%7B%2Dwebkit%2Dbox%2Dflex%3A0%3B%2Dms%2Dflex%3A0%200%2025%25%3Bflex%3A0%200%2025%25%3Bmax%2Dwidth%3A25%25%7D%2Ecol%2Dmd%2D4%7B%2Dwebkit%2Dbox%2Dflex%3A0%3B%2Dms%2Dflex%3A0%200%2033%2E333333%25%3Bflex%3A0%200%2033%2E333333%25%3Bmax%2Dwidth%3A33%2E333333%25%7D%2Ecol%2Dmd%2D5%7B%2Dwebkit%2Dbox%2Dflex%3A0%3B%2Dms%2Dflex%3A0%200%2041%2E666667%25%3Bflex%3A0%200%2041%2E666667%25%3Bmax%2Dwidth%3A41%2E666667%25%7D%2Ecol%2Dmd%2D6%7B%2Dwebkit%2Dbox%2Dflex%3A0%3B%2Dms%2Dflex%3A0%200%2050%25%3Bflex%3A0%200%2050%25%3Bmax%2Dwidth%3A50%25%7D%2Ecol%2Dmd%2D7%7B%2Dwebkit%2Dbox%2Dflex%3A0%3B%2Dms%2Dflex%3A0%200%2058%2E333333%25%3Bflex%3A0%200%2058%2E333333%25%3Bmax%2Dwidth%3A58%2E333333%25%7D%2Ecol%2Dmd%2D8%7B%2Dwebkit%2Dbox%2Dflex%3A0%3B%2Dms%2Dflex%3A0%200%2066%2E666667%25%3Bflex%3A0%200%2066%2E666667%25%3Bmax%2Dwidth%3A66%2E666667%25%7D%2Ecol%2Dmd%2D9%7B%2Dwebkit%2Dbox%2Dflex%3A0%3B%2Dms%2Dflex%3A0%200%2075%25%3Bflex%3A0%200%2075%25%3Bmax%2Dwidth%3A75%25%7D%2Ecol%2Dmd%2D10%7B%2Dwebkit%2Dbox%2Dflex%3A0%3B%2Dms%2Dflex%3A0%200%2083%2E333333%25%3Bflex%3A0%200%2083%2E333333%25%3Bmax%2Dwidth%3A83%2E333333%25%7D%2Ecol%2Dmd%2D11%7B%2Dwebkit%2Dbox%2Dflex%3A0%3B%2Dms%2Dflex%3A0%200%2091%2E666667%25%3Bflex%3A0%200%2091%2E666667%25%3Bmax%2Dwidth%3A91%2E666667%25%7D%2Ecol%2Dmd%2D12%7B%2Dwebkit%2Dbox%2Dflex%3A0%3B%2Dms%2Dflex%3A0%200%20100%25%3Bflex%3A0%200%20100%25%3Bmax%2Dwidth%3A100%25%7D%2Eorder%2Dmd%2Dfirst%7B%2Dwebkit%2Dbox%2Dordinal%2Dgroup%3A0%3B%2Dms%2Dflex%2Dorder%3A%2D1%3Border%3A%2D1%7D%2Eorder%2Dmd%2Dlast%7B%2Dwebkit%2Dbox%2Dordinal%2Dgroup%3A14%3B%2Dms%2Dflex%2Dorder%3A13%3Border%3A13%7D%2Eorder%2Dmd%2D0%7B%2Dwebkit%2Dbox%2Dordinal%2Dgroup%3A1%3B%2Dms%2Dflex%2Dorder%3A0%3Border%3A0%7D%2Eorder%2Dmd%2D1%7B%2Dwebkit%2Dbox%2Dordinal%2Dgroup%3A2%3B%2Dms%2Dflex%2Dorder%3A1%3Border%3A1%7D%2Eorder%2Dmd%2D2%7B%2Dwebkit%2Dbox%2Dordinal%2Dgroup%3A3%3B%2Dms%2Dflex%2Dorder%3A2%3Border%3A2%7D%2Eorder%2Dmd%2D3%7B%2Dwebkit%2Dbox%2Dordinal%2Dgroup%3A4%3B%2Dms%2Dflex%2Dorder%3A3%3Border%3A3%7D%2Eorder%2Dmd%2D4%7B%2Dwebkit%2Dbox%2Dordinal%2Dgroup%3A5%3B%2Dms%2Dflex%2Dorder%3A4%3Border%3A4%7D%2Eorder%2Dmd%2D5%7B%2Dwebkit%2Dbox%2Dordinal%2Dgroup%3A6%3B%2Dms%2Dflex%2Dorder%3A5%3Border%3A5%7D%2Eorder%2Dmd%2D6%7B%2Dwebkit%2Dbox%2Dordinal%2Dgroup%3A7%3B%2Dms%2Dflex%2Dorder%3A6%3Border%3A6%7D%2Eorder%2Dmd%2D7%7B%2Dwebkit%2Dbox%2Dordinal%2Dgroup%3A8%3B%2Dms%2Dflex%2Dorder%3A7%3Border%3A7%7D%2Eorder%2Dmd%2D8%7B%2Dwebkit%2Dbox%2Dordinal%2Dgroup%3A9%3B%2Dms%2Dflex%2Dorder%3A8%3Border%3A8%7D%2Eorder%2Dmd%2D9%7B%2Dwebkit%2Dbox%2Dordinal%2Dgroup%3A10%3B%2Dms%2Dflex%2Dorder%3A9%3Border%3A9%7D%2Eorder%2Dmd%2D10%7B%2Dwebkit%2Dbox%2Dordinal%2Dgroup%3A11%3B%2Dms%2Dflex%2Dorder%3A10%3Border%3A10%7D%2Eorder%2Dmd%2D11%7B%2Dwebkit%2Dbox%2Dordinal%2Dgroup%3A12%3B%2Dms%2Dflex%2Dorder%3A11%3Border%3A11%7D%2Eorder%2Dmd%2D12%7B%2Dwebkit%2Dbox%2Dordinal%2Dgroup%3A13%3B%2Dms%2Dflex%2Dorder%3A12%3Border%3A12%7D%2Eoffset%2Dmd%2D0%7Bmargin%2Dleft%3A0%7D%2Eoffset%2Dmd%2D1%7Bmargin%2Dleft%3A8%2E333333%25%7D%2Eoffset%2Dmd%2D2%7Bmargin%2Dleft%3A16%2E666667%25%7D%2Eoffset%2Dmd%2D3%7Bmargin%2Dleft%3A25%25%7D%2Eoffset%2Dmd%2D4%7Bmargin%2Dleft%3A33%2E333333%25%7D%2Eoffset%2Dmd%2D5%7Bmargin%2Dleft%3A41%2E666667%25%7D%2Eoffset%2Dmd%2D6%7Bmargin%2Dleft%3A50%25%7D%2Eoffset%2Dmd%2D7%7Bmargin%2Dleft%3A58%2E333333%25%7D%2Eoffset%2Dmd%2D8%7Bmargin%2Dleft%3A66%2E666667%25%7D%2Eoffset%2Dmd%2D9%7Bmargin%2Dleft%3A75%25%7D%2Eoffset%2Dmd%2D10%7Bmargin%2Dleft%3A83%2E333333%25%7D%2Eoffset%2Dmd%2D11%7Bmargin%2Dleft%3A91%2E666667%25%7D%7D%40media%20%28min%2Dwidth%3A992px%29%7B%2Ecol%2Dlg%7B%2Dms%2Dflex%2Dpreferred%2Dsize%3A0%3Bflex%2Dbasis%3A0%3B%2Dwebkit%2Dbox%2Dflex%3A1%3B%2Dms%2Dflex%2Dpositive%3A1%3Bflex%2Dgrow%3A1%3Bmax%2Dwidth%3A100%25%7D%2Ecol%2Dlg%2Dauto%7B%2Dwebkit%2Dbox%2Dflex%3A0%3B%2Dms%2Dflex%3A0%200%20auto%3Bflex%3A0%200%20auto%3Bwidth%3Aauto%3Bmax%2Dwidth%3Anone%7D%2Ecol%2Dlg%2D1%7B%2Dwebkit%2Dbox%2Dflex%3A0%3B%2Dms%2Dflex%3A0%200%208%2E333333%25%3Bflex%3A0%200%208%2E333333%25%3Bmax%2Dwidth%3A8%2E333333%25%7D%2Ecol%2Dlg%2D2%7B%2Dwebkit%2Dbox%2Dflex%3A0%3B%2Dms%2Dflex%3A0%200%2016%2E666667%25%3Bflex%3A0%200%2016%2E666667%25%3Bmax%2Dwidth%3A16%2E666667%25%7D%2Ecol%2Dlg%2D3%7B%2Dwebkit%2Dbox%2Dflex%3A0%3B%2Dms%2Dflex%3A0%200%2025%25%3Bflex%3A0%200%2025%25%3Bmax%2Dwidth%3A25%25%7D%2Ecol%2Dlg%2D4%7B%2Dwebkit%2Dbox%2Dflex%3A0%3B%2Dms%2Dflex%3A0%200%2033%2E333333%25%3Bflex%3A0%200%2033%2E333333%25%3Bmax%2Dwidth%3A33%2E333333%25%7D%2Ecol%2Dlg%2D5%7B%2Dwebkit%2Dbox%2Dflex%3A0%3B%2Dms%2Dflex%3A0%200%2041%2E666667%25%3Bflex%3A0%200%2041%2E666667%25%3Bmax%2Dwidth%3A41%2E666667%25%7D%2Ecol%2Dlg%2D6%7B%2Dwebkit%2Dbox%2Dflex%3A0%3B%2Dms%2Dflex%3A0%200%2050%25%3Bflex%3A0%200%2050%25%3Bmax%2Dwidth%3A50%25%7D%2Ecol%2Dlg%2D7%7B%2Dwebkit%2Dbox%2Dflex%3A0%3B%2Dms%2Dflex%3A0%200%2058%2E333333%25%3Bflex%3A0%200%2058%2E333333%25%3Bmax%2Dwidth%3A58%2E333333%25%7D%2Ecol%2Dlg%2D8%7B%2Dwebkit%2Dbox%2Dflex%3A0%3B%2Dms%2Dflex%3A0%200%2066%2E666667%25%3Bflex%3A0%200%2066%2E666667%25%3Bmax%2Dwidth%3A66%2E666667%25%7D%2Ecol%2Dlg%2D9%7B%2Dwebkit%2Dbox%2Dflex%3A0%3B%2Dms%2Dflex%3A0%200%2075%25%3Bflex%3A0%200%2075%25%3Bmax%2Dwidth%3A75%25%7D%2Ecol%2Dlg%2D10%7B%2Dwebkit%2Dbox%2Dflex%3A0%3B%2Dms%2Dflex%3A0%200%2083%2E333333%25%3Bflex%3A0%200%2083%2E333333%25%3Bmax%2Dwidth%3A83%2E333333%25%7D%2Ecol%2Dlg%2D11%7B%2Dwebkit%2Dbox%2Dflex%3A0%3B%2Dms%2Dflex%3A0%200%2091%2E666667%25%3Bflex%3A0%200%2091%2E666667%25%3Bmax%2Dwidth%3A91%2E666667%25%7D%2Ecol%2Dlg%2D12%7B%2Dwebkit%2Dbox%2Dflex%3A0%3B%2Dms%2Dflex%3A0%200%20100%25%3Bflex%3A0%200%20100%25%3Bmax%2Dwidth%3A100%25%7D%2Eorder%2Dlg%2Dfirst%7B%2Dwebkit%2Dbox%2Dordinal%2Dgroup%3A0%3B%2Dms%2Dflex%2Dorder%3A%2D1%3Border%3A%2D1%7D%2Eorder%2Dlg%2Dlast%7B%2Dwebkit%2Dbox%2Dordinal%2Dgroup%3A14%3B%2Dms%2Dflex%2Dorder%3A13%3Border%3A13%7D%2Eorder%2Dlg%2D0%7B%2Dwebkit%2Dbox%2Dordinal%2Dgroup%3A1%3B%2Dms%2Dflex%2Dorder%3A0%3Border%3A0%7D%2Eorder%2Dlg%2D1%7B%2Dwebkit%2Dbox%2Dordinal%2Dgroup%3A2%3B%2Dms%2Dflex%2Dorder%3A1%3Border%3A1%7D%2Eorder%2Dlg%2D2%7B%2Dwebkit%2Dbox%2Dordinal%2Dgroup%3A3%3B%2Dms%2Dflex%2Dorder%3A2%3Border%3A2%7D%2Eorder%2Dlg%2D3%7B%2Dwebkit%2Dbox%2Dordinal%2Dgroup%3A4%3B%2Dms%2Dflex%2Dorder%3A3%3Border%3A3%7D%2Eorder%2Dlg%2D4%7B%2Dwebkit%2Dbox%2Dordinal%2Dgroup%3A5%3B%2Dms%2Dflex%2Dorder%3A4%3Border%3A4%7D%2Eorder%2Dlg%2D5%7B%2Dwebkit%2Dbox%2Dordinal%2Dgroup%3A6%3B%2Dms%2Dflex%2Dorder%3A5%3Border%3A5%7D%2Eorder%2Dlg%2D6%7B%2Dwebkit%2Dbox%2Dordinal%2Dgroup%3A7%3B%2Dms%2Dflex%2Dorder%3A6%3Border%3A6%7D%2Eorder%2Dlg%2D7%7B%2Dwebkit%2Dbox%2Dordinal%2Dgroup%3A8%3B%2Dms%2Dflex%2Dorder%3A7%3Border%3A7%7D%2Eorder%2Dlg%2D8%7B%2Dwebkit%2Dbox%2Dordinal%2Dgroup%3A9%3B%2Dms%2Dflex%2Dorder%3A8%3Border%3A8%7D%2Eorder%2Dlg%2D9%7B%2Dwebkit%2Dbox%2Dordinal%2Dgroup%3A10%3B%2Dms%2Dflex%2Dorder%3A9%3Border%3A9%7D%2Eorder%2Dlg%2D10%7B%2Dwebkit%2Dbox%2Dordinal%2Dgroup%3A11%3B%2Dms%2Dflex%2Dorder%3A10%3Border%3A10%7D%2Eorder%2Dlg%2D11%7B%2Dwebkit%2Dbox%2Dordinal%2Dgroup%3A12%3B%2Dms%2Dflex%2Dorder%3A11%3Border%3A11%7D%2Eorder%2Dlg%2D12%7B%2Dwebkit%2Dbox%2Dordinal%2Dgroup%3A13%3B%2Dms%2Dflex%2Dorder%3A12%3Border%3A12%7D%2Eoffset%2Dlg%2D0%7Bmargin%2Dleft%3A0%7D%2Eoffset%2Dlg%2D1%7Bmargin%2Dleft%3A8%2E333333%25%7D%2Eoffset%2Dlg%2D2%7Bmargin%2Dleft%3A16%2E666667%25%7D%2Eoffset%2Dlg%2D3%7Bmargin%2Dleft%3A25%25%7D%2Eoffset%2Dlg%2D4%7Bmargin%2Dleft%3A33%2E333333%25%7D%2Eoffset%2Dlg%2D5%7Bmargin%2Dleft%3A41%2E666667%25%7D%2Eoffset%2Dlg%2D6%7Bmargin%2Dleft%3A50%25%7D%2Eoffset%2Dlg%2D7%7Bmargin%2Dleft%3A58%2E333333%25%7D%2Eoffset%2Dlg%2D8%7Bmargin%2Dleft%3A66%2E666667%25%7D%2Eoffset%2Dlg%2D9%7Bmargin%2Dleft%3A75%25%7D%2Eoffset%2Dlg%2D10%7Bmargin%2Dleft%3A83%2E333333%25%7D%2Eoffset%2Dlg%2D11%7Bmargin%2Dleft%3A91%2E666667%25%7D%7D%40media%20%28min%2Dwidth%3A1200px%29%7B%2Ecol%2Dxl%7B%2Dms%2Dflex%2Dpreferred%2Dsize%3A0%3Bflex%2Dbasis%3A0%3B%2Dwebkit%2Dbox%2Dflex%3A1%3B%2Dms%2Dflex%2Dpositive%3A1%3Bflex%2Dgrow%3A1%3Bmax%2Dwidth%3A100%25%7D%2Ecol%2Dxl%2Dauto%7B%2Dwebkit%2Dbox%2Dflex%3A0%3B%2Dms%2Dflex%3A0%200%20auto%3Bflex%3A0%200%20auto%3Bwidth%3Aauto%3Bmax%2Dwidth%3Anone%7D%2Ecol%2Dxl%2D1%7B%2Dwebkit%2Dbox%2Dflex%3A0%3B%2Dms%2Dflex%3A0%200%208%2E333333%25%3Bflex%3A0%200%208%2E333333%25%3Bmax%2Dwidth%3A8%2E333333%25%7D%2Ecol%2Dxl%2D2%7B%2Dwebkit%2Dbox%2Dflex%3A0%3B%2Dms%2Dflex%3A0%200%2016%2E666667%25%3Bflex%3A0%200%2016%2E666667%25%3Bmax%2Dwidth%3A16%2E666667%25%7D%2Ecol%2Dxl%2D3%7B%2Dwebkit%2Dbox%2Dflex%3A0%3B%2Dms%2Dflex%3A0%200%2025%25%3Bflex%3A0%200%2025%25%3Bmax%2Dwidth%3A25%25%7D%2Ecol%2Dxl%2D4%7B%2Dwebkit%2Dbox%2Dflex%3A0%3B%2Dms%2Dflex%3A0%200%2033%2E333333%25%3Bflex%3A0%200%2033%2E333333%25%3Bmax%2Dwidth%3A33%2E333333%25%7D%2Ecol%2Dxl%2D5%7B%2Dwebkit%2Dbox%2Dflex%3A0%3B%2Dms%2Dflex%3A0%200%2041%2E666667%25%3Bflex%3A0%200%2041%2E666667%25%3Bmax%2Dwidth%3A41%2E666667%25%7D%2Ecol%2Dxl%2D6%7B%2Dwebkit%2Dbox%2Dflex%3A0%3B%2Dms%2Dflex%3A0%200%2050%25%3Bflex%3A0%200%2050%25%3Bmax%2Dwidth%3A50%25%7D%2Ecol%2Dxl%2D7%7B%2Dwebkit%2Dbox%2Dflex%3A0%3B%2Dms%2Dflex%3A0%200%2058%2E333333%25%3Bflex%3A0%200%2058%2E333333%25%3Bmax%2Dwidth%3A58%2E333333%25%7D%2Ecol%2Dxl%2D8%7B%2Dwebkit%2Dbox%2Dflex%3A0%3B%2Dms%2Dflex%3A0%200%2066%2E666667%25%3Bflex%3A0%200%2066%2E666667%25%3Bmax%2Dwidth%3A66%2E666667%25%7D%2Ecol%2Dxl%2D9%7B%2Dwebkit%2Dbox%2Dflex%3A0%3B%2Dms%2Dflex%3A0%200%2075%25%3Bflex%3A0%200%2075%25%3Bmax%2Dwidth%3A75%25%7D%2Ecol%2Dxl%2D10%7B%2Dwebkit%2Dbox%2Dflex%3A0%3B%2Dms%2Dflex%3A0%200%2083%2E333333%25%3Bflex%3A0%200%2083%2E333333%25%3Bmax%2Dwidth%3A83%2E333333%25%7D%2Ecol%2Dxl%2D11%7B%2Dwebkit%2Dbox%2Dflex%3A0%3B%2Dms%2Dflex%3A0%200%2091%2E666667%25%3Bflex%3A0%200%2091%2E666667%25%3Bmax%2Dwidth%3A91%2E666667%25%7D%2Ecol%2Dxl%2D12%7B%2Dwebkit%2Dbox%2Dflex%3A0%3B%2Dms%2Dflex%3A0%200%20100%25%3Bflex%3A0%200%20100%25%3Bmax%2Dwidth%3A100%25%7D%2Eorder%2Dxl%2Dfirst%7B%2Dwebkit%2Dbox%2Dordinal%2Dgroup%3A0%3B%2Dms%2Dflex%2Dorder%3A%2D1%3Border%3A%2D1%7D%2Eorder%2Dxl%2Dlast%7B%2Dwebkit%2Dbox%2Dordinal%2Dgroup%3A14%3B%2Dms%2Dflex%2Dorder%3A13%3Border%3A13%7D%2Eorder%2Dxl%2D0%7B%2Dwebkit%2Dbox%2Dordinal%2Dgroup%3A1%3B%2Dms%2Dflex%2Dorder%3A0%3Border%3A0%7D%2Eorder%2Dxl%2D1%7B%2Dwebkit%2Dbox%2Dordinal%2Dgroup%3A2%3B%2Dms%2Dflex%2Dorder%3A1%3Border%3A1%7D%2Eorder%2Dxl%2D2%7B%2Dwebkit%2Dbox%2Dordinal%2Dgroup%3A3%3B%2Dms%2Dflex%2Dorder%3A2%3Border%3A2%7D%2Eorder%2Dxl%2D3%7B%2Dwebkit%2Dbox%2Dordinal%2Dgroup%3A4%3B%2Dms%2Dflex%2Dorder%3A3%3Border%3A3%7D%2Eorder%2Dxl%2D4%7B%2Dwebkit%2Dbox%2Dordinal%2Dgroup%3A5%3B%2Dms%2Dflex%2Dorder%3A4%3Border%3A4%7D%2Eorder%2Dxl%2D5%7B%2Dwebkit%2Dbox%2Dordinal%2Dgroup%3A6%3B%2Dms%2Dflex%2Dorder%3A5%3Border%3A5%7D%2Eorder%2Dxl%2D6%7B%2Dwebkit%2Dbox%2Dordinal%2Dgroup%3A7%3B%2Dms%2Dflex%2Dorder%3A6%3Border%3A6%7D%2Eorder%2Dxl%2D7%7B%2Dwebkit%2Dbox%2Dordinal%2Dgroup%3A8%3B%2Dms%2Dflex%2Dorder%3A7%3Border%3A7%7D%2Eorder%2Dxl%2D8%7B%2Dwebkit%2Dbox%2Dordinal%2Dgroup%3A9%3B%2Dms%2Dflex%2Dorder%3A8%3Border%3A8%7D%2Eorder%2Dxl%2D9%7B%2Dwebkit%2Dbox%2Dordinal%2Dgroup%3A10%3B%2Dms%2Dflex%2Dorder%3A9%3Border%3A9%7D%2Eorder%2Dxl%2D10%7B%2Dwebkit%2Dbox%2Dordinal%2Dgroup%3A11%3B%2Dms%2Dflex%2Dorder%3A10%3Border%3A10%7D%2Eorder%2Dxl%2D11%7B%2Dwebkit%2Dbox%2Dordinal%2Dgroup%3A12%3B%2Dms%2Dflex%2Dorder%3A11%3Border%3A11%7D%2Eorder%2Dxl%2D12%7B%2Dwebkit%2Dbox%2Dordinal%2Dgroup%3A13%3B%2Dms%2Dflex%2Dorder%3A12%3Border%3A12%7D%2Eoffset%2Dxl%2D0%7Bmargin%2Dleft%3A0%7D%2Eoffset%2Dxl%2D1%7Bmargin%2Dleft%3A8%2E333333%25%7D%2Eoffset%2Dxl%2D2%7Bmargin%2Dleft%3A16%2E666667%25%7D%2Eoffset%2Dxl%2D3%7Bmargin%2Dleft%3A25%25%7D%2Eoffset%2Dxl%2D4%7Bmargin%2Dleft%3A33%2E333333%25%7D%2Eoffset%2Dxl%2D5%7Bmargin%2Dleft%3A41%2E666667%25%7D%2Eoffset%2Dxl%2D6%7Bmargin%2Dleft%3A50%25%7D%2Eoffset%2Dxl%2D7%7Bmargin%2Dleft%3A58%2E333333%25%7D%2Eoffset%2Dxl%2D8%7Bmargin%2Dleft%3A66%2E666667%25%7D%2Eoffset%2Dxl%2D9%7Bmargin%2Dleft%3A75%25%7D%2Eoffset%2Dxl%2D10%7Bmargin%2Dleft%3A83%2E333333%25%7D%2Eoffset%2Dxl%2D11%7Bmargin%2Dleft%3A91%2E666667%25%7D%7D%2Etable%7Bwidth%3A100%25%3Bmax%2Dwidth%3A100%25%3Bmargin%2Dbottom%3A1rem%3Bbackground%2Dcolor%3Atransparent%7D%2Etable%20td%2C%2Etable%20th%7Bpadding%3A%2E75rem%3Bvertical%2Dalign%3Atop%3Bborder%2Dtop%3A1px%20solid%20%23dee2e6%7D%2Etable%20thead%20th%7Bvertical%2Dalign%3Abottom%3Bborder%2Dbottom%3A2px%20solid%20%23dee2e6%7D%2Etable%20tbody%2Btbody%7Bborder%2Dtop%3A2px%20solid%20%23dee2e6%7D%2Etable%20%2Etable%7Bbackground%2Dcolor%3A%23fff%7D%2Etable%2Dsm%20td%2C%2Etable%2Dsm%20th%7Bpadding%3A%2E3rem%7D%2Etable%2Dbordered%7Bborder%3A1px%20solid%20%23dee2e6%7D%2Etable%2Dbordered%20td%2C%2Etable%2Dbordered%20th%7Bborder%3A1px%20solid%20%23dee2e6%7D%2Etable%2Dbordered%20thead%20td%2C%2Etable%2Dbordered%20thead%20th%7Bborder%2Dbottom%2Dwidth%3A2px%7D%2Etable%2Dstriped%20tbody%20tr%3Anth%2Dof%2Dtype%28odd%29%7Bbackground%2Dcolor%3Argba%280%2C0%2C0%2C%2E05%29%7D%2Etable%2Dhover%20tbody%20tr%3Ahover%7Bbackground%2Dcolor%3Argba%280%2C0%2C0%2C%2E075%29%7D%2Etable%2Dprimary%2C%2Etable%2Dprimary%3Etd%2C%2Etable%2Dprimary%3Eth%7Bbackground%2Dcolor%3A%23b8daff%7D%2Etable%2Dhover%20%2Etable%2Dprimary%3Ahover%7Bbackground%2Dcolor%3A%239fcdff%7D%2Etable%2Dhover%20%2Etable%2Dprimary%3Ahover%3Etd%2C%2Etable%2Dhover%20%2Etable%2Dprimary%3Ahover%3Eth%7Bbackground%2Dcolor%3A%239fcdff%7D%2Etable%2Dsecondary%2C%2Etable%2Dsecondary%3Etd%2C%2Etable%2Dsecondary%3Eth%7Bbackground%2Dcolor%3A%23d6d8db%7D%2Etable%2Dhover%20%2Etable%2Dsecondary%3Ahover%7Bbackground%2Dcolor%3A%23c8cbcf%7D%2Etable%2Dhover%20%2Etable%2Dsecondary%3Ahover%3Etd%2C%2Etable%2Dhover%20%2Etable%2Dsecondary%3Ahover%3Eth%7Bbackground%2Dcolor%3A%23c8cbcf%7D%2Etable%2Dsuccess%2C%2Etable%2Dsuccess%3Etd%2C%2Etable%2Dsuccess%3Eth%7Bbackground%2Dcolor%3A%23c3e6cb%7D%2Etable%2Dhover%20%2Etable%2Dsuccess%3Ahover%7Bbackground%2Dcolor%3A%23b1dfbb%7D%2Etable%2Dhover%20%2Etable%2Dsuccess%3Ahover%3Etd%2C%2Etable%2Dhover%20%2Etable%2Dsuccess%3Ahover%3Eth%7Bbackground%2Dcolor%3A%23b1dfbb%7D%2Etable%2Dinfo%2C%2Etable%2Dinfo%3Etd%2C%2Etable%2Dinfo%3Eth%7Bbackground%2Dcolor%3A%23bee5eb%7D%2Etable%2Dhover%20%2Etable%2Dinfo%3Ahover%7Bbackground%2Dcolor%3A%23abdde5%7D%2Etable%2Dhover%20%2Etable%2Dinfo%3Ahover%3Etd%2C%2Etable%2Dhover%20%2Etable%2Dinfo%3Ahover%3Eth%7Bbackground%2Dcolor%3A%23abdde5%7D%2Etable%2Dwarning%2C%2Etable%2Dwarning%3Etd%2C%2Etable%2Dwarning%3Eth%7Bbackground%2Dcolor%3A%23ffeeba%7D%2Etable%2Dhover%20%2Etable%2Dwarning%3Ahover%7Bbackground%2Dcolor%3A%23ffe8a1%7D%2Etable%2Dhover%20%2Etable%2Dwarning%3Ahover%3Etd%2C%2Etable%2Dhover%20%2Etable%2Dwarning%3Ahover%3Eth%7Bbackground%2Dcolor%3A%23ffe8a1%7D%2Etable%2Ddanger%2C%2Etable%2Ddanger%3Etd%2C%2Etable%2Ddanger%3Eth%7Bbackground%2Dcolor%3A%23f5c6cb%7D%2Etable%2Dhover%20%2Etable%2Ddanger%3Ahover%7Bbackground%2Dcolor%3A%23f1b0b7%7D%2Etable%2Dhover%20%2Etable%2Ddanger%3Ahover%3Etd%2C%2Etable%2Dhover%20%2Etable%2Ddanger%3Ahover%3Eth%7Bbackground%2Dcolor%3A%23f1b0b7%7D%2Etable%2Dlight%2C%2Etable%2Dlight%3Etd%2C%2Etable%2Dlight%3Eth%7Bbackground%2Dcolor%3A%23fdfdfe%7D%2Etable%2Dhover%20%2Etable%2Dlight%3Ahover%7Bbackground%2Dcolor%3A%23ececf6%7D%2Etable%2Dhover%20%2Etable%2Dlight%3Ahover%3Etd%2C%2Etable%2Dhover%20%2Etable%2Dlight%3Ahover%3Eth%7Bbackground%2Dcolor%3A%23ececf6%7D%2Etable%2Ddark%2C%2Etable%2Ddark%3Etd%2C%2Etable%2Ddark%3Eth%7Bbackground%2Dcolor%3A%23c6c8ca%7D%2Etable%2Dhover%20%2Etable%2Ddark%3Ahover%7Bbackground%2Dcolor%3A%23b9bbbe%7D%2Etable%2Dhover%20%2Etable%2Ddark%3Ahover%3Etd%2C%2Etable%2Dhover%20%2Etable%2Ddark%3Ahover%3Eth%7Bbackground%2Dcolor%3A%23b9bbbe%7D%2Etable%2Dactive%2C%2Etable%2Dactive%3Etd%2C%2Etable%2Dactive%3Eth%7Bbackground%2Dcolor%3Argba%280%2C0%2C0%2C%2E075%29%7D%2Etable%2Dhover%20%2Etable%2Dactive%3Ahover%7Bbackground%2Dcolor%3Argba%280%2C0%2C0%2C%2E075%29%7D%2Etable%2Dhover%20%2Etable%2Dactive%3Ahover%3Etd%2C%2Etable%2Dhover%20%2Etable%2Dactive%3Ahover%3Eth%7Bbackground%2Dcolor%3Argba%280%2C0%2C0%2C%2E075%29%7D%2Etable%20%2Ethead%2Ddark%20th%7Bcolor%3A%23fff%3Bbackground%2Dcolor%3A%23212529%3Bborder%2Dcolor%3A%2332383e%7D%2Etable%20%2Ethead%2Dlight%20th%7Bcolor%3A%23495057%3Bbackground%2Dcolor%3A%23e9ecef%3Bborder%2Dcolor%3A%23dee2e6%7D%2Etable%2Ddark%7Bcolor%3A%23fff%3Bbackground%2Dcolor%3A%23212529%7D%2Etable%2Ddark%20td%2C%2Etable%2Ddark%20th%2C%2Etable%2Ddark%20thead%20th%7Bborder%2Dcolor%3A%2332383e%7D%2Etable%2Ddark%2Etable%2Dbordered%7Bborder%3A0%7D%2Etable%2Ddark%2Etable%2Dstriped%20tbody%20tr%3Anth%2Dof%2Dtype%28odd%29%7Bbackground%2Dcolor%3Argba%28255%2C255%2C255%2C%2E05%29%7D%2Etable%2Ddark%2Etable%2Dhover%20tbody%20tr%3Ahover%7Bbackground%2Dcolor%3Argba%28255%2C255%2C255%2C%2E075%29%7D%40media%20%28max%2Dwidth%3A575%2E98px%29%7B%2Etable%2Dresponsive%2Dsm%7Bdisplay%3Ablock%3Bwidth%3A100%25%3Boverflow%2Dx%3Aauto%3B%2Dwebkit%2Doverflow%2Dscrolling%3Atouch%3B%2Dms%2Doverflow%2Dstyle%3A%2Dms%2Dautohiding%2Dscrollbar%7D%2Etable%2Dresponsive%2Dsm%3E%2Etable%2Dbordered%7Bborder%3A0%7D%7D%40media%20%28max%2Dwidth%3A767%2E98px%29%7B%2Etable%2Dresponsive%2Dmd%7Bdisplay%3Ablock%3Bwidth%3A100%25%3Boverflow%2Dx%3Aauto%3B%2Dwebkit%2Doverflow%2Dscrolling%3Atouch%3B%2Dms%2Doverflow%2Dstyle%3A%2Dms%2Dautohiding%2Dscrollbar%7D%2Etable%2Dresponsive%2Dmd%3E%2Etable%2Dbordered%7Bborder%3A0%7D%7D%40media%20%28max%2Dwidth%3A991%2E98px%29%7B%2Etable%2Dresponsive%2Dlg%7Bdisplay%3Ablock%3Bwidth%3A100%25%3Boverflow%2Dx%3Aauto%3B%2Dwebkit%2Doverflow%2Dscrolling%3Atouch%3B%2Dms%2Doverflow%2Dstyle%3A%2Dms%2Dautohiding%2Dscrollbar%7D%2Etable%2Dresponsive%2Dlg%3E%2Etable%2Dbordered%7Bborder%3A0%7D%7D%40media%20%28max%2Dwidth%3A1199%2E98px%29%7B%2Etable%2Dresponsive%2Dxl%7Bdisplay%3Ablock%3Bwidth%3A100%25%3Boverflow%2Dx%3Aauto%3B%2Dwebkit%2Doverflow%2Dscrolling%3Atouch%3B%2Dms%2Doverflow%2Dstyle%3A%2Dms%2Dautohiding%2Dscrollbar%7D%2Etable%2Dresponsive%2Dxl%3E%2Etable%2Dbordered%7Bborder%3A0%7D%7D%2Etable%2Dresponsive%7Bdisplay%3Ablock%3Bwidth%3A100%25%3Boverflow%2Dx%3Aauto%3B%2Dwebkit%2Doverflow%2Dscrolling%3Atouch%3B%2Dms%2Doverflow%2Dstyle%3A%2Dms%2Dautohiding%2Dscrollbar%7D%2Etable%2Dresponsive%3E%2Etable%2Dbordered%7Bborder%3A0%7D%2Eform%2Dcontrol%7Bdisplay%3Ablock%3Bwidth%3A100%25%3Bpadding%3A%2E375rem%20%2E75rem%3Bfont%2Dsize%3A1rem%3Bline%2Dheight%3A1%2E5%3Bcolor%3A%23495057%3Bbackground%2Dcolor%3A%23fff%3Bbackground%2Dclip%3Apadding%2Dbox%3Bborder%3A1px%20solid%20%23ced4da%3Bborder%2Dradius%3A%2E25rem%3Btransition%3Aborder%2Dcolor%20%2E15s%20ease%2Din%2Dout%2Cbox%2Dshadow%20%2E15s%20ease%2Din%2Dout%7D%2Eform%2Dcontrol%3A%3A%2Dms%2Dexpand%7Bbackground%2Dcolor%3Atransparent%3Bborder%3A0%7D%2Eform%2Dcontrol%3Afocus%7Bcolor%3A%23495057%3Bbackground%2Dcolor%3A%23fff%3Bborder%2Dcolor%3A%2380bdff%3Boutline%3A0%3Bbox%2Dshadow%3A0%200%200%20%2E2rem%20rgba%280%2C123%2C255%2C%2E25%29%7D%2Eform%2Dcontrol%3A%3A%2Dwebkit%2Dinput%2Dplaceholder%7Bcolor%3A%236c757d%3Bopacity%3A1%7D%2Eform%2Dcontrol%3A%3A%2Dmoz%2Dplaceholder%7Bcolor%3A%236c757d%3Bopacity%3A1%7D%2Eform%2Dcontrol%3A%2Dms%2Dinput%2Dplaceholder%7Bcolor%3A%236c757d%3Bopacity%3A1%7D%2Eform%2Dcontrol%3A%3A%2Dms%2Dinput%2Dplaceholder%7Bcolor%3A%236c757d%3Bopacity%3A1%7D%2Eform%2Dcontrol%3A%3Aplaceholder%7Bcolor%3A%236c757d%3Bopacity%3A1%7D%2Eform%2Dcontrol%3Adisabled%2C%2Eform%2Dcontrol%5Breadonly%5D%7Bbackground%2Dcolor%3A%23e9ecef%3Bopacity%3A1%7Dselect%2Eform%2Dcontrol%3Anot%28%5Bsize%5D%29%3Anot%28%5Bmultiple%5D%29%7Bheight%3Acalc%282%2E25rem%20%2B%202px%29%7Dselect%2Eform%2Dcontrol%3Afocus%3A%3A%2Dms%2Dvalue%7Bcolor%3A%23495057%3Bbackground%2Dcolor%3A%23fff%7D%2Eform%2Dcontrol%2Dfile%2C%2Eform%2Dcontrol%2Drange%7Bdisplay%3Ablock%3Bwidth%3A100%25%7D%2Ecol%2Dform%2Dlabel%7Bpadding%2Dtop%3Acalc%28%2E375rem%20%2B%201px%29%3Bpadding%2Dbottom%3Acalc%28%2E375rem%20%2B%201px%29%3Bmargin%2Dbottom%3A0%3Bfont%2Dsize%3Ainherit%3Bline%2Dheight%3A1%2E5%7D%2Ecol%2Dform%2Dlabel%2Dlg%7Bpadding%2Dtop%3Acalc%28%2E5rem%20%2B%201px%29%3Bpadding%2Dbottom%3Acalc%28%2E5rem%20%2B%201px%29%3Bfont%2Dsize%3A1%2E25rem%3Bline%2Dheight%3A1%2E5%7D%2Ecol%2Dform%2Dlabel%2Dsm%7Bpadding%2Dtop%3Acalc%28%2E25rem%20%2B%201px%29%3Bpadding%2Dbottom%3Acalc%28%2E25rem%20%2B%201px%29%3Bfont%2Dsize%3A%2E875rem%3Bline%2Dheight%3A1%2E5%7D%2Eform%2Dcontrol%2Dplaintext%7Bdisplay%3Ablock%3Bwidth%3A100%25%3Bpadding%2Dtop%3A%2E375rem%3Bpadding%2Dbottom%3A%2E375rem%3Bmargin%2Dbottom%3A0%3Bline%2Dheight%3A1%2E5%3Bbackground%2Dcolor%3Atransparent%3Bborder%3Asolid%20transparent%3Bborder%2Dwidth%3A1px%200%7D%2Eform%2Dcontrol%2Dplaintext%2Eform%2Dcontrol%2Dlg%2C%2Eform%2Dcontrol%2Dplaintext%2Eform%2Dcontrol%2Dsm%2C%2Einput%2Dgroup%2Dlg%3E%2Eform%2Dcontrol%2Dplaintext%2Eform%2Dcontrol%2C%2Einput%2Dgroup%2Dlg%3E%2Einput%2Dgroup%2Dappend%3E%2Eform%2Dcontrol%2Dplaintext%2Ebtn%2C%2Einput%2Dgroup%2Dlg%3E%2Einput%2Dgroup%2Dappend%3E%2Eform%2Dcontrol%2Dplaintext%2Einput%2Dgroup%2Dtext%2C%2Einput%2Dgroup%2Dlg%3E%2Einput%2Dgroup%2Dprepend%3E%2Eform%2Dcontrol%2Dplaintext%2Ebtn%2C%2Einput%2Dgroup%2Dlg%3E%2Einput%2Dgroup%2Dprepend%3E%2Eform%2Dcontrol%2Dplaintext%2Einput%2Dgroup%2Dtext%2C%2Einput%2Dgroup%2Dsm%3E%2Eform%2Dcontrol%2Dplaintext%2Eform%2Dcontrol%2C%2Einput%2Dgroup%2Dsm%3E%2Einput%2Dgroup%2Dappend%3E%2Eform%2Dcontrol%2Dplaintext%2Ebtn%2C%2Einput%2Dgroup%2Dsm%3E%2Einput%2Dgroup%2Dappend%3E%2Eform%2Dcontrol%2Dplaintext%2Einput%2Dgroup%2Dtext%2C%2Einput%2Dgroup%2Dsm%3E%2Einput%2Dgroup%2Dprepend%3E%2Eform%2Dcontrol%2Dplaintext%2Ebtn%2C%2Einput%2Dgroup%2Dsm%3E%2Einput%2Dgroup%2Dprepend%3E%2Eform%2Dcontrol%2Dplaintext%2Einput%2Dgroup%2Dtext%7Bpadding%2Dright%3A0%3Bpadding%2Dleft%3A0%7D%2Eform%2Dcontrol%2Dsm%2C%2Einput%2Dgroup%2Dsm%3E%2Eform%2Dcontrol%2C%2Einput%2Dgroup%2Dsm%3E%2Einput%2Dgroup%2Dappend%3E%2Ebtn%2C%2Einput%2Dgroup%2Dsm%3E%2Einput%2Dgroup%2Dappend%3E%2Einput%2Dgroup%2Dtext%2C%2Einput%2Dgroup%2Dsm%3E%2Einput%2Dgroup%2Dprepend%3E%2Ebtn%2C%2Einput%2Dgroup%2Dsm%3E%2Einput%2Dgroup%2Dprepend%3E%2Einput%2Dgroup%2Dtext%7Bpadding%3A%2E25rem%20%2E5rem%3Bfont%2Dsize%3A%2E875rem%3Bline%2Dheight%3A1%2E5%3Bborder%2Dradius%3A%2E2rem%7D%2Einput%2Dgroup%2Dsm%3E%2Einput%2Dgroup%2Dappend%3Eselect%2Ebtn%3Anot%28%5Bsize%5D%29%3Anot%28%5Bmultiple%5D%29%2C%2Einput%2Dgroup%2Dsm%3E%2Einput%2Dgroup%2Dappend%3Eselect%2Einput%2Dgroup%2Dtext%3Anot%28%5Bsize%5D%29%3Anot%28%5Bmultiple%5D%29%2C%2Einput%2Dgroup%2Dsm%3E%2Einput%2Dgroup%2Dprepend%3Eselect%2Ebtn%3Anot%28%5Bsize%5D%29%3Anot%28%5Bmultiple%5D%29%2C%2Einput%2Dgroup%2Dsm%3E%2Einput%2Dgroup%2Dprepend%3Eselect%2Einput%2Dgroup%2Dtext%3Anot%28%5Bsize%5D%29%3Anot%28%5Bmultiple%5D%29%2C%2Einput%2Dgroup%2Dsm%3Eselect%2Eform%2Dcontrol%3Anot%28%5Bsize%5D%29%3Anot%28%5Bmultiple%5D%29%2Cselect%2Eform%2Dcontrol%2Dsm%3Anot%28%5Bsize%5D%29%3Anot%28%5Bmultiple%5D%29%7Bheight%3Acalc%281%2E8125rem%20%2B%202px%29%7D%2Eform%2Dcontrol%2Dlg%2C%2Einput%2Dgroup%2Dlg%3E%2Eform%2Dcontrol%2C%2Einput%2Dgroup%2Dlg%3E%2Einput%2Dgroup%2Dappend%3E%2Ebtn%2C%2Einput%2Dgroup%2Dlg%3E%2Einput%2Dgroup%2Dappend%3E%2Einput%2Dgroup%2Dtext%2C%2Einput%2Dgroup%2Dlg%3E%2Einput%2Dgroup%2Dprepend%3E%2Ebtn%2C%2Einput%2Dgroup%2Dlg%3E%2Einput%2Dgroup%2Dprepend%3E%2Einput%2Dgroup%2Dtext%7Bpadding%3A%2E5rem%201rem%3Bfont%2Dsize%3A1%2E25rem%3Bline%2Dheight%3A1%2E5%3Bborder%2Dradius%3A%2E3rem%7D%2Einput%2Dgroup%2Dlg%3E%2Einput%2Dgroup%2Dappend%3Eselect%2Ebtn%3Anot%28%5Bsize%5D%29%3Anot%28%5Bmultiple%5D%29%2C%2Einput%2Dgroup%2Dlg%3E%2Einput%2Dgroup%2Dappend%3Eselect%2Einput%2Dgroup%2Dtext%3Anot%28%5Bsize%5D%29%3Anot%28%5Bmultiple%5D%29%2C%2Einput%2Dgroup%2Dlg%3E%2Einput%2Dgroup%2Dprepend%3Eselect%2Ebtn%3Anot%28%5Bsize%5D%29%3Anot%28%5Bmultiple%5D%29%2C%2Einput%2Dgroup%2Dlg%3E%2Einput%2Dgroup%2Dprepend%3Eselect%2Einput%2Dgroup%2Dtext%3Anot%28%5Bsize%5D%29%3Anot%28%5Bmultiple%5D%29%2C%2Einput%2Dgroup%2Dlg%3Eselect%2Eform%2Dcontrol%3Anot%28%5Bsize%5D%29%3Anot%28%5Bmultiple%5D%29%2Cselect%2Eform%2Dcontrol%2Dlg%3Anot%28%5Bsize%5D%29%3Anot%28%5Bmultiple%5D%29%7Bheight%3Acalc%282%2E875rem%20%2B%202px%29%7D%2Eform%2Dgroup%7Bmargin%2Dbottom%3A1rem%7D%2Eform%2Dtext%7Bdisplay%3Ablock%3Bmargin%2Dtop%3A%2E25rem%7D%2Eform%2Drow%7Bdisplay%3A%2Dwebkit%2Dbox%3Bdisplay%3A%2Dms%2Dflexbox%3Bdisplay%3Aflex%3B%2Dms%2Dflex%2Dwrap%3Awrap%3Bflex%2Dwrap%3Awrap%3Bmargin%2Dright%3A%2D5px%3Bmargin%2Dleft%3A%2D5px%7D%2Eform%2Drow%3E%2Ecol%2C%2Eform%2Drow%3E%5Bclass%2A%3Dcol%2D%5D%7Bpadding%2Dright%3A5px%3Bpadding%2Dleft%3A5px%7D%2Eform%2Dcheck%7Bposition%3Arelative%3Bdisplay%3Ablock%3Bpadding%2Dleft%3A1%2E25rem%7D%2Eform%2Dcheck%2Dinput%7Bposition%3Aabsolute%3Bmargin%2Dtop%3A%2E3rem%3Bmargin%2Dleft%3A%2D1%2E25rem%7D%2Eform%2Dcheck%2Dinput%3Adisabled%7E%2Eform%2Dcheck%2Dlabel%7Bcolor%3A%236c757d%7D%2Eform%2Dcheck%2Dlabel%7Bmargin%2Dbottom%3A0%7D%2Eform%2Dcheck%2Dinline%7Bdisplay%3A%2Dwebkit%2Dinline%2Dbox%3Bdisplay%3A%2Dms%2Dinline%2Dflexbox%3Bdisplay%3Ainline%2Dflex%3B%2Dwebkit%2Dbox%2Dalign%3Acenter%3B%2Dms%2Dflex%2Dalign%3Acenter%3Balign%2Ditems%3Acenter%3Bpadding%2Dleft%3A0%3Bmargin%2Dright%3A%2E75rem%7D%2Eform%2Dcheck%2Dinline%20%2Eform%2Dcheck%2Dinput%7Bposition%3Astatic%3Bmargin%2Dtop%3A0%3Bmargin%2Dright%3A%2E3125rem%3Bmargin%2Dleft%3A0%7D%2Evalid%2Dfeedback%7Bdisplay%3Anone%3Bwidth%3A100%25%3Bmargin%2Dtop%3A%2E25rem%3Bfont%2Dsize%3A80%25%3Bcolor%3A%2328a745%7D%2Evalid%2Dtooltip%7Bposition%3Aabsolute%3Btop%3A100%25%3Bz%2Dindex%3A5%3Bdisplay%3Anone%3Bmax%2Dwidth%3A100%25%3Bpadding%3A%2E5rem%3Bmargin%2Dtop%3A%2E1rem%3Bfont%2Dsize%3A%2E875rem%3Bline%2Dheight%3A1%3Bcolor%3A%23fff%3Bbackground%2Dcolor%3Argba%2840%2C167%2C69%2C%2E8%29%3Bborder%2Dradius%3A%2E2rem%7D%2Ecustom%2Dselect%2Eis%2Dvalid%2C%2Eform%2Dcontrol%2Eis%2Dvalid%2C%2Ewas%2Dvalidated%20%2Ecustom%2Dselect%3Avalid%2C%2Ewas%2Dvalidated%20%2Eform%2Dcontrol%3Avalid%7Bborder%2Dcolor%3A%2328a745%7D%2Ecustom%2Dselect%2Eis%2Dvalid%3Afocus%2C%2Eform%2Dcontrol%2Eis%2Dvalid%3Afocus%2C%2Ewas%2Dvalidated%20%2Ecustom%2Dselect%3Avalid%3Afocus%2C%2Ewas%2Dvalidated%20%2Eform%2Dcontrol%3Avalid%3Afocus%7Bborder%2Dcolor%3A%2328a745%3Bbox%2Dshadow%3A0%200%200%20%2E2rem%20rgba%2840%2C167%2C69%2C%2E25%29%7D%2Ecustom%2Dselect%2Eis%2Dvalid%7E%2Evalid%2Dfeedback%2C%2Ecustom%2Dselect%2Eis%2Dvalid%7E%2Evalid%2Dtooltip%2C%2Eform%2Dcontrol%2Eis%2Dvalid%7E%2Evalid%2Dfeedback%2C%2Eform%2Dcontrol%2Eis%2Dvalid%7E%2Evalid%2Dtooltip%2C%2Ewas%2Dvalidated%20%2Ecustom%2Dselect%3Avalid%7E%2Evalid%2Dfeedback%2C%2Ewas%2Dvalidated%20%2Ecustom%2Dselect%3Avalid%7E%2Evalid%2Dtooltip%2C%2Ewas%2Dvalidated%20%2Eform%2Dcontrol%3Avalid%7E%2Evalid%2Dfeedback%2C%2Ewas%2Dvalidated%20%2Eform%2Dcontrol%3Avalid%7E%2Evalid%2Dtooltip%7Bdisplay%3Ablock%7D%2Eform%2Dcheck%2Dinput%2Eis%2Dvalid%7E%2Eform%2Dcheck%2Dlabel%2C%2Ewas%2Dvalidated%20%2Eform%2Dcheck%2Dinput%3Avalid%7E%2Eform%2Dcheck%2Dlabel%7Bcolor%3A%2328a745%7D%2Eform%2Dcheck%2Dinput%2Eis%2Dvalid%7E%2Evalid%2Dfeedback%2C%2Eform%2Dcheck%2Dinput%2Eis%2Dvalid%7E%2Evalid%2Dtooltip%2C%2Ewas%2Dvalidated%20%2Eform%2Dcheck%2Dinput%3Avalid%7E%2Evalid%2Dfeedback%2C%2Ewas%2Dvalidated%20%2Eform%2Dcheck%2Dinput%3Avalid%7E%2Evalid%2Dtooltip%7Bdisplay%3Ablock%7D%2Ecustom%2Dcontrol%2Dinput%2Eis%2Dvalid%7E%2Ecustom%2Dcontrol%2Dlabel%2C%2Ewas%2Dvalidated%20%2Ecustom%2Dcontrol%2Dinput%3Avalid%7E%2Ecustom%2Dcontrol%2Dlabel%7Bcolor%3A%2328a745%7D%2Ecustom%2Dcontrol%2Dinput%2Eis%2Dvalid%7E%2Ecustom%2Dcontrol%2Dlabel%3A%3Abefore%2C%2Ewas%2Dvalidated%20%2Ecustom%2Dcontrol%2Dinput%3Avalid%7E%2Ecustom%2Dcontrol%2Dlabel%3A%3Abefore%7Bbackground%2Dcolor%3A%2371dd8a%7D%2Ecustom%2Dcontrol%2Dinput%2Eis%2Dvalid%7E%2Evalid%2Dfeedback%2C%2Ecustom%2Dcontrol%2Dinput%2Eis%2Dvalid%7E%2Evalid%2Dtooltip%2C%2Ewas%2Dvalidated%20%2Ecustom%2Dcontrol%2Dinput%3Avalid%7E%2Evalid%2Dfeedback%2C%2Ewas%2Dvalidated%20%2Ecustom%2Dcontrol%2Dinput%3Avalid%7E%2Evalid%2Dtooltip%7Bdisplay%3Ablock%7D%2Ecustom%2Dcontrol%2Dinput%2Eis%2Dvalid%3Achecked%7E%2Ecustom%2Dcontrol%2Dlabel%3A%3Abefore%2C%2Ewas%2Dvalidated%20%2Ecustom%2Dcontrol%2Dinput%3Avalid%3Achecked%7E%2Ecustom%2Dcontrol%2Dlabel%3A%3Abefore%7Bbackground%2Dcolor%3A%2334ce57%7D%2Ecustom%2Dcontrol%2Dinput%2Eis%2Dvalid%3Afocus%7E%2Ecustom%2Dcontrol%2Dlabel%3A%3Abefore%2C%2Ewas%2Dvalidated%20%2Ecustom%2Dcontrol%2Dinput%3Avalid%3Afocus%7E%2Ecustom%2Dcontrol%2Dlabel%3A%3Abefore%7Bbox%2Dshadow%3A0%200%200%201px%20%23fff%2C0%200%200%20%2E2rem%20rgba%2840%2C167%2C69%2C%2E25%29%7D%2Ecustom%2Dfile%2Dinput%2Eis%2Dvalid%7E%2Ecustom%2Dfile%2Dlabel%2C%2Ewas%2Dvalidated%20%2Ecustom%2Dfile%2Dinput%3Avalid%7E%2Ecustom%2Dfile%2Dlabel%7Bborder%2Dcolor%3A%2328a745%7D%2Ecustom%2Dfile%2Dinput%2Eis%2Dvalid%7E%2Ecustom%2Dfile%2Dlabel%3A%3Abefore%2C%2Ewas%2Dvalidated%20%2Ecustom%2Dfile%2Dinput%3Avalid%7E%2Ecustom%2Dfile%2Dlabel%3A%3Abefore%7Bborder%2Dcolor%3Ainherit%7D%2Ecustom%2Dfile%2Dinput%2Eis%2Dvalid%7E%2Evalid%2Dfeedback%2C%2Ecustom%2Dfile%2Dinput%2Eis%2Dvalid%7E%2Evalid%2Dtooltip%2C%2Ewas%2Dvalidated%20%2Ecustom%2Dfile%2Dinput%3Avalid%7E%2Evalid%2Dfeedback%2C%2Ewas%2Dvalidated%20%2Ecustom%2Dfile%2Dinput%3Avalid%7E%2Evalid%2Dtooltip%7Bdisplay%3Ablock%7D%2Ecustom%2Dfile%2Dinput%2Eis%2Dvalid%3Afocus%7E%2Ecustom%2Dfile%2Dlabel%2C%2Ewas%2Dvalidated%20%2Ecustom%2Dfile%2Dinput%3Avalid%3Afocus%7E%2Ecustom%2Dfile%2Dlabel%7Bbox%2Dshadow%3A0%200%200%20%2E2rem%20rgba%2840%2C167%2C69%2C%2E25%29%7D%2Einvalid%2Dfeedback%7Bdisplay%3Anone%3Bwidth%3A100%25%3Bmargin%2Dtop%3A%2E25rem%3Bfont%2Dsize%3A80%25%3Bcolor%3A%23dc3545%7D%2Einvalid%2Dtooltip%7Bposition%3Aabsolute%3Btop%3A100%25%3Bz%2Dindex%3A5%3Bdisplay%3Anone%3Bmax%2Dwidth%3A100%25%3Bpadding%3A%2E5rem%3Bmargin%2Dtop%3A%2E1rem%3Bfont%2Dsize%3A%2E875rem%3Bline%2Dheight%3A1%3Bcolor%3A%23fff%3Bbackground%2Dcolor%3Argba%28220%2C53%2C69%2C%2E8%29%3Bborder%2Dradius%3A%2E2rem%7D%2Ecustom%2Dselect%2Eis%2Dinvalid%2C%2Eform%2Dcontrol%2Eis%2Dinvalid%2C%2Ewas%2Dvalidated%20%2Ecustom%2Dselect%3Ainvalid%2C%2Ewas%2Dvalidated%20%2Eform%2Dcontrol%3Ainvalid%7Bborder%2Dcolor%3A%23dc3545%7D%2Ecustom%2Dselect%2Eis%2Dinvalid%3Afocus%2C%2Eform%2Dcontrol%2Eis%2Dinvalid%3Afocus%2C%2Ewas%2Dvalidated%20%2Ecustom%2Dselect%3Ainvalid%3Afocus%2C%2Ewas%2Dvalidated%20%2Eform%2Dcontrol%3Ainvalid%3Afocus%7Bborder%2Dcolor%3A%23dc3545%3Bbox%2Dshadow%3A0%200%200%20%2E2rem%20rgba%28220%2C53%2C69%2C%2E25%29%7D%2Ecustom%2Dselect%2Eis%2Dinvalid%7E%2Einvalid%2Dfeedback%2C%2Ecustom%2Dselect%2Eis%2Dinvalid%7E%2Einvalid%2Dtooltip%2C%2Eform%2Dcontrol%2Eis%2Dinvalid%7E%2Einvalid%2Dfeedback%2C%2Eform%2Dcontrol%2Eis%2Dinvalid%7E%2Einvalid%2Dtooltip%2C%2Ewas%2Dvalidated%20%2Ecustom%2Dselect%3Ainvalid%7E%2Einvalid%2Dfeedback%2C%2Ewas%2Dvalidated%20%2Ecustom%2Dselect%3Ainvalid%7E%2Einvalid%2Dtooltip%2C%2Ewas%2Dvalidated%20%2Eform%2Dcontrol%3Ainvalid%7E%2Einvalid%2Dfeedback%2C%2Ewas%2Dvalidated%20%2Eform%2Dcontrol%3Ainvalid%7E%2Einvalid%2Dtooltip%7Bdisplay%3Ablock%7D%2Eform%2Dcheck%2Dinput%2Eis%2Dinvalid%7E%2Eform%2Dcheck%2Dlabel%2C%2Ewas%2Dvalidated%20%2Eform%2Dcheck%2Dinput%3Ainvalid%7E%2Eform%2Dcheck%2Dlabel%7Bcolor%3A%23dc3545%7D%2Eform%2Dcheck%2Dinput%2Eis%2Dinvalid%7E%2Einvalid%2Dfeedback%2C%2Eform%2Dcheck%2Dinput%2Eis%2Dinvalid%7E%2Einvalid%2Dtooltip%2C%2Ewas%2Dvalidated%20%2Eform%2Dcheck%2Dinput%3Ainvalid%7E%2Einvalid%2Dfeedback%2C%2Ewas%2Dvalidated%20%2Eform%2Dcheck%2Dinput%3Ainvalid%7E%2Einvalid%2Dtooltip%7Bdisplay%3Ablock%7D%2Ecustom%2Dcontrol%2Dinput%2Eis%2Dinvalid%7E%2Ecustom%2Dcontrol%2Dlabel%2C%2Ewas%2Dvalidated%20%2Ecustom%2Dcontrol%2Dinput%3Ainvalid%7E%2Ecustom%2Dcontrol%2Dlabel%7Bcolor%3A%23dc3545%7D%2Ecustom%2Dcontrol%2Dinput%2Eis%2Dinvalid%7E%2Ecustom%2Dcontrol%2Dlabel%3A%3Abefore%2C%2Ewas%2Dvalidated%20%2Ecustom%2Dcontrol%2Dinput%3Ainvalid%7E%2Ecustom%2Dcontrol%2Dlabel%3A%3Abefore%7Bbackground%2Dcolor%3A%23efa2a9%7D%2Ecustom%2Dcontrol%2Dinput%2Eis%2Dinvalid%7E%2Einvalid%2Dfeedback%2C%2Ecustom%2Dcontrol%2Dinput%2Eis%2Dinvalid%7E%2Einvalid%2Dtooltip%2C%2Ewas%2Dvalidated%20%2Ecustom%2Dcontrol%2Dinput%3Ainvalid%7E%2Einvalid%2Dfeedback%2C%2Ewas%2Dvalidated%20%2Ecustom%2Dcontrol%2Dinput%3Ainvalid%7E%2Einvalid%2Dtooltip%7Bdisplay%3Ablock%7D%2Ecustom%2Dcontrol%2Dinput%2Eis%2Dinvalid%3Achecked%7E%2Ecustom%2Dcontrol%2Dlabel%3A%3Abefore%2C%2Ewas%2Dvalidated%20%2Ecustom%2Dcontrol%2Dinput%3Ainvalid%3Achecked%7E%2Ecustom%2Dcontrol%2Dlabel%3A%3Abefore%7Bbackground%2Dcolor%3A%23e4606d%7D%2Ecustom%2Dcontrol%2Dinput%2Eis%2Dinvalid%3Afocus%7E%2Ecustom%2Dcontrol%2Dlabel%3A%3Abefore%2C%2Ewas%2Dvalidated%20%2Ecustom%2Dcontrol%2Dinput%3Ainvalid%3Afocus%7E%2Ecustom%2Dcontrol%2Dlabel%3A%3Abefore%7Bbox%2Dshadow%3A0%200%200%201px%20%23fff%2C0%200%200%20%2E2rem%20rgba%28220%2C53%2C69%2C%2E25%29%7D%2Ecustom%2Dfile%2Dinput%2Eis%2Dinvalid%7E%2Ecustom%2Dfile%2Dlabel%2C%2Ewas%2Dvalidated%20%2Ecustom%2Dfile%2Dinput%3Ainvalid%7E%2Ecustom%2Dfile%2Dlabel%7Bborder%2Dcolor%3A%23dc3545%7D%2Ecustom%2Dfile%2Dinput%2Eis%2Dinvalid%7E%2Ecustom%2Dfile%2Dlabel%3A%3Abefore%2C%2Ewas%2Dvalidated%20%2Ecustom%2Dfile%2Dinput%3Ainvalid%7E%2Ecustom%2Dfile%2Dlabel%3A%3Abefore%7Bborder%2Dcolor%3Ainherit%7D%2Ecustom%2Dfile%2Dinput%2Eis%2Dinvalid%7E%2Einvalid%2Dfeedback%2C%2Ecustom%2Dfile%2Dinput%2Eis%2Dinvalid%7E%2Einvalid%2Dtooltip%2C%2Ewas%2Dvalidated%20%2Ecustom%2Dfile%2Dinput%3Ainvalid%7E%2Einvalid%2Dfeedback%2C%2Ewas%2Dvalidated%20%2Ecustom%2Dfile%2Dinput%3Ainvalid%7E%2Einvalid%2Dtooltip%7Bdisplay%3Ablock%7D%2Ecustom%2Dfile%2Dinput%2Eis%2Dinvalid%3Afocus%7E%2Ecustom%2Dfile%2Dlabel%2C%2Ewas%2Dvalidated%20%2Ecustom%2Dfile%2Dinput%3Ainvalid%3Afocus%7E%2Ecustom%2Dfile%2Dlabel%7Bbox%2Dshadow%3A0%200%200%20%2E2rem%20rgba%28220%2C53%2C69%2C%2E25%29%7D%2Eform%2Dinline%7Bdisplay%3A%2Dwebkit%2Dbox%3Bdisplay%3A%2Dms%2Dflexbox%3Bdisplay%3Aflex%3B%2Dwebkit%2Dbox%2Dorient%3Ahorizontal%3B%2Dwebkit%2Dbox%2Ddirection%3Anormal%3B%2Dms%2Dflex%2Dflow%3Arow%20wrap%3Bflex%2Dflow%3Arow%20wrap%3B%2Dwebkit%2Dbox%2Dalign%3Acenter%3B%2Dms%2Dflex%2Dalign%3Acenter%3Balign%2Ditems%3Acenter%7D%2Eform%2Dinline%20%2Eform%2Dcheck%7Bwidth%3A100%25%7D%40media%20%28min%2Dwidth%3A576px%29%7B%2Eform%2Dinline%20label%7Bdisplay%3A%2Dwebkit%2Dbox%3Bdisplay%3A%2Dms%2Dflexbox%3Bdisplay%3Aflex%3B%2Dwebkit%2Dbox%2Dalign%3Acenter%3B%2Dms%2Dflex%2Dalign%3Acenter%3Balign%2Ditems%3Acenter%3B%2Dwebkit%2Dbox%2Dpack%3Acenter%3B%2Dms%2Dflex%2Dpack%3Acenter%3Bjustify%2Dcontent%3Acenter%3Bmargin%2Dbottom%3A0%7D%2Eform%2Dinline%20%2Eform%2Dgroup%7Bdisplay%3A%2Dwebkit%2Dbox%3Bdisplay%3A%2Dms%2Dflexbox%3Bdisplay%3Aflex%3B%2Dwebkit%2Dbox%2Dflex%3A0%3B%2Dms%2Dflex%3A0%200%20auto%3Bflex%3A0%200%20auto%3B%2Dwebkit%2Dbox%2Dorient%3Ahorizontal%3B%2Dwebkit%2Dbox%2Ddirection%3Anormal%3B%2Dms%2Dflex%2Dflow%3Arow%20wrap%3Bflex%2Dflow%3Arow%20wrap%3B%2Dwebkit%2Dbox%2Dalign%3Acenter%3B%2Dms%2Dflex%2Dalign%3Acenter%3Balign%2Ditems%3Acenter%3Bmargin%2Dbottom%3A0%7D%2Eform%2Dinline%20%2Eform%2Dcontrol%7Bdisplay%3Ainline%2Dblock%3Bwidth%3Aauto%3Bvertical%2Dalign%3Amiddle%7D%2Eform%2Dinline%20%2Eform%2Dcontrol%2Dplaintext%7Bdisplay%3Ainline%2Dblock%7D%2Eform%2Dinline%20%2Einput%2Dgroup%7Bwidth%3Aauto%7D%2Eform%2Dinline%20%2Eform%2Dcheck%7Bdisplay%3A%2Dwebkit%2Dbox%3Bdisplay%3A%2Dms%2Dflexbox%3Bdisplay%3Aflex%3B%2Dwebkit%2Dbox%2Dalign%3Acenter%3B%2Dms%2Dflex%2Dalign%3Acenter%3Balign%2Ditems%3Acenter%3B%2Dwebkit%2Dbox%2Dpack%3Acenter%3B%2Dms%2Dflex%2Dpack%3Acenter%3Bjustify%2Dcontent%3Acenter%3Bwidth%3Aauto%3Bpadding%2Dleft%3A0%7D%2Eform%2Dinline%20%2Eform%2Dcheck%2Dinput%7Bposition%3Arelative%3Bmargin%2Dtop%3A0%3Bmargin%2Dright%3A%2E25rem%3Bmargin%2Dleft%3A0%7D%2Eform%2Dinline%20%2Ecustom%2Dcontrol%7B%2Dwebkit%2Dbox%2Dalign%3Acenter%3B%2Dms%2Dflex%2Dalign%3Acenter%3Balign%2Ditems%3Acenter%3B%2Dwebkit%2Dbox%2Dpack%3Acenter%3B%2Dms%2Dflex%2Dpack%3Acenter%3Bjustify%2Dcontent%3Acenter%7D%2Eform%2Dinline%20%2Ecustom%2Dcontrol%2Dlabel%7Bmargin%2Dbottom%3A0%7D%7D%2Ebtn%7Bdisplay%3Ainline%2Dblock%3Bfont%2Dweight%3A400%3Btext%2Dalign%3Acenter%3Bwhite%2Dspace%3Anowrap%3Bvertical%2Dalign%3Amiddle%3B%2Dwebkit%2Duser%2Dselect%3Anone%3B%2Dmoz%2Duser%2Dselect%3Anone%3B%2Dms%2Duser%2Dselect%3Anone%3Buser%2Dselect%3Anone%3Bborder%3A1px%20solid%20transparent%3Bpadding%3A%2E375rem%20%2E75rem%3Bfont%2Dsize%3A1rem%3Bline%2Dheight%3A1%2E5%3Bborder%2Dradius%3A%2E25rem%3Btransition%3Acolor%20%2E15s%20ease%2Din%2Dout%2Cbackground%2Dcolor%20%2E15s%20ease%2Din%2Dout%2Cborder%2Dcolor%20%2E15s%20ease%2Din%2Dout%2Cbox%2Dshadow%20%2E15s%20ease%2Din%2Dout%7D%2Ebtn%3Afocus%2C%2Ebtn%3Ahover%7Btext%2Ddecoration%3Anone%7D%2Ebtn%2Efocus%2C%2Ebtn%3Afocus%7Boutline%3A0%3Bbox%2Dshadow%3A0%200%200%20%2E2rem%20rgba%280%2C123%2C255%2C%2E25%29%7D%2Ebtn%2Edisabled%2C%2Ebtn%3Adisabled%7Bopacity%3A%2E65%7D%2Ebtn%3Anot%28%3Adisabled%29%3Anot%28%2Edisabled%29%7Bcursor%3Apointer%7D%2Ebtn%3Anot%28%3Adisabled%29%3Anot%28%2Edisabled%29%2Eactive%2C%2Ebtn%3Anot%28%3Adisabled%29%3Anot%28%2Edisabled%29%3Aactive%7Bbackground%2Dimage%3Anone%7Da%2Ebtn%2Edisabled%2Cfieldset%3Adisabled%20a%2Ebtn%7Bpointer%2Devents%3Anone%7D%2Ebtn%2Dprimary%7Bcolor%3A%23fff%3Bbackground%2Dcolor%3A%23007bff%3Bborder%2Dcolor%3A%23007bff%7D%2Ebtn%2Dprimary%3Ahover%7Bcolor%3A%23fff%3Bbackground%2Dcolor%3A%230069d9%3Bborder%2Dcolor%3A%230062cc%7D%2Ebtn%2Dprimary%2Efocus%2C%2Ebtn%2Dprimary%3Afocus%7Bbox%2Dshadow%3A0%200%200%20%2E2rem%20rgba%280%2C123%2C255%2C%2E5%29%7D%2Ebtn%2Dprimary%2Edisabled%2C%2Ebtn%2Dprimary%3Adisabled%7Bcolor%3A%23fff%3Bbackground%2Dcolor%3A%23007bff%3Bborder%2Dcolor%3A%23007bff%7D%2Ebtn%2Dprimary%3Anot%28%3Adisabled%29%3Anot%28%2Edisabled%29%2Eactive%2C%2Ebtn%2Dprimary%3Anot%28%3Adisabled%29%3Anot%28%2Edisabled%29%3Aactive%2C%2Eshow%3E%2Ebtn%2Dprimary%2Edropdown%2Dtoggle%7Bcolor%3A%23fff%3Bbackground%2Dcolor%3A%230062cc%3Bborder%2Dcolor%3A%23005cbf%7D%2Ebtn%2Dprimary%3Anot%28%3Adisabled%29%3Anot%28%2Edisabled%29%2Eactive%3Afocus%2C%2Ebtn%2Dprimary%3Anot%28%3Adisabled%29%3Anot%28%2Edisabled%29%3Aactive%3Afocus%2C%2Eshow%3E%2Ebtn%2Dprimary%2Edropdown%2Dtoggle%3Afocus%7Bbox%2Dshadow%3A0%200%200%20%2E2rem%20rgba%280%2C123%2C255%2C%2E5%29%7D%2Ebtn%2Dsecondary%7Bcolor%3A%23fff%3Bbackground%2Dcolor%3A%236c757d%3Bborder%2Dcolor%3A%236c757d%7D%2Ebtn%2Dsecondary%3Ahover%7Bcolor%3A%23fff%3Bbackground%2Dcolor%3A%235a6268%3Bborder%2Dcolor%3A%23545b62%7D%2Ebtn%2Dsecondary%2Efocus%2C%2Ebtn%2Dsecondary%3Afocus%7Bbox%2Dshadow%3A0%200%200%20%2E2rem%20rgba%28108%2C117%2C125%2C%2E5%29%7D%2Ebtn%2Dsecondary%2Edisabled%2C%2Ebtn%2Dsecondary%3Adisabled%7Bcolor%3A%23fff%3Bbackground%2Dcolor%3A%236c757d%3Bborder%2Dcolor%3A%236c757d%7D%2Ebtn%2Dsecondary%3Anot%28%3Adisabled%29%3Anot%28%2Edisabled%29%2Eactive%2C%2Ebtn%2Dsecondary%3Anot%28%3Adisabled%29%3Anot%28%2Edisabled%29%3Aactive%2C%2Eshow%3E%2Ebtn%2Dsecondary%2Edropdown%2Dtoggle%7Bcolor%3A%23fff%3Bbackground%2Dcolor%3A%23545b62%3Bborder%2Dcolor%3A%234e555b%7D%2Ebtn%2Dsecondary%3Anot%28%3Adisabled%29%3Anot%28%2Edisabled%29%2Eactive%3Afocus%2C%2Ebtn%2Dsecondary%3Anot%28%3Adisabled%29%3Anot%28%2Edisabled%29%3Aactive%3Afocus%2C%2Eshow%3E%2Ebtn%2Dsecondary%2Edropdown%2Dtoggle%3Afocus%7Bbox%2Dshadow%3A0%200%200%20%2E2rem%20rgba%28108%2C117%2C125%2C%2E5%29%7D%2Ebtn%2Dsuccess%7Bcolor%3A%23fff%3Bbackground%2Dcolor%3A%2328a745%3Bborder%2Dcolor%3A%2328a745%7D%2Ebtn%2Dsuccess%3Ahover%7Bcolor%3A%23fff%3Bbackground%2Dcolor%3A%23218838%3Bborder%2Dcolor%3A%231e7e34%7D%2Ebtn%2Dsuccess%2Efocus%2C%2Ebtn%2Dsuccess%3Afocus%7Bbox%2Dshadow%3A0%200%200%20%2E2rem%20rgba%2840%2C167%2C69%2C%2E5%29%7D%2Ebtn%2Dsuccess%2Edisabled%2C%2Ebtn%2Dsuccess%3Adisabled%7Bcolor%3A%23fff%3Bbackground%2Dcolor%3A%2328a745%3Bborder%2Dcolor%3A%2328a745%7D%2Ebtn%2Dsuccess%3Anot%28%3Adisabled%29%3Anot%28%2Edisabled%29%2Eactive%2C%2Ebtn%2Dsuccess%3Anot%28%3Adisabled%29%3Anot%28%2Edisabled%29%3Aactive%2C%2Eshow%3E%2Ebtn%2Dsuccess%2Edropdown%2Dtoggle%7Bcolor%3A%23fff%3Bbackground%2Dcolor%3A%231e7e34%3Bborder%2Dcolor%3A%231c7430%7D%2Ebtn%2Dsuccess%3Anot%28%3Adisabled%29%3Anot%28%2Edisabled%29%2Eactive%3Afocus%2C%2Ebtn%2Dsuccess%3Anot%28%3Adisabled%29%3Anot%28%2Edisabled%29%3Aactive%3Afocus%2C%2Eshow%3E%2Ebtn%2Dsuccess%2Edropdown%2Dtoggle%3Afocus%7Bbox%2Dshadow%3A0%200%200%20%2E2rem%20rgba%2840%2C167%2C69%2C%2E5%29%7D%2Ebtn%2Dinfo%7Bcolor%3A%23fff%3Bbackground%2Dcolor%3A%2317a2b8%3Bborder%2Dcolor%3A%2317a2b8%7D%2Ebtn%2Dinfo%3Ahover%7Bcolor%3A%23fff%3Bbackground%2Dcolor%3A%23138496%3Bborder%2Dcolor%3A%23117a8b%7D%2Ebtn%2Dinfo%2Efocus%2C%2Ebtn%2Dinfo%3Afocus%7Bbox%2Dshadow%3A0%200%200%20%2E2rem%20rgba%2823%2C162%2C184%2C%2E5%29%7D%2Ebtn%2Dinfo%2Edisabled%2C%2Ebtn%2Dinfo%3Adisabled%7Bcolor%3A%23fff%3Bbackground%2Dcolor%3A%2317a2b8%3Bborder%2Dcolor%3A%2317a2b8%7D%2Ebtn%2Dinfo%3Anot%28%3Adisabled%29%3Anot%28%2Edisabled%29%2Eactive%2C%2Ebtn%2Dinfo%3Anot%28%3Adisabled%29%3Anot%28%2Edisabled%29%3Aactive%2C%2Eshow%3E%2Ebtn%2Dinfo%2Edropdown%2Dtoggle%7Bcolor%3A%23fff%3Bbackground%2Dcolor%3A%23117a8b%3Bborder%2Dcolor%3A%2310707f%7D%2Ebtn%2Dinfo%3Anot%28%3Adisabled%29%3Anot%28%2Edisabled%29%2Eactive%3Afocus%2C%2Ebtn%2Dinfo%3Anot%28%3Adisabled%29%3Anot%28%2Edisabled%29%3Aactive%3Afocus%2C%2Eshow%3E%2Ebtn%2Dinfo%2Edropdown%2Dtoggle%3Afocus%7Bbox%2Dshadow%3A0%200%200%20%2E2rem%20rgba%2823%2C162%2C184%2C%2E5%29%7D%2Ebtn%2Dwarning%7Bcolor%3A%23212529%3Bbackground%2Dcolor%3A%23ffc107%3Bborder%2Dcolor%3A%23ffc107%7D%2Ebtn%2Dwarning%3Ahover%7Bcolor%3A%23212529%3Bbackground%2Dcolor%3A%23e0a800%3Bborder%2Dcolor%3A%23d39e00%7D%2Ebtn%2Dwarning%2Efocus%2C%2Ebtn%2Dwarning%3Afocus%7Bbox%2Dshadow%3A0%200%200%20%2E2rem%20rgba%28255%2C193%2C7%2C%2E5%29%7D%2Ebtn%2Dwarning%2Edisabled%2C%2Ebtn%2Dwarning%3Adisabled%7Bcolor%3A%23212529%3Bbackground%2Dcolor%3A%23ffc107%3Bborder%2Dcolor%3A%23ffc107%7D%2Ebtn%2Dwarning%3Anot%28%3Adisabled%29%3Anot%28%2Edisabled%29%2Eactive%2C%2Ebtn%2Dwarning%3Anot%28%3Adisabled%29%3Anot%28%2Edisabled%29%3Aactive%2C%2Eshow%3E%2Ebtn%2Dwarning%2Edropdown%2Dtoggle%7Bcolor%3A%23212529%3Bbackground%2Dcolor%3A%23d39e00%3Bborder%2Dcolor%3A%23c69500%7D%2Ebtn%2Dwarning%3Anot%28%3Adisabled%29%3Anot%28%2Edisabled%29%2Eactive%3Afocus%2C%2Ebtn%2Dwarning%3Anot%28%3Adisabled%29%3Anot%28%2Edisabled%29%3Aactive%3Afocus%2C%2Eshow%3E%2Ebtn%2Dwarning%2Edropdown%2Dtoggle%3Afocus%7Bbox%2Dshadow%3A0%200%200%20%2E2rem%20rgba%28255%2C193%2C7%2C%2E5%29%7D%2Ebtn%2Ddanger%7Bcolor%3A%23fff%3Bbackground%2Dcolor%3A%23dc3545%3Bborder%2Dcolor%3A%23dc3545%7D%2Ebtn%2Ddanger%3Ahover%7Bcolor%3A%23fff%3Bbackground%2Dcolor%3A%23c82333%3Bborder%2Dcolor%3A%23bd2130%7D%2Ebtn%2Ddanger%2Efocus%2C%2Ebtn%2Ddanger%3Afocus%7Bbox%2Dshadow%3A0%200%200%20%2E2rem%20rgba%28220%2C53%2C69%2C%2E5%29%7D%2Ebtn%2Ddanger%2Edisabled%2C%2Ebtn%2Ddanger%3Adisabled%7Bcolor%3A%23fff%3Bbackground%2Dcolor%3A%23dc3545%3Bborder%2Dcolor%3A%23dc3545%7D%2Ebtn%2Ddanger%3Anot%28%3Adisabled%29%3Anot%28%2Edisabled%29%2Eactive%2C%2Ebtn%2Ddanger%3Anot%28%3Adisabled%29%3Anot%28%2Edisabled%29%3Aactive%2C%2Eshow%3E%2Ebtn%2Ddanger%2Edropdown%2Dtoggle%7Bcolor%3A%23fff%3Bbackground%2Dcolor%3A%23bd2130%3Bborder%2Dcolor%3A%23b21f2d%7D%2Ebtn%2Ddanger%3Anot%28%3Adisabled%29%3Anot%28%2Edisabled%29%2Eactive%3Afocus%2C%2Ebtn%2Ddanger%3Anot%28%3Adisabled%29%3Anot%28%2Edisabled%29%3Aactive%3Afocus%2C%2Eshow%3E%2Ebtn%2Ddanger%2Edropdown%2Dtoggle%3Afocus%7Bbox%2Dshadow%3A0%200%200%20%2E2rem%20rgba%28220%2C53%2C69%2C%2E5%29%7D%2Ebtn%2Dlight%7Bcolor%3A%23212529%3Bbackground%2Dcolor%3A%23f8f9fa%3Bborder%2Dcolor%3A%23f8f9fa%7D%2Ebtn%2Dlight%3Ahover%7Bcolor%3A%23212529%3Bbackground%2Dcolor%3A%23e2e6ea%3Bborder%2Dcolor%3A%23dae0e5%7D%2Ebtn%2Dlight%2Efocus%2C%2Ebtn%2Dlight%3Afocus%7Bbox%2Dshadow%3A0%200%200%20%2E2rem%20rgba%28248%2C249%2C250%2C%2E5%29%7D%2Ebtn%2Dlight%2Edisabled%2C%2Ebtn%2Dlight%3Adisabled%7Bcolor%3A%23212529%3Bbackground%2Dcolor%3A%23f8f9fa%3Bborder%2Dcolor%3A%23f8f9fa%7D%2Ebtn%2Dlight%3Anot%28%3Adisabled%29%3Anot%28%2Edisabled%29%2Eactive%2C%2Ebtn%2Dlight%3Anot%28%3Adisabled%29%3Anot%28%2Edisabled%29%3Aactive%2C%2Eshow%3E%2Ebtn%2Dlight%2Edropdown%2Dtoggle%7Bcolor%3A%23212529%3Bbackground%2Dcolor%3A%23dae0e5%3Bborder%2Dcolor%3A%23d3d9df%7D%2Ebtn%2Dlight%3Anot%28%3Adisabled%29%3Anot%28%2Edisabled%29%2Eactive%3Afocus%2C%2Ebtn%2Dlight%3Anot%28%3Adisabled%29%3Anot%28%2Edisabled%29%3Aactive%3Afocus%2C%2Eshow%3E%2Ebtn%2Dlight%2Edropdown%2Dtoggle%3Afocus%7Bbox%2Dshadow%3A0%200%200%20%2E2rem%20rgba%28248%2C249%2C250%2C%2E5%29%7D%2Ebtn%2Ddark%7Bcolor%3A%23fff%3Bbackground%2Dcolor%3A%23343a40%3Bborder%2Dcolor%3A%23343a40%7D%2Ebtn%2Ddark%3Ahover%7Bcolor%3A%23fff%3Bbackground%2Dcolor%3A%2323272b%3Bborder%2Dcolor%3A%231d2124%7D%2Ebtn%2Ddark%2Efocus%2C%2Ebtn%2Ddark%3Afocus%7Bbox%2Dshadow%3A0%200%200%20%2E2rem%20rgba%2852%2C58%2C64%2C%2E5%29%7D%2Ebtn%2Ddark%2Edisabled%2C%2Ebtn%2Ddark%3Adisabled%7Bcolor%3A%23fff%3Bbackground%2Dcolor%3A%23343a40%3Bborder%2Dcolor%3A%23343a40%7D%2Ebtn%2Ddark%3Anot%28%3Adisabled%29%3Anot%28%2Edisabled%29%2Eactive%2C%2Ebtn%2Ddark%3Anot%28%3Adisabled%29%3Anot%28%2Edisabled%29%3Aactive%2C%2Eshow%3E%2Ebtn%2Ddark%2Edropdown%2Dtoggle%7Bcolor%3A%23fff%3Bbackground%2Dcolor%3A%231d2124%3Bborder%2Dcolor%3A%23171a1d%7D%2Ebtn%2Ddark%3Anot%28%3Adisabled%29%3Anot%28%2Edisabled%29%2Eactive%3Afocus%2C%2Ebtn%2Ddark%3Anot%28%3Adisabled%29%3Anot%28%2Edisabled%29%3Aactive%3Afocus%2C%2Eshow%3E%2Ebtn%2Ddark%2Edropdown%2Dtoggle%3Afocus%7Bbox%2Dshadow%3A0%200%200%20%2E2rem%20rgba%2852%2C58%2C64%2C%2E5%29%7D%2Ebtn%2Doutline%2Dprimary%7Bcolor%3A%23007bff%3Bbackground%2Dcolor%3Atransparent%3Bbackground%2Dimage%3Anone%3Bborder%2Dcolor%3A%23007bff%7D%2Ebtn%2Doutline%2Dprimary%3Ahover%7Bcolor%3A%23fff%3Bbackground%2Dcolor%3A%23007bff%3Bborder%2Dcolor%3A%23007bff%7D%2Ebtn%2Doutline%2Dprimary%2Efocus%2C%2Ebtn%2Doutline%2Dprimary%3Afocus%7Bbox%2Dshadow%3A0%200%200%20%2E2rem%20rgba%280%2C123%2C255%2C%2E5%29%7D%2Ebtn%2Doutline%2Dprimary%2Edisabled%2C%2Ebtn%2Doutline%2Dprimary%3Adisabled%7Bcolor%3A%23007bff%3Bbackground%2Dcolor%3Atransparent%7D%2Ebtn%2Doutline%2Dprimary%3Anot%28%3Adisabled%29%3Anot%28%2Edisabled%29%2Eactive%2C%2Ebtn%2Doutline%2Dprimary%3Anot%28%3Adisabled%29%3Anot%28%2Edisabled%29%3Aactive%2C%2Eshow%3E%2Ebtn%2Doutline%2Dprimary%2Edropdown%2Dtoggle%7Bcolor%3A%23fff%3Bbackground%2Dcolor%3A%23007bff%3Bborder%2Dcolor%3A%23007bff%7D%2Ebtn%2Doutline%2Dprimary%3Anot%28%3Adisabled%29%3Anot%28%2Edisabled%29%2Eactive%3Afocus%2C%2Ebtn%2Doutline%2Dprimary%3Anot%28%3Adisabled%29%3Anot%28%2Edisabled%29%3Aactive%3Afocus%2C%2Eshow%3E%2Ebtn%2Doutline%2Dprimary%2Edropdown%2Dtoggle%3Afocus%7Bbox%2Dshadow%3A0%200%200%20%2E2rem%20rgba%280%2C123%2C255%2C%2E5%29%7D%2Ebtn%2Doutline%2Dsecondary%7Bcolor%3A%236c757d%3Bbackground%2Dcolor%3Atransparent%3Bbackground%2Dimage%3Anone%3Bborder%2Dcolor%3A%236c757d%7D%2Ebtn%2Doutline%2Dsecondary%3Ahover%7Bcolor%3A%23fff%3Bbackground%2Dcolor%3A%236c757d%3Bborder%2Dcolor%3A%236c757d%7D%2Ebtn%2Doutline%2Dsecondary%2Efocus%2C%2Ebtn%2Doutline%2Dsecondary%3Afocus%7Bbox%2Dshadow%3A0%200%200%20%2E2rem%20rgba%28108%2C117%2C125%2C%2E5%29%7D%2Ebtn%2Doutline%2Dsecondary%2Edisabled%2C%2Ebtn%2Doutline%2Dsecondary%3Adisabled%7Bcolor%3A%236c757d%3Bbackground%2Dcolor%3Atransparent%7D%2Ebtn%2Doutline%2Dsecondary%3Anot%28%3Adisabled%29%3Anot%28%2Edisabled%29%2Eactive%2C%2Ebtn%2Doutline%2Dsecondary%3Anot%28%3Adisabled%29%3Anot%28%2Edisabled%29%3Aactive%2C%2Eshow%3E%2Ebtn%2Doutline%2Dsecondary%2Edropdown%2Dtoggle%7Bcolor%3A%23fff%3Bbackground%2Dcolor%3A%236c757d%3Bborder%2Dcolor%3A%236c757d%7D%2Ebtn%2Doutline%2Dsecondary%3Anot%28%3Adisabled%29%3Anot%28%2Edisabled%29%2Eactive%3Afocus%2C%2Ebtn%2Doutline%2Dsecondary%3Anot%28%3Adisabled%29%3Anot%28%2Edisabled%29%3Aactive%3Afocus%2C%2Eshow%3E%2Ebtn%2Doutline%2Dsecondary%2Edropdown%2Dtoggle%3Afocus%7Bbox%2Dshadow%3A0%200%200%20%2E2rem%20rgba%28108%2C117%2C125%2C%2E5%29%7D%2Ebtn%2Doutline%2Dsuccess%7Bcolor%3A%2328a745%3Bbackground%2Dcolor%3Atransparent%3Bbackground%2Dimage%3Anone%3Bborder%2Dcolor%3A%2328a745%7D%2Ebtn%2Doutline%2Dsuccess%3Ahover%7Bcolor%3A%23fff%3Bbackground%2Dcolor%3A%2328a745%3Bborder%2Dcolor%3A%2328a745%7D%2Ebtn%2Doutline%2Dsuccess%2Efocus%2C%2Ebtn%2Doutline%2Dsuccess%3Afocus%7Bbox%2Dshadow%3A0%200%200%20%2E2rem%20rgba%2840%2C167%2C69%2C%2E5%29%7D%2Ebtn%2Doutline%2Dsuccess%2Edisabled%2C%2Ebtn%2Doutline%2Dsuccess%3Adisabled%7Bcolor%3A%2328a745%3Bbackground%2Dcolor%3Atransparent%7D%2Ebtn%2Doutline%2Dsuccess%3Anot%28%3Adisabled%29%3Anot%28%2Edisabled%29%2Eactive%2C%2Ebtn%2Doutline%2Dsuccess%3Anot%28%3Adisabled%29%3Anot%28%2Edisabled%29%3Aactive%2C%2Eshow%3E%2Ebtn%2Doutline%2Dsuccess%2Edropdown%2Dtoggle%7Bcolor%3A%23fff%3Bbackground%2Dcolor%3A%2328a745%3Bborder%2Dcolor%3A%2328a745%7D%2Ebtn%2Doutline%2Dsuccess%3Anot%28%3Adisabled%29%3Anot%28%2Edisabled%29%2Eactive%3Afocus%2C%2Ebtn%2Doutline%2Dsuccess%3Anot%28%3Adisabled%29%3Anot%28%2Edisabled%29%3Aactive%3Afocus%2C%2Eshow%3E%2Ebtn%2Doutline%2Dsuccess%2Edropdown%2Dtoggle%3Afocus%7Bbox%2Dshadow%3A0%200%200%20%2E2rem%20rgba%2840%2C167%2C69%2C%2E5%29%7D%2Ebtn%2Doutline%2Dinfo%7Bcolor%3A%2317a2b8%3Bbackground%2Dcolor%3Atransparent%3Bbackground%2Dimage%3Anone%3Bborder%2Dcolor%3A%2317a2b8%7D%2Ebtn%2Doutline%2Dinfo%3Ahover%7Bcolor%3A%23fff%3Bbackground%2Dcolor%3A%2317a2b8%3Bborder%2Dcolor%3A%2317a2b8%7D%2Ebtn%2Doutline%2Dinfo%2Efocus%2C%2Ebtn%2Doutline%2Dinfo%3Afocus%7Bbox%2Dshadow%3A0%200%200%20%2E2rem%20rgba%2823%2C162%2C184%2C%2E5%29%7D%2Ebtn%2Doutline%2Dinfo%2Edisabled%2C%2Ebtn%2Doutline%2Dinfo%3Adisabled%7Bcolor%3A%2317a2b8%3Bbackground%2Dcolor%3Atransparent%7D%2Ebtn%2Doutline%2Dinfo%3Anot%28%3Adisabled%29%3Anot%28%2Edisabled%29%2Eactive%2C%2Ebtn%2Doutline%2Dinfo%3Anot%28%3Adisabled%29%3Anot%28%2Edisabled%29%3Aactive%2C%2Eshow%3E%2Ebtn%2Doutline%2Dinfo%2Edropdown%2Dtoggle%7Bcolor%3A%23fff%3Bbackground%2Dcolor%3A%2317a2b8%3Bborder%2Dcolor%3A%2317a2b8%7D%2Ebtn%2Doutline%2Dinfo%3Anot%28%3Adisabled%29%3Anot%28%2Edisabled%29%2Eactive%3Afocus%2C%2Ebtn%2Doutline%2Dinfo%3Anot%28%3Adisabled%29%3Anot%28%2Edisabled%29%3Aactive%3Afocus%2C%2Eshow%3E%2Ebtn%2Doutline%2Dinfo%2Edropdown%2Dtoggle%3Afocus%7Bbox%2Dshadow%3A0%200%200%20%2E2rem%20rgba%2823%2C162%2C184%2C%2E5%29%7D%2Ebtn%2Doutline%2Dwarning%7Bcolor%3A%23ffc107%3Bbackground%2Dcolor%3Atransparent%3Bbackground%2Dimage%3Anone%3Bborder%2Dcolor%3A%23ffc107%7D%2Ebtn%2Doutline%2Dwarning%3Ahover%7Bcolor%3A%23212529%3Bbackground%2Dcolor%3A%23ffc107%3Bborder%2Dcolor%3A%23ffc107%7D%2Ebtn%2Doutline%2Dwarning%2Efocus%2C%2Ebtn%2Doutline%2Dwarning%3Afocus%7Bbox%2Dshadow%3A0%200%200%20%2E2rem%20rgba%28255%2C193%2C7%2C%2E5%29%7D%2Ebtn%2Doutline%2Dwarning%2Edisabled%2C%2Ebtn%2Doutline%2Dwarning%3Adisabled%7Bcolor%3A%23ffc107%3Bbackground%2Dcolor%3Atransparent%7D%2Ebtn%2Doutline%2Dwarning%3Anot%28%3Adisabled%29%3Anot%28%2Edisabled%29%2Eactive%2C%2Ebtn%2Doutline%2Dwarning%3Anot%28%3Adisabled%29%3Anot%28%2Edisabled%29%3Aactive%2C%2Eshow%3E%2Ebtn%2Doutline%2Dwarning%2Edropdown%2Dtoggle%7Bcolor%3A%23212529%3Bbackground%2Dcolor%3A%23ffc107%3Bborder%2Dcolor%3A%23ffc107%7D%2Ebtn%2Doutline%2Dwarning%3Anot%28%3Adisabled%29%3Anot%28%2Edisabled%29%2Eactive%3Afocus%2C%2Ebtn%2Doutline%2Dwarning%3Anot%28%3Adisabled%29%3Anot%28%2Edisabled%29%3Aactive%3Afocus%2C%2Eshow%3E%2Ebtn%2Doutline%2Dwarning%2Edropdown%2Dtoggle%3Afocus%7Bbox%2Dshadow%3A0%200%200%20%2E2rem%20rgba%28255%2C193%2C7%2C%2E5%29%7D%2Ebtn%2Doutline%2Ddanger%7Bcolor%3A%23dc3545%3Bbackground%2Dcolor%3Atransparent%3Bbackground%2Dimage%3Anone%3Bborder%2Dcolor%3A%23dc3545%7D%2Ebtn%2Doutline%2Ddanger%3Ahover%7Bcolor%3A%23fff%3Bbackground%2Dcolor%3A%23dc3545%3Bborder%2Dcolor%3A%23dc3545%7D%2Ebtn%2Doutline%2Ddanger%2Efocus%2C%2Ebtn%2Doutline%2Ddanger%3Afocus%7Bbox%2Dshadow%3A0%200%200%20%2E2rem%20rgba%28220%2C53%2C69%2C%2E5%29%7D%2Ebtn%2Doutline%2Ddanger%2Edisabled%2C%2Ebtn%2Doutline%2Ddanger%3Adisabled%7Bcolor%3A%23dc3545%3Bbackground%2Dcolor%3Atransparent%7D%2Ebtn%2Doutline%2Ddanger%3Anot%28%3Adisabled%29%3Anot%28%2Edisabled%29%2Eactive%2C%2Ebtn%2Doutline%2Ddanger%3Anot%28%3Adisabled%29%3Anot%28%2Edisabled%29%3Aactive%2C%2Eshow%3E%2Ebtn%2Doutline%2Ddanger%2Edropdown%2Dtoggle%7Bcolor%3A%23fff%3Bbackground%2Dcolor%3A%23dc3545%3Bborder%2Dcolor%3A%23dc3545%7D%2Ebtn%2Doutline%2Ddanger%3Anot%28%3Adisabled%29%3Anot%28%2Edisabled%29%2Eactive%3Afocus%2C%2Ebtn%2Doutline%2Ddanger%3Anot%28%3Adisabled%29%3Anot%28%2Edisabled%29%3Aactive%3Afocus%2C%2Eshow%3E%2Ebtn%2Doutline%2Ddanger%2Edropdown%2Dtoggle%3Afocus%7Bbox%2Dshadow%3A0%200%200%20%2E2rem%20rgba%28220%2C53%2C69%2C%2E5%29%7D%2Ebtn%2Doutline%2Dlight%7Bcolor%3A%23f8f9fa%3Bbackground%2Dcolor%3Atransparent%3Bbackground%2Dimage%3Anone%3Bborder%2Dcolor%3A%23f8f9fa%7D%2Ebtn%2Doutline%2Dlight%3Ahover%7Bcolor%3A%23212529%3Bbackground%2Dcolor%3A%23f8f9fa%3Bborder%2Dcolor%3A%23f8f9fa%7D%2Ebtn%2Doutline%2Dlight%2Efocus%2C%2Ebtn%2Doutline%2Dlight%3Afocus%7Bbox%2Dshadow%3A0%200%200%20%2E2rem%20rgba%28248%2C249%2C250%2C%2E5%29%7D%2Ebtn%2Doutline%2Dlight%2Edisabled%2C%2Ebtn%2Doutline%2Dlight%3Adisabled%7Bcolor%3A%23f8f9fa%3Bbackground%2Dcolor%3Atransparent%7D%2Ebtn%2Doutline%2Dlight%3Anot%28%3Adisabled%29%3Anot%28%2Edisabled%29%2Eactive%2C%2Ebtn%2Doutline%2Dlight%3Anot%28%3Adisabled%29%3Anot%28%2Edisabled%29%3Aactive%2C%2Eshow%3E%2Ebtn%2Doutline%2Dlight%2Edropdown%2Dtoggle%7Bcolor%3A%23212529%3Bbackground%2Dcolor%3A%23f8f9fa%3Bborder%2Dcolor%3A%23f8f9fa%7D%2Ebtn%2Doutline%2Dlight%3Anot%28%3Adisabled%29%3Anot%28%2Edisabled%29%2Eactive%3Afocus%2C%2Ebtn%2Doutline%2Dlight%3Anot%28%3Adisabled%29%3Anot%28%2Edisabled%29%3Aactive%3Afocus%2C%2Eshow%3E%2Ebtn%2Doutline%2Dlight%2Edropdown%2Dtoggle%3Afocus%7Bbox%2Dshadow%3A0%200%200%20%2E2rem%20rgba%28248%2C249%2C250%2C%2E5%29%7D%2Ebtn%2Doutline%2Ddark%7Bcolor%3A%23343a40%3Bbackground%2Dcolor%3Atransparent%3Bbackground%2Dimage%3Anone%3Bborder%2Dcolor%3A%23343a40%7D%2Ebtn%2Doutline%2Ddark%3Ahover%7Bcolor%3A%23fff%3Bbackground%2Dcolor%3A%23343a40%3Bborder%2Dcolor%3A%23343a40%7D%2Ebtn%2Doutline%2Ddark%2Efocus%2C%2Ebtn%2Doutline%2Ddark%3Afocus%7Bbox%2Dshadow%3A0%200%200%20%2E2rem%20rgba%2852%2C58%2C64%2C%2E5%29%7D%2Ebtn%2Doutline%2Ddark%2Edisabled%2C%2Ebtn%2Doutline%2Ddark%3Adisabled%7Bcolor%3A%23343a40%3Bbackground%2Dcolor%3Atransparent%7D%2Ebtn%2Doutline%2Ddark%3Anot%28%3Adisabled%29%3Anot%28%2Edisabled%29%2Eactive%2C%2Ebtn%2Doutline%2Ddark%3Anot%28%3Adisabled%29%3Anot%28%2Edisabled%29%3Aactive%2C%2Eshow%3E%2Ebtn%2Doutline%2Ddark%2Edropdown%2Dtoggle%7Bcolor%3A%23fff%3Bbackground%2Dcolor%3A%23343a40%3Bborder%2Dcolor%3A%23343a40%7D%2Ebtn%2Doutline%2Ddark%3Anot%28%3Adisabled%29%3Anot%28%2Edisabled%29%2Eactive%3Afocus%2C%2Ebtn%2Doutline%2Ddark%3Anot%28%3Adisabled%29%3Anot%28%2Edisabled%29%3Aactive%3Afocus%2C%2Eshow%3E%2Ebtn%2Doutline%2Ddark%2Edropdown%2Dtoggle%3Afocus%7Bbox%2Dshadow%3A0%200%200%20%2E2rem%20rgba%2852%2C58%2C64%2C%2E5%29%7D%2Ebtn%2Dlink%7Bfont%2Dweight%3A400%3Bcolor%3A%23007bff%3Bbackground%2Dcolor%3Atransparent%7D%2Ebtn%2Dlink%3Ahover%7Bcolor%3A%230056b3%3Btext%2Ddecoration%3Aunderline%3Bbackground%2Dcolor%3Atransparent%3Bborder%2Dcolor%3Atransparent%7D%2Ebtn%2Dlink%2Efocus%2C%2Ebtn%2Dlink%3Afocus%7Btext%2Ddecoration%3Aunderline%3Bborder%2Dcolor%3Atransparent%3Bbox%2Dshadow%3Anone%7D%2Ebtn%2Dlink%2Edisabled%2C%2Ebtn%2Dlink%3Adisabled%7Bcolor%3A%236c757d%7D%2Ebtn%2Dgroup%2Dlg%3E%2Ebtn%2C%2Ebtn%2Dlg%7Bpadding%3A%2E5rem%201rem%3Bfont%2Dsize%3A1%2E25rem%3Bline%2Dheight%3A1%2E5%3Bborder%2Dradius%3A%2E3rem%7D%2Ebtn%2Dgroup%2Dsm%3E%2Ebtn%2C%2Ebtn%2Dsm%7Bpadding%3A%2E25rem%20%2E5rem%3Bfont%2Dsize%3A%2E875rem%3Bline%2Dheight%3A1%2E5%3Bborder%2Dradius%3A%2E2rem%7D%2Ebtn%2Dblock%7Bdisplay%3Ablock%3Bwidth%3A100%25%7D%2Ebtn%2Dblock%2B%2Ebtn%2Dblock%7Bmargin%2Dtop%3A%2E5rem%7Dinput%5Btype%3Dbutton%5D%2Ebtn%2Dblock%2Cinput%5Btype%3Dreset%5D%2Ebtn%2Dblock%2Cinput%5Btype%3Dsubmit%5D%2Ebtn%2Dblock%7Bwidth%3A100%25%7D%2Efade%7Bopacity%3A0%3Btransition%3Aopacity%20%2E15s%20linear%7D%2Efade%2Eshow%7Bopacity%3A1%7D%2Ecollapse%7Bdisplay%3Anone%7D%2Ecollapse%2Eshow%7Bdisplay%3Ablock%7Dtr%2Ecollapse%2Eshow%7Bdisplay%3Atable%2Drow%7Dtbody%2Ecollapse%2Eshow%7Bdisplay%3Atable%2Drow%2Dgroup%7D%2Ecollapsing%7Bposition%3Arelative%3Bheight%3A0%3Boverflow%3Ahidden%3Btransition%3Aheight%20%2E35s%20ease%7D%2Edropdown%2C%2Edropup%7Bposition%3Arelative%7D%2Edropdown%2Dtoggle%3A%3Aafter%7Bdisplay%3Ainline%2Dblock%3Bwidth%3A0%3Bheight%3A0%3Bmargin%2Dleft%3A%2E255em%3Bvertical%2Dalign%3A%2E255em%3Bcontent%3A%22%22%3Bborder%2Dtop%3A%2E3em%20solid%3Bborder%2Dright%3A%2E3em%20solid%20transparent%3Bborder%2Dbottom%3A0%3Bborder%2Dleft%3A%2E3em%20solid%20transparent%7D%2Edropdown%2Dtoggle%3Aempty%3A%3Aafter%7Bmargin%2Dleft%3A0%7D%2Edropdown%2Dmenu%7Bposition%3Aabsolute%3Btop%3A100%25%3Bleft%3A0%3Bz%2Dindex%3A1000%3Bdisplay%3Anone%3Bfloat%3Aleft%3Bmin%2Dwidth%3A10rem%3Bpadding%3A%2E5rem%200%3Bmargin%3A%2E125rem%200%200%3Bfont%2Dsize%3A1rem%3Bcolor%3A%23212529%3Btext%2Dalign%3Aleft%3Blist%2Dstyle%3Anone%3Bbackground%2Dcolor%3A%23fff%3Bbackground%2Dclip%3Apadding%2Dbox%3Bborder%3A1px%20solid%20rgba%280%2C0%2C0%2C%2E15%29%3Bborder%2Dradius%3A%2E25rem%7D%2Edropup%20%2Edropdown%2Dmenu%7Bmargin%2Dtop%3A0%3Bmargin%2Dbottom%3A%2E125rem%7D%2Edropup%20%2Edropdown%2Dtoggle%3A%3Aafter%7Bdisplay%3Ainline%2Dblock%3Bwidth%3A0%3Bheight%3A0%3Bmargin%2Dleft%3A%2E255em%3Bvertical%2Dalign%3A%2E255em%3Bcontent%3A%22%22%3Bborder%2Dtop%3A0%3Bborder%2Dright%3A%2E3em%20solid%20transparent%3Bborder%2Dbottom%3A%2E3em%20solid%3Bborder%2Dleft%3A%2E3em%20solid%20transparent%7D%2Edropup%20%2Edropdown%2Dtoggle%3Aempty%3A%3Aafter%7Bmargin%2Dleft%3A0%7D%2Edropright%20%2Edropdown%2Dmenu%7Bmargin%2Dtop%3A0%3Bmargin%2Dleft%3A%2E125rem%7D%2Edropright%20%2Edropdown%2Dtoggle%3A%3Aafter%7Bdisplay%3Ainline%2Dblock%3Bwidth%3A0%3Bheight%3A0%3Bmargin%2Dleft%3A%2E255em%3Bvertical%2Dalign%3A%2E255em%3Bcontent%3A%22%22%3Bborder%2Dtop%3A%2E3em%20solid%20transparent%3Bborder%2Dbottom%3A%2E3em%20solid%20transparent%3Bborder%2Dleft%3A%2E3em%20solid%7D%2Edropright%20%2Edropdown%2Dtoggle%3Aempty%3A%3Aafter%7Bmargin%2Dleft%3A0%7D%2Edropright%20%2Edropdown%2Dtoggle%3A%3Aafter%7Bvertical%2Dalign%3A0%7D%2Edropleft%20%2Edropdown%2Dmenu%7Bmargin%2Dtop%3A0%3Bmargin%2Dright%3A%2E125rem%7D%2Edropleft%20%2Edropdown%2Dtoggle%3A%3Aafter%7Bdisplay%3Ainline%2Dblock%3Bwidth%3A0%3Bheight%3A0%3Bmargin%2Dleft%3A%2E255em%3Bvertical%2Dalign%3A%2E255em%3Bcontent%3A%22%22%7D%2Edropleft%20%2Edropdown%2Dtoggle%3A%3Aafter%7Bdisplay%3Anone%7D%2Edropleft%20%2Edropdown%2Dtoggle%3A%3Abefore%7Bdisplay%3Ainline%2Dblock%3Bwidth%3A0%3Bheight%3A0%3Bmargin%2Dright%3A%2E255em%3Bvertical%2Dalign%3A%2E255em%3Bcontent%3A%22%22%3Bborder%2Dtop%3A%2E3em%20solid%20transparent%3Bborder%2Dright%3A%2E3em%20solid%3Bborder%2Dbottom%3A%2E3em%20solid%20transparent%7D%2Edropleft%20%2Edropdown%2Dtoggle%3Aempty%3A%3Aafter%7Bmargin%2Dleft%3A0%7D%2Edropleft%20%2Edropdown%2Dtoggle%3A%3Abefore%7Bvertical%2Dalign%3A0%7D%2Edropdown%2Ddivider%7Bheight%3A0%3Bmargin%3A%2E5rem%200%3Boverflow%3Ahidden%3Bborder%2Dtop%3A1px%20solid%20%23e9ecef%7D%2Edropdown%2Ditem%7Bdisplay%3Ablock%3Bwidth%3A100%25%3Bpadding%3A%2E25rem%201%2E5rem%3Bclear%3Aboth%3Bfont%2Dweight%3A400%3Bcolor%3A%23212529%3Btext%2Dalign%3Ainherit%3Bwhite%2Dspace%3Anowrap%3Bbackground%2Dcolor%3Atransparent%3Bborder%3A0%7D%2Edropdown%2Ditem%3Afocus%2C%2Edropdown%2Ditem%3Ahover%7Bcolor%3A%2316181b%3Btext%2Ddecoration%3Anone%3Bbackground%2Dcolor%3A%23f8f9fa%7D%2Edropdown%2Ditem%2Eactive%2C%2Edropdown%2Ditem%3Aactive%7Bcolor%3A%23fff%3Btext%2Ddecoration%3Anone%3Bbackground%2Dcolor%3A%23007bff%7D%2Edropdown%2Ditem%2Edisabled%2C%2Edropdown%2Ditem%3Adisabled%7Bcolor%3A%236c757d%3Bbackground%2Dcolor%3Atransparent%7D%2Edropdown%2Dmenu%2Eshow%7Bdisplay%3Ablock%7D%2Edropdown%2Dheader%7Bdisplay%3Ablock%3Bpadding%3A%2E5rem%201%2E5rem%3Bmargin%2Dbottom%3A0%3Bfont%2Dsize%3A%2E875rem%3Bcolor%3A%236c757d%3Bwhite%2Dspace%3Anowrap%7D%2Ebtn%2Dgroup%2C%2Ebtn%2Dgroup%2Dvertical%7Bposition%3Arelative%3Bdisplay%3A%2Dwebkit%2Dinline%2Dbox%3Bdisplay%3A%2Dms%2Dinline%2Dflexbox%3Bdisplay%3Ainline%2Dflex%3Bvertical%2Dalign%3Amiddle%7D%2Ebtn%2Dgroup%2Dvertical%3E%2Ebtn%2C%2Ebtn%2Dgroup%3E%2Ebtn%7Bposition%3Arelative%3B%2Dwebkit%2Dbox%2Dflex%3A0%3B%2Dms%2Dflex%3A0%201%20auto%3Bflex%3A0%201%20auto%7D%2Ebtn%2Dgroup%2Dvertical%3E%2Ebtn%3Ahover%2C%2Ebtn%2Dgroup%3E%2Ebtn%3Ahover%7Bz%2Dindex%3A1%7D%2Ebtn%2Dgroup%2Dvertical%3E%2Ebtn%2Eactive%2C%2Ebtn%2Dgroup%2Dvertical%3E%2Ebtn%3Aactive%2C%2Ebtn%2Dgroup%2Dvertical%3E%2Ebtn%3Afocus%2C%2Ebtn%2Dgroup%3E%2Ebtn%2Eactive%2C%2Ebtn%2Dgroup%3E%2Ebtn%3Aactive%2C%2Ebtn%2Dgroup%3E%2Ebtn%3Afocus%7Bz%2Dindex%3A1%7D%2Ebtn%2Dgroup%20%2Ebtn%2B%2Ebtn%2C%2Ebtn%2Dgroup%20%2Ebtn%2B%2Ebtn%2Dgroup%2C%2Ebtn%2Dgroup%20%2Ebtn%2Dgroup%2B%2Ebtn%2C%2Ebtn%2Dgroup%20%2Ebtn%2Dgroup%2B%2Ebtn%2Dgroup%2C%2Ebtn%2Dgroup%2Dvertical%20%2Ebtn%2B%2Ebtn%2C%2Ebtn%2Dgroup%2Dvertical%20%2Ebtn%2B%2Ebtn%2Dgroup%2C%2Ebtn%2Dgroup%2Dvertical%20%2Ebtn%2Dgroup%2B%2Ebtn%2C%2Ebtn%2Dgroup%2Dvertical%20%2Ebtn%2Dgroup%2B%2Ebtn%2Dgroup%7Bmargin%2Dleft%3A%2D1px%7D%2Ebtn%2Dtoolbar%7Bdisplay%3A%2Dwebkit%2Dbox%3Bdisplay%3A%2Dms%2Dflexbox%3Bdisplay%3Aflex%3B%2Dms%2Dflex%2Dwrap%3Awrap%3Bflex%2Dwrap%3Awrap%3B%2Dwebkit%2Dbox%2Dpack%3Astart%3B%2Dms%2Dflex%2Dpack%3Astart%3Bjustify%2Dcontent%3Aflex%2Dstart%7D%2Ebtn%2Dtoolbar%20%2Einput%2Dgroup%7Bwidth%3Aauto%7D%2Ebtn%2Dgroup%3E%2Ebtn%3Afirst%2Dchild%7Bmargin%2Dleft%3A0%7D%2Ebtn%2Dgroup%3E%2Ebtn%2Dgroup%3Anot%28%3Alast%2Dchild%29%3E%2Ebtn%2C%2Ebtn%2Dgroup%3E%2Ebtn%3Anot%28%3Alast%2Dchild%29%3Anot%28%2Edropdown%2Dtoggle%29%7Bborder%2Dtop%2Dright%2Dradius%3A0%3Bborder%2Dbottom%2Dright%2Dradius%3A0%7D%2Ebtn%2Dgroup%3E%2Ebtn%2Dgroup%3Anot%28%3Afirst%2Dchild%29%3E%2Ebtn%2C%2Ebtn%2Dgroup%3E%2Ebtn%3Anot%28%3Afirst%2Dchild%29%7Bborder%2Dtop%2Dleft%2Dradius%3A0%3Bborder%2Dbottom%2Dleft%2Dradius%3A0%7D%2Edropdown%2Dtoggle%2Dsplit%7Bpadding%2Dright%3A%2E5625rem%3Bpadding%2Dleft%3A%2E5625rem%7D%2Edropdown%2Dtoggle%2Dsplit%3A%3Aafter%7Bmargin%2Dleft%3A0%7D%2Ebtn%2Dgroup%2Dsm%3E%2Ebtn%2B%2Edropdown%2Dtoggle%2Dsplit%2C%2Ebtn%2Dsm%2B%2Edropdown%2Dtoggle%2Dsplit%7Bpadding%2Dright%3A%2E375rem%3Bpadding%2Dleft%3A%2E375rem%7D%2Ebtn%2Dgroup%2Dlg%3E%2Ebtn%2B%2Edropdown%2Dtoggle%2Dsplit%2C%2Ebtn%2Dlg%2B%2Edropdown%2Dtoggle%2Dsplit%7Bpadding%2Dright%3A%2E75rem%3Bpadding%2Dleft%3A%2E75rem%7D%2Ebtn%2Dgroup%2Dvertical%7B%2Dwebkit%2Dbox%2Dorient%3Avertical%3B%2Dwebkit%2Dbox%2Ddirection%3Anormal%3B%2Dms%2Dflex%2Ddirection%3Acolumn%3Bflex%2Ddirection%3Acolumn%3B%2Dwebkit%2Dbox%2Dalign%3Astart%3B%2Dms%2Dflex%2Dalign%3Astart%3Balign%2Ditems%3Aflex%2Dstart%3B%2Dwebkit%2Dbox%2Dpack%3Acenter%3B%2Dms%2Dflex%2Dpack%3Acenter%3Bjustify%2Dcontent%3Acenter%7D%2Ebtn%2Dgroup%2Dvertical%20%2Ebtn%2C%2Ebtn%2Dgroup%2Dvertical%20%2Ebtn%2Dgroup%7Bwidth%3A100%25%7D%2Ebtn%2Dgroup%2Dvertical%3E%2Ebtn%2B%2Ebtn%2C%2Ebtn%2Dgroup%2Dvertical%3E%2Ebtn%2B%2Ebtn%2Dgroup%2C%2Ebtn%2Dgroup%2Dvertical%3E%2Ebtn%2Dgroup%2B%2Ebtn%2C%2Ebtn%2Dgroup%2Dvertical%3E%2Ebtn%2Dgroup%2B%2Ebtn%2Dgroup%7Bmargin%2Dtop%3A%2D1px%3Bmargin%2Dleft%3A0%7D%2Ebtn%2Dgroup%2Dvertical%3E%2Ebtn%2Dgroup%3Anot%28%3Alast%2Dchild%29%3E%2Ebtn%2C%2Ebtn%2Dgroup%2Dvertical%3E%2Ebtn%3Anot%28%3Alast%2Dchild%29%3Anot%28%2Edropdown%2Dtoggle%29%7Bborder%2Dbottom%2Dright%2Dradius%3A0%3Bborder%2Dbottom%2Dleft%2Dradius%3A0%7D%2Ebtn%2Dgroup%2Dvertical%3E%2Ebtn%2Dgroup%3Anot%28%3Afirst%2Dchild%29%3E%2Ebtn%2C%2Ebtn%2Dgroup%2Dvertical%3E%2Ebtn%3Anot%28%3Afirst%2Dchild%29%7Bborder%2Dtop%2Dleft%2Dradius%3A0%3Bborder%2Dtop%2Dright%2Dradius%3A0%7D%2Ebtn%2Dgroup%2Dtoggle%3E%2Ebtn%2C%2Ebtn%2Dgroup%2Dtoggle%3E%2Ebtn%2Dgroup%3E%2Ebtn%7Bmargin%2Dbottom%3A0%7D%2Ebtn%2Dgroup%2Dtoggle%3E%2Ebtn%20input%5Btype%3Dcheckbox%5D%2C%2Ebtn%2Dgroup%2Dtoggle%3E%2Ebtn%20input%5Btype%3Dradio%5D%2C%2Ebtn%2Dgroup%2Dtoggle%3E%2Ebtn%2Dgroup%3E%2Ebtn%20input%5Btype%3Dcheckbox%5D%2C%2Ebtn%2Dgroup%2Dtoggle%3E%2Ebtn%2Dgroup%3E%2Ebtn%20input%5Btype%3Dradio%5D%7Bposition%3Aabsolute%3Bclip%3Arect%280%2C0%2C0%2C0%29%3Bpointer%2Devents%3Anone%7D%2Einput%2Dgroup%7Bposition%3Arelative%3Bdisplay%3A%2Dwebkit%2Dbox%3Bdisplay%3A%2Dms%2Dflexbox%3Bdisplay%3Aflex%3B%2Dms%2Dflex%2Dwrap%3Awrap%3Bflex%2Dwrap%3Awrap%3B%2Dwebkit%2Dbox%2Dalign%3Astretch%3B%2Dms%2Dflex%2Dalign%3Astretch%3Balign%2Ditems%3Astretch%3Bwidth%3A100%25%7D%2Einput%2Dgroup%3E%2Ecustom%2Dfile%2C%2Einput%2Dgroup%3E%2Ecustom%2Dselect%2C%2Einput%2Dgroup%3E%2Eform%2Dcontrol%7Bposition%3Arelative%3B%2Dwebkit%2Dbox%2Dflex%3A1%3B%2Dms%2Dflex%3A1%201%20auto%3Bflex%3A1%201%20auto%3Bwidth%3A1%25%3Bmargin%2Dbottom%3A0%7D%2Einput%2Dgroup%3E%2Ecustom%2Dfile%3Afocus%2C%2Einput%2Dgroup%3E%2Ecustom%2Dselect%3Afocus%2C%2Einput%2Dgroup%3E%2Eform%2Dcontrol%3Afocus%7Bz%2Dindex%3A3%7D%2Einput%2Dgroup%3E%2Ecustom%2Dfile%2B%2Ecustom%2Dfile%2C%2Einput%2Dgroup%3E%2Ecustom%2Dfile%2B%2Ecustom%2Dselect%2C%2Einput%2Dgroup%3E%2Ecustom%2Dfile%2B%2Eform%2Dcontrol%2C%2Einput%2Dgroup%3E%2Ecustom%2Dselect%2B%2Ecustom%2Dfile%2C%2Einput%2Dgroup%3E%2Ecustom%2Dselect%2B%2Ecustom%2Dselect%2C%2Einput%2Dgroup%3E%2Ecustom%2Dselect%2B%2Eform%2Dcontrol%2C%2Einput%2Dgroup%3E%2Eform%2Dcontrol%2B%2Ecustom%2Dfile%2C%2Einput%2Dgroup%3E%2Eform%2Dcontrol%2B%2Ecustom%2Dselect%2C%2Einput%2Dgroup%3E%2Eform%2Dcontrol%2B%2Eform%2Dcontrol%7Bmargin%2Dleft%3A%2D1px%7D%2Einput%2Dgroup%3E%2Ecustom%2Dselect%3Anot%28%3Alast%2Dchild%29%2C%2Einput%2Dgroup%3E%2Eform%2Dcontrol%3Anot%28%3Alast%2Dchild%29%7Bborder%2Dtop%2Dright%2Dradius%3A0%3Bborder%2Dbottom%2Dright%2Dradius%3A0%7D%2Einput%2Dgroup%3E%2Ecustom%2Dselect%3Anot%28%3Afirst%2Dchild%29%2C%2Einput%2Dgroup%3E%2Eform%2Dcontrol%3Anot%28%3Afirst%2Dchild%29%7Bborder%2Dtop%2Dleft%2Dradius%3A0%3Bborder%2Dbottom%2Dleft%2Dradius%3A0%7D%2Einput%2Dgroup%3E%2Ecustom%2Dfile%7Bdisplay%3A%2Dwebkit%2Dbox%3Bdisplay%3A%2Dms%2Dflexbox%3Bdisplay%3Aflex%3B%2Dwebkit%2Dbox%2Dalign%3Acenter%3B%2Dms%2Dflex%2Dalign%3Acenter%3Balign%2Ditems%3Acenter%7D%2Einput%2Dgroup%3E%2Ecustom%2Dfile%3Anot%28%3Alast%2Dchild%29%20%2Ecustom%2Dfile%2Dlabel%2C%2Einput%2Dgroup%3E%2Ecustom%2Dfile%3Anot%28%3Alast%2Dchild%29%20%2Ecustom%2Dfile%2Dlabel%3A%3Abefore%7Bborder%2Dtop%2Dright%2Dradius%3A0%3Bborder%2Dbottom%2Dright%2Dradius%3A0%7D%2Einput%2Dgroup%3E%2Ecustom%2Dfile%3Anot%28%3Afirst%2Dchild%29%20%2Ecustom%2Dfile%2Dlabel%2C%2Einput%2Dgroup%3E%2Ecustom%2Dfile%3Anot%28%3Afirst%2Dchild%29%20%2Ecustom%2Dfile%2Dlabel%3A%3Abefore%7Bborder%2Dtop%2Dleft%2Dradius%3A0%3Bborder%2Dbottom%2Dleft%2Dradius%3A0%7D%2Einput%2Dgroup%2Dappend%2C%2Einput%2Dgroup%2Dprepend%7Bdisplay%3A%2Dwebkit%2Dbox%3Bdisplay%3A%2Dms%2Dflexbox%3Bdisplay%3Aflex%7D%2Einput%2Dgroup%2Dappend%20%2Ebtn%2C%2Einput%2Dgroup%2Dprepend%20%2Ebtn%7Bposition%3Arelative%3Bz%2Dindex%3A2%7D%2Einput%2Dgroup%2Dappend%20%2Ebtn%2B%2Ebtn%2C%2Einput%2Dgroup%2Dappend%20%2Ebtn%2B%2Einput%2Dgroup%2Dtext%2C%2Einput%2Dgroup%2Dappend%20%2Einput%2Dgroup%2Dtext%2B%2Ebtn%2C%2Einput%2Dgroup%2Dappend%20%2Einput%2Dgroup%2Dtext%2B%2Einput%2Dgroup%2Dtext%2C%2Einput%2Dgroup%2Dprepend%20%2Ebtn%2B%2Ebtn%2C%2Einput%2Dgroup%2Dprepend%20%2Ebtn%2B%2Einput%2Dgroup%2Dtext%2C%2Einput%2Dgroup%2Dprepend%20%2Einput%2Dgroup%2Dtext%2B%2Ebtn%2C%2Einput%2Dgroup%2Dprepend%20%2Einput%2Dgroup%2Dtext%2B%2Einput%2Dgroup%2Dtext%7Bmargin%2Dleft%3A%2D1px%7D%2Einput%2Dgroup%2Dprepend%7Bmargin%2Dright%3A%2D1px%7D%2Einput%2Dgroup%2Dappend%7Bmargin%2Dleft%3A%2D1px%7D%2Einput%2Dgroup%2Dtext%7Bdisplay%3A%2Dwebkit%2Dbox%3Bdisplay%3A%2Dms%2Dflexbox%3Bdisplay%3Aflex%3B%2Dwebkit%2Dbox%2Dalign%3Acenter%3B%2Dms%2Dflex%2Dalign%3Acenter%3Balign%2Ditems%3Acenter%3Bpadding%3A%2E375rem%20%2E75rem%3Bmargin%2Dbottom%3A0%3Bfont%2Dsize%3A1rem%3Bfont%2Dweight%3A400%3Bline%2Dheight%3A1%2E5%3Bcolor%3A%23495057%3Btext%2Dalign%3Acenter%3Bwhite%2Dspace%3Anowrap%3Bbackground%2Dcolor%3A%23e9ecef%3Bborder%3A1px%20solid%20%23ced4da%3Bborder%2Dradius%3A%2E25rem%7D%2Einput%2Dgroup%2Dtext%20input%5Btype%3Dcheckbox%5D%2C%2Einput%2Dgroup%2Dtext%20input%5Btype%3Dradio%5D%7Bmargin%2Dtop%3A0%7D%2Einput%2Dgroup%3E%2Einput%2Dgroup%2Dappend%3Alast%2Dchild%3E%2Ebtn%3Anot%28%3Alast%2Dchild%29%3Anot%28%2Edropdown%2Dtoggle%29%2C%2Einput%2Dgroup%3E%2Einput%2Dgroup%2Dappend%3Alast%2Dchild%3E%2Einput%2Dgroup%2Dtext%3Anot%28%3Alast%2Dchild%29%2C%2Einput%2Dgroup%3E%2Einput%2Dgroup%2Dappend%3Anot%28%3Alast%2Dchild%29%3E%2Ebtn%2C%2Einput%2Dgroup%3E%2Einput%2Dgroup%2Dappend%3Anot%28%3Alast%2Dchild%29%3E%2Einput%2Dgroup%2Dtext%2C%2Einput%2Dgroup%3E%2Einput%2Dgroup%2Dprepend%3E%2Ebtn%2C%2Einput%2Dgroup%3E%2Einput%2Dgroup%2Dprepend%3E%2Einput%2Dgroup%2Dtext%7Bborder%2Dtop%2Dright%2Dradius%3A0%3Bborder%2Dbottom%2Dright%2Dradius%3A0%7D%2Einput%2Dgroup%3E%2Einput%2Dgroup%2Dappend%3E%2Ebtn%2C%2Einput%2Dgroup%3E%2Einput%2Dgroup%2Dappend%3E%2Einput%2Dgroup%2Dtext%2C%2Einput%2Dgroup%3E%2Einput%2Dgroup%2Dprepend%3Afirst%2Dchild%3E%2Ebtn%3Anot%28%3Afirst%2Dchild%29%2C%2Einput%2Dgroup%3E%2Einput%2Dgroup%2Dprepend%3Afirst%2Dchild%3E%2Einput%2Dgroup%2Dtext%3Anot%28%3Afirst%2Dchild%29%2C%2Einput%2Dgroup%3E%2Einput%2Dgroup%2Dprepend%3Anot%28%3Afirst%2Dchild%29%3E%2Ebtn%2C%2Einput%2Dgroup%3E%2Einput%2Dgroup%2Dprepend%3Anot%28%3Afirst%2Dchild%29%3E%2Einput%2Dgroup%2Dtext%7Bborder%2Dtop%2Dleft%2Dradius%3A0%3Bborder%2Dbottom%2Dleft%2Dradius%3A0%7D%2Ecustom%2Dcontrol%7Bposition%3Arelative%3Bdisplay%3Ablock%3Bmin%2Dheight%3A1%2E5rem%3Bpadding%2Dleft%3A1%2E5rem%7D%2Ecustom%2Dcontrol%2Dinline%7Bdisplay%3A%2Dwebkit%2Dinline%2Dbox%3Bdisplay%3A%2Dms%2Dinline%2Dflexbox%3Bdisplay%3Ainline%2Dflex%3Bmargin%2Dright%3A1rem%7D%2Ecustom%2Dcontrol%2Dinput%7Bposition%3Aabsolute%3Bz%2Dindex%3A%2D1%3Bopacity%3A0%7D%2Ecustom%2Dcontrol%2Dinput%3Achecked%7E%2Ecustom%2Dcontrol%2Dlabel%3A%3Abefore%7Bcolor%3A%23fff%3Bbackground%2Dcolor%3A%23007bff%7D%2Ecustom%2Dcontrol%2Dinput%3Afocus%7E%2Ecustom%2Dcontrol%2Dlabel%3A%3Abefore%7Bbox%2Dshadow%3A0%200%200%201px%20%23fff%2C0%200%200%20%2E2rem%20rgba%280%2C123%2C255%2C%2E25%29%7D%2Ecustom%2Dcontrol%2Dinput%3Aactive%7E%2Ecustom%2Dcontrol%2Dlabel%3A%3Abefore%7Bcolor%3A%23fff%3Bbackground%2Dcolor%3A%23b3d7ff%7D%2Ecustom%2Dcontrol%2Dinput%3Adisabled%7E%2Ecustom%2Dcontrol%2Dlabel%7Bcolor%3A%236c757d%7D%2Ecustom%2Dcontrol%2Dinput%3Adisabled%7E%2Ecustom%2Dcontrol%2Dlabel%3A%3Abefore%7Bbackground%2Dcolor%3A%23e9ecef%7D%2Ecustom%2Dcontrol%2Dlabel%7Bmargin%2Dbottom%3A0%7D%2Ecustom%2Dcontrol%2Dlabel%3A%3Abefore%7Bposition%3Aabsolute%3Btop%3A%2E25rem%3Bleft%3A0%3Bdisplay%3Ablock%3Bwidth%3A1rem%3Bheight%3A1rem%3Bpointer%2Devents%3Anone%3Bcontent%3A%22%22%3B%2Dwebkit%2Duser%2Dselect%3Anone%3B%2Dmoz%2Duser%2Dselect%3Anone%3B%2Dms%2Duser%2Dselect%3Anone%3Buser%2Dselect%3Anone%3Bbackground%2Dcolor%3A%23dee2e6%7D%2Ecustom%2Dcontrol%2Dlabel%3A%3Aafter%7Bposition%3Aabsolute%3Btop%3A%2E25rem%3Bleft%3A0%3Bdisplay%3Ablock%3Bwidth%3A1rem%3Bheight%3A1rem%3Bcontent%3A%22%22%3Bbackground%2Drepeat%3Ano%2Drepeat%3Bbackground%2Dposition%3Acenter%20center%3Bbackground%2Dsize%3A50%25%2050%25%7D%2Ecustom%2Dcheckbox%20%2Ecustom%2Dcontrol%2Dlabel%3A%3Abefore%7Bborder%2Dradius%3A%2E25rem%7D%2Ecustom%2Dcheckbox%20%2Ecustom%2Dcontrol%2Dinput%3Achecked%7E%2Ecustom%2Dcontrol%2Dlabel%3A%3Abefore%7Bbackground%2Dcolor%3A%23007bff%7D%2Ecustom%2Dcheckbox%20%2Ecustom%2Dcontrol%2Dinput%3Achecked%7E%2Ecustom%2Dcontrol%2Dlabel%3A%3Aafter%7Bbackground%2Dimage%3Aurl%28%22data%3Aimage%2Fsvg%2Bxml%3Bcharset%3Dutf8%2C%253Csvg%20xmlns%3D%27http%3A%2F%2Fwww%2Ew3%2Eorg%2F2000%2Fsvg%27%20viewBox%3D%270%200%208%208%27%253E%253Cpath%20fill%3D%27%2523fff%27%20d%3D%27M6%2E564%2E75l%2D3%2E59%203%2E612%2D1%2E538%2D1%2E55L0%204%2E26%202%2E974%207%2E25%208%202%2E193z%27%2F%253E%253C%2Fsvg%253E%22%29%7D%2Ecustom%2Dcheckbox%20%2Ecustom%2Dcontrol%2Dinput%3Aindeterminate%7E%2Ecustom%2Dcontrol%2Dlabel%3A%3Abefore%7Bbackground%2Dcolor%3A%23007bff%7D%2Ecustom%2Dcheckbox%20%2Ecustom%2Dcontrol%2Dinput%3Aindeterminate%7E%2Ecustom%2Dcontrol%2Dlabel%3A%3Aafter%7Bbackground%2Dimage%3Aurl%28%22data%3Aimage%2Fsvg%2Bxml%3Bcharset%3Dutf8%2C%253Csvg%20xmlns%3D%27http%3A%2F%2Fwww%2Ew3%2Eorg%2F2000%2Fsvg%27%20viewBox%3D%270%200%204%204%27%253E%253Cpath%20stroke%3D%27%2523fff%27%20d%3D%27M0%202h4%27%2F%253E%253C%2Fsvg%253E%22%29%7D%2Ecustom%2Dcheckbox%20%2Ecustom%2Dcontrol%2Dinput%3Adisabled%3Achecked%7E%2Ecustom%2Dcontrol%2Dlabel%3A%3Abefore%7Bbackground%2Dcolor%3Argba%280%2C123%2C255%2C%2E5%29%7D%2Ecustom%2Dcheckbox%20%2Ecustom%2Dcontrol%2Dinput%3Adisabled%3Aindeterminate%7E%2Ecustom%2Dcontrol%2Dlabel%3A%3Abefore%7Bbackground%2Dcolor%3Argba%280%2C123%2C255%2C%2E5%29%7D%2Ecustom%2Dradio%20%2Ecustom%2Dcontrol%2Dlabel%3A%3Abefore%7Bborder%2Dradius%3A50%25%7D%2Ecustom%2Dradio%20%2Ecustom%2Dcontrol%2Dinput%3Achecked%7E%2Ecustom%2Dcontrol%2Dlabel%3A%3Abefore%7Bbackground%2Dcolor%3A%23007bff%7D%2Ecustom%2Dradio%20%2Ecustom%2Dcontrol%2Dinput%3Achecked%7E%2Ecustom%2Dcontrol%2Dlabel%3A%3Aafter%7Bbackground%2Dimage%3Aurl%28%22data%3Aimage%2Fsvg%2Bxml%3Bcharset%3Dutf8%2C%253Csvg%20xmlns%3D%27http%3A%2F%2Fwww%2Ew3%2Eorg%2F2000%2Fsvg%27%20viewBox%3D%27%2D4%20%2D4%208%208%27%253E%253Ccircle%20r%3D%273%27%20fill%3D%27%2523fff%27%2F%253E%253C%2Fsvg%253E%22%29%7D%2Ecustom%2Dradio%20%2Ecustom%2Dcontrol%2Dinput%3Adisabled%3Achecked%7E%2Ecustom%2Dcontrol%2Dlabel%3A%3Abefore%7Bbackground%2Dcolor%3Argba%280%2C123%2C255%2C%2E5%29%7D%2Ecustom%2Dselect%7Bdisplay%3Ainline%2Dblock%3Bwidth%3A100%25%3Bheight%3Acalc%282%2E25rem%20%2B%202px%29%3Bpadding%3A%2E375rem%201%2E75rem%20%2E375rem%20%2E75rem%3Bline%2Dheight%3A1%2E5%3Bcolor%3A%23495057%3Bvertical%2Dalign%3Amiddle%3Bbackground%3A%23fff%20url%28%22data%3Aimage%2Fsvg%2Bxml%3Bcharset%3Dutf8%2C%253Csvg%20xmlns%3D%27http%3A%2F%2Fwww%2Ew3%2Eorg%2F2000%2Fsvg%27%20viewBox%3D%270%200%204%205%27%253E%253Cpath%20fill%3D%27%2523343a40%27%20d%3D%27M2%200L0%202h4zm0%205L0%203h4z%27%2F%253E%253C%2Fsvg%253E%22%29%20no%2Drepeat%20right%20%2E75rem%20center%3Bbackground%2Dsize%3A8px%2010px%3Bborder%3A1px%20solid%20%23ced4da%3Bborder%2Dradius%3A%2E25rem%3B%2Dwebkit%2Dappearance%3Anone%3B%2Dmoz%2Dappearance%3Anone%3Bappearance%3Anone%7D%2Ecustom%2Dselect%3Afocus%7Bborder%2Dcolor%3A%2380bdff%3Boutline%3A0%3Bbox%2Dshadow%3Ainset%200%201px%202px%20rgba%280%2C0%2C0%2C%2E075%29%2C0%200%205px%20rgba%28128%2C189%2C255%2C%2E5%29%7D%2Ecustom%2Dselect%3Afocus%3A%3A%2Dms%2Dvalue%7Bcolor%3A%23495057%3Bbackground%2Dcolor%3A%23fff%7D%2Ecustom%2Dselect%5Bmultiple%5D%2C%2Ecustom%2Dselect%5Bsize%5D%3Anot%28%5Bsize%3D%221%22%5D%29%7Bheight%3Aauto%3Bpadding%2Dright%3A%2E75rem%3Bbackground%2Dimage%3Anone%7D%2Ecustom%2Dselect%3Adisabled%7Bcolor%3A%236c757d%3Bbackground%2Dcolor%3A%23e9ecef%7D%2Ecustom%2Dselect%3A%3A%2Dms%2Dexpand%7Bopacity%3A0%7D%2Ecustom%2Dselect%2Dsm%7Bheight%3Acalc%281%2E8125rem%20%2B%202px%29%3Bpadding%2Dtop%3A%2E375rem%3Bpadding%2Dbottom%3A%2E375rem%3Bfont%2Dsize%3A75%25%7D%2Ecustom%2Dselect%2Dlg%7Bheight%3Acalc%282%2E875rem%20%2B%202px%29%3Bpadding%2Dtop%3A%2E375rem%3Bpadding%2Dbottom%3A%2E375rem%3Bfont%2Dsize%3A125%25%7D%2Ecustom%2Dfile%7Bposition%3Arelative%3Bdisplay%3Ainline%2Dblock%3Bwidth%3A100%25%3Bheight%3Acalc%282%2E25rem%20%2B%202px%29%3Bmargin%2Dbottom%3A0%7D%2Ecustom%2Dfile%2Dinput%7Bposition%3Arelative%3Bz%2Dindex%3A2%3Bwidth%3A100%25%3Bheight%3Acalc%282%2E25rem%20%2B%202px%29%3Bmargin%3A0%3Bopacity%3A0%7D%2Ecustom%2Dfile%2Dinput%3Afocus%7E%2Ecustom%2Dfile%2Dcontrol%7Bborder%2Dcolor%3A%2380bdff%3Bbox%2Dshadow%3A0%200%200%20%2E2rem%20rgba%280%2C123%2C255%2C%2E25%29%7D%2Ecustom%2Dfile%2Dinput%3Afocus%7E%2Ecustom%2Dfile%2Dcontrol%3A%3Abefore%7Bborder%2Dcolor%3A%2380bdff%7D%2Ecustom%2Dfile%2Dinput%3Alang%28en%29%7E%2Ecustom%2Dfile%2Dlabel%3A%3Aafter%7Bcontent%3A%22Browse%22%7D%2Ecustom%2Dfile%2Dlabel%7Bposition%3Aabsolute%3Btop%3A0%3Bright%3A0%3Bleft%3A0%3Bz%2Dindex%3A1%3Bheight%3Acalc%282%2E25rem%20%2B%202px%29%3Bpadding%3A%2E375rem%20%2E75rem%3Bline%2Dheight%3A1%2E5%3Bcolor%3A%23495057%3Bbackground%2Dcolor%3A%23fff%3Bborder%3A1px%20solid%20%23ced4da%3Bborder%2Dradius%3A%2E25rem%7D%2Ecustom%2Dfile%2Dlabel%3A%3Aafter%7Bposition%3Aabsolute%3Btop%3A0%3Bright%3A0%3Bbottom%3A0%3Bz%2Dindex%3A3%3Bdisplay%3Ablock%3Bheight%3Acalc%28calc%282%2E25rem%20%2B%202px%29%20%2D%201px%20%2A%202%29%3Bpadding%3A%2E375rem%20%2E75rem%3Bline%2Dheight%3A1%2E5%3Bcolor%3A%23495057%3Bcontent%3A%22Browse%22%3Bbackground%2Dcolor%3A%23e9ecef%3Bborder%2Dleft%3A1px%20solid%20%23ced4da%3Bborder%2Dradius%3A0%20%2E25rem%20%2E25rem%200%7D%2Enav%7Bdisplay%3A%2Dwebkit%2Dbox%3Bdisplay%3A%2Dms%2Dflexbox%3Bdisplay%3Aflex%3B%2Dms%2Dflex%2Dwrap%3Awrap%3Bflex%2Dwrap%3Awrap%3Bpadding%2Dleft%3A0%3Bmargin%2Dbottom%3A0%3Blist%2Dstyle%3Anone%7D%2Enav%2Dlink%7Bdisplay%3Ablock%3Bpadding%3A%2E5rem%201rem%7D%2Enav%2Dlink%3Afocus%2C%2Enav%2Dlink%3Ahover%7Btext%2Ddecoration%3Anone%7D%2Enav%2Dlink%2Edisabled%7Bcolor%3A%236c757d%7D%2Enav%2Dtabs%7Bborder%2Dbottom%3A1px%20solid%20%23dee2e6%7D%2Enav%2Dtabs%20%2Enav%2Ditem%7Bmargin%2Dbottom%3A%2D1px%7D%2Enav%2Dtabs%20%2Enav%2Dlink%7Bborder%3A1px%20solid%20transparent%3Bborder%2Dtop%2Dleft%2Dradius%3A%2E25rem%3Bborder%2Dtop%2Dright%2Dradius%3A%2E25rem%7D%2Enav%2Dtabs%20%2Enav%2Dlink%3Afocus%2C%2Enav%2Dtabs%20%2Enav%2Dlink%3Ahover%7Bborder%2Dcolor%3A%23e9ecef%20%23e9ecef%20%23dee2e6%7D%2Enav%2Dtabs%20%2Enav%2Dlink%2Edisabled%7Bcolor%3A%236c757d%3Bbackground%2Dcolor%3Atransparent%3Bborder%2Dcolor%3Atransparent%7D%2Enav%2Dtabs%20%2Enav%2Ditem%2Eshow%20%2Enav%2Dlink%2C%2Enav%2Dtabs%20%2Enav%2Dlink%2Eactive%7Bcolor%3A%23495057%3Bbackground%2Dcolor%3A%23fff%3Bborder%2Dcolor%3A%23dee2e6%20%23dee2e6%20%23fff%7D%2Enav%2Dtabs%20%2Edropdown%2Dmenu%7Bmargin%2Dtop%3A%2D1px%3Bborder%2Dtop%2Dleft%2Dradius%3A0%3Bborder%2Dtop%2Dright%2Dradius%3A0%7D%2Enav%2Dpills%20%2Enav%2Dlink%7Bborder%2Dradius%3A%2E25rem%7D%2Enav%2Dpills%20%2Enav%2Dlink%2Eactive%2C%2Enav%2Dpills%20%2Eshow%3E%2Enav%2Dlink%7Bcolor%3A%23fff%3Bbackground%2Dcolor%3A%23007bff%7D%2Enav%2Dfill%20%2Enav%2Ditem%7B%2Dwebkit%2Dbox%2Dflex%3A1%3B%2Dms%2Dflex%3A1%201%20auto%3Bflex%3A1%201%20auto%3Btext%2Dalign%3Acenter%7D%2Enav%2Djustified%20%2Enav%2Ditem%7B%2Dms%2Dflex%2Dpreferred%2Dsize%3A0%3Bflex%2Dbasis%3A0%3B%2Dwebkit%2Dbox%2Dflex%3A1%3B%2Dms%2Dflex%2Dpositive%3A1%3Bflex%2Dgrow%3A1%3Btext%2Dalign%3Acenter%7D%2Etab%2Dcontent%3E%2Etab%2Dpane%7Bdisplay%3Anone%7D%2Etab%2Dcontent%3E%2Eactive%7Bdisplay%3Ablock%7D%2Enavbar%7Bposition%3Arelative%3Bdisplay%3A%2Dwebkit%2Dbox%3Bdisplay%3A%2Dms%2Dflexbox%3Bdisplay%3Aflex%3B%2Dms%2Dflex%2Dwrap%3Awrap%3Bflex%2Dwrap%3Awrap%3B%2Dwebkit%2Dbox%2Dalign%3Acenter%3B%2Dms%2Dflex%2Dalign%3Acenter%3Balign%2Ditems%3Acenter%3B%2Dwebkit%2Dbox%2Dpack%3Ajustify%3B%2Dms%2Dflex%2Dpack%3Ajustify%3Bjustify%2Dcontent%3Aspace%2Dbetween%3Bpadding%3A%2E5rem%201rem%7D%2Enavbar%3E%2Econtainer%2C%2Enavbar%3E%2Econtainer%2Dfluid%7Bdisplay%3A%2Dwebkit%2Dbox%3Bdisplay%3A%2Dms%2Dflexbox%3Bdisplay%3Aflex%3B%2Dms%2Dflex%2Dwrap%3Awrap%3Bflex%2Dwrap%3Awrap%3B%2Dwebkit%2Dbox%2Dalign%3Acenter%3B%2Dms%2Dflex%2Dalign%3Acenter%3Balign%2Ditems%3Acenter%3B%2Dwebkit%2Dbox%2Dpack%3Ajustify%3B%2Dms%2Dflex%2Dpack%3Ajustify%3Bjustify%2Dcontent%3Aspace%2Dbetween%7D%2Enavbar%2Dbrand%7Bdisplay%3Ainline%2Dblock%3Bpadding%2Dtop%3A%2E3125rem%3Bpadding%2Dbottom%3A%2E3125rem%3Bmargin%2Dright%3A1rem%3Bfont%2Dsize%3A1%2E25rem%3Bline%2Dheight%3Ainherit%3Bwhite%2Dspace%3Anowrap%7D%2Enavbar%2Dbrand%3Afocus%2C%2Enavbar%2Dbrand%3Ahover%7Btext%2Ddecoration%3Anone%7D%2Enavbar%2Dnav%7Bdisplay%3A%2Dwebkit%2Dbox%3Bdisplay%3A%2Dms%2Dflexbox%3Bdisplay%3Aflex%3B%2Dwebkit%2Dbox%2Dorient%3Avertical%3B%2Dwebkit%2Dbox%2Ddirection%3Anormal%3B%2Dms%2Dflex%2Ddirection%3Acolumn%3Bflex%2Ddirection%3Acolumn%3Bpadding%2Dleft%3A0%3Bmargin%2Dbottom%3A0%3Blist%2Dstyle%3Anone%7D%2Enavbar%2Dnav%20%2Enav%2Dlink%7Bpadding%2Dright%3A0%3Bpadding%2Dleft%3A0%7D%2Enavbar%2Dnav%20%2Edropdown%2Dmenu%7Bposition%3Astatic%3Bfloat%3Anone%7D%2Enavbar%2Dtext%7Bdisplay%3Ainline%2Dblock%3Bpadding%2Dtop%3A%2E5rem%3Bpadding%2Dbottom%3A%2E5rem%7D%2Enavbar%2Dcollapse%7B%2Dms%2Dflex%2Dpreferred%2Dsize%3A100%25%3Bflex%2Dbasis%3A100%25%3B%2Dwebkit%2Dbox%2Dflex%3A1%3B%2Dms%2Dflex%2Dpositive%3A1%3Bflex%2Dgrow%3A1%3B%2Dwebkit%2Dbox%2Dalign%3Acenter%3B%2Dms%2Dflex%2Dalign%3Acenter%3Balign%2Ditems%3Acenter%7D%2Enavbar%2Dtoggler%7Bpadding%3A%2E25rem%20%2E75rem%3Bfont%2Dsize%3A1%2E25rem%3Bline%2Dheight%3A1%3Bbackground%2Dcolor%3Atransparent%3Bborder%3A1px%20solid%20transparent%3Bborder%2Dradius%3A%2E25rem%7D%2Enavbar%2Dtoggler%3Afocus%2C%2Enavbar%2Dtoggler%3Ahover%7Btext%2Ddecoration%3Anone%7D%2Enavbar%2Dtoggler%3Anot%28%3Adisabled%29%3Anot%28%2Edisabled%29%7Bcursor%3Apointer%7D%2Enavbar%2Dtoggler%2Dicon%7Bdisplay%3Ainline%2Dblock%3Bwidth%3A1%2E5em%3Bheight%3A1%2E5em%3Bvertical%2Dalign%3Amiddle%3Bcontent%3A%22%22%3Bbackground%3Ano%2Drepeat%20center%20center%3Bbackground%2Dsize%3A100%25%20100%25%7D%40media%20%28max%2Dwidth%3A575%2E98px%29%7B%2Enavbar%2Dexpand%2Dsm%3E%2Econtainer%2C%2Enavbar%2Dexpand%2Dsm%3E%2Econtainer%2Dfluid%7Bpadding%2Dright%3A0%3Bpadding%2Dleft%3A0%7D%7D%40media%20%28min%2Dwidth%3A576px%29%7B%2Enavbar%2Dexpand%2Dsm%7B%2Dwebkit%2Dbox%2Dorient%3Ahorizontal%3B%2Dwebkit%2Dbox%2Ddirection%3Anormal%3B%2Dms%2Dflex%2Dflow%3Arow%20nowrap%3Bflex%2Dflow%3Arow%20nowrap%3B%2Dwebkit%2Dbox%2Dpack%3Astart%3B%2Dms%2Dflex%2Dpack%3Astart%3Bjustify%2Dcontent%3Aflex%2Dstart%7D%2Enavbar%2Dexpand%2Dsm%20%2Enavbar%2Dnav%7B%2Dwebkit%2Dbox%2Dorient%3Ahorizontal%3B%2Dwebkit%2Dbox%2Ddirection%3Anormal%3B%2Dms%2Dflex%2Ddirection%3Arow%3Bflex%2Ddirection%3Arow%7D%2Enavbar%2Dexpand%2Dsm%20%2Enavbar%2Dnav%20%2Edropdown%2Dmenu%7Bposition%3Aabsolute%7D%2Enavbar%2Dexpand%2Dsm%20%2Enavbar%2Dnav%20%2Edropdown%2Dmenu%2Dright%7Bright%3A0%3Bleft%3Aauto%7D%2Enavbar%2Dexpand%2Dsm%20%2Enavbar%2Dnav%20%2Enav%2Dlink%7Bpadding%2Dright%3A%2E5rem%3Bpadding%2Dleft%3A%2E5rem%7D%2Enavbar%2Dexpand%2Dsm%3E%2Econtainer%2C%2Enavbar%2Dexpand%2Dsm%3E%2Econtainer%2Dfluid%7B%2Dms%2Dflex%2Dwrap%3Anowrap%3Bflex%2Dwrap%3Anowrap%7D%2Enavbar%2Dexpand%2Dsm%20%2Enavbar%2Dcollapse%7Bdisplay%3A%2Dwebkit%2Dbox%21important%3Bdisplay%3A%2Dms%2Dflexbox%21important%3Bdisplay%3Aflex%21important%3B%2Dms%2Dflex%2Dpreferred%2Dsize%3Aauto%3Bflex%2Dbasis%3Aauto%7D%2Enavbar%2Dexpand%2Dsm%20%2Enavbar%2Dtoggler%7Bdisplay%3Anone%7D%2Enavbar%2Dexpand%2Dsm%20%2Edropup%20%2Edropdown%2Dmenu%7Btop%3Aauto%3Bbottom%3A100%25%7D%7D%40media%20%28max%2Dwidth%3A767%2E98px%29%7B%2Enavbar%2Dexpand%2Dmd%3E%2Econtainer%2C%2Enavbar%2Dexpand%2Dmd%3E%2Econtainer%2Dfluid%7Bpadding%2Dright%3A0%3Bpadding%2Dleft%3A0%7D%7D%40media%20%28min%2Dwidth%3A768px%29%7B%2Enavbar%2Dexpand%2Dmd%7B%2Dwebkit%2Dbox%2Dorient%3Ahorizontal%3B%2Dwebkit%2Dbox%2Ddirection%3Anormal%3B%2Dms%2Dflex%2Dflow%3Arow%20nowrap%3Bflex%2Dflow%3Arow%20nowrap%3B%2Dwebkit%2Dbox%2Dpack%3Astart%3B%2Dms%2Dflex%2Dpack%3Astart%3Bjustify%2Dcontent%3Aflex%2Dstart%7D%2Enavbar%2Dexpand%2Dmd%20%2Enavbar%2Dnav%7B%2Dwebkit%2Dbox%2Dorient%3Ahorizontal%3B%2Dwebkit%2Dbox%2Ddirection%3Anormal%3B%2Dms%2Dflex%2Ddirection%3Arow%3Bflex%2Ddirection%3Arow%7D%2Enavbar%2Dexpand%2Dmd%20%2Enavbar%2Dnav%20%2Edropdown%2Dmenu%7Bposition%3Aabsolute%7D%2Enavbar%2Dexpand%2Dmd%20%2Enavbar%2Dnav%20%2Edropdown%2Dmenu%2Dright%7Bright%3A0%3Bleft%3Aauto%7D%2Enavbar%2Dexpand%2Dmd%20%2Enavbar%2Dnav%20%2Enav%2Dlink%7Bpadding%2Dright%3A%2E5rem%3Bpadding%2Dleft%3A%2E5rem%7D%2Enavbar%2Dexpand%2Dmd%3E%2Econtainer%2C%2Enavbar%2Dexpand%2Dmd%3E%2Econtainer%2Dfluid%7B%2Dms%2Dflex%2Dwrap%3Anowrap%3Bflex%2Dwrap%3Anowrap%7D%2Enavbar%2Dexpand%2Dmd%20%2Enavbar%2Dcollapse%7Bdisplay%3A%2Dwebkit%2Dbox%21important%3Bdisplay%3A%2Dms%2Dflexbox%21important%3Bdisplay%3Aflex%21important%3B%2Dms%2Dflex%2Dpreferred%2Dsize%3Aauto%3Bflex%2Dbasis%3Aauto%7D%2Enavbar%2Dexpand%2Dmd%20%2Enavbar%2Dtoggler%7Bdisplay%3Anone%7D%2Enavbar%2Dexpand%2Dmd%20%2Edropup%20%2Edropdown%2Dmenu%7Btop%3Aauto%3Bbottom%3A100%25%7D%7D%40media%20%28max%2Dwidth%3A991%2E98px%29%7B%2Enavbar%2Dexpand%2Dlg%3E%2Econtainer%2C%2Enavbar%2Dexpand%2Dlg%3E%2Econtainer%2Dfluid%7Bpadding%2Dright%3A0%3Bpadding%2Dleft%3A0%7D%7D%40media%20%28min%2Dwidth%3A992px%29%7B%2Enavbar%2Dexpand%2Dlg%7B%2Dwebkit%2Dbox%2Dorient%3Ahorizontal%3B%2Dwebkit%2Dbox%2Ddirection%3Anormal%3B%2Dms%2Dflex%2Dflow%3Arow%20nowrap%3Bflex%2Dflow%3Arow%20nowrap%3B%2Dwebkit%2Dbox%2Dpack%3Astart%3B%2Dms%2Dflex%2Dpack%3Astart%3Bjustify%2Dcontent%3Aflex%2Dstart%7D%2Enavbar%2Dexpand%2Dlg%20%2Enavbar%2Dnav%7B%2Dwebkit%2Dbox%2Dorient%3Ahorizontal%3B%2Dwebkit%2Dbox%2Ddirection%3Anormal%3B%2Dms%2Dflex%2Ddirection%3Arow%3Bflex%2Ddirection%3Arow%7D%2Enavbar%2Dexpand%2Dlg%20%2Enavbar%2Dnav%20%2Edropdown%2Dmenu%7Bposition%3Aabsolute%7D%2Enavbar%2Dexpand%2Dlg%20%2Enavbar%2Dnav%20%2Edropdown%2Dmenu%2Dright%7Bright%3A0%3Bleft%3Aauto%7D%2Enavbar%2Dexpand%2Dlg%20%2Enavbar%2Dnav%20%2Enav%2Dlink%7Bpadding%2Dright%3A%2E5rem%3Bpadding%2Dleft%3A%2E5rem%7D%2Enavbar%2Dexpand%2Dlg%3E%2Econtainer%2C%2Enavbar%2Dexpand%2Dlg%3E%2Econtainer%2Dfluid%7B%2Dms%2Dflex%2Dwrap%3Anowrap%3Bflex%2Dwrap%3Anowrap%7D%2Enavbar%2Dexpand%2Dlg%20%2Enavbar%2Dcollapse%7Bdisplay%3A%2Dwebkit%2Dbox%21important%3Bdisplay%3A%2Dms%2Dflexbox%21important%3Bdisplay%3Aflex%21important%3B%2Dms%2Dflex%2Dpreferred%2Dsize%3Aauto%3Bflex%2Dbasis%3Aauto%7D%2Enavbar%2Dexpand%2Dlg%20%2Enavbar%2Dtoggler%7Bdisplay%3Anone%7D%2Enavbar%2Dexpand%2Dlg%20%2Edropup%20%2Edropdown%2Dmenu%7Btop%3Aauto%3Bbottom%3A100%25%7D%7D%40media%20%28max%2Dwidth%3A1199%2E98px%29%7B%2Enavbar%2Dexpand%2Dxl%3E%2Econtainer%2C%2Enavbar%2Dexpand%2Dxl%3E%2Econtainer%2Dfluid%7Bpadding%2Dright%3A0%3Bpadding%2Dleft%3A0%7D%7D%40media%20%28min%2Dwidth%3A1200px%29%7B%2Enavbar%2Dexpand%2Dxl%7B%2Dwebkit%2Dbox%2Dorient%3Ahorizontal%3B%2Dwebkit%2Dbox%2Ddirection%3Anormal%3B%2Dms%2Dflex%2Dflow%3Arow%20nowrap%3Bflex%2Dflow%3Arow%20nowrap%3B%2Dwebkit%2Dbox%2Dpack%3Astart%3B%2Dms%2Dflex%2Dpack%3Astart%3Bjustify%2Dcontent%3Aflex%2Dstart%7D%2Enavbar%2Dexpand%2Dxl%20%2Enavbar%2Dnav%7B%2Dwebkit%2Dbox%2Dorient%3Ahorizontal%3B%2Dwebkit%2Dbox%2Ddirection%3Anormal%3B%2Dms%2Dflex%2Ddirection%3Arow%3Bflex%2Ddirection%3Arow%7D%2Enavbar%2Dexpand%2Dxl%20%2Enavbar%2Dnav%20%2Edropdown%2Dmenu%7Bposition%3Aabsolute%7D%2Enavbar%2Dexpand%2Dxl%20%2Enavbar%2Dnav%20%2Edropdown%2Dmenu%2Dright%7Bright%3A0%3Bleft%3Aauto%7D%2Enavbar%2Dexpand%2Dxl%20%2Enavbar%2Dnav%20%2Enav%2Dlink%7Bpadding%2Dright%3A%2E5rem%3Bpadding%2Dleft%3A%2E5rem%7D%2Enavbar%2Dexpand%2Dxl%3E%2Econtainer%2C%2Enavbar%2Dexpand%2Dxl%3E%2Econtainer%2Dfluid%7B%2Dms%2Dflex%2Dwrap%3Anowrap%3Bflex%2Dwrap%3Anowrap%7D%2Enavbar%2Dexpand%2Dxl%20%2Enavbar%2Dcollapse%7Bdisplay%3A%2Dwebkit%2Dbox%21important%3Bdisplay%3A%2Dms%2Dflexbox%21important%3Bdisplay%3Aflex%21important%3B%2Dms%2Dflex%2Dpreferred%2Dsize%3Aauto%3Bflex%2Dbasis%3Aauto%7D%2Enavbar%2Dexpand%2Dxl%20%2Enavbar%2Dtoggler%7Bdisplay%3Anone%7D%2Enavbar%2Dexpand%2Dxl%20%2Edropup%20%2Edropdown%2Dmenu%7Btop%3Aauto%3Bbottom%3A100%25%7D%7D%2Enavbar%2Dexpand%7B%2Dwebkit%2Dbox%2Dorient%3Ahorizontal%3B%2Dwebkit%2Dbox%2Ddirection%3Anormal%3B%2Dms%2Dflex%2Dflow%3Arow%20nowrap%3Bflex%2Dflow%3Arow%20nowrap%3B%2Dwebkit%2Dbox%2Dpack%3Astart%3B%2Dms%2Dflex%2Dpack%3Astart%3Bjustify%2Dcontent%3Aflex%2Dstart%7D%2Enavbar%2Dexpand%3E%2Econtainer%2C%2Enavbar%2Dexpand%3E%2Econtainer%2Dfluid%7Bpadding%2Dright%3A0%3Bpadding%2Dleft%3A0%7D%2Enavbar%2Dexpand%20%2Enavbar%2Dnav%7B%2Dwebkit%2Dbox%2Dorient%3Ahorizontal%3B%2Dwebkit%2Dbox%2Ddirection%3Anormal%3B%2Dms%2Dflex%2Ddirection%3Arow%3Bflex%2Ddirection%3Arow%7D%2Enavbar%2Dexpand%20%2Enavbar%2Dnav%20%2Edropdown%2Dmenu%7Bposition%3Aabsolute%7D%2Enavbar%2Dexpand%20%2Enavbar%2Dnav%20%2Edropdown%2Dmenu%2Dright%7Bright%3A0%3Bleft%3Aauto%7D%2Enavbar%2Dexpand%20%2Enavbar%2Dnav%20%2Enav%2Dlink%7Bpadding%2Dright%3A%2E5rem%3Bpadding%2Dleft%3A%2E5rem%7D%2Enavbar%2Dexpand%3E%2Econtainer%2C%2Enavbar%2Dexpand%3E%2Econtainer%2Dfluid%7B%2Dms%2Dflex%2Dwrap%3Anowrap%3Bflex%2Dwrap%3Anowrap%7D%2Enavbar%2Dexpand%20%2Enavbar%2Dcollapse%7Bdisplay%3A%2Dwebkit%2Dbox%21important%3Bdisplay%3A%2Dms%2Dflexbox%21important%3Bdisplay%3Aflex%21important%3B%2Dms%2Dflex%2Dpreferred%2Dsize%3Aauto%3Bflex%2Dbasis%3Aauto%7D%2Enavbar%2Dexpand%20%2Enavbar%2Dtoggler%7Bdisplay%3Anone%7D%2Enavbar%2Dexpand%20%2Edropup%20%2Edropdown%2Dmenu%7Btop%3Aauto%3Bbottom%3A100%25%7D%2Enavbar%2Dlight%20%2Enavbar%2Dbrand%7Bcolor%3Argba%280%2C0%2C0%2C%2E9%29%7D%2Enavbar%2Dlight%20%2Enavbar%2Dbrand%3Afocus%2C%2Enavbar%2Dlight%20%2Enavbar%2Dbrand%3Ahover%7Bcolor%3Argba%280%2C0%2C0%2C%2E9%29%7D%2Enavbar%2Dlight%20%2Enavbar%2Dnav%20%2Enav%2Dlink%7Bcolor%3Argba%280%2C0%2C0%2C%2E5%29%7D%2Enavbar%2Dlight%20%2Enavbar%2Dnav%20%2Enav%2Dlink%3Afocus%2C%2Enavbar%2Dlight%20%2Enavbar%2Dnav%20%2Enav%2Dlink%3Ahover%7Bcolor%3Argba%280%2C0%2C0%2C%2E7%29%7D%2Enavbar%2Dlight%20%2Enavbar%2Dnav%20%2Enav%2Dlink%2Edisabled%7Bcolor%3Argba%280%2C0%2C0%2C%2E3%29%7D%2Enavbar%2Dlight%20%2Enavbar%2Dnav%20%2Eactive%3E%2Enav%2Dlink%2C%2Enavbar%2Dlight%20%2Enavbar%2Dnav%20%2Enav%2Dlink%2Eactive%2C%2Enavbar%2Dlight%20%2Enavbar%2Dnav%20%2Enav%2Dlink%2Eshow%2C%2Enavbar%2Dlight%20%2Enavbar%2Dnav%20%2Eshow%3E%2Enav%2Dlink%7Bcolor%3Argba%280%2C0%2C0%2C%2E9%29%7D%2Enavbar%2Dlight%20%2Enavbar%2Dtoggler%7Bcolor%3Argba%280%2C0%2C0%2C%2E5%29%3Bborder%2Dcolor%3Argba%280%2C0%2C0%2C%2E1%29%7D%2Enavbar%2Dlight%20%2Enavbar%2Dtoggler%2Dicon%7Bbackground%2Dimage%3Aurl%28%22data%3Aimage%2Fsvg%2Bxml%3Bcharset%3Dutf8%2C%253Csvg%20viewBox%3D%270%200%2030%2030%27%20xmlns%3D%27http%3A%2F%2Fwww%2Ew3%2Eorg%2F2000%2Fsvg%27%253E%253Cpath%20stroke%3D%27rgba%280%2C%200%2C%200%2C%200%2E5%29%27%20stroke%2Dwidth%3D%272%27%20stroke%2Dlinecap%3D%27round%27%20stroke%2Dmiterlimit%3D%2710%27%20d%3D%27M4%207h22M4%2015h22M4%2023h22%27%2F%253E%253C%2Fsvg%253E%22%29%7D%2Enavbar%2Dlight%20%2Enavbar%2Dtext%7Bcolor%3Argba%280%2C0%2C0%2C%2E5%29%7D%2Enavbar%2Dlight%20%2Enavbar%2Dtext%20a%7Bcolor%3Argba%280%2C0%2C0%2C%2E9%29%7D%2Enavbar%2Dlight%20%2Enavbar%2Dtext%20a%3Afocus%2C%2Enavbar%2Dlight%20%2Enavbar%2Dtext%20a%3Ahover%7Bcolor%3Argba%280%2C0%2C0%2C%2E9%29%7D%2Enavbar%2Ddark%20%2Enavbar%2Dbrand%7Bcolor%3A%23fff%7D%2Enavbar%2Ddark%20%2Enavbar%2Dbrand%3Afocus%2C%2Enavbar%2Ddark%20%2Enavbar%2Dbrand%3Ahover%7Bcolor%3A%23fff%7D%2Enavbar%2Ddark%20%2Enavbar%2Dnav%20%2Enav%2Dlink%7Bcolor%3Argba%28255%2C255%2C255%2C%2E5%29%7D%2Enavbar%2Ddark%20%2Enavbar%2Dnav%20%2Enav%2Dlink%3Afocus%2C%2Enavbar%2Ddark%20%2Enavbar%2Dnav%20%2Enav%2Dlink%3Ahover%7Bcolor%3Argba%28255%2C255%2C255%2C%2E75%29%7D%2Enavbar%2Ddark%20%2Enavbar%2Dnav%20%2Enav%2Dlink%2Edisabled%7Bcolor%3Argba%28255%2C255%2C255%2C%2E25%29%7D%2Enavbar%2Ddark%20%2Enavbar%2Dnav%20%2Eactive%3E%2Enav%2Dlink%2C%2Enavbar%2Ddark%20%2Enavbar%2Dnav%20%2Enav%2Dlink%2Eactive%2C%2Enavbar%2Ddark%20%2Enavbar%2Dnav%20%2Enav%2Dlink%2Eshow%2C%2Enavbar%2Ddark%20%2Enavbar%2Dnav%20%2Eshow%3E%2Enav%2Dlink%7Bcolor%3A%23fff%7D%2Enavbar%2Ddark%20%2Enavbar%2Dtoggler%7Bcolor%3Argba%28255%2C255%2C255%2C%2E5%29%3Bborder%2Dcolor%3Argba%28255%2C255%2C255%2C%2E1%29%7D%2Enavbar%2Ddark%20%2Enavbar%2Dtoggler%2Dicon%7Bbackground%2Dimage%3Aurl%28%22data%3Aimage%2Fsvg%2Bxml%3Bcharset%3Dutf8%2C%253Csvg%20viewBox%3D%270%200%2030%2030%27%20xmlns%3D%27http%3A%2F%2Fwww%2Ew3%2Eorg%2F2000%2Fsvg%27%253E%253Cpath%20stroke%3D%27rgba%28255%2C%20255%2C%20255%2C%200%2E5%29%27%20stroke%2Dwidth%3D%272%27%20stroke%2Dlinecap%3D%27round%27%20stroke%2Dmiterlimit%3D%2710%27%20d%3D%27M4%207h22M4%2015h22M4%2023h22%27%2F%253E%253C%2Fsvg%253E%22%29%7D%2Enavbar%2Ddark%20%2Enavbar%2Dtext%7Bcolor%3Argba%28255%2C255%2C255%2C%2E5%29%7D%2Enavbar%2Ddark%20%2Enavbar%2Dtext%20a%7Bcolor%3A%23fff%7D%2Enavbar%2Ddark%20%2Enavbar%2Dtext%20a%3Afocus%2C%2Enavbar%2Ddark%20%2Enavbar%2Dtext%20a%3Ahover%7Bcolor%3A%23fff%7D%2Ecard%7Bposition%3Arelative%3Bdisplay%3A%2Dwebkit%2Dbox%3Bdisplay%3A%2Dms%2Dflexbox%3Bdisplay%3Aflex%3B%2Dwebkit%2Dbox%2Dorient%3Avertical%3B%2Dwebkit%2Dbox%2Ddirection%3Anormal%3B%2Dms%2Dflex%2Ddirection%3Acolumn%3Bflex%2Ddirection%3Acolumn%3Bmin%2Dwidth%3A0%3Bword%2Dwrap%3Abreak%2Dword%3Bbackground%2Dcolor%3A%23fff%3Bbackground%2Dclip%3Aborder%2Dbox%3Bborder%3A1px%20solid%20rgba%280%2C0%2C0%2C%2E125%29%3Bborder%2Dradius%3A%2E25rem%7D%2Ecard%3Ehr%7Bmargin%2Dright%3A0%3Bmargin%2Dleft%3A0%7D%2Ecard%3E%2Elist%2Dgroup%3Afirst%2Dchild%20%2Elist%2Dgroup%2Ditem%3Afirst%2Dchild%7Bborder%2Dtop%2Dleft%2Dradius%3A%2E25rem%3Bborder%2Dtop%2Dright%2Dradius%3A%2E25rem%7D%2Ecard%3E%2Elist%2Dgroup%3Alast%2Dchild%20%2Elist%2Dgroup%2Ditem%3Alast%2Dchild%7Bborder%2Dbottom%2Dright%2Dradius%3A%2E25rem%3Bborder%2Dbottom%2Dleft%2Dradius%3A%2E25rem%7D%2Ecard%2Dbody%7B%2Dwebkit%2Dbox%2Dflex%3A1%3B%2Dms%2Dflex%3A1%201%20auto%3Bflex%3A1%201%20auto%3Bpadding%3A1%2E25rem%7D%2Ecard%2Dtitle%7Bmargin%2Dbottom%3A%2E75rem%7D%2Ecard%2Dsubtitle%7Bmargin%2Dtop%3A%2D%2E375rem%3Bmargin%2Dbottom%3A0%7D%2Ecard%2Dtext%3Alast%2Dchild%7Bmargin%2Dbottom%3A0%7D%2Ecard%2Dlink%3Ahover%7Btext%2Ddecoration%3Anone%7D%2Ecard%2Dlink%2B%2Ecard%2Dlink%7Bmargin%2Dleft%3A1%2E25rem%7D%2Ecard%2Dheader%7Bpadding%3A%2E75rem%201%2E25rem%3Bmargin%2Dbottom%3A0%3Bbackground%2Dcolor%3Argba%280%2C0%2C0%2C%2E03%29%3Bborder%2Dbottom%3A1px%20solid%20rgba%280%2C0%2C0%2C%2E125%29%7D%2Ecard%2Dheader%3Afirst%2Dchild%7Bborder%2Dradius%3Acalc%28%2E25rem%20%2D%201px%29%20calc%28%2E25rem%20%2D%201px%29%200%200%7D%2Ecard%2Dheader%2B%2Elist%2Dgroup%20%2Elist%2Dgroup%2Ditem%3Afirst%2Dchild%7Bborder%2Dtop%3A0%7D%2Ecard%2Dfooter%7Bpadding%3A%2E75rem%201%2E25rem%3Bbackground%2Dcolor%3Argba%280%2C0%2C0%2C%2E03%29%3Bborder%2Dtop%3A1px%20solid%20rgba%280%2C0%2C0%2C%2E125%29%7D%2Ecard%2Dfooter%3Alast%2Dchild%7Bborder%2Dradius%3A0%200%20calc%28%2E25rem%20%2D%201px%29%20calc%28%2E25rem%20%2D%201px%29%7D%2Ecard%2Dheader%2Dtabs%7Bmargin%2Dright%3A%2D%2E625rem%3Bmargin%2Dbottom%3A%2D%2E75rem%3Bmargin%2Dleft%3A%2D%2E625rem%3Bborder%2Dbottom%3A0%7D%2Ecard%2Dheader%2Dpills%7Bmargin%2Dright%3A%2D%2E625rem%3Bmargin%2Dleft%3A%2D%2E625rem%7D%2Ecard%2Dimg%2Doverlay%7Bposition%3Aabsolute%3Btop%3A0%3Bright%3A0%3Bbottom%3A0%3Bleft%3A0%3Bpadding%3A1%2E25rem%7D%2Ecard%2Dimg%7Bwidth%3A100%25%3Bborder%2Dradius%3Acalc%28%2E25rem%20%2D%201px%29%7D%2Ecard%2Dimg%2Dtop%7Bwidth%3A100%25%3Bborder%2Dtop%2Dleft%2Dradius%3Acalc%28%2E25rem%20%2D%201px%29%3Bborder%2Dtop%2Dright%2Dradius%3Acalc%28%2E25rem%20%2D%201px%29%7D%2Ecard%2Dimg%2Dbottom%7Bwidth%3A100%25%3Bborder%2Dbottom%2Dright%2Dradius%3Acalc%28%2E25rem%20%2D%201px%29%3Bborder%2Dbottom%2Dleft%2Dradius%3Acalc%28%2E25rem%20%2D%201px%29%7D%2Ecard%2Ddeck%7Bdisplay%3A%2Dwebkit%2Dbox%3Bdisplay%3A%2Dms%2Dflexbox%3Bdisplay%3Aflex%3B%2Dwebkit%2Dbox%2Dorient%3Avertical%3B%2Dwebkit%2Dbox%2Ddirection%3Anormal%3B%2Dms%2Dflex%2Ddirection%3Acolumn%3Bflex%2Ddirection%3Acolumn%7D%2Ecard%2Ddeck%20%2Ecard%7Bmargin%2Dbottom%3A15px%7D%40media%20%28min%2Dwidth%3A576px%29%7B%2Ecard%2Ddeck%7B%2Dwebkit%2Dbox%2Dorient%3Ahorizontal%3B%2Dwebkit%2Dbox%2Ddirection%3Anormal%3B%2Dms%2Dflex%2Dflow%3Arow%20wrap%3Bflex%2Dflow%3Arow%20wrap%3Bmargin%2Dright%3A%2D15px%3Bmargin%2Dleft%3A%2D15px%7D%2Ecard%2Ddeck%20%2Ecard%7Bdisplay%3A%2Dwebkit%2Dbox%3Bdisplay%3A%2Dms%2Dflexbox%3Bdisplay%3Aflex%3B%2Dwebkit%2Dbox%2Dflex%3A1%3B%2Dms%2Dflex%3A1%200%200%25%3Bflex%3A1%200%200%25%3B%2Dwebkit%2Dbox%2Dorient%3Avertical%3B%2Dwebkit%2Dbox%2Ddirection%3Anormal%3B%2Dms%2Dflex%2Ddirection%3Acolumn%3Bflex%2Ddirection%3Acolumn%3Bmargin%2Dright%3A15px%3Bmargin%2Dbottom%3A0%3Bmargin%2Dleft%3A15px%7D%7D%2Ecard%2Dgroup%7Bdisplay%3A%2Dwebkit%2Dbox%3Bdisplay%3A%2Dms%2Dflexbox%3Bdisplay%3Aflex%3B%2Dwebkit%2Dbox%2Dorient%3Avertical%3B%2Dwebkit%2Dbox%2Ddirection%3Anormal%3B%2Dms%2Dflex%2Ddirection%3Acolumn%3Bflex%2Ddirection%3Acolumn%7D%2Ecard%2Dgroup%3E%2Ecard%7Bmargin%2Dbottom%3A15px%7D%40media%20%28min%2Dwidth%3A576px%29%7B%2Ecard%2Dgroup%7B%2Dwebkit%2Dbox%2Dorient%3Ahorizontal%3B%2Dwebkit%2Dbox%2Ddirection%3Anormal%3B%2Dms%2Dflex%2Dflow%3Arow%20wrap%3Bflex%2Dflow%3Arow%20wrap%7D%2Ecard%2Dgroup%3E%2Ecard%7B%2Dwebkit%2Dbox%2Dflex%3A1%3B%2Dms%2Dflex%3A1%200%200%25%3Bflex%3A1%200%200%25%3Bmargin%2Dbottom%3A0%7D%2Ecard%2Dgroup%3E%2Ecard%2B%2Ecard%7Bmargin%2Dleft%3A0%3Bborder%2Dleft%3A0%7D%2Ecard%2Dgroup%3E%2Ecard%3Afirst%2Dchild%7Bborder%2Dtop%2Dright%2Dradius%3A0%3Bborder%2Dbottom%2Dright%2Dradius%3A0%7D%2Ecard%2Dgroup%3E%2Ecard%3Afirst%2Dchild%20%2Ecard%2Dheader%2C%2Ecard%2Dgroup%3E%2Ecard%3Afirst%2Dchild%20%2Ecard%2Dimg%2Dtop%7Bborder%2Dtop%2Dright%2Dradius%3A0%7D%2Ecard%2Dgroup%3E%2Ecard%3Afirst%2Dchild%20%2Ecard%2Dfooter%2C%2Ecard%2Dgroup%3E%2Ecard%3Afirst%2Dchild%20%2Ecard%2Dimg%2Dbottom%7Bborder%2Dbottom%2Dright%2Dradius%3A0%7D%2Ecard%2Dgroup%3E%2Ecard%3Alast%2Dchild%7Bborder%2Dtop%2Dleft%2Dradius%3A0%3Bborder%2Dbottom%2Dleft%2Dradius%3A0%7D%2Ecard%2Dgroup%3E%2Ecard%3Alast%2Dchild%20%2Ecard%2Dheader%2C%2Ecard%2Dgroup%3E%2Ecard%3Alast%2Dchild%20%2Ecard%2Dimg%2Dtop%7Bborder%2Dtop%2Dleft%2Dradius%3A0%7D%2Ecard%2Dgroup%3E%2Ecard%3Alast%2Dchild%20%2Ecard%2Dfooter%2C%2Ecard%2Dgroup%3E%2Ecard%3Alast%2Dchild%20%2Ecard%2Dimg%2Dbottom%7Bborder%2Dbottom%2Dleft%2Dradius%3A0%7D%2Ecard%2Dgroup%3E%2Ecard%3Aonly%2Dchild%7Bborder%2Dradius%3A%2E25rem%7D%2Ecard%2Dgroup%3E%2Ecard%3Aonly%2Dchild%20%2Ecard%2Dheader%2C%2Ecard%2Dgroup%3E%2Ecard%3Aonly%2Dchild%20%2Ecard%2Dimg%2Dtop%7Bborder%2Dtop%2Dleft%2Dradius%3A%2E25rem%3Bborder%2Dtop%2Dright%2Dradius%3A%2E25rem%7D%2Ecard%2Dgroup%3E%2Ecard%3Aonly%2Dchild%20%2Ecard%2Dfooter%2C%2Ecard%2Dgroup%3E%2Ecard%3Aonly%2Dchild%20%2Ecard%2Dimg%2Dbottom%7Bborder%2Dbottom%2Dright%2Dradius%3A%2E25rem%3Bborder%2Dbottom%2Dleft%2Dradius%3A%2E25rem%7D%2Ecard%2Dgroup%3E%2Ecard%3Anot%28%3Afirst%2Dchild%29%3Anot%28%3Alast%2Dchild%29%3Anot%28%3Aonly%2Dchild%29%7Bborder%2Dradius%3A0%7D%2Ecard%2Dgroup%3E%2Ecard%3Anot%28%3Afirst%2Dchild%29%3Anot%28%3Alast%2Dchild%29%3Anot%28%3Aonly%2Dchild%29%20%2Ecard%2Dfooter%2C%2Ecard%2Dgroup%3E%2Ecard%3Anot%28%3Afirst%2Dchild%29%3Anot%28%3Alast%2Dchild%29%3Anot%28%3Aonly%2Dchild%29%20%2Ecard%2Dheader%2C%2Ecard%2Dgroup%3E%2Ecard%3Anot%28%3Afirst%2Dchild%29%3Anot%28%3Alast%2Dchild%29%3Anot%28%3Aonly%2Dchild%29%20%2Ecard%2Dimg%2Dbottom%2C%2Ecard%2Dgroup%3E%2Ecard%3Anot%28%3Afirst%2Dchild%29%3Anot%28%3Alast%2Dchild%29%3Anot%28%3Aonly%2Dchild%29%20%2Ecard%2Dimg%2Dtop%7Bborder%2Dradius%3A0%7D%7D%2Ecard%2Dcolumns%20%2Ecard%7Bmargin%2Dbottom%3A%2E75rem%7D%40media%20%28min%2Dwidth%3A576px%29%7B%2Ecard%2Dcolumns%7B%2Dwebkit%2Dcolumn%2Dcount%3A3%3B%2Dmoz%2Dcolumn%2Dcount%3A3%3Bcolumn%2Dcount%3A3%3B%2Dwebkit%2Dcolumn%2Dgap%3A1%2E25rem%3B%2Dmoz%2Dcolumn%2Dgap%3A1%2E25rem%3Bcolumn%2Dgap%3A1%2E25rem%7D%2Ecard%2Dcolumns%20%2Ecard%7Bdisplay%3Ainline%2Dblock%3Bwidth%3A100%25%7D%7D%2Ebreadcrumb%7Bdisplay%3A%2Dwebkit%2Dbox%3Bdisplay%3A%2Dms%2Dflexbox%3Bdisplay%3Aflex%3B%2Dms%2Dflex%2Dwrap%3Awrap%3Bflex%2Dwrap%3Awrap%3Bpadding%3A%2E75rem%201rem%3Bmargin%2Dbottom%3A1rem%3Blist%2Dstyle%3Anone%3Bbackground%2Dcolor%3A%23e9ecef%3Bborder%2Dradius%3A%2E25rem%7D%2Ebreadcrumb%2Ditem%2B%2Ebreadcrumb%2Ditem%3A%3Abefore%7Bdisplay%3Ainline%2Dblock%3Bpadding%2Dright%3A%2E5rem%3Bpadding%2Dleft%3A%2E5rem%3Bcolor%3A%236c757d%3Bcontent%3A%22%2F%22%7D%2Ebreadcrumb%2Ditem%2B%2Ebreadcrumb%2Ditem%3Ahover%3A%3Abefore%7Btext%2Ddecoration%3Aunderline%7D%2Ebreadcrumb%2Ditem%2B%2Ebreadcrumb%2Ditem%3Ahover%3A%3Abefore%7Btext%2Ddecoration%3Anone%7D%2Ebreadcrumb%2Ditem%2Eactive%7Bcolor%3A%236c757d%7D%2Epagination%7Bdisplay%3A%2Dwebkit%2Dbox%3Bdisplay%3A%2Dms%2Dflexbox%3Bdisplay%3Aflex%3Bpadding%2Dleft%3A0%3Blist%2Dstyle%3Anone%3Bborder%2Dradius%3A%2E25rem%7D%2Epage%2Dlink%7Bposition%3Arelative%3Bdisplay%3Ablock%3Bpadding%3A%2E5rem%20%2E75rem%3Bmargin%2Dleft%3A%2D1px%3Bline%2Dheight%3A1%2E25%3Bcolor%3A%23007bff%3Bbackground%2Dcolor%3A%23fff%3Bborder%3A1px%20solid%20%23dee2e6%7D%2Epage%2Dlink%3Ahover%7Bcolor%3A%230056b3%3Btext%2Ddecoration%3Anone%3Bbackground%2Dcolor%3A%23e9ecef%3Bborder%2Dcolor%3A%23dee2e6%7D%2Epage%2Dlink%3Afocus%7Bz%2Dindex%3A2%3Boutline%3A0%3Bbox%2Dshadow%3A0%200%200%20%2E2rem%20rgba%280%2C123%2C255%2C%2E25%29%7D%2Epage%2Dlink%3Anot%28%3Adisabled%29%3Anot%28%2Edisabled%29%7Bcursor%3Apointer%7D%2Epage%2Ditem%3Afirst%2Dchild%20%2Epage%2Dlink%7Bmargin%2Dleft%3A0%3Bborder%2Dtop%2Dleft%2Dradius%3A%2E25rem%3Bborder%2Dbottom%2Dleft%2Dradius%3A%2E25rem%7D%2Epage%2Ditem%3Alast%2Dchild%20%2Epage%2Dlink%7Bborder%2Dtop%2Dright%2Dradius%3A%2E25rem%3Bborder%2Dbottom%2Dright%2Dradius%3A%2E25rem%7D%2Epage%2Ditem%2Eactive%20%2Epage%2Dlink%7Bz%2Dindex%3A1%3Bcolor%3A%23fff%3Bbackground%2Dcolor%3A%23007bff%3Bborder%2Dcolor%3A%23007bff%7D%2Epage%2Ditem%2Edisabled%20%2Epage%2Dlink%7Bcolor%3A%236c757d%3Bpointer%2Devents%3Anone%3Bcursor%3Aauto%3Bbackground%2Dcolor%3A%23fff%3Bborder%2Dcolor%3A%23dee2e6%7D%2Epagination%2Dlg%20%2Epage%2Dlink%7Bpadding%3A%2E75rem%201%2E5rem%3Bfont%2Dsize%3A1%2E25rem%3Bline%2Dheight%3A1%2E5%7D%2Epagination%2Dlg%20%2Epage%2Ditem%3Afirst%2Dchild%20%2Epage%2Dlink%7Bborder%2Dtop%2Dleft%2Dradius%3A%2E3rem%3Bborder%2Dbottom%2Dleft%2Dradius%3A%2E3rem%7D%2Epagination%2Dlg%20%2Epage%2Ditem%3Alast%2Dchild%20%2Epage%2Dlink%7Bborder%2Dtop%2Dright%2Dradius%3A%2E3rem%3Bborder%2Dbottom%2Dright%2Dradius%3A%2E3rem%7D%2Epagination%2Dsm%20%2Epage%2Dlink%7Bpadding%3A%2E25rem%20%2E5rem%3Bfont%2Dsize%3A%2E875rem%3Bline%2Dheight%3A1%2E5%7D%2Epagination%2Dsm%20%2Epage%2Ditem%3Afirst%2Dchild%20%2Epage%2Dlink%7Bborder%2Dtop%2Dleft%2Dradius%3A%2E2rem%3Bborder%2Dbottom%2Dleft%2Dradius%3A%2E2rem%7D%2Epagination%2Dsm%20%2Epage%2Ditem%3Alast%2Dchild%20%2Epage%2Dlink%7Bborder%2Dtop%2Dright%2Dradius%3A%2E2rem%3Bborder%2Dbottom%2Dright%2Dradius%3A%2E2rem%7D%2Ebadge%7Bdisplay%3Ainline%2Dblock%3Bpadding%3A%2E25em%20%2E4em%3Bfont%2Dsize%3A75%25%3Bfont%2Dweight%3A700%3Bline%2Dheight%3A1%3Btext%2Dalign%3Acenter%3Bwhite%2Dspace%3Anowrap%3Bvertical%2Dalign%3Abaseline%3Bborder%2Dradius%3A%2E25rem%7D%2Ebadge%3Aempty%7Bdisplay%3Anone%7D%2Ebtn%20%2Ebadge%7Bposition%3Arelative%3Btop%3A%2D1px%7D%2Ebadge%2Dpill%7Bpadding%2Dright%3A%2E6em%3Bpadding%2Dleft%3A%2E6em%3Bborder%2Dradius%3A10rem%7D%2Ebadge%2Dprimary%7Bcolor%3A%23fff%3Bbackground%2Dcolor%3A%23007bff%7D%2Ebadge%2Dprimary%5Bhref%5D%3Afocus%2C%2Ebadge%2Dprimary%5Bhref%5D%3Ahover%7Bcolor%3A%23fff%3Btext%2Ddecoration%3Anone%3Bbackground%2Dcolor%3A%230062cc%7D%2Ebadge%2Dsecondary%7Bcolor%3A%23fff%3Bbackground%2Dcolor%3A%236c757d%7D%2Ebadge%2Dsecondary%5Bhref%5D%3Afocus%2C%2Ebadge%2Dsecondary%5Bhref%5D%3Ahover%7Bcolor%3A%23fff%3Btext%2Ddecoration%3Anone%3Bbackground%2Dcolor%3A%23545b62%7D%2Ebadge%2Dsuccess%7Bcolor%3A%23fff%3Bbackground%2Dcolor%3A%2328a745%7D%2Ebadge%2Dsuccess%5Bhref%5D%3Afocus%2C%2Ebadge%2Dsuccess%5Bhref%5D%3Ahover%7Bcolor%3A%23fff%3Btext%2Ddecoration%3Anone%3Bbackground%2Dcolor%3A%231e7e34%7D%2Ebadge%2Dinfo%7Bcolor%3A%23fff%3Bbackground%2Dcolor%3A%2317a2b8%7D%2Ebadge%2Dinfo%5Bhref%5D%3Afocus%2C%2Ebadge%2Dinfo%5Bhref%5D%3Ahover%7Bcolor%3A%23fff%3Btext%2Ddecoration%3Anone%3Bbackground%2Dcolor%3A%23117a8b%7D%2Ebadge%2Dwarning%7Bcolor%3A%23212529%3Bbackground%2Dcolor%3A%23ffc107%7D%2Ebadge%2Dwarning%5Bhref%5D%3Afocus%2C%2Ebadge%2Dwarning%5Bhref%5D%3Ahover%7Bcolor%3A%23212529%3Btext%2Ddecoration%3Anone%3Bbackground%2Dcolor%3A%23d39e00%7D%2Ebadge%2Ddanger%7Bcolor%3A%23fff%3Bbackground%2Dcolor%3A%23dc3545%7D%2Ebadge%2Ddanger%5Bhref%5D%3Afocus%2C%2Ebadge%2Ddanger%5Bhref%5D%3Ahover%7Bcolor%3A%23fff%3Btext%2Ddecoration%3Anone%3Bbackground%2Dcolor%3A%23bd2130%7D%2Ebadge%2Dlight%7Bcolor%3A%23212529%3Bbackground%2Dcolor%3A%23f8f9fa%7D%2Ebadge%2Dlight%5Bhref%5D%3Afocus%2C%2Ebadge%2Dlight%5Bhref%5D%3Ahover%7Bcolor%3A%23212529%3Btext%2Ddecoration%3Anone%3Bbackground%2Dcolor%3A%23dae0e5%7D%2Ebadge%2Ddark%7Bcolor%3A%23fff%3Bbackground%2Dcolor%3A%23343a40%7D%2Ebadge%2Ddark%5Bhref%5D%3Afocus%2C%2Ebadge%2Ddark%5Bhref%5D%3Ahover%7Bcolor%3A%23fff%3Btext%2Ddecoration%3Anone%3Bbackground%2Dcolor%3A%231d2124%7D%2Ejumbotron%7Bpadding%3A2rem%201rem%3Bmargin%2Dbottom%3A2rem%3Bbackground%2Dcolor%3A%23e9ecef%3Bborder%2Dradius%3A%2E3rem%7D%40media%20%28min%2Dwidth%3A576px%29%7B%2Ejumbotron%7Bpadding%3A4rem%202rem%7D%7D%2Ejumbotron%2Dfluid%7Bpadding%2Dright%3A0%3Bpadding%2Dleft%3A0%3Bborder%2Dradius%3A0%7D%2Ealert%7Bposition%3Arelative%3Bpadding%3A%2E75rem%201%2E25rem%3Bmargin%2Dbottom%3A1rem%3Bborder%3A1px%20solid%20transparent%3Bborder%2Dradius%3A%2E25rem%7D%2Ealert%2Dheading%7Bcolor%3Ainherit%7D%2Ealert%2Dlink%7Bfont%2Dweight%3A700%7D%2Ealert%2Ddismissible%7Bpadding%2Dright%3A4rem%7D%2Ealert%2Ddismissible%20%2Eclose%7Bposition%3Aabsolute%3Btop%3A0%3Bright%3A0%3Bpadding%3A%2E75rem%201%2E25rem%3Bcolor%3Ainherit%7D%2Ealert%2Dprimary%7Bcolor%3A%23004085%3Bbackground%2Dcolor%3A%23cce5ff%3Bborder%2Dcolor%3A%23b8daff%7D%2Ealert%2Dprimary%20hr%7Bborder%2Dtop%2Dcolor%3A%239fcdff%7D%2Ealert%2Dprimary%20%2Ealert%2Dlink%7Bcolor%3A%23002752%7D%2Ealert%2Dsecondary%7Bcolor%3A%23383d41%3Bbackground%2Dcolor%3A%23e2e3e5%3Bborder%2Dcolor%3A%23d6d8db%7D%2Ealert%2Dsecondary%20hr%7Bborder%2Dtop%2Dcolor%3A%23c8cbcf%7D%2Ealert%2Dsecondary%20%2Ealert%2Dlink%7Bcolor%3A%23202326%7D%2Ealert%2Dsuccess%7Bcolor%3A%23155724%3Bbackground%2Dcolor%3A%23d4edda%3Bborder%2Dcolor%3A%23c3e6cb%7D%2Ealert%2Dsuccess%20hr%7Bborder%2Dtop%2Dcolor%3A%23b1dfbb%7D%2Ealert%2Dsuccess%20%2Ealert%2Dlink%7Bcolor%3A%230b2e13%7D%2Ealert%2Dinfo%7Bcolor%3A%230c5460%3Bbackground%2Dcolor%3A%23d1ecf1%3Bborder%2Dcolor%3A%23bee5eb%7D%2Ealert%2Dinfo%20hr%7Bborder%2Dtop%2Dcolor%3A%23abdde5%7D%2Ealert%2Dinfo%20%2Ealert%2Dlink%7Bcolor%3A%23062c33%7D%2Ealert%2Dwarning%7Bcolor%3A%23856404%3Bbackground%2Dcolor%3A%23fff3cd%3Bborder%2Dcolor%3A%23ffeeba%7D%2Ealert%2Dwarning%20hr%7Bborder%2Dtop%2Dcolor%3A%23ffe8a1%7D%2Ealert%2Dwarning%20%2Ealert%2Dlink%7Bcolor%3A%23533f03%7D%2Ealert%2Ddanger%7Bcolor%3A%23721c24%3Bbackground%2Dcolor%3A%23f8d7da%3Bborder%2Dcolor%3A%23f5c6cb%7D%2Ealert%2Ddanger%20hr%7Bborder%2Dtop%2Dcolor%3A%23f1b0b7%7D%2Ealert%2Ddanger%20%2Ealert%2Dlink%7Bcolor%3A%23491217%7D%2Ealert%2Dlight%7Bcolor%3A%23818182%3Bbackground%2Dcolor%3A%23fefefe%3Bborder%2Dcolor%3A%23fdfdfe%7D%2Ealert%2Dlight%20hr%7Bborder%2Dtop%2Dcolor%3A%23ececf6%7D%2Ealert%2Dlight%20%2Ealert%2Dlink%7Bcolor%3A%23686868%7D%2Ealert%2Ddark%7Bcolor%3A%231b1e21%3Bbackground%2Dcolor%3A%23d6d8d9%3Bborder%2Dcolor%3A%23c6c8ca%7D%2Ealert%2Ddark%20hr%7Bborder%2Dtop%2Dcolor%3A%23b9bbbe%7D%2Ealert%2Ddark%20%2Ealert%2Dlink%7Bcolor%3A%23040505%7D%40%2Dwebkit%2Dkeyframes%20progress%2Dbar%2Dstripes%7Bfrom%7Bbackground%2Dposition%3A1rem%200%7Dto%7Bbackground%2Dposition%3A0%200%7D%7D%40keyframes%20progress%2Dbar%2Dstripes%7Bfrom%7Bbackground%2Dposition%3A1rem%200%7Dto%7Bbackground%2Dposition%3A0%200%7D%7D%2Eprogress%7Bdisplay%3A%2Dwebkit%2Dbox%3Bdisplay%3A%2Dms%2Dflexbox%3Bdisplay%3Aflex%3Bheight%3A1rem%3Boverflow%3Ahidden%3Bfont%2Dsize%3A%2E75rem%3Bbackground%2Dcolor%3A%23e9ecef%3Bborder%2Dradius%3A%2E25rem%7D%2Eprogress%2Dbar%7Bdisplay%3A%2Dwebkit%2Dbox%3Bdisplay%3A%2Dms%2Dflexbox%3Bdisplay%3Aflex%3B%2Dwebkit%2Dbox%2Dorient%3Avertical%3B%2Dwebkit%2Dbox%2Ddirection%3Anormal%3B%2Dms%2Dflex%2Ddirection%3Acolumn%3Bflex%2Ddirection%3Acolumn%3B%2Dwebkit%2Dbox%2Dpack%3Acenter%3B%2Dms%2Dflex%2Dpack%3Acenter%3Bjustify%2Dcontent%3Acenter%3Bcolor%3A%23fff%3Btext%2Dalign%3Acenter%3Bbackground%2Dcolor%3A%23007bff%3Btransition%3Awidth%20%2E6s%20ease%7D%2Eprogress%2Dbar%2Dstriped%7Bbackground%2Dimage%3Alinear%2Dgradient%2845deg%2Crgba%28255%2C255%2C255%2C%2E15%29%2025%25%2Ctransparent%2025%25%2Ctransparent%2050%25%2Crgba%28255%2C255%2C255%2C%2E15%29%2050%25%2Crgba%28255%2C255%2C255%2C%2E15%29%2075%25%2Ctransparent%2075%25%2Ctransparent%29%3Bbackground%2Dsize%3A1rem%201rem%7D%2Eprogress%2Dbar%2Danimated%7B%2Dwebkit%2Danimation%3Aprogress%2Dbar%2Dstripes%201s%20linear%20infinite%3Banimation%3Aprogress%2Dbar%2Dstripes%201s%20linear%20infinite%7D%2Emedia%7Bdisplay%3A%2Dwebkit%2Dbox%3Bdisplay%3A%2Dms%2Dflexbox%3Bdisplay%3Aflex%3B%2Dwebkit%2Dbox%2Dalign%3Astart%3B%2Dms%2Dflex%2Dalign%3Astart%3Balign%2Ditems%3Aflex%2Dstart%7D%2Emedia%2Dbody%7B%2Dwebkit%2Dbox%2Dflex%3A1%3B%2Dms%2Dflex%3A1%3Bflex%3A1%7D%2Elist%2Dgroup%7Bdisplay%3A%2Dwebkit%2Dbox%3Bdisplay%3A%2Dms%2Dflexbox%3Bdisplay%3Aflex%3B%2Dwebkit%2Dbox%2Dorient%3Avertical%3B%2Dwebkit%2Dbox%2Ddirection%3Anormal%3B%2Dms%2Dflex%2Ddirection%3Acolumn%3Bflex%2Ddirection%3Acolumn%3Bpadding%2Dleft%3A0%3Bmargin%2Dbottom%3A0%7D%2Elist%2Dgroup%2Ditem%2Daction%7Bwidth%3A100%25%3Bcolor%3A%23495057%3Btext%2Dalign%3Ainherit%7D%2Elist%2Dgroup%2Ditem%2Daction%3Afocus%2C%2Elist%2Dgroup%2Ditem%2Daction%3Ahover%7Bcolor%3A%23495057%3Btext%2Ddecoration%3Anone%3Bbackground%2Dcolor%3A%23f8f9fa%7D%2Elist%2Dgroup%2Ditem%2Daction%3Aactive%7Bcolor%3A%23212529%3Bbackground%2Dcolor%3A%23e9ecef%7D%2Elist%2Dgroup%2Ditem%7Bposition%3Arelative%3Bdisplay%3Ablock%3Bpadding%3A%2E75rem%201%2E25rem%3Bmargin%2Dbottom%3A%2D1px%3Bbackground%2Dcolor%3A%23fff%3Bborder%3A1px%20solid%20rgba%280%2C0%2C0%2C%2E125%29%7D%2Elist%2Dgroup%2Ditem%3Afirst%2Dchild%7Bborder%2Dtop%2Dleft%2Dradius%3A%2E25rem%3Bborder%2Dtop%2Dright%2Dradius%3A%2E25rem%7D%2Elist%2Dgroup%2Ditem%3Alast%2Dchild%7Bmargin%2Dbottom%3A0%3Bborder%2Dbottom%2Dright%2Dradius%3A%2E25rem%3Bborder%2Dbottom%2Dleft%2Dradius%3A%2E25rem%7D%2Elist%2Dgroup%2Ditem%3Afocus%2C%2Elist%2Dgroup%2Ditem%3Ahover%7Bz%2Dindex%3A1%3Btext%2Ddecoration%3Anone%7D%2Elist%2Dgroup%2Ditem%2Edisabled%2C%2Elist%2Dgroup%2Ditem%3Adisabled%7Bcolor%3A%236c757d%3Bbackground%2Dcolor%3A%23fff%7D%2Elist%2Dgroup%2Ditem%2Eactive%7Bz%2Dindex%3A2%3Bcolor%3A%23fff%3Bbackground%2Dcolor%3A%23007bff%3Bborder%2Dcolor%3A%23007bff%7D%2Elist%2Dgroup%2Dflush%20%2Elist%2Dgroup%2Ditem%7Bborder%2Dright%3A0%3Bborder%2Dleft%3A0%3Bborder%2Dradius%3A0%7D%2Elist%2Dgroup%2Dflush%3Afirst%2Dchild%20%2Elist%2Dgroup%2Ditem%3Afirst%2Dchild%7Bborder%2Dtop%3A0%7D%2Elist%2Dgroup%2Dflush%3Alast%2Dchild%20%2Elist%2Dgroup%2Ditem%3Alast%2Dchild%7Bborder%2Dbottom%3A0%7D%2Elist%2Dgroup%2Ditem%2Dprimary%7Bcolor%3A%23004085%3Bbackground%2Dcolor%3A%23b8daff%7D%2Elist%2Dgroup%2Ditem%2Dprimary%2Elist%2Dgroup%2Ditem%2Daction%3Afocus%2C%2Elist%2Dgroup%2Ditem%2Dprimary%2Elist%2Dgroup%2Ditem%2Daction%3Ahover%7Bcolor%3A%23004085%3Bbackground%2Dcolor%3A%239fcdff%7D%2Elist%2Dgroup%2Ditem%2Dprimary%2Elist%2Dgroup%2Ditem%2Daction%2Eactive%7Bcolor%3A%23fff%3Bbackground%2Dcolor%3A%23004085%3Bborder%2Dcolor%3A%23004085%7D%2Elist%2Dgroup%2Ditem%2Dsecondary%7Bcolor%3A%23383d41%3Bbackground%2Dcolor%3A%23d6d8db%7D%2Elist%2Dgroup%2Ditem%2Dsecondary%2Elist%2Dgroup%2Ditem%2Daction%3Afocus%2C%2Elist%2Dgroup%2Ditem%2Dsecondary%2Elist%2Dgroup%2Ditem%2Daction%3Ahover%7Bcolor%3A%23383d41%3Bbackground%2Dcolor%3A%23c8cbcf%7D%2Elist%2Dgroup%2Ditem%2Dsecondary%2Elist%2Dgroup%2Ditem%2Daction%2Eactive%7Bcolor%3A%23fff%3Bbackground%2Dcolor%3A%23383d41%3Bborder%2Dcolor%3A%23383d41%7D%2Elist%2Dgroup%2Ditem%2Dsuccess%7Bcolor%3A%23155724%3Bbackground%2Dcolor%3A%23c3e6cb%7D%2Elist%2Dgroup%2Ditem%2Dsuccess%2Elist%2Dgroup%2Ditem%2Daction%3Afocus%2C%2Elist%2Dgroup%2Ditem%2Dsuccess%2Elist%2Dgroup%2Ditem%2Daction%3Ahover%7Bcolor%3A%23155724%3Bbackground%2Dcolor%3A%23b1dfbb%7D%2Elist%2Dgroup%2Ditem%2Dsuccess%2Elist%2Dgroup%2Ditem%2Daction%2Eactive%7Bcolor%3A%23fff%3Bbackground%2Dcolor%3A%23155724%3Bborder%2Dcolor%3A%23155724%7D%2Elist%2Dgroup%2Ditem%2Dinfo%7Bcolor%3A%230c5460%3Bbackground%2Dcolor%3A%23bee5eb%7D%2Elist%2Dgroup%2Ditem%2Dinfo%2Elist%2Dgroup%2Ditem%2Daction%3Afocus%2C%2Elist%2Dgroup%2Ditem%2Dinfo%2Elist%2Dgroup%2Ditem%2Daction%3Ahover%7Bcolor%3A%230c5460%3Bbackground%2Dcolor%3A%23abdde5%7D%2Elist%2Dgroup%2Ditem%2Dinfo%2Elist%2Dgroup%2Ditem%2Daction%2Eactive%7Bcolor%3A%23fff%3Bbackground%2Dcolor%3A%230c5460%3Bborder%2Dcolor%3A%230c5460%7D%2Elist%2Dgroup%2Ditem%2Dwarning%7Bcolor%3A%23856404%3Bbackground%2Dcolor%3A%23ffeeba%7D%2Elist%2Dgroup%2Ditem%2Dwarning%2Elist%2Dgroup%2Ditem%2Daction%3Afocus%2C%2Elist%2Dgroup%2Ditem%2Dwarning%2Elist%2Dgroup%2Ditem%2Daction%3Ahover%7Bcolor%3A%23856404%3Bbackground%2Dcolor%3A%23ffe8a1%7D%2Elist%2Dgroup%2Ditem%2Dwarning%2Elist%2Dgroup%2Ditem%2Daction%2Eactive%7Bcolor%3A%23fff%3Bbackground%2Dcolor%3A%23856404%3Bborder%2Dcolor%3A%23856404%7D%2Elist%2Dgroup%2Ditem%2Ddanger%7Bcolor%3A%23721c24%3Bbackground%2Dcolor%3A%23f5c6cb%7D%2Elist%2Dgroup%2Ditem%2Ddanger%2Elist%2Dgroup%2Ditem%2Daction%3Afocus%2C%2Elist%2Dgroup%2Ditem%2Ddanger%2Elist%2Dgroup%2Ditem%2Daction%3Ahover%7Bcolor%3A%23721c24%3Bbackground%2Dcolor%3A%23f1b0b7%7D%2Elist%2Dgroup%2Ditem%2Ddanger%2Elist%2Dgroup%2Ditem%2Daction%2Eactive%7Bcolor%3A%23fff%3Bbackground%2Dcolor%3A%23721c24%3Bborder%2Dcolor%3A%23721c24%7D%2Elist%2Dgroup%2Ditem%2Dlight%7Bcolor%3A%23818182%3Bbackground%2Dcolor%3A%23fdfdfe%7D%2Elist%2Dgroup%2Ditem%2Dlight%2Elist%2Dgroup%2Ditem%2Daction%3Afocus%2C%2Elist%2Dgroup%2Ditem%2Dlight%2Elist%2Dgroup%2Ditem%2Daction%3Ahover%7Bcolor%3A%23818182%3Bbackground%2Dcolor%3A%23ececf6%7D%2Elist%2Dgroup%2Ditem%2Dlight%2Elist%2Dgroup%2Ditem%2Daction%2Eactive%7Bcolor%3A%23fff%3Bbackground%2Dcolor%3A%23818182%3Bborder%2Dcolor%3A%23818182%7D%2Elist%2Dgroup%2Ditem%2Ddark%7Bcolor%3A%231b1e21%3Bbackground%2Dcolor%3A%23c6c8ca%7D%2Elist%2Dgroup%2Ditem%2Ddark%2Elist%2Dgroup%2Ditem%2Daction%3Afocus%2C%2Elist%2Dgroup%2Ditem%2Ddark%2Elist%2Dgroup%2Ditem%2Daction%3Ahover%7Bcolor%3A%231b1e21%3Bbackground%2Dcolor%3A%23b9bbbe%7D%2Elist%2Dgroup%2Ditem%2Ddark%2Elist%2Dgroup%2Ditem%2Daction%2Eactive%7Bcolor%3A%23fff%3Bbackground%2Dcolor%3A%231b1e21%3Bborder%2Dcolor%3A%231b1e21%7D%2Eclose%7Bfloat%3Aright%3Bfont%2Dsize%3A1%2E5rem%3Bfont%2Dweight%3A700%3Bline%2Dheight%3A1%3Bcolor%3A%23000%3Btext%2Dshadow%3A0%201px%200%20%23fff%3Bopacity%3A%2E5%7D%2Eclose%3Afocus%2C%2Eclose%3Ahover%7Bcolor%3A%23000%3Btext%2Ddecoration%3Anone%3Bopacity%3A%2E75%7D%2Eclose%3Anot%28%3Adisabled%29%3Anot%28%2Edisabled%29%7Bcursor%3Apointer%7Dbutton%2Eclose%7Bpadding%3A0%3Bbackground%2Dcolor%3Atransparent%3Bborder%3A0%3B%2Dwebkit%2Dappearance%3Anone%7D%2Emodal%2Dopen%7Boverflow%3Ahidden%7D%2Emodal%7Bposition%3Afixed%3Btop%3A0%3Bright%3A0%3Bbottom%3A0%3Bleft%3A0%3Bz%2Dindex%3A1050%3Bdisplay%3Anone%3Boverflow%3Ahidden%3Boutline%3A0%7D%2Emodal%2Dopen%20%2Emodal%7Boverflow%2Dx%3Ahidden%3Boverflow%2Dy%3Aauto%7D%2Emodal%2Ddialog%7Bposition%3Arelative%3Bwidth%3Aauto%3Bmargin%3A%2E5rem%3Bpointer%2Devents%3Anone%7D%2Emodal%2Efade%20%2Emodal%2Ddialog%7Btransition%3A%2Dwebkit%2Dtransform%20%2E3s%20ease%2Dout%3Btransition%3Atransform%20%2E3s%20ease%2Dout%3Btransition%3Atransform%20%2E3s%20ease%2Dout%2C%2Dwebkit%2Dtransform%20%2E3s%20ease%2Dout%3B%2Dwebkit%2Dtransform%3Atranslate%280%2C%2D25%25%29%3Btransform%3Atranslate%280%2C%2D25%25%29%7D%2Emodal%2Eshow%20%2Emodal%2Ddialog%7B%2Dwebkit%2Dtransform%3Atranslate%280%2C0%29%3Btransform%3Atranslate%280%2C0%29%7D%2Emodal%2Ddialog%2Dcentered%7Bdisplay%3A%2Dwebkit%2Dbox%3Bdisplay%3A%2Dms%2Dflexbox%3Bdisplay%3Aflex%3B%2Dwebkit%2Dbox%2Dalign%3Acenter%3B%2Dms%2Dflex%2Dalign%3Acenter%3Balign%2Ditems%3Acenter%3Bmin%2Dheight%3Acalc%28100%25%20%2D%20%28%2E5rem%20%2A%202%29%29%7D%2Emodal%2Dcontent%7Bposition%3Arelative%3Bdisplay%3A%2Dwebkit%2Dbox%3Bdisplay%3A%2Dms%2Dflexbox%3Bdisplay%3Aflex%3B%2Dwebkit%2Dbox%2Dorient%3Avertical%3B%2Dwebkit%2Dbox%2Ddirection%3Anormal%3B%2Dms%2Dflex%2Ddirection%3Acolumn%3Bflex%2Ddirection%3Acolumn%3Bwidth%3A100%25%3Bpointer%2Devents%3Aauto%3Bbackground%2Dcolor%3A%23fff%3Bbackground%2Dclip%3Apadding%2Dbox%3Bborder%3A1px%20solid%20rgba%280%2C0%2C0%2C%2E2%29%3Bborder%2Dradius%3A%2E3rem%3Boutline%3A0%7D%2Emodal%2Dbackdrop%7Bposition%3Afixed%3Btop%3A0%3Bright%3A0%3Bbottom%3A0%3Bleft%3A0%3Bz%2Dindex%3A1040%3Bbackground%2Dcolor%3A%23000%7D%2Emodal%2Dbackdrop%2Efade%7Bopacity%3A0%7D%2Emodal%2Dbackdrop%2Eshow%7Bopacity%3A%2E5%7D%2Emodal%2Dheader%7Bdisplay%3A%2Dwebkit%2Dbox%3Bdisplay%3A%2Dms%2Dflexbox%3Bdisplay%3Aflex%3B%2Dwebkit%2Dbox%2Dalign%3Astart%3B%2Dms%2Dflex%2Dalign%3Astart%3Balign%2Ditems%3Aflex%2Dstart%3B%2Dwebkit%2Dbox%2Dpack%3Ajustify%3B%2Dms%2Dflex%2Dpack%3Ajustify%3Bjustify%2Dcontent%3Aspace%2Dbetween%3Bpadding%3A1rem%3Bborder%2Dbottom%3A1px%20solid%20%23e9ecef%3Bborder%2Dtop%2Dleft%2Dradius%3A%2E3rem%3Bborder%2Dtop%2Dright%2Dradius%3A%2E3rem%7D%2Emodal%2Dheader%20%2Eclose%7Bpadding%3A1rem%3Bmargin%3A%2D1rem%20%2D1rem%20%2D1rem%20auto%7D%2Emodal%2Dtitle%7Bmargin%2Dbottom%3A0%3Bline%2Dheight%3A1%2E5%7D%2Emodal%2Dbody%7Bposition%3Arelative%3B%2Dwebkit%2Dbox%2Dflex%3A1%3B%2Dms%2Dflex%3A1%201%20auto%3Bflex%3A1%201%20auto%3Bpadding%3A1rem%7D%2Emodal%2Dfooter%7Bdisplay%3A%2Dwebkit%2Dbox%3Bdisplay%3A%2Dms%2Dflexbox%3Bdisplay%3Aflex%3B%2Dwebkit%2Dbox%2Dalign%3Acenter%3B%2Dms%2Dflex%2Dalign%3Acenter%3Balign%2Ditems%3Acenter%3B%2Dwebkit%2Dbox%2Dpack%3Aend%3B%2Dms%2Dflex%2Dpack%3Aend%3Bjustify%2Dcontent%3Aflex%2Dend%3Bpadding%3A1rem%3Bborder%2Dtop%3A1px%20solid%20%23e9ecef%7D%2Emodal%2Dfooter%3E%3Anot%28%3Afirst%2Dchild%29%7Bmargin%2Dleft%3A%2E25rem%7D%2Emodal%2Dfooter%3E%3Anot%28%3Alast%2Dchild%29%7Bmargin%2Dright%3A%2E25rem%7D%2Emodal%2Dscrollbar%2Dmeasure%7Bposition%3Aabsolute%3Btop%3A%2D9999px%3Bwidth%3A50px%3Bheight%3A50px%3Boverflow%3Ascroll%7D%40media%20%28min%2Dwidth%3A576px%29%7B%2Emodal%2Ddialog%7Bmax%2Dwidth%3A500px%3Bmargin%3A1%2E75rem%20auto%7D%2Emodal%2Ddialog%2Dcentered%7Bmin%2Dheight%3Acalc%28100%25%20%2D%20%281%2E75rem%20%2A%202%29%29%7D%2Emodal%2Dsm%7Bmax%2Dwidth%3A300px%7D%7D%40media%20%28min%2Dwidth%3A992px%29%7B%2Emodal%2Dlg%7Bmax%2Dwidth%3A800px%7D%7D%2Etooltip%7Bposition%3Aabsolute%3Bz%2Dindex%3A1070%3Bdisplay%3Ablock%3Bmargin%3A0%3Bfont%2Dfamily%3A%2Dapple%2Dsystem%2CBlinkMacSystemFont%2C%22Segoe%20UI%22%2CRoboto%2C%22Helvetica%20Neue%22%2CArial%2Csans%2Dserif%2C%22Apple%20Color%20Emoji%22%2C%22Segoe%20UI%20Emoji%22%2C%22Segoe%20UI%20Symbol%22%3Bfont%2Dstyle%3Anormal%3Bfont%2Dweight%3A400%3Bline%2Dheight%3A1%2E5%3Btext%2Dalign%3Aleft%3Btext%2Dalign%3Astart%3Btext%2Ddecoration%3Anone%3Btext%2Dshadow%3Anone%3Btext%2Dtransform%3Anone%3Bletter%2Dspacing%3Anormal%3Bword%2Dbreak%3Anormal%3Bword%2Dspacing%3Anormal%3Bwhite%2Dspace%3Anormal%3Bline%2Dbreak%3Aauto%3Bfont%2Dsize%3A%2E875rem%3Bword%2Dwrap%3Abreak%2Dword%3Bopacity%3A0%7D%2Etooltip%2Eshow%7Bopacity%3A%2E9%7D%2Etooltip%20%2Earrow%7Bposition%3Aabsolute%3Bdisplay%3Ablock%3Bwidth%3A%2E8rem%3Bheight%3A%2E4rem%7D%2Etooltip%20%2Earrow%3A%3Abefore%7Bposition%3Aabsolute%3Bcontent%3A%22%22%3Bborder%2Dcolor%3Atransparent%3Bborder%2Dstyle%3Asolid%7D%2Ebs%2Dtooltip%2Dauto%5Bx%2Dplacement%5E%3Dtop%5D%2C%2Ebs%2Dtooltip%2Dtop%7Bpadding%3A%2E4rem%200%7D%2Ebs%2Dtooltip%2Dauto%5Bx%2Dplacement%5E%3Dtop%5D%20%2Earrow%2C%2Ebs%2Dtooltip%2Dtop%20%2Earrow%7Bbottom%3A0%7D%2Ebs%2Dtooltip%2Dauto%5Bx%2Dplacement%5E%3Dtop%5D%20%2Earrow%3A%3Abefore%2C%2Ebs%2Dtooltip%2Dtop%20%2Earrow%3A%3Abefore%7Btop%3A0%3Bborder%2Dwidth%3A%2E4rem%20%2E4rem%200%3Bborder%2Dtop%2Dcolor%3A%23000%7D%2Ebs%2Dtooltip%2Dauto%5Bx%2Dplacement%5E%3Dright%5D%2C%2Ebs%2Dtooltip%2Dright%7Bpadding%3A0%20%2E4rem%7D%2Ebs%2Dtooltip%2Dauto%5Bx%2Dplacement%5E%3Dright%5D%20%2Earrow%2C%2Ebs%2Dtooltip%2Dright%20%2Earrow%7Bleft%3A0%3Bwidth%3A%2E4rem%3Bheight%3A%2E8rem%7D%2Ebs%2Dtooltip%2Dauto%5Bx%2Dplacement%5E%3Dright%5D%20%2Earrow%3A%3Abefore%2C%2Ebs%2Dtooltip%2Dright%20%2Earrow%3A%3Abefore%7Bright%3A0%3Bborder%2Dwidth%3A%2E4rem%20%2E4rem%20%2E4rem%200%3Bborder%2Dright%2Dcolor%3A%23000%7D%2Ebs%2Dtooltip%2Dauto%5Bx%2Dplacement%5E%3Dbottom%5D%2C%2Ebs%2Dtooltip%2Dbottom%7Bpadding%3A%2E4rem%200%7D%2Ebs%2Dtooltip%2Dauto%5Bx%2Dplacement%5E%3Dbottom%5D%20%2Earrow%2C%2Ebs%2Dtooltip%2Dbottom%20%2Earrow%7Btop%3A0%7D%2Ebs%2Dtooltip%2Dauto%5Bx%2Dplacement%5E%3Dbottom%5D%20%2Earrow%3A%3Abefore%2C%2Ebs%2Dtooltip%2Dbottom%20%2Earrow%3A%3Abefore%7Bbottom%3A0%3Bborder%2Dwidth%3A0%20%2E4rem%20%2E4rem%3Bborder%2Dbottom%2Dcolor%3A%23000%7D%2Ebs%2Dtooltip%2Dauto%5Bx%2Dplacement%5E%3Dleft%5D%2C%2Ebs%2Dtooltip%2Dleft%7Bpadding%3A0%20%2E4rem%7D%2Ebs%2Dtooltip%2Dauto%5Bx%2Dplacement%5E%3Dleft%5D%20%2Earrow%2C%2Ebs%2Dtooltip%2Dleft%20%2Earrow%7Bright%3A0%3Bwidth%3A%2E4rem%3Bheight%3A%2E8rem%7D%2Ebs%2Dtooltip%2Dauto%5Bx%2Dplacement%5E%3Dleft%5D%20%2Earrow%3A%3Abefore%2C%2Ebs%2Dtooltip%2Dleft%20%2Earrow%3A%3Abefore%7Bleft%3A0%3Bborder%2Dwidth%3A%2E4rem%200%20%2E4rem%20%2E4rem%3Bborder%2Dleft%2Dcolor%3A%23000%7D%2Etooltip%2Dinner%7Bmax%2Dwidth%3A200px%3Bpadding%3A%2E25rem%20%2E5rem%3Bcolor%3A%23fff%3Btext%2Dalign%3Acenter%3Bbackground%2Dcolor%3A%23000%3Bborder%2Dradius%3A%2E25rem%7D%2Epopover%7Bposition%3Aabsolute%3Btop%3A0%3Bleft%3A0%3Bz%2Dindex%3A1060%3Bdisplay%3Ablock%3Bmax%2Dwidth%3A276px%3Bfont%2Dfamily%3A%2Dapple%2Dsystem%2CBlinkMacSystemFont%2C%22Segoe%20UI%22%2CRoboto%2C%22Helvetica%20Neue%22%2CArial%2Csans%2Dserif%2C%22Apple%20Color%20Emoji%22%2C%22Segoe%20UI%20Emoji%22%2C%22Segoe%20UI%20Symbol%22%3Bfont%2Dstyle%3Anormal%3Bfont%2Dweight%3A400%3Bline%2Dheight%3A1%2E5%3Btext%2Dalign%3Aleft%3Btext%2Dalign%3Astart%3Btext%2Ddecoration%3Anone%3Btext%2Dshadow%3Anone%3Btext%2Dtransform%3Anone%3Bletter%2Dspacing%3Anormal%3Bword%2Dbreak%3Anormal%3Bword%2Dspacing%3Anormal%3Bwhite%2Dspace%3Anormal%3Bline%2Dbreak%3Aauto%3Bfont%2Dsize%3A%2E875rem%3Bword%2Dwrap%3Abreak%2Dword%3Bbackground%2Dcolor%3A%23fff%3Bbackground%2Dclip%3Apadding%2Dbox%3Bborder%3A1px%20solid%20rgba%280%2C0%2C0%2C%2E2%29%3Bborder%2Dradius%3A%2E3rem%7D%2Epopover%20%2Earrow%7Bposition%3Aabsolute%3Bdisplay%3Ablock%3Bwidth%3A1rem%3Bheight%3A%2E5rem%3Bmargin%3A0%20%2E3rem%7D%2Epopover%20%2Earrow%3A%3Aafter%2C%2Epopover%20%2Earrow%3A%3Abefore%7Bposition%3Aabsolute%3Bdisplay%3Ablock%3Bcontent%3A%22%22%3Bborder%2Dcolor%3Atransparent%3Bborder%2Dstyle%3Asolid%7D%2Ebs%2Dpopover%2Dauto%5Bx%2Dplacement%5E%3Dtop%5D%2C%2Ebs%2Dpopover%2Dtop%7Bmargin%2Dbottom%3A%2E5rem%7D%2Ebs%2Dpopover%2Dauto%5Bx%2Dplacement%5E%3Dtop%5D%20%2Earrow%2C%2Ebs%2Dpopover%2Dtop%20%2Earrow%7Bbottom%3Acalc%28%28%2E5rem%20%2B%201px%29%20%2A%20%2D1%29%7D%2Ebs%2Dpopover%2Dauto%5Bx%2Dplacement%5E%3Dtop%5D%20%2Earrow%3A%3Aafter%2C%2Ebs%2Dpopover%2Dauto%5Bx%2Dplacement%5E%3Dtop%5D%20%2Earrow%3A%3Abefore%2C%2Ebs%2Dpopover%2Dtop%20%2Earrow%3A%3Aafter%2C%2Ebs%2Dpopover%2Dtop%20%2Earrow%3A%3Abefore%7Bborder%2Dwidth%3A%2E5rem%20%2E5rem%200%7D%2Ebs%2Dpopover%2Dauto%5Bx%2Dplacement%5E%3Dtop%5D%20%2Earrow%3A%3Abefore%2C%2Ebs%2Dpopover%2Dtop%20%2Earrow%3A%3Abefore%7Bbottom%3A0%3Bborder%2Dtop%2Dcolor%3Argba%280%2C0%2C0%2C%2E25%29%7D%2Ebs%2Dpopover%2Dauto%5Bx%2Dplacement%5E%3Dtop%5D%20%2Earrow%3A%3Aafter%2C%2Ebs%2Dpopover%2Dtop%20%2Earrow%3A%3Aafter%7Bbottom%3A1px%3Bborder%2Dtop%2Dcolor%3A%23fff%7D%2Ebs%2Dpopover%2Dauto%5Bx%2Dplacement%5E%3Dright%5D%2C%2Ebs%2Dpopover%2Dright%7Bmargin%2Dleft%3A%2E5rem%7D%2Ebs%2Dpopover%2Dauto%5Bx%2Dplacement%5E%3Dright%5D%20%2Earrow%2C%2Ebs%2Dpopover%2Dright%20%2Earrow%7Bleft%3Acalc%28%28%2E5rem%20%2B%201px%29%20%2A%20%2D1%29%3Bwidth%3A%2E5rem%3Bheight%3A1rem%3Bmargin%3A%2E3rem%200%7D%2Ebs%2Dpopover%2Dauto%5Bx%2Dplacement%5E%3Dright%5D%20%2Earrow%3A%3Aafter%2C%2Ebs%2Dpopover%2Dauto%5Bx%2Dplacement%5E%3Dright%5D%20%2Earrow%3A%3Abefore%2C%2Ebs%2Dpopover%2Dright%20%2Earrow%3A%3Aafter%2C%2Ebs%2Dpopover%2Dright%20%2Earrow%3A%3Abefore%7Bborder%2Dwidth%3A%2E5rem%20%2E5rem%20%2E5rem%200%7D%2Ebs%2Dpopover%2Dauto%5Bx%2Dplacement%5E%3Dright%5D%20%2Earrow%3A%3Abefore%2C%2Ebs%2Dpopover%2Dright%20%2Earrow%3A%3Abefore%7Bleft%3A0%3Bborder%2Dright%2Dcolor%3Argba%280%2C0%2C0%2C%2E25%29%7D%2Ebs%2Dpopover%2Dauto%5Bx%2Dplacement%5E%3Dright%5D%20%2Earrow%3A%3Aafter%2C%2Ebs%2Dpopover%2Dright%20%2Earrow%3A%3Aafter%7Bleft%3A1px%3Bborder%2Dright%2Dcolor%3A%23fff%7D%2Ebs%2Dpopover%2Dauto%5Bx%2Dplacement%5E%3Dbottom%5D%2C%2Ebs%2Dpopover%2Dbottom%7Bmargin%2Dtop%3A%2E5rem%7D%2Ebs%2Dpopover%2Dauto%5Bx%2Dplacement%5E%3Dbottom%5D%20%2Earrow%2C%2Ebs%2Dpopover%2Dbottom%20%2Earrow%7Btop%3Acalc%28%28%2E5rem%20%2B%201px%29%20%2A%20%2D1%29%7D%2Ebs%2Dpopover%2Dauto%5Bx%2Dplacement%5E%3Dbottom%5D%20%2Earrow%3A%3Aafter%2C%2Ebs%2Dpopover%2Dauto%5Bx%2Dplacement%5E%3Dbottom%5D%20%2Earrow%3A%3Abefore%2C%2Ebs%2Dpopover%2Dbottom%20%2Earrow%3A%3Aafter%2C%2Ebs%2Dpopover%2Dbottom%20%2Earrow%3A%3Abefore%7Bborder%2Dwidth%3A0%20%2E5rem%20%2E5rem%20%2E5rem%7D%2Ebs%2Dpopover%2Dauto%5Bx%2Dplacement%5E%3Dbottom%5D%20%2Earrow%3A%3Abefore%2C%2Ebs%2Dpopover%2Dbottom%20%2Earrow%3A%3Abefore%7Btop%3A0%3Bborder%2Dbottom%2Dcolor%3Argba%280%2C0%2C0%2C%2E25%29%7D%2Ebs%2Dpopover%2Dauto%5Bx%2Dplacement%5E%3Dbottom%5D%20%2Earrow%3A%3Aafter%2C%2Ebs%2Dpopover%2Dbottom%20%2Earrow%3A%3Aafter%7Btop%3A1px%3Bborder%2Dbottom%2Dcolor%3A%23fff%7D%2Ebs%2Dpopover%2Dauto%5Bx%2Dplacement%5E%3Dbottom%5D%20%2Epopover%2Dheader%3A%3Abefore%2C%2Ebs%2Dpopover%2Dbottom%20%2Epopover%2Dheader%3A%3Abefore%7Bposition%3Aabsolute%3Btop%3A0%3Bleft%3A50%25%3Bdisplay%3Ablock%3Bwidth%3A1rem%3Bmargin%2Dleft%3A%2D%2E5rem%3Bcontent%3A%22%22%3Bborder%2Dbottom%3A1px%20solid%20%23f7f7f7%7D%2Ebs%2Dpopover%2Dauto%5Bx%2Dplacement%5E%3Dleft%5D%2C%2Ebs%2Dpopover%2Dleft%7Bmargin%2Dright%3A%2E5rem%7D%2Ebs%2Dpopover%2Dauto%5Bx%2Dplacement%5E%3Dleft%5D%20%2Earrow%2C%2Ebs%2Dpopover%2Dleft%20%2Earrow%7Bright%3Acalc%28%28%2E5rem%20%2B%201px%29%20%2A%20%2D1%29%3Bwidth%3A%2E5rem%3Bheight%3A1rem%3Bmargin%3A%2E3rem%200%7D%2Ebs%2Dpopover%2Dauto%5Bx%2Dplacement%5E%3Dleft%5D%20%2Earrow%3A%3Aafter%2C%2Ebs%2Dpopover%2Dauto%5Bx%2Dplacement%5E%3Dleft%5D%20%2Earrow%3A%3Abefore%2C%2Ebs%2Dpopover%2Dleft%20%2Earrow%3A%3Aafter%2C%2Ebs%2Dpopover%2Dleft%20%2Earrow%3A%3Abefore%7Bborder%2Dwidth%3A%2E5rem%200%20%2E5rem%20%2E5rem%7D%2Ebs%2Dpopover%2Dauto%5Bx%2Dplacement%5E%3Dleft%5D%20%2Earrow%3A%3Abefore%2C%2Ebs%2Dpopover%2Dleft%20%2Earrow%3A%3Abefore%7Bright%3A0%3Bborder%2Dleft%2Dcolor%3Argba%280%2C0%2C0%2C%2E25%29%7D%2Ebs%2Dpopover%2Dauto%5Bx%2Dplacement%5E%3Dleft%5D%20%2Earrow%3A%3Aafter%2C%2Ebs%2Dpopover%2Dleft%20%2Earrow%3A%3Aafter%7Bright%3A1px%3Bborder%2Dleft%2Dcolor%3A%23fff%7D%2Epopover%2Dheader%7Bpadding%3A%2E5rem%20%2E75rem%3Bmargin%2Dbottom%3A0%3Bfont%2Dsize%3A1rem%3Bcolor%3Ainherit%3Bbackground%2Dcolor%3A%23f7f7f7%3Bborder%2Dbottom%3A1px%20solid%20%23ebebeb%3Bborder%2Dtop%2Dleft%2Dradius%3Acalc%28%2E3rem%20%2D%201px%29%3Bborder%2Dtop%2Dright%2Dradius%3Acalc%28%2E3rem%20%2D%201px%29%7D%2Epopover%2Dheader%3Aempty%7Bdisplay%3Anone%7D%2Epopover%2Dbody%7Bpadding%3A%2E5rem%20%2E75rem%3Bcolor%3A%23212529%7D%2Ecarousel%7Bposition%3Arelative%7D%2Ecarousel%2Dinner%7Bposition%3Arelative%3Bwidth%3A100%25%3Boverflow%3Ahidden%7D%2Ecarousel%2Ditem%7Bposition%3Arelative%3Bdisplay%3Anone%3B%2Dwebkit%2Dbox%2Dalign%3Acenter%3B%2Dms%2Dflex%2Dalign%3Acenter%3Balign%2Ditems%3Acenter%3Bwidth%3A100%25%3Btransition%3A%2Dwebkit%2Dtransform%20%2E6s%20ease%3Btransition%3Atransform%20%2E6s%20ease%3Btransition%3Atransform%20%2E6s%20ease%2C%2Dwebkit%2Dtransform%20%2E6s%20ease%3B%2Dwebkit%2Dbackface%2Dvisibility%3Ahidden%3Bbackface%2Dvisibility%3Ahidden%3B%2Dwebkit%2Dperspective%3A1000px%3Bperspective%3A1000px%7D%2Ecarousel%2Ditem%2Dnext%2C%2Ecarousel%2Ditem%2Dprev%2C%2Ecarousel%2Ditem%2Eactive%7Bdisplay%3Ablock%7D%2Ecarousel%2Ditem%2Dnext%2C%2Ecarousel%2Ditem%2Dprev%7Bposition%3Aabsolute%3Btop%3A0%7D%2Ecarousel%2Ditem%2Dnext%2Ecarousel%2Ditem%2Dleft%2C%2Ecarousel%2Ditem%2Dprev%2Ecarousel%2Ditem%2Dright%7B%2Dwebkit%2Dtransform%3AtranslateX%280%29%3Btransform%3AtranslateX%280%29%7D%40supports%20%28%28%2Dwebkit%2Dtransform%2Dstyle%3Apreserve%2D3d%29%20or%20%28transform%2Dstyle%3Apreserve%2D3d%29%29%7B%2Ecarousel%2Ditem%2Dnext%2Ecarousel%2Ditem%2Dleft%2C%2Ecarousel%2Ditem%2Dprev%2Ecarousel%2Ditem%2Dright%7B%2Dwebkit%2Dtransform%3Atranslate3d%280%2C0%2C0%29%3Btransform%3Atranslate3d%280%2C0%2C0%29%7D%7D%2Eactive%2Ecarousel%2Ditem%2Dright%2C%2Ecarousel%2Ditem%2Dnext%7B%2Dwebkit%2Dtransform%3AtranslateX%28100%25%29%3Btransform%3AtranslateX%28100%25%29%7D%40supports%20%28%28%2Dwebkit%2Dtransform%2Dstyle%3Apreserve%2D3d%29%20or%20%28transform%2Dstyle%3Apreserve%2D3d%29%29%7B%2Eactive%2Ecarousel%2Ditem%2Dright%2C%2Ecarousel%2Ditem%2Dnext%7B%2Dwebkit%2Dtransform%3Atranslate3d%28100%25%2C0%2C0%29%3Btransform%3Atranslate3d%28100%25%2C0%2C0%29%7D%7D%2Eactive%2Ecarousel%2Ditem%2Dleft%2C%2Ecarousel%2Ditem%2Dprev%7B%2Dwebkit%2Dtransform%3AtranslateX%28%2D100%25%29%3Btransform%3AtranslateX%28%2D100%25%29%7D%40supports%20%28%28%2Dwebkit%2Dtransform%2Dstyle%3Apreserve%2D3d%29%20or%20%28transform%2Dstyle%3Apreserve%2D3d%29%29%7B%2Eactive%2Ecarousel%2Ditem%2Dleft%2C%2Ecarousel%2Ditem%2Dprev%7B%2Dwebkit%2Dtransform%3Atranslate3d%28%2D100%25%2C0%2C0%29%3Btransform%3Atranslate3d%28%2D100%25%2C0%2C0%29%7D%7D%2Ecarousel%2Dcontrol%2Dnext%2C%2Ecarousel%2Dcontrol%2Dprev%7Bposition%3Aabsolute%3Btop%3A0%3Bbottom%3A0%3Bdisplay%3A%2Dwebkit%2Dbox%3Bdisplay%3A%2Dms%2Dflexbox%3Bdisplay%3Aflex%3B%2Dwebkit%2Dbox%2Dalign%3Acenter%3B%2Dms%2Dflex%2Dalign%3Acenter%3Balign%2Ditems%3Acenter%3B%2Dwebkit%2Dbox%2Dpack%3Acenter%3B%2Dms%2Dflex%2Dpack%3Acenter%3Bjustify%2Dcontent%3Acenter%3Bwidth%3A15%25%3Bcolor%3A%23fff%3Btext%2Dalign%3Acenter%3Bopacity%3A%2E5%7D%2Ecarousel%2Dcontrol%2Dnext%3Afocus%2C%2Ecarousel%2Dcontrol%2Dnext%3Ahover%2C%2Ecarousel%2Dcontrol%2Dprev%3Afocus%2C%2Ecarousel%2Dcontrol%2Dprev%3Ahover%7Bcolor%3A%23fff%3Btext%2Ddecoration%3Anone%3Boutline%3A0%3Bopacity%3A%2E9%7D%2Ecarousel%2Dcontrol%2Dprev%7Bleft%3A0%7D%2Ecarousel%2Dcontrol%2Dnext%7Bright%3A0%7D%2Ecarousel%2Dcontrol%2Dnext%2Dicon%2C%2Ecarousel%2Dcontrol%2Dprev%2Dicon%7Bdisplay%3Ainline%2Dblock%3Bwidth%3A20px%3Bheight%3A20px%3Bbackground%3Atransparent%20no%2Drepeat%20center%20center%3Bbackground%2Dsize%3A100%25%20100%25%7D%2Ecarousel%2Dcontrol%2Dprev%2Dicon%7Bbackground%2Dimage%3Aurl%28%22data%3Aimage%2Fsvg%2Bxml%3Bcharset%3Dutf8%2C%253Csvg%20xmlns%3D%27http%3A%2F%2Fwww%2Ew3%2Eorg%2F2000%2Fsvg%27%20fill%3D%27%2523fff%27%20viewBox%3D%270%200%208%208%27%253E%253Cpath%20d%3D%27M5%2E25%200l%2D4%204%204%204%201%2E5%2D1%2E5%2D2%2E5%2D2%2E5%202%2E5%2D2%2E5%2D1%2E5%2D1%2E5z%27%2F%253E%253C%2Fsvg%253E%22%29%7D%2Ecarousel%2Dcontrol%2Dnext%2Dicon%7Bbackground%2Dimage%3Aurl%28%22data%3Aimage%2Fsvg%2Bxml%3Bcharset%3Dutf8%2C%253Csvg%20xmlns%3D%27http%3A%2F%2Fwww%2Ew3%2Eorg%2F2000%2Fsvg%27%20fill%3D%27%2523fff%27%20viewBox%3D%270%200%208%208%27%253E%253Cpath%20d%3D%27M2%2E75%200l%2D1%2E5%201%2E5%202%2E5%202%2E5%2D2%2E5%202%2E5%201%2E5%201%2E5%204%2D4%2D4%2D4z%27%2F%253E%253C%2Fsvg%253E%22%29%7D%2Ecarousel%2Dindicators%7Bposition%3Aabsolute%3Bright%3A0%3Bbottom%3A10px%3Bleft%3A0%3Bz%2Dindex%3A15%3Bdisplay%3A%2Dwebkit%2Dbox%3Bdisplay%3A%2Dms%2Dflexbox%3Bdisplay%3Aflex%3B%2Dwebkit%2Dbox%2Dpack%3Acenter%3B%2Dms%2Dflex%2Dpack%3Acenter%3Bjustify%2Dcontent%3Acenter%3Bpadding%2Dleft%3A0%3Bmargin%2Dright%3A15%25%3Bmargin%2Dleft%3A15%25%3Blist%2Dstyle%3Anone%7D%2Ecarousel%2Dindicators%20li%7Bposition%3Arelative%3B%2Dwebkit%2Dbox%2Dflex%3A0%3B%2Dms%2Dflex%3A0%201%20auto%3Bflex%3A0%201%20auto%3Bwidth%3A30px%3Bheight%3A3px%3Bmargin%2Dright%3A3px%3Bmargin%2Dleft%3A3px%3Btext%2Dindent%3A%2D999px%3Bbackground%2Dcolor%3Argba%28255%2C255%2C255%2C%2E5%29%7D%2Ecarousel%2Dindicators%20li%3A%3Abefore%7Bposition%3Aabsolute%3Btop%3A%2D10px%3Bleft%3A0%3Bdisplay%3Ainline%2Dblock%3Bwidth%3A100%25%3Bheight%3A10px%3Bcontent%3A%22%22%7D%2Ecarousel%2Dindicators%20li%3A%3Aafter%7Bposition%3Aabsolute%3Bbottom%3A%2D10px%3Bleft%3A0%3Bdisplay%3Ainline%2Dblock%3Bwidth%3A100%25%3Bheight%3A10px%3Bcontent%3A%22%22%7D%2Ecarousel%2Dindicators%20%2Eactive%7Bbackground%2Dcolor%3A%23fff%7D%2Ecarousel%2Dcaption%7Bposition%3Aabsolute%3Bright%3A15%25%3Bbottom%3A20px%3Bleft%3A15%25%3Bz%2Dindex%3A10%3Bpadding%2Dtop%3A20px%3Bpadding%2Dbottom%3A20px%3Bcolor%3A%23fff%3Btext%2Dalign%3Acenter%7D%2Ealign%2Dbaseline%7Bvertical%2Dalign%3Abaseline%21important%7D%2Ealign%2Dtop%7Bvertical%2Dalign%3Atop%21important%7D%2Ealign%2Dmiddle%7Bvertical%2Dalign%3Amiddle%21important%7D%2Ealign%2Dbottom%7Bvertical%2Dalign%3Abottom%21important%7D%2Ealign%2Dtext%2Dbottom%7Bvertical%2Dalign%3Atext%2Dbottom%21important%7D%2Ealign%2Dtext%2Dtop%7Bvertical%2Dalign%3Atext%2Dtop%21important%7D%2Ebg%2Dprimary%7Bbackground%2Dcolor%3A%23007bff%21important%7Da%2Ebg%2Dprimary%3Afocus%2Ca%2Ebg%2Dprimary%3Ahover%2Cbutton%2Ebg%2Dprimary%3Afocus%2Cbutton%2Ebg%2Dprimary%3Ahover%7Bbackground%2Dcolor%3A%230062cc%21important%7D%2Ebg%2Dsecondary%7Bbackground%2Dcolor%3A%236c757d%21important%7Da%2Ebg%2Dsecondary%3Afocus%2Ca%2Ebg%2Dsecondary%3Ahover%2Cbutton%2Ebg%2Dsecondary%3Afocus%2Cbutton%2Ebg%2Dsecondary%3Ahover%7Bbackground%2Dcolor%3A%23545b62%21important%7D%2Ebg%2Dsuccess%7Bbackground%2Dcolor%3A%2328a745%21important%7Da%2Ebg%2Dsuccess%3Afocus%2Ca%2Ebg%2Dsuccess%3Ahover%2Cbutton%2Ebg%2Dsuccess%3Afocus%2Cbutton%2Ebg%2Dsuccess%3Ahover%7Bbackground%2Dcolor%3A%231e7e34%21important%7D%2Ebg%2Dinfo%7Bbackground%2Dcolor%3A%2317a2b8%21important%7Da%2Ebg%2Dinfo%3Afocus%2Ca%2Ebg%2Dinfo%3Ahover%2Cbutton%2Ebg%2Dinfo%3Afocus%2Cbutton%2Ebg%2Dinfo%3Ahover%7Bbackground%2Dcolor%3A%23117a8b%21important%7D%2Ebg%2Dwarning%7Bbackground%2Dcolor%3A%23ffc107%21important%7Da%2Ebg%2Dwarning%3Afocus%2Ca%2Ebg%2Dwarning%3Ahover%2Cbutton%2Ebg%2Dwarning%3Afocus%2Cbutton%2Ebg%2Dwarning%3Ahover%7Bbackground%2Dcolor%3A%23d39e00%21important%7D%2Ebg%2Ddanger%7Bbackground%2Dcolor%3A%23dc3545%21important%7Da%2Ebg%2Ddanger%3Afocus%2Ca%2Ebg%2Ddanger%3Ahover%2Cbutton%2Ebg%2Ddanger%3Afocus%2Cbutton%2Ebg%2Ddanger%3Ahover%7Bbackground%2Dcolor%3A%23bd2130%21important%7D%2Ebg%2Dlight%7Bbackground%2Dcolor%3A%23f8f9fa%21important%7Da%2Ebg%2Dlight%3Afocus%2Ca%2Ebg%2Dlight%3Ahover%2Cbutton%2Ebg%2Dlight%3Afocus%2Cbutton%2Ebg%2Dlight%3Ahover%7Bbackground%2Dcolor%3A%23dae0e5%21important%7D%2Ebg%2Ddark%7Bbackground%2Dcolor%3A%23343a40%21important%7Da%2Ebg%2Ddark%3Afocus%2Ca%2Ebg%2Ddark%3Ahover%2Cbutton%2Ebg%2Ddark%3Afocus%2Cbutton%2Ebg%2Ddark%3Ahover%7Bbackground%2Dcolor%3A%231d2124%21important%7D%2Ebg%2Dwhite%7Bbackground%2Dcolor%3A%23fff%21important%7D%2Ebg%2Dtransparent%7Bbackground%2Dcolor%3Atransparent%21important%7D%2Eborder%7Bborder%3A1px%20solid%20%23dee2e6%21important%7D%2Eborder%2Dtop%7Bborder%2Dtop%3A1px%20solid%20%23dee2e6%21important%7D%2Eborder%2Dright%7Bborder%2Dright%3A1px%20solid%20%23dee2e6%21important%7D%2Eborder%2Dbottom%7Bborder%2Dbottom%3A1px%20solid%20%23dee2e6%21important%7D%2Eborder%2Dleft%7Bborder%2Dleft%3A1px%20solid%20%23dee2e6%21important%7D%2Eborder%2D0%7Bborder%3A0%21important%7D%2Eborder%2Dtop%2D0%7Bborder%2Dtop%3A0%21important%7D%2Eborder%2Dright%2D0%7Bborder%2Dright%3A0%21important%7D%2Eborder%2Dbottom%2D0%7Bborder%2Dbottom%3A0%21important%7D%2Eborder%2Dleft%2D0%7Bborder%2Dleft%3A0%21important%7D%2Eborder%2Dprimary%7Bborder%2Dcolor%3A%23007bff%21important%7D%2Eborder%2Dsecondary%7Bborder%2Dcolor%3A%236c757d%21important%7D%2Eborder%2Dsuccess%7Bborder%2Dcolor%3A%2328a745%21important%7D%2Eborder%2Dinfo%7Bborder%2Dcolor%3A%2317a2b8%21important%7D%2Eborder%2Dwarning%7Bborder%2Dcolor%3A%23ffc107%21important%7D%2Eborder%2Ddanger%7Bborder%2Dcolor%3A%23dc3545%21important%7D%2Eborder%2Dlight%7Bborder%2Dcolor%3A%23f8f9fa%21important%7D%2Eborder%2Ddark%7Bborder%2Dcolor%3A%23343a40%21important%7D%2Eborder%2Dwhite%7Bborder%2Dcolor%3A%23fff%21important%7D%2Erounded%7Bborder%2Dradius%3A%2E25rem%21important%7D%2Erounded%2Dtop%7Bborder%2Dtop%2Dleft%2Dradius%3A%2E25rem%21important%3Bborder%2Dtop%2Dright%2Dradius%3A%2E25rem%21important%7D%2Erounded%2Dright%7Bborder%2Dtop%2Dright%2Dradius%3A%2E25rem%21important%3Bborder%2Dbottom%2Dright%2Dradius%3A%2E25rem%21important%7D%2Erounded%2Dbottom%7Bborder%2Dbottom%2Dright%2Dradius%3A%2E25rem%21important%3Bborder%2Dbottom%2Dleft%2Dradius%3A%2E25rem%21important%7D%2Erounded%2Dleft%7Bborder%2Dtop%2Dleft%2Dradius%3A%2E25rem%21important%3Bborder%2Dbottom%2Dleft%2Dradius%3A%2E25rem%21important%7D%2Erounded%2Dcircle%7Bborder%2Dradius%3A50%25%21important%7D%2Erounded%2D0%7Bborder%2Dradius%3A0%21important%7D%2Eclearfix%3A%3Aafter%7Bdisplay%3Ablock%3Bclear%3Aboth%3Bcontent%3A%22%22%7D%2Ed%2Dnone%7Bdisplay%3Anone%21important%7D%2Ed%2Dinline%7Bdisplay%3Ainline%21important%7D%2Ed%2Dinline%2Dblock%7Bdisplay%3Ainline%2Dblock%21important%7D%2Ed%2Dblock%7Bdisplay%3Ablock%21important%7D%2Ed%2Dtable%7Bdisplay%3Atable%21important%7D%2Ed%2Dtable%2Drow%7Bdisplay%3Atable%2Drow%21important%7D%2Ed%2Dtable%2Dcell%7Bdisplay%3Atable%2Dcell%21important%7D%2Ed%2Dflex%7Bdisplay%3A%2Dwebkit%2Dbox%21important%3Bdisplay%3A%2Dms%2Dflexbox%21important%3Bdisplay%3Aflex%21important%7D%2Ed%2Dinline%2Dflex%7Bdisplay%3A%2Dwebkit%2Dinline%2Dbox%21important%3Bdisplay%3A%2Dms%2Dinline%2Dflexbox%21important%3Bdisplay%3Ainline%2Dflex%21important%7D%40media%20%28min%2Dwidth%3A576px%29%7B%2Ed%2Dsm%2Dnone%7Bdisplay%3Anone%21important%7D%2Ed%2Dsm%2Dinline%7Bdisplay%3Ainline%21important%7D%2Ed%2Dsm%2Dinline%2Dblock%7Bdisplay%3Ainline%2Dblock%21important%7D%2Ed%2Dsm%2Dblock%7Bdisplay%3Ablock%21important%7D%2Ed%2Dsm%2Dtable%7Bdisplay%3Atable%21important%7D%2Ed%2Dsm%2Dtable%2Drow%7Bdisplay%3Atable%2Drow%21important%7D%2Ed%2Dsm%2Dtable%2Dcell%7Bdisplay%3Atable%2Dcell%21important%7D%2Ed%2Dsm%2Dflex%7Bdisplay%3A%2Dwebkit%2Dbox%21important%3Bdisplay%3A%2Dms%2Dflexbox%21important%3Bdisplay%3Aflex%21important%7D%2Ed%2Dsm%2Dinline%2Dflex%7Bdisplay%3A%2Dwebkit%2Dinline%2Dbox%21important%3Bdisplay%3A%2Dms%2Dinline%2Dflexbox%21important%3Bdisplay%3Ainline%2Dflex%21important%7D%7D%40media%20%28min%2Dwidth%3A768px%29%7B%2Ed%2Dmd%2Dnone%7Bdisplay%3Anone%21important%7D%2Ed%2Dmd%2Dinline%7Bdisplay%3Ainline%21important%7D%2Ed%2Dmd%2Dinline%2Dblock%7Bdisplay%3Ainline%2Dblock%21important%7D%2Ed%2Dmd%2Dblock%7Bdisplay%3Ablock%21important%7D%2Ed%2Dmd%2Dtable%7Bdisplay%3Atable%21important%7D%2Ed%2Dmd%2Dtable%2Drow%7Bdisplay%3Atable%2Drow%21important%7D%2Ed%2Dmd%2Dtable%2Dcell%7Bdisplay%3Atable%2Dcell%21important%7D%2Ed%2Dmd%2Dflex%7Bdisplay%3A%2Dwebkit%2Dbox%21important%3Bdisplay%3A%2Dms%2Dflexbox%21important%3Bdisplay%3Aflex%21important%7D%2Ed%2Dmd%2Dinline%2Dflex%7Bdisplay%3A%2Dwebkit%2Dinline%2Dbox%21important%3Bdisplay%3A%2Dms%2Dinline%2Dflexbox%21important%3Bdisplay%3Ainline%2Dflex%21important%7D%7D%40media%20%28min%2Dwidth%3A992px%29%7B%2Ed%2Dlg%2Dnone%7Bdisplay%3Anone%21important%7D%2Ed%2Dlg%2Dinline%7Bdisplay%3Ainline%21important%7D%2Ed%2Dlg%2Dinline%2Dblock%7Bdisplay%3Ainline%2Dblock%21important%7D%2Ed%2Dlg%2Dblock%7Bdisplay%3Ablock%21important%7D%2Ed%2Dlg%2Dtable%7Bdisplay%3Atable%21important%7D%2Ed%2Dlg%2Dtable%2Drow%7Bdisplay%3Atable%2Drow%21important%7D%2Ed%2Dlg%2Dtable%2Dcell%7Bdisplay%3Atable%2Dcell%21important%7D%2Ed%2Dlg%2Dflex%7Bdisplay%3A%2Dwebkit%2Dbox%21important%3Bdisplay%3A%2Dms%2Dflexbox%21important%3Bdisplay%3Aflex%21important%7D%2Ed%2Dlg%2Dinline%2Dflex%7Bdisplay%3A%2Dwebkit%2Dinline%2Dbox%21important%3Bdisplay%3A%2Dms%2Dinline%2Dflexbox%21important%3Bdisplay%3Ainline%2Dflex%21important%7D%7D%40media%20%28min%2Dwidth%3A1200px%29%7B%2Ed%2Dxl%2Dnone%7Bdisplay%3Anone%21important%7D%2Ed%2Dxl%2Dinline%7Bdisplay%3Ainline%21important%7D%2Ed%2Dxl%2Dinline%2Dblock%7Bdisplay%3Ainline%2Dblock%21important%7D%2Ed%2Dxl%2Dblock%7Bdisplay%3Ablock%21important%7D%2Ed%2Dxl%2Dtable%7Bdisplay%3Atable%21important%7D%2Ed%2Dxl%2Dtable%2Drow%7Bdisplay%3Atable%2Drow%21important%7D%2Ed%2Dxl%2Dtable%2Dcell%7Bdisplay%3Atable%2Dcell%21important%7D%2Ed%2Dxl%2Dflex%7Bdisplay%3A%2Dwebkit%2Dbox%21important%3Bdisplay%3A%2Dms%2Dflexbox%21important%3Bdisplay%3Aflex%21important%7D%2Ed%2Dxl%2Dinline%2Dflex%7Bdisplay%3A%2Dwebkit%2Dinline%2Dbox%21important%3Bdisplay%3A%2Dms%2Dinline%2Dflexbox%21important%3Bdisplay%3Ainline%2Dflex%21important%7D%7D%40media%20print%7B%2Ed%2Dprint%2Dnone%7Bdisplay%3Anone%21important%7D%2Ed%2Dprint%2Dinline%7Bdisplay%3Ainline%21important%7D%2Ed%2Dprint%2Dinline%2Dblock%7Bdisplay%3Ainline%2Dblock%21important%7D%2Ed%2Dprint%2Dblock%7Bdisplay%3Ablock%21important%7D%2Ed%2Dprint%2Dtable%7Bdisplay%3Atable%21important%7D%2Ed%2Dprint%2Dtable%2Drow%7Bdisplay%3Atable%2Drow%21important%7D%2Ed%2Dprint%2Dtable%2Dcell%7Bdisplay%3Atable%2Dcell%21important%7D%2Ed%2Dprint%2Dflex%7Bdisplay%3A%2Dwebkit%2Dbox%21important%3Bdisplay%3A%2Dms%2Dflexbox%21important%3Bdisplay%3Aflex%21important%7D%2Ed%2Dprint%2Dinline%2Dflex%7Bdisplay%3A%2Dwebkit%2Dinline%2Dbox%21important%3Bdisplay%3A%2Dms%2Dinline%2Dflexbox%21important%3Bdisplay%3Ainline%2Dflex%21important%7D%7D%2Eembed%2Dresponsive%7Bposition%3Arelative%3Bdisplay%3Ablock%3Bwidth%3A100%25%3Bpadding%3A0%3Boverflow%3Ahidden%7D%2Eembed%2Dresponsive%3A%3Abefore%7Bdisplay%3Ablock%3Bcontent%3A%22%22%7D%2Eembed%2Dresponsive%20%2Eembed%2Dresponsive%2Ditem%2C%2Eembed%2Dresponsive%20embed%2C%2Eembed%2Dresponsive%20iframe%2C%2Eembed%2Dresponsive%20object%2C%2Eembed%2Dresponsive%20video%7Bposition%3Aabsolute%3Btop%3A0%3Bbottom%3A0%3Bleft%3A0%3Bwidth%3A100%25%3Bheight%3A100%25%3Bborder%3A0%7D%2Eembed%2Dresponsive%2D21by9%3A%3Abefore%7Bpadding%2Dtop%3A42%2E857143%25%7D%2Eembed%2Dresponsive%2D16by9%3A%3Abefore%7Bpadding%2Dtop%3A56%2E25%25%7D%2Eembed%2Dresponsive%2D4by3%3A%3Abefore%7Bpadding%2Dtop%3A75%25%7D%2Eembed%2Dresponsive%2D1by1%3A%3Abefore%7Bpadding%2Dtop%3A100%25%7D%2Eflex%2Drow%7B%2Dwebkit%2Dbox%2Dorient%3Ahorizontal%21important%3B%2Dwebkit%2Dbox%2Ddirection%3Anormal%21important%3B%2Dms%2Dflex%2Ddirection%3Arow%21important%3Bflex%2Ddirection%3Arow%21important%7D%2Eflex%2Dcolumn%7B%2Dwebkit%2Dbox%2Dorient%3Avertical%21important%3B%2Dwebkit%2Dbox%2Ddirection%3Anormal%21important%3B%2Dms%2Dflex%2Ddirection%3Acolumn%21important%3Bflex%2Ddirection%3Acolumn%21important%7D%2Eflex%2Drow%2Dreverse%7B%2Dwebkit%2Dbox%2Dorient%3Ahorizontal%21important%3B%2Dwebkit%2Dbox%2Ddirection%3Areverse%21important%3B%2Dms%2Dflex%2Ddirection%3Arow%2Dreverse%21important%3Bflex%2Ddirection%3Arow%2Dreverse%21important%7D%2Eflex%2Dcolumn%2Dreverse%7B%2Dwebkit%2Dbox%2Dorient%3Avertical%21important%3B%2Dwebkit%2Dbox%2Ddirection%3Areverse%21important%3B%2Dms%2Dflex%2Ddirection%3Acolumn%2Dreverse%21important%3Bflex%2Ddirection%3Acolumn%2Dreverse%21important%7D%2Eflex%2Dwrap%7B%2Dms%2Dflex%2Dwrap%3Awrap%21important%3Bflex%2Dwrap%3Awrap%21important%7D%2Eflex%2Dnowrap%7B%2Dms%2Dflex%2Dwrap%3Anowrap%21important%3Bflex%2Dwrap%3Anowrap%21important%7D%2Eflex%2Dwrap%2Dreverse%7B%2Dms%2Dflex%2Dwrap%3Awrap%2Dreverse%21important%3Bflex%2Dwrap%3Awrap%2Dreverse%21important%7D%2Ejustify%2Dcontent%2Dstart%7B%2Dwebkit%2Dbox%2Dpack%3Astart%21important%3B%2Dms%2Dflex%2Dpack%3Astart%21important%3Bjustify%2Dcontent%3Aflex%2Dstart%21important%7D%2Ejustify%2Dcontent%2Dend%7B%2Dwebkit%2Dbox%2Dpack%3Aend%21important%3B%2Dms%2Dflex%2Dpack%3Aend%21important%3Bjustify%2Dcontent%3Aflex%2Dend%21important%7D%2Ejustify%2Dcontent%2Dcenter%7B%2Dwebkit%2Dbox%2Dpack%3Acenter%21important%3B%2Dms%2Dflex%2Dpack%3Acenter%21important%3Bjustify%2Dcontent%3Acenter%21important%7D%2Ejustify%2Dcontent%2Dbetween%7B%2Dwebkit%2Dbox%2Dpack%3Ajustify%21important%3B%2Dms%2Dflex%2Dpack%3Ajustify%21important%3Bjustify%2Dcontent%3Aspace%2Dbetween%21important%7D%2Ejustify%2Dcontent%2Daround%7B%2Dms%2Dflex%2Dpack%3Adistribute%21important%3Bjustify%2Dcontent%3Aspace%2Daround%21important%7D%2Ealign%2Ditems%2Dstart%7B%2Dwebkit%2Dbox%2Dalign%3Astart%21important%3B%2Dms%2Dflex%2Dalign%3Astart%21important%3Balign%2Ditems%3Aflex%2Dstart%21important%7D%2Ealign%2Ditems%2Dend%7B%2Dwebkit%2Dbox%2Dalign%3Aend%21important%3B%2Dms%2Dflex%2Dalign%3Aend%21important%3Balign%2Ditems%3Aflex%2Dend%21important%7D%2Ealign%2Ditems%2Dcenter%7B%2Dwebkit%2Dbox%2Dalign%3Acenter%21important%3B%2Dms%2Dflex%2Dalign%3Acenter%21important%3Balign%2Ditems%3Acenter%21important%7D%2Ealign%2Ditems%2Dbaseline%7B%2Dwebkit%2Dbox%2Dalign%3Abaseline%21important%3B%2Dms%2Dflex%2Dalign%3Abaseline%21important%3Balign%2Ditems%3Abaseline%21important%7D%2Ealign%2Ditems%2Dstretch%7B%2Dwebkit%2Dbox%2Dalign%3Astretch%21important%3B%2Dms%2Dflex%2Dalign%3Astretch%21important%3Balign%2Ditems%3Astretch%21important%7D%2Ealign%2Dcontent%2Dstart%7B%2Dms%2Dflex%2Dline%2Dpack%3Astart%21important%3Balign%2Dcontent%3Aflex%2Dstart%21important%7D%2Ealign%2Dcontent%2Dend%7B%2Dms%2Dflex%2Dline%2Dpack%3Aend%21important%3Balign%2Dcontent%3Aflex%2Dend%21important%7D%2Ealign%2Dcontent%2Dcenter%7B%2Dms%2Dflex%2Dline%2Dpack%3Acenter%21important%3Balign%2Dcontent%3Acenter%21important%7D%2Ealign%2Dcontent%2Dbetween%7B%2Dms%2Dflex%2Dline%2Dpack%3Ajustify%21important%3Balign%2Dcontent%3Aspace%2Dbetween%21important%7D%2Ealign%2Dcontent%2Daround%7B%2Dms%2Dflex%2Dline%2Dpack%3Adistribute%21important%3Balign%2Dcontent%3Aspace%2Daround%21important%7D%2Ealign%2Dcontent%2Dstretch%7B%2Dms%2Dflex%2Dline%2Dpack%3Astretch%21important%3Balign%2Dcontent%3Astretch%21important%7D%2Ealign%2Dself%2Dauto%7B%2Dms%2Dflex%2Ditem%2Dalign%3Aauto%21important%3Balign%2Dself%3Aauto%21important%7D%2Ealign%2Dself%2Dstart%7B%2Dms%2Dflex%2Ditem%2Dalign%3Astart%21important%3Balign%2Dself%3Aflex%2Dstart%21important%7D%2Ealign%2Dself%2Dend%7B%2Dms%2Dflex%2Ditem%2Dalign%3Aend%21important%3Balign%2Dself%3Aflex%2Dend%21important%7D%2Ealign%2Dself%2Dcenter%7B%2Dms%2Dflex%2Ditem%2Dalign%3Acenter%21important%3Balign%2Dself%3Acenter%21important%7D%2Ealign%2Dself%2Dbaseline%7B%2Dms%2Dflex%2Ditem%2Dalign%3Abaseline%21important%3Balign%2Dself%3Abaseline%21important%7D%2Ealign%2Dself%2Dstretch%7B%2Dms%2Dflex%2Ditem%2Dalign%3Astretch%21important%3Balign%2Dself%3Astretch%21important%7D%40media%20%28min%2Dwidth%3A576px%29%7B%2Eflex%2Dsm%2Drow%7B%2Dwebkit%2Dbox%2Dorient%3Ahorizontal%21important%3B%2Dwebkit%2Dbox%2Ddirection%3Anormal%21important%3B%2Dms%2Dflex%2Ddirection%3Arow%21important%3Bflex%2Ddirection%3Arow%21important%7D%2Eflex%2Dsm%2Dcolumn%7B%2Dwebkit%2Dbox%2Dorient%3Avertical%21important%3B%2Dwebkit%2Dbox%2Ddirection%3Anormal%21important%3B%2Dms%2Dflex%2Ddirection%3Acolumn%21important%3Bflex%2Ddirection%3Acolumn%21important%7D%2Eflex%2Dsm%2Drow%2Dreverse%7B%2Dwebkit%2Dbox%2Dorient%3Ahorizontal%21important%3B%2Dwebkit%2Dbox%2Ddirection%3Areverse%21important%3B%2Dms%2Dflex%2Ddirection%3Arow%2Dreverse%21important%3Bflex%2Ddirection%3Arow%2Dreverse%21important%7D%2Eflex%2Dsm%2Dcolumn%2Dreverse%7B%2Dwebkit%2Dbox%2Dorient%3Avertical%21important%3B%2Dwebkit%2Dbox%2Ddirection%3Areverse%21important%3B%2Dms%2Dflex%2Ddirection%3Acolumn%2Dreverse%21important%3Bflex%2Ddirection%3Acolumn%2Dreverse%21important%7D%2Eflex%2Dsm%2Dwrap%7B%2Dms%2Dflex%2Dwrap%3Awrap%21important%3Bflex%2Dwrap%3Awrap%21important%7D%2Eflex%2Dsm%2Dnowrap%7B%2Dms%2Dflex%2Dwrap%3Anowrap%21important%3Bflex%2Dwrap%3Anowrap%21important%7D%2Eflex%2Dsm%2Dwrap%2Dreverse%7B%2Dms%2Dflex%2Dwrap%3Awrap%2Dreverse%21important%3Bflex%2Dwrap%3Awrap%2Dreverse%21important%7D%2Ejustify%2Dcontent%2Dsm%2Dstart%7B%2Dwebkit%2Dbox%2Dpack%3Astart%21important%3B%2Dms%2Dflex%2Dpack%3Astart%21important%3Bjustify%2Dcontent%3Aflex%2Dstart%21important%7D%2Ejustify%2Dcontent%2Dsm%2Dend%7B%2Dwebkit%2Dbox%2Dpack%3Aend%21important%3B%2Dms%2Dflex%2Dpack%3Aend%21important%3Bjustify%2Dcontent%3Aflex%2Dend%21important%7D%2Ejustify%2Dcontent%2Dsm%2Dcenter%7B%2Dwebkit%2Dbox%2Dpack%3Acenter%21important%3B%2Dms%2Dflex%2Dpack%3Acenter%21important%3Bjustify%2Dcontent%3Acenter%21important%7D%2Ejustify%2Dcontent%2Dsm%2Dbetween%7B%2Dwebkit%2Dbox%2Dpack%3Ajustify%21important%3B%2Dms%2Dflex%2Dpack%3Ajustify%21important%3Bjustify%2Dcontent%3Aspace%2Dbetween%21important%7D%2Ejustify%2Dcontent%2Dsm%2Daround%7B%2Dms%2Dflex%2Dpack%3Adistribute%21important%3Bjustify%2Dcontent%3Aspace%2Daround%21important%7D%2Ealign%2Ditems%2Dsm%2Dstart%7B%2Dwebkit%2Dbox%2Dalign%3Astart%21important%3B%2Dms%2Dflex%2Dalign%3Astart%21important%3Balign%2Ditems%3Aflex%2Dstart%21important%7D%2Ealign%2Ditems%2Dsm%2Dend%7B%2Dwebkit%2Dbox%2Dalign%3Aend%21important%3B%2Dms%2Dflex%2Dalign%3Aend%21important%3Balign%2Ditems%3Aflex%2Dend%21important%7D%2Ealign%2Ditems%2Dsm%2Dcenter%7B%2Dwebkit%2Dbox%2Dalign%3Acenter%21important%3B%2Dms%2Dflex%2Dalign%3Acenter%21important%3Balign%2Ditems%3Acenter%21important%7D%2Ealign%2Ditems%2Dsm%2Dbaseline%7B%2Dwebkit%2Dbox%2Dalign%3Abaseline%21important%3B%2Dms%2Dflex%2Dalign%3Abaseline%21important%3Balign%2Ditems%3Abaseline%21important%7D%2Ealign%2Ditems%2Dsm%2Dstretch%7B%2Dwebkit%2Dbox%2Dalign%3Astretch%21important%3B%2Dms%2Dflex%2Dalign%3Astretch%21important%3Balign%2Ditems%3Astretch%21important%7D%2Ealign%2Dcontent%2Dsm%2Dstart%7B%2Dms%2Dflex%2Dline%2Dpack%3Astart%21important%3Balign%2Dcontent%3Aflex%2Dstart%21important%7D%2Ealign%2Dcontent%2Dsm%2Dend%7B%2Dms%2Dflex%2Dline%2Dpack%3Aend%21important%3Balign%2Dcontent%3Aflex%2Dend%21important%7D%2Ealign%2Dcontent%2Dsm%2Dcenter%7B%2Dms%2Dflex%2Dline%2Dpack%3Acenter%21important%3Balign%2Dcontent%3Acenter%21important%7D%2Ealign%2Dcontent%2Dsm%2Dbetween%7B%2Dms%2Dflex%2Dline%2Dpack%3Ajustify%21important%3Balign%2Dcontent%3Aspace%2Dbetween%21important%7D%2Ealign%2Dcontent%2Dsm%2Daround%7B%2Dms%2Dflex%2Dline%2Dpack%3Adistribute%21important%3Balign%2Dcontent%3Aspace%2Daround%21important%7D%2Ealign%2Dcontent%2Dsm%2Dstretch%7B%2Dms%2Dflex%2Dline%2Dpack%3Astretch%21important%3Balign%2Dcontent%3Astretch%21important%7D%2Ealign%2Dself%2Dsm%2Dauto%7B%2Dms%2Dflex%2Ditem%2Dalign%3Aauto%21important%3Balign%2Dself%3Aauto%21important%7D%2Ealign%2Dself%2Dsm%2Dstart%7B%2Dms%2Dflex%2Ditem%2Dalign%3Astart%21important%3Balign%2Dself%3Aflex%2Dstart%21important%7D%2Ealign%2Dself%2Dsm%2Dend%7B%2Dms%2Dflex%2Ditem%2Dalign%3Aend%21important%3Balign%2Dself%3Aflex%2Dend%21important%7D%2Ealign%2Dself%2Dsm%2Dcenter%7B%2Dms%2Dflex%2Ditem%2Dalign%3Acenter%21important%3Balign%2Dself%3Acenter%21important%7D%2Ealign%2Dself%2Dsm%2Dbaseline%7B%2Dms%2Dflex%2Ditem%2Dalign%3Abaseline%21important%3Balign%2Dself%3Abaseline%21important%7D%2Ealign%2Dself%2Dsm%2Dstretch%7B%2Dms%2Dflex%2Ditem%2Dalign%3Astretch%21important%3Balign%2Dself%3Astretch%21important%7D%7D%40media%20%28min%2Dwidth%3A768px%29%7B%2Eflex%2Dmd%2Drow%7B%2Dwebkit%2Dbox%2Dorient%3Ahorizontal%21important%3B%2Dwebkit%2Dbox%2Ddirection%3Anormal%21important%3B%2Dms%2Dflex%2Ddirection%3Arow%21important%3Bflex%2Ddirection%3Arow%21important%7D%2Eflex%2Dmd%2Dcolumn%7B%2Dwebkit%2Dbox%2Dorient%3Avertical%21important%3B%2Dwebkit%2Dbox%2Ddirection%3Anormal%21important%3B%2Dms%2Dflex%2Ddirection%3Acolumn%21important%3Bflex%2Ddirection%3Acolumn%21important%7D%2Eflex%2Dmd%2Drow%2Dreverse%7B%2Dwebkit%2Dbox%2Dorient%3Ahorizontal%21important%3B%2Dwebkit%2Dbox%2Ddirection%3Areverse%21important%3B%2Dms%2Dflex%2Ddirection%3Arow%2Dreverse%21important%3Bflex%2Ddirection%3Arow%2Dreverse%21important%7D%2Eflex%2Dmd%2Dcolumn%2Dreverse%7B%2Dwebkit%2Dbox%2Dorient%3Avertical%21important%3B%2Dwebkit%2Dbox%2Ddirection%3Areverse%21important%3B%2Dms%2Dflex%2Ddirection%3Acolumn%2Dreverse%21important%3Bflex%2Ddirection%3Acolumn%2Dreverse%21important%7D%2Eflex%2Dmd%2Dwrap%7B%2Dms%2Dflex%2Dwrap%3Awrap%21important%3Bflex%2Dwrap%3Awrap%21important%7D%2Eflex%2Dmd%2Dnowrap%7B%2Dms%2Dflex%2Dwrap%3Anowrap%21important%3Bflex%2Dwrap%3Anowrap%21important%7D%2Eflex%2Dmd%2Dwrap%2Dreverse%7B%2Dms%2Dflex%2Dwrap%3Awrap%2Dreverse%21important%3Bflex%2Dwrap%3Awrap%2Dreverse%21important%7D%2Ejustify%2Dcontent%2Dmd%2Dstart%7B%2Dwebkit%2Dbox%2Dpack%3Astart%21important%3B%2Dms%2Dflex%2Dpack%3Astart%21important%3Bjustify%2Dcontent%3Aflex%2Dstart%21important%7D%2Ejustify%2Dcontent%2Dmd%2Dend%7B%2Dwebkit%2Dbox%2Dpack%3Aend%21important%3B%2Dms%2Dflex%2Dpack%3Aend%21important%3Bjustify%2Dcontent%3Aflex%2Dend%21important%7D%2Ejustify%2Dcontent%2Dmd%2Dcenter%7B%2Dwebkit%2Dbox%2Dpack%3Acenter%21important%3B%2Dms%2Dflex%2Dpack%3Acenter%21important%3Bjustify%2Dcontent%3Acenter%21important%7D%2Ejustify%2Dcontent%2Dmd%2Dbetween%7B%2Dwebkit%2Dbox%2Dpack%3Ajustify%21important%3B%2Dms%2Dflex%2Dpack%3Ajustify%21important%3Bjustify%2Dcontent%3Aspace%2Dbetween%21important%7D%2Ejustify%2Dcontent%2Dmd%2Daround%7B%2Dms%2Dflex%2Dpack%3Adistribute%21important%3Bjustify%2Dcontent%3Aspace%2Daround%21important%7D%2Ealign%2Ditems%2Dmd%2Dstart%7B%2Dwebkit%2Dbox%2Dalign%3Astart%21important%3B%2Dms%2Dflex%2Dalign%3Astart%21important%3Balign%2Ditems%3Aflex%2Dstart%21important%7D%2Ealign%2Ditems%2Dmd%2Dend%7B%2Dwebkit%2Dbox%2Dalign%3Aend%21important%3B%2Dms%2Dflex%2Dalign%3Aend%21important%3Balign%2Ditems%3Aflex%2Dend%21important%7D%2Ealign%2Ditems%2Dmd%2Dcenter%7B%2Dwebkit%2Dbox%2Dalign%3Acenter%21important%3B%2Dms%2Dflex%2Dalign%3Acenter%21important%3Balign%2Ditems%3Acenter%21important%7D%2Ealign%2Ditems%2Dmd%2Dbaseline%7B%2Dwebkit%2Dbox%2Dalign%3Abaseline%21important%3B%2Dms%2Dflex%2Dalign%3Abaseline%21important%3Balign%2Ditems%3Abaseline%21important%7D%2Ealign%2Ditems%2Dmd%2Dstretch%7B%2Dwebkit%2Dbox%2Dalign%3Astretch%21important%3B%2Dms%2Dflex%2Dalign%3Astretch%21important%3Balign%2Ditems%3Astretch%21important%7D%2Ealign%2Dcontent%2Dmd%2Dstart%7B%2Dms%2Dflex%2Dline%2Dpack%3Astart%21important%3Balign%2Dcontent%3Aflex%2Dstart%21important%7D%2Ealign%2Dcontent%2Dmd%2Dend%7B%2Dms%2Dflex%2Dline%2Dpack%3Aend%21important%3Balign%2Dcontent%3Aflex%2Dend%21important%7D%2Ealign%2Dcontent%2Dmd%2Dcenter%7B%2Dms%2Dflex%2Dline%2Dpack%3Acenter%21important%3Balign%2Dcontent%3Acenter%21important%7D%2Ealign%2Dcontent%2Dmd%2Dbetween%7B%2Dms%2Dflex%2Dline%2Dpack%3Ajustify%21important%3Balign%2Dcontent%3Aspace%2Dbetween%21important%7D%2Ealign%2Dcontent%2Dmd%2Daround%7B%2Dms%2Dflex%2Dline%2Dpack%3Adistribute%21important%3Balign%2Dcontent%3Aspace%2Daround%21important%7D%2Ealign%2Dcontent%2Dmd%2Dstretch%7B%2Dms%2Dflex%2Dline%2Dpack%3Astretch%21important%3Balign%2Dcontent%3Astretch%21important%7D%2Ealign%2Dself%2Dmd%2Dauto%7B%2Dms%2Dflex%2Ditem%2Dalign%3Aauto%21important%3Balign%2Dself%3Aauto%21important%7D%2Ealign%2Dself%2Dmd%2Dstart%7B%2Dms%2Dflex%2Ditem%2Dalign%3Astart%21important%3Balign%2Dself%3Aflex%2Dstart%21important%7D%2Ealign%2Dself%2Dmd%2Dend%7B%2Dms%2Dflex%2Ditem%2Dalign%3Aend%21important%3Balign%2Dself%3Aflex%2Dend%21important%7D%2Ealign%2Dself%2Dmd%2Dcenter%7B%2Dms%2Dflex%2Ditem%2Dalign%3Acenter%21important%3Balign%2Dself%3Acenter%21important%7D%2Ealign%2Dself%2Dmd%2Dbaseline%7B%2Dms%2Dflex%2Ditem%2Dalign%3Abaseline%21important%3Balign%2Dself%3Abaseline%21important%7D%2Ealign%2Dself%2Dmd%2Dstretch%7B%2Dms%2Dflex%2Ditem%2Dalign%3Astretch%21important%3Balign%2Dself%3Astretch%21important%7D%7D%40media%20%28min%2Dwidth%3A992px%29%7B%2Eflex%2Dlg%2Drow%7B%2Dwebkit%2Dbox%2Dorient%3Ahorizontal%21important%3B%2Dwebkit%2Dbox%2Ddirection%3Anormal%21important%3B%2Dms%2Dflex%2Ddirection%3Arow%21important%3Bflex%2Ddirection%3Arow%21important%7D%2Eflex%2Dlg%2Dcolumn%7B%2Dwebkit%2Dbox%2Dorient%3Avertical%21important%3B%2Dwebkit%2Dbox%2Ddirection%3Anormal%21important%3B%2Dms%2Dflex%2Ddirection%3Acolumn%21important%3Bflex%2Ddirection%3Acolumn%21important%7D%2Eflex%2Dlg%2Drow%2Dreverse%7B%2Dwebkit%2Dbox%2Dorient%3Ahorizontal%21important%3B%2Dwebkit%2Dbox%2Ddirection%3Areverse%21important%3B%2Dms%2Dflex%2Ddirection%3Arow%2Dreverse%21important%3Bflex%2Ddirection%3Arow%2Dreverse%21important%7D%2Eflex%2Dlg%2Dcolumn%2Dreverse%7B%2Dwebkit%2Dbox%2Dorient%3Avertical%21important%3B%2Dwebkit%2Dbox%2Ddirection%3Areverse%21important%3B%2Dms%2Dflex%2Ddirection%3Acolumn%2Dreverse%21important%3Bflex%2Ddirection%3Acolumn%2Dreverse%21important%7D%2Eflex%2Dlg%2Dwrap%7B%2Dms%2Dflex%2Dwrap%3Awrap%21important%3Bflex%2Dwrap%3Awrap%21important%7D%2Eflex%2Dlg%2Dnowrap%7B%2Dms%2Dflex%2Dwrap%3Anowrap%21important%3Bflex%2Dwrap%3Anowrap%21important%7D%2Eflex%2Dlg%2Dwrap%2Dreverse%7B%2Dms%2Dflex%2Dwrap%3Awrap%2Dreverse%21important%3Bflex%2Dwrap%3Awrap%2Dreverse%21important%7D%2Ejustify%2Dcontent%2Dlg%2Dstart%7B%2Dwebkit%2Dbox%2Dpack%3Astart%21important%3B%2Dms%2Dflex%2Dpack%3Astart%21important%3Bjustify%2Dcontent%3Aflex%2Dstart%21important%7D%2Ejustify%2Dcontent%2Dlg%2Dend%7B%2Dwebkit%2Dbox%2Dpack%3Aend%21important%3B%2Dms%2Dflex%2Dpack%3Aend%21important%3Bjustify%2Dcontent%3Aflex%2Dend%21important%7D%2Ejustify%2Dcontent%2Dlg%2Dcenter%7B%2Dwebkit%2Dbox%2Dpack%3Acenter%21important%3B%2Dms%2Dflex%2Dpack%3Acenter%21important%3Bjustify%2Dcontent%3Acenter%21important%7D%2Ejustify%2Dcontent%2Dlg%2Dbetween%7B%2Dwebkit%2Dbox%2Dpack%3Ajustify%21important%3B%2Dms%2Dflex%2Dpack%3Ajustify%21important%3Bjustify%2Dcontent%3Aspace%2Dbetween%21important%7D%2Ejustify%2Dcontent%2Dlg%2Daround%7B%2Dms%2Dflex%2Dpack%3Adistribute%21important%3Bjustify%2Dcontent%3Aspace%2Daround%21important%7D%2Ealign%2Ditems%2Dlg%2Dstart%7B%2Dwebkit%2Dbox%2Dalign%3Astart%21important%3B%2Dms%2Dflex%2Dalign%3Astart%21important%3Balign%2Ditems%3Aflex%2Dstart%21important%7D%2Ealign%2Ditems%2Dlg%2Dend%7B%2Dwebkit%2Dbox%2Dalign%3Aend%21important%3B%2Dms%2Dflex%2Dalign%3Aend%21important%3Balign%2Ditems%3Aflex%2Dend%21important%7D%2Ealign%2Ditems%2Dlg%2Dcenter%7B%2Dwebkit%2Dbox%2Dalign%3Acenter%21important%3B%2Dms%2Dflex%2Dalign%3Acenter%21important%3Balign%2Ditems%3Acenter%21important%7D%2Ealign%2Ditems%2Dlg%2Dbaseline%7B%2Dwebkit%2Dbox%2Dalign%3Abaseline%21important%3B%2Dms%2Dflex%2Dalign%3Abaseline%21important%3Balign%2Ditems%3Abaseline%21important%7D%2Ealign%2Ditems%2Dlg%2Dstretch%7B%2Dwebkit%2Dbox%2Dalign%3Astretch%21important%3B%2Dms%2Dflex%2Dalign%3Astretch%21important%3Balign%2Ditems%3Astretch%21important%7D%2Ealign%2Dcontent%2Dlg%2Dstart%7B%2Dms%2Dflex%2Dline%2Dpack%3Astart%21important%3Balign%2Dcontent%3Aflex%2Dstart%21important%7D%2Ealign%2Dcontent%2Dlg%2Dend%7B%2Dms%2Dflex%2Dline%2Dpack%3Aend%21important%3Balign%2Dcontent%3Aflex%2Dend%21important%7D%2Ealign%2Dcontent%2Dlg%2Dcenter%7B%2Dms%2Dflex%2Dline%2Dpack%3Acenter%21important%3Balign%2Dcontent%3Acenter%21important%7D%2Ealign%2Dcontent%2Dlg%2Dbetween%7B%2Dms%2Dflex%2Dline%2Dpack%3Ajustify%21important%3Balign%2Dcontent%3Aspace%2Dbetween%21important%7D%2Ealign%2Dcontent%2Dlg%2Daround%7B%2Dms%2Dflex%2Dline%2Dpack%3Adistribute%21important%3Balign%2Dcontent%3Aspace%2Daround%21important%7D%2Ealign%2Dcontent%2Dlg%2Dstretch%7B%2Dms%2Dflex%2Dline%2Dpack%3Astretch%21important%3Balign%2Dcontent%3Astretch%21important%7D%2Ealign%2Dself%2Dlg%2Dauto%7B%2Dms%2Dflex%2Ditem%2Dalign%3Aauto%21important%3Balign%2Dself%3Aauto%21important%7D%2Ealign%2Dself%2Dlg%2Dstart%7B%2Dms%2Dflex%2Ditem%2Dalign%3Astart%21important%3Balign%2Dself%3Aflex%2Dstart%21important%7D%2Ealign%2Dself%2Dlg%2Dend%7B%2Dms%2Dflex%2Ditem%2Dalign%3Aend%21important%3Balign%2Dself%3Aflex%2Dend%21important%7D%2Ealign%2Dself%2Dlg%2Dcenter%7B%2Dms%2Dflex%2Ditem%2Dalign%3Acenter%21important%3Balign%2Dself%3Acenter%21important%7D%2Ealign%2Dself%2Dlg%2Dbaseline%7B%2Dms%2Dflex%2Ditem%2Dalign%3Abaseline%21important%3Balign%2Dself%3Abaseline%21important%7D%2Ealign%2Dself%2Dlg%2Dstretch%7B%2Dms%2Dflex%2Ditem%2Dalign%3Astretch%21important%3Balign%2Dself%3Astretch%21important%7D%7D%40media%20%28min%2Dwidth%3A1200px%29%7B%2Eflex%2Dxl%2Drow%7B%2Dwebkit%2Dbox%2Dorient%3Ahorizontal%21important%3B%2Dwebkit%2Dbox%2Ddirection%3Anormal%21important%3B%2Dms%2Dflex%2Ddirection%3Arow%21important%3Bflex%2Ddirection%3Arow%21important%7D%2Eflex%2Dxl%2Dcolumn%7B%2Dwebkit%2Dbox%2Dorient%3Avertical%21important%3B%2Dwebkit%2Dbox%2Ddirection%3Anormal%21important%3B%2Dms%2Dflex%2Ddirection%3Acolumn%21important%3Bflex%2Ddirection%3Acolumn%21important%7D%2Eflex%2Dxl%2Drow%2Dreverse%7B%2Dwebkit%2Dbox%2Dorient%3Ahorizontal%21important%3B%2Dwebkit%2Dbox%2Ddirection%3Areverse%21important%3B%2Dms%2Dflex%2Ddirection%3Arow%2Dreverse%21important%3Bflex%2Ddirection%3Arow%2Dreverse%21important%7D%2Eflex%2Dxl%2Dcolumn%2Dreverse%7B%2Dwebkit%2Dbox%2Dorient%3Avertical%21important%3B%2Dwebkit%2Dbox%2Ddirection%3Areverse%21important%3B%2Dms%2Dflex%2Ddirection%3Acolumn%2Dreverse%21important%3Bflex%2Ddirection%3Acolumn%2Dreverse%21important%7D%2Eflex%2Dxl%2Dwrap%7B%2Dms%2Dflex%2Dwrap%3Awrap%21important%3Bflex%2Dwrap%3Awrap%21important%7D%2Eflex%2Dxl%2Dnowrap%7B%2Dms%2Dflex%2Dwrap%3Anowrap%21important%3Bflex%2Dwrap%3Anowrap%21important%7D%2Eflex%2Dxl%2Dwrap%2Dreverse%7B%2Dms%2Dflex%2Dwrap%3Awrap%2Dreverse%21important%3Bflex%2Dwrap%3Awrap%2Dreverse%21important%7D%2Ejustify%2Dcontent%2Dxl%2Dstart%7B%2Dwebkit%2Dbox%2Dpack%3Astart%21important%3B%2Dms%2Dflex%2Dpack%3Astart%21important%3Bjustify%2Dcontent%3Aflex%2Dstart%21important%7D%2Ejustify%2Dcontent%2Dxl%2Dend%7B%2Dwebkit%2Dbox%2Dpack%3Aend%21important%3B%2Dms%2Dflex%2Dpack%3Aend%21important%3Bjustify%2Dcontent%3Aflex%2Dend%21important%7D%2Ejustify%2Dcontent%2Dxl%2Dcenter%7B%2Dwebkit%2Dbox%2Dpack%3Acenter%21important%3B%2Dms%2Dflex%2Dpack%3Acenter%21important%3Bjustify%2Dcontent%3Acenter%21important%7D%2Ejustify%2Dcontent%2Dxl%2Dbetween%7B%2Dwebkit%2Dbox%2Dpack%3Ajustify%21important%3B%2Dms%2Dflex%2Dpack%3Ajustify%21important%3Bjustify%2Dcontent%3Aspace%2Dbetween%21important%7D%2Ejustify%2Dcontent%2Dxl%2Daround%7B%2Dms%2Dflex%2Dpack%3Adistribute%21important%3Bjustify%2Dcontent%3Aspace%2Daround%21important%7D%2Ealign%2Ditems%2Dxl%2Dstart%7B%2Dwebkit%2Dbox%2Dalign%3Astart%21important%3B%2Dms%2Dflex%2Dalign%3Astart%21important%3Balign%2Ditems%3Aflex%2Dstart%21important%7D%2Ealign%2Ditems%2Dxl%2Dend%7B%2Dwebkit%2Dbox%2Dalign%3Aend%21important%3B%2Dms%2Dflex%2Dalign%3Aend%21important%3Balign%2Ditems%3Aflex%2Dend%21important%7D%2Ealign%2Ditems%2Dxl%2Dcenter%7B%2Dwebkit%2Dbox%2Dalign%3Acenter%21important%3B%2Dms%2Dflex%2Dalign%3Acenter%21important%3Balign%2Ditems%3Acenter%21important%7D%2Ealign%2Ditems%2Dxl%2Dbaseline%7B%2Dwebkit%2Dbox%2Dalign%3Abaseline%21important%3B%2Dms%2Dflex%2Dalign%3Abaseline%21important%3Balign%2Ditems%3Abaseline%21important%7D%2Ealign%2Ditems%2Dxl%2Dstretch%7B%2Dwebkit%2Dbox%2Dalign%3Astretch%21important%3B%2Dms%2Dflex%2Dalign%3Astretch%21important%3Balign%2Ditems%3Astretch%21important%7D%2Ealign%2Dcontent%2Dxl%2Dstart%7B%2Dms%2Dflex%2Dline%2Dpack%3Astart%21important%3Balign%2Dcontent%3Aflex%2Dstart%21important%7D%2Ealign%2Dcontent%2Dxl%2Dend%7B%2Dms%2Dflex%2Dline%2Dpack%3Aend%21important%3Balign%2Dcontent%3Aflex%2Dend%21important%7D%2Ealign%2Dcontent%2Dxl%2Dcenter%7B%2Dms%2Dflex%2Dline%2Dpack%3Acenter%21important%3Balign%2Dcontent%3Acenter%21important%7D%2Ealign%2Dcontent%2Dxl%2Dbetween%7B%2Dms%2Dflex%2Dline%2Dpack%3Ajustify%21important%3Balign%2Dcontent%3Aspace%2Dbetween%21important%7D%2Ealign%2Dcontent%2Dxl%2Daround%7B%2Dms%2Dflex%2Dline%2Dpack%3Adistribute%21important%3Balign%2Dcontent%3Aspace%2Daround%21important%7D%2Ealign%2Dcontent%2Dxl%2Dstretch%7B%2Dms%2Dflex%2Dline%2Dpack%3Astretch%21important%3Balign%2Dcontent%3Astretch%21important%7D%2Ealign%2Dself%2Dxl%2Dauto%7B%2Dms%2Dflex%2Ditem%2Dalign%3Aauto%21important%3Balign%2Dself%3Aauto%21important%7D%2Ealign%2Dself%2Dxl%2Dstart%7B%2Dms%2Dflex%2Ditem%2Dalign%3Astart%21important%3Balign%2Dself%3Aflex%2Dstart%21important%7D%2Ealign%2Dself%2Dxl%2Dend%7B%2Dms%2Dflex%2Ditem%2Dalign%3Aend%21important%3Balign%2Dself%3Aflex%2Dend%21important%7D%2Ealign%2Dself%2Dxl%2Dcenter%7B%2Dms%2Dflex%2Ditem%2Dalign%3Acenter%21important%3Balign%2Dself%3Acenter%21important%7D%2Ealign%2Dself%2Dxl%2Dbaseline%7B%2Dms%2Dflex%2Ditem%2Dalign%3Abaseline%21important%3Balign%2Dself%3Abaseline%21important%7D%2Ealign%2Dself%2Dxl%2Dstretch%7B%2Dms%2Dflex%2Ditem%2Dalign%3Astretch%21important%3Balign%2Dself%3Astretch%21important%7D%7D%2Efloat%2Dleft%7Bfloat%3Aleft%21important%7D%2Efloat%2Dright%7Bfloat%3Aright%21important%7D%2Efloat%2Dnone%7Bfloat%3Anone%21important%7D%40media%20%28min%2Dwidth%3A576px%29%7B%2Efloat%2Dsm%2Dleft%7Bfloat%3Aleft%21important%7D%2Efloat%2Dsm%2Dright%7Bfloat%3Aright%21important%7D%2Efloat%2Dsm%2Dnone%7Bfloat%3Anone%21important%7D%7D%40media%20%28min%2Dwidth%3A768px%29%7B%2Efloat%2Dmd%2Dleft%7Bfloat%3Aleft%21important%7D%2Efloat%2Dmd%2Dright%7Bfloat%3Aright%21important%7D%2Efloat%2Dmd%2Dnone%7Bfloat%3Anone%21important%7D%7D%40media%20%28min%2Dwidth%3A992px%29%7B%2Efloat%2Dlg%2Dleft%7Bfloat%3Aleft%21important%7D%2Efloat%2Dlg%2Dright%7Bfloat%3Aright%21important%7D%2Efloat%2Dlg%2Dnone%7Bfloat%3Anone%21important%7D%7D%40media%20%28min%2Dwidth%3A1200px%29%7B%2Efloat%2Dxl%2Dleft%7Bfloat%3Aleft%21important%7D%2Efloat%2Dxl%2Dright%7Bfloat%3Aright%21important%7D%2Efloat%2Dxl%2Dnone%7Bfloat%3Anone%21important%7D%7D%2Eposition%2Dstatic%7Bposition%3Astatic%21important%7D%2Eposition%2Drelative%7Bposition%3Arelative%21important%7D%2Eposition%2Dabsolute%7Bposition%3Aabsolute%21important%7D%2Eposition%2Dfixed%7Bposition%3Afixed%21important%7D%2Eposition%2Dsticky%7Bposition%3A%2Dwebkit%2Dsticky%21important%3Bposition%3Asticky%21important%7D%2Efixed%2Dtop%7Bposition%3Afixed%3Btop%3A0%3Bright%3A0%3Bleft%3A0%3Bz%2Dindex%3A1030%7D%2Efixed%2Dbottom%7Bposition%3Afixed%3Bright%3A0%3Bbottom%3A0%3Bleft%3A0%3Bz%2Dindex%3A1030%7D%40supports%20%28%28position%3A%2Dwebkit%2Dsticky%29%20or%20%28position%3Asticky%29%29%7B%2Esticky%2Dtop%7Bposition%3A%2Dwebkit%2Dsticky%3Bposition%3Asticky%3Btop%3A0%3Bz%2Dindex%3A1020%7D%7D%2Esr%2Donly%7Bposition%3Aabsolute%3Bwidth%3A1px%3Bheight%3A1px%3Bpadding%3A0%3Boverflow%3Ahidden%3Bclip%3Arect%280%2C0%2C0%2C0%29%3Bwhite%2Dspace%3Anowrap%3B%2Dwebkit%2Dclip%2Dpath%3Ainset%2850%25%29%3Bclip%2Dpath%3Ainset%2850%25%29%3Bborder%3A0%7D%2Esr%2Donly%2Dfocusable%3Aactive%2C%2Esr%2Donly%2Dfocusable%3Afocus%7Bposition%3Astatic%3Bwidth%3Aauto%3Bheight%3Aauto%3Boverflow%3Avisible%3Bclip%3Aauto%3Bwhite%2Dspace%3Anormal%3B%2Dwebkit%2Dclip%2Dpath%3Anone%3Bclip%2Dpath%3Anone%7D%2Ew%2D25%7Bwidth%3A25%25%21important%7D%2Ew%2D50%7Bwidth%3A50%25%21important%7D%2Ew%2D75%7Bwidth%3A75%25%21important%7D%2Ew%2D100%7Bwidth%3A100%25%21important%7D%2Eh%2D25%7Bheight%3A25%25%21important%7D%2Eh%2D50%7Bheight%3A50%25%21important%7D%2Eh%2D75%7Bheight%3A75%25%21important%7D%2Eh%2D100%7Bheight%3A100%25%21important%7D%2Emw%2D100%7Bmax%2Dwidth%3A100%25%21important%7D%2Emh%2D100%7Bmax%2Dheight%3A100%25%21important%7D%2Em%2D0%7Bmargin%3A0%21important%7D%2Emt%2D0%2C%2Emy%2D0%7Bmargin%2Dtop%3A0%21important%7D%2Emr%2D0%2C%2Emx%2D0%7Bmargin%2Dright%3A0%21important%7D%2Emb%2D0%2C%2Emy%2D0%7Bmargin%2Dbottom%3A0%21important%7D%2Eml%2D0%2C%2Emx%2D0%7Bmargin%2Dleft%3A0%21important%7D%2Em%2D1%7Bmargin%3A%2E25rem%21important%7D%2Emt%2D1%2C%2Emy%2D1%7Bmargin%2Dtop%3A%2E25rem%21important%7D%2Emr%2D1%2C%2Emx%2D1%7Bmargin%2Dright%3A%2E25rem%21important%7D%2Emb%2D1%2C%2Emy%2D1%7Bmargin%2Dbottom%3A%2E25rem%21important%7D%2Eml%2D1%2C%2Emx%2D1%7Bmargin%2Dleft%3A%2E25rem%21important%7D%2Em%2D2%7Bmargin%3A%2E5rem%21important%7D%2Emt%2D2%2C%2Emy%2D2%7Bmargin%2Dtop%3A%2E5rem%21important%7D%2Emr%2D2%2C%2Emx%2D2%7Bmargin%2Dright%3A%2E5rem%21important%7D%2Emb%2D2%2C%2Emy%2D2%7Bmargin%2Dbottom%3A%2E5rem%21important%7D%2Eml%2D2%2C%2Emx%2D2%7Bmargin%2Dleft%3A%2E5rem%21important%7D%2Em%2D3%7Bmargin%3A1rem%21important%7D%2Emt%2D3%2C%2Emy%2D3%7Bmargin%2Dtop%3A1rem%21important%7D%2Emr%2D3%2C%2Emx%2D3%7Bmargin%2Dright%3A1rem%21important%7D%2Emb%2D3%2C%2Emy%2D3%7Bmargin%2Dbottom%3A1rem%21important%7D%2Eml%2D3%2C%2Emx%2D3%7Bmargin%2Dleft%3A1rem%21important%7D%2Em%2D4%7Bmargin%3A1%2E5rem%21important%7D%2Emt%2D4%2C%2Emy%2D4%7Bmargin%2Dtop%3A1%2E5rem%21important%7D%2Emr%2D4%2C%2Emx%2D4%7Bmargin%2Dright%3A1%2E5rem%21important%7D%2Emb%2D4%2C%2Emy%2D4%7Bmargin%2Dbottom%3A1%2E5rem%21important%7D%2Eml%2D4%2C%2Emx%2D4%7Bmargin%2Dleft%3A1%2E5rem%21important%7D%2Em%2D5%7Bmargin%3A3rem%21important%7D%2Emt%2D5%2C%2Emy%2D5%7Bmargin%2Dtop%3A3rem%21important%7D%2Emr%2D5%2C%2Emx%2D5%7Bmargin%2Dright%3A3rem%21important%7D%2Emb%2D5%2C%2Emy%2D5%7Bmargin%2Dbottom%3A3rem%21important%7D%2Eml%2D5%2C%2Emx%2D5%7Bmargin%2Dleft%3A3rem%21important%7D%2Ep%2D0%7Bpadding%3A0%21important%7D%2Ept%2D0%2C%2Epy%2D0%7Bpadding%2Dtop%3A0%21important%7D%2Epr%2D0%2C%2Epx%2D0%7Bpadding%2Dright%3A0%21important%7D%2Epb%2D0%2C%2Epy%2D0%7Bpadding%2Dbottom%3A0%21important%7D%2Epl%2D0%2C%2Epx%2D0%7Bpadding%2Dleft%3A0%21important%7D%2Ep%2D1%7Bpadding%3A%2E25rem%21important%7D%2Ept%2D1%2C%2Epy%2D1%7Bpadding%2Dtop%3A%2E25rem%21important%7D%2Epr%2D1%2C%2Epx%2D1%7Bpadding%2Dright%3A%2E25rem%21important%7D%2Epb%2D1%2C%2Epy%2D1%7Bpadding%2Dbottom%3A%2E25rem%21important%7D%2Epl%2D1%2C%2Epx%2D1%7Bpadding%2Dleft%3A%2E25rem%21important%7D%2Ep%2D2%7Bpadding%3A%2E5rem%21important%7D%2Ept%2D2%2C%2Epy%2D2%7Bpadding%2Dtop%3A%2E5rem%21important%7D%2Epr%2D2%2C%2Epx%2D2%7Bpadding%2Dright%3A%2E5rem%21important%7D%2Epb%2D2%2C%2Epy%2D2%7Bpadding%2Dbottom%3A%2E5rem%21important%7D%2Epl%2D2%2C%2Epx%2D2%7Bpadding%2Dleft%3A%2E5rem%21important%7D%2Ep%2D3%7Bpadding%3A1rem%21important%7D%2Ept%2D3%2C%2Epy%2D3%7Bpadding%2Dtop%3A1rem%21important%7D%2Epr%2D3%2C%2Epx%2D3%7Bpadding%2Dright%3A1rem%21important%7D%2Epb%2D3%2C%2Epy%2D3%7Bpadding%2Dbottom%3A1rem%21important%7D%2Epl%2D3%2C%2Epx%2D3%7Bpadding%2Dleft%3A1rem%21important%7D%2Ep%2D4%7Bpadding%3A1%2E5rem%21important%7D%2Ept%2D4%2C%2Epy%2D4%7Bpadding%2Dtop%3A1%2E5rem%21important%7D%2Epr%2D4%2C%2Epx%2D4%7Bpadding%2Dright%3A1%2E5rem%21important%7D%2Epb%2D4%2C%2Epy%2D4%7Bpadding%2Dbottom%3A1%2E5rem%21important%7D%2Epl%2D4%2C%2Epx%2D4%7Bpadding%2Dleft%3A1%2E5rem%21important%7D%2Ep%2D5%7Bpadding%3A3rem%21important%7D%2Ept%2D5%2C%2Epy%2D5%7Bpadding%2Dtop%3A3rem%21important%7D%2Epr%2D5%2C%2Epx%2D5%7Bpadding%2Dright%3A3rem%21important%7D%2Epb%2D5%2C%2Epy%2D5%7Bpadding%2Dbottom%3A3rem%21important%7D%2Epl%2D5%2C%2Epx%2D5%7Bpadding%2Dleft%3A3rem%21important%7D%2Em%2Dauto%7Bmargin%3Aauto%21important%7D%2Emt%2Dauto%2C%2Emy%2Dauto%7Bmargin%2Dtop%3Aauto%21important%7D%2Emr%2Dauto%2C%2Emx%2Dauto%7Bmargin%2Dright%3Aauto%21important%7D%2Emb%2Dauto%2C%2Emy%2Dauto%7Bmargin%2Dbottom%3Aauto%21important%7D%2Eml%2Dauto%2C%2Emx%2Dauto%7Bmargin%2Dleft%3Aauto%21important%7D%40media%20%28min%2Dwidth%3A576px%29%7B%2Em%2Dsm%2D0%7Bmargin%3A0%21important%7D%2Emt%2Dsm%2D0%2C%2Emy%2Dsm%2D0%7Bmargin%2Dtop%3A0%21important%7D%2Emr%2Dsm%2D0%2C%2Emx%2Dsm%2D0%7Bmargin%2Dright%3A0%21important%7D%2Emb%2Dsm%2D0%2C%2Emy%2Dsm%2D0%7Bmargin%2Dbottom%3A0%21important%7D%2Eml%2Dsm%2D0%2C%2Emx%2Dsm%2D0%7Bmargin%2Dleft%3A0%21important%7D%2Em%2Dsm%2D1%7Bmargin%3A%2E25rem%21important%7D%2Emt%2Dsm%2D1%2C%2Emy%2Dsm%2D1%7Bmargin%2Dtop%3A%2E25rem%21important%7D%2Emr%2Dsm%2D1%2C%2Emx%2Dsm%2D1%7Bmargin%2Dright%3A%2E25rem%21important%7D%2Emb%2Dsm%2D1%2C%2Emy%2Dsm%2D1%7Bmargin%2Dbottom%3A%2E25rem%21important%7D%2Eml%2Dsm%2D1%2C%2Emx%2Dsm%2D1%7Bmargin%2Dleft%3A%2E25rem%21important%7D%2Em%2Dsm%2D2%7Bmargin%3A%2E5rem%21important%7D%2Emt%2Dsm%2D2%2C%2Emy%2Dsm%2D2%7Bmargin%2Dtop%3A%2E5rem%21important%7D%2Emr%2Dsm%2D2%2C%2Emx%2Dsm%2D2%7Bmargin%2Dright%3A%2E5rem%21important%7D%2Emb%2Dsm%2D2%2C%2Emy%2Dsm%2D2%7Bmargin%2Dbottom%3A%2E5rem%21important%7D%2Eml%2Dsm%2D2%2C%2Emx%2Dsm%2D2%7Bmargin%2Dleft%3A%2E5rem%21important%7D%2Em%2Dsm%2D3%7Bmargin%3A1rem%21important%7D%2Emt%2Dsm%2D3%2C%2Emy%2Dsm%2D3%7Bmargin%2Dtop%3A1rem%21important%7D%2Emr%2Dsm%2D3%2C%2Emx%2Dsm%2D3%7Bmargin%2Dright%3A1rem%21important%7D%2Emb%2Dsm%2D3%2C%2Emy%2Dsm%2D3%7Bmargin%2Dbottom%3A1rem%21important%7D%2Eml%2Dsm%2D3%2C%2Emx%2Dsm%2D3%7Bmargin%2Dleft%3A1rem%21important%7D%2Em%2Dsm%2D4%7Bmargin%3A1%2E5rem%21important%7D%2Emt%2Dsm%2D4%2C%2Emy%2Dsm%2D4%7Bmargin%2Dtop%3A1%2E5rem%21important%7D%2Emr%2Dsm%2D4%2C%2Emx%2Dsm%2D4%7Bmargin%2Dright%3A1%2E5rem%21important%7D%2Emb%2Dsm%2D4%2C%2Emy%2Dsm%2D4%7Bmargin%2Dbottom%3A1%2E5rem%21important%7D%2Eml%2Dsm%2D4%2C%2Emx%2Dsm%2D4%7Bmargin%2Dleft%3A1%2E5rem%21important%7D%2Em%2Dsm%2D5%7Bmargin%3A3rem%21important%7D%2Emt%2Dsm%2D5%2C%2Emy%2Dsm%2D5%7Bmargin%2Dtop%3A3rem%21important%7D%2Emr%2Dsm%2D5%2C%2Emx%2Dsm%2D5%7Bmargin%2Dright%3A3rem%21important%7D%2Emb%2Dsm%2D5%2C%2Emy%2Dsm%2D5%7Bmargin%2Dbottom%3A3rem%21important%7D%2Eml%2Dsm%2D5%2C%2Emx%2Dsm%2D5%7Bmargin%2Dleft%3A3rem%21important%7D%2Ep%2Dsm%2D0%7Bpadding%3A0%21important%7D%2Ept%2Dsm%2D0%2C%2Epy%2Dsm%2D0%7Bpadding%2Dtop%3A0%21important%7D%2Epr%2Dsm%2D0%2C%2Epx%2Dsm%2D0%7Bpadding%2Dright%3A0%21important%7D%2Epb%2Dsm%2D0%2C%2Epy%2Dsm%2D0%7Bpadding%2Dbottom%3A0%21important%7D%2Epl%2Dsm%2D0%2C%2Epx%2Dsm%2D0%7Bpadding%2Dleft%3A0%21important%7D%2Ep%2Dsm%2D1%7Bpadding%3A%2E25rem%21important%7D%2Ept%2Dsm%2D1%2C%2Epy%2Dsm%2D1%7Bpadding%2Dtop%3A%2E25rem%21important%7D%2Epr%2Dsm%2D1%2C%2Epx%2Dsm%2D1%7Bpadding%2Dright%3A%2E25rem%21important%7D%2Epb%2Dsm%2D1%2C%2Epy%2Dsm%2D1%7Bpadding%2Dbottom%3A%2E25rem%21important%7D%2Epl%2Dsm%2D1%2C%2Epx%2Dsm%2D1%7Bpadding%2Dleft%3A%2E25rem%21important%7D%2Ep%2Dsm%2D2%7Bpadding%3A%2E5rem%21important%7D%2Ept%2Dsm%2D2%2C%2Epy%2Dsm%2D2%7Bpadding%2Dtop%3A%2E5rem%21important%7D%2Epr%2Dsm%2D2%2C%2Epx%2Dsm%2D2%7Bpadding%2Dright%3A%2E5rem%21important%7D%2Epb%2Dsm%2D2%2C%2Epy%2Dsm%2D2%7Bpadding%2Dbottom%3A%2E5rem%21important%7D%2Epl%2Dsm%2D2%2C%2Epx%2Dsm%2D2%7Bpadding%2Dleft%3A%2E5rem%21important%7D%2Ep%2Dsm%2D3%7Bpadding%3A1rem%21important%7D%2Ept%2Dsm%2D3%2C%2Epy%2Dsm%2D3%7Bpadding%2Dtop%3A1rem%21important%7D%2Epr%2Dsm%2D3%2C%2Epx%2Dsm%2D3%7Bpadding%2Dright%3A1rem%21important%7D%2Epb%2Dsm%2D3%2C%2Epy%2Dsm%2D3%7Bpadding%2Dbottom%3A1rem%21important%7D%2Epl%2Dsm%2D3%2C%2Epx%2Dsm%2D3%7Bpadding%2Dleft%3A1rem%21important%7D%2Ep%2Dsm%2D4%7Bpadding%3A1%2E5rem%21important%7D%2Ept%2Dsm%2D4%2C%2Epy%2Dsm%2D4%7Bpadding%2Dtop%3A1%2E5rem%21important%7D%2Epr%2Dsm%2D4%2C%2Epx%2Dsm%2D4%7Bpadding%2Dright%3A1%2E5rem%21important%7D%2Epb%2Dsm%2D4%2C%2Epy%2Dsm%2D4%7Bpadding%2Dbottom%3A1%2E5rem%21important%7D%2Epl%2Dsm%2D4%2C%2Epx%2Dsm%2D4%7Bpadding%2Dleft%3A1%2E5rem%21important%7D%2Ep%2Dsm%2D5%7Bpadding%3A3rem%21important%7D%2Ept%2Dsm%2D5%2C%2Epy%2Dsm%2D5%7Bpadding%2Dtop%3A3rem%21important%7D%2Epr%2Dsm%2D5%2C%2Epx%2Dsm%2D5%7Bpadding%2Dright%3A3rem%21important%7D%2Epb%2Dsm%2D5%2C%2Epy%2Dsm%2D5%7Bpadding%2Dbottom%3A3rem%21important%7D%2Epl%2Dsm%2D5%2C%2Epx%2Dsm%2D5%7Bpadding%2Dleft%3A3rem%21important%7D%2Em%2Dsm%2Dauto%7Bmargin%3Aauto%21important%7D%2Emt%2Dsm%2Dauto%2C%2Emy%2Dsm%2Dauto%7Bmargin%2Dtop%3Aauto%21important%7D%2Emr%2Dsm%2Dauto%2C%2Emx%2Dsm%2Dauto%7Bmargin%2Dright%3Aauto%21important%7D%2Emb%2Dsm%2Dauto%2C%2Emy%2Dsm%2Dauto%7Bmargin%2Dbottom%3Aauto%21important%7D%2Eml%2Dsm%2Dauto%2C%2Emx%2Dsm%2Dauto%7Bmargin%2Dleft%3Aauto%21important%7D%7D%40media%20%28min%2Dwidth%3A768px%29%7B%2Em%2Dmd%2D0%7Bmargin%3A0%21important%7D%2Emt%2Dmd%2D0%2C%2Emy%2Dmd%2D0%7Bmargin%2Dtop%3A0%21important%7D%2Emr%2Dmd%2D0%2C%2Emx%2Dmd%2D0%7Bmargin%2Dright%3A0%21important%7D%2Emb%2Dmd%2D0%2C%2Emy%2Dmd%2D0%7Bmargin%2Dbottom%3A0%21important%7D%2Eml%2Dmd%2D0%2C%2Emx%2Dmd%2D0%7Bmargin%2Dleft%3A0%21important%7D%2Em%2Dmd%2D1%7Bmargin%3A%2E25rem%21important%7D%2Emt%2Dmd%2D1%2C%2Emy%2Dmd%2D1%7Bmargin%2Dtop%3A%2E25rem%21important%7D%2Emr%2Dmd%2D1%2C%2Emx%2Dmd%2D1%7Bmargin%2Dright%3A%2E25rem%21important%7D%2Emb%2Dmd%2D1%2C%2Emy%2Dmd%2D1%7Bmargin%2Dbottom%3A%2E25rem%21important%7D%2Eml%2Dmd%2D1%2C%2Emx%2Dmd%2D1%7Bmargin%2Dleft%3A%2E25rem%21important%7D%2Em%2Dmd%2D2%7Bmargin%3A%2E5rem%21important%7D%2Emt%2Dmd%2D2%2C%2Emy%2Dmd%2D2%7Bmargin%2Dtop%3A%2E5rem%21important%7D%2Emr%2Dmd%2D2%2C%2Emx%2Dmd%2D2%7Bmargin%2Dright%3A%2E5rem%21important%7D%2Emb%2Dmd%2D2%2C%2Emy%2Dmd%2D2%7Bmargin%2Dbottom%3A%2E5rem%21important%7D%2Eml%2Dmd%2D2%2C%2Emx%2Dmd%2D2%7Bmargin%2Dleft%3A%2E5rem%21important%7D%2Em%2Dmd%2D3%7Bmargin%3A1rem%21important%7D%2Emt%2Dmd%2D3%2C%2Emy%2Dmd%2D3%7Bmargin%2Dtop%3A1rem%21important%7D%2Emr%2Dmd%2D3%2C%2Emx%2Dmd%2D3%7Bmargin%2Dright%3A1rem%21important%7D%2Emb%2Dmd%2D3%2C%2Emy%2Dmd%2D3%7Bmargin%2Dbottom%3A1rem%21important%7D%2Eml%2Dmd%2D3%2C%2Emx%2Dmd%2D3%7Bmargin%2Dleft%3A1rem%21important%7D%2Em%2Dmd%2D4%7Bmargin%3A1%2E5rem%21important%7D%2Emt%2Dmd%2D4%2C%2Emy%2Dmd%2D4%7Bmargin%2Dtop%3A1%2E5rem%21important%7D%2Emr%2Dmd%2D4%2C%2Emx%2Dmd%2D4%7Bmargin%2Dright%3A1%2E5rem%21important%7D%2Emb%2Dmd%2D4%2C%2Emy%2Dmd%2D4%7Bmargin%2Dbottom%3A1%2E5rem%21important%7D%2Eml%2Dmd%2D4%2C%2Emx%2Dmd%2D4%7Bmargin%2Dleft%3A1%2E5rem%21important%7D%2Em%2Dmd%2D5%7Bmargin%3A3rem%21important%7D%2Emt%2Dmd%2D5%2C%2Emy%2Dmd%2D5%7Bmargin%2Dtop%3A3rem%21important%7D%2Emr%2Dmd%2D5%2C%2Emx%2Dmd%2D5%7Bmargin%2Dright%3A3rem%21important%7D%2Emb%2Dmd%2D5%2C%2Emy%2Dmd%2D5%7Bmargin%2Dbottom%3A3rem%21important%7D%2Eml%2Dmd%2D5%2C%2Emx%2Dmd%2D5%7Bmargin%2Dleft%3A3rem%21important%7D%2Ep%2Dmd%2D0%7Bpadding%3A0%21important%7D%2Ept%2Dmd%2D0%2C%2Epy%2Dmd%2D0%7Bpadding%2Dtop%3A0%21important%7D%2Epr%2Dmd%2D0%2C%2Epx%2Dmd%2D0%7Bpadding%2Dright%3A0%21important%7D%2Epb%2Dmd%2D0%2C%2Epy%2Dmd%2D0%7Bpadding%2Dbottom%3A0%21important%7D%2Epl%2Dmd%2D0%2C%2Epx%2Dmd%2D0%7Bpadding%2Dleft%3A0%21important%7D%2Ep%2Dmd%2D1%7Bpadding%3A%2E25rem%21important%7D%2Ept%2Dmd%2D1%2C%2Epy%2Dmd%2D1%7Bpadding%2Dtop%3A%2E25rem%21important%7D%2Epr%2Dmd%2D1%2C%2Epx%2Dmd%2D1%7Bpadding%2Dright%3A%2E25rem%21important%7D%2Epb%2Dmd%2D1%2C%2Epy%2Dmd%2D1%7Bpadding%2Dbottom%3A%2E25rem%21important%7D%2Epl%2Dmd%2D1%2C%2Epx%2Dmd%2D1%7Bpadding%2Dleft%3A%2E25rem%21important%7D%2Ep%2Dmd%2D2%7Bpadding%3A%2E5rem%21important%7D%2Ept%2Dmd%2D2%2C%2Epy%2Dmd%2D2%7Bpadding%2Dtop%3A%2E5rem%21important%7D%2Epr%2Dmd%2D2%2C%2Epx%2Dmd%2D2%7Bpadding%2Dright%3A%2E5rem%21important%7D%2Epb%2Dmd%2D2%2C%2Epy%2Dmd%2D2%7Bpadding%2Dbottom%3A%2E5rem%21important%7D%2Epl%2Dmd%2D2%2C%2Epx%2Dmd%2D2%7Bpadding%2Dleft%3A%2E5rem%21important%7D%2Ep%2Dmd%2D3%7Bpadding%3A1rem%21important%7D%2Ept%2Dmd%2D3%2C%2Epy%2Dmd%2D3%7Bpadding%2Dtop%3A1rem%21important%7D%2Epr%2Dmd%2D3%2C%2Epx%2Dmd%2D3%7Bpadding%2Dright%3A1rem%21important%7D%2Epb%2Dmd%2D3%2C%2Epy%2Dmd%2D3%7Bpadding%2Dbottom%3A1rem%21important%7D%2Epl%2Dmd%2D3%2C%2Epx%2Dmd%2D3%7Bpadding%2Dleft%3A1rem%21important%7D%2Ep%2Dmd%2D4%7Bpadding%3A1%2E5rem%21important%7D%2Ept%2Dmd%2D4%2C%2Epy%2Dmd%2D4%7Bpadding%2Dtop%3A1%2E5rem%21important%7D%2Epr%2Dmd%2D4%2C%2Epx%2Dmd%2D4%7Bpadding%2Dright%3A1%2E5rem%21important%7D%2Epb%2Dmd%2D4%2C%2Epy%2Dmd%2D4%7Bpadding%2Dbottom%3A1%2E5rem%21important%7D%2Epl%2Dmd%2D4%2C%2Epx%2Dmd%2D4%7Bpadding%2Dleft%3A1%2E5rem%21important%7D%2Ep%2Dmd%2D5%7Bpadding%3A3rem%21important%7D%2Ept%2Dmd%2D5%2C%2Epy%2Dmd%2D5%7Bpadding%2Dtop%3A3rem%21important%7D%2Epr%2Dmd%2D5%2C%2Epx%2Dmd%2D5%7Bpadding%2Dright%3A3rem%21important%7D%2Epb%2Dmd%2D5%2C%2Epy%2Dmd%2D5%7Bpadding%2Dbottom%3A3rem%21important%7D%2Epl%2Dmd%2D5%2C%2Epx%2Dmd%2D5%7Bpadding%2Dleft%3A3rem%21important%7D%2Em%2Dmd%2Dauto%7Bmargin%3Aauto%21important%7D%2Emt%2Dmd%2Dauto%2C%2Emy%2Dmd%2Dauto%7Bmargin%2Dtop%3Aauto%21important%7D%2Emr%2Dmd%2Dauto%2C%2Emx%2Dmd%2Dauto%7Bmargin%2Dright%3Aauto%21important%7D%2Emb%2Dmd%2Dauto%2C%2Emy%2Dmd%2Dauto%7Bmargin%2Dbottom%3Aauto%21important%7D%2Eml%2Dmd%2Dauto%2C%2Emx%2Dmd%2Dauto%7Bmargin%2Dleft%3Aauto%21important%7D%7D%40media%20%28min%2Dwidth%3A992px%29%7B%2Em%2Dlg%2D0%7Bmargin%3A0%21important%7D%2Emt%2Dlg%2D0%2C%2Emy%2Dlg%2D0%7Bmargin%2Dtop%3A0%21important%7D%2Emr%2Dlg%2D0%2C%2Emx%2Dlg%2D0%7Bmargin%2Dright%3A0%21important%7D%2Emb%2Dlg%2D0%2C%2Emy%2Dlg%2D0%7Bmargin%2Dbottom%3A0%21important%7D%2Eml%2Dlg%2D0%2C%2Emx%2Dlg%2D0%7Bmargin%2Dleft%3A0%21important%7D%2Em%2Dlg%2D1%7Bmargin%3A%2E25rem%21important%7D%2Emt%2Dlg%2D1%2C%2Emy%2Dlg%2D1%7Bmargin%2Dtop%3A%2E25rem%21important%7D%2Emr%2Dlg%2D1%2C%2Emx%2Dlg%2D1%7Bmargin%2Dright%3A%2E25rem%21important%7D%2Emb%2Dlg%2D1%2C%2Emy%2Dlg%2D1%7Bmargin%2Dbottom%3A%2E25rem%21important%7D%2Eml%2Dlg%2D1%2C%2Emx%2Dlg%2D1%7Bmargin%2Dleft%3A%2E25rem%21important%7D%2Em%2Dlg%2D2%7Bmargin%3A%2E5rem%21important%7D%2Emt%2Dlg%2D2%2C%2Emy%2Dlg%2D2%7Bmargin%2Dtop%3A%2E5rem%21important%7D%2Emr%2Dlg%2D2%2C%2Emx%2Dlg%2D2%7Bmargin%2Dright%3A%2E5rem%21important%7D%2Emb%2Dlg%2D2%2C%2Emy%2Dlg%2D2%7Bmargin%2Dbottom%3A%2E5rem%21important%7D%2Eml%2Dlg%2D2%2C%2Emx%2Dlg%2D2%7Bmargin%2Dleft%3A%2E5rem%21important%7D%2Em%2Dlg%2D3%7Bmargin%3A1rem%21important%7D%2Emt%2Dlg%2D3%2C%2Emy%2Dlg%2D3%7Bmargin%2Dtop%3A1rem%21important%7D%2Emr%2Dlg%2D3%2C%2Emx%2Dlg%2D3%7Bmargin%2Dright%3A1rem%21important%7D%2Emb%2Dlg%2D3%2C%2Emy%2Dlg%2D3%7Bmargin%2Dbottom%3A1rem%21important%7D%2Eml%2Dlg%2D3%2C%2Emx%2Dlg%2D3%7Bmargin%2Dleft%3A1rem%21important%7D%2Em%2Dlg%2D4%7Bmargin%3A1%2E5rem%21important%7D%2Emt%2Dlg%2D4%2C%2Emy%2Dlg%2D4%7Bmargin%2Dtop%3A1%2E5rem%21important%7D%2Emr%2Dlg%2D4%2C%2Emx%2Dlg%2D4%7Bmargin%2Dright%3A1%2E5rem%21important%7D%2Emb%2Dlg%2D4%2C%2Emy%2Dlg%2D4%7Bmargin%2Dbottom%3A1%2E5rem%21important%7D%2Eml%2Dlg%2D4%2C%2Emx%2Dlg%2D4%7Bmargin%2Dleft%3A1%2E5rem%21important%7D%2Em%2Dlg%2D5%7Bmargin%3A3rem%21important%7D%2Emt%2Dlg%2D5%2C%2Emy%2Dlg%2D5%7Bmargin%2Dtop%3A3rem%21important%7D%2Emr%2Dlg%2D5%2C%2Emx%2Dlg%2D5%7Bmargin%2Dright%3A3rem%21important%7D%2Emb%2Dlg%2D5%2C%2Emy%2Dlg%2D5%7Bmargin%2Dbottom%3A3rem%21important%7D%2Eml%2Dlg%2D5%2C%2Emx%2Dlg%2D5%7Bmargin%2Dleft%3A3rem%21important%7D%2Ep%2Dlg%2D0%7Bpadding%3A0%21important%7D%2Ept%2Dlg%2D0%2C%2Epy%2Dlg%2D0%7Bpadding%2Dtop%3A0%21important%7D%2Epr%2Dlg%2D0%2C%2Epx%2Dlg%2D0%7Bpadding%2Dright%3A0%21important%7D%2Epb%2Dlg%2D0%2C%2Epy%2Dlg%2D0%7Bpadding%2Dbottom%3A0%21important%7D%2Epl%2Dlg%2D0%2C%2Epx%2Dlg%2D0%7Bpadding%2Dleft%3A0%21important%7D%2Ep%2Dlg%2D1%7Bpadding%3A%2E25rem%21important%7D%2Ept%2Dlg%2D1%2C%2Epy%2Dlg%2D1%7Bpadding%2Dtop%3A%2E25rem%21important%7D%2Epr%2Dlg%2D1%2C%2Epx%2Dlg%2D1%7Bpadding%2Dright%3A%2E25rem%21important%7D%2Epb%2Dlg%2D1%2C%2Epy%2Dlg%2D1%7Bpadding%2Dbottom%3A%2E25rem%21important%7D%2Epl%2Dlg%2D1%2C%2Epx%2Dlg%2D1%7Bpadding%2Dleft%3A%2E25rem%21important%7D%2Ep%2Dlg%2D2%7Bpadding%3A%2E5rem%21important%7D%2Ept%2Dlg%2D2%2C%2Epy%2Dlg%2D2%7Bpadding%2Dtop%3A%2E5rem%21important%7D%2Epr%2Dlg%2D2%2C%2Epx%2Dlg%2D2%7Bpadding%2Dright%3A%2E5rem%21important%7D%2Epb%2Dlg%2D2%2C%2Epy%2Dlg%2D2%7Bpadding%2Dbottom%3A%2E5rem%21important%7D%2Epl%2Dlg%2D2%2C%2Epx%2Dlg%2D2%7Bpadding%2Dleft%3A%2E5rem%21important%7D%2Ep%2Dlg%2D3%7Bpadding%3A1rem%21important%7D%2Ept%2Dlg%2D3%2C%2Epy%2Dlg%2D3%7Bpadding%2Dtop%3A1rem%21important%7D%2Epr%2Dlg%2D3%2C%2Epx%2Dlg%2D3%7Bpadding%2Dright%3A1rem%21important%7D%2Epb%2Dlg%2D3%2C%2Epy%2Dlg%2D3%7Bpadding%2Dbottom%3A1rem%21important%7D%2Epl%2Dlg%2D3%2C%2Epx%2Dlg%2D3%7Bpadding%2Dleft%3A1rem%21important%7D%2Ep%2Dlg%2D4%7Bpadding%3A1%2E5rem%21important%7D%2Ept%2Dlg%2D4%2C%2Epy%2Dlg%2D4%7Bpadding%2Dtop%3A1%2E5rem%21important%7D%2Epr%2Dlg%2D4%2C%2Epx%2Dlg%2D4%7Bpadding%2Dright%3A1%2E5rem%21important%7D%2Epb%2Dlg%2D4%2C%2Epy%2Dlg%2D4%7Bpadding%2Dbottom%3A1%2E5rem%21important%7D%2Epl%2Dlg%2D4%2C%2Epx%2Dlg%2D4%7Bpadding%2Dleft%3A1%2E5rem%21important%7D%2Ep%2Dlg%2D5%7Bpadding%3A3rem%21important%7D%2Ept%2Dlg%2D5%2C%2Epy%2Dlg%2D5%7Bpadding%2Dtop%3A3rem%21important%7D%2Epr%2Dlg%2D5%2C%2Epx%2Dlg%2D5%7Bpadding%2Dright%3A3rem%21important%7D%2Epb%2Dlg%2D5%2C%2Epy%2Dlg%2D5%7Bpadding%2Dbottom%3A3rem%21important%7D%2Epl%2Dlg%2D5%2C%2Epx%2Dlg%2D5%7Bpadding%2Dleft%3A3rem%21important%7D%2Em%2Dlg%2Dauto%7Bmargin%3Aauto%21important%7D%2Emt%2Dlg%2Dauto%2C%2Emy%2Dlg%2Dauto%7Bmargin%2Dtop%3Aauto%21important%7D%2Emr%2Dlg%2Dauto%2C%2Emx%2Dlg%2Dauto%7Bmargin%2Dright%3Aauto%21important%7D%2Emb%2Dlg%2Dauto%2C%2Emy%2Dlg%2Dauto%7Bmargin%2Dbottom%3Aauto%21important%7D%2Eml%2Dlg%2Dauto%2C%2Emx%2Dlg%2Dauto%7Bmargin%2Dleft%3Aauto%21important%7D%7D%40media%20%28min%2Dwidth%3A1200px%29%7B%2Em%2Dxl%2D0%7Bmargin%3A0%21important%7D%2Emt%2Dxl%2D0%2C%2Emy%2Dxl%2D0%7Bmargin%2Dtop%3A0%21important%7D%2Emr%2Dxl%2D0%2C%2Emx%2Dxl%2D0%7Bmargin%2Dright%3A0%21important%7D%2Emb%2Dxl%2D0%2C%2Emy%2Dxl%2D0%7Bmargin%2Dbottom%3A0%21important%7D%2Eml%2Dxl%2D0%2C%2Emx%2Dxl%2D0%7Bmargin%2Dleft%3A0%21important%7D%2Em%2Dxl%2D1%7Bmargin%3A%2E25rem%21important%7D%2Emt%2Dxl%2D1%2C%2Emy%2Dxl%2D1%7Bmargin%2Dtop%3A%2E25rem%21important%7D%2Emr%2Dxl%2D1%2C%2Emx%2Dxl%2D1%7Bmargin%2Dright%3A%2E25rem%21important%7D%2Emb%2Dxl%2D1%2C%2Emy%2Dxl%2D1%7Bmargin%2Dbottom%3A%2E25rem%21important%7D%2Eml%2Dxl%2D1%2C%2Emx%2Dxl%2D1%7Bmargin%2Dleft%3A%2E25rem%21important%7D%2Em%2Dxl%2D2%7Bmargin%3A%2E5rem%21important%7D%2Emt%2Dxl%2D2%2C%2Emy%2Dxl%2D2%7Bmargin%2Dtop%3A%2E5rem%21important%7D%2Emr%2Dxl%2D2%2C%2Emx%2Dxl%2D2%7Bmargin%2Dright%3A%2E5rem%21important%7D%2Emb%2Dxl%2D2%2C%2Emy%2Dxl%2D2%7Bmargin%2Dbottom%3A%2E5rem%21important%7D%2Eml%2Dxl%2D2%2C%2Emx%2Dxl%2D2%7Bmargin%2Dleft%3A%2E5rem%21important%7D%2Em%2Dxl%2D3%7Bmargin%3A1rem%21important%7D%2Emt%2Dxl%2D3%2C%2Emy%2Dxl%2D3%7Bmargin%2Dtop%3A1rem%21important%7D%2Emr%2Dxl%2D3%2C%2Emx%2Dxl%2D3%7Bmargin%2Dright%3A1rem%21important%7D%2Emb%2Dxl%2D3%2C%2Emy%2Dxl%2D3%7Bmargin%2Dbottom%3A1rem%21important%7D%2Eml%2Dxl%2D3%2C%2Emx%2Dxl%2D3%7Bmargin%2Dleft%3A1rem%21important%7D%2Em%2Dxl%2D4%7Bmargin%3A1%2E5rem%21important%7D%2Emt%2Dxl%2D4%2C%2Emy%2Dxl%2D4%7Bmargin%2Dtop%3A1%2E5rem%21important%7D%2Emr%2Dxl%2D4%2C%2Emx%2Dxl%2D4%7Bmargin%2Dright%3A1%2E5rem%21important%7D%2Emb%2Dxl%2D4%2C%2Emy%2Dxl%2D4%7Bmargin%2Dbottom%3A1%2E5rem%21important%7D%2Eml%2Dxl%2D4%2C%2Emx%2Dxl%2D4%7Bmargin%2Dleft%3A1%2E5rem%21important%7D%2Em%2Dxl%2D5%7Bmargin%3A3rem%21important%7D%2Emt%2Dxl%2D5%2C%2Emy%2Dxl%2D5%7Bmargin%2Dtop%3A3rem%21important%7D%2Emr%2Dxl%2D5%2C%2Emx%2Dxl%2D5%7Bmargin%2Dright%3A3rem%21important%7D%2Emb%2Dxl%2D5%2C%2Emy%2Dxl%2D5%7Bmargin%2Dbottom%3A3rem%21important%7D%2Eml%2Dxl%2D5%2C%2Emx%2Dxl%2D5%7Bmargin%2Dleft%3A3rem%21important%7D%2Ep%2Dxl%2D0%7Bpadding%3A0%21important%7D%2Ept%2Dxl%2D0%2C%2Epy%2Dxl%2D0%7Bpadding%2Dtop%3A0%21important%7D%2Epr%2Dxl%2D0%2C%2Epx%2Dxl%2D0%7Bpadding%2Dright%3A0%21important%7D%2Epb%2Dxl%2D0%2C%2Epy%2Dxl%2D0%7Bpadding%2Dbottom%3A0%21important%7D%2Epl%2Dxl%2D0%2C%2Epx%2Dxl%2D0%7Bpadding%2Dleft%3A0%21important%7D%2Ep%2Dxl%2D1%7Bpadding%3A%2E25rem%21important%7D%2Ept%2Dxl%2D1%2C%2Epy%2Dxl%2D1%7Bpadding%2Dtop%3A%2E25rem%21important%7D%2Epr%2Dxl%2D1%2C%2Epx%2Dxl%2D1%7Bpadding%2Dright%3A%2E25rem%21important%7D%2Epb%2Dxl%2D1%2C%2Epy%2Dxl%2D1%7Bpadding%2Dbottom%3A%2E25rem%21important%7D%2Epl%2Dxl%2D1%2C%2Epx%2Dxl%2D1%7Bpadding%2Dleft%3A%2E25rem%21important%7D%2Ep%2Dxl%2D2%7Bpadding%3A%2E5rem%21important%7D%2Ept%2Dxl%2D2%2C%2Epy%2Dxl%2D2%7Bpadding%2Dtop%3A%2E5rem%21important%7D%2Epr%2Dxl%2D2%2C%2Epx%2Dxl%2D2%7Bpadding%2Dright%3A%2E5rem%21important%7D%2Epb%2Dxl%2D2%2C%2Epy%2Dxl%2D2%7Bpadding%2Dbottom%3A%2E5rem%21important%7D%2Epl%2Dxl%2D2%2C%2Epx%2Dxl%2D2%7Bpadding%2Dleft%3A%2E5rem%21important%7D%2Ep%2Dxl%2D3%7Bpadding%3A1rem%21important%7D%2Ept%2Dxl%2D3%2C%2Epy%2Dxl%2D3%7Bpadding%2Dtop%3A1rem%21important%7D%2Epr%2Dxl%2D3%2C%2Epx%2Dxl%2D3%7Bpadding%2Dright%3A1rem%21important%7D%2Epb%2Dxl%2D3%2C%2Epy%2Dxl%2D3%7Bpadding%2Dbottom%3A1rem%21important%7D%2Epl%2Dxl%2D3%2C%2Epx%2Dxl%2D3%7Bpadding%2Dleft%3A1rem%21important%7D%2Ep%2Dxl%2D4%7Bpadding%3A1%2E5rem%21important%7D%2Ept%2Dxl%2D4%2C%2Epy%2Dxl%2D4%7Bpadding%2Dtop%3A1%2E5rem%21important%7D%2Epr%2Dxl%2D4%2C%2Epx%2Dxl%2D4%7Bpadding%2Dright%3A1%2E5rem%21important%7D%2Epb%2Dxl%2D4%2C%2Epy%2Dxl%2D4%7Bpadding%2Dbottom%3A1%2E5rem%21important%7D%2Epl%2Dxl%2D4%2C%2Epx%2Dxl%2D4%7Bpadding%2Dleft%3A1%2E5rem%21important%7D%2Ep%2Dxl%2D5%7Bpadding%3A3rem%21important%7D%2Ept%2Dxl%2D5%2C%2Epy%2Dxl%2D5%7Bpadding%2Dtop%3A3rem%21important%7D%2Epr%2Dxl%2D5%2C%2Epx%2Dxl%2D5%7Bpadding%2Dright%3A3rem%21important%7D%2Epb%2Dxl%2D5%2C%2Epy%2Dxl%2D5%7Bpadding%2Dbottom%3A3rem%21important%7D%2Epl%2Dxl%2D5%2C%2Epx%2Dxl%2D5%7Bpadding%2Dleft%3A3rem%21important%7D%2Em%2Dxl%2Dauto%7Bmargin%3Aauto%21important%7D%2Emt%2Dxl%2Dauto%2C%2Emy%2Dxl%2Dauto%7Bmargin%2Dtop%3Aauto%21important%7D%2Emr%2Dxl%2Dauto%2C%2Emx%2Dxl%2Dauto%7Bmargin%2Dright%3Aauto%21important%7D%2Emb%2Dxl%2Dauto%2C%2Emy%2Dxl%2Dauto%7Bmargin%2Dbottom%3Aauto%21important%7D%2Eml%2Dxl%2Dauto%2C%2Emx%2Dxl%2Dauto%7Bmargin%2Dleft%3Aauto%21important%7D%7D%2Etext%2Djustify%7Btext%2Dalign%3Ajustify%21important%7D%2Etext%2Dnowrap%7Bwhite%2Dspace%3Anowrap%21important%7D%2Etext%2Dtruncate%7Boverflow%3Ahidden%3Btext%2Doverflow%3Aellipsis%3Bwhite%2Dspace%3Anowrap%7D%2Etext%2Dleft%7Btext%2Dalign%3Aleft%21important%7D%2Etext%2Dright%7Btext%2Dalign%3Aright%21important%7D%2Etext%2Dcenter%7Btext%2Dalign%3Acenter%21important%7D%40media%20%28min%2Dwidth%3A576px%29%7B%2Etext%2Dsm%2Dleft%7Btext%2Dalign%3Aleft%21important%7D%2Etext%2Dsm%2Dright%7Btext%2Dalign%3Aright%21important%7D%2Etext%2Dsm%2Dcenter%7Btext%2Dalign%3Acenter%21important%7D%7D%40media%20%28min%2Dwidth%3A768px%29%7B%2Etext%2Dmd%2Dleft%7Btext%2Dalign%3Aleft%21important%7D%2Etext%2Dmd%2Dright%7Btext%2Dalign%3Aright%21important%7D%2Etext%2Dmd%2Dcenter%7Btext%2Dalign%3Acenter%21important%7D%7D%40media%20%28min%2Dwidth%3A992px%29%7B%2Etext%2Dlg%2Dleft%7Btext%2Dalign%3Aleft%21important%7D%2Etext%2Dlg%2Dright%7Btext%2Dalign%3Aright%21important%7D%2Etext%2Dlg%2Dcenter%7Btext%2Dalign%3Acenter%21important%7D%7D%40media%20%28min%2Dwidth%3A1200px%29%7B%2Etext%2Dxl%2Dleft%7Btext%2Dalign%3Aleft%21important%7D%2Etext%2Dxl%2Dright%7Btext%2Dalign%3Aright%21important%7D%2Etext%2Dxl%2Dcenter%7Btext%2Dalign%3Acenter%21important%7D%7D%2Etext%2Dlowercase%7Btext%2Dtransform%3Alowercase%21important%7D%2Etext%2Duppercase%7Btext%2Dtransform%3Auppercase%21important%7D%2Etext%2Dcapitalize%7Btext%2Dtransform%3Acapitalize%21important%7D%2Efont%2Dweight%2Dlight%7Bfont%2Dweight%3A300%21important%7D%2Efont%2Dweight%2Dnormal%7Bfont%2Dweight%3A400%21important%7D%2Efont%2Dweight%2Dbold%7Bfont%2Dweight%3A700%21important%7D%2Efont%2Ditalic%7Bfont%2Dstyle%3Aitalic%21important%7D%2Etext%2Dwhite%7Bcolor%3A%23fff%21important%7D%2Etext%2Dprimary%7Bcolor%3A%23007bff%21important%7Da%2Etext%2Dprimary%3Afocus%2Ca%2Etext%2Dprimary%3Ahover%7Bcolor%3A%230062cc%21important%7D%2Etext%2Dsecondary%7Bcolor%3A%236c757d%21important%7Da%2Etext%2Dsecondary%3Afocus%2Ca%2Etext%2Dsecondary%3Ahover%7Bcolor%3A%23545b62%21important%7D%2Etext%2Dsuccess%7Bcolor%3A%2328a745%21important%7Da%2Etext%2Dsuccess%3Afocus%2Ca%2Etext%2Dsuccess%3Ahover%7Bcolor%3A%231e7e34%21important%7D%2Etext%2Dinfo%7Bcolor%3A%2317a2b8%21important%7Da%2Etext%2Dinfo%3Afocus%2Ca%2Etext%2Dinfo%3Ahover%7Bcolor%3A%23117a8b%21important%7D%2Etext%2Dwarning%7Bcolor%3A%23ffc107%21important%7Da%2Etext%2Dwarning%3Afocus%2Ca%2Etext%2Dwarning%3Ahover%7Bcolor%3A%23d39e00%21important%7D%2Etext%2Ddanger%7Bcolor%3A%23dc3545%21important%7Da%2Etext%2Ddanger%3Afocus%2Ca%2Etext%2Ddanger%3Ahover%7Bcolor%3A%23bd2130%21important%7D%2Etext%2Dlight%7Bcolor%3A%23f8f9fa%21important%7Da%2Etext%2Dlight%3Afocus%2Ca%2Etext%2Dlight%3Ahover%7Bcolor%3A%23dae0e5%21important%7D%2Etext%2Ddark%7Bcolor%3A%23343a40%21important%7Da%2Etext%2Ddark%3Afocus%2Ca%2Etext%2Ddark%3Ahover%7Bcolor%3A%231d2124%21important%7D%2Etext%2Dmuted%7Bcolor%3A%236c757d%21important%7D%2Etext%2Dhide%7Bfont%3A0%2F0%20a%3Bcolor%3Atransparent%3Btext%2Dshadow%3Anone%3Bbackground%2Dcolor%3Atransparent%3Bborder%3A0%7D%2Evisible%7Bvisibility%3Avisible%21important%7D%2Einvisible%7Bvisibility%3Ahidden%21important%7D%40media%20print%7B%2A%2C%3A%3Aafter%2C%3A%3Abefore%7Btext%2Dshadow%3Anone%21important%3Bbox%2Dshadow%3Anone%21important%7Da%3Anot%28%2Ebtn%29%7Btext%2Ddecoration%3Aunderline%7Dabbr%5Btitle%5D%3A%3Aafter%7Bcontent%3A%22%20%28%22%20attr%28title%29%20%22%29%22%7Dpre%7Bwhite%2Dspace%3Apre%2Dwrap%21important%7Dblockquote%2Cpre%7Bborder%3A1px%20solid%20%23999%3Bpage%2Dbreak%2Dinside%3Aavoid%7Dthead%7Bdisplay%3Atable%2Dheader%2Dgroup%7Dimg%2Ctr%7Bpage%2Dbreak%2Dinside%3Aavoid%7Dh2%2Ch3%2Cp%7Borphans%3A3%3Bwidows%3A3%7Dh2%2Ch3%7Bpage%2Dbreak%2Dafter%3Aavoid%7D%40page%7Bsize%3Aa3%7Dbody%7Bmin%2Dwidth%3A992px%21important%7D%2Econtainer%7Bmin%2Dwidth%3A992px%21important%7D%2Enavbar%7Bdisplay%3Anone%7D%2Ebadge%7Bborder%3A1px%20solid%20%23000%7D%2Etable%7Bborder%2Dcollapse%3Acollapse%21important%7D%2Etable%20td%2C%2Etable%20th%7Bbackground%2Dcolor%3A%23fff%21important%7D%2Etable%2Dbordered%20td%2C%2Etable%2Dbordered%20th%7Bborder%3A1px%20solid%20%23ddd%21important%7D%7D%0A" rel="stylesheet" />
<script src="data:application/javascript; charset=utf-8;base64,LyohIGpRdWVyeSB2My4yLjEgLWFqYXgsLWFqYXgvanNvbnAsLWFqYXgvbG9hZCwtYWpheC9wYXJzZVhNTCwtYWpheC9zY3JpcHQsLWFqYXgvdmFyL2xvY2F0aW9uLC1hamF4L3Zhci9ub25jZSwtYWpheC92YXIvcnF1ZXJ5LC1hamF4L3hociwtbWFuaXB1bGF0aW9uL19ldmFsVXJsLC1ldmVudC9hamF4LC1lZmZlY3RzLC1lZmZlY3RzL1R3ZWVuLC1lZmZlY3RzL2FuaW1hdGVkU2VsZWN0b3IgfCAoYykgSlMgRm91bmRhdGlvbiBhbmQgb3RoZXIgY29udHJpYnV0b3JzIHwganF1ZXJ5Lm9yZy9saWNlbnNlICovCiFmdW5jdGlvbihhLGIpeyJ1c2Ugc3RyaWN0Ijsib2JqZWN0Ij09dHlwZW9mIG1vZHVsZSYmIm9iamVjdCI9PXR5cGVvZiBtb2R1bGUuZXhwb3J0cz9tb2R1bGUuZXhwb3J0cz1hLmRvY3VtZW50P2IoYSwhMCk6ZnVuY3Rpb24oYSl7aWYoIWEuZG9jdW1lbnQpdGhyb3cgbmV3IEVycm9yKCJqUXVlcnkgcmVxdWlyZXMgYSB3aW5kb3cgd2l0aCBhIGRvY3VtZW50Iik7cmV0dXJuIGIoYSl9OmIoYSl9KCJ1bmRlZmluZWQiIT10eXBlb2Ygd2luZG93P3dpbmRvdzp0aGlzLGZ1bmN0aW9uKGEsYil7InVzZSBzdHJpY3QiO3ZhciBjPVtdLGQ9YS5kb2N1bWVudCxlPU9iamVjdC5nZXRQcm90b3R5cGVPZixmPWMuc2xpY2UsZz1jLmNvbmNhdCxoPWMucHVzaCxpPWMuaW5kZXhPZixqPXt9LGs9ai50b1N0cmluZyxsPWouaGFzT3duUHJvcGVydHksbT1sLnRvU3RyaW5nLG49bS5jYWxsKE9iamVjdCksbz17fTtmdW5jdGlvbiBwKGEsYil7Yj1ifHxkO3ZhciBjPWIuY3JlYXRlRWxlbWVudCgic2NyaXB0Iik7Yy50ZXh0PWEsYi5oZWFkLmFwcGVuZENoaWxkKGMpLnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQoYyl9dmFyIHE9IjMuMi4xIC1hamF4LC1hamF4L2pzb25wLC1hamF4L2xvYWQsLWFqYXgvcGFyc2VYTUwsLWFqYXgvc2NyaXB0LC1hamF4L3Zhci9sb2NhdGlvbiwtYWpheC92YXIvbm9uY2UsLWFqYXgvdmFyL3JxdWVyeSwtYWpheC94aHIsLW1hbmlwdWxhdGlvbi9fZXZhbFVybCwtZXZlbnQvYWpheCwtZWZmZWN0cywtZWZmZWN0cy9Ud2VlbiwtZWZmZWN0cy9hbmltYXRlZFNlbGVjdG9yIixyPWZ1bmN0aW9uKGEsYil7cmV0dXJuIG5ldyByLmZuLmluaXQoYSxiKX0scz0vXltcc1x1RkVGRlx4QTBdK3xbXHNcdUZFRkZceEEwXSskL2csdD0vXi1tcy0vLHU9Ly0oW2Etel0pL2csdj1mdW5jdGlvbihhLGIpe3JldHVybiBiLnRvVXBwZXJDYXNlKCl9O3IuZm49ci5wcm90b3R5cGU9e2pxdWVyeTpxLGNvbnN0cnVjdG9yOnIsbGVuZ3RoOjAsdG9BcnJheTpmdW5jdGlvbigpe3JldHVybiBmLmNhbGwodGhpcyl9LGdldDpmdW5jdGlvbihhKXtyZXR1cm4gbnVsbD09YT9mLmNhbGwodGhpcyk6YTwwP3RoaXNbYSt0aGlzLmxlbmd0aF06dGhpc1thXX0scHVzaFN0YWNrOmZ1bmN0aW9uKGEpe3ZhciBiPXIubWVyZ2UodGhpcy5jb25zdHJ1Y3RvcigpLGEpO3JldHVybiBiLnByZXZPYmplY3Q9dGhpcyxifSxlYWNoOmZ1bmN0aW9uKGEpe3JldHVybiByLmVhY2godGhpcyxhKX0sbWFwOmZ1bmN0aW9uKGEpe3JldHVybiB0aGlzLnB1c2hTdGFjayhyLm1hcCh0aGlzLGZ1bmN0aW9uKGIsYyl7cmV0dXJuIGEuY2FsbChiLGMsYil9KSl9LHNsaWNlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMucHVzaFN0YWNrKGYuYXBwbHkodGhpcyxhcmd1bWVudHMpKX0sZmlyc3Q6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5lcSgwKX0sbGFzdDpmdW5jdGlvbigpe3JldHVybiB0aGlzLmVxKC0xKX0sZXE6ZnVuY3Rpb24oYSl7dmFyIGI9dGhpcy5sZW5ndGgsYz0rYSsoYTwwP2I6MCk7cmV0dXJuIHRoaXMucHVzaFN0YWNrKGM+PTAmJmM8Yj9bdGhpc1tjXV06W10pfSxlbmQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5wcmV2T2JqZWN0fHx0aGlzLmNvbnN0cnVjdG9yKCl9LHB1c2g6aCxzb3J0OmMuc29ydCxzcGxpY2U6Yy5zcGxpY2V9LHIuZXh0ZW5kPXIuZm4uZXh0ZW5kPWZ1bmN0aW9uKCl7dmFyIGEsYixjLGQsZSxmLGc9YXJndW1lbnRzWzBdfHx7fSxoPTEsaT1hcmd1bWVudHMubGVuZ3RoLGo9ITE7Zm9yKCJib29sZWFuIj09dHlwZW9mIGcmJihqPWcsZz1hcmd1bWVudHNbaF18fHt9LGgrKyksIm9iamVjdCI9PXR5cGVvZiBnfHxyLmlzRnVuY3Rpb24oZyl8fChnPXt9KSxoPT09aSYmKGc9dGhpcyxoLS0pO2g8aTtoKyspaWYobnVsbCE9KGE9YXJndW1lbnRzW2hdKSlmb3IoYiBpbiBhKWM9Z1tiXSxkPWFbYl0sZyE9PWQmJihqJiZkJiYoci5pc1BsYWluT2JqZWN0KGQpfHwoZT1BcnJheS5pc0FycmF5KGQpKSk/KGU/KGU9ITEsZj1jJiZBcnJheS5pc0FycmF5KGMpP2M6W10pOmY9YyYmci5pc1BsYWluT2JqZWN0KGMpP2M6e30sZ1tiXT1yLmV4dGVuZChqLGYsZCkpOnZvaWQgMCE9PWQmJihnW2JdPWQpKTtyZXR1cm4gZ30sci5leHRlbmQoe2V4cGFuZG86ImpRdWVyeSIrKHErTWF0aC5yYW5kb20oKSkucmVwbGFjZSgvXEQvZywiIiksaXNSZWFkeTohMCxlcnJvcjpmdW5jdGlvbihhKXt0aHJvdyBuZXcgRXJyb3IoYSl9LG5vb3A6ZnVuY3Rpb24oKXt9LGlzRnVuY3Rpb246ZnVuY3Rpb24oYSl7cmV0dXJuImZ1bmN0aW9uIj09PXIudHlwZShhKX0saXNXaW5kb3c6ZnVuY3Rpb24oYSl7cmV0dXJuIG51bGwhPWEmJmE9PT1hLndpbmRvd30saXNOdW1lcmljOmZ1bmN0aW9uKGEpe3ZhciBiPXIudHlwZShhKTtyZXR1cm4oIm51bWJlciI9PT1ifHwic3RyaW5nIj09PWIpJiYhaXNOYU4oYS1wYXJzZUZsb2F0KGEpKX0saXNQbGFpbk9iamVjdDpmdW5jdGlvbihhKXt2YXIgYixjO3JldHVybiEoIWF8fCJbb2JqZWN0IE9iamVjdF0iIT09ay5jYWxsKGEpKSYmKCEoYj1lKGEpKXx8KGM9bC5jYWxsKGIsImNvbnN0cnVjdG9yIikmJmIuY29uc3RydWN0b3IsImZ1bmN0aW9uIj09dHlwZW9mIGMmJm0uY2FsbChjKT09PW4pKX0saXNFbXB0eU9iamVjdDpmdW5jdGlvbihhKXt2YXIgYjtmb3IoYiBpbiBhKXJldHVybiExO3JldHVybiEwfSx0eXBlOmZ1bmN0aW9uKGEpe3JldHVybiBudWxsPT1hP2ErIiI6Im9iamVjdCI9PXR5cGVvZiBhfHwiZnVuY3Rpb24iPT10eXBlb2YgYT9qW2suY2FsbChhKV18fCJvYmplY3QiOnR5cGVvZiBhfSxnbG9iYWxFdmFsOmZ1bmN0aW9uKGEpe3AoYSl9LGNhbWVsQ2FzZTpmdW5jdGlvbihhKXtyZXR1cm4gYS5yZXBsYWNlKHQsIm1zLSIpLnJlcGxhY2UodSx2KX0sZWFjaDpmdW5jdGlvbihhLGIpe3ZhciBjLGQ9MDtpZih3KGEpKXtmb3IoYz1hLmxlbmd0aDtkPGM7ZCsrKWlmKGIuY2FsbChhW2RdLGQsYVtkXSk9PT0hMSlicmVha31lbHNlIGZvcihkIGluIGEpaWYoYi5jYWxsKGFbZF0sZCxhW2RdKT09PSExKWJyZWFrO3JldHVybiBhfSx0cmltOmZ1bmN0aW9uKGEpe3JldHVybiBudWxsPT1hPyIiOihhKyIiKS5yZXBsYWNlKHMsIiIpfSxtYWtlQXJyYXk6ZnVuY3Rpb24oYSxiKXt2YXIgYz1ifHxbXTtyZXR1cm4gbnVsbCE9YSYmKHcoT2JqZWN0KGEpKT9yLm1lcmdlKGMsInN0cmluZyI9PXR5cGVvZiBhP1thXTphKTpoLmNhbGwoYyxhKSksY30saW5BcnJheTpmdW5jdGlvbihhLGIsYyl7cmV0dXJuIG51bGw9PWI/LTE6aS5jYWxsKGIsYSxjKX0sbWVyZ2U6ZnVuY3Rpb24oYSxiKXtmb3IodmFyIGM9K2IubGVuZ3RoLGQ9MCxlPWEubGVuZ3RoO2Q8YztkKyspYVtlKytdPWJbZF07cmV0dXJuIGEubGVuZ3RoPWUsYX0sZ3JlcDpmdW5jdGlvbihhLGIsYyl7Zm9yKHZhciBkLGU9W10sZj0wLGc9YS5sZW5ndGgsaD0hYztmPGc7ZisrKWQ9IWIoYVtmXSxmKSxkIT09aCYmZS5wdXNoKGFbZl0pO3JldHVybiBlfSxtYXA6ZnVuY3Rpb24oYSxiLGMpe3ZhciBkLGUsZj0wLGg9W107aWYodyhhKSlmb3IoZD1hLmxlbmd0aDtmPGQ7ZisrKWU9YihhW2ZdLGYsYyksbnVsbCE9ZSYmaC5wdXNoKGUpO2Vsc2UgZm9yKGYgaW4gYSllPWIoYVtmXSxmLGMpLG51bGwhPWUmJmgucHVzaChlKTtyZXR1cm4gZy5hcHBseShbXSxoKX0sZ3VpZDoxLHByb3h5OmZ1bmN0aW9uKGEsYil7dmFyIGMsZCxlO2lmKCJzdHJpbmciPT10eXBlb2YgYiYmKGM9YVtiXSxiPWEsYT1jKSxyLmlzRnVuY3Rpb24oYSkpcmV0dXJuIGQ9Zi5jYWxsKGFyZ3VtZW50cywyKSxlPWZ1bmN0aW9uKCl7cmV0dXJuIGEuYXBwbHkoYnx8dGhpcyxkLmNvbmNhdChmLmNhbGwoYXJndW1lbnRzKSkpfSxlLmd1aWQ9YS5ndWlkPWEuZ3VpZHx8ci5ndWlkKyssZX0sbm93OkRhdGUubm93LHN1cHBvcnQ6b30pLCJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJihyLmZuW1N5bWJvbC5pdGVyYXRvcl09Y1tTeW1ib2wuaXRlcmF0b3JdKSxyLmVhY2goIkJvb2xlYW4gTnVtYmVyIFN0cmluZyBGdW5jdGlvbiBBcnJheSBEYXRlIFJlZ0V4cCBPYmplY3QgRXJyb3IgU3ltYm9sIi5zcGxpdCgiICIpLGZ1bmN0aW9uKGEsYil7alsiW29iamVjdCAiK2IrIl0iXT1iLnRvTG93ZXJDYXNlKCl9KTtmdW5jdGlvbiB3KGEpe3ZhciBiPSEhYSYmImxlbmd0aCJpbiBhJiZhLmxlbmd0aCxjPXIudHlwZShhKTtyZXR1cm4iZnVuY3Rpb24iIT09YyYmIXIuaXNXaW5kb3coYSkmJigiYXJyYXkiPT09Y3x8MD09PWJ8fCJudW1iZXIiPT10eXBlb2YgYiYmYj4wJiZiLTEgaW4gYSl9dmFyIHg9ZnVuY3Rpb24oYSl7dmFyIGIsYyxkLGUsZixnLGgsaSxqLGssbCxtLG4sbyxwLHEscixzLHQsdT0ic2l6emxlIisxKm5ldyBEYXRlLHY9YS5kb2N1bWVudCx3PTAseD0wLHk9aGEoKSx6PWhhKCksQT1oYSgpLEI9ZnVuY3Rpb24oYSxiKXtyZXR1cm4gYT09PWImJihsPSEwKSwwfSxDPXt9Lmhhc093blByb3BlcnR5LEQ9W10sRT1ELnBvcCxGPUQucHVzaCxHPUQucHVzaCxIPUQuc2xpY2UsST1mdW5jdGlvbihhLGIpe2Zvcih2YXIgYz0wLGQ9YS5sZW5ndGg7YzxkO2MrKylpZihhW2NdPT09YilyZXR1cm4gYztyZXR1cm4tMX0sSj0iY2hlY2tlZHxzZWxlY3RlZHxhc3luY3xhdXRvZm9jdXN8YXV0b3BsYXl8Y29udHJvbHN8ZGVmZXJ8ZGlzYWJsZWR8aGlkZGVufGlzbWFwfGxvb3B8bXVsdGlwbGV8b3BlbnxyZWFkb25seXxyZXF1aXJlZHxzY29wZWQiLEs9IltcXHgyMFxcdFxcclxcblxcZl0iLEw9Iig/OlxcXFwufFtcXHctXXxbXlwwLVxceGEwXSkrIixNPSJcXFsiK0srIiooIitMKyIpKD86IitLKyIqKFsqXiR8IX5dPz0pIitLKyIqKD86JygoPzpcXFxcLnxbXlxcXFwnXSkqKSd8XCIoKD86XFxcXC58W15cXFxcXCJdKSopXCJ8KCIrTCsiKSl8KSIrSysiKlxcXSIsTj0iOigiK0wrIikoPzpcXCgoKCcoKD86XFxcXC58W15cXFxcJ10pKiknfFwiKCg/OlxcXFwufFteXFxcXFwiXSkqKVwiKXwoKD86XFxcXC58W15cXFxcKClbXFxdXXwiK00rIikqKXwuKilcXCl8KSIsTz1uZXcgUmVnRXhwKEsrIisiLCJnIiksUD1uZXcgUmVnRXhwKCJeIitLKyIrfCgoPzpefFteXFxcXF0pKD86XFxcXC4pKikiK0srIiskIiwiZyIpLFE9bmV3IFJlZ0V4cCgiXiIrSysiKiwiK0srIioiKSxSPW5ldyBSZWdFeHAoIl4iK0srIiooWz4rfl18IitLKyIpIitLKyIqIiksUz1uZXcgUmVnRXhwKCI9IitLKyIqKFteXFxdJ1wiXSo/KSIrSysiKlxcXSIsImciKSxUPW5ldyBSZWdFeHAoTiksVT1uZXcgUmVnRXhwKCJeIitMKyIkIiksVj17SUQ6bmV3IFJlZ0V4cCgiXiMoIitMKyIpIiksQ0xBU1M6bmV3IFJlZ0V4cCgiXlxcLigiK0wrIikiKSxUQUc6bmV3IFJlZ0V4cCgiXigiK0wrInxbKl0pIiksQVRUUjpuZXcgUmVnRXhwKCJeIitNKSxQU0VVRE86bmV3IFJlZ0V4cCgiXiIrTiksQ0hJTEQ6bmV3IFJlZ0V4cCgiXjoob25seXxmaXJzdHxsYXN0fG50aHxudGgtbGFzdCktKGNoaWxkfG9mLXR5cGUpKD86XFwoIitLKyIqKGV2ZW58b2RkfCgoWystXXwpKFxcZCopbnwpIitLKyIqKD86KFsrLV18KSIrSysiKihcXGQrKXwpKSIrSysiKlxcKXwpIiwiaSIpLGJvb2w6bmV3IFJlZ0V4cCgiXig/OiIrSisiKSQiLCJpIiksbmVlZHNDb250ZXh0Om5ldyBSZWdFeHAoIl4iK0srIipbPit+XXw6KGV2ZW58b2RkfGVxfGd0fGx0fG50aHxmaXJzdHxsYXN0KSg/OlxcKCIrSysiKigoPzotXFxkKT9cXGQqKSIrSysiKlxcKXwpKD89W14tXXwkKSIsImkiKX0sVz0vXig/OmlucHV0fHNlbGVjdHx0ZXh0YXJlYXxidXR0b24pJC9pLFg9L15oXGQkL2ksWT0vXltee10rXHtccypcW25hdGl2ZSBcdy8sWj0vXig/OiMoW1x3LV0rKXwoXHcrKXxcLihbXHctXSspKSQvLCQ9L1srfl0vLF89bmV3IFJlZ0V4cCgiXFxcXChbXFxkYS1mXXsxLDZ9IitLKyI/fCgiK0srIil8LikiLCJpZyIpLGFhPWZ1bmN0aW9uKGEsYixjKXt2YXIgZD0iMHgiK2ItNjU1MzY7cmV0dXJuIGQhPT1kfHxjP2I6ZDwwP1N0cmluZy5mcm9tQ2hhckNvZGUoZCs2NTUzNik6U3RyaW5nLmZyb21DaGFyQ29kZShkPj4xMHw1NTI5NiwxMDIzJmR8NTYzMjApfSxiYT0vKFtcMC1ceDFmXHg3Zl18Xi0/XGQpfF4tJHxbXlwwLVx4MWZceDdmLVx1RkZGRlx3LV0vZyxjYT1mdW5jdGlvbihhLGIpe3JldHVybiBiPyJcMCI9PT1hPyJcdWZmZmQiOmEuc2xpY2UoMCwtMSkrIlxcIithLmNoYXJDb2RlQXQoYS5sZW5ndGgtMSkudG9TdHJpbmcoMTYpKyIgIjoiXFwiK2F9LGRhPWZ1bmN0aW9uKCl7bSgpfSxlYT10YShmdW5jdGlvbihhKXtyZXR1cm4gYS5kaXNhYmxlZD09PSEwJiYoImZvcm0iaW4gYXx8ImxhYmVsImluIGEpfSx7ZGlyOiJwYXJlbnROb2RlIixuZXh0OiJsZWdlbmQifSk7dHJ5e0cuYXBwbHkoRD1ILmNhbGwodi5jaGlsZE5vZGVzKSx2LmNoaWxkTm9kZXMpLERbdi5jaGlsZE5vZGVzLmxlbmd0aF0ubm9kZVR5cGV9Y2F0Y2goZmEpe0c9e2FwcGx5OkQubGVuZ3RoP2Z1bmN0aW9uKGEsYil7Ri5hcHBseShhLEguY2FsbChiKSl9OmZ1bmN0aW9uKGEsYil7dmFyIGM9YS5sZW5ndGgsZD0wO3doaWxlKGFbYysrXT1iW2QrK10pO2EubGVuZ3RoPWMtMX19fWZ1bmN0aW9uIGdhKGEsYixkLGUpe3ZhciBmLGgsaixrLGwsbyxyLHM9YiYmYi5vd25lckRvY3VtZW50LHc9Yj9iLm5vZGVUeXBlOjk7aWYoZD1kfHxbXSwic3RyaW5nIiE9dHlwZW9mIGF8fCFhfHwxIT09dyYmOSE9PXcmJjExIT09dylyZXR1cm4gZDtpZighZSYmKChiP2Iub3duZXJEb2N1bWVudHx8Yjp2KSE9PW4mJm0oYiksYj1ifHxuLHApKXtpZigxMSE9PXcmJihsPVouZXhlYyhhKSkpaWYoZj1sWzFdKXtpZig5PT09dyl7aWYoIShqPWIuZ2V0RWxlbWVudEJ5SWQoZikpKXJldHVybiBkO2lmKGouaWQ9PT1mKXJldHVybiBkLnB1c2goaiksZH1lbHNlIGlmKHMmJihqPXMuZ2V0RWxlbWVudEJ5SWQoZikpJiZ0KGIsaikmJmouaWQ9PT1mKXJldHVybiBkLnB1c2goaiksZH1lbHNle2lmKGxbMl0pcmV0dXJuIEcuYXBwbHkoZCxiLmdldEVsZW1lbnRzQnlUYWdOYW1lKGEpKSxkO2lmKChmPWxbM10pJiZjLmdldEVsZW1lbnRzQnlDbGFzc05hbWUmJmIuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSlyZXR1cm4gRy5hcHBseShkLGIuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZShmKSksZH1pZihjLnFzYSYmIUFbYSsiICJdJiYoIXF8fCFxLnRlc3QoYSkpKXtpZigxIT09dylzPWIscj1hO2Vsc2UgaWYoIm9iamVjdCIhPT1iLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCkpeyhrPWIuZ2V0QXR0cmlidXRlKCJpZCIpKT9rPWsucmVwbGFjZShiYSxjYSk6Yi5zZXRBdHRyaWJ1dGUoImlkIixrPXUpLG89ZyhhKSxoPW8ubGVuZ3RoO3doaWxlKGgtLSlvW2hdPSIjIitrKyIgIitzYShvW2hdKTtyPW8uam9pbigiLCIpLHM9JC50ZXN0KGEpJiZxYShiLnBhcmVudE5vZGUpfHxifWlmKHIpdHJ5e3JldHVybiBHLmFwcGx5KGQscy5xdWVyeVNlbGVjdG9yQWxsKHIpKSxkfWNhdGNoKHgpe31maW5hbGx5e2s9PT11JiZiLnJlbW92ZUF0dHJpYnV0ZSgiaWQiKX19fXJldHVybiBpKGEucmVwbGFjZShQLCIkMSIpLGIsZCxlKX1mdW5jdGlvbiBoYSgpe3ZhciBhPVtdO2Z1bmN0aW9uIGIoYyxlKXtyZXR1cm4gYS5wdXNoKGMrIiAiKT5kLmNhY2hlTGVuZ3RoJiZkZWxldGUgYlthLnNoaWZ0KCldLGJbYysiICJdPWV9cmV0dXJuIGJ9ZnVuY3Rpb24gaWEoYSl7cmV0dXJuIGFbdV09ITAsYX1mdW5jdGlvbiBqYShhKXt2YXIgYj1uLmNyZWF0ZUVsZW1lbnQoImZpZWxkc2V0Iik7dHJ5e3JldHVybiEhYShiKX1jYXRjaChjKXtyZXR1cm4hMX1maW5hbGx5e2IucGFyZW50Tm9kZSYmYi5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKGIpLGI9bnVsbH19ZnVuY3Rpb24ga2EoYSxiKXt2YXIgYz1hLnNwbGl0KCJ8IiksZT1jLmxlbmd0aDt3aGlsZShlLS0pZC5hdHRySGFuZGxlW2NbZV1dPWJ9ZnVuY3Rpb24gbGEoYSxiKXt2YXIgYz1iJiZhLGQ9YyYmMT09PWEubm9kZVR5cGUmJjE9PT1iLm5vZGVUeXBlJiZhLnNvdXJjZUluZGV4LWIuc291cmNlSW5kZXg7aWYoZClyZXR1cm4gZDtpZihjKXdoaWxlKGM9Yy5uZXh0U2libGluZylpZihjPT09YilyZXR1cm4tMTtyZXR1cm4gYT8xOi0xfWZ1bmN0aW9uIG1hKGEpe3JldHVybiBmdW5jdGlvbihiKXt2YXIgYz1iLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCk7cmV0dXJuImlucHV0Ij09PWMmJmIudHlwZT09PWF9fWZ1bmN0aW9uIG5hKGEpe3JldHVybiBmdW5jdGlvbihiKXt2YXIgYz1iLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCk7cmV0dXJuKCJpbnB1dCI9PT1jfHwiYnV0dG9uIj09PWMpJiZiLnR5cGU9PT1hfX1mdW5jdGlvbiBvYShhKXtyZXR1cm4gZnVuY3Rpb24oYil7cmV0dXJuImZvcm0iaW4gYj9iLnBhcmVudE5vZGUmJmIuZGlzYWJsZWQ9PT0hMT8ibGFiZWwiaW4gYj8ibGFiZWwiaW4gYi5wYXJlbnROb2RlP2IucGFyZW50Tm9kZS5kaXNhYmxlZD09PWE6Yi5kaXNhYmxlZD09PWE6Yi5pc0Rpc2FibGVkPT09YXx8Yi5pc0Rpc2FibGVkIT09IWEmJmVhKGIpPT09YTpiLmRpc2FibGVkPT09YToibGFiZWwiaW4gYiYmYi5kaXNhYmxlZD09PWF9fWZ1bmN0aW9uIHBhKGEpe3JldHVybiBpYShmdW5jdGlvbihiKXtyZXR1cm4gYj0rYixpYShmdW5jdGlvbihjLGQpe3ZhciBlLGY9YShbXSxjLmxlbmd0aCxiKSxnPWYubGVuZ3RoO3doaWxlKGctLSljW2U9ZltnXV0mJihjW2VdPSEoZFtlXT1jW2VdKSl9KX0pfWZ1bmN0aW9uIHFhKGEpe3JldHVybiBhJiYidW5kZWZpbmVkIiE9dHlwZW9mIGEuZ2V0RWxlbWVudHNCeVRhZ05hbWUmJmF9Yz1nYS5zdXBwb3J0PXt9LGY9Z2EuaXNYTUw9ZnVuY3Rpb24oYSl7dmFyIGI9YSYmKGEub3duZXJEb2N1bWVudHx8YSkuZG9jdW1lbnRFbGVtZW50O3JldHVybiEhYiYmIkhUTUwiIT09Yi5ub2RlTmFtZX0sbT1nYS5zZXREb2N1bWVudD1mdW5jdGlvbihhKXt2YXIgYixlLGc9YT9hLm93bmVyRG9jdW1lbnR8fGE6djtyZXR1cm4gZyE9PW4mJjk9PT1nLm5vZGVUeXBlJiZnLmRvY3VtZW50RWxlbWVudD8obj1nLG89bi5kb2N1bWVudEVsZW1lbnQscD0hZihuKSx2IT09biYmKGU9bi5kZWZhdWx0VmlldykmJmUudG9wIT09ZSYmKGUuYWRkRXZlbnRMaXN0ZW5lcj9lLmFkZEV2ZW50TGlzdGVuZXIoInVubG9hZCIsZGEsITEpOmUuYXR0YWNoRXZlbnQmJmUuYXR0YWNoRXZlbnQoIm9udW5sb2FkIixkYSkpLGMuYXR0cmlidXRlcz1qYShmdW5jdGlvbihhKXtyZXR1cm4gYS5jbGFzc05hbWU9ImkiLCFhLmdldEF0dHJpYnV0ZSgiY2xhc3NOYW1lIil9KSxjLmdldEVsZW1lbnRzQnlUYWdOYW1lPWphKGZ1bmN0aW9uKGEpe3JldHVybiBhLmFwcGVuZENoaWxkKG4uY3JlYXRlQ29tbWVudCgiIikpLCFhLmdldEVsZW1lbnRzQnlUYWdOYW1lKCIqIikubGVuZ3RofSksYy5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lPVkudGVzdChuLmdldEVsZW1lbnRzQnlDbGFzc05hbWUpLGMuZ2V0QnlJZD1qYShmdW5jdGlvbihhKXtyZXR1cm4gby5hcHBlbmRDaGlsZChhKS5pZD11LCFuLmdldEVsZW1lbnRzQnlOYW1lfHwhbi5nZXRFbGVtZW50c0J5TmFtZSh1KS5sZW5ndGh9KSxjLmdldEJ5SWQ/KGQuZmlsdGVyLklEPWZ1bmN0aW9uKGEpe3ZhciBiPWEucmVwbGFjZShfLGFhKTtyZXR1cm4gZnVuY3Rpb24oYSl7cmV0dXJuIGEuZ2V0QXR0cmlidXRlKCJpZCIpPT09Yn19LGQuZmluZC5JRD1mdW5jdGlvbihhLGIpe2lmKCJ1bmRlZmluZWQiIT10eXBlb2YgYi5nZXRFbGVtZW50QnlJZCYmcCl7dmFyIGM9Yi5nZXRFbGVtZW50QnlJZChhKTtyZXR1cm4gYz9bY106W119fSk6KGQuZmlsdGVyLklEPWZ1bmN0aW9uKGEpe3ZhciBiPWEucmVwbGFjZShfLGFhKTtyZXR1cm4gZnVuY3Rpb24oYSl7dmFyIGM9InVuZGVmaW5lZCIhPXR5cGVvZiBhLmdldEF0dHJpYnV0ZU5vZGUmJmEuZ2V0QXR0cmlidXRlTm9kZSgiaWQiKTtyZXR1cm4gYyYmYy52YWx1ZT09PWJ9fSxkLmZpbmQuSUQ9ZnVuY3Rpb24oYSxiKXtpZigidW5kZWZpbmVkIiE9dHlwZW9mIGIuZ2V0RWxlbWVudEJ5SWQmJnApe3ZhciBjLGQsZSxmPWIuZ2V0RWxlbWVudEJ5SWQoYSk7aWYoZil7aWYoYz1mLmdldEF0dHJpYnV0ZU5vZGUoImlkIiksYyYmYy52YWx1ZT09PWEpcmV0dXJuW2ZdO2U9Yi5nZXRFbGVtZW50c0J5TmFtZShhKSxkPTA7d2hpbGUoZj1lW2QrK10paWYoYz1mLmdldEF0dHJpYnV0ZU5vZGUoImlkIiksYyYmYy52YWx1ZT09PWEpcmV0dXJuW2ZdfXJldHVybltdfX0pLGQuZmluZC5UQUc9Yy5nZXRFbGVtZW50c0J5VGFnTmFtZT9mdW5jdGlvbihhLGIpe3JldHVybiJ1bmRlZmluZWQiIT10eXBlb2YgYi5nZXRFbGVtZW50c0J5VGFnTmFtZT9iLmdldEVsZW1lbnRzQnlUYWdOYW1lKGEpOmMucXNhP2IucXVlcnlTZWxlY3RvckFsbChhKTp2b2lkIDB9OmZ1bmN0aW9uKGEsYil7dmFyIGMsZD1bXSxlPTAsZj1iLmdldEVsZW1lbnRzQnlUYWdOYW1lKGEpO2lmKCIqIj09PWEpe3doaWxlKGM9ZltlKytdKTE9PT1jLm5vZGVUeXBlJiZkLnB1c2goYyk7cmV0dXJuIGR9cmV0dXJuIGZ9LGQuZmluZC5DTEFTUz1jLmdldEVsZW1lbnRzQnlDbGFzc05hbWUmJmZ1bmN0aW9uKGEsYil7aWYoInVuZGVmaW5lZCIhPXR5cGVvZiBiLmdldEVsZW1lbnRzQnlDbGFzc05hbWUmJnApcmV0dXJuIGIuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZShhKX0scj1bXSxxPVtdLChjLnFzYT1ZLnRlc3Qobi5xdWVyeVNlbGVjdG9yQWxsKSkmJihqYShmdW5jdGlvbihhKXtvLmFwcGVuZENoaWxkKGEpLmlubmVySFRNTD0iPGEgaWQ9JyIrdSsiJz48L2E+PHNlbGVjdCBpZD0nIit1KyItXHJcXCcgbXNhbGxvd2NhcHR1cmU9Jyc+PG9wdGlvbiBzZWxlY3RlZD0nJz48L29wdGlvbj48L3NlbGVjdD4iLGEucXVlcnlTZWxlY3RvckFsbCgiW21zYWxsb3djYXB0dXJlXj0nJ10iKS5sZW5ndGgmJnEucHVzaCgiWypeJF09IitLKyIqKD86Jyd8XCJcIikiKSxhLnF1ZXJ5U2VsZWN0b3JBbGwoIltzZWxlY3RlZF0iKS5sZW5ndGh8fHEucHVzaCgiXFxbIitLKyIqKD86dmFsdWV8IitKKyIpIiksYS5xdWVyeVNlbGVjdG9yQWxsKCJbaWR+PSIrdSsiLV0iKS5sZW5ndGh8fHEucHVzaCgifj0iKSxhLnF1ZXJ5U2VsZWN0b3JBbGwoIjpjaGVja2VkIikubGVuZ3RofHxxLnB1c2goIjpjaGVja2VkIiksYS5xdWVyeVNlbGVjdG9yQWxsKCJhIyIrdSsiKyoiKS5sZW5ndGh8fHEucHVzaCgiLiMuK1srfl0iKX0pLGphKGZ1bmN0aW9uKGEpe2EuaW5uZXJIVE1MPSI8YSBocmVmPScnIGRpc2FibGVkPSdkaXNhYmxlZCc+PC9hPjxzZWxlY3QgZGlzYWJsZWQ9J2Rpc2FibGVkJz48b3B0aW9uLz48L3NlbGVjdD4iO3ZhciBiPW4uY3JlYXRlRWxlbWVudCgiaW5wdXQiKTtiLnNldEF0dHJpYnV0ZSgidHlwZSIsImhpZGRlbiIpLGEuYXBwZW5kQ2hpbGQoYikuc2V0QXR0cmlidXRlKCJuYW1lIiwiRCIpLGEucXVlcnlTZWxlY3RvckFsbCgiW25hbWU9ZF0iKS5sZW5ndGgmJnEucHVzaCgibmFtZSIrSysiKlsqXiR8IX5dPz0iKSwyIT09YS5xdWVyeVNlbGVjdG9yQWxsKCI6ZW5hYmxlZCIpLmxlbmd0aCYmcS5wdXNoKCI6ZW5hYmxlZCIsIjpkaXNhYmxlZCIpLG8uYXBwZW5kQ2hpbGQoYSkuZGlzYWJsZWQ9ITAsMiE9PWEucXVlcnlTZWxlY3RvckFsbCgiOmRpc2FibGVkIikubGVuZ3RoJiZxLnB1c2goIjplbmFibGVkIiwiOmRpc2FibGVkIiksYS5xdWVyeVNlbGVjdG9yQWxsKCIqLDp4IikscS5wdXNoKCIsLio6Iil9KSksKGMubWF0Y2hlc1NlbGVjdG9yPVkudGVzdChzPW8ubWF0Y2hlc3x8by53ZWJraXRNYXRjaGVzU2VsZWN0b3J8fG8ubW96TWF0Y2hlc1NlbGVjdG9yfHxvLm9NYXRjaGVzU2VsZWN0b3J8fG8ubXNNYXRjaGVzU2VsZWN0b3IpKSYmamEoZnVuY3Rpb24oYSl7Yy5kaXNjb25uZWN0ZWRNYXRjaD1zLmNhbGwoYSwiKiIpLHMuY2FsbChhLCJbcyE9JyddOngiKSxyLnB1c2goIiE9IixOKX0pLHE9cS5sZW5ndGgmJm5ldyBSZWdFeHAocS5qb2luKCJ8IikpLHI9ci5sZW5ndGgmJm5ldyBSZWdFeHAoci5qb2luKCJ8IikpLGI9WS50ZXN0KG8uY29tcGFyZURvY3VtZW50UG9zaXRpb24pLHQ9Ynx8WS50ZXN0KG8uY29udGFpbnMpP2Z1bmN0aW9uKGEsYil7dmFyIGM9OT09PWEubm9kZVR5cGU/YS5kb2N1bWVudEVsZW1lbnQ6YSxkPWImJmIucGFyZW50Tm9kZTtyZXR1cm4gYT09PWR8fCEoIWR8fDEhPT1kLm5vZGVUeXBlfHwhKGMuY29udGFpbnM/Yy5jb250YWlucyhkKTphLmNvbXBhcmVEb2N1bWVudFBvc2l0aW9uJiYxNiZhLmNvbXBhcmVEb2N1bWVudFBvc2l0aW9uKGQpKSl9OmZ1bmN0aW9uKGEsYil7aWYoYil3aGlsZShiPWIucGFyZW50Tm9kZSlpZihiPT09YSlyZXR1cm4hMDtyZXR1cm4hMX0sQj1iP2Z1bmN0aW9uKGEsYil7aWYoYT09PWIpcmV0dXJuIGw9ITAsMDt2YXIgZD0hYS5jb21wYXJlRG9jdW1lbnRQb3NpdGlvbi0hYi5jb21wYXJlRG9jdW1lbnRQb3NpdGlvbjtyZXR1cm4gZD9kOihkPShhLm93bmVyRG9jdW1lbnR8fGEpPT09KGIub3duZXJEb2N1bWVudHx8Yik/YS5jb21wYXJlRG9jdW1lbnRQb3NpdGlvbihiKToxLDEmZHx8IWMuc29ydERldGFjaGVkJiZiLmNvbXBhcmVEb2N1bWVudFBvc2l0aW9uKGEpPT09ZD9hPT09bnx8YS5vd25lckRvY3VtZW50PT09diYmdCh2LGEpPy0xOmI9PT1ufHxiLm93bmVyRG9jdW1lbnQ9PT12JiZ0KHYsYik/MTprP0koayxhKS1JKGssYik6MDo0JmQ/LTE6MSl9OmZ1bmN0aW9uKGEsYil7aWYoYT09PWIpcmV0dXJuIGw9ITAsMDt2YXIgYyxkPTAsZT1hLnBhcmVudE5vZGUsZj1iLnBhcmVudE5vZGUsZz1bYV0saD1bYl07aWYoIWV8fCFmKXJldHVybiBhPT09bj8tMTpiPT09bj8xOmU/LTE6Zj8xOms/SShrLGEpLUkoayxiKTowO2lmKGU9PT1mKXJldHVybiBsYShhLGIpO2M9YTt3aGlsZShjPWMucGFyZW50Tm9kZSlnLnVuc2hpZnQoYyk7Yz1iO3doaWxlKGM9Yy5wYXJlbnROb2RlKWgudW5zaGlmdChjKTt3aGlsZShnW2RdPT09aFtkXSlkKys7cmV0dXJuIGQ/bGEoZ1tkXSxoW2RdKTpnW2RdPT09dj8tMTpoW2RdPT09dj8xOjB9LG4pOm59LGdhLm1hdGNoZXM9ZnVuY3Rpb24oYSxiKXtyZXR1cm4gZ2EoYSxudWxsLG51bGwsYil9LGdhLm1hdGNoZXNTZWxlY3Rvcj1mdW5jdGlvbihhLGIpe2lmKChhLm93bmVyRG9jdW1lbnR8fGEpIT09biYmbShhKSxiPWIucmVwbGFjZShTLCI9JyQxJ10iKSxjLm1hdGNoZXNTZWxlY3RvciYmcCYmIUFbYisiICJdJiYoIXJ8fCFyLnRlc3QoYikpJiYoIXF8fCFxLnRlc3QoYikpKXRyeXt2YXIgZD1zLmNhbGwoYSxiKTtpZihkfHxjLmRpc2Nvbm5lY3RlZE1hdGNofHxhLmRvY3VtZW50JiYxMSE9PWEuZG9jdW1lbnQubm9kZVR5cGUpcmV0dXJuIGR9Y2F0Y2goZSl7fXJldHVybiBnYShiLG4sbnVsbCxbYV0pLmxlbmd0aD4wfSxnYS5jb250YWlucz1mdW5jdGlvbihhLGIpe3JldHVybihhLm93bmVyRG9jdW1lbnR8fGEpIT09biYmbShhKSx0KGEsYil9LGdhLmF0dHI9ZnVuY3Rpb24oYSxiKXsoYS5vd25lckRvY3VtZW50fHxhKSE9PW4mJm0oYSk7dmFyIGU9ZC5hdHRySGFuZGxlW2IudG9Mb3dlckNhc2UoKV0sZj1lJiZDLmNhbGwoZC5hdHRySGFuZGxlLGIudG9Mb3dlckNhc2UoKSk/ZShhLGIsIXApOnZvaWQgMDtyZXR1cm4gdm9pZCAwIT09Zj9mOmMuYXR0cmlidXRlc3x8IXA/YS5nZXRBdHRyaWJ1dGUoYik6KGY9YS5nZXRBdHRyaWJ1dGVOb2RlKGIpKSYmZi5zcGVjaWZpZWQ/Zi52YWx1ZTpudWxsfSxnYS5lc2NhcGU9ZnVuY3Rpb24oYSl7cmV0dXJuKGErIiIpLnJlcGxhY2UoYmEsY2EpfSxnYS5lcnJvcj1mdW5jdGlvbihhKXt0aHJvdyBuZXcgRXJyb3IoIlN5bnRheCBlcnJvciwgdW5yZWNvZ25pemVkIGV4cHJlc3Npb246ICIrYSl9LGdhLnVuaXF1ZVNvcnQ9ZnVuY3Rpb24oYSl7dmFyIGIsZD1bXSxlPTAsZj0wO2lmKGw9IWMuZGV0ZWN0RHVwbGljYXRlcyxrPSFjLnNvcnRTdGFibGUmJmEuc2xpY2UoMCksYS5zb3J0KEIpLGwpe3doaWxlKGI9YVtmKytdKWI9PT1hW2ZdJiYoZT1kLnB1c2goZikpO3doaWxlKGUtLSlhLnNwbGljZShkW2VdLDEpfXJldHVybiBrPW51bGwsYX0sZT1nYS5nZXRUZXh0PWZ1bmN0aW9uKGEpe3ZhciBiLGM9IiIsZD0wLGY9YS5ub2RlVHlwZTtpZihmKXtpZigxPT09Znx8OT09PWZ8fDExPT09Zil7aWYoInN0cmluZyI9PXR5cGVvZiBhLnRleHRDb250ZW50KXJldHVybiBhLnRleHRDb250ZW50O2ZvcihhPWEuZmlyc3RDaGlsZDthO2E9YS5uZXh0U2libGluZyljKz1lKGEpfWVsc2UgaWYoMz09PWZ8fDQ9PT1mKXJldHVybiBhLm5vZGVWYWx1ZX1lbHNlIHdoaWxlKGI9YVtkKytdKWMrPWUoYik7cmV0dXJuIGN9LGQ9Z2Euc2VsZWN0b3JzPXtjYWNoZUxlbmd0aDo1MCxjcmVhdGVQc2V1ZG86aWEsbWF0Y2g6VixhdHRySGFuZGxlOnt9LGZpbmQ6e30scmVsYXRpdmU6eyI+Ijp7ZGlyOiJwYXJlbnROb2RlIixmaXJzdDohMH0sIiAiOntkaXI6InBhcmVudE5vZGUifSwiKyI6e2RpcjoicHJldmlvdXNTaWJsaW5nIixmaXJzdDohMH0sIn4iOntkaXI6InByZXZpb3VzU2libGluZyJ9fSxwcmVGaWx0ZXI6e0FUVFI6ZnVuY3Rpb24oYSl7cmV0dXJuIGFbMV09YVsxXS5yZXBsYWNlKF8sYWEpLGFbM109KGFbM118fGFbNF18fGFbNV18fCIiKS5yZXBsYWNlKF8sYWEpLCJ+PSI9PT1hWzJdJiYoYVszXT0iICIrYVszXSsiICIpLGEuc2xpY2UoMCw0KX0sQ0hJTEQ6ZnVuY3Rpb24oYSl7cmV0dXJuIGFbMV09YVsxXS50b0xvd2VyQ2FzZSgpLCJudGgiPT09YVsxXS5zbGljZSgwLDMpPyhhWzNdfHxnYS5lcnJvcihhWzBdKSxhWzRdPSsoYVs0XT9hWzVdKyhhWzZdfHwxKToyKigiZXZlbiI9PT1hWzNdfHwib2RkIj09PWFbM10pKSxhWzVdPSsoYVs3XSthWzhdfHwib2RkIj09PWFbM10pKTphWzNdJiZnYS5lcnJvcihhWzBdKSxhfSxQU0VVRE86ZnVuY3Rpb24oYSl7dmFyIGIsYz0hYVs2XSYmYVsyXTtyZXR1cm4gVi5DSElMRC50ZXN0KGFbMF0pP251bGw6KGFbM10/YVsyXT1hWzRdfHxhWzVdfHwiIjpjJiZULnRlc3QoYykmJihiPWcoYywhMCkpJiYoYj1jLmluZGV4T2YoIikiLGMubGVuZ3RoLWIpLWMubGVuZ3RoKSYmKGFbMF09YVswXS5zbGljZSgwLGIpLGFbMl09Yy5zbGljZSgwLGIpKSxhLnNsaWNlKDAsMykpfX0sZmlsdGVyOntUQUc6ZnVuY3Rpb24oYSl7dmFyIGI9YS5yZXBsYWNlKF8sYWEpLnRvTG93ZXJDYXNlKCk7cmV0dXJuIioiPT09YT9mdW5jdGlvbigpe3JldHVybiEwfTpmdW5jdGlvbihhKXtyZXR1cm4gYS5ub2RlTmFtZSYmYS5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpPT09Yn19LENMQVNTOmZ1bmN0aW9uKGEpe3ZhciBiPXlbYSsiICJdO3JldHVybiBifHwoYj1uZXcgUmVnRXhwKCIoXnwiK0srIikiK2ErIigiK0srInwkKSIpKSYmeShhLGZ1bmN0aW9uKGEpe3JldHVybiBiLnRlc3QoInN0cmluZyI9PXR5cGVvZiBhLmNsYXNzTmFtZSYmYS5jbGFzc05hbWV8fCJ1bmRlZmluZWQiIT10eXBlb2YgYS5nZXRBdHRyaWJ1dGUmJmEuZ2V0QXR0cmlidXRlKCJjbGFzcyIpfHwiIil9KX0sQVRUUjpmdW5jdGlvbihhLGIsYyl7cmV0dXJuIGZ1bmN0aW9uKGQpe3ZhciBlPWdhLmF0dHIoZCxhKTtyZXR1cm4gbnVsbD09ZT8iIT0iPT09YjohYnx8KGUrPSIiLCI9Ij09PWI/ZT09PWM6IiE9Ij09PWI/ZSE9PWM6Il49Ij09PWI/YyYmMD09PWUuaW5kZXhPZihjKToiKj0iPT09Yj9jJiZlLmluZGV4T2YoYyk+LTE6IiQ9Ij09PWI/YyYmZS5zbGljZSgtYy5sZW5ndGgpPT09Yzoifj0iPT09Yj8oIiAiK2UucmVwbGFjZShPLCIgIikrIiAiKS5pbmRleE9mKGMpPi0xOiJ8PSI9PT1iJiYoZT09PWN8fGUuc2xpY2UoMCxjLmxlbmd0aCsxKT09PWMrIi0iKSl9fSxDSElMRDpmdW5jdGlvbihhLGIsYyxkLGUpe3ZhciBmPSJudGgiIT09YS5zbGljZSgwLDMpLGc9Imxhc3QiIT09YS5zbGljZSgtNCksaD0ib2YtdHlwZSI9PT1iO3JldHVybiAxPT09ZCYmMD09PWU/ZnVuY3Rpb24oYSl7cmV0dXJuISFhLnBhcmVudE5vZGV9OmZ1bmN0aW9uKGIsYyxpKXt2YXIgaixrLGwsbSxuLG8scD1mIT09Zz8ibmV4dFNpYmxpbmciOiJwcmV2aW91c1NpYmxpbmciLHE9Yi5wYXJlbnROb2RlLHI9aCYmYi5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpLHM9IWkmJiFoLHQ9ITE7aWYocSl7aWYoZil7d2hpbGUocCl7bT1iO3doaWxlKG09bVtwXSlpZihoP20ubm9kZU5hbWUudG9Mb3dlckNhc2UoKT09PXI6MT09PW0ubm9kZVR5cGUpcmV0dXJuITE7bz1wPSJvbmx5Ij09PWEmJiFvJiYibmV4dFNpYmxpbmcifXJldHVybiEwfWlmKG89W2c/cS5maXJzdENoaWxkOnEubGFzdENoaWxkXSxnJiZzKXttPXEsbD1tW3VdfHwobVt1XT17fSksaz1sW20udW5pcXVlSURdfHwobFttLnVuaXF1ZUlEXT17fSksaj1rW2FdfHxbXSxuPWpbMF09PT13JiZqWzFdLHQ9biYmalsyXSxtPW4mJnEuY2hpbGROb2Rlc1tuXTt3aGlsZShtPSsrbiYmbSYmbVtwXXx8KHQ9bj0wKXx8by5wb3AoKSlpZigxPT09bS5ub2RlVHlwZSYmKyt0JiZtPT09Yil7a1thXT1bdyxuLHRdO2JyZWFrfX1lbHNlIGlmKHMmJihtPWIsbD1tW3VdfHwobVt1XT17fSksaz1sW20udW5pcXVlSURdfHwobFttLnVuaXF1ZUlEXT17fSksaj1rW2FdfHxbXSxuPWpbMF09PT13JiZqWzFdLHQ9biksdD09PSExKXdoaWxlKG09KytuJiZtJiZtW3BdfHwodD1uPTApfHxvLnBvcCgpKWlmKChoP20ubm9kZU5hbWUudG9Mb3dlckNhc2UoKT09PXI6MT09PW0ubm9kZVR5cGUpJiYrK3QmJihzJiYobD1tW3VdfHwobVt1XT17fSksaz1sW20udW5pcXVlSURdfHwobFttLnVuaXF1ZUlEXT17fSksa1thXT1bdyx0XSksbT09PWIpKWJyZWFrO3JldHVybiB0LT1lLHQ9PT1kfHx0JWQ9PT0wJiZ0L2Q+PTB9fX0sUFNFVURPOmZ1bmN0aW9uKGEsYil7dmFyIGMsZT1kLnBzZXVkb3NbYV18fGQuc2V0RmlsdGVyc1thLnRvTG93ZXJDYXNlKCldfHxnYS5lcnJvcigidW5zdXBwb3J0ZWQgcHNldWRvOiAiK2EpO3JldHVybiBlW3VdP2UoYik6ZS5sZW5ndGg+MT8oYz1bYSxhLCIiLGJdLGQuc2V0RmlsdGVycy5oYXNPd25Qcm9wZXJ0eShhLnRvTG93ZXJDYXNlKCkpP2lhKGZ1bmN0aW9uKGEsYyl7dmFyIGQsZj1lKGEsYiksZz1mLmxlbmd0aDt3aGlsZShnLS0pZD1JKGEsZltnXSksYVtkXT0hKGNbZF09ZltnXSl9KTpmdW5jdGlvbihhKXtyZXR1cm4gZShhLDAsYyl9KTplfX0scHNldWRvczp7bm90OmlhKGZ1bmN0aW9uKGEpe3ZhciBiPVtdLGM9W10sZD1oKGEucmVwbGFjZShQLCIkMSIpKTtyZXR1cm4gZFt1XT9pYShmdW5jdGlvbihhLGIsYyxlKXt2YXIgZixnPWQoYSxudWxsLGUsW10pLGg9YS5sZW5ndGg7d2hpbGUoaC0tKShmPWdbaF0pJiYoYVtoXT0hKGJbaF09ZikpfSk6ZnVuY3Rpb24oYSxlLGYpe3JldHVybiBiWzBdPWEsZChiLG51bGwsZixjKSxiWzBdPW51bGwsIWMucG9wKCl9fSksaGFzOmlhKGZ1bmN0aW9uKGEpe3JldHVybiBmdW5jdGlvbihiKXtyZXR1cm4gZ2EoYSxiKS5sZW5ndGg+MH19KSxjb250YWluczppYShmdW5jdGlvbihhKXtyZXR1cm4gYT1hLnJlcGxhY2UoXyxhYSksZnVuY3Rpb24oYil7cmV0dXJuKGIudGV4dENvbnRlbnR8fGIuaW5uZXJUZXh0fHxlKGIpKS5pbmRleE9mKGEpPi0xfX0pLGxhbmc6aWEoZnVuY3Rpb24oYSl7cmV0dXJuIFUudGVzdChhfHwiIil8fGdhLmVycm9yKCJ1bnN1cHBvcnRlZCBsYW5nOiAiK2EpLGE9YS5yZXBsYWNlKF8sYWEpLnRvTG93ZXJDYXNlKCksZnVuY3Rpb24oYil7dmFyIGM7ZG8gaWYoYz1wP2IubGFuZzpiLmdldEF0dHJpYnV0ZSgieG1sOmxhbmciKXx8Yi5nZXRBdHRyaWJ1dGUoImxhbmciKSlyZXR1cm4gYz1jLnRvTG93ZXJDYXNlKCksYz09PWF8fDA9PT1jLmluZGV4T2YoYSsiLSIpO3doaWxlKChiPWIucGFyZW50Tm9kZSkmJjE9PT1iLm5vZGVUeXBlKTtyZXR1cm4hMX19KSx0YXJnZXQ6ZnVuY3Rpb24oYil7dmFyIGM9YS5sb2NhdGlvbiYmYS5sb2NhdGlvbi5oYXNoO3JldHVybiBjJiZjLnNsaWNlKDEpPT09Yi5pZH0scm9vdDpmdW5jdGlvbihhKXtyZXR1cm4gYT09PW99LGZvY3VzOmZ1bmN0aW9uKGEpe3JldHVybiBhPT09bi5hY3RpdmVFbGVtZW50JiYoIW4uaGFzRm9jdXN8fG4uaGFzRm9jdXMoKSkmJiEhKGEudHlwZXx8YS5ocmVmfHx+YS50YWJJbmRleCl9LGVuYWJsZWQ6b2EoITEpLGRpc2FibGVkOm9hKCEwKSxjaGVja2VkOmZ1bmN0aW9uKGEpe3ZhciBiPWEubm9kZU5hbWUudG9Mb3dlckNhc2UoKTtyZXR1cm4iaW5wdXQiPT09YiYmISFhLmNoZWNrZWR8fCJvcHRpb24iPT09YiYmISFhLnNlbGVjdGVkfSxzZWxlY3RlZDpmdW5jdGlvbihhKXtyZXR1cm4gYS5wYXJlbnROb2RlJiZhLnBhcmVudE5vZGUuc2VsZWN0ZWRJbmRleCxhLnNlbGVjdGVkPT09ITB9LGVtcHR5OmZ1bmN0aW9uKGEpe2ZvcihhPWEuZmlyc3RDaGlsZDthO2E9YS5uZXh0U2libGluZylpZihhLm5vZGVUeXBlPDYpcmV0dXJuITE7cmV0dXJuITB9LHBhcmVudDpmdW5jdGlvbihhKXtyZXR1cm4hZC5wc2V1ZG9zLmVtcHR5KGEpfSxoZWFkZXI6ZnVuY3Rpb24oYSl7cmV0dXJuIFgudGVzdChhLm5vZGVOYW1lKX0saW5wdXQ6ZnVuY3Rpb24oYSl7cmV0dXJuIFcudGVzdChhLm5vZGVOYW1lKX0sYnV0dG9uOmZ1bmN0aW9uKGEpe3ZhciBiPWEubm9kZU5hbWUudG9Mb3dlckNhc2UoKTtyZXR1cm4iaW5wdXQiPT09YiYmImJ1dHRvbiI9PT1hLnR5cGV8fCJidXR0b24iPT09Yn0sdGV4dDpmdW5jdGlvbihhKXt2YXIgYjtyZXR1cm4iaW5wdXQiPT09YS5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpJiYidGV4dCI9PT1hLnR5cGUmJihudWxsPT0oYj1hLmdldEF0dHJpYnV0ZSgidHlwZSIpKXx8InRleHQiPT09Yi50b0xvd2VyQ2FzZSgpKX0sZmlyc3Q6cGEoZnVuY3Rpb24oKXtyZXR1cm5bMF19KSxsYXN0OnBhKGZ1bmN0aW9uKGEsYil7cmV0dXJuW2ItMV19KSxlcTpwYShmdW5jdGlvbihhLGIsYyl7cmV0dXJuW2M8MD9jK2I6Y119KSxldmVuOnBhKGZ1bmN0aW9uKGEsYil7Zm9yKHZhciBjPTA7YzxiO2MrPTIpYS5wdXNoKGMpO3JldHVybiBhfSksb2RkOnBhKGZ1bmN0aW9uKGEsYil7Zm9yKHZhciBjPTE7YzxiO2MrPTIpYS5wdXNoKGMpO3JldHVybiBhfSksbHQ6cGEoZnVuY3Rpb24oYSxiLGMpe2Zvcih2YXIgZD1jPDA/YytiOmM7LS1kPj0wOylhLnB1c2goZCk7cmV0dXJuIGF9KSxndDpwYShmdW5jdGlvbihhLGIsYyl7Zm9yKHZhciBkPWM8MD9jK2I6YzsrK2Q8YjspYS5wdXNoKGQpO3JldHVybiBhfSl9fSxkLnBzZXVkb3MubnRoPWQucHNldWRvcy5lcTtmb3IoYiBpbntyYWRpbzohMCxjaGVja2JveDohMCxmaWxlOiEwLHBhc3N3b3JkOiEwLGltYWdlOiEwfSlkLnBzZXVkb3NbYl09bWEoYik7Zm9yKGIgaW57c3VibWl0OiEwLHJlc2V0OiEwfSlkLnBzZXVkb3NbYl09bmEoYik7ZnVuY3Rpb24gcmEoKXt9cmEucHJvdG90eXBlPWQuZmlsdGVycz1kLnBzZXVkb3MsZC5zZXRGaWx0ZXJzPW5ldyByYSxnPWdhLnRva2VuaXplPWZ1bmN0aW9uKGEsYil7dmFyIGMsZSxmLGcsaCxpLGosaz16W2ErIiAiXTtpZihrKXJldHVybiBiPzA6ay5zbGljZSgwKTtoPWEsaT1bXSxqPWQucHJlRmlsdGVyO3doaWxlKGgpe2MmJiEoZT1RLmV4ZWMoaCkpfHwoZSYmKGg9aC5zbGljZShlWzBdLmxlbmd0aCl8fGgpLGkucHVzaChmPVtdKSksYz0hMSwoZT1SLmV4ZWMoaCkpJiYoYz1lLnNoaWZ0KCksZi5wdXNoKHt2YWx1ZTpjLHR5cGU6ZVswXS5yZXBsYWNlKFAsIiAiKX0pLGg9aC5zbGljZShjLmxlbmd0aCkpO2ZvcihnIGluIGQuZmlsdGVyKSEoZT1WW2ddLmV4ZWMoaCkpfHxqW2ddJiYhKGU9altnXShlKSl8fChjPWUuc2hpZnQoKSxmLnB1c2goe3ZhbHVlOmMsdHlwZTpnLG1hdGNoZXM6ZX0pLGg9aC5zbGljZShjLmxlbmd0aCkpO2lmKCFjKWJyZWFrfXJldHVybiBiP2gubGVuZ3RoOmg/Z2EuZXJyb3IoYSk6eihhLGkpLnNsaWNlKDApfTtmdW5jdGlvbiBzYShhKXtmb3IodmFyIGI9MCxjPWEubGVuZ3RoLGQ9IiI7YjxjO2IrKylkKz1hW2JdLnZhbHVlO3JldHVybiBkfWZ1bmN0aW9uIHRhKGEsYixjKXt2YXIgZD1iLmRpcixlPWIubmV4dCxmPWV8fGQsZz1jJiYicGFyZW50Tm9kZSI9PT1mLGg9eCsrO3JldHVybiBiLmZpcnN0P2Z1bmN0aW9uKGIsYyxlKXt3aGlsZShiPWJbZF0paWYoMT09PWIubm9kZVR5cGV8fGcpcmV0dXJuIGEoYixjLGUpO3JldHVybiExfTpmdW5jdGlvbihiLGMsaSl7dmFyIGosayxsLG09W3csaF07aWYoaSl7d2hpbGUoYj1iW2RdKWlmKCgxPT09Yi5ub2RlVHlwZXx8ZykmJmEoYixjLGkpKXJldHVybiEwfWVsc2Ugd2hpbGUoYj1iW2RdKWlmKDE9PT1iLm5vZGVUeXBlfHxnKWlmKGw9Ylt1XXx8KGJbdV09e30pLGs9bFtiLnVuaXF1ZUlEXXx8KGxbYi51bmlxdWVJRF09e30pLGUmJmU9PT1iLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCkpYj1iW2RdfHxiO2Vsc2V7aWYoKGo9a1tmXSkmJmpbMF09PT13JiZqWzFdPT09aClyZXR1cm4gbVsyXT1qWzJdO2lmKGtbZl09bSxtWzJdPWEoYixjLGkpKXJldHVybiEwfXJldHVybiExfX1mdW5jdGlvbiB1YShhKXtyZXR1cm4gYS5sZW5ndGg+MT9mdW5jdGlvbihiLGMsZCl7dmFyIGU9YS5sZW5ndGg7d2hpbGUoZS0tKWlmKCFhW2VdKGIsYyxkKSlyZXR1cm4hMTtyZXR1cm4hMH06YVswXX1mdW5jdGlvbiB2YShhLGIsYyl7Zm9yKHZhciBkPTAsZT1iLmxlbmd0aDtkPGU7ZCsrKWdhKGEsYltkXSxjKTtyZXR1cm4gY31mdW5jdGlvbiB3YShhLGIsYyxkLGUpe2Zvcih2YXIgZixnPVtdLGg9MCxpPWEubGVuZ3RoLGo9bnVsbCE9YjtoPGk7aCsrKShmPWFbaF0pJiYoYyYmIWMoZixkLGUpfHwoZy5wdXNoKGYpLGomJmIucHVzaChoKSkpO3JldHVybiBnfWZ1bmN0aW9uIHhhKGEsYixjLGQsZSxmKXtyZXR1cm4gZCYmIWRbdV0mJihkPXhhKGQpKSxlJiYhZVt1XSYmKGU9eGEoZSxmKSksaWEoZnVuY3Rpb24oZixnLGgsaSl7dmFyIGosayxsLG09W10sbj1bXSxvPWcubGVuZ3RoLHA9Znx8dmEoYnx8IioiLGgubm9kZVR5cGU/W2hdOmgsW10pLHE9IWF8fCFmJiZiP3A6d2EocCxtLGEsaCxpKSxyPWM/ZXx8KGY/YTpvfHxkKT9bXTpnOnE7aWYoYyYmYyhxLHIsaCxpKSxkKXtqPXdhKHIsbiksZChqLFtdLGgsaSksaz1qLmxlbmd0aDt3aGlsZShrLS0pKGw9altrXSkmJihyW25ba11dPSEocVtuW2tdXT1sKSl9aWYoZil7aWYoZXx8YSl7aWYoZSl7aj1bXSxrPXIubGVuZ3RoO3doaWxlKGstLSkobD1yW2tdKSYmai5wdXNoKHFba109bCk7ZShudWxsLHI9W10saixpKX1rPXIubGVuZ3RoO3doaWxlKGstLSkobD1yW2tdKSYmKGo9ZT9JKGYsbCk6bVtrXSk+LTEmJihmW2pdPSEoZ1tqXT1sKSl9fWVsc2Ugcj13YShyPT09Zz9yLnNwbGljZShvLHIubGVuZ3RoKTpyKSxlP2UobnVsbCxnLHIsaSk6Ry5hcHBseShnLHIpfSl9ZnVuY3Rpb24geWEoYSl7Zm9yKHZhciBiLGMsZSxmPWEubGVuZ3RoLGc9ZC5yZWxhdGl2ZVthWzBdLnR5cGVdLGg9Z3x8ZC5yZWxhdGl2ZVsiICJdLGk9Zz8xOjAsaz10YShmdW5jdGlvbihhKXtyZXR1cm4gYT09PWJ9LGgsITApLGw9dGEoZnVuY3Rpb24oYSl7cmV0dXJuIEkoYixhKT4tMX0saCwhMCksbT1bZnVuY3Rpb24oYSxjLGQpe3ZhciBlPSFnJiYoZHx8YyE9PWopfHwoKGI9Yykubm9kZVR5cGU/ayhhLGMsZCk6bChhLGMsZCkpO3JldHVybiBiPW51bGwsZX1dO2k8ZjtpKyspaWYoYz1kLnJlbGF0aXZlW2FbaV0udHlwZV0pbT1bdGEodWEobSksYyldO2Vsc2V7aWYoYz1kLmZpbHRlclthW2ldLnR5cGVdLmFwcGx5KG51bGwsYVtpXS5tYXRjaGVzKSxjW3VdKXtmb3IoZT0rK2k7ZTxmO2UrKylpZihkLnJlbGF0aXZlW2FbZV0udHlwZV0pYnJlYWs7cmV0dXJuIHhhKGk+MSYmdWEobSksaT4xJiZzYShhLnNsaWNlKDAsaS0xKS5jb25jYXQoe3ZhbHVlOiIgIj09PWFbaS0yXS50eXBlPyIqIjoiIn0pKS5yZXBsYWNlKFAsIiQxIiksYyxpPGUmJnlhKGEuc2xpY2UoaSxlKSksZTxmJiZ5YShhPWEuc2xpY2UoZSkpLGU8ZiYmc2EoYSkpfW0ucHVzaChjKX1yZXR1cm4gdWEobSl9ZnVuY3Rpb24gemEoYSxiKXt2YXIgYz1iLmxlbmd0aD4wLGU9YS5sZW5ndGg+MCxmPWZ1bmN0aW9uKGYsZyxoLGksayl7dmFyIGwsbyxxLHI9MCxzPSIwIix0PWYmJltdLHU9W10sdj1qLHg9Znx8ZSYmZC5maW5kLlRBRygiKiIsaykseT13Kz1udWxsPT12PzE6TWF0aC5yYW5kb20oKXx8LjEsej14Lmxlbmd0aDtmb3IoayYmKGo9Zz09PW58fGd8fGspO3MhPT16JiZudWxsIT0obD14W3NdKTtzKyspe2lmKGUmJmwpe289MCxnfHxsLm93bmVyRG9jdW1lbnQ9PT1ufHwobShsKSxoPSFwKTt3aGlsZShxPWFbbysrXSlpZihxKGwsZ3x8bixoKSl7aS5wdXNoKGwpO2JyZWFrfWsmJih3PXkpfWMmJigobD0hcSYmbCkmJnItLSxmJiZ0LnB1c2gobCkpfWlmKHIrPXMsYyYmcyE9PXIpe289MDt3aGlsZShxPWJbbysrXSlxKHQsdSxnLGgpO2lmKGYpe2lmKHI+MCl3aGlsZShzLS0pdFtzXXx8dVtzXXx8KHVbc109RS5jYWxsKGkpKTt1PXdhKHUpfUcuYXBwbHkoaSx1KSxrJiYhZiYmdS5sZW5ndGg+MCYmcitiLmxlbmd0aD4xJiZnYS51bmlxdWVTb3J0KGkpfXJldHVybiBrJiYodz15LGo9diksdH07cmV0dXJuIGM/aWEoZik6Zn1yZXR1cm4gaD1nYS5jb21waWxlPWZ1bmN0aW9uKGEsYil7dmFyIGMsZD1bXSxlPVtdLGY9QVthKyIgIl07aWYoIWYpe2J8fChiPWcoYSkpLGM9Yi5sZW5ndGg7d2hpbGUoYy0tKWY9eWEoYltjXSksZlt1XT9kLnB1c2goZik6ZS5wdXNoKGYpO2Y9QShhLHphKGUsZCkpLGYuc2VsZWN0b3I9YX1yZXR1cm4gZn0saT1nYS5zZWxlY3Q9ZnVuY3Rpb24oYSxiLGMsZSl7dmFyIGYsaSxqLGssbCxtPSJmdW5jdGlvbiI9PXR5cGVvZiBhJiZhLG49IWUmJmcoYT1tLnNlbGVjdG9yfHxhKTtpZihjPWN8fFtdLDE9PT1uLmxlbmd0aCl7aWYoaT1uWzBdPW5bMF0uc2xpY2UoMCksaS5sZW5ndGg+MiYmIklEIj09PShqPWlbMF0pLnR5cGUmJjk9PT1iLm5vZGVUeXBlJiZwJiZkLnJlbGF0aXZlW2lbMV0udHlwZV0pe2lmKGI9KGQuZmluZC5JRChqLm1hdGNoZXNbMF0ucmVwbGFjZShfLGFhKSxiKXx8W10pWzBdLCFiKXJldHVybiBjO20mJihiPWIucGFyZW50Tm9kZSksYT1hLnNsaWNlKGkuc2hpZnQoKS52YWx1ZS5sZW5ndGgpfWY9Vi5uZWVkc0NvbnRleHQudGVzdChhKT8wOmkubGVuZ3RoO3doaWxlKGYtLSl7aWYoaj1pW2ZdLGQucmVsYXRpdmVbaz1qLnR5cGVdKWJyZWFrO2lmKChsPWQuZmluZFtrXSkmJihlPWwoai5tYXRjaGVzWzBdLnJlcGxhY2UoXyxhYSksJC50ZXN0KGlbMF0udHlwZSkmJnFhKGIucGFyZW50Tm9kZSl8fGIpKSl7aWYoaS5zcGxpY2UoZiwxKSxhPWUubGVuZ3RoJiZzYShpKSwhYSlyZXR1cm4gRy5hcHBseShjLGUpLGM7YnJlYWt9fX1yZXR1cm4obXx8aChhLG4pKShlLGIsIXAsYywhYnx8JC50ZXN0KGEpJiZxYShiLnBhcmVudE5vZGUpfHxiKSxjfSxjLnNvcnRTdGFibGU9dS5zcGxpdCgiIikuc29ydChCKS5qb2luKCIiKT09PXUsYy5kZXRlY3REdXBsaWNhdGVzPSEhbCxtKCksYy5zb3J0RGV0YWNoZWQ9amEoZnVuY3Rpb24oYSl7cmV0dXJuIDEmYS5jb21wYXJlRG9jdW1lbnRQb3NpdGlvbihuLmNyZWF0ZUVsZW1lbnQoImZpZWxkc2V0IikpfSksamEoZnVuY3Rpb24oYSl7cmV0dXJuIGEuaW5uZXJIVE1MPSI8YSBocmVmPScjJz48L2E+IiwiIyI9PT1hLmZpcnN0Q2hpbGQuZ2V0QXR0cmlidXRlKCJocmVmIil9KXx8a2EoInR5cGV8aHJlZnxoZWlnaHR8d2lkdGgiLGZ1bmN0aW9uKGEsYixjKXtpZighYylyZXR1cm4gYS5nZXRBdHRyaWJ1dGUoYiwidHlwZSI9PT1iLnRvTG93ZXJDYXNlKCk/MToyKX0pLGMuYXR0cmlidXRlcyYmamEoZnVuY3Rpb24oYSl7cmV0dXJuIGEuaW5uZXJIVE1MPSI8aW5wdXQvPiIsYS5maXJzdENoaWxkLnNldEF0dHJpYnV0ZSgidmFsdWUiLCIiKSwiIj09PWEuZmlyc3RDaGlsZC5nZXRBdHRyaWJ1dGUoInZhbHVlIil9KXx8a2EoInZhbHVlIixmdW5jdGlvbihhLGIsYyl7aWYoIWMmJiJpbnB1dCI9PT1hLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCkpcmV0dXJuIGEuZGVmYXVsdFZhbHVlfSksamEoZnVuY3Rpb24oYSl7cmV0dXJuIG51bGw9PWEuZ2V0QXR0cmlidXRlKCJkaXNhYmxlZCIpfSl8fGthKEosZnVuY3Rpb24oYSxiLGMpe3ZhciBkO2lmKCFjKXJldHVybiBhW2JdPT09ITA/Yi50b0xvd2VyQ2FzZSgpOihkPWEuZ2V0QXR0cmlidXRlTm9kZShiKSkmJmQuc3BlY2lmaWVkP2QudmFsdWU6bnVsbH0pLGdhfShhKTtyLmZpbmQ9eCxyLmV4cHI9eC5zZWxlY3RvcnMsci5leHByWyI6Il09ci5leHByLnBzZXVkb3Msci51bmlxdWVTb3J0PXIudW5pcXVlPXgudW5pcXVlU29ydCxyLnRleHQ9eC5nZXRUZXh0LHIuaXNYTUxEb2M9eC5pc1hNTCxyLmNvbnRhaW5zPXguY29udGFpbnMsci5lc2NhcGVTZWxlY3Rvcj14LmVzY2FwZTt2YXIgeT1mdW5jdGlvbihhLGIsYyl7dmFyIGQ9W10sZT12b2lkIDAhPT1jO3doaWxlKChhPWFbYl0pJiY5IT09YS5ub2RlVHlwZSlpZigxPT09YS5ub2RlVHlwZSl7aWYoZSYmcihhKS5pcyhjKSlicmVhaztkLnB1c2goYSl9cmV0dXJuIGR9LHo9ZnVuY3Rpb24oYSxiKXtmb3IodmFyIGM9W107YTthPWEubmV4dFNpYmxpbmcpMT09PWEubm9kZVR5cGUmJmEhPT1iJiZjLnB1c2goYSk7cmV0dXJuIGN9LEE9ci5leHByLm1hdGNoLm5lZWRzQ29udGV4dDtmdW5jdGlvbiBCKGEsYil7cmV0dXJuIGEubm9kZU5hbWUmJmEubm9kZU5hbWUudG9Mb3dlckNhc2UoKT09PWIudG9Mb3dlckNhc2UoKX12YXIgQz0vXjwoW2Etel1bXlwvXDA+Olx4MjBcdFxyXG5cZl0qKVtceDIwXHRcclxuXGZdKlwvPz4oPzo8XC9cMT58KSQvaSxEPS9eLlteOiNcW1wuLF0qJC87ZnVuY3Rpb24gRShhLGIsYyl7cmV0dXJuIHIuaXNGdW5jdGlvbihiKT9yLmdyZXAoYSxmdW5jdGlvbihhLGQpe3JldHVybiEhYi5jYWxsKGEsZCxhKSE9PWN9KTpiLm5vZGVUeXBlP3IuZ3JlcChhLGZ1bmN0aW9uKGEpe3JldHVybiBhPT09YiE9PWN9KToic3RyaW5nIiE9dHlwZW9mIGI/ci5ncmVwKGEsZnVuY3Rpb24oYSl7cmV0dXJuIGkuY2FsbChiLGEpPi0xIT09Y30pOkQudGVzdChiKT9yLmZpbHRlcihiLGEsYyk6KGI9ci5maWx0ZXIoYixhKSxyLmdyZXAoYSxmdW5jdGlvbihhKXtyZXR1cm4gaS5jYWxsKGIsYSk+LTEhPT1jJiYxPT09YS5ub2RlVHlwZX0pKX1yLmZpbHRlcj1mdW5jdGlvbihhLGIsYyl7dmFyIGQ9YlswXTtyZXR1cm4gYyYmKGE9Ijpub3QoIithKyIpIiksMT09PWIubGVuZ3RoJiYxPT09ZC5ub2RlVHlwZT9yLmZpbmQubWF0Y2hlc1NlbGVjdG9yKGQsYSk/W2RdOltdOnIuZmluZC5tYXRjaGVzKGEsci5ncmVwKGIsZnVuY3Rpb24oYSl7cmV0dXJuIDE9PT1hLm5vZGVUeXBlfSkpfSxyLmZuLmV4dGVuZCh7ZmluZDpmdW5jdGlvbihhKXt2YXIgYixjLGQ9dGhpcy5sZW5ndGgsZT10aGlzO2lmKCJzdHJpbmciIT10eXBlb2YgYSlyZXR1cm4gdGhpcy5wdXNoU3RhY2socihhKS5maWx0ZXIoZnVuY3Rpb24oKXtmb3IoYj0wO2I8ZDtiKyspaWYoci5jb250YWlucyhlW2JdLHRoaXMpKXJldHVybiEwfSkpO2ZvcihjPXRoaXMucHVzaFN0YWNrKFtdKSxiPTA7YjxkO2IrKylyLmZpbmQoYSxlW2JdLGMpO3JldHVybiBkPjE/ci51bmlxdWVTb3J0KGMpOmN9LGZpbHRlcjpmdW5jdGlvbihhKXtyZXR1cm4gdGhpcy5wdXNoU3RhY2soRSh0aGlzLGF8fFtdLCExKSl9LG5vdDpmdW5jdGlvbihhKXtyZXR1cm4gdGhpcy5wdXNoU3RhY2soRSh0aGlzLGF8fFtdLCEwKSl9LGlzOmZ1bmN0aW9uKGEpe3JldHVybiEhRSh0aGlzLCJzdHJpbmciPT10eXBlb2YgYSYmQS50ZXN0KGEpP3IoYSk6YXx8W10sITEpLmxlbmd0aH19KTt2YXIgRixHPS9eKD86XHMqKDxbXHdcV10rPilbXj5dKnwjKFtcdy1dKykpJC8sSD1yLmZuLmluaXQ9ZnVuY3Rpb24oYSxiLGMpe3ZhciBlLGY7aWYoIWEpcmV0dXJuIHRoaXM7aWYoYz1jfHxGLCJzdHJpbmciPT10eXBlb2YgYSl7aWYoZT0iPCI9PT1hWzBdJiYiPiI9PT1hW2EubGVuZ3RoLTFdJiZhLmxlbmd0aD49Mz9bbnVsbCxhLG51bGxdOkcuZXhlYyhhKSwhZXx8IWVbMV0mJmIpcmV0dXJuIWJ8fGIuanF1ZXJ5PyhifHxjKS5maW5kKGEpOnRoaXMuY29uc3RydWN0b3IoYikuZmluZChhKTtpZihlWzFdKXtpZihiPWIgaW5zdGFuY2VvZiByP2JbMF06YixyLm1lcmdlKHRoaXMsci5wYXJzZUhUTUwoZVsxXSxiJiZiLm5vZGVUeXBlP2Iub3duZXJEb2N1bWVudHx8YjpkLCEwKSksQy50ZXN0KGVbMV0pJiZyLmlzUGxhaW5PYmplY3QoYikpZm9yKGUgaW4gYilyLmlzRnVuY3Rpb24odGhpc1tlXSk/dGhpc1tlXShiW2VdKTp0aGlzLmF0dHIoZSxiW2VdKTtyZXR1cm4gdGhpc31yZXR1cm4gZj1kLmdldEVsZW1lbnRCeUlkKGVbMl0pLGYmJih0aGlzWzBdPWYsdGhpcy5sZW5ndGg9MSksdGhpc31yZXR1cm4gYS5ub2RlVHlwZT8odGhpc1swXT1hLHRoaXMubGVuZ3RoPTEsdGhpcyk6ci5pc0Z1bmN0aW9uKGEpP3ZvaWQgMCE9PWMucmVhZHk/Yy5yZWFkeShhKTphKHIpOnIubWFrZUFycmF5KGEsdGhpcyl9O0gucHJvdG90eXBlPXIuZm4sRj1yKGQpO3ZhciBJPS9eKD86cGFyZW50c3xwcmV2KD86VW50aWx8QWxsKSkvLEo9e2NoaWxkcmVuOiEwLGNvbnRlbnRzOiEwLG5leHQ6ITAscHJldjohMH07ci5mbi5leHRlbmQoe2hhczpmdW5jdGlvbihhKXt2YXIgYj1yKGEsdGhpcyksYz1iLmxlbmd0aDtyZXR1cm4gdGhpcy5maWx0ZXIoZnVuY3Rpb24oKXtmb3IodmFyIGE9MDthPGM7YSsrKWlmKHIuY29udGFpbnModGhpcyxiW2FdKSlyZXR1cm4hMH0pfSxjbG9zZXN0OmZ1bmN0aW9uKGEsYil7dmFyIGMsZD0wLGU9dGhpcy5sZW5ndGgsZj1bXSxnPSJzdHJpbmciIT10eXBlb2YgYSYmcihhKTtpZighQS50ZXN0KGEpKWZvcig7ZDxlO2QrKylmb3IoYz10aGlzW2RdO2MmJmMhPT1iO2M9Yy5wYXJlbnROb2RlKWlmKGMubm9kZVR5cGU8MTEmJihnP2cuaW5kZXgoYyk+LTE6MT09PWMubm9kZVR5cGUmJnIuZmluZC5tYXRjaGVzU2VsZWN0b3IoYyxhKSkpe2YucHVzaChjKTticmVha31yZXR1cm4gdGhpcy5wdXNoU3RhY2soZi5sZW5ndGg+MT9yLnVuaXF1ZVNvcnQoZik6Zil9LGluZGV4OmZ1bmN0aW9uKGEpe3JldHVybiBhPyJzdHJpbmciPT10eXBlb2YgYT9pLmNhbGwocihhKSx0aGlzWzBdKTppLmNhbGwodGhpcyxhLmpxdWVyeT9hWzBdOmEpOnRoaXNbMF0mJnRoaXNbMF0ucGFyZW50Tm9kZT90aGlzLmZpcnN0KCkucHJldkFsbCgpLmxlbmd0aDotMX0sYWRkOmZ1bmN0aW9uKGEsYil7cmV0dXJuIHRoaXMucHVzaFN0YWNrKHIudW5pcXVlU29ydChyLm1lcmdlKHRoaXMuZ2V0KCkscihhLGIpKSkpfSxhZGRCYWNrOmZ1bmN0aW9uKGEpe3JldHVybiB0aGlzLmFkZChudWxsPT1hP3RoaXMucHJldk9iamVjdDp0aGlzLnByZXZPYmplY3QuZmlsdGVyKGEpKX19KTtmdW5jdGlvbiBLKGEsYil7d2hpbGUoKGE9YVtiXSkmJjEhPT1hLm5vZGVUeXBlKTtyZXR1cm4gYX1yLmVhY2goe3BhcmVudDpmdW5jdGlvbihhKXt2YXIgYj1hLnBhcmVudE5vZGU7cmV0dXJuIGImJjExIT09Yi5ub2RlVHlwZT9iOm51bGx9LHBhcmVudHM6ZnVuY3Rpb24oYSl7cmV0dXJuIHkoYSwicGFyZW50Tm9kZSIpfSxwYXJlbnRzVW50aWw6ZnVuY3Rpb24oYSxiLGMpe3JldHVybiB5KGEsInBhcmVudE5vZGUiLGMpfSxuZXh0OmZ1bmN0aW9uKGEpe3JldHVybiBLKGEsIm5leHRTaWJsaW5nIil9LHByZXY6ZnVuY3Rpb24oYSl7cmV0dXJuIEsoYSwicHJldmlvdXNTaWJsaW5nIil9LG5leHRBbGw6ZnVuY3Rpb24oYSl7cmV0dXJuIHkoYSwibmV4dFNpYmxpbmciKX0scHJldkFsbDpmdW5jdGlvbihhKXtyZXR1cm4geShhLCJwcmV2aW91c1NpYmxpbmciKX0sbmV4dFVudGlsOmZ1bmN0aW9uKGEsYixjKXtyZXR1cm4geShhLCJuZXh0U2libGluZyIsYyl9LHByZXZVbnRpbDpmdW5jdGlvbihhLGIsYyl7cmV0dXJuIHkoYSwicHJldmlvdXNTaWJsaW5nIixjKX0sc2libGluZ3M6ZnVuY3Rpb24oYSl7cmV0dXJuIHooKGEucGFyZW50Tm9kZXx8e30pLmZpcnN0Q2hpbGQsYSl9LGNoaWxkcmVuOmZ1bmN0aW9uKGEpe3JldHVybiB6KGEuZmlyc3RDaGlsZCl9LGNvbnRlbnRzOmZ1bmN0aW9uKGEpe3JldHVybiBCKGEsImlmcmFtZSIpP2EuY29udGVudERvY3VtZW50OihCKGEsInRlbXBsYXRlIikmJihhPWEuY29udGVudHx8YSksci5tZXJnZShbXSxhLmNoaWxkTm9kZXMpKX19LGZ1bmN0aW9uKGEsYil7ci5mblthXT1mdW5jdGlvbihjLGQpe3ZhciBlPXIubWFwKHRoaXMsYixjKTtyZXR1cm4iVW50aWwiIT09YS5zbGljZSgtNSkmJihkPWMpLGQmJiJzdHJpbmciPT10eXBlb2YgZCYmKGU9ci5maWx0ZXIoZCxlKSksdGhpcy5sZW5ndGg+MSYmKEpbYV18fHIudW5pcXVlU29ydChlKSxJLnRlc3QoYSkmJmUucmV2ZXJzZSgpKSx0aGlzLnB1c2hTdGFjayhlKX19KTt2YXIgTD0vW15ceDIwXHRcclxuXGZdKy9nO2Z1bmN0aW9uIE0oYSl7dmFyIGI9e307cmV0dXJuIHIuZWFjaChhLm1hdGNoKEwpfHxbXSxmdW5jdGlvbihhLGMpe2JbY109ITB9KSxifXIuQ2FsbGJhY2tzPWZ1bmN0aW9uKGEpe2E9InN0cmluZyI9PXR5cGVvZiBhP00oYSk6ci5leHRlbmQoe30sYSk7dmFyIGIsYyxkLGUsZj1bXSxnPVtdLGg9LTEsaT1mdW5jdGlvbigpe2ZvcihlPWV8fGEub25jZSxkPWI9ITA7Zy5sZW5ndGg7aD0tMSl7Yz1nLnNoaWZ0KCk7d2hpbGUoKytoPGYubGVuZ3RoKWZbaF0uYXBwbHkoY1swXSxjWzFdKT09PSExJiZhLnN0b3BPbkZhbHNlJiYoaD1mLmxlbmd0aCxjPSExKX1hLm1lbW9yeXx8KGM9ITEpLGI9ITEsZSYmKGY9Yz9bXToiIil9LGo9e2FkZDpmdW5jdGlvbigpe3JldHVybiBmJiYoYyYmIWImJihoPWYubGVuZ3RoLTEsZy5wdXNoKGMpKSxmdW5jdGlvbiBkKGIpe3IuZWFjaChiLGZ1bmN0aW9uKGIsYyl7ci5pc0Z1bmN0aW9uKGMpP2EudW5pcXVlJiZqLmhhcyhjKXx8Zi5wdXNoKGMpOmMmJmMubGVuZ3RoJiYic3RyaW5nIiE9PXIudHlwZShjKSYmZChjKX0pfShhcmd1bWVudHMpLGMmJiFiJiZpKCkpLHRoaXN9LHJlbW92ZTpmdW5jdGlvbigpe3JldHVybiByLmVhY2goYXJndW1lbnRzLGZ1bmN0aW9uKGEsYil7dmFyIGM7d2hpbGUoKGM9ci5pbkFycmF5KGIsZixjKSk+LTEpZi5zcGxpY2UoYywxKSxjPD1oJiZoLS19KSx0aGlzfSxoYXM6ZnVuY3Rpb24oYSl7cmV0dXJuIGE/ci5pbkFycmF5KGEsZik+LTE6Zi5sZW5ndGg+MH0sZW1wdHk6ZnVuY3Rpb24oKXtyZXR1cm4gZiYmKGY9W10pLHRoaXN9LGRpc2FibGU6ZnVuY3Rpb24oKXtyZXR1cm4gZT1nPVtdLGY9Yz0iIix0aGlzfSxkaXNhYmxlZDpmdW5jdGlvbigpe3JldHVybiFmfSxsb2NrOmZ1bmN0aW9uKCl7cmV0dXJuIGU9Zz1bXSxjfHxifHwoZj1jPSIiKSx0aGlzfSxsb2NrZWQ6ZnVuY3Rpb24oKXtyZXR1cm4hIWV9LGZpcmVXaXRoOmZ1bmN0aW9uKGEsYyl7cmV0dXJuIGV8fChjPWN8fFtdLGM9W2EsYy5zbGljZT9jLnNsaWNlKCk6Y10sZy5wdXNoKGMpLGJ8fGkoKSksdGhpc30sZmlyZTpmdW5jdGlvbigpe3JldHVybiBqLmZpcmVXaXRoKHRoaXMsYXJndW1lbnRzKSx0aGlzfSxmaXJlZDpmdW5jdGlvbigpe3JldHVybiEhZH19O3JldHVybiBqfTtmdW5jdGlvbiBOKGEpe3JldHVybiBhfWZ1bmN0aW9uIE8oYSl7dGhyb3cgYX1mdW5jdGlvbiBQKGEsYixjLGQpe3ZhciBlO3RyeXthJiZyLmlzRnVuY3Rpb24oZT1hLnByb21pc2UpP2UuY2FsbChhKS5kb25lKGIpLmZhaWwoYyk6YSYmci5pc0Z1bmN0aW9uKGU9YS50aGVuKT9lLmNhbGwoYSxiLGMpOmIuYXBwbHkodm9pZCAwLFthXS5zbGljZShkKSl9Y2F0Y2goYSl7Yy5hcHBseSh2b2lkIDAsW2FdKX19ci5leHRlbmQoe0RlZmVycmVkOmZ1bmN0aW9uKGIpe3ZhciBjPVtbIm5vdGlmeSIsInByb2dyZXNzIixyLkNhbGxiYWNrcygibWVtb3J5Iiksci5DYWxsYmFja3MoIm1lbW9yeSIpLDJdLFsicmVzb2x2ZSIsImRvbmUiLHIuQ2FsbGJhY2tzKCJvbmNlIG1lbW9yeSIpLHIuQ2FsbGJhY2tzKCJvbmNlIG1lbW9yeSIpLDAsInJlc29sdmVkIl0sWyJyZWplY3QiLCJmYWlsIixyLkNhbGxiYWNrcygib25jZSBtZW1vcnkiKSxyLkNhbGxiYWNrcygib25jZSBtZW1vcnkiKSwxLCJyZWplY3RlZCJdXSxkPSJwZW5kaW5nIixlPXtzdGF0ZTpmdW5jdGlvbigpe3JldHVybiBkfSxhbHdheXM6ZnVuY3Rpb24oKXtyZXR1cm4gZi5kb25lKGFyZ3VtZW50cykuZmFpbChhcmd1bWVudHMpLHRoaXN9LCJjYXRjaCI6ZnVuY3Rpb24oYSl7cmV0dXJuIGUudGhlbihudWxsLGEpfSxwaXBlOmZ1bmN0aW9uKCl7dmFyIGE9YXJndW1lbnRzO3JldHVybiByLkRlZmVycmVkKGZ1bmN0aW9uKGIpe3IuZWFjaChjLGZ1bmN0aW9uKGMsZCl7dmFyIGU9ci5pc0Z1bmN0aW9uKGFbZFs0XV0pJiZhW2RbNF1dO2ZbZFsxXV0oZnVuY3Rpb24oKXt2YXIgYT1lJiZlLmFwcGx5KHRoaXMsYXJndW1lbnRzKTthJiZyLmlzRnVuY3Rpb24oYS5wcm9taXNlKT9hLnByb21pc2UoKS5wcm9ncmVzcyhiLm5vdGlmeSkuZG9uZShiLnJlc29sdmUpLmZhaWwoYi5yZWplY3QpOmJbZFswXSsiV2l0aCJdKHRoaXMsZT9bYV06YXJndW1lbnRzKX0pfSksYT1udWxsfSkucHJvbWlzZSgpfSx0aGVuOmZ1bmN0aW9uKGIsZCxlKXt2YXIgZj0wO2Z1bmN0aW9uIGcoYixjLGQsZSl7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIGg9dGhpcyxpPWFyZ3VtZW50cyxqPWZ1bmN0aW9uKCl7dmFyIGEsajtpZighKGI8Zikpe2lmKGE9ZC5hcHBseShoLGkpLGE9PT1jLnByb21pc2UoKSl0aHJvdyBuZXcgVHlwZUVycm9yKCJUaGVuYWJsZSBzZWxmLXJlc29sdXRpb24iKTtqPWEmJigib2JqZWN0Ij09dHlwZW9mIGF8fCJmdW5jdGlvbiI9PXR5cGVvZiBhKSYmYS50aGVuLHIuaXNGdW5jdGlvbihqKT9lP2ouY2FsbChhLGcoZixjLE4sZSksZyhmLGMsTyxlKSk6KGYrKyxqLmNhbGwoYSxnKGYsYyxOLGUpLGcoZixjLE8sZSksZyhmLGMsTixjLm5vdGlmeVdpdGgpKSk6KGQhPT1OJiYoaD12b2lkIDAsaT1bYV0pLChlfHxjLnJlc29sdmVXaXRoKShoLGkpKX19LGs9ZT9qOmZ1bmN0aW9uKCl7dHJ5e2ooKX1jYXRjaChhKXtyLkRlZmVycmVkLmV4Y2VwdGlvbkhvb2smJnIuRGVmZXJyZWQuZXhjZXB0aW9uSG9vayhhLGsuc3RhY2tUcmFjZSksYisxPj1mJiYoZCE9PU8mJihoPXZvaWQgMCxpPVthXSksYy5yZWplY3RXaXRoKGgsaSkpfX07Yj9rKCk6KHIuRGVmZXJyZWQuZ2V0U3RhY2tIb29rJiYoay5zdGFja1RyYWNlPXIuRGVmZXJyZWQuZ2V0U3RhY2tIb29rKCkpLGEuc2V0VGltZW91dChrKSl9fXJldHVybiByLkRlZmVycmVkKGZ1bmN0aW9uKGEpe2NbMF1bM10uYWRkKGcoMCxhLHIuaXNGdW5jdGlvbihlKT9lOk4sYS5ub3RpZnlXaXRoKSksY1sxXVszXS5hZGQoZygwLGEsci5pc0Z1bmN0aW9uKGIpP2I6TikpLGNbMl1bM10uYWRkKGcoMCxhLHIuaXNGdW5jdGlvbihkKT9kOk8pKX0pLnByb21pc2UoKX0scHJvbWlzZTpmdW5jdGlvbihhKXtyZXR1cm4gbnVsbCE9YT9yLmV4dGVuZChhLGUpOmV9fSxmPXt9O3JldHVybiByLmVhY2goYyxmdW5jdGlvbihhLGIpe3ZhciBnPWJbMl0saD1iWzVdO2VbYlsxXV09Zy5hZGQsaCYmZy5hZGQoZnVuY3Rpb24oKXtkPWh9LGNbMy1hXVsyXS5kaXNhYmxlLGNbMF1bMl0ubG9jayksZy5hZGQoYlszXS5maXJlKSxmW2JbMF1dPWZ1bmN0aW9uKCl7cmV0dXJuIGZbYlswXSsiV2l0aCJdKHRoaXM9PT1mP3ZvaWQgMDp0aGlzLGFyZ3VtZW50cyksdGhpc30sZltiWzBdKyJXaXRoIl09Zy5maXJlV2l0aH0pLGUucHJvbWlzZShmKSxiJiZiLmNhbGwoZixmKSxmfSx3aGVuOmZ1bmN0aW9uKGEpe3ZhciBiPWFyZ3VtZW50cy5sZW5ndGgsYz1iLGQ9QXJyYXkoYyksZT1mLmNhbGwoYXJndW1lbnRzKSxnPXIuRGVmZXJyZWQoKSxoPWZ1bmN0aW9uKGEpe3JldHVybiBmdW5jdGlvbihjKXtkW2FdPXRoaXMsZVthXT1hcmd1bWVudHMubGVuZ3RoPjE/Zi5jYWxsKGFyZ3VtZW50cyk6YywtLWJ8fGcucmVzb2x2ZVdpdGgoZCxlKX19O2lmKGI8PTEmJihQKGEsZy5kb25lKGgoYykpLnJlc29sdmUsZy5yZWplY3QsIWIpLCJwZW5kaW5nIj09PWcuc3RhdGUoKXx8ci5pc0Z1bmN0aW9uKGVbY10mJmVbY10udGhlbikpKXJldHVybiBnLnRoZW4oKTt3aGlsZShjLS0pUChlW2NdLGgoYyksZy5yZWplY3QpO3JldHVybiBnLnByb21pc2UoKX19KTt2YXIgUT0vXihFdmFsfEludGVybmFsfFJhbmdlfFJlZmVyZW5jZXxTeW50YXh8VHlwZXxVUkkpRXJyb3IkLztyLkRlZmVycmVkLmV4Y2VwdGlvbkhvb2s9ZnVuY3Rpb24oYixjKXthLmNvbnNvbGUmJmEuY29uc29sZS53YXJuJiZiJiZRLnRlc3QoYi5uYW1lKSYmYS5jb25zb2xlLndhcm4oImpRdWVyeS5EZWZlcnJlZCBleGNlcHRpb246ICIrYi5tZXNzYWdlLGIuc3RhY2ssYyl9LHIucmVhZHlFeGNlcHRpb249ZnVuY3Rpb24oYil7YS5zZXRUaW1lb3V0KGZ1bmN0aW9uKCl7dGhyb3cgYn0pfTt2YXIgUj1yLkRlZmVycmVkKCk7ci5mbi5yZWFkeT1mdW5jdGlvbihhKXtyZXR1cm4gUi50aGVuKGEpWyJjYXRjaCJdKGZ1bmN0aW9uKGEpe3IucmVhZHlFeGNlcHRpb24oYSk7Cn0pLHRoaXN9LHIuZXh0ZW5kKHtpc1JlYWR5OiExLHJlYWR5V2FpdDoxLHJlYWR5OmZ1bmN0aW9uKGEpeyhhPT09ITA/LS1yLnJlYWR5V2FpdDpyLmlzUmVhZHkpfHwoci5pc1JlYWR5PSEwLGEhPT0hMCYmLS1yLnJlYWR5V2FpdD4wfHxSLnJlc29sdmVXaXRoKGQsW3JdKSl9fSksci5yZWFkeS50aGVuPVIudGhlbjtmdW5jdGlvbiBTKCl7ZC5yZW1vdmVFdmVudExpc3RlbmVyKCJET01Db250ZW50TG9hZGVkIixTKSxhLnJlbW92ZUV2ZW50TGlzdGVuZXIoImxvYWQiLFMpLHIucmVhZHkoKX0iY29tcGxldGUiPT09ZC5yZWFkeVN0YXRlfHwibG9hZGluZyIhPT1kLnJlYWR5U3RhdGUmJiFkLmRvY3VtZW50RWxlbWVudC5kb1Njcm9sbD9hLnNldFRpbWVvdXQoci5yZWFkeSk6KGQuYWRkRXZlbnRMaXN0ZW5lcigiRE9NQ29udGVudExvYWRlZCIsUyksYS5hZGRFdmVudExpc3RlbmVyKCJsb2FkIixTKSk7dmFyIFQ9ZnVuY3Rpb24oYSxiLGMsZCxlLGYsZyl7dmFyIGg9MCxpPWEubGVuZ3RoLGo9bnVsbD09YztpZigib2JqZWN0Ij09PXIudHlwZShjKSl7ZT0hMDtmb3IoaCBpbiBjKVQoYSxiLGgsY1toXSwhMCxmLGcpfWVsc2UgaWYodm9pZCAwIT09ZCYmKGU9ITAsci5pc0Z1bmN0aW9uKGQpfHwoZz0hMCksaiYmKGc/KGIuY2FsbChhLGQpLGI9bnVsbCk6KGo9YixiPWZ1bmN0aW9uKGEsYixjKXtyZXR1cm4gai5jYWxsKHIoYSksYyl9KSksYikpZm9yKDtoPGk7aCsrKWIoYVtoXSxjLGc/ZDpkLmNhbGwoYVtoXSxoLGIoYVtoXSxjKSkpO3JldHVybiBlP2E6aj9iLmNhbGwoYSk6aT9iKGFbMF0sYyk6Zn0sVT1mdW5jdGlvbihhKXtyZXR1cm4gMT09PWEubm9kZVR5cGV8fDk9PT1hLm5vZGVUeXBlfHwhK2Eubm9kZVR5cGV9O2Z1bmN0aW9uIFYoKXt0aGlzLmV4cGFuZG89ci5leHBhbmRvK1YudWlkKyt9Vi51aWQ9MSxWLnByb3RvdHlwZT17Y2FjaGU6ZnVuY3Rpb24oYSl7dmFyIGI9YVt0aGlzLmV4cGFuZG9dO3JldHVybiBifHwoYj17fSxVKGEpJiYoYS5ub2RlVHlwZT9hW3RoaXMuZXhwYW5kb109YjpPYmplY3QuZGVmaW5lUHJvcGVydHkoYSx0aGlzLmV4cGFuZG8se3ZhbHVlOmIsY29uZmlndXJhYmxlOiEwfSkpKSxifSxzZXQ6ZnVuY3Rpb24oYSxiLGMpe3ZhciBkLGU9dGhpcy5jYWNoZShhKTtpZigic3RyaW5nIj09dHlwZW9mIGIpZVtyLmNhbWVsQ2FzZShiKV09YztlbHNlIGZvcihkIGluIGIpZVtyLmNhbWVsQ2FzZShkKV09YltkXTtyZXR1cm4gZX0sZ2V0OmZ1bmN0aW9uKGEsYil7cmV0dXJuIHZvaWQgMD09PWI/dGhpcy5jYWNoZShhKTphW3RoaXMuZXhwYW5kb10mJmFbdGhpcy5leHBhbmRvXVtyLmNhbWVsQ2FzZShiKV19LGFjY2VzczpmdW5jdGlvbihhLGIsYyl7cmV0dXJuIHZvaWQgMD09PWJ8fGImJiJzdHJpbmciPT10eXBlb2YgYiYmdm9pZCAwPT09Yz90aGlzLmdldChhLGIpOih0aGlzLnNldChhLGIsYyksdm9pZCAwIT09Yz9jOmIpfSxyZW1vdmU6ZnVuY3Rpb24oYSxiKXt2YXIgYyxkPWFbdGhpcy5leHBhbmRvXTtpZih2b2lkIDAhPT1kKXtpZih2b2lkIDAhPT1iKXtBcnJheS5pc0FycmF5KGIpP2I9Yi5tYXAoci5jYW1lbENhc2UpOihiPXIuY2FtZWxDYXNlKGIpLGI9YiBpbiBkP1tiXTpiLm1hdGNoKEwpfHxbXSksYz1iLmxlbmd0aDt3aGlsZShjLS0pZGVsZXRlIGRbYltjXV19KHZvaWQgMD09PWJ8fHIuaXNFbXB0eU9iamVjdChkKSkmJihhLm5vZGVUeXBlP2FbdGhpcy5leHBhbmRvXT12b2lkIDA6ZGVsZXRlIGFbdGhpcy5leHBhbmRvXSl9fSxoYXNEYXRhOmZ1bmN0aW9uKGEpe3ZhciBiPWFbdGhpcy5leHBhbmRvXTtyZXR1cm4gdm9pZCAwIT09YiYmIXIuaXNFbXB0eU9iamVjdChiKX19O3ZhciBXPW5ldyBWLFg9bmV3IFYsWT0vXig/Olx7W1x3XFddKlx9fFxbW1x3XFddKlxdKSQvLFo9L1tBLVpdL2c7ZnVuY3Rpb24gJChhKXtyZXR1cm4idHJ1ZSI9PT1hfHwiZmFsc2UiIT09YSYmKCJudWxsIj09PWE/bnVsbDphPT09K2ErIiI/K2E6WS50ZXN0KGEpP0pTT04ucGFyc2UoYSk6YSl9ZnVuY3Rpb24gXyhhLGIsYyl7dmFyIGQ7aWYodm9pZCAwPT09YyYmMT09PWEubm9kZVR5cGUpaWYoZD0iZGF0YS0iK2IucmVwbGFjZShaLCItJCYiKS50b0xvd2VyQ2FzZSgpLGM9YS5nZXRBdHRyaWJ1dGUoZCksInN0cmluZyI9PXR5cGVvZiBjKXt0cnl7Yz0kKGMpfWNhdGNoKGUpe31YLnNldChhLGIsYyl9ZWxzZSBjPXZvaWQgMDtyZXR1cm4gY31yLmV4dGVuZCh7aGFzRGF0YTpmdW5jdGlvbihhKXtyZXR1cm4gWC5oYXNEYXRhKGEpfHxXLmhhc0RhdGEoYSl9LGRhdGE6ZnVuY3Rpb24oYSxiLGMpe3JldHVybiBYLmFjY2VzcyhhLGIsYyl9LHJlbW92ZURhdGE6ZnVuY3Rpb24oYSxiKXtYLnJlbW92ZShhLGIpfSxfZGF0YTpmdW5jdGlvbihhLGIsYyl7cmV0dXJuIFcuYWNjZXNzKGEsYixjKX0sX3JlbW92ZURhdGE6ZnVuY3Rpb24oYSxiKXtXLnJlbW92ZShhLGIpfX0pLHIuZm4uZXh0ZW5kKHtkYXRhOmZ1bmN0aW9uKGEsYil7dmFyIGMsZCxlLGY9dGhpc1swXSxnPWYmJmYuYXR0cmlidXRlcztpZih2b2lkIDA9PT1hKXtpZih0aGlzLmxlbmd0aCYmKGU9WC5nZXQoZiksMT09PWYubm9kZVR5cGUmJiFXLmdldChmLCJoYXNEYXRhQXR0cnMiKSkpe2M9Zy5sZW5ndGg7d2hpbGUoYy0tKWdbY10mJihkPWdbY10ubmFtZSwwPT09ZC5pbmRleE9mKCJkYXRhLSIpJiYoZD1yLmNhbWVsQ2FzZShkLnNsaWNlKDUpKSxfKGYsZCxlW2RdKSkpO1cuc2V0KGYsImhhc0RhdGFBdHRycyIsITApfXJldHVybiBlfXJldHVybiJvYmplY3QiPT10eXBlb2YgYT90aGlzLmVhY2goZnVuY3Rpb24oKXtYLnNldCh0aGlzLGEpfSk6VCh0aGlzLGZ1bmN0aW9uKGIpe3ZhciBjO2lmKGYmJnZvaWQgMD09PWIpe2lmKGM9WC5nZXQoZixhKSx2b2lkIDAhPT1jKXJldHVybiBjO2lmKGM9XyhmLGEpLHZvaWQgMCE9PWMpcmV0dXJuIGN9ZWxzZSB0aGlzLmVhY2goZnVuY3Rpb24oKXtYLnNldCh0aGlzLGEsYil9KX0sbnVsbCxiLGFyZ3VtZW50cy5sZW5ndGg+MSxudWxsLCEwKX0scmVtb3ZlRGF0YTpmdW5jdGlvbihhKXtyZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uKCl7WC5yZW1vdmUodGhpcyxhKX0pfX0pLHIuZXh0ZW5kKHtxdWV1ZTpmdW5jdGlvbihhLGIsYyl7dmFyIGQ7aWYoYSlyZXR1cm4gYj0oYnx8ImZ4IikrInF1ZXVlIixkPVcuZ2V0KGEsYiksYyYmKCFkfHxBcnJheS5pc0FycmF5KGMpP2Q9Vy5hY2Nlc3MoYSxiLHIubWFrZUFycmF5KGMpKTpkLnB1c2goYykpLGR8fFtdfSxkZXF1ZXVlOmZ1bmN0aW9uKGEsYil7Yj1ifHwiZngiO3ZhciBjPXIucXVldWUoYSxiKSxkPWMubGVuZ3RoLGU9Yy5zaGlmdCgpLGY9ci5fcXVldWVIb29rcyhhLGIpLGc9ZnVuY3Rpb24oKXtyLmRlcXVldWUoYSxiKX07ImlucHJvZ3Jlc3MiPT09ZSYmKGU9Yy5zaGlmdCgpLGQtLSksZSYmKCJmeCI9PT1iJiZjLnVuc2hpZnQoImlucHJvZ3Jlc3MiKSxkZWxldGUgZi5zdG9wLGUuY2FsbChhLGcsZikpLCFkJiZmJiZmLmVtcHR5LmZpcmUoKX0sX3F1ZXVlSG9va3M6ZnVuY3Rpb24oYSxiKXt2YXIgYz1iKyJxdWV1ZUhvb2tzIjtyZXR1cm4gVy5nZXQoYSxjKXx8Vy5hY2Nlc3MoYSxjLHtlbXB0eTpyLkNhbGxiYWNrcygib25jZSBtZW1vcnkiKS5hZGQoZnVuY3Rpb24oKXtXLnJlbW92ZShhLFtiKyJxdWV1ZSIsY10pfSl9KX19KSxyLmZuLmV4dGVuZCh7cXVldWU6ZnVuY3Rpb24oYSxiKXt2YXIgYz0yO3JldHVybiJzdHJpbmciIT10eXBlb2YgYSYmKGI9YSxhPSJmeCIsYy0tKSxhcmd1bWVudHMubGVuZ3RoPGM/ci5xdWV1ZSh0aGlzWzBdLGEpOnZvaWQgMD09PWI/dGhpczp0aGlzLmVhY2goZnVuY3Rpb24oKXt2YXIgYz1yLnF1ZXVlKHRoaXMsYSxiKTtyLl9xdWV1ZUhvb2tzKHRoaXMsYSksImZ4Ij09PWEmJiJpbnByb2dyZXNzIiE9PWNbMF0mJnIuZGVxdWV1ZSh0aGlzLGEpfSl9LGRlcXVldWU6ZnVuY3Rpb24oYSl7cmV0dXJuIHRoaXMuZWFjaChmdW5jdGlvbigpe3IuZGVxdWV1ZSh0aGlzLGEpfSl9LGNsZWFyUXVldWU6ZnVuY3Rpb24oYSl7cmV0dXJuIHRoaXMucXVldWUoYXx8ImZ4IixbXSl9LHByb21pc2U6ZnVuY3Rpb24oYSxiKXt2YXIgYyxkPTEsZT1yLkRlZmVycmVkKCksZj10aGlzLGc9dGhpcy5sZW5ndGgsaD1mdW5jdGlvbigpey0tZHx8ZS5yZXNvbHZlV2l0aChmLFtmXSl9OyJzdHJpbmciIT10eXBlb2YgYSYmKGI9YSxhPXZvaWQgMCksYT1hfHwiZngiO3doaWxlKGctLSljPVcuZ2V0KGZbZ10sYSsicXVldWVIb29rcyIpLGMmJmMuZW1wdHkmJihkKyssYy5lbXB0eS5hZGQoaCkpO3JldHVybiBoKCksZS5wcm9taXNlKGIpfX0pO3ZhciBhYT0vWystXT8oPzpcZCpcLnwpXGQrKD86W2VFXVsrLV0/XGQrfCkvLnNvdXJjZSxiYT1uZXcgUmVnRXhwKCJeKD86KFsrLV0pPXwpKCIrYWErIikoW2EteiVdKikkIiwiaSIpLGNhPVsiVG9wIiwiUmlnaHQiLCJCb3R0b20iLCJMZWZ0Il0sZGE9ZnVuY3Rpb24oYSxiKXtyZXR1cm4gYT1ifHxhLCJub25lIj09PWEuc3R5bGUuZGlzcGxheXx8IiI9PT1hLnN0eWxlLmRpc3BsYXkmJnIuY29udGFpbnMoYS5vd25lckRvY3VtZW50LGEpJiYibm9uZSI9PT1yLmNzcyhhLCJkaXNwbGF5Iil9LGVhPWZ1bmN0aW9uKGEsYixjLGQpe3ZhciBlLGYsZz17fTtmb3IoZiBpbiBiKWdbZl09YS5zdHlsZVtmXSxhLnN0eWxlW2ZdPWJbZl07ZT1jLmFwcGx5KGEsZHx8W10pO2ZvcihmIGluIGIpYS5zdHlsZVtmXT1nW2ZdO3JldHVybiBlfTtmdW5jdGlvbiBmYShhLGIsYyxkKXt2YXIgZSxmPTEsZz0yMCxoPWQ/ZnVuY3Rpb24oKXtyZXR1cm4gZC5jdXIoKX06ZnVuY3Rpb24oKXtyZXR1cm4gci5jc3MoYSxiLCIiKX0saT1oKCksaj1jJiZjWzNdfHwoci5jc3NOdW1iZXJbYl0/IiI6InB4Iiksaz0oci5jc3NOdW1iZXJbYl18fCJweCIhPT1qJiYraSkmJmJhLmV4ZWMoci5jc3MoYSxiKSk7aWYoayYma1szXSE9PWope2o9anx8a1szXSxjPWN8fFtdLGs9K2l8fDE7ZG8gZj1mfHwiLjUiLGsvPWYsci5zdHlsZShhLGIsaytqKTt3aGlsZShmIT09KGY9aCgpL2kpJiYxIT09ZiYmLS1nKX1yZXR1cm4gYyYmKGs9K2t8fCtpfHwwLGU9Y1sxXT9rKyhjWzFdKzEpKmNbMl06K2NbMl0sZCYmKGQudW5pdD1qLGQuc3RhcnQ9ayxkLmVuZD1lKSksZX12YXIgZ2E9e307ZnVuY3Rpb24gaGEoYSl7dmFyIGIsYz1hLm93bmVyRG9jdW1lbnQsZD1hLm5vZGVOYW1lLGU9Z2FbZF07cmV0dXJuIGU/ZTooYj1jLmJvZHkuYXBwZW5kQ2hpbGQoYy5jcmVhdGVFbGVtZW50KGQpKSxlPXIuY3NzKGIsImRpc3BsYXkiKSxiLnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQoYiksIm5vbmUiPT09ZSYmKGU9ImJsb2NrIiksZ2FbZF09ZSxlKX1mdW5jdGlvbiBpYShhLGIpe2Zvcih2YXIgYyxkLGU9W10sZj0wLGc9YS5sZW5ndGg7ZjxnO2YrKylkPWFbZl0sZC5zdHlsZSYmKGM9ZC5zdHlsZS5kaXNwbGF5LGI/KCJub25lIj09PWMmJihlW2ZdPVcuZ2V0KGQsImRpc3BsYXkiKXx8bnVsbCxlW2ZdfHwoZC5zdHlsZS5kaXNwbGF5PSIiKSksIiI9PT1kLnN0eWxlLmRpc3BsYXkmJmRhKGQpJiYoZVtmXT1oYShkKSkpOiJub25lIiE9PWMmJihlW2ZdPSJub25lIixXLnNldChkLCJkaXNwbGF5IixjKSkpO2ZvcihmPTA7ZjxnO2YrKyludWxsIT1lW2ZdJiYoYVtmXS5zdHlsZS5kaXNwbGF5PWVbZl0pO3JldHVybiBhfXIuZm4uZXh0ZW5kKHtzaG93OmZ1bmN0aW9uKCl7cmV0dXJuIGlhKHRoaXMsITApfSxoaWRlOmZ1bmN0aW9uKCl7cmV0dXJuIGlhKHRoaXMpfSx0b2dnbGU6ZnVuY3Rpb24oYSl7cmV0dXJuImJvb2xlYW4iPT10eXBlb2YgYT9hP3RoaXMuc2hvdygpOnRoaXMuaGlkZSgpOnRoaXMuZWFjaChmdW5jdGlvbigpe2RhKHRoaXMpP3IodGhpcykuc2hvdygpOnIodGhpcykuaGlkZSgpfSl9fSk7dmFyIGphPS9eKD86Y2hlY2tib3h8cmFkaW8pJC9pLGthPS88KFthLXpdW15cL1wwPlx4MjBcdFxyXG5cZl0rKS9pLGxhPS9eJHxcLyg/OmphdmF8ZWNtYSlzY3JpcHQvaSxtYT17b3B0aW9uOlsxLCI8c2VsZWN0IG11bHRpcGxlPSdtdWx0aXBsZSc+IiwiPC9zZWxlY3Q+Il0sdGhlYWQ6WzEsIjx0YWJsZT4iLCI8L3RhYmxlPiJdLGNvbDpbMiwiPHRhYmxlPjxjb2xncm91cD4iLCI8L2NvbGdyb3VwPjwvdGFibGU+Il0sdHI6WzIsIjx0YWJsZT48dGJvZHk+IiwiPC90Ym9keT48L3RhYmxlPiJdLHRkOlszLCI8dGFibGU+PHRib2R5Pjx0cj4iLCI8L3RyPjwvdGJvZHk+PC90YWJsZT4iXSxfZGVmYXVsdDpbMCwiIiwiIl19O21hLm9wdGdyb3VwPW1hLm9wdGlvbixtYS50Ym9keT1tYS50Zm9vdD1tYS5jb2xncm91cD1tYS5jYXB0aW9uPW1hLnRoZWFkLG1hLnRoPW1hLnRkO2Z1bmN0aW9uIG5hKGEsYil7dmFyIGM7cmV0dXJuIGM9InVuZGVmaW5lZCIhPXR5cGVvZiBhLmdldEVsZW1lbnRzQnlUYWdOYW1lP2EuZ2V0RWxlbWVudHNCeVRhZ05hbWUoYnx8IioiKToidW5kZWZpbmVkIiE9dHlwZW9mIGEucXVlcnlTZWxlY3RvckFsbD9hLnF1ZXJ5U2VsZWN0b3JBbGwoYnx8IioiKTpbXSx2b2lkIDA9PT1ifHxiJiZCKGEsYik/ci5tZXJnZShbYV0sYyk6Y31mdW5jdGlvbiBvYShhLGIpe2Zvcih2YXIgYz0wLGQ9YS5sZW5ndGg7YzxkO2MrKylXLnNldChhW2NdLCJnbG9iYWxFdmFsIiwhYnx8Vy5nZXQoYltjXSwiZ2xvYmFsRXZhbCIpKX12YXIgcGE9Lzx8JiM/XHcrOy87ZnVuY3Rpb24gcWEoYSxiLGMsZCxlKXtmb3IodmFyIGYsZyxoLGksaixrLGw9Yi5jcmVhdGVEb2N1bWVudEZyYWdtZW50KCksbT1bXSxuPTAsbz1hLmxlbmd0aDtuPG87bisrKWlmKGY9YVtuXSxmfHwwPT09ZilpZigib2JqZWN0Ij09PXIudHlwZShmKSlyLm1lcmdlKG0sZi5ub2RlVHlwZT9bZl06Zik7ZWxzZSBpZihwYS50ZXN0KGYpKXtnPWd8fGwuYXBwZW5kQ2hpbGQoYi5jcmVhdGVFbGVtZW50KCJkaXYiKSksaD0oa2EuZXhlYyhmKXx8WyIiLCIiXSlbMV0udG9Mb3dlckNhc2UoKSxpPW1hW2hdfHxtYS5fZGVmYXVsdCxnLmlubmVySFRNTD1pWzFdK3IuaHRtbFByZWZpbHRlcihmKStpWzJdLGs9aVswXTt3aGlsZShrLS0pZz1nLmxhc3RDaGlsZDtyLm1lcmdlKG0sZy5jaGlsZE5vZGVzKSxnPWwuZmlyc3RDaGlsZCxnLnRleHRDb250ZW50PSIifWVsc2UgbS5wdXNoKGIuY3JlYXRlVGV4dE5vZGUoZikpO2wudGV4dENvbnRlbnQ9IiIsbj0wO3doaWxlKGY9bVtuKytdKWlmKGQmJnIuaW5BcnJheShmLGQpPi0xKWUmJmUucHVzaChmKTtlbHNlIGlmKGo9ci5jb250YWlucyhmLm93bmVyRG9jdW1lbnQsZiksZz1uYShsLmFwcGVuZENoaWxkKGYpLCJzY3JpcHQiKSxqJiZvYShnKSxjKXtrPTA7d2hpbGUoZj1nW2srK10pbGEudGVzdChmLnR5cGV8fCIiKSYmYy5wdXNoKGYpfXJldHVybiBsfSFmdW5jdGlvbigpe3ZhciBhPWQuY3JlYXRlRG9jdW1lbnRGcmFnbWVudCgpLGI9YS5hcHBlbmRDaGlsZChkLmNyZWF0ZUVsZW1lbnQoImRpdiIpKSxjPWQuY3JlYXRlRWxlbWVudCgiaW5wdXQiKTtjLnNldEF0dHJpYnV0ZSgidHlwZSIsInJhZGlvIiksYy5zZXRBdHRyaWJ1dGUoImNoZWNrZWQiLCJjaGVja2VkIiksYy5zZXRBdHRyaWJ1dGUoIm5hbWUiLCJ0IiksYi5hcHBlbmRDaGlsZChjKSxvLmNoZWNrQ2xvbmU9Yi5jbG9uZU5vZGUoITApLmNsb25lTm9kZSghMCkubGFzdENoaWxkLmNoZWNrZWQsYi5pbm5lckhUTUw9Ijx0ZXh0YXJlYT54PC90ZXh0YXJlYT4iLG8ubm9DbG9uZUNoZWNrZWQ9ISFiLmNsb25lTm9kZSghMCkubGFzdENoaWxkLmRlZmF1bHRWYWx1ZX0oKTt2YXIgcmE9ZC5kb2N1bWVudEVsZW1lbnQsc2E9L15rZXkvLHRhPS9eKD86bW91c2V8cG9pbnRlcnxjb250ZXh0bWVudXxkcmFnfGRyb3ApfGNsaWNrLyx1YT0vXihbXi5dKikoPzpcLiguKyl8KS87ZnVuY3Rpb24gdmEoKXtyZXR1cm4hMH1mdW5jdGlvbiB3YSgpe3JldHVybiExfWZ1bmN0aW9uIHhhKCl7dHJ5e3JldHVybiBkLmFjdGl2ZUVsZW1lbnR9Y2F0Y2goYSl7fX1mdW5jdGlvbiB5YShhLGIsYyxkLGUsZil7dmFyIGcsaDtpZigib2JqZWN0Ij09dHlwZW9mIGIpeyJzdHJpbmciIT10eXBlb2YgYyYmKGQ9ZHx8YyxjPXZvaWQgMCk7Zm9yKGggaW4gYil5YShhLGgsYyxkLGJbaF0sZik7cmV0dXJuIGF9aWYobnVsbD09ZCYmbnVsbD09ZT8oZT1jLGQ9Yz12b2lkIDApOm51bGw9PWUmJigic3RyaW5nIj09dHlwZW9mIGM/KGU9ZCxkPXZvaWQgMCk6KGU9ZCxkPWMsYz12b2lkIDApKSxlPT09ITEpZT13YTtlbHNlIGlmKCFlKXJldHVybiBhO3JldHVybiAxPT09ZiYmKGc9ZSxlPWZ1bmN0aW9uKGEpe3JldHVybiByKCkub2ZmKGEpLGcuYXBwbHkodGhpcyxhcmd1bWVudHMpfSxlLmd1aWQ9Zy5ndWlkfHwoZy5ndWlkPXIuZ3VpZCsrKSksYS5lYWNoKGZ1bmN0aW9uKCl7ci5ldmVudC5hZGQodGhpcyxiLGUsZCxjKX0pfXIuZXZlbnQ9e2dsb2JhbDp7fSxhZGQ6ZnVuY3Rpb24oYSxiLGMsZCxlKXt2YXIgZixnLGgsaSxqLGssbCxtLG4sbyxwLHE9Vy5nZXQoYSk7aWYocSl7Yy5oYW5kbGVyJiYoZj1jLGM9Zi5oYW5kbGVyLGU9Zi5zZWxlY3RvciksZSYmci5maW5kLm1hdGNoZXNTZWxlY3RvcihyYSxlKSxjLmd1aWR8fChjLmd1aWQ9ci5ndWlkKyspLChpPXEuZXZlbnRzKXx8KGk9cS5ldmVudHM9e30pLChnPXEuaGFuZGxlKXx8KGc9cS5oYW5kbGU9ZnVuY3Rpb24oYil7cmV0dXJuInVuZGVmaW5lZCIhPXR5cGVvZiByJiZyLmV2ZW50LnRyaWdnZXJlZCE9PWIudHlwZT9yLmV2ZW50LmRpc3BhdGNoLmFwcGx5KGEsYXJndW1lbnRzKTp2b2lkIDB9KSxiPShifHwiIikubWF0Y2goTCl8fFsiIl0saj1iLmxlbmd0aDt3aGlsZShqLS0paD11YS5leGVjKGJbal0pfHxbXSxuPXA9aFsxXSxvPShoWzJdfHwiIikuc3BsaXQoIi4iKS5zb3J0KCksbiYmKGw9ci5ldmVudC5zcGVjaWFsW25dfHx7fSxuPShlP2wuZGVsZWdhdGVUeXBlOmwuYmluZFR5cGUpfHxuLGw9ci5ldmVudC5zcGVjaWFsW25dfHx7fSxrPXIuZXh0ZW5kKHt0eXBlOm4sb3JpZ1R5cGU6cCxkYXRhOmQsaGFuZGxlcjpjLGd1aWQ6Yy5ndWlkLHNlbGVjdG9yOmUsbmVlZHNDb250ZXh0OmUmJnIuZXhwci5tYXRjaC5uZWVkc0NvbnRleHQudGVzdChlKSxuYW1lc3BhY2U6by5qb2luKCIuIil9LGYpLChtPWlbbl0pfHwobT1pW25dPVtdLG0uZGVsZWdhdGVDb3VudD0wLGwuc2V0dXAmJmwuc2V0dXAuY2FsbChhLGQsbyxnKSE9PSExfHxhLmFkZEV2ZW50TGlzdGVuZXImJmEuYWRkRXZlbnRMaXN0ZW5lcihuLGcpKSxsLmFkZCYmKGwuYWRkLmNhbGwoYSxrKSxrLmhhbmRsZXIuZ3VpZHx8KGsuaGFuZGxlci5ndWlkPWMuZ3VpZCkpLGU/bS5zcGxpY2UobS5kZWxlZ2F0ZUNvdW50KyssMCxrKTptLnB1c2goayksci5ldmVudC5nbG9iYWxbbl09ITApfX0scmVtb3ZlOmZ1bmN0aW9uKGEsYixjLGQsZSl7dmFyIGYsZyxoLGksaixrLGwsbSxuLG8scCxxPVcuaGFzRGF0YShhKSYmVy5nZXQoYSk7aWYocSYmKGk9cS5ldmVudHMpKXtiPShifHwiIikubWF0Y2goTCl8fFsiIl0saj1iLmxlbmd0aDt3aGlsZShqLS0paWYoaD11YS5leGVjKGJbal0pfHxbXSxuPXA9aFsxXSxvPShoWzJdfHwiIikuc3BsaXQoIi4iKS5zb3J0KCksbil7bD1yLmV2ZW50LnNwZWNpYWxbbl18fHt9LG49KGQ/bC5kZWxlZ2F0ZVR5cGU6bC5iaW5kVHlwZSl8fG4sbT1pW25dfHxbXSxoPWhbMl0mJm5ldyBSZWdFeHAoIihefFxcLikiK28uam9pbigiXFwuKD86LipcXC58KSIpKyIoXFwufCQpIiksZz1mPW0ubGVuZ3RoO3doaWxlKGYtLSlrPW1bZl0sIWUmJnAhPT1rLm9yaWdUeXBlfHxjJiZjLmd1aWQhPT1rLmd1aWR8fGgmJiFoLnRlc3Qoay5uYW1lc3BhY2UpfHxkJiZkIT09ay5zZWxlY3RvciYmKCIqKiIhPT1kfHwhay5zZWxlY3Rvcil8fChtLnNwbGljZShmLDEpLGsuc2VsZWN0b3ImJm0uZGVsZWdhdGVDb3VudC0tLGwucmVtb3ZlJiZsLnJlbW92ZS5jYWxsKGEsaykpO2cmJiFtLmxlbmd0aCYmKGwudGVhcmRvd24mJmwudGVhcmRvd24uY2FsbChhLG8scS5oYW5kbGUpIT09ITF8fHIucmVtb3ZlRXZlbnQoYSxuLHEuaGFuZGxlKSxkZWxldGUgaVtuXSl9ZWxzZSBmb3IobiBpbiBpKXIuZXZlbnQucmVtb3ZlKGEsbitiW2pdLGMsZCwhMCk7ci5pc0VtcHR5T2JqZWN0KGkpJiZXLnJlbW92ZShhLCJoYW5kbGUgZXZlbnRzIil9fSxkaXNwYXRjaDpmdW5jdGlvbihhKXt2YXIgYj1yLmV2ZW50LmZpeChhKSxjLGQsZSxmLGcsaCxpPW5ldyBBcnJheShhcmd1bWVudHMubGVuZ3RoKSxqPShXLmdldCh0aGlzLCJldmVudHMiKXx8e30pW2IudHlwZV18fFtdLGs9ci5ldmVudC5zcGVjaWFsW2IudHlwZV18fHt9O2ZvcihpWzBdPWIsYz0xO2M8YXJndW1lbnRzLmxlbmd0aDtjKyspaVtjXT1hcmd1bWVudHNbY107aWYoYi5kZWxlZ2F0ZVRhcmdldD10aGlzLCFrLnByZURpc3BhdGNofHxrLnByZURpc3BhdGNoLmNhbGwodGhpcyxiKSE9PSExKXtoPXIuZXZlbnQuaGFuZGxlcnMuY2FsbCh0aGlzLGIsaiksYz0wO3doaWxlKChmPWhbYysrXSkmJiFiLmlzUHJvcGFnYXRpb25TdG9wcGVkKCkpe2IuY3VycmVudFRhcmdldD1mLmVsZW0sZD0wO3doaWxlKChnPWYuaGFuZGxlcnNbZCsrXSkmJiFiLmlzSW1tZWRpYXRlUHJvcGFnYXRpb25TdG9wcGVkKCkpYi5ybmFtZXNwYWNlJiYhYi5ybmFtZXNwYWNlLnRlc3QoZy5uYW1lc3BhY2UpfHwoYi5oYW5kbGVPYmo9ZyxiLmRhdGE9Zy5kYXRhLGU9KChyLmV2ZW50LnNwZWNpYWxbZy5vcmlnVHlwZV18fHt9KS5oYW5kbGV8fGcuaGFuZGxlcikuYXBwbHkoZi5lbGVtLGkpLHZvaWQgMCE9PWUmJihiLnJlc3VsdD1lKT09PSExJiYoYi5wcmV2ZW50RGVmYXVsdCgpLGIuc3RvcFByb3BhZ2F0aW9uKCkpKX1yZXR1cm4gay5wb3N0RGlzcGF0Y2gmJmsucG9zdERpc3BhdGNoLmNhbGwodGhpcyxiKSxiLnJlc3VsdH19LGhhbmRsZXJzOmZ1bmN0aW9uKGEsYil7dmFyIGMsZCxlLGYsZyxoPVtdLGk9Yi5kZWxlZ2F0ZUNvdW50LGo9YS50YXJnZXQ7aWYoaSYmai5ub2RlVHlwZSYmISgiY2xpY2siPT09YS50eXBlJiZhLmJ1dHRvbj49MSkpZm9yKDtqIT09dGhpcztqPWoucGFyZW50Tm9kZXx8dGhpcylpZigxPT09ai5ub2RlVHlwZSYmKCJjbGljayIhPT1hLnR5cGV8fGouZGlzYWJsZWQhPT0hMCkpe2ZvcihmPVtdLGc9e30sYz0wO2M8aTtjKyspZD1iW2NdLGU9ZC5zZWxlY3RvcisiICIsdm9pZCAwPT09Z1tlXSYmKGdbZV09ZC5uZWVkc0NvbnRleHQ/cihlLHRoaXMpLmluZGV4KGopPi0xOnIuZmluZChlLHRoaXMsbnVsbCxbal0pLmxlbmd0aCksZ1tlXSYmZi5wdXNoKGQpO2YubGVuZ3RoJiZoLnB1c2goe2VsZW06aixoYW5kbGVyczpmfSl9cmV0dXJuIGo9dGhpcyxpPGIubGVuZ3RoJiZoLnB1c2goe2VsZW06aixoYW5kbGVyczpiLnNsaWNlKGkpfSksaH0sYWRkUHJvcDpmdW5jdGlvbihhLGIpe09iamVjdC5kZWZpbmVQcm9wZXJ0eShyLkV2ZW50LnByb3RvdHlwZSxhLHtlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMCxnZXQ6ci5pc0Z1bmN0aW9uKGIpP2Z1bmN0aW9uKCl7aWYodGhpcy5vcmlnaW5hbEV2ZW50KXJldHVybiBiKHRoaXMub3JpZ2luYWxFdmVudCl9OmZ1bmN0aW9uKCl7aWYodGhpcy5vcmlnaW5hbEV2ZW50KXJldHVybiB0aGlzLm9yaWdpbmFsRXZlbnRbYV19LHNldDpmdW5jdGlvbihiKXtPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcyxhLHtlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMCx2YWx1ZTpifSl9fSl9LGZpeDpmdW5jdGlvbihhKXtyZXR1cm4gYVtyLmV4cGFuZG9dP2E6bmV3IHIuRXZlbnQoYSl9LHNwZWNpYWw6e2xvYWQ6e25vQnViYmxlOiEwfSxmb2N1czp7dHJpZ2dlcjpmdW5jdGlvbigpe2lmKHRoaXMhPT14YSgpJiZ0aGlzLmZvY3VzKXJldHVybiB0aGlzLmZvY3VzKCksITF9LGRlbGVnYXRlVHlwZToiZm9jdXNpbiJ9LGJsdXI6e3RyaWdnZXI6ZnVuY3Rpb24oKXtpZih0aGlzPT09eGEoKSYmdGhpcy5ibHVyKXJldHVybiB0aGlzLmJsdXIoKSwhMX0sZGVsZWdhdGVUeXBlOiJmb2N1c291dCJ9LGNsaWNrOnt0cmlnZ2VyOmZ1bmN0aW9uKCl7aWYoImNoZWNrYm94Ij09PXRoaXMudHlwZSYmdGhpcy5jbGljayYmQih0aGlzLCJpbnB1dCIpKXJldHVybiB0aGlzLmNsaWNrKCksITF9LF9kZWZhdWx0OmZ1bmN0aW9uKGEpe3JldHVybiBCKGEudGFyZ2V0LCJhIil9fSxiZWZvcmV1bmxvYWQ6e3Bvc3REaXNwYXRjaDpmdW5jdGlvbihhKXt2b2lkIDAhPT1hLnJlc3VsdCYmYS5vcmlnaW5hbEV2ZW50JiYoYS5vcmlnaW5hbEV2ZW50LnJldHVyblZhbHVlPWEucmVzdWx0KX19fX0sci5yZW1vdmVFdmVudD1mdW5jdGlvbihhLGIsYyl7YS5yZW1vdmVFdmVudExpc3RlbmVyJiZhLnJlbW92ZUV2ZW50TGlzdGVuZXIoYixjKX0sci5FdmVudD1mdW5jdGlvbihhLGIpe3JldHVybiB0aGlzIGluc3RhbmNlb2Ygci5FdmVudD8oYSYmYS50eXBlPyh0aGlzLm9yaWdpbmFsRXZlbnQ9YSx0aGlzLnR5cGU9YS50eXBlLHRoaXMuaXNEZWZhdWx0UHJldmVudGVkPWEuZGVmYXVsdFByZXZlbnRlZHx8dm9pZCAwPT09YS5kZWZhdWx0UHJldmVudGVkJiZhLnJldHVyblZhbHVlPT09ITE/dmE6d2EsdGhpcy50YXJnZXQ9YS50YXJnZXQmJjM9PT1hLnRhcmdldC5ub2RlVHlwZT9hLnRhcmdldC5wYXJlbnROb2RlOmEudGFyZ2V0LHRoaXMuY3VycmVudFRhcmdldD1hLmN1cnJlbnRUYXJnZXQsdGhpcy5yZWxhdGVkVGFyZ2V0PWEucmVsYXRlZFRhcmdldCk6dGhpcy50eXBlPWEsYiYmci5leHRlbmQodGhpcyxiKSx0aGlzLnRpbWVTdGFtcD1hJiZhLnRpbWVTdGFtcHx8ci5ub3coKSx2b2lkKHRoaXNbci5leHBhbmRvXT0hMCkpOm5ldyByLkV2ZW50KGEsYil9LHIuRXZlbnQucHJvdG90eXBlPXtjb25zdHJ1Y3RvcjpyLkV2ZW50LGlzRGVmYXVsdFByZXZlbnRlZDp3YSxpc1Byb3BhZ2F0aW9uU3RvcHBlZDp3YSxpc0ltbWVkaWF0ZVByb3BhZ2F0aW9uU3RvcHBlZDp3YSxpc1NpbXVsYXRlZDohMSxwcmV2ZW50RGVmYXVsdDpmdW5jdGlvbigpe3ZhciBhPXRoaXMub3JpZ2luYWxFdmVudDt0aGlzLmlzRGVmYXVsdFByZXZlbnRlZD12YSxhJiYhdGhpcy5pc1NpbXVsYXRlZCYmYS5wcmV2ZW50RGVmYXVsdCgpfSxzdG9wUHJvcGFnYXRpb246ZnVuY3Rpb24oKXt2YXIgYT10aGlzLm9yaWdpbmFsRXZlbnQ7dGhpcy5pc1Byb3BhZ2F0aW9uU3RvcHBlZD12YSxhJiYhdGhpcy5pc1NpbXVsYXRlZCYmYS5zdG9wUHJvcGFnYXRpb24oKX0sc3RvcEltbWVkaWF0ZVByb3BhZ2F0aW9uOmZ1bmN0aW9uKCl7dmFyIGE9dGhpcy5vcmlnaW5hbEV2ZW50O3RoaXMuaXNJbW1lZGlhdGVQcm9wYWdhdGlvblN0b3BwZWQ9dmEsYSYmIXRoaXMuaXNTaW11bGF0ZWQmJmEuc3RvcEltbWVkaWF0ZVByb3BhZ2F0aW9uKCksdGhpcy5zdG9wUHJvcGFnYXRpb24oKX19LHIuZWFjaCh7YWx0S2V5OiEwLGJ1YmJsZXM6ITAsY2FuY2VsYWJsZTohMCxjaGFuZ2VkVG91Y2hlczohMCxjdHJsS2V5OiEwLGRldGFpbDohMCxldmVudFBoYXNlOiEwLG1ldGFLZXk6ITAscGFnZVg6ITAscGFnZVk6ITAsc2hpZnRLZXk6ITAsdmlldzohMCwiY2hhciI6ITAsY2hhckNvZGU6ITAsa2V5OiEwLGtleUNvZGU6ITAsYnV0dG9uOiEwLGJ1dHRvbnM6ITAsY2xpZW50WDohMCxjbGllbnRZOiEwLG9mZnNldFg6ITAsb2Zmc2V0WTohMCxwb2ludGVySWQ6ITAscG9pbnRlclR5cGU6ITAsc2NyZWVuWDohMCxzY3JlZW5ZOiEwLHRhcmdldFRvdWNoZXM6ITAsdG9FbGVtZW50OiEwLHRvdWNoZXM6ITAsd2hpY2g6ZnVuY3Rpb24oYSl7dmFyIGI9YS5idXR0b247cmV0dXJuIG51bGw9PWEud2hpY2gmJnNhLnRlc3QoYS50eXBlKT9udWxsIT1hLmNoYXJDb2RlP2EuY2hhckNvZGU6YS5rZXlDb2RlOiFhLndoaWNoJiZ2b2lkIDAhPT1iJiZ0YS50ZXN0KGEudHlwZSk/MSZiPzE6MiZiPzM6NCZiPzI6MDphLndoaWNofX0sci5ldmVudC5hZGRQcm9wKSxyLmVhY2goe21vdXNlZW50ZXI6Im1vdXNlb3ZlciIsbW91c2VsZWF2ZToibW91c2VvdXQiLHBvaW50ZXJlbnRlcjoicG9pbnRlcm92ZXIiLHBvaW50ZXJsZWF2ZToicG9pbnRlcm91dCJ9LGZ1bmN0aW9uKGEsYil7ci5ldmVudC5zcGVjaWFsW2FdPXtkZWxlZ2F0ZVR5cGU6YixiaW5kVHlwZTpiLGhhbmRsZTpmdW5jdGlvbihhKXt2YXIgYyxkPXRoaXMsZT1hLnJlbGF0ZWRUYXJnZXQsZj1hLmhhbmRsZU9iajtyZXR1cm4gZSYmKGU9PT1kfHxyLmNvbnRhaW5zKGQsZSkpfHwoYS50eXBlPWYub3JpZ1R5cGUsYz1mLmhhbmRsZXIuYXBwbHkodGhpcyxhcmd1bWVudHMpLGEudHlwZT1iKSxjfX19KSxyLmZuLmV4dGVuZCh7b246ZnVuY3Rpb24oYSxiLGMsZCl7cmV0dXJuIHlhKHRoaXMsYSxiLGMsZCl9LG9uZTpmdW5jdGlvbihhLGIsYyxkKXtyZXR1cm4geWEodGhpcyxhLGIsYyxkLDEpfSxvZmY6ZnVuY3Rpb24oYSxiLGMpe3ZhciBkLGU7aWYoYSYmYS5wcmV2ZW50RGVmYXVsdCYmYS5oYW5kbGVPYmopcmV0dXJuIGQ9YS5oYW5kbGVPYmoscihhLmRlbGVnYXRlVGFyZ2V0KS5vZmYoZC5uYW1lc3BhY2U/ZC5vcmlnVHlwZSsiLiIrZC5uYW1lc3BhY2U6ZC5vcmlnVHlwZSxkLnNlbGVjdG9yLGQuaGFuZGxlciksdGhpcztpZigib2JqZWN0Ij09dHlwZW9mIGEpe2ZvcihlIGluIGEpdGhpcy5vZmYoZSxiLGFbZV0pO3JldHVybiB0aGlzfXJldHVybiBiIT09ITEmJiJmdW5jdGlvbiIhPXR5cGVvZiBifHwoYz1iLGI9dm9pZCAwKSxjPT09ITEmJihjPXdhKSx0aGlzLmVhY2goZnVuY3Rpb24oKXtyLmV2ZW50LnJlbW92ZSh0aGlzLGEsYyxiKX0pfX0pO3ZhciB6YT0vPCg/IWFyZWF8YnJ8Y29sfGVtYmVkfGhyfGltZ3xpbnB1dHxsaW5rfG1ldGF8cGFyYW0pKChbYS16XVteXC9cMD5ceDIwXHRcclxuXGZdKilbXj5dKilcLz4vZ2ksQWE9LzxzY3JpcHR8PHN0eWxlfDxsaW5rL2ksQmE9L2NoZWNrZWRccyooPzpbXj1dfD1ccyouY2hlY2tlZC4pL2ksQ2E9L150cnVlXC8oLiopLyxEYT0vXlxzKjwhKD86XFtDREFUQVxbfC0tKXwoPzpcXVxdfC0tKT5ccyokL2c7ZnVuY3Rpb24gRWEoYSxiKXtyZXR1cm4gQihhLCJ0YWJsZSIpJiZCKDExIT09Yi5ub2RlVHlwZT9iOmIuZmlyc3RDaGlsZCwidHIiKT9yKCI+dGJvZHkiLGEpWzBdfHxhOmF9ZnVuY3Rpb24gRmEoYSl7cmV0dXJuIGEudHlwZT0obnVsbCE9PWEuZ2V0QXR0cmlidXRlKCJ0eXBlIikpKyIvIithLnR5cGUsYX1mdW5jdGlvbiBHYShhKXt2YXIgYj1DYS5leGVjKGEudHlwZSk7cmV0dXJuIGI/YS50eXBlPWJbMV06YS5yZW1vdmVBdHRyaWJ1dGUoInR5cGUiKSxhfWZ1bmN0aW9uIEhhKGEsYil7dmFyIGMsZCxlLGYsZyxoLGksajtpZigxPT09Yi5ub2RlVHlwZSl7aWYoVy5oYXNEYXRhKGEpJiYoZj1XLmFjY2VzcyhhKSxnPVcuc2V0KGIsZiksaj1mLmV2ZW50cykpe2RlbGV0ZSBnLmhhbmRsZSxnLmV2ZW50cz17fTtmb3IoZSBpbiBqKWZvcihjPTAsZD1qW2VdLmxlbmd0aDtjPGQ7YysrKXIuZXZlbnQuYWRkKGIsZSxqW2VdW2NdKX1YLmhhc0RhdGEoYSkmJihoPVguYWNjZXNzKGEpLGk9ci5leHRlbmQoe30saCksWC5zZXQoYixpKSl9fWZ1bmN0aW9uIElhKGEsYil7dmFyIGM9Yi5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpOyJpbnB1dCI9PT1jJiZqYS50ZXN0KGEudHlwZSk/Yi5jaGVja2VkPWEuY2hlY2tlZDoiaW5wdXQiIT09YyYmInRleHRhcmVhIiE9PWN8fChiLmRlZmF1bHRWYWx1ZT1hLmRlZmF1bHRWYWx1ZSl9ZnVuY3Rpb24gSmEoYSxiLGMsZCl7Yj1nLmFwcGx5KFtdLGIpO3ZhciBlLGYsaCxpLGosayxsPTAsbT1hLmxlbmd0aCxuPW0tMSxxPWJbMF0scz1yLmlzRnVuY3Rpb24ocSk7aWYoc3x8bT4xJiYic3RyaW5nIj09dHlwZW9mIHEmJiFvLmNoZWNrQ2xvbmUmJkJhLnRlc3QocSkpcmV0dXJuIGEuZWFjaChmdW5jdGlvbihlKXt2YXIgZj1hLmVxKGUpO3MmJihiWzBdPXEuY2FsbCh0aGlzLGUsZi5odG1sKCkpKSxKYShmLGIsYyxkKX0pO2lmKG0mJihlPXFhKGIsYVswXS5vd25lckRvY3VtZW50LCExLGEsZCksZj1lLmZpcnN0Q2hpbGQsMT09PWUuY2hpbGROb2Rlcy5sZW5ndGgmJihlPWYpLGZ8fGQpKXtmb3IoaD1yLm1hcChuYShlLCJzY3JpcHQiKSxGYSksaT1oLmxlbmd0aDtsPG07bCsrKWo9ZSxsIT09biYmKGo9ci5jbG9uZShqLCEwLCEwKSxpJiZyLm1lcmdlKGgsbmEoaiwic2NyaXB0IikpKSxjLmNhbGwoYVtsXSxqLGwpO2lmKGkpZm9yKGs9aFtoLmxlbmd0aC0xXS5vd25lckRvY3VtZW50LHIubWFwKGgsR2EpLGw9MDtsPGk7bCsrKWo9aFtsXSxsYS50ZXN0KGoudHlwZXx8IiIpJiYhVy5hY2Nlc3MoaiwiZ2xvYmFsRXZhbCIpJiZyLmNvbnRhaW5zKGssaikmJihqLnNyYz9yLl9ldmFsVXJsJiZyLl9ldmFsVXJsKGouc3JjKTpwKGoudGV4dENvbnRlbnQucmVwbGFjZShEYSwiIiksaykpfXJldHVybiBhfWZ1bmN0aW9uIEthKGEsYixjKXtmb3IodmFyIGQsZT1iP3IuZmlsdGVyKGIsYSk6YSxmPTA7bnVsbCE9KGQ9ZVtmXSk7ZisrKWN8fDEhPT1kLm5vZGVUeXBlfHxyLmNsZWFuRGF0YShuYShkKSksZC5wYXJlbnROb2RlJiYoYyYmci5jb250YWlucyhkLm93bmVyRG9jdW1lbnQsZCkmJm9hKG5hKGQsInNjcmlwdCIpKSxkLnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQoZCkpO3JldHVybiBhfXIuZXh0ZW5kKHtodG1sUHJlZmlsdGVyOmZ1bmN0aW9uKGEpe3JldHVybiBhLnJlcGxhY2UoemEsIjwkMT48LyQyPiIpfSxjbG9uZTpmdW5jdGlvbihhLGIsYyl7dmFyIGQsZSxmLGcsaD1hLmNsb25lTm9kZSghMCksaT1yLmNvbnRhaW5zKGEub3duZXJEb2N1bWVudCxhKTtpZighKG8ubm9DbG9uZUNoZWNrZWR8fDEhPT1hLm5vZGVUeXBlJiYxMSE9PWEubm9kZVR5cGV8fHIuaXNYTUxEb2MoYSkpKWZvcihnPW5hKGgpLGY9bmEoYSksZD0wLGU9Zi5sZW5ndGg7ZDxlO2QrKylJYShmW2RdLGdbZF0pO2lmKGIpaWYoYylmb3IoZj1mfHxuYShhKSxnPWd8fG5hKGgpLGQ9MCxlPWYubGVuZ3RoO2Q8ZTtkKyspSGEoZltkXSxnW2RdKTtlbHNlIEhhKGEsaCk7cmV0dXJuIGc9bmEoaCwic2NyaXB0IiksZy5sZW5ndGg+MCYmb2EoZywhaSYmbmEoYSwic2NyaXB0IikpLGh9LGNsZWFuRGF0YTpmdW5jdGlvbihhKXtmb3IodmFyIGIsYyxkLGU9ci5ldmVudC5zcGVjaWFsLGY9MDt2b2lkIDAhPT0oYz1hW2ZdKTtmKyspaWYoVShjKSl7aWYoYj1jW1cuZXhwYW5kb10pe2lmKGIuZXZlbnRzKWZvcihkIGluIGIuZXZlbnRzKWVbZF0/ci5ldmVudC5yZW1vdmUoYyxkKTpyLnJlbW92ZUV2ZW50KGMsZCxiLmhhbmRsZSk7Y1tXLmV4cGFuZG9dPXZvaWQgMH1jW1guZXhwYW5kb10mJihjW1guZXhwYW5kb109dm9pZCAwKX19fSksci5mbi5leHRlbmQoe2RldGFjaDpmdW5jdGlvbihhKXtyZXR1cm4gS2EodGhpcyxhLCEwKX0scmVtb3ZlOmZ1bmN0aW9uKGEpe3JldHVybiBLYSh0aGlzLGEpfSx0ZXh0OmZ1bmN0aW9uKGEpe3JldHVybiBUKHRoaXMsZnVuY3Rpb24oYSl7cmV0dXJuIHZvaWQgMD09PWE/ci50ZXh0KHRoaXMpOnRoaXMuZW1wdHkoKS5lYWNoKGZ1bmN0aW9uKCl7MSE9PXRoaXMubm9kZVR5cGUmJjExIT09dGhpcy5ub2RlVHlwZSYmOSE9PXRoaXMubm9kZVR5cGV8fCh0aGlzLnRleHRDb250ZW50PWEpfSl9LG51bGwsYSxhcmd1bWVudHMubGVuZ3RoKX0sYXBwZW5kOmZ1bmN0aW9uKCl7cmV0dXJuIEphKHRoaXMsYXJndW1lbnRzLGZ1bmN0aW9uKGEpe2lmKDE9PT10aGlzLm5vZGVUeXBlfHwxMT09PXRoaXMubm9kZVR5cGV8fDk9PT10aGlzLm5vZGVUeXBlKXt2YXIgYj1FYSh0aGlzLGEpO2IuYXBwZW5kQ2hpbGQoYSl9fSl9LHByZXBlbmQ6ZnVuY3Rpb24oKXtyZXR1cm4gSmEodGhpcyxhcmd1bWVudHMsZnVuY3Rpb24oYSl7aWYoMT09PXRoaXMubm9kZVR5cGV8fDExPT09dGhpcy5ub2RlVHlwZXx8OT09PXRoaXMubm9kZVR5cGUpe3ZhciBiPUVhKHRoaXMsYSk7Yi5pbnNlcnRCZWZvcmUoYSxiLmZpcnN0Q2hpbGQpfX0pfSxiZWZvcmU6ZnVuY3Rpb24oKXtyZXR1cm4gSmEodGhpcyxhcmd1bWVudHMsZnVuY3Rpb24oYSl7dGhpcy5wYXJlbnROb2RlJiZ0aGlzLnBhcmVudE5vZGUuaW5zZXJ0QmVmb3JlKGEsdGhpcyl9KX0sYWZ0ZXI6ZnVuY3Rpb24oKXtyZXR1cm4gSmEodGhpcyxhcmd1bWVudHMsZnVuY3Rpb24oYSl7dGhpcy5wYXJlbnROb2RlJiZ0aGlzLnBhcmVudE5vZGUuaW5zZXJ0QmVmb3JlKGEsdGhpcy5uZXh0U2libGluZyl9KX0sZW1wdHk6ZnVuY3Rpb24oKXtmb3IodmFyIGEsYj0wO251bGwhPShhPXRoaXNbYl0pO2IrKykxPT09YS5ub2RlVHlwZSYmKHIuY2xlYW5EYXRhKG5hKGEsITEpKSxhLnRleHRDb250ZW50PSIiKTtyZXR1cm4gdGhpc30sY2xvbmU6ZnVuY3Rpb24oYSxiKXtyZXR1cm4gYT1udWxsIT1hJiZhLGI9bnVsbD09Yj9hOmIsdGhpcy5tYXAoZnVuY3Rpb24oKXtyZXR1cm4gci5jbG9uZSh0aGlzLGEsYil9KX0saHRtbDpmdW5jdGlvbihhKXtyZXR1cm4gVCh0aGlzLGZ1bmN0aW9uKGEpe3ZhciBiPXRoaXNbMF18fHt9LGM9MCxkPXRoaXMubGVuZ3RoO2lmKHZvaWQgMD09PWEmJjE9PT1iLm5vZGVUeXBlKXJldHVybiBiLmlubmVySFRNTDtpZigic3RyaW5nIj09dHlwZW9mIGEmJiFBYS50ZXN0KGEpJiYhbWFbKGthLmV4ZWMoYSl8fFsiIiwiIl0pWzFdLnRvTG93ZXJDYXNlKCldKXthPXIuaHRtbFByZWZpbHRlcihhKTt0cnl7Zm9yKDtjPGQ7YysrKWI9dGhpc1tjXXx8e30sMT09PWIubm9kZVR5cGUmJihyLmNsZWFuRGF0YShuYShiLCExKSksYi5pbm5lckhUTUw9YSk7Yj0wfWNhdGNoKGUpe319YiYmdGhpcy5lbXB0eSgpLmFwcGVuZChhKX0sbnVsbCxhLGFyZ3VtZW50cy5sZW5ndGgpfSxyZXBsYWNlV2l0aDpmdW5jdGlvbigpe3ZhciBhPVtdO3JldHVybiBKYSh0aGlzLGFyZ3VtZW50cyxmdW5jdGlvbihiKXt2YXIgYz10aGlzLnBhcmVudE5vZGU7ci5pbkFycmF5KHRoaXMsYSk8MCYmKHIuY2xlYW5EYXRhKG5hKHRoaXMpKSxjJiZjLnJlcGxhY2VDaGlsZChiLHRoaXMpKX0sYSl9fSksci5lYWNoKHthcHBlbmRUbzoiYXBwZW5kIixwcmVwZW5kVG86InByZXBlbmQiLGluc2VydEJlZm9yZToiYmVmb3JlIixpbnNlcnRBZnRlcjoiYWZ0ZXIiLHJlcGxhY2VBbGw6InJlcGxhY2VXaXRoIn0sZnVuY3Rpb24oYSxiKXtyLmZuW2FdPWZ1bmN0aW9uKGEpe2Zvcih2YXIgYyxkPVtdLGU9cihhKSxmPWUubGVuZ3RoLTEsZz0wO2c8PWY7ZysrKWM9Zz09PWY/dGhpczp0aGlzLmNsb25lKCEwKSxyKGVbZ10pW2JdKGMpLGguYXBwbHkoZCxjLmdldCgpKTtyZXR1cm4gdGhpcy5wdXNoU3RhY2soZCl9fSk7dmFyIExhPS9ebWFyZ2luLyxNYT1uZXcgUmVnRXhwKCJeKCIrYWErIikoPyFweClbYS16JV0rJCIsImkiKSxOYT1mdW5jdGlvbihiKXt2YXIgYz1iLm93bmVyRG9jdW1lbnQuZGVmYXVsdFZpZXc7cmV0dXJuIGMmJmMub3BlbmVyfHwoYz1hKSxjLmdldENvbXB1dGVkU3R5bGUoYil9OyFmdW5jdGlvbigpe2Z1bmN0aW9uIGIoKXtpZihpKXtpLnN0eWxlLmNzc1RleHQ9ImJveC1zaXppbmc6Ym9yZGVyLWJveDtwb3NpdGlvbjpyZWxhdGl2ZTtkaXNwbGF5OmJsb2NrO21hcmdpbjphdXRvO2JvcmRlcjoxcHg7cGFkZGluZzoxcHg7dG9wOjElO3dpZHRoOjUwJSIsaS5pbm5lckhUTUw9IiIscmEuYXBwZW5kQ2hpbGQoaCk7dmFyIGI9YS5nZXRDb21wdXRlZFN0eWxlKGkpO2M9IjElIiE9PWIudG9wLGc9IjJweCI9PT1iLm1hcmdpbkxlZnQsZT0iNHB4Ij09PWIud2lkdGgsaS5zdHlsZS5tYXJnaW5SaWdodD0iNTAlIixmPSI0cHgiPT09Yi5tYXJnaW5SaWdodCxyYS5yZW1vdmVDaGlsZChoKSxpPW51bGx9fXZhciBjLGUsZixnLGg9ZC5jcmVhdGVFbGVtZW50KCJkaXYiKSxpPWQuY3JlYXRlRWxlbWVudCgiZGl2Iik7aS5zdHlsZSYmKGkuc3R5bGUuYmFja2dyb3VuZENsaXA9ImNvbnRlbnQtYm94IixpLmNsb25lTm9kZSghMCkuc3R5bGUuYmFja2dyb3VuZENsaXA9IiIsby5jbGVhckNsb25lU3R5bGU9ImNvbnRlbnQtYm94Ij09PWkuc3R5bGUuYmFja2dyb3VuZENsaXAsaC5zdHlsZS5jc3NUZXh0PSJib3JkZXI6MDt3aWR0aDo4cHg7aGVpZ2h0OjA7dG9wOjA7bGVmdDotOTk5OXB4O3BhZGRpbmc6MDttYXJnaW4tdG9wOjFweDtwb3NpdGlvbjphYnNvbHV0ZSIsaC5hcHBlbmRDaGlsZChpKSxyLmV4dGVuZChvLHtwaXhlbFBvc2l0aW9uOmZ1bmN0aW9uKCl7cmV0dXJuIGIoKSxjfSxib3hTaXppbmdSZWxpYWJsZTpmdW5jdGlvbigpe3JldHVybiBiKCksZX0scGl4ZWxNYXJnaW5SaWdodDpmdW5jdGlvbigpe3JldHVybiBiKCksZn0scmVsaWFibGVNYXJnaW5MZWZ0OmZ1bmN0aW9uKCl7cmV0dXJuIGIoKSxnfX0pKX0oKTtmdW5jdGlvbiBPYShhLGIsYyl7dmFyIGQsZSxmLGcsaD1hLnN0eWxlO3JldHVybiBjPWN8fE5hKGEpLGMmJihnPWMuZ2V0UHJvcGVydHlWYWx1ZShiKXx8Y1tiXSwiIiE9PWd8fHIuY29udGFpbnMoYS5vd25lckRvY3VtZW50LGEpfHwoZz1yLnN0eWxlKGEsYikpLCFvLnBpeGVsTWFyZ2luUmlnaHQoKSYmTWEudGVzdChnKSYmTGEudGVzdChiKSYmKGQ9aC53aWR0aCxlPWgubWluV2lkdGgsZj1oLm1heFdpZHRoLGgubWluV2lkdGg9aC5tYXhXaWR0aD1oLndpZHRoPWcsZz1jLndpZHRoLGgud2lkdGg9ZCxoLm1pbldpZHRoPWUsaC5tYXhXaWR0aD1mKSksdm9pZCAwIT09Zz9nKyIiOmd9ZnVuY3Rpb24gUGEoYSxiKXtyZXR1cm57Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIGEoKT92b2lkIGRlbGV0ZSB0aGlzLmdldDoodGhpcy5nZXQ9YikuYXBwbHkodGhpcyxhcmd1bWVudHMpfX19dmFyIFFhPS9eKG5vbmV8dGFibGUoPyEtY1tlYV0pLispLyxSYT0vXi0tLyxTYT17cG9zaXRpb246ImFic29sdXRlIix2aXNpYmlsaXR5OiJoaWRkZW4iLGRpc3BsYXk6ImJsb2NrIn0sVGE9e2xldHRlclNwYWNpbmc6IjAiLGZvbnRXZWlnaHQ6IjQwMCJ9LFVhPVsiV2Via2l0IiwiTW96IiwibXMiXSxWYT1kLmNyZWF0ZUVsZW1lbnQoImRpdiIpLnN0eWxlO2Z1bmN0aW9uIFdhKGEpe2lmKGEgaW4gVmEpcmV0dXJuIGE7dmFyIGI9YVswXS50b1VwcGVyQ2FzZSgpK2Euc2xpY2UoMSksYz1VYS5sZW5ndGg7d2hpbGUoYy0tKWlmKGE9VWFbY10rYixhIGluIFZhKXJldHVybiBhfWZ1bmN0aW9uIFhhKGEpe3ZhciBiPXIuY3NzUHJvcHNbYV07cmV0dXJuIGJ8fChiPXIuY3NzUHJvcHNbYV09V2EoYSl8fGEpLGJ9ZnVuY3Rpb24gWWEoYSxiLGMpe3ZhciBkPWJhLmV4ZWMoYik7cmV0dXJuIGQ/TWF0aC5tYXgoMCxkWzJdLShjfHwwKSkrKGRbM118fCJweCIpOmJ9ZnVuY3Rpb24gWmEoYSxiLGMsZCxlKXt2YXIgZixnPTA7Zm9yKGY9Yz09PShkPyJib3JkZXIiOiJjb250ZW50Iik/NDoid2lkdGgiPT09Yj8xOjA7Zjw0O2YrPTIpIm1hcmdpbiI9PT1jJiYoZys9ci5jc3MoYSxjK2NhW2ZdLCEwLGUpKSxkPygiY29udGVudCI9PT1jJiYoZy09ci5jc3MoYSwicGFkZGluZyIrY2FbZl0sITAsZSkpLCJtYXJnaW4iIT09YyYmKGctPXIuY3NzKGEsImJvcmRlciIrY2FbZl0rIldpZHRoIiwhMCxlKSkpOihnKz1yLmNzcyhhLCJwYWRkaW5nIitjYVtmXSwhMCxlKSwicGFkZGluZyIhPT1jJiYoZys9ci5jc3MoYSwiYm9yZGVyIitjYVtmXSsiV2lkdGgiLCEwLGUpKSk7cmV0dXJuIGd9ZnVuY3Rpb24gJGEoYSxiLGMpe3ZhciBkLGU9TmEoYSksZj1PYShhLGIsZSksZz0iYm9yZGVyLWJveCI9PT1yLmNzcyhhLCJib3hTaXppbmciLCExLGUpO3JldHVybiBNYS50ZXN0KGYpP2Y6KGQ9ZyYmKG8uYm94U2l6aW5nUmVsaWFibGUoKXx8Zj09PWEuc3R5bGVbYl0pLCJhdXRvIj09PWYmJihmPWFbIm9mZnNldCIrYlswXS50b1VwcGVyQ2FzZSgpK2Iuc2xpY2UoMSldKSxmPXBhcnNlRmxvYXQoZil8fDAsZitaYShhLGIsY3x8KGc/ImJvcmRlciI6ImNvbnRlbnQiKSxkLGUpKyJweCIpfXIuZXh0ZW5kKHtjc3NIb29rczp7b3BhY2l0eTp7Z2V0OmZ1bmN0aW9uKGEsYil7aWYoYil7dmFyIGM9T2EoYSwib3BhY2l0eSIpO3JldHVybiIiPT09Yz8iMSI6Y319fX0sY3NzTnVtYmVyOnthbmltYXRpb25JdGVyYXRpb25Db3VudDohMCxjb2x1bW5Db3VudDohMCxmaWxsT3BhY2l0eTohMCxmbGV4R3JvdzohMCxmbGV4U2hyaW5rOiEwLGZvbnRXZWlnaHQ6ITAsbGluZUhlaWdodDohMCxvcGFjaXR5OiEwLG9yZGVyOiEwLG9ycGhhbnM6ITAsd2lkb3dzOiEwLHpJbmRleDohMCx6b29tOiEwfSxjc3NQcm9wczp7ImZsb2F0IjoiY3NzRmxvYXQifSxzdHlsZTpmdW5jdGlvbihhLGIsYyxkKXtpZihhJiYzIT09YS5ub2RlVHlwZSYmOCE9PWEubm9kZVR5cGUmJmEuc3R5bGUpe3ZhciBlLGYsZyxoPXIuY2FtZWxDYXNlKGIpLGk9UmEudGVzdChiKSxqPWEuc3R5bGU7cmV0dXJuIGl8fChiPVhhKGgpKSxnPXIuY3NzSG9va3NbYl18fHIuY3NzSG9va3NbaF0sdm9pZCAwPT09Yz9nJiYiZ2V0ImluIGcmJnZvaWQgMCE9PShlPWcuZ2V0KGEsITEsZCkpP2U6altiXTooZj10eXBlb2YgYywic3RyaW5nIj09PWYmJihlPWJhLmV4ZWMoYykpJiZlWzFdJiYoYz1mYShhLGIsZSksZj0ibnVtYmVyIiksbnVsbCE9YyYmYz09PWMmJigibnVtYmVyIj09PWYmJihjKz1lJiZlWzNdfHwoci5jc3NOdW1iZXJbaF0/IiI6InB4IikpLG8uY2xlYXJDbG9uZVN0eWxlfHwiIiE9PWN8fDAhPT1iLmluZGV4T2YoImJhY2tncm91bmQiKXx8KGpbYl09ImluaGVyaXQiKSxnJiYic2V0ImluIGcmJnZvaWQgMD09PShjPWcuc2V0KGEsYyxkKSl8fChpP2ouc2V0UHJvcGVydHkoYixjKTpqW2JdPWMpKSx2b2lkIDApfX0sY3NzOmZ1bmN0aW9uKGEsYixjLGQpe3ZhciBlLGYsZyxoPXIuY2FtZWxDYXNlKGIpLGk9UmEudGVzdChiKTtyZXR1cm4gaXx8KGI9WGEoaCkpLGc9ci5jc3NIb29rc1tiXXx8ci5jc3NIb29rc1toXSxnJiYiZ2V0ImluIGcmJihlPWcuZ2V0KGEsITAsYykpLHZvaWQgMD09PWUmJihlPU9hKGEsYixkKSksIm5vcm1hbCI9PT1lJiZiIGluIFRhJiYoZT1UYVtiXSksIiI9PT1jfHxjPyhmPXBhcnNlRmxvYXQoZSksYz09PSEwfHxpc0Zpbml0ZShmKT9mfHwwOmUpOmV9fSksci5lYWNoKFsiaGVpZ2h0Iiwid2lkdGgiXSxmdW5jdGlvbihhLGIpe3IuY3NzSG9va3NbYl09e2dldDpmdW5jdGlvbihhLGMsZCl7aWYoYylyZXR1cm4hUWEudGVzdChyLmNzcyhhLCJkaXNwbGF5IikpfHxhLmdldENsaWVudFJlY3RzKCkubGVuZ3RoJiZhLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLndpZHRoPyRhKGEsYixkKTplYShhLFNhLGZ1bmN0aW9uKCl7cmV0dXJuICRhKGEsYixkKX0pfSxzZXQ6ZnVuY3Rpb24oYSxjLGQpe3ZhciBlLGY9ZCYmTmEoYSksZz1kJiZaYShhLGIsZCwiYm9yZGVyLWJveCI9PT1yLmNzcyhhLCJib3hTaXppbmciLCExLGYpLGYpO3JldHVybiBnJiYoZT1iYS5leGVjKGMpKSYmInB4IiE9PShlWzNdfHwicHgiKSYmKGEuc3R5bGVbYl09YyxjPXIuY3NzKGEsYikpLFlhKGEsYyxnKX19fSksci5jc3NIb29rcy5tYXJnaW5MZWZ0PVBhKG8ucmVsaWFibGVNYXJnaW5MZWZ0LGZ1bmN0aW9uKGEsYil7aWYoYilyZXR1cm4ocGFyc2VGbG9hdChPYShhLCJtYXJnaW5MZWZ0IikpfHxhLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLmxlZnQtZWEoYSx7bWFyZ2luTGVmdDowfSxmdW5jdGlvbigpe3JldHVybiBhLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLmxlZnR9KSkrInB4In0pLHIuZWFjaCh7bWFyZ2luOiIiLHBhZGRpbmc6IiIsYm9yZGVyOiJXaWR0aCJ9LGZ1bmN0aW9uKGEsYil7ci5jc3NIb29rc1thK2JdPXtleHBhbmQ6ZnVuY3Rpb24oYyl7Zm9yKHZhciBkPTAsZT17fSxmPSJzdHJpbmciPT10eXBlb2YgYz9jLnNwbGl0KCIgIik6W2NdO2Q8NDtkKyspZVthK2NhW2RdK2JdPWZbZF18fGZbZC0yXXx8ZlswXTtyZXR1cm4gZX19LExhLnRlc3QoYSl8fChyLmNzc0hvb2tzW2ErYl0uc2V0PVlhKX0pLHIuZm4uZXh0ZW5kKHtjc3M6ZnVuY3Rpb24oYSxiKXtyZXR1cm4gVCh0aGlzLGZ1bmN0aW9uKGEsYixjKXt2YXIgZCxlLGY9e30sZz0wO2lmKEFycmF5LmlzQXJyYXkoYikpe2ZvcihkPU5hKGEpLGU9Yi5sZW5ndGg7ZzxlO2crKylmW2JbZ11dPXIuY3NzKGEsYltnXSwhMSxkKTtyZXR1cm4gZn1yZXR1cm4gdm9pZCAwIT09Yz9yLnN0eWxlKGEsYixjKTpyLmNzcyhhLGIpfSxhLGIsYXJndW1lbnRzLmxlbmd0aD4xKX19KSxyLmZuLmRlbGF5PWZ1bmN0aW9uKGIsYyl7cmV0dXJuIGI9ci5meD9yLmZ4LnNwZWVkc1tiXXx8YjpiLGM9Y3x8ImZ4Iix0aGlzLnF1ZXVlKGMsZnVuY3Rpb24oYyxkKXt2YXIgZT1hLnNldFRpbWVvdXQoYyxiKTtkLnN0b3A9ZnVuY3Rpb24oKXthLmNsZWFyVGltZW91dChlKX19KX0sZnVuY3Rpb24oKXt2YXIgYT1kLmNyZWF0ZUVsZW1lbnQoImlucHV0IiksYj1kLmNyZWF0ZUVsZW1lbnQoInNlbGVjdCIpLGM9Yi5hcHBlbmRDaGlsZChkLmNyZWF0ZUVsZW1lbnQoIm9wdGlvbiIpKTthLnR5cGU9ImNoZWNrYm94IixvLmNoZWNrT249IiIhPT1hLnZhbHVlLG8ub3B0U2VsZWN0ZWQ9Yy5zZWxlY3RlZCxhPWQuY3JlYXRlRWxlbWVudCgiaW5wdXQiKSxhLnZhbHVlPSJ0IixhLnR5cGU9InJhZGlvIixvLnJhZGlvVmFsdWU9InQiPT09YS52YWx1ZX0oKTt2YXIgX2EsYWI9ci5leHByLmF0dHJIYW5kbGU7ci5mbi5leHRlbmQoe2F0dHI6ZnVuY3Rpb24oYSxiKXtyZXR1cm4gVCh0aGlzLHIuYXR0cixhLGIsYXJndW1lbnRzLmxlbmd0aD4xKX0scmVtb3ZlQXR0cjpmdW5jdGlvbihhKXtyZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uKCl7ci5yZW1vdmVBdHRyKHRoaXMsYSl9KX19KSxyLmV4dGVuZCh7YXR0cjpmdW5jdGlvbihhLGIsYyl7dmFyIGQsZSxmPWEubm9kZVR5cGU7aWYoMyE9PWYmJjghPT1mJiYyIT09ZilyZXR1cm4idW5kZWZpbmVkIj09dHlwZW9mIGEuZ2V0QXR0cmlidXRlP3IucHJvcChhLGIsYyk6KDE9PT1mJiZyLmlzWE1MRG9jKGEpfHwoZT1yLmF0dHJIb29rc1tiLnRvTG93ZXJDYXNlKCldfHwoci5leHByLm1hdGNoLmJvb2wudGVzdChiKT9fYTp2b2lkIDApKSx2b2lkIDAhPT1jP251bGw9PT1jP3ZvaWQgci5yZW1vdmVBdHRyKGEsYik6ZSYmInNldCJpbiBlJiZ2b2lkIDAhPT0oZD1lLnNldChhLGMsYikpP2Q6KGEuc2V0QXR0cmlidXRlKGIsYysiIiksYyk6ZSYmImdldCJpbiBlJiZudWxsIT09KGQ9ZS5nZXQoYSxiKSk/ZDooZD1yLmZpbmQuYXR0cihhLGIpLG51bGw9PWQ/dm9pZCAwOmQpKX0sYXR0ckhvb2tzOnt0eXBlOntzZXQ6ZnVuY3Rpb24oYSxiKXtpZighby5yYWRpb1ZhbHVlJiYicmFkaW8iPT09YiYmQihhLCJpbnB1dCIpKXt2YXIgYz1hLnZhbHVlO3JldHVybiBhLnNldEF0dHJpYnV0ZSgidHlwZSIsYiksYyYmKGEudmFsdWU9YyksYn19fX0scmVtb3ZlQXR0cjpmdW5jdGlvbihhLGIpe3ZhciBjLGQ9MCxlPWImJmIubWF0Y2goTCk7aWYoZSYmMT09PWEubm9kZVR5cGUpd2hpbGUoYz1lW2QrK10pYS5yZW1vdmVBdHRyaWJ1dGUoYyl9fSksX2E9e3NldDpmdW5jdGlvbihhLGIsYyl7cmV0dXJuIGI9PT0hMT9yLnJlbW92ZUF0dHIoYSxjKTphLnNldEF0dHJpYnV0ZShjLGMpLGN9fSxyLmVhY2goci5leHByLm1hdGNoLmJvb2wuc291cmNlLm1hdGNoKC9cdysvZyksZnVuY3Rpb24oYSxiKXt2YXIgYz1hYltiXXx8ci5maW5kLmF0dHI7YWJbYl09ZnVuY3Rpb24oYSxiLGQpe3ZhciBlLGYsZz1iLnRvTG93ZXJDYXNlKCk7cmV0dXJuIGR8fChmPWFiW2ddLGFiW2ddPWUsZT1udWxsIT1jKGEsYixkKT9nOm51bGwsYWJbZ109ZiksZX19KTt2YXIgYmI9L14oPzppbnB1dHxzZWxlY3R8dGV4dGFyZWF8YnV0dG9uKSQvaSxjYj0vXig/OmF8YXJlYSkkL2k7ci5mbi5leHRlbmQoe3Byb3A6ZnVuY3Rpb24oYSxiKXtyZXR1cm4gVCh0aGlzLHIucHJvcCxhLGIsYXJndW1lbnRzLmxlbmd0aD4xKX0scmVtb3ZlUHJvcDpmdW5jdGlvbihhKXtyZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uKCl7ZGVsZXRlIHRoaXNbci5wcm9wRml4W2FdfHxhXX0pfX0pLHIuZXh0ZW5kKHtwcm9wOmZ1bmN0aW9uKGEsYixjKXt2YXIgZCxlLGY9YS5ub2RlVHlwZTtpZigzIT09ZiYmOCE9PWYmJjIhPT1mKXJldHVybiAxPT09ZiYmci5pc1hNTERvYyhhKXx8KGI9ci5wcm9wRml4W2JdfHxiLGU9ci5wcm9wSG9va3NbYl0pLHZvaWQgMCE9PWM/ZSYmInNldCJpbiBlJiZ2b2lkIDAhPT0oZD1lLnNldChhLGMsYikpP2Q6YVtiXT1jOmUmJiJnZXQiaW4gZSYmbnVsbCE9PShkPWUuZ2V0KGEsYikpP2Q6YVtiXX0scHJvcEhvb2tzOnt0YWJJbmRleDp7Z2V0OmZ1bmN0aW9uKGEpe3ZhciBiPXIuZmluZC5hdHRyKGEsInRhYmluZGV4Iik7cmV0dXJuIGI/cGFyc2VJbnQoYiwxMCk6YmIudGVzdChhLm5vZGVOYW1lKXx8Y2IudGVzdChhLm5vZGVOYW1lKSYmYS5ocmVmPzA6LTF9fX0scHJvcEZpeDp7ImZvciI6Imh0bWxGb3IiLCJjbGFzcyI6ImNsYXNzTmFtZSJ9fSksby5vcHRTZWxlY3RlZHx8KHIucHJvcEhvb2tzLnNlbGVjdGVkPXtnZXQ6ZnVuY3Rpb24oYSl7dmFyIGI9YS5wYXJlbnROb2RlO3JldHVybiBiJiZiLnBhcmVudE5vZGUmJmIucGFyZW50Tm9kZS5zZWxlY3RlZEluZGV4LG51bGx9LHNldDpmdW5jdGlvbihhKXt2YXIgYj1hLnBhcmVudE5vZGU7YiYmKGIuc2VsZWN0ZWRJbmRleCxiLnBhcmVudE5vZGUmJmIucGFyZW50Tm9kZS5zZWxlY3RlZEluZGV4KX19KSxyLmVhY2goWyJ0YWJJbmRleCIsInJlYWRPbmx5IiwibWF4TGVuZ3RoIiwiY2VsbFNwYWNpbmciLCJjZWxsUGFkZGluZyIsInJvd1NwYW4iLCJjb2xTcGFuIiwidXNlTWFwIiwiZnJhbWVCb3JkZXIiLCJjb250ZW50RWRpdGFibGUiXSxmdW5jdGlvbigpe3IucHJvcEZpeFt0aGlzLnRvTG93ZXJDYXNlKCldPXRoaXN9KTtmdW5jdGlvbiBkYihhKXt2YXIgYj1hLm1hdGNoKEwpfHxbXTtyZXR1cm4gYi5qb2luKCIgIil9ZnVuY3Rpb24gZWIoYSl7cmV0dXJuIGEuZ2V0QXR0cmlidXRlJiZhLmdldEF0dHJpYnV0ZSgiY2xhc3MiKXx8IiJ9ci5mbi5leHRlbmQoe2FkZENsYXNzOmZ1bmN0aW9uKGEpe3ZhciBiLGMsZCxlLGYsZyxoLGk9MDtpZihyLmlzRnVuY3Rpb24oYSkpcmV0dXJuIHRoaXMuZWFjaChmdW5jdGlvbihiKXtyKHRoaXMpLmFkZENsYXNzKGEuY2FsbCh0aGlzLGIsZWIodGhpcykpKX0pO2lmKCJzdHJpbmciPT10eXBlb2YgYSYmYSl7Yj1hLm1hdGNoKEwpfHxbXTt3aGlsZShjPXRoaXNbaSsrXSlpZihlPWViKGMpLGQ9MT09PWMubm9kZVR5cGUmJiIgIitkYihlKSsiICIpe2c9MDt3aGlsZShmPWJbZysrXSlkLmluZGV4T2YoIiAiK2YrIiAiKTwwJiYoZCs9ZisiICIpO2g9ZGIoZCksZSE9PWgmJmMuc2V0QXR0cmlidXRlKCJjbGFzcyIsaCl9fXJldHVybiB0aGlzfSxyZW1vdmVDbGFzczpmdW5jdGlvbihhKXt2YXIgYixjLGQsZSxmLGcsaCxpPTA7aWYoci5pc0Z1bmN0aW9uKGEpKXJldHVybiB0aGlzLmVhY2goZnVuY3Rpb24oYil7cih0aGlzKS5yZW1vdmVDbGFzcyhhLmNhbGwodGhpcyxiLGViKHRoaXMpKSl9KTtpZighYXJndW1lbnRzLmxlbmd0aClyZXR1cm4gdGhpcy5hdHRyKCJjbGFzcyIsIiIpO2lmKCJzdHJpbmciPT10eXBlb2YgYSYmYSl7Yj1hLm1hdGNoKEwpfHxbXTt3aGlsZShjPXRoaXNbaSsrXSlpZihlPWViKGMpLGQ9MT09PWMubm9kZVR5cGUmJiIgIitkYihlKSsiICIpe2c9MDt3aGlsZShmPWJbZysrXSl3aGlsZShkLmluZGV4T2YoIiAiK2YrIiAiKT4tMSlkPWQucmVwbGFjZSgiICIrZisiICIsIiAiKTtoPWRiKGQpLGUhPT1oJiZjLnNldEF0dHJpYnV0ZSgiY2xhc3MiLGgpfX1yZXR1cm4gdGhpc30sdG9nZ2xlQ2xhc3M6ZnVuY3Rpb24oYSxiKXt2YXIgYz10eXBlb2YgYTtyZXR1cm4iYm9vbGVhbiI9PXR5cGVvZiBiJiYic3RyaW5nIj09PWM/Yj90aGlzLmFkZENsYXNzKGEpOnRoaXMucmVtb3ZlQ2xhc3MoYSk6ci5pc0Z1bmN0aW9uKGEpP3RoaXMuZWFjaChmdW5jdGlvbihjKXtyKHRoaXMpLnRvZ2dsZUNsYXNzKGEuY2FsbCh0aGlzLGMsZWIodGhpcyksYiksYil9KTp0aGlzLmVhY2goZnVuY3Rpb24oKXt2YXIgYixkLGUsZjtpZigic3RyaW5nIj09PWMpe2Q9MCxlPXIodGhpcyksZj1hLm1hdGNoKEwpfHxbXTt3aGlsZShiPWZbZCsrXSllLmhhc0NsYXNzKGIpP2UucmVtb3ZlQ2xhc3MoYik6ZS5hZGRDbGFzcyhiKX1lbHNlIHZvaWQgMCE9PWEmJiJib29sZWFuIiE9PWN8fChiPWViKHRoaXMpLGImJlcuc2V0KHRoaXMsIl9fY2xhc3NOYW1lX18iLGIpLHRoaXMuc2V0QXR0cmlidXRlJiZ0aGlzLnNldEF0dHJpYnV0ZSgiY2xhc3MiLGJ8fGE9PT0hMT8iIjpXLmdldCh0aGlzLCJfX2NsYXNzTmFtZV9fIil8fCIiKSl9KX0saGFzQ2xhc3M6ZnVuY3Rpb24oYSl7dmFyIGIsYyxkPTA7Yj0iICIrYSsiICI7d2hpbGUoYz10aGlzW2QrK10paWYoMT09PWMubm9kZVR5cGUmJigiICIrZGIoZWIoYykpKyIgIikuaW5kZXhPZihiKT4tMSlyZXR1cm4hMDtyZXR1cm4hMX19KTt2YXIgZmI9L1xyL2c7ci5mbi5leHRlbmQoe3ZhbDpmdW5jdGlvbihhKXt2YXIgYixjLGQsZT10aGlzWzBdO3tpZihhcmd1bWVudHMubGVuZ3RoKXJldHVybiBkPXIuaXNGdW5jdGlvbihhKSx0aGlzLmVhY2goZnVuY3Rpb24oYyl7dmFyIGU7MT09PXRoaXMubm9kZVR5cGUmJihlPWQ/YS5jYWxsKHRoaXMsYyxyKHRoaXMpLnZhbCgpKTphLG51bGw9PWU/ZT0iIjoibnVtYmVyIj09dHlwZW9mIGU/ZSs9IiI6QXJyYXkuaXNBcnJheShlKSYmKGU9ci5tYXAoZSxmdW5jdGlvbihhKXtyZXR1cm4gbnVsbD09YT8iIjphKyIifSkpLGI9ci52YWxIb29rc1t0aGlzLnR5cGVdfHxyLnZhbEhvb2tzW3RoaXMubm9kZU5hbWUudG9Mb3dlckNhc2UoKV0sYiYmInNldCJpbiBiJiZ2b2lkIDAhPT1iLnNldCh0aGlzLGUsInZhbHVlIil8fCh0aGlzLnZhbHVlPWUpKX0pO2lmKGUpcmV0dXJuIGI9ci52YWxIb29rc1tlLnR5cGVdfHxyLnZhbEhvb2tzW2Uubm9kZU5hbWUudG9Mb3dlckNhc2UoKV0sYiYmImdldCJpbiBiJiZ2b2lkIDAhPT0oYz1iLmdldChlLCJ2YWx1ZSIpKT9jOihjPWUudmFsdWUsInN0cmluZyI9PXR5cGVvZiBjP2MucmVwbGFjZShmYiwiIik6bnVsbD09Yz8iIjpjKX19fSksci5leHRlbmQoe3ZhbEhvb2tzOntvcHRpb246e2dldDpmdW5jdGlvbihhKXt2YXIgYj1yLmZpbmQuYXR0cihhLCJ2YWx1ZSIpO3JldHVybiBudWxsIT1iP2I6ZGIoci50ZXh0KGEpKX19LHNlbGVjdDp7Z2V0OmZ1bmN0aW9uKGEpe3ZhciBiLGMsZCxlPWEub3B0aW9ucyxmPWEuc2VsZWN0ZWRJbmRleCxnPSJzZWxlY3Qtb25lIj09PWEudHlwZSxoPWc/bnVsbDpbXSxpPWc/ZisxOmUubGVuZ3RoO2ZvcihkPWY8MD9pOmc/ZjowO2Q8aTtkKyspaWYoYz1lW2RdLChjLnNlbGVjdGVkfHxkPT09ZikmJiFjLmRpc2FibGVkJiYoIWMucGFyZW50Tm9kZS5kaXNhYmxlZHx8IUIoYy5wYXJlbnROb2RlLCJvcHRncm91cCIpKSl7aWYoYj1yKGMpLnZhbCgpLGcpcmV0dXJuIGI7aC5wdXNoKGIpfXJldHVybiBofSxzZXQ6ZnVuY3Rpb24oYSxiKXt2YXIgYyxkLGU9YS5vcHRpb25zLGY9ci5tYWtlQXJyYXkoYiksZz1lLmxlbmd0aDt3aGlsZShnLS0pZD1lW2ddLChkLnNlbGVjdGVkPXIuaW5BcnJheShyLnZhbEhvb2tzLm9wdGlvbi5nZXQoZCksZik+LTEpJiYoYz0hMCk7cmV0dXJuIGN8fChhLnNlbGVjdGVkSW5kZXg9LTEpLGZ9fX19KSxyLmVhY2goWyJyYWRpbyIsImNoZWNrYm94Il0sZnVuY3Rpb24oKXtyLnZhbEhvb2tzW3RoaXNdPXtzZXQ6ZnVuY3Rpb24oYSxiKXtpZihBcnJheS5pc0FycmF5KGIpKXJldHVybiBhLmNoZWNrZWQ9ci5pbkFycmF5KHIoYSkudmFsKCksYik+LTF9fSxvLmNoZWNrT258fChyLnZhbEhvb2tzW3RoaXNdLmdldD1mdW5jdGlvbihhKXtyZXR1cm4gbnVsbD09PWEuZ2V0QXR0cmlidXRlKCJ2YWx1ZSIpPyJvbiI6YS52YWx1ZX0pfSk7dmFyIGdiPS9eKD86Zm9jdXNpbmZvY3VzfGZvY3Vzb3V0Ymx1cikkLztyLmV4dGVuZChyLmV2ZW50LHt0cmlnZ2VyOmZ1bmN0aW9uKGIsYyxlLGYpe3ZhciBnLGgsaSxqLGssbSxuLG89W2V8fGRdLHA9bC5jYWxsKGIsInR5cGUiKT9iLnR5cGU6YixxPWwuY2FsbChiLCJuYW1lc3BhY2UiKT9iLm5hbWVzcGFjZS5zcGxpdCgiLiIpOltdO2lmKGg9aT1lPWV8fGQsMyE9PWUubm9kZVR5cGUmJjghPT1lLm5vZGVUeXBlJiYhZ2IudGVzdChwK3IuZXZlbnQudHJpZ2dlcmVkKSYmKHAuaW5kZXhPZigiLiIpPi0xJiYocT1wLnNwbGl0KCIuIikscD1xLnNoaWZ0KCkscS5zb3J0KCkpLGs9cC5pbmRleE9mKCI6Iik8MCYmIm9uIitwLGI9YltyLmV4cGFuZG9dP2I6bmV3IHIuRXZlbnQocCwib2JqZWN0Ij09dHlwZW9mIGImJmIpLGIuaXNUcmlnZ2VyPWY/MjozLGIubmFtZXNwYWNlPXEuam9pbigiLiIpLGIucm5hbWVzcGFjZT1iLm5hbWVzcGFjZT9uZXcgUmVnRXhwKCIoXnxcXC4pIitxLmpvaW4oIlxcLig/Oi4qXFwufCkiKSsiKFxcLnwkKSIpOm51bGwsYi5yZXN1bHQ9dm9pZCAwLGIudGFyZ2V0fHwoYi50YXJnZXQ9ZSksYz1udWxsPT1jP1tiXTpyLm1ha2VBcnJheShjLFtiXSksbj1yLmV2ZW50LnNwZWNpYWxbcF18fHt9LGZ8fCFuLnRyaWdnZXJ8fG4udHJpZ2dlci5hcHBseShlLGMpIT09ITEpKXtpZighZiYmIW4ubm9CdWJibGUmJiFyLmlzV2luZG93KGUpKXtmb3Ioaj1uLmRlbGVnYXRlVHlwZXx8cCxnYi50ZXN0KGorcCl8fChoPWgucGFyZW50Tm9kZSk7aDtoPWgucGFyZW50Tm9kZSlvLnB1c2goaCksaT1oO2k9PT0oZS5vd25lckRvY3VtZW50fHxkKSYmby5wdXNoKGkuZGVmYXVsdFZpZXd8fGkucGFyZW50V2luZG93fHxhKX1nPTA7d2hpbGUoKGg9b1tnKytdKSYmIWIuaXNQcm9wYWdhdGlvblN0b3BwZWQoKSliLnR5cGU9Zz4xP2o6bi5iaW5kVHlwZXx8cCxtPShXLmdldChoLCJldmVudHMiKXx8e30pW2IudHlwZV0mJlcuZ2V0KGgsImhhbmRsZSIpLG0mJm0uYXBwbHkoaCxjKSxtPWsmJmhba10sbSYmbS5hcHBseSYmVShoKSYmKGIucmVzdWx0PW0uYXBwbHkoaCxjKSxiLnJlc3VsdD09PSExJiZiLnByZXZlbnREZWZhdWx0KCkpO3JldHVybiBiLnR5cGU9cCxmfHxiLmlzRGVmYXVsdFByZXZlbnRlZCgpfHxuLl9kZWZhdWx0JiZuLl9kZWZhdWx0LmFwcGx5KG8ucG9wKCksYykhPT0hMXx8IVUoZSl8fGsmJnIuaXNGdW5jdGlvbihlW3BdKSYmIXIuaXNXaW5kb3coZSkmJihpPWVba10saSYmKGVba109bnVsbCksci5ldmVudC50cmlnZ2VyZWQ9cCxlW3BdKCksci5ldmVudC50cmlnZ2VyZWQ9dm9pZCAwLGkmJihlW2tdPWkpKSxiLnJlc3VsdH19LHNpbXVsYXRlOmZ1bmN0aW9uKGEsYixjKXt2YXIgZD1yLmV4dGVuZChuZXcgci5FdmVudCxjLHt0eXBlOmEsaXNTaW11bGF0ZWQ6ITB9KTtyLmV2ZW50LnRyaWdnZXIoZCxudWxsLGIpfX0pLHIuZm4uZXh0ZW5kKHt0cmlnZ2VyOmZ1bmN0aW9uKGEsYil7cmV0dXJuIHRoaXMuZWFjaChmdW5jdGlvbigpe3IuZXZlbnQudHJpZ2dlcihhLGIsdGhpcyl9KX0sdHJpZ2dlckhhbmRsZXI6ZnVuY3Rpb24oYSxiKXt2YXIgYz10aGlzWzBdO2lmKGMpcmV0dXJuIHIuZXZlbnQudHJpZ2dlcihhLGIsYywhMCl9fSksci5lYWNoKCJibHVyIGZvY3VzIGZvY3VzaW4gZm9jdXNvdXQgcmVzaXplIHNjcm9sbCBjbGljayBkYmxjbGljayBtb3VzZWRvd24gbW91c2V1cCBtb3VzZW1vdmUgbW91c2VvdmVyIG1vdXNlb3V0IG1vdXNlZW50ZXIgbW91c2VsZWF2ZSBjaGFuZ2Ugc2VsZWN0IHN1Ym1pdCBrZXlkb3duIGtleXByZXNzIGtleXVwIGNvbnRleHRtZW51Ii5zcGxpdCgiICIpLGZ1bmN0aW9uKGEsYil7ci5mbltiXT1mdW5jdGlvbihhLGMpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPjA/dGhpcy5vbihiLG51bGwsYSxjKTp0aGlzLnRyaWdnZXIoYil9fSksci5mbi5leHRlbmQoe2hvdmVyOmZ1bmN0aW9uKGEsYil7cmV0dXJuIHRoaXMubW91c2VlbnRlcihhKS5tb3VzZWxlYXZlKGJ8fGEpfX0pLG8uZm9jdXNpbj0ib25mb2N1c2luImluIGEsby5mb2N1c2lufHxyLmVhY2goe2ZvY3VzOiJmb2N1c2luIixibHVyOiJmb2N1c291dCJ9LGZ1bmN0aW9uKGEsYil7dmFyIGM9ZnVuY3Rpb24oYSl7ci5ldmVudC5zaW11bGF0ZShiLGEudGFyZ2V0LHIuZXZlbnQuZml4KGEpKX07ci5ldmVudC5zcGVjaWFsW2JdPXtzZXR1cDpmdW5jdGlvbigpe3ZhciBkPXRoaXMub3duZXJEb2N1bWVudHx8dGhpcyxlPVcuYWNjZXNzKGQsYik7ZXx8ZC5hZGRFdmVudExpc3RlbmVyKGEsYywhMCksVy5hY2Nlc3MoZCxiLChlfHwwKSsxKX0sdGVhcmRvd246ZnVuY3Rpb24oKXt2YXIgZD10aGlzLm93bmVyRG9jdW1lbnR8fHRoaXMsZT1XLmFjY2VzcyhkLGIpLTE7ZT9XLmFjY2VzcyhkLGIsZSk6KGQucmVtb3ZlRXZlbnRMaXN0ZW5lcihhLGMsITApLFcucmVtb3ZlKGQsYikpfX19KTt2YXIgaGI9L1xbXF0kLyxpYj0vXHI/XG4vZyxqYj0vXig/OnN1Ym1pdHxidXR0b258aW1hZ2V8cmVzZXR8ZmlsZSkkL2ksa2I9L14oPzppbnB1dHxzZWxlY3R8dGV4dGFyZWF8a2V5Z2VuKS9pO2Z1bmN0aW9uIGxiKGEsYixjLGQpe3ZhciBlO2lmKEFycmF5LmlzQXJyYXkoYikpci5lYWNoKGIsZnVuY3Rpb24oYixlKXtjfHxoYi50ZXN0KGEpP2QoYSxlKTpsYihhKyJbIisoIm9iamVjdCI9PXR5cGVvZiBlJiZudWxsIT1lP2I6IiIpKyJdIixlLGMsZCk7Cn0pO2Vsc2UgaWYoY3x8Im9iamVjdCIhPT1yLnR5cGUoYikpZChhLGIpO2Vsc2UgZm9yKGUgaW4gYilsYihhKyJbIitlKyJdIixiW2VdLGMsZCl9ci5wYXJhbT1mdW5jdGlvbihhLGIpe3ZhciBjLGQ9W10sZT1mdW5jdGlvbihhLGIpe3ZhciBjPXIuaXNGdW5jdGlvbihiKT9iKCk6YjtkW2QubGVuZ3RoXT1lbmNvZGVVUklDb21wb25lbnQoYSkrIj0iK2VuY29kZVVSSUNvbXBvbmVudChudWxsPT1jPyIiOmMpfTtpZihBcnJheS5pc0FycmF5KGEpfHxhLmpxdWVyeSYmIXIuaXNQbGFpbk9iamVjdChhKSlyLmVhY2goYSxmdW5jdGlvbigpe2UodGhpcy5uYW1lLHRoaXMudmFsdWUpfSk7ZWxzZSBmb3IoYyBpbiBhKWxiKGMsYVtjXSxiLGUpO3JldHVybiBkLmpvaW4oIiYiKX0sci5mbi5leHRlbmQoe3NlcmlhbGl6ZTpmdW5jdGlvbigpe3JldHVybiByLnBhcmFtKHRoaXMuc2VyaWFsaXplQXJyYXkoKSl9LHNlcmlhbGl6ZUFycmF5OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMubWFwKGZ1bmN0aW9uKCl7dmFyIGE9ci5wcm9wKHRoaXMsImVsZW1lbnRzIik7cmV0dXJuIGE/ci5tYWtlQXJyYXkoYSk6dGhpc30pLmZpbHRlcihmdW5jdGlvbigpe3ZhciBhPXRoaXMudHlwZTtyZXR1cm4gdGhpcy5uYW1lJiYhcih0aGlzKS5pcygiOmRpc2FibGVkIikmJmtiLnRlc3QodGhpcy5ub2RlTmFtZSkmJiFqYi50ZXN0KGEpJiYodGhpcy5jaGVja2VkfHwhamEudGVzdChhKSl9KS5tYXAoZnVuY3Rpb24oYSxiKXt2YXIgYz1yKHRoaXMpLnZhbCgpO3JldHVybiBudWxsPT1jP251bGw6QXJyYXkuaXNBcnJheShjKT9yLm1hcChjLGZ1bmN0aW9uKGEpe3JldHVybntuYW1lOmIubmFtZSx2YWx1ZTphLnJlcGxhY2UoaWIsIlxyXG4iKX19KTp7bmFtZTpiLm5hbWUsdmFsdWU6Yy5yZXBsYWNlKGliLCJcclxuIil9fSkuZ2V0KCl9fSksci5mbi5leHRlbmQoe3dyYXBBbGw6ZnVuY3Rpb24oYSl7dmFyIGI7cmV0dXJuIHRoaXNbMF0mJihyLmlzRnVuY3Rpb24oYSkmJihhPWEuY2FsbCh0aGlzWzBdKSksYj1yKGEsdGhpc1swXS5vd25lckRvY3VtZW50KS5lcSgwKS5jbG9uZSghMCksdGhpc1swXS5wYXJlbnROb2RlJiZiLmluc2VydEJlZm9yZSh0aGlzWzBdKSxiLm1hcChmdW5jdGlvbigpe3ZhciBhPXRoaXM7d2hpbGUoYS5maXJzdEVsZW1lbnRDaGlsZClhPWEuZmlyc3RFbGVtZW50Q2hpbGQ7cmV0dXJuIGF9KS5hcHBlbmQodGhpcykpLHRoaXN9LHdyYXBJbm5lcjpmdW5jdGlvbihhKXtyZXR1cm4gci5pc0Z1bmN0aW9uKGEpP3RoaXMuZWFjaChmdW5jdGlvbihiKXtyKHRoaXMpLndyYXBJbm5lcihhLmNhbGwodGhpcyxiKSl9KTp0aGlzLmVhY2goZnVuY3Rpb24oKXt2YXIgYj1yKHRoaXMpLGM9Yi5jb250ZW50cygpO2MubGVuZ3RoP2Mud3JhcEFsbChhKTpiLmFwcGVuZChhKX0pfSx3cmFwOmZ1bmN0aW9uKGEpe3ZhciBiPXIuaXNGdW5jdGlvbihhKTtyZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uKGMpe3IodGhpcykud3JhcEFsbChiP2EuY2FsbCh0aGlzLGMpOmEpfSl9LHVud3JhcDpmdW5jdGlvbihhKXtyZXR1cm4gdGhpcy5wYXJlbnQoYSkubm90KCJib2R5IikuZWFjaChmdW5jdGlvbigpe3IodGhpcykucmVwbGFjZVdpdGgodGhpcy5jaGlsZE5vZGVzKX0pLHRoaXN9fSksci5leHByLnBzZXVkb3MuaGlkZGVuPWZ1bmN0aW9uKGEpe3JldHVybiFyLmV4cHIucHNldWRvcy52aXNpYmxlKGEpfSxyLmV4cHIucHNldWRvcy52aXNpYmxlPWZ1bmN0aW9uKGEpe3JldHVybiEhKGEub2Zmc2V0V2lkdGh8fGEub2Zmc2V0SGVpZ2h0fHxhLmdldENsaWVudFJlY3RzKCkubGVuZ3RoKX0sby5jcmVhdGVIVE1MRG9jdW1lbnQ9ZnVuY3Rpb24oKXt2YXIgYT1kLmltcGxlbWVudGF0aW9uLmNyZWF0ZUhUTUxEb2N1bWVudCgiIikuYm9keTtyZXR1cm4gYS5pbm5lckhUTUw9Ijxmb3JtPjwvZm9ybT48Zm9ybT48L2Zvcm0+IiwyPT09YS5jaGlsZE5vZGVzLmxlbmd0aH0oKSxyLnBhcnNlSFRNTD1mdW5jdGlvbihhLGIsYyl7aWYoInN0cmluZyIhPXR5cGVvZiBhKXJldHVybltdOyJib29sZWFuIj09dHlwZW9mIGImJihjPWIsYj0hMSk7dmFyIGUsZixnO3JldHVybiBifHwoby5jcmVhdGVIVE1MRG9jdW1lbnQ/KGI9ZC5pbXBsZW1lbnRhdGlvbi5jcmVhdGVIVE1MRG9jdW1lbnQoIiIpLGU9Yi5jcmVhdGVFbGVtZW50KCJiYXNlIiksZS5ocmVmPWQubG9jYXRpb24uaHJlZixiLmhlYWQuYXBwZW5kQ2hpbGQoZSkpOmI9ZCksZj1DLmV4ZWMoYSksZz0hYyYmW10sZj9bYi5jcmVhdGVFbGVtZW50KGZbMV0pXTooZj1xYShbYV0sYixnKSxnJiZnLmxlbmd0aCYmcihnKS5yZW1vdmUoKSxyLm1lcmdlKFtdLGYuY2hpbGROb2RlcykpfSxyLm9mZnNldD17c2V0T2Zmc2V0OmZ1bmN0aW9uKGEsYixjKXt2YXIgZCxlLGYsZyxoLGksaixrPXIuY3NzKGEsInBvc2l0aW9uIiksbD1yKGEpLG09e307InN0YXRpYyI9PT1rJiYoYS5zdHlsZS5wb3NpdGlvbj0icmVsYXRpdmUiKSxoPWwub2Zmc2V0KCksZj1yLmNzcyhhLCJ0b3AiKSxpPXIuY3NzKGEsImxlZnQiKSxqPSgiYWJzb2x1dGUiPT09a3x8ImZpeGVkIj09PWspJiYoZitpKS5pbmRleE9mKCJhdXRvIik+LTEsaj8oZD1sLnBvc2l0aW9uKCksZz1kLnRvcCxlPWQubGVmdCk6KGc9cGFyc2VGbG9hdChmKXx8MCxlPXBhcnNlRmxvYXQoaSl8fDApLHIuaXNGdW5jdGlvbihiKSYmKGI9Yi5jYWxsKGEsYyxyLmV4dGVuZCh7fSxoKSkpLG51bGwhPWIudG9wJiYobS50b3A9Yi50b3AtaC50b3ArZyksbnVsbCE9Yi5sZWZ0JiYobS5sZWZ0PWIubGVmdC1oLmxlZnQrZSksInVzaW5nImluIGI/Yi51c2luZy5jYWxsKGEsbSk6bC5jc3MobSl9fSxyLmZuLmV4dGVuZCh7b2Zmc2V0OmZ1bmN0aW9uKGEpe2lmKGFyZ3VtZW50cy5sZW5ndGgpcmV0dXJuIHZvaWQgMD09PWE/dGhpczp0aGlzLmVhY2goZnVuY3Rpb24oYil7ci5vZmZzZXQuc2V0T2Zmc2V0KHRoaXMsYSxiKX0pO3ZhciBiLGMsZCxlLGY9dGhpc1swXTtpZihmKXJldHVybiBmLmdldENsaWVudFJlY3RzKCkubGVuZ3RoPyhkPWYuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCksYj1mLm93bmVyRG9jdW1lbnQsYz1iLmRvY3VtZW50RWxlbWVudCxlPWIuZGVmYXVsdFZpZXcse3RvcDpkLnRvcCtlLnBhZ2VZT2Zmc2V0LWMuY2xpZW50VG9wLGxlZnQ6ZC5sZWZ0K2UucGFnZVhPZmZzZXQtYy5jbGllbnRMZWZ0fSk6e3RvcDowLGxlZnQ6MH19LHBvc2l0aW9uOmZ1bmN0aW9uKCl7aWYodGhpc1swXSl7dmFyIGEsYixjPXRoaXNbMF0sZD17dG9wOjAsbGVmdDowfTtyZXR1cm4iZml4ZWQiPT09ci5jc3MoYywicG9zaXRpb24iKT9iPWMuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk6KGE9dGhpcy5vZmZzZXRQYXJlbnQoKSxiPXRoaXMub2Zmc2V0KCksQihhWzBdLCJodG1sIil8fChkPWEub2Zmc2V0KCkpLGQ9e3RvcDpkLnRvcCtyLmNzcyhhWzBdLCJib3JkZXJUb3BXaWR0aCIsITApLGxlZnQ6ZC5sZWZ0K3IuY3NzKGFbMF0sImJvcmRlckxlZnRXaWR0aCIsITApfSkse3RvcDpiLnRvcC1kLnRvcC1yLmNzcyhjLCJtYXJnaW5Ub3AiLCEwKSxsZWZ0OmIubGVmdC1kLmxlZnQtci5jc3MoYywibWFyZ2luTGVmdCIsITApfX19LG9mZnNldFBhcmVudDpmdW5jdGlvbigpe3JldHVybiB0aGlzLm1hcChmdW5jdGlvbigpe3ZhciBhPXRoaXMub2Zmc2V0UGFyZW50O3doaWxlKGEmJiJzdGF0aWMiPT09ci5jc3MoYSwicG9zaXRpb24iKSlhPWEub2Zmc2V0UGFyZW50O3JldHVybiBhfHxyYX0pfX0pLHIuZWFjaCh7c2Nyb2xsTGVmdDoicGFnZVhPZmZzZXQiLHNjcm9sbFRvcDoicGFnZVlPZmZzZXQifSxmdW5jdGlvbihhLGIpe3ZhciBjPSJwYWdlWU9mZnNldCI9PT1iO3IuZm5bYV09ZnVuY3Rpb24oZCl7cmV0dXJuIFQodGhpcyxmdW5jdGlvbihhLGQsZSl7dmFyIGY7cmV0dXJuIHIuaXNXaW5kb3coYSk/Zj1hOjk9PT1hLm5vZGVUeXBlJiYoZj1hLmRlZmF1bHRWaWV3KSx2b2lkIDA9PT1lP2Y/ZltiXTphW2RdOnZvaWQoZj9mLnNjcm9sbFRvKGM/Zi5wYWdlWE9mZnNldDplLGM/ZTpmLnBhZ2VZT2Zmc2V0KTphW2RdPWUpfSxhLGQsYXJndW1lbnRzLmxlbmd0aCl9fSksci5lYWNoKFsidG9wIiwibGVmdCJdLGZ1bmN0aW9uKGEsYil7ci5jc3NIb29rc1tiXT1QYShvLnBpeGVsUG9zaXRpb24sZnVuY3Rpb24oYSxjKXtpZihjKXJldHVybiBjPU9hKGEsYiksTWEudGVzdChjKT9yKGEpLnBvc2l0aW9uKClbYl0rInB4IjpjfSl9KSxyLmVhY2goe0hlaWdodDoiaGVpZ2h0IixXaWR0aDoid2lkdGgifSxmdW5jdGlvbihhLGIpe3IuZWFjaCh7cGFkZGluZzoiaW5uZXIiK2EsY29udGVudDpiLCIiOiJvdXRlciIrYX0sZnVuY3Rpb24oYyxkKXtyLmZuW2RdPWZ1bmN0aW9uKGUsZil7dmFyIGc9YXJndW1lbnRzLmxlbmd0aCYmKGN8fCJib29sZWFuIiE9dHlwZW9mIGUpLGg9Y3x8KGU9PT0hMHx8Zj09PSEwPyJtYXJnaW4iOiJib3JkZXIiKTtyZXR1cm4gVCh0aGlzLGZ1bmN0aW9uKGIsYyxlKXt2YXIgZjtyZXR1cm4gci5pc1dpbmRvdyhiKT8wPT09ZC5pbmRleE9mKCJvdXRlciIpP2JbImlubmVyIithXTpiLmRvY3VtZW50LmRvY3VtZW50RWxlbWVudFsiY2xpZW50IithXTo5PT09Yi5ub2RlVHlwZT8oZj1iLmRvY3VtZW50RWxlbWVudCxNYXRoLm1heChiLmJvZHlbInNjcm9sbCIrYV0sZlsic2Nyb2xsIithXSxiLmJvZHlbIm9mZnNldCIrYV0sZlsib2Zmc2V0IithXSxmWyJjbGllbnQiK2FdKSk6dm9pZCAwPT09ZT9yLmNzcyhiLGMsaCk6ci5zdHlsZShiLGMsZSxoKX0sYixnP2U6dm9pZCAwLGcpfX0pfSksci5mbi5leHRlbmQoe2JpbmQ6ZnVuY3Rpb24oYSxiLGMpe3JldHVybiB0aGlzLm9uKGEsbnVsbCxiLGMpfSx1bmJpbmQ6ZnVuY3Rpb24oYSxiKXtyZXR1cm4gdGhpcy5vZmYoYSxudWxsLGIpfSxkZWxlZ2F0ZTpmdW5jdGlvbihhLGIsYyxkKXtyZXR1cm4gdGhpcy5vbihiLGEsYyxkKX0sdW5kZWxlZ2F0ZTpmdW5jdGlvbihhLGIsYyl7cmV0dXJuIDE9PT1hcmd1bWVudHMubGVuZ3RoP3RoaXMub2ZmKGEsIioqIik6dGhpcy5vZmYoYixhfHwiKioiLGMpfX0pLHIuaG9sZFJlYWR5PWZ1bmN0aW9uKGEpe2E/ci5yZWFkeVdhaXQrKzpyLnJlYWR5KCEwKX0sci5pc0FycmF5PUFycmF5LmlzQXJyYXksci5wYXJzZUpTT049SlNPTi5wYXJzZSxyLm5vZGVOYW1lPUIsImZ1bmN0aW9uIj09dHlwZW9mIGRlZmluZSYmZGVmaW5lLmFtZCYmZGVmaW5lKCJqcXVlcnkiLFtdLGZ1bmN0aW9uKCl7cmV0dXJuIHJ9KTt2YXIgbWI9YS5qUXVlcnksbmI9YS4kO3JldHVybiByLm5vQ29uZmxpY3Q9ZnVuY3Rpb24oYil7cmV0dXJuIGEuJD09PXImJihhLiQ9bmIpLGImJmEualF1ZXJ5PT09ciYmKGEualF1ZXJ5PW1iKSxyfSxifHwoYS5qUXVlcnk9YS4kPXIpLHJ9KTsK"></script>
<script src="data:application/javascript; charset=utf-8;base64,LyoKIENvcHlyaWdodCAoQykgRmVkZXJpY28gWml2b2xvIDIwMTcKIERpc3RyaWJ1dGVkIHVuZGVyIHRoZSBNSVQgTGljZW5zZSAobGljZW5zZSB0ZXJtcyBhcmUgYXQgaHR0cDovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL01JVCkuCiAqLyhmdW5jdGlvbihlLHQpeydvYmplY3QnPT10eXBlb2YgZXhwb3J0cyYmJ3VuZGVmaW5lZCchPXR5cGVvZiBtb2R1bGU/bW9kdWxlLmV4cG9ydHM9dCgpOidmdW5jdGlvbic9PXR5cGVvZiBkZWZpbmUmJmRlZmluZS5hbWQ/ZGVmaW5lKHQpOmUuUG9wcGVyPXQoKX0pKHRoaXMsZnVuY3Rpb24oKXsndXNlIHN0cmljdCc7ZnVuY3Rpb24gZShlKXtyZXR1cm4gZSYmJ1tvYmplY3QgRnVuY3Rpb25dJz09PXt9LnRvU3RyaW5nLmNhbGwoZSl9ZnVuY3Rpb24gdChlLHQpe2lmKDEhPT1lLm5vZGVUeXBlKXJldHVybltdO3ZhciBvPWdldENvbXB1dGVkU3R5bGUoZSxudWxsKTtyZXR1cm4gdD9vW3RdOm99ZnVuY3Rpb24gbyhlKXtyZXR1cm4nSFRNTCc9PT1lLm5vZGVOYW1lP2U6ZS5wYXJlbnROb2RlfHxlLmhvc3R9ZnVuY3Rpb24gbihlKXtpZighZSlyZXR1cm4gZG9jdW1lbnQuYm9keTtzd2l0Y2goZS5ub2RlTmFtZSl7Y2FzZSdIVE1MJzpjYXNlJ0JPRFknOnJldHVybiBlLm93bmVyRG9jdW1lbnQuYm9keTtjYXNlJyNkb2N1bWVudCc6cmV0dXJuIGUuYm9keTt9dmFyIGk9dChlKSxyPWkub3ZlcmZsb3cscD1pLm92ZXJmbG93WCxzPWkub3ZlcmZsb3dZO3JldHVybiAvKGF1dG98c2Nyb2xsKS8udGVzdChyK3MrcCk/ZTpuKG8oZSkpfWZ1bmN0aW9uIHIoZSl7dmFyIG89ZSYmZS5vZmZzZXRQYXJlbnQsaT1vJiZvLm5vZGVOYW1lO3JldHVybiBpJiYnQk9EWSchPT1pJiYnSFRNTCchPT1pPy0xIT09WydURCcsJ1RBQkxFJ10uaW5kZXhPZihvLm5vZGVOYW1lKSYmJ3N0YXRpYyc9PT10KG8sJ3Bvc2l0aW9uJyk/cihvKTpvOmU/ZS5vd25lckRvY3VtZW50LmRvY3VtZW50RWxlbWVudDpkb2N1bWVudC5kb2N1bWVudEVsZW1lbnR9ZnVuY3Rpb24gcChlKXt2YXIgdD1lLm5vZGVOYW1lO3JldHVybidCT0RZJyE9PXQmJignSFRNTCc9PT10fHxyKGUuZmlyc3RFbGVtZW50Q2hpbGQpPT09ZSl9ZnVuY3Rpb24gcyhlKXtyZXR1cm4gbnVsbD09PWUucGFyZW50Tm9kZT9lOnMoZS5wYXJlbnROb2RlKX1mdW5jdGlvbiBkKGUsdCl7aWYoIWV8fCFlLm5vZGVUeXBlfHwhdHx8IXQubm9kZVR5cGUpcmV0dXJuIGRvY3VtZW50LmRvY3VtZW50RWxlbWVudDt2YXIgbz1lLmNvbXBhcmVEb2N1bWVudFBvc2l0aW9uKHQpJk5vZGUuRE9DVU1FTlRfUE9TSVRJT05fRk9MTE9XSU5HLGk9bz9lOnQsbj1vP3Q6ZSxhPWRvY3VtZW50LmNyZWF0ZVJhbmdlKCk7YS5zZXRTdGFydChpLDApLGEuc2V0RW5kKG4sMCk7dmFyIGw9YS5jb21tb25BbmNlc3RvckNvbnRhaW5lcjtpZihlIT09bCYmdCE9PWx8fGkuY29udGFpbnMobikpcmV0dXJuIHAobCk/bDpyKGwpO3ZhciBmPXMoZSk7cmV0dXJuIGYuaG9zdD9kKGYuaG9zdCx0KTpkKGUscyh0KS5ob3N0KX1mdW5jdGlvbiBhKGUpe3ZhciB0PTE8YXJndW1lbnRzLmxlbmd0aCYmdm9pZCAwIT09YXJndW1lbnRzWzFdP2FyZ3VtZW50c1sxXTondG9wJyxvPSd0b3AnPT09dD8nc2Nyb2xsVG9wJzonc2Nyb2xsTGVmdCcsaT1lLm5vZGVOYW1lO2lmKCdCT0RZJz09PWl8fCdIVE1MJz09PWkpe3ZhciBuPWUub3duZXJEb2N1bWVudC5kb2N1bWVudEVsZW1lbnQscj1lLm93bmVyRG9jdW1lbnQuc2Nyb2xsaW5nRWxlbWVudHx8bjtyZXR1cm4gcltvXX1yZXR1cm4gZVtvXX1mdW5jdGlvbiBsKGUsdCl7dmFyIG89Mjxhcmd1bWVudHMubGVuZ3RoJiZ2b2lkIDAhPT1hcmd1bWVudHNbMl0mJmFyZ3VtZW50c1syXSxpPWEodCwndG9wJyksbj1hKHQsJ2xlZnQnKSxyPW8/LTE6MTtyZXR1cm4gZS50b3ArPWkqcixlLmJvdHRvbSs9aSpyLGUubGVmdCs9bipyLGUucmlnaHQrPW4qcixlfWZ1bmN0aW9uIGYoZSx0KXt2YXIgbz0neCc9PT10PydMZWZ0JzonVG9wJyxpPSdMZWZ0Jz09bz8nUmlnaHQnOidCb3R0b20nO3JldHVybiBwYXJzZUZsb2F0KGVbJ2JvcmRlcicrbysnV2lkdGgnXSwxMCkrcGFyc2VGbG9hdChlWydib3JkZXInK2krJ1dpZHRoJ10sMTApfWZ1bmN0aW9uIG0oZSx0LG8saSl7cmV0dXJuIEoodFsnb2Zmc2V0JytlXSx0WydzY3JvbGwnK2VdLG9bJ2NsaWVudCcrZV0sb1snb2Zmc2V0JytlXSxvWydzY3JvbGwnK2VdLGllKCk/b1snb2Zmc2V0JytlXStpWydtYXJnaW4nKygnSGVpZ2h0Jz09PWU/J1RvcCc6J0xlZnQnKV0raVsnbWFyZ2luJysoJ0hlaWdodCc9PT1lPydCb3R0b20nOidSaWdodCcpXTowKX1mdW5jdGlvbiBoKCl7dmFyIGU9ZG9jdW1lbnQuYm9keSx0PWRvY3VtZW50LmRvY3VtZW50RWxlbWVudCxvPWllKCkmJmdldENvbXB1dGVkU3R5bGUodCk7cmV0dXJue2hlaWdodDptKCdIZWlnaHQnLGUsdCxvKSx3aWR0aDptKCdXaWR0aCcsZSx0LG8pfX1mdW5jdGlvbiBjKGUpe3JldHVybiBzZSh7fSxlLHtyaWdodDplLmxlZnQrZS53aWR0aCxib3R0b206ZS50b3ArZS5oZWlnaHR9KX1mdW5jdGlvbiBnKGUpe3ZhciBvPXt9O2lmKGllKCkpdHJ5e289ZS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTt2YXIgaT1hKGUsJ3RvcCcpLG49YShlLCdsZWZ0Jyk7by50b3ArPWksby5sZWZ0Kz1uLG8uYm90dG9tKz1pLG8ucmlnaHQrPW59Y2F0Y2goZSl7fWVsc2Ugbz1lLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO3ZhciByPXtsZWZ0Om8ubGVmdCx0b3A6by50b3Asd2lkdGg6by5yaWdodC1vLmxlZnQsaGVpZ2h0Om8uYm90dG9tLW8udG9wfSxwPSdIVE1MJz09PWUubm9kZU5hbWU/aCgpOnt9LHM9cC53aWR0aHx8ZS5jbGllbnRXaWR0aHx8ci5yaWdodC1yLmxlZnQsZD1wLmhlaWdodHx8ZS5jbGllbnRIZWlnaHR8fHIuYm90dG9tLXIudG9wLGw9ZS5vZmZzZXRXaWR0aC1zLG09ZS5vZmZzZXRIZWlnaHQtZDtpZihsfHxtKXt2YXIgZz10KGUpO2wtPWYoZywneCcpLG0tPWYoZywneScpLHIud2lkdGgtPWwsci5oZWlnaHQtPW19cmV0dXJuIGMocil9ZnVuY3Rpb24gdShlLG8pe3ZhciBpPWllKCkscj0nSFRNTCc9PT1vLm5vZGVOYW1lLHA9ZyhlKSxzPWcobyksZD1uKGUpLGE9dChvKSxmPXBhcnNlRmxvYXQoYS5ib3JkZXJUb3BXaWR0aCwxMCksbT1wYXJzZUZsb2F0KGEuYm9yZGVyTGVmdFdpZHRoLDEwKSxoPWMoe3RvcDpwLnRvcC1zLnRvcC1mLGxlZnQ6cC5sZWZ0LXMubGVmdC1tLHdpZHRoOnAud2lkdGgsaGVpZ2h0OnAuaGVpZ2h0fSk7aWYoaC5tYXJnaW5Ub3A9MCxoLm1hcmdpbkxlZnQ9MCwhaSYmcil7dmFyIHU9cGFyc2VGbG9hdChhLm1hcmdpblRvcCwxMCksYj1wYXJzZUZsb2F0KGEubWFyZ2luTGVmdCwxMCk7aC50b3AtPWYtdSxoLmJvdHRvbS09Zi11LGgubGVmdC09bS1iLGgucmlnaHQtPW0tYixoLm1hcmdpblRvcD11LGgubWFyZ2luTGVmdD1ifXJldHVybihpP28uY29udGFpbnMoZCk6bz09PWQmJidCT0RZJyE9PWQubm9kZU5hbWUpJiYoaD1sKGgsbykpLGh9ZnVuY3Rpb24gYihlKXt2YXIgdD1lLm93bmVyRG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LG89dShlLHQpLGk9Sih0LmNsaWVudFdpZHRoLHdpbmRvdy5pbm5lcldpZHRofHwwKSxuPUoodC5jbGllbnRIZWlnaHQsd2luZG93LmlubmVySGVpZ2h0fHwwKSxyPWEodCkscD1hKHQsJ2xlZnQnKSxzPXt0b3A6ci1vLnRvcCtvLm1hcmdpblRvcCxsZWZ0OnAtby5sZWZ0K28ubWFyZ2luTGVmdCx3aWR0aDppLGhlaWdodDpufTtyZXR1cm4gYyhzKX1mdW5jdGlvbiB3KGUpe3ZhciBpPWUubm9kZU5hbWU7cmV0dXJuJ0JPRFknPT09aXx8J0hUTUwnPT09aT8hMTonZml4ZWQnPT09dChlLCdwb3NpdGlvbicpfHx3KG8oZSkpfWZ1bmN0aW9uIHkoZSx0LGkscil7dmFyIHA9e3RvcDowLGxlZnQ6MH0scz1kKGUsdCk7aWYoJ3ZpZXdwb3J0Jz09PXIpcD1iKHMpO2Vsc2V7dmFyIGE7J3Njcm9sbFBhcmVudCc9PT1yPyhhPW4obyh0KSksJ0JPRFknPT09YS5ub2RlTmFtZSYmKGE9ZS5vd25lckRvY3VtZW50LmRvY3VtZW50RWxlbWVudCkpOid3aW5kb3cnPT09cj9hPWUub3duZXJEb2N1bWVudC5kb2N1bWVudEVsZW1lbnQ6YT1yO3ZhciBsPXUoYSxzKTtpZignSFRNTCc9PT1hLm5vZGVOYW1lJiYhdyhzKSl7dmFyIGY9aCgpLG09Zi5oZWlnaHQsYz1mLndpZHRoO3AudG9wKz1sLnRvcC1sLm1hcmdpblRvcCxwLmJvdHRvbT1tK2wudG9wLHAubGVmdCs9bC5sZWZ0LWwubWFyZ2luTGVmdCxwLnJpZ2h0PWMrbC5sZWZ0fWVsc2UgcD1sfXJldHVybiBwLmxlZnQrPWkscC50b3ArPWkscC5yaWdodC09aSxwLmJvdHRvbS09aSxwfWZ1bmN0aW9uIEUoZSl7dmFyIHQ9ZS53aWR0aCxvPWUuaGVpZ2h0O3JldHVybiB0Km99ZnVuY3Rpb24gdihlLHQsbyxpLG4pe3ZhciByPTU8YXJndW1lbnRzLmxlbmd0aCYmdm9pZCAwIT09YXJndW1lbnRzWzVdP2FyZ3VtZW50c1s1XTowO2lmKC0xPT09ZS5pbmRleE9mKCdhdXRvJykpcmV0dXJuIGU7dmFyIHA9eShvLGkscixuKSxzPXt0b3A6e3dpZHRoOnAud2lkdGgsaGVpZ2h0OnQudG9wLXAudG9wfSxyaWdodDp7d2lkdGg6cC5yaWdodC10LnJpZ2h0LGhlaWdodDpwLmhlaWdodH0sYm90dG9tOnt3aWR0aDpwLndpZHRoLGhlaWdodDpwLmJvdHRvbS10LmJvdHRvbX0sbGVmdDp7d2lkdGg6dC5sZWZ0LXAubGVmdCxoZWlnaHQ6cC5oZWlnaHR9fSxkPU9iamVjdC5rZXlzKHMpLm1hcChmdW5jdGlvbihlKXtyZXR1cm4gc2Uoe2tleTplfSxzW2VdLHthcmVhOkUoc1tlXSl9KX0pLnNvcnQoZnVuY3Rpb24oZSx0KXtyZXR1cm4gdC5hcmVhLWUuYXJlYX0pLGE9ZC5maWx0ZXIoZnVuY3Rpb24oZSl7dmFyIHQ9ZS53aWR0aCxpPWUuaGVpZ2h0O3JldHVybiB0Pj1vLmNsaWVudFdpZHRoJiZpPj1vLmNsaWVudEhlaWdodH0pLGw9MDxhLmxlbmd0aD9hWzBdLmtleTpkWzBdLmtleSxmPWUuc3BsaXQoJy0nKVsxXTtyZXR1cm4gbCsoZj8nLScrZjonJyl9ZnVuY3Rpb24gTyhlLHQsbyl7dmFyIGk9ZCh0LG8pO3JldHVybiB1KG8saSl9ZnVuY3Rpb24gTChlKXt2YXIgdD1nZXRDb21wdXRlZFN0eWxlKGUpLG89cGFyc2VGbG9hdCh0Lm1hcmdpblRvcCkrcGFyc2VGbG9hdCh0Lm1hcmdpbkJvdHRvbSksaT1wYXJzZUZsb2F0KHQubWFyZ2luTGVmdCkrcGFyc2VGbG9hdCh0Lm1hcmdpblJpZ2h0KSxuPXt3aWR0aDplLm9mZnNldFdpZHRoK2ksaGVpZ2h0OmUub2Zmc2V0SGVpZ2h0K299O3JldHVybiBufWZ1bmN0aW9uIHgoZSl7dmFyIHQ9e2xlZnQ6J3JpZ2h0JyxyaWdodDonbGVmdCcsYm90dG9tOid0b3AnLHRvcDonYm90dG9tJ307cmV0dXJuIGUucmVwbGFjZSgvbGVmdHxyaWdodHxib3R0b218dG9wL2csZnVuY3Rpb24oZSl7cmV0dXJuIHRbZV19KX1mdW5jdGlvbiBTKGUsdCxvKXtvPW8uc3BsaXQoJy0nKVswXTt2YXIgaT1MKGUpLG49e3dpZHRoOmkud2lkdGgsaGVpZ2h0OmkuaGVpZ2h0fSxyPS0xIT09WydyaWdodCcsJ2xlZnQnXS5pbmRleE9mKG8pLHA9cj8ndG9wJzonbGVmdCcscz1yPydsZWZ0JzondG9wJyxkPXI/J2hlaWdodCc6J3dpZHRoJyxhPXI/J3dpZHRoJzonaGVpZ2h0JztyZXR1cm4gbltwXT10W3BdK3RbZF0vMi1pW2RdLzIsbltzXT1vPT09cz90W3NdLWlbYV06dFt4KHMpXSxufWZ1bmN0aW9uIFQoZSx0KXtyZXR1cm4gQXJyYXkucHJvdG90eXBlLmZpbmQ/ZS5maW5kKHQpOmUuZmlsdGVyKHQpWzBdfWZ1bmN0aW9uIEQoZSx0LG8pe2lmKEFycmF5LnByb3RvdHlwZS5maW5kSW5kZXgpcmV0dXJuIGUuZmluZEluZGV4KGZ1bmN0aW9uKGUpe3JldHVybiBlW3RdPT09b30pO3ZhciBpPVQoZSxmdW5jdGlvbihlKXtyZXR1cm4gZVt0XT09PW99KTtyZXR1cm4gZS5pbmRleE9mKGkpfWZ1bmN0aW9uIEModCxvLGkpe3ZhciBuPXZvaWQgMD09PWk/dDp0LnNsaWNlKDAsRCh0LCduYW1lJyxpKSk7cmV0dXJuIG4uZm9yRWFjaChmdW5jdGlvbih0KXt0WydmdW5jdGlvbiddJiZjb25zb2xlLndhcm4oJ2Btb2RpZmllci5mdW5jdGlvbmAgaXMgZGVwcmVjYXRlZCwgdXNlIGBtb2RpZmllci5mbmAhJyk7dmFyIGk9dFsnZnVuY3Rpb24nXXx8dC5mbjt0LmVuYWJsZWQmJmUoaSkmJihvLm9mZnNldHMucG9wcGVyPWMoby5vZmZzZXRzLnBvcHBlciksby5vZmZzZXRzLnJlZmVyZW5jZT1jKG8ub2Zmc2V0cy5yZWZlcmVuY2UpLG89aShvLHQpKX0pLG99ZnVuY3Rpb24gTigpe2lmKCF0aGlzLnN0YXRlLmlzRGVzdHJveWVkKXt2YXIgZT17aW5zdGFuY2U6dGhpcyxzdHlsZXM6e30sYXJyb3dTdHlsZXM6e30sYXR0cmlidXRlczp7fSxmbGlwcGVkOiExLG9mZnNldHM6e319O2Uub2Zmc2V0cy5yZWZlcmVuY2U9Tyh0aGlzLnN0YXRlLHRoaXMucG9wcGVyLHRoaXMucmVmZXJlbmNlKSxlLnBsYWNlbWVudD12KHRoaXMub3B0aW9ucy5wbGFjZW1lbnQsZS5vZmZzZXRzLnJlZmVyZW5jZSx0aGlzLnBvcHBlcix0aGlzLnJlZmVyZW5jZSx0aGlzLm9wdGlvbnMubW9kaWZpZXJzLmZsaXAuYm91bmRhcmllc0VsZW1lbnQsdGhpcy5vcHRpb25zLm1vZGlmaWVycy5mbGlwLnBhZGRpbmcpLGUub3JpZ2luYWxQbGFjZW1lbnQ9ZS5wbGFjZW1lbnQsZS5vZmZzZXRzLnBvcHBlcj1TKHRoaXMucG9wcGVyLGUub2Zmc2V0cy5yZWZlcmVuY2UsZS5wbGFjZW1lbnQpLGUub2Zmc2V0cy5wb3BwZXIucG9zaXRpb249J2Fic29sdXRlJyxlPUModGhpcy5tb2RpZmllcnMsZSksdGhpcy5zdGF0ZS5pc0NyZWF0ZWQ/dGhpcy5vcHRpb25zLm9uVXBkYXRlKGUpOih0aGlzLnN0YXRlLmlzQ3JlYXRlZD0hMCx0aGlzLm9wdGlvbnMub25DcmVhdGUoZSkpfX1mdW5jdGlvbiBrKGUsdCl7cmV0dXJuIGUuc29tZShmdW5jdGlvbihlKXt2YXIgbz1lLm5hbWUsaT1lLmVuYWJsZWQ7cmV0dXJuIGkmJm89PT10fSl9ZnVuY3Rpb24gVyhlKXtmb3IodmFyIHQ9WyExLCdtcycsJ1dlYmtpdCcsJ01veicsJ08nXSxvPWUuY2hhckF0KDApLnRvVXBwZXJDYXNlKCkrZS5zbGljZSgxKSxuPTA7bjx0Lmxlbmd0aC0xO24rKyl7dmFyIGk9dFtuXSxyPWk/JycraStvOmU7aWYoJ3VuZGVmaW5lZCchPXR5cGVvZiBkb2N1bWVudC5ib2R5LnN0eWxlW3JdKXJldHVybiByfXJldHVybiBudWxsfWZ1bmN0aW9uIFAoKXtyZXR1cm4gdGhpcy5zdGF0ZS5pc0Rlc3Ryb3llZD0hMCxrKHRoaXMubW9kaWZpZXJzLCdhcHBseVN0eWxlJykmJih0aGlzLnBvcHBlci5yZW1vdmVBdHRyaWJ1dGUoJ3gtcGxhY2VtZW50JyksdGhpcy5wb3BwZXIuc3R5bGUubGVmdD0nJyx0aGlzLnBvcHBlci5zdHlsZS5wb3NpdGlvbj0nJyx0aGlzLnBvcHBlci5zdHlsZS50b3A9JycsdGhpcy5wb3BwZXIuc3R5bGVbVygndHJhbnNmb3JtJyldPScnKSx0aGlzLmRpc2FibGVFdmVudExpc3RlbmVycygpLHRoaXMub3B0aW9ucy5yZW1vdmVPbkRlc3Ryb3kmJnRoaXMucG9wcGVyLnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQodGhpcy5wb3BwZXIpLHRoaXN9ZnVuY3Rpb24gQihlKXt2YXIgdD1lLm93bmVyRG9jdW1lbnQ7cmV0dXJuIHQ/dC5kZWZhdWx0Vmlldzp3aW5kb3d9ZnVuY3Rpb24gSChlLHQsbyxpKXt2YXIgcj0nQk9EWSc9PT1lLm5vZGVOYW1lLHA9cj9lLm93bmVyRG9jdW1lbnQuZGVmYXVsdFZpZXc6ZTtwLmFkZEV2ZW50TGlzdGVuZXIodCxvLHtwYXNzaXZlOiEwfSkscnx8SChuKHAucGFyZW50Tm9kZSksdCxvLGkpLGkucHVzaChwKX1mdW5jdGlvbiBBKGUsdCxvLGkpe28udXBkYXRlQm91bmQ9aSxCKGUpLmFkZEV2ZW50TGlzdGVuZXIoJ3Jlc2l6ZScsby51cGRhdGVCb3VuZCx7cGFzc2l2ZTohMH0pO3ZhciByPW4oZSk7cmV0dXJuIEgociwnc2Nyb2xsJyxvLnVwZGF0ZUJvdW5kLG8uc2Nyb2xsUGFyZW50cyksby5zY3JvbGxFbGVtZW50PXIsby5ldmVudHNFbmFibGVkPSEwLG99ZnVuY3Rpb24gSSgpe3RoaXMuc3RhdGUuZXZlbnRzRW5hYmxlZHx8KHRoaXMuc3RhdGU9QSh0aGlzLnJlZmVyZW5jZSx0aGlzLm9wdGlvbnMsdGhpcy5zdGF0ZSx0aGlzLnNjaGVkdWxlVXBkYXRlKSl9ZnVuY3Rpb24gTShlLHQpe3JldHVybiBCKGUpLnJlbW92ZUV2ZW50TGlzdGVuZXIoJ3Jlc2l6ZScsdC51cGRhdGVCb3VuZCksdC5zY3JvbGxQYXJlbnRzLmZvckVhY2goZnVuY3Rpb24oZSl7ZS5yZW1vdmVFdmVudExpc3RlbmVyKCdzY3JvbGwnLHQudXBkYXRlQm91bmQpfSksdC51cGRhdGVCb3VuZD1udWxsLHQuc2Nyb2xsUGFyZW50cz1bXSx0LnNjcm9sbEVsZW1lbnQ9bnVsbCx0LmV2ZW50c0VuYWJsZWQ9ITEsdH1mdW5jdGlvbiBSKCl7dGhpcy5zdGF0ZS5ldmVudHNFbmFibGVkJiYoY2FuY2VsQW5pbWF0aW9uRnJhbWUodGhpcy5zY2hlZHVsZVVwZGF0ZSksdGhpcy5zdGF0ZT1NKHRoaXMucmVmZXJlbmNlLHRoaXMuc3RhdGUpKX1mdW5jdGlvbiBVKGUpe3JldHVybicnIT09ZSYmIWlzTmFOKHBhcnNlRmxvYXQoZSkpJiZpc0Zpbml0ZShlKX1mdW5jdGlvbiBZKGUsdCl7T2JqZWN0LmtleXModCkuZm9yRWFjaChmdW5jdGlvbihvKXt2YXIgaT0nJzstMSE9PVsnd2lkdGgnLCdoZWlnaHQnLCd0b3AnLCdyaWdodCcsJ2JvdHRvbScsJ2xlZnQnXS5pbmRleE9mKG8pJiZVKHRbb10pJiYoaT0ncHgnKSxlLnN0eWxlW29dPXRbb10raX0pfWZ1bmN0aW9uIGooZSx0KXtPYmplY3Qua2V5cyh0KS5mb3JFYWNoKGZ1bmN0aW9uKG8pe3ZhciBpPXRbb107ITE9PT1pP2UucmVtb3ZlQXR0cmlidXRlKG8pOmUuc2V0QXR0cmlidXRlKG8sdFtvXSl9KX1mdW5jdGlvbiBGKGUsdCxvKXt2YXIgaT1UKGUsZnVuY3Rpb24oZSl7dmFyIG89ZS5uYW1lO3JldHVybiBvPT09dH0pLG49ISFpJiZlLnNvbWUoZnVuY3Rpb24oZSl7cmV0dXJuIGUubmFtZT09PW8mJmUuZW5hYmxlZCYmZS5vcmRlcjxpLm9yZGVyfSk7aWYoIW4pe3ZhciByPSdgJyt0KydgJztjb25zb2xlLndhcm4oJ2AnK28rJ2AnKycgbW9kaWZpZXIgaXMgcmVxdWlyZWQgYnkgJytyKycgbW9kaWZpZXIgaW4gb3JkZXIgdG8gd29yaywgYmUgc3VyZSB0byBpbmNsdWRlIGl0IGJlZm9yZSAnK3IrJyEnKX1yZXR1cm4gbn1mdW5jdGlvbiBLKGUpe3JldHVybidlbmQnPT09ZT8nc3RhcnQnOidzdGFydCc9PT1lPydlbmQnOmV9ZnVuY3Rpb24gcShlKXt2YXIgdD0xPGFyZ3VtZW50cy5sZW5ndGgmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXSYmYXJndW1lbnRzWzFdLG89YWUuaW5kZXhPZihlKSxpPWFlLnNsaWNlKG8rMSkuY29uY2F0KGFlLnNsaWNlKDAsbykpO3JldHVybiB0P2kucmV2ZXJzZSgpOml9ZnVuY3Rpb24gVihlLHQsbyxpKXt2YXIgbj1lLm1hdGNoKC8oKD86XC18XCspP1xkKlwuP1xkKikoLiopLykscj0rblsxXSxwPW5bMl07aWYoIXIpcmV0dXJuIGU7aWYoMD09PXAuaW5kZXhPZignJScpKXt2YXIgcztzd2l0Y2gocCl7Y2FzZSclcCc6cz1vO2JyZWFrO2Nhc2UnJSc6Y2FzZSclcic6ZGVmYXVsdDpzPWk7fXZhciBkPWMocyk7cmV0dXJuIGRbdF0vMTAwKnJ9aWYoJ3ZoJz09PXB8fCd2dyc9PT1wKXt2YXIgYTtyZXR1cm4gYT0ndmgnPT09cD9KKGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5jbGllbnRIZWlnaHQsd2luZG93LmlubmVySGVpZ2h0fHwwKTpKKGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5jbGllbnRXaWR0aCx3aW5kb3cuaW5uZXJXaWR0aHx8MCksYS8xMDAqcn1yZXR1cm4gcn1mdW5jdGlvbiB6KGUsdCxvLGkpe3ZhciBuPVswLDBdLHI9LTEhPT1bJ3JpZ2h0JywnbGVmdCddLmluZGV4T2YoaSkscD1lLnNwbGl0KC8oXCt8XC0pLykubWFwKGZ1bmN0aW9uKGUpe3JldHVybiBlLnRyaW0oKX0pLHM9cC5pbmRleE9mKFQocCxmdW5jdGlvbihlKXtyZXR1cm4tMSE9PWUuc2VhcmNoKC8sfFxzLyl9KSk7cFtzXSYmLTE9PT1wW3NdLmluZGV4T2YoJywnKSYmY29uc29sZS53YXJuKCdPZmZzZXRzIHNlcGFyYXRlZCBieSB3aGl0ZSBzcGFjZShzKSBhcmUgZGVwcmVjYXRlZCwgdXNlIGEgY29tbWEgKCwpIGluc3RlYWQuJyk7dmFyIGQ9L1xzKixccyp8XHMrLyxhPS0xPT09cz9bcF06W3Auc2xpY2UoMCxzKS5jb25jYXQoW3Bbc10uc3BsaXQoZClbMF1dKSxbcFtzXS5zcGxpdChkKVsxXV0uY29uY2F0KHAuc2xpY2UocysxKSldO3JldHVybiBhPWEubWFwKGZ1bmN0aW9uKGUsaSl7dmFyIG49KDE9PT1pPyFyOnIpPydoZWlnaHQnOid3aWR0aCcscD0hMTtyZXR1cm4gZS5yZWR1Y2UoZnVuY3Rpb24oZSx0KXtyZXR1cm4nJz09PWVbZS5sZW5ndGgtMV0mJi0xIT09WycrJywnLSddLmluZGV4T2YodCk/KGVbZS5sZW5ndGgtMV09dCxwPSEwLGUpOnA/KGVbZS5sZW5ndGgtMV0rPXQscD0hMSxlKTplLmNvbmNhdCh0KX0sW10pLm1hcChmdW5jdGlvbihlKXtyZXR1cm4gVihlLG4sdCxvKX0pfSksYS5mb3JFYWNoKGZ1bmN0aW9uKGUsdCl7ZS5mb3JFYWNoKGZ1bmN0aW9uKG8saSl7VShvKSYmKG5bdF0rPW8qKCctJz09PWVbaS0xXT8tMToxKSl9KX0pLG59ZnVuY3Rpb24gRyhlLHQpe3ZhciBvLGk9dC5vZmZzZXQsbj1lLnBsYWNlbWVudCxyPWUub2Zmc2V0cyxwPXIucG9wcGVyLHM9ci5yZWZlcmVuY2UsZD1uLnNwbGl0KCctJylbMF07cmV0dXJuIG89VSgraSk/WytpLDBdOnooaSxwLHMsZCksJ2xlZnQnPT09ZD8ocC50b3ArPW9bMF0scC5sZWZ0LT1vWzFdKToncmlnaHQnPT09ZD8ocC50b3ArPW9bMF0scC5sZWZ0Kz1vWzFdKTondG9wJz09PWQ/KHAubGVmdCs9b1swXSxwLnRvcC09b1sxXSk6J2JvdHRvbSc9PT1kJiYocC5sZWZ0Kz1vWzBdLHAudG9wKz1vWzFdKSxlLnBvcHBlcj1wLGV9Zm9yKHZhciBfPU1hdGgubWluLFg9TWF0aC5mbG9vcixKPU1hdGgubWF4LFE9J3VuZGVmaW5lZCchPXR5cGVvZiB3aW5kb3cmJid1bmRlZmluZWQnIT10eXBlb2YgZG9jdW1lbnQsWj1bJ0VkZ2UnLCdUcmlkZW50JywnRmlyZWZveCddLCQ9MCxlZT0wO2VlPFoubGVuZ3RoO2VlKz0xKWlmKFEmJjA8PW5hdmlnYXRvci51c2VyQWdlbnQuaW5kZXhPZihaW2VlXSkpeyQ9MTticmVha312YXIgaSx0ZT1RJiZ3aW5kb3cuUHJvbWlzZSxvZT10ZT9mdW5jdGlvbihlKXt2YXIgdD0hMTtyZXR1cm4gZnVuY3Rpb24oKXt0fHwodD0hMCx3aW5kb3cuUHJvbWlzZS5yZXNvbHZlKCkudGhlbihmdW5jdGlvbigpe3Q9ITEsZSgpfSkpfX06ZnVuY3Rpb24oZSl7dmFyIHQ9ITE7cmV0dXJuIGZ1bmN0aW9uKCl7dHx8KHQ9ITAsc2V0VGltZW91dChmdW5jdGlvbigpe3Q9ITEsZSgpfSwkKSl9fSxpZT1mdW5jdGlvbigpe3JldHVybiB2b2lkIDA9PWkmJihpPS0xIT09bmF2aWdhdG9yLmFwcFZlcnNpb24uaW5kZXhPZignTVNJRSAxMCcpKSxpfSxuZT1mdW5jdGlvbihlLHQpe2lmKCEoZSBpbnN0YW5jZW9mIHQpKXRocm93IG5ldyBUeXBlRXJyb3IoJ0Nhbm5vdCBjYWxsIGEgY2xhc3MgYXMgYSBmdW5jdGlvbicpfSxyZT1mdW5jdGlvbigpe2Z1bmN0aW9uIGUoZSx0KXtmb3IodmFyIG8sbj0wO248dC5sZW5ndGg7bisrKW89dFtuXSxvLmVudW1lcmFibGU9by5lbnVtZXJhYmxlfHwhMSxvLmNvbmZpZ3VyYWJsZT0hMCwndmFsdWUnaW4gbyYmKG8ud3JpdGFibGU9ITApLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLG8ua2V5LG8pfXJldHVybiBmdW5jdGlvbih0LG8saSl7cmV0dXJuIG8mJmUodC5wcm90b3R5cGUsbyksaSYmZSh0LGkpLHR9fSgpLHBlPWZ1bmN0aW9uKGUsdCxvKXtyZXR1cm4gdCBpbiBlP09iamVjdC5kZWZpbmVQcm9wZXJ0eShlLHQse3ZhbHVlOm8sZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITB9KTplW3RdPW8sZX0sc2U9T2JqZWN0LmFzc2lnbnx8ZnVuY3Rpb24oZSl7Zm9yKHZhciB0LG89MTtvPGFyZ3VtZW50cy5sZW5ndGg7bysrKWZvcih2YXIgaSBpbiB0PWFyZ3VtZW50c1tvXSx0KU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbCh0LGkpJiYoZVtpXT10W2ldKTtyZXR1cm4gZX0sZGU9WydhdXRvLXN0YXJ0JywnYXV0bycsJ2F1dG8tZW5kJywndG9wLXN0YXJ0JywndG9wJywndG9wLWVuZCcsJ3JpZ2h0LXN0YXJ0JywncmlnaHQnLCdyaWdodC1lbmQnLCdib3R0b20tZW5kJywnYm90dG9tJywnYm90dG9tLXN0YXJ0JywnbGVmdC1lbmQnLCdsZWZ0JywnbGVmdC1zdGFydCddLGFlPWRlLnNsaWNlKDMpLGxlPXtGTElQOidmbGlwJyxDTE9DS1dJU0U6J2Nsb2Nrd2lzZScsQ09VTlRFUkNMT0NLV0lTRTonY291bnRlcmNsb2Nrd2lzZSd9LGZlPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdChvLGkpe3ZhciBuPXRoaXMscj0yPGFyZ3VtZW50cy5sZW5ndGgmJnZvaWQgMCE9PWFyZ3VtZW50c1syXT9hcmd1bWVudHNbMl06e307bmUodGhpcyx0KSx0aGlzLnNjaGVkdWxlVXBkYXRlPWZ1bmN0aW9uKCl7cmV0dXJuIHJlcXVlc3RBbmltYXRpb25GcmFtZShuLnVwZGF0ZSl9LHRoaXMudXBkYXRlPW9lKHRoaXMudXBkYXRlLmJpbmQodGhpcykpLHRoaXMub3B0aW9ucz1zZSh7fSx0LkRlZmF1bHRzLHIpLHRoaXMuc3RhdGU9e2lzRGVzdHJveWVkOiExLGlzQ3JlYXRlZDohMSxzY3JvbGxQYXJlbnRzOltdfSx0aGlzLnJlZmVyZW5jZT1vJiZvLmpxdWVyeT9vWzBdOm8sdGhpcy5wb3BwZXI9aSYmaS5qcXVlcnk/aVswXTppLHRoaXMub3B0aW9ucy5tb2RpZmllcnM9e30sT2JqZWN0LmtleXMoc2Uoe30sdC5EZWZhdWx0cy5tb2RpZmllcnMsci5tb2RpZmllcnMpKS5mb3JFYWNoKGZ1bmN0aW9uKGUpe24ub3B0aW9ucy5tb2RpZmllcnNbZV09c2Uoe30sdC5EZWZhdWx0cy5tb2RpZmllcnNbZV18fHt9LHIubW9kaWZpZXJzP3IubW9kaWZpZXJzW2VdOnt9KX0pLHRoaXMubW9kaWZpZXJzPU9iamVjdC5rZXlzKHRoaXMub3B0aW9ucy5tb2RpZmllcnMpLm1hcChmdW5jdGlvbihlKXtyZXR1cm4gc2Uoe25hbWU6ZX0sbi5vcHRpb25zLm1vZGlmaWVyc1tlXSl9KS5zb3J0KGZ1bmN0aW9uKGUsdCl7cmV0dXJuIGUub3JkZXItdC5vcmRlcn0pLHRoaXMubW9kaWZpZXJzLmZvckVhY2goZnVuY3Rpb24odCl7dC5lbmFibGVkJiZlKHQub25Mb2FkKSYmdC5vbkxvYWQobi5yZWZlcmVuY2Usbi5wb3BwZXIsbi5vcHRpb25zLHQsbi5zdGF0ZSl9KSx0aGlzLnVwZGF0ZSgpO3ZhciBwPXRoaXMub3B0aW9ucy5ldmVudHNFbmFibGVkO3AmJnRoaXMuZW5hYmxlRXZlbnRMaXN0ZW5lcnMoKSx0aGlzLnN0YXRlLmV2ZW50c0VuYWJsZWQ9cH1yZXR1cm4gcmUodCxbe2tleTondXBkYXRlJyx2YWx1ZTpmdW5jdGlvbigpe3JldHVybiBOLmNhbGwodGhpcyl9fSx7a2V5OidkZXN0cm95Jyx2YWx1ZTpmdW5jdGlvbigpe3JldHVybiBQLmNhbGwodGhpcyl9fSx7a2V5OidlbmFibGVFdmVudExpc3RlbmVycycsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4gSS5jYWxsKHRoaXMpfX0se2tleTonZGlzYWJsZUV2ZW50TGlzdGVuZXJzJyx2YWx1ZTpmdW5jdGlvbigpe3JldHVybiBSLmNhbGwodGhpcyl9fV0pLHR9KCk7cmV0dXJuIGZlLlV0aWxzPSgndW5kZWZpbmVkJz09dHlwZW9mIHdpbmRvdz9nbG9iYWw6d2luZG93KS5Qb3BwZXJVdGlscyxmZS5wbGFjZW1lbnRzPWRlLGZlLkRlZmF1bHRzPXtwbGFjZW1lbnQ6J2JvdHRvbScsZXZlbnRzRW5hYmxlZDohMCxyZW1vdmVPbkRlc3Ryb3k6ITEsb25DcmVhdGU6ZnVuY3Rpb24oKXt9LG9uVXBkYXRlOmZ1bmN0aW9uKCl7fSxtb2RpZmllcnM6e3NoaWZ0OntvcmRlcjoxMDAsZW5hYmxlZDohMCxmbjpmdW5jdGlvbihlKXt2YXIgdD1lLnBsYWNlbWVudCxvPXQuc3BsaXQoJy0nKVswXSxpPXQuc3BsaXQoJy0nKVsxXTtpZihpKXt2YXIgbj1lLm9mZnNldHMscj1uLnJlZmVyZW5jZSxwPW4ucG9wcGVyLHM9LTEhPT1bJ2JvdHRvbScsJ3RvcCddLmluZGV4T2YobyksZD1zPydsZWZ0JzondG9wJyxhPXM/J3dpZHRoJzonaGVpZ2h0JyxsPXtzdGFydDpwZSh7fSxkLHJbZF0pLGVuZDpwZSh7fSxkLHJbZF0rclthXS1wW2FdKX07ZS5vZmZzZXRzLnBvcHBlcj1zZSh7fSxwLGxbaV0pfXJldHVybiBlfX0sb2Zmc2V0OntvcmRlcjoyMDAsZW5hYmxlZDohMCxmbjpHLG9mZnNldDowfSxwcmV2ZW50T3ZlcmZsb3c6e29yZGVyOjMwMCxlbmFibGVkOiEwLGZuOmZ1bmN0aW9uKGUsdCl7dmFyIG89dC5ib3VuZGFyaWVzRWxlbWVudHx8cihlLmluc3RhbmNlLnBvcHBlcik7ZS5pbnN0YW5jZS5yZWZlcmVuY2U9PT1vJiYobz1yKG8pKTt2YXIgaT15KGUuaW5zdGFuY2UucG9wcGVyLGUuaW5zdGFuY2UucmVmZXJlbmNlLHQucGFkZGluZyxvKTt0LmJvdW5kYXJpZXM9aTt2YXIgbj10LnByaW9yaXR5LHA9ZS5vZmZzZXRzLnBvcHBlcixzPXtwcmltYXJ5OmZ1bmN0aW9uKGUpe3ZhciBvPXBbZV07cmV0dXJuIHBbZV08aVtlXSYmIXQuZXNjYXBlV2l0aFJlZmVyZW5jZSYmKG89SihwW2VdLGlbZV0pKSxwZSh7fSxlLG8pfSxzZWNvbmRhcnk6ZnVuY3Rpb24oZSl7dmFyIG89J3JpZ2h0Jz09PWU/J2xlZnQnOid0b3AnLG49cFtvXTtyZXR1cm4gcFtlXT5pW2VdJiYhdC5lc2NhcGVXaXRoUmVmZXJlbmNlJiYobj1fKHBbb10saVtlXS0oJ3JpZ2h0Jz09PWU/cC53aWR0aDpwLmhlaWdodCkpKSxwZSh7fSxvLG4pfX07cmV0dXJuIG4uZm9yRWFjaChmdW5jdGlvbihlKXt2YXIgdD0tMT09PVsnbGVmdCcsJ3RvcCddLmluZGV4T2YoZSk/J3NlY29uZGFyeSc6J3ByaW1hcnknO3A9c2Uoe30scCxzW3RdKGUpKX0pLGUub2Zmc2V0cy5wb3BwZXI9cCxlfSxwcmlvcml0eTpbJ2xlZnQnLCdyaWdodCcsJ3RvcCcsJ2JvdHRvbSddLHBhZGRpbmc6NSxib3VuZGFyaWVzRWxlbWVudDonc2Nyb2xsUGFyZW50J30sa2VlcFRvZ2V0aGVyOntvcmRlcjo0MDAsZW5hYmxlZDohMCxmbjpmdW5jdGlvbihlKXt2YXIgdD1lLm9mZnNldHMsbz10LnBvcHBlcixpPXQucmVmZXJlbmNlLG49ZS5wbGFjZW1lbnQuc3BsaXQoJy0nKVswXSxyPVgscD0tMSE9PVsndG9wJywnYm90dG9tJ10uaW5kZXhPZihuKSxzPXA/J3JpZ2h0JzonYm90dG9tJyxkPXA/J2xlZnQnOid0b3AnLGE9cD8nd2lkdGgnOidoZWlnaHQnO3JldHVybiBvW3NdPHIoaVtkXSkmJihlLm9mZnNldHMucG9wcGVyW2RdPXIoaVtkXSktb1thXSksb1tkXT5yKGlbc10pJiYoZS5vZmZzZXRzLnBvcHBlcltkXT1yKGlbc10pKSxlfX0sYXJyb3c6e29yZGVyOjUwMCxlbmFibGVkOiEwLGZuOmZ1bmN0aW9uKGUsbyl7dmFyIGk7aWYoIUYoZS5pbnN0YW5jZS5tb2RpZmllcnMsJ2Fycm93Jywna2VlcFRvZ2V0aGVyJykpcmV0dXJuIGU7dmFyIG49by5lbGVtZW50O2lmKCdzdHJpbmcnPT10eXBlb2Ygbil7aWYobj1lLmluc3RhbmNlLnBvcHBlci5xdWVyeVNlbGVjdG9yKG4pLCFuKXJldHVybiBlO31lbHNlIGlmKCFlLmluc3RhbmNlLnBvcHBlci5jb250YWlucyhuKSlyZXR1cm4gY29uc29sZS53YXJuKCdXQVJOSU5HOiBgYXJyb3cuZWxlbWVudGAgbXVzdCBiZSBjaGlsZCBvZiBpdHMgcG9wcGVyIGVsZW1lbnQhJyksZTt2YXIgcj1lLnBsYWNlbWVudC5zcGxpdCgnLScpWzBdLHA9ZS5vZmZzZXRzLHM9cC5wb3BwZXIsZD1wLnJlZmVyZW5jZSxhPS0xIT09WydsZWZ0JywncmlnaHQnXS5pbmRleE9mKHIpLGw9YT8naGVpZ2h0Jzond2lkdGgnLGY9YT8nVG9wJzonTGVmdCcsbT1mLnRvTG93ZXJDYXNlKCksaD1hPydsZWZ0JzondG9wJyxnPWE/J2JvdHRvbSc6J3JpZ2h0Jyx1PUwobilbbF07ZFtnXS11PHNbbV0mJihlLm9mZnNldHMucG9wcGVyW21dLT1zW21dLShkW2ddLXUpKSxkW21dK3U+c1tnXSYmKGUub2Zmc2V0cy5wb3BwZXJbbV0rPWRbbV0rdS1zW2ddKSxlLm9mZnNldHMucG9wcGVyPWMoZS5vZmZzZXRzLnBvcHBlcik7dmFyIGI9ZFttXStkW2xdLzItdS8yLHc9dChlLmluc3RhbmNlLnBvcHBlcikseT1wYXJzZUZsb2F0KHdbJ21hcmdpbicrZl0sMTApLEU9cGFyc2VGbG9hdCh3Wydib3JkZXInK2YrJ1dpZHRoJ10sMTApLHY9Yi1lLm9mZnNldHMucG9wcGVyW21dLXktRTtyZXR1cm4gdj1KKF8oc1tsXS11LHYpLDApLGUuYXJyb3dFbGVtZW50PW4sZS5vZmZzZXRzLmFycm93PShpPXt9LHBlKGksbSxNYXRoLnJvdW5kKHYpKSxwZShpLGgsJycpLGkpLGV9LGVsZW1lbnQ6J1t4LWFycm93XSd9LGZsaXA6e29yZGVyOjYwMCxlbmFibGVkOiEwLGZuOmZ1bmN0aW9uKGUsdCl7aWYoayhlLmluc3RhbmNlLm1vZGlmaWVycywnaW5uZXInKSlyZXR1cm4gZTtpZihlLmZsaXBwZWQmJmUucGxhY2VtZW50PT09ZS5vcmlnaW5hbFBsYWNlbWVudClyZXR1cm4gZTt2YXIgbz15KGUuaW5zdGFuY2UucG9wcGVyLGUuaW5zdGFuY2UucmVmZXJlbmNlLHQucGFkZGluZyx0LmJvdW5kYXJpZXNFbGVtZW50KSxpPWUucGxhY2VtZW50LnNwbGl0KCctJylbMF0sbj14KGkpLHI9ZS5wbGFjZW1lbnQuc3BsaXQoJy0nKVsxXXx8JycscD1bXTtzd2l0Y2godC5iZWhhdmlvcil7Y2FzZSBsZS5GTElQOnA9W2ksbl07YnJlYWs7Y2FzZSBsZS5DTE9DS1dJU0U6cD1xKGkpO2JyZWFrO2Nhc2UgbGUuQ09VTlRFUkNMT0NLV0lTRTpwPXEoaSwhMCk7YnJlYWs7ZGVmYXVsdDpwPXQuYmVoYXZpb3I7fXJldHVybiBwLmZvckVhY2goZnVuY3Rpb24ocyxkKXtpZihpIT09c3x8cC5sZW5ndGg9PT1kKzEpcmV0dXJuIGU7aT1lLnBsYWNlbWVudC5zcGxpdCgnLScpWzBdLG49eChpKTt2YXIgYT1lLm9mZnNldHMucG9wcGVyLGw9ZS5vZmZzZXRzLnJlZmVyZW5jZSxmPVgsbT0nbGVmdCc9PT1pJiZmKGEucmlnaHQpPmYobC5sZWZ0KXx8J3JpZ2h0Jz09PWkmJmYoYS5sZWZ0KTxmKGwucmlnaHQpfHwndG9wJz09PWkmJmYoYS5ib3R0b20pPmYobC50b3ApfHwnYm90dG9tJz09PWkmJmYoYS50b3ApPGYobC5ib3R0b20pLGg9ZihhLmxlZnQpPGYoby5sZWZ0KSxjPWYoYS5yaWdodCk+ZihvLnJpZ2h0KSxnPWYoYS50b3ApPGYoby50b3ApLHU9ZihhLmJvdHRvbSk+ZihvLmJvdHRvbSksYj0nbGVmdCc9PT1pJiZofHwncmlnaHQnPT09aSYmY3x8J3RvcCc9PT1pJiZnfHwnYm90dG9tJz09PWkmJnUsdz0tMSE9PVsndG9wJywnYm90dG9tJ10uaW5kZXhPZihpKSx5PSEhdC5mbGlwVmFyaWF0aW9ucyYmKHcmJidzdGFydCc9PT1yJiZofHx3JiYnZW5kJz09PXImJmN8fCF3JiYnc3RhcnQnPT09ciYmZ3x8IXcmJidlbmQnPT09ciYmdSk7KG18fGJ8fHkpJiYoZS5mbGlwcGVkPSEwLChtfHxiKSYmKGk9cFtkKzFdKSx5JiYocj1LKHIpKSxlLnBsYWNlbWVudD1pKyhyPyctJytyOicnKSxlLm9mZnNldHMucG9wcGVyPXNlKHt9LGUub2Zmc2V0cy5wb3BwZXIsUyhlLmluc3RhbmNlLnBvcHBlcixlLm9mZnNldHMucmVmZXJlbmNlLGUucGxhY2VtZW50KSksZT1DKGUuaW5zdGFuY2UubW9kaWZpZXJzLGUsJ2ZsaXAnKSl9KSxlfSxiZWhhdmlvcjonZmxpcCcscGFkZGluZzo1LGJvdW5kYXJpZXNFbGVtZW50Oid2aWV3cG9ydCd9LGlubmVyOntvcmRlcjo3MDAsZW5hYmxlZDohMSxmbjpmdW5jdGlvbihlKXt2YXIgdD1lLnBsYWNlbWVudCxvPXQuc3BsaXQoJy0nKVswXSxpPWUub2Zmc2V0cyxuPWkucG9wcGVyLHI9aS5yZWZlcmVuY2UscD0tMSE9PVsnbGVmdCcsJ3JpZ2h0J10uaW5kZXhPZihvKSxzPS0xPT09Wyd0b3AnLCdsZWZ0J10uaW5kZXhPZihvKTtyZXR1cm4gbltwPydsZWZ0JzondG9wJ109cltvXS0ocz9uW3A/J3dpZHRoJzonaGVpZ2h0J106MCksZS5wbGFjZW1lbnQ9eCh0KSxlLm9mZnNldHMucG9wcGVyPWMobiksZX19LGhpZGU6e29yZGVyOjgwMCxlbmFibGVkOiEwLGZuOmZ1bmN0aW9uKGUpe2lmKCFGKGUuaW5zdGFuY2UubW9kaWZpZXJzLCdoaWRlJywncHJldmVudE92ZXJmbG93JykpcmV0dXJuIGU7dmFyIHQ9ZS5vZmZzZXRzLnJlZmVyZW5jZSxvPVQoZS5pbnN0YW5jZS5tb2RpZmllcnMsZnVuY3Rpb24oZSl7cmV0dXJuJ3ByZXZlbnRPdmVyZmxvdyc9PT1lLm5hbWV9KS5ib3VuZGFyaWVzO2lmKHQuYm90dG9tPG8udG9wfHx0LmxlZnQ+by5yaWdodHx8dC50b3A+by5ib3R0b218fHQucmlnaHQ8by5sZWZ0KXtpZighMD09PWUuaGlkZSlyZXR1cm4gZTtlLmhpZGU9ITAsZS5hdHRyaWJ1dGVzWyd4LW91dC1vZi1ib3VuZGFyaWVzJ109Jyd9ZWxzZXtpZighMT09PWUuaGlkZSlyZXR1cm4gZTtlLmhpZGU9ITEsZS5hdHRyaWJ1dGVzWyd4LW91dC1vZi1ib3VuZGFyaWVzJ109ITF9cmV0dXJuIGV9fSxjb21wdXRlU3R5bGU6e29yZGVyOjg1MCxlbmFibGVkOiEwLGZuOmZ1bmN0aW9uKGUsdCl7dmFyIG89dC54LGk9dC55LG49ZS5vZmZzZXRzLnBvcHBlcixwPVQoZS5pbnN0YW5jZS5tb2RpZmllcnMsZnVuY3Rpb24oZSl7cmV0dXJuJ2FwcGx5U3R5bGUnPT09ZS5uYW1lfSkuZ3B1QWNjZWxlcmF0aW9uO3ZvaWQgMCE9PXAmJmNvbnNvbGUud2FybignV0FSTklORzogYGdwdUFjY2VsZXJhdGlvbmAgb3B0aW9uIG1vdmVkIHRvIGBjb21wdXRlU3R5bGVgIG1vZGlmaWVyIGFuZCB3aWxsIG5vdCBiZSBzdXBwb3J0ZWQgaW4gZnV0dXJlIHZlcnNpb25zIG9mIFBvcHBlci5qcyEnKTt2YXIgcyxkLGE9dm9pZCAwPT09cD90LmdwdUFjY2VsZXJhdGlvbjpwLGw9cihlLmluc3RhbmNlLnBvcHBlciksZj1nKGwpLG09e3Bvc2l0aW9uOm4ucG9zaXRpb259LGg9e2xlZnQ6WChuLmxlZnQpLHRvcDpYKG4udG9wKSxib3R0b206WChuLmJvdHRvbSkscmlnaHQ6WChuLnJpZ2h0KX0sYz0nYm90dG9tJz09PW8/J3RvcCc6J2JvdHRvbScsdT0ncmlnaHQnPT09aT8nbGVmdCc6J3JpZ2h0JyxiPVcoJ3RyYW5zZm9ybScpO2lmKGQ9J2JvdHRvbSc9PWM/LWYuaGVpZ2h0K2guYm90dG9tOmgudG9wLHM9J3JpZ2h0Jz09dT8tZi53aWR0aCtoLnJpZ2h0OmgubGVmdCxhJiZiKW1bYl09J3RyYW5zbGF0ZTNkKCcrcysncHgsICcrZCsncHgsIDApJyxtW2NdPTAsbVt1XT0wLG0ud2lsbENoYW5nZT0ndHJhbnNmb3JtJztlbHNle3ZhciB3PSdib3R0b20nPT1jPy0xOjEseT0ncmlnaHQnPT11Py0xOjE7bVtjXT1kKncsbVt1XT1zKnksbS53aWxsQ2hhbmdlPWMrJywgJyt1fXZhciBFPXsieC1wbGFjZW1lbnQiOmUucGxhY2VtZW50fTtyZXR1cm4gZS5hdHRyaWJ1dGVzPXNlKHt9LEUsZS5hdHRyaWJ1dGVzKSxlLnN0eWxlcz1zZSh7fSxtLGUuc3R5bGVzKSxlLmFycm93U3R5bGVzPXNlKHt9LGUub2Zmc2V0cy5hcnJvdyxlLmFycm93U3R5bGVzKSxlfSxncHVBY2NlbGVyYXRpb246ITAseDonYm90dG9tJyx5OidyaWdodCd9LGFwcGx5U3R5bGU6e29yZGVyOjkwMCxlbmFibGVkOiEwLGZuOmZ1bmN0aW9uKGUpe3JldHVybiBZKGUuaW5zdGFuY2UucG9wcGVyLGUuc3R5bGVzKSxqKGUuaW5zdGFuY2UucG9wcGVyLGUuYXR0cmlidXRlcyksZS5hcnJvd0VsZW1lbnQmJk9iamVjdC5rZXlzKGUuYXJyb3dTdHlsZXMpLmxlbmd0aCYmWShlLmFycm93RWxlbWVudCxlLmFycm93U3R5bGVzKSxlfSxvbkxvYWQ6ZnVuY3Rpb24oZSx0LG8saSxuKXt2YXIgcj1PKG4sdCxlKSxwPXYoby5wbGFjZW1lbnQscix0LGUsby5tb2RpZmllcnMuZmxpcC5ib3VuZGFyaWVzRWxlbWVudCxvLm1vZGlmaWVycy5mbGlwLnBhZGRpbmcpO3JldHVybiB0LnNldEF0dHJpYnV0ZSgneC1wbGFjZW1lbnQnLHApLFkodCx7cG9zaXRpb246J2Fic29sdXRlJ30pLG99LGdwdUFjY2VsZXJhdGlvbjp2b2lkIDB9fX0sZmV9KTsKLy8jIHNvdXJjZU1hcHBpbmdVUkw9cG9wcGVyLm1pbi5qcy5tYXAK"></script>
<script src="data:application/javascript;base64,LyohCiAgKiBCb290c3RyYXAgdjQuMC4wIChodHRwczovL2dldGJvb3RzdHJhcC5jb20pCiAgKiBDb3B5cmlnaHQgMjAxMS0yMDE4IFRoZSBCb290c3RyYXAgQXV0aG9ycyAoaHR0cHM6Ly9naXRodWIuY29tL3R3YnMvYm9vdHN0cmFwL2dyYXBocy9jb250cmlidXRvcnMpCiAgKiBMaWNlbnNlZCB1bmRlciBNSVQgKGh0dHBzOi8vZ2l0aHViLmNvbS90d2JzL2Jvb3RzdHJhcC9ibG9iL21hc3Rlci9MSUNFTlNFKQogICovCiFmdW5jdGlvbih0LGUpeyJvYmplY3QiPT10eXBlb2YgZXhwb3J0cyYmInVuZGVmaW5lZCIhPXR5cGVvZiBtb2R1bGU/ZShleHBvcnRzLHJlcXVpcmUoImpxdWVyeSIpLHJlcXVpcmUoInBvcHBlci5qcyIpKToiZnVuY3Rpb24iPT10eXBlb2YgZGVmaW5lJiZkZWZpbmUuYW1kP2RlZmluZShbImV4cG9ydHMiLCJqcXVlcnkiLCJwb3BwZXIuanMiXSxlKTplKHQuYm9vdHN0cmFwPXt9LHQualF1ZXJ5LHQuUG9wcGVyKX0odGhpcyxmdW5jdGlvbih0LGUsbil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIGkodCxlKXtmb3IodmFyIG49MDtuPGUubGVuZ3RoO24rKyl7dmFyIGk9ZVtuXTtpLmVudW1lcmFibGU9aS5lbnVtZXJhYmxlfHwhMSxpLmNvbmZpZ3VyYWJsZT0hMCwidmFsdWUiaW4gaSYmKGkud3JpdGFibGU9ITApLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LGkua2V5LGkpfX1mdW5jdGlvbiBzKHQsZSxuKXtyZXR1cm4gZSYmaSh0LnByb3RvdHlwZSxlKSxuJiZpKHQsbiksdH1mdW5jdGlvbiByKCl7cmV0dXJuKHI9T2JqZWN0LmFzc2lnbnx8ZnVuY3Rpb24odCl7Zm9yKHZhciBlPTE7ZTxhcmd1bWVudHMubGVuZ3RoO2UrKyl7dmFyIG49YXJndW1lbnRzW2VdO2Zvcih2YXIgaSBpbiBuKU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChuLGkpJiYodFtpXT1uW2ldKX1yZXR1cm4gdH0pLmFwcGx5KHRoaXMsYXJndW1lbnRzKX1lPWUmJmUuaGFzT3duUHJvcGVydHkoImRlZmF1bHQiKT9lLmRlZmF1bHQ6ZSxuPW4mJm4uaGFzT3duUHJvcGVydHkoImRlZmF1bHQiKT9uLmRlZmF1bHQ6bjt2YXIgbyxhLGwsaCxjLHUsZixkLF8sZyxwLG0sdixFLFQseSxDLEksQSxiLEQsUyx3LE4sTyxrLFA9ZnVuY3Rpb24odCl7dmFyIGU9ITE7ZnVuY3Rpb24gbihlKXt2YXIgbj10aGlzLHM9ITE7cmV0dXJuIHQodGhpcykub25lKGkuVFJBTlNJVElPTl9FTkQsZnVuY3Rpb24oKXtzPSEwfSksc2V0VGltZW91dChmdW5jdGlvbigpe3N8fGkudHJpZ2dlclRyYW5zaXRpb25FbmQobil9LGUpLHRoaXN9dmFyIGk9e1RSQU5TSVRJT05fRU5EOiJic1RyYW5zaXRpb25FbmQiLGdldFVJRDpmdW5jdGlvbih0KXtkb3t0Kz1+figxZTYqTWF0aC5yYW5kb20oKSl9d2hpbGUoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQodCkpO3JldHVybiB0fSxnZXRTZWxlY3RvckZyb21FbGVtZW50OmZ1bmN0aW9uKGUpe3ZhciBuLGk9ZS5nZXRBdHRyaWJ1dGUoImRhdGEtdGFyZ2V0Iik7aSYmIiMiIT09aXx8KGk9ZS5nZXRBdHRyaWJ1dGUoImhyZWYiKXx8IiIpLCIjIj09PWkuY2hhckF0KDApJiYobj1pLGk9bj0iZnVuY3Rpb24iPT10eXBlb2YgdC5lc2NhcGVTZWxlY3Rvcj90LmVzY2FwZVNlbGVjdG9yKG4pLnN1YnN0cigxKTpuLnJlcGxhY2UoLyg6fFwufFxbfFxdfCx8PXxAKS9nLCJcXCQxIikpO3RyeXtyZXR1cm4gdChkb2N1bWVudCkuZmluZChpKS5sZW5ndGg+MD9pOm51bGx9Y2F0Y2godCl7cmV0dXJuIG51bGx9fSxyZWZsb3c6ZnVuY3Rpb24odCl7cmV0dXJuIHQub2Zmc2V0SGVpZ2h0fSx0cmlnZ2VyVHJhbnNpdGlvbkVuZDpmdW5jdGlvbihuKXt0KG4pLnRyaWdnZXIoZS5lbmQpfSxzdXBwb3J0c1RyYW5zaXRpb25FbmQ6ZnVuY3Rpb24oKXtyZXR1cm4gQm9vbGVhbihlKX0saXNFbGVtZW50OmZ1bmN0aW9uKHQpe3JldHVybih0WzBdfHx0KS5ub2RlVHlwZX0sdHlwZUNoZWNrQ29uZmlnOmZ1bmN0aW9uKHQsZSxuKXtmb3IodmFyIHMgaW4gbilpZihPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwobixzKSl7dmFyIHI9bltzXSxvPWVbc10sYT1vJiZpLmlzRWxlbWVudChvKT8iZWxlbWVudCI6KGw9byx7fS50b1N0cmluZy5jYWxsKGwpLm1hdGNoKC9ccyhbYS16QS1aXSspLylbMV0udG9Mb3dlckNhc2UoKSk7aWYoIW5ldyBSZWdFeHAocikudGVzdChhKSl0aHJvdyBuZXcgRXJyb3IodC50b1VwcGVyQ2FzZSgpKyc6IE9wdGlvbiAiJytzKyciIHByb3ZpZGVkIHR5cGUgIicrYSsnIiBidXQgZXhwZWN0ZWQgdHlwZSAiJytyKyciLicpfXZhciBsfX07cmV0dXJuIGU9KCJ1bmRlZmluZWQiPT10eXBlb2Ygd2luZG93fHwhd2luZG93LlFVbml0KSYme2VuZDoidHJhbnNpdGlvbmVuZCJ9LHQuZm4uZW11bGF0ZVRyYW5zaXRpb25FbmQ9bixpLnN1cHBvcnRzVHJhbnNpdGlvbkVuZCgpJiYodC5ldmVudC5zcGVjaWFsW2kuVFJBTlNJVElPTl9FTkRdPXtiaW5kVHlwZTplLmVuZCxkZWxlZ2F0ZVR5cGU6ZS5lbmQsaGFuZGxlOmZ1bmN0aW9uKGUpe2lmKHQoZS50YXJnZXQpLmlzKHRoaXMpKXJldHVybiBlLmhhbmRsZU9iai5oYW5kbGVyLmFwcGx5KHRoaXMsYXJndW1lbnRzKX19KSxpfShlKSxMPShhPSJhbGVydCIsaD0iLiIrKGw9ImJzLmFsZXJ0IiksYz0obz1lKS5mblthXSx1PXtDTE9TRToiY2xvc2UiK2gsQ0xPU0VEOiJjbG9zZWQiK2gsQ0xJQ0tfREFUQV9BUEk6ImNsaWNrIitoKyIuZGF0YS1hcGkifSxmPSJhbGVydCIsZD0iZmFkZSIsXz0ic2hvdyIsZz1mdW5jdGlvbigpe2Z1bmN0aW9uIHQodCl7dGhpcy5fZWxlbWVudD10fXZhciBlPXQucHJvdG90eXBlO3JldHVybiBlLmNsb3NlPWZ1bmN0aW9uKHQpe3Q9dHx8dGhpcy5fZWxlbWVudDt2YXIgZT10aGlzLl9nZXRSb290RWxlbWVudCh0KTt0aGlzLl90cmlnZ2VyQ2xvc2VFdmVudChlKS5pc0RlZmF1bHRQcmV2ZW50ZWQoKXx8dGhpcy5fcmVtb3ZlRWxlbWVudChlKX0sZS5kaXNwb3NlPWZ1bmN0aW9uKCl7by5yZW1vdmVEYXRhKHRoaXMuX2VsZW1lbnQsbCksdGhpcy5fZWxlbWVudD1udWxsfSxlLl9nZXRSb290RWxlbWVudD1mdW5jdGlvbih0KXt2YXIgZT1QLmdldFNlbGVjdG9yRnJvbUVsZW1lbnQodCksbj0hMTtyZXR1cm4gZSYmKG49byhlKVswXSksbnx8KG49byh0KS5jbG9zZXN0KCIuIitmKVswXSksbn0sZS5fdHJpZ2dlckNsb3NlRXZlbnQ9ZnVuY3Rpb24odCl7dmFyIGU9by5FdmVudCh1LkNMT1NFKTtyZXR1cm4gbyh0KS50cmlnZ2VyKGUpLGV9LGUuX3JlbW92ZUVsZW1lbnQ9ZnVuY3Rpb24odCl7dmFyIGU9dGhpcztvKHQpLnJlbW92ZUNsYXNzKF8pLFAuc3VwcG9ydHNUcmFuc2l0aW9uRW5kKCkmJm8odCkuaGFzQ2xhc3MoZCk/byh0KS5vbmUoUC5UUkFOU0lUSU9OX0VORCxmdW5jdGlvbihuKXtyZXR1cm4gZS5fZGVzdHJveUVsZW1lbnQodCxuKX0pLmVtdWxhdGVUcmFuc2l0aW9uRW5kKDE1MCk6dGhpcy5fZGVzdHJveUVsZW1lbnQodCl9LGUuX2Rlc3Ryb3lFbGVtZW50PWZ1bmN0aW9uKHQpe28odCkuZGV0YWNoKCkudHJpZ2dlcih1LkNMT1NFRCkucmVtb3ZlKCl9LHQuX2pRdWVyeUludGVyZmFjZT1mdW5jdGlvbihlKXtyZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uKCl7dmFyIG49byh0aGlzKSxpPW4uZGF0YShsKTtpfHwoaT1uZXcgdCh0aGlzKSxuLmRhdGEobCxpKSksImNsb3NlIj09PWUmJmlbZV0odGhpcyl9KX0sdC5faGFuZGxlRGlzbWlzcz1mdW5jdGlvbih0KXtyZXR1cm4gZnVuY3Rpb24oZSl7ZSYmZS5wcmV2ZW50RGVmYXVsdCgpLHQuY2xvc2UodGhpcyl9fSxzKHQsbnVsbCxbe2tleToiVkVSU0lPTiIsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIjQuMC4wIn19XSksdH0oKSxvKGRvY3VtZW50KS5vbih1LkNMSUNLX0RBVEFfQVBJLCdbZGF0YS1kaXNtaXNzPSJhbGVydCJdJyxnLl9oYW5kbGVEaXNtaXNzKG5ldyBnKSksby5mblthXT1nLl9qUXVlcnlJbnRlcmZhY2Usby5mblthXS5Db25zdHJ1Y3Rvcj1nLG8uZm5bYV0ubm9Db25mbGljdD1mdW5jdGlvbigpe3JldHVybiBvLmZuW2FdPWMsZy5falF1ZXJ5SW50ZXJmYWNlfSxnKSxSPShtPSJidXR0b24iLEU9Ii4iKyh2PSJicy5idXR0b24iKSxUPSIuZGF0YS1hcGkiLHk9KHA9ZSkuZm5bbV0sQz0iYWN0aXZlIixJPSJidG4iLEE9ImZvY3VzIixiPSdbZGF0YS10b2dnbGVePSJidXR0b24iXScsRD0nW2RhdGEtdG9nZ2xlPSJidXR0b25zIl0nLFM9ImlucHV0Iix3PSIuYWN0aXZlIixOPSIuYnRuIixPPXtDTElDS19EQVRBX0FQSToiY2xpY2siK0UrVCxGT0NVU19CTFVSX0RBVEFfQVBJOiJmb2N1cyIrRStUKyIgYmx1ciIrRStUfSxrPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCh0KXt0aGlzLl9lbGVtZW50PXR9dmFyIGU9dC5wcm90b3R5cGU7cmV0dXJuIGUudG9nZ2xlPWZ1bmN0aW9uKCl7dmFyIHQ9ITAsZT0hMCxuPXAodGhpcy5fZWxlbWVudCkuY2xvc2VzdChEKVswXTtpZihuKXt2YXIgaT1wKHRoaXMuX2VsZW1lbnQpLmZpbmQoUylbMF07aWYoaSl7aWYoInJhZGlvIj09PWkudHlwZSlpZihpLmNoZWNrZWQmJnAodGhpcy5fZWxlbWVudCkuaGFzQ2xhc3MoQykpdD0hMTtlbHNle3ZhciBzPXAobikuZmluZCh3KVswXTtzJiZwKHMpLnJlbW92ZUNsYXNzKEMpfWlmKHQpe2lmKGkuaGFzQXR0cmlidXRlKCJkaXNhYmxlZCIpfHxuLmhhc0F0dHJpYnV0ZSgiZGlzYWJsZWQiKXx8aS5jbGFzc0xpc3QuY29udGFpbnMoImRpc2FibGVkIil8fG4uY2xhc3NMaXN0LmNvbnRhaW5zKCJkaXNhYmxlZCIpKXJldHVybjtpLmNoZWNrZWQ9IXAodGhpcy5fZWxlbWVudCkuaGFzQ2xhc3MoQykscChpKS50cmlnZ2VyKCJjaGFuZ2UiKX1pLmZvY3VzKCksZT0hMX19ZSYmdGhpcy5fZWxlbWVudC5zZXRBdHRyaWJ1dGUoImFyaWEtcHJlc3NlZCIsIXAodGhpcy5fZWxlbWVudCkuaGFzQ2xhc3MoQykpLHQmJnAodGhpcy5fZWxlbWVudCkudG9nZ2xlQ2xhc3MoQyl9LGUuZGlzcG9zZT1mdW5jdGlvbigpe3AucmVtb3ZlRGF0YSh0aGlzLl9lbGVtZW50LHYpLHRoaXMuX2VsZW1lbnQ9bnVsbH0sdC5falF1ZXJ5SW50ZXJmYWNlPWZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLmVhY2goZnVuY3Rpb24oKXt2YXIgbj1wKHRoaXMpLmRhdGEodik7bnx8KG49bmV3IHQodGhpcykscCh0aGlzKS5kYXRhKHYsbikpLCJ0b2dnbGUiPT09ZSYmbltlXSgpfSl9LHModCxudWxsLFt7a2V5OiJWRVJTSU9OIixnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4iNC4wLjAifX1dKSx0fSgpLHAoZG9jdW1lbnQpLm9uKE8uQ0xJQ0tfREFUQV9BUEksYixmdW5jdGlvbih0KXt0LnByZXZlbnREZWZhdWx0KCk7dmFyIGU9dC50YXJnZXQ7cChlKS5oYXNDbGFzcyhJKXx8KGU9cChlKS5jbG9zZXN0KE4pKSxrLl9qUXVlcnlJbnRlcmZhY2UuY2FsbChwKGUpLCJ0b2dnbGUiKX0pLm9uKE8uRk9DVVNfQkxVUl9EQVRBX0FQSSxiLGZ1bmN0aW9uKHQpe3ZhciBlPXAodC50YXJnZXQpLmNsb3Nlc3QoTilbMF07cChlKS50b2dnbGVDbGFzcyhBLC9eZm9jdXMoaW4pPyQvLnRlc3QodC50eXBlKSl9KSxwLmZuW21dPWsuX2pRdWVyeUludGVyZmFjZSxwLmZuW21dLkNvbnN0cnVjdG9yPWsscC5mblttXS5ub0NvbmZsaWN0PWZ1bmN0aW9uKCl7cmV0dXJuIHAuZm5bbV09eSxrLl9qUXVlcnlJbnRlcmZhY2V9LGspLGo9ZnVuY3Rpb24odCl7dmFyIGU9ImNhcm91c2VsIixuPSJicy5jYXJvdXNlbCIsaT0iLiIrbixvPXQuZm5bZV0sYT17aW50ZXJ2YWw6NWUzLGtleWJvYXJkOiEwLHNsaWRlOiExLHBhdXNlOiJob3ZlciIsd3JhcDohMH0sbD17aW50ZXJ2YWw6IihudW1iZXJ8Ym9vbGVhbikiLGtleWJvYXJkOiJib29sZWFuIixzbGlkZToiKGJvb2xlYW58c3RyaW5nKSIscGF1c2U6IihzdHJpbmd8Ym9vbGVhbikiLHdyYXA6ImJvb2xlYW4ifSxoPSJuZXh0IixjPSJwcmV2Iix1PSJsZWZ0IixmPSJyaWdodCIsZD17U0xJREU6InNsaWRlIitpLFNMSUQ6InNsaWQiK2ksS0VZRE9XTjoia2V5ZG93biIraSxNT1VTRUVOVEVSOiJtb3VzZWVudGVyIitpLE1PVVNFTEVBVkU6Im1vdXNlbGVhdmUiK2ksVE9VQ0hFTkQ6InRvdWNoZW5kIitpLExPQURfREFUQV9BUEk6ImxvYWQiK2krIi5kYXRhLWFwaSIsQ0xJQ0tfREFUQV9BUEk6ImNsaWNrIitpKyIuZGF0YS1hcGkifSxfPSJjYXJvdXNlbCIsZz0iYWN0aXZlIixwPSJzbGlkZSIsbT0iY2Fyb3VzZWwtaXRlbS1yaWdodCIsdj0iY2Fyb3VzZWwtaXRlbS1sZWZ0IixFPSJjYXJvdXNlbC1pdGVtLW5leHQiLFQ9ImNhcm91c2VsLWl0ZW0tcHJldiIseT17QUNUSVZFOiIuYWN0aXZlIixBQ1RJVkVfSVRFTToiLmFjdGl2ZS5jYXJvdXNlbC1pdGVtIixJVEVNOiIuY2Fyb3VzZWwtaXRlbSIsTkVYVF9QUkVWOiIuY2Fyb3VzZWwtaXRlbS1uZXh0LCAuY2Fyb3VzZWwtaXRlbS1wcmV2IixJTkRJQ0FUT1JTOiIuY2Fyb3VzZWwtaW5kaWNhdG9ycyIsREFUQV9TTElERToiW2RhdGEtc2xpZGVdLCBbZGF0YS1zbGlkZS10b10iLERBVEFfUklERTonW2RhdGEtcmlkZT0iY2Fyb3VzZWwiXSd9LEM9ZnVuY3Rpb24oKXtmdW5jdGlvbiBvKGUsbil7dGhpcy5faXRlbXM9bnVsbCx0aGlzLl9pbnRlcnZhbD1udWxsLHRoaXMuX2FjdGl2ZUVsZW1lbnQ9bnVsbCx0aGlzLl9pc1BhdXNlZD0hMSx0aGlzLl9pc1NsaWRpbmc9ITEsdGhpcy50b3VjaFRpbWVvdXQ9bnVsbCx0aGlzLl9jb25maWc9dGhpcy5fZ2V0Q29uZmlnKG4pLHRoaXMuX2VsZW1lbnQ9dChlKVswXSx0aGlzLl9pbmRpY2F0b3JzRWxlbWVudD10KHRoaXMuX2VsZW1lbnQpLmZpbmQoeS5JTkRJQ0FUT1JTKVswXSx0aGlzLl9hZGRFdmVudExpc3RlbmVycygpfXZhciBDPW8ucHJvdG90eXBlO3JldHVybiBDLm5leHQ9ZnVuY3Rpb24oKXt0aGlzLl9pc1NsaWRpbmd8fHRoaXMuX3NsaWRlKGgpfSxDLm5leHRXaGVuVmlzaWJsZT1mdW5jdGlvbigpeyFkb2N1bWVudC5oaWRkZW4mJnQodGhpcy5fZWxlbWVudCkuaXMoIjp2aXNpYmxlIikmJiJoaWRkZW4iIT09dCh0aGlzLl9lbGVtZW50KS5jc3MoInZpc2liaWxpdHkiKSYmdGhpcy5uZXh0KCl9LEMucHJldj1mdW5jdGlvbigpe3RoaXMuX2lzU2xpZGluZ3x8dGhpcy5fc2xpZGUoYyl9LEMucGF1c2U9ZnVuY3Rpb24oZSl7ZXx8KHRoaXMuX2lzUGF1c2VkPSEwKSx0KHRoaXMuX2VsZW1lbnQpLmZpbmQoeS5ORVhUX1BSRVYpWzBdJiZQLnN1cHBvcnRzVHJhbnNpdGlvbkVuZCgpJiYoUC50cmlnZ2VyVHJhbnNpdGlvbkVuZCh0aGlzLl9lbGVtZW50KSx0aGlzLmN5Y2xlKCEwKSksY2xlYXJJbnRlcnZhbCh0aGlzLl9pbnRlcnZhbCksdGhpcy5faW50ZXJ2YWw9bnVsbH0sQy5jeWNsZT1mdW5jdGlvbih0KXt0fHwodGhpcy5faXNQYXVzZWQ9ITEpLHRoaXMuX2ludGVydmFsJiYoY2xlYXJJbnRlcnZhbCh0aGlzLl9pbnRlcnZhbCksdGhpcy5faW50ZXJ2YWw9bnVsbCksdGhpcy5fY29uZmlnLmludGVydmFsJiYhdGhpcy5faXNQYXVzZWQmJih0aGlzLl9pbnRlcnZhbD1zZXRJbnRlcnZhbCgoZG9jdW1lbnQudmlzaWJpbGl0eVN0YXRlP3RoaXMubmV4dFdoZW5WaXNpYmxlOnRoaXMubmV4dCkuYmluZCh0aGlzKSx0aGlzLl9jb25maWcuaW50ZXJ2YWwpKX0sQy50bz1mdW5jdGlvbihlKXt2YXIgbj10aGlzO3RoaXMuX2FjdGl2ZUVsZW1lbnQ9dCh0aGlzLl9lbGVtZW50KS5maW5kKHkuQUNUSVZFX0lURU0pWzBdO3ZhciBpPXRoaXMuX2dldEl0ZW1JbmRleCh0aGlzLl9hY3RpdmVFbGVtZW50KTtpZighKGU+dGhpcy5faXRlbXMubGVuZ3RoLTF8fGU8MCkpaWYodGhpcy5faXNTbGlkaW5nKXQodGhpcy5fZWxlbWVudCkub25lKGQuU0xJRCxmdW5jdGlvbigpe3JldHVybiBuLnRvKGUpfSk7ZWxzZXtpZihpPT09ZSlyZXR1cm4gdGhpcy5wYXVzZSgpLHZvaWQgdGhpcy5jeWNsZSgpO3ZhciBzPWU+aT9oOmM7dGhpcy5fc2xpZGUocyx0aGlzLl9pdGVtc1tlXSl9fSxDLmRpc3Bvc2U9ZnVuY3Rpb24oKXt0KHRoaXMuX2VsZW1lbnQpLm9mZihpKSx0LnJlbW92ZURhdGEodGhpcy5fZWxlbWVudCxuKSx0aGlzLl9pdGVtcz1udWxsLHRoaXMuX2NvbmZpZz1udWxsLHRoaXMuX2VsZW1lbnQ9bnVsbCx0aGlzLl9pbnRlcnZhbD1udWxsLHRoaXMuX2lzUGF1c2VkPW51bGwsdGhpcy5faXNTbGlkaW5nPW51bGwsdGhpcy5fYWN0aXZlRWxlbWVudD1udWxsLHRoaXMuX2luZGljYXRvcnNFbGVtZW50PW51bGx9LEMuX2dldENvbmZpZz1mdW5jdGlvbih0KXtyZXR1cm4gdD1yKHt9LGEsdCksUC50eXBlQ2hlY2tDb25maWcoZSx0LGwpLHR9LEMuX2FkZEV2ZW50TGlzdGVuZXJzPWZ1bmN0aW9uKCl7dmFyIGU9dGhpczt0aGlzLl9jb25maWcua2V5Ym9hcmQmJnQodGhpcy5fZWxlbWVudCkub24oZC5LRVlET1dOLGZ1bmN0aW9uKHQpe3JldHVybiBlLl9rZXlkb3duKHQpfSksImhvdmVyIj09PXRoaXMuX2NvbmZpZy5wYXVzZSYmKHQodGhpcy5fZWxlbWVudCkub24oZC5NT1VTRUVOVEVSLGZ1bmN0aW9uKHQpe3JldHVybiBlLnBhdXNlKHQpfSkub24oZC5NT1VTRUxFQVZFLGZ1bmN0aW9uKHQpe3JldHVybiBlLmN5Y2xlKHQpfSksIm9udG91Y2hzdGFydCJpbiBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQmJnQodGhpcy5fZWxlbWVudCkub24oZC5UT1VDSEVORCxmdW5jdGlvbigpe2UucGF1c2UoKSxlLnRvdWNoVGltZW91dCYmY2xlYXJUaW1lb3V0KGUudG91Y2hUaW1lb3V0KSxlLnRvdWNoVGltZW91dD1zZXRUaW1lb3V0KGZ1bmN0aW9uKHQpe3JldHVybiBlLmN5Y2xlKHQpfSw1MDArZS5fY29uZmlnLmludGVydmFsKX0pKX0sQy5fa2V5ZG93bj1mdW5jdGlvbih0KXtpZighL2lucHV0fHRleHRhcmVhL2kudGVzdCh0LnRhcmdldC50YWdOYW1lKSlzd2l0Y2godC53aGljaCl7Y2FzZSAzNzp0LnByZXZlbnREZWZhdWx0KCksdGhpcy5wcmV2KCk7YnJlYWs7Y2FzZSAzOTp0LnByZXZlbnREZWZhdWx0KCksdGhpcy5uZXh0KCl9fSxDLl9nZXRJdGVtSW5kZXg9ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMuX2l0ZW1zPXQubWFrZUFycmF5KHQoZSkucGFyZW50KCkuZmluZCh5LklURU0pKSx0aGlzLl9pdGVtcy5pbmRleE9mKGUpfSxDLl9nZXRJdGVtQnlEaXJlY3Rpb249ZnVuY3Rpb24odCxlKXt2YXIgbj10PT09aCxpPXQ9PT1jLHM9dGhpcy5fZ2V0SXRlbUluZGV4KGUpLHI9dGhpcy5faXRlbXMubGVuZ3RoLTE7aWYoKGkmJjA9PT1zfHxuJiZzPT09cikmJiF0aGlzLl9jb25maWcud3JhcClyZXR1cm4gZTt2YXIgbz0ocysodD09PWM/LTE6MSkpJXRoaXMuX2l0ZW1zLmxlbmd0aDtyZXR1cm4tMT09PW8/dGhpcy5faXRlbXNbdGhpcy5faXRlbXMubGVuZ3RoLTFdOnRoaXMuX2l0ZW1zW29dfSxDLl90cmlnZ2VyU2xpZGVFdmVudD1mdW5jdGlvbihlLG4pe3ZhciBpPXRoaXMuX2dldEl0ZW1JbmRleChlKSxzPXRoaXMuX2dldEl0ZW1JbmRleCh0KHRoaXMuX2VsZW1lbnQpLmZpbmQoeS5BQ1RJVkVfSVRFTSlbMF0pLHI9dC5FdmVudChkLlNMSURFLHtyZWxhdGVkVGFyZ2V0OmUsZGlyZWN0aW9uOm4sZnJvbTpzLHRvOml9KTtyZXR1cm4gdCh0aGlzLl9lbGVtZW50KS50cmlnZ2VyKHIpLHJ9LEMuX3NldEFjdGl2ZUluZGljYXRvckVsZW1lbnQ9ZnVuY3Rpb24oZSl7aWYodGhpcy5faW5kaWNhdG9yc0VsZW1lbnQpe3QodGhpcy5faW5kaWNhdG9yc0VsZW1lbnQpLmZpbmQoeS5BQ1RJVkUpLnJlbW92ZUNsYXNzKGcpO3ZhciBuPXRoaXMuX2luZGljYXRvcnNFbGVtZW50LmNoaWxkcmVuW3RoaXMuX2dldEl0ZW1JbmRleChlKV07biYmdChuKS5hZGRDbGFzcyhnKX19LEMuX3NsaWRlPWZ1bmN0aW9uKGUsbil7dmFyIGkscyxyLG89dGhpcyxhPXQodGhpcy5fZWxlbWVudCkuZmluZCh5LkFDVElWRV9JVEVNKVswXSxsPXRoaXMuX2dldEl0ZW1JbmRleChhKSxjPW58fGEmJnRoaXMuX2dldEl0ZW1CeURpcmVjdGlvbihlLGEpLF89dGhpcy5fZ2V0SXRlbUluZGV4KGMpLEM9Qm9vbGVhbih0aGlzLl9pbnRlcnZhbCk7aWYoZT09PWg/KGk9dixzPUUscj11KTooaT1tLHM9VCxyPWYpLGMmJnQoYykuaGFzQ2xhc3MoZykpdGhpcy5faXNTbGlkaW5nPSExO2Vsc2UgaWYoIXRoaXMuX3RyaWdnZXJTbGlkZUV2ZW50KGMscikuaXNEZWZhdWx0UHJldmVudGVkKCkmJmEmJmMpe3RoaXMuX2lzU2xpZGluZz0hMCxDJiZ0aGlzLnBhdXNlKCksdGhpcy5fc2V0QWN0aXZlSW5kaWNhdG9yRWxlbWVudChjKTt2YXIgST10LkV2ZW50KGQuU0xJRCx7cmVsYXRlZFRhcmdldDpjLGRpcmVjdGlvbjpyLGZyb206bCx0bzpffSk7UC5zdXBwb3J0c1RyYW5zaXRpb25FbmQoKSYmdCh0aGlzLl9lbGVtZW50KS5oYXNDbGFzcyhwKT8odChjKS5hZGRDbGFzcyhzKSxQLnJlZmxvdyhjKSx0KGEpLmFkZENsYXNzKGkpLHQoYykuYWRkQ2xhc3MoaSksdChhKS5vbmUoUC5UUkFOU0lUSU9OX0VORCxmdW5jdGlvbigpe3QoYykucmVtb3ZlQ2xhc3MoaSsiICIrcykuYWRkQ2xhc3MoZyksdChhKS5yZW1vdmVDbGFzcyhnKyIgIitzKyIgIitpKSxvLl9pc1NsaWRpbmc9ITEsc2V0VGltZW91dChmdW5jdGlvbigpe3JldHVybiB0KG8uX2VsZW1lbnQpLnRyaWdnZXIoSSl9LDApfSkuZW11bGF0ZVRyYW5zaXRpb25FbmQoNjAwKSk6KHQoYSkucmVtb3ZlQ2xhc3MoZyksdChjKS5hZGRDbGFzcyhnKSx0aGlzLl9pc1NsaWRpbmc9ITEsdCh0aGlzLl9lbGVtZW50KS50cmlnZ2VyKEkpKSxDJiZ0aGlzLmN5Y2xlKCl9fSxvLl9qUXVlcnlJbnRlcmZhY2U9ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMuZWFjaChmdW5jdGlvbigpe3ZhciBpPXQodGhpcykuZGF0YShuKSxzPXIoe30sYSx0KHRoaXMpLmRhdGEoKSk7Im9iamVjdCI9PXR5cGVvZiBlJiYocz1yKHt9LHMsZSkpO3ZhciBsPSJzdHJpbmciPT10eXBlb2YgZT9lOnMuc2xpZGU7aWYoaXx8KGk9bmV3IG8odGhpcyxzKSx0KHRoaXMpLmRhdGEobixpKSksIm51bWJlciI9PXR5cGVvZiBlKWkudG8oZSk7ZWxzZSBpZigic3RyaW5nIj09dHlwZW9mIGwpe2lmKCJ1bmRlZmluZWQiPT10eXBlb2YgaVtsXSl0aHJvdyBuZXcgVHlwZUVycm9yKCdObyBtZXRob2QgbmFtZWQgIicrbCsnIicpO2lbbF0oKX1lbHNlIHMuaW50ZXJ2YWwmJihpLnBhdXNlKCksaS5jeWNsZSgpKX0pfSxvLl9kYXRhQXBpQ2xpY2tIYW5kbGVyPWZ1bmN0aW9uKGUpe3ZhciBpPVAuZ2V0U2VsZWN0b3JGcm9tRWxlbWVudCh0aGlzKTtpZihpKXt2YXIgcz10KGkpWzBdO2lmKHMmJnQocykuaGFzQ2xhc3MoXykpe3ZhciBhPXIoe30sdChzKS5kYXRhKCksdCh0aGlzKS5kYXRhKCkpLGw9dGhpcy5nZXRBdHRyaWJ1dGUoImRhdGEtc2xpZGUtdG8iKTtsJiYoYS5pbnRlcnZhbD0hMSksby5falF1ZXJ5SW50ZXJmYWNlLmNhbGwodChzKSxhKSxsJiZ0KHMpLmRhdGEobikudG8obCksZS5wcmV2ZW50RGVmYXVsdCgpfX19LHMobyxudWxsLFt7a2V5OiJWRVJTSU9OIixnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4iNC4wLjAifX0se2tleToiRGVmYXVsdCIsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIGF9fV0pLG99KCk7cmV0dXJuIHQoZG9jdW1lbnQpLm9uKGQuQ0xJQ0tfREFUQV9BUEkseS5EQVRBX1NMSURFLEMuX2RhdGFBcGlDbGlja0hhbmRsZXIpLHQod2luZG93KS5vbihkLkxPQURfREFUQV9BUEksZnVuY3Rpb24oKXt0KHkuREFUQV9SSURFKS5lYWNoKGZ1bmN0aW9uKCl7dmFyIGU9dCh0aGlzKTtDLl9qUXVlcnlJbnRlcmZhY2UuY2FsbChlLGUuZGF0YSgpKX0pfSksdC5mbltlXT1DLl9qUXVlcnlJbnRlcmZhY2UsdC5mbltlXS5Db25zdHJ1Y3Rvcj1DLHQuZm5bZV0ubm9Db25mbGljdD1mdW5jdGlvbigpe3JldHVybiB0LmZuW2VdPW8sQy5falF1ZXJ5SW50ZXJmYWNlfSxDfShlKSxIPWZ1bmN0aW9uKHQpe3ZhciBlPSJjb2xsYXBzZSIsbj0iYnMuY29sbGFwc2UiLGk9Ii4iK24sbz10LmZuW2VdLGE9e3RvZ2dsZTohMCxwYXJlbnQ6IiJ9LGw9e3RvZ2dsZToiYm9vbGVhbiIscGFyZW50OiIoc3RyaW5nfGVsZW1lbnQpIn0saD17U0hPVzoic2hvdyIraSxTSE9XTjoic2hvd24iK2ksSElERToiaGlkZSIraSxISURERU46ImhpZGRlbiIraSxDTElDS19EQVRBX0FQSToiY2xpY2siK2krIi5kYXRhLWFwaSJ9LGM9InNob3ciLHU9ImNvbGxhcHNlIixmPSJjb2xsYXBzaW5nIixkPSJjb2xsYXBzZWQiLF89IndpZHRoIixnPSJoZWlnaHQiLHA9e0FDVElWRVM6Ii5zaG93LCAuY29sbGFwc2luZyIsREFUQV9UT0dHTEU6J1tkYXRhLXRvZ2dsZT0iY29sbGFwc2UiXSd9LG09ZnVuY3Rpb24oKXtmdW5jdGlvbiBpKGUsbil7dGhpcy5faXNUcmFuc2l0aW9uaW5nPSExLHRoaXMuX2VsZW1lbnQ9ZSx0aGlzLl9jb25maWc9dGhpcy5fZ2V0Q29uZmlnKG4pLHRoaXMuX3RyaWdnZXJBcnJheT10Lm1ha2VBcnJheSh0KCdbZGF0YS10b2dnbGU9ImNvbGxhcHNlIl1baHJlZj0iIycrZS5pZCsnIl0sW2RhdGEtdG9nZ2xlPSJjb2xsYXBzZSJdW2RhdGEtdGFyZ2V0PSIjJytlLmlkKyciXScpKTtmb3IodmFyIGk9dChwLkRBVEFfVE9HR0xFKSxzPTA7czxpLmxlbmd0aDtzKyspe3ZhciByPWlbc10sbz1QLmdldFNlbGVjdG9yRnJvbUVsZW1lbnQocik7bnVsbCE9PW8mJnQobykuZmlsdGVyKGUpLmxlbmd0aD4wJiYodGhpcy5fc2VsZWN0b3I9byx0aGlzLl90cmlnZ2VyQXJyYXkucHVzaChyKSl9dGhpcy5fcGFyZW50PXRoaXMuX2NvbmZpZy5wYXJlbnQ/dGhpcy5fZ2V0UGFyZW50KCk6bnVsbCx0aGlzLl9jb25maWcucGFyZW50fHx0aGlzLl9hZGRBcmlhQW5kQ29sbGFwc2VkQ2xhc3ModGhpcy5fZWxlbWVudCx0aGlzLl90cmlnZ2VyQXJyYXkpLHRoaXMuX2NvbmZpZy50b2dnbGUmJnRoaXMudG9nZ2xlKCl9dmFyIG89aS5wcm90b3R5cGU7cmV0dXJuIG8udG9nZ2xlPWZ1bmN0aW9uKCl7dCh0aGlzLl9lbGVtZW50KS5oYXNDbGFzcyhjKT90aGlzLmhpZGUoKTp0aGlzLnNob3coKX0sby5zaG93PWZ1bmN0aW9uKCl7dmFyIGUscyxyPXRoaXM7aWYoIXRoaXMuX2lzVHJhbnNpdGlvbmluZyYmIXQodGhpcy5fZWxlbWVudCkuaGFzQ2xhc3MoYykmJih0aGlzLl9wYXJlbnQmJjA9PT0oZT10Lm1ha2VBcnJheSh0KHRoaXMuX3BhcmVudCkuZmluZChwLkFDVElWRVMpLmZpbHRlcignW2RhdGEtcGFyZW50PSInK3RoaXMuX2NvbmZpZy5wYXJlbnQrJyJdJykpKS5sZW5ndGgmJihlPW51bGwpLCEoZSYmKHM9dChlKS5ub3QodGhpcy5fc2VsZWN0b3IpLmRhdGEobikpJiZzLl9pc1RyYW5zaXRpb25pbmcpKSl7dmFyIG89dC5FdmVudChoLlNIT1cpO2lmKHQodGhpcy5fZWxlbWVudCkudHJpZ2dlcihvKSwhby5pc0RlZmF1bHRQcmV2ZW50ZWQoKSl7ZSYmKGkuX2pRdWVyeUludGVyZmFjZS5jYWxsKHQoZSkubm90KHRoaXMuX3NlbGVjdG9yKSwiaGlkZSIpLHN8fHQoZSkuZGF0YShuLG51bGwpKTt2YXIgYT10aGlzLl9nZXREaW1lbnNpb24oKTt0KHRoaXMuX2VsZW1lbnQpLnJlbW92ZUNsYXNzKHUpLmFkZENsYXNzKGYpLHRoaXMuX2VsZW1lbnQuc3R5bGVbYV09MCx0aGlzLl90cmlnZ2VyQXJyYXkubGVuZ3RoPjAmJnQodGhpcy5fdHJpZ2dlckFycmF5KS5yZW1vdmVDbGFzcyhkKS5hdHRyKCJhcmlhLWV4cGFuZGVkIiwhMCksdGhpcy5zZXRUcmFuc2l0aW9uaW5nKCEwKTt2YXIgbD1mdW5jdGlvbigpe3Qoci5fZWxlbWVudCkucmVtb3ZlQ2xhc3MoZikuYWRkQ2xhc3ModSkuYWRkQ2xhc3MoYyksci5fZWxlbWVudC5zdHlsZVthXT0iIixyLnNldFRyYW5zaXRpb25pbmcoITEpLHQoci5fZWxlbWVudCkudHJpZ2dlcihoLlNIT1dOKX07aWYoUC5zdXBwb3J0c1RyYW5zaXRpb25FbmQoKSl7dmFyIF89InNjcm9sbCIrKGFbMF0udG9VcHBlckNhc2UoKSthLnNsaWNlKDEpKTt0KHRoaXMuX2VsZW1lbnQpLm9uZShQLlRSQU5TSVRJT05fRU5ELGwpLmVtdWxhdGVUcmFuc2l0aW9uRW5kKDYwMCksdGhpcy5fZWxlbWVudC5zdHlsZVthXT10aGlzLl9lbGVtZW50W19dKyJweCJ9ZWxzZSBsKCl9fX0sby5oaWRlPWZ1bmN0aW9uKCl7dmFyIGU9dGhpcztpZighdGhpcy5faXNUcmFuc2l0aW9uaW5nJiZ0KHRoaXMuX2VsZW1lbnQpLmhhc0NsYXNzKGMpKXt2YXIgbj10LkV2ZW50KGguSElERSk7aWYodCh0aGlzLl9lbGVtZW50KS50cmlnZ2VyKG4pLCFuLmlzRGVmYXVsdFByZXZlbnRlZCgpKXt2YXIgaT10aGlzLl9nZXREaW1lbnNpb24oKTtpZih0aGlzLl9lbGVtZW50LnN0eWxlW2ldPXRoaXMuX2VsZW1lbnQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KClbaV0rInB4IixQLnJlZmxvdyh0aGlzLl9lbGVtZW50KSx0KHRoaXMuX2VsZW1lbnQpLmFkZENsYXNzKGYpLnJlbW92ZUNsYXNzKHUpLnJlbW92ZUNsYXNzKGMpLHRoaXMuX3RyaWdnZXJBcnJheS5sZW5ndGg+MClmb3IodmFyIHM9MDtzPHRoaXMuX3RyaWdnZXJBcnJheS5sZW5ndGg7cysrKXt2YXIgcj10aGlzLl90cmlnZ2VyQXJyYXlbc10sbz1QLmdldFNlbGVjdG9yRnJvbUVsZW1lbnQocik7aWYobnVsbCE9PW8pdChvKS5oYXNDbGFzcyhjKXx8dChyKS5hZGRDbGFzcyhkKS5hdHRyKCJhcmlhLWV4cGFuZGVkIiwhMSl9dGhpcy5zZXRUcmFuc2l0aW9uaW5nKCEwKTt2YXIgYT1mdW5jdGlvbigpe2Uuc2V0VHJhbnNpdGlvbmluZyghMSksdChlLl9lbGVtZW50KS5yZW1vdmVDbGFzcyhmKS5hZGRDbGFzcyh1KS50cmlnZ2VyKGguSElEREVOKX07dGhpcy5fZWxlbWVudC5zdHlsZVtpXT0iIixQLnN1cHBvcnRzVHJhbnNpdGlvbkVuZCgpP3QodGhpcy5fZWxlbWVudCkub25lKFAuVFJBTlNJVElPTl9FTkQsYSkuZW11bGF0ZVRyYW5zaXRpb25FbmQoNjAwKTphKCl9fX0sby5zZXRUcmFuc2l0aW9uaW5nPWZ1bmN0aW9uKHQpe3RoaXMuX2lzVHJhbnNpdGlvbmluZz10fSxvLmRpc3Bvc2U9ZnVuY3Rpb24oKXt0LnJlbW92ZURhdGEodGhpcy5fZWxlbWVudCxuKSx0aGlzLl9jb25maWc9bnVsbCx0aGlzLl9wYXJlbnQ9bnVsbCx0aGlzLl9lbGVtZW50PW51bGwsdGhpcy5fdHJpZ2dlckFycmF5PW51bGwsdGhpcy5faXNUcmFuc2l0aW9uaW5nPW51bGx9LG8uX2dldENvbmZpZz1mdW5jdGlvbih0KXtyZXR1cm4odD1yKHt9LGEsdCkpLnRvZ2dsZT1Cb29sZWFuKHQudG9nZ2xlKSxQLnR5cGVDaGVja0NvbmZpZyhlLHQsbCksdH0sby5fZ2V0RGltZW5zaW9uPWZ1bmN0aW9uKCl7cmV0dXJuIHQodGhpcy5fZWxlbWVudCkuaGFzQ2xhc3MoXyk/XzpnfSxvLl9nZXRQYXJlbnQ9ZnVuY3Rpb24oKXt2YXIgZT10aGlzLG49bnVsbDtQLmlzRWxlbWVudCh0aGlzLl9jb25maWcucGFyZW50KT8obj10aGlzLl9jb25maWcucGFyZW50LCJ1bmRlZmluZWQiIT10eXBlb2YgdGhpcy5fY29uZmlnLnBhcmVudC5qcXVlcnkmJihuPXRoaXMuX2NvbmZpZy5wYXJlbnRbMF0pKTpuPXQodGhpcy5fY29uZmlnLnBhcmVudClbMF07dmFyIHM9J1tkYXRhLXRvZ2dsZT0iY29sbGFwc2UiXVtkYXRhLXBhcmVudD0iJyt0aGlzLl9jb25maWcucGFyZW50KyciXSc7cmV0dXJuIHQobikuZmluZChzKS5lYWNoKGZ1bmN0aW9uKHQsbil7ZS5fYWRkQXJpYUFuZENvbGxhcHNlZENsYXNzKGkuX2dldFRhcmdldEZyb21FbGVtZW50KG4pLFtuXSl9KSxufSxvLl9hZGRBcmlhQW5kQ29sbGFwc2VkQ2xhc3M9ZnVuY3Rpb24oZSxuKXtpZihlKXt2YXIgaT10KGUpLmhhc0NsYXNzKGMpO24ubGVuZ3RoPjAmJnQobikudG9nZ2xlQ2xhc3MoZCwhaSkuYXR0cigiYXJpYS1leHBhbmRlZCIsaSl9fSxpLl9nZXRUYXJnZXRGcm9tRWxlbWVudD1mdW5jdGlvbihlKXt2YXIgbj1QLmdldFNlbGVjdG9yRnJvbUVsZW1lbnQoZSk7cmV0dXJuIG4/dChuKVswXTpudWxsfSxpLl9qUXVlcnlJbnRlcmZhY2U9ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMuZWFjaChmdW5jdGlvbigpe3ZhciBzPXQodGhpcyksbz1zLmRhdGEobiksbD1yKHt9LGEscy5kYXRhKCksIm9iamVjdCI9PXR5cGVvZiBlJiZlKTtpZighbyYmbC50b2dnbGUmJi9zaG93fGhpZGUvLnRlc3QoZSkmJihsLnRvZ2dsZT0hMSksb3x8KG89bmV3IGkodGhpcyxsKSxzLmRhdGEobixvKSksInN0cmluZyI9PXR5cGVvZiBlKXtpZigidW5kZWZpbmVkIj09dHlwZW9mIG9bZV0pdGhyb3cgbmV3IFR5cGVFcnJvcignTm8gbWV0aG9kIG5hbWVkICInK2UrJyInKTtvW2VdKCl9fSl9LHMoaSxudWxsLFt7a2V5OiJWRVJTSU9OIixnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4iNC4wLjAifX0se2tleToiRGVmYXVsdCIsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIGF9fV0pLGl9KCk7cmV0dXJuIHQoZG9jdW1lbnQpLm9uKGguQ0xJQ0tfREFUQV9BUEkscC5EQVRBX1RPR0dMRSxmdW5jdGlvbihlKXsiQSI9PT1lLmN1cnJlbnRUYXJnZXQudGFnTmFtZSYmZS5wcmV2ZW50RGVmYXVsdCgpO3ZhciBpPXQodGhpcykscz1QLmdldFNlbGVjdG9yRnJvbUVsZW1lbnQodGhpcyk7dChzKS5lYWNoKGZ1bmN0aW9uKCl7dmFyIGU9dCh0aGlzKSxzPWUuZGF0YShuKT8idG9nZ2xlIjppLmRhdGEoKTttLl9qUXVlcnlJbnRlcmZhY2UuY2FsbChlLHMpfSl9KSx0LmZuW2VdPW0uX2pRdWVyeUludGVyZmFjZSx0LmZuW2VdLkNvbnN0cnVjdG9yPW0sdC5mbltlXS5ub0NvbmZsaWN0PWZ1bmN0aW9uKCl7cmV0dXJuIHQuZm5bZV09byxtLl9qUXVlcnlJbnRlcmZhY2V9LG19KGUpLFc9ZnVuY3Rpb24odCl7dmFyIGU9ImRyb3Bkb3duIixpPSJicy5kcm9wZG93biIsbz0iLiIraSxhPSIuZGF0YS1hcGkiLGw9dC5mbltlXSxoPW5ldyBSZWdFeHAoIjM4fDQwfDI3IiksYz17SElERToiaGlkZSIrbyxISURERU46ImhpZGRlbiIrbyxTSE9XOiJzaG93IitvLFNIT1dOOiJzaG93biIrbyxDTElDSzoiY2xpY2siK28sQ0xJQ0tfREFUQV9BUEk6ImNsaWNrIitvK2EsS0VZRE9XTl9EQVRBX0FQSToia2V5ZG93biIrbythLEtFWVVQX0RBVEFfQVBJOiJrZXl1cCIrbythfSx1PSJkaXNhYmxlZCIsZj0ic2hvdyIsZD0iZHJvcHVwIixfPSJkcm9wcmlnaHQiLGc9ImRyb3BsZWZ0IixwPSJkcm9wZG93bi1tZW51LXJpZ2h0IixtPSJkcm9wZG93bi1tZW51LWxlZnQiLHY9InBvc2l0aW9uLXN0YXRpYyIsRT0nW2RhdGEtdG9nZ2xlPSJkcm9wZG93biJdJyxUPSIuZHJvcGRvd24gZm9ybSIseT0iLmRyb3Bkb3duLW1lbnUiLEM9Ii5uYXZiYXItbmF2IixJPSIuZHJvcGRvd24tbWVudSAuZHJvcGRvd24taXRlbTpub3QoLmRpc2FibGVkKSIsQT0idG9wLXN0YXJ0IixiPSJ0b3AtZW5kIixEPSJib3R0b20tc3RhcnQiLFM9ImJvdHRvbS1lbmQiLHc9InJpZ2h0LXN0YXJ0IixOPSJsZWZ0LXN0YXJ0IixPPXtvZmZzZXQ6MCxmbGlwOiEwLGJvdW5kYXJ5OiJzY3JvbGxQYXJlbnQifSxrPXtvZmZzZXQ6IihudW1iZXJ8c3RyaW5nfGZ1bmN0aW9uKSIsZmxpcDoiYm9vbGVhbiIsYm91bmRhcnk6IihzdHJpbmd8ZWxlbWVudCkifSxMPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gYSh0LGUpe3RoaXMuX2VsZW1lbnQ9dCx0aGlzLl9wb3BwZXI9bnVsbCx0aGlzLl9jb25maWc9dGhpcy5fZ2V0Q29uZmlnKGUpLHRoaXMuX21lbnU9dGhpcy5fZ2V0TWVudUVsZW1lbnQoKSx0aGlzLl9pbk5hdmJhcj10aGlzLl9kZXRlY3ROYXZiYXIoKSx0aGlzLl9hZGRFdmVudExpc3RlbmVycygpfXZhciBsPWEucHJvdG90eXBlO3JldHVybiBsLnRvZ2dsZT1mdW5jdGlvbigpe2lmKCF0aGlzLl9lbGVtZW50LmRpc2FibGVkJiYhdCh0aGlzLl9lbGVtZW50KS5oYXNDbGFzcyh1KSl7dmFyIGU9YS5fZ2V0UGFyZW50RnJvbUVsZW1lbnQodGhpcy5fZWxlbWVudCksaT10KHRoaXMuX21lbnUpLmhhc0NsYXNzKGYpO2lmKGEuX2NsZWFyTWVudXMoKSwhaSl7dmFyIHM9e3JlbGF0ZWRUYXJnZXQ6dGhpcy5fZWxlbWVudH0scj10LkV2ZW50KGMuU0hPVyxzKTtpZih0KGUpLnRyaWdnZXIociksIXIuaXNEZWZhdWx0UHJldmVudGVkKCkpe2lmKCF0aGlzLl9pbk5hdmJhcil7aWYoInVuZGVmaW5lZCI9PXR5cGVvZiBuKXRocm93IG5ldyBUeXBlRXJyb3IoIkJvb3RzdHJhcCBkcm9wZG93biByZXF1aXJlIFBvcHBlci5qcyAoaHR0cHM6Ly9wb3BwZXIuanMub3JnKSIpO3ZhciBvPXRoaXMuX2VsZW1lbnQ7dChlKS5oYXNDbGFzcyhkKSYmKHQodGhpcy5fbWVudSkuaGFzQ2xhc3MobSl8fHQodGhpcy5fbWVudSkuaGFzQ2xhc3MocCkpJiYobz1lKSwic2Nyb2xsUGFyZW50IiE9PXRoaXMuX2NvbmZpZy5ib3VuZGFyeSYmdChlKS5hZGRDbGFzcyh2KSx0aGlzLl9wb3BwZXI9bmV3IG4obyx0aGlzLl9tZW51LHRoaXMuX2dldFBvcHBlckNvbmZpZygpKX0ib250b3VjaHN0YXJ0ImluIGRvY3VtZW50LmRvY3VtZW50RWxlbWVudCYmMD09PXQoZSkuY2xvc2VzdChDKS5sZW5ndGgmJnQoImJvZHkiKS5jaGlsZHJlbigpLm9uKCJtb3VzZW92ZXIiLG51bGwsdC5ub29wKSx0aGlzLl9lbGVtZW50LmZvY3VzKCksdGhpcy5fZWxlbWVudC5zZXRBdHRyaWJ1dGUoImFyaWEtZXhwYW5kZWQiLCEwKSx0KHRoaXMuX21lbnUpLnRvZ2dsZUNsYXNzKGYpLHQoZSkudG9nZ2xlQ2xhc3MoZikudHJpZ2dlcih0LkV2ZW50KGMuU0hPV04scykpfX19fSxsLmRpc3Bvc2U9ZnVuY3Rpb24oKXt0LnJlbW92ZURhdGEodGhpcy5fZWxlbWVudCxpKSx0KHRoaXMuX2VsZW1lbnQpLm9mZihvKSx0aGlzLl9lbGVtZW50PW51bGwsdGhpcy5fbWVudT1udWxsLG51bGwhPT10aGlzLl9wb3BwZXImJih0aGlzLl9wb3BwZXIuZGVzdHJveSgpLHRoaXMuX3BvcHBlcj1udWxsKX0sbC51cGRhdGU9ZnVuY3Rpb24oKXt0aGlzLl9pbk5hdmJhcj10aGlzLl9kZXRlY3ROYXZiYXIoKSxudWxsIT09dGhpcy5fcG9wcGVyJiZ0aGlzLl9wb3BwZXIuc2NoZWR1bGVVcGRhdGUoKX0sbC5fYWRkRXZlbnRMaXN0ZW5lcnM9ZnVuY3Rpb24oKXt2YXIgZT10aGlzO3QodGhpcy5fZWxlbWVudCkub24oYy5DTElDSyxmdW5jdGlvbih0KXt0LnByZXZlbnREZWZhdWx0KCksdC5zdG9wUHJvcGFnYXRpb24oKSxlLnRvZ2dsZSgpfSl9LGwuX2dldENvbmZpZz1mdW5jdGlvbihuKXtyZXR1cm4gbj1yKHt9LHRoaXMuY29uc3RydWN0b3IuRGVmYXVsdCx0KHRoaXMuX2VsZW1lbnQpLmRhdGEoKSxuKSxQLnR5cGVDaGVja0NvbmZpZyhlLG4sdGhpcy5jb25zdHJ1Y3Rvci5EZWZhdWx0VHlwZSksbn0sbC5fZ2V0TWVudUVsZW1lbnQ9ZnVuY3Rpb24oKXtpZighdGhpcy5fbWVudSl7dmFyIGU9YS5fZ2V0UGFyZW50RnJvbUVsZW1lbnQodGhpcy5fZWxlbWVudCk7dGhpcy5fbWVudT10KGUpLmZpbmQoeSlbMF19cmV0dXJuIHRoaXMuX21lbnV9LGwuX2dldFBsYWNlbWVudD1mdW5jdGlvbigpe3ZhciBlPXQodGhpcy5fZWxlbWVudCkucGFyZW50KCksbj1EO3JldHVybiBlLmhhc0NsYXNzKGQpPyhuPUEsdCh0aGlzLl9tZW51KS5oYXNDbGFzcyhwKSYmKG49YikpOmUuaGFzQ2xhc3MoXyk/bj13OmUuaGFzQ2xhc3MoZyk/bj1OOnQodGhpcy5fbWVudSkuaGFzQ2xhc3MocCkmJihuPVMpLG59LGwuX2RldGVjdE5hdmJhcj1mdW5jdGlvbigpe3JldHVybiB0KHRoaXMuX2VsZW1lbnQpLmNsb3Nlc3QoIi5uYXZiYXIiKS5sZW5ndGg+MH0sbC5fZ2V0UG9wcGVyQ29uZmlnPWZ1bmN0aW9uKCl7dmFyIHQ9dGhpcyxlPXt9O3JldHVybiJmdW5jdGlvbiI9PXR5cGVvZiB0aGlzLl9jb25maWcub2Zmc2V0P2UuZm49ZnVuY3Rpb24oZSl7cmV0dXJuIGUub2Zmc2V0cz1yKHt9LGUub2Zmc2V0cyx0Ll9jb25maWcub2Zmc2V0KGUub2Zmc2V0cyl8fHt9KSxlfTplLm9mZnNldD10aGlzLl9jb25maWcub2Zmc2V0LHtwbGFjZW1lbnQ6dGhpcy5fZ2V0UGxhY2VtZW50KCksbW9kaWZpZXJzOntvZmZzZXQ6ZSxmbGlwOntlbmFibGVkOnRoaXMuX2NvbmZpZy5mbGlwfSxwcmV2ZW50T3ZlcmZsb3c6e2JvdW5kYXJpZXNFbGVtZW50OnRoaXMuX2NvbmZpZy5ib3VuZGFyeX19fX0sYS5falF1ZXJ5SW50ZXJmYWNlPWZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLmVhY2goZnVuY3Rpb24oKXt2YXIgbj10KHRoaXMpLmRhdGEoaSk7aWYobnx8KG49bmV3IGEodGhpcywib2JqZWN0Ij09dHlwZW9mIGU/ZTpudWxsKSx0KHRoaXMpLmRhdGEoaSxuKSksInN0cmluZyI9PXR5cGVvZiBlKXtpZigidW5kZWZpbmVkIj09dHlwZW9mIG5bZV0pdGhyb3cgbmV3IFR5cGVFcnJvcignTm8gbWV0aG9kIG5hbWVkICInK2UrJyInKTtuW2VdKCl9fSl9LGEuX2NsZWFyTWVudXM9ZnVuY3Rpb24oZSl7aWYoIWV8fDMhPT1lLndoaWNoJiYoImtleXVwIiE9PWUudHlwZXx8OT09PWUud2hpY2gpKWZvcih2YXIgbj10Lm1ha2VBcnJheSh0KEUpKSxzPTA7czxuLmxlbmd0aDtzKyspe3ZhciByPWEuX2dldFBhcmVudEZyb21FbGVtZW50KG5bc10pLG89dChuW3NdKS5kYXRhKGkpLGw9e3JlbGF0ZWRUYXJnZXQ6bltzXX07aWYobyl7dmFyIGg9by5fbWVudTtpZih0KHIpLmhhc0NsYXNzKGYpJiYhKGUmJigiY2xpY2siPT09ZS50eXBlJiYvaW5wdXR8dGV4dGFyZWEvaS50ZXN0KGUudGFyZ2V0LnRhZ05hbWUpfHwia2V5dXAiPT09ZS50eXBlJiY5PT09ZS53aGljaCkmJnQuY29udGFpbnMocixlLnRhcmdldCkpKXt2YXIgdT10LkV2ZW50KGMuSElERSxsKTt0KHIpLnRyaWdnZXIodSksdS5pc0RlZmF1bHRQcmV2ZW50ZWQoKXx8KCJvbnRvdWNoc3RhcnQiaW4gZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50JiZ0KCJib2R5IikuY2hpbGRyZW4oKS5vZmYoIm1vdXNlb3ZlciIsbnVsbCx0Lm5vb3ApLG5bc10uc2V0QXR0cmlidXRlKCJhcmlhLWV4cGFuZGVkIiwiZmFsc2UiKSx0KGgpLnJlbW92ZUNsYXNzKGYpLHQocikucmVtb3ZlQ2xhc3MoZikudHJpZ2dlcih0LkV2ZW50KGMuSElEREVOLGwpKSl9fX19LGEuX2dldFBhcmVudEZyb21FbGVtZW50PWZ1bmN0aW9uKGUpe3ZhciBuLGk9UC5nZXRTZWxlY3RvckZyb21FbGVtZW50KGUpO3JldHVybiBpJiYobj10KGkpWzBdKSxufHxlLnBhcmVudE5vZGV9LGEuX2RhdGFBcGlLZXlkb3duSGFuZGxlcj1mdW5jdGlvbihlKXtpZigoL2lucHV0fHRleHRhcmVhL2kudGVzdChlLnRhcmdldC50YWdOYW1lKT8hKDMyPT09ZS53aGljaHx8MjchPT1lLndoaWNoJiYoNDAhPT1lLndoaWNoJiYzOCE9PWUud2hpY2h8fHQoZS50YXJnZXQpLmNsb3Nlc3QoeSkubGVuZ3RoKSk6aC50ZXN0KGUud2hpY2gpKSYmKGUucHJldmVudERlZmF1bHQoKSxlLnN0b3BQcm9wYWdhdGlvbigpLCF0aGlzLmRpc2FibGVkJiYhdCh0aGlzKS5oYXNDbGFzcyh1KSkpe3ZhciBuPWEuX2dldFBhcmVudEZyb21FbGVtZW50KHRoaXMpLGk9dChuKS5oYXNDbGFzcyhmKTtpZigoaXx8Mjc9PT1lLndoaWNoJiYzMj09PWUud2hpY2gpJiYoIWl8fDI3IT09ZS53aGljaCYmMzIhPT1lLndoaWNoKSl7dmFyIHM9dChuKS5maW5kKEkpLmdldCgpO2lmKDAhPT1zLmxlbmd0aCl7dmFyIHI9cy5pbmRleE9mKGUudGFyZ2V0KTszOD09PWUud2hpY2gmJnI+MCYmci0tLDQwPT09ZS53aGljaCYmcjxzLmxlbmd0aC0xJiZyKysscjwwJiYocj0wKSxzW3JdLmZvY3VzKCl9fWVsc2V7aWYoMjc9PT1lLndoaWNoKXt2YXIgbz10KG4pLmZpbmQoRSlbMF07dChvKS50cmlnZ2VyKCJmb2N1cyIpfXQodGhpcykudHJpZ2dlcigiY2xpY2siKX19fSxzKGEsbnVsbCxbe2tleToiVkVSU0lPTiIsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIjQuMC4wIn19LHtrZXk6IkRlZmF1bHQiLGdldDpmdW5jdGlvbigpe3JldHVybiBPfX0se2tleToiRGVmYXVsdFR5cGUiLGdldDpmdW5jdGlvbigpe3JldHVybiBrfX1dKSxhfSgpO3JldHVybiB0KGRvY3VtZW50KS5vbihjLktFWURPV05fREFUQV9BUEksRSxMLl9kYXRhQXBpS2V5ZG93bkhhbmRsZXIpLm9uKGMuS0VZRE9XTl9EQVRBX0FQSSx5LEwuX2RhdGFBcGlLZXlkb3duSGFuZGxlcikub24oYy5DTElDS19EQVRBX0FQSSsiICIrYy5LRVlVUF9EQVRBX0FQSSxMLl9jbGVhck1lbnVzKS5vbihjLkNMSUNLX0RBVEFfQVBJLEUsZnVuY3Rpb24oZSl7ZS5wcmV2ZW50RGVmYXVsdCgpLGUuc3RvcFByb3BhZ2F0aW9uKCksTC5falF1ZXJ5SW50ZXJmYWNlLmNhbGwodCh0aGlzKSwidG9nZ2xlIil9KS5vbihjLkNMSUNLX0RBVEFfQVBJLFQsZnVuY3Rpb24odCl7dC5zdG9wUHJvcGFnYXRpb24oKX0pLHQuZm5bZV09TC5falF1ZXJ5SW50ZXJmYWNlLHQuZm5bZV0uQ29uc3RydWN0b3I9TCx0LmZuW2VdLm5vQ29uZmxpY3Q9ZnVuY3Rpb24oKXtyZXR1cm4gdC5mbltlXT1sLEwuX2pRdWVyeUludGVyZmFjZX0sTH0oZSksTT1mdW5jdGlvbih0KXt2YXIgZT0ibW9kYWwiLG49ImJzLm1vZGFsIixpPSIuIituLG89dC5mbi5tb2RhbCxhPXtiYWNrZHJvcDohMCxrZXlib2FyZDohMCxmb2N1czohMCxzaG93OiEwfSxsPXtiYWNrZHJvcDoiKGJvb2xlYW58c3RyaW5nKSIsa2V5Ym9hcmQ6ImJvb2xlYW4iLGZvY3VzOiJib29sZWFuIixzaG93OiJib29sZWFuIn0saD17SElERToiaGlkZSIraSxISURERU46ImhpZGRlbiIraSxTSE9XOiJzaG93IitpLFNIT1dOOiJzaG93biIraSxGT0NVU0lOOiJmb2N1c2luIitpLFJFU0laRToicmVzaXplIitpLENMSUNLX0RJU01JU1M6ImNsaWNrLmRpc21pc3MiK2ksS0VZRE9XTl9ESVNNSVNTOiJrZXlkb3duLmRpc21pc3MiK2ksTU9VU0VVUF9ESVNNSVNTOiJtb3VzZXVwLmRpc21pc3MiK2ksTU9VU0VET1dOX0RJU01JU1M6Im1vdXNlZG93bi5kaXNtaXNzIitpLENMSUNLX0RBVEFfQVBJOiJjbGljayIraSsiLmRhdGEtYXBpIn0sYz0ibW9kYWwtc2Nyb2xsYmFyLW1lYXN1cmUiLHU9Im1vZGFsLWJhY2tkcm9wIixmPSJtb2RhbC1vcGVuIixkPSJmYWRlIixfPSJzaG93IixnPXtESUFMT0c6Ii5tb2RhbC1kaWFsb2ciLERBVEFfVE9HR0xFOidbZGF0YS10b2dnbGU9Im1vZGFsIl0nLERBVEFfRElTTUlTUzonW2RhdGEtZGlzbWlzcz0ibW9kYWwiXScsRklYRURfQ09OVEVOVDoiLmZpeGVkLXRvcCwgLmZpeGVkLWJvdHRvbSwgLmlzLWZpeGVkLCAuc3RpY2t5LXRvcCIsU1RJQ0tZX0NPTlRFTlQ6Ii5zdGlja3ktdG9wIixOQVZCQVJfVE9HR0xFUjoiLm5hdmJhci10b2dnbGVyIn0scD1mdW5jdGlvbigpe2Z1bmN0aW9uIG8oZSxuKXt0aGlzLl9jb25maWc9dGhpcy5fZ2V0Q29uZmlnKG4pLHRoaXMuX2VsZW1lbnQ9ZSx0aGlzLl9kaWFsb2c9dChlKS5maW5kKGcuRElBTE9HKVswXSx0aGlzLl9iYWNrZHJvcD1udWxsLHRoaXMuX2lzU2hvd249ITEsdGhpcy5faXNCb2R5T3ZlcmZsb3dpbmc9ITEsdGhpcy5faWdub3JlQmFja2Ryb3BDbGljaz0hMSx0aGlzLl9vcmlnaW5hbEJvZHlQYWRkaW5nPTAsdGhpcy5fc2Nyb2xsYmFyV2lkdGg9MH12YXIgcD1vLnByb3RvdHlwZTtyZXR1cm4gcC50b2dnbGU9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuX2lzU2hvd24/dGhpcy5oaWRlKCk6dGhpcy5zaG93KHQpfSxwLnNob3c9ZnVuY3Rpb24oZSl7dmFyIG49dGhpcztpZighdGhpcy5faXNUcmFuc2l0aW9uaW5nJiYhdGhpcy5faXNTaG93bil7UC5zdXBwb3J0c1RyYW5zaXRpb25FbmQoKSYmdCh0aGlzLl9lbGVtZW50KS5oYXNDbGFzcyhkKSYmKHRoaXMuX2lzVHJhbnNpdGlvbmluZz0hMCk7dmFyIGk9dC5FdmVudChoLlNIT1cse3JlbGF0ZWRUYXJnZXQ6ZX0pO3QodGhpcy5fZWxlbWVudCkudHJpZ2dlcihpKSx0aGlzLl9pc1Nob3dufHxpLmlzRGVmYXVsdFByZXZlbnRlZCgpfHwodGhpcy5faXNTaG93bj0hMCx0aGlzLl9jaGVja1Njcm9sbGJhcigpLHRoaXMuX3NldFNjcm9sbGJhcigpLHRoaXMuX2FkanVzdERpYWxvZygpLHQoZG9jdW1lbnQuYm9keSkuYWRkQ2xhc3MoZiksdGhpcy5fc2V0RXNjYXBlRXZlbnQoKSx0aGlzLl9zZXRSZXNpemVFdmVudCgpLHQodGhpcy5fZWxlbWVudCkub24oaC5DTElDS19ESVNNSVNTLGcuREFUQV9ESVNNSVNTLGZ1bmN0aW9uKHQpe3JldHVybiBuLmhpZGUodCl9KSx0KHRoaXMuX2RpYWxvZykub24oaC5NT1VTRURPV05fRElTTUlTUyxmdW5jdGlvbigpe3Qobi5fZWxlbWVudCkub25lKGguTU9VU0VVUF9ESVNNSVNTLGZ1bmN0aW9uKGUpe3QoZS50YXJnZXQpLmlzKG4uX2VsZW1lbnQpJiYobi5faWdub3JlQmFja2Ryb3BDbGljaz0hMCl9KX0pLHRoaXMuX3Nob3dCYWNrZHJvcChmdW5jdGlvbigpe3JldHVybiBuLl9zaG93RWxlbWVudChlKX0pKX19LHAuaGlkZT1mdW5jdGlvbihlKXt2YXIgbj10aGlzO2lmKGUmJmUucHJldmVudERlZmF1bHQoKSwhdGhpcy5faXNUcmFuc2l0aW9uaW5nJiZ0aGlzLl9pc1Nob3duKXt2YXIgaT10LkV2ZW50KGguSElERSk7aWYodCh0aGlzLl9lbGVtZW50KS50cmlnZ2VyKGkpLHRoaXMuX2lzU2hvd24mJiFpLmlzRGVmYXVsdFByZXZlbnRlZCgpKXt0aGlzLl9pc1Nob3duPSExO3ZhciBzPVAuc3VwcG9ydHNUcmFuc2l0aW9uRW5kKCkmJnQodGhpcy5fZWxlbWVudCkuaGFzQ2xhc3MoZCk7cyYmKHRoaXMuX2lzVHJhbnNpdGlvbmluZz0hMCksdGhpcy5fc2V0RXNjYXBlRXZlbnQoKSx0aGlzLl9zZXRSZXNpemVFdmVudCgpLHQoZG9jdW1lbnQpLm9mZihoLkZPQ1VTSU4pLHQodGhpcy5fZWxlbWVudCkucmVtb3ZlQ2xhc3MoXyksdCh0aGlzLl9lbGVtZW50KS5vZmYoaC5DTElDS19ESVNNSVNTKSx0KHRoaXMuX2RpYWxvZykub2ZmKGguTU9VU0VET1dOX0RJU01JU1MpLHM/dCh0aGlzLl9lbGVtZW50KS5vbmUoUC5UUkFOU0lUSU9OX0VORCxmdW5jdGlvbih0KXtyZXR1cm4gbi5faGlkZU1vZGFsKHQpfSkuZW11bGF0ZVRyYW5zaXRpb25FbmQoMzAwKTp0aGlzLl9oaWRlTW9kYWwoKX19fSxwLmRpc3Bvc2U9ZnVuY3Rpb24oKXt0LnJlbW92ZURhdGEodGhpcy5fZWxlbWVudCxuKSx0KHdpbmRvdyxkb2N1bWVudCx0aGlzLl9lbGVtZW50LHRoaXMuX2JhY2tkcm9wKS5vZmYoaSksdGhpcy5fY29uZmlnPW51bGwsdGhpcy5fZWxlbWVudD1udWxsLHRoaXMuX2RpYWxvZz1udWxsLHRoaXMuX2JhY2tkcm9wPW51bGwsdGhpcy5faXNTaG93bj1udWxsLHRoaXMuX2lzQm9keU92ZXJmbG93aW5nPW51bGwsdGhpcy5faWdub3JlQmFja2Ryb3BDbGljaz1udWxsLHRoaXMuX3Njcm9sbGJhcldpZHRoPW51bGx9LHAuaGFuZGxlVXBkYXRlPWZ1bmN0aW9uKCl7dGhpcy5fYWRqdXN0RGlhbG9nKCl9LHAuX2dldENvbmZpZz1mdW5jdGlvbih0KXtyZXR1cm4gdD1yKHt9LGEsdCksUC50eXBlQ2hlY2tDb25maWcoZSx0LGwpLHR9LHAuX3Nob3dFbGVtZW50PWZ1bmN0aW9uKGUpe3ZhciBuPXRoaXMsaT1QLnN1cHBvcnRzVHJhbnNpdGlvbkVuZCgpJiZ0KHRoaXMuX2VsZW1lbnQpLmhhc0NsYXNzKGQpO3RoaXMuX2VsZW1lbnQucGFyZW50Tm9kZSYmdGhpcy5fZWxlbWVudC5wYXJlbnROb2RlLm5vZGVUeXBlPT09Tm9kZS5FTEVNRU5UX05PREV8fGRvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQodGhpcy5fZWxlbWVudCksdGhpcy5fZWxlbWVudC5zdHlsZS5kaXNwbGF5PSJibG9jayIsdGhpcy5fZWxlbWVudC5yZW1vdmVBdHRyaWJ1dGUoImFyaWEtaGlkZGVuIiksdGhpcy5fZWxlbWVudC5zY3JvbGxUb3A9MCxpJiZQLnJlZmxvdyh0aGlzLl9lbGVtZW50KSx0KHRoaXMuX2VsZW1lbnQpLmFkZENsYXNzKF8pLHRoaXMuX2NvbmZpZy5mb2N1cyYmdGhpcy5fZW5mb3JjZUZvY3VzKCk7dmFyIHM9dC5FdmVudChoLlNIT1dOLHtyZWxhdGVkVGFyZ2V0OmV9KSxyPWZ1bmN0aW9uKCl7bi5fY29uZmlnLmZvY3VzJiZuLl9lbGVtZW50LmZvY3VzKCksbi5faXNUcmFuc2l0aW9uaW5nPSExLHQobi5fZWxlbWVudCkudHJpZ2dlcihzKX07aT90KHRoaXMuX2RpYWxvZykub25lKFAuVFJBTlNJVElPTl9FTkQscikuZW11bGF0ZVRyYW5zaXRpb25FbmQoMzAwKTpyKCl9LHAuX2VuZm9yY2VGb2N1cz1mdW5jdGlvbigpe3ZhciBlPXRoaXM7dChkb2N1bWVudCkub2ZmKGguRk9DVVNJTikub24oaC5GT0NVU0lOLGZ1bmN0aW9uKG4pe2RvY3VtZW50IT09bi50YXJnZXQmJmUuX2VsZW1lbnQhPT1uLnRhcmdldCYmMD09PXQoZS5fZWxlbWVudCkuaGFzKG4udGFyZ2V0KS5sZW5ndGgmJmUuX2VsZW1lbnQuZm9jdXMoKX0pfSxwLl9zZXRFc2NhcGVFdmVudD1mdW5jdGlvbigpe3ZhciBlPXRoaXM7dGhpcy5faXNTaG93biYmdGhpcy5fY29uZmlnLmtleWJvYXJkP3QodGhpcy5fZWxlbWVudCkub24oaC5LRVlET1dOX0RJU01JU1MsZnVuY3Rpb24odCl7Mjc9PT10LndoaWNoJiYodC5wcmV2ZW50RGVmYXVsdCgpLGUuaGlkZSgpKX0pOnRoaXMuX2lzU2hvd258fHQodGhpcy5fZWxlbWVudCkub2ZmKGguS0VZRE9XTl9ESVNNSVNTKX0scC5fc2V0UmVzaXplRXZlbnQ9ZnVuY3Rpb24oKXt2YXIgZT10aGlzO3RoaXMuX2lzU2hvd24/dCh3aW5kb3cpLm9uKGguUkVTSVpFLGZ1bmN0aW9uKHQpe3JldHVybiBlLmhhbmRsZVVwZGF0ZSh0KX0pOnQod2luZG93KS5vZmYoaC5SRVNJWkUpfSxwLl9oaWRlTW9kYWw9ZnVuY3Rpb24oKXt2YXIgZT10aGlzO3RoaXMuX2VsZW1lbnQuc3R5bGUuZGlzcGxheT0ibm9uZSIsdGhpcy5fZWxlbWVudC5zZXRBdHRyaWJ1dGUoImFyaWEtaGlkZGVuIiwhMCksdGhpcy5faXNUcmFuc2l0aW9uaW5nPSExLHRoaXMuX3Nob3dCYWNrZHJvcChmdW5jdGlvbigpe3QoZG9jdW1lbnQuYm9keSkucmVtb3ZlQ2xhc3MoZiksZS5fcmVzZXRBZGp1c3RtZW50cygpLGUuX3Jlc2V0U2Nyb2xsYmFyKCksdChlLl9lbGVtZW50KS50cmlnZ2VyKGguSElEREVOKX0pfSxwLl9yZW1vdmVCYWNrZHJvcD1mdW5jdGlvbigpe3RoaXMuX2JhY2tkcm9wJiYodCh0aGlzLl9iYWNrZHJvcCkucmVtb3ZlKCksdGhpcy5fYmFja2Ryb3A9bnVsbCl9LHAuX3Nob3dCYWNrZHJvcD1mdW5jdGlvbihlKXt2YXIgbj10aGlzLGk9dCh0aGlzLl9lbGVtZW50KS5oYXNDbGFzcyhkKT9kOiIiO2lmKHRoaXMuX2lzU2hvd24mJnRoaXMuX2NvbmZpZy5iYWNrZHJvcCl7dmFyIHM9UC5zdXBwb3J0c1RyYW5zaXRpb25FbmQoKSYmaTtpZih0aGlzLl9iYWNrZHJvcD1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKSx0aGlzLl9iYWNrZHJvcC5jbGFzc05hbWU9dSxpJiZ0KHRoaXMuX2JhY2tkcm9wKS5hZGRDbGFzcyhpKSx0KHRoaXMuX2JhY2tkcm9wKS5hcHBlbmRUbyhkb2N1bWVudC5ib2R5KSx0KHRoaXMuX2VsZW1lbnQpLm9uKGguQ0xJQ0tfRElTTUlTUyxmdW5jdGlvbih0KXtuLl9pZ25vcmVCYWNrZHJvcENsaWNrP24uX2lnbm9yZUJhY2tkcm9wQ2xpY2s9ITE6dC50YXJnZXQ9PT10LmN1cnJlbnRUYXJnZXQmJigic3RhdGljIj09PW4uX2NvbmZpZy5iYWNrZHJvcD9uLl9lbGVtZW50LmZvY3VzKCk6bi5oaWRlKCkpfSkscyYmUC5yZWZsb3codGhpcy5fYmFja2Ryb3ApLHQodGhpcy5fYmFja2Ryb3ApLmFkZENsYXNzKF8pLCFlKXJldHVybjtpZighcylyZXR1cm4gdm9pZCBlKCk7dCh0aGlzLl9iYWNrZHJvcCkub25lKFAuVFJBTlNJVElPTl9FTkQsZSkuZW11bGF0ZVRyYW5zaXRpb25FbmQoMTUwKX1lbHNlIGlmKCF0aGlzLl9pc1Nob3duJiZ0aGlzLl9iYWNrZHJvcCl7dCh0aGlzLl9iYWNrZHJvcCkucmVtb3ZlQ2xhc3MoXyk7dmFyIHI9ZnVuY3Rpb24oKXtuLl9yZW1vdmVCYWNrZHJvcCgpLGUmJmUoKX07UC5zdXBwb3J0c1RyYW5zaXRpb25FbmQoKSYmdCh0aGlzLl9lbGVtZW50KS5oYXNDbGFzcyhkKT90KHRoaXMuX2JhY2tkcm9wKS5vbmUoUC5UUkFOU0lUSU9OX0VORCxyKS5lbXVsYXRlVHJhbnNpdGlvbkVuZCgxNTApOnIoKX1lbHNlIGUmJmUoKX0scC5fYWRqdXN0RGlhbG9nPWZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5fZWxlbWVudC5zY3JvbGxIZWlnaHQ+ZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LmNsaWVudEhlaWdodDshdGhpcy5faXNCb2R5T3ZlcmZsb3dpbmcmJnQmJih0aGlzLl9lbGVtZW50LnN0eWxlLnBhZGRpbmdMZWZ0PXRoaXMuX3Njcm9sbGJhcldpZHRoKyJweCIpLHRoaXMuX2lzQm9keU92ZXJmbG93aW5nJiYhdCYmKHRoaXMuX2VsZW1lbnQuc3R5bGUucGFkZGluZ1JpZ2h0PXRoaXMuX3Njcm9sbGJhcldpZHRoKyJweCIpfSxwLl9yZXNldEFkanVzdG1lbnRzPWZ1bmN0aW9uKCl7dGhpcy5fZWxlbWVudC5zdHlsZS5wYWRkaW5nTGVmdD0iIix0aGlzLl9lbGVtZW50LnN0eWxlLnBhZGRpbmdSaWdodD0iIn0scC5fY2hlY2tTY3JvbGxiYXI9ZnVuY3Rpb24oKXt2YXIgdD1kb2N1bWVudC5ib2R5LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO3RoaXMuX2lzQm9keU92ZXJmbG93aW5nPXQubGVmdCt0LnJpZ2h0PHdpbmRvdy5pbm5lcldpZHRoLHRoaXMuX3Njcm9sbGJhcldpZHRoPXRoaXMuX2dldFNjcm9sbGJhcldpZHRoKCl9LHAuX3NldFNjcm9sbGJhcj1mdW5jdGlvbigpe3ZhciBlPXRoaXM7aWYodGhpcy5faXNCb2R5T3ZlcmZsb3dpbmcpe3QoZy5GSVhFRF9DT05URU5UKS5lYWNoKGZ1bmN0aW9uKG4saSl7dmFyIHM9dChpKVswXS5zdHlsZS5wYWRkaW5nUmlnaHQscj10KGkpLmNzcygicGFkZGluZy1yaWdodCIpO3QoaSkuZGF0YSgicGFkZGluZy1yaWdodCIscykuY3NzKCJwYWRkaW5nLXJpZ2h0IixwYXJzZUZsb2F0KHIpK2UuX3Njcm9sbGJhcldpZHRoKyJweCIpfSksdChnLlNUSUNLWV9DT05URU5UKS5lYWNoKGZ1bmN0aW9uKG4saSl7dmFyIHM9dChpKVswXS5zdHlsZS5tYXJnaW5SaWdodCxyPXQoaSkuY3NzKCJtYXJnaW4tcmlnaHQiKTt0KGkpLmRhdGEoIm1hcmdpbi1yaWdodCIscykuY3NzKCJtYXJnaW4tcmlnaHQiLHBhcnNlRmxvYXQociktZS5fc2Nyb2xsYmFyV2lkdGgrInB4Iil9KSx0KGcuTkFWQkFSX1RPR0dMRVIpLmVhY2goZnVuY3Rpb24obixpKXt2YXIgcz10KGkpWzBdLnN0eWxlLm1hcmdpblJpZ2h0LHI9dChpKS5jc3MoIm1hcmdpbi1yaWdodCIpO3QoaSkuZGF0YSgibWFyZ2luLXJpZ2h0IixzKS5jc3MoIm1hcmdpbi1yaWdodCIscGFyc2VGbG9hdChyKStlLl9zY3JvbGxiYXJXaWR0aCsicHgiKX0pO3ZhciBuPWRvY3VtZW50LmJvZHkuc3R5bGUucGFkZGluZ1JpZ2h0LGk9dCgiYm9keSIpLmNzcygicGFkZGluZy1yaWdodCIpO3QoImJvZHkiKS5kYXRhKCJwYWRkaW5nLXJpZ2h0IixuKS5jc3MoInBhZGRpbmctcmlnaHQiLHBhcnNlRmxvYXQoaSkrdGhpcy5fc2Nyb2xsYmFyV2lkdGgrInB4Iil9fSxwLl9yZXNldFNjcm9sbGJhcj1mdW5jdGlvbigpe3QoZy5GSVhFRF9DT05URU5UKS5lYWNoKGZ1bmN0aW9uKGUsbil7dmFyIGk9dChuKS5kYXRhKCJwYWRkaW5nLXJpZ2h0Iik7InVuZGVmaW5lZCIhPXR5cGVvZiBpJiZ0KG4pLmNzcygicGFkZGluZy1yaWdodCIsaSkucmVtb3ZlRGF0YSgicGFkZGluZy1yaWdodCIpfSksdChnLlNUSUNLWV9DT05URU5UKyIsICIrZy5OQVZCQVJfVE9HR0xFUikuZWFjaChmdW5jdGlvbihlLG4pe3ZhciBpPXQobikuZGF0YSgibWFyZ2luLXJpZ2h0Iik7InVuZGVmaW5lZCIhPXR5cGVvZiBpJiZ0KG4pLmNzcygibWFyZ2luLXJpZ2h0IixpKS5yZW1vdmVEYXRhKCJtYXJnaW4tcmlnaHQiKX0pO3ZhciBlPXQoImJvZHkiKS5kYXRhKCJwYWRkaW5nLXJpZ2h0Iik7InVuZGVmaW5lZCIhPXR5cGVvZiBlJiZ0KCJib2R5IikuY3NzKCJwYWRkaW5nLXJpZ2h0IixlKS5yZW1vdmVEYXRhKCJwYWRkaW5nLXJpZ2h0Iil9LHAuX2dldFNjcm9sbGJhcldpZHRoPWZ1bmN0aW9uKCl7dmFyIHQ9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2Iik7dC5jbGFzc05hbWU9Yyxkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKHQpO3ZhciBlPXQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkud2lkdGgtdC5jbGllbnRXaWR0aDtyZXR1cm4gZG9jdW1lbnQuYm9keS5yZW1vdmVDaGlsZCh0KSxlfSxvLl9qUXVlcnlJbnRlcmZhY2U9ZnVuY3Rpb24oZSxpKXtyZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uKCl7dmFyIHM9dCh0aGlzKS5kYXRhKG4pLGE9cih7fSxvLkRlZmF1bHQsdCh0aGlzKS5kYXRhKCksIm9iamVjdCI9PXR5cGVvZiBlJiZlKTtpZihzfHwocz1uZXcgbyh0aGlzLGEpLHQodGhpcykuZGF0YShuLHMpKSwic3RyaW5nIj09dHlwZW9mIGUpe2lmKCJ1bmRlZmluZWQiPT10eXBlb2Ygc1tlXSl0aHJvdyBuZXcgVHlwZUVycm9yKCdObyBtZXRob2QgbmFtZWQgIicrZSsnIicpO3NbZV0oaSl9ZWxzZSBhLnNob3cmJnMuc2hvdyhpKX0pfSxzKG8sbnVsbCxbe2tleToiVkVSU0lPTiIsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIjQuMC4wIn19LHtrZXk6IkRlZmF1bHQiLGdldDpmdW5jdGlvbigpe3JldHVybiBhfX1dKSxvfSgpO3JldHVybiB0KGRvY3VtZW50KS5vbihoLkNMSUNLX0RBVEFfQVBJLGcuREFUQV9UT0dHTEUsZnVuY3Rpb24oZSl7dmFyIGkscz10aGlzLG89UC5nZXRTZWxlY3RvckZyb21FbGVtZW50KHRoaXMpO28mJihpPXQobylbMF0pO3ZhciBhPXQoaSkuZGF0YShuKT8idG9nZ2xlIjpyKHt9LHQoaSkuZGF0YSgpLHQodGhpcykuZGF0YSgpKTsiQSIhPT10aGlzLnRhZ05hbWUmJiJBUkVBIiE9PXRoaXMudGFnTmFtZXx8ZS5wcmV2ZW50RGVmYXVsdCgpO3ZhciBsPXQoaSkub25lKGguU0hPVyxmdW5jdGlvbihlKXtlLmlzRGVmYXVsdFByZXZlbnRlZCgpfHxsLm9uZShoLkhJRERFTixmdW5jdGlvbigpe3QocykuaXMoIjp2aXNpYmxlIikmJnMuZm9jdXMoKX0pfSk7cC5falF1ZXJ5SW50ZXJmYWNlLmNhbGwodChpKSxhLHRoaXMpfSksdC5mbi5tb2RhbD1wLl9qUXVlcnlJbnRlcmZhY2UsdC5mbi5tb2RhbC5Db25zdHJ1Y3Rvcj1wLHQuZm4ubW9kYWwubm9Db25mbGljdD1mdW5jdGlvbigpe3JldHVybiB0LmZuLm1vZGFsPW8scC5falF1ZXJ5SW50ZXJmYWNlfSxwfShlKSxVPWZ1bmN0aW9uKHQpe3ZhciBlPSJ0b29sdGlwIixpPSJicy50b29sdGlwIixvPSIuIitpLGE9dC5mbltlXSxsPW5ldyBSZWdFeHAoIihefFxccylicy10b29sdGlwXFxTKyIsImciKSxoPXthbmltYXRpb246ImJvb2xlYW4iLHRlbXBsYXRlOiJzdHJpbmciLHRpdGxlOiIoc3RyaW5nfGVsZW1lbnR8ZnVuY3Rpb24pIix0cmlnZ2VyOiJzdHJpbmciLGRlbGF5OiIobnVtYmVyfG9iamVjdCkiLGh0bWw6ImJvb2xlYW4iLHNlbGVjdG9yOiIoc3RyaW5nfGJvb2xlYW4pIixwbGFjZW1lbnQ6IihzdHJpbmd8ZnVuY3Rpb24pIixvZmZzZXQ6IihudW1iZXJ8c3RyaW5nKSIsY29udGFpbmVyOiIoc3RyaW5nfGVsZW1lbnR8Ym9vbGVhbikiLGZhbGxiYWNrUGxhY2VtZW50OiIoc3RyaW5nfGFycmF5KSIsYm91bmRhcnk6IihzdHJpbmd8ZWxlbWVudCkifSxjPXtBVVRPOiJhdXRvIixUT1A6InRvcCIsUklHSFQ6InJpZ2h0IixCT1RUT006ImJvdHRvbSIsTEVGVDoibGVmdCJ9LHU9e2FuaW1hdGlvbjohMCx0ZW1wbGF0ZTonPGRpdiBjbGFzcz0idG9vbHRpcCIgcm9sZT0idG9vbHRpcCI+PGRpdiBjbGFzcz0iYXJyb3ciPjwvZGl2PjxkaXYgY2xhc3M9InRvb2x0aXAtaW5uZXIiPjwvZGl2PjwvZGl2PicsdHJpZ2dlcjoiaG92ZXIgZm9jdXMiLHRpdGxlOiIiLGRlbGF5OjAsaHRtbDohMSxzZWxlY3RvcjohMSxwbGFjZW1lbnQ6InRvcCIsb2Zmc2V0OjAsY29udGFpbmVyOiExLGZhbGxiYWNrUGxhY2VtZW50OiJmbGlwIixib3VuZGFyeToic2Nyb2xsUGFyZW50In0sZj0ic2hvdyIsZD0ib3V0IixfPXtISURFOiJoaWRlIitvLEhJRERFTjoiaGlkZGVuIitvLFNIT1c6InNob3ciK28sU0hPV046InNob3duIitvLElOU0VSVEVEOiJpbnNlcnRlZCIrbyxDTElDSzoiY2xpY2siK28sRk9DVVNJTjoiZm9jdXNpbiIrbyxGT0NVU09VVDoiZm9jdXNvdXQiK28sTU9VU0VFTlRFUjoibW91c2VlbnRlciIrbyxNT1VTRUxFQVZFOiJtb3VzZWxlYXZlIitvfSxnPSJmYWRlIixwPSJzaG93IixtPSIudG9vbHRpcC1pbm5lciIsdj0iLmFycm93IixFPSJob3ZlciIsVD0iZm9jdXMiLHk9ImNsaWNrIixDPSJtYW51YWwiLEk9ZnVuY3Rpb24oKXtmdW5jdGlvbiBhKHQsZSl7aWYoInVuZGVmaW5lZCI9PXR5cGVvZiBuKXRocm93IG5ldyBUeXBlRXJyb3IoIkJvb3RzdHJhcCB0b29sdGlwcyByZXF1aXJlIFBvcHBlci5qcyAoaHR0cHM6Ly9wb3BwZXIuanMub3JnKSIpO3RoaXMuX2lzRW5hYmxlZD0hMCx0aGlzLl90aW1lb3V0PTAsdGhpcy5faG92ZXJTdGF0ZT0iIix0aGlzLl9hY3RpdmVUcmlnZ2VyPXt9LHRoaXMuX3BvcHBlcj1udWxsLHRoaXMuZWxlbWVudD10LHRoaXMuY29uZmlnPXRoaXMuX2dldENvbmZpZyhlKSx0aGlzLnRpcD1udWxsLHRoaXMuX3NldExpc3RlbmVycygpfXZhciBJPWEucHJvdG90eXBlO3JldHVybiBJLmVuYWJsZT1mdW5jdGlvbigpe3RoaXMuX2lzRW5hYmxlZD0hMH0sSS5kaXNhYmxlPWZ1bmN0aW9uKCl7dGhpcy5faXNFbmFibGVkPSExfSxJLnRvZ2dsZUVuYWJsZWQ9ZnVuY3Rpb24oKXt0aGlzLl9pc0VuYWJsZWQ9IXRoaXMuX2lzRW5hYmxlZH0sSS50b2dnbGU9ZnVuY3Rpb24oZSl7aWYodGhpcy5faXNFbmFibGVkKWlmKGUpe3ZhciBuPXRoaXMuY29uc3RydWN0b3IuREFUQV9LRVksaT10KGUuY3VycmVudFRhcmdldCkuZGF0YShuKTtpfHwoaT1uZXcgdGhpcy5jb25zdHJ1Y3RvcihlLmN1cnJlbnRUYXJnZXQsdGhpcy5fZ2V0RGVsZWdhdGVDb25maWcoKSksdChlLmN1cnJlbnRUYXJnZXQpLmRhdGEobixpKSksaS5fYWN0aXZlVHJpZ2dlci5jbGljaz0haS5fYWN0aXZlVHJpZ2dlci5jbGljayxpLl9pc1dpdGhBY3RpdmVUcmlnZ2VyKCk/aS5fZW50ZXIobnVsbCxpKTppLl9sZWF2ZShudWxsLGkpfWVsc2V7aWYodCh0aGlzLmdldFRpcEVsZW1lbnQoKSkuaGFzQ2xhc3MocCkpcmV0dXJuIHZvaWQgdGhpcy5fbGVhdmUobnVsbCx0aGlzKTt0aGlzLl9lbnRlcihudWxsLHRoaXMpfX0sSS5kaXNwb3NlPWZ1bmN0aW9uKCl7Y2xlYXJUaW1lb3V0KHRoaXMuX3RpbWVvdXQpLHQucmVtb3ZlRGF0YSh0aGlzLmVsZW1lbnQsdGhpcy5jb25zdHJ1Y3Rvci5EQVRBX0tFWSksdCh0aGlzLmVsZW1lbnQpLm9mZih0aGlzLmNvbnN0cnVjdG9yLkVWRU5UX0tFWSksdCh0aGlzLmVsZW1lbnQpLmNsb3Nlc3QoIi5tb2RhbCIpLm9mZigiaGlkZS5icy5tb2RhbCIpLHRoaXMudGlwJiZ0KHRoaXMudGlwKS5yZW1vdmUoKSx0aGlzLl9pc0VuYWJsZWQ9bnVsbCx0aGlzLl90aW1lb3V0PW51bGwsdGhpcy5faG92ZXJTdGF0ZT1udWxsLHRoaXMuX2FjdGl2ZVRyaWdnZXI9bnVsbCxudWxsIT09dGhpcy5fcG9wcGVyJiZ0aGlzLl9wb3BwZXIuZGVzdHJveSgpLHRoaXMuX3BvcHBlcj1udWxsLHRoaXMuZWxlbWVudD1udWxsLHRoaXMuY29uZmlnPW51bGwsdGhpcy50aXA9bnVsbH0sSS5zaG93PWZ1bmN0aW9uKCl7dmFyIGU9dGhpcztpZigibm9uZSI9PT10KHRoaXMuZWxlbWVudCkuY3NzKCJkaXNwbGF5IikpdGhyb3cgbmV3IEVycm9yKCJQbGVhc2UgdXNlIHNob3cgb24gdmlzaWJsZSBlbGVtZW50cyIpO3ZhciBpPXQuRXZlbnQodGhpcy5jb25zdHJ1Y3Rvci5FdmVudC5TSE9XKTtpZih0aGlzLmlzV2l0aENvbnRlbnQoKSYmdGhpcy5faXNFbmFibGVkKXt0KHRoaXMuZWxlbWVudCkudHJpZ2dlcihpKTt2YXIgcz10LmNvbnRhaW5zKHRoaXMuZWxlbWVudC5vd25lckRvY3VtZW50LmRvY3VtZW50RWxlbWVudCx0aGlzLmVsZW1lbnQpO2lmKGkuaXNEZWZhdWx0UHJldmVudGVkKCl8fCFzKXJldHVybjt2YXIgcj10aGlzLmdldFRpcEVsZW1lbnQoKSxvPVAuZ2V0VUlEKHRoaXMuY29uc3RydWN0b3IuTkFNRSk7ci5zZXRBdHRyaWJ1dGUoImlkIixvKSx0aGlzLmVsZW1lbnQuc2V0QXR0cmlidXRlKCJhcmlhLWRlc2NyaWJlZGJ5IixvKSx0aGlzLnNldENvbnRlbnQoKSx0aGlzLmNvbmZpZy5hbmltYXRpb24mJnQocikuYWRkQ2xhc3MoZyk7dmFyIGw9ImZ1bmN0aW9uIj09dHlwZW9mIHRoaXMuY29uZmlnLnBsYWNlbWVudD90aGlzLmNvbmZpZy5wbGFjZW1lbnQuY2FsbCh0aGlzLHIsdGhpcy5lbGVtZW50KTp0aGlzLmNvbmZpZy5wbGFjZW1lbnQsaD10aGlzLl9nZXRBdHRhY2htZW50KGwpO3RoaXMuYWRkQXR0YWNobWVudENsYXNzKGgpO3ZhciBjPSExPT09dGhpcy5jb25maWcuY29udGFpbmVyP2RvY3VtZW50LmJvZHk6dCh0aGlzLmNvbmZpZy5jb250YWluZXIpO3QocikuZGF0YSh0aGlzLmNvbnN0cnVjdG9yLkRBVEFfS0VZLHRoaXMpLHQuY29udGFpbnModGhpcy5lbGVtZW50Lm93bmVyRG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LHRoaXMudGlwKXx8dChyKS5hcHBlbmRUbyhjKSx0KHRoaXMuZWxlbWVudCkudHJpZ2dlcih0aGlzLmNvbnN0cnVjdG9yLkV2ZW50LklOU0VSVEVEKSx0aGlzLl9wb3BwZXI9bmV3IG4odGhpcy5lbGVtZW50LHIse3BsYWNlbWVudDpoLG1vZGlmaWVyczp7b2Zmc2V0OntvZmZzZXQ6dGhpcy5jb25maWcub2Zmc2V0fSxmbGlwOntiZWhhdmlvcjp0aGlzLmNvbmZpZy5mYWxsYmFja1BsYWNlbWVudH0sYXJyb3c6e2VsZW1lbnQ6dn0scHJldmVudE92ZXJmbG93Ontib3VuZGFyaWVzRWxlbWVudDp0aGlzLmNvbmZpZy5ib3VuZGFyeX19LG9uQ3JlYXRlOmZ1bmN0aW9uKHQpe3Qub3JpZ2luYWxQbGFjZW1lbnQhPT10LnBsYWNlbWVudCYmZS5faGFuZGxlUG9wcGVyUGxhY2VtZW50Q2hhbmdlKHQpfSxvblVwZGF0ZTpmdW5jdGlvbih0KXtlLl9oYW5kbGVQb3BwZXJQbGFjZW1lbnRDaGFuZ2UodCl9fSksdChyKS5hZGRDbGFzcyhwKSwib250b3VjaHN0YXJ0ImluIGRvY3VtZW50LmRvY3VtZW50RWxlbWVudCYmdCgiYm9keSIpLmNoaWxkcmVuKCkub24oIm1vdXNlb3ZlciIsbnVsbCx0Lm5vb3ApO3ZhciB1PWZ1bmN0aW9uKCl7ZS5jb25maWcuYW5pbWF0aW9uJiZlLl9maXhUcmFuc2l0aW9uKCk7dmFyIG49ZS5faG92ZXJTdGF0ZTtlLl9ob3ZlclN0YXRlPW51bGwsdChlLmVsZW1lbnQpLnRyaWdnZXIoZS5jb25zdHJ1Y3Rvci5FdmVudC5TSE9XTiksbj09PWQmJmUuX2xlYXZlKG51bGwsZSl9O1Auc3VwcG9ydHNUcmFuc2l0aW9uRW5kKCkmJnQodGhpcy50aXApLmhhc0NsYXNzKGcpP3QodGhpcy50aXApLm9uZShQLlRSQU5TSVRJT05fRU5ELHUpLmVtdWxhdGVUcmFuc2l0aW9uRW5kKGEuX1RSQU5TSVRJT05fRFVSQVRJT04pOnUoKX19LEkuaGlkZT1mdW5jdGlvbihlKXt2YXIgbj10aGlzLGk9dGhpcy5nZXRUaXBFbGVtZW50KCkscz10LkV2ZW50KHRoaXMuY29uc3RydWN0b3IuRXZlbnQuSElERSkscj1mdW5jdGlvbigpe24uX2hvdmVyU3RhdGUhPT1mJiZpLnBhcmVudE5vZGUmJmkucGFyZW50Tm9kZS5yZW1vdmVDaGlsZChpKSxuLl9jbGVhblRpcENsYXNzKCksbi5lbGVtZW50LnJlbW92ZUF0dHJpYnV0ZSgiYXJpYS1kZXNjcmliZWRieSIpLHQobi5lbGVtZW50KS50cmlnZ2VyKG4uY29uc3RydWN0b3IuRXZlbnQuSElEREVOKSxudWxsIT09bi5fcG9wcGVyJiZuLl9wb3BwZXIuZGVzdHJveSgpLGUmJmUoKX07dCh0aGlzLmVsZW1lbnQpLnRyaWdnZXIocykscy5pc0RlZmF1bHRQcmV2ZW50ZWQoKXx8KHQoaSkucmVtb3ZlQ2xhc3MocCksIm9udG91Y2hzdGFydCJpbiBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQmJnQoImJvZHkiKS5jaGlsZHJlbigpLm9mZigibW91c2VvdmVyIixudWxsLHQubm9vcCksdGhpcy5fYWN0aXZlVHJpZ2dlclt5XT0hMSx0aGlzLl9hY3RpdmVUcmlnZ2VyW1RdPSExLHRoaXMuX2FjdGl2ZVRyaWdnZXJbRV09ITEsUC5zdXBwb3J0c1RyYW5zaXRpb25FbmQoKSYmdCh0aGlzLnRpcCkuaGFzQ2xhc3MoZyk/dChpKS5vbmUoUC5UUkFOU0lUSU9OX0VORCxyKS5lbXVsYXRlVHJhbnNpdGlvbkVuZCgxNTApOnIoKSx0aGlzLl9ob3ZlclN0YXRlPSIiKX0sSS51cGRhdGU9ZnVuY3Rpb24oKXtudWxsIT09dGhpcy5fcG9wcGVyJiZ0aGlzLl9wb3BwZXIuc2NoZWR1bGVVcGRhdGUoKX0sSS5pc1dpdGhDb250ZW50PWZ1bmN0aW9uKCl7cmV0dXJuIEJvb2xlYW4odGhpcy5nZXRUaXRsZSgpKX0sSS5hZGRBdHRhY2htZW50Q2xhc3M9ZnVuY3Rpb24oZSl7dCh0aGlzLmdldFRpcEVsZW1lbnQoKSkuYWRkQ2xhc3MoImJzLXRvb2x0aXAtIitlKX0sSS5nZXRUaXBFbGVtZW50PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMudGlwPXRoaXMudGlwfHx0KHRoaXMuY29uZmlnLnRlbXBsYXRlKVswXSx0aGlzLnRpcH0sSS5zZXRDb250ZW50PWZ1bmN0aW9uKCl7dmFyIGU9dCh0aGlzLmdldFRpcEVsZW1lbnQoKSk7dGhpcy5zZXRFbGVtZW50Q29udGVudChlLmZpbmQobSksdGhpcy5nZXRUaXRsZSgpKSxlLnJlbW92ZUNsYXNzKGcrIiAiK3ApfSxJLnNldEVsZW1lbnRDb250ZW50PWZ1bmN0aW9uKGUsbil7dmFyIGk9dGhpcy5jb25maWcuaHRtbDsib2JqZWN0Ij09dHlwZW9mIG4mJihuLm5vZGVUeXBlfHxuLmpxdWVyeSk/aT90KG4pLnBhcmVudCgpLmlzKGUpfHxlLmVtcHR5KCkuYXBwZW5kKG4pOmUudGV4dCh0KG4pLnRleHQoKSk6ZVtpPyJodG1sIjoidGV4dCJdKG4pfSxJLmdldFRpdGxlPWZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5lbGVtZW50LmdldEF0dHJpYnV0ZSgiZGF0YS1vcmlnaW5hbC10aXRsZSIpO3JldHVybiB0fHwodD0iZnVuY3Rpb24iPT10eXBlb2YgdGhpcy5jb25maWcudGl0bGU/dGhpcy5jb25maWcudGl0bGUuY2FsbCh0aGlzLmVsZW1lbnQpOnRoaXMuY29uZmlnLnRpdGxlKSx0fSxJLl9nZXRBdHRhY2htZW50PWZ1bmN0aW9uKHQpe3JldHVybiBjW3QudG9VcHBlckNhc2UoKV19LEkuX3NldExpc3RlbmVycz1mdW5jdGlvbigpe3ZhciBlPXRoaXM7dGhpcy5jb25maWcudHJpZ2dlci5zcGxpdCgiICIpLmZvckVhY2goZnVuY3Rpb24obil7aWYoImNsaWNrIj09PW4pdChlLmVsZW1lbnQpLm9uKGUuY29uc3RydWN0b3IuRXZlbnQuQ0xJQ0ssZS5jb25maWcuc2VsZWN0b3IsZnVuY3Rpb24odCl7cmV0dXJuIGUudG9nZ2xlKHQpfSk7ZWxzZSBpZihuIT09Qyl7dmFyIGk9bj09PUU/ZS5jb25zdHJ1Y3Rvci5FdmVudC5NT1VTRUVOVEVSOmUuY29uc3RydWN0b3IuRXZlbnQuRk9DVVNJTixzPW49PT1FP2UuY29uc3RydWN0b3IuRXZlbnQuTU9VU0VMRUFWRTplLmNvbnN0cnVjdG9yLkV2ZW50LkZPQ1VTT1VUO3QoZS5lbGVtZW50KS5vbihpLGUuY29uZmlnLnNlbGVjdG9yLGZ1bmN0aW9uKHQpe3JldHVybiBlLl9lbnRlcih0KX0pLm9uKHMsZS5jb25maWcuc2VsZWN0b3IsZnVuY3Rpb24odCl7cmV0dXJuIGUuX2xlYXZlKHQpfSl9dChlLmVsZW1lbnQpLmNsb3Nlc3QoIi5tb2RhbCIpLm9uKCJoaWRlLmJzLm1vZGFsIixmdW5jdGlvbigpe3JldHVybiBlLmhpZGUoKX0pfSksdGhpcy5jb25maWcuc2VsZWN0b3I/dGhpcy5jb25maWc9cih7fSx0aGlzLmNvbmZpZyx7dHJpZ2dlcjoibWFudWFsIixzZWxlY3RvcjoiIn0pOnRoaXMuX2ZpeFRpdGxlKCl9LEkuX2ZpeFRpdGxlPWZ1bmN0aW9uKCl7dmFyIHQ9dHlwZW9mIHRoaXMuZWxlbWVudC5nZXRBdHRyaWJ1dGUoImRhdGEtb3JpZ2luYWwtdGl0bGUiKTsodGhpcy5lbGVtZW50LmdldEF0dHJpYnV0ZSgidGl0bGUiKXx8InN0cmluZyIhPT10KSYmKHRoaXMuZWxlbWVudC5zZXRBdHRyaWJ1dGUoImRhdGEtb3JpZ2luYWwtdGl0bGUiLHRoaXMuZWxlbWVudC5nZXRBdHRyaWJ1dGUoInRpdGxlIil8fCIiKSx0aGlzLmVsZW1lbnQuc2V0QXR0cmlidXRlKCJ0aXRsZSIsIiIpKX0sSS5fZW50ZXI9ZnVuY3Rpb24oZSxuKXt2YXIgaT10aGlzLmNvbnN0cnVjdG9yLkRBVEFfS0VZOyhuPW58fHQoZS5jdXJyZW50VGFyZ2V0KS5kYXRhKGkpKXx8KG49bmV3IHRoaXMuY29uc3RydWN0b3IoZS5jdXJyZW50VGFyZ2V0LHRoaXMuX2dldERlbGVnYXRlQ29uZmlnKCkpLHQoZS5jdXJyZW50VGFyZ2V0KS5kYXRhKGksbikpLGUmJihuLl9hY3RpdmVUcmlnZ2VyWyJmb2N1c2luIj09PWUudHlwZT9UOkVdPSEwKSx0KG4uZ2V0VGlwRWxlbWVudCgpKS5oYXNDbGFzcyhwKXx8bi5faG92ZXJTdGF0ZT09PWY/bi5faG92ZXJTdGF0ZT1mOihjbGVhclRpbWVvdXQobi5fdGltZW91dCksbi5faG92ZXJTdGF0ZT1mLG4uY29uZmlnLmRlbGF5JiZuLmNvbmZpZy5kZWxheS5zaG93P24uX3RpbWVvdXQ9c2V0VGltZW91dChmdW5jdGlvbigpe24uX2hvdmVyU3RhdGU9PT1mJiZuLnNob3coKX0sbi5jb25maWcuZGVsYXkuc2hvdyk6bi5zaG93KCkpfSxJLl9sZWF2ZT1mdW5jdGlvbihlLG4pe3ZhciBpPXRoaXMuY29uc3RydWN0b3IuREFUQV9LRVk7KG49bnx8dChlLmN1cnJlbnRUYXJnZXQpLmRhdGEoaSkpfHwobj1uZXcgdGhpcy5jb25zdHJ1Y3RvcihlLmN1cnJlbnRUYXJnZXQsdGhpcy5fZ2V0RGVsZWdhdGVDb25maWcoKSksdChlLmN1cnJlbnRUYXJnZXQpLmRhdGEoaSxuKSksZSYmKG4uX2FjdGl2ZVRyaWdnZXJbImZvY3Vzb3V0Ij09PWUudHlwZT9UOkVdPSExKSxuLl9pc1dpdGhBY3RpdmVUcmlnZ2VyKCl8fChjbGVhclRpbWVvdXQobi5fdGltZW91dCksbi5faG92ZXJTdGF0ZT1kLG4uY29uZmlnLmRlbGF5JiZuLmNvbmZpZy5kZWxheS5oaWRlP24uX3RpbWVvdXQ9c2V0VGltZW91dChmdW5jdGlvbigpe24uX2hvdmVyU3RhdGU9PT1kJiZuLmhpZGUoKX0sbi5jb25maWcuZGVsYXkuaGlkZSk6bi5oaWRlKCkpfSxJLl9pc1dpdGhBY3RpdmVUcmlnZ2VyPWZ1bmN0aW9uKCl7Zm9yKHZhciB0IGluIHRoaXMuX2FjdGl2ZVRyaWdnZXIpaWYodGhpcy5fYWN0aXZlVHJpZ2dlclt0XSlyZXR1cm4hMDtyZXR1cm4hMX0sSS5fZ2V0Q29uZmlnPWZ1bmN0aW9uKG4pe3JldHVybiJudW1iZXIiPT10eXBlb2Yobj1yKHt9LHRoaXMuY29uc3RydWN0b3IuRGVmYXVsdCx0KHRoaXMuZWxlbWVudCkuZGF0YSgpLG4pKS5kZWxheSYmKG4uZGVsYXk9e3Nob3c6bi5kZWxheSxoaWRlOm4uZGVsYXl9KSwibnVtYmVyIj09dHlwZW9mIG4udGl0bGUmJihuLnRpdGxlPW4udGl0bGUudG9TdHJpbmcoKSksIm51bWJlciI9PXR5cGVvZiBuLmNvbnRlbnQmJihuLmNvbnRlbnQ9bi5jb250ZW50LnRvU3RyaW5nKCkpLFAudHlwZUNoZWNrQ29uZmlnKGUsbix0aGlzLmNvbnN0cnVjdG9yLkRlZmF1bHRUeXBlKSxufSxJLl9nZXREZWxlZ2F0ZUNvbmZpZz1mdW5jdGlvbigpe3ZhciB0PXt9O2lmKHRoaXMuY29uZmlnKWZvcih2YXIgZSBpbiB0aGlzLmNvbmZpZyl0aGlzLmNvbnN0cnVjdG9yLkRlZmF1bHRbZV0hPT10aGlzLmNvbmZpZ1tlXSYmKHRbZV09dGhpcy5jb25maWdbZV0pO3JldHVybiB0fSxJLl9jbGVhblRpcENsYXNzPWZ1bmN0aW9uKCl7dmFyIGU9dCh0aGlzLmdldFRpcEVsZW1lbnQoKSksbj1lLmF0dHIoImNsYXNzIikubWF0Y2gobCk7bnVsbCE9PW4mJm4ubGVuZ3RoPjAmJmUucmVtb3ZlQ2xhc3Mobi5qb2luKCIiKSl9LEkuX2hhbmRsZVBvcHBlclBsYWNlbWVudENoYW5nZT1mdW5jdGlvbih0KXt0aGlzLl9jbGVhblRpcENsYXNzKCksdGhpcy5hZGRBdHRhY2htZW50Q2xhc3ModGhpcy5fZ2V0QXR0YWNobWVudCh0LnBsYWNlbWVudCkpfSxJLl9maXhUcmFuc2l0aW9uPWZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5nZXRUaXBFbGVtZW50KCksbj10aGlzLmNvbmZpZy5hbmltYXRpb247bnVsbD09PWUuZ2V0QXR0cmlidXRlKCJ4LXBsYWNlbWVudCIpJiYodChlKS5yZW1vdmVDbGFzcyhnKSx0aGlzLmNvbmZpZy5hbmltYXRpb249ITEsdGhpcy5oaWRlKCksdGhpcy5zaG93KCksdGhpcy5jb25maWcuYW5pbWF0aW9uPW4pfSxhLl9qUXVlcnlJbnRlcmZhY2U9ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMuZWFjaChmdW5jdGlvbigpe3ZhciBuPXQodGhpcykuZGF0YShpKSxzPSJvYmplY3QiPT10eXBlb2YgZSYmZTtpZigobnx8IS9kaXNwb3NlfGhpZGUvLnRlc3QoZSkpJiYobnx8KG49bmV3IGEodGhpcyxzKSx0KHRoaXMpLmRhdGEoaSxuKSksInN0cmluZyI9PXR5cGVvZiBlKSl7aWYoInVuZGVmaW5lZCI9PXR5cGVvZiBuW2VdKXRocm93IG5ldyBUeXBlRXJyb3IoJ05vIG1ldGhvZCBuYW1lZCAiJytlKyciJyk7bltlXSgpfX0pfSxzKGEsbnVsbCxbe2tleToiVkVSU0lPTiIsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIjQuMC4wIn19LHtrZXk6IkRlZmF1bHQiLGdldDpmdW5jdGlvbigpe3JldHVybiB1fX0se2tleToiTkFNRSIsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIGV9fSx7a2V5OiJEQVRBX0tFWSIsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIGl9fSx7a2V5OiJFdmVudCIsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIF99fSx7a2V5OiJFVkVOVF9LRVkiLGdldDpmdW5jdGlvbigpe3JldHVybiBvfX0se2tleToiRGVmYXVsdFR5cGUiLGdldDpmdW5jdGlvbigpe3JldHVybiBofX1dKSxhfSgpO3JldHVybiB0LmZuW2VdPUkuX2pRdWVyeUludGVyZmFjZSx0LmZuW2VdLkNvbnN0cnVjdG9yPUksdC5mbltlXS5ub0NvbmZsaWN0PWZ1bmN0aW9uKCl7cmV0dXJuIHQuZm5bZV09YSxJLl9qUXVlcnlJbnRlcmZhY2V9LEl9KGUpLHg9ZnVuY3Rpb24odCl7dmFyIGU9InBvcG92ZXIiLG49ImJzLnBvcG92ZXIiLGk9Ii4iK24sbz10LmZuW2VdLGE9bmV3IFJlZ0V4cCgiKF58XFxzKWJzLXBvcG92ZXJcXFMrIiwiZyIpLGw9cih7fSxVLkRlZmF1bHQse3BsYWNlbWVudDoicmlnaHQiLHRyaWdnZXI6ImNsaWNrIixjb250ZW50OiIiLHRlbXBsYXRlOic8ZGl2IGNsYXNzPSJwb3BvdmVyIiByb2xlPSJ0b29sdGlwIj48ZGl2IGNsYXNzPSJhcnJvdyI+PC9kaXY+PGgzIGNsYXNzPSJwb3BvdmVyLWhlYWRlciI+PC9oMz48ZGl2IGNsYXNzPSJwb3BvdmVyLWJvZHkiPjwvZGl2PjwvZGl2Pid9KSxoPXIoe30sVS5EZWZhdWx0VHlwZSx7Y29udGVudDoiKHN0cmluZ3xlbGVtZW50fGZ1bmN0aW9uKSJ9KSxjPSJmYWRlIix1PSJzaG93IixmPSIucG9wb3Zlci1oZWFkZXIiLGQ9Ii5wb3BvdmVyLWJvZHkiLF89e0hJREU6ImhpZGUiK2ksSElEREVOOiJoaWRkZW4iK2ksU0hPVzoic2hvdyIraSxTSE9XTjoic2hvd24iK2ksSU5TRVJURUQ6Imluc2VydGVkIitpLENMSUNLOiJjbGljayIraSxGT0NVU0lOOiJmb2N1c2luIitpLEZPQ1VTT1VUOiJmb2N1c291dCIraSxNT1VTRUVOVEVSOiJtb3VzZWVudGVyIitpLE1PVVNFTEVBVkU6Im1vdXNlbGVhdmUiK2l9LGc9ZnVuY3Rpb24ocil7dmFyIG8sZztmdW5jdGlvbiBwKCl7cmV0dXJuIHIuYXBwbHkodGhpcyxhcmd1bWVudHMpfHx0aGlzfWc9ciwobz1wKS5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZShnLnByb3RvdHlwZSksby5wcm90b3R5cGUuY29uc3RydWN0b3I9byxvLl9fcHJvdG9fXz1nO3ZhciBtPXAucHJvdG90eXBlO3JldHVybiBtLmlzV2l0aENvbnRlbnQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5nZXRUaXRsZSgpfHx0aGlzLl9nZXRDb250ZW50KCl9LG0uYWRkQXR0YWNobWVudENsYXNzPWZ1bmN0aW9uKGUpe3QodGhpcy5nZXRUaXBFbGVtZW50KCkpLmFkZENsYXNzKCJicy1wb3BvdmVyLSIrZSl9LG0uZ2V0VGlwRWxlbWVudD1mdW5jdGlvbigpe3JldHVybiB0aGlzLnRpcD10aGlzLnRpcHx8dCh0aGlzLmNvbmZpZy50ZW1wbGF0ZSlbMF0sdGhpcy50aXB9LG0uc2V0Q29udGVudD1mdW5jdGlvbigpe3ZhciBlPXQodGhpcy5nZXRUaXBFbGVtZW50KCkpO3RoaXMuc2V0RWxlbWVudENvbnRlbnQoZS5maW5kKGYpLHRoaXMuZ2V0VGl0bGUoKSk7dmFyIG49dGhpcy5fZ2V0Q29udGVudCgpOyJmdW5jdGlvbiI9PXR5cGVvZiBuJiYobj1uLmNhbGwodGhpcy5lbGVtZW50KSksdGhpcy5zZXRFbGVtZW50Q29udGVudChlLmZpbmQoZCksbiksZS5yZW1vdmVDbGFzcyhjKyIgIit1KX0sbS5fZ2V0Q29udGVudD1mdW5jdGlvbigpe3JldHVybiB0aGlzLmVsZW1lbnQuZ2V0QXR0cmlidXRlKCJkYXRhLWNvbnRlbnQiKXx8dGhpcy5jb25maWcuY29udGVudH0sbS5fY2xlYW5UaXBDbGFzcz1mdW5jdGlvbigpe3ZhciBlPXQodGhpcy5nZXRUaXBFbGVtZW50KCkpLG49ZS5hdHRyKCJjbGFzcyIpLm1hdGNoKGEpO251bGwhPT1uJiZuLmxlbmd0aD4wJiZlLnJlbW92ZUNsYXNzKG4uam9pbigiIikpfSxwLl9qUXVlcnlJbnRlcmZhY2U9ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMuZWFjaChmdW5jdGlvbigpe3ZhciBpPXQodGhpcykuZGF0YShuKSxzPSJvYmplY3QiPT10eXBlb2YgZT9lOm51bGw7aWYoKGl8fCEvZGVzdHJveXxoaWRlLy50ZXN0KGUpKSYmKGl8fChpPW5ldyBwKHRoaXMscyksdCh0aGlzKS5kYXRhKG4saSkpLCJzdHJpbmciPT10eXBlb2YgZSkpe2lmKCJ1bmRlZmluZWQiPT10eXBlb2YgaVtlXSl0aHJvdyBuZXcgVHlwZUVycm9yKCdObyBtZXRob2QgbmFtZWQgIicrZSsnIicpO2lbZV0oKX19KX0scyhwLG51bGwsW3trZXk6IlZFUlNJT04iLGdldDpmdW5jdGlvbigpe3JldHVybiI0LjAuMCJ9fSx7a2V5OiJEZWZhdWx0IixnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gbH19LHtrZXk6Ik5BTUUiLGdldDpmdW5jdGlvbigpe3JldHVybiBlfX0se2tleToiREFUQV9LRVkiLGdldDpmdW5jdGlvbigpe3JldHVybiBufX0se2tleToiRXZlbnQiLGdldDpmdW5jdGlvbigpe3JldHVybiBffX0se2tleToiRVZFTlRfS0VZIixnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gaX19LHtrZXk6IkRlZmF1bHRUeXBlIixnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gaH19XSkscH0oVSk7cmV0dXJuIHQuZm5bZV09Zy5falF1ZXJ5SW50ZXJmYWNlLHQuZm5bZV0uQ29uc3RydWN0b3I9Zyx0LmZuW2VdLm5vQ29uZmxpY3Q9ZnVuY3Rpb24oKXtyZXR1cm4gdC5mbltlXT1vLGcuX2pRdWVyeUludGVyZmFjZX0sZ30oZSksSz1mdW5jdGlvbih0KXt2YXIgZT0ic2Nyb2xsc3B5IixuPSJicy5zY3JvbGxzcHkiLGk9Ii4iK24sbz10LmZuW2VdLGE9e29mZnNldDoxMCxtZXRob2Q6ImF1dG8iLHRhcmdldDoiIn0sbD17b2Zmc2V0OiJudW1iZXIiLG1ldGhvZDoic3RyaW5nIix0YXJnZXQ6IihzdHJpbmd8ZWxlbWVudCkifSxoPXtBQ1RJVkFURToiYWN0aXZhdGUiK2ksU0NST0xMOiJzY3JvbGwiK2ksTE9BRF9EQVRBX0FQSToibG9hZCIraSsiLmRhdGEtYXBpIn0sYz0iZHJvcGRvd24taXRlbSIsdT0iYWN0aXZlIixmPXtEQVRBX1NQWTonW2RhdGEtc3B5PSJzY3JvbGwiXScsQUNUSVZFOiIuYWN0aXZlIixOQVZfTElTVF9HUk9VUDoiLm5hdiwgLmxpc3QtZ3JvdXAiLE5BVl9MSU5LUzoiLm5hdi1saW5rIixOQVZfSVRFTVM6Ii5uYXYtaXRlbSIsTElTVF9JVEVNUzoiLmxpc3QtZ3JvdXAtaXRlbSIsRFJPUERPV046Ii5kcm9wZG93biIsRFJPUERPV05fSVRFTVM6Ii5kcm9wZG93bi1pdGVtIixEUk9QRE9XTl9UT0dHTEU6Ii5kcm9wZG93bi10b2dnbGUifSxkPSJvZmZzZXQiLF89InBvc2l0aW9uIixnPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gbyhlLG4pe3ZhciBpPXRoaXM7dGhpcy5fZWxlbWVudD1lLHRoaXMuX3Njcm9sbEVsZW1lbnQ9IkJPRFkiPT09ZS50YWdOYW1lP3dpbmRvdzplLHRoaXMuX2NvbmZpZz10aGlzLl9nZXRDb25maWcobiksdGhpcy5fc2VsZWN0b3I9dGhpcy5fY29uZmlnLnRhcmdldCsiICIrZi5OQVZfTElOS1MrIiwiK3RoaXMuX2NvbmZpZy50YXJnZXQrIiAiK2YuTElTVF9JVEVNUysiLCIrdGhpcy5fY29uZmlnLnRhcmdldCsiICIrZi5EUk9QRE9XTl9JVEVNUyx0aGlzLl9vZmZzZXRzPVtdLHRoaXMuX3RhcmdldHM9W10sdGhpcy5fYWN0aXZlVGFyZ2V0PW51bGwsdGhpcy5fc2Nyb2xsSGVpZ2h0PTAsdCh0aGlzLl9zY3JvbGxFbGVtZW50KS5vbihoLlNDUk9MTCxmdW5jdGlvbih0KXtyZXR1cm4gaS5fcHJvY2Vzcyh0KX0pLHRoaXMucmVmcmVzaCgpLHRoaXMuX3Byb2Nlc3MoKX12YXIgZz1vLnByb3RvdHlwZTtyZXR1cm4gZy5yZWZyZXNoPWZ1bmN0aW9uKCl7dmFyIGU9dGhpcyxuPXRoaXMuX3Njcm9sbEVsZW1lbnQ9PT10aGlzLl9zY3JvbGxFbGVtZW50LndpbmRvdz9kOl8saT0iYXV0byI9PT10aGlzLl9jb25maWcubWV0aG9kP246dGhpcy5fY29uZmlnLm1ldGhvZCxzPWk9PT1fP3RoaXMuX2dldFNjcm9sbFRvcCgpOjA7dGhpcy5fb2Zmc2V0cz1bXSx0aGlzLl90YXJnZXRzPVtdLHRoaXMuX3Njcm9sbEhlaWdodD10aGlzLl9nZXRTY3JvbGxIZWlnaHQoKSx0Lm1ha2VBcnJheSh0KHRoaXMuX3NlbGVjdG9yKSkubWFwKGZ1bmN0aW9uKGUpe3ZhciBuLHI9UC5nZXRTZWxlY3RvckZyb21FbGVtZW50KGUpO2lmKHImJihuPXQocilbMF0pLG4pe3ZhciBvPW4uZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7aWYoby53aWR0aHx8by5oZWlnaHQpcmV0dXJuW3QobilbaV0oKS50b3ArcyxyXX1yZXR1cm4gbnVsbH0pLmZpbHRlcihmdW5jdGlvbih0KXtyZXR1cm4gdH0pLnNvcnQoZnVuY3Rpb24odCxlKXtyZXR1cm4gdFswXS1lWzBdfSkuZm9yRWFjaChmdW5jdGlvbih0KXtlLl9vZmZzZXRzLnB1c2godFswXSksZS5fdGFyZ2V0cy5wdXNoKHRbMV0pfSl9LGcuZGlzcG9zZT1mdW5jdGlvbigpe3QucmVtb3ZlRGF0YSh0aGlzLl9lbGVtZW50LG4pLHQodGhpcy5fc2Nyb2xsRWxlbWVudCkub2ZmKGkpLHRoaXMuX2VsZW1lbnQ9bnVsbCx0aGlzLl9zY3JvbGxFbGVtZW50PW51bGwsdGhpcy5fY29uZmlnPW51bGwsdGhpcy5fc2VsZWN0b3I9bnVsbCx0aGlzLl9vZmZzZXRzPW51bGwsdGhpcy5fdGFyZ2V0cz1udWxsLHRoaXMuX2FjdGl2ZVRhcmdldD1udWxsLHRoaXMuX3Njcm9sbEhlaWdodD1udWxsfSxnLl9nZXRDb25maWc9ZnVuY3Rpb24obil7aWYoInN0cmluZyIhPXR5cGVvZihuPXIoe30sYSxuKSkudGFyZ2V0KXt2YXIgaT10KG4udGFyZ2V0KS5hdHRyKCJpZCIpO2l8fChpPVAuZ2V0VUlEKGUpLHQobi50YXJnZXQpLmF0dHIoImlkIixpKSksbi50YXJnZXQ9IiMiK2l9cmV0dXJuIFAudHlwZUNoZWNrQ29uZmlnKGUsbixsKSxufSxnLl9nZXRTY3JvbGxUb3A9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fc2Nyb2xsRWxlbWVudD09PXdpbmRvdz90aGlzLl9zY3JvbGxFbGVtZW50LnBhZ2VZT2Zmc2V0OnRoaXMuX3Njcm9sbEVsZW1lbnQuc2Nyb2xsVG9wfSxnLl9nZXRTY3JvbGxIZWlnaHQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fc2Nyb2xsRWxlbWVudC5zY3JvbGxIZWlnaHR8fE1hdGgubWF4KGRvY3VtZW50LmJvZHkuc2Nyb2xsSGVpZ2h0LGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5zY3JvbGxIZWlnaHQpfSxnLl9nZXRPZmZzZXRIZWlnaHQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fc2Nyb2xsRWxlbWVudD09PXdpbmRvdz93aW5kb3cuaW5uZXJIZWlnaHQ6dGhpcy5fc2Nyb2xsRWxlbWVudC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS5oZWlnaHR9LGcuX3Byb2Nlc3M9ZnVuY3Rpb24oKXt2YXIgdD10aGlzLl9nZXRTY3JvbGxUb3AoKSt0aGlzLl9jb25maWcub2Zmc2V0LGU9dGhpcy5fZ2V0U2Nyb2xsSGVpZ2h0KCksbj10aGlzLl9jb25maWcub2Zmc2V0K2UtdGhpcy5fZ2V0T2Zmc2V0SGVpZ2h0KCk7aWYodGhpcy5fc2Nyb2xsSGVpZ2h0IT09ZSYmdGhpcy5yZWZyZXNoKCksdD49bil7dmFyIGk9dGhpcy5fdGFyZ2V0c1t0aGlzLl90YXJnZXRzLmxlbmd0aC0xXTt0aGlzLl9hY3RpdmVUYXJnZXQhPT1pJiZ0aGlzLl9hY3RpdmF0ZShpKX1lbHNle2lmKHRoaXMuX2FjdGl2ZVRhcmdldCYmdDx0aGlzLl9vZmZzZXRzWzBdJiZ0aGlzLl9vZmZzZXRzWzBdPjApcmV0dXJuIHRoaXMuX2FjdGl2ZVRhcmdldD1udWxsLHZvaWQgdGhpcy5fY2xlYXIoKTtmb3IodmFyIHM9dGhpcy5fb2Zmc2V0cy5sZW5ndGg7cy0tOyl7dGhpcy5fYWN0aXZlVGFyZ2V0IT09dGhpcy5fdGFyZ2V0c1tzXSYmdD49dGhpcy5fb2Zmc2V0c1tzXSYmKCJ1bmRlZmluZWQiPT10eXBlb2YgdGhpcy5fb2Zmc2V0c1tzKzFdfHx0PHRoaXMuX29mZnNldHNbcysxXSkmJnRoaXMuX2FjdGl2YXRlKHRoaXMuX3RhcmdldHNbc10pfX19LGcuX2FjdGl2YXRlPWZ1bmN0aW9uKGUpe3RoaXMuX2FjdGl2ZVRhcmdldD1lLHRoaXMuX2NsZWFyKCk7dmFyIG49dGhpcy5fc2VsZWN0b3Iuc3BsaXQoIiwiKTtuPW4ubWFwKGZ1bmN0aW9uKHQpe3JldHVybiB0KydbZGF0YS10YXJnZXQ9IicrZSsnIl0sJyt0KydbaHJlZj0iJytlKyciXSd9KTt2YXIgaT10KG4uam9pbigiLCIpKTtpLmhhc0NsYXNzKGMpPyhpLmNsb3Nlc3QoZi5EUk9QRE9XTikuZmluZChmLkRST1BET1dOX1RPR0dMRSkuYWRkQ2xhc3ModSksaS5hZGRDbGFzcyh1KSk6KGkuYWRkQ2xhc3ModSksaS5wYXJlbnRzKGYuTkFWX0xJU1RfR1JPVVApLnByZXYoZi5OQVZfTElOS1MrIiwgIitmLkxJU1RfSVRFTVMpLmFkZENsYXNzKHUpLGkucGFyZW50cyhmLk5BVl9MSVNUX0dST1VQKS5wcmV2KGYuTkFWX0lURU1TKS5jaGlsZHJlbihmLk5BVl9MSU5LUykuYWRkQ2xhc3ModSkpLHQodGhpcy5fc2Nyb2xsRWxlbWVudCkudHJpZ2dlcihoLkFDVElWQVRFLHtyZWxhdGVkVGFyZ2V0OmV9KX0sZy5fY2xlYXI9ZnVuY3Rpb24oKXt0KHRoaXMuX3NlbGVjdG9yKS5maWx0ZXIoZi5BQ1RJVkUpLnJlbW92ZUNsYXNzKHUpfSxvLl9qUXVlcnlJbnRlcmZhY2U9ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMuZWFjaChmdW5jdGlvbigpe3ZhciBpPXQodGhpcykuZGF0YShuKTtpZihpfHwoaT1uZXcgbyh0aGlzLCJvYmplY3QiPT10eXBlb2YgZSYmZSksdCh0aGlzKS5kYXRhKG4saSkpLCJzdHJpbmciPT10eXBlb2YgZSl7aWYoInVuZGVmaW5lZCI9PXR5cGVvZiBpW2VdKXRocm93IG5ldyBUeXBlRXJyb3IoJ05vIG1ldGhvZCBuYW1lZCAiJytlKyciJyk7aVtlXSgpfX0pfSxzKG8sbnVsbCxbe2tleToiVkVSU0lPTiIsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIjQuMC4wIn19LHtrZXk6IkRlZmF1bHQiLGdldDpmdW5jdGlvbigpe3JldHVybiBhfX1dKSxvfSgpO3JldHVybiB0KHdpbmRvdykub24oaC5MT0FEX0RBVEFfQVBJLGZ1bmN0aW9uKCl7Zm9yKHZhciBlPXQubWFrZUFycmF5KHQoZi5EQVRBX1NQWSkpLG49ZS5sZW5ndGg7bi0tOyl7dmFyIGk9dChlW25dKTtnLl9qUXVlcnlJbnRlcmZhY2UuY2FsbChpLGkuZGF0YSgpKX19KSx0LmZuW2VdPWcuX2pRdWVyeUludGVyZmFjZSx0LmZuW2VdLkNvbnN0cnVjdG9yPWcsdC5mbltlXS5ub0NvbmZsaWN0PWZ1bmN0aW9uKCl7cmV0dXJuIHQuZm5bZV09byxnLl9qUXVlcnlJbnRlcmZhY2V9LGd9KGUpLFY9ZnVuY3Rpb24odCl7dmFyIGU9ImJzLnRhYiIsbj0iLiIrZSxpPXQuZm4udGFiLHI9e0hJREU6ImhpZGUiK24sSElEREVOOiJoaWRkZW4iK24sU0hPVzoic2hvdyIrbixTSE9XTjoic2hvd24iK24sQ0xJQ0tfREFUQV9BUEk6ImNsaWNrLmJzLnRhYi5kYXRhLWFwaSJ9LG89ImRyb3Bkb3duLW1lbnUiLGE9ImFjdGl2ZSIsbD0iZGlzYWJsZWQiLGg9ImZhZGUiLGM9InNob3ciLHU9Ii5kcm9wZG93biIsZj0iLm5hdiwgLmxpc3QtZ3JvdXAiLGQ9Ii5hY3RpdmUiLF89Ij4gbGkgPiAuYWN0aXZlIixnPSdbZGF0YS10b2dnbGU9InRhYiJdLCBbZGF0YS10b2dnbGU9InBpbGwiXSwgW2RhdGEtdG9nZ2xlPSJsaXN0Il0nLHA9Ii5kcm9wZG93bi10b2dnbGUiLG09Ij4gLmRyb3Bkb3duLW1lbnUgLmFjdGl2ZSIsdj1mdW5jdGlvbigpe2Z1bmN0aW9uIG4odCl7dGhpcy5fZWxlbWVudD10fXZhciBpPW4ucHJvdG90eXBlO3JldHVybiBpLnNob3c9ZnVuY3Rpb24oKXt2YXIgZT10aGlzO2lmKCEodGhpcy5fZWxlbWVudC5wYXJlbnROb2RlJiZ0aGlzLl9lbGVtZW50LnBhcmVudE5vZGUubm9kZVR5cGU9PT1Ob2RlLkVMRU1FTlRfTk9ERSYmdCh0aGlzLl9lbGVtZW50KS5oYXNDbGFzcyhhKXx8dCh0aGlzLl9lbGVtZW50KS5oYXNDbGFzcyhsKSkpe3ZhciBuLGkscz10KHRoaXMuX2VsZW1lbnQpLmNsb3Nlc3QoZilbMF0sbz1QLmdldFNlbGVjdG9yRnJvbUVsZW1lbnQodGhpcy5fZWxlbWVudCk7aWYocyl7dmFyIGg9IlVMIj09PXMubm9kZU5hbWU/XzpkO2k9KGk9dC5tYWtlQXJyYXkodChzKS5maW5kKGgpKSlbaS5sZW5ndGgtMV19dmFyIGM9dC5FdmVudChyLkhJREUse3JlbGF0ZWRUYXJnZXQ6dGhpcy5fZWxlbWVudH0pLHU9dC5FdmVudChyLlNIT1cse3JlbGF0ZWRUYXJnZXQ6aX0pO2lmKGkmJnQoaSkudHJpZ2dlcihjKSx0KHRoaXMuX2VsZW1lbnQpLnRyaWdnZXIodSksIXUuaXNEZWZhdWx0UHJldmVudGVkKCkmJiFjLmlzRGVmYXVsdFByZXZlbnRlZCgpKXtvJiYobj10KG8pWzBdKSx0aGlzLl9hY3RpdmF0ZSh0aGlzLl9lbGVtZW50LHMpO3ZhciBnPWZ1bmN0aW9uKCl7dmFyIG49dC5FdmVudChyLkhJRERFTix7cmVsYXRlZFRhcmdldDplLl9lbGVtZW50fSkscz10LkV2ZW50KHIuU0hPV04se3JlbGF0ZWRUYXJnZXQ6aX0pO3QoaSkudHJpZ2dlcihuKSx0KGUuX2VsZW1lbnQpLnRyaWdnZXIocyl9O24/dGhpcy5fYWN0aXZhdGUobixuLnBhcmVudE5vZGUsZyk6ZygpfX19LGkuZGlzcG9zZT1mdW5jdGlvbigpe3QucmVtb3ZlRGF0YSh0aGlzLl9lbGVtZW50LGUpLHRoaXMuX2VsZW1lbnQ9bnVsbH0saS5fYWN0aXZhdGU9ZnVuY3Rpb24oZSxuLGkpe3ZhciBzPXRoaXMscj0oIlVMIj09PW4ubm9kZU5hbWU/dChuKS5maW5kKF8pOnQobikuY2hpbGRyZW4oZCkpWzBdLG89aSYmUC5zdXBwb3J0c1RyYW5zaXRpb25FbmQoKSYmciYmdChyKS5oYXNDbGFzcyhoKSxhPWZ1bmN0aW9uKCl7cmV0dXJuIHMuX3RyYW5zaXRpb25Db21wbGV0ZShlLHIsaSl9O3ImJm8/dChyKS5vbmUoUC5UUkFOU0lUSU9OX0VORCxhKS5lbXVsYXRlVHJhbnNpdGlvbkVuZCgxNTApOmEoKX0saS5fdHJhbnNpdGlvbkNvbXBsZXRlPWZ1bmN0aW9uKGUsbixpKXtpZihuKXt0KG4pLnJlbW92ZUNsYXNzKGMrIiAiK2EpO3ZhciBzPXQobi5wYXJlbnROb2RlKS5maW5kKG0pWzBdO3MmJnQocykucmVtb3ZlQ2xhc3MoYSksInRhYiI9PT1uLmdldEF0dHJpYnV0ZSgicm9sZSIpJiZuLnNldEF0dHJpYnV0ZSgiYXJpYS1zZWxlY3RlZCIsITEpfWlmKHQoZSkuYWRkQ2xhc3MoYSksInRhYiI9PT1lLmdldEF0dHJpYnV0ZSgicm9sZSIpJiZlLnNldEF0dHJpYnV0ZSgiYXJpYS1zZWxlY3RlZCIsITApLFAucmVmbG93KGUpLHQoZSkuYWRkQ2xhc3MoYyksZS5wYXJlbnROb2RlJiZ0KGUucGFyZW50Tm9kZSkuaGFzQ2xhc3Mobykpe3ZhciByPXQoZSkuY2xvc2VzdCh1KVswXTtyJiZ0KHIpLmZpbmQocCkuYWRkQ2xhc3MoYSksZS5zZXRBdHRyaWJ1dGUoImFyaWEtZXhwYW5kZWQiLCEwKX1pJiZpKCl9LG4uX2pRdWVyeUludGVyZmFjZT1mdW5jdGlvbihpKXtyZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uKCl7dmFyIHM9dCh0aGlzKSxyPXMuZGF0YShlKTtpZihyfHwocj1uZXcgbih0aGlzKSxzLmRhdGEoZSxyKSksInN0cmluZyI9PXR5cGVvZiBpKXtpZigidW5kZWZpbmVkIj09dHlwZW9mIHJbaV0pdGhyb3cgbmV3IFR5cGVFcnJvcignTm8gbWV0aG9kIG5hbWVkICInK2krJyInKTtyW2ldKCl9fSl9LHMobixudWxsLFt7a2V5OiJWRVJTSU9OIixnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4iNC4wLjAifX1dKSxufSgpO3JldHVybiB0KGRvY3VtZW50KS5vbihyLkNMSUNLX0RBVEFfQVBJLGcsZnVuY3Rpb24oZSl7ZS5wcmV2ZW50RGVmYXVsdCgpLHYuX2pRdWVyeUludGVyZmFjZS5jYWxsKHQodGhpcyksInNob3ciKX0pLHQuZm4udGFiPXYuX2pRdWVyeUludGVyZmFjZSx0LmZuLnRhYi5Db25zdHJ1Y3Rvcj12LHQuZm4udGFiLm5vQ29uZmxpY3Q9ZnVuY3Rpb24oKXtyZXR1cm4gdC5mbi50YWI9aSx2Ll9qUXVlcnlJbnRlcmZhY2V9LHZ9KGUpOyFmdW5jdGlvbih0KXtpZigidW5kZWZpbmVkIj09dHlwZW9mIHQpdGhyb3cgbmV3IFR5cGVFcnJvcigiQm9vdHN0cmFwJ3MgSmF2YVNjcmlwdCByZXF1aXJlcyBqUXVlcnkuIGpRdWVyeSBtdXN0IGJlIGluY2x1ZGVkIGJlZm9yZSBCb290c3RyYXAncyBKYXZhU2NyaXB0LiIpO3ZhciBlPXQuZm4uanF1ZXJ5LnNwbGl0KCIgIilbMF0uc3BsaXQoIi4iKTtpZihlWzBdPDImJmVbMV08OXx8MT09PWVbMF0mJjk9PT1lWzFdJiZlWzJdPDF8fGVbMF0+PTQpdGhyb3cgbmV3IEVycm9yKCJCb290c3RyYXAncyBKYXZhU2NyaXB0IHJlcXVpcmVzIGF0IGxlYXN0IGpRdWVyeSB2MS45LjEgYnV0IGxlc3MgdGhhbiB2NC4wLjAiKX0oZSksdC5VdGlsPVAsdC5BbGVydD1MLHQuQnV0dG9uPVIsdC5DYXJvdXNlbD1qLHQuQ29sbGFwc2U9SCx0LkRyb3Bkb3duPVcsdC5Nb2RhbD1NLHQuUG9wb3Zlcj14LHQuU2Nyb2xsc3B5PUssdC5UYWI9Vix0LlRvb2x0aXA9VSxPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSl9KTsKLy8jIHNvdXJjZU1hcHBpbmdVUkw9Ym9vdHN0cmFwLm1pbi5qcy5tYXA="></script>
</head>
<body style="background-color:white;">
<p>doesn't work exactly right (but easily fixed) since radio buttons don't unselect but illustrates the concept of coordinated filters with multiple filtering mechanisms.</p>
<div id="cyl" class="btn-group btn-group-toggle" data-toggle="buttons">
<label class="btn btn-outline-primary"> <input type="radio" name="options" autocomplete="off">4 </label> <label class="btn btn-outline-primary"> <input type="radio" name="options" autocomplete="off">6 </label> <label class="btn btn-outline-primary"> <input type="radio" name="options" autocomplete="off">8 </label>
</div>
<div id="htmlwidget-649f8a8d92f5c254b993" class="parcoords html-widget" style="width:960px;height:350px;">
</div>
<script type="application/json" data-for="htmlwidget-649f8a8d92f5c254b993">{"x":{"data":{"names":["Mazda RX4","Mazda RX4 Wag","Datsun 710","Hornet 4 Drive","Hornet Sportabout","Valiant","Duster 360","Merc 240D","Merc 230","Merc 280","Merc 280C","Merc 450SE","Merc 450SL","Merc 450SLC","Cadillac Fleetwood","Lincoln Continental","Chrysler Imperial","Fiat 128","Honda Civic","Toyota Corolla","Toyota Corona","Dodge Challenger","AMC Javelin","Camaro Z28","Pontiac Firebird","Fiat X1-9","Porsche 914-2","Lotus Europa","Ford Pantera L","Ferrari Dino","Maserati Bora","Volvo 142E"],"mpg":[21,21,22.8,21.4,18.7,18.1,14.3,24.4,22.8,19.2,17.8,16.4,17.3,15.2,10.4,10.4,14.7,32.4,30.4,33.9,21.5,15.5,15.2,13.3,19.2,27.3,26,30.4,15.8,19.7,15,21.4],"cyl":[6,6,4,6,8,6,8,4,4,6,6,8,8,8,8,8,8,4,4,4,4,8,8,8,8,4,4,4,8,6,8,4],"disp":[160,160,108,258,360,225,360,146.7,140.8,167.6,167.6,275.8,275.8,275.8,472,460,440,78.7,75.7,71.1,120.1,318,304,350,400,79,120.3,95.1,351,145,301,121],"hp":[110,110,93,110,175,105,245,62,95,123,123,180,180,180,205,215,230,66,52,65,97,150,150,245,175,66,91,113,264,175,335,109],"drat":[3.9,3.9,3.85,3.08,3.15,2.76,3.21,3.69,3.92,3.92,3.92,3.07,3.07,3.07,2.93,3,3.23,4.08,4.93,4.22,3.7,2.76,3.15,3.73,3.08,4.08,4.43,3.77,4.22,3.62,3.54,4.11],"wt":[2.62,2.875,2.32,3.215,3.44,3.46,3.57,3.19,3.15,3.44,3.44,4.07,3.73,3.78,5.25,5.424,5.345,2.2,1.615,1.835,2.465,3.52,3.435,3.84,3.845,1.935,2.14,1.513,3.17,2.77,3.57,2.78],"qsec":[16.46,17.02,18.61,19.44,17.02,20.22,15.84,20,22.9,18.3,18.9,17.4,17.6,18,17.98,17.82,17.42,19.47,18.52,19.9,20.01,16.87,17.3,15.41,17.05,18.9,16.7,16.9,14.5,15.5,14.6,18.6],"vs":[0,0,1,1,0,1,0,1,1,1,1,0,0,0,0,0,0,1,1,1,1,0,0,0,0,1,0,1,0,0,0,1],"am":[1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,0,0,0,0,0,1,1,1,1,1,1,1],"gear":[4,4,4,3,3,3,3,4,4,4,4,3,3,3,3,3,3,4,4,4,3,3,3,3,3,4,5,5,5,5,5,4],"carb":[4,4,1,1,2,1,4,2,2,4,4,3,3,3,4,4,4,1,2,1,1,2,2,4,2,1,2,2,4,6,8,2]},"options":{"rownames":true,"brushMode":"1D-axes","brushPredicate":"AND","reorderable":false,"margin":{"top":50,"bottom":50,"left":100,"right":50},"mode":false,"height":350},"autoresize":false,"tasks":null},"evals":[],"jsHooks":{"render":[{"code":"\nfunction(el, x) {\n var pc = this.instance.parcoords\n\n // hard code for now cyl will be 3rd dimension\n var dim_cyl = d3.select('.dimension:nth-of-type(3)')\n\n var sc_cyl = pc.dimensions().cyl.yscale\n\n var sc_y = d3.scale.ordinal()\n .domain([4,6,8])\n .rangeRoundBands(sc_cyl.range())\n\n var ax_y = d3.svg.axis()\n .scale(sc_y)\n .orient('left')\n\n dim_cyl.selectAll('.tick').remove()\n\n var g_ax = dim_cyl.append('g')\n .call(ax_y)\n\n var color = d3.scale.category10()\n\n g_ax.select('path').style('display', 'none')\n\n g_ax\n .selectAll('.tick')\n .append('rect')\n .attr('height', sc_y.rangeBand())\n .attr('y', -sc_y.rangeBand()/2)\n .attr('width', 10)\n .attr('x', -5)\n .attr('fill', function(d){return color(d)})\n\n g_ax.selectAll('.tick')\n .style('opacity', 1)\n .on('click', toggle)\n\n function toggle() {\ndebugger\n var sel_el = d3.select(this)\n var selected = !sel_el.classed('selected')\n if(selected) {\n $('label.btn').each(function() {\n if( +$(this).text() == sel_el.datum() ) {\n $(this).button('toggle')\n }\n })\n } else {\n g_ax.selectAll('.tick')\n .classed('selected', false)\n .style('opacity', 1)\n }\n\n filter_pc(dim_cyl, 'cyl')\n }\n\n function filter_pc(el, dim) {\n var selected = []\n dim_cyl.selectAll('.selected').each(function(d) {\n selected.push(d)\n })\n var filters = pc.outsideFilters() || {}\n\n filters[dim] = selected\n if(selected.length == 0) {\n delete filters[dim]\n }\n\n pc.outsideFilters(filters)\n pc.brushUpdated(pc.selected())\n }\n}\n","data":null}]}}</script>
<script>
$('#cyl input').change(function() {
debugger
var pc = HTMLWidgets.find('.parcoords').instance.parcoords
var selected = []
if($(this).prop('checked')) {
selected.push(+$(this).parent().text())
}
// toggle axis tick to reflect button
var dim_cyl = d3.select('.dimension:nth-of-type(3)')
dim_cyl.selectAll('.tick')
.classed(selected, false)
.style('opacity', 0.4)
dim_cyl.selectAll('.tick')
.filter(function(d) { return selected.indexOf(d) > -1 })
.classed('selected', true)
.style('opacity', 1)
var filters = pc.outsideFilters() || {}
if(selected.length > 0) {
filters.cyl = selected
pc.outsideFilters(filters)
} else {
delete filters.cyl
pc.outsideFilters(filters)
}
// now update
pc.brushUpdated(pc.selected())
})
</script>
</body>
</html>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment