Last active
September 5, 2017 00:42
-
-
Save erichhuang/d6748cdcd71bad945e88e91c445a84e8 to your computer and use it in GitHub Desktop.
This file has been truncated, but you can view the full file.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| <!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,LyohIGpRdWVyeSB2MS4xMi40IHwgKGMpIGpRdWVyeSBGb3VuZGF0aW9uIHwganF1ZXJ5Lm9yZy9saWNlbnNlICovCiFmdW5jdGlvbihhLGIpeyJvYmplY3QiPT10eXBlb2YgbW9kdWxlJiYib2JqZWN0Ij09dHlwZW9mIG1vZHVsZS5leHBvcnRzP21vZHVsZS5leHBvcnRzPWEuZG9jdW1lbnQ/YihhLCEwKTpmdW5jdGlvbihhKXtpZighYS5kb2N1bWVudCl0aHJvdyBuZXcgRXJyb3IoImpRdWVyeSByZXF1aXJlcyBhIHdpbmRvdyB3aXRoIGEgZG9jdW1lbnQiKTtyZXR1cm4gYihhKX06YihhKX0oInVuZGVmaW5lZCIhPXR5cGVvZiB3aW5kb3c/d2luZG93OnRoaXMsZnVuY3Rpb24oYSxiKXt2YXIgYz1bXSxkPWEuZG9jdW1lbnQsZT1jLnNsaWNlLGY9Yy5jb25jYXQsZz1jLnB1c2gsaD1jLmluZGV4T2YsaT17fSxqPWkudG9TdHJpbmcsaz1pLmhhc093blByb3BlcnR5LGw9e30sbT0iMS4xMi40IixuPWZ1bmN0aW9uKGEsYil7cmV0dXJuIG5ldyBuLmZuLmluaXQoYSxiKX0sbz0vXltcc1x1RkVGRlx4QTBdK3xbXHNcdUZFRkZceEEwXSskL2cscD0vXi1tcy0vLHE9Ly0oW1xkYS16XSkvZ2kscj1mdW5jdGlvbihhLGIpe3JldHVybiBiLnRvVXBwZXJDYXNlKCl9O24uZm49bi5wcm90b3R5cGU9e2pxdWVyeTptLGNvbnN0cnVjdG9yOm4sc2VsZWN0b3I6IiIsbGVuZ3RoOjAsdG9BcnJheTpmdW5jdGlvbigpe3JldHVybiBlLmNhbGwodGhpcyl9LGdldDpmdW5jdGlvbihhKXtyZXR1cm4gbnVsbCE9YT8wPmE/dGhpc1thK3RoaXMubGVuZ3RoXTp0aGlzW2FdOmUuY2FsbCh0aGlzKX0scHVzaFN0YWNrOmZ1bmN0aW9uKGEpe3ZhciBiPW4ubWVyZ2UodGhpcy5jb25zdHJ1Y3RvcigpLGEpO3JldHVybiBiLnByZXZPYmplY3Q9dGhpcyxiLmNvbnRleHQ9dGhpcy5jb250ZXh0LGJ9LGVhY2g6ZnVuY3Rpb24oYSl7cmV0dXJuIG4uZWFjaCh0aGlzLGEpfSxtYXA6ZnVuY3Rpb24oYSl7cmV0dXJuIHRoaXMucHVzaFN0YWNrKG4ubWFwKHRoaXMsZnVuY3Rpb24oYixjKXtyZXR1cm4gYS5jYWxsKGIsYyxiKX0pKX0sc2xpY2U6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5wdXNoU3RhY2soZS5hcHBseSh0aGlzLGFyZ3VtZW50cykpfSxmaXJzdDpmdW5jdGlvbigpe3JldHVybiB0aGlzLmVxKDApfSxsYXN0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZXEoLTEpfSxlcTpmdW5jdGlvbihhKXt2YXIgYj10aGlzLmxlbmd0aCxjPSthKygwPmE/YjowKTtyZXR1cm4gdGhpcy5wdXNoU3RhY2soYz49MCYmYj5jP1t0aGlzW2NdXTpbXSl9LGVuZDpmdW5jdGlvbigpe3JldHVybiB0aGlzLnByZXZPYmplY3R8fHRoaXMuY29uc3RydWN0b3IoKX0scHVzaDpnLHNvcnQ6Yy5zb3J0LHNwbGljZTpjLnNwbGljZX0sbi5leHRlbmQ9bi5mbi5leHRlbmQ9ZnVuY3Rpb24oKXt2YXIgYSxiLGMsZCxlLGYsZz1hcmd1bWVudHNbMF18fHt9LGg9MSxpPWFyZ3VtZW50cy5sZW5ndGgsaj0hMTtmb3IoImJvb2xlYW4iPT10eXBlb2YgZyYmKGo9ZyxnPWFyZ3VtZW50c1toXXx8e30saCsrKSwib2JqZWN0Ij09dHlwZW9mIGd8fG4uaXNGdW5jdGlvbihnKXx8KGc9e30pLGg9PT1pJiYoZz10aGlzLGgtLSk7aT5oO2grKylpZihudWxsIT0oZT1hcmd1bWVudHNbaF0pKWZvcihkIGluIGUpYT1nW2RdLGM9ZVtkXSxnIT09YyYmKGomJmMmJihuLmlzUGxhaW5PYmplY3QoYyl8fChiPW4uaXNBcnJheShjKSkpPyhiPyhiPSExLGY9YSYmbi5pc0FycmF5KGEpP2E6W10pOmY9YSYmbi5pc1BsYWluT2JqZWN0KGEpP2E6e30sZ1tkXT1uLmV4dGVuZChqLGYsYykpOnZvaWQgMCE9PWMmJihnW2RdPWMpKTtyZXR1cm4gZ30sbi5leHRlbmQoe2V4cGFuZG86ImpRdWVyeSIrKG0rTWF0aC5yYW5kb20oKSkucmVwbGFjZSgvXEQvZywiIiksaXNSZWFkeTohMCxlcnJvcjpmdW5jdGlvbihhKXt0aHJvdyBuZXcgRXJyb3IoYSl9LG5vb3A6ZnVuY3Rpb24oKXt9LGlzRnVuY3Rpb246ZnVuY3Rpb24oYSl7cmV0dXJuImZ1bmN0aW9uIj09PW4udHlwZShhKX0saXNBcnJheTpBcnJheS5pc0FycmF5fHxmdW5jdGlvbihhKXtyZXR1cm4iYXJyYXkiPT09bi50eXBlKGEpfSxpc1dpbmRvdzpmdW5jdGlvbihhKXtyZXR1cm4gbnVsbCE9YSYmYT09YS53aW5kb3d9LGlzTnVtZXJpYzpmdW5jdGlvbihhKXt2YXIgYj1hJiZhLnRvU3RyaW5nKCk7cmV0dXJuIW4uaXNBcnJheShhKSYmYi1wYXJzZUZsb2F0KGIpKzE+PTB9LGlzRW1wdHlPYmplY3Q6ZnVuY3Rpb24oYSl7dmFyIGI7Zm9yKGIgaW4gYSlyZXR1cm4hMTtyZXR1cm4hMH0saXNQbGFpbk9iamVjdDpmdW5jdGlvbihhKXt2YXIgYjtpZighYXx8Im9iamVjdCIhPT1uLnR5cGUoYSl8fGEubm9kZVR5cGV8fG4uaXNXaW5kb3coYSkpcmV0dXJuITE7dHJ5e2lmKGEuY29uc3RydWN0b3ImJiFrLmNhbGwoYSwiY29uc3RydWN0b3IiKSYmIWsuY2FsbChhLmNvbnN0cnVjdG9yLnByb3RvdHlwZSwiaXNQcm90b3R5cGVPZiIpKXJldHVybiExfWNhdGNoKGMpe3JldHVybiExfWlmKCFsLm93bkZpcnN0KWZvcihiIGluIGEpcmV0dXJuIGsuY2FsbChhLGIpO2ZvcihiIGluIGEpO3JldHVybiB2b2lkIDA9PT1ifHxrLmNhbGwoYSxiKX0sdHlwZTpmdW5jdGlvbihhKXtyZXR1cm4gbnVsbD09YT9hKyIiOiJvYmplY3QiPT10eXBlb2YgYXx8ImZ1bmN0aW9uIj09dHlwZW9mIGE/aVtqLmNhbGwoYSldfHwib2JqZWN0Ijp0eXBlb2YgYX0sZ2xvYmFsRXZhbDpmdW5jdGlvbihiKXtiJiZuLnRyaW0oYikmJihhLmV4ZWNTY3JpcHR8fGZ1bmN0aW9uKGIpe2EuZXZhbC5jYWxsKGEsYil9KShiKX0sY2FtZWxDYXNlOmZ1bmN0aW9uKGEpe3JldHVybiBhLnJlcGxhY2UocCwibXMtIikucmVwbGFjZShxLHIpfSxub2RlTmFtZTpmdW5jdGlvbihhLGIpe3JldHVybiBhLm5vZGVOYW1lJiZhLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCk9PT1iLnRvTG93ZXJDYXNlKCl9LGVhY2g6ZnVuY3Rpb24oYSxiKXt2YXIgYyxkPTA7aWYocyhhKSl7Zm9yKGM9YS5sZW5ndGg7Yz5kO2QrKylpZihiLmNhbGwoYVtkXSxkLGFbZF0pPT09ITEpYnJlYWt9ZWxzZSBmb3IoZCBpbiBhKWlmKGIuY2FsbChhW2RdLGQsYVtkXSk9PT0hMSlicmVhaztyZXR1cm4gYX0sdHJpbTpmdW5jdGlvbihhKXtyZXR1cm4gbnVsbD09YT8iIjooYSsiIikucmVwbGFjZShvLCIiKX0sbWFrZUFycmF5OmZ1bmN0aW9uKGEsYil7dmFyIGM9Ynx8W107cmV0dXJuIG51bGwhPWEmJihzKE9iamVjdChhKSk/bi5tZXJnZShjLCJzdHJpbmciPT10eXBlb2YgYT9bYV06YSk6Zy5jYWxsKGMsYSkpLGN9LGluQXJyYXk6ZnVuY3Rpb24oYSxiLGMpe3ZhciBkO2lmKGIpe2lmKGgpcmV0dXJuIGguY2FsbChiLGEsYyk7Zm9yKGQ9Yi5sZW5ndGgsYz1jPzA+Yz9NYXRoLm1heCgwLGQrYyk6YzowO2Q+YztjKyspaWYoYyBpbiBiJiZiW2NdPT09YSlyZXR1cm4gY31yZXR1cm4tMX0sbWVyZ2U6ZnVuY3Rpb24oYSxiKXt2YXIgYz0rYi5sZW5ndGgsZD0wLGU9YS5sZW5ndGg7d2hpbGUoYz5kKWFbZSsrXT1iW2QrK107aWYoYyE9PWMpd2hpbGUodm9pZCAwIT09YltkXSlhW2UrK109YltkKytdO3JldHVybiBhLmxlbmd0aD1lLGF9LGdyZXA6ZnVuY3Rpb24oYSxiLGMpe2Zvcih2YXIgZCxlPVtdLGY9MCxnPWEubGVuZ3RoLGg9IWM7Zz5mO2YrKylkPSFiKGFbZl0sZiksZCE9PWgmJmUucHVzaChhW2ZdKTtyZXR1cm4gZX0sbWFwOmZ1bmN0aW9uKGEsYixjKXt2YXIgZCxlLGc9MCxoPVtdO2lmKHMoYSkpZm9yKGQ9YS5sZW5ndGg7ZD5nO2crKyllPWIoYVtnXSxnLGMpLG51bGwhPWUmJmgucHVzaChlKTtlbHNlIGZvcihnIGluIGEpZT1iKGFbZ10sZyxjKSxudWxsIT1lJiZoLnB1c2goZSk7cmV0dXJuIGYuYXBwbHkoW10saCl9LGd1aWQ6MSxwcm94eTpmdW5jdGlvbihhLGIpe3ZhciBjLGQsZjtyZXR1cm4ic3RyaW5nIj09dHlwZW9mIGImJihmPWFbYl0sYj1hLGE9Ziksbi5pc0Z1bmN0aW9uKGEpPyhjPWUuY2FsbChhcmd1bWVudHMsMiksZD1mdW5jdGlvbigpe3JldHVybiBhLmFwcGx5KGJ8fHRoaXMsYy5jb25jYXQoZS5jYWxsKGFyZ3VtZW50cykpKX0sZC5ndWlkPWEuZ3VpZD1hLmd1aWR8fG4uZ3VpZCsrLGQpOnZvaWQgMH0sbm93OmZ1bmN0aW9uKCl7cmV0dXJuK25ldyBEYXRlfSxzdXBwb3J0Omx9KSwiZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9sJiYobi5mbltTeW1ib2wuaXRlcmF0b3JdPWNbU3ltYm9sLml0ZXJhdG9yXSksbi5lYWNoKCJCb29sZWFuIE51bWJlciBTdHJpbmcgRnVuY3Rpb24gQXJyYXkgRGF0ZSBSZWdFeHAgT2JqZWN0IEVycm9yIFN5bWJvbCIuc3BsaXQoIiAiKSxmdW5jdGlvbihhLGIpe2lbIltvYmplY3QgIitiKyJdIl09Yi50b0xvd2VyQ2FzZSgpfSk7ZnVuY3Rpb24gcyhhKXt2YXIgYj0hIWEmJiJsZW5ndGgiaW4gYSYmYS5sZW5ndGgsYz1uLnR5cGUoYSk7cmV0dXJuImZ1bmN0aW9uIj09PWN8fG4uaXNXaW5kb3coYSk/ITE6ImFycmF5Ij09PWN8fDA9PT1ifHwibnVtYmVyIj09dHlwZW9mIGImJmI+MCYmYi0xIGluIGF9dmFyIHQ9ZnVuY3Rpb24oYSl7dmFyIGIsYyxkLGUsZixnLGgsaSxqLGssbCxtLG4sbyxwLHEscixzLHQsdT0ic2l6emxlIisxKm5ldyBEYXRlLHY9YS5kb2N1bWVudCx3PTAseD0wLHk9Z2EoKSx6PWdhKCksQT1nYSgpLEI9ZnVuY3Rpb24oYSxiKXtyZXR1cm4gYT09PWImJihsPSEwKSwwfSxDPTE8PDMxLEQ9e30uaGFzT3duUHJvcGVydHksRT1bXSxGPUUucG9wLEc9RS5wdXNoLEg9RS5wdXNoLEk9RS5zbGljZSxKPWZ1bmN0aW9uKGEsYil7Zm9yKHZhciBjPTAsZD1hLmxlbmd0aDtkPmM7YysrKWlmKGFbY109PT1iKXJldHVybiBjO3JldHVybi0xfSxLPSJjaGVja2VkfHNlbGVjdGVkfGFzeW5jfGF1dG9mb2N1c3xhdXRvcGxheXxjb250cm9sc3xkZWZlcnxkaXNhYmxlZHxoaWRkZW58aXNtYXB8bG9vcHxtdWx0aXBsZXxvcGVufHJlYWRvbmx5fHJlcXVpcmVkfHNjb3BlZCIsTD0iW1xceDIwXFx0XFxyXFxuXFxmXSIsTT0iKD86XFxcXC58W1xcdy1dfFteXFx4MDAtXFx4YTBdKSsiLE49IlxcWyIrTCsiKigiK00rIikoPzoiK0wrIiooWypeJHwhfl0/PSkiK0wrIiooPzonKCg/OlxcXFwufFteXFxcXCddKSopJ3xcIigoPzpcXFxcLnxbXlxcXFxcIl0pKilcInwoIitNKyIpKXwpIitMKyIqXFxdIixPPSI6KCIrTSsiKSg/OlxcKCgoJygoPzpcXFxcLnxbXlxcXFwnXSkqKSd8XCIoKD86XFxcXC58W15cXFxcXCJdKSopXCIpfCgoPzpcXFxcLnxbXlxcXFwoKVtcXF1dfCIrTisiKSopfC4qKVxcKXwpIixQPW5ldyBSZWdFeHAoTCsiKyIsImciKSxRPW5ldyBSZWdFeHAoIl4iK0wrIit8KCg/Ol58W15cXFxcXSkoPzpcXFxcLikqKSIrTCsiKyQiLCJnIiksUj1uZXcgUmVnRXhwKCJeIitMKyIqLCIrTCsiKiIpLFM9bmV3IFJlZ0V4cCgiXiIrTCsiKihbPit+XXwiK0wrIikiK0wrIioiKSxUPW5ldyBSZWdFeHAoIj0iK0wrIiooW15cXF0nXCJdKj8pIitMKyIqXFxdIiwiZyIpLFU9bmV3IFJlZ0V4cChPKSxWPW5ldyBSZWdFeHAoIl4iK00rIiQiKSxXPXtJRDpuZXcgUmVnRXhwKCJeIygiK00rIikiKSxDTEFTUzpuZXcgUmVnRXhwKCJeXFwuKCIrTSsiKSIpLFRBRzpuZXcgUmVnRXhwKCJeKCIrTSsifFsqXSkiKSxBVFRSOm5ldyBSZWdFeHAoIl4iK04pLFBTRVVETzpuZXcgUmVnRXhwKCJeIitPKSxDSElMRDpuZXcgUmVnRXhwKCJeOihvbmx5fGZpcnN0fGxhc3R8bnRofG50aC1sYXN0KS0oY2hpbGR8b2YtdHlwZSkoPzpcXCgiK0wrIiooZXZlbnxvZGR8KChbKy1dfCkoXFxkKilufCkiK0wrIiooPzooWystXXwpIitMKyIqKFxcZCspfCkpIitMKyIqXFwpfCkiLCJpIiksYm9vbDpuZXcgUmVnRXhwKCJeKD86IitLKyIpJCIsImkiKSxuZWVkc0NvbnRleHQ6bmV3IFJlZ0V4cCgiXiIrTCsiKls+K35dfDooZXZlbnxvZGR8ZXF8Z3R8bHR8bnRofGZpcnN0fGxhc3QpKD86XFwoIitMKyIqKCg/Oi1cXGQpP1xcZCopIitMKyIqXFwpfCkoPz1bXi1dfCQpIiwiaSIpfSxYPS9eKD86aW5wdXR8c2VsZWN0fHRleHRhcmVhfGJ1dHRvbikkL2ksWT0vXmhcZCQvaSxaPS9eW157XStce1xzKlxbbmF0aXZlIFx3LywkPS9eKD86IyhbXHctXSspfChcdyspfFwuKFtcdy1dKykpJC8sXz0vWyt+XS8sYWE9Lyd8XFwvZyxiYT1uZXcgUmVnRXhwKCJcXFxcKFtcXGRhLWZdezEsNn0iK0wrIj98KCIrTCsiKXwuKSIsImlnIiksY2E9ZnVuY3Rpb24oYSxiLGMpe3ZhciBkPSIweCIrYi02NTUzNjtyZXR1cm4gZCE9PWR8fGM/YjowPmQ/U3RyaW5nLmZyb21DaGFyQ29kZShkKzY1NTM2KTpTdHJpbmcuZnJvbUNoYXJDb2RlKGQ+PjEwfDU1Mjk2LDEwMjMmZHw1NjMyMCl9LGRhPWZ1bmN0aW9uKCl7bSgpfTt0cnl7SC5hcHBseShFPUkuY2FsbCh2LmNoaWxkTm9kZXMpLHYuY2hpbGROb2RlcyksRVt2LmNoaWxkTm9kZXMubGVuZ3RoXS5ub2RlVHlwZX1jYXRjaChlYSl7SD17YXBwbHk6RS5sZW5ndGg/ZnVuY3Rpb24oYSxiKXtHLmFwcGx5KGEsSS5jYWxsKGIpKX06ZnVuY3Rpb24oYSxiKXt2YXIgYz1hLmxlbmd0aCxkPTA7d2hpbGUoYVtjKytdPWJbZCsrXSk7YS5sZW5ndGg9Yy0xfX19ZnVuY3Rpb24gZmEoYSxiLGQsZSl7dmFyIGYsaCxqLGssbCxvLHIscyx3PWImJmIub3duZXJEb2N1bWVudCx4PWI/Yi5ub2RlVHlwZTo5O2lmKGQ9ZHx8W10sInN0cmluZyIhPXR5cGVvZiBhfHwhYXx8MSE9PXgmJjkhPT14JiYxMSE9PXgpcmV0dXJuIGQ7aWYoIWUmJigoYj9iLm93bmVyRG9jdW1lbnR8fGI6dikhPT1uJiZtKGIpLGI9Ynx8bixwKSl7aWYoMTEhPT14JiYobz0kLmV4ZWMoYSkpKWlmKGY9b1sxXSl7aWYoOT09PXgpe2lmKCEoaj1iLmdldEVsZW1lbnRCeUlkKGYpKSlyZXR1cm4gZDtpZihqLmlkPT09ZilyZXR1cm4gZC5wdXNoKGopLGR9ZWxzZSBpZih3JiYoaj13LmdldEVsZW1lbnRCeUlkKGYpKSYmdChiLGopJiZqLmlkPT09ZilyZXR1cm4gZC5wdXNoKGopLGR9ZWxzZXtpZihvWzJdKXJldHVybiBILmFwcGx5KGQsYi5nZXRFbGVtZW50c0J5VGFnTmFtZShhKSksZDtpZigoZj1vWzNdKSYmYy5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lJiZiLmdldEVsZW1lbnRzQnlDbGFzc05hbWUpcmV0dXJuIEguYXBwbHkoZCxiLmdldEVsZW1lbnRzQnlDbGFzc05hbWUoZikpLGR9aWYoYy5xc2EmJiFBW2ErIiAiXSYmKCFxfHwhcS50ZXN0KGEpKSl7aWYoMSE9PXgpdz1iLHM9YTtlbHNlIGlmKCJvYmplY3QiIT09Yi5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpKXsoaz1iLmdldEF0dHJpYnV0ZSgiaWQiKSk/az1rLnJlcGxhY2UoYWEsIlxcJCYiKTpiLnNldEF0dHJpYnV0ZSgiaWQiLGs9dSkscj1nKGEpLGg9ci5sZW5ndGgsbD1WLnRlc3Qoayk/IiMiK2s6IltpZD0nIitrKyInXSI7d2hpbGUoaC0tKXJbaF09bCsiICIrcWEocltoXSk7cz1yLmpvaW4oIiwiKSx3PV8udGVzdChhKSYmb2EoYi5wYXJlbnROb2RlKXx8Yn1pZihzKXRyeXtyZXR1cm4gSC5hcHBseShkLHcucXVlcnlTZWxlY3RvckFsbChzKSksZH1jYXRjaCh5KXt9ZmluYWxseXtrPT09dSYmYi5yZW1vdmVBdHRyaWJ1dGUoImlkIil9fX1yZXR1cm4gaShhLnJlcGxhY2UoUSwiJDEiKSxiLGQsZSl9ZnVuY3Rpb24gZ2EoKXt2YXIgYT1bXTtmdW5jdGlvbiBiKGMsZSl7cmV0dXJuIGEucHVzaChjKyIgIik+ZC5jYWNoZUxlbmd0aCYmZGVsZXRlIGJbYS5zaGlmdCgpXSxiW2MrIiAiXT1lfXJldHVybiBifWZ1bmN0aW9uIGhhKGEpe3JldHVybiBhW3VdPSEwLGF9ZnVuY3Rpb24gaWEoYSl7dmFyIGI9bi5jcmVhdGVFbGVtZW50KCJkaXYiKTt0cnl7cmV0dXJuISFhKGIpfWNhdGNoKGMpe3JldHVybiExfWZpbmFsbHl7Yi5wYXJlbnROb2RlJiZiLnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQoYiksYj1udWxsfX1mdW5jdGlvbiBqYShhLGIpe3ZhciBjPWEuc3BsaXQoInwiKSxlPWMubGVuZ3RoO3doaWxlKGUtLSlkLmF0dHJIYW5kbGVbY1tlXV09Yn1mdW5jdGlvbiBrYShhLGIpe3ZhciBjPWImJmEsZD1jJiYxPT09YS5ub2RlVHlwZSYmMT09PWIubm9kZVR5cGUmJih+Yi5zb3VyY2VJbmRleHx8QyktKH5hLnNvdXJjZUluZGV4fHxDKTtpZihkKXJldHVybiBkO2lmKGMpd2hpbGUoYz1jLm5leHRTaWJsaW5nKWlmKGM9PT1iKXJldHVybi0xO3JldHVybiBhPzE6LTF9ZnVuY3Rpb24gbGEoYSl7cmV0dXJuIGZ1bmN0aW9uKGIpe3ZhciBjPWIubm9kZU5hbWUudG9Mb3dlckNhc2UoKTtyZXR1cm4iaW5wdXQiPT09YyYmYi50eXBlPT09YX19ZnVuY3Rpb24gbWEoYSl7cmV0dXJuIGZ1bmN0aW9uKGIpe3ZhciBjPWIubm9kZU5hbWUudG9Mb3dlckNhc2UoKTtyZXR1cm4oImlucHV0Ij09PWN8fCJidXR0b24iPT09YykmJmIudHlwZT09PWF9fWZ1bmN0aW9uIG5hKGEpe3JldHVybiBoYShmdW5jdGlvbihiKXtyZXR1cm4gYj0rYixoYShmdW5jdGlvbihjLGQpe3ZhciBlLGY9YShbXSxjLmxlbmd0aCxiKSxnPWYubGVuZ3RoO3doaWxlKGctLSljW2U9ZltnXV0mJihjW2VdPSEoZFtlXT1jW2VdKSl9KX0pfWZ1bmN0aW9uIG9hKGEpe3JldHVybiBhJiYidW5kZWZpbmVkIiE9dHlwZW9mIGEuZ2V0RWxlbWVudHNCeVRhZ05hbWUmJmF9Yz1mYS5zdXBwb3J0PXt9LGY9ZmEuaXNYTUw9ZnVuY3Rpb24oYSl7dmFyIGI9YSYmKGEub3duZXJEb2N1bWVudHx8YSkuZG9jdW1lbnRFbGVtZW50O3JldHVybiBiPyJIVE1MIiE9PWIubm9kZU5hbWU6ITF9LG09ZmEuc2V0RG9jdW1lbnQ9ZnVuY3Rpb24oYSl7dmFyIGIsZSxnPWE/YS5vd25lckRvY3VtZW50fHxhOnY7cmV0dXJuIGchPT1uJiY5PT09Zy5ub2RlVHlwZSYmZy5kb2N1bWVudEVsZW1lbnQ/KG49ZyxvPW4uZG9jdW1lbnRFbGVtZW50LHA9IWYobiksKGU9bi5kZWZhdWx0VmlldykmJmUudG9wIT09ZSYmKGUuYWRkRXZlbnRMaXN0ZW5lcj9lLmFkZEV2ZW50TGlzdGVuZXIoInVubG9hZCIsZGEsITEpOmUuYXR0YWNoRXZlbnQmJmUuYXR0YWNoRXZlbnQoIm9udW5sb2FkIixkYSkpLGMuYXR0cmlidXRlcz1pYShmdW5jdGlvbihhKXtyZXR1cm4gYS5jbGFzc05hbWU9ImkiLCFhLmdldEF0dHJpYnV0ZSgiY2xhc3NOYW1lIil9KSxjLmdldEVsZW1lbnRzQnlUYWdOYW1lPWlhKGZ1bmN0aW9uKGEpe3JldHVybiBhLmFwcGVuZENoaWxkKG4uY3JlYXRlQ29tbWVudCgiIikpLCFhLmdldEVsZW1lbnRzQnlUYWdOYW1lKCIqIikubGVuZ3RofSksYy5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lPVoudGVzdChuLmdldEVsZW1lbnRzQnlDbGFzc05hbWUpLGMuZ2V0QnlJZD1pYShmdW5jdGlvbihhKXtyZXR1cm4gby5hcHBlbmRDaGlsZChhKS5pZD11LCFuLmdldEVsZW1lbnRzQnlOYW1lfHwhbi5nZXRFbGVtZW50c0J5TmFtZSh1KS5sZW5ndGh9KSxjLmdldEJ5SWQ/KGQuZmluZC5JRD1mdW5jdGlvbihhLGIpe2lmKCJ1bmRlZmluZWQiIT10eXBlb2YgYi5nZXRFbGVtZW50QnlJZCYmcCl7dmFyIGM9Yi5nZXRFbGVtZW50QnlJZChhKTtyZXR1cm4gYz9bY106W119fSxkLmZpbHRlci5JRD1mdW5jdGlvbihhKXt2YXIgYj1hLnJlcGxhY2UoYmEsY2EpO3JldHVybiBmdW5jdGlvbihhKXtyZXR1cm4gYS5nZXRBdHRyaWJ1dGUoImlkIik9PT1ifX0pOihkZWxldGUgZC5maW5kLklELGQuZmlsdGVyLklEPWZ1bmN0aW9uKGEpe3ZhciBiPWEucmVwbGFjZShiYSxjYSk7cmV0dXJuIGZ1bmN0aW9uKGEpe3ZhciBjPSJ1bmRlZmluZWQiIT10eXBlb2YgYS5nZXRBdHRyaWJ1dGVOb2RlJiZhLmdldEF0dHJpYnV0ZU5vZGUoImlkIik7cmV0dXJuIGMmJmMudmFsdWU9PT1ifX0pLGQuZmluZC5UQUc9Yy5nZXRFbGVtZW50c0J5VGFnTmFtZT9mdW5jdGlvbihhLGIpe3JldHVybiJ1bmRlZmluZWQiIT10eXBlb2YgYi5nZXRFbGVtZW50c0J5VGFnTmFtZT9iLmdldEVsZW1lbnRzQnlUYWdOYW1lKGEpOmMucXNhP2IucXVlcnlTZWxlY3RvckFsbChhKTp2b2lkIDB9OmZ1bmN0aW9uKGEsYil7dmFyIGMsZD1bXSxlPTAsZj1iLmdldEVsZW1lbnRzQnlUYWdOYW1lKGEpO2lmKCIqIj09PWEpe3doaWxlKGM9ZltlKytdKTE9PT1jLm5vZGVUeXBlJiZkLnB1c2goYyk7cmV0dXJuIGR9cmV0dXJuIGZ9LGQuZmluZC5DTEFTUz1jLmdldEVsZW1lbnRzQnlDbGFzc05hbWUmJmZ1bmN0aW9uKGEsYil7cmV0dXJuInVuZGVmaW5lZCIhPXR5cGVvZiBiLmdldEVsZW1lbnRzQnlDbGFzc05hbWUmJnA/Yi5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKGEpOnZvaWQgMH0scj1bXSxxPVtdLChjLnFzYT1aLnRlc3Qobi5xdWVyeVNlbGVjdG9yQWxsKSkmJihpYShmdW5jdGlvbihhKXtvLmFwcGVuZENoaWxkKGEpLmlubmVySFRNTD0iPGEgaWQ9JyIrdSsiJz48L2E+PHNlbGVjdCBpZD0nIit1KyItXHJcXCcgbXNhbGxvd2NhcHR1cmU9Jyc+PG9wdGlvbiBzZWxlY3RlZD0nJz48L29wdGlvbj48L3NlbGVjdD4iLGEucXVlcnlTZWxlY3RvckFsbCgiW21zYWxsb3djYXB0dXJlXj0nJ10iKS5sZW5ndGgmJnEucHVzaCgiWypeJF09IitMKyIqKD86Jyd8XCJcIikiKSxhLnF1ZXJ5U2VsZWN0b3JBbGwoIltzZWxlY3RlZF0iKS5sZW5ndGh8fHEucHVzaCgiXFxbIitMKyIqKD86dmFsdWV8IitLKyIpIiksYS5xdWVyeVNlbGVjdG9yQWxsKCJbaWR+PSIrdSsiLV0iKS5sZW5ndGh8fHEucHVzaCgifj0iKSxhLnF1ZXJ5U2VsZWN0b3JBbGwoIjpjaGVja2VkIikubGVuZ3RofHxxLnB1c2goIjpjaGVja2VkIiksYS5xdWVyeVNlbGVjdG9yQWxsKCJhIyIrdSsiKyoiKS5sZW5ndGh8fHEucHVzaCgiLiMuK1srfl0iKX0pLGlhKGZ1bmN0aW9uKGEpe3ZhciBiPW4uY3JlYXRlRWxlbWVudCgiaW5wdXQiKTtiLnNldEF0dHJpYnV0ZSgidHlwZSIsImhpZGRlbiIpLGEuYXBwZW5kQ2hpbGQoYikuc2V0QXR0cmlidXRlKCJuYW1lIiwiRCIpLGEucXVlcnlTZWxlY3RvckFsbCgiW25hbWU9ZF0iKS5sZW5ndGgmJnEucHVzaCgibmFtZSIrTCsiKlsqXiR8IX5dPz0iKSxhLnF1ZXJ5U2VsZWN0b3JBbGwoIjplbmFibGVkIikubGVuZ3RofHxxLnB1c2goIjplbmFibGVkIiwiOmRpc2FibGVkIiksYS5xdWVyeVNlbGVjdG9yQWxsKCIqLDp4IikscS5wdXNoKCIsLio6Iil9KSksKGMubWF0Y2hlc1NlbGVjdG9yPVoudGVzdChzPW8ubWF0Y2hlc3x8by53ZWJraXRNYXRjaGVzU2VsZWN0b3J8fG8ubW96TWF0Y2hlc1NlbGVjdG9yfHxvLm9NYXRjaGVzU2VsZWN0b3J8fG8ubXNNYXRjaGVzU2VsZWN0b3IpKSYmaWEoZnVuY3Rpb24oYSl7Yy5kaXNjb25uZWN0ZWRNYXRjaD1zLmNhbGwoYSwiZGl2Iikscy5jYWxsKGEsIltzIT0nJ106eCIpLHIucHVzaCgiIT0iLE8pfSkscT1xLmxlbmd0aCYmbmV3IFJlZ0V4cChxLmpvaW4oInwiKSkscj1yLmxlbmd0aCYmbmV3IFJlZ0V4cChyLmpvaW4oInwiKSksYj1aLnRlc3Qoby5jb21wYXJlRG9jdW1lbnRQb3NpdGlvbiksdD1ifHxaLnRlc3Qoby5jb250YWlucyk/ZnVuY3Rpb24oYSxiKXt2YXIgYz05PT09YS5ub2RlVHlwZT9hLmRvY3VtZW50RWxlbWVudDphLGQ9YiYmYi5wYXJlbnROb2RlO3JldHVybiBhPT09ZHx8ISghZHx8MSE9PWQubm9kZVR5cGV8fCEoYy5jb250YWlucz9jLmNvbnRhaW5zKGQpOmEuY29tcGFyZURvY3VtZW50UG9zaXRpb24mJjE2JmEuY29tcGFyZURvY3VtZW50UG9zaXRpb24oZCkpKX06ZnVuY3Rpb24oYSxiKXtpZihiKXdoaWxlKGI9Yi5wYXJlbnROb2RlKWlmKGI9PT1hKXJldHVybiEwO3JldHVybiExfSxCPWI/ZnVuY3Rpb24oYSxiKXtpZihhPT09YilyZXR1cm4gbD0hMCwwO3ZhciBkPSFhLmNvbXBhcmVEb2N1bWVudFBvc2l0aW9uLSFiLmNvbXBhcmVEb2N1bWVudFBvc2l0aW9uO3JldHVybiBkP2Q6KGQ9KGEub3duZXJEb2N1bWVudHx8YSk9PT0oYi5vd25lckRvY3VtZW50fHxiKT9hLmNvbXBhcmVEb2N1bWVudFBvc2l0aW9uKGIpOjEsMSZkfHwhYy5zb3J0RGV0YWNoZWQmJmIuY29tcGFyZURvY3VtZW50UG9zaXRpb24oYSk9PT1kP2E9PT1ufHxhLm93bmVyRG9jdW1lbnQ9PT12JiZ0KHYsYSk/LTE6Yj09PW58fGIub3duZXJEb2N1bWVudD09PXYmJnQodixiKT8xOms/SihrLGEpLUooayxiKTowOjQmZD8tMToxKX06ZnVuY3Rpb24oYSxiKXtpZihhPT09YilyZXR1cm4gbD0hMCwwO3ZhciBjLGQ9MCxlPWEucGFyZW50Tm9kZSxmPWIucGFyZW50Tm9kZSxnPVthXSxoPVtiXTtpZighZXx8IWYpcmV0dXJuIGE9PT1uPy0xOmI9PT1uPzE6ZT8tMTpmPzE6az9KKGssYSktSihrLGIpOjA7aWYoZT09PWYpcmV0dXJuIGthKGEsYik7Yz1hO3doaWxlKGM9Yy5wYXJlbnROb2RlKWcudW5zaGlmdChjKTtjPWI7d2hpbGUoYz1jLnBhcmVudE5vZGUpaC51bnNoaWZ0KGMpO3doaWxlKGdbZF09PT1oW2RdKWQrKztyZXR1cm4gZD9rYShnW2RdLGhbZF0pOmdbZF09PT12Py0xOmhbZF09PT12PzE6MH0sbik6bn0sZmEubWF0Y2hlcz1mdW5jdGlvbihhLGIpe3JldHVybiBmYShhLG51bGwsbnVsbCxiKX0sZmEubWF0Y2hlc1NlbGVjdG9yPWZ1bmN0aW9uKGEsYil7aWYoKGEub3duZXJEb2N1bWVudHx8YSkhPT1uJiZtKGEpLGI9Yi5yZXBsYWNlKFQsIj0nJDEnXSIpLGMubWF0Y2hlc1NlbGVjdG9yJiZwJiYhQVtiKyIgIl0mJighcnx8IXIudGVzdChiKSkmJighcXx8IXEudGVzdChiKSkpdHJ5e3ZhciBkPXMuY2FsbChhLGIpO2lmKGR8fGMuZGlzY29ubmVjdGVkTWF0Y2h8fGEuZG9jdW1lbnQmJjExIT09YS5kb2N1bWVudC5ub2RlVHlwZSlyZXR1cm4gZH1jYXRjaChlKXt9cmV0dXJuIGZhKGIsbixudWxsLFthXSkubGVuZ3RoPjB9LGZhLmNvbnRhaW5zPWZ1bmN0aW9uKGEsYil7cmV0dXJuKGEub3duZXJEb2N1bWVudHx8YSkhPT1uJiZtKGEpLHQoYSxiKX0sZmEuYXR0cj1mdW5jdGlvbihhLGIpeyhhLm93bmVyRG9jdW1lbnR8fGEpIT09biYmbShhKTt2YXIgZT1kLmF0dHJIYW5kbGVbYi50b0xvd2VyQ2FzZSgpXSxmPWUmJkQuY2FsbChkLmF0dHJIYW5kbGUsYi50b0xvd2VyQ2FzZSgpKT9lKGEsYiwhcCk6dm9pZCAwO3JldHVybiB2b2lkIDAhPT1mP2Y6Yy5hdHRyaWJ1dGVzfHwhcD9hLmdldEF0dHJpYnV0ZShiKTooZj1hLmdldEF0dHJpYnV0ZU5vZGUoYikpJiZmLnNwZWNpZmllZD9mLnZhbHVlOm51bGx9LGZhLmVycm9yPWZ1bmN0aW9uKGEpe3Rocm93IG5ldyBFcnJvcigiU3ludGF4IGVycm9yLCB1bnJlY29nbml6ZWQgZXhwcmVzc2lvbjogIithKX0sZmEudW5pcXVlU29ydD1mdW5jdGlvbihhKXt2YXIgYixkPVtdLGU9MCxmPTA7aWYobD0hYy5kZXRlY3REdXBsaWNhdGVzLGs9IWMuc29ydFN0YWJsZSYmYS5zbGljZSgwKSxhLnNvcnQoQiksbCl7d2hpbGUoYj1hW2YrK10pYj09PWFbZl0mJihlPWQucHVzaChmKSk7d2hpbGUoZS0tKWEuc3BsaWNlKGRbZV0sMSl9cmV0dXJuIGs9bnVsbCxhfSxlPWZhLmdldFRleHQ9ZnVuY3Rpb24oYSl7dmFyIGIsYz0iIixkPTAsZj1hLm5vZGVUeXBlO2lmKGYpe2lmKDE9PT1mfHw5PT09Znx8MTE9PT1mKXtpZigic3RyaW5nIj09dHlwZW9mIGEudGV4dENvbnRlbnQpcmV0dXJuIGEudGV4dENvbnRlbnQ7Zm9yKGE9YS5maXJzdENoaWxkO2E7YT1hLm5leHRTaWJsaW5nKWMrPWUoYSl9ZWxzZSBpZigzPT09Znx8ND09PWYpcmV0dXJuIGEubm9kZVZhbHVlfWVsc2Ugd2hpbGUoYj1hW2QrK10pYys9ZShiKTtyZXR1cm4gY30sZD1mYS5zZWxlY3RvcnM9e2NhY2hlTGVuZ3RoOjUwLGNyZWF0ZVBzZXVkbzpoYSxtYXRjaDpXLGF0dHJIYW5kbGU6e30sZmluZDp7fSxyZWxhdGl2ZTp7Ij4iOntkaXI6InBhcmVudE5vZGUiLGZpcnN0OiEwfSwiICI6e2RpcjoicGFyZW50Tm9kZSJ9LCIrIjp7ZGlyOiJwcmV2aW91c1NpYmxpbmciLGZpcnN0OiEwfSwifiI6e2RpcjoicHJldmlvdXNTaWJsaW5nIn19LHByZUZpbHRlcjp7QVRUUjpmdW5jdGlvbihhKXtyZXR1cm4gYVsxXT1hWzFdLnJlcGxhY2UoYmEsY2EpLGFbM109KGFbM118fGFbNF18fGFbNV18fCIiKS5yZXBsYWNlKGJhLGNhKSwifj0iPT09YVsyXSYmKGFbM109IiAiK2FbM10rIiAiKSxhLnNsaWNlKDAsNCl9LENISUxEOmZ1bmN0aW9uKGEpe3JldHVybiBhWzFdPWFbMV0udG9Mb3dlckNhc2UoKSwibnRoIj09PWFbMV0uc2xpY2UoMCwzKT8oYVszXXx8ZmEuZXJyb3IoYVswXSksYVs0XT0rKGFbNF0/YVs1XSsoYVs2XXx8MSk6MiooImV2ZW4iPT09YVszXXx8Im9kZCI9PT1hWzNdKSksYVs1XT0rKGFbN10rYVs4XXx8Im9kZCI9PT1hWzNdKSk6YVszXSYmZmEuZXJyb3IoYVswXSksYX0sUFNFVURPOmZ1bmN0aW9uKGEpe3ZhciBiLGM9IWFbNl0mJmFbMl07cmV0dXJuIFcuQ0hJTEQudGVzdChhWzBdKT9udWxsOihhWzNdP2FbMl09YVs0XXx8YVs1XXx8IiI6YyYmVS50ZXN0KGMpJiYoYj1nKGMsITApKSYmKGI9Yy5pbmRleE9mKCIpIixjLmxlbmd0aC1iKS1jLmxlbmd0aCkmJihhWzBdPWFbMF0uc2xpY2UoMCxiKSxhWzJdPWMuc2xpY2UoMCxiKSksYS5zbGljZSgwLDMpKX19LGZpbHRlcjp7VEFHOmZ1bmN0aW9uKGEpe3ZhciBiPWEucmVwbGFjZShiYSxjYSkudG9Mb3dlckNhc2UoKTtyZXR1cm4iKiI9PT1hP2Z1bmN0aW9uKCl7cmV0dXJuITB9OmZ1bmN0aW9uKGEpe3JldHVybiBhLm5vZGVOYW1lJiZhLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCk9PT1ifX0sQ0xBU1M6ZnVuY3Rpb24oYSl7dmFyIGI9eVthKyIgIl07cmV0dXJuIGJ8fChiPW5ldyBSZWdFeHAoIihefCIrTCsiKSIrYSsiKCIrTCsifCQpIikpJiZ5KGEsZnVuY3Rpb24oYSl7cmV0dXJuIGIudGVzdCgic3RyaW5nIj09dHlwZW9mIGEuY2xhc3NOYW1lJiZhLmNsYXNzTmFtZXx8InVuZGVmaW5lZCIhPXR5cGVvZiBhLmdldEF0dHJpYnV0ZSYmYS5nZXRBdHRyaWJ1dGUoImNsYXNzIil8fCIiKX0pfSxBVFRSOmZ1bmN0aW9uKGEsYixjKXtyZXR1cm4gZnVuY3Rpb24oZCl7dmFyIGU9ZmEuYXR0cihkLGEpO3JldHVybiBudWxsPT1lPyIhPSI9PT1iOmI/KGUrPSIiLCI9Ij09PWI/ZT09PWM6IiE9Ij09PWI/ZSE9PWM6Il49Ij09PWI/YyYmMD09PWUuaW5kZXhPZihjKToiKj0iPT09Yj9jJiZlLmluZGV4T2YoYyk+LTE6IiQ9Ij09PWI/YyYmZS5zbGljZSgtYy5sZW5ndGgpPT09Yzoifj0iPT09Yj8oIiAiK2UucmVwbGFjZShQLCIgIikrIiAiKS5pbmRleE9mKGMpPi0xOiJ8PSI9PT1iP2U9PT1jfHxlLnNsaWNlKDAsYy5sZW5ndGgrMSk9PT1jKyItIjohMSk6ITB9fSxDSElMRDpmdW5jdGlvbihhLGIsYyxkLGUpe3ZhciBmPSJudGgiIT09YS5zbGljZSgwLDMpLGc9Imxhc3QiIT09YS5zbGljZSgtNCksaD0ib2YtdHlwZSI9PT1iO3JldHVybiAxPT09ZCYmMD09PWU/ZnVuY3Rpb24oYSl7cmV0dXJuISFhLnBhcmVudE5vZGV9OmZ1bmN0aW9uKGIsYyxpKXt2YXIgaixrLGwsbSxuLG8scD1mIT09Zz8ibmV4dFNpYmxpbmciOiJwcmV2aW91c1NpYmxpbmciLHE9Yi5wYXJlbnROb2RlLHI9aCYmYi5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpLHM9IWkmJiFoLHQ9ITE7aWYocSl7aWYoZil7d2hpbGUocCl7bT1iO3doaWxlKG09bVtwXSlpZihoP20ubm9kZU5hbWUudG9Mb3dlckNhc2UoKT09PXI6MT09PW0ubm9kZVR5cGUpcmV0dXJuITE7bz1wPSJvbmx5Ij09PWEmJiFvJiYibmV4dFNpYmxpbmcifXJldHVybiEwfWlmKG89W2c/cS5maXJzdENoaWxkOnEubGFzdENoaWxkXSxnJiZzKXttPXEsbD1tW3VdfHwobVt1XT17fSksaz1sW20udW5pcXVlSURdfHwobFttLnVuaXF1ZUlEXT17fSksaj1rW2FdfHxbXSxuPWpbMF09PT13JiZqWzFdLHQ9biYmalsyXSxtPW4mJnEuY2hpbGROb2Rlc1tuXTt3aGlsZShtPSsrbiYmbSYmbVtwXXx8KHQ9bj0wKXx8by5wb3AoKSlpZigxPT09bS5ub2RlVHlwZSYmKyt0JiZtPT09Yil7a1thXT1bdyxuLHRdO2JyZWFrfX1lbHNlIGlmKHMmJihtPWIsbD1tW3VdfHwobVt1XT17fSksaz1sW20udW5pcXVlSURdfHwobFttLnVuaXF1ZUlEXT17fSksaj1rW2FdfHxbXSxuPWpbMF09PT13JiZqWzFdLHQ9biksdD09PSExKXdoaWxlKG09KytuJiZtJiZtW3BdfHwodD1uPTApfHxvLnBvcCgpKWlmKChoP20ubm9kZU5hbWUudG9Mb3dlckNhc2UoKT09PXI6MT09PW0ubm9kZVR5cGUpJiYrK3QmJihzJiYobD1tW3VdfHwobVt1XT17fSksaz1sW20udW5pcXVlSURdfHwobFttLnVuaXF1ZUlEXT17fSksa1thXT1bdyx0XSksbT09PWIpKWJyZWFrO3JldHVybiB0LT1lLHQ9PT1kfHx0JWQ9PT0wJiZ0L2Q+PTB9fX0sUFNFVURPOmZ1bmN0aW9uKGEsYil7dmFyIGMsZT1kLnBzZXVkb3NbYV18fGQuc2V0RmlsdGVyc1thLnRvTG93ZXJDYXNlKCldfHxmYS5lcnJvcigidW5zdXBwb3J0ZWQgcHNldWRvOiAiK2EpO3JldHVybiBlW3VdP2UoYik6ZS5sZW5ndGg+MT8oYz1bYSxhLCIiLGJdLGQuc2V0RmlsdGVycy5oYXNPd25Qcm9wZXJ0eShhLnRvTG93ZXJDYXNlKCkpP2hhKGZ1bmN0aW9uKGEsYyl7dmFyIGQsZj1lKGEsYiksZz1mLmxlbmd0aDt3aGlsZShnLS0pZD1KKGEsZltnXSksYVtkXT0hKGNbZF09ZltnXSl9KTpmdW5jdGlvbihhKXtyZXR1cm4gZShhLDAsYyl9KTplfX0scHNldWRvczp7bm90OmhhKGZ1bmN0aW9uKGEpe3ZhciBiPVtdLGM9W10sZD1oKGEucmVwbGFjZShRLCIkMSIpKTtyZXR1cm4gZFt1XT9oYShmdW5jdGlvbihhLGIsYyxlKXt2YXIgZixnPWQoYSxudWxsLGUsW10pLGg9YS5sZW5ndGg7d2hpbGUoaC0tKShmPWdbaF0pJiYoYVtoXT0hKGJbaF09ZikpfSk6ZnVuY3Rpb24oYSxlLGYpe3JldHVybiBiWzBdPWEsZChiLG51bGwsZixjKSxiWzBdPW51bGwsIWMucG9wKCl9fSksaGFzOmhhKGZ1bmN0aW9uKGEpe3JldHVybiBmdW5jdGlvbihiKXtyZXR1cm4gZmEoYSxiKS5sZW5ndGg+MH19KSxjb250YWluczpoYShmdW5jdGlvbihhKXtyZXR1cm4gYT1hLnJlcGxhY2UoYmEsY2EpLGZ1bmN0aW9uKGIpe3JldHVybihiLnRleHRDb250ZW50fHxiLmlubmVyVGV4dHx8ZShiKSkuaW5kZXhPZihhKT4tMX19KSxsYW5nOmhhKGZ1bmN0aW9uKGEpe3JldHVybiBWLnRlc3QoYXx8IiIpfHxmYS5lcnJvcigidW5zdXBwb3J0ZWQgbGFuZzogIithKSxhPWEucmVwbGFjZShiYSxjYSkudG9Mb3dlckNhc2UoKSxmdW5jdGlvbihiKXt2YXIgYztkbyBpZihjPXA/Yi5sYW5nOmIuZ2V0QXR0cmlidXRlKCJ4bWw6bGFuZyIpfHxiLmdldEF0dHJpYnV0ZSgibGFuZyIpKXJldHVybiBjPWMudG9Mb3dlckNhc2UoKSxjPT09YXx8MD09PWMuaW5kZXhPZihhKyItIik7d2hpbGUoKGI9Yi5wYXJlbnROb2RlKSYmMT09PWIubm9kZVR5cGUpO3JldHVybiExfX0pLHRhcmdldDpmdW5jdGlvbihiKXt2YXIgYz1hLmxvY2F0aW9uJiZhLmxvY2F0aW9uLmhhc2g7cmV0dXJuIGMmJmMuc2xpY2UoMSk9PT1iLmlkfSxyb290OmZ1bmN0aW9uKGEpe3JldHVybiBhPT09b30sZm9jdXM6ZnVuY3Rpb24oYSl7cmV0dXJuIGE9PT1uLmFjdGl2ZUVsZW1lbnQmJighbi5oYXNGb2N1c3x8bi5oYXNGb2N1cygpKSYmISEoYS50eXBlfHxhLmhyZWZ8fH5hLnRhYkluZGV4KX0sZW5hYmxlZDpmdW5jdGlvbihhKXtyZXR1cm4gYS5kaXNhYmxlZD09PSExfSxkaXNhYmxlZDpmdW5jdGlvbihhKXtyZXR1cm4gYS5kaXNhYmxlZD09PSEwfSxjaGVja2VkOmZ1bmN0aW9uKGEpe3ZhciBiPWEubm9kZU5hbWUudG9Mb3dlckNhc2UoKTtyZXR1cm4iaW5wdXQiPT09YiYmISFhLmNoZWNrZWR8fCJvcHRpb24iPT09YiYmISFhLnNlbGVjdGVkfSxzZWxlY3RlZDpmdW5jdGlvbihhKXtyZXR1cm4gYS5wYXJlbnROb2RlJiZhLnBhcmVudE5vZGUuc2VsZWN0ZWRJbmRleCxhLnNlbGVjdGVkPT09ITB9LGVtcHR5OmZ1bmN0aW9uKGEpe2ZvcihhPWEuZmlyc3RDaGlsZDthO2E9YS5uZXh0U2libGluZylpZihhLm5vZGVUeXBlPDYpcmV0dXJuITE7cmV0dXJuITB9LHBhcmVudDpmdW5jdGlvbihhKXtyZXR1cm4hZC5wc2V1ZG9zLmVtcHR5KGEpfSxoZWFkZXI6ZnVuY3Rpb24oYSl7cmV0dXJuIFkudGVzdChhLm5vZGVOYW1lKX0saW5wdXQ6ZnVuY3Rpb24oYSl7cmV0dXJuIFgudGVzdChhLm5vZGVOYW1lKX0sYnV0dG9uOmZ1bmN0aW9uKGEpe3ZhciBiPWEubm9kZU5hbWUudG9Mb3dlckNhc2UoKTtyZXR1cm4iaW5wdXQiPT09YiYmImJ1dHRvbiI9PT1hLnR5cGV8fCJidXR0b24iPT09Yn0sdGV4dDpmdW5jdGlvbihhKXt2YXIgYjtyZXR1cm4iaW5wdXQiPT09YS5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpJiYidGV4dCI9PT1hLnR5cGUmJihudWxsPT0oYj1hLmdldEF0dHJpYnV0ZSgidHlwZSIpKXx8InRleHQiPT09Yi50b0xvd2VyQ2FzZSgpKX0sZmlyc3Q6bmEoZnVuY3Rpb24oKXtyZXR1cm5bMF19KSxsYXN0Om5hKGZ1bmN0aW9uKGEsYil7cmV0dXJuW2ItMV19KSxlcTpuYShmdW5jdGlvbihhLGIsYyl7cmV0dXJuWzA+Yz9jK2I6Y119KSxldmVuOm5hKGZ1bmN0aW9uKGEsYil7Zm9yKHZhciBjPTA7Yj5jO2MrPTIpYS5wdXNoKGMpO3JldHVybiBhfSksb2RkOm5hKGZ1bmN0aW9uKGEsYil7Zm9yKHZhciBjPTE7Yj5jO2MrPTIpYS5wdXNoKGMpO3JldHVybiBhfSksbHQ6bmEoZnVuY3Rpb24oYSxiLGMpe2Zvcih2YXIgZD0wPmM/YytiOmM7LS1kPj0wOylhLnB1c2goZCk7cmV0dXJuIGF9KSxndDpuYShmdW5jdGlvbihhLGIsYyl7Zm9yKHZhciBkPTA+Yz9jK2I6YzsrK2Q8YjspYS5wdXNoKGQpO3JldHVybiBhfSl9fSxkLnBzZXVkb3MubnRoPWQucHNldWRvcy5lcTtmb3IoYiBpbntyYWRpbzohMCxjaGVja2JveDohMCxmaWxlOiEwLHBhc3N3b3JkOiEwLGltYWdlOiEwfSlkLnBzZXVkb3NbYl09bGEoYik7Zm9yKGIgaW57c3VibWl0OiEwLHJlc2V0OiEwfSlkLnBzZXVkb3NbYl09bWEoYik7ZnVuY3Rpb24gcGEoKXt9cGEucHJvdG90eXBlPWQuZmlsdGVycz1kLnBzZXVkb3MsZC5zZXRGaWx0ZXJzPW5ldyBwYSxnPWZhLnRva2VuaXplPWZ1bmN0aW9uKGEsYil7dmFyIGMsZSxmLGcsaCxpLGosaz16W2ErIiAiXTtpZihrKXJldHVybiBiPzA6ay5zbGljZSgwKTtoPWEsaT1bXSxqPWQucHJlRmlsdGVyO3doaWxlKGgpe2MmJiEoZT1SLmV4ZWMoaCkpfHwoZSYmKGg9aC5zbGljZShlWzBdLmxlbmd0aCl8fGgpLGkucHVzaChmPVtdKSksYz0hMSwoZT1TLmV4ZWMoaCkpJiYoYz1lLnNoaWZ0KCksZi5wdXNoKHt2YWx1ZTpjLHR5cGU6ZVswXS5yZXBsYWNlKFEsIiAiKX0pLGg9aC5zbGljZShjLmxlbmd0aCkpO2ZvcihnIGluIGQuZmlsdGVyKSEoZT1XW2ddLmV4ZWMoaCkpfHxqW2ddJiYhKGU9altnXShlKSl8fChjPWUuc2hpZnQoKSxmLnB1c2goe3ZhbHVlOmMsdHlwZTpnLG1hdGNoZXM6ZX0pLGg9aC5zbGljZShjLmxlbmd0aCkpO2lmKCFjKWJyZWFrfXJldHVybiBiP2gubGVuZ3RoOmg/ZmEuZXJyb3IoYSk6eihhLGkpLnNsaWNlKDApfTtmdW5jdGlvbiBxYShhKXtmb3IodmFyIGI9MCxjPWEubGVuZ3RoLGQ9IiI7Yz5iO2IrKylkKz1hW2JdLnZhbHVlO3JldHVybiBkfWZ1bmN0aW9uIHJhKGEsYixjKXt2YXIgZD1iLmRpcixlPWMmJiJwYXJlbnROb2RlIj09PWQsZj14Kys7cmV0dXJuIGIuZmlyc3Q/ZnVuY3Rpb24oYixjLGYpe3doaWxlKGI9YltkXSlpZigxPT09Yi5ub2RlVHlwZXx8ZSlyZXR1cm4gYShiLGMsZil9OmZ1bmN0aW9uKGIsYyxnKXt2YXIgaCxpLGosaz1bdyxmXTtpZihnKXt3aGlsZShiPWJbZF0paWYoKDE9PT1iLm5vZGVUeXBlfHxlKSYmYShiLGMsZykpcmV0dXJuITB9ZWxzZSB3aGlsZShiPWJbZF0paWYoMT09PWIubm9kZVR5cGV8fGUpe2lmKGo9Ylt1XXx8KGJbdV09e30pLGk9altiLnVuaXF1ZUlEXXx8KGpbYi51bmlxdWVJRF09e30pLChoPWlbZF0pJiZoWzBdPT09dyYmaFsxXT09PWYpcmV0dXJuIGtbMl09aFsyXTtpZihpW2RdPWssa1syXT1hKGIsYyxnKSlyZXR1cm4hMH19fWZ1bmN0aW9uIHNhKGEpe3JldHVybiBhLmxlbmd0aD4xP2Z1bmN0aW9uKGIsYyxkKXt2YXIgZT1hLmxlbmd0aDt3aGlsZShlLS0paWYoIWFbZV0oYixjLGQpKXJldHVybiExO3JldHVybiEwfTphWzBdfWZ1bmN0aW9uIHRhKGEsYixjKXtmb3IodmFyIGQ9MCxlPWIubGVuZ3RoO2U+ZDtkKyspZmEoYSxiW2RdLGMpO3JldHVybiBjfWZ1bmN0aW9uIHVhKGEsYixjLGQsZSl7Zm9yKHZhciBmLGc9W10saD0wLGk9YS5sZW5ndGgsaj1udWxsIT1iO2k+aDtoKyspKGY9YVtoXSkmJihjJiYhYyhmLGQsZSl8fChnLnB1c2goZiksaiYmYi5wdXNoKGgpKSk7cmV0dXJuIGd9ZnVuY3Rpb24gdmEoYSxiLGMsZCxlLGYpe3JldHVybiBkJiYhZFt1XSYmKGQ9dmEoZCkpLGUmJiFlW3VdJiYoZT12YShlLGYpKSxoYShmdW5jdGlvbihmLGcsaCxpKXt2YXIgaixrLGwsbT1bXSxuPVtdLG89Zy5sZW5ndGgscD1mfHx0YShifHwiKiIsaC5ub2RlVHlwZT9baF06aCxbXSkscT0hYXx8IWYmJmI/cDp1YShwLG0sYSxoLGkpLHI9Yz9lfHwoZj9hOm98fGQpP1tdOmc6cTtpZihjJiZjKHEscixoLGkpLGQpe2o9dWEocixuKSxkKGosW10saCxpKSxrPWoubGVuZ3RoO3doaWxlKGstLSkobD1qW2tdKSYmKHJbbltrXV09IShxW25ba11dPWwpKX1pZihmKXtpZihlfHxhKXtpZihlKXtqPVtdLGs9ci5sZW5ndGg7d2hpbGUoay0tKShsPXJba10pJiZqLnB1c2gocVtrXT1sKTtlKG51bGwscj1bXSxqLGkpfWs9ci5sZW5ndGg7d2hpbGUoay0tKShsPXJba10pJiYoaj1lP0ooZixsKTptW2tdKT4tMSYmKGZbal09IShnW2pdPWwpKX19ZWxzZSByPXVhKHI9PT1nP3Iuc3BsaWNlKG8sci5sZW5ndGgpOnIpLGU/ZShudWxsLGcscixpKTpILmFwcGx5KGcscil9KX1mdW5jdGlvbiB3YShhKXtmb3IodmFyIGIsYyxlLGY9YS5sZW5ndGgsZz1kLnJlbGF0aXZlW2FbMF0udHlwZV0saD1nfHxkLnJlbGF0aXZlWyIgIl0saT1nPzE6MCxrPXJhKGZ1bmN0aW9uKGEpe3JldHVybiBhPT09Yn0saCwhMCksbD1yYShmdW5jdGlvbihhKXtyZXR1cm4gSihiLGEpPi0xfSxoLCEwKSxtPVtmdW5jdGlvbihhLGMsZCl7dmFyIGU9IWcmJihkfHxjIT09ail8fCgoYj1jKS5ub2RlVHlwZT9rKGEsYyxkKTpsKGEsYyxkKSk7cmV0dXJuIGI9bnVsbCxlfV07Zj5pO2krKylpZihjPWQucmVsYXRpdmVbYVtpXS50eXBlXSltPVtyYShzYShtKSxjKV07ZWxzZXtpZihjPWQuZmlsdGVyW2FbaV0udHlwZV0uYXBwbHkobnVsbCxhW2ldLm1hdGNoZXMpLGNbdV0pe2ZvcihlPSsraTtmPmU7ZSsrKWlmKGQucmVsYXRpdmVbYVtlXS50eXBlXSlicmVhaztyZXR1cm4gdmEoaT4xJiZzYShtKSxpPjEmJnFhKGEuc2xpY2UoMCxpLTEpLmNvbmNhdCh7dmFsdWU6IiAiPT09YVtpLTJdLnR5cGU/IioiOiIifSkpLnJlcGxhY2UoUSwiJDEiKSxjLGU+aSYmd2EoYS5zbGljZShpLGUpKSxmPmUmJndhKGE9YS5zbGljZShlKSksZj5lJiZxYShhKSl9bS5wdXNoKGMpfXJldHVybiBzYShtKX1mdW5jdGlvbiB4YShhLGIpe3ZhciBjPWIubGVuZ3RoPjAsZT1hLmxlbmd0aD4wLGY9ZnVuY3Rpb24oZixnLGgsaSxrKXt2YXIgbCxvLHEscj0wLHM9IjAiLHQ9ZiYmW10sdT1bXSx2PWoseD1mfHxlJiZkLmZpbmQuVEFHKCIqIixrKSx5PXcrPW51bGw9PXY/MTpNYXRoLnJhbmRvbSgpfHwuMSx6PXgubGVuZ3RoO2ZvcihrJiYoaj1nPT09bnx8Z3x8ayk7cyE9PXomJm51bGwhPShsPXhbc10pO3MrKyl7aWYoZSYmbCl7bz0wLGd8fGwub3duZXJEb2N1bWVudD09PW58fChtKGwpLGg9IXApO3doaWxlKHE9YVtvKytdKWlmKHEobCxnfHxuLGgpKXtpLnB1c2gobCk7YnJlYWt9ayYmKHc9eSl9YyYmKChsPSFxJiZsKSYmci0tLGYmJnQucHVzaChsKSl9aWYocis9cyxjJiZzIT09cil7bz0wO3doaWxlKHE9YltvKytdKXEodCx1LGcsaCk7aWYoZil7aWYocj4wKXdoaWxlKHMtLSl0W3NdfHx1W3NdfHwodVtzXT1GLmNhbGwoaSkpO3U9dWEodSl9SC5hcHBseShpLHUpLGsmJiFmJiZ1Lmxlbmd0aD4wJiZyK2IubGVuZ3RoPjEmJmZhLnVuaXF1ZVNvcnQoaSl9cmV0dXJuIGsmJih3PXksaj12KSx0fTtyZXR1cm4gYz9oYShmKTpmfXJldHVybiBoPWZhLmNvbXBpbGU9ZnVuY3Rpb24oYSxiKXt2YXIgYyxkPVtdLGU9W10sZj1BW2ErIiAiXTtpZighZil7Ynx8KGI9ZyhhKSksYz1iLmxlbmd0aDt3aGlsZShjLS0pZj13YShiW2NdKSxmW3VdP2QucHVzaChmKTplLnB1c2goZik7Zj1BKGEseGEoZSxkKSksZi5zZWxlY3Rvcj1hfXJldHVybiBmfSxpPWZhLnNlbGVjdD1mdW5jdGlvbihhLGIsZSxmKXt2YXIgaSxqLGssbCxtLG49ImZ1bmN0aW9uIj09dHlwZW9mIGEmJmEsbz0hZiYmZyhhPW4uc2VsZWN0b3J8fGEpO2lmKGU9ZXx8W10sMT09PW8ubGVuZ3RoKXtpZihqPW9bMF09b1swXS5zbGljZSgwKSxqLmxlbmd0aD4yJiYiSUQiPT09KGs9alswXSkudHlwZSYmYy5nZXRCeUlkJiY5PT09Yi5ub2RlVHlwZSYmcCYmZC5yZWxhdGl2ZVtqWzFdLnR5cGVdKXtpZihiPShkLmZpbmQuSUQoay5tYXRjaGVzWzBdLnJlcGxhY2UoYmEsY2EpLGIpfHxbXSlbMF0sIWIpcmV0dXJuIGU7biYmKGI9Yi5wYXJlbnROb2RlKSxhPWEuc2xpY2Uoai5zaGlmdCgpLnZhbHVlLmxlbmd0aCl9aT1XLm5lZWRzQ29udGV4dC50ZXN0KGEpPzA6ai5sZW5ndGg7d2hpbGUoaS0tKXtpZihrPWpbaV0sZC5yZWxhdGl2ZVtsPWsudHlwZV0pYnJlYWs7aWYoKG09ZC5maW5kW2xdKSYmKGY9bShrLm1hdGNoZXNbMF0ucmVwbGFjZShiYSxjYSksXy50ZXN0KGpbMF0udHlwZSkmJm9hKGIucGFyZW50Tm9kZSl8fGIpKSl7aWYoai5zcGxpY2UoaSwxKSxhPWYubGVuZ3RoJiZxYShqKSwhYSlyZXR1cm4gSC5hcHBseShlLGYpLGU7YnJlYWt9fX1yZXR1cm4obnx8aChhLG8pKShmLGIsIXAsZSwhYnx8Xy50ZXN0KGEpJiZvYShiLnBhcmVudE5vZGUpfHxiKSxlfSxjLnNvcnRTdGFibGU9dS5zcGxpdCgiIikuc29ydChCKS5qb2luKCIiKT09PXUsYy5kZXRlY3REdXBsaWNhdGVzPSEhbCxtKCksYy5zb3J0RGV0YWNoZWQ9aWEoZnVuY3Rpb24oYSl7cmV0dXJuIDEmYS5jb21wYXJlRG9jdW1lbnRQb3NpdGlvbihuLmNyZWF0ZUVsZW1lbnQoImRpdiIpKX0pLGlhKGZ1bmN0aW9uKGEpe3JldHVybiBhLmlubmVySFRNTD0iPGEgaHJlZj0nIyc+PC9hPiIsIiMiPT09YS5maXJzdENoaWxkLmdldEF0dHJpYnV0ZSgiaHJlZiIpfSl8fGphKCJ0eXBlfGhyZWZ8aGVpZ2h0fHdpZHRoIixmdW5jdGlvbihhLGIsYyl7cmV0dXJuIGM/dm9pZCAwOmEuZ2V0QXR0cmlidXRlKGIsInR5cGUiPT09Yi50b0xvd2VyQ2FzZSgpPzE6Mil9KSxjLmF0dHJpYnV0ZXMmJmlhKGZ1bmN0aW9uKGEpe3JldHVybiBhLmlubmVySFRNTD0iPGlucHV0Lz4iLGEuZmlyc3RDaGlsZC5zZXRBdHRyaWJ1dGUoInZhbHVlIiwiIiksIiI9PT1hLmZpcnN0Q2hpbGQuZ2V0QXR0cmlidXRlKCJ2YWx1ZSIpfSl8fGphKCJ2YWx1ZSIsZnVuY3Rpb24oYSxiLGMpe3JldHVybiBjfHwiaW5wdXQiIT09YS5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpP3ZvaWQgMDphLmRlZmF1bHRWYWx1ZX0pLGlhKGZ1bmN0aW9uKGEpe3JldHVybiBudWxsPT1hLmdldEF0dHJpYnV0ZSgiZGlzYWJsZWQiKX0pfHxqYShLLGZ1bmN0aW9uKGEsYixjKXt2YXIgZDtyZXR1cm4gYz92b2lkIDA6YVtiXT09PSEwP2IudG9Mb3dlckNhc2UoKTooZD1hLmdldEF0dHJpYnV0ZU5vZGUoYikpJiZkLnNwZWNpZmllZD9kLnZhbHVlOm51bGx9KSxmYX0oYSk7bi5maW5kPXQsbi5leHByPXQuc2VsZWN0b3JzLG4uZXhwclsiOiJdPW4uZXhwci5wc2V1ZG9zLG4udW5pcXVlU29ydD1uLnVuaXF1ZT10LnVuaXF1ZVNvcnQsbi50ZXh0PXQuZ2V0VGV4dCxuLmlzWE1MRG9jPXQuaXNYTUwsbi5jb250YWlucz10LmNvbnRhaW5zO3ZhciB1PWZ1bmN0aW9uKGEsYixjKXt2YXIgZD1bXSxlPXZvaWQgMCE9PWM7d2hpbGUoKGE9YVtiXSkmJjkhPT1hLm5vZGVUeXBlKWlmKDE9PT1hLm5vZGVUeXBlKXtpZihlJiZuKGEpLmlzKGMpKWJyZWFrO2QucHVzaChhKX1yZXR1cm4gZH0sdj1mdW5jdGlvbihhLGIpe2Zvcih2YXIgYz1bXTthO2E9YS5uZXh0U2libGluZykxPT09YS5ub2RlVHlwZSYmYSE9PWImJmMucHVzaChhKTtyZXR1cm4gY30sdz1uLmV4cHIubWF0Y2gubmVlZHNDb250ZXh0LHg9L148KFtcdy1dKylccypcLz8+KD86PFwvXDE+fCkkLyx5PS9eLlteOiNcW1wuLF0qJC87ZnVuY3Rpb24geihhLGIsYyl7aWYobi5pc0Z1bmN0aW9uKGIpKXJldHVybiBuLmdyZXAoYSxmdW5jdGlvbihhLGQpe3JldHVybiEhYi5jYWxsKGEsZCxhKSE9PWN9KTtpZihiLm5vZGVUeXBlKXJldHVybiBuLmdyZXAoYSxmdW5jdGlvbihhKXtyZXR1cm4gYT09PWIhPT1jfSk7aWYoInN0cmluZyI9PXR5cGVvZiBiKXtpZih5LnRlc3QoYikpcmV0dXJuIG4uZmlsdGVyKGIsYSxjKTtiPW4uZmlsdGVyKGIsYSl9cmV0dXJuIG4uZ3JlcChhLGZ1bmN0aW9uKGEpe3JldHVybiBuLmluQXJyYXkoYSxiKT4tMSE9PWN9KX1uLmZpbHRlcj1mdW5jdGlvbihhLGIsYyl7dmFyIGQ9YlswXTtyZXR1cm4gYyYmKGE9Ijpub3QoIithKyIpIiksMT09PWIubGVuZ3RoJiYxPT09ZC5ub2RlVHlwZT9uLmZpbmQubWF0Y2hlc1NlbGVjdG9yKGQsYSk/W2RdOltdOm4uZmluZC5tYXRjaGVzKGEsbi5ncmVwKGIsZnVuY3Rpb24oYSl7cmV0dXJuIDE9PT1hLm5vZGVUeXBlfSkpfSxuLmZuLmV4dGVuZCh7ZmluZDpmdW5jdGlvbihhKXt2YXIgYixjPVtdLGQ9dGhpcyxlPWQubGVuZ3RoO2lmKCJzdHJpbmciIT10eXBlb2YgYSlyZXR1cm4gdGhpcy5wdXNoU3RhY2sobihhKS5maWx0ZXIoZnVuY3Rpb24oKXtmb3IoYj0wO2U+YjtiKyspaWYobi5jb250YWlucyhkW2JdLHRoaXMpKXJldHVybiEwfSkpO2ZvcihiPTA7ZT5iO2IrKyluLmZpbmQoYSxkW2JdLGMpO3JldHVybiBjPXRoaXMucHVzaFN0YWNrKGU+MT9uLnVuaXF1ZShjKTpjKSxjLnNlbGVjdG9yPXRoaXMuc2VsZWN0b3I/dGhpcy5zZWxlY3RvcisiICIrYTphLGN9LGZpbHRlcjpmdW5jdGlvbihhKXtyZXR1cm4gdGhpcy5wdXNoU3RhY2soeih0aGlzLGF8fFtdLCExKSl9LG5vdDpmdW5jdGlvbihhKXtyZXR1cm4gdGhpcy5wdXNoU3RhY2soeih0aGlzLGF8fFtdLCEwKSl9LGlzOmZ1bmN0aW9uKGEpe3JldHVybiEheih0aGlzLCJzdHJpbmciPT10eXBlb2YgYSYmdy50ZXN0KGEpP24oYSk6YXx8W10sITEpLmxlbmd0aH19KTt2YXIgQSxCPS9eKD86XHMqKDxbXHdcV10rPilbXj5dKnwjKFtcdy1dKikpJC8sQz1uLmZuLmluaXQ9ZnVuY3Rpb24oYSxiLGMpe3ZhciBlLGY7aWYoIWEpcmV0dXJuIHRoaXM7aWYoYz1jfHxBLCJzdHJpbmciPT10eXBlb2YgYSl7aWYoZT0iPCI9PT1hLmNoYXJBdCgwKSYmIj4iPT09YS5jaGFyQXQoYS5sZW5ndGgtMSkmJmEubGVuZ3RoPj0zP1tudWxsLGEsbnVsbF06Qi5leGVjKGEpLCFlfHwhZVsxXSYmYilyZXR1cm4hYnx8Yi5qcXVlcnk/KGJ8fGMpLmZpbmQoYSk6dGhpcy5jb25zdHJ1Y3RvcihiKS5maW5kKGEpO2lmKGVbMV0pe2lmKGI9YiBpbnN0YW5jZW9mIG4/YlswXTpiLG4ubWVyZ2UodGhpcyxuLnBhcnNlSFRNTChlWzFdLGImJmIubm9kZVR5cGU/Yi5vd25lckRvY3VtZW50fHxiOmQsITApKSx4LnRlc3QoZVsxXSkmJm4uaXNQbGFpbk9iamVjdChiKSlmb3IoZSBpbiBiKW4uaXNGdW5jdGlvbih0aGlzW2VdKT90aGlzW2VdKGJbZV0pOnRoaXMuYXR0cihlLGJbZV0pO3JldHVybiB0aGlzfWlmKGY9ZC5nZXRFbGVtZW50QnlJZChlWzJdKSxmJiZmLnBhcmVudE5vZGUpe2lmKGYuaWQhPT1lWzJdKXJldHVybiBBLmZpbmQoYSk7dGhpcy5sZW5ndGg9MSx0aGlzWzBdPWZ9cmV0dXJuIHRoaXMuY29udGV4dD1kLHRoaXMuc2VsZWN0b3I9YSx0aGlzfXJldHVybiBhLm5vZGVUeXBlPyh0aGlzLmNvbnRleHQ9dGhpc1swXT1hLHRoaXMubGVuZ3RoPTEsdGhpcyk6bi5pc0Z1bmN0aW9uKGEpPyJ1bmRlZmluZWQiIT10eXBlb2YgYy5yZWFkeT9jLnJlYWR5KGEpOmEobik6KHZvaWQgMCE9PWEuc2VsZWN0b3ImJih0aGlzLnNlbGVjdG9yPWEuc2VsZWN0b3IsdGhpcy5jb250ZXh0PWEuY29udGV4dCksbi5tYWtlQXJyYXkoYSx0aGlzKSl9O0MucHJvdG90eXBlPW4uZm4sQT1uKGQpO3ZhciBEPS9eKD86cGFyZW50c3xwcmV2KD86VW50aWx8QWxsKSkvLEU9e2NoaWxkcmVuOiEwLGNvbnRlbnRzOiEwLG5leHQ6ITAscHJldjohMH07bi5mbi5leHRlbmQoe2hhczpmdW5jdGlvbihhKXt2YXIgYixjPW4oYSx0aGlzKSxkPWMubGVuZ3RoO3JldHVybiB0aGlzLmZpbHRlcihmdW5jdGlvbigpe2ZvcihiPTA7ZD5iO2IrKylpZihuLmNvbnRhaW5zKHRoaXMsY1tiXSkpcmV0dXJuITB9KX0sY2xvc2VzdDpmdW5jdGlvbihhLGIpe2Zvcih2YXIgYyxkPTAsZT10aGlzLmxlbmd0aCxmPVtdLGc9dy50ZXN0KGEpfHwic3RyaW5nIiE9dHlwZW9mIGE/bihhLGJ8fHRoaXMuY29udGV4dCk6MDtlPmQ7ZCsrKWZvcihjPXRoaXNbZF07YyYmYyE9PWI7Yz1jLnBhcmVudE5vZGUpaWYoYy5ub2RlVHlwZTwxMSYmKGc/Zy5pbmRleChjKT4tMToxPT09Yy5ub2RlVHlwZSYmbi5maW5kLm1hdGNoZXNTZWxlY3RvcihjLGEpKSl7Zi5wdXNoKGMpO2JyZWFrfXJldHVybiB0aGlzLnB1c2hTdGFjayhmLmxlbmd0aD4xP24udW5pcXVlU29ydChmKTpmKX0saW5kZXg6ZnVuY3Rpb24oYSl7cmV0dXJuIGE/InN0cmluZyI9PXR5cGVvZiBhP24uaW5BcnJheSh0aGlzWzBdLG4oYSkpOm4uaW5BcnJheShhLmpxdWVyeT9hWzBdOmEsdGhpcyk6dGhpc1swXSYmdGhpc1swXS5wYXJlbnROb2RlP3RoaXMuZmlyc3QoKS5wcmV2QWxsKCkubGVuZ3RoOi0xfSxhZGQ6ZnVuY3Rpb24oYSxiKXtyZXR1cm4gdGhpcy5wdXNoU3RhY2sobi51bmlxdWVTb3J0KG4ubWVyZ2UodGhpcy5nZXQoKSxuKGEsYikpKSl9LGFkZEJhY2s6ZnVuY3Rpb24oYSl7cmV0dXJuIHRoaXMuYWRkKG51bGw9PWE/dGhpcy5wcmV2T2JqZWN0OnRoaXMucHJldk9iamVjdC5maWx0ZXIoYSkpfX0pO2Z1bmN0aW9uIEYoYSxiKXtkbyBhPWFbYl07d2hpbGUoYSYmMSE9PWEubm9kZVR5cGUpO3JldHVybiBhfW4uZWFjaCh7cGFyZW50OmZ1bmN0aW9uKGEpe3ZhciBiPWEucGFyZW50Tm9kZTtyZXR1cm4gYiYmMTEhPT1iLm5vZGVUeXBlP2I6bnVsbH0scGFyZW50czpmdW5jdGlvbihhKXtyZXR1cm4gdShhLCJwYXJlbnROb2RlIil9LHBhcmVudHNVbnRpbDpmdW5jdGlvbihhLGIsYyl7cmV0dXJuIHUoYSwicGFyZW50Tm9kZSIsYyl9LG5leHQ6ZnVuY3Rpb24oYSl7cmV0dXJuIEYoYSwibmV4dFNpYmxpbmciKX0scHJldjpmdW5jdGlvbihhKXtyZXR1cm4gRihhLCJwcmV2aW91c1NpYmxpbmciKX0sbmV4dEFsbDpmdW5jdGlvbihhKXtyZXR1cm4gdShhLCJuZXh0U2libGluZyIpfSxwcmV2QWxsOmZ1bmN0aW9uKGEpe3JldHVybiB1KGEsInByZXZpb3VzU2libGluZyIpfSxuZXh0VW50aWw6ZnVuY3Rpb24oYSxiLGMpe3JldHVybiB1KGEsIm5leHRTaWJsaW5nIixjKX0scHJldlVudGlsOmZ1bmN0aW9uKGEsYixjKXtyZXR1cm4gdShhLCJwcmV2aW91c1NpYmxpbmciLGMpfSxzaWJsaW5nczpmdW5jdGlvbihhKXtyZXR1cm4gdigoYS5wYXJlbnROb2RlfHx7fSkuZmlyc3RDaGlsZCxhKX0sY2hpbGRyZW46ZnVuY3Rpb24oYSl7cmV0dXJuIHYoYS5maXJzdENoaWxkKX0sY29udGVudHM6ZnVuY3Rpb24oYSl7cmV0dXJuIG4ubm9kZU5hbWUoYSwiaWZyYW1lIik/YS5jb250ZW50RG9jdW1lbnR8fGEuY29udGVudFdpbmRvdy5kb2N1bWVudDpuLm1lcmdlKFtdLGEuY2hpbGROb2Rlcyl9fSxmdW5jdGlvbihhLGIpe24uZm5bYV09ZnVuY3Rpb24oYyxkKXt2YXIgZT1uLm1hcCh0aGlzLGIsYyk7cmV0dXJuIlVudGlsIiE9PWEuc2xpY2UoLTUpJiYoZD1jKSxkJiYic3RyaW5nIj09dHlwZW9mIGQmJihlPW4uZmlsdGVyKGQsZSkpLHRoaXMubGVuZ3RoPjEmJihFW2FdfHwoZT1uLnVuaXF1ZVNvcnQoZSkpLEQudGVzdChhKSYmKGU9ZS5yZXZlcnNlKCkpKSx0aGlzLnB1c2hTdGFjayhlKX19KTt2YXIgRz0vXFMrL2c7ZnVuY3Rpb24gSChhKXt2YXIgYj17fTtyZXR1cm4gbi5lYWNoKGEubWF0Y2goRyl8fFtdLGZ1bmN0aW9uKGEsYyl7YltjXT0hMH0pLGJ9bi5DYWxsYmFja3M9ZnVuY3Rpb24oYSl7YT0ic3RyaW5nIj09dHlwZW9mIGE/SChhKTpuLmV4dGVuZCh7fSxhKTt2YXIgYixjLGQsZSxmPVtdLGc9W10saD0tMSxpPWZ1bmN0aW9uKCl7Zm9yKGU9YS5vbmNlLGQ9Yj0hMDtnLmxlbmd0aDtoPS0xKXtjPWcuc2hpZnQoKTt3aGlsZSgrK2g8Zi5sZW5ndGgpZltoXS5hcHBseShjWzBdLGNbMV0pPT09ITEmJmEuc3RvcE9uRmFsc2UmJihoPWYubGVuZ3RoLGM9ITEpfWEubWVtb3J5fHwoYz0hMSksYj0hMSxlJiYoZj1jP1tdOiIiKX0saj17YWRkOmZ1bmN0aW9uKCl7cmV0dXJuIGYmJihjJiYhYiYmKGg9Zi5sZW5ndGgtMSxnLnB1c2goYykpLGZ1bmN0aW9uIGQoYil7bi5lYWNoKGIsZnVuY3Rpb24oYixjKXtuLmlzRnVuY3Rpb24oYyk/YS51bmlxdWUmJmouaGFzKGMpfHxmLnB1c2goYyk6YyYmYy5sZW5ndGgmJiJzdHJpbmciIT09bi50eXBlKGMpJiZkKGMpfSl9KGFyZ3VtZW50cyksYyYmIWImJmkoKSksdGhpc30scmVtb3ZlOmZ1bmN0aW9uKCl7cmV0dXJuIG4uZWFjaChhcmd1bWVudHMsZnVuY3Rpb24oYSxiKXt2YXIgYzt3aGlsZSgoYz1uLmluQXJyYXkoYixmLGMpKT4tMSlmLnNwbGljZShjLDEpLGg+PWMmJmgtLX0pLHRoaXN9LGhhczpmdW5jdGlvbihhKXtyZXR1cm4gYT9uLmluQXJyYXkoYSxmKT4tMTpmLmxlbmd0aD4wfSxlbXB0eTpmdW5jdGlvbigpe3JldHVybiBmJiYoZj1bXSksdGhpc30sZGlzYWJsZTpmdW5jdGlvbigpe3JldHVybiBlPWc9W10sZj1jPSIiLHRoaXN9LGRpc2FibGVkOmZ1bmN0aW9uKCl7cmV0dXJuIWZ9LGxvY2s6ZnVuY3Rpb24oKXtyZXR1cm4gZT0hMCxjfHxqLmRpc2FibGUoKSx0aGlzfSxsb2NrZWQ6ZnVuY3Rpb24oKXtyZXR1cm4hIWV9LGZpcmVXaXRoOmZ1bmN0aW9uKGEsYyl7cmV0dXJuIGV8fChjPWN8fFtdLGM9W2EsYy5zbGljZT9jLnNsaWNlKCk6Y10sZy5wdXNoKGMpLGJ8fGkoKSksdGhpc30sZmlyZTpmdW5jdGlvbigpe3JldHVybiBqLmZpcmVXaXRoKHRoaXMsYXJndW1lbnRzKSx0aGlzfSxmaXJlZDpmdW5jdGlvbigpe3JldHVybiEhZH19O3JldHVybiBqfSxuLmV4dGVuZCh7RGVmZXJyZWQ6ZnVuY3Rpb24oYSl7dmFyIGI9W1sicmVzb2x2ZSIsImRvbmUiLG4uQ2FsbGJhY2tzKCJvbmNlIG1lbW9yeSIpLCJyZXNvbHZlZCJdLFsicmVqZWN0IiwiZmFpbCIsbi5DYWxsYmFja3MoIm9uY2UgbWVtb3J5IiksInJlamVjdGVkIl0sWyJub3RpZnkiLCJwcm9ncmVzcyIsbi5DYWxsYmFja3MoIm1lbW9yeSIpXV0sYz0icGVuZGluZyIsZD17c3RhdGU6ZnVuY3Rpb24oKXtyZXR1cm4gY30sYWx3YXlzOmZ1bmN0aW9uKCl7cmV0dXJuIGUuZG9uZShhcmd1bWVudHMpLmZhaWwoYXJndW1lbnRzKSx0aGlzfSx0aGVuOmZ1bmN0aW9uKCl7dmFyIGE9YXJndW1lbnRzO3JldHVybiBuLkRlZmVycmVkKGZ1bmN0aW9uKGMpe24uZWFjaChiLGZ1bmN0aW9uKGIsZil7dmFyIGc9bi5pc0Z1bmN0aW9uKGFbYl0pJiZhW2JdO2VbZlsxXV0oZnVuY3Rpb24oKXt2YXIgYT1nJiZnLmFwcGx5KHRoaXMsYXJndW1lbnRzKTthJiZuLmlzRnVuY3Rpb24oYS5wcm9taXNlKT9hLnByb21pc2UoKS5wcm9ncmVzcyhjLm5vdGlmeSkuZG9uZShjLnJlc29sdmUpLmZhaWwoYy5yZWplY3QpOmNbZlswXSsiV2l0aCJdKHRoaXM9PT1kP2MucHJvbWlzZSgpOnRoaXMsZz9bYV06YXJndW1lbnRzKX0pfSksYT1udWxsfSkucHJvbWlzZSgpfSxwcm9taXNlOmZ1bmN0aW9uKGEpe3JldHVybiBudWxsIT1hP24uZXh0ZW5kKGEsZCk6ZH19LGU9e307cmV0dXJuIGQucGlwZT1kLnRoZW4sbi5lYWNoKGIsZnVuY3Rpb24oYSxmKXt2YXIgZz1mWzJdLGg9ZlszXTtkW2ZbMV1dPWcuYWRkLGgmJmcuYWRkKGZ1bmN0aW9uKCl7Yz1ofSxiWzFeYV1bMl0uZGlzYWJsZSxiWzJdWzJdLmxvY2spLGVbZlswXV09ZnVuY3Rpb24oKXtyZXR1cm4gZVtmWzBdKyJXaXRoIl0odGhpcz09PWU/ZDp0aGlzLGFyZ3VtZW50cyksdGhpc30sZVtmWzBdKyJXaXRoIl09Zy5maXJlV2l0aH0pLGQucHJvbWlzZShlKSxhJiZhLmNhbGwoZSxlKSxlfSx3aGVuOmZ1bmN0aW9uKGEpe3ZhciBiPTAsYz1lLmNhbGwoYXJndW1lbnRzKSxkPWMubGVuZ3RoLGY9MSE9PWR8fGEmJm4uaXNGdW5jdGlvbihhLnByb21pc2UpP2Q6MCxnPTE9PT1mP2E6bi5EZWZlcnJlZCgpLGg9ZnVuY3Rpb24oYSxiLGMpe3JldHVybiBmdW5jdGlvbihkKXtiW2FdPXRoaXMsY1thXT1hcmd1bWVudHMubGVuZ3RoPjE/ZS5jYWxsKGFyZ3VtZW50cyk6ZCxjPT09aT9nLm5vdGlmeVdpdGgoYixjKTotLWZ8fGcucmVzb2x2ZVdpdGgoYixjKX19LGksaixrO2lmKGQ+MSlmb3IoaT1uZXcgQXJyYXkoZCksaj1uZXcgQXJyYXkoZCksaz1uZXcgQXJyYXkoZCk7ZD5iO2IrKyljW2JdJiZuLmlzRnVuY3Rpb24oY1tiXS5wcm9taXNlKT9jW2JdLnByb21pc2UoKS5wcm9ncmVzcyhoKGIsaixpKSkuZG9uZShoKGIsayxjKSkuZmFpbChnLnJlamVjdCk6LS1mO3JldHVybiBmfHxnLnJlc29sdmVXaXRoKGssYyksZy5wcm9taXNlKCl9fSk7dmFyIEk7bi5mbi5yZWFkeT1mdW5jdGlvbihhKXtyZXR1cm4gbi5yZWFkeS5wcm9taXNlKCkuZG9uZShhKSx0aGlzfSxuLmV4dGVuZCh7aXNSZWFkeTohMSxyZWFkeVdhaXQ6MSxob2xkUmVhZHk6ZnVuY3Rpb24oYSl7YT9uLnJlYWR5V2FpdCsrOm4ucmVhZHkoITApfSxyZWFkeTpmdW5jdGlvbihhKXsoYT09PSEwPy0tbi5yZWFkeVdhaXQ6bi5pc1JlYWR5KXx8KG4uaXNSZWFkeT0hMCxhIT09ITAmJi0tbi5yZWFkeVdhaXQ+MHx8KEkucmVzb2x2ZVdpdGgoZCxbbl0pLG4uZm4udHJpZ2dlckhhbmRsZXImJihuKGQpLnRyaWdnZXJIYW5kbGVyKCJyZWFkeSIpLG4oZCkub2ZmKCJyZWFkeSIpKSkpfX0pO2Z1bmN0aW9uIEooKXtkLmFkZEV2ZW50TGlzdGVuZXI/KGQucmVtb3ZlRXZlbnRMaXN0ZW5lcigiRE9NQ29udGVudExvYWRlZCIsSyksYS5yZW1vdmVFdmVudExpc3RlbmVyKCJsb2FkIixLKSk6KGQuZGV0YWNoRXZlbnQoIm9ucmVhZHlzdGF0ZWNoYW5nZSIsSyksYS5kZXRhY2hFdmVudCgib25sb2FkIixLKSl9ZnVuY3Rpb24gSygpeyhkLmFkZEV2ZW50TGlzdGVuZXJ8fCJsb2FkIj09PWEuZXZlbnQudHlwZXx8ImNvbXBsZXRlIj09PWQucmVhZHlTdGF0ZSkmJihKKCksbi5yZWFkeSgpKX1uLnJlYWR5LnByb21pc2U9ZnVuY3Rpb24oYil7aWYoIUkpaWYoST1uLkRlZmVycmVkKCksImNvbXBsZXRlIj09PWQucmVhZHlTdGF0ZXx8ImxvYWRpbmciIT09ZC5yZWFkeVN0YXRlJiYhZC5kb2N1bWVudEVsZW1lbnQuZG9TY3JvbGwpYS5zZXRUaW1lb3V0KG4ucmVhZHkpO2Vsc2UgaWYoZC5hZGRFdmVudExpc3RlbmVyKWQuYWRkRXZlbnRMaXN0ZW5lcigiRE9NQ29udGVudExvYWRlZCIsSyksYS5hZGRFdmVudExpc3RlbmVyKCJsb2FkIixLKTtlbHNle2QuYXR0YWNoRXZlbnQoIm9ucmVhZHlzdGF0ZWNoYW5nZSIsSyksYS5hdHRhY2hFdmVudCgib25sb2FkIixLKTt2YXIgYz0hMTt0cnl7Yz1udWxsPT1hLmZyYW1lRWxlbWVudCYmZC5kb2N1bWVudEVsZW1lbnR9Y2F0Y2goZSl7fWMmJmMuZG9TY3JvbGwmJiFmdW5jdGlvbiBmKCl7aWYoIW4uaXNSZWFkeSl7dHJ5e2MuZG9TY3JvbGwoImxlZnQiKX1jYXRjaChiKXtyZXR1cm4gYS5zZXRUaW1lb3V0KGYsNTApfUooKSxuLnJlYWR5KCl9fSgpfXJldHVybiBJLnByb21pc2UoYil9LG4ucmVhZHkucHJvbWlzZSgpO3ZhciBMO2ZvcihMIGluIG4obCkpYnJlYWs7bC5vd25GaXJzdD0iMCI9PT1MLGwuaW5saW5lQmxvY2tOZWVkc0xheW91dD0hMSxuKGZ1bmN0aW9uKCl7dmFyIGEsYixjLGU7Yz1kLmdldEVsZW1lbnRzQnlUYWdOYW1lKCJib2R5IilbMF0sYyYmYy5zdHlsZSYmKGI9ZC5jcmVhdGVFbGVtZW50KCJkaXYiKSxlPWQuY3JlYXRlRWxlbWVudCgiZGl2IiksZS5zdHlsZS5jc3NUZXh0PSJwb3NpdGlvbjphYnNvbHV0ZTtib3JkZXI6MDt3aWR0aDowO2hlaWdodDowO3RvcDowO2xlZnQ6LTk5OTlweCIsYy5hcHBlbmRDaGlsZChlKS5hcHBlbmRDaGlsZChiKSwidW5kZWZpbmVkIiE9dHlwZW9mIGIuc3R5bGUuem9vbSYmKGIuc3R5bGUuY3NzVGV4dD0iZGlzcGxheTppbmxpbmU7bWFyZ2luOjA7Ym9yZGVyOjA7cGFkZGluZzoxcHg7d2lkdGg6MXB4O3pvb206MSIsbC5pbmxpbmVCbG9ja05lZWRzTGF5b3V0PWE9Mz09PWIub2Zmc2V0V2lkdGgsYSYmKGMuc3R5bGUuem9vbT0xKSksYy5yZW1vdmVDaGlsZChlKSl9KSxmdW5jdGlvbigpe3ZhciBhPWQuY3JlYXRlRWxlbWVudCgiZGl2Iik7bC5kZWxldGVFeHBhbmRvPSEwO3RyeXtkZWxldGUgYS50ZXN0fWNhdGNoKGIpe2wuZGVsZXRlRXhwYW5kbz0hMX1hPW51bGx9KCk7dmFyIE09ZnVuY3Rpb24oYSl7dmFyIGI9bi5ub0RhdGFbKGEubm9kZU5hbWUrIiAiKS50b0xvd2VyQ2FzZSgpXSxjPSthLm5vZGVUeXBlfHwxO3JldHVybiAxIT09YyYmOSE9PWM/ITE6IWJ8fGIhPT0hMCYmYS5nZXRBdHRyaWJ1dGUoImNsYXNzaWQiKT09PWJ9LE49L14oPzpce1tcd1xXXSpcfXxcW1tcd1xXXSpcXSkkLyxPPS8oW0EtWl0pL2c7ZnVuY3Rpb24gUChhLGIsYyl7aWYodm9pZCAwPT09YyYmMT09PWEubm9kZVR5cGUpe3ZhciBkPSJkYXRhLSIrYi5yZXBsYWNlKE8sIi0kMSIpLnRvTG93ZXJDYXNlKCk7aWYoYz1hLmdldEF0dHJpYnV0ZShkKSwic3RyaW5nIj09dHlwZW9mIGMpe3RyeXtjPSJ0cnVlIj09PWM/ITA6ImZhbHNlIj09PWM/ITE6Im51bGwiPT09Yz9udWxsOitjKyIiPT09Yz8rYzpOLnRlc3QoYyk/bi5wYXJzZUpTT04oYyk6Y31jYXRjaChlKXt9bi5kYXRhKGEsYixjKX1lbHNlIGM9dm9pZCAwOwp9cmV0dXJuIGN9ZnVuY3Rpb24gUShhKXt2YXIgYjtmb3IoYiBpbiBhKWlmKCgiZGF0YSIhPT1ifHwhbi5pc0VtcHR5T2JqZWN0KGFbYl0pKSYmInRvSlNPTiIhPT1iKXJldHVybiExO3JldHVybiEwfWZ1bmN0aW9uIFIoYSxiLGQsZSl7aWYoTShhKSl7dmFyIGYsZyxoPW4uZXhwYW5kbyxpPWEubm9kZVR5cGUsaj1pP24uY2FjaGU6YSxrPWk/YVtoXTphW2hdJiZoO2lmKGsmJmpba10mJihlfHxqW2tdLmRhdGEpfHx2b2lkIDAhPT1kfHwic3RyaW5nIiE9dHlwZW9mIGIpcmV0dXJuIGt8fChrPWk/YVtoXT1jLnBvcCgpfHxuLmd1aWQrKzpoKSxqW2tdfHwoaltrXT1pP3t9Ont0b0pTT046bi5ub29wfSksIm9iamVjdCIhPXR5cGVvZiBiJiYiZnVuY3Rpb24iIT10eXBlb2YgYnx8KGU/altrXT1uLmV4dGVuZChqW2tdLGIpOmpba10uZGF0YT1uLmV4dGVuZChqW2tdLmRhdGEsYikpLGc9altrXSxlfHwoZy5kYXRhfHwoZy5kYXRhPXt9KSxnPWcuZGF0YSksdm9pZCAwIT09ZCYmKGdbbi5jYW1lbENhc2UoYildPWQpLCJzdHJpbmciPT10eXBlb2YgYj8oZj1nW2JdLG51bGw9PWYmJihmPWdbbi5jYW1lbENhc2UoYildKSk6Zj1nLGZ9fWZ1bmN0aW9uIFMoYSxiLGMpe2lmKE0oYSkpe3ZhciBkLGUsZj1hLm5vZGVUeXBlLGc9Zj9uLmNhY2hlOmEsaD1mP2Fbbi5leHBhbmRvXTpuLmV4cGFuZG87aWYoZ1toXSl7aWYoYiYmKGQ9Yz9nW2hdOmdbaF0uZGF0YSkpe24uaXNBcnJheShiKT9iPWIuY29uY2F0KG4ubWFwKGIsbi5jYW1lbENhc2UpKTpiIGluIGQ/Yj1bYl06KGI9bi5jYW1lbENhc2UoYiksYj1iIGluIGQ/W2JdOmIuc3BsaXQoIiAiKSksZT1iLmxlbmd0aDt3aGlsZShlLS0pZGVsZXRlIGRbYltlXV07aWYoYz8hUShkKTohbi5pc0VtcHR5T2JqZWN0KGQpKXJldHVybn0oY3x8KGRlbGV0ZSBnW2hdLmRhdGEsUShnW2hdKSkpJiYoZj9uLmNsZWFuRGF0YShbYV0sITApOmwuZGVsZXRlRXhwYW5kb3x8ZyE9Zy53aW5kb3c/ZGVsZXRlIGdbaF06Z1toXT12b2lkIDApfX19bi5leHRlbmQoe2NhY2hlOnt9LG5vRGF0YTp7ImFwcGxldCAiOiEwLCJlbWJlZCAiOiEwLCJvYmplY3QgIjoiY2xzaWQ6RDI3Q0RCNkUtQUU2RC0xMWNmLTk2QjgtNDQ0NTUzNTQwMDAwIn0saGFzRGF0YTpmdW5jdGlvbihhKXtyZXR1cm4gYT1hLm5vZGVUeXBlP24uY2FjaGVbYVtuLmV4cGFuZG9dXTphW24uZXhwYW5kb10sISFhJiYhUShhKX0sZGF0YTpmdW5jdGlvbihhLGIsYyl7cmV0dXJuIFIoYSxiLGMpfSxyZW1vdmVEYXRhOmZ1bmN0aW9uKGEsYil7cmV0dXJuIFMoYSxiKX0sX2RhdGE6ZnVuY3Rpb24oYSxiLGMpe3JldHVybiBSKGEsYixjLCEwKX0sX3JlbW92ZURhdGE6ZnVuY3Rpb24oYSxiKXtyZXR1cm4gUyhhLGIsITApfX0pLG4uZm4uZXh0ZW5kKHtkYXRhOmZ1bmN0aW9uKGEsYil7dmFyIGMsZCxlLGY9dGhpc1swXSxnPWYmJmYuYXR0cmlidXRlcztpZih2b2lkIDA9PT1hKXtpZih0aGlzLmxlbmd0aCYmKGU9bi5kYXRhKGYpLDE9PT1mLm5vZGVUeXBlJiYhbi5fZGF0YShmLCJwYXJzZWRBdHRycyIpKSl7Yz1nLmxlbmd0aDt3aGlsZShjLS0pZ1tjXSYmKGQ9Z1tjXS5uYW1lLDA9PT1kLmluZGV4T2YoImRhdGEtIikmJihkPW4uY2FtZWxDYXNlKGQuc2xpY2UoNSkpLFAoZixkLGVbZF0pKSk7bi5fZGF0YShmLCJwYXJzZWRBdHRycyIsITApfXJldHVybiBlfXJldHVybiJvYmplY3QiPT10eXBlb2YgYT90aGlzLmVhY2goZnVuY3Rpb24oKXtuLmRhdGEodGhpcyxhKX0pOmFyZ3VtZW50cy5sZW5ndGg+MT90aGlzLmVhY2goZnVuY3Rpb24oKXtuLmRhdGEodGhpcyxhLGIpfSk6Zj9QKGYsYSxuLmRhdGEoZixhKSk6dm9pZCAwfSxyZW1vdmVEYXRhOmZ1bmN0aW9uKGEpe3JldHVybiB0aGlzLmVhY2goZnVuY3Rpb24oKXtuLnJlbW92ZURhdGEodGhpcyxhKX0pfX0pLG4uZXh0ZW5kKHtxdWV1ZTpmdW5jdGlvbihhLGIsYyl7dmFyIGQ7cmV0dXJuIGE/KGI9KGJ8fCJmeCIpKyJxdWV1ZSIsZD1uLl9kYXRhKGEsYiksYyYmKCFkfHxuLmlzQXJyYXkoYyk/ZD1uLl9kYXRhKGEsYixuLm1ha2VBcnJheShjKSk6ZC5wdXNoKGMpKSxkfHxbXSk6dm9pZCAwfSxkZXF1ZXVlOmZ1bmN0aW9uKGEsYil7Yj1ifHwiZngiO3ZhciBjPW4ucXVldWUoYSxiKSxkPWMubGVuZ3RoLGU9Yy5zaGlmdCgpLGY9bi5fcXVldWVIb29rcyhhLGIpLGc9ZnVuY3Rpb24oKXtuLmRlcXVldWUoYSxiKX07ImlucHJvZ3Jlc3MiPT09ZSYmKGU9Yy5zaGlmdCgpLGQtLSksZSYmKCJmeCI9PT1iJiZjLnVuc2hpZnQoImlucHJvZ3Jlc3MiKSxkZWxldGUgZi5zdG9wLGUuY2FsbChhLGcsZikpLCFkJiZmJiZmLmVtcHR5LmZpcmUoKX0sX3F1ZXVlSG9va3M6ZnVuY3Rpb24oYSxiKXt2YXIgYz1iKyJxdWV1ZUhvb2tzIjtyZXR1cm4gbi5fZGF0YShhLGMpfHxuLl9kYXRhKGEsYyx7ZW1wdHk6bi5DYWxsYmFja3MoIm9uY2UgbWVtb3J5IikuYWRkKGZ1bmN0aW9uKCl7bi5fcmVtb3ZlRGF0YShhLGIrInF1ZXVlIiksbi5fcmVtb3ZlRGF0YShhLGMpfSl9KX19KSxuLmZuLmV4dGVuZCh7cXVldWU6ZnVuY3Rpb24oYSxiKXt2YXIgYz0yO3JldHVybiJzdHJpbmciIT10eXBlb2YgYSYmKGI9YSxhPSJmeCIsYy0tKSxhcmd1bWVudHMubGVuZ3RoPGM/bi5xdWV1ZSh0aGlzWzBdLGEpOnZvaWQgMD09PWI/dGhpczp0aGlzLmVhY2goZnVuY3Rpb24oKXt2YXIgYz1uLnF1ZXVlKHRoaXMsYSxiKTtuLl9xdWV1ZUhvb2tzKHRoaXMsYSksImZ4Ij09PWEmJiJpbnByb2dyZXNzIiE9PWNbMF0mJm4uZGVxdWV1ZSh0aGlzLGEpfSl9LGRlcXVldWU6ZnVuY3Rpb24oYSl7cmV0dXJuIHRoaXMuZWFjaChmdW5jdGlvbigpe24uZGVxdWV1ZSh0aGlzLGEpfSl9LGNsZWFyUXVldWU6ZnVuY3Rpb24oYSl7cmV0dXJuIHRoaXMucXVldWUoYXx8ImZ4IixbXSl9LHByb21pc2U6ZnVuY3Rpb24oYSxiKXt2YXIgYyxkPTEsZT1uLkRlZmVycmVkKCksZj10aGlzLGc9dGhpcy5sZW5ndGgsaD1mdW5jdGlvbigpey0tZHx8ZS5yZXNvbHZlV2l0aChmLFtmXSl9OyJzdHJpbmciIT10eXBlb2YgYSYmKGI9YSxhPXZvaWQgMCksYT1hfHwiZngiO3doaWxlKGctLSljPW4uX2RhdGEoZltnXSxhKyJxdWV1ZUhvb2tzIiksYyYmYy5lbXB0eSYmKGQrKyxjLmVtcHR5LmFkZChoKSk7cmV0dXJuIGgoKSxlLnByb21pc2UoYil9fSksZnVuY3Rpb24oKXt2YXIgYTtsLnNocmlua1dyYXBCbG9ja3M9ZnVuY3Rpb24oKXtpZihudWxsIT1hKXJldHVybiBhO2E9ITE7dmFyIGIsYyxlO3JldHVybiBjPWQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoImJvZHkiKVswXSxjJiZjLnN0eWxlPyhiPWQuY3JlYXRlRWxlbWVudCgiZGl2IiksZT1kLmNyZWF0ZUVsZW1lbnQoImRpdiIpLGUuc3R5bGUuY3NzVGV4dD0icG9zaXRpb246YWJzb2x1dGU7Ym9yZGVyOjA7d2lkdGg6MDtoZWlnaHQ6MDt0b3A6MDtsZWZ0Oi05OTk5cHgiLGMuYXBwZW5kQ2hpbGQoZSkuYXBwZW5kQ2hpbGQoYiksInVuZGVmaW5lZCIhPXR5cGVvZiBiLnN0eWxlLnpvb20mJihiLnN0eWxlLmNzc1RleHQ9Ii13ZWJraXQtYm94LXNpemluZzpjb250ZW50LWJveDstbW96LWJveC1zaXppbmc6Y29udGVudC1ib3g7Ym94LXNpemluZzpjb250ZW50LWJveDtkaXNwbGF5OmJsb2NrO21hcmdpbjowO2JvcmRlcjowO3BhZGRpbmc6MXB4O3dpZHRoOjFweDt6b29tOjEiLGIuYXBwZW5kQ2hpbGQoZC5jcmVhdGVFbGVtZW50KCJkaXYiKSkuc3R5bGUud2lkdGg9IjVweCIsYT0zIT09Yi5vZmZzZXRXaWR0aCksYy5yZW1vdmVDaGlsZChlKSxhKTp2b2lkIDB9fSgpO3ZhciBUPS9bKy1dPyg/OlxkKlwufClcZCsoPzpbZUVdWystXT9cZCt8KS8uc291cmNlLFU9bmV3IFJlZ0V4cCgiXig/OihbKy1dKT18KSgiK1QrIikoW2EteiVdKikkIiwiaSIpLFY9WyJUb3AiLCJSaWdodCIsIkJvdHRvbSIsIkxlZnQiXSxXPWZ1bmN0aW9uKGEsYil7cmV0dXJuIGE9Ynx8YSwibm9uZSI9PT1uLmNzcyhhLCJkaXNwbGF5Iil8fCFuLmNvbnRhaW5zKGEub3duZXJEb2N1bWVudCxhKX07ZnVuY3Rpb24gWChhLGIsYyxkKXt2YXIgZSxmPTEsZz0yMCxoPWQ/ZnVuY3Rpb24oKXtyZXR1cm4gZC5jdXIoKX06ZnVuY3Rpb24oKXtyZXR1cm4gbi5jc3MoYSxiLCIiKX0saT1oKCksaj1jJiZjWzNdfHwobi5jc3NOdW1iZXJbYl0/IiI6InB4Iiksaz0obi5jc3NOdW1iZXJbYl18fCJweCIhPT1qJiYraSkmJlUuZXhlYyhuLmNzcyhhLGIpKTtpZihrJiZrWzNdIT09ail7aj1qfHxrWzNdLGM9Y3x8W10saz0raXx8MTtkbyBmPWZ8fCIuNSIsay89ZixuLnN0eWxlKGEsYixrK2opO3doaWxlKGYhPT0oZj1oKCkvaSkmJjEhPT1mJiYtLWcpfXJldHVybiBjJiYoaz0ra3x8K2l8fDAsZT1jWzFdP2srKGNbMV0rMSkqY1syXTorY1syXSxkJiYoZC51bml0PWosZC5zdGFydD1rLGQuZW5kPWUpKSxlfXZhciBZPWZ1bmN0aW9uKGEsYixjLGQsZSxmLGcpe3ZhciBoPTAsaT1hLmxlbmd0aCxqPW51bGw9PWM7aWYoIm9iamVjdCI9PT1uLnR5cGUoYykpe2U9ITA7Zm9yKGggaW4gYylZKGEsYixoLGNbaF0sITAsZixnKX1lbHNlIGlmKHZvaWQgMCE9PWQmJihlPSEwLG4uaXNGdW5jdGlvbihkKXx8KGc9ITApLGomJihnPyhiLmNhbGwoYSxkKSxiPW51bGwpOihqPWIsYj1mdW5jdGlvbihhLGIsYyl7cmV0dXJuIGouY2FsbChuKGEpLGMpfSkpLGIpKWZvcig7aT5oO2grKyliKGFbaF0sYyxnP2Q6ZC5jYWxsKGFbaF0saCxiKGFbaF0sYykpKTtyZXR1cm4gZT9hOmo/Yi5jYWxsKGEpOmk/YihhWzBdLGMpOmZ9LFo9L14oPzpjaGVja2JveHxyYWRpbykkL2ksJD0vPChbXHc6LV0rKS8sXz0vXiR8XC8oPzpqYXZhfGVjbWEpc2NyaXB0L2ksYWE9L15ccysvLGJhPSJhYmJyfGFydGljbGV8YXNpZGV8YXVkaW98YmRpfGNhbnZhc3xkYXRhfGRhdGFsaXN0fGRldGFpbHN8ZGlhbG9nfGZpZ2NhcHRpb258ZmlndXJlfGZvb3RlcnxoZWFkZXJ8aGdyb3VwfG1haW58bWFya3xtZXRlcnxuYXZ8b3V0cHV0fHBpY3R1cmV8cHJvZ3Jlc3N8c2VjdGlvbnxzdW1tYXJ5fHRlbXBsYXRlfHRpbWV8dmlkZW8iO2Z1bmN0aW9uIGNhKGEpe3ZhciBiPWJhLnNwbGl0KCJ8IiksYz1hLmNyZWF0ZURvY3VtZW50RnJhZ21lbnQoKTtpZihjLmNyZWF0ZUVsZW1lbnQpd2hpbGUoYi5sZW5ndGgpYy5jcmVhdGVFbGVtZW50KGIucG9wKCkpO3JldHVybiBjfSFmdW5jdGlvbigpe3ZhciBhPWQuY3JlYXRlRWxlbWVudCgiZGl2IiksYj1kLmNyZWF0ZURvY3VtZW50RnJhZ21lbnQoKSxjPWQuY3JlYXRlRWxlbWVudCgiaW5wdXQiKTthLmlubmVySFRNTD0iICA8bGluay8+PHRhYmxlPjwvdGFibGU+PGEgaHJlZj0nL2EnPmE8L2E+PGlucHV0IHR5cGU9J2NoZWNrYm94Jy8+IixsLmxlYWRpbmdXaGl0ZXNwYWNlPTM9PT1hLmZpcnN0Q2hpbGQubm9kZVR5cGUsbC50Ym9keT0hYS5nZXRFbGVtZW50c0J5VGFnTmFtZSgidGJvZHkiKS5sZW5ndGgsbC5odG1sU2VyaWFsaXplPSEhYS5nZXRFbGVtZW50c0J5VGFnTmFtZSgibGluayIpLmxlbmd0aCxsLmh0bWw1Q2xvbmU9Ijw6bmF2PjwvOm5hdj4iIT09ZC5jcmVhdGVFbGVtZW50KCJuYXYiKS5jbG9uZU5vZGUoITApLm91dGVySFRNTCxjLnR5cGU9ImNoZWNrYm94IixjLmNoZWNrZWQ9ITAsYi5hcHBlbmRDaGlsZChjKSxsLmFwcGVuZENoZWNrZWQ9Yy5jaGVja2VkLGEuaW5uZXJIVE1MPSI8dGV4dGFyZWE+eDwvdGV4dGFyZWE+IixsLm5vQ2xvbmVDaGVja2VkPSEhYS5jbG9uZU5vZGUoITApLmxhc3RDaGlsZC5kZWZhdWx0VmFsdWUsYi5hcHBlbmRDaGlsZChhKSxjPWQuY3JlYXRlRWxlbWVudCgiaW5wdXQiKSxjLnNldEF0dHJpYnV0ZSgidHlwZSIsInJhZGlvIiksYy5zZXRBdHRyaWJ1dGUoImNoZWNrZWQiLCJjaGVja2VkIiksYy5zZXRBdHRyaWJ1dGUoIm5hbWUiLCJ0IiksYS5hcHBlbmRDaGlsZChjKSxsLmNoZWNrQ2xvbmU9YS5jbG9uZU5vZGUoITApLmNsb25lTm9kZSghMCkubGFzdENoaWxkLmNoZWNrZWQsbC5ub0Nsb25lRXZlbnQ9ISFhLmFkZEV2ZW50TGlzdGVuZXIsYVtuLmV4cGFuZG9dPTEsbC5hdHRyaWJ1dGVzPSFhLmdldEF0dHJpYnV0ZShuLmV4cGFuZG8pfSgpO3ZhciBkYT17b3B0aW9uOlsxLCI8c2VsZWN0IG11bHRpcGxlPSdtdWx0aXBsZSc+IiwiPC9zZWxlY3Q+Il0sbGVnZW5kOlsxLCI8ZmllbGRzZXQ+IiwiPC9maWVsZHNldD4iXSxhcmVhOlsxLCI8bWFwPiIsIjwvbWFwPiJdLHBhcmFtOlsxLCI8b2JqZWN0PiIsIjwvb2JqZWN0PiJdLHRoZWFkOlsxLCI8dGFibGU+IiwiPC90YWJsZT4iXSx0cjpbMiwiPHRhYmxlPjx0Ym9keT4iLCI8L3Rib2R5PjwvdGFibGU+Il0sY29sOlsyLCI8dGFibGU+PHRib2R5PjwvdGJvZHk+PGNvbGdyb3VwPiIsIjwvY29sZ3JvdXA+PC90YWJsZT4iXSx0ZDpbMywiPHRhYmxlPjx0Ym9keT48dHI+IiwiPC90cj48L3Rib2R5PjwvdGFibGU+Il0sX2RlZmF1bHQ6bC5odG1sU2VyaWFsaXplP1swLCIiLCIiXTpbMSwiWDxkaXY+IiwiPC9kaXY+Il19O2RhLm9wdGdyb3VwPWRhLm9wdGlvbixkYS50Ym9keT1kYS50Zm9vdD1kYS5jb2xncm91cD1kYS5jYXB0aW9uPWRhLnRoZWFkLGRhLnRoPWRhLnRkO2Z1bmN0aW9uIGVhKGEsYil7dmFyIGMsZCxlPTAsZj0idW5kZWZpbmVkIiE9dHlwZW9mIGEuZ2V0RWxlbWVudHNCeVRhZ05hbWU/YS5nZXRFbGVtZW50c0J5VGFnTmFtZShifHwiKiIpOiJ1bmRlZmluZWQiIT10eXBlb2YgYS5xdWVyeVNlbGVjdG9yQWxsP2EucXVlcnlTZWxlY3RvckFsbChifHwiKiIpOnZvaWQgMDtpZighZilmb3IoZj1bXSxjPWEuY2hpbGROb2Rlc3x8YTtudWxsIT0oZD1jW2VdKTtlKyspIWJ8fG4ubm9kZU5hbWUoZCxiKT9mLnB1c2goZCk6bi5tZXJnZShmLGVhKGQsYikpO3JldHVybiB2b2lkIDA9PT1ifHxiJiZuLm5vZGVOYW1lKGEsYik/bi5tZXJnZShbYV0sZik6Zn1mdW5jdGlvbiBmYShhLGIpe2Zvcih2YXIgYyxkPTA7bnVsbCE9KGM9YVtkXSk7ZCsrKW4uX2RhdGEoYywiZ2xvYmFsRXZhbCIsIWJ8fG4uX2RhdGEoYltkXSwiZ2xvYmFsRXZhbCIpKX12YXIgZ2E9Lzx8JiM/XHcrOy8saGE9Lzx0Ym9keS9pO2Z1bmN0aW9uIGlhKGEpe1oudGVzdChhLnR5cGUpJiYoYS5kZWZhdWx0Q2hlY2tlZD1hLmNoZWNrZWQpfWZ1bmN0aW9uIGphKGEsYixjLGQsZSl7Zm9yKHZhciBmLGcsaCxpLGosayxtLG89YS5sZW5ndGgscD1jYShiKSxxPVtdLHI9MDtvPnI7cisrKWlmKGc9YVtyXSxnfHwwPT09ZylpZigib2JqZWN0Ij09PW4udHlwZShnKSluLm1lcmdlKHEsZy5ub2RlVHlwZT9bZ106Zyk7ZWxzZSBpZihnYS50ZXN0KGcpKXtpPWl8fHAuYXBwZW5kQ2hpbGQoYi5jcmVhdGVFbGVtZW50KCJkaXYiKSksaj0oJC5leGVjKGcpfHxbIiIsIiJdKVsxXS50b0xvd2VyQ2FzZSgpLG09ZGFbal18fGRhLl9kZWZhdWx0LGkuaW5uZXJIVE1MPW1bMV0rbi5odG1sUHJlZmlsdGVyKGcpK21bMl0sZj1tWzBdO3doaWxlKGYtLSlpPWkubGFzdENoaWxkO2lmKCFsLmxlYWRpbmdXaGl0ZXNwYWNlJiZhYS50ZXN0KGcpJiZxLnB1c2goYi5jcmVhdGVUZXh0Tm9kZShhYS5leGVjKGcpWzBdKSksIWwudGJvZHkpe2c9InRhYmxlIiE9PWp8fGhhLnRlc3QoZyk/Ijx0YWJsZT4iIT09bVsxXXx8aGEudGVzdChnKT8wOmk6aS5maXJzdENoaWxkLGY9ZyYmZy5jaGlsZE5vZGVzLmxlbmd0aDt3aGlsZShmLS0pbi5ub2RlTmFtZShrPWcuY2hpbGROb2Rlc1tmXSwidGJvZHkiKSYmIWsuY2hpbGROb2Rlcy5sZW5ndGgmJmcucmVtb3ZlQ2hpbGQoayl9bi5tZXJnZShxLGkuY2hpbGROb2RlcyksaS50ZXh0Q29udGVudD0iIjt3aGlsZShpLmZpcnN0Q2hpbGQpaS5yZW1vdmVDaGlsZChpLmZpcnN0Q2hpbGQpO2k9cC5sYXN0Q2hpbGR9ZWxzZSBxLnB1c2goYi5jcmVhdGVUZXh0Tm9kZShnKSk7aSYmcC5yZW1vdmVDaGlsZChpKSxsLmFwcGVuZENoZWNrZWR8fG4uZ3JlcChlYShxLCJpbnB1dCIpLGlhKSxyPTA7d2hpbGUoZz1xW3IrK10paWYoZCYmbi5pbkFycmF5KGcsZCk+LTEpZSYmZS5wdXNoKGcpO2Vsc2UgaWYoaD1uLmNvbnRhaW5zKGcub3duZXJEb2N1bWVudCxnKSxpPWVhKHAuYXBwZW5kQ2hpbGQoZyksInNjcmlwdCIpLGgmJmZhKGkpLGMpe2Y9MDt3aGlsZShnPWlbZisrXSlfLnRlc3QoZy50eXBlfHwiIikmJmMucHVzaChnKX1yZXR1cm4gaT1udWxsLHB9IWZ1bmN0aW9uKCl7dmFyIGIsYyxlPWQuY3JlYXRlRWxlbWVudCgiZGl2Iik7Zm9yKGIgaW57c3VibWl0OiEwLGNoYW5nZTohMCxmb2N1c2luOiEwfSljPSJvbiIrYiwobFtiXT1jIGluIGEpfHwoZS5zZXRBdHRyaWJ1dGUoYywidCIpLGxbYl09ZS5hdHRyaWJ1dGVzW2NdLmV4cGFuZG89PT0hMSk7ZT1udWxsfSgpO3ZhciBrYT0vXig/OmlucHV0fHNlbGVjdHx0ZXh0YXJlYSkkL2ksbGE9L15rZXkvLG1hPS9eKD86bW91c2V8cG9pbnRlcnxjb250ZXh0bWVudXxkcmFnfGRyb3ApfGNsaWNrLyxuYT0vXig/OmZvY3VzaW5mb2N1c3xmb2N1c291dGJsdXIpJC8sb2E9L14oW14uXSopKD86XC4oLispfCkvO2Z1bmN0aW9uIHBhKCl7cmV0dXJuITB9ZnVuY3Rpb24gcWEoKXtyZXR1cm4hMX1mdW5jdGlvbiByYSgpe3RyeXtyZXR1cm4gZC5hY3RpdmVFbGVtZW50fWNhdGNoKGEpe319ZnVuY3Rpb24gc2EoYSxiLGMsZCxlLGYpe3ZhciBnLGg7aWYoIm9iamVjdCI9PXR5cGVvZiBiKXsic3RyaW5nIiE9dHlwZW9mIGMmJihkPWR8fGMsYz12b2lkIDApO2ZvcihoIGluIGIpc2EoYSxoLGMsZCxiW2hdLGYpO3JldHVybiBhfWlmKG51bGw9PWQmJm51bGw9PWU/KGU9YyxkPWM9dm9pZCAwKTpudWxsPT1lJiYoInN0cmluZyI9PXR5cGVvZiBjPyhlPWQsZD12b2lkIDApOihlPWQsZD1jLGM9dm9pZCAwKSksZT09PSExKWU9cWE7ZWxzZSBpZighZSlyZXR1cm4gYTtyZXR1cm4gMT09PWYmJihnPWUsZT1mdW5jdGlvbihhKXtyZXR1cm4gbigpLm9mZihhKSxnLmFwcGx5KHRoaXMsYXJndW1lbnRzKX0sZS5ndWlkPWcuZ3VpZHx8KGcuZ3VpZD1uLmd1aWQrKykpLGEuZWFjaChmdW5jdGlvbigpe24uZXZlbnQuYWRkKHRoaXMsYixlLGQsYyl9KX1uLmV2ZW50PXtnbG9iYWw6e30sYWRkOmZ1bmN0aW9uKGEsYixjLGQsZSl7dmFyIGYsZyxoLGksaixrLGwsbSxvLHAscSxyPW4uX2RhdGEoYSk7aWYocil7Yy5oYW5kbGVyJiYoaT1jLGM9aS5oYW5kbGVyLGU9aS5zZWxlY3RvciksYy5ndWlkfHwoYy5ndWlkPW4uZ3VpZCsrKSwoZz1yLmV2ZW50cyl8fChnPXIuZXZlbnRzPXt9KSwoaz1yLmhhbmRsZSl8fChrPXIuaGFuZGxlPWZ1bmN0aW9uKGEpe3JldHVybiJ1bmRlZmluZWQiPT10eXBlb2Ygbnx8YSYmbi5ldmVudC50cmlnZ2VyZWQ9PT1hLnR5cGU/dm9pZCAwOm4uZXZlbnQuZGlzcGF0Y2guYXBwbHkoay5lbGVtLGFyZ3VtZW50cyl9LGsuZWxlbT1hKSxiPShifHwiIikubWF0Y2goRyl8fFsiIl0saD1iLmxlbmd0aDt3aGlsZShoLS0pZj1vYS5leGVjKGJbaF0pfHxbXSxvPXE9ZlsxXSxwPShmWzJdfHwiIikuc3BsaXQoIi4iKS5zb3J0KCksbyYmKGo9bi5ldmVudC5zcGVjaWFsW29dfHx7fSxvPShlP2ouZGVsZWdhdGVUeXBlOmouYmluZFR5cGUpfHxvLGo9bi5ldmVudC5zcGVjaWFsW29dfHx7fSxsPW4uZXh0ZW5kKHt0eXBlOm8sb3JpZ1R5cGU6cSxkYXRhOmQsaGFuZGxlcjpjLGd1aWQ6Yy5ndWlkLHNlbGVjdG9yOmUsbmVlZHNDb250ZXh0OmUmJm4uZXhwci5tYXRjaC5uZWVkc0NvbnRleHQudGVzdChlKSxuYW1lc3BhY2U6cC5qb2luKCIuIil9LGkpLChtPWdbb10pfHwobT1nW29dPVtdLG0uZGVsZWdhdGVDb3VudD0wLGouc2V0dXAmJmouc2V0dXAuY2FsbChhLGQscCxrKSE9PSExfHwoYS5hZGRFdmVudExpc3RlbmVyP2EuYWRkRXZlbnRMaXN0ZW5lcihvLGssITEpOmEuYXR0YWNoRXZlbnQmJmEuYXR0YWNoRXZlbnQoIm9uIitvLGspKSksai5hZGQmJihqLmFkZC5jYWxsKGEsbCksbC5oYW5kbGVyLmd1aWR8fChsLmhhbmRsZXIuZ3VpZD1jLmd1aWQpKSxlP20uc3BsaWNlKG0uZGVsZWdhdGVDb3VudCsrLDAsbCk6bS5wdXNoKGwpLG4uZXZlbnQuZ2xvYmFsW29dPSEwKTthPW51bGx9fSxyZW1vdmU6ZnVuY3Rpb24oYSxiLGMsZCxlKXt2YXIgZixnLGgsaSxqLGssbCxtLG8scCxxLHI9bi5oYXNEYXRhKGEpJiZuLl9kYXRhKGEpO2lmKHImJihrPXIuZXZlbnRzKSl7Yj0oYnx8IiIpLm1hdGNoKEcpfHxbIiJdLGo9Yi5sZW5ndGg7d2hpbGUoai0tKWlmKGg9b2EuZXhlYyhiW2pdKXx8W10sbz1xPWhbMV0scD0oaFsyXXx8IiIpLnNwbGl0KCIuIikuc29ydCgpLG8pe2w9bi5ldmVudC5zcGVjaWFsW29dfHx7fSxvPShkP2wuZGVsZWdhdGVUeXBlOmwuYmluZFR5cGUpfHxvLG09a1tvXXx8W10saD1oWzJdJiZuZXcgUmVnRXhwKCIoXnxcXC4pIitwLmpvaW4oIlxcLig/Oi4qXFwufCkiKSsiKFxcLnwkKSIpLGk9Zj1tLmxlbmd0aDt3aGlsZShmLS0pZz1tW2ZdLCFlJiZxIT09Zy5vcmlnVHlwZXx8YyYmYy5ndWlkIT09Zy5ndWlkfHxoJiYhaC50ZXN0KGcubmFtZXNwYWNlKXx8ZCYmZCE9PWcuc2VsZWN0b3ImJigiKioiIT09ZHx8IWcuc2VsZWN0b3IpfHwobS5zcGxpY2UoZiwxKSxnLnNlbGVjdG9yJiZtLmRlbGVnYXRlQ291bnQtLSxsLnJlbW92ZSYmbC5yZW1vdmUuY2FsbChhLGcpKTtpJiYhbS5sZW5ndGgmJihsLnRlYXJkb3duJiZsLnRlYXJkb3duLmNhbGwoYSxwLHIuaGFuZGxlKSE9PSExfHxuLnJlbW92ZUV2ZW50KGEsbyxyLmhhbmRsZSksZGVsZXRlIGtbb10pfWVsc2UgZm9yKG8gaW4gayluLmV2ZW50LnJlbW92ZShhLG8rYltqXSxjLGQsITApO24uaXNFbXB0eU9iamVjdChrKSYmKGRlbGV0ZSByLmhhbmRsZSxuLl9yZW1vdmVEYXRhKGEsImV2ZW50cyIpKX19LHRyaWdnZXI6ZnVuY3Rpb24oYixjLGUsZil7dmFyIGcsaCxpLGosbCxtLG8scD1bZXx8ZF0scT1rLmNhbGwoYiwidHlwZSIpP2IudHlwZTpiLHI9ay5jYWxsKGIsIm5hbWVzcGFjZSIpP2IubmFtZXNwYWNlLnNwbGl0KCIuIik6W107aWYoaT1tPWU9ZXx8ZCwzIT09ZS5ub2RlVHlwZSYmOCE9PWUubm9kZVR5cGUmJiFuYS50ZXN0KHErbi5ldmVudC50cmlnZ2VyZWQpJiYocS5pbmRleE9mKCIuIik+LTEmJihyPXEuc3BsaXQoIi4iKSxxPXIuc2hpZnQoKSxyLnNvcnQoKSksaD1xLmluZGV4T2YoIjoiKTwwJiYib24iK3EsYj1iW24uZXhwYW5kb10/YjpuZXcgbi5FdmVudChxLCJvYmplY3QiPT10eXBlb2YgYiYmYiksYi5pc1RyaWdnZXI9Zj8yOjMsYi5uYW1lc3BhY2U9ci5qb2luKCIuIiksYi5ybmFtZXNwYWNlPWIubmFtZXNwYWNlP25ldyBSZWdFeHAoIihefFxcLikiK3Iuam9pbigiXFwuKD86LipcXC58KSIpKyIoXFwufCQpIik6bnVsbCxiLnJlc3VsdD12b2lkIDAsYi50YXJnZXR8fChiLnRhcmdldD1lKSxjPW51bGw9PWM/W2JdOm4ubWFrZUFycmF5KGMsW2JdKSxsPW4uZXZlbnQuc3BlY2lhbFtxXXx8e30sZnx8IWwudHJpZ2dlcnx8bC50cmlnZ2VyLmFwcGx5KGUsYykhPT0hMSkpe2lmKCFmJiYhbC5ub0J1YmJsZSYmIW4uaXNXaW5kb3coZSkpe2ZvcihqPWwuZGVsZWdhdGVUeXBlfHxxLG5hLnRlc3QoaitxKXx8KGk9aS5wYXJlbnROb2RlKTtpO2k9aS5wYXJlbnROb2RlKXAucHVzaChpKSxtPWk7bT09PShlLm93bmVyRG9jdW1lbnR8fGQpJiZwLnB1c2gobS5kZWZhdWx0Vmlld3x8bS5wYXJlbnRXaW5kb3d8fGEpfW89MDt3aGlsZSgoaT1wW28rK10pJiYhYi5pc1Byb3BhZ2F0aW9uU3RvcHBlZCgpKWIudHlwZT1vPjE/ajpsLmJpbmRUeXBlfHxxLGc9KG4uX2RhdGEoaSwiZXZlbnRzIil8fHt9KVtiLnR5cGVdJiZuLl9kYXRhKGksImhhbmRsZSIpLGcmJmcuYXBwbHkoaSxjKSxnPWgmJmlbaF0sZyYmZy5hcHBseSYmTShpKSYmKGIucmVzdWx0PWcuYXBwbHkoaSxjKSxiLnJlc3VsdD09PSExJiZiLnByZXZlbnREZWZhdWx0KCkpO2lmKGIudHlwZT1xLCFmJiYhYi5pc0RlZmF1bHRQcmV2ZW50ZWQoKSYmKCFsLl9kZWZhdWx0fHxsLl9kZWZhdWx0LmFwcGx5KHAucG9wKCksYyk9PT0hMSkmJk0oZSkmJmgmJmVbcV0mJiFuLmlzV2luZG93KGUpKXttPWVbaF0sbSYmKGVbaF09bnVsbCksbi5ldmVudC50cmlnZ2VyZWQ9cTt0cnl7ZVtxXSgpfWNhdGNoKHMpe31uLmV2ZW50LnRyaWdnZXJlZD12b2lkIDAsbSYmKGVbaF09bSl9cmV0dXJuIGIucmVzdWx0fX0sZGlzcGF0Y2g6ZnVuY3Rpb24oYSl7YT1uLmV2ZW50LmZpeChhKTt2YXIgYixjLGQsZixnLGg9W10saT1lLmNhbGwoYXJndW1lbnRzKSxqPShuLl9kYXRhKHRoaXMsImV2ZW50cyIpfHx7fSlbYS50eXBlXXx8W10saz1uLmV2ZW50LnNwZWNpYWxbYS50eXBlXXx8e307aWYoaVswXT1hLGEuZGVsZWdhdGVUYXJnZXQ9dGhpcywhay5wcmVEaXNwYXRjaHx8ay5wcmVEaXNwYXRjaC5jYWxsKHRoaXMsYSkhPT0hMSl7aD1uLmV2ZW50LmhhbmRsZXJzLmNhbGwodGhpcyxhLGopLGI9MDt3aGlsZSgoZj1oW2IrK10pJiYhYS5pc1Byb3BhZ2F0aW9uU3RvcHBlZCgpKXthLmN1cnJlbnRUYXJnZXQ9Zi5lbGVtLGM9MDt3aGlsZSgoZz1mLmhhbmRsZXJzW2MrK10pJiYhYS5pc0ltbWVkaWF0ZVByb3BhZ2F0aW9uU3RvcHBlZCgpKWEucm5hbWVzcGFjZSYmIWEucm5hbWVzcGFjZS50ZXN0KGcubmFtZXNwYWNlKXx8KGEuaGFuZGxlT2JqPWcsYS5kYXRhPWcuZGF0YSxkPSgobi5ldmVudC5zcGVjaWFsW2cub3JpZ1R5cGVdfHx7fSkuaGFuZGxlfHxnLmhhbmRsZXIpLmFwcGx5KGYuZWxlbSxpKSx2b2lkIDAhPT1kJiYoYS5yZXN1bHQ9ZCk9PT0hMSYmKGEucHJldmVudERlZmF1bHQoKSxhLnN0b3BQcm9wYWdhdGlvbigpKSl9cmV0dXJuIGsucG9zdERpc3BhdGNoJiZrLnBvc3REaXNwYXRjaC5jYWxsKHRoaXMsYSksYS5yZXN1bHR9fSxoYW5kbGVyczpmdW5jdGlvbihhLGIpe3ZhciBjLGQsZSxmLGc9W10saD1iLmRlbGVnYXRlQ291bnQsaT1hLnRhcmdldDtpZihoJiZpLm5vZGVUeXBlJiYoImNsaWNrIiE9PWEudHlwZXx8aXNOYU4oYS5idXR0b24pfHxhLmJ1dHRvbjwxKSlmb3IoO2khPXRoaXM7aT1pLnBhcmVudE5vZGV8fHRoaXMpaWYoMT09PWkubm9kZVR5cGUmJihpLmRpc2FibGVkIT09ITB8fCJjbGljayIhPT1hLnR5cGUpKXtmb3IoZD1bXSxjPTA7aD5jO2MrKylmPWJbY10sZT1mLnNlbGVjdG9yKyIgIix2b2lkIDA9PT1kW2VdJiYoZFtlXT1mLm5lZWRzQ29udGV4dD9uKGUsdGhpcykuaW5kZXgoaSk+LTE6bi5maW5kKGUsdGhpcyxudWxsLFtpXSkubGVuZ3RoKSxkW2VdJiZkLnB1c2goZik7ZC5sZW5ndGgmJmcucHVzaCh7ZWxlbTppLGhhbmRsZXJzOmR9KX1yZXR1cm4gaDxiLmxlbmd0aCYmZy5wdXNoKHtlbGVtOnRoaXMsaGFuZGxlcnM6Yi5zbGljZShoKX0pLGd9LGZpeDpmdW5jdGlvbihhKXtpZihhW24uZXhwYW5kb10pcmV0dXJuIGE7dmFyIGIsYyxlLGY9YS50eXBlLGc9YSxoPXRoaXMuZml4SG9va3NbZl07aHx8KHRoaXMuZml4SG9va3NbZl09aD1tYS50ZXN0KGYpP3RoaXMubW91c2VIb29rczpsYS50ZXN0KGYpP3RoaXMua2V5SG9va3M6e30pLGU9aC5wcm9wcz90aGlzLnByb3BzLmNvbmNhdChoLnByb3BzKTp0aGlzLnByb3BzLGE9bmV3IG4uRXZlbnQoZyksYj1lLmxlbmd0aDt3aGlsZShiLS0pYz1lW2JdLGFbY109Z1tjXTtyZXR1cm4gYS50YXJnZXR8fChhLnRhcmdldD1nLnNyY0VsZW1lbnR8fGQpLDM9PT1hLnRhcmdldC5ub2RlVHlwZSYmKGEudGFyZ2V0PWEudGFyZ2V0LnBhcmVudE5vZGUpLGEubWV0YUtleT0hIWEubWV0YUtleSxoLmZpbHRlcj9oLmZpbHRlcihhLGcpOmF9LHByb3BzOiJhbHRLZXkgYnViYmxlcyBjYW5jZWxhYmxlIGN0cmxLZXkgY3VycmVudFRhcmdldCBkZXRhaWwgZXZlbnRQaGFzZSBtZXRhS2V5IHJlbGF0ZWRUYXJnZXQgc2hpZnRLZXkgdGFyZ2V0IHRpbWVTdGFtcCB2aWV3IHdoaWNoIi5zcGxpdCgiICIpLGZpeEhvb2tzOnt9LGtleUhvb2tzOntwcm9wczoiY2hhciBjaGFyQ29kZSBrZXkga2V5Q29kZSIuc3BsaXQoIiAiKSxmaWx0ZXI6ZnVuY3Rpb24oYSxiKXtyZXR1cm4gbnVsbD09YS53aGljaCYmKGEud2hpY2g9bnVsbCE9Yi5jaGFyQ29kZT9iLmNoYXJDb2RlOmIua2V5Q29kZSksYX19LG1vdXNlSG9va3M6e3Byb3BzOiJidXR0b24gYnV0dG9ucyBjbGllbnRYIGNsaWVudFkgZnJvbUVsZW1lbnQgb2Zmc2V0WCBvZmZzZXRZIHBhZ2VYIHBhZ2VZIHNjcmVlblggc2NyZWVuWSB0b0VsZW1lbnQiLnNwbGl0KCIgIiksZmlsdGVyOmZ1bmN0aW9uKGEsYil7dmFyIGMsZSxmLGc9Yi5idXR0b24saD1iLmZyb21FbGVtZW50O3JldHVybiBudWxsPT1hLnBhZ2VYJiZudWxsIT1iLmNsaWVudFgmJihlPWEudGFyZ2V0Lm93bmVyRG9jdW1lbnR8fGQsZj1lLmRvY3VtZW50RWxlbWVudCxjPWUuYm9keSxhLnBhZ2VYPWIuY2xpZW50WCsoZiYmZi5zY3JvbGxMZWZ0fHxjJiZjLnNjcm9sbExlZnR8fDApLShmJiZmLmNsaWVudExlZnR8fGMmJmMuY2xpZW50TGVmdHx8MCksYS5wYWdlWT1iLmNsaWVudFkrKGYmJmYuc2Nyb2xsVG9wfHxjJiZjLnNjcm9sbFRvcHx8MCktKGYmJmYuY2xpZW50VG9wfHxjJiZjLmNsaWVudFRvcHx8MCkpLCFhLnJlbGF0ZWRUYXJnZXQmJmgmJihhLnJlbGF0ZWRUYXJnZXQ9aD09PWEudGFyZ2V0P2IudG9FbGVtZW50OmgpLGEud2hpY2h8fHZvaWQgMD09PWd8fChhLndoaWNoPTEmZz8xOjImZz8zOjQmZz8yOjApLGF9fSxzcGVjaWFsOntsb2FkOntub0J1YmJsZTohMH0sZm9jdXM6e3RyaWdnZXI6ZnVuY3Rpb24oKXtpZih0aGlzIT09cmEoKSYmdGhpcy5mb2N1cyl0cnl7cmV0dXJuIHRoaXMuZm9jdXMoKSwhMX1jYXRjaChhKXt9fSxkZWxlZ2F0ZVR5cGU6ImZvY3VzaW4ifSxibHVyOnt0cmlnZ2VyOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXM9PT1yYSgpJiZ0aGlzLmJsdXI/KHRoaXMuYmx1cigpLCExKTp2b2lkIDB9LGRlbGVnYXRlVHlwZToiZm9jdXNvdXQifSxjbGljazp7dHJpZ2dlcjpmdW5jdGlvbigpe3JldHVybiBuLm5vZGVOYW1lKHRoaXMsImlucHV0IikmJiJjaGVja2JveCI9PT10aGlzLnR5cGUmJnRoaXMuY2xpY2s/KHRoaXMuY2xpY2soKSwhMSk6dm9pZCAwfSxfZGVmYXVsdDpmdW5jdGlvbihhKXtyZXR1cm4gbi5ub2RlTmFtZShhLnRhcmdldCwiYSIpfX0sYmVmb3JldW5sb2FkOntwb3N0RGlzcGF0Y2g6ZnVuY3Rpb24oYSl7dm9pZCAwIT09YS5yZXN1bHQmJmEub3JpZ2luYWxFdmVudCYmKGEub3JpZ2luYWxFdmVudC5yZXR1cm5WYWx1ZT1hLnJlc3VsdCl9fX0sc2ltdWxhdGU6ZnVuY3Rpb24oYSxiLGMpe3ZhciBkPW4uZXh0ZW5kKG5ldyBuLkV2ZW50LGMse3R5cGU6YSxpc1NpbXVsYXRlZDohMH0pO24uZXZlbnQudHJpZ2dlcihkLG51bGwsYiksZC5pc0RlZmF1bHRQcmV2ZW50ZWQoKSYmYy5wcmV2ZW50RGVmYXVsdCgpfX0sbi5yZW1vdmVFdmVudD1kLnJlbW92ZUV2ZW50TGlzdGVuZXI/ZnVuY3Rpb24oYSxiLGMpe2EucmVtb3ZlRXZlbnRMaXN0ZW5lciYmYS5yZW1vdmVFdmVudExpc3RlbmVyKGIsYyl9OmZ1bmN0aW9uKGEsYixjKXt2YXIgZD0ib24iK2I7YS5kZXRhY2hFdmVudCYmKCJ1bmRlZmluZWQiPT10eXBlb2YgYVtkXSYmKGFbZF09bnVsbCksYS5kZXRhY2hFdmVudChkLGMpKX0sbi5FdmVudD1mdW5jdGlvbihhLGIpe3JldHVybiB0aGlzIGluc3RhbmNlb2Ygbi5FdmVudD8oYSYmYS50eXBlPyh0aGlzLm9yaWdpbmFsRXZlbnQ9YSx0aGlzLnR5cGU9YS50eXBlLHRoaXMuaXNEZWZhdWx0UHJldmVudGVkPWEuZGVmYXVsdFByZXZlbnRlZHx8dm9pZCAwPT09YS5kZWZhdWx0UHJldmVudGVkJiZhLnJldHVyblZhbHVlPT09ITE/cGE6cWEpOnRoaXMudHlwZT1hLGImJm4uZXh0ZW5kKHRoaXMsYiksdGhpcy50aW1lU3RhbXA9YSYmYS50aW1lU3RhbXB8fG4ubm93KCksdm9pZCh0aGlzW24uZXhwYW5kb109ITApKTpuZXcgbi5FdmVudChhLGIpfSxuLkV2ZW50LnByb3RvdHlwZT17Y29uc3RydWN0b3I6bi5FdmVudCxpc0RlZmF1bHRQcmV2ZW50ZWQ6cWEsaXNQcm9wYWdhdGlvblN0b3BwZWQ6cWEsaXNJbW1lZGlhdGVQcm9wYWdhdGlvblN0b3BwZWQ6cWEscHJldmVudERlZmF1bHQ6ZnVuY3Rpb24oKXt2YXIgYT10aGlzLm9yaWdpbmFsRXZlbnQ7dGhpcy5pc0RlZmF1bHRQcmV2ZW50ZWQ9cGEsYSYmKGEucHJldmVudERlZmF1bHQ/YS5wcmV2ZW50RGVmYXVsdCgpOmEucmV0dXJuVmFsdWU9ITEpfSxzdG9wUHJvcGFnYXRpb246ZnVuY3Rpb24oKXt2YXIgYT10aGlzLm9yaWdpbmFsRXZlbnQ7dGhpcy5pc1Byb3BhZ2F0aW9uU3RvcHBlZD1wYSxhJiYhdGhpcy5pc1NpbXVsYXRlZCYmKGEuc3RvcFByb3BhZ2F0aW9uJiZhLnN0b3BQcm9wYWdhdGlvbigpLGEuY2FuY2VsQnViYmxlPSEwKX0sc3RvcEltbWVkaWF0ZVByb3BhZ2F0aW9uOmZ1bmN0aW9uKCl7dmFyIGE9dGhpcy5vcmlnaW5hbEV2ZW50O3RoaXMuaXNJbW1lZGlhdGVQcm9wYWdhdGlvblN0b3BwZWQ9cGEsYSYmYS5zdG9wSW1tZWRpYXRlUHJvcGFnYXRpb24mJmEuc3RvcEltbWVkaWF0ZVByb3BhZ2F0aW9uKCksdGhpcy5zdG9wUHJvcGFnYXRpb24oKX19LG4uZWFjaCh7bW91c2VlbnRlcjoibW91c2VvdmVyIixtb3VzZWxlYXZlOiJtb3VzZW91dCIscG9pbnRlcmVudGVyOiJwb2ludGVyb3ZlciIscG9pbnRlcmxlYXZlOiJwb2ludGVyb3V0In0sZnVuY3Rpb24oYSxiKXtuLmV2ZW50LnNwZWNpYWxbYV09e2RlbGVnYXRlVHlwZTpiLGJpbmRUeXBlOmIsaGFuZGxlOmZ1bmN0aW9uKGEpe3ZhciBjLGQ9dGhpcyxlPWEucmVsYXRlZFRhcmdldCxmPWEuaGFuZGxlT2JqO3JldHVybiBlJiYoZT09PWR8fG4uY29udGFpbnMoZCxlKSl8fChhLnR5cGU9Zi5vcmlnVHlwZSxjPWYuaGFuZGxlci5hcHBseSh0aGlzLGFyZ3VtZW50cyksYS50eXBlPWIpLGN9fX0pLGwuc3VibWl0fHwobi5ldmVudC5zcGVjaWFsLnN1Ym1pdD17c2V0dXA6ZnVuY3Rpb24oKXtyZXR1cm4gbi5ub2RlTmFtZSh0aGlzLCJmb3JtIik/ITE6dm9pZCBuLmV2ZW50LmFkZCh0aGlzLCJjbGljay5fc3VibWl0IGtleXByZXNzLl9zdWJtaXQiLGZ1bmN0aW9uKGEpe3ZhciBiPWEudGFyZ2V0LGM9bi5ub2RlTmFtZShiLCJpbnB1dCIpfHxuLm5vZGVOYW1lKGIsImJ1dHRvbiIpP24ucHJvcChiLCJmb3JtIik6dm9pZCAwO2MmJiFuLl9kYXRhKGMsInN1Ym1pdCIpJiYobi5ldmVudC5hZGQoYywic3VibWl0Ll9zdWJtaXQiLGZ1bmN0aW9uKGEpe2EuX3N1Ym1pdEJ1YmJsZT0hMH0pLG4uX2RhdGEoYywic3VibWl0IiwhMCkpfSl9LHBvc3REaXNwYXRjaDpmdW5jdGlvbihhKXthLl9zdWJtaXRCdWJibGUmJihkZWxldGUgYS5fc3VibWl0QnViYmxlLHRoaXMucGFyZW50Tm9kZSYmIWEuaXNUcmlnZ2VyJiZuLmV2ZW50LnNpbXVsYXRlKCJzdWJtaXQiLHRoaXMucGFyZW50Tm9kZSxhKSl9LHRlYXJkb3duOmZ1bmN0aW9uKCl7cmV0dXJuIG4ubm9kZU5hbWUodGhpcywiZm9ybSIpPyExOnZvaWQgbi5ldmVudC5yZW1vdmUodGhpcywiLl9zdWJtaXQiKX19KSxsLmNoYW5nZXx8KG4uZXZlbnQuc3BlY2lhbC5jaGFuZ2U9e3NldHVwOmZ1bmN0aW9uKCl7cmV0dXJuIGthLnRlc3QodGhpcy5ub2RlTmFtZSk/KCJjaGVja2JveCIhPT10aGlzLnR5cGUmJiJyYWRpbyIhPT10aGlzLnR5cGV8fChuLmV2ZW50LmFkZCh0aGlzLCJwcm9wZXJ0eWNoYW5nZS5fY2hhbmdlIixmdW5jdGlvbihhKXsiY2hlY2tlZCI9PT1hLm9yaWdpbmFsRXZlbnQucHJvcGVydHlOYW1lJiYodGhpcy5fanVzdENoYW5nZWQ9ITApfSksbi5ldmVudC5hZGQodGhpcywiY2xpY2suX2NoYW5nZSIsZnVuY3Rpb24oYSl7dGhpcy5fanVzdENoYW5nZWQmJiFhLmlzVHJpZ2dlciYmKHRoaXMuX2p1c3RDaGFuZ2VkPSExKSxuLmV2ZW50LnNpbXVsYXRlKCJjaGFuZ2UiLHRoaXMsYSl9KSksITEpOnZvaWQgbi5ldmVudC5hZGQodGhpcywiYmVmb3JlYWN0aXZhdGUuX2NoYW5nZSIsZnVuY3Rpb24oYSl7dmFyIGI9YS50YXJnZXQ7a2EudGVzdChiLm5vZGVOYW1lKSYmIW4uX2RhdGEoYiwiY2hhbmdlIikmJihuLmV2ZW50LmFkZChiLCJjaGFuZ2UuX2NoYW5nZSIsZnVuY3Rpb24oYSl7IXRoaXMucGFyZW50Tm9kZXx8YS5pc1NpbXVsYXRlZHx8YS5pc1RyaWdnZXJ8fG4uZXZlbnQuc2ltdWxhdGUoImNoYW5nZSIsdGhpcy5wYXJlbnROb2RlLGEpfSksbi5fZGF0YShiLCJjaGFuZ2UiLCEwKSl9KX0saGFuZGxlOmZ1bmN0aW9uKGEpe3ZhciBiPWEudGFyZ2V0O3JldHVybiB0aGlzIT09Ynx8YS5pc1NpbXVsYXRlZHx8YS5pc1RyaWdnZXJ8fCJyYWRpbyIhPT1iLnR5cGUmJiJjaGVja2JveCIhPT1iLnR5cGU/YS5oYW5kbGVPYmouaGFuZGxlci5hcHBseSh0aGlzLGFyZ3VtZW50cyk6dm9pZCAwfSx0ZWFyZG93bjpmdW5jdGlvbigpe3JldHVybiBuLmV2ZW50LnJlbW92ZSh0aGlzLCIuX2NoYW5nZSIpLCFrYS50ZXN0KHRoaXMubm9kZU5hbWUpfX0pLGwuZm9jdXNpbnx8bi5lYWNoKHtmb2N1czoiZm9jdXNpbiIsYmx1cjoiZm9jdXNvdXQifSxmdW5jdGlvbihhLGIpe3ZhciBjPWZ1bmN0aW9uKGEpe24uZXZlbnQuc2ltdWxhdGUoYixhLnRhcmdldCxuLmV2ZW50LmZpeChhKSl9O24uZXZlbnQuc3BlY2lhbFtiXT17c2V0dXA6ZnVuY3Rpb24oKXt2YXIgZD10aGlzLm93bmVyRG9jdW1lbnR8fHRoaXMsZT1uLl9kYXRhKGQsYik7ZXx8ZC5hZGRFdmVudExpc3RlbmVyKGEsYywhMCksbi5fZGF0YShkLGIsKGV8fDApKzEpfSx0ZWFyZG93bjpmdW5jdGlvbigpe3ZhciBkPXRoaXMub3duZXJEb2N1bWVudHx8dGhpcyxlPW4uX2RhdGEoZCxiKS0xO2U/bi5fZGF0YShkLGIsZSk6KGQucmVtb3ZlRXZlbnRMaXN0ZW5lcihhLGMsITApLG4uX3JlbW92ZURhdGEoZCxiKSl9fX0pLG4uZm4uZXh0ZW5kKHtvbjpmdW5jdGlvbihhLGIsYyxkKXtyZXR1cm4gc2EodGhpcyxhLGIsYyxkKX0sb25lOmZ1bmN0aW9uKGEsYixjLGQpe3JldHVybiBzYSh0aGlzLGEsYixjLGQsMSl9LG9mZjpmdW5jdGlvbihhLGIsYyl7dmFyIGQsZTtpZihhJiZhLnByZXZlbnREZWZhdWx0JiZhLmhhbmRsZU9iailyZXR1cm4gZD1hLmhhbmRsZU9iaixuKGEuZGVsZWdhdGVUYXJnZXQpLm9mZihkLm5hbWVzcGFjZT9kLm9yaWdUeXBlKyIuIitkLm5hbWVzcGFjZTpkLm9yaWdUeXBlLGQuc2VsZWN0b3IsZC5oYW5kbGVyKSx0aGlzO2lmKCJvYmplY3QiPT10eXBlb2YgYSl7Zm9yKGUgaW4gYSl0aGlzLm9mZihlLGIsYVtlXSk7cmV0dXJuIHRoaXN9cmV0dXJuIGIhPT0hMSYmImZ1bmN0aW9uIiE9dHlwZW9mIGJ8fChjPWIsYj12b2lkIDApLGM9PT0hMSYmKGM9cWEpLHRoaXMuZWFjaChmdW5jdGlvbigpe24uZXZlbnQucmVtb3ZlKHRoaXMsYSxjLGIpfSl9LHRyaWdnZXI6ZnVuY3Rpb24oYSxiKXtyZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uKCl7bi5ldmVudC50cmlnZ2VyKGEsYix0aGlzKX0pfSx0cmlnZ2VySGFuZGxlcjpmdW5jdGlvbihhLGIpe3ZhciBjPXRoaXNbMF07cmV0dXJuIGM/bi5ldmVudC50cmlnZ2VyKGEsYixjLCEwKTp2b2lkIDB9fSk7dmFyIHRhPS8galF1ZXJ5XGQrPSIoPzpudWxsfFxkKykiL2csdWE9bmV3IFJlZ0V4cCgiPCg/OiIrYmErIilbXFxzLz5dIiwiaSIpLHZhPS88KD8hYXJlYXxicnxjb2x8ZW1iZWR8aHJ8aW1nfGlucHV0fGxpbmt8bWV0YXxwYXJhbSkoKFtcdzotXSspW14+XSopXC8+L2dpLHdhPS88c2NyaXB0fDxzdHlsZXw8bGluay9pLHhhPS9jaGVja2VkXHMqKD86W149XXw9XHMqLmNoZWNrZWQuKS9pLHlhPS9edHJ1ZVwvKC4qKS8semE9L15ccyo8ISg/OlxbQ0RBVEFcW3wtLSl8KD86XF1cXXwtLSk+XHMqJC9nLEFhPWNhKGQpLEJhPUFhLmFwcGVuZENoaWxkKGQuY3JlYXRlRWxlbWVudCgiZGl2IikpO2Z1bmN0aW9uIENhKGEsYil7cmV0dXJuIG4ubm9kZU5hbWUoYSwidGFibGUiKSYmbi5ub2RlTmFtZSgxMSE9PWIubm9kZVR5cGU/YjpiLmZpcnN0Q2hpbGQsInRyIik/YS5nZXRFbGVtZW50c0J5VGFnTmFtZSgidGJvZHkiKVswXXx8YS5hcHBlbmRDaGlsZChhLm93bmVyRG9jdW1lbnQuY3JlYXRlRWxlbWVudCgidGJvZHkiKSk6YX1mdW5jdGlvbiBEYShhKXtyZXR1cm4gYS50eXBlPShudWxsIT09bi5maW5kLmF0dHIoYSwidHlwZSIpKSsiLyIrYS50eXBlLGF9ZnVuY3Rpb24gRWEoYSl7dmFyIGI9eWEuZXhlYyhhLnR5cGUpO3JldHVybiBiP2EudHlwZT1iWzFdOmEucmVtb3ZlQXR0cmlidXRlKCJ0eXBlIiksYX1mdW5jdGlvbiBGYShhLGIpe2lmKDE9PT1iLm5vZGVUeXBlJiZuLmhhc0RhdGEoYSkpe3ZhciBjLGQsZSxmPW4uX2RhdGEoYSksZz1uLl9kYXRhKGIsZiksaD1mLmV2ZW50cztpZihoKXtkZWxldGUgZy5oYW5kbGUsZy5ldmVudHM9e307Zm9yKGMgaW4gaClmb3IoZD0wLGU9aFtjXS5sZW5ndGg7ZT5kO2QrKyluLmV2ZW50LmFkZChiLGMsaFtjXVtkXSl9Zy5kYXRhJiYoZy5kYXRhPW4uZXh0ZW5kKHt9LGcuZGF0YSkpfX1mdW5jdGlvbiBHYShhLGIpe3ZhciBjLGQsZTtpZigxPT09Yi5ub2RlVHlwZSl7aWYoYz1iLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCksIWwubm9DbG9uZUV2ZW50JiZiW24uZXhwYW5kb10pe2U9bi5fZGF0YShiKTtmb3IoZCBpbiBlLmV2ZW50cyluLnJlbW92ZUV2ZW50KGIsZCxlLmhhbmRsZSk7Yi5yZW1vdmVBdHRyaWJ1dGUobi5leHBhbmRvKX0ic2NyaXB0Ij09PWMmJmIudGV4dCE9PWEudGV4dD8oRGEoYikudGV4dD1hLnRleHQsRWEoYikpOiJvYmplY3QiPT09Yz8oYi5wYXJlbnROb2RlJiYoYi5vdXRlckhUTUw9YS5vdXRlckhUTUwpLGwuaHRtbDVDbG9uZSYmYS5pbm5lckhUTUwmJiFuLnRyaW0oYi5pbm5lckhUTUwpJiYoYi5pbm5lckhUTUw9YS5pbm5lckhUTUwpKToiaW5wdXQiPT09YyYmWi50ZXN0KGEudHlwZSk/KGIuZGVmYXVsdENoZWNrZWQ9Yi5jaGVja2VkPWEuY2hlY2tlZCxiLnZhbHVlIT09YS52YWx1ZSYmKGIudmFsdWU9YS52YWx1ZSkpOiJvcHRpb24iPT09Yz9iLmRlZmF1bHRTZWxlY3RlZD1iLnNlbGVjdGVkPWEuZGVmYXVsdFNlbGVjdGVkOiJpbnB1dCIhPT1jJiYidGV4dGFyZWEiIT09Y3x8KGIuZGVmYXVsdFZhbHVlPWEuZGVmYXVsdFZhbHVlKX19ZnVuY3Rpb24gSGEoYSxiLGMsZCl7Yj1mLmFwcGx5KFtdLGIpO3ZhciBlLGcsaCxpLGosayxtPTAsbz1hLmxlbmd0aCxwPW8tMSxxPWJbMF0scj1uLmlzRnVuY3Rpb24ocSk7aWYocnx8bz4xJiYic3RyaW5nIj09dHlwZW9mIHEmJiFsLmNoZWNrQ2xvbmUmJnhhLnRlc3QocSkpcmV0dXJuIGEuZWFjaChmdW5jdGlvbihlKXt2YXIgZj1hLmVxKGUpO3ImJihiWzBdPXEuY2FsbCh0aGlzLGUsZi5odG1sKCkpKSxIYShmLGIsYyxkKX0pO2lmKG8mJihrPWphKGIsYVswXS5vd25lckRvY3VtZW50LCExLGEsZCksZT1rLmZpcnN0Q2hpbGQsMT09PWsuY2hpbGROb2Rlcy5sZW5ndGgmJihrPWUpLGV8fGQpKXtmb3IoaT1uLm1hcChlYShrLCJzY3JpcHQiKSxEYSksaD1pLmxlbmd0aDtvPm07bSsrKWc9ayxtIT09cCYmKGc9bi5jbG9uZShnLCEwLCEwKSxoJiZuLm1lcmdlKGksZWEoZywic2NyaXB0IikpKSxjLmNhbGwoYVttXSxnLG0pO2lmKGgpZm9yKGo9aVtpLmxlbmd0aC0xXS5vd25lckRvY3VtZW50LG4ubWFwKGksRWEpLG09MDtoPm07bSsrKWc9aVttXSxfLnRlc3QoZy50eXBlfHwiIikmJiFuLl9kYXRhKGcsImdsb2JhbEV2YWwiKSYmbi5jb250YWlucyhqLGcpJiYoZy5zcmM/bi5fZXZhbFVybCYmbi5fZXZhbFVybChnLnNyYyk6bi5nbG9iYWxFdmFsKChnLnRleHR8fGcudGV4dENvbnRlbnR8fGcuaW5uZXJIVE1MfHwiIikucmVwbGFjZSh6YSwiIikpKTtrPWU9bnVsbH1yZXR1cm4gYX1mdW5jdGlvbiBJYShhLGIsYyl7Zm9yKHZhciBkLGU9Yj9uLmZpbHRlcihiLGEpOmEsZj0wO251bGwhPShkPWVbZl0pO2YrKyljfHwxIT09ZC5ub2RlVHlwZXx8bi5jbGVhbkRhdGEoZWEoZCkpLGQucGFyZW50Tm9kZSYmKGMmJm4uY29udGFpbnMoZC5vd25lckRvY3VtZW50LGQpJiZmYShlYShkLCJzY3JpcHQiKSksZC5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKGQpKTtyZXR1cm4gYX1uLmV4dGVuZCh7aHRtbFByZWZpbHRlcjpmdW5jdGlvbihhKXtyZXR1cm4gYS5yZXBsYWNlKHZhLCI8JDE+PC8kMj4iKX0sY2xvbmU6ZnVuY3Rpb24oYSxiLGMpe3ZhciBkLGUsZixnLGgsaT1uLmNvbnRhaW5zKGEub3duZXJEb2N1bWVudCxhKTtpZihsLmh0bWw1Q2xvbmV8fG4uaXNYTUxEb2MoYSl8fCF1YS50ZXN0KCI8IithLm5vZGVOYW1lKyI+Iik/Zj1hLmNsb25lTm9kZSghMCk6KEJhLmlubmVySFRNTD1hLm91dGVySFRNTCxCYS5yZW1vdmVDaGlsZChmPUJhLmZpcnN0Q2hpbGQpKSwhKGwubm9DbG9uZUV2ZW50JiZsLm5vQ2xvbmVDaGVja2VkfHwxIT09YS5ub2RlVHlwZSYmMTEhPT1hLm5vZGVUeXBlfHxuLmlzWE1MRG9jKGEpKSlmb3IoZD1lYShmKSxoPWVhKGEpLGc9MDtudWxsIT0oZT1oW2ddKTsrK2cpZFtnXSYmR2EoZSxkW2ddKTtpZihiKWlmKGMpZm9yKGg9aHx8ZWEoYSksZD1kfHxlYShmKSxnPTA7bnVsbCE9KGU9aFtnXSk7ZysrKUZhKGUsZFtnXSk7ZWxzZSBGYShhLGYpO3JldHVybiBkPWVhKGYsInNjcmlwdCIpLGQubGVuZ3RoPjAmJmZhKGQsIWkmJmVhKGEsInNjcmlwdCIpKSxkPWg9ZT1udWxsLGZ9LGNsZWFuRGF0YTpmdW5jdGlvbihhLGIpe2Zvcih2YXIgZCxlLGYsZyxoPTAsaT1uLmV4cGFuZG8saj1uLmNhY2hlLGs9bC5hdHRyaWJ1dGVzLG09bi5ldmVudC5zcGVjaWFsO251bGwhPShkPWFbaF0pO2grKylpZigoYnx8TShkKSkmJihmPWRbaV0sZz1mJiZqW2ZdKSl7aWYoZy5ldmVudHMpZm9yKGUgaW4gZy5ldmVudHMpbVtlXT9uLmV2ZW50LnJlbW92ZShkLGUpOm4ucmVtb3ZlRXZlbnQoZCxlLGcuaGFuZGxlKTtqW2ZdJiYoZGVsZXRlIGpbZl0sa3x8InVuZGVmaW5lZCI9PXR5cGVvZiBkLnJlbW92ZUF0dHJpYnV0ZT9kW2ldPXZvaWQgMDpkLnJlbW92ZUF0dHJpYnV0ZShpKSxjLnB1c2goZikpfX19KSxuLmZuLmV4dGVuZCh7ZG9tTWFuaXA6SGEsZGV0YWNoOmZ1bmN0aW9uKGEpe3JldHVybiBJYSh0aGlzLGEsITApfSxyZW1vdmU6ZnVuY3Rpb24oYSl7cmV0dXJuIElhKHRoaXMsYSl9LHRleHQ6ZnVuY3Rpb24oYSl7cmV0dXJuIFkodGhpcyxmdW5jdGlvbihhKXtyZXR1cm4gdm9pZCAwPT09YT9uLnRleHQodGhpcyk6dGhpcy5lbXB0eSgpLmFwcGVuZCgodGhpc1swXSYmdGhpc1swXS5vd25lckRvY3VtZW50fHxkKS5jcmVhdGVUZXh0Tm9kZShhKSl9LG51bGwsYSxhcmd1bWVudHMubGVuZ3RoKX0sYXBwZW5kOmZ1bmN0aW9uKCl7cmV0dXJuIEhhKHRoaXMsYXJndW1lbnRzLGZ1bmN0aW9uKGEpe2lmKDE9PT10aGlzLm5vZGVUeXBlfHwxMT09PXRoaXMubm9kZVR5cGV8fDk9PT10aGlzLm5vZGVUeXBlKXt2YXIgYj1DYSh0aGlzLGEpO2IuYXBwZW5kQ2hpbGQoYSl9fSl9LHByZXBlbmQ6ZnVuY3Rpb24oKXtyZXR1cm4gSGEodGhpcyxhcmd1bWVudHMsZnVuY3Rpb24oYSl7aWYoMT09PXRoaXMubm9kZVR5cGV8fDExPT09dGhpcy5ub2RlVHlwZXx8OT09PXRoaXMubm9kZVR5cGUpe3ZhciBiPUNhKHRoaXMsYSk7Yi5pbnNlcnRCZWZvcmUoYSxiLmZpcnN0Q2hpbGQpfX0pfSxiZWZvcmU6ZnVuY3Rpb24oKXtyZXR1cm4gSGEodGhpcyxhcmd1bWVudHMsZnVuY3Rpb24oYSl7dGhpcy5wYXJlbnROb2RlJiZ0aGlzLnBhcmVudE5vZGUuaW5zZXJ0QmVmb3JlKGEsdGhpcyl9KX0sYWZ0ZXI6ZnVuY3Rpb24oKXtyZXR1cm4gSGEodGhpcyxhcmd1bWVudHMsZnVuY3Rpb24oYSl7dGhpcy5wYXJlbnROb2RlJiZ0aGlzLnBhcmVudE5vZGUuaW5zZXJ0QmVmb3JlKGEsdGhpcy5uZXh0U2libGluZyl9KX0sZW1wdHk6ZnVuY3Rpb24oKXtmb3IodmFyIGEsYj0wO251bGwhPShhPXRoaXNbYl0pO2IrKyl7MT09PWEubm9kZVR5cGUmJm4uY2xlYW5EYXRhKGVhKGEsITEpKTt3aGlsZShhLmZpcnN0Q2hpbGQpYS5yZW1vdmVDaGlsZChhLmZpcnN0Q2hpbGQpO2Eub3B0aW9ucyYmbi5ub2RlTmFtZShhLCJzZWxlY3QiKSYmKGEub3B0aW9ucy5sZW5ndGg9MCl9cmV0dXJuIHRoaXN9LGNsb25lOmZ1bmN0aW9uKGEsYil7cmV0dXJuIGE9bnVsbD09YT8hMTphLGI9bnVsbD09Yj9hOmIsdGhpcy5tYXAoZnVuY3Rpb24oKXtyZXR1cm4gbi5jbG9uZSh0aGlzLGEsYil9KX0saHRtbDpmdW5jdGlvbihhKXtyZXR1cm4gWSh0aGlzLGZ1bmN0aW9uKGEpe3ZhciBiPXRoaXNbMF18fHt9LGM9MCxkPXRoaXMubGVuZ3RoO2lmKHZvaWQgMD09PWEpcmV0dXJuIDE9PT1iLm5vZGVUeXBlP2IuaW5uZXJIVE1MLnJlcGxhY2UodGEsIiIpOnZvaWQgMDtpZigic3RyaW5nIj09dHlwZW9mIGEmJiF3YS50ZXN0KGEpJiYobC5odG1sU2VyaWFsaXplfHwhdWEudGVzdChhKSkmJihsLmxlYWRpbmdXaGl0ZXNwYWNlfHwhYWEudGVzdChhKSkmJiFkYVsoJC5leGVjKGEpfHxbIiIsIiJdKVsxXS50b0xvd2VyQ2FzZSgpXSl7YT1uLmh0bWxQcmVmaWx0ZXIoYSk7dHJ5e2Zvcig7ZD5jO2MrKyliPXRoaXNbY118fHt9LDE9PT1iLm5vZGVUeXBlJiYobi5jbGVhbkRhdGEoZWEoYiwhMSkpLGIuaW5uZXJIVE1MPWEpO2I9MH1jYXRjaChlKXt9fWImJnRoaXMuZW1wdHkoKS5hcHBlbmQoYSl9LG51bGwsYSxhcmd1bWVudHMubGVuZ3RoKX0scmVwbGFjZVdpdGg6ZnVuY3Rpb24oKXt2YXIgYT1bXTtyZXR1cm4gSGEodGhpcyxhcmd1bWVudHMsZnVuY3Rpb24oYil7dmFyIGM9dGhpcy5wYXJlbnROb2RlO24uaW5BcnJheSh0aGlzLGEpPDAmJihuLmNsZWFuRGF0YShlYSh0aGlzKSksYyYmYy5yZXBsYWNlQ2hpbGQoYix0aGlzKSl9LGEpfX0pLG4uZWFjaCh7YXBwZW5kVG86ImFwcGVuZCIscHJlcGVuZFRvOiJwcmVwZW5kIixpbnNlcnRCZWZvcmU6ImJlZm9yZSIsaW5zZXJ0QWZ0ZXI6ImFmdGVyIixyZXBsYWNlQWxsOiJyZXBsYWNlV2l0aCJ9LGZ1bmN0aW9uKGEsYil7bi5mblthXT1mdW5jdGlvbihhKXtmb3IodmFyIGMsZD0wLGU9W10sZj1uKGEpLGg9Zi5sZW5ndGgtMTtoPj1kO2QrKyljPWQ9PT1oP3RoaXM6dGhpcy5jbG9uZSghMCksbihmW2RdKVtiXShjKSxnLmFwcGx5KGUsYy5nZXQoKSk7cmV0dXJuIHRoaXMucHVzaFN0YWNrKGUpfX0pO3ZhciBKYSxLYT17SFRNTDoiYmxvY2siLEJPRFk6ImJsb2NrIn07ZnVuY3Rpb24gTGEoYSxiKXt2YXIgYz1uKGIuY3JlYXRlRWxlbWVudChhKSkuYXBwZW5kVG8oYi5ib2R5KSxkPW4uY3NzKGNbMF0sImRpc3BsYXkiKTtyZXR1cm4gYy5kZXRhY2goKSxkfWZ1bmN0aW9uIE1hKGEpe3ZhciBiPWQsYz1LYVthXTtyZXR1cm4gY3x8KGM9TGEoYSxiKSwibm9uZSIhPT1jJiZjfHwoSmE9KEphfHxuKCI8aWZyYW1lIGZyYW1lYm9yZGVyPScwJyB3aWR0aD0nMCcgaGVpZ2h0PScwJy8+IikpLmFwcGVuZFRvKGIuZG9jdW1lbnRFbGVtZW50KSxiPShKYVswXS5jb250ZW50V2luZG93fHxKYVswXS5jb250ZW50RG9jdW1lbnQpLmRvY3VtZW50LGIud3JpdGUoKSxiLmNsb3NlKCksYz1MYShhLGIpLEphLmRldGFjaCgpKSxLYVthXT1jKSxjfXZhciBOYT0vXm1hcmdpbi8sT2E9bmV3IFJlZ0V4cCgiXigiK1QrIikoPyFweClbYS16JV0rJCIsImkiKSxQYT1mdW5jdGlvbihhLGIsYyxkKXt2YXIgZSxmLGc9e307Zm9yKGYgaW4gYilnW2ZdPWEuc3R5bGVbZl0sYS5zdHlsZVtmXT1iW2ZdO2U9Yy5hcHBseShhLGR8fFtdKTtmb3IoZiBpbiBiKWEuc3R5bGVbZl09Z1tmXTtyZXR1cm4gZX0sUWE9ZC5kb2N1bWVudEVsZW1lbnQ7IWZ1bmN0aW9uKCl7dmFyIGIsYyxlLGYsZyxoLGk9ZC5jcmVhdGVFbGVtZW50KCJkaXYiKSxqPWQuY3JlYXRlRWxlbWVudCgiZGl2Iik7aWYoai5zdHlsZSl7ai5zdHlsZS5jc3NUZXh0PSJmbG9hdDpsZWZ0O29wYWNpdHk6LjUiLGwub3BhY2l0eT0iMC41Ij09PWouc3R5bGUub3BhY2l0eSxsLmNzc0Zsb2F0PSEhai5zdHlsZS5jc3NGbG9hdCxqLnN0eWxlLmJhY2tncm91bmRDbGlwPSJjb250ZW50LWJveCIsai5jbG9uZU5vZGUoITApLnN0eWxlLmJhY2tncm91bmRDbGlwPSIiLGwuY2xlYXJDbG9uZVN0eWxlPSJjb250ZW50LWJveCI9PT1qLnN0eWxlLmJhY2tncm91bmRDbGlwLGk9ZC5jcmVhdGVFbGVtZW50KCJkaXYiKSxpLnN0eWxlLmNzc1RleHQ9ImJvcmRlcjowO3dpZHRoOjhweDtoZWlnaHQ6MDt0b3A6MDtsZWZ0Oi05OTk5cHg7cGFkZGluZzowO21hcmdpbi10b3A6MXB4O3Bvc2l0aW9uOmFic29sdXRlIixqLmlubmVySFRNTD0iIixpLmFwcGVuZENoaWxkKGopLGwuYm94U2l6aW5nPSIiPT09ai5zdHlsZS5ib3hTaXppbmd8fCIiPT09ai5zdHlsZS5Nb3pCb3hTaXppbmd8fCIiPT09ai5zdHlsZS5XZWJraXRCb3hTaXppbmcsbi5leHRlbmQobCx7cmVsaWFibGVIaWRkZW5PZmZzZXRzOmZ1bmN0aW9uKCl7cmV0dXJuIG51bGw9PWImJmsoKSxmfSxib3hTaXppbmdSZWxpYWJsZTpmdW5jdGlvbigpe3JldHVybiBudWxsPT1iJiZrKCksZX0scGl4ZWxNYXJnaW5SaWdodDpmdW5jdGlvbigpe3JldHVybiBudWxsPT1iJiZrKCksY30scGl4ZWxQb3NpdGlvbjpmdW5jdGlvbigpe3JldHVybiBudWxsPT1iJiZrKCksYn0scmVsaWFibGVNYXJnaW5SaWdodDpmdW5jdGlvbigpe3JldHVybiBudWxsPT1iJiZrKCksZ30scmVsaWFibGVNYXJnaW5MZWZ0OmZ1bmN0aW9uKCl7cmV0dXJuIG51bGw9PWImJmsoKSxofX0pO2Z1bmN0aW9uIGsoKXt2YXIgayxsLG09ZC5kb2N1bWVudEVsZW1lbnQ7bS5hcHBlbmRDaGlsZChpKSxqLnN0eWxlLmNzc1RleHQ9Ii13ZWJraXQtYm94LXNpemluZzpib3JkZXItYm94O2JveC1zaXppbmc6Ym9yZGVyLWJveDtwb3NpdGlvbjpyZWxhdGl2ZTtkaXNwbGF5OmJsb2NrO21hcmdpbjphdXRvO2JvcmRlcjoxcHg7cGFkZGluZzoxcHg7dG9wOjElO3dpZHRoOjUwJSIsYj1lPWg9ITEsYz1nPSEwLGEuZ2V0Q29tcHV0ZWRTdHlsZSYmKGw9YS5nZXRDb21wdXRlZFN0eWxlKGopLGI9IjElIiE9PShsfHx7fSkudG9wLGg9IjJweCI9PT0obHx8e30pLm1hcmdpbkxlZnQsZT0iNHB4Ij09PShsfHx7d2lkdGg6IjRweCJ9KS53aWR0aCxqLnN0eWxlLm1hcmdpblJpZ2h0PSI1MCUiLGM9IjRweCI9PT0obHx8e21hcmdpblJpZ2h0OiI0cHgifSkubWFyZ2luUmlnaHQsaz1qLmFwcGVuZENoaWxkKGQuY3JlYXRlRWxlbWVudCgiZGl2IikpLGsuc3R5bGUuY3NzVGV4dD1qLnN0eWxlLmNzc1RleHQ9Ii13ZWJraXQtYm94LXNpemluZzpjb250ZW50LWJveDstbW96LWJveC1zaXppbmc6Y29udGVudC1ib3g7Ym94LXNpemluZzpjb250ZW50LWJveDtkaXNwbGF5OmJsb2NrO21hcmdpbjowO2JvcmRlcjowO3BhZGRpbmc6MCIsay5zdHlsZS5tYXJnaW5SaWdodD1rLnN0eWxlLndpZHRoPSIwIixqLnN0eWxlLndpZHRoPSIxcHgiLGc9IXBhcnNlRmxvYXQoKGEuZ2V0Q29tcHV0ZWRTdHlsZShrKXx8e30pLm1hcmdpblJpZ2h0KSxqLnJlbW92ZUNoaWxkKGspKSxqLnN0eWxlLmRpc3BsYXk9Im5vbmUiLGY9MD09PWouZ2V0Q2xpZW50UmVjdHMoKS5sZW5ndGgsZiYmKGouc3R5bGUuZGlzcGxheT0iIixqLmlubmVySFRNTD0iPHRhYmxlPjx0cj48dGQ+PC90ZD48dGQ+dDwvdGQ+PC90cj48L3RhYmxlPiIsai5jaGlsZE5vZGVzWzBdLnN0eWxlLmJvcmRlckNvbGxhcHNlPSJzZXBhcmF0ZSIsaz1qLmdldEVsZW1lbnRzQnlUYWdOYW1lKCJ0ZCIpLGtbMF0uc3R5bGUuY3NzVGV4dD0ibWFyZ2luOjA7Ym9yZGVyOjA7cGFkZGluZzowO2Rpc3BsYXk6bm9uZSIsZj0wPT09a1swXS5vZmZzZXRIZWlnaHQsZiYmKGtbMF0uc3R5bGUuZGlzcGxheT0iIixrWzFdLnN0eWxlLmRpc3BsYXk9Im5vbmUiLGY9MD09PWtbMF0ub2Zmc2V0SGVpZ2h0KSksbS5yZW1vdmVDaGlsZChpKX19fSgpO3ZhciBSYSxTYSxUYT0vXih0b3B8cmlnaHR8Ym90dG9tfGxlZnQpJC87YS5nZXRDb21wdXRlZFN0eWxlPyhSYT1mdW5jdGlvbihiKXt2YXIgYz1iLm93bmVyRG9jdW1lbnQuZGVmYXVsdFZpZXc7cmV0dXJuIGMmJmMub3BlbmVyfHwoYz1hKSxjLmdldENvbXB1dGVkU3R5bGUoYil9LFNhPWZ1bmN0aW9uKGEsYixjKXt2YXIgZCxlLGYsZyxoPWEuc3R5bGU7cmV0dXJuIGM9Y3x8UmEoYSksZz1jP2MuZ2V0UHJvcGVydHlWYWx1ZShiKXx8Y1tiXTp2b2lkIDAsIiIhPT1nJiZ2b2lkIDAhPT1nfHxuLmNvbnRhaW5zKGEub3duZXJEb2N1bWVudCxhKXx8KGc9bi5zdHlsZShhLGIpKSxjJiYhbC5waXhlbE1hcmdpblJpZ2h0KCkmJk9hLnRlc3QoZykmJk5hLnRlc3QoYikmJihkPWgud2lkdGgsZT1oLm1pbldpZHRoLGY9aC5tYXhXaWR0aCxoLm1pbldpZHRoPWgubWF4V2lkdGg9aC53aWR0aD1nLGc9Yy53aWR0aCxoLndpZHRoPWQsaC5taW5XaWR0aD1lLGgubWF4V2lkdGg9Ziksdm9pZCAwPT09Zz9nOmcrIiJ9KTpRYS5jdXJyZW50U3R5bGUmJihSYT1mdW5jdGlvbihhKXtyZXR1cm4gYS5jdXJyZW50U3R5bGV9LFNhPWZ1bmN0aW9uKGEsYixjKXt2YXIgZCxlLGYsZyxoPWEuc3R5bGU7cmV0dXJuIGM9Y3x8UmEoYSksZz1jP2NbYl06dm9pZCAwLG51bGw9PWcmJmgmJmhbYl0mJihnPWhbYl0pLE9hLnRlc3QoZykmJiFUYS50ZXN0KGIpJiYoZD1oLmxlZnQsZT1hLnJ1bnRpbWVTdHlsZSxmPWUmJmUubGVmdCxmJiYoZS5sZWZ0PWEuY3VycmVudFN0eWxlLmxlZnQpLGgubGVmdD0iZm9udFNpemUiPT09Yj8iMWVtIjpnLGc9aC5waXhlbExlZnQrInB4IixoLmxlZnQ9ZCxmJiYoZS5sZWZ0PWYpKSx2b2lkIDA9PT1nP2c6ZysiInx8ImF1dG8ifSk7ZnVuY3Rpb24gVWEoYSxiKXtyZXR1cm57Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIGEoKT92b2lkIGRlbGV0ZSB0aGlzLmdldDoodGhpcy5nZXQ9YikuYXBwbHkodGhpcyxhcmd1bWVudHMpfX19dmFyIFZhPS9hbHBoYVwoW14pXSpcKS9pLFdhPS9vcGFjaXR5XHMqPVxzKihbXildKikvaSxYYT0vXihub25lfHRhYmxlKD8hLWNbZWFdKS4rKS8sWWE9bmV3IFJlZ0V4cCgiXigiK1QrIikoLiopJCIsImkiKSxaYT17cG9zaXRpb246ImFic29sdXRlIix2aXNpYmlsaXR5OiJoaWRkZW4iLGRpc3BsYXk6ImJsb2NrIn0sJGE9e2xldHRlclNwYWNpbmc6IjAiLGZvbnRXZWlnaHQ6IjQwMCJ9LF9hPVsiV2Via2l0IiwiTyIsIk1veiIsIm1zIl0sYWI9ZC5jcmVhdGVFbGVtZW50KCJkaXYiKS5zdHlsZTtmdW5jdGlvbiBiYihhKXtpZihhIGluIGFiKXJldHVybiBhO3ZhciBiPWEuY2hhckF0KDApLnRvVXBwZXJDYXNlKCkrYS5zbGljZSgxKSxjPV9hLmxlbmd0aDt3aGlsZShjLS0paWYoYT1fYVtjXStiLGEgaW4gYWIpcmV0dXJuIGF9ZnVuY3Rpb24gY2IoYSxiKXtmb3IodmFyIGMsZCxlLGY9W10sZz0wLGg9YS5sZW5ndGg7aD5nO2crKylkPWFbZ10sZC5zdHlsZSYmKGZbZ109bi5fZGF0YShkLCJvbGRkaXNwbGF5IiksYz1kLnN0eWxlLmRpc3BsYXksYj8oZltnXXx8Im5vbmUiIT09Y3x8KGQuc3R5bGUuZGlzcGxheT0iIiksIiI9PT1kLnN0eWxlLmRpc3BsYXkmJlcoZCkmJihmW2ddPW4uX2RhdGEoZCwib2xkZGlzcGxheSIsTWEoZC5ub2RlTmFtZSkpKSk6KGU9VyhkKSwoYyYmIm5vbmUiIT09Y3x8IWUpJiZuLl9kYXRhKGQsIm9sZGRpc3BsYXkiLGU/YzpuLmNzcyhkLCJkaXNwbGF5IikpKSk7Zm9yKGc9MDtoPmc7ZysrKWQ9YVtnXSxkLnN0eWxlJiYoYiYmIm5vbmUiIT09ZC5zdHlsZS5kaXNwbGF5JiYiIiE9PWQuc3R5bGUuZGlzcGxheXx8KGQuc3R5bGUuZGlzcGxheT1iP2ZbZ118fCIiOiJub25lIikpO3JldHVybiBhfWZ1bmN0aW9uIGRiKGEsYixjKXt2YXIgZD1ZYS5leGVjKGIpO3JldHVybiBkP01hdGgubWF4KDAsZFsxXS0oY3x8MCkpKyhkWzJdfHwicHgiKTpifWZ1bmN0aW9uIGViKGEsYixjLGQsZSl7Zm9yKHZhciBmPWM9PT0oZD8iYm9yZGVyIjoiY29udGVudCIpPzQ6IndpZHRoIj09PWI/MTowLGc9MDs0PmY7Zis9MikibWFyZ2luIj09PWMmJihnKz1uLmNzcyhhLGMrVltmXSwhMCxlKSksZD8oImNvbnRlbnQiPT09YyYmKGctPW4uY3NzKGEsInBhZGRpbmciK1ZbZl0sITAsZSkpLCJtYXJnaW4iIT09YyYmKGctPW4uY3NzKGEsImJvcmRlciIrVltmXSsiV2lkdGgiLCEwLGUpKSk6KGcrPW4uY3NzKGEsInBhZGRpbmciK1ZbZl0sITAsZSksInBhZGRpbmciIT09YyYmKGcrPW4uY3NzKGEsImJvcmRlciIrVltmXSsiV2lkdGgiLCEwLGUpKSk7cmV0dXJuIGd9ZnVuY3Rpb24gZmIoYSxiLGMpe3ZhciBkPSEwLGU9IndpZHRoIj09PWI/YS5vZmZzZXRXaWR0aDphLm9mZnNldEhlaWdodCxmPVJhKGEpLGc9bC5ib3hTaXppbmcmJiJib3JkZXItYm94Ij09PW4uY3NzKGEsImJveFNpemluZyIsITEsZik7aWYoMD49ZXx8bnVsbD09ZSl7aWYoZT1TYShhLGIsZiksKDA+ZXx8bnVsbD09ZSkmJihlPWEuc3R5bGVbYl0pLE9hLnRlc3QoZSkpcmV0dXJuIGU7ZD1nJiYobC5ib3hTaXppbmdSZWxpYWJsZSgpfHxlPT09YS5zdHlsZVtiXSksZT1wYXJzZUZsb2F0KGUpfHwwfXJldHVybiBlK2ViKGEsYixjfHwoZz8iYm9yZGVyIjoiY29udGVudCIpLGQsZikrInB4In1uLmV4dGVuZCh7Y3NzSG9va3M6e29wYWNpdHk6e2dldDpmdW5jdGlvbihhLGIpe2lmKGIpe3ZhciBjPVNhKGEsIm9wYWNpdHkiKTtyZXR1cm4iIj09PWM/IjEiOmN9fX19LGNzc051bWJlcjp7YW5pbWF0aW9uSXRlcmF0aW9uQ291bnQ6ITAsY29sdW1uQ291bnQ6ITAsZmlsbE9wYWNpdHk6ITAsZmxleEdyb3c6ITAsZmxleFNocmluazohMCxmb250V2VpZ2h0OiEwLGxpbmVIZWlnaHQ6ITAsb3BhY2l0eTohMCxvcmRlcjohMCxvcnBoYW5zOiEwLHdpZG93czohMCx6SW5kZXg6ITAsem9vbTohMH0sY3NzUHJvcHM6eyJmbG9hdCI6bC5jc3NGbG9hdD8iY3NzRmxvYXQiOiJzdHlsZUZsb2F0In0sc3R5bGU6ZnVuY3Rpb24oYSxiLGMsZCl7aWYoYSYmMyE9PWEubm9kZVR5cGUmJjghPT1hLm5vZGVUeXBlJiZhLnN0eWxlKXt2YXIgZSxmLGcsaD1uLmNhbWVsQ2FzZShiKSxpPWEuc3R5bGU7aWYoYj1uLmNzc1Byb3BzW2hdfHwobi5jc3NQcm9wc1toXT1iYihoKXx8aCksZz1uLmNzc0hvb2tzW2JdfHxuLmNzc0hvb2tzW2hdLHZvaWQgMD09PWMpcmV0dXJuIGcmJiJnZXQiaW4gZyYmdm9pZCAwIT09KGU9Zy5nZXQoYSwhMSxkKSk/ZTppW2JdO2lmKGY9dHlwZW9mIGMsInN0cmluZyI9PT1mJiYoZT1VLmV4ZWMoYykpJiZlWzFdJiYoYz1YKGEsYixlKSxmPSJudW1iZXIiKSxudWxsIT1jJiZjPT09YyYmKCJudW1iZXIiPT09ZiYmKGMrPWUmJmVbM118fChuLmNzc051bWJlcltoXT8iIjoicHgiKSksbC5jbGVhckNsb25lU3R5bGV8fCIiIT09Y3x8MCE9PWIuaW5kZXhPZigiYmFja2dyb3VuZCIpfHwoaVtiXT0iaW5oZXJpdCIpLCEoZyYmInNldCJpbiBnJiZ2b2lkIDA9PT0oYz1nLnNldChhLGMsZCkpKSkpdHJ5e2lbYl09Y31jYXRjaChqKXt9fX0sY3NzOmZ1bmN0aW9uKGEsYixjLGQpe3ZhciBlLGYsZyxoPW4uY2FtZWxDYXNlKGIpO3JldHVybiBiPW4uY3NzUHJvcHNbaF18fChuLmNzc1Byb3BzW2hdPWJiKGgpfHxoKSxnPW4uY3NzSG9va3NbYl18fG4uY3NzSG9va3NbaF0sZyYmImdldCJpbiBnJiYoZj1nLmdldChhLCEwLGMpKSx2b2lkIDA9PT1mJiYoZj1TYShhLGIsZCkpLCJub3JtYWwiPT09ZiYmYiBpbiAkYSYmKGY9JGFbYl0pLCIiPT09Y3x8Yz8oZT1wYXJzZUZsb2F0KGYpLGM9PT0hMHx8aXNGaW5pdGUoZSk/ZXx8MDpmKTpmfX0pLG4uZWFjaChbImhlaWdodCIsIndpZHRoIl0sZnVuY3Rpb24oYSxiKXtuLmNzc0hvb2tzW2JdPXtnZXQ6ZnVuY3Rpb24oYSxjLGQpe3JldHVybiBjP1hhLnRlc3Qobi5jc3MoYSwiZGlzcGxheSIpKSYmMD09PWEub2Zmc2V0V2lkdGg/UGEoYSxaYSxmdW5jdGlvbigpe3JldHVybiBmYihhLGIsZCl9KTpmYihhLGIsZCk6dm9pZCAwfSxzZXQ6ZnVuY3Rpb24oYSxjLGQpe3ZhciBlPWQmJlJhKGEpO3JldHVybiBkYihhLGMsZD9lYihhLGIsZCxsLmJveFNpemluZyYmImJvcmRlci1ib3giPT09bi5jc3MoYSwiYm94U2l6aW5nIiwhMSxlKSxlKTowKX19fSksbC5vcGFjaXR5fHwobi5jc3NIb29rcy5vcGFjaXR5PXtnZXQ6ZnVuY3Rpb24oYSxiKXtyZXR1cm4gV2EudGVzdCgoYiYmYS5jdXJyZW50U3R5bGU/YS5jdXJyZW50U3R5bGUuZmlsdGVyOmEuc3R5bGUuZmlsdGVyKXx8IiIpPy4wMSpwYXJzZUZsb2F0KFJlZ0V4cC4kMSkrIiI6Yj8iMSI6IiJ9LHNldDpmdW5jdGlvbihhLGIpe3ZhciBjPWEuc3R5bGUsZD1hLmN1cnJlbnRTdHlsZSxlPW4uaXNOdW1lcmljKGIpPyJhbHBoYShvcGFjaXR5PSIrMTAwKmIrIikiOiIiLGY9ZCYmZC5maWx0ZXJ8fGMuZmlsdGVyfHwiIjtjLnpvb209MSwoYj49MXx8IiI9PT1iKSYmIiI9PT1uLnRyaW0oZi5yZXBsYWNlKFZhLCIiKSkmJmMucmVtb3ZlQXR0cmlidXRlJiYoYy5yZW1vdmVBdHRyaWJ1dGUoImZpbHRlciIpLCIiPT09Ynx8ZCYmIWQuZmlsdGVyKXx8KGMuZmlsdGVyPVZhLnRlc3QoZik/Zi5yZXBsYWNlKFZhLGUpOmYrIiAiK2UpfX0pLG4uY3NzSG9va3MubWFyZ2luUmlnaHQ9VWEobC5yZWxpYWJsZU1hcmdpblJpZ2h0LGZ1bmN0aW9uKGEsYil7cmV0dXJuIGI/UGEoYSx7ZGlzcGxheToiaW5saW5lLWJsb2NrIn0sU2EsW2EsIm1hcmdpblJpZ2h0Il0pOnZvaWQgMH0pLG4uY3NzSG9va3MubWFyZ2luTGVmdD1VYShsLnJlbGlhYmxlTWFyZ2luTGVmdCxmdW5jdGlvbihhLGIpe3JldHVybiBiPyhwYXJzZUZsb2F0KFNhKGEsIm1hcmdpbkxlZnQiKSl8fChuLmNvbnRhaW5zKGEub3duZXJEb2N1bWVudCxhKT9hLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLmxlZnQtUGEoYSx7Cm1hcmdpbkxlZnQ6MH0sZnVuY3Rpb24oKXtyZXR1cm4gYS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS5sZWZ0fSk6MCkpKyJweCI6dm9pZCAwfSksbi5lYWNoKHttYXJnaW46IiIscGFkZGluZzoiIixib3JkZXI6IldpZHRoIn0sZnVuY3Rpb24oYSxiKXtuLmNzc0hvb2tzW2ErYl09e2V4cGFuZDpmdW5jdGlvbihjKXtmb3IodmFyIGQ9MCxlPXt9LGY9InN0cmluZyI9PXR5cGVvZiBjP2Muc3BsaXQoIiAiKTpbY107ND5kO2QrKyllW2ErVltkXStiXT1mW2RdfHxmW2QtMl18fGZbMF07cmV0dXJuIGV9fSxOYS50ZXN0KGEpfHwobi5jc3NIb29rc1thK2JdLnNldD1kYil9KSxuLmZuLmV4dGVuZCh7Y3NzOmZ1bmN0aW9uKGEsYil7cmV0dXJuIFkodGhpcyxmdW5jdGlvbihhLGIsYyl7dmFyIGQsZSxmPXt9LGc9MDtpZihuLmlzQXJyYXkoYikpe2ZvcihkPVJhKGEpLGU9Yi5sZW5ndGg7ZT5nO2crKylmW2JbZ11dPW4uY3NzKGEsYltnXSwhMSxkKTtyZXR1cm4gZn1yZXR1cm4gdm9pZCAwIT09Yz9uLnN0eWxlKGEsYixjKTpuLmNzcyhhLGIpfSxhLGIsYXJndW1lbnRzLmxlbmd0aD4xKX0sc2hvdzpmdW5jdGlvbigpe3JldHVybiBjYih0aGlzLCEwKX0saGlkZTpmdW5jdGlvbigpe3JldHVybiBjYih0aGlzKX0sdG9nZ2xlOmZ1bmN0aW9uKGEpe3JldHVybiJib29sZWFuIj09dHlwZW9mIGE/YT90aGlzLnNob3coKTp0aGlzLmhpZGUoKTp0aGlzLmVhY2goZnVuY3Rpb24oKXtXKHRoaXMpP24odGhpcykuc2hvdygpOm4odGhpcykuaGlkZSgpfSl9fSk7ZnVuY3Rpb24gZ2IoYSxiLGMsZCxlKXtyZXR1cm4gbmV3IGdiLnByb3RvdHlwZS5pbml0KGEsYixjLGQsZSl9bi5Ud2Vlbj1nYixnYi5wcm90b3R5cGU9e2NvbnN0cnVjdG9yOmdiLGluaXQ6ZnVuY3Rpb24oYSxiLGMsZCxlLGYpe3RoaXMuZWxlbT1hLHRoaXMucHJvcD1jLHRoaXMuZWFzaW5nPWV8fG4uZWFzaW5nLl9kZWZhdWx0LHRoaXMub3B0aW9ucz1iLHRoaXMuc3RhcnQ9dGhpcy5ub3c9dGhpcy5jdXIoKSx0aGlzLmVuZD1kLHRoaXMudW5pdD1mfHwobi5jc3NOdW1iZXJbY10/IiI6InB4Iil9LGN1cjpmdW5jdGlvbigpe3ZhciBhPWdiLnByb3BIb29rc1t0aGlzLnByb3BdO3JldHVybiBhJiZhLmdldD9hLmdldCh0aGlzKTpnYi5wcm9wSG9va3MuX2RlZmF1bHQuZ2V0KHRoaXMpfSxydW46ZnVuY3Rpb24oYSl7dmFyIGIsYz1nYi5wcm9wSG9va3NbdGhpcy5wcm9wXTtyZXR1cm4gdGhpcy5vcHRpb25zLmR1cmF0aW9uP3RoaXMucG9zPWI9bi5lYXNpbmdbdGhpcy5lYXNpbmddKGEsdGhpcy5vcHRpb25zLmR1cmF0aW9uKmEsMCwxLHRoaXMub3B0aW9ucy5kdXJhdGlvbik6dGhpcy5wb3M9Yj1hLHRoaXMubm93PSh0aGlzLmVuZC10aGlzLnN0YXJ0KSpiK3RoaXMuc3RhcnQsdGhpcy5vcHRpb25zLnN0ZXAmJnRoaXMub3B0aW9ucy5zdGVwLmNhbGwodGhpcy5lbGVtLHRoaXMubm93LHRoaXMpLGMmJmMuc2V0P2Muc2V0KHRoaXMpOmdiLnByb3BIb29rcy5fZGVmYXVsdC5zZXQodGhpcyksdGhpc319LGdiLnByb3RvdHlwZS5pbml0LnByb3RvdHlwZT1nYi5wcm90b3R5cGUsZ2IucHJvcEhvb2tzPXtfZGVmYXVsdDp7Z2V0OmZ1bmN0aW9uKGEpe3ZhciBiO3JldHVybiAxIT09YS5lbGVtLm5vZGVUeXBlfHxudWxsIT1hLmVsZW1bYS5wcm9wXSYmbnVsbD09YS5lbGVtLnN0eWxlW2EucHJvcF0/YS5lbGVtW2EucHJvcF06KGI9bi5jc3MoYS5lbGVtLGEucHJvcCwiIiksYiYmImF1dG8iIT09Yj9iOjApfSxzZXQ6ZnVuY3Rpb24oYSl7bi5meC5zdGVwW2EucHJvcF0/bi5meC5zdGVwW2EucHJvcF0oYSk6MSE9PWEuZWxlbS5ub2RlVHlwZXx8bnVsbD09YS5lbGVtLnN0eWxlW24uY3NzUHJvcHNbYS5wcm9wXV0mJiFuLmNzc0hvb2tzW2EucHJvcF0/YS5lbGVtW2EucHJvcF09YS5ub3c6bi5zdHlsZShhLmVsZW0sYS5wcm9wLGEubm93K2EudW5pdCl9fX0sZ2IucHJvcEhvb2tzLnNjcm9sbFRvcD1nYi5wcm9wSG9va3Muc2Nyb2xsTGVmdD17c2V0OmZ1bmN0aW9uKGEpe2EuZWxlbS5ub2RlVHlwZSYmYS5lbGVtLnBhcmVudE5vZGUmJihhLmVsZW1bYS5wcm9wXT1hLm5vdyl9fSxuLmVhc2luZz17bGluZWFyOmZ1bmN0aW9uKGEpe3JldHVybiBhfSxzd2luZzpmdW5jdGlvbihhKXtyZXR1cm4uNS1NYXRoLmNvcyhhKk1hdGguUEkpLzJ9LF9kZWZhdWx0OiJzd2luZyJ9LG4uZng9Z2IucHJvdG90eXBlLmluaXQsbi5meC5zdGVwPXt9O3ZhciBoYixpYixqYj0vXig/OnRvZ2dsZXxzaG93fGhpZGUpJC8sa2I9L3F1ZXVlSG9va3MkLztmdW5jdGlvbiBsYigpe3JldHVybiBhLnNldFRpbWVvdXQoZnVuY3Rpb24oKXtoYj12b2lkIDB9KSxoYj1uLm5vdygpfWZ1bmN0aW9uIG1iKGEsYil7dmFyIGMsZD17aGVpZ2h0OmF9LGU9MDtmb3IoYj1iPzE6MDs0PmU7ZSs9Mi1iKWM9VltlXSxkWyJtYXJnaW4iK2NdPWRbInBhZGRpbmciK2NdPWE7cmV0dXJuIGImJihkLm9wYWNpdHk9ZC53aWR0aD1hKSxkfWZ1bmN0aW9uIG5iKGEsYixjKXtmb3IodmFyIGQsZT0ocWIudHdlZW5lcnNbYl18fFtdKS5jb25jYXQocWIudHdlZW5lcnNbIioiXSksZj0wLGc9ZS5sZW5ndGg7Zz5mO2YrKylpZihkPWVbZl0uY2FsbChjLGIsYSkpcmV0dXJuIGR9ZnVuY3Rpb24gb2IoYSxiLGMpe3ZhciBkLGUsZixnLGgsaSxqLGssbT10aGlzLG89e30scD1hLnN0eWxlLHE9YS5ub2RlVHlwZSYmVyhhKSxyPW4uX2RhdGEoYSwiZnhzaG93Iik7Yy5xdWV1ZXx8KGg9bi5fcXVldWVIb29rcyhhLCJmeCIpLG51bGw9PWgudW5xdWV1ZWQmJihoLnVucXVldWVkPTAsaT1oLmVtcHR5LmZpcmUsaC5lbXB0eS5maXJlPWZ1bmN0aW9uKCl7aC51bnF1ZXVlZHx8aSgpfSksaC51bnF1ZXVlZCsrLG0uYWx3YXlzKGZ1bmN0aW9uKCl7bS5hbHdheXMoZnVuY3Rpb24oKXtoLnVucXVldWVkLS0sbi5xdWV1ZShhLCJmeCIpLmxlbmd0aHx8aC5lbXB0eS5maXJlKCl9KX0pKSwxPT09YS5ub2RlVHlwZSYmKCJoZWlnaHQiaW4gYnx8IndpZHRoImluIGIpJiYoYy5vdmVyZmxvdz1bcC5vdmVyZmxvdyxwLm92ZXJmbG93WCxwLm92ZXJmbG93WV0saj1uLmNzcyhhLCJkaXNwbGF5Iiksaz0ibm9uZSI9PT1qP24uX2RhdGEoYSwib2xkZGlzcGxheSIpfHxNYShhLm5vZGVOYW1lKTpqLCJpbmxpbmUiPT09ayYmIm5vbmUiPT09bi5jc3MoYSwiZmxvYXQiKSYmKGwuaW5saW5lQmxvY2tOZWVkc0xheW91dCYmImlubGluZSIhPT1NYShhLm5vZGVOYW1lKT9wLnpvb209MTpwLmRpc3BsYXk9ImlubGluZS1ibG9jayIpKSxjLm92ZXJmbG93JiYocC5vdmVyZmxvdz0iaGlkZGVuIixsLnNocmlua1dyYXBCbG9ja3MoKXx8bS5hbHdheXMoZnVuY3Rpb24oKXtwLm92ZXJmbG93PWMub3ZlcmZsb3dbMF0scC5vdmVyZmxvd1g9Yy5vdmVyZmxvd1sxXSxwLm92ZXJmbG93WT1jLm92ZXJmbG93WzJdfSkpO2ZvcihkIGluIGIpaWYoZT1iW2RdLGpiLmV4ZWMoZSkpe2lmKGRlbGV0ZSBiW2RdLGY9Znx8InRvZ2dsZSI9PT1lLGU9PT0ocT8iaGlkZSI6InNob3ciKSl7aWYoInNob3ciIT09ZXx8IXJ8fHZvaWQgMD09PXJbZF0pY29udGludWU7cT0hMH1vW2RdPXImJnJbZF18fG4uc3R5bGUoYSxkKX1lbHNlIGo9dm9pZCAwO2lmKG4uaXNFbXB0eU9iamVjdChvKSkiaW5saW5lIj09PSgibm9uZSI9PT1qP01hKGEubm9kZU5hbWUpOmopJiYocC5kaXNwbGF5PWopO2Vsc2V7cj8iaGlkZGVuImluIHImJihxPXIuaGlkZGVuKTpyPW4uX2RhdGEoYSwiZnhzaG93Iix7fSksZiYmKHIuaGlkZGVuPSFxKSxxP24oYSkuc2hvdygpOm0uZG9uZShmdW5jdGlvbigpe24oYSkuaGlkZSgpfSksbS5kb25lKGZ1bmN0aW9uKCl7dmFyIGI7bi5fcmVtb3ZlRGF0YShhLCJmeHNob3ciKTtmb3IoYiBpbiBvKW4uc3R5bGUoYSxiLG9bYl0pfSk7Zm9yKGQgaW4gbylnPW5iKHE/cltkXTowLGQsbSksZCBpbiByfHwocltkXT1nLnN0YXJ0LHEmJihnLmVuZD1nLnN0YXJ0LGcuc3RhcnQ9IndpZHRoIj09PWR8fCJoZWlnaHQiPT09ZD8xOjApKX19ZnVuY3Rpb24gcGIoYSxiKXt2YXIgYyxkLGUsZixnO2ZvcihjIGluIGEpaWYoZD1uLmNhbWVsQ2FzZShjKSxlPWJbZF0sZj1hW2NdLG4uaXNBcnJheShmKSYmKGU9ZlsxXSxmPWFbY109ZlswXSksYyE9PWQmJihhW2RdPWYsZGVsZXRlIGFbY10pLGc9bi5jc3NIb29rc1tkXSxnJiYiZXhwYW5kImluIGcpe2Y9Zy5leHBhbmQoZiksZGVsZXRlIGFbZF07Zm9yKGMgaW4gZiljIGluIGF8fChhW2NdPWZbY10sYltjXT1lKX1lbHNlIGJbZF09ZX1mdW5jdGlvbiBxYihhLGIsYyl7dmFyIGQsZSxmPTAsZz1xYi5wcmVmaWx0ZXJzLmxlbmd0aCxoPW4uRGVmZXJyZWQoKS5hbHdheXMoZnVuY3Rpb24oKXtkZWxldGUgaS5lbGVtfSksaT1mdW5jdGlvbigpe2lmKGUpcmV0dXJuITE7Zm9yKHZhciBiPWhifHxsYigpLGM9TWF0aC5tYXgoMCxqLnN0YXJ0VGltZStqLmR1cmF0aW9uLWIpLGQ9Yy9qLmR1cmF0aW9ufHwwLGY9MS1kLGc9MCxpPWoudHdlZW5zLmxlbmd0aDtpPmc7ZysrKWoudHdlZW5zW2ddLnJ1bihmKTtyZXR1cm4gaC5ub3RpZnlXaXRoKGEsW2osZixjXSksMT5mJiZpP2M6KGgucmVzb2x2ZVdpdGgoYSxbal0pLCExKX0saj1oLnByb21pc2Uoe2VsZW06YSxwcm9wczpuLmV4dGVuZCh7fSxiKSxvcHRzOm4uZXh0ZW5kKCEwLHtzcGVjaWFsRWFzaW5nOnt9LGVhc2luZzpuLmVhc2luZy5fZGVmYXVsdH0sYyksb3JpZ2luYWxQcm9wZXJ0aWVzOmIsb3JpZ2luYWxPcHRpb25zOmMsc3RhcnRUaW1lOmhifHxsYigpLGR1cmF0aW9uOmMuZHVyYXRpb24sdHdlZW5zOltdLGNyZWF0ZVR3ZWVuOmZ1bmN0aW9uKGIsYyl7dmFyIGQ9bi5Ud2VlbihhLGoub3B0cyxiLGMsai5vcHRzLnNwZWNpYWxFYXNpbmdbYl18fGoub3B0cy5lYXNpbmcpO3JldHVybiBqLnR3ZWVucy5wdXNoKGQpLGR9LHN0b3A6ZnVuY3Rpb24oYil7dmFyIGM9MCxkPWI/ai50d2VlbnMubGVuZ3RoOjA7aWYoZSlyZXR1cm4gdGhpcztmb3IoZT0hMDtkPmM7YysrKWoudHdlZW5zW2NdLnJ1bigxKTtyZXR1cm4gYj8oaC5ub3RpZnlXaXRoKGEsW2osMSwwXSksaC5yZXNvbHZlV2l0aChhLFtqLGJdKSk6aC5yZWplY3RXaXRoKGEsW2osYl0pLHRoaXN9fSksaz1qLnByb3BzO2ZvcihwYihrLGoub3B0cy5zcGVjaWFsRWFzaW5nKTtnPmY7ZisrKWlmKGQ9cWIucHJlZmlsdGVyc1tmXS5jYWxsKGosYSxrLGoub3B0cykpcmV0dXJuIG4uaXNGdW5jdGlvbihkLnN0b3ApJiYobi5fcXVldWVIb29rcyhqLmVsZW0sai5vcHRzLnF1ZXVlKS5zdG9wPW4ucHJveHkoZC5zdG9wLGQpKSxkO3JldHVybiBuLm1hcChrLG5iLGopLG4uaXNGdW5jdGlvbihqLm9wdHMuc3RhcnQpJiZqLm9wdHMuc3RhcnQuY2FsbChhLGopLG4uZngudGltZXIobi5leHRlbmQoaSx7ZWxlbTphLGFuaW06aixxdWV1ZTpqLm9wdHMucXVldWV9KSksai5wcm9ncmVzcyhqLm9wdHMucHJvZ3Jlc3MpLmRvbmUoai5vcHRzLmRvbmUsai5vcHRzLmNvbXBsZXRlKS5mYWlsKGoub3B0cy5mYWlsKS5hbHdheXMoai5vcHRzLmFsd2F5cyl9bi5BbmltYXRpb249bi5leHRlbmQocWIse3R3ZWVuZXJzOnsiKiI6W2Z1bmN0aW9uKGEsYil7dmFyIGM9dGhpcy5jcmVhdGVUd2VlbihhLGIpO3JldHVybiBYKGMuZWxlbSxhLFUuZXhlYyhiKSxjKSxjfV19LHR3ZWVuZXI6ZnVuY3Rpb24oYSxiKXtuLmlzRnVuY3Rpb24oYSk/KGI9YSxhPVsiKiJdKTphPWEubWF0Y2goRyk7Zm9yKHZhciBjLGQ9MCxlPWEubGVuZ3RoO2U+ZDtkKyspYz1hW2RdLHFiLnR3ZWVuZXJzW2NdPXFiLnR3ZWVuZXJzW2NdfHxbXSxxYi50d2VlbmVyc1tjXS51bnNoaWZ0KGIpfSxwcmVmaWx0ZXJzOltvYl0scHJlZmlsdGVyOmZ1bmN0aW9uKGEsYil7Yj9xYi5wcmVmaWx0ZXJzLnVuc2hpZnQoYSk6cWIucHJlZmlsdGVycy5wdXNoKGEpfX0pLG4uc3BlZWQ9ZnVuY3Rpb24oYSxiLGMpe3ZhciBkPWEmJiJvYmplY3QiPT10eXBlb2YgYT9uLmV4dGVuZCh7fSxhKTp7Y29tcGxldGU6Y3x8IWMmJmJ8fG4uaXNGdW5jdGlvbihhKSYmYSxkdXJhdGlvbjphLGVhc2luZzpjJiZifHxiJiYhbi5pc0Z1bmN0aW9uKGIpJiZifTtyZXR1cm4gZC5kdXJhdGlvbj1uLmZ4Lm9mZj8wOiJudW1iZXIiPT10eXBlb2YgZC5kdXJhdGlvbj9kLmR1cmF0aW9uOmQuZHVyYXRpb24gaW4gbi5meC5zcGVlZHM/bi5meC5zcGVlZHNbZC5kdXJhdGlvbl06bi5meC5zcGVlZHMuX2RlZmF1bHQsbnVsbCE9ZC5xdWV1ZSYmZC5xdWV1ZSE9PSEwfHwoZC5xdWV1ZT0iZngiKSxkLm9sZD1kLmNvbXBsZXRlLGQuY29tcGxldGU9ZnVuY3Rpb24oKXtuLmlzRnVuY3Rpb24oZC5vbGQpJiZkLm9sZC5jYWxsKHRoaXMpLGQucXVldWUmJm4uZGVxdWV1ZSh0aGlzLGQucXVldWUpfSxkfSxuLmZuLmV4dGVuZCh7ZmFkZVRvOmZ1bmN0aW9uKGEsYixjLGQpe3JldHVybiB0aGlzLmZpbHRlcihXKS5jc3MoIm9wYWNpdHkiLDApLnNob3coKS5lbmQoKS5hbmltYXRlKHtvcGFjaXR5OmJ9LGEsYyxkKX0sYW5pbWF0ZTpmdW5jdGlvbihhLGIsYyxkKXt2YXIgZT1uLmlzRW1wdHlPYmplY3QoYSksZj1uLnNwZWVkKGIsYyxkKSxnPWZ1bmN0aW9uKCl7dmFyIGI9cWIodGhpcyxuLmV4dGVuZCh7fSxhKSxmKTsoZXx8bi5fZGF0YSh0aGlzLCJmaW5pc2giKSkmJmIuc3RvcCghMCl9O3JldHVybiBnLmZpbmlzaD1nLGV8fGYucXVldWU9PT0hMT90aGlzLmVhY2goZyk6dGhpcy5xdWV1ZShmLnF1ZXVlLGcpfSxzdG9wOmZ1bmN0aW9uKGEsYixjKXt2YXIgZD1mdW5jdGlvbihhKXt2YXIgYj1hLnN0b3A7ZGVsZXRlIGEuc3RvcCxiKGMpfTtyZXR1cm4ic3RyaW5nIiE9dHlwZW9mIGEmJihjPWIsYj1hLGE9dm9pZCAwKSxiJiZhIT09ITEmJnRoaXMucXVldWUoYXx8ImZ4IixbXSksdGhpcy5lYWNoKGZ1bmN0aW9uKCl7dmFyIGI9ITAsZT1udWxsIT1hJiZhKyJxdWV1ZUhvb2tzIixmPW4udGltZXJzLGc9bi5fZGF0YSh0aGlzKTtpZihlKWdbZV0mJmdbZV0uc3RvcCYmZChnW2VdKTtlbHNlIGZvcihlIGluIGcpZ1tlXSYmZ1tlXS5zdG9wJiZrYi50ZXN0KGUpJiZkKGdbZV0pO2ZvcihlPWYubGVuZ3RoO2UtLTspZltlXS5lbGVtIT09dGhpc3x8bnVsbCE9YSYmZltlXS5xdWV1ZSE9PWF8fChmW2VdLmFuaW0uc3RvcChjKSxiPSExLGYuc3BsaWNlKGUsMSkpOyFiJiZjfHxuLmRlcXVldWUodGhpcyxhKX0pfSxmaW5pc2g6ZnVuY3Rpb24oYSl7cmV0dXJuIGEhPT0hMSYmKGE9YXx8ImZ4IiksdGhpcy5lYWNoKGZ1bmN0aW9uKCl7dmFyIGIsYz1uLl9kYXRhKHRoaXMpLGQ9Y1thKyJxdWV1ZSJdLGU9Y1thKyJxdWV1ZUhvb2tzIl0sZj1uLnRpbWVycyxnPWQ/ZC5sZW5ndGg6MDtmb3IoYy5maW5pc2g9ITAsbi5xdWV1ZSh0aGlzLGEsW10pLGUmJmUuc3RvcCYmZS5zdG9wLmNhbGwodGhpcywhMCksYj1mLmxlbmd0aDtiLS07KWZbYl0uZWxlbT09PXRoaXMmJmZbYl0ucXVldWU9PT1hJiYoZltiXS5hbmltLnN0b3AoITApLGYuc3BsaWNlKGIsMSkpO2ZvcihiPTA7Zz5iO2IrKylkW2JdJiZkW2JdLmZpbmlzaCYmZFtiXS5maW5pc2guY2FsbCh0aGlzKTtkZWxldGUgYy5maW5pc2h9KX19KSxuLmVhY2goWyJ0b2dnbGUiLCJzaG93IiwiaGlkZSJdLGZ1bmN0aW9uKGEsYil7dmFyIGM9bi5mbltiXTtuLmZuW2JdPWZ1bmN0aW9uKGEsZCxlKXtyZXR1cm4gbnVsbD09YXx8ImJvb2xlYW4iPT10eXBlb2YgYT9jLmFwcGx5KHRoaXMsYXJndW1lbnRzKTp0aGlzLmFuaW1hdGUobWIoYiwhMCksYSxkLGUpfX0pLG4uZWFjaCh7c2xpZGVEb3duOm1iKCJzaG93Iiksc2xpZGVVcDptYigiaGlkZSIpLHNsaWRlVG9nZ2xlOm1iKCJ0b2dnbGUiKSxmYWRlSW46e29wYWNpdHk6InNob3cifSxmYWRlT3V0OntvcGFjaXR5OiJoaWRlIn0sZmFkZVRvZ2dsZTp7b3BhY2l0eToidG9nZ2xlIn19LGZ1bmN0aW9uKGEsYil7bi5mblthXT1mdW5jdGlvbihhLGMsZCl7cmV0dXJuIHRoaXMuYW5pbWF0ZShiLGEsYyxkKX19KSxuLnRpbWVycz1bXSxuLmZ4LnRpY2s9ZnVuY3Rpb24oKXt2YXIgYSxiPW4udGltZXJzLGM9MDtmb3IoaGI9bi5ub3coKTtjPGIubGVuZ3RoO2MrKylhPWJbY10sYSgpfHxiW2NdIT09YXx8Yi5zcGxpY2UoYy0tLDEpO2IubGVuZ3RofHxuLmZ4LnN0b3AoKSxoYj12b2lkIDB9LG4uZngudGltZXI9ZnVuY3Rpb24oYSl7bi50aW1lcnMucHVzaChhKSxhKCk/bi5meC5zdGFydCgpOm4udGltZXJzLnBvcCgpfSxuLmZ4LmludGVydmFsPTEzLG4uZnguc3RhcnQ9ZnVuY3Rpb24oKXtpYnx8KGliPWEuc2V0SW50ZXJ2YWwobi5meC50aWNrLG4uZnguaW50ZXJ2YWwpKX0sbi5meC5zdG9wPWZ1bmN0aW9uKCl7YS5jbGVhckludGVydmFsKGliKSxpYj1udWxsfSxuLmZ4LnNwZWVkcz17c2xvdzo2MDAsZmFzdDoyMDAsX2RlZmF1bHQ6NDAwfSxuLmZuLmRlbGF5PWZ1bmN0aW9uKGIsYyl7cmV0dXJuIGI9bi5meD9uLmZ4LnNwZWVkc1tiXXx8YjpiLGM9Y3x8ImZ4Iix0aGlzLnF1ZXVlKGMsZnVuY3Rpb24oYyxkKXt2YXIgZT1hLnNldFRpbWVvdXQoYyxiKTtkLnN0b3A9ZnVuY3Rpb24oKXthLmNsZWFyVGltZW91dChlKX19KX0sZnVuY3Rpb24oKXt2YXIgYSxiPWQuY3JlYXRlRWxlbWVudCgiaW5wdXQiKSxjPWQuY3JlYXRlRWxlbWVudCgiZGl2IiksZT1kLmNyZWF0ZUVsZW1lbnQoInNlbGVjdCIpLGY9ZS5hcHBlbmRDaGlsZChkLmNyZWF0ZUVsZW1lbnQoIm9wdGlvbiIpKTtjPWQuY3JlYXRlRWxlbWVudCgiZGl2IiksYy5zZXRBdHRyaWJ1dGUoImNsYXNzTmFtZSIsInQiKSxjLmlubmVySFRNTD0iICA8bGluay8+PHRhYmxlPjwvdGFibGU+PGEgaHJlZj0nL2EnPmE8L2E+PGlucHV0IHR5cGU9J2NoZWNrYm94Jy8+IixhPWMuZ2V0RWxlbWVudHNCeVRhZ05hbWUoImEiKVswXSxiLnNldEF0dHJpYnV0ZSgidHlwZSIsImNoZWNrYm94IiksYy5hcHBlbmRDaGlsZChiKSxhPWMuZ2V0RWxlbWVudHNCeVRhZ05hbWUoImEiKVswXSxhLnN0eWxlLmNzc1RleHQ9InRvcDoxcHgiLGwuZ2V0U2V0QXR0cmlidXRlPSJ0IiE9PWMuY2xhc3NOYW1lLGwuc3R5bGU9L3RvcC8udGVzdChhLmdldEF0dHJpYnV0ZSgic3R5bGUiKSksbC5ocmVmTm9ybWFsaXplZD0iL2EiPT09YS5nZXRBdHRyaWJ1dGUoImhyZWYiKSxsLmNoZWNrT249ISFiLnZhbHVlLGwub3B0U2VsZWN0ZWQ9Zi5zZWxlY3RlZCxsLmVuY3R5cGU9ISFkLmNyZWF0ZUVsZW1lbnQoImZvcm0iKS5lbmN0eXBlLGUuZGlzYWJsZWQ9ITAsbC5vcHREaXNhYmxlZD0hZi5kaXNhYmxlZCxiPWQuY3JlYXRlRWxlbWVudCgiaW5wdXQiKSxiLnNldEF0dHJpYnV0ZSgidmFsdWUiLCIiKSxsLmlucHV0PSIiPT09Yi5nZXRBdHRyaWJ1dGUoInZhbHVlIiksYi52YWx1ZT0idCIsYi5zZXRBdHRyaWJ1dGUoInR5cGUiLCJyYWRpbyIpLGwucmFkaW9WYWx1ZT0idCI9PT1iLnZhbHVlfSgpO3ZhciByYj0vXHIvZyxzYj0vW1x4MjBcdFxyXG5cZl0rL2c7bi5mbi5leHRlbmQoe3ZhbDpmdW5jdGlvbihhKXt2YXIgYixjLGQsZT10aGlzWzBdO3tpZihhcmd1bWVudHMubGVuZ3RoKXJldHVybiBkPW4uaXNGdW5jdGlvbihhKSx0aGlzLmVhY2goZnVuY3Rpb24oYyl7dmFyIGU7MT09PXRoaXMubm9kZVR5cGUmJihlPWQ/YS5jYWxsKHRoaXMsYyxuKHRoaXMpLnZhbCgpKTphLG51bGw9PWU/ZT0iIjoibnVtYmVyIj09dHlwZW9mIGU/ZSs9IiI6bi5pc0FycmF5KGUpJiYoZT1uLm1hcChlLGZ1bmN0aW9uKGEpe3JldHVybiBudWxsPT1hPyIiOmErIiJ9KSksYj1uLnZhbEhvb2tzW3RoaXMudHlwZV18fG4udmFsSG9va3NbdGhpcy5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpXSxiJiYic2V0ImluIGImJnZvaWQgMCE9PWIuc2V0KHRoaXMsZSwidmFsdWUiKXx8KHRoaXMudmFsdWU9ZSkpfSk7aWYoZSlyZXR1cm4gYj1uLnZhbEhvb2tzW2UudHlwZV18fG4udmFsSG9va3NbZS5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpXSxiJiYiZ2V0ImluIGImJnZvaWQgMCE9PShjPWIuZ2V0KGUsInZhbHVlIikpP2M6KGM9ZS52YWx1ZSwic3RyaW5nIj09dHlwZW9mIGM/Yy5yZXBsYWNlKHJiLCIiKTpudWxsPT1jPyIiOmMpfX19KSxuLmV4dGVuZCh7dmFsSG9va3M6e29wdGlvbjp7Z2V0OmZ1bmN0aW9uKGEpe3ZhciBiPW4uZmluZC5hdHRyKGEsInZhbHVlIik7cmV0dXJuIG51bGwhPWI/YjpuLnRyaW0obi50ZXh0KGEpKS5yZXBsYWNlKHNiLCIgIil9fSxzZWxlY3Q6e2dldDpmdW5jdGlvbihhKXtmb3IodmFyIGIsYyxkPWEub3B0aW9ucyxlPWEuc2VsZWN0ZWRJbmRleCxmPSJzZWxlY3Qtb25lIj09PWEudHlwZXx8MD5lLGc9Zj9udWxsOltdLGg9Zj9lKzE6ZC5sZW5ndGgsaT0wPmU/aDpmP2U6MDtoPmk7aSsrKWlmKGM9ZFtpXSwoYy5zZWxlY3RlZHx8aT09PWUpJiYobC5vcHREaXNhYmxlZD8hYy5kaXNhYmxlZDpudWxsPT09Yy5nZXRBdHRyaWJ1dGUoImRpc2FibGVkIikpJiYoIWMucGFyZW50Tm9kZS5kaXNhYmxlZHx8IW4ubm9kZU5hbWUoYy5wYXJlbnROb2RlLCJvcHRncm91cCIpKSl7aWYoYj1uKGMpLnZhbCgpLGYpcmV0dXJuIGI7Zy5wdXNoKGIpfXJldHVybiBnfSxzZXQ6ZnVuY3Rpb24oYSxiKXt2YXIgYyxkLGU9YS5vcHRpb25zLGY9bi5tYWtlQXJyYXkoYiksZz1lLmxlbmd0aDt3aGlsZShnLS0paWYoZD1lW2ddLG4uaW5BcnJheShuLnZhbEhvb2tzLm9wdGlvbi5nZXQoZCksZik+LTEpdHJ5e2Quc2VsZWN0ZWQ9Yz0hMH1jYXRjaChoKXtkLnNjcm9sbEhlaWdodH1lbHNlIGQuc2VsZWN0ZWQ9ITE7cmV0dXJuIGN8fChhLnNlbGVjdGVkSW5kZXg9LTEpLGV9fX19KSxuLmVhY2goWyJyYWRpbyIsImNoZWNrYm94Il0sZnVuY3Rpb24oKXtuLnZhbEhvb2tzW3RoaXNdPXtzZXQ6ZnVuY3Rpb24oYSxiKXtyZXR1cm4gbi5pc0FycmF5KGIpP2EuY2hlY2tlZD1uLmluQXJyYXkobihhKS52YWwoKSxiKT4tMTp2b2lkIDB9fSxsLmNoZWNrT258fChuLnZhbEhvb2tzW3RoaXNdLmdldD1mdW5jdGlvbihhKXtyZXR1cm4gbnVsbD09PWEuZ2V0QXR0cmlidXRlKCJ2YWx1ZSIpPyJvbiI6YS52YWx1ZX0pfSk7dmFyIHRiLHViLHZiPW4uZXhwci5hdHRySGFuZGxlLHdiPS9eKD86Y2hlY2tlZHxzZWxlY3RlZCkkL2kseGI9bC5nZXRTZXRBdHRyaWJ1dGUseWI9bC5pbnB1dDtuLmZuLmV4dGVuZCh7YXR0cjpmdW5jdGlvbihhLGIpe3JldHVybiBZKHRoaXMsbi5hdHRyLGEsYixhcmd1bWVudHMubGVuZ3RoPjEpfSxyZW1vdmVBdHRyOmZ1bmN0aW9uKGEpe3JldHVybiB0aGlzLmVhY2goZnVuY3Rpb24oKXtuLnJlbW92ZUF0dHIodGhpcyxhKX0pfX0pLG4uZXh0ZW5kKHthdHRyOmZ1bmN0aW9uKGEsYixjKXt2YXIgZCxlLGY9YS5ub2RlVHlwZTtpZigzIT09ZiYmOCE9PWYmJjIhPT1mKXJldHVybiJ1bmRlZmluZWQiPT10eXBlb2YgYS5nZXRBdHRyaWJ1dGU/bi5wcm9wKGEsYixjKTooMT09PWYmJm4uaXNYTUxEb2MoYSl8fChiPWIudG9Mb3dlckNhc2UoKSxlPW4uYXR0ckhvb2tzW2JdfHwobi5leHByLm1hdGNoLmJvb2wudGVzdChiKT91Yjp0YikpLHZvaWQgMCE9PWM/bnVsbD09PWM/dm9pZCBuLnJlbW92ZUF0dHIoYSxiKTplJiYic2V0ImluIGUmJnZvaWQgMCE9PShkPWUuc2V0KGEsYyxiKSk/ZDooYS5zZXRBdHRyaWJ1dGUoYixjKyIiKSxjKTplJiYiZ2V0ImluIGUmJm51bGwhPT0oZD1lLmdldChhLGIpKT9kOihkPW4uZmluZC5hdHRyKGEsYiksbnVsbD09ZD92b2lkIDA6ZCkpfSxhdHRySG9va3M6e3R5cGU6e3NldDpmdW5jdGlvbihhLGIpe2lmKCFsLnJhZGlvVmFsdWUmJiJyYWRpbyI9PT1iJiZuLm5vZGVOYW1lKGEsImlucHV0Iikpe3ZhciBjPWEudmFsdWU7cmV0dXJuIGEuc2V0QXR0cmlidXRlKCJ0eXBlIixiKSxjJiYoYS52YWx1ZT1jKSxifX19fSxyZW1vdmVBdHRyOmZ1bmN0aW9uKGEsYil7dmFyIGMsZCxlPTAsZj1iJiZiLm1hdGNoKEcpO2lmKGYmJjE9PT1hLm5vZGVUeXBlKXdoaWxlKGM9ZltlKytdKWQ9bi5wcm9wRml4W2NdfHxjLG4uZXhwci5tYXRjaC5ib29sLnRlc3QoYyk/eWImJnhifHwhd2IudGVzdChjKT9hW2RdPSExOmFbbi5jYW1lbENhc2UoImRlZmF1bHQtIitjKV09YVtkXT0hMTpuLmF0dHIoYSxjLCIiKSxhLnJlbW92ZUF0dHJpYnV0ZSh4Yj9jOmQpfX0pLHViPXtzZXQ6ZnVuY3Rpb24oYSxiLGMpe3JldHVybiBiPT09ITE/bi5yZW1vdmVBdHRyKGEsYyk6eWImJnhifHwhd2IudGVzdChjKT9hLnNldEF0dHJpYnV0ZSgheGImJm4ucHJvcEZpeFtjXXx8YyxjKTphW24uY2FtZWxDYXNlKCJkZWZhdWx0LSIrYyldPWFbY109ITAsY319LG4uZWFjaChuLmV4cHIubWF0Y2guYm9vbC5zb3VyY2UubWF0Y2goL1x3Ky9nKSxmdW5jdGlvbihhLGIpe3ZhciBjPXZiW2JdfHxuLmZpbmQuYXR0cjt5YiYmeGJ8fCF3Yi50ZXN0KGIpP3ZiW2JdPWZ1bmN0aW9uKGEsYixkKXt2YXIgZSxmO3JldHVybiBkfHwoZj12YltiXSx2YltiXT1lLGU9bnVsbCE9YyhhLGIsZCk/Yi50b0xvd2VyQ2FzZSgpOm51bGwsdmJbYl09ZiksZX06dmJbYl09ZnVuY3Rpb24oYSxiLGMpe3JldHVybiBjP3ZvaWQgMDphW24uY2FtZWxDYXNlKCJkZWZhdWx0LSIrYildP2IudG9Mb3dlckNhc2UoKTpudWxsfX0pLHliJiZ4Ynx8KG4uYXR0ckhvb2tzLnZhbHVlPXtzZXQ6ZnVuY3Rpb24oYSxiLGMpe3JldHVybiBuLm5vZGVOYW1lKGEsImlucHV0Iik/dm9pZChhLmRlZmF1bHRWYWx1ZT1iKTp0YiYmdGIuc2V0KGEsYixjKX19KSx4Ynx8KHRiPXtzZXQ6ZnVuY3Rpb24oYSxiLGMpe3ZhciBkPWEuZ2V0QXR0cmlidXRlTm9kZShjKTtyZXR1cm4gZHx8YS5zZXRBdHRyaWJ1dGVOb2RlKGQ9YS5vd25lckRvY3VtZW50LmNyZWF0ZUF0dHJpYnV0ZShjKSksZC52YWx1ZT1iKz0iIiwidmFsdWUiPT09Y3x8Yj09PWEuZ2V0QXR0cmlidXRlKGMpP2I6dm9pZCAwfX0sdmIuaWQ9dmIubmFtZT12Yi5jb29yZHM9ZnVuY3Rpb24oYSxiLGMpe3ZhciBkO3JldHVybiBjP3ZvaWQgMDooZD1hLmdldEF0dHJpYnV0ZU5vZGUoYikpJiYiIiE9PWQudmFsdWU/ZC52YWx1ZTpudWxsfSxuLnZhbEhvb2tzLmJ1dHRvbj17Z2V0OmZ1bmN0aW9uKGEsYil7dmFyIGM9YS5nZXRBdHRyaWJ1dGVOb2RlKGIpO3JldHVybiBjJiZjLnNwZWNpZmllZD9jLnZhbHVlOnZvaWQgMH0sc2V0OnRiLnNldH0sbi5hdHRySG9va3MuY29udGVudGVkaXRhYmxlPXtzZXQ6ZnVuY3Rpb24oYSxiLGMpe3RiLnNldChhLCIiPT09Yj8hMTpiLGMpfX0sbi5lYWNoKFsid2lkdGgiLCJoZWlnaHQiXSxmdW5jdGlvbihhLGIpe24uYXR0ckhvb2tzW2JdPXtzZXQ6ZnVuY3Rpb24oYSxjKXtyZXR1cm4iIj09PWM/KGEuc2V0QXR0cmlidXRlKGIsImF1dG8iKSxjKTp2b2lkIDB9fX0pKSxsLnN0eWxlfHwobi5hdHRySG9va3Muc3R5bGU9e2dldDpmdW5jdGlvbihhKXtyZXR1cm4gYS5zdHlsZS5jc3NUZXh0fHx2b2lkIDB9LHNldDpmdW5jdGlvbihhLGIpe3JldHVybiBhLnN0eWxlLmNzc1RleHQ9YisiIn19KTt2YXIgemI9L14oPzppbnB1dHxzZWxlY3R8dGV4dGFyZWF8YnV0dG9ufG9iamVjdCkkL2ksQWI9L14oPzphfGFyZWEpJC9pO24uZm4uZXh0ZW5kKHtwcm9wOmZ1bmN0aW9uKGEsYil7cmV0dXJuIFkodGhpcyxuLnByb3AsYSxiLGFyZ3VtZW50cy5sZW5ndGg+MSl9LHJlbW92ZVByb3A6ZnVuY3Rpb24oYSl7cmV0dXJuIGE9bi5wcm9wRml4W2FdfHxhLHRoaXMuZWFjaChmdW5jdGlvbigpe3RyeXt0aGlzW2FdPXZvaWQgMCxkZWxldGUgdGhpc1thXX1jYXRjaChiKXt9fSl9fSksbi5leHRlbmQoe3Byb3A6ZnVuY3Rpb24oYSxiLGMpe3ZhciBkLGUsZj1hLm5vZGVUeXBlO2lmKDMhPT1mJiY4IT09ZiYmMiE9PWYpcmV0dXJuIDE9PT1mJiZuLmlzWE1MRG9jKGEpfHwoYj1uLnByb3BGaXhbYl18fGIsZT1uLnByb3BIb29rc1tiXSksdm9pZCAwIT09Yz9lJiYic2V0ImluIGUmJnZvaWQgMCE9PShkPWUuc2V0KGEsYyxiKSk/ZDphW2JdPWM6ZSYmImdldCJpbiBlJiZudWxsIT09KGQ9ZS5nZXQoYSxiKSk/ZDphW2JdfSxwcm9wSG9va3M6e3RhYkluZGV4OntnZXQ6ZnVuY3Rpb24oYSl7dmFyIGI9bi5maW5kLmF0dHIoYSwidGFiaW5kZXgiKTtyZXR1cm4gYj9wYXJzZUludChiLDEwKTp6Yi50ZXN0KGEubm9kZU5hbWUpfHxBYi50ZXN0KGEubm9kZU5hbWUpJiZhLmhyZWY/MDotMX19fSxwcm9wRml4OnsiZm9yIjoiaHRtbEZvciIsImNsYXNzIjoiY2xhc3NOYW1lIn19KSxsLmhyZWZOb3JtYWxpemVkfHxuLmVhY2goWyJocmVmIiwic3JjIl0sZnVuY3Rpb24oYSxiKXtuLnByb3BIb29rc1tiXT17Z2V0OmZ1bmN0aW9uKGEpe3JldHVybiBhLmdldEF0dHJpYnV0ZShiLDQpfX19KSxsLm9wdFNlbGVjdGVkfHwobi5wcm9wSG9va3Muc2VsZWN0ZWQ9e2dldDpmdW5jdGlvbihhKXt2YXIgYj1hLnBhcmVudE5vZGU7cmV0dXJuIGImJihiLnNlbGVjdGVkSW5kZXgsYi5wYXJlbnROb2RlJiZiLnBhcmVudE5vZGUuc2VsZWN0ZWRJbmRleCksbnVsbH0sc2V0OmZ1bmN0aW9uKGEpe3ZhciBiPWEucGFyZW50Tm9kZTtiJiYoYi5zZWxlY3RlZEluZGV4LGIucGFyZW50Tm9kZSYmYi5wYXJlbnROb2RlLnNlbGVjdGVkSW5kZXgpfX0pLG4uZWFjaChbInRhYkluZGV4IiwicmVhZE9ubHkiLCJtYXhMZW5ndGgiLCJjZWxsU3BhY2luZyIsImNlbGxQYWRkaW5nIiwicm93U3BhbiIsImNvbFNwYW4iLCJ1c2VNYXAiLCJmcmFtZUJvcmRlciIsImNvbnRlbnRFZGl0YWJsZSJdLGZ1bmN0aW9uKCl7bi5wcm9wRml4W3RoaXMudG9Mb3dlckNhc2UoKV09dGhpc30pLGwuZW5jdHlwZXx8KG4ucHJvcEZpeC5lbmN0eXBlPSJlbmNvZGluZyIpO3ZhciBCYj0vW1x0XHJcblxmXS9nO2Z1bmN0aW9uIENiKGEpe3JldHVybiBuLmF0dHIoYSwiY2xhc3MiKXx8IiJ9bi5mbi5leHRlbmQoe2FkZENsYXNzOmZ1bmN0aW9uKGEpe3ZhciBiLGMsZCxlLGYsZyxoLGk9MDtpZihuLmlzRnVuY3Rpb24oYSkpcmV0dXJuIHRoaXMuZWFjaChmdW5jdGlvbihiKXtuKHRoaXMpLmFkZENsYXNzKGEuY2FsbCh0aGlzLGIsQ2IodGhpcykpKX0pO2lmKCJzdHJpbmciPT10eXBlb2YgYSYmYSl7Yj1hLm1hdGNoKEcpfHxbXTt3aGlsZShjPXRoaXNbaSsrXSlpZihlPUNiKGMpLGQ9MT09PWMubm9kZVR5cGUmJigiICIrZSsiICIpLnJlcGxhY2UoQmIsIiAiKSl7Zz0wO3doaWxlKGY9YltnKytdKWQuaW5kZXhPZigiICIrZisiICIpPDAmJihkKz1mKyIgIik7aD1uLnRyaW0oZCksZSE9PWgmJm4uYXR0cihjLCJjbGFzcyIsaCl9fXJldHVybiB0aGlzfSxyZW1vdmVDbGFzczpmdW5jdGlvbihhKXt2YXIgYixjLGQsZSxmLGcsaCxpPTA7aWYobi5pc0Z1bmN0aW9uKGEpKXJldHVybiB0aGlzLmVhY2goZnVuY3Rpb24oYil7bih0aGlzKS5yZW1vdmVDbGFzcyhhLmNhbGwodGhpcyxiLENiKHRoaXMpKSl9KTtpZighYXJndW1lbnRzLmxlbmd0aClyZXR1cm4gdGhpcy5hdHRyKCJjbGFzcyIsIiIpO2lmKCJzdHJpbmciPT10eXBlb2YgYSYmYSl7Yj1hLm1hdGNoKEcpfHxbXTt3aGlsZShjPXRoaXNbaSsrXSlpZihlPUNiKGMpLGQ9MT09PWMubm9kZVR5cGUmJigiICIrZSsiICIpLnJlcGxhY2UoQmIsIiAiKSl7Zz0wO3doaWxlKGY9YltnKytdKXdoaWxlKGQuaW5kZXhPZigiICIrZisiICIpPi0xKWQ9ZC5yZXBsYWNlKCIgIitmKyIgIiwiICIpO2g9bi50cmltKGQpLGUhPT1oJiZuLmF0dHIoYywiY2xhc3MiLGgpfX1yZXR1cm4gdGhpc30sdG9nZ2xlQ2xhc3M6ZnVuY3Rpb24oYSxiKXt2YXIgYz10eXBlb2YgYTtyZXR1cm4iYm9vbGVhbiI9PXR5cGVvZiBiJiYic3RyaW5nIj09PWM/Yj90aGlzLmFkZENsYXNzKGEpOnRoaXMucmVtb3ZlQ2xhc3MoYSk6bi5pc0Z1bmN0aW9uKGEpP3RoaXMuZWFjaChmdW5jdGlvbihjKXtuKHRoaXMpLnRvZ2dsZUNsYXNzKGEuY2FsbCh0aGlzLGMsQ2IodGhpcyksYiksYil9KTp0aGlzLmVhY2goZnVuY3Rpb24oKXt2YXIgYixkLGUsZjtpZigic3RyaW5nIj09PWMpe2Q9MCxlPW4odGhpcyksZj1hLm1hdGNoKEcpfHxbXTt3aGlsZShiPWZbZCsrXSllLmhhc0NsYXNzKGIpP2UucmVtb3ZlQ2xhc3MoYik6ZS5hZGRDbGFzcyhiKX1lbHNlIHZvaWQgMCE9PWEmJiJib29sZWFuIiE9PWN8fChiPUNiKHRoaXMpLGImJm4uX2RhdGEodGhpcywiX19jbGFzc05hbWVfXyIsYiksbi5hdHRyKHRoaXMsImNsYXNzIixifHxhPT09ITE/IiI6bi5fZGF0YSh0aGlzLCJfX2NsYXNzTmFtZV9fIil8fCIiKSl9KX0saGFzQ2xhc3M6ZnVuY3Rpb24oYSl7dmFyIGIsYyxkPTA7Yj0iICIrYSsiICI7d2hpbGUoYz10aGlzW2QrK10paWYoMT09PWMubm9kZVR5cGUmJigiICIrQ2IoYykrIiAiKS5yZXBsYWNlKEJiLCIgIikuaW5kZXhPZihiKT4tMSlyZXR1cm4hMDtyZXR1cm4hMX19KSxuLmVhY2goImJsdXIgZm9jdXMgZm9jdXNpbiBmb2N1c291dCBsb2FkIHJlc2l6ZSBzY3JvbGwgdW5sb2FkIGNsaWNrIGRibGNsaWNrIG1vdXNlZG93biBtb3VzZXVwIG1vdXNlbW92ZSBtb3VzZW92ZXIgbW91c2VvdXQgbW91c2VlbnRlciBtb3VzZWxlYXZlIGNoYW5nZSBzZWxlY3Qgc3VibWl0IGtleWRvd24ga2V5cHJlc3Mga2V5dXAgZXJyb3IgY29udGV4dG1lbnUiLnNwbGl0KCIgIiksZnVuY3Rpb24oYSxiKXtuLmZuW2JdPWZ1bmN0aW9uKGEsYyl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg+MD90aGlzLm9uKGIsbnVsbCxhLGMpOnRoaXMudHJpZ2dlcihiKX19KSxuLmZuLmV4dGVuZCh7aG92ZXI6ZnVuY3Rpb24oYSxiKXtyZXR1cm4gdGhpcy5tb3VzZWVudGVyKGEpLm1vdXNlbGVhdmUoYnx8YSl9fSk7dmFyIERiPWEubG9jYXRpb24sRWI9bi5ub3coKSxGYj0vXD8vLEdiPS8oLCl8KFxbfHspfCh9fF0pfCIoPzpbXiJcXFxyXG5dfFxcWyJcXFwvYmZucnRdfFxcdVtcZGEtZkEtRl17NH0pKiJccyo6P3x0cnVlfGZhbHNlfG51bGx8LT8oPyEwXGQpXGQrKD86XC5cZCt8KSg/OltlRV1bKy1dP1xkK3wpL2c7bi5wYXJzZUpTT049ZnVuY3Rpb24oYil7aWYoYS5KU09OJiZhLkpTT04ucGFyc2UpcmV0dXJuIGEuSlNPTi5wYXJzZShiKyIiKTt2YXIgYyxkPW51bGwsZT1uLnRyaW0oYisiIik7cmV0dXJuIGUmJiFuLnRyaW0oZS5yZXBsYWNlKEdiLGZ1bmN0aW9uKGEsYixlLGYpe3JldHVybiBjJiZiJiYoZD0wKSwwPT09ZD9hOihjPWV8fGIsZCs9IWYtIWUsIiIpfSkpP0Z1bmN0aW9uKCJyZXR1cm4gIitlKSgpOm4uZXJyb3IoIkludmFsaWQgSlNPTjogIitiKX0sbi5wYXJzZVhNTD1mdW5jdGlvbihiKXt2YXIgYyxkO2lmKCFifHwic3RyaW5nIiE9dHlwZW9mIGIpcmV0dXJuIG51bGw7dHJ5e2EuRE9NUGFyc2VyPyhkPW5ldyBhLkRPTVBhcnNlcixjPWQucGFyc2VGcm9tU3RyaW5nKGIsInRleHQveG1sIikpOihjPW5ldyBhLkFjdGl2ZVhPYmplY3QoIk1pY3Jvc29mdC5YTUxET00iKSxjLmFzeW5jPSJmYWxzZSIsYy5sb2FkWE1MKGIpKX1jYXRjaChlKXtjPXZvaWQgMH1yZXR1cm4gYyYmYy5kb2N1bWVudEVsZW1lbnQmJiFjLmdldEVsZW1lbnRzQnlUYWdOYW1lKCJwYXJzZXJlcnJvciIpLmxlbmd0aHx8bi5lcnJvcigiSW52YWxpZCBYTUw6ICIrYiksY307dmFyIEhiPS8jLiokLyxJYj0vKFs/Jl0pXz1bXiZdKi8sSmI9L14oLio/KTpbIFx0XSooW15cclxuXSopXHI/JC9nbSxLYj0vXig/OmFib3V0fGFwcHxhcHAtc3RvcmFnZXwuKy1leHRlbnNpb258ZmlsZXxyZXN8d2lkZ2V0KTokLyxMYj0vXig/OkdFVHxIRUFEKSQvLE1iPS9eXC9cLy8sTmI9L14oW1x3ListXSs6KSg/OlwvXC8oPzpbXlwvPyNdKkB8KShbXlwvPyM6XSopKD86OihcZCspfCl8KS8sT2I9e30sUGI9e30sUWI9IiovIi5jb25jYXQoIioiKSxSYj1EYi5ocmVmLFNiPU5iLmV4ZWMoUmIudG9Mb3dlckNhc2UoKSl8fFtdO2Z1bmN0aW9uIFRiKGEpe3JldHVybiBmdW5jdGlvbihiLGMpeyJzdHJpbmciIT10eXBlb2YgYiYmKGM9YixiPSIqIik7dmFyIGQsZT0wLGY9Yi50b0xvd2VyQ2FzZSgpLm1hdGNoKEcpfHxbXTtpZihuLmlzRnVuY3Rpb24oYykpd2hpbGUoZD1mW2UrK10pIisiPT09ZC5jaGFyQXQoMCk/KGQ9ZC5zbGljZSgxKXx8IioiLChhW2RdPWFbZF18fFtdKS51bnNoaWZ0KGMpKTooYVtkXT1hW2RdfHxbXSkucHVzaChjKX19ZnVuY3Rpb24gVWIoYSxiLGMsZCl7dmFyIGU9e30sZj1hPT09UGI7ZnVuY3Rpb24gZyhoKXt2YXIgaTtyZXR1cm4gZVtoXT0hMCxuLmVhY2goYVtoXXx8W10sZnVuY3Rpb24oYSxoKXt2YXIgaj1oKGIsYyxkKTtyZXR1cm4ic3RyaW5nIiE9dHlwZW9mIGp8fGZ8fGVbal0/Zj8hKGk9aik6dm9pZCAwOihiLmRhdGFUeXBlcy51bnNoaWZ0KGopLGcoaiksITEpfSksaX1yZXR1cm4gZyhiLmRhdGFUeXBlc1swXSl8fCFlWyIqIl0mJmcoIioiKX1mdW5jdGlvbiBWYihhLGIpe3ZhciBjLGQsZT1uLmFqYXhTZXR0aW5ncy5mbGF0T3B0aW9uc3x8e307Zm9yKGQgaW4gYil2b2lkIDAhPT1iW2RdJiYoKGVbZF0/YTpjfHwoYz17fSkpW2RdPWJbZF0pO3JldHVybiBjJiZuLmV4dGVuZCghMCxhLGMpLGF9ZnVuY3Rpb24gV2IoYSxiLGMpe3ZhciBkLGUsZixnLGg9YS5jb250ZW50cyxpPWEuZGF0YVR5cGVzO3doaWxlKCIqIj09PWlbMF0paS5zaGlmdCgpLHZvaWQgMD09PWUmJihlPWEubWltZVR5cGV8fGIuZ2V0UmVzcG9uc2VIZWFkZXIoIkNvbnRlbnQtVHlwZSIpKTtpZihlKWZvcihnIGluIGgpaWYoaFtnXSYmaFtnXS50ZXN0KGUpKXtpLnVuc2hpZnQoZyk7YnJlYWt9aWYoaVswXWluIGMpZj1pWzBdO2Vsc2V7Zm9yKGcgaW4gYyl7aWYoIWlbMF18fGEuY29udmVydGVyc1tnKyIgIitpWzBdXSl7Zj1nO2JyZWFrfWR8fChkPWcpfWY9Znx8ZH1yZXR1cm4gZj8oZiE9PWlbMF0mJmkudW5zaGlmdChmKSxjW2ZdKTp2b2lkIDB9ZnVuY3Rpb24gWGIoYSxiLGMsZCl7dmFyIGUsZixnLGgsaSxqPXt9LGs9YS5kYXRhVHlwZXMuc2xpY2UoKTtpZihrWzFdKWZvcihnIGluIGEuY29udmVydGVycylqW2cudG9Mb3dlckNhc2UoKV09YS5jb252ZXJ0ZXJzW2ddO2Y9ay5zaGlmdCgpO3doaWxlKGYpaWYoYS5yZXNwb25zZUZpZWxkc1tmXSYmKGNbYS5yZXNwb25zZUZpZWxkc1tmXV09YiksIWkmJmQmJmEuZGF0YUZpbHRlciYmKGI9YS5kYXRhRmlsdGVyKGIsYS5kYXRhVHlwZSkpLGk9ZixmPWsuc2hpZnQoKSlpZigiKiI9PT1mKWY9aTtlbHNlIGlmKCIqIiE9PWkmJmkhPT1mKXtpZihnPWpbaSsiICIrZl18fGpbIiogIitmXSwhZylmb3IoZSBpbiBqKWlmKGg9ZS5zcGxpdCgiICIpLGhbMV09PT1mJiYoZz1qW2krIiAiK2hbMF1dfHxqWyIqICIraFswXV0pKXtnPT09ITA/Zz1qW2VdOmpbZV0hPT0hMCYmKGY9aFswXSxrLnVuc2hpZnQoaFsxXSkpO2JyZWFrfWlmKGchPT0hMClpZihnJiZhWyJ0aHJvd3MiXSliPWcoYik7ZWxzZSB0cnl7Yj1nKGIpfWNhdGNoKGwpe3JldHVybntzdGF0ZToicGFyc2VyZXJyb3IiLGVycm9yOmc/bDoiTm8gY29udmVyc2lvbiBmcm9tICIraSsiIHRvICIrZn19fXJldHVybntzdGF0ZToic3VjY2VzcyIsZGF0YTpifX1uLmV4dGVuZCh7YWN0aXZlOjAsbGFzdE1vZGlmaWVkOnt9LGV0YWc6e30sYWpheFNldHRpbmdzOnt1cmw6UmIsdHlwZToiR0VUIixpc0xvY2FsOktiLnRlc3QoU2JbMV0pLGdsb2JhbDohMCxwcm9jZXNzRGF0YTohMCxhc3luYzohMCxjb250ZW50VHlwZToiYXBwbGljYXRpb24veC13d3ctZm9ybS11cmxlbmNvZGVkOyBjaGFyc2V0PVVURi04IixhY2NlcHRzOnsiKiI6UWIsdGV4dDoidGV4dC9wbGFpbiIsaHRtbDoidGV4dC9odG1sIix4bWw6ImFwcGxpY2F0aW9uL3htbCwgdGV4dC94bWwiLGpzb246ImFwcGxpY2F0aW9uL2pzb24sIHRleHQvamF2YXNjcmlwdCJ9LGNvbnRlbnRzOnt4bWw6L1xieG1sXGIvLGh0bWw6L1xiaHRtbC8sanNvbjovXGJqc29uXGIvfSxyZXNwb25zZUZpZWxkczp7eG1sOiJyZXNwb25zZVhNTCIsdGV4dDoicmVzcG9uc2VUZXh0Iixqc29uOiJyZXNwb25zZUpTT04ifSxjb252ZXJ0ZXJzOnsiKiB0ZXh0IjpTdHJpbmcsInRleHQgaHRtbCI6ITAsInRleHQganNvbiI6bi5wYXJzZUpTT04sInRleHQgeG1sIjpuLnBhcnNlWE1MfSxmbGF0T3B0aW9uczp7dXJsOiEwLGNvbnRleHQ6ITB9fSxhamF4U2V0dXA6ZnVuY3Rpb24oYSxiKXtyZXR1cm4gYj9WYihWYihhLG4uYWpheFNldHRpbmdzKSxiKTpWYihuLmFqYXhTZXR0aW5ncyxhKX0sYWpheFByZWZpbHRlcjpUYihPYiksYWpheFRyYW5zcG9ydDpUYihQYiksYWpheDpmdW5jdGlvbihiLGMpeyJvYmplY3QiPT10eXBlb2YgYiYmKGM9YixiPXZvaWQgMCksYz1jfHx7fTt2YXIgZCxlLGYsZyxoLGksaixrLGw9bi5hamF4U2V0dXAoe30sYyksbT1sLmNvbnRleHR8fGwsbz1sLmNvbnRleHQmJihtLm5vZGVUeXBlfHxtLmpxdWVyeSk/bihtKTpuLmV2ZW50LHA9bi5EZWZlcnJlZCgpLHE9bi5DYWxsYmFja3MoIm9uY2UgbWVtb3J5Iikscj1sLnN0YXR1c0NvZGV8fHt9LHM9e30sdD17fSx1PTAsdj0iY2FuY2VsZWQiLHc9e3JlYWR5U3RhdGU6MCxnZXRSZXNwb25zZUhlYWRlcjpmdW5jdGlvbihhKXt2YXIgYjtpZigyPT09dSl7aWYoIWspe2s9e307d2hpbGUoYj1KYi5leGVjKGcpKWtbYlsxXS50b0xvd2VyQ2FzZSgpXT1iWzJdfWI9a1thLnRvTG93ZXJDYXNlKCldfXJldHVybiBudWxsPT1iP251bGw6Yn0sZ2V0QWxsUmVzcG9uc2VIZWFkZXJzOmZ1bmN0aW9uKCl7cmV0dXJuIDI9PT11P2c6bnVsbH0sc2V0UmVxdWVzdEhlYWRlcjpmdW5jdGlvbihhLGIpe3ZhciBjPWEudG9Mb3dlckNhc2UoKTtyZXR1cm4gdXx8KGE9dFtjXT10W2NdfHxhLHNbYV09YiksdGhpc30sb3ZlcnJpZGVNaW1lVHlwZTpmdW5jdGlvbihhKXtyZXR1cm4gdXx8KGwubWltZVR5cGU9YSksdGhpc30sc3RhdHVzQ29kZTpmdW5jdGlvbihhKXt2YXIgYjtpZihhKWlmKDI+dSlmb3IoYiBpbiBhKXJbYl09W3JbYl0sYVtiXV07ZWxzZSB3LmFsd2F5cyhhW3cuc3RhdHVzXSk7cmV0dXJuIHRoaXN9LGFib3J0OmZ1bmN0aW9uKGEpe3ZhciBiPWF8fHY7cmV0dXJuIGomJmouYWJvcnQoYikseSgwLGIpLHRoaXN9fTtpZihwLnByb21pc2UodykuY29tcGxldGU9cS5hZGQsdy5zdWNjZXNzPXcuZG9uZSx3LmVycm9yPXcuZmFpbCxsLnVybD0oKGJ8fGwudXJsfHxSYikrIiIpLnJlcGxhY2UoSGIsIiIpLnJlcGxhY2UoTWIsU2JbMV0rIi8vIiksbC50eXBlPWMubWV0aG9kfHxjLnR5cGV8fGwubWV0aG9kfHxsLnR5cGUsbC5kYXRhVHlwZXM9bi50cmltKGwuZGF0YVR5cGV8fCIqIikudG9Mb3dlckNhc2UoKS5tYXRjaChHKXx8WyIiXSxudWxsPT1sLmNyb3NzRG9tYWluJiYoZD1OYi5leGVjKGwudXJsLnRvTG93ZXJDYXNlKCkpLGwuY3Jvc3NEb21haW49ISghZHx8ZFsxXT09PVNiWzFdJiZkWzJdPT09U2JbMl0mJihkWzNdfHwoImh0dHA6Ij09PWRbMV0/IjgwIjoiNDQzIikpPT09KFNiWzNdfHwoImh0dHA6Ij09PVNiWzFdPyI4MCI6IjQ0MyIpKSkpLGwuZGF0YSYmbC5wcm9jZXNzRGF0YSYmInN0cmluZyIhPXR5cGVvZiBsLmRhdGEmJihsLmRhdGE9bi5wYXJhbShsLmRhdGEsbC50cmFkaXRpb25hbCkpLFViKE9iLGwsYyx3KSwyPT09dSlyZXR1cm4gdztpPW4uZXZlbnQmJmwuZ2xvYmFsLGkmJjA9PT1uLmFjdGl2ZSsrJiZuLmV2ZW50LnRyaWdnZXIoImFqYXhTdGFydCIpLGwudHlwZT1sLnR5cGUudG9VcHBlckNhc2UoKSxsLmhhc0NvbnRlbnQ9IUxiLnRlc3QobC50eXBlKSxmPWwudXJsLGwuaGFzQ29udGVudHx8KGwuZGF0YSYmKGY9bC51cmwrPShGYi50ZXN0KGYpPyImIjoiPyIpK2wuZGF0YSxkZWxldGUgbC5kYXRhKSxsLmNhY2hlPT09ITEmJihsLnVybD1JYi50ZXN0KGYpP2YucmVwbGFjZShJYiwiJDFfPSIrRWIrKyk6ZisoRmIudGVzdChmKT8iJiI6Ij8iKSsiXz0iK0ViKyspKSxsLmlmTW9kaWZpZWQmJihuLmxhc3RNb2RpZmllZFtmXSYmdy5zZXRSZXF1ZXN0SGVhZGVyKCJJZi1Nb2RpZmllZC1TaW5jZSIsbi5sYXN0TW9kaWZpZWRbZl0pLG4uZXRhZ1tmXSYmdy5zZXRSZXF1ZXN0SGVhZGVyKCJJZi1Ob25lLU1hdGNoIixuLmV0YWdbZl0pKSwobC5kYXRhJiZsLmhhc0NvbnRlbnQmJmwuY29udGVudFR5cGUhPT0hMXx8Yy5jb250ZW50VHlwZSkmJncuc2V0UmVxdWVzdEhlYWRlcigiQ29udGVudC1UeXBlIixsLmNvbnRlbnRUeXBlKSx3LnNldFJlcXVlc3RIZWFkZXIoIkFjY2VwdCIsbC5kYXRhVHlwZXNbMF0mJmwuYWNjZXB0c1tsLmRhdGFUeXBlc1swXV0/bC5hY2NlcHRzW2wuZGF0YVR5cGVzWzBdXSsoIioiIT09bC5kYXRhVHlwZXNbMF0/IiwgIitRYisiOyBxPTAuMDEiOiIiKTpsLmFjY2VwdHNbIioiXSk7Zm9yKGUgaW4gbC5oZWFkZXJzKXcuc2V0UmVxdWVzdEhlYWRlcihlLGwuaGVhZGVyc1tlXSk7aWYobC5iZWZvcmVTZW5kJiYobC5iZWZvcmVTZW5kLmNhbGwobSx3LGwpPT09ITF8fDI9PT11KSlyZXR1cm4gdy5hYm9ydCgpO3Y9ImFib3J0Ijtmb3IoZSBpbntzdWNjZXNzOjEsZXJyb3I6MSxjb21wbGV0ZToxfSl3W2VdKGxbZV0pO2lmKGo9VWIoUGIsbCxjLHcpKXtpZih3LnJlYWR5U3RhdGU9MSxpJiZvLnRyaWdnZXIoImFqYXhTZW5kIixbdyxsXSksMj09PXUpcmV0dXJuIHc7bC5hc3luYyYmbC50aW1lb3V0PjAmJihoPWEuc2V0VGltZW91dChmdW5jdGlvbigpe3cuYWJvcnQoInRpbWVvdXQiKX0sbC50aW1lb3V0KSk7dHJ5e3U9MSxqLnNlbmQocyx5KX1jYXRjaCh4KXtpZighKDI+dSkpdGhyb3cgeDt5KC0xLHgpfX1lbHNlIHkoLTEsIk5vIFRyYW5zcG9ydCIpO2Z1bmN0aW9uIHkoYixjLGQsZSl7dmFyIGsscyx0LHYseCx5PWM7MiE9PXUmJih1PTIsaCYmYS5jbGVhclRpbWVvdXQoaCksaj12b2lkIDAsZz1lfHwiIix3LnJlYWR5U3RhdGU9Yj4wPzQ6MCxrPWI+PTIwMCYmMzAwPmJ8fDMwND09PWIsZCYmKHY9V2IobCx3LGQpKSx2PVhiKGwsdix3LGspLGs/KGwuaWZNb2RpZmllZCYmKHg9dy5nZXRSZXNwb25zZUhlYWRlcigiTGFzdC1Nb2RpZmllZCIpLHgmJihuLmxhc3RNb2RpZmllZFtmXT14KSx4PXcuZ2V0UmVzcG9uc2VIZWFkZXIoImV0YWciKSx4JiYobi5ldGFnW2ZdPXgpKSwyMDQ9PT1ifHwiSEVBRCI9PT1sLnR5cGU/eT0ibm9jb250ZW50IjozMDQ9PT1iP3k9Im5vdG1vZGlmaWVkIjooeT12LnN0YXRlLHM9di5kYXRhLHQ9di5lcnJvcixrPSF0KSk6KHQ9eSwhYiYmeXx8KHk9ImVycm9yIiwwPmImJihiPTApKSksdy5zdGF0dXM9Yix3LnN0YXR1c1RleHQ9KGN8fHkpKyIiLGs/cC5yZXNvbHZlV2l0aChtLFtzLHksd10pOnAucmVqZWN0V2l0aChtLFt3LHksdF0pLHcuc3RhdHVzQ29kZShyKSxyPXZvaWQgMCxpJiZvLnRyaWdnZXIoaz8iYWpheFN1Y2Nlc3MiOiJhamF4RXJyb3IiLFt3LGwsaz9zOnRdKSxxLmZpcmVXaXRoKG0sW3cseV0pLGkmJihvLnRyaWdnZXIoImFqYXhDb21wbGV0ZSIsW3csbF0pLC0tbi5hY3RpdmV8fG4uZXZlbnQudHJpZ2dlcigiYWpheFN0b3AiKSkpfXJldHVybiB3fSxnZXRKU09OOmZ1bmN0aW9uKGEsYixjKXtyZXR1cm4gbi5nZXQoYSxiLGMsImpzb24iKX0sZ2V0U2NyaXB0OmZ1bmN0aW9uKGEsYil7cmV0dXJuIG4uZ2V0KGEsdm9pZCAwLGIsInNjcmlwdCIpfX0pLG4uZWFjaChbImdldCIsInBvc3QiXSxmdW5jdGlvbihhLGIpe25bYl09ZnVuY3Rpb24oYSxjLGQsZSl7cmV0dXJuIG4uaXNGdW5jdGlvbihjKSYmKGU9ZXx8ZCxkPWMsYz12b2lkIDApLG4uYWpheChuLmV4dGVuZCh7dXJsOmEsdHlwZTpiLGRhdGFUeXBlOmUsZGF0YTpjLHN1Y2Nlc3M6ZH0sbi5pc1BsYWluT2JqZWN0KGEpJiZhKSl9fSksbi5fZXZhbFVybD1mdW5jdGlvbihhKXtyZXR1cm4gbi5hamF4KHt1cmw6YSx0eXBlOiJHRVQiLGRhdGFUeXBlOiJzY3JpcHQiLGNhY2hlOiEwLGFzeW5jOiExLGdsb2JhbDohMSwidGhyb3dzIjohMH0pfSxuLmZuLmV4dGVuZCh7d3JhcEFsbDpmdW5jdGlvbihhKXtpZihuLmlzRnVuY3Rpb24oYSkpcmV0dXJuIHRoaXMuZWFjaChmdW5jdGlvbihiKXtuKHRoaXMpLndyYXBBbGwoYS5jYWxsKHRoaXMsYikpfSk7aWYodGhpc1swXSl7dmFyIGI9bihhLHRoaXNbMF0ub3duZXJEb2N1bWVudCkuZXEoMCkuY2xvbmUoITApO3RoaXNbMF0ucGFyZW50Tm9kZSYmYi5pbnNlcnRCZWZvcmUodGhpc1swXSksYi5tYXAoZnVuY3Rpb24oKXt2YXIgYT10aGlzO3doaWxlKGEuZmlyc3RDaGlsZCYmMT09PWEuZmlyc3RDaGlsZC5ub2RlVHlwZSlhPWEuZmlyc3RDaGlsZDtyZXR1cm4gYX0pLmFwcGVuZCh0aGlzKX1yZXR1cm4gdGhpc30sd3JhcElubmVyOmZ1bmN0aW9uKGEpe3JldHVybiBuLmlzRnVuY3Rpb24oYSk/dGhpcy5lYWNoKGZ1bmN0aW9uKGIpe24odGhpcykud3JhcElubmVyKGEuY2FsbCh0aGlzLGIpKX0pOnRoaXMuZWFjaChmdW5jdGlvbigpe3ZhciBiPW4odGhpcyksYz1iLmNvbnRlbnRzKCk7Yy5sZW5ndGg/Yy53cmFwQWxsKGEpOmIuYXBwZW5kKGEpfSl9LHdyYXA6ZnVuY3Rpb24oYSl7dmFyIGI9bi5pc0Z1bmN0aW9uKGEpO3JldHVybiB0aGlzLmVhY2goZnVuY3Rpb24oYyl7bih0aGlzKS53cmFwQWxsKGI/YS5jYWxsKHRoaXMsYyk6YSl9KX0sdW53cmFwOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMucGFyZW50KCkuZWFjaChmdW5jdGlvbigpe24ubm9kZU5hbWUodGhpcywiYm9keSIpfHxuKHRoaXMpLnJlcGxhY2VXaXRoKHRoaXMuY2hpbGROb2Rlcyl9KS5lbmQoKX19KTtmdW5jdGlvbiBZYihhKXtyZXR1cm4gYS5zdHlsZSYmYS5zdHlsZS5kaXNwbGF5fHxuLmNzcyhhLCJkaXNwbGF5Iil9ZnVuY3Rpb24gWmIoYSl7aWYoIW4uY29udGFpbnMoYS5vd25lckRvY3VtZW50fHxkLGEpKXJldHVybiEwO3doaWxlKGEmJjE9PT1hLm5vZGVUeXBlKXtpZigibm9uZSI9PT1ZYihhKXx8ImhpZGRlbiI9PT1hLnR5cGUpcmV0dXJuITA7YT1hLnBhcmVudE5vZGV9cmV0dXJuITF9bi5leHByLmZpbHRlcnMuaGlkZGVuPWZ1bmN0aW9uKGEpe3JldHVybiBsLnJlbGlhYmxlSGlkZGVuT2Zmc2V0cygpP2Eub2Zmc2V0V2lkdGg8PTAmJmEub2Zmc2V0SGVpZ2h0PD0wJiYhYS5nZXRDbGllbnRSZWN0cygpLmxlbmd0aDpaYihhKX0sbi5leHByLmZpbHRlcnMudmlzaWJsZT1mdW5jdGlvbihhKXtyZXR1cm4hbi5leHByLmZpbHRlcnMuaGlkZGVuKGEpfTt2YXIgJGI9LyUyMC9nLF9iPS9cW1xdJC8sYWM9L1xyP1xuL2csYmM9L14oPzpzdWJtaXR8YnV0dG9ufGltYWdlfHJlc2V0fGZpbGUpJC9pLGNjPS9eKD86aW5wdXR8c2VsZWN0fHRleHRhcmVhfGtleWdlbikvaTtmdW5jdGlvbiBkYyhhLGIsYyxkKXt2YXIgZTtpZihuLmlzQXJyYXkoYikpbi5lYWNoKGIsZnVuY3Rpb24oYixlKXtjfHxfYi50ZXN0KGEpP2QoYSxlKTpkYyhhKyJbIisoIm9iamVjdCI9PXR5cGVvZiBlJiZudWxsIT1lP2I6IiIpKyJdIixlLGMsZCl9KTtlbHNlIGlmKGN8fCJvYmplY3QiIT09bi50eXBlKGIpKWQoYSxiKTtlbHNlIGZvcihlIGluIGIpZGMoYSsiWyIrZSsiXSIsYltlXSxjLGQpfW4ucGFyYW09ZnVuY3Rpb24oYSxiKXt2YXIgYyxkPVtdLGU9ZnVuY3Rpb24oYSxiKXtiPW4uaXNGdW5jdGlvbihiKT9iKCk6bnVsbD09Yj8iIjpiLGRbZC5sZW5ndGhdPWVuY29kZVVSSUNvbXBvbmVudChhKSsiPSIrZW5jb2RlVVJJQ29tcG9uZW50KGIpfTtpZih2b2lkIDA9PT1iJiYoYj1uLmFqYXhTZXR0aW5ncyYmbi5hamF4U2V0dGluZ3MudHJhZGl0aW9uYWwpLG4uaXNBcnJheShhKXx8YS5qcXVlcnkmJiFuLmlzUGxhaW5PYmplY3QoYSkpbi5lYWNoKGEsZnVuY3Rpb24oKXtlKHRoaXMubmFtZSx0aGlzLnZhbHVlKX0pO2Vsc2UgZm9yKGMgaW4gYSlkYyhjLGFbY10sYixlKTtyZXR1cm4gZC5qb2luKCImIikucmVwbGFjZSgkYiwiKyIpfSxuLmZuLmV4dGVuZCh7c2VyaWFsaXplOmZ1bmN0aW9uKCl7cmV0dXJuIG4ucGFyYW0odGhpcy5zZXJpYWxpemVBcnJheSgpKX0sc2VyaWFsaXplQXJyYXk6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5tYXAoZnVuY3Rpb24oKXt2YXIgYT1uLnByb3AodGhpcywiZWxlbWVudHMiKTtyZXR1cm4gYT9uLm1ha2VBcnJheShhKTp0aGlzfSkuZmlsdGVyKGZ1bmN0aW9uKCl7dmFyIGE9dGhpcy50eXBlO3JldHVybiB0aGlzLm5hbWUmJiFuKHRoaXMpLmlzKCI6ZGlzYWJsZWQiKSYmY2MudGVzdCh0aGlzLm5vZGVOYW1lKSYmIWJjLnRlc3QoYSkmJih0aGlzLmNoZWNrZWR8fCFaLnRlc3QoYSkpfSkubWFwKGZ1bmN0aW9uKGEsYil7dmFyIGM9bih0aGlzKS52YWwoKTtyZXR1cm4gbnVsbD09Yz9udWxsOm4uaXNBcnJheShjKT9uLm1hcChjLGZ1bmN0aW9uKGEpe3JldHVybntuYW1lOmIubmFtZSx2YWx1ZTphLnJlcGxhY2UoYWMsIlxyXG4iKX19KTp7bmFtZTpiLm5hbWUsdmFsdWU6Yy5yZXBsYWNlKGFjLCJcclxuIil9fSkuZ2V0KCl9fSksbi5hamF4U2V0dGluZ3MueGhyPXZvaWQgMCE9PWEuQWN0aXZlWE9iamVjdD9mdW5jdGlvbigpe3JldHVybiB0aGlzLmlzTG9jYWw/aWMoKTpkLmRvY3VtZW50TW9kZT44P2hjKCk6L14oZ2V0fHBvc3R8aGVhZHxwdXR8ZGVsZXRlfG9wdGlvbnMpJC9pLnRlc3QodGhpcy50eXBlKSYmaGMoKXx8aWMoKX06aGM7dmFyIGVjPTAsZmM9e30sZ2M9bi5hamF4U2V0dGluZ3MueGhyKCk7YS5hdHRhY2hFdmVudCYmYS5hdHRhY2hFdmVudCgib251bmxvYWQiLGZ1bmN0aW9uKCl7Zm9yKHZhciBhIGluIGZjKWZjW2FdKHZvaWQgMCwhMCl9KSxsLmNvcnM9ISFnYyYmIndpdGhDcmVkZW50aWFscyJpbiBnYyxnYz1sLmFqYXg9ISFnYyxnYyYmbi5hamF4VHJhbnNwb3J0KGZ1bmN0aW9uKGIpe2lmKCFiLmNyb3NzRG9tYWlufHxsLmNvcnMpe3ZhciBjO3JldHVybntzZW5kOmZ1bmN0aW9uKGQsZSl7dmFyIGYsZz1iLnhocigpLGg9KytlYztpZihnLm9wZW4oYi50eXBlLGIudXJsLGIuYXN5bmMsYi51c2VybmFtZSxiLnBhc3N3b3JkKSxiLnhockZpZWxkcylmb3IoZiBpbiBiLnhockZpZWxkcylnW2ZdPWIueGhyRmllbGRzW2ZdO2IubWltZVR5cGUmJmcub3ZlcnJpZGVNaW1lVHlwZSYmZy5vdmVycmlkZU1pbWVUeXBlKGIubWltZVR5cGUpLGIuY3Jvc3NEb21haW58fGRbIlgtUmVxdWVzdGVkLVdpdGgiXXx8KGRbIlgtUmVxdWVzdGVkLVdpdGgiXT0iWE1MSHR0cFJlcXVlc3QiKTtmb3IoZiBpbiBkKXZvaWQgMCE9PWRbZl0mJmcuc2V0UmVxdWVzdEhlYWRlcihmLGRbZl0rIiIpO2cuc2VuZChiLmhhc0NvbnRlbnQmJmIuZGF0YXx8bnVsbCksYz1mdW5jdGlvbihhLGQpe3ZhciBmLGksajtpZihjJiYoZHx8ND09PWcucmVhZHlTdGF0ZSkpaWYoZGVsZXRlIGZjW2hdLGM9dm9pZCAwLGcub25yZWFkeXN0YXRlY2hhbmdlPW4ubm9vcCxkKTQhPT1nLnJlYWR5U3RhdGUmJmcuYWJvcnQoKTtlbHNle2o9e30sZj1nLnN0YXR1cywic3RyaW5nIj09dHlwZW9mIGcucmVzcG9uc2VUZXh0JiYoai50ZXh0PWcucmVzcG9uc2VUZXh0KTt0cnl7aT1nLnN0YXR1c1RleHR9Y2F0Y2goayl7aT0iIn1mfHwhYi5pc0xvY2FsfHxiLmNyb3NzRG9tYWluPzEyMjM9PT1mJiYoZj0yMDQpOmY9ai50ZXh0PzIwMDo0MDR9aiYmZShmLGksaixnLmdldEFsbFJlc3BvbnNlSGVhZGVycygpKX0sYi5hc3luYz80PT09Zy5yZWFkeVN0YXRlP2Euc2V0VGltZW91dChjKTpnLm9ucmVhZHlzdGF0ZWNoYW5nZT1mY1toXT1jOmMoKX0sYWJvcnQ6ZnVuY3Rpb24oKXtjJiZjKHZvaWQgMCwhMCl9fX19KTtmdW5jdGlvbiBoYygpe3RyeXtyZXR1cm4gbmV3IGEuWE1MSHR0cFJlcXVlc3R9Y2F0Y2goYil7fX1mdW5jdGlvbiBpYygpe3RyeXtyZXR1cm4gbmV3IGEuQWN0aXZlWE9iamVjdCgiTWljcm9zb2Z0LlhNTEhUVFAiKX1jYXRjaChiKXt9fW4uYWpheFNldHVwKHthY2NlcHRzOntzY3JpcHQ6InRleHQvamF2YXNjcmlwdCwgYXBwbGljYXRpb24vamF2YXNjcmlwdCwgYXBwbGljYXRpb24vZWNtYXNjcmlwdCwgYXBwbGljYXRpb24veC1lY21hc2NyaXB0In0sY29udGVudHM6e3NjcmlwdDovXGIoPzpqYXZhfGVjbWEpc2NyaXB0XGIvfSxjb252ZXJ0ZXJzOnsidGV4dCBzY3JpcHQiOmZ1bmN0aW9uKGEpe3JldHVybiBuLmdsb2JhbEV2YWwoYSksYX19fSksbi5hamF4UHJlZmlsdGVyKCJzY3JpcHQiLGZ1bmN0aW9uKGEpe3ZvaWQgMD09PWEuY2FjaGUmJihhLmNhY2hlPSExKSxhLmNyb3NzRG9tYWluJiYoYS50eXBlPSJHRVQiLGEuZ2xvYmFsPSExKX0pLG4uYWpheFRyYW5zcG9ydCgic2NyaXB0IixmdW5jdGlvbihhKXtpZihhLmNyb3NzRG9tYWluKXt2YXIgYixjPWQuaGVhZHx8bigiaGVhZCIpWzBdfHxkLmRvY3VtZW50RWxlbWVudDtyZXR1cm57c2VuZDpmdW5jdGlvbihlLGYpe2I9ZC5jcmVhdGVFbGVtZW50KCJzY3JpcHQiKSxiLmFzeW5jPSEwLGEuc2NyaXB0Q2hhcnNldCYmKGIuY2hhcnNldD1hLnNjcmlwdENoYXJzZXQpLGIuc3JjPWEudXJsLGIub25sb2FkPWIub25yZWFkeXN0YXRlY2hhbmdlPWZ1bmN0aW9uKGEsYyl7KGN8fCFiLnJlYWR5U3RhdGV8fC9sb2FkZWR8Y29tcGxldGUvLnRlc3QoYi5yZWFkeVN0YXRlKSkmJihiLm9ubG9hZD1iLm9ucmVhZHlzdGF0ZWNoYW5nZT1udWxsLGIucGFyZW50Tm9kZSYmYi5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKGIpLGI9bnVsbCxjfHxmKDIwMCwic3VjY2VzcyIpKX0sYy5pbnNlcnRCZWZvcmUoYixjLmZpcnN0Q2hpbGQpfSxhYm9ydDpmdW5jdGlvbigpe2ImJmIub25sb2FkKHZvaWQgMCwhMCl9fX19KTt2YXIgamM9W10sa2M9Lyg9KVw/KD89JnwkKXxcP1w/LztuLmFqYXhTZXR1cCh7anNvbnA6ImNhbGxiYWNrIixqc29ucENhbGxiYWNrOmZ1bmN0aW9uKCl7dmFyIGE9amMucG9wKCl8fG4uZXhwYW5kbysiXyIrRWIrKztyZXR1cm4gdGhpc1thXT0hMCxhfX0pLG4uYWpheFByZWZpbHRlcigianNvbiBqc29ucCIsZnVuY3Rpb24oYixjLGQpe3ZhciBlLGYsZyxoPWIuanNvbnAhPT0hMSYmKGtjLnRlc3QoYi51cmwpPyJ1cmwiOiJzdHJpbmciPT10eXBlb2YgYi5kYXRhJiYwPT09KGIuY29udGVudFR5cGV8fCIiKS5pbmRleE9mKCJhcHBsaWNhdGlvbi94LXd3dy1mb3JtLXVybGVuY29kZWQiKSYma2MudGVzdChiLmRhdGEpJiYiZGF0YSIpO3JldHVybiBofHwianNvbnAiPT09Yi5kYXRhVHlwZXNbMF0/KGU9Yi5qc29ucENhbGxiYWNrPW4uaXNGdW5jdGlvbihiLmpzb25wQ2FsbGJhY2spP2IuanNvbnBDYWxsYmFjaygpOmIuanNvbnBDYWxsYmFjayxoP2JbaF09YltoXS5yZXBsYWNlKGtjLCIkMSIrZSk6Yi5qc29ucCE9PSExJiYoYi51cmwrPShGYi50ZXN0KGIudXJsKT8iJiI6Ij8iKStiLmpzb25wKyI9IitlKSxiLmNvbnZlcnRlcnNbInNjcmlwdCBqc29uIl09ZnVuY3Rpb24oKXtyZXR1cm4gZ3x8bi5lcnJvcihlKyIgd2FzIG5vdCBjYWxsZWQiKSxnWzBdfSxiLmRhdGFUeXBlc1swXT0ianNvbiIsZj1hW2VdLGFbZV09ZnVuY3Rpb24oKXtnPWFyZ3VtZW50c30sZC5hbHdheXMoZnVuY3Rpb24oKXt2b2lkIDA9PT1mP24oYSkucmVtb3ZlUHJvcChlKTphW2VdPWYsYltlXSYmKGIuanNvbnBDYWxsYmFjaz1jLmpzb25wQ2FsbGJhY2ssamMucHVzaChlKSksZyYmbi5pc0Z1bmN0aW9uKGYpJiZmKGdbMF0pLGc9Zj12b2lkIDB9KSwic2NyaXB0Iik6dm9pZCAwfSksbi5wYXJzZUhUTUw9ZnVuY3Rpb24oYSxiLGMpe2lmKCFhfHwic3RyaW5nIiE9dHlwZW9mIGEpcmV0dXJuIG51bGw7ImJvb2xlYW4iPT10eXBlb2YgYiYmKGM9YixiPSExKSxiPWJ8fGQ7dmFyIGU9eC5leGVjKGEpLGY9IWMmJltdO3JldHVybiBlP1tiLmNyZWF0ZUVsZW1lbnQoZVsxXSldOihlPWphKFthXSxiLGYpLGYmJmYubGVuZ3RoJiZuKGYpLnJlbW92ZSgpLG4ubWVyZ2UoW10sZS5jaGlsZE5vZGVzKSl9O3ZhciBsYz1uLmZuLmxvYWQ7bi5mbi5sb2FkPWZ1bmN0aW9uKGEsYixjKXtpZigic3RyaW5nIiE9dHlwZW9mIGEmJmxjKXJldHVybiBsYy5hcHBseSh0aGlzLGFyZ3VtZW50cyk7dmFyIGQsZSxmLGc9dGhpcyxoPWEuaW5kZXhPZigiICIpO3JldHVybiBoPi0xJiYoZD1uLnRyaW0oYS5zbGljZShoLGEubGVuZ3RoKSksYT1hLnNsaWNlKDAsaCkpLG4uaXNGdW5jdGlvbihiKT8oYz1iLGI9dm9pZCAwKTpiJiYib2JqZWN0Ij09dHlwZW9mIGImJihlPSJQT1NUIiksZy5sZW5ndGg+MCYmbi5hamF4KHt1cmw6YSx0eXBlOmV8fCJHRVQiLGRhdGFUeXBlOiJodG1sIixkYXRhOmJ9KS5kb25lKGZ1bmN0aW9uKGEpe2Y9YXJndW1lbnRzLGcuaHRtbChkP24oIjxkaXY+IikuYXBwZW5kKG4ucGFyc2VIVE1MKGEpKS5maW5kKGQpOmEpfSkuYWx3YXlzKGMmJmZ1bmN0aW9uKGEsYil7Zy5lYWNoKGZ1bmN0aW9uKCl7Yy5hcHBseSh0aGlzLGZ8fFthLnJlc3BvbnNlVGV4dCxiLGFdKX0pfSksdGhpc30sbi5lYWNoKFsiYWpheFN0YXJ0IiwiYWpheFN0b3AiLCJhamF4Q29tcGxldGUiLCJhamF4RXJyb3IiLCJhamF4U3VjY2VzcyIsImFqYXhTZW5kIl0sZnVuY3Rpb24oYSxiKXtuLmZuW2JdPWZ1bmN0aW9uKGEpe3JldHVybiB0aGlzLm9uKGIsYSl9fSksbi5leHByLmZpbHRlcnMuYW5pbWF0ZWQ9ZnVuY3Rpb24oYSl7cmV0dXJuIG4uZ3JlcChuLnRpbWVycyxmdW5jdGlvbihiKXtyZXR1cm4gYT09PWIuZWxlbX0pLmxlbmd0aH07ZnVuY3Rpb24gbWMoYSl7cmV0dXJuIG4uaXNXaW5kb3coYSk/YTo5PT09YS5ub2RlVHlwZT9hLmRlZmF1bHRWaWV3fHxhLnBhcmVudFdpbmRvdzohMX1uLm9mZnNldD17c2V0T2Zmc2V0OmZ1bmN0aW9uKGEsYixjKXt2YXIgZCxlLGYsZyxoLGksaixrPW4uY3NzKGEsInBvc2l0aW9uIiksbD1uKGEpLG09e307InN0YXRpYyI9PT1rJiYoYS5zdHlsZS5wb3NpdGlvbj0icmVsYXRpdmUiKSxoPWwub2Zmc2V0KCksZj1uLmNzcyhhLCJ0b3AiKSxpPW4uY3NzKGEsImxlZnQiKSxqPSgiYWJzb2x1dGUiPT09a3x8ImZpeGVkIj09PWspJiZuLmluQXJyYXkoImF1dG8iLFtmLGldKT4tMSxqPyhkPWwucG9zaXRpb24oKSxnPWQudG9wLGU9ZC5sZWZ0KTooZz1wYXJzZUZsb2F0KGYpfHwwLGU9cGFyc2VGbG9hdChpKXx8MCksbi5pc0Z1bmN0aW9uKGIpJiYoYj1iLmNhbGwoYSxjLG4uZXh0ZW5kKHt9LGgpKSksbnVsbCE9Yi50b3AmJihtLnRvcD1iLnRvcC1oLnRvcCtnKSxudWxsIT1iLmxlZnQmJihtLmxlZnQ9Yi5sZWZ0LWgubGVmdCtlKSwidXNpbmciaW4gYj9iLnVzaW5nLmNhbGwoYSxtKTpsLmNzcyhtKX19LG4uZm4uZXh0ZW5kKHtvZmZzZXQ6ZnVuY3Rpb24oYSl7aWYoYXJndW1lbnRzLmxlbmd0aClyZXR1cm4gdm9pZCAwPT09YT90aGlzOnRoaXMuZWFjaChmdW5jdGlvbihiKXtuLm9mZnNldC5zZXRPZmZzZXQodGhpcyxhLGIpfSk7dmFyIGIsYyxkPXt0b3A6MCxsZWZ0OjB9LGU9dGhpc1swXSxmPWUmJmUub3duZXJEb2N1bWVudDtpZihmKXJldHVybiBiPWYuZG9jdW1lbnRFbGVtZW50LG4uY29udGFpbnMoYixlKT8oInVuZGVmaW5lZCIhPXR5cGVvZiBlLmdldEJvdW5kaW5nQ2xpZW50UmVjdCYmKGQ9ZS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKSksYz1tYyhmKSx7dG9wOmQudG9wKyhjLnBhZ2VZT2Zmc2V0fHxiLnNjcm9sbFRvcCktKGIuY2xpZW50VG9wfHwwKSxsZWZ0OmQubGVmdCsoYy5wYWdlWE9mZnNldHx8Yi5zY3JvbGxMZWZ0KS0oYi5jbGllbnRMZWZ0fHwwKX0pOmR9LHBvc2l0aW9uOmZ1bmN0aW9uKCl7aWYodGhpc1swXSl7dmFyIGEsYixjPXt0b3A6MCxsZWZ0OjB9LGQ9dGhpc1swXTtyZXR1cm4iZml4ZWQiPT09bi5jc3MoZCwicG9zaXRpb24iKT9iPWQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk6KGE9dGhpcy5vZmZzZXRQYXJlbnQoKSxiPXRoaXMub2Zmc2V0KCksbi5ub2RlTmFtZShhWzBdLCJodG1sIil8fChjPWEub2Zmc2V0KCkpLGMudG9wKz1uLmNzcyhhWzBdLCJib3JkZXJUb3BXaWR0aCIsITApLGMubGVmdCs9bi5jc3MoYVswXSwiYm9yZGVyTGVmdFdpZHRoIiwhMCkpLHt0b3A6Yi50b3AtYy50b3Atbi5jc3MoZCwibWFyZ2luVG9wIiwhMCksbGVmdDpiLmxlZnQtYy5sZWZ0LW4uY3NzKGQsIm1hcmdpbkxlZnQiLCEwKX19fSxvZmZzZXRQYXJlbnQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5tYXAoZnVuY3Rpb24oKXt2YXIgYT10aGlzLm9mZnNldFBhcmVudDt3aGlsZShhJiYhbi5ub2RlTmFtZShhLCJodG1sIikmJiJzdGF0aWMiPT09bi5jc3MoYSwicG9zaXRpb24iKSlhPWEub2Zmc2V0UGFyZW50O3JldHVybiBhfHxRYX0pfX0pLG4uZWFjaCh7c2Nyb2xsTGVmdDoicGFnZVhPZmZzZXQiLHNjcm9sbFRvcDoicGFnZVlPZmZzZXQifSxmdW5jdGlvbihhLGIpe3ZhciBjPS9ZLy50ZXN0KGIpO24uZm5bYV09ZnVuY3Rpb24oZCl7cmV0dXJuIFkodGhpcyxmdW5jdGlvbihhLGQsZSl7dmFyIGY9bWMoYSk7cmV0dXJuIHZvaWQgMD09PWU/Zj9iIGluIGY/ZltiXTpmLmRvY3VtZW50LmRvY3VtZW50RWxlbWVudFtkXTphW2RdOnZvaWQoZj9mLnNjcm9sbFRvKGM/bihmKS5zY3JvbGxMZWZ0KCk6ZSxjP2U6bihmKS5zY3JvbGxUb3AoKSk6YVtkXT1lKX0sYSxkLGFyZ3VtZW50cy5sZW5ndGgsbnVsbCl9fSksbi5lYWNoKFsidG9wIiwibGVmdCJdLGZ1bmN0aW9uKGEsYil7bi5jc3NIb29rc1tiXT1VYShsLnBpeGVsUG9zaXRpb24sZnVuY3Rpb24oYSxjKXtyZXR1cm4gYz8oYz1TYShhLGIpLE9hLnRlc3QoYyk/bihhKS5wb3NpdGlvbigpW2JdKyJweCI6Yyk6dm9pZCAwfSl9KSxuLmVhY2goe0hlaWdodDoiaGVpZ2h0IixXaWR0aDoid2lkdGgifSxmdW5jdGlvbihhLGIpe24uZWFjaCh7CnBhZGRpbmc6ImlubmVyIithLGNvbnRlbnQ6YiwiIjoib3V0ZXIiK2F9LGZ1bmN0aW9uKGMsZCl7bi5mbltkXT1mdW5jdGlvbihkLGUpe3ZhciBmPWFyZ3VtZW50cy5sZW5ndGgmJihjfHwiYm9vbGVhbiIhPXR5cGVvZiBkKSxnPWN8fChkPT09ITB8fGU9PT0hMD8ibWFyZ2luIjoiYm9yZGVyIik7cmV0dXJuIFkodGhpcyxmdW5jdGlvbihiLGMsZCl7dmFyIGU7cmV0dXJuIG4uaXNXaW5kb3coYik/Yi5kb2N1bWVudC5kb2N1bWVudEVsZW1lbnRbImNsaWVudCIrYV06OT09PWIubm9kZVR5cGU/KGU9Yi5kb2N1bWVudEVsZW1lbnQsTWF0aC5tYXgoYi5ib2R5WyJzY3JvbGwiK2FdLGVbInNjcm9sbCIrYV0sYi5ib2R5WyJvZmZzZXQiK2FdLGVbIm9mZnNldCIrYV0sZVsiY2xpZW50IithXSkpOnZvaWQgMD09PWQ/bi5jc3MoYixjLGcpOm4uc3R5bGUoYixjLGQsZyl9LGIsZj9kOnZvaWQgMCxmLG51bGwpfX0pfSksbi5mbi5leHRlbmQoe2JpbmQ6ZnVuY3Rpb24oYSxiLGMpe3JldHVybiB0aGlzLm9uKGEsbnVsbCxiLGMpfSx1bmJpbmQ6ZnVuY3Rpb24oYSxiKXtyZXR1cm4gdGhpcy5vZmYoYSxudWxsLGIpfSxkZWxlZ2F0ZTpmdW5jdGlvbihhLGIsYyxkKXtyZXR1cm4gdGhpcy5vbihiLGEsYyxkKX0sdW5kZWxlZ2F0ZTpmdW5jdGlvbihhLGIsYyl7cmV0dXJuIDE9PT1hcmd1bWVudHMubGVuZ3RoP3RoaXMub2ZmKGEsIioqIik6dGhpcy5vZmYoYixhfHwiKioiLGMpfX0pLG4uZm4uc2l6ZT1mdW5jdGlvbigpe3JldHVybiB0aGlzLmxlbmd0aH0sbi5mbi5hbmRTZWxmPW4uZm4uYWRkQmFjaywiZnVuY3Rpb24iPT10eXBlb2YgZGVmaW5lJiZkZWZpbmUuYW1kJiZkZWZpbmUoImpxdWVyeSIsW10sZnVuY3Rpb24oKXtyZXR1cm4gbn0pO3ZhciBuYz1hLmpRdWVyeSxvYz1hLiQ7cmV0dXJuIG4ubm9Db25mbGljdD1mdW5jdGlvbihiKXtyZXR1cm4gYS4kPT09biYmKGEuJD1vYyksYiYmYS5qUXVlcnk9PT1uJiYoYS5qUXVlcnk9bmMpLG59LGJ8fChhLmpRdWVyeT1hLiQ9biksbn0pOwo="></script> | |
| <link href="data:text/css;charset=utf-8,%0A%2Eleaflet%2Dmap%2Dpane%2C%0A%2Eleaflet%2Dtile%2C%0A%2Eleaflet%2Dmarker%2Dicon%2C%0A%2Eleaflet%2Dmarker%2Dshadow%2C%0A%2Eleaflet%2Dtile%2Dpane%2C%0A%2Eleaflet%2Dtile%2Dcontainer%2C%0A%2Eleaflet%2Doverlay%2Dpane%2C%0A%2Eleaflet%2Dshadow%2Dpane%2C%0A%2Eleaflet%2Dmarker%2Dpane%2C%0A%2Eleaflet%2Dpopup%2Dpane%2C%0A%2Eleaflet%2Doverlay%2Dpane%20svg%2C%0A%2Eleaflet%2Dzoom%2Dbox%2C%0A%2Eleaflet%2Dimage%2Dlayer%2C%0A%2Eleaflet%2Dlayer%20%7B%0Aposition%3A%20absolute%3B%0Aleft%3A%200%3B%0Atop%3A%200%3B%0A%7D%0A%2Eleaflet%2Dcontainer%20%7B%0Aoverflow%3A%20hidden%3B%0A%2Dms%2Dtouch%2Daction%3A%20none%3B%0Atouch%2Daction%3A%20none%3B%0A%7D%0A%2Eleaflet%2Dtile%2C%0A%2Eleaflet%2Dmarker%2Dicon%2C%0A%2Eleaflet%2Dmarker%2Dshadow%20%7B%0A%2Dwebkit%2Duser%2Dselect%3A%20none%3B%0A%2Dmoz%2Duser%2Dselect%3A%20none%3B%0Auser%2Dselect%3A%20none%3B%0A%2Dwebkit%2Duser%2Ddrag%3A%20none%3B%0A%7D%0A%2Eleaflet%2Dmarker%2Dicon%2C%0A%2Eleaflet%2Dmarker%2Dshadow%20%7B%0Adisplay%3A%20block%3B%0A%7D%0A%0A%2Eleaflet%2Dcontainer%20img%20%7B%0Amax%2Dwidth%3A%20none%20%21important%3B%0A%7D%0A%0A%2Eleaflet%2Dcontainer%20img%2Eleaflet%2Dimage%2Dlayer%20%7B%0Amax%2Dwidth%3A%2015000px%20%21important%3B%0A%7D%0A%2Eleaflet%2Dtile%20%7B%0Afilter%3A%20inherit%3B%0Avisibility%3A%20hidden%3B%0A%7D%0A%2Eleaflet%2Dtile%2Dloaded%20%7B%0Avisibility%3A%20inherit%3B%0A%7D%0A%2Eleaflet%2Dzoom%2Dbox%20%7B%0Awidth%3A%200%3B%0Aheight%3A%200%3B%0A%7D%0A%0A%2Eleaflet%2Doverlay%2Dpane%20svg%20%7B%0A%2Dmoz%2Duser%2Dselect%3A%20none%3B%0A%7D%0A%2Eleaflet%2Dtile%2Dpane%20%7B%20z%2Dindex%3A%202%3B%20%7D%0A%2Eleaflet%2Dobjects%2Dpane%20%7B%20z%2Dindex%3A%203%3B%20%7D%0A%2Eleaflet%2Doverlay%2Dpane%20%7B%20z%2Dindex%3A%204%3B%20%7D%0A%2Eleaflet%2Dshadow%2Dpane%20%7B%20z%2Dindex%3A%205%3B%20%7D%0A%2Eleaflet%2Dmarker%2Dpane%20%7B%20z%2Dindex%3A%206%3B%20%7D%0A%2Eleaflet%2Dpopup%2Dpane%20%7B%20z%2Dindex%3A%207%3B%20%7D%0A%2Eleaflet%2Dvml%2Dshape%20%7B%0Awidth%3A%201px%3B%0Aheight%3A%201px%3B%0A%7D%0A%2Elvml%20%7B%0Abehavior%3A%20url%28%23default%23VML%29%3B%0Adisplay%3A%20inline%2Dblock%3B%0Aposition%3A%20absolute%3B%0A%7D%0A%0A%2Eleaflet%2Dcontrol%20%7B%0Aposition%3A%20relative%3B%0Az%2Dindex%3A%207%3B%0Apointer%2Devents%3A%20auto%3B%0A%7D%0A%2Eleaflet%2Dtop%2C%0A%2Eleaflet%2Dbottom%20%7B%0Aposition%3A%20absolute%3B%0Az%2Dindex%3A%201000%3B%0Apointer%2Devents%3A%20none%3B%0A%7D%0A%2Eleaflet%2Dtop%20%7B%0Atop%3A%200%3B%0A%7D%0A%2Eleaflet%2Dright%20%7B%0Aright%3A%200%3B%0A%7D%0A%2Eleaflet%2Dbottom%20%7B%0Abottom%3A%200%3B%0A%7D%0A%2Eleaflet%2Dleft%20%7B%0Aleft%3A%200%3B%0A%7D%0A%2Eleaflet%2Dcontrol%20%7B%0Afloat%3A%20left%3B%0Aclear%3A%20both%3B%0A%7D%0A%2Eleaflet%2Dright%20%2Eleaflet%2Dcontrol%20%7B%0Afloat%3A%20right%3B%0A%7D%0A%2Eleaflet%2Dtop%20%2Eleaflet%2Dcontrol%20%7B%0Amargin%2Dtop%3A%2010px%3B%0A%7D%0A%2Eleaflet%2Dbottom%20%2Eleaflet%2Dcontrol%20%7B%0Amargin%2Dbottom%3A%2010px%3B%0A%7D%0A%2Eleaflet%2Dleft%20%2Eleaflet%2Dcontrol%20%7B%0Amargin%2Dleft%3A%2010px%3B%0A%7D%0A%2Eleaflet%2Dright%20%2Eleaflet%2Dcontrol%20%7B%0Amargin%2Dright%3A%2010px%3B%0A%7D%0A%0A%2Eleaflet%2Dfade%2Danim%20%2Eleaflet%2Dtile%2C%0A%2Eleaflet%2Dfade%2Danim%20%2Eleaflet%2Dpopup%20%7B%0Aopacity%3A%200%3B%0A%2Dwebkit%2Dtransition%3A%20opacity%200%2E2s%20linear%3B%0A%2Dmoz%2Dtransition%3A%20opacity%200%2E2s%20linear%3B%0A%2Do%2Dtransition%3A%20opacity%200%2E2s%20linear%3B%0Atransition%3A%20opacity%200%2E2s%20linear%3B%0A%7D%0A%2Eleaflet%2Dfade%2Danim%20%2Eleaflet%2Dtile%2Dloaded%2C%0A%2Eleaflet%2Dfade%2Danim%20%2Eleaflet%2Dmap%2Dpane%20%2Eleaflet%2Dpopup%20%7B%0Aopacity%3A%201%3B%0A%7D%0A%2Eleaflet%2Dzoom%2Danim%20%2Eleaflet%2Dzoom%2Danimated%20%7B%0A%2Dwebkit%2Dtransition%3A%20%2Dwebkit%2Dtransform%200%2E25s%20cubic%2Dbezier%280%2C0%2C0%2E25%2C1%29%3B%0A%2Dmoz%2Dtransition%3A%20%2Dmoz%2Dtransform%200%2E25s%20cubic%2Dbezier%280%2C0%2C0%2E25%2C1%29%3B%0A%2Do%2Dtransition%3A%20%2Do%2Dtransform%200%2E25s%20cubic%2Dbezier%280%2C0%2C0%2E25%2C1%29%3B%0Atransition%3A%20transform%200%2E25s%20cubic%2Dbezier%280%2C0%2C0%2E25%2C1%29%3B%0A%7D%0A%2Eleaflet%2Dzoom%2Danim%20%2Eleaflet%2Dtile%2C%0A%2Eleaflet%2Dpan%2Danim%20%2Eleaflet%2Dtile%2C%0A%2Eleaflet%2Dtouching%20%2Eleaflet%2Dzoom%2Danimated%20%7B%0A%2Dwebkit%2Dtransition%3A%20none%3B%0A%2Dmoz%2Dtransition%3A%20none%3B%0A%2Do%2Dtransition%3A%20none%3B%0Atransition%3A%20none%3B%0A%7D%0A%2Eleaflet%2Dzoom%2Danim%20%2Eleaflet%2Dzoom%2Dhide%20%7B%0Avisibility%3A%20hidden%3B%0A%7D%0A%0A%2Eleaflet%2Dclickable%20%7B%0Acursor%3A%20pointer%3B%0A%7D%0A%2Eleaflet%2Dcontainer%20%7B%0Acursor%3A%20%2Dwebkit%2Dgrab%3B%0Acursor%3A%20%2Dmoz%2Dgrab%3B%0A%7D%0A%2Eleaflet%2Dpopup%2Dpane%2C%0A%2Eleaflet%2Dcontrol%20%7B%0Acursor%3A%20auto%3B%0A%7D%0A%2Eleaflet%2Ddragging%20%2Eleaflet%2Dcontainer%2C%0A%2Eleaflet%2Ddragging%20%2Eleaflet%2Dclickable%20%7B%0Acursor%3A%20move%3B%0Acursor%3A%20%2Dwebkit%2Dgrabbing%3B%0Acursor%3A%20%2Dmoz%2Dgrabbing%3B%0A%7D%0A%0A%2Eleaflet%2Dcontainer%20%7B%0Abackground%3A%20%23ddd%3B%0Aoutline%3A%200%3B%0A%7D%0A%2Eleaflet%2Dcontainer%20a%20%7B%0Acolor%3A%20%230078A8%3B%0A%7D%0A%2Eleaflet%2Dcontainer%20a%2Eleaflet%2Dactive%20%7B%0Aoutline%3A%202px%20solid%20orange%3B%0A%7D%0A%2Eleaflet%2Dzoom%2Dbox%20%7B%0Aborder%3A%202px%20dotted%20%2338f%3B%0Abackground%3A%20rgba%28255%2C255%2C255%2C0%2E5%29%3B%0A%7D%0A%0A%2Eleaflet%2Dcontainer%20%7B%0Afont%3A%2012px%2F1%2E5%20%22Helvetica%20Neue%22%2C%20Arial%2C%20Helvetica%2C%20sans%2Dserif%3B%0A%7D%0A%0A%2Eleaflet%2Dbar%20%7B%0Abox%2Dshadow%3A%200%201px%205px%20rgba%280%2C0%2C0%2C0%2E65%29%3B%0Aborder%2Dradius%3A%204px%3B%0A%7D%0A%2Eleaflet%2Dbar%20a%2C%0A%2Eleaflet%2Dbar%20a%3Ahover%20%7B%0Abackground%2Dcolor%3A%20%23fff%3B%0Aborder%2Dbottom%3A%201px%20solid%20%23ccc%3B%0Awidth%3A%2026px%3B%0Aheight%3A%2026px%3B%0Aline%2Dheight%3A%2026px%3B%0Adisplay%3A%20block%3B%0Atext%2Dalign%3A%20center%3B%0Atext%2Ddecoration%3A%20none%3B%0Acolor%3A%20black%3B%0A%7D%0A%2Eleaflet%2Dbar%20a%2C%0A%2Eleaflet%2Dcontrol%2Dlayers%2Dtoggle%20%7B%0Abackground%2Dposition%3A%2050%25%2050%25%3B%0Abackground%2Drepeat%3A%20no%2Drepeat%3B%0Adisplay%3A%20block%3B%0A%7D%0A%2Eleaflet%2Dbar%20a%3Ahover%20%7B%0Abackground%2Dcolor%3A%20%23f4f4f4%3B%0A%7D%0A%2Eleaflet%2Dbar%20a%3Afirst%2Dchild%20%7B%0Aborder%2Dtop%2Dleft%2Dradius%3A%204px%3B%0Aborder%2Dtop%2Dright%2Dradius%3A%204px%3B%0A%7D%0A%2Eleaflet%2Dbar%20a%3Alast%2Dchild%20%7B%0Aborder%2Dbottom%2Dleft%2Dradius%3A%204px%3B%0Aborder%2Dbottom%2Dright%2Dradius%3A%204px%3B%0Aborder%2Dbottom%3A%20none%3B%0A%7D%0A%2Eleaflet%2Dbar%20a%2Eleaflet%2Ddisabled%20%7B%0Acursor%3A%20default%3B%0Abackground%2Dcolor%3A%20%23f4f4f4%3B%0Acolor%3A%20%23bbb%3B%0A%7D%0A%2Eleaflet%2Dtouch%20%2Eleaflet%2Dbar%20a%20%7B%0Awidth%3A%2030px%3B%0Aheight%3A%2030px%3B%0Aline%2Dheight%3A%2030px%3B%0A%7D%0A%0A%2Eleaflet%2Dcontrol%2Dzoom%2Din%2C%0A%2Eleaflet%2Dcontrol%2Dzoom%2Dout%20%7B%0Afont%3A%20bold%2018px%20%27Lucida%20Console%27%2C%20Monaco%2C%20monospace%3B%0Atext%2Dindent%3A%201px%3B%0A%7D%0A%2Eleaflet%2Dcontrol%2Dzoom%2Dout%20%7B%0Afont%2Dsize%3A%2020px%3B%0A%7D%0A%2Eleaflet%2Dtouch%20%2Eleaflet%2Dcontrol%2Dzoom%2Din%20%7B%0Afont%2Dsize%3A%2022px%3B%0A%7D%0A%2Eleaflet%2Dtouch%20%2Eleaflet%2Dcontrol%2Dzoom%2Dout%20%7B%0Afont%2Dsize%3A%2024px%3B%0A%7D%0A%0A%2Eleaflet%2Dcontrol%2Dlayers%20%7B%0Abox%2Dshadow%3A%200%201px%205px%20rgba%280%2C0%2C0%2C0%2E4%29%3B%0Abackground%3A%20%23fff%3B%0Aborder%2Dradius%3A%205px%3B%0A%7D%0A%2Eleaflet%2Dcontrol%2Dlayers%2Dtoggle%20%7B%0Abackground%2Dimage%3A%20url%28data%3Aimage%2Fpng%3Bbase64%2CiVBORw0KGgoAAAANSUhEUgAAABoAAAAaCAYAAACpSkzOAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAAN1wAADdcBQiibeAAAABl0RVh0U29mdHdhcmUAd3d3Lmlua3NjYXBlLm9yZ5vuPBoAAAVbSURBVEiJrZZfSFt3FMe%2Fv3tvbmLUZleNKSHE%2FLGRiNbGRovTtrA9lcFkpcOnMvawwhhjrb3soQ8djGFhXMQNRqEvY3R9kJVuPpRRWQebcdKYxkaHqcHchKJ2rVo1WhNz%2F%2Fz2UOLUadVuv9fvOedzfuec3x9CKcV%2B1qVLlwgAdHV17cuR7AfU29tb43a73wWAVCr1Q0dHx8T%2FCuru7i5ubGw843K5ms1mMwBgdXUV6XQ6HI1Gb3Z2dj7%2Fz6C%2Bvr6T1dXVp6xWa%2Bl2%2Buzs7PLk5OTP7e3tv70S6Pr1647q6uoOt9vtYRjmpcnouo5UKiVPTk72nj17dmpPIEmS%2BIaGhnaPx3O8tLSU3ahRSotyudzrAGAymf4ghGQ36svLy5osywOxWKxPFMX8jqBbt241ejyed%2Bx2e9nWjPL5fK2iKC2UUiMAEELWDAbDEM%2Fz41ttZ2Zmnsmy%2FOPp06ejm0DXrl2rqK2tPeNyuQ7zPL9pi5qmVaytrZ3Qdf3gdiVhGOYvo9H4O8uyc1sSI%2Bl0enR8fPzmuXPn5sjt27ff8nq9bwiCYNpSJsPa2lqzqqr1AF7eJEDnOG7MaDSGCSHKRmFhYSGXTCZ%2FZd1u93dOp3NJEAS9ICqK4snlcm%2Fpuu4EQHaBAADRdf2gqqo1hJBllmUXCsLjx4%2BL7t69e4Ztamqaffjw4QepVOr5oUOHDKqqvqkoShAAvwfA1sVrmlataVqlqqqzvb29lnA43KwoymeEUoqenp7XdF3vW11dPX7s2DHi9XpfgfHPSiaTuHfvHjWbzQMMw7SfP39%2BkUSj0ZOU0qsA%2FEtLSwiHwygpKUFraysOHDiwL0Amk8Hg4CBWVlbQ3NwMi8UCAHFCyIesw%2BH43uFwuAwGg9lkMsHj8SCfzyMUCkFRFNhsNux2YDVNQzQaRSgUgsvlwtGjR2EyvZitbDbL9Pf3H2YDgcD8xMREk67rCZvN5iSEkLKyMrjdbsiyjJGREVgslh13NzU1hf7%2Bfui6jra2NlitVhBCQCmlo6OjoYGBASWbzX5BKKW4cuWKhRDyk67rJ4LBIFNRUbEeaHZ2FpFIBDabDS0tLSgqKipkiqGhITx58gTBYBBWq3XdZ25uDpFIhLIsO8jzfPuFCxeekTt37rQCuAqgfmVlBfF4HOXl5Thy5Ah4%2FsXgUUoRj8chyzIaGhoAALFYDB6PB36%2FH4S8OAH5fB4PHjzA%2FPw8%2FH4%2FSkpKACAB4CPW6%2FXeqKysrOI4rpjnedjtdmSzWUSjURgMBgiCAEIIrFYrHA4HxsfHsbi4iNbWVtjt9nWILMsYGhpCeXk5ampqYDQaC3AyPDxcSy5evPg2IaTL6XTO%2B3y%2BNkIIAwCKoiCRSEBVVTQ1Ne3Yo0wmg%2BHhYXAcB5%2FPB4PBUJBoMpkclGW5lFJ6mVBKIYpiMYDLHMedCgQCnCAI%2FoL1wsICEokEHA4H6uvr1ydQ13WMjY1hamoKPp8PgiBshE%2Fev38%2FoyjKLwA%2BlyTp%2BabbWxTFOgDfCIKAQCAQ4DiutNCjdDqNp0%2BfIhAIAABGRkZQWVkJl8u1Xj5N01Zjsdjw3NwcBfCxJEl%2FFmL%2F6z0SRZEAeJ8QIvp8vsWqqqqWgpbL5RCPxwEAfr9%2F%2FawAwPT0dDgejxfput4D4FtJkjYF3vGFFUWxHMCXRqPxcDAYtBYXF1dtZ5fNZmcikcijbDY7DuBTSZLmt7Pb9c8gimIbIeQrm82Wqaura2EYxggAlFI1Ho8PTk9PmymlnZIkhV4WZ0%2B%2FIFEUOQCdDMO8V19fn2NZ1hCLxaimaTcAdEuSpO4WY1%2F%2FOlEUnQC%2BBkABfCJJ0qO9%2Bv4NmO9xnZob3WcAAAAASUVORK5CYII%3D%29%3B%0Awidth%3A%2036px%3B%0Aheight%3A%2036px%3B%0A%7D%0A%2Eleaflet%2Dretina%20%2Eleaflet%2Dcontrol%2Dlayers%2Dtoggle%20%7B%0Abackground%2Dimage%3A%20url%28data%3Aimage%2Fpng%3Bbase64%2CiVBORw0KGgoAAAANSUhEUgAAADQAAAA0CAYAAADFeBvrAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAAbrwAAG68BXhqRHAAAABl0RVh0U29mdHdhcmUAd3d3Lmlua3NjYXBlLm9yZ5vuPBoAAArPSURBVGiB3Zp7TFvXHce%2F916%2FeBhCDInJwDjGBhvjQHi5SclaKRL5Z1Wl%2FrEq%2FWNr11TJmkpMw900pLVrplJ1cadFarp0zdZmmpZpf3SqNrUKfSnKgwI2sQPGBmNjAsUOxCW8bGzfe8%2F%2BSEAkMfa1A5m075%2F2%2Bf3O%2BZ7X595zLkUIwf%2BT6EdRSWdnp7izs1P8KOqitnqE3n%2F%2F%2FQMajeYZAPD7%2FR8fPXr00lbWt2WGTp48qdRoNC%2Fs2bNHXVhYyALA%2FPy86Pr16wG%2F3%2F%2Fhq6%2B%2BGtqKejfdUGdnJ6XT6Q4bDIZWjUaTNLnf76fcbvdlr9d7vqura1MbsKmGTp8%2BXadWqw%2Fv3bu3UCQS8anKsixLX7t2bT4QCJw%2Ffvy4c7PasCmGTpw4Ia%2BqqnrRZDIZSkpK2ExiZ2dnRYODg%2B7R0dE%2Fv%2Fbaa4sP25aHNnT27Nkf6HS6QwaD4aF2TLfbzXu93gtHjhz5z8PkydrQqVOnKtVq9Y%2Fq6uqUubm5GY3KRopEIiKn0xkKBAJ%2FbW9v92WTI2NDnZ2dYoPB8ILRaGwoKyvjsqk0naamphiXyzXgdrs%2F7OrqSmQSm5GhM2fOHNBoNM%2FU1dVJKYoSFEgIEcVisWYAkEql%2FRRFCRpNQgjldDpjfr%2F%2F42PHjglmlyBDJ0%2BeVO7evfsndXV1FatMEaJEIqGOx%2BMHCCFyAKAoalEikVwSi8UBoTnm5%2BdFTqdzYnx8%2FC9C2JXS0CpT9Hr9gcrKypTb8HrxPJ%2B%2FsrJygOf53cn%2Bp2l6XCaTXaJpekloTp%2FPR3s8nkvp2LWhoXfffbderVYfbmhoKEjHlPVtjcVidSzLNhFCUj67URSVEIlENqlU6gQgKD%2FLsvTAwMBCIBA4%2F8orrziS5r3f0IkTJ%2BQ6ne6IyWQy7NixQ%2FCCZFm2NB6PP8Hz%2FHahMQBA0%2FR3EonkokgkCgqNmZmZEQ8ODrq9Xu%2FZ%2B9l1j6EPPvjgKZ1Od6impoYSmpzneVksFtvHcZxBaEwyMQzjlkqlPTRNrwiNGR4eJl6v98JLL73079XfKEIITp06VVlRUfHj%2Bvr6nZkwJR6P6xOJxH5CiCxTA8lEUdSKWCy%2BKpFIPEJjIpGIyOFw3JyYmDjX3t7uo86dO3fUaDQ2lJeXCzbCcdz2WCz2BM%2Fzpdk1PbVomg5KpdKLDMN8JzRmcnJS5HK5Bhi9Xv9RcXHx7V27dqUd6rtMMcfj8YOEkIKHa3bKeuQsy9bwPC9mGCZEUVTaTWNsbKzQbrc%2FRXV0dBAAMYVCcfnpp5%2BeKC4uTmrsfqY8KqVj161bt2SffPJJRTgcbgUgZVpbW3sIIQei0Wij0%2BksmZubW9DpdEsUdWdf4Hk%2BPxqNHmRZtgWA9NFZWZOU4zgdy7LFd0crDgCEEHz66aelX3zxxfcjkUg9gAmapg8zV65c8fX09PwpHo%2FzhJC22dnZ2oGBARQUFCwVFBTUxOPxQ4QQxf%2FAyD0ihBSxLFtDCCFerzdy%2Fvz5PcFg8CAhRAqgSy6XP%2Ffmm2%2BO3LNtd3R0VFEU9R6AgyKRiNfr9fS%2BffsgFj%2BS8420SiQS6Onpgcfj4VmWpQF8SQh5%2BZ133hldLSNaH%2FDss8%2BGGYYJ3Lhxg9jtdnpoaAiTk5NoampCdXX1IzewXiMjI7DZbJifn4dMJqPNZjNRqVQBjuPC68utjhA1MDDwPIDfASgG7vSGw%2BHA2NgYAEClUmH%2F%2Fv0oKip6pEbm5uZw9epV3LhxAwCg1WpRX1%2B%2FftbcAvCLhoaGjwAQyuFwGDmOOwOgNVnCcDiMvr4%2BzM3NQSaTwWg0orm5GTS9tUd6PM%2Bjv78fLpcLKysrKCoqQktLCxSKDZfzZYZhjjFarfYfKpWqmabppAslNzcXWq0WMpkMwWAQU1NTCAQCyM%2FPx7Zt27bEzMTEBD7%2F%2FHP4fD5QFIWGhgaYzWbk5uZuGMNxXPHXX39tYkwm07nh4eGZ3Nxcz%2Fbt27%2BXrDBFUVAoFNBoNIhEIggGg%2FD5fLh9%2BzaUSuWmbRqRSAQXL15EX18flpeXoVKp8OSTT0KpVGIVI8nk8%2Fn6uru7xYuLi3WrHDr07bffmvx%2Bf295eTktkUiSwlMsFkOlUqGkpAQzMzMIBoPwer0AAKVS%2BVBmHA4HvvrqK4RCIeTl5aG1tRU1NTUpO2t5eXn6s88%2BGx4fHzcDmKVp%2BjBFCMEbb7whW1xc%2FBWAXwJgKysrbS0tLY9TFCXaKBnP8xgaGoLb7QbHcSgtLcW%2BffsyNhYKhdDT04NgMAiGYWAwGFBbW5tyjRJC2L6%2Bvis%2Bn68Jd3bqt%2BVy%2BVuvv%2F76yoYcysvLi5nNZmm6Bi4sLMBmsyEUCkEsFkOv1%2BOxxx5LOw0TiQS%2B%2BeYbeDweJBIJKJVKNDU1oaAg9SNiKBRCb28vu7y8LEISDt1jqLu7ezuAt0Oh0IsjIyNUPB5HeXk5mpubIZWmfuqZmJiA3W7HysoKCgsLU7LrPqagsbERFRUVKfPHYjH09%2FdjcnISEokE1dXVUCqV%2FwLQ3tbWNvmAoe7u7ucBnMRdDrEsC6%2FXu5bAZDKhqqoq5eJMxy4BTHlAhBCMjo5icHAQqx2s0%2BkgEq2thiUAvwFwqq2tjaUuXLhQA%2BCPAL6fLOHCwgJcLhcWFxeFsADAg%2Byqra0FAAwNDQllygN55HI5jEZjqil5HcBPmerq6r%2Ft2LFjL8MwOclKSaVSlJWVQSKRIBQKwefzIRqNYufOnRsu3GTsmp6eFswUlmVht9ths9mQSCRQVVUFo9EImWzjF2OO4%2BROp1NPdXR0JAAsaLVat0ajeXzDCNyZxx6PBzdv3kROTg727t0LtVqdKgTRaBR2ux0A0NjYiJycpP22pkAggGvXrq11ml6vT7t%2Bp6en%2B10uVykhpIzq6OhoA%2FAegEqxWOxsamrKl8vllakShMNhDA8Pr1VqNpuRn5%2BfstJ0WlpaQm9v71pn1dTUpJ2S0Wh02mazTUajUTMAH4CXKUIILBaLDMAqh%2BiSkpIre%2FbsaWEYZsN5wfM8%2FH4%2FAoEAKIqCwWCAyWRKuWkkEyEEg4ODcLvdIIRArVZDo9Gk5ZDb7b4yNTW1xiEAb1mt1ns5ZLFYqnBntA5SFDVlNBqDu3btak7VoOXlZXg8HoTDYeTn56OlpUUwXEOhEPr6%2BrC0tASFQgG9Xo%2B8vLyUMeFweNDhcEg5jqsC8CWAl61Wa3IOrTP2HIDfA9iZk5PT29TUVJ6Tk7MrXeNGRkYghF0bMCWlkUQiMWe324cWFhZaAcwA%2BLnVav37%2FeU2PAq2WCyFALoAHAMQLSsrsxkMhpSPQ%2BnYJYApSeX3%2By%2BPjY3VANgG4AyATqvVOp%2BsbNrbB4vF0nw3SQPDMKP19fUxhUJhShWTjF0AMmEKAGBxcdFns9mWEolEHYABAMesVmt%2FqhhB1ykWi4UBcBzAbwHICwoKLjc2NtaKxeINX18JIZicnMTY2Bh4%2Fs6xGk3T0Gq1KC8vT7l5cBwXuX79et%2Fs7OzjAKIAfg3gtNVqTXvBltGFl8ViKQXwBwA%2FBPCdVqsd1mg0Sd90V7XKLgAZMwXAPwH8zGq1Cj7Iz%2BqO1WKxZMyudErGFKvV2p1pnqwvjbNhVzKlYko27Xroa%2F1s2LWqdEzJRpv2JUkm7BLKlGy0qZ%2FGCGFXJkzJRlvyNVYydkkkktxMmZKNtuzzsvvZBYADEEEGTMlGW%2F4B4Dp2ARkyJRv9F9vsxWD%2F43R9AAAAAElFTkSuQmCC%29%3B%0Abackground%2Dsize%3A%2026px%2026px%3B%0A%7D%0A%2Eleaflet%2Dtouch%20%2Eleaflet%2Dcontrol%2Dlayers%2Dtoggle%20%7B%0Awidth%3A%2044px%3B%0Aheight%3A%2044px%3B%0A%7D%0A%2Eleaflet%2Dcontrol%2Dlayers%20%2Eleaflet%2Dcontrol%2Dlayers%2Dlist%2C%0A%2Eleaflet%2Dcontrol%2Dlayers%2Dexpanded%20%2Eleaflet%2Dcontrol%2Dlayers%2Dtoggle%20%7B%0Adisplay%3A%20none%3B%0A%7D%0A%2Eleaflet%2Dcontrol%2Dlayers%2Dexpanded%20%2Eleaflet%2Dcontrol%2Dlayers%2Dlist%20%7B%0Adisplay%3A%20block%3B%0Aposition%3A%20relative%3B%0A%7D%0A%2Eleaflet%2Dcontrol%2Dlayers%2Dexpanded%20%7B%0Apadding%3A%206px%2010px%206px%206px%3B%0Acolor%3A%20%23333%3B%0Abackground%3A%20%23fff%3B%0A%7D%0A%2Eleaflet%2Dcontrol%2Dlayers%2Dselector%20%7B%0Amargin%2Dtop%3A%202px%3B%0Aposition%3A%20relative%3B%0Atop%3A%201px%3B%0A%7D%0A%2Eleaflet%2Dcontrol%2Dlayers%20label%20%7B%0Adisplay%3A%20block%3B%0A%7D%0A%2Eleaflet%2Dcontrol%2Dlayers%2Dseparator%20%7B%0Aheight%3A%200%3B%0Aborder%2Dtop%3A%201px%20solid%20%23ddd%3B%0Amargin%3A%205px%20%2D10px%205px%20%2D6px%3B%0A%7D%0A%0A%2Eleaflet%2Dcontainer%20%2Eleaflet%2Dcontrol%2Dattribution%20%7B%0Abackground%3A%20%23fff%3B%0Abackground%3A%20rgba%28255%2C%20255%2C%20255%2C%200%2E7%29%3B%0Amargin%3A%200%3B%0A%7D%0A%2Eleaflet%2Dcontrol%2Dattribution%2C%0A%2Eleaflet%2Dcontrol%2Dscale%2Dline%20%7B%0Apadding%3A%200%205px%3B%0Acolor%3A%20%23333%3B%0A%7D%0A%2Eleaflet%2Dcontrol%2Dattribution%20a%20%7B%0Atext%2Ddecoration%3A%20none%3B%0A%7D%0A%2Eleaflet%2Dcontrol%2Dattribution%20a%3Ahover%20%7B%0Atext%2Ddecoration%3A%20underline%3B%0A%7D%0A%2Eleaflet%2Dcontainer%20%2Eleaflet%2Dcontrol%2Dattribution%2C%0A%2Eleaflet%2Dcontainer%20%2Eleaflet%2Dcontrol%2Dscale%20%7B%0Afont%2Dsize%3A%2011px%3B%0A%7D%0A%2Eleaflet%2Dleft%20%2Eleaflet%2Dcontrol%2Dscale%20%7B%0Amargin%2Dleft%3A%205px%3B%0A%7D%0A%2Eleaflet%2Dbottom%20%2Eleaflet%2Dcontrol%2Dscale%20%7B%0Amargin%2Dbottom%3A%205px%3B%0A%7D%0A%2Eleaflet%2Dcontrol%2Dscale%2Dline%20%7B%0Aborder%3A%202px%20solid%20%23777%3B%0Aborder%2Dtop%3A%20none%3B%0Aline%2Dheight%3A%201%2E1%3B%0Apadding%3A%202px%205px%201px%3B%0Afont%2Dsize%3A%2011px%3B%0Awhite%2Dspace%3A%20nowrap%3B%0Aoverflow%3A%20hidden%3B%0A%2Dmoz%2Dbox%2Dsizing%3A%20content%2Dbox%3B%0Abox%2Dsizing%3A%20content%2Dbox%3B%0Abackground%3A%20%23fff%3B%0Abackground%3A%20rgba%28255%2C%20255%2C%20255%2C%200%2E5%29%3B%0A%7D%0A%2Eleaflet%2Dcontrol%2Dscale%2Dline%3Anot%28%3Afirst%2Dchild%29%20%7B%0Aborder%2Dtop%3A%202px%20solid%20%23777%3B%0Aborder%2Dbottom%3A%20none%3B%0Amargin%2Dtop%3A%20%2D2px%3B%0A%7D%0A%2Eleaflet%2Dcontrol%2Dscale%2Dline%3Anot%28%3Afirst%2Dchild%29%3Anot%28%3Alast%2Dchild%29%20%7B%0Aborder%2Dbottom%3A%202px%20solid%20%23777%3B%0A%7D%0A%2Eleaflet%2Dtouch%20%2Eleaflet%2Dcontrol%2Dattribution%2C%0A%2Eleaflet%2Dtouch%20%2Eleaflet%2Dcontrol%2Dlayers%2C%0A%2Eleaflet%2Dtouch%20%2Eleaflet%2Dbar%20%7B%0Abox%2Dshadow%3A%20none%3B%0A%7D%0A%2Eleaflet%2Dtouch%20%2Eleaflet%2Dcontrol%2Dlayers%2C%0A%2Eleaflet%2Dtouch%20%2Eleaflet%2Dbar%20%7B%0Aborder%3A%202px%20solid%20rgba%280%2C0%2C0%2C0%2E2%29%3B%0Abackground%2Dclip%3A%20padding%2Dbox%3B%0A%7D%0A%0A%2Eleaflet%2Dpopup%20%7B%0Aposition%3A%20absolute%3B%0Atext%2Dalign%3A%20center%3B%0A%7D%0A%2Eleaflet%2Dpopup%2Dcontent%2Dwrapper%20%7B%0Apadding%3A%201px%3B%0Atext%2Dalign%3A%20left%3B%0Aborder%2Dradius%3A%2012px%3B%0A%7D%0A%2Eleaflet%2Dpopup%2Dcontent%20%7B%0Amargin%3A%2013px%2019px%3B%0Aline%2Dheight%3A%201%2E4%3B%0A%7D%0A%2Eleaflet%2Dpopup%2Dcontent%20p%20%7B%0Amargin%3A%2018px%200%3B%0A%7D%0A%2Eleaflet%2Dpopup%2Dtip%2Dcontainer%20%7B%0Amargin%3A%200%20auto%3B%0Awidth%3A%2040px%3B%0Aheight%3A%2020px%3B%0Aposition%3A%20relative%3B%0Aoverflow%3A%20hidden%3B%0A%7D%0A%2Eleaflet%2Dpopup%2Dtip%20%7B%0Awidth%3A%2017px%3B%0Aheight%3A%2017px%3B%0Apadding%3A%201px%3B%0Amargin%3A%20%2D10px%20auto%200%3B%0A%2Dwebkit%2Dtransform%3A%20rotate%2845deg%29%3B%0A%2Dmoz%2Dtransform%3A%20rotate%2845deg%29%3B%0A%2Dms%2Dtransform%3A%20rotate%2845deg%29%3B%0A%2Do%2Dtransform%3A%20rotate%2845deg%29%3B%0Atransform%3A%20rotate%2845deg%29%3B%0A%7D%0A%2Eleaflet%2Dpopup%2Dcontent%2Dwrapper%2C%0A%2Eleaflet%2Dpopup%2Dtip%20%7B%0Abackground%3A%20white%3B%0Abox%2Dshadow%3A%200%203px%2014px%20rgba%280%2C0%2C0%2C0%2E4%29%3B%0A%7D%0A%2Eleaflet%2Dcontainer%20a%2Eleaflet%2Dpopup%2Dclose%2Dbutton%20%7B%0Aposition%3A%20absolute%3B%0Atop%3A%200%3B%0Aright%3A%200%3B%0Apadding%3A%204px%204px%200%200%3B%0Atext%2Dalign%3A%20center%3B%0Awidth%3A%2018px%3B%0Aheight%3A%2014px%3B%0Afont%3A%2016px%2F14px%20Tahoma%2C%20Verdana%2C%20sans%2Dserif%3B%0Acolor%3A%20%23c3c3c3%3B%0Atext%2Ddecoration%3A%20none%3B%0Afont%2Dweight%3A%20bold%3B%0Abackground%3A%20transparent%3B%0A%7D%0A%2Eleaflet%2Dcontainer%20a%2Eleaflet%2Dpopup%2Dclose%2Dbutton%3Ahover%20%7B%0Acolor%3A%20%23999%3B%0A%7D%0A%2Eleaflet%2Dpopup%2Dscrolled%20%7B%0Aoverflow%3A%20auto%3B%0Aborder%2Dbottom%3A%201px%20solid%20%23ddd%3B%0Aborder%2Dtop%3A%201px%20solid%20%23ddd%3B%0A%7D%0A%2Eleaflet%2Doldie%20%2Eleaflet%2Dpopup%2Dcontent%2Dwrapper%20%7B%0Azoom%3A%201%3B%0A%7D%0A%2Eleaflet%2Doldie%20%2Eleaflet%2Dpopup%2Dtip%20%7B%0Awidth%3A%2024px%3B%0Amargin%3A%200%20auto%3B%0A%2Dms%2Dfilter%3A%20%22progid%3ADXImageTransform%2EMicrosoft%2EMatrix%28M11%3D0%2E70710678%2C%20M12%3D0%2E70710678%2C%20M21%3D%2D0%2E70710678%2C%20M22%3D0%2E70710678%29%22%3B%0Afilter%3A%20progid%3ADXImageTransform%2EMicrosoft%2EMatrix%28M11%3D0%2E70710678%2C%20M12%3D0%2E70710678%2C%20M21%3D%2D0%2E70710678%2C%20M22%3D0%2E70710678%29%3B%0A%7D%0A%2Eleaflet%2Doldie%20%2Eleaflet%2Dpopup%2Dtip%2Dcontainer%20%7B%0Amargin%2Dtop%3A%20%2D1px%3B%0A%7D%0A%2Eleaflet%2Doldie%20%2Eleaflet%2Dcontrol%2Dzoom%2C%0A%2Eleaflet%2Doldie%20%2Eleaflet%2Dcontrol%2Dlayers%2C%0A%2Eleaflet%2Doldie%20%2Eleaflet%2Dpopup%2Dcontent%2Dwrapper%2C%0A%2Eleaflet%2Doldie%20%2Eleaflet%2Dpopup%2Dtip%20%7B%0Aborder%3A%201px%20solid%20%23999%3B%0A%7D%0A%0A%2Eleaflet%2Ddiv%2Dicon%20%7B%0Abackground%3A%20%23fff%3B%0Aborder%3A%201px%20solid%20%23666%3B%0A%7D%0A" rel="stylesheet" /> | |
| <script src="data:application/x-javascript;base64,LyoKIExlYWZsZXQsIGEgSmF2YVNjcmlwdCBsaWJyYXJ5IGZvciBtb2JpbGUtZnJpZW5kbHkgaW50ZXJhY3RpdmUgbWFwcy4gaHR0cDovL2xlYWZsZXRqcy5jb20KIChjKSAyMDEwLTIwMTUsIFZsYWRpbWlyIEFnYWZvbmtpbgogKGMpIDIwMTAtMjAxMSwgQ2xvdWRNYWRlCiovCiFmdW5jdGlvbih0LGUsaSl7dmFyIG49dC5MLG89e307by52ZXJzaW9uPSIwLjcuNyIsIm9iamVjdCI9PXR5cGVvZiBtb2R1bGUmJiJvYmplY3QiPT10eXBlb2YgbW9kdWxlLmV4cG9ydHM/bW9kdWxlLmV4cG9ydHM9bzoiZnVuY3Rpb24iPT10eXBlb2YgZGVmaW5lJiZkZWZpbmUuYW1kJiZkZWZpbmUobyksby5ub0NvbmZsaWN0PWZ1bmN0aW9uKCl7cmV0dXJuIHQuTD1uLHRoaXN9LHQuTD1vLG8uVXRpbD17ZXh0ZW5kOmZ1bmN0aW9uKHQpe3ZhciBlLGksbixvLHM9QXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYXJndW1lbnRzLDEpO2ZvcihpPTAsbj1zLmxlbmd0aDtuPmk7aSsrKXtvPXNbaV18fHt9O2ZvcihlIGluIG8pby5oYXNPd25Qcm9wZXJ0eShlKSYmKHRbZV09b1tlXSl9cmV0dXJuIHR9LGJpbmQ6ZnVuY3Rpb24odCxlKXt2YXIgaT1hcmd1bWVudHMubGVuZ3RoPjI/QXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYXJndW1lbnRzLDIpOm51bGw7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIHQuYXBwbHkoZSxpfHxhcmd1bWVudHMpfX0sc3RhbXA6ZnVuY3Rpb24oKXt2YXIgdD0wLGU9Il9sZWFmbGV0X2lkIjtyZXR1cm4gZnVuY3Rpb24oaSl7cmV0dXJuIGlbZV09aVtlXXx8Kyt0LGlbZV19fSgpLGludm9rZUVhY2g6ZnVuY3Rpb24odCxlLGkpe3ZhciBuLG87aWYoIm9iamVjdCI9PXR5cGVvZiB0KXtvPUFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cywzKTtmb3IobiBpbiB0KWUuYXBwbHkoaSxbbix0W25dXS5jb25jYXQobykpO3JldHVybiEwfXJldHVybiExfSxsaW1pdEV4ZWNCeUludGVydmFsOmZ1bmN0aW9uKHQsZSxpKXt2YXIgbixvO3JldHVybiBmdW5jdGlvbiBzKCl7dmFyIGE9YXJndW1lbnRzO3JldHVybiBuP3ZvaWQobz0hMCk6KG49ITAsc2V0VGltZW91dChmdW5jdGlvbigpe249ITEsbyYmKHMuYXBwbHkoaSxhKSxvPSExKX0sZSksdm9pZCB0LmFwcGx5KGksYSkpfX0sZmFsc2VGbjpmdW5jdGlvbigpe3JldHVybiExfSxmb3JtYXROdW06ZnVuY3Rpb24odCxlKXt2YXIgaT1NYXRoLnBvdygxMCxlfHw1KTtyZXR1cm4gTWF0aC5yb3VuZCh0KmkpL2l9LHRyaW06ZnVuY3Rpb24odCl7cmV0dXJuIHQudHJpbT90LnRyaW0oKTp0LnJlcGxhY2UoL15ccyt8XHMrJC9nLCIiKX0sc3BsaXRXb3JkczpmdW5jdGlvbih0KXtyZXR1cm4gby5VdGlsLnRyaW0odCkuc3BsaXQoL1xzKy8pfSxzZXRPcHRpb25zOmZ1bmN0aW9uKHQsZSl7cmV0dXJuIHQub3B0aW9ucz1vLmV4dGVuZCh7fSx0Lm9wdGlvbnMsZSksdC5vcHRpb25zfSxnZXRQYXJhbVN0cmluZzpmdW5jdGlvbih0LGUsaSl7dmFyIG49W107Zm9yKHZhciBvIGluIHQpbi5wdXNoKGVuY29kZVVSSUNvbXBvbmVudChpP28udG9VcHBlckNhc2UoKTpvKSsiPSIrZW5jb2RlVVJJQ29tcG9uZW50KHRbb10pKTtyZXR1cm4oZSYmLTEhPT1lLmluZGV4T2YoIj8iKT8iJiI6Ij8iKStuLmpvaW4oIiYiKX0sdGVtcGxhdGU6ZnVuY3Rpb24odCxlKXtyZXR1cm4gdC5yZXBsYWNlKC9ceyAqKFtcd19dKykgKlx9L2csZnVuY3Rpb24odCxuKXt2YXIgbz1lW25dO2lmKG89PT1pKXRocm93IG5ldyBFcnJvcigiTm8gdmFsdWUgcHJvdmlkZWQgZm9yIHZhcmlhYmxlICIrdCk7cmV0dXJuImZ1bmN0aW9uIj09dHlwZW9mIG8mJihvPW8oZSkpLG99KX0saXNBcnJheTpBcnJheS5pc0FycmF5fHxmdW5jdGlvbih0KXtyZXR1cm4iW29iamVjdCBBcnJheV0iPT09T2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKHQpfSxlbXB0eUltYWdlVXJsOiJkYXRhOmltYWdlL2dpZjtiYXNlNjQsUjBsR09EbGhBUUFCQUFEL0FDd0FBQUFBQVFBQkFBQUNBRHM9In0sZnVuY3Rpb24oKXtmdW5jdGlvbiBlKGUpe3ZhciBpLG4sbz1bIndlYmtpdCIsIm1veiIsIm8iLCJtcyJdO2ZvcihpPTA7aTxvLmxlbmd0aCYmIW47aSsrKW49dFtvW2ldK2VdO3JldHVybiBufWZ1bmN0aW9uIGkoZSl7dmFyIGk9K25ldyBEYXRlLG89TWF0aC5tYXgoMCwxNi0oaS1uKSk7cmV0dXJuIG49aStvLHQuc2V0VGltZW91dChlLG8pfXZhciBuPTAscz10LnJlcXVlc3RBbmltYXRpb25GcmFtZXx8ZSgiUmVxdWVzdEFuaW1hdGlvbkZyYW1lIil8fGksYT10LmNhbmNlbEFuaW1hdGlvbkZyYW1lfHxlKCJDYW5jZWxBbmltYXRpb25GcmFtZSIpfHxlKCJDYW5jZWxSZXF1ZXN0QW5pbWF0aW9uRnJhbWUiKXx8ZnVuY3Rpb24oZSl7dC5jbGVhclRpbWVvdXQoZSl9O28uVXRpbC5yZXF1ZXN0QW5pbUZyYW1lPWZ1bmN0aW9uKGUsbixhLHIpe3JldHVybiBlPW8uYmluZChlLG4pLGEmJnM9PT1pP3ZvaWQgZSgpOnMuY2FsbCh0LGUscil9LG8uVXRpbC5jYW5jZWxBbmltRnJhbWU9ZnVuY3Rpb24oZSl7ZSYmYS5jYWxsKHQsZSl9fSgpLG8uZXh0ZW5kPW8uVXRpbC5leHRlbmQsby5iaW5kPW8uVXRpbC5iaW5kLG8uc3RhbXA9by5VdGlsLnN0YW1wLG8uc2V0T3B0aW9ucz1vLlV0aWwuc2V0T3B0aW9ucyxvLkNsYXNzPWZ1bmN0aW9uKCl7fSxvLkNsYXNzLmV4dGVuZD1mdW5jdGlvbih0KXt2YXIgZT1mdW5jdGlvbigpe3RoaXMuaW5pdGlhbGl6ZSYmdGhpcy5pbml0aWFsaXplLmFwcGx5KHRoaXMsYXJndW1lbnRzKSx0aGlzLl9pbml0SG9va3MmJnRoaXMuY2FsbEluaXRIb29rcygpfSxpPWZ1bmN0aW9uKCl7fTtpLnByb3RvdHlwZT10aGlzLnByb3RvdHlwZTt2YXIgbj1uZXcgaTtuLmNvbnN0cnVjdG9yPWUsZS5wcm90b3R5cGU9bjtmb3IodmFyIHMgaW4gdGhpcyl0aGlzLmhhc093blByb3BlcnR5KHMpJiYicHJvdG90eXBlIiE9PXMmJihlW3NdPXRoaXNbc10pO3Quc3RhdGljcyYmKG8uZXh0ZW5kKGUsdC5zdGF0aWNzKSxkZWxldGUgdC5zdGF0aWNzKSx0LmluY2x1ZGVzJiYoby5VdGlsLmV4dGVuZC5hcHBseShudWxsLFtuXS5jb25jYXQodC5pbmNsdWRlcykpLGRlbGV0ZSB0LmluY2x1ZGVzKSx0Lm9wdGlvbnMmJm4ub3B0aW9ucyYmKHQub3B0aW9ucz1vLmV4dGVuZCh7fSxuLm9wdGlvbnMsdC5vcHRpb25zKSksby5leHRlbmQobix0KSxuLl9pbml0SG9va3M9W107dmFyIGE9dGhpcztyZXR1cm4gZS5fX3N1cGVyX189YS5wcm90b3R5cGUsbi5jYWxsSW5pdEhvb2tzPWZ1bmN0aW9uKCl7aWYoIXRoaXMuX2luaXRIb29rc0NhbGxlZCl7YS5wcm90b3R5cGUuY2FsbEluaXRIb29rcyYmYS5wcm90b3R5cGUuY2FsbEluaXRIb29rcy5jYWxsKHRoaXMpLHRoaXMuX2luaXRIb29rc0NhbGxlZD0hMDtmb3IodmFyIHQ9MCxlPW4uX2luaXRIb29rcy5sZW5ndGg7ZT50O3QrKyluLl9pbml0SG9va3NbdF0uY2FsbCh0aGlzKX19LGV9LG8uQ2xhc3MuaW5jbHVkZT1mdW5jdGlvbih0KXtvLmV4dGVuZCh0aGlzLnByb3RvdHlwZSx0KX0sby5DbGFzcy5tZXJnZU9wdGlvbnM9ZnVuY3Rpb24odCl7by5leHRlbmQodGhpcy5wcm90b3R5cGUub3B0aW9ucyx0KX0sby5DbGFzcy5hZGRJbml0SG9vaz1mdW5jdGlvbih0KXt2YXIgZT1BcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChhcmd1bWVudHMsMSksaT0iZnVuY3Rpb24iPT10eXBlb2YgdD90OmZ1bmN0aW9uKCl7dGhpc1t0XS5hcHBseSh0aGlzLGUpfTt0aGlzLnByb3RvdHlwZS5faW5pdEhvb2tzPXRoaXMucHJvdG90eXBlLl9pbml0SG9va3N8fFtdLHRoaXMucHJvdG90eXBlLl9pbml0SG9va3MucHVzaChpKX07dmFyIHM9Il9sZWFmbGV0X2V2ZW50cyI7by5NaXhpbj17fSxvLk1peGluLkV2ZW50cz17YWRkRXZlbnRMaXN0ZW5lcjpmdW5jdGlvbih0LGUsaSl7aWYoby5VdGlsLmludm9rZUVhY2godCx0aGlzLmFkZEV2ZW50TGlzdGVuZXIsdGhpcyxlLGkpKXJldHVybiB0aGlzO3ZhciBuLGEscixoLGwsdSxjLGQ9dGhpc1tzXT10aGlzW3NdfHx7fSxwPWkmJmkhPT10aGlzJiZvLnN0YW1wKGkpO2Zvcih0PW8uVXRpbC5zcGxpdFdvcmRzKHQpLG49MCxhPXQubGVuZ3RoO2E+bjtuKyspcj17YWN0aW9uOmUsY29udGV4dDppfHx0aGlzfSxoPXRbbl0scD8obD1oKyJfaWR4Iix1PWwrIl9sZW4iLGM9ZFtsXT1kW2xdfHx7fSxjW3BdfHwoY1twXT1bXSxkW3VdPShkW3VdfHwwKSsxKSxjW3BdLnB1c2gocikpOihkW2hdPWRbaF18fFtdLGRbaF0ucHVzaChyKSk7cmV0dXJuIHRoaXN9LGhhc0V2ZW50TGlzdGVuZXJzOmZ1bmN0aW9uKHQpe3ZhciBlPXRoaXNbc107cmV0dXJuISFlJiYodCBpbiBlJiZlW3RdLmxlbmd0aD4wfHx0KyJfaWR4ImluIGUmJmVbdCsiX2lkeF9sZW4iXT4wKX0scmVtb3ZlRXZlbnRMaXN0ZW5lcjpmdW5jdGlvbih0LGUsaSl7aWYoIXRoaXNbc10pcmV0dXJuIHRoaXM7aWYoIXQpcmV0dXJuIHRoaXMuY2xlYXJBbGxFdmVudExpc3RlbmVycygpO2lmKG8uVXRpbC5pbnZva2VFYWNoKHQsdGhpcy5yZW1vdmVFdmVudExpc3RlbmVyLHRoaXMsZSxpKSlyZXR1cm4gdGhpczt2YXIgbixhLHIsaCxsLHUsYyxkLHAsXz10aGlzW3NdLG09aSYmaSE9PXRoaXMmJm8uc3RhbXAoaSk7Zm9yKHQ9by5VdGlsLnNwbGl0V29yZHModCksbj0wLGE9dC5sZW5ndGg7YT5uO24rKylpZihyPXRbbl0sdT1yKyJfaWR4IixjPXUrIl9sZW4iLGQ9X1t1XSxlKXtpZihoPW0mJmQ/ZFttXTpfW3JdKXtmb3IobD1oLmxlbmd0aC0xO2w+PTA7bC0tKWhbbF0uYWN0aW9uIT09ZXx8aSYmaFtsXS5jb250ZXh0IT09aXx8KHA9aC5zcGxpY2UobCwxKSxwWzBdLmFjdGlvbj1vLlV0aWwuZmFsc2VGbik7aSYmZCYmMD09PWgubGVuZ3RoJiYoZGVsZXRlIGRbbV0sX1tjXS0tKX19ZWxzZSBkZWxldGUgX1tyXSxkZWxldGUgX1t1XSxkZWxldGUgX1tjXTtyZXR1cm4gdGhpc30sY2xlYXJBbGxFdmVudExpc3RlbmVyczpmdW5jdGlvbigpe3JldHVybiBkZWxldGUgdGhpc1tzXSx0aGlzfSxmaXJlRXZlbnQ6ZnVuY3Rpb24odCxlKXtpZighdGhpcy5oYXNFdmVudExpc3RlbmVycyh0KSlyZXR1cm4gdGhpczt2YXIgaSxuLGEscixoLGw9by5VdGlsLmV4dGVuZCh7fSxlLHt0eXBlOnQsdGFyZ2V0OnRoaXN9KSx1PXRoaXNbc107aWYodVt0XSlmb3IoaT11W3RdLnNsaWNlKCksbj0wLGE9aS5sZW5ndGg7YT5uO24rKylpW25dLmFjdGlvbi5jYWxsKGlbbl0uY29udGV4dCxsKTtyPXVbdCsiX2lkeCJdO2ZvcihoIGluIHIpaWYoaT1yW2hdLnNsaWNlKCkpZm9yKG49MCxhPWkubGVuZ3RoO2E+bjtuKyspaVtuXS5hY3Rpb24uY2FsbChpW25dLmNvbnRleHQsbCk7cmV0dXJuIHRoaXN9LGFkZE9uZVRpbWVFdmVudExpc3RlbmVyOmZ1bmN0aW9uKHQsZSxpKXtpZihvLlV0aWwuaW52b2tlRWFjaCh0LHRoaXMuYWRkT25lVGltZUV2ZW50TGlzdGVuZXIsdGhpcyxlLGkpKXJldHVybiB0aGlzO3ZhciBuPW8uYmluZChmdW5jdGlvbigpe3RoaXMucmVtb3ZlRXZlbnRMaXN0ZW5lcih0LGUsaSkucmVtb3ZlRXZlbnRMaXN0ZW5lcih0LG4saSl9LHRoaXMpO3JldHVybiB0aGlzLmFkZEV2ZW50TGlzdGVuZXIodCxlLGkpLmFkZEV2ZW50TGlzdGVuZXIodCxuLGkpfX0sby5NaXhpbi5FdmVudHMub249by5NaXhpbi5FdmVudHMuYWRkRXZlbnRMaXN0ZW5lcixvLk1peGluLkV2ZW50cy5vZmY9by5NaXhpbi5FdmVudHMucmVtb3ZlRXZlbnRMaXN0ZW5lcixvLk1peGluLkV2ZW50cy5vbmNlPW8uTWl4aW4uRXZlbnRzLmFkZE9uZVRpbWVFdmVudExpc3RlbmVyLG8uTWl4aW4uRXZlbnRzLmZpcmU9by5NaXhpbi5FdmVudHMuZmlyZUV2ZW50LGZ1bmN0aW9uKCl7dmFyIG49IkFjdGl2ZVhPYmplY3QiaW4gdCxzPW4mJiFlLmFkZEV2ZW50TGlzdGVuZXIsYT1uYXZpZ2F0b3IudXNlckFnZW50LnRvTG93ZXJDYXNlKCkscj0tMSE9PWEuaW5kZXhPZigid2Via2l0IiksaD0tMSE9PWEuaW5kZXhPZigiY2hyb21lIiksbD0tMSE9PWEuaW5kZXhPZigicGhhbnRvbSIpLHU9LTEhPT1hLmluZGV4T2YoImFuZHJvaWQiKSxjPS0xIT09YS5zZWFyY2goImFuZHJvaWQgWzIzXSIpLGQ9LTEhPT1hLmluZGV4T2YoImdlY2tvIikscD10eXBlb2Ygb3JpZW50YXRpb24hPWkrIiIsXz0hdC5Qb2ludGVyRXZlbnQmJnQuTVNQb2ludGVyRXZlbnQsbT10LlBvaW50ZXJFdmVudCYmdC5uYXZpZ2F0b3IucG9pbnRlckVuYWJsZWQmJnQubmF2aWdhdG9yLm1heFRvdWNoUG9pbnRzfHxfLGY9ImRldmljZVBpeGVsUmF0aW8iaW4gdCYmdC5kZXZpY2VQaXhlbFJhdGlvPjF8fCJtYXRjaE1lZGlhImluIHQmJnQubWF0Y2hNZWRpYSgiKG1pbi1yZXNvbHV0aW9uOjE0NGRwaSkiKSYmdC5tYXRjaE1lZGlhKCIobWluLXJlc29sdXRpb246MTQ0ZHBpKSIpLm1hdGNoZXMsZz1lLmRvY3VtZW50RWxlbWVudCx2PW4mJiJ0cmFuc2l0aW9uImluIGcuc3R5bGUseT0iV2ViS2l0Q1NTTWF0cml4ImluIHQmJiJtMTEiaW4gbmV3IHQuV2ViS2l0Q1NTTWF0cml4JiYhYyxQPSJNb3pQZXJzcGVjdGl2ZSJpbiBnLnN0eWxlLEw9Ik9UcmFuc2l0aW9uImluIGcuc3R5bGUseD0hdC5MX0RJU0FCTEVfM0QmJih2fHx5fHxQfHxMKSYmIWwsdz0hdC5MX05PX1RPVUNIJiYhbCYmKG18fCJvbnRvdWNoc3RhcnQiaW4gdHx8dC5Eb2N1bWVudFRvdWNoJiZlIGluc3RhbmNlb2YgdC5Eb2N1bWVudFRvdWNoKTtvLkJyb3dzZXI9e2llOm4saWVsdDk6cyx3ZWJraXQ6cixnZWNrbzpkJiYhciYmIXQub3BlcmEmJiFuLGFuZHJvaWQ6dSxhbmRyb2lkMjM6YyxjaHJvbWU6aCxpZTNkOnYsd2Via2l0M2Q6eSxnZWNrbzNkOlAsb3BlcmEzZDpMLGFueTNkOngsbW9iaWxlOnAsbW9iaWxlV2Via2l0OnAmJnIsbW9iaWxlV2Via2l0M2Q6cCYmeSxtb2JpbGVPcGVyYTpwJiZ0Lm9wZXJhLHRvdWNoOncsbXNQb2ludGVyOl8scG9pbnRlcjptLHJldGluYTpmfX0oKSxvLlBvaW50PWZ1bmN0aW9uKHQsZSxpKXt0aGlzLng9aT9NYXRoLnJvdW5kKHQpOnQsdGhpcy55PWk/TWF0aC5yb3VuZChlKTplfSxvLlBvaW50LnByb3RvdHlwZT17Y2xvbmU6ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IG8uUG9pbnQodGhpcy54LHRoaXMueSl9LGFkZDpmdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5jbG9uZSgpLl9hZGQoby5wb2ludCh0KSl9LF9hZGQ6ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMueCs9dC54LHRoaXMueSs9dC55LHRoaXN9LHN1YnRyYWN0OmZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLmNsb25lKCkuX3N1YnRyYWN0KG8ucG9pbnQodCkpfSxfc3VidHJhY3Q6ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMueC09dC54LHRoaXMueS09dC55LHRoaXN9LGRpdmlkZUJ5OmZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLmNsb25lKCkuX2RpdmlkZUJ5KHQpfSxfZGl2aWRlQnk6ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMueC89dCx0aGlzLnkvPXQsdGhpc30sbXVsdGlwbHlCeTpmdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5jbG9uZSgpLl9tdWx0aXBseUJ5KHQpfSxfbXVsdGlwbHlCeTpmdW5jdGlvbih0KXtyZXR1cm4gdGhpcy54Kj10LHRoaXMueSo9dCx0aGlzfSxyb3VuZDpmdW5jdGlvbigpe3JldHVybiB0aGlzLmNsb25lKCkuX3JvdW5kKCl9LF9yb3VuZDpmdW5jdGlvbigpe3JldHVybiB0aGlzLng9TWF0aC5yb3VuZCh0aGlzLngpLHRoaXMueT1NYXRoLnJvdW5kKHRoaXMueSksdGhpc30sZmxvb3I6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5jbG9uZSgpLl9mbG9vcigpfSxfZmxvb3I6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy54PU1hdGguZmxvb3IodGhpcy54KSx0aGlzLnk9TWF0aC5mbG9vcih0aGlzLnkpLHRoaXN9LGRpc3RhbmNlVG86ZnVuY3Rpb24odCl7dD1vLnBvaW50KHQpO3ZhciBlPXQueC10aGlzLngsaT10LnktdGhpcy55O3JldHVybiBNYXRoLnNxcnQoZSplK2kqaSl9LGVxdWFsczpmdW5jdGlvbih0KXtyZXR1cm4gdD1vLnBvaW50KHQpLHQueD09PXRoaXMueCYmdC55PT09dGhpcy55fSxjb250YWluczpmdW5jdGlvbih0KXtyZXR1cm4gdD1vLnBvaW50KHQpLE1hdGguYWJzKHQueCk8PU1hdGguYWJzKHRoaXMueCkmJk1hdGguYWJzKHQueSk8PU1hdGguYWJzKHRoaXMueSl9LHRvU3RyaW5nOmZ1bmN0aW9uKCl7cmV0dXJuIlBvaW50KCIrby5VdGlsLmZvcm1hdE51bSh0aGlzLngpKyIsICIrby5VdGlsLmZvcm1hdE51bSh0aGlzLnkpKyIpIn19LG8ucG9pbnQ9ZnVuY3Rpb24odCxlLG4pe3JldHVybiB0IGluc3RhbmNlb2Ygby5Qb2ludD90Om8uVXRpbC5pc0FycmF5KHQpP25ldyBvLlBvaW50KHRbMF0sdFsxXSk6dD09PWl8fG51bGw9PT10P3Q6bmV3IG8uUG9pbnQodCxlLG4pfSxvLkJvdW5kcz1mdW5jdGlvbih0LGUpe2lmKHQpZm9yKHZhciBpPWU/W3QsZV06dCxuPTAsbz1pLmxlbmd0aDtvPm47bisrKXRoaXMuZXh0ZW5kKGlbbl0pfSxvLkJvdW5kcy5wcm90b3R5cGU9e2V4dGVuZDpmdW5jdGlvbih0KXtyZXR1cm4gdD1vLnBvaW50KHQpLHRoaXMubWlufHx0aGlzLm1heD8odGhpcy5taW4ueD1NYXRoLm1pbih0LngsdGhpcy5taW4ueCksdGhpcy5tYXgueD1NYXRoLm1heCh0LngsdGhpcy5tYXgueCksdGhpcy5taW4ueT1NYXRoLm1pbih0LnksdGhpcy5taW4ueSksdGhpcy5tYXgueT1NYXRoLm1heCh0LnksdGhpcy5tYXgueSkpOih0aGlzLm1pbj10LmNsb25lKCksdGhpcy5tYXg9dC5jbG9uZSgpKSx0aGlzfSxnZXRDZW50ZXI6ZnVuY3Rpb24odCl7cmV0dXJuIG5ldyBvLlBvaW50KCh0aGlzLm1pbi54K3RoaXMubWF4LngpLzIsKHRoaXMubWluLnkrdGhpcy5tYXgueSkvMix0KX0sZ2V0Qm90dG9tTGVmdDpmdW5jdGlvbigpe3JldHVybiBuZXcgby5Qb2ludCh0aGlzLm1pbi54LHRoaXMubWF4LnkpfSxnZXRUb3BSaWdodDpmdW5jdGlvbigpe3JldHVybiBuZXcgby5Qb2ludCh0aGlzLm1heC54LHRoaXMubWluLnkpfSxnZXRTaXplOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMubWF4LnN1YnRyYWN0KHRoaXMubWluKX0sY29udGFpbnM6ZnVuY3Rpb24odCl7dmFyIGUsaTtyZXR1cm4gdD0ibnVtYmVyIj09dHlwZW9mIHRbMF18fHQgaW5zdGFuY2VvZiBvLlBvaW50P28ucG9pbnQodCk6by5ib3VuZHModCksdCBpbnN0YW5jZW9mIG8uQm91bmRzPyhlPXQubWluLGk9dC5tYXgpOmU9aT10LGUueD49dGhpcy5taW4ueCYmaS54PD10aGlzLm1heC54JiZlLnk+PXRoaXMubWluLnkmJmkueTw9dGhpcy5tYXgueX0saW50ZXJzZWN0czpmdW5jdGlvbih0KXt0PW8uYm91bmRzKHQpO3ZhciBlPXRoaXMubWluLGk9dGhpcy5tYXgsbj10Lm1pbixzPXQubWF4LGE9cy54Pj1lLngmJm4ueDw9aS54LHI9cy55Pj1lLnkmJm4ueTw9aS55O3JldHVybiBhJiZyfSxpc1ZhbGlkOmZ1bmN0aW9uKCl7cmV0dXJuISghdGhpcy5taW58fCF0aGlzLm1heCl9fSxvLmJvdW5kcz1mdW5jdGlvbih0LGUpe3JldHVybiF0fHx0IGluc3RhbmNlb2Ygby5Cb3VuZHM/dDpuZXcgby5Cb3VuZHModCxlKX0sby5UcmFuc2Zvcm1hdGlvbj1mdW5jdGlvbih0LGUsaSxuKXt0aGlzLl9hPXQsdGhpcy5fYj1lLHRoaXMuX2M9aSx0aGlzLl9kPW59LG8uVHJhbnNmb3JtYXRpb24ucHJvdG90eXBlPXt0cmFuc2Zvcm06ZnVuY3Rpb24odCxlKXtyZXR1cm4gdGhpcy5fdHJhbnNmb3JtKHQuY2xvbmUoKSxlKX0sX3RyYW5zZm9ybTpmdW5jdGlvbih0LGUpe3JldHVybiBlPWV8fDEsdC54PWUqKHRoaXMuX2EqdC54K3RoaXMuX2IpLHQueT1lKih0aGlzLl9jKnQueSt0aGlzLl9kKSx0fSx1bnRyYW5zZm9ybTpmdW5jdGlvbih0LGUpe3JldHVybiBlPWV8fDEsbmV3IG8uUG9pbnQoKHQueC9lLXRoaXMuX2IpL3RoaXMuX2EsKHQueS9lLXRoaXMuX2QpL3RoaXMuX2MpfX0sby5Eb21VdGlsPXtnZXQ6ZnVuY3Rpb24odCl7cmV0dXJuInN0cmluZyI9PXR5cGVvZiB0P2UuZ2V0RWxlbWVudEJ5SWQodCk6dH0sZ2V0U3R5bGU6ZnVuY3Rpb24odCxpKXt2YXIgbj10LnN0eWxlW2ldO2lmKCFuJiZ0LmN1cnJlbnRTdHlsZSYmKG49dC5jdXJyZW50U3R5bGVbaV0pLCghbnx8ImF1dG8iPT09bikmJmUuZGVmYXVsdFZpZXcpe3ZhciBvPWUuZGVmYXVsdFZpZXcuZ2V0Q29tcHV0ZWRTdHlsZSh0LG51bGwpO249bz9vW2ldOm51bGx9cmV0dXJuImF1dG8iPT09bj9udWxsOm59LGdldFZpZXdwb3J0T2Zmc2V0OmZ1bmN0aW9uKHQpe3ZhciBpLG49MCxzPTAsYT10LHI9ZS5ib2R5LGg9ZS5kb2N1bWVudEVsZW1lbnQ7ZG97aWYobis9YS5vZmZzZXRUb3B8fDAscys9YS5vZmZzZXRMZWZ0fHwwLG4rPXBhcnNlSW50KG8uRG9tVXRpbC5nZXRTdHlsZShhLCJib3JkZXJUb3BXaWR0aCIpLDEwKXx8MCxzKz1wYXJzZUludChvLkRvbVV0aWwuZ2V0U3R5bGUoYSwiYm9yZGVyTGVmdFdpZHRoIiksMTApfHwwLGk9by5Eb21VdGlsLmdldFN0eWxlKGEsInBvc2l0aW9uIiksYS5vZmZzZXRQYXJlbnQ9PT1yJiYiYWJzb2x1dGUiPT09aSlicmVhaztpZigiZml4ZWQiPT09aSl7bis9ci5zY3JvbGxUb3B8fGguc2Nyb2xsVG9wfHwwLHMrPXIuc2Nyb2xsTGVmdHx8aC5zY3JvbGxMZWZ0fHwwO2JyZWFrfWlmKCJyZWxhdGl2ZSI9PT1pJiYhYS5vZmZzZXRMZWZ0KXt2YXIgbD1vLkRvbVV0aWwuZ2V0U3R5bGUoYSwid2lkdGgiKSx1PW8uRG9tVXRpbC5nZXRTdHlsZShhLCJtYXgtd2lkdGgiKSxjPWEuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7KCJub25lIiE9PWx8fCJub25lIiE9PXUpJiYocys9Yy5sZWZ0K2EuY2xpZW50TGVmdCksbis9Yy50b3ArKHIuc2Nyb2xsVG9wfHxoLnNjcm9sbFRvcHx8MCk7YnJlYWt9YT1hLm9mZnNldFBhcmVudH13aGlsZShhKTthPXQ7ZG97aWYoYT09PXIpYnJlYWs7bi09YS5zY3JvbGxUb3B8fDAscy09YS5zY3JvbGxMZWZ0fHwwLGE9YS5wYXJlbnROb2RlfXdoaWxlKGEpO3JldHVybiBuZXcgby5Qb2ludChzLG4pfSxkb2N1bWVudElzTHRyOmZ1bmN0aW9uKCl7cmV0dXJuIG8uRG9tVXRpbC5fZG9jSXNMdHJDYWNoZWR8fChvLkRvbVV0aWwuX2RvY0lzTHRyQ2FjaGVkPSEwLG8uRG9tVXRpbC5fZG9jSXNMdHI9Imx0ciI9PT1vLkRvbVV0aWwuZ2V0U3R5bGUoZS5ib2R5LCJkaXJlY3Rpb24iKSksby5Eb21VdGlsLl9kb2NJc0x0cn0sY3JlYXRlOmZ1bmN0aW9uKHQsaSxuKXt2YXIgbz1lLmNyZWF0ZUVsZW1lbnQodCk7cmV0dXJuIG8uY2xhc3NOYW1lPWksbiYmbi5hcHBlbmRDaGlsZChvKSxvfSxoYXNDbGFzczpmdW5jdGlvbih0LGUpe2lmKHQuY2xhc3NMaXN0IT09aSlyZXR1cm4gdC5jbGFzc0xpc3QuY29udGFpbnMoZSk7dmFyIG49by5Eb21VdGlsLl9nZXRDbGFzcyh0KTtyZXR1cm4gbi5sZW5ndGg+MCYmbmV3IFJlZ0V4cCgiKF58XFxzKSIrZSsiKFxcc3wkKSIpLnRlc3Qobil9LGFkZENsYXNzOmZ1bmN0aW9uKHQsZSl7aWYodC5jbGFzc0xpc3QhPT1pKWZvcih2YXIgbj1vLlV0aWwuc3BsaXRXb3JkcyhlKSxzPTAsYT1uLmxlbmd0aDthPnM7cysrKXQuY2xhc3NMaXN0LmFkZChuW3NdKTtlbHNlIGlmKCFvLkRvbVV0aWwuaGFzQ2xhc3ModCxlKSl7dmFyIHI9by5Eb21VdGlsLl9nZXRDbGFzcyh0KTtvLkRvbVV0aWwuX3NldENsYXNzKHQsKHI/cisiICI6IiIpK2UpfX0scmVtb3ZlQ2xhc3M6ZnVuY3Rpb24odCxlKXt0LmNsYXNzTGlzdCE9PWk/dC5jbGFzc0xpc3QucmVtb3ZlKGUpOm8uRG9tVXRpbC5fc2V0Q2xhc3ModCxvLlV0aWwudHJpbSgoIiAiK28uRG9tVXRpbC5fZ2V0Q2xhc3ModCkrIiAiKS5yZXBsYWNlKCIgIitlKyIgIiwiICIpKSl9LF9zZXRDbGFzczpmdW5jdGlvbih0LGUpe3QuY2xhc3NOYW1lLmJhc2VWYWw9PT1pP3QuY2xhc3NOYW1lPWU6dC5jbGFzc05hbWUuYmFzZVZhbD1lfSxfZ2V0Q2xhc3M6ZnVuY3Rpb24odCl7cmV0dXJuIHQuY2xhc3NOYW1lLmJhc2VWYWw9PT1pP3QuY2xhc3NOYW1lOnQuY2xhc3NOYW1lLmJhc2VWYWx9LHNldE9wYWNpdHk6ZnVuY3Rpb24odCxlKXtpZigib3BhY2l0eSJpbiB0LnN0eWxlKXQuc3R5bGUub3BhY2l0eT1lO2Vsc2UgaWYoImZpbHRlciJpbiB0LnN0eWxlKXt2YXIgaT0hMSxuPSJEWEltYWdlVHJhbnNmb3JtLk1pY3Jvc29mdC5BbHBoYSI7dHJ5e2k9dC5maWx0ZXJzLml0ZW0obil9Y2F0Y2gobyl7aWYoMT09PWUpcmV0dXJufWU9TWF0aC5yb3VuZCgxMDAqZSksaT8oaS5FbmFibGVkPTEwMCE9PWUsaS5PcGFjaXR5PWUpOnQuc3R5bGUuZmlsdGVyKz0iIHByb2dpZDoiK24rIihvcGFjaXR5PSIrZSsiKSJ9fSx0ZXN0UHJvcDpmdW5jdGlvbih0KXtmb3IodmFyIGk9ZS5kb2N1bWVudEVsZW1lbnQuc3R5bGUsbj0wO248dC5sZW5ndGg7bisrKWlmKHRbbl1pbiBpKXJldHVybiB0W25dO3JldHVybiExfSxnZXRUcmFuc2xhdGVTdHJpbmc6ZnVuY3Rpb24odCl7dmFyIGU9by5Ccm93c2VyLndlYmtpdDNkLGk9InRyYW5zbGF0ZSIrKGU/IjNkIjoiIikrIigiLG49KGU/IiwwIjoiIikrIikiO3JldHVybiBpK3QueCsicHgsIit0LnkrInB4IitufSxnZXRTY2FsZVN0cmluZzpmdW5jdGlvbih0LGUpe3ZhciBpPW8uRG9tVXRpbC5nZXRUcmFuc2xhdGVTdHJpbmcoZS5hZGQoZS5tdWx0aXBseUJ5KC0xKnQpKSksbj0iIHNjYWxlKCIrdCsiKSAiO3JldHVybiBpK259LHNldFBvc2l0aW9uOmZ1bmN0aW9uKHQsZSxpKXt0Ll9sZWFmbGV0X3Bvcz1lLCFpJiZvLkJyb3dzZXIuYW55M2Q/dC5zdHlsZVtvLkRvbVV0aWwuVFJBTlNGT1JNXT1vLkRvbVV0aWwuZ2V0VHJhbnNsYXRlU3RyaW5nKGUpOih0LnN0eWxlLmxlZnQ9ZS54KyJweCIsdC5zdHlsZS50b3A9ZS55KyJweCIpfSxnZXRQb3NpdGlvbjpmdW5jdGlvbih0KXtyZXR1cm4gdC5fbGVhZmxldF9wb3N9fSxvLkRvbVV0aWwuVFJBTlNGT1JNPW8uRG9tVXRpbC50ZXN0UHJvcChbInRyYW5zZm9ybSIsIldlYmtpdFRyYW5zZm9ybSIsIk9UcmFuc2Zvcm0iLCJNb3pUcmFuc2Zvcm0iLCJtc1RyYW5zZm9ybSJdKSxvLkRvbVV0aWwuVFJBTlNJVElPTj1vLkRvbVV0aWwudGVzdFByb3AoWyJ3ZWJraXRUcmFuc2l0aW9uIiwidHJhbnNpdGlvbiIsIk9UcmFuc2l0aW9uIiwiTW96VHJhbnNpdGlvbiIsIm1zVHJhbnNpdGlvbiJdKSxvLkRvbVV0aWwuVFJBTlNJVElPTl9FTkQ9IndlYmtpdFRyYW5zaXRpb24iPT09by5Eb21VdGlsLlRSQU5TSVRJT058fCJPVHJhbnNpdGlvbiI9PT1vLkRvbVV0aWwuVFJBTlNJVElPTj9vLkRvbVV0aWwuVFJBTlNJVElPTisiRW5kIjoidHJhbnNpdGlvbmVuZCIsZnVuY3Rpb24oKXtpZigib25zZWxlY3RzdGFydCJpbiBlKW8uZXh0ZW5kKG8uRG9tVXRpbCx7ZGlzYWJsZVRleHRTZWxlY3Rpb246ZnVuY3Rpb24oKXtvLkRvbUV2ZW50Lm9uKHQsInNlbGVjdHN0YXJ0IixvLkRvbUV2ZW50LnByZXZlbnREZWZhdWx0KX0sZW5hYmxlVGV4dFNlbGVjdGlvbjpmdW5jdGlvbigpe28uRG9tRXZlbnQub2ZmKHQsInNlbGVjdHN0YXJ0IixvLkRvbUV2ZW50LnByZXZlbnREZWZhdWx0KX19KTtlbHNle3ZhciBpPW8uRG9tVXRpbC50ZXN0UHJvcChbInVzZXJTZWxlY3QiLCJXZWJraXRVc2VyU2VsZWN0IiwiT1VzZXJTZWxlY3QiLCJNb3pVc2VyU2VsZWN0IiwibXNVc2VyU2VsZWN0Il0pO28uZXh0ZW5kKG8uRG9tVXRpbCx7ZGlzYWJsZVRleHRTZWxlY3Rpb246ZnVuY3Rpb24oKXtpZihpKXt2YXIgdD1lLmRvY3VtZW50RWxlbWVudC5zdHlsZTt0aGlzLl91c2VyU2VsZWN0PXRbaV0sdFtpXT0ibm9uZSJ9fSxlbmFibGVUZXh0U2VsZWN0aW9uOmZ1bmN0aW9uKCl7aSYmKGUuZG9jdW1lbnRFbGVtZW50LnN0eWxlW2ldPXRoaXMuX3VzZXJTZWxlY3QsZGVsZXRlIHRoaXMuX3VzZXJTZWxlY3QpfX0pfW8uZXh0ZW5kKG8uRG9tVXRpbCx7ZGlzYWJsZUltYWdlRHJhZzpmdW5jdGlvbigpe28uRG9tRXZlbnQub24odCwiZHJhZ3N0YXJ0IixvLkRvbUV2ZW50LnByZXZlbnREZWZhdWx0KX0sZW5hYmxlSW1hZ2VEcmFnOmZ1bmN0aW9uKCl7by5Eb21FdmVudC5vZmYodCwiZHJhZ3N0YXJ0IixvLkRvbUV2ZW50LnByZXZlbnREZWZhdWx0KX19KX0oKSxvLkxhdExuZz1mdW5jdGlvbih0LGUsbil7aWYodD1wYXJzZUZsb2F0KHQpLGU9cGFyc2VGbG9hdChlKSxpc05hTih0KXx8aXNOYU4oZSkpdGhyb3cgbmV3IEVycm9yKCJJbnZhbGlkIExhdExuZyBvYmplY3Q6ICgiK3QrIiwgIitlKyIpIik7dGhpcy5sYXQ9dCx0aGlzLmxuZz1lLG4hPT1pJiYodGhpcy5hbHQ9cGFyc2VGbG9hdChuKSl9LG8uZXh0ZW5kKG8uTGF0TG5nLHtERUdfVE9fUkFEOk1hdGguUEkvMTgwLFJBRF9UT19ERUc6MTgwL01hdGguUEksTUFYX01BUkdJTjoxZS05fSksby5MYXRMbmcucHJvdG90eXBlPXtlcXVhbHM6ZnVuY3Rpb24odCl7aWYoIXQpcmV0dXJuITE7dD1vLmxhdExuZyh0KTt2YXIgZT1NYXRoLm1heChNYXRoLmFicyh0aGlzLmxhdC10LmxhdCksTWF0aC5hYnModGhpcy5sbmctdC5sbmcpKTtyZXR1cm4gZTw9by5MYXRMbmcuTUFYX01BUkdJTn0sdG9TdHJpbmc6ZnVuY3Rpb24odCl7cmV0dXJuIkxhdExuZygiK28uVXRpbC5mb3JtYXROdW0odGhpcy5sYXQsdCkrIiwgIitvLlV0aWwuZm9ybWF0TnVtKHRoaXMubG5nLHQpKyIpIn0sZGlzdGFuY2VUbzpmdW5jdGlvbih0KXt0PW8ubGF0TG5nKHQpO3ZhciBlPTYzNzgxMzcsaT1vLkxhdExuZy5ERUdfVE9fUkFELG49KHQubGF0LXRoaXMubGF0KSppLHM9KHQubG5nLXRoaXMubG5nKSppLGE9dGhpcy5sYXQqaSxyPXQubGF0KmksaD1NYXRoLnNpbihuLzIpLGw9TWF0aC5zaW4ocy8yKSx1PWgqaCtsKmwqTWF0aC5jb3MoYSkqTWF0aC5jb3Mocik7cmV0dXJuIDIqZSpNYXRoLmF0YW4yKE1hdGguc3FydCh1KSxNYXRoLnNxcnQoMS11KSl9LHdyYXA6ZnVuY3Rpb24odCxlKXt2YXIgaT10aGlzLmxuZztyZXR1cm4gdD10fHwtMTgwLGU9ZXx8MTgwLGk9KGkrZSklKGUtdCkrKHQ+aXx8aT09PWU/ZTp0KSxuZXcgby5MYXRMbmcodGhpcy5sYXQsaSl9fSxvLmxhdExuZz1mdW5jdGlvbih0LGUpe3JldHVybiB0IGluc3RhbmNlb2Ygby5MYXRMbmc/dDpvLlV0aWwuaXNBcnJheSh0KT8ibnVtYmVyIj09dHlwZW9mIHRbMF18fCJzdHJpbmciPT10eXBlb2YgdFswXT9uZXcgby5MYXRMbmcodFswXSx0WzFdLHRbMl0pOm51bGw6dD09PWl8fG51bGw9PT10P3Q6Im9iamVjdCI9PXR5cGVvZiB0JiYibGF0ImluIHQ/bmV3IG8uTGF0TG5nKHQubGF0LCJsbmciaW4gdD90LmxuZzp0Lmxvbik6ZT09PWk/bnVsbDpuZXcgby5MYXRMbmcodCxlKX0sby5MYXRMbmdCb3VuZHM9ZnVuY3Rpb24odCxlKXtpZih0KWZvcih2YXIgaT1lP1t0LGVdOnQsbj0wLG89aS5sZW5ndGg7bz5uO24rKyl0aGlzLmV4dGVuZChpW25dKX0sby5MYXRMbmdCb3VuZHMucHJvdG90eXBlPXtleHRlbmQ6ZnVuY3Rpb24odCl7aWYoIXQpcmV0dXJuIHRoaXM7dmFyIGU9by5sYXRMbmcodCk7cmV0dXJuIHQ9bnVsbCE9PWU/ZTpvLmxhdExuZ0JvdW5kcyh0KSx0IGluc3RhbmNlb2Ygby5MYXRMbmc/dGhpcy5fc291dGhXZXN0fHx0aGlzLl9ub3J0aEVhc3Q/KHRoaXMuX3NvdXRoV2VzdC5sYXQ9TWF0aC5taW4odC5sYXQsdGhpcy5fc291dGhXZXN0LmxhdCksdGhpcy5fc291dGhXZXN0LmxuZz1NYXRoLm1pbih0LmxuZyx0aGlzLl9zb3V0aFdlc3QubG5nKSx0aGlzLl9ub3J0aEVhc3QubGF0PU1hdGgubWF4KHQubGF0LHRoaXMuX25vcnRoRWFzdC5sYXQpLHRoaXMuX25vcnRoRWFzdC5sbmc9TWF0aC5tYXgodC5sbmcsdGhpcy5fbm9ydGhFYXN0LmxuZykpOih0aGlzLl9zb3V0aFdlc3Q9bmV3IG8uTGF0TG5nKHQubGF0LHQubG5nKSx0aGlzLl9ub3J0aEVhc3Q9bmV3IG8uTGF0TG5nKHQubGF0LHQubG5nKSk6dCBpbnN0YW5jZW9mIG8uTGF0TG5nQm91bmRzJiYodGhpcy5leHRlbmQodC5fc291dGhXZXN0KSx0aGlzLmV4dGVuZCh0Ll9ub3J0aEVhc3QpKSx0aGlzfSxwYWQ6ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5fc291dGhXZXN0LGk9dGhpcy5fbm9ydGhFYXN0LG49TWF0aC5hYnMoZS5sYXQtaS5sYXQpKnQscz1NYXRoLmFicyhlLmxuZy1pLmxuZykqdDtyZXR1cm4gbmV3IG8uTGF0TG5nQm91bmRzKG5ldyBvLkxhdExuZyhlLmxhdC1uLGUubG5nLXMpLG5ldyBvLkxhdExuZyhpLmxhdCtuLGkubG5nK3MpKX0sZ2V0Q2VudGVyOmZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBvLkxhdExuZygodGhpcy5fc291dGhXZXN0LmxhdCt0aGlzLl9ub3J0aEVhc3QubGF0KS8yLCh0aGlzLl9zb3V0aFdlc3QubG5nK3RoaXMuX25vcnRoRWFzdC5sbmcpLzIpfSxnZXRTb3V0aFdlc3Q6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fc291dGhXZXN0fSxnZXROb3J0aEVhc3Q6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fbm9ydGhFYXN0fSxnZXROb3J0aFdlc3Q6ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IG8uTGF0TG5nKHRoaXMuZ2V0Tm9ydGgoKSx0aGlzLmdldFdlc3QoKSl9LGdldFNvdXRoRWFzdDpmdW5jdGlvbigpe3JldHVybiBuZXcgby5MYXRMbmcodGhpcy5nZXRTb3V0aCgpLHRoaXMuZ2V0RWFzdCgpKX0sZ2V0V2VzdDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9zb3V0aFdlc3QubG5nfSxnZXRTb3V0aDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9zb3V0aFdlc3QubGF0fSxnZXRFYXN0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX25vcnRoRWFzdC5sbmd9LGdldE5vcnRoOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX25vcnRoRWFzdC5sYXR9LGNvbnRhaW5zOmZ1bmN0aW9uKHQpe3Q9Im51bWJlciI9PXR5cGVvZiB0WzBdfHx0IGluc3RhbmNlb2Ygby5MYXRMbmc/by5sYXRMbmcodCk6by5sYXRMbmdCb3VuZHModCk7dmFyIGUsaSxuPXRoaXMuX3NvdXRoV2VzdCxzPXRoaXMuX25vcnRoRWFzdDtyZXR1cm4gdCBpbnN0YW5jZW9mIG8uTGF0TG5nQm91bmRzPyhlPXQuZ2V0U291dGhXZXN0KCksaT10LmdldE5vcnRoRWFzdCgpKTplPWk9dCxlLmxhdD49bi5sYXQmJmkubGF0PD1zLmxhdCYmZS5sbmc+PW4ubG5nJiZpLmxuZzw9cy5sbmd9LGludGVyc2VjdHM6ZnVuY3Rpb24odCl7dD1vLmxhdExuZ0JvdW5kcyh0KTt2YXIgZT10aGlzLl9zb3V0aFdlc3QsaT10aGlzLl9ub3J0aEVhc3Qsbj10LmdldFNvdXRoV2VzdCgpLHM9dC5nZXROb3J0aEVhc3QoKSxhPXMubGF0Pj1lLmxhdCYmbi5sYXQ8PWkubGF0LHI9cy5sbmc+PWUubG5nJiZuLmxuZzw9aS5sbmc7cmV0dXJuIGEmJnJ9LHRvQkJveFN0cmluZzpmdW5jdGlvbigpe3JldHVyblt0aGlzLmdldFdlc3QoKSx0aGlzLmdldFNvdXRoKCksdGhpcy5nZXRFYXN0KCksdGhpcy5nZXROb3J0aCgpXS5qb2luKCIsIil9LGVxdWFsczpmdW5jdGlvbih0KXtyZXR1cm4gdD8odD1vLmxhdExuZ0JvdW5kcyh0KSx0aGlzLl9zb3V0aFdlc3QuZXF1YWxzKHQuZ2V0U291dGhXZXN0KCkpJiZ0aGlzLl9ub3J0aEVhc3QuZXF1YWxzKHQuZ2V0Tm9ydGhFYXN0KCkpKTohMX0saXNWYWxpZDpmdW5jdGlvbigpe3JldHVybiEoIXRoaXMuX3NvdXRoV2VzdHx8IXRoaXMuX25vcnRoRWFzdCl9fSxvLmxhdExuZ0JvdW5kcz1mdW5jdGlvbih0LGUpe3JldHVybiF0fHx0IGluc3RhbmNlb2Ygby5MYXRMbmdCb3VuZHM/dDpuZXcgby5MYXRMbmdCb3VuZHModCxlKX0sby5Qcm9qZWN0aW9uPXt9LG8uUHJvamVjdGlvbi5TcGhlcmljYWxNZXJjYXRvcj17TUFYX0xBVElUVURFOjg1LjA1MTEyODc3OTgscHJvamVjdDpmdW5jdGlvbih0KXt2YXIgZT1vLkxhdExuZy5ERUdfVE9fUkFELGk9dGhpcy5NQVhfTEFUSVRVREUsbj1NYXRoLm1heChNYXRoLm1pbihpLHQubGF0KSwtaSkscz10LmxuZyplLGE9biplO3JldHVybiBhPU1hdGgubG9nKE1hdGgudGFuKE1hdGguUEkvNCthLzIpKSxuZXcgby5Qb2ludChzLGEpfSx1bnByb2plY3Q6ZnVuY3Rpb24odCl7dmFyIGU9by5MYXRMbmcuUkFEX1RPX0RFRyxpPXQueCplLG49KDIqTWF0aC5hdGFuKE1hdGguZXhwKHQueSkpLU1hdGguUEkvMikqZTtyZXR1cm4gbmV3IG8uTGF0TG5nKG4saSl9fSxvLlByb2plY3Rpb24uTG9uTGF0PXtwcm9qZWN0OmZ1bmN0aW9uKHQpe3JldHVybiBuZXcgby5Qb2ludCh0LmxuZyx0LmxhdCl9LHVucHJvamVjdDpmdW5jdGlvbih0KXtyZXR1cm4gbmV3IG8uTGF0TG5nKHQueSx0LngpfX0sby5DUlM9e2xhdExuZ1RvUG9pbnQ6ZnVuY3Rpb24odCxlKXt2YXIgaT10aGlzLnByb2plY3Rpb24ucHJvamVjdCh0KSxuPXRoaXMuc2NhbGUoZSk7cmV0dXJuIHRoaXMudHJhbnNmb3JtYXRpb24uX3RyYW5zZm9ybShpLG4pfSxwb2ludFRvTGF0TG5nOmZ1bmN0aW9uKHQsZSl7dmFyIGk9dGhpcy5zY2FsZShlKSxuPXRoaXMudHJhbnNmb3JtYXRpb24udW50cmFuc2Zvcm0odCxpKTtyZXR1cm4gdGhpcy5wcm9qZWN0aW9uLnVucHJvamVjdChuKX0scHJvamVjdDpmdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5wcm9qZWN0aW9uLnByb2plY3QodCl9LHNjYWxlOmZ1bmN0aW9uKHQpe3JldHVybiAyNTYqTWF0aC5wb3coMix0KX0sZ2V0U2l6ZTpmdW5jdGlvbih0KXt2YXIgZT10aGlzLnNjYWxlKHQpO3JldHVybiBvLnBvaW50KGUsZSl9fSxvLkNSUy5TaW1wbGU9by5leHRlbmQoe30sby5DUlMse3Byb2plY3Rpb246by5Qcm9qZWN0aW9uLkxvbkxhdCx0cmFuc2Zvcm1hdGlvbjpuZXcgby5UcmFuc2Zvcm1hdGlvbigxLDAsLTEsMCksc2NhbGU6ZnVuY3Rpb24odCl7cmV0dXJuIE1hdGgucG93KDIsdCl9fSksby5DUlMuRVBTRzM4NTc9by5leHRlbmQoe30sby5DUlMse2NvZGU6IkVQU0c6Mzg1NyIscHJvamVjdGlvbjpvLlByb2plY3Rpb24uU3BoZXJpY2FsTWVyY2F0b3IsdHJhbnNmb3JtYXRpb246bmV3IG8uVHJhbnNmb3JtYXRpb24oLjUvTWF0aC5QSSwuNSwtLjUvTWF0aC5QSSwuNSkscHJvamVjdDpmdW5jdGlvbih0KXt2YXIgZT10aGlzLnByb2plY3Rpb24ucHJvamVjdCh0KSxpPTYzNzgxMzc7cmV0dXJuIGUubXVsdGlwbHlCeShpKX19KSxvLkNSUy5FUFNHOTAwOTEzPW8uZXh0ZW5kKHt9LG8uQ1JTLkVQU0czODU3LHtjb2RlOiJFUFNHOjkwMDkxMyJ9KSxvLkNSUy5FUFNHNDMyNj1vLmV4dGVuZCh7fSxvLkNSUyx7Y29kZToiRVBTRzo0MzI2Iixwcm9qZWN0aW9uOm8uUHJvamVjdGlvbi5Mb25MYXQsdHJhbnNmb3JtYXRpb246bmV3IG8uVHJhbnNmb3JtYXRpb24oMS8zNjAsLjUsLTEvMzYwLC41KX0pLG8uTWFwPW8uQ2xhc3MuZXh0ZW5kKHtpbmNsdWRlczpvLk1peGluLkV2ZW50cyxvcHRpb25zOntjcnM6by5DUlMuRVBTRzM4NTcsZmFkZUFuaW1hdGlvbjpvLkRvbVV0aWwuVFJBTlNJVElPTiYmIW8uQnJvd3Nlci5hbmRyb2lkMjMsdHJhY2tSZXNpemU6ITAsbWFya2VyWm9vbUFuaW1hdGlvbjpvLkRvbVV0aWwuVFJBTlNJVElPTiYmby5Ccm93c2VyLmFueTNkfSxpbml0aWFsaXplOmZ1bmN0aW9uKHQsZSl7ZT1vLnNldE9wdGlvbnModGhpcyxlKSx0aGlzLl9pbml0Q29udGFpbmVyKHQpLHRoaXMuX2luaXRMYXlvdXQoKSx0aGlzLl9vblJlc2l6ZT1vLmJpbmQodGhpcy5fb25SZXNpemUsdGhpcyksdGhpcy5faW5pdEV2ZW50cygpLGUubWF4Qm91bmRzJiZ0aGlzLnNldE1heEJvdW5kcyhlLm1heEJvdW5kcyksZS5jZW50ZXImJmUuem9vbSE9PWkmJnRoaXMuc2V0VmlldyhvLmxhdExuZyhlLmNlbnRlciksZS56b29tLHtyZXNldDohMH0pLHRoaXMuX2hhbmRsZXJzPVtdLHRoaXMuX2xheWVycz17fSx0aGlzLl96b29tQm91bmRMYXllcnM9e30sdGhpcy5fdGlsZUxheWVyc051bT0wLHRoaXMuY2FsbEluaXRIb29rcygpLHRoaXMuX2FkZExheWVycyhlLmxheWVycyl9LHNldFZpZXc6ZnVuY3Rpb24odCxlKXtyZXR1cm4gZT1lPT09aT90aGlzLmdldFpvb20oKTplLHRoaXMuX3Jlc2V0VmlldyhvLmxhdExuZyh0KSx0aGlzLl9saW1pdFpvb20oZSkpLHRoaXN9LHNldFpvb206ZnVuY3Rpb24odCxlKXtyZXR1cm4gdGhpcy5fbG9hZGVkP3RoaXMuc2V0Vmlldyh0aGlzLmdldENlbnRlcigpLHQse3pvb206ZX0pOih0aGlzLl96b29tPXRoaXMuX2xpbWl0Wm9vbSh0KSx0aGlzKX0sem9vbUluOmZ1bmN0aW9uKHQsZSl7cmV0dXJuIHRoaXMuc2V0Wm9vbSh0aGlzLl96b29tKyh0fHwxKSxlKX0sem9vbU91dDpmdW5jdGlvbih0LGUpe3JldHVybiB0aGlzLnNldFpvb20odGhpcy5fem9vbS0odHx8MSksZSl9LHNldFpvb21Bcm91bmQ6ZnVuY3Rpb24odCxlLGkpe3ZhciBuPXRoaXMuZ2V0Wm9vbVNjYWxlKGUpLHM9dGhpcy5nZXRTaXplKCkuZGl2aWRlQnkoMiksYT10IGluc3RhbmNlb2Ygby5Qb2ludD90OnRoaXMubGF0TG5nVG9Db250YWluZXJQb2ludCh0KSxyPWEuc3VidHJhY3QocykubXVsdGlwbHlCeSgxLTEvbiksaD10aGlzLmNvbnRhaW5lclBvaW50VG9MYXRMbmcocy5hZGQocikpO3JldHVybiB0aGlzLnNldFZpZXcoaCxlLHt6b29tOml9KX0sZml0Qm91bmRzOmZ1bmN0aW9uKHQsZSl7ZT1lfHx7fSx0PXQuZ2V0Qm91bmRzP3QuZ2V0Qm91bmRzKCk6by5sYXRMbmdCb3VuZHModCk7dmFyIGk9by5wb2ludChlLnBhZGRpbmdUb3BMZWZ0fHxlLnBhZGRpbmd8fFswLDBdKSxuPW8ucG9pbnQoZS5wYWRkaW5nQm90dG9tUmlnaHR8fGUucGFkZGluZ3x8WzAsMF0pLHM9dGhpcy5nZXRCb3VuZHNab29tKHQsITEsaS5hZGQobikpO3M9Im51bWJlciI9PXR5cGVvZiBlLm1heFpvb20/TWF0aC5taW4oZS5tYXhab29tLHMpOnM7dmFyIGE9bi5zdWJ0cmFjdChpKS5kaXZpZGVCeSgyKSxyPXRoaXMucHJvamVjdCh0LmdldFNvdXRoV2VzdCgpLHMpLGg9dGhpcy5wcm9qZWN0KHQuZ2V0Tm9ydGhFYXN0KCkscyksbD10aGlzLnVucHJvamVjdChyLmFkZChoKS5kaXZpZGVCeSgyKS5hZGQoYSkscyk7cmV0dXJuIHRoaXMuc2V0VmlldyhsLHMsZSl9LGZpdFdvcmxkOmZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLmZpdEJvdW5kcyhbWy05MCwtMTgwXSxbOTAsMTgwXV0sdCl9LHBhblRvOmZ1bmN0aW9uKHQsZSl7cmV0dXJuIHRoaXMuc2V0Vmlldyh0LHRoaXMuX3pvb20se3BhbjplfSl9LHBhbkJ5OmZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLmZpcmUoIm1vdmVzdGFydCIpLHRoaXMuX3Jhd1BhbkJ5KG8ucG9pbnQodCkpLHRoaXMuZmlyZSgibW92ZSIpLHRoaXMuZmlyZSgibW92ZWVuZCIpfSxzZXRNYXhCb3VuZHM6ZnVuY3Rpb24odCl7cmV0dXJuIHQ9by5sYXRMbmdCb3VuZHModCksdGhpcy5vcHRpb25zLm1heEJvdW5kcz10LHQ/KHRoaXMuX2xvYWRlZCYmdGhpcy5fcGFuSW5zaWRlTWF4Qm91bmRzKCksdGhpcy5vbigibW92ZWVuZCIsdGhpcy5fcGFuSW5zaWRlTWF4Qm91bmRzLHRoaXMpKTp0aGlzLm9mZigibW92ZWVuZCIsdGhpcy5fcGFuSW5zaWRlTWF4Qm91bmRzLHRoaXMpfSxwYW5JbnNpZGVCb3VuZHM6ZnVuY3Rpb24odCxlKXt2YXIgaT10aGlzLmdldENlbnRlcigpLG49dGhpcy5fbGltaXRDZW50ZXIoaSx0aGlzLl96b29tLHQpO3JldHVybiBpLmVxdWFscyhuKT90aGlzOnRoaXMucGFuVG8obixlKX0sYWRkTGF5ZXI6ZnVuY3Rpb24odCl7dmFyIGU9by5zdGFtcCh0KTtyZXR1cm4gdGhpcy5fbGF5ZXJzW2VdP3RoaXM6KHRoaXMuX2xheWVyc1tlXT10LCF0Lm9wdGlvbnN8fGlzTmFOKHQub3B0aW9ucy5tYXhab29tKSYmaXNOYU4odC5vcHRpb25zLm1pblpvb20pfHwodGhpcy5fem9vbUJvdW5kTGF5ZXJzW2VdPXQsdGhpcy5fdXBkYXRlWm9vbUxldmVscygpKSx0aGlzLm9wdGlvbnMuem9vbUFuaW1hdGlvbiYmby5UaWxlTGF5ZXImJnQgaW5zdGFuY2VvZiBvLlRpbGVMYXllciYmKHRoaXMuX3RpbGVMYXllcnNOdW0rKyx0aGlzLl90aWxlTGF5ZXJzVG9Mb2FkKyssdC5vbigibG9hZCIsdGhpcy5fb25UaWxlTGF5ZXJMb2FkLHRoaXMpKSx0aGlzLl9sb2FkZWQmJnRoaXMuX2xheWVyQWRkKHQpLHRoaXMpfSxyZW1vdmVMYXllcjpmdW5jdGlvbih0KXt2YXIgZT1vLnN0YW1wKHQpO3JldHVybiB0aGlzLl9sYXllcnNbZV0/KHRoaXMuX2xvYWRlZCYmdC5vblJlbW92ZSh0aGlzKSxkZWxldGUgdGhpcy5fbGF5ZXJzW2VdLHRoaXMuX2xvYWRlZCYmdGhpcy5maXJlKCJsYXllcnJlbW92ZSIse2xheWVyOnR9KSx0aGlzLl96b29tQm91bmRMYXllcnNbZV0mJihkZWxldGUgdGhpcy5fem9vbUJvdW5kTGF5ZXJzW2VdLHRoaXMuX3VwZGF0ZVpvb21MZXZlbHMoKSksdGhpcy5vcHRpb25zLnpvb21BbmltYXRpb24mJm8uVGlsZUxheWVyJiZ0IGluc3RhbmNlb2Ygby5UaWxlTGF5ZXImJih0aGlzLl90aWxlTGF5ZXJzTnVtLS0sdGhpcy5fdGlsZUxheWVyc1RvTG9hZC0tLHQub2ZmKCJsb2FkIix0aGlzLl9vblRpbGVMYXllckxvYWQsdGhpcykpLHRoaXMpOnRoaXN9LGhhc0xheWVyOmZ1bmN0aW9uKHQpe3JldHVybiB0P28uc3RhbXAodClpbiB0aGlzLl9sYXllcnM6ITF9LGVhY2hMYXllcjpmdW5jdGlvbih0LGUpe2Zvcih2YXIgaSBpbiB0aGlzLl9sYXllcnMpdC5jYWxsKGUsdGhpcy5fbGF5ZXJzW2ldKTtyZXR1cm4gdGhpc30saW52YWxpZGF0ZVNpemU6ZnVuY3Rpb24odCl7aWYoIXRoaXMuX2xvYWRlZClyZXR1cm4gdGhpczt0PW8uZXh0ZW5kKHthbmltYXRlOiExLHBhbjohMH0sdD09PSEwP3thbmltYXRlOiEwfTp0KTt2YXIgZT10aGlzLmdldFNpemUoKTt0aGlzLl9zaXplQ2hhbmdlZD0hMCx0aGlzLl9pbml0aWFsQ2VudGVyPW51bGw7dmFyIGk9dGhpcy5nZXRTaXplKCksbj1lLmRpdmlkZUJ5KDIpLnJvdW5kKCkscz1pLmRpdmlkZUJ5KDIpLnJvdW5kKCksYT1uLnN1YnRyYWN0KHMpO3JldHVybiBhLnh8fGEueT8odC5hbmltYXRlJiZ0LnBhbj90aGlzLnBhbkJ5KGEpOih0LnBhbiYmdGhpcy5fcmF3UGFuQnkoYSksdGhpcy5maXJlKCJtb3ZlIiksdC5kZWJvdW5jZU1vdmVlbmQ/KGNsZWFyVGltZW91dCh0aGlzLl9zaXplVGltZXIpLHRoaXMuX3NpemVUaW1lcj1zZXRUaW1lb3V0KG8uYmluZCh0aGlzLmZpcmUsdGhpcywibW92ZWVuZCIpLDIwMCkpOnRoaXMuZmlyZSgibW92ZWVuZCIpKSx0aGlzLmZpcmUoInJlc2l6ZSIse29sZFNpemU6ZSxuZXdTaXplOml9KSk6dGhpc30sYWRkSGFuZGxlcjpmdW5jdGlvbih0LGUpe2lmKCFlKXJldHVybiB0aGlzO3ZhciBpPXRoaXNbdF09bmV3IGUodGhpcyk7cmV0dXJuIHRoaXMuX2hhbmRsZXJzLnB1c2goaSksdGhpcy5vcHRpb25zW3RdJiZpLmVuYWJsZSgpLHRoaXN9LHJlbW92ZTpmdW5jdGlvbigpe3RoaXMuX2xvYWRlZCYmdGhpcy5maXJlKCJ1bmxvYWQiKSx0aGlzLl9pbml0RXZlbnRzKCJvZmYiKTt0cnl7ZGVsZXRlIHRoaXMuX2NvbnRhaW5lci5fbGVhZmxldH1jYXRjaCh0KXt0aGlzLl9jb250YWluZXIuX2xlYWZsZXQ9aX1yZXR1cm4gdGhpcy5fY2xlYXJQYW5lcygpLHRoaXMuX2NsZWFyQ29udHJvbFBvcyYmdGhpcy5fY2xlYXJDb250cm9sUG9zKCksdGhpcy5fY2xlYXJIYW5kbGVycygpLHRoaXN9LGdldENlbnRlcjpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9jaGVja0lmTG9hZGVkKCksdGhpcy5faW5pdGlhbENlbnRlciYmIXRoaXMuX21vdmVkKCk/dGhpcy5faW5pdGlhbENlbnRlcjp0aGlzLmxheWVyUG9pbnRUb0xhdExuZyh0aGlzLl9nZXRDZW50ZXJMYXllclBvaW50KCkpfSxnZXRab29tOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3pvb219LGdldEJvdW5kczpmdW5jdGlvbigpe3ZhciB0PXRoaXMuZ2V0UGl4ZWxCb3VuZHMoKSxlPXRoaXMudW5wcm9qZWN0KHQuZ2V0Qm90dG9tTGVmdCgpKSxpPXRoaXMudW5wcm9qZWN0KHQuZ2V0VG9wUmlnaHQoKSk7cmV0dXJuIG5ldyBvLkxhdExuZ0JvdW5kcyhlLGkpfSxnZXRNaW5ab29tOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMub3B0aW9ucy5taW5ab29tPT09aT90aGlzLl9sYXllcnNNaW5ab29tPT09aT8wOnRoaXMuX2xheWVyc01pblpvb206dGhpcy5vcHRpb25zLm1pblpvb219LGdldE1heFpvb206ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5vcHRpb25zLm1heFpvb209PT1pP3RoaXMuX2xheWVyc01heFpvb209PT1pPzEvMDp0aGlzLl9sYXllcnNNYXhab29tOnRoaXMub3B0aW9ucy5tYXhab29tfSxnZXRCb3VuZHNab29tOmZ1bmN0aW9uKHQsZSxpKXt0PW8ubGF0TG5nQm91bmRzKHQpO3ZhciBuLHM9dGhpcy5nZXRNaW5ab29tKCktKGU/MTowKSxhPXRoaXMuZ2V0TWF4Wm9vbSgpLHI9dGhpcy5nZXRTaXplKCksaD10LmdldE5vcnRoV2VzdCgpLGw9dC5nZXRTb3V0aEVhc3QoKSx1PSEwO2k9by5wb2ludChpfHxbMCwwXSk7ZG8gcysrLG49dGhpcy5wcm9qZWN0KGwscykuc3VidHJhY3QodGhpcy5wcm9qZWN0KGgscykpLmFkZChpKSx1PWU/bi54PHIueHx8bi55PHIueTpyLmNvbnRhaW5zKG4pO3doaWxlKHUmJmE+PXMpO3JldHVybiB1JiZlP251bGw6ZT9zOnMtMX0sZ2V0U2l6ZTpmdW5jdGlvbigpe3JldHVybighdGhpcy5fc2l6ZXx8dGhpcy5fc2l6ZUNoYW5nZWQpJiYodGhpcy5fc2l6ZT1uZXcgby5Qb2ludCh0aGlzLl9jb250YWluZXIuY2xpZW50V2lkdGgsdGhpcy5fY29udGFpbmVyLmNsaWVudEhlaWdodCksdGhpcy5fc2l6ZUNoYW5nZWQ9ITEpLHRoaXMuX3NpemUuY2xvbmUoKX0sZ2V0UGl4ZWxCb3VuZHM6ZnVuY3Rpb24oKXt2YXIgdD10aGlzLl9nZXRUb3BMZWZ0UG9pbnQoKTtyZXR1cm4gbmV3IG8uQm91bmRzKHQsdC5hZGQodGhpcy5nZXRTaXplKCkpKX0sZ2V0UGl4ZWxPcmlnaW46ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fY2hlY2tJZkxvYWRlZCgpLHRoaXMuX2luaXRpYWxUb3BMZWZ0UG9pbnR9LGdldFBhbmVzOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3BhbmVzfSxnZXRDb250YWluZXI6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fY29udGFpbmVyfSxnZXRab29tU2NhbGU6ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5vcHRpb25zLmNycztyZXR1cm4gZS5zY2FsZSh0KS9lLnNjYWxlKHRoaXMuX3pvb20pfSxnZXRTY2FsZVpvb206ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuX3pvb20rTWF0aC5sb2codCkvTWF0aC5MTjJ9LHByb2plY3Q6ZnVuY3Rpb24odCxlKXtyZXR1cm4gZT1lPT09aT90aGlzLl96b29tOmUsdGhpcy5vcHRpb25zLmNycy5sYXRMbmdUb1BvaW50KG8ubGF0TG5nKHQpLGUpfSx1bnByb2plY3Q6ZnVuY3Rpb24odCxlKXtyZXR1cm4gZT1lPT09aT90aGlzLl96b29tOmUsdGhpcy5vcHRpb25zLmNycy5wb2ludFRvTGF0TG5nKG8ucG9pbnQodCksZSl9LGxheWVyUG9pbnRUb0xhdExuZzpmdW5jdGlvbih0KXt2YXIgZT1vLnBvaW50KHQpLmFkZCh0aGlzLmdldFBpeGVsT3JpZ2luKCkpO3JldHVybiB0aGlzLnVucHJvamVjdChlKX0sbGF0TG5nVG9MYXllclBvaW50OmZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMucHJvamVjdChvLmxhdExuZyh0KSkuX3JvdW5kKCk7cmV0dXJuIGUuX3N1YnRyYWN0KHRoaXMuZ2V0UGl4ZWxPcmlnaW4oKSl9LGNvbnRhaW5lclBvaW50VG9MYXllclBvaW50OmZ1bmN0aW9uKHQpe3JldHVybiBvLnBvaW50KHQpLnN1YnRyYWN0KHRoaXMuX2dldE1hcFBhbmVQb3MoKSl9LGxheWVyUG9pbnRUb0NvbnRhaW5lclBvaW50OmZ1bmN0aW9uKHQpe3JldHVybiBvLnBvaW50KHQpLmFkZCh0aGlzLl9nZXRNYXBQYW5lUG9zKCkpfSxjb250YWluZXJQb2ludFRvTGF0TG5nOmZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMuY29udGFpbmVyUG9pbnRUb0xheWVyUG9pbnQoby5wb2ludCh0KSk7cmV0dXJuIHRoaXMubGF5ZXJQb2ludFRvTGF0TG5nKGUpfSxsYXRMbmdUb0NvbnRhaW5lclBvaW50OmZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLmxheWVyUG9pbnRUb0NvbnRhaW5lclBvaW50KHRoaXMubGF0TG5nVG9MYXllclBvaW50KG8ubGF0TG5nKHQpKSl9LG1vdXNlRXZlbnRUb0NvbnRhaW5lclBvaW50OmZ1bmN0aW9uKHQpe3JldHVybiBvLkRvbUV2ZW50LmdldE1vdXNlUG9zaXRpb24odCx0aGlzLl9jb250YWluZXIpfSxtb3VzZUV2ZW50VG9MYXllclBvaW50OmZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLmNvbnRhaW5lclBvaW50VG9MYXllclBvaW50KHRoaXMubW91c2VFdmVudFRvQ29udGFpbmVyUG9pbnQodCkpfSxtb3VzZUV2ZW50VG9MYXRMbmc6ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMubGF5ZXJQb2ludFRvTGF0TG5nKHRoaXMubW91c2VFdmVudFRvTGF5ZXJQb2ludCh0KSl9LF9pbml0Q29udGFpbmVyOmZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMuX2NvbnRhaW5lcj1vLkRvbVV0aWwuZ2V0KHQpO2lmKCFlKXRocm93IG5ldyBFcnJvcigiTWFwIGNvbnRhaW5lciBub3QgZm91bmQuIik7aWYoZS5fbGVhZmxldCl0aHJvdyBuZXcgRXJyb3IoIk1hcCBjb250YWluZXIgaXMgYWxyZWFkeSBpbml0aWFsaXplZC4iKTtlLl9sZWFmbGV0PSEwfSxfaW5pdExheW91dDpmdW5jdGlvbigpe3ZhciB0PXRoaXMuX2NvbnRhaW5lcjtvLkRvbVV0aWwuYWRkQ2xhc3ModCwibGVhZmxldC1jb250YWluZXIiKyhvLkJyb3dzZXIudG91Y2g/IiBsZWFmbGV0LXRvdWNoIjoiIikrKG8uQnJvd3Nlci5yZXRpbmE/IiBsZWFmbGV0LXJldGluYSI6IiIpKyhvLkJyb3dzZXIuaWVsdDk/IiBsZWFmbGV0LW9sZGllIjoiIikrKHRoaXMub3B0aW9ucy5mYWRlQW5pbWF0aW9uPyIgbGVhZmxldC1mYWRlLWFuaW0iOiIiKSk7dmFyIGU9by5Eb21VdGlsLmdldFN0eWxlKHQsInBvc2l0aW9uIik7ImFic29sdXRlIiE9PWUmJiJyZWxhdGl2ZSIhPT1lJiYiZml4ZWQiIT09ZSYmKHQuc3R5bGUucG9zaXRpb249InJlbGF0aXZlIiksdGhpcy5faW5pdFBhbmVzKCksdGhpcy5faW5pdENvbnRyb2xQb3MmJnRoaXMuX2luaXRDb250cm9sUG9zKCl9LF9pbml0UGFuZXM6ZnVuY3Rpb24oKXt2YXIgdD10aGlzLl9wYW5lcz17fTt0aGlzLl9tYXBQYW5lPXQubWFwUGFuZT10aGlzLl9jcmVhdGVQYW5lKCJsZWFmbGV0LW1hcC1wYW5lIix0aGlzLl9jb250YWluZXIpLHRoaXMuX3RpbGVQYW5lPXQudGlsZVBhbmU9dGhpcy5fY3JlYXRlUGFuZSgibGVhZmxldC10aWxlLXBhbmUiLHRoaXMuX21hcFBhbmUpLHQub2JqZWN0c1BhbmU9dGhpcy5fY3JlYXRlUGFuZSgibGVhZmxldC1vYmplY3RzLXBhbmUiLHRoaXMuX21hcFBhbmUpLHQuc2hhZG93UGFuZT10aGlzLl9jcmVhdGVQYW5lKCJsZWFmbGV0LXNoYWRvdy1wYW5lIiksdC5vdmVybGF5UGFuZT10aGlzLl9jcmVhdGVQYW5lKCJsZWFmbGV0LW92ZXJsYXktcGFuZSIpLHQubWFya2VyUGFuZT10aGlzLl9jcmVhdGVQYW5lKCJsZWFmbGV0LW1hcmtlci1wYW5lIiksdC5wb3B1cFBhbmU9dGhpcy5fY3JlYXRlUGFuZSgibGVhZmxldC1wb3B1cC1wYW5lIik7dmFyIGU9IiBsZWFmbGV0LXpvb20taGlkZSI7dGhpcy5vcHRpb25zLm1hcmtlclpvb21BbmltYXRpb258fChvLkRvbVV0aWwuYWRkQ2xhc3ModC5tYXJrZXJQYW5lLGUpLG8uRG9tVXRpbC5hZGRDbGFzcyh0LnNoYWRvd1BhbmUsZSksby5Eb21VdGlsLmFkZENsYXNzKHQucG9wdXBQYW5lLGUpKX0sX2NyZWF0ZVBhbmU6ZnVuY3Rpb24odCxlKXtyZXR1cm4gby5Eb21VdGlsLmNyZWF0ZSgiZGl2Iix0LGV8fHRoaXMuX3BhbmVzLm9iamVjdHNQYW5lKX0sX2NsZWFyUGFuZXM6ZnVuY3Rpb24oKXt0aGlzLl9jb250YWluZXIucmVtb3ZlQ2hpbGQodGhpcy5fbWFwUGFuZSl9LF9hZGRMYXllcnM6ZnVuY3Rpb24odCl7dD10P28uVXRpbC5pc0FycmF5KHQpP3Q6W3RdOltdO2Zvcih2YXIgZT0wLGk9dC5sZW5ndGg7aT5lO2UrKyl0aGlzLmFkZExheWVyKHRbZV0pfSxfcmVzZXRWaWV3OmZ1bmN0aW9uKHQsZSxpLG4pe3ZhciBzPXRoaXMuX3pvb20hPT1lO258fCh0aGlzLmZpcmUoIm1vdmVzdGFydCIpLHMmJnRoaXMuZmlyZSgiem9vbXN0YXJ0IikpLHRoaXMuX3pvb209ZSx0aGlzLl9pbml0aWFsQ2VudGVyPXQsdGhpcy5faW5pdGlhbFRvcExlZnRQb2ludD10aGlzLl9nZXROZXdUb3BMZWZ0UG9pbnQodCksaT90aGlzLl9pbml0aWFsVG9wTGVmdFBvaW50Ll9hZGQodGhpcy5fZ2V0TWFwUGFuZVBvcygpKTpvLkRvbVV0aWwuc2V0UG9zaXRpb24odGhpcy5fbWFwUGFuZSxuZXcgby5Qb2ludCgwLDApKSx0aGlzLl90aWxlTGF5ZXJzVG9Mb2FkPXRoaXMuX3RpbGVMYXllcnNOdW07dmFyIGE9IXRoaXMuX2xvYWRlZDt0aGlzLl9sb2FkZWQ9ITAsdGhpcy5maXJlKCJ2aWV3cmVzZXQiLHtoYXJkOiFpfSksYSYmKHRoaXMuZmlyZSgibG9hZCIpLHRoaXMuZWFjaExheWVyKHRoaXMuX2xheWVyQWRkLHRoaXMpKSx0aGlzLmZpcmUoIm1vdmUiKSwoc3x8bikmJnRoaXMuZmlyZSgiem9vbWVuZCIpLHRoaXMuZmlyZSgibW92ZWVuZCIse2hhcmQ6IWl9KX0sX3Jhd1BhbkJ5OmZ1bmN0aW9uKHQpe28uRG9tVXRpbC5zZXRQb3NpdGlvbih0aGlzLl9tYXBQYW5lLHRoaXMuX2dldE1hcFBhbmVQb3MoKS5zdWJ0cmFjdCh0KSl9LF9nZXRab29tU3BhbjpmdW5jdGlvbigpe3JldHVybiB0aGlzLmdldE1heFpvb20oKS10aGlzLmdldE1pblpvb20oKX0sX3VwZGF0ZVpvb21MZXZlbHM6ZnVuY3Rpb24oKXt2YXIgdCxlPTEvMCxuPS0oMS8wKSxvPXRoaXMuX2dldFpvb21TcGFuKCk7Zm9yKHQgaW4gdGhpcy5fem9vbUJvdW5kTGF5ZXJzKXt2YXIgcz10aGlzLl96b29tQm91bmRMYXllcnNbdF07aXNOYU4ocy5vcHRpb25zLm1pblpvb20pfHwoZT1NYXRoLm1pbihlLHMub3B0aW9ucy5taW5ab29tKSksaXNOYU4ocy5vcHRpb25zLm1heFpvb20pfHwobj1NYXRoLm1heChuLHMub3B0aW9ucy5tYXhab29tKSl9dD09PWk/dGhpcy5fbGF5ZXJzTWF4Wm9vbT10aGlzLl9sYXllcnNNaW5ab29tPWk6KHRoaXMuX2xheWVyc01heFpvb209bix0aGlzLl9sYXllcnNNaW5ab29tPWUpLG8hPT10aGlzLl9nZXRab29tU3BhbigpJiZ0aGlzLmZpcmUoInpvb21sZXZlbHNjaGFuZ2UiKX0sX3Bhbkluc2lkZU1heEJvdW5kczpmdW5jdGlvbigpe3RoaXMucGFuSW5zaWRlQm91bmRzKHRoaXMub3B0aW9ucy5tYXhCb3VuZHMpfSxfY2hlY2tJZkxvYWRlZDpmdW5jdGlvbigpe2lmKCF0aGlzLl9sb2FkZWQpdGhyb3cgbmV3IEVycm9yKCJTZXQgbWFwIGNlbnRlciBhbmQgem9vbSBmaXJzdC4iKX0sX2luaXRFdmVudHM6ZnVuY3Rpb24oZSl7aWYoby5Eb21FdmVudCl7ZT1lfHwib24iLG8uRG9tRXZlbnRbZV0odGhpcy5fY29udGFpbmVyLCJjbGljayIsdGhpcy5fb25Nb3VzZUNsaWNrLHRoaXMpO3ZhciBpLG4scz1bImRibGNsaWNrIiwibW91c2Vkb3duIiwibW91c2V1cCIsIm1vdXNlZW50ZXIiLCJtb3VzZWxlYXZlIiwibW91c2Vtb3ZlIiwiY29udGV4dG1lbnUiXTtmb3IoaT0wLG49cy5sZW5ndGg7bj5pO2krKylvLkRvbUV2ZW50W2VdKHRoaXMuX2NvbnRhaW5lcixzW2ldLHRoaXMuX2ZpcmVNb3VzZUV2ZW50LHRoaXMpO3RoaXMub3B0aW9ucy50cmFja1Jlc2l6ZSYmby5Eb21FdmVudFtlXSh0LCJyZXNpemUiLHRoaXMuX29uUmVzaXplLHRoaXMpfX0sX29uUmVzaXplOmZ1bmN0aW9uKCl7by5VdGlsLmNhbmNlbEFuaW1GcmFtZSh0aGlzLl9yZXNpemVSZXF1ZXN0KSx0aGlzLl9yZXNpemVSZXF1ZXN0PW8uVXRpbC5yZXF1ZXN0QW5pbUZyYW1lKGZ1bmN0aW9uKCl7dGhpcy5pbnZhbGlkYXRlU2l6ZSh7ZGVib3VuY2VNb3ZlZW5kOiEwfSl9LHRoaXMsITEsdGhpcy5fY29udGFpbmVyKX0sX29uTW91c2VDbGljazpmdW5jdGlvbih0KXshdGhpcy5fbG9hZGVkfHwhdC5fc2ltdWxhdGVkJiYodGhpcy5kcmFnZ2luZyYmdGhpcy5kcmFnZ2luZy5tb3ZlZCgpfHx0aGlzLmJveFpvb20mJnRoaXMuYm94Wm9vbS5tb3ZlZCgpKXx8by5Eb21FdmVudC5fc2tpcHBlZCh0KXx8KHRoaXMuZmlyZSgicHJlY2xpY2siKSx0aGlzLl9maXJlTW91c2VFdmVudCh0KSl9LF9maXJlTW91c2VFdmVudDpmdW5jdGlvbih0KXtpZih0aGlzLl9sb2FkZWQmJiFvLkRvbUV2ZW50Ll9za2lwcGVkKHQpKXt2YXIgZT10LnR5cGU7aWYoZT0ibW91c2VlbnRlciI9PT1lPyJtb3VzZW92ZXIiOiJtb3VzZWxlYXZlIj09PWU/Im1vdXNlb3V0IjplLHRoaXMuaGFzRXZlbnRMaXN0ZW5lcnMoZSkpeyJjb250ZXh0bWVudSI9PT1lJiZvLkRvbUV2ZW50LnByZXZlbnREZWZhdWx0KHQpO3ZhciBpPXRoaXMubW91c2VFdmVudFRvQ29udGFpbmVyUG9pbnQodCksbj10aGlzLmNvbnRhaW5lclBvaW50VG9MYXllclBvaW50KGkpLHM9dGhpcy5sYXllclBvaW50VG9MYXRMbmcobik7dGhpcy5maXJlKGUse2xhdGxuZzpzLGxheWVyUG9pbnQ6bixjb250YWluZXJQb2ludDppLG9yaWdpbmFsRXZlbnQ6dH0pfX19LF9vblRpbGVMYXllckxvYWQ6ZnVuY3Rpb24oKXt0aGlzLl90aWxlTGF5ZXJzVG9Mb2FkLS0sdGhpcy5fdGlsZUxheWVyc051bSYmIXRoaXMuX3RpbGVMYXllcnNUb0xvYWQmJnRoaXMuZmlyZSgidGlsZWxheWVyc2xvYWQiKX0sX2NsZWFySGFuZGxlcnM6ZnVuY3Rpb24oKXtmb3IodmFyIHQ9MCxlPXRoaXMuX2hhbmRsZXJzLmxlbmd0aDtlPnQ7dCsrKXRoaXMuX2hhbmRsZXJzW3RdLmRpc2FibGUoKX0sd2hlblJlYWR5OmZ1bmN0aW9uKHQsZSl7cmV0dXJuIHRoaXMuX2xvYWRlZD90LmNhbGwoZXx8dGhpcyx0aGlzKTp0aGlzLm9uKCJsb2FkIix0LGUpLHRoaXN9LF9sYXllckFkZDpmdW5jdGlvbih0KXt0Lm9uQWRkKHRoaXMpLHRoaXMuZmlyZSgibGF5ZXJhZGQiLHtsYXllcjp0fSl9LF9nZXRNYXBQYW5lUG9zOmZ1bmN0aW9uKCl7cmV0dXJuIG8uRG9tVXRpbC5nZXRQb3NpdGlvbih0aGlzLl9tYXBQYW5lKX0sX21vdmVkOmZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5fZ2V0TWFwUGFuZVBvcygpO3JldHVybiB0JiYhdC5lcXVhbHMoWzAsMF0pfSxfZ2V0VG9wTGVmdFBvaW50OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZ2V0UGl4ZWxPcmlnaW4oKS5zdWJ0cmFjdCh0aGlzLl9nZXRNYXBQYW5lUG9zKCkpfSxfZ2V0TmV3VG9wTGVmdFBvaW50OmZ1bmN0aW9uKHQsZSl7dmFyIGk9dGhpcy5nZXRTaXplKCkuX2RpdmlkZUJ5KDIpO3JldHVybiB0aGlzLnByb2plY3QodCxlKS5fc3VidHJhY3QoaSkuX3JvdW5kKCl9LF9sYXRMbmdUb05ld0xheWVyUG9pbnQ6ZnVuY3Rpb24odCxlLGkpe3ZhciBuPXRoaXMuX2dldE5ld1RvcExlZnRQb2ludChpLGUpLmFkZCh0aGlzLl9nZXRNYXBQYW5lUG9zKCkpO3JldHVybiB0aGlzLnByb2plY3QodCxlKS5fc3VidHJhY3Qobil9LF9nZXRDZW50ZXJMYXllclBvaW50OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuY29udGFpbmVyUG9pbnRUb0xheWVyUG9pbnQodGhpcy5nZXRTaXplKCkuX2RpdmlkZUJ5KDIpKX0sX2dldENlbnRlck9mZnNldDpmdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5sYXRMbmdUb0xheWVyUG9pbnQodCkuc3VidHJhY3QodGhpcy5fZ2V0Q2VudGVyTGF5ZXJQb2ludCgpKX0sX2xpbWl0Q2VudGVyOmZ1bmN0aW9uKHQsZSxpKXtpZighaSlyZXR1cm4gdDt2YXIgbj10aGlzLnByb2plY3QodCxlKSxzPXRoaXMuZ2V0U2l6ZSgpLmRpdmlkZUJ5KDIpLGE9bmV3IG8uQm91bmRzKG4uc3VidHJhY3Qocyksbi5hZGQocykpLHI9dGhpcy5fZ2V0Qm91bmRzT2Zmc2V0KGEsaSxlKTtyZXR1cm4gdGhpcy51bnByb2plY3Qobi5hZGQociksZSl9LF9saW1pdE9mZnNldDpmdW5jdGlvbih0LGUpe2lmKCFlKXJldHVybiB0O3ZhciBpPXRoaXMuZ2V0UGl4ZWxCb3VuZHMoKSxuPW5ldyBvLkJvdW5kcyhpLm1pbi5hZGQodCksaS5tYXguYWRkKHQpKTtyZXR1cm4gdC5hZGQodGhpcy5fZ2V0Qm91bmRzT2Zmc2V0KG4sZSkpfSxfZ2V0Qm91bmRzT2Zmc2V0OmZ1bmN0aW9uKHQsZSxpKXt2YXIgbj10aGlzLnByb2plY3QoZS5nZXROb3J0aFdlc3QoKSxpKS5zdWJ0cmFjdCh0Lm1pbikscz10aGlzLnByb2plY3QoZS5nZXRTb3V0aEVhc3QoKSxpKS5zdWJ0cmFjdCh0Lm1heCksYT10aGlzLl9yZWJvdW5kKG4ueCwtcy54KSxyPXRoaXMuX3JlYm91bmQobi55LC1zLnkpO3JldHVybiBuZXcgby5Qb2ludChhLHIpfSxfcmVib3VuZDpmdW5jdGlvbih0LGUpe3JldHVybiB0K2U+MD9NYXRoLnJvdW5kKHQtZSkvMjpNYXRoLm1heCgwLE1hdGguY2VpbCh0KSktTWF0aC5tYXgoMCxNYXRoLmZsb29yKGUpKX0sX2xpbWl0Wm9vbTpmdW5jdGlvbih0KXt2YXIgZT10aGlzLmdldE1pblpvb20oKSxpPXRoaXMuZ2V0TWF4Wm9vbSgpO3JldHVybiBNYXRoLm1heChlLE1hdGgubWluKGksdCkpfX0pLG8ubWFwPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIG5ldyBvLk1hcCh0LGUpfSxvLlByb2plY3Rpb24uTWVyY2F0b3I9e01BWF9MQVRJVFVERTo4NS4wODQwNTkxNTU2LFJfTUlOT1I6NjM1Njc1Mi4zMTQyNDUxNzksUl9NQUpPUjo2Mzc4MTM3LHByb2plY3Q6ZnVuY3Rpb24odCl7dmFyIGU9by5MYXRMbmcuREVHX1RPX1JBRCxpPXRoaXMuTUFYX0xBVElUVURFLG49TWF0aC5tYXgoTWF0aC5taW4oaSx0LmxhdCksLWkpLHM9dGhpcy5SX01BSk9SLGE9dGhpcy5SX01JTk9SLHI9dC5sbmcqZSpzLGg9biplLGw9YS9zLHU9TWF0aC5zcXJ0KDEtbCpsKSxjPXUqTWF0aC5zaW4oaCk7Yz1NYXRoLnBvdygoMS1jKS8oMStjKSwuNSp1KTt2YXIgZD1NYXRoLnRhbiguNSooLjUqTWF0aC5QSS1oKSkvYztyZXR1cm4gaD0tcypNYXRoLmxvZyhkKSxuZXcgby5Qb2ludChyLGgpfSx1bnByb2plY3Q6ZnVuY3Rpb24odCl7Zm9yKHZhciBlLGk9by5MYXRMbmcuUkFEX1RPX0RFRyxuPXRoaXMuUl9NQUpPUixzPXRoaXMuUl9NSU5PUixhPXQueCppL24scj1zL24saD1NYXRoLnNxcnQoMS1yKnIpLGw9TWF0aC5leHAoLXQueS9uKSx1PU1hdGguUEkvMi0yKk1hdGguYXRhbihsKSxjPTE1LGQ9MWUtNyxwPWMsXz0uMTtNYXRoLmFicyhfKT5kJiYtLXA+MDspZT1oKk1hdGguc2luKHUpLF89TWF0aC5QSS8yLTIqTWF0aC5hdGFuKGwqTWF0aC5wb3coKDEtZSkvKDErZSksLjUqaCkpLXUsdSs9XztyZXR1cm4gbmV3IG8uTGF0TG5nKHUqaSxhKX19LG8uQ1JTLkVQU0czMzk1PW8uZXh0ZW5kKHt9LG8uQ1JTLHsKY29kZToiRVBTRzozMzk1Iixwcm9qZWN0aW9uOm8uUHJvamVjdGlvbi5NZXJjYXRvcix0cmFuc2Zvcm1hdGlvbjpmdW5jdGlvbigpe3ZhciB0PW8uUHJvamVjdGlvbi5NZXJjYXRvcixlPXQuUl9NQUpPUixpPS41LyhNYXRoLlBJKmUpO3JldHVybiBuZXcgby5UcmFuc2Zvcm1hdGlvbihpLC41LC1pLC41KX0oKX0pLG8uVGlsZUxheWVyPW8uQ2xhc3MuZXh0ZW5kKHtpbmNsdWRlczpvLk1peGluLkV2ZW50cyxvcHRpb25zOnttaW5ab29tOjAsbWF4Wm9vbToxOCx0aWxlU2l6ZToyNTYsc3ViZG9tYWluczoiYWJjIixlcnJvclRpbGVVcmw6IiIsYXR0cmlidXRpb246IiIsem9vbU9mZnNldDowLG9wYWNpdHk6MSx1bmxvYWRJbnZpc2libGVUaWxlczpvLkJyb3dzZXIubW9iaWxlLHVwZGF0ZVdoZW5JZGxlOm8uQnJvd3Nlci5tb2JpbGV9LGluaXRpYWxpemU6ZnVuY3Rpb24odCxlKXtlPW8uc2V0T3B0aW9ucyh0aGlzLGUpLGUuZGV0ZWN0UmV0aW5hJiZvLkJyb3dzZXIucmV0aW5hJiZlLm1heFpvb20+MCYmKGUudGlsZVNpemU9TWF0aC5mbG9vcihlLnRpbGVTaXplLzIpLGUuem9vbU9mZnNldCsrLGUubWluWm9vbT4wJiZlLm1pblpvb20tLSx0aGlzLm9wdGlvbnMubWF4Wm9vbS0tKSxlLmJvdW5kcyYmKGUuYm91bmRzPW8ubGF0TG5nQm91bmRzKGUuYm91bmRzKSksdGhpcy5fdXJsPXQ7dmFyIGk9dGhpcy5vcHRpb25zLnN1YmRvbWFpbnM7InN0cmluZyI9PXR5cGVvZiBpJiYodGhpcy5vcHRpb25zLnN1YmRvbWFpbnM9aS5zcGxpdCgiIikpfSxvbkFkZDpmdW5jdGlvbih0KXt0aGlzLl9tYXA9dCx0aGlzLl9hbmltYXRlZD10Ll96b29tQW5pbWF0ZWQsdGhpcy5faW5pdENvbnRhaW5lcigpLHQub24oe3ZpZXdyZXNldDp0aGlzLl9yZXNldCxtb3ZlZW5kOnRoaXMuX3VwZGF0ZX0sdGhpcyksdGhpcy5fYW5pbWF0ZWQmJnQub24oe3pvb21hbmltOnRoaXMuX2FuaW1hdGVab29tLHpvb21lbmQ6dGhpcy5fZW5kWm9vbUFuaW19LHRoaXMpLHRoaXMub3B0aW9ucy51cGRhdGVXaGVuSWRsZXx8KHRoaXMuX2xpbWl0ZWRVcGRhdGU9by5VdGlsLmxpbWl0RXhlY0J5SW50ZXJ2YWwodGhpcy5fdXBkYXRlLDE1MCx0aGlzKSx0Lm9uKCJtb3ZlIix0aGlzLl9saW1pdGVkVXBkYXRlLHRoaXMpKSx0aGlzLl9yZXNldCgpLHRoaXMuX3VwZGF0ZSgpfSxhZGRUbzpmdW5jdGlvbih0KXtyZXR1cm4gdC5hZGRMYXllcih0aGlzKSx0aGlzfSxvblJlbW92ZTpmdW5jdGlvbih0KXt0aGlzLl9jb250YWluZXIucGFyZW50Tm9kZS5yZW1vdmVDaGlsZCh0aGlzLl9jb250YWluZXIpLHQub2ZmKHt2aWV3cmVzZXQ6dGhpcy5fcmVzZXQsbW92ZWVuZDp0aGlzLl91cGRhdGV9LHRoaXMpLHRoaXMuX2FuaW1hdGVkJiZ0Lm9mZih7em9vbWFuaW06dGhpcy5fYW5pbWF0ZVpvb20sem9vbWVuZDp0aGlzLl9lbmRab29tQW5pbX0sdGhpcyksdGhpcy5vcHRpb25zLnVwZGF0ZVdoZW5JZGxlfHx0Lm9mZigibW92ZSIsdGhpcy5fbGltaXRlZFVwZGF0ZSx0aGlzKSx0aGlzLl9jb250YWluZXI9bnVsbCx0aGlzLl9tYXA9bnVsbH0sYnJpbmdUb0Zyb250OmZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5fbWFwLl9wYW5lcy50aWxlUGFuZTtyZXR1cm4gdGhpcy5fY29udGFpbmVyJiYodC5hcHBlbmRDaGlsZCh0aGlzLl9jb250YWluZXIpLHRoaXMuX3NldEF1dG9aSW5kZXgodCxNYXRoLm1heCkpLHRoaXN9LGJyaW5nVG9CYWNrOmZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5fbWFwLl9wYW5lcy50aWxlUGFuZTtyZXR1cm4gdGhpcy5fY29udGFpbmVyJiYodC5pbnNlcnRCZWZvcmUodGhpcy5fY29udGFpbmVyLHQuZmlyc3RDaGlsZCksdGhpcy5fc2V0QXV0b1pJbmRleCh0LE1hdGgubWluKSksdGhpc30sZ2V0QXR0cmlidXRpb246ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5vcHRpb25zLmF0dHJpYnV0aW9ufSxnZXRDb250YWluZXI6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fY29udGFpbmVyfSxzZXRPcGFjaXR5OmZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLm9wdGlvbnMub3BhY2l0eT10LHRoaXMuX21hcCYmdGhpcy5fdXBkYXRlT3BhY2l0eSgpLHRoaXN9LHNldFpJbmRleDpmdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5vcHRpb25zLnpJbmRleD10LHRoaXMuX3VwZGF0ZVpJbmRleCgpLHRoaXN9LHNldFVybDpmdW5jdGlvbih0LGUpe3JldHVybiB0aGlzLl91cmw9dCxlfHx0aGlzLnJlZHJhdygpLHRoaXN9LHJlZHJhdzpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9tYXAmJih0aGlzLl9yZXNldCh7aGFyZDohMH0pLHRoaXMuX3VwZGF0ZSgpKSx0aGlzfSxfdXBkYXRlWkluZGV4OmZ1bmN0aW9uKCl7dGhpcy5fY29udGFpbmVyJiZ0aGlzLm9wdGlvbnMuekluZGV4IT09aSYmKHRoaXMuX2NvbnRhaW5lci5zdHlsZS56SW5kZXg9dGhpcy5vcHRpb25zLnpJbmRleCl9LF9zZXRBdXRvWkluZGV4OmZ1bmN0aW9uKHQsZSl7dmFyIGksbixvLHM9dC5jaGlsZHJlbixhPS1lKDEvMCwtKDEvMCkpO2ZvcihuPTAsbz1zLmxlbmd0aDtvPm47bisrKXNbbl0hPT10aGlzLl9jb250YWluZXImJihpPXBhcnNlSW50KHNbbl0uc3R5bGUuekluZGV4LDEwKSxpc05hTihpKXx8KGE9ZShhLGkpKSk7dGhpcy5vcHRpb25zLnpJbmRleD10aGlzLl9jb250YWluZXIuc3R5bGUuekluZGV4PShpc0Zpbml0ZShhKT9hOjApK2UoMSwtMSl9LF91cGRhdGVPcGFjaXR5OmZ1bmN0aW9uKCl7dmFyIHQsZT10aGlzLl90aWxlcztpZihvLkJyb3dzZXIuaWVsdDkpZm9yKHQgaW4gZSlvLkRvbVV0aWwuc2V0T3BhY2l0eShlW3RdLHRoaXMub3B0aW9ucy5vcGFjaXR5KTtlbHNlIG8uRG9tVXRpbC5zZXRPcGFjaXR5KHRoaXMuX2NvbnRhaW5lcix0aGlzLm9wdGlvbnMub3BhY2l0eSl9LF9pbml0Q29udGFpbmVyOmZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5fbWFwLl9wYW5lcy50aWxlUGFuZTtpZighdGhpcy5fY29udGFpbmVyKXtpZih0aGlzLl9jb250YWluZXI9by5Eb21VdGlsLmNyZWF0ZSgiZGl2IiwibGVhZmxldC1sYXllciIpLHRoaXMuX3VwZGF0ZVpJbmRleCgpLHRoaXMuX2FuaW1hdGVkKXt2YXIgZT0ibGVhZmxldC10aWxlLWNvbnRhaW5lciI7dGhpcy5fYmdCdWZmZXI9by5Eb21VdGlsLmNyZWF0ZSgiZGl2IixlLHRoaXMuX2NvbnRhaW5lciksdGhpcy5fdGlsZUNvbnRhaW5lcj1vLkRvbVV0aWwuY3JlYXRlKCJkaXYiLGUsdGhpcy5fY29udGFpbmVyKX1lbHNlIHRoaXMuX3RpbGVDb250YWluZXI9dGhpcy5fY29udGFpbmVyO3QuYXBwZW5kQ2hpbGQodGhpcy5fY29udGFpbmVyKSx0aGlzLm9wdGlvbnMub3BhY2l0eTwxJiZ0aGlzLl91cGRhdGVPcGFjaXR5KCl9fSxfcmVzZXQ6ZnVuY3Rpb24odCl7Zm9yKHZhciBlIGluIHRoaXMuX3RpbGVzKXRoaXMuZmlyZSgidGlsZXVubG9hZCIse3RpbGU6dGhpcy5fdGlsZXNbZV19KTt0aGlzLl90aWxlcz17fSx0aGlzLl90aWxlc1RvTG9hZD0wLHRoaXMub3B0aW9ucy5yZXVzZVRpbGVzJiYodGhpcy5fdW51c2VkVGlsZXM9W10pLHRoaXMuX3RpbGVDb250YWluZXIuaW5uZXJIVE1MPSIiLHRoaXMuX2FuaW1hdGVkJiZ0JiZ0LmhhcmQmJnRoaXMuX2NsZWFyQmdCdWZmZXIoKSx0aGlzLl9pbml0Q29udGFpbmVyKCl9LF9nZXRUaWxlU2l6ZTpmdW5jdGlvbigpe3ZhciB0PXRoaXMuX21hcCxlPXQuZ2V0Wm9vbSgpK3RoaXMub3B0aW9ucy56b29tT2Zmc2V0LGk9dGhpcy5vcHRpb25zLm1heE5hdGl2ZVpvb20sbj10aGlzLm9wdGlvbnMudGlsZVNpemU7cmV0dXJuIGkmJmU+aSYmKG49TWF0aC5yb3VuZCh0LmdldFpvb21TY2FsZShlKS90LmdldFpvb21TY2FsZShpKSpuKSksbn0sX3VwZGF0ZTpmdW5jdGlvbigpe2lmKHRoaXMuX21hcCl7dmFyIHQ9dGhpcy5fbWFwLGU9dC5nZXRQaXhlbEJvdW5kcygpLGk9dC5nZXRab29tKCksbj10aGlzLl9nZXRUaWxlU2l6ZSgpO2lmKCEoaT50aGlzLm9wdGlvbnMubWF4Wm9vbXx8aTx0aGlzLm9wdGlvbnMubWluWm9vbSkpe3ZhciBzPW8uYm91bmRzKGUubWluLmRpdmlkZUJ5KG4pLl9mbG9vcigpLGUubWF4LmRpdmlkZUJ5KG4pLl9mbG9vcigpKTt0aGlzLl9hZGRUaWxlc0Zyb21DZW50ZXJPdXQocyksKHRoaXMub3B0aW9ucy51bmxvYWRJbnZpc2libGVUaWxlc3x8dGhpcy5vcHRpb25zLnJldXNlVGlsZXMpJiZ0aGlzLl9yZW1vdmVPdGhlclRpbGVzKHMpfX19LF9hZGRUaWxlc0Zyb21DZW50ZXJPdXQ6ZnVuY3Rpb24odCl7dmFyIGksbixzLGE9W10scj10LmdldENlbnRlcigpO2ZvcihpPXQubWluLnk7aTw9dC5tYXgueTtpKyspZm9yKG49dC5taW4ueDtuPD10Lm1heC54O24rKylzPW5ldyBvLlBvaW50KG4saSksdGhpcy5fdGlsZVNob3VsZEJlTG9hZGVkKHMpJiZhLnB1c2gocyk7dmFyIGg9YS5sZW5ndGg7aWYoMCE9PWgpe2Euc29ydChmdW5jdGlvbih0LGUpe3JldHVybiB0LmRpc3RhbmNlVG8ociktZS5kaXN0YW5jZVRvKHIpfSk7dmFyIGw9ZS5jcmVhdGVEb2N1bWVudEZyYWdtZW50KCk7Zm9yKHRoaXMuX3RpbGVzVG9Mb2FkfHx0aGlzLmZpcmUoImxvYWRpbmciKSx0aGlzLl90aWxlc1RvTG9hZCs9aCxuPTA7aD5uO24rKyl0aGlzLl9hZGRUaWxlKGFbbl0sbCk7dGhpcy5fdGlsZUNvbnRhaW5lci5hcHBlbmRDaGlsZChsKX19LF90aWxlU2hvdWxkQmVMb2FkZWQ6ZnVuY3Rpb24odCl7aWYodC54KyI6Iit0LnkgaW4gdGhpcy5fdGlsZXMpcmV0dXJuITE7dmFyIGU9dGhpcy5vcHRpb25zO2lmKCFlLmNvbnRpbnVvdXNXb3JsZCl7dmFyIGk9dGhpcy5fZ2V0V3JhcFRpbGVOdW0oKTtpZihlLm5vV3JhcCYmKHQueDwwfHx0Lng+PWkueCl8fHQueTwwfHx0Lnk+PWkueSlyZXR1cm4hMX1pZihlLmJvdW5kcyl7dmFyIG49dGhpcy5fZ2V0VGlsZVNpemUoKSxvPXQubXVsdGlwbHlCeShuKSxzPW8uYWRkKFtuLG5dKSxhPXRoaXMuX21hcC51bnByb2plY3Qobykscj10aGlzLl9tYXAudW5wcm9qZWN0KHMpO2lmKGUuY29udGludW91c1dvcmxkfHxlLm5vV3JhcHx8KGE9YS53cmFwKCkscj1yLndyYXAoKSksIWUuYm91bmRzLmludGVyc2VjdHMoW2Escl0pKXJldHVybiExfXJldHVybiEwfSxfcmVtb3ZlT3RoZXJUaWxlczpmdW5jdGlvbih0KXt2YXIgZSxpLG4sbztmb3IobyBpbiB0aGlzLl90aWxlcyllPW8uc3BsaXQoIjoiKSxpPXBhcnNlSW50KGVbMF0sMTApLG49cGFyc2VJbnQoZVsxXSwxMCksKGk8dC5taW4ueHx8aT50Lm1heC54fHxuPHQubWluLnl8fG4+dC5tYXgueSkmJnRoaXMuX3JlbW92ZVRpbGUobyl9LF9yZW1vdmVUaWxlOmZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMuX3RpbGVzW3RdO3RoaXMuZmlyZSgidGlsZXVubG9hZCIse3RpbGU6ZSx1cmw6ZS5zcmN9KSx0aGlzLm9wdGlvbnMucmV1c2VUaWxlcz8oby5Eb21VdGlsLnJlbW92ZUNsYXNzKGUsImxlYWZsZXQtdGlsZS1sb2FkZWQiKSx0aGlzLl91bnVzZWRUaWxlcy5wdXNoKGUpKTplLnBhcmVudE5vZGU9PT10aGlzLl90aWxlQ29udGFpbmVyJiZ0aGlzLl90aWxlQ29udGFpbmVyLnJlbW92ZUNoaWxkKGUpLG8uQnJvd3Nlci5hbmRyb2lkfHwoZS5vbmxvYWQ9bnVsbCxlLnNyYz1vLlV0aWwuZW1wdHlJbWFnZVVybCksZGVsZXRlIHRoaXMuX3RpbGVzW3RdfSxfYWRkVGlsZTpmdW5jdGlvbih0LGUpe3ZhciBpPXRoaXMuX2dldFRpbGVQb3ModCksbj10aGlzLl9nZXRUaWxlKCk7by5Eb21VdGlsLnNldFBvc2l0aW9uKG4saSxvLkJyb3dzZXIuY2hyb21lKSx0aGlzLl90aWxlc1t0LngrIjoiK3QueV09bix0aGlzLl9sb2FkVGlsZShuLHQpLG4ucGFyZW50Tm9kZSE9PXRoaXMuX3RpbGVDb250YWluZXImJmUuYXBwZW5kQ2hpbGQobil9LF9nZXRab29tRm9yVXJsOmZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5vcHRpb25zLGU9dGhpcy5fbWFwLmdldFpvb20oKTtyZXR1cm4gdC56b29tUmV2ZXJzZSYmKGU9dC5tYXhab29tLWUpLGUrPXQuem9vbU9mZnNldCx0Lm1heE5hdGl2ZVpvb20/TWF0aC5taW4oZSx0Lm1heE5hdGl2ZVpvb20pOmV9LF9nZXRUaWxlUG9zOmZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMuX21hcC5nZXRQaXhlbE9yaWdpbigpLGk9dGhpcy5fZ2V0VGlsZVNpemUoKTtyZXR1cm4gdC5tdWx0aXBseUJ5KGkpLnN1YnRyYWN0KGUpfSxnZXRUaWxlVXJsOmZ1bmN0aW9uKHQpe3JldHVybiBvLlV0aWwudGVtcGxhdGUodGhpcy5fdXJsLG8uZXh0ZW5kKHtzOnRoaXMuX2dldFN1YmRvbWFpbih0KSx6OnQueix4OnQueCx5OnQueX0sdGhpcy5vcHRpb25zKSl9LF9nZXRXcmFwVGlsZU51bTpmdW5jdGlvbigpe3ZhciB0PXRoaXMuX21hcC5vcHRpb25zLmNycyxlPXQuZ2V0U2l6ZSh0aGlzLl9tYXAuZ2V0Wm9vbSgpKTtyZXR1cm4gZS5kaXZpZGVCeSh0aGlzLl9nZXRUaWxlU2l6ZSgpKS5fZmxvb3IoKX0sX2FkanVzdFRpbGVQb2ludDpmdW5jdGlvbih0KXt2YXIgZT10aGlzLl9nZXRXcmFwVGlsZU51bSgpO3RoaXMub3B0aW9ucy5jb250aW51b3VzV29ybGR8fHRoaXMub3B0aW9ucy5ub1dyYXB8fCh0Lng9KHQueCVlLngrZS54KSVlLngpLHRoaXMub3B0aW9ucy50bXMmJih0Lnk9ZS55LXQueS0xKSx0Lno9dGhpcy5fZ2V0Wm9vbUZvclVybCgpfSxfZ2V0U3ViZG9tYWluOmZ1bmN0aW9uKHQpe3ZhciBlPU1hdGguYWJzKHQueCt0LnkpJXRoaXMub3B0aW9ucy5zdWJkb21haW5zLmxlbmd0aDtyZXR1cm4gdGhpcy5vcHRpb25zLnN1YmRvbWFpbnNbZV19LF9nZXRUaWxlOmZ1bmN0aW9uKCl7aWYodGhpcy5vcHRpb25zLnJldXNlVGlsZXMmJnRoaXMuX3VudXNlZFRpbGVzLmxlbmd0aD4wKXt2YXIgdD10aGlzLl91bnVzZWRUaWxlcy5wb3AoKTtyZXR1cm4gdGhpcy5fcmVzZXRUaWxlKHQpLHR9cmV0dXJuIHRoaXMuX2NyZWF0ZVRpbGUoKX0sX3Jlc2V0VGlsZTpmdW5jdGlvbigpe30sX2NyZWF0ZVRpbGU6ZnVuY3Rpb24oKXt2YXIgdD1vLkRvbVV0aWwuY3JlYXRlKCJpbWciLCJsZWFmbGV0LXRpbGUiKTtyZXR1cm4gdC5zdHlsZS53aWR0aD10LnN0eWxlLmhlaWdodD10aGlzLl9nZXRUaWxlU2l6ZSgpKyJweCIsdC5nYWxsZXJ5aW1nPSJubyIsdC5vbnNlbGVjdHN0YXJ0PXQub25tb3VzZW1vdmU9by5VdGlsLmZhbHNlRm4sby5Ccm93c2VyLmllbHQ5JiZ0aGlzLm9wdGlvbnMub3BhY2l0eSE9PWkmJm8uRG9tVXRpbC5zZXRPcGFjaXR5KHQsdGhpcy5vcHRpb25zLm9wYWNpdHkpLG8uQnJvd3Nlci5tb2JpbGVXZWJraXQzZCYmKHQuc3R5bGUuV2Via2l0QmFja2ZhY2VWaXNpYmlsaXR5PSJoaWRkZW4iKSx0fSxfbG9hZFRpbGU6ZnVuY3Rpb24odCxlKXt0Ll9sYXllcj10aGlzLHQub25sb2FkPXRoaXMuX3RpbGVPbkxvYWQsdC5vbmVycm9yPXRoaXMuX3RpbGVPbkVycm9yLHRoaXMuX2FkanVzdFRpbGVQb2ludChlKSx0LnNyYz10aGlzLmdldFRpbGVVcmwoZSksdGhpcy5maXJlKCJ0aWxlbG9hZHN0YXJ0Iix7dGlsZTp0LHVybDp0LnNyY30pfSxfdGlsZUxvYWRlZDpmdW5jdGlvbigpe3RoaXMuX3RpbGVzVG9Mb2FkLS0sdGhpcy5fYW5pbWF0ZWQmJm8uRG9tVXRpbC5hZGRDbGFzcyh0aGlzLl90aWxlQ29udGFpbmVyLCJsZWFmbGV0LXpvb20tYW5pbWF0ZWQiKSx0aGlzLl90aWxlc1RvTG9hZHx8KHRoaXMuZmlyZSgibG9hZCIpLHRoaXMuX2FuaW1hdGVkJiYoY2xlYXJUaW1lb3V0KHRoaXMuX2NsZWFyQmdCdWZmZXJUaW1lciksdGhpcy5fY2xlYXJCZ0J1ZmZlclRpbWVyPXNldFRpbWVvdXQoby5iaW5kKHRoaXMuX2NsZWFyQmdCdWZmZXIsdGhpcyksNTAwKSkpfSxfdGlsZU9uTG9hZDpmdW5jdGlvbigpe3ZhciB0PXRoaXMuX2xheWVyO3RoaXMuc3JjIT09by5VdGlsLmVtcHR5SW1hZ2VVcmwmJihvLkRvbVV0aWwuYWRkQ2xhc3ModGhpcywibGVhZmxldC10aWxlLWxvYWRlZCIpLHQuZmlyZSgidGlsZWxvYWQiLHt0aWxlOnRoaXMsdXJsOnRoaXMuc3JjfSkpLHQuX3RpbGVMb2FkZWQoKX0sX3RpbGVPbkVycm9yOmZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5fbGF5ZXI7dC5maXJlKCJ0aWxlZXJyb3IiLHt0aWxlOnRoaXMsdXJsOnRoaXMuc3JjfSk7dmFyIGU9dC5vcHRpb25zLmVycm9yVGlsZVVybDtlJiYodGhpcy5zcmM9ZSksdC5fdGlsZUxvYWRlZCgpfX0pLG8udGlsZUxheWVyPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIG5ldyBvLlRpbGVMYXllcih0LGUpfSxvLlRpbGVMYXllci5XTVM9by5UaWxlTGF5ZXIuZXh0ZW5kKHtkZWZhdWx0V21zUGFyYW1zOntzZXJ2aWNlOiJXTVMiLHJlcXVlc3Q6IkdldE1hcCIsdmVyc2lvbjoiMS4xLjEiLGxheWVyczoiIixzdHlsZXM6IiIsZm9ybWF0OiJpbWFnZS9qcGVnIix0cmFuc3BhcmVudDohMX0saW5pdGlhbGl6ZTpmdW5jdGlvbih0LGUpe3RoaXMuX3VybD10O3ZhciBpPW8uZXh0ZW5kKHt9LHRoaXMuZGVmYXVsdFdtc1BhcmFtcyksbj1lLnRpbGVTaXplfHx0aGlzLm9wdGlvbnMudGlsZVNpemU7ZS5kZXRlY3RSZXRpbmEmJm8uQnJvd3Nlci5yZXRpbmE/aS53aWR0aD1pLmhlaWdodD0yKm46aS53aWR0aD1pLmhlaWdodD1uO2Zvcih2YXIgcyBpbiBlKXRoaXMub3B0aW9ucy5oYXNPd25Qcm9wZXJ0eShzKXx8ImNycyI9PT1zfHwoaVtzXT1lW3NdKTt0aGlzLndtc1BhcmFtcz1pLG8uc2V0T3B0aW9ucyh0aGlzLGUpfSxvbkFkZDpmdW5jdGlvbih0KXt0aGlzLl9jcnM9dGhpcy5vcHRpb25zLmNyc3x8dC5vcHRpb25zLmNycyx0aGlzLl93bXNWZXJzaW9uPXBhcnNlRmxvYXQodGhpcy53bXNQYXJhbXMudmVyc2lvbik7dmFyIGU9dGhpcy5fd21zVmVyc2lvbj49MS4zPyJjcnMiOiJzcnMiO3RoaXMud21zUGFyYW1zW2VdPXRoaXMuX2Nycy5jb2RlLG8uVGlsZUxheWVyLnByb3RvdHlwZS5vbkFkZC5jYWxsKHRoaXMsdCl9LGdldFRpbGVVcmw6ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5fbWFwLGk9dGhpcy5vcHRpb25zLnRpbGVTaXplLG49dC5tdWx0aXBseUJ5KGkpLHM9bi5hZGQoW2ksaV0pLGE9dGhpcy5fY3JzLnByb2plY3QoZS51bnByb2plY3Qobix0LnopKSxyPXRoaXMuX2Nycy5wcm9qZWN0KGUudW5wcm9qZWN0KHMsdC56KSksaD10aGlzLl93bXNWZXJzaW9uPj0xLjMmJnRoaXMuX2Nycz09PW8uQ1JTLkVQU0c0MzI2P1tyLnksYS54LGEueSxyLnhdLmpvaW4oIiwiKTpbYS54LHIueSxyLngsYS55XS5qb2luKCIsIiksbD1vLlV0aWwudGVtcGxhdGUodGhpcy5fdXJsLHtzOnRoaXMuX2dldFN1YmRvbWFpbih0KX0pO3JldHVybiBsK28uVXRpbC5nZXRQYXJhbVN0cmluZyh0aGlzLndtc1BhcmFtcyxsLCEwKSsiJkJCT1g9IitofSxzZXRQYXJhbXM6ZnVuY3Rpb24odCxlKXtyZXR1cm4gby5leHRlbmQodGhpcy53bXNQYXJhbXMsdCksZXx8dGhpcy5yZWRyYXcoKSx0aGlzfX0pLG8udGlsZUxheWVyLndtcz1mdW5jdGlvbih0LGUpe3JldHVybiBuZXcgby5UaWxlTGF5ZXIuV01TKHQsZSl9LG8uVGlsZUxheWVyLkNhbnZhcz1vLlRpbGVMYXllci5leHRlbmQoe29wdGlvbnM6e2FzeW5jOiExfSxpbml0aWFsaXplOmZ1bmN0aW9uKHQpe28uc2V0T3B0aW9ucyh0aGlzLHQpfSxyZWRyYXc6ZnVuY3Rpb24oKXt0aGlzLl9tYXAmJih0aGlzLl9yZXNldCh7aGFyZDohMH0pLHRoaXMuX3VwZGF0ZSgpKTtmb3IodmFyIHQgaW4gdGhpcy5fdGlsZXMpdGhpcy5fcmVkcmF3VGlsZSh0aGlzLl90aWxlc1t0XSk7cmV0dXJuIHRoaXN9LF9yZWRyYXdUaWxlOmZ1bmN0aW9uKHQpe3RoaXMuZHJhd1RpbGUodCx0Ll90aWxlUG9pbnQsdGhpcy5fbWFwLl96b29tKX0sX2NyZWF0ZVRpbGU6ZnVuY3Rpb24oKXt2YXIgdD1vLkRvbVV0aWwuY3JlYXRlKCJjYW52YXMiLCJsZWFmbGV0LXRpbGUiKTtyZXR1cm4gdC53aWR0aD10LmhlaWdodD10aGlzLm9wdGlvbnMudGlsZVNpemUsdC5vbnNlbGVjdHN0YXJ0PXQub25tb3VzZW1vdmU9by5VdGlsLmZhbHNlRm4sdH0sX2xvYWRUaWxlOmZ1bmN0aW9uKHQsZSl7dC5fbGF5ZXI9dGhpcyx0Ll90aWxlUG9pbnQ9ZSx0aGlzLl9yZWRyYXdUaWxlKHQpLHRoaXMub3B0aW9ucy5hc3luY3x8dGhpcy50aWxlRHJhd24odCl9LGRyYXdUaWxlOmZ1bmN0aW9uKCl7fSx0aWxlRHJhd246ZnVuY3Rpb24odCl7dGhpcy5fdGlsZU9uTG9hZC5jYWxsKHQpfX0pLG8udGlsZUxheWVyLmNhbnZhcz1mdW5jdGlvbih0KXtyZXR1cm4gbmV3IG8uVGlsZUxheWVyLkNhbnZhcyh0KX0sby5JbWFnZU92ZXJsYXk9by5DbGFzcy5leHRlbmQoe2luY2x1ZGVzOm8uTWl4aW4uRXZlbnRzLG9wdGlvbnM6e29wYWNpdHk6MX0saW5pdGlhbGl6ZTpmdW5jdGlvbih0LGUsaSl7dGhpcy5fdXJsPXQsdGhpcy5fYm91bmRzPW8ubGF0TG5nQm91bmRzKGUpLG8uc2V0T3B0aW9ucyh0aGlzLGkpfSxvbkFkZDpmdW5jdGlvbih0KXt0aGlzLl9tYXA9dCx0aGlzLl9pbWFnZXx8dGhpcy5faW5pdEltYWdlKCksdC5fcGFuZXMub3ZlcmxheVBhbmUuYXBwZW5kQ2hpbGQodGhpcy5faW1hZ2UpLHQub24oInZpZXdyZXNldCIsdGhpcy5fcmVzZXQsdGhpcyksdC5vcHRpb25zLnpvb21BbmltYXRpb24mJm8uQnJvd3Nlci5hbnkzZCYmdC5vbigiem9vbWFuaW0iLHRoaXMuX2FuaW1hdGVab29tLHRoaXMpLHRoaXMuX3Jlc2V0KCl9LG9uUmVtb3ZlOmZ1bmN0aW9uKHQpe3QuZ2V0UGFuZXMoKS5vdmVybGF5UGFuZS5yZW1vdmVDaGlsZCh0aGlzLl9pbWFnZSksdC5vZmYoInZpZXdyZXNldCIsdGhpcy5fcmVzZXQsdGhpcyksdC5vcHRpb25zLnpvb21BbmltYXRpb24mJnQub2ZmKCJ6b29tYW5pbSIsdGhpcy5fYW5pbWF0ZVpvb20sdGhpcyl9LGFkZFRvOmZ1bmN0aW9uKHQpe3JldHVybiB0LmFkZExheWVyKHRoaXMpLHRoaXN9LHNldE9wYWNpdHk6ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMub3B0aW9ucy5vcGFjaXR5PXQsdGhpcy5fdXBkYXRlT3BhY2l0eSgpLHRoaXN9LGJyaW5nVG9Gcm9udDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9pbWFnZSYmdGhpcy5fbWFwLl9wYW5lcy5vdmVybGF5UGFuZS5hcHBlbmRDaGlsZCh0aGlzLl9pbWFnZSksdGhpc30sYnJpbmdUb0JhY2s6ZnVuY3Rpb24oKXt2YXIgdD10aGlzLl9tYXAuX3BhbmVzLm92ZXJsYXlQYW5lO3JldHVybiB0aGlzLl9pbWFnZSYmdC5pbnNlcnRCZWZvcmUodGhpcy5faW1hZ2UsdC5maXJzdENoaWxkKSx0aGlzfSxzZXRVcmw6ZnVuY3Rpb24odCl7dGhpcy5fdXJsPXQsdGhpcy5faW1hZ2Uuc3JjPXRoaXMuX3VybH0sZ2V0QXR0cmlidXRpb246ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5vcHRpb25zLmF0dHJpYnV0aW9ufSxfaW5pdEltYWdlOmZ1bmN0aW9uKCl7dGhpcy5faW1hZ2U9by5Eb21VdGlsLmNyZWF0ZSgiaW1nIiwibGVhZmxldC1pbWFnZS1sYXllciIpLHRoaXMuX21hcC5vcHRpb25zLnpvb21BbmltYXRpb24mJm8uQnJvd3Nlci5hbnkzZD9vLkRvbVV0aWwuYWRkQ2xhc3ModGhpcy5faW1hZ2UsImxlYWZsZXQtem9vbS1hbmltYXRlZCIpOm8uRG9tVXRpbC5hZGRDbGFzcyh0aGlzLl9pbWFnZSwibGVhZmxldC16b29tLWhpZGUiKSx0aGlzLl91cGRhdGVPcGFjaXR5KCksby5leHRlbmQodGhpcy5faW1hZ2Use2dhbGxlcnlpbWc6Im5vIixvbnNlbGVjdHN0YXJ0Om8uVXRpbC5mYWxzZUZuLG9ubW91c2Vtb3ZlOm8uVXRpbC5mYWxzZUZuLG9ubG9hZDpvLmJpbmQodGhpcy5fb25JbWFnZUxvYWQsdGhpcyksc3JjOnRoaXMuX3VybH0pfSxfYW5pbWF0ZVpvb206ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5fbWFwLGk9dGhpcy5faW1hZ2Usbj1lLmdldFpvb21TY2FsZSh0Lnpvb20pLHM9dGhpcy5fYm91bmRzLmdldE5vcnRoV2VzdCgpLGE9dGhpcy5fYm91bmRzLmdldFNvdXRoRWFzdCgpLHI9ZS5fbGF0TG5nVG9OZXdMYXllclBvaW50KHMsdC56b29tLHQuY2VudGVyKSxoPWUuX2xhdExuZ1RvTmV3TGF5ZXJQb2ludChhLHQuem9vbSx0LmNlbnRlcikuX3N1YnRyYWN0KHIpLGw9ci5fYWRkKGguX211bHRpcGx5QnkoLjUqKDEtMS9uKSkpO2kuc3R5bGVbby5Eb21VdGlsLlRSQU5TRk9STV09by5Eb21VdGlsLmdldFRyYW5zbGF0ZVN0cmluZyhsKSsiIHNjYWxlKCIrbisiKSAifSxfcmVzZXQ6ZnVuY3Rpb24oKXt2YXIgdD10aGlzLl9pbWFnZSxlPXRoaXMuX21hcC5sYXRMbmdUb0xheWVyUG9pbnQodGhpcy5fYm91bmRzLmdldE5vcnRoV2VzdCgpKSxpPXRoaXMuX21hcC5sYXRMbmdUb0xheWVyUG9pbnQodGhpcy5fYm91bmRzLmdldFNvdXRoRWFzdCgpKS5fc3VidHJhY3QoZSk7by5Eb21VdGlsLnNldFBvc2l0aW9uKHQsZSksdC5zdHlsZS53aWR0aD1pLngrInB4Iix0LnN0eWxlLmhlaWdodD1pLnkrInB4In0sX29uSW1hZ2VMb2FkOmZ1bmN0aW9uKCl7dGhpcy5maXJlKCJsb2FkIil9LF91cGRhdGVPcGFjaXR5OmZ1bmN0aW9uKCl7by5Eb21VdGlsLnNldE9wYWNpdHkodGhpcy5faW1hZ2UsdGhpcy5vcHRpb25zLm9wYWNpdHkpfX0pLG8uaW1hZ2VPdmVybGF5PWZ1bmN0aW9uKHQsZSxpKXtyZXR1cm4gbmV3IG8uSW1hZ2VPdmVybGF5KHQsZSxpKX0sby5JY29uPW8uQ2xhc3MuZXh0ZW5kKHtvcHRpb25zOntjbGFzc05hbWU6IiJ9LGluaXRpYWxpemU6ZnVuY3Rpb24odCl7by5zZXRPcHRpb25zKHRoaXMsdCl9LGNyZWF0ZUljb246ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuX2NyZWF0ZUljb24oImljb24iLHQpfSxjcmVhdGVTaGFkb3c6ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuX2NyZWF0ZUljb24oInNoYWRvdyIsdCl9LF9jcmVhdGVJY29uOmZ1bmN0aW9uKHQsZSl7dmFyIGk9dGhpcy5fZ2V0SWNvblVybCh0KTtpZighaSl7aWYoImljb24iPT09dCl0aHJvdyBuZXcgRXJyb3IoImljb25Vcmwgbm90IHNldCBpbiBJY29uIG9wdGlvbnMgKHNlZSB0aGUgZG9jcykuIik7cmV0dXJuIG51bGx9dmFyIG47cmV0dXJuIG49ZSYmIklNRyI9PT1lLnRhZ05hbWU/dGhpcy5fY3JlYXRlSW1nKGksZSk6dGhpcy5fY3JlYXRlSW1nKGkpLHRoaXMuX3NldEljb25TdHlsZXMobix0KSxufSxfc2V0SWNvblN0eWxlczpmdW5jdGlvbih0LGUpe3ZhciBpLG49dGhpcy5vcHRpb25zLHM9by5wb2ludChuW2UrIlNpemUiXSk7aT0ic2hhZG93Ij09PWU/by5wb2ludChuLnNoYWRvd0FuY2hvcnx8bi5pY29uQW5jaG9yKTpvLnBvaW50KG4uaWNvbkFuY2hvciksIWkmJnMmJihpPXMuZGl2aWRlQnkoMiwhMCkpLHQuY2xhc3NOYW1lPSJsZWFmbGV0LW1hcmtlci0iK2UrIiAiK24uY2xhc3NOYW1lLGkmJih0LnN0eWxlLm1hcmdpbkxlZnQ9LWkueCsicHgiLHQuc3R5bGUubWFyZ2luVG9wPS1pLnkrInB4IikscyYmKHQuc3R5bGUud2lkdGg9cy54KyJweCIsdC5zdHlsZS5oZWlnaHQ9cy55KyJweCIpfSxfY3JlYXRlSW1nOmZ1bmN0aW9uKHQsaSl7cmV0dXJuIGk9aXx8ZS5jcmVhdGVFbGVtZW50KCJpbWciKSxpLnNyYz10LGl9LF9nZXRJY29uVXJsOmZ1bmN0aW9uKHQpe3JldHVybiBvLkJyb3dzZXIucmV0aW5hJiZ0aGlzLm9wdGlvbnNbdCsiUmV0aW5hVXJsIl0/dGhpcy5vcHRpb25zW3QrIlJldGluYVVybCJdOnRoaXMub3B0aW9uc1t0KyJVcmwiXX19KSxvLmljb249ZnVuY3Rpb24odCl7cmV0dXJuIG5ldyBvLkljb24odCl9LG8uSWNvbi5EZWZhdWx0PW8uSWNvbi5leHRlbmQoe29wdGlvbnM6e2ljb25TaXplOlsyNSw0MV0saWNvbkFuY2hvcjpbMTIsNDFdLHBvcHVwQW5jaG9yOlsxLC0zNF0sc2hhZG93U2l6ZTpbNDEsNDFdfSxfZ2V0SWNvblVybDpmdW5jdGlvbih0KXt2YXIgZT10KyJVcmwiO2lmKHRoaXMub3B0aW9uc1tlXSlyZXR1cm4gdGhpcy5vcHRpb25zW2VdO28uQnJvd3Nlci5yZXRpbmEmJiJpY29uIj09PXQmJih0Kz0iLTJ4Iik7dmFyIGk9by5JY29uLkRlZmF1bHQuaW1hZ2VQYXRoO2lmKCFpKXRocm93IG5ldyBFcnJvcigiQ291bGRuJ3QgYXV0b2RldGVjdCBMLkljb24uRGVmYXVsdC5pbWFnZVBhdGgsIHNldCBpdCBtYW51YWxseS4iKTtyZXR1cm4gaSsiL21hcmtlci0iK3QrIi5wbmcifX0pLG8uSWNvbi5EZWZhdWx0LmltYWdlUGF0aD1mdW5jdGlvbigpe3ZhciB0LGksbixvLHMsYT1lLmdldEVsZW1lbnRzQnlUYWdOYW1lKCJzY3JpcHQiKSxyPS9bXC9eXWxlYWZsZXRbXC1cLl9dPyhbXHdcLVwuX10qKVwuanNcPz8vO2Zvcih0PTAsaT1hLmxlbmd0aDtpPnQ7dCsrKWlmKG49YVt0XS5zcmMsbz1uLm1hdGNoKHIpKXJldHVybiBzPW4uc3BsaXQocilbMF0sKHM/cysiLyI6IiIpKyJpbWFnZXMifSgpLG8uTWFya2VyPW8uQ2xhc3MuZXh0ZW5kKHtpbmNsdWRlczpvLk1peGluLkV2ZW50cyxvcHRpb25zOntpY29uOm5ldyBvLkljb24uRGVmYXVsdCx0aXRsZToiIixhbHQ6IiIsY2xpY2thYmxlOiEwLGRyYWdnYWJsZTohMSxrZXlib2FyZDohMCx6SW5kZXhPZmZzZXQ6MCxvcGFjaXR5OjEscmlzZU9uSG92ZXI6ITEscmlzZU9mZnNldDoyNTB9LGluaXRpYWxpemU6ZnVuY3Rpb24odCxlKXtvLnNldE9wdGlvbnModGhpcyxlKSx0aGlzLl9sYXRsbmc9by5sYXRMbmcodCl9LG9uQWRkOmZ1bmN0aW9uKHQpe3RoaXMuX21hcD10LHQub24oInZpZXdyZXNldCIsdGhpcy51cGRhdGUsdGhpcyksdGhpcy5faW5pdEljb24oKSx0aGlzLnVwZGF0ZSgpLHRoaXMuZmlyZSgiYWRkIiksdC5vcHRpb25zLnpvb21BbmltYXRpb24mJnQub3B0aW9ucy5tYXJrZXJab29tQW5pbWF0aW9uJiZ0Lm9uKCJ6b29tYW5pbSIsdGhpcy5fYW5pbWF0ZVpvb20sdGhpcyl9LGFkZFRvOmZ1bmN0aW9uKHQpe3JldHVybiB0LmFkZExheWVyKHRoaXMpLHRoaXN9LG9uUmVtb3ZlOmZ1bmN0aW9uKHQpe3RoaXMuZHJhZ2dpbmcmJnRoaXMuZHJhZ2dpbmcuZGlzYWJsZSgpLHRoaXMuX3JlbW92ZUljb24oKSx0aGlzLl9yZW1vdmVTaGFkb3coKSx0aGlzLmZpcmUoInJlbW92ZSIpLHQub2ZmKHt2aWV3cmVzZXQ6dGhpcy51cGRhdGUsem9vbWFuaW06dGhpcy5fYW5pbWF0ZVpvb219LHRoaXMpLHRoaXMuX21hcD1udWxsfSxnZXRMYXRMbmc6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fbGF0bG5nfSxzZXRMYXRMbmc6ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuX2xhdGxuZz1vLmxhdExuZyh0KSx0aGlzLnVwZGF0ZSgpLHRoaXMuZmlyZSgibW92ZSIse2xhdGxuZzp0aGlzLl9sYXRsbmd9KX0sc2V0WkluZGV4T2Zmc2V0OmZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLm9wdGlvbnMuekluZGV4T2Zmc2V0PXQsdGhpcy51cGRhdGUoKSx0aGlzfSxzZXRJY29uOmZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLm9wdGlvbnMuaWNvbj10LHRoaXMuX21hcCYmKHRoaXMuX2luaXRJY29uKCksdGhpcy51cGRhdGUoKSksdGhpcy5fcG9wdXAmJnRoaXMuYmluZFBvcHVwKHRoaXMuX3BvcHVwKSx0aGlzfSx1cGRhdGU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5faWNvbiYmdGhpcy5fc2V0UG9zKHRoaXMuX21hcC5sYXRMbmdUb0xheWVyUG9pbnQodGhpcy5fbGF0bG5nKS5yb3VuZCgpKSx0aGlzfSxfaW5pdEljb246ZnVuY3Rpb24oKXt2YXIgdD10aGlzLm9wdGlvbnMsZT10aGlzLl9tYXAsaT1lLm9wdGlvbnMuem9vbUFuaW1hdGlvbiYmZS5vcHRpb25zLm1hcmtlclpvb21BbmltYXRpb24sbj1pPyJsZWFmbGV0LXpvb20tYW5pbWF0ZWQiOiJsZWFmbGV0LXpvb20taGlkZSIscz10Lmljb24uY3JlYXRlSWNvbih0aGlzLl9pY29uKSxhPSExO3MhPT10aGlzLl9pY29uJiYodGhpcy5faWNvbiYmdGhpcy5fcmVtb3ZlSWNvbigpLGE9ITAsdC50aXRsZSYmKHMudGl0bGU9dC50aXRsZSksdC5hbHQmJihzLmFsdD10LmFsdCkpLG8uRG9tVXRpbC5hZGRDbGFzcyhzLG4pLHQua2V5Ym9hcmQmJihzLnRhYkluZGV4PSIwIiksdGhpcy5faWNvbj1zLHRoaXMuX2luaXRJbnRlcmFjdGlvbigpLHQucmlzZU9uSG92ZXImJm8uRG9tRXZlbnQub24ocywibW91c2VvdmVyIix0aGlzLl9icmluZ1RvRnJvbnQsdGhpcykub24ocywibW91c2VvdXQiLHRoaXMuX3Jlc2V0WkluZGV4LHRoaXMpO3ZhciByPXQuaWNvbi5jcmVhdGVTaGFkb3codGhpcy5fc2hhZG93KSxoPSExO3IhPT10aGlzLl9zaGFkb3cmJih0aGlzLl9yZW1vdmVTaGFkb3coKSxoPSEwKSxyJiZvLkRvbVV0aWwuYWRkQ2xhc3MocixuKSx0aGlzLl9zaGFkb3c9cix0Lm9wYWNpdHk8MSYmdGhpcy5fdXBkYXRlT3BhY2l0eSgpO3ZhciBsPXRoaXMuX21hcC5fcGFuZXM7YSYmbC5tYXJrZXJQYW5lLmFwcGVuZENoaWxkKHRoaXMuX2ljb24pLHImJmgmJmwuc2hhZG93UGFuZS5hcHBlbmRDaGlsZCh0aGlzLl9zaGFkb3cpfSxfcmVtb3ZlSWNvbjpmdW5jdGlvbigpe3RoaXMub3B0aW9ucy5yaXNlT25Ib3ZlciYmby5Eb21FdmVudC5vZmYodGhpcy5faWNvbiwibW91c2VvdmVyIix0aGlzLl9icmluZ1RvRnJvbnQpLm9mZih0aGlzLl9pY29uLCJtb3VzZW91dCIsdGhpcy5fcmVzZXRaSW5kZXgpLHRoaXMuX21hcC5fcGFuZXMubWFya2VyUGFuZS5yZW1vdmVDaGlsZCh0aGlzLl9pY29uKSx0aGlzLl9pY29uPW51bGx9LF9yZW1vdmVTaGFkb3c6ZnVuY3Rpb24oKXt0aGlzLl9zaGFkb3cmJnRoaXMuX21hcC5fcGFuZXMuc2hhZG93UGFuZS5yZW1vdmVDaGlsZCh0aGlzLl9zaGFkb3cpLHRoaXMuX3NoYWRvdz1udWxsfSxfc2V0UG9zOmZ1bmN0aW9uKHQpe28uRG9tVXRpbC5zZXRQb3NpdGlvbih0aGlzLl9pY29uLHQpLHRoaXMuX3NoYWRvdyYmby5Eb21VdGlsLnNldFBvc2l0aW9uKHRoaXMuX3NoYWRvdyx0KSx0aGlzLl96SW5kZXg9dC55K3RoaXMub3B0aW9ucy56SW5kZXhPZmZzZXQsdGhpcy5fcmVzZXRaSW5kZXgoKX0sX3VwZGF0ZVpJbmRleDpmdW5jdGlvbih0KXt0aGlzLl9pY29uLnN0eWxlLnpJbmRleD10aGlzLl96SW5kZXgrdH0sX2FuaW1hdGVab29tOmZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMuX21hcC5fbGF0TG5nVG9OZXdMYXllclBvaW50KHRoaXMuX2xhdGxuZyx0Lnpvb20sdC5jZW50ZXIpLnJvdW5kKCk7dGhpcy5fc2V0UG9zKGUpfSxfaW5pdEludGVyYWN0aW9uOmZ1bmN0aW9uKCl7aWYodGhpcy5vcHRpb25zLmNsaWNrYWJsZSl7dmFyIHQ9dGhpcy5faWNvbixlPVsiZGJsY2xpY2siLCJtb3VzZWRvd24iLCJtb3VzZW92ZXIiLCJtb3VzZW91dCIsImNvbnRleHRtZW51Il07by5Eb21VdGlsLmFkZENsYXNzKHQsImxlYWZsZXQtY2xpY2thYmxlIiksby5Eb21FdmVudC5vbih0LCJjbGljayIsdGhpcy5fb25Nb3VzZUNsaWNrLHRoaXMpLG8uRG9tRXZlbnQub24odCwia2V5cHJlc3MiLHRoaXMuX29uS2V5UHJlc3MsdGhpcyk7Zm9yKHZhciBpPTA7aTxlLmxlbmd0aDtpKyspby5Eb21FdmVudC5vbih0LGVbaV0sdGhpcy5fZmlyZU1vdXNlRXZlbnQsdGhpcyk7by5IYW5kbGVyLk1hcmtlckRyYWcmJih0aGlzLmRyYWdnaW5nPW5ldyBvLkhhbmRsZXIuTWFya2VyRHJhZyh0aGlzKSx0aGlzLm9wdGlvbnMuZHJhZ2dhYmxlJiZ0aGlzLmRyYWdnaW5nLmVuYWJsZSgpKX19LF9vbk1vdXNlQ2xpY2s6ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5kcmFnZ2luZyYmdGhpcy5kcmFnZ2luZy5tb3ZlZCgpOyh0aGlzLmhhc0V2ZW50TGlzdGVuZXJzKHQudHlwZSl8fGUpJiZvLkRvbUV2ZW50LnN0b3BQcm9wYWdhdGlvbih0KSxlfHwodGhpcy5kcmFnZ2luZyYmdGhpcy5kcmFnZ2luZy5fZW5hYmxlZHx8IXRoaXMuX21hcC5kcmFnZ2luZ3x8IXRoaXMuX21hcC5kcmFnZ2luZy5tb3ZlZCgpKSYmdGhpcy5maXJlKHQudHlwZSx7b3JpZ2luYWxFdmVudDp0LGxhdGxuZzp0aGlzLl9sYXRsbmd9KX0sX29uS2V5UHJlc3M6ZnVuY3Rpb24odCl7MTM9PT10LmtleUNvZGUmJnRoaXMuZmlyZSgiY2xpY2siLHtvcmlnaW5hbEV2ZW50OnQsbGF0bG5nOnRoaXMuX2xhdGxuZ30pfSxfZmlyZU1vdXNlRXZlbnQ6ZnVuY3Rpb24odCl7dGhpcy5maXJlKHQudHlwZSx7b3JpZ2luYWxFdmVudDp0LGxhdGxuZzp0aGlzLl9sYXRsbmd9KSwiY29udGV4dG1lbnUiPT09dC50eXBlJiZ0aGlzLmhhc0V2ZW50TGlzdGVuZXJzKHQudHlwZSkmJm8uRG9tRXZlbnQucHJldmVudERlZmF1bHQodCksIm1vdXNlZG93biIhPT10LnR5cGU/by5Eb21FdmVudC5zdG9wUHJvcGFnYXRpb24odCk6by5Eb21FdmVudC5wcmV2ZW50RGVmYXVsdCh0KX0sc2V0T3BhY2l0eTpmdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5vcHRpb25zLm9wYWNpdHk9dCx0aGlzLl9tYXAmJnRoaXMuX3VwZGF0ZU9wYWNpdHkoKSx0aGlzfSxfdXBkYXRlT3BhY2l0eTpmdW5jdGlvbigpe28uRG9tVXRpbC5zZXRPcGFjaXR5KHRoaXMuX2ljb24sdGhpcy5vcHRpb25zLm9wYWNpdHkpLHRoaXMuX3NoYWRvdyYmby5Eb21VdGlsLnNldE9wYWNpdHkodGhpcy5fc2hhZG93LHRoaXMub3B0aW9ucy5vcGFjaXR5KX0sX2JyaW5nVG9Gcm9udDpmdW5jdGlvbigpe3RoaXMuX3VwZGF0ZVpJbmRleCh0aGlzLm9wdGlvbnMucmlzZU9mZnNldCl9LF9yZXNldFpJbmRleDpmdW5jdGlvbigpe3RoaXMuX3VwZGF0ZVpJbmRleCgwKX19KSxvLm1hcmtlcj1mdW5jdGlvbih0LGUpe3JldHVybiBuZXcgby5NYXJrZXIodCxlKX0sby5EaXZJY29uPW8uSWNvbi5leHRlbmQoe29wdGlvbnM6e2ljb25TaXplOlsxMiwxMl0sY2xhc3NOYW1lOiJsZWFmbGV0LWRpdi1pY29uIixodG1sOiExfSxjcmVhdGVJY29uOmZ1bmN0aW9uKHQpe3ZhciBpPXQmJiJESVYiPT09dC50YWdOYW1lP3Q6ZS5jcmVhdGVFbGVtZW50KCJkaXYiKSxuPXRoaXMub3B0aW9ucztyZXR1cm4gbi5odG1sIT09ITE/aS5pbm5lckhUTUw9bi5odG1sOmkuaW5uZXJIVE1MPSIiLG4uYmdQb3MmJihpLnN0eWxlLmJhY2tncm91bmRQb3NpdGlvbj0tbi5iZ1Bvcy54KyJweCAiKy1uLmJnUG9zLnkrInB4IiksdGhpcy5fc2V0SWNvblN0eWxlcyhpLCJpY29uIiksaX0sY3JlYXRlU2hhZG93OmZ1bmN0aW9uKCl7cmV0dXJuIG51bGx9fSksby5kaXZJY29uPWZ1bmN0aW9uKHQpe3JldHVybiBuZXcgby5EaXZJY29uKHQpfSxvLk1hcC5tZXJnZU9wdGlvbnMoe2Nsb3NlUG9wdXBPbkNsaWNrOiEwfSksby5Qb3B1cD1vLkNsYXNzLmV4dGVuZCh7aW5jbHVkZXM6by5NaXhpbi5FdmVudHMsb3B0aW9uczp7bWluV2lkdGg6NTAsbWF4V2lkdGg6MzAwLGF1dG9QYW46ITAsY2xvc2VCdXR0b246ITAsb2Zmc2V0OlswLDddLGF1dG9QYW5QYWRkaW5nOls1LDVdLGtlZXBJblZpZXc6ITEsY2xhc3NOYW1lOiIiLHpvb21BbmltYXRpb246ITB9LGluaXRpYWxpemU6ZnVuY3Rpb24odCxlKXtvLnNldE9wdGlvbnModGhpcyx0KSx0aGlzLl9zb3VyY2U9ZSx0aGlzLl9hbmltYXRlZD1vLkJyb3dzZXIuYW55M2QmJnRoaXMub3B0aW9ucy56b29tQW5pbWF0aW9uLHRoaXMuX2lzT3Blbj0hMX0sb25BZGQ6ZnVuY3Rpb24odCl7dGhpcy5fbWFwPXQsdGhpcy5fY29udGFpbmVyfHx0aGlzLl9pbml0TGF5b3V0KCk7dmFyIGU9dC5vcHRpb25zLmZhZGVBbmltYXRpb247ZSYmby5Eb21VdGlsLnNldE9wYWNpdHkodGhpcy5fY29udGFpbmVyLDApLHQuX3BhbmVzLnBvcHVwUGFuZS5hcHBlbmRDaGlsZCh0aGlzLl9jb250YWluZXIpLHQub24odGhpcy5fZ2V0RXZlbnRzKCksdGhpcyksdGhpcy51cGRhdGUoKSxlJiZvLkRvbVV0aWwuc2V0T3BhY2l0eSh0aGlzLl9jb250YWluZXIsMSksdGhpcy5maXJlKCJvcGVuIiksdC5maXJlKCJwb3B1cG9wZW4iLHtwb3B1cDp0aGlzfSksdGhpcy5fc291cmNlJiZ0aGlzLl9zb3VyY2UuZmlyZSgicG9wdXBvcGVuIix7cG9wdXA6dGhpc30pfSxhZGRUbzpmdW5jdGlvbih0KXtyZXR1cm4gdC5hZGRMYXllcih0aGlzKSx0aGlzfSxvcGVuT246ZnVuY3Rpb24odCl7cmV0dXJuIHQub3BlblBvcHVwKHRoaXMpLHRoaXN9LG9uUmVtb3ZlOmZ1bmN0aW9uKHQpe3QuX3BhbmVzLnBvcHVwUGFuZS5yZW1vdmVDaGlsZCh0aGlzLl9jb250YWluZXIpLG8uVXRpbC5mYWxzZUZuKHRoaXMuX2NvbnRhaW5lci5vZmZzZXRXaWR0aCksdC5vZmYodGhpcy5fZ2V0RXZlbnRzKCksdGhpcyksdC5vcHRpb25zLmZhZGVBbmltYXRpb24mJm8uRG9tVXRpbC5zZXRPcGFjaXR5KHRoaXMuX2NvbnRhaW5lciwwKSx0aGlzLl9tYXA9bnVsbCx0aGlzLmZpcmUoImNsb3NlIiksdC5maXJlKCJwb3B1cGNsb3NlIix7cG9wdXA6dGhpc30pLHRoaXMuX3NvdXJjZSYmdGhpcy5fc291cmNlLmZpcmUoInBvcHVwY2xvc2UiLHtwb3B1cDp0aGlzfSl9LGdldExhdExuZzpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9sYXRsbmd9LHNldExhdExuZzpmdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5fbGF0bG5nPW8ubGF0TG5nKHQpLHRoaXMuX21hcCYmKHRoaXMuX3VwZGF0ZVBvc2l0aW9uKCksdGhpcy5fYWRqdXN0UGFuKCkpLHRoaXN9LGdldENvbnRlbnQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fY29udGVudH0sc2V0Q29udGVudDpmdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5fY29udGVudD10LHRoaXMudXBkYXRlKCksdGhpc30sdXBkYXRlOmZ1bmN0aW9uKCl7dGhpcy5fbWFwJiYodGhpcy5fY29udGFpbmVyLnN0eWxlLnZpc2liaWxpdHk9ImhpZGRlbiIsdGhpcy5fdXBkYXRlQ29udGVudCgpLHRoaXMuX3VwZGF0ZUxheW91dCgpLHRoaXMuX3VwZGF0ZVBvc2l0aW9uKCksdGhpcy5fY29udGFpbmVyLnN0eWxlLnZpc2liaWxpdHk9IiIsdGhpcy5fYWRqdXN0UGFuKCkpfSxfZ2V0RXZlbnRzOmZ1bmN0aW9uKCl7dmFyIHQ9e3ZpZXdyZXNldDp0aGlzLl91cGRhdGVQb3NpdGlvbn07cmV0dXJuIHRoaXMuX2FuaW1hdGVkJiYodC56b29tYW5pbT10aGlzLl96b29tQW5pbWF0aW9uKSwoImNsb3NlT25DbGljayJpbiB0aGlzLm9wdGlvbnM/dGhpcy5vcHRpb25zLmNsb3NlT25DbGljazp0aGlzLl9tYXAub3B0aW9ucy5jbG9zZVBvcHVwT25DbGljaykmJih0LnByZWNsaWNrPXRoaXMuX2Nsb3NlKSx0aGlzLm9wdGlvbnMua2VlcEluVmlldyYmKHQubW92ZWVuZD10aGlzLl9hZGp1c3RQYW4pLHR9LF9jbG9zZTpmdW5jdGlvbigpe3RoaXMuX21hcCYmdGhpcy5fbWFwLmNsb3NlUG9wdXAodGhpcyl9LF9pbml0TGF5b3V0OmZ1bmN0aW9uKCl7dmFyIHQsZT0ibGVhZmxldC1wb3B1cCIsaT1lKyIgIit0aGlzLm9wdGlvbnMuY2xhc3NOYW1lKyIgbGVhZmxldC16b29tLSIrKHRoaXMuX2FuaW1hdGVkPyJhbmltYXRlZCI6ImhpZGUiKSxuPXRoaXMuX2NvbnRhaW5lcj1vLkRvbVV0aWwuY3JlYXRlKCJkaXYiLGkpO3RoaXMub3B0aW9ucy5jbG9zZUJ1dHRvbiYmKHQ9dGhpcy5fY2xvc2VCdXR0b249by5Eb21VdGlsLmNyZWF0ZSgiYSIsZSsiLWNsb3NlLWJ1dHRvbiIsbiksdC5ocmVmPSIjY2xvc2UiLHQuaW5uZXJIVE1MPSImIzIxNTsiLG8uRG9tRXZlbnQuZGlzYWJsZUNsaWNrUHJvcGFnYXRpb24odCksby5Eb21FdmVudC5vbih0LCJjbGljayIsdGhpcy5fb25DbG9zZUJ1dHRvbkNsaWNrLHRoaXMpKTt2YXIgcz10aGlzLl93cmFwcGVyPW8uRG9tVXRpbC5jcmVhdGUoImRpdiIsZSsiLWNvbnRlbnQtd3JhcHBlciIsbik7by5Eb21FdmVudC5kaXNhYmxlQ2xpY2tQcm9wYWdhdGlvbihzKSx0aGlzLl9jb250ZW50Tm9kZT1vLkRvbVV0aWwuY3JlYXRlKCJkaXYiLGUrIi1jb250ZW50IixzKSxvLkRvbUV2ZW50LmRpc2FibGVTY3JvbGxQcm9wYWdhdGlvbih0aGlzLl9jb250ZW50Tm9kZSksby5Eb21FdmVudC5vbihzLCJjb250ZXh0bWVudSIsby5Eb21FdmVudC5zdG9wUHJvcGFnYXRpb24pLHRoaXMuX3RpcENvbnRhaW5lcj1vLkRvbVV0aWwuY3JlYXRlKCJkaXYiLGUrIi10aXAtY29udGFpbmVyIixuKSx0aGlzLl90aXA9by5Eb21VdGlsLmNyZWF0ZSgiZGl2IixlKyItdGlwIix0aGlzLl90aXBDb250YWluZXIpfSxfdXBkYXRlQ29udGVudDpmdW5jdGlvbigpe2lmKHRoaXMuX2NvbnRlbnQpe2lmKCJzdHJpbmciPT10eXBlb2YgdGhpcy5fY29udGVudCl0aGlzLl9jb250ZW50Tm9kZS5pbm5lckhUTUw9dGhpcy5fY29udGVudDtlbHNle2Zvcig7dGhpcy5fY29udGVudE5vZGUuaGFzQ2hpbGROb2RlcygpOyl0aGlzLl9jb250ZW50Tm9kZS5yZW1vdmVDaGlsZCh0aGlzLl9jb250ZW50Tm9kZS5maXJzdENoaWxkKTt0aGlzLl9jb250ZW50Tm9kZS5hcHBlbmRDaGlsZCh0aGlzLl9jb250ZW50KX10aGlzLmZpcmUoImNvbnRlbnR1cGRhdGUiKX19LF91cGRhdGVMYXlvdXQ6ZnVuY3Rpb24oKXt2YXIgdD10aGlzLl9jb250ZW50Tm9kZSxlPXQuc3R5bGU7ZS53aWR0aD0iIixlLndoaXRlU3BhY2U9Im5vd3JhcCI7dmFyIGk9dC5vZmZzZXRXaWR0aDtpPU1hdGgubWluKGksdGhpcy5vcHRpb25zLm1heFdpZHRoKSxpPU1hdGgubWF4KGksdGhpcy5vcHRpb25zLm1pbldpZHRoKSxlLndpZHRoPWkrMSsicHgiLGUud2hpdGVTcGFjZT0iIixlLmhlaWdodD0iIjt2YXIgbj10Lm9mZnNldEhlaWdodCxzPXRoaXMub3B0aW9ucy5tYXhIZWlnaHQsYT0ibGVhZmxldC1wb3B1cC1zY3JvbGxlZCI7cyYmbj5zPyhlLmhlaWdodD1zKyJweCIsby5Eb21VdGlsLmFkZENsYXNzKHQsYSkpOm8uRG9tVXRpbC5yZW1vdmVDbGFzcyh0LGEpLHRoaXMuX2NvbnRhaW5lcldpZHRoPXRoaXMuX2NvbnRhaW5lci5vZmZzZXRXaWR0aH0sX3VwZGF0ZVBvc2l0aW9uOmZ1bmN0aW9uKCl7aWYodGhpcy5fbWFwKXt2YXIgdD10aGlzLl9tYXAubGF0TG5nVG9MYXllclBvaW50KHRoaXMuX2xhdGxuZyksZT10aGlzLl9hbmltYXRlZCxpPW8ucG9pbnQodGhpcy5vcHRpb25zLm9mZnNldCk7ZSYmby5Eb21VdGlsLnNldFBvc2l0aW9uKHRoaXMuX2NvbnRhaW5lcix0KSx0aGlzLl9jb250YWluZXJCb3R0b209LWkueS0oZT8wOnQueSksdGhpcy5fY29udGFpbmVyTGVmdD0tTWF0aC5yb3VuZCh0aGlzLl9jb250YWluZXJXaWR0aC8yKStpLngrKGU/MDp0LngpLHRoaXMuX2NvbnRhaW5lci5zdHlsZS5ib3R0b209dGhpcy5fY29udGFpbmVyQm90dG9tKyJweCIsdGhpcy5fY29udGFpbmVyLnN0eWxlLmxlZnQ9dGhpcy5fY29udGFpbmVyTGVmdCsicHgifX0sX3pvb21BbmltYXRpb246ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5fbWFwLl9sYXRMbmdUb05ld0xheWVyUG9pbnQodGhpcy5fbGF0bG5nLHQuem9vbSx0LmNlbnRlcik7by5Eb21VdGlsLnNldFBvc2l0aW9uKHRoaXMuX2NvbnRhaW5lcixlKX0sX2FkanVzdFBhbjpmdW5jdGlvbigpe2lmKHRoaXMub3B0aW9ucy5hdXRvUGFuKXt2YXIgdD10aGlzLl9tYXAsZT10aGlzLl9jb250YWluZXIub2Zmc2V0SGVpZ2h0LGk9dGhpcy5fY29udGFpbmVyV2lkdGgsbj1uZXcgby5Qb2ludCh0aGlzLl9jb250YWluZXJMZWZ0LC1lLXRoaXMuX2NvbnRhaW5lckJvdHRvbSk7dGhpcy5fYW5pbWF0ZWQmJm4uX2FkZChvLkRvbVV0aWwuZ2V0UG9zaXRpb24odGhpcy5fY29udGFpbmVyKSk7dmFyIHM9dC5sYXllclBvaW50VG9Db250YWluZXJQb2ludChuKSxhPW8ucG9pbnQodGhpcy5vcHRpb25zLmF1dG9QYW5QYWRkaW5nKSxyPW8ucG9pbnQodGhpcy5vcHRpb25zLmF1dG9QYW5QYWRkaW5nVG9wTGVmdHx8YSksaD1vLnBvaW50KHRoaXMub3B0aW9ucy5hdXRvUGFuUGFkZGluZ0JvdHRvbVJpZ2h0fHxhKSxsPXQuZ2V0U2l6ZSgpLHU9MCxjPTA7cy54K2kraC54PmwueCYmKHU9cy54K2ktbC54K2gueCkscy54LXUtci54PDAmJih1PXMueC1yLngpLHMueStlK2gueT5sLnkmJihjPXMueStlLWwueStoLnkpLHMueS1jLXIueTwwJiYoYz1zLnktci55KSwodXx8YykmJnQuZmlyZSgiYXV0b3BhbnN0YXJ0IikucGFuQnkoW3UsY10pfX0sX29uQ2xvc2VCdXR0b25DbGljazpmdW5jdGlvbih0KXt0aGlzLl9jbG9zZSgpLG8uRG9tRXZlbnQuc3RvcCh0KX19KSxvLnBvcHVwPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIG5ldyBvLlBvcHVwKHQsZSl9LG8uTWFwLmluY2x1ZGUoe29wZW5Qb3B1cDpmdW5jdGlvbih0LGUsaSl7aWYodGhpcy5jbG9zZVBvcHVwKCksISh0IGluc3RhbmNlb2Ygby5Qb3B1cCkpe3ZhciBuPXQ7dD1uZXcgby5Qb3B1cChpKS5zZXRMYXRMbmcoZSkuc2V0Q29udGVudChuKX1yZXR1cm4gdC5faXNPcGVuPSEwLHRoaXMuX3BvcHVwPXQsdGhpcy5hZGRMYXllcih0KX0sY2xvc2VQb3B1cDpmdW5jdGlvbih0KXtyZXR1cm4gdCYmdCE9PXRoaXMuX3BvcHVwfHwodD10aGlzLl9wb3B1cCx0aGlzLl9wb3B1cD1udWxsKSx0JiYodGhpcy5yZW1vdmVMYXllcih0KSx0Ll9pc09wZW49ITEpLHRoaXN9fSksby5NYXJrZXIuaW5jbHVkZSh7b3BlblBvcHVwOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3BvcHVwJiZ0aGlzLl9tYXAmJiF0aGlzLl9tYXAuaGFzTGF5ZXIodGhpcy5fcG9wdXApJiYodGhpcy5fcG9wdXAuc2V0TGF0TG5nKHRoaXMuX2xhdGxuZyksdGhpcy5fbWFwLm9wZW5Qb3B1cCh0aGlzLl9wb3B1cCkpLHRoaXN9LGNsb3NlUG9wdXA6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fcG9wdXAmJnRoaXMuX3BvcHVwLl9jbG9zZSgpLHRoaXN9LHRvZ2dsZVBvcHVwOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3BvcHVwJiYodGhpcy5fcG9wdXAuX2lzT3Blbj90aGlzLmNsb3NlUG9wdXAoKTp0aGlzLm9wZW5Qb3B1cCgpKSx0aGlzfSxiaW5kUG9wdXA6ZnVuY3Rpb24odCxlKXt2YXIgaT1vLnBvaW50KHRoaXMub3B0aW9ucy5pY29uLm9wdGlvbnMucG9wdXBBbmNob3J8fFswLDBdKTtyZXR1cm4gaT1pLmFkZChvLlBvcHVwLnByb3RvdHlwZS5vcHRpb25zLm9mZnNldCksZSYmZS5vZmZzZXQmJihpPWkuYWRkKGUub2Zmc2V0KSksZT1vLmV4dGVuZCh7b2Zmc2V0Oml9LGUpLHRoaXMuX3BvcHVwSGFuZGxlcnNBZGRlZHx8KHRoaXMub24oImNsaWNrIix0aGlzLnRvZ2dsZVBvcHVwLHRoaXMpLm9uKCJyZW1vdmUiLHRoaXMuY2xvc2VQb3B1cCx0aGlzKS5vbigibW92ZSIsdGhpcy5fbW92ZVBvcHVwLHRoaXMpLHRoaXMuX3BvcHVwSGFuZGxlcnNBZGRlZD0hMCksdCBpbnN0YW5jZW9mIG8uUG9wdXA/KG8uc2V0T3B0aW9ucyh0LGUpLHRoaXMuX3BvcHVwPXQsdC5fc291cmNlPXRoaXMpOnRoaXMuX3BvcHVwPW5ldyBvLlBvcHVwKGUsdGhpcykuc2V0Q29udGVudCh0KSx0aGlzfSxzZXRQb3B1cENvbnRlbnQ6ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuX3BvcHVwJiZ0aGlzLl9wb3B1cC5zZXRDb250ZW50KHQpLHRoaXN9LHVuYmluZFBvcHVwOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3BvcHVwJiYodGhpcy5fcG9wdXA9bnVsbCx0aGlzLm9mZigiY2xpY2siLHRoaXMudG9nZ2xlUG9wdXAsdGhpcykub2ZmKCJyZW1vdmUiLHRoaXMuY2xvc2VQb3B1cCx0aGlzKS5vZmYoIm1vdmUiLHRoaXMuX21vdmVQb3B1cCx0aGlzKSx0aGlzLl9wb3B1cEhhbmRsZXJzQWRkZWQ9ITEpLHRoaXN9LGdldFBvcHVwOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3BvcHVwfSxfbW92ZVBvcHVwOmZ1bmN0aW9uKHQpe3RoaXMuX3BvcHVwLnNldExhdExuZyh0LmxhdGxuZyl9fSksby5MYXllckdyb3VwPW8uQ2xhc3MuZXh0ZW5kKHtpbml0aWFsaXplOmZ1bmN0aW9uKHQpe3RoaXMuX2xheWVycz17fTt2YXIgZSxpO2lmKHQpZm9yKGU9MCxpPXQubGVuZ3RoO2k+ZTtlKyspdGhpcy5hZGRMYXllcih0W2VdKX0sYWRkTGF5ZXI6ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5nZXRMYXllcklkKHQpO3JldHVybiB0aGlzLl9sYXllcnNbZV09dCx0aGlzLl9tYXAmJnRoaXMuX21hcC5hZGRMYXllcih0KSx0aGlzfSxyZW1vdmVMYXllcjpmdW5jdGlvbih0KXt2YXIgZT10IGluIHRoaXMuX2xheWVycz90OnRoaXMuZ2V0TGF5ZXJJZCh0KTtyZXR1cm4gdGhpcy5fbWFwJiZ0aGlzLl9sYXllcnNbZV0mJnRoaXMuX21hcC5yZW1vdmVMYXllcih0aGlzLl9sYXllcnNbZV0pLGRlbGV0ZSB0aGlzLl9sYXllcnNbZV0sdGhpc30saGFzTGF5ZXI6ZnVuY3Rpb24odCl7cmV0dXJuIHQ/dCBpbiB0aGlzLl9sYXllcnN8fHRoaXMuZ2V0TGF5ZXJJZCh0KWluIHRoaXMuX2xheWVyczohMX0sY2xlYXJMYXllcnM6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5lYWNoTGF5ZXIodGhpcy5yZW1vdmVMYXllcix0aGlzKSx0aGlzfSxpbnZva2U6ZnVuY3Rpb24odCl7dmFyIGUsaSxuPUFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cywxKTtmb3IoZSBpbiB0aGlzLl9sYXllcnMpaT10aGlzLl9sYXllcnNbZV0saVt0XSYmaVt0XS5hcHBseShpLG4pO3JldHVybiB0aGlzfSxvbkFkZDpmdW5jdGlvbih0KXt0aGlzLl9tYXA9dCx0aGlzLmVhY2hMYXllcih0LmFkZExheWVyLHQpfSxvblJlbW92ZTpmdW5jdGlvbih0KXt0aGlzLmVhY2hMYXllcih0LnJlbW92ZUxheWVyLHQpLHRoaXMuX21hcD1udWxsfSxhZGRUbzpmdW5jdGlvbih0KXtyZXR1cm4gdC5hZGRMYXllcih0aGlzKSx0aGlzfSxlYWNoTGF5ZXI6ZnVuY3Rpb24odCxlKXtmb3IodmFyIGkgaW4gdGhpcy5fbGF5ZXJzKXQuY2FsbChlLHRoaXMuX2xheWVyc1tpXSk7cmV0dXJuIHRoaXN9LGdldExheWVyOmZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLl9sYXllcnNbdF19LGdldExheWVyczpmdW5jdGlvbigpe3ZhciB0PVtdO2Zvcih2YXIgZSBpbiB0aGlzLl9sYXllcnMpdC5wdXNoKHRoaXMuX2xheWVyc1tlXSk7cmV0dXJuIHR9LHNldFpJbmRleDpmdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5pbnZva2UoInNldFpJbmRleCIsdCl9LGdldExheWVySWQ6ZnVuY3Rpb24odCl7cmV0dXJuIG8uc3RhbXAodCl9fSksby5sYXllckdyb3VwPWZ1bmN0aW9uKHQpe3JldHVybiBuZXcgby5MYXllckdyb3VwKHQpfSxvLkZlYXR1cmVHcm91cD1vLkxheWVyR3JvdXAuZXh0ZW5kKHtpbmNsdWRlczpvLk1peGluLkV2ZW50cyxzdGF0aWNzOntFVkVOVFM6ImNsaWNrIGRibGNsaWNrIG1vdXNlb3ZlciBtb3VzZW91dCBtb3VzZW1vdmUgY29udGV4dG1lbnUgcG9wdXBvcGVuIHBvcHVwY2xvc2UifSxhZGRMYXllcjpmdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5oYXNMYXllcih0KT90aGlzOigib24iaW4gdCYmdC5vbihvLkZlYXR1cmVHcm91cC5FVkVOVFMsdGhpcy5fcHJvcGFnYXRlRXZlbnQsdGhpcyksby5MYXllckdyb3VwLnByb3RvdHlwZS5hZGRMYXllci5jYWxsKHRoaXMsdCksdGhpcy5fcG9wdXBDb250ZW50JiZ0LmJpbmRQb3B1cCYmdC5iaW5kUG9wdXAodGhpcy5fcG9wdXBDb250ZW50LHRoaXMuX3BvcHVwT3B0aW9ucyksdGhpcy5maXJlKCJsYXllcmFkZCIse2xheWVyOnR9KSl9LHJlbW92ZUxheWVyOmZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLmhhc0xheWVyKHQpPyh0IGluIHRoaXMuX2xheWVycyYmKHQ9dGhpcy5fbGF5ZXJzW3RdKSwib2ZmImluIHQmJnQub2ZmKG8uRmVhdHVyZUdyb3VwLkVWRU5UUyx0aGlzLl9wcm9wYWdhdGVFdmVudCx0aGlzKSxvLkxheWVyR3JvdXAucHJvdG90eXBlLnJlbW92ZUxheWVyLmNhbGwodGhpcyx0KSx0aGlzLl9wb3B1cENvbnRlbnQmJnRoaXMuaW52b2tlKCJ1bmJpbmRQb3B1cCIpLHRoaXMuZmlyZSgibGF5ZXJyZW1vdmUiLHtsYXllcjp0fSkpOnRoaXN9LGJpbmRQb3B1cDpmdW5jdGlvbih0LGUpe3JldHVybiB0aGlzLl9wb3B1cENvbnRlbnQ9dCx0aGlzLl9wb3B1cE9wdGlvbnM9ZSx0aGlzLmludm9rZSgiYmluZFBvcHVwIix0LGUpfSxvcGVuUG9wdXA6ZnVuY3Rpb24odCl7Zm9yKHZhciBlIGluIHRoaXMuX2xheWVycyl7dGhpcy5fbGF5ZXJzW2VdLm9wZW5Qb3B1cCh0KTticmVha31yZXR1cm4gdGhpc30sc2V0U3R5bGU6ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuaW52b2tlKCJzZXRTdHlsZSIsdCl9LGJyaW5nVG9Gcm9udDpmdW5jdGlvbigpe3JldHVybiB0aGlzLmludm9rZSgiYnJpbmdUb0Zyb250Iil9LGJyaW5nVG9CYWNrOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuaW52b2tlKCJicmluZ1RvQmFjayIpfSxnZXRCb3VuZHM6ZnVuY3Rpb24oKXt2YXIgdD1uZXcgby5MYXRMbmdCb3VuZHM7cmV0dXJuIHRoaXMuZWFjaExheWVyKGZ1bmN0aW9uKGUpe3QuZXh0ZW5kKGUgaW5zdGFuY2VvZiBvLk1hcmtlcj9lLmdldExhdExuZygpOmUuZ2V0Qm91bmRzKCkpfSksdH0sX3Byb3BhZ2F0ZUV2ZW50OmZ1bmN0aW9uKHQpe3Q9by5leHRlbmQoe2xheWVyOnQudGFyZ2V0LHRhcmdldDp0aGlzfSx0KSx0aGlzLmZpcmUodC50eXBlLHQpfX0pLG8uZmVhdHVyZUdyb3VwPWZ1bmN0aW9uKHQpe3JldHVybiBuZXcgby5GZWF0dXJlR3JvdXAodCl9LG8uUGF0aD1vLkNsYXNzLmV4dGVuZCh7aW5jbHVkZXM6W28uTWl4aW4uRXZlbnRzXSxzdGF0aWNzOntDTElQX1BBRERJTkc6ZnVuY3Rpb24oKXt2YXIgZT1vLkJyb3dzZXIubW9iaWxlPzEyODA6MmUzLGk9KGUvTWF0aC5tYXgodC5vdXRlcldpZHRoLHQub3V0ZXJIZWlnaHQpLTEpLzI7cmV0dXJuIE1hdGgubWF4KDAsTWF0aC5taW4oLjUsaSkpfSgpfSxvcHRpb25zOntzdHJva2U6ITAsY29sb3I6IiMwMDMzZmYiLGRhc2hBcnJheTpudWxsLGxpbmVDYXA6bnVsbCxsaW5lSm9pbjpudWxsLHdlaWdodDo1LG9wYWNpdHk6LjUsZmlsbDohMSxmaWxsQ29sb3I6bnVsbCxmaWxsT3BhY2l0eTouMixjbGlja2FibGU6ITB9LGluaXRpYWxpemU6ZnVuY3Rpb24odCl7by5zZXRPcHRpb25zKHRoaXMsdCl9LG9uQWRkOmZ1bmN0aW9uKHQpe3RoaXMuX21hcD10LHRoaXMuX2NvbnRhaW5lcnx8KHRoaXMuX2luaXRFbGVtZW50cygpLHRoaXMuX2luaXRFdmVudHMoKSksdGhpcy5wcm9qZWN0TGF0bG5ncygpLHRoaXMuX3VwZGF0ZVBhdGgoKSx0aGlzLl9jb250YWluZXImJnRoaXMuX21hcC5fcGF0aFJvb3QuYXBwZW5kQ2hpbGQodGhpcy5fY29udGFpbmVyKSx0aGlzLmZpcmUoImFkZCIpLHQub24oe3ZpZXdyZXNldDp0aGlzLnByb2plY3RMYXRsbmdzLG1vdmVlbmQ6dGhpcy5fdXBkYXRlUGF0aH0sdGhpcyl9LGFkZFRvOmZ1bmN0aW9uKHQpe3JldHVybiB0LmFkZExheWVyKHRoaXMpLHRoaXN9LG9uUmVtb3ZlOmZ1bmN0aW9uKHQpe3QuX3BhdGhSb290LnJlbW92ZUNoaWxkKHRoaXMuX2NvbnRhaW5lciksdGhpcy5maXJlKCJyZW1vdmUiKSx0aGlzLl9tYXA9bnVsbCxvLkJyb3dzZXIudm1sJiYodGhpcy5fY29udGFpbmVyPW51bGwsdGhpcy5fc3Ryb2tlPW51bGwsdGhpcy5fZmlsbD1udWxsKSx0Lm9mZih7dmlld3Jlc2V0OnRoaXMucHJvamVjdExhdGxuZ3MsbW92ZWVuZDp0aGlzLl91cGRhdGVQYXRofSx0aGlzKX0scHJvamVjdExhdGxuZ3M6ZnVuY3Rpb24oKXt9LHNldFN0eWxlOmZ1bmN0aW9uKHQpe3JldHVybiBvLnNldE9wdGlvbnModGhpcyx0KSx0aGlzLl9jb250YWluZXImJnRoaXMuX3VwZGF0ZVN0eWxlKCksdGhpc30scmVkcmF3OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX21hcCYmKHRoaXMucHJvamVjdExhdGxuZ3MoKSx0aGlzLl91cGRhdGVQYXRoKCkpLHRoaXN9fSksby5NYXAuaW5jbHVkZSh7X3VwZGF0ZVBhdGhWaWV3cG9ydDpmdW5jdGlvbigpe3ZhciB0PW8uUGF0aC5DTElQX1BBRERJTkcsZT10aGlzLmdldFNpemUoKSxpPW8uRG9tVXRpbC5nZXRQb3NpdGlvbih0aGlzLl9tYXBQYW5lKSxuPWkubXVsdGlwbHlCeSgtMSkuX3N1YnRyYWN0KGUubXVsdGlwbHlCeSh0KS5fcm91bmQoKSkscz1uLmFkZChlLm11bHRpcGx5QnkoMSsyKnQpLl9yb3VuZCgpKTt0aGlzLl9wYXRoVmlld3BvcnQ9bmV3IG8uQm91bmRzKG4scyl9fSksby5QYXRoLlNWR19OUz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciLG8uQnJvd3Nlci5zdmc9ISghZS5jcmVhdGVFbGVtZW50TlN8fCFlLmNyZWF0ZUVsZW1lbnROUyhvLlBhdGguU1ZHX05TLCJzdmciKS5jcmVhdGVTVkdSZWN0KSxvLlBhdGg9by5QYXRoLmV4dGVuZCh7c3RhdGljczp7U1ZHOm8uQnJvd3Nlci5zdmd9LGJyaW5nVG9Gcm9udDpmdW5jdGlvbigpe3ZhciB0PXRoaXMuX21hcC5fcGF0aFJvb3QsZT10aGlzLl9jb250YWluZXI7cmV0dXJuIGUmJnQubGFzdENoaWxkIT09ZSYmdC5hcHBlbmRDaGlsZChlKSx0aGlzfSxicmluZ1RvQmFjazpmdW5jdGlvbigpe3ZhciB0PXRoaXMuX21hcC5fcGF0aFJvb3QsZT10aGlzLl9jb250YWluZXIsaT10LmZpcnN0Q2hpbGQ7cmV0dXJuIGUmJmkhPT1lJiZ0Lmluc2VydEJlZm9yZShlLGkpLHRoaXN9LGdldFBhdGhTdHJpbmc6ZnVuY3Rpb24oKXt9LF9jcmVhdGVFbGVtZW50OmZ1bmN0aW9uKHQpe3JldHVybiBlLmNyZWF0ZUVsZW1lbnROUyhvLlBhdGguU1ZHX05TLHQpfSxfaW5pdEVsZW1lbnRzOmZ1bmN0aW9uKCl7dGhpcy5fbWFwLl9pbml0UGF0aFJvb3QoKSx0aGlzLl9pbml0UGF0aCgpLHRoaXMuX2luaXRTdHlsZSgpfSxfaW5pdFBhdGg6ZnVuY3Rpb24oKXt0aGlzLl9jb250YWluZXI9dGhpcy5fY3JlYXRlRWxlbWVudCgiZyIpLHRoaXMuX3BhdGg9dGhpcy5fY3JlYXRlRWxlbWVudCgicGF0aCIpLHRoaXMub3B0aW9ucy5jbGFzc05hbWUmJm8uRG9tVXRpbC5hZGRDbGFzcyh0aGlzLl9wYXRoLHRoaXMub3B0aW9ucy5jbGFzc05hbWUpLHRoaXMuX2NvbnRhaW5lci5hcHBlbmRDaGlsZCh0aGlzLl9wYXRoKX0sX2luaXRTdHlsZTpmdW5jdGlvbigpe3RoaXMub3B0aW9ucy5zdHJva2UmJih0aGlzLl9wYXRoLnNldEF0dHJpYnV0ZSgic3Ryb2tlLWxpbmVqb2luIiwicm91bmQiKSx0aGlzLl9wYXRoLnNldEF0dHJpYnV0ZSgic3Ryb2tlLWxpbmVjYXAiLCJyb3VuZCIpKSx0aGlzLm9wdGlvbnMuZmlsbCYmdGhpcy5fcGF0aC5zZXRBdHRyaWJ1dGUoImZpbGwtcnVsZSIsImV2ZW5vZGQiKSx0aGlzLm9wdGlvbnMucG9pbnRlckV2ZW50cyYmdGhpcy5fcGF0aC5zZXRBdHRyaWJ1dGUoInBvaW50ZXItZXZlbnRzIix0aGlzLm9wdGlvbnMucG9pbnRlckV2ZW50cyksdGhpcy5vcHRpb25zLmNsaWNrYWJsZXx8dGhpcy5vcHRpb25zLnBvaW50ZXJFdmVudHN8fHRoaXMuX3BhdGguc2V0QXR0cmlidXRlKCJwb2ludGVyLWV2ZW50cyIsIm5vbmUiKSx0aGlzLl91cGRhdGVTdHlsZSgpfSxfdXBkYXRlU3R5bGU6ZnVuY3Rpb24oKXt0aGlzLm9wdGlvbnMuc3Ryb2tlPyh0aGlzLl9wYXRoLnNldEF0dHJpYnV0ZSgic3Ryb2tlIix0aGlzLm9wdGlvbnMuY29sb3IpLHRoaXMuX3BhdGguc2V0QXR0cmlidXRlKCJzdHJva2Utb3BhY2l0eSIsdGhpcy5vcHRpb25zLm9wYWNpdHkpLHRoaXMuX3BhdGguc2V0QXR0cmlidXRlKCJzdHJva2Utd2lkdGgiLHRoaXMub3B0aW9ucy53ZWlnaHQpLHRoaXMub3B0aW9ucy5kYXNoQXJyYXk/dGhpcy5fcGF0aC5zZXRBdHRyaWJ1dGUoInN0cm9rZS1kYXNoYXJyYXkiLHRoaXMub3B0aW9ucy5kYXNoQXJyYXkpOnRoaXMuX3BhdGgucmVtb3ZlQXR0cmlidXRlKCJzdHJva2UtZGFzaGFycmF5IiksdGhpcy5vcHRpb25zLmxpbmVDYXAmJnRoaXMuX3BhdGguc2V0QXR0cmlidXRlKCJzdHJva2UtbGluZWNhcCIsdGhpcy5vcHRpb25zLmxpbmVDYXApLHRoaXMub3B0aW9ucy5saW5lSm9pbiYmdGhpcy5fcGF0aC5zZXRBdHRyaWJ1dGUoInN0cm9rZS1saW5lam9pbiIsdGhpcy5vcHRpb25zLmxpbmVKb2luKSk6dGhpcy5fcGF0aC5zZXRBdHRyaWJ1dGUoInN0cm9rZSIsIm5vbmUiKSx0aGlzLm9wdGlvbnMuZmlsbD8odGhpcy5fcGF0aC5zZXRBdHRyaWJ1dGUoImZpbGwiLHRoaXMub3B0aW9ucy5maWxsQ29sb3J8fHRoaXMub3B0aW9ucy5jb2xvciksdGhpcy5fcGF0aC5zZXRBdHRyaWJ1dGUoImZpbGwtb3BhY2l0eSIsdGhpcy5vcHRpb25zLmZpbGxPcGFjaXR5KSk6dGhpcy5fcGF0aC5zZXRBdHRyaWJ1dGUoImZpbGwiLCJub25lIil9LF91cGRhdGVQYXRoOmZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5nZXRQYXRoU3RyaW5nKCk7dHx8KHQ9Ik0wIDAiKSx0aGlzLl9wYXRoLnNldEF0dHJpYnV0ZSgiZCIsdCl9LF9pbml0RXZlbnRzOmZ1bmN0aW9uKCl7aWYodGhpcy5vcHRpb25zLmNsaWNrYWJsZSl7KG8uQnJvd3Nlci5zdmd8fCFvLkJyb3dzZXIudm1sKSYmby5Eb21VdGlsLmFkZENsYXNzKHRoaXMuX3BhdGgsImxlYWZsZXQtY2xpY2thYmxlIiksby5Eb21FdmVudC5vbih0aGlzLl9jb250YWluZXIsImNsaWNrIix0aGlzLl9vbk1vdXNlQ2xpY2ssdGhpcyk7Zm9yKHZhciB0PVsiZGJsY2xpY2siLCJtb3VzZWRvd24iLCJtb3VzZW92ZXIiLCJtb3VzZW91dCIsIm1vdXNlbW92ZSIsImNvbnRleHRtZW51Il0sZT0wO2U8dC5sZW5ndGg7ZSsrKW8uRG9tRXZlbnQub24odGhpcy5fY29udGFpbmVyLHRbZV0sdGhpcy5fZmlyZU1vdXNlRXZlbnQsdGhpcyl9fSxfb25Nb3VzZUNsaWNrOmZ1bmN0aW9uKHQpeyF0Ll9zaW11bGF0ZWQmJnRoaXMuX21hcC5kcmFnZ2luZyYmdGhpcy5fbWFwLmRyYWdnaW5nLm1vdmVkKCl8fHRoaXMuX2ZpcmVNb3VzZUV2ZW50KHQpfSxfZmlyZU1vdXNlRXZlbnQ6ZnVuY3Rpb24odCl7aWYodGhpcy5fbWFwJiZ0aGlzLmhhc0V2ZW50TGlzdGVuZXJzKHQudHlwZSkpe3ZhciBlPXRoaXMuX21hcCxpPWUubW91c2VFdmVudFRvQ29udGFpbmVyUG9pbnQodCksbj1lLmNvbnRhaW5lclBvaW50VG9MYXllclBvaW50KGkpLHM9ZS5sYXllclBvaW50VG9MYXRMbmcobik7dGhpcy5maXJlKHQudHlwZSx7bGF0bG5nOnMsbGF5ZXJQb2ludDpuLGNvbnRhaW5lclBvaW50Omksb3JpZ2luYWxFdmVudDp0fSksImNvbnRleHRtZW51Ij09PXQudHlwZSYmby5Eb21FdmVudC5wcmV2ZW50RGVmYXVsdCh0KSwibW91c2Vtb3ZlIiE9PXQudHlwZSYmby5Eb21FdmVudC5zdG9wUHJvcGFnYXRpb24odCl9fX0pLG8uTWFwLmluY2x1ZGUoe19pbml0UGF0aFJvb3Q6ZnVuY3Rpb24oKXt0aGlzLl9wYXRoUm9vdHx8KHRoaXMuX3BhdGhSb290PW8uUGF0aC5wcm90b3R5cGUuX2NyZWF0ZUVsZW1lbnQoInN2ZyIpLHRoaXMuX3BhbmVzLm92ZXJsYXlQYW5lLmFwcGVuZENoaWxkKHRoaXMuX3BhdGhSb290KSx0aGlzLm9wdGlvbnMuem9vbUFuaW1hdGlvbiYmby5Ccm93c2VyLmFueTNkPyhvLkRvbVV0aWwuYWRkQ2xhc3ModGhpcy5fcGF0aFJvb3QsImxlYWZsZXQtem9vbS1hbmltYXRlZCIpLAp0aGlzLm9uKHt6b29tYW5pbTp0aGlzLl9hbmltYXRlUGF0aFpvb20sem9vbWVuZDp0aGlzLl9lbmRQYXRoWm9vbX0pKTpvLkRvbVV0aWwuYWRkQ2xhc3ModGhpcy5fcGF0aFJvb3QsImxlYWZsZXQtem9vbS1oaWRlIiksdGhpcy5vbigibW92ZWVuZCIsdGhpcy5fdXBkYXRlU3ZnVmlld3BvcnQpLHRoaXMuX3VwZGF0ZVN2Z1ZpZXdwb3J0KCkpfSxfYW5pbWF0ZVBhdGhab29tOmZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMuZ2V0Wm9vbVNjYWxlKHQuem9vbSksaT10aGlzLl9nZXRDZW50ZXJPZmZzZXQodC5jZW50ZXIpLl9tdWx0aXBseUJ5KC1lKS5fYWRkKHRoaXMuX3BhdGhWaWV3cG9ydC5taW4pO3RoaXMuX3BhdGhSb290LnN0eWxlW28uRG9tVXRpbC5UUkFOU0ZPUk1dPW8uRG9tVXRpbC5nZXRUcmFuc2xhdGVTdHJpbmcoaSkrIiBzY2FsZSgiK2UrIikgIix0aGlzLl9wYXRoWm9vbWluZz0hMH0sX2VuZFBhdGhab29tOmZ1bmN0aW9uKCl7dGhpcy5fcGF0aFpvb21pbmc9ITF9LF91cGRhdGVTdmdWaWV3cG9ydDpmdW5jdGlvbigpe2lmKCF0aGlzLl9wYXRoWm9vbWluZyl7dGhpcy5fdXBkYXRlUGF0aFZpZXdwb3J0KCk7dmFyIHQ9dGhpcy5fcGF0aFZpZXdwb3J0LGU9dC5taW4saT10Lm1heCxuPWkueC1lLngscz1pLnktZS55LGE9dGhpcy5fcGF0aFJvb3Qscj10aGlzLl9wYW5lcy5vdmVybGF5UGFuZTtvLkJyb3dzZXIubW9iaWxlV2Via2l0JiZyLnJlbW92ZUNoaWxkKGEpLG8uRG9tVXRpbC5zZXRQb3NpdGlvbihhLGUpLGEuc2V0QXR0cmlidXRlKCJ3aWR0aCIsbiksYS5zZXRBdHRyaWJ1dGUoImhlaWdodCIscyksYS5zZXRBdHRyaWJ1dGUoInZpZXdCb3giLFtlLngsZS55LG4sc10uam9pbigiICIpKSxvLkJyb3dzZXIubW9iaWxlV2Via2l0JiZyLmFwcGVuZENoaWxkKGEpfX19KSxvLlBhdGguaW5jbHVkZSh7YmluZFBvcHVwOmZ1bmN0aW9uKHQsZSl7cmV0dXJuIHQgaW5zdGFuY2VvZiBvLlBvcHVwP3RoaXMuX3BvcHVwPXQ6KCghdGhpcy5fcG9wdXB8fGUpJiYodGhpcy5fcG9wdXA9bmV3IG8uUG9wdXAoZSx0aGlzKSksdGhpcy5fcG9wdXAuc2V0Q29udGVudCh0KSksdGhpcy5fcG9wdXBIYW5kbGVyc0FkZGVkfHwodGhpcy5vbigiY2xpY2siLHRoaXMuX29wZW5Qb3B1cCx0aGlzKS5vbigicmVtb3ZlIix0aGlzLmNsb3NlUG9wdXAsdGhpcyksdGhpcy5fcG9wdXBIYW5kbGVyc0FkZGVkPSEwKSx0aGlzfSx1bmJpbmRQb3B1cDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9wb3B1cCYmKHRoaXMuX3BvcHVwPW51bGwsdGhpcy5vZmYoImNsaWNrIix0aGlzLl9vcGVuUG9wdXApLm9mZigicmVtb3ZlIix0aGlzLmNsb3NlUG9wdXApLHRoaXMuX3BvcHVwSGFuZGxlcnNBZGRlZD0hMSksdGhpc30sb3BlblBvcHVwOmZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLl9wb3B1cCYmKHQ9dHx8dGhpcy5fbGF0bG5nfHx0aGlzLl9sYXRsbmdzW01hdGguZmxvb3IodGhpcy5fbGF0bG5ncy5sZW5ndGgvMildLHRoaXMuX29wZW5Qb3B1cCh7bGF0bG5nOnR9KSksdGhpc30sY2xvc2VQb3B1cDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9wb3B1cCYmdGhpcy5fcG9wdXAuX2Nsb3NlKCksdGhpc30sX29wZW5Qb3B1cDpmdW5jdGlvbih0KXt0aGlzLl9wb3B1cC5zZXRMYXRMbmcodC5sYXRsbmcpLHRoaXMuX21hcC5vcGVuUG9wdXAodGhpcy5fcG9wdXApfX0pLG8uQnJvd3Nlci52bWw9IW8uQnJvd3Nlci5zdmcmJmZ1bmN0aW9uKCl7dHJ5e3ZhciB0PWUuY3JlYXRlRWxlbWVudCgiZGl2Iik7dC5pbm5lckhUTUw9Jzx2OnNoYXBlIGFkaj0iMSIvPic7dmFyIGk9dC5maXJzdENoaWxkO3JldHVybiBpLnN0eWxlLmJlaGF2aW9yPSJ1cmwoI2RlZmF1bHQjVk1MKSIsaSYmIm9iamVjdCI9PXR5cGVvZiBpLmFkan1jYXRjaChuKXtyZXR1cm4hMX19KCksby5QYXRoPW8uQnJvd3Nlci5zdmd8fCFvLkJyb3dzZXIudm1sP28uUGF0aDpvLlBhdGguZXh0ZW5kKHtzdGF0aWNzOntWTUw6ITAsQ0xJUF9QQURESU5HOi4wMn0sX2NyZWF0ZUVsZW1lbnQ6ZnVuY3Rpb24oKXt0cnl7cmV0dXJuIGUubmFtZXNwYWNlcy5hZGQoImx2bWwiLCJ1cm46c2NoZW1hcy1taWNyb3NvZnQtY29tOnZtbCIpLGZ1bmN0aW9uKHQpe3JldHVybiBlLmNyZWF0ZUVsZW1lbnQoIjxsdm1sOiIrdCsnIGNsYXNzPSJsdm1sIj4nKX19Y2F0Y2godCl7cmV0dXJuIGZ1bmN0aW9uKHQpe3JldHVybiBlLmNyZWF0ZUVsZW1lbnQoIjwiK3QrJyB4bWxucz0idXJuOnNjaGVtYXMtbWljcm9zb2Z0LmNvbTp2bWwiIGNsYXNzPSJsdm1sIj4nKX19fSgpLF9pbml0UGF0aDpmdW5jdGlvbigpe3ZhciB0PXRoaXMuX2NvbnRhaW5lcj10aGlzLl9jcmVhdGVFbGVtZW50KCJzaGFwZSIpO28uRG9tVXRpbC5hZGRDbGFzcyh0LCJsZWFmbGV0LXZtbC1zaGFwZSIrKHRoaXMub3B0aW9ucy5jbGFzc05hbWU/IiAiK3RoaXMub3B0aW9ucy5jbGFzc05hbWU6IiIpKSx0aGlzLm9wdGlvbnMuY2xpY2thYmxlJiZvLkRvbVV0aWwuYWRkQ2xhc3ModCwibGVhZmxldC1jbGlja2FibGUiKSx0LmNvb3Jkc2l6ZT0iMSAxIix0aGlzLl9wYXRoPXRoaXMuX2NyZWF0ZUVsZW1lbnQoInBhdGgiKSx0LmFwcGVuZENoaWxkKHRoaXMuX3BhdGgpLHRoaXMuX21hcC5fcGF0aFJvb3QuYXBwZW5kQ2hpbGQodCl9LF9pbml0U3R5bGU6ZnVuY3Rpb24oKXt0aGlzLl91cGRhdGVTdHlsZSgpfSxfdXBkYXRlU3R5bGU6ZnVuY3Rpb24oKXt2YXIgdD10aGlzLl9zdHJva2UsZT10aGlzLl9maWxsLGk9dGhpcy5vcHRpb25zLG49dGhpcy5fY29udGFpbmVyO24uc3Ryb2tlZD1pLnN0cm9rZSxuLmZpbGxlZD1pLmZpbGwsaS5zdHJva2U/KHR8fCh0PXRoaXMuX3N0cm9rZT10aGlzLl9jcmVhdGVFbGVtZW50KCJzdHJva2UiKSx0LmVuZGNhcD0icm91bmQiLG4uYXBwZW5kQ2hpbGQodCkpLHQud2VpZ2h0PWkud2VpZ2h0KyJweCIsdC5jb2xvcj1pLmNvbG9yLHQub3BhY2l0eT1pLm9wYWNpdHksaS5kYXNoQXJyYXk/dC5kYXNoU3R5bGU9by5VdGlsLmlzQXJyYXkoaS5kYXNoQXJyYXkpP2kuZGFzaEFycmF5LmpvaW4oIiAiKTppLmRhc2hBcnJheS5yZXBsYWNlKC8oICosICopL2csIiAiKTp0LmRhc2hTdHlsZT0iIixpLmxpbmVDYXAmJih0LmVuZGNhcD1pLmxpbmVDYXAucmVwbGFjZSgiYnV0dCIsImZsYXQiKSksaS5saW5lSm9pbiYmKHQuam9pbnN0eWxlPWkubGluZUpvaW4pKTp0JiYobi5yZW1vdmVDaGlsZCh0KSx0aGlzLl9zdHJva2U9bnVsbCksaS5maWxsPyhlfHwoZT10aGlzLl9maWxsPXRoaXMuX2NyZWF0ZUVsZW1lbnQoImZpbGwiKSxuLmFwcGVuZENoaWxkKGUpKSxlLmNvbG9yPWkuZmlsbENvbG9yfHxpLmNvbG9yLGUub3BhY2l0eT1pLmZpbGxPcGFjaXR5KTplJiYobi5yZW1vdmVDaGlsZChlKSx0aGlzLl9maWxsPW51bGwpfSxfdXBkYXRlUGF0aDpmdW5jdGlvbigpe3ZhciB0PXRoaXMuX2NvbnRhaW5lci5zdHlsZTt0LmRpc3BsYXk9Im5vbmUiLHRoaXMuX3BhdGgudj10aGlzLmdldFBhdGhTdHJpbmcoKSsiICIsdC5kaXNwbGF5PSIifX0pLG8uTWFwLmluY2x1ZGUoby5Ccm93c2VyLnN2Z3x8IW8uQnJvd3Nlci52bWw/e306e19pbml0UGF0aFJvb3Q6ZnVuY3Rpb24oKXtpZighdGhpcy5fcGF0aFJvb3Qpe3ZhciB0PXRoaXMuX3BhdGhSb290PWUuY3JlYXRlRWxlbWVudCgiZGl2Iik7dC5jbGFzc05hbWU9ImxlYWZsZXQtdm1sLWNvbnRhaW5lciIsdGhpcy5fcGFuZXMub3ZlcmxheVBhbmUuYXBwZW5kQ2hpbGQodCksdGhpcy5vbigibW92ZWVuZCIsdGhpcy5fdXBkYXRlUGF0aFZpZXdwb3J0KSx0aGlzLl91cGRhdGVQYXRoVmlld3BvcnQoKX19fSksby5Ccm93c2VyLmNhbnZhcz1mdW5jdGlvbigpe3JldHVybiEhZS5jcmVhdGVFbGVtZW50KCJjYW52YXMiKS5nZXRDb250ZXh0fSgpLG8uUGF0aD1vLlBhdGguU1ZHJiYhdC5MX1BSRUZFUl9DQU5WQVN8fCFvLkJyb3dzZXIuY2FudmFzP28uUGF0aDpvLlBhdGguZXh0ZW5kKHtzdGF0aWNzOntDQU5WQVM6ITAsU1ZHOiExfSxyZWRyYXc6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fbWFwJiYodGhpcy5wcm9qZWN0TGF0bG5ncygpLHRoaXMuX3JlcXVlc3RVcGRhdGUoKSksdGhpc30sc2V0U3R5bGU6ZnVuY3Rpb24odCl7cmV0dXJuIG8uc2V0T3B0aW9ucyh0aGlzLHQpLHRoaXMuX2FkZExpbmVEYXNoKCksdGhpcy5fbWFwJiYodGhpcy5fdXBkYXRlU3R5bGUoKSx0aGlzLl9yZXF1ZXN0VXBkYXRlKCkpLHRoaXN9LG9uUmVtb3ZlOmZ1bmN0aW9uKHQpe3Qub2ZmKCJ2aWV3cmVzZXQiLHRoaXMucHJvamVjdExhdGxuZ3MsdGhpcykub2ZmKCJtb3ZlZW5kIix0aGlzLl91cGRhdGVQYXRoLHRoaXMpLHRoaXMub3B0aW9ucy5jbGlja2FibGUmJnRoaXMuX29uQ2xpY2shPT1pJiYodGhpcy5fbWFwLm9mZigiY2xpY2siLHRoaXMuX29uQ2xpY2ssdGhpcyksdGhpcy5fbWFwLm9mZigibW91c2Vtb3ZlIix0aGlzLl9vbk1vdXNlTW92ZSx0aGlzKSksdGhpcy5fcmVxdWVzdFVwZGF0ZSgpLHRoaXMuZmlyZSgicmVtb3ZlIiksdGhpcy5fbWFwPW51bGx9LF9yZXF1ZXN0VXBkYXRlOmZ1bmN0aW9uKCl7dGhpcy5fbWFwJiYhby5QYXRoLl91cGRhdGVSZXF1ZXN0JiYoby5QYXRoLl91cGRhdGVSZXF1ZXN0PW8uVXRpbC5yZXF1ZXN0QW5pbUZyYW1lKHRoaXMuX2ZpcmVNYXBNb3ZlRW5kLHRoaXMuX21hcCkpfSxfZmlyZU1hcE1vdmVFbmQ6ZnVuY3Rpb24oKXtvLlBhdGguX3VwZGF0ZVJlcXVlc3Q9bnVsbCx0aGlzLmZpcmUoIm1vdmVlbmQiKX0sX2luaXRFbGVtZW50czpmdW5jdGlvbigpe3RoaXMuX21hcC5faW5pdFBhdGhSb290KCksdGhpcy5fY3R4PXRoaXMuX21hcC5fY2FudmFzQ3R4fSxfYWRkTGluZURhc2g6ZnVuY3Rpb24oKXt0aGlzLm9wdGlvbnMuZGFzaEFycmF5JiYodGhpcy5vcHRpb25zLl9kYXNoQXJyYXk9dGhpcy5vcHRpb25zLmRhc2hBcnJheS5zcGxpdCgiLCIpLm1hcChOdW1iZXIpKX0sX3VwZGF0ZVN0eWxlOmZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5vcHRpb25zO3Quc3Ryb2tlJiYodGhpcy5fY3R4LmxpbmVXaWR0aD10LndlaWdodCx0aGlzLl9jdHguc3Ryb2tlU3R5bGU9dC5jb2xvciksdC5maWxsJiYodGhpcy5fY3R4LmZpbGxTdHlsZT10LmZpbGxDb2xvcnx8dC5jb2xvciksdC5saW5lQ2FwJiYodGhpcy5fY3R4LmxpbmVDYXA9dC5saW5lQ2FwKSx0LmxpbmVKb2luJiYodGhpcy5fY3R4LmxpbmVKb2luPXQubGluZUpvaW4pLHRoaXMuX2FkZExpbmVEYXNoKCl9LF9kcmF3UGF0aDpmdW5jdGlvbigpe3ZhciB0LGUsaSxuLHMsYTtmb3IodGhpcy5fY3R4LmJlZ2luUGF0aCgpLHRoaXMuX2N0eC5zZXRMaW5lRGFzaCh0aGlzLm9wdGlvbnMmJnRoaXMub3B0aW9ucy5fZGFzaEFycmF5fHxbXSksdD0wLGk9dGhpcy5fcGFydHMubGVuZ3RoO2k+dDt0Kyspe2ZvcihlPTAsbj10aGlzLl9wYXJ0c1t0XS5sZW5ndGg7bj5lO2UrKylzPXRoaXMuX3BhcnRzW3RdW2VdLGE9KDA9PT1lPyJtb3ZlIjoibGluZSIpKyJUbyIsdGhpcy5fY3R4W2FdKHMueCxzLnkpO3RoaXMgaW5zdGFuY2VvZiBvLlBvbHlnb24mJnRoaXMuX2N0eC5jbG9zZVBhdGgoKX19LF9jaGVja0lmRW1wdHk6ZnVuY3Rpb24oKXtyZXR1cm4hdGhpcy5fcGFydHMubGVuZ3RofSxfdXBkYXRlUGF0aDpmdW5jdGlvbigpe2lmKCF0aGlzLl9jaGVja0lmRW1wdHkoKSl7dmFyIHQ9dGhpcy5fY3R4LGU9dGhpcy5vcHRpb25zO3RoaXMuX2RyYXdQYXRoKCksdC5zYXZlKCksdGhpcy5fdXBkYXRlU3R5bGUoKSxlLmZpbGwmJih0Lmdsb2JhbEFscGhhPWUuZmlsbE9wYWNpdHksdC5maWxsKGUuZmlsbFJ1bGV8fCJldmVub2RkIikpLGUuc3Ryb2tlJiYodC5nbG9iYWxBbHBoYT1lLm9wYWNpdHksdC5zdHJva2UoKSksdC5yZXN0b3JlKCl9fSxfaW5pdEV2ZW50czpmdW5jdGlvbigpe3RoaXMub3B0aW9ucy5jbGlja2FibGUmJih0aGlzLl9tYXAub24oIm1vdXNlbW92ZSIsdGhpcy5fb25Nb3VzZU1vdmUsdGhpcyksdGhpcy5fbWFwLm9uKCJjbGljayBkYmxjbGljayBjb250ZXh0bWVudSIsdGhpcy5fZmlyZU1vdXNlRXZlbnQsdGhpcykpfSxfZmlyZU1vdXNlRXZlbnQ6ZnVuY3Rpb24odCl7dGhpcy5fY29udGFpbnNQb2ludCh0LmxheWVyUG9pbnQpJiZ0aGlzLmZpcmUodC50eXBlLHQpfSxfb25Nb3VzZU1vdmU6ZnVuY3Rpb24odCl7dGhpcy5fbWFwJiYhdGhpcy5fbWFwLl9hbmltYXRpbmdab29tJiYodGhpcy5fY29udGFpbnNQb2ludCh0LmxheWVyUG9pbnQpPyh0aGlzLl9jdHguY2FudmFzLnN0eWxlLmN1cnNvcj0icG9pbnRlciIsdGhpcy5fbW91c2VJbnNpZGU9ITAsdGhpcy5maXJlKCJtb3VzZW92ZXIiLHQpKTp0aGlzLl9tb3VzZUluc2lkZSYmKHRoaXMuX2N0eC5jYW52YXMuc3R5bGUuY3Vyc29yPSIiLHRoaXMuX21vdXNlSW5zaWRlPSExLHRoaXMuZmlyZSgibW91c2VvdXQiLHQpKSl9fSksby5NYXAuaW5jbHVkZShvLlBhdGguU1ZHJiYhdC5MX1BSRUZFUl9DQU5WQVN8fCFvLkJyb3dzZXIuY2FudmFzP3t9OntfaW5pdFBhdGhSb290OmZ1bmN0aW9uKCl7dmFyIHQsaT10aGlzLl9wYXRoUm9vdDtpfHwoaT10aGlzLl9wYXRoUm9vdD1lLmNyZWF0ZUVsZW1lbnQoImNhbnZhcyIpLGkuc3R5bGUucG9zaXRpb249ImFic29sdXRlIix0PXRoaXMuX2NhbnZhc0N0eD1pLmdldENvbnRleHQoIjJkIiksdC5saW5lQ2FwPSJyb3VuZCIsdC5saW5lSm9pbj0icm91bmQiLHRoaXMuX3BhbmVzLm92ZXJsYXlQYW5lLmFwcGVuZENoaWxkKGkpLHRoaXMub3B0aW9ucy56b29tQW5pbWF0aW9uJiYodGhpcy5fcGF0aFJvb3QuY2xhc3NOYW1lPSJsZWFmbGV0LXpvb20tYW5pbWF0ZWQiLHRoaXMub24oInpvb21hbmltIix0aGlzLl9hbmltYXRlUGF0aFpvb20pLHRoaXMub24oInpvb21lbmQiLHRoaXMuX2VuZFBhdGhab29tKSksdGhpcy5vbigibW92ZWVuZCIsdGhpcy5fdXBkYXRlQ2FudmFzVmlld3BvcnQpLHRoaXMuX3VwZGF0ZUNhbnZhc1ZpZXdwb3J0KCkpfSxfdXBkYXRlQ2FudmFzVmlld3BvcnQ6ZnVuY3Rpb24oKXtpZighdGhpcy5fcGF0aFpvb21pbmcpe3RoaXMuX3VwZGF0ZVBhdGhWaWV3cG9ydCgpO3ZhciB0PXRoaXMuX3BhdGhWaWV3cG9ydCxlPXQubWluLGk9dC5tYXguc3VidHJhY3QoZSksbj10aGlzLl9wYXRoUm9vdDtvLkRvbVV0aWwuc2V0UG9zaXRpb24obixlKSxuLndpZHRoPWkueCxuLmhlaWdodD1pLnksbi5nZXRDb250ZXh0KCIyZCIpLnRyYW5zbGF0ZSgtZS54LC1lLnkpfX19KSxvLkxpbmVVdGlsPXtzaW1wbGlmeTpmdW5jdGlvbih0LGUpe2lmKCFlfHwhdC5sZW5ndGgpcmV0dXJuIHQuc2xpY2UoKTt2YXIgaT1lKmU7cmV0dXJuIHQ9dGhpcy5fcmVkdWNlUG9pbnRzKHQsaSksdD10aGlzLl9zaW1wbGlmeURQKHQsaSl9LHBvaW50VG9TZWdtZW50RGlzdGFuY2U6ZnVuY3Rpb24odCxlLGkpe3JldHVybiBNYXRoLnNxcnQodGhpcy5fc3FDbG9zZXN0UG9pbnRPblNlZ21lbnQodCxlLGksITApKX0sY2xvc2VzdFBvaW50T25TZWdtZW50OmZ1bmN0aW9uKHQsZSxpKXtyZXR1cm4gdGhpcy5fc3FDbG9zZXN0UG9pbnRPblNlZ21lbnQodCxlLGkpfSxfc2ltcGxpZnlEUDpmdW5jdGlvbih0LGUpe3ZhciBuPXQubGVuZ3RoLG89dHlwZW9mIFVpbnQ4QXJyYXkhPWkrIiI/VWludDhBcnJheTpBcnJheSxzPW5ldyBvKG4pO3NbMF09c1tuLTFdPTEsdGhpcy5fc2ltcGxpZnlEUFN0ZXAodCxzLGUsMCxuLTEpO3ZhciBhLHI9W107Zm9yKGE9MDtuPmE7YSsrKXNbYV0mJnIucHVzaCh0W2FdKTtyZXR1cm4gcn0sX3NpbXBsaWZ5RFBTdGVwOmZ1bmN0aW9uKHQsZSxpLG4sbyl7dmFyIHMsYSxyLGg9MDtmb3IoYT1uKzE7by0xPj1hO2ErKylyPXRoaXMuX3NxQ2xvc2VzdFBvaW50T25TZWdtZW50KHRbYV0sdFtuXSx0W29dLCEwKSxyPmgmJihzPWEsaD1yKTtoPmkmJihlW3NdPTEsdGhpcy5fc2ltcGxpZnlEUFN0ZXAodCxlLGksbixzKSx0aGlzLl9zaW1wbGlmeURQU3RlcCh0LGUsaSxzLG8pKX0sX3JlZHVjZVBvaW50czpmdW5jdGlvbih0LGUpe2Zvcih2YXIgaT1bdFswXV0sbj0xLG89MCxzPXQubGVuZ3RoO3M+bjtuKyspdGhpcy5fc3FEaXN0KHRbbl0sdFtvXSk+ZSYmKGkucHVzaCh0W25dKSxvPW4pO3JldHVybiBzLTE+byYmaS5wdXNoKHRbcy0xXSksaX0sY2xpcFNlZ21lbnQ6ZnVuY3Rpb24odCxlLGksbil7dmFyIG8scyxhLHI9bj90aGlzLl9sYXN0Q29kZTp0aGlzLl9nZXRCaXRDb2RlKHQsaSksaD10aGlzLl9nZXRCaXRDb2RlKGUsaSk7Zm9yKHRoaXMuX2xhc3RDb2RlPWg7Oyl7aWYoIShyfGgpKXJldHVyblt0LGVdO2lmKHImaClyZXR1cm4hMTtvPXJ8fGgscz10aGlzLl9nZXRFZGdlSW50ZXJzZWN0aW9uKHQsZSxvLGkpLGE9dGhpcy5fZ2V0Qml0Q29kZShzLGkpLG89PT1yPyh0PXMscj1hKTooZT1zLGg9YSl9fSxfZ2V0RWRnZUludGVyc2VjdGlvbjpmdW5jdGlvbih0LGUsaSxuKXt2YXIgcz1lLngtdC54LGE9ZS55LXQueSxyPW4ubWluLGg9bi5tYXg7cmV0dXJuIDgmaT9uZXcgby5Qb2ludCh0LngrcyooaC55LXQueSkvYSxoLnkpOjQmaT9uZXcgby5Qb2ludCh0Lngrcyooci55LXQueSkvYSxyLnkpOjImaT9uZXcgby5Qb2ludChoLngsdC55K2EqKGgueC10LngpL3MpOjEmaT9uZXcgby5Qb2ludChyLngsdC55K2EqKHIueC10LngpL3MpOnZvaWQgMH0sX2dldEJpdENvZGU6ZnVuY3Rpb24odCxlKXt2YXIgaT0wO3JldHVybiB0Lng8ZS5taW4ueD9pfD0xOnQueD5lLm1heC54JiYoaXw9MiksdC55PGUubWluLnk/aXw9NDp0Lnk+ZS5tYXgueSYmKGl8PTgpLGl9LF9zcURpc3Q6ZnVuY3Rpb24odCxlKXt2YXIgaT1lLngtdC54LG49ZS55LXQueTtyZXR1cm4gaSppK24qbn0sX3NxQ2xvc2VzdFBvaW50T25TZWdtZW50OmZ1bmN0aW9uKHQsZSxpLG4pe3ZhciBzLGE9ZS54LHI9ZS55LGg9aS54LWEsbD1pLnktcix1PWgqaCtsKmw7cmV0dXJuIHU+MCYmKHM9KCh0LngtYSkqaCsodC55LXIpKmwpL3Uscz4xPyhhPWkueCxyPWkueSk6cz4wJiYoYSs9aCpzLHIrPWwqcykpLGg9dC54LWEsbD10LnktcixuP2gqaCtsKmw6bmV3IG8uUG9pbnQoYSxyKX19LG8uUG9seWxpbmU9by5QYXRoLmV4dGVuZCh7aW5pdGlhbGl6ZTpmdW5jdGlvbih0LGUpe28uUGF0aC5wcm90b3R5cGUuaW5pdGlhbGl6ZS5jYWxsKHRoaXMsZSksdGhpcy5fbGF0bG5ncz10aGlzLl9jb252ZXJ0TGF0TG5ncyh0KX0sb3B0aW9uczp7c21vb3RoRmFjdG9yOjEsbm9DbGlwOiExfSxwcm9qZWN0TGF0bG5nczpmdW5jdGlvbigpe3RoaXMuX29yaWdpbmFsUG9pbnRzPVtdO2Zvcih2YXIgdD0wLGU9dGhpcy5fbGF0bG5ncy5sZW5ndGg7ZT50O3QrKyl0aGlzLl9vcmlnaW5hbFBvaW50c1t0XT10aGlzLl9tYXAubGF0TG5nVG9MYXllclBvaW50KHRoaXMuX2xhdGxuZ3NbdF0pfSxnZXRQYXRoU3RyaW5nOmZ1bmN0aW9uKCl7Zm9yKHZhciB0PTAsZT10aGlzLl9wYXJ0cy5sZW5ndGgsaT0iIjtlPnQ7dCsrKWkrPXRoaXMuX2dldFBhdGhQYXJ0U3RyKHRoaXMuX3BhcnRzW3RdKTtyZXR1cm4gaX0sZ2V0TGF0TG5nczpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9sYXRsbmdzfSxzZXRMYXRMbmdzOmZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLl9sYXRsbmdzPXRoaXMuX2NvbnZlcnRMYXRMbmdzKHQpLHRoaXMucmVkcmF3KCl9LGFkZExhdExuZzpmdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5fbGF0bG5ncy5wdXNoKG8ubGF0TG5nKHQpKSx0aGlzLnJlZHJhdygpfSxzcGxpY2VMYXRMbmdzOmZ1bmN0aW9uKCl7dmFyIHQ9W10uc3BsaWNlLmFwcGx5KHRoaXMuX2xhdGxuZ3MsYXJndW1lbnRzKTtyZXR1cm4gdGhpcy5fY29udmVydExhdExuZ3ModGhpcy5fbGF0bG5ncywhMCksdGhpcy5yZWRyYXcoKSx0fSxjbG9zZXN0TGF5ZXJQb2ludDpmdW5jdGlvbih0KXtmb3IodmFyIGUsaSxuPTEvMCxzPXRoaXMuX3BhcnRzLGE9bnVsbCxyPTAsaD1zLmxlbmd0aDtoPnI7cisrKWZvcih2YXIgbD1zW3JdLHU9MSxjPWwubGVuZ3RoO2M+dTt1Kyspe2U9bFt1LTFdLGk9bFt1XTt2YXIgZD1vLkxpbmVVdGlsLl9zcUNsb3Nlc3RQb2ludE9uU2VnbWVudCh0LGUsaSwhMCk7bj5kJiYobj1kLGE9by5MaW5lVXRpbC5fc3FDbG9zZXN0UG9pbnRPblNlZ21lbnQodCxlLGkpKX1yZXR1cm4gYSYmKGEuZGlzdGFuY2U9TWF0aC5zcXJ0KG4pKSxhfSxnZXRCb3VuZHM6ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IG8uTGF0TG5nQm91bmRzKHRoaXMuZ2V0TGF0TG5ncygpKX0sX2NvbnZlcnRMYXRMbmdzOmZ1bmN0aW9uKHQsZSl7dmFyIGksbixzPWU/dDpbXTtmb3IoaT0wLG49dC5sZW5ndGg7bj5pO2krKyl7aWYoby5VdGlsLmlzQXJyYXkodFtpXSkmJiJudW1iZXIiIT10eXBlb2YgdFtpXVswXSlyZXR1cm47c1tpXT1vLmxhdExuZyh0W2ldKX1yZXR1cm4gc30sX2luaXRFdmVudHM6ZnVuY3Rpb24oKXtvLlBhdGgucHJvdG90eXBlLl9pbml0RXZlbnRzLmNhbGwodGhpcyl9LF9nZXRQYXRoUGFydFN0cjpmdW5jdGlvbih0KXtmb3IodmFyIGUsaT1vLlBhdGguVk1MLG49MCxzPXQubGVuZ3RoLGE9IiI7cz5uO24rKyllPXRbbl0saSYmZS5fcm91bmQoKSxhKz0obj8iTCI6Ik0iKStlLngrIiAiK2UueTtyZXR1cm4gYX0sX2NsaXBQb2ludHM6ZnVuY3Rpb24oKXt2YXIgdCxlLGksbj10aGlzLl9vcmlnaW5hbFBvaW50cyxzPW4ubGVuZ3RoO2lmKHRoaXMub3B0aW9ucy5ub0NsaXApcmV0dXJuIHZvaWQodGhpcy5fcGFydHM9W25dKTt0aGlzLl9wYXJ0cz1bXTt2YXIgYT10aGlzLl9wYXJ0cyxyPXRoaXMuX21hcC5fcGF0aFZpZXdwb3J0LGg9by5MaW5lVXRpbDtmb3IodD0wLGU9MDtzLTE+dDt0KyspaT1oLmNsaXBTZWdtZW50KG5bdF0sblt0KzFdLHIsdCksaSYmKGFbZV09YVtlXXx8W10sYVtlXS5wdXNoKGlbMF0pLChpWzFdIT09blt0KzFdfHx0PT09cy0yKSYmKGFbZV0ucHVzaChpWzFdKSxlKyspKX0sX3NpbXBsaWZ5UG9pbnRzOmZ1bmN0aW9uKCl7Zm9yKHZhciB0PXRoaXMuX3BhcnRzLGU9by5MaW5lVXRpbCxpPTAsbj10Lmxlbmd0aDtuPmk7aSsrKXRbaV09ZS5zaW1wbGlmeSh0W2ldLHRoaXMub3B0aW9ucy5zbW9vdGhGYWN0b3IpfSxfdXBkYXRlUGF0aDpmdW5jdGlvbigpe3RoaXMuX21hcCYmKHRoaXMuX2NsaXBQb2ludHMoKSx0aGlzLl9zaW1wbGlmeVBvaW50cygpLG8uUGF0aC5wcm90b3R5cGUuX3VwZGF0ZVBhdGguY2FsbCh0aGlzKSl9fSksby5wb2x5bGluZT1mdW5jdGlvbih0LGUpe3JldHVybiBuZXcgby5Qb2x5bGluZSh0LGUpfSxvLlBvbHlVdGlsPXt9LG8uUG9seVV0aWwuY2xpcFBvbHlnb249ZnVuY3Rpb24odCxlKXt2YXIgaSxuLHMsYSxyLGgsbCx1LGMsZD1bMSw0LDIsOF0scD1vLkxpbmVVdGlsO2ZvcihuPTAsbD10Lmxlbmd0aDtsPm47bisrKXRbbl0uX2NvZGU9cC5fZ2V0Qml0Q29kZSh0W25dLGUpO2ZvcihhPTA7ND5hO2ErKyl7Zm9yKHU9ZFthXSxpPVtdLG49MCxsPXQubGVuZ3RoLHM9bC0xO2w+bjtzPW4rKylyPXRbbl0saD10W3NdLHIuX2NvZGUmdT9oLl9jb2RlJnV8fChjPXAuX2dldEVkZ2VJbnRlcnNlY3Rpb24oaCxyLHUsZSksYy5fY29kZT1wLl9nZXRCaXRDb2RlKGMsZSksaS5wdXNoKGMpKTooaC5fY29kZSZ1JiYoYz1wLl9nZXRFZGdlSW50ZXJzZWN0aW9uKGgscix1LGUpLGMuX2NvZGU9cC5fZ2V0Qml0Q29kZShjLGUpLGkucHVzaChjKSksaS5wdXNoKHIpKTt0PWl9cmV0dXJuIHR9LG8uUG9seWdvbj1vLlBvbHlsaW5lLmV4dGVuZCh7b3B0aW9uczp7ZmlsbDohMH0saW5pdGlhbGl6ZTpmdW5jdGlvbih0LGUpe28uUG9seWxpbmUucHJvdG90eXBlLmluaXRpYWxpemUuY2FsbCh0aGlzLHQsZSksdGhpcy5faW5pdFdpdGhIb2xlcyh0KX0sX2luaXRXaXRoSG9sZXM6ZnVuY3Rpb24odCl7dmFyIGUsaSxuO2lmKHQmJm8uVXRpbC5pc0FycmF5KHRbMF0pJiYibnVtYmVyIiE9dHlwZW9mIHRbMF1bMF0pZm9yKHRoaXMuX2xhdGxuZ3M9dGhpcy5fY29udmVydExhdExuZ3ModFswXSksdGhpcy5faG9sZXM9dC5zbGljZSgxKSxlPTAsaT10aGlzLl9ob2xlcy5sZW5ndGg7aT5lO2UrKyluPXRoaXMuX2hvbGVzW2VdPXRoaXMuX2NvbnZlcnRMYXRMbmdzKHRoaXMuX2hvbGVzW2VdKSxuWzBdLmVxdWFscyhuW24ubGVuZ3RoLTFdKSYmbi5wb3AoKTt0PXRoaXMuX2xhdGxuZ3MsdC5sZW5ndGg+PTImJnRbMF0uZXF1YWxzKHRbdC5sZW5ndGgtMV0pJiZ0LnBvcCgpfSxwcm9qZWN0TGF0bG5nczpmdW5jdGlvbigpe2lmKG8uUG9seWxpbmUucHJvdG90eXBlLnByb2plY3RMYXRsbmdzLmNhbGwodGhpcyksdGhpcy5faG9sZVBvaW50cz1bXSx0aGlzLl9ob2xlcyl7dmFyIHQsZSxpLG47Zm9yKHQ9MCxpPXRoaXMuX2hvbGVzLmxlbmd0aDtpPnQ7dCsrKWZvcih0aGlzLl9ob2xlUG9pbnRzW3RdPVtdLGU9MCxuPXRoaXMuX2hvbGVzW3RdLmxlbmd0aDtuPmU7ZSsrKXRoaXMuX2hvbGVQb2ludHNbdF1bZV09dGhpcy5fbWFwLmxhdExuZ1RvTGF5ZXJQb2ludCh0aGlzLl9ob2xlc1t0XVtlXSl9fSxzZXRMYXRMbmdzOmZ1bmN0aW9uKHQpe3JldHVybiB0JiZvLlV0aWwuaXNBcnJheSh0WzBdKSYmIm51bWJlciIhPXR5cGVvZiB0WzBdWzBdPyh0aGlzLl9pbml0V2l0aEhvbGVzKHQpLHRoaXMucmVkcmF3KCkpOm8uUG9seWxpbmUucHJvdG90eXBlLnNldExhdExuZ3MuY2FsbCh0aGlzLHQpfSxfY2xpcFBvaW50czpmdW5jdGlvbigpe3ZhciB0PXRoaXMuX29yaWdpbmFsUG9pbnRzLGU9W107aWYodGhpcy5fcGFydHM9W3RdLmNvbmNhdCh0aGlzLl9ob2xlUG9pbnRzKSwhdGhpcy5vcHRpb25zLm5vQ2xpcCl7Zm9yKHZhciBpPTAsbj10aGlzLl9wYXJ0cy5sZW5ndGg7bj5pO2krKyl7dmFyIHM9by5Qb2x5VXRpbC5jbGlwUG9seWdvbih0aGlzLl9wYXJ0c1tpXSx0aGlzLl9tYXAuX3BhdGhWaWV3cG9ydCk7cy5sZW5ndGgmJmUucHVzaChzKX10aGlzLl9wYXJ0cz1lfX0sX2dldFBhdGhQYXJ0U3RyOmZ1bmN0aW9uKHQpe3ZhciBlPW8uUG9seWxpbmUucHJvdG90eXBlLl9nZXRQYXRoUGFydFN0ci5jYWxsKHRoaXMsdCk7cmV0dXJuIGUrKG8uQnJvd3Nlci5zdmc/InoiOiJ4Iil9fSksby5wb2x5Z29uPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIG5ldyBvLlBvbHlnb24odCxlKX0sZnVuY3Rpb24oKXtmdW5jdGlvbiB0KHQpe3JldHVybiBvLkZlYXR1cmVHcm91cC5leHRlbmQoe2luaXRpYWxpemU6ZnVuY3Rpb24odCxlKXt0aGlzLl9sYXllcnM9e30sdGhpcy5fb3B0aW9ucz1lLHRoaXMuc2V0TGF0TG5ncyh0KX0sc2V0TGF0TG5nczpmdW5jdGlvbihlKXt2YXIgaT0wLG49ZS5sZW5ndGg7Zm9yKHRoaXMuZWFjaExheWVyKGZ1bmN0aW9uKHQpe24+aT90LnNldExhdExuZ3MoZVtpKytdKTp0aGlzLnJlbW92ZUxheWVyKHQpfSx0aGlzKTtuPmk7KXRoaXMuYWRkTGF5ZXIobmV3IHQoZVtpKytdLHRoaXMuX29wdGlvbnMpKTtyZXR1cm4gdGhpc30sZ2V0TGF0TG5nczpmdW5jdGlvbigpe3ZhciB0PVtdO3JldHVybiB0aGlzLmVhY2hMYXllcihmdW5jdGlvbihlKXt0LnB1c2goZS5nZXRMYXRMbmdzKCkpfSksdH19KX1vLk11bHRpUG9seWxpbmU9dChvLlBvbHlsaW5lKSxvLk11bHRpUG9seWdvbj10KG8uUG9seWdvbiksby5tdWx0aVBvbHlsaW5lPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIG5ldyBvLk11bHRpUG9seWxpbmUodCxlKX0sby5tdWx0aVBvbHlnb249ZnVuY3Rpb24odCxlKXtyZXR1cm4gbmV3IG8uTXVsdGlQb2x5Z29uKHQsZSl9fSgpLG8uUmVjdGFuZ2xlPW8uUG9seWdvbi5leHRlbmQoe2luaXRpYWxpemU6ZnVuY3Rpb24odCxlKXtvLlBvbHlnb24ucHJvdG90eXBlLmluaXRpYWxpemUuY2FsbCh0aGlzLHRoaXMuX2JvdW5kc1RvTGF0TG5ncyh0KSxlKX0sc2V0Qm91bmRzOmZ1bmN0aW9uKHQpe3RoaXMuc2V0TGF0TG5ncyh0aGlzLl9ib3VuZHNUb0xhdExuZ3ModCkpfSxfYm91bmRzVG9MYXRMbmdzOmZ1bmN0aW9uKHQpe3JldHVybiB0PW8ubGF0TG5nQm91bmRzKHQpLFt0LmdldFNvdXRoV2VzdCgpLHQuZ2V0Tm9ydGhXZXN0KCksdC5nZXROb3J0aEVhc3QoKSx0LmdldFNvdXRoRWFzdCgpXX19KSxvLnJlY3RhbmdsZT1mdW5jdGlvbih0LGUpe3JldHVybiBuZXcgby5SZWN0YW5nbGUodCxlKX0sby5DaXJjbGU9by5QYXRoLmV4dGVuZCh7aW5pdGlhbGl6ZTpmdW5jdGlvbih0LGUsaSl7aWYoby5QYXRoLnByb3RvdHlwZS5pbml0aWFsaXplLmNhbGwodGhpcyxpKSxpc05hTihlKSl0aHJvdyBuZXcgRXJyb3IoIkNpcmNsZSByYWRpdXMgY2Fubm90IGJlIE5hTiIpO3RoaXMuX2xhdGxuZz1vLmxhdExuZyh0KSx0aGlzLl9tUmFkaXVzPWV9LG9wdGlvbnM6e2ZpbGw6ITB9LHNldExhdExuZzpmdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5fbGF0bG5nPW8ubGF0TG5nKHQpLHRoaXMucmVkcmF3KCl9LHNldFJhZGl1czpmdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5fbVJhZGl1cz10LHRoaXMucmVkcmF3KCl9LHByb2plY3RMYXRsbmdzOmZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5fZ2V0TG5nUmFkaXVzKCksZT10aGlzLl9sYXRsbmcsaT10aGlzLl9tYXAubGF0TG5nVG9MYXllclBvaW50KFtlLmxhdCxlLmxuZy10XSk7dGhpcy5fcG9pbnQ9dGhpcy5fbWFwLmxhdExuZ1RvTGF5ZXJQb2ludChlKSx0aGlzLl9yYWRpdXM9TWF0aC5tYXgodGhpcy5fcG9pbnQueC1pLngsMSl9LGdldEJvdW5kczpmdW5jdGlvbigpe3ZhciB0PXRoaXMuX2dldExuZ1JhZGl1cygpLGU9dGhpcy5fbVJhZGl1cy80MDA3NTAxNyozNjAsaT10aGlzLl9sYXRsbmc7cmV0dXJuIG5ldyBvLkxhdExuZ0JvdW5kcyhbaS5sYXQtZSxpLmxuZy10XSxbaS5sYXQrZSxpLmxuZyt0XSl9LGdldExhdExuZzpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9sYXRsbmd9LGdldFBhdGhTdHJpbmc6ZnVuY3Rpb24oKXt2YXIgdD10aGlzLl9wb2ludCxlPXRoaXMuX3JhZGl1cztyZXR1cm4gdGhpcy5fY2hlY2tJZkVtcHR5KCk/IiI6by5Ccm93c2VyLnN2Zz8iTSIrdC54KyIsIisodC55LWUpKyJBIitlKyIsIitlKyIsMCwxLDEsIisodC54LS4xKSsiLCIrKHQueS1lKSsiIHoiOih0Ll9yb3VuZCgpLGU9TWF0aC5yb3VuZChlKSwiQUwgIit0LngrIiwiK3QueSsiICIrZSsiLCIrZSsiIDAsMjM1OTI2MDAiKX0sZ2V0UmFkaXVzOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX21SYWRpdXN9LF9nZXRMYXRSYWRpdXM6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fbVJhZGl1cy80MDA3NTAxNyozNjB9LF9nZXRMbmdSYWRpdXM6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fZ2V0TGF0UmFkaXVzKCkvTWF0aC5jb3Moby5MYXRMbmcuREVHX1RPX1JBRCp0aGlzLl9sYXRsbmcubGF0KX0sX2NoZWNrSWZFbXB0eTpmdW5jdGlvbigpe2lmKCF0aGlzLl9tYXApcmV0dXJuITE7dmFyIHQ9dGhpcy5fbWFwLl9wYXRoVmlld3BvcnQsZT10aGlzLl9yYWRpdXMsaT10aGlzLl9wb2ludDtyZXR1cm4gaS54LWU+dC5tYXgueHx8aS55LWU+dC5tYXgueXx8aS54K2U8dC5taW4ueHx8aS55K2U8dC5taW4ueX19KSxvLmNpcmNsZT1mdW5jdGlvbih0LGUsaSl7cmV0dXJuIG5ldyBvLkNpcmNsZSh0LGUsaSl9LG8uQ2lyY2xlTWFya2VyPW8uQ2lyY2xlLmV4dGVuZCh7b3B0aW9uczp7cmFkaXVzOjEwLHdlaWdodDoyfSxpbml0aWFsaXplOmZ1bmN0aW9uKHQsZSl7by5DaXJjbGUucHJvdG90eXBlLmluaXRpYWxpemUuY2FsbCh0aGlzLHQsbnVsbCxlKSx0aGlzLl9yYWRpdXM9dGhpcy5vcHRpb25zLnJhZGl1c30scHJvamVjdExhdGxuZ3M6ZnVuY3Rpb24oKXt0aGlzLl9wb2ludD10aGlzLl9tYXAubGF0TG5nVG9MYXllclBvaW50KHRoaXMuX2xhdGxuZyl9LF91cGRhdGVTdHlsZTpmdW5jdGlvbigpe28uQ2lyY2xlLnByb3RvdHlwZS5fdXBkYXRlU3R5bGUuY2FsbCh0aGlzKSx0aGlzLnNldFJhZGl1cyh0aGlzLm9wdGlvbnMucmFkaXVzKX0sc2V0TGF0TG5nOmZ1bmN0aW9uKHQpe3JldHVybiBvLkNpcmNsZS5wcm90b3R5cGUuc2V0TGF0TG5nLmNhbGwodGhpcyx0KSx0aGlzLl9wb3B1cCYmdGhpcy5fcG9wdXAuX2lzT3BlbiYmdGhpcy5fcG9wdXAuc2V0TGF0TG5nKHQpLHRoaXN9LHNldFJhZGl1czpmdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5vcHRpb25zLnJhZGl1cz10aGlzLl9yYWRpdXM9dCx0aGlzLnJlZHJhdygpfSxnZXRSYWRpdXM6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fcmFkaXVzfX0pLG8uY2lyY2xlTWFya2VyPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIG5ldyBvLkNpcmNsZU1hcmtlcih0LGUpfSxvLlBvbHlsaW5lLmluY2x1ZGUoby5QYXRoLkNBTlZBUz97X2NvbnRhaW5zUG9pbnQ6ZnVuY3Rpb24odCxlKXt2YXIgaSxuLHMsYSxyLGgsbCx1PXRoaXMub3B0aW9ucy53ZWlnaHQvMjtmb3Ioby5Ccm93c2VyLnRvdWNoJiYodSs9MTApLGk9MCxhPXRoaXMuX3BhcnRzLmxlbmd0aDthPmk7aSsrKWZvcihsPXRoaXMuX3BhcnRzW2ldLG49MCxyPWwubGVuZ3RoLHM9ci0xO3I+bjtzPW4rKylpZigoZXx8MCE9PW4pJiYoaD1vLkxpbmVVdGlsLnBvaW50VG9TZWdtZW50RGlzdGFuY2UodCxsW3NdLGxbbl0pLHU+PWgpKXJldHVybiEwO3JldHVybiExfX06e30pLG8uUG9seWdvbi5pbmNsdWRlKG8uUGF0aC5DQU5WQVM/e19jb250YWluc1BvaW50OmZ1bmN0aW9uKHQpe3ZhciBlLGksbixzLGEscixoLGwsdT0hMTtpZihvLlBvbHlsaW5lLnByb3RvdHlwZS5fY29udGFpbnNQb2ludC5jYWxsKHRoaXMsdCwhMCkpcmV0dXJuITA7Zm9yKHM9MCxoPXRoaXMuX3BhcnRzLmxlbmd0aDtoPnM7cysrKWZvcihlPXRoaXMuX3BhcnRzW3NdLGE9MCxsPWUubGVuZ3RoLHI9bC0xO2w+YTtyPWErKylpPWVbYV0sbj1lW3JdLGkueT50LnkhPW4ueT50LnkmJnQueDwobi54LWkueCkqKHQueS1pLnkpLyhuLnktaS55KStpLngmJih1PSF1KTtyZXR1cm4gdX19Ont9KSxvLkNpcmNsZS5pbmNsdWRlKG8uUGF0aC5DQU5WQVM/e19kcmF3UGF0aDpmdW5jdGlvbigpe3ZhciB0PXRoaXMuX3BvaW50O3RoaXMuX2N0eC5iZWdpblBhdGgoKSx0aGlzLl9jdHguYXJjKHQueCx0LnksdGhpcy5fcmFkaXVzLDAsMipNYXRoLlBJLCExKX0sX2NvbnRhaW5zUG9pbnQ6ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5fcG9pbnQsaT10aGlzLm9wdGlvbnMuc3Ryb2tlP3RoaXMub3B0aW9ucy53ZWlnaHQvMjowO3JldHVybiB0LmRpc3RhbmNlVG8oZSk8PXRoaXMuX3JhZGl1cytpfX06e30pLG8uQ2lyY2xlTWFya2VyLmluY2x1ZGUoby5QYXRoLkNBTlZBUz97X3VwZGF0ZVN0eWxlOmZ1bmN0aW9uKCl7by5QYXRoLnByb3RvdHlwZS5fdXBkYXRlU3R5bGUuY2FsbCh0aGlzKX19Ont9KSxvLkdlb0pTT049by5GZWF0dXJlR3JvdXAuZXh0ZW5kKHtpbml0aWFsaXplOmZ1bmN0aW9uKHQsZSl7by5zZXRPcHRpb25zKHRoaXMsZSksdGhpcy5fbGF5ZXJzPXt9LHQmJnRoaXMuYWRkRGF0YSh0KX0sYWRkRGF0YTpmdW5jdGlvbih0KXt2YXIgZSxpLG4scz1vLlV0aWwuaXNBcnJheSh0KT90OnQuZmVhdHVyZXM7aWYocyl7Zm9yKGU9MCxpPXMubGVuZ3RoO2k+ZTtlKyspbj1zW2VdLChuLmdlb21ldHJpZXN8fG4uZ2VvbWV0cnl8fG4uZmVhdHVyZXN8fG4uY29vcmRpbmF0ZXMpJiZ0aGlzLmFkZERhdGEoc1tlXSk7cmV0dXJuIHRoaXN9dmFyIGE9dGhpcy5vcHRpb25zO2lmKCFhLmZpbHRlcnx8YS5maWx0ZXIodCkpe3ZhciByPW8uR2VvSlNPTi5nZW9tZXRyeVRvTGF5ZXIodCxhLnBvaW50VG9MYXllcixhLmNvb3Jkc1RvTGF0TG5nLGEpO3JldHVybiByLmZlYXR1cmU9by5HZW9KU09OLmFzRmVhdHVyZSh0KSxyLmRlZmF1bHRPcHRpb25zPXIub3B0aW9ucyx0aGlzLnJlc2V0U3R5bGUociksYS5vbkVhY2hGZWF0dXJlJiZhLm9uRWFjaEZlYXR1cmUodCxyKSx0aGlzLmFkZExheWVyKHIpfX0scmVzZXRTdHlsZTpmdW5jdGlvbih0KXt2YXIgZT10aGlzLm9wdGlvbnMuc3R5bGU7ZSYmKG8uVXRpbC5leHRlbmQodC5vcHRpb25zLHQuZGVmYXVsdE9wdGlvbnMpLHRoaXMuX3NldExheWVyU3R5bGUodCxlKSl9LHNldFN0eWxlOmZ1bmN0aW9uKHQpe3RoaXMuZWFjaExheWVyKGZ1bmN0aW9uKGUpe3RoaXMuX3NldExheWVyU3R5bGUoZSx0KX0sdGhpcyl9LF9zZXRMYXllclN0eWxlOmZ1bmN0aW9uKHQsZSl7ImZ1bmN0aW9uIj09dHlwZW9mIGUmJihlPWUodC5mZWF0dXJlKSksdC5zZXRTdHlsZSYmdC5zZXRTdHlsZShlKX19KSxvLmV4dGVuZChvLkdlb0pTT04se2dlb21ldHJ5VG9MYXllcjpmdW5jdGlvbih0LGUsaSxuKXt2YXIgcyxhLHIsaCxsPSJGZWF0dXJlIj09PXQudHlwZT90Lmdlb21ldHJ5OnQsdT1sLmNvb3JkaW5hdGVzLGM9W107c3dpdGNoKGk9aXx8dGhpcy5jb29yZHNUb0xhdExuZyxsLnR5cGUpe2Nhc2UiUG9pbnQiOnJldHVybiBzPWkodSksZT9lKHQscyk6bmV3IG8uTWFya2VyKHMpO2Nhc2UiTXVsdGlQb2ludCI6Zm9yKHI9MCxoPXUubGVuZ3RoO2g+cjtyKyspcz1pKHVbcl0pLGMucHVzaChlP2UodCxzKTpuZXcgby5NYXJrZXIocykpO3JldHVybiBuZXcgby5GZWF0dXJlR3JvdXAoYyk7Y2FzZSJMaW5lU3RyaW5nIjpyZXR1cm4gYT10aGlzLmNvb3Jkc1RvTGF0TG5ncyh1LDAsaSksbmV3IG8uUG9seWxpbmUoYSxuKTtjYXNlIlBvbHlnb24iOmlmKDI9PT11Lmxlbmd0aCYmIXVbMV0ubGVuZ3RoKXRocm93IG5ldyBFcnJvcigiSW52YWxpZCBHZW9KU09OIG9iamVjdC4iKTtyZXR1cm4gYT10aGlzLmNvb3Jkc1RvTGF0TG5ncyh1LDEsaSksbmV3IG8uUG9seWdvbihhLG4pO2Nhc2UiTXVsdGlMaW5lU3RyaW5nIjpyZXR1cm4gYT10aGlzLmNvb3Jkc1RvTGF0TG5ncyh1LDEsaSksbmV3IG8uTXVsdGlQb2x5bGluZShhLG4pO2Nhc2UiTXVsdGlQb2x5Z29uIjpyZXR1cm4gYT10aGlzLmNvb3Jkc1RvTGF0TG5ncyh1LDIsaSksbmV3IG8uTXVsdGlQb2x5Z29uKGEsbik7Y2FzZSJHZW9tZXRyeUNvbGxlY3Rpb24iOmZvcihyPTAsaD1sLmdlb21ldHJpZXMubGVuZ3RoO2g+cjtyKyspYy5wdXNoKHRoaXMuZ2VvbWV0cnlUb0xheWVyKHtnZW9tZXRyeTpsLmdlb21ldHJpZXNbcl0sdHlwZToiRmVhdHVyZSIscHJvcGVydGllczp0LnByb3BlcnRpZXN9LGUsaSxuKSk7cmV0dXJuIG5ldyBvLkZlYXR1cmVHcm91cChjKTtkZWZhdWx0OnRocm93IG5ldyBFcnJvcigiSW52YWxpZCBHZW9KU09OIG9iamVjdC4iKX19LGNvb3Jkc1RvTGF0TG5nOmZ1bmN0aW9uKHQpe3JldHVybiBuZXcgby5MYXRMbmcodFsxXSx0WzBdLHRbMl0pfSxjb29yZHNUb0xhdExuZ3M6ZnVuY3Rpb24odCxlLGkpe3ZhciBuLG8scyxhPVtdO2ZvcihvPTAscz10Lmxlbmd0aDtzPm87bysrKW49ZT90aGlzLmNvb3Jkc1RvTGF0TG5ncyh0W29dLGUtMSxpKTooaXx8dGhpcy5jb29yZHNUb0xhdExuZykodFtvXSksYS5wdXNoKG4pO3JldHVybiBhfSxsYXRMbmdUb0Nvb3JkczpmdW5jdGlvbih0KXt2YXIgZT1bdC5sbmcsdC5sYXRdO3JldHVybiB0LmFsdCE9PWkmJmUucHVzaCh0LmFsdCksZX0sbGF0TG5nc1RvQ29vcmRzOmZ1bmN0aW9uKHQpe2Zvcih2YXIgZT1bXSxpPTAsbj10Lmxlbmd0aDtuPmk7aSsrKWUucHVzaChvLkdlb0pTT04ubGF0TG5nVG9Db29yZHModFtpXSkpO3JldHVybiBlfSxnZXRGZWF0dXJlOmZ1bmN0aW9uKHQsZSl7cmV0dXJuIHQuZmVhdHVyZT9vLmV4dGVuZCh7fSx0LmZlYXR1cmUse2dlb21ldHJ5OmV9KTpvLkdlb0pTT04uYXNGZWF0dXJlKGUpfSxhc0ZlYXR1cmU6ZnVuY3Rpb24odCl7cmV0dXJuIkZlYXR1cmUiPT09dC50eXBlP3Q6e3R5cGU6IkZlYXR1cmUiLHByb3BlcnRpZXM6e30sZ2VvbWV0cnk6dH19fSk7dmFyIGE9e3RvR2VvSlNPTjpmdW5jdGlvbigpe3JldHVybiBvLkdlb0pTT04uZ2V0RmVhdHVyZSh0aGlzLHt0eXBlOiJQb2ludCIsY29vcmRpbmF0ZXM6by5HZW9KU09OLmxhdExuZ1RvQ29vcmRzKHRoaXMuZ2V0TGF0TG5nKCkpfSl9fTtvLk1hcmtlci5pbmNsdWRlKGEpLG8uQ2lyY2xlLmluY2x1ZGUoYSksby5DaXJjbGVNYXJrZXIuaW5jbHVkZShhKSxvLlBvbHlsaW5lLmluY2x1ZGUoe3RvR2VvSlNPTjpmdW5jdGlvbigpe3JldHVybiBvLkdlb0pTT04uZ2V0RmVhdHVyZSh0aGlzLHt0eXBlOiJMaW5lU3RyaW5nIixjb29yZGluYXRlczpvLkdlb0pTT04ubGF0TG5nc1RvQ29vcmRzKHRoaXMuZ2V0TGF0TG5ncygpKX0pfX0pLG8uUG9seWdvbi5pbmNsdWRlKHt0b0dlb0pTT046ZnVuY3Rpb24oKXt2YXIgdCxlLGksbj1bby5HZW9KU09OLmxhdExuZ3NUb0Nvb3Jkcyh0aGlzLmdldExhdExuZ3MoKSldO2lmKG5bMF0ucHVzaChuWzBdWzBdKSx0aGlzLl9ob2xlcylmb3IodD0wLGU9dGhpcy5faG9sZXMubGVuZ3RoO2U+dDt0KyspaT1vLkdlb0pTT04ubGF0TG5nc1RvQ29vcmRzKHRoaXMuX2hvbGVzW3RdKSxpLnB1c2goaVswXSksbi5wdXNoKGkpO3JldHVybiBvLkdlb0pTT04uZ2V0RmVhdHVyZSh0aGlzLHt0eXBlOiJQb2x5Z29uIixjb29yZGluYXRlczpufSl9fSksZnVuY3Rpb24oKXtmdW5jdGlvbiB0KHQpe3JldHVybiBmdW5jdGlvbigpe3ZhciBlPVtdO3JldHVybiB0aGlzLmVhY2hMYXllcihmdW5jdGlvbih0KXtlLnB1c2godC50b0dlb0pTT04oKS5nZW9tZXRyeS5jb29yZGluYXRlcyl9KSxvLkdlb0pTT04uZ2V0RmVhdHVyZSh0aGlzLHt0eXBlOnQsY29vcmRpbmF0ZXM6ZX0pfX1vLk11bHRpUG9seWxpbmUuaW5jbHVkZSh7dG9HZW9KU09OOnQoIk11bHRpTGluZVN0cmluZyIpfSksby5NdWx0aVBvbHlnb24uaW5jbHVkZSh7dG9HZW9KU09OOnQoIk11bHRpUG9seWdvbiIpfSksby5MYXllckdyb3VwLmluY2x1ZGUoe3RvR2VvSlNPTjpmdW5jdGlvbigpe3ZhciBlLGk9dGhpcy5mZWF0dXJlJiZ0aGlzLmZlYXR1cmUuZ2VvbWV0cnksbj1bXTtpZihpJiYiTXVsdGlQb2ludCI9PT1pLnR5cGUpcmV0dXJuIHQoIk11bHRpUG9pbnQiKS5jYWxsKHRoaXMpO3ZhciBzPWkmJiJHZW9tZXRyeUNvbGxlY3Rpb24iPT09aS50eXBlO3JldHVybiB0aGlzLmVhY2hMYXllcihmdW5jdGlvbih0KXt0LnRvR2VvSlNPTiYmKGU9dC50b0dlb0pTT04oKSxuLnB1c2gocz9lLmdlb21ldHJ5Om8uR2VvSlNPTi5hc0ZlYXR1cmUoZSkpKX0pLHM/by5HZW9KU09OLmdldEZlYXR1cmUodGhpcyx7Z2VvbWV0cmllczpuLHR5cGU6Ikdlb21ldHJ5Q29sbGVjdGlvbiJ9KTp7dHlwZToiRmVhdHVyZUNvbGxlY3Rpb24iLGZlYXR1cmVzOm59fX0pfSgpLG8uZ2VvSnNvbj1mdW5jdGlvbih0LGUpe3JldHVybiBuZXcgby5HZW9KU09OKHQsZSl9LG8uRG9tRXZlbnQ9e2FkZExpc3RlbmVyOmZ1bmN0aW9uKHQsZSxpLG4pe3ZhciBzLGEscixoPW8uc3RhbXAoaSksbD0iX2xlYWZsZXRfIitlK2g7cmV0dXJuIHRbbF0/dGhpczoocz1mdW5jdGlvbihlKXtyZXR1cm4gaS5jYWxsKG58fHQsZXx8by5Eb21FdmVudC5fZ2V0RXZlbnQoKSl9LG8uQnJvd3Nlci5wb2ludGVyJiYwPT09ZS5pbmRleE9mKCJ0b3VjaCIpP3RoaXMuYWRkUG9pbnRlckxpc3RlbmVyKHQsZSxzLGgpOihvLkJyb3dzZXIudG91Y2gmJiJkYmxjbGljayI9PT1lJiZ0aGlzLmFkZERvdWJsZVRhcExpc3RlbmVyJiZ0aGlzLmFkZERvdWJsZVRhcExpc3RlbmVyKHQscyxoKSwiYWRkRXZlbnRMaXN0ZW5lciJpbiB0PyJtb3VzZXdoZWVsIj09PWU/KHQuYWRkRXZlbnRMaXN0ZW5lcigiRE9NTW91c2VTY3JvbGwiLHMsITEpLHQuYWRkRXZlbnRMaXN0ZW5lcihlLHMsITEpKToibW91c2VlbnRlciI9PT1lfHwibW91c2VsZWF2ZSI9PT1lPyhhPXMscj0ibW91c2VlbnRlciI9PT1lPyJtb3VzZW92ZXIiOiJtb3VzZW91dCIscz1mdW5jdGlvbihlKXtyZXR1cm4gby5Eb21FdmVudC5fY2hlY2tNb3VzZSh0LGUpP2EoZSk6dm9pZCAwfSx0LmFkZEV2ZW50TGlzdGVuZXIocixzLCExKSk6ImNsaWNrIj09PWUmJm8uQnJvd3Nlci5hbmRyb2lkPyhhPXMscz1mdW5jdGlvbih0KXtyZXR1cm4gby5Eb21FdmVudC5fZmlsdGVyQ2xpY2sodCxhKX0sdC5hZGRFdmVudExpc3RlbmVyKGUscywhMSkpOnQuYWRkRXZlbnRMaXN0ZW5lcihlLHMsITEpOiJhdHRhY2hFdmVudCJpbiB0JiZ0LmF0dGFjaEV2ZW50KCJvbiIrZSxzKSx0W2xdPXMsdGhpcykpfSxyZW1vdmVMaXN0ZW5lcjpmdW5jdGlvbih0LGUsaSl7dmFyIG49by5zdGFtcChpKSxzPSJfbGVhZmxldF8iK2UrbixhPXRbc107cmV0dXJuIGE/KG8uQnJvd3Nlci5wb2ludGVyJiYwPT09ZS5pbmRleE9mKCJ0b3VjaCIpP3RoaXMucmVtb3ZlUG9pbnRlckxpc3RlbmVyKHQsZSxuKTpvLkJyb3dzZXIudG91Y2gmJiJkYmxjbGljayI9PT1lJiZ0aGlzLnJlbW92ZURvdWJsZVRhcExpc3RlbmVyP3RoaXMucmVtb3ZlRG91YmxlVGFwTGlzdGVuZXIodCxuKToicmVtb3ZlRXZlbnRMaXN0ZW5lciJpbiB0PyJtb3VzZXdoZWVsIj09PWU/KHQucmVtb3ZlRXZlbnRMaXN0ZW5lcigiRE9NTW91c2VTY3JvbGwiLGEsITEpLHQucmVtb3ZlRXZlbnRMaXN0ZW5lcihlLGEsITEpKToibW91c2VlbnRlciI9PT1lfHwibW91c2VsZWF2ZSI9PT1lP3QucmVtb3ZlRXZlbnRMaXN0ZW5lcigibW91c2VlbnRlciI9PT1lPyJtb3VzZW92ZXIiOiJtb3VzZW91dCIsYSwhMSk6dC5yZW1vdmVFdmVudExpc3RlbmVyKGUsYSwhMSk6ImRldGFjaEV2ZW50ImluIHQmJnQuZGV0YWNoRXZlbnQoIm9uIitlLGEpLHRbc109bnVsbCx0aGlzKTp0aGlzfSxzdG9wUHJvcGFnYXRpb246ZnVuY3Rpb24odCl7cmV0dXJuIHQuc3RvcFByb3BhZ2F0aW9uP3Quc3RvcFByb3BhZ2F0aW9uKCk6dC5jYW5jZWxCdWJibGU9ITAsby5Eb21FdmVudC5fc2tpcHBlZCh0KSx0aGlzfSxkaXNhYmxlU2Nyb2xsUHJvcGFnYXRpb246ZnVuY3Rpb24odCl7dmFyIGU9by5Eb21FdmVudC5zdG9wUHJvcGFnYXRpb247cmV0dXJuIG8uRG9tRXZlbnQub24odCwibW91c2V3aGVlbCIsZSkub24odCwiTW96TW91c2VQaXhlbFNjcm9sbCIsZSl9LGRpc2FibGVDbGlja1Byb3BhZ2F0aW9uOmZ1bmN0aW9uKHQpe2Zvcih2YXIgZT1vLkRvbUV2ZW50LnN0b3BQcm9wYWdhdGlvbixpPW8uRHJhZ2dhYmxlLlNUQVJULmxlbmd0aC0xO2k+PTA7aS0tKW8uRG9tRXZlbnQub24odCxvLkRyYWdnYWJsZS5TVEFSVFtpXSxlKTtyZXR1cm4gby5Eb21FdmVudC5vbih0LCJjbGljayIsby5Eb21FdmVudC5fZmFrZVN0b3ApLm9uKHQsImRibGNsaWNrIixlKX0scHJldmVudERlZmF1bHQ6ZnVuY3Rpb24odCl7cmV0dXJuIHQucHJldmVudERlZmF1bHQ/dC5wcmV2ZW50RGVmYXVsdCgpOnQucmV0dXJuVmFsdWU9ITEsdGhpc30sc3RvcDpmdW5jdGlvbih0KXtyZXR1cm4gby5Eb21FdmVudC5wcmV2ZW50RGVmYXVsdCh0KS5zdG9wUHJvcGFnYXRpb24odCl9LGdldE1vdXNlUG9zaXRpb246ZnVuY3Rpb24odCxlKXtpZighZSlyZXR1cm4gbmV3IG8uUG9pbnQodC5jbGllbnRYLHQuY2xpZW50WSk7dmFyIGk9ZS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtyZXR1cm4gbmV3IG8uUG9pbnQodC5jbGllbnRYLWkubGVmdC1lLmNsaWVudExlZnQsdC5jbGllbnRZLWkudG9wLWUuY2xpZW50VG9wKX0sZ2V0V2hlZWxEZWx0YTpmdW5jdGlvbih0KXt2YXIgZT0wO3JldHVybiB0LndoZWVsRGVsdGEmJihlPXQud2hlZWxEZWx0YS8xMjApLHQuZGV0YWlsJiYoZT0tdC5kZXRhaWwvMyksZX0sX3NraXBFdmVudHM6e30sX2Zha2VTdG9wOmZ1bmN0aW9uKHQpe28uRG9tRXZlbnQuX3NraXBFdmVudHNbdC50eXBlXT0hMH0sX3NraXBwZWQ6ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5fc2tpcEV2ZW50c1t0LnR5cGVdO3JldHVybiB0aGlzLl9za2lwRXZlbnRzW3QudHlwZV09ITEsZX0sX2NoZWNrTW91c2U6ZnVuY3Rpb24odCxlKXt2YXIgaT1lLnJlbGF0ZWRUYXJnZXQ7aWYoIWkpcmV0dXJuITA7dHJ5e2Zvcig7aSYmaSE9PXQ7KWk9aS5wYXJlbnROb2RlfWNhdGNoKG4pe3JldHVybiExfXJldHVybiBpIT09dH0sX2dldEV2ZW50OmZ1bmN0aW9uKCl7dmFyIGU9dC5ldmVudDtpZighZSlmb3IodmFyIGk9YXJndW1lbnRzLmNhbGxlZS5jYWxsZXI7aSYmKGU9aS5hcmd1bWVudHNbMF0sIWV8fHQuRXZlbnQhPT1lLmNvbnN0cnVjdG9yKTspaT1pLmNhbGxlcjtyZXR1cm4gZX0sX2ZpbHRlckNsaWNrOmZ1bmN0aW9uKHQsZSl7dmFyIGk9dC50aW1lU3RhbXB8fHQub3JpZ2luYWxFdmVudC50aW1lU3RhbXAsbj1vLkRvbUV2ZW50Ll9sYXN0Q2xpY2smJmktby5Eb21FdmVudC5fbGFzdENsaWNrO3JldHVybiBuJiZuPjEwMCYmNTAwPm58fHQudGFyZ2V0Ll9zaW11bGF0ZWRDbGljayYmIXQuX3NpbXVsYXRlZD92b2lkIG8uRG9tRXZlbnQuc3RvcCh0KTooby5Eb21FdmVudC5fbGFzdENsaWNrPWksZSh0KSl9fSxvLkRvbUV2ZW50Lm9uPW8uRG9tRXZlbnQuYWRkTGlzdGVuZXIsby5Eb21FdmVudC5vZmY9by5Eb21FdmVudC5yZW1vdmVMaXN0ZW5lcixvLkRyYWdnYWJsZT1vLkNsYXNzLmV4dGVuZCh7aW5jbHVkZXM6by5NaXhpbi5FdmVudHMsc3RhdGljczp7U1RBUlQ6by5Ccm93c2VyLnRvdWNoP1sidG91Y2hzdGFydCIsIm1vdXNlZG93biJdOlsibW91c2Vkb3duIl0sRU5EOnttb3VzZWRvd246Im1vdXNldXAiLHRvdWNoc3RhcnQ6InRvdWNoZW5kIixwb2ludGVyZG93bjoidG91Y2hlbmQiLE1TUG9pbnRlckRvd246InRvdWNoZW5kIn0sTU9WRTp7bW91c2Vkb3duOiJtb3VzZW1vdmUiLHRvdWNoc3RhcnQ6InRvdWNobW92ZSIscG9pbnRlcmRvd246InRvdWNobW92ZSIsTVNQb2ludGVyRG93bjoidG91Y2htb3ZlIn19LGluaXRpYWxpemU6ZnVuY3Rpb24odCxlKXt0aGlzLl9lbGVtZW50PXQsdGhpcy5fZHJhZ1N0YXJ0VGFyZ2V0PWV8fHR9LGVuYWJsZTpmdW5jdGlvbigpe2lmKCF0aGlzLl9lbmFibGVkKXtmb3IodmFyIHQ9by5EcmFnZ2FibGUuU1RBUlQubGVuZ3RoLTE7dD49MDt0LS0pby5Eb21FdmVudC5vbih0aGlzLl9kcmFnU3RhcnRUYXJnZXQsby5EcmFnZ2FibGUuU1RBUlRbdF0sdGhpcy5fb25Eb3duLHRoaXMpO3RoaXMuX2VuYWJsZWQ9ITB9fSxkaXNhYmxlOmZ1bmN0aW9uKCl7aWYodGhpcy5fZW5hYmxlZCl7Zm9yKHZhciB0PW8uRHJhZ2dhYmxlLlNUQVJULmxlbmd0aC0xO3Q+PTA7dC0tKW8uRG9tRXZlbnQub2ZmKHRoaXMuX2RyYWdTdGFydFRhcmdldCxvLkRyYWdnYWJsZS5TVEFSVFt0XSx0aGlzLl9vbkRvd24sdGhpcyk7dGhpcy5fZW5hYmxlZD0hMSx0aGlzLl9tb3ZlZD0hMX19LF9vbkRvd246ZnVuY3Rpb24odCl7aWYodGhpcy5fbW92ZWQ9ITEsIXQuc2hpZnRLZXkmJigxPT09dC53aGljaHx8MT09PXQuYnV0dG9ufHx0LnRvdWNoZXMpJiYoby5Eb21FdmVudC5zdG9wUHJvcGFnYXRpb24odCksIW8uRHJhZ2dhYmxlLl9kaXNhYmxlZCYmKG8uRG9tVXRpbC5kaXNhYmxlSW1hZ2VEcmFnKCksby5Eb21VdGlsLmRpc2FibGVUZXh0U2VsZWN0aW9uKCksIXRoaXMuX21vdmluZykpKXt2YXIgaT10LnRvdWNoZXM/dC50b3VjaGVzWzBdOnQ7dGhpcy5fc3RhcnRQb2ludD1uZXcgby5Qb2ludChpLmNsaWVudFgsaS5jbGllbnRZKSx0aGlzLl9zdGFydFBvcz10aGlzLl9uZXdQb3M9by5Eb21VdGlsLmdldFBvc2l0aW9uKHRoaXMuX2VsZW1lbnQpLG8uRG9tRXZlbnQub24oZSxvLkRyYWdnYWJsZS5NT1ZFW3QudHlwZV0sdGhpcy5fb25Nb3ZlLHRoaXMpLm9uKGUsby5EcmFnZ2FibGUuRU5EW3QudHlwZV0sdGhpcy5fb25VcCx0aGlzKX19LF9vbk1vdmU6ZnVuY3Rpb24odCl7aWYodC50b3VjaGVzJiZ0LnRvdWNoZXMubGVuZ3RoPjEpcmV0dXJuIHZvaWQodGhpcy5fbW92ZWQ9ITApO3ZhciBpPXQudG91Y2hlcyYmMT09PXQudG91Y2hlcy5sZW5ndGg/dC50b3VjaGVzWzBdOnQsbj1uZXcgby5Qb2ludChpLmNsaWVudFgsaS5jbGllbnRZKSxzPW4uc3VidHJhY3QodGhpcy5fc3RhcnRQb2ludCk7KHMueHx8cy55KSYmKG8uQnJvd3Nlci50b3VjaCYmTWF0aC5hYnMocy54KStNYXRoLmFicyhzLnkpPDN8fChvLkRvbUV2ZW50LnByZXZlbnREZWZhdWx0KHQpLHRoaXMuX21vdmVkfHwodGhpcy5maXJlKCJkcmFnc3RhcnQiKSx0aGlzLl9tb3ZlZD0hMCx0aGlzLl9zdGFydFBvcz1vLkRvbVV0aWwuZ2V0UG9zaXRpb24odGhpcy5fZWxlbWVudCkuc3VidHJhY3Qocyksby5Eb21VdGlsLmFkZENsYXNzKGUuYm9keSwibGVhZmxldC1kcmFnZ2luZyIpLHRoaXMuX2xhc3RUYXJnZXQ9dC50YXJnZXR8fHQuc3JjRWxlbWVudCxvLkRvbVV0aWwuYWRkQ2xhc3ModGhpcy5fbGFzdFRhcmdldCwibGVhZmxldC1kcmFnLXRhcmdldCIpKSx0aGlzLl9uZXdQb3M9dGhpcy5fc3RhcnRQb3MuYWRkKHMpLHRoaXMuX21vdmluZz0hMCxvLlV0aWwuY2FuY2VsQW5pbUZyYW1lKHRoaXMuX2FuaW1SZXF1ZXN0KSx0aGlzLl9hbmltUmVxdWVzdD1vLlV0aWwucmVxdWVzdEFuaW1GcmFtZSh0aGlzLl91cGRhdGVQb3NpdGlvbix0aGlzLCEwLHRoaXMuX2RyYWdTdGFydFRhcmdldCkpKX0sX3VwZGF0ZVBvc2l0aW9uOmZ1bmN0aW9uKCl7dGhpcy5maXJlKCJwcmVkcmFnIiksby5Eb21VdGlsLnNldFBvc2l0aW9uKHRoaXMuX2VsZW1lbnQsdGhpcy5fbmV3UG9zKSx0aGlzLmZpcmUoImRyYWciKX0sX29uVXA6ZnVuY3Rpb24oKXtvLkRvbVV0aWwucmVtb3ZlQ2xhc3MoZS5ib2R5LCJsZWFmbGV0LWRyYWdnaW5nIiksdGhpcy5fbGFzdFRhcmdldCYmKG8uRG9tVXRpbC5yZW1vdmVDbGFzcyh0aGlzLl9sYXN0VGFyZ2V0LCJsZWFmbGV0LWRyYWctdGFyZ2V0IiksdGhpcy5fbGFzdFRhcmdldD1udWxsKTtmb3IodmFyIHQgaW4gby5EcmFnZ2FibGUuTU9WRSlvLkRvbUV2ZW50Lm9mZihlLG8uRHJhZ2dhYmxlLk1PVkVbdF0sdGhpcy5fb25Nb3ZlKS5vZmYoZSxvLkRyYWdnYWJsZS5FTkRbdF0sdGhpcy5fb25VcCk7by5Eb21VdGlsLmVuYWJsZUltYWdlRHJhZygpLG8uRG9tVXRpbC5lbmFibGVUZXh0U2VsZWN0aW9uKCksdGhpcy5fbW92ZWQmJnRoaXMuX21vdmluZyYmKG8uVXRpbC5jYW5jZWxBbmltRnJhbWUodGhpcy5fYW5pbVJlcXVlc3QpLHRoaXMuZmlyZSgiZHJhZ2VuZCIse2Rpc3RhbmNlOnRoaXMuX25ld1Bvcy5kaXN0YW5jZVRvKHRoaXMuX3N0YXJ0UG9zKX0pKSx0aGlzLl9tb3Zpbmc9ITF9fSksby5IYW5kbGVyPW8uQ2xhc3MuZXh0ZW5kKHtpbml0aWFsaXplOmZ1bmN0aW9uKHQpe3RoaXMuX21hcD10fSxlbmFibGU6ZnVuY3Rpb24oKXt0aGlzLl9lbmFibGVkfHwodGhpcy5fZW5hYmxlZD0hMCx0aGlzLmFkZEhvb2tzKCkpfSxkaXNhYmxlOmZ1bmN0aW9uKCl7dGhpcy5fZW5hYmxlZCYmKHRoaXMuX2VuYWJsZWQ9ITEsdGhpcy5yZW1vdmVIb29rcygpKX0sZW5hYmxlZDpmdW5jdGlvbigpe3JldHVybiEhdGhpcy5fZW5hYmxlZH19KSxvLk1hcC5tZXJnZU9wdGlvbnMoe2RyYWdnaW5nOiEwLGluZXJ0aWE6IW8uQnJvd3Nlci5hbmRyb2lkMjMsaW5lcnRpYURlY2VsZXJhdGlvbjozNDAwLGluZXJ0aWFNYXhTcGVlZDoxLzAsaW5lcnRpYVRocmVzaG9sZDpvLkJyb3dzZXIudG91Y2g/MzI6MTgsZWFzZUxpbmVhcml0eTouMjUsd29ybGRDb3B5SnVtcDohMX0pLG8uTWFwLkRyYWc9by5IYW5kbGVyLmV4dGVuZCh7YWRkSG9va3M6ZnVuY3Rpb24oKXtpZighdGhpcy5fZHJhZ2dhYmxlKXt2YXIgdD10aGlzLl9tYXA7dGhpcy5fZHJhZ2dhYmxlPW5ldyBvLkRyYWdnYWJsZSh0Ll9tYXBQYW5lLHQuX2NvbnRhaW5lciksdGhpcy5fZHJhZ2dhYmxlLm9uKHtkcmFnc3RhcnQ6dGhpcy5fb25EcmFnU3RhcnQsZHJhZzp0aGlzLl9vbkRyYWcsZHJhZ2VuZDp0aGlzLl9vbkRyYWdFbmR9LHRoaXMpLHQub3B0aW9ucy53b3JsZENvcHlKdW1wJiYodGhpcy5fZHJhZ2dhYmxlLm9uKCJwcmVkcmFnIix0aGlzLl9vblByZURyYWcsdGhpcyksdC5vbigidmlld3Jlc2V0Iix0aGlzLl9vblZpZXdSZXNldCx0aGlzKSx0LndoZW5SZWFkeSh0aGlzLl9vblZpZXdSZXNldCx0aGlzKSl9dGhpcy5fZHJhZ2dhYmxlLmVuYWJsZSgpfSxyZW1vdmVIb29rczpmdW5jdGlvbigpe3RoaXMuX2RyYWdnYWJsZS5kaXNhYmxlKCl9LG1vdmVkOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2RyYWdnYWJsZSYmdGhpcy5fZHJhZ2dhYmxlLl9tb3ZlZH0sX29uRHJhZ1N0YXJ0OmZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5fbWFwO3QuX3BhbkFuaW0mJnQuX3BhbkFuaW0uc3RvcCgpLHQuZmlyZSgibW92ZXN0YXJ0IikuZmlyZSgiZHJhZ3N0YXJ0IiksdC5vcHRpb25zLmluZXJ0aWEmJih0aGlzLl9wb3NpdGlvbnM9W10sdGhpcy5fdGltZXM9W10pfSxfb25EcmFnOmZ1bmN0aW9uKCl7aWYodGhpcy5fbWFwLm9wdGlvbnMuaW5lcnRpYSl7dmFyIHQ9dGhpcy5fbGFzdFRpbWU9K25ldyBEYXRlLGU9dGhpcy5fbGFzdFBvcz10aGlzLl9kcmFnZ2FibGUuX25ld1Bvczt0aGlzLl9wb3NpdGlvbnMucHVzaChlKSx0aGlzLl90aW1lcy5wdXNoKHQpLHQtdGhpcy5fdGltZXNbMF0+MjAwJiYodGhpcy5fcG9zaXRpb25zLnNoaWZ0KCksdGhpcy5fdGltZXMuc2hpZnQoKSl9dGhpcy5fbWFwLmZpcmUoIm1vdmUiKS5maXJlKCJkcmFnIil9LF9vblZpZXdSZXNldDpmdW5jdGlvbigpe3ZhciB0PXRoaXMuX21hcC5nZXRTaXplKCkuX2RpdmlkZUJ5KDIpLGU9dGhpcy5fbWFwLmxhdExuZ1RvTGF5ZXJQb2ludChbMCwwXSk7dGhpcy5faW5pdGlhbFdvcmxkT2Zmc2V0PWUuc3VidHJhY3QodCkueCx0aGlzLl93b3JsZFdpZHRoPXRoaXMuX21hcC5wcm9qZWN0KFswLDE4MF0pLnh9LF9vblByZURyYWc6ZnVuY3Rpb24oKXt2YXIgdD10aGlzLl93b3JsZFdpZHRoLGU9TWF0aC5yb3VuZCh0LzIpLGk9dGhpcy5faW5pdGlhbFdvcmxkT2Zmc2V0LG49dGhpcy5fZHJhZ2dhYmxlLl9uZXdQb3MueCxvPShuLWUraSkldCtlLWkscz0obitlK2kpJXQtZS1pLGE9TWF0aC5hYnMobytpKTxNYXRoLmFicyhzK2kpP286czt0aGlzLl9kcmFnZ2FibGUuX25ld1Bvcy54PWF9LF9vbkRyYWdFbmQ6ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5fbWFwLGk9ZS5vcHRpb25zLG49K25ldyBEYXRlLXRoaXMuX2xhc3RUaW1lLHM9IWkuaW5lcnRpYXx8bj5pLmluZXJ0aWFUaHJlc2hvbGR8fCF0aGlzLl9wb3NpdGlvbnNbMF07aWYoZS5maXJlKCJkcmFnZW5kIix0KSxzKWUuZmlyZSgibW92ZWVuZCIpO2Vsc2V7dmFyIGE9dGhpcy5fbGFzdFBvcy5zdWJ0cmFjdCh0aGlzLl9wb3NpdGlvbnNbMF0pLHI9KHRoaXMuX2xhc3RUaW1lK24tdGhpcy5fdGltZXNbMF0pLzFlMyxoPWkuZWFzZUxpbmVhcml0eSxsPWEubXVsdGlwbHlCeShoL3IpLHU9bC5kaXN0YW5jZVRvKFswLDBdKSxjPU1hdGgubWluKGkuaW5lcnRpYU1heFNwZWVkLHUpLGQ9bC5tdWx0aXBseUJ5KGMvdSkscD1jLyhpLmluZXJ0aWFEZWNlbGVyYXRpb24qaCksXz1kLm11bHRpcGx5QnkoLXAvMikucm91bmQoKTtfLngmJl8ueT8oXz1lLl9saW1pdE9mZnNldChfLGUub3B0aW9ucy5tYXhCb3VuZHMpLG8uVXRpbC5yZXF1ZXN0QW5pbUZyYW1lKGZ1bmN0aW9uKCl7ZS5wYW5CeShfLHtkdXJhdGlvbjpwLGVhc2VMaW5lYXJpdHk6aCxub01vdmVTdGFydDohMH0pfSkpOmUuZmlyZSgibW92ZWVuZCIpfX19KSxvLk1hcC5hZGRJbml0SG9vaygiYWRkSGFuZGxlciIsImRyYWdnaW5nIixvLk1hcC5EcmFnKSxvLk1hcC5tZXJnZU9wdGlvbnMoe2RvdWJsZUNsaWNrWm9vbTohMH0pLG8uTWFwLkRvdWJsZUNsaWNrWm9vbT1vLkhhbmRsZXIuZXh0ZW5kKHthZGRIb29rczpmdW5jdGlvbigpe3RoaXMuX21hcC5vbigiZGJsY2xpY2siLHRoaXMuX29uRG91YmxlQ2xpY2ssdGhpcyl9LHJlbW92ZUhvb2tzOmZ1bmN0aW9uKCl7dGhpcy5fbWFwLm9mZigiZGJsY2xpY2siLHRoaXMuX29uRG91YmxlQ2xpY2ssdGhpcyl9LF9vbkRvdWJsZUNsaWNrOmZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMuX21hcCxpPWUuZ2V0Wm9vbSgpKyh0Lm9yaWdpbmFsRXZlbnQuc2hpZnRLZXk/LTE6MSk7ImNlbnRlciI9PT1lLm9wdGlvbnMuZG91YmxlQ2xpY2tab29tP2Uuc2V0Wm9vbShpKTplLnNldFpvb21Bcm91bmQodC5jb250YWluZXJQb2ludCxpKX19KSxvLk1hcC5hZGRJbml0SG9vaygiYWRkSGFuZGxlciIsImRvdWJsZUNsaWNrWm9vbSIsby5NYXAuRG91YmxlQ2xpY2tab29tKSxvLk1hcC5tZXJnZU9wdGlvbnMoe3Njcm9sbFdoZWVsWm9vbTohMH0pLG8uTWFwLlNjcm9sbFdoZWVsWm9vbT1vLkhhbmRsZXIuZXh0ZW5kKHthZGRIb29rczpmdW5jdGlvbigpe28uRG9tRXZlbnQub24odGhpcy5fbWFwLl9jb250YWluZXIsIm1vdXNld2hlZWwiLHRoaXMuX29uV2hlZWxTY3JvbGwsdGhpcyksby5Eb21FdmVudC5vbih0aGlzLl9tYXAuX2NvbnRhaW5lciwiTW96TW91c2VQaXhlbFNjcm9sbCIsby5Eb21FdmVudC5wcmV2ZW50RGVmYXVsdCksdGhpcy5fZGVsdGE9MH0scmVtb3ZlSG9va3M6ZnVuY3Rpb24oKXtvLkRvbUV2ZW50Lm9mZih0aGlzLl9tYXAuX2NvbnRhaW5lciwibW91c2V3aGVlbCIsdGhpcy5fb25XaGVlbFNjcm9sbCksby5Eb21FdmVudC5vZmYodGhpcy5fbWFwLl9jb250YWluZXIsIk1vek1vdXNlUGl4ZWxTY3JvbGwiLG8uRG9tRXZlbnQucHJldmVudERlZmF1bHQpfSxfb25XaGVlbFNjcm9sbDpmdW5jdGlvbih0KXt2YXIgZT1vLkRvbUV2ZW50LmdldFdoZWVsRGVsdGEodCk7dGhpcy5fZGVsdGErPWUsdGhpcy5fbGFzdE1vdXNlUG9zPXRoaXMuX21hcC5tb3VzZUV2ZW50VG9Db250YWluZXJQb2ludCh0KSx0aGlzLl9zdGFydFRpbWV8fCh0aGlzLl9zdGFydFRpbWU9K25ldyBEYXRlKTt2YXIgaT1NYXRoLm1heCg0MC0oK25ldyBEYXRlLXRoaXMuX3N0YXJ0VGltZSksMCk7Y2xlYXJUaW1lb3V0KHRoaXMuX3RpbWVyKSx0aGlzLl90aW1lcj1zZXRUaW1lb3V0KG8uYmluZCh0aGlzLl9wZXJmb3JtWm9vbSx0aGlzKSxpKSxvLkRvbUV2ZW50LnByZXZlbnREZWZhdWx0KHQpLG8uRG9tRXZlbnQuc3RvcFByb3BhZ2F0aW9uKHQpfSxfcGVyZm9ybVpvb206ZnVuY3Rpb24oKXt2YXIgdD10aGlzLl9tYXAsZT10aGlzLl9kZWx0YSxpPXQuZ2V0Wm9vbSgpO2U9ZT4wP01hdGguY2VpbChlKTpNYXRoLmZsb29yKGUpLGU9TWF0aC5tYXgoTWF0aC5taW4oZSw0KSwtNCksZT10Ll9saW1pdFpvb20oaStlKS1pLHRoaXMuX2RlbHRhPTAsdGhpcy5fc3RhcnRUaW1lPW51bGwsZSYmKCJjZW50ZXIiPT09dC5vcHRpb25zLnNjcm9sbFdoZWVsWm9vbT90LnNldFpvb20oaStlKTp0LnNldFpvb21Bcm91bmQodGhpcy5fbGFzdE1vdXNlUG9zLGkrZSkpfX0pLG8uTWFwLmFkZEluaXRIb29rKCJhZGRIYW5kbGVyIiwic2Nyb2xsV2hlZWxab29tIixvLk1hcC5TY3JvbGxXaGVlbFpvb20pLG8uZXh0ZW5kKG8uRG9tRXZlbnQse190b3VjaHN0YXJ0Om8uQnJvd3Nlci5tc1BvaW50ZXI/Ik1TUG9pbnRlckRvd24iOm8uQnJvd3Nlci5wb2ludGVyPyJwb2ludGVyZG93biI6InRvdWNoc3RhcnQiLF90b3VjaGVuZDpvLkJyb3dzZXIubXNQb2ludGVyPyJNU1BvaW50ZXJVcCI6by5Ccm93c2VyLnBvaW50ZXI/InBvaW50ZXJ1cCI6InRvdWNoZW5kIixhZGREb3VibGVUYXBMaXN0ZW5lcjpmdW5jdGlvbih0LGksbil7ZnVuY3Rpb24gcyh0KXt2YXIgZTtpZihvLkJyb3dzZXIucG9pbnRlcj8oXy5wdXNoKHQucG9pbnRlcklkKSxlPV8ubGVuZ3RoKTplPXQudG91Y2hlcy5sZW5ndGgsIShlPjEpKXt2YXIgaT1EYXRlLm5vdygpLG49aS0ocnx8aSk7aD10LnRvdWNoZXM/dC50b3VjaGVzWzBdOnQsbD1uPjAmJnU+PW4scj1pfX1mdW5jdGlvbiBhKHQpe2lmKG8uQnJvd3Nlci5wb2ludGVyKXt2YXIgZT1fLmluZGV4T2YodC5wb2ludGVySWQpO2lmKC0xPT09ZSlyZXR1cm47Xy5zcGxpY2UoZSwxKX1pZihsKXtpZihvLkJyb3dzZXIucG9pbnRlcil7dmFyIG4scz17fTtmb3IodmFyIGEgaW4gaCluPWhbYV0sImZ1bmN0aW9uIj09dHlwZW9mIG4/c1thXT1uLmJpbmQoaCk6c1thXT1uO2g9c31oLnR5cGU9ImRibGNsaWNrIixpKGgpLHI9bnVsbH19dmFyIHIsaCxsPSExLHU9MjUwLGM9Il9sZWFmbGV0XyIsZD10aGlzLl90b3VjaHN0YXJ0LHA9dGhpcy5fdG91Y2hlbmQsXz1bXTt0W2MrZCtuXT1zLHRbYytwK25dPWE7dmFyIG09by5Ccm93c2VyLnBvaW50ZXI/ZS5kb2N1bWVudEVsZW1lbnQ6dDtyZXR1cm4gdC5hZGRFdmVudExpc3RlbmVyKGQscywhMSksbS5hZGRFdmVudExpc3RlbmVyKHAsYSwhMSksby5Ccm93c2VyLnBvaW50ZXImJm0uYWRkRXZlbnRMaXN0ZW5lcihvLkRvbUV2ZW50LlBPSU5URVJfQ0FOQ0VMLGEsITEpLHRoaXN9LHJlbW92ZURvdWJsZVRhcExpc3RlbmVyOmZ1bmN0aW9uKHQsaSl7dmFyIG49Il9sZWFmbGV0XyI7cmV0dXJuIHQucmVtb3ZlRXZlbnRMaXN0ZW5lcih0aGlzLl90b3VjaHN0YXJ0LHRbbit0aGlzLl90b3VjaHN0YXJ0K2ldLCExKSwoby5Ccm93c2VyLnBvaW50ZXI/ZS5kb2N1bWVudEVsZW1lbnQ6dCkucmVtb3ZlRXZlbnRMaXN0ZW5lcih0aGlzLl90b3VjaGVuZCx0W24rdGhpcy5fdG91Y2hlbmQraV0sITEpLG8uQnJvd3Nlci5wb2ludGVyJiZlLmRvY3VtZW50RWxlbWVudC5yZW1vdmVFdmVudExpc3RlbmVyKG8uRG9tRXZlbnQuUE9JTlRFUl9DQU5DRUwsdFtuK3RoaXMuX3RvdWNoZW5kK2ldLCExKSx0aGlzfX0pLG8uZXh0ZW5kKG8uRG9tRXZlbnQse1BPSU5URVJfRE9XTjpvLkJyb3dzZXIubXNQb2ludGVyPyJNU1BvaW50ZXJEb3duIjoicG9pbnRlcmRvd24iLApQT0lOVEVSX01PVkU6by5Ccm93c2VyLm1zUG9pbnRlcj8iTVNQb2ludGVyTW92ZSI6InBvaW50ZXJtb3ZlIixQT0lOVEVSX1VQOm8uQnJvd3Nlci5tc1BvaW50ZXI/Ik1TUG9pbnRlclVwIjoicG9pbnRlcnVwIixQT0lOVEVSX0NBTkNFTDpvLkJyb3dzZXIubXNQb2ludGVyPyJNU1BvaW50ZXJDYW5jZWwiOiJwb2ludGVyY2FuY2VsIixfcG9pbnRlcnM6W10sX3BvaW50ZXJEb2N1bWVudExpc3RlbmVyOiExLGFkZFBvaW50ZXJMaXN0ZW5lcjpmdW5jdGlvbih0LGUsaSxuKXtzd2l0Y2goZSl7Y2FzZSJ0b3VjaHN0YXJ0IjpyZXR1cm4gdGhpcy5hZGRQb2ludGVyTGlzdGVuZXJTdGFydCh0LGUsaSxuKTtjYXNlInRvdWNoZW5kIjpyZXR1cm4gdGhpcy5hZGRQb2ludGVyTGlzdGVuZXJFbmQodCxlLGksbik7Y2FzZSJ0b3VjaG1vdmUiOnJldHVybiB0aGlzLmFkZFBvaW50ZXJMaXN0ZW5lck1vdmUodCxlLGksbik7ZGVmYXVsdDp0aHJvdyJVbmtub3duIHRvdWNoIGV2ZW50IHR5cGUifX0sYWRkUG9pbnRlckxpc3RlbmVyU3RhcnQ6ZnVuY3Rpb24odCxpLG4scyl7dmFyIGE9Il9sZWFmbGV0XyIscj10aGlzLl9wb2ludGVycyxoPWZ1bmN0aW9uKHQpeyJtb3VzZSIhPT10LnBvaW50ZXJUeXBlJiZ0LnBvaW50ZXJUeXBlIT09dC5NU1BPSU5URVJfVFlQRV9NT1VTRSYmby5Eb21FdmVudC5wcmV2ZW50RGVmYXVsdCh0KTtmb3IodmFyIGU9ITEsaT0wO2k8ci5sZW5ndGg7aSsrKWlmKHJbaV0ucG9pbnRlcklkPT09dC5wb2ludGVySWQpe2U9ITA7YnJlYWt9ZXx8ci5wdXNoKHQpLHQudG91Y2hlcz1yLnNsaWNlKCksdC5jaGFuZ2VkVG91Y2hlcz1bdF0sbih0KX07aWYodFthKyJ0b3VjaHN0YXJ0IitzXT1oLHQuYWRkRXZlbnRMaXN0ZW5lcih0aGlzLlBPSU5URVJfRE9XTixoLCExKSwhdGhpcy5fcG9pbnRlckRvY3VtZW50TGlzdGVuZXIpe3ZhciBsPWZ1bmN0aW9uKHQpe2Zvcih2YXIgZT0wO2U8ci5sZW5ndGg7ZSsrKWlmKHJbZV0ucG9pbnRlcklkPT09dC5wb2ludGVySWQpe3Iuc3BsaWNlKGUsMSk7YnJlYWt9fTtlLmRvY3VtZW50RWxlbWVudC5hZGRFdmVudExpc3RlbmVyKHRoaXMuUE9JTlRFUl9VUCxsLCExKSxlLmRvY3VtZW50RWxlbWVudC5hZGRFdmVudExpc3RlbmVyKHRoaXMuUE9JTlRFUl9DQU5DRUwsbCwhMSksdGhpcy5fcG9pbnRlckRvY3VtZW50TGlzdGVuZXI9ITB9cmV0dXJuIHRoaXN9LGFkZFBvaW50ZXJMaXN0ZW5lck1vdmU6ZnVuY3Rpb24odCxlLGksbil7ZnVuY3Rpb24gbyh0KXtpZih0LnBvaW50ZXJUeXBlIT09dC5NU1BPSU5URVJfVFlQRV9NT1VTRSYmIm1vdXNlIiE9PXQucG9pbnRlclR5cGV8fDAhPT10LmJ1dHRvbnMpe2Zvcih2YXIgZT0wO2U8YS5sZW5ndGg7ZSsrKWlmKGFbZV0ucG9pbnRlcklkPT09dC5wb2ludGVySWQpe2FbZV09dDticmVha310LnRvdWNoZXM9YS5zbGljZSgpLHQuY2hhbmdlZFRvdWNoZXM9W3RdLGkodCl9fXZhciBzPSJfbGVhZmxldF8iLGE9dGhpcy5fcG9pbnRlcnM7cmV0dXJuIHRbcysidG91Y2htb3ZlIituXT1vLHQuYWRkRXZlbnRMaXN0ZW5lcih0aGlzLlBPSU5URVJfTU9WRSxvLCExKSx0aGlzfSxhZGRQb2ludGVyTGlzdGVuZXJFbmQ6ZnVuY3Rpb24odCxlLGksbil7dmFyIG89Il9sZWFmbGV0XyIscz10aGlzLl9wb2ludGVycyxhPWZ1bmN0aW9uKHQpe2Zvcih2YXIgZT0wO2U8cy5sZW5ndGg7ZSsrKWlmKHNbZV0ucG9pbnRlcklkPT09dC5wb2ludGVySWQpe3Muc3BsaWNlKGUsMSk7YnJlYWt9dC50b3VjaGVzPXMuc2xpY2UoKSx0LmNoYW5nZWRUb3VjaGVzPVt0XSxpKHQpfTtyZXR1cm4gdFtvKyJ0b3VjaGVuZCIrbl09YSx0LmFkZEV2ZW50TGlzdGVuZXIodGhpcy5QT0lOVEVSX1VQLGEsITEpLHQuYWRkRXZlbnRMaXN0ZW5lcih0aGlzLlBPSU5URVJfQ0FOQ0VMLGEsITEpLHRoaXN9LHJlbW92ZVBvaW50ZXJMaXN0ZW5lcjpmdW5jdGlvbih0LGUsaSl7dmFyIG49Il9sZWFmbGV0XyIsbz10W24rZStpXTtzd2l0Y2goZSl7Y2FzZSJ0b3VjaHN0YXJ0Ijp0LnJlbW92ZUV2ZW50TGlzdGVuZXIodGhpcy5QT0lOVEVSX0RPV04sbywhMSk7YnJlYWs7Y2FzZSJ0b3VjaG1vdmUiOnQucmVtb3ZlRXZlbnRMaXN0ZW5lcih0aGlzLlBPSU5URVJfTU9WRSxvLCExKTticmVhaztjYXNlInRvdWNoZW5kIjp0LnJlbW92ZUV2ZW50TGlzdGVuZXIodGhpcy5QT0lOVEVSX1VQLG8sITEpLHQucmVtb3ZlRXZlbnRMaXN0ZW5lcih0aGlzLlBPSU5URVJfQ0FOQ0VMLG8sITEpfXJldHVybiB0aGlzfX0pLG8uTWFwLm1lcmdlT3B0aW9ucyh7dG91Y2hab29tOm8uQnJvd3Nlci50b3VjaCYmIW8uQnJvd3Nlci5hbmRyb2lkMjMsYm91bmNlQXRab29tTGltaXRzOiEwfSksby5NYXAuVG91Y2hab29tPW8uSGFuZGxlci5leHRlbmQoe2FkZEhvb2tzOmZ1bmN0aW9uKCl7by5Eb21FdmVudC5vbih0aGlzLl9tYXAuX2NvbnRhaW5lciwidG91Y2hzdGFydCIsdGhpcy5fb25Ub3VjaFN0YXJ0LHRoaXMpfSxyZW1vdmVIb29rczpmdW5jdGlvbigpe28uRG9tRXZlbnQub2ZmKHRoaXMuX21hcC5fY29udGFpbmVyLCJ0b3VjaHN0YXJ0Iix0aGlzLl9vblRvdWNoU3RhcnQsdGhpcyl9LF9vblRvdWNoU3RhcnQ6ZnVuY3Rpb24odCl7dmFyIGk9dGhpcy5fbWFwO2lmKHQudG91Y2hlcyYmMj09PXQudG91Y2hlcy5sZW5ndGgmJiFpLl9hbmltYXRpbmdab29tJiYhdGhpcy5fem9vbWluZyl7dmFyIG49aS5tb3VzZUV2ZW50VG9MYXllclBvaW50KHQudG91Y2hlc1swXSkscz1pLm1vdXNlRXZlbnRUb0xheWVyUG9pbnQodC50b3VjaGVzWzFdKSxhPWkuX2dldENlbnRlckxheWVyUG9pbnQoKTt0aGlzLl9zdGFydENlbnRlcj1uLmFkZChzKS5fZGl2aWRlQnkoMiksdGhpcy5fc3RhcnREaXN0PW4uZGlzdGFuY2VUbyhzKSx0aGlzLl9tb3ZlZD0hMSx0aGlzLl96b29taW5nPSEwLHRoaXMuX2NlbnRlck9mZnNldD1hLnN1YnRyYWN0KHRoaXMuX3N0YXJ0Q2VudGVyKSxpLl9wYW5BbmltJiZpLl9wYW5BbmltLnN0b3AoKSxvLkRvbUV2ZW50Lm9uKGUsInRvdWNobW92ZSIsdGhpcy5fb25Ub3VjaE1vdmUsdGhpcykub24oZSwidG91Y2hlbmQiLHRoaXMuX29uVG91Y2hFbmQsdGhpcyksby5Eb21FdmVudC5wcmV2ZW50RGVmYXVsdCh0KX19LF9vblRvdWNoTW92ZTpmdW5jdGlvbih0KXt2YXIgZT10aGlzLl9tYXA7aWYodC50b3VjaGVzJiYyPT09dC50b3VjaGVzLmxlbmd0aCYmdGhpcy5fem9vbWluZyl7dmFyIGk9ZS5tb3VzZUV2ZW50VG9MYXllclBvaW50KHQudG91Y2hlc1swXSksbj1lLm1vdXNlRXZlbnRUb0xheWVyUG9pbnQodC50b3VjaGVzWzFdKTt0aGlzLl9zY2FsZT1pLmRpc3RhbmNlVG8obikvdGhpcy5fc3RhcnREaXN0LHRoaXMuX2RlbHRhPWkuX2FkZChuKS5fZGl2aWRlQnkoMikuX3N1YnRyYWN0KHRoaXMuX3N0YXJ0Q2VudGVyKSwxIT09dGhpcy5fc2NhbGUmJihlLm9wdGlvbnMuYm91bmNlQXRab29tTGltaXRzfHwhKGUuZ2V0Wm9vbSgpPT09ZS5nZXRNaW5ab29tKCkmJnRoaXMuX3NjYWxlPDF8fGUuZ2V0Wm9vbSgpPT09ZS5nZXRNYXhab29tKCkmJnRoaXMuX3NjYWxlPjEpKSYmKHRoaXMuX21vdmVkfHwoby5Eb21VdGlsLmFkZENsYXNzKGUuX21hcFBhbmUsImxlYWZsZXQtdG91Y2hpbmciKSxlLmZpcmUoIm1vdmVzdGFydCIpLmZpcmUoInpvb21zdGFydCIpLHRoaXMuX21vdmVkPSEwKSxvLlV0aWwuY2FuY2VsQW5pbUZyYW1lKHRoaXMuX2FuaW1SZXF1ZXN0KSx0aGlzLl9hbmltUmVxdWVzdD1vLlV0aWwucmVxdWVzdEFuaW1GcmFtZSh0aGlzLl91cGRhdGVPbk1vdmUsdGhpcywhMCx0aGlzLl9tYXAuX2NvbnRhaW5lciksby5Eb21FdmVudC5wcmV2ZW50RGVmYXVsdCh0KSl9fSxfdXBkYXRlT25Nb3ZlOmZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5fbWFwLGU9dGhpcy5fZ2V0U2NhbGVPcmlnaW4oKSxpPXQubGF5ZXJQb2ludFRvTGF0TG5nKGUpLG49dC5nZXRTY2FsZVpvb20odGhpcy5fc2NhbGUpO3QuX2FuaW1hdGVab29tKGksbix0aGlzLl9zdGFydENlbnRlcix0aGlzLl9zY2FsZSx0aGlzLl9kZWx0YSwhMSwhMCl9LF9vblRvdWNoRW5kOmZ1bmN0aW9uKCl7aWYoIXRoaXMuX21vdmVkfHwhdGhpcy5fem9vbWluZylyZXR1cm4gdm9pZCh0aGlzLl96b29taW5nPSExKTt2YXIgdD10aGlzLl9tYXA7dGhpcy5fem9vbWluZz0hMSxvLkRvbVV0aWwucmVtb3ZlQ2xhc3ModC5fbWFwUGFuZSwibGVhZmxldC10b3VjaGluZyIpLG8uVXRpbC5jYW5jZWxBbmltRnJhbWUodGhpcy5fYW5pbVJlcXVlc3QpLG8uRG9tRXZlbnQub2ZmKGUsInRvdWNobW92ZSIsdGhpcy5fb25Ub3VjaE1vdmUpLm9mZihlLCJ0b3VjaGVuZCIsdGhpcy5fb25Ub3VjaEVuZCk7dmFyIGk9dGhpcy5fZ2V0U2NhbGVPcmlnaW4oKSxuPXQubGF5ZXJQb2ludFRvTGF0TG5nKGkpLHM9dC5nZXRab29tKCksYT10LmdldFNjYWxlWm9vbSh0aGlzLl9zY2FsZSktcyxyPWE+MD9NYXRoLmNlaWwoYSk6TWF0aC5mbG9vcihhKSxoPXQuX2xpbWl0Wm9vbShzK3IpLGw9dC5nZXRab29tU2NhbGUoaCkvdGhpcy5fc2NhbGU7dC5fYW5pbWF0ZVpvb20obixoLGksbCl9LF9nZXRTY2FsZU9yaWdpbjpmdW5jdGlvbigpe3ZhciB0PXRoaXMuX2NlbnRlck9mZnNldC5zdWJ0cmFjdCh0aGlzLl9kZWx0YSkuZGl2aWRlQnkodGhpcy5fc2NhbGUpO3JldHVybiB0aGlzLl9zdGFydENlbnRlci5hZGQodCl9fSksby5NYXAuYWRkSW5pdEhvb2soImFkZEhhbmRsZXIiLCJ0b3VjaFpvb20iLG8uTWFwLlRvdWNoWm9vbSksby5NYXAubWVyZ2VPcHRpb25zKHt0YXA6ITAsdGFwVG9sZXJhbmNlOjE1fSksby5NYXAuVGFwPW8uSGFuZGxlci5leHRlbmQoe2FkZEhvb2tzOmZ1bmN0aW9uKCl7by5Eb21FdmVudC5vbih0aGlzLl9tYXAuX2NvbnRhaW5lciwidG91Y2hzdGFydCIsdGhpcy5fb25Eb3duLHRoaXMpfSxyZW1vdmVIb29rczpmdW5jdGlvbigpe28uRG9tRXZlbnQub2ZmKHRoaXMuX21hcC5fY29udGFpbmVyLCJ0b3VjaHN0YXJ0Iix0aGlzLl9vbkRvd24sdGhpcyl9LF9vbkRvd246ZnVuY3Rpb24odCl7aWYodC50b3VjaGVzKXtpZihvLkRvbUV2ZW50LnByZXZlbnREZWZhdWx0KHQpLHRoaXMuX2ZpcmVDbGljaz0hMCx0LnRvdWNoZXMubGVuZ3RoPjEpcmV0dXJuIHRoaXMuX2ZpcmVDbGljaz0hMSx2b2lkIGNsZWFyVGltZW91dCh0aGlzLl9ob2xkVGltZW91dCk7dmFyIGk9dC50b3VjaGVzWzBdLG49aS50YXJnZXQ7dGhpcy5fc3RhcnRQb3M9dGhpcy5fbmV3UG9zPW5ldyBvLlBvaW50KGkuY2xpZW50WCxpLmNsaWVudFkpLG4udGFnTmFtZSYmImEiPT09bi50YWdOYW1lLnRvTG93ZXJDYXNlKCkmJm8uRG9tVXRpbC5hZGRDbGFzcyhuLCJsZWFmbGV0LWFjdGl2ZSIpLHRoaXMuX2hvbGRUaW1lb3V0PXNldFRpbWVvdXQoby5iaW5kKGZ1bmN0aW9uKCl7dGhpcy5faXNUYXBWYWxpZCgpJiYodGhpcy5fZmlyZUNsaWNrPSExLHRoaXMuX29uVXAoKSx0aGlzLl9zaW11bGF0ZUV2ZW50KCJjb250ZXh0bWVudSIsaSkpfSx0aGlzKSwxZTMpLG8uRG9tRXZlbnQub24oZSwidG91Y2htb3ZlIix0aGlzLl9vbk1vdmUsdGhpcykub24oZSwidG91Y2hlbmQiLHRoaXMuX29uVXAsdGhpcyl9fSxfb25VcDpmdW5jdGlvbih0KXtpZihjbGVhclRpbWVvdXQodGhpcy5faG9sZFRpbWVvdXQpLG8uRG9tRXZlbnQub2ZmKGUsInRvdWNobW92ZSIsdGhpcy5fb25Nb3ZlLHRoaXMpLm9mZihlLCJ0b3VjaGVuZCIsdGhpcy5fb25VcCx0aGlzKSx0aGlzLl9maXJlQ2xpY2smJnQmJnQuY2hhbmdlZFRvdWNoZXMpe3ZhciBpPXQuY2hhbmdlZFRvdWNoZXNbMF0sbj1pLnRhcmdldDtuJiZuLnRhZ05hbWUmJiJhIj09PW4udGFnTmFtZS50b0xvd2VyQ2FzZSgpJiZvLkRvbVV0aWwucmVtb3ZlQ2xhc3MobiwibGVhZmxldC1hY3RpdmUiKSx0aGlzLl9pc1RhcFZhbGlkKCkmJnRoaXMuX3NpbXVsYXRlRXZlbnQoImNsaWNrIixpKX19LF9pc1RhcFZhbGlkOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX25ld1Bvcy5kaXN0YW5jZVRvKHRoaXMuX3N0YXJ0UG9zKTw9dGhpcy5fbWFwLm9wdGlvbnMudGFwVG9sZXJhbmNlfSxfb25Nb3ZlOmZ1bmN0aW9uKHQpe3ZhciBlPXQudG91Y2hlc1swXTt0aGlzLl9uZXdQb3M9bmV3IG8uUG9pbnQoZS5jbGllbnRYLGUuY2xpZW50WSl9LF9zaW11bGF0ZUV2ZW50OmZ1bmN0aW9uKGksbil7dmFyIG89ZS5jcmVhdGVFdmVudCgiTW91c2VFdmVudHMiKTtvLl9zaW11bGF0ZWQ9ITAsbi50YXJnZXQuX3NpbXVsYXRlZENsaWNrPSEwLG8uaW5pdE1vdXNlRXZlbnQoaSwhMCwhMCx0LDEsbi5zY3JlZW5YLG4uc2NyZWVuWSxuLmNsaWVudFgsbi5jbGllbnRZLCExLCExLCExLCExLDAsbnVsbCksbi50YXJnZXQuZGlzcGF0Y2hFdmVudChvKX19KSxvLkJyb3dzZXIudG91Y2gmJiFvLkJyb3dzZXIucG9pbnRlciYmby5NYXAuYWRkSW5pdEhvb2soImFkZEhhbmRsZXIiLCJ0YXAiLG8uTWFwLlRhcCksby5NYXAubWVyZ2VPcHRpb25zKHtib3hab29tOiEwfSksby5NYXAuQm94Wm9vbT1vLkhhbmRsZXIuZXh0ZW5kKHtpbml0aWFsaXplOmZ1bmN0aW9uKHQpe3RoaXMuX21hcD10LHRoaXMuX2NvbnRhaW5lcj10Ll9jb250YWluZXIsdGhpcy5fcGFuZT10Ll9wYW5lcy5vdmVybGF5UGFuZSx0aGlzLl9tb3ZlZD0hMX0sYWRkSG9va3M6ZnVuY3Rpb24oKXtvLkRvbUV2ZW50Lm9uKHRoaXMuX2NvbnRhaW5lciwibW91c2Vkb3duIix0aGlzLl9vbk1vdXNlRG93bix0aGlzKX0scmVtb3ZlSG9va3M6ZnVuY3Rpb24oKXtvLkRvbUV2ZW50Lm9mZih0aGlzLl9jb250YWluZXIsIm1vdXNlZG93biIsdGhpcy5fb25Nb3VzZURvd24pLHRoaXMuX21vdmVkPSExfSxtb3ZlZDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9tb3ZlZH0sX29uTW91c2VEb3duOmZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLl9tb3ZlZD0hMSwhdC5zaGlmdEtleXx8MSE9PXQud2hpY2gmJjEhPT10LmJ1dHRvbj8hMTooby5Eb21VdGlsLmRpc2FibGVUZXh0U2VsZWN0aW9uKCksby5Eb21VdGlsLmRpc2FibGVJbWFnZURyYWcoKSx0aGlzLl9zdGFydExheWVyUG9pbnQ9dGhpcy5fbWFwLm1vdXNlRXZlbnRUb0xheWVyUG9pbnQodCksdm9pZCBvLkRvbUV2ZW50Lm9uKGUsIm1vdXNlbW92ZSIsdGhpcy5fb25Nb3VzZU1vdmUsdGhpcykub24oZSwibW91c2V1cCIsdGhpcy5fb25Nb3VzZVVwLHRoaXMpLm9uKGUsImtleWRvd24iLHRoaXMuX29uS2V5RG93bix0aGlzKSl9LF9vbk1vdXNlTW92ZTpmdW5jdGlvbih0KXt0aGlzLl9tb3ZlZHx8KHRoaXMuX2JveD1vLkRvbVV0aWwuY3JlYXRlKCJkaXYiLCJsZWFmbGV0LXpvb20tYm94Iix0aGlzLl9wYW5lKSxvLkRvbVV0aWwuc2V0UG9zaXRpb24odGhpcy5fYm94LHRoaXMuX3N0YXJ0TGF5ZXJQb2ludCksdGhpcy5fY29udGFpbmVyLnN0eWxlLmN1cnNvcj0iY3Jvc3NoYWlyIix0aGlzLl9tYXAuZmlyZSgiYm94em9vbXN0YXJ0IikpO3ZhciBlPXRoaXMuX3N0YXJ0TGF5ZXJQb2ludCxpPXRoaXMuX2JveCxuPXRoaXMuX21hcC5tb3VzZUV2ZW50VG9MYXllclBvaW50KHQpLHM9bi5zdWJ0cmFjdChlKSxhPW5ldyBvLlBvaW50KE1hdGgubWluKG4ueCxlLngpLE1hdGgubWluKG4ueSxlLnkpKTtvLkRvbVV0aWwuc2V0UG9zaXRpb24oaSxhKSx0aGlzLl9tb3ZlZD0hMCxpLnN0eWxlLndpZHRoPU1hdGgubWF4KDAsTWF0aC5hYnMocy54KS00KSsicHgiLGkuc3R5bGUuaGVpZ2h0PU1hdGgubWF4KDAsTWF0aC5hYnMocy55KS00KSsicHgifSxfZmluaXNoOmZ1bmN0aW9uKCl7dGhpcy5fbW92ZWQmJih0aGlzLl9wYW5lLnJlbW92ZUNoaWxkKHRoaXMuX2JveCksdGhpcy5fY29udGFpbmVyLnN0eWxlLmN1cnNvcj0iIiksby5Eb21VdGlsLmVuYWJsZVRleHRTZWxlY3Rpb24oKSxvLkRvbVV0aWwuZW5hYmxlSW1hZ2VEcmFnKCksby5Eb21FdmVudC5vZmYoZSwibW91c2Vtb3ZlIix0aGlzLl9vbk1vdXNlTW92ZSkub2ZmKGUsIm1vdXNldXAiLHRoaXMuX29uTW91c2VVcCkub2ZmKGUsImtleWRvd24iLHRoaXMuX29uS2V5RG93bil9LF9vbk1vdXNlVXA6ZnVuY3Rpb24odCl7dGhpcy5fZmluaXNoKCk7dmFyIGU9dGhpcy5fbWFwLGk9ZS5tb3VzZUV2ZW50VG9MYXllclBvaW50KHQpO2lmKCF0aGlzLl9zdGFydExheWVyUG9pbnQuZXF1YWxzKGkpKXt2YXIgbj1uZXcgby5MYXRMbmdCb3VuZHMoZS5sYXllclBvaW50VG9MYXRMbmcodGhpcy5fc3RhcnRMYXllclBvaW50KSxlLmxheWVyUG9pbnRUb0xhdExuZyhpKSk7ZS5maXRCb3VuZHMobiksZS5maXJlKCJib3h6b29tZW5kIix7Ym94Wm9vbUJvdW5kczpufSl9fSxfb25LZXlEb3duOmZ1bmN0aW9uKHQpezI3PT09dC5rZXlDb2RlJiZ0aGlzLl9maW5pc2goKX19KSxvLk1hcC5hZGRJbml0SG9vaygiYWRkSGFuZGxlciIsImJveFpvb20iLG8uTWFwLkJveFpvb20pLG8uTWFwLm1lcmdlT3B0aW9ucyh7a2V5Ym9hcmQ6ITAsa2V5Ym9hcmRQYW5PZmZzZXQ6ODAsa2V5Ym9hcmRab29tT2Zmc2V0OjF9KSxvLk1hcC5LZXlib2FyZD1vLkhhbmRsZXIuZXh0ZW5kKHtrZXlDb2Rlczp7bGVmdDpbMzddLHJpZ2h0OlszOV0sZG93bjpbNDBdLHVwOlszOF0sem9vbUluOlsxODcsMTA3LDYxLDE3MV0sem9vbU91dDpbMTg5LDEwOSwxNzNdfSxpbml0aWFsaXplOmZ1bmN0aW9uKHQpe3RoaXMuX21hcD10LHRoaXMuX3NldFBhbk9mZnNldCh0Lm9wdGlvbnMua2V5Ym9hcmRQYW5PZmZzZXQpLHRoaXMuX3NldFpvb21PZmZzZXQodC5vcHRpb25zLmtleWJvYXJkWm9vbU9mZnNldCl9LGFkZEhvb2tzOmZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5fbWFwLl9jb250YWluZXI7LTE9PT10LnRhYkluZGV4JiYodC50YWJJbmRleD0iMCIpLG8uRG9tRXZlbnQub24odCwiZm9jdXMiLHRoaXMuX29uRm9jdXMsdGhpcykub24odCwiYmx1ciIsdGhpcy5fb25CbHVyLHRoaXMpLm9uKHQsIm1vdXNlZG93biIsdGhpcy5fb25Nb3VzZURvd24sdGhpcyksdGhpcy5fbWFwLm9uKCJmb2N1cyIsdGhpcy5fYWRkSG9va3MsdGhpcykub24oImJsdXIiLHRoaXMuX3JlbW92ZUhvb2tzLHRoaXMpfSxyZW1vdmVIb29rczpmdW5jdGlvbigpe3RoaXMuX3JlbW92ZUhvb2tzKCk7dmFyIHQ9dGhpcy5fbWFwLl9jb250YWluZXI7by5Eb21FdmVudC5vZmYodCwiZm9jdXMiLHRoaXMuX29uRm9jdXMsdGhpcykub2ZmKHQsImJsdXIiLHRoaXMuX29uQmx1cix0aGlzKS5vZmYodCwibW91c2Vkb3duIix0aGlzLl9vbk1vdXNlRG93bix0aGlzKSx0aGlzLl9tYXAub2ZmKCJmb2N1cyIsdGhpcy5fYWRkSG9va3MsdGhpcykub2ZmKCJibHVyIix0aGlzLl9yZW1vdmVIb29rcyx0aGlzKX0sX29uTW91c2VEb3duOmZ1bmN0aW9uKCl7aWYoIXRoaXMuX2ZvY3VzZWQpe3ZhciBpPWUuYm9keSxuPWUuZG9jdW1lbnRFbGVtZW50LG89aS5zY3JvbGxUb3B8fG4uc2Nyb2xsVG9wLHM9aS5zY3JvbGxMZWZ0fHxuLnNjcm9sbExlZnQ7dGhpcy5fbWFwLl9jb250YWluZXIuZm9jdXMoKSx0LnNjcm9sbFRvKHMsbyl9fSxfb25Gb2N1czpmdW5jdGlvbigpe3RoaXMuX2ZvY3VzZWQ9ITAsdGhpcy5fbWFwLmZpcmUoImZvY3VzIil9LF9vbkJsdXI6ZnVuY3Rpb24oKXt0aGlzLl9mb2N1c2VkPSExLHRoaXMuX21hcC5maXJlKCJibHVyIil9LF9zZXRQYW5PZmZzZXQ6ZnVuY3Rpb24odCl7dmFyIGUsaSxuPXRoaXMuX3BhbktleXM9e30sbz10aGlzLmtleUNvZGVzO2ZvcihlPTAsaT1vLmxlZnQubGVuZ3RoO2k+ZTtlKyspbltvLmxlZnRbZV1dPVstMSp0LDBdO2ZvcihlPTAsaT1vLnJpZ2h0Lmxlbmd0aDtpPmU7ZSsrKW5bby5yaWdodFtlXV09W3QsMF07Zm9yKGU9MCxpPW8uZG93bi5sZW5ndGg7aT5lO2UrKyluW28uZG93bltlXV09WzAsdF07Zm9yKGU9MCxpPW8udXAubGVuZ3RoO2k+ZTtlKyspbltvLnVwW2VdXT1bMCwtMSp0XX0sX3NldFpvb21PZmZzZXQ6ZnVuY3Rpb24odCl7dmFyIGUsaSxuPXRoaXMuX3pvb21LZXlzPXt9LG89dGhpcy5rZXlDb2Rlcztmb3IoZT0wLGk9by56b29tSW4ubGVuZ3RoO2k+ZTtlKyspbltvLnpvb21JbltlXV09dDtmb3IoZT0wLGk9by56b29tT3V0Lmxlbmd0aDtpPmU7ZSsrKW5bby56b29tT3V0W2VdXT0tdH0sX2FkZEhvb2tzOmZ1bmN0aW9uKCl7by5Eb21FdmVudC5vbihlLCJrZXlkb3duIix0aGlzLl9vbktleURvd24sdGhpcyl9LF9yZW1vdmVIb29rczpmdW5jdGlvbigpe28uRG9tRXZlbnQub2ZmKGUsImtleWRvd24iLHRoaXMuX29uS2V5RG93bix0aGlzKX0sX29uS2V5RG93bjpmdW5jdGlvbih0KXt2YXIgZT10LmtleUNvZGUsaT10aGlzLl9tYXA7aWYoZSBpbiB0aGlzLl9wYW5LZXlzKXtpZihpLl9wYW5BbmltJiZpLl9wYW5BbmltLl9pblByb2dyZXNzKXJldHVybjtpLnBhbkJ5KHRoaXMuX3BhbktleXNbZV0pLGkub3B0aW9ucy5tYXhCb3VuZHMmJmkucGFuSW5zaWRlQm91bmRzKGkub3B0aW9ucy5tYXhCb3VuZHMpfWVsc2V7aWYoIShlIGluIHRoaXMuX3pvb21LZXlzKSlyZXR1cm47aS5zZXRab29tKGkuZ2V0Wm9vbSgpK3RoaXMuX3pvb21LZXlzW2VdKX1vLkRvbUV2ZW50LnN0b3AodCl9fSksby5NYXAuYWRkSW5pdEhvb2soImFkZEhhbmRsZXIiLCJrZXlib2FyZCIsby5NYXAuS2V5Ym9hcmQpLG8uSGFuZGxlci5NYXJrZXJEcmFnPW8uSGFuZGxlci5leHRlbmQoe2luaXRpYWxpemU6ZnVuY3Rpb24odCl7dGhpcy5fbWFya2VyPXR9LGFkZEhvb2tzOmZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5fbWFya2VyLl9pY29uO3RoaXMuX2RyYWdnYWJsZXx8KHRoaXMuX2RyYWdnYWJsZT1uZXcgby5EcmFnZ2FibGUodCx0KSksdGhpcy5fZHJhZ2dhYmxlLm9uKCJkcmFnc3RhcnQiLHRoaXMuX29uRHJhZ1N0YXJ0LHRoaXMpLm9uKCJkcmFnIix0aGlzLl9vbkRyYWcsdGhpcykub24oImRyYWdlbmQiLHRoaXMuX29uRHJhZ0VuZCx0aGlzKSx0aGlzLl9kcmFnZ2FibGUuZW5hYmxlKCksby5Eb21VdGlsLmFkZENsYXNzKHRoaXMuX21hcmtlci5faWNvbiwibGVhZmxldC1tYXJrZXItZHJhZ2dhYmxlIil9LHJlbW92ZUhvb2tzOmZ1bmN0aW9uKCl7dGhpcy5fZHJhZ2dhYmxlLm9mZigiZHJhZ3N0YXJ0Iix0aGlzLl9vbkRyYWdTdGFydCx0aGlzKS5vZmYoImRyYWciLHRoaXMuX29uRHJhZyx0aGlzKS5vZmYoImRyYWdlbmQiLHRoaXMuX29uRHJhZ0VuZCx0aGlzKSx0aGlzLl9kcmFnZ2FibGUuZGlzYWJsZSgpLG8uRG9tVXRpbC5yZW1vdmVDbGFzcyh0aGlzLl9tYXJrZXIuX2ljb24sImxlYWZsZXQtbWFya2VyLWRyYWdnYWJsZSIpfSxtb3ZlZDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9kcmFnZ2FibGUmJnRoaXMuX2RyYWdnYWJsZS5fbW92ZWR9LF9vbkRyYWdTdGFydDpmdW5jdGlvbigpe3RoaXMuX21hcmtlci5jbG9zZVBvcHVwKCkuZmlyZSgibW92ZXN0YXJ0IikuZmlyZSgiZHJhZ3N0YXJ0Iil9LF9vbkRyYWc6ZnVuY3Rpb24oKXt2YXIgdD10aGlzLl9tYXJrZXIsZT10Ll9zaGFkb3csaT1vLkRvbVV0aWwuZ2V0UG9zaXRpb24odC5faWNvbiksbj10Ll9tYXAubGF5ZXJQb2ludFRvTGF0TG5nKGkpO2UmJm8uRG9tVXRpbC5zZXRQb3NpdGlvbihlLGkpLHQuX2xhdGxuZz1uLHQuZmlyZSgibW92ZSIse2xhdGxuZzpufSkuZmlyZSgiZHJhZyIpfSxfb25EcmFnRW5kOmZ1bmN0aW9uKHQpe3RoaXMuX21hcmtlci5maXJlKCJtb3ZlZW5kIikuZmlyZSgiZHJhZ2VuZCIsdCl9fSksby5Db250cm9sPW8uQ2xhc3MuZXh0ZW5kKHtvcHRpb25zOntwb3NpdGlvbjoidG9wcmlnaHQifSxpbml0aWFsaXplOmZ1bmN0aW9uKHQpe28uc2V0T3B0aW9ucyh0aGlzLHQpfSxnZXRQb3NpdGlvbjpmdW5jdGlvbigpe3JldHVybiB0aGlzLm9wdGlvbnMucG9zaXRpb259LHNldFBvc2l0aW9uOmZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMuX21hcDtyZXR1cm4gZSYmZS5yZW1vdmVDb250cm9sKHRoaXMpLHRoaXMub3B0aW9ucy5wb3NpdGlvbj10LGUmJmUuYWRkQ29udHJvbCh0aGlzKSx0aGlzfSxnZXRDb250YWluZXI6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fY29udGFpbmVyfSxhZGRUbzpmdW5jdGlvbih0KXt0aGlzLl9tYXA9dDt2YXIgZT10aGlzLl9jb250YWluZXI9dGhpcy5vbkFkZCh0KSxpPXRoaXMuZ2V0UG9zaXRpb24oKSxuPXQuX2NvbnRyb2xDb3JuZXJzW2ldO3JldHVybiBvLkRvbVV0aWwuYWRkQ2xhc3MoZSwibGVhZmxldC1jb250cm9sIiksLTEhPT1pLmluZGV4T2YoImJvdHRvbSIpP24uaW5zZXJ0QmVmb3JlKGUsbi5maXJzdENoaWxkKTpuLmFwcGVuZENoaWxkKGUpLHRoaXN9LHJlbW92ZUZyb206ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5nZXRQb3NpdGlvbigpLGk9dC5fY29udHJvbENvcm5lcnNbZV07cmV0dXJuIGkucmVtb3ZlQ2hpbGQodGhpcy5fY29udGFpbmVyKSx0aGlzLl9tYXA9bnVsbCx0aGlzLm9uUmVtb3ZlJiZ0aGlzLm9uUmVtb3ZlKHQpLHRoaXN9LF9yZWZvY3VzT25NYXA6ZnVuY3Rpb24oKXt0aGlzLl9tYXAmJnRoaXMuX21hcC5nZXRDb250YWluZXIoKS5mb2N1cygpfX0pLG8uY29udHJvbD1mdW5jdGlvbih0KXtyZXR1cm4gbmV3IG8uQ29udHJvbCh0KX0sby5NYXAuaW5jbHVkZSh7YWRkQ29udHJvbDpmdW5jdGlvbih0KXtyZXR1cm4gdC5hZGRUbyh0aGlzKSx0aGlzfSxyZW1vdmVDb250cm9sOmZ1bmN0aW9uKHQpe3JldHVybiB0LnJlbW92ZUZyb20odGhpcyksdGhpc30sX2luaXRDb250cm9sUG9zOmZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCh0LHMpe3ZhciBhPWkrdCsiICIraStzO2VbdCtzXT1vLkRvbVV0aWwuY3JlYXRlKCJkaXYiLGEsbil9dmFyIGU9dGhpcy5fY29udHJvbENvcm5lcnM9e30saT0ibGVhZmxldC0iLG49dGhpcy5fY29udHJvbENvbnRhaW5lcj1vLkRvbVV0aWwuY3JlYXRlKCJkaXYiLGkrImNvbnRyb2wtY29udGFpbmVyIix0aGlzLl9jb250YWluZXIpO3QoInRvcCIsImxlZnQiKSx0KCJ0b3AiLCJyaWdodCIpLHQoImJvdHRvbSIsImxlZnQiKSx0KCJib3R0b20iLCJyaWdodCIpfSxfY2xlYXJDb250cm9sUG9zOmZ1bmN0aW9uKCl7dGhpcy5fY29udGFpbmVyLnJlbW92ZUNoaWxkKHRoaXMuX2NvbnRyb2xDb250YWluZXIpfX0pLG8uQ29udHJvbC5ab29tPW8uQ29udHJvbC5leHRlbmQoe29wdGlvbnM6e3Bvc2l0aW9uOiJ0b3BsZWZ0Iix6b29tSW5UZXh0OiIrIix6b29tSW5UaXRsZToiWm9vbSBpbiIsem9vbU91dFRleHQ6Ii0iLHpvb21PdXRUaXRsZToiWm9vbSBvdXQifSxvbkFkZDpmdW5jdGlvbih0KXt2YXIgZT0ibGVhZmxldC1jb250cm9sLXpvb20iLGk9by5Eb21VdGlsLmNyZWF0ZSgiZGl2IixlKyIgbGVhZmxldC1iYXIiKTtyZXR1cm4gdGhpcy5fbWFwPXQsdGhpcy5fem9vbUluQnV0dG9uPXRoaXMuX2NyZWF0ZUJ1dHRvbih0aGlzLm9wdGlvbnMuem9vbUluVGV4dCx0aGlzLm9wdGlvbnMuem9vbUluVGl0bGUsZSsiLWluIixpLHRoaXMuX3pvb21Jbix0aGlzKSx0aGlzLl96b29tT3V0QnV0dG9uPXRoaXMuX2NyZWF0ZUJ1dHRvbih0aGlzLm9wdGlvbnMuem9vbU91dFRleHQsdGhpcy5vcHRpb25zLnpvb21PdXRUaXRsZSxlKyItb3V0IixpLHRoaXMuX3pvb21PdXQsdGhpcyksdGhpcy5fdXBkYXRlRGlzYWJsZWQoKSx0Lm9uKCJ6b29tZW5kIHpvb21sZXZlbHNjaGFuZ2UiLHRoaXMuX3VwZGF0ZURpc2FibGVkLHRoaXMpLGl9LG9uUmVtb3ZlOmZ1bmN0aW9uKHQpe3Qub2ZmKCJ6b29tZW5kIHpvb21sZXZlbHNjaGFuZ2UiLHRoaXMuX3VwZGF0ZURpc2FibGVkLHRoaXMpfSxfem9vbUluOmZ1bmN0aW9uKHQpe3RoaXMuX21hcC56b29tSW4odC5zaGlmdEtleT8zOjEpfSxfem9vbU91dDpmdW5jdGlvbih0KXt0aGlzLl9tYXAuem9vbU91dCh0LnNoaWZ0S2V5PzM6MSl9LF9jcmVhdGVCdXR0b246ZnVuY3Rpb24odCxlLGksbixzLGEpe3ZhciByPW8uRG9tVXRpbC5jcmVhdGUoImEiLGksbik7ci5pbm5lckhUTUw9dCxyLmhyZWY9IiMiLHIudGl0bGU9ZTt2YXIgaD1vLkRvbUV2ZW50LnN0b3BQcm9wYWdhdGlvbjtyZXR1cm4gby5Eb21FdmVudC5vbihyLCJjbGljayIsaCkub24ociwibW91c2Vkb3duIixoKS5vbihyLCJkYmxjbGljayIsaCkub24ociwiY2xpY2siLG8uRG9tRXZlbnQucHJldmVudERlZmF1bHQpLm9uKHIsImNsaWNrIixzLGEpLm9uKHIsImNsaWNrIix0aGlzLl9yZWZvY3VzT25NYXAsYSkscn0sX3VwZGF0ZURpc2FibGVkOmZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5fbWFwLGU9ImxlYWZsZXQtZGlzYWJsZWQiO28uRG9tVXRpbC5yZW1vdmVDbGFzcyh0aGlzLl96b29tSW5CdXR0b24sZSksby5Eb21VdGlsLnJlbW92ZUNsYXNzKHRoaXMuX3pvb21PdXRCdXR0b24sZSksdC5fem9vbT09PXQuZ2V0TWluWm9vbSgpJiZvLkRvbVV0aWwuYWRkQ2xhc3ModGhpcy5fem9vbU91dEJ1dHRvbixlKSx0Ll96b29tPT09dC5nZXRNYXhab29tKCkmJm8uRG9tVXRpbC5hZGRDbGFzcyh0aGlzLl96b29tSW5CdXR0b24sZSl9fSksby5NYXAubWVyZ2VPcHRpb25zKHt6b29tQ29udHJvbDohMH0pLG8uTWFwLmFkZEluaXRIb29rKGZ1bmN0aW9uKCl7dGhpcy5vcHRpb25zLnpvb21Db250cm9sJiYodGhpcy56b29tQ29udHJvbD1uZXcgby5Db250cm9sLlpvb20sdGhpcy5hZGRDb250cm9sKHRoaXMuem9vbUNvbnRyb2wpKX0pLG8uY29udHJvbC56b29tPWZ1bmN0aW9uKHQpe3JldHVybiBuZXcgby5Db250cm9sLlpvb20odCl9LG8uQ29udHJvbC5BdHRyaWJ1dGlvbj1vLkNvbnRyb2wuZXh0ZW5kKHtvcHRpb25zOntwb3NpdGlvbjoiYm90dG9tcmlnaHQiLHByZWZpeDonPGEgaHJlZj0iaHR0cDovL2xlYWZsZXRqcy5jb20iIHRpdGxlPSJBIEpTIGxpYnJhcnkgZm9yIGludGVyYWN0aXZlIG1hcHMiPkxlYWZsZXQ8L2E+J30saW5pdGlhbGl6ZTpmdW5jdGlvbih0KXtvLnNldE9wdGlvbnModGhpcyx0KSx0aGlzLl9hdHRyaWJ1dGlvbnM9e319LG9uQWRkOmZ1bmN0aW9uKHQpe3RoaXMuX2NvbnRhaW5lcj1vLkRvbVV0aWwuY3JlYXRlKCJkaXYiLCJsZWFmbGV0LWNvbnRyb2wtYXR0cmlidXRpb24iKSxvLkRvbUV2ZW50LmRpc2FibGVDbGlja1Byb3BhZ2F0aW9uKHRoaXMuX2NvbnRhaW5lcik7Zm9yKHZhciBlIGluIHQuX2xheWVycyl0Ll9sYXllcnNbZV0uZ2V0QXR0cmlidXRpb24mJnRoaXMuYWRkQXR0cmlidXRpb24odC5fbGF5ZXJzW2VdLmdldEF0dHJpYnV0aW9uKCkpO3JldHVybiB0Lm9uKCJsYXllcmFkZCIsdGhpcy5fb25MYXllckFkZCx0aGlzKS5vbigibGF5ZXJyZW1vdmUiLHRoaXMuX29uTGF5ZXJSZW1vdmUsdGhpcyksdGhpcy5fdXBkYXRlKCksdGhpcy5fY29udGFpbmVyfSxvblJlbW92ZTpmdW5jdGlvbih0KXt0Lm9mZigibGF5ZXJhZGQiLHRoaXMuX29uTGF5ZXJBZGQpLm9mZigibGF5ZXJyZW1vdmUiLHRoaXMuX29uTGF5ZXJSZW1vdmUpfSxzZXRQcmVmaXg6ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMub3B0aW9ucy5wcmVmaXg9dCx0aGlzLl91cGRhdGUoKSx0aGlzfSxhZGRBdHRyaWJ1dGlvbjpmdW5jdGlvbih0KXtyZXR1cm4gdD8odGhpcy5fYXR0cmlidXRpb25zW3RdfHwodGhpcy5fYXR0cmlidXRpb25zW3RdPTApLHRoaXMuX2F0dHJpYnV0aW9uc1t0XSsrLHRoaXMuX3VwZGF0ZSgpLHRoaXMpOnZvaWQgMH0scmVtb3ZlQXR0cmlidXRpb246ZnVuY3Rpb24odCl7cmV0dXJuIHQ/KHRoaXMuX2F0dHJpYnV0aW9uc1t0XSYmKHRoaXMuX2F0dHJpYnV0aW9uc1t0XS0tLHRoaXMuX3VwZGF0ZSgpKSx0aGlzKTp2b2lkIDB9LF91cGRhdGU6ZnVuY3Rpb24oKXtpZih0aGlzLl9tYXApe3ZhciB0PVtdO2Zvcih2YXIgZSBpbiB0aGlzLl9hdHRyaWJ1dGlvbnMpdGhpcy5fYXR0cmlidXRpb25zW2VdJiZ0LnB1c2goZSk7dmFyIGk9W107dGhpcy5vcHRpb25zLnByZWZpeCYmaS5wdXNoKHRoaXMub3B0aW9ucy5wcmVmaXgpLHQubGVuZ3RoJiZpLnB1c2godC5qb2luKCIsICIpKSx0aGlzLl9jb250YWluZXIuaW5uZXJIVE1MPWkuam9pbigiIHwgIil9fSxfb25MYXllckFkZDpmdW5jdGlvbih0KXt0LmxheWVyLmdldEF0dHJpYnV0aW9uJiZ0aGlzLmFkZEF0dHJpYnV0aW9uKHQubGF5ZXIuZ2V0QXR0cmlidXRpb24oKSl9LF9vbkxheWVyUmVtb3ZlOmZ1bmN0aW9uKHQpe3QubGF5ZXIuZ2V0QXR0cmlidXRpb24mJnRoaXMucmVtb3ZlQXR0cmlidXRpb24odC5sYXllci5nZXRBdHRyaWJ1dGlvbigpKX19KSxvLk1hcC5tZXJnZU9wdGlvbnMoe2F0dHJpYnV0aW9uQ29udHJvbDohMH0pLG8uTWFwLmFkZEluaXRIb29rKGZ1bmN0aW9uKCl7dGhpcy5vcHRpb25zLmF0dHJpYnV0aW9uQ29udHJvbCYmKHRoaXMuYXR0cmlidXRpb25Db250cm9sPShuZXcgby5Db250cm9sLkF0dHJpYnV0aW9uKS5hZGRUbyh0aGlzKSl9KSxvLmNvbnRyb2wuYXR0cmlidXRpb249ZnVuY3Rpb24odCl7cmV0dXJuIG5ldyBvLkNvbnRyb2wuQXR0cmlidXRpb24odCl9LG8uQ29udHJvbC5TY2FsZT1vLkNvbnRyb2wuZXh0ZW5kKHtvcHRpb25zOntwb3NpdGlvbjoiYm90dG9tbGVmdCIsbWF4V2lkdGg6MTAwLG1ldHJpYzohMCxpbXBlcmlhbDohMCx1cGRhdGVXaGVuSWRsZTohMX0sb25BZGQ6ZnVuY3Rpb24odCl7dGhpcy5fbWFwPXQ7dmFyIGU9ImxlYWZsZXQtY29udHJvbC1zY2FsZSIsaT1vLkRvbVV0aWwuY3JlYXRlKCJkaXYiLGUpLG49dGhpcy5vcHRpb25zO3JldHVybiB0aGlzLl9hZGRTY2FsZXMobixlLGkpLHQub24obi51cGRhdGVXaGVuSWRsZT8ibW92ZWVuZCI6Im1vdmUiLHRoaXMuX3VwZGF0ZSx0aGlzKSx0LndoZW5SZWFkeSh0aGlzLl91cGRhdGUsdGhpcyksaX0sb25SZW1vdmU6ZnVuY3Rpb24odCl7dC5vZmYodGhpcy5vcHRpb25zLnVwZGF0ZVdoZW5JZGxlPyJtb3ZlZW5kIjoibW92ZSIsdGhpcy5fdXBkYXRlLHRoaXMpfSxfYWRkU2NhbGVzOmZ1bmN0aW9uKHQsZSxpKXt0Lm1ldHJpYyYmKHRoaXMuX21TY2FsZT1vLkRvbVV0aWwuY3JlYXRlKCJkaXYiLGUrIi1saW5lIixpKSksdC5pbXBlcmlhbCYmKHRoaXMuX2lTY2FsZT1vLkRvbVV0aWwuY3JlYXRlKCJkaXYiLGUrIi1saW5lIixpKSl9LF91cGRhdGU6ZnVuY3Rpb24oKXt2YXIgdD10aGlzLl9tYXAuZ2V0Qm91bmRzKCksZT10LmdldENlbnRlcigpLmxhdCxpPTYzNzgxMzcqTWF0aC5QSSpNYXRoLmNvcyhlKk1hdGguUEkvMTgwKSxuPWkqKHQuZ2V0Tm9ydGhFYXN0KCkubG5nLXQuZ2V0U291dGhXZXN0KCkubG5nKS8xODAsbz10aGlzLl9tYXAuZ2V0U2l6ZSgpLHM9dGhpcy5vcHRpb25zLGE9MDtvLng+MCYmKGE9bioocy5tYXhXaWR0aC9vLngpKSx0aGlzLl91cGRhdGVTY2FsZXMocyxhKX0sX3VwZGF0ZVNjYWxlczpmdW5jdGlvbih0LGUpe3QubWV0cmljJiZlJiZ0aGlzLl91cGRhdGVNZXRyaWMoZSksdC5pbXBlcmlhbCYmZSYmdGhpcy5fdXBkYXRlSW1wZXJpYWwoZSl9LF91cGRhdGVNZXRyaWM6ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5fZ2V0Um91bmROdW0odCk7dGhpcy5fbVNjYWxlLnN0eWxlLndpZHRoPXRoaXMuX2dldFNjYWxlV2lkdGgoZS90KSsicHgiLHRoaXMuX21TY2FsZS5pbm5lckhUTUw9MWUzPmU/ZSsiIG0iOmUvMWUzKyIga20ifSxfdXBkYXRlSW1wZXJpYWw6ZnVuY3Rpb24odCl7dmFyIGUsaSxuLG89My4yODA4Mzk5KnQscz10aGlzLl9pU2NhbGU7bz41MjgwPyhlPW8vNTI4MCxpPXRoaXMuX2dldFJvdW5kTnVtKGUpLHMuc3R5bGUud2lkdGg9dGhpcy5fZ2V0U2NhbGVXaWR0aChpL2UpKyJweCIscy5pbm5lckhUTUw9aSsiIG1pIik6KG49dGhpcy5fZ2V0Um91bmROdW0obykscy5zdHlsZS53aWR0aD10aGlzLl9nZXRTY2FsZVdpZHRoKG4vbykrInB4IixzLmlubmVySFRNTD1uKyIgZnQiKX0sX2dldFNjYWxlV2lkdGg6ZnVuY3Rpb24odCl7cmV0dXJuIE1hdGgucm91bmQodGhpcy5vcHRpb25zLm1heFdpZHRoKnQpLTEwfSxfZ2V0Um91bmROdW06ZnVuY3Rpb24odCl7dmFyIGU9TWF0aC5wb3coMTAsKE1hdGguZmxvb3IodCkrIiIpLmxlbmd0aC0xKSxpPXQvZTtyZXR1cm4gaT1pPj0xMD8xMDppPj01PzU6aT49Mz8zOmk+PTI/MjoxLGUqaX19KSxvLmNvbnRyb2wuc2NhbGU9ZnVuY3Rpb24odCl7cmV0dXJuIG5ldyBvLkNvbnRyb2wuU2NhbGUodCl9LG8uQ29udHJvbC5MYXllcnM9by5Db250cm9sLmV4dGVuZCh7b3B0aW9uczp7Y29sbGFwc2VkOiEwLHBvc2l0aW9uOiJ0b3ByaWdodCIsYXV0b1pJbmRleDohMH0saW5pdGlhbGl6ZTpmdW5jdGlvbih0LGUsaSl7by5zZXRPcHRpb25zKHRoaXMsaSksdGhpcy5fbGF5ZXJzPXt9LHRoaXMuX2xhc3RaSW5kZXg9MCx0aGlzLl9oYW5kbGluZ0NsaWNrPSExO2Zvcih2YXIgbiBpbiB0KXRoaXMuX2FkZExheWVyKHRbbl0sbik7Zm9yKG4gaW4gZSl0aGlzLl9hZGRMYXllcihlW25dLG4sITApfSxvbkFkZDpmdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5faW5pdExheW91dCgpLHRoaXMuX3VwZGF0ZSgpLHQub24oImxheWVyYWRkIix0aGlzLl9vbkxheWVyQ2hhbmdlLHRoaXMpLm9uKCJsYXllcnJlbW92ZSIsdGhpcy5fb25MYXllckNoYW5nZSx0aGlzKSx0aGlzLl9jb250YWluZXJ9LG9uUmVtb3ZlOmZ1bmN0aW9uKHQpe3Qub2ZmKCJsYXllcmFkZCIsdGhpcy5fb25MYXllckNoYW5nZSx0aGlzKS5vZmYoImxheWVycmVtb3ZlIix0aGlzLl9vbkxheWVyQ2hhbmdlLHRoaXMpfSxhZGRCYXNlTGF5ZXI6ZnVuY3Rpb24odCxlKXtyZXR1cm4gdGhpcy5fYWRkTGF5ZXIodCxlKSx0aGlzLl91cGRhdGUoKSx0aGlzfSxhZGRPdmVybGF5OmZ1bmN0aW9uKHQsZSl7cmV0dXJuIHRoaXMuX2FkZExheWVyKHQsZSwhMCksdGhpcy5fdXBkYXRlKCksdGhpc30scmVtb3ZlTGF5ZXI6ZnVuY3Rpb24odCl7dmFyIGU9by5zdGFtcCh0KTtyZXR1cm4gZGVsZXRlIHRoaXMuX2xheWVyc1tlXSx0aGlzLl91cGRhdGUoKSx0aGlzfSxfaW5pdExheW91dDpmdW5jdGlvbigpe3ZhciB0PSJsZWFmbGV0LWNvbnRyb2wtbGF5ZXJzIixlPXRoaXMuX2NvbnRhaW5lcj1vLkRvbVV0aWwuY3JlYXRlKCJkaXYiLHQpO2Uuc2V0QXR0cmlidXRlKCJhcmlhLWhhc3BvcHVwIiwhMCksby5Ccm93c2VyLnRvdWNoP28uRG9tRXZlbnQub24oZSwiY2xpY2siLG8uRG9tRXZlbnQuc3RvcFByb3BhZ2F0aW9uKTpvLkRvbUV2ZW50LmRpc2FibGVDbGlja1Byb3BhZ2F0aW9uKGUpLmRpc2FibGVTY3JvbGxQcm9wYWdhdGlvbihlKTt2YXIgaT10aGlzLl9mb3JtPW8uRG9tVXRpbC5jcmVhdGUoImZvcm0iLHQrIi1saXN0Iik7aWYodGhpcy5vcHRpb25zLmNvbGxhcHNlZCl7by5Ccm93c2VyLmFuZHJvaWR8fG8uRG9tRXZlbnQub24oZSwibW91c2VvdmVyIix0aGlzLl9leHBhbmQsdGhpcykub24oZSwibW91c2VvdXQiLHRoaXMuX2NvbGxhcHNlLHRoaXMpO3ZhciBuPXRoaXMuX2xheWVyc0xpbms9by5Eb21VdGlsLmNyZWF0ZSgiYSIsdCsiLXRvZ2dsZSIsZSk7bi5ocmVmPSIjIixuLnRpdGxlPSJMYXllcnMiLG8uQnJvd3Nlci50b3VjaD9vLkRvbUV2ZW50Lm9uKG4sImNsaWNrIixvLkRvbUV2ZW50LnN0b3ApLm9uKG4sImNsaWNrIix0aGlzLl9leHBhbmQsdGhpcyk6by5Eb21FdmVudC5vbihuLCJmb2N1cyIsdGhpcy5fZXhwYW5kLHRoaXMpLG8uRG9tRXZlbnQub24oaSwiY2xpY2siLGZ1bmN0aW9uKCl7c2V0VGltZW91dChvLmJpbmQodGhpcy5fb25JbnB1dENsaWNrLHRoaXMpLDApfSx0aGlzKSx0aGlzLl9tYXAub24oImNsaWNrIix0aGlzLl9jb2xsYXBzZSx0aGlzKX1lbHNlIHRoaXMuX2V4cGFuZCgpO3RoaXMuX2Jhc2VMYXllcnNMaXN0PW8uRG9tVXRpbC5jcmVhdGUoImRpdiIsdCsiLWJhc2UiLGkpLHRoaXMuX3NlcGFyYXRvcj1vLkRvbVV0aWwuY3JlYXRlKCJkaXYiLHQrIi1zZXBhcmF0b3IiLGkpLHRoaXMuX292ZXJsYXlzTGlzdD1vLkRvbVV0aWwuY3JlYXRlKCJkaXYiLHQrIi1vdmVybGF5cyIsaSksZS5hcHBlbmRDaGlsZChpKX0sX2FkZExheWVyOmZ1bmN0aW9uKHQsZSxpKXt2YXIgbj1vLnN0YW1wKHQpO3RoaXMuX2xheWVyc1tuXT17bGF5ZXI6dCxuYW1lOmUsb3ZlcmxheTppfSx0aGlzLm9wdGlvbnMuYXV0b1pJbmRleCYmdC5zZXRaSW5kZXgmJih0aGlzLl9sYXN0WkluZGV4KyssdC5zZXRaSW5kZXgodGhpcy5fbGFzdFpJbmRleCkpfSxfdXBkYXRlOmZ1bmN0aW9uKCl7aWYodGhpcy5fY29udGFpbmVyKXt0aGlzLl9iYXNlTGF5ZXJzTGlzdC5pbm5lckhUTUw9IiIsdGhpcy5fb3ZlcmxheXNMaXN0LmlubmVySFRNTD0iIjt2YXIgdCxlLGk9ITEsbj0hMTtmb3IodCBpbiB0aGlzLl9sYXllcnMpZT10aGlzLl9sYXllcnNbdF0sdGhpcy5fYWRkSXRlbShlKSxuPW58fGUub3ZlcmxheSxpPWl8fCFlLm92ZXJsYXk7dGhpcy5fc2VwYXJhdG9yLnN0eWxlLmRpc3BsYXk9biYmaT8iIjoibm9uZSJ9fSxfb25MYXllckNoYW5nZTpmdW5jdGlvbih0KXt2YXIgZT10aGlzLl9sYXllcnNbby5zdGFtcCh0LmxheWVyKV07aWYoZSl7dGhpcy5faGFuZGxpbmdDbGlja3x8dGhpcy5fdXBkYXRlKCk7dmFyIGk9ZS5vdmVybGF5PyJsYXllcmFkZCI9PT10LnR5cGU/Im92ZXJsYXlhZGQiOiJvdmVybGF5cmVtb3ZlIjoibGF5ZXJhZGQiPT09dC50eXBlPyJiYXNlbGF5ZXJjaGFuZ2UiOm51bGw7aSYmdGhpcy5fbWFwLmZpcmUoaSxlKX19LF9jcmVhdGVSYWRpb0VsZW1lbnQ6ZnVuY3Rpb24odCxpKXt2YXIgbj0nPGlucHV0IHR5cGU9InJhZGlvIiBjbGFzcz0ibGVhZmxldC1jb250cm9sLWxheWVycy1zZWxlY3RvciIgbmFtZT0iJyt0KyciJztpJiYobis9JyBjaGVja2VkPSJjaGVja2VkIicpLG4rPSIvPiI7dmFyIG89ZS5jcmVhdGVFbGVtZW50KCJkaXYiKTtyZXR1cm4gby5pbm5lckhUTUw9bixvLmZpcnN0Q2hpbGR9LF9hZGRJdGVtOmZ1bmN0aW9uKHQpe3ZhciBpLG49ZS5jcmVhdGVFbGVtZW50KCJsYWJlbCIpLHM9dGhpcy5fbWFwLmhhc0xheWVyKHQubGF5ZXIpO3Qub3ZlcmxheT8oaT1lLmNyZWF0ZUVsZW1lbnQoImlucHV0IiksaS50eXBlPSJjaGVja2JveCIsaS5jbGFzc05hbWU9ImxlYWZsZXQtY29udHJvbC1sYXllcnMtc2VsZWN0b3IiLGkuZGVmYXVsdENoZWNrZWQ9cyk6aT10aGlzLl9jcmVhdGVSYWRpb0VsZW1lbnQoImxlYWZsZXQtYmFzZS1sYXllcnMiLHMpLGkubGF5ZXJJZD1vLnN0YW1wKHQubGF5ZXIpLG8uRG9tRXZlbnQub24oaSwiY2xpY2siLHRoaXMuX29uSW5wdXRDbGljayx0aGlzKTt2YXIgYT1lLmNyZWF0ZUVsZW1lbnQoInNwYW4iKTthLmlubmVySFRNTD0iICIrdC5uYW1lLG4uYXBwZW5kQ2hpbGQoaSksbi5hcHBlbmRDaGlsZChhKTt2YXIgcj10Lm92ZXJsYXk/dGhpcy5fb3ZlcmxheXNMaXN0OnRoaXMuX2Jhc2VMYXllcnNMaXN0O3JldHVybiByLmFwcGVuZENoaWxkKG4pLG59LF9vbklucHV0Q2xpY2s6ZnVuY3Rpb24oKXt2YXIgdCxlLGksbj10aGlzLl9mb3JtLmdldEVsZW1lbnRzQnlUYWdOYW1lKCJpbnB1dCIpLG89bi5sZW5ndGg7Zm9yKHRoaXMuX2hhbmRsaW5nQ2xpY2s9ITAsdD0wO28+dDt0KyspZT1uW3RdLGk9dGhpcy5fbGF5ZXJzW2UubGF5ZXJJZF0sZS5jaGVja2VkJiYhdGhpcy5fbWFwLmhhc0xheWVyKGkubGF5ZXIpP3RoaXMuX21hcC5hZGRMYXllcihpLmxheWVyKTohZS5jaGVja2VkJiZ0aGlzLl9tYXAuaGFzTGF5ZXIoaS5sYXllcikmJnRoaXMuX21hcC5yZW1vdmVMYXllcihpLmxheWVyKTt0aGlzLl9oYW5kbGluZ0NsaWNrPSExLHRoaXMuX3JlZm9jdXNPbk1hcCgpfSxfZXhwYW5kOmZ1bmN0aW9uKCl7by5Eb21VdGlsLmFkZENsYXNzKHRoaXMuX2NvbnRhaW5lciwibGVhZmxldC1jb250cm9sLWxheWVycy1leHBhbmRlZCIpfSxfY29sbGFwc2U6ZnVuY3Rpb24oKXt0aGlzLl9jb250YWluZXIuY2xhc3NOYW1lPXRoaXMuX2NvbnRhaW5lci5jbGFzc05hbWUucmVwbGFjZSgiIGxlYWZsZXQtY29udHJvbC1sYXllcnMtZXhwYW5kZWQiLCIiKX19KSxvLmNvbnRyb2wubGF5ZXJzPWZ1bmN0aW9uKHQsZSxpKXtyZXR1cm4gbmV3IG8uQ29udHJvbC5MYXllcnModCxlLGkpfSxvLlBvc0FuaW1hdGlvbj1vLkNsYXNzLmV4dGVuZCh7aW5jbHVkZXM6by5NaXhpbi5FdmVudHMscnVuOmZ1bmN0aW9uKHQsZSxpLG4pe3RoaXMuc3RvcCgpLHRoaXMuX2VsPXQsdGhpcy5faW5Qcm9ncmVzcz0hMCx0aGlzLl9uZXdQb3M9ZSx0aGlzLmZpcmUoInN0YXJ0IiksdC5zdHlsZVtvLkRvbVV0aWwuVFJBTlNJVElPTl09ImFsbCAiKyhpfHwuMjUpKyJzIGN1YmljLWJlemllcigwLDAsIisobnx8LjUpKyIsMSkiLG8uRG9tRXZlbnQub24odCxvLkRvbVV0aWwuVFJBTlNJVElPTl9FTkQsdGhpcy5fb25UcmFuc2l0aW9uRW5kLHRoaXMpLG8uRG9tVXRpbC5zZXRQb3NpdGlvbih0LGUpLG8uVXRpbC5mYWxzZUZuKHQub2Zmc2V0V2lkdGgpLHRoaXMuX3N0ZXBUaW1lcj1zZXRJbnRlcnZhbChvLmJpbmQodGhpcy5fb25TdGVwLHRoaXMpLDUwKX0sc3RvcDpmdW5jdGlvbigpe3RoaXMuX2luUHJvZ3Jlc3MmJihvLkRvbVV0aWwuc2V0UG9zaXRpb24odGhpcy5fZWwsdGhpcy5fZ2V0UG9zKCkpLHRoaXMuX29uVHJhbnNpdGlvbkVuZCgpLG8uVXRpbC5mYWxzZUZuKHRoaXMuX2VsLm9mZnNldFdpZHRoKSl9LF9vblN0ZXA6ZnVuY3Rpb24oKXt2YXIgdD10aGlzLl9nZXRQb3MoKTtyZXR1cm4gdD8odGhpcy5fZWwuX2xlYWZsZXRfcG9zPXQsdm9pZCB0aGlzLmZpcmUoInN0ZXAiKSk6dm9pZCB0aGlzLl9vblRyYW5zaXRpb25FbmQoKX0sX3RyYW5zZm9ybVJlOi8oWy0rXT8oPzpcZCpcLik/XGQrKVxEKiwgKFstK10/KD86XGQqXC4pP1xkKylcRCpcKS8sX2dldFBvczpmdW5jdGlvbigpe3ZhciBlLGksbixzPXRoaXMuX2VsLGE9dC5nZXRDb21wdXRlZFN0eWxlKHMpO2lmKG8uQnJvd3Nlci5hbnkzZCl7aWYobj1hW28uRG9tVXRpbC5UUkFOU0ZPUk1dLm1hdGNoKHRoaXMuX3RyYW5zZm9ybVJlKSwhbilyZXR1cm47ZT1wYXJzZUZsb2F0KG5bMV0pLGk9cGFyc2VGbG9hdChuWzJdKX1lbHNlIGU9cGFyc2VGbG9hdChhLmxlZnQpLGk9cGFyc2VGbG9hdChhLnRvcCk7cmV0dXJuIG5ldyBvLlBvaW50KGUsaSwhMCl9LF9vblRyYW5zaXRpb25FbmQ6ZnVuY3Rpb24oKXtvLkRvbUV2ZW50Lm9mZih0aGlzLl9lbCxvLkRvbVV0aWwuVFJBTlNJVElPTl9FTkQsdGhpcy5fb25UcmFuc2l0aW9uRW5kLHRoaXMpLHRoaXMuX2luUHJvZ3Jlc3MmJih0aGlzLl9pblByb2dyZXNzPSExLHRoaXMuX2VsLnN0eWxlW28uRG9tVXRpbC5UUkFOU0lUSU9OXT0iIix0aGlzLl9lbC5fbGVhZmxldF9wb3M9dGhpcy5fbmV3UG9zLGNsZWFySW50ZXJ2YWwodGhpcy5fc3RlcFRpbWVyKSx0aGlzLmZpcmUoInN0ZXAiKS5maXJlKCJlbmQiKSl9fSksby5NYXAuaW5jbHVkZSh7c2V0VmlldzpmdW5jdGlvbih0LGUsbil7aWYoZT1lPT09aT90aGlzLl96b29tOnRoaXMuX2xpbWl0Wm9vbShlKSx0PXRoaXMuX2xpbWl0Q2VudGVyKG8ubGF0TG5nKHQpLGUsdGhpcy5vcHRpb25zLm1heEJvdW5kcyksbj1ufHx7fSx0aGlzLl9wYW5BbmltJiZ0aGlzLl9wYW5BbmltLnN0b3AoKSx0aGlzLl9sb2FkZWQmJiFuLnJlc2V0JiZuIT09ITApe24uYW5pbWF0ZSE9PWkmJihuLnpvb209by5leHRlbmQoe2FuaW1hdGU6bi5hbmltYXRlfSxuLnpvb20pLG4ucGFuPW8uZXh0ZW5kKHthbmltYXRlOm4uYW5pbWF0ZX0sbi5wYW4pKTt2YXIgcz10aGlzLl96b29tIT09ZT90aGlzLl90cnlBbmltYXRlZFpvb20mJnRoaXMuX3RyeUFuaW1hdGVkWm9vbSh0LGUsbi56b29tKTp0aGlzLl90cnlBbmltYXRlZFBhbih0LG4ucGFuKTtpZihzKXJldHVybiBjbGVhclRpbWVvdXQodGhpcy5fc2l6ZVRpbWVyKSx0aGlzfXJldHVybiB0aGlzLl9yZXNldFZpZXcodCxlKSx0aGlzfSxwYW5CeTpmdW5jdGlvbih0LGUpe2lmKHQ9by5wb2ludCh0KS5yb3VuZCgpLGU9ZXx8e30sIXQueCYmIXQueSlyZXR1cm4gdGhpcztpZih0aGlzLl9wYW5BbmltfHwodGhpcy5fcGFuQW5pbT1uZXcgby5Qb3NBbmltYXRpb24sdGhpcy5fcGFuQW5pbS5vbih7c3RlcDp0aGlzLl9vblBhblRyYW5zaXRpb25TdGVwLGVuZDp0aGlzLl9vblBhblRyYW5zaXRpb25FbmR9LHRoaXMpKSxlLm5vTW92ZVN0YXJ0fHx0aGlzLmZpcmUoIm1vdmVzdGFydCIpLGUuYW5pbWF0ZSE9PSExKXtvLkRvbVV0aWwuYWRkQ2xhc3ModGhpcy5fbWFwUGFuZSwibGVhZmxldC1wYW4tYW5pbSIpO3ZhciBpPXRoaXMuX2dldE1hcFBhbmVQb3MoKS5zdWJ0cmFjdCh0KTt0aGlzLl9wYW5BbmltLnJ1bih0aGlzLl9tYXBQYW5lLGksZS5kdXJhdGlvbnx8LjI1LGUuZWFzZUxpbmVhcml0eSl9ZWxzZSB0aGlzLl9yYXdQYW5CeSh0KSx0aGlzLmZpcmUoIm1vdmUiKS5maXJlKCJtb3ZlZW5kIik7cmV0dXJuIHRoaXN9LF9vblBhblRyYW5zaXRpb25TdGVwOmZ1bmN0aW9uKCl7dGhpcy5maXJlKCJtb3ZlIil9LF9vblBhblRyYW5zaXRpb25FbmQ6ZnVuY3Rpb24oKXtvLkRvbVV0aWwucmVtb3ZlQ2xhc3ModGhpcy5fbWFwUGFuZSwibGVhZmxldC1wYW4tYW5pbSIpLHRoaXMuZmlyZSgibW92ZWVuZCIpfSxfdHJ5QW5pbWF0ZWRQYW46ZnVuY3Rpb24odCxlKXt2YXIgaT10aGlzLl9nZXRDZW50ZXJPZmZzZXQodCkuX2Zsb29yKCk7cmV0dXJuKGUmJmUuYW5pbWF0ZSk9PT0hMHx8dGhpcy5nZXRTaXplKCkuY29udGFpbnMoaSk/KHRoaXMucGFuQnkoaSxlKSwhMCk6ITF9fSksby5Qb3NBbmltYXRpb249by5Eb21VdGlsLlRSQU5TSVRJT04/by5Qb3NBbmltYXRpb246by5Qb3NBbmltYXRpb24uZXh0ZW5kKHtydW46ZnVuY3Rpb24odCxlLGksbil7dGhpcy5zdG9wKCksdGhpcy5fZWw9dCx0aGlzLl9pblByb2dyZXNzPSEwLHRoaXMuX2R1cmF0aW9uPWl8fC4yNSx0aGlzLl9lYXNlT3V0UG93ZXI9MS9NYXRoLm1heChufHwuNSwuMiksdGhpcy5fc3RhcnRQb3M9by5Eb21VdGlsLmdldFBvc2l0aW9uKHQpLHRoaXMuX29mZnNldD1lLnN1YnRyYWN0KHRoaXMuX3N0YXJ0UG9zKSx0aGlzLl9zdGFydFRpbWU9K25ldyBEYXRlLHRoaXMuZmlyZSgic3RhcnQiKSx0aGlzLl9hbmltYXRlKCl9LHN0b3A6ZnVuY3Rpb24oKXt0aGlzLl9pblByb2dyZXNzJiYodGhpcy5fc3RlcCgpLHRoaXMuX2NvbXBsZXRlKCkpfSxfYW5pbWF0ZTpmdW5jdGlvbigpe3RoaXMuX2FuaW1JZD1vLlV0aWwucmVxdWVzdEFuaW1GcmFtZSh0aGlzLl9hbmltYXRlLHRoaXMpLHRoaXMuX3N0ZXAoKX0sX3N0ZXA6ZnVuY3Rpb24oKXt2YXIgdD0rbmV3IERhdGUtdGhpcy5fc3RhcnRUaW1lLGU9MWUzKnRoaXMuX2R1cmF0aW9uO2U+dD90aGlzLl9ydW5GcmFtZSh0aGlzLl9lYXNlT3V0KHQvZSkpOih0aGlzLl9ydW5GcmFtZSgxKSx0aGlzLl9jb21wbGV0ZSgpKX0sX3J1bkZyYW1lOmZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMuX3N0YXJ0UG9zLmFkZCh0aGlzLl9vZmZzZXQubXVsdGlwbHlCeSh0KSk7by5Eb21VdGlsLnNldFBvc2l0aW9uKHRoaXMuX2VsLGUpLHRoaXMuZmlyZSgic3RlcCIpfSxfY29tcGxldGU6ZnVuY3Rpb24oKXtvLlV0aWwuY2FuY2VsQW5pbUZyYW1lKHRoaXMuX2FuaW1JZCksdGhpcy5faW5Qcm9ncmVzcz0hMSx0aGlzLmZpcmUoImVuZCIpfSxfZWFzZU91dDpmdW5jdGlvbih0KXtyZXR1cm4gMS1NYXRoLnBvdygxLXQsdGhpcy5fZWFzZU91dFBvd2VyKX19KSxvLk1hcC5tZXJnZU9wdGlvbnMoe3pvb21BbmltYXRpb246ITAsem9vbUFuaW1hdGlvblRocmVzaG9sZDo0fSksby5Eb21VdGlsLlRSQU5TSVRJT04mJm8uTWFwLmFkZEluaXRIb29rKGZ1bmN0aW9uKCl7dGhpcy5fem9vbUFuaW1hdGVkPXRoaXMub3B0aW9ucy56b29tQW5pbWF0aW9uJiZvLkRvbVV0aWwuVFJBTlNJVElPTiYmby5Ccm93c2VyLmFueTNkJiYhby5Ccm93c2VyLmFuZHJvaWQyMyYmIW8uQnJvd3Nlci5tb2JpbGVPcGVyYSx0aGlzLl96b29tQW5pbWF0ZWQmJm8uRG9tRXZlbnQub24odGhpcy5fbWFwUGFuZSxvLkRvbVV0aWwuVFJBTlNJVElPTl9FTkQsdGhpcy5fY2F0Y2hUcmFuc2l0aW9uRW5kLHRoaXMpfSksby5NYXAuaW5jbHVkZShvLkRvbVV0aWwuVFJBTlNJVElPTj97X2NhdGNoVHJhbnNpdGlvbkVuZDpmdW5jdGlvbih0KXt0aGlzLl9hbmltYXRpbmdab29tJiZ0LnByb3BlcnR5TmFtZS5pbmRleE9mKCJ0cmFuc2Zvcm0iKT49MCYmdGhpcy5fb25ab29tVHJhbnNpdGlvbkVuZCgpfSxfbm90aGluZ1RvQW5pbWF0ZTpmdW5jdGlvbigpe3JldHVybiF0aGlzLl9jb250YWluZXIuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSgibGVhZmxldC16b29tLWFuaW1hdGVkIikubGVuZ3RofSxfdHJ5QW5pbWF0ZWRab29tOmZ1bmN0aW9uKHQsZSxpKXtpZih0aGlzLl9hbmltYXRpbmdab29tKXJldHVybiEwO2lmKGk9aXx8e30sIXRoaXMuX3pvb21BbmltYXRlZHx8aS5hbmltYXRlPT09ITF8fHRoaXMuX25vdGhpbmdUb0FuaW1hdGUoKXx8TWF0aC5hYnMoZS10aGlzLl96b29tKT50aGlzLm9wdGlvbnMuem9vbUFuaW1hdGlvblRocmVzaG9sZClyZXR1cm4hMTt2YXIgbj10aGlzLmdldFpvb21TY2FsZShlKSxvPXRoaXMuX2dldENlbnRlck9mZnNldCh0KS5fZGl2aWRlQnkoMS0xL24pLHM9dGhpcy5fZ2V0Q2VudGVyTGF5ZXJQb2ludCgpLl9hZGQobyk7cmV0dXJuIGkuYW5pbWF0ZT09PSEwfHx0aGlzLmdldFNpemUoKS5jb250YWlucyhvKT8odGhpcy5maXJlKCJtb3Zlc3RhcnQiKS5maXJlKCJ6b29tc3RhcnQiKSx0aGlzLl9hbmltYXRlWm9vbSh0LGUscyxuLG51bGwsITApLCEwKTohMX0sX2FuaW1hdGVab29tOmZ1bmN0aW9uKHQsZSxpLG4scyxhLHIpe3J8fCh0aGlzLl9hbmltYXRpbmdab29tPSEwKSxvLkRvbVV0aWwuYWRkQ2xhc3ModGhpcy5fbWFwUGFuZSwibGVhZmxldC16b29tLWFuaW0iKSx0aGlzLl9hbmltYXRlVG9DZW50ZXI9dCx0aGlzLl9hbmltYXRlVG9ab29tPWUsby5EcmFnZ2FibGUmJihvLkRyYWdnYWJsZS5fZGlzYWJsZWQ9ITApLG8uVXRpbC5yZXF1ZXN0QW5pbUZyYW1lKGZ1bmN0aW9uKCl7dGhpcy5maXJlKCJ6b29tYW5pbSIse2NlbnRlcjp0LHpvb206ZSxvcmlnaW46aSxzY2FsZTpuLGRlbHRhOnMsYmFja3dhcmRzOmF9KSxzZXRUaW1lb3V0KG8uYmluZCh0aGlzLl9vblpvb21UcmFuc2l0aW9uRW5kLHRoaXMpLDI1MCl9LHRoaXMpfSxfb25ab29tVHJhbnNpdGlvbkVuZDpmdW5jdGlvbigpe3RoaXMuX2FuaW1hdGluZ1pvb20mJih0aGlzLl9hbmltYXRpbmdab29tPSExLG8uRG9tVXRpbC5yZW1vdmVDbGFzcyh0aGlzLl9tYXBQYW5lLCJsZWFmbGV0LXpvb20tYW5pbSIpLG8uVXRpbC5yZXF1ZXN0QW5pbUZyYW1lKGZ1bmN0aW9uKCl7dGhpcy5fcmVzZXRWaWV3KHRoaXMuX2FuaW1hdGVUb0NlbnRlcix0aGlzLl9hbmltYXRlVG9ab29tLCEwLCEwKSxvLkRyYWdnYWJsZSYmKG8uRHJhZ2dhYmxlLl9kaXNhYmxlZD0hMSl9LHRoaXMpKX19Ont9KSxvLlRpbGVMYXllci5pbmNsdWRlKHtfYW5pbWF0ZVpvb206ZnVuY3Rpb24odCl7dGhpcy5fYW5pbWF0aW5nfHwodGhpcy5fYW5pbWF0aW5nPSEwLHRoaXMuX3ByZXBhcmVCZ0J1ZmZlcigpKTt2YXIgZT10aGlzLl9iZ0J1ZmZlcixpPW8uRG9tVXRpbC5UUkFOU0ZPUk0sbj10LmRlbHRhP28uRG9tVXRpbC5nZXRUcmFuc2xhdGVTdHJpbmcodC5kZWx0YSk6ZS5zdHlsZVtpXSxzPW8uRG9tVXRpbC5nZXRTY2FsZVN0cmluZyh0LnNjYWxlLHQub3JpZ2luKTtlLnN0eWxlW2ldPXQuYmFja3dhcmRzP3MrIiAiK246bisiICIrc30sX2VuZFpvb21BbmltOmZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5fdGlsZUNvbnRhaW5lcixlPXRoaXMuX2JnQnVmZmVyO3Quc3R5bGUudmlzaWJpbGl0eT0iIix0LnBhcmVudE5vZGUuYXBwZW5kQ2hpbGQodCksby5VdGlsLmZhbHNlRm4oZS5vZmZzZXRXaWR0aCk7dmFyIGk9dGhpcy5fbWFwLmdldFpvb20oKTsoaT50aGlzLm9wdGlvbnMubWF4Wm9vbXx8aTx0aGlzLm9wdGlvbnMubWluWm9vbSkmJnRoaXMuX2NsZWFyQmdCdWZmZXIoKSx0aGlzLl9hbmltYXRpbmc9ITF9LF9jbGVhckJnQnVmZmVyOmZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5fbWFwOyF0fHx0Ll9hbmltYXRpbmdab29tfHx0LnRvdWNoWm9vbS5fem9vbWluZ3x8KHRoaXMuX2JnQnVmZmVyLmlubmVySFRNTD0iIix0aGlzLl9iZ0J1ZmZlci5zdHlsZVtvLkRvbVV0aWwuVFJBTlNGT1JNXT0iIil9LF9wcmVwYXJlQmdCdWZmZXI6ZnVuY3Rpb24oKXt2YXIgdD10aGlzLl90aWxlQ29udGFpbmVyLGU9dGhpcy5fYmdCdWZmZXIsaT10aGlzLl9nZXRMb2FkZWRUaWxlc1BlcmNlbnRhZ2UoZSksbj10aGlzLl9nZXRMb2FkZWRUaWxlc1BlcmNlbnRhZ2UodCk7cmV0dXJuIGUmJmk+LjUmJi41Pm4/KHQuc3R5bGUudmlzaWJpbGl0eT0iaGlkZGVuIix2b2lkIHRoaXMuX3N0b3BMb2FkaW5nSW1hZ2VzKHQpKTooZS5zdHlsZS52aXNpYmlsaXR5PSJoaWRkZW4iLGUuc3R5bGVbby5Eb21VdGlsLlRSQU5TRk9STV09IiIsdGhpcy5fdGlsZUNvbnRhaW5lcj1lLGU9dGhpcy5fYmdCdWZmZXI9dCx0aGlzLl9zdG9wTG9hZGluZ0ltYWdlcyhlKSx2b2lkIGNsZWFyVGltZW91dCh0aGlzLl9jbGVhckJnQnVmZmVyVGltZXIpKX0sX2dldExvYWRlZFRpbGVzUGVyY2VudGFnZTpmdW5jdGlvbih0KXt2YXIgZSxpLG49dC5nZXRFbGVtZW50c0J5VGFnTmFtZSgiaW1nIiksbz0wO2ZvcihlPTAsaT1uLmxlbmd0aDtpPmU7ZSsrKW5bZV0uY29tcGxldGUmJm8rKztyZXR1cm4gby9pfSxfc3RvcExvYWRpbmdJbWFnZXM6ZnVuY3Rpb24odCl7dmFyIGUsaSxuLHM9QXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwodC5nZXRFbGVtZW50c0J5VGFnTmFtZSgiaW1nIikpO2ZvcihlPTAsaT1zLmxlbmd0aDtpPmU7ZSsrKW49c1tlXSxuLmNvbXBsZXRlfHwobi5vbmxvYWQ9by5VdGlsLmZhbHNlRm4sbi5vbmVycm9yPW8uVXRpbC5mYWxzZUZuLG4uc3JjPW8uVXRpbC5lbXB0eUltYWdlVXJsLG4ucGFyZW50Tm9kZS5yZW1vdmVDaGlsZChuKSl9fSksby5NYXAuaW5jbHVkZSh7X2RlZmF1bHRMb2NhdGVPcHRpb25zOnt3YXRjaDohMSxzZXRWaWV3OiExLG1heFpvb206MS8wLHRpbWVvdXQ6MWU0LG1heGltdW1BZ2U6MCxlbmFibGVIaWdoQWNjdXJhY3k6ITF9LGxvY2F0ZTpmdW5jdGlvbih0KXtpZih0PXRoaXMuX2xvY2F0ZU9wdGlvbnM9by5leHRlbmQodGhpcy5fZGVmYXVsdExvY2F0ZU9wdGlvbnMsdCksIW5hdmlnYXRvci5nZW9sb2NhdGlvbilyZXR1cm4gdGhpcy5faGFuZGxlR2VvbG9jYXRpb25FcnJvcih7Y29kZTowLG1lc3NhZ2U6Ikdlb2xvY2F0aW9uIG5vdCBzdXBwb3J0ZWQuIn0pLHRoaXM7dmFyIGU9by5iaW5kKHRoaXMuX2hhbmRsZUdlb2xvY2F0aW9uUmVzcG9uc2UsdGhpcyksaT1vLmJpbmQodGhpcy5faGFuZGxlR2VvbG9jYXRpb25FcnJvcix0aGlzKTtyZXR1cm4gdC53YXRjaD90aGlzLl9sb2NhdGlvbldhdGNoSWQ9bmF2aWdhdG9yLmdlb2xvY2F0aW9uLndhdGNoUG9zaXRpb24oZSxpLHQpOm5hdmlnYXRvci5nZW9sb2NhdGlvbi5nZXRDdXJyZW50UG9zaXRpb24oZSxpLHQpLHRoaXN9LHN0b3BMb2NhdGU6ZnVuY3Rpb24oKXtyZXR1cm4gbmF2aWdhdG9yLmdlb2xvY2F0aW9uJiZuYXZpZ2F0b3IuZ2VvbG9jYXRpb24uY2xlYXJXYXRjaCh0aGlzLl9sb2NhdGlvbldhdGNoSWQpLHRoaXMuX2xvY2F0ZU9wdGlvbnMmJih0aGlzLl9sb2NhdGVPcHRpb25zLnNldFZpZXc9ITEpLHRoaXN9LF9oYW5kbGVHZW9sb2NhdGlvbkVycm9yOmZ1bmN0aW9uKHQpe3ZhciBlPXQuY29kZSxpPXQubWVzc2FnZXx8KDE9PT1lPyJwZXJtaXNzaW9uIGRlbmllZCI6Mj09PWU/InBvc2l0aW9uIHVuYXZhaWxhYmxlIjoidGltZW91dCIpO3RoaXMuX2xvY2F0ZU9wdGlvbnMuc2V0VmlldyYmIXRoaXMuX2xvYWRlZCYmdGhpcy5maXRXb3JsZCgpLHRoaXMuZmlyZSgibG9jYXRpb25lcnJvciIse2NvZGU6ZSxtZXNzYWdlOiJHZW9sb2NhdGlvbiBlcnJvcjogIitpKyIuIn0pfSxfaGFuZGxlR2VvbG9jYXRpb25SZXNwb25zZTpmdW5jdGlvbih0KXt2YXIgZT10LmNvb3Jkcy5sYXRpdHVkZSxpPXQuY29vcmRzLmxvbmdpdHVkZSxuPW5ldyBvLkxhdExuZyhlLGkpLHM9MTgwKnQuY29vcmRzLmFjY3VyYWN5LzQwMDc1MDE3LGE9cy9NYXRoLmNvcyhvLkxhdExuZy5ERUdfVE9fUkFEKmUpLHI9by5sYXRMbmdCb3VuZHMoW2UtcyxpLWFdLFtlK3MsaSthXSksaD10aGlzLl9sb2NhdGVPcHRpb25zO2lmKGguc2V0Vmlldyl7dmFyIGw9TWF0aC5taW4odGhpcy5nZXRCb3VuZHNab29tKHIpLGgubWF4Wm9vbSk7dGhpcy5zZXRWaWV3KG4sbCl9dmFyIHU9e2xhdGxuZzpuLGJvdW5kczpyLHRpbWVzdGFtcDp0LnRpbWVzdGFtcH07Zm9yKHZhciBjIGluIHQuY29vcmRzKSJudW1iZXIiPT10eXBlb2YgdC5jb29yZHNbY10mJih1W2NdPXQuY29vcmRzW2NdKTt0aGlzLmZpcmUoImxvY2F0aW9uZm91bmQiLHUpfX0pfSh3aW5kb3csZG9jdW1lbnQpOw=="></script> | |
| <link href="data:text/css;charset=utf-8,%0Aimg%2Eleaflet%2Dtile%20%7B%0Apadding%3A%200%3B%0Amargin%3A%200%3B%0Aborder%2Dradius%3A%200%3B%0Aborder%3A%20none%3B%0A%7D%0A%2Einfo%20%7B%0Apadding%3A%206px%208px%3B%0Afont%3A%2014px%2F16px%20Arial%2C%20Helvetica%2C%20sans%2Dserif%3B%0Abackground%3A%20white%3B%0Abackground%3A%20rgba%28255%2C255%2C255%2C0%2E8%29%3B%0Abox%2Dshadow%3A%200%200%2015px%20rgba%280%2C0%2C0%2C0%2E2%29%3B%0Aborder%2Dradius%3A%205px%3B%0A%7D%0A%2Elegend%20%7B%0Aline%2Dheight%3A%2018px%3B%0Acolor%3A%20%23555%3B%0A%7D%0A%2Elegend%20svg%20text%20%7B%0Afill%3A%20%23555%3B%0A%7D%0A%2Elegend%20svg%20line%20%7B%0Astroke%3A%20%23555%3B%0A%7D%0A%2Elegend%20i%20%7B%0Awidth%3A%2018px%3B%0Aheight%3A%2018px%3B%0Afloat%3A%20left%3B%0Amargin%2Dright%3A%208px%3B%0Aopacity%3A%200%2E7%3B%0A%7D%0A" rel="stylesheet" /> | |
| <link href="data:text/css;charset=utf-8,%2Eleaflet%2Dlabel%20%7B%0Abackground%3A%20rgb%28235%2C%20235%2C%20235%29%3B%0Abackground%3A%20rgba%28235%2C%20235%2C%20235%2C%200%2E81%29%3B%0Abackground%2Dclip%3A%20padding%2Dbox%3B%0Aborder%2Dcolor%3A%20%23777%3B%0Aborder%2Dcolor%3A%20rgba%280%2C0%2C0%2C0%2E45%29%3B%0Aborder%2Dradius%3A%204px%3B%0Aborder%2Dstyle%3A%20solid%3B%0Aborder%2Dwidth%3A%204px%3B%0Acolor%3A%20%23111%3B%0Adisplay%3A%20block%3B%0Afont%3A%2012px%2F20px%20%22Helvetica%20Neue%22%2C%20Arial%2C%20Helvetica%2C%20sans%2Dserif%3B%0Afont%2Dweight%3A%20bold%3B%0Apadding%3A%201px%206px%3B%0Aposition%3A%20absolute%3B%0A%2Dwebkit%2Duser%2Dselect%3A%20none%3B%0A%2Dmoz%2Duser%2Dselect%3A%20none%3B%0A%2Dms%2Duser%2Dselect%3A%20none%3B%0Auser%2Dselect%3A%20none%3B%0Apointer%2Devents%3A%20none%3B%0Awhite%2Dspace%3A%20nowrap%3B%0Az%2Dindex%3A%20500%3B%0A%7D%0A%2Eleaflet%2Dlabel%2Eleaflet%2Dclickable%20%7B%0Acursor%3A%20pointer%3B%0Apointer%2Devents%3A%20auto%3B%0A%7D%0A%2Eleaflet%2Dlabel%3Abefore%2C%0A%2Eleaflet%2Dlabel%3Aafter%20%7B%0Aborder%2Dtop%3A%206px%20solid%20transparent%3B%0Aborder%2Dbottom%3A%206px%20solid%20transparent%3B%0Aborder%2Dright%3A%206px%20solid%20transparent%3B%0Acontent%3A%20none%3B%0Aposition%3A%20absolute%3B%0Atop%3A%205px%3B%0A%7D%0A%2Eleaflet%2Dlabel%3Abefore%20%7B%0Aborder%2Dright%3A%206px%20solid%20black%3B%0Aborder%2Dright%2Dcolor%3A%20inherit%3B%0Aleft%3A%20%2D10px%3B%0A%7D%0A%2Eleaflet%2Dlabel%3Aafter%20%7B%0Aborder%2Dleft%3A%206px%20solid%20black%3B%0Aborder%2Dleft%2Dcolor%3A%20inherit%3B%0Aright%3A%20%2D16px%3B%0A%7D%0A%2Eleaflet%2Dlabel%2Dtop%3Aafter%2C%0A%2Eleaflet%2Dlabel%2Dtop%3Abefore%20%7B%0Aleft%3A%20%2D50%25%3B%0Aborder%2Dtop%2Dcolor%3A%20black%3B%0Aborder%2Dtop%2Dcolor%3A%20rgba%280%2C0%2C0%2C0%2E45%29%3B%0Aposition%3A%20relative%3B%0Atop%3A%2029px%3B%0A%7D%0A%2Eleaflet%2Dlabel%2Dtop%3Abefore%20%7B%0Adisplay%3A%20none%3B%0Aborder%2Dright%2Dcolor%3A%20transparent%3B%0Aborder%2Dbottom%2Dcolor%3A%20transparent%3B%0Aborder%2Dleft%2Dcolor%3A%20transparent%3B%0Aborder%2Dtop%2Dcolor%3A%20transparent%3B%0A%7D%0A%2Eleaflet%2Dlabel%2Dtop%3Aafter%20%7B%0Acontent%3A%20%27%20%27%3B%0Aborder%2Dright%2Dcolor%3A%20transparent%3B%0Aborder%2Dbottom%2Dcolor%3A%20transparent%3B%0Aborder%2Dleft%2Dcolor%3A%20transparent%3B%0A%7D%0A%2Eleaflet%2Dlabel%2Dbottom%3Abefore%20%7B%0Adisplay%3A%20none%3B%0Aborder%2Dright%2Dcolor%3A%20transparent%3B%0Aborder%2Dbottom%2Dcolor%3A%20transparent%3B%0Aborder%2Dleft%2Dcolor%3A%20transparent%3B%0Aborder%2Dtop%2Dcolor%3A%20transparent%3B%0A%7D%0A%2Eleaflet%2Dlabel%2Dbottom%3Aafter%2C%0A%2Eleaflet%2Dlabel%2Dbottom%3Abefore%20%7B%0Aleft%3A%20%2D50%25%3B%0Aborder%2Dbottom%2Dcolor%3A%20black%3B%0Aborder%2Dbottom%2Dcolor%3A%20rgba%280%2C0%2C0%2C0%2E45%29%3B%0Aposition%3A%20relative%3B%0Atop%3A%20%2D28px%3B%0A%7D%0A%2Eleaflet%2Dlabel%2Dbottom%3Aafter%20%7B%0Aborder%2Dright%2Dcolor%3A%20transparent%3B%0Aborder%2Dtop%2Dcolor%3A%20transparent%3B%0Aborder%2Dleft%2Dcolor%3A%20transparent%3B%0A%7D%0A%2Eleaflet%2Dlabel%2Dbottom%3Aafter%2C%0A%2Eleaflet%2Dlabel%2Dtop%3Aafter%2C%0A%2Eleaflet%2Dlabel%2Dright%3Abefore%2C%0A%2Eleaflet%2Dlabel%2Dleft%3Aafter%20%7B%0Acontent%3A%20%22%22%3B%0A%7D%0A%2Eleaflet%2Dlabel%2Eleaflet%2Dlabel%2Dtext%2Donly%2C%0A%2Eleaflet%2Dlabel%2Eleaflet%2Dlabel%2Dtext%2Donly%3Abefore%2C%0A%2Eleaflet%2Dlabel%2Eleaflet%2Dlabel%2Dtext%2Donly%3Aafter%20%7B%0Abackground%3A%20none%3B%0Aborder%3A%20none%3B%0A%7D%0A%2Eleaflet%2Dlabel%2Eleaflet%2Dlabel%2Dtext%2Donly%2Eleaflet%2Dlabel%2Dleft%20%7B%0Amargin%2Dright%3A%20%2D10px%3B%0A%7D%0A%2Eleaflet%2Dlabel%2Eleaflet%2Dlabel%2Dtext%2Donly%2Eleaflet%2Dlabel%2Dright%20%7B%0Amargin%2Dleft%3A%20%2D10px%3B%0A%7D%0A" rel="stylesheet" /> | |
| <script src="data:application/x-javascript;base64,LyoKCUxlYWZsZXQubGFiZWwsIGEgcGx1Z2luIHRoYXQgYWRkcyBsYWJlbHMgdG8gbWFya2VycyBhbmQgdmVjdG9ycyBmb3IgTGVhZmxldCBwb3dlcmVkIG1hcHMuCgkoYykgMjAxMi0yMDEzLCBKYWNvYiBUb3llLCBTbWFydHJhawoKCWh0dHBzOi8vZ2l0aHViLmNvbS9MZWFmbGV0L0xlYWZsZXQubGFiZWwKCWh0dHA6Ly9sZWFmbGV0anMuY29tCglodHRwczovL2dpdGh1Yi5jb20vamFjb2J0b3llCiovCiFmdW5jdGlvbih0LGUpeyJmdW5jdGlvbiI9PXR5cGVvZiBkZWZpbmUmJmRlZmluZS5hbWQ/ZGVmaW5lKFsibGVhZmxldCJdLHQpOiJvYmplY3QiPT10eXBlb2YgZXhwb3J0cyYmKG1vZHVsZS5leHBvcnRzPXQocmVxdWlyZSgibGVhZmxldCIpKSksInVuZGVmaW5lZCIhPXR5cGVvZiBlJiZlLkwmJihlLkxlYWZsZXRMYWJlbD10KEwpKX0oZnVuY3Rpb24odCl7dC5sYWJlbFZlcnNpb249IjAuMi40Ijt2YXIgZT10LkNsYXNzLmV4dGVuZCh7aW5jbHVkZXM6dC5NaXhpbi5FdmVudHMsX2RpcmVjdGlvbnM6WyJ0b3AiLCJyaWdodCIsImJvdHRvbSIsImxlZnQiXSxvcHRpb25zOntjbGFzc05hbWU6IiIsY2xpY2thYmxlOiExLGRpcmVjdGlvbjoicmlnaHQiLG5vSGlkZTohMSxvZmZzZXQ6WzEyLC0xNV0sb3BhY2l0eToxLHRleHRzaXplOiIxMHB4Iix0ZXh0T25seTohMSxzdHlsZTpudWxsLHpvb21BbmltYXRpb246ITB9LGluaXRpYWxpemU6ZnVuY3Rpb24oZSxpKXt0LnNldE9wdGlvbnModGhpcyxlKSx0aGlzLl9zb3VyY2U9aSx0aGlzLl9hbmltYXRlZD10LkJyb3dzZXIuYW55M2QmJnRoaXMub3B0aW9ucy56b29tQW5pbWF0aW9uLHRoaXMuX2lzT3Blbj0hMX0sX2lzT25NYXJrZXI6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fc291cmNlIGluc3RhbmNlb2YgdC5NYXJrZXJ9LG9uQWRkOmZ1bmN0aW9uKGUpe3RoaXMuX21hcD1lLHRoaXMuX3BhbmU9dGhpcy5vcHRpb25zLnBhbmU/ZS5fcGFuZXNbdGhpcy5vcHRpb25zLnBhbmVdOnRoaXMuX2lzT25NYXJrZXIoKT9lLl9wYW5lcy5tYXJrZXJQYW5lOmUuX3BhbmVzLnBvcHVwUGFuZSx0aGlzLl9jb250YWluZXJ8fHRoaXMuX2luaXRMYXlvdXQoKSx0aGlzLl9wYW5lLmFwcGVuZENoaWxkKHRoaXMuX2NvbnRhaW5lciksdGhpcy5faW5pdEludGVyYWN0aW9uKCksdGhpcy5fdXBkYXRlKCksdGhpcy5zZXRPcGFjaXR5KHRoaXMub3B0aW9ucy5vcGFjaXR5KSxlLm9uKCJtb3ZlZW5kIix0aGlzLl9vbk1vdmVFbmQsdGhpcykub24oInZpZXdyZXNldCIsdGhpcy5fb25WaWV3UmVzZXQsdGhpcyksdGhpcy5fYW5pbWF0ZWQmJmUub24oInpvb21hbmltIix0aGlzLl96b29tQW5pbWF0aW9uLHRoaXMpLHQuQnJvd3Nlci50b3VjaCYmIXRoaXMub3B0aW9ucy5ub0hpZGUmJih0LkRvbUV2ZW50Lm9uKHRoaXMuX2NvbnRhaW5lciwiY2xpY2siLHRoaXMuY2xvc2UsdGhpcyksZS5vbigiY2xpY2siLHRoaXMuY2xvc2UsdGhpcykpfSxvblJlbW92ZTpmdW5jdGlvbih0KXt0aGlzLl9wYW5lLnJlbW92ZUNoaWxkKHRoaXMuX2NvbnRhaW5lciksdC5vZmYoe3pvb21hbmltOnRoaXMuX3pvb21BbmltYXRpb24sbW92ZWVuZDp0aGlzLl9vbk1vdmVFbmQsdmlld3Jlc2V0OnRoaXMuX29uVmlld1Jlc2V0fSx0aGlzKSx0aGlzLl9yZW1vdmVJbnRlcmFjdGlvbigpLHRoaXMuX21hcD1udWxsfSxzZXRMYXRMbmc6ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMuX2xhdGxuZz10LmxhdExuZyhlKSx0aGlzLl9tYXAmJnRoaXMuX3VwZGF0ZVBvc2l0aW9uKCksdGhpc30sc2V0Q29udGVudDpmdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5fcHJldmlvdXNDb250ZW50PXRoaXMuX2NvbnRlbnQsdGhpcy5fY29udGVudD10LHRoaXMuX3VwZGF0ZUNvbnRlbnQoKSx0aGlzfSxjbG9zZTpmdW5jdGlvbigpe3ZhciBlPXRoaXMuX21hcDtlJiYodC5Ccm93c2VyLnRvdWNoJiYhdGhpcy5vcHRpb25zLm5vSGlkZSYmKHQuRG9tRXZlbnQub2ZmKHRoaXMuX2NvbnRhaW5lciwiY2xpY2siLHRoaXMuY2xvc2UpLGUub2ZmKCJjbGljayIsdGhpcy5jbG9zZSx0aGlzKSksZS5yZW1vdmVMYXllcih0aGlzKSl9LHVwZGF0ZVpJbmRleDpmdW5jdGlvbih0KXt0aGlzLl96SW5kZXg9dCx0aGlzLl9jb250YWluZXImJnRoaXMuX3pJbmRleCYmKHRoaXMuX2NvbnRhaW5lci5zdHlsZS56SW5kZXg9dCl9LHNldE9wYWNpdHk6ZnVuY3Rpb24oZSl7dGhpcy5vcHRpb25zLm9wYWNpdHk9ZSx0aGlzLl9jb250YWluZXImJnQuRG9tVXRpbC5zZXRPcGFjaXR5KHRoaXMuX2NvbnRhaW5lcixlKX0sX2luaXRMYXlvdXQ6ZnVuY3Rpb24oKXtpZih0aGlzLl9jb250YWluZXI9dC5Eb21VdGlsLmNyZWF0ZSgiZGl2IiwibGVhZmxldC1sYWJlbCAiK3RoaXMub3B0aW9ucy5jbGFzc05hbWUrIiBsZWFmbGV0LXpvb20tYW5pbWF0ZWQiKSx0aGlzLl9jb250YWluZXIuc3R5bGUuZm9udFNpemU9dGhpcy5vcHRpb25zLnRleHRzaXplLHRoaXMub3B0aW9ucy50ZXh0T25seSYmdC5Eb21VdGlsLmFkZENsYXNzKHRoaXMuX2NvbnRhaW5lciwibGVhZmxldC1sYWJlbC10ZXh0LW9ubHkiKSx0aGlzLm9wdGlvbnMuc3R5bGUpZm9yKHZhciBlIGluIHRoaXMub3B0aW9ucy5zdHlsZSl0aGlzLm9wdGlvbnMuc3R5bGUuaGFzT3duUHJvcGVydHkoZSkmJih0aGlzLl9jb250YWluZXIuc3R5bGVbZV09dGhpcy5vcHRpb25zLnN0eWxlW2VdKTt0aGlzLnVwZGF0ZVpJbmRleCh0aGlzLl96SW5kZXgpfSxfdXBkYXRlOmZ1bmN0aW9uKCl7dGhpcy5fbWFwJiYodGhpcy5fY29udGFpbmVyLnN0eWxlLnZpc2liaWxpdHk9ImhpZGRlbiIsdGhpcy5fdXBkYXRlQ29udGVudCgpLHRoaXMuX3VwZGF0ZVBvc2l0aW9uKCksdGhpcy5fY29udGFpbmVyLnN0eWxlLnZpc2liaWxpdHk9IiIpfSxfdXBkYXRlQ29udGVudDpmdW5jdGlvbigpe3RoaXMuX2NvbnRlbnQmJnRoaXMuX21hcCYmdGhpcy5fcHJldkNvbnRlbnQhPT10aGlzLl9jb250ZW50JiYic3RyaW5nIj09dHlwZW9mIHRoaXMuX2NvbnRlbnQmJih0aGlzLl9jb250YWluZXIuaW5uZXJIVE1MPXRoaXMuX2NvbnRlbnQsdGhpcy5fcHJldkNvbnRlbnQ9dGhpcy5fY29udGVudCx0aGlzLl9sYWJlbFdpZHRoPXRoaXMuX2NvbnRhaW5lci5vZmZzZXRXaWR0aCl9LF91cGRhdGVQb3NpdGlvbjpmdW5jdGlvbigpe3ZhciB0PXRoaXMuX21hcC5sYXRMbmdUb0xheWVyUG9pbnQodGhpcy5fbGF0bG5nKTt0aGlzLl9zZXRQb3NpdGlvbih0KX0sX2dldEljb25IZWlnaHQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fc291cmNlLm9wdGlvbnMuaWNvbj90aGlzLl9zb3VyY2Uub3B0aW9ucy5pY29uLm9wdGlvbnMuaWNvblNpemVbMV06MH0sX3NldFBvc2l0aW9uOmZ1bmN0aW9uKGUpe3ZhciBpPXRoaXMuX21hcCxuPXRoaXMuX2NvbnRhaW5lcixvPWkubGF0TG5nVG9Db250YWluZXJQb2ludChpLmdldENlbnRlcigpKSxzPWkubGF5ZXJQb2ludFRvQ29udGFpbmVyUG9pbnQoZSksYT10aGlzLl9nZXREaXJlY3Rpb24oKSxoPXRoaXMuX2xhYmVsV2lkdGgsbD10LnBvaW50KHRoaXMub3B0aW9ucy5vZmZzZXQpLHI9bC55OyJ0b3AiPT09YT8oci09dGhpcy5faXNPbk1hcmtlcigpP3RoaXMuX2dldEljb25IZWlnaHQoKTowLGU9ZS5hZGQodC5wb2ludCgtaC8yLHIpKSk6ImJvdHRvbSI9PT1hPyhyKz10aGlzLl9pc09uTWFya2VyP3RoaXMuX2dldEljb25IZWlnaHQoKTowLGU9ZS5hZGQodC5wb2ludCgtaC8yLHIpKSk6InJpZ2h0Ij09PWF8fCJhdXRvIj09PWEmJnMueDxvLng/KGE9InJpZ2h0IixlPWUuYWRkKGwpKTooYT0ibGVmdCIsZT1lLmFkZCh0LnBvaW50KC1sLngtaCxsLnkpKSksdGhpcy5fc2V0UHJvcGVyQ2xhc3MoZSxhKSx0LkRvbVV0aWwuc2V0UG9zaXRpb24obixlKX0sX2dlbmVyYXRlTGFiZWxDbGFzczpmdW5jdGlvbih0KXtyZXR1cm4ibGVhZmxldC1sYWJlbC0iK3R9LF9zZXRQcm9wZXJDbGFzczpmdW5jdGlvbihlLGkpe2Zvcih2YXIgbj10aGlzLl9tYXAsbz10aGlzLl9jb250YWluZXIscz1pfHx0aGlzLl9nZXREaXJlY3Rpb24oKSxhPShuLmxheWVyUG9pbnRUb0NvbnRhaW5lclBvaW50KGUpLG4ubGF0TG5nVG9Db250YWluZXJQb2ludChuLmdldENlbnRlcigpKSx0aGlzLl9nZW5lcmF0ZUxhYmVsQ2xhc3MocykpLGg9MDtoPHRoaXMuX2RpcmVjdGlvbnMubGVuZ3RoO2grKyl7dmFyIGw9dGhpcy5fZGlyZWN0aW9uc1toXTtpZihsIT09cyl7dmFyIHI9dGhpcy5fZ2VuZXJhdGVMYWJlbENsYXNzKGwpO3QuRG9tVXRpbC5yZW1vdmVDbGFzcyhvLHIpfX10LkRvbVV0aWwuYWRkQ2xhc3MobyxhKX0sX2dldERpcmVjdGlvbjpmdW5jdGlvbigpe3JldHVybiB0aGlzLm9wdGlvbnMuZGlyZWN0aW9ufSxfem9vbUFuaW1hdGlvbjpmdW5jdGlvbih0KXt2YXIgZT10aGlzLl9tYXAuX2xhdExuZ1RvTmV3TGF5ZXJQb2ludCh0aGlzLl9sYXRsbmcsdC56b29tLHQuY2VudGVyKS5yb3VuZCgpO3RoaXMuX3NldFBvc2l0aW9uKGUpfSxfb25Nb3ZlRW5kOmZ1bmN0aW9uKCl7dGhpcy5fYW5pbWF0ZWQmJiJhdXRvIiE9PXRoaXMuX2dldERpcmVjdGlvbigpfHx0aGlzLl91cGRhdGVQb3NpdGlvbigpfSxfb25WaWV3UmVzZXQ6ZnVuY3Rpb24odCl7dCYmdC5oYXJkJiZ0aGlzLl91cGRhdGUoKX0sX2luaXRJbnRlcmFjdGlvbjpmdW5jdGlvbigpe2lmKHRoaXMub3B0aW9ucy5jbGlja2FibGUpe3ZhciBlPXRoaXMuX2NvbnRhaW5lcixpPVsiZGJsY2xpY2siLCJtb3VzZWRvd24iLCJtb3VzZW92ZXIiLCJtb3VzZW91dCIsImNvbnRleHRtZW51Il07dC5Eb21VdGlsLmFkZENsYXNzKGUsImxlYWZsZXQtY2xpY2thYmxlIiksdC5Eb21FdmVudC5vbihlLCJjbGljayIsdGhpcy5fb25Nb3VzZUNsaWNrLHRoaXMpO2Zvcih2YXIgbj0wO248aS5sZW5ndGg7bisrKXQuRG9tRXZlbnQub24oZSxpW25dLHRoaXMuX2ZpcmVNb3VzZUV2ZW50LHRoaXMpfX0sX3JlbW92ZUludGVyYWN0aW9uOmZ1bmN0aW9uKCl7aWYodGhpcy5vcHRpb25zLmNsaWNrYWJsZSl7dmFyIGU9dGhpcy5fY29udGFpbmVyLGk9WyJkYmxjbGljayIsIm1vdXNlZG93biIsIm1vdXNlb3ZlciIsIm1vdXNlb3V0IiwiY29udGV4dG1lbnUiXTt0LkRvbVV0aWwucmVtb3ZlQ2xhc3MoZSwibGVhZmxldC1jbGlja2FibGUiKSx0LkRvbUV2ZW50Lm9mZihlLCJjbGljayIsdGhpcy5fb25Nb3VzZUNsaWNrLHRoaXMpO2Zvcih2YXIgbj0wO248aS5sZW5ndGg7bisrKXQuRG9tRXZlbnQub2ZmKGUsaVtuXSx0aGlzLl9maXJlTW91c2VFdmVudCx0aGlzKX19LF9vbk1vdXNlQ2xpY2s6ZnVuY3Rpb24oZSl7dGhpcy5oYXNFdmVudExpc3RlbmVycyhlLnR5cGUpJiZ0LkRvbUV2ZW50LnN0b3BQcm9wYWdhdGlvbihlKSx0aGlzLmZpcmUoZS50eXBlLHtvcmlnaW5hbEV2ZW50OmV9KX0sX2ZpcmVNb3VzZUV2ZW50OmZ1bmN0aW9uKGUpe3RoaXMuZmlyZShlLnR5cGUse29yaWdpbmFsRXZlbnQ6ZX0pLCJjb250ZXh0bWVudSI9PT1lLnR5cGUmJnRoaXMuaGFzRXZlbnRMaXN0ZW5lcnMoZS50eXBlKSYmdC5Eb21FdmVudC5wcmV2ZW50RGVmYXVsdChlKSwibW91c2Vkb3duIiE9PWUudHlwZT90LkRvbUV2ZW50LnN0b3BQcm9wYWdhdGlvbihlKTp0LkRvbUV2ZW50LnByZXZlbnREZWZhdWx0KGUpfX0pO3JldHVybiB0LkJhc2VNYXJrZXJNZXRob2RzPXtzaG93TGFiZWw6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5sYWJlbCYmdGhpcy5fbWFwJiYodGhpcy5sYWJlbC5zZXRMYXRMbmcodGhpcy5fbGF0bG5nKSx0aGlzLl9tYXAuc2hvd0xhYmVsKHRoaXMubGFiZWwpKSx0aGlzfSxoaWRlTGFiZWw6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5sYWJlbCYmdGhpcy5sYWJlbC5jbG9zZSgpLHRoaXN9LHNldExhYmVsTm9IaWRlOmZ1bmN0aW9uKHQpe3RoaXMuX2xhYmVsTm9IaWRlIT09dCYmKHRoaXMuX2xhYmVsTm9IaWRlPXQsdD8odGhpcy5fcmVtb3ZlTGFiZWxSZXZlYWxIYW5kbGVycygpLHRoaXMuc2hvd0xhYmVsKCkpOih0aGlzLl9hZGRMYWJlbFJldmVhbEhhbmRsZXJzKCksdGhpcy5oaWRlTGFiZWwoKSkpfSxiaW5kTGFiZWw6ZnVuY3Rpb24oaSxuKXt2YXIgbz10aGlzLm9wdGlvbnMuaWNvbj90aGlzLm9wdGlvbnMuaWNvbi5vcHRpb25zLmxhYmVsQW5jaG9yOnRoaXMub3B0aW9ucy5sYWJlbEFuY2hvcixzPXQucG9pbnQobyl8fHQucG9pbnQoMCwwKTtyZXR1cm4gcz1zLmFkZChlLnByb3RvdHlwZS5vcHRpb25zLm9mZnNldCksbiYmbi5vZmZzZXQmJihzPXMuYWRkKG4ub2Zmc2V0KSksbj10LlV0aWwuZXh0ZW5kKHtvZmZzZXQ6c30sbiksdGhpcy5fbGFiZWxOb0hpZGU9bi5ub0hpZGUsdGhpcy5sYWJlbHx8KHRoaXMuX2xhYmVsTm9IaWRlfHx0aGlzLl9hZGRMYWJlbFJldmVhbEhhbmRsZXJzKCksdGhpcy5vbigicmVtb3ZlIix0aGlzLmhpZGVMYWJlbCx0aGlzKS5vbigibW92ZSIsdGhpcy5fbW92ZUxhYmVsLHRoaXMpLm9uKCJhZGQiLHRoaXMuX29uTWFya2VyQWRkLHRoaXMpLHRoaXMuX2hhc0xhYmVsSGFuZGxlcnM9ITApLHRoaXMubGFiZWw9bmV3IGUobix0aGlzKS5zZXRDb250ZW50KGkpLHRoaXN9LHVuYmluZExhYmVsOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMubGFiZWwmJih0aGlzLmhpZGVMYWJlbCgpLHRoaXMubGFiZWw9bnVsbCx0aGlzLl9oYXNMYWJlbEhhbmRsZXJzJiYodGhpcy5fbGFiZWxOb0hpZGV8fHRoaXMuX3JlbW92ZUxhYmVsUmV2ZWFsSGFuZGxlcnMoKSx0aGlzLm9mZigicmVtb3ZlIix0aGlzLmhpZGVMYWJlbCx0aGlzKS5vZmYoIm1vdmUiLHRoaXMuX21vdmVMYWJlbCx0aGlzKS5vZmYoImFkZCIsdGhpcy5fb25NYXJrZXJBZGQsdGhpcykpLHRoaXMuX2hhc0xhYmVsSGFuZGxlcnM9ITEpLHRoaXN9LHVwZGF0ZUxhYmVsQ29udGVudDpmdW5jdGlvbih0KXt0aGlzLmxhYmVsJiZ0aGlzLmxhYmVsLnNldENvbnRlbnQodCl9LGdldExhYmVsOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMubGFiZWx9LF9vbk1hcmtlckFkZDpmdW5jdGlvbigpe3RoaXMuX2xhYmVsTm9IaWRlJiZ0aGlzLnNob3dMYWJlbCgpfSxfYWRkTGFiZWxSZXZlYWxIYW5kbGVyczpmdW5jdGlvbigpe3RoaXMub24oIm1vdXNlb3ZlciIsdGhpcy5zaG93TGFiZWwsdGhpcykub24oIm1vdXNlb3V0Iix0aGlzLmhpZGVMYWJlbCx0aGlzKSx0LkJyb3dzZXIudG91Y2gmJnRoaXMub24oImNsaWNrIix0aGlzLnNob3dMYWJlbCx0aGlzKX0sX3JlbW92ZUxhYmVsUmV2ZWFsSGFuZGxlcnM6ZnVuY3Rpb24oKXt0aGlzLm9mZigibW91c2VvdmVyIix0aGlzLnNob3dMYWJlbCx0aGlzKS5vZmYoIm1vdXNlb3V0Iix0aGlzLmhpZGVMYWJlbCx0aGlzKSx0LkJyb3dzZXIudG91Y2gmJnRoaXMub2ZmKCJjbGljayIsdGhpcy5zaG93TGFiZWwsdGhpcyl9LF9tb3ZlTGFiZWw6ZnVuY3Rpb24odCl7dGhpcy5sYWJlbC5zZXRMYXRMbmcodC5sYXRsbmcpfX0sdC5JY29uLkRlZmF1bHQubWVyZ2VPcHRpb25zKHtsYWJlbEFuY2hvcjpuZXcgdC5Qb2ludCg5LC0yMCl9KSx0Lk1hcmtlci5tZXJnZU9wdGlvbnMoe2ljb246bmV3IHQuSWNvbi5EZWZhdWx0fSksdC5NYXJrZXIuaW5jbHVkZSh0LkJhc2VNYXJrZXJNZXRob2RzKSx0Lk1hcmtlci5pbmNsdWRlKHtfb3JpZ2luYWxVcGRhdGVaSW5kZXg6dC5NYXJrZXIucHJvdG90eXBlLl91cGRhdGVaSW5kZXgsX3VwZGF0ZVpJbmRleDpmdW5jdGlvbih0KXt2YXIgZT10aGlzLl96SW5kZXgrdDt0aGlzLl9vcmlnaW5hbFVwZGF0ZVpJbmRleCh0KSx0aGlzLmxhYmVsJiZ0aGlzLmxhYmVsLnVwZGF0ZVpJbmRleChlKX0sX29yaWdpbmFsU2V0T3BhY2l0eTp0Lk1hcmtlci5wcm90b3R5cGUuc2V0T3BhY2l0eSxzZXRPcGFjaXR5OmZ1bmN0aW9uKHQsZSl7dGhpcy5vcHRpb25zLmxhYmVsSGFzU2VtaVRyYW5zcGFyZW5jeT1lLHRoaXMuX29yaWdpbmFsU2V0T3BhY2l0eSh0KX0sX29yaWdpbmFsVXBkYXRlT3BhY2l0eTp0Lk1hcmtlci5wcm90b3R5cGUuX3VwZGF0ZU9wYWNpdHksX3VwZGF0ZU9wYWNpdHk6ZnVuY3Rpb24oKXt2YXIgdD0wPT09dGhpcy5vcHRpb25zLm9wYWNpdHk/MDoxO3RoaXMuX29yaWdpbmFsVXBkYXRlT3BhY2l0eSgpLHRoaXMubGFiZWwmJnRoaXMubGFiZWwuc2V0T3BhY2l0eSh0aGlzLm9wdGlvbnMubGFiZWxIYXNTZW1pVHJhbnNwYXJlbmN5P3RoaXMub3B0aW9ucy5vcGFjaXR5OnQpfSxfb3JpZ2luYWxTZXRMYXRMbmc6dC5NYXJrZXIucHJvdG90eXBlLnNldExhdExuZyxzZXRMYXRMbmc6ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMubGFiZWwmJiF0aGlzLl9sYWJlbE5vSGlkZSYmdGhpcy5oaWRlTGFiZWwoKSx0aGlzLl9vcmlnaW5hbFNldExhdExuZyh0KX19KSx0LkNpcmNsZU1hcmtlci5tZXJnZU9wdGlvbnMoe2xhYmVsQW5jaG9yOm5ldyB0LlBvaW50KDAsMCl9KSx0LkNpcmNsZU1hcmtlci5pbmNsdWRlKHQuQmFzZU1hcmtlck1ldGhvZHMpLHQuUGF0aC5pbmNsdWRlKHtiaW5kTGFiZWw6ZnVuY3Rpb24oaSxuKXtyZXR1cm4gdGhpcy5sYWJlbCYmdGhpcy5sYWJlbC5vcHRpb25zPT09bnx8KHRoaXMubGFiZWw9bmV3IGUobix0aGlzKSksdGhpcy5sYWJlbC5zZXRDb250ZW50KGkpLHRoaXMuX3Nob3dMYWJlbEFkZGVkfHwodGhpcy5vbigibW91c2VvdmVyIix0aGlzLl9zaG93TGFiZWwsdGhpcykub24oIm1vdXNlbW92ZSIsdGhpcy5fbW92ZUxhYmVsLHRoaXMpLm9uKCJtb3VzZW91dCByZW1vdmUiLHRoaXMuX2hpZGVMYWJlbCx0aGlzKSx0LkJyb3dzZXIudG91Y2gmJnRoaXMub24oImNsaWNrIix0aGlzLl9zaG93TGFiZWwsdGhpcyksdGhpcy5fc2hvd0xhYmVsQWRkZWQ9ITApLHRoaXN9LHVuYmluZExhYmVsOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMubGFiZWwmJih0aGlzLl9oaWRlTGFiZWwoKSx0aGlzLmxhYmVsPW51bGwsdGhpcy5fc2hvd0xhYmVsQWRkZWQ9ITEsdGhpcy5vZmYoIm1vdXNlb3ZlciIsdGhpcy5fc2hvd0xhYmVsLHRoaXMpLm9mZigibW91c2Vtb3ZlIix0aGlzLl9tb3ZlTGFiZWwsdGhpcykub2ZmKCJtb3VzZW91dCByZW1vdmUiLHRoaXMuX2hpZGVMYWJlbCx0aGlzKSksdGhpc30sdXBkYXRlTGFiZWxDb250ZW50OmZ1bmN0aW9uKHQpe3RoaXMubGFiZWwmJnRoaXMubGFiZWwuc2V0Q29udGVudCh0KX0sX3Nob3dMYWJlbDpmdW5jdGlvbih0KXt0aGlzLmxhYmVsLnNldExhdExuZyh0LmxhdGxuZyksdGhpcy5fbWFwLnNob3dMYWJlbCh0aGlzLmxhYmVsKX0sX21vdmVMYWJlbDpmdW5jdGlvbih0KXt0aGlzLmxhYmVsLnNldExhdExuZyh0LmxhdGxuZyl9LF9oaWRlTGFiZWw6ZnVuY3Rpb24oKXt0aGlzLmxhYmVsLmNsb3NlKCl9fSksdC5NYXAuaW5jbHVkZSh7c2hvd0xhYmVsOmZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLmFkZExheWVyKHQpfX0pLHQuRmVhdHVyZUdyb3VwLmluY2x1ZGUoe2NsZWFyTGF5ZXJzOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMudW5iaW5kTGFiZWwoKSx0aGlzLmVhY2hMYXllcih0aGlzLnJlbW92ZUxheWVyLHRoaXMpLHRoaXN9LGJpbmRMYWJlbDpmdW5jdGlvbih0LGUpe3JldHVybiB0aGlzLmludm9rZSgiYmluZExhYmVsIix0LGUpfSx1bmJpbmRMYWJlbDpmdW5jdGlvbigpe3JldHVybiB0aGlzLmludm9rZSgiaGlkZUxhYmVsIil9LHVwZGF0ZUxhYmVsQ29udGVudDpmdW5jdGlvbih0KXt0aGlzLmludm9rZSgidXBkYXRlTGFiZWxDb250ZW50Iix0KX19KSxlfSx3aW5kb3cpOw=="></script> | |
| <script src="data:application/x-javascript;base64,IWZ1bmN0aW9uKGEpe2lmKCJvYmplY3QiPT10eXBlb2YgZXhwb3J0cyYmInVuZGVmaW5lZCIhPXR5cGVvZiBtb2R1bGUpbW9kdWxlLmV4cG9ydHM9YSgpO2Vsc2UgaWYoImZ1bmN0aW9uIj09dHlwZW9mIGRlZmluZSYmZGVmaW5lLmFtZClkZWZpbmUoW10sYSk7ZWxzZXt2YXIgYjtiPSJ1bmRlZmluZWQiIT10eXBlb2Ygd2luZG93P3dpbmRvdzoidW5kZWZpbmVkIiE9dHlwZW9mIGdsb2JhbD9nbG9iYWw6InVuZGVmaW5lZCIhPXR5cGVvZiBzZWxmP3NlbGY6dGhpcyxiLnByb2o0PWEoKX19KGZ1bmN0aW9uKCl7cmV0dXJuIGZ1bmN0aW9uIGEoYixjLGQpe2Z1bmN0aW9uIGUoZyxoKXtpZighY1tnXSl7aWYoIWJbZ10pe3ZhciBpPSJmdW5jdGlvbiI9PXR5cGVvZiByZXF1aXJlJiZyZXF1aXJlO2lmKCFoJiZpKXJldHVybiBpKGcsITApO2lmKGYpcmV0dXJuIGYoZywhMCk7dmFyIGo9bmV3IEVycm9yKCJDYW5ub3QgZmluZCBtb2R1bGUgJyIrZysiJyIpO3Rocm93IGouY29kZT0iTU9EVUxFX05PVF9GT1VORCIsan12YXIgaz1jW2ddPXtleHBvcnRzOnt9fTtiW2ddWzBdLmNhbGwoay5leHBvcnRzLGZ1bmN0aW9uKGEpe3ZhciBjPWJbZ11bMV1bYV07cmV0dXJuIGUoYz9jOmEpfSxrLGsuZXhwb3J0cyxhLGIsYyxkKX1yZXR1cm4gY1tnXS5leHBvcnRzfWZvcih2YXIgZj0iZnVuY3Rpb24iPT10eXBlb2YgcmVxdWlyZSYmcmVxdWlyZSxnPTA7ZzxkLmxlbmd0aDtnKyspZShkW2ddKTtyZXR1cm4gZX0oeyIuL2luY2x1ZGVkUHJvamVjdGlvbnMiOltmdW5jdGlvbihhLGIsYyl7dmFyIGQ9W2EoIi4vbGliL3Byb2plY3Rpb25zL3RtZXJjIiksYSgiLi9saWIvcHJvamVjdGlvbnMvdXRtIiksYSgiLi9saWIvcHJvamVjdGlvbnMvc3RlcmVhIiksYSgiLi9saWIvcHJvamVjdGlvbnMvc3RlcmUiKSxhKCIuL2xpYi9wcm9qZWN0aW9ucy9zb21lcmMiKSxhKCIuL2xpYi9wcm9qZWN0aW9ucy9vbWVyYyIpLGEoIi4vbGliL3Byb2plY3Rpb25zL2xjYyIpLGEoIi4vbGliL3Byb2plY3Rpb25zL2tyb3ZhayIpLGEoIi4vbGliL3Byb2plY3Rpb25zL2Nhc3MiKSxhKCIuL2xpYi9wcm9qZWN0aW9ucy9sYWVhIiksYSgiLi9saWIvcHJvamVjdGlvbnMvYWVhIiksYSgiLi9saWIvcHJvamVjdGlvbnMvZ25vbSIpLGEoIi4vbGliL3Byb2plY3Rpb25zL2NlYSIpLGEoIi4vbGliL3Byb2plY3Rpb25zL2VxYyIpLGEoIi4vbGliL3Byb2plY3Rpb25zL3BvbHkiKSxhKCIuL2xpYi9wcm9qZWN0aW9ucy9uem1nIiksYSgiLi9saWIvcHJvamVjdGlvbnMvbWlsbCIpLGEoIi4vbGliL3Byb2plY3Rpb25zL3NpbnUiKSxhKCIuL2xpYi9wcm9qZWN0aW9ucy9tb2xsIiksYSgiLi9saWIvcHJvamVjdGlvbnMvZXFkYyIpLGEoIi4vbGliL3Byb2plY3Rpb25zL3ZhbmRnIiksYSgiLi9saWIvcHJvamVjdGlvbnMvYWVxZCIpLGEoIi4vbGliL3Byb2plY3Rpb25zL29ydGhvIildO2IuZXhwb3J0cz1mdW5jdGlvbihwcm9qNCl7ZC5mb3JFYWNoKGZ1bmN0aW9uKGEpe3Byb2o0LlByb2oucHJvamVjdGlvbnMuYWRkKGEpfSl9fSx7Ii4vbGliL3Byb2plY3Rpb25zL2FlYSI6NDAsIi4vbGliL3Byb2plY3Rpb25zL2FlcWQiOjQxLCIuL2xpYi9wcm9qZWN0aW9ucy9jYXNzIjo0MiwiLi9saWIvcHJvamVjdGlvbnMvY2VhIjo0MywiLi9saWIvcHJvamVjdGlvbnMvZXFjIjo0NCwiLi9saWIvcHJvamVjdGlvbnMvZXFkYyI6NDUsIi4vbGliL3Byb2plY3Rpb25zL2dub20iOjQ3LCIuL2xpYi9wcm9qZWN0aW9ucy9rcm92YWsiOjQ4LCIuL2xpYi9wcm9qZWN0aW9ucy9sYWVhIjo0OSwiLi9saWIvcHJvamVjdGlvbnMvbGNjIjo1MCwiLi9saWIvcHJvamVjdGlvbnMvbWlsbCI6NTMsIi4vbGliL3Byb2plY3Rpb25zL21vbGwiOjU0LCIuL2xpYi9wcm9qZWN0aW9ucy9uem1nIjo1NSwiLi9saWIvcHJvamVjdGlvbnMvb21lcmMiOjU2LCIuL2xpYi9wcm9qZWN0aW9ucy9vcnRobyI6NTcsIi4vbGliL3Byb2plY3Rpb25zL3BvbHkiOjU4LCIuL2xpYi9wcm9qZWN0aW9ucy9zaW51Ijo1OSwiLi9saWIvcHJvamVjdGlvbnMvc29tZXJjIjo2MCwiLi9saWIvcHJvamVjdGlvbnMvc3RlcmUiOjYxLCIuL2xpYi9wcm9qZWN0aW9ucy9zdGVyZWEiOjYyLCIuL2xpYi9wcm9qZWN0aW9ucy90bWVyYyI6NjMsIi4vbGliL3Byb2plY3Rpb25zL3V0bSI6NjQsIi4vbGliL3Byb2plY3Rpb25zL3ZhbmRnIjo2NX1dLDE6W2Z1bmN0aW9uKGEsYixjKXtmdW5jdGlvbiBQb2ludChhLGIsYyl7aWYoISh0aGlzIGluc3RhbmNlb2YgUG9pbnQpKXJldHVybiBuZXcgUG9pbnQoYSxiLGMpO2lmKEFycmF5LmlzQXJyYXkoYSkpdGhpcy54PWFbMF0sdGhpcy55PWFbMV0sdGhpcy56PWFbMl18fDA7ZWxzZSBpZigib2JqZWN0Ij09dHlwZW9mIGEpdGhpcy54PWEueCx0aGlzLnk9YS55LHRoaXMuej1hLnp8fDA7ZWxzZSBpZigic3RyaW5nIj09dHlwZW9mIGEmJiJ1bmRlZmluZWQiPT10eXBlb2YgYil7dmFyIGQ9YS5zcGxpdCgiLCIpO3RoaXMueD1wYXJzZUZsb2F0KGRbMF0sMTApLHRoaXMueT1wYXJzZUZsb2F0KGRbMV0sMTApLHRoaXMuej1wYXJzZUZsb2F0KGRbMl0sMTApfHwwfWVsc2UgdGhpcy54PWEsdGhpcy55PWIsdGhpcy56PWN8fDA7Y29uc29sZS53YXJuKCJwcm9qNC5Qb2ludCB3aWxsIGJlIHJlbW92ZWQgaW4gdmVyc2lvbiAzLCB1c2UgcHJvajQudG9Qb2ludCIpfXZhciBkPWEoIm1ncnMiKTtQb2ludC5mcm9tTUdSUz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3IFBvaW50KGQudG9Qb2ludChhKSl9LFBvaW50LnByb3RvdHlwZS50b01HUlM9ZnVuY3Rpb24oYSl7cmV0dXJuIGQuZm9yd2FyZChbdGhpcy54LHRoaXMueV0sYSl9LGIuZXhwb3J0cz1Qb2ludH0se21ncnM6Njh9XSwyOltmdW5jdGlvbihhLGIsYyl7ZnVuY3Rpb24gUHJvamVjdGlvbihhLGIpe2lmKCEodGhpcyBpbnN0YW5jZW9mIFByb2plY3Rpb24pKXJldHVybiBuZXcgUHJvamVjdGlvbihhKTtiPWJ8fGZ1bmN0aW9uKGEpe2lmKGEpdGhyb3cgYX07dmFyIGM9ZChhKTtpZigib2JqZWN0IiE9dHlwZW9mIGMpcmV0dXJuIHZvaWQgYihhKTt2YXIgZj1nKGMpLGg9UHJvamVjdGlvbi5wcm9qZWN0aW9ucy5nZXQoZi5wcm9qTmFtZSk7aD8oZSh0aGlzLGYpLGUodGhpcyxoKSx0aGlzLmluaXQoKSxiKG51bGwsdGhpcykpOmIoYSl9dmFyIGQ9YSgiLi9wYXJzZUNvZGUiKSxlPWEoIi4vZXh0ZW5kIiksZj1hKCIuL3Byb2plY3Rpb25zIiksZz1hKCIuL2Rlcml2ZUNvbnN0YW50cyIpO1Byb2plY3Rpb24ucHJvamVjdGlvbnM9ZixQcm9qZWN0aW9uLnByb2plY3Rpb25zLnN0YXJ0KCksYi5leHBvcnRzPVByb2plY3Rpb259LHsiLi9kZXJpdmVDb25zdGFudHMiOjMzLCIuL2V4dGVuZCI6MzQsIi4vcGFyc2VDb2RlIjozNywiLi9wcm9qZWN0aW9ucyI6Mzl9XSwzOltmdW5jdGlvbihhLGIsYyl7Yi5leHBvcnRzPWZ1bmN0aW9uKGEsYixjKXt2YXIgZCxlLGYsZz1jLngsaD1jLnksaT1jLnp8fDA7Zm9yKGY9MDszPmY7ZisrKWlmKCFifHwyIT09Znx8dm9pZCAwIT09Yy56KXN3aXRjaCgwPT09Zj8oZD1nLGU9IngiKToxPT09Zj8oZD1oLGU9InkiKTooZD1pLGU9InoiKSxhLmF4aXNbZl0pe2Nhc2UiZSI6Y1tlXT1kO2JyZWFrO2Nhc2UidyI6Y1tlXT0tZDticmVhaztjYXNlIm4iOmNbZV09ZDticmVhaztjYXNlInMiOmNbZV09LWQ7YnJlYWs7Y2FzZSJ1Ijp2b2lkIDAhPT1jW2VdJiYoYy56PWQpO2JyZWFrO2Nhc2UiZCI6dm9pZCAwIT09Y1tlXSYmKGMuej0tZCk7YnJlYWs7ZGVmYXVsdDpyZXR1cm4gbnVsbH1yZXR1cm4gY319LHt9XSw0OltmdW5jdGlvbihhLGIsYyl7dmFyIGQ9TWF0aC5QSS8yLGU9YSgiLi9zaWduIik7Yi5leHBvcnRzPWZ1bmN0aW9uKGEpe3JldHVybiBNYXRoLmFicyhhKTxkP2E6YS1lKGEpKk1hdGguUEl9fSx7Ii4vc2lnbiI6MjF9XSw1OltmdW5jdGlvbihhLGIsYyl7dmFyIGQ9MipNYXRoLlBJLGU9My4xNDE1OTI2NTM1OSxmPWEoIi4vc2lnbiIpO2IuZXhwb3J0cz1mdW5jdGlvbihhKXtyZXR1cm4gTWF0aC5hYnMoYSk8PWU/YTphLWYoYSkqZH19LHsiLi9zaWduIjoyMX1dLDY6W2Z1bmN0aW9uKGEsYixjKXtiLmV4cG9ydHM9ZnVuY3Rpb24oYSl7cmV0dXJuIE1hdGguYWJzKGEpPjEmJihhPWE+MT8xOi0xKSxNYXRoLmFzaW4oYSl9fSx7fV0sNzpbZnVuY3Rpb24oYSxiLGMpe2IuZXhwb3J0cz1mdW5jdGlvbihhKXtyZXR1cm4gMS0uMjUqYSooMSthLzE2KigzKzEuMjUqYSkpfX0se31dLDg6W2Z1bmN0aW9uKGEsYixjKXtiLmV4cG9ydHM9ZnVuY3Rpb24oYSl7cmV0dXJuLjM3NSphKigxKy4yNSphKigxKy40Njg3NSphKSl9fSx7fV0sOTpbZnVuY3Rpb24oYSxiLGMpe2IuZXhwb3J0cz1mdW5jdGlvbihhKXtyZXR1cm4uMDU4NTkzNzUqYSphKigxKy43NSphKX19LHt9XSwxMDpbZnVuY3Rpb24oYSxiLGMpe2IuZXhwb3J0cz1mdW5jdGlvbihhKXtyZXR1cm4gYSphKmEqKDM1LzMwNzIpfX0se31dLDExOltmdW5jdGlvbihhLGIsYyl7Yi5leHBvcnRzPWZ1bmN0aW9uKGEsYixjKXt2YXIgZD1iKmM7cmV0dXJuIGEvTWF0aC5zcXJ0KDEtZCpkKX19LHt9XSwxMjpbZnVuY3Rpb24oYSxiLGMpe2IuZXhwb3J0cz1mdW5jdGlvbihhLGIsYyxkLGUpe3ZhciBmLGc7Zj1hL2I7Zm9yKHZhciBoPTA7MTU+aDtoKyspaWYoZz0oYS0oYipmLWMqTWF0aC5zaW4oMipmKStkKk1hdGguc2luKDQqZiktZSpNYXRoLnNpbig2KmYpKSkvKGItMipjKk1hdGguY29zKDIqZikrNCpkKk1hdGguY29zKDQqZiktNiplKk1hdGguY29zKDYqZikpLGYrPWcsTWF0aC5hYnMoZyk8PTFlLTEwKXJldHVybiBmO3JldHVybiBOYU59fSx7fV0sMTM6W2Z1bmN0aW9uKGEsYixjKXt2YXIgZD1NYXRoLlBJLzI7Yi5leHBvcnRzPWZ1bmN0aW9uKGEsYil7dmFyIGM9MS0oMS1hKmEpLygyKmEpKk1hdGgubG9nKCgxLWEpLygxK2EpKTtpZihNYXRoLmFicyhNYXRoLmFicyhiKS1jKTwxZS02KXJldHVybiAwPmI/LTEqZDpkO2Zvcih2YXIgZSxmLGcsaCxpPU1hdGguYXNpbiguNSpiKSxqPTA7MzA+ajtqKyspaWYoZj1NYXRoLnNpbihpKSxnPU1hdGguY29zKGkpLGg9YSpmLGU9TWF0aC5wb3coMS1oKmgsMikvKDIqZykqKGIvKDEtYSphKS1mLygxLWgqaCkrLjUvYSpNYXRoLmxvZygoMS1oKS8oMStoKSkpLGkrPWUsTWF0aC5hYnMoZSk8PTFlLTEwKXJldHVybiBpO3JldHVybiBOYU59fSx7fV0sMTQ6W2Z1bmN0aW9uKGEsYixjKXtiLmV4cG9ydHM9ZnVuY3Rpb24oYSxiLGMsZCxlKXtyZXR1cm4gYSplLWIqTWF0aC5zaW4oMiplKStjKk1hdGguc2luKDQqZSktZCpNYXRoLnNpbig2KmUpfX0se31dLDE1OltmdW5jdGlvbihhLGIsYyl7Yi5leHBvcnRzPWZ1bmN0aW9uKGEsYixjKXt2YXIgZD1hKmI7cmV0dXJuIGMvTWF0aC5zcXJ0KDEtZCpkKX19LHt9XSwxNjpbZnVuY3Rpb24oYSxiLGMpe3ZhciBkPU1hdGguUEkvMjtiLmV4cG9ydHM9ZnVuY3Rpb24oYSxiKXtmb3IodmFyIGMsZSxmPS41KmEsZz1kLTIqTWF0aC5hdGFuKGIpLGg9MDsxNT49aDtoKyspaWYoYz1hKk1hdGguc2luKGcpLGU9ZC0yKk1hdGguYXRhbihiKk1hdGgucG93KCgxLWMpLygxK2MpLGYpKS1nLGcrPWUsTWF0aC5hYnMoZSk8PTFlLTEwKXJldHVybiBnO3JldHVybi05OTk5fX0se31dLDE3OltmdW5jdGlvbihhLGIsYyl7dmFyIGQ9MSxlPS4yNSxmPS4wNDY4NzUsZz0uMDE5NTMxMjUsaD0uMDEwNjgxMTUyMzQzNzUsaT0uNzUsaj0uNDY4NzUsaz0uMDEzMDIwODMzMzMzMzMzMzM0LGw9LjAwNzEyMDc2ODIyOTE2NjY2NyxtPS4zNjQ1ODMzMzMzMzMzMzMzLG49LjAwNTY5NjYxNDU4MzMzMzMzMyxvPS4zMDc2MTcxODc1O2IuZXhwb3J0cz1mdW5jdGlvbihhKXt2YXIgYj1bXTtiWzBdPWQtYSooZSthKihmK2EqKGcrYSpoKSkpLGJbMV09YSooaS1hKihmK2EqKGcrYSpoKSkpO3ZhciBjPWEqYTtyZXR1cm4gYlsyXT1jKihqLWEqKGsrYSpsKSksYyo9YSxiWzNdPWMqKG0tYSpuKSxiWzRdPWMqYSpvLGJ9fSx7fV0sMTg6W2Z1bmN0aW9uKGEsYixjKXt2YXIgZD1hKCIuL3BqX21sZm4iKSxlPTFlLTEwLGY9MjA7Yi5leHBvcnRzPWZ1bmN0aW9uKGEsYixjKXtmb3IodmFyIGc9MS8oMS1iKSxoPWEsaT1mO2k7LS1pKXt2YXIgaj1NYXRoLnNpbihoKSxrPTEtYipqKmo7aWYoaz0oZChoLGosTWF0aC5jb3MoaCksYyktYSkqKGsqTWF0aC5zcXJ0KGspKSpnLGgtPWssTWF0aC5hYnMoayk8ZSlyZXR1cm4gaH1yZXR1cm4gaH19LHsiLi9wal9tbGZuIjoxOX1dLDE5OltmdW5jdGlvbihhLGIsYyl7Yi5leHBvcnRzPWZ1bmN0aW9uKGEsYixjLGQpe3JldHVybiBjKj1iLGIqPWIsZFswXSphLWMqKGRbMV0rYiooZFsyXStiKihkWzNdK2IqZFs0XSkpKX19LHt9XSwyMDpbZnVuY3Rpb24oYSxiLGMpe2IuZXhwb3J0cz1mdW5jdGlvbihhLGIpe3ZhciBjO3JldHVybiBhPjFlLTc/KGM9YSpiLCgxLWEqYSkqKGIvKDEtYypjKS0uNS9hKk1hdGgubG9nKCgxLWMpLygxK2MpKSkpOjIqYn19LHt9XSwyMTpbZnVuY3Rpb24oYSxiLGMpe2IuZXhwb3J0cz1mdW5jdGlvbihhKXtyZXR1cm4gMD5hPy0xOjF9fSx7fV0sMjI6W2Z1bmN0aW9uKGEsYixjKXtiLmV4cG9ydHM9ZnVuY3Rpb24oYSxiKXtyZXR1cm4gTWF0aC5wb3coKDEtYSkvKDErYSksYil9fSx7fV0sMjM6W2Z1bmN0aW9uKGEsYixjKXtiLmV4cG9ydHM9ZnVuY3Rpb24oYSl7dmFyIGI9e3g6YVswXSx5OmFbMV19O3JldHVybiBhLmxlbmd0aD4yJiYoYi56PWFbMl0pLGEubGVuZ3RoPjMmJihiLm09YVszXSksYn19LHt9XSwyNDpbZnVuY3Rpb24oYSxiLGMpe3ZhciBkPU1hdGguUEkvMjtiLmV4cG9ydHM9ZnVuY3Rpb24oYSxiLGMpe3ZhciBlPWEqYyxmPS41KmE7cmV0dXJuIGU9TWF0aC5wb3coKDEtZSkvKDErZSksZiksTWF0aC50YW4oLjUqKGQtYikpL2V9fSx7fV0sMjU6W2Z1bmN0aW9uKGEsYixjKXtjLndnczg0PXt0b3dnczg0OiIwLDAsMCIsZWxsaXBzZToiV0dTODQiLGRhdHVtTmFtZToiV0dTODQifSxjLmNoMTkwMz17dG93Z3M4NDoiNjc0LjM3NCwxNS4wNTYsNDA1LjM0NiIsZWxsaXBzZToiYmVzc2VsIixkYXR1bU5hbWU6InN3aXNzIn0sYy5nZ3JzODc9e3Rvd2dzODQ6Ii0xOTkuODcsNzQuNzksMjQ2LjYyIixlbGxpcHNlOiJHUlM4MCIsZGF0dW1OYW1lOiJHcmVla19HZW9kZXRpY19SZWZlcmVuY2VfU3lzdGVtXzE5ODcifSxjLm5hZDgzPXt0b3dnczg0OiIwLDAsMCIsZWxsaXBzZToiR1JTODAiLGRhdHVtTmFtZToiTm9ydGhfQW1lcmljYW5fRGF0dW1fMTk4MyJ9LGMubmFkMjc9e25hZGdyaWRzOiJAY29udXMsQGFsYXNrYSxAbnR2Ml8wLmdzYixAbnR2MV9jYW4uZGF0IixlbGxpcHNlOiJjbHJrNjYiLGRhdHVtTmFtZToiTm9ydGhfQW1lcmljYW5fRGF0dW1fMTkyNyJ9LGMucG90c2RhbT17dG93Z3M4NDoiNjA2LjAsMjMuMCw0MTMuMCIsZWxsaXBzZToiYmVzc2VsIixkYXR1bU5hbWU6IlBvdHNkYW0gUmF1ZW5iZXJnIDE5NTAgREhETiJ9LGMuY2FydGhhZ2U9e3Rvd2dzODQ6Ii0yNjMuMCw2LjAsNDMxLjAiLGVsbGlwc2U6ImNsYXJrODAiLGRhdHVtTmFtZToiQ2FydGhhZ2UgMTkzNCBUdW5pc2lhIn0sYy5oZXJtYW5uc2tvZ2VsPXt0b3dnczg0OiI2NTMuMCwtMjEyLjAsNDQ5LjAiLGVsbGlwc2U6ImJlc3NlbCIsZGF0dW1OYW1lOiJIZXJtYW5uc2tvZ2VsIn0sYy5pcmU2NT17dG93Z3M4NDoiNDgyLjUzMCwtMTMwLjU5Niw1NjQuNTU3LC0xLjA0MiwtMC4yMTQsLTAuNjMxLDguMTUiLGVsbGlwc2U6Im1vZF9haXJ5IixkYXR1bU5hbWU6IklyZWxhbmQgMTk2NSJ9LGMucmFzc2FkaXJhbj17dG93Z3M4NDoiLTEzMy42MywtMTU3LjUsLTE1OC42MiIsZWxsaXBzZToiaW50bCIsZGF0dW1OYW1lOiJSYXNzYWRpcmFuIn0sYy5uemdkNDk9e3Rvd2dzODQ6IjU5LjQ3LC01LjA0LDE4Ny40NCwwLjQ3LC0wLjEsMS4wMjQsLTQuNTk5MyIsZWxsaXBzZToiaW50bCIsZGF0dW1OYW1lOiJOZXcgWmVhbGFuZCBHZW9kZXRpYyBEYXR1bSAxOTQ5In0sYy5vc2diMzY9e3Rvd2dzODQ6IjQ0Ni40NDgsLTEyNS4xNTcsNTQyLjA2MCwwLjE1MDIsMC4yNDcwLDAuODQyMSwtMjAuNDg5NCIsZWxsaXBzZToiYWlyeSIsZGF0dW1OYW1lOiJBaXJ5IDE4MzAifSxjLnNfanRzaz17dG93Z3M4NDoiNTg5LDc2LDQ4MCIsZWxsaXBzZToiYmVzc2VsIixkYXR1bU5hbWU6IlMtSlRTSyAoRmVycm8pIn0sYy5iZWR1YXJhbT17dG93Z3M4NDoiLTEwNiwtODcsMTg4IixlbGxpcHNlOiJjbHJrODAiLGRhdHVtTmFtZToiQmVkdWFyYW0ifSxjLmd1bnVuZ19zZWdhcmE9e3Rvd2dzODQ6Ii00MDMsNjg0LDQxIixlbGxpcHNlOiJiZXNzZWwiLGRhdHVtTmFtZToiR3VudW5nIFNlZ2FyYSBKYWthcnRhIn0sYy5ybmI3Mj17dG93Z3M4NDoiMTA2Ljg2OSwtNTIuMjk3OCwxMDMuNzI0LC0wLjMzNjU3LDAuNDU2OTU1LC0xLjg0MjE4LDEiLGVsbGlwc2U6ImludGwiLGRhdHVtTmFtZToiUmVzZWF1IE5hdGlvbmFsIEJlbGdlIDE5NzIifX0se31dLDI2OltmdW5jdGlvbihhLGIsYyl7Yy5NRVJJVD17YTo2Mzc4MTM3LHJmOjI5OC4yNTcsZWxsaXBzZU5hbWU6Ik1FUklUIDE5ODMifSxjLlNHUzg1PXthOjYzNzgxMzYscmY6Mjk4LjI1NyxlbGxpcHNlTmFtZToiU292aWV0IEdlb2RldGljIFN5c3RlbSA4NSJ9LGMuR1JTODA9e2E6NjM3ODEzNyxyZjoyOTguMjU3MjIyMTAxLGVsbGlwc2VOYW1lOiJHUlMgMTk4MChJVUdHLCAxOTgwKSJ9LGMuSUFVNzY9e2E6NjM3ODE0MCxyZjoyOTguMjU3LGVsbGlwc2VOYW1lOiJJQVUgMTk3NiJ9LGMuYWlyeT17YTo2Mzc3NTYzLjM5NixiOjYzNTYyNTYuOTEsZWxsaXBzZU5hbWU6IkFpcnkgMTgzMCJ9LGMuQVBMND17YTo2Mzc4MTM3LHJmOjI5OC4yNSxlbGxpcHNlTmFtZToiQXBwbC4gUGh5c2ljcy4gMTk2NSJ9LGMuTldMOUQ9e2E6NjM3ODE0NSxyZjoyOTguMjUsZWxsaXBzZU5hbWU6Ik5hdmFsIFdlYXBvbnMgTGFiLiwgMTk2NSJ9LGMubW9kX2Fpcnk9e2E6NjM3NzM0MC4xODksYjo2MzU2MDM0LjQ0NixlbGxpcHNlTmFtZToiTW9kaWZpZWQgQWlyeSJ9LGMuYW5kcmFlPXthOjYzNzcxMDQuNDMscmY6MzAwLGVsbGlwc2VOYW1lOiJBbmRyYWUgMTg3NiAoRGVuLiwgSWNsbmQuKSJ9LGMuYXVzdF9TQT17YTo2Mzc4MTYwLHJmOjI5OC4yNSxlbGxpcHNlTmFtZToiQXVzdHJhbGlhbiBOYXRsICYgUy4gQW1lci4gMTk2OSJ9LGMuR1JTNjc9e2E6NjM3ODE2MCxyZjoyOTguMjQ3MTY3NDI3LGVsbGlwc2VOYW1lOiJHUlMgNjcoSVVHRyAxOTY3KSJ9LGMuYmVzc2VsPXthOjYzNzczOTcuMTU1LHJmOjI5OS4xNTI4MTI4LGVsbGlwc2VOYW1lOiJCZXNzZWwgMTg0MSJ9LGMuYmVzc19uYW09e2E6NjM3NzQ4My44NjUscmY6Mjk5LjE1MjgxMjgsZWxsaXBzZU5hbWU6IkJlc3NlbCAxODQxIChOYW1pYmlhKSJ9LGMuY2xyazY2PXthOjYzNzgyMDYuNCxiOjYzNTY1ODMuOCxlbGxpcHNlTmFtZToiQ2xhcmtlIDE4NjYifSxjLmNscms4MD17YTo2Mzc4MjQ5LjE0NSxyZjoyOTMuNDY2MyxlbGxpcHNlTmFtZToiQ2xhcmtlIDE4ODAgbW9kLiJ9LGMuY2xyazU4PXthOjYzNzgyOTMuNjQ1MjA4NzU5LHJmOjI5NC4yNjA2NzYzNjkyNjU0LGVsbGlwc2VOYW1lOiJDbGFya2UgMTg1OCJ9LGMuQ1BNPXthOjYzNzU3MzguNyxyZjozMzQuMjksZWxsaXBzZU5hbWU6IkNvbW0uIGRlcyBQb2lkcyBldCBNZXN1cmVzIDE3OTkifSxjLmRlbG1icj17YTo2Mzc2NDI4LHJmOjMxMS41LGVsbGlwc2VOYW1lOiJEZWxhbWJyZSAxODEwIChCZWxnaXVtKSJ9LGMuZW5nZWxpcz17YTo2Mzc4MTM2LjA1LHJmOjI5OC4yNTY2LGVsbGlwc2VOYW1lOiJFbmdlbGlzIDE5ODUifSxjLmV2cnN0MzA9e2E6NjM3NzI3Ni4zNDUscmY6MzAwLjgwMTcsZWxsaXBzZU5hbWU6IkV2ZXJlc3QgMTgzMCJ9LGMuZXZyc3Q0OD17YTo2Mzc3MzA0LjA2MyxyZjozMDAuODAxNyxlbGxpcHNlTmFtZToiRXZlcmVzdCAxOTQ4In0sYy5ldnJzdDU2PXthOjYzNzczMDEuMjQzLHJmOjMwMC44MDE3LGVsbGlwc2VOYW1lOiJFdmVyZXN0IDE5NTYifSxjLmV2cnN0Njk9e2E6NjM3NzI5NS42NjQscmY6MzAwLjgwMTcsZWxsaXBzZU5hbWU6IkV2ZXJlc3QgMTk2OSJ9LGMuZXZyc3RTUz17YTo2Mzc3Mjk4LjU1NixyZjozMDAuODAxNyxlbGxpcHNlTmFtZToiRXZlcmVzdCAoU2FiYWggJiBTYXJhd2FrKSJ9LGMuZnNjaHI2MD17YTo2Mzc4MTY2LHJmOjI5OC4zLGVsbGlwc2VOYW1lOiJGaXNjaGVyIChNZXJjdXJ5IERhdHVtKSAxOTYwIn0sYy5mc2NocjYwbT17YTo2Mzc4MTU1LHJmOjI5OC4zLGVsbGlwc2VOYW1lOiJGaXNjaGVyIDE5NjAifSxjLmZzY2hyNjg9e2E6NjM3ODE1MCxyZjoyOTguMyxlbGxpcHNlTmFtZToiRmlzY2hlciAxOTY4In0sYy5oZWxtZXJ0PXthOjYzNzgyMDAscmY6Mjk4LjMsZWxsaXBzZU5hbWU6IkhlbG1lcnQgMTkwNiJ9LGMuaG91Z2g9e2E6NjM3ODI3MCxyZjoyOTcsZWxsaXBzZU5hbWU6IkhvdWdoIn0sYy5pbnRsPXthOjYzNzgzODgscmY6Mjk3LGVsbGlwc2VOYW1lOiJJbnRlcm5hdGlvbmFsIDE5MDkgKEhheWZvcmQpIn0sYy5rYXVsYT17YTo2Mzc4MTYzLHJmOjI5OC4yNCxlbGxpcHNlTmFtZToiS2F1bGEgMTk2MSJ9LGMubGVyY2g9e2E6NjM3ODEzOSxyZjoyOTguMjU3LGVsbGlwc2VOYW1lOiJMZXJjaCAxOTc5In0sYy5tcHJ0cz17YTo2Mzk3MzAwLHJmOjE5MSxlbGxpcHNlTmFtZToiTWF1cGVydGl1cyAxNzM4In0sYy5uZXdfaW50bD17YTo2Mzc4MTU3LjUsYjo2MzU2NzcyLjIsZWxsaXBzZU5hbWU6Ik5ldyBJbnRlcm5hdGlvbmFsIDE5NjcifSxjLnBsZXNzaXM9e2E6NjM3NjUyMyxyZjo2MzU1ODYzLGVsbGlwc2VOYW1lOiJQbGVzc2lzIDE4MTcgKEZyYW5jZSkifSxjLmtyYXNzPXthOjYzNzgyNDUscmY6Mjk4LjMsZWxsaXBzZU5hbWU6IktyYXNzb3Zza3ksIDE5NDIifSxjLlNFYXNpYT17YTo2Mzc4MTU1LGI6NjM1Njc3My4zMjA1LGVsbGlwc2VOYW1lOiJTb3V0aGVhc3QgQXNpYSJ9LGMud2FsYmVjaz17YTo2Mzc2ODk2LGI6NjM1NTgzNC44NDY3LGVsbGlwc2VOYW1lOiJXYWxiZWNrIn0sYy5XR1M2MD17YTo2Mzc4MTY1LHJmOjI5OC4zLGVsbGlwc2VOYW1lOiJXR1MgNjAifSxjLldHUzY2PXthOjYzNzgxNDUscmY6Mjk4LjI1LGVsbGlwc2VOYW1lOiJXR1MgNjYifSxjLldHUzc9e2E6NjM3ODEzNSxyZjoyOTguMjYsZWxsaXBzZU5hbWU6IldHUyA3MiJ9LGMuV0dTODQ9e2E6NjM3ODEzNyxyZjoyOTguMjU3MjIzNTYzLGVsbGlwc2VOYW1lOiJXR1MgODQifSxjLnNwaGVyZT17YTo2MzcwOTk3LGI6NjM3MDk5NyxlbGxpcHNlTmFtZToiTm9ybWFsIFNwaGVyZSAocj02MzcwOTk3KSJ9fSx7fV0sMjc6W2Z1bmN0aW9uKGEsYixjKXtjLmdyZWVud2ljaD0wLGMubGlzYm9uPS05LjEzMTkwNjExMTExMSxjLnBhcmlzPTIuMzM3MjI5MTY2NjY3LGMuYm9nb3RhPS03NC4wODA5MTY2NjY2NjcsYy5tYWRyaWQ9LTMuNjg3OTM4ODg4ODg5LGMucm9tZT0xMi40NTIzMzMzMzMzMzMsYy5iZXJuPTcuNDM5NTgzMzMzMzMzLGMuamFrYXJ0YT0xMDYuODA3NzE5NDQ0NDQ0LGMuZmVycm89LTE3LjY2NjY2NjY2NjY2NyxjLmJydXNzZWxzPTQuMzY3OTc1LGMuc3RvY2tob2xtPTE4LjA1ODI3Nzc3Nzc3OCxjLmF0aGVucz0yMy43MTYzMzc1LGMub3Nsbz0xMC43MjI5MTY2NjY2Njd9LHt9XSwyODpbZnVuY3Rpb24oYSxiLGMpe2MuZnQ9e3RvX21ldGVyOi4zMDQ4fSxjWyJ1cy1mdCJdPXt0b19tZXRlcjoxMjAwLzM5Mzd9fSx7fV0sMjk6W2Z1bmN0aW9uKGEsYixjKXtmdW5jdGlvbiBkKGEsYixjKXt2YXIgZDtyZXR1cm4gQXJyYXkuaXNBcnJheShjKT8oZD1nKGEsYixjKSwzPT09Yy5sZW5ndGg/W2QueCxkLnksZC56XTpbZC54LGQueV0pOmcoYSxiLGMpfWZ1bmN0aW9uIGUoYSl7cmV0dXJuIGEgaW5zdGFuY2VvZiBmP2E6YS5vUHJvaj9hLm9Qcm9qOmYoYSl9ZnVuY3Rpb24gcHJvajQoYSxiLGMpe2E9ZShhKTt2YXIgZixnPSExO3JldHVybiJ1bmRlZmluZWQiPT10eXBlb2YgYj8oYj1hLGE9aCxnPSEwKTooInVuZGVmaW5lZCIhPXR5cGVvZiBiLnh8fEFycmF5LmlzQXJyYXkoYikpJiYoYz1iLGI9YSxhPWgsZz0hMCksYj1lKGIpLGM/ZChhLGIsYyk6KGY9e2ZvcndhcmQ6ZnVuY3Rpb24oYyl7cmV0dXJuIGQoYSxiLGMpfSxpbnZlcnNlOmZ1bmN0aW9uKGMpe3JldHVybiBkKGIsYSxjKX19LGcmJihmLm9Qcm9qPWIpLGYpfXZhciBmPWEoIi4vUHJvaiIpLGc9YSgiLi90cmFuc2Zvcm0iKSxoPWYoIldHUzg0Iik7Yi5leHBvcnRzPXByb2o0fSx7Ii4vUHJvaiI6MiwiLi90cmFuc2Zvcm0iOjY2fV0sMzA6W2Z1bmN0aW9uKGEsYixjKXt2YXIgZD1NYXRoLlBJLzIsZT0xLGY9MixnPTMsaD00LGk9NSxqPTQ4NDgxMzY4MTEwOTUzNmUtMjAsaz0xLjAwMjYsbD0uMzgyNjgzNDMyMzY1MDg5OCxtPWZ1bmN0aW9uKGEpe3JldHVybiB0aGlzIGluc3RhbmNlb2YgbT8odGhpcy5kYXR1bV90eXBlPWgsdm9pZChhJiYoYS5kYXR1bUNvZGUmJiJub25lIj09PWEuZGF0dW1Db2RlJiYodGhpcy5kYXR1bV90eXBlPWkpLGEuZGF0dW1fcGFyYW1zJiYodGhpcy5kYXR1bV9wYXJhbXM9YS5kYXR1bV9wYXJhbXMubWFwKHBhcnNlRmxvYXQpLDA9PT10aGlzLmRhdHVtX3BhcmFtc1swXSYmMD09PXRoaXMuZGF0dW1fcGFyYW1zWzFdJiYwPT09dGhpcy5kYXR1bV9wYXJhbXNbMl18fCh0aGlzLmRhdHVtX3R5cGU9ZSksdGhpcy5kYXR1bV9wYXJhbXMubGVuZ3RoPjMmJigwPT09dGhpcy5kYXR1bV9wYXJhbXNbM10mJjA9PT10aGlzLmRhdHVtX3BhcmFtc1s0XSYmMD09PXRoaXMuZGF0dW1fcGFyYW1zWzVdJiYwPT09dGhpcy5kYXR1bV9wYXJhbXNbNl18fCh0aGlzLmRhdHVtX3R5cGU9Zix0aGlzLmRhdHVtX3BhcmFtc1szXSo9aix0aGlzLmRhdHVtX3BhcmFtc1s0XSo9aix0aGlzLmRhdHVtX3BhcmFtc1s1XSo9aix0aGlzLmRhdHVtX3BhcmFtc1s2XT10aGlzLmRhdHVtX3BhcmFtc1s2XS8xZTYrMSkpKSx0aGlzLmRhdHVtX3R5cGU9YS5ncmlkcz9nOnRoaXMuZGF0dW1fdHlwZSx0aGlzLmE9YS5hLHRoaXMuYj1hLmIsdGhpcy5lcz1hLmVzLHRoaXMuZXAyPWEuZXAyLHRoaXMuZGF0dW1fdHlwZT09PWcmJih0aGlzLmdyaWRzPWEuZ3JpZHMpKSkpOm5ldyBtKGEpfTttLnByb3RvdHlwZT17Y29tcGFyZV9kYXR1bXM6ZnVuY3Rpb24oYSl7cmV0dXJuIHRoaXMuZGF0dW1fdHlwZSE9PWEuZGF0dW1fdHlwZT8hMTp0aGlzLmEhPT1hLmF8fE1hdGguYWJzKHRoaXMuZXMtYS5lcyk+NWUtMTE/ITE6dGhpcy5kYXR1bV90eXBlPT09ZT90aGlzLmRhdHVtX3BhcmFtc1swXT09PWEuZGF0dW1fcGFyYW1zWzBdJiZ0aGlzLmRhdHVtX3BhcmFtc1sxXT09PWEuZGF0dW1fcGFyYW1zWzFdJiZ0aGlzLmRhdHVtX3BhcmFtc1syXT09PWEuZGF0dW1fcGFyYW1zWzJdOnRoaXMuZGF0dW1fdHlwZT09PWY/dGhpcy5kYXR1bV9wYXJhbXNbMF09PT1hLmRhdHVtX3BhcmFtc1swXSYmdGhpcy5kYXR1bV9wYXJhbXNbMV09PT1hLmRhdHVtX3BhcmFtc1sxXSYmdGhpcy5kYXR1bV9wYXJhbXNbMl09PT1hLmRhdHVtX3BhcmFtc1syXSYmdGhpcy5kYXR1bV9wYXJhbXNbM109PT1hLmRhdHVtX3BhcmFtc1szXSYmdGhpcy5kYXR1bV9wYXJhbXNbNF09PT1hLmRhdHVtX3BhcmFtc1s0XSYmdGhpcy5kYXR1bV9wYXJhbXNbNV09PT1hLmRhdHVtX3BhcmFtc1s1XSYmdGhpcy5kYXR1bV9wYXJhbXNbNl09PT1hLmRhdHVtX3BhcmFtc1s2XTp0aGlzLmRhdHVtX3R5cGU9PT1nfHxhLmRhdHVtX3R5cGU9PT1nP3RoaXMubmFkZ3JpZHM9PT1hLm5hZGdyaWRzOiEwfSxnZW9kZXRpY190b19nZW9jZW50cmljOmZ1bmN0aW9uKGEpe3ZhciBiLGMsZSxmLGcsaCxpLGo9YS54LGs9YS55LGw9YS56P2EuejowLG09MDtpZigtZD5rJiZrPi0xLjAwMSpkKWs9LWQ7ZWxzZSBpZihrPmQmJjEuMDAxKmQ+aylrPWQ7ZWxzZSBpZigtZD5rfHxrPmQpcmV0dXJuIG51bGw7cmV0dXJuIGo+TWF0aC5QSSYmKGotPTIqTWF0aC5QSSksZz1NYXRoLnNpbihrKSxpPU1hdGguY29zKGspLGg9ZypnLGY9dGhpcy5hL01hdGguc3FydCgxLXRoaXMuZXMqaCksYj0oZitsKSppKk1hdGguY29zKGopLGM9KGYrbCkqaSpNYXRoLnNpbihqKSxlPShmKigxLXRoaXMuZXMpK2wpKmcsYS54PWIsYS55PWMsYS56PWUsbX0sZ2VvY2VudHJpY190b19nZW9kZXRpYzpmdW5jdGlvbihhKXt2YXIgYixjLGUsZixnLGgsaSxqLGssbCxtLG4sbyxwLHEscixzLHQ9MWUtMTIsdT10KnQsdj0zMCx3PWEueCx4PWEueSx5PWEuej9hLno6MDtpZihvPSExLGI9TWF0aC5zcXJ0KHcqdyt4KngpLGM9TWF0aC5zcXJ0KHcqdyt4KngreSp5KSxiL3RoaXMuYTx0KXtpZihvPSEwLHE9MCxjL3RoaXMuYTx0KXJldHVybiByPWQsdm9pZChzPS10aGlzLmIpfWVsc2UgcT1NYXRoLmF0YW4yKHgsdyk7ZT15L2MsZj1iL2MsZz0xL01hdGguc3FydCgxLXRoaXMuZXMqKDItdGhpcy5lcykqZipmKSxqPWYqKDEtdGhpcy5lcykqZyxrPWUqZyxwPTA7ZG8gcCsrLGk9dGhpcy5hL01hdGguc3FydCgxLXRoaXMuZXMqayprKSxzPWIqait5KmstaSooMS10aGlzLmVzKmsqayksaD10aGlzLmVzKmkvKGkrcyksZz0xL01hdGguc3FydCgxLWgqKDItaCkqZipmKSxsPWYqKDEtaCkqZyxtPWUqZyxuPW0qai1sKmssaj1sLGs9bTt3aGlsZShuKm4+dSYmdj5wKTtyZXR1cm4gcj1NYXRoLmF0YW4obS9NYXRoLmFicyhsKSksYS54PXEsYS55PXIsYS56PXMsYX0sZ2VvY2VudHJpY190b19nZW9kZXRpY19ub25pdGVyOmZ1bmN0aW9uKGEpe3ZhciBiLGMsZSxmLGcsaCxpLGosbSxuLG8scCxxLHIscyx0LHUsdj1hLngsdz1hLnkseD1hLno/YS56OjA7aWYodj1wYXJzZUZsb2F0KHYpLHc9cGFyc2VGbG9hdCh3KSx4PXBhcnNlRmxvYXQoeCksdT0hMSwwIT09diliPU1hdGguYXRhbjIodyx2KTtlbHNlIGlmKHc+MCliPWQ7ZWxzZSBpZigwPncpYj0tZDtlbHNlIGlmKHU9ITAsYj0wLHg+MCljPWQ7ZWxzZXtpZighKDA+eCkpcmV0dXJuIGM9ZCx2b2lkKGU9LXRoaXMuYik7Yz0tZH1yZXR1cm4gZz12KnYrdyp3LGY9TWF0aC5zcXJ0KGcpLGg9eCprLGo9TWF0aC5zcXJ0KGgqaCtnKSxuPWgvaixwPWYvaixvPW4qbipuLGk9eCt0aGlzLmIqdGhpcy5lcDIqbyx0PWYtdGhpcy5hKnRoaXMuZXMqcCpwKnAsbT1NYXRoLnNxcnQoaSppK3QqdCkscT1pL20scj10L20scz10aGlzLmEvTWF0aC5zcXJ0KDEtdGhpcy5lcypxKnEpLGU9cj49bD9mL3ItczotbD49cj9mLy1yLXM6eC9xK3MqKHRoaXMuZXMtMSksdT09PSExJiYoYz1NYXRoLmF0YW4ocS9yKSksYS54PWIsYS55PWMsYS56PWUsYX0sZ2VvY2VudHJpY190b193Z3M4NDpmdW5jdGlvbihhKXtpZih0aGlzLmRhdHVtX3R5cGU9PT1lKWEueCs9dGhpcy5kYXR1bV9wYXJhbXNbMF0sYS55Kz10aGlzLmRhdHVtX3BhcmFtc1sxXSxhLnorPXRoaXMuZGF0dW1fcGFyYW1zWzJdO2Vsc2UgaWYodGhpcy5kYXR1bV90eXBlPT09Zil7dmFyIGI9dGhpcy5kYXR1bV9wYXJhbXNbMF0sYz10aGlzLmRhdHVtX3BhcmFtc1sxXSxkPXRoaXMuZGF0dW1fcGFyYW1zWzJdLGc9dGhpcy5kYXR1bV9wYXJhbXNbM10saD10aGlzLmRhdHVtX3BhcmFtc1s0XSxpPXRoaXMuZGF0dW1fcGFyYW1zWzVdLGo9dGhpcy5kYXR1bV9wYXJhbXNbNl0saz1qKihhLngtaSphLnkraCphLnopK2IsbD1qKihpKmEueCthLnktZyphLnopK2MsbT1qKigtaCphLngrZyphLnkrYS56KStkO2EueD1rLGEueT1sLGEuej1tfX0sZ2VvY2VudHJpY19mcm9tX3dnczg0OmZ1bmN0aW9uKGEpe2lmKHRoaXMuZGF0dW1fdHlwZT09PWUpYS54LT10aGlzLmRhdHVtX3BhcmFtc1swXSxhLnktPXRoaXMuZGF0dW1fcGFyYW1zWzFdLGEuei09dGhpcy5kYXR1bV9wYXJhbXNbMl07ZWxzZSBpZih0aGlzLmRhdHVtX3R5cGU9PT1mKXt2YXIgYj10aGlzLmRhdHVtX3BhcmFtc1swXSxjPXRoaXMuZGF0dW1fcGFyYW1zWzFdLGQ9dGhpcy5kYXR1bV9wYXJhbXNbMl0sZz10aGlzLmRhdHVtX3BhcmFtc1szXSxoPXRoaXMuZGF0dW1fcGFyYW1zWzRdLGk9dGhpcy5kYXR1bV9wYXJhbXNbNV0saj10aGlzLmRhdHVtX3BhcmFtc1s2XSxrPShhLngtYikvaixsPShhLnktYykvaixtPShhLnotZCkvajthLng9aytpKmwtaCptLGEueT0taSprK2wrZyptLGEuej1oKmstZypsK219fX0sYi5leHBvcnRzPW19LHt9XSwzMTpbZnVuY3Rpb24oYSxiLGMpe3ZhciBkPTEsZT0yLGY9MyxnPTUsaD02Mzc4MTM3LGk9LjAwNjY5NDM3OTk5MDE0MTMxNjtiLmV4cG9ydHM9ZnVuY3Rpb24oYSxiLGMpe2Z1bmN0aW9uIGooYSl7cmV0dXJuIGE9PT1kfHxhPT09ZX12YXIgayxsLG07aWYoYS5jb21wYXJlX2RhdHVtcyhiKSlyZXR1cm4gYztpZihhLmRhdHVtX3R5cGU9PT1nfHxiLmRhdHVtX3R5cGU9PT1nKXJldHVybiBjO3ZhciBuPWEuYSxvPWEuZXMscD1iLmEscT1iLmVzLHI9YS5kYXR1bV90eXBlO2lmKHI9PT1mKWlmKDA9PT10aGlzLmFwcGx5X2dyaWRzaGlmdChhLDAsYykpYS5hPWgsYS5lcz1pO2Vsc2V7aWYoIWEuZGF0dW1fcGFyYW1zKXJldHVybiBhLmE9bixhLmVzPWEuZXMsYztmb3Ioaz0xLGw9MCxtPWEuZGF0dW1fcGFyYW1zLmxlbmd0aDttPmw7bCsrKWsqPWEuZGF0dW1fcGFyYW1zW2xdO2lmKDA9PT1rKXJldHVybiBhLmE9bixhLmVzPWEuZXMsYztyPWEuZGF0dW1fcGFyYW1zLmxlbmd0aD4zP2U6ZH1yZXR1cm4gYi5kYXR1bV90eXBlPT09ZiYmKGIuYT1oLGIuZXM9aSksKGEuZXMhPT1iLmVzfHxhLmEhPT1iLmF8fGoocil8fGooYi5kYXR1bV90eXBlKSkmJihhLmdlb2RldGljX3RvX2dlb2NlbnRyaWMoYyksaihhLmRhdHVtX3R5cGUpJiZhLmdlb2NlbnRyaWNfdG9fd2dzODQoYyksaihiLmRhdHVtX3R5cGUpJiZiLmdlb2NlbnRyaWNfZnJvbV93Z3M4NChjKSxiLmdlb2NlbnRyaWNfdG9fZ2VvZGV0aWMoYykpLGIuZGF0dW1fdHlwZT09PWYmJnRoaXMuYXBwbHlfZ3JpZHNoaWZ0KGIsMSxjKSxhLmE9bixhLmVzPW8sYi5hPXAsYi5lcz1xLGN9fSx7fV0sMzI6W2Z1bmN0aW9uKGEsYixjKXtmdW5jdGlvbiBkKGEpe3ZhciBiPXRoaXM7aWYoMj09PWFyZ3VtZW50cy5sZW5ndGgpe3ZhciBjPWFyZ3VtZW50c1sxXTsic3RyaW5nIj09dHlwZW9mIGM/IisiPT09Yy5jaGFyQXQoMCk/ZFthXT1mKGFyZ3VtZW50c1sxXSk6ZFthXT1nKGFyZ3VtZW50c1sxXSk6ZFthXT1jfWVsc2UgaWYoMT09PWFyZ3VtZW50cy5sZW5ndGgpe2lmKEFycmF5LmlzQXJyYXkoYSkpcmV0dXJuIGEubWFwKGZ1bmN0aW9uKGEpe0FycmF5LmlzQXJyYXkoYSk/ZC5hcHBseShiLGEpOmQoYSl9KTtpZigic3RyaW5nIj09dHlwZW9mIGEpe2lmKGEgaW4gZClyZXR1cm4gZFthXX1lbHNlIkVQU0ciaW4gYT9kWyJFUFNHOiIrYS5FUFNHXT1hOiJFU1JJImluIGE/ZFsiRVNSSToiK2EuRVNSSV09YToiSUFVMjAwMCJpbiBhP2RbIklBVTIwMDA6IithLklBVTIwMDBdPWE6Y29uc29sZS5sb2coYSk7cmV0dXJufX12YXIgZT1hKCIuL2dsb2JhbCIpLGY9YSgiLi9wcm9qU3RyaW5nIiksZz1hKCIuL3drdCIpO2UoZCksYi5leHBvcnRzPWR9LHsiLi9nbG9iYWwiOjM1LCIuL3Byb2pTdHJpbmciOjM4LCIuL3drdCI6Njd9XSwzMzpbZnVuY3Rpb24oYSxiLGMpe3ZhciBkPWEoIi4vY29uc3RhbnRzL0RhdHVtIiksZT1hKCIuL2NvbnN0YW50cy9FbGxpcHNvaWQiKSxmPWEoIi4vZXh0ZW5kIiksZz1hKCIuL2RhdHVtIiksaD0xZS0xMCxpPS4xNjY2NjY2NjY2NjY2NjY2NixqPS4wNDcyMjIyMjIyMjIyMjIyMixrPS4wMjIxNTYwODQ2NTYwODQ2NTU7Yi5leHBvcnRzPWZ1bmN0aW9uKGEpe2lmKGEuZGF0dW1Db2RlJiYibm9uZSIhPT1hLmRhdHVtQ29kZSl7dmFyIGI9ZFthLmRhdHVtQ29kZV07YiYmKGEuZGF0dW1fcGFyYW1zPWIudG93Z3M4ND9iLnRvd2dzODQuc3BsaXQoIiwiKTpudWxsLGEuZWxscHM9Yi5lbGxpcHNlLGEuZGF0dW1OYW1lPWIuZGF0dW1OYW1lP2IuZGF0dW1OYW1lOmEuZGF0dW1Db2RlKX1pZighYS5hKXt2YXIgYz1lW2EuZWxscHNdP2VbYS5lbGxwc106ZS5XR1M4NDtmKGEsYyl9cmV0dXJuIGEucmYmJiFhLmImJihhLmI9KDEtMS9hLnJmKSphLmEpLCgwPT09YS5yZnx8TWF0aC5hYnMoYS5hLWEuYik8aCkmJihhLnNwaGVyZT0hMCxhLmI9YS5hKSxhLmEyPWEuYSphLmEsYS5iMj1hLmIqYS5iLGEuZXM9KGEuYTItYS5iMikvYS5hMixhLmU9TWF0aC5zcXJ0KGEuZXMpLGEuUl9BJiYoYS5hKj0xLWEuZXMqKGkrYS5lcyooaithLmVzKmspKSxhLmEyPWEuYSphLmEsYS5iMj1hLmIqYS5iLGEuZXM9MCksYS5lcDI9KGEuYTItYS5iMikvYS5iMixhLmswfHwoYS5rMD0xKSxhLmF4aXN8fChhLmF4aXM9ImVudSIpLGEuZGF0dW18fChhLmRhdHVtPWcoYSkpLGF9fSx7Ii4vY29uc3RhbnRzL0RhdHVtIjoyNSwiLi9jb25zdGFudHMvRWxsaXBzb2lkIjoyNiwiLi9kYXR1bSI6MzAsIi4vZXh0ZW5kIjozNH1dLDM0OltmdW5jdGlvbihhLGIsYyl7Yi5leHBvcnRzPWZ1bmN0aW9uKGEsYil7YT1hfHx7fTt2YXIgYyxkO2lmKCFiKXJldHVybiBhO2ZvcihkIGluIGIpYz1iW2RdLHZvaWQgMCE9PWMmJihhW2RdPWMpO3JldHVybiBhfX0se31dLDM1OltmdW5jdGlvbihhLGIsYyl7Yi5leHBvcnRzPWZ1bmN0aW9uKGEpe2EoIkVQU0c6NDMyNiIsIit0aXRsZT1XR1MgODQgKGxvbmcvbGF0KSArcHJvaj1sb25nbGF0ICtlbGxwcz1XR1M4NCArZGF0dW09V0dTODQgK3VuaXRzPWRlZ3JlZXMiKSxhKCJFUFNHOjQyNjkiLCIrdGl0bGU9TkFEODMgKGxvbmcvbGF0KSArcHJvaj1sb25nbGF0ICthPTYzNzgxMzcuMCArYj02MzU2NzUyLjMxNDE0MDM2ICtlbGxwcz1HUlM4MCArZGF0dW09TkFEODMgK3VuaXRzPWRlZ3JlZXMiKSxhKCJFUFNHOjM4NTciLCIrdGl0bGU9V0dTIDg0IC8gUHNldWRvLU1lcmNhdG9yICtwcm9qPW1lcmMgK2E9NjM3ODEzNyArYj02Mzc4MTM3ICtsYXRfdHM9MC4wICtsb25fMD0wLjAgK3hfMD0wLjAgK3lfMD0wICtrPTEuMCArdW5pdHM9bSArbmFkZ3JpZHM9QG51bGwgK25vX2RlZnMiKSxhLldHUzg0PWFbIkVQU0c6NDMyNiJdLGFbIkVQU0c6Mzc4NSJdPWFbIkVQU0c6Mzg1NyJdLGEuR09PR0xFPWFbIkVQU0c6Mzg1NyJdLGFbIkVQU0c6OTAwOTEzIl09YVsiRVBTRzozODU3Il0sYVsiRVBTRzoxMDIxMTMiXT1hWyJFUFNHOjM4NTciXX19LHt9XSwzNjpbZnVuY3Rpb24oYSxiLGMpe3ZhciBwcm9qND1hKCIuL2NvcmUiKTtwcm9qNC5kZWZhdWx0RGF0dW09IldHUzg0Iixwcm9qNC5Qcm9qPWEoIi4vUHJvaiIpLHByb2o0LldHUzg0PW5ldyBwcm9qNC5Qcm9qKCJXR1M4NCIpLHByb2o0LlBvaW50PWEoIi4vUG9pbnQiKSxwcm9qNC50b1BvaW50PWEoIi4vY29tbW9uL3RvUG9pbnQiKSxwcm9qNC5kZWZzPWEoIi4vZGVmcyIpLHByb2o0LnRyYW5zZm9ybT1hKCIuL3RyYW5zZm9ybSIpLHByb2o0Lm1ncnM9YSgibWdycyIpLHByb2o0LnZlcnNpb249YSgiLi4vcGFja2FnZS5qc29uIikudmVyc2lvbixhKCIuL2luY2x1ZGVkUHJvamVjdGlvbnMiKShwcm9qNCksYi5leHBvcnRzPXByb2o0fSx7Ii4uL3BhY2thZ2UuanNvbiI6NjksIi4vUG9pbnQiOjEsIi4vUHJvaiI6MiwiLi9jb21tb24vdG9Qb2ludCI6MjMsIi4vY29yZSI6MjksIi4vZGVmcyI6MzIsIi4vaW5jbHVkZWRQcm9qZWN0aW9ucyI6Ii4vaW5jbHVkZWRQcm9qZWN0aW9ucyIsIi4vdHJhbnNmb3JtIjo2NixtZ3JzOjY4fV0sMzc6W2Z1bmN0aW9uKGEsYixjKXtmdW5jdGlvbiBkKGEpe3JldHVybiJzdHJpbmciPT10eXBlb2YgYX1mdW5jdGlvbiBlKGEpe3JldHVybiBhIGluIGl9ZnVuY3Rpb24gZihhKXt2YXIgYj1bIkdFT0dDUyIsIkdFT0NDUyIsIlBST0pDUyIsIkxPQ0FMX0NTIl07cmV0dXJuIGIucmVkdWNlKGZ1bmN0aW9uKGIsYyl7cmV0dXJuIGIrMSthLmluZGV4T2YoYyl9LDApfWZ1bmN0aW9uIGcoYSl7cmV0dXJuIisiPT09YVswXX1mdW5jdGlvbiBoKGEpe3JldHVybiBkKGEpP2UoYSk/aVthXTpmKGEpP2ooYSk6ZyhhKT9rKGEpOnZvaWQgMDphfXZhciBpPWEoIi4vZGVmcyIpLGo9YSgiLi93a3QiKSxrPWEoIi4vcHJvalN0cmluZyIpO2IuZXhwb3J0cz1ofSx7Ii4vZGVmcyI6MzIsIi4vcHJvalN0cmluZyI6MzgsIi4vd2t0Ijo2N31dLDM4OltmdW5jdGlvbihhLGIsYyl7dmFyIGQ9LjAxNzQ1MzI5MjUxOTk0MzI5NSxlPWEoIi4vY29uc3RhbnRzL1ByaW1lTWVyaWRpYW4iKSxmPWEoIi4vY29uc3RhbnRzL3VuaXRzIik7Yi5leHBvcnRzPWZ1bmN0aW9uKGEpe3ZhciBiPXt9LGM9e307YS5zcGxpdCgiKyIpLm1hcChmdW5jdGlvbihhKXtyZXR1cm4gYS50cmltKCl9KS5maWx0ZXIoZnVuY3Rpb24oYSl7cmV0dXJuIGF9KS5mb3JFYWNoKGZ1bmN0aW9uKGEpe3ZhciBiPWEuc3BsaXQoIj0iKTtiLnB1c2goITApLGNbYlswXS50b0xvd2VyQ2FzZSgpXT1iWzFdfSk7dmFyIGcsaCxpLGo9e3Byb2o6InByb2pOYW1lIixkYXR1bToiZGF0dW1Db2RlIixyZjpmdW5jdGlvbihhKXtiLnJmPXBhcnNlRmxvYXQoYSl9LGxhdF8wOmZ1bmN0aW9uKGEpe2IubGF0MD1hKmR9LGxhdF8xOmZ1bmN0aW9uKGEpe2IubGF0MT1hKmR9LGxhdF8yOmZ1bmN0aW9uKGEpe2IubGF0Mj1hKmR9LGxhdF90czpmdW5jdGlvbihhKXtiLmxhdF90cz1hKmR9LGxvbl8wOmZ1bmN0aW9uKGEpe2IubG9uZzA9YSpkfSxsb25fMTpmdW5jdGlvbihhKXtiLmxvbmcxPWEqZH0sbG9uXzI6ZnVuY3Rpb24oYSl7Yi5sb25nMj1hKmR9LGFscGhhOmZ1bmN0aW9uKGEpe2IuYWxwaGE9cGFyc2VGbG9hdChhKSpkfSxsb25jOmZ1bmN0aW9uKGEpe2IubG9uZ2M9YSpkfSx4XzA6ZnVuY3Rpb24oYSl7Yi54MD1wYXJzZUZsb2F0KGEpfSx5XzA6ZnVuY3Rpb24oYSl7Yi55MD1wYXJzZUZsb2F0KGEpfSxrXzA6ZnVuY3Rpb24oYSl7Yi5rMD1wYXJzZUZsb2F0KGEpfSxrOmZ1bmN0aW9uKGEpe2IuazA9cGFyc2VGbG9hdChhKX0sYTpmdW5jdGlvbihhKXtiLmE9cGFyc2VGbG9hdChhKX0sYjpmdW5jdGlvbihhKXtiLmI9cGFyc2VGbG9hdChhKX0scl9hOmZ1bmN0aW9uKCl7Yi5SX0E9ITB9LHpvbmU6ZnVuY3Rpb24oYSl7Yi56b25lPXBhcnNlSW50KGEsMTApfSxzb3V0aDpmdW5jdGlvbigpe2IudXRtU291dGg9ITB9LHRvd2dzODQ6ZnVuY3Rpb24oYSl7Yi5kYXR1bV9wYXJhbXM9YS5zcGxpdCgiLCIpLm1hcChmdW5jdGlvbihhKXtyZXR1cm4gcGFyc2VGbG9hdChhKX0pfSx0b19tZXRlcjpmdW5jdGlvbihhKXtiLnRvX21ldGVyPXBhcnNlRmxvYXQoYSl9LHVuaXRzOmZ1bmN0aW9uKGEpe2IudW5pdHM9YSxmW2FdJiYoYi50b19tZXRlcj1mW2FdLnRvX21ldGVyKX0sZnJvbV9ncmVlbndpY2g6ZnVuY3Rpb24oYSl7Yi5mcm9tX2dyZWVud2ljaD1hKmR9LHBtOmZ1bmN0aW9uKGEpe2IuZnJvbV9ncmVlbndpY2g9KGVbYV0/ZVthXTpwYXJzZUZsb2F0KGEpKSpkfSxuYWRncmlkczpmdW5jdGlvbihhKXsiQG51bGwiPT09YT9iLmRhdHVtQ29kZT0ibm9uZSI6Yi5uYWRncmlkcz1hfSxheGlzOmZ1bmN0aW9uKGEpe3ZhciBjPSJld25zdWQiOzM9PT1hLmxlbmd0aCYmLTEhPT1jLmluZGV4T2YoYS5zdWJzdHIoMCwxKSkmJi0xIT09Yy5pbmRleE9mKGEuc3Vic3RyKDEsMSkpJiYtMSE9PWMuaW5kZXhPZihhLnN1YnN0cigyLDEpKSYmKGIuYXhpcz1hKX19O2ZvcihnIGluIGMpaD1jW2ddLGcgaW4gaj8oaT1qW2ddLCJmdW5jdGlvbiI9PXR5cGVvZiBpP2koaCk6YltpXT1oKTpiW2ddPWg7cmV0dXJuInN0cmluZyI9PXR5cGVvZiBiLmRhdHVtQ29kZSYmIldHUzg0IiE9PWIuZGF0dW1Db2RlJiYoYi5kYXR1bUNvZGU9Yi5kYXR1bUNvZGUudG9Mb3dlckNhc2UoKSksYn19LHsiLi9jb25zdGFudHMvUHJpbWVNZXJpZGlhbiI6MjcsIi4vY29uc3RhbnRzL3VuaXRzIjoyOH1dLDM5OltmdW5jdGlvbihhLGIsYyl7ZnVuY3Rpb24gZChhLGIpe3ZhciBjPWcubGVuZ3RoO3JldHVybiBhLm5hbWVzPyhnW2NdPWEsYS5uYW1lcy5mb3JFYWNoKGZ1bmN0aW9uKGEpe2ZbYS50b0xvd2VyQ2FzZSgpXT1jfSksdGhpcyk6KGNvbnNvbGUubG9nKGIpLCEwKX12YXIgZT1bYSgiLi9wcm9qZWN0aW9ucy9tZXJjIiksYSgiLi9wcm9qZWN0aW9ucy9sb25nbGF0IildLGY9e30sZz1bXTtjLmFkZD1kLGMuZ2V0PWZ1bmN0aW9uKGEpe2lmKCFhKXJldHVybiExO3ZhciBiPWEudG9Mb3dlckNhc2UoKTtyZXR1cm4idW5kZWZpbmVkIiE9dHlwZW9mIGZbYl0mJmdbZltiXV0/Z1tmW2JdXTp2b2lkIDB9LGMuc3RhcnQ9ZnVuY3Rpb24oKXtlLmZvckVhY2goZCl9fSx7Ii4vcHJvamVjdGlvbnMvbG9uZ2xhdCI6NTEsIi4vcHJvamVjdGlvbnMvbWVyYyI6NTJ9XSw0MDpbZnVuY3Rpb24oYSxiLGMpe3ZhciBkPTFlLTEwLGU9YSgiLi4vY29tbW9uL21zZm56IiksZj1hKCIuLi9jb21tb24vcXNmbnoiKSxnPWEoIi4uL2NvbW1vbi9hZGp1c3RfbG9uIiksaD1hKCIuLi9jb21tb24vYXNpbnoiKTtjLmluaXQ9ZnVuY3Rpb24oKXtNYXRoLmFicyh0aGlzLmxhdDErdGhpcy5sYXQyKTxkfHwodGhpcy50ZW1wPXRoaXMuYi90aGlzLmEsdGhpcy5lcz0xLU1hdGgucG93KHRoaXMudGVtcCwyKSx0aGlzLmUzPU1hdGguc3FydCh0aGlzLmVzKSx0aGlzLnNpbl9wbz1NYXRoLnNpbih0aGlzLmxhdDEpLHRoaXMuY29zX3BvPU1hdGguY29zKHRoaXMubGF0MSksdGhpcy50MT10aGlzLnNpbl9wbyx0aGlzLmNvbj10aGlzLnNpbl9wbyx0aGlzLm1zMT1lKHRoaXMuZTMsdGhpcy5zaW5fcG8sdGhpcy5jb3NfcG8pLHRoaXMucXMxPWYodGhpcy5lMyx0aGlzLnNpbl9wbyx0aGlzLmNvc19wbyksdGhpcy5zaW5fcG89TWF0aC5zaW4odGhpcy5sYXQyKSx0aGlzLmNvc19wbz1NYXRoLmNvcyh0aGlzLmxhdDIpLHRoaXMudDI9dGhpcy5zaW5fcG8sdGhpcy5tczI9ZSh0aGlzLmUzLHRoaXMuc2luX3BvLHRoaXMuY29zX3BvKSx0aGlzLnFzMj1mKHRoaXMuZTMsdGhpcy5zaW5fcG8sdGhpcy5jb3NfcG8pLHRoaXMuc2luX3BvPU1hdGguc2luKHRoaXMubGF0MCksdGhpcy5jb3NfcG89TWF0aC5jb3ModGhpcy5sYXQwKSx0aGlzLnQzPXRoaXMuc2luX3BvLHRoaXMucXMwPWYodGhpcy5lMyx0aGlzLnNpbl9wbyx0aGlzLmNvc19wbyksTWF0aC5hYnModGhpcy5sYXQxLXRoaXMubGF0Mik+ZD90aGlzLm5zMD0odGhpcy5tczEqdGhpcy5tczEtdGhpcy5tczIqdGhpcy5tczIpLyh0aGlzLnFzMi10aGlzLnFzMSk6dGhpcy5uczA9dGhpcy5jb24sdGhpcy5jPXRoaXMubXMxKnRoaXMubXMxK3RoaXMubnMwKnRoaXMucXMxLHRoaXMucmg9dGhpcy5hKk1hdGguc3FydCh0aGlzLmMtdGhpcy5uczAqdGhpcy5xczApL3RoaXMubnMwKX0sYy5mb3J3YXJkPWZ1bmN0aW9uKGEpe3ZhciBiPWEueCxjPWEueTt0aGlzLnNpbl9waGk9TWF0aC5zaW4oYyksdGhpcy5jb3NfcGhpPU1hdGguY29zKGMpO3ZhciBkPWYodGhpcy5lMyx0aGlzLnNpbl9waGksdGhpcy5jb3NfcGhpKSxlPXRoaXMuYSpNYXRoLnNxcnQodGhpcy5jLXRoaXMubnMwKmQpL3RoaXMubnMwLGg9dGhpcy5uczAqZyhiLXRoaXMubG9uZzApLGk9ZSpNYXRoLnNpbihoKSt0aGlzLngwLGo9dGhpcy5yaC1lKk1hdGguY29zKGgpK3RoaXMueTA7cmV0dXJuIGEueD1pLGEueT1qLGF9LGMuaW52ZXJzZT1mdW5jdGlvbihhKXt2YXIgYixjLGQsZSxmLGg7cmV0dXJuIGEueC09dGhpcy54MCxhLnk9dGhpcy5yaC1hLnkrdGhpcy55MCx0aGlzLm5zMD49MD8oYj1NYXRoLnNxcnQoYS54KmEueCthLnkqYS55KSxkPTEpOihiPS1NYXRoLnNxcnQoYS54KmEueCthLnkqYS55KSxkPS0xKSxlPTAsMCE9PWImJihlPU1hdGguYXRhbjIoZCphLngsZCphLnkpKSxkPWIqdGhpcy5uczAvdGhpcy5hLHRoaXMuc3BoZXJlP2g9TWF0aC5hc2luKCh0aGlzLmMtZCpkKS8oMip0aGlzLm5zMCkpOihjPSh0aGlzLmMtZCpkKS90aGlzLm5zMCxoPXRoaXMucGhpMXoodGhpcy5lMyxjKSksZj1nKGUvdGhpcy5uczArdGhpcy5sb25nMCksYS54PWYsYS55PWgsYX0sYy5waGkxej1mdW5jdGlvbihhLGIpe3ZhciBjLGUsZixnLGksaj1oKC41KmIpO2lmKGQ+YSlyZXR1cm4gajtmb3IodmFyIGs9YSphLGw9MTsyNT49bDtsKyspaWYoYz1NYXRoLnNpbihqKSxlPU1hdGguY29zKGopLGY9YSpjLGc9MS1mKmYsaT0uNSpnKmcvZSooYi8oMS1rKS1jL2crLjUvYSpNYXRoLmxvZygoMS1mKS8oMStmKSkpLGorPWksTWF0aC5hYnMoaSk8PTFlLTcpcmV0dXJuIGo7cmV0dXJuIG51bGx9LGMubmFtZXM9WyJBbGJlcnNfQ29uaWNfRXF1YWxfQXJlYSIsIkFsYmVycyIsImFlYSJdfSx7Ii4uL2NvbW1vbi9hZGp1c3RfbG9uIjo1LCIuLi9jb21tb24vYXNpbnoiOjYsIi4uL2NvbW1vbi9tc2ZueiI6MTUsIi4uL2NvbW1vbi9xc2ZueiI6MjB9XSw0MTpbZnVuY3Rpb24oYSxiLGMpe3ZhciBkPWEoIi4uL2NvbW1vbi9hZGp1c3RfbG9uIiksZT1NYXRoLlBJLzIsZj0xZS0xMCxnPWEoIi4uL2NvbW1vbi9tbGZuIiksaD1hKCIuLi9jb21tb24vZTBmbiIpLGk9YSgiLi4vY29tbW9uL2UxZm4iKSxqPWEoIi4uL2NvbW1vbi9lMmZuIiksaz1hKCIuLi9jb21tb24vZTNmbiIpLGw9YSgiLi4vY29tbW9uL2dOIiksbT1hKCIuLi9jb21tb24vYXNpbnoiKSxuPWEoIi4uL2NvbW1vbi9pbWxmbiIpO2MuaW5pdD1mdW5jdGlvbigpe3RoaXMuc2luX3AxMj1NYXRoLnNpbih0aGlzLmxhdDApLHRoaXMuY29zX3AxMj1NYXRoLmNvcyh0aGlzLmxhdDApfSxjLmZvcndhcmQ9ZnVuY3Rpb24oYSl7dmFyIGIsYyxtLG4sbyxwLHEscixzLHQsdSx2LHcseCx5LHosQSxCLEMsRCxFLEYsRyxIPWEueCxJPWEueSxKPU1hdGguc2luKGEueSksSz1NYXRoLmNvcyhhLnkpLEw9ZChILXRoaXMubG9uZzApO3JldHVybiB0aGlzLnNwaGVyZT9NYXRoLmFicyh0aGlzLnNpbl9wMTItMSk8PWY/KGEueD10aGlzLngwK3RoaXMuYSooZS1JKSpNYXRoLnNpbihMKSxhLnk9dGhpcy55MC10aGlzLmEqKGUtSSkqTWF0aC5jb3MoTCksYSk6TWF0aC5hYnModGhpcy5zaW5fcDEyKzEpPD1mPyhhLng9dGhpcy54MCt0aGlzLmEqKGUrSSkqTWF0aC5zaW4oTCksYS55PXRoaXMueTArdGhpcy5hKihlK0kpKk1hdGguY29zKEwpLGEpOihCPXRoaXMuc2luX3AxMipKK3RoaXMuY29zX3AxMipLKk1hdGguY29zKEwpLHo9TWF0aC5hY29zKEIpLEE9ei9NYXRoLnNpbih6KSxhLng9dGhpcy54MCt0aGlzLmEqQSpLKk1hdGguc2luKEwpLGEueT10aGlzLnkwK3RoaXMuYSpBKih0aGlzLmNvc19wMTIqSi10aGlzLnNpbl9wMTIqSypNYXRoLmNvcyhMKSksYSk6KGI9aCh0aGlzLmVzKSxjPWkodGhpcy5lcyksbT1qKHRoaXMuZXMpLG49ayh0aGlzLmVzKSxNYXRoLmFicyh0aGlzLnNpbl9wMTItMSk8PWY/KG89dGhpcy5hKmcoYixjLG0sbixlKSxwPXRoaXMuYSpnKGIsYyxtLG4sSSksYS54PXRoaXMueDArKG8tcCkqTWF0aC5zaW4oTCksYS55PXRoaXMueTAtKG8tcCkqTWF0aC5jb3MoTCksYSk6TWF0aC5hYnModGhpcy5zaW5fcDEyKzEpPD1mPyhvPXRoaXMuYSpnKGIsYyxtLG4sZSkscD10aGlzLmEqZyhiLGMsbSxuLEkpLGEueD10aGlzLngwKyhvK3ApKk1hdGguc2luKEwpLGEueT10aGlzLnkwKyhvK3ApKk1hdGguY29zKEwpLGEpOihxPUovSyxyPWwodGhpcy5hLHRoaXMuZSx0aGlzLnNpbl9wMTIpLHM9bCh0aGlzLmEsdGhpcy5lLEopLHQ9TWF0aC5hdGFuKCgxLXRoaXMuZXMpKnErdGhpcy5lcypyKnRoaXMuc2luX3AxMi8ocypLKSksdT1NYXRoLmF0YW4yKE1hdGguc2luKEwpLHRoaXMuY29zX3AxMipNYXRoLnRhbih0KS10aGlzLnNpbl9wMTIqTWF0aC5jb3MoTCkpLEM9MD09PXU/TWF0aC5hc2luKHRoaXMuY29zX3AxMipNYXRoLnNpbih0KS10aGlzLnNpbl9wMTIqTWF0aC5jb3ModCkpOk1hdGguYWJzKE1hdGguYWJzKHUpLU1hdGguUEkpPD1mPy1NYXRoLmFzaW4odGhpcy5jb3NfcDEyKk1hdGguc2luKHQpLXRoaXMuc2luX3AxMipNYXRoLmNvcyh0KSk6TWF0aC5hc2luKE1hdGguc2luKEwpKk1hdGguY29zKHQpL01hdGguc2luKHUpKSx2PXRoaXMuZSp0aGlzLnNpbl9wMTIvTWF0aC5zcXJ0KDEtdGhpcy5lcyksdz10aGlzLmUqdGhpcy5jb3NfcDEyKk1hdGguY29zKHUpL01hdGguc3FydCgxLXRoaXMuZXMpLHg9dip3LHk9dyp3LEQ9QypDLEU9RCpDLEY9RSpDLEc9RipDLHo9cipDKigxLUQqeSooMS15KS82K0UvOCp4KigxLTIqeSkrRi8xMjAqKHkqKDQtNyp5KS0zKnYqdiooMS03KnkpKS1HLzQ4KngpLGEueD10aGlzLngwK3oqTWF0aC5zaW4odSksYS55PXRoaXMueTAreipNYXRoLmNvcyh1KSxhKSl9LGMuaW52ZXJzZT1mdW5jdGlvbihhKXthLngtPXRoaXMueDAsYS55LT10aGlzLnkwO3ZhciBiLGMsbyxwLHEscixzLHQsdSx2LHcseCx5LHosQSxCLEMsRCxFLEYsRyxILEk7aWYodGhpcy5zcGhlcmUpe2lmKGI9TWF0aC5zcXJ0KGEueCphLngrYS55KmEueSksYj4yKmUqdGhpcy5hKXJldHVybjtyZXR1cm4gYz1iL3RoaXMuYSxvPU1hdGguc2luKGMpLHA9TWF0aC5jb3MoYykscT10aGlzLmxvbmcwLE1hdGguYWJzKGIpPD1mP3I9dGhpcy5sYXQwOihyPW0ocCp0aGlzLnNpbl9wMTIrYS55Km8qdGhpcy5jb3NfcDEyL2IpLHM9TWF0aC5hYnModGhpcy5sYXQwKS1lLHE9ZChNYXRoLmFicyhzKTw9Zj90aGlzLmxhdDA+PTA/dGhpcy5sb25nMCtNYXRoLmF0YW4yKGEueCwtYS55KTp0aGlzLmxvbmcwLU1hdGguYXRhbjIoLWEueCxhLnkpOnRoaXMubG9uZzArTWF0aC5hdGFuMihhLngqbyxiKnRoaXMuY29zX3AxMipwLWEueSp0aGlzLnNpbl9wMTIqbykpKSxhLng9cSxhLnk9cixhfXJldHVybiB0PWgodGhpcy5lcyksdT1pKHRoaXMuZXMpLHY9aih0aGlzLmVzKSx3PWsodGhpcy5lcyksTWF0aC5hYnModGhpcy5zaW5fcDEyLTEpPD1mPyh4PXRoaXMuYSpnKHQsdSx2LHcsZSksYj1NYXRoLnNxcnQoYS54KmEueCthLnkqYS55KSx5PXgtYixyPW4oeS90aGlzLmEsdCx1LHYsdykscT1kKHRoaXMubG9uZzArTWF0aC5hdGFuMihhLngsLTEqYS55KSksYS54PXEsYS55PXIsYSk6TWF0aC5hYnModGhpcy5zaW5fcDEyKzEpPD1mPyh4PXRoaXMuYSpnKHQsdSx2LHcsZSksYj1NYXRoLnNxcnQoYS54KmEueCthLnkqYS55KSx5PWIteCxyPW4oeS90aGlzLmEsdCx1LHYsdykscT1kKHRoaXMubG9uZzArTWF0aC5hdGFuMihhLngsYS55KSksYS54PXEsYS55PXIsYSk6KGI9TWF0aC5zcXJ0KGEueCphLngrYS55KmEueSksQj1NYXRoLmF0YW4yKGEueCxhLnkpLHo9bCh0aGlzLmEsdGhpcy5lLHRoaXMuc2luX3AxMiksQz1NYXRoLmNvcyhCKSxEPXRoaXMuZSp0aGlzLmNvc19wMTIqQyxFPS1EKkQvKDEtdGhpcy5lcyksRj0zKnRoaXMuZXMqKDEtRSkqdGhpcy5zaW5fcDEyKnRoaXMuY29zX3AxMipDLygxLXRoaXMuZXMpLEc9Yi96LEg9Ry1FKigxK0UpKk1hdGgucG93KEcsMykvNi1GKigxKzMqRSkqTWF0aC5wb3coRyw0KS8yNCxJPTEtRSpIKkgvMi1HKkgqSCpILzYsQT1NYXRoLmFzaW4odGhpcy5zaW5fcDEyKk1hdGguY29zKEgpK3RoaXMuY29zX3AxMipNYXRoLnNpbihIKSpDKSxxPWQodGhpcy5sb25nMCtNYXRoLmFzaW4oTWF0aC5zaW4oQikqTWF0aC5zaW4oSCkvTWF0aC5jb3MoQSkpKSxyPU1hdGguYXRhbigoMS10aGlzLmVzKkkqdGhpcy5zaW5fcDEyL01hdGguc2luKEEpKSpNYXRoLnRhbihBKS8oMS10aGlzLmVzKSksYS54PXEsYS55PXIsYSl9LGMubmFtZXM9WyJBemltdXRoYWxfRXF1aWRpc3RhbnQiLCJhZXFkIl19LHsiLi4vY29tbW9uL2FkanVzdF9sb24iOjUsIi4uL2NvbW1vbi9hc2lueiI6NiwiLi4vY29tbW9uL2UwZm4iOjcsIi4uL2NvbW1vbi9lMWZuIjo4LCIuLi9jb21tb24vZTJmbiI6OSwiLi4vY29tbW9uL2UzZm4iOjEwLCIuLi9jb21tb24vZ04iOjExLCIuLi9jb21tb24vaW1sZm4iOjEyLCIuLi9jb21tb24vbWxmbiI6MTR9XSw0MjpbZnVuY3Rpb24oYSxiLGMpe3ZhciBkPWEoIi4uL2NvbW1vbi9tbGZuIiksZT1hKCIuLi9jb21tb24vZTBmbiIpLGY9YSgiLi4vY29tbW9uL2UxZm4iKSxnPWEoIi4uL2NvbW1vbi9lMmZuIiksaD1hKCIuLi9jb21tb24vZTNmbiIpLGk9YSgiLi4vY29tbW9uL2dOIiksaj1hKCIuLi9jb21tb24vYWRqdXN0X2xvbiIpLGs9YSgiLi4vY29tbW9uL2FkanVzdF9sYXQiKSxsPWEoIi4uL2NvbW1vbi9pbWxmbiIpLG09TWF0aC5QSS8yLG49MWUtMTA7Yy5pbml0PWZ1bmN0aW9uKCl7dGhpcy5zcGhlcmV8fCh0aGlzLmUwPWUodGhpcy5lcyksdGhpcy5lMT1mKHRoaXMuZXMpLHRoaXMuZTI9Zyh0aGlzLmVzKSx0aGlzLmUzPWgodGhpcy5lcyksdGhpcy5tbDA9dGhpcy5hKmQodGhpcy5lMCx0aGlzLmUxLHRoaXMuZTIsdGhpcy5lMyx0aGlzLmxhdDApKX0sYy5mb3J3YXJkPWZ1bmN0aW9uKGEpe3ZhciBiLGMsZT1hLngsZj1hLnk7aWYoZT1qKGUtdGhpcy5sb25nMCksdGhpcy5zcGhlcmUpYj10aGlzLmEqTWF0aC5hc2luKE1hdGguY29zKGYpKk1hdGguc2luKGUpKSxjPXRoaXMuYSooTWF0aC5hdGFuMihNYXRoLnRhbihmKSxNYXRoLmNvcyhlKSktdGhpcy5sYXQwKTtlbHNle3ZhciBnPU1hdGguc2luKGYpLGg9TWF0aC5jb3MoZiksaz1pKHRoaXMuYSx0aGlzLmUsZyksbD1NYXRoLnRhbihmKSpNYXRoLnRhbihmKSxtPWUqTWF0aC5jb3MoZiksbj1tKm0sbz10aGlzLmVzKmgqaC8oMS10aGlzLmVzKSxwPXRoaXMuYSpkKHRoaXMuZTAsdGhpcy5lMSx0aGlzLmUyLHRoaXMuZTMsZik7Yj1rKm0qKDEtbipsKigxLzYtKDgtbCs4Km8pKm4vMTIwKSksYz1wLXRoaXMubWwwK2sqZy9oKm4qKC41Kyg1LWwrNipvKSpuLzI0KX1yZXR1cm4gYS54PWIrdGhpcy54MCxhLnk9Yyt0aGlzLnkwLGF9LGMuaW52ZXJzZT1mdW5jdGlvbihhKXthLngtPXRoaXMueDAsYS55LT10aGlzLnkwO3ZhciBiLGMsZD1hLngvdGhpcy5hLGU9YS55L3RoaXMuYTtpZih0aGlzLnNwaGVyZSl7dmFyIGY9ZSt0aGlzLmxhdDA7Yj1NYXRoLmFzaW4oTWF0aC5zaW4oZikqTWF0aC5jb3MoZCkpLGM9TWF0aC5hdGFuMihNYXRoLnRhbihkKSxNYXRoLmNvcyhmKSl9ZWxzZXt2YXIgZz10aGlzLm1sMC90aGlzLmErZSxoPWwoZyx0aGlzLmUwLHRoaXMuZTEsdGhpcy5lMix0aGlzLmUzKTtpZihNYXRoLmFicyhNYXRoLmFicyhoKS1tKTw9bilyZXR1cm4gYS54PXRoaXMubG9uZzAsYS55PW0sMD5lJiYoYS55Kj0tMSksYTt2YXIgbz1pKHRoaXMuYSx0aGlzLmUsTWF0aC5zaW4oaCkpLHA9bypvKm8vdGhpcy5hL3RoaXMuYSooMS10aGlzLmVzKSxxPU1hdGgucG93KE1hdGgudGFuKGgpLDIpLHI9ZCp0aGlzLmEvbyxzPXIqcjtiPWgtbypNYXRoLnRhbihoKS9wKnIqciooLjUtKDErMypxKSpyKnIvMjQpLGM9ciooMS1zKihxLzMrKDErMypxKSpxKnMvMTUpKS9NYXRoLmNvcyhoKX1yZXR1cm4gYS54PWooYyt0aGlzLmxvbmcwKSxhLnk9ayhiKSxhfSxjLm5hbWVzPVsiQ2Fzc2luaSIsIkNhc3NpbmlfU29sZG5lciIsImNhc3MiXX0seyIuLi9jb21tb24vYWRqdXN0X2xhdCI6NCwiLi4vY29tbW9uL2FkanVzdF9sb24iOjUsIi4uL2NvbW1vbi9lMGZuIjo3LCIuLi9jb21tb24vZTFmbiI6OCwiLi4vY29tbW9uL2UyZm4iOjksIi4uL2NvbW1vbi9lM2ZuIjoxMCwiLi4vY29tbW9uL2dOIjoxMSwiLi4vY29tbW9uL2ltbGZuIjoxMiwiLi4vY29tbW9uL21sZm4iOjE0fV0sNDM6W2Z1bmN0aW9uKGEsYixjKXt2YXIgZD1hKCIuLi9jb21tb24vYWRqdXN0X2xvbiIpLGU9YSgiLi4vY29tbW9uL3FzZm56IiksZj1hKCIuLi9jb21tb24vbXNmbnoiKSxnPWEoIi4uL2NvbW1vbi9pcXNmbnoiKTtjLmluaXQ9ZnVuY3Rpb24oKXt0aGlzLnNwaGVyZXx8KHRoaXMuazA9Zih0aGlzLmUsTWF0aC5zaW4odGhpcy5sYXRfdHMpLE1hdGguY29zKHRoaXMubGF0X3RzKSkpfSxjLmZvcndhcmQ9ZnVuY3Rpb24oYSl7dmFyIGIsYyxmPWEueCxnPWEueSxoPWQoZi10aGlzLmxvbmcwKTtpZih0aGlzLnNwaGVyZSliPXRoaXMueDArdGhpcy5hKmgqTWF0aC5jb3ModGhpcy5sYXRfdHMpLGM9dGhpcy55MCt0aGlzLmEqTWF0aC5zaW4oZykvTWF0aC5jb3ModGhpcy5sYXRfdHMpO2Vsc2V7dmFyIGk9ZSh0aGlzLmUsTWF0aC5zaW4oZykpO2I9dGhpcy54MCt0aGlzLmEqdGhpcy5rMCpoLGM9dGhpcy55MCt0aGlzLmEqaSouNS90aGlzLmswfXJldHVybiBhLng9YixhLnk9YyxhfSxjLmludmVyc2U9ZnVuY3Rpb24oYSl7YS54LT10aGlzLngwLGEueS09dGhpcy55MDt2YXIgYixjO3JldHVybiB0aGlzLnNwaGVyZT8oYj1kKHRoaXMubG9uZzArYS54L3RoaXMuYS9NYXRoLmNvcyh0aGlzLmxhdF90cykpLGM9TWF0aC5hc2luKGEueS90aGlzLmEqTWF0aC5jb3ModGhpcy5sYXRfdHMpKSk6KGM9Zyh0aGlzLmUsMiphLnkqdGhpcy5rMC90aGlzLmEpLGI9ZCh0aGlzLmxvbmcwK2EueC8odGhpcy5hKnRoaXMuazApKSksYS54PWIsYS55PWMsYX0sYy5uYW1lcz1bImNlYSJdfSx7Ii4uL2NvbW1vbi9hZGp1c3RfbG9uIjo1LCIuLi9jb21tb24vaXFzZm56IjoxMywiLi4vY29tbW9uL21zZm56IjoxNSwiLi4vY29tbW9uL3FzZm56IjoyMH1dLDQ0OltmdW5jdGlvbihhLGIsYyl7dmFyIGQ9YSgiLi4vY29tbW9uL2FkanVzdF9sb24iKSxlPWEoIi4uL2NvbW1vbi9hZGp1c3RfbGF0Iik7Yy5pbml0PWZ1bmN0aW9uKCl7dGhpcy54MD10aGlzLngwfHwwLHRoaXMueTA9dGhpcy55MHx8MCx0aGlzLmxhdDA9dGhpcy5sYXQwfHwwLHRoaXMubG9uZzA9dGhpcy5sb25nMHx8MCx0aGlzLmxhdF90cz10aGlzLmxhdF90c3x8MCx0aGlzLnRpdGxlPXRoaXMudGl0bGV8fCJFcXVpZGlzdGFudCBDeWxpbmRyaWNhbCAoUGxhdGUgQ2FycmUpIix0aGlzLnJjPU1hdGguY29zKHRoaXMubGF0X3RzKX0sYy5mb3J3YXJkPWZ1bmN0aW9uKGEpe3ZhciBiPWEueCxjPWEueSxmPWQoYi10aGlzLmxvbmcwKSxnPWUoYy10aGlzLmxhdDApO3JldHVybiBhLng9dGhpcy54MCt0aGlzLmEqZip0aGlzLnJjLGEueT10aGlzLnkwK3RoaXMuYSpnLGF9LGMuaW52ZXJzZT1mdW5jdGlvbihhKXt2YXIgYj1hLngsYz1hLnk7cmV0dXJuIGEueD1kKHRoaXMubG9uZzArKGItdGhpcy54MCkvKHRoaXMuYSp0aGlzLnJjKSksYS55PWUodGhpcy5sYXQwKyhjLXRoaXMueTApL3RoaXMuYSksYX0sYy5uYW1lcz1bIkVxdWlyZWN0YW5ndWxhciIsIkVxdWlkaXN0YW50X0N5bGluZHJpY2FsIiwiZXFjIl19LHsiLi4vY29tbW9uL2FkanVzdF9sYXQiOjQsIi4uL2NvbW1vbi9hZGp1c3RfbG9uIjo1fV0sNDU6W2Z1bmN0aW9uKGEsYixjKXt2YXIgZD1hKCIuLi9jb21tb24vZTBmbiIpLGU9YSgiLi4vY29tbW9uL2UxZm4iKSxmPWEoIi4uL2NvbW1vbi9lMmZuIiksZz1hKCIuLi9jb21tb24vZTNmbiIpLGg9YSgiLi4vY29tbW9uL21zZm56IiksaT1hKCIuLi9jb21tb24vbWxmbiIpLGo9YSgiLi4vY29tbW9uL2FkanVzdF9sb24iKSxrPWEoIi4uL2NvbW1vbi9hZGp1c3RfbGF0IiksbD1hKCIuLi9jb21tb24vaW1sZm4iKSxtPTFlLTEwO2MuaW5pdD1mdW5jdGlvbigpe01hdGguYWJzKHRoaXMubGF0MSt0aGlzLmxhdDIpPG18fCh0aGlzLmxhdDI9dGhpcy5sYXQyfHx0aGlzLmxhdDEsdGhpcy50ZW1wPXRoaXMuYi90aGlzLmEsdGhpcy5lcz0xLU1hdGgucG93KHRoaXMudGVtcCwyKSx0aGlzLmU9TWF0aC5zcXJ0KHRoaXMuZXMpLHRoaXMuZTA9ZCh0aGlzLmVzKSx0aGlzLmUxPWUodGhpcy5lcyksdGhpcy5lMj1mKHRoaXMuZXMpLHRoaXMuZTM9Zyh0aGlzLmVzKSx0aGlzLnNpbnBoaT1NYXRoLnNpbih0aGlzLmxhdDEpLHRoaXMuY29zcGhpPU1hdGguY29zKHRoaXMubGF0MSksdGhpcy5tczE9aCh0aGlzLmUsdGhpcy5zaW5waGksdGhpcy5jb3NwaGkpLHRoaXMubWwxPWkodGhpcy5lMCx0aGlzLmUxLHRoaXMuZTIsdGhpcy5lMyx0aGlzLmxhdDEpLE1hdGguYWJzKHRoaXMubGF0MS10aGlzLmxhdDIpPG0/dGhpcy5ucz10aGlzLnNpbnBoaToodGhpcy5zaW5waGk9TWF0aC5zaW4odGhpcy5sYXQyKSx0aGlzLmNvc3BoaT1NYXRoLmNvcyh0aGlzLmxhdDIpLHRoaXMubXMyPWgodGhpcy5lLHRoaXMuc2lucGhpLHRoaXMuY29zcGhpKSx0aGlzLm1sMj1pKHRoaXMuZTAsdGhpcy5lMSx0aGlzLmUyLHRoaXMuZTMsdGhpcy5sYXQyKSx0aGlzLm5zPSh0aGlzLm1zMS10aGlzLm1zMikvKHRoaXMubWwyLXRoaXMubWwxKSksdGhpcy5nPXRoaXMubWwxK3RoaXMubXMxL3RoaXMubnMsdGhpcy5tbDA9aSh0aGlzLmUwLHRoaXMuZTEsdGhpcy5lMix0aGlzLmUzLHRoaXMubGF0MCksdGhpcy5yaD10aGlzLmEqKHRoaXMuZy10aGlzLm1sMCkpfSxjLmZvcndhcmQ9ZnVuY3Rpb24oYSl7dmFyIGIsYz1hLngsZD1hLnk7aWYodGhpcy5zcGhlcmUpYj10aGlzLmEqKHRoaXMuZy1kKTtlbHNle3ZhciBlPWkodGhpcy5lMCx0aGlzLmUxLHRoaXMuZTIsdGhpcy5lMyxkKTtiPXRoaXMuYSoodGhpcy5nLWUpfXZhciBmPXRoaXMubnMqaihjLXRoaXMubG9uZzApLGc9dGhpcy54MCtiKk1hdGguc2luKGYpLGg9dGhpcy55MCt0aGlzLnJoLWIqTWF0aC5jb3MoZik7cmV0dXJuIGEueD1nLGEueT1oLGF9LGMuaW52ZXJzZT1mdW5jdGlvbihhKXthLngtPXRoaXMueDAsYS55PXRoaXMucmgtYS55K3RoaXMueTA7dmFyIGIsYyxkLGU7dGhpcy5ucz49MD8oYz1NYXRoLnNxcnQoYS54KmEueCthLnkqYS55KSwKYj0xKTooYz0tTWF0aC5zcXJ0KGEueCphLngrYS55KmEueSksYj0tMSk7dmFyIGY9MDtpZigwIT09YyYmKGY9TWF0aC5hdGFuMihiKmEueCxiKmEueSkpLHRoaXMuc3BoZXJlKXJldHVybiBlPWoodGhpcy5sb25nMCtmL3RoaXMubnMpLGQ9ayh0aGlzLmctYy90aGlzLmEpLGEueD1lLGEueT1kLGE7dmFyIGc9dGhpcy5nLWMvdGhpcy5hO3JldHVybiBkPWwoZyx0aGlzLmUwLHRoaXMuZTEsdGhpcy5lMix0aGlzLmUzKSxlPWoodGhpcy5sb25nMCtmL3RoaXMubnMpLGEueD1lLGEueT1kLGF9LGMubmFtZXM9WyJFcXVpZGlzdGFudF9Db25pYyIsImVxZGMiXX0seyIuLi9jb21tb24vYWRqdXN0X2xhdCI6NCwiLi4vY29tbW9uL2FkanVzdF9sb24iOjUsIi4uL2NvbW1vbi9lMGZuIjo3LCIuLi9jb21tb24vZTFmbiI6OCwiLi4vY29tbW9uL2UyZm4iOjksIi4uL2NvbW1vbi9lM2ZuIjoxMCwiLi4vY29tbW9uL2ltbGZuIjoxMiwiLi4vY29tbW9uL21sZm4iOjE0LCIuLi9jb21tb24vbXNmbnoiOjE1fV0sNDY6W2Z1bmN0aW9uKGEsYixjKXt2YXIgZD1NYXRoLlBJLzQsZT1hKCIuLi9jb21tb24vc3JhdCIpLGY9TWF0aC5QSS8yLGc9MjA7Yy5pbml0PWZ1bmN0aW9uKCl7dmFyIGE9TWF0aC5zaW4odGhpcy5sYXQwKSxiPU1hdGguY29zKHRoaXMubGF0MCk7Yio9Yix0aGlzLnJjPU1hdGguc3FydCgxLXRoaXMuZXMpLygxLXRoaXMuZXMqYSphKSx0aGlzLkM9TWF0aC5zcXJ0KDErdGhpcy5lcypiKmIvKDEtdGhpcy5lcykpLHRoaXMucGhpYzA9TWF0aC5hc2luKGEvdGhpcy5DKSx0aGlzLnJhdGV4cD0uNSp0aGlzLkMqdGhpcy5lLHRoaXMuSz1NYXRoLnRhbiguNSp0aGlzLnBoaWMwK2QpLyhNYXRoLnBvdyhNYXRoLnRhbiguNSp0aGlzLmxhdDArZCksdGhpcy5DKSplKHRoaXMuZSphLHRoaXMucmF0ZXhwKSl9LGMuZm9yd2FyZD1mdW5jdGlvbihhKXt2YXIgYj1hLngsYz1hLnk7cmV0dXJuIGEueT0yKk1hdGguYXRhbih0aGlzLksqTWF0aC5wb3coTWF0aC50YW4oLjUqYytkKSx0aGlzLkMpKmUodGhpcy5lKk1hdGguc2luKGMpLHRoaXMucmF0ZXhwKSktZixhLng9dGhpcy5DKmIsYX0sYy5pbnZlcnNlPWZ1bmN0aW9uKGEpe2Zvcih2YXIgYj0xZS0xNCxjPWEueC90aGlzLkMsaD1hLnksaT1NYXRoLnBvdyhNYXRoLnRhbiguNSpoK2QpL3RoaXMuSywxL3RoaXMuQyksaj1nO2o+MCYmKGg9MipNYXRoLmF0YW4oaSplKHRoaXMuZSpNYXRoLnNpbihhLnkpLC0uNSp0aGlzLmUpKS1mLCEoTWF0aC5hYnMoaC1hLnkpPGIpKTstLWopYS55PWg7cmV0dXJuIGo/KGEueD1jLGEueT1oLGEpOm51bGx9LGMubmFtZXM9WyJnYXVzcyJdfSx7Ii4uL2NvbW1vbi9zcmF0IjoyMn1dLDQ3OltmdW5jdGlvbihhLGIsYyl7dmFyIGQ9YSgiLi4vY29tbW9uL2FkanVzdF9sb24iKSxlPTFlLTEwLGY9YSgiLi4vY29tbW9uL2FzaW56Iik7Yy5pbml0PWZ1bmN0aW9uKCl7dGhpcy5zaW5fcDE0PU1hdGguc2luKHRoaXMubGF0MCksdGhpcy5jb3NfcDE0PU1hdGguY29zKHRoaXMubGF0MCksdGhpcy5pbmZpbml0eV9kaXN0PTFlMyp0aGlzLmEsdGhpcy5yYz0xfSxjLmZvcndhcmQ9ZnVuY3Rpb24oYSl7dmFyIGIsYyxmLGcsaCxpLGosayxsPWEueCxtPWEueTtyZXR1cm4gZj1kKGwtdGhpcy5sb25nMCksYj1NYXRoLnNpbihtKSxjPU1hdGguY29zKG0pLGc9TWF0aC5jb3MoZiksaT10aGlzLnNpbl9wMTQqYit0aGlzLmNvc19wMTQqYypnLGg9MSxpPjB8fE1hdGguYWJzKGkpPD1lPyhqPXRoaXMueDArdGhpcy5hKmgqYypNYXRoLnNpbihmKS9pLGs9dGhpcy55MCt0aGlzLmEqaCoodGhpcy5jb3NfcDE0KmItdGhpcy5zaW5fcDE0KmMqZykvaSk6KGo9dGhpcy54MCt0aGlzLmluZmluaXR5X2Rpc3QqYypNYXRoLnNpbihmKSxrPXRoaXMueTArdGhpcy5pbmZpbml0eV9kaXN0Kih0aGlzLmNvc19wMTQqYi10aGlzLnNpbl9wMTQqYypnKSksYS54PWosYS55PWssYX0sYy5pbnZlcnNlPWZ1bmN0aW9uKGEpe3ZhciBiLGMsZSxnLGgsaTtyZXR1cm4gYS54PShhLngtdGhpcy54MCkvdGhpcy5hLGEueT0oYS55LXRoaXMueTApL3RoaXMuYSxhLngvPXRoaXMuazAsYS55Lz10aGlzLmswLChiPU1hdGguc3FydChhLngqYS54K2EueSphLnkpKT8oZz1NYXRoLmF0YW4yKGIsdGhpcy5yYyksYz1NYXRoLnNpbihnKSxlPU1hdGguY29zKGcpLGk9ZihlKnRoaXMuc2luX3AxNCthLnkqYyp0aGlzLmNvc19wMTQvYiksaD1NYXRoLmF0YW4yKGEueCpjLGIqdGhpcy5jb3NfcDE0KmUtYS55KnRoaXMuc2luX3AxNCpjKSxoPWQodGhpcy5sb25nMCtoKSk6KGk9dGhpcy5waGljMCxoPTApLGEueD1oLGEueT1pLGF9LGMubmFtZXM9WyJnbm9tIl19LHsiLi4vY29tbW9uL2FkanVzdF9sb24iOjUsIi4uL2NvbW1vbi9hc2lueiI6Nn1dLDQ4OltmdW5jdGlvbihhLGIsYyl7dmFyIGQ9YSgiLi4vY29tbW9uL2FkanVzdF9sb24iKTtjLmluaXQ9ZnVuY3Rpb24oKXt0aGlzLmE9NjM3NzM5Ny4xNTUsdGhpcy5lcz0uMDA2Njc0MzcyMjMwNjE0LHRoaXMuZT1NYXRoLnNxcnQodGhpcy5lcyksdGhpcy5sYXQwfHwodGhpcy5sYXQwPS44NjM5Mzc5Nzk3MzcxOTMpLHRoaXMubG9uZzB8fCh0aGlzLmxvbmcwPS40MzM0MjM0MzA5MTE5MjUxKSx0aGlzLmswfHwodGhpcy5rMD0uOTk5OSksdGhpcy5zNDU9Ljc4NTM5ODE2MzM5NzQ0OCx0aGlzLnM5MD0yKnRoaXMuczQ1LHRoaXMuZmkwPXRoaXMubGF0MCx0aGlzLmUyPXRoaXMuZXMsdGhpcy5lPU1hdGguc3FydCh0aGlzLmUyKSx0aGlzLmFsZmE9TWF0aC5zcXJ0KDErdGhpcy5lMipNYXRoLnBvdyhNYXRoLmNvcyh0aGlzLmZpMCksNCkvKDEtdGhpcy5lMikpLHRoaXMudXE9MS4wNDIxNjg1NjM4MDQ3NCx0aGlzLnUwPU1hdGguYXNpbihNYXRoLnNpbih0aGlzLmZpMCkvdGhpcy5hbGZhKSx0aGlzLmc9TWF0aC5wb3coKDErdGhpcy5lKk1hdGguc2luKHRoaXMuZmkwKSkvKDEtdGhpcy5lKk1hdGguc2luKHRoaXMuZmkwKSksdGhpcy5hbGZhKnRoaXMuZS8yKSx0aGlzLms9TWF0aC50YW4odGhpcy51MC8yK3RoaXMuczQ1KS9NYXRoLnBvdyhNYXRoLnRhbih0aGlzLmZpMC8yK3RoaXMuczQ1KSx0aGlzLmFsZmEpKnRoaXMuZyx0aGlzLmsxPXRoaXMuazAsdGhpcy5uMD10aGlzLmEqTWF0aC5zcXJ0KDEtdGhpcy5lMikvKDEtdGhpcy5lMipNYXRoLnBvdyhNYXRoLnNpbih0aGlzLmZpMCksMikpLHRoaXMuczA9MS4zNzAwODM0NjI4MTU1NSx0aGlzLm49TWF0aC5zaW4odGhpcy5zMCksdGhpcy5ybzA9dGhpcy5rMSp0aGlzLm4wL01hdGgudGFuKHRoaXMuczApLHRoaXMuYWQ9dGhpcy5zOTAtdGhpcy51cX0sYy5mb3J3YXJkPWZ1bmN0aW9uKGEpe3ZhciBiLGMsZSxmLGcsaCxpLGo9YS54LGs9YS55LGw9ZChqLXRoaXMubG9uZzApO3JldHVybiBiPU1hdGgucG93KCgxK3RoaXMuZSpNYXRoLnNpbihrKSkvKDEtdGhpcy5lKk1hdGguc2luKGspKSx0aGlzLmFsZmEqdGhpcy5lLzIpLGM9MiooTWF0aC5hdGFuKHRoaXMuaypNYXRoLnBvdyhNYXRoLnRhbihrLzIrdGhpcy5zNDUpLHRoaXMuYWxmYSkvYiktdGhpcy5zNDUpLGU9LWwqdGhpcy5hbGZhLGY9TWF0aC5hc2luKE1hdGguY29zKHRoaXMuYWQpKk1hdGguc2luKGMpK01hdGguc2luKHRoaXMuYWQpKk1hdGguY29zKGMpKk1hdGguY29zKGUpKSxnPU1hdGguYXNpbihNYXRoLmNvcyhjKSpNYXRoLnNpbihlKS9NYXRoLmNvcyhmKSksaD10aGlzLm4qZyxpPXRoaXMucm8wKk1hdGgucG93KE1hdGgudGFuKHRoaXMuczAvMit0aGlzLnM0NSksdGhpcy5uKS9NYXRoLnBvdyhNYXRoLnRhbihmLzIrdGhpcy5zNDUpLHRoaXMubiksYS55PWkqTWF0aC5jb3MoaCkvMSxhLng9aSpNYXRoLnNpbihoKS8xLHRoaXMuY3plY2h8fChhLnkqPS0xLGEueCo9LTEpLGF9LGMuaW52ZXJzZT1mdW5jdGlvbihhKXt2YXIgYixjLGQsZSxmLGcsaCxpLGo9YS54O2EueD1hLnksYS55PWosdGhpcy5jemVjaHx8KGEueSo9LTEsYS54Kj0tMSksZz1NYXRoLnNxcnQoYS54KmEueCthLnkqYS55KSxmPU1hdGguYXRhbjIoYS55LGEueCksZT1mL01hdGguc2luKHRoaXMuczApLGQ9MiooTWF0aC5hdGFuKE1hdGgucG93KHRoaXMucm8wL2csMS90aGlzLm4pKk1hdGgudGFuKHRoaXMuczAvMit0aGlzLnM0NSkpLXRoaXMuczQ1KSxiPU1hdGguYXNpbihNYXRoLmNvcyh0aGlzLmFkKSpNYXRoLnNpbihkKS1NYXRoLnNpbih0aGlzLmFkKSpNYXRoLmNvcyhkKSpNYXRoLmNvcyhlKSksYz1NYXRoLmFzaW4oTWF0aC5jb3MoZCkqTWF0aC5zaW4oZSkvTWF0aC5jb3MoYikpLGEueD10aGlzLmxvbmcwLWMvdGhpcy5hbGZhLGg9YixpPTA7dmFyIGs9MDtkbyBhLnk9MiooTWF0aC5hdGFuKE1hdGgucG93KHRoaXMuaywtMS90aGlzLmFsZmEpKk1hdGgucG93KE1hdGgudGFuKGIvMit0aGlzLnM0NSksMS90aGlzLmFsZmEpKk1hdGgucG93KCgxK3RoaXMuZSpNYXRoLnNpbihoKSkvKDEtdGhpcy5lKk1hdGguc2luKGgpKSx0aGlzLmUvMikpLXRoaXMuczQ1KSxNYXRoLmFicyhoLWEueSk8MWUtMTAmJihpPTEpLGg9YS55LGsrPTE7d2hpbGUoMD09PWkmJjE1PmspO3JldHVybiBrPj0xNT9udWxsOmF9LGMubmFtZXM9WyJLcm92YWsiLCJrcm92YWsiXX0seyIuLi9jb21tb24vYWRqdXN0X2xvbiI6NX1dLDQ5OltmdW5jdGlvbihhLGIsYyl7dmFyIGQ9TWF0aC5QSS8yLGU9TWF0aC5QSS80LGY9MWUtMTAsZz1hKCIuLi9jb21tb24vcXNmbnoiKSxoPWEoIi4uL2NvbW1vbi9hZGp1c3RfbG9uIik7Yy5TX1BPTEU9MSxjLk5fUE9MRT0yLGMuRVFVSVQ9MyxjLk9CTElRPTQsYy5pbml0PWZ1bmN0aW9uKCl7dmFyIGE9TWF0aC5hYnModGhpcy5sYXQwKTtpZihNYXRoLmFicyhhLWQpPGY/dGhpcy5tb2RlPXRoaXMubGF0MDwwP3RoaXMuU19QT0xFOnRoaXMuTl9QT0xFOk1hdGguYWJzKGEpPGY/dGhpcy5tb2RlPXRoaXMuRVFVSVQ6dGhpcy5tb2RlPXRoaXMuT0JMSVEsdGhpcy5lcz4wKXt2YXIgYjtzd2l0Y2godGhpcy5xcD1nKHRoaXMuZSwxKSx0aGlzLm1tZj0uNS8oMS10aGlzLmVzKSx0aGlzLmFwYT10aGlzLmF1dGhzZXQodGhpcy5lcyksdGhpcy5tb2RlKXtjYXNlIHRoaXMuTl9QT0xFOnRoaXMuZGQ9MTticmVhaztjYXNlIHRoaXMuU19QT0xFOnRoaXMuZGQ9MTticmVhaztjYXNlIHRoaXMuRVFVSVQ6dGhpcy5ycT1NYXRoLnNxcnQoLjUqdGhpcy5xcCksdGhpcy5kZD0xL3RoaXMucnEsdGhpcy54bWY9MSx0aGlzLnltZj0uNSp0aGlzLnFwO2JyZWFrO2Nhc2UgdGhpcy5PQkxJUTp0aGlzLnJxPU1hdGguc3FydCguNSp0aGlzLnFwKSxiPU1hdGguc2luKHRoaXMubGF0MCksdGhpcy5zaW5iMT1nKHRoaXMuZSxiKS90aGlzLnFwLHRoaXMuY29zYjE9TWF0aC5zcXJ0KDEtdGhpcy5zaW5iMSp0aGlzLnNpbmIxKSx0aGlzLmRkPU1hdGguY29zKHRoaXMubGF0MCkvKE1hdGguc3FydCgxLXRoaXMuZXMqYipiKSp0aGlzLnJxKnRoaXMuY29zYjEpLHRoaXMueW1mPSh0aGlzLnhtZj10aGlzLnJxKS90aGlzLmRkLHRoaXMueG1mKj10aGlzLmRkfX1lbHNlIHRoaXMubW9kZT09PXRoaXMuT0JMSVEmJih0aGlzLnNpbnBoMD1NYXRoLnNpbih0aGlzLmxhdDApLHRoaXMuY29zcGgwPU1hdGguY29zKHRoaXMubGF0MCkpfSxjLmZvcndhcmQ9ZnVuY3Rpb24oYSl7dmFyIGIsYyxpLGosayxsLG0sbixvLHAscT1hLngscj1hLnk7aWYocT1oKHEtdGhpcy5sb25nMCksdGhpcy5zcGhlcmUpe2lmKGs9TWF0aC5zaW4ocikscD1NYXRoLmNvcyhyKSxpPU1hdGguY29zKHEpLHRoaXMubW9kZT09PXRoaXMuT0JMSVF8fHRoaXMubW9kZT09PXRoaXMuRVFVSVQpe2lmKGM9dGhpcy5tb2RlPT09dGhpcy5FUVVJVD8xK3AqaToxK3RoaXMuc2lucGgwKmsrdGhpcy5jb3NwaDAqcCppLGY+PWMpcmV0dXJuIG51bGw7Yz1NYXRoLnNxcnQoMi9jKSxiPWMqcCpNYXRoLnNpbihxKSxjKj10aGlzLm1vZGU9PT10aGlzLkVRVUlUP2s6dGhpcy5jb3NwaDAqay10aGlzLnNpbnBoMCpwKml9ZWxzZSBpZih0aGlzLm1vZGU9PT10aGlzLk5fUE9MRXx8dGhpcy5tb2RlPT09dGhpcy5TX1BPTEUpe2lmKHRoaXMubW9kZT09PXRoaXMuTl9QT0xFJiYoaT0taSksTWF0aC5hYnMocit0aGlzLnBoaTApPGYpcmV0dXJuIG51bGw7Yz1lLS41KnIsYz0yKih0aGlzLm1vZGU9PT10aGlzLlNfUE9MRT9NYXRoLmNvcyhjKTpNYXRoLnNpbihjKSksYj1jKk1hdGguc2luKHEpLGMqPWl9fWVsc2V7c3dpdGNoKG09MCxuPTAsbz0wLGk9TWF0aC5jb3MocSksaj1NYXRoLnNpbihxKSxrPU1hdGguc2luKHIpLGw9Zyh0aGlzLmUsayksdGhpcy5tb2RlIT09dGhpcy5PQkxJUSYmdGhpcy5tb2RlIT09dGhpcy5FUVVJVHx8KG09bC90aGlzLnFwLG49TWF0aC5zcXJ0KDEtbSptKSksdGhpcy5tb2RlKXtjYXNlIHRoaXMuT0JMSVE6bz0xK3RoaXMuc2luYjEqbSt0aGlzLmNvc2IxKm4qaTticmVhaztjYXNlIHRoaXMuRVFVSVQ6bz0xK24qaTticmVhaztjYXNlIHRoaXMuTl9QT0xFOm89ZCtyLGw9dGhpcy5xcC1sO2JyZWFrO2Nhc2UgdGhpcy5TX1BPTEU6bz1yLWQsbD10aGlzLnFwK2x9aWYoTWF0aC5hYnMobyk8ZilyZXR1cm4gbnVsbDtzd2l0Y2godGhpcy5tb2RlKXtjYXNlIHRoaXMuT0JMSVE6Y2FzZSB0aGlzLkVRVUlUOm89TWF0aC5zcXJ0KDIvbyksYz10aGlzLm1vZGU9PT10aGlzLk9CTElRP3RoaXMueW1mKm8qKHRoaXMuY29zYjEqbS10aGlzLnNpbmIxKm4qaSk6KG89TWF0aC5zcXJ0KDIvKDErbippKSkpKm0qdGhpcy55bWYsYj10aGlzLnhtZipvKm4qajticmVhaztjYXNlIHRoaXMuTl9QT0xFOmNhc2UgdGhpcy5TX1BPTEU6bD49MD8oYj0obz1NYXRoLnNxcnQobCkpKmosYz1pKih0aGlzLm1vZGU9PT10aGlzLlNfUE9MRT9vOi1vKSk6Yj1jPTB9fXJldHVybiBhLng9dGhpcy5hKmIrdGhpcy54MCxhLnk9dGhpcy5hKmMrdGhpcy55MCxhfSxjLmludmVyc2U9ZnVuY3Rpb24oYSl7YS54LT10aGlzLngwLGEueS09dGhpcy55MDt2YXIgYixjLGUsZyxpLGosayxsPWEueC90aGlzLmEsbT1hLnkvdGhpcy5hO2lmKHRoaXMuc3BoZXJlKXt2YXIgbixvPTAscD0wO2lmKG49TWF0aC5zcXJ0KGwqbCttKm0pLGM9LjUqbixjPjEpcmV0dXJuIG51bGw7c3dpdGNoKGM9MipNYXRoLmFzaW4oYyksdGhpcy5tb2RlIT09dGhpcy5PQkxJUSYmdGhpcy5tb2RlIT09dGhpcy5FUVVJVHx8KHA9TWF0aC5zaW4oYyksbz1NYXRoLmNvcyhjKSksdGhpcy5tb2RlKXtjYXNlIHRoaXMuRVFVSVQ6Yz1NYXRoLmFicyhuKTw9Zj8wOk1hdGguYXNpbihtKnAvbiksbCo9cCxtPW8qbjticmVhaztjYXNlIHRoaXMuT0JMSVE6Yz1NYXRoLmFicyhuKTw9Zj90aGlzLnBoaTA6TWF0aC5hc2luKG8qdGhpcy5zaW5waDArbSpwKnRoaXMuY29zcGgwL24pLGwqPXAqdGhpcy5jb3NwaDAsbT0oby1NYXRoLnNpbihjKSp0aGlzLnNpbnBoMCkqbjticmVhaztjYXNlIHRoaXMuTl9QT0xFOm09LW0sYz1kLWM7YnJlYWs7Y2FzZSB0aGlzLlNfUE9MRTpjLT1kfWI9MCE9PW18fHRoaXMubW9kZSE9PXRoaXMuRVFVSVQmJnRoaXMubW9kZSE9PXRoaXMuT0JMSVE/TWF0aC5hdGFuMihsLG0pOjB9ZWxzZXtpZihrPTAsdGhpcy5tb2RlPT09dGhpcy5PQkxJUXx8dGhpcy5tb2RlPT09dGhpcy5FUVVJVCl7aWYobC89dGhpcy5kZCxtKj10aGlzLmRkLGo9TWF0aC5zcXJ0KGwqbCttKm0pLGY+ailyZXR1cm4gYS54PTAsYS55PXRoaXMucGhpMCxhO2c9MipNYXRoLmFzaW4oLjUqai90aGlzLnJxKSxlPU1hdGguY29zKGcpLGwqPWc9TWF0aC5zaW4oZyksdGhpcy5tb2RlPT09dGhpcy5PQkxJUT8oaz1lKnRoaXMuc2luYjErbSpnKnRoaXMuY29zYjEvaixpPXRoaXMucXAqayxtPWoqdGhpcy5jb3NiMSplLW0qdGhpcy5zaW5iMSpnKTooaz1tKmcvaixpPXRoaXMucXAqayxtPWoqZSl9ZWxzZSBpZih0aGlzLm1vZGU9PT10aGlzLk5fUE9MRXx8dGhpcy5tb2RlPT09dGhpcy5TX1BPTEUpe2lmKHRoaXMubW9kZT09PXRoaXMuTl9QT0xFJiYobT0tbSksaT1sKmwrbSptLCFpKXJldHVybiBhLng9MCxhLnk9dGhpcy5waGkwLGE7az0xLWkvdGhpcy5xcCx0aGlzLm1vZGU9PT10aGlzLlNfUE9MRSYmKGs9LWspfWI9TWF0aC5hdGFuMihsLG0pLGM9dGhpcy5hdXRobGF0KE1hdGguYXNpbihrKSx0aGlzLmFwYSl9cmV0dXJuIGEueD1oKHRoaXMubG9uZzArYiksYS55PWMsYX0sYy5QMDA9LjMzMzMzMzMzMzMzMzMzMzMsYy5QMDE9LjE3MjIyMjIyMjIyMjIyMjIyLGMuUDAyPS4xMDI1NzkzNjUwNzkzNjUwOCxjLlAxMD0uMDYzODg4ODg4ODg4ODg4ODgsYy5QMTE9LjA2NjQwMjExNjQwMjExNjQsYy5QMjA9LjAxNjQxNTAxMjk0MjE5MTU0MyxjLmF1dGhzZXQ9ZnVuY3Rpb24oYSl7dmFyIGIsYz1bXTtyZXR1cm4gY1swXT1hKnRoaXMuUDAwLGI9YSphLGNbMF0rPWIqdGhpcy5QMDEsY1sxXT1iKnRoaXMuUDEwLGIqPWEsY1swXSs9Yip0aGlzLlAwMixjWzFdKz1iKnRoaXMuUDExLGNbMl09Yip0aGlzLlAyMCxjfSxjLmF1dGhsYXQ9ZnVuY3Rpb24oYSxiKXt2YXIgYz1hK2E7cmV0dXJuIGErYlswXSpNYXRoLnNpbihjKStiWzFdKk1hdGguc2luKGMrYykrYlsyXSpNYXRoLnNpbihjK2MrYyl9LGMubmFtZXM9WyJMYW1iZXJ0IEF6aW11dGhhbCBFcXVhbCBBcmVhIiwiTGFtYmVydF9BemltdXRoYWxfRXF1YWxfQXJlYSIsImxhZWEiXX0seyIuLi9jb21tb24vYWRqdXN0X2xvbiI6NSwiLi4vY29tbW9uL3FzZm56IjoyMH1dLDUwOltmdW5jdGlvbihhLGIsYyl7dmFyIGQ9MWUtMTAsZT1hKCIuLi9jb21tb24vbXNmbnoiKSxmPWEoIi4uL2NvbW1vbi90c2ZueiIpLGc9TWF0aC5QSS8yLGg9YSgiLi4vY29tbW9uL3NpZ24iKSxpPWEoIi4uL2NvbW1vbi9hZGp1c3RfbG9uIiksaj1hKCIuLi9jb21tb24vcGhpMnoiKTtjLmluaXQ9ZnVuY3Rpb24oKXtpZih0aGlzLmxhdDJ8fCh0aGlzLmxhdDI9dGhpcy5sYXQxKSx0aGlzLmswfHwodGhpcy5rMD0xKSx0aGlzLngwPXRoaXMueDB8fDAsdGhpcy55MD10aGlzLnkwfHwwLCEoTWF0aC5hYnModGhpcy5sYXQxK3RoaXMubGF0Mik8ZCkpe3ZhciBhPXRoaXMuYi90aGlzLmE7dGhpcy5lPU1hdGguc3FydCgxLWEqYSk7dmFyIGI9TWF0aC5zaW4odGhpcy5sYXQxKSxjPU1hdGguY29zKHRoaXMubGF0MSksZz1lKHRoaXMuZSxiLGMpLGg9Zih0aGlzLmUsdGhpcy5sYXQxLGIpLGk9TWF0aC5zaW4odGhpcy5sYXQyKSxqPU1hdGguY29zKHRoaXMubGF0Miksaz1lKHRoaXMuZSxpLGopLGw9Zih0aGlzLmUsdGhpcy5sYXQyLGkpLG09Zih0aGlzLmUsdGhpcy5sYXQwLE1hdGguc2luKHRoaXMubGF0MCkpO01hdGguYWJzKHRoaXMubGF0MS10aGlzLmxhdDIpPmQ/dGhpcy5ucz1NYXRoLmxvZyhnL2spL01hdGgubG9nKGgvbCk6dGhpcy5ucz1iLGlzTmFOKHRoaXMubnMpJiYodGhpcy5ucz1iKSx0aGlzLmYwPWcvKHRoaXMubnMqTWF0aC5wb3coaCx0aGlzLm5zKSksdGhpcy5yaD10aGlzLmEqdGhpcy5mMCpNYXRoLnBvdyhtLHRoaXMubnMpLHRoaXMudGl0bGV8fCh0aGlzLnRpdGxlPSJMYW1iZXJ0IENvbmZvcm1hbCBDb25pYyIpfX0sYy5mb3J3YXJkPWZ1bmN0aW9uKGEpe3ZhciBiPWEueCxjPWEueTtNYXRoLmFicygyKk1hdGguYWJzKGMpLU1hdGguUEkpPD1kJiYoYz1oKGMpKihnLTIqZCkpO3ZhciBlLGosaz1NYXRoLmFicyhNYXRoLmFicyhjKS1nKTtpZihrPmQpZT1mKHRoaXMuZSxjLE1hdGguc2luKGMpKSxqPXRoaXMuYSp0aGlzLmYwKk1hdGgucG93KGUsdGhpcy5ucyk7ZWxzZXtpZihrPWMqdGhpcy5ucywwPj1rKXJldHVybiBudWxsO2o9MH12YXIgbD10aGlzLm5zKmkoYi10aGlzLmxvbmcwKTtyZXR1cm4gYS54PXRoaXMuazAqKGoqTWF0aC5zaW4obCkpK3RoaXMueDAsYS55PXRoaXMuazAqKHRoaXMucmgtaipNYXRoLmNvcyhsKSkrdGhpcy55MCxhfSxjLmludmVyc2U9ZnVuY3Rpb24oYSl7dmFyIGIsYyxkLGUsZixoPShhLngtdGhpcy54MCkvdGhpcy5rMCxrPXRoaXMucmgtKGEueS10aGlzLnkwKS90aGlzLmswO3RoaXMubnM+MD8oYj1NYXRoLnNxcnQoaCpoK2sqayksYz0xKTooYj0tTWF0aC5zcXJ0KGgqaCtrKmspLGM9LTEpO3ZhciBsPTA7aWYoMCE9PWImJihsPU1hdGguYXRhbjIoYypoLGMqaykpLDAhPT1ifHx0aGlzLm5zPjApe2lmKGM9MS90aGlzLm5zLGQ9TWF0aC5wb3coYi8odGhpcy5hKnRoaXMuZjApLGMpLGU9aih0aGlzLmUsZCksLTk5OTk9PT1lKXJldHVybiBudWxsfWVsc2UgZT0tZztyZXR1cm4gZj1pKGwvdGhpcy5ucyt0aGlzLmxvbmcwKSxhLng9ZixhLnk9ZSxhfSxjLm5hbWVzPVsiTGFtYmVydCBUYW5nZW50aWFsIENvbmZvcm1hbCBDb25pYyBQcm9qZWN0aW9uIiwiTGFtYmVydF9Db25mb3JtYWxfQ29uaWMiLCJMYW1iZXJ0X0NvbmZvcm1hbF9Db25pY18yU1AiLCJsY2MiXX0seyIuLi9jb21tb24vYWRqdXN0X2xvbiI6NSwiLi4vY29tbW9uL21zZm56IjoxNSwiLi4vY29tbW9uL3BoaTJ6IjoxNiwiLi4vY29tbW9uL3NpZ24iOjIxLCIuLi9jb21tb24vdHNmbnoiOjI0fV0sNTE6W2Z1bmN0aW9uKGEsYixjKXtmdW5jdGlvbiBkKGEpe3JldHVybiBhfWMuaW5pdD1mdW5jdGlvbigpe30sYy5mb3J3YXJkPWQsYy5pbnZlcnNlPWQsYy5uYW1lcz1bImxvbmdsYXQiLCJpZGVudGl0eSJdfSx7fV0sNTI6W2Z1bmN0aW9uKGEsYixjKXt2YXIgZD1hKCIuLi9jb21tb24vbXNmbnoiKSxlPU1hdGguUEkvMixmPTFlLTEwLGc9NTcuMjk1Nzc5NTEzMDgyMzIsaD1hKCIuLi9jb21tb24vYWRqdXN0X2xvbiIpLGk9TWF0aC5QSS80LGo9YSgiLi4vY29tbW9uL3RzZm56Iiksaz1hKCIuLi9jb21tb24vcGhpMnoiKTtjLmluaXQ9ZnVuY3Rpb24oKXt2YXIgYT10aGlzLmIvdGhpcy5hO3RoaXMuZXM9MS1hKmEsIngwImluIHRoaXN8fCh0aGlzLngwPTApLCJ5MCJpbiB0aGlzfHwodGhpcy55MD0wKSx0aGlzLmU9TWF0aC5zcXJ0KHRoaXMuZXMpLHRoaXMubGF0X3RzP3RoaXMuc3BoZXJlP3RoaXMuazA9TWF0aC5jb3ModGhpcy5sYXRfdHMpOnRoaXMuazA9ZCh0aGlzLmUsTWF0aC5zaW4odGhpcy5sYXRfdHMpLE1hdGguY29zKHRoaXMubGF0X3RzKSk6dGhpcy5rMHx8KHRoaXMuaz90aGlzLmswPXRoaXMuazp0aGlzLmswPTEpfSxjLmZvcndhcmQ9ZnVuY3Rpb24oYSl7dmFyIGI9YS54LGM9YS55O2lmKGMqZz45MCYmLTkwPmMqZyYmYipnPjE4MCYmLTE4MD5iKmcpcmV0dXJuIG51bGw7dmFyIGQsaztpZihNYXRoLmFicyhNYXRoLmFicyhjKS1lKTw9ZilyZXR1cm4gbnVsbDtpZih0aGlzLnNwaGVyZSlkPXRoaXMueDArdGhpcy5hKnRoaXMuazAqaChiLXRoaXMubG9uZzApLGs9dGhpcy55MCt0aGlzLmEqdGhpcy5rMCpNYXRoLmxvZyhNYXRoLnRhbihpKy41KmMpKTtlbHNle3ZhciBsPU1hdGguc2luKGMpLG09aih0aGlzLmUsYyxsKTtkPXRoaXMueDArdGhpcy5hKnRoaXMuazAqaChiLXRoaXMubG9uZzApLGs9dGhpcy55MC10aGlzLmEqdGhpcy5rMCpNYXRoLmxvZyhtKX1yZXR1cm4gYS54PWQsYS55PWssYX0sYy5pbnZlcnNlPWZ1bmN0aW9uKGEpe3ZhciBiLGMsZD1hLngtdGhpcy54MCxmPWEueS10aGlzLnkwO2lmKHRoaXMuc3BoZXJlKWM9ZS0yKk1hdGguYXRhbihNYXRoLmV4cCgtZi8odGhpcy5hKnRoaXMuazApKSk7ZWxzZXt2YXIgZz1NYXRoLmV4cCgtZi8odGhpcy5hKnRoaXMuazApKTtpZihjPWsodGhpcy5lLGcpLC05OTk5PT09YylyZXR1cm4gbnVsbH1yZXR1cm4gYj1oKHRoaXMubG9uZzArZC8odGhpcy5hKnRoaXMuazApKSxhLng9YixhLnk9YyxhfSxjLm5hbWVzPVsiTWVyY2F0b3IiLCJQb3B1bGFyIFZpc3VhbGlzYXRpb24gUHNldWRvIE1lcmNhdG9yIiwiTWVyY2F0b3JfMVNQIiwiTWVyY2F0b3JfQXV4aWxpYXJ5X1NwaGVyZSIsIm1lcmMiXX0seyIuLi9jb21tb24vYWRqdXN0X2xvbiI6NSwiLi4vY29tbW9uL21zZm56IjoxNSwiLi4vY29tbW9uL3BoaTJ6IjoxNiwiLi4vY29tbW9uL3RzZm56IjoyNH1dLDUzOltmdW5jdGlvbihhLGIsYyl7dmFyIGQ9YSgiLi4vY29tbW9uL2FkanVzdF9sb24iKTtjLmluaXQ9ZnVuY3Rpb24oKXt9LGMuZm9yd2FyZD1mdW5jdGlvbihhKXt2YXIgYj1hLngsYz1hLnksZT1kKGItdGhpcy5sb25nMCksZj10aGlzLngwK3RoaXMuYSplLGc9dGhpcy55MCt0aGlzLmEqTWF0aC5sb2coTWF0aC50YW4oTWF0aC5QSS80K2MvMi41KSkqMS4yNTtyZXR1cm4gYS54PWYsYS55PWcsYX0sYy5pbnZlcnNlPWZ1bmN0aW9uKGEpe2EueC09dGhpcy54MCxhLnktPXRoaXMueTA7dmFyIGI9ZCh0aGlzLmxvbmcwK2EueC90aGlzLmEpLGM9Mi41KihNYXRoLmF0YW4oTWF0aC5leHAoLjgqYS55L3RoaXMuYSkpLU1hdGguUEkvNCk7cmV0dXJuIGEueD1iLGEueT1jLGF9LGMubmFtZXM9WyJNaWxsZXJfQ3lsaW5kcmljYWwiLCJtaWxsIl19LHsiLi4vY29tbW9uL2FkanVzdF9sb24iOjV9XSw1NDpbZnVuY3Rpb24oYSxiLGMpe3ZhciBkPWEoIi4uL2NvbW1vbi9hZGp1c3RfbG9uIiksZT0xZS0xMDtjLmluaXQ9ZnVuY3Rpb24oKXt9LGMuZm9yd2FyZD1mdW5jdGlvbihhKXtmb3IodmFyIGI9YS54LGM9YS55LGY9ZChiLXRoaXMubG9uZzApLGc9YyxoPU1hdGguUEkqTWF0aC5zaW4oYyksaT0wOyEwO2krKyl7dmFyIGo9LShnK01hdGguc2luKGcpLWgpLygxK01hdGguY29zKGcpKTtpZihnKz1qLE1hdGguYWJzKGopPGUpYnJlYWt9Zy89MixNYXRoLlBJLzItTWF0aC5hYnMoYyk8ZSYmKGY9MCk7dmFyIGs9LjkwMDMxNjMxNjE1OCp0aGlzLmEqZipNYXRoLmNvcyhnKSt0aGlzLngwLGw9MS40MTQyMTM1NjIzNzMxKnRoaXMuYSpNYXRoLnNpbihnKSt0aGlzLnkwO3JldHVybiBhLng9ayxhLnk9bCxhfSxjLmludmVyc2U9ZnVuY3Rpb24oYSl7dmFyIGIsYzthLngtPXRoaXMueDAsYS55LT10aGlzLnkwLGM9YS55LygxLjQxNDIxMzU2MjM3MzEqdGhpcy5hKSxNYXRoLmFicyhjKT4uOTk5OTk5OTk5OTk5JiYoYz0uOTk5OTk5OTk5OTk5KSxiPU1hdGguYXNpbihjKTt2YXIgZT1kKHRoaXMubG9uZzArYS54LyguOTAwMzE2MzE2MTU4KnRoaXMuYSpNYXRoLmNvcyhiKSkpO2U8LU1hdGguUEkmJihlPS1NYXRoLlBJKSxlPk1hdGguUEkmJihlPU1hdGguUEkpLGM9KDIqYitNYXRoLnNpbigyKmIpKS9NYXRoLlBJLE1hdGguYWJzKGMpPjEmJihjPTEpO3ZhciBmPU1hdGguYXNpbihjKTtyZXR1cm4gYS54PWUsYS55PWYsYX0sYy5uYW1lcz1bIk1vbGx3ZWlkZSIsIm1vbGwiXX0seyIuLi9jb21tb24vYWRqdXN0X2xvbiI6NX1dLDU1OltmdW5jdGlvbihhLGIsYyl7dmFyIGQ9NDg0ODEzNjgxMTA5NTM2ZS0yMDtjLml0ZXJhdGlvbnM9MSxjLmluaXQ9ZnVuY3Rpb24oKXt0aGlzLkE9W10sdGhpcy5BWzFdPS42Mzk5MTc1MDczLHRoaXMuQVsyXT0tLjEzNTg3OTc2MTMsdGhpcy5BWzNdPS4wNjMyOTQ0MDksdGhpcy5BWzRdPS0uMDI1MjY4NTMsdGhpcy5BWzVdPS4wMTE3ODc5LHRoaXMuQVs2XT0tLjAwNTUxNjEsdGhpcy5BWzddPS4wMDI2OTA2LHRoaXMuQVs4XT0tLjAwMTMzMyx0aGlzLkFbOV09NjdlLTUsdGhpcy5BWzEwXT0tMzRlLTUsdGhpcy5CX3JlPVtdLHRoaXMuQl9pbT1bXSx0aGlzLkJfcmVbMV09Ljc1NTc4NTMyMjgsdGhpcy5CX2ltWzFdPTAsdGhpcy5CX3JlWzJdPS4yNDkyMDQ2NDYsdGhpcy5CX2ltWzJdPS4wMDMzNzE1MDcsdGhpcy5CX3JlWzNdPS0uMDAxNTQxNzM5LHRoaXMuQl9pbVszXT0uMDQxMDU4NTYsdGhpcy5CX3JlWzRdPS0uMTAxNjI5MDcsdGhpcy5CX2ltWzRdPS4wMTcyNzYwOSx0aGlzLkJfcmVbNV09LS4yNjYyMzQ4OSx0aGlzLkJfaW1bNV09LS4zNjI0OTIxOCx0aGlzLkJfcmVbNl09LS42ODcwOTgzLHRoaXMuQl9pbVs2XT0tMS4xNjUxOTY3LHRoaXMuQ19yZT1bXSx0aGlzLkNfaW09W10sdGhpcy5DX3JlWzFdPTEuMzIzMTI3MDQzOSx0aGlzLkNfaW1bMV09MCx0aGlzLkNfcmVbMl09LS41NzcyNDU3ODksdGhpcy5DX2ltWzJdPS0uMDA3ODA5NTk4LHRoaXMuQ19yZVszXT0uNTA4MzA3NTEzLHRoaXMuQ19pbVszXT0tLjExMjIwODk1Mix0aGlzLkNfcmVbNF09LS4xNTA5NDc2Mix0aGlzLkNfaW1bNF09LjE4MjAwNjAyLHRoaXMuQ19yZVs1XT0xLjAxNDE4MTc5LHRoaXMuQ19pbVs1XT0xLjY0NDk3Njk2LHRoaXMuQ19yZVs2XT0xLjk2NjA1NDksdGhpcy5DX2ltWzZdPTIuNTEyNzY0NSx0aGlzLkQ9W10sdGhpcy5EWzFdPTEuNTYyNzAxNDI0Myx0aGlzLkRbMl09LjUxODU0MDYzOTgsdGhpcy5EWzNdPS0uMDMzMzMwOTgsdGhpcy5EWzRdPS0uMTA1MjkwNix0aGlzLkRbNV09LS4wMzY4NTk0LHRoaXMuRFs2XT0uMDA3MzE3LHRoaXMuRFs3XT0uMDEyMix0aGlzLkRbOF09LjAwMzk0LHRoaXMuRFs5XT0tLjAwMTN9LGMuZm9yd2FyZD1mdW5jdGlvbihhKXt2YXIgYixjPWEueCxlPWEueSxmPWUtdGhpcy5sYXQwLGc9Yy10aGlzLmxvbmcwLGg9Zi9kKjFlLTUsaT1nLGo9MSxrPTA7Zm9yKGI9MTsxMD49YjtiKyspaio9aCxrKz10aGlzLkFbYl0qajt2YXIgbCxtLG49ayxvPWkscD0xLHE9MCxyPTAscz0wO2ZvcihiPTE7Nj49YjtiKyspbD1wKm4tcSpvLG09cSpuK3AqbyxwPWwscT1tLHI9cit0aGlzLkJfcmVbYl0qcC10aGlzLkJfaW1bYl0qcSxzPXMrdGhpcy5CX2ltW2JdKnArdGhpcy5CX3JlW2JdKnE7cmV0dXJuIGEueD1zKnRoaXMuYSt0aGlzLngwLGEueT1yKnRoaXMuYSt0aGlzLnkwLGF9LGMuaW52ZXJzZT1mdW5jdGlvbihhKXt2YXIgYixjLGUsZj1hLngsZz1hLnksaD1mLXRoaXMueDAsaT1nLXRoaXMueTAsaj1pL3RoaXMuYSxrPWgvdGhpcy5hLGw9MSxtPTAsbj0wLG89MDtmb3IoYj0xOzY+PWI7YisrKWM9bCpqLW0qayxlPW0qaitsKmssbD1jLG09ZSxuPW4rdGhpcy5DX3JlW2JdKmwtdGhpcy5DX2ltW2JdKm0sbz1vK3RoaXMuQ19pbVtiXSpsK3RoaXMuQ19yZVtiXSptO2Zvcih2YXIgcD0wO3A8dGhpcy5pdGVyYXRpb25zO3ArKyl7dmFyIHEscixzPW4sdD1vLHU9aix2PWs7Zm9yKGI9Mjs2Pj1iO2IrKylxPXMqbi10Km8scj10Km4rcypvLHM9cSx0PXIsdSs9KGItMSkqKHRoaXMuQl9yZVtiXSpzLXRoaXMuQl9pbVtiXSp0KSx2Kz0oYi0xKSoodGhpcy5CX2ltW2JdKnMrdGhpcy5CX3JlW2JdKnQpO3M9MSx0PTA7dmFyIHc9dGhpcy5CX3JlWzFdLHg9dGhpcy5CX2ltWzFdO2ZvcihiPTI7Nj49YjtiKyspcT1zKm4tdCpvLHI9dCpuK3MqbyxzPXEsdD1yLHcrPWIqKHRoaXMuQl9yZVtiXSpzLXRoaXMuQl9pbVtiXSp0KSx4Kz1iKih0aGlzLkJfaW1bYl0qcyt0aGlzLkJfcmVbYl0qdCk7dmFyIHk9dyp3K3gqeDtuPSh1Kncrdip4KS95LG89KHYqdy11KngpL3l9dmFyIHo9bixBPW8sQj0xLEM9MDtmb3IoYj0xOzk+PWI7YisrKUIqPXosQys9dGhpcy5EW2JdKkI7dmFyIEQ9dGhpcy5sYXQwK0MqZCoxZTUsRT10aGlzLmxvbmcwK0E7cmV0dXJuIGEueD1FLGEueT1ELGF9LGMubmFtZXM9WyJOZXdfWmVhbGFuZF9NYXBfR3JpZCIsIm56bWciXX0se31dLDU2OltmdW5jdGlvbihhLGIsYyl7dmFyIGQ9YSgiLi4vY29tbW9uL3RzZm56IiksZT1hKCIuLi9jb21tb24vYWRqdXN0X2xvbiIpLGY9YSgiLi4vY29tbW9uL3BoaTJ6IiksZz1NYXRoLlBJLzIsaD1NYXRoLlBJLzQsaT0xZS0xMDtjLmluaXQ9ZnVuY3Rpb24oKXt0aGlzLm5vX29mZj10aGlzLm5vX29mZnx8ITEsdGhpcy5ub19yb3Q9dGhpcy5ub19yb3R8fCExLGlzTmFOKHRoaXMuazApJiYodGhpcy5rMD0xKTt2YXIgYT1NYXRoLnNpbih0aGlzLmxhdDApLGI9TWF0aC5jb3ModGhpcy5sYXQwKSxjPXRoaXMuZSphO3RoaXMuYmw9TWF0aC5zcXJ0KDErdGhpcy5lcy8oMS10aGlzLmVzKSpNYXRoLnBvdyhiLDQpKSx0aGlzLmFsPXRoaXMuYSp0aGlzLmJsKnRoaXMuazAqTWF0aC5zcXJ0KDEtdGhpcy5lcykvKDEtYypjKTt2YXIgZj1kKHRoaXMuZSx0aGlzLmxhdDAsYSksZz10aGlzLmJsL2IqTWF0aC5zcXJ0KCgxLXRoaXMuZXMpLygxLWMqYykpOzE+ZypnJiYoZz0xKTt2YXIgaCxpO2lmKGlzTmFOKHRoaXMubG9uZ2MpKXt2YXIgaj1kKHRoaXMuZSx0aGlzLmxhdDEsTWF0aC5zaW4odGhpcy5sYXQxKSksaz1kKHRoaXMuZSx0aGlzLmxhdDIsTWF0aC5zaW4odGhpcy5sYXQyKSk7dGhpcy5sYXQwPj0wP3RoaXMuZWw9KGcrTWF0aC5zcXJ0KGcqZy0xKSkqTWF0aC5wb3coZix0aGlzLmJsKTp0aGlzLmVsPShnLU1hdGguc3FydChnKmctMSkpKk1hdGgucG93KGYsdGhpcy5ibCk7dmFyIGw9TWF0aC5wb3coaix0aGlzLmJsKSxtPU1hdGgucG93KGssdGhpcy5ibCk7aD10aGlzLmVsL2wsaT0uNSooaC0xL2gpO3ZhciBuPSh0aGlzLmVsKnRoaXMuZWwtbSpsKS8odGhpcy5lbCp0aGlzLmVsK20qbCksbz0obS1sKS8obStsKSxwPWUodGhpcy5sb25nMS10aGlzLmxvbmcyKTt0aGlzLmxvbmcwPS41Kih0aGlzLmxvbmcxK3RoaXMubG9uZzIpLU1hdGguYXRhbihuKk1hdGgudGFuKC41KnRoaXMuYmwqcCkvbykvdGhpcy5ibCx0aGlzLmxvbmcwPWUodGhpcy5sb25nMCk7dmFyIHE9ZSh0aGlzLmxvbmcxLXRoaXMubG9uZzApO3RoaXMuZ2FtbWEwPU1hdGguYXRhbihNYXRoLnNpbih0aGlzLmJsKnEpL2kpLHRoaXMuYWxwaGE9TWF0aC5hc2luKGcqTWF0aC5zaW4odGhpcy5nYW1tYTApKX1lbHNlIGg9dGhpcy5sYXQwPj0wP2crTWF0aC5zcXJ0KGcqZy0xKTpnLU1hdGguc3FydChnKmctMSksdGhpcy5lbD1oKk1hdGgucG93KGYsdGhpcy5ibCksaT0uNSooaC0xL2gpLHRoaXMuZ2FtbWEwPU1hdGguYXNpbihNYXRoLnNpbih0aGlzLmFscGhhKS9nKSx0aGlzLmxvbmcwPXRoaXMubG9uZ2MtTWF0aC5hc2luKGkqTWF0aC50YW4odGhpcy5nYW1tYTApKS90aGlzLmJsO3RoaXMubm9fb2ZmP3RoaXMudWM9MDp0aGlzLmxhdDA+PTA/dGhpcy51Yz10aGlzLmFsL3RoaXMuYmwqTWF0aC5hdGFuMihNYXRoLnNxcnQoZypnLTEpLE1hdGguY29zKHRoaXMuYWxwaGEpKTp0aGlzLnVjPS0xKnRoaXMuYWwvdGhpcy5ibCpNYXRoLmF0YW4yKE1hdGguc3FydChnKmctMSksTWF0aC5jb3ModGhpcy5hbHBoYSkpfSxjLmZvcndhcmQ9ZnVuY3Rpb24oYSl7dmFyIGIsYyxmLGo9YS54LGs9YS55LGw9ZShqLXRoaXMubG9uZzApO2lmKE1hdGguYWJzKE1hdGguYWJzKGspLWcpPD1pKWY9az4wPy0xOjEsYz10aGlzLmFsL3RoaXMuYmwqTWF0aC5sb2coTWF0aC50YW4oaCtmKnRoaXMuZ2FtbWEwKi41KSksYj0tMSpmKmcqdGhpcy5hbC90aGlzLmJsO2Vsc2V7dmFyIG09ZCh0aGlzLmUsayxNYXRoLnNpbihrKSksbj10aGlzLmVsL01hdGgucG93KG0sdGhpcy5ibCksbz0uNSoobi0xL24pLHA9LjUqKG4rMS9uKSxxPU1hdGguc2luKHRoaXMuYmwqbCkscj0obypNYXRoLnNpbih0aGlzLmdhbW1hMCktcSpNYXRoLmNvcyh0aGlzLmdhbW1hMCkpL3A7Yz1NYXRoLmFicyhNYXRoLmFicyhyKS0xKTw9aT9OdW1iZXIuUE9TSVRJVkVfSU5GSU5JVFk6LjUqdGhpcy5hbCpNYXRoLmxvZygoMS1yKS8oMStyKSkvdGhpcy5ibCxiPU1hdGguYWJzKE1hdGguY29zKHRoaXMuYmwqbCkpPD1pP3RoaXMuYWwqdGhpcy5ibCpsOnRoaXMuYWwqTWF0aC5hdGFuMihvKk1hdGguY29zKHRoaXMuZ2FtbWEwKStxKk1hdGguc2luKHRoaXMuZ2FtbWEwKSxNYXRoLmNvcyh0aGlzLmJsKmwpKS90aGlzLmJsfXJldHVybiB0aGlzLm5vX3JvdD8oYS54PXRoaXMueDArYixhLnk9dGhpcy55MCtjKTooYi09dGhpcy51YyxhLng9dGhpcy54MCtjKk1hdGguY29zKHRoaXMuYWxwaGEpK2IqTWF0aC5zaW4odGhpcy5hbHBoYSksYS55PXRoaXMueTArYipNYXRoLmNvcyh0aGlzLmFscGhhKS1jKk1hdGguc2luKHRoaXMuYWxwaGEpKSxhfSxjLmludmVyc2U9ZnVuY3Rpb24oYSl7dmFyIGIsYzt0aGlzLm5vX3JvdD8oYz1hLnktdGhpcy55MCxiPWEueC10aGlzLngwKTooYz0oYS54LXRoaXMueDApKk1hdGguY29zKHRoaXMuYWxwaGEpLShhLnktdGhpcy55MCkqTWF0aC5zaW4odGhpcy5hbHBoYSksYj0oYS55LXRoaXMueTApKk1hdGguY29zKHRoaXMuYWxwaGEpKyhhLngtdGhpcy54MCkqTWF0aC5zaW4odGhpcy5hbHBoYSksYis9dGhpcy51Yyk7dmFyIGQ9TWF0aC5leHAoLTEqdGhpcy5ibCpjL3RoaXMuYWwpLGg9LjUqKGQtMS9kKSxqPS41KihkKzEvZCksaz1NYXRoLnNpbih0aGlzLmJsKmIvdGhpcy5hbCksbD0oaypNYXRoLmNvcyh0aGlzLmdhbW1hMCkraCpNYXRoLnNpbih0aGlzLmdhbW1hMCkpL2osbT1NYXRoLnBvdyh0aGlzLmVsL01hdGguc3FydCgoMStsKS8oMS1sKSksMS90aGlzLmJsKTtyZXR1cm4gTWF0aC5hYnMobC0xKTxpPyhhLng9dGhpcy5sb25nMCxhLnk9Zyk6TWF0aC5hYnMobCsxKTxpPyhhLng9dGhpcy5sb25nMCxhLnk9LTEqZyk6KGEueT1mKHRoaXMuZSxtKSxhLng9ZSh0aGlzLmxvbmcwLU1hdGguYXRhbjIoaCpNYXRoLmNvcyh0aGlzLmdhbW1hMCktaypNYXRoLnNpbih0aGlzLmdhbW1hMCksTWF0aC5jb3ModGhpcy5ibCpiL3RoaXMuYWwpKS90aGlzLmJsKSksYX0sYy5uYW1lcz1bIkhvdGluZV9PYmxpcXVlX01lcmNhdG9yIiwiSG90aW5lIE9ibGlxdWUgTWVyY2F0b3IiLCJIb3RpbmVfT2JsaXF1ZV9NZXJjYXRvcl9BemltdXRoX05hdHVyYWxfT3JpZ2luIiwiSG90aW5lX09ibGlxdWVfTWVyY2F0b3JfQXppbXV0aF9DZW50ZXIiLCJvbWVyYyJdfSx7Ii4uL2NvbW1vbi9hZGp1c3RfbG9uIjo1LCIuLi9jb21tb24vcGhpMnoiOjE2LCIuLi9jb21tb24vdHNmbnoiOjI0fV0sNTc6W2Z1bmN0aW9uKGEsYixjKXt2YXIgZD1hKCIuLi9jb21tb24vYWRqdXN0X2xvbiIpLGU9MWUtMTAsZj1hKCIuLi9jb21tb24vYXNpbnoiKSxnPU1hdGguUEkvMjtjLmluaXQ9ZnVuY3Rpb24oKXt0aGlzLnNpbl9wMTQ9TWF0aC5zaW4odGhpcy5sYXQwKSx0aGlzLmNvc19wMTQ9TWF0aC5jb3ModGhpcy5sYXQwKX0sYy5mb3J3YXJkPWZ1bmN0aW9uKGEpe3ZhciBiLGMsZixnLGgsaSxqLGssbD1hLngsbT1hLnk7cmV0dXJuIGY9ZChsLXRoaXMubG9uZzApLGI9TWF0aC5zaW4obSksYz1NYXRoLmNvcyhtKSxnPU1hdGguY29zKGYpLGk9dGhpcy5zaW5fcDE0KmIrdGhpcy5jb3NfcDE0KmMqZyxoPTEsKGk+MHx8TWF0aC5hYnMoaSk8PWUpJiYoaj10aGlzLmEqaCpjKk1hdGguc2luKGYpLGs9dGhpcy55MCt0aGlzLmEqaCoodGhpcy5jb3NfcDE0KmItdGhpcy5zaW5fcDE0KmMqZykpLGEueD1qLGEueT1rLGF9LGMuaW52ZXJzZT1mdW5jdGlvbihhKXt2YXIgYixjLGgsaSxqLGssbDtyZXR1cm4gYS54LT10aGlzLngwLGEueS09dGhpcy55MCxiPU1hdGguc3FydChhLngqYS54K2EueSphLnkpLGM9ZihiL3RoaXMuYSksaD1NYXRoLnNpbihjKSxpPU1hdGguY29zKGMpLGs9dGhpcy5sb25nMCxNYXRoLmFicyhiKTw9ZT8obD10aGlzLmxhdDAsYS54PWssYS55PWwsYSk6KGw9ZihpKnRoaXMuc2luX3AxNCthLnkqaCp0aGlzLmNvc19wMTQvYiksaj1NYXRoLmFicyh0aGlzLmxhdDApLWcsTWF0aC5hYnMoaik8PWU/KGs9ZCh0aGlzLmxhdDA+PTA/dGhpcy5sb25nMCtNYXRoLmF0YW4yKGEueCwtYS55KTp0aGlzLmxvbmcwLU1hdGguYXRhbjIoLWEueCxhLnkpKSxhLng9ayxhLnk9bCxhKTooaz1kKHRoaXMubG9uZzArTWF0aC5hdGFuMihhLngqaCxiKnRoaXMuY29zX3AxNCppLWEueSp0aGlzLnNpbl9wMTQqaCkpLGEueD1rLGEueT1sLGEpKX0sYy5uYW1lcz1bIm9ydGhvIl19LHsiLi4vY29tbW9uL2FkanVzdF9sb24iOjUsIi4uL2NvbW1vbi9hc2lueiI6Nn1dLDU4OltmdW5jdGlvbihhLGIsYyl7dmFyIGQ9YSgiLi4vY29tbW9uL2UwZm4iKSxlPWEoIi4uL2NvbW1vbi9lMWZuIiksZj1hKCIuLi9jb21tb24vZTJmbiIpLGc9YSgiLi4vY29tbW9uL2UzZm4iKSxoPWEoIi4uL2NvbW1vbi9hZGp1c3RfbG9uIiksaT1hKCIuLi9jb21tb24vYWRqdXN0X2xhdCIpLGo9YSgiLi4vY29tbW9uL21sZm4iKSxrPTFlLTEwLGw9YSgiLi4vY29tbW9uL2dOIiksbT0yMDtjLmluaXQ9ZnVuY3Rpb24oKXt0aGlzLnRlbXA9dGhpcy5iL3RoaXMuYSx0aGlzLmVzPTEtTWF0aC5wb3codGhpcy50ZW1wLDIpLHRoaXMuZT1NYXRoLnNxcnQodGhpcy5lcyksdGhpcy5lMD1kKHRoaXMuZXMpLHRoaXMuZTE9ZSh0aGlzLmVzKSx0aGlzLmUyPWYodGhpcy5lcyksdGhpcy5lMz1nKHRoaXMuZXMpLHRoaXMubWwwPXRoaXMuYSpqKHRoaXMuZTAsdGhpcy5lMSx0aGlzLmUyLHRoaXMuZTMsdGhpcy5sYXQwKX0sYy5mb3J3YXJkPWZ1bmN0aW9uKGEpe3ZhciBiLGMsZCxlPWEueCxmPWEueSxnPWgoZS10aGlzLmxvbmcwKTtpZihkPWcqTWF0aC5zaW4oZiksdGhpcy5zcGhlcmUpTWF0aC5hYnMoZik8PWs/KGI9dGhpcy5hKmcsYz0tMSp0aGlzLmEqdGhpcy5sYXQwKTooYj10aGlzLmEqTWF0aC5zaW4oZCkvTWF0aC50YW4oZiksYz10aGlzLmEqKGkoZi10aGlzLmxhdDApKygxLU1hdGguY29zKGQpKS9NYXRoLnRhbihmKSkpO2Vsc2UgaWYoTWF0aC5hYnMoZik8PWspYj10aGlzLmEqZyxjPS0xKnRoaXMubWwwO2Vsc2V7dmFyIG09bCh0aGlzLmEsdGhpcy5lLE1hdGguc2luKGYpKS9NYXRoLnRhbihmKTtiPW0qTWF0aC5zaW4oZCksYz10aGlzLmEqaih0aGlzLmUwLHRoaXMuZTEsdGhpcy5lMix0aGlzLmUzLGYpLXRoaXMubWwwK20qKDEtTWF0aC5jb3MoZCkpfXJldHVybiBhLng9Yit0aGlzLngwLGEueT1jK3RoaXMueTAsYX0sYy5pbnZlcnNlPWZ1bmN0aW9uKGEpe3ZhciBiLGMsZCxlLGYsZyxpLGwsbjtpZihkPWEueC10aGlzLngwLGU9YS55LXRoaXMueTAsdGhpcy5zcGhlcmUpaWYoTWF0aC5hYnMoZSt0aGlzLmEqdGhpcy5sYXQwKTw9ayliPWgoZC90aGlzLmErdGhpcy5sb25nMCksYz0wO2Vsc2V7Zz10aGlzLmxhdDArZS90aGlzLmEsaT1kKmQvdGhpcy5hL3RoaXMuYStnKmcsbD1nO3ZhciBvO2ZvcihmPW07ZjstLWYpaWYobz1NYXRoLnRhbihsKSxuPS0xKihnKihsKm8rMSktbC0uNSoobCpsK2kpKm8pLygobC1nKS9vLTEpLGwrPW4sTWF0aC5hYnMobik8PWspe2M9bDticmVha31iPWgodGhpcy5sb25nMCtNYXRoLmFzaW4oZCpNYXRoLnRhbihsKS90aGlzLmEpL01hdGguc2luKGMpKX1lbHNlIGlmKE1hdGguYWJzKGUrdGhpcy5tbDApPD1rKWM9MCxiPWgodGhpcy5sb25nMCtkL3RoaXMuYSk7ZWxzZXtnPSh0aGlzLm1sMCtlKS90aGlzLmEsaT1kKmQvdGhpcy5hL3RoaXMuYStnKmcsbD1nO3ZhciBwLHEscixzLHQ7Zm9yKGY9bTtmOy0tZilpZih0PXRoaXMuZSpNYXRoLnNpbihsKSxwPU1hdGguc3FydCgxLXQqdCkqTWF0aC50YW4obCkscT10aGlzLmEqaih0aGlzLmUwLHRoaXMuZTEsdGhpcy5lMix0aGlzLmUzLGwpLHI9dGhpcy5lMC0yKnRoaXMuZTEqTWF0aC5jb3MoMipsKSs0KnRoaXMuZTIqTWF0aC5jb3MoNCpsKS02KnRoaXMuZTMqTWF0aC5jb3MoNipsKSxzPXEvdGhpcy5hLG49KGcqKHAqcysxKS1zLS41KnAqKHMqcytpKSkvKHRoaXMuZXMqTWF0aC5zaW4oMipsKSoocypzK2ktMipnKnMpLyg0KnApKyhnLXMpKihwKnItMi9NYXRoLnNpbigyKmwpKS1yKSxsLT1uLE1hdGguYWJzKG4pPD1rKXtjPWw7YnJlYWt9cD1NYXRoLnNxcnQoMS10aGlzLmVzKk1hdGgucG93KE1hdGguc2luKGMpLDIpKSpNYXRoLnRhbihjKSxiPWgodGhpcy5sb25nMCtNYXRoLmFzaW4oZCpwL3RoaXMuYSkvTWF0aC5zaW4oYykpfXJldHVybiBhLng9YixhLnk9YyxhfSxjLm5hbWVzPVsiUG9seWNvbmljIiwicG9seSJdfSx7Ii4uL2NvbW1vbi9hZGp1c3RfbGF0Ijo0LCIuLi9jb21tb24vYWRqdXN0X2xvbiI6NSwiLi4vY29tbW9uL2UwZm4iOjcsIi4uL2NvbW1vbi9lMWZuIjo4LCIuLi9jb21tb24vZTJmbiI6OSwiLi4vY29tbW9uL2UzZm4iOjEwLCIuLi9jb21tb24vZ04iOjExLCIuLi9jb21tb24vbWxmbiI6MTR9XSw1OTpbZnVuY3Rpb24oYSxiLGMpe3ZhciBkPWEoIi4uL2NvbW1vbi9hZGp1c3RfbG9uIiksZT1hKCIuLi9jb21tb24vYWRqdXN0X2xhdCIpLGY9YSgiLi4vY29tbW9uL3BqX2VuZm4iKSxnPTIwLGg9YSgiLi4vY29tbW9uL3BqX21sZm4iKSxpPWEoIi4uL2NvbW1vbi9wal9pbnZfbWxmbiIpLGo9TWF0aC5QSS8yLGs9MWUtMTAsbD1hKCIuLi9jb21tb24vYXNpbnoiKTtjLmluaXQ9ZnVuY3Rpb24oKXt0aGlzLnNwaGVyZT8odGhpcy5uPTEsdGhpcy5tPTAsdGhpcy5lcz0wLHRoaXMuQ195PU1hdGguc3FydCgodGhpcy5tKzEpL3RoaXMubiksdGhpcy5DX3g9dGhpcy5DX3kvKHRoaXMubSsxKSk6dGhpcy5lbj1mKHRoaXMuZXMpfSxjLmZvcndhcmQ9ZnVuY3Rpb24oYSl7dmFyIGIsYyxlPWEueCxmPWEueTtpZihlPWQoZS10aGlzLmxvbmcwKSx0aGlzLnNwaGVyZSl7aWYodGhpcy5tKWZvcih2YXIgaT10aGlzLm4qTWF0aC5zaW4oZiksaj1nO2o7LS1qKXt2YXIgbD0odGhpcy5tKmYrTWF0aC5zaW4oZiktaSkvKHRoaXMubStNYXRoLmNvcyhmKSk7aWYoZi09bCxNYXRoLmFicyhsKTxrKWJyZWFrfWVsc2UgZj0xIT09dGhpcy5uP01hdGguYXNpbih0aGlzLm4qTWF0aC5zaW4oZikpOmY7Yj10aGlzLmEqdGhpcy5DX3gqZSoodGhpcy5tK01hdGguY29zKGYpKSxjPXRoaXMuYSp0aGlzLkNfeSpmfWVsc2V7dmFyIG09TWF0aC5zaW4oZiksbj1NYXRoLmNvcyhmKTtjPXRoaXMuYSpoKGYsbSxuLHRoaXMuZW4pLGI9dGhpcy5hKmUqbi9NYXRoLnNxcnQoMS10aGlzLmVzKm0qbSl9cmV0dXJuIGEueD1iLGEueT1jLGF9LGMuaW52ZXJzZT1mdW5jdGlvbihhKXt2YXIgYixjLGYsZztyZXR1cm4gYS54LT10aGlzLngwLGY9YS54L3RoaXMuYSxhLnktPXRoaXMueTAsYj1hLnkvdGhpcy5hLHRoaXMuc3BoZXJlPyhiLz10aGlzLkNfeSxmLz10aGlzLkNfeCoodGhpcy5tK01hdGguY29zKGIpKSx0aGlzLm0/Yj1sKCh0aGlzLm0qYitNYXRoLnNpbihiKSkvdGhpcy5uKToxIT09dGhpcy5uJiYoYj1sKE1hdGguc2luKGIpL3RoaXMubikpLGY9ZChmK3RoaXMubG9uZzApLGI9ZShiKSk6KGI9aShhLnkvdGhpcy5hLHRoaXMuZXMsdGhpcy5lbiksZz1NYXRoLmFicyhiKSxqPmc/KGc9TWF0aC5zaW4oYiksYz10aGlzLmxvbmcwK2EueCpNYXRoLnNxcnQoMS10aGlzLmVzKmcqZykvKHRoaXMuYSpNYXRoLmNvcyhiKSksZj1kKGMpKTpqPmctayYmKGY9dGhpcy5sb25nMCkpLGEueD1mLGEueT1iLGF9LGMubmFtZXM9WyJTaW51c29pZGFsIiwic2ludSJdfSx7Ii4uL2NvbW1vbi9hZGp1c3RfbGF0Ijo0LCIuLi9jb21tb24vYWRqdXN0X2xvbiI6NSwiLi4vY29tbW9uL2FzaW56Ijo2LCIuLi9jb21tb24vcGpfZW5mbiI6MTcsIi4uL2NvbW1vbi9wal9pbnZfbWxmbiI6MTgsIi4uL2NvbW1vbi9wal9tbGZuIjoxOX1dLDYwOltmdW5jdGlvbihhLGIsYyl7Yy5pbml0PWZ1bmN0aW9uKCl7dmFyIGE9dGhpcy5sYXQwO3RoaXMubGFtYmRhMD10aGlzLmxvbmcwO3ZhciBiPU1hdGguc2luKGEpLGM9dGhpcy5hLGQ9dGhpcy5yZixlPTEvZCxmPTIqZS1NYXRoLnBvdyhlLDIpLGc9dGhpcy5lPU1hdGguc3FydChmKTt0aGlzLlI9dGhpcy5rMCpjKk1hdGguc3FydCgxLWYpLygxLWYqTWF0aC5wb3coYiwyKSksdGhpcy5hbHBoYT1NYXRoLnNxcnQoMStmLygxLWYpKk1hdGgucG93KE1hdGguY29zKGEpLDQpKSx0aGlzLmIwPU1hdGguYXNpbihiL3RoaXMuYWxwaGEpO3ZhciBoPU1hdGgubG9nKE1hdGgudGFuKE1hdGguUEkvNCt0aGlzLmIwLzIpKSxpPU1hdGgubG9nKE1hdGgudGFuKE1hdGguUEkvNCthLzIpKSxqPU1hdGgubG9nKCgxK2cqYikvKDEtZypiKSk7dGhpcy5LPWgtdGhpcy5hbHBoYSppK3RoaXMuYWxwaGEqZy8yKmp9LGMuZm9yd2FyZD1mdW5jdGlvbihhKXt2YXIgYj1NYXRoLmxvZyhNYXRoLnRhbihNYXRoLlBJLzQtYS55LzIpKSxjPXRoaXMuZS8yKk1hdGgubG9nKCgxK3RoaXMuZSpNYXRoLnNpbihhLnkpKS8oMS10aGlzLmUqTWF0aC5zaW4oYS55KSkpLGQ9LXRoaXMuYWxwaGEqKGIrYykrdGhpcy5LLGU9MiooTWF0aC5hdGFuKE1hdGguZXhwKGQpKS1NYXRoLlBJLzQpLGY9dGhpcy5hbHBoYSooYS54LXRoaXMubGFtYmRhMCksZz1NYXRoLmF0YW4oTWF0aC5zaW4oZikvKE1hdGguc2luKHRoaXMuYjApKk1hdGgudGFuKGUpK01hdGguY29zKHRoaXMuYjApKk1hdGguY29zKGYpKSksaD1NYXRoLmFzaW4oTWF0aC5jb3ModGhpcy5iMCkqTWF0aC5zaW4oZSktTWF0aC5zaW4odGhpcy5iMCkqTWF0aC5jb3MoZSkqTWF0aC5jb3MoZikpO3JldHVybiBhLnk9dGhpcy5SLzIqTWF0aC5sb2coKDErTWF0aC5zaW4oaCkpLygxLU1hdGguc2luKGgpKSkrdGhpcy55MCxhLng9dGhpcy5SKmcrdGhpcy54MCxhfSxjLmludmVyc2U9ZnVuY3Rpb24oYSl7Zm9yKHZhciBiPWEueC10aGlzLngwLGM9YS55LXRoaXMueTAsZD1iL3RoaXMuUixlPTIqKE1hdGguYXRhbihNYXRoLmV4cChjL3RoaXMuUikpLU1hdGguUEkvNCksZj1NYXRoLmFzaW4oTWF0aC5jb3ModGhpcy5iMCkqTWF0aC5zaW4oZSkrTWF0aC5zaW4odGhpcy5iMCkqTWF0aC5jb3MoZSkqTWF0aC5jb3MoZCkpLGc9TWF0aC5hdGFuKE1hdGguc2luKGQpLyhNYXRoLmNvcyh0aGlzLmIwKSpNYXRoLmNvcyhkKS1NYXRoLnNpbih0aGlzLmIwKSpNYXRoLnRhbihlKSkpLGg9dGhpcy5sYW1iZGEwK2cvdGhpcy5hbHBoYSxpPTAsaj1mLGs9LTFlMyxsPTA7TWF0aC5hYnMoai1rKT4xZS03Oyl7aWYoKytsPjIwKXJldHVybjtpPTEvdGhpcy5hbHBoYSooTWF0aC5sb2coTWF0aC50YW4oTWF0aC5QSS80K2YvMikpLXRoaXMuSykrdGhpcy5lKk1hdGgubG9nKE1hdGgudGFuKE1hdGguUEkvNCtNYXRoLmFzaW4odGhpcy5lKk1hdGguc2luKGopKS8yKSksaz1qLGo9MipNYXRoLmF0YW4oTWF0aC5leHAoaSkpLU1hdGguUEkvMn1yZXR1cm4gYS54PWgsYS55PWosYX0sYy5uYW1lcz1bInNvbWVyYyJdfSx7fV0sNjE6W2Z1bmN0aW9uKGEsYixjKXt2YXIgZD1NYXRoLlBJLzIsZT0xZS0xMCxmPWEoIi4uL2NvbW1vbi9zaWduIiksZz1hKCIuLi9jb21tb24vbXNmbnoiKSxoPWEoIi4uL2NvbW1vbi90c2ZueiIpLGk9YSgiLi4vY29tbW9uL3BoaTJ6Iiksaj1hKCIuLi9jb21tb24vYWRqdXN0X2xvbiIpO2Muc3Nmbl89ZnVuY3Rpb24oYSxiLGMpe3JldHVybiBiKj1jLE1hdGgudGFuKC41KihkK2EpKSpNYXRoLnBvdygoMS1iKS8oMStiKSwuNSpjKX0sYy5pbml0PWZ1bmN0aW9uKCl7dGhpcy5jb3NsYXQwPU1hdGguY29zKHRoaXMubGF0MCksdGhpcy5zaW5sYXQwPU1hdGguc2luKHRoaXMubGF0MCksdGhpcy5zcGhlcmU/MT09PXRoaXMuazAmJiFpc05hTih0aGlzLmxhdF90cykmJk1hdGguYWJzKHRoaXMuY29zbGF0MCk8PWUmJih0aGlzLmswPS41KigxK2YodGhpcy5sYXQwKSpNYXRoLnNpbih0aGlzLmxhdF90cykpKTooTWF0aC5hYnModGhpcy5jb3NsYXQwKTw9ZSYmKHRoaXMubGF0MD4wP3RoaXMuY29uPTE6dGhpcy5jb249LTEpLHRoaXMuY29ucz1NYXRoLnNxcnQoTWF0aC5wb3coMSt0aGlzLmUsMSt0aGlzLmUpKk1hdGgucG93KDEtdGhpcy5lLDEtdGhpcy5lKSksMT09PXRoaXMuazAmJiFpc05hTih0aGlzLmxhdF90cykmJk1hdGguYWJzKHRoaXMuY29zbGF0MCk8PWUmJih0aGlzLmswPS41KnRoaXMuY29ucypnKHRoaXMuZSxNYXRoLnNpbih0aGlzLmxhdF90cyksTWF0aC5jb3ModGhpcy5sYXRfdHMpKS9oKHRoaXMuZSx0aGlzLmNvbip0aGlzLmxhdF90cyx0aGlzLmNvbipNYXRoLnNpbih0aGlzLmxhdF90cykpKSx0aGlzLm1zMT1nKHRoaXMuZSx0aGlzLnNpbmxhdDAsdGhpcy5jb3NsYXQwKSx0aGlzLlgwPTIqTWF0aC5hdGFuKHRoaXMuc3Nmbl8odGhpcy5sYXQwLHRoaXMuc2lubGF0MCx0aGlzLmUpKS1kLHRoaXMuY29zWDA9TWF0aC5jb3ModGhpcy5YMCksdGhpcy5zaW5YMD1NYXRoLnNpbih0aGlzLlgwKSl9LGMuZm9yd2FyZD1mdW5jdGlvbihhKXt2YXIgYixjLGYsZyxpLGssbD1hLngsbT1hLnksbj1NYXRoLnNpbihtKSxvPU1hdGguY29zKG0pLHA9aihsLXRoaXMubG9uZzApO3JldHVybiBNYXRoLmFicyhNYXRoLmFicyhsLXRoaXMubG9uZzApLU1hdGguUEkpPD1lJiZNYXRoLmFicyhtK3RoaXMubGF0MCk8PWU/KGEueD1OYU4sYS55PU5hTixhKTp0aGlzLnNwaGVyZT8oYj0yKnRoaXMuazAvKDErdGhpcy5zaW5sYXQwKm4rdGhpcy5jb3NsYXQwKm8qTWF0aC5jb3MocCkpLGEueD10aGlzLmEqYipvKk1hdGguc2luKHApK3RoaXMueDAsYS55PXRoaXMuYSpiKih0aGlzLmNvc2xhdDAqbi10aGlzLnNpbmxhdDAqbypNYXRoLmNvcyhwKSkrdGhpcy55MCxhKTooYz0yKk1hdGguYXRhbih0aGlzLnNzZm5fKG0sbix0aGlzLmUpKS1kLGc9TWF0aC5jb3MoYyksZj1NYXRoLnNpbihjKSxNYXRoLmFicyh0aGlzLmNvc2xhdDApPD1lPyhpPWgodGhpcy5lLG0qdGhpcy5jb24sdGhpcy5jb24qbiksaz0yKnRoaXMuYSp0aGlzLmswKmkvdGhpcy5jb25zLGEueD10aGlzLngwK2sqTWF0aC5zaW4obC10aGlzLmxvbmcwKSxhLnk9dGhpcy55MC10aGlzLmNvbiprKk1hdGguY29zKGwtdGhpcy5sb25nMCksYSk6KE1hdGguYWJzKHRoaXMuc2lubGF0MCk8ZT8oYj0yKnRoaXMuYSp0aGlzLmswLygxK2cqTWF0aC5jb3MocCkpLGEueT1iKmYpOihiPTIqdGhpcy5hKnRoaXMuazAqdGhpcy5tczEvKHRoaXMuY29zWDAqKDErdGhpcy5zaW5YMCpmK3RoaXMuY29zWDAqZypNYXRoLmNvcyhwKSkpLGEueT1iKih0aGlzLmNvc1gwKmYtdGhpcy5zaW5YMCpnKk1hdGguY29zKHApKSt0aGlzLnkwKSxhLng9YipnKk1hdGguc2luKHApK3RoaXMueDAsYSkpfSxjLmludmVyc2U9ZnVuY3Rpb24oYSl7YS54LT10aGlzLngwLGEueS09dGhpcy55MDt2YXIgYixjLGYsZyxoLGs9TWF0aC5zcXJ0KGEueCphLngrYS55KmEueSk7aWYodGhpcy5zcGhlcmUpe3ZhciBsPTIqTWF0aC5hdGFuKGsvKC41KnRoaXMuYSp0aGlzLmswKSk7cmV0dXJuIGI9dGhpcy5sb25nMCxjPXRoaXMubGF0MCxlPj1rPyhhLng9YixhLnk9YyxhKTooYz1NYXRoLmFzaW4oTWF0aC5jb3MobCkqdGhpcy5zaW5sYXQwK2EueSpNYXRoLnNpbihsKSp0aGlzLmNvc2xhdDAvayksYj1qKE1hdGguYWJzKHRoaXMuY29zbGF0MCk8ZT90aGlzLmxhdDA+MD90aGlzLmxvbmcwK01hdGguYXRhbjIoYS54LC0xKmEueSk6dGhpcy5sb25nMCtNYXRoLmF0YW4yKGEueCxhLnkpOnRoaXMubG9uZzArTWF0aC5hdGFuMihhLngqTWF0aC5zaW4obCksayp0aGlzLmNvc2xhdDAqTWF0aC5jb3MobCktYS55KnRoaXMuc2lubGF0MCpNYXRoLnNpbihsKSkpLGEueD1iLGEueT1jLGEpfWlmKE1hdGguYWJzKHRoaXMuY29zbGF0MCk8PWUpe2lmKGU+PWspcmV0dXJuIGM9dGhpcy5sYXQwLGI9dGhpcy5sb25nMCxhLng9YixhLnk9YyxhO2EueCo9dGhpcy5jb24sYS55Kj10aGlzLmNvbixmPWsqdGhpcy5jb25zLygyKnRoaXMuYSp0aGlzLmswKSxjPXRoaXMuY29uKmkodGhpcy5lLGYpLGI9dGhpcy5jb24qaih0aGlzLmNvbip0aGlzLmxvbmcwK01hdGguYXRhbjIoYS54LC0xKmEueSkpfWVsc2UgZz0yKk1hdGguYXRhbihrKnRoaXMuY29zWDAvKDIqdGhpcy5hKnRoaXMuazAqdGhpcy5tczEpKSxiPXRoaXMubG9uZzAsZT49az9oPXRoaXMuWDA6KGg9TWF0aC5hc2luKE1hdGguY29zKGcpKnRoaXMuc2luWDArYS55Kk1hdGguc2luKGcpKnRoaXMuY29zWDAvayksYj1qKHRoaXMubG9uZzArTWF0aC5hdGFuMihhLngqTWF0aC5zaW4oZyksayp0aGlzLmNvc1gwKk1hdGguY29zKGcpLWEueSp0aGlzLnNpblgwKk1hdGguc2luKGcpKSkpLGM9LTEqaSh0aGlzLmUsTWF0aC50YW4oLjUqKGQraCkpKTtyZXR1cm4gYS54PWIsYS55PWMsYX0sYy5uYW1lcz1bInN0ZXJlIiwiU3RlcmVvZ3JhcGhpY19Tb3V0aF9Qb2xlIiwiUG9sYXIgU3RlcmVvZ3JhcGhpYyAodmFyaWFudCBCKSJdfSx7Ii4uL2NvbW1vbi9hZGp1c3RfbG9uIjo1LCIuLi9jb21tb24vbXNmbnoiOjE1LCIuLi9jb21tb24vcGhpMnoiOjE2LCIuLi9jb21tb24vc2lnbiI6MjEsIi4uL2NvbW1vbi90c2ZueiI6MjR9XSw2MjpbZnVuY3Rpb24oYSxiLGMpe3ZhciBkPWEoIi4vZ2F1c3MiKSxlPWEoIi4uL2NvbW1vbi9hZGp1c3RfbG9uIik7Yy5pbml0PWZ1bmN0aW9uKCl7ZC5pbml0LmFwcGx5KHRoaXMpLHRoaXMucmMmJih0aGlzLnNpbmMwPU1hdGguc2luKHRoaXMucGhpYzApLHRoaXMuY29zYzA9TWF0aC5jb3ModGhpcy5waGljMCksdGhpcy5SMj0yKnRoaXMucmMsdGhpcy50aXRsZXx8KHRoaXMudGl0bGU9Ik9ibGlxdWUgU3RlcmVvZ3JhcGhpYyBBbHRlcm5hdGl2ZSIpKX0sYy5mb3J3YXJkPWZ1bmN0aW9uKGEpe3ZhciBiLGMsZixnO3JldHVybiBhLng9ZShhLngtdGhpcy5sb25nMCksZC5mb3J3YXJkLmFwcGx5KHRoaXMsW2FdKSxiPU1hdGguc2luKGEueSksYz1NYXRoLmNvcyhhLnkpLGY9TWF0aC5jb3MoYS54KSxnPXRoaXMuazAqdGhpcy5SMi8oMSt0aGlzLnNpbmMwKmIrdGhpcy5jb3NjMCpjKmYpLGEueD1nKmMqTWF0aC5zaW4oYS54KSxhLnk9ZyoodGhpcy5jb3NjMCpiLXRoaXMuc2luYzAqYypmKSxhLng9dGhpcy5hKmEueCt0aGlzLngwLGEueT10aGlzLmEqYS55K3RoaXMueTAsYX0sYy5pbnZlcnNlPWZ1bmN0aW9uKGEpe3ZhciBiLGMsZixnLGg7aWYoYS54PShhLngtdGhpcy54MCkvdGhpcy5hLGEueT0oYS55LXRoaXMueTApL3RoaXMuYSxhLngvPXRoaXMuazAsYS55Lz10aGlzLmswLGg9TWF0aC5zcXJ0KGEueCphLngrYS55KmEueSkpe3ZhciBpPTIqTWF0aC5hdGFuMihoLHRoaXMuUjIpO2I9TWF0aC5zaW4oaSksYz1NYXRoLmNvcyhpKSxnPU1hdGguYXNpbihjKnRoaXMuc2luYzArYS55KmIqdGhpcy5jb3NjMC9oKSxmPU1hdGguYXRhbjIoYS54KmIsaCp0aGlzLmNvc2MwKmMtYS55KnRoaXMuc2luYzAqYil9ZWxzZSBnPXRoaXMucGhpYzAsZj0wO3JldHVybiBhLng9ZixhLnk9ZyxkLmludmVyc2UuYXBwbHkodGhpcyxbYV0pLGEueD1lKGEueCt0aGlzLmxvbmcwKSxhfSxjLm5hbWVzPVsiU3RlcmVvZ3JhcGhpY19Ob3J0aF9Qb2xlIiwiT2JsaXF1ZV9TdGVyZW9ncmFwaGljIiwiUG9sYXJfU3RlcmVvZ3JhcGhpYyIsInN0ZXJlYSIsIk9ibGlxdWUgU3RlcmVvZ3JhcGhpYyBBbHRlcm5hdGl2ZSJdfSx7Ii4uL2NvbW1vbi9hZGp1c3RfbG9uIjo1LCIuL2dhdXNzIjo0Nn1dLDYzOltmdW5jdGlvbihhLGIsYyl7dmFyIGQ9YSgiLi4vY29tbW9uL2UwZm4iKSxlPWEoIi4uL2NvbW1vbi9lMWZuIiksZj1hKCIuLi9jb21tb24vZTJmbiIpLGc9YSgiLi4vY29tbW9uL2UzZm4iKSxoPWEoIi4uL2NvbW1vbi9tbGZuIiksaT1hKCIuLi9jb21tb24vYWRqdXN0X2xvbiIpLGo9TWF0aC5QSS8yLGs9MWUtMTAsbD1hKCIuLi9jb21tb24vc2lnbiIpLG09YSgiLi4vY29tbW9uL2FzaW56Iik7Yy5pbml0PWZ1bmN0aW9uKCl7dGhpcy5lMD1kKHRoaXMuZXMpLHRoaXMuZTE9ZSh0aGlzLmVzKSx0aGlzLmUyPWYodGhpcy5lcyksdGhpcy5lMz1nKHRoaXMuZXMpLHRoaXMubWwwPXRoaXMuYSpoKHRoaXMuZTAsdGhpcy5lMSx0aGlzLmUyLHRoaXMuZTMsdGhpcy5sYXQwKX0sYy5mb3J3YXJkPWZ1bmN0aW9uKGEpe3ZhciBiLGMsZCxlPWEueCxmPWEueSxnPWkoZS10aGlzLmxvbmcwKSxqPU1hdGguc2luKGYpLGs9TWF0aC5jb3MoZik7aWYodGhpcy5zcGhlcmUpe3ZhciBsPWsqTWF0aC5zaW4oZyk7aWYoTWF0aC5hYnMoTWF0aC5hYnMobCktMSk8MWUtMTApcmV0dXJuIDkzO2M9LjUqdGhpcy5hKnRoaXMuazAqTWF0aC5sb2coKDErbCkvKDEtbCkpLGI9TWF0aC5hY29zKGsqTWF0aC5jb3MoZykvTWF0aC5zcXJ0KDEtbCpsKSksMD5mJiYoYj0tYiksZD10aGlzLmEqdGhpcy5rMCooYi10aGlzLmxhdDApfWVsc2V7dmFyIG09aypnLG49TWF0aC5wb3cobSwyKSxvPXRoaXMuZXAyKk1hdGgucG93KGssMikscD1NYXRoLnRhbihmKSxxPU1hdGgucG93KHAsMik7Yj0xLXRoaXMuZXMqTWF0aC5wb3coaiwyKTt2YXIgcj10aGlzLmEvTWF0aC5zcXJ0KGIpLHM9dGhpcy5hKmgodGhpcy5lMCx0aGlzLmUxLHRoaXMuZTIsdGhpcy5lMyxmKTtjPXRoaXMuazAqciptKigxK24vNiooMS1xK28rbi8yMCooNS0xOCpxK01hdGgucG93KHEsMikrNzIqby01OCp0aGlzLmVwMikpKSt0aGlzLngwLGQ9dGhpcy5rMCoocy10aGlzLm1sMCtyKnAqKG4qKC41K24vMjQqKDUtcSs5Km8rNCpNYXRoLnBvdyhvLDIpK24vMzAqKDYxLTU4KnErTWF0aC5wb3cocSwyKSs2MDAqby0zMzAqdGhpcy5lcDIpKSkpKSt0aGlzLnkwfXJldHVybiBhLng9YyxhLnk9ZCxhfSxjLmludmVyc2U9ZnVuY3Rpb24oYSl7dmFyIGIsYyxkLGUsZixnLGg9NjtpZih0aGlzLnNwaGVyZSl7dmFyIG49TWF0aC5leHAoYS54Lyh0aGlzLmEqdGhpcy5rMCkpLG89LjUqKG4tMS9uKSxwPXRoaXMubGF0MCthLnkvKHRoaXMuYSp0aGlzLmswKSxxPU1hdGguY29zKHApO2I9TWF0aC5zcXJ0KCgxLXEqcSkvKDErbypvKSksZj1tKGIpLDA+cCYmKGY9LWYpLGc9MD09PW8mJjA9PT1xP3RoaXMubG9uZzA6aShNYXRoLmF0YW4yKG8scSkrdGhpcy5sb25nMCl9ZWxzZXt2YXIgcj1hLngtdGhpcy54MCxzPWEueS10aGlzLnkwO2ZvcihiPSh0aGlzLm1sMCtzL3RoaXMuazApL3RoaXMuYSxjPWIsZT0wOyEwJiYoZD0oYit0aGlzLmUxKk1hdGguc2luKDIqYyktdGhpcy5lMipNYXRoLnNpbig0KmMpK3RoaXMuZTMqTWF0aC5zaW4oNipjKSkvdGhpcy5lMC1jLGMrPWQsIShNYXRoLmFicyhkKTw9aykpO2UrKylpZihlPj1oKXJldHVybiA5NTtpZihNYXRoLmFicyhjKTxqKXt2YXIgdD1NYXRoLnNpbihjKSx1PU1hdGguY29zKGMpLHY9TWF0aC50YW4oYyksdz10aGlzLmVwMipNYXRoLnBvdyh1LDIpLHg9TWF0aC5wb3codywyKSx5PU1hdGgucG93KHYsMiksej1NYXRoLnBvdyh5LDIpO2I9MS10aGlzLmVzKk1hdGgucG93KHQsMik7dmFyIEE9dGhpcy5hL01hdGguc3FydChiKSxCPUEqKDEtdGhpcy5lcykvYixDPXIvKEEqdGhpcy5rMCksRD1NYXRoLnBvdyhDLDIpO2Y9Yy1BKnYqRC9CKiguNS1ELzI0Kig1KzMqeSsxMCp3LTQqeC05KnRoaXMuZXAyLUQvMzAqKDYxKzkwKnkrMjk4KncrNDUqei0yNTIqdGhpcy5lcDItMyp4KSkpLGc9aSh0aGlzLmxvbmcwK0MqKDEtRC82KigxKzIqeSt3LUQvMjAqKDUtMip3KzI4KnktMyp4KzgqdGhpcy5lcDIrMjQqeikpKS91KX1lbHNlIGY9aipsKHMpLGc9dGhpcy5sb25nMH1yZXR1cm4gYS54PWcsYS55PWYsYX0sYy5uYW1lcz1bIlRyYW5zdmVyc2VfTWVyY2F0b3IiLCJUcmFuc3ZlcnNlIE1lcmNhdG9yIiwidG1lcmMiXX0seyIuLi9jb21tb24vYWRqdXN0X2xvbiI6NSwiLi4vY29tbW9uL2FzaW56Ijo2LCIuLi9jb21tb24vZTBmbiI6NywiLi4vY29tbW9uL2UxZm4iOjgsIi4uL2NvbW1vbi9lMmZuIjo5LCIuLi9jb21tb24vZTNmbiI6MTAsIi4uL2NvbW1vbi9tbGZuIjoxNCwiLi4vY29tbW9uL3NpZ24iOjIxfV0sNjQ6W2Z1bmN0aW9uKGEsYixjKXt2YXIgZD0uMDE3NDUzMjkyNTE5OTQzMjk1LGU9YSgiLi90bWVyYyIpO2MuZGVwZW5kc09uPSJ0bWVyYyIsYy5pbml0PWZ1bmN0aW9uKCl7dGhpcy56b25lJiYodGhpcy5sYXQwPTAsdGhpcy5sb25nMD0oNipNYXRoLmFicyh0aGlzLnpvbmUpLTE4MykqZCx0aGlzLngwPTVlNSx0aGlzLnkwPXRoaXMudXRtU291dGg/MWU3OjAsdGhpcy5rMD0uOTk5NixlLmluaXQuYXBwbHkodGhpcyksdGhpcy5mb3J3YXJkPWUuZm9yd2FyZCx0aGlzLmludmVyc2U9ZS5pbnZlcnNlKX0sYy5uYW1lcz1bIlVuaXZlcnNhbCBUcmFuc3ZlcnNlIE1lcmNhdG9yIFN5c3RlbSIsInV0bSJdfSx7Ii4vdG1lcmMiOjYzfV0sNjU6W2Z1bmN0aW9uKGEsYixjKXt2YXIgZD1hKCIuLi9jb21tb24vYWRqdXN0X2xvbiIpLGU9TWF0aC5QSS8yLGY9MWUtMTAsZz1hKCIuLi9jb21tb24vYXNpbnoiKTtjLmluaXQ9ZnVuY3Rpb24oKXt0aGlzLlI9dGhpcy5hfSxjLmZvcndhcmQ9ZnVuY3Rpb24oYSl7dmFyIGIsYyxoPWEueCxpPWEueSxqPWQoaC10aGlzLmxvbmcwKTtNYXRoLmFicyhpKTw9ZiYmKGI9dGhpcy54MCt0aGlzLlIqaixjPXRoaXMueTApO3ZhciBrPWcoMipNYXRoLmFicyhpL01hdGguUEkpKTsoTWF0aC5hYnMoaik8PWZ8fE1hdGguYWJzKE1hdGguYWJzKGkpLWUpPD1mKSYmKGI9dGhpcy54MCxjPWk+PTA/dGhpcy55MCtNYXRoLlBJKnRoaXMuUipNYXRoLnRhbiguNSprKTp0aGlzLnkwK01hdGguUEkqdGhpcy5SKi1NYXRoLnRhbiguNSprKSk7dmFyIGw9LjUqTWF0aC5hYnMoTWF0aC5QSS9qLWovTWF0aC5QSSksbT1sKmwsbj1NYXRoLnNpbihrKSxvPU1hdGguY29zKGspLHA9by8obitvLTEpLHE9cCpwLHI9cCooMi9uLTEpLHM9cipyLHQ9TWF0aC5QSSp0aGlzLlIqKGwqKHAtcykrTWF0aC5zcXJ0KG0qKHAtcykqKHAtcyktKHMrbSkqKHEtcykpKS8ocyttKTswPmomJih0PS10KSxiPXRoaXMueDArdDt2YXIgdT1tK3A7cmV0dXJuIHQ9TWF0aC5QSSp0aGlzLlIqKHIqdS1sKk1hdGguc3FydCgocyttKSoobSsxKS11KnUpKS8ocyttKSxjPWk+PTA/dGhpcy55MCt0OnRoaXMueTAtdCxhLng9YixhLnk9YyxhfSxjLmludmVyc2U9ZnVuY3Rpb24oYSl7dmFyIGIsYyxlLGcsaCxpLGosayxsLG0sbixvLHA7cmV0dXJuIGEueC09dGhpcy54MCxhLnktPXRoaXMueTAsbj1NYXRoLlBJKnRoaXMuUixlPWEueC9uLGc9YS55L24saD1lKmUrZypnLGk9LU1hdGguYWJzKGcpKigxK2gpLApqPWktMipnKmcrZSplLGs9LTIqaSsxKzIqZypnK2gqaCxwPWcqZy9rKygyKmoqaipqL2svay9rLTkqaSpqL2svaykvMjcsbD0oaS1qKmovMy9rKS9rLG09MipNYXRoLnNxcnQoLWwvMyksbj0zKnAvbC9tLE1hdGguYWJzKG4pPjEmJihuPW4+PTA/MTotMSksbz1NYXRoLmFjb3MobikvMyxjPWEueT49MD8oLW0qTWF0aC5jb3MobytNYXRoLlBJLzMpLWovMy9rKSpNYXRoLlBJOi0oLW0qTWF0aC5jb3MobytNYXRoLlBJLzMpLWovMy9rKSpNYXRoLlBJLGI9TWF0aC5hYnMoZSk8Zj90aGlzLmxvbmcwOmQodGhpcy5sb25nMCtNYXRoLlBJKihoLTErTWF0aC5zcXJ0KDErMiooZSplLWcqZykraCpoKSkvMi9lKSxhLng9YixhLnk9YyxhfSxjLm5hbWVzPVsiVmFuX2Rlcl9HcmludGVuX0kiLCJWYW5EZXJHcmludGVuIiwidmFuZGciXX0seyIuLi9jb21tb24vYWRqdXN0X2xvbiI6NSwiLi4vY29tbW9uL2FzaW56Ijo2fV0sNjY6W2Z1bmN0aW9uKGEsYixjKXt2YXIgZD0uMDE3NDUzMjkyNTE5OTQzMjk1LGU9NTcuMjk1Nzc5NTEzMDgyMzIsZj0xLGc9MixoPWEoIi4vZGF0dW1fdHJhbnNmb3JtIiksaT1hKCIuL2FkanVzdF9heGlzIiksaj1hKCIuL1Byb2oiKSxrPWEoIi4vY29tbW9uL3RvUG9pbnQiKTtiLmV4cG9ydHM9ZnVuY3Rpb24gbChhLGIsYyl7ZnVuY3Rpb24gbShhLGIpe3JldHVybihhLmRhdHVtLmRhdHVtX3R5cGU9PT1mfHxhLmRhdHVtLmRhdHVtX3R5cGU9PT1nKSYmIldHUzg0IiE9PWIuZGF0dW1Db2RlfXZhciBuO3JldHVybiBBcnJheS5pc0FycmF5KGMpJiYoYz1rKGMpKSxhLmRhdHVtJiZiLmRhdHVtJiYobShhLGIpfHxtKGIsYSkpJiYobj1uZXcgaigiV0dTODQiKSxsKGEsbixjKSxhPW4pLCJlbnUiIT09YS5heGlzJiZpKGEsITEsYyksImxvbmdsYXQiPT09YS5wcm9qTmFtZT8oYy54Kj1kLGMueSo9ZCk6KGEudG9fbWV0ZXImJihjLngqPWEudG9fbWV0ZXIsYy55Kj1hLnRvX21ldGVyKSxhLmludmVyc2UoYykpLGEuZnJvbV9ncmVlbndpY2gmJihjLngrPWEuZnJvbV9ncmVlbndpY2gpLGM9aChhLmRhdHVtLGIuZGF0dW0sYyksYi5mcm9tX2dyZWVud2ljaCYmKGMueC09Yi5mcm9tX2dyZWVud2ljaCksImxvbmdsYXQiPT09Yi5wcm9qTmFtZT8oYy54Kj1lLGMueSo9ZSk6KGIuZm9yd2FyZChjKSxiLnRvX21ldGVyJiYoYy54Lz1iLnRvX21ldGVyLGMueS89Yi50b19tZXRlcikpLCJlbnUiIT09Yi5heGlzJiZpKGIsITAsYyksY319LHsiLi9Qcm9qIjoyLCIuL2FkanVzdF9heGlzIjozLCIuL2NvbW1vbi90b1BvaW50IjoyMywiLi9kYXR1bV90cmFuc2Zvcm0iOjMxfV0sNjc6W2Z1bmN0aW9uKGEsYixjKXtmdW5jdGlvbiBkKGEsYixjKXthW2JdPWMubWFwKGZ1bmN0aW9uKGEpe3ZhciBiPXt9O3JldHVybiBlKGEsYiksYn0pLnJlZHVjZShmdW5jdGlvbihhLGIpe3JldHVybiBqKGEsYil9LHt9KX1mdW5jdGlvbiBlKGEsYil7dmFyIGM7cmV0dXJuIEFycmF5LmlzQXJyYXkoYSk/KGM9YS5zaGlmdCgpLCJQQVJBTUVURVIiPT09YyYmKGM9YS5zaGlmdCgpKSwxPT09YS5sZW5ndGg/QXJyYXkuaXNBcnJheShhWzBdKT8oYltjXT17fSxlKGFbMF0sYltjXSkpOmJbY109YVswXTphLmxlbmd0aD8iVE9XR1M4NCI9PT1jP2JbY109YTooYltjXT17fSxbIlVOSVQiLCJQUklNRU0iLCJWRVJUX0RBVFVNIl0uaW5kZXhPZihjKT4tMT8oYltjXT17bmFtZTphWzBdLnRvTG93ZXJDYXNlKCksY29udmVydDphWzFdfSwzPT09YS5sZW5ndGgmJihiW2NdLmF1dGg9YVsyXSkpOiJTUEhFUk9JRCI9PT1jPyhiW2NdPXtuYW1lOmFbMF0sYTphWzFdLHJmOmFbMl19LDQ9PT1hLmxlbmd0aCYmKGJbY10uYXV0aD1hWzNdKSk6WyJHRU9HQ1MiLCJHRU9DQ1MiLCJEQVRVTSIsIlZFUlRfQ1MiLCJDT01QRF9DUyIsIkxPQ0FMX0NTIiwiRklUVEVEX0NTIiwiTE9DQUxfREFUVU0iXS5pbmRleE9mKGMpPi0xPyhhWzBdPVsibmFtZSIsYVswXV0sZChiLGMsYSkpOmEuZXZlcnkoZnVuY3Rpb24oYSl7cmV0dXJuIEFycmF5LmlzQXJyYXkoYSl9KT9kKGIsYyxhKTplKGEsYltjXSkpOmJbY109ITAsdm9pZCAwKTp2b2lkKGJbYV09ITApfWZ1bmN0aW9uIGYoYSxiKXt2YXIgYz1iWzBdLGQ9YlsxXTshKGMgaW4gYSkmJmQgaW4gYSYmKGFbY109YVtkXSwzPT09Yi5sZW5ndGgmJihhW2NdPWJbMl0oYVtjXSkpKX1mdW5jdGlvbiBnKGEpe3JldHVybiBhKml9ZnVuY3Rpb24gaChhKXtmdW5jdGlvbiBiKGIpe3ZhciBjPWEudG9fbWV0ZXJ8fDE7cmV0dXJuIHBhcnNlRmxvYXQoYiwxMCkqY30iR0VPR0NTIj09PWEudHlwZT9hLnByb2pOYW1lPSJsb25nbGF0IjoiTE9DQUxfQ1MiPT09YS50eXBlPyhhLnByb2pOYW1lPSJpZGVudGl0eSIsYS5sb2NhbD0hMCk6Im9iamVjdCI9PXR5cGVvZiBhLlBST0pFQ1RJT04/YS5wcm9qTmFtZT1PYmplY3Qua2V5cyhhLlBST0pFQ1RJT04pWzBdOmEucHJvak5hbWU9YS5QUk9KRUNUSU9OLGEuVU5JVCYmKGEudW5pdHM9YS5VTklULm5hbWUudG9Mb3dlckNhc2UoKSwibWV0cmUiPT09YS51bml0cyYmKGEudW5pdHM9Im1ldGVyIiksYS5VTklULmNvbnZlcnQmJigiR0VPR0NTIj09PWEudHlwZT9hLkRBVFVNJiZhLkRBVFVNLlNQSEVST0lEJiYoYS50b19tZXRlcj1wYXJzZUZsb2F0KGEuVU5JVC5jb252ZXJ0LDEwKSphLkRBVFVNLlNQSEVST0lELmEpOmEudG9fbWV0ZXI9cGFyc2VGbG9hdChhLlVOSVQuY29udmVydCwxMCkpKSxhLkdFT0dDUyYmKGEuR0VPR0NTLkRBVFVNP2EuZGF0dW1Db2RlPWEuR0VPR0NTLkRBVFVNLm5hbWUudG9Mb3dlckNhc2UoKTphLmRhdHVtQ29kZT1hLkdFT0dDUy5uYW1lLnRvTG93ZXJDYXNlKCksImRfIj09PWEuZGF0dW1Db2RlLnNsaWNlKDAsMikmJihhLmRhdHVtQ29kZT1hLmRhdHVtQ29kZS5zbGljZSgyKSksIm5ld196ZWFsYW5kX2dlb2RldGljX2RhdHVtXzE5NDkiIT09YS5kYXR1bUNvZGUmJiJuZXdfemVhbGFuZF8xOTQ5IiE9PWEuZGF0dW1Db2RlfHwoYS5kYXR1bUNvZGU9Im56Z2Q0OSIpLCJ3Z3NfMTk4NCI9PT1hLmRhdHVtQ29kZSYmKCJNZXJjYXRvcl9BdXhpbGlhcnlfU3BoZXJlIj09PWEuUFJPSkVDVElPTiYmKGEuc3BoZXJlPSEwKSxhLmRhdHVtQ29kZT0id2dzODQiKSwiX2ZlcnJvIj09PWEuZGF0dW1Db2RlLnNsaWNlKC02KSYmKGEuZGF0dW1Db2RlPWEuZGF0dW1Db2RlLnNsaWNlKDAsLTYpKSwiX2pha2FydGEiPT09YS5kYXR1bUNvZGUuc2xpY2UoLTgpJiYoYS5kYXR1bUNvZGU9YS5kYXR1bUNvZGUuc2xpY2UoMCwtOCkpLH5hLmRhdHVtQ29kZS5pbmRleE9mKCJiZWxnZSIpJiYoYS5kYXR1bUNvZGU9InJuYjcyIiksYS5HRU9HQ1MuREFUVU0mJmEuR0VPR0NTLkRBVFVNLlNQSEVST0lEJiYoYS5lbGxwcz1hLkdFT0dDUy5EQVRVTS5TUEhFUk9JRC5uYW1lLnJlcGxhY2UoIl8xOSIsIiIpLnJlcGxhY2UoL1tDY11sYXJrZVxfMTgvLCJjbHJrIiksImludGVybmF0aW9uYWwiPT09YS5lbGxwcy50b0xvd2VyQ2FzZSgpLnNsaWNlKDAsMTMpJiYoYS5lbGxwcz0iaW50bCIpLGEuYT1hLkdFT0dDUy5EQVRVTS5TUEhFUk9JRC5hLGEucmY9cGFyc2VGbG9hdChhLkdFT0dDUy5EQVRVTS5TUEhFUk9JRC5yZiwxMCkpLH5hLmRhdHVtQ29kZS5pbmRleE9mKCJvc2diXzE5MzYiKSYmKGEuZGF0dW1Db2RlPSJvc2diMzYiKSksYS5iJiYhaXNGaW5pdGUoYS5iKSYmKGEuYj1hLmEpO3ZhciBjPWZ1bmN0aW9uKGIpe3JldHVybiBmKGEsYil9LGQ9W1sic3RhbmRhcmRfcGFyYWxsZWxfMSIsIlN0YW5kYXJkX1BhcmFsbGVsXzEiXSxbInN0YW5kYXJkX3BhcmFsbGVsXzIiLCJTdGFuZGFyZF9QYXJhbGxlbF8yIl0sWyJmYWxzZV9lYXN0aW5nIiwiRmFsc2VfRWFzdGluZyJdLFsiZmFsc2Vfbm9ydGhpbmciLCJGYWxzZV9Ob3J0aGluZyJdLFsiY2VudHJhbF9tZXJpZGlhbiIsIkNlbnRyYWxfTWVyaWRpYW4iXSxbImxhdGl0dWRlX29mX29yaWdpbiIsIkxhdGl0dWRlX09mX09yaWdpbiJdLFsibGF0aXR1ZGVfb2Zfb3JpZ2luIiwiQ2VudHJhbF9QYXJhbGxlbCJdLFsic2NhbGVfZmFjdG9yIiwiU2NhbGVfRmFjdG9yIl0sWyJrMCIsInNjYWxlX2ZhY3RvciJdLFsibGF0aXR1ZGVfb2ZfY2VudGVyIiwiTGF0aXR1ZGVfb2ZfY2VudGVyIl0sWyJsYXQwIiwibGF0aXR1ZGVfb2ZfY2VudGVyIixnXSxbImxvbmdpdHVkZV9vZl9jZW50ZXIiLCJMb25naXR1ZGVfT2ZfQ2VudGVyIl0sWyJsb25nYyIsImxvbmdpdHVkZV9vZl9jZW50ZXIiLGddLFsieDAiLCJmYWxzZV9lYXN0aW5nIixiXSxbInkwIiwiZmFsc2Vfbm9ydGhpbmciLGJdLFsibG9uZzAiLCJjZW50cmFsX21lcmlkaWFuIixnXSxbImxhdDAiLCJsYXRpdHVkZV9vZl9vcmlnaW4iLGddLFsibGF0MCIsInN0YW5kYXJkX3BhcmFsbGVsXzEiLGddLFsibGF0MSIsInN0YW5kYXJkX3BhcmFsbGVsXzEiLGddLFsibGF0MiIsInN0YW5kYXJkX3BhcmFsbGVsXzIiLGddLFsiYWxwaGEiLCJhemltdXRoIixnXSxbInNyc0NvZGUiLCJuYW1lIl1dO2QuZm9yRWFjaChjKSxhLmxvbmcwfHwhYS5sb25nY3x8IkFsYmVyc19Db25pY19FcXVhbF9BcmVhIiE9PWEucHJvak5hbWUmJiJMYW1iZXJ0X0F6aW11dGhhbF9FcXVhbF9BcmVhIiE9PWEucHJvak5hbWV8fChhLmxvbmcwPWEubG9uZ2MpLGEubGF0X3RzfHwhYS5sYXQxfHwiU3RlcmVvZ3JhcGhpY19Tb3V0aF9Qb2xlIiE9PWEucHJvak5hbWUmJiJQb2xhciBTdGVyZW9ncmFwaGljICh2YXJpYW50IEIpIiE9PWEucHJvak5hbWV8fChhLmxhdDA9ZyhhLmxhdDE+MD85MDotOTApLGEubGF0X3RzPWEubGF0MSl9dmFyIGk9LjAxNzQ1MzI5MjUxOTk0MzI5NSxqPWEoIi4vZXh0ZW5kIik7Yi5leHBvcnRzPWZ1bmN0aW9uKGEsYil7dmFyIGM9SlNPTi5wYXJzZSgoIiwiK2EpLnJlcGxhY2UoL1xzKlwsXHMqKFtBLVpfMC05XSs/KShcWykvZywnLFsiJDEiLCcpLnNsaWNlKDEpLnJlcGxhY2UoL1xzKlwsXHMqKFtBLVpfMC05XSs/KVxdL2csJywiJDEiXScpLnJlcGxhY2UoLyxcWyJWRVJUQ1MiLisvLCIiKSksZD1jLnNoaWZ0KCksZj1jLnNoaWZ0KCk7Yy51bnNoaWZ0KFsibmFtZSIsZl0pLGMudW5zaGlmdChbInR5cGUiLGRdKSxjLnVuc2hpZnQoIm91dHB1dCIpO3ZhciBnPXt9O3JldHVybiBlKGMsZyksaChnLm91dHB1dCksaihiLGcub3V0cHV0KX19LHsiLi9leHRlbmQiOjM0fV0sNjg6W2Z1bmN0aW9uKGEsYixjKXtmdW5jdGlvbiBkKGEpe3JldHVybiBhKihNYXRoLlBJLzE4MCl9ZnVuY3Rpb24gZShhKXtyZXR1cm4gMTgwKihhL01hdGguUEkpfWZ1bmN0aW9uIGYoYSl7dmFyIGIsYyxlLGYsZyxpLGosayxsLG09YS5sYXQsbj1hLmxvbixvPTYzNzgxMzcscD0uMDA2Njk0MzgscT0uOTk5NixyPWQobSkscz1kKG4pO2w9TWF0aC5mbG9vcigobisxODApLzYpKzEsMTgwPT09biYmKGw9NjApLG0+PTU2JiY2ND5tJiZuPj0zJiYxMj5uJiYobD0zMiksbT49NzImJjg0Pm0mJihuPj0wJiY5Pm4/bD0zMTpuPj05JiYyMT5uP2w9MzM6bj49MjEmJjMzPm4/bD0zNTpuPj0zMyYmNDI+biYmKGw9MzcpKSxiPTYqKGwtMSktMTgwKzMsaz1kKGIpLGM9cC8oMS1wKSxlPW8vTWF0aC5zcXJ0KDEtcCpNYXRoLnNpbihyKSpNYXRoLnNpbihyKSksZj1NYXRoLnRhbihyKSpNYXRoLnRhbihyKSxnPWMqTWF0aC5jb3MocikqTWF0aC5jb3MociksaT1NYXRoLmNvcyhyKSoocy1rKSxqPW8qKCgxLXAvNC0zKnAqcC82NC01KnAqcCpwLzI1Nikqci0oMypwLzgrMypwKnAvMzIrNDUqcCpwKnAvMTAyNCkqTWF0aC5zaW4oMipyKSsoMTUqcCpwLzI1Nis0NSpwKnAqcC8xMDI0KSpNYXRoLnNpbig0KnIpLTM1KnAqcCpwLzMwNzIqTWF0aC5zaW4oNipyKSk7dmFyIHQ9cSplKihpKygxLWYrZykqaSppKmkvNisoNS0xOCpmK2YqZis3MipnLTU4KmMpKmkqaSppKmkqaS8xMjApKzVlNSx1PXEqKGorZSpNYXRoLnRhbihyKSooaSppLzIrKDUtZis5KmcrNCpnKmcpKmkqaSppKmkvMjQrKDYxLTU4KmYrZipmKzYwMCpnLTMzMCpjKSppKmkqaSppKmkqaS83MjApKTtyZXR1cm4gMD5tJiYodSs9MWU3KSx7bm9ydGhpbmc6TWF0aC5yb3VuZCh1KSxlYXN0aW5nOk1hdGgucm91bmQodCksem9uZU51bWJlcjpsLHpvbmVMZXR0ZXI6aChtKX19ZnVuY3Rpb24gZyhhKXt2YXIgYj1hLm5vcnRoaW5nLGM9YS5lYXN0aW5nLGQ9YS56b25lTGV0dGVyLGY9YS56b25lTnVtYmVyO2lmKDA+Znx8Zj42MClyZXR1cm4gbnVsbDt2YXIgaCxpLGosayxsLG0sbixvLHAscSxyPS45OTk2LHM9NjM3ODEzNyx0PS4wMDY2OTQzOCx1PSgxLU1hdGguc3FydCgxLXQpKS8oMStNYXRoLnNxcnQoMS10KSksdj1jLTVlNSx3PWI7Ik4iPmQmJih3LT0xZTcpLG89NiooZi0xKS0xODArMyxoPXQvKDEtdCksbj13L3IscD1uLyhzKigxLXQvNC0zKnQqdC82NC01KnQqdCp0LzI1NikpLHE9cCsoMyp1LzItMjcqdSp1KnUvMzIpKk1hdGguc2luKDIqcCkrKDIxKnUqdS8xNi01NSp1KnUqdSp1LzMyKSpNYXRoLnNpbig0KnApKzE1MSp1KnUqdS85NipNYXRoLnNpbig2KnApLGk9cy9NYXRoLnNxcnQoMS10Kk1hdGguc2luKHEpKk1hdGguc2luKHEpKSxqPU1hdGgudGFuKHEpKk1hdGgudGFuKHEpLGs9aCpNYXRoLmNvcyhxKSpNYXRoLmNvcyhxKSxsPXMqKDEtdCkvTWF0aC5wb3coMS10Kk1hdGguc2luKHEpKk1hdGguc2luKHEpLDEuNSksbT12LyhpKnIpO3ZhciB4PXEtaSpNYXRoLnRhbihxKS9sKihtKm0vMi0oNSszKmorMTAqay00Kmsqay05KmgpKm0qbSptKm0vMjQrKDYxKzkwKmorMjk4KmsrNDUqaipqLTI1MipoLTMqayprKSptKm0qbSptKm0qbS83MjApO3g9ZSh4KTt2YXIgeT0obS0oMSsyKmoraykqbSptKm0vNisoNS0yKmsrMjgqai0zKmsqays4KmgrMjQqaipqKSptKm0qbSptKm0vMTIwKS9NYXRoLmNvcyhxKTt5PW8rZSh5KTt2YXIgejtpZihhLmFjY3VyYWN5KXt2YXIgQT1nKHtub3J0aGluZzphLm5vcnRoaW5nK2EuYWNjdXJhY3ksZWFzdGluZzphLmVhc3RpbmcrYS5hY2N1cmFjeSx6b25lTGV0dGVyOmEuem9uZUxldHRlcix6b25lTnVtYmVyOmEuem9uZU51bWJlcn0pO3o9e3RvcDpBLmxhdCxyaWdodDpBLmxvbixib3R0b206eCxsZWZ0Onl9fWVsc2Ugej17bGF0OngsbG9uOnl9O3JldHVybiB6fWZ1bmN0aW9uIGgoYSl7dmFyIGI9IloiO3JldHVybiA4ND49YSYmYT49NzI/Yj0iWCI6NzI+YSYmYT49NjQ/Yj0iVyI6NjQ+YSYmYT49NTY/Yj0iViI6NTY+YSYmYT49NDg/Yj0iVSI6NDg+YSYmYT49NDA/Yj0iVCI6NDA+YSYmYT49MzI/Yj0iUyI6MzI+YSYmYT49MjQ/Yj0iUiI6MjQ+YSYmYT49MTY/Yj0iUSI6MTY+YSYmYT49OD9iPSJQIjo4PmEmJmE+PTA/Yj0iTiI6MD5hJiZhPj0tOD9iPSJNIjotOD5hJiZhPj0tMTY/Yj0iTCI6LTE2PmEmJmE+PS0yND9iPSJLIjotMjQ+YSYmYT49LTMyP2I9IkoiOi0zMj5hJiZhPj0tNDA/Yj0iSCI6LTQwPmEmJmE+PS00OD9iPSJHIjotNDg+YSYmYT49LTU2P2I9IkYiOi01Nj5hJiZhPj0tNjQ/Yj0iRSI6LTY0PmEmJmE+PS03Mj9iPSJEIjotNzI+YSYmYT49LTgwJiYoYj0iQyIpLGJ9ZnVuY3Rpb24gaShhLGIpe3ZhciBjPSIwMDAwMCIrYS5lYXN0aW5nLGQ9IjAwMDAwIithLm5vcnRoaW5nO3JldHVybiBhLnpvbmVOdW1iZXIrYS56b25lTGV0dGVyK2ooYS5lYXN0aW5nLGEubm9ydGhpbmcsYS56b25lTnVtYmVyKStjLnN1YnN0cihjLmxlbmd0aC01LGIpK2Quc3Vic3RyKGQubGVuZ3RoLTUsYil9ZnVuY3Rpb24gaihhLGIsYyl7dmFyIGQ9ayhjKSxlPU1hdGguZmxvb3IoYS8xZTUpLGY9TWF0aC5mbG9vcihiLzFlNSklMjA7cmV0dXJuIGwoZSxmLGQpfWZ1bmN0aW9uIGsoYSl7dmFyIGI9YSVxO3JldHVybiAwPT09YiYmKGI9cSksYn1mdW5jdGlvbiBsKGEsYixjKXt2YXIgZD1jLTEsZT1yLmNoYXJDb2RlQXQoZCksZj1zLmNoYXJDb2RlQXQoZCksZz1lK2EtMSxoPWYrYixpPSExO2c+eCYmKGc9Zy14K3QtMSxpPSEwKSwoZz09PXV8fHU+ZSYmZz51fHwoZz51fHx1PmUpJiZpKSYmZysrLChnPT09dnx8dj5lJiZnPnZ8fChnPnZ8fHY+ZSkmJmkpJiYoZysrLGc9PT11JiZnKyspLGc+eCYmKGc9Zy14K3QtMSksaD53PyhoPWgtdyt0LTEsaT0hMCk6aT0hMSwoaD09PXV8fHU+ZiYmaD51fHwoaD51fHx1PmYpJiZpKSYmaCsrLChoPT09dnx8dj5mJiZoPnZ8fChoPnZ8fHY+ZikmJmkpJiYoaCsrLGg9PT11JiZoKyspLGg+dyYmKGg9aC13K3QtMSk7dmFyIGo9U3RyaW5nLmZyb21DaGFyQ29kZShnKStTdHJpbmcuZnJvbUNoYXJDb2RlKGgpO3JldHVybiBqfWZ1bmN0aW9uIG0oYSl7aWYoYSYmMD09PWEubGVuZ3RoKXRocm93Ik1HUlNQb2ludCBjb3ZlcnRpbmcgZnJvbSBub3RoaW5nIjtmb3IodmFyIGIsYz1hLmxlbmd0aCxkPW51bGwsZT0iIixmPTA7IS9bQS1aXS8udGVzdChiPWEuY2hhckF0KGYpKTspe2lmKGY+PTIpdGhyb3ciTUdSU1BvaW50IGJhZCBjb252ZXJzaW9uIGZyb206ICIrYTtlKz1iLGYrK312YXIgZz1wYXJzZUludChlLDEwKTtpZigwPT09Znx8ZiszPmMpdGhyb3ciTUdSU1BvaW50IGJhZCBjb252ZXJzaW9uIGZyb206ICIrYTt2YXIgaD1hLmNoYXJBdChmKyspO2lmKCJBIj49aHx8IkIiPT09aHx8IlkiPT09aHx8aD49IloifHwiSSI9PT1ofHwiTyI9PT1oKXRocm93Ik1HUlNQb2ludCB6b25lIGxldHRlciAiK2grIiBub3QgaGFuZGxlZDogIithO2Q9YS5zdWJzdHJpbmcoZixmKz0yKTtmb3IodmFyIGk9ayhnKSxqPW4oZC5jaGFyQXQoMCksaSksbD1vKGQuY2hhckF0KDEpLGkpO2w8cChoKTspbCs9MmU2O3ZhciBtPWMtZjtpZihtJTIhPT0wKXRocm93Ik1HUlNQb2ludCBoYXMgdG8gaGF2ZSBhbiBldmVuIG51bWJlciBcbm9mIGRpZ2l0cyBhZnRlciB0aGUgem9uZSBsZXR0ZXIgYW5kIHR3byAxMDBrbSBsZXR0ZXJzIC0gZnJvbnQgXG5oYWxmIGZvciBlYXN0aW5nIG1ldGVycywgc2Vjb25kIGhhbGYgZm9yIFxubm9ydGhpbmcgbWV0ZXJzIithO3ZhciBxLHIscyx0LHUsdj1tLzIsdz0wLHg9MDtyZXR1cm4gdj4wJiYocT0xZTUvTWF0aC5wb3coMTAsdikscj1hLnN1YnN0cmluZyhmLGYrdiksdz1wYXJzZUZsb2F0KHIpKnEscz1hLnN1YnN0cmluZyhmK3YpLHg9cGFyc2VGbG9hdChzKSpxKSx0PXcraix1PXgrbCx7ZWFzdGluZzp0LG5vcnRoaW5nOnUsem9uZUxldHRlcjpoLHpvbmVOdW1iZXI6ZyxhY2N1cmFjeTpxfX1mdW5jdGlvbiBuKGEsYil7Zm9yKHZhciBjPXIuY2hhckNvZGVBdChiLTEpLGQ9MWU1LGU9ITE7YyE9PWEuY2hhckNvZGVBdCgwKTspe2lmKGMrKyxjPT09dSYmYysrLGM9PT12JiZjKyssYz54KXtpZihlKXRocm93IkJhZCBjaGFyYWN0ZXI6ICIrYTtjPXQsZT0hMH1kKz0xZTV9cmV0dXJuIGR9ZnVuY3Rpb24gbyhhLGIpe2lmKGE+IlYiKXRocm93Ik1HUlNQb2ludCBnaXZlbiBpbnZhbGlkIE5vcnRoaW5nICIrYTtmb3IodmFyIGM9cy5jaGFyQ29kZUF0KGItMSksZD0wLGU9ITE7YyE9PWEuY2hhckNvZGVBdCgwKTspe2lmKGMrKyxjPT09dSYmYysrLGM9PT12JiZjKyssYz53KXtpZihlKXRocm93IkJhZCBjaGFyYWN0ZXI6ICIrYTtjPXQsZT0hMH1kKz0xZTV9cmV0dXJuIGR9ZnVuY3Rpb24gcChhKXt2YXIgYjtzd2l0Y2goYSl7Y2FzZSJDIjpiPTExZTU7YnJlYWs7Y2FzZSJEIjpiPTJlNjticmVhaztjYXNlIkUiOmI9MjhlNTticmVhaztjYXNlIkYiOmI9MzdlNTticmVhaztjYXNlIkciOmI9NDZlNTticmVhaztjYXNlIkgiOmI9NTVlNTticmVhaztjYXNlIkoiOmI9NjRlNTticmVhaztjYXNlIksiOmI9NzNlNTticmVhaztjYXNlIkwiOmI9ODJlNTticmVhaztjYXNlIk0iOmI9OTFlNTticmVhaztjYXNlIk4iOmI9MDticmVhaztjYXNlIlAiOmI9OGU1O2JyZWFrO2Nhc2UiUSI6Yj0xN2U1O2JyZWFrO2Nhc2UiUiI6Yj0yNmU1O2JyZWFrO2Nhc2UiUyI6Yj0zNWU1O2JyZWFrO2Nhc2UiVCI6Yj00NGU1O2JyZWFrO2Nhc2UiVSI6Yj01M2U1O2JyZWFrO2Nhc2UiViI6Yj02MmU1O2JyZWFrO2Nhc2UiVyI6Yj03ZTY7YnJlYWs7Y2FzZSJYIjpiPTc5ZTU7YnJlYWs7ZGVmYXVsdDpiPS0xfWlmKGI+PTApcmV0dXJuIGI7dGhyb3ciSW52YWxpZCB6b25lIGxldHRlcjogIithfXZhciBxPTYscj0iQUpTQUpTIixzPSJBRkFGQUYiLHQ9NjUsdT03Myx2PTc5LHc9ODYseD05MDtjLmZvcndhcmQ9ZnVuY3Rpb24oYSxiKXtyZXR1cm4gYj1ifHw1LGkoZih7bGF0OmFbMV0sbG9uOmFbMF19KSxiKX0sYy5pbnZlcnNlPWZ1bmN0aW9uKGEpe3ZhciBiPWcobShhLnRvVXBwZXJDYXNlKCkpKTtyZXR1cm4gYi5sYXQmJmIubG9uP1tiLmxvbixiLmxhdCxiLmxvbixiLmxhdF06W2IubGVmdCxiLmJvdHRvbSxiLnJpZ2h0LGIudG9wXX0sYy50b1BvaW50PWZ1bmN0aW9uKGEpe3ZhciBiPWcobShhLnRvVXBwZXJDYXNlKCkpKTtyZXR1cm4gYi5sYXQmJmIubG9uP1tiLmxvbixiLmxhdF06WyhiLmxlZnQrYi5yaWdodCkvMiwoYi50b3ArYi5ib3R0b20pLzJdfX0se31dLDY5OltmdW5jdGlvbihhLGIsYyl7Yi5leHBvcnRzPXtuYW1lOiJwcm9qNCIsdmVyc2lvbjoiMi4zLjE1IixkZXNjcmlwdGlvbjoiUHJvajRqcyBpcyBhIEphdmFTY3JpcHQgbGlicmFyeSB0byB0cmFuc2Zvcm0gcG9pbnQgY29vcmRpbmF0ZXMgZnJvbSBvbmUgY29vcmRpbmF0ZSBzeXN0ZW0gdG8gYW5vdGhlciwgaW5jbHVkaW5nIGRhdHVtIHRyYW5zZm9ybWF0aW9ucy4iLG1haW46ImxpYi9pbmRleC5qcyIsZGlyZWN0b3JpZXM6e3Rlc3Q6InRlc3QiLGRvYzoiZG9jcyJ9LHNjcmlwdHM6e3Rlc3Q6Ii4vbm9kZV9tb2R1bGVzL2lzdGFuYnVsL2xpYi9jbGkuanMgdGVzdCAuL25vZGVfbW9kdWxlcy9tb2NoYS9iaW4vX21vY2hhIHRlc3QvdGVzdC5qcyJ9LHJlcG9zaXRvcnk6e3R5cGU6ImdpdCIsdXJsOiJnaXQ6Ly9naXRodWIuY29tL3Byb2o0anMvcHJvajRqcy5naXQifSxhdXRob3I6IiIsbGljZW5zZToiTUlUIixqYW06e21haW46ImRpc3QvcHJvajQuanMiLGluY2x1ZGU6WyJkaXN0L3Byb2o0LmpzIiwiUkVBRE1FLm1kIiwiQVVUSE9SUyIsIkxJQ0VOU0UubWQiXX0sZGV2RGVwZW5kZW5jaWVzOnsiZ3J1bnQtY2xpIjoifjAuMS4xMyIsZ3J1bnQ6In4wLjQuMiIsImdydW50LWNvbnRyaWItY29ubmVjdCI6In4wLjYuMCIsImdydW50LWNvbnRyaWItanNoaW50IjoifjAuOC4wIixjaGFpOiJ+MS44LjEiLG1vY2hhOiJ+MS4xNy4xIiwiZ3J1bnQtbW9jaGEtcGhhbnRvbWpzIjoifjAuNC4wIixicm93c2VyaWZ5OiJ+MTIuMC4xIiwiZ3J1bnQtYnJvd3NlcmlmeSI6In40LjAuMSIsImdydW50LWNvbnRyaWItdWdsaWZ5IjoifjAuMTEuMSIsY3VybDoiZ2l0Oi8vZ2l0aHViLmNvbS9jdWpvanMvY3VybC5naXQiLGlzdGFuYnVsOiJ+MC4yLjQiLHRpbjoifjAuNC4wIn0sZGVwZW5kZW5jaWVzOnttZ3JzOiJ+MC4wLjIifX19LHt9XX0se30sWzM2XSkoMzYpfSk7"></script> | |
| <script src="data:application/x-javascript;base64,KGZ1bmN0aW9uIChmYWN0b3J5KSB7DQoJdmFyIEwsIHByb2o0Ow0KCWlmICh0eXBlb2YgZGVmaW5lID09PSAnZnVuY3Rpb24nICYmIGRlZmluZS5hbWQpIHsNCgkJLy8gQU1EDQoJCWRlZmluZShbJ2xlYWZsZXQnLCAncHJvajQnXSwgZmFjdG9yeSk7DQoJfSBlbHNlIGlmICh0eXBlb2YgbW9kdWxlID09PSAnb2JqZWN0JyAmJiB0eXBlb2YgbW9kdWxlLmV4cG9ydHMgPT09ICJvYmplY3QiKSB7DQoJCS8vIE5vZGUvQ29tbW9uSlMNCgkJTCA9IHJlcXVpcmUoJ2xlYWZsZXQnKTsNCgkJcHJvajQgPSByZXF1aXJlKCdwcm9qNCcpOw0KCQltb2R1bGUuZXhwb3J0cyA9IGZhY3RvcnkoTCwgcHJvajQpOw0KCX0gZWxzZSB7DQoJCS8vIEJyb3dzZXIgZ2xvYmFscw0KCQlpZiAodHlwZW9mIHdpbmRvdy5MID09PSAndW5kZWZpbmVkJyB8fCB0eXBlb2Ygd2luZG93LnByb2o0ID09PSAndW5kZWZpbmVkJykNCgkJCXRocm93ICdMZWFmbGV0IGFuZCBwcm9qNCBtdXN0IGJlIGxvYWRlZCBmaXJzdCc7DQoJCWZhY3Rvcnkod2luZG93LkwsIHdpbmRvdy5wcm9qNCk7DQoJfQ0KfShmdW5jdGlvbiAoTCwgcHJvajQpIHsNCg0KCUwuUHJvaiA9IHt9Ow0KDQoJTC5Qcm9qLl9pc1Byb2o0T2JqID0gZnVuY3Rpb24oYSkgew0KCQlyZXR1cm4gKHR5cGVvZiBhLmludmVyc2UgIT09ICd1bmRlZmluZWQnICYmDQoJCQl0eXBlb2YgYS5mb3J3YXJkICE9PSAndW5kZWZpbmVkJyk7DQoJfTsNCg0KCUwuUHJvai5TY2FsZURlcGVuZGFudFRyYW5zZm9ybWF0aW9uID0gZnVuY3Rpb24oc2NhbGVUcmFuc2Zvcm1zKSB7DQoJCXRoaXMuc2NhbGVUcmFuc2Zvcm1zID0gc2NhbGVUcmFuc2Zvcm1zOw0KCX07DQoNCglMLlByb2ouU2NhbGVEZXBlbmRhbnRUcmFuc2Zvcm1hdGlvbi5wcm90b3R5cGUudHJhbnNmb3JtID0gZnVuY3Rpb24ocG9pbnQsIHNjYWxlKSB7DQoJCXJldHVybiB0aGlzLnNjYWxlVHJhbnNmb3Jtc1tzY2FsZV0udHJhbnNmb3JtKHBvaW50LCBzY2FsZSk7DQoJfTsNCg0KCUwuUHJvai5TY2FsZURlcGVuZGFudFRyYW5zZm9ybWF0aW9uLnByb3RvdHlwZS51bnRyYW5zZm9ybSA9IGZ1bmN0aW9uKHBvaW50LCBzY2FsZSkgew0KCQlyZXR1cm4gdGhpcy5zY2FsZVRyYW5zZm9ybXNbc2NhbGVdLnVudHJhbnNmb3JtKHBvaW50LCBzY2FsZSk7DQoJfTsNCg0KCUwuUHJvai5Qcm9qZWN0aW9uID0gTC5DbGFzcy5leHRlbmQoew0KCQlpbml0aWFsaXplOiBmdW5jdGlvbihhLCBkZWYpIHsNCgkJCWlmIChMLlByb2ouX2lzUHJvajRPYmooYSkpIHsNCgkJCQl0aGlzLl9wcm9qID0gYTsNCgkJCX0gZWxzZSB7DQoJCQkJdmFyIGNvZGUgPSBhOw0KCQkJCWlmIChkZWYpIHsNCgkJCQkJcHJvajQuZGVmcyhjb2RlLCBkZWYpOw0KCQkJCX0gZWxzZSBpZiAocHJvajQuZGVmc1tjb2RlXSA9PT0gdW5kZWZpbmVkKSB7DQoJCQkJCXZhciB1cm4gPSBjb2RlLnNwbGl0KCc6Jyk7DQoJCQkJCWlmICh1cm4ubGVuZ3RoID4gMykgew0KCQkJCQkJY29kZSA9IHVyblt1cm4ubGVuZ3RoIC0gM10gKyAnOicgKyB1cm5bdXJuLmxlbmd0aCAtIDFdOw0KCQkJCQl9DQoJCQkJCWlmIChwcm9qNC5kZWZzW2NvZGVdID09PSB1bmRlZmluZWQpIHsNCgkJCQkJCXRocm93ICdObyBwcm9qZWN0aW9uIGRlZmluaXRpb24gZm9yIGNvZGUgJyArIGNvZGU7DQoJCQkJCX0NCgkJCQl9DQoJCQkJdGhpcy5fcHJvaiA9IHByb2o0KGNvZGUpOw0KCQkJfQ0KCQl9LA0KDQoJCXByb2plY3Q6IGZ1bmN0aW9uIChsYXRsbmcpIHsNCgkJCXZhciBwb2ludCA9IHRoaXMuX3Byb2ouZm9yd2FyZChbbGF0bG5nLmxuZywgbGF0bG5nLmxhdF0pOw0KCQkJcmV0dXJuIG5ldyBMLlBvaW50KHBvaW50WzBdLCBwb2ludFsxXSk7DQoJCX0sDQoNCgkJdW5wcm9qZWN0OiBmdW5jdGlvbiAocG9pbnQsIHVuYm91bmRlZCkgew0KCQkJdmFyIHBvaW50MiA9IHRoaXMuX3Byb2ouaW52ZXJzZShbcG9pbnQueCwgcG9pbnQueV0pOw0KCQkJcmV0dXJuIG5ldyBMLkxhdExuZyhwb2ludDJbMV0sIHBvaW50MlswXSwgdW5ib3VuZGVkKTsNCgkJfQ0KCX0pOw0KDQoJTC5Qcm9qLkNSUyA9IEwuQ2xhc3MuZXh0ZW5kKHsNCgkJaW5jbHVkZXM6IEwuQ1JTLA0KDQoJCW9wdGlvbnM6IHsNCgkJCXRyYW5zZm9ybWF0aW9uOiBuZXcgTC5UcmFuc2Zvcm1hdGlvbigxLCAwLCAtMSwgMCkNCgkJfSwNCg0KCQlpbml0aWFsaXplOiBmdW5jdGlvbihhLCBiLCBjKSB7DQoJCQl2YXIgY29kZSwgcHJvaiwgZGVmLCBvcHRpb25zOw0KDQoJCQlpZiAoTC5Qcm9qLl9pc1Byb2o0T2JqKGEpKSB7DQoJCQkJcHJvaiA9IGE7DQoJCQkJY29kZSA9IHByb2ouc3JzQ29kZTsNCgkJCQlvcHRpb25zID0gYiB8fCB7fTsNCg0KCQkJCXRoaXMucHJvamVjdGlvbiA9IG5ldyBMLlByb2ouUHJvamVjdGlvbihwcm9qKTsNCgkJCX0gZWxzZSB7DQoJCQkJY29kZSA9IGE7DQoJCQkJZGVmID0gYjsNCgkJCQlvcHRpb25zID0gYyB8fCB7fTsNCgkJCQl0aGlzLnByb2plY3Rpb24gPSBuZXcgTC5Qcm9qLlByb2plY3Rpb24oY29kZSwgZGVmKTsNCgkJCX0NCg0KCQkJTC5VdGlsLnNldE9wdGlvbnModGhpcywgb3B0aW9ucyk7DQoJCQl0aGlzLmNvZGUgPSBjb2RlOw0KCQkJdGhpcy50cmFuc2Zvcm1hdGlvbiA9IHRoaXMub3B0aW9ucy50cmFuc2Zvcm1hdGlvbjsNCg0KCQkJaWYgKHRoaXMub3B0aW9ucy5vcmlnaW4pIHsNCgkJCQl0aGlzLnRyYW5zZm9ybWF0aW9uID0NCgkJCQkJbmV3IEwuVHJhbnNmb3JtYXRpb24oMSwgLXRoaXMub3B0aW9ucy5vcmlnaW5bMF0sDQoJCQkJCQktMSwgdGhpcy5vcHRpb25zLm9yaWdpblsxXSk7DQoJCQl9DQoNCgkJCWlmICh0aGlzLm9wdGlvbnMuc2NhbGVzKSB7DQoJCQkJdGhpcy5fc2NhbGVzID0gdGhpcy5vcHRpb25zLnNjYWxlczsNCgkJCX0gZWxzZSBpZiAodGhpcy5vcHRpb25zLnJlc29sdXRpb25zKSB7DQoJCQkJdGhpcy5fc2NhbGVzID0gW107DQoJCQkJZm9yICh2YXIgaSA9IHRoaXMub3B0aW9ucy5yZXNvbHV0aW9ucy5sZW5ndGggLSAxOyBpID49IDA7IGktLSkgew0KCQkJCQlpZiAodGhpcy5vcHRpb25zLnJlc29sdXRpb25zW2ldKSB7DQoJCQkJCQl0aGlzLl9zY2FsZXNbaV0gPSAxIC8gdGhpcy5vcHRpb25zLnJlc29sdXRpb25zW2ldOw0KCQkJCQl9DQoJCQkJfQ0KCQkJfQ0KCQl9LA0KDQoJCXNjYWxlOiBmdW5jdGlvbih6b29tKSB7DQoJCQl2YXIgaVpvb20gPSBNYXRoLmZsb29yKHpvb20pLA0KCQkJCWJhc2VTY2FsZSwNCgkJCQluZXh0U2NhbGUsDQoJCQkJc2NhbGVEaWZmLA0KCQkJCXpEaWZmOw0KCQkJaWYgKHpvb20gPT09IGlab29tKSB7DQoJCQkJcmV0dXJuIHRoaXMuX3NjYWxlc1t6b29tXTsNCgkJCX0gZWxzZSB7DQoJCQkJLy8gTm9uLWludGVnZXIgem9vbSwgaW50ZXJwb2xhdGUNCgkJCQliYXNlU2NhbGUgPSB0aGlzLl9zY2FsZXNbaVpvb21dOw0KCQkJCW5leHRTY2FsZSA9IHRoaXMuX3NjYWxlc1tpWm9vbSArIDFdOw0KCQkJCXNjYWxlRGlmZiA9IG5leHRTY2FsZSAtIGJhc2VTY2FsZTsNCgkJCQl6RGlmZiA9ICh6b29tIC0gaVpvb20pOw0KCQkJCXJldHVybiBiYXNlU2NhbGUgKyBzY2FsZURpZmYgKiB6RGlmZjsNCgkJCX0NCgkJfSwNCg0KCQlnZXRTaXplOiBmdW5jdGlvbih6b29tKSB7DQoJCQl2YXIgYiA9IHRoaXMub3B0aW9ucy5ib3VuZHMsDQoJCQkgICAgcywNCgkJCSAgICBtaW4sDQoJCQkgICAgbWF4Ow0KDQoJCQlpZiAoYikgew0KCQkJCXMgPSB0aGlzLnNjYWxlKHpvb20pOw0KCQkJCW1pbiA9IHRoaXMudHJhbnNmb3JtYXRpb24udHJhbnNmb3JtKGIubWluLCBzKTsNCgkJCQltYXggPSB0aGlzLnRyYW5zZm9ybWF0aW9uLnRyYW5zZm9ybShiLm1heCwgcyk7DQoJCQkJcmV0dXJuIEwucG9pbnQoTWF0aC5hYnMobWF4LnggLSBtaW4ueCksIE1hdGguYWJzKG1heC55IC0gbWluLnkpKTsNCgkJCX0gZWxzZSB7DQoJCQkJLy8gQmFja3dhcmRzIGNvbXBhdGliaWxpdHkgd2l0aCBMZWFmbGV0IDwgMC43DQoJCQkJcyA9IDI1NiAqIE1hdGgucG93KDIsIHpvb20pOw0KCQkJCXJldHVybiBMLnBvaW50KHMsIHMpOw0KCQkJfQ0KCQl9DQoJfSk7DQoNCglMLlByb2ouQ1JTLlRNUyA9IEwuUHJvai5DUlMuZXh0ZW5kKHsNCgkJb3B0aW9uczogew0KCQkJdGlsZVNpemU6IDI1Ng0KCQl9LA0KDQoJCWluaXRpYWxpemU6IGZ1bmN0aW9uKGEsIGIsIGMsIGQpIHsNCgkJCXZhciBjb2RlLA0KCQkJCWRlZiwNCgkJCQlwcm9qLA0KCQkJCXByb2plY3RlZEJvdW5kcywNCgkJCQlvcHRpb25zOw0KDQoJCQlpZiAoTC5Qcm9qLl9pc1Byb2o0T2JqKGEpKSB7DQoJCQkJcHJvaiA9IGE7DQoJCQkJcHJvamVjdGVkQm91bmRzID0gYjsNCgkJCQlvcHRpb25zID0gYyB8fCB7fTsNCgkJCQlvcHRpb25zLm9yaWdpbiA9IFtwcm9qZWN0ZWRCb3VuZHNbMF0sIHByb2plY3RlZEJvdW5kc1szXV07DQoJCQkJTC5Qcm9qLkNSUy5wcm90b3R5cGUuaW5pdGlhbGl6ZS5jYWxsKHRoaXMsIHByb2osIG9wdGlvbnMpOw0KCQkJfSBlbHNlIHsNCgkJCQljb2RlID0gYTsNCgkJCQlkZWYgPSBiOw0KCQkJCXByb2plY3RlZEJvdW5kcyA9IGM7DQoJCQkJb3B0aW9ucyA9IGQgfHwge307DQoJCQkJb3B0aW9ucy5vcmlnaW4gPSBbcHJvamVjdGVkQm91bmRzWzBdLCBwcm9qZWN0ZWRCb3VuZHNbM11dOw0KCQkJCUwuUHJvai5DUlMucHJvdG90eXBlLmluaXRpYWxpemUuY2FsbCh0aGlzLCBjb2RlLCBkZWYsIG9wdGlvbnMpOw0KCQkJfQ0KDQoJCQl0aGlzLnByb2plY3RlZEJvdW5kcyA9IHByb2plY3RlZEJvdW5kczsNCg0KCQkJdGhpcy5fc2l6ZXMgPSB0aGlzLl9jYWxjdWxhdGVTaXplcygpOw0KCQl9LA0KDQoJCV9jYWxjdWxhdGVTaXplczogZnVuY3Rpb24oKSB7DQoJCQl2YXIgc2l6ZXMgPSBbXSwNCgkJCSAgICBjcnNCb3VuZHMgPSB0aGlzLnByb2plY3RlZEJvdW5kcywNCgkJCSAgICBwcm9qZWN0ZWRUaWxlU2l6ZSwNCgkJCSAgICBpLA0KCQkJICAgIHgsDQoJCQkgICAgeTsNCgkJCWZvciAoaSA9IHRoaXMuX3NjYWxlcy5sZW5ndGggLSAxOyBpID49IDA7IGktLSkgew0KCQkJCWlmICh0aGlzLl9zY2FsZXNbaV0pIHsNCgkJCQkJcHJvamVjdGVkVGlsZVNpemUgPSB0aGlzLm9wdGlvbnMudGlsZVNpemUgLyB0aGlzLl9zY2FsZXNbaV07DQoJCQkJCS8vIHRvIHByZXZlbnQgdmVyeSBzbWFsbCByb3VuZGluZyBlcnJvcnMgZnJvbSBjYXVzaW5nIHVzIHRvIHJvdW5kIHVwLA0KCQkJCQkvLyBjdXQgYW55IGRlY2ltYWxzIGFmdGVyIDNyZCBiZWZvcmUgcm91bmRpbmcgdXAuDQoJCQkJCXggPSBNYXRoLmNlaWwocGFyc2VGbG9hdCgoY3JzQm91bmRzWzJdIC0gY3JzQm91bmRzWzBdKSAvIHByb2plY3RlZFRpbGVTaXplKS50b1ByZWNpc2lvbigzKSkgKg0KCQkJCQkgICAgcHJvamVjdGVkVGlsZVNpemUgKiB0aGlzLl9zY2FsZXNbaV07DQoJCQkJCXkgPSBNYXRoLmNlaWwocGFyc2VGbG9hdCgoY3JzQm91bmRzWzNdIC0gY3JzQm91bmRzWzFdKSAvIHByb2plY3RlZFRpbGVTaXplKS50b1ByZWNpc2lvbigzKSkgKg0KCQkJCQkgICAgcHJvamVjdGVkVGlsZVNpemUgKiB0aGlzLl9zY2FsZXNbaV07DQoJCQkJCXNpemVzW2ldID0gTC5wb2ludCh4LCB5KTsNCgkJCQl9DQoJCQl9DQoNCgkJCXJldHVybiBzaXplczsNCgkJfSwNCg0KCQlnZXRTaXplOiBmdW5jdGlvbih6b29tKSB7DQoJCQlyZXR1cm4gdGhpcy5fc2l6ZXNbem9vbV07DQoJCX0NCgl9KTsNCg0KCUwuUHJvai5UaWxlTGF5ZXIgPSB7fTsNCg0KCS8vIE5vdGU6IGRlcHJlY2F0ZWQgYW5kIG5vdCBuZWNlc3Nhcnkgc2luY2UgMC43LCB3aWxsIGJlIHJlbW92ZWQNCglMLlByb2ouVGlsZUxheWVyLlRNUyA9IEwuVGlsZUxheWVyLmV4dGVuZCh7DQoJCW9wdGlvbnM6IHsNCgkJCWNvbnRpbnVvdXNXb3JsZDogdHJ1ZQ0KCQl9LA0KDQoJCWluaXRpYWxpemU6IGZ1bmN0aW9uKHVybFRlbXBsYXRlLCBjcnMsIG9wdGlvbnMpIHsNCgkJCXZhciBib3VuZHNNYXRjaGVzR3JpZCA9IHRydWUsDQoJCQkJc2NhbGVUcmFuc2Zvcm1zLA0KCQkJCXVwcGVyWSwNCgkJCQljcnNCb3VuZHMsDQoJCQkJaTsNCg0KCQkJaWYgKCEoY3JzIGluc3RhbmNlb2YgTC5Qcm9qLkNSUy5UTVMpKSB7DQoJCQkJdGhyb3cgJ0NSUyBpcyBub3QgTC5Qcm9qLkNSUy5UTVMuJzsNCgkJCX0NCg0KCQkJTC5UaWxlTGF5ZXIucHJvdG90eXBlLmluaXRpYWxpemUuY2FsbCh0aGlzLCB1cmxUZW1wbGF0ZSwgb3B0aW9ucyk7DQoJCQkvLyBFbmFibGluZyB0bXMgd2lsbCBjYXVzZSBMZWFmbGV0IHRvIGFsc28gdHJ5IHRvIGRvIFRNUywgd2hpY2ggd2lsbA0KCQkJLy8gYnJlYWsgKGF0IGxlYXN0IHByaW9yIHRvIDAuNy4wKS4gQWN0aXZlbHkgZGlzYWJsZSBpdCwgdG8gcHJldmVudA0KCQkJLy8gd2VsbC1tZWFuaW5nIHVzZXJzIGZyb20gc2hvb3RpbmcgdGhlbXNlbHZlcyBpbiB0aGUgZm9vdC4NCgkJCXRoaXMub3B0aW9ucy50bXMgPSBmYWxzZTsNCgkJCXRoaXMuY3JzID0gY3JzOw0KCQkJY3JzQm91bmRzID0gdGhpcy5jcnMucHJvamVjdGVkQm91bmRzOw0KDQoJCQkvLyBWZXJpZnkgZ3JpZCBhbGlnbm1lbnQNCgkJCWZvciAoaSA9IHRoaXMub3B0aW9ucy5taW5ab29tOyBpIDwgdGhpcy5vcHRpb25zLm1heFpvb20gJiYgYm91bmRzTWF0Y2hlc0dyaWQ7IGkrKykgew0KCQkJCXZhciBncmlkSGVpZ2h0ID0gKGNyc0JvdW5kc1szXSAtIGNyc0JvdW5kc1sxXSkgLw0KCQkJCQl0aGlzLl9wcm9qZWN0ZWRUaWxlU2l6ZShpKTsNCgkJCQlib3VuZHNNYXRjaGVzR3JpZCA9IE1hdGguYWJzKGdyaWRIZWlnaHQgLSBNYXRoLnJvdW5kKGdyaWRIZWlnaHQpKSA+IDFlLTM7DQoJCQl9DQoNCgkJCWlmICghYm91bmRzTWF0Y2hlc0dyaWQpIHsNCgkJCQlzY2FsZVRyYW5zZm9ybXMgPSB7fTsNCgkJCQlmb3IgKGkgPSB0aGlzLm9wdGlvbnMubWluWm9vbTsgaSA8IHRoaXMub3B0aW9ucy5tYXhab29tOyBpKyspIHsNCgkJCQkJdXBwZXJZID0gY3JzQm91bmRzWzFdICsgTWF0aC5jZWlsKChjcnNCb3VuZHNbM10gLSBjcnNCb3VuZHNbMV0pIC8NCgkJCQkJCXRoaXMuX3Byb2plY3RlZFRpbGVTaXplKGkpKSAqIHRoaXMuX3Byb2plY3RlZFRpbGVTaXplKGkpOw0KCQkJCQlzY2FsZVRyYW5zZm9ybXNbdGhpcy5jcnMuc2NhbGUoaSldID0gbmV3IEwuVHJhbnNmb3JtYXRpb24oMSwgLWNyc0JvdW5kc1swXSwgLTEsIHVwcGVyWSk7DQoJCQkJfQ0KDQoJCQkJdGhpcy5jcnMgPSBuZXcgTC5Qcm9qLkNSUy5UTVModGhpcy5jcnMucHJvamVjdGlvbi5fcHJvaiwgY3JzQm91bmRzLCB0aGlzLmNycy5vcHRpb25zKTsNCgkJCQl0aGlzLmNycy50cmFuc2Zvcm1hdGlvbiA9IG5ldyBMLlByb2ouU2NhbGVEZXBlbmRhbnRUcmFuc2Zvcm1hdGlvbihzY2FsZVRyYW5zZm9ybXMpOw0KCQkJfQ0KCQl9LA0KDQoJCWdldFRpbGVVcmw6IGZ1bmN0aW9uKHRpbGVQb2ludCkgew0KCQkJdmFyIHpvb20gPSB0aGlzLl9tYXAuZ2V0Wm9vbSgpLA0KCQkJCWdyaWRIZWlnaHQgPSBNYXRoLmNlaWwoDQoJCQkJKHRoaXMuY3JzLnByb2plY3RlZEJvdW5kc1szXSAtIHRoaXMuY3JzLnByb2plY3RlZEJvdW5kc1sxXSkgLw0KCQkJCXRoaXMuX3Byb2plY3RlZFRpbGVTaXplKHpvb20pKTsNCg0KCQkJcmV0dXJuIEwuVXRpbC50ZW1wbGF0ZSh0aGlzLl91cmwsIEwuVXRpbC5leHRlbmQoew0KCQkJCXM6IHRoaXMuX2dldFN1YmRvbWFpbih0aWxlUG9pbnQpLA0KCQkJCXo6IHRoaXMuX2dldFpvb21Gb3JVcmwoKSwNCgkJCQl4OiB0aWxlUG9pbnQueCwNCgkJCQl5OiBncmlkSGVpZ2h0IC0gdGlsZVBvaW50LnkgLSAxDQoJCQl9LCB0aGlzLm9wdGlvbnMpKTsNCgkJfSwNCg0KCQlfcHJvamVjdGVkVGlsZVNpemU6IGZ1bmN0aW9uKHpvb20pIHsNCgkJCXJldHVybiAodGhpcy5vcHRpb25zLnRpbGVTaXplIC8gdGhpcy5jcnMuc2NhbGUoem9vbSkpOw0KCQl9DQoJfSk7DQoNCglMLlByb2ouR2VvSlNPTiA9IEwuR2VvSlNPTi5leHRlbmQoew0KCQlpbml0aWFsaXplOiBmdW5jdGlvbihnZW9qc29uLCBvcHRpb25zKSB7DQoJCQl0aGlzLl9jYWxsTGV2ZWwgPSAwOw0KCQkJTC5HZW9KU09OLnByb3RvdHlwZS5pbml0aWFsaXplLmNhbGwodGhpcywgbnVsbCwgb3B0aW9ucyk7DQoJCQlpZiAoZ2VvanNvbikgew0KCQkJCXRoaXMuYWRkRGF0YShnZW9qc29uKTsNCgkJCX0NCgkJfSwNCg0KCQlhZGREYXRhOiBmdW5jdGlvbihnZW9qc29uKSB7DQoJCQl2YXIgY3JzOw0KDQoJCQlpZiAoZ2VvanNvbikgew0KCQkJCWlmIChnZW9qc29uLmNycyAmJiBnZW9qc29uLmNycy50eXBlID09PSAnbmFtZScpIHsNCgkJCQkJY3JzID0gbmV3IEwuUHJvai5DUlMoZ2VvanNvbi5jcnMucHJvcGVydGllcy5uYW1lKTsNCgkJCQl9IGVsc2UgaWYgKGdlb2pzb24uY3JzICYmIGdlb2pzb24uY3JzLnR5cGUpIHsNCgkJCQkJY3JzID0gbmV3IEwuUHJvai5DUlMoZ2VvanNvbi5jcnMudHlwZSArICc6JyArIGdlb2pzb24uY3JzLnByb3BlcnRpZXMuY29kZSk7DQoJCQkJfQ0KDQoJCQkJaWYgKGNycyAhPT0gdW5kZWZpbmVkKSB7DQoJCQkJCXRoaXMub3B0aW9ucy5jb29yZHNUb0xhdExuZyA9IGZ1bmN0aW9uKGNvb3Jkcykgew0KCQkJCQkJdmFyIHBvaW50ID0gTC5wb2ludChjb29yZHNbMF0sIGNvb3Jkc1sxXSk7DQoJCQkJCQlyZXR1cm4gY3JzLnByb2plY3Rpb24udW5wcm9qZWN0KHBvaW50KTsNCgkJCQkJfTsNCgkJCQl9DQoJCQl9DQoNCgkJCS8vIEJhc2UgY2xhc3MnIGFkZERhdGEgbWlnaHQgY2FsbCB1cyByZWN1cnNpdmVseSwgYnV0DQoJCQkvLyBDUlMgc2hvdWxkbid0IGJlIGNsZWFyZWQgaW4gdGhhdCBjYXNlLCBzaW5jZSBDUlMgYXBwbGllcw0KCQkJLy8gdG8gdGhlIHdob2xlIEdlb0pTT04sIGlubHVkaW5nIHN1Yi1mZWF0dXJlcy4NCgkJCXRoaXMuX2NhbGxMZXZlbCsrOw0KCQkJdHJ5IHsNCgkJCQlMLkdlb0pTT04ucHJvdG90eXBlLmFkZERhdGEuY2FsbCh0aGlzLCBnZW9qc29uKTsNCgkJCX0gZmluYWxseSB7DQoJCQkJdGhpcy5fY2FsbExldmVsLS07DQoJCQkJaWYgKHRoaXMuX2NhbGxMZXZlbCA9PT0gMCkgew0KCQkJCQlkZWxldGUgdGhpcy5vcHRpb25zLmNvb3Jkc1RvTGF0TG5nOw0KCQkJCX0NCgkJCX0NCgkJfQ0KCX0pOw0KDQoJTC5Qcm9qLmdlb0pzb24gPSBmdW5jdGlvbihnZW9qc29uLCBvcHRpb25zKSB7DQoJCXJldHVybiBuZXcgTC5Qcm9qLkdlb0pTT04oZ2VvanNvbiwgb3B0aW9ucyk7DQoJfTsNCg0KCUwuUHJvai5JbWFnZU92ZXJsYXkgPSBMLkltYWdlT3ZlcmxheS5leHRlbmQoew0KCQlpbml0aWFsaXplOiBmdW5jdGlvbih1cmwsIGJvdW5kcywgb3B0aW9ucykgew0KCQkJTC5JbWFnZU92ZXJsYXkucHJvdG90eXBlLmluaXRpYWxpemUuY2FsbCh0aGlzLCB1cmwsIG51bGwsIG9wdGlvbnMpOw0KCQkJdGhpcy5fcHJvakJvdW5kcyA9IGJvdW5kczsNCgkJfSwNCg0KCQkvKiBEYW5nZXIgYWhlYWQ6IG92ZXJyaWRpbmcgaW50ZXJuYWwgbWV0aG9kcyBpbiBMZWFmbGV0Lg0KCQkgICBJJ3ZlIGRlY2lkZWQgdG8gZG8gdGhpcyByYXRoZXIgdGhhbiBtYWtpbmcgYSBjb3B5IG9mIEwuSW1hZ2VPdmVybGF5DQoJCSAgIGFuZCBtYWtpbmcgdmVyeSB0aW55IG1vZGlmaWNhdGlvbnMgdG8gaXQuIEZ1dHVyZSB3aWxsIHRlbGwgaWYgdGhpcw0KCQkgICB3YXMgd2lzZSBvciBub3QuICovDQoJCV9hbmltYXRlWm9vbTogZnVuY3Rpb24gKGUpIHsNCgkJCXZhciBub3J0aHdlc3QgPSBMLnBvaW50KHRoaXMuX3Byb2pCb3VuZHMubWluLngsIHRoaXMuX3Byb2pCb3VuZHMubWF4LnkpLA0KCQkJCXNvdXRoZWFzdCA9ICBMLnBvaW50KHRoaXMuX3Byb2pCb3VuZHMubWF4LngsIHRoaXMuX3Byb2pCb3VuZHMubWluLnkpLA0KCQkJCXRvcExlZnQgPSB0aGlzLl9wcm9qZWN0ZWRUb05ld0xheWVyUG9pbnQobm9ydGh3ZXN0LCBlLnpvb20sIGUuY2VudGVyKSwNCgkJCSAgICBzaXplID0gdGhpcy5fcHJvamVjdGVkVG9OZXdMYXllclBvaW50KHNvdXRoZWFzdCwgZS56b29tLCBlLmNlbnRlcikuc3VidHJhY3QodG9wTGVmdCksDQoJCQkgICAgb3JpZ2luID0gdG9wTGVmdC5hZGQoc2l6ZS5fbXVsdGlwbHlCeSgoMSAtIDEgLyBlLnNjYWxlKSAvIDIpKTsNCg0KCQkJdGhpcy5faW1hZ2Uuc3R5bGVbTC5Eb21VdGlsLlRSQU5TRk9STV0gPQ0KCQkgICAgICAgIEwuRG9tVXRpbC5nZXRUcmFuc2xhdGVTdHJpbmcob3JpZ2luKSArICcgc2NhbGUoJyArIHRoaXMuX21hcC5nZXRab29tU2NhbGUoZS56b29tKSArICcpICc7DQoJCX0sDQoNCgkJX3Jlc2V0OiBmdW5jdGlvbigpIHsNCgkJCXZhciB6b29tID0gdGhpcy5fbWFwLmdldFpvb20oKSwNCgkJCQlwaXhlbE9yaWdpbiA9IHRoaXMuX21hcC5nZXRQaXhlbE9yaWdpbigpLA0KCQkJCWJvdW5kcyA9IEwuYm91bmRzKHRoaXMuX3RyYW5zZm9ybSh0aGlzLl9wcm9qQm91bmRzLm1pbiwgem9vbSkuX3N1YnRyYWN0KHBpeGVsT3JpZ2luKSwNCgkJCQkJdGhpcy5fdHJhbnNmb3JtKHRoaXMuX3Byb2pCb3VuZHMubWF4LCB6b29tKS5fc3VidHJhY3QocGl4ZWxPcmlnaW4pKSwNCgkJCQlzaXplID0gYm91bmRzLmdldFNpemUoKSwNCgkJCQlpbWFnZSA9IHRoaXMuX2ltYWdlOw0KDQoJCQlMLkRvbVV0aWwuc2V0UG9zaXRpb24oaW1hZ2UsIGJvdW5kcy5taW4pOw0KCQkJaW1hZ2Uuc3R5bGUud2lkdGggID0gc2l6ZS54ICsgJ3B4JzsNCgkJCWltYWdlLnN0eWxlLmhlaWdodCA9IHNpemUueSArICdweCc7DQoJCX0sDQoNCgkJX3Byb2plY3RlZFRvTmV3TGF5ZXJQb2ludDogZnVuY3Rpb24gKHBvaW50LCBuZXdab29tLCBuZXdDZW50ZXIpIHsNCgkJCXZhciB0b3BMZWZ0ID0gdGhpcy5fbWFwLl9nZXROZXdUb3BMZWZ0UG9pbnQobmV3Q2VudGVyLCBuZXdab29tKS5hZGQodGhpcy5fbWFwLl9nZXRNYXBQYW5lUG9zKCkpOw0KCQkJcmV0dXJuIHRoaXMuX3RyYW5zZm9ybShwb2ludCwgbmV3Wm9vbSkuX3N1YnRyYWN0KHRvcExlZnQpOw0KCQl9LA0KDQoJCV90cmFuc2Zvcm06IGZ1bmN0aW9uKHAsIHpvb20pIHsNCgkJCXZhciBjcnMgPSB0aGlzLl9tYXAub3B0aW9ucy5jcnMsDQoJCQkJdHJhbnNmb3JtYXRpb24gPSBjcnMudHJhbnNmb3JtYXRpb24sDQoJCQkJc2NhbGUgPSBjcnMuc2NhbGUoem9vbSk7DQoJCQlyZXR1cm4gdHJhbnNmb3JtYXRpb24udHJhbnNmb3JtKHAsIHNjYWxlKTsNCgkJfQ0KCX0pOw0KDQoJTC5Qcm9qLmltYWdlT3ZlcmxheSA9IGZ1bmN0aW9uKHVybCwgYm91bmRzLCBvcHRpb25zKSB7DQoJCXJldHVybiBuZXcgTC5Qcm9qLkltYWdlT3ZlcmxheSh1cmwsIGJvdW5kcywgb3B0aW9ucyk7DQoJfTsNCg0KCWlmICh0eXBlb2YgTC5DUlMgIT09ICd1bmRlZmluZWQnKSB7DQoJCS8vIFRoaXMgaXMgbGVmdCBoZXJlIGZvciBiYWNrd2FyZHMgY29tcGF0aWJpbGl0eQ0KCQlMLkNSUy5wcm9qNGpzID0gKGZ1bmN0aW9uICgpIHsNCgkJCXJldHVybiBmdW5jdGlvbiAoY29kZSwgZGVmLCB0cmFuc2Zvcm1hdGlvbiwgb3B0aW9ucykgew0KCQkJCW9wdGlvbnMgPSBvcHRpb25zIHx8IHt9Ow0KCQkJCWlmICh0cmFuc2Zvcm1hdGlvbikgew0KCQkJCQlvcHRpb25zLnRyYW5zZm9ybWF0aW9uID0gdHJhbnNmb3JtYXRpb247DQoJCQkJfQ0KDQoJCQkJcmV0dXJuIG5ldyBMLlByb2ouQ1JTKGNvZGUsIGRlZiwgb3B0aW9ucyk7DQoJCQl9Ow0KCQl9KCkpOw0KCX0NCg0KCXJldHVybiBMLlByb2o7DQp9KSk7DQo="></script> | |
| <script src="data:application/x-javascript;base64,KGZ1bmN0aW9uIGUodCxuLHIpe2Z1bmN0aW9uIHMobyx1KXtpZighbltvXSl7aWYoIXRbb10pe3ZhciBhPXR5cGVvZiByZXF1aXJlPT0iZnVuY3Rpb24iJiZyZXF1aXJlO2lmKCF1JiZhKXJldHVybiBhKG8sITApO2lmKGkpcmV0dXJuIGkobywhMCk7dmFyIGY9bmV3IEVycm9yKCJDYW5ub3QgZmluZCBtb2R1bGUgJyIrbysiJyIpO3Rocm93IGYuY29kZT0iTU9EVUxFX05PVF9GT1VORCIsZn12YXIgbD1uW29dPXtleHBvcnRzOnt9fTt0W29dWzBdLmNhbGwobC5leHBvcnRzLGZ1bmN0aW9uKGUpe3ZhciBuPXRbb11bMV1bZV07cmV0dXJuIHMobj9uOmUpfSxsLGwuZXhwb3J0cyxlLHQsbixyKX1yZXR1cm4gbltvXS5leHBvcnRzfXZhciBpPXR5cGVvZiByZXF1aXJlPT0iZnVuY3Rpb24iJiZyZXF1aXJlO2Zvcih2YXIgbz0wO288ci5sZW5ndGg7bysrKXMocltvXSk7cmV0dXJuIHN9KSh7MTpbZnVuY3Rpb24ocmVxdWlyZSxtb2R1bGUsZXhwb3J0cyl7CiJ1c2Ugc3RyaWN0IjsKCk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCAiX19lc01vZHVsZSIsIHsKICB2YWx1ZTogdHJ1ZQp9KTsKCnZhciBfY3JlYXRlQ2xhc3MgPSBmdW5jdGlvbiAoKSB7IGZ1bmN0aW9uIGRlZmluZVByb3BlcnRpZXModGFyZ2V0LCBwcm9wcykgeyBmb3IgKHZhciBpID0gMDsgaSA8IHByb3BzLmxlbmd0aDsgaSsrKSB7IHZhciBkZXNjcmlwdG9yID0gcHJvcHNbaV07IGRlc2NyaXB0b3IuZW51bWVyYWJsZSA9IGRlc2NyaXB0b3IuZW51bWVyYWJsZSB8fCBmYWxzZTsgZGVzY3JpcHRvci5jb25maWd1cmFibGUgPSB0cnVlOyBpZiAoInZhbHVlIiBpbiBkZXNjcmlwdG9yKSBkZXNjcmlwdG9yLndyaXRhYmxlID0gdHJ1ZTsgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRhcmdldCwgZGVzY3JpcHRvci5rZXksIGRlc2NyaXB0b3IpOyB9IH0gcmV0dXJuIGZ1bmN0aW9uIChDb25zdHJ1Y3RvciwgcHJvdG9Qcm9wcywgc3RhdGljUHJvcHMpIHsgaWYgKHByb3RvUHJvcHMpIGRlZmluZVByb3BlcnRpZXMoQ29uc3RydWN0b3IucHJvdG90eXBlLCBwcm90b1Byb3BzKTsgaWYgKHN0YXRpY1Byb3BzKSBkZWZpbmVQcm9wZXJ0aWVzKENvbnN0cnVjdG9yLCBzdGF0aWNQcm9wcyk7IHJldHVybiBDb25zdHJ1Y3RvcjsgfTsgfSgpOwoKdmFyIF91dGlsID0gcmVxdWlyZSgiLi91dGlsIik7CgpmdW5jdGlvbiBfY2xhc3NDYWxsQ2hlY2soaW5zdGFuY2UsIENvbnN0cnVjdG9yKSB7IGlmICghKGluc3RhbmNlIGluc3RhbmNlb2YgQ29uc3RydWN0b3IpKSB7IHRocm93IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCBjYWxsIGEgY2xhc3MgYXMgYSBmdW5jdGlvbiIpOyB9IH0KCnZhciBDbHVzdGVyTGF5ZXJTdG9yZSA9IGZ1bmN0aW9uICgpIHsKICBmdW5jdGlvbiBDbHVzdGVyTGF5ZXJTdG9yZShncm91cCkgewogICAgX2NsYXNzQ2FsbENoZWNrKHRoaXMsIENsdXN0ZXJMYXllclN0b3JlKTsKCiAgICB0aGlzLl9sYXllcnMgPSB7fTsKICAgIHRoaXMuX2dyb3VwID0gZ3JvdXA7CiAgfQoKICBfY3JlYXRlQ2xhc3MoQ2x1c3RlckxheWVyU3RvcmUsIFt7CiAgICBrZXk6ICJhZGQiLAogICAgdmFsdWU6IGZ1bmN0aW9uIGFkZChsYXllciwgaWQpIHsKICAgICAgaWYgKHR5cGVvZiBpZCAhPT0gInVuZGVmaW5lZCIgJiYgaWQgIT09IG51bGwpIHsKICAgICAgICBpZiAodGhpcy5fbGF5ZXJzW2lkXSkgewogICAgICAgICAgdGhpcy5fZ3JvdXAucmVtb3ZlTGF5ZXIodGhpcy5fbGF5ZXJzW2lkXSk7CiAgICAgICAgfQogICAgICAgIHRoaXMuX2xheWVyc1tpZF0gPSBsYXllcjsKICAgICAgfQogICAgICB0aGlzLl9ncm91cC5hZGRMYXllcihsYXllcik7CiAgICB9CiAgfSwgewogICAga2V5OiAicmVtb3ZlIiwKICAgIHZhbHVlOiBmdW5jdGlvbiByZW1vdmUoaWQpIHsKICAgICAgaWYgKHR5cGVvZiBpZCA9PT0gInVuZGVmaW5lZCIgfHwgaWQgPT09IG51bGwpIHsKICAgICAgICByZXR1cm47CiAgICAgIH0KCiAgICAgIGlkID0gKDAsIF91dGlsLmFzQXJyYXkpKGlkKTsKICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBpZC5sZW5ndGg7IGkrKykgewogICAgICAgIGlmICh0aGlzLl9sYXllcnNbaWRbaV1dKSB7CiAgICAgICAgICB0aGlzLl9ncm91cC5yZW1vdmVMYXllcih0aGlzLl9sYXllcnNbaWRbaV1dKTsKICAgICAgICAgIGRlbGV0ZSB0aGlzLl9sYXllcnNbaWRbaV1dOwogICAgICAgIH0KICAgICAgfQogICAgfQogIH0sIHsKICAgIGtleTogImNsZWFyIiwKICAgIHZhbHVlOiBmdW5jdGlvbiBjbGVhcigpIHsKICAgICAgdGhpcy5fbGF5ZXJzID0ge307CiAgICAgIHRoaXMuX2dyb3VwLmNsZWFyTGF5ZXJzKCk7CiAgICB9CiAgfV0pOwoKICByZXR1cm4gQ2x1c3RlckxheWVyU3RvcmU7Cn0oKTsKCmV4cG9ydHMuZGVmYXVsdCA9IENsdXN0ZXJMYXllclN0b3JlOwoKCn0seyIuL3V0aWwiOjE1fV0sMjpbZnVuY3Rpb24ocmVxdWlyZSxtb2R1bGUsZXhwb3J0cyl7CiJ1c2Ugc3RyaWN0IjsKCk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCAiX19lc01vZHVsZSIsIHsKICB2YWx1ZTogdHJ1ZQp9KTsKCnZhciBfY3JlYXRlQ2xhc3MgPSBmdW5jdGlvbiAoKSB7IGZ1bmN0aW9uIGRlZmluZVByb3BlcnRpZXModGFyZ2V0LCBwcm9wcykgeyBmb3IgKHZhciBpID0gMDsgaSA8IHByb3BzLmxlbmd0aDsgaSsrKSB7IHZhciBkZXNjcmlwdG9yID0gcHJvcHNbaV07IGRlc2NyaXB0b3IuZW51bWVyYWJsZSA9IGRlc2NyaXB0b3IuZW51bWVyYWJsZSB8fCBmYWxzZTsgZGVzY3JpcHRvci5jb25maWd1cmFibGUgPSB0cnVlOyBpZiAoInZhbHVlIiBpbiBkZXNjcmlwdG9yKSBkZXNjcmlwdG9yLndyaXRhYmxlID0gdHJ1ZTsgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRhcmdldCwgZGVzY3JpcHRvci5rZXksIGRlc2NyaXB0b3IpOyB9IH0gcmV0dXJuIGZ1bmN0aW9uIChDb25zdHJ1Y3RvciwgcHJvdG9Qcm9wcywgc3RhdGljUHJvcHMpIHsgaWYgKHByb3RvUHJvcHMpIGRlZmluZVByb3BlcnRpZXMoQ29uc3RydWN0b3IucHJvdG90eXBlLCBwcm90b1Byb3BzKTsgaWYgKHN0YXRpY1Byb3BzKSBkZWZpbmVQcm9wZXJ0aWVzKENvbnN0cnVjdG9yLCBzdGF0aWNQcm9wcyk7IHJldHVybiBDb25zdHJ1Y3RvcjsgfTsgfSgpOwoKZnVuY3Rpb24gX2NsYXNzQ2FsbENoZWNrKGluc3RhbmNlLCBDb25zdHJ1Y3RvcikgeyBpZiAoIShpbnN0YW5jZSBpbnN0YW5jZW9mIENvbnN0cnVjdG9yKSkgeyB0aHJvdyBuZXcgVHlwZUVycm9yKCJDYW5ub3QgY2FsbCBhIGNsYXNzIGFzIGEgZnVuY3Rpb24iKTsgfSB9Cgp2YXIgQ29udHJvbFN0b3JlID0gZnVuY3Rpb24gKCkgewogIGZ1bmN0aW9uIENvbnRyb2xTdG9yZShtYXApIHsKICAgIF9jbGFzc0NhbGxDaGVjayh0aGlzLCBDb250cm9sU3RvcmUpOwoKICAgIHRoaXMuX2NvbnRyb2xzTm9JZCA9IFtdOwogICAgdGhpcy5fY29udHJvbHNCeUlkID0ge307CiAgICB0aGlzLl9tYXAgPSBtYXA7CiAgfQoKICBfY3JlYXRlQ2xhc3MoQ29udHJvbFN0b3JlLCBbewogICAga2V5OiAiYWRkIiwKICAgIHZhbHVlOiBmdW5jdGlvbiBhZGQoY29udHJvbCwgaWQsIGh0bWwpIHsKICAgICAgaWYgKHR5cGVvZiBpZCAhPT0gInVuZGVmaW5lZCIgJiYgaWQgIT09IG51bGwpIHsKICAgICAgICBpZiAodGhpcy5fY29udHJvbHNCeUlkW2lkXSkgewogICAgICAgICAgdGhpcy5fbWFwLnJlbW92ZUNvbnRyb2wodGhpcy5fY29udHJvbHNCeUlkW2lkXSk7CiAgICAgICAgfQogICAgICAgIHRoaXMuX2NvbnRyb2xzQnlJZFtpZF0gPSBjb250cm9sOwogICAgICB9IGVsc2UgewogICAgICAgIHRoaXMuX2NvbnRyb2xzTm9JZC5wdXNoKGNvbnRyb2wpOwogICAgICB9CiAgICAgIHRoaXMuX21hcC5hZGRDb250cm9sKGNvbnRyb2wpOwogICAgfQogIH0sIHsKICAgIGtleTogImdldCIsCiAgICB2YWx1ZTogZnVuY3Rpb24gZ2V0KGlkKSB7CiAgICAgIHZhciBjb250cm9sID0gbnVsbDsKICAgICAgaWYgKHRoaXMuX2NvbnRyb2xzQnlJZFtpZF0pIHsKICAgICAgICBjb250cm9sID0gdGhpcy5fY29udHJvbHNCeUlkW2lkXTsKICAgICAgfQogICAgICByZXR1cm4gY29udHJvbDsKICAgIH0KICB9LCB7CiAgICBrZXk6ICJyZW1vdmUiLAogICAgdmFsdWU6IGZ1bmN0aW9uIHJlbW92ZShpZCkgewogICAgICBpZiAodGhpcy5fY29udHJvbHNCeUlkW2lkXSkgewogICAgICAgIHZhciBjb250cm9sID0gdGhpcy5fY29udHJvbHNCeUlkW2lkXTsKICAgICAgICB0aGlzLl9tYXAucmVtb3ZlQ29udHJvbChjb250cm9sKTsKICAgICAgICBkZWxldGUgdGhpcy5fY29udHJvbHNCeUlkW2lkXTsKICAgICAgfQogICAgfQogIH0sIHsKICAgIGtleTogImNsZWFyIiwKICAgIHZhbHVlOiBmdW5jdGlvbiBjbGVhcigpIHsKICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLl9jb250cm9sc05vSWQubGVuZ3RoOyBpKyspIHsKICAgICAgICB2YXIgY29udHJvbCA9IHRoaXMuX2NvbnRyb2xzTm9JZFtpXTsKICAgICAgICB0aGlzLl9tYXAucmVtb3ZlQ29udHJvbChjb250cm9sKTsKICAgICAgfQogICAgICB0aGlzLl9jb250cm9sc05vSWQgPSBbXTsKCiAgICAgIGZvciAodmFyIGtleSBpbiB0aGlzLl9jb250cm9sc0J5SWQpIHsKICAgICAgICB2YXIgX2NvbnRyb2wgPSB0aGlzLl9jb250cm9sc0J5SWRba2V5XTsKICAgICAgICB0aGlzLl9tYXAucmVtb3ZlQ29udHJvbChfY29udHJvbCk7CiAgICAgIH0KICAgICAgdGhpcy5fY29udHJvbHNCeUlkID0ge307CiAgICB9CiAgfV0pOwoKICByZXR1cm4gQ29udHJvbFN0b3JlOwp9KCk7CgpleHBvcnRzLmRlZmF1bHQgPSBDb250cm9sU3RvcmU7CgoKfSx7fV0sMzpbZnVuY3Rpb24ocmVxdWlyZSxtb2R1bGUsZXhwb3J0cyl7CiJ1c2Ugc3RyaWN0IjsKCk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCAiX19lc01vZHVsZSIsIHsKICB2YWx1ZTogdHJ1ZQp9KTsKZXhwb3J0cy5nZXRDUlMgPSBnZXRDUlM7Cgp2YXIgX2xlYWZsZXQgPSByZXF1aXJlKCIuL2dsb2JhbC9sZWFmbGV0Iik7Cgp2YXIgX2xlYWZsZXQyID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChfbGVhZmxldCk7Cgp2YXIgX3Byb2o0bGVhZmxldCA9IHJlcXVpcmUoIi4vZ2xvYmFsL3Byb2o0bGVhZmxldCIpOwoKdmFyIF9wcm9qNGxlYWZsZXQyID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChfcHJvajRsZWFmbGV0KTsKCmZ1bmN0aW9uIF9pbnRlcm9wUmVxdWlyZURlZmF1bHQob2JqKSB7IHJldHVybiBvYmogJiYgb2JqLl9fZXNNb2R1bGUgPyBvYmogOiB7IGRlZmF1bHQ6IG9iaiB9OyB9CgovLyBIZWxwZXIgZnVuY3Rpb24gdG8gaW5zdGFuY2lhdGUgYSBJQ1JTIGluc3RhbmNlLgpmdW5jdGlvbiBnZXRDUlMoY3JzT3B0aW9ucykgewogIHZhciBjcnMgPSBfbGVhZmxldDIuZGVmYXVsdC5DUlMuRVBTRzM4NTc7IC8vIERlZmF1bHQgU3BoZXJpY2FsIE1lcmNhdG9yCgogIHN3aXRjaCAoY3JzT3B0aW9ucy5jcnNDbGFzcykgewogICAgY2FzZSAiTC5DUlMuRVBTRzM4NTciOgogICAgICBjcnMgPSBfbGVhZmxldDIuZGVmYXVsdC5DUlMuRVBTRzM4NTc7CiAgICAgIGJyZWFrOwogICAgY2FzZSAiTC5DUlMuRVBTRzQzMjYiOgogICAgICBjcnMgPSBfbGVhZmxldDIuZGVmYXVsdC5DUlMuRVBTRzQzMjY7CiAgICAgIGJyZWFrOwogICAgY2FzZSAiTC5DUlMuRVBTRzMzOTUiOgogICAgICBjcnMgPSBfbGVhZmxldDIuZGVmYXVsdC5DUlMuRVBTRzMzOTU7CiAgICAgIGJyZWFrOwogICAgY2FzZSAiTC5DUlMuU2ltcGxlIjoKICAgICAgY3JzID0gX2xlYWZsZXQyLmRlZmF1bHQuQ1JTLlNpbXBsZTsKICAgICAgYnJlYWs7CiAgICBjYXNlICJMLlByb2ouQ1JTIjoKICAgICAgaWYgKGNyc09wdGlvbnMub3B0aW9ucyAmJiBjcnNPcHRpb25zLm9wdGlvbnMuYm91bmRzKSB7CiAgICAgICAgY3JzT3B0aW9ucy5vcHRpb25zLmJvdW5kcyA9IF9sZWFmbGV0Mi5kZWZhdWx0LmJvdW5kcyhjcnNPcHRpb25zLm9wdGlvbnMuYm91bmRzKTsKICAgICAgfQogICAgICBpZiAoY3JzT3B0aW9ucy5vcHRpb25zICYmIGNyc09wdGlvbnMub3B0aW9ucy50cmFuc2Zvcm1hdGlvbikgewogICAgICAgIGNyc09wdGlvbnMub3B0aW9ucy50cmFuc2Zvcm1hdGlvbiA9IG5ldyBfbGVhZmxldDIuZGVmYXVsdC5UcmFuc2Zvcm1hdGlvbihjcnNPcHRpb25zLm9wdGlvbnMudHJhbnNmb3JtYXRpb25bMF0sIGNyc09wdGlvbnMub3B0aW9ucy50cmFuc2Zvcm1hdGlvblsxXSwgY3JzT3B0aW9ucy5vcHRpb25zLnRyYW5zZm9ybWF0aW9uWzJdLCBjcnNPcHRpb25zLm9wdGlvbnMudHJhbnNmb3JtYXRpb25bM10pOwogICAgICB9CiAgICAgIGNycyA9IG5ldyBfcHJvajRsZWFmbGV0Mi5kZWZhdWx0LkNSUyhjcnNPcHRpb25zLmNvZGUsIGNyc09wdGlvbnMucHJvajRkZWYsIGNyc09wdGlvbnMub3B0aW9ucyk7CiAgICAgIGJyZWFrOwogICAgY2FzZSAiTC5Qcm9qLkNSUy5UTVMiOgogICAgICBpZiAoY3JzT3B0aW9ucy5vcHRpb25zICYmIGNyc09wdGlvbnMub3B0aW9ucy5ib3VuZHMpIHsKICAgICAgICBjcnNPcHRpb25zLm9wdGlvbnMuYm91bmRzID0gX2xlYWZsZXQyLmRlZmF1bHQuYm91bmRzKGNyc09wdGlvbnMub3B0aW9ucy5ib3VuZHMpOwogICAgICB9CiAgICAgIGlmIChjcnNPcHRpb25zLm9wdGlvbnMgJiYgY3JzT3B0aW9ucy5vcHRpb25zLnRyYW5zZm9ybWF0aW9uKSB7CiAgICAgICAgY3JzT3B0aW9ucy5vcHRpb25zLnRyYW5zZm9ybWF0aW9uID0gX2xlYWZsZXQyLmRlZmF1bHQuVHJhbnNmb3JtYXRpb24oY3JzT3B0aW9ucy5vcHRpb25zLnRyYW5zZm9ybWF0aW9uWzBdLCBjcnNPcHRpb25zLm9wdGlvbnMudHJhbnNmb3JtYXRpb25bMV0sIGNyc09wdGlvbnMub3B0aW9ucy50cmFuc2Zvcm1hdGlvblsyXSwgY3JzT3B0aW9ucy5vcHRpb25zLnRyYW5zZm9ybWF0aW9uWzNdKTsKICAgICAgfQogICAgICBjcnMgPSBuZXcgX3Byb2o0bGVhZmxldDIuZGVmYXVsdC5DUlMuVE1TKGNyc09wdGlvbnMuY29kZSwgY3JzT3B0aW9ucy5wcm9qNGRlZiwgY3JzT3B0aW9ucy5wcm9qZWN0ZWRCb3VuZHMsIGNyc09wdGlvbnMub3B0aW9ucyk7CiAgICAgIGJyZWFrOwogIH0KICByZXR1cm4gY3JzOwp9CgoKfSx7Ii4vZ2xvYmFsL2xlYWZsZXQiOjgsIi4vZ2xvYmFsL3Byb2o0bGVhZmxldCI6OX1dLDQ6W2Z1bmN0aW9uKHJlcXVpcmUsbW9kdWxlLGV4cG9ydHMpewoidXNlIHN0cmljdCI7CgpPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgIl9fZXNNb2R1bGUiLCB7CiAgdmFsdWU6IHRydWUKfSk7Cgp2YXIgX3R5cGVvZiA9IHR5cGVvZiBTeW1ib2wgPT09ICJmdW5jdGlvbiIgJiYgdHlwZW9mIFN5bWJvbC5pdGVyYXRvciA9PT0gInN5bWJvbCIgPyBmdW5jdGlvbiAob2JqKSB7IHJldHVybiB0eXBlb2Ygb2JqOyB9IDogZnVuY3Rpb24gKG9iaikgeyByZXR1cm4gb2JqICYmIHR5cGVvZiBTeW1ib2wgPT09ICJmdW5jdGlvbiIgJiYgb2JqLmNvbnN0cnVjdG9yID09PSBTeW1ib2wgPyAic3ltYm9sIiA6IHR5cGVvZiBvYmo7IH07Cgp2YXIgX2NyZWF0ZUNsYXNzID0gZnVuY3Rpb24gKCkgeyBmdW5jdGlvbiBkZWZpbmVQcm9wZXJ0aWVzKHRhcmdldCwgcHJvcHMpIHsgZm9yICh2YXIgaSA9IDA7IGkgPCBwcm9wcy5sZW5ndGg7IGkrKykgeyB2YXIgZGVzY3JpcHRvciA9IHByb3BzW2ldOyBkZXNjcmlwdG9yLmVudW1lcmFibGUgPSBkZXNjcmlwdG9yLmVudW1lcmFibGUgfHwgZmFsc2U7IGRlc2NyaXB0b3IuY29uZmlndXJhYmxlID0gdHJ1ZTsgaWYgKCJ2YWx1ZSIgaW4gZGVzY3JpcHRvcikgZGVzY3JpcHRvci53cml0YWJsZSA9IHRydWU7IE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIGRlc2NyaXB0b3Iua2V5LCBkZXNjcmlwdG9yKTsgfSB9IHJldHVybiBmdW5jdGlvbiAoQ29uc3RydWN0b3IsIHByb3RvUHJvcHMsIHN0YXRpY1Byb3BzKSB7IGlmIChwcm90b1Byb3BzKSBkZWZpbmVQcm9wZXJ0aWVzKENvbnN0cnVjdG9yLnByb3RvdHlwZSwgcHJvdG9Qcm9wcyk7IGlmIChzdGF0aWNQcm9wcykgZGVmaW5lUHJvcGVydGllcyhDb25zdHJ1Y3Rvciwgc3RhdGljUHJvcHMpOyByZXR1cm4gQ29uc3RydWN0b3I7IH07IH0oKTsKCnZhciBfdXRpbCA9IHJlcXVpcmUoIi4vdXRpbCIpOwoKZnVuY3Rpb24gX2NsYXNzQ2FsbENoZWNrKGluc3RhbmNlLCBDb25zdHJ1Y3RvcikgeyBpZiAoIShpbnN0YW5jZSBpbnN0YW5jZW9mIENvbnN0cnVjdG9yKSkgeyB0aHJvdyBuZXcgVHlwZUVycm9yKCJDYW5ub3QgY2FsbCBhIGNsYXNzIGFzIGEgZnVuY3Rpb24iKTsgfSB9Cgp2YXIgRGF0YUZyYW1lID0gZnVuY3Rpb24gKCkgewogIGZ1bmN0aW9uIERhdGFGcmFtZSgpIHsKICAgIF9jbGFzc0NhbGxDaGVjayh0aGlzLCBEYXRhRnJhbWUpOwoKICAgIHRoaXMuY29sdW1ucyA9IFtdOwogICAgdGhpcy5jb2xuYW1lcyA9IFtdOwogICAgdGhpcy5jb2xzdHJpY3QgPSBbXTsKCiAgICB0aGlzLmVmZmVjdGl2ZUxlbmd0aCA9IDA7CiAgICB0aGlzLmNvbGluZGljZXMgPSB7fTsKICB9CgogIF9jcmVhdGVDbGFzcyhEYXRhRnJhbWUsIFt7CiAgICBrZXk6ICJfdXBkYXRlQ2FjaGVkUHJvcGVydGllcyIsCiAgICB2YWx1ZTogZnVuY3Rpb24gX3VwZGF0ZUNhY2hlZFByb3BlcnRpZXMoKSB7CiAgICAgIHZhciBfdGhpcyA9IHRoaXM7CgogICAgICB0aGlzLmVmZmVjdGl2ZUxlbmd0aCA9IDA7CiAgICAgIHRoaXMuY29saW5kaWNlcyA9IHt9OwoKICAgICAgdGhpcy5jb2x1bW5zLmZvckVhY2goZnVuY3Rpb24gKGNvbHVtbiwgaSkgewogICAgICAgIF90aGlzLmVmZmVjdGl2ZUxlbmd0aCA9IE1hdGgubWF4KF90aGlzLmVmZmVjdGl2ZUxlbmd0aCwgY29sdW1uLmxlbmd0aCk7CiAgICAgICAgX3RoaXMuY29saW5kaWNlc1tfdGhpcy5jb2xuYW1lc1tpXV0gPSBpOwogICAgICB9KTsKICAgIH0KICB9LCB7CiAgICBrZXk6ICJfY29sSW5kZXgiLAogICAgdmFsdWU6IGZ1bmN0aW9uIF9jb2xJbmRleChjb2xuYW1lKSB7CiAgICAgIHZhciBpbmRleCA9IHRoaXMuY29saW5kaWNlc1tjb2xuYW1lXTsKICAgICAgaWYgKHR5cGVvZiBpbmRleCA9PT0gInVuZGVmaW5lZCIpIHJldHVybiAtMTsKICAgICAgcmV0dXJuIGluZGV4OwogICAgfQogIH0sIHsKICAgIGtleTogImNvbCIsCiAgICB2YWx1ZTogZnVuY3Rpb24gY29sKG5hbWUsIHZhbHVlcywgc3RyaWN0KSB7CiAgICAgIGlmICh0eXBlb2YgbmFtZSAhPT0gInN0cmluZyIpIHRocm93IG5ldyBFcnJvcigiSW52YWxpZCBjb2x1bW4gbmFtZSBcIiIgKyBuYW1lICsgIlwiIik7CgogICAgICB2YXIgaW5kZXggPSB0aGlzLl9jb2xJbmRleChuYW1lKTsKCiAgICAgIGlmIChhcmd1bWVudHMubGVuZ3RoID09PSAxKSB7CiAgICAgICAgaWYgKGluZGV4IDwgMCkgcmV0dXJuIG51bGw7ZWxzZSByZXR1cm4gKDAsIF91dGlsLnJlY3ljbGUpKHRoaXMuY29sdW1uc1tpbmRleF0sIHRoaXMuZWZmZWN0aXZlTGVuZ3RoKTsKICAgICAgfQoKICAgICAgaWYgKGluZGV4IDwgMCkgewogICAgICAgIGluZGV4ID0gdGhpcy5jb2xuYW1lcy5sZW5ndGg7CiAgICAgICAgdGhpcy5jb2xuYW1lcy5wdXNoKG5hbWUpOwogICAgICB9CiAgICAgIHRoaXMuY29sdW1uc1tpbmRleF0gPSAoMCwgX3V0aWwuYXNBcnJheSkodmFsdWVzKTsKICAgICAgdGhpcy5jb2xzdHJpY3RbaW5kZXhdID0gISFzdHJpY3Q7CgogICAgICAvLyBUT0RPOiBWYWxpZGF0ZSBzdHJpY3RuZXNzIChlbnN1cmUgbGVuZ3RocyBtYXRjaCB1cCB3aXRoIG90aGVyIHN0cmljdHMpCgogICAgICB0aGlzLl91cGRhdGVDYWNoZWRQcm9wZXJ0aWVzKCk7CgogICAgICByZXR1cm4gdGhpczsKICAgIH0KICB9LCB7CiAgICBrZXk6ICJjYmluZCIsCiAgICB2YWx1ZTogZnVuY3Rpb24gY2JpbmQob2JqLCBzdHJpY3QpIHsKICAgICAgdmFyIF90aGlzMiA9IHRoaXM7CgogICAgICBPYmplY3Qua2V5cyhvYmopLmZvckVhY2goZnVuY3Rpb24gKG5hbWUpIHsKICAgICAgICB2YXIgY29sZGF0YSA9IG9ialtuYW1lXTsKICAgICAgICBfdGhpczIuY29sKG5hbWUsIGNvbGRhdGEpOwogICAgICB9KTsKICAgICAgcmV0dXJuIHRoaXM7CiAgICB9CiAgfSwgewogICAga2V5OiAiZ2V0IiwKICAgIHZhbHVlOiBmdW5jdGlvbiBnZXQocm93LCBjb2wsIG1pc3NpbmdPSykgewogICAgICB2YXIgX3RoaXMzID0gdGhpczsKCiAgICAgIGlmIChyb3cgPiB0aGlzLmVmZmVjdGl2ZUxlbmd0aCkgdGhyb3cgbmV3IEVycm9yKCJSb3cgYXJndW1lbnQgd2FzIG91dCBvZiBib3VuZHM6ICIgKyByb3cgKyAiID4gIiArIHRoaXMuZWZmZWN0aXZlTGVuZ3RoKTsKCiAgICAgIHZhciBjb2xJbmRleCA9IC0xOwogICAgICBpZiAodHlwZW9mIGNvbCA9PT0gInVuZGVmaW5lZCIpIHsKICAgICAgICB2YXIgX3JldCA9IGZ1bmN0aW9uICgpIHsKICAgICAgICAgIHZhciByb3dEYXRhID0ge307CiAgICAgICAgICBfdGhpczMuY29sbmFtZXMuZm9yRWFjaChmdW5jdGlvbiAobmFtZSwgaSkgewogICAgICAgICAgICByb3dEYXRhW25hbWVdID0gX3RoaXMzLmNvbHVtbnNbaV1bcm93ICUgX3RoaXMzLmNvbHVtbnNbaV0ubGVuZ3RoXTsKICAgICAgICAgIH0pOwogICAgICAgICAgcmV0dXJuIHsKICAgICAgICAgICAgdjogcm93RGF0YQogICAgICAgICAgfTsKICAgICAgICB9KCk7CgogICAgICAgIGlmICgodHlwZW9mIF9yZXQgPT09ICJ1bmRlZmluZWQiID8gInVuZGVmaW5lZCIgOiBfdHlwZW9mKF9yZXQpKSA9PT0gIm9iamVjdCIpIHJldHVybiBfcmV0LnY7CiAgICAgIH0gZWxzZSBpZiAodHlwZW9mIGNvbCA9PT0gInN0cmluZyIpIHsKICAgICAgICBjb2xJbmRleCA9IHRoaXMuX2NvbEluZGV4KGNvbCk7CiAgICAgIH0gZWxzZSBpZiAodHlwZW9mIGNvbCA9PT0gIm51bWJlciIpIHsKICAgICAgICBjb2xJbmRleCA9IGNvbDsKICAgICAgfQogICAgICBpZiAoY29sSW5kZXggPCAwIHx8IGNvbEluZGV4ID4gdGhpcy5jb2x1bW5zLmxlbmd0aCkgewogICAgICAgIGlmIChtaXNzaW5nT0spIHJldHVybiB2b2lkIDA7ZWxzZSB0aHJvdyBuZXcgRXJyb3IoIlVua25vd24gY29sdW1uIGluZGV4OiAiICsgY29sKTsKICAgICAgfQoKICAgICAgcmV0dXJuIHRoaXMuY29sdW1uc1tjb2xJbmRleF1bcm93ICUgdGhpcy5jb2x1bW5zW2NvbEluZGV4XS5sZW5ndGhdOwogICAgfQogIH0sIHsKICAgIGtleTogIm5yb3ciLAogICAgdmFsdWU6IGZ1bmN0aW9uIG5yb3coKSB7CiAgICAgIHJldHVybiB0aGlzLmVmZmVjdGl2ZUxlbmd0aDsKICAgIH0KICB9XSk7CgogIHJldHVybiBEYXRhRnJhbWU7Cn0oKTsKCmV4cG9ydHMuZGVmYXVsdCA9IERhdGFGcmFtZTsKCgp9LHsiLi91dGlsIjoxNX1dLDU6W2Z1bmN0aW9uKHJlcXVpcmUsbW9kdWxlLGV4cG9ydHMpewoidXNlIHN0cmljdCI7Cgp2YXIgX2xlYWZsZXQgPSByZXF1aXJlKCIuL2dsb2JhbC9sZWFmbGV0Iik7Cgp2YXIgX2xlYWZsZXQyID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChfbGVhZmxldCk7CgpmdW5jdGlvbiBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KG9iaikgeyByZXR1cm4gb2JqICYmIG9iai5fX2VzTW9kdWxlID8gb2JqIDogeyBkZWZhdWx0OiBvYmogfTsgfQoKLy8gSW4gUk1hcmtkb3duJ3Mgc2VsZi1jb250YWluZWQgbW9kZSwgd2UgZG9uJ3QgaGF2ZSBhIHdheSB0byBjYXJyeSBhcm91bmQgdGhlCi8vIGltYWdlcyB0aGF0IExlYWZsZXQgbmVlZHMgYnV0IGRvZXNuJ3QgbG9hZCBpbnRvIHRoZSBwYWdlLiBJbnN0ZWFkLCB3ZSdsbCBzZXQKLy8gZGF0YSBVUklzIGZvciB0aGUgZGVmYXVsdCBtYXJrZXIsIGFuZCBsZXQgYW55IG90aGVycyBiZSBsb2FkZWQgdmlhIENETi4KaWYgKHR5cGVvZiBfbGVhZmxldDIuZGVmYXVsdC5JY29uLkRlZmF1bHQuaW1hZ2VQYXRoID09PSAidW5kZWZpbmVkIikgewogIF9sZWFmbGV0Mi5kZWZhdWx0Lkljb24uRGVmYXVsdC5pbWFnZVBhdGggPSAiaHR0cDovL2Nkbi5sZWFmbGV0anMuY29tL2xlYWZsZXQtMC43LjMvaW1hZ2VzIjsKCiAgaWYgKF9sZWFmbGV0Mi5kZWZhdWx0LkJyb3dzZXIucmV0aW5hKSB7CiAgICBfbGVhZmxldDIuZGVmYXVsdC5JY29uLkRlZmF1bHQucHJvdG90eXBlLm9wdGlvbnMuaWNvblVybCA9ICJkYXRhOmltYWdlL3BuZztiYXNlNjQsaVZCT1J3MEtHZ29BQUFBTlNVaEVVZ0FBQURJQUFBQlNDQVlBQUFBV3k0ZnJBQUFQaUVsRVFWUjQydDFiQ1ZDVTV4a21iYWJ0WkpKT08rbDBtaGdUMHlRZTBXWFpnejI1NzBOQjhJNko2VXphVEJvT1JSRkVydVZHRGhXVVBSQVFSRkZSRURuVnhDdEVCUmIyNERCTkUzV2FhYXRwa21sdW80bStmZDl2OTk5b2xHVkJEdTNPUExqKy8vcys3L1c5My9mOS8vNi9Fd0E0L1Q5ZzNBbEZPVWVlVUdSMnVNcXpPeUprMlIyeDBxeU9BbW5ta1MzU3JDUHJaSmxIbHNxemp5cGNzNDlPWDFKZi8vUDdLaEQ4ODVBMHUxMG15Mm92UXNjdnliSTZ3RUY4aXZJN3BGbnRBVjZxa3c5UFdTQksxYkVuWlJsdG0yV1o3UjhoNEZiSTBWRzMzR1BnWFhnQ0FyYStBNEVJbjhLVDRKSC9GaWdvaUovSUl6NlRaYlZWS0xMYW41dTBRRVNxbGtja1dXM3Awc3kyYnhEQWdad08xM1REeXRvQitOUGU5K3ppbGQyREVGR3VCNy9OcHpEb2RyaUY1NW8wbzdYSVJYWG9OeE1haUNTajlWVTA5QzhFRU54eWowQzR0aHRlcmgyRVYrdmV1d09yNnM3RHkzc3NvTzkzazNsbHp4QkU2UFRna1hjTU9GN0VKOUtNdHFqUjlKRkRRbk5WOWIrUXFscXFFRUNRWjdUQmd1MW5ZZFh1SVhnVm5lU3dZdGNnUkZiMVExaUZHVUxMelJDc005MEdPclpnaHhraUt2dGhlYzBnckxwRmx4Q3U2Y0toMXc2Y0hVU2JjdFBoeDhZbEVFbHU0K05TVmZOcEJCQUN0cHlHbGJzR21CT0VsUmhNQkRvZmdrNEdvYk9qUVhDNUNSWmlVQy9WRHRuNHFMckJKWjNBMmNOZytuRTRQMzFQZ1NEQmJJbXE1VU5KZWpNUUZxaTdjQ2ljWjNpWkJUQUFRVm9UQkk0REtLQ1ZHQkRISDZuckJSbFd4V3I3c2xqVklobFRJRExWb1JrUzFlSC9TTklQZ3p5ekZSWlY5Tm5HKytMcVFjeW9HUUxRZ2ZGRUlGWXBjdWVBemM2U1NpTU90VFlnSDlDWHIrV3BUYnhSQmVLbHFuOVVrdFprUm9BQ1o1UGxPODFZZ2ZNTTRSWDlFS0F4VFNqQ2R2VGpFTFBZVzE3ZEQ4cnNkaUJmRUJjbFNZMlBPeFFJSG5sSWtucm9FQUprNlUyd3BNTElTRi9hTlFTaFdBVi90V2xTRUlLMlZxQk5zcjIwMGdSeUdtTG9reVMxOGNUZEZ0QTdBbkZOYmN4QUFDR01yUXRETEFqcUJUKzFjVkpCTnNrMitiQlExd09jWDVLMHhzMTJBOEd5elhSTmFmZ2VBWUZiM21Fa3JCSTRJL21XR1VlTlFJMWx5cDJQb085ajRhREtjSDRFYmUwRThnM3hneXlsY2M2d2diaW1OalNTb0Z0V0sxc1RxTFJoMkJNK1NPZ0lmREdMSkw4SUczWlpqVVgvVml5dkdZTEZPd2Rabi9sallJN3l6c2VlNFRqY3NWL0lSM0ZxUSt0ZEF4RW5OU2pGeVFlQkVLN3BnUlZvZEVuVklQaHNOenFFWUswWmx1RnNSbnEzWWpIMjJLSnlBNno0eVRtU3BaNXpsSDhSVHZXa3QxQ3JCODVQWVVxanp4MkJ1RzZzUHlmZWVBQThzanR3cGhoaUNGU2J3WHViMFM3SVNQaU9BWnZPNGgwNDh4U2ZCTStjRHBEaWVDWk9nZ1N6NkpIZEJ2NUZKM0NONkxQSlIxUU1nTzkyMDRoMmFBTGdkRHh6amxwNGt3OFlhSEt5QlNKSlBpZ1diNndIUWlSbWJ4a0tMMFFEWGtoZ0Q5NFl4R0tzR3NrVFFrdmZ4Vm5sSUhCY0JOZmtlZ3ppd0IzSEFuSER1R3luUlhjcC91dFhaaHJSSGlXTTVDUExqYmR3SFZEWUFoRnQzSjhyVHRvUGJwa3RTRHJFNElOWjhpdzEya1VZRXBQczRrb3plT1cwQTNFUUlvdmJZY2Z4SVRqNzk4dnd4YmZYNE9yMUg4QjQ2Uk9vN2Z3YnZLWTlicE56eTJobWlTT095TXJCRWUyUlQ1eC83dGpIeENGSzJsLzRZeUJKKzk1SFFBQm1pYkt6RUp2UnM5UmdGNEZxRTVNbGVHUzNBdW1MTis2RDRsWWpmSWVPRC9lNWVST2c3c3o3b0VnN3dIUms2WTNZaS8yTUp3VDdiQ1M3NUJ2SkJ1R3NTdnFJRDFnZ2FIeWVhQU1lUUVSZ3lhakJnM0JHOFNneERBc3ZKRnhVT2NCa2c3ZDBNbDNYamZ1aEN5dmc2T2ZpeDErQWw2cUI2ZnB1ZW90eHNja0ZoNUE5MitRYnlkSHc0dnltR0p4RUcrcldpUkwzZ29KV2NTd3Z3YlBFQ081YkRjTWlSR05tY2hTNGExSTlrUDYyRGhPTTl0UGFkNG5wRWhhVWRUUE9zUEordTdiSk44NVBwYXFKNllvVDZ4S2NSSWwxcFFqd3hJdWt4WGh5SVk1N04xU3doN0R5QVNicm0zOE1TSGRSVVN0YysvNEdqT1VUVjMyYWNiaGxOak5PNnBXUjdGUFRrNnhYM2xHbUsweXMwenJobjBaaHdoN3dLM2liblZ5ZzZ3ZTNMUWE3V0ZReHlHU3BpcVJiZS9vOGpQWFRlK0VLNHhEakVDSE94ZFlSWWM4KytVaHlmZ1hIbWE1dy9aNW1KK0g2M1QzQ2hOM1k2Ty9ndU1jeGo4TkdpY0xEZ1l5UTNDS2Nuc1ViTUJ1b2E3ajQ4WmdEK2VycWRjenFic1lUcHVsajNMU3UyUE9CZkNRNThwbjBFSDFPd29UYWZ3dlgxK0pWMlZtSXhFd0hsSmxCc2Rrd0xIeTJtWmpjZ2pJOWtKNFluYmg2L1h1NGwwOVlmaFBqQ3NTSmc3aHBJYmJuZy85Mk01TWpuMGtQY2RsSkdGLzdKUUpDU3JzZ0FzZWVIem9xTCs0YkZuU2U1RUpLemdIcGVhVHNnM3Y5ckNydFlGeitoU2NaZHpBR1lzOEhYODRIOUpuMEtBWW5RZnl1SVFUNFk1bW8wYWtpTWhRZURoNDR0RWd1WEdjRTBpUDg0NU12eHh6RWpSczNRWjVVeDNoQ3RuVXhicXE2UFIvOGNSZEFjdVN6MVlmekdFaE5tMkJkRGZqa3Z3MExjVFlLb2tDSytvYUZBb2xJamlERkJZbDAyL291akRtUUMxYytaeHpDK0JvSXAydDM1SFhIUHJEbkEvbEljdVF6NlNLT09BbldWcXNSYkhzY2ppZEROZjBnUldGN0NOWDJNMWwzVlRPUWJtcGQ1NWdEcVQwMXhEaGttQlRpSk1oR3NCK2lzZHJQYkdlNndyVTE1UmpJemtRRXlIQjNHcVliWUNBaVNlSHdDTUJtSTdtQVlpd3Q2Z3JYN1FUOWg1ZEhIY1EvUC9zS2xFbTdHWWQzN2xIR0dhTHV0MnRiaXJENWlUNlRyaUN1S3NWSnNMckN3eVd1aWgyWWovdW5NQzJWRmxmc2dyNWhvZHhzWkhJRVpWb1RrUDc4N0FQdzdUWEhaeS9hYy8yNXJKM3BTcFAyNHRSclpueWVXMDEyYmJ0WmJTOUFlZktaK2I2bU10akpTNlY2R1Avek9SM3dLK3BrUW43YnpIYkpDQ1JEc3FGbEJweitkakhDVjdhMndNVXIveDB4aU0rK3VncHJxNDVibkZoYmhkTm9GK01LTE90MzJDNzVTdnFJYjd4VU8zL0Zkci84dU1xRExtc3F3VTNWaXBIMlF6QTJrM2hUcjExSUNucVpITW43RitIQ0ZJZlpRUTVKZkRWVXZXMW16djcwOC9WMzE2RlYvd0Y0SmU5aHNnU3YzR09NWXo3MUpnNmJrZXpTMENONU4xV0xoU091c3NXMmpSZXNybnpOWlhVRm01UG5XMG5sMkNjaVZMUUhlYkhCSmg5VTBnMVMzR1lRRDRlUWpIMlFXSDBDMHV0dzE1RFhBRUl5YkQwbnhvVXNZUE1abXo0TjU5SFlFK0swU3p5QzJNbzNiSUh3NHpUVCtLdDMzRVNBWC9GWkNNV292VXRNSU16dkhSRktKQTlHK1ZBR3ZKN0lQc0tHQzNIZERZSTRxbnd6aEpRWm1RNWwyQU9EY01TV2I2bUo2ZmdXbitINGJzeGJXelg5dG10Mmw5WGw3ZnpZY3B3SkdobDVNSTVYRVNvTDhrYUdLQjlYV3d3OHhPb1lJWEJyRDNodk9nbks5QmJFWWR5cEhzY3RTQmNHWUxiSitGTXZidXB6MkFhbkowMXVBUExWSmFiODhCMDNIMXhpZEtIOFdCMFRDQ3ExS05FTTRZZ1JEbTdGUmx5cyttOEw2RzZnSkxtUGtwdXF4aEpVMHN0OEpGOEZNZVYrZHdUaXBGTDl6RGxHZXdtQjF3WWR6SmgvcVJsY2NudEhEY3FldkJDdjZOQlozeEl6K0NHUDV4WVRLSW9NSU1aem8rVVRJQUszV1JLZ1VMVUIrZWdjclRzLzdBMDZYcFEyMFRsYWkrTzRtbTBES0x1U0FnUHdrV2dxSWNPa2tDK0JPQlJkVmxjQytjaUwwa1VORzRqb2RkM3ZuS00xM3lIQUsvOFVCRzZuVEJyQk9VYy9wZkRCUlpKODhjZzlEdVFiTDFyenhkdzN5eDYxZXhQYk9VYXppNFJkOFZxWU1oQkl3eXVuRjV5ejlWTUNVVjZ2eFErRUNKY0g4czA1U2xNeTR0MTQ1eGkxakFramZJdTdHSUVTeHpZUFNhY0MxR2ZrZzNmaEdiRDZkZE1sVnZ1Q1F6LzBvSEFmS2NsU21pQUFLMEpONzV6ZEMvT3k5Sk1LYW5LeVR4QnZPR0FKSkViZDRmQXZWcnhvOVV1a3hNZlp3YnU0aHdXaUtETENYQ1NmVE5BVVRiYTlDczV4MVNENE9Cd0ltNHFqTlFPa0tFMXVCSCthUWtzc1ZabWJxWjhVQ0xBdnlTNUJuTERmMmh2YUU2UCtNWlFmcFluZ3N1QmQyQTErVzdFcUJVWjRNVU0vS1hBdk1qR2JIdm0yM2dDWGFJMXlURDlQbzdLZXpXQkpCOEVYcDBBQ0QwcytKNk5uUWtHekpHZFBsRkRIQmRJKzV0L1orZEdhUUM0Ykhwdk9nZyt1em5KY0lHZXJlaVlVeWtJanMrV1cyMm1yQmk5V0xicW5KeDl3bHVna0lsSGlmdkJHY2dMTktMUFE0RVNBK3BDekk0amZ3eTJBamZmOENBZHVXenk0ckxqbm5XRUdxRmRtcGZkTUNLZ2FaRU9aYzVxcnhnM25XTTI4Y1htb2hoZXRQY3Fxc240dmVHMDJNY3pEbVdWbVdzKzR3am1yMThZdldGZkxCVkkzYms4SHVieFo1c3BWUlpIVHlRekpzU292b1BIeGhBS3JRZHlLckZOY0VEL3dvOHBuanV2eldyZ0hheUp5SVk1YnoySVR3MXljSnA5UDdSNFg4TERDSEsvTDJsMHNFSDYwdG1yY0h6empSZXQ0dE05aFZjayt4UXpLTnhuR0xSRHFPK0tVWlo3Z3FuSGRaWTFteG9ROFFVZmpsWXdJMXRhQ0J5NVlCS3JLY3luZDl3VHFOd3VmRWZocnFxMTdLbzE2d2g0RnBQRks0NVp0S0ROT2duc2haakRmQUg5TTdyNG55UE9OakV1YS9oWlhqYXY4TnpUVEp2VGhURjZVcHBKdEYrSnF3QTJORTE1VTZlRlpkR2dzbUp2Unl6aVVlQlhJWDdQVDJodWF6UlArbEtrZ2F2c3plTTE4alcwb1ZjZkJyWUNxWW9Sbk4zYVBHbHcxaU1NMTdhaTFHdHF2bmQvUS9INVNudnZGN2YxMmxqa2N6MHBzVW1XQnBTb3owTG5SZ0twQnVncTZMOEN1eFNrUWRlNmtQY0FzV3FON0FvMSt5emFVYWNkQXNja0kwandEUEpQVTVUQm1iT3hpL1VXNjRwUU9yamMrNS8xVi9kdEpmUklicncwS1dGVldWK0h3NkdORFpFNmFIcDdlME9VUTVxVHJtWTQ4cncvNHNSV1czb2pTcGszNkkrV3pvN1kvN2h5bCtaSnRYVkk3V0orNDVocmdhY3oyOUEzMlFUSVNyQ0RwaUpMYnVXcDhPaXVoOGpHWWlvZjhlVEhxREV0VktrQ0dtWlZacXpJOXNjc3VTSVprWlhUZktuWUh0OE5ObUxLM0ZhUXhwYjlHSno1alZjSE1jbFdockQrVmVIZlFzSkxrV3FvaFRHcmxxbkZaOUxydWtTbDk3WUlYcFU1a1ZjSE1TdkRLVHBwbmhObVk4V2tKWFhjRm5TTVpTWTZlM2NPMXJ1S3hVLzcrQ0dVU25ibkN0aTRiV2pIYk9BdmxHT0FwZFBySjliZURqdEU1a2hGc2FPYXE4ZEh6TWFXL3ZDL2U2S0dNV200ZmxZTWt1NGNOblZtcFBlajh1ZHRBMWFCenJsbDQ3Ukdqcy9hRyt2WDc1dFVreWlobDFsS1ZabkRGckl1eSsyQWFPdjlFdkFYMG5ZN1JPWmVFSnE0YUYrZzN6UHZxSFN0ZWpPWXZsdkd1QTFGbU54dENNMVAxOEFjTWdqQUx2OU14WVdhWDlXY0JrdFd1dXU5ZUZxUE00bWJ2QXpiRUVnNWg5dEhwTElPdFArZzdIZU1uTkhMVmVHL0prdkY3WVd4YzMzakRxcXkwWmhvRUtvdnpNMVAwRFBTZGp0RnZHNVpWWExQMHZuMTl6M0tyVlR2SUhGM2ZZSEhlQ3ZydUhOL0FiZE5OM1BPNjkrMTdpTGd6anJSdXg4RWwvU3dJTWcwTTlQM0hHOUhxc1B2K2hVcnJKWEV2Y3pqK0FBYlJ4K0FjWDg4RjB2MUF2Qm5LQW5sVEc4UmxuNS82THVMSFc1L3pvclQrRDB3ZzFxcTh5NXhmdTg4Q1N5Q25INWgzZFcvWkdYdmU4dU9NWlJXUDBubzhjSUZZNytZZnN3VVJyVDM2UUwwOWZmc01wcEhZZWdXL1A3Q0JXSHZsTU9HQmU1LzlqdGRqWTdSOHdrVGIrUjltZVpBNm4yb0pXQUFBQUFCSlJVNUVya0pnZ2c9PSI7CiAgfSBlbHNlIHsKICAgIF9sZWFmbGV0Mi5kZWZhdWx0Lkljb24uRGVmYXVsdC5wcm90b3R5cGUub3B0aW9ucy5pY29uVXJsID0gImRhdGE6aW1hZ2UvcG5nO2Jhc2U2NCxpVkJPUncwS0dnb0FBQUFOU1VoRVVnQUFBQmtBQUFBcENBWUFBQURBazRMT0FBQUdta2xFUVZSWXc3VlhlVXlUWnhqdk5uZkVMRnV5SXpPYWJlcm1NWkVlUUMvT2Nsa080OUNwT0hYT0xKbC9DQVVSdVliUWkzS0xnRWhicmhaMWFEd21hb0dxS0lJNm9kQVRtSC9zY0RGYmRDN0x2RnFPQ2MrZTk1czJWRzUwWC9MTG0vZjQvWjduZVkvbmUxOGFBTkNtQXI1RS94WmYxdURPa1RjR2NXUjZobDkyNDd0VDVVN1k2U052V3NLVDYzUDU4cWJmZUxKRzhNNXFjZ1RrbnJ2dnJkRGJzVDdNbCt0djgyWDZ2VnhKRTMzYVJtZ1N5WXRjV1ZNcVg5N1l2Mkp2VzM5VWhSRTJIdXlCTCt0K2dLMTExNmx5MDZFZVdGTmxBbUh4bFFFME9NaVY2bVFDU2N1c0tSbGhTM1FMZVZKZGwxKzIzaDVkWTRGTkIzdGhyYllib3FwdEVGbHBoVEMxaFNwSm5iUnZ4UDROV2dzRTVKeXo4NlFOTmkvNXFTVVRHdUZrMWd1NTR0Tjl3dUsyd2MzbytXYzEzUkNtc29Cd0VxekdjWnN4c3ZDU3kvOXdKS2Y3VVdmMW1FWThKV2Zld2M2N1VVb0RiRGpRQytGcUs0UXFMVk1HR1I5ZDJ3dXJLenFCazNucUlULzl6THhSUmpnWjlicVFndWIrRGRvZUNDMDNROGorMFFoRmhCSFIvZVAzVS96Q2xuN1V1K2hpaEoxK2JCTmZmTEl2bWt5UDBncEJaV1lYaEt1c3NLNm1CejVIVDZNMU5xcGNwK21CQ1BYb3NZUWZyZWtHdnJqZXdkNTkvR3ZLQ0U3VGJLLzA0L1pWNVFaWVZXbUR3SDFtRjN4YTJRM3JhM0RCQzV2QlQxb1A3UFRqNEMwK0NjTDhjN0MyQ3RlanFodUNudUlRSGFLSHp2Y1JmWnBueWxGZlhzWUp4M3BOTHdoS3pSQXdBaEVxRzBTcHVzQkhmQUtreHczdzQ2MjdNUGhvQ0g3OTh6N3MwWm5CSi9NRUpiWlNiWFBoRVIyaWg3cDJvay96U2oyY0VKRGQ0Q0FlKzVXWW5CQ2dSMnVydXlFdzZ6Um9XNi9EV0ovT2VBUDhwZC9CR3R6T1pLcEc4b2tlMFNYNkdNbVJrNkdGbHlBYzU5SzMyT1RFaW5JTFJKUmNoYWg4SFF3TkQ4TjQzNVo5WjBGWTFFcXR4VWcrMFNPNlJKL21tWHo0VnVTK0RweFhDM2dYbVp3SUw3ZEJTSDR6S0U1MHdFU2Y4cXdWZ3JQMUVJbFRPNUpQOUlndTBhZXhkaDI4RjFsbUFFR0pHZmg3akU2RWx5TTVSdy9GRGNZSmpXaGJlaUJZb1lOSXBjMkZUL1NJTGl2cDBGMWlwRFdrNEJJRW8yVnVvZEVKVWlmaGJpbHRuTkJJWFBVRkNNcHRodEF5cXdzL0JQbEVGL1ZiYUl4RXJkeFBwaHNVN3JjQ3A4RG9oQytHdkJJUEpTL3RXMmp0dlRtbUFldU5POEJOT1lRZUc4Ry8yT3pDSjNxK3NvWUI1aTZOaE1hS3IxN0ZTYWw3R0lIaGV1VjN1U0NZOHFZVnVFbTFjT3pxZFdyN2t1L1IwQkRvVFQrRFQrb2hDTTYvQ0N2S0xLTzRSSStkWFBlQXVhTXFrc2FLclo3TDNGRTVGSUZia0ljZWVPWjJPY0hPNndJaFRrTm8wZmZnalJHeEVxb2dYSFlVUEhmV0FDL2xBRHB3R2NMUlkzYWVLNC9vUkdDS1ljWlhQVm9lWC9rZWxWWVk4ZFVHZjhWNUVCUmJnSlhUNVFJUGhQOWVQSmk0MjhKS09pRVloWVhGQnFvdTJHdWgrcC9tRUIxL1JmTXc2clk3Y3hjalRybmVJMUZyRHl1elVTUm05bWl3RUp4OEUvZ1VtcWx5dkhHa25laXdFclIyMUYzdE5PSzVUZjB5WGFUK083RGdDdkFMVFVCWGRNNFloQy9JYXdQVSsyUGR1cU12dWFSNmVveFN3VWs3NWdncXNZSjdWaWNzbndHSWtaQlNYS09Vd3c3M1dHWHlxUCtKMi9iOWMrZ2kxWUFnL3hwd2NrM2dKdXVjTnJoNUp2RFB2UXIwV0ZYZjBwaXl0OGY4L1dJMGhWNHBSeHhrUVpkSkRmREpOT0FtTTBBZzhqeVQ2aHowV0dYV3VQOTRZaDJqY2ZqbVhBR3ZIQ01zbFJpbURIWXVIdURzeTJRdEh1SWF2em5oYllVUnE1UjU3S3B6QkJSWktQSmk4ZVFnNDhoNGo4U0Rkb3dpZmRJckVWZFUrZ2JPNlFOdlJSdDRaQnRoVWFaaFVuamxZT2JOYWdWM2tlb2VydTNyVTdyY3VjZXFVMW1KQnh5K0JXWllsTkVCSCswZUg0dlJpQitPWXliVTJobmJsWWxUdmtIaW5NNG01NFlueFN5YVpZU0Y2UjNqd2dQN3VkS0xHSVg2ci9sYk5hOU42eTVNRnlualdEdHJIZDc1WnZUWUFQTy82UmdGMGs3Nm1RbGEzRkdxN2RPK2NIOHNLbjBWbzduRGxsd0FocXdMUGt4ckh3V21ISk9vK0FLSjRyYWI1T2dyTTdyVnU4ZVdiMlB1MERoNGVEZ1hvT2Z2cDdZN1FlcWtuUm12Y1RCRXlxOW0vSFFRU0NTejZMSHEzejB5enNOeVNSZk1TMjUzd2wyS3lSRGJjWlBjZkpLalptU0VPamN4eWkrWThkVU90c0lFSDZSMndOeWtkcXJrWUowUlY5MkgwVzU4cGtmUWs3Y0tldnNMSzEwUHk4U2RNR2ZYTlhBVFkrcFBieUpSL0VUNm45bklmenROdFpZUlY5WG5pUXU5SUEydk9WZ3k0aXI3R0NMVm1tZCt6amtIMGVBRjlQbzZLNjFwbUNYSHhVNXJITVlkMWZ0YzNvd2p3UlNWUnpMakt2cVpFdHk2Y1JVRDdqR3FpT2R1NUhHNk1kSGpOY05ZR3FmRG01WVJ6TEJCQ0NEbC8yYms4YThnZGJxY2Z3RUN1NjJGZy9IcmdnQUFBQUJKUlU1RXJrSmdnZz09IjsKICB9Cn0KCgp9LHsiLi9nbG9iYWwvbGVhZmxldCI6OH1dLDY6W2Z1bmN0aW9uKHJlcXVpcmUsbW9kdWxlLGV4cG9ydHMpewooZnVuY3Rpb24gKGdsb2JhbCl7CiJ1c2Ugc3RyaWN0IjsKCk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCAiX19lc01vZHVsZSIsIHsKICB2YWx1ZTogdHJ1ZQp9KTsKZXhwb3J0cy5kZWZhdWx0ID0gZ2xvYmFsLkhUTUxXaWRnZXRzOwoKCn0pLmNhbGwodGhpcyx0eXBlb2YgZ2xvYmFsICE9PSAidW5kZWZpbmVkIiA/IGdsb2JhbCA6IHR5cGVvZiBzZWxmICE9PSAidW5kZWZpbmVkIiA/IHNlbGYgOiB0eXBlb2Ygd2luZG93ICE9PSAidW5kZWZpbmVkIiA/IHdpbmRvdyA6IHt9KQp9LHt9XSw3OltmdW5jdGlvbihyZXF1aXJlLG1vZHVsZSxleHBvcnRzKXsKKGZ1bmN0aW9uIChnbG9iYWwpewoidXNlIHN0cmljdCI7CgpPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgIl9fZXNNb2R1bGUiLCB7CiAgdmFsdWU6IHRydWUKfSk7CmV4cG9ydHMuZGVmYXVsdCA9IGdsb2JhbC5qUXVlcnk7CgoKfSkuY2FsbCh0aGlzLHR5cGVvZiBnbG9iYWwgIT09ICJ1bmRlZmluZWQiID8gZ2xvYmFsIDogdHlwZW9mIHNlbGYgIT09ICJ1bmRlZmluZWQiID8gc2VsZiA6IHR5cGVvZiB3aW5kb3cgIT09ICJ1bmRlZmluZWQiID8gd2luZG93IDoge30pCn0se31dLDg6W2Z1bmN0aW9uKHJlcXVpcmUsbW9kdWxlLGV4cG9ydHMpewooZnVuY3Rpb24gKGdsb2JhbCl7CiJ1c2Ugc3RyaWN0IjsKCk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCAiX19lc01vZHVsZSIsIHsKICB2YWx1ZTogdHJ1ZQp9KTsKZXhwb3J0cy5kZWZhdWx0ID0gZ2xvYmFsLkw7CgoKfSkuY2FsbCh0aGlzLHR5cGVvZiBnbG9iYWwgIT09ICJ1bmRlZmluZWQiID8gZ2xvYmFsIDogdHlwZW9mIHNlbGYgIT09ICJ1bmRlZmluZWQiID8gc2VsZiA6IHR5cGVvZiB3aW5kb3cgIT09ICJ1bmRlZmluZWQiID8gd2luZG93IDoge30pCn0se31dLDk6W2Z1bmN0aW9uKHJlcXVpcmUsbW9kdWxlLGV4cG9ydHMpewooZnVuY3Rpb24gKGdsb2JhbCl7CiJ1c2Ugc3RyaWN0IjsKCk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCAiX19lc01vZHVsZSIsIHsKICB2YWx1ZTogdHJ1ZQp9KTsKZXhwb3J0cy5kZWZhdWx0ID0gZ2xvYmFsLkwuUHJvajsKCgp9KS5jYWxsKHRoaXMsdHlwZW9mIGdsb2JhbCAhPT0gInVuZGVmaW5lZCIgPyBnbG9iYWwgOiB0eXBlb2Ygc2VsZiAhPT0gInVuZGVmaW5lZCIgPyBzZWxmIDogdHlwZW9mIHdpbmRvdyAhPT0gInVuZGVmaW5lZCIgPyB3aW5kb3cgOiB7fSkKfSx7fV0sMTA6W2Z1bmN0aW9uKHJlcXVpcmUsbW9kdWxlLGV4cG9ydHMpewooZnVuY3Rpb24gKGdsb2JhbCl7CiJ1c2Ugc3RyaWN0IjsKCk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCAiX19lc01vZHVsZSIsIHsKICB2YWx1ZTogdHJ1ZQp9KTsKZXhwb3J0cy5kZWZhdWx0ID0gZ2xvYmFsLlNoaW55OwoKCn0pLmNhbGwodGhpcyx0eXBlb2YgZ2xvYmFsICE9PSAidW5kZWZpbmVkIiA/IGdsb2JhbCA6IHR5cGVvZiBzZWxmICE9PSAidW5kZWZpbmVkIiA/IHNlbGYgOiB0eXBlb2Ygd2luZG93ICE9PSAidW5kZWZpbmVkIiA/IHdpbmRvdyA6IHt9KQp9LHt9XSwxMTpbZnVuY3Rpb24ocmVxdWlyZSxtb2R1bGUsZXhwb3J0cyl7CiJ1c2Ugc3RyaWN0IjsKCnZhciBfanF1ZXJ5ID0gcmVxdWlyZSgiLi9nbG9iYWwvanF1ZXJ5Iik7Cgp2YXIgX2pxdWVyeTIgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KF9qcXVlcnkpOwoKdmFyIF9sZWFmbGV0ID0gcmVxdWlyZSgiLi9nbG9iYWwvbGVhZmxldCIpOwoKdmFyIF9sZWFmbGV0MiA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQoX2xlYWZsZXQpOwoKdmFyIF9zaGlueSA9IHJlcXVpcmUoIi4vZ2xvYmFsL3NoaW55Iik7Cgp2YXIgX3NoaW55MiA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQoX3NoaW55KTsKCnZhciBfaHRtbHdpZGdldHMgPSByZXF1aXJlKCIuL2dsb2JhbC9odG1sd2lkZ2V0cyIpOwoKdmFyIF9odG1sd2lkZ2V0czIgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KF9odG1sd2lkZ2V0cyk7Cgp2YXIgX3V0aWwgPSByZXF1aXJlKCIuL3V0aWwiKTsKCnZhciBfY3JzX3V0aWxzID0gcmVxdWlyZSgiLi9jcnNfdXRpbHMiKTsKCnZhciBfY29udHJvbFN0b3JlID0gcmVxdWlyZSgiLi9jb250cm9sLXN0b3JlIik7Cgp2YXIgX2NvbnRyb2xTdG9yZTIgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KF9jb250cm9sU3RvcmUpOwoKdmFyIF9sYXllck1hbmFnZXIgPSByZXF1aXJlKCIuL2xheWVyLW1hbmFnZXIiKTsKCnZhciBfbGF5ZXJNYW5hZ2VyMiA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQoX2xheWVyTWFuYWdlcik7Cgp2YXIgX21ldGhvZHMgPSByZXF1aXJlKCIuL21ldGhvZHMiKTsKCnZhciBfbWV0aG9kczIgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KF9tZXRob2RzKTsKCnJlcXVpcmUoIi4vZml4dXAtZGVmYXVsdC1pY29uIik7Cgp2YXIgX2RhdGFmcmFtZSA9IHJlcXVpcmUoIi4vZGF0YWZyYW1lIik7Cgp2YXIgX2RhdGFmcmFtZTIgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KF9kYXRhZnJhbWUpOwoKdmFyIF9jbHVzdGVyTGF5ZXJTdG9yZSA9IHJlcXVpcmUoIi4vY2x1c3Rlci1sYXllci1zdG9yZSIpOwoKdmFyIF9jbHVzdGVyTGF5ZXJTdG9yZTIgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KF9jbHVzdGVyTGF5ZXJTdG9yZSk7CgpmdW5jdGlvbiBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KG9iaikgeyByZXR1cm4gb2JqICYmIG9iai5fX2VzTW9kdWxlID8gb2JqIDogeyBkZWZhdWx0OiBvYmogfTsgfQoKd2luZG93LkxlYWZsZXRXaWRnZXQgPSB7fTsKd2luZG93LkxlYWZsZXRXaWRnZXQudXRpbHMgPSB7fTsKdmFyIG1ldGhvZHMgPSB3aW5kb3cuTGVhZmxldFdpZGdldC5tZXRob2RzID0gX2pxdWVyeTIuZGVmYXVsdC5leHRlbmQoe30sIF9tZXRob2RzMi5kZWZhdWx0KTsKd2luZG93LkxlYWZsZXRXaWRnZXQuRGF0YUZyYW1lID0gX2RhdGFmcmFtZTIuZGVmYXVsdDsKd2luZG93LkxlYWZsZXRXaWRnZXQuQ2x1c3RlckxheWVyU3RvcmUgPSBfY2x1c3RlckxheWVyU3RvcmUyLmRlZmF1bHQ7CndpbmRvdy5MZWFmbGV0V2lkZ2V0LnV0aWxzLmdldENSUyA9IF9jcnNfdXRpbHMuZ2V0Q1JTOwoKLy8gU2VuZCB1cGRhdGVkIGJvdW5kcyBiYWNrIHRvIGFwcC4gVGFrZXMgYSBsZWFmbGV0IGV2ZW50IG9iamVjdCBhcyBpbnB1dC4KZnVuY3Rpb24gdXBkYXRlQm91bmRzKG1hcCkgewogIHZhciBpZCA9IG1hcC5nZXRDb250YWluZXIoKS5pZDsKICB2YXIgYm91bmRzID0gbWFwLmdldEJvdW5kcygpOwoKICBfc2hpbnkyLmRlZmF1bHQub25JbnB1dENoYW5nZShpZCArICJfYm91bmRzIiwgewogICAgbm9ydGg6IGJvdW5kcy5nZXROb3J0aEVhc3QoKS5sYXQsCiAgICBlYXN0OiBib3VuZHMuZ2V0Tm9ydGhFYXN0KCkubG5nLAogICAgc291dGg6IGJvdW5kcy5nZXRTb3V0aFdlc3QoKS5sYXQsCiAgICB3ZXN0OiBib3VuZHMuZ2V0U291dGhXZXN0KCkubG5nCiAgfSk7CiAgX3NoaW55Mi5kZWZhdWx0Lm9uSW5wdXRDaGFuZ2UoaWQgKyAiX2NlbnRlciIsIHsKICAgIGxuZzogbWFwLmdldENlbnRlcigpLmxuZywKICAgIGxhdDogbWFwLmdldENlbnRlcigpLmxhdAogIH0pOwogIF9zaGlueTIuZGVmYXVsdC5vbklucHV0Q2hhbmdlKGlkICsgIl96b29tIiwgbWFwLmdldFpvb20oKSk7Cn0KCmZ1bmN0aW9uIHByZXZlbnRVbmludGVuZGVkWm9vbU9uU2Nyb2xsKG1hcCkgewogIC8vIFByZXZlbnQgdW53YW50ZWQgc2Nyb2xsIGNhcHR1cmluZy4gU2ltaWxhciBpbiBwdXJwb3NlIHRvCiAgLy8gaHR0cHM6Ly9naXRodWIuY29tL0NsaWZmQ2xvdWQvTGVhZmxldC5TbGVlcCBidXQgd2l0aCBhCiAgLy8gZGlmZmVyZW50IHNldCBvZiBoZXVyaXN0aWNzLgoKICAvLyBUaGUgYmFzaWMgaWRlYSBpcyB0aGF0IHdoZW4gYSBtb3VzZXdoZWVsL0RPTU1vdXNlU2Nyb2xsCiAgLy8gZXZlbnQgaXMgc2Vlbiwgd2UgZGlzYWJsZSBzY3JvbGwgd2hlZWwgem9vbWluZyB1bnRpbCB0aGUKICAvLyB1c2VyIG1vdmVzIHRoZWlyIG1vdXNlIGN1cnNvciBvciBjbGlja3Mgb24gdGhlIG1hcC4gVGhpcwogIC8vIGlzIHNsaWdodGx5IHRyaWNraWVyIHRoYW4ganVzdCBsaXN0ZW5pbmcgZm9yIG1vdXNlbW92ZSwKICAvLyBiZWNhdXNlIG1vdXNlbW92ZSBpcyBmaXJlZCB3aGVuIHRoZSBwYWdlIGlzIHNjcm9sbGVkLAogIC8vIGV2ZW4gaWYgdGhlIHVzZXIgZGlkIG5vdCBwaHlzaWNhbGx5IG1vdmUgdGhlIG1vdXNlLiBXZQogIC8vIGhhbmRsZSB0aGlzIGJ5IGV4YW1pbmluZyB0aGUgbW91c2Vtb3ZlIGV2ZW50J3Mgc2NyZWVuWAogIC8vIGFuZCBzY3JlZW5ZIHByb3BlcnRpZXM7IGlmIHRoZXkgY2hhbmdlLCB3ZSBrbm93IGl0J3MgYQogIC8vICJ0cnVlIiBtb3ZlLgoKICAvLyBsYXN0U2NyZWVuIGNhbiBuZXZlciBiZSBudWxsLCBidXQgaXRzIHggYW5kIHkgY2FuLgogIHZhciBsYXN0U2NyZWVuID0geyB4OiBudWxsLCB5OiBudWxsIH07CiAgKDAsIF9qcXVlcnkyLmRlZmF1bHQpKGRvY3VtZW50KS5vbigibW91c2V3aGVlbCBET01Nb3VzZVNjcm9sbCIsICIqIiwgZnVuY3Rpb24gKGUpIHsKICAgIC8vIERpc2FibGUgem9vbWluZyAodW50aWwgdGhlIG1vdXNlIG1vdmVzIG9yIGNsaWNrKQogICAgbWFwLnNjcm9sbFdoZWVsWm9vbS5kaXNhYmxlKCk7CiAgICAvLyBBbnkgbW91c2Vtb3ZlIGV2ZW50cyBhdCB0aGlzIHNjcmVlbiBwb3NpdGlvbiB3aWxsIGJlIGlnbm9yZWQuCiAgICBsYXN0U2NyZWVuID0geyB4OiBlLm9yaWdpbmFsRXZlbnQuc2NyZWVuWCwgeTogZS5vcmlnaW5hbEV2ZW50LnNjcmVlblkgfTsKICB9KTsKICAoMCwgX2pxdWVyeTIuZGVmYXVsdCkoZG9jdW1lbnQpLm9uKCJtb3VzZW1vdmUiLCAiKiIsIGZ1bmN0aW9uIChlKSB7CiAgICAvLyBEaWQgdGhlIG1vdXNlIHJlYWxseSBtb3ZlPwogICAgaWYgKGxhc3RTY3JlZW4ueCAhPT0gbnVsbCAmJiBlLnNjcmVlblggIT09IGxhc3RTY3JlZW4ueCB8fCBlLnNjcmVlblkgIT09IGxhc3RTY3JlZW4ueSkgewogICAgICAvLyBJdCByZWFsbHkgbW92ZWQuIEVuYWJsZSB6b29taW5nLgogICAgICBtYXAuc2Nyb2xsV2hlZWxab29tLmVuYWJsZSgpOwogICAgICBsYXN0U2NyZWVuID0geyB4OiBudWxsLCB5OiBudWxsIH07CiAgICB9CiAgfSk7CiAgKDAsIF9qcXVlcnkyLmRlZmF1bHQpKGRvY3VtZW50KS5vbigibW91c2Vkb3duIiwgIi5sZWFmbGV0IiwgZnVuY3Rpb24gKGUpIHsKICAgIC8vIENsaWNraW5nIGFsd2F5cyBlbmFibGVzIHpvb21pbmcuCiAgICBtYXAuc2Nyb2xsV2hlZWxab29tLmVuYWJsZSgpOwogICAgbGFzdFNjcmVlbiA9IHsgeDogbnVsbCwgeTogbnVsbCB9OwogIH0pOwp9CgpfaHRtbHdpZGdldHMyLmRlZmF1bHQud2lkZ2V0KHsKCiAgbmFtZTogImxlYWZsZXQiLAogIHR5cGU6ICJvdXRwdXQiLAogIGZhY3Rvcnk6IGZ1bmN0aW9uIGZhY3RvcnkoZWwsIHdpZHRoLCBoZWlnaHQpIHsKCiAgICB2YXIgbWFwID0gbnVsbDsKCiAgICByZXR1cm4gewoKICAgICAgLy8gd2UgbmVlZCB0byBzdG9yZSBvdXIgbWFwIGluIG91ciByZXR1cm5lZCBvYmplY3QuCiAgICAgIGdldE1hcDogZnVuY3Rpb24gZ2V0TWFwKCkgewogICAgICAgIHJldHVybiBtYXA7CiAgICAgIH0sCgogICAgICByZW5kZXJWYWx1ZTogZnVuY3Rpb24gcmVuZGVyVmFsdWUoZGF0YSkgewoKICAgICAgICAvLyBDcmVhdGUgYW4gYXBwcm9wcmlhdGUgQ1JTIE9iamVjdCBpZiBzcGVjaWZpZWQKCiAgICAgICAgaWYgKGRhdGEgJiYgZGF0YS5vcHRpb25zICYmIGRhdGEub3B0aW9ucy5jcnMpIHsKICAgICAgICAgIGRhdGEub3B0aW9ucy5jcnMgPSAoMCwgX2Nyc191dGlscy5nZXRDUlMpKGRhdGEub3B0aW9ucy5jcnMpOwogICAgICAgIH0KCiAgICAgICAgLy8gQXMgcGVyIGh0dHBzOi8vZ2l0aHViLmNvbS9yc3R1ZGlvL2xlYWZsZXQvcHVsbC8yOTQjZGlzY3Vzc2lvbl9yNzk1ODQ4MTAKICAgICAgICBpZiAobWFwKSB7CiAgICAgICAgICBtYXAucmVtb3ZlKCk7CiAgICAgICAgICBtYXAgPSBmdW5jdGlvbiAoKSB7CiAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgIH0oKTsgLy8gdW5kZWZpbmUgbWFwCiAgICAgICAgfQoKICAgICAgICBpZiAoZGF0YS5vcHRpb25zLm1hcEZhY3RvcnkgJiYgdHlwZW9mIGRhdGEub3B0aW9ucy5tYXBGYWN0b3J5ID09PSAiZnVuY3Rpb24iKSB7CiAgICAgICAgICBtYXAgPSBkYXRhLm9wdGlvbnMubWFwRmFjdG9yeShlbCwgZGF0YS5vcHRpb25zKTsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgbWFwID0gX2xlYWZsZXQyLmRlZmF1bHQubWFwKGVsLCBkYXRhLm9wdGlvbnMpOwogICAgICAgIH0KCiAgICAgICAgcHJldmVudFVuaW50ZW5kZWRab29tT25TY3JvbGwobWFwKTsKCiAgICAgICAgLy8gU3RvcmUgc29tZSBzdGF0ZSBpbiB0aGUgbWFwIG9iamVjdAogICAgICAgIG1hcC5sZWFmbGV0ciA9IHsKICAgICAgICAgIC8vIEhhcyB0aGUgbWFwIGV2ZXIgcmVuZGVyZWQgc3VjY2Vzc2Z1bGx5PwogICAgICAgICAgaGFzUmVuZGVyZWQ6IGZhbHNlLAogICAgICAgICAgLy8gRGF0YSB0byBiZSByZW5kZXJlZCB3aGVuIHJlc2l6ZSBpcyBjYWxsZWQgd2l0aCBhcmVhICE9IDAKICAgICAgICAgIHBlbmRpbmdSZW5kZXJEYXRhOiBudWxsCiAgICAgICAgfTsKCiAgICAgICAgLy8gQ2hlY2sgaWYgdGhlIG1hcCBpcyByZW5kZXJlZCBzdGF0aWNhbGx5IChubyBvdXRwdXQgYmluZGluZykKICAgICAgICBpZiAoX2h0bWx3aWRnZXRzMi5kZWZhdWx0LnNoaW55TW9kZSAmJiAvXGJzaGlueS1ib3VuZC1vdXRwdXRcYi8udGVzdChlbC5jbGFzc05hbWUpKSB7CiAgICAgICAgICAoZnVuY3Rpb24gKCkgewoKICAgICAgICAgICAgbWFwLmlkID0gZWwuaWQ7CgogICAgICAgICAgICAvLyBTdG9yZSB0aGUgbWFwIG9uIHRoZSBlbGVtZW50IHNvIHdlIGNhbiBmaW5kIGl0IGxhdGVyIGJ5IElECiAgICAgICAgICAgICgwLCBfanF1ZXJ5Mi5kZWZhdWx0KShlbCkuZGF0YSgibGVhZmxldC1tYXAiLCBtYXApOwoKICAgICAgICAgICAgLy8gV2hlbiB0aGUgbWFwIGlzIGNsaWNrZWQsIHNlbmQgdGhlIGNvb3JkaW5hdGVzIGJhY2sgdG8gdGhlIGFwcAogICAgICAgICAgICBtYXAub24oImNsaWNrIiwgZnVuY3Rpb24gKGUpIHsKICAgICAgICAgICAgICBfc2hpbnkyLmRlZmF1bHQub25JbnB1dENoYW5nZShtYXAuaWQgKyAiX2NsaWNrIiwgewogICAgICAgICAgICAgICAgbGF0OiBlLmxhdGxuZy5sYXQsCiAgICAgICAgICAgICAgICBsbmc6IGUubGF0bG5nLmxuZywKICAgICAgICAgICAgICAgICIubm9uY2UiOiBNYXRoLnJhbmRvbSgpIC8vIEZvcmNlIHJlYWN0aXZpdHkgaWYgbGF0L2xuZyBoYXNuJ3QgY2hhbmdlZAogICAgICAgICAgICAgIH0pOwogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIHZhciBncm91cFRpbWVySWQgPSBudWxsOwoKICAgICAgICAgICAgbWFwLm9uKCJtb3ZlZW5kIiwgZnVuY3Rpb24gKGUpIHsKICAgICAgICAgICAgICB1cGRhdGVCb3VuZHMoZS50YXJnZXQpOwogICAgICAgICAgICB9KS5vbigibGF5ZXJhZGQgbGF5ZXJyZW1vdmUiLCBmdW5jdGlvbiAoZSkgewogICAgICAgICAgICAgIC8vIElmIHRoZSBsYXllciB0aGF0J3MgY29taW5nIG9yIGdvaW5nIGlzIGEgZ3JvdXAgd2UgY3JlYXRlZCwgdGVsbAogICAgICAgICAgICAgIC8vIHRoZSBzZXJ2ZXIuCiAgICAgICAgICAgICAgaWYgKG1hcC5sYXllck1hbmFnZXIuZ2V0R3JvdXBOYW1lRnJvbUxheWVyR3JvdXAoZS5sYXllcikpIHsKICAgICAgICAgICAgICAgIC8vIEJ1dCB0byBhdm9pZCBjaGF0dGluZXNzLCBjb2FsZXNjZSBldmVudHMKICAgICAgICAgICAgICAgIGlmIChncm91cFRpbWVySWQpIHsKICAgICAgICAgICAgICAgICAgY2xlYXJUaW1lb3V0KGdyb3VwVGltZXJJZCk7CiAgICAgICAgICAgICAgICAgIGdyb3VwVGltZXJJZCA9IG51bGw7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBncm91cFRpbWVySWQgPSBzZXRUaW1lb3V0KGZ1bmN0aW9uICgpIHsKICAgICAgICAgICAgICAgICAgZ3JvdXBUaW1lcklkID0gbnVsbDsKICAgICAgICAgICAgICAgICAgX3NoaW55Mi5kZWZhdWx0Lm9uSW5wdXRDaGFuZ2UobWFwLmlkICsgIl9ncm91cHMiLCBtYXAubGF5ZXJNYW5hZ2VyLmdldFZpc2libGVHcm91cHMoKSk7CiAgICAgICAgICAgICAgICB9LCAxMDApOwogICAgICAgICAgICAgIH0KICAgICAgICAgICAgfSk7CiAgICAgICAgICB9KSgpOwogICAgICAgIH0KICAgICAgICB0aGlzLmRvUmVuZGVyVmFsdWUoZGF0YSwgbWFwKTsKICAgICAgfSwKICAgICAgZG9SZW5kZXJWYWx1ZTogZnVuY3Rpb24gZG9SZW5kZXJWYWx1ZShkYXRhLCBtYXApIHsKICAgICAgICAvLyBMZWFmbGV0IGRvZXMgbm90IGJlaGF2ZSB3ZWxsIHdoZW4geW91IHNldCB1cCBhIGJ1bmNoIG9mIGxheWVycyB3aGVuCiAgICAgICAgLy8gdGhlIG1hcCBpcyBub3QgdmlzaWJsZSAod2lkdGgvaGVpZ2h0ID09IDApLiBQb3B1cHMgZ2V0IG1pc2FsaWduZWQKICAgICAgICAvLyByZWxhdGl2ZSB0byB0aGVpciBvd25pbmcgbWFya2VycywgYW5kIHRoZSBmaXRCb3VuZHMgY2FsY3VsYXRpb25zCiAgICAgICAgLy8gYXJlIG9mZi4gVGhlcmVmb3JlIHdlIHdhaXQgdW50aWwgdGhlIG1hcCBpcyBhY3R1YWxseSBzaG93aW5nIHRvCiAgICAgICAgLy8gcmVuZGVyIHRoZSB2YWx1ZSAod2UgcmVseSBvbiB0aGUgcmVzaXplKCkgY2FsbGJhY2sgYmVpbmcgaW52b2tlZAogICAgICAgIC8vIGF0IHRoZSBhcHByb3ByaWF0ZSB0aW1lKS4KICAgICAgICAvLwogICAgICAgIC8vIFRoZXJlIG1heSBiZSBhbiBpc3N1ZSB3aXRoIGxlYWZsZXRQcm94eSgpIGNhbGxzIGJlaW5nIG1hZGUgd2hpbGUKICAgICAgICAvLyB0aGUgbWFwIGlzIG5vdCBiZWluZyB2aWV3ZWQtLW5vdCBzdXJlIHdoYXQgdGhlIHJpZ2h0IHNvbHV0aW9uIGlzCiAgICAgICAgLy8gdGhlcmUuCiAgICAgICAgaWYgKGVsLm9mZnNldFdpZHRoID09PSAwIHx8IGVsLm9mZnNldEhlaWdodCA9PT0gMCkgewogICAgICAgICAgbWFwLmxlYWZsZXRyLnBlbmRpbmdSZW5kZXJEYXRhID0gZGF0YTsKICAgICAgICAgIHJldHVybjsKICAgICAgICB9CiAgICAgICAgbWFwLmxlYWZsZXRyLnBlbmRpbmdSZW5kZXJEYXRhID0gbnVsbDsKCiAgICAgICAgLy8gTWVyZ2UgZGF0YSBvcHRpb25zIGludG8gZGVmYXVsdHMKICAgICAgICB2YXIgb3B0aW9ucyA9IF9qcXVlcnkyLmRlZmF1bHQuZXh0ZW5kKHsgem9vbVRvTGltaXRzOiAiYWx3YXlzIiB9LCBkYXRhLm9wdGlvbnMpOwoKICAgICAgICBpZiAoIW1hcC5sYXllck1hbmFnZXIpIHsKICAgICAgICAgIG1hcC5jb250cm9scyA9IG5ldyBfY29udHJvbFN0b3JlMi5kZWZhdWx0KG1hcCk7CiAgICAgICAgICBtYXAubGF5ZXJNYW5hZ2VyID0gbmV3IF9sYXllck1hbmFnZXIyLmRlZmF1bHQobWFwKTsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgbWFwLmNvbnRyb2xzLmNsZWFyKCk7CiAgICAgICAgICBtYXAubGF5ZXJNYW5hZ2VyLmNsZWFyKCk7CiAgICAgICAgfQoKICAgICAgICB2YXIgZXhwbGljaXRWaWV3ID0gZmFsc2U7CiAgICAgICAgaWYgKGRhdGEuc2V0VmlldykgewogICAgICAgICAgZXhwbGljaXRWaWV3ID0gdHJ1ZTsKICAgICAgICAgIG1hcC5zZXRWaWV3LmFwcGx5KG1hcCwgZGF0YS5zZXRWaWV3KTsKICAgICAgICB9CiAgICAgICAgaWYgKGRhdGEuZml0Qm91bmRzKSB7CiAgICAgICAgICBleHBsaWNpdFZpZXcgPSB0cnVlOwogICAgICAgICAgbWV0aG9kcy5maXRCb3VuZHMuYXBwbHkobWFwLCBkYXRhLmZpdEJvdW5kcyk7CiAgICAgICAgfQogICAgICAgIGlmIChkYXRhLm9wdGlvbnMuY2VudGVyKSB7CiAgICAgICAgICBleHBsaWNpdFZpZXcgPSB0cnVlOwogICAgICAgIH0KCiAgICAgICAgLy8gUmV0dXJucyB0cnVlIGlmIHRoZSB6b29tVG9MaW1pdHMgb3B0aW9uIHNheXMgdGhhdCB0aGUgbWFwIHNob3VsZCBiZQogICAgICAgIC8vIHpvb21lZCB0byBtYXAgZWxlbWVudHMuCiAgICAgICAgZnVuY3Rpb24gbmVlZHNab29tKCkgewogICAgICAgICAgcmV0dXJuIG9wdGlvbnMuem9vbVRvTGltaXRzID09PSAiYWx3YXlzIiB8fCBvcHRpb25zLnpvb21Ub0xpbWl0cyA9PT0gImZpcnN0IiAmJiAhbWFwLmxlYWZsZXRyLmhhc1JlbmRlcmVkOwogICAgICAgIH0KCiAgICAgICAgaWYgKCFleHBsaWNpdFZpZXcgJiYgbmVlZHNab29tKCkgJiYgIW1hcC5nZXRab29tKCkpIHsKICAgICAgICAgIGlmIChkYXRhLmxpbWl0cyAmJiAhX2pxdWVyeTIuZGVmYXVsdC5pc0VtcHR5T2JqZWN0KGRhdGEubGltaXRzKSkgewogICAgICAgICAgICAvLyBVc2UgdGhlIG5hdHVyYWwgbGltaXRzIG9mIHdoYXQncyBiZWluZyBkcmF3biBvbiB0aGUgbWFwCiAgICAgICAgICAgIC8vIElmIHRoZSBzaXplIG9mIHRoZSBib3VuZGluZyBib3ggaXMgMCwgbGVhZmxldCBnZXRzIGFsbCB3ZWlyZAogICAgICAgICAgICB2YXIgcGFkID0gMC4wMDY7CiAgICAgICAgICAgIGlmIChkYXRhLmxpbWl0cy5sYXRbMF0gPT09IGRhdGEubGltaXRzLmxhdFsxXSkgewogICAgICAgICAgICAgIGRhdGEubGltaXRzLmxhdFswXSA9IGRhdGEubGltaXRzLmxhdFswXSAtIHBhZDsKICAgICAgICAgICAgICBkYXRhLmxpbWl0cy5sYXRbMV0gPSBkYXRhLmxpbWl0cy5sYXRbMV0gKyBwYWQ7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgaWYgKGRhdGEubGltaXRzLmxuZ1swXSA9PT0gZGF0YS5saW1pdHMubG5nWzFdKSB7CiAgICAgICAgICAgICAgZGF0YS5saW1pdHMubG5nWzBdID0gZGF0YS5saW1pdHMubG5nWzBdIC0gcGFkOwogICAgICAgICAgICAgIGRhdGEubGltaXRzLmxuZ1sxXSA9IGRhdGEubGltaXRzLmxuZ1sxXSArIHBhZDsKICAgICAgICAgICAgfQogICAgICAgICAgICBtYXAuZml0Qm91bmRzKFtbZGF0YS5saW1pdHMubGF0WzBdLCBkYXRhLmxpbWl0cy5sbmdbMF1dLCBbZGF0YS5saW1pdHMubGF0WzFdLCBkYXRhLmxpbWl0cy5sbmdbMV1dXSk7CiAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICBtYXAuZml0V29ybGQoKTsKICAgICAgICAgIH0KICAgICAgICB9CgogICAgICAgIGZvciAodmFyIGkgPSAwOyBkYXRhLmNhbGxzICYmIGkgPCBkYXRhLmNhbGxzLmxlbmd0aDsgaSsrKSB7CiAgICAgICAgICB2YXIgY2FsbCA9IGRhdGEuY2FsbHNbaV07CiAgICAgICAgICBpZiAobWV0aG9kc1tjYWxsLm1ldGhvZF0pIG1ldGhvZHNbY2FsbC5tZXRob2RdLmFwcGx5KG1hcCwgY2FsbC5hcmdzKTtlbHNlICgwLCBfdXRpbC5sb2cpKCJVbmtub3duIG1ldGhvZCAiICsgY2FsbC5tZXRob2QpOwogICAgICAgIH0KCiAgICAgICAgbWFwLmxlYWZsZXRyLmhhc1JlbmRlcmVkID0gdHJ1ZTsKCiAgICAgICAgaWYgKF9odG1sd2lkZ2V0czIuZGVmYXVsdC5zaGlueU1vZGUpIHsKICAgICAgICAgIHNldFRpbWVvdXQoZnVuY3Rpb24gKCkgewogICAgICAgICAgICB1cGRhdGVCb3VuZHMobWFwKTsKICAgICAgICAgIH0sIDEpOwogICAgICAgIH0KICAgICAgfSwKICAgICAgcmVzaXplOiBmdW5jdGlvbiByZXNpemUod2lkdGgsIGhlaWdodCkgewogICAgICAgIGlmIChtYXApIHsKICAgICAgICAgIG1hcC5pbnZhbGlkYXRlU2l6ZSgpOwogICAgICAgICAgaWYgKG1hcC5sZWFmbGV0ci5wZW5kaW5nUmVuZGVyRGF0YSkgewogICAgICAgICAgICB0aGlzLmRvUmVuZGVyVmFsdWUobWFwLmxlYWZsZXRyLnBlbmRpbmdSZW5kZXJEYXRhLCBtYXApOwogICAgICAgICAgfQogICAgICAgIH0KICAgICAgfQogICAgfTsKICB9Cn0pOwoKaWYgKF9odG1sd2lkZ2V0czIuZGVmYXVsdC5zaGlueU1vZGUpIHsKICBfc2hpbnkyLmRlZmF1bHQuYWRkQ3VzdG9tTWVzc2FnZUhhbmRsZXIoImxlYWZsZXQtY2FsbHMiLCBmdW5jdGlvbiAoZGF0YSkgewogICAgdmFyIGlkID0gZGF0YS5pZDsKICAgIHZhciBlbCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGlkKTsKICAgIHZhciBtYXAgPSBlbCA/ICgwLCBfanF1ZXJ5Mi5kZWZhdWx0KShlbCkuZGF0YSgibGVhZmxldC1tYXAiKSA6IG51bGw7CiAgICBpZiAoIW1hcCkgewogICAgICAoMCwgX3V0aWwubG9nKSgiQ291bGRuJ3QgZmluZCBtYXAgd2l0aCBpZCAiICsgaWQpOwogICAgICByZXR1cm47CiAgICB9CgogICAgZm9yICh2YXIgaSA9IDA7IGkgPCBkYXRhLmNhbGxzLmxlbmd0aDsgaSsrKSB7CiAgICAgIHZhciBjYWxsID0gZGF0YS5jYWxsc1tpXTsKICAgICAgaWYgKGNhbGwuZGVwZW5kZW5jaWVzKSB7CiAgICAgICAgX3NoaW55Mi5kZWZhdWx0LnJlbmRlckRlcGVuZGVuY2llcyhjYWxsLmRlcGVuZGVuY2llcyk7CiAgICAgIH0KICAgICAgaWYgKG1ldGhvZHNbY2FsbC5tZXRob2RdKSBtZXRob2RzW2NhbGwubWV0aG9kXS5hcHBseShtYXAsIGNhbGwuYXJncyk7ZWxzZSAoMCwgX3V0aWwubG9nKSgiVW5rbm93biBtZXRob2QgIiArIGNhbGwubWV0aG9kKTsKICAgIH0KICB9KTsKfQoKCn0seyIuL2NsdXN0ZXItbGF5ZXItc3RvcmUiOjEsIi4vY29udHJvbC1zdG9yZSI6MiwiLi9jcnNfdXRpbHMiOjMsIi4vZGF0YWZyYW1lIjo0LCIuL2ZpeHVwLWRlZmF1bHQtaWNvbiI6NSwiLi9nbG9iYWwvaHRtbHdpZGdldHMiOjYsIi4vZ2xvYmFsL2pxdWVyeSI6NywiLi9nbG9iYWwvbGVhZmxldCI6OCwiLi9nbG9iYWwvc2hpbnkiOjEwLCIuL2xheWVyLW1hbmFnZXIiOjEyLCIuL21ldGhvZHMiOjEzLCIuL3V0aWwiOjE1fV0sMTI6W2Z1bmN0aW9uKHJlcXVpcmUsbW9kdWxlLGV4cG9ydHMpewooZnVuY3Rpb24gKGdsb2JhbCl7CiJ1c2Ugc3RyaWN0IjsKCk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCAiX19lc01vZHVsZSIsIHsKICB2YWx1ZTogdHJ1ZQp9KTsKCnZhciBfY3JlYXRlQ2xhc3MgPSBmdW5jdGlvbiAoKSB7IGZ1bmN0aW9uIGRlZmluZVByb3BlcnRpZXModGFyZ2V0LCBwcm9wcykgeyBmb3IgKHZhciBpID0gMDsgaSA8IHByb3BzLmxlbmd0aDsgaSsrKSB7IHZhciBkZXNjcmlwdG9yID0gcHJvcHNbaV07IGRlc2NyaXB0b3IuZW51bWVyYWJsZSA9IGRlc2NyaXB0b3IuZW51bWVyYWJsZSB8fCBmYWxzZTsgZGVzY3JpcHRvci5jb25maWd1cmFibGUgPSB0cnVlOyBpZiAoInZhbHVlIiBpbiBkZXNjcmlwdG9yKSBkZXNjcmlwdG9yLndyaXRhYmxlID0gdHJ1ZTsgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRhcmdldCwgZGVzY3JpcHRvci5rZXksIGRlc2NyaXB0b3IpOyB9IH0gcmV0dXJuIGZ1bmN0aW9uIChDb25zdHJ1Y3RvciwgcHJvdG9Qcm9wcywgc3RhdGljUHJvcHMpIHsgaWYgKHByb3RvUHJvcHMpIGRlZmluZVByb3BlcnRpZXMoQ29uc3RydWN0b3IucHJvdG90eXBlLCBwcm90b1Byb3BzKTsgaWYgKHN0YXRpY1Byb3BzKSBkZWZpbmVQcm9wZXJ0aWVzKENvbnN0cnVjdG9yLCBzdGF0aWNQcm9wcyk7IHJldHVybiBDb25zdHJ1Y3RvcjsgfTsgfSgpOwoKdmFyIF9qcXVlcnkgPSByZXF1aXJlKCIuL2dsb2JhbC9qcXVlcnkiKTsKCnZhciBfanF1ZXJ5MiA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQoX2pxdWVyeSk7Cgp2YXIgX2xlYWZsZXQgPSByZXF1aXJlKCIuL2dsb2JhbC9sZWFmbGV0Iik7Cgp2YXIgX2xlYWZsZXQyID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChfbGVhZmxldCk7Cgp2YXIgX3V0aWwgPSByZXF1aXJlKCIuL3V0aWwiKTsKCmZ1bmN0aW9uIF9pbnRlcm9wUmVxdWlyZURlZmF1bHQob2JqKSB7IHJldHVybiBvYmogJiYgb2JqLl9fZXNNb2R1bGUgPyBvYmogOiB7IGRlZmF1bHQ6IG9iaiB9OyB9CgpmdW5jdGlvbiBfY2xhc3NDYWxsQ2hlY2soaW5zdGFuY2UsIENvbnN0cnVjdG9yKSB7IGlmICghKGluc3RhbmNlIGluc3RhbmNlb2YgQ29uc3RydWN0b3IpKSB7IHRocm93IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCBjYWxsIGEgY2xhc3MgYXMgYSBmdW5jdGlvbiIpOyB9IH0KCnZhciBMYXllck1hbmFnZXIgPSBmdW5jdGlvbiAoKSB7CiAgZnVuY3Rpb24gTGF5ZXJNYW5hZ2VyKG1hcCkgewogICAgX2NsYXNzQ2FsbENoZWNrKHRoaXMsIExheWVyTWFuYWdlcik7CgogICAgdGhpcy5fbWFwID0gbWFwOwoKICAgIC8vIEJFR0lOIGxheWVyIGluZGljZXMKCiAgICAvLyB7PGdyb3VwbmFtZT46IHs8c3RhbXA+OiBsYXllcn19CiAgICB0aGlzLl9ieUdyb3VwID0ge307CiAgICAvLyB7PGNhdGVnb3J5TmFtZT46IHs8c3RhbXA+OiBsYXllcn19CiAgICB0aGlzLl9ieUNhdGVnb3J5ID0ge307CiAgICAvLyB7PGNhdGVnb3J5TmFtZV9sYXllcklkPjogbGF5ZXJ9CiAgICB0aGlzLl9ieUxheWVySWQgPSB7fTsKICAgIC8vIHs8c3RhbXA+OiB7CiAgICAvLyAgICAgICAgICAgICAiZ3JvdXAiOiA8Z3JvdXBuYW1lPiwKICAgIC8vICAgICAgICAgICAgICJsYXllcklkIjogPGxheWVySWQ+LAogICAgLy8gICAgICAgICAgICAgImNhdGVnb3J5IjogPGNhdGVnb3J5PiwKICAgIC8vICAgICAgICAgICAgICJjb250YWluZXIiOiA8Y29udGFpbmVyPgogICAgLy8gICAgICAgICAgIH0KICAgIC8vIH0KICAgIHRoaXMuX2J5U3RhbXAgPSB7fTsKICAgIC8vIHs8Y3Jvc3N0YWxrR3JvdXBOYW1lPjogezxrZXk+OiBbPHN0YW1wPiwgPHN0YW1wPiwgLi4uXSwgLi4ufX0KICAgIHRoaXMuX2J5Q3Jvc3N0YWxrR3JvdXAgPSB7fTsKCiAgICAvLyBFTkQgbGF5ZXIgaW5kaWNlcwoKICAgIC8vIHs8Y2F0ZWdvcnlOYW1lPjogTC5sYXllckdyb3VwfQogICAgdGhpcy5fY2F0ZWdvcnlDb250YWluZXJzID0ge307CiAgICAvLyB7PGdyb3VwTmFtZT46IEwubGF5ZXJHcm91cH0KICAgIHRoaXMuX2dyb3VwQ29udGFpbmVycyA9IHt9OwogIH0KCiAgX2NyZWF0ZUNsYXNzKExheWVyTWFuYWdlciwgW3sKICAgIGtleTogImFkZExheWVyIiwKICAgIHZhbHVlOiBmdW5jdGlvbiBhZGRMYXllcihsYXllciwgY2F0ZWdvcnksIGxheWVySWQsIGdyb3VwLCBjdEdyb3VwLCBjdEtleSkgewogICAgICB2YXIgX3RoaXMgPSB0aGlzOwoKICAgICAgLy8gV2FzIGEgZ3JvdXAgcHJvdmlkZWQ/CiAgICAgIHZhciBoYXNJZCA9IHR5cGVvZiBsYXllcklkID09PSAic3RyaW5nIjsKICAgICAgdmFyIGdyb3VwZWQgPSB0eXBlb2YgZ3JvdXAgPT09ICJzdHJpbmciOwoKICAgICAgdmFyIHN0YW1wID0gX2xlYWZsZXQyLmRlZmF1bHQuVXRpbC5zdGFtcChsYXllcik7CgogICAgICAvLyBUaGlzIHdpbGwgYmUgdGhlIGRlZmF1bHQgbGF5ZXIgZ3JvdXAgdG8gYWRkIHRoZSBsYXllciB0by4KICAgICAgLy8gV2UgbWF5IG92ZXJ3cml0ZSB0aGlzIGxldCBiZWZvcmUgdXNpbmcgaXQgKGkuZS4gaWYgYSBncm91cCBpcyBhc3NpZ25lZCkuCiAgICAgIC8vIFRoaXMgb25lIGxpbmVyIGNyZWF0ZXMgdGhlIF9jYXRlZ29yeUNvbnRhaW5lcnNbY2F0ZWdvcnldIGVudHJ5IGlmIGl0CiAgICAgIC8vIGRvZXNuJ3QgYWxyZWFkeSBleGlzdC4KICAgICAgdmFyIGNvbnRhaW5lciA9IHRoaXMuX2NhdGVnb3J5Q29udGFpbmVyc1tjYXRlZ29yeV0gPSB0aGlzLl9jYXRlZ29yeUNvbnRhaW5lcnNbY2F0ZWdvcnldIHx8IF9sZWFmbGV0Mi5kZWZhdWx0LmxheWVyR3JvdXAoKS5hZGRUbyh0aGlzLl9tYXApOwoKICAgICAgdmFyIG9sZExheWVyID0gbnVsbDsKICAgICAgaWYgKGhhc0lkKSB7CiAgICAgICAgLy8gRmlyc3QsIHJlbW92ZSBhbnkgbGF5ZXIgd2l0aCB0aGUgc2FtZSBjYXRlZ29yeSBhbmQgbGF5ZXJJZAogICAgICAgIHZhciBwcmVmaXhlZExheWVySWQgPSB0aGlzLl9sYXllcklkS2V5KGNhdGVnb3J5LCBsYXllcklkKTsKICAgICAgICBvbGRMYXllciA9IHRoaXMuX2J5TGF5ZXJJZFtwcmVmaXhlZExheWVySWRdOwogICAgICAgIGlmIChvbGRMYXllcikgewogICAgICAgICAgdGhpcy5fcmVtb3ZlTGF5ZXIob2xkTGF5ZXIpOwogICAgICAgIH0KCiAgICAgICAgLy8gVXBkYXRlIGxheWVySWQgaW5kZXgKICAgICAgICB0aGlzLl9ieUxheWVySWRbcHJlZml4ZWRMYXllcklkXSA9IGxheWVyOwogICAgICB9CgogICAgICAvLyBVcGRhdGUgZ3JvdXAgaW5kZXgKICAgICAgaWYgKGdyb3VwZWQpIHsKICAgICAgICB0aGlzLl9ieUdyb3VwW2dyb3VwXSA9IHRoaXMuX2J5R3JvdXBbZ3JvdXBdIHx8IHt9OwogICAgICAgIHRoaXMuX2J5R3JvdXBbZ3JvdXBdW3N0YW1wXSA9IGxheWVyOwoKICAgICAgICAvLyBTaW5jZSBhIGdyb3VwIGlzIGFzc2lnbmVkLCBkb24ndCBhZGQgdGhlIGxheWVyIHRvIHRoZSBjYXRlZ29yeSdzIGxheWVyCiAgICAgICAgLy8gZ3JvdXA7IGluc3RlYWQsIHVzZSB0aGUgZ3JvdXAncyBsYXllciBncm91cC4KICAgICAgICAvLyBUaGlzIG9uZSBsaW5lciBjcmVhdGVzIHRoZSBfZ3JvdXBDb250YWluZXJzW2dyb3VwXSBlbnRyeSBpZiBpdCBkb2Vzbid0CiAgICAgICAgLy8gYWxyZWFkeSBleGlzdC4KICAgICAgICBjb250YWluZXIgPSB0aGlzLmdldExheWVyR3JvdXAoZ3JvdXAsIHRydWUpOwogICAgICB9CgogICAgICAvLyBVcGRhdGUgY2F0ZWdvcnkgaW5kZXgKICAgICAgdGhpcy5fYnlDYXRlZ29yeVtjYXRlZ29yeV0gPSB0aGlzLl9ieUNhdGVnb3J5W2NhdGVnb3J5XSB8fCB7fTsKICAgICAgdGhpcy5fYnlDYXRlZ29yeVtjYXRlZ29yeV1bc3RhbXBdID0gbGF5ZXI7CgogICAgICAvLyBVcGRhdGUgc3RhbXAgaW5kZXgKICAgICAgdmFyIGxheWVySW5mbyA9IHRoaXMuX2J5U3RhbXBbc3RhbXBdID0gewogICAgICAgIGxheWVyOiBsYXllciwKICAgICAgICBncm91cDogZ3JvdXAsCiAgICAgICAgY3RHcm91cDogY3RHcm91cCwKICAgICAgICBjdEtleTogY3RLZXksCiAgICAgICAgbGF5ZXJJZDogbGF5ZXJJZCwKICAgICAgICBjYXRlZ29yeTogY2F0ZWdvcnksCiAgICAgICAgY29udGFpbmVyOiBjb250YWluZXIsCiAgICAgICAgaGlkZGVuOiBmYWxzZQogICAgICB9OwoKICAgICAgLy8gVXBkYXRlIGNyb3NzdGFsayBncm91cCBpbmRleAogICAgICBpZiAoY3RHcm91cCkgewogICAgICAgIChmdW5jdGlvbiAoKSB7CiAgICAgICAgICBpZiAobGF5ZXIuc2V0U3R5bGUpIHsKICAgICAgICAgICAgLy8gTmVlZCB0byBzYXZlIHRoaXMgaW5mbyBzbyB3ZSBrbm93IHdoYXQgdG8gc2V0IG9wYWNpdHkgdG8gbGF0ZXIKICAgICAgICAgICAgbGF5ZXIub3B0aW9ucy5vcmlnT3BhY2l0eSA9IHR5cGVvZiBsYXllci5vcHRpb25zLm9wYWNpdHkgIT09ICJ1bmRlZmluZWQiID8gbGF5ZXIub3B0aW9ucy5vcGFjaXR5IDogMC41OwogICAgICAgICAgICBsYXllci5vcHRpb25zLm9yaWdGaWxsT3BhY2l0eSA9IHR5cGVvZiBsYXllci5vcHRpb25zLmZpbGxPcGFjaXR5ICE9PSAidW5kZWZpbmVkIiA/IGxheWVyLm9wdGlvbnMuZmlsbE9wYWNpdHkgOiAwLjI7CiAgICAgICAgICB9CgogICAgICAgICAgdmFyIGN0ZyA9IF90aGlzLl9ieUNyb3NzdGFsa0dyb3VwW2N0R3JvdXBdOwogICAgICAgICAgaWYgKCFjdGcpIHsKICAgICAgICAgICAgKGZ1bmN0aW9uICgpIHsKICAgICAgICAgICAgICBjdGcgPSBfdGhpcy5fYnlDcm9zc3RhbGtHcm91cFtjdEdyb3VwXSA9IHt9OwogICAgICAgICAgICAgIHZhciBjcm9zc3RhbGsgPSBnbG9iYWwuY3Jvc3N0YWxrOwoKICAgICAgICAgICAgICB2YXIgaGFuZGxlRmlsdGVyID0gZnVuY3Rpb24gaGFuZGxlRmlsdGVyKGUpIHsKICAgICAgICAgICAgICAgIGlmICghZS52YWx1ZSkgewogICAgICAgICAgICAgICAgICB2YXIgZ3JvdXBLZXlzID0gT2JqZWN0LmtleXMoY3RnKTsKICAgICAgICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBncm91cEtleXMubGVuZ3RoOyBpKyspIHsKICAgICAgICAgICAgICAgICAgICB2YXIga2V5ID0gZ3JvdXBLZXlzW2ldOwogICAgICAgICAgICAgICAgICAgIHZhciBfbGF5ZXJJbmZvID0gX3RoaXMuX2J5U3RhbXBbY3RnW2tleV1dOwogICAgICAgICAgICAgICAgICAgIF90aGlzLl9zZXRWaXNpYmlsaXR5KF9sYXllckluZm8sIHRydWUpOwogICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgICB2YXIgc2VsZWN0ZWRLZXlzID0ge307CiAgICAgICAgICAgICAgICAgIGZvciAodmFyIF9pID0gMDsgX2kgPCBlLnZhbHVlLmxlbmd0aDsgX2krKykgewogICAgICAgICAgICAgICAgICAgIHNlbGVjdGVkS2V5c1tlLnZhbHVlW19pXV0gPSB0cnVlOwogICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgIHZhciBfZ3JvdXBLZXlzID0gT2JqZWN0LmtleXMoY3RnKTsKICAgICAgICAgICAgICAgICAgZm9yICh2YXIgX2kyID0gMDsgX2kyIDwgX2dyb3VwS2V5cy5sZW5ndGg7IF9pMisrKSB7CiAgICAgICAgICAgICAgICAgICAgdmFyIF9rZXkgPSBfZ3JvdXBLZXlzW19pMl07CiAgICAgICAgICAgICAgICAgICAgdmFyIF9sYXllckluZm8yID0gX3RoaXMuX2J5U3RhbXBbY3RnW19rZXldXTsKICAgICAgICAgICAgICAgICAgICBfdGhpcy5fc2V0VmlzaWJpbGl0eShfbGF5ZXJJbmZvMiwgc2VsZWN0ZWRLZXlzW19ncm91cEtleXNbX2kyXV0pOwogICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgfTsKICAgICAgICAgICAgICB2YXIgZmlsdGVySGFuZGxlID0gbmV3IGNyb3NzdGFsay5GaWx0ZXJIYW5kbGUoY3RHcm91cCk7CiAgICAgICAgICAgICAgZmlsdGVySGFuZGxlLm9uKCJjaGFuZ2UiLCBoYW5kbGVGaWx0ZXIpOwoKICAgICAgICAgICAgICB2YXIgaGFuZGxlU2VsZWN0aW9uID0gZnVuY3Rpb24gaGFuZGxlU2VsZWN0aW9uKGUpIHsKICAgICAgICAgICAgICAgIGlmICghZS52YWx1ZSB8fCAhZS52YWx1ZS5sZW5ndGgpIHsKICAgICAgICAgICAgICAgICAgdmFyIGdyb3VwS2V5cyA9IE9iamVjdC5rZXlzKGN0Zyk7CiAgICAgICAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgZ3JvdXBLZXlzLmxlbmd0aDsgaSsrKSB7CiAgICAgICAgICAgICAgICAgICAgdmFyIGtleSA9IGdyb3VwS2V5c1tpXTsKICAgICAgICAgICAgICAgICAgICB2YXIgX2xheWVySW5mbzMgPSBfdGhpcy5fYnlTdGFtcFtjdGdba2V5XV07CiAgICAgICAgICAgICAgICAgICAgX3RoaXMuX3NldE9wYWNpdHkoX2xheWVySW5mbzMsIDEuMCk7CiAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgIHZhciBzZWxlY3RlZEtleXMgPSB7fTsKICAgICAgICAgICAgICAgICAgZm9yICh2YXIgX2kzID0gMDsgX2kzIDwgZS52YWx1ZS5sZW5ndGg7IF9pMysrKSB7CiAgICAgICAgICAgICAgICAgICAgc2VsZWN0ZWRLZXlzW2UudmFsdWVbX2kzXV0gPSB0cnVlOwogICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgIHZhciBfZ3JvdXBLZXlzMiA9IE9iamVjdC5rZXlzKGN0Zyk7CiAgICAgICAgICAgICAgICAgIGZvciAodmFyIF9pNCA9IDA7IF9pNCA8IF9ncm91cEtleXMyLmxlbmd0aDsgX2k0KyspIHsKICAgICAgICAgICAgICAgICAgICB2YXIgX2tleTIgPSBfZ3JvdXBLZXlzMltfaTRdOwogICAgICAgICAgICAgICAgICAgIHZhciBfbGF5ZXJJbmZvNCA9IF90aGlzLl9ieVN0YW1wW2N0Z1tfa2V5Ml1dOwogICAgICAgICAgICAgICAgICAgIF90aGlzLl9zZXRPcGFjaXR5KF9sYXllckluZm80LCBzZWxlY3RlZEtleXNbX2dyb3VwS2V5czJbX2k0XV0gPyAxLjAgOiAwLjIpOwogICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgfTsKICAgICAgICAgICAgICB2YXIgc2VsSGFuZGxlID0gbmV3IGNyb3NzdGFsay5TZWxlY3Rpb25IYW5kbGUoY3RHcm91cCk7CiAgICAgICAgICAgICAgc2VsSGFuZGxlLm9uKCJjaGFuZ2UiLCBoYW5kbGVTZWxlY3Rpb24pOwoKICAgICAgICAgICAgICBzZXRUaW1lb3V0KGZ1bmN0aW9uICgpIHsKICAgICAgICAgICAgICAgIGhhbmRsZUZpbHRlcih7IHZhbHVlOiBmaWx0ZXJIYW5kbGUuZmlsdGVyZWRLZXlzIH0pOwogICAgICAgICAgICAgICAgaGFuZGxlU2VsZWN0aW9uKHsgdmFsdWU6IHNlbEhhbmRsZS52YWx1ZSB9KTsKICAgICAgICAgICAgICB9LCAxMDApOwogICAgICAgICAgICB9KSgpOwogICAgICAgICAgfQoKICAgICAgICAgIGlmICghY3RnW2N0S2V5XSkgY3RnW2N0S2V5XSA9IFtdOwogICAgICAgICAgY3RnW2N0S2V5XS5wdXNoKHN0YW1wKTsKICAgICAgICB9KSgpOwogICAgICB9CgogICAgICAvLyBBZGQgdG8gY29udGFpbmVyCiAgICAgIGlmICghbGF5ZXJJbmZvLmhpZGRlbikgY29udGFpbmVyLmFkZExheWVyKGxheWVyKTsKCiAgICAgIHJldHVybiBvbGRMYXllcjsKICAgIH0KICB9LCB7CiAgICBrZXk6ICJicnVzaCIsCiAgICB2YWx1ZTogZnVuY3Rpb24gYnJ1c2goYm91bmRzLCBleHRyYUluZm8pIHsKICAgICAgdmFyIF90aGlzMiA9IHRoaXM7CgogICAgICAvKiBlc2xpbnQtZGlzYWJsZSBuby1jb25zb2xlICovCgogICAgICAvLyBGb3IgZWFjaCBDcm9zc3RhbGsgZ3JvdXAuLi4KICAgICAgT2JqZWN0LmtleXModGhpcy5fYnlDcm9zc3RhbGtHcm91cCkuZm9yRWFjaChmdW5jdGlvbiAoY3RHcm91cE5hbWUpIHsKICAgICAgICB2YXIgY3RnID0gX3RoaXMyLl9ieUNyb3NzdGFsa0dyb3VwW2N0R3JvdXBOYW1lXTsKICAgICAgICB2YXIgc2VsZWN0aW9uID0gW107CiAgICAgICAgLy8gLi4uaXRlcmF0ZSBvdmVyIGVhY2ggQ3Jvc3N0YWxrIGtleSAoZWFjaCBvZiB3aGljaCBtYXkgaGF2ZSBtdWx0aXBsZQogICAgICAgIC8vIGxheWVycykuLi4KICAgICAgICBPYmplY3Qua2V5cyhjdGcpLmZvckVhY2goZnVuY3Rpb24gKGN0S2V5KSB7CiAgICAgICAgICAvLyAuLi5hbmQgZm9yIGVhY2ggbGF5ZXIuLi4KICAgICAgICAgIGN0Z1tjdEtleV0uZm9yRWFjaChmdW5jdGlvbiAoc3RhbXApIHsKICAgICAgICAgICAgdmFyIGxheWVySW5mbyA9IF90aGlzMi5fYnlTdGFtcFtzdGFtcF07CiAgICAgICAgICAgIC8vIC4uLmlmIGl0J3Mgc29tZXRoaW5nIHdpdGggYSBwb2ludC4uLgogICAgICAgICAgICBpZiAobGF5ZXJJbmZvLmxheWVyLmdldExhdExuZykgewogICAgICAgICAgICAgIC8vIC4uLiBhbmQgaXQncyBpbnNpZGUgdGhlIHNlbGVjdGlvbiBib3VuZHMuLi4KICAgICAgICAgICAgICAvLyBUT0RPOiBVc2UgcGl4ZWwgY29udGFpbm1lbnQsIG5vdCBsYXQvbG5nIGNvbnRhaW5tZW50CiAgICAgICAgICAgICAgaWYgKGJvdW5kcy5jb250YWlucyhsYXllckluZm8ubGF5ZXIuZ2V0TGF0TG5nKCkpKSB7CiAgICAgICAgICAgICAgICAvLyAuLi5hZGQgdGhlIGtleSB0byB0aGUgc2VsZWN0aW9uLgogICAgICAgICAgICAgICAgc2VsZWN0aW9uLnB1c2goY3RLZXkpOwogICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgICAgfSk7CiAgICAgICAgfSk7CiAgICAgICAgbmV3IGdsb2JhbC5jcm9zc3RhbGsuU2VsZWN0aW9uSGFuZGxlKGN0R3JvdXBOYW1lKS5zZXQoc2VsZWN0aW9uLCBleHRyYUluZm8pOwogICAgICB9KTsKICAgIH0KICB9LCB7CiAgICBrZXk6ICJ1bmJydXNoIiwKICAgIHZhbHVlOiBmdW5jdGlvbiB1bmJydXNoKGV4dHJhSW5mbykgewogICAgICBPYmplY3Qua2V5cyh0aGlzLl9ieUNyb3NzdGFsa0dyb3VwKS5mb3JFYWNoKGZ1bmN0aW9uIChjdEdyb3VwTmFtZSkgewogICAgICAgIG5ldyBnbG9iYWwuY3Jvc3N0YWxrLlNlbGVjdGlvbkhhbmRsZShjdEdyb3VwTmFtZSkuY2xlYXIoZXh0cmFJbmZvKTsKICAgICAgfSk7CiAgICB9CiAgfSwgewogICAga2V5OiAiX3NldFZpc2liaWxpdHkiLAogICAgdmFsdWU6IGZ1bmN0aW9uIF9zZXRWaXNpYmlsaXR5KGxheWVySW5mbywgdmlzaWJsZSkgewogICAgICBpZiAobGF5ZXJJbmZvLmhpZGRlbiBeIHZpc2libGUpIHsKICAgICAgICByZXR1cm47CiAgICAgIH0gZWxzZSBpZiAodmlzaWJsZSkgewogICAgICAgIGxheWVySW5mby5jb250YWluZXIuYWRkTGF5ZXIobGF5ZXJJbmZvLmxheWVyKTsKICAgICAgICBsYXllckluZm8uaGlkZGVuID0gZmFsc2U7CiAgICAgIH0gZWxzZSB7CiAgICAgICAgbGF5ZXJJbmZvLmNvbnRhaW5lci5yZW1vdmVMYXllcihsYXllckluZm8ubGF5ZXIpOwogICAgICAgIGxheWVySW5mby5oaWRkZW4gPSB0cnVlOwogICAgICB9CiAgICB9CiAgfSwgewogICAga2V5OiAiX3NldE9wYWNpdHkiLAogICAgdmFsdWU6IGZ1bmN0aW9uIF9zZXRPcGFjaXR5KGxheWVySW5mbywgb3BhY2l0eSkgewogICAgICBpZiAobGF5ZXJJbmZvLmxheWVyLnNldE9wYWNpdHkpIHsKICAgICAgICBsYXllckluZm8ubGF5ZXIuc2V0T3BhY2l0eShvcGFjaXR5KTsKICAgICAgfSBlbHNlIGlmIChsYXllckluZm8ubGF5ZXIuc2V0U3R5bGUpIHsKICAgICAgICBsYXllckluZm8ubGF5ZXIuc2V0U3R5bGUoewogICAgICAgICAgb3BhY2l0eTogb3BhY2l0eSAqIGxheWVySW5mby5sYXllci5vcHRpb25zLm9yaWdPcGFjaXR5LAogICAgICAgICAgZmlsbE9wYWNpdHk6IG9wYWNpdHkgKiBsYXllckluZm8ubGF5ZXIub3B0aW9ucy5vcmlnRmlsbE9wYWNpdHkKICAgICAgICB9KTsKICAgICAgfQogICAgfQogIH0sIHsKICAgIGtleTogImdldExheWVyIiwKICAgIHZhbHVlOiBmdW5jdGlvbiBnZXRMYXllcihjYXRlZ29yeSwgbGF5ZXJJZCkgewogICAgICByZXR1cm4gdGhpcy5fYnlMYXllcklkW3RoaXMuX2xheWVySWRLZXkoY2F0ZWdvcnksIGxheWVySWQpXTsKICAgIH0KICB9LCB7CiAgICBrZXk6ICJyZW1vdmVMYXllciIsCiAgICB2YWx1ZTogZnVuY3Rpb24gcmVtb3ZlTGF5ZXIoY2F0ZWdvcnksIGxheWVySWRzKSB7CiAgICAgIHZhciBfdGhpczMgPSB0aGlzOwoKICAgICAgLy8gRmluZCBsYXllciBpbmZvCiAgICAgIF9qcXVlcnkyLmRlZmF1bHQuZWFjaCgoMCwgX3V0aWwuYXNBcnJheSkobGF5ZXJJZHMpLCBmdW5jdGlvbiAoaSwgbGF5ZXJJZCkgewogICAgICAgIHZhciBsYXllciA9IF90aGlzMy5fYnlMYXllcklkW190aGlzMy5fbGF5ZXJJZEtleShjYXRlZ29yeSwgbGF5ZXJJZCldOwogICAgICAgIGlmIChsYXllcikgewogICAgICAgICAgX3RoaXMzLl9yZW1vdmVMYXllcihsYXllcik7CiAgICAgICAgfQogICAgICB9KTsKICAgIH0KICB9LCB7CiAgICBrZXk6ICJjbGVhckxheWVycyIsCiAgICB2YWx1ZTogZnVuY3Rpb24gY2xlYXJMYXllcnMoY2F0ZWdvcnkpIHsKICAgICAgdmFyIF90aGlzNCA9IHRoaXM7CgogICAgICAvLyBGaW5kIGFsbCBsYXllcnMgaW4gX2J5Q2F0ZWdvcnlbY2F0ZWdvcnldCiAgICAgIHZhciBjYXRUYWJsZSA9IHRoaXMuX2J5Q2F0ZWdvcnlbY2F0ZWdvcnldOwogICAgICBpZiAoIWNhdFRhYmxlKSB7CiAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICB9CgogICAgICAvLyBSZW1vdmUgYWxsIGxheWVycy4gTWFrZSBjb3B5IG9mIGtleXMgdG8gYXZvaWQgbXV0YXRpbmcgdGhlIGNvbGxlY3Rpb24KICAgICAgLy8gYmVoaW5kIHRoZSBpdGVyYXRvciB5b3UncmUgYWNjZXNzaW5nLgogICAgICB2YXIgc3RhbXBzID0gW107CiAgICAgIF9qcXVlcnkyLmRlZmF1bHQuZWFjaChjYXRUYWJsZSwgZnVuY3Rpb24gKGssIHYpIHsKICAgICAgICBzdGFtcHMucHVzaChrKTsKICAgICAgfSk7CiAgICAgIF9qcXVlcnkyLmRlZmF1bHQuZWFjaChzdGFtcHMsIGZ1bmN0aW9uIChpLCBzdGFtcCkgewogICAgICAgIF90aGlzNC5fcmVtb3ZlTGF5ZXIoc3RhbXApOwogICAgICB9KTsKICAgIH0KICB9LCB7CiAgICBrZXk6ICJnZXRMYXllckdyb3VwIiwKICAgIHZhbHVlOiBmdW5jdGlvbiBnZXRMYXllckdyb3VwKGdyb3VwLCBlbnN1cmVFeGlzdHMpIHsKICAgICAgdmFyIGcgPSB0aGlzLl9ncm91cENvbnRhaW5lcnNbZ3JvdXBdOwogICAgICBpZiAoZW5zdXJlRXhpc3RzICYmICFnKSB7CiAgICAgICAgdGhpcy5fYnlHcm91cFtncm91cF0gPSB0aGlzLl9ieUdyb3VwW2dyb3VwXSB8fCB7fTsKICAgICAgICBnID0gdGhpcy5fZ3JvdXBDb250YWluZXJzW2dyb3VwXSA9IF9sZWFmbGV0Mi5kZWZhdWx0LmZlYXR1cmVHcm91cCgpOwogICAgICAgIGcuZ3JvdXBuYW1lID0gZ3JvdXA7CiAgICAgICAgZy5hZGRUbyh0aGlzLl9tYXApOwogICAgICB9CiAgICAgIHJldHVybiBnOwogICAgfQogIH0sIHsKICAgIGtleTogImdldEdyb3VwTmFtZUZyb21MYXllckdyb3VwIiwKICAgIHZhbHVlOiBmdW5jdGlvbiBnZXRHcm91cE5hbWVGcm9tTGF5ZXJHcm91cChsYXllckdyb3VwKSB7CiAgICAgIHJldHVybiBsYXllckdyb3VwLmdyb3VwbmFtZTsKICAgIH0KICB9LCB7CiAgICBrZXk6ICJnZXRWaXNpYmxlR3JvdXBzIiwKICAgIHZhbHVlOiBmdW5jdGlvbiBnZXRWaXNpYmxlR3JvdXBzKCkgewogICAgICB2YXIgX3RoaXM1ID0gdGhpczsKCiAgICAgIHZhciByZXN1bHQgPSBbXTsKICAgICAgX2pxdWVyeTIuZGVmYXVsdC5lYWNoKHRoaXMuX2dyb3VwQ29udGFpbmVycywgZnVuY3Rpb24gKGssIHYpIHsKICAgICAgICBpZiAoX3RoaXM1Ll9tYXAuaGFzTGF5ZXIodikpIHsKICAgICAgICAgIHJlc3VsdC5wdXNoKGspOwogICAgICAgIH0KICAgICAgfSk7CiAgICAgIHJldHVybiByZXN1bHQ7CiAgICB9CiAgfSwgewogICAga2V5OiAiZ2V0QWxsR3JvdXBOYW1lcyIsCiAgICB2YWx1ZTogZnVuY3Rpb24gZ2V0QWxsR3JvdXBOYW1lcygpIHsKICAgICAgdmFyIHJlc3VsdCA9IFtdOwogICAgICBfanF1ZXJ5Mi5kZWZhdWx0LmVhY2godGhpcy5fZ3JvdXBDb250YWluZXJzLCBmdW5jdGlvbiAoaywgdikgewogICAgICAgIHJlc3VsdC5wdXNoKGspOwogICAgICB9KTsKICAgICAgcmV0dXJuIHJlc3VsdDsKICAgIH0KICB9LCB7CiAgICBrZXk6ICJjbGVhckdyb3VwIiwKICAgIHZhbHVlOiBmdW5jdGlvbiBjbGVhckdyb3VwKGdyb3VwKSB7CiAgICAgIHZhciBfdGhpczYgPSB0aGlzOwoKICAgICAgLy8gRmluZCBhbGwgbGF5ZXJzIGluIF9ieUdyb3VwW2dyb3VwXQogICAgICB2YXIgZ3JvdXBUYWJsZSA9IHRoaXMuX2J5R3JvdXBbZ3JvdXBdOwogICAgICBpZiAoIWdyb3VwVGFibGUpIHsKICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgIH0KCiAgICAgIC8vIFJlbW92ZSBhbGwgbGF5ZXJzLiBNYWtlIGNvcHkgb2Yga2V5cyB0byBhdm9pZCBtdXRhdGluZyB0aGUgY29sbGVjdGlvbgogICAgICAvLyBiZWhpbmQgdGhlIGl0ZXJhdG9yIHlvdSdyZSBhY2Nlc3NpbmcuCiAgICAgIHZhciBzdGFtcHMgPSBbXTsKICAgICAgX2pxdWVyeTIuZGVmYXVsdC5lYWNoKGdyb3VwVGFibGUsIGZ1bmN0aW9uIChrLCB2KSB7CiAgICAgICAgc3RhbXBzLnB1c2goayk7CiAgICAgIH0pOwogICAgICBfanF1ZXJ5Mi5kZWZhdWx0LmVhY2goc3RhbXBzLCBmdW5jdGlvbiAoaSwgc3RhbXApIHsKICAgICAgICBfdGhpczYuX3JlbW92ZUxheWVyKHN0YW1wKTsKICAgICAgfSk7CiAgICB9CiAgfSwgewogICAga2V5OiAiY2xlYXIiLAogICAgdmFsdWU6IGZ1bmN0aW9uIGNsZWFyKCkgewogICAgICBmdW5jdGlvbiBjbGVhckxheWVyR3JvdXAoa2V5LCBsYXllckdyb3VwKSB7CiAgICAgICAgbGF5ZXJHcm91cC5jbGVhckxheWVycygpOwogICAgICB9CiAgICAgIC8vIENsZWFyIGFsbCBpbmRpY2VzIGFuZCBsYXllckdyb3VwcwogICAgICB0aGlzLl9ieUdyb3VwID0ge307CiAgICAgIHRoaXMuX2J5Q2F0ZWdvcnkgPSB7fTsKICAgICAgdGhpcy5fYnlMYXllcklkID0ge307CiAgICAgIHRoaXMuX2J5U3RhbXAgPSB7fTsKICAgICAgdGhpcy5fYnlDcm9zc3RhbGtHcm91cCA9IHt9OwogICAgICBfanF1ZXJ5Mi5kZWZhdWx0LmVhY2godGhpcy5fY2F0ZWdvcnlDb250YWluZXJzLCBjbGVhckxheWVyR3JvdXApOwogICAgICB0aGlzLl9jYXRlZ29yeUNvbnRhaW5lcnMgPSB7fTsKICAgICAgX2pxdWVyeTIuZGVmYXVsdC5lYWNoKHRoaXMuX2dyb3VwQ29udGFpbmVycywgY2xlYXJMYXllckdyb3VwKTsKICAgICAgdGhpcy5fZ3JvdXBDb250YWluZXJzID0ge307CiAgICB9CiAgfSwgewogICAga2V5OiAiX3JlbW92ZUxheWVyIiwKICAgIHZhbHVlOiBmdW5jdGlvbiBfcmVtb3ZlTGF5ZXIobGF5ZXIpIHsKICAgICAgdmFyIHN0YW1wID0gdm9pZCAwOwogICAgICBpZiAodHlwZW9mIGxheWVyID09PSAic3RyaW5nIikgewogICAgICAgIHN0YW1wID0gbGF5ZXI7CiAgICAgIH0gZWxzZSB7CiAgICAgICAgc3RhbXAgPSBfbGVhZmxldDIuZGVmYXVsdC5VdGlsLnN0YW1wKGxheWVyKTsKICAgICAgfQoKICAgICAgdmFyIGxheWVySW5mbyA9IHRoaXMuX2J5U3RhbXBbc3RhbXBdOwogICAgICBpZiAoIWxheWVySW5mbykgewogICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgfQoKICAgICAgbGF5ZXJJbmZvLmNvbnRhaW5lci5yZW1vdmVMYXllcihzdGFtcCk7CiAgICAgIGlmICh0eXBlb2YgbGF5ZXJJbmZvLmdyb3VwID09PSAic3RyaW5nIikgewogICAgICAgIGRlbGV0ZSB0aGlzLl9ieUdyb3VwW2xheWVySW5mby5ncm91cF1bc3RhbXBdOwogICAgICB9CiAgICAgIGlmICh0eXBlb2YgbGF5ZXJJbmZvLmxheWVySWQgPT09ICJzdHJpbmciKSB7CiAgICAgICAgZGVsZXRlIHRoaXMuX2J5TGF5ZXJJZFt0aGlzLl9sYXllcklkS2V5KGxheWVySW5mby5jYXRlZ29yeSwgbGF5ZXJJbmZvLmxheWVySWQpXTsKICAgICAgfQogICAgICBkZWxldGUgdGhpcy5fYnlDYXRlZ29yeVtsYXllckluZm8uY2F0ZWdvcnldW3N0YW1wXTsKICAgICAgZGVsZXRlIHRoaXMuX2J5U3RhbXBbc3RhbXBdOwogICAgICBpZiAobGF5ZXJJbmZvLmN0R3JvdXApIHsKICAgICAgICB2YXIgY3RHcm91cCA9IHRoaXMuX2J5Q3Jvc3N0YWxrR3JvdXBbbGF5ZXJJbmZvLmN0R3JvdXBdOwogICAgICAgIHZhciBsYXllcnNGb3JLZXkgPSBjdEdyb3VwW2xheWVySW5mby5jdEtleV07CiAgICAgICAgdmFyIGlkeCA9IGxheWVyc0ZvcktleSA/IGxheWVyc0ZvcktleS5pbmRleE9mKHN0YW1wKSA6IC0xOwogICAgICAgIGlmIChpZHggPj0gMCkgewogICAgICAgICAgaWYgKGxheWVyc0ZvcktleS5sZW5ndGggPT09IDEpIHsKICAgICAgICAgICAgZGVsZXRlIGN0R3JvdXBbbGF5ZXJJbmZvLmN0S2V5XTsKICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgIGxheWVyc0ZvcktleS5zcGxpY2UoaWR4LCAxKTsKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgIH0KICAgIH0KICB9LCB7CiAgICBrZXk6ICJfbGF5ZXJJZEtleSIsCiAgICB2YWx1ZTogZnVuY3Rpb24gX2xheWVySWRLZXkoY2F0ZWdvcnksIGxheWVySWQpIHsKICAgICAgcmV0dXJuIGNhdGVnb3J5ICsgIlxuIiArIGxheWVySWQ7CiAgICB9CiAgfV0pOwoKICByZXR1cm4gTGF5ZXJNYW5hZ2VyOwp9KCk7CgpleHBvcnRzLmRlZmF1bHQgPSBMYXllck1hbmFnZXI7CgoKfSkuY2FsbCh0aGlzLHR5cGVvZiBnbG9iYWwgIT09ICJ1bmRlZmluZWQiID8gZ2xvYmFsIDogdHlwZW9mIHNlbGYgIT09ICJ1bmRlZmluZWQiID8gc2VsZiA6IHR5cGVvZiB3aW5kb3cgIT09ICJ1bmRlZmluZWQiID8gd2luZG93IDoge30pCn0seyIuL2dsb2JhbC9qcXVlcnkiOjcsIi4vZ2xvYmFsL2xlYWZsZXQiOjgsIi4vdXRpbCI6MTV9XSwxMzpbZnVuY3Rpb24ocmVxdWlyZSxtb2R1bGUsZXhwb3J0cyl7CihmdW5jdGlvbiAoZ2xvYmFsKXsKInVzZSBzdHJpY3QiOwoKT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsICJfX2VzTW9kdWxlIiwgewogIHZhbHVlOiB0cnVlCn0pOwoKdmFyIF90eXBlb2YgPSB0eXBlb2YgU3ltYm9sID09PSAiZnVuY3Rpb24iICYmIHR5cGVvZiBTeW1ib2wuaXRlcmF0b3IgPT09ICJzeW1ib2wiID8gZnVuY3Rpb24gKG9iaikgeyByZXR1cm4gdHlwZW9mIG9iajsgfSA6IGZ1bmN0aW9uIChvYmopIHsgcmV0dXJuIG9iaiAmJiB0eXBlb2YgU3ltYm9sID09PSAiZnVuY3Rpb24iICYmIG9iai5jb25zdHJ1Y3RvciA9PT0gU3ltYm9sID8gInN5bWJvbCIgOiB0eXBlb2Ygb2JqOyB9OwoKdmFyIF9qcXVlcnkgPSByZXF1aXJlKCIuL2dsb2JhbC9qcXVlcnkiKTsKCnZhciBfanF1ZXJ5MiA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQoX2pxdWVyeSk7Cgp2YXIgX2xlYWZsZXQgPSByZXF1aXJlKCIuL2dsb2JhbC9sZWFmbGV0Iik7Cgp2YXIgX2xlYWZsZXQyID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChfbGVhZmxldCk7Cgp2YXIgX3NoaW55ID0gcmVxdWlyZSgiLi9nbG9iYWwvc2hpbnkiKTsKCnZhciBfc2hpbnkyID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChfc2hpbnkpOwoKdmFyIF9odG1sd2lkZ2V0cyA9IHJlcXVpcmUoIi4vZ2xvYmFsL2h0bWx3aWRnZXRzIik7Cgp2YXIgX2h0bWx3aWRnZXRzMiA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQoX2h0bWx3aWRnZXRzKTsKCnZhciBfdXRpbCA9IHJlcXVpcmUoIi4vdXRpbCIpOwoKdmFyIF9jcnNfdXRpbHMgPSByZXF1aXJlKCIuL2Nyc191dGlscyIpOwoKdmFyIF9kYXRhZnJhbWUgPSByZXF1aXJlKCIuL2RhdGFmcmFtZSIpOwoKdmFyIF9kYXRhZnJhbWUyID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChfZGF0YWZyYW1lKTsKCnZhciBfY2x1c3RlckxheWVyU3RvcmUgPSByZXF1aXJlKCIuL2NsdXN0ZXItbGF5ZXItc3RvcmUiKTsKCnZhciBfY2x1c3RlckxheWVyU3RvcmUyID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChfY2x1c3RlckxheWVyU3RvcmUpOwoKdmFyIF9taXBtYXBwZXIgPSByZXF1aXJlKCIuL21pcG1hcHBlciIpOwoKdmFyIF9taXBtYXBwZXIyID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChfbWlwbWFwcGVyKTsKCmZ1bmN0aW9uIF9pbnRlcm9wUmVxdWlyZURlZmF1bHQob2JqKSB7IHJldHVybiBvYmogJiYgb2JqLl9fZXNNb2R1bGUgPyBvYmogOiB7IGRlZmF1bHQ6IG9iaiB9OyB9Cgp2YXIgbWV0aG9kcyA9IHt9OwpleHBvcnRzLmRlZmF1bHQgPSBtZXRob2RzOwoKCmZ1bmN0aW9uIG1vdXNlSGFuZGxlcihtYXBJZCwgbGF5ZXJJZCwgZ3JvdXAsIGV2ZW50TmFtZSwgZXh0cmFJbmZvKSB7CiAgcmV0dXJuIGZ1bmN0aW9uIChlKSB7CiAgICBpZiAoIV9odG1sd2lkZ2V0czIuZGVmYXVsdC5zaGlueU1vZGUpIHJldHVybjsKCiAgICB2YXIgZXZlbnRJbmZvID0gX2pxdWVyeTIuZGVmYXVsdC5leHRlbmQoewogICAgICBpZDogbGF5ZXJJZCwKICAgICAgIi5ub25jZSI6IE1hdGgucmFuZG9tKCkgLy8gZm9yY2UgcmVhY3Rpdml0eQogICAgfSwgZ3JvdXAgIT09IG51bGwgPyB7IGdyb3VwOiBncm91cCB9IDogbnVsbCwgZS50YXJnZXQuZ2V0TGF0TG5nID8gZS50YXJnZXQuZ2V0TGF0TG5nKCkgOiBlLmxhdGxuZywgZXh0cmFJbmZvKTsKCiAgICBfc2hpbnkyLmRlZmF1bHQub25JbnB1dENoYW5nZShtYXBJZCArICJfIiArIGV2ZW50TmFtZSwgZXZlbnRJbmZvKTsKICB9Owp9CgptZXRob2RzLm1vdXNlSGFuZGxlciA9IG1vdXNlSGFuZGxlcjsKCm1ldGhvZHMuY2xlYXJHcm91cCA9IGZ1bmN0aW9uIChncm91cCkgewogIHZhciBfdGhpcyA9IHRoaXM7CgogIF9qcXVlcnkyLmRlZmF1bHQuZWFjaCgoMCwgX3V0aWwuYXNBcnJheSkoZ3JvdXApLCBmdW5jdGlvbiAoaSwgdikgewogICAgX3RoaXMubGF5ZXJNYW5hZ2VyLmNsZWFyR3JvdXAodik7CiAgfSk7Cn07CgptZXRob2RzLnNldFZpZXcgPSBmdW5jdGlvbiAoY2VudGVyLCB6b29tLCBvcHRpb25zKSB7CiAgdGhpcy5zZXRWaWV3KGNlbnRlciwgem9vbSwgb3B0aW9ucyk7Cn07CgptZXRob2RzLmZpdEJvdW5kcyA9IGZ1bmN0aW9uIChsYXQxLCBsbmcxLCBsYXQyLCBsbmcyKSB7CiAgdGhpcy5maXRCb3VuZHMoW1tsYXQxLCBsbmcxXSwgW2xhdDIsIGxuZzJdXSk7Cn07CgptZXRob2RzLnNldE1heEJvdW5kcyA9IGZ1bmN0aW9uIChsYXQxLCBsbmcxLCBsYXQyLCBsbmcyKSB7CiAgdGhpcy5zZXRNYXhCb3VuZHMoW1tsYXQxLCBsbmcxXSwgW2xhdDIsIGxuZzJdXSk7Cn07CgptZXRob2RzLmFkZFBvcHVwcyA9IGZ1bmN0aW9uIChsYXQsIGxuZywgcG9wdXAsIGxheWVySWQsIGdyb3VwLCBvcHRpb25zKSB7CiAgdmFyIF90aGlzMiA9IHRoaXM7CgogIHZhciBkZiA9IG5ldyBfZGF0YWZyYW1lMi5kZWZhdWx0KCkuY29sKCJsYXQiLCBsYXQpLmNvbCgibG5nIiwgbG5nKS5jb2woInBvcHVwIiwgcG9wdXApLmNvbCgibGF5ZXJJZCIsIGxheWVySWQpLmNvbCgiZ3JvdXAiLCBncm91cCkuY2JpbmQob3B0aW9ucyk7CgogIHZhciBfbG9vcCA9IGZ1bmN0aW9uIF9sb29wKGkpIHsKICAgIGlmIChfanF1ZXJ5Mi5kZWZhdWx0LmlzTnVtZXJpYyhkZi5nZXQoaSwgImxhdCIpKSAmJiBfanF1ZXJ5Mi5kZWZhdWx0LmlzTnVtZXJpYyhkZi5nZXQoaSwgImxuZyIpKSkgewogICAgICAoZnVuY3Rpb24gKCkgewogICAgICAgIHZhciBwb3B1cCA9IF9sZWFmbGV0Mi5kZWZhdWx0LnBvcHVwKGRmLmdldChpKSkuc2V0TGF0TG5nKFtkZi5nZXQoaSwgImxhdCIpLCBkZi5nZXQoaSwgImxuZyIpXSkuc2V0Q29udGVudChkZi5nZXQoaSwgInBvcHVwIikpOwogICAgICAgIHZhciB0aGlzSWQgPSBkZi5nZXQoaSwgImxheWVySWQiKTsKICAgICAgICB2YXIgdGhpc0dyb3VwID0gZGYuZ2V0KGksICJncm91cCIpOwogICAgICAgIHRoaXMubGF5ZXJNYW5hZ2VyLmFkZExheWVyKHBvcHVwLCAicG9wdXAiLCB0aGlzSWQsIHRoaXNHcm91cCk7CiAgICAgIH0pLmNhbGwoX3RoaXMyKTsKICAgIH0KICB9OwoKICBmb3IgKHZhciBpID0gMDsgaSA8IGRmLm5yb3coKTsgaSsrKSB7CiAgICBfbG9vcChpKTsKICB9Cn07CgptZXRob2RzLnJlbW92ZVBvcHVwID0gZnVuY3Rpb24gKGxheWVySWQpIHsKICB0aGlzLmxheWVyTWFuYWdlci5yZW1vdmVMYXllcigicG9wdXAiLCBsYXllcklkKTsKfTsKCm1ldGhvZHMuY2xlYXJQb3B1cHMgPSBmdW5jdGlvbiAoKSB7CiAgdGhpcy5sYXllck1hbmFnZXIuY2xlYXJMYXllcnMoInBvcHVwIik7Cn07CgptZXRob2RzLmFkZFRpbGVzID0gZnVuY3Rpb24gKHVybFRlbXBsYXRlLCBsYXllcklkLCBncm91cCwgb3B0aW9ucykgewogIHRoaXMubGF5ZXJNYW5hZ2VyLmFkZExheWVyKF9sZWFmbGV0Mi5kZWZhdWx0LnRpbGVMYXllcih1cmxUZW1wbGF0ZSwgb3B0aW9ucyksICJ0aWxlIiwgbGF5ZXJJZCwgZ3JvdXApOwp9OwoKbWV0aG9kcy5yZW1vdmVUaWxlcyA9IGZ1bmN0aW9uIChsYXllcklkKSB7CiAgdGhpcy5sYXllck1hbmFnZXIucmVtb3ZlTGF5ZXIoInRpbGUiLCBsYXllcklkKTsKfTsKCm1ldGhvZHMuY2xlYXJUaWxlcyA9IGZ1bmN0aW9uICgpIHsKICB0aGlzLmxheWVyTWFuYWdlci5jbGVhckxheWVycygidGlsZSIpOwp9OwoKbWV0aG9kcy5hZGRXTVNUaWxlcyA9IGZ1bmN0aW9uIChiYXNlVXJsLCBsYXllcklkLCBncm91cCwgb3B0aW9ucykgewogIGlmIChvcHRpb25zICYmIG9wdGlvbnMuY3JzKSB7CiAgICBvcHRpb25zLmNycyA9ICgwLCBfY3JzX3V0aWxzLmdldENSUykob3B0aW9ucy5jcnMpOwogIH0KICB0aGlzLmxheWVyTWFuYWdlci5hZGRMYXllcihfbGVhZmxldDIuZGVmYXVsdC50aWxlTGF5ZXIud21zKGJhc2VVcmwsIG9wdGlvbnMpLCAidGlsZSIsIGxheWVySWQsIGdyb3VwKTsKfTsKCi8vIEdpdmVuOgovLyAgIHtkYXRhOiBbImEiLCAiYiIsICJjIl0sIGluZGV4OiBbMCwgMSwgMCwgMl19Ci8vIHJldHVybnM6Ci8vICAgWyJhIiwgImIiLCAiYSIsICJjIl0KZnVuY3Rpb24gdW5wYWNrU3RyaW5ncyhpY29uc2V0KSB7CiAgaWYgKCFpY29uc2V0KSB7CiAgICByZXR1cm4gaWNvbnNldDsKICB9CiAgaWYgKHR5cGVvZiBpY29uc2V0LmluZGV4ID09PSAidW5kZWZpbmVkIikgewogICAgcmV0dXJuIGljb25zZXQ7CiAgfQoKICBpY29uc2V0LmRhdGEgPSAoMCwgX3V0aWwuYXNBcnJheSkoaWNvbnNldC5kYXRhKTsKICBpY29uc2V0LmluZGV4ID0gKDAsIF91dGlsLmFzQXJyYXkpKGljb25zZXQuaW5kZXgpOwoKICByZXR1cm4gX2pxdWVyeTIuZGVmYXVsdC5tYXAoaWNvbnNldC5pbmRleCwgZnVuY3Rpb24gKGUsIGkpIHsKICAgIHJldHVybiBpY29uc2V0LmRhdGFbZV07CiAgfSk7Cn0KCmZ1bmN0aW9uIGFkZE1hcmtlcnMobWFwLCBkZiwgZ3JvdXAsIGNsdXN0ZXJPcHRpb25zLCBjbHVzdGVySWQsIG1hcmtlckZ1bmMpIHsKICAoZnVuY3Rpb24gKCkgewogICAgdmFyIF90aGlzMyA9IHRoaXM7CgogICAgdmFyIGNsdXN0ZXJHcm91cCA9IHRoaXMubGF5ZXJNYW5hZ2VyLmdldExheWVyKCJjbHVzdGVyIiwgY2x1c3RlcklkKSwKICAgICAgICBjbHVzdGVyID0gY2x1c3Rlck9wdGlvbnMgIT09IG51bGw7CiAgICBpZiAoY2x1c3RlciAmJiAhY2x1c3Rlckdyb3VwKSB7CiAgICAgIGNsdXN0ZXJHcm91cCA9IF9sZWFmbGV0Mi5kZWZhdWx0Lm1hcmtlckNsdXN0ZXJHcm91cC5sYXllclN1cHBvcnQoY2x1c3Rlck9wdGlvbnMpOwogICAgICBpZiAoY2x1c3Rlck9wdGlvbnMuZnJlZXplQXRab29tKSB7CiAgICAgICAgdmFyIGZyZWV6ZUF0Wm9vbSA9IGNsdXN0ZXJPcHRpb25zLmZyZWV6ZUF0Wm9vbTsKICAgICAgICBkZWxldGUgY2x1c3Rlck9wdGlvbnMuZnJlZXplQXRab29tOwogICAgICAgIGNsdXN0ZXJHcm91cC5mcmVlemVBdFpvb20oZnJlZXplQXRab29tKTsKICAgICAgfQogICAgICBjbHVzdGVyR3JvdXAuY2x1c3RlckxheWVyU3RvcmUgPSBuZXcgX2NsdXN0ZXJMYXllclN0b3JlMi5kZWZhdWx0KGNsdXN0ZXJHcm91cCk7CiAgICB9CiAgICB2YXIgZXh0cmFJbmZvID0gY2x1c3RlciA/IHsgY2x1c3RlcklkOiBjbHVzdGVySWQgfSA6IHt9OwoKICAgIHZhciBfbG9vcDIgPSBmdW5jdGlvbiBfbG9vcDIoaSkgewogICAgICBpZiAoX2pxdWVyeTIuZGVmYXVsdC5pc051bWVyaWMoZGYuZ2V0KGksICJsYXQiKSkgJiYgX2pxdWVyeTIuZGVmYXVsdC5pc051bWVyaWMoZGYuZ2V0KGksICJsbmciKSkpIHsKICAgICAgICAoZnVuY3Rpb24gKCkgewogICAgICAgICAgdmFyIG1hcmtlciA9IG1hcmtlckZ1bmMoZGYsIGkpOwogICAgICAgICAgdmFyIHRoaXNJZCA9IGRmLmdldChpLCAibGF5ZXJJZCIpOwogICAgICAgICAgdmFyIHRoaXNHcm91cCA9IGNsdXN0ZXIgPyBudWxsIDogZGYuZ2V0KGksICJncm91cCIpOwogICAgICAgICAgaWYgKGNsdXN0ZXIpIHsKICAgICAgICAgICAgY2x1c3Rlckdyb3VwLmNsdXN0ZXJMYXllclN0b3JlLmFkZChtYXJrZXIsIHRoaXNJZCk7CiAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICB0aGlzLmxheWVyTWFuYWdlci5hZGRMYXllcihtYXJrZXIsICJtYXJrZXIiLCB0aGlzSWQsIHRoaXNHcm91cCwgZGYuZ2V0KGksICJjdEdyb3VwIiwgdHJ1ZSksIGRmLmdldChpLCAiY3RLZXkiLCB0cnVlKSk7CiAgICAgICAgICB9CiAgICAgICAgICB2YXIgcG9wdXAgPSBkZi5nZXQoaSwgInBvcHVwIik7CiAgICAgICAgICB2YXIgcG9wdXBPcHRpb25zID0gZGYuZ2V0KGksICJwb3B1cE9wdGlvbnMiKTsKICAgICAgICAgIGlmIChwb3B1cCAhPT0gbnVsbCkgewogICAgICAgICAgICBpZiAocG9wdXBPcHRpb25zICE9PSBudWxsKSB7CiAgICAgICAgICAgICAgbWFya2VyLmJpbmRQb3B1cChwb3B1cCwgcG9wdXBPcHRpb25zKTsKICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICBtYXJrZXIuYmluZFBvcHVwKHBvcHVwKTsKICAgICAgICAgICAgfQogICAgICAgICAgfQogICAgICAgICAgdmFyIGxhYmVsID0gZGYuZ2V0KGksICJsYWJlbCIpOwogICAgICAgICAgdmFyIGxhYmVsT3B0aW9ucyA9IGRmLmdldChpLCAibGFiZWxPcHRpb25zIik7CiAgICAgICAgICBpZiAobGFiZWwgIT09IG51bGwpIHsKICAgICAgICAgICAgaWYgKGxhYmVsT3B0aW9ucyAhPT0gbnVsbCkgewogICAgICAgICAgICAgIGlmIChsYWJlbE9wdGlvbnMubm9IaWRlKSB7CiAgICAgICAgICAgICAgICBtYXJrZXIuYmluZExhYmVsKGxhYmVsLCBsYWJlbE9wdGlvbnMpLnNob3dMYWJlbCgpOwogICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICBtYXJrZXIuYmluZExhYmVsKGxhYmVsLCBsYWJlbE9wdGlvbnMpOwogICAgICAgICAgICAgIH0KICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICBtYXJrZXIuYmluZExhYmVsKGxhYmVsKTsKICAgICAgICAgICAgfQogICAgICAgICAgfQogICAgICAgICAgbWFya2VyLm9uKCJjbGljayIsIG1vdXNlSGFuZGxlcih0aGlzLmlkLCB0aGlzSWQsIHRoaXNHcm91cCwgIm1hcmtlcl9jbGljayIsIGV4dHJhSW5mbyksIHRoaXMpOwogICAgICAgICAgbWFya2VyLm9uKCJtb3VzZW92ZXIiLCBtb3VzZUhhbmRsZXIodGhpcy5pZCwgdGhpc0lkLCB0aGlzR3JvdXAsICJtYXJrZXJfbW91c2VvdmVyIiwgZXh0cmFJbmZvKSwgdGhpcyk7CiAgICAgICAgICBtYXJrZXIub24oIm1vdXNlb3V0IiwgbW91c2VIYW5kbGVyKHRoaXMuaWQsIHRoaXNJZCwgdGhpc0dyb3VwLCAibWFya2VyX21vdXNlb3V0IiwgZXh0cmFJbmZvKSwgdGhpcyk7CiAgICAgICAgfSkuY2FsbChfdGhpczMpOwogICAgICB9CiAgICB9OwoKICAgIGZvciAodmFyIGkgPSAwOyBpIDwgZGYubnJvdygpOyBpKyspIHsKICAgICAgX2xvb3AyKGkpOwogICAgfQoKICAgIGlmIChjbHVzdGVyKSB7CiAgICAgIHRoaXMubGF5ZXJNYW5hZ2VyLmFkZExheWVyKGNsdXN0ZXJHcm91cCwgImNsdXN0ZXIiLCBjbHVzdGVySWQsIGdyb3VwKTsKICAgIH0KICB9KS5jYWxsKG1hcCk7Cn0KCm1ldGhvZHMuYWRkR2VuZXJpY01hcmtlcnMgPSBhZGRNYXJrZXJzOwoKbWV0aG9kcy5hZGRNYXJrZXJzID0gZnVuY3Rpb24gKGxhdCwgbG5nLCBpY29uLCBsYXllcklkLCBncm91cCwgb3B0aW9ucywgcG9wdXAsIHBvcHVwT3B0aW9ucywgY2x1c3Rlck9wdGlvbnMsIGNsdXN0ZXJJZCwgbGFiZWwsIGxhYmVsT3B0aW9ucywgY3Jvc3N0YWxrT3B0aW9ucykgewogIHZhciBpY29uZGYgPSB2b2lkIDA7CiAgdmFyIGdldEljb24gPSB2b2lkIDA7CgogIGlmIChpY29uKSB7CiAgICAvLyBVbnBhY2sgaWNvbnMKICAgIGljb24uaWNvblVybCA9IHVucGFja1N0cmluZ3MoaWNvbi5pY29uVXJsKTsKICAgIGljb24uaWNvblJldGluYVVybCA9IHVucGFja1N0cmluZ3MoaWNvbi5pY29uUmV0aW5hVXJsKTsKICAgIGljb24uc2hhZG93VXJsID0gdW5wYWNrU3RyaW5ncyhpY29uLnNoYWRvd1VybCk7CiAgICBpY29uLnNoYWRvd1JldGluYVVybCA9IHVucGFja1N0cmluZ3MoaWNvbi5zaGFkb3dSZXRpbmFVcmwpOwoKICAgIC8vIFRoaXMgY2JpbmRzIHRoZSBpY29uIFVSTHMgYW5kIGFueSBvdGhlciBpY29uIG9wdGlvbnM7IHRoZXkncmUgYWxsCiAgICAvLyBwcmVzZW50IG9uIHRoZSBpY29uIG9iamVjdC4KICAgIGljb25kZiA9IG5ldyBfZGF0YWZyYW1lMi5kZWZhdWx0KCkuY2JpbmQoaWNvbik7CgogICAgLy8gQ29uc3RydWN0cyBhbiBpY29uIGZyb20gYSBzcGVjaWZpZWQgcm93IG9mIHRoZSBpY29uIGRhdGFmcmFtZS4KICAgIGdldEljb24gPSBmdW5jdGlvbiBnZXRJY29uKGkpIHsKICAgICAgdmFyIG9wdHMgPSBpY29uZGYuZ2V0KGkpOwogICAgICBpZiAoIW9wdHMuaWNvblVybCkgewogICAgICAgIHJldHVybiBuZXcgX2xlYWZsZXQyLmRlZmF1bHQuSWNvbi5EZWZhdWx0KCk7CiAgICAgIH0KCiAgICAgIC8vIENvbXBvc2l0ZSBvcHRpb25zIChsaWtlIHBvaW50cyBvciBzaXplcykgYXJlIHBhc3NlZCBmcm9tIFIgd2l0aCBlYWNoCiAgICAgIC8vIGluZGl2aWR1YWwgY29tcG9uZW50IGFzIGl0cyBvd24gb3B0aW9uLiBXZSBuZWVkIHRvIGNvbWJpbmUgdGhlbSBub3cKICAgICAgLy8gaW50byB0aGVpciBjb21wb3NpdGUgZm9ybS4KICAgICAgaWYgKG9wdHMuaWNvbldpZHRoKSB7CiAgICAgICAgb3B0cy5pY29uU2l6ZSA9IFtvcHRzLmljb25XaWR0aCwgb3B0cy5pY29uSGVpZ2h0XTsKICAgICAgfQogICAgICBpZiAob3B0cy5zaGFkb3dXaWR0aCkgewogICAgICAgIG9wdHMuc2hhZG93U2l6ZSA9IFtvcHRzLnNoYWRvd1dpZHRoLCBvcHRzLnNoYWRvd0hlaWdodF07CiAgICAgIH0KICAgICAgaWYgKG9wdHMuaWNvbkFuY2hvclgpIHsKICAgICAgICBvcHRzLmljb25BbmNob3IgPSBbb3B0cy5pY29uQW5jaG9yWCwgb3B0cy5pY29uQW5jaG9yWV07CiAgICAgIH0KICAgICAgaWYgKG9wdHMuc2hhZG93QW5jaG9yWCkgewogICAgICAgIG9wdHMuc2hhZG93QW5jaG9yID0gW29wdHMuc2hhZG93QW5jaG9yWCwgb3B0cy5zaGFkb3dBbmNob3JZXTsKICAgICAgfQogICAgICBpZiAob3B0cy5wb3B1cEFuY2hvclgpIHsKICAgICAgICBvcHRzLnBvcHVwQW5jaG9yID0gW29wdHMucG9wdXBBbmNob3JYLCBvcHRzLnBvcHVwQW5jaG9yWV07CiAgICAgIH0KCiAgICAgIHJldHVybiBuZXcgX2xlYWZsZXQyLmRlZmF1bHQuSWNvbihvcHRzKTsKICAgIH07CiAgfQoKICBpZiAoIShfanF1ZXJ5Mi5kZWZhdWx0LmlzRW1wdHlPYmplY3QobGF0KSB8fCBfanF1ZXJ5Mi5kZWZhdWx0LmlzRW1wdHlPYmplY3QobG5nKSkgfHwgX2pxdWVyeTIuZGVmYXVsdC5pc051bWVyaWMobGF0KSAmJiBfanF1ZXJ5Mi5kZWZhdWx0LmlzTnVtZXJpYyhsbmcpKSB7CgogICAgdmFyIGRmID0gbmV3IF9kYXRhZnJhbWUyLmRlZmF1bHQoKS5jb2woImxhdCIsIGxhdCkuY29sKCJsbmciLCBsbmcpLmNvbCgibGF5ZXJJZCIsIGxheWVySWQpLmNvbCgiZ3JvdXAiLCBncm91cCkuY29sKCJwb3B1cCIsIHBvcHVwKS5jb2woInBvcHVwT3B0aW9ucyIsIHBvcHVwT3B0aW9ucykuY29sKCJsYWJlbCIsIGxhYmVsKS5jb2woImxhYmVsT3B0aW9ucyIsIGxhYmVsT3B0aW9ucykuY2JpbmQob3B0aW9ucykuY2JpbmQoY3Jvc3N0YWxrT3B0aW9ucyB8fCB7fSk7CgogICAgaWYgKGljb24pIGljb25kZi5lZmZlY3RpdmVMZW5ndGggPSBkZi5ucm93KCk7CgogICAgYWRkTWFya2Vycyh0aGlzLCBkZiwgZ3JvdXAsIGNsdXN0ZXJPcHRpb25zLCBjbHVzdGVySWQsIGZ1bmN0aW9uIChkZiwgaSkgewogICAgICB2YXIgb3B0aW9ucyA9IGRmLmdldChpKTsKICAgICAgaWYgKGljb24pIG9wdGlvbnMuaWNvbiA9IGdldEljb24oaSk7CiAgICAgIHJldHVybiBfbGVhZmxldDIuZGVmYXVsdC5tYXJrZXIoW2RmLmdldChpLCAibGF0IiksIGRmLmdldChpLCAibG5nIildLCBvcHRpb25zKTsKICAgIH0pOwogIH0KfTsKCm1ldGhvZHMuYWRkQXdlc29tZU1hcmtlcnMgPSBmdW5jdGlvbiAobGF0LCBsbmcsIGljb24sIGxheWVySWQsIGdyb3VwLCBvcHRpb25zLCBwb3B1cCwgcG9wdXBPcHRpb25zLCBjbHVzdGVyT3B0aW9ucywgY2x1c3RlcklkLCBsYWJlbCwgbGFiZWxPcHRpb25zLCBjcm9zc3RhbGtPcHRpb25zKSB7CiAgdmFyIGljb25kZiA9IHZvaWQgMDsKICB2YXIgZ2V0SWNvbiA9IHZvaWQgMDsKICBpZiAoaWNvbikgewoKICAgIC8vIFRoaXMgY2JpbmRzIHRoZSBpY29uIFVSTHMgYW5kIGFueSBvdGhlciBpY29uIG9wdGlvbnM7IHRoZXkncmUgYWxsCiAgICAvLyBwcmVzZW50IG9uIHRoZSBpY29uIG9iamVjdC4KICAgIGljb25kZiA9IG5ldyBfZGF0YWZyYW1lMi5kZWZhdWx0KCkuY2JpbmQoaWNvbik7CgogICAgLy8gQ29uc3RydWN0cyBhbiBpY29uIGZyb20gYSBzcGVjaWZpZWQgcm93IG9mIHRoZSBpY29uIGRhdGFmcmFtZS4KICAgIGdldEljb24gPSBmdW5jdGlvbiBnZXRJY29uKGkpIHsKICAgICAgdmFyIG9wdHMgPSBpY29uZGYuZ2V0KGkpOwogICAgICBpZiAoIW9wdHMpIHsKICAgICAgICByZXR1cm4gbmV3IF9sZWFmbGV0Mi5kZWZhdWx0LkF3ZXNvbWVNYXJrZXJzLmljb24oKTsKICAgICAgfQoKICAgICAgaWYgKG9wdHMuc3F1YXJlTWFya2VyKSB7CiAgICAgICAgb3B0cy5jbGFzc05hbWUgPSAiYXdlc29tZS1tYXJrZXIgYXdlc29tZS1tYXJrZXItc3F1YXJlIjsKICAgICAgfQogICAgICByZXR1cm4gbmV3IF9sZWFmbGV0Mi5kZWZhdWx0LkF3ZXNvbWVNYXJrZXJzLmljb24ob3B0cyk7CiAgICB9OwogIH0KCiAgaWYgKCEoX2pxdWVyeTIuZGVmYXVsdC5pc0VtcHR5T2JqZWN0KGxhdCkgfHwgX2pxdWVyeTIuZGVmYXVsdC5pc0VtcHR5T2JqZWN0KGxuZykpIHx8IF9qcXVlcnkyLmRlZmF1bHQuaXNOdW1lcmljKGxhdCkgJiYgX2pxdWVyeTIuZGVmYXVsdC5pc051bWVyaWMobG5nKSkgewoKICAgIHZhciBkZiA9IG5ldyBfZGF0YWZyYW1lMi5kZWZhdWx0KCkuY29sKCJsYXQiLCBsYXQpLmNvbCgibG5nIiwgbG5nKS5jb2woImxheWVySWQiLCBsYXllcklkKS5jb2woImdyb3VwIiwgZ3JvdXApLmNvbCgicG9wdXAiLCBwb3B1cCkuY29sKCJwb3B1cE9wdGlvbnMiLCBwb3B1cE9wdGlvbnMpLmNvbCgibGFiZWwiLCBsYWJlbCkuY29sKCJsYWJlbE9wdGlvbnMiLCBsYWJlbE9wdGlvbnMpLmNiaW5kKG9wdGlvbnMpLmNiaW5kKGNyb3NzdGFsa09wdGlvbnMgfHwge30pOwoKICAgIGlmIChpY29uKSBpY29uZGYuZWZmZWN0aXZlTGVuZ3RoID0gZGYubnJvdygpOwoKICAgIGFkZE1hcmtlcnModGhpcywgZGYsIGdyb3VwLCBjbHVzdGVyT3B0aW9ucywgY2x1c3RlcklkLCBmdW5jdGlvbiAoZGYsIGkpIHsKICAgICAgdmFyIG9wdGlvbnMgPSBkZi5nZXQoaSk7CiAgICAgIGlmIChpY29uKSBvcHRpb25zLmljb24gPSBnZXRJY29uKGkpOwogICAgICByZXR1cm4gX2xlYWZsZXQyLmRlZmF1bHQubWFya2VyKFtkZi5nZXQoaSwgImxhdCIpLCBkZi5nZXQoaSwgImxuZyIpXSwgb3B0aW9ucyk7CiAgICB9KTsKICB9Cn07CgpmdW5jdGlvbiBhZGRMYXllcnMobWFwLCBjYXRlZ29yeSwgZGYsIGxheWVyRnVuYykgewogIHZhciBfbG9vcDMgPSBmdW5jdGlvbiBfbG9vcDMoaSkgewogICAgKGZ1bmN0aW9uICgpIHsKICAgICAgdmFyIF90aGlzNCA9IHRoaXM7CgogICAgICB2YXIgbGF5ZXIgPSBsYXllckZ1bmMoZGYsIGkpOwogICAgICBpZiAoIV9qcXVlcnkyLmRlZmF1bHQuaXNFbXB0eU9iamVjdChsYXllcikpIHsKICAgICAgICAoZnVuY3Rpb24gKCkgewogICAgICAgICAgdmFyIHRoaXNJZCA9IGRmLmdldChpLCAibGF5ZXJJZCIpOwogICAgICAgICAgdmFyIHRoaXNHcm91cCA9IGRmLmdldChpLCAiZ3JvdXAiKTsKICAgICAgICAgIF90aGlzNC5sYXllck1hbmFnZXIuYWRkTGF5ZXIobGF5ZXIsIGNhdGVnb3J5LCB0aGlzSWQsIHRoaXNHcm91cCwgZGYuZ2V0KGksICJjdEdyb3VwIiwgdHJ1ZSksIGRmLmdldChpLCAiY3RLZXkiLCB0cnVlKSk7CiAgICAgICAgICBpZiAobGF5ZXIuYmluZFBvcHVwKSB7CiAgICAgICAgICAgIHZhciBwb3B1cCA9IGRmLmdldChpLCAicG9wdXAiKTsKICAgICAgICAgICAgdmFyIHBvcHVwT3B0aW9ucyA9IGRmLmdldChpLCAicG9wdXBPcHRpb25zIik7CiAgICAgICAgICAgIGlmIChwb3B1cCAhPT0gbnVsbCkgewogICAgICAgICAgICAgIGlmIChwb3B1cE9wdGlvbnMgIT09IG51bGwpIHsKICAgICAgICAgICAgICAgIGxheWVyLmJpbmRQb3B1cChwb3B1cCwgcG9wdXBPcHRpb25zKTsKICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgbGF5ZXIuYmluZFBvcHVwKHBvcHVwKTsKICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICAgIH0KICAgICAgICAgIGlmIChsYXllci5iaW5kTGFiZWwpIHsKICAgICAgICAgICAgdmFyIGxhYmVsID0gZGYuZ2V0KGksICJsYWJlbCIpOwogICAgICAgICAgICB2YXIgbGFiZWxPcHRpb25zID0gZGYuZ2V0KGksICJsYWJlbE9wdGlvbnMiKTsKICAgICAgICAgICAgaWYgKGxhYmVsICE9PSBudWxsKSB7CiAgICAgICAgICAgICAgaWYgKGxhYmVsT3B0aW9ucyAhPT0gbnVsbCkgewogICAgICAgICAgICAgICAgbGF5ZXIuYmluZExhYmVsKGxhYmVsLCBsYWJlbE9wdGlvbnMpOwogICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICBsYXllci5iaW5kTGFiZWwobGFiZWwpOwogICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgICAgfQogICAgICAgICAgbGF5ZXIub24oImNsaWNrIiwgbW91c2VIYW5kbGVyKF90aGlzNC5pZCwgdGhpc0lkLCB0aGlzR3JvdXAsIGNhdGVnb3J5ICsgIl9jbGljayIpLCBfdGhpczQpOwogICAgICAgICAgbGF5ZXIub24oIm1vdXNlb3ZlciIsIG1vdXNlSGFuZGxlcihfdGhpczQuaWQsIHRoaXNJZCwgdGhpc0dyb3VwLCBjYXRlZ29yeSArICJfbW91c2VvdmVyIiksIF90aGlzNCk7CiAgICAgICAgICBsYXllci5vbigibW91c2VvdXQiLCBtb3VzZUhhbmRsZXIoX3RoaXM0LmlkLCB0aGlzSWQsIHRoaXNHcm91cCwgY2F0ZWdvcnkgKyAiX21vdXNlb3V0IiksIF90aGlzNCk7CiAgICAgICAgICB2YXIgaGlnaGxpZ2h0U3R5bGUgPSBkZi5nZXQoaSwgImhpZ2hsaWdodE9wdGlvbnMiKTsKCiAgICAgICAgICBpZiAoIV9qcXVlcnkyLmRlZmF1bHQuaXNFbXB0eU9iamVjdChoaWdobGlnaHRTdHlsZSkpIHsKICAgICAgICAgICAgKGZ1bmN0aW9uICgpIHsKCiAgICAgICAgICAgICAgdmFyIGRlZmF1bHRTdHlsZSA9IHt9OwogICAgICAgICAgICAgIF9qcXVlcnkyLmRlZmF1bHQuZWFjaChoaWdobGlnaHRTdHlsZSwgZnVuY3Rpb24gKGssIHYpIHsKICAgICAgICAgICAgICAgIGlmIChrICE9ICJicmluZ1RvRnJvbnQiICYmIGsgIT0gInNlbmRUb0JhY2siKSB7CiAgICAgICAgICAgICAgICAgIGlmIChkZi5nZXQoaSwgaykpIHsKICAgICAgICAgICAgICAgICAgICBkZWZhdWx0U3R5bGVba10gPSBkZi5nZXQoaSwgayk7CiAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICB9KTsKCiAgICAgICAgICAgICAgbGF5ZXIub24oIm1vdXNlb3ZlciIsIGZ1bmN0aW9uIChlKSB7CiAgICAgICAgICAgICAgICB0aGlzLnNldFN0eWxlKGhpZ2hsaWdodFN0eWxlKTsKICAgICAgICAgICAgICAgIGlmIChoaWdobGlnaHRTdHlsZS5icmluZ1RvRnJvbnQpIHsKICAgICAgICAgICAgICAgICAgdGhpcy5icmluZ1RvRnJvbnQoKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICBsYXllci5vbigibW91c2VvdXQiLCBmdW5jdGlvbiAoZSkgewogICAgICAgICAgICAgICAgdGhpcy5zZXRTdHlsZShkZWZhdWx0U3R5bGUpOwogICAgICAgICAgICAgICAgaWYgKGhpZ2hsaWdodFN0eWxlLnNlbmRUb0JhY2spIHsKICAgICAgICAgICAgICAgICAgdGhpcy5icmluZ1RvQmFjaygpOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgIH0pOwogICAgICAgICAgICB9KSgpOwogICAgICAgICAgfQogICAgICAgIH0pKCk7CiAgICAgIH0KICAgIH0pLmNhbGwobWFwKTsKICB9OwoKICBmb3IgKHZhciBpID0gMDsgaSA8IGRmLm5yb3coKTsgaSsrKSB7CiAgICBfbG9vcDMoaSk7CiAgfQp9CgptZXRob2RzLmFkZEdlbmVyaWNMYXllcnMgPSBhZGRMYXllcnM7CgptZXRob2RzLmFkZENpcmNsZXMgPSBmdW5jdGlvbiAobGF0LCBsbmcsIHJhZGl1cywgbGF5ZXJJZCwgZ3JvdXAsIG9wdGlvbnMsIHBvcHVwLCBwb3B1cE9wdGlvbnMsIGxhYmVsLCBsYWJlbE9wdGlvbnMsIGhpZ2hsaWdodE9wdGlvbnMsIGNyb3NzdGFsa09wdGlvbnMpIHsKICBpZiAoIShfanF1ZXJ5Mi5kZWZhdWx0LmlzRW1wdHlPYmplY3QobGF0KSB8fCBfanF1ZXJ5Mi5kZWZhdWx0LmlzRW1wdHlPYmplY3QobG5nKSkgfHwgX2pxdWVyeTIuZGVmYXVsdC5pc051bWVyaWMobGF0KSAmJiBfanF1ZXJ5Mi5kZWZhdWx0LmlzTnVtZXJpYyhsbmcpKSB7CiAgICB2YXIgZGYgPSBuZXcgX2RhdGFmcmFtZTIuZGVmYXVsdCgpLmNvbCgibGF0IiwgbGF0KS5jb2woImxuZyIsIGxuZykuY29sKCJyYWRpdXMiLCByYWRpdXMpLmNvbCgibGF5ZXJJZCIsIGxheWVySWQpLmNvbCgiZ3JvdXAiLCBncm91cCkuY29sKCJwb3B1cCIsIHBvcHVwKS5jb2woInBvcHVwT3B0aW9ucyIsIHBvcHVwT3B0aW9ucykuY29sKCJsYWJlbCIsIGxhYmVsKS5jb2woImxhYmVsT3B0aW9ucyIsIGxhYmVsT3B0aW9ucykuY29sKCJoaWdobGlnaHRPcHRpb25zIiwgaGlnaGxpZ2h0T3B0aW9ucykuY2JpbmQob3B0aW9ucykuY2JpbmQoY3Jvc3N0YWxrT3B0aW9ucyB8fCB7fSk7CgogICAgYWRkTGF5ZXJzKHRoaXMsICJzaGFwZSIsIGRmLCBmdW5jdGlvbiAoZGYsIGkpIHsKICAgICAgaWYgKF9qcXVlcnkyLmRlZmF1bHQuaXNOdW1lcmljKGRmLmdldChpLCAibGF0IikpICYmIF9qcXVlcnkyLmRlZmF1bHQuaXNOdW1lcmljKGRmLmdldChpLCAibG5nIikpICYmIF9qcXVlcnkyLmRlZmF1bHQuaXNOdW1lcmljKGRmLmdldChpLCAicmFkaXVzIikpKSB7CiAgICAgICAgcmV0dXJuIF9sZWFmbGV0Mi5kZWZhdWx0LmNpcmNsZShbZGYuZ2V0KGksICJsYXQiKSwgZGYuZ2V0KGksICJsbmciKV0sIGRmLmdldChpLCAicmFkaXVzIiksIGRmLmdldChpKSk7CiAgICAgIH0gZWxzZSB7CiAgICAgICAgcmV0dXJuIG51bGw7CiAgICAgIH0KICAgIH0pOwogIH0KfTsKCm1ldGhvZHMuYWRkQ2lyY2xlTWFya2VycyA9IGZ1bmN0aW9uIChsYXQsIGxuZywgcmFkaXVzLCBsYXllcklkLCBncm91cCwgb3B0aW9ucywgY2x1c3Rlck9wdGlvbnMsIGNsdXN0ZXJJZCwgcG9wdXAsIHBvcHVwT3B0aW9ucywgbGFiZWwsIGxhYmVsT3B0aW9ucywgY3Jvc3N0YWxrT3B0aW9ucykgewogIGlmICghKF9qcXVlcnkyLmRlZmF1bHQuaXNFbXB0eU9iamVjdChsYXQpIHx8IF9qcXVlcnkyLmRlZmF1bHQuaXNFbXB0eU9iamVjdChsbmcpKSB8fCBfanF1ZXJ5Mi5kZWZhdWx0LmlzTnVtZXJpYyhsYXQpICYmIF9qcXVlcnkyLmRlZmF1bHQuaXNOdW1lcmljKGxuZykpIHsKICAgIHZhciBkZiA9IG5ldyBfZGF0YWZyYW1lMi5kZWZhdWx0KCkuY29sKCJsYXQiLCBsYXQpLmNvbCgibG5nIiwgbG5nKS5jb2woInJhZGl1cyIsIHJhZGl1cykuY29sKCJsYXllcklkIiwgbGF5ZXJJZCkuY29sKCJncm91cCIsIGdyb3VwKS5jb2woInBvcHVwIiwgcG9wdXApLmNvbCgicG9wdXBPcHRpb25zIiwgcG9wdXBPcHRpb25zKS5jb2woImxhYmVsIiwgbGFiZWwpLmNvbCgibGFiZWxPcHRpb25zIiwgbGFiZWxPcHRpb25zKS5jYmluZChjcm9zc3RhbGtPcHRpb25zIHx8IHt9KS5jYmluZChvcHRpb25zKTsKCiAgICBhZGRNYXJrZXJzKHRoaXMsIGRmLCBncm91cCwgY2x1c3Rlck9wdGlvbnMsIGNsdXN0ZXJJZCwgZnVuY3Rpb24gKGRmLCBpKSB7CiAgICAgIHJldHVybiBfbGVhZmxldDIuZGVmYXVsdC5jaXJjbGVNYXJrZXIoW2RmLmdldChpLCAibGF0IiksIGRmLmdldChpLCAibG5nIildLCBkZi5nZXQoaSkpOwogICAgfSk7CiAgfQp9OwoKLyoKICogQHBhcmFtIGxhdCBBcnJheSBvZiBhcnJheXMgb2YgbGF0aXR1ZGUgY29vcmRpbmF0ZXMgZm9yIHBvbHlsaW5lcwogKiBAcGFyYW0gbG5nIEFycmF5IG9mIGFycmF5cyBvZiBsb25naXR1ZGUgY29vcmRpbmF0ZXMgZm9yIHBvbHlsaW5lcwogKi8KbWV0aG9kcy5hZGRQb2x5bGluZXMgPSBmdW5jdGlvbiAocG9seWdvbnMsIGxheWVySWQsIGdyb3VwLCBvcHRpb25zLCBwb3B1cCwgcG9wdXBPcHRpb25zLCBsYWJlbCwgbGFiZWxPcHRpb25zLCBoaWdobGlnaHRPcHRpb25zKSB7CiAgaWYgKHBvbHlnb25zLmxlbmd0aCA+IDApIHsKICAgIHZhciBkZiA9IG5ldyBfZGF0YWZyYW1lMi5kZWZhdWx0KCkuY29sKCJzaGFwZXMiLCBwb2x5Z29ucykuY29sKCJsYXllcklkIiwgbGF5ZXJJZCkuY29sKCJncm91cCIsIGdyb3VwKS5jb2woInBvcHVwIiwgcG9wdXApLmNvbCgicG9wdXBPcHRpb25zIiwgcG9wdXBPcHRpb25zKS5jb2woImxhYmVsIiwgbGFiZWwpLmNvbCgibGFiZWxPcHRpb25zIiwgbGFiZWxPcHRpb25zKS5jb2woImhpZ2hsaWdodE9wdGlvbnMiLCBoaWdobGlnaHRPcHRpb25zKS5jYmluZChvcHRpb25zKTsKCiAgICBhZGRMYXllcnModGhpcywgInNoYXBlIiwgZGYsIGZ1bmN0aW9uIChkZiwgaSkgewogICAgICB2YXIgc2hhcGVzID0gZGYuZ2V0KGksICJzaGFwZXMiKTsKICAgICAgc2hhcGVzID0gc2hhcGVzLm1hcChmdW5jdGlvbiAoc2hhcGUpIHsKICAgICAgICByZXR1cm4gX2h0bWx3aWRnZXRzMi5kZWZhdWx0LmRhdGFmcmFtZVRvRDMoc2hhcGVbMF0pOwogICAgICB9KTsKICAgICAgaWYgKHNoYXBlcy5sZW5ndGggPiAxKSB7CiAgICAgICAgcmV0dXJuIF9sZWFmbGV0Mi5kZWZhdWx0Lm11bHRpUG9seWxpbmUoc2hhcGVzLCBkZi5nZXQoaSkpOwogICAgICB9IGVsc2UgewogICAgICAgIHJldHVybiBfbGVhZmxldDIuZGVmYXVsdC5wb2x5bGluZShzaGFwZXNbMF0sIGRmLmdldChpKSk7CiAgICAgIH0KICAgIH0pOwogIH0KfTsKCm1ldGhvZHMucmVtb3ZlTWFya2VyID0gZnVuY3Rpb24gKGxheWVySWQpIHsKICB0aGlzLmxheWVyTWFuYWdlci5yZW1vdmVMYXllcigibWFya2VyIiwgbGF5ZXJJZCk7Cn07CgptZXRob2RzLmNsZWFyTWFya2VycyA9IGZ1bmN0aW9uICgpIHsKICB0aGlzLmxheWVyTWFuYWdlci5jbGVhckxheWVycygibWFya2VyIik7Cn07CgptZXRob2RzLnJlbW92ZU1hcmtlckNsdXN0ZXIgPSBmdW5jdGlvbiAobGF5ZXJJZCkgewogIHRoaXMubGF5ZXJNYW5hZ2VyLnJlbW92ZUxheWVyKCJjbHVzdGVyIiwgbGF5ZXJJZCk7Cn07CgptZXRob2RzLnJlbW92ZU1hcmtlckZyb21DbHVzdGVyID0gZnVuY3Rpb24gKGxheWVySWQsIGNsdXN0ZXJJZCkgewogIHZhciBjbHVzdGVyID0gdGhpcy5sYXllck1hbmFnZXIuZ2V0TGF5ZXIoImNsdXN0ZXIiLCBjbHVzdGVySWQpOwogIGlmICghY2x1c3RlcikgcmV0dXJuOwogIGNsdXN0ZXIuY2x1c3RlckxheWVyU3RvcmUucmVtb3ZlKGxheWVySWQpOwp9OwoKbWV0aG9kcy5jbGVhck1hcmtlckNsdXN0ZXJzID0gZnVuY3Rpb24gKCkgewogIHRoaXMubGF5ZXJNYW5hZ2VyLmNsZWFyTGF5ZXJzKCJjbHVzdGVyIik7Cn07CgptZXRob2RzLnJlbW92ZVNoYXBlID0gZnVuY3Rpb24gKGxheWVySWQpIHsKICB0aGlzLmxheWVyTWFuYWdlci5yZW1vdmVMYXllcigic2hhcGUiLCBsYXllcklkKTsKfTsKCm1ldGhvZHMuY2xlYXJTaGFwZXMgPSBmdW5jdGlvbiAoKSB7CiAgdGhpcy5sYXllck1hbmFnZXIuY2xlYXJMYXllcnMoInNoYXBlIik7Cn07CgptZXRob2RzLmFkZFJlY3RhbmdsZXMgPSBmdW5jdGlvbiAobGF0MSwgbG5nMSwgbGF0MiwgbG5nMiwgbGF5ZXJJZCwgZ3JvdXAsIG9wdGlvbnMsIHBvcHVwLCBwb3B1cE9wdGlvbnMsIGxhYmVsLCBsYWJlbE9wdGlvbnMsIGhpZ2hsaWdodE9wdGlvbnMpIHsKICB2YXIgZGYgPSBuZXcgX2RhdGFmcmFtZTIuZGVmYXVsdCgpLmNvbCgibGF0MSIsIGxhdDEpLmNvbCgibG5nMSIsIGxuZzEpLmNvbCgibGF0MiIsIGxhdDIpLmNvbCgibG5nMiIsIGxuZzIpLmNvbCgibGF5ZXJJZCIsIGxheWVySWQpLmNvbCgiZ3JvdXAiLCBncm91cCkuY29sKCJwb3B1cCIsIHBvcHVwKS5jb2woInBvcHVwT3B0aW9ucyIsIHBvcHVwT3B0aW9ucykuY29sKCJsYWJlbCIsIGxhYmVsKS5jb2woImxhYmVsT3B0aW9ucyIsIGxhYmVsT3B0aW9ucykuY29sKCJoaWdobGlnaHRPcHRpb25zIiwgaGlnaGxpZ2h0T3B0aW9ucykuY2JpbmQob3B0aW9ucyk7CgogIGFkZExheWVycyh0aGlzLCAic2hhcGUiLCBkZiwgZnVuY3Rpb24gKGRmLCBpKSB7CiAgICBpZiAoX2pxdWVyeTIuZGVmYXVsdC5pc051bWVyaWMoZGYuZ2V0KGksICJsYXQxIikpICYmIF9qcXVlcnkyLmRlZmF1bHQuaXNOdW1lcmljKGRmLmdldChpLCAibG5nMSIpKSAmJiBfanF1ZXJ5Mi5kZWZhdWx0LmlzTnVtZXJpYyhkZi5nZXQoaSwgImxhdDIiKSkgJiYgX2pxdWVyeTIuZGVmYXVsdC5pc051bWVyaWMoZGYuZ2V0KGksICJsbmcyIikpKSB7CiAgICAgIHJldHVybiBfbGVhZmxldDIuZGVmYXVsdC5yZWN0YW5nbGUoW1tkZi5nZXQoaSwgImxhdDEiKSwgZGYuZ2V0KGksICJsbmcxIildLCBbZGYuZ2V0KGksICJsYXQyIiksIGRmLmdldChpLCAibG5nMiIpXV0sIGRmLmdldChpKSk7CiAgICB9IGVsc2UgewogICAgICByZXR1cm4gbnVsbDsKICAgIH0KICB9KTsKfTsKCi8qCiAqIEBwYXJhbSBsYXQgQXJyYXkgb2YgYXJyYXlzIG9mIGxhdGl0dWRlIGNvb3JkaW5hdGVzIGZvciBwb2x5Z29ucwogKiBAcGFyYW0gbG5nIEFycmF5IG9mIGFycmF5cyBvZiBsb25naXR1ZGUgY29vcmRpbmF0ZXMgZm9yIHBvbHlnb25zCiAqLwptZXRob2RzLmFkZFBvbHlnb25zID0gZnVuY3Rpb24gKHBvbHlnb25zLCBsYXllcklkLCBncm91cCwgb3B0aW9ucywgcG9wdXAsIHBvcHVwT3B0aW9ucywgbGFiZWwsIGxhYmVsT3B0aW9ucywgaGlnaGxpZ2h0T3B0aW9ucykgewogIGlmIChwb2x5Z29ucy5sZW5ndGggPiAwKSB7CiAgICB2YXIgZGYgPSBuZXcgX2RhdGFmcmFtZTIuZGVmYXVsdCgpLmNvbCgic2hhcGVzIiwgcG9seWdvbnMpLmNvbCgibGF5ZXJJZCIsIGxheWVySWQpLmNvbCgiZ3JvdXAiLCBncm91cCkuY29sKCJwb3B1cCIsIHBvcHVwKS5jb2woInBvcHVwT3B0aW9ucyIsIHBvcHVwT3B0aW9ucykuY29sKCJsYWJlbCIsIGxhYmVsKS5jb2woImxhYmVsT3B0aW9ucyIsIGxhYmVsT3B0aW9ucykuY29sKCJoaWdobGlnaHRPcHRpb25zIiwgaGlnaGxpZ2h0T3B0aW9ucykuY2JpbmQob3B0aW9ucyk7CgogICAgYWRkTGF5ZXJzKHRoaXMsICJzaGFwZSIsIGRmLCBmdW5jdGlvbiAoZGYsIGkpIHsKICAgICAgLy8gVGhpcyBjb2RlIHVzZWQgdG8gdXNlIEwubXVsdGlQb2x5Z29uLCBidXQgdGhhdCBjYXVzZWQKICAgICAgLy8gZG91YmxlLWNsaWNrIG9uIGEgbXVsdGlwb2x5Z29uIHRvIGZhaWwgdG8gem9vbSBpbiBvbiB0aGUKICAgICAgLy8gbWFwLiBTdXJwcmlzaW5nbHksIHB1dHRpbmcgYWxsIHRoZSByaW5ncyBpbiBhIHNpbmdsZQogICAgICAvLyBwb2x5Z29uIHNlZW1zIHRvIHN0aWxsIHdvcms7IGNvbXBsaWNhdGVkIG11bHRpcG9seWdvbnMKICAgICAgLy8gYXJlIHN0aWxsIHJlbmRlcmVkIGNvcnJlY3RseS4KICAgICAgdmFyIHNoYXBlcyA9IGRmLmdldChpLCAic2hhcGVzIikubWFwKGZ1bmN0aW9uIChwb2x5Z29uKSB7CiAgICAgICAgcmV0dXJuIHBvbHlnb24ubWFwKF9odG1sd2lkZ2V0czIuZGVmYXVsdC5kYXRhZnJhbWVUb0QzKTsKICAgICAgfSkucmVkdWNlKGZ1bmN0aW9uIChhY2MsIHZhbCkgewogICAgICAgIHJldHVybiBhY2MuY29uY2F0KHZhbCk7CiAgICAgIH0sIFtdKTsKICAgICAgcmV0dXJuIF9sZWFmbGV0Mi5kZWZhdWx0LnBvbHlnb24oc2hhcGVzLCBkZi5nZXQoaSkpOwogICAgfSk7CiAgfQp9OwoKbWV0aG9kcy5hZGRHZW9KU09OID0gZnVuY3Rpb24gKGRhdGEsIGxheWVySWQsIGdyb3VwLCBzdHlsZSkgewogIC8vIFRoaXMgdGltZSwgc2VsZiBpcyBhY3R1YWxseSBuZWVkZWQgYmVjYXVzZSB0aGUgY2FsbGJhY2tzIGJlbG93IG5lZWQKICAvLyB0byBhY2Nlc3MgYm90aCB0aGUgaW5uZXIgYW5kIG91dGVyIHNlbnNlcyBvZiAidGhpcyIKICB2YXIgc2VsZiA9IHRoaXM7CiAgaWYgKHR5cGVvZiBkYXRhID09PSAic3RyaW5nIikgewogICAgZGF0YSA9IEpTT04ucGFyc2UoZGF0YSk7CiAgfQoKICB2YXIgZ2xvYmFsU3R5bGUgPSBfanF1ZXJ5Mi5kZWZhdWx0LmV4dGVuZCh7fSwgc3R5bGUsIGRhdGEuc3R5bGUgfHwge30pOwoKICB2YXIgZ2psYXllciA9IF9sZWFmbGV0Mi5kZWZhdWx0Lmdlb0pzb24oZGF0YSwgewogICAgc3R5bGU6IGZ1bmN0aW9uIHN0eWxlKGZlYXR1cmUpIHsKICAgICAgaWYgKGZlYXR1cmUuc3R5bGUgfHwgZmVhdHVyZS5wcm9wZXJ0aWVzLnN0eWxlKSB7CiAgICAgICAgcmV0dXJuIF9qcXVlcnkyLmRlZmF1bHQuZXh0ZW5kKHt9LCBnbG9iYWxTdHlsZSwgZmVhdHVyZS5zdHlsZSwgZmVhdHVyZS5wcm9wZXJ0aWVzLnN0eWxlKTsKICAgICAgfSBlbHNlIHsKICAgICAgICByZXR1cm4gZ2xvYmFsU3R5bGU7CiAgICAgIH0KICAgIH0sCiAgICBvbkVhY2hGZWF0dXJlOiBmdW5jdGlvbiBvbkVhY2hGZWF0dXJlKGZlYXR1cmUsIGxheWVyKSB7CiAgICAgIHZhciBleHRyYUluZm8gPSB7CiAgICAgICAgZmVhdHVyZUlkOiBmZWF0dXJlLmlkLAogICAgICAgIHByb3BlcnRpZXM6IGZlYXR1cmUucHJvcGVydGllcwogICAgICB9OwogICAgICB2YXIgcG9wdXAgPSBmZWF0dXJlLnByb3BlcnRpZXMucG9wdXA7CiAgICAgIGlmICh0eXBlb2YgcG9wdXAgIT09ICJ1bmRlZmluZWQiICYmIHBvcHVwICE9PSBudWxsKSBsYXllci5iaW5kUG9wdXAocG9wdXApOwogICAgICBsYXllci5vbigiY2xpY2siLCBtb3VzZUhhbmRsZXIoc2VsZi5pZCwgbGF5ZXJJZCwgZ3JvdXAsICJnZW9qc29uX2NsaWNrIiwgZXh0cmFJbmZvKSwgdGhpcyk7CiAgICAgIGxheWVyLm9uKCJtb3VzZW92ZXIiLCBtb3VzZUhhbmRsZXIoc2VsZi5pZCwgbGF5ZXJJZCwgZ3JvdXAsICJnZW9qc29uX21vdXNlb3ZlciIsIGV4dHJhSW5mbyksIHRoaXMpOwogICAgICBsYXllci5vbigibW91c2VvdXQiLCBtb3VzZUhhbmRsZXIoc2VsZi5pZCwgbGF5ZXJJZCwgZ3JvdXAsICJnZW9qc29uX21vdXNlb3V0IiwgZXh0cmFJbmZvKSwgdGhpcyk7CiAgICB9CiAgfSk7CiAgdGhpcy5sYXllck1hbmFnZXIuYWRkTGF5ZXIoZ2psYXllciwgImdlb2pzb24iLCBsYXllcklkLCBncm91cCk7Cn07CgptZXRob2RzLnJlbW92ZUdlb0pTT04gPSBmdW5jdGlvbiAobGF5ZXJJZCkgewogIHRoaXMubGF5ZXJNYW5hZ2VyLnJlbW92ZUxheWVyKCJnZW9qc29uIiwgbGF5ZXJJZCk7Cn07CgptZXRob2RzLmNsZWFyR2VvSlNPTiA9IGZ1bmN0aW9uICgpIHsKICB0aGlzLmxheWVyTWFuYWdlci5jbGVhckxheWVycygiZ2VvanNvbiIpOwp9OwoKbWV0aG9kcy5hZGRUb3BvSlNPTiA9IGZ1bmN0aW9uIChkYXRhLCBsYXllcklkLCBncm91cCwgc3R5bGUpIHsKICAvLyBUaGlzIHRpbWUsIHNlbGYgaXMgYWN0dWFsbHkgbmVlZGVkIGJlY2F1c2UgdGhlIGNhbGxiYWNrcyBiZWxvdyBuZWVkCiAgLy8gdG8gYWNjZXNzIGJvdGggdGhlIGlubmVyIGFuZCBvdXRlciBzZW5zZXMgb2YgInRoaXMiCiAgdmFyIHNlbGYgPSB0aGlzOwogIGlmICh0eXBlb2YgZGF0YSA9PT0gInN0cmluZyIpIHsKICAgIGRhdGEgPSBKU09OLnBhcnNlKGRhdGEpOwogIH0KCiAgdmFyIGdsb2JhbFN0eWxlID0gX2pxdWVyeTIuZGVmYXVsdC5leHRlbmQoe30sIHN0eWxlLCBkYXRhLnN0eWxlIHx8IHt9KTsKCiAgdmFyIGdqbGF5ZXIgPSBfbGVhZmxldDIuZGVmYXVsdC5nZW9Kc29uKG51bGwsIHsKICAgIHN0eWxlOiBmdW5jdGlvbiBzdHlsZShmZWF0dXJlKSB7CiAgICAgIGlmIChmZWF0dXJlLnN0eWxlIHx8IGZlYXR1cmUucHJvcGVydGllcy5zdHlsZSkgewogICAgICAgIHJldHVybiBfanF1ZXJ5Mi5kZWZhdWx0LmV4dGVuZCh7fSwgZ2xvYmFsU3R5bGUsIGZlYXR1cmUuc3R5bGUsIGZlYXR1cmUucHJvcGVydGllcy5zdHlsZSk7CiAgICAgIH0gZWxzZSB7CiAgICAgICAgcmV0dXJuIGdsb2JhbFN0eWxlOwogICAgICB9CiAgICB9LAogICAgb25FYWNoRmVhdHVyZTogZnVuY3Rpb24gb25FYWNoRmVhdHVyZShmZWF0dXJlLCBsYXllcikgewogICAgICB2YXIgZXh0cmFJbmZvID0gewogICAgICAgIGZlYXR1cmVJZDogZmVhdHVyZS5pZCwKICAgICAgICBwcm9wZXJ0aWVzOiBmZWF0dXJlLnByb3BlcnRpZXMKICAgICAgfTsKICAgICAgdmFyIHBvcHVwID0gZmVhdHVyZS5wcm9wZXJ0aWVzLnBvcHVwOwogICAgICBpZiAodHlwZW9mIHBvcHVwICE9PSAidW5kZWZpbmVkIiAmJiBwb3B1cCAhPT0gbnVsbCkgbGF5ZXIuYmluZFBvcHVwKHBvcHVwKTsKICAgICAgbGF5ZXIub24oImNsaWNrIiwgbW91c2VIYW5kbGVyKHNlbGYuaWQsIGxheWVySWQsIGdyb3VwLCAidG9wb2pzb25fY2xpY2siLCBleHRyYUluZm8pLCB0aGlzKTsKICAgICAgbGF5ZXIub24oIm1vdXNlb3ZlciIsIG1vdXNlSGFuZGxlcihzZWxmLmlkLCBsYXllcklkLCBncm91cCwgInRvcG9qc29uX21vdXNlb3ZlciIsIGV4dHJhSW5mbyksIHRoaXMpOwogICAgICBsYXllci5vbigibW91c2VvdXQiLCBtb3VzZUhhbmRsZXIoc2VsZi5pZCwgbGF5ZXJJZCwgZ3JvdXAsICJ0b3BvanNvbl9tb3VzZW91dCIsIGV4dHJhSW5mbyksIHRoaXMpOwogICAgfQogIH0pOwogIGdsb2JhbC5vbW5pdm9yZS50b3BvanNvbi5wYXJzZShkYXRhLCBudWxsLCBnamxheWVyKTsKICB0aGlzLmxheWVyTWFuYWdlci5hZGRMYXllcihnamxheWVyLCAidG9wb2pzb24iLCBsYXllcklkLCBncm91cCk7Cn07CgptZXRob2RzLnJlbW92ZVRvcG9KU09OID0gZnVuY3Rpb24gKGxheWVySWQpIHsKICB0aGlzLmxheWVyTWFuYWdlci5yZW1vdmVMYXllcigidG9wb2pzb24iLCBsYXllcklkKTsKfTsKCm1ldGhvZHMuY2xlYXJUb3BvSlNPTiA9IGZ1bmN0aW9uICgpIHsKICB0aGlzLmxheWVyTWFuYWdlci5jbGVhckxheWVycygidG9wb2pzb24iKTsKfTsKCm1ldGhvZHMuYWRkQ29udHJvbCA9IGZ1bmN0aW9uIChodG1sLCBwb3NpdGlvbiwgbGF5ZXJJZCwgY2xhc3NlcykgewogIGZ1bmN0aW9uIG9uQWRkKG1hcCkgewogICAgdmFyIGRpdiA9IF9sZWFmbGV0Mi5kZWZhdWx0LkRvbVV0aWwuY3JlYXRlKCJkaXYiLCBjbGFzc2VzKTsKICAgIGlmICh0eXBlb2YgbGF5ZXJJZCAhPT0gInVuZGVmaW5lZCIgJiYgbGF5ZXJJZCAhPT0gbnVsbCkgewogICAgICBkaXYuc2V0QXR0cmlidXRlKCJpZCIsIGxheWVySWQpOwogICAgfQogICAgdGhpcy5fZGl2ID0gZGl2OwoKICAgIC8vIEl0J3MgcG9zc2libGUgZm9yIHdpbmRvdy5TaGlueSB0byBiZSB0cnVlIGJ1dCBTaGlueS5pbml0aWFsaXplSW5wdXRzIHRvCiAgICAvLyBub3QgYmUsIHdoZW4gYSBzdGF0aWMgbGVhZmxldCB3aWRnZXQgaXMgaW5jbHVkZWQgYXMgcGFydCBvZiB0aGUgc2hpbnkKICAgIC8vIFVJIGRpcmVjdGx5IChub3QgdGhyb3VnaCBsZWFmbGV0T3V0cHV0IG9yIHVpT3V0cHV0KS4gSW4gdGhpcyBjYXNlIHdlCiAgICAvLyBkb24ndCBkbyB0aGUgbm9ybWFsIFNoaW55IHN0dWZmIGFzIHRoYXQgd2lsbCBhbGwgaGFwcGVuIHdoZW4gU2hpbnkKICAgIC8vIGl0c2VsZiBsb2FkcyBhbmQgYmluZHMgdGhlIGVudGlyZSBkb2MuCgogICAgaWYgKHdpbmRvdy5TaGlueSAmJiBfc2hpbnkyLmRlZmF1bHQuaW5pdGlhbGl6ZUlucHV0cykgewogICAgICBfc2hpbnkyLmRlZmF1bHQucmVuZGVySHRtbChodG1sLCB0aGlzLl9kaXYpOwogICAgICBfc2hpbnkyLmRlZmF1bHQuaW5pdGlhbGl6ZUlucHV0cyh0aGlzLl9kaXYpOwogICAgICBfc2hpbnkyLmRlZmF1bHQuYmluZEFsbCh0aGlzLl9kaXYpOwogICAgfSBlbHNlIHsKICAgICAgdGhpcy5fZGl2LmlubmVySFRNTCA9IGh0bWw7CiAgICB9CgogICAgcmV0dXJuIHRoaXMuX2RpdjsKICB9CiAgZnVuY3Rpb24gb25SZW1vdmUobWFwKSB7CiAgICBpZiAod2luZG93LlNoaW55ICYmIF9zaGlueTIuZGVmYXVsdC51bmJpbmRBbGwpIHsKICAgICAgX3NoaW55Mi5kZWZhdWx0LnVuYmluZEFsbCh0aGlzLl9kaXYpOwogICAgfQogIH0KICB2YXIgQ29udHJvbCA9IF9sZWFmbGV0Mi5kZWZhdWx0LkNvbnRyb2wuZXh0ZW5kKHsKICAgIG9wdGlvbnM6IHsgcG9zaXRpb246IHBvc2l0aW9uIH0sCiAgICBvbkFkZDogb25BZGQsCiAgICBvblJlbW92ZTogb25SZW1vdmUKICB9KTsKICB0aGlzLmNvbnRyb2xzLmFkZChuZXcgQ29udHJvbCgpLCBsYXllcklkLCBodG1sKTsKfTsKCm1ldGhvZHMuYWRkQ3VzdG9tQ29udHJvbCA9IGZ1bmN0aW9uIChjb250cm9sLCBsYXllcklkKSB7CiAgdGhpcy5jb250cm9scy5hZGQoY29udHJvbCwgbGF5ZXJJZCk7Cn07CgptZXRob2RzLnJlbW92ZUNvbnRyb2wgPSBmdW5jdGlvbiAobGF5ZXJJZCkgewogIHRoaXMuY29udHJvbHMucmVtb3ZlKGxheWVySWQpOwp9OwoKbWV0aG9kcy5nZXRDb250cm9sID0gZnVuY3Rpb24gKGxheWVySWQpIHsKICB0aGlzLmNvbnRyb2xzLmdldChsYXllcklkKTsKfTsKCm1ldGhvZHMuY2xlYXJDb250cm9scyA9IGZ1bmN0aW9uICgpIHsKICB0aGlzLmNvbnRyb2xzLmNsZWFyKCk7Cn07CgptZXRob2RzLmFkZExlZ2VuZCA9IGZ1bmN0aW9uIChvcHRpb25zKSB7CiAgdmFyIF90aGlzNSA9IHRoaXM7CgogIHZhciBsZWdlbmQgPSBfbGVhZmxldDIuZGVmYXVsdC5jb250cm9sKHsgcG9zaXRpb246IG9wdGlvbnMucG9zaXRpb24gfSk7CiAgdmFyIGdyYWRTcGFuID0gdm9pZCAwOwoKICBsZWdlbmQub25BZGQgPSBmdW5jdGlvbiAobWFwKSB7CiAgICB2YXIgZGl2ID0gX2xlYWZsZXQyLmRlZmF1bHQuRG9tVXRpbC5jcmVhdGUoImRpdiIsIG9wdGlvbnMuY2xhc3NOYW1lKSwKICAgICAgICBjb2xvcnMgPSBvcHRpb25zLmNvbG9ycywKICAgICAgICBsYWJlbHMgPSBvcHRpb25zLmxhYmVscywKICAgICAgICBsZWdlbmRIVE1MID0gIiI7CiAgICBpZiAob3B0aW9ucy50eXBlID09PSAibnVtZXJpYyIpIHsKICAgICAgKGZ1bmN0aW9uICgpIHsKICAgICAgICAvLyAjIEZvcm1hdHRpbmcgY29uc3RhbnRzLgogICAgICAgIHZhciBzaW5nbGVCaW5IZWlnaHQgPSAyMDsgLy8gVGhlIGRpc3RhbmNlIGJldHdlZW4gdGljayBtYXJrcywgaW4gcHgKICAgICAgICB2YXIgdk1hcmdpbiA9IDg7IC8vIElmIDFzdCB0aWNrIG1hcmsgc3RhcnRzIGF0IHRvcCBvZiBncmFkaWVudCwgaG93CiAgICAgICAgLy8gbWFueSBleHRyYSBweCBhcmUgbmVlZGVkIGZvciB0aGUgdG9wIGhhbGYgb2YgdGhlCiAgICAgICAgLy8gMXN0IGxhYmVsPyAoZGl0dG8gZm9yIGxhc3QgdGljayBtYXJrL2xhYmVsKQogICAgICAgIHZhciB0aWNrV2lkdGggPSA0OyAvLyBIb3cgd2lkZSBzaG91bGQgdGljayBtYXJrcyBiZSwgaW4gcHg/CiAgICAgICAgdmFyIGxhYmVsUGFkZGluZyA9IDY7IC8vIEhvdyBtdWNoIGRpc3RhbmNlIHRvIHJlc2VydmUgZm9yIHRpY2sgbWFyaz8KICAgICAgICAvLyAoTXVzdCBiZSA+PSB0aWNrV2lkdGgpCgogICAgICAgIC8vICMgRGVyaXZlZCBmb3JtYXR0aW5nIHBhcmFtZXRlcnMuCgogICAgICAgIC8vIFdoYXQncyB0aGUgaGVpZ2h0IG9mIGEgc2luZ2xlIGJpbiwgaW4gcGVyY2VudGFnZSAob2YgZ3JhZGllbnQgaGVpZ2h0KT8KICAgICAgICAvLyBJdCBtaWdodCBub3QganVzdCBiZSAxLyhuLTEpLCBpZiB0aGUgZ3JhZGllbnQgZXh0ZW5kcyBwYXN0IHRoZSB0aWNrCiAgICAgICAgLy8gbWFya3MgKHdoaWNoIGNhbiBiZSB0aGUgY2FzZSBmb3IgcHJldHR5IGN1dCBwb2ludHMpLgogICAgICAgIHZhciBzaW5nbGVCaW5QY3QgPSAob3B0aW9ucy5leHRyYS5wX24gLSBvcHRpb25zLmV4dHJhLnBfMSkgLyAobGFiZWxzLmxlbmd0aCAtIDEpOwogICAgICAgIC8vIEVhY2ggYmluIGlzIGBzaW5nbGVCaW5IZWlnaHRgIGhpZ2guIEhvdyB0YWxsIGlzIHRoZSBncmFkaWVudD8KICAgICAgICB2YXIgdG90YWxIZWlnaHQgPSAxIC8gc2luZ2xlQmluUGN0ICogc2luZ2xlQmluSGVpZ2h0ICsgMTsKICAgICAgICAvLyBIb3cgZmFyIHNob3VsZCB0aGUgZmlyc3QgdGljayBiZSBzaGlmdGVkIGRvd24sIHJlbGF0aXZlIHRvIHRoZSB0b3AKICAgICAgICAvLyBvZiB0aGUgZ3JhZGllbnQ/CiAgICAgICAgdmFyIHRpY2tPZmZzZXQgPSBzaW5nbGVCaW5IZWlnaHQgLyBzaW5nbGVCaW5QY3QgKiBvcHRpb25zLmV4dHJhLnBfMTsKCiAgICAgICAgZ3JhZFNwYW4gPSAoMCwgX2pxdWVyeTIuZGVmYXVsdCkoIjxzcGFuLz4iKS5jc3MoewogICAgICAgICAgImJhY2tncm91bmQiOiAibGluZWFyLWdyYWRpZW50KCIgKyBjb2xvcnMgKyAiKSIsCiAgICAgICAgICAib3BhY2l0eSI6IG9wdGlvbnMub3BhY2l0eSwKICAgICAgICAgICJoZWlnaHQiOiB0b3RhbEhlaWdodCArICJweCIsCiAgICAgICAgICAid2lkdGgiOiAiMThweCIsCiAgICAgICAgICAiZGlzcGxheSI6ICJibG9jayIsCiAgICAgICAgICAibWFyZ2luLXRvcCI6IHZNYXJnaW4gKyAicHgiCiAgICAgICAgfSk7CiAgICAgICAgdmFyIGxlZnREaXYgPSAoMCwgX2pxdWVyeTIuZGVmYXVsdCkoIjxkaXYvPiIpLmNzcygiZmxvYXQiLCAibGVmdCIpLAogICAgICAgICAgICByaWdodERpdiA9ICgwLCBfanF1ZXJ5Mi5kZWZhdWx0KSgiPGRpdi8+IikuY3NzKCJmbG9hdCIsICJsZWZ0Iik7CiAgICAgICAgbGVmdERpdi5hcHBlbmQoZ3JhZFNwYW4pOwogICAgICAgICgwLCBfanF1ZXJ5Mi5kZWZhdWx0KShkaXYpLmFwcGVuZChsZWZ0RGl2KS5hcHBlbmQocmlnaHREaXYpLmFwcGVuZCgoMCwgX2pxdWVyeTIuZGVmYXVsdCkoIjxiciBjbGVhcj1cImJvdGhcIi8+IikpOwoKICAgICAgICAvLyBIYXZlIHRvIGF0dGFjaCB0aGUgZGl2IHRvIHRoZSBib2R5IGF0IHRoaXMgZWFybHkgcG9pbnQsIHNvIHRoYXQgdGhlCiAgICAgICAgLy8gc3ZnIHRleHQgZ2V0Q29tcHV0ZWRUZXh0TGVuZ3RoKCkgYWN0dWFsbHkgd29ya3MsIGJlbG93LgogICAgICAgIGRvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQoZGl2KTsKCiAgICAgICAgdmFyIG5zID0gImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIjsKICAgICAgICB2YXIgc3ZnID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudE5TKG5zLCAic3ZnIik7CiAgICAgICAgcmlnaHREaXYuYXBwZW5kKHN2Zyk7CiAgICAgICAgdmFyIGcgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50TlMobnMsICJnIik7CiAgICAgICAgKDAsIF9qcXVlcnkyLmRlZmF1bHQpKGcpLmF0dHIoInRyYW5zZm9ybSIsICJ0cmFuc2xhdGUoMCwgIiArIHZNYXJnaW4gKyAiKSIpOwogICAgICAgIHN2Zy5hcHBlbmRDaGlsZChnKTsKCiAgICAgICAgLy8gbWF4IGxhYmVsIHdpZHRoIG5lZWRlZCB0byBzZXQgd2lkdGggb2Ygc3ZnLCBhbmQgcmlnaHQtanVzdGlmeSB0ZXh0CiAgICAgICAgdmFyIG1heExibFdpZHRoID0gMDsKCiAgICAgICAgLy8gQ3JlYXRlIHRpY2sgbWFya3MgYW5kIGxhYmVscwogICAgICAgIF9qcXVlcnkyLmRlZmF1bHQuZWFjaChsYWJlbHMsIGZ1bmN0aW9uIChpLCBsYWJlbCkgewogICAgICAgICAgdmFyIHkgPSB0aWNrT2Zmc2V0ICsgaSAqIHNpbmdsZUJpbkhlaWdodCArIDAuNTsKCiAgICAgICAgICB2YXIgdGhpc0xhYmVsID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudE5TKG5zLCAidGV4dCIpOwogICAgICAgICAgKDAsIF9qcXVlcnkyLmRlZmF1bHQpKHRoaXNMYWJlbCkudGV4dChsYWJlbHNbaV0pLmF0dHIoInkiLCB5KS5hdHRyKCJkeCIsIGxhYmVsUGFkZGluZykuYXR0cigiZHkiLCAiMC41ZXgiKTsKICAgICAgICAgIGcuYXBwZW5kQ2hpbGQodGhpc0xhYmVsKTsKICAgICAgICAgIG1heExibFdpZHRoID0gTWF0aC5tYXgobWF4TGJsV2lkdGgsIHRoaXNMYWJlbC5nZXRDb21wdXRlZFRleHRMZW5ndGgoKSk7CgogICAgICAgICAgdmFyIHRoaXNUaWNrID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudE5TKG5zLCAibGluZSIpOwogICAgICAgICAgKDAsIF9qcXVlcnkyLmRlZmF1bHQpKHRoaXNUaWNrKS5hdHRyKCJ4MSIsIDApLmF0dHIoIngyIiwgdGlja1dpZHRoKS5hdHRyKCJ5MSIsIHkpLmF0dHIoInkyIiwgeSkuYXR0cigic3Ryb2tlLXdpZHRoIiwgMSk7CiAgICAgICAgICBnLmFwcGVuZENoaWxkKHRoaXNUaWNrKTsKICAgICAgICB9KTsKCiAgICAgICAgLy8gTm93IHRoYXQgd2Uga25vdyB0aGUgbWF4IGxhYmVsIHdpZHRoLCB3ZSBjYW4gcmlnaHQtanVzdGlmeQogICAgICAgICgwLCBfanF1ZXJ5Mi5kZWZhdWx0KShzdmcpLmZpbmQoInRleHQiKS5hdHRyKCJkeCIsIGxhYmVsUGFkZGluZyArIG1heExibFdpZHRoKS5hdHRyKCJ0ZXh0LWFuY2hvciIsICJlbmQiKTsKICAgICAgICAvLyBGaW5hbCBzaXplIGZvciA8c3ZnPgogICAgICAgICgwLCBfanF1ZXJ5Mi5kZWZhdWx0KShzdmcpLmNzcyh7CiAgICAgICAgICB3aWR0aDogbWF4TGJsV2lkdGggKyBsYWJlbFBhZGRpbmcgKyAicHgiLAogICAgICAgICAgaGVpZ2h0OiB0b3RhbEhlaWdodCArIHZNYXJnaW4gKiAyICsgInB4IgogICAgICAgIH0pOwoKICAgICAgICBpZiAob3B0aW9ucy5uYV9jb2xvcikgewogICAgICAgICAgKDAsIF9qcXVlcnkyLmRlZmF1bHQpKGRpdikuYXBwZW5kKCI8ZGl2PjxpIHN0eWxlPVwiYmFja2dyb3VuZDoiICsgb3B0aW9ucy5uYV9jb2xvciArICI7b3BhY2l0eToiICsgb3B0aW9ucy5vcGFjaXR5ICsgIjtcIj48L2k+ICIgKyBvcHRpb25zLm5hX2xhYmVsICsgIjwvZGl2PiIpOwogICAgICAgIH0KICAgICAgfSkoKTsKICAgIH0gZWxzZSB7CiAgICAgIGlmIChvcHRpb25zLm5hX2NvbG9yKSB7CiAgICAgICAgY29sb3JzLnB1c2gob3B0aW9ucy5uYV9jb2xvcik7CiAgICAgICAgbGFiZWxzLnB1c2gob3B0aW9ucy5uYV9sYWJlbCk7CiAgICAgIH0KICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBjb2xvcnMubGVuZ3RoOyBpKyspIHsKICAgICAgICBsZWdlbmRIVE1MICs9ICI8aSBzdHlsZT1cImJhY2tncm91bmQ6IiArIGNvbG9yc1tpXSArICI7b3BhY2l0eToiICsgb3B0aW9ucy5vcGFjaXR5ICsgIlwiPjwvaT4gIiArIGxhYmVsc1tpXSArICI8YnIgY2xlYXI9J2JvdGgnLz4iOwogICAgICB9CiAgICAgIGRpdi5pbm5lckhUTUwgPSBsZWdlbmRIVE1MOwogICAgfQogICAgaWYgKG9wdGlvbnMudGl0bGUpICgwLCBfanF1ZXJ5Mi5kZWZhdWx0KShkaXYpLnByZXBlbmQoIjxkaXYgc3R5bGU9XCJtYXJnaW4tYm90dG9tOjNweFwiPjxzdHJvbmc+IiArIG9wdGlvbnMudGl0bGUgKyAiPC9zdHJvbmc+PC9kaXY+Iik7CiAgICByZXR1cm4gZGl2OwogIH07CgogIGlmIChvcHRpb25zLmdyb3VwKSB7CiAgICAoZnVuY3Rpb24gKCkgewogICAgICAvLyBBdXRvIGdlbmVyYXRlIGEgbGF5ZXJJRCBpZiBub3QgcHJvdmlkZWQKICAgICAgaWYgKCFvcHRpb25zLmxheWVySWQpIHsKICAgICAgICBvcHRpb25zLmxheWVySWQgPSBfbGVhZmxldDIuZGVmYXVsdC5zdGFtcChsZWdlbmQpOwogICAgICB9CgogICAgICB2YXIgbWFwID0gX3RoaXM1OwogICAgICBtYXAub24oIm92ZXJsYXlhZGQiLCBmdW5jdGlvbiAoZSkgewogICAgICAgIGlmIChlLm5hbWUgPT09IG9wdGlvbnMuZ3JvdXApIHsKICAgICAgICAgIG1hcC5jb250cm9scy5hZGQobGVnZW5kLCBvcHRpb25zLmxheWVySWQpOwogICAgICAgIH0KICAgICAgfSk7CiAgICAgIG1hcC5vbigib3ZlcmxheXJlbW92ZSIsIGZ1bmN0aW9uIChlKSB7CiAgICAgICAgaWYgKGUubmFtZSA9PT0gb3B0aW9ucy5ncm91cCkgewogICAgICAgICAgbWFwLmNvbnRyb2xzLnJlbW92ZShvcHRpb25zLmxheWVySWQpOwogICAgICAgIH0KICAgICAgfSk7CiAgICAgIG1hcC5vbigiZ3JvdXBhZGQiLCBmdW5jdGlvbiAoZSkgewogICAgICAgIGlmIChlLm5hbWUgPT09IG9wdGlvbnMuZ3JvdXApIHsKICAgICAgICAgIG1hcC5jb250cm9scy5hZGQobGVnZW5kLCBvcHRpb25zLmxheWVySWQpOwogICAgICAgIH0KICAgICAgfSk7CiAgICAgIG1hcC5vbigiZ3JvdXByZW1vdmUiLCBmdW5jdGlvbiAoZSkgewogICAgICAgIGlmIChlLm5hbWUgPT09IG9wdGlvbnMuZ3JvdXApIHsKICAgICAgICAgIG1hcC5jb250cm9scy5yZW1vdmUob3B0aW9ucy5sYXllcklkKTsKICAgICAgICB9CiAgICAgIH0pOwogICAgfSkoKTsKICB9CgogIHRoaXMuY29udHJvbHMuYWRkKGxlZ2VuZCwgb3B0aW9ucy5sYXllcklkKTsKfTsKCm1ldGhvZHMuYWRkTGF5ZXJzQ29udHJvbCA9IGZ1bmN0aW9uIChiYXNlR3JvdXBzLCBvdmVybGF5R3JvdXBzLCBvcHRpb25zKSB7CiAgdmFyIF90aGlzNiA9IHRoaXM7CgogIC8vIE9ubHkgYWxsb3cgb25lIGxheWVycyBjb250cm9sIGF0IGEgdGltZQogIG1ldGhvZHMucmVtb3ZlTGF5ZXJzQ29udHJvbC5jYWxsKHRoaXMpOwoKICB2YXIgZmlyc3RMYXllciA9IHRydWU7CiAgdmFyIGJhc2UgPSB7fTsKICBfanF1ZXJ5Mi5kZWZhdWx0LmVhY2goKDAsIF91dGlsLmFzQXJyYXkpKGJhc2VHcm91cHMpLCBmdW5jdGlvbiAoaSwgZykgewogICAgdmFyIGxheWVyID0gX3RoaXM2LmxheWVyTWFuYWdlci5nZXRMYXllckdyb3VwKGcsIHRydWUpOwogICAgaWYgKGxheWVyKSB7CiAgICAgIGJhc2VbZ10gPSBsYXllcjsKCiAgICAgIC8vIENoZWNrIGlmID4xIGJhc2UgbGF5ZXJzIGFyZSB2aXNpYmxlOyBpZiBzbywgaGlkZSBhbGwgYnV0IHRoZSBmaXJzdCBvbmUKICAgICAgaWYgKF90aGlzNi5oYXNMYXllcihsYXllcikpIHsKICAgICAgICBpZiAoZmlyc3RMYXllcikgewogICAgICAgICAgZmlyc3RMYXllciA9IGZhbHNlOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICBfdGhpczYucmVtb3ZlTGF5ZXIobGF5ZXIpOwogICAgICAgIH0KICAgICAgfQogICAgfQogIH0pOwogIHZhciBvdmVybGF5ID0ge307CiAgX2pxdWVyeTIuZGVmYXVsdC5lYWNoKCgwLCBfdXRpbC5hc0FycmF5KShvdmVybGF5R3JvdXBzKSwgZnVuY3Rpb24gKGksIGcpIHsKICAgIHZhciBsYXllciA9IF90aGlzNi5sYXllck1hbmFnZXIuZ2V0TGF5ZXJHcm91cChnLCB0cnVlKTsKICAgIGlmIChsYXllcikgewogICAgICBvdmVybGF5W2ddID0gbGF5ZXI7CiAgICB9CiAgfSk7CgogIHZhciBsYXllcnNDb250cm9sID0gX2xlYWZsZXQyLmRlZmF1bHQuY29udHJvbC5sYXllcnMoYmFzZSwgb3ZlcmxheSwgb3B0aW9ucykuYWRkVG8odGhpcyk7CiAgdGhpcy5jdXJyZW50TGF5ZXJzQ29udHJvbCA9IGxheWVyc0NvbnRyb2w7Cn07CgptZXRob2RzLnJlbW92ZUxheWVyc0NvbnRyb2wgPSBmdW5jdGlvbiAoKSB7CiAgaWYgKHRoaXMuY3VycmVudExheWVyc0NvbnRyb2wpIHsKICAgIHRoaXMuY3VycmVudExheWVyc0NvbnRyb2wucmVtb3ZlRnJvbSh0aGlzKTsKICAgIHRoaXMuY3VycmVudExheWVyc0NvbnRyb2wgPSBudWxsOwogIH0KfTsKCm1ldGhvZHMuYWRkU2NhbGVCYXIgPSBmdW5jdGlvbiAob3B0aW9ucykgewoKICAvLyBPbmx5IGFsbG93IG9uZSBzY2FsZSBiYXIgYXQgYSB0aW1lCiAgbWV0aG9kcy5yZW1vdmVTY2FsZUJhci5jYWxsKHRoaXMpOwoKICB2YXIgc2NhbGVCYXIgPSBfbGVhZmxldDIuZGVmYXVsdC5jb250cm9sLnNjYWxlKG9wdGlvbnMpLmFkZFRvKHRoaXMpOwogIHRoaXMuY3VycmVudFNjYWxlQmFyID0gc2NhbGVCYXI7Cn07CgptZXRob2RzLnJlbW92ZVNjYWxlQmFyID0gZnVuY3Rpb24gKCkgewogIGlmICh0aGlzLmN1cnJlbnRTY2FsZUJhcikgewogICAgdGhpcy5jdXJyZW50U2NhbGVCYXIucmVtb3ZlRnJvbSh0aGlzKTsKICAgIHRoaXMuY3VycmVudFNjYWxlQmFyID0gbnVsbDsKICB9Cn07CgptZXRob2RzLmhpZGVHcm91cCA9IGZ1bmN0aW9uIChncm91cCkgewogIHZhciBfdGhpczcgPSB0aGlzOwoKICBfanF1ZXJ5Mi5kZWZhdWx0LmVhY2goKDAsIF91dGlsLmFzQXJyYXkpKGdyb3VwKSwgZnVuY3Rpb24gKGksIGcpIHsKICAgIHZhciBsYXllciA9IF90aGlzNy5sYXllck1hbmFnZXIuZ2V0TGF5ZXJHcm91cChnLCB0cnVlKTsKICAgIGlmIChsYXllcikgewogICAgICBfdGhpczcucmVtb3ZlTGF5ZXIobGF5ZXIpOwogICAgfQogIH0pOwp9OwoKbWV0aG9kcy5zaG93R3JvdXAgPSBmdW5jdGlvbiAoZ3JvdXApIHsKICB2YXIgX3RoaXM4ID0gdGhpczsKCiAgX2pxdWVyeTIuZGVmYXVsdC5lYWNoKCgwLCBfdXRpbC5hc0FycmF5KShncm91cCksIGZ1bmN0aW9uIChpLCBnKSB7CiAgICB2YXIgbGF5ZXIgPSBfdGhpczgubGF5ZXJNYW5hZ2VyLmdldExheWVyR3JvdXAoZywgdHJ1ZSk7CiAgICBpZiAobGF5ZXIpIHsKICAgICAgX3RoaXM4LmFkZExheWVyKGxheWVyKTsKICAgIH0KICB9KTsKfTsKCmZ1bmN0aW9uIHNldHVwU2hvd0hpZGVHcm91cHNPblpvb20obWFwKSB7CiAgaWYgKG1hcC5sZWFmbGV0ci5faGFzSW5pdGlhbGl6ZWRTaG93SGlkZUdyb3VwcykgewogICAgcmV0dXJuOwogIH0KICBtYXAubGVhZmxldHIuX2hhc0luaXRpYWxpemVkU2hvd0hpZGVHcm91cHMgPSB0cnVlOwoKICBmdW5jdGlvbiBzZXRWaXNpYmlsaXR5KGxheWVyLCB2aXNpYmxlLCBncm91cCkgewogICAgaWYgKHZpc2libGUgIT09IG1hcC5oYXNMYXllcihsYXllcikpIHsKICAgICAgaWYgKHZpc2libGUpIHsKICAgICAgICBtYXAuYWRkTGF5ZXIobGF5ZXIpOwogICAgICAgIG1hcC5maXJlKCJncm91cGFkZCIsIHsgIm5hbWUiOiBncm91cCwgImxheWVyIjogbGF5ZXIgfSk7CiAgICAgIH0gZWxzZSB7CiAgICAgICAgbWFwLnJlbW92ZUxheWVyKGxheWVyKTsKICAgICAgICBtYXAuZmlyZSgiZ3JvdXByZW1vdmUiLCB7ICJuYW1lIjogZ3JvdXAsICJsYXllciI6IGxheWVyIH0pOwogICAgICB9CiAgICB9CiAgfQoKICBmdW5jdGlvbiBzaG93SGlkZUdyb3Vwc09uWm9vbSgpIHsKICAgIGlmICghbWFwLmxheWVyTWFuYWdlcikgcmV0dXJuOwoKICAgIHZhciB6b29tID0gbWFwLmdldFpvb20oKTsKICAgIG1hcC5sYXllck1hbmFnZXIuZ2V0QWxsR3JvdXBOYW1lcygpLmZvckVhY2goZnVuY3Rpb24gKGdyb3VwKSB7CiAgICAgIHZhciBsYXllciA9IG1hcC5sYXllck1hbmFnZXIuZ2V0TGF5ZXJHcm91cChncm91cCwgZmFsc2UpOwogICAgICBpZiAobGF5ZXIgJiYgdHlwZW9mIGxheWVyLnpvb21MZXZlbHMgIT09ICJ1bmRlZmluZWQiKSB7CiAgICAgICAgc2V0VmlzaWJpbGl0eShsYXllciwgbGF5ZXIuem9vbUxldmVscyA9PT0gdHJ1ZSB8fCBsYXllci56b29tTGV2ZWxzLmluZGV4T2Yoem9vbSkgPj0gMCwgZ3JvdXApOwogICAgICB9CiAgICB9KTsKICB9CgogIG1hcC5zaG93SGlkZUdyb3Vwc09uWm9vbSA9IHNob3dIaWRlR3JvdXBzT25ab29tOwogIG1hcC5vbigiem9vbWVuZCIsIHNob3dIaWRlR3JvdXBzT25ab29tKTsKfQoKbWV0aG9kcy5zZXRHcm91cE9wdGlvbnMgPSBmdW5jdGlvbiAoZ3JvdXAsIG9wdGlvbnMpIHsKICB2YXIgX3RoaXM5ID0gdGhpczsKCiAgX2pxdWVyeTIuZGVmYXVsdC5lYWNoKCgwLCBfdXRpbC5hc0FycmF5KShncm91cCksIGZ1bmN0aW9uIChpLCBnKSB7CiAgICB2YXIgbGF5ZXIgPSBfdGhpczkubGF5ZXJNYW5hZ2VyLmdldExheWVyR3JvdXAoZywgdHJ1ZSk7CiAgICAvLyBUaGlzIHNsaWdodGx5IHRvcnR1cmVkIGNoZWNrIGlzIGJlY2F1c2UgMCBpcyBhIHZhbGlkIHZhbHVlIGZvciB6b29tTGV2ZWxzCiAgICBpZiAodHlwZW9mIG9wdGlvbnMuem9vbUxldmVscyAhPT0gInVuZGVmaW5lZCIgJiYgb3B0aW9ucy56b29tTGV2ZWxzICE9PSBudWxsKSB7CiAgICAgIGxheWVyLnpvb21MZXZlbHMgPSAoMCwgX3V0aWwuYXNBcnJheSkob3B0aW9ucy56b29tTGV2ZWxzKTsKICAgIH0KICB9KTsKCiAgc2V0dXBTaG93SGlkZUdyb3Vwc09uWm9vbSh0aGlzKTsKICB0aGlzLnNob3dIaWRlR3JvdXBzT25ab29tKCk7Cn07CgptZXRob2RzLmFkZFJhc3RlckltYWdlID0gZnVuY3Rpb24gKHVyaSwgYm91bmRzLCBvcGFjaXR5LCBhdHRyaWJ1dGlvbiwgbGF5ZXJJZCwgZ3JvdXApIHsKICAvLyB1cmkgaXMgYSBkYXRhIFVSSSBjb250YWluaW5nIGFuIGltYWdlLiBXZSB3YW50IHRvIHBhaW50IHRoaXMgaW1hZ2UgYXMgYQogIC8vIGxheWVyIGF0ICh0b3AtbGVmdCkgYm91bmRzWzBdIHRvIChib3R0b20tcmlnaHQpIGJvdW5kc1sxXS4KCiAgLy8gV2UgY2FuJ3Qgc2ltcGx5IHVzZSBJbWFnZU92ZXJsYXksIGFzIGl0IHVzZXMgYmlsaW5lYXIgc2NhbGluZyB3aGljaCBsb29rcwogIC8vIGF3ZnVsIGFzIHlvdSB6b29tIGluIChhbmQgc29tZXRpbWVzIHNoaWZ0cyBwb3NpdGlvbnMgb3IgZGlzYXBwZWFycykuCiAgLy8gSW5zdGVhZCwgd2UnbGwgdXNlIGEgVGlsZUxheWVyLkNhbnZhcyB0byBkcmF3IHBpZWNlcyBvZiB0aGUgaW1hZ2UuCgogIC8vIEZpcnN0LCBzb21lIGhlbHBlciBmdW5jdGlvbnMuCgogIC8vIGRlZ3JlZTJ0aWxlIGNvbnZlcnRzIGxhdGl0dWRlLCBsb25naXR1ZGUsIGFuZCB6b29tIHRvIHggYW5kIHkgdGlsZQogIC8vIG51bWJlcnMuIFRoZSB0aWxlIG51bWJlcnMgcmV0dXJuZWQgY2FuIGJlIG5vbi1pbnRlZ3JhbCwgYXMgdGhlcmUncyBubwogIC8vIHJlYXNvbiB0byBleHBlY3QgdGhhdCB0aGUgbGF0L2xuZyBpbnB1dHMgYXJlIGV4YWN0bHkgb24gdGhlIGJvcmRlciBvZiB0d28KICAvLyB0aWxlcy4KICAvLwogIC8vIFdlJ2xsIHVzZSB0aGlzIHRvIGNvbnZlcnQgdGhlIGJvdW5kcyB3ZSBnb3QgZnJvbSB0aGUgc2VydmVyLCBpbnRvIGNvb3JkcwogIC8vIGluIHRpbGUtc3BhY2UgYXQgYSBnaXZlbiB6b29tIGxldmVsLiBOb3RlIHRoYXQgb25jZSB3ZSBkbyB0aGUgY29udmVyc2lvbiwKICAvLyB3ZSBkb24ndCB0byBkbyBhbnkgbW9yZSB0cmlnb25vbWV0cnkgdG8gY29udmVydCBiZXR3ZWVuIHBpeGVsIGNvb3JkaW5hdGVzCiAgLy8gYW5kIHRpbGUgY29vcmRpbmF0ZXM7IHRoZSBzb3VyY2UgaW1hZ2UgcGl4ZWwgY29vcmRzLCBkZXN0aW5hdGlvbiBjYW52YXMKICAvLyBwaXhlbCBjb29yZHMsIGFuZCB0aWxlIGNvb3JkcyBhbGwgY2FuIGJlIHNjYWxlZCBsaW5lYXJseS4KICBmdW5jdGlvbiBkZWdyZWUydGlsZShsYXQsIGxuZywgem9vbSkgewogICAgLy8gU2VlIGh0dHA6Ly93aWtpLm9wZW5zdHJlZXRtYXAub3JnL3dpa2kvU2xpcHB5X21hcF90aWxlbmFtZXMKICAgIHZhciBsYXRSYWQgPSBsYXQgKiBNYXRoLlBJIC8gMTgwOwogICAgdmFyIG4gPSBNYXRoLnBvdygyLCB6b29tKTsKICAgIHZhciB4ID0gKGxuZyArIDE4MCkgLyAzNjAgKiBuOwogICAgdmFyIHkgPSAoMSAtIE1hdGgubG9nKE1hdGgudGFuKGxhdFJhZCkgKyAxIC8gTWF0aC5jb3MobGF0UmFkKSkgLyBNYXRoLlBJKSAvIDIgKiBuOwogICAgcmV0dXJuIHsgeDogeCwgeTogeSB9OwogIH0KCiAgLy8gR2l2ZW4gYSByYW5nZSBbZnJvbSx0bykgYW5kIGVpdGhlciBvbmUgb3IgdHdvIG51bWJlcnMsIHJldHVybnMgdHJ1ZSBpZgogIC8vIHRoZXJlIGlzIGFueSBvdmVybGFwIGJldHdlZW4gW3gseDEpIGFuZCB0aGUgcmFuZ2UtLW9yIGlmIHgxIGlzIG9taXR0ZWQsCiAgLy8gdGhlbiByZXR1cm5zIHRydWUgaWYgeCBpcyB3aXRoaW4gW2Zyb20sdG8pLgogIGZ1bmN0aW9uIG92ZXJsYXAoZnJvbSwgdG8sIHgsIC8qIG9wdGlvbmFsICoveDEpIHsKICAgIGlmIChhcmd1bWVudHMubGVuZ3RoID09IDMpIHgxID0geDsKICAgIHJldHVybiB4IDwgdG8gJiYgeDEgPj0gZnJvbTsKICB9CgogIGZ1bmN0aW9uIGdldENhbnZhc1Ntb290aGluZ1Byb3BlcnR5KGN0eCkgewogICAgdmFyIGNhbmRpZGF0ZXMgPSBbImltYWdlU21vb3RoaW5nRW5hYmxlZCIsICJtb3pJbWFnZVNtb290aGluZ0VuYWJsZWQiLCAid2Via2l0SW1hZ2VTbW9vdGhpbmdFbmFibGVkIiwgIm1zSW1hZ2VTbW9vdGhpbmdFbmFibGVkIl07CiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGNhbmRpZGF0ZXMubGVuZ3RoOyBpKyspIHsKICAgICAgaWYgKHR5cGVvZiBjdHhbY2FuZGlkYXRlc1tpXV0gIT09ICJ1bmRlZmluZWQiKSB7CiAgICAgICAgcmV0dXJuIGNhbmRpZGF0ZXNbaV07CiAgICAgIH0KICAgIH0KICAgIHJldHVybiBudWxsOwogIH0KCiAgLy8gT3VyIGdlbmVyYWwgc3RyYXRlZ3kgaXMgdG86CiAgLy8gMS4gTG9hZCB0aGUgZGF0YSBVUkkgaW4gYW4gSW1hZ2UoKSBvYmplY3QsIHNvIHdlIGNhbiBnZXQgaXRzIHBpeGVsCiAgLy8gICAgZGltZW5zaW9ucyBhbmQgdGhlIHVuZGVybHlpbmcgaW1hZ2UgZGF0YS4gKFdlIGNvdWxkIGhhdmUgZG9uZSB0aGlzCiAgLy8gICAgYnkgbm90IGVuY29kaW5nIGFzIFBORyBhdCBhbGwgYnV0IGp1c3Qgc2VuZCBhbiBhcnJheSBvZiBSR0JBIHZhbHVlcwogIC8vICAgIGZyb20gdGhlIHNlcnZlciwgYnV0IHRoYXQgd291bGQgaW5mbGF0ZSB0aGUgSlNPTiB0b28gbXVjaC4pCiAgLy8gMi4gQ3JlYXRlIGEgaGlkZGVuIGNhbnZhcyB0aGF0IHdlIHVzZSBqdXN0IHRvIGV4dHJhY3QgdGhlIGltYWdlIGRhdGEKICAvLyAgICBmcm9tIHRoZSBJbWFnZSAodXNpbmcgQ29udGV4dDJELmdldEltYWdlRGF0YSgpKS4KICAvLyAzLiBDcmVhdGUgYSBUaWxlTGF5ZXIuQ2FudmFzIGFuZCBhZGQgaXQgdG8gdGhlIG1hcC4KCiAgLy8gV2Ugd2FudCB0byBzeW5jaHJvbm91c2x5IGNyZWF0ZSBhbmQgYXR0YWNoIHRoZSBUaWxlTGF5ZXIuQ2FudmFzIChzbyBhbgogIC8vIGltbWVkaWF0ZSBjYWxsIHRvIGNsZWFyUmFzdGVycygpIHdpbGwgYmUgcmVzcGVjdGVkLCBmb3IgZXhhbXBsZSksIGJ1dAogIC8vIEltYWdlIGxvYWRzIGl0cyBkYXRhIGFzeW5jaHJvbm91c2x5LiBGb3J0dW5hdGVseSB3ZSBjYW4gcmVzb2x2ZSB0aGlzCiAgLy8gYnkgcHV0dGluZyBUaWxlTGF5ZXIuQ2FudmFzIGludG8gYXN5bmMgbW9kZSwgd2hpY2ggd2lsbCBsZXQgdXMgY3JlYXRlCiAgLy8gYW5kIGF0dGFjaCB0aGUgbGF5ZXIgYnV0IGhhdmUgaXQgd2FpdCB1bnRpbCB0aGUgaW1hZ2UgaXMgbG9hZGVkIGJlZm9yZQogIC8vIGl0IGFjdHVhbGx5IGRyYXdzIGFueXRoaW5nLgoKICAvLyBUaGVzZSBhcmUgdGhlIHZhcmlhYmxlcyB0aGF0IHdlIHdpbGwgcG9wdWxhdGUgb25jZSB0aGUgaW1hZ2UgaXMgbG9hZGVkLgogIHZhciBpbWdEYXRhID0gbnVsbDsgLy8gMWQgcm93LW1ham9yIGFycmF5LCBmb3VyIFswLTI1NV0gaW50ZWdlcnMgcGVyIHBpeGVsCiAgdmFyIGltZ0RhdGFNaXBNYXBwZXIgPSBudWxsOwogIHZhciB3ID0gbnVsbDsgLy8gaW1hZ2Ugd2lkdGggaW4gcGl4ZWxzCiAgdmFyIGggPSBudWxsOyAvLyBpbWFnZSBoZWlnaHQgaW4gcGl4ZWxzCgogIC8vIFdlJ2xsIHVzZSB0aGlzIGFycmF5IHRvIHN0b3JlIGNhbGxiYWNrcyB0aGF0IG5lZWQgdG8gYmUgaW52b2tlZCBvbmNlCiAgLy8gaW1nRGF0YSwgdywgYW5kIGggaGF2ZSBiZWVuIHJlc29sdmVkLgogIHZhciBpbWdEYXRhQ2FsbGJhY2tzID0gW107CgogIC8vIENvbnN1bWVycyBvZiBpbWdEYXRhLCB3LCBhbmQgaCBjYW4gY2FsbCB0aGlzIHRvIGJlIG5vdGlmaWVkIHdoZW4gZGF0YQogIC8vIGlzIGF2YWlsYWJsZS4gVW5saWtlIG1vc3QgYXN5bmMvcHJvbWlzZS1iYXNlZCBBUElzLCB0aGUgY2FsbGJhY2sgd2lsbAogIC8vIGJlIGludm9rZWQgaW1tZWRpYXRlbHkvc3luY2hyb25vdXNseSBpZiB0aGUgZGF0YSBpcyBhbHJlYWR5IGF2YWlsYWJsZS4KICBmdW5jdGlvbiBnZXRJbWFnZURhdGEoY2FsbGJhY2spIHsKICAgIGlmIChpbWdEYXRhICE9IG51bGwpIHsKICAgICAgY2FsbGJhY2soaW1nRGF0YSwgdywgaCwgaW1nRGF0YU1pcE1hcHBlcik7CiAgICB9IGVsc2UgewogICAgICBpbWdEYXRhQ2FsbGJhY2tzLnB1c2goY2FsbGJhY2spOwogICAgfQogIH0KCiAgdmFyIGltZyA9IG5ldyBJbWFnZSgpOwogIGltZy5vbmxvYWQgPSBmdW5jdGlvbiAoKSB7CiAgICAvLyBTYXZlIHNpemUKICAgIHcgPSBpbWcud2lkdGg7CiAgICBoID0gaW1nLmhlaWdodDsKCiAgICAvLyBDcmVhdGUgYSBkdW1teSBjYW52YXMgdG8gZXh0cmFjdCB0aGUgaW1hZ2UgZGF0YQogICAgdmFyIGltZ0RhdGFDYW52YXMgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJjYW52YXMiKTsKICAgIGltZ0RhdGFDYW52YXMud2lkdGggPSB3OwogICAgaW1nRGF0YUNhbnZhcy5oZWlnaHQgPSBoOwogICAgaW1nRGF0YUNhbnZhcy5zdHlsZS5kaXNwbGF5ID0gIm5vbmUiOwogICAgZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZChpbWdEYXRhQ2FudmFzKTsKCiAgICB2YXIgaW1nRGF0YUN0eCA9IGltZ0RhdGFDYW52YXMuZ2V0Q29udGV4dCgiMmQiKTsKICAgIGltZ0RhdGFDdHguZHJhd0ltYWdlKGltZywgMCwgMCk7CgogICAgLy8gU2F2ZSB0aGUgaW1hZ2UgZGF0YS4KICAgIGltZ0RhdGEgPSBpbWdEYXRhQ3R4LmdldEltYWdlRGF0YSgwLCAwLCB3LCBoKS5kYXRhOwogICAgaW1nRGF0YU1pcE1hcHBlciA9IG5ldyBfbWlwbWFwcGVyMi5kZWZhdWx0KGltZyk7CgogICAgLy8gRG9uZSB3aXRoIHRoZSBjYW52YXMsIHJlbW92ZSBpdCBmcm9tIHRoZSBwYWdlIHNvIGl0IGNhbiBiZSBnYydkLgogICAgZG9jdW1lbnQuYm9keS5yZW1vdmVDaGlsZChpbWdEYXRhQ2FudmFzKTsKCiAgICAvLyBBbGVydCBhbnkgZ2V0SW1hZ2VEYXRhIGNhbGxlcnMgd2hvIGFyZSB3YWl0aW5nLgogICAgZm9yICh2YXIgaSA9IDA7IGkgPCBpbWdEYXRhQ2FsbGJhY2tzLmxlbmd0aDsgaSsrKSB7CiAgICAgIGltZ0RhdGFDYWxsYmFja3NbaV0oaW1nRGF0YSwgdywgaCwgaW1nRGF0YU1pcE1hcHBlcik7CiAgICB9CiAgICBpbWdEYXRhQ2FsbGJhY2tzID0gW107CiAgfTsKICBpbWcuc3JjID0gdXJpOwoKICB2YXIgY2FudmFzVGlsZXMgPSBfbGVhZmxldDIuZGVmYXVsdC50aWxlTGF5ZXIuY2FudmFzKHsKICAgIG9wYWNpdHk6IG9wYWNpdHksCiAgICBhdHRyaWJ1dGlvbjogYXR0cmlidXRpb24sCiAgICBkZXRlY3RSZXRpbmE6IHRydWUsCiAgICBhc3luYzogdHJ1ZQogIH0pOwoKICBjYW52YXNUaWxlcy5kcmF3VGlsZSA9IGZ1bmN0aW9uIChjYW52YXMsIHRpbGVQb2ludCwgem9vbSkgewogICAgZ2V0SW1hZ2VEYXRhKGZ1bmN0aW9uIChpbWdEYXRhLCB3LCBoLCBtaXBtYXBwZXIpIHsKICAgICAgdHJ5IHsKICAgICAgICB2YXIgX3JldDggPSBmdW5jdGlvbiAoKSB7CiAgICAgICAgICAvLyBUaGUgQ29udGV4dDJEIHdlJ2xsIGJlaW5nIGRyYXdpbmcgb250by4gSXQncyBhbHdheXMgMjU2eDI1Ni4KICAgICAgICAgIHZhciBjdHggPSBjYW52YXMuZ2V0Q29udGV4dCgiMmQiKTsKCiAgICAgICAgICAvLyBDb252ZXJ0IG91ciBpbWFnZSBkYXRhJ3MgdG9wLWxlZnQgYW5kIGJvdHRvbS1yaWdodCBsb2NhdGlvbnMgaW50bwogICAgICAgICAgLy8geC95IHRpbGUgY29vcmRpbmF0ZXMuIFRoaXMgaXMgZXNzZW50aWFsbHkgZG9pbmcgYSBzcGhlcmljYWwgbWVyY2F0b3IKICAgICAgICAgIC8vIHByb2plY3Rpb24sIHRoZW4gbXVsdGlwbHlpbmcgYnkgMl56b29tLgogICAgICAgICAgdmFyIHRvcExlZnQgPSBkZWdyZWUydGlsZShib3VuZHNbMF1bMF0sIGJvdW5kc1swXVsxXSwgem9vbSk7CiAgICAgICAgICB2YXIgYm90dG9tUmlnaHQgPSBkZWdyZWUydGlsZShib3VuZHNbMV1bMF0sIGJvdW5kc1sxXVsxXSwgem9vbSk7CiAgICAgICAgICAvLyBUaGUgc2l6ZSBvZiB0aGUgaW1hZ2UgaW4geC95IHRpbGUgY29vcmRpbmF0ZXMuCiAgICAgICAgICB2YXIgZXh0ZW50ID0geyB4OiBib3R0b21SaWdodC54IC0gdG9wTGVmdC54LCB5OiBib3R0b21SaWdodC55IC0gdG9wTGVmdC55IH07CgogICAgICAgICAgLy8gU2hvcnQgY2lyY3VpdCBpZiB0aWxlIGlzIHRvdGFsbHkgZGlzam9pbnQgZnJvbSBpbWFnZS4KICAgICAgICAgIGlmICghb3ZlcmxhcCh0aWxlUG9pbnQueCwgdGlsZVBvaW50LnggKyAxLCB0b3BMZWZ0LngsIGJvdHRvbVJpZ2h0LngpKSByZXR1cm4gewogICAgICAgICAgICAgIHY6IHZvaWQgMAogICAgICAgICAgICB9OwogICAgICAgICAgaWYgKCFvdmVybGFwKHRpbGVQb2ludC55LCB0aWxlUG9pbnQueSArIDEsIHRvcExlZnQueSwgYm90dG9tUmlnaHQueSkpIHJldHVybiB7CiAgICAgICAgICAgICAgdjogdm9pZCAwCiAgICAgICAgICAgIH07CgogICAgICAgICAgLy8gVGhlIGxpbmVhciByZXNvbHV0aW9uIG9mIHRoZSB0aWxlIHdlJ3JlIGRyYXdpbmcgaXMgYWx3YXlzIDI1NnB4IHBlciB0aWxlIHVuaXQuCiAgICAgICAgICAvLyBJZiB0aGUgbGluZWFyIHJlc29sdXRpb24gKGluIGVpdGhlciBkaXJlY3Rpb24pIG9mIHRoZSBpbWFnZSBpcyBsZXNzIHRoYW4gMjU2cHgKICAgICAgICAgIC8vIHBlciB0aWxlIHVuaXQsIHRoZW4gdXNlIG5lYXJlc3QgbmVpZ2hib3I7IG90aGVyd2lzZSwgdXNlIHRoZSBjYW52YXMncyBidWlsdC1pbgogICAgICAgICAgLy8gc2NhbGluZy4KICAgICAgICAgIHZhciBpbWdSZXMgPSB7CiAgICAgICAgICAgIHg6IHcgLyBleHRlbnQueCwKICAgICAgICAgICAgeTogaCAvIGV4dGVudC55CiAgICAgICAgICB9OwoKICAgICAgICAgIC8vIFdlIGNhbiBkbyB0aGUgYWN0dWFsIGRyYXdpbmcgaW4gb25lIG9mIHRocmVlIHdheXM6CiAgICAgICAgICAvLyAtIENhbGwgZHJhd0ltYWdlKCkuIFRoaXMgaXMgZWFzeSBhbmQgZmFzdCwgYW5kIHJlc3VsdHMgaW4gc21vb3RoCiAgICAgICAgICAvLyAgIGludGVycG9sYXRpb24gKGJpbGluZWFyPykuIFRoaXMgaXMgd2hhdCB3ZSB3YW50IHdoZW4gd2UgYXJlCiAgICAgICAgICAvLyAgIHJlZHVjaW5nIHRoZSBpbWFnZSBmcm9tIGl0cyBuYXRpdmUgc2l6ZS4KICAgICAgICAgIC8vIC0gQ2FsbCBkcmF3SW1hZ2UoKSB3aXRoIGltYWdlU21vb3RoaW5nRW5hYmxlZD1mYWxzZS4gVGhpcyBpcyBlYXN5CiAgICAgICAgICAvLyAgIGFuZCBmYXN0IGFuZCBnaXZlcyB1cyBuZWFyZXN0LW5laWdoYm9yIGludGVycG9sYXRpb24sIHdoaWNoIGlzIHdoYXQKICAgICAgICAgIC8vICAgd2Ugd2FudCB3aGVuIGVubGFyZ2luZyB0aGUgaW1hZ2UuIEhvd2V2ZXIsIGl0J3MgdW5zdXBwb3J0ZWQgb24gbWFueQogICAgICAgICAgLy8gICBicm93c2VycyAoaW5jbHVkaW5nIFF0V2Via2l0KS4KICAgICAgICAgIC8vIC0gRG8gYSBtYW51YWwgbmVhcmVzdC1uZWlnaGJvciBpbnRlcnBvbGF0aW9uLiBUaGlzIGlzIHdoYXQgd2UnbGwgZmFsbAogICAgICAgICAgLy8gICBiYWNrIHRvIHdoZW4gZW5sYXJnaW5nLCBhbmQgaW1hZ2VTbW9vdGhpbmdFbmFibGVkIGlzbid0IHN1cHBvcnRlZC4KICAgICAgICAgIC8vICAgSW4gdGhlb3J5IGl0J3Mgc2xvd2VyLCBidXQgc3RpbGwgcHJldHR5IGZhc3Qgb24gbXkgbWFjaGluZSwgYW5kIHRoZQogICAgICAgICAgLy8gICByZXN1bHRzIGxvb2sgdGhlIHNhbWUgQUZBSUNULgoKICAgICAgICAgIC8vIElzIGltYWdlU21vb3RoaW5nRW5hYmxlZCBzdXBwb3J0ZWQ/IElmIHNvLCB3ZSBjYW4gbGV0IGNhbnZhcyBkbwogICAgICAgICAgLy8gbmVhcmVzdC1uZWlnaGJvciBpbnRlcnBvbGF0aW9uIGZvciB1cy4KICAgICAgICAgIHZhciBzbW9vdGhpbmdQcm9wZXJ0eSA9IGdldENhbnZhc1Ntb290aGluZ1Byb3BlcnR5KGN0eCk7CgogICAgICAgICAgaWYgKHNtb290aGluZ1Byb3BlcnR5IHx8IGltZ1Jlcy54ID49IDI1NiAmJiBpbWdSZXMueSA+PSAyNTYpIHsKICAgICAgICAgICAgLy8gVXNlIGJ1aWx0LWluIHNjYWxpbmcKCiAgICAgICAgICAgIC8vIFR1cm4gb2ZmIGFudGktYWxpYXNpbmcgaWYgbmVjZXNzYXJ5CiAgICAgICAgICAgIGlmIChzbW9vdGhpbmdQcm9wZXJ0eSkgewogICAgICAgICAgICAgIGN0eFtzbW9vdGhpbmdQcm9wZXJ0eV0gPSBpbWdSZXMueCA+PSAyNTYgJiYgaW1nUmVzLnkgPj0gMjU2OwogICAgICAgICAgICB9CgogICAgICAgICAgICAvLyBEb24ndCBuZWNlc3NhcmlseSBkcmF3IHdpdGggdGhlIGZ1bGwtc2l6ZSBpbWFnZTsgaWYgd2UncmUKICAgICAgICAgICAgLy8gZG93bnNjYWxpbmcsIHVzZSB0aGUgbWlwbWFwcGVyIHRvIGdldCBhIHByZS1kb3duc2NhbGVkIGltYWdlCiAgICAgICAgICAgIC8vIChzZWUgY29tbWVudHMgb24gTWlwbWFwcGVyIGNsYXNzIGZvciB3aHkgdGhpcyBtYXR0ZXJzKS4KICAgICAgICAgICAgbWlwbWFwcGVyLmdldEJ5U2l6ZShleHRlbnQueCAqIDI1NiwgZXh0ZW50LnkgKiAyNTYsIGZ1bmN0aW9uIChtaXApIHsKICAgICAgICAgICAgICAvLyBJdCdzIHBvc3NpYmxlIHRoYXQgdGhlIGltYWdlIHdpbGwgZ28gb2ZmIHRoZSBlZGdlIG9mIHRoZSBjYW52YXMtLQogICAgICAgICAgICAgIC8vIHRoYXQncyBPSywgdGhlIGNhbnZhcyBzaG91bGQgY2xpcCBhcHByb3ByaWF0ZWx5LgogICAgICAgICAgICAgIGN0eC5kcmF3SW1hZ2UobWlwLAogICAgICAgICAgICAgIC8vIENvbnZlcnQgYWJzIHRpbGUgY29vcmRzIHRvIHJlbCB0aWxlIGNvb3JkcywgdGhlbiAqMjU2IHRvIGNvbnZlcnQKICAgICAgICAgICAgICAvLyB0byByZWwgcGl4ZWwgY29vcmRzCiAgICAgICAgICAgICAgKHRvcExlZnQueCAtIHRpbGVQb2ludC54KSAqIDI1NiwgKHRvcExlZnQueSAtIHRpbGVQb2ludC55KSAqIDI1NiwKICAgICAgICAgICAgICAvLyBBbHdheXMgZHJhdyB0aGUgd2hvbGUgdGhpbmcgYW5kIGxldCBjYW52YXMgY2xpcDsgc28gd2UgY2FuIGp1c3QKICAgICAgICAgICAgICAvLyBjb252ZXJ0IGZyb20gc2l6ZSBpbiB0aWxlIGNvb3JkcyBzdHJhaWdodCB0byBwaXhlbHMKICAgICAgICAgICAgICBleHRlbnQueCAqIDI1NiwgZXh0ZW50LnkgKiAyNTYpOwogICAgICAgICAgICB9KTsKICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgIC8vIFVzZSBtYW51YWwgbmVhcmVzdC1uZWlnaGJvciBpbnRlcnBvbGF0aW9uCgogICAgICAgICAgICAvLyBDYWxjdWxhdGUgdGhlIHNvdXJjZSBpbWFnZSBwaXhlbCBjb29yZGluYXRlcyB0aGF0IGNvcnJlc3BvbmQgd2l0aAogICAgICAgICAgICAvLyB0aGUgdG9wLWxlZnQgYW5kIGJvdHRvbS1yaWdodCBvZiB0aGlzIHRpbGUuIChJZiB0aGUgc291cmNlIGltYWdlCiAgICAgICAgICAgIC8vIG9ubHkgcGFydGlhbGx5IG92ZXJsYXBzIHRoZSB0aWxlLCB3ZSB1c2UgbWF4L21pbiB0byBsaW1pdCB0aGUKICAgICAgICAgICAgLy8gc291cmNlU3RhcnQvRW5kIHRvIG9ubHkgcmVmbGVjdCB0aGUgb3ZlcmxhcHBpbmcgcG9ydGlvbi4pCiAgICAgICAgICAgIHZhciBzb3VyY2VTdGFydCA9IHsKICAgICAgICAgICAgICB4OiBNYXRoLm1heCgwLCBNYXRoLmZsb29yKCh0aWxlUG9pbnQueCAtIHRvcExlZnQueCkgKiBpbWdSZXMueCkpLAogICAgICAgICAgICAgIHk6IE1hdGgubWF4KDAsIE1hdGguZmxvb3IoKHRpbGVQb2ludC55IC0gdG9wTGVmdC55KSAqIGltZ1Jlcy55KSkKICAgICAgICAgICAgfTsKICAgICAgICAgICAgdmFyIHNvdXJjZUVuZCA9IHsKICAgICAgICAgICAgICB4OiBNYXRoLm1pbih3LCBNYXRoLmNlaWwoKHRpbGVQb2ludC54ICsgMSAtIHRvcExlZnQueCkgKiBpbWdSZXMueCkpLAogICAgICAgICAgICAgIHk6IE1hdGgubWluKGgsIE1hdGguY2VpbCgodGlsZVBvaW50LnkgKyAxIC0gdG9wTGVmdC55KSAqIGltZ1Jlcy55KSkKICAgICAgICAgICAgfTsKCiAgICAgICAgICAgIC8vIFRoZSBzaXplLCBpbiBkZXN0IHBpeGVscywgdGhhdCBlYWNoIHNvdXJjZSBwaXhlbCBzaG91bGQgb2NjdXB5LgogICAgICAgICAgICAvLyBUaGlzIG1pZ2h0IGJlIGdyZWF0ZXIgb3IgbGVzcyB0aGFuIDEgKGUuZy4gaWYgeCBhbmQgeSByZXNvbHV0aW9uCiAgICAgICAgICAgIC8vIGFyZSB2ZXJ5IGRpZmZlcmVudCkuCiAgICAgICAgICAgIHZhciBwaXhlbFNpemUgPSB7CiAgICAgICAgICAgICAgeDogMjU2IC8gaW1nUmVzLngsCiAgICAgICAgICAgICAgeTogMjU2IC8gaW1nUmVzLnkKICAgICAgICAgICAgfTsKCiAgICAgICAgICAgIC8vIEZvciBlYWNoIHBpeGVsIGluIHRoZSBzb3VyY2UgaW1hZ2UgdGhhdCBvdmVybGFwcyB0aGUgdGlsZS4uLgogICAgICAgICAgICBmb3IgKHZhciByb3cgPSBzb3VyY2VTdGFydC55OyByb3cgPCBzb3VyY2VFbmQueTsgcm93KyspIHsKICAgICAgICAgICAgICBmb3IgKHZhciBjb2wgPSBzb3VyY2VTdGFydC54OyBjb2wgPCBzb3VyY2VFbmQueDsgY29sKyspIHsKICAgICAgICAgICAgICAgIC8vIC4uLmV4dHJhY3QgdGhlIHBpeGVsIGRhdGEuLi4KICAgICAgICAgICAgICAgIHZhciBpID0gKHJvdyAqIHcgKyBjb2wpICogNDsKICAgICAgICAgICAgICAgIHZhciByID0gaW1nRGF0YVtpXTsKICAgICAgICAgICAgICAgIHZhciBnID0gaW1nRGF0YVtpICsgMV07CiAgICAgICAgICAgICAgICB2YXIgYiA9IGltZ0RhdGFbaSArIDJdOwogICAgICAgICAgICAgICAgdmFyIGEgPSBpbWdEYXRhW2kgKyAzXTsKICAgICAgICAgICAgICAgIGN0eC5maWxsU3R5bGUgPSAicmdiYSgiICsgW3IsIGcsIGIsIGEgLyAyNTVdLmpvaW4oIiwiKSArICIpIjsKCiAgICAgICAgICAgICAgICAvLyAuLi5jYWxjdWxhdGUgdGhlIGNvcnJlc3BvbmRpbmcgcGl4ZWwgY29vcmQgaW4gdGhlIGRlc3QgaW1hZ2UKICAgICAgICAgICAgICAgIC8vIHdoZXJlIGl0IHNob3VsZCBiZSBkcmF3bi4uLgogICAgICAgICAgICAgICAgdmFyIHBpeGVsUG9zID0gewogICAgICAgICAgICAgICAgICB4OiAoY29sIC8gaW1nUmVzLnggKyB0b3BMZWZ0LnggLSB0aWxlUG9pbnQueCkgKiAyNTYsCiAgICAgICAgICAgICAgICAgIHk6IChyb3cgLyBpbWdSZXMueSArIHRvcExlZnQueSAtIHRpbGVQb2ludC55KSAqIDI1NgogICAgICAgICAgICAgICAgfTsKCiAgICAgICAgICAgICAgICAvLyAuLi5hbmQgZHJhdyBhIHJlY3RhbmdsZSB0aGVyZS4KICAgICAgICAgICAgICAgIGN0eC5maWxsUmVjdChNYXRoLnJvdW5kKHBpeGVsUG9zLngpLCBNYXRoLnJvdW5kKHBpeGVsUG9zLnkpLAogICAgICAgICAgICAgICAgLy8gTG9va3MgY3JhenksIGJ1dCB0aGlzIGlzIG5lY2Vzc2FyeSB0byBwcmV2ZW50IHJvdW5kaW5nIGZyb20KICAgICAgICAgICAgICAgIC8vIGNhdXNpbmcgb3ZlcmxhcCBiZXR3ZWVuIHRoaXMgcmVjdCBhbmQgaXRzIG5laWdoYm9ycy4gVGhlCiAgICAgICAgICAgICAgICAvLyBtaW51ZW5kIGlzIHRoZSBsb2NhdGlvbiBvZiB0aGUgbmV4dCBwaXhlbCwgd2hpbGUgdGhlCiAgICAgICAgICAgICAgICAvLyBzdWJ0cmFoZW5kIGlzIHRoZSBwb3NpdGlvbiBvZiB0aGUgY3VycmVudCBwaXhlbCAodG8gdHVybiBhbgogICAgICAgICAgICAgICAgLy8gYWJzb2x1dGUgY29vcmRpbmF0ZSB0byBhIHdpZHRoL2hlaWdodCkuIFllcywgSSBoYWQgdG8gbG9vawogICAgICAgICAgICAgICAgLy8gdXAgbWludWVuZCBhbmQgc3VidHJhaGVuZC4KICAgICAgICAgICAgICAgIE1hdGgucm91bmQocGl4ZWxQb3MueCArIHBpeGVsU2l6ZS54KSAtIE1hdGgucm91bmQocGl4ZWxQb3MueCksIE1hdGgucm91bmQocGl4ZWxQb3MueSArIHBpeGVsU2l6ZS55KSAtIE1hdGgucm91bmQocGl4ZWxQb3MueSkpOwogICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgICAgfQogICAgICAgIH0oKTsKCiAgICAgICAgaWYgKCh0eXBlb2YgX3JldDggPT09ICJ1bmRlZmluZWQiID8gInVuZGVmaW5lZCIgOiBfdHlwZW9mKF9yZXQ4KSkgPT09ICJvYmplY3QiKSByZXR1cm4gX3JldDgudjsKICAgICAgfSBmaW5hbGx5IHsKICAgICAgICBjYW52YXNUaWxlcy50aWxlRHJhd24oY2FudmFzKTsKICAgICAgfQogICAgfSk7CiAgfTsKCiAgdGhpcy5sYXllck1hbmFnZXIuYWRkTGF5ZXIoY2FudmFzVGlsZXMsICJpbWFnZSIsIGxheWVySWQsIGdyb3VwKTsKfTsKCm1ldGhvZHMucmVtb3ZlSW1hZ2UgPSBmdW5jdGlvbiAobGF5ZXJJZCkgewogIHRoaXMubGF5ZXJNYW5hZ2VyLnJlbW92ZUxheWVyKCJpbWFnZSIsIGxheWVySWQpOwp9OwoKbWV0aG9kcy5jbGVhckltYWdlcyA9IGZ1bmN0aW9uICgpIHsKICB0aGlzLmxheWVyTWFuYWdlci5jbGVhckxheWVycygiaW1hZ2UiKTsKfTsKCm1ldGhvZHMuYWRkTWVhc3VyZSA9IGZ1bmN0aW9uIChvcHRpb25zKSB7CiAgLy8gaWYgYSBtZWFzdXJlQ29udHJvbCBhbHJlYWR5IGV4aXN0cywgdGhlbiByZW1vdmUgaXQgYW5kCiAgLy8gICByZXBsYWNlIHdpdGggYSBuZXcgb25lCiAgaWYgKHRoaXMubWVhc3VyZUNvbnRyb2wpIHsKICAgIHRoaXMubWVhc3VyZUNvbnRyb2wucmVtb3ZlRnJvbSh0aGlzKTsKICB9CiAgdGhpcy5tZWFzdXJlQ29udHJvbCA9IF9sZWFmbGV0Mi5kZWZhdWx0LmNvbnRyb2wubWVhc3VyZShvcHRpb25zKTsKICB0aGlzLm1lYXN1cmVDb250cm9sLmFkZFRvKHRoaXMpOwp9OwoKbWV0aG9kcy5yZW1vdmVNZWFzdXJlID0gZnVuY3Rpb24gKCkgewogIHRoaXMubWVhc3VyZUNvbnRyb2wucmVtb3ZlRnJvbSh0aGlzKTsKICBkZWxldGUgdGhpcy5tZWFzdXJlQ29udHJvbDsKfTsKCm1ldGhvZHMuYWRkU2VsZWN0ID0gZnVuY3Rpb24gKGN0R3JvdXApIHsKICB2YXIgX3RoaXMxMCA9IHRoaXM7CgogIG1ldGhvZHMucmVtb3ZlU2VsZWN0LmNhbGwodGhpcyk7CgogIHRoaXMuX3NlbGVjdEJ1dHRvbiA9IF9sZWFmbGV0Mi5kZWZhdWx0LmVhc3lCdXR0b24oewogICAgc3RhdGVzOiBbewogICAgICBzdGF0ZU5hbWU6ICJzZWxlY3QtaW5hY3RpdmUiLAogICAgICBpY29uOiAiaW9uLXFyLXNjYW5uZXIiLAogICAgICB0aXRsZTogIk1ha2UgYSBzZWxlY3Rpb24iLAogICAgICBvbkNsaWNrOiBmdW5jdGlvbiBvbkNsaWNrKGJ0biwgbWFwKSB7CiAgICAgICAgYnRuLnN0YXRlKCJzZWxlY3QtYWN0aXZlIik7CiAgICAgICAgX3RoaXMxMC5fbG9jYXRpb25GaWx0ZXIgPSBuZXcgX2xlYWZsZXQyLmRlZmF1bHQuTG9jYXRpb25GaWx0ZXIyKCk7CgogICAgICAgIGlmIChjdEdyb3VwKSB7CiAgICAgICAgICAoZnVuY3Rpb24gKCkgewogICAgICAgICAgICB2YXIgc2VsZWN0aW9uSGFuZGxlID0gbmV3IGdsb2JhbC5jcm9zc3RhbGsuU2VsZWN0aW9uSGFuZGxlKGN0R3JvdXApOwogICAgICAgICAgICBzZWxlY3Rpb25IYW5kbGUub24oImNoYW5nZSIsIGZ1bmN0aW9uIChlKSB7CiAgICAgICAgICAgICAgaWYgKGUuc2VuZGVyICE9PSBzZWxlY3Rpb25IYW5kbGUpIHsKICAgICAgICAgICAgICAgIGlmIChfdGhpczEwLl9sb2NhdGlvbkZpbHRlcikgewogICAgICAgICAgICAgICAgICBfdGhpczEwLl9sb2NhdGlvbkZpbHRlci5kaXNhYmxlKCk7CiAgICAgICAgICAgICAgICAgIGJ0bi5zdGF0ZSgic2VsZWN0LWluYWN0aXZlIik7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgfQogICAgICAgICAgICB9KTsKICAgICAgICAgICAgdmFyIGhhbmRsZXIgPSBmdW5jdGlvbiBoYW5kbGVyKGUpIHsKICAgICAgICAgICAgICBfdGhpczEwLmxheWVyTWFuYWdlci5icnVzaChfdGhpczEwLl9sb2NhdGlvbkZpbHRlci5nZXRCb3VuZHMoKSwgeyBzZW5kZXI6IHNlbGVjdGlvbkhhbmRsZSB9KTsKICAgICAgICAgICAgfTsKICAgICAgICAgICAgX3RoaXMxMC5fbG9jYXRpb25GaWx0ZXIub24oImVuYWJsZWQiLCBoYW5kbGVyKTsKICAgICAgICAgICAgX3RoaXMxMC5fbG9jYXRpb25GaWx0ZXIub24oImNoYW5nZSIsIGhhbmRsZXIpOwogICAgICAgICAgICBfdGhpczEwLl9sb2NhdGlvbkZpbHRlci5vbigiZGlzYWJsZWQiLCBmdW5jdGlvbiAoKSB7CiAgICAgICAgICAgICAgc2VsZWN0aW9uSGFuZGxlLmNsb3NlKCk7CiAgICAgICAgICAgICAgX3RoaXMxMC5fbG9jYXRpb25GaWx0ZXIgPSBudWxsOwogICAgICAgICAgICB9KTsKICAgICAgICAgIH0pKCk7CiAgICAgICAgfQoKICAgICAgICBfdGhpczEwLl9sb2NhdGlvbkZpbHRlci5hZGRUbyhtYXApOwogICAgICB9CiAgICB9LCB7CiAgICAgIHN0YXRlTmFtZTogInNlbGVjdC1hY3RpdmUiLAogICAgICBpY29uOiAiaW9uLWNsb3NlLXJvdW5kIiwKICAgICAgdGl0bGU6ICJEaXNtaXNzIHNlbGVjdGlvbiIsCiAgICAgIG9uQ2xpY2s6IGZ1bmN0aW9uIG9uQ2xpY2soYnRuLCBtYXApIHsKICAgICAgICBidG4uc3RhdGUoInNlbGVjdC1pbmFjdGl2ZSIpOwogICAgICAgIF90aGlzMTAuX2xvY2F0aW9uRmlsdGVyLmRpc2FibGUoKTsKICAgICAgICAvLyBJZiBleHBsaWNpdGx5IGRpc21pc3NlZCwgY2xlYXIgdGhlIGNyb3NzdGFsayBzZWxlY3Rpb25zCiAgICAgICAgX3RoaXMxMC5sYXllck1hbmFnZXIudW5icnVzaCgpOwogICAgICB9CiAgICB9XQogIH0pOwoKICB0aGlzLl9zZWxlY3RCdXR0b24uYWRkVG8odGhpcyk7Cn07CgptZXRob2RzLnJlbW92ZVNlbGVjdCA9IGZ1bmN0aW9uICgpIHsKICBpZiAodGhpcy5fbG9jYXRpb25GaWx0ZXIpIHsKICAgIHRoaXMuX2xvY2F0aW9uRmlsdGVyLmRpc2FibGUoKTsKICB9CgogIGlmICh0aGlzLl9zZWxlY3RCdXR0b24pIHsKICAgIHRoaXMucmVtb3ZlQ29udHJvbCh0aGlzLl9zZWxlY3RCdXR0b24pOwogICAgdGhpcy5fc2VsZWN0QnV0dG9uID0gbnVsbDsKICB9Cn07CgoKfSkuY2FsbCh0aGlzLHR5cGVvZiBnbG9iYWwgIT09ICJ1bmRlZmluZWQiID8gZ2xvYmFsIDogdHlwZW9mIHNlbGYgIT09ICJ1bmRlZmluZWQiID8gc2VsZiA6IHR5cGVvZiB3aW5kb3cgIT09ICJ1bmRlZmluZWQiID8gd2luZG93IDoge30pCn0seyIuL2NsdXN0ZXItbGF5ZXItc3RvcmUiOjEsIi4vY3JzX3V0aWxzIjozLCIuL2RhdGFmcmFtZSI6NCwiLi9nbG9iYWwvaHRtbHdpZGdldHMiOjYsIi4vZ2xvYmFsL2pxdWVyeSI6NywiLi9nbG9iYWwvbGVhZmxldCI6OCwiLi9nbG9iYWwvc2hpbnkiOjEwLCIuL21pcG1hcHBlciI6MTQsIi4vdXRpbCI6MTV9XSwxNDpbZnVuY3Rpb24ocmVxdWlyZSxtb2R1bGUsZXhwb3J0cyl7CiJ1c2Ugc3RyaWN0IjsKCk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCAiX19lc01vZHVsZSIsIHsKICB2YWx1ZTogdHJ1ZQp9KTsKCnZhciBfY3JlYXRlQ2xhc3MgPSBmdW5jdGlvbiAoKSB7IGZ1bmN0aW9uIGRlZmluZVByb3BlcnRpZXModGFyZ2V0LCBwcm9wcykgeyBmb3IgKHZhciBpID0gMDsgaSA8IHByb3BzLmxlbmd0aDsgaSsrKSB7IHZhciBkZXNjcmlwdG9yID0gcHJvcHNbaV07IGRlc2NyaXB0b3IuZW51bWVyYWJsZSA9IGRlc2NyaXB0b3IuZW51bWVyYWJsZSB8fCBmYWxzZTsgZGVzY3JpcHRvci5jb25maWd1cmFibGUgPSB0cnVlOyBpZiAoInZhbHVlIiBpbiBkZXNjcmlwdG9yKSBkZXNjcmlwdG9yLndyaXRhYmxlID0gdHJ1ZTsgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRhcmdldCwgZGVzY3JpcHRvci5rZXksIGRlc2NyaXB0b3IpOyB9IH0gcmV0dXJuIGZ1bmN0aW9uIChDb25zdHJ1Y3RvciwgcHJvdG9Qcm9wcywgc3RhdGljUHJvcHMpIHsgaWYgKHByb3RvUHJvcHMpIGRlZmluZVByb3BlcnRpZXMoQ29uc3RydWN0b3IucHJvdG90eXBlLCBwcm90b1Byb3BzKTsgaWYgKHN0YXRpY1Byb3BzKSBkZWZpbmVQcm9wZXJ0aWVzKENvbnN0cnVjdG9yLCBzdGF0aWNQcm9wcyk7IHJldHVybiBDb25zdHJ1Y3RvcjsgfTsgfSgpOwoKZnVuY3Rpb24gX2NsYXNzQ2FsbENoZWNrKGluc3RhbmNlLCBDb25zdHJ1Y3RvcikgeyBpZiAoIShpbnN0YW5jZSBpbnN0YW5jZW9mIENvbnN0cnVjdG9yKSkgeyB0aHJvdyBuZXcgVHlwZUVycm9yKCJDYW5ub3QgY2FsbCBhIGNsYXNzIGFzIGEgZnVuY3Rpb24iKTsgfSB9CgovLyBUaGlzIGNsYXNzIHNpbXVsYXRlcyBhIG1pcG1hcCwgd2hpY2ggc2hyaW5rcyBpbWFnZXMgYnkgcG93ZXJzIG9mIHR3by4gVGhpcwovLyBzdGVwd2lzZSByZWR1Y3Rpb24gcmVzdWx0cyBpbiAicGl4ZWwtcGVyZmVjdCBkb3duc2NhbGluZyIgKHdoZXJlIGV2ZXJ5Ci8vIHBpeGVsIG9mIHRoZSBvcmlnaW5hbCBpbWFnZSBoYXMgc29tZSBjb250cmlidXRpb24gdG8gdGhlIGRvd25zY2FsZWQgaW1hZ2UpCi8vIGFzIG9wcG9zZWQgdG8gYSBzaW5nbGUtc3RlcCBkb3duc2NhbGluZyB3aGljaCB3aWxsIGRpc2NhcmQgYSBsb3Qgb2YgZGF0YQovLyAoYW5kIHdpdGggc3BhcnNlIGltYWdlcyBhdCBzbWFsbCBzY2FsZXMgY2FuIGdpdmUgdmVyeSBzdXJwcmlzaW5nIHJlc3VsdHMpLgoKdmFyIE1pcG1hcHBlciA9IGZ1bmN0aW9uICgpIHsKICBmdW5jdGlvbiBNaXBtYXBwZXIoaW1nKSB7CiAgICBfY2xhc3NDYWxsQ2hlY2sodGhpcywgTWlwbWFwcGVyKTsKCiAgICB0aGlzLl9sYXllcnMgPSBbaW1nXTsKICB9CgogIC8vIFRoZSB2YXJpb3VzIGZ1bmN0aW9ucyBvbiB0aGlzIGNsYXNzIHRha2UgYSBjYWxsYmFjayBmdW5jdGlvbiBCVVQgTUFZIE9SIE1BWQogIC8vIE5PVCBhY3R1YWxseSBiZWhhdmUgYXN5bmNocm9ub3VzbHkuCgoKICBfY3JlYXRlQ2xhc3MoTWlwbWFwcGVyLCBbewogICAga2V5OiAiZ2V0QnlTaXplIiwKICAgIHZhbHVlOiBmdW5jdGlvbiBnZXRCeVNpemUoZGVzaXJlZFdpZHRoLCBkZXNpcmVkSGVpZ2h0LCBjYWxsYmFjaykgewogICAgICB2YXIgX3RoaXMgPSB0aGlzOwoKICAgICAgdmFyIGkgPSAwOwogICAgICB2YXIgbGFzdEltZyA9IHRoaXMuX2xheWVyc1swXTsKICAgICAgdmFyIHRlc3ROZXh0ID0gZnVuY3Rpb24gdGVzdE5leHQoKSB7CiAgICAgICAgX3RoaXMuZ2V0QnlJbmRleChpLCBmdW5jdGlvbiAoaW1nKSB7CiAgICAgICAgICAvLyBJZiBjdXJyZW50IGltYWdlIGlzIGludmFsaWQgKGkuZS4gdG9vIHNtYWxsIHRvIGJlIHJlbmRlcmVkKSBvcgogICAgICAgICAgLy8gaXQncyBzbWFsbGVyIHRoYW4gd2hhdCB3ZSB3YW50ZWQsIHJldHVybiB0aGUgbGFzdCBrbm93biBnb29kIGltYWdlLgogICAgICAgICAgaWYgKCFpbWcgfHwgaW1nLndpZHRoIDwgZGVzaXJlZFdpZHRoIHx8IGltZy5oZWlnaHQgPCBkZXNpcmVkSGVpZ2h0KSB7CiAgICAgICAgICAgIGNhbGxiYWNrKGxhc3RJbWcpOwogICAgICAgICAgICByZXR1cm47CiAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICBsYXN0SW1nID0gaW1nOwogICAgICAgICAgICBpKys7CiAgICAgICAgICAgIHRlc3ROZXh0KCk7CiAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgIH0KICAgICAgICB9KTsKICAgICAgfTsKICAgICAgdGVzdE5leHQoKTsKICAgIH0KICB9LCB7CiAgICBrZXk6ICJnZXRCeUluZGV4IiwKICAgIHZhbHVlOiBmdW5jdGlvbiBnZXRCeUluZGV4KGksIGNhbGxiYWNrKSB7CiAgICAgIHZhciBfdGhpczIgPSB0aGlzOwoKICAgICAgaWYgKHRoaXMuX2xheWVyc1tpXSkgewogICAgICAgIGNhbGxiYWNrKHRoaXMuX2xheWVyc1tpXSk7CiAgICAgICAgcmV0dXJuOwogICAgICB9CgogICAgICB0aGlzLmdldEJ5SW5kZXgoaSAtIDEsIGZ1bmN0aW9uIChwcmV2SW1nKSB7CiAgICAgICAgaWYgKCFwcmV2SW1nKSB7CiAgICAgICAgICAvLyBwcmV2SW1nIGNvdWxkIG5vdCBiZSBjYWxjdWxhdGVkICh0b28gc21hbGwsIHBvc3NpYmx5KQogICAgICAgICAgY2FsbGJhY2sobnVsbCk7CiAgICAgICAgICByZXR1cm47CiAgICAgICAgfQogICAgICAgIGlmIChwcmV2SW1nLndpZHRoIDwgMiB8fCBwcmV2SW1nLmhlaWdodCA8IDIpIHsKICAgICAgICAgIC8vIENhbid0IHJlZHVjZSB0aGlzIGltYWdlIGFueSBmdXJ0aGVyCiAgICAgICAgICBjYWxsYmFjayhudWxsKTsKICAgICAgICAgIHJldHVybjsKICAgICAgICB9CiAgICAgICAgLy8gSWYgcmVkdWNlIGV2ZXIgYmVjb21lcyB0cnVseSBhc3luY2hyb25vdXMsIHdlIHNob3VsZCBzdHVmZiBhIHByb21pc2Ugb3IKICAgICAgICAvLyBzb21ldGhpbmcgaW50byB0aGlzLl9sYXllcnNbaV0gYmVmb3JlIGNhbGxpbmcgdGhpcy5yZWR1Y2UoKSwgdG8gcHJldmVudAogICAgICAgIC8vIHJlZHVuZGFudCByZWR1Y2Ugb3BlcmF0aW9ucyBmcm9tIGhhcHBlbmluZy4KICAgICAgICBfdGhpczIucmVkdWNlKHByZXZJbWcsIGZ1bmN0aW9uIChyZWR1Y2VkSW1nKSB7CiAgICAgICAgICBfdGhpczIuX2xheWVyc1tpXSA9IHJlZHVjZWRJbWc7CiAgICAgICAgICBjYWxsYmFjayhyZWR1Y2VkSW1nKTsKICAgICAgICAgIHJldHVybjsKICAgICAgICB9KTsKICAgICAgfSk7CiAgICB9CiAgfSwgewogICAga2V5OiAicmVkdWNlIiwKICAgIHZhbHVlOiBmdW5jdGlvbiByZWR1Y2UoaW1nLCBjYWxsYmFjaykgewogICAgICB2YXIgaW1nRGF0YUNhbnZhcyA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImNhbnZhcyIpOwogICAgICBpbWdEYXRhQ2FudmFzLndpZHRoID0gTWF0aC5jZWlsKGltZy53aWR0aCAvIDIpOwogICAgICBpbWdEYXRhQ2FudmFzLmhlaWdodCA9IE1hdGguY2VpbChpbWcuaGVpZ2h0IC8gMik7CiAgICAgIGltZ0RhdGFDYW52YXMuc3R5bGUuZGlzcGxheSA9ICJub25lIjsKICAgICAgZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZChpbWdEYXRhQ2FudmFzKTsKICAgICAgdHJ5IHsKICAgICAgICB2YXIgaW1nRGF0YUN0eCA9IGltZ0RhdGFDYW52YXMuZ2V0Q29udGV4dCgiMmQiKTsKICAgICAgICBpbWdEYXRhQ3R4LmRyYXdJbWFnZShpbWcsIDAsIDAsIGltZy53aWR0aCAvIDIsIGltZy5oZWlnaHQgLyAyKTsKICAgICAgICBjYWxsYmFjayhpbWdEYXRhQ2FudmFzKTsKICAgICAgfSBmaW5hbGx5IHsKICAgICAgICBkb2N1bWVudC5ib2R5LnJlbW92ZUNoaWxkKGltZ0RhdGFDYW52YXMpOwogICAgICB9CiAgICB9CiAgfV0pOwoKICByZXR1cm4gTWlwbWFwcGVyOwp9KCk7CgpleHBvcnRzLmRlZmF1bHQgPSBNaXBtYXBwZXI7CgoKfSx7fV0sMTU6W2Z1bmN0aW9uKHJlcXVpcmUsbW9kdWxlLGV4cG9ydHMpewoidXNlIHN0cmljdCI7CgpPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgIl9fZXNNb2R1bGUiLCB7CiAgdmFsdWU6IHRydWUKfSk7CmV4cG9ydHMubG9nID0gbG9nOwpleHBvcnRzLnJlY3ljbGUgPSByZWN5Y2xlOwpleHBvcnRzLmFzQXJyYXkgPSBhc0FycmF5OwpmdW5jdGlvbiBsb2cobWVzc2FnZSkgewogIC8qIGVzbGludC1kaXNhYmxlIG5vLWNvbnNvbGUgKi8KICBpZiAoY29uc29sZSAmJiBjb25zb2xlLmxvZykgY29uc29sZS5sb2cobWVzc2FnZSk7CiAgLyogZXNsaW50LWVuYWJsZSBuby1jb25zb2xlICovCn0KCmZ1bmN0aW9uIHJlY3ljbGUodmFsdWVzLCBsZW5ndGgsIGluUGxhY2UpIHsKICBpZiAobGVuZ3RoID09PSAwICYmICFpblBsYWNlKSByZXR1cm4gW107CgogIGlmICghKHZhbHVlcyBpbnN0YW5jZW9mIEFycmF5KSkgewogICAgaWYgKGluUGxhY2UpIHsKICAgICAgdGhyb3cgbmV3IEVycm9yKCJDYW4ndCBkbyBpbi1wbGFjZSByZWN5Y2xpbmcgb2YgYSBub24tQXJyYXkgdmFsdWUiKTsKICAgIH0KICAgIHZhbHVlcyA9IFt2YWx1ZXNdOwogIH0KICBpZiAodHlwZW9mIGxlbmd0aCA9PT0gInVuZGVmaW5lZCIpIGxlbmd0aCA9IHZhbHVlcy5sZW5ndGg7CgogIHZhciBkZXN0ID0gaW5QbGFjZSA/IHZhbHVlcyA6IFtdOwogIHZhciBvcmlnTGVuZ3RoID0gdmFsdWVzLmxlbmd0aDsKICB3aGlsZSAoZGVzdC5sZW5ndGggPCBsZW5ndGgpIHsKICAgIGRlc3QucHVzaCh2YWx1ZXNbZGVzdC5sZW5ndGggJSBvcmlnTGVuZ3RoXSk7CiAgfQogIGlmIChkZXN0Lmxlbmd0aCA+IGxlbmd0aCkgewogICAgZGVzdC5zcGxpY2UobGVuZ3RoLCBkZXN0Lmxlbmd0aCAtIGxlbmd0aCk7CiAgfQogIHJldHVybiBkZXN0Owp9CgpmdW5jdGlvbiBhc0FycmF5KHZhbHVlKSB7CiAgaWYgKHZhbHVlIGluc3RhbmNlb2YgQXJyYXkpIHJldHVybiB2YWx1ZTtlbHNlIHJldHVybiBbdmFsdWVdOwp9CgoKfSx7fV19LHt9LFsxMV0pOwo="></script> | |
| <script src="data:application/x-javascript;base64,KGZ1bmN0aW9uIChyb290LCBmYWN0b3J5KSB7CglpZiAodHlwZW9mIGRlZmluZSA9PT0gJ2Z1bmN0aW9uJyAmJiBkZWZpbmUuYW1kKSB7CgkJLy8gQU1ELiBSZWdpc3RlciBhcyBhbiBhbm9ueW1vdXMgbW9kdWxlLgoJCWRlZmluZShbJ2xlYWZsZXQnXSwgZmFjdG9yeSk7Cgl9IGVsc2UgaWYgKHR5cGVvZiBtb2R1bGVzID09PSAnb2JqZWN0JyAmJiBtb2R1bGUuZXhwb3J0cykgewoJCS8vIGRlZmluZSBhIENvbW1vbiBKUyBtb2R1bGUgdGhhdCByZWxpZXMgb24gJ2xlYWZsZXQnCgkJbW9kdWxlLmV4cG9ydHMgPSBmYWN0b3J5KHJlcXVpcmUoJ2xlYWZsZXQnKSk7Cgl9IGVsc2UgewoJCS8vIEFzc3VtZSBMZWFmbGV0IGlzIGxvYWRlZCBpbnRvIGdsb2JhbCBvYmplY3QgTCBhbHJlYWR5CgkJZmFjdG9yeShMKTsKCX0KfSh0aGlzLCBmdW5jdGlvbiAoTCkgewoJJ3VzZSBzdHJpY3QnOwoKCUwuVGlsZUxheWVyLlByb3ZpZGVyID0gTC5UaWxlTGF5ZXIuZXh0ZW5kKHsKCQlpbml0aWFsaXplOiBmdW5jdGlvbiAoYXJnLCBvcHRpb25zKSB7CgkJCXZhciBwcm92aWRlcnMgPSBMLlRpbGVMYXllci5Qcm92aWRlci5wcm92aWRlcnM7CgoJCQl2YXIgcGFydHMgPSBhcmcuc3BsaXQoJy4nKTsKCgkJCXZhciBwcm92aWRlck5hbWUgPSBwYXJ0c1swXTsKCQkJdmFyIHZhcmlhbnROYW1lID0gcGFydHNbMV07CgoJCQlpZiAoIXByb3ZpZGVyc1twcm92aWRlck5hbWVdKSB7CgkJCQl0aHJvdyAnTm8gc3VjaCBwcm92aWRlciAoJyArIHByb3ZpZGVyTmFtZSArICcpJzsKCQkJfQoKCQkJdmFyIHByb3ZpZGVyID0gewoJCQkJdXJsOiBwcm92aWRlcnNbcHJvdmlkZXJOYW1lXS51cmwsCgkJCQlvcHRpb25zOiBwcm92aWRlcnNbcHJvdmlkZXJOYW1lXS5vcHRpb25zCgkJCX07CgoJCQkvLyBvdmVyd3JpdGUgdmFsdWVzIGluIHByb3ZpZGVyIGZyb20gdmFyaWFudC4KCQkJaWYgKHZhcmlhbnROYW1lICYmICd2YXJpYW50cycgaW4gcHJvdmlkZXJzW3Byb3ZpZGVyTmFtZV0pIHsKCQkJCWlmICghKHZhcmlhbnROYW1lIGluIHByb3ZpZGVyc1twcm92aWRlck5hbWVdLnZhcmlhbnRzKSkgewoJCQkJCXRocm93ICdObyBzdWNoIHZhcmlhbnQgb2YgJyArIHByb3ZpZGVyTmFtZSArICcgKCcgKyB2YXJpYW50TmFtZSArICcpJzsKCQkJCX0KCQkJCXZhciB2YXJpYW50ID0gcHJvdmlkZXJzW3Byb3ZpZGVyTmFtZV0udmFyaWFudHNbdmFyaWFudE5hbWVdOwoJCQkJdmFyIHZhcmlhbnRPcHRpb25zOwoJCQkJaWYgKHR5cGVvZiB2YXJpYW50ID09PSAnc3RyaW5nJykgewoJCQkJCXZhcmlhbnRPcHRpb25zID0gewoJCQkJCQl2YXJpYW50OiB2YXJpYW50CgkJCQkJfTsKCQkJCX0gZWxzZSB7CgkJCQkJdmFyaWFudE9wdGlvbnMgPSB2YXJpYW50Lm9wdGlvbnM7CgkJCQl9CgkJCQlwcm92aWRlciA9IHsKCQkJCQl1cmw6IHZhcmlhbnQudXJsIHx8IHByb3ZpZGVyLnVybCwKCQkJCQlvcHRpb25zOiBMLlV0aWwuZXh0ZW5kKHt9LCBwcm92aWRlci5vcHRpb25zLCB2YXJpYW50T3B0aW9ucykKCQkJCX07CgkJCX0KCgkJCXZhciBmb3JjZUhUVFAgPSB3aW5kb3cubG9jYXRpb24ucHJvdG9jb2wgPT09ICdmaWxlOicgfHwgcHJvdmlkZXIub3B0aW9ucy5mb3JjZUhUVFA7CgkJCWlmIChwcm92aWRlci51cmwuaW5kZXhPZignLy8nKSA9PT0gMCAmJiBmb3JjZUhUVFApIHsKCQkJCXByb3ZpZGVyLnVybCA9ICdodHRwOicgKyBwcm92aWRlci51cmw7CgkJCX0KCgkJCS8vIElmIHJldGluYSBvcHRpb24gaXMgc2V0CgkJCWlmIChwcm92aWRlci5vcHRpb25zLnJldGluYSkgewoJCQkJLy8gQ2hlY2sgcmV0aW5hIHNjcmVlbgoJCQkJaWYgKG9wdGlvbnMuZGV0ZWN0UmV0aW5hICYmIEwuQnJvd3Nlci5yZXRpbmEpIHsKCQkJCQkvLyBUaGUgcmV0aW5hIG9wdGlvbiB3aWxsIGJlIGFjdGl2ZSBub3cKCQkJCQkvLyBCdXQgd2UgbmVlZCB0byBwcmV2ZW50IExlYWZsZXQgcmV0aW5hIG1vZGUKCQkJCQlvcHRpb25zLmRldGVjdFJldGluYSA9IGZhbHNlOwoJCQkJfSBlbHNlIHsKCQkJCQkvLyBObyByZXRpbmEsIHJlbW92ZSBvcHRpb24KCQkJCQlwcm92aWRlci5vcHRpb25zLnJldGluYSA9ICcnOwoJCQkJfQoJCQl9CgoJCQkvLyByZXBsYWNlIGF0dHJpYnV0aW9uIHBsYWNlaG9sZGVycyB3aXRoIHRoZWlyIHZhbHVlcyBmcm9tIHRvcGxldmVsIHByb3ZpZGVyIGF0dHJpYnV0aW9uLAoJCQkvLyByZWN1cnNpdmVseQoJCQl2YXIgYXR0cmlidXRpb25SZXBsYWNlciA9IGZ1bmN0aW9uIChhdHRyKSB7CgkJCQlpZiAoYXR0ci5pbmRleE9mKCd7YXR0cmlidXRpb24uJykgPT09IC0xKSB7CgkJCQkJcmV0dXJuIGF0dHI7CgkJCQl9CgkJCQlyZXR1cm4gYXR0ci5yZXBsYWNlKC9ce2F0dHJpYnV0aW9uLihcdyopXH0vLAoJCQkJCWZ1bmN0aW9uIChtYXRjaCwgYXR0cmlidXRpb25OYW1lKSB7CgkJCQkJCXJldHVybiBhdHRyaWJ1dGlvblJlcGxhY2VyKHByb3ZpZGVyc1thdHRyaWJ1dGlvbk5hbWVdLm9wdGlvbnMuYXR0cmlidXRpb24pOwoJCQkJCX0KCQkJCSk7CgkJCX07CgkJCXByb3ZpZGVyLm9wdGlvbnMuYXR0cmlidXRpb24gPSBhdHRyaWJ1dGlvblJlcGxhY2VyKHByb3ZpZGVyLm9wdGlvbnMuYXR0cmlidXRpb24pOwoKCQkJLy8gQ29tcHV0ZSBmaW5hbCBvcHRpb25zIGNvbWJpbmluZyBwcm92aWRlciBvcHRpb25zIHdpdGggYW55IHVzZXIgb3ZlcnJpZGVzCgkJCXZhciBsYXllck9wdHMgPSBMLlV0aWwuZXh0ZW5kKHt9LCBwcm92aWRlci5vcHRpb25zLCBvcHRpb25zKTsKCQkJTC5UaWxlTGF5ZXIucHJvdG90eXBlLmluaXRpYWxpemUuY2FsbCh0aGlzLCBwcm92aWRlci51cmwsIGxheWVyT3B0cyk7CgkJfQoJfSk7CgoJLyoqCgkgKiBEZWZpbml0aW9uIG9mIHByb3ZpZGVycy4KCSAqIHNlZSBodHRwOi8vbGVhZmxldGpzLmNvbS9yZWZlcmVuY2UuaHRtbCN0aWxlbGF5ZXIgZm9yIG9wdGlvbnMgaW4gdGhlIG9wdGlvbnMgbWFwLgoJICovCgoJTC5UaWxlTGF5ZXIuUHJvdmlkZXIucHJvdmlkZXJzID0gewoJCU9wZW5TdHJlZXRNYXA6IHsKCQkJdXJsOiAnLy97c30udGlsZS5vcGVuc3RyZWV0bWFwLm9yZy97en0ve3h9L3t5fS5wbmcnLAoJCQlvcHRpb25zOiB7CgkJCQltYXhab29tOiAxOSwKCQkJCWF0dHJpYnV0aW9uOgoJCQkJCScmY29weTsgPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuc3RyZWV0bWFwLm9yZy9jb3B5cmlnaHQiPk9wZW5TdHJlZXRNYXA8L2E+JwoJCQl9LAoJCQl2YXJpYW50czogewoJCQkJTWFwbmlrOiB7fSwKCQkJCUJsYWNrQW5kV2hpdGU6IHsKCQkJCQl1cmw6ICdodHRwOi8ve3N9LnRpbGVzLndtZmxhYnMub3JnL2J3LW1hcG5pay97en0ve3h9L3t5fS5wbmcnLAoJCQkJCW9wdGlvbnM6IHsKCQkJCQkJbWF4Wm9vbTogMTgKCQkJCQl9CgkJCQl9LAoJCQkJREU6IHsKCQkJCQl1cmw6ICdodHRwOi8ve3N9LnRpbGUub3BlbnN0cmVldG1hcC5kZS90aWxlcy9vc21kZS97en0ve3h9L3t5fS5wbmcnLAoJCQkJCW9wdGlvbnM6IHsKCQkJCQkJbWF4Wm9vbTogMTgKCQkJCQl9CgkJCQl9LAoJCQkJRnJhbmNlOiB7CgkJCQkJdXJsOiAnLy97c30udGlsZS5vcGVuc3RyZWV0bWFwLmZyL29zbWZyL3t6fS97eH0ve3l9LnBuZycsCgkJCQkJb3B0aW9uczogewoJCQkJCQltYXhab29tOiAyMCwKCQkJCQkJYXR0cmlidXRpb246ICcmY29weTsgT3BlbnN0cmVldG1hcCBGcmFuY2UgfCB7YXR0cmlidXRpb24uT3BlblN0cmVldE1hcH0nCgkJCQkJfQoJCQkJfSwKCQkJCUhPVDogewoJCQkJCXVybDogJy8ve3N9LnRpbGUub3BlbnN0cmVldG1hcC5mci9ob3Qve3p9L3t4fS97eX0ucG5nJywKCQkJCQlvcHRpb25zOiB7CgkJCQkJCWF0dHJpYnV0aW9uOiAne2F0dHJpYnV0aW9uLk9wZW5TdHJlZXRNYXB9LCBUaWxlcyBjb3VydGVzeSBvZiA8YSBocmVmPSJodHRwOi8vaG90Lm9wZW5zdHJlZXRtYXAub3JnLyIgdGFyZ2V0PSJfYmxhbmsiPkh1bWFuaXRhcmlhbiBPcGVuU3RyZWV0TWFwIFRlYW08L2E+JwoJCQkJCX0KCQkJCX0KCQkJfQoJCX0sCgkJT3BlblNlYU1hcDogewoJCQl1cmw6ICdodHRwOi8vdGlsZXMub3BlbnNlYW1hcC5vcmcvc2VhbWFyay97en0ve3h9L3t5fS5wbmcnLAoJCQlvcHRpb25zOiB7CgkJCQlhdHRyaWJ1dGlvbjogJ01hcCBkYXRhOiAmY29weTsgPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuc2VhbWFwLm9yZyI+T3BlblNlYU1hcDwvYT4gY29udHJpYnV0b3JzJwoJCQl9CgkJfSwKCQlPcGVuVG9wb01hcDogewoJCQl1cmw6ICcvL3tzfS50aWxlLm9wZW50b3BvbWFwLm9yZy97en0ve3h9L3t5fS5wbmcnLAoJCQlvcHRpb25zOiB7CgkJCQltYXhab29tOiAxNywKCQkJCWF0dHJpYnV0aW9uOiAnTWFwIGRhdGE6IHthdHRyaWJ1dGlvbi5PcGVuU3RyZWV0TWFwfSwgPGEgaHJlZj0iaHR0cDovL3ZpZXdmaW5kZXJwYW5vcmFtYXMub3JnIj5TUlRNPC9hPiB8IE1hcCBzdHlsZTogJmNvcHk7IDxhIGhyZWY9Imh0dHBzOi8vb3BlbnRvcG9tYXAub3JnIj5PcGVuVG9wb01hcDwvYT4gKDxhIGhyZWY9Imh0dHBzOi8vY3JlYXRpdmVjb21tb25zLm9yZy9saWNlbnNlcy9ieS1zYS8zLjAvIj5DQy1CWS1TQTwvYT4pJwoJCQl9CgkJfSwKCQlUaHVuZGVyZm9yZXN0OiB7CgkJCXVybDogJy8ve3N9LnRpbGUudGh1bmRlcmZvcmVzdC5jb20ve3ZhcmlhbnR9L3t6fS97eH0ve3l9LnBuZycsCgkJCW9wdGlvbnM6IHsKCQkJCWF0dHJpYnV0aW9uOgoJCQkJCScmY29weTsgPGEgaHJlZj0iaHR0cDovL3d3dy50aHVuZGVyZm9yZXN0LmNvbS8iPlRodW5kZXJmb3Jlc3Q8L2E+LCB7YXR0cmlidXRpb24uT3BlblN0cmVldE1hcH0nLAoJCQkJdmFyaWFudDogJ2N5Y2xlJwoJCQl9LAoJCQl2YXJpYW50czogewoJCQkJT3BlbkN5Y2xlTWFwOiAnY3ljbGUnLAoJCQkJVHJhbnNwb3J0OiB7CgkJCQkJb3B0aW9uczogewoJCQkJCQl2YXJpYW50OiAndHJhbnNwb3J0JywKCQkJCQkJbWF4Wm9vbTogMTkKCQkJCQl9CgkJCQl9LAoJCQkJVHJhbnNwb3J0RGFyazogewoJCQkJCW9wdGlvbnM6IHsKCQkJCQkJdmFyaWFudDogJ3RyYW5zcG9ydC1kYXJrJywKCQkJCQkJbWF4Wm9vbTogMTkKCQkJCQl9CgkJCQl9LAoJCQkJU3BpbmFsTWFwOiB7CgkJCQkJb3B0aW9uczogewoJCQkJCQl2YXJpYW50OiAnc3BpbmFsLW1hcCcsCgkJCQkJCW1heFpvb206IDExCgkJCQkJfQoJCQkJfSwKCQkJCUxhbmRzY2FwZTogJ2xhbmRzY2FwZScsCgkJCQlPdXRkb29yczogJ291dGRvb3JzJywKCQkJCVBpb25lZXI6ICdwaW9uZWVyJwoJCQl9CgkJfSwKCQlPcGVuTWFwU3VyZmVyOiB7CgkJCXVybDogJ2h0dHA6Ly9rb3JvbmEuZ2VvZy51bmktaGVpZGVsYmVyZy5kZS90aWxlcy97dmFyaWFudH0veD17eH0meT17eX0mej17en0nLAoJCQlvcHRpb25zOiB7CgkJCQltYXhab29tOiAyMCwKCQkJCXZhcmlhbnQ6ICdyb2FkcycsCgkJCQlhdHRyaWJ1dGlvbjogJ0ltYWdlcnkgZnJvbSA8YSBocmVmPSJodHRwOi8vZ2lzY2llbmNlLnVuaS1oZC5kZS8iPkdJU2NpZW5jZSBSZXNlYXJjaCBHcm91cCBAIFVuaXZlcnNpdHkgb2YgSGVpZGVsYmVyZzwvYT4gJm1kYXNoOyBNYXAgZGF0YSB7YXR0cmlidXRpb24uT3BlblN0cmVldE1hcH0nCgkJCX0sCgkJCXZhcmlhbnRzOiB7CgkJCQlSb2FkczogJ3JvYWRzJywKCQkJCUFkbWluQm91bmRzOiB7CgkJCQkJb3B0aW9uczogewoJCQkJCQl2YXJpYW50OiAnYWRtaW5iJywKCQkJCQkJbWF4Wm9vbTogMTkKCQkJCQl9CgkJCQl9LAoJCQkJR3JheXNjYWxlOiB7CgkJCQkJb3B0aW9uczogewoJCQkJCQl2YXJpYW50OiAncm9hZHNnJywKCQkJCQkJbWF4Wm9vbTogMTkKCQkJCQl9CgkJCQl9CgkJCX0KCQl9LAoJCUh5ZGRhOiB7CgkJCXVybDogJy8ve3N9LnRpbGUub3BlbnN0cmVldG1hcC5zZS9oeWRkYS97dmFyaWFudH0ve3p9L3t4fS97eX0ucG5nJywKCQkJb3B0aW9uczogewoJCQkJdmFyaWFudDogJ2Z1bGwnLAoJCQkJYXR0cmlidXRpb246ICdUaWxlcyBjb3VydGVzeSBvZiA8YSBocmVmPSJodHRwOi8vb3BlbnN0cmVldG1hcC5zZS8iIHRhcmdldD0iX2JsYW5rIj5PcGVuU3RyZWV0TWFwIFN3ZWRlbjwvYT4gJm1kYXNoOyBNYXAgZGF0YSB7YXR0cmlidXRpb24uT3BlblN0cmVldE1hcH0nCgkJCX0sCgkJCXZhcmlhbnRzOiB7CgkJCQlGdWxsOiAnZnVsbCcsCgkJCQlCYXNlOiAnYmFzZScsCgkJCQlSb2Fkc0FuZExhYmVsczogJ3JvYWRzX2FuZF9sYWJlbHMnCgkJCX0KCQl9LAoJCU1hcEJveDogewoJCQl1cmw6ICcvL2FwaS50aWxlcy5tYXBib3guY29tL3Y0L3tpZH0ve3p9L3t4fS97eX0ucG5nP2FjY2Vzc190b2tlbj17YWNjZXNzVG9rZW59JywKCQkJb3B0aW9uczogewoJCQkJYXR0cmlidXRpb246CgkJCQkJJ0ltYWdlcnkgZnJvbSA8YSBocmVmPSJodHRwOi8vbWFwYm94LmNvbS9hYm91dC9tYXBzLyI+TWFwQm94PC9hPiAmbWRhc2g7ICcgKwoJCQkJCSdNYXAgZGF0YSB7YXR0cmlidXRpb24uT3BlblN0cmVldE1hcH0nLAoJCQkJc3ViZG9tYWluczogJ2FiY2QnCgkJCX0KCQl9LAoJCVN0YW1lbjogewoJCQl1cmw6ICcvL3N0YW1lbi10aWxlcy17c30uYS5zc2wuZmFzdGx5Lm5ldC97dmFyaWFudH0ve3p9L3t4fS97eX0ue2V4dH0nLAoJCQlvcHRpb25zOiB7CgkJCQlhdHRyaWJ1dGlvbjoKCQkJCQknTWFwIHRpbGVzIGJ5IDxhIGhyZWY9Imh0dHA6Ly9zdGFtZW4uY29tIj5TdGFtZW4gRGVzaWduPC9hPiwgJyArCgkJCQkJJzxhIGhyZWY9Imh0dHA6Ly9jcmVhdGl2ZWNvbW1vbnMub3JnL2xpY2Vuc2VzL2J5LzMuMCI+Q0MgQlkgMy4wPC9hPiAmbWRhc2g7ICcgKwoJCQkJCSdNYXAgZGF0YSB7YXR0cmlidXRpb24uT3BlblN0cmVldE1hcH0nLAoJCQkJc3ViZG9tYWluczogJ2FiY2QnLAoJCQkJbWluWm9vbTogMCwKCQkJCW1heFpvb206IDIwLAoJCQkJdmFyaWFudDogJ3RvbmVyJywKCQkJCWV4dDogJ3BuZycKCQkJfSwKCQkJdmFyaWFudHM6IHsKCQkJCVRvbmVyOiAndG9uZXInLAoJCQkJVG9uZXJCYWNrZ3JvdW5kOiAndG9uZXItYmFja2dyb3VuZCcsCgkJCQlUb25lckh5YnJpZDogJ3RvbmVyLWh5YnJpZCcsCgkJCQlUb25lckxpbmVzOiAndG9uZXItbGluZXMnLAoJCQkJVG9uZXJMYWJlbHM6ICd0b25lci1sYWJlbHMnLAoJCQkJVG9uZXJMaXRlOiAndG9uZXItbGl0ZScsCgkJCQlXYXRlcmNvbG9yOiB7CgkJCQkJb3B0aW9uczogewoJCQkJCQl2YXJpYW50OiAnd2F0ZXJjb2xvcicsCgkJCQkJCW1pblpvb206IDEsCgkJCQkJCW1heFpvb206IDE2CgkJCQkJfQoJCQkJfSwKCQkJCVRlcnJhaW46IHsKCQkJCQlvcHRpb25zOiB7CgkJCQkJCXZhcmlhbnQ6ICd0ZXJyYWluJywKCQkJCQkJbWluWm9vbTogMCwKCQkJCQkJbWF4Wm9vbTogMTgKCQkJCQl9CgkJCQl9LAoJCQkJVGVycmFpbkJhY2tncm91bmQ6IHsKCQkJCQlvcHRpb25zOiB7CgkJCQkJCXZhcmlhbnQ6ICd0ZXJyYWluLWJhY2tncm91bmQnLAoJCQkJCQltaW5ab29tOiAwLAoJCQkJCQltYXhab29tOiAxOAoJCQkJCX0KCQkJCX0sCgkJCQlUb3BPU01SZWxpZWY6IHsKCQkJCQlvcHRpb25zOiB7CgkJCQkJCXZhcmlhbnQ6ICd0b3Bvc20tY29sb3ItcmVsaWVmJywKCQkJCQkJZXh0OiAnanBnJywKCQkJCQkJYm91bmRzOiBbWzIyLCAtMTMyXSwgWzUxLCAtNTZdXQoJCQkJCX0KCQkJCX0sCgkJCQlUb3BPU01GZWF0dXJlczogewoJCQkJCW9wdGlvbnM6IHsKCQkJCQkJdmFyaWFudDogJ3RvcG9zbS1mZWF0dXJlcycsCgkJCQkJCWJvdW5kczogW1syMiwgLTEzMl0sIFs1MSwgLTU2XV0sCgkJCQkJCW9wYWNpdHk6IDAuOQoJCQkJCX0KCQkJCX0KCQkJfQoJCX0sCgkJRXNyaTogewoJCQl1cmw6ICcvL3NlcnZlci5hcmNnaXNvbmxpbmUuY29tL0FyY0dJUy9yZXN0L3NlcnZpY2VzL3t2YXJpYW50fS9NYXBTZXJ2ZXIvdGlsZS97en0ve3l9L3t4fScsCgkJCW9wdGlvbnM6IHsKCQkJCXZhcmlhbnQ6ICdXb3JsZF9TdHJlZXRfTWFwJywKCQkJCWF0dHJpYnV0aW9uOiAnVGlsZXMgJmNvcHk7IEVzcmknCgkJCX0sCgkJCXZhcmlhbnRzOiB7CgkJCQlXb3JsZFN0cmVldE1hcDogewoJCQkJCW9wdGlvbnM6IHsKCQkJCQkJYXR0cmlidXRpb246CgkJCQkJCQkne2F0dHJpYnV0aW9uLkVzcml9ICZtZGFzaDsgJyArCgkJCQkJCQknU291cmNlOiBFc3JpLCBEZUxvcm1lLCBOQVZURVEsIFVTR1MsIEludGVybWFwLCBpUEMsIE5SQ0FOLCBFc3JpIEphcGFuLCBNRVRJLCBFc3JpIENoaW5hIChIb25nIEtvbmcpLCBFc3JpIChUaGFpbGFuZCksIFRvbVRvbSwgMjAxMicKCQkJCQl9CgkJCQl9LAoJCQkJRGVMb3JtZTogewoJCQkJCW9wdGlvbnM6IHsKCQkJCQkJdmFyaWFudDogJ1NwZWNpYWx0eS9EZUxvcm1lX1dvcmxkX0Jhc2VfTWFwJywKCQkJCQkJbWluWm9vbTogMSwKCQkJCQkJbWF4Wm9vbTogMTEsCgkJCQkJCWF0dHJpYnV0aW9uOiAne2F0dHJpYnV0aW9uLkVzcml9ICZtZGFzaDsgQ29weXJpZ2h0OiAmY29weTsyMDEyIERlTG9ybWUnCgkJCQkJfQoJCQkJfSwKCQkJCVdvcmxkVG9wb01hcDogewoJCQkJCW9wdGlvbnM6IHsKCQkJCQkJdmFyaWFudDogJ1dvcmxkX1RvcG9fTWFwJywKCQkJCQkJYXR0cmlidXRpb246CgkJCQkJCQkne2F0dHJpYnV0aW9uLkVzcml9ICZtZGFzaDsgJyArCgkJCQkJCQknRXNyaSwgRGVMb3JtZSwgTkFWVEVRLCBUb21Ub20sIEludGVybWFwLCBpUEMsIFVTR1MsIEZBTywgTlBTLCBOUkNBTiwgR2VvQmFzZSwgS2FkYXN0ZXIgTkwsIE9yZG5hbmNlIFN1cnZleSwgRXNyaSBKYXBhbiwgTUVUSSwgRXNyaSBDaGluYSAoSG9uZyBLb25nKSwgYW5kIHRoZSBHSVMgVXNlciBDb21tdW5pdHknCgkJCQkJfQoJCQkJfSwKCQkJCVdvcmxkSW1hZ2VyeTogewoJCQkJCW9wdGlvbnM6IHsKCQkJCQkJdmFyaWFudDogJ1dvcmxkX0ltYWdlcnknLAoJCQkJCQlhdHRyaWJ1dGlvbjoKCQkJCQkJCSd7YXR0cmlidXRpb24uRXNyaX0gJm1kYXNoOyAnICsKCQkJCQkJCSdTb3VyY2U6IEVzcmksIGktY3ViZWQsIFVTREEsIFVTR1MsIEFFWCwgR2VvRXllLCBHZXRtYXBwaW5nLCBBZXJvZ3JpZCwgSUdOLCBJR1AsIFVQUi1FR1AsIGFuZCB0aGUgR0lTIFVzZXIgQ29tbXVuaXR5JwoJCQkJCX0KCQkJCX0sCgkJCQlXb3JsZFRlcnJhaW46IHsKCQkJCQlvcHRpb25zOiB7CgkJCQkJCXZhcmlhbnQ6ICdXb3JsZF9UZXJyYWluX0Jhc2UnLAoJCQkJCQltYXhab29tOiAxMywKCQkJCQkJYXR0cmlidXRpb246CgkJCQkJCQkne2F0dHJpYnV0aW9uLkVzcml9ICZtZGFzaDsgJyArCgkJCQkJCQknU291cmNlOiBVU0dTLCBFc3JpLCBUQU5BLCBEZUxvcm1lLCBhbmQgTlBTJwoJCQkJCX0KCQkJCX0sCgkJCQlXb3JsZFNoYWRlZFJlbGllZjogewoJCQkJCW9wdGlvbnM6IHsKCQkJCQkJdmFyaWFudDogJ1dvcmxkX1NoYWRlZF9SZWxpZWYnLAoJCQkJCQltYXhab29tOiAxMywKCQkJCQkJYXR0cmlidXRpb246ICd7YXR0cmlidXRpb24uRXNyaX0gJm1kYXNoOyBTb3VyY2U6IEVzcmknCgkJCQkJfQoJCQkJfSwKCQkJCVdvcmxkUGh5c2ljYWw6IHsKCQkJCQlvcHRpb25zOiB7CgkJCQkJCXZhcmlhbnQ6ICdXb3JsZF9QaHlzaWNhbF9NYXAnLAoJCQkJCQltYXhab29tOiA4LAoJCQkJCQlhdHRyaWJ1dGlvbjogJ3thdHRyaWJ1dGlvbi5Fc3JpfSAmbWRhc2g7IFNvdXJjZTogVVMgTmF0aW9uYWwgUGFyayBTZXJ2aWNlJwoJCQkJCX0KCQkJCX0sCgkJCQlPY2VhbkJhc2VtYXA6IHsKCQkJCQlvcHRpb25zOiB7CgkJCQkJCXZhcmlhbnQ6ICdPY2Vhbl9CYXNlbWFwJywKCQkJCQkJbWF4Wm9vbTogMTMsCgkJCQkJCWF0dHJpYnV0aW9uOiAne2F0dHJpYnV0aW9uLkVzcml9ICZtZGFzaDsgU291cmNlczogR0VCQ08sIE5PQUEsIENIUywgT1NVLCBVTkgsIENTVU1CLCBOYXRpb25hbCBHZW9ncmFwaGljLCBEZUxvcm1lLCBOQVZURVEsIGFuZCBFc3JpJwoJCQkJCX0KCQkJCX0sCgkJCQlOYXRHZW9Xb3JsZE1hcDogewoJCQkJCW9wdGlvbnM6IHsKCQkJCQkJdmFyaWFudDogJ05hdEdlb19Xb3JsZF9NYXAnLAoJCQkJCQltYXhab29tOiAxNiwKCQkJCQkJYXR0cmlidXRpb246ICd7YXR0cmlidXRpb24uRXNyaX0gJm1kYXNoOyBOYXRpb25hbCBHZW9ncmFwaGljLCBFc3JpLCBEZUxvcm1lLCBOQVZURVEsIFVORVAtV0NNQywgVVNHUywgTkFTQSwgRVNBLCBNRVRJLCBOUkNBTiwgR0VCQ08sIE5PQUEsIGlQQycKCQkJCQl9CgkJCQl9LAoJCQkJV29ybGRHcmF5Q2FudmFzOiB7CgkJCQkJb3B0aW9uczogewoJCQkJCQl2YXJpYW50OiAnQ2FudmFzL1dvcmxkX0xpZ2h0X0dyYXlfQmFzZScsCgkJCQkJCW1heFpvb206IDE2LAoJCQkJCQlhdHRyaWJ1dGlvbjogJ3thdHRyaWJ1dGlvbi5Fc3JpfSAmbWRhc2g7IEVzcmksIERlTG9ybWUsIE5BVlRFUScKCQkJCQl9CgkJCQl9CgkJCX0KCQl9LAoJCU9wZW5XZWF0aGVyTWFwOiB7CgkJCXVybDogJ2h0dHA6Ly97c30udGlsZS5vcGVud2VhdGhlcm1hcC5vcmcvbWFwL3t2YXJpYW50fS97en0ve3h9L3t5fS5wbmcnLAoJCQlvcHRpb25zOiB7CgkJCQltYXhab29tOiAxOSwKCQkJCWF0dHJpYnV0aW9uOiAnTWFwIGRhdGEgJmNvcHk7IDxhIGhyZWY9Imh0dHA6Ly9vcGVud2VhdGhlcm1hcC5vcmciPk9wZW5XZWF0aGVyTWFwPC9hPicsCgkJCQlvcGFjaXR5OiAwLjUKCQkJfSwKCQkJdmFyaWFudHM6IHsKCQkJCUNsb3VkczogJ2Nsb3VkcycsCgkJCQlDbG91ZHNDbGFzc2ljOiAnY2xvdWRzX2NscycsCgkJCQlQcmVjaXBpdGF0aW9uOiAncHJlY2lwaXRhdGlvbicsCgkJCQlQcmVjaXBpdGF0aW9uQ2xhc3NpYzogJ3ByZWNpcGl0YXRpb25fY2xzJywKCQkJCVJhaW46ICdyYWluJywKCQkJCVJhaW5DbGFzc2ljOiAncmFpbl9jbHMnLAoJCQkJUHJlc3N1cmU6ICdwcmVzc3VyZScsCgkJCQlQcmVzc3VyZUNvbnRvdXI6ICdwcmVzc3VyZV9jbnRyJywKCQkJCVdpbmQ6ICd3aW5kJywKCQkJCVRlbXBlcmF0dXJlOiAndGVtcCcsCgkJCQlTbm93OiAnc25vdycKCQkJfQoJCX0sCgkJSEVSRTogewoJCQkvKgoJCQkgKiBIRVJFIG1hcHMsIGZvcm1lcmx5IE5va2lhIG1hcHMuCgkJCSAqIFRoZXNlIGJhc2VtYXBzIGFyZSBmcmVlLCBidXQgeW91IG5lZWQgYW4gQVBJIGtleS4gUGxlYXNlIHNpZ24gdXAgYXQKCQkJICogaHR0cDovL2RldmVsb3Blci5oZXJlLmNvbS9nZXR0aW5nLXN0YXJ0ZWQKCQkJICoKCQkJICogTm90ZSB0aGF0IHRoZSBiYXNlIHVybHMgY29udGFpbiAnLmNpdCcgd2hpY2hzIGlzIEhFUkUncwoJCQkgKiAnQ3VzdG9tZXIgSW50ZWdyYXRpb24gVGVzdGluZycgZW52aXJvbm1lbnQuIFBsZWFzZSByZW1vdmUgZm9yIHByb2R1Y3Rpb24KCQkJICogZW52aXJpb25tZW50cy4KCQkJICovCgkJCXVybDoKCQkJCScvL3tzfS57YmFzZX0ubWFwcy5jaXQuYXBpLmhlcmUuY29tL21hcHRpbGUvMi4xLycgKwoJCQkJJ3t0eXBlfS97bWFwSUR9L3t2YXJpYW50fS97en0ve3h9L3t5fS97c2l6ZX0ve2Zvcm1hdH0/JyArCgkJCQknYXBwX2lkPXthcHBfaWR9JmFwcF9jb2RlPXthcHBfY29kZX0mbGc9e2xhbmd1YWdlfScsCgkJCW9wdGlvbnM6IHsKCQkJCWF0dHJpYnV0aW9uOgoJCQkJCSdNYXAgJmNvcHk7IDE5ODctMjAxNCA8YSBocmVmPSJodHRwOi8vZGV2ZWxvcGVyLmhlcmUuY29tIj5IRVJFPC9hPicsCgkJCQlzdWJkb21haW5zOiAnMTIzNCcsCgkJCQltYXBJRDogJ25ld2VzdCcsCgkJCQknYXBwX2lkJzogJzxpbnNlcnQgeW91ciBhcHBfaWQgaGVyZT4nLAoJCQkJJ2FwcF9jb2RlJzogJzxpbnNlcnQgeW91ciBhcHBfY29kZSBoZXJlPicsCgkJCQliYXNlOiAnYmFzZScsCgkJCQl2YXJpYW50OiAnbm9ybWFsLmRheScsCgkJCQltYXhab29tOiAyMCwKCQkJCXR5cGU6ICdtYXB0aWxlJywKCQkJCWxhbmd1YWdlOiAnZW5nJywKCQkJCWZvcm1hdDogJ3BuZzgnLAoJCQkJc2l6ZTogJzI1NicKCQkJfSwKCQkJdmFyaWFudHM6IHsKCQkJCW5vcm1hbERheTogJ25vcm1hbC5kYXknLAoJCQkJbm9ybWFsRGF5Q3VzdG9tOiAnbm9ybWFsLmRheS5jdXN0b20nLAoJCQkJbm9ybWFsRGF5R3JleTogJ25vcm1hbC5kYXkuZ3JleScsCgkJCQlub3JtYWxEYXlNb2JpbGU6ICdub3JtYWwuZGF5Lm1vYmlsZScsCgkJCQlub3JtYWxEYXlHcmV5TW9iaWxlOiAnbm9ybWFsLmRheS5ncmV5Lm1vYmlsZScsCgkJCQlub3JtYWxEYXlUcmFuc2l0OiAnbm9ybWFsLmRheS50cmFuc2l0JywKCQkJCW5vcm1hbERheVRyYW5zaXRNb2JpbGU6ICdub3JtYWwuZGF5LnRyYW5zaXQubW9iaWxlJywKCQkJCW5vcm1hbE5pZ2h0OiAnbm9ybWFsLm5pZ2h0JywKCQkJCW5vcm1hbE5pZ2h0TW9iaWxlOiAnbm9ybWFsLm5pZ2h0Lm1vYmlsZScsCgkJCQlub3JtYWxOaWdodEdyZXk6ICdub3JtYWwubmlnaHQuZ3JleScsCgkJCQlub3JtYWxOaWdodEdyZXlNb2JpbGU6ICdub3JtYWwubmlnaHQuZ3JleS5tb2JpbGUnLAoKCQkJCWJhc2ljTWFwOiB7CgkJCQkJb3B0aW9uczogewoJCQkJCQl0eXBlOiAnYmFzZXRpbGUnCgkJCQkJfQoJCQkJfSwKCQkJCW1hcExhYmVsczogewoJCQkJCW9wdGlvbnM6IHsKCQkJCQkJdHlwZTogJ2xhYmVsdGlsZScsCgkJCQkJCWZvcm1hdDogJ3BuZycKCQkJCQl9CgkJCQl9LAoJCQkJdHJhZmZpY0Zsb3c6IHsKCQkJCQlvcHRpb25zOiB7CgkJCQkJCWJhc2U6ICd0cmFmZmljJywKCQkJCQkJdHlwZTogJ2Zsb3d0aWxlJwoJCQkJCX0KCQkJCX0sCgkJCQljYXJuYXZEYXlHcmV5OiAnY2FybmF2LmRheS5ncmV5JywKCQkJCWh5YnJpZERheTogewoJCQkJCW9wdGlvbnM6IHsKCQkJCQkJYmFzZTogJ2FlcmlhbCcsCgkJCQkJCXZhcmlhbnQ6ICdoeWJyaWQuZGF5JwoJCQkJCX0KCQkJCX0sCgkJCQloeWJyaWREYXlNb2JpbGU6IHsKCQkJCQlvcHRpb25zOiB7CgkJCQkJCWJhc2U6ICdhZXJpYWwnLAoJCQkJCQl2YXJpYW50OiAnaHlicmlkLmRheS5tb2JpbGUnCgkJCQkJfQoJCQkJfSwKCQkJCXBlZGVzdHJpYW5EYXk6ICdwZWRlc3RyaWFuLmRheScsCgkJCQlwZWRlc3RyaWFuTmlnaHQ6ICdwZWRlc3RyaWFuLm5pZ2h0JywKCQkJCXNhdGVsbGl0ZURheTogewoJCQkJCW9wdGlvbnM6IHsKCQkJCQkJYmFzZTogJ2FlcmlhbCcsCgkJCQkJCXZhcmlhbnQ6ICdzYXRlbGxpdGUuZGF5JwoJCQkJCX0KCQkJCX0sCgkJCQl0ZXJyYWluRGF5OiB7CgkJCQkJb3B0aW9uczogewoJCQkJCQliYXNlOiAnYWVyaWFsJywKCQkJCQkJdmFyaWFudDogJ3RlcnJhaW4uZGF5JwoJCQkJCX0KCQkJCX0sCgkJCQl0ZXJyYWluRGF5TW9iaWxlOiB7CgkJCQkJb3B0aW9uczogewoJCQkJCQliYXNlOiAnYWVyaWFsJywKCQkJCQkJdmFyaWFudDogJ3RlcnJhaW4uZGF5Lm1vYmlsZScKCQkJCQl9CgkJCQl9CgkJCX0KCQl9LAoJCUZyZWVNYXBTSzogewoJCQl1cmw6ICdodHRwOi8vdHtzfS5mcmVlbWFwLnNrL1Qve3p9L3t4fS97eX0uanBlZycsCgkJCW9wdGlvbnM6IHsKCQkJCW1pblpvb206IDgsCgkJCQltYXhab29tOiAxNiwKCQkJCXN1YmRvbWFpbnM6ICcxMjM0JywKCQkJCWJvdW5kczogW1s0Ny4yMDQ2NDIsIDE1Ljk5NjA5M10sIFs0OS44MzA4OTYsIDIyLjU3NjkwNF1dLAoJCQkJYXR0cmlidXRpb246CgkJCQkJJ3thdHRyaWJ1dGlvbi5PcGVuU3RyZWV0TWFwfSwgdml6dWFsaXphdGlvbiBDQy1CeS1TQSAyLjAgPGEgaHJlZj0iaHR0cDovL2ZyZWVtYXAuc2siPkZyZWVtYXAuc2s8L2E+JwoJCQl9CgkJfSwKCQlNdGJNYXA6IHsKCQkJdXJsOiAnaHR0cDovL3RpbGUubXRibWFwLmN6L210Ym1hcF90aWxlcy97en0ve3h9L3t5fS5wbmcnLAoJCQlvcHRpb25zOiB7CgkJCQlhdHRyaWJ1dGlvbjoKCQkJCQkne2F0dHJpYnV0aW9uLk9wZW5TdHJlZXRNYXB9ICZhbXA7IFVTR1MnCgkJCX0KCQl9LAoJCUNhcnRvREI6IHsKCQkJdXJsOiAnaHR0cDovL3tzfS5iYXNlbWFwcy5jYXJ0b2Nkbi5jb20ve3ZhcmlhbnR9L3t6fS97eH0ve3l9LnBuZycsCgkJCW9wdGlvbnM6IHsKCQkJCWF0dHJpYnV0aW9uOiAne2F0dHJpYnV0aW9uLk9wZW5TdHJlZXRNYXB9ICZjb3B5OyA8YSBocmVmPSJodHRwOi8vY2FydG9kYi5jb20vYXR0cmlidXRpb25zIj5DYXJ0b0RCPC9hPicsCgkJCQlzdWJkb21haW5zOiAnYWJjZCcsCgkJCQltYXhab29tOiAxOSwKCQkJCXZhcmlhbnQ6ICdsaWdodF9hbGwnCgkJCX0sCgkJCXZhcmlhbnRzOiB7CgkJCQlQb3NpdHJvbjogJ2xpZ2h0X2FsbCcsCgkJCQlQb3NpdHJvbk5vTGFiZWxzOiAnbGlnaHRfbm9sYWJlbHMnLAoJCQkJUG9zaXRyb25Pbmx5TGFiZWxzOiAnbGlnaHRfb25seV9sYWJlbHMnLAoJCQkJRGFya01hdHRlcjogJ2RhcmtfYWxsJywKCQkJCURhcmtNYXR0ZXJOb0xhYmVsczogJ2Rhcmtfbm9sYWJlbHMnLAoJCQkJRGFya01hdHRlck9ubHlMYWJlbHM6ICdkYXJrX29ubHlfbGFiZWxzJwoJCQl9CgkJfSwKCQlIaWtlQmlrZTogewoJCQl1cmw6ICdodHRwOi8ve3N9LnRpbGVzLndtZmxhYnMub3JnL3t2YXJpYW50fS97en0ve3h9L3t5fS5wbmcnLAoJCQlvcHRpb25zOiB7CgkJCQltYXhab29tOiAxOSwKCQkJCWF0dHJpYnV0aW9uOiAne2F0dHJpYnV0aW9uLk9wZW5TdHJlZXRNYXB9JywKCQkJCXZhcmlhbnQ6ICdoaWtlYmlrZScKCQkJfSwKCQkJdmFyaWFudHM6IHsKCQkJCUhpa2VCaWtlOiB7fSwKCQkJCUhpbGxTaGFkaW5nOiB7CgkJCQkJb3B0aW9uczogewoJCQkJCQltYXhab29tOiAxNSwKCQkJCQkJdmFyaWFudDogJ2hpbGxzaGFkaW5nJwoJCQkJCX0KCQkJCX0KCQkJfQoJCX0sCgkJQmFzZW1hcEFUOiB7CgkJCXVybDogJy8vbWFwc3tzfS53aWVuLmd2LmF0L2Jhc2VtYXAve3ZhcmlhbnR9L25vcm1hbC9nb29nbGUzODU3L3t6fS97eX0ve3h9Lntmb3JtYXR9JywKCQkJb3B0aW9uczogewoJCQkJbWF4Wm9vbTogMTksCgkJCQlhdHRyaWJ1dGlvbjogJ0RhdGVucXVlbGxlOiA8YSBocmVmPSJ3d3cuYmFzZW1hcC5hdCI+YmFzZW1hcC5hdDwvYT4nLAoJCQkJc3ViZG9tYWluczogWycnLCAnMScsICcyJywgJzMnLCAnNCddLAoJCQkJZm9ybWF0OiAncG5nJywKCQkJCWJvdW5kczogW1s0Ni4zNTg3NzAsIDguNzgyMzc5XSwgWzQ5LjAzNzg3MiwgMTcuMTg5NTMyXV0sCgkJCQl2YXJpYW50OiAnZ2VvbGFuZGJhc2VtYXAnCgkJCX0sCgkJCXZhcmlhbnRzOiB7CgkJCQliYXNlbWFwOiAnZ2VvbGFuZGJhc2VtYXAnLAoJCQkJZ3JhdTogJ2JtYXBncmF1JywKCQkJCW92ZXJsYXk6ICdibWFwb3ZlcmxheScsCgkJCQloaWdoZHBpOiB7CgkJCQkJb3B0aW9uczogewoJCQkJCQl2YXJpYW50OiAnYm1hcGhpZHBpJywKCQkJCQkJZm9ybWF0OiAnanBlZycKCQkJCQl9CgkJCQl9LAoJCQkJb3J0aG9mb3RvOiB7CgkJCQkJb3B0aW9uczogewoJCQkJCQl2YXJpYW50OiAnYm1hcG9ydGhvZm90bzMwY20nLAoJCQkJCQlmb3JtYXQ6ICdqcGVnJwoJCQkJCX0KCQkJCX0KCQkJfQoJCX0sCgkJTkFTQUdJQlM6IHsKCQkJdXJsOiAnLy9tYXAxLnZpcy5lYXJ0aGRhdGEubmFzYS5nb3Yvd210cy13ZWJtZXJjL3t2YXJpYW50fS9kZWZhdWx0L3t0aW1lfS97dGlsZW1hdHJpeHNldH17bWF4Wm9vbX0ve3p9L3t5fS97eH0ue2Zvcm1hdH0nLAoJCQlvcHRpb25zOiB7CgkJCQlhdHRyaWJ1dGlvbjoKCQkJCQknSW1hZ2VyeSBwcm92aWRlZCBieSBzZXJ2aWNlcyBmcm9tIHRoZSBHbG9iYWwgSW1hZ2VyeSBCcm93c2UgU2VydmljZXMgKEdJQlMpLCBvcGVyYXRlZCBieSB0aGUgTkFTQS9HU0ZDL0VhcnRoIFNjaWVuY2UgRGF0YSBhbmQgSW5mb3JtYXRpb24gU3lzdGVtICcgKwoJCQkJCScoPGEgaHJlZj0iaHR0cHM6Ly9lYXJ0aGRhdGEubmFzYS5nb3YiPkVTRElTPC9hPikgd2l0aCBmdW5kaW5nIHByb3ZpZGVkIGJ5IE5BU0EvSFEuJywKCQkJCWJvdW5kczogW1stODUuMDUxMTI4Nzc3NiwgLTE3OS45OTk5OTk5NzVdLCBbODUuMDUxMTI4Nzc3NiwgMTc5Ljk5OTk5OTk3NV1dLAoJCQkJbWluWm9vbTogMSwKCQkJCW1heFpvb206IDksCgkJCQlmb3JtYXQ6ICdqcGcnLAoJCQkJdGltZTogJycsCgkJCQl0aWxlbWF0cml4c2V0OiAnR29vZ2xlTWFwc0NvbXBhdGlibGVfTGV2ZWwnCgkJCX0sCgkJCXZhcmlhbnRzOiB7CgkJCQlNb2Rpc1RlcnJhVHJ1ZUNvbG9yQ1I6ICdNT0RJU19UZXJyYV9Db3JyZWN0ZWRSZWZsZWN0YW5jZV9UcnVlQ29sb3InLAoJCQkJTW9kaXNUZXJyYUJhbmRzMzY3Q1I6ICdNT0RJU19UZXJyYV9Db3JyZWN0ZWRSZWZsZWN0YW5jZV9CYW5kczM2NycsCgkJCQlWaWlyc0VhcnRoQXROaWdodDIwMTI6IHsKCQkJCQlvcHRpb25zOiB7CgkJCQkJCXZhcmlhbnQ6ICdWSUlSU19DaXR5TGlnaHRzXzIwMTInLAoJCQkJCQltYXhab29tOiA4CgkJCQkJfQoJCQkJfSwKCQkJCU1vZGlzVGVycmFMU1REYXk6IHsKCQkJCQlvcHRpb25zOiB7CgkJCQkJCXZhcmlhbnQ6ICdNT0RJU19UZXJyYV9MYW5kX1N1cmZhY2VfVGVtcF9EYXknLAoJCQkJCQlmb3JtYXQ6ICdwbmcnLAoJCQkJCQltYXhab29tOiA3LAoJCQkJCQlvcGFjaXR5OiAwLjc1CgkJCQkJfQoJCQkJfSwKCQkJCU1vZGlzVGVycmFTbm93Q292ZXI6IHsKCQkJCQlvcHRpb25zOiB7CgkJCQkJCXZhcmlhbnQ6ICdNT0RJU19UZXJyYV9Tbm93X0NvdmVyJywKCQkJCQkJZm9ybWF0OiAncG5nJywKCQkJCQkJbWF4Wm9vbTogOCwKCQkJCQkJb3BhY2l0eTogMC43NQoJCQkJCX0KCQkJCX0sCgkJCQlNb2Rpc1RlcnJhQU9EOiB7CgkJCQkJb3B0aW9uczogewoJCQkJCQl2YXJpYW50OiAnTU9ESVNfVGVycmFfQWVyb3NvbCcsCgkJCQkJCWZvcm1hdDogJ3BuZycsCgkJCQkJCW1heFpvb206IDYsCgkJCQkJCW9wYWNpdHk6IDAuNzUKCQkJCQl9CgkJCQl9LAoJCQkJTW9kaXNUZXJyYUNobG9yb3BoeWxsOiB7CgkJCQkJb3B0aW9uczogewoJCQkJCQl2YXJpYW50OiAnTU9ESVNfVGVycmFfQ2hsb3JvcGh5bGxfQScsCgkJCQkJCWZvcm1hdDogJ3BuZycsCgkJCQkJCW1heFpvb206IDcsCgkJCQkJCW9wYWNpdHk6IDAuNzUKCQkJCQl9CgkJCQl9CgkJCX0KCQl9LAoJCU5MUzogewoJCQkvLyBOTFMgbWFwcyBhcmUgY29weXJpZ2h0IE5hdGlvbmFsIGxpYnJhcnkgb2YgU2NvdGxhbmQuCgkJCS8vIGh0dHA6Ly9tYXBzLm5scy51ay9wcm9qZWN0cy9hcGkvaW5kZXguaHRtbAoJCQkvLyBQbGVhc2UgY29udGFjdCBOTFMgZm9yIGFueXRoaW5nIG90aGVyIHRoYW4gbm9uLWNvbW1lcmNpYWwgbG93IHZvbHVtZSB1c2FnZQoJCQkvLwoJCQkvLyBNYXAgc291cmNlczogT3JkbmFuY2UgU3VydmV5IDE6MW0gdG8gMTo2M0ssIDE5MjBzLTE5NDBzCgkJCS8vICAgejAtOSAgLSAxOjFtCgkJCS8vICB6MTAtMTEgLSBxdWFydGVyIGluY2ggKDE6MjUzNDQwKQoJCQkvLyAgejEyLTE4IC0gb25lIGluY2ggKDE6NjMzNjApCgkJCXVybDogJy8vbmxzLXtzfS50aWxlc2VydmVyLmNvbS9ubHMve3p9L3t4fS97eX0uanBnJywKCQkJb3B0aW9uczogewoJCQkJYXR0cmlidXRpb246ICc8YSBocmVmPSJodHRwOi8vZ2VvLm5scy51ay9tYXBzLyI+TmF0aW9uYWwgTGlicmFyeSBvZiBTY290bGFuZCBIaXN0b3JpYyBNYXBzPC9hPicsCgkJCQlib3VuZHM6IFtbNDkuNiwgLTEyXSwgWzYxLjcsIDNdXSwKCQkJCW1pblpvb206IDEsCgkJCQltYXhab29tOiAxOCwKCQkJCXN1YmRvbWFpbnM6ICcwMTIzJywKCQkJfQoJCX0KCX07CgoJTC50aWxlTGF5ZXIucHJvdmlkZXIgPSBmdW5jdGlvbiAocHJvdmlkZXIsIG9wdGlvbnMpIHsKCQlyZXR1cm4gbmV3IEwuVGlsZUxheWVyLlByb3ZpZGVyKHByb3ZpZGVyLCBvcHRpb25zKTsKCX07CgoJcmV0dXJuIEw7Cn0pKTsK"></script> | |
| <script src="data:application/x-javascript;base64,TGVhZmxldFdpZGdldC5tZXRob2RzLmFkZFByb3ZpZGVyVGlsZXMgPSBmdW5jdGlvbihwcm92aWRlciwgbGF5ZXJJZCwgZ3JvdXAsIG9wdGlvbnMpIHsKICB0aGlzLmxheWVyTWFuYWdlci5hZGRMYXllcihMLnRpbGVMYXllci5wcm92aWRlcihwcm92aWRlciwgb3B0aW9ucyksICJ0aWxlIiwgbGF5ZXJJZCwgZ3JvdXApOwp9Owo="></script> | |
| </head> | |
| <body style="background-color:white;"> | |
| <div id="htmlwidget_container"> | |
| <div id="htmlwidget-feb4e60d39d4329fc324" style="width:100%;height:400px;" class="leaflet html-widget"></div> | |
| </div> | |
| <script type="application/json" data-for="htmlwidget-feb4e60d39d4329fc324">{"x":{"options":{"crs":{"crsClass":"L.CRS.EPSG3857","code":null,"proj4def":null,"projectedBounds":null,"options":{}}},"calls":[{"method":"addProviderTiles","args":["CartoDB.Positron",null,"cartodb",{"errorTileUrl":"","noWrap":false,"zIndex":null,"unloadInvisibleTiles":null,"updateWhenIdle":null,"detectRetina":false,"reuseTiles":false}]},{"method":"addPolygons","args":[[[[{"lng":[-82.04004,-82.033984,-82.031318,-82.029254,-82.028529,-82.022553,-82.019731,-82.016184,-82.016464,-82.014539,-82.009988,-82.008654,-82.005715,-82.000769,-81.999688,-81.998966,-81.994874,-81.993663,-81.983765,-81.978341,-81.973134,-81.968788,-81.969007,-81.96751,-81.964445,-81.961252,-81.966398,-81.965165,-81.967885,-81.970882,-81.969573,-81.971045,-81.96932,-82.089586,-82.138954,-82.181121,-82.245792,-82.27492,-82.277493,-82.282515,-82.288453,-82.295354,-82.314863,-82.317871,-82.32335,-82.326917,-82.328634,-82.330549,-82.330779,-82.332975,-82.339508,-82.341194,-82.344554,-82.350086,-82.350784,-82.351596,-82.353615,-82.350806,-82.359442,-82.358978,-82.352801,-82.349419,-82.346688,-82.345891,-82.343995,-82.341686,-82.341258,-82.337627,-82.337852,-82.336474,-82.333629,-82.330343,-82.329538,-82.326432,-82.319279,-82.318115,-82.31593,-82.314027,-82.314132,-82.310437,-82.311598,-82.31107,-82.309282,-82.307784,-82.308036,-82.305534,-82.305115,-82.303227,-82.302338,-82.29833,-82.29768,-82.298302,-82.297817,-82.295582,-82.294036,-82.289638,-82.28983,-82.287961,-82.286629,-82.28477,-82.281953,-82.27962,-82.280925,-82.281116,-82.276313,-82.274899,-82.273287,-82.268349,-82.263471,-82.261533,-82.261456,-82.25917,-82.256767,-82.251077,-82.248963,-82.244067,-82.238984,-82.234217,-82.228052,-82.220635,-82.214398,-82.208931,-82.205403,-82.205332,-82.203411,-82.198649,-82.19583,-82.193757,-82.194922,-82.19382,-82.191813,-82.189782,-82.185156,-82.183576,-82.180468,-82.177117,-82.176117,-82.1734,-82.171508,-82.165824,-82.159633,-82.156749,-82.154454,-82.151535,-82.142524,-82.141736,-82.137386,-82.131776,-82.129209,-82.127916,-82.125943,-82.122915,-82.120128,-82.115235,-82.114186,-82.109571,-82.107657,-82.108079,-82.106006,-82.106662,-82.104489,-82.102142,-82.100536,-82.097073,-82.090833,-82.088546,-82.088319,-82.084546,-82.079822,-82.079557,-82.078568,-82.076367,-82.071584,-82.070176,-82.06763,-82.065459,-82.064786,-82.061856,-82.058398,-82.056411,-82.053922,-82.051606,-82.052387,-82.051424,-82.047202,-82.048212,-82.046706,-82.045818,-82.043818,-82.04004],"lat":[35.316348,35.310465,35.309257,35.305118,35.300995,35.297993,35.298863,35.298747,35.296778,35.292036,35.289308,35.286731,35.284117,35.282701,35.280631,35.275699,35.269594,35.269562,35.264437,35.264532,35.259477,35.257764,35.252442,35.249742,35.249591,35.248414,35.243151,35.223106,35.219488,35.211589,35.209462,35.205515,35.187368,35.190699,35.193123,35.194067,35.197556,35.200071,35.199395,35.199857,35.198604,35.194965,35.191089,35.187858,35.184789,35.185056,35.1865,35.186767,35.189032,35.190645,35.18893,35.19151,35.193115,35.192858,35.190544,35.190101,35.190828,35.228305,35.228385,35.244634,35.245134,35.244324,35.284057,35.286511,35.288157,35.288686,35.291217,35.294341,35.296595,35.296605,35.300593,35.302738,35.307783,35.309266,35.308148,35.306712,35.308646,35.311984,35.313049,35.31445,35.317363,35.320169,35.320442,35.322393,35.326139,35.326836,35.332555,35.333642,35.335271,35.335752,35.33655,35.337612,35.339841,35.342162,35.346976,35.352083,35.35389,35.354711,35.357123,35.357776,35.360822,35.365434,35.366065,35.367896,35.375116,35.376656,35.376984,35.382176,35.385859,35.388345,35.392984,35.393271,35.396278,35.398416,35.400045,35.400727,35.402467,35.400121,35.395788,35.394694,35.398171,35.397761,35.401583,35.403634,35.403619,35.402921,35.400897,35.400725,35.397721,35.39718,35.397114,35.399068,35.396589,35.400107,35.403206,35.403214,35.40478,35.405454,35.409004,35.407717,35.409333,35.407809,35.408274,35.407581,35.400528,35.399142,35.398557,35.395681,35.396852,35.39638,35.394461,35.393267,35.388202,35.387431,35.385617,35.383382,35.381084,35.377665,35.374729,35.37055,35.368206,35.368569,35.371414,35.369792,35.360274,35.358903,35.355289,35.353278,35.353234,35.346741,35.343816,35.341544,35.338746,35.338421,35.339161,35.336897,35.334708,35.334663,35.337113,35.336873,35.335378,35.331225,35.330967,35.329093,35.327459,35.325387,35.321251,35.320541,35.320834,35.316348]}]],[[{"lng":[-84.310851,-84.304808,-84.294723,-84.29024,-84.288516,-84.28322,-84.27542,-84.260319,-84.257719,-84.250469,-84.242719,-84.232118,-84.227818,-84.223718,-84.221518,-84.216318,-84.211018,-84.202817,-84.201717,-84.200117,-84.198917,-84.193117,-84.188417,-84.178516,-84.169916,-84.161316,-84.158916,-84.147915,-84.139715,-84.133015,-84.127115,-84.125715,-84.126815,-84.125315,-84.12115,-84.119614,-84.116314,-84.114114,-84.110183,-84.109032,-84.106456,-84.10227,-84.098068,-84.082513,-84.083113,-84.081117,-84.055712,-84.052312,-84.051512,-84.046511,-84.040611,-84.036011,-84.02911,-84.02811,-84.02261,-84.02001,-84.01591,-84.01641,-84.00951,-84.01101,-84.01141,-84.01011,-84.01101,-84.00561,-84.00171,-84.00221,-84.00086,-84.001051,-84.006549,-84.003881,-84.003958,-84.002071,-83.99657,-83.991282,-83.988902,-83.986124,-83.977553,-83.976089,-83.968174,-83.958805,-83.957075,-83.957402,-83.944185,-83.942863,-83.943648,-83.934297,-83.925209,-83.919656,-83.909094,-83.906968,-83.903449,-83.901258,-83.893569,-83.893079,-83.888132,-83.87985,-83.873872,-83.869405,-83.867648,-83.864778,-83.851281,-83.848243,-83.844709,-83.840844,-83.830609,-83.82682,-83.82525,-83.822493,-83.813376,-83.810323,-83.806847,-83.795233,-83.789781,-83.787848,-83.781787,-83.773499,-83.767337,-83.762079,-83.759935,-83.756864,-83.754291,-83.749896,-83.745519,-83.734253,-83.726819,-83.722674,-83.718499,-83.713182,-83.708492,-83.707876,-83.70309,-83.704314,-83.697789,-83.695044,-83.691694,-83.69192,-83.690031,-83.690425,-83.693078,-83.693936,-83.697626,-83.709693,-83.711408,-83.712896,-83.722755,-83.722858,-83.725399,-83.728933,-83.723962,-83.719454,-83.716232,-83.711323,-83.7119,-83.716157,-83.72515,-83.726419,-83.731319,-83.732294,-83.730821,-83.732526,-83.733148,-83.737181,-83.738106,-83.739873,-83.74079,-83.745839,-83.75254,-83.75576,-83.765542,-83.767838,-83.770562,-83.776184,-83.778242,-83.784973,-83.787021,-83.791723,-83.794779,-83.797188,-83.806658,-83.80813,-83.812549,-83.816843,-83.820185,-83.823805,-83.832991,-83.834593,-83.841105,-83.845532,-83.849706,-83.856738,-83.857642,-83.862758,-83.865443,-83.863584,-83.874694,-83.876537,-83.88322,-83.887427,-83.893686,-83.895897,-83.905338,-83.905257,-83.908099,-83.911547,-83.916442,-83.922525,-83.926109,-83.925669,-83.926848,-83.931169,-83.933858,-83.93465,-83.94374,-83.94882,-83.956499,-83.961018,-83.964063,-83.962879,-83.965273,-83.966085,-83.958494,-83.958425,-83.960492,-83.957619,-83.956792,-83.964886,-83.964392,-83.967376,-83.971225,-83.972281,-83.971262,-83.97977,-83.983989,-83.998506,-84.003982,-84.003342,-84.005632,-84.005403,-84.321869,-84.310851],"lat":[35.072552,35.1217,35.185594,35.225572,35.224391,35.226577,35.234777,35.241877,35.246177,35.251066,35.253078,35.264578,35.267878,35.269078,35.267678,35.267978,35.265478,35.255679,35.247579,35.244679,35.243679,35.244779,35.239979,35.240679,35.246379,35.24348,35.24588,35.24698,35.24618,35.24228,35.240981,35.242081,35.246481,35.249881,35.250644,35.252281,35.251281,35.248981,35.250463,35.249625,35.251467,35.248115,35.247209,35.256082,35.258182,35.261146,35.268182,35.270282,35.273182,35.274182,35.279483,35.288683,35.292183,35.289883,35.287183,35.281683,35.277983,35.276083,35.272983,35.267383,35.262883,35.260483,35.257283,35.252984,35.252684,35.250984,35.250084,35.248676,35.241804,35.239666,35.236487,35.233704,35.231731,35.23164,35.229826,35.230692,35.225562,35.221234,35.218041,35.216929,35.218175,35.220368,35.219925,35.220746,35.222563,35.222993,35.228216,35.228855,35.233694,35.233611,35.235358,35.238547,35.233282,35.234522,35.234801,35.238299,35.243996,35.243316,35.245979,35.247419,35.249167,35.25338,35.255408,35.254425,35.255911,35.253733,35.251042,35.250195,35.254684,35.252528,35.252666,35.257392,35.255558,35.252892,35.252038,35.245759,35.248164,35.248056,35.247021,35.242511,35.243482,35.243048,35.245127,35.245007,35.248975,35.252962,35.253246,35.257524,35.257586,35.255406,35.251528,35.249376,35.247572,35.243789,35.242797,35.24012,35.23768,35.234842,35.232317,35.228625,35.224578,35.219042,35.217667,35.213291,35.209451,35.207975,35.206118,35.20061,35.197639,35.196814,35.19975,35.195852,35.190611,35.186669,35.183532,35.181547,35.178816,35.17477,35.17138,35.169391,35.165385,35.159901,35.155911,35.156004,35.158151,35.160629,35.160864,35.157226,35.155493,35.157095,35.156544,35.153152,35.149952,35.147848,35.148447,35.14718,35.148042,35.144972,35.144033,35.141499,35.141279,35.139315,35.138613,35.140251,35.140601,35.142964,35.143857,35.141174,35.140757,35.13736,35.135637,35.132602,35.127363,35.120321,35.113814,35.110036,35.10599,35.099455,35.094779,35.091672,35.086851,35.083201,35.077937,35.077387,35.074482,35.07411,35.070273,35.068328,35.066997,35.069378,35.068759,35.065756,35.055905,35.053836,35.054299,35.049107,35.048133,35.045923,35.045399,35.043982,35.038806,35.035663,35.03085,35.028844,35.025939,35.019163,35.01855,35.018145,35.015355,35.014302,35.012165,35.005711,35.004874,34.996184,34.995091,34.99127,34.989449,34.987218,34.988408,35.072552]}]],[[{"lng":[-82.080443,-82.079743,-82.077043,-82.070743,-82.067142,-82.061342,-82.056042,-82.056042,-82.054142,-82.043941,-82.037941,-82.033641,-82.02934,-82.02634,-82.02664,-81.960101,-81.938897,-81.918113,-81.916997,-81.912558,-81.909546,-81.906976,-81.90221,-81.900256,-81.897954,-81.8952,-81.895407,-81.89346,-81.89701,-81.895484,-81.895879,-81.897881,-81.896124,-81.8966,-81.897692,-81.900081,-81.900862,-81.90213,-81.904125,-81.903593,-81.900071,-81.896974,-81.902072,-81.908345,-81.907906,-81.911245,-81.91029,-81.907354,-81.907667,-81.90687,-81.909108,-81.904361,-81.90367,-81.888154,-81.885451,-81.856822,-81.837275,-81.835398,-81.835142,-81.832879,-81.829276,-81.828761,-81.826951,-81.824329,-81.824544,-81.81152,-81.806661,-81.79673,-81.79149,-81.785616,-81.781074,-81.774209,-81.770577,-81.761098,-81.759978,-81.758253,-81.758409,-81.757171,-81.755226,-81.753892,-81.749606,-81.747459,-81.745155,-81.740886,-81.735876,-81.80712,-81.812127,-81.817406,-81.821331,-81.827137,-81.832964,-81.83535,-81.841011,-81.844524,-81.849557,-81.851789,-81.865023,-81.871171,-81.873721,-81.873476,-81.877454,-81.877617,-81.880477,-81.881009,-81.899583,-81.962957,-81.963258,-81.962429,-81.954484,-81.954501,-81.960396,-81.965006,-81.965812,-81.967368,-81.972272,-81.976206,-81.981723,-82.034192,-82.048268,-82.059052,-82.058967,-82.057907,-82.055357,-82.04834,-82.04954,-82.04894,-82.04304,-82.03884,-82.050638,-82.05927,-82.066542,-82.071042,-82.069042,-82.071842,-82.076343,-82.076743,-82.075743,-82.080143,-82.080443],"lat":[36.10412,36.10652,36.10782,36.10942,36.11202,36.113121,36.120721,36.123921,36.126821,36.125421,36.121122,36.120422,36.123522,36.129222,36.130222,36.228131,36.256067,36.28711,36.284978,36.281274,36.280375,36.278337,36.280949,36.280969,36.277988,36.272099,36.269307,36.264267,36.261904,36.260278,36.258157,36.257448,36.256607,36.255167,36.254151,36.253987,36.252185,36.25429,36.251036,36.249357,36.248636,36.242723,36.239244,36.239108,36.234092,36.229537,36.226685,36.223282,36.219853,36.218011,36.21628,36.210669,36.207905,36.196447,36.189506,36.193737,36.172869,36.170323,36.16846,36.167902,36.168846,36.165441,36.16407,36.156481,36.154355,36.111544,36.110938,36.107201,36.102873,36.100522,36.101238,36.098777,36.094935,36.089965,36.085237,36.082404,36.07955,36.077384,36.076494,36.072556,36.072668,36.071929,36.072607,36.071476,36.066976,35.962057,35.963662,35.968505,35.968557,35.967173,35.967235,35.971598,35.972087,35.974982,35.97362,35.974833,35.975609,35.976784,35.977988,35.979192,35.981682,35.989611,35.990963,35.992895,36.000127,35.941669,35.939434,35.937966,35.931995,35.926742,35.921224,35.920709,35.919185,35.919097,35.914849,35.915237,35.91152,35.942107,35.963691,35.987805,35.991316,35.995566,35.999096,36.002123,36.005023,36.008323,36.005924,36.008024,36.031822,36.046747,36.062421,36.069421,36.076521,36.081121,36.08532,36.09242,36.09602,36.10012,36.10412]}]],[[{"lng":[-81.521321,-81.545455,-81.660553,-81.662968,-81.669906,-81.674774,-81.81152,-81.824544,-81.824329,-81.826951,-81.828761,-81.829276,-81.832879,-81.835142,-81.835398,-81.837275,-81.856822,-81.885451,-81.888154,-81.901711,-81.90386,-81.904361,-81.909108,-81.90687,-81.907667,-81.907354,-81.91029,-81.911245,-81.907906,-81.908426,-81.902072,-81.896995,-81.900071,-81.903593,-81.904125,-81.90213,-81.900862,-81.900081,-81.897692,-81.8966,-81.896124,-81.897881,-81.895879,-81.895484,-81.89701,-81.89346,-81.895407,-81.8952,-81.900256,-81.90221,-81.906976,-81.909546,-81.912558,-81.916997,-81.918113,-81.908136,-81.897701,-81.894569,-81.887243,-81.883922,-81.879043,-81.866613,-81.865472,-81.859236,-81.855005,-81.853039,-81.83325,-81.82604,-81.822493,-81.815032,-81.810183,-81.808255,-81.803198,-81.800812,-81.797544,-81.795316,-81.793089,-81.793648,-81.792418,-81.7908,-81.79114,-81.789712,-81.785193,-81.778913,-81.773961,-81.769145,-81.768977,-81.764927,-81.761231,-81.757824,-81.75442,-81.750227,-81.745744,-81.739498,-81.735957,-81.731205,-81.727914,-81.723572,-81.720787,-81.718568,-81.707438,-81.705399,-81.705666,-81.708272,-81.717405,-81.721455,-81.72432,-81.7224,-81.722688,-81.727076,-81.726069,-81.728674,-81.728952,-81.730808,-81.732612,-81.734611,-81.733585,-81.730672,-81.729358,-81.730347,-81.72857,-81.648874,-81.640262,-81.636272,-81.604846,-81.602076,-81.600807,-81.588696,-81.585874,-81.582246,-81.574173,-81.573993,-81.57135,-81.56617,-81.557376,-81.552418,-81.545494,-81.532626,-81.521723,-81.514882,-81.48637,-81.477298,-81.478096,-81.477511,-81.471872,-81.467777,-81.465656,-81.466485,-81.466552,-81.464239,-81.464198,-81.46105,-81.462917,-81.460048,-81.455579,-81.499438,-81.521321],"lat":[36.130838,36.117398,36.118347,36.119983,36.12053,36.122481,36.111544,36.154355,36.156481,36.16407,36.165441,36.168846,36.167902,36.16846,36.170323,36.172869,36.193737,36.189506,36.196447,36.205954,36.208218,36.210669,36.21628,36.218011,36.219853,36.223282,36.226685,36.229537,36.234092,36.238982,36.239244,36.242684,36.248636,36.249357,36.251036,36.25429,36.252185,36.253987,36.254151,36.255167,36.256607,36.257448,36.258157,36.260278,36.261904,36.264267,36.269307,36.272099,36.280969,36.280949,36.278337,36.280375,36.281274,36.284978,36.28711,36.302013,36.307446,36.307183,36.309193,36.312146,36.313984,36.326305,36.329344,36.332799,36.337259,36.336559,36.347365,36.349003,36.348819,36.351403,36.351904,36.354121,36.355396,36.358073,36.358428,36.361717,36.362462,36.359421,36.356785,36.355907,36.352265,36.348323,36.347422,36.34864,36.343741,36.342581,36.341042,36.338672,36.340276,36.339695,36.337044,36.337857,36.337543,36.339757,36.342987,36.341342,36.341457,36.338942,36.338516,36.33612,36.335171,36.340537,36.34299,36.346273,36.347779,36.351167,36.357758,36.35855,36.36093,36.3656,36.368896,36.370977,36.373568,36.373689,36.378246,36.37957,36.382034,36.383007,36.385341,36.388278,36.391242,36.354438,36.35139,36.348593,36.317947,36.31495,36.311868,36.302313,36.298665,36.291288,36.283623,36.281723,36.279631,36.272064,36.275474,36.276467,36.271307,36.26572,36.255214,36.256833,36.241218,36.240272,36.235255,36.233888,36.22838,36.227811,36.225497,36.224686,36.219378,36.216954,36.21421,36.211621,36.208693,36.202005,36.199749,36.143014,36.130838]}]],[[{"lng":[-79.348331,-79.348278,-79.349112,-79.349085,-79.35028,-79.348558,-79.349726,-79.348532,-79.349419,-79.348532,-79.349757,-79.350646,-79.349674,-79.352233,-79.351038,-79.352012,-79.350845,-79.351873,-79.350901,-79.351624,-79.350624,-79.35182,-79.349903,-79.350905,-79.352239,-79.35224,-79.354604,-79.354522,-79.356192,-79.354246,-79.355276,-79.35472,-79.353273,-79.354164,-79.352885,-79.353747,-79.352746,-79.353693,-79.353109,-79.354139,-79.354278,-79.355223,-79.358146,-79.362124,-79.361289,-79.362041,-79.363517,-79.360764,-79.362238,-79.363129,-79.370114,-79.370533,-79.372092,-79.373177,-79.374415,-79.378452,-79.378701,-79.381844,-79.383678,-79.385264,-79.386431,-79.388573,-79.391241,-79.390351,-79.393215,-79.3943,-79.39658,-79.396606,-79.39861,-79.398693,-79.400918,-79.401335,-79.404006,-79.405786,-79.407957,-79.409824,-79.415834,-79.415472,-79.419785,-79.419674,-79.422985,-79.424738,-79.425517,-79.429163,-79.428411,-79.430276,-79.431389,-79.434701,-79.439238,-79.442051,-79.443496,-79.445475,-79.44567,-79.449066,-79.449985,-79.452073,-79.452016,-79.453771,-79.453798,-79.454829,-79.454717,-79.457195,-79.456222,-79.458143,-79.456973,-79.457502,-79.459176,-79.458455,-79.433621,-79.385475,-79.335189,-79.328715,-79.328274,-79.329893,-79.329238,-79.327277,-79.323951,-79.317553,-79.315954,-79.314562,-79.312568,-79.31068,-79.307896,-79.306618,-79.304657,-79.304516,-79.302568,-79.301597,-79.298839,-79.294414,-79.292833,-79.291019,-79.288315,-79.286406,-79.284391,-79.284799,-79.282275,-79.281236,-79.280367,-79.276999,-79.275157,-79.27132,-79.264625,-79.26137,-79.2609,-79.259393,-79.255658,-79.249621,-79.246357,-79.242547,-79.240779,-79.241956,-79.240181,-79.236734,-79.229764,-79.224058,-79.223575,-79.219732,-79.218733,-79.211556,-79.208075,-79.206208,-79.206161,-79.204447,-79.20359,-79.204313,-79.202416,-79.201409,-79.200558,-79.198522,-79.196034,-79.194975,-79.19436,-79.195319,-79.193826,-79.192552,-79.190659,-79.189679,-79.188651,-79.188551,-79.18506,-79.183249,-79.183686,-79.181023,-79.178577,-79.178416,-79.175178,-79.172306,-79.171937,-79.173177,-79.172631,-79.167801,-79.167654,-79.168932,-79.167994,-79.162175,-79.161353,-79.159254,-79.160211,-79.158782,-79.156309,-79.154272,-79.153826,-79.15476,-79.151659,-79.147538,-79.148665,-79.145786,-79.146258,-79.142794,-79.140728,-79.137017,-79.135381,-79.136281,-79.133031,-79.129363,-79.131342,-79.128122,-79.127405,-79.125029,-79.122765,-79.122466,-79.119627,-79.116555,-79.111927,-79.109821,-79.109015,-79.1075,-79.10456,-79.1033,-79.101503,-79.097671,-79.113007,-79.111924,-79.10879,-79.107545,-79.105277,-79.103563,-79.101295,-79.10013,-79.100704,-79.098998,-79.0998,-79.098314,-79.099557,-79.098052,-79.098412,-79.09315,-79.091683,-79.093374,-79.090291,-79.089207,-79.09095,-79.090776,-79.092052,-79.09042,-79.093124,-79.088319,-79.088914,-79.088086,-79.091726,-79.089768,-79.090623,-79.090288,-79.087748,-79.087093,-79.084373,-79.082742,-79.072226,-79.071384,-79.066201,-79.061132,-79.060692,-79.057099,-79.056734,-79.049617,-79.047482,-79.048151,-79.047043,-79.043366,-79.042559,-79.041158,-79.040985,-79.037327,-79.034799,-79.037144,-79.034715,-79.191423,-79.349143,-79.347804,-79.348754,-79.347033,-79.348033,-79.345284,-79.34534,-79.341591,-79.342425,-79.341203,-79.341703,-79.340731,-79.340565,-79.339037,-79.338842,-79.340482,-79.338482,-79.337343,-79.337954,-79.336954,-79.338316,-79.337288,-79.338955,-79.3379,-79.341596,-79.341625,-79.342653,-79.342431,-79.343653,-79.343376,-79.341903,-79.342042,-79.343042,-79.342654,-79.344016,-79.344767,-79.344659,-79.345827,-79.34416,-79.346578,-79.346162,-79.34744,-79.346552,-79.348331],"lat":[34.886289,34.890914,34.89128,34.893685,34.894371,34.895517,34.899386,34.899639,34.900824,34.901493,34.905363,34.905546,34.906348,34.911339,34.912003,34.912896,34.9134,34.914224,34.914316,34.915781,34.91727,34.919903,34.921369,34.924506,34.924277,34.92517,34.926566,34.929474,34.932794,34.934443,34.935908,34.937145,34.936756,34.938451,34.939436,34.939985,34.940535,34.943282,34.944038,34.944336,34.945641,34.944747,34.949464,34.950378,34.951042,34.953195,34.95427,34.958027,34.957522,34.959652,34.963519,34.966862,34.968739,34.9686,34.971461,34.974163,34.975651,34.976409,34.978676,34.978425,34.981151,34.981495,34.985252,34.985916,34.98871,34.988642,34.99162,34.993864,34.99375,34.994918,34.995994,34.997254,34.997713,34.999247,34.999133,35.001693,35.002816,35.003801,35.006252,35.00774,35.010167,35.010213,35.01248,35.015251,35.016075,35.0169,35.019991,35.020312,35.022419,35.022029,35.024183,35.024593,35.025921,35.026608,35.030157,35.030248,35.032676,35.033317,35.034393,35.034095,35.035629,35.037232,35.039293,35.040987,35.041193,35.042223,35.043096,35.044046,35.068947,35.113035,35.161827,35.161605,35.162347,35.163237,35.164792,35.164908,35.167068,35.167557,35.168673,35.167898,35.168387,35.172954,35.173756,35.175448,35.17525,35.17708,35.178569,35.178262,35.181905,35.184827,35.188388,35.187662,35.188547,35.190678,35.190623,35.193035,35.193909,35.195392,35.194562,35.195583,35.198011,35.199455,35.199249,35.201408,35.203468,35.204638,35.202977,35.207433,35.21349,35.213508,35.211712,35.209184,35.208388,35.210769,35.210634,35.204569,35.202091,35.2024,35.198834,35.194065,35.194868,35.193748,35.195165,35.195784,35.194337,35.192704,35.192414,35.193461,35.192368,35.192167,35.192962,35.191611,35.192526,35.194114,35.194621,35.19298,35.193408,35.192409,35.192623,35.194061,35.193701,35.191683,35.190639,35.189792,35.189911,35.191677,35.193009,35.191484,35.189143,35.187991,35.18626,35.184842,35.183483,35.182363,35.181079,35.180544,35.178755,35.179564,35.182462,35.182426,35.179965,35.18072,35.178275,35.176706,35.174215,35.176192,35.173071,35.172179,35.170631,35.169061,35.169247,35.171686,35.175984,35.177045,35.177733,35.175804,35.174035,35.17167,35.167685,35.166588,35.167561,35.169359,35.171676,35.171714,35.170138,35.170605,35.174443,35.175814,35.175344,35.172665,35.17207,35.174172,35.125377,35.124268,35.124524,35.122403,35.121195,35.116667,35.114574,35.110772,35.107986,35.105398,35.102937,35.100937,35.098722,35.096101,35.094216,35.090421,35.083052,35.079612,35.077569,35.071041,35.068051,35.064864,35.063787,35.059309,35.05639,35.051809,35.050517,35.049566,35.047599,35.045418,35.044406,35.042159,35.039934,35.037659,35.035682,35.031561,35.018022,35.014505,35.012159,35.00773,35.004691,35.000982,34.998264,34.991801,34.985541,34.981338,34.978448,34.975056,34.971836,34.970769,34.967686,34.966971,34.963042,34.957783,34.953584,34.833377,34.838476,34.838625,34.83958,34.841,34.842947,34.843336,34.845924,34.847345,34.849108,34.84881,34.849703,34.849543,34.850505,34.850024,34.850849,34.851787,34.851971,34.852933,34.853597,34.853757,34.855429,34.856162,34.856734,34.859047,34.862046,34.867221,34.867175,34.86848,34.868182,34.8699,34.869648,34.871778,34.872052,34.873793,34.874662,34.873815,34.87564,34.876122,34.877817,34.879259,34.882374,34.882419,34.883198,34.886289]}]],[[{"lng":[-80.544503,-80.650431,-80.737069,-80.73762,-80.736308,-80.737025,-80.741048,-80.741026,-80.739799,-80.771582,-80.707837,-80.707269,-80.699488,-80.69882,-80.696446,-80.693297,-80.691731,-80.687334,-80.682307,-80.677013,-80.675412,-80.674502,-80.672305,-80.668771,-80.668262,-80.669622,-80.672844,-80.67117,-80.660557,-80.6498,-80.64228,-80.631796,-80.630778,-80.630762,-80.622931,-80.615042,-80.610815,-80.609985,-80.612509,-80.609437,-80.608461,-80.604023,-80.603576,-80.601472,-80.599568,-80.599115,-80.593967,-80.594329,-80.591058,-80.587227,-80.589926,-80.586633,-80.576962,-80.570956,-80.567486,-80.561857,-80.554775,-80.546699,-80.543496,-80.538249,-80.533843,-80.534272,-80.53318,-80.528301,-80.520881,-80.515406,-80.508585,-80.507372,-80.50644,-80.501496,-80.496062,-80.492067,-80.492009,-80.489166,-80.487132,-80.487277,-80.484927,-80.483115,-80.478498,-80.471455,-80.468907,-80.469006,-80.462192,-80.458035,-80.453518,-80.443203,-80.423183,-80.413051,-80.404567,-80.395682,-80.393442,-80.388956,-80.382531,-80.3712,-80.358393,-80.339465,-80.333059,-80.325192,-80.324022,-80.324692,-80.331529,-80.33395,-80.333843,-80.330068,-80.325457,-80.314956,-80.30778,-80.306277,-80.306201,-80.304237,-80.294941,-80.288813,-80.283565,-80.26891,-80.262593,-80.258832,-80.257149,-80.249578,-80.24037,-80.235582,-80.233807,-80.232378,-80.217997,-80.21334,-80.208176,-80.207111,-80.207777,-80.210808,-80.209985,-80.207269,-80.201014,-80.199197,-80.1955,-80.196946,-80.190476,-80.184339,-80.184927,-80.182682,-80.41971,-80.544503],"lat":[35.502888,35.506094,35.507163,35.507976,35.515285,35.525305,35.537009,35.541704,35.544145,35.672163,35.852897,35.851917,35.850492,35.85298,35.854614,35.853598,35.863446,35.859721,35.857582,35.855943,35.856145,35.857645,35.855827,35.856281,35.854848,35.851942,35.84978,35.846467,35.844672,35.846398,35.844111,35.845784,35.844761,35.838451,35.839192,35.833035,35.831195,35.828456,35.825316,35.823145,35.824149,35.823622,35.826197,35.823385,35.825033,35.827337,35.82727,35.823208,35.817302,35.819515,35.821598,35.823038,35.818071,35.816571,35.811703,35.809611,35.800346,35.798221,35.792718,35.79026,35.791307,35.787651,35.785501,35.783467,35.784484,35.778647,35.774766,35.774961,35.778353,35.783192,35.782492,35.778844,35.775735,35.768468,35.766104,35.770969,35.775505,35.776248,35.774819,35.767692,35.761367,35.75767,35.750947,35.740568,35.734533,35.734785,35.725622,35.722318,35.722271,35.725202,35.724354,35.719357,35.719594,35.716332,35.717462,35.721385,35.719925,35.711126,35.707114,35.703657,35.697479,35.693209,35.686006,35.678747,35.674863,35.671805,35.667097,35.664293,35.658628,35.653582,35.645175,35.636302,35.6336,35.63127,35.628518,35.625783,35.622763,35.619333,35.611658,35.604571,35.598644,35.597246,35.587245,35.585131,35.580401,35.573639,35.566772,35.555727,35.552824,35.549513,35.547419,35.545565,35.537395,35.529813,35.525735,35.517466,35.508463,35.504335,35.501973,35.502888]}]],[[{"lng":[-77.251855,-77.2541,-77.254417,-77.250579,-77.250737,-77.26605,-77.267,-77.262983,-77.275429,-77.282907,-77.287537,-77.29181,-77.295635,-77.298053,-77.295463,-77.299738,-77.298721,-77.295219,-77.295812,-77.293354,-77.297759,-77.298493,-77.290443,-77.287872,-77.275388,-77.269881,-77.263863,-77.253048,-77.249687,-77.244694,-77.228656,-77.2289,-77.20879,-77.183194,-77.008765,-76.98577,-76.971343,-76.943971,-76.928146,-76.899949,-76.706556,-76.716115,-76.728423,-76.732397,-76.732906,-76.736625,-76.737341,-76.736326,-76.731511,-76.710207,-76.710227,-76.708584,-76.689632,-76.679623,-76.621725,-76.606135,-76.624664,-76.653424,-76.673125,-76.689128,-76.692765,-76.694262,-76.700619,-76.711118,-76.719812,-76.723609,-76.724421,-76.732234,-76.743284,-76.751586,-76.776751,-76.791145,-76.806232,-76.821692,-76.832101,-76.835876,-76.836656,-76.832783,-76.831709,-76.838796,-76.859036,-76.875311,-76.881356,-76.896426,-76.897567,-76.89265,-76.900698,-76.904313,-76.896405,-76.894163,-76.896881,-76.90288,-76.903721,-76.901957,-76.897359,-76.900611,-76.893322,-76.902406,-76.904757,-76.911796,-76.916454,-76.922262,-76.940972,-76.947421,-76.94739,-76.957388,-76.958242,-76.968762,-76.978558,-76.980376,-76.984818,-76.987685,-76.98791,-76.990239,-77.004898,-77.009958,-77.01561,-77.033761,-77.0447,-77.045044,-77.040725,-77.040247,-77.045557,-77.043863,-77.039539,-77.031151,-77.03669,-77.037476,-77.029796,-77.024424,-77.022173,-77.025238,-77.024279,-77.02574,-77.030579,-77.026806,-77.027479,-77.031981,-77.027699,-77.034707,-77.039125,-77.043318,-77.045175,-77.055394,-77.056295,-77.05956,-77.064176,-77.070117,-77.070595,-77.066344,-77.067245,-77.073775,-77.081065,-77.081737,-77.086915,-77.088214,-77.091976,-77.093131,-77.10346,-77.107781,-77.110674,-77.115327,-77.120998,-77.124681,-77.127122,-77.12962,-77.131394,-77.141082,-77.146516,-77.164524,-77.16991,-77.173004,-77.185921,-77.196689,-77.202338,-77.200881,-77.194352,-77.199566,-77.198676,-77.18893,-77.197771,-77.19639,-77.193349,-77.191041,-77.195884,-77.196476,-77.190817,-77.195944,-77.196536,-77.192733,-77.196453,-77.204931,-77.210535,-77.213248,-77.206169,-77.206733,-77.216399,-77.230852,-77.273169,-77.290693,-77.320468,-77.327355,-77.327106,-77.318638,-77.313197,-77.291177,-77.282392,-77.271392,-77.242664,-77.230219,-77.230041,-77.23196,-77.242961,-77.251568,-77.250124,-77.240547,-77.239439,-77.251855],"lat":[36.12199,36.122733,36.124797,36.131628,36.134982,36.14119,36.15059,36.15897,36.157436,36.167375,36.169573,36.16849,36.17232,36.172345,36.174417,36.181697,36.186367,36.188106,36.193095,36.196597,36.203144,36.207103,36.212779,36.211245,36.214492,36.213209,36.217167,36.219154,36.219013,36.215077,36.214459,36.217442,36.246875,36.242692,36.239395,36.242092,36.238234,36.241361,36.240043,36.243074,36.243869,36.228609,36.22065,36.214838,36.197222,36.184152,36.160061,36.147042,36.13341,36.097595,36.075751,36.06816,36.038916,36.028674,35.987179,35.978467,35.975719,35.966975,35.958947,35.949443,35.944601,35.935525,35.923917,35.92293,35.917685,35.911823,35.904291,35.886796,35.872487,35.867359,35.862802,35.869035,35.88383,35.887028,35.885069,35.880966,35.875099,35.864503,35.855664,35.845195,35.825791,35.813695,35.81174,35.813357,35.815051,35.818446,35.820722,35.824875,35.827912,35.831473,35.833984,35.835808,35.838295,35.844572,35.849776,35.857308,35.863951,35.868056,35.876845,35.881956,35.893137,35.897814,35.901115,35.89689,35.893351,35.88692,35.883872,35.88248,35.876477,35.872622,35.876975,35.876493,35.871064,35.866783,35.858417,35.86177,35.86239,35.857154,35.862066,35.863172,35.865882,35.868559,35.874621,35.875729,35.874822,35.881381,35.886808,35.890768,35.893261,35.890421,35.891176,35.894542,35.899922,35.903356,35.905188,35.910041,35.917755,35.917963,35.929522,35.929363,35.931012,35.942734,35.943993,35.944611,35.940856,35.93875,35.939689,35.943878,35.941978,35.938361,35.936621,35.934354,35.937352,35.931969,35.931987,35.929248,35.928161,35.92457,35.933113,35.931273,35.927516,35.929051,35.925641,35.926396,35.929375,35.939336,35.940665,35.933961,35.936021,35.937444,35.930341,35.928957,35.931007,35.937433,35.947743,35.950926,35.949725,35.955676,35.9574,35.957234,35.961937,35.963082,35.960496,35.960633,35.964616,35.967866,35.973498,35.979746,35.982722,35.985149,35.992519,35.993409,35.990638,35.992529,36.004737,36.007118,36.014624,36.015603,36.033197,36.043996,36.056283,36.06885,36.075494,36.078967,36.088377,36.091061,36.096452,36.099149,36.096666,36.104004,36.107487,36.110197,36.112015,36.115507,36.117311,36.118461,36.120395,36.12199]}]],[[{"lng":[-78.607707,-78.606997,-78.614768,-78.614594,-78.619454,-78.621353,-78.62724,-78.638948,-78.64982,-78.650307,-78.653406,-78.655698,-78.660555,-78.672195,-78.675948,-78.686651,-78.687834,-78.688048,-78.689512,-78.708629,-78.648655,-78.540144,-78.518328,-78.473268,-78.468503,-78.463688,-78.460036,-78.387079,-78.255374,-78.255152,-78.256901,-78.251593,-78.249329,-78.248787,-78.247522,-78.243898,-78.247013,-78.247124,-78.245298,-78.248266,-78.248436,-78.250865,-78.245962,-78.243461,-78.238491,-78.238375,-78.234499,-78.236434,-78.234525,-78.23427,-78.231069,-78.226015,-78.221918,-78.218044,-78.216611,-78.217193,-78.215621,-78.216742,-78.215198,-78.215365,-78.209443,-78.20933,-78.206103,-78.207618,-78.206804,-78.194034,-78.19207,-78.188139,-78.180227,-78.1786,-78.179498,-78.17627,-78.177674,-78.176243,-78.177029,-78.171726,-78.171334,-78.168009,-78.167825,-78.163931,-78.164154,-78.162195,-78.162162,-78.125587,-78.064603,-78.154889,-78.154015,-78.150042,-78.145067,-78.14429,-78.146055,-78.15098,-78.157512,-78.162176,-78.162103,-78.157908,-78.160075,-78.153908,-78.153438,-78.158688,-78.160795,-78.16498,-78.168007,-78.170535,-78.174407,-78.177875,-78.179744,-78.184867,-78.186942,-78.196723,-78.197582,-78.201972,-78.209797,-78.211974,-78.213587,-78.216469,-78.218189,-78.216298,-78.241687,-78.248629,-78.257016,-78.26782,-78.272989,-78.287595,-78.304662,-78.363784,-78.410324,-78.491383,-78.541262,-78.538621,-78.537488,-78.535577,-78.537641,-78.535903,-78.533114,-78.532482,-78.530148,-78.530555,-78.533542,-78.532823,-78.541465,-78.545729,-78.548954,-78.55071,-78.562197,-78.562954,-78.567052,-78.569265,-78.569546,-78.572156,-78.571499,-78.573263,-78.57592,-78.582998,-78.584944,-78.591715,-78.596064,-78.597314,-78.596516,-78.59905,-78.60961,-78.607707],"lat":[35.431001,35.432341,35.439955,35.441985,35.44506,35.450504,35.45827,35.461813,35.471658,35.482622,35.48401,35.490315,35.496245,35.495663,35.496592,35.501813,35.504149,35.513709,35.516105,35.519081,35.56464,35.650257,35.66545,35.701864,35.707072,35.708223,35.705691,35.743625,35.817825,35.814759,35.813229,35.810961,35.803572,35.794121,35.792429,35.792316,35.788264,35.785907,35.784901,35.781258,35.775494,35.773681,35.772063,35.769044,35.768474,35.763096,35.759825,35.757215,35.756575,35.753143,35.751199,35.750562,35.754497,35.754567,35.751844,35.749762,35.748245,35.740395,35.738405,35.736116,35.731952,35.730716,35.73074,35.729801,35.72868,35.728498,35.730443,35.730326,35.726782,35.724218,35.722525,35.72209,35.720969,35.719527,35.718406,35.717146,35.715476,35.714801,35.713567,35.713125,35.714432,35.713292,35.696414,35.603111,35.585419,35.417627,35.391981,35.391756,35.38847,35.386635,35.382742,35.378251,35.374781,35.368159,35.365589,35.35992,35.35668,35.356464,35.350493,35.347605,35.349384,35.346476,35.347878,35.346363,35.347273,35.346112,35.343973,35.345348,35.34271,35.343662,35.340197,35.341353,35.339917,35.34232,35.340527,35.340929,35.338902,35.333571,35.320496,35.320384,35.325524,35.325045,35.319286,35.315047,35.286097,35.271117,35.256383,35.263362,35.315116,35.315879,35.318642,35.319366,35.321774,35.326575,35.327935,35.331721,35.334066,35.3375,35.340645,35.342623,35.351461,35.353286,35.353122,35.356248,35.361121,35.366785,35.367192,35.370812,35.376162,35.383123,35.385177,35.385572,35.390258,35.39374,35.395987,35.397793,35.402889,35.40691,35.409877,35.418262,35.427185,35.431001]}]],[[{"lng":[-77.635847,-77.627271,-77.621392,-77.610091,-77.604321,-77.592724,-77.585971,-77.581544,-77.571125,-77.568436,-77.565747,-77.557795,-77.543234,-77.540882,-77.538083,-77.535367,-77.534528,-77.533155,-77.530664,-77.53002,-77.52694,-77.525121,-77.52529,-77.523554,-77.522798,-77.522379,-77.525041,-77.521906,-77.518854,-77.518013,-77.512611,-77.510286,-77.509083,-77.509112,-77.507041,-77.505332,-77.503345,-77.505307,-77.505309,-77.506849,-77.505674,-77.50853,-77.511105,-77.510518,-77.507916,-77.506041,-77.507135,-77.511117,-77.511874,-77.510895,-77.507173,-77.508125,-77.506949,-77.507034,-77.504347,-77.503256,-77.502249,-77.502586,-77.501298,-77.501103,-77.50284,-77.500825,-77.500967,-77.49932,-77.499236,-77.498332,-77.498611,-77.494048,-77.494381,-77.493065,-77.492504,-77.490712,-77.491045,-77.493225,-77.490006,-77.48816,-77.486956,-77.484325,-77.486226,-77.485184,-77.485274,-77.483959,-77.480741,-77.48211,-77.482221,-77.48443,-77.484401,-77.481967,-77.481267,-77.480009,-77.480346,-77.477073,-77.479475,-77.476007,-77.474553,-77.474608,-77.476843,-77.477065,-77.476,-77.480781,-77.482989,-77.481892,-77.492768,-77.495089,-77.499061,-77.498755,-77.504367,-77.507527,-77.506518,-77.510573,-77.519439,-77.520864,-77.52011,-77.52053,-77.528192,-77.52755,-77.528977,-77.532026,-77.532809,-77.532324,-77.565878,-77.572082,-77.576162,-77.580103,-77.581528,-77.584938,-77.5919,-77.596924,-77.602519,-77.60749,-77.614363,-77.61797,-77.627881,-77.630231,-77.633054,-77.634928,-77.637443,-77.643506,-77.648087,-77.650462,-77.65387,-77.658093,-77.661609,-77.665171,-77.667532,-77.67197,-77.679732,-77.68149,-77.687672,-77.690911,-77.690154,-77.693744,-77.697184,-77.696286,-77.696754,-77.698139,-77.700739,-77.701681,-77.749753,-77.77768,-77.805564,-77.802758,-77.802489,-77.799961,-77.803983,-77.805077,-77.812307,-77.818185,-77.821158,-77.824631,-77.824833,-77.826618,-77.827451,-77.826806,-77.82426,-77.823471,-77.816125,-77.809014,-77.806097,-77.753646,-77.700502,-77.697738,-77.691148,-77.688681,-77.686102,-77.683354,-77.682513,-77.680747,-77.682486,-77.681897,-77.679627,-77.676796,-77.67383,-77.6622,-77.635847],"lat":[35.592714,35.584589,35.582137,35.567449,35.567543,35.564045,35.559126,35.553817,35.548944,35.542948,35.539149,35.532031,35.533197,35.532876,35.53061,35.531021,35.529556,35.530494,35.530265,35.528182,35.528753,35.528226,35.525388,35.526097,35.525296,35.523671,35.519666,35.517674,35.517604,35.518886,35.518174,35.519615,35.519477,35.518012,35.516981,35.518331,35.517942,35.515013,35.512198,35.511123,35.510321,35.508423,35.508332,35.507142,35.506386,35.504782,35.502242,35.499691,35.497729,35.49631,35.496217,35.495347,35.495393,35.49434,35.493698,35.491386,35.491934,35.489714,35.490172,35.488913,35.486007,35.486441,35.483808,35.482293,35.481218,35.481035,35.479868,35.477238,35.473461,35.47321,35.470715,35.469,35.465383,35.462773,35.460325,35.460006,35.458495,35.457993,35.455955,35.454358,35.452904,35.452037,35.451768,35.450509,35.447534,35.447441,35.445519,35.445222,35.443849,35.444857,35.446802,35.445705,35.439501,35.439342,35.440281,35.438038,35.433802,35.430827,35.426684,35.424828,35.422745,35.414869,35.412049,35.412139,35.414358,35.417334,35.41963,35.419265,35.421966,35.421601,35.417164,35.417531,35.415951,35.415082,35.41474,35.412932,35.409753,35.406915,35.405128,35.403583,35.383594,35.382312,35.380068,35.380022,35.378259,35.379517,35.373716,35.375921,35.374793,35.37958,35.377746,35.372309,35.366314,35.362768,35.360823,35.356704,35.354371,35.354213,35.355244,35.353528,35.352499,35.353803,35.352226,35.35217,35.349411,35.347991,35.3476,35.348447,35.358866,35.360828,35.364083,35.36566,35.37285,35.375162,35.376221,35.378202,35.379132,35.380597,35.373241,35.367682,35.369768,35.372909,35.376883,35.382232,35.395222,35.40645,35.413107,35.415664,35.420558,35.423152,35.425055,35.428183,35.435297,35.469542,35.499028,35.585523,35.588443,35.584179,35.583457,35.615818,35.652256,35.651011,35.650349,35.649067,35.645817,35.644101,35.640874,35.639203,35.632544,35.631308,35.630118,35.625565,35.623278,35.618974,35.592714]}]],[[{"lng":[-77.912023,-77.911931,-77.916867,-77.920079,-77.918003,-77.91169,-77.91173,-77.906734,-77.896238,-77.892613,-77.885594,-77.885216,-77.876593,-77.870986,-77.865628,-77.858399,-77.83333,-77.820383,-77.809247,-77.787471,-77.775423,-77.768464,-77.765145,-77.753325,-77.744258,-77.725846,-77.710013,-77.681018,-77.645496,-77.639377,-77.630837,-77.6247,-77.621365,-77.616069,-77.610514,-77.59196,-77.589834,-77.586775,-77.580773,-77.573269,-77.555968,-77.549626,-77.544534,-77.547571,-77.557786,-77.563049,-77.573657,-77.579512,-77.586041,-77.577214,-77.571556,-77.557361,-77.543564,-77.524054,-77.495469,-77.485013,-77.476332,-77.46819,-77.441747,-77.421981,-77.414293,-77.41325,-77.409948,-77.383081,-77.377693,-77.376596,-77.386102,-77.386781,-77.385145,-77.358273,-77.350899,-77.341892,-77.329497,-77.319895,-77.308688,-77.312753,-77.313091,-77.309817,-77.303267,-77.296804,-77.287537,-77.28085,-77.277031,-77.262983,-77.267,-77.265733,-77.250737,-77.2541,-77.239281,-77.241833,-77.250124,-77.251568,-77.242961,-77.23196,-77.229883,-77.242664,-77.271392,-77.282392,-77.291177,-77.313197,-77.318638,-77.326789,-77.402701,-77.40856,-77.411832,-77.422932,-77.428212,-77.435317,-77.441739,-77.437887,-77.439361,-77.45444,-77.467459,-77.474102,-77.517701,-77.52136,-77.526604,-77.526646,-77.529186,-77.528777,-77.524476,-77.522592,-77.525572,-77.526829,-77.52921,-77.529506,-77.531451,-77.533433,-77.531544,-77.532519,-77.535202,-77.540137,-77.538711,-77.535802,-77.529652,-77.525514,-77.527781,-77.532598,-77.530855,-77.532492,-77.535643,-77.534444,-77.535831,-77.533777,-77.534796,-77.532695,-77.531566,-77.53416,-77.533444,-77.538519,-77.538311,-77.540711,-77.541956,-77.55307,-77.553578,-77.557675,-77.557498,-77.560377,-77.56289,-77.569623,-77.570051,-77.574868,-77.574509,-77.5771,-77.579565,-77.579452,-77.581728,-77.582964,-77.586096,-77.584634,-77.586382,-77.587501,-77.590009,-77.592178,-77.593856,-77.594227,-77.596371,-77.595803,-77.599927,-77.600845,-77.605038,-77.605825,-77.610088,-77.60876,-77.614721,-77.62076,-77.622913,-77.625299,-77.626543,-77.628047,-77.626815,-77.630103,-77.627858,-77.631355,-77.629614,-77.629637,-77.631591,-77.630136,-77.632111,-77.633424,-77.63676,-77.635538,-77.636484,-77.643452,-77.643893,-77.650638,-77.651109,-77.652808,-77.655558,-77.655582,-77.659328,-77.661601,-77.663181,-77.665761,-77.667435,-77.670167,-77.670555,-77.668452,-77.671986,-77.671746,-77.67681,-77.672052,-77.678981,-77.678248,-77.682987,-77.682737,-77.686664,-77.692594,-77.699154,-77.702615,-77.705264,-77.707154,-77.711813,-77.71577,-77.721532,-77.716427,-77.72093,-77.726173,-77.731707,-77.729525,-77.732254,-77.737133,-77.741529,-77.745903,-77.75034,-77.753145,-77.753278,-77.757258,-77.772707,-77.774245,-77.778845,-77.783083,-77.79227,-77.799261,-77.804383,-77.805928,-77.80531,-77.808342,-77.815408,-77.821597,-77.848272,-77.856565,-77.861446,-77.871424,-77.878792,-77.879092,-77.883719,-77.886303,-77.888141,-77.892414,-77.901104,-77.900766,-77.909272,-77.915863,-77.922641,-77.923062,-77.917684,-77.923999,-77.926018,-77.931082,-77.941176,-77.944067,-77.944551,-77.943039,-77.944289,-77.951122,-77.967533,-77.972926,-77.972884,-77.969662,-77.96907,-77.971423,-77.975748,-77.978618,-77.979617,-77.98438,-77.983171,-77.987476,-77.991181,-77.990668,-77.992517,-77.99346,-77.996638,-77.997765,-77.996608,-78.001714,-78.006554,-77.944129,-77.912023],"lat":[36.38227,36.424569,36.427401,36.436136,36.440204,36.442843,36.475444,36.491537,36.509558,36.51201,36.508204,36.506504,36.506412,36.503944,36.503426,36.506655,36.501004,36.501069,36.498562,36.490709,36.482451,36.480534,36.4823,36.478877,36.47928,36.487563,36.487238,36.479207,36.480956,36.474936,36.450401,36.444791,36.443303,36.443855,36.437336,36.431393,36.424436,36.422217,36.424187,36.423135,36.418194,36.412266,36.394118,36.372787,36.367181,36.362008,36.357362,36.351044,36.337015,36.328137,36.314248,36.30569,36.303057,36.306806,36.3081,36.316137,36.317125,36.32127,36.32409,36.299579,36.292918,36.274975,36.26353,36.250623,36.245587,36.238697,36.215859,36.212907,36.209863,36.197595,36.19128,36.189704,36.192362,36.181949,36.180256,36.175381,36.172519,36.168492,36.165562,36.165264,36.169573,36.165309,36.158082,36.15897,36.15059,36.140545,36.134982,36.122733,36.120008,36.118076,36.117311,36.115507,36.112015,36.110197,36.104649,36.096666,36.099149,36.096452,36.091061,36.088377,36.078967,36.075881,36.004933,36.007004,36.004835,36.003601,36.005469,36.013319,36.01473,36.018779,36.021327,36.029769,36.031683,36.037349,36.036874,36.038727,36.037563,36.0392,36.03929,36.040626,36.040046,36.045169,36.047805,36.046479,36.047444,36.050549,36.049842,36.052312,36.053297,36.056085,36.054727,36.060805,36.064928,36.063491,36.06876,36.069061,36.073223,36.074208,36.076108,36.075419,36.077968,36.078951,36.080305,36.080195,36.081485,36.081403,36.084055,36.087174,36.091023,36.091141,36.094037,36.096116,36.095339,36.100009,36.097961,36.097401,36.095481,36.094456,36.097293,36.098558,36.096906,36.098239,36.099846,36.097696,36.097976,36.100766,36.099364,36.101635,36.100256,36.102615,36.103345,36.101752,36.10382,36.101842,36.104394,36.101281,36.100859,36.102508,36.104191,36.106457,36.107452,36.110373,36.107663,36.11061,36.109439,36.112177,36.110951,36.11503,36.111777,36.114103,36.115454,36.11591,36.120149,36.119321,36.121208,36.123201,36.123306,36.124337,36.12496,36.128331,36.12801,36.129262,36.131721,36.135496,36.138061,36.137908,36.135296,36.137875,36.137055,36.13895,36.136828,36.138363,36.136103,36.138739,36.136463,36.137179,36.139159,36.139474,36.14079,36.142868,36.143916,36.148182,36.150751,36.154262,36.153376,36.151395,36.153103,36.150969,36.153118,36.15056,36.150748,36.146422,36.145325,36.146502,36.14158,36.136773,36.133899,36.137959,36.139411,36.14902,36.147245,36.153571,36.155178,36.153006,36.157448,36.156955,36.151888,36.148873,36.146796,36.142499,36.143898,36.141382,36.145094,36.144502,36.149705,36.147125,36.141245,36.138212,36.13994,36.144772,36.145102,36.146195,36.149089,36.145248,36.144757,36.143157,36.147399,36.144088,36.144194,36.151277,36.156238,36.162729,36.16532,36.163541,36.166298,36.168817,36.180554,36.188958,36.183281,36.182356,36.192399,36.19258,36.18834,36.186236,36.182218,36.180573,36.194323,36.1943,36.189441,36.186505,36.183511,36.177918,36.177675,36.175403,36.178758,36.181509,36.186765,36.189589,36.186673,36.185148,36.18549,36.190297,36.192431,36.197197,36.198447,36.19895,36.202663,36.297394,36.38227]}]],[[{"lng":[-82.990348,-82.99367,-82.996829,-83.007224,-83.017545,-83.02298,-83.02798,-83.027744,-83.030125,-83.04018,-83.043953,-83.042928,-83.043626,-83.044958,-83.044933,-83.052957,-83.053312,-83.055752,-83.063213,-83.067143,-83.073701,-83.077837,-83.080329,-83.079014,-83.08042,-83.079746,-83.090275,-83.089934,-83.093321,-83.113122,-83.118159,-83.122204,-83.131941,-83.137608,-83.136342,-83.137938,-83.136369,-83.140398,-83.137681,-83.138881,-83.142062,-83.15283,-83.157943,-83.160876,-83.160507,-83.163865,-83.175428,-83.185713,-83.186052,-83.183126,-83.181586,-83.173927,-83.173239,-83.169965,-83.171878,-83.171741,-83.165149,-83.164848,-83.1629,-83.159589,-83.156267,-83.15973,-83.160016,-83.163379,-83.162188,-83.167128,-83.175174,-83.183459,-83.183137,-83.184621,-83.18318,-83.185806,-83.182231,-83.177897,-83.175977,-83.179638,-83.181897,-83.181128,-83.176243,-83.177574,-83.181872,-83.187004,-83.186499,-83.188266,-83.193986,-83.197071,-83.200435,-83.202063,-83.202749,-83.19665,-83.194959,-83.181894,-83.187295,-83.192871,-83.199785,-83.205977,-83.215153,-83.235449,-83.236226,-83.246054,-83.254231,-83.255698,-83.255126,-83.257552,-83.250695,-83.255489,-83.251247,-83.243502,-83.24067,-83.219985,-83.214506,-83.203759,-83.198275,-83.185694,-83.177502,-83.170174,-83.167964,-83.16477,-83.164909,-83.159208,-83.150338,-83.141117,-83.136446,-83.127707,-83.120183,-83.117385,-83.110491,-83.104584,-83.097193,-83.094622,-83.089134,-83.087456,-83.085955,-83.085205,-83.080975,-83.078465,-83.07403,-83.072221,-83.063975,-83.052677,-83.044108,-83.036209,-83.024018,-83.020706,-83.016206,-83.011454,-83.006067,-83.001473,-82.995803,-82.98397,-82.969648,-82.960045,-82.959508,-82.956762,-82.957267,-82.955561,-82.951833,-82.952962,-82.952407,-82.949859,-82.952276,-82.950233,-82.953046,-82.952589,-82.953559,-82.955332,-82.956729,-82.955181,-82.957214,-82.953325,-82.952976,-82.950343,-82.947878,-82.945855,-82.942425,-82.936243,-82.926439,-82.923183,-82.917623,-82.915503,-82.907597,-82.908547,-82.90664,-82.910389,-82.907506,-82.904637,-82.901861,-82.89869,-82.900586,-82.898186,-82.898657,-82.901186,-82.893928,-82.889374,-82.883665,-82.887681,-82.87635,-82.877641,-82.872303,-82.874588,-82.87104,-82.868528,-82.869034,-82.865023,-82.854742,-82.852157,-82.85096,-82.852133,-82.850528,-82.851596,-82.845848,-82.84465,-82.836403,-82.832795,-82.830083,-82.826151,-82.819579,-82.814433,-82.811109,-82.809629,-82.809522,-82.803526,-82.801448,-82.798804,-82.784037,-82.780436,-82.780491,-82.77726,-82.779422,-82.770514,-82.769497,-82.765991,-82.771681,-82.777723,-82.771083,-82.766134,-82.76621,-82.768938,-82.774079,-82.780413,-82.778037,-82.7851,-82.782581,-82.786447,-82.785654,-82.793197,-82.797973,-82.800276,-82.794418,-82.79443,-82.789578,-82.785886,-82.784091,-82.781676,-82.768585,-82.765511,-82.75618,-82.74738,-82.744383,-82.746598,-82.749461,-82.746531,-82.745972,-82.750538,-82.75328,-82.759832,-82.764144,-82.774672,-82.777788,-82.782057,-82.782749,-82.787949,-82.791739,-82.795446,-82.797642,-82.797558,-82.801161,-82.804863,-82.814799,-82.813274,-82.816313,-82.823057,-82.825198,-82.825182,-82.828412,-82.832001,-82.846414,-82.85393,-82.858287,-82.861089,-82.867483,-82.871134,-82.876546,-82.885285,-82.902703,-82.91108,-82.914756,-82.917214,-82.921006,-82.927467,-82.931645,-82.932808,-82.935507,-82.940369,-82.949799,-82.951228,-82.954578,-82.954991,-82.964815,-82.9655,-82.963721,-82.965298,-82.964658,-82.971607,-82.977611,-82.977147,-82.986354,-82.987107,-82.989648,-82.990348],"lat":[35.367643,35.368616,35.372796,35.377325,35.379694,35.379187,35.383166,35.38535,35.387169,35.393628,35.394393,35.397827,35.406978,35.408281,35.415432,35.421214,35.423999,35.425493,35.425688,35.428737,35.42992,35.432354,35.434774,35.43704,35.441578,35.447898,35.448542,35.452278,35.458205,35.464457,35.464211,35.465586,35.463114,35.464149,35.472964,35.475716,35.479235,35.484677,35.489045,35.491395,35.493524,35.494364,35.496022,35.500101,35.501642,35.509156,35.509264,35.511364,35.514573,35.514869,35.517939,35.521609,35.528886,35.531052,35.533717,35.537372,35.538742,35.545019,35.548107,35.548449,35.553076,35.558753,35.562457,35.564664,35.568309,35.578749,35.580777,35.586377,35.589411,35.591147,35.596172,35.59891,35.606369,35.609228,35.612518,35.614846,35.618584,35.623094,35.626843,35.631385,35.636659,35.638079,35.639589,35.641192,35.640275,35.641099,35.639862,35.642929,35.649077,35.654537,35.660917,35.671127,35.672119,35.677784,35.68073,35.680581,35.691934,35.694145,35.695491,35.694645,35.695807,35.699101,35.701493,35.705409,35.709349,35.714974,35.719916,35.722532,35.726759,35.7266,35.724433,35.726552,35.725493,35.729888,35.743913,35.746106,35.751341,35.754618,35.759965,35.764892,35.764097,35.765938,35.765253,35.768093,35.766234,35.769904,35.770913,35.77423,35.776067,35.779463,35.781458,35.783655,35.783716,35.785794,35.787009,35.78956,35.790016,35.78831,35.786643,35.789548,35.785347,35.787405,35.783377,35.780408,35.781966,35.778872,35.778404,35.773752,35.773128,35.77801,35.789663,35.790844,35.787066,35.785118,35.782561,35.7827,35.779386,35.778337,35.776353,35.774385,35.770827,35.766028,35.762164,35.759154,35.758251,35.759241,35.757571,35.750499,35.747094,35.745826,35.742777,35.739755,35.739056,35.740687,35.740797,35.744881,35.745106,35.746804,35.744926,35.737577,35.727583,35.724993,35.720185,35.716233,35.714886,35.710024,35.708894,35.703667,35.695649,35.691055,35.68698,35.684964,35.681154,35.680797,35.67819,35.672808,35.66612,35.662283,35.657401,35.651425,35.646568,35.645161,35.641987,35.634518,35.636871,35.635927,35.632555,35.630321,35.62731,35.617084,35.614369,35.616693,35.621089,35.61955,35.61991,35.622908,35.624009,35.627747,35.626963,35.625105,35.618158,35.610679,35.602084,35.597292,35.59145,35.587129,35.584558,35.582297,35.578198,35.575497,35.571888,35.567516,35.56345,35.555789,35.550266,35.541152,35.53863,35.534293,35.531953,35.525503,35.520058,35.50737,35.504624,35.498141,35.49491,35.48449,35.472134,35.470536,35.4693,35.465134,35.459144,35.456843,35.444016,35.439306,35.432438,35.432274,35.425328,35.425333,35.423342,35.421113,35.413062,35.410512,35.407108,35.406553,35.403872,35.40184,35.397021,35.393468,35.388473,35.386762,35.383055,35.380942,35.366888,35.364954,35.361384,35.358706,35.35619,35.348233,35.344281,35.339017,35.334162,35.331475,35.327606,35.323817,35.323566,35.318434,35.318815,35.316654,35.317092,35.314559,35.315946,35.312353,35.314576,35.307983,35.305346,35.298548,35.297317,35.29202,35.291893,35.303011,35.30345,35.305526,35.303929,35.305618,35.306424,35.312927,35.313717,35.316264,35.315181,35.319894,35.32359,35.331071,35.333095,35.342768,35.343435,35.350757,35.356097,35.360982,35.36322,35.367643]}]],[[{"lng":[-78.760446,-78.809782,-78.83126,-78.837892,-78.844725,-78.850182,-78.857865,-78.861098,-78.87153,-78.868252,-78.866658,-78.854046,-78.846345,-78.846545,-78.843245,-78.850046,-78.855546,-78.853246,-78.850446,-78.854446,-78.853046,-78.855946,-78.854546,-78.859046,-78.858846,-78.854546,-78.857546,-78.855446,-78.855946,-78.853446,-78.858746,-78.856146,-78.856846,-78.846045,-78.842945,-78.842845,-78.839445,-78.834945,-78.835545,-78.839345,-78.840945,-78.836945,-78.833545,-78.831919,-78.832145,-78.834745,-78.832745,-78.833345,-78.829145,-78.830145,-78.828245,-78.830094,-78.828009,-78.826343,-78.821809,-78.82233,-78.819448,-78.818212,-78.815792,-78.812329,-78.815044,-78.820144,-78.819844,-78.815044,-78.813244,-78.807544,-78.809744,-78.805144,-78.807544,-78.805544,-78.806244,-78.813144,-78.818344,-78.821244,-78.821844,-78.831145,-78.832745,-78.837045,-78.838145,-78.841145,-78.839445,-78.845146,-78.843245,-78.848446,-78.854346,-78.857446,-78.856546,-78.863446,-78.863046,-78.864846,-78.863546,-78.866247,-78.865547,-78.874826,-78.879047,-78.882047,-78.884247,-78.883747,-78.886447,-78.883747,-78.888848,-78.892748,-78.897948,-78.900348,-78.898348,-78.901096,-78.843045,-78.800321,-78.53343,-78.515229,-78.505529,-78.49461,-78.49603,-78.495411,-78.492027,-78.493484,-78.489399,-78.490577,-78.488049,-78.487595,-78.482002,-78.465366,-78.466721,-78.46487,-78.462831,-78.461923,-78.45998,-78.45881,-78.458005,-78.459452,-78.453856,-78.451779,-78.448837,-78.447741,-78.449386,-78.440998,-78.444647,-78.437315,-78.439195,-78.438554,-78.429754,-78.428251,-78.430085,-78.423513,-78.424289,-78.418432,-78.414035,-78.414117,-78.410148,-78.409071,-78.405908,-78.407529,-78.403527,-78.403686,-78.40039,-78.400566,-78.390956,-78.392018,-78.390155,-78.393141,-78.393074,-78.38764,-78.390373,-78.39084,-78.392723,-78.392009,-78.383714,-78.382679,-78.379469,-78.379541,-78.382222,-78.376115,-78.377736,-78.376315,-78.377312,-78.36843,-78.371573,-78.369176,-78.374192,-78.373061,-78.366607,-78.365368,-78.361865,-78.360489,-78.362776,-78.361798,-78.35837,-78.355017,-78.349637,-78.350392,-78.348807,-78.346865,-78.346192,-78.344426,-78.34754,-78.346955,-78.345064,-78.3445,-78.342256,-78.33842,-78.330877,-78.327798,-78.327836,-78.325469,-78.32357,-78.326112,-78.327231,-78.325605,-78.326531,-78.321891,-78.324825,-78.322818,-78.320906,-78.318196,-78.319144,-78.31427,-78.312896,-78.313578,-78.311458,-78.317059,-78.314094,-78.322861,-78.319691,-78.316624,-78.317311,-78.313284,-78.314414,-78.311112,-78.312831,-78.310717,-78.306616,-78.304439,-78.306288,-78.303853,-78.303509,-78.305028,-78.302774,-78.303249,-78.298284,-78.294464,-78.290982,-78.292427,-78.288742,-78.2871,-78.279736,-78.28031,-78.274755,-78.27494,-78.273448,-78.271013,-78.266117,-78.26489,-78.262568,-78.263868,-78.260582,-78.262101,-78.257784,-78.254864,-78.254561,-78.251855,-78.260133,-78.257042,-78.254456,-78.260232,-78.272221,-78.27011,-78.269925,-78.263125,-78.265549,-78.263312,-78.264161,-78.254456,-78.256531,-78.255953,-78.25258,-78.251421,-78.254959,-78.255404,-78.245503,-78.243093,-78.240707,-78.235676,-78.223432,-78.222784,-78.217428,-78.212341,-78.211981,-78.207366,-78.208444,-78.203825,-78.190574,-78.189483,-78.186045,-78.182113,-78.17997,-78.176496,-78.256344,-78.337248,-78.365228,-78.397993,-78.40723,-78.445871,-78.575059,-78.581311,-78.598074,-78.603061,-78.613215,-78.622977,-78.628178,-78.646856,-78.649068,-78.648522,-78.656721,-78.651984,-78.663225,-78.666654,-78.666141,-78.667655,-78.760446],"lat":[34.464792,34.461579,34.462434,34.46758,34.46866,34.473712,34.474419,34.483032,34.482668,34.484699,34.493924,34.501667,34.500867,34.503667,34.507367,34.513667,34.515167,34.517667,34.517767,34.521667,34.526667,34.530667,34.534367,34.537367,34.540967,34.547467,34.549467,34.552367,34.555067,34.557367,34.567867,34.570067,34.572567,34.575467,34.579967,34.588967,34.588967,34.593467,34.597567,34.596067,34.597367,34.598367,34.601867,34.609597,34.612367,34.614867,34.617367,34.622367,34.624367,34.627667,34.629467,34.632419,34.636995,34.639031,34.63861,34.641528,34.642031,34.650175,34.651853,34.651441,34.656467,34.656667,34.659567,34.665367,34.664767,34.667767,34.670167,34.674268,34.680567,34.687967,34.690567,34.696367,34.705267,34.706767,34.709367,34.714367,34.718567,34.716367,34.720767,34.718867,34.721967,34.723766,34.726466,34.732566,34.735866,34.751666,34.754566,34.760466,34.763166,34.763766,34.767466,34.770766,34.774966,34.785425,34.796265,34.798065,34.802465,34.806265,34.809865,34.812365,34.811465,34.814065,34.826165,34.828165,34.831665,34.834789,34.847366,34.850032,34.85127,34.84587,34.85257,34.856464,34.854945,34.852448,34.849229,34.84318,34.842737,34.841099,34.839371,34.836562,34.836935,34.8275,34.822519,34.820841,34.822563,34.821248,34.822186,34.820107,34.816826,34.812974,34.812491,34.814064,34.812628,34.810675,34.807694,34.80039,34.797673,34.792183,34.790643,34.785534,34.782279,34.780438,34.776378,34.773009,34.769847,34.765488,34.768202,34.766124,34.765572,34.761615,34.759687,34.757769,34.757246,34.754795,34.753177,34.751523,34.749725,34.748056,34.744855,34.743843,34.742175,34.737851,34.736727,34.733751,34.732721,34.729906,34.726573,34.72367,34.72342,34.720535,34.717422,34.712721,34.712444,34.711157,34.70976,34.704412,34.702416,34.700396,34.701132,34.698979,34.693176,34.695188,34.695603,34.693859,34.693423,34.691389,34.692991,34.690252,34.692374,34.689342,34.688434,34.690586,34.68419,34.683815,34.682256,34.680174,34.680503,34.678839,34.679871,34.674642,34.672632,34.670973,34.669051,34.669582,34.665584,34.665907,34.664236,34.663397,34.656039,34.65296,34.649912,34.648761,34.65,34.646847,34.645852,34.644974,34.643643,34.641438,34.640893,34.635729,34.633172,34.629568,34.627172,34.628348,34.626295,34.625826,34.618876,34.615709,34.614034,34.612025,34.613353,34.610901,34.608856,34.60725,34.603962,34.602729,34.602887,34.600779,34.599929,34.60194,34.600461,34.596987,34.598036,34.593215,34.591158,34.589073,34.584297,34.581546,34.583113,34.581238,34.58397,34.57904,34.578587,34.576655,34.57438,34.571273,34.568291,34.568642,34.56421,34.561925,34.556039,34.55593,34.553344,34.545435,34.537796,34.535557,34.531859,34.528847,34.526674,34.524829,34.520213,34.520049,34.51744,34.514098,34.513479,34.510823,34.511328,34.508261,34.499845,34.500667,34.499153,34.492637,34.490406,34.493097,34.487423,34.488677,34.486045,34.487808,34.486068,34.476351,34.472938,34.469362,34.46804,34.469657,34.466006,34.465264,34.399738,34.367089,34.372862,34.37127,34.374117,34.376679,34.429058,34.431285,34.432835,34.440226,34.443078,34.453377,34.451657,34.458808,34.458328,34.454325,34.45048,34.457964,34.460938,34.463621,34.468102,34.469575,34.464792]}]],[[{"lng":[-83.926828,-83.925669,-83.926109,-83.922525,-83.916442,-83.911547,-83.908099,-83.905257,-83.905338,-83.895897,-83.893686,-83.887427,-83.88322,-83.876537,-83.874694,-83.863878,-83.863628,-83.865443,-83.862758,-83.857642,-83.857142,-83.855407,-83.849706,-83.845532,-83.841105,-83.835912,-83.834593,-83.832991,-83.823805,-83.820185,-83.812549,-83.80813,-83.806658,-83.797188,-83.794779,-83.791723,-83.787021,-83.784186,-83.780441,-83.778242,-83.776184,-83.773102,-83.767838,-83.765542,-83.75576,-83.752756,-83.749895,-83.74807,-83.745839,-83.74079,-83.739873,-83.738106,-83.73599,-83.73382,-83.732328,-83.730941,-83.726788,-83.720641,-83.714579,-83.710094,-83.708331,-83.699634,-83.694487,-83.686981,-83.685712,-83.684297,-83.683406,-83.680263,-83.678167,-83.673565,-83.669501,-83.667866,-83.665854,-83.659415,-83.658553,-83.659022,-83.653425,-83.65221,-83.647489,-83.64742,-83.649424,-83.644911,-83.647974,-83.649544,-83.657754,-83.657933,-83.655328,-83.654542,-83.649095,-83.643332,-83.642256,-83.640177,-83.637169,-83.637736,-83.644264,-83.640397,-83.63766,-83.637344,-83.634951,-83.632445,-83.625108,-83.624985,-83.627229,-83.626849,-83.623665,-83.619182,-83.620091,-83.618887,-83.616848,-83.616722,-83.614623,-83.618705,-83.617786,-83.610961,-83.604438,-83.600418,-83.596421,-83.594273,-83.591428,-83.586959,-83.583886,-83.584992,-83.579376,-83.574765,-83.567012,-83.568001,-83.563528,-83.562226,-83.563917,-83.565974,-83.566663,-83.56303,-83.558124,-83.547707,-83.538592,-83.536408,-83.531256,-83.521315,-83.521793,-83.52699,-83.524185,-83.521981,-83.522479,-83.520679,-83.517379,-83.516766,-83.513498,-83.510434,-83.508433,-83.507017,-83.504506,-83.499571,-83.498422,-83.493378,-83.487778,-83.486174,-83.482779,-83.620185,-83.619985,-83.749894,-84.005403,-84.005632,-84.003342,-84.004496,-84.003982,-83.998506,-83.983989,-83.97977,-83.971262,-83.972281,-83.971225,-83.967376,-83.964392,-83.964886,-83.962495,-83.958919,-83.956792,-83.956363,-83.957619,-83.960492,-83.960044,-83.958425,-83.958494,-83.95957,-83.959509,-83.966085,-83.965273,-83.962879,-83.964063,-83.961018,-83.958583,-83.956499,-83.94882,-83.94374,-83.93465,-83.933858,-83.931169,-83.926828],"lat":[35.067013,35.068328,35.070273,35.07411,35.074482,35.077387,35.077937,35.083201,35.086851,35.091672,35.094779,35.099455,35.10599,35.110036,35.113814,35.120013,35.122924,35.127363,35.132602,35.135637,35.137071,35.138144,35.140757,35.141174,35.143857,35.142534,35.142964,35.140601,35.140251,35.138613,35.141279,35.141499,35.144033,35.144972,35.148042,35.14718,35.148447,35.147957,35.149874,35.149952,35.153152,35.155621,35.157095,35.155493,35.157226,35.160776,35.161132,35.160303,35.160629,35.158151,35.156004,35.155911,35.154383,35.151088,35.150633,35.148363,35.145153,35.151421,35.155294,35.154792,35.153449,35.152508,35.155933,35.154147,35.157305,35.157777,35.156839,35.156855,35.155535,35.157079,35.154254,35.150531,35.150082,35.154387,35.157171,35.159658,35.156951,35.153915,35.153014,35.150869,35.148149,35.144853,35.142733,35.140382,35.140051,35.139422,35.137834,35.135614,35.134937,35.137469,35.138788,35.138363,35.134473,35.132944,35.132289,35.130437,35.126193,35.123652,35.121257,35.125108,35.125083,35.126947,35.129621,35.131152,35.12856,35.12822,35.125919,35.119457,35.119212,35.115753,35.11318,35.108592,35.105646,35.101993,35.101361,35.099333,35.094296,35.094416,35.092249,35.091658,35.087109,35.081562,35.074454,35.071519,35.071031,35.066828,35.062362,35.059495,35.058225,35.054401,35.050872,35.048051,35.038946,35.039547,35.036213,35.032176,35.026449,35.018216,35.013423,35.009154,35.007301,35.003644,34.998792,34.996392,34.997792,35.001807,35.004487,35.005217,35.004282,35.001697,35.000696,35.001381,35.000261,34.998792,34.998792,34.997922,34.993256,34.992091,34.986592,34.987691,34.987218,34.989449,34.99127,34.994409,34.995091,34.996184,35.004874,35.005711,35.012165,35.014302,35.015355,35.018145,35.01855,35.019163,35.020309,35.024673,35.025939,35.026659,35.028844,35.03085,35.033335,35.035663,35.038806,35.038983,35.040388,35.043982,35.045399,35.045923,35.048133,35.049107,35.05277,35.054299,35.053836,35.055905,35.065756,35.068759,35.069378,35.067013]}]],[[{"lng":[-76.164175,-76.313225,-75.797497,-75.790558,-75.749635,-75.709078,-75.813189,-75.79943,-75.798782,-75.801702,-75.801696,-75.789075,-75.79062,-75.789363,-75.778659,-75.776439,-75.773549,-75.774944,-75.77425,-75.765493,-75.763192,-75.763783,-75.767448,-75.780409,-75.840123,-75.865203,-75.876688,-75.885064,-75.896688,-75.904001,-75.906295,-75.896711,-75.887585,-75.887984,-75.891781,-75.897634,-75.90397,-75.918964,-75.926584,-75.92956,-75.929635,-75.931927,-75.934512,-75.94249,-75.95287,-75.961536,-75.963233,-75.963743,-75.962265,-75.951666,-75.94898,-75.950453,-75.948309,-75.948777,-75.955356,-75.961469,-75.966631,-75.969743,-75.969625,-75.973111,-75.976752,-75.990608,-75.999651,-76.001872,-76.001286,-76.002361,-76.007914,-76.013294,-76.01639,-76.020427,-76.016927,-76.016811,-76.019586,-76.022847,-76.025478,-76.031674,-76.033446,-76.028683,-76.028423,-76.036413,-76.041775,-76.04603,-76.049261,-76.05038,-76.053563,-76.055997,-76.055556,-76.058179,-76.059209,-76.064711,-76.06282,-76.063689,-76.068928,-76.068266,-76.071876,-76.073918,-76.075991,-76.074875,-76.078284,-76.079893,-76.08145,-76.082698,-76.083966,-76.084887,-76.086427,-76.090549,-76.09321,-76.093174,-76.096873,-76.097731,-76.099161,-76.099225,-76.106653,-76.114444,-76.122055,-76.147432,-76.157405,-76.158583,-76.164175],"lat":[36.430899,36.550574,36.550916,36.500156,36.353606,36.244984,36.223544,36.202218,36.199968,36.192204,36.187985,36.172206,36.160104,36.154436,36.142324,36.135727,36.116637,36.110404,36.103245,36.083812,36.074594,36.062792,36.055639,36.047423,36.028885,36.036332,36.042611,36.049373,36.064619,36.078284,36.085877,36.125163,36.150016,36.163311,36.171952,36.179213,36.184193,36.192418,36.200393,36.207235,36.219963,36.232114,36.237939,36.243027,36.253197,36.256614,36.258471,36.26396,36.267165,36.271491,36.274036,36.279844,36.2839,36.285851,36.289379,36.287436,36.289557,36.295706,36.306312,36.309773,36.310329,36.308287,36.311174,36.315127,36.321717,36.324206,36.328648,36.326842,36.327256,36.332802,36.338213,36.344451,36.34589,36.345194,36.340574,36.338597,36.341312,36.34408,36.348202,36.355174,36.355386,36.358346,36.356448,36.359516,36.360162,36.35819,36.355359,36.354549,36.352001,36.351297,36.349175,36.347451,36.34787,36.349526,36.349971,36.346124,36.346844,36.3486,36.347064,36.34888,36.348104,36.350458,36.349597,36.352132,36.349665,36.352124,36.35074,36.351644,36.351994,36.353522,36.352751,36.353878,36.354531,36.357636,36.371333,36.39448,36.398234,36.426347,36.430899]}]],[[{"lng":[-79.519163,-79.518568,-79.519621,-79.518309,-79.518021,-79.516072,-79.515684,-79.511542,-79.510967,-79.137936,-79.146582,-79.153733,-79.222383,-79.531954,-79.527944,-79.528449,-79.525265,-79.52425,-79.521765,-79.520939,-79.521423,-79.518611,-79.519163],"lat":[36.452318,36.459754,36.466111,36.470515,36.482061,36.490614,36.502578,36.531489,36.540783,36.541739,36.388245,36.242117,36.242862,36.250044,36.322557,36.324008,36.353991,36.39912,36.429826,36.43235,36.441915,36.448442,36.452318]}]],[[{"lng":[-77.209035,-77.329181,-77.448753,-77.473716,-77.473174,-77.465475,-77.464166,-77.432944,-77.425657,-77.429159,-77.437435,-77.440366,-77.439975,-77.446425,-77.446364,-77.449636,-77.448296,-77.440228,-77.438832,-77.431376,-77.431264,-77.422885,-77.421097,-77.414505,-77.41308,-77.414113,-77.409811,-77.411563,-77.410359,-77.395196,-77.392869,-77.383581,-77.365484,-77.353981,-77.295214,-77.279741,-77.270495,-77.268249,-77.27052,-77.267924,-77.256445,-77.237649,-77.235995,-77.24038,-77.235255,-77.23739,-77.231607,-77.227833,-77.221514,-77.218836,-77.21768,-77.200373,-77.197709,-77.1969,-77.194385,-77.194196,-77.190423,-76.95883,-76.895546,-76.902287,-76.901653,-76.905252,-76.911649,-76.919645,-76.931848,-76.9436,-76.942012,-76.944991,-76.950722,-76.961887,-76.965916,-76.971229,-76.968844,-76.970869,-76.970111,-76.976404,-76.981415,-76.986835,-76.987642,-76.984082,-76.97799,-76.975961,-76.968948,-76.959425,-76.949071,-76.946364,-76.943763,-76.942009,-76.937837,-76.9367,-76.934685,-76.937543,-76.940309,-76.937174,-76.938962,-76.935168,-76.9379,-76.94105,-76.946239,-76.967297,-76.949213,-76.901313,-76.842011,-76.814764,-76.780586,-76.761992,-76.711278,-76.65421,-76.65305,-76.665275,-76.67264,-76.685774,-76.686788,-76.69162,-76.693085,-76.757875,-76.766486,-76.769608,-76.883033,-76.881761,-76.956382,-76.956031,-77.090323,-77.089318,-77.084544,-77.079214,-77.06725,-77.05237,-77.054815,-77.049449,-77.049649,-77.111531,-77.102999,-77.099095,-77.106801,-77.107193,-77.109667,-77.108342,-77.109354,-77.11378,-77.124673,-77.130224,-77.132842,-77.136868,-77.144852,-77.146964,-77.154539,-77.15966,-77.164622,-77.169204,-77.172452,-77.177526,-77.179971,-77.189347,-77.19077,-77.188023,-77.209035],"lat":[35.091459,35.14951,35.217156,35.228983,35.23098,35.234897,35.238995,35.250163,35.258956,35.271031,35.276925,35.284502,35.289881,35.293749,35.296287,35.299929,35.302264,35.304096,35.311581,35.313114,35.329824,35.328953,35.331333,35.330691,35.331607,35.333714,35.331745,35.337997,35.339207,35.343637,35.340464,35.33536,35.333651,35.327988,35.379351,35.375549,35.369816,35.365501,35.359806,35.354884,35.350331,35.361732,35.379624,35.38213,35.384398,35.391541,35.393432,35.399565,35.39713,35.398597,35.401897,35.401325,35.404904,35.410288,35.409572,35.416301,35.418955,35.3009,35.253532,35.246626,35.242675,35.236824,35.234638,35.235072,35.230528,35.222378,35.214059,35.209542,35.208629,35.200714,35.182041,35.178638,35.172253,35.166368,35.162175,35.156019,35.15472,35.155861,35.15457,35.143951,35.138381,35.133818,35.129531,35.127638,35.123784,35.120893,35.121157,35.115437,35.114049,35.107931,35.107054,35.103248,35.103071,35.101388,35.088556,35.080678,35.077046,35.064499,35.058079,35.040655,35.017459,34.984097,34.960403,34.951551,34.950434,34.953833,34.981971,34.937088,34.932814,34.909406,34.903279,34.896242,34.889418,34.881631,34.869219,34.84639,34.848429,34.846921,34.844818,34.836035,34.826394,34.810802,34.802755,34.808941,34.810911,34.810362,34.82156,34.818972,34.824282,34.833844,34.835031,34.831257,35.019555,35.026623,35.034999,35.042324,35.045504,35.054357,35.067399,35.074169,35.077742,35.074006,35.067451,35.063518,35.060687,35.05707,35.062783,35.062636,35.065716,35.060529,35.060819,35.056232,35.060411,35.066191,35.076576,35.081376,35.091459]}]],[[{"lng":[-83.804462,-83.80458,-83.802535,-83.800031,-83.795225,-83.786258,-83.776425,-83.767553,-83.756958,-83.754633,-83.749023,-83.733963,-83.721806,-83.717155,-83.712931,-83.707699,-83.703099,-83.699978,-83.684035,-83.674789,-83.668499,-83.664623,-83.657763,-83.653977,-83.651572,-83.648664,-83.646118,-83.645198,-83.644299,-83.641347,-83.637805,-83.632695,-83.623848,-83.617495,-83.614128,-83.609884,-83.601993,-83.594143,-83.587949,-83.585544,-83.585558,-83.587127,-83.586998,-83.588584,-83.587494,-83.589003,-83.584952,-83.585591,-83.584158,-83.585123,-83.582313,-83.582942,-83.585046,-83.585975,-83.586797,-83.585979,-83.588201,-83.593064,-83.595287,-83.593083,-83.593994,-83.597549,-83.601023,-83.602018,-83.606885,-83.61136,-83.613686,-83.617036,-83.620797,-83.624889,-83.639608,-83.64321,-83.659835,-83.667657,-83.670279,-83.678482,-83.680695,-83.684744,-83.687834,-83.689847,-83.690216,-83.691895,-83.691365,-83.692214,-83.694109,-83.695249,-83.690641,-83.689928,-83.686255,-83.682328,-83.681934,-83.680043,-83.683552,-83.684448,-83.686737,-83.690005,-83.691764,-83.694698,-83.700556,-83.702521,-83.704314,-83.70309,-83.707876,-83.708492,-83.713182,-83.718499,-83.722674,-83.726819,-83.734253,-83.745519,-83.749896,-83.754291,-83.756864,-83.759935,-83.762079,-83.767337,-83.773499,-83.781787,-83.787848,-83.789781,-83.795233,-83.800404,-83.802707,-83.806847,-83.810323,-83.813376,-83.822493,-83.82525,-83.82682,-83.830609,-83.840844,-83.844709,-83.848243,-83.851281,-83.855247,-83.860386,-83.862232,-83.864778,-83.867648,-83.869405,-83.873872,-83.876125,-83.87985,-83.883089,-83.888132,-83.893079,-83.893569,-83.901258,-83.903449,-83.906353,-83.906968,-83.909094,-83.919656,-83.925209,-83.934297,-83.937912,-83.943648,-83.942863,-83.944185,-83.950316,-83.954327,-83.957402,-83.957075,-83.958805,-83.965029,-83.968174,-83.976089,-83.977631,-83.977553,-83.986124,-83.988902,-83.991282,-83.99657,-84.002071,-84.003958,-84.003881,-84.006549,-84.001051,-84.00086,-84.00221,-84.00171,-84.00561,-84.01021,-84.01101,-84.01011,-84.01141,-84.01041,-84.01101,-84.00951,-84.01641,-84.01591,-84.02001,-84.02261,-84.02521,-84.02911,-84.02901,-84.02351,-84.02341,-84.02141,-84.02621,-84.02651,-84.03501,-84.03581,-84.03551,-84.03391,-84.03451,-84.032598,-84.03241,-84.029377,-84.031272,-84.036194,-84.035572,-84.033975,-84.038327,-84.037494,-84.031404,-84.023456,-84.022954,-84.020188,-84.015121,-84.0074,-84.008701,-84.008307,-84.011207,-84.008207,-84.012707,-84.014107,-84.018807,-84.021507,-84.021207,-84.022807,-84.023307,-84.021207,-84.017607,-84.014707,-84.005306,-84.001298,-83.999279,-83.999744,-83.998236,-83.99931,-83.998748,-83.999849,-83.996796,-83.996287,-83.99463,-83.994537,-83.992961,-83.992131,-83.99095,-83.988929,-83.98795,-83.983783,-83.982216,-83.979862,-83.97613,-83.974835,-83.972459,-83.973227,-83.971166,-83.971919,-83.971007,-83.964523,-83.965751,-83.96353,-83.963114,-83.961184,-83.961052,-83.955104,-83.952664,-83.953363,-83.948096,-83.94574,-83.93699,-83.927958,-83.914834,-83.912301,-83.908451,-83.901571,-83.896103,-83.884469,-83.878847,-83.8749,-83.870743,-83.868057,-83.86734,-83.865722,-83.844577,-83.837066,-83.831651,-83.819334,-83.817849,-83.815922,-83.80823,-83.806302,-83.804462],"lat":[35.450973,35.454184,35.455636,35.455651,35.452115,35.449518,35.443861,35.44367,35.441655,35.44276,35.442642,35.44727,35.443001,35.442359,35.442092,35.443718,35.443195,35.441728,35.438912,35.435582,35.435269,35.431128,35.432252,35.427094,35.426413,35.427057,35.428884,35.431026,35.442159,35.44365,35.442281,35.442032,35.436784,35.435601,35.429548,35.42695,35.43064,35.431826,35.435179,35.434867,35.424813,35.424243,35.423291,35.421858,35.421103,35.419043,35.418107,35.417197,35.415836,35.413203,35.409357,35.40751,35.406468,35.402422,35.401956,35.400945,35.398174,35.382792,35.381045,35.37751,35.375419,35.371432,35.370581,35.368248,35.36459,35.358564,35.357348,35.34935,35.345213,35.344804,35.338637,35.339508,35.335599,35.331361,35.328788,35.328495,35.325777,35.324077,35.318912,35.318114,35.314953,35.312668,35.310256,35.307452,35.307217,35.297654,35.294572,35.29205,35.290193,35.285275,35.280694,35.279414,35.276808,35.273072,35.271173,35.26504,35.26369,35.257329,35.252172,35.248398,35.249376,35.251528,35.255406,35.257586,35.257524,35.253246,35.252962,35.248975,35.245007,35.245127,35.243048,35.243482,35.242511,35.247021,35.248056,35.248164,35.245759,35.252038,35.252892,35.255558,35.257392,35.254624,35.254559,35.252666,35.252528,35.254684,35.250195,35.251042,35.253733,35.255911,35.254425,35.255408,35.25338,35.249167,35.248337,35.24861,35.247319,35.247419,35.245979,35.243316,35.243996,35.242727,35.238299,35.237617,35.234801,35.234522,35.233282,35.238547,35.235358,35.234696,35.233611,35.233694,35.228855,35.228216,35.222993,35.222159,35.222563,35.220746,35.219925,35.220882,35.219825,35.220368,35.218175,35.216929,35.21837,35.218041,35.221234,35.223963,35.225562,35.230692,35.229826,35.23164,35.231731,35.233704,35.236487,35.239666,35.241804,35.248676,35.250084,35.250984,35.252684,35.252984,35.255783,35.257283,35.260483,35.262883,35.266083,35.267383,35.272983,35.276083,35.277983,35.281683,35.287183,35.287883,35.291183,35.292283,35.295783,35.298883,35.301383,35.306283,35.309283,35.311983,35.313283,35.317783,35.320383,35.322383,35.324497,35.328083,35.333197,35.336437,35.337674,35.341486,35.342771,35.347813,35.34985,35.353052,35.354217,35.356217,35.357503,35.364868,35.371643,35.372465,35.378883,35.384383,35.390383,35.392283,35.397783,35.399783,35.404183,35.406684,35.408784,35.411484,35.412084,35.411184,35.411984,35.420884,35.423314,35.42636,35.428431,35.43071,35.431283,35.432407,35.433671,35.433781,35.435173,35.435105,35.436694,35.43777,35.440402,35.440649,35.439305,35.440974,35.440586,35.444937,35.448161,35.446971,35.447931,35.447418,35.452953,35.453119,35.45431,35.45554,35.454334,35.456145,35.456738,35.45854,35.459775,35.464228,35.463606,35.460743,35.460315,35.45594,35.451667,35.448429,35.450601,35.464342,35.466091,35.466558,35.464522,35.46176,35.463336,35.46258,35.460898,35.458317,35.455198,35.450926,35.448163,35.453171,35.448635,35.450982,35.450316,35.449679,35.446326,35.444057,35.445701,35.450973]}]],[[{"lng":[-76.250645,-76.256536,-76.260214,-76.25738,-76.256699,-76.259213,-76.257341,-76.259349,-76.271721,-76.279821,-76.284493,-76.286872,-76.288713,-76.291969,-76.299755,-76.30185,-76.310601,-76.310262,-76.314453,-76.314765,-76.323094,-76.323095,-76.320149,-76.322036,-76.328984,-76.333096,-76.339188,-76.341368,-76.346155,-76.348649,-76.347631,-76.357744,-76.367296,-76.369169,-76.367897,-76.372119,-76.371497,-76.375562,-76.377231,-76.387376,-76.394428,-76.398509,-76.406757,-76.414691,-76.421323,-76.42325,-76.437227,-76.541599,-76.313225,-76.158583,-76.157405,-76.147432,-76.122055,-76.114444,-76.106653,-76.099225,-76.099161,-76.097731,-76.096873,-76.093174,-76.09321,-76.090549,-76.086427,-76.084887,-76.083966,-76.082698,-76.08145,-76.079893,-76.078284,-76.074875,-76.075991,-76.073918,-76.071876,-76.068266,-76.068928,-76.063689,-76.06282,-76.064711,-76.059209,-76.058379,-76.055399,-76.055708,-76.051925,-76.050195,-76.049261,-76.04603,-76.041775,-76.037109,-76.0324,-76.028796,-76.028458,-76.033446,-76.031674,-76.024908,-76.023282,-76.019796,-76.017518,-76.016927,-76.020427,-76.01639,-76.013294,-76.007914,-76.002361,-76.001286,-76.001872,-75.999651,-75.990608,-75.976752,-75.973111,-75.969625,-75.969743,-75.966631,-75.961469,-75.955356,-75.948669,-75.948309,-75.950453,-75.94898,-75.951666,-75.962265,-75.963743,-75.963233,-75.961536,-75.95287,-75.94249,-75.934512,-75.931927,-75.929635,-75.92956,-75.926374,-75.918964,-75.898793,-75.89279,-75.889459,-75.887281,-75.887415,-75.896711,-75.906295,-75.950459,-76.00352,-76.019837,-76.019147,-76.028224,-76.031703,-76.045077,-76.067728,-76.070297,-76.090939,-76.09812,-76.101883,-76.106678,-76.120728,-76.137603,-76.146981,-76.165027,-76.172197,-76.176872,-76.179314,-76.197654,-76.20457,-76.217074,-76.217046,-76.212225,-76.203953,-76.201225,-76.201161,-76.199767,-76.197042,-76.192357,-76.188428,-76.183139,-76.18164,-76.191352,-76.216114,-76.218257,-76.214525,-76.216986,-76.225209,-76.227631,-76.226232,-76.231372,-76.231705,-76.236477,-76.243436,-76.250645],"lat":[36.363619,36.3631,36.366467,36.369969,36.373014,36.376619,36.38193,36.384472,36.388026,36.386403,36.388991,36.385306,36.385169,36.386864,36.394672,36.400556,36.402045,36.405731,36.408341,36.410722,36.417224,36.419972,36.422559,36.427362,36.423789,36.425442,36.424435,36.421824,36.42157,36.423401,36.428025,36.426441,36.431199,36.435068,36.439968,36.439577,36.441615,36.442119,36.445898,36.447207,36.454468,36.455453,36.454013,36.46038,36.461914,36.464616,36.467893,36.550475,36.550574,36.426347,36.398234,36.39448,36.371333,36.357636,36.354531,36.353878,36.352751,36.353522,36.351994,36.351644,36.35074,36.352124,36.349665,36.352132,36.349597,36.350458,36.348104,36.34888,36.347064,36.3486,36.346844,36.346124,36.349971,36.349526,36.34787,36.347451,36.349175,36.351297,36.352001,36.354361,36.355613,36.358634,36.360261,36.3593,36.356448,36.358346,36.355386,36.355425,36.350575,36.34913,36.344437,36.341312,36.338597,36.341008,36.344997,36.345909,36.345068,36.338213,36.332802,36.327256,36.326842,36.328648,36.324206,36.321717,36.315127,36.311174,36.308287,36.310329,36.309773,36.306312,36.295706,36.289557,36.287436,36.289379,36.285702,36.2839,36.279844,36.274036,36.271491,36.267165,36.26396,36.258471,36.256614,36.253197,36.243027,36.237939,36.232114,36.219963,36.207235,36.200058,36.192418,36.180291,36.173507,36.167521,36.159199,36.150802,36.125163,36.085877,36.087958,36.086999,36.088202,36.097625,36.15595,36.163416,36.179395,36.215336,36.217741,36.22359,36.227186,36.231125,36.241844,36.260129,36.273326,36.276463,36.277348,36.282713,36.291363,36.292954,36.291301,36.296818,36.298409,36.301512,36.304648,36.304144,36.305155,36.314045,36.317968,36.317875,36.314369,36.31458,36.317102,36.322604,36.328102,36.327634,36.333569,36.341841,36.344206,36.346491,36.348824,36.355286,36.361605,36.372148,36.372397,36.366052,36.363619]}]],[[{"lng":[-79.695323,-79.532365,-79.536488,-79.539045,-79.539643,-79.541978,-80.046709,-80.038364,-80.037443,-80.037029,-80.037803,-80.03554,-79.695323],"lat":[36.245933,36.241342,36.162553,36.082835,36.003036,35.899627,35.920663,36.15936,36.161535,36.173671,36.176286,36.257351,36.245933]}]],[[{"lng":[-78.969345,-78.913296,-78.708629,-78.689512,-78.688048,-78.687834,-78.686651,-78.672883,-78.660555,-78.655698,-78.653406,-78.650307,-78.64982,-78.638948,-78.62695,-78.621353,-78.619454,-78.614594,-78.614768,-78.606937,-78.609378,-78.59905,-78.596516,-78.597314,-78.595957,-78.591715,-78.585132,-78.582998,-78.57592,-78.573263,-78.571499,-78.572156,-78.569546,-78.569265,-78.567052,-78.562954,-78.562197,-78.55071,-78.548954,-78.545729,-78.541465,-78.532823,-78.533542,-78.530622,-78.529906,-78.532482,-78.532926,-78.535816,-78.535837,-78.537621,-78.535577,-78.537488,-78.538621,-78.541973,-78.544903,-78.555291,-78.557644,-78.559956,-78.557637,-78.564158,-78.570229,-78.572621,-78.576528,-78.581011,-78.58341,-78.58294,-78.585305,-78.583228,-78.585591,-78.583105,-78.584604,-78.593337,-78.598702,-78.599733,-78.598687,-78.599885,-78.602939,-78.609212,-78.610818,-78.617079,-78.70484,-78.707779,-78.71194,-78.713388,-78.718906,-78.720182,-78.725724,-78.730282,-78.735978,-78.741261,-78.748254,-78.750191,-78.750111,-78.754028,-78.754606,-78.757619,-78.758149,-78.759447,-78.760615,-78.759774,-78.762995,-78.761003,-78.763853,-78.764191,-78.765666,-78.769751,-78.77101,-78.778446,-78.781867,-78.783626,-78.782451,-78.786712,-78.794466,-78.797813,-78.798787,-78.801449,-78.805639,-78.80878,-78.811142,-78.815496,-78.819486,-78.825606,-78.828283,-78.832607,-78.834372,-78.838799,-78.842174,-78.847434,-78.848106,-78.854531,-78.859654,-78.867803,-78.875992,-78.876203,-78.873984,-78.875669,-78.880625,-78.888605,-78.893155,-78.898144,-78.905318,-78.911215,-78.913675,-78.916602,-78.920042,-78.921368,-78.922312,-78.924894,-78.925742,-78.929338,-78.935802,-78.941859,-78.977641,-78.998952,-79.010744,-79.022765,-79.077775,-79.09613,-79.101242,-79.120529,-79.130809,-79.134956,-79.137894,-79.150422,-79.15435,-79.153903,-79.159175,-79.165016,-79.171384,-79.17868,-79.186891,-79.193544,-79.202523,-79.223065,-78.969345],"lat":[35.521895,35.583064,35.519081,35.516105,35.513709,35.504149,35.501813,35.495739,35.496245,35.490315,35.48401,35.482622,35.471658,35.461813,35.457981,35.450504,35.44506,35.441985,35.439955,35.432245,35.426748,35.418262,35.409877,35.40691,35.402741,35.397793,35.39608,35.39374,35.390258,35.385572,35.385177,35.383123,35.376162,35.370812,35.367192,35.366785,35.361121,35.356248,35.353122,35.353286,35.351461,35.342623,35.340645,35.337604,35.335121,35.331721,35.328188,35.326761,35.324426,35.321851,35.319366,35.318642,35.315879,35.314848,35.312349,35.309664,35.307043,35.30628,35.304742,35.304478,35.302127,35.297573,35.295946,35.298231,35.296934,35.295467,35.293539,35.291001,35.284573,35.279151,35.27329,35.267212,35.264969,35.263496,35.261332,35.258634,35.25826,35.254187,35.251093,35.245706,35.256898,35.259138,35.25754,35.259695,35.259985,35.264663,35.266884,35.263232,35.261757,35.263926,35.26276,35.263421,35.261656,35.259661,35.263538,35.263491,35.261897,35.261667,35.26207,35.263922,35.263164,35.261049,35.26129,35.258634,35.258218,35.259451,35.262119,35.263573,35.260934,35.262482,35.263722,35.263555,35.26613,35.264722,35.261997,35.262824,35.25682,35.258536,35.257495,35.260151,35.260484,35.259423,35.255253,35.255353,35.252546,35.25397,35.252527,35.252884,35.250249,35.248353,35.242627,35.245076,35.241537,35.239355,35.23597,35.233571,35.230391,35.230769,35.228652,35.231086,35.226981,35.226315,35.224057,35.223755,35.220398,35.220636,35.223204,35.223881,35.221741,35.222402,35.218636,35.219211,35.211776,35.214065,35.210252,35.208941,35.19556,35.192181,35.196761,35.204839,35.207036,35.206779,35.211405,35.213266,35.220426,35.229365,35.233007,35.240924,35.243232,35.247787,35.247339,35.250129,35.258181,35.268134,35.521895]}]],[[{"lng":[-77.511621,-77.507387,-77.506041,-77.511105,-77.505674,-77.506849,-77.505309,-77.503457,-77.507041,-77.510286,-77.512611,-77.518013,-77.518854,-77.521906,-77.525041,-77.522379,-77.522798,-77.52529,-77.525121,-77.53002,-77.530664,-77.534528,-77.535367,-77.538083,-77.543234,-77.557795,-77.565747,-77.570481,-77.581544,-77.591435,-77.599755,-77.610091,-77.621392,-77.628485,-77.6622,-77.676796,-77.682486,-77.680579,-77.683354,-77.690055,-77.700502,-77.678553,-77.596965,-77.538364,-77.516296,-77.472313,-77.452017,-77.448465,-77.445067,-77.440852,-77.424817,-77.417634,-77.413896,-77.413834,-77.412188,-77.409907,-77.397072,-77.391593,-77.390227,-77.255209,-77.255251,-77.264849,-77.264528,-77.259888,-77.255647,-77.253014,-77.24667,-77.23867,-77.229024,-77.222978,-77.215348,-77.201365,-77.203842,-77.202396,-77.192241,-77.192671,-77.189079,-77.184443,-77.18261,-77.178702,-77.173964,-77.173341,-77.174964,-77.173815,-77.174874,-77.171344,-77.170557,-77.174066,-77.18498,-77.187728,-77.187273,-77.193885,-77.19513,-77.193574,-77.195406,-77.192778,-77.190064,-77.187559,-77.181,-77.179666,-77.177027,-77.175636,-77.173336,-77.169889,-77.169514,-77.172446,-77.167231,-77.168121,-77.172503,-77.177479,-77.180717,-77.174652,-77.17277,-77.173996,-77.167765,-77.164757,-77.162872,-77.16181,-77.159306,-77.157101,-77.155311,-77.152612,-77.148158,-77.143444,-77.142405,-77.144401,-77.145615,-77.14013,-77.142031,-77.146964,-77.146377,-77.148266,-77.15062,-77.143968,-77.144221,-77.142751,-77.13887,-77.138956,-77.136014,-77.136918,-77.134655,-77.12967,-77.129234,-77.128353,-77.126915,-77.126678,-77.124725,-77.121943,-77.123789,-77.123349,-77.125319,-77.125465,-77.118132,-77.118163,-77.114292,-77.113754,-77.117254,-77.114275,-77.109694,-77.106554,-77.109623,-77.111761,-77.11029,-77.108774,-77.107268,-77.101638,-77.101339,-77.097186,-77.09075,-77.086673,-77.089551,-77.088976,-77.087305,-77.088603,-77.084716,-77.112065,-77.127222,-77.176171,-77.178026,-77.176811,-77.167114,-77.176354,-77.17394,-77.18068,-77.181924,-77.179949,-77.181276,-77.191143,-77.189185,-77.189945,-77.190583,-77.194196,-77.194385,-77.1969,-77.199115,-77.200907,-77.21768,-77.218836,-77.221514,-77.227833,-77.231607,-77.23739,-77.235255,-77.24038,-77.235995,-77.237909,-77.243612,-77.250915,-77.257551,-77.258907,-77.267924,-77.27052,-77.268249,-77.270495,-77.279741,-77.295879,-77.353981,-77.365484,-77.383581,-77.390965,-77.391818,-77.393465,-77.40165,-77.407321,-77.416569,-77.419111,-77.421319,-77.426152,-77.427492,-77.432104,-77.440375,-77.447641,-77.448648,-77.445346,-77.45306,-77.454933,-77.449623,-77.450294,-77.448673,-77.452055,-77.451245,-77.452252,-77.455829,-77.458149,-77.456305,-77.463071,-77.46349,-77.461059,-77.464889,-77.464135,-77.470595,-77.470293,-77.47298,-77.476,-77.477065,-77.474553,-77.479475,-77.476849,-77.480346,-77.481267,-77.484401,-77.48443,-77.482221,-77.480741,-77.485274,-77.486226,-77.484325,-77.493225,-77.491045,-77.490712,-77.494381,-77.494048,-77.498611,-77.500967,-77.500825,-77.50284,-77.501103,-77.501298,-77.502586,-77.502249,-77.503256,-77.504347,-77.507034,-77.508125,-77.507173,-77.511258,-77.511621],"lat":[35.499194,35.501945,35.504782,35.508332,35.510321,35.511123,35.512198,35.518057,35.516981,35.519615,35.518174,35.518886,35.517604,35.517674,35.519666,35.523671,35.525296,35.525388,35.528226,35.528182,35.530265,35.529556,35.531021,35.53061,35.533197,35.532031,35.539149,35.548349,35.553817,35.563313,35.566537,35.567449,35.582137,35.585569,35.618974,35.625565,35.632544,35.638814,35.644101,35.649937,35.652256,35.667073,35.716049,35.750162,35.760957,35.801067,35.800184,35.80724,35.808811,35.807109,35.805466,35.811371,35.817808,35.8229,35.825284,35.826349,35.825264,35.829009,35.83292,35.786246,35.783222,35.774761,35.771294,35.76526,35.765412,35.762686,35.760705,35.762131,35.760998,35.758759,35.760002,35.752093,35.748747,35.746359,35.746954,35.74508,35.742746,35.740691,35.741949,35.739439,35.734181,35.730831,35.729893,35.728122,35.726577,35.723265,35.716606,35.716253,35.720507,35.714647,35.712369,35.709272,35.704783,35.701795,35.699976,35.694158,35.693461,35.695367,35.693021,35.685017,35.684143,35.686967,35.687126,35.684571,35.67846,35.677525,35.672583,35.67038,35.66887,35.669398,35.665514,35.658761,35.644186,35.635577,35.631071,35.631208,35.633422,35.629345,35.629751,35.626537,35.627641,35.626727,35.620222,35.620427,35.617706,35.61602,35.608737,35.605593,35.603836,35.605157,35.604174,35.604565,35.602327,35.601604,35.599292,35.598871,35.602152,35.601041,35.599887,35.598721,35.596327,35.594624,35.596159,35.593925,35.594077,35.59724,35.59679,35.592015,35.591971,35.586248,35.586609,35.584797,35.583204,35.586749,35.58847,35.587032,35.58147,35.58034,35.582982,35.580917,35.575637,35.574696,35.569578,35.569243,35.57123,35.570115,35.565965,35.564364,35.569081,35.562589,35.560389,35.55854,35.558393,35.554682,35.552659,35.549826,35.553953,35.519112,35.512254,35.501953,35.496917,35.485025,35.456715,35.455208,35.447954,35.444416,35.440975,35.43518,35.427299,35.420051,35.417889,35.416301,35.409572,35.410288,35.402149,35.401093,35.401897,35.398597,35.39713,35.399565,35.393432,35.391541,35.384398,35.38213,35.379624,35.361374,35.359167,35.353018,35.350162,35.351784,35.354884,35.359806,35.365501,35.369816,35.375549,35.379163,35.327988,35.333651,35.33536,35.340047,35.34561,35.347053,35.348269,35.353214,35.351499,35.352392,35.348707,35.349554,35.36093,35.367614,35.366973,35.371069,35.374708,35.380685,35.383109,35.385809,35.389243,35.391761,35.392952,35.392356,35.39405,35.394485,35.392973,35.394072,35.395651,35.399221,35.400113,35.401007,35.403043,35.404874,35.409496,35.42101,35.425999,35.426684,35.430827,35.440281,35.439501,35.445453,35.446802,35.443849,35.445519,35.447441,35.447534,35.451768,35.452904,35.455955,35.457993,35.462773,35.465383,35.469,35.473461,35.477238,35.479868,35.483808,35.486441,35.486007,35.488913,35.490172,35.489714,35.491934,35.491386,35.493698,35.49434,35.495347,35.496217,35.496539,35.499194]}]],[[{"lng":[-78.147081,-78.149871,-78.149736,-78.152385,-78.154013,-78.153039,-78.15217,-78.151641,-78.152874,-78.154455,-78.160216,-78.159407,-78.171907,-78.170662,-78.163034,-78.164865,-78.163539,-78.076514,-78.059558,-78.044982,-78.032244,-78.020722,-78.016979,-78.007525,-78.001028,-77.994692,-77.984074,-77.980115,-77.980028,-77.973325,-77.972333,-77.953868,-77.947184,-77.943096,-77.935713,-77.930117,-77.926803,-77.924249,-77.919224,-77.916161,-77.914066,-77.910328,-77.909607,-77.903947,-77.898422,-77.895531,-77.893293,-77.894985,-77.894225,-77.884349,-77.875232,-77.83425,-77.767168,-77.754902,-77.749169,-77.747364,-77.74937,-77.749123,-77.74718,-77.745885,-77.73103,-77.675373,-77.679774,-77.653254,-77.650919,-77.659087,-77.665747,-77.67149,-77.676395,-77.68056,-77.898147,-77.921657,-77.930306,-77.935835,-77.935286,-77.93798,-77.938554,-77.941002,-77.939644,-77.951682,-77.952527,-77.955843,-77.956087,-77.959013,-77.961361,-77.969882,-77.970322,-77.97244,-77.975353,-77.972533,-77.974694,-77.979142,-77.97845,-77.9813,-77.983175,-77.985955,-77.986985,-77.990343,-77.991014,-77.996165,-77.996878,-77.99876,-77.999792,-77.998918,-78.002884,-78.001885,-78.002709,-78.007997,-78.007904,-78.010438,-78.009495,-78.012688,-78.014035,-78.017777,-78.021324,-78.024966,-78.026549,-78.029227,-78.030409,-78.032824,-78.036748,-78.035832,-78.03689,-78.037491,-78.039316,-78.040946,-78.041769,-78.045149,-78.045978,-78.047555,-78.054636,-78.060037,-78.066569,-78.070136,-78.071143,-78.078194,-78.081308,-78.087566,-78.090449,-78.094007,-78.099963,-78.10426,-78.109519,-78.115172,-78.115278,-78.128576,-78.133926,-78.143617,-78.152544,-78.200548,-78.186691,-78.185526,-78.167708,-78.167387,-78.161512,-78.147081],"lat":[34.902448,34.928284,34.947636,34.95814,34.973492,34.974064,34.982365,35.005324,35.01705,35.019637,35.052075,35.079981,35.093302,35.11175,35.142996,35.178376,35.18937,35.174331,35.185826,35.192359,35.191968,35.194249,35.190887,35.190976,35.188889,35.182921,35.183668,35.177619,35.171487,35.167342,35.16505,35.165691,35.171744,35.172391,35.171135,35.173967,35.173571,35.171202,35.169818,35.166712,35.166661,35.16282,35.158014,35.154564,35.148473,35.148282,35.146451,35.151183,35.154304,35.162958,35.166697,35.177814,35.143915,35.117395,35.10793,35.05867,35.0586,35.051481,35.051536,35.022587,35.00814,34.973417,34.970812,34.939937,34.923492,34.881456,34.831219,34.811643,34.787182,34.72064,34.720912,34.719581,34.723104,34.722397,34.720861,34.720209,34.723374,34.720916,34.720108,34.717802,34.714947,34.715453,34.716695,34.716029,34.719937,34.717721,34.719513,34.719728,34.71848,34.717306,34.71446,34.716918,34.714812,34.714243,34.716223,34.715184,34.717651,34.717131,34.715578,34.71721,34.721245,34.720927,34.721532,34.722121,34.723895,34.725224,34.726257,34.72623,34.729114,34.729946,34.731464,34.732587,34.73112,34.732343,34.73044,34.73035,34.726022,34.726735,34.724502,34.728004,34.725984,34.727671,34.728609,34.726658,34.726267,34.727688,34.726454,34.726505,34.72477,34.725808,34.725578,34.72803,34.727985,34.72682,34.724657,34.724568,34.722493,34.726118,34.724041,34.723615,34.725854,34.723906,34.723826,34.721983,34.720195,34.711252,34.705972,34.716945,34.72176,34.738152,34.777964,34.785577,34.834527,34.843806,34.86436,34.902448]}]],[[{"lng":[-81.199401,-81.223239,-81.229168,-81.232998,-81.259243,-81.374297,-81.49872,-81.534359,-81.506041,-81.499658,-81.419871,-81.364055,-81.358394,-81.353679,-81.352792,-81.355892,-81.351101,-81.348629,-81.34634,-81.338283,-81.315913,-81.308346,-81.304495,-81.299539,-81.298074,-81.288995,-81.283685,-81.280115,-81.267281,-81.254113,-81.252266,-81.251695,-81.249642,-81.240954,-81.232186,-81.225814,-81.222109,-81.216186,-81.205137,-81.201893,-81.196081,-81.191624,-81.175941,-81.168349,-81.160303,-81.15727,-81.154857,-81.149609,-81.142338,-81.141085,-81.138642,-81.130812,-81.129655,-81.128414,-81.122879,-81.120082,-81.115753,-81.105806,-81.102127,-81.093478,-81.089467,-81.088679,-81.090431,-81.090421,-81.081725,-81.077527,-81.067677,-81.063957,-81.065677,-81.064133,-81.060188,-81.041707,-81.036757,-81.029078,-81.018375,-81.007722,-81.003382,-80.996946,-80.990223,-80.987143,-80.980531,-80.966654,-80.965568,-80.960753,-80.958799,-80.955034,-80.953454,-80.943656,-80.937212,-80.923974,-80.925515,-80.937388,-80.941952,-80.942095,-80.940207,-80.934689,-80.932732,-80.934394,-80.938119,-80.945559,-80.950197,-80.95468,-80.956776,-80.953405,-80.953824,-80.960029,-80.973872,-80.977622,-80.998023,-81.199401],"lat":[35.556612,35.557533,35.556761,35.557919,35.559124,35.562647,35.568744,35.568811,35.608196,35.611327,35.692851,35.767865,35.766767,35.769086,35.774129,35.779874,35.784543,35.791028,35.794072,35.796331,35.796857,35.802509,35.802608,35.798338,35.798193,35.80039,35.804755,35.806135,35.804495,35.808798,35.810637,35.814306,35.815685,35.812841,35.812419,35.809519,35.811304,35.817277,35.8228,35.823289,35.821161,35.822371,35.823054,35.825595,35.825087,35.826069,35.828311,35.828958,35.827434,35.812162,35.808442,35.803241,35.800573,35.789383,35.784939,35.784599,35.782308,35.77292,35.768186,35.768747,35.765897,35.763578,35.759884,35.75727,35.750133,35.745169,35.737915,35.727871,35.720285,35.712985,35.710298,35.707125,35.707641,35.710392,35.712577,35.710946,35.709304,35.704522,35.693149,35.692479,35.680952,35.670919,35.663865,35.660375,35.653832,35.650148,35.64365,35.637643,35.630312,35.620862,35.618023,35.613138,35.608193,35.60361,35.601094,35.597722,35.592006,35.589604,35.587292,35.584992,35.581494,35.57547,35.56754,35.554453,35.552867,35.54781,35.549027,35.548295,35.548772,35.556612]}]],[[{"lng":[-76.987607,-76.986835,-76.981415,-76.976404,-76.970111,-76.970869,-76.968844,-76.971229,-76.965916,-76.961887,-76.950722,-76.944991,-76.942012,-76.942655,-76.944122,-76.9436,-76.931848,-76.927984,-76.919645,-76.911649,-76.905252,-76.901653,-76.902287,-76.898521,-76.895546,-76.845457,-76.632535,-76.613845,-76.61425,-76.612165,-76.614421,-76.614319,-76.619359,-76.616235,-76.617033,-76.612844,-76.604229,-76.590497,-76.521864,-76.518619,-76.472366,-76.460397,-76.44218,-76.374667,-76.35503,-76.277455,-76.624651,-76.756003,-76.775675,-76.812271,-76.819113,-76.893266,-76.907508,-76.953285,-76.967297,-76.946239,-76.94105,-76.9379,-76.935168,-76.937585,-76.937605,-76.938962,-76.938234,-76.939073,-76.937174,-76.939593,-76.940309,-76.937543,-76.934685,-76.9367,-76.937837,-76.942009,-76.941886,-76.943763,-76.946364,-76.949071,-76.956786,-76.959425,-76.968948,-76.975961,-76.97799,-76.984082,-76.987607],"lat":[35.154665,35.155861,35.15472,35.156019,35.162175,35.166368,35.172253,35.178638,35.182041,35.200714,35.208629,35.209542,35.214059,35.218642,35.220028,35.222378,35.230528,35.231067,35.235072,35.234638,35.236824,35.242675,35.246626,35.249207,35.253532,35.216045,35.235233,35.270942,35.274785,35.279409,35.285409,35.291569,35.302284,35.314679,35.330871,35.334823,35.338223,35.361857,35.353593,35.348676,35.340534,35.337078,35.32724,35.265458,35.250071,35.216339,35.030931,34.956151,34.950749,34.951286,34.952471,34.980285,34.987836,35.021248,35.040655,35.058079,35.064499,35.077046,35.080678,35.083123,35.086669,35.088556,35.091806,35.093771,35.101388,35.101715,35.103071,35.103248,35.107054,35.107931,35.114049,35.115437,35.117937,35.121157,35.120893,35.123784,35.12564,35.127638,35.129531,35.133818,35.138381,35.143951,35.154665]}]],[[{"lng":[-78.421652,-78.40723,-78.397993,-78.365228,-78.337248,-78.256316,-78.252559,-78.247727,-78.246274,-78.245535,-78.236384,-78.2354,-78.233112,-78.228715,-78.225193,-78.211884,-78.210378,-78.210607,-78.201249,-78.178632,-78.175061,-78.170385,-78.16235,-78.227993,-78.235528,-78.25447,-78.374233,-78.374726,-78.366793,-78.373651,-78.392502,-78.422567,-78.435606,-78.441966,-78.460249,-78.478151,-78.485641,-78.488563,-78.493163,-78.494928,-78.502331,-78.515469,-78.518615,-78.526056,-78.532912,-78.537057,-78.541162,-78.544977,-78.544235,-78.546376,-78.543517,-78.545701,-78.538669,-78.540024,-78.543216,-78.542545,-78.549095,-78.550732,-78.54922,-78.551171,-78.548874,-78.555046,-78.552602,-78.553577,-78.55107,-78.549003,-78.553328,-78.551952,-78.554062,-78.549034,-78.546535,-78.547675,-78.544014,-78.547291,-78.547479,-78.551913,-78.553276,-78.55854,-78.55688,-78.560055,-78.556915,-78.561092,-78.562667,-78.558938,-78.557068,-78.558732,-78.55488,-78.553625,-78.554968,-78.559083,-78.558808,-78.557052,-78.558093,-78.560227,-78.559347,-78.561099,-78.562331,-78.568183,-78.569675,-78.571071,-78.573383,-78.58236,-78.582673,-78.578969,-78.578497,-78.577803,-78.579914,-78.579437,-78.585473,-78.582858,-78.583839,-78.588832,-78.587851,-78.590682,-78.590137,-78.592069,-78.594339,-78.598752,-78.59941,-78.60037,-78.600699,-78.600529,-78.603319,-78.603252,-78.607973,-78.606725,-78.609381,-78.609149,-78.611867,-78.613269,-78.612776,-78.616819,-78.619782,-78.625396,-78.626357,-78.629595,-78.630097,-78.640128,-78.639995,-78.63167,-78.626436,-78.627725,-78.624083,-78.625459,-78.629917,-78.630287,-78.633694,-78.639368,-78.640544,-78.642202,-78.64824,-78.646523,-78.643301,-78.64432,-78.642067,-78.646272,-78.644242,-78.647319,-78.646468,-78.650324,-79.071169,-79.069158,-79.070203,-79.067377,-79.069785,-79.068423,-79.065165,-79.060779,-79.055081,-79.057482,-79.053021,-79.050941,-79.049148,-79.046023,-79.038642,-79.037284,-79.040388,-79.036785,-79.035485,-79.033894,-79.03689,-79.034914,-79.037233,-79.035191,-79.034341,-79.030558,-79.032136,-79.028848,-79.030316,-79.025189,-79.025147,-79.0273,-79.018494,-79.018743,-79.0167,-79.016893,-79.009107,-79.010706,-79.005616,-79.008023,-79.003771,-79.000816,-79.002885,-79.002893,-79.005766,-79.007408,-79.007374,-79.010224,-79.009593,-79.011528,-79.002259,-78.998596,-78.994896,-78.994992,-78.983668,-78.982708,-78.978477,-78.979719,-78.977653,-78.973457,-78.975756,-78.969761,-78.970396,-78.968021,-78.969788,-78.96716,-78.969462,-78.967256,-78.970965,-78.967908,-78.970207,-78.967953,-78.971815,-78.967445,-78.96944,-78.969874,-78.968248,-78.971003,-78.967167,-78.966093,-78.960926,-78.960067,-78.955402,-78.953943,-78.951846,-78.945818,-78.941363,-78.937901,-78.934865,-78.929834,-78.925944,-78.920382,-78.918817,-78.917626,-78.910849,-78.907009,-78.894491,-78.888345,-78.887982,-78.874694,-78.87153,-78.865412,-78.859688,-78.857865,-78.850182,-78.844725,-78.837892,-78.833589,-78.825123,-78.667655,-78.666141,-78.666654,-78.663225,-78.651984,-78.656721,-78.648522,-78.649068,-78.646856,-78.628178,-78.622977,-78.613215,-78.603061,-78.598074,-78.581311,-78.575059,-78.446034,-78.421652],"lat":[34.375399,34.374117,34.37127,34.372862,34.367089,34.399763,34.391307,34.393884,34.392517,34.385037,34.379835,34.374189,34.373729,34.378605,34.37376,34.369409,34.367818,34.359016,34.352752,34.354857,34.351356,34.35624,34.357007,34.256648,34.248445,34.216318,34.205023,34.202972,34.188774,34.188038,34.173322,34.139217,34.14229,34.14625,34.150163,34.159064,34.158557,34.162791,34.163659,34.166772,34.167935,34.166109,34.159058,34.154253,34.15351,34.146208,34.148294,34.145957,34.142862,34.138342,34.135773,34.134577,34.125099,34.122926,34.124375,34.126109,34.125162,34.122096,34.120341,34.119735,34.118944,34.116634,34.113926,34.113111,34.114753,34.111466,34.10678,34.104321,34.103671,34.104274,34.103239,34.100336,34.099759,34.098793,34.095894,34.09491,34.097107,34.093518,34.091575,34.091918,34.083334,34.08225,34.077254,34.075234,34.075979,34.077597,34.076828,34.07227,34.066997,34.066298,34.061337,34.061849,34.060007,34.060596,34.059158,34.058961,34.05433,34.053465,34.055987,34.05324,34.055846,34.048538,34.043378,34.042549,34.044001,34.04146,34.040473,34.036527,34.035894,34.033699,34.031448,34.03214,34.030209,34.030047,34.027839,34.026843,34.029419,34.027911,34.0293,34.027664,34.029902,34.026583,34.027501,34.024593,34.023862,34.025443,34.024541,34.025788,34.023093,34.024182,34.022038,34.023375,34.018186,34.01946,34.017379,34.017486,34.015742,34.010472,34.00402,33.993643,33.979692,33.976092,33.973298,33.971985,33.974768,33.972293,33.970353,33.969017,33.970403,33.96727,33.965531,33.960508,33.961778,33.960123,33.95634,33.95437,33.950042,33.94986,33.948326,33.944242,34.29924,34.300879,34.303499,34.303384,34.305236,34.306964,34.308748,34.306766,34.308903,34.311078,34.314585,34.314833,34.311605,34.310812,34.313076,34.316691,34.317612,34.321285,34.319342,34.324703,34.32596,34.329619,34.333252,34.333534,34.338506,34.340126,34.342743,34.342733,34.347018,34.348035,34.351786,34.353092,34.352127,34.350524,34.349996,34.35176,34.352883,34.355215,34.359304,34.361373,34.361268,34.364611,34.364484,34.368892,34.372832,34.372501,34.376735,34.376952,34.380034,34.381034,34.384254,34.39098,34.390352,34.392574,34.393833,34.39226,34.392659,34.390874,34.390321,34.392223,34.395866,34.395216,34.396424,34.397552,34.401243,34.402077,34.406378,34.410652,34.409997,34.412917,34.415201,34.41678,34.418261,34.422042,34.422544,34.424491,34.425013,34.427535,34.43061,34.435218,34.439118,34.442548,34.444436,34.443452,34.448657,34.449222,34.452351,34.451448,34.453731,34.454219,34.452565,34.45378,34.452257,34.454461,34.456714,34.454914,34.461445,34.466643,34.470273,34.478411,34.482668,34.483443,34.481842,34.474419,34.473712,34.46866,34.46758,34.463217,34.461802,34.469575,34.468102,34.463621,34.460938,34.457964,34.45048,34.454325,34.458328,34.458808,34.451657,34.453377,34.443078,34.440226,34.432835,34.431285,34.429058,34.376731,34.375399]}]],[[{"lng":[-78.232386,-78.184162,-78.172179,-78.006554,-78.001714,-77.996608,-77.997765,-77.996638,-77.99346,-77.993577,-77.992517,-77.990668,-77.991181,-77.987476,-77.983171,-77.984513,-77.98413,-77.979617,-77.978186,-77.975748,-77.97352,-77.971423,-77.96907,-77.969662,-77.972884,-77.973877,-77.972926,-77.967533,-77.951122,-77.944289,-77.943039,-77.944551,-77.944067,-77.941176,-77.933926,-77.932539,-77.931082,-77.926018,-77.925447,-77.923999,-77.917684,-77.923062,-77.922906,-77.915863,-77.909272,-77.900766,-77.901104,-77.892414,-77.887613,-77.886003,-77.884116,-77.881964,-77.878876,-77.878792,-77.871424,-77.865702,-77.861446,-77.856565,-77.852775,-77.848272,-77.841677,-77.832983,-77.82979,-77.824559,-77.821597,-77.815408,-77.808342,-77.80531,-77.805928,-77.804383,-77.801997,-77.802102,-77.799261,-77.79227,-77.783083,-77.778845,-77.774245,-77.772707,-77.769731,-77.757258,-77.753278,-77.753145,-77.75034,-77.745903,-77.741529,-77.737133,-77.735782,-77.732254,-77.729525,-77.73096,-77.730171,-77.731707,-77.726173,-77.723327,-77.72093,-77.716573,-77.721552,-77.716274,-77.711813,-77.707154,-77.706357,-77.707131,-77.705264,-77.702615,-77.697879,-77.70222,-77.70426,-77.705294,-77.707734,-77.742913,-77.770889,-77.777751,-77.818563,-77.844812,-77.853211,-77.874139,-77.883046,-77.89765,-78.006685,-78.147281,-78.180913,-78.186515,-78.188933,-78.193585,-78.204811,-78.207646,-78.206103,-78.20933,-78.209443,-78.215365,-78.215198,-78.216742,-78.215621,-78.217338,-78.216611,-78.217707,-78.221918,-78.226015,-78.233428,-78.234973,-78.234525,-78.236434,-78.234499,-78.238375,-78.238491,-78.243461,-78.245962,-78.250865,-78.248436,-78.248266,-78.245298,-78.247124,-78.247013,-78.243898,-78.247522,-78.248787,-78.249329,-78.251593,-78.256869,-78.255152,-78.254903,-78.232386],"lat":[35.857572,35.935046,35.956301,36.202663,36.19895,36.198447,36.197197,36.192431,36.190297,36.186785,36.18549,36.185148,36.186673,36.189589,36.186765,36.183335,36.18091,36.178758,36.175255,36.177675,36.176766,36.177918,36.183511,36.186505,36.189441,36.193619,36.1943,36.194323,36.180573,36.182218,36.186236,36.18834,36.19258,36.192399,36.186562,36.183159,36.182356,36.183281,36.187385,36.188958,36.180554,36.168817,36.166584,36.163541,36.16532,36.162729,36.156238,36.151277,36.143891,36.14435,36.147357,36.146806,36.143165,36.144757,36.145248,36.14858,36.149089,36.146195,36.146678,36.145102,36.145651,36.14434,36.145762,36.143987,36.144772,36.13994,36.138212,36.141245,36.147125,36.149705,36.14837,36.146333,36.144502,36.145094,36.141382,36.143898,36.142499,36.146796,36.146158,36.148873,36.151888,36.156955,36.157448,36.153006,36.155178,36.153571,36.150251,36.147245,36.14902,36.146585,36.143435,36.139411,36.137959,36.134459,36.133899,36.136142,36.141403,36.14621,36.145325,36.146422,36.147113,36.148433,36.150748,36.15056,36.152981,36.148401,36.143155,36.12213,36.113582,36.05953,36.008915,35.984635,35.886518,35.837487,35.84397,35.849929,35.846224,35.844028,35.799488,35.74568,35.738431,35.734714,35.734315,35.728566,35.727856,35.729572,35.73074,35.730716,35.731952,35.736116,35.738405,35.740395,35.748245,35.750156,35.751844,35.754269,35.754497,35.750562,35.752251,35.755294,35.756575,35.757215,35.759825,35.763096,35.768474,35.769044,35.772063,35.773681,35.775494,35.781258,35.784901,35.785907,35.788264,35.792316,35.792429,35.794121,35.803572,35.810961,35.813606,35.814759,35.81773,35.857572]}]],[[{"lng":[-80.927059,-80.926361,-80.91973,-80.914182,-80.915923,-80.915847,-80.917586,-80.918889,-80.921544,-80.918577,-80.909066,-80.908416,-80.901703,-80.837574,-80.799784,-80.77358,-80.730385,-80.704605,-80.653379,-80.4401,-80.447155,-80.452319,-80.460992,-80.461337,-80.463988,-80.469862,-80.476443,-80.481182,-80.485079,-80.505202,-80.510003,-80.534555,-80.537441,-80.535374,-80.536727,-80.540074,-80.547478,-80.549493,-80.553849,-80.559374,-80.574024,-80.580736,-80.592537,-80.599999,-80.607395,-80.615206,-80.624143,-80.627663,-80.630737,-80.631663,-80.626342,-80.626919,-80.630747,-80.640501,-80.643015,-80.647689,-80.648155,-80.65182,-80.656297,-80.663693,-80.668397,-80.673451,-80.67696,-80.678846,-80.684256,-80.695027,-80.702095,-80.713896,-80.721133,-80.732918,-80.734657,-80.732154,-80.737909,-80.741775,-80.744196,-80.75157,-80.756269,-80.760283,-80.769,-80.777054,-80.779739,-80.780153,-80.778318,-80.784014,-80.795888,-80.798506,-80.80258,-80.809258,-80.817909,-80.826134,-80.834902,-80.84856,-80.867326,-80.873259,-80.868871,-80.871528,-80.875427,-80.875879,-80.878094,-80.882902,-80.885074,-80.892067,-80.895511,-80.896588,-80.898856,-80.897888,-80.89909,-80.903295,-80.904449,-80.911863,-80.916416,-80.920263,-80.920438,-80.922719,-80.931097,-80.939372,-80.967066,-80.947182,-80.974619,-80.963229,-80.927059],"lat":[36.501106,36.502671,36.505949,36.520701,36.522405,36.523838,36.52393,36.525707,36.525872,36.540439,36.553082,36.556902,36.561856,36.559077,36.561073,36.56031,36.562348,36.562318,36.559228,36.55063,36.423644,36.241222,36.247933,36.254056,36.258098,36.260414,36.260575,36.25661,36.255755,36.259937,36.258355,36.258696,36.2626,36.272752,36.279432,36.28256,36.285246,36.285146,36.282321,36.283011,36.279762,36.27717,36.269947,36.272234,36.27716,36.279526,36.286853,36.287686,36.286736,36.284464,36.277362,36.274109,36.272306,36.273127,36.272116,36.263124,36.256469,36.253151,36.251663,36.251885,36.250756,36.25216,36.256864,36.264258,36.268625,36.266128,36.265837,36.26693,36.270017,36.267017,36.268816,36.276956,36.280132,36.27756,36.270783,36.263417,36.264603,36.269406,36.274749,36.273283,36.270161,36.268064,36.257069,36.252856,36.248248,36.248621,36.25263,36.254087,36.250403,36.249705,36.24533,36.241159,36.239175,36.236383,36.326516,36.329247,36.329694,36.332153,36.334377,36.335327,36.337756,36.340078,36.342994,36.345996,36.347423,36.351253,36.354582,36.356806,36.361004,36.362753,36.367931,36.367268,36.36591,36.364429,36.367135,36.383448,36.4016,36.419074,36.452846,36.459166,36.501106]}]],[[{"lng":[-80.189193,-80.32041,-80.298851,-80.295499,-80.277052,-80.2754,-80.271213,-80.264877,-80.263688,-80.259002,-80.254837,-80.251137,-80.251281,-80.240119,-80.242039,-80.238884,-80.231181,-80.225176,-80.22141,-80.207814,-80.206245,-80.205492,-80.202132,-80.197496,-80.194884,-80.193505,-80.191663,-80.185801,-80.181982,-80.173157,-80.165323,-80.159963,-80.16072,-80.166154,-80.167586,-80.165717,-80.159193,-80.156845,-80.154224,-80.151022,-80.142321,-80.135622,-80.13182,-80.124408,-80.124423,-80.129117,-80.128706,-80.121096,-80.114685,-80.111967,-80.108253,-80.108805,-80.106914,-80.101827,-80.093685,-80.077811,-80.076475,-80.07539,-80.074839,-80.068853,-80.069254,-80.06543,-80.041837,-80.024571,-80.011869,-79.999268,-79.993898,-79.984813,-79.980916,-79.977731,-79.956084,-79.942119,-79.927887,-79.924199,-79.922836,-79.921659,-79.916648,-79.912403,-79.912591,-79.911525,-79.909477,-79.899424,-79.882736,-79.877133,-79.875459,-79.875716,-79.877275,-79.892742,-79.894291,-79.899456,-79.899701,-79.894621,-79.879544,-79.864997,-79.863607,-79.867118,-79.872097,-79.872215,-79.866259,-79.859861,-79.851634,-79.849008,-79.848545,-79.84999,-79.866825,-79.885009,-79.89425,-79.900681,-79.903131,-79.908931,-79.914146,-79.922257,-79.927618,-80.189193],"lat":[34.811989,34.814008,35.011631,35.033414,35.196136,35.196337,35.20174,35.204257,35.208564,35.208817,35.21122,35.208771,35.203405,35.188019,35.180962,35.173992,35.166517,35.156235,35.155409,35.155946,35.158593,35.165166,35.166562,35.166532,35.165195,35.158796,35.156279,35.154572,35.151467,35.14778,35.147328,35.149452,35.15263,35.15791,35.161641,35.164348,35.167237,35.173842,35.174795,35.174264,35.168394,35.167606,35.173185,35.174731,35.177227,35.184599,35.187968,35.192709,35.194233,35.193488,35.189005,35.178337,35.172794,35.168514,35.164196,35.148133,35.14322,35.143081,35.134213,35.121297,35.113595,35.110608,35.103026,35.090826,35.088987,35.085391,35.085469,35.090072,35.09849,35.101541,35.114487,35.118925,35.117713,35.115468,35.113362,35.106526,35.102143,35.096493,35.079166,35.071629,35.067432,35.0595,35.050884,35.045531,35.042278,35.037936,35.035944,35.022838,35.017231,35.009308,35.005645,35.000152,34.988076,34.980142,34.975008,34.964743,34.954928,34.950125,34.938729,34.932851,34.91606,34.907827,34.904558,34.899317,34.878381,34.863099,34.860896,34.857679,34.854353,34.841027,34.818028,34.809496,34.806555,34.811989]}]],[[{"lng":[-80.181662,-79.769285,-79.764341,-79.754051,-79.750331,-79.709811,-79.711418,-79.710525,-79.712006,-79.712786,-79.711834,-79.705186,-79.705101,-79.701499,-79.701443,-79.698036,-79.688377,-79.685108,-79.681424,-79.672128,-79.671181,-79.669619,-79.668281,-79.66379,-79.664739,-79.664324,-79.663152,-79.661087,-79.659806,-79.661705,-79.66023,-79.656968,-79.647543,-79.637341,-79.634079,-79.628668,-79.6263,-79.620546,-79.614296,-79.627005,-79.642069,-79.65741,-79.662971,-79.671112,-79.673494,-79.676833,-79.679426,-79.683824,-79.686258,-79.69379,-79.694109,-79.703553,-79.713273,-79.727882,-79.73488,-79.737984,-79.7398,-79.742789,-79.749766,-79.75774,-79.767189,-79.783949,-79.792011,-79.804078,-79.81187,-79.818749,-79.824492,-79.830042,-79.836139,-79.843076,-79.851762,-79.898618,-79.944376,-79.949312,-79.951888,-79.959741,-79.965332,-79.972911,-79.981674,-79.985587,-79.987333,-80.001933,-80.018508,-80.02218,-80.028576,-80.03371,-80.041106,-80.07539,-80.068757,-80.060612,-80.056861,-80.053064,-80.053302,-80.060799,-80.061747,-80.065355,-80.066562,-80.069799,-80.077398,-80.087131,-80.091467,-80.098411,-80.097871,-80.092241,-80.091768,-80.094142,-80.092888,-80.080483,-80.079537,-80.081938,-80.075182,-80.066335,-80.066371,-80.065388,-80.054138,-80.051225,-80.057925,-80.062271,-80.066137,-80.075033,-80.083904,-80.087272,-80.093711,-80.093718,-80.090119,-80.095939,-80.100491,-80.097714,-80.097468,-80.100225,-80.107025,-80.108656,-80.109381,-80.108165,-80.109914,-80.118251,-80.12934,-80.139921,-80.149117,-80.161736,-80.165865,-80.176243,-80.178747,-80.179986,-80.182682,-80.181662],"lat":[35.504344,35.511457,35.476003,35.451767,35.439939,35.301263,35.299716,35.292323,35.290514,35.28369,35.275331,35.268212,35.262166,35.256809,35.254427,35.251451,35.250441,35.247454,35.248004,35.24457,35.240836,35.239669,35.231173,35.225561,35.223638,35.217799,35.214822,35.213859,35.209577,35.204998,35.19902,35.193134,35.187132,35.176092,35.1749,35.175172,35.17043,35.171098,35.163679,35.162026,35.157687,35.164536,35.170624,35.17279,35.175374,35.175641,35.17729,35.176427,35.177945,35.178275,35.179757,35.175443,35.173098,35.175834,35.178316,35.177692,35.17529,35.174211,35.172951,35.17356,35.177498,35.175531,35.175952,35.179169,35.179942,35.177888,35.179092,35.177061,35.177232,35.18131,35.183418,35.16171,35.164289,35.157766,35.156677,35.156291,35.157476,35.156656,35.158824,35.156828,35.154412,35.149026,35.140725,35.137328,35.137892,35.140331,35.139693,35.143081,35.155144,35.160209,35.164035,35.172625,35.178607,35.18919,35.200259,35.206032,35.211652,35.218315,35.228168,35.233173,35.236803,35.258086,35.261414,35.271987,35.275389,35.28658,35.290219,35.307623,35.311103,35.321457,35.331278,35.340647,35.357145,35.360474,35.365959,35.371537,35.377688,35.386134,35.389514,35.395072,35.395094,35.398876,35.40203,35.405474,35.415552,35.425417,35.429903,35.43391,35.438094,35.440801,35.442958,35.44509,35.448572,35.457203,35.460982,35.465261,35.467148,35.475055,35.472612,35.475208,35.480223,35.485428,35.490936,35.499899,35.504335,35.504344]}]],[[{"lng":[-79.016699,-79.01356,-78.999532,-78.993731,-78.982507,-78.96726,-78.95074,-78.802005,-78.804235,-78.804679,-78.805331,-78.804983,-78.802966,-78.803747,-78.807368,-78.807585,-78.798371,-78.79368,-78.792471,-78.790999,-78.793321,-78.792094,-78.78994,-78.785204,-78.785131,-78.787785,-78.788085,-78.783737,-78.78061,-78.749,-78.753566,-78.752916,-78.750668,-78.73885,-78.734392,-78.719592,-78.707364,-78.702526,-78.69793,-78.698931,-78.699049,-78.702721,-78.71328,-78.719588,-78.718679,-78.726706,-78.741933,-78.75128,-78.754299,-78.758328,-78.759193,-78.784793,-78.786532,-78.790793,-78.806052,-78.822856,-78.829273,-78.831781,-78.870392,-78.874838,-78.886787,-78.902824,-79.016699],"lat":[35.863201,35.874218,35.964843,35.990942,36.056634,36.138587,36.239263,36.235937,36.112162,36.094369,36.09389,36.091883,36.089532,36.088726,36.088341,36.087623,36.084295,36.086729,36.085538,36.081223,36.077515,36.077217,36.078601,36.076771,36.076032,36.074061,36.072156,36.06955,36.071971,36.071246,36.054504,36.037679,36.030847,36.025541,36.026985,36.029435,36.012601,36.013839,36.012306,36.012022,36.009142,36.001405,35.968386,35.959137,35.95806,35.950589,35.934258,35.93159,35.926365,35.92167,35.918172,35.923414,35.922701,35.924658,35.927862,35.88422,35.869991,35.867314,35.86756,35.868413,35.86757,35.868199,35.863201]}]],[[{"lng":[-82.623752,-82.62212,-82.619513,-82.624531,-82.648584,-82.745209,-82.741524,-82.739708,-82.73161,-82.730198,-82.72505,-82.715026,-82.71169,-82.705577,-82.700905,-82.699337,-82.695129,-82.687609,-82.682665,-82.680201,-82.676072,-82.672392,-82.664984,-82.660301,-82.652914,-82.651019,-82.644604,-82.641847,-82.624166,-82.622118,-82.608278,-82.600518,-82.599197,-82.595367,-82.590406,-82.589195,-82.586942,-82.582769,-82.582594,-82.570769,-82.568156,-82.567828,-82.56189,-82.562363,-82.561046,-82.54874,-82.548964,-82.546564,-82.542542,-82.544546,-82.543822,-82.546926,-82.544336,-82.539745,-82.538414,-82.535995,-82.533276,-82.53544,-82.529806,-82.529054,-82.535508,-82.536898,-82.534723,-82.534916,-82.470161,-82.461825,-82.455761,-82.453729,-82.446561,-82.445585,-82.441458,-82.439085,-82.435136,-82.432288,-82.427104,-82.42316,-82.417579,-82.410688,-82.407087,-82.402206,-82.400162,-82.398605,-82.388268,-82.380543,-82.371824,-82.363013,-82.367473,-82.368123,-82.371128,-82.369845,-82.371907,-82.369532,-82.37031,-82.369514,-82.364026,-82.360477,-82.358381,-82.356374,-82.345291,-82.343875,-82.340847,-82.338833,-82.339752,-82.337003,-82.333137,-82.265761,-82.275388,-82.279615,-82.280509,-82.278996,-82.276054,-82.273414,-82.275829,-82.27304,-82.272675,-82.268691,-82.270255,-82.262066,-82.261533,-82.276313,-82.281116,-82.280925,-82.27962,-82.281953,-82.28983,-82.289638,-82.294036,-82.295582,-82.297817,-82.29768,-82.302338,-82.305115,-82.305534,-82.308036,-82.307784,-82.309282,-82.31107,-82.311598,-82.310437,-82.314132,-82.31593,-82.318115,-82.319279,-82.326432,-82.329538,-82.330343,-82.333629,-82.336474,-82.337852,-82.337627,-82.341258,-82.341686,-82.345891,-82.349419,-82.358978,-82.359442,-82.350806,-82.353615,-82.359304,-82.362991,-82.364568,-82.364306,-82.36209,-82.370963,-82.372536,-82.376537,-82.380888,-82.383944,-82.382883,-82.378501,-82.38088,-82.380524,-82.385169,-82.383776,-82.384029,-82.387372,-82.390253,-82.39293,-82.399425,-82.398259,-82.400211,-82.404741,-82.407153,-82.411301,-82.415117,-82.417234,-82.419744,-82.424461,-82.423294,-82.426098,-82.425883,-82.427784,-82.427941,-82.424315,-82.425962,-82.426266,-82.430765,-82.431481,-82.435107,-82.434676,-82.438018,-82.439595,-82.448073,-82.450465,-82.457128,-82.45743,-82.451624,-82.454652,-82.460092,-82.467991,-82.474949,-82.477754,-82.482329,-82.486653,-82.487248,-82.490766,-82.495506,-82.494564,-82.49571,-82.50458,-82.507914,-82.516338,-82.519091,-82.519926,-82.525566,-82.535703,-82.537246,-82.535967,-82.536747,-82.545051,-82.546374,-82.549907,-82.553672,-82.555668,-82.555601,-82.55333,-82.557219,-82.56261,-82.565382,-82.565863,-82.567902,-82.56827,-82.572671,-82.577508,-82.577215,-82.579034,-82.585155,-82.586556,-82.585684,-82.589252,-82.590616,-82.603928,-82.604213,-82.611358,-82.614427,-82.61615,-82.610203,-82.618893,-82.62376,-82.623752],"lat":[35.298798,35.303055,35.303758,35.309246,35.330074,35.422924,35.424541,35.429283,35.431993,35.435337,35.437917,35.448673,35.448654,35.45307,35.454238,35.452942,35.454446,35.453102,35.454446,35.453806,35.455854,35.459534,35.456975,35.452787,35.455239,35.452302,35.449693,35.444463,35.438064,35.435531,35.443216,35.438977,35.437225,35.435879,35.438095,35.437498,35.439187,35.436391,35.433736,35.431217,35.434711,35.438103,35.437651,35.440548,35.443244,35.444306,35.440482,35.440402,35.431187,35.428797,35.428157,35.425201,35.42356,35.423184,35.421646,35.422546,35.416574,35.422606,35.422928,35.436107,35.436257,35.43729,35.441858,35.444307,35.445363,35.450723,35.449651,35.455603,35.458532,35.461204,35.461385,35.462938,35.463012,35.464356,35.470468,35.470614,35.474531,35.472244,35.473748,35.470051,35.471237,35.470005,35.470005,35.463445,35.460951,35.460976,35.464106,35.468904,35.472263,35.475386,35.480004,35.482538,35.483824,35.485543,35.48628,35.485243,35.490879,35.491643,35.488146,35.489374,35.489255,35.491543,35.495474,35.499695,35.50041,35.467835,35.450256,35.445973,35.442203,35.43837,35.436957,35.430337,35.42309,35.418831,35.40955,35.406408,35.400351,35.394448,35.388345,35.375116,35.367896,35.366065,35.365434,35.360822,35.35389,35.352083,35.346976,35.342162,35.339841,35.33655,35.335271,35.332555,35.326836,35.326139,35.322393,35.320442,35.320169,35.317363,35.31445,35.313049,35.308646,35.306712,35.308148,35.309266,35.307783,35.302738,35.300593,35.296605,35.296595,35.294341,35.291217,35.288686,35.286511,35.244324,35.244634,35.228385,35.228305,35.190828,35.192318,35.191037,35.189134,35.187772,35.186482,35.180355,35.180726,35.185226,35.187144,35.191007,35.194347,35.195349,35.200687,35.202276,35.206266,35.207646,35.210542,35.211831,35.21554,35.215402,35.209179,35.206639,35.205089,35.204166,35.20239,35.202483,35.19923,35.200277,35.198613,35.193092,35.190778,35.189299,35.187549,35.184472,35.183088,35.181453,35.18104,35.179079,35.177833,35.173187,35.170183,35.168279,35.167671,35.165863,35.165217,35.166118,35.16395,35.167385,35.172495,35.17756,35.178143,35.174633,35.174043,35.176088,35.17388,35.174463,35.169728,35.169715,35.164731,35.16316,35.162061,35.165851,35.162406,35.163396,35.162083,35.159105,35.15652,35.154673,35.155675,35.158664,35.160091,35.162312,35.163731,35.161584,35.161486,35.159515,35.155829,35.153493,35.150848,35.153058,35.15151,35.149578,35.148929,35.145682,35.144434,35.146252,35.148153,35.149841,35.151547,35.155686,35.158726,35.159707,35.161801,35.222038,35.25886,35.261559,35.259756,35.260182,35.288272,35.288582,35.296019,35.298798]}]],[[{"lng":[-76.709835,-76.712392,-76.727062,-76.731511,-76.736326,-76.737341,-76.736346,-76.736625,-76.732906,-76.732369,-76.733563,-76.733387,-76.731268,-76.726286,-76.72004,-76.716115,-76.70975,-76.699802,-76.690884,-76.689462,-76.689917,-76.694971,-76.696601,-76.68431,-76.683518,-76.680635,-76.679323,-76.677848,-76.676956,-76.675168,-76.675793,-76.672441,-76.67252,-76.675603,-76.675574,-76.672406,-76.672237,-76.674612,-76.673594,-76.671897,-76.671585,-76.669888,-76.667738,-76.667031,-76.664852,-76.664457,-76.663269,-76.663552,-76.662788,-76.659479,-76.657442,-76.656424,-76.654274,-76.653369,-76.65453,-76.650598,-76.649859,-76.646605,-76.644286,-76.642163,-76.642417,-76.640917,-76.640037,-76.638962,-76.633132,-76.627984,-76.622631,-76.614508,-76.608961,-76.604407,-76.601634,-76.599003,-76.59592,-76.594025,-76.593489,-76.586219,-76.576911,-76.570719,-76.559674,-76.559571,-76.56125,-76.559773,-76.563471,-76.561684,-76.567617,-76.568717,-76.56756,-76.567531,-76.565523,-76.568006,-76.567324,-76.568233,-76.571471,-76.572852,-76.582541,-76.587079,-76.588198,-76.588159,-76.589897,-76.572904,-76.570013,-76.559733,-76.547713,-76.544119,-76.539173,-76.533782,-76.52888,-76.517759,-76.51063,-76.507038,-76.500154,-76.494654,-76.493129,-76.491414,-76.480895,-76.478505,-76.472567,-76.466289,-76.460474,-76.45535,-76.452983,-76.448471,-76.445697,-76.436375,-76.429987,-76.413462,-76.403801,-76.402834,-76.39686,-76.406269,-76.415982,-76.423217,-76.435966,-76.447259,-76.46589,-76.509361,-76.534958,-76.563246,-76.59195,-76.603457,-76.613069,-76.621725,-76.641127,-76.675713,-76.685849,-76.705435,-76.708584,-76.710227,-76.709835],"lat":[36.095886,36.102603,36.125159,36.13341,36.147042,36.160061,36.175006,36.184152,36.197222,36.201292,36.207554,36.211093,36.217099,36.222326,36.22545,36.228609,36.240368,36.253477,36.266392,36.269651,36.274462,36.285901,36.296211,36.300459,36.301416,36.300014,36.301484,36.300573,36.301594,36.301359,36.303129,36.303274,36.304063,36.304681,36.30633,36.306535,36.30784,36.308939,36.310908,36.310565,36.313266,36.315074,36.314708,36.313792,36.315738,36.313723,36.313563,36.314204,36.314501,36.313058,36.314637,36.313561,36.314087,36.312645,36.310699,36.310995,36.31752,36.32006,36.319396,36.319921,36.322898,36.324202,36.328803,36.329238,36.330106,36.328432,36.328658,36.324472,36.323055,36.323836,36.322577,36.322464,36.323243,36.325213,36.329173,36.333342,36.335244,36.334287,36.351892,36.348443,36.344775,36.336132,36.326042,36.322387,36.315228,36.30957,36.304645,36.298397,36.293556,36.287342,36.282316,36.274179,36.267193,36.257546,36.250897,36.24892,36.245165,36.241786,36.239009,36.110758,36.106923,36.101078,36.099206,36.096271,36.094552,36.096546,36.09577,36.097247,36.093686,36.088474,36.085616,36.084764,36.085749,36.084801,36.092826,36.093274,36.089236,36.089585,36.087991,36.080219,36.079278,36.080017,36.075881,36.076995,36.075083,36.075491,36.074045,36.072937,36.026437,36.024131,36.019544,36.015079,36.005158,35.999248,35.992939,35.981681,35.977167,35.974739,35.974782,35.977276,35.98155,35.987179,36.002345,36.025647,36.034456,36.061916,36.06816,36.075751,36.095886]}]],[[{"lng":[-82.9811,-82.981439,-82.985475,-82.98862,-82.985995,-82.985196,-82.986145,-82.988365,-82.9886,-82.986779,-82.983142,-82.971945,-82.969104,-82.967356,-82.962819,-82.960183,-82.960803,-82.959613,-82.959346,-82.953945,-82.945553,-82.935544,-82.931819,-82.931332,-82.927787,-82.927127,-82.928395,-82.924839,-82.925139,-82.923412,-82.922215,-82.920147,-82.919234,-82.921183,-82.919922,-82.922245,-82.921132,-82.917214,-82.914756,-82.91108,-82.902703,-82.885285,-82.88289,-82.881099,-82.876546,-82.871134,-82.867483,-82.861089,-82.858287,-82.85393,-82.846414,-82.831511,-82.828412,-82.824775,-82.825198,-82.822704,-82.816313,-82.81315,-82.814799,-82.804863,-82.801161,-82.797558,-82.797642,-82.795446,-82.791739,-82.787949,-82.782749,-82.782057,-82.777788,-82.774672,-82.764144,-82.759832,-82.75328,-82.750538,-82.745972,-82.746531,-82.749461,-82.745209,-82.648584,-82.624531,-82.619513,-82.622343,-82.62376,-82.618893,-82.610203,-82.61615,-82.614427,-82.611358,-82.604213,-82.603928,-82.590616,-82.589252,-82.585684,-82.586556,-82.585155,-82.579034,-82.577215,-82.577712,-82.574907,-82.577314,-82.578902,-82.583166,-82.588158,-82.59185,-82.59243,-82.59814,-82.606301,-82.613082,-82.614905,-82.622425,-82.624148,-82.625192,-82.624575,-82.628837,-82.636236,-82.636477,-82.639718,-82.641513,-82.645295,-82.652191,-82.651963,-82.654984,-82.656661,-82.660718,-82.662381,-82.666627,-82.66943,-82.673272,-82.674457,-82.673082,-82.674615,-82.681443,-82.683137,-82.687084,-82.686128,-82.686738,-82.692445,-82.694566,-82.693257,-82.687282,-82.686484,-82.697945,-82.699398,-82.700273,-82.70812,-82.709473,-82.710217,-82.715297,-82.718355,-82.720442,-82.723462,-82.72701,-82.729517,-82.729583,-82.734335,-82.734136,-82.736139,-82.738885,-82.738757,-82.740921,-82.743836,-82.751066,-82.752183,-82.751265,-82.753607,-82.756649,-82.764552,-82.768804,-82.770855,-82.771854,-82.775071,-82.782036,-82.781716,-82.779394,-82.780473,-82.777584,-82.77627,-82.778947,-82.784838,-83.008597,-83.014156,-83.016993,-83.018074,-83.028716,-83.032545,-83.033353,-83.035077,-83.035878,-83.037975,-83.037881,-83.039544,-83.043719,-83.04865,-83.056755,-83.052438,-83.048426,-83.048875,-83.048,-83.043362,-83.045044,-83.044764,-83.041694,-83.037448,-83.03617,-82.983329,-82.979013,-82.976596,-82.976414,-82.979606,-82.978553,-82.981534,-82.979999,-82.980791,-82.984758,-82.988904,-82.992876,-82.99485,-82.997744,-82.995807,-82.996613,-82.9811],"lat":[35.167664,35.169533,35.171501,35.174692,35.177321,35.180213,35.182208,35.182791,35.185048,35.187762,35.190115,35.192425,35.194038,35.19971,35.20123,35.20519,35.210267,35.212202,35.215892,35.217572,35.223021,35.225035,35.228882,35.232448,35.236322,35.238504,35.24179,35.245203,35.254579,35.257039,35.263358,35.265652,35.270864,35.27297,35.275853,35.282904,35.291685,35.29202,35.297317,35.298548,35.305346,35.307983,35.30892,35.311669,35.314576,35.312353,35.315946,35.314559,35.317092,35.316654,35.318815,35.318785,35.323566,35.324295,35.327606,35.331865,35.334162,35.339281,35.344281,35.348233,35.35619,35.358706,35.361384,35.364954,35.366888,35.380942,35.383055,35.386762,35.388473,35.393468,35.397021,35.40184,35.403872,35.406553,35.407108,35.410512,35.413062,35.422924,35.330074,35.309246,35.303758,35.302737,35.296019,35.288582,35.288272,35.260182,35.259756,35.261559,35.25886,35.222038,35.161801,35.159707,35.158726,35.155686,35.151547,35.149841,35.148153,35.146439,35.145487,35.144429,35.141172,35.142762,35.142928,35.141216,35.139002,35.137729,35.139631,35.139726,35.136391,35.134755,35.133386,35.131837,35.130568,35.125785,35.125495,35.130357,35.1298,35.132342,35.126807,35.126047,35.122973,35.1212,35.118798,35.119322,35.118123,35.118175,35.120603,35.11748,35.118474,35.121502,35.126435,35.127918,35.125953,35.125116,35.12285,35.11979,35.118669,35.115325,35.113048,35.110667,35.108164,35.095359,35.09597,35.100851,35.096054,35.096521,35.094574,35.092943,35.094027,35.093265,35.094341,35.094142,35.09059,35.087626,35.087048,35.084653,35.081398,35.081064,35.0782,35.078059,35.080039,35.081481,35.079765,35.073463,35.069331,35.067287,35.06817,35.06689,35.067415,35.065804,35.064662,35.065019,35.067315,35.070312,35.072403,35.075431,35.080834,35.083974,35.085699,35.027547,35.034138,35.035101,35.037003,35.039876,35.03775,35.040554,35.040428,35.041789,35.042176,35.045236,35.048138,35.051187,35.050863,35.053806,35.055703,35.061168,35.063732,35.065971,35.071463,35.074109,35.077394,35.079426,35.079568,35.082826,35.131904,35.130229,35.132977,35.134729,35.139041,35.140886,35.143497,35.146241,35.148268,35.150349,35.148211,35.153122,35.153626,35.158408,35.161106,35.163666,35.167664]}]],[[{"lng":[-76.3955,-76.397933,-76.401774,-76.447583,-76.491405,-76.491477,-76.437227,-76.42325,-76.421323,-76.414691,-76.4118,-76.410866,-76.408372,-76.406757,-76.398509,-76.394428,-76.387376,-76.382502,-76.376778,-76.376723,-76.375562,-76.371497,-76.372119,-76.367897,-76.3675,-76.369169,-76.367694,-76.367664,-76.364405,-76.357744,-76.347631,-76.347517,-76.348649,-76.345277,-76.341368,-76.338196,-76.336665,-76.333096,-76.328984,-76.328673,-76.322036,-76.320716,-76.320149,-76.323095,-76.323094,-76.314765,-76.314453,-76.311933,-76.310262,-76.310601,-76.30185,-76.300605,-76.291969,-76.287467,-76.285229,-76.282086,-76.279821,-76.273535,-76.258727,-76.257341,-76.257768,-76.259213,-76.256699,-76.25738,-76.260214,-76.25747,-76.254413,-76.250119,-76.248163,-76.243436,-76.237581,-76.234779,-76.231705,-76.230943,-76.231372,-76.226232,-76.226059,-76.227886,-76.227631,-76.225209,-76.216986,-76.214525,-76.214319,-76.218257,-76.217858,-76.216114,-76.212474,-76.203607,-76.191352,-76.184051,-76.181383,-76.183139,-76.188428,-76.192357,-76.197042,-76.199767,-76.201161,-76.201225,-76.203953,-76.209081,-76.212225,-76.217046,-76.217074,-76.210452,-76.20457,-76.197654,-76.182286,-76.179314,-76.176872,-76.172197,-76.165027,-76.146981,-76.137603,-76.123943,-76.120728,-76.106678,-76.101883,-76.09812,-76.090939,-76.070297,-76.067728,-76.045077,-76.031703,-76.028224,-76.019147,-76.030144,-76.041881,-76.058217,-76.076074,-76.101065,-76.157953,-76.178743,-76.182749,-76.194668,-76.215507,-76.223804,-76.228685,-76.234886,-76.240324,-76.251408,-76.25988,-76.271928,-76.273124,-76.273284,-76.279305,-76.280101,-76.286493,-76.288403,-76.288386,-76.285006,-76.285016,-76.287523,-76.289825,-76.289948,-76.303654,-76.304416,-76.306988,-76.307609,-76.315127,-76.315975,-76.317671,-76.324737,-76.332115,-76.337371,-76.340961,-76.343364,-76.343196,-76.347974,-76.361033,-76.37466,-76.377732,-76.375609,-76.37572,-76.377189,-76.381261,-76.386288,-76.391942,-76.392082,-76.394825,-76.394275,-76.3955],"lat":[36.297013,36.300326,36.30159,36.363624,36.468648,36.510536,36.467893,36.464616,36.461914,36.46038,36.458341,36.456418,36.455799,36.454013,36.455453,36.454468,36.447207,36.447228,36.445646,36.443219,36.442119,36.441615,36.439577,36.439968,36.438846,36.435068,36.433764,36.431566,36.429575,36.426441,36.428025,36.425507,36.423401,36.421295,36.421824,36.424755,36.424298,36.425442,36.423789,36.424735,36.427362,36.426062,36.422559,36.419972,36.417224,36.410722,36.408341,36.407609,36.405731,36.402045,36.400556,36.39568,36.386864,36.385031,36.388877,36.388327,36.386403,36.388187,36.383991,36.38193,36.378336,36.376619,36.373014,36.369969,36.366467,36.363535,36.362756,36.363738,36.365133,36.366052,36.371893,36.372708,36.372148,36.370204,36.361605,36.355286,36.352884,36.350267,36.348824,36.346491,36.344206,36.341841,36.340704,36.333569,36.330305,36.327634,36.326879,36.328413,36.328102,36.324503,36.321959,36.317102,36.31458,36.314369,36.317875,36.317968,36.314045,36.305155,36.304144,36.305272,36.304648,36.301512,36.298409,36.298334,36.296818,36.291301,36.293395,36.292954,36.291363,36.282713,36.277348,36.276463,36.273326,36.263543,36.260129,36.241844,36.231125,36.227186,36.22359,36.217741,36.215336,36.179395,36.163416,36.15595,36.097625,36.093898,36.087235,36.080593,36.075629,36.069526,36.059517,36.111193,36.114212,36.117738,36.130361,36.139669,36.149892,36.155128,36.163756,36.169489,36.179527,36.185723,36.187608,36.195179,36.198244,36.20319,36.209674,36.213118,36.213941,36.214671,36.215993,36.217854,36.21802,36.223207,36.221789,36.225819,36.227651,36.230284,36.233306,36.238,36.240358,36.240288,36.244134,36.240629,36.241544,36.242986,36.246375,36.249601,36.25256,36.25852,36.268639,36.272018,36.274033,36.275682,36.275913,36.283401,36.287434,36.290777,36.292357,36.295689,36.297013]}]],[[{"lng":[-78.014437,-78.015156,-78.015924,-78.0161,-78.016887,-78.018393,-78.021499,-78.023827,-78.024973,-78.024736,-78.028849,-78.030345,-78.031395,-78.030246,-78.031192,-78.032179,-78.032903,-78.035413,-78.037089,-78.038835,-78.037456,-78.038877,-78.039203,-78.045076,-78.045183,-78.043253,-78.044524,-78.04798,-78.04922,-78.051253,-78.05788,-78.058673,-78.057995,-78.059805,-78.060733,-78.063647,-78.064155,-78.066222,-78.069691,-78.070959,-78.07146,-78.073988,-78.073926,-78.074522,-78.077056,-78.083054,-78.085459,-78.084917,-78.09048,-78.091679,-78.091923,-78.094098,-78.097324,-78.09832,-78.102697,-78.104934,-78.106932,-78.110097,-78.110728,-78.109278,-78.110323,-78.110697,-78.111597,-78.112066,-78.114139,-78.114858,-78.116438,-78.117314,-78.119111,-78.121897,-78.123322,-78.124792,-78.125751,-78.126271,-78.12537,-78.126785,-78.126471,-78.125304,-78.130844,-78.131438,-78.132786,-78.13267,-78.135287,-78.139848,-78.142357,-78.149096,-78.157287,-78.173168,-78.188946,-78.19334,-78.196559,-78.198763,-78.201014,-78.210453,-78.215686,-78.217429,-78.224876,-78.230205,-78.231921,-78.235556,-78.240323,-78.307012,-78.304831,-78.302138,-78.292242,-78.290908,-78.277472,-78.323912,-77.899771,-77.900035,-77.89795,-77.906734,-77.91173,-77.91169,-77.918003,-77.920079,-77.919084,-77.916867,-77.911931,-77.912023,-77.944129,-78.006554,-78.007809,-78.008825,-78.008595,-78.011135,-78.011723,-78.014262,-78.014437],"lat":[36.20723,36.20755,36.206442,36.207815,36.207772,36.20527,36.205085,36.208332,36.207964,36.209501,36.210602,36.214487,36.213479,36.211066,36.20902,36.208935,36.207183,36.207047,36.208748,36.20884,36.210759,36.210325,36.211077,36.212329,36.213169,36.213977,36.215533,36.214815,36.213233,36.213992,36.211021,36.211581,36.212466,36.212548,36.214267,36.214042,36.215667,36.216486,36.215212,36.216689,36.215321,36.215557,36.214558,36.215178,36.21162,36.212734,36.209972,36.20939,36.208911,36.207675,36.209421,36.210365,36.208986,36.210924,36.209083,36.210774,36.209895,36.210372,36.212178,36.213315,36.213963,36.216247,36.215994,36.21751,36.216235,36.216795,36.218755,36.222538,36.224371,36.224211,36.22633,36.225599,36.226336,36.228621,36.228944,36.230796,36.233316,36.234628,36.240529,36.243511,36.244566,36.246362,36.245842,36.247409,36.246466,36.246825,36.244565,36.255502,36.247707,36.246922,36.248459,36.25174,36.250773,36.252573,36.251918,36.253631,36.256534,36.255934,36.25746,36.258277,36.257863,36.266159,36.268167,36.274708,36.284982,36.290373,36.30625,36.543809,36.544663,36.532966,36.506849,36.491537,36.475444,36.442843,36.440204,36.436136,36.431392,36.427401,36.424569,36.38227,36.297394,36.202663,36.204317,36.203923,36.20487,36.204881,36.206105,36.205396,36.20723]}]],[[{"lng":[-81.462917,-81.46105,-81.464198,-81.464239,-81.466552,-81.465656,-81.467777,-81.471872,-81.478038,-81.475556,-81.465673,-81.458402,-81.458323,-81.452627,-81.451838,-81.446806,-81.441992,-81.44198,-81.430449,-81.429686,-81.431045,-81.429579,-81.417609,-81.413865,-81.413982,-81.414804,-81.417745,-81.41692,-81.40957,-81.404383,-81.388009,-81.387018,-81.378809,-81.374287,-81.370109,-81.366276,-81.370593,-81.36536,-81.363858,-81.363203,-81.361292,-81.36037,-81.357488,-81.355187,-81.357831,-81.356764,-81.35768,-81.36109,-81.362163,-81.353812,-81.346025,-81.34629,-81.341749,-81.342039,-81.339417,-81.340815,-81.332685,-81.332107,-81.323281,-81.31939,-81.318135,-81.312103,-81.308615,-81.304257,-81.303068,-81.298522,-81.292097,-81.286443,-81.280005,-81.271516,-81.267366,-81.267575,-81.266184,-81.261404,-81.260859,-81.258487,-81.255721,-81.249761,-81.243151,-81.241401,-81.238148,-81.238107,-81.230827,-81.220096,-81.212516,-81.189256,-81.162895,-81.160364,-81.149112,-81.146354,-81.142614,-81.138899,-81.138248,-81.132626,-81.128275,-81.128383,-81.121354,-81.112242,-81.103234,-81.09895,-81.094829,-81.091517,-81.083558,-81.083278,-81.078728,-81.079631,-81.077627,-81.044272,-81.043789,-81.026688,-81.013615,-80.994653,-80.981366,-80.979425,-80.98186,-80.979507,-80.97624,-80.970746,-80.967066,-80.939372,-80.931097,-80.922719,-80.920263,-80.916416,-80.911863,-80.904449,-80.903295,-80.89909,-80.897888,-80.898856,-80.896588,-80.895511,-80.892067,-80.885074,-80.882902,-80.878094,-80.875427,-80.871528,-80.868871,-80.88218,-80.975643,-81.048351,-81.057556,-81.098014,-81.099178,-81.106417,-81.112356,-81.115735,-81.121913,-81.123729,-81.137058,-81.139724,-81.146246,-81.166642,-81.169843,-81.173124,-81.1758,-81.180874,-81.182361,-81.185722,-81.188242,-81.190911,-81.195921,-81.202629,-81.207569,-81.211915,-81.219404,-81.230139,-81.232559,-81.237599,-81.240663,-81.241039,-81.24453,-81.249521,-81.252683,-81.256682,-81.267889,-81.27207,-81.282759,-81.282681,-81.284559,-81.283768,-81.288478,-81.289512,-81.300583,-81.301192,-81.308514,-81.314066,-81.314017,-81.317767,-81.322456,-81.32696,-81.344136,-81.365893,-81.369374,-81.374684,-81.376697,-81.380111,-81.381479,-81.395568,-81.396696,-81.391725,-81.392084,-81.38999,-81.390606,-81.397453,-81.399889,-81.406561,-81.407859,-81.409629,-81.410185,-81.414794,-81.417022,-81.424487,-81.429622,-81.439589,-81.444035,-81.444539,-81.4472,-81.447437,-81.452758,-81.453939,-81.45299,-81.456361,-81.461598,-81.469208,-81.469281,-81.477661,-81.477668,-81.484327,-81.488703,-81.493582,-81.49556,-81.498391,-81.508684,-81.51684,-81.517176,-81.520025,-81.520334,-81.545455,-81.499438,-81.455579,-81.460048,-81.462917],"lat":[36.208693,36.211621,36.21421,36.216954,36.219378,36.225497,36.227811,36.22838,36.234895,36.253105,36.251592,36.248484,36.250917,36.258412,36.257538,36.26085,36.261004,36.262791,36.266313,36.272317,36.27554,36.277443,36.278075,36.281143,36.28497,36.28397,36.291975,36.295116,36.295592,36.291693,36.285813,36.28265,36.277983,36.284713,36.286374,36.286065,36.289602,36.294479,36.301131,36.302139,36.300644,36.302743,36.302279,36.303859,36.307879,36.311755,36.313538,36.312764,36.313914,36.356228,36.360061,36.355487,36.3567,36.358456,36.359598,36.364945,36.370581,36.372306,36.377118,36.37632,36.370716,36.370416,36.367794,36.367165,36.368474,36.368814,36.366836,36.368862,36.363306,36.363987,36.363213,36.361681,36.361175,36.365034,36.3635,36.363063,36.36322,36.366691,36.365586,36.367654,36.368179,36.37036,36.374984,36.37754,36.385558,36.399351,36.432488,36.428999,36.425251,36.419659,36.419164,36.415127,36.412448,36.415484,36.42213,36.425833,36.429179,36.429596,36.434681,36.439236,36.440433,36.435566,36.433232,36.429676,36.425967,36.422566,36.417776,36.411063,36.393323,36.373195,36.371271,36.379399,36.376189,36.379031,36.387923,36.391111,36.390976,36.395927,36.4016,36.383448,36.367135,36.364429,36.367268,36.367931,36.362753,36.361004,36.356806,36.354582,36.351253,36.347423,36.345996,36.342994,36.340078,36.337756,36.335327,36.334377,36.329694,36.329247,36.326516,36.055731,36.058814,36.041184,36.031322,36.028317,36.030997,36.036784,36.037717,36.034485,36.035438,36.037694,36.036342,36.037648,36.033561,36.025654,36.025525,36.026524,36.031182,36.033422,36.032793,36.035122,36.034549,36.036949,36.035047,36.036712,36.032304,36.03376,36.029753,36.031447,36.030092,36.030524,36.028306,36.026155,36.025154,36.027187,36.025403,36.02643,36.025064,36.021649,36.017716,36.016344,36.015444,36.013077,36.011693,36.009877,36.006038,36.00411,36.005306,36.004458,36.001755,35.996928,35.996864,35.9948,36.022757,36.032717,36.040203,36.037119,36.040786,36.040698,36.044611,36.041123,36.042951,36.046777,36.048483,36.049682,36.051619,36.056651,36.062588,36.067009,36.070634,36.070494,36.072076,36.072659,36.071268,36.077968,36.075794,36.074828,36.072408,36.075359,36.078127,36.083452,36.087045,36.088661,36.090113,36.091489,36.090476,36.084864,36.087187,36.092502,36.096737,36.095796,36.098223,36.097326,36.100348,36.100401,36.097099,36.097433,36.099232,36.100401,36.102508,36.117398,36.143014,36.199749,36.202005,36.208693]}]],[[{"lng":[-81.083744,-81.245735,-81.249802,-81.279846,-81.456505,-81.477631,-81.512457,-81.507554,-81.519387,-81.53776,-81.534359,-81.49872,-81.382476,-81.374297,-81.259243,-81.232998,-81.229168,-81.223239,-80.998023,-80.977622,-80.973872,-80.960029,-80.959959,-80.958028,-80.947492,-80.941951,-80.941467,-80.94304,-80.946298,-80.9537,-80.955351,-80.957564,-80.956922,-80.954922,-80.956459,-80.964079,-80.963484,-80.961229,-80.958609,-80.949316,-80.947658,-80.945211,-80.948143,-80.951747,-80.950518,-80.943487,-80.942299,-80.943013,-80.946174,-80.950183,-80.953067,-80.95603,-80.958691,-80.955208,-80.955639,-80.958769,-80.957227,-80.955388,-81.083744],"lat":[35.406213,35.411927,35.412795,35.413903,35.419616,35.46432,35.522413,35.545725,35.557891,35.564472,35.568811,35.568744,35.56365,35.562647,35.559124,35.557919,35.556761,35.557533,35.548772,35.548295,35.549027,35.54781,35.546227,35.543914,35.537506,35.530901,35.528276,35.526852,35.527204,35.532753,35.532676,35.526059,35.521514,35.516505,35.513801,35.506108,35.500134,35.496938,35.495017,35.492354,35.490415,35.483902,35.480044,35.46845,35.465025,35.459647,35.456699,35.452997,35.449724,35.447659,35.441275,35.438075,35.432634,35.421447,35.418917,35.413209,35.404867,35.400833,35.406213]}]],[[{"lng":[-78.12476,-78.057962,-77.998381,-77.823471,-77.82426,-77.826806,-77.827,-77.824631,-77.821158,-77.818414,-77.813327,-77.80559,-77.804298,-77.803983,-77.799961,-77.802489,-77.802758,-77.817248,-77.819127,-77.819243,-77.824408,-77.83425,-77.875232,-77.884349,-77.889706,-77.890665,-77.892879,-77.894225,-77.894985,-77.893067,-77.893293,-77.895531,-77.898422,-77.903947,-77.909607,-77.910328,-77.914066,-77.916161,-77.919224,-77.924249,-77.928921,-77.935713,-77.943096,-77.947184,-77.953868,-77.972333,-77.973325,-77.980028,-77.980115,-77.984074,-77.994692,-78.001028,-78.007525,-78.016979,-78.020722,-78.032244,-78.044982,-78.059558,-78.076514,-78.097656,-78.163539,-78.16168,-78.237889,-78.247459,-78.252216,-78.267139,-78.269258,-78.304662,-78.287595,-78.272989,-78.26782,-78.257016,-78.249716,-78.248629,-78.241687,-78.220715,-78.21894,-78.216298,-78.218189,-78.216469,-78.213587,-78.211974,-78.210384,-78.209797,-78.205948,-78.201972,-78.197582,-78.196723,-78.186942,-78.184867,-78.179744,-78.177875,-78.174407,-78.170535,-78.168007,-78.16498,-78.160795,-78.158688,-78.153438,-78.154385,-78.153908,-78.155174,-78.157012,-78.160075,-78.157908,-78.162103,-78.162176,-78.157512,-78.15098,-78.146055,-78.14429,-78.145067,-78.150042,-78.154015,-78.154889,-78.12476],"lat":[35.473585,35.59777,35.585635,35.585523,35.499028,35.469542,35.431151,35.423152,35.420558,35.415911,35.413808,35.407469,35.403093,35.395222,35.382232,35.376883,35.372909,35.358427,35.355465,35.351903,35.343961,35.177814,35.166697,35.162958,35.159278,35.156995,35.156521,35.154304,35.151183,35.148137,35.146451,35.148282,35.148473,35.154564,35.158014,35.16282,35.166661,35.166712,35.169818,35.171202,35.174152,35.171135,35.172391,35.171744,35.165691,35.16505,35.167342,35.171487,35.177619,35.183668,35.182921,35.188889,35.190976,35.190887,35.194249,35.191968,35.192359,35.185826,35.174331,35.177475,35.18937,35.204252,35.223306,35.226986,35.233445,35.247159,35.250656,35.286097,35.315047,35.319286,35.325045,35.325524,35.321943,35.320384,35.320496,35.331224,35.333032,35.333571,35.338902,35.340929,35.340527,35.34232,35.341769,35.339917,35.339801,35.341353,35.340197,35.343662,35.34271,35.345348,35.343973,35.346112,35.347273,35.346363,35.347878,35.346476,35.349384,35.347605,35.350493,35.353223,35.356464,35.357244,35.3563,35.35668,35.35992,35.365589,35.368159,35.374781,35.378251,35.382742,35.386635,35.38847,35.391756,35.391981,35.417627,35.473585]}]],[[{"lng":[-83.213263,-83.220404,-83.223705,-83.222579,-83.225358,-83.223872,-83.224434,-83.222592,-83.218587,-83.219228,-83.217591,-83.219486,-83.219344,-83.21616,-83.218464,-83.216513,-83.221749,-83.223695,-83.232724,-83.242934,-83.242564,-83.244924,-83.245266,-83.261521,-83.272114,-83.281733,-83.284308,-83.290999,-83.294058,-83.294267,-83.296809,-83.295737,-83.298419,-83.308257,-83.310823,-83.310041,-83.315933,-83.316115,-83.313971,-83.3156,-83.313531,-83.311944,-83.318283,-83.316289,-83.317221,-83.322547,-83.321966,-83.322923,-83.321035,-83.327196,-83.330383,-83.334195,-83.334682,-83.340738,-83.340302,-83.335848,-83.336672,-83.331635,-83.331693,-83.335317,-83.3347,-83.336965,-83.338401,-83.337419,-83.345737,-83.342991,-83.340327,-83.341034,-83.343531,-83.345059,-83.349109,-83.347955,-83.351924,-83.356203,-83.360681,-83.360607,-83.362477,-83.362099,-83.363754,-83.357364,-83.359002,-83.351804,-83.345289,-83.342119,-83.335764,-83.331589,-83.325077,-83.317942,-83.311939,-83.308861,-83.305396,-83.296606,-83.291615,-83.284804,-83.286379,-83.283349,-83.275488,-83.272475,-83.264416,-83.264506,-83.261645,-83.257487,-83.254645,-83.241913,-83.237169,-83.232729,-83.22849,-83.218746,-83.215499,-83.215118,-83.211573,-83.20854,-83.207001,-83.204858,-83.195814,-83.186052,-83.185039,-83.163865,-83.160507,-83.160876,-83.157943,-83.15283,-83.142062,-83.137783,-83.140398,-83.136369,-83.137938,-83.136342,-83.137608,-83.131941,-83.122204,-83.118901,-83.108815,-83.092564,-83.089934,-83.089903,-83.079746,-83.08042,-83.079014,-83.079992,-83.075926,-83.068111,-83.065226,-83.060928,-83.055752,-83.053312,-83.052957,-83.044933,-83.044958,-83.043626,-83.042928,-83.043953,-83.04018,-83.030125,-83.027744,-83.02798,-83.02298,-83.020232,-83.017545,-83.007224,-82.996829,-82.99367,-82.990348,-82.989648,-82.987107,-82.986354,-82.977147,-82.977611,-82.971607,-82.964658,-82.965298,-82.963721,-82.9655,-82.964815,-82.954991,-82.954578,-82.951228,-82.949799,-82.940369,-82.935507,-82.932808,-82.931645,-82.927467,-82.924622,-82.920819,-82.922245,-82.919922,-82.921183,-82.919234,-82.920147,-82.922215,-82.923412,-82.925139,-82.924839,-82.928395,-82.927127,-82.928446,-82.931332,-82.931819,-82.935544,-82.945553,-82.953945,-82.959346,-82.960803,-82.960183,-82.962819,-82.967356,-82.969104,-82.971945,-82.983142,-82.9886,-82.988365,-82.986145,-82.985196,-82.988509,-82.981439,-82.9811,-82.996613,-82.995807,-82.997744,-82.99485,-82.992876,-82.988904,-82.984758,-82.980791,-82.979999,-82.981534,-82.978553,-82.979606,-82.976414,-82.976596,-82.979013,-82.983329,-83.03617,-83.037448,-83.041694,-83.044764,-83.045044,-83.043362,-83.048,-83.048426,-83.052438,-83.056755,-83.04865,-83.043719,-83.039544,-83.037881,-83.037975,-83.033353,-83.032545,-83.028716,-83.018074,-83.008597,-83.108614,-83.10975,-83.108577,-83.111629,-83.112717,-83.117232,-83.126371,-83.12646,-83.129295,-83.130904,-83.13275,-83.128871,-83.129332,-83.135302,-83.139776,-83.139615,-83.142298,-83.148008,-83.155768,-83.163782,-83.171353,-83.169258,-83.169673,-83.171463,-83.17214,-83.164608,-83.160799,-83.158854,-83.143442,-83.144426,-83.146903,-83.147532,-83.151957,-83.152884,-83.160954,-83.166977,-83.171041,-83.177915,-83.178841,-83.183125,-83.183348,-83.185938,-83.186786,-83.191286,-83.193883,-83.200963,-83.20402,-83.206493,-83.209476,-83.209975,-83.213263],"lat":[35.158228,35.158877,35.157437,35.169292,35.177119,35.180897,35.188045,35.19286,35.193316,35.197063,35.200084,35.201331,35.206314,35.209553,35.221123,35.222993,35.229225,35.238012,35.240273,35.239137,35.237591,35.234425,35.231442,35.23113,35.228314,35.22887,35.231843,35.23373,35.236184,35.241605,35.242653,35.250098,35.255651,35.257092,35.259107,35.263877,35.264777,35.266454,35.269062,35.274062,35.276331,35.28177,35.289096,35.295554,35.298472,35.301382,35.306321,35.307404,35.311908,35.314881,35.314845,35.320293,35.325402,35.333266,35.33751,35.343264,35.3458,35.352863,35.354949,35.359303,35.369001,35.371336,35.37605,35.381998,35.389772,35.394229,35.395932,35.397462,35.397351,35.399603,35.401162,35.40548,35.411302,35.409913,35.4118,35.414526,35.417522,35.423281,35.426856,35.437549,35.439415,35.467513,35.473641,35.473074,35.474975,35.470116,35.468996,35.465231,35.47147,35.479289,35.478545,35.483953,35.483078,35.489511,35.492532,35.497632,35.500317,35.504569,35.506629,35.510667,35.514541,35.512969,35.513764,35.519017,35.52404,35.523246,35.525093,35.524506,35.520875,35.517925,35.517541,35.513626,35.513999,35.517309,35.518689,35.514573,35.510714,35.509156,35.501642,35.500101,35.496022,35.494364,35.493524,35.490199,35.484677,35.479235,35.475716,35.472964,35.464149,35.463114,35.465586,35.464307,35.46383,35.457642,35.452278,35.4483,35.447898,35.441578,35.43704,35.434363,35.430798,35.429135,35.426417,35.425053,35.425493,35.423999,35.421214,35.415432,35.408281,35.406978,35.397827,35.394393,35.393628,35.387169,35.38535,35.383166,35.379187,35.378628,35.379694,35.377325,35.372796,35.368616,35.367643,35.36322,35.360982,35.356097,35.350757,35.343435,35.342768,35.333095,35.331071,35.32359,35.319894,35.315181,35.316264,35.313717,35.312927,35.306424,35.305618,35.303929,35.305526,35.30345,35.303011,35.296691,35.291868,35.282904,35.275853,35.27297,35.270864,35.265652,35.263358,35.257039,35.254579,35.245203,35.24179,35.238504,35.235095,35.232448,35.228882,35.225035,35.223021,35.217572,35.215892,35.210267,35.20519,35.20123,35.19971,35.194038,35.192425,35.190115,35.185048,35.182791,35.182208,35.180213,35.174419,35.169533,35.167664,35.163666,35.161106,35.158408,35.153626,35.153122,35.148211,35.150349,35.148268,35.146241,35.143497,35.140886,35.139041,35.134729,35.132977,35.130229,35.131904,35.082826,35.079568,35.079426,35.077394,35.074109,35.071463,35.065971,35.061168,35.055703,35.053806,35.050863,35.051187,35.048138,35.045236,35.042176,35.040554,35.03775,35.039876,35.037003,35.027547,35.000659,35.00272,35.009492,35.011015,35.013276,35.011695,35.015795,35.023168,35.024877,35.031421,35.033962,35.038836,35.041528,35.03815,35.042179,35.04406,35.045436,35.053885,35.056496,35.056592,35.060707,35.061866,35.064433,35.065092,35.06896,35.071349,35.074432,35.07831,35.078777,35.083434,35.086296,35.093201,35.095189,35.098265,35.098415,35.105045,35.105144,35.109807,35.116565,35.119367,35.126841,35.128235,35.13345,35.135883,35.140006,35.145454,35.145979,35.149619,35.150378,35.15455,35.158228]}]],[[{"lng":[-78.456934,-78.46006,-78.458005,-78.459603,-78.461923,-78.462831,-78.46487,-78.466949,-78.465366,-78.482002,-78.486787,-78.490577,-78.489399,-78.493484,-78.492027,-78.495411,-78.494838,-78.499173,-78.502328,-78.502835,-78.5133,-78.512871,-78.515163,-78.512814,-78.51399,-78.52479,-78.526609,-78.534794,-78.535051,-78.546927,-78.545698,-78.541938,-78.543372,-78.54775,-78.553396,-78.562092,-78.564434,-78.570398,-78.57278,-78.57268,-78.583724,-78.584492,-78.588133,-78.59117,-78.595654,-78.598378,-78.602938,-78.605177,-78.607477,-78.611054,-78.614091,-78.620455,-78.627076,-78.627508,-78.633382,-78.637209,-78.634636,-78.635983,-78.646547,-78.647548,-78.645804,-78.647603,-78.645002,-78.650104,-78.650011,-78.65294,-78.65028,-78.649871,-78.655819,-78.653842,-78.654177,-78.658264,-78.653974,-78.661575,-78.660539,-78.664005,-78.662401,-78.662933,-78.670432,-78.672321,-78.670307,-78.663482,-78.658335,-78.65892,-78.657896,-78.654234,-78.652468,-78.654091,-78.652825,-78.647282,-78.641685,-78.639162,-78.641351,-78.650167,-78.652695,-78.652937,-78.648602,-78.642738,-78.64184,-78.638555,-78.635389,-78.634652,-78.636885,-78.638032,-78.636143,-78.6399,-78.637076,-78.633818,-78.632821,-78.63895,-78.635876,-78.632086,-78.629533,-78.63896,-78.640042,-78.635916,-78.640201,-78.646461,-78.646533,-78.642438,-78.636856,-78.624415,-78.625438,-78.630396,-78.631409,-78.623129,-78.619494,-78.617047,-78.618992,-78.615138,-78.616763,-78.609212,-78.599885,-78.598702,-78.584604,-78.583105,-78.585591,-78.583228,-78.585305,-78.5829,-78.583437,-78.581011,-78.575811,-78.572534,-78.570162,-78.557845,-78.559956,-78.555291,-78.548086,-78.541262,-78.491383,-78.410324,-78.363784,-78.304662,-78.246556,-78.16168,-78.164865,-78.163034,-78.170662,-78.171907,-78.159407,-78.160216,-78.151641,-78.15217,-78.154013,-78.149736,-78.149871,-78.146984,-78.161512,-78.167387,-78.167708,-78.185526,-78.186691,-78.200473,-78.152544,-78.143617,-78.133926,-78.115278,-78.115172,-78.113208,-78.114137,-78.156174,-78.254556,-78.260133,-78.251809,-78.254561,-78.254864,-78.257784,-78.262101,-78.260582,-78.263868,-78.262568,-78.26489,-78.266117,-78.271013,-78.273448,-78.27494,-78.274755,-78.28031,-78.279736,-78.2871,-78.288742,-78.292427,-78.290982,-78.294464,-78.298025,-78.303249,-78.302774,-78.305417,-78.303509,-78.303853,-78.306285,-78.304439,-78.306616,-78.310717,-78.312831,-78.311112,-78.314414,-78.313284,-78.317311,-78.316624,-78.319331,-78.322285,-78.321217,-78.314094,-78.317059,-78.311496,-78.313578,-78.31427,-78.319144,-78.318196,-78.320906,-78.322818,-78.324825,-78.321891,-78.326531,-78.325605,-78.327231,-78.326112,-78.32357,-78.325469,-78.327836,-78.327798,-78.330877,-78.33842,-78.342256,-78.3445,-78.345064,-78.346955,-78.34754,-78.344426,-78.346192,-78.346865,-78.348807,-78.350392,-78.349637,-78.355017,-78.35837,-78.361798,-78.362776,-78.360489,-78.361865,-78.365368,-78.366607,-78.373061,-78.374192,-78.369176,-78.371573,-78.36843,-78.377312,-78.376315,-78.377736,-78.376115,-78.382222,-78.379541,-78.379469,-78.382679,-78.383714,-78.392009,-78.392723,-78.390373,-78.38764,-78.393074,-78.393141,-78.390155,-78.392018,-78.390956,-78.400566,-78.40039,-78.403686,-78.403527,-78.407529,-78.405908,-78.409071,-78.410148,-78.414117,-78.414035,-78.420326,-78.424289,-78.423513,-78.430085,-78.428251,-78.429754,-78.438554,-78.439195,-78.437315,-78.444647,-78.440998,-78.449386,-78.447741,-78.448837,-78.451779,-78.456934],"lat":[34.812308,34.814128,34.816826,34.822005,34.821248,34.822563,34.820841,34.82287,34.8275,34.836935,34.835841,34.841099,34.842737,34.84318,34.849229,34.852448,34.858841,34.859301,34.8617,34.864663,34.869287,34.872337,34.875244,34.880744,34.882046,34.884105,34.891274,34.893749,34.895591,34.900875,34.90508,34.908046,34.913904,34.916966,34.914886,34.917966,34.925061,34.926835,34.929868,34.937092,34.938478,34.941769,34.942035,34.946693,34.94734,34.950916,34.951922,34.954325,34.95368,34.960801,34.960217,34.968203,34.971592,34.974373,34.980555,34.981171,34.985569,34.987411,34.991249,34.994593,35.003472,35.005606,35.010043,35.01484,35.018485,35.020626,35.023559,35.027262,35.03456,35.034339,35.036324,35.041742,35.04972,35.059779,35.063212,35.06713,35.069547,35.078279,35.081595,35.085364,35.09286,35.092248,35.094109,35.099944,35.101376,35.100844,35.102969,35.108408,35.110414,35.113135,35.113179,35.115968,35.121068,35.117445,35.117929,35.119694,35.125357,35.128201,35.131898,35.13268,35.137851,35.139828,35.141648,35.147676,35.150992,35.155048,35.157585,35.15704,35.163743,35.167002,35.170786,35.169775,35.171531,35.182231,35.185979,35.192091,35.192395,35.196683,35.198414,35.200918,35.197915,35.203583,35.205793,35.208059,35.21346,35.222202,35.223467,35.228033,35.234031,35.238296,35.246421,35.254187,35.258634,35.264969,35.27329,35.279151,35.284573,35.291001,35.293539,35.295539,35.296907,35.298231,35.296095,35.297633,35.302165,35.304648,35.30628,35.309664,35.310943,35.315116,35.263362,35.256383,35.271117,35.286097,35.226188,35.204252,35.178376,35.142996,35.11175,35.093302,35.079981,35.052075,35.005324,34.982365,34.973492,34.947636,34.928284,34.902321,34.86436,34.843806,34.834527,34.785577,34.777964,34.737301,34.72176,34.716945,34.705972,34.720195,34.721983,34.721969,34.70709,34.678594,34.553963,34.556039,34.562181,34.56421,34.568642,34.568291,34.571273,34.57438,34.576655,34.578587,34.57904,34.58397,34.581238,34.583113,34.581546,34.584297,34.589073,34.591158,34.593215,34.598036,34.596987,34.600461,34.60194,34.599894,34.600779,34.602887,34.603575,34.603962,34.60725,34.608552,34.610901,34.613353,34.612025,34.614034,34.615709,34.618876,34.625826,34.626295,34.628348,34.627115,34.628553,34.631183,34.633172,34.635729,34.641399,34.641438,34.644974,34.645852,34.646847,34.65,34.648761,34.649912,34.65296,34.656039,34.663397,34.664236,34.665907,34.665584,34.669582,34.669051,34.670973,34.672632,34.674642,34.679871,34.678839,34.680503,34.680174,34.682256,34.683815,34.68419,34.690586,34.688434,34.689342,34.692374,34.690252,34.692991,34.691389,34.693423,34.693859,34.695603,34.695188,34.693176,34.698979,34.701132,34.700396,34.702416,34.704412,34.70976,34.711157,34.712444,34.712721,34.717422,34.720535,34.72342,34.72367,34.726573,34.729906,34.732721,34.736727,34.737851,34.742175,34.743843,34.744855,34.748056,34.749725,34.751523,34.753177,34.754795,34.757246,34.757769,34.759687,34.761615,34.765572,34.766124,34.768202,34.765961,34.769847,34.773009,34.776378,34.780438,34.782279,34.785534,34.790643,34.792183,34.797673,34.80039,34.807694,34.810675,34.812628,34.814064,34.812308]}]],[[{"lng":[-76.127512,-76.119558,-76.118001,-76.12082,-76.1191,-76.104147,-76.098261,-76.092612,-76.083861,-76.074743,-76.059864,-76.040528,-76.035266,-76.030843,-76.027445,-75.901164,-75.898345,-75.890496,-75.891953,-75.889064,-75.883953,-75.876833,-75.879746,-75.879179,-75.868684,-75.73662,-75.812045,-75.897876,-75.928103,-75.950073,-75.985351,-76.002959,-76.006936,-76.006557,-76.065801,-76.35503,-76.448631,-76.472366,-76.518619,-76.538936,-76.558563,-76.562985,-76.575482,-76.584042,-76.585077,-76.581557,-76.579458,-76.58319,-76.596113,-76.601164,-76.604106,-76.604106,-76.599085,-76.58668,-76.562863,-76.524461,-76.500483,-76.491192,-76.478574,-76.467781,-76.467761,-76.479933,-76.482631,-76.49109,-76.500792,-76.50485,-76.501046,-76.506515,-76.513672,-76.518959,-76.518878,-76.524974,-76.52824,-76.538921,-76.539441,-76.534133,-76.533663,-76.542117,-76.550638,-76.5544,-76.554904,-76.56284,-76.564413,-76.573215,-76.574304,-76.577702,-76.57874,-76.591983,-76.606069,-76.600211,-76.601532,-76.638031,-76.521406,-76.269325,-76.297867,-76.285595,-76.270366,-76.265101,-76.252564,-76.246519,-76.229693,-76.225097,-76.215812,-76.20808,-76.204937,-76.20733,-76.201416,-76.201475,-76.198111,-76.199823,-76.195535,-76.199491,-76.196378,-76.196356,-76.194785,-76.194928,-76.198773,-76.196024,-76.197317,-76.194286,-76.193261,-76.184126,-76.177888,-76.180065,-76.178609,-76.181267,-76.175962,-76.175535,-76.16981,-76.175195,-76.171992,-76.176428,-76.175362,-76.167156,-76.172163,-76.172247,-76.168125,-76.162383,-76.141843,-76.137848,-76.131053,-76.127512],"lat":[35.690983,35.692465,35.690539,35.681692,35.679462,35.678197,35.670148,35.669434,35.675201,35.671594,35.675135,35.66274,35.662022,35.663227,35.669094,35.668998,35.661057,35.652259,35.643328,35.64194,35.632784,35.628117,35.614095,35.604172,35.579452,35.140565,35.114244,35.077122,35.059524,35.039617,35.013977,35.006392,35.006018,35.053869,35.125169,35.250071,35.331461,35.340534,35.348676,35.380382,35.403662,35.424383,35.436646,35.449142,35.457359,35.466798,35.485201,35.488907,35.493493,35.497664,35.505225,35.512386,35.51996,35.523254,35.52003,35.518701,35.5189,35.520857,35.530997,35.550929,35.556504,35.562852,35.567322,35.572522,35.570836,35.575755,35.579573,35.580774,35.575055,35.577766,35.584762,35.585402,35.58122,35.582806,35.586068,35.589708,35.595467,35.599104,35.596582,35.597865,35.600139,35.600584,35.603473,35.607783,35.611139,35.611193,35.614394,35.624328,35.646885,35.663892,35.669899,35.705233,35.704137,35.690722,35.609034,35.605052,35.607903,35.603319,35.605803,35.602406,35.599606,35.601557,35.597992,35.603081,35.607307,35.610135,35.612177,35.615108,35.616713,35.618223,35.620287,35.622139,35.622668,35.628507,35.628714,35.631095,35.633864,35.633499,35.636269,35.635805,35.645657,35.648409,35.654572,35.656662,35.659688,35.666521,35.664812,35.672559,35.672212,35.678019,35.682339,35.68618,35.69096,35.690972,35.694752,35.697153,35.698682,35.695778,35.70274,35.70062,35.691223,35.690983]}]],[[{"lng":[-77.957662,-77.955682,-77.957095,-77.960384,-77.960313,-77.959063,-77.954105,-77.954827,-77.9536,-77.954003,-77.951643,-77.954676,-77.954893,-77.957793,-77.96193,-77.955881,-77.958948,-77.964089,-77.968491,-77.969491,-77.965195,-77.964996,-77.967797,-77.969998,-77.9731,-77.975207,-77.978808,-77.980409,-77.98561,-77.987712,-77.988912,-77.987512,-77.991012,-78.000812,-78.002012,-77.999312,-77.991412,-77.990312,-77.990212,-77.992512,-77.996512,-78.00481,-78.005912,-78.004612,-78.005912,-78.007813,-78.014313,-78.015913,-78.017113,-78.014213,-78.014813,-78.012993,-78.007265,-78.006241,-78.008657,-78.012721,-78.015825,-78.022913,-78.026033,-78.027521,-78.025697,-78.027521,-78.029922,-77.993323,-77.995073,-77.993711,-77.98708,-77.979078,-77.978022,-77.980437,-77.9881,-77.987666,-77.983922,-77.975553,-77.970268,-77.961885,-77.960204,-77.958943,-77.961663,-77.959311,-77.951038,-77.94971,-77.950062,-77.94907,-77.939902,-77.939262,-77.94123,-77.940894,-77.93787,-77.93499,-77.93323,-77.935102,-77.934078,-77.93219,-77.930846,-77.93179,-77.928781,-77.922333,-77.917079,-77.908749,-77.900605,-77.899353,-77.899342,-77.89574,-77.88704,-77.8799,-77.871466,-77.858642,-77.843805,-77.831549,-77.825022,-77.822995,-77.820821,-77.820871,-77.818914,-77.816675,-77.81053,-77.80488,-77.805109,-77.807762,-77.80982,-77.81383,-77.815169,-77.81209,-77.812935,-77.812152,-77.789717,-77.753246,-77.751582,-77.747877,-77.744763,-77.740276,-77.741469,-77.739051,-77.737442,-77.732729,-77.726238,-77.718553,-77.675276,-77.691093,-77.700826,-77.709288,-77.722953,-77.724325,-77.730756,-77.739828,-77.74742,-77.747121,-77.749702,-77.753791,-77.774966,-77.785555,-77.800253,-77.830206,-77.842041,-77.840936,-77.855252,-77.862169,-77.863534,-77.867736,-77.874706,-77.884519,-77.886109,-77.894246,-77.895646,-77.89897,-77.898975,-77.895307,-77.896782,-77.893686,-77.897011,-77.948509,-77.941209,-77.93902,-77.935755,-77.931603,-77.931103,-77.934623,-77.936914,-77.953502,-77.955518,-77.95861,-77.957662],"lat":[34.188202,34.195015,34.199164,34.20328,34.205713,34.213057,34.226032,34.226609,34.227028,34.228093,34.232368,34.232318,34.234415,34.234445,34.239474,34.239636,34.242369,34.241602,34.242308,34.244011,34.247619,34.249221,34.252127,34.25163,34.247237,34.249359,34.260058,34.26086,34.259068,34.260069,34.262269,34.268269,34.270669,34.271569,34.273069,34.276169,34.278069,34.278969,34.281669,34.283669,34.284369,34.28047,34.281769,34.286769,34.288869,34.290169,34.289469,34.290269,34.292769,34.302568,34.307468,34.312568,34.315624,34.319512,34.322552,34.323176,34.322536,34.318008,34.317992,34.320152,34.327736,34.3306,34.331768,34.337194,34.340071,34.344764,34.352857,34.355449,34.357993,34.361065,34.363881,34.371144,34.37308,34.372344,34.377715,34.382845,34.382684,34.380863,34.373432,34.369864,34.364504,34.366232,34.370456,34.371496,34.369832,34.367976,34.364616,34.36268,34.359064,34.358024,34.359272,34.364392,34.367016,34.36804,34.367448,34.361528,34.361544,34.367672,34.375726,34.374936,34.377955,34.375168,34.366207,34.363848,34.364243,34.366282,34.373332,34.379695,34.380861,34.386366,34.387596,34.389359,34.386562,34.384574,34.385756,34.382162,34.382009,34.37685,34.37412,34.373614,34.368803,34.368387,34.367205,34.365033,34.364196,34.358874,34.337909,34.305987,34.303302,34.303292,34.300953,34.30159,34.296376,34.29274,34.292248,34.294094,34.292469,34.295228,34.25313,34.245744,34.235999,34.221813,34.209997,34.203783,34.189788,34.180542,34.175594,34.171021,34.161214,34.155023,34.138665,34.125171,34.090712,34.030283,34.000173,34.000173,33.960095,33.948609,33.93467,33.927589,33.919612,33.90367,33.891195,33.878655,33.863908,33.854639,33.848528,33.835305,33.81971,33.804702,33.7868,33.970873,33.983173,33.99625,34.004968,34.036381,34.058884,34.087218,34.122822,34.153547,34.164906,34.17377,34.188202]}]],[[{"lng":[-82.61044,-82.607762,-82.603908,-82.60037,-82.591977,-82.581003,-82.577719,-82.576678,-82.57517,-82.569744,-82.567504,-82.557874,-82.549682,-82.545177,-82.542463,-82.534389,-82.530973,-82.527319,-82.525031,-82.521783,-82.517242,-82.513245,-82.510472,-82.505384,-82.501021,-82.500861,-82.498278,-82.496249,-82.496581,-82.485093,-82.479846,-82.479871,-82.48696,-82.490679,-82.498479,-82.497585,-82.493448,-82.493204,-82.490711,-82.489773,-82.494553,-82.486131,-82.482866,-82.474914,-82.471936,-82.468719,-82.46563,-82.46356,-82.453252,-82.448406,-82.446901,-82.442263,-82.443154,-82.440014,-82.432532,-82.430997,-82.423685,-82.425412,-82.425378,-82.417586,-82.418411,-82.417352,-82.419601,-82.416153,-82.412094,-82.414401,-82.413878,-82.409981,-82.409207,-82.411809,-82.418084,-82.427062,-82.435433,-82.44381,-82.446788,-82.454046,-82.463383,-82.464773,-82.464862,-82.475806,-82.485737,-82.48871,-82.494902,-82.508077,-82.514519,-82.522411,-82.525514,-82.534939,-82.536293,-82.539317,-82.668092,-82.668417,-82.67776,-82.669937,-82.669542,-82.68526,-82.690433,-82.691986,-82.695098,-82.70099,-82.707338,-82.712162,-82.710018,-82.713773,-82.709542,-82.708949,-82.711008,-82.714045,-82.72075,-82.723664,-82.726443,-82.731016,-82.73281,-82.736783,-82.733267,-82.736109,-82.737584,-82.744949,-82.74612,-82.749078,-82.751458,-82.750018,-82.751467,-82.754446,-82.764173,-82.766201,-82.769423,-82.774844,-82.778533,-82.782042,-82.788599,-82.793238,-82.797424,-82.7976,-82.80642,-82.815871,-82.81892,-82.824576,-82.82636,-82.833515,-82.838365,-82.842642,-82.848708,-82.854016,-82.853905,-82.856837,-82.867538,-82.871024,-82.874536,-82.883665,-82.889374,-82.893928,-82.901186,-82.898657,-82.898186,-82.900586,-82.89869,-82.901861,-82.904637,-82.907506,-82.910389,-82.90664,-82.908547,-82.907597,-82.915503,-82.917623,-82.923183,-82.926439,-82.936243,-82.942425,-82.945855,-82.947878,-82.950343,-82.952976,-82.953325,-82.957214,-82.955181,-82.956729,-82.955332,-82.953559,-82.952589,-82.953046,-82.950233,-82.952276,-82.949859,-82.952407,-82.952962,-82.951833,-82.955561,-82.957267,-82.956762,-82.959508,-82.959876,-82.96164,-82.962843,-82.961723,-82.958463,-82.952026,-82.948024,-82.948539,-82.945515,-82.935957,-82.933181,-82.933955,-82.932845,-82.933995,-82.920211,-82.916273,-82.920974,-82.918505,-82.921391,-82.920609,-82.910726,-82.906371,-82.900407,-82.896237,-82.89798,-82.903561,-82.906407,-82.901109,-82.904543,-82.906119,-82.908417,-82.906917,-82.90822,-82.909876,-82.914503,-82.911695,-82.913337,-82.916824,-82.920396,-82.919895,-82.914381,-82.906008,-82.902097,-82.899007,-82.901713,-82.898491,-82.892285,-82.88913,-82.878777,-82.874161,-82.860923,-82.851603,-82.847512,-82.845843,-82.844593,-82.841259,-82.838831,-82.833812,-82.832879,-82.828933,-82.82186,-82.816129,-82.815128,-82.804997,-82.802768,-82.80577,-82.805851,-82.800431,-82.795091,-82.791458,-82.787465,-82.784536,-82.777751,-82.774905,-82.778625,-82.781809,-82.785558,-82.784166,-82.785704,-82.779397,-82.778589,-82.775781,-82.775866,-82.772565,-82.762065,-82.754465,-82.752165,-82.750065,-82.750665,-82.744565,-82.742265,-82.740065,-82.738865,-82.734265,-82.731865,-82.725065,-82.715965,-82.714864,-82.707465,-82.701665,-82.701065,-82.698265,-82.696865,-82.688865,-82.685365,-82.684265,-82.679265,-82.675065,-82.670665,-82.666765,-82.659165,-82.654815,-82.650165,-82.643565,-82.636379,-82.632265,-82.632065,-82.617964,-82.618164,-82.609463,-82.606163,-82.602363,-82.601763,-82.595563,-82.591964,-82.590963,-82.591063,-82.603263,-82.603963,-82.602864,-82.608263,-82.609463,-82.607563,-82.608262,-82.614363,-82.615062,-82.613028,-82.606944,-82.604239,-82.60674,-82.610885,-82.611602,-82.61044],"lat":[35.967209,35.966021,35.966398,35.964621,35.966382,35.965557,35.964195,35.959254,35.958383,35.957285,35.95555,35.953901,35.964275,35.965386,35.967994,35.970005,35.972267,35.972572,35.971055,35.974091,35.975776,35.975267,35.977189,35.97768,35.969618,35.965976,35.965388,35.962678,35.957253,35.953633,35.949253,35.947995,35.94401,35.936489,35.929936,35.925284,35.924042,35.921322,35.921456,35.919699,35.909412,35.907073,35.908975,35.909397,35.908043,35.903647,35.902477,35.899686,35.899708,35.896863,35.893205,35.887901,35.884706,35.87985,35.876998,35.874324,35.869565,35.865447,35.861299,35.85937,35.850763,35.847597,35.842118,35.829107,35.826835,35.82313,35.819716,35.818957,35.817116,35.814778,35.813294,35.813956,35.808371,35.809103,35.810776,35.807699,35.809729,35.807384,35.80171,35.798449,35.799876,35.802403,35.799776,35.803311,35.803194,35.797401,35.798538,35.794766,35.791161,35.791881,35.738068,35.734746,35.734573,35.730665,35.725842,35.726964,35.729901,35.733633,35.735012,35.734664,35.732153,35.732966,35.728748,35.72711,35.726866,35.725514,35.725054,35.717486,35.715556,35.717619,35.717222,35.722385,35.718109,35.716122,35.714086,35.71388,35.711812,35.714633,35.712538,35.712491,35.710892,35.70658,35.707109,35.703351,35.699792,35.70018,35.698067,35.700328,35.698687,35.699252,35.69596,35.696663,35.692213,35.68928,35.685714,35.689219,35.687997,35.688508,35.690509,35.692589,35.691757,35.699771,35.70207,35.699438,35.697278,35.693399,35.688795,35.688917,35.683627,35.67819,35.680797,35.681154,35.684964,35.68698,35.691055,35.695649,35.703667,35.708894,35.710024,35.714886,35.716233,35.720185,35.724993,35.727583,35.737577,35.744926,35.746804,35.745106,35.744881,35.740797,35.740687,35.739056,35.739755,35.742777,35.745826,35.747094,35.750499,35.757571,35.759241,35.758251,35.759154,35.762164,35.766028,35.770827,35.774385,35.776353,35.778337,35.779386,35.7827,35.782561,35.785118,35.787066,35.790704,35.791054,35.795111,35.800482,35.804075,35.816184,35.817803,35.819893,35.824661,35.825559,35.830463,35.832375,35.834641,35.836634,35.839385,35.841603,35.851073,35.859147,35.863099,35.868472,35.8686,35.87031,35.873335,35.879129,35.881278,35.880378,35.883693,35.892956,35.897011,35.902999,35.905074,35.907396,35.911099,35.911085,35.915154,35.916753,35.924113,35.924151,35.927224,35.9288,35.929683,35.926285,35.926816,35.930381,35.937713,35.945113,35.945474,35.948338,35.950328,35.952698,35.947769,35.949452,35.946127,35.946312,35.942061,35.941721,35.937447,35.935816,35.933207,35.932932,35.921839,35.923986,35.925654,35.927168,35.930129,35.935315,35.937938,35.944155,35.946617,35.950961,35.952163,35.963905,35.966912,35.971978,35.974792,35.974562,35.977795,35.981874,35.988825,35.99251,35.997001,35.999008,36.000803,36.000503,36.004803,36.004304,36.006104,36.006004,36.008804,36.009904,36.012504,36.012104,36.015004,36.015204,36.017604,36.018204,36.022804,36.028803,36.030104,36.032704,36.034404,36.034104,36.036004,36.038604,36.042304,36.045604,36.048405,36.048705,36.052805,36.052905,36.057105,36.056225,36.057805,36.062805,36.065903,36.065705,36.064205,36.055405,36.047005,36.044806,36.041006,36.039406,36.036006,36.036606,36.035706,36.033606,36.031506,36.023007,36.021207,36.017907,36.015307,36.011007,36.010207,36.008506,36.003506,36.000306,35.994,35.99217,35.987319,35.984446,35.974442,35.971418,35.967209]}]],[[{"lng":[-77.34953,-77.344426,-77.342462,-77.409122,-77.327637,-77.327355,-77.321435,-77.290693,-77.273169,-77.244015,-77.230852,-77.216399,-77.206733,-77.206169,-77.213248,-77.210535,-77.204931,-77.196453,-77.192733,-77.196536,-77.195944,-77.190817,-77.195969,-77.196504,-77.191041,-77.193349,-77.19639,-77.197771,-77.188903,-77.199175,-77.199178,-77.194352,-77.195723,-77.200881,-77.202296,-77.198004,-77.187548,-77.178062,-77.171683,-77.166466,-77.163286,-77.146516,-77.141082,-77.131394,-77.12962,-77.127122,-77.124681,-77.120998,-77.115327,-77.110674,-77.107781,-77.10346,-77.093131,-77.091976,-77.088214,-77.086915,-77.08414,-77.081737,-77.081065,-77.073775,-77.067245,-77.066344,-77.070595,-77.070117,-77.064176,-77.05956,-77.056295,-77.054943,-77.043684,-77.039125,-77.034707,-77.027699,-77.031981,-77.027479,-77.026806,-77.030579,-77.02574,-77.024279,-77.025238,-77.022173,-77.024424,-77.029796,-77.037476,-77.03669,-77.031151,-77.039539,-77.043863,-77.045557,-77.040247,-77.040725,-77.045044,-77.0447,-77.036072,-77.029087,-77.01561,-77.009958,-77.004898,-76.990239,-76.98791,-76.987237,-76.984284,-76.980376,-76.978558,-76.968762,-76.958242,-76.957388,-76.94739,-76.947421,-76.940972,-76.927507,-76.91783,-76.911796,-76.904757,-76.902406,-76.893322,-76.894556,-76.900611,-76.897359,-76.901957,-76.903721,-76.90288,-76.895788,-76.894276,-76.896405,-76.903526,-76.904285,-76.900698,-76.89265,-76.897225,-76.896917,-76.881356,-76.873912,-76.859036,-76.833879,-76.831607,-76.836384,-76.836514,-76.8349,-76.830195,-76.821692,-76.806232,-76.791145,-76.781369,-76.772437,-76.760795,-76.761187,-76.762878,-76.765159,-76.771659,-76.77175,-76.774295,-76.774945,-76.777585,-76.776828,-76.77868,-76.778736,-76.781093,-76.779999,-76.780674,-76.783763,-76.784292,-76.789282,-76.784653,-76.784802,-76.781948,-76.782567,-76.786938,-76.790997,-76.796176,-76.80329,-76.798586,-76.793512,-76.793741,-76.792382,-76.798505,-76.803724,-76.803149,-76.807038,-76.80844,-76.810944,-76.816313,-76.820543,-76.817414,-76.825668,-76.826882,-76.831628,-76.833206,-76.83099,-76.847008,-76.845119,-76.9138,-76.985749,-77.066416,-77.156476,-77.16388,-77.171977,-77.174034,-77.178857,-77.18261,-77.184443,-77.189079,-77.192671,-77.192241,-77.202396,-77.203842,-77.201365,-77.215348,-77.222978,-77.229024,-77.23867,-77.24667,-77.253014,-77.255647,-77.259888,-77.264528,-77.264849,-77.255251,-77.255209,-77.350602,-77.34953],"lat":[35.867381,35.875348,35.905346,35.998704,36.074937,36.06885,36.056811,36.043996,36.033197,36.022167,36.015603,36.014624,36.007118,36.004737,35.992529,35.990638,35.993409,35.992519,35.985149,35.982722,35.979746,35.973498,35.968644,35.966058,35.960633,35.960496,35.963082,35.961937,35.957776,35.957039,35.955025,35.949725,35.948985,35.950926,35.947484,35.938655,35.931675,35.929041,35.929272,35.936277,35.937673,35.936021,35.933961,35.940665,35.939336,35.929375,35.926396,35.925641,35.929051,35.927516,35.931273,35.933113,35.92457,35.928161,35.929248,35.931987,35.931046,35.931969,35.937352,35.934354,35.936621,35.938361,35.941978,35.943878,35.939689,35.93875,35.940856,35.944771,35.943146,35.931012,35.929363,35.929522,35.917963,35.917755,35.910041,35.905188,35.903356,35.899922,35.894542,35.891176,35.890421,35.893261,35.890768,35.886808,35.881381,35.874822,35.875729,35.874621,35.868559,35.865882,35.863172,35.862066,35.857752,35.857512,35.86239,35.86177,35.858417,35.866783,35.871064,35.876745,35.876678,35.872622,35.876477,35.88248,35.883872,35.88692,35.893351,35.89689,35.901115,35.89966,35.894963,35.881956,35.876845,35.868056,35.863951,35.86153,35.857308,35.849776,35.844572,35.838295,35.835808,35.833413,35.830651,35.827912,35.825753,35.824005,35.820722,35.818446,35.81549,35.813571,35.81174,35.814512,35.825791,35.850973,35.85811,35.873491,35.878723,35.882728,35.885922,35.887028,35.88383,35.869035,35.86391,35.862667,35.86557,35.863085,35.864055,35.861378,35.860989,35.858187,35.857689,35.85914,35.857855,35.856758,35.856804,35.853948,35.853491,35.852669,35.850954,35.848984,35.844776,35.837638,35.832905,35.829016,35.826709,35.824511,35.820857,35.820456,35.816952,35.806549,35.799572,35.795529,35.791117,35.788992,35.784929,35.783537,35.773779,35.769536,35.763757,35.761644,35.760549,35.754385,35.747718,35.74495,35.739487,35.737448,35.734838,35.730641,35.719581,35.705409,35.680178,35.658485,35.693641,35.736893,35.739507,35.736268,35.733026,35.739565,35.741949,35.740691,35.742746,35.74508,35.746954,35.746359,35.748747,35.752093,35.760002,35.758759,35.760998,35.762131,35.760705,35.762686,35.765412,35.76526,35.771294,35.774761,35.783222,35.786246,35.819214,35.867381]}]],[[{"lng":[-79.259518,-79.257804,-79.257002,-79.256964,-79.214841,-79.008299,-78.95079,-78.96726,-78.982507,-78.993731,-78.999532,-79.01356,-79.016699,-79.082166,-79.131858,-79.131791,-79.218765,-79.21834,-79.222253,-79.222498,-79.249475,-79.255408,-79.258145,-79.25809,-79.256865,-79.257311,-79.261156,-79.268339,-79.267151,-79.264027,-79.263864,-79.264471,-79.263839,-79.263455,-79.267106,-79.266762,-79.263406,-79.262516,-79.261801,-79.262384,-79.261807,-79.26086,-79.261745,-79.261214,-79.261963,-79.260347,-79.25954,-79.259404,-79.260108,-79.258695,-79.259576,-79.260117,-79.260081,-79.25952,-79.260065,-79.259639,-79.259076,-79.259518],"lat":[36.137279,36.242996,36.242987,36.243866,36.242752,36.240736,36.23916,36.138587,36.056634,35.990942,35.964843,35.874218,35.863201,35.860668,35.864854,35.865425,35.873725,35.876083,35.876183,35.874293,35.876788,35.884632,35.891783,35.896878,35.899776,35.902103,35.90579,35.909103,35.913602,35.914114,35.92973,35.931078,35.931435,35.966678,35.966483,35.973802,35.973742,36.022906,36.023853,36.023776,36.039873,36.040086,36.041468,36.061659,36.061785,36.095198,36.097119,36.102781,36.103219,36.103763,36.104648,36.107769,36.109637,36.109633,36.110464,36.131292,36.131372,36.137279]}]],[[{"lng":[-78.803288,-78.794823,-78.7963,-78.666615,-78.511317,-78.45697,-78.457328,-78.453558,-78.453925,-78.455913,-78.454986,-78.455901,-78.45837,-78.458816,-78.463931,-78.467277,-78.469293,-78.465322,-78.466405,-78.468356,-78.470455,-78.470621,-78.472824,-78.472973,-78.475201,-78.479792,-78.480136,-78.483529,-78.485522,-78.486472,-78.490072,-78.493289,-78.494981,-78.497641,-78.496181,-78.496881,-78.494935,-78.501201,-78.500607,-78.502346,-78.504165,-78.504517,-78.502443,-78.504281,-78.503473,-78.511255,-78.5113,-78.508635,-78.502226,-78.496474,-78.544801,-78.546497,-78.604535,-78.683334,-78.712627,-78.72183,-78.748932,-78.78061,-78.783737,-78.787689,-78.787785,-78.785027,-78.78994,-78.793183,-78.790999,-78.79368,-78.798371,-78.807585,-78.802966,-78.805331,-78.803288],"lat":[36.177158,36.526689,36.541713,36.542145,36.540951,36.542474,36.541331,36.540274,36.539104,36.538559,36.535391,36.533405,36.533536,36.531914,36.533616,36.531932,36.526503,36.525539,36.524113,36.523558,36.525875,36.522459,36.522362,36.521179,36.522241,36.519398,36.518107,36.518097,36.516788,36.518194,36.517288,36.518313,36.515446,36.514774,36.510376,36.508349,36.508234,36.502731,36.498352,36.498134,36.495086,36.491942,36.491177,36.489476,36.487516,36.454281,36.267521,36.183152,36.17773,36.175217,36.080678,36.021804,36.042556,36.07454,36.07622,36.075672,36.071243,36.071971,36.06955,36.071638,36.074061,36.076525,36.078601,36.077287,36.081223,36.086729,36.084295,36.087623,36.089532,36.09389,36.177158]}]],[[{"lng":[-80.442932,-80.440118,-80.439559,-80.446161,-80.446138,-80.443857,-80.441388,-80.432423,-80.432107,-80.437419,-80.452452,-80.451954,-80.03554,-80.037803,-80.037029,-80.037443,-80.038364,-80.043272,-80.149779,-80.213833,-80.213906,-80.322728,-80.322907,-80.344468,-80.394978,-80.400509,-80.411312,-80.42138,-80.422456,-80.422253,-80.413313,-80.41847,-80.421828,-80.432161,-80.442835,-80.446729,-80.451639,-80.456195,-80.458213,-80.458668,-80.462269,-80.466305,-80.471932,-80.474952,-80.47402,-80.474755,-80.483194,-80.486967,-80.491633,-80.50676,-80.508807,-80.509607,-80.51642,-80.515648,-80.516138,-80.509862,-80.507873,-80.506564,-80.487443,-80.48087,-80.474098,-80.46533,-80.462204,-80.453714,-80.448248,-80.439622,-80.439006,-80.443005,-80.443166,-80.442319,-80.439481,-80.436687,-80.437941,-80.443062,-80.44379,-80.442932],"lat":[36.183772,36.186203,36.191077,36.205591,36.20857,36.211997,36.213688,36.215614,36.218664,36.229824,36.241356,36.261635,36.257351,36.176286,36.173671,36.161535,36.15936,36.01061,36.026697,36.026772,35.996876,35.996714,35.990688,35.990957,35.973208,35.974974,35.980257,35.987544,35.990066,35.9934,36.001619,36.016503,36.0192,36.024152,36.031407,36.038308,36.0421,36.048009,36.053,36.057554,36.061741,36.062735,36.061083,36.05713,36.051577,36.05012,36.046198,36.043105,36.043299,36.053994,36.059414,36.072467,36.08284,36.087501,36.092619,36.098428,36.106521,36.108386,36.115897,36.11642,36.118457,36.117385,36.11794,36.122361,36.1303,36.136552,36.138746,36.149863,36.154381,36.157493,36.160495,36.169949,36.173042,36.177777,36.181737,36.183772]}]],[[{"lng":[-78.261049,-78.240323,-78.235556,-78.231921,-78.230205,-78.224876,-78.217429,-78.21555,-78.210453,-78.201014,-78.198871,-78.196559,-78.1934,-78.188946,-78.173168,-78.157287,-78.149096,-78.142357,-78.139848,-78.135287,-78.13284,-78.130844,-78.125304,-78.126785,-78.12537,-78.126271,-78.125751,-78.124792,-78.123322,-78.121897,-78.119111,-78.114858,-78.114139,-78.112066,-78.111597,-78.110697,-78.109278,-78.110728,-78.10988,-78.106932,-78.104934,-78.102697,-78.09832,-78.097255,-78.094098,-78.091923,-78.091679,-78.09048,-78.084917,-78.085459,-78.083054,-78.077056,-78.074522,-78.07146,-78.070959,-78.069691,-78.066222,-78.064155,-78.063647,-78.060733,-78.059805,-78.057995,-78.058673,-78.05788,-78.051158,-78.049085,-78.048014,-78.044565,-78.043253,-78.045183,-78.045076,-78.038877,-78.037456,-78.038835,-78.037089,-78.035413,-78.032903,-78.031192,-78.030246,-78.031395,-78.030345,-78.028849,-78.024736,-78.024973,-78.023827,-78.021499,-78.018539,-78.0161,-78.015924,-78.014437,-78.014262,-78.011723,-78.011135,-78.008595,-78.008825,-78.007809,-78.006554,-78.172179,-78.184162,-78.240615,-78.254903,-78.255903,-78.255068,-78.262513,-78.262069,-78.268522,-78.269967,-78.272245,-78.272876,-78.282356,-78.290038,-78.291239,-78.295167,-78.298838,-78.303089,-78.305032,-78.307354,-78.307314,-78.310548,-78.312997,-78.317837,-78.329669,-78.331394,-78.332603,-78.332041,-78.333645,-78.335923,-78.340061,-78.345244,-78.350327,-78.351396,-78.353448,-78.394463,-78.426648,-78.497329,-78.546497,-78.544801,-78.496474,-78.495437,-78.495748,-78.493358,-78.484915,-78.485593,-78.473512,-78.46716,-78.461064,-78.460413,-78.458157,-78.45617,-78.454338,-78.449971,-78.436453,-78.431795,-78.432244,-78.422426,-78.421495,-78.4219,-78.418361,-78.416743,-78.412046,-78.378164,-78.338012,-78.332567,-78.314801,-78.307012,-78.261049],"lat":[36.260553,36.257863,36.258277,36.25746,36.255934,36.256534,36.253631,36.251896,36.252573,36.250773,36.251768,36.248459,36.246927,36.247707,36.255502,36.244565,36.246825,36.246466,36.247409,36.245842,36.246439,36.240529,36.234628,36.230796,36.228944,36.228621,36.226336,36.225599,36.22633,36.224211,36.224371,36.216795,36.216235,36.21751,36.215994,36.216247,36.213315,36.212178,36.210322,36.209895,36.210774,36.209083,36.210924,36.208986,36.210365,36.209421,36.207675,36.208911,36.20939,36.209972,36.212734,36.21162,36.215178,36.215321,36.216689,36.215212,36.216486,36.215667,36.214042,36.214267,36.212548,36.212466,36.211581,36.211021,36.214024,36.213267,36.214798,36.215539,36.213977,36.213169,36.212329,36.210325,36.210759,36.20884,36.208748,36.207047,36.207183,36.20902,36.211066,36.213479,36.214487,36.210602,36.209501,36.207964,36.208332,36.205085,36.20519,36.207815,36.206442,36.20723,36.205396,36.206105,36.204881,36.20487,36.203923,36.204317,36.202663,35.956301,35.935046,35.844271,35.81773,35.820928,35.828216,35.835405,35.836998,35.843127,35.850823,35.854239,35.857585,35.872186,35.876522,35.880248,35.881231,35.886749,35.889842,35.893203,35.894082,35.896587,35.896257,35.897394,35.894505,35.897275,35.897917,35.900279,35.901791,35.902221,35.906058,35.907327,35.907319,35.909495,35.910798,35.931006,35.936938,35.974917,36.004388,36.021804,36.080678,36.175217,36.175346,36.180413,36.183367,36.179075,36.174678,36.172396,36.172397,36.169997,36.16599,36.163649,36.164515,36.167718,36.169011,36.166409,36.166677,36.164461,36.16416,36.164644,36.16801,36.167475,36.1692,36.169664,36.235084,36.23462,36.241677,36.256171,36.266159,36.260553]}]],[[{"lng":[-77.738695,-77.701681,-77.696754,-77.697184,-77.693744,-77.690154,-77.690911,-77.687672,-77.680542,-77.671663,-77.667532,-77.665171,-77.661609,-77.658093,-77.65387,-77.648087,-77.638069,-77.634928,-77.633054,-77.630231,-77.627881,-77.61797,-77.614363,-77.60749,-77.602519,-77.596924,-77.5919,-77.584938,-77.581528,-77.580103,-77.576162,-77.572082,-77.565878,-77.532324,-77.532026,-77.528977,-77.52755,-77.528192,-77.52053,-77.520864,-77.519439,-77.510573,-77.506518,-77.50775,-77.504367,-77.498755,-77.499061,-77.495984,-77.492768,-77.484799,-77.481585,-77.482765,-77.480781,-77.474434,-77.472336,-77.470069,-77.471186,-77.470958,-77.464135,-77.464889,-77.460947,-77.463378,-77.46128,-77.456305,-77.458233,-77.455829,-77.452252,-77.451245,-77.452055,-77.448673,-77.450294,-77.449623,-77.454933,-77.45306,-77.445346,-77.448648,-77.447641,-77.440375,-77.43582,-77.432104,-77.427492,-77.427576,-77.426152,-77.421319,-77.420899,-77.419111,-77.416569,-77.407321,-77.40165,-77.393465,-77.391818,-77.390794,-77.390965,-77.392869,-77.395196,-77.410359,-77.411563,-77.409811,-77.411152,-77.414113,-77.414839,-77.41308,-77.414505,-77.421097,-77.422885,-77.429437,-77.431264,-77.432326,-77.431376,-77.438832,-77.440479,-77.449106,-77.449524,-77.446364,-77.446425,-77.439975,-77.440366,-77.437435,-77.432415,-77.429159,-77.428276,-77.426506,-77.425517,-77.426885,-77.432944,-77.445894,-77.464166,-77.465475,-77.473174,-77.473716,-77.52729,-77.506638,-77.601416,-77.730784,-77.745885,-77.74718,-77.749123,-77.74937,-77.747364,-77.749169,-77.754902,-77.767168,-77.83425,-77.824408,-77.819243,-77.818946,-77.814908,-77.805728,-77.77768,-77.738695],"lat":[35.374869,35.380597,35.376221,35.37285,35.36566,35.364083,35.360828,35.358866,35.34776,35.34806,35.349411,35.35217,35.352226,35.353803,35.352499,35.355244,35.354234,35.356704,35.360823,35.362768,35.366314,35.372309,35.377746,35.37958,35.374793,35.375921,35.373716,35.379517,35.378259,35.380022,35.380068,35.382312,35.383594,35.403583,35.406915,35.409753,35.412932,35.41474,35.415082,35.417531,35.417164,35.421601,35.421966,35.419448,35.41963,35.417334,35.414358,35.412413,35.412049,35.413724,35.41542,35.423088,35.424828,35.426891,35.425221,35.420208,35.417393,35.41032,35.404874,35.403043,35.400846,35.399564,35.397595,35.395651,35.394209,35.392973,35.394485,35.39405,35.392356,35.392952,35.391761,35.389243,35.385809,35.383109,35.380685,35.374708,35.371069,35.366973,35.368003,35.367614,35.36093,35.354796,35.349554,35.348707,35.351019,35.352392,35.351499,35.353214,35.348269,35.347053,35.34561,35.341196,35.340047,35.340464,35.343637,35.339207,35.337997,35.331745,35.333141,35.333714,35.333118,35.331607,35.330691,35.331333,35.328953,35.330602,35.329824,35.324674,35.313114,35.311581,35.303889,35.301783,35.299288,35.296287,35.293749,35.289881,35.284502,35.276925,35.2725,35.271031,35.265146,35.263486,35.259437,35.256232,35.250163,35.246484,35.238995,35.234897,35.23098,35.228983,35.243479,35.172177,35.071252,35.008259,35.022587,35.051536,35.051481,35.0586,35.05867,35.10793,35.117395,35.143915,35.177814,35.343961,35.351903,35.355936,35.361384,35.369788,35.367682,35.374869]}]],[[{"lng":[-81.755861,-81.758864,-81.762834,-81.765093,-81.767453,-81.771485,-81.77494,-81.777278,-81.777471,-81.775778,-81.778257,-81.779707,-81.777003,-81.77642,-81.77756,-81.777812,-81.778753,-81.788307,-81.789573,-81.794642,-81.795712,-81.795431,-81.796895,-81.800613,-81.800695,-81.804613,-81.804674,-81.809236,-81.735876,-81.740886,-81.745155,-81.753892,-81.755226,-81.757171,-81.758409,-81.758253,-81.761098,-81.770577,-81.774209,-81.781074,-81.785616,-81.79149,-81.79673,-81.806661,-81.81152,-81.674774,-81.669906,-81.662968,-81.660553,-81.545455,-81.522195,-81.520334,-81.520025,-81.517176,-81.51684,-81.508684,-81.501797,-81.498391,-81.49556,-81.493582,-81.488703,-81.484327,-81.477668,-81.477661,-81.469281,-81.469208,-81.464402,-81.456361,-81.45299,-81.453939,-81.452758,-81.447437,-81.4472,-81.444539,-81.444035,-81.440358,-81.439589,-81.434666,-81.432843,-81.429622,-81.424487,-81.417022,-81.414794,-81.410185,-81.409629,-81.407859,-81.406561,-81.402141,-81.398453,-81.397453,-81.390145,-81.38999,-81.392084,-81.391725,-81.394497,-81.396696,-81.395568,-81.381479,-81.380438,-81.380111,-81.376697,-81.374684,-81.369374,-81.365893,-81.344136,-81.328385,-81.342953,-81.33352,-81.343783,-81.342358,-81.340521,-81.339308,-81.337397,-81.339974,-81.335743,-81.337917,-81.335033,-81.332256,-81.331874,-81.33398,-81.334255,-81.342418,-81.347545,-81.351101,-81.355892,-81.352792,-81.353862,-81.358394,-81.365505,-81.37025,-81.375412,-81.376231,-81.377786,-81.383353,-81.391305,-81.399091,-81.402893,-81.408434,-81.424522,-81.43483,-81.440936,-81.442812,-81.444168,-81.446356,-81.474621,-81.490267,-81.51616,-81.541318,-81.5482,-81.55596,-81.600704,-81.610242,-81.629849,-81.626044,-81.632043,-81.639152,-81.710156,-81.713007,-81.71683,-81.718979,-81.725261,-81.728678,-81.730836,-81.733344,-81.735018,-81.73907,-81.744666,-81.745682,-81.748033,-81.748196,-81.75049,-81.751938,-81.755861],"lat":[35.925313,35.928285,35.925642,35.926372,35.92896,35.928974,35.926781,35.927172,35.932148,35.933737,35.936066,35.939702,35.940934,35.942864,35.943471,35.947364,35.946615,35.947582,35.949116,35.951201,35.950972,35.949438,35.949094,35.951247,35.952942,35.954067,35.955658,35.958684,36.066976,36.071476,36.072607,36.072556,36.076494,36.077384,36.07955,36.082404,36.089965,36.094935,36.098777,36.101238,36.100522,36.102873,36.107201,36.110938,36.111544,36.122481,36.12053,36.119983,36.118347,36.117398,36.102714,36.102508,36.100401,36.099232,36.097433,36.097099,36.100187,36.100401,36.100348,36.097326,36.098223,36.095796,36.096737,36.092502,36.087187,36.084864,36.089433,36.091489,36.090113,36.088661,36.087045,36.083452,36.078127,36.075359,36.072408,36.073437,36.074828,36.076061,36.075145,36.075794,36.077968,36.071268,36.072659,36.072076,36.070494,36.070634,36.067009,36.06475,36.060675,36.056651,36.050612,36.049682,36.048483,36.046777,36.045515,36.042951,36.041123,36.044611,36.043671,36.040698,36.040786,36.037119,36.040203,36.032717,36.022757,35.99655,35.923128,35.879783,35.823962,35.82236,35.82441,35.823357,35.817911,35.816057,35.814514,35.812631,35.803777,35.803388,35.800504,35.798505,35.79646,35.795697,35.792852,35.784543,35.779874,35.774129,35.768895,35.766767,35.768003,35.766874,35.761524,35.758313,35.757293,35.7572,35.759374,35.758402,35.760204,35.76527,35.771299,35.773337,35.773365,35.775071,35.78395,35.785209,35.783542,35.780547,35.780859,35.779081,35.776672,35.777332,35.825035,35.819518,35.830404,35.833536,35.835852,35.848411,35.875129,35.877426,35.883177,35.883341,35.890026,35.890753,35.898162,35.899644,35.90278,35.906633,35.908808,35.916266,35.918959,35.920942,35.921666,35.924818,35.925313]}]],[[{"lng":[-79.442451,-79.256964,-79.257002,-79.257804,-79.259038,-79.260117,-79.258695,-79.260108,-79.259404,-79.25954,-79.260347,-79.261963,-79.261214,-79.261745,-79.26086,-79.261807,-79.262384,-79.261801,-79.262516,-79.263406,-79.266762,-79.267106,-79.263455,-79.263839,-79.264471,-79.264027,-79.267151,-79.268339,-79.261156,-79.256925,-79.258321,-79.258145,-79.255408,-79.250635,-79.249342,-79.250977,-79.24905,-79.250916,-79.250695,-79.248729,-79.24018,-79.237153,-79.237316,-79.54249,-79.539045,-79.536197,-79.531954,-79.442451],"lat":[36.248179,36.243866,36.242987,36.242996,36.133586,36.107769,36.103763,36.103219,36.102781,36.097119,36.095198,36.061785,36.061659,36.041468,36.040086,36.039873,36.023776,36.023853,36.022906,35.973742,35.973802,35.966483,35.966678,35.931435,35.931078,35.914114,35.913602,35.909103,35.90579,35.901425,35.895347,35.891783,35.884632,35.879116,35.876227,35.871247,35.865781,35.860084,35.857421,35.85481,35.852431,35.850712,35.844247,35.843399,36.082835,36.169419,36.250044,36.248179]}]],[[{"lng":[-82.167809,-82.167556,-82.163593,-82.164031,-82.161451,-82.16194,-82.158565,-82.155571,-82.152504,-82.147415,-82.147369,-82.149944,-82.146438,-82.141251,-82.140962,-82.133794,-82.133182,-82.130145,-82.124256,-82.121194,-82.117079,-82.113659,-82.110026,-82.101781,-82.099321,-82.096324,-82.091671,-82.089602,-82.084243,-82.074951,-82.070932,-82.067076,-82.063157,-82.057923,-82.055552,-82.053198,-82.047914,-82.039526,-82.036804,-82.033899,-82.033086,-82.029361,-82.029454,-82.02733,-82.028338,-82.025981,-82.022223,-82.013241,-82.007427,-82.003443,-82.00342,-81.999409,-81.99179,-81.98981,-81.986224,-81.984704,-81.980213,-81.981114,-81.979504,-81.980303,-81.979009,-81.982318,-81.979273,-81.978268,-81.975759,-81.972272,-81.965006,-81.960396,-81.954501,-81.954484,-81.962429,-81.962957,-81.943674,-81.939614,-81.937375,-81.936566,-81.934472,-81.933749,-81.931065,-81.932503,-81.925617,-81.92869,-81.924093,-81.920474,-81.920616,-81.914772,-81.910304,-81.914379,-81.909376,-81.909861,-81.907615,-81.908083,-81.906607,-81.912187,-81.914239,-81.918089,-81.916555,-81.918035,-81.91758,-81.920509,-81.931724,-81.935313,-81.939999,-81.948044,-81.94765,-81.957855,-81.965502,-81.973714,-81.975034,-81.978351,-81.98037,-81.987035,-81.951332,-81.912923,-81.869347,-81.824184,-81.828148,-81.829507,-81.82948,-81.833654,-81.83425,-81.833172,-81.84097,-81.841041,-81.843924,-81.842653,-81.973556,-81.979439,-81.986288,-81.985475,-81.986282,-81.994458,-82.002795,-82.00567,-82.012897,-82.015917,-82.019624,-82.022585,-82.028833,-82.032889,-82.071841,-82.081917,-82.095766,-82.150541,-82.20682,-82.219981,-82.24112,-82.250863,-82.253733,-82.290797,-82.291859,-82.289493,-82.287627,-82.282491,-82.27825,-82.269679,-82.268485,-82.26468,-82.264862,-82.269594,-82.27245,-82.271461,-82.274252,-82.270393,-82.275799,-82.281555,-82.283109,-82.282855,-82.285592,-82.286504,-82.284847,-82.280514,-82.280214,-82.284262,-82.291345,-82.294562,-82.293525,-82.289071,-82.289047,-82.283832,-82.280136,-82.275394,-82.271429,-82.266759,-82.25798,-82.252137,-82.244679,-82.2426,-82.234167,-82.231109,-82.224772,-82.219587,-82.213556,-82.209973,-82.20414,-82.199794,-82.197226,-82.193309,-82.190572,-82.184658,-82.184387,-82.176662,-82.176175,-82.169672,-82.170528,-82.167986,-82.164101,-82.160385,-82.15835,-82.166819,-82.167809],"lat":[35.787551,35.789678,35.792564,35.793194,35.795419,35.797656,35.801147,35.801538,35.803996,35.804385,35.807718,35.809482,35.811604,35.812731,35.814232,35.820913,35.824446,35.82529,35.823887,35.824617,35.832631,35.834727,35.835007,35.840791,35.851696,35.852259,35.849244,35.851001,35.849261,35.848256,35.850518,35.850311,35.851919,35.851468,35.852526,35.851817,35.853221,35.858397,35.85886,35.862141,35.865002,35.868006,35.871133,35.877116,35.879272,35.88021,35.884947,35.885082,35.882827,35.879005,35.875664,35.874007,35.875924,35.880222,35.88077,35.882818,35.884922,35.889866,35.896954,35.8986,35.901591,35.911028,35.912657,35.914463,35.915382,35.914849,35.920709,35.921224,35.926742,35.931995,35.937966,35.941669,35.959448,35.955762,35.955456,35.952465,35.951487,35.94832,35.946015,35.941728,35.937205,35.930966,35.926101,35.920618,35.919086,35.916271,35.905554,35.901581,35.898029,35.89486,35.890995,35.886584,35.883437,35.874696,35.866363,35.860207,35.858912,35.856642,35.851674,35.847079,35.839077,35.83739,35.837621,35.827594,35.825785,35.819922,35.818477,35.821177,35.819299,35.817947,35.813534,35.806936,35.779251,35.752304,35.719574,35.574955,35.574003,35.571759,35.568129,35.563539,35.560369,35.558769,35.553884,35.550098,35.545767,35.54216,35.524565,35.532881,35.538081,35.539834,35.540684,35.543978,35.551839,35.549647,35.547722,35.543189,35.54152,35.537141,35.535969,35.537991,35.5366,35.533333,35.531666,35.518001,35.547791,35.553141,35.556951,35.559667,35.561624,35.591288,35.594977,35.596898,35.601006,35.603024,35.608976,35.609615,35.612584,35.61437,35.617896,35.621483,35.621928,35.624742,35.629075,35.631366,35.63735,35.639032,35.643053,35.64647,35.64802,35.657806,35.661909,35.666507,35.668752,35.676664,35.682742,35.683878,35.687452,35.693997,35.696086,35.698498,35.70226,35.704423,35.70422,35.700443,35.698808,35.706397,35.708884,35.712861,35.714712,35.717553,35.71857,35.722728,35.724259,35.726432,35.732556,35.733843,35.736369,35.735311,35.741794,35.750248,35.753324,35.756083,35.75823,35.760908,35.762913,35.765275,35.772648,35.774435,35.779777,35.784797,35.787551]}]],[[{"lng":[-81.919242,-81.91758,-81.918035,-81.916555,-81.918089,-81.914239,-81.912187,-81.906607,-81.908083,-81.907615,-81.909861,-81.909376,-81.914379,-81.910304,-81.914772,-81.920616,-81.920474,-81.924093,-81.92869,-81.925617,-81.932503,-81.93137,-81.933749,-81.933656,-81.936566,-81.937375,-81.939614,-81.943674,-81.899583,-81.881009,-81.880477,-81.877617,-81.877454,-81.871171,-81.851789,-81.849557,-81.844524,-81.841011,-81.83535,-81.832964,-81.817406,-81.812127,-81.80712,-81.808968,-81.796895,-81.794642,-81.788307,-81.777812,-81.77756,-81.77642,-81.777003,-81.779707,-81.775778,-81.777471,-81.777616,-81.77494,-81.771485,-81.767453,-81.762834,-81.758864,-81.756861,-81.751175,-81.75049,-81.748196,-81.748033,-81.745682,-81.744666,-81.740162,-81.735462,-81.733344,-81.730836,-81.728678,-81.725261,-81.718979,-81.71683,-81.710156,-81.639152,-81.632043,-81.626044,-81.629849,-81.610242,-81.600704,-81.55596,-81.5482,-81.541318,-81.51616,-81.490267,-81.474621,-81.446356,-81.444168,-81.44181,-81.424522,-81.408434,-81.402893,-81.399091,-81.391305,-81.383353,-81.377786,-81.371196,-81.364055,-81.419871,-81.499658,-81.506041,-81.53776,-81.546354,-81.555416,-81.56083,-81.566295,-81.566991,-81.573023,-81.578974,-81.577031,-81.577831,-81.58082,-81.590957,-81.595309,-81.595088,-81.597695,-81.607193,-81.611491,-81.617422,-81.618929,-81.632919,-81.633803,-81.634712,-81.637437,-81.648967,-81.656609,-81.660047,-81.662036,-81.66837,-81.673835,-81.679412,-81.684459,-81.690234,-81.692645,-81.692728,-81.698419,-81.702456,-81.703073,-81.70411,-81.705455,-81.709438,-81.712046,-81.71216,-81.716142,-81.715778,-81.71732,-81.716115,-81.717489,-81.715275,-81.717434,-81.715977,-81.719919,-81.723794,-81.724566,-81.732688,-81.736434,-81.741916,-81.745812,-81.750377,-81.75469,-81.757416,-81.766295,-81.768379,-81.771912,-81.768188,-81.771412,-81.772181,-81.783044,-81.788245,-81.793748,-81.795947,-81.796973,-81.80534,-81.810544,-81.818438,-81.822801,-81.824184,-81.869347,-81.912923,-81.951332,-81.987035,-81.98037,-81.978351,-81.973714,-81.965502,-81.957855,-81.951782,-81.94765,-81.948044,-81.939999,-81.935313,-81.931724,-81.925203,-81.919242],"lat":[35.848759,35.851674,35.856642,35.858912,35.860207,35.866363,35.874696,35.883437,35.886584,35.890995,35.89486,35.898029,35.901581,35.905554,35.916271,35.919086,35.920618,35.926101,35.930966,35.937205,35.941728,35.946781,35.94832,35.950264,35.952465,35.955456,35.955762,35.959448,36.000127,35.992895,35.990963,35.989611,35.981682,35.976784,35.974833,35.97362,35.974982,35.972087,35.971598,35.967235,35.968505,35.963662,35.962057,35.958231,35.949094,35.951201,35.947582,35.947364,35.943471,35.942864,35.940934,35.939702,35.933737,35.932148,35.927504,35.926781,35.928974,35.92896,35.925642,35.928285,35.925504,35.924292,35.921666,35.920942,35.918959,35.916266,35.908808,35.907461,35.903268,35.899644,35.898162,35.890753,35.890026,35.883341,35.883177,35.875129,35.848411,35.835852,35.833536,35.830404,35.819518,35.825035,35.777332,35.776672,35.779081,35.780859,35.780547,35.783542,35.785209,35.78395,35.773804,35.771299,35.76527,35.760204,35.758402,35.759374,35.7572,35.757293,35.766385,35.767865,35.692851,35.611327,35.608196,35.564472,35.564952,35.562165,35.562959,35.560026,35.558264,35.558485,35.562096,35.566032,35.56678,35.5675,35.564878,35.567675,35.570324,35.57127,35.566831,35.567536,35.565388,35.567205,35.565357,35.5671,35.565149,35.564147,35.56161,35.565363,35.565378,35.567324,35.566216,35.568232,35.575469,35.577095,35.584218,35.582844,35.578996,35.579017,35.583345,35.581605,35.582315,35.580986,35.589619,35.589275,35.591863,35.594564,35.596534,35.595755,35.597931,35.59903,35.601412,35.600702,35.602786,35.606997,35.606463,35.604834,35.601796,35.601823,35.604585,35.603856,35.610459,35.61232,35.609303,35.606664,35.602956,35.601958,35.596919,35.594945,35.592566,35.59185,35.594135,35.593211,35.591473,35.583891,35.579631,35.581255,35.578162,35.580424,35.574955,35.719574,35.752304,35.779251,35.806936,35.813534,35.817947,35.821177,35.818477,35.819922,35.822982,35.825785,35.827594,35.837621,35.83739,35.839077,35.842915,35.848759]}]],[[{"lng":[-79.349993,-79.237316,-79.237153,-79.248729,-79.250695,-79.24905,-79.250977,-79.249475,-79.222498,-79.222253,-79.21834,-79.218765,-79.082166,-78.90617,-78.909428,-78.918244,-78.930983,-78.936222,-78.941849,-78.995054,-78.913296,-78.969761,-78.977604,-78.992425,-78.997367,-79.014521,-79.026688,-79.035391,-79.04694,-79.046799,-79.051448,-79.052471,-79.070543,-79.092348,-79.101388,-79.111992,-79.115977,-79.118958,-79.125137,-79.139315,-79.142439,-79.150006,-79.158244,-79.183508,-79.18611,-79.200939,-79.201947,-79.199074,-79.199595,-79.215307,-79.224683,-79.226616,-79.220695,-79.218857,-79.219707,-79.222934,-79.231926,-79.240977,-79.244524,-79.243023,-79.245504,-79.260056,-79.268583,-79.276601,-79.286131,-79.290818,-79.292003,-79.290698,-79.282029,-79.285782,-79.294017,-79.29802,-79.302633,-79.304022,-79.303812,-79.308418,-79.313878,-79.323489,-79.323316,-79.311563,-79.312153,-79.322434,-79.334036,-79.339359,-79.348208,-79.350547,-79.555896,-79.54249,-79.349993],"lat":[35.843992,35.844247,35.850712,35.85481,35.857421,35.865781,35.871247,35.876788,35.874293,35.876183,35.876083,35.873725,35.860668,35.867912,35.842939,35.820272,35.794301,35.77197,35.755763,35.610233,35.583064,35.521433,35.530206,35.540711,35.542587,35.543551,35.550762,35.560904,35.569637,35.578132,35.584125,35.595609,35.610211,35.618349,35.62407,35.622923,35.627567,35.628215,35.623989,35.623965,35.622767,35.617128,35.603272,35.584422,35.580393,35.576635,35.574466,35.564835,35.558884,35.555442,35.550865,35.554392,35.560796,35.565366,35.566715,35.5686,35.568042,35.570428,35.569586,35.560164,35.552986,35.53816,35.532552,35.532238,35.538975,35.540095,35.542886,35.545885,35.551732,35.555158,35.552737,35.553598,35.552561,35.551667,35.54834,35.547526,35.544244,35.544184,35.542126,35.533231,35.530481,35.524374,35.525114,35.52109,35.519801,35.517766,35.515085,35.843399,35.843992]}]],[[{"lng":[-78.510626,-78.511255,-78.503473,-78.504281,-78.502443,-78.504517,-78.504165,-78.502346,-78.500607,-78.501493,-78.501201,-78.494935,-78.496881,-78.496181,-78.497688,-78.494981,-78.493289,-78.490979,-78.490072,-78.489018,-78.486472,-78.485522,-78.484018,-78.483529,-78.480136,-78.479792,-78.478523,-78.475201,-78.472973,-78.472824,-78.470621,-78.470272,-78.470997,-78.470455,-78.468356,-78.466405,-78.465322,-78.468425,-78.469293,-78.467078,-78.463931,-78.458597,-78.45837,-78.455901,-78.455446,-78.454986,-78.455913,-78.453925,-78.453487,-78.457328,-78.457639,-78.45697,-78.323912,-78.277472,-78.290908,-78.292111,-78.302315,-78.305163,-78.308551,-78.314801,-78.332567,-78.338012,-78.378164,-78.412046,-78.416743,-78.418361,-78.4219,-78.421693,-78.425925,-78.432471,-78.431512,-78.431795,-78.436453,-78.441164,-78.451999,-78.454338,-78.45617,-78.458157,-78.460413,-78.460753,-78.466371,-78.473512,-78.485593,-78.484915,-78.487851,-78.491935,-78.493044,-78.495267,-78.495864,-78.495353,-78.496172,-78.499476,-78.502226,-78.508635,-78.5113,-78.510626],"lat":[36.31543,36.454281,36.487516,36.489476,36.491177,36.491942,36.495086,36.498134,36.498352,36.501385,36.502731,36.508234,36.508349,36.510376,36.514725,36.515446,36.518313,36.518164,36.517288,36.518169,36.518194,36.516788,36.517032,36.518097,36.518107,36.519398,36.519615,36.522241,36.521179,36.522362,36.522459,36.523982,36.525082,36.525875,36.523558,36.524113,36.525539,36.525653,36.526503,36.532181,36.533616,36.531947,36.533536,36.533405,36.533983,36.535391,36.538559,36.539104,36.539919,36.541331,36.541879,36.542474,36.543809,36.30625,36.290373,36.285186,36.27448,36.26769,36.264925,36.256171,36.241677,36.23462,36.235084,36.169664,36.1692,36.167475,36.16801,36.164414,36.163685,36.164574,36.165833,36.166677,36.166409,36.167826,36.168909,36.167718,36.164515,36.163649,36.16599,36.16972,36.172236,36.172396,36.174678,36.179075,36.179988,36.183299,36.183551,36.181366,36.179934,36.175598,36.175082,36.175958,36.17773,36.183152,36.267521,36.31543]}]],[[{"lng":[-80.373587,-80.371203,-80.365295,-80.368635,-80.370568,-80.372874,-80.376997,-80.389393,-80.397454,-80.409259,-80.414953,-80.416435,-80.415884,-80.412057,-80.393267,-80.389978,-80.385596,-80.388356,-80.389734,-80.394372,-80.399427,-80.408423,-80.41558,-80.422265,-80.4244,-80.425572,-80.427433,-80.429164,-80.43178,-80.435621,-80.437749,-80.445933,-80.446927,-80.449682,-80.455255,-80.461735,-80.464086,-80.465937,-80.473072,-80.476719,-80.48248,-80.487303,-80.487157,-80.485777,-80.47799,-80.473227,-80.471744,-80.465613,-80.464621,-80.466204,-80.473862,-80.476909,-80.476686,-80.473457,-80.459596,-80.454967,-80.451307,-80.451165,-80.452716,-80.456889,-80.459036,-80.459637,-80.458904,-80.462192,-80.469006,-80.468907,-80.471455,-80.478498,-80.483115,-80.484927,-80.487277,-80.486538,-80.487544,-80.492009,-80.492067,-80.496062,-80.501496,-80.50644,-80.506675,-80.508307,-80.514844,-80.520881,-80.528301,-80.532845,-80.534143,-80.533843,-80.53584,-80.537031,-80.538249,-80.543496,-80.546699,-80.554775,-80.561857,-80.567486,-80.570956,-80.576962,-80.586633,-80.589926,-80.587227,-80.591058,-80.592638,-80.594329,-80.593967,-80.599115,-80.599568,-80.601472,-80.603576,-80.604023,-80.608461,-80.609661,-80.612509,-80.609985,-80.610815,-80.615042,-80.622931,-80.630762,-80.630778,-80.631517,-80.64228,-80.645776,-80.6498,-80.660557,-80.67117,-80.672844,-80.669622,-80.668262,-80.668771,-80.672305,-80.673166,-80.674502,-80.675412,-80.677013,-80.678921,-80.682307,-80.687334,-80.691731,-80.693297,-80.696446,-80.69882,-80.699488,-80.704782,-80.707269,-80.707837,-80.693198,-80.624787,-80.496381,-80.491633,-80.487403,-80.483194,-80.474467,-80.474067,-80.475069,-80.473444,-80.468176,-80.463326,-80.458668,-80.458213,-80.456195,-80.451639,-80.446729,-80.442835,-80.432161,-80.421828,-80.41847,-80.414073,-80.413313,-80.422253,-80.422456,-80.42138,-80.411312,-80.394124,-80.392425,-80.390481,-80.382395,-80.377432,-80.374034,-80.375534,-80.368355,-80.369066,-80.37342,-80.375034,-80.373587],"lat":[35.909285,35.903882,35.894801,35.887385,35.885598,35.884535,35.88493,35.891751,35.892829,35.891036,35.8849,35.881932,35.879847,35.877179,35.870951,35.868291,35.854525,35.845716,35.84377,35.841598,35.84164,35.846032,35.852072,35.852416,35.850803,35.848443,35.833908,35.830307,35.828399,35.828216,35.831229,35.836607,35.836488,35.832417,35.827424,35.826714,35.827538,35.831507,35.841484,35.843404,35.840048,35.833256,35.831509,35.830595,35.831081,35.826892,35.825144,35.809623,35.803112,35.801012,35.798066,35.792496,35.789183,35.784646,35.774996,35.772948,35.76812,35.764668,35.758239,35.75459,35.749511,35.746564,35.742811,35.750947,35.75767,35.761367,35.767692,35.774819,35.776248,35.775505,35.770969,35.766879,35.766121,35.775735,35.778844,35.782492,35.783192,35.778353,35.776141,35.774679,35.778204,35.784484,35.783467,35.785325,35.786706,35.791307,35.791553,35.79023,35.79026,35.792718,35.798221,35.800346,35.809611,35.811703,35.816571,35.818071,35.823038,35.821598,35.819515,35.817302,35.818858,35.823208,35.82727,35.827337,35.825033,35.823385,35.826197,35.823622,35.824149,35.823277,35.825316,35.828456,35.831195,35.833035,35.839192,35.838451,35.844761,35.845697,35.844111,35.844559,35.846398,35.844672,35.846467,35.84978,35.851942,35.854848,35.856281,35.855827,35.857303,35.857645,35.856145,35.855943,35.857178,35.857582,35.859721,35.863446,35.853598,35.854614,35.85298,35.850492,35.852132,35.851917,35.852897,36.051114,36.048748,36.046536,36.043299,36.042986,36.046198,36.050408,36.052807,36.056269,36.059944,36.062494,36.062413,36.057554,36.053,36.048009,36.0421,36.038308,36.031407,36.024152,36.0192,36.016503,36.005617,36.001619,35.9934,35.990066,35.987544,35.980257,35.972681,35.971529,35.967404,35.965358,35.961366,35.952744,35.940524,35.928217,35.924438,35.918194,35.913569,35.909285]}]],[[{"lng":[-80.253114,-80.256129,-80.259488,-80.263688,-80.265659,-80.271213,-80.2754,-80.281819,-80.28436,-80.288125,-80.292951,-80.295629,-80.298755,-80.303721,-80.304558,-80.305758,-80.320096,-80.321044,-80.320458,-80.321378,-80.32612,-80.329914,-80.335632,-80.340597,-80.34549,-80.350943,-80.354455,-80.357969,-80.364164,-80.365645,-80.368381,-80.370976,-80.376533,-80.38061,-80.38661,-80.389317,-80.398074,-80.400918,-80.404516,-80.408533,-80.411685,-80.4157,-80.416926,-80.420161,-80.429562,-80.435921,-80.438682,-80.440857,-80.447329,-80.458345,-80.463702,-80.465236,-80.467633,-80.470171,-80.471818,-80.476589,-80.477149,-80.479298,-80.48259,-80.484931,-80.488305,-80.493914,-80.503541,-80.505395,-80.504182,-80.506297,-80.504816,-80.499118,-80.496219,-80.492483,-80.483556,-80.483194,-80.484199,-80.476222,-80.295236,-80.182682,-80.179986,-80.178747,-80.176243,-80.165865,-80.161736,-80.149117,-80.139921,-80.136537,-80.12934,-80.118251,-80.109914,-80.108165,-80.109381,-80.108656,-80.107025,-80.100225,-80.097468,-80.097714,-80.100491,-80.095939,-80.090119,-80.093718,-80.093711,-80.087272,-80.083904,-80.075033,-80.066137,-80.062271,-80.057925,-80.051225,-80.054138,-80.065388,-80.066371,-80.066335,-80.075182,-80.081938,-80.081958,-80.079916,-80.079537,-80.080483,-80.092888,-80.094142,-80.091768,-80.092241,-80.097871,-80.098411,-80.098185,-80.091467,-80.087131,-80.076012,-80.069076,-80.066562,-80.065355,-80.061747,-80.060799,-80.053556,-80.053064,-80.057468,-80.060612,-80.068189,-80.07539,-80.076475,-80.078285,-80.089724,-80.106914,-80.108755,-80.108374,-80.110554,-80.114685,-80.123541,-80.128941,-80.129117,-80.124423,-80.124408,-80.13182,-80.135622,-80.142321,-80.152209,-80.155455,-80.157521,-80.159193,-80.165717,-80.167586,-80.166154,-80.159878,-80.159963,-80.161943,-80.165841,-80.174176,-80.181982,-80.185801,-80.190517,-80.193387,-80.194884,-80.197496,-80.202132,-80.205492,-80.206245,-80.207814,-80.222437,-80.225176,-80.231181,-80.238884,-80.242039,-80.240119,-80.251281,-80.250973,-80.253114],"lat":[35.210874,35.2109,35.20871,35.208564,35.203616,35.20174,35.196337,35.195721,35.192173,35.191646,35.194533,35.194327,35.190731,35.18835,35.183174,35.182121,35.179258,35.178158,35.174059,35.172936,35.17644,35.176714,35.173759,35.173987,35.169521,35.16961,35.165852,35.165347,35.170384,35.175008,35.178924,35.179907,35.177707,35.17212,35.166902,35.165781,35.165783,35.167502,35.166907,35.163954,35.163542,35.167116,35.171628,35.172705,35.166522,35.165102,35.161758,35.161415,35.164965,35.16494,35.170412,35.170114,35.167067,35.167342,35.169632,35.172539,35.177623,35.17973,35.180278,35.17714,35.175535,35.179289,35.181783,35.184174,35.188771,35.192415,35.195069,35.198478,35.203862,35.20762,35.212617,35.214449,35.216145,35.22863,35.502947,35.504335,35.499899,35.490936,35.485428,35.480223,35.475208,35.472612,35.475055,35.473354,35.467148,35.465261,35.460982,35.457203,35.448572,35.44509,35.442958,35.440801,35.438094,35.43391,35.429903,35.425417,35.415552,35.405474,35.40203,35.398876,35.395094,35.395072,35.389514,35.386134,35.377688,35.371537,35.365959,35.360474,35.357145,35.340647,35.331278,35.321457,35.318613,35.314543,35.311103,35.307623,35.290219,35.28658,35.275389,35.271987,35.261414,35.258086,35.255173,35.236803,35.233173,35.226968,35.216991,35.211652,35.206032,35.200259,35.18919,35.17951,35.172625,35.163246,35.160209,35.155756,35.143081,35.14322,35.148797,35.160705,35.172794,35.17775,35.189353,35.192525,35.194233,35.191774,35.187676,35.184599,35.177227,35.174731,35.173185,35.167606,35.168394,35.174602,35.174571,35.173223,35.167237,35.164348,35.161641,35.15791,35.151124,35.149452,35.148059,35.147298,35.147992,35.151467,35.154572,35.155646,35.158533,35.165195,35.166532,35.166562,35.165166,35.158593,35.155946,35.155476,35.156235,35.166517,35.173992,35.180962,35.188019,35.203405,35.208245,35.210874]}]],[[{"lng":[-81.697414,-81.700037,-81.700179,-81.697325,-81.6979,-81.696767,-81.698329,-81.697852,-81.702961,-81.70804,-81.707089,-81.708447,-81.708067,-81.699795,-81.699646,-81.69735,-81.69369,-81.69341,-81.690233,-81.69139,-81.689565,-81.69185,-81.691206,-81.689876,-81.679456,-81.676686,-81.679538,-81.678124,-81.680213,-81.677459,-81.600101,-81.520119,-81.489641,-81.476711,-81.443048,-81.374773,-81.373957,-81.37232,-81.36421,-81.364033,-81.358883,-81.353169,-81.353044,-81.35494,-81.35494,-81.352705,-81.348892,-81.34637,-81.345571,-81.34811,-81.347582,-81.341479,-81.33695,-81.33273,-81.328308,-81.326927,-81.327068,-81.322191,-81.307501,-81.305031,-81.30409,-81.304457,-81.302693,-81.299067,-81.299495,-81.297212,-81.296588,-81.295007,-81.294615,-81.28934,-81.286953,-81.279344,-81.272096,-81.268994,-81.264978,-81.263725,-81.264239,-81.266068,-81.263844,-81.264133,-81.260713,-81.254394,-81.25254,-81.252529,-81.249974,-81.246879,-81.245443,-81.246832,-81.244185,-81.246219,-81.24706,-81.246433,-81.251567,-81.253482,-81.255578,-81.26071,-81.261404,-81.266184,-81.267575,-81.267366,-81.271516,-81.280005,-81.286443,-81.292097,-81.294435,-81.296749,-81.298522,-81.303068,-81.304257,-81.308615,-81.312103,-81.318135,-81.31939,-81.321415,-81.323805,-81.329775,-81.332107,-81.331455,-81.332685,-81.340815,-81.339417,-81.342039,-81.341749,-81.34629,-81.346025,-81.348388,-81.354467,-81.362163,-81.36109,-81.35768,-81.356764,-81.357831,-81.355187,-81.357488,-81.36037,-81.360279,-81.361292,-81.363203,-81.363858,-81.36536,-81.370593,-81.366276,-81.370109,-81.374287,-81.376776,-81.375623,-81.378809,-81.387018,-81.386295,-81.388009,-81.394469,-81.399337,-81.404383,-81.40957,-81.413557,-81.41692,-81.417745,-81.417027,-81.414804,-81.413982,-81.413865,-81.417609,-81.429579,-81.431045,-81.429686,-81.430449,-81.431586,-81.435586,-81.44198,-81.441992,-81.446806,-81.451838,-81.452627,-81.458323,-81.458402,-81.465673,-81.475521,-81.475474,-81.477126,-81.476232,-81.477298,-81.48637,-81.514882,-81.521723,-81.532626,-81.545494,-81.552418,-81.56617,-81.57135,-81.573993,-81.574173,-81.582246,-81.588696,-81.600807,-81.604846,-81.636272,-81.640262,-81.648874,-81.726029,-81.731926,-81.734614,-81.739027,-81.738487,-81.740732,-81.741458,-81.740123,-81.741961,-81.741524,-81.737475,-81.7343,-81.733544,-81.729262,-81.729164,-81.727422,-81.727324,-81.723992,-81.723337,-81.720842,-81.717539,-81.721228,-81.714564,-81.715434,-81.714242,-81.717554,-81.713678,-81.714195,-81.715601,-81.715125,-81.7168,-81.709473,-81.707731,-81.701172,-81.701489,-81.698775,-81.699167,-81.694931,-81.696038,-81.694532,-81.6965,-81.695838,-81.697916,-81.695874,-81.697414],"lat":[36.496341,36.497992,36.499687,36.502092,36.503735,36.506024,36.506651,36.508427,36.521351,36.524259,36.528645,36.531067,36.535705,36.536774,36.540092,36.544654,36.548135,36.550928,36.551632,36.555939,36.561376,36.565881,36.567701,36.568676,36.568855,36.572009,36.578822,36.583679,36.585929,36.588157,36.586851,36.580449,36.579062,36.580243,36.576786,36.574736,36.573131,36.574103,36.574671,36.576009,36.574616,36.574681,36.554864,36.551474,36.547834,36.545849,36.552078,36.552016,36.545372,36.542402,36.540197,36.533424,36.525845,36.523327,36.517208,36.512456,36.505188,36.495393,36.480772,36.479488,36.478312,36.475863,36.47438,36.474279,36.471811,36.469077,36.4647,36.464496,36.465457,36.461829,36.461621,36.45139,36.446899,36.437594,36.432547,36.428908,36.417355,36.415651,36.41254,36.410555,36.404773,36.400937,36.400914,36.397942,36.395315,36.394067,36.391125,36.387524,36.381814,36.378874,36.375723,36.374313,36.37064,36.365351,36.363313,36.363429,36.365034,36.361175,36.361681,36.363213,36.363987,36.363306,36.368862,36.366836,36.367991,36.367489,36.368814,36.368474,36.367165,36.367794,36.370416,36.370716,36.37632,36.377183,36.376891,36.372622,36.372306,36.371859,36.370581,36.364945,36.359598,36.358456,36.3567,36.355487,36.360061,36.359613,36.355678,36.313914,36.312764,36.313538,36.311755,36.307879,36.303859,36.302279,36.302743,36.300989,36.300644,36.302139,36.301131,36.294479,36.289602,36.286065,36.286374,36.284713,36.282527,36.281473,36.277983,36.28265,36.282952,36.285813,36.28788,36.29083,36.291693,36.295592,36.296019,36.295116,36.291975,36.292276,36.28397,36.28497,36.281143,36.278075,36.277443,36.27554,36.272317,36.266313,36.266608,36.263886,36.262791,36.261004,36.26085,36.257538,36.258412,36.250917,36.248484,36.251592,36.253144,36.251048,36.248081,36.244733,36.240272,36.241218,36.256833,36.255214,36.26572,36.271307,36.276467,36.272064,36.279631,36.281723,36.283623,36.291288,36.302313,36.311868,36.317947,36.348593,36.35139,36.354438,36.389733,36.394781,36.394145,36.394969,36.400894,36.40181,36.40343,36.40811,36.410821,36.412653,36.413637,36.412534,36.414797,36.415786,36.417669,36.418438,36.419939,36.420502,36.422326,36.422454,36.430242,36.433947,36.437107,36.438571,36.441617,36.445085,36.447379,36.450633,36.451503,36.455291,36.456403,36.459502,36.462377,36.464003,36.463317,36.463119,36.464032,36.46739,36.469937,36.473432,36.476047,36.480164,36.48877,36.491663,36.496341]}]],[[{"lng":[-82.197663,-82.193923,-82.192537,-82.187408,-82.185861,-82.186558,-82.190023,-82.191034,-82.193898,-82.191368,-82.191367,-82.192682,-82.191487,-82.192006,-82.197284,-82.198124,-82.201271,-82.203957,-82.203532,-82.199986,-82.195715,-82.193865,-82.193183,-82.194204,-82.198345,-82.205281,-82.209182,-82.214088,-82.227298,-82.233337,-82.237363,-82.23625,-82.236901,-82.249892,-82.252431,-82.253705,-82.252451,-82.252823,-82.249042,-82.25,-82.251546,-82.25688,-82.260037,-82.263494,-82.273855,-82.272466,-82.267735,-82.267843,-82.280333,-82.290459,-82.298992,-82.299211,-82.301618,-82.305287,-82.310676,-82.312995,-82.311352,-82.312878,-82.320053,-82.323759,-82.335234,-82.338245,-82.339614,-82.337285,-82.336279,-82.336941,-82.339746,-82.340513,-82.344398,-82.345116,-82.348668,-82.351713,-82.354079,-82.356497,-82.35856,-82.370663,-82.374032,-82.376922,-82.379517,-82.383765,-82.392747,-82.39866,-82.401453,-82.40282,-82.402161,-82.399206,-82.399634,-82.414562,-82.416708,-82.410158,-82.406958,-82.404458,-82.397658,-82.395558,-82.393858,-82.389958,-82.382858,-82.380458,-82.378758,-82.375558,-82.369109,-82.364122,-82.355157,-82.349957,-82.346857,-82.336056,-82.323003,-82.321443,-82.318156,-82.314056,-82.308655,-82.303455,-82.289455,-82.280354,-82.274054,-82.270954,-82.266754,-82.264253,-82.263654,-82.260353,-82.254453,-82.251853,-82.249053,-82.245053,-82.241553,-82.231797,-82.229262,-82.224352,-82.221852,-82.218452,-82.213852,-82.210251,-82.208484,-82.203559,-82.200962,-82.19925,-82.195349,-82.191949,-82.18745,-82.18425,-82.176849,-82.172149,-82.160348,-82.159048,-82.155948,-82.152748,-82.152448,-82.147948,-82.146147,-82.144147,-82.144047,-82.140847,-82.140847,-82.136547,-82.136546,-82.137974,-82.131146,-82.130246,-82.115245,-82.105444,-82.098544,-82.085943,-82.080443,-82.080143,-82.075743,-82.076743,-82.076343,-82.071842,-82.069042,-82.071042,-82.066542,-82.03884,-82.04304,-82.04894,-82.04954,-82.04834,-82.055357,-82.057907,-82.058967,-82.059052,-82.048268,-82.034192,-81.981723,-81.98183,-81.979009,-81.980303,-81.979504,-81.981114,-81.980213,-81.984704,-81.986224,-81.98981,-81.991532,-81.996857,-82.003082,-82.004164,-82.007924,-82.013241,-82.022925,-82.025981,-82.028338,-82.02733,-82.029454,-82.029547,-82.033086,-82.033899,-82.036804,-82.039526,-82.047914,-82.053198,-82.055552,-82.057923,-82.063157,-82.067076,-82.070932,-82.074951,-82.084243,-82.089602,-82.092116,-82.097411,-82.099916,-82.099461,-82.101781,-82.110026,-82.113659,-82.117079,-82.120395,-82.124256,-82.130145,-82.134109,-82.144595,-82.143487,-82.143869,-82.146991,-82.146659,-82.149568,-82.150059,-82.14634,-82.145624,-82.143862,-82.142972,-82.141379,-82.138657,-82.141552,-82.142692,-82.141786,-82.142884,-82.141168,-82.146283,-82.145207,-82.145799,-82.144651,-82.14549,-82.144888,-82.147068,-82.146532,-82.149779,-82.15015,-82.146347,-82.144657,-82.146656,-82.147111,-82.145234,-82.144005,-82.1428,-82.144716,-82.146845,-82.149877,-82.150349,-82.151802,-82.154964,-82.15351,-82.155124,-82.15042,-82.152574,-82.145553,-82.145336,-82.154781,-82.160256,-82.166475,-82.168246,-82.167681,-82.169463,-82.175308,-82.177339,-82.183058,-82.184199,-82.184285,-82.191903,-82.193309,-82.19715,-82.197663],"lat":[35.953049,35.95583,35.959569,35.958279,35.959768,35.961334,35.963387,35.965719,35.967134,35.970492,35.981585,35.983623,35.986063,35.990862,35.992241,35.995815,35.998939,36.003853,36.005943,36.005837,36.0003,36.000555,36.001789,36.010822,36.015532,36.013946,36.016361,36.016902,36.012882,36.013358,36.0095,36.005783,36.004622,36.008966,36.008247,36.005738,36.002273,35.998841,35.991503,35.989112,35.988991,35.99192,35.996666,35.999397,36.003692,36.011063,36.014438,36.016106,36.025476,36.029069,36.039945,36.04533,36.045358,36.040711,36.039397,36.034968,36.027792,36.025838,36.025457,36.029043,36.028958,36.030294,36.036011,36.039214,36.044726,36.055255,36.061061,36.065385,36.071183,36.07636,36.079107,36.084373,36.084383,36.082903,36.078782,36.076468,36.072195,36.070593,36.070587,36.075041,36.080444,36.081911,36.081123,36.078486,36.076292,36.073182,36.071518,36.071749,36.07278,36.082709,36.084509,36.087609,36.090609,36.093209,36.093409,36.096909,36.099609,36.099309,36.102809,36.105609,36.107402,36.10754,36.115609,36.117109,36.115209,36.115009,36.12028,36.119546,36.12091,36.12421,36.12651,36.13101,36.13571,36.12881,36.12941,36.12761,36.12691,36.12721,36.12961,36.13371,36.13601,36.13221,36.13251,36.131011,36.137111,36.143942,36.144536,36.150411,36.157011,36.156912,36.159112,36.158712,36.15728,36.157456,36.156465,36.152713,36.150013,36.148813,36.151113,36.144914,36.142214,36.146414,36.146815,36.145815,36.148115,36.148315,36.147515,36.149515,36.145815,36.144215,36.140216,36.138515,36.136215,36.128817,36.123717,36.119576,36.108317,36.104517,36.104618,36.108119,36.105719,36.10602,36.10302,36.10012,36.09602,36.09242,36.08532,36.081121,36.076521,36.069421,36.062421,36.008024,36.005924,36.008323,36.005023,36.002123,35.999096,35.995566,35.991316,35.987805,35.963691,35.942107,35.91152,35.907649,35.901591,35.8986,35.896954,35.889866,35.884922,35.882818,35.88077,35.880222,35.876118,35.873993,35.875375,35.880274,35.883041,35.885082,35.88475,35.88021,35.879272,35.877116,35.871133,35.867596,35.865002,35.862141,35.85886,35.858397,35.853221,35.851817,35.852526,35.851468,35.851919,35.850311,35.850518,35.848256,35.849261,35.851001,35.849317,35.852332,35.850648,35.849258,35.840791,35.835007,35.834727,35.832631,35.825043,35.823887,35.82529,35.824347,35.824436,35.8255,35.829374,35.835789,35.837229,35.839697,35.841681,35.841702,35.843373,35.843872,35.841992,35.84186,35.845882,35.846773,35.848708,35.851846,35.855193,35.857902,35.863663,35.869762,35.87345,35.874972,35.877431,35.88043,35.88292,35.888988,35.890967,35.892467,35.894395,35.896654,35.897462,35.9063,35.904176,35.904497,35.908484,35.913794,35.911608,35.913659,35.91667,35.91488,35.914951,35.917924,35.921276,35.924486,35.928822,35.93076,35.931777,35.933779,35.930557,35.934606,35.933334,35.929513,35.928674,35.932787,35.935769,35.937167,35.938698,35.942489,35.947245,35.950544,35.951827,35.953049]}]],[[{"lng":[-79.927557,-79.922257,-79.914146,-79.908931,-79.900681,-79.89425,-79.885009,-79.870237,-79.84999,-79.848545,-79.851634,-79.859861,-79.866259,-79.872215,-79.872097,-79.863607,-79.864997,-79.879544,-79.899701,-79.899456,-79.894291,-79.892742,-79.877275,-79.875716,-79.875459,-79.882736,-79.899424,-79.909477,-79.911525,-79.912591,-79.912403,-79.921659,-79.922836,-79.92622,-79.933026,-79.942119,-79.956084,-79.979015,-79.984069,-79.987029,-79.993898,-79.999268,-80.011869,-80.024571,-80.041837,-80.067782,-80.069254,-80.069378,-80.074839,-80.07539,-80.041106,-80.03371,-80.028576,-80.02218,-80.018508,-80.001933,-79.987333,-79.981674,-79.972911,-79.951888,-79.949312,-79.944376,-79.898618,-79.851762,-79.843076,-79.836139,-79.830042,-79.824492,-79.818749,-79.81187,-79.792011,-79.783949,-79.767189,-79.75774,-79.749766,-79.742789,-79.7398,-79.737984,-79.73488,-79.713273,-79.703553,-79.694109,-79.69379,-79.686258,-79.683824,-79.679426,-79.673494,-79.671112,-79.662971,-79.65741,-79.642069,-79.627005,-79.614296,-79.613873,-79.610051,-79.608488,-79.5992,-79.597137,-79.590891,-79.58459,-79.584728,-79.577282,-79.574773,-79.57363,-79.576918,-79.574856,-79.576806,-79.575831,-79.581487,-79.582989,-79.576386,-79.575384,-79.571345,-79.559145,-79.555858,-79.553157,-79.548951,-79.538423,-79.52887,-79.525918,-79.525111,-79.516309,-79.515085,-79.499762,-79.492067,-79.488419,-79.486217,-79.482681,-79.47764,-79.476301,-79.470925,-79.466301,-79.462117,-79.459176,-79.460886,-79.46871,-79.511748,-79.521432,-79.551359,-79.568776,-79.572033,-79.572684,-79.566305,-79.571566,-79.578255,-79.578124,-79.581491,-79.581906,-79.585466,-79.583267,-79.584879,-79.58154,-79.577674,-79.573031,-79.567581,-79.564411,-79.565903,-79.561826,-79.615988,-79.62673,-79.626356,-79.620083,-79.619944,-79.623742,-79.617574,-79.620154,-79.618709,-79.619124,-79.622316,-79.622813,-79.621562,-79.622811,-79.620865,-79.617313,-79.614168,-79.625644,-79.634571,-79.637399,-79.654499,-79.672852,-79.678373,-79.688392,-79.688186,-79.692449,-79.692948,-79.927557],"lat":[34.806575,34.809496,34.818028,34.841027,34.857679,34.860896,34.863099,34.875154,34.899317,34.904558,34.91606,34.932851,34.938729,34.950125,34.954928,34.975008,34.980142,34.988076,35.005645,35.009308,35.017231,35.022838,35.035944,35.037936,35.042278,35.050884,35.0595,35.067432,35.071629,35.079166,35.096493,35.106526,35.113362,35.116946,35.118674,35.118925,35.114487,35.100468,35.090928,35.088422,35.085469,35.085391,35.088987,35.090826,35.103026,35.111897,35.113595,35.123292,35.134213,35.143081,35.139693,35.140331,35.137892,35.137328,35.140725,35.149026,35.154412,35.158824,35.156656,35.156677,35.157766,35.164289,35.16171,35.183418,35.18131,35.177232,35.177061,35.179092,35.177888,35.179942,35.175952,35.175531,35.177498,35.17356,35.172951,35.174211,35.17529,35.177692,35.178316,35.173098,35.175443,35.179757,35.178275,35.177945,35.176427,35.17729,35.175374,35.17279,35.170624,35.164536,35.157687,35.162026,35.163679,35.158597,35.155165,35.150242,35.142711,35.143765,35.140882,35.131861,35.12909,35.124315,35.12127,35.11708,35.109523,35.106706,35.100546,35.098325,35.091523,35.084447,35.075677,35.069815,35.065922,35.065167,35.066381,35.065213,35.066105,35.064707,35.066238,35.065552,35.063353,35.064884,35.063029,35.063561,35.059571,35.061038,35.058565,35.059231,35.057103,35.053371,35.048289,35.046886,35.043211,35.043096,35.040898,35.036624,35.025814,35.019338,35.005604,34.993865,34.993067,34.991968,34.979137,34.975072,34.972269,34.969044,34.964213,34.957068,34.955121,34.947633,34.944014,34.935244,34.929931,34.929748,34.924253,34.918941,34.910921,34.910363,34.865968,34.852093,34.850995,34.849007,34.846103,34.84282,34.83925,34.835012,34.833433,34.831119,34.829103,34.826741,34.824521,34.820193,34.81795,34.818644,34.815338,34.817895,34.825493,34.822947,34.814881,34.813271,34.813948,34.81134,34.80967,34.806797,34.80499,34.806575]}]],[[{"lng":[-77.730784,-77.601416,-77.506638,-77.52729,-77.473716,-77.448753,-77.329181,-77.188023,-77.19077,-77.189347,-77.186066,-77.179971,-77.177526,-77.172452,-77.169204,-77.164622,-77.15966,-77.154539,-77.147364,-77.144852,-77.136868,-77.132842,-77.130224,-77.124673,-77.11378,-77.113444,-77.109354,-77.110185,-77.108342,-77.10976,-77.107193,-77.107042,-77.099095,-77.101171,-77.102999,-77.111531,-77.049649,-77.050829,-77.054841,-77.051947,-77.055507,-77.067778,-77.074913,-77.079214,-77.084544,-77.089318,-77.0908,-77.09615,-77.107382,-77.110272,-77.112621,-77.115566,-77.116195,-77.120033,-77.123335,-77.125503,-77.125728,-77.128253,-77.130901,-77.134573,-77.135852,-77.142356,-77.144284,-77.14803,-77.150143,-77.158604,-77.16153,-77.161646,-77.164589,-77.167839,-77.165152,-77.162302,-77.162684,-77.167495,-77.169604,-77.172057,-77.173315,-77.170176,-77.174553,-77.175205,-77.170827,-77.17601,-77.175678,-77.18733,-77.190877,-77.189264,-77.193158,-77.196332,-77.193213,-77.195192,-77.195784,-77.192439,-77.186608,-77.184786,-77.186046,-77.184721,-77.179603,-77.18134,-77.182657,-77.185052,-77.185672,-77.188953,-77.191849,-77.190984,-77.193345,-77.196453,-77.197452,-77.201986,-77.201561,-77.2034,-77.201745,-77.201051,-77.203612,-77.202785,-77.205311,-77.204799,-77.205925,-77.205792,-77.212172,-77.209908,-77.212308,-77.213648,-77.212895,-77.219244,-77.219919,-77.21594,-77.222064,-77.222418,-77.220615,-77.221606,-77.225071,-77.230394,-77.233963,-77.231679,-77.233201,-77.234077,-77.238675,-77.237184,-77.240115,-77.249998,-77.250364,-77.252224,-77.250979,-77.253279,-77.25985,-77.260715,-77.259553,-77.262342,-77.26458,-77.264078,-77.267192,-77.267598,-77.283481,-77.285187,-77.286815,-77.289577,-77.294427,-77.297882,-77.304294,-77.308817,-77.311492,-77.312613,-77.316983,-77.318964,-77.32246,-77.329372,-77.337998,-77.342634,-77.34306,-77.344834,-77.356781,-77.360355,-77.363163,-77.365336,-77.365033,-77.366545,-77.365729,-77.367414,-77.401853,-77.502727,-77.63896,-77.675373,-77.730784],"lat":[35.008259,35.071252,35.172177,35.243479,35.228983,35.217156,35.14951,35.081376,35.076576,35.066191,35.062856,35.060411,35.056232,35.060819,35.060529,35.065716,35.062636,35.062783,35.056947,35.060687,35.063518,35.067451,35.074006,35.077742,35.074169,35.071789,35.067399,35.065186,35.054357,35.04607,35.042324,35.035466,35.026623,35.024781,35.019555,34.831257,34.835031,34.830194,34.824144,34.819479,34.818538,34.821308,34.815812,34.810362,34.810911,34.808941,34.799246,34.799243,34.803106,34.801027,34.796487,34.79723,34.793921,34.794501,34.792643,34.793492,34.795948,34.795817,34.798137,34.796798,34.797909,34.796846,34.793248,34.794029,34.792589,34.79349,34.795175,34.793292,34.79038,34.790941,34.787654,34.787511,34.785834,34.78505,34.78059,34.780383,34.781943,34.785063,34.786009,34.787438,34.790124,34.792192,34.796555,34.801905,34.802288,34.806338,34.806592,34.809715,34.814301,34.815193,34.817496,34.817136,34.819177,34.821785,34.823252,34.825764,34.829325,34.836252,34.837247,34.836474,34.834913,34.83333,34.83391,34.832334,34.831965,34.834128,34.832556,34.834282,34.836319,34.837007,34.83784,34.8419,34.842571,34.845,34.845939,34.847796,34.847301,34.848455,34.853113,34.858729,34.859355,34.861492,34.862333,34.867655,34.870979,34.873337,34.882172,34.88343,34.884431,34.887088,34.887333,34.885272,34.88606,34.89299,34.893652,34.891564,34.893476,34.899878,34.898869,34.900806,34.902911,34.903027,34.909773,34.910648,34.909244,34.91136,34.914431,34.918845,34.919092,34.921075,34.923334,34.925763,34.927866,34.9313,34.930213,34.931559,34.930384,34.933824,34.934286,34.937582,34.936484,34.933127,34.932302,34.934879,34.934708,34.93835,34.936151,34.933529,34.931391,34.930583,34.929272,34.925897,34.925797,34.923313,34.918945,34.915637,34.912731,34.906631,34.923889,34.9696,34.984419,34.973417,35.008259]}]],[[{"lng":[-77.897262,-77.20497,-77.16966,-77.1645,-77.160411,-77.157887,-77.157207,-77.154796,-77.152726,-77.150995,-77.151421,-77.153378,-77.149748,-77.148615,-77.150742,-77.150545,-77.152587,-77.148562,-77.149016,-77.131749,-77.126874,-77.122898,-77.12111,-77.121396,-77.118674,-77.114306,-77.114077,-77.103046,-77.10336,-77.098764,-77.095645,-77.092867,-77.087136,-77.083138,-77.083279,-77.080897,-77.085234,-77.084184,-77.085771,-77.079822,-77.077724,-77.07676,-77.074265,-77.075003,-77.073614,-77.071516,-77.069872,-77.0663,-77.069786,-77.066979,-77.069105,-77.068538,-77.066185,-77.067545,-77.066269,-77.070663,-77.070832,-77.074914,-77.07412,-77.076387,-77.079845,-77.080978,-77.082792,-77.081232,-77.083187,-77.085143,-77.091887,-77.09526,-77.099344,-77.101385,-77.107619,-77.112098,-77.114929,-77.120172,-77.126266,-77.129072,-77.132729,-77.133212,-77.136812,-77.136421,-77.131468,-77.131429,-77.190484,-77.208836,-77.2289,-77.228656,-77.244694,-77.249687,-77.253048,-77.263863,-77.269881,-77.275388,-77.287872,-77.290443,-77.297758,-77.297759,-77.293354,-77.295812,-77.295219,-77.298721,-77.299738,-77.295463,-77.298053,-77.295635,-77.291389,-77.295731,-77.300445,-77.309817,-77.312809,-77.312753,-77.308772,-77.30928,-77.319895,-77.325571,-77.329497,-77.341892,-77.350899,-77.358273,-77.385145,-77.386781,-77.386102,-77.376596,-77.377693,-77.383081,-77.409948,-77.41325,-77.412769,-77.414293,-77.421981,-77.441747,-77.46819,-77.476332,-77.485013,-77.495469,-77.524054,-77.543564,-77.557361,-77.571556,-77.577214,-77.586041,-77.579512,-77.573657,-77.563049,-77.557786,-77.549326,-77.547571,-77.544534,-77.549626,-77.555968,-77.573269,-77.580773,-77.586775,-77.589834,-77.59196,-77.610514,-77.616069,-77.621365,-77.6247,-77.630837,-77.639377,-77.644929,-77.649179,-77.660145,-77.681018,-77.694157,-77.710013,-77.725846,-77.730619,-77.744258,-77.753325,-77.763071,-77.768464,-77.775423,-77.787471,-77.817196,-77.83333,-77.858399,-77.865628,-77.870986,-77.876593,-77.885216,-77.885594,-77.892215,-77.89795,-77.900036,-77.899771,-77.897262],"lat":[36.544674,36.544601,36.547315,36.54633,36.541927,36.54298,36.539935,36.541331,36.539751,36.540575,36.538423,36.538058,36.536752,36.534165,36.533365,36.530458,36.529475,36.526636,36.525171,36.522556,36.518205,36.520582,36.519347,36.522597,36.523193,36.521776,36.518366,36.516951,36.521071,36.517136,36.51661,36.518351,36.513728,36.51318,36.507457,36.507641,36.505397,36.500751,36.500152,36.496447,36.497615,36.496127,36.496471,36.498279,36.499561,36.497547,36.498921,36.496998,36.494595,36.492558,36.489078,36.487293,36.487385,36.485073,36.483196,36.483699,36.479556,36.481135,36.478274,36.480677,36.478891,36.476853,36.476876,36.47516,36.472481,36.475571,36.471884,36.473806,36.479252,36.477397,36.476021,36.477827,36.473981,36.473726,36.464252,36.463338,36.460432,36.458166,36.456177,36.447961,36.441595,36.437826,36.286657,36.246773,36.217442,36.214459,36.215077,36.219013,36.219154,36.217167,36.213209,36.214492,36.211245,36.212779,36.208179,36.203144,36.196597,36.193095,36.188106,36.186367,36.181217,36.174417,36.172345,36.17232,36.168341,36.16563,36.164944,36.168492,36.17181,36.175381,36.179684,36.180851,36.181949,36.186549,36.192362,36.189704,36.19128,36.197595,36.209863,36.212907,36.215859,36.238697,36.245587,36.250623,36.26353,36.274975,36.284633,36.292918,36.299579,36.32409,36.32127,36.317125,36.316137,36.3081,36.306806,36.303057,36.30569,36.314248,36.328137,36.337015,36.351044,36.357362,36.362008,36.367181,36.370682,36.372787,36.394118,36.412266,36.418194,36.423135,36.424187,36.422217,36.424436,36.431393,36.437336,36.443855,36.443303,36.444791,36.450401,36.474936,36.480636,36.481689,36.479655,36.479207,36.481739,36.487238,36.487563,36.486566,36.47928,36.478877,36.48217,36.480534,36.482451,36.490709,36.500499,36.501004,36.506655,36.503426,36.503944,36.506412,36.506504,36.508204,36.512034,36.506849,36.532992,36.544663,36.544674]}]],[[{"lng":[-81.343629,-81.33352,-81.342953,-81.328385,-81.326405,-81.322456,-81.317767,-81.315663,-81.314017,-81.314329,-81.312775,-81.307274,-81.301192,-81.300515,-81.300583,-81.295734,-81.2928,-81.289512,-81.288478,-81.283768,-81.284559,-81.282681,-81.282759,-81.27207,-81.267889,-81.263806,-81.257847,-81.256682,-81.252683,-81.249521,-81.24453,-81.241039,-81.240663,-81.237599,-81.232559,-81.230139,-81.227143,-81.224107,-81.221497,-81.219404,-81.211915,-81.207569,-81.205625,-81.202629,-81.200149,-81.195921,-81.192995,-81.190911,-81.190167,-81.188242,-81.185722,-81.182361,-81.180874,-81.1758,-81.173669,-81.174165,-81.173124,-81.169843,-81.166642,-81.146246,-81.142847,-81.139724,-81.137058,-81.123729,-81.121913,-81.115735,-81.112356,-81.106417,-81.101279,-81.099178,-81.098138,-81.057556,-81.048351,-81.028884,-81.0034,-81.005541,-81.041339,-81.060451,-81.062757,-81.064603,-81.070057,-81.075482,-81.077505,-81.079265,-81.078943,-81.086731,-81.091157,-81.093699,-81.101036,-81.102386,-81.105954,-81.106426,-81.109416,-81.115753,-81.120082,-81.122879,-81.128414,-81.129655,-81.130812,-81.132858,-81.138642,-81.141085,-81.142311,-81.142338,-81.143795,-81.149609,-81.154391,-81.155657,-81.15727,-81.161779,-81.167687,-81.175941,-81.191624,-81.194798,-81.201893,-81.205137,-81.216186,-81.222109,-81.225814,-81.232186,-81.240954,-81.245858,-81.249642,-81.251695,-81.252266,-81.254113,-81.26635,-81.270028,-81.276056,-81.280115,-81.283685,-81.288995,-81.298074,-81.299539,-81.304495,-81.308346,-81.315257,-81.327082,-81.334255,-81.33398,-81.331874,-81.332012,-81.332912,-81.335033,-81.335661,-81.337917,-81.335743,-81.339974,-81.33973,-81.337397,-81.339308,-81.340521,-81.340977,-81.342963,-81.343783,-81.343629],"lat":[35.825765,35.879783,35.923128,35.99655,35.994791,35.996864,35.996928,36.000948,36.001755,36.00422,36.004875,36.005263,36.00411,36.004633,36.006038,36.00704,36.009409,36.009877,36.011693,36.013077,36.015444,36.016344,36.017716,36.021649,36.025064,36.025939,36.025455,36.02643,36.025403,36.027187,36.025154,36.026155,36.028306,36.030524,36.030092,36.031447,36.030739,36.031071,36.029824,36.029753,36.03376,36.032304,36.033158,36.036712,36.035384,36.035047,36.036675,36.036949,36.035652,36.034549,36.035122,36.032793,36.033422,36.031182,36.029256,36.027974,36.026524,36.025525,36.025654,36.033561,36.036375,36.037648,36.036342,36.037694,36.035438,36.034485,36.037717,36.036784,36.031856,36.030997,36.02831,36.031322,36.041184,36.045762,35.996737,35.958287,35.857855,35.835109,35.82764,35.824561,35.818141,35.815101,35.812734,35.808994,35.802775,35.796681,35.795525,35.794033,35.787477,35.782926,35.781769,35.778494,35.776638,35.782308,35.784599,35.784939,35.789383,35.800573,35.803241,35.80529,35.808442,35.812162,35.819807,35.827434,35.828076,35.828958,35.828427,35.827993,35.826069,35.824768,35.825669,35.823054,35.822371,35.821182,35.823289,35.8228,35.817277,35.811304,35.809519,35.812419,35.812841,35.815031,35.815685,35.814306,35.810637,35.808798,35.804716,35.804457,35.806036,35.806135,35.804755,35.80039,35.798193,35.798338,35.802608,35.802509,35.797055,35.796392,35.79646,35.798505,35.800504,35.80309,35.80383,35.803777,35.807497,35.812631,35.814514,35.816057,35.816891,35.817911,35.823357,35.82441,35.823008,35.822618,35.823962,35.825765]}]],[[{"lng":[-76.775555,-76.77967,-76.783578,-76.787439,-76.790144,-76.795132,-76.807862,-76.822879,-76.830316,-76.837767,-76.851846,-76.872945,-76.88248,-76.894143,-76.906167,-76.931821,-76.944866,-76.947256,-76.946275,-76.946676,-76.945158,-76.946364,-76.949066,-76.94682,-76.950384,-76.95056,-76.947682,-76.936617,-76.9343,-76.933354,-76.936213,-76.935045,-76.933175,-76.92901,-76.92597,-76.922012,-76.920214,-76.918154,-76.912714,-76.909986,-76.906698,-76.906153,-76.90321,-76.904741,-76.910311,-76.914099,-76.915957,-76.918009,-76.921296,-76.924635,-76.924312,-76.919909,-76.921637,-76.916001,-76.917317,-76.916988,-76.915897,-76.802631,-76.541599,-76.491477,-76.491405,-76.45369,-76.539147,-76.556837,-76.570719,-76.576911,-76.586219,-76.592301,-76.593998,-76.594279,-76.597249,-76.600729,-76.604407,-76.608961,-76.613518,-76.622631,-76.627984,-76.633132,-76.639811,-76.640917,-76.642417,-76.642163,-76.644286,-76.646605,-76.649859,-76.650598,-76.65453,-76.653369,-76.654274,-76.656424,-76.657442,-76.659479,-76.662788,-76.663269,-76.664457,-76.664852,-76.667031,-76.669888,-76.671585,-76.671897,-76.673594,-76.674612,-76.672237,-76.672406,-76.675574,-76.675603,-76.67252,-76.672441,-76.675793,-76.675168,-76.676956,-76.677848,-76.679323,-76.680635,-76.683518,-76.68431,-76.696601,-76.699922,-76.709037,-76.715414,-76.72638,-76.737079,-76.740983,-76.753825,-76.759386,-76.762156,-76.769175,-76.775555],"lat":[36.360609,36.362462,36.362879,36.36194,36.359994,36.359948,36.362733,36.3646,36.370575,36.374015,36.375417,36.382992,36.382717,36.390192,36.390039,36.40107,36.411524,36.41649,36.425679,36.432466,36.441081,36.449152,36.457483,36.465968,36.469621,36.470856,36.472239,36.470647,36.47137,36.474079,36.480337,36.483917,36.485084,36.485666,36.487798,36.496288,36.504436,36.505462,36.504308,36.505778,36.509945,36.516091,36.518816,36.522277,36.526973,36.528233,36.530606,36.5307,36.529012,36.52999,36.532091,36.532823,36.53787,36.543818,36.546047,36.550743,36.552093,36.55055,36.550475,36.510536,36.468648,36.378042,36.357238,36.355186,36.334287,36.335244,36.333342,36.330341,36.328052,36.324663,36.322785,36.32244,36.323836,36.323055,36.324106,36.328658,36.328432,36.330106,36.328986,36.324202,36.322898,36.319921,36.319396,36.32006,36.31752,36.310995,36.310699,36.312645,36.314087,36.313561,36.314637,36.313058,36.314501,36.313563,36.313723,36.315738,36.313792,36.315074,36.313266,36.310565,36.310908,36.308939,36.30784,36.306535,36.30633,36.304681,36.304063,36.303274,36.303129,36.301359,36.301594,36.300573,36.301484,36.300014,36.301416,36.300459,36.296211,36.29984,36.30306,36.307268,36.318692,36.325483,36.331163,36.344033,36.350873,36.352687,36.354855,36.360609]}]],[[{"lng":[-80.210461,-80.207329,-80.208176,-80.21334,-80.232378,-80.24037,-80.249578,-80.257149,-80.258832,-80.262593,-80.26891,-80.283565,-80.288813,-80.294941,-80.304237,-80.30778,-80.314956,-80.326578,-80.331189,-80.333843,-80.33395,-80.331529,-80.324692,-80.324022,-80.325192,-80.333059,-80.339465,-80.358393,-80.3712,-80.382531,-80.388956,-80.393442,-80.395682,-80.404567,-80.413844,-80.443203,-80.452435,-80.454952,-80.458035,-80.459637,-80.456889,-80.452716,-80.451307,-80.454967,-80.473457,-80.476686,-80.476909,-80.473862,-80.466204,-80.464621,-80.465613,-80.473227,-80.47799,-80.485777,-80.487303,-80.48248,-80.476719,-80.473072,-80.464086,-80.461735,-80.455255,-80.445933,-80.437749,-80.435621,-80.432695,-80.429164,-80.427433,-80.425572,-80.422265,-80.41558,-80.408423,-80.398679,-80.39149,-80.388356,-80.385596,-80.389978,-80.393267,-80.412057,-80.41637,-80.414953,-80.410953,-80.407686,-80.391641,-80.377894,-80.372874,-80.368635,-80.365259,-80.375082,-80.37342,-80.369066,-80.368355,-80.375534,-80.374034,-80.374778,-80.378633,-80.382395,-80.390481,-80.392425,-80.395389,-80.344468,-80.322907,-80.322728,-80.213906,-80.213833,-80.149779,-80.043272,-80.046709,-80.061724,-80.066842,-80.182682,-80.184927,-80.184339,-80.190476,-80.196322,-80.197177,-80.1955,-80.199118,-80.201014,-80.208706,-80.210461],"lat":[35.557054,35.570713,35.580401,35.585131,35.597246,35.611658,35.619333,35.622763,35.625783,35.628518,35.63127,35.6336,35.636302,35.645175,35.653582,35.667097,35.671805,35.675475,35.680166,35.686006,35.693209,35.697479,35.703657,35.707114,35.711126,35.719925,35.721385,35.717462,35.716332,35.719594,35.719357,35.724354,35.725202,35.722271,35.722471,35.734785,35.734266,35.735593,35.740568,35.746564,35.75459,35.758239,35.76812,35.772948,35.784646,35.789183,35.792496,35.798066,35.801012,35.803112,35.809623,35.826892,35.831081,35.830595,35.833256,35.840048,35.843404,35.841484,35.827538,35.826714,35.827424,35.836607,35.831229,35.828216,35.828157,35.830307,35.833908,35.848443,35.852416,35.852072,35.846032,35.841448,35.842665,35.845716,35.854525,35.868291,35.870951,35.877179,35.880735,35.8849,35.889832,35.891514,35.89241,35.885246,35.884535,35.887385,35.894152,35.912406,35.918194,35.924438,35.928217,35.940524,35.952744,35.955589,35.963008,35.965358,35.967404,35.971529,35.97321,35.990957,35.990688,35.996714,35.996876,36.026772,36.026697,36.01061,35.920663,35.644763,35.505661,35.504335,35.508463,35.517466,35.525735,35.528852,35.530781,35.537395,35.545424,35.547419,35.550927,35.557054]}]],[[{"lng":[-79.137482,-78.7963,-78.794823,-78.799252,-78.802005,-79.008299,-79.153733,-79.146582,-79.137482],"lat":[36.54173,36.541713,36.526689,36.369927,36.235937,36.240736,36.242117,36.388245,36.54173]}]],[[{"lng":[-76.711172,-76.701914,-76.700619,-76.699354,-76.694768,-76.69339,-76.693559,-76.691916,-76.685619,-76.666242,-76.63521,-76.616408,-76.606135,-76.59195,-76.577818,-76.547787,-76.52334,-76.499661,-76.46589,-76.447259,-76.435966,-76.415982,-76.406269,-76.397663,-76.38712,-76.381396,-76.358393,-76.358141,-76.363347,-76.3655,-76.366186,-76.36777,-76.370746,-76.370566,-76.379915,-76.372915,-76.369428,-76.359922,-76.353444,-76.405959,-76.395283,-76.546091,-76.845119,-76.847008,-76.83099,-76.833206,-76.831628,-76.826882,-76.825668,-76.817414,-76.820543,-76.816313,-76.810944,-76.80844,-76.807038,-76.803149,-76.802693,-76.803981,-76.803724,-76.801794,-76.798505,-76.794536,-76.792382,-76.793741,-76.793512,-76.798586,-76.80329,-76.796176,-76.794451,-76.790997,-76.786938,-76.782567,-76.781948,-76.784802,-76.784418,-76.785375,-76.784653,-76.789283,-76.786822,-76.785607,-76.784292,-76.783763,-76.780309,-76.779999,-76.781093,-76.778736,-76.77868,-76.776911,-76.777585,-76.776478,-76.776063,-76.77469,-76.774295,-76.773306,-76.77175,-76.771659,-76.765159,-76.762878,-76.761187,-76.760842,-76.749666,-76.743284,-76.737855,-76.731307,-76.728133,-76.724421,-76.723384,-76.718828,-76.711172],"lat":[35.922906,35.922772,35.923917,35.927672,35.934197,35.937929,35.942416,35.946217,35.95193,35.962018,35.972979,35.977311,35.978467,35.974782,35.974502,35.975724,35.978885,35.983998,35.992939,35.999248,36.005158,36.019544,36.024131,36.026365,36.026908,36.026229,36.020019,35.951564,35.947558,35.944083,35.934877,35.92974,35.92756,35.926486,35.914655,35.89916,35.883345,35.875456,35.861353,35.785221,35.697469,35.705033,35.705409,35.719581,35.730641,35.734838,35.737448,35.739487,35.74495,35.747718,35.754385,35.760549,35.761644,35.763757,35.769536,35.773779,35.776696,35.779447,35.783537,35.784885,35.784929,35.788578,35.788992,35.791117,35.795529,35.799572,35.806549,35.816952,35.81717,35.820456,35.820857,35.824511,35.826709,35.829016,35.830619,35.831507,35.832905,35.838027,35.839778,35.843923,35.844776,35.848984,35.851503,35.852669,35.853491,35.853948,35.856804,35.856575,35.857855,35.857494,35.858817,35.859066,35.857689,35.858616,35.858187,35.860989,35.861378,35.864055,35.863085,35.864822,35.868181,35.872487,35.878231,35.888468,35.898337,35.904291,35.912327,35.918579,35.922906]}]],[[{"lng":[-79.419288,-79.461754,-79.330959,-79.331866,-79.333337,-79.331946,-79.334195,-79.335098,-79.336788,-79.337026,-79.339025,-79.338184,-79.339741,-79.339742,-79.341907,-79.341908,-79.344212,-79.342963,-79.34402,-79.345436,-79.34659,-79.348295,-79.346737,-79.350207,-79.349037,-79.351671,-79.351352,-79.353354,-79.352981,-79.355457,-79.357605,-79.353053,-79.353526,-79.351967,-79.351617,-79.352998,-79.353387,-79.349143,-79.191423,-79.034645,-78.956151,-78.952451,-78.94105,-78.938169,-78.928568,-78.922292,-78.921689,-78.927013,-78.903678,-78.901096,-78.898448,-78.900348,-78.897948,-78.898448,-78.892748,-78.888848,-78.883747,-78.886447,-78.883747,-78.884247,-78.882047,-78.879047,-78.878047,-78.874736,-78.874826,-78.865547,-78.866247,-78.863546,-78.864846,-78.863046,-78.863446,-78.861046,-78.856546,-78.857446,-78.854346,-78.848446,-78.843245,-78.845146,-78.839445,-78.841145,-78.838145,-78.837045,-78.836045,-78.832745,-78.831145,-78.821844,-78.821244,-78.818344,-78.813144,-78.806244,-78.805544,-78.807544,-78.805144,-78.809744,-78.807544,-78.813244,-78.815044,-78.819844,-78.820144,-78.815044,-78.812329,-78.815792,-78.818212,-78.819448,-78.82233,-78.821809,-78.826343,-78.828009,-78.830094,-78.828245,-78.830145,-78.829145,-78.833345,-78.832745,-78.834745,-78.832145,-78.831919,-78.833545,-78.836945,-78.840945,-78.839345,-78.835545,-78.834945,-78.837745,-78.839445,-78.842845,-78.842945,-78.846045,-78.856846,-78.856146,-78.858746,-78.853446,-78.855946,-78.855446,-78.857546,-78.854546,-78.858846,-78.859046,-78.854546,-78.855946,-78.853046,-78.854446,-78.850446,-78.853246,-78.855546,-78.850046,-78.843545,-78.843245,-78.846545,-78.845945,-78.854046,-78.866658,-78.868252,-78.874694,-78.881026,-78.882528,-78.887982,-78.888345,-78.894491,-78.902127,-78.905186,-78.907009,-78.912542,-78.917626,-78.918817,-78.920382,-78.925944,-78.929834,-78.934865,-78.937901,-78.941363,-78.944898,-78.945818,-78.951846,-78.954186,-78.953943,-78.955402,-78.960067,-78.960926,-78.966093,-78.967167,-78.971003,-78.968248,-78.969874,-78.96944,-78.967445,-78.971815,-78.967953,-78.970207,-78.969788,-78.967908,-78.970965,-78.967256,-78.969462,-78.96716,-78.969788,-78.968021,-78.970396,-78.969761,-78.975756,-78.973457,-78.977653,-78.979719,-78.978477,-78.982708,-78.983668,-78.994992,-78.994896,-78.998596,-79.002259,-79.011528,-79.009593,-79.010224,-79.007374,-79.007408,-79.005766,-79.00492,-79.002893,-79.002885,-79.001974,-79.000816,-79.003994,-79.003771,-79.008023,-79.005616,-79.010706,-79.009107,-79.016893,-79.0167,-79.018743,-79.018494,-79.0273,-79.025147,-79.025189,-79.027109,-79.028482,-79.030316,-79.028848,-79.032136,-79.030558,-79.034341,-79.033797,-79.035727,-79.035191,-79.037233,-79.034914,-79.036463,-79.035111,-79.03689,-79.033894,-79.035485,-79.036785,-79.040388,-79.037284,-79.038642,-79.046023,-79.049148,-79.050941,-79.053021,-79.057482,-79.055081,-79.059055,-79.060779,-79.06151,-79.063751,-79.065165,-79.068423,-79.068493,-79.069785,-79.067377,-79.070203,-79.069158,-79.071169,-79.249769,-79.358291,-79.419288],"lat":[34.595808,34.630432,34.773593,34.776273,34.776508,34.77703,34.777313,34.780983,34.781974,34.785413,34.785374,34.787549,34.78728,34.789386,34.789088,34.792225,34.792156,34.793187,34.79608,34.795802,34.800213,34.800674,34.802579,34.805149,34.808536,34.810496,34.81267,34.812385,34.814216,34.81536,34.820272,34.823869,34.826259,34.825798,34.827883,34.827419,34.828861,34.838476,34.833377,34.953637,34.913845,34.908716,34.903291,34.89691,34.88905,34.875937,34.87124,34.864249,34.834289,34.834789,34.832065,34.828165,34.826165,34.824665,34.814065,34.811465,34.812365,34.809865,34.806265,34.802465,34.798065,34.796265,34.790965,34.787267,34.785425,34.774966,34.770766,34.767466,34.763766,34.763166,34.760466,34.757066,34.754566,34.751666,34.735866,34.732566,34.726466,34.723766,34.721967,34.718867,34.720767,34.716367,34.718067,34.718567,34.714367,34.709367,34.706767,34.705267,34.696367,34.690567,34.687967,34.680567,34.674268,34.670167,34.667767,34.664767,34.665367,34.659567,34.656667,34.656467,34.651441,34.651853,34.650175,34.642031,34.641528,34.63861,34.639031,34.636995,34.632419,34.629467,34.627667,34.624367,34.622367,34.617367,34.614867,34.612367,34.609597,34.601867,34.598367,34.597367,34.596067,34.597567,34.593467,34.592067,34.588967,34.588967,34.579967,34.575467,34.572567,34.570067,34.567867,34.557367,34.555067,34.552367,34.549467,34.547467,34.540967,34.537367,34.534367,34.530667,34.526667,34.521667,34.517767,34.517667,34.515167,34.513667,34.508967,34.507367,34.503667,34.501367,34.501667,34.493924,34.484699,34.478411,34.475697,34.472738,34.470273,34.466643,34.461445,34.457025,34.457012,34.454914,34.45651,34.454461,34.452257,34.45378,34.452565,34.454219,34.453731,34.451448,34.452351,34.45127,34.449222,34.448657,34.445618,34.443452,34.444436,34.442548,34.439118,34.435218,34.43061,34.427535,34.425013,34.424491,34.422544,34.422042,34.418261,34.41678,34.415201,34.413217,34.412917,34.409997,34.410652,34.406378,34.402077,34.401243,34.397552,34.396424,34.395216,34.395866,34.392223,34.390321,34.390874,34.392659,34.39226,34.393833,34.392574,34.390352,34.39098,34.384254,34.381034,34.380034,34.376952,34.376735,34.372501,34.372832,34.369704,34.368892,34.364484,34.365558,34.364611,34.362774,34.361268,34.361373,34.359304,34.355215,34.352883,34.35176,34.349996,34.350524,34.352127,34.353092,34.351786,34.348035,34.348741,34.346887,34.347018,34.342733,34.342743,34.340126,34.338506,34.336907,34.336836,34.333534,34.333252,34.329619,34.328717,34.327009,34.32596,34.324703,34.319342,34.321285,34.317612,34.316691,34.313076,34.310812,34.311605,34.314833,34.314585,34.311078,34.308903,34.308559,34.306766,34.308353,34.307536,34.308748,34.306964,34.305285,34.305236,34.303384,34.303499,34.300879,34.29924,34.449773,34.545625,34.595808]}]],[[{"lng":[-77.084716,-77.088603,-77.087305,-77.089551,-77.086673,-77.09075,-77.097186,-77.101339,-77.101638,-77.107268,-77.11029,-77.111761,-77.106554,-77.109694,-77.114275,-77.117254,-77.114292,-77.118163,-77.118132,-77.125465,-77.125319,-77.123349,-77.123789,-77.121943,-77.124725,-77.126678,-77.126915,-77.128353,-77.129234,-77.12967,-77.134655,-77.13887,-77.142751,-77.144221,-77.143968,-77.15062,-77.148266,-77.146377,-77.146964,-77.142031,-77.14013,-77.145615,-77.144401,-77.142405,-77.143444,-77.148158,-77.152612,-77.157101,-77.159306,-77.16181,-77.162872,-77.164757,-77.167765,-77.173996,-77.17277,-77.174652,-77.180717,-77.177479,-77.168121,-77.167231,-77.172446,-77.169514,-77.169889,-77.173336,-77.175636,-77.177027,-77.179666,-77.181,-77.187559,-77.190064,-77.192778,-77.195406,-77.193574,-77.19513,-77.193885,-77.187273,-77.18498,-77.174066,-77.170557,-77.170247,-77.172389,-77.174639,-77.174964,-77.172105,-77.169261,-77.16388,-77.156476,-77.066416,-76.985749,-76.9138,-76.845119,-76.638031,-76.601532,-76.600211,-76.606069,-76.600567,-76.591983,-76.57874,-76.577702,-76.574304,-76.573215,-76.564413,-76.56284,-76.554904,-76.5544,-76.550638,-76.542117,-76.533663,-76.534133,-76.539441,-76.538921,-76.52824,-76.524974,-76.518878,-76.518959,-76.513672,-76.506515,-76.501046,-76.50485,-76.500792,-76.49109,-76.486992,-76.482631,-76.479933,-76.467761,-76.467781,-76.478574,-76.484903,-76.491192,-76.500483,-76.524461,-76.562863,-76.58668,-76.599085,-76.602726,-76.604471,-76.602219,-76.597634,-76.58319,-76.579458,-76.581557,-76.585077,-76.584042,-76.575482,-76.562985,-76.558563,-76.538936,-76.521864,-76.590497,-76.604229,-76.612844,-76.617033,-76.616235,-76.619359,-76.614319,-76.614421,-76.612165,-76.61425,-76.613845,-76.632535,-76.845457,-76.95883,-77.190423,-77.189107,-77.191143,-77.181276,-77.179949,-77.181924,-77.18068,-77.17394,-77.176354,-77.167114,-77.176811,-77.178026,-77.176171,-77.127222,-77.112065,-77.084716],"lat":[35.552659,35.554682,35.558393,35.560389,35.562589,35.569081,35.564364,35.565965,35.570115,35.57123,35.569578,35.574696,35.580917,35.582982,35.58034,35.58147,35.58847,35.586749,35.583204,35.584797,35.586609,35.586248,35.591971,35.592015,35.59679,35.59724,35.594077,35.593925,35.596159,35.594624,35.596327,35.602152,35.598871,35.599292,35.601604,35.602327,35.604565,35.604174,35.605157,35.603836,35.605593,35.608737,35.61602,35.617706,35.620427,35.620222,35.626727,35.626537,35.629751,35.629345,35.633422,35.631208,35.631071,35.635577,35.644186,35.658761,35.665514,35.669398,35.67038,35.672583,35.677525,35.67846,35.684571,35.687126,35.686967,35.684143,35.685017,35.693021,35.695367,35.693461,35.694158,35.699976,35.701795,35.704783,35.709272,35.712369,35.720507,35.716253,35.716606,35.720534,35.72499,35.725869,35.729893,35.736159,35.737686,35.739507,35.736893,35.693641,35.658485,35.680178,35.705409,35.705233,35.669899,35.663892,35.646885,35.635836,35.624328,35.614394,35.611193,35.611139,35.607783,35.603473,35.600584,35.600139,35.597865,35.596582,35.599104,35.595467,35.589708,35.586068,35.582806,35.58122,35.585402,35.584762,35.577766,35.575055,35.580774,35.579573,35.575755,35.570836,35.572522,35.568501,35.567322,35.562852,35.556504,35.550929,35.530997,35.524384,35.520857,35.5189,35.518701,35.52003,35.523254,35.51996,35.516291,35.508548,35.499043,35.49434,35.488907,35.485201,35.466798,35.457359,35.449142,35.436646,35.424383,35.403662,35.380382,35.353593,35.361857,35.338223,35.334823,35.330871,35.314679,35.302284,35.291569,35.285409,35.279409,35.274785,35.270942,35.235233,35.216045,35.3009,35.418955,35.426036,35.43518,35.440975,35.444416,35.447954,35.455208,35.456715,35.485025,35.496917,35.501953,35.512254,35.519112,35.553953,35.549826,35.552659]}]],[[{"lng":[-76.544256,-76.547713,-76.559733,-76.565966,-76.570013,-76.572904,-76.589897,-76.588159,-76.588198,-76.587079,-76.582541,-76.572852,-76.571471,-76.568233,-76.567324,-76.568006,-76.565523,-76.567531,-76.56756,-76.568717,-76.567617,-76.561684,-76.563471,-76.559773,-76.56125,-76.559571,-76.559674,-76.556837,-76.539147,-76.45369,-76.447525,-76.401774,-76.397933,-76.394633,-76.394825,-76.392082,-76.391942,-76.386288,-76.380865,-76.37637,-76.375439,-76.377759,-76.377732,-76.375078,-76.367762,-76.361033,-76.352382,-76.347974,-76.343196,-76.343364,-76.340961,-76.337371,-76.332115,-76.324737,-76.317671,-76.315975,-76.315127,-76.307609,-76.306988,-76.304416,-76.303654,-76.300658,-76.29902,-76.289948,-76.289825,-76.287523,-76.285016,-76.285006,-76.288386,-76.288403,-76.286493,-76.284064,-76.280101,-76.279305,-76.273284,-76.273124,-76.271928,-76.25988,-76.251408,-76.240324,-76.234886,-76.228685,-76.223804,-76.220074,-76.215507,-76.194668,-76.182749,-76.180367,-76.178743,-76.157953,-76.181729,-76.209926,-76.229783,-76.283839,-76.333654,-76.342901,-76.356253,-76.36687,-76.381396,-76.38712,-76.39686,-76.402834,-76.403801,-76.413462,-76.429987,-76.436375,-76.445697,-76.448471,-76.452983,-76.45535,-76.460474,-76.466289,-76.472567,-76.478505,-76.480895,-76.490111,-76.491887,-76.493129,-76.494654,-76.500154,-76.502227,-76.505781,-76.51063,-76.517759,-76.52888,-76.533782,-76.539173,-76.544256],"lat":[36.096375,36.099206,36.101078,36.104175,36.106923,36.110758,36.239009,36.241786,36.245165,36.24892,36.250897,36.257546,36.267193,36.274179,36.282316,36.287342,36.293556,36.298397,36.304645,36.30957,36.315228,36.322387,36.326042,36.336132,36.344775,36.348443,36.351892,36.355186,36.357238,36.378042,36.363523,36.30159,36.300326,36.296723,36.292357,36.290777,36.287434,36.283401,36.275592,36.275041,36.272476,36.269707,36.268639,36.258853,36.254893,36.25256,36.251258,36.249601,36.246375,36.242986,36.241544,36.240629,36.244134,36.240288,36.240358,36.238,36.233306,36.230284,36.227651,36.225819,36.221789,36.222751,36.22188,36.223207,36.21802,36.217854,36.215993,36.214671,36.213941,36.213118,36.209674,36.208048,36.20319,36.198244,36.195179,36.187608,36.185723,36.179527,36.169489,36.163756,36.155128,36.149892,36.139669,36.136367,36.130361,36.117738,36.114212,36.113112,36.111193,36.059517,36.049007,36.042027,36.040665,36.031365,36.019872,36.019036,36.019691,36.021701,36.026229,36.026908,36.026437,36.072937,36.074045,36.075491,36.075083,36.076995,36.075881,36.080017,36.079278,36.080219,36.087991,36.089585,36.089236,36.093274,36.092826,36.085434,36.084831,36.085749,36.084764,36.085616,36.087006,36.087707,36.093686,36.097247,36.09577,36.096546,36.094552,36.096375]}]],[[{"lng":[-75.874631,-75.780409,-75.767448,-75.763783,-75.764044,-75.774788,-75.773549,-75.776439,-75.778659,-75.789363,-75.79062,-75.789075,-75.801696,-75.79943,-75.813189,-75.709078,-75.666246,-75.566047,-75.480501,-75.466237,-75.461124,-75.460815,-75.437617,-75.41782,-75.406815,-75.40039,-75.402422,-75.415089,-75.423496,-75.426135,-75.447751,-75.459334,-75.468477,-75.4746,-75.484571,-75.505059,-75.527708,-75.548003,-75.564713,-75.581108,-75.59022,-75.636215,-75.70737,-75.73662,-75.868684,-75.879179,-75.879746,-75.876833,-75.883953,-75.889064,-75.891953,-75.890079,-75.891029,-75.898345,-75.901164,-76.027445,-76.030843,-76.035266,-76.040528,-76.045987,-76.029265,-76.022328,-76.025088,-76.024569,-76.019276,-76.02239,-76.017694,-76.009178,-75.992284,-75.987466,-75.978991,-75.963734,-75.948736,-75.874631],"lat":[36.018067,36.047423,36.055639,36.062792,36.079269,36.106082,36.116637,36.135727,36.142324,36.154436,36.160104,36.172206,36.187985,36.202218,36.223544,36.244984,36.148924,35.975614,35.814207,35.801315,35.790171,35.784524,35.74696,35.686082,35.636972,35.593512,35.54421,35.50018,35.427652,35.386923,35.309794,35.246552,35.21519,35.202029,35.187577,35.174426,35.167393,35.168184,35.173298,35.183784,35.183757,35.172205,35.146111,35.140565,35.579452,35.604172,35.614095,35.628117,35.632784,35.64194,35.643328,35.647319,35.653254,35.661057,35.668998,35.669094,35.663227,35.662022,35.66274,35.666117,35.682039,35.709225,35.721156,35.732803,35.752763,35.81066,35.865356,35.894453,35.909855,35.916453,35.96446,35.984292,35.994425,36.018067]}]],[[{"lng":[-79.585244,-79.583241,-79.581906,-79.581491,-79.578124,-79.578255,-79.571566,-79.566305,-79.572684,-79.572033,-79.568776,-79.551359,-79.521432,-79.511748,-79.483386,-79.46871,-79.460886,-79.459176,-79.457502,-79.456973,-79.458143,-79.456222,-79.457195,-79.454717,-79.454829,-79.453798,-79.453771,-79.452016,-79.452073,-79.449985,-79.449066,-79.446338,-79.44567,-79.445475,-79.443496,-79.442051,-79.439238,-79.434701,-79.431389,-79.430276,-79.428411,-79.429163,-79.425517,-79.424738,-79.422985,-79.419674,-79.419785,-79.415472,-79.415834,-79.409824,-79.407957,-79.405786,-79.404006,-79.401335,-79.400918,-79.398693,-79.39861,-79.396606,-79.39658,-79.3943,-79.393215,-79.390351,-79.391241,-79.388573,-79.386431,-79.385264,-79.383678,-79.381844,-79.378701,-79.378452,-79.374415,-79.373177,-79.372092,-79.370533,-79.370114,-79.363129,-79.362238,-79.360764,-79.363517,-79.362041,-79.361289,-79.362124,-79.358146,-79.355085,-79.355223,-79.354278,-79.354139,-79.353221,-79.353693,-79.352746,-79.353747,-79.352885,-79.354164,-79.353273,-79.35472,-79.355276,-79.354246,-79.35622,-79.354522,-79.354604,-79.35224,-79.352239,-79.350905,-79.349903,-79.35182,-79.350624,-79.351624,-79.350901,-79.351873,-79.350845,-79.352012,-79.351038,-79.352233,-79.349674,-79.350646,-79.349757,-79.348532,-79.349419,-79.348532,-79.349726,-79.348558,-79.35028,-79.349085,-79.349112,-79.348278,-79.348888,-79.348109,-79.34847,-79.346552,-79.34744,-79.346162,-79.346578,-79.34416,-79.345827,-79.344659,-79.344767,-79.344016,-79.342654,-79.343042,-79.342042,-79.341903,-79.343376,-79.343653,-79.342431,-79.342653,-79.341625,-79.342236,-79.341763,-79.34104,-79.341596,-79.3379,-79.338955,-79.337288,-79.338316,-79.336954,-79.337954,-79.337343,-79.338482,-79.340482,-79.338842,-79.339037,-79.340565,-79.340731,-79.341703,-79.341203,-79.342425,-79.341591,-79.34534,-79.345284,-79.348033,-79.347033,-79.348754,-79.347804,-79.349098,-79.34954,-79.350479,-79.349983,-79.351912,-79.351342,-79.353387,-79.352998,-79.351617,-79.351967,-79.353526,-79.353053,-79.356106,-79.35605,-79.357605,-79.355854,-79.35491,-79.355457,-79.354055,-79.354312,-79.352981,-79.353354,-79.351352,-79.350751,-79.351671,-79.349895,-79.350625,-79.349037,-79.350207,-79.348678,-79.346737,-79.348295,-79.34659,-79.346619,-79.345722,-79.345436,-79.34402,-79.344268,-79.342963,-79.344212,-79.341908,-79.342601,-79.341463,-79.341907,-79.339742,-79.339741,-79.338184,-79.338052,-79.339025,-79.337026,-79.337834,-79.336341,-79.336788,-79.335098,-79.334195,-79.331946,-79.333337,-79.331866,-79.332396,-79.331234,-79.33174,-79.330959,-79.461754,-79.471599,-79.490196,-79.6753,-79.692948,-79.692449,-79.688186,-79.688392,-79.678373,-79.672852,-79.659104,-79.654499,-79.637399,-79.634571,-79.625644,-79.621625,-79.614168,-79.616094,-79.617313,-79.620865,-79.622811,-79.621562,-79.622813,-79.622316,-79.619124,-79.618709,-79.620154,-79.617711,-79.617574,-79.619408,-79.623742,-79.622938,-79.619944,-79.620083,-79.626356,-79.62673,-79.615988,-79.561826,-79.562871,-79.565203,-79.565903,-79.56456,-79.564411,-79.567581,-79.573031,-79.577674,-79.579705,-79.58154,-79.584879,-79.583267,-79.585104,-79.585244],"lat":[34.955327,34.955625,34.957068,34.964213,34.969044,34.972269,34.975072,34.979137,34.991968,34.993067,34.993865,35.005604,35.019338,35.025814,35.033655,35.036624,35.040898,35.043096,35.042223,35.041193,35.040987,35.039293,35.037232,35.035629,35.034095,35.034393,35.033317,35.032676,35.030248,35.030157,35.026608,35.02544,35.025921,35.024593,35.024183,35.022029,35.022419,35.020312,35.019991,35.0169,35.016075,35.015251,35.01248,35.010213,35.010167,35.00774,35.006252,35.003801,35.002816,35.001693,34.999133,34.999247,34.997713,34.997254,34.995994,34.994918,34.99375,34.993864,34.99162,34.988642,34.98871,34.985916,34.985252,34.981495,34.981151,34.978425,34.978676,34.976409,34.975651,34.974163,34.971461,34.9686,34.968739,34.966862,34.963519,34.959652,34.957522,34.958027,34.95427,34.953195,34.951042,34.950378,34.949464,34.945686,34.944747,34.945641,34.944336,34.944359,34.943282,34.940535,34.939985,34.939436,34.938451,34.936756,34.937145,34.935908,34.934443,34.933183,34.929474,34.926566,34.92517,34.924277,34.924506,34.921369,34.919903,34.91727,34.915781,34.914316,34.914224,34.9134,34.912896,34.912003,34.911339,34.906348,34.905546,34.905363,34.901493,34.900824,34.899639,34.899386,34.895517,34.894371,34.893685,34.89128,34.890914,34.887525,34.887525,34.885922,34.883198,34.882419,34.882374,34.879259,34.877817,34.876122,34.87564,34.873815,34.874662,34.873793,34.872052,34.871778,34.869648,34.8699,34.868182,34.86848,34.867175,34.867221,34.866397,34.863328,34.863145,34.862046,34.859047,34.856734,34.856162,34.855429,34.853757,34.853597,34.852933,34.851971,34.851787,34.850849,34.850024,34.850505,34.849543,34.849703,34.84881,34.849108,34.847345,34.845924,34.843336,34.842947,34.841,34.83958,34.838625,34.83861,34.836451,34.835961,34.835201,34.833703,34.831934,34.828861,34.827419,34.827883,34.825798,34.826259,34.823869,34.82183,34.820708,34.820272,34.816311,34.816518,34.81536,34.815482,34.814591,34.814216,34.812385,34.81267,34.811132,34.810496,34.810325,34.809139,34.808536,34.805149,34.803203,34.802579,34.800674,34.800213,34.797783,34.797703,34.795802,34.79608,34.794996,34.793187,34.792156,34.792225,34.790805,34.790073,34.789088,34.789386,34.78728,34.787549,34.785761,34.785374,34.785413,34.784545,34.782706,34.781974,34.780983,34.777313,34.77703,34.776508,34.776273,34.775587,34.77527,34.774518,34.773593,34.630432,34.6372,34.653816,34.804744,34.80499,34.806797,34.80967,34.81134,34.813948,34.813271,34.815262,34.814881,34.822947,34.825493,34.817895,34.816354,34.815338,34.816393,34.818644,34.81795,34.820193,34.824521,34.826741,34.829103,34.831119,34.833433,34.835012,34.83767,34.83925,34.841013,34.84282,34.844561,34.846103,34.849007,34.850995,34.852093,34.865968,34.910363,34.911269,34.91032,34.910921,34.914424,34.918941,34.924253,34.929748,34.929931,34.933916,34.935244,34.944014,34.947633,34.951342,34.955327]}]],[[{"lng":[-77.366485,-77.365033,-77.365269,-77.356781,-77.344834,-77.34306,-77.342634,-77.337998,-77.329372,-77.32246,-77.318964,-77.316742,-77.312613,-77.310918,-77.311492,-77.308817,-77.304294,-77.297882,-77.294427,-77.289577,-77.286815,-77.285187,-77.283481,-77.267598,-77.267192,-77.264078,-77.26458,-77.262342,-77.259553,-77.260715,-77.25985,-77.253279,-77.250979,-77.252224,-77.250364,-77.249998,-77.240115,-77.237184,-77.238675,-77.234077,-77.233201,-77.231679,-77.233963,-77.230394,-77.225071,-77.221606,-77.220615,-77.222418,-77.222064,-77.21594,-77.219919,-77.219244,-77.212895,-77.213648,-77.212308,-77.209908,-77.212172,-77.205792,-77.205925,-77.204799,-77.205311,-77.202785,-77.203612,-77.201051,-77.201745,-77.2034,-77.201561,-77.201986,-77.197452,-77.196453,-77.195304,-77.191242,-77.191849,-77.188709,-77.182657,-77.18023,-77.179603,-77.184721,-77.186046,-77.184786,-77.186608,-77.192439,-77.195784,-77.195192,-77.193213,-77.196332,-77.193158,-77.189264,-77.190877,-77.18733,-77.175678,-77.17601,-77.170827,-77.175174,-77.174553,-77.170176,-77.173315,-77.172739,-77.169604,-77.166491,-77.165166,-77.166371,-77.165444,-77.16044,-77.157744,-77.157325,-77.160445,-77.159327,-77.153415,-77.153162,-77.15085,-77.158147,-77.158154,-77.155724,-77.149918,-77.143258,-77.143162,-77.141125,-77.135378,-77.130825,-77.127234,-77.125453,-77.126393,-77.121245,-77.11374,-77.108399,-77.103275,-77.102663,-77.105621,-77.115574,-77.114773,-77.11093,-77.099387,-77.096674,-77.097031,-77.104725,-77.106701,-77.110118,-77.112506,-77.117198,-77.122999,-77.179881,-77.219176,-77.260244,-77.295077,-77.307152,-77.341271,-77.418832,-77.484538,-77.533487,-77.541359,-77.545333,-77.545151,-77.547043,-77.546974,-77.549231,-77.552469,-77.555594,-77.558196,-77.561555,-77.563104,-77.567224,-77.571757,-77.5722,-77.576208,-77.58414,-77.68056,-77.676395,-77.67149,-77.665747,-77.659087,-77.650919,-77.653254,-77.679774,-77.675373,-77.63896,-77.502951,-77.401853,-77.367414,-77.365729,-77.366485],"lat":[34.915879,34.918945,34.923406,34.929272,34.930583,34.931391,34.933529,34.936151,34.93835,34.934708,34.934879,34.93228,34.933127,34.935429,34.936484,34.937582,34.934286,34.933824,34.930384,34.931559,34.930213,34.9313,34.927866,34.925763,34.923334,34.921075,34.919092,34.918845,34.914431,34.91136,34.909244,34.910648,34.909773,34.903027,34.902911,34.900806,34.898869,34.899878,34.893476,34.891564,34.893652,34.89299,34.88606,34.885272,34.887333,34.887088,34.884431,34.88343,34.882172,34.873337,34.870979,34.867655,34.862333,34.861492,34.859355,34.858729,34.853113,34.848455,34.847301,34.847796,34.845939,34.845,34.842571,34.8419,34.83784,34.837007,34.836319,34.834282,34.832556,34.834128,34.832419,34.832192,34.83391,34.83338,34.837247,34.833427,34.829325,34.825764,34.823252,34.821785,34.819177,34.817136,34.817496,34.815193,34.814301,34.809715,34.806592,34.806338,34.802288,34.801905,34.796555,34.792192,34.790124,34.787661,34.786009,34.785063,34.781943,34.780615,34.78059,34.785179,34.783267,34.780523,34.779077,34.78158,34.781086,34.779399,34.775801,34.773716,34.776482,34.773144,34.770361,34.769463,34.7662,34.765328,34.768223,34.766092,34.761061,34.759666,34.764245,34.758479,34.757827,34.756038,34.748946,34.731235,34.724457,34.717026,34.701834,34.696636,34.689761,34.680553,34.673459,34.671545,34.669663,34.667228,34.663267,34.657886,34.648094,34.646111,34.641037,34.584367,34.584375,34.560456,34.53966,34.511018,34.488968,34.483507,34.471663,34.435923,34.399705,34.458443,34.464229,34.464953,34.466031,34.465518,34.466772,34.467235,34.470918,34.471213,34.469403,34.471006,34.46929,34.469593,34.4725,34.476735,34.476666,34.500167,34.72064,34.787182,34.811643,34.831219,34.881456,34.923492,34.939937,34.970812,34.973417,34.984419,34.969656,34.923889,34.906631,34.912731,34.915879]}]],[[{"lng":[-81.961252,-81.96751,-81.969007,-81.968788,-81.973134,-81.978341,-81.983765,-81.994874,-81.998966,-82.000769,-82.005715,-82.009988,-82.014539,-82.016184,-82.022553,-82.028529,-82.031318,-82.039581,-82.043587,-82.046472,-82.048197,-82.047202,-82.051424,-82.053922,-82.058398,-82.061856,-82.064786,-82.06763,-82.071584,-82.077815,-82.079557,-82.079822,-82.084546,-82.088319,-82.088546,-82.090833,-82.097187,-82.100536,-82.102142,-82.104489,-82.106662,-82.106006,-82.108079,-82.107745,-82.115171,-82.120128,-82.122915,-82.127916,-82.131776,-82.137386,-82.141682,-82.151535,-82.156749,-82.160038,-82.165824,-82.171508,-82.1734,-82.176117,-82.177117,-82.180468,-82.185156,-82.189782,-82.191813,-82.19382,-82.194922,-82.193757,-82.198649,-82.205332,-82.205403,-82.208931,-82.214398,-82.220635,-82.228052,-82.238984,-82.248963,-82.256767,-82.25917,-82.261299,-82.265415,-82.269728,-82.268691,-82.272675,-82.27304,-82.275829,-82.273414,-82.276054,-82.278996,-82.280374,-82.279615,-82.275388,-82.266847,-82.250631,-82.243681,-82.224304,-82.224053,-82.226391,-82.231123,-82.232824,-82.23281,-82.169018,-82.150541,-82.095766,-82.081917,-82.071841,-82.032889,-82.028833,-82.022585,-82.019624,-82.015917,-82.012897,-82.00567,-82.002795,-81.994458,-81.986282,-81.985475,-81.986288,-81.979439,-81.973556,-81.842653,-81.843924,-81.841041,-81.84097,-81.833172,-81.83425,-81.833654,-81.82948,-81.829507,-81.828148,-81.823713,-81.822801,-81.818438,-81.810544,-81.80534,-81.796439,-81.796832,-81.795947,-81.793748,-81.788245,-81.783044,-81.772181,-81.771412,-81.768188,-81.771912,-81.768379,-81.766295,-81.757416,-81.75469,-81.750377,-81.745812,-81.741916,-81.736434,-81.732688,-81.724566,-81.723794,-81.719919,-81.715977,-81.717434,-81.715275,-81.717489,-81.716115,-81.71732,-81.715778,-81.716142,-81.71216,-81.712046,-81.709438,-81.705455,-81.70411,-81.703073,-81.702456,-81.697606,-81.692329,-81.695151,-81.70285,-81.759619,-81.768059,-81.96932,-81.971045,-81.969573,-81.970882,-81.967885,-81.965165,-81.966398,-81.961252],"lat":[35.248414,35.249742,35.252442,35.257764,35.259477,35.264532,35.264437,35.269594,35.275699,35.282701,35.284117,35.289308,35.292036,35.298747,35.297993,35.300995,35.309257,35.315514,35.320659,35.320952,35.3252,35.327459,35.329093,35.335378,35.337113,35.334663,35.334708,35.339161,35.338746,35.342747,35.346741,35.353234,35.353278,35.355289,35.358903,35.360274,35.36988,35.371414,35.368569,35.368206,35.37055,35.374729,35.377665,35.381219,35.387398,35.388202,35.393267,35.39638,35.395681,35.398557,35.39912,35.407581,35.407809,35.409354,35.407717,35.409004,35.405454,35.40478,35.403214,35.403206,35.396589,35.399068,35.397114,35.39718,35.397721,35.400725,35.402921,35.403634,35.401583,35.397761,35.398171,35.394694,35.395788,35.402467,35.400045,35.396278,35.393271,35.392978,35.397515,35.399793,35.406408,35.40955,35.418831,35.42309,35.430337,35.436957,35.43837,35.443654,35.445973,35.450256,35.465854,35.458224,35.465279,35.49854,35.500319,35.503649,35.506624,35.509925,35.520402,35.527841,35.518001,35.531666,35.533333,35.5366,35.537991,35.535969,35.537141,35.54152,35.543189,35.547722,35.549647,35.551839,35.543978,35.540684,35.539834,35.538081,35.532881,35.524565,35.54216,35.545767,35.550098,35.553884,35.558769,35.560369,35.563539,35.568129,35.571759,35.574003,35.575499,35.580424,35.578162,35.581255,35.579631,35.584416,35.588722,35.591473,35.593211,35.594135,35.59185,35.592566,35.594945,35.596919,35.601958,35.602956,35.606664,35.609303,35.61232,35.610459,35.603856,35.604585,35.601823,35.601796,35.604834,35.606463,35.606997,35.602786,35.600702,35.601412,35.59903,35.597931,35.595755,35.596534,35.594564,35.591863,35.589275,35.589619,35.580986,35.582315,35.581605,35.583345,35.57872,35.579789,35.503291,35.357194,35.222201,35.180493,35.187368,35.205515,35.209462,35.211589,35.219488,35.223106,35.243151,35.248414]}]],[[{"lng":[-81.327381,-81.328308,-81.332232,-81.33695,-81.339735,-81.341479,-81.343181,-81.347582,-81.34811,-81.345571,-81.34637,-81.348892,-81.352705,-81.35494,-81.35494,-81.353044,-81.353169,-81.324325,-81.277742,-81.252926,-81.168468,-81.097043,-81.050905,-81.008527,-80.967263,-80.95321,-80.901732,-80.908416,-80.909066,-80.918577,-80.921544,-80.918889,-80.917586,-80.915847,-80.915923,-80.914182,-80.91973,-80.926361,-80.963229,-80.974619,-80.947182,-80.967809,-80.969608,-80.970746,-80.974405,-80.97624,-80.979507,-80.98186,-80.981978,-80.979425,-80.981366,-80.994653,-81.013615,-81.026688,-81.043789,-81.044272,-81.077627,-81.079631,-81.078728,-81.083278,-81.083558,-81.091517,-81.094829,-81.09895,-81.103234,-81.108273,-81.112242,-81.11839,-81.121354,-81.128383,-81.128275,-81.132057,-81.132626,-81.138248,-81.138899,-81.142614,-81.146354,-81.147247,-81.149112,-81.156981,-81.160364,-81.163031,-81.189256,-81.212516,-81.220096,-81.227026,-81.229416,-81.230827,-81.238107,-81.238148,-81.241401,-81.243151,-81.249761,-81.253482,-81.251663,-81.246433,-81.24706,-81.246464,-81.244126,-81.246832,-81.24546,-81.247055,-81.249974,-81.252529,-81.253103,-81.25254,-81.254394,-81.260713,-81.260501,-81.264047,-81.263844,-81.266068,-81.264239,-81.264586,-81.263725,-81.264978,-81.268994,-81.269814,-81.271573,-81.271917,-81.279496,-81.286953,-81.28934,-81.292264,-81.294615,-81.295007,-81.296588,-81.297212,-81.299495,-81.299067,-81.302693,-81.304457,-81.304899,-81.30409,-81.305031,-81.307501,-81.320875,-81.322191,-81.327068,-81.327381],"lat":[36.513202,36.517208,36.522666,36.525845,36.529403,36.533424,36.534377,36.540197,36.542402,36.545372,36.552016,36.552078,36.545849,36.547834,36.551474,36.554864,36.574681,36.575366,36.574832,36.573269,36.570968,36.567454,36.566965,36.563959,36.562903,36.563423,36.561835,36.556902,36.553082,36.540439,36.525872,36.525707,36.52393,36.523838,36.522405,36.520701,36.505949,36.502671,36.459166,36.452846,36.419074,36.401231,36.399121,36.395927,36.393793,36.390976,36.391111,36.387923,36.385568,36.379031,36.376189,36.379399,36.371271,36.373195,36.393323,36.411063,36.417776,36.422566,36.425967,36.429676,36.433232,36.435566,36.440433,36.439236,36.434681,36.432728,36.429596,36.428608,36.429179,36.425833,36.42213,36.417784,36.415484,36.412448,36.415127,36.419164,36.419659,36.422985,36.425251,36.428792,36.428999,36.432432,36.399351,36.385558,36.37754,36.376527,36.374918,36.374984,36.37036,36.368179,36.367654,36.365586,36.366691,36.365351,36.37052,36.374313,36.375723,36.378054,36.382288,36.387524,36.391218,36.394279,36.395315,36.397942,36.399668,36.400914,36.400937,36.404773,36.405489,36.410375,36.41254,36.415651,36.417355,36.422231,36.428908,36.432547,36.437594,36.440979,36.443631,36.446578,36.451542,36.461621,36.461829,36.464521,36.465457,36.464496,36.4647,36.469077,36.471811,36.474279,36.47438,36.475863,36.476642,36.478312,36.479488,36.480772,36.494866,36.495393,36.505188,36.513202]}]],[[{"lng":[-76.405959,-76.353444,-76.359922,-76.369428,-76.372915,-76.379915,-76.370746,-76.36777,-76.3655,-76.363347,-76.358141,-76.358393,-76.349147,-76.333654,-76.283839,-76.229783,-76.209926,-76.181729,-76.156 |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment