D3
OG
Old school D3 from simpler times
All examples
By author
By category
About
timelyportfolio
Full window
Github gist
parcoords adv example
Built with
blockbuilder.org
<!DOCTYPE html> <html> <head> <meta charset="utf-8" /> <script src="data:application/x-javascript;base64,KGZ1bmN0aW9uKCkgewogIC8vIElmIHdpbmRvdy5IVE1MV2lkZ2V0cyBpcyBhbHJlYWR5IGRlZmluZWQsIHRoZW4gdXNlIGl0OyBvdGhlcndpc2UgY3JlYXRlIGEKICAvLyBuZXcgb2JqZWN0LiBUaGlzIGFsbG93cyBwcmVjZWRpbmcgY29kZSB0byBzZXQgb3B0aW9ucyB0aGF0IGFmZmVjdCB0aGUKICAvLyBpbml0aWFsaXphdGlvbiBwcm9jZXNzICh0aG91Z2ggbm9uZSBjdXJyZW50bHkgZXhpc3QpLgogIHdpbmRvdy5IVE1MV2lkZ2V0cyA9IHdpbmRvdy5IVE1MV2lkZ2V0cyB8fCB7fTsKCiAgLy8gU2VlIGlmIHdlJ3JlIHJ1bm5pbmcgaW4gYSB2aWV3ZXIgcGFuZS4gSWYgbm90LCB3ZSdyZSBpbiBhIHdlYiBicm93c2VyLgogIHZhciB2aWV3ZXJNb2RlID0gd2luZG93LkhUTUxXaWRnZXRzLnZpZXdlck1vZGUgPQogICAgICAvXGJ2aWV3ZXJfcGFuZT0xXGIvLnRlc3Qod2luZG93LmxvY2F0aW9uKTsKCiAgLy8gU2VlIGlmIHdlJ3JlIHJ1bm5pbmcgaW4gU2hpbnkgbW9kZS4gSWYgbm90LCBpdCdzIGEgc3RhdGljIGRvY3VtZW50LgogIC8vIE5vdGUgdGhhdCBzdGF0aWMgd2lkZ2V0cyBjYW4gYXBwZWFyIGluIGJvdGggU2hpbnkgYW5kIHN0YXRpYyBtb2RlcywgYnV0CiAgLy8gb2J2aW91c2x5LCBTaGlueSB3aWRnZXRzIGNhbiBvbmx5IGFwcGVhciBpbiBTaGlueSBhcHBzL2RvY3VtZW50cy4KICB2YXIgc2hpbnlNb2RlID0gd2luZG93LkhUTUxXaWRnZXRzLnNoaW55TW9kZSA9CiAgICAgIHR5cGVvZih3aW5kb3cuU2hpbnkpICE9PSAidW5kZWZpbmVkIiAmJiAhIXdpbmRvdy5TaGlueS5vdXRwdXRCaW5kaW5nczsKCiAgLy8gV2UgY2FuJ3QgY291bnQgb24galF1ZXJ5IGJlaW5nIGF2YWlsYWJsZSwgc28gd2UgaW1wbGVtZW50IG91ciBvd24KICAvLyB2ZXJzaW9uIGlmIG5lY2Vzc2FyeS4KICBmdW5jdGlvbiBxdWVyeVNlbGVjdG9yQWxsKHNjb3BlLCBzZWxlY3RvcikgewogICAgaWYgKHR5cGVvZihqUXVlcnkpICE9PSAidW5kZWZpbmVkIiAmJiBzY29wZSBpbnN0YW5jZW9mIGpRdWVyeSkgewogICAgICByZXR1cm4gc2NvcGUuZmluZChzZWxlY3Rvcik7CiAgICB9CiAgICBpZiAoc2NvcGUucXVlcnlTZWxlY3RvckFsbCkgewogICAgICByZXR1cm4gc2NvcGUucXVlcnlTZWxlY3RvckFsbChzZWxlY3Rvcik7CiAgICB9CiAgfQoKICBmdW5jdGlvbiBhc0FycmF5KHZhbHVlKSB7CiAgICBpZiAodmFsdWUgPT09IG51bGwpCiAgICAgIHJldHVybiBbXTsKICAgIGlmICgkLmlzQXJyYXkodmFsdWUpKQogICAgICByZXR1cm4gdmFsdWU7CiAgICByZXR1cm4gW3ZhbHVlXTsKICB9CgogIC8vIEltcGxlbWVudCBqUXVlcnkncyBleHRlbmQKICBmdW5jdGlvbiBleHRlbmQodGFyZ2V0IC8qLCAuLi4gKi8pIHsKICAgIGlmIChhcmd1bWVudHMubGVuZ3RoID09IDEpIHsKICAgICAgcmV0dXJuIHRhcmdldDsKICAgIH0KICAgIGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7CiAgICAgIHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07CiAgICAgIGZvciAodmFyIHByb3AgaW4gc291cmNlKSB7CiAgICAgICAgaWYgKHNvdXJjZS5oYXNPd25Qcm9wZXJ0eShwcm9wKSkgewogICAgICAgICAgdGFyZ2V0W3Byb3BdID0gc291cmNlW3Byb3BdOwogICAgICAgIH0KICAgICAgfQogICAgfQogICAgcmV0dXJuIHRhcmdldDsKICB9CgogIC8vIElFOCBkb2Vzbid0IHN1cHBvcnQgQXJyYXkuZm9yRWFjaC4KICBmdW5jdGlvbiBmb3JFYWNoKHZhbHVlcywgY2FsbGJhY2ssIHRoaXNBcmcpIHsKICAgIGlmICh2YWx1ZXMuZm9yRWFjaCkgewogICAgICB2YWx1ZXMuZm9yRWFjaChjYWxsYmFjaywgdGhpc0FyZyk7CiAgICB9IGVsc2UgewogICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHZhbHVlcy5sZW5ndGg7IGkrKykgewogICAgICAgIGNhbGxiYWNrLmNhbGwodGhpc0FyZywgdmFsdWVzW2ldLCBpLCB2YWx1ZXMpOwogICAgICB9CiAgICB9CiAgfQoKICAvLyBSZXBsYWNlcyB0aGUgc3BlY2lmaWVkIG1ldGhvZCB3aXRoIHRoZSByZXR1cm4gdmFsdWUgb2YgZnVuY1NvdXJjZS4KICAvLwogIC8vIE5vdGUgdGhhdCBmdW5jU291cmNlIHNob3VsZCBub3QgQkUgdGhlIG5ldyBtZXRob2QsIGl0IHNob3VsZCBiZSBhIGZ1bmN0aW9uCiAgLy8gdGhhdCBSRVRVUk5TIHRoZSBuZXcgbWV0aG9kLiBmdW5jU291cmNlIHJlY2VpdmVzIGEgc2luZ2xlIGFyZ3VtZW50IHRoYXQgaXMKICAvLyB0aGUgb3ZlcnJpZGRlbiBtZXRob2QsIGl0IGNhbiBiZSBjYWxsZWQgZnJvbSB0aGUgbmV3IG1ldGhvZC4gVGhlIG92ZXJyaWRkZW4KICAvLyBtZXRob2QgY2FuIGJlIGNhbGxlZCBsaWtlIGEgcmVndWxhciBmdW5jdGlvbiwgaXQgaGFzIHRoZSB0YXJnZXQgcGVybWFuZW50bHkKICAvLyBib3VuZCB0byBpdCBzbyAidGhpcyIgd2lsbCB3b3JrIGNvcnJlY3RseS4KICBmdW5jdGlvbiBvdmVycmlkZU1ldGhvZCh0YXJnZXQsIG1ldGhvZE5hbWUsIGZ1bmNTb3VyY2UpIHsKICAgIHZhciBzdXBlckZ1bmMgPSB0YXJnZXRbbWV0aG9kTmFtZV0gfHwgZnVuY3Rpb24oKSB7fTsKICAgIHZhciBzdXBlckZ1bmNCb3VuZCA9IGZ1bmN0aW9uKCkgewogICAgICByZXR1cm4gc3VwZXJGdW5jLmFwcGx5KHRhcmdldCwgYXJndW1lbnRzKTsKICAgIH07CiAgICB0YXJnZXRbbWV0aG9kTmFtZV0gPSBmdW5jU291cmNlKHN1cGVyRnVuY0JvdW5kKTsKICB9CgogIC8vIEFkZCBhIG1ldGhvZCB0byBkZWxlZ2F0b3IgdGhhdCwgd2hlbiBpbnZva2VkLCBjYWxscwogIC8vIGRlbGVnYXRlZS5tZXRob2ROYW1lLiBJZiB0aGVyZSBpcyBubyBzdWNoIG1ldGhvZCBvbgogIC8vIHRoZSBkZWxlZ2F0ZWUsIGJ1dCB0aGVyZSB3YXMgb25lIG9uIGRlbGVnYXRvciBiZWZvcmUKICAvLyBkZWxlZ2F0ZU1ldGhvZCB3YXMgY2FsbGVkLCB0aGVuIHRoZSBvcmlnaW5hbCB2ZXJzaW9uCiAgLy8gaXMgaW52b2tlZCBpbnN0ZWFkLgogIC8vIEZvciBleGFtcGxlOgogIC8vCiAgLy8gdmFyIGEgPSB7CiAgLy8gICBtZXRob2QxOiBmdW5jdGlvbigpIHsgY29uc29sZS5sb2coJ2ExJyk7IH0KICAvLyAgIG1ldGhvZDI6IGZ1bmN0aW9uKCkgeyBjb25zb2xlLmxvZygnYTInKTsgfQogIC8vIH07CiAgLy8gdmFyIGIgPSB7CiAgLy8gICBtZXRob2QxOiBmdW5jdGlvbigpIHsgY29uc29sZS5sb2coJ2IxJyk7IH0KICAvLyB9OwogIC8vIGRlbGVnYXRlTWV0aG9kKGEsIGIsICJtZXRob2QxIik7CiAgLy8gZGVsZWdhdGVNZXRob2QoYSwgYiwgIm1ldGhvZDIiKTsKICAvLyBhLm1ldGhvZDEoKTsKICAvLyBhLm1ldGhvZDIoKTsKICAvLwogIC8vIFRoZSBvdXRwdXQgd291bGQgYmUgImIxIiwgImEyIi4KICBmdW5jdGlvbiBkZWxlZ2F0ZU1ldGhvZChkZWxlZ2F0b3IsIGRlbGVnYXRlZSwgbWV0aG9kTmFtZSkgewogICAgdmFyIGluaGVyaXRlZCA9IGRlbGVnYXRvclttZXRob2ROYW1lXTsKICAgIGRlbGVnYXRvclttZXRob2ROYW1lXSA9IGZ1bmN0aW9uKCkgewogICAgICB2YXIgdGFyZ2V0ID0gZGVsZWdhdGVlOwogICAgICB2YXIgbWV0aG9kID0gZGVsZWdhdGVlW21ldGhvZE5hbWVdOwoKICAgICAgLy8gVGhlIG1ldGhvZCBkb2Vzbid0IGV4aXN0IG9uIHRoZSBkZWxlZ2F0ZWUuIEluc3RlYWQsCiAgICAgIC8vIGNhbGwgdGhlIG1ldGhvZCBvbiB0aGUgZGVsZWdhdG9yLCBpZiBpdCBleGlzdHMuCiAgICAgIGlmICghbWV0aG9kKSB7CiAgICAgICAgdGFyZ2V0ID0gZGVsZWdhdG9yOwogICAgICAgIG1ldGhvZCA9IGluaGVyaXRlZDsKICAgICAgfQoKICAgICAgaWYgKG1ldGhvZCkgewogICAgICAgIHJldHVybiBtZXRob2QuYXBwbHkodGFyZ2V0LCBhcmd1bWVudHMpOwogICAgICB9CiAgICB9OwogIH0KCiAgLy8gSW1wbGVtZW50IGEgdmFndWUgZmFjc2ltaWxpZSBvZiBqUXVlcnkncyBkYXRhIG1ldGhvZAogIGZ1bmN0aW9uIGVsZW1lbnREYXRhKGVsLCBuYW1lLCB2YWx1ZSkgewogICAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPT0gMikgewogICAgICByZXR1cm4gZWxbImh0bWx3aWRnZXRfZGF0YV8iICsgbmFtZV07CiAgICB9IGVsc2UgaWYgKGFyZ3VtZW50cy5sZW5ndGggPT0gMykgewogICAgICBlbFsiaHRtbHdpZGdldF9kYXRhXyIgKyBuYW1lXSA9IHZhbHVlOwogICAgICByZXR1cm4gZWw7CiAgICB9IGVsc2UgewogICAgICB0aHJvdyBuZXcgRXJyb3IoIldyb25nIG51bWJlciBvZiBhcmd1bWVudHMgZm9yIGVsZW1lbnREYXRhOiAiICsKICAgICAgICBhcmd1bWVudHMubGVuZ3RoKTsKICAgIH0KICB9CgogIC8vIGh0dHA6Ly9zdGFja292ZXJmbG93LmNvbS9xdWVzdGlvbnMvMzQ0NjE3MC9lc2NhcGUtc3RyaW5nLWZvci11c2UtaW4tamF2YXNjcmlwdC1yZWdleAogIGZ1bmN0aW9uIGVzY2FwZVJlZ0V4cChzdHIpIHsKICAgIHJldHVybiBzdHIucmVwbGFjZSgvW1wtXFtcXVwvXHtcfVwoXClcKlwrXD9cLlxcXF5cJFx8XS9nLCAiXFwkJiIpOwogIH0KCiAgZnVuY3Rpb24gaGFzQ2xhc3MoZWwsIGNsYXNzTmFtZSkgewogICAgdmFyIHJlID0gbmV3IFJlZ0V4cCgiXFxiIiArIGVzY2FwZVJlZ0V4cChjbGFzc05hbWUpICsgIlxcYiIpOwogICAgcmV0dXJuIHJlLnRlc3QoZWwuY2xhc3NOYW1lKTsKICB9CgogIC8vIGVsZW1lbnRzIC0gYXJyYXkgKG9yIGFycmF5LWxpa2Ugb2JqZWN0KSBvZiBIVE1MIGVsZW1lbnRzCiAgLy8gY2xhc3NOYW1lIC0gY2xhc3MgbmFtZSB0byB0ZXN0IGZvcgogIC8vIGluY2x1ZGUgLSBpZiB0cnVlLCBvbmx5IHJldHVybiBlbGVtZW50cyB3aXRoIGdpdmVuIGNsYXNzTmFtZTsKICAvLyAgIGlmIGZhbHNlLCBvbmx5IHJldHVybiBlbGVtZW50cyAqd2l0aG91dCogZ2l2ZW4gY2xhc3NOYW1lCiAgZnVuY3Rpb24gZmlsdGVyQnlDbGFzcyhlbGVtZW50cywgY2xhc3NOYW1lLCBpbmNsdWRlKSB7CiAgICB2YXIgcmVzdWx0cyA9IFtdOwogICAgZm9yICh2YXIgaSA9IDA7IGkgPCBlbGVtZW50cy5sZW5ndGg7IGkrKykgewogICAgICBpZiAoaGFzQ2xhc3MoZWxlbWVudHNbaV0sIGNsYXNzTmFtZSkgPT0gaW5jbHVkZSkKICAgICAgICByZXN1bHRzLnB1c2goZWxlbWVudHNbaV0pOwogICAgfQogICAgcmV0dXJuIHJlc3VsdHM7CiAgfQoKICBmdW5jdGlvbiBvbihvYmosIGV2ZW50TmFtZSwgZnVuYykgewogICAgaWYgKG9iai5hZGRFdmVudExpc3RlbmVyKSB7CiAgICAgIG9iai5hZGRFdmVudExpc3RlbmVyKGV2ZW50TmFtZSwgZnVuYywgZmFsc2UpOwogICAgfSBlbHNlIGlmIChvYmouYXR0YWNoRXZlbnQpIHsKICAgICAgb2JqLmF0dGFjaEV2ZW50KGV2ZW50TmFtZSwgZnVuYyk7CiAgICB9CiAgfQoKICBmdW5jdGlvbiBvZmYob2JqLCBldmVudE5hbWUsIGZ1bmMpIHsKICAgIGlmIChvYmoucmVtb3ZlRXZlbnRMaXN0ZW5lcikKICAgICAgb2JqLnJlbW92ZUV2ZW50TGlzdGVuZXIoZXZlbnROYW1lLCBmdW5jLCBmYWxzZSk7CiAgICBlbHNlIGlmIChvYmouZGV0YWNoRXZlbnQpIHsKICAgICAgb2JqLmRldGFjaEV2ZW50KGV2ZW50TmFtZSwgZnVuYyk7CiAgICB9CiAgfQoKICAvLyBUcmFuc2xhdGUgYXJyYXkgb2YgdmFsdWVzIHRvIHRvcC9yaWdodC9ib3R0b20vbGVmdCwgYXMgdXN1YWwgd2l0aAogIC8vIHRoZSAicGFkZGluZyIgQ1NTIHByb3BlcnR5CiAgLy8gaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvQ1NTL3BhZGRpbmcKICBmdW5jdGlvbiB1bnBhY2tQYWRkaW5nKHZhbHVlKSB7CiAgICBpZiAodHlwZW9mKHZhbHVlKSA9PT0gIm51bWJlciIpCiAgICAgIHZhbHVlID0gW3ZhbHVlXTsKICAgIGlmICh2YWx1ZS5sZW5ndGggPT09IDEpIHsKICAgICAgcmV0dXJuIHt0b3A6IHZhbHVlWzBdLCByaWdodDogdmFsdWVbMF0sIGJvdHRvbTogdmFsdWVbMF0sIGxlZnQ6IHZhbHVlWzBdfTsKICAgIH0KICAgIGlmICh2YWx1ZS5sZW5ndGggPT09IDIpIHsKICAgICAgcmV0dXJuIHt0b3A6IHZhbHVlWzBdLCByaWdodDogdmFsdWVbMV0sIGJvdHRvbTogdmFsdWVbMF0sIGxlZnQ6IHZhbHVlWzFdfTsKICAgIH0KICAgIGlmICh2YWx1ZS5sZW5ndGggPT09IDMpIHsKICAgICAgcmV0dXJuIHt0b3A6IHZhbHVlWzBdLCByaWdodDogdmFsdWVbMV0sIGJvdHRvbTogdmFsdWVbMl0sIGxlZnQ6IHZhbHVlWzFdfTsKICAgIH0KICAgIGlmICh2YWx1ZS5sZW5ndGggPT09IDQpIHsKICAgICAgcmV0dXJuIHt0b3A6IHZhbHVlWzBdLCByaWdodDogdmFsdWVbMV0sIGJvdHRvbTogdmFsdWVbMl0sIGxlZnQ6IHZhbHVlWzNdfTsKICAgIH0KICB9CgogIC8vIENvbnZlcnQgYW4gdW5wYWNrZWQgcGFkZGluZyBvYmplY3QgdG8gYSBDU1MgdmFsdWUKICBmdW5jdGlvbiBwYWRkaW5nVG9Dc3MocGFkZGluZ09iaikgewogICAgcmV0dXJuIHBhZGRpbmdPYmoudG9wICsgInB4ICIgKyBwYWRkaW5nT2JqLnJpZ2h0ICsgInB4ICIgKyBwYWRkaW5nT2JqLmJvdHRvbSArICJweCAiICsgcGFkZGluZ09iai5sZWZ0ICsgInB4IjsKICB9CgogIC8vIE1ha2VzIGEgbnVtYmVyIHN1aXRhYmxlIGZvciBDU1MKICBmdW5jdGlvbiBweCh4KSB7CiAgICBpZiAodHlwZW9mKHgpID09PSAibnVtYmVyIikKICAgICAgcmV0dXJuIHggKyAicHgiOwogICAgZWxzZQogICAgICByZXR1cm4geDsKICB9CgogIC8vIFJldHJpZXZlcyBydW50aW1lIHdpZGdldCBzaXppbmcgaW5mb3JtYXRpb24gZm9yIGFuIGVsZW1lbnQuCiAgLy8gVGhlIHJldHVybiB2YWx1ZSBpcyBlaXRoZXIgbnVsbCwgb3IgYW4gb2JqZWN0IHdpdGggZmlsbCwgcGFkZGluZywKICAvLyBkZWZhdWx0V2lkdGgsIGRlZmF1bHRIZWlnaHQgZmllbGRzLgogIGZ1bmN0aW9uIHNpemluZ1BvbGljeShlbCkgewogICAgdmFyIHNpemluZ0VsID0gZG9jdW1lbnQucXVlcnlTZWxlY3Rvcigic2NyaXB0W2RhdGEtZm9yPSciICsgZWwuaWQgKyAiJ11bdHlwZT0nYXBwbGljYXRpb24vaHRtbHdpZGdldC1zaXppbmcnXSIpOwogICAgaWYgKCFzaXppbmdFbCkKICAgICAgcmV0dXJuIG51bGw7CiAgICB2YXIgc3AgPSBKU09OLnBhcnNlKHNpemluZ0VsLnRleHRDb250ZW50IHx8IHNpemluZ0VsLnRleHQgfHwgInt9Iik7CiAgICBpZiAodmlld2VyTW9kZSkgewogICAgICByZXR1cm4gc3Audmlld2VyOwogICAgfSBlbHNlIHsKICAgICAgcmV0dXJuIHNwLmJyb3dzZXI7CiAgICB9CiAgfQoKICAvLyBAcGFyYW0gdGFza3MgQXJyYXkgb2Ygc3RyaW5ncyAob3IgZmFsc3kgdmFsdWUsIGluIHdoaWNoIGNhc2Ugbm8tb3ApLgogIC8vICAgRWFjaCBlbGVtZW50IG11c3QgYmUgYSB2YWxpZCBKYXZhU2NyaXB0IGV4cHJlc3Npb24gdGhhdCB5aWVsZHMgYQogIC8vICAgZnVuY3Rpb24uIE9yLCBjYW4gYmUgYW4gYXJyYXkgb2Ygb2JqZWN0cyB3aXRoICJjb2RlIiBhbmQgImRhdGEiCiAgLy8gICBwcm9wZXJ0aWVzOyBpbiB0aGlzIGNhc2UsIHRoZSAiY29kZSIgcHJvcGVydHkgc2hvdWxkIGJlIGEgc3RyaW5nCiAgLy8gICBvZiBKUyB0aGF0J3MgYW4gZXhwciB0aGF0IHlpZWxkcyBhIGZ1bmN0aW9uLCBhbmQgImRhdGEiIHNob3VsZCBiZQogIC8vICAgYW4gb2JqZWN0IHRoYXQgd2lsbCBiZSBhZGRlZCBhcyBhbiBhZGRpdGlvbmFsIGFyZ3VtZW50IHdoZW4gdGhhdAogIC8vICAgZnVuY3Rpb24gaXMgY2FsbGVkLgogIC8vIEBwYXJhbSB0YXJnZXQgVGhlIG9iamVjdCB0aGF0IHdpbGwgYmUgInRoaXMiIGZvciBlYWNoIGZ1bmN0aW9uCiAgLy8gICBleGVjdXRpb24uCiAgLy8gQHBhcmFtIGFyZ3MgQXJyYXkgb2YgYXJndW1lbnRzIHRvIGJlIHBhc3NlZCB0byB0aGUgZnVuY3Rpb25zLiAoVGhlCiAgLy8gICBzYW1lIGFyZ3VtZW50cyB3aWxsIGJlIHBhc3NlZCB0byBhbGwgZnVuY3Rpb25zLikKICBmdW5jdGlvbiBldmFsQW5kUnVuKHRhc2tzLCB0YXJnZXQsIGFyZ3MpIHsKICAgIGlmICh0YXNrcykgewogICAgICBmb3JFYWNoKHRhc2tzLCBmdW5jdGlvbih0YXNrKSB7CiAgICAgICAgdmFyIHRoZXNlQXJncyA9IGFyZ3M7CiAgICAgICAgaWYgKHR5cGVvZih0YXNrKSA9PT0gIm9iamVjdCIpIHsKICAgICAgICAgIHRoZXNlQXJncyA9IHRoZXNlQXJncy5jb25jYXQoW3Rhc2suZGF0YV0pOwogICAgICAgICAgdGFzayA9IHRhc2suY29kZTsKICAgICAgICB9CiAgICAgICAgdmFyIHRhc2tGdW5jID0gZXZhbCgiKCIgKyB0YXNrICsgIikiKTsKICAgICAgICBpZiAodHlwZW9mKHRhc2tGdW5jKSAhPT0gImZ1bmN0aW9uIikgewogICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCJUYXNrIG11c3QgYmUgYSBmdW5jdGlvbiEgU291cmNlOlxuIiArIHRhc2spOwogICAgICAgIH0KICAgICAgICB0YXNrRnVuYy5hcHBseSh0YXJnZXQsIHRoZXNlQXJncyk7CiAgICAgIH0pOwogICAgfQogIH0KCiAgZnVuY3Rpb24gaW5pdFNpemluZyhlbCkgewogICAgdmFyIHNpemluZyA9IHNpemluZ1BvbGljeShlbCk7CiAgICBpZiAoIXNpemluZykKICAgICAgcmV0dXJuOwoKICAgIHZhciBjZWwgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiaHRtbHdpZGdldF9jb250YWluZXIiKTsKICAgIGlmICghY2VsKQogICAgICByZXR1cm47CgogICAgaWYgKHR5cGVvZihzaXppbmcucGFkZGluZykgIT09ICJ1bmRlZmluZWQiKSB7CiAgICAgIGRvY3VtZW50LmJvZHkuc3R5bGUubWFyZ2luID0gIjAiOwogICAgICBkb2N1bWVudC5ib2R5LnN0eWxlLnBhZGRpbmcgPSBwYWRkaW5nVG9Dc3ModW5wYWNrUGFkZGluZyhzaXppbmcucGFkZGluZykpOwogICAgfQoKICAgIGlmIChzaXppbmcuZmlsbCkgewogICAgICBkb2N1bWVudC5ib2R5LnN0eWxlLm92ZXJmbG93ID0gImhpZGRlbiI7CiAgICAgIGRvY3VtZW50LmJvZHkuc3R5bGUud2lkdGggPSAiMTAwJSI7CiAgICAgIGRvY3VtZW50LmJvZHkuc3R5bGUuaGVpZ2h0ID0gIjEwMCUiOwogICAgICBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuc3R5bGUud2lkdGggPSAiMTAwJSI7CiAgICAgIGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5zdHlsZS5oZWlnaHQgPSAiMTAwJSI7CiAgICAgIGlmIChjZWwpIHsKICAgICAgICBjZWwuc3R5bGUucG9zaXRpb24gPSAiYWJzb2x1dGUiOwogICAgICAgIHZhciBwYWQgPSB1bnBhY2tQYWRkaW5nKHNpemluZy5wYWRkaW5nKTsKICAgICAgICBjZWwuc3R5bGUudG9wID0gcGFkLnRvcCArICJweCI7CiAgICAgICAgY2VsLnN0eWxlLnJpZ2h0ID0gcGFkLnJpZ2h0ICsgInB4IjsKICAgICAgICBjZWwuc3R5bGUuYm90dG9tID0gcGFkLmJvdHRvbSArICJweCI7CiAgICAgICAgY2VsLnN0eWxlLmxlZnQgPSBwYWQubGVmdCArICJweCI7CiAgICAgICAgZWwuc3R5bGUud2lkdGggPSAiMTAwJSI7CiAgICAgICAgZWwuc3R5bGUuaGVpZ2h0ID0gIjEwMCUiOwogICAgICB9CgogICAgICByZXR1cm4gewogICAgICAgIGdldFdpZHRoOiBmdW5jdGlvbigpIHsgcmV0dXJuIGNlbC5vZmZzZXRXaWR0aDsgfSwKICAgICAgICBnZXRIZWlnaHQ6IGZ1bmN0aW9uKCkgeyByZXR1cm4gY2VsLm9mZnNldEhlaWdodDsgfQogICAgICB9OwoKICAgIH0gZWxzZSB7CiAgICAgIGVsLnN0eWxlLndpZHRoID0gcHgoc2l6aW5nLndpZHRoKTsKICAgICAgZWwuc3R5bGUuaGVpZ2h0ID0gcHgoc2l6aW5nLmhlaWdodCk7CgogICAgICByZXR1cm4gewogICAgICAgIGdldFdpZHRoOiBmdW5jdGlvbigpIHsgcmV0dXJuIGVsLm9mZnNldFdpZHRoOyB9LAogICAgICAgIGdldEhlaWdodDogZnVuY3Rpb24oKSB7IHJldHVybiBlbC5vZmZzZXRIZWlnaHQ7IH0KICAgICAgfTsKICAgIH0KICB9CgogIC8vIERlZmF1bHQgaW1wbGVtZW50YXRpb25zIGZvciBtZXRob2RzCiAgdmFyIGRlZmF1bHRzID0gewogICAgZmluZDogZnVuY3Rpb24oc2NvcGUpIHsKICAgICAgcmV0dXJuIHF1ZXJ5U2VsZWN0b3JBbGwoc2NvcGUsICIuIiArIHRoaXMubmFtZSk7CiAgICB9LAogICAgcmVuZGVyRXJyb3I6IGZ1bmN0aW9uKGVsLCBlcnIpIHsKICAgICAgdmFyICRlbCA9ICQoZWwpOwoKICAgICAgdGhpcy5jbGVhckVycm9yKGVsKTsKCiAgICAgIC8vIEFkZCBhbGwgdGhlc2UgZXJyb3IgY2xhc3NlcywgYXMgU2hpbnkgZG9lcwogICAgICB2YXIgZXJyQ2xhc3MgPSAic2hpbnktb3V0cHV0LWVycm9yIjsKICAgICAgaWYgKGVyci50eXBlICE9PSBudWxsKSB7CiAgICAgICAgLy8gdXNlIHRoZSBjbGFzc2VzIG9mIHRoZSBlcnJvciBjb25kaXRpb24gYXMgQ1NTIGNsYXNzIG5hbWVzCiAgICAgICAgZXJyQ2xhc3MgPSBlcnJDbGFzcyArICIgIiArICQubWFwKGFzQXJyYXkoZXJyLnR5cGUpLCBmdW5jdGlvbih0eXBlKSB7CiAgICAgICAgICByZXR1cm4gZXJyQ2xhc3MgKyAiLSIgKyB0eXBlOwogICAgICAgIH0pLmpvaW4oIiAiKTsKICAgICAgfQogICAgICBlcnJDbGFzcyA9IGVyckNsYXNzICsgIiBodG1sd2lkZ2V0cy1lcnJvciI7CgogICAgICAvLyBJcyBlbCBpbmxpbmUgb3IgYmxvY2s/IElmIGlubGluZSBvciBpbmxpbmUtYmxvY2ssIGp1c3QgZGlzcGxheTpub25lIGl0CiAgICAgIC8vIGFuZCBhZGQgYW4gaW5saW5lIGVycm9yLgogICAgICB2YXIgZGlzcGxheSA9ICRlbC5jc3MoImRpc3BsYXkiKTsKICAgICAgJGVsLmRhdGEoInJlc3RvcmUtZGlzcGxheS1tb2RlIiwgZGlzcGxheSk7CgogICAgICBpZiAoZGlzcGxheSA9PT0gImlubGluZSIgfHwgZGlzcGxheSA9PT0gImlubGluZS1ibG9jayIpIHsKICAgICAgICAkZWwuaGlkZSgpOwogICAgICAgIGlmIChlcnIubWVzc2FnZSAhPT0gIiIpIHsKICAgICAgICAgIHZhciBlcnJvclNwYW4gPSAkKCI8c3Bhbj4iKS5hZGRDbGFzcyhlcnJDbGFzcyk7CiAgICAgICAgICBlcnJvclNwYW4udGV4dChlcnIubWVzc2FnZSk7CiAgICAgICAgICAkZWwuYWZ0ZXIoZXJyb3JTcGFuKTsKICAgICAgICB9CiAgICAgIH0gZWxzZSBpZiAoZGlzcGxheSA9PT0gImJsb2NrIikgewogICAgICAgIC8vIElmIGJsb2NrLCBhZGQgYW4gZXJyb3IganVzdCBhZnRlciB0aGUgZWwsIHNldCB2aXNpYmlsaXR5Om5vbmUgb24gdGhlCiAgICAgICAgLy8gZWwsIGFuZCBwb3NpdGlvbiB0aGUgZXJyb3IgdG8gYmUgb24gdG9wIG9mIHRoZSBlbC4KICAgICAgICAvLyBNYXJrIGl0IHdpdGggYSB1bmlxdWUgSUQgYW5kIENTUyBjbGFzcyBzbyB3ZSBjYW4gcmVtb3ZlIGl0IGxhdGVyLgogICAgICAgICRlbC5jc3MoInZpc2liaWxpdHkiLCAiaGlkZGVuIik7CiAgICAgICAgaWYgKGVyci5tZXNzYWdlICE9PSAiIikgewogICAgICAgICAgdmFyIGVycm9yRGl2ID0gJCgiPGRpdj4iKS5hZGRDbGFzcyhlcnJDbGFzcykuY3NzKCJwb3NpdGlvbiIsICJhYnNvbHV0ZSIpCiAgICAgICAgICAgIC5jc3MoInRvcCIsIGVsLm9mZnNldFRvcCkKICAgICAgICAgICAgLmNzcygibGVmdCIsIGVsLm9mZnNldExlZnQpCiAgICAgICAgICAgIC8vIHNldHRpbmcgd2lkdGggY2FuIHB1c2ggb3V0IHRoZSBwYWdlIHNpemUsIGZvcmNpbmcgb3RoZXJ3aXNlCiAgICAgICAgICAgIC8vIHVubmVjZXNzYXJ5IHNjcm9sbGJhcnMgdG8gYXBwZWFyIGFuZCBtYWtpbmcgaXQgaW1wb3NzaWJsZSBmb3IKICAgICAgICAgICAgLy8gdGhlIGVsZW1lbnQgdG8gc2hyaW5rOyBzbyB1c2UgbWF4LXdpZHRoIGluc3RlYWQKICAgICAgICAgICAgLmNzcygibWF4V2lkdGgiLCBlbC5vZmZzZXRXaWR0aCkKICAgICAgICAgICAgLmNzcygiaGVpZ2h0IiwgZWwub2Zmc2V0SGVpZ2h0KTsKICAgICAgICAgIGVycm9yRGl2LnRleHQoZXJyLm1lc3NhZ2UpOwogICAgICAgICAgJGVsLmFmdGVyKGVycm9yRGl2KTsKCiAgICAgICAgICAvLyBSZWFsbHkgZHVtYiB3YXkgdG8ga2VlcCB0aGUgc2l6ZS9wb3NpdGlvbiBvZiB0aGUgZXJyb3IgaW4gc3luYyB3aXRoCiAgICAgICAgICAvLyB0aGUgcGFyZW50IGVsZW1lbnQgYXMgdGhlIHdpbmRvdyBpcyByZXNpemVkIG9yIHdoYXRldmVyLgogICAgICAgICAgdmFyIGludElkID0gc2V0SW50ZXJ2YWwoZnVuY3Rpb24oKSB7CiAgICAgICAgICAgIGlmICghZXJyb3JEaXZbMF0ucGFyZW50RWxlbWVudCkgewogICAgICAgICAgICAgIGNsZWFySW50ZXJ2YWwoaW50SWQpOwogICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgfQogICAgICAgICAgICBlcnJvckRpdgogICAgICAgICAgICAgIC5jc3MoInRvcCIsIGVsLm9mZnNldFRvcCkKICAgICAgICAgICAgICAuY3NzKCJsZWZ0IiwgZWwub2Zmc2V0TGVmdCkKICAgICAgICAgICAgICAuY3NzKCJtYXhXaWR0aCIsIGVsLm9mZnNldFdpZHRoKQogICAgICAgICAgICAgIC5jc3MoImhlaWdodCIsIGVsLm9mZnNldEhlaWdodCk7CiAgICAgICAgICB9LCA1MDApOwogICAgICAgIH0KICAgICAgfQogICAgfSwKICAgIGNsZWFyRXJyb3I6IGZ1bmN0aW9uKGVsKSB7CiAgICAgIHZhciAkZWwgPSAkKGVsKTsKICAgICAgdmFyIGRpc3BsYXkgPSAkZWwuZGF0YSgicmVzdG9yZS1kaXNwbGF5LW1vZGUiKTsKICAgICAgJGVsLmRhdGEoInJlc3RvcmUtZGlzcGxheS1tb2RlIiwgbnVsbCk7CgogICAgICBpZiAoZGlzcGxheSA9PT0gImlubGluZSIgfHwgZGlzcGxheSA9PT0gImlubGluZS1ibG9jayIpIHsKICAgICAgICBpZiAoZGlzcGxheSkKICAgICAgICAgICRlbC5jc3MoImRpc3BsYXkiLCBkaXNwbGF5KTsKICAgICAgICAkKGVsLm5leHRTaWJsaW5nKS5maWx0ZXIoIi5odG1sd2lkZ2V0cy1lcnJvciIpLnJlbW92ZSgpOwogICAgICB9IGVsc2UgaWYgKGRpc3BsYXkgPT09ICJibG9jayIpewogICAgICAgICRlbC5jc3MoInZpc2liaWxpdHkiLCAiaW5oZXJpdCIpOwogICAgICAgICQoZWwubmV4dFNpYmxpbmcpLmZpbHRlcigiLmh0bWx3aWRnZXRzLWVycm9yIikucmVtb3ZlKCk7CiAgICAgIH0KICAgIH0sCiAgICBzaXppbmc6IHt9CiAgfTsKCiAgLy8gQ2FsbGVkIGJ5IHdpZGdldCBiaW5kaW5ncyB0byByZWdpc3RlciBhIG5ldyB0eXBlIG9mIHdpZGdldC4gVGhlIGRlZmluaXRpb24KICAvLyBvYmplY3QgY2FuIGNvbnRhaW4gdGhlIGZvbGxvd2luZyBwcm9wZXJ0aWVzOgogIC8vIC0gbmFtZSAocmVxdWlyZWQpIC0gQSBzdHJpbmcgaW5kaWNhdGluZyB0aGUgYmluZGluZyBuYW1lLCB3aGljaCB3aWxsIGJlCiAgLy8gICB1c2VkIGJ5IGRlZmF1bHQgYXMgdGhlIENTUyBjbGFzc25hbWUgdG8gbG9vayBmb3IuCiAgLy8gLSBpbml0aWFsaXplIChvcHRpb25hbCkgLSBBIGZ1bmN0aW9uKGVsKSB0aGF0IHdpbGwgYmUgY2FsbGVkIG9uY2UgcGVyCiAgLy8gICB3aWRnZXQgZWxlbWVudDsgaWYgYSB2YWx1ZSBpcyByZXR1cm5lZCwgaXQgd2lsbCBiZSBwYXNzZWQgYXMgdGhlIHRoaXJkCiAgLy8gICB2YWx1ZSB0byByZW5kZXJWYWx1ZS4KICAvLyAtIHJlbmRlclZhbHVlIChyZXF1aXJlZCkgLSBBIGZ1bmN0aW9uKGVsLCBkYXRhLCBpbml0VmFsdWUpIHRoYXQgd2lsbCBiZQogIC8vICAgY2FsbGVkIHdpdGggZGF0YS4gU3RhdGljIGNvbnRleHRzIHdpbGwgY2F1c2UgdGhpcyB0byBiZSBjYWxsZWQgb25jZSBwZXIKICAvLyAgIGVsZW1lbnQ7IFNoaW55IGFwcHMgd2lsbCBjYXVzZSB0aGlzIHRvIGJlIGNhbGxlZCBtdWx0aXBsZSB0aW1lcyBwZXIKICAvLyAgIGVsZW1lbnQsIGFzIHRoZSBkYXRhIGNoYW5nZXMuCiAgd2luZG93LkhUTUxXaWRnZXRzLndpZGdldCA9IGZ1bmN0aW9uKGRlZmluaXRpb24pIHsKICAgIGlmICghZGVmaW5pdGlvbi5uYW1lKSB7CiAgICAgIHRocm93IG5ldyBFcnJvcigiV2lkZ2V0IG11c3QgaGF2ZSBhIG5hbWUiKTsKICAgIH0KICAgIGlmICghZGVmaW5pdGlvbi50eXBlKSB7CiAgICAgIHRocm93IG5ldyBFcnJvcigiV2lkZ2V0IG11c3QgaGF2ZSBhIHR5cGUiKTsKICAgIH0KICAgIC8vIEN1cnJlbnRseSB3ZSBvbmx5IHN1cHBvcnQgb3V0cHV0IHdpZGdldHMKICAgIGlmIChkZWZpbml0aW9uLnR5cGUgIT09ICJvdXRwdXQiKSB7CiAgICAgIHRocm93IG5ldyBFcnJvcigiVW5yZWNvZ25pemVkIHdpZGdldCB0eXBlICciICsgZGVmaW5pdGlvbi50eXBlICsgIiciKTsKICAgIH0KICAgIC8vIFRPRE86IFZlcmlmeSB0aGF0IC5uYW1lIGlzIGEgdmFsaWQgQ1NTIGNsYXNzbmFtZQoKICAgIC8vIFN1cHBvcnQgbmV3LXN0eWxlIGluc3RhbmNlLWJvdW5kIGRlZmluaXRpb25zLiBPbGQtc3R5bGUgY2xhc3MtYm91bmQKICAgIC8vIGRlZmluaXRpb25zIGhhdmUgb25lIHdpZGdldCAib2JqZWN0IiBwZXIgd2lkZ2V0IHBlciB0eXBlL2NsYXNzIG9mCiAgICAvLyB3aWRnZXQ7IHRoZSByZW5kZXJWYWx1ZSBhbmQgcmVzaXplIG1ldGhvZHMgb24gc3VjaCB3aWRnZXQgb2JqZWN0cwogICAgLy8gdGFrZSBlbCBhbmQgaW5zdGFuY2UgYXJndW1lbnRzLCBiZWNhdXNlIHRoZSB3aWRnZXQgb2JqZWN0IGNhbid0CiAgICAvLyBzdG9yZSB0aGVtLiBOZXctc3R5bGUgaW5zdGFuY2UtYm91bmQgZGVmaW5pdGlvbnMgaGF2ZSBvbmUgd2lkZ2V0CiAgICAvLyBvYmplY3QgcGVyIHdpZGdldCBpbnN0YW5jZTsgdGhlIGRlZmluaXRpb24gdGhhdCdzIHBhc3NlZCBpbiBkb2Vzbid0CiAgICAvLyBwcm92aWRlIHJlbmRlclZhbHVlIG9yIHJlc2l6ZSBtZXRob2RzIGF0IGFsbCwganVzdCB0aGUgc2luZ2xlIG1ldGhvZAogICAgLy8gICBmYWN0b3J5KGVsLCB3aWR0aCwgaGVpZ2h0KQogICAgLy8gd2hpY2ggcmV0dXJucyBhbiBvYmplY3QgdGhhdCBoYXMgcmVuZGVyVmFsdWUoeCkgYW5kIHJlc2l6ZSh3LCBoKS4KICAgIC8vIFRoaXMgZW5hYmxlcyBhIGZhciBtb3JlIG5hdHVyYWwgcHJvZ3JhbW1pbmcgc3R5bGUgZm9yIHRoZSB3aWRnZXQKICAgIC8vIGF1dGhvciwgd2hvIGNhbiBzdG9yZSBwZXItaW5zdGFuY2Ugc3RhdGUgdXNpbmcgZWl0aGVyIE9PLXN0eWxlCiAgICAvLyBpbnN0YW5jZSBmaWVsZHMgb3IgZnVuY3Rpb25hbC1zdHlsZSBjbG9zdXJlIHZhcmlhYmxlcyAoSSBndWVzcyB0aGlzCiAgICAvLyBpcyBpbiBjb250cmFzdCB0byB3aGF0IGNhbiBvbmx5IGJlIGNhbGxlZCBDLXN0eWxlIHBzZXVkby1PTyB3aGljaCBpcwogICAgLy8gd2hhdCB3ZSByZXF1aXJlZCBiZWZvcmUpLgogICAgaWYgKGRlZmluaXRpb24uZmFjdG9yeSkgewogICAgICBkZWZpbml0aW9uID0gY3JlYXRlTGVnYWN5RGVmaW5pdGlvbkFkYXB0ZXIoZGVmaW5pdGlvbik7CiAgICB9CgogICAgaWYgKCFkZWZpbml0aW9uLnJlbmRlclZhbHVlKSB7CiAgICAgIHRocm93IG5ldyBFcnJvcigiV2lkZ2V0IG11c3QgaGF2ZSBhIHJlbmRlclZhbHVlIGZ1bmN0aW9uIik7CiAgICB9CgogICAgLy8gRm9yIHN0YXRpYyByZW5kZXJpbmcgKG5vbi1TaGlueSksIHVzZSBhIHNpbXBsZSB3aWRnZXQgcmVnaXN0cmF0aW9uCiAgICAvLyBzY2hlbWUuIFdlIGFsc28gdXNlIHRoaXMgc2NoZW1lIGZvciBTaGlueSBhcHBzL2RvY3VtZW50cyB0aGF0IGFsc28KICAgIC8vIGNvbnRhaW4gc3RhdGljIHdpZGdldHMuCiAgICB3aW5kb3cuSFRNTFdpZGdldHMud2lkZ2V0cyA9IHdpbmRvdy5IVE1MV2lkZ2V0cy53aWRnZXRzIHx8IFtdOwogICAgLy8gTWVyZ2UgZGVmYXVsdHMgaW50byB0aGUgZGVmaW5pdGlvbjsgZG9uJ3QgbXV0YXRlIHRoZSBvcmlnaW5hbCBkZWZpbml0aW9uLgogICAgdmFyIHN0YXRpY0JpbmRpbmcgPSBleHRlbmQoe30sIGRlZmF1bHRzLCBkZWZpbml0aW9uKTsKICAgIG92ZXJyaWRlTWV0aG9kKHN0YXRpY0JpbmRpbmcsICJmaW5kIiwgZnVuY3Rpb24oc3VwZXJmdW5jKSB7CiAgICAgIHJldHVybiBmdW5jdGlvbihzY29wZSkgewogICAgICAgIHZhciByZXN1bHRzID0gc3VwZXJmdW5jKHNjb3BlKTsKICAgICAgICAvLyBGaWx0ZXIgb3V0IFNoaW55IG91dHB1dHMsIHdlIG9ubHkgd2FudCB0aGUgc3RhdGljIGtpbmQKICAgICAgICByZXR1cm4gZmlsdGVyQnlDbGFzcyhyZXN1bHRzLCAiaHRtbC13aWRnZXQtb3V0cHV0IiwgZmFsc2UpOwogICAgICB9OwogICAgfSk7CiAgICB3aW5kb3cuSFRNTFdpZGdldHMud2lkZ2V0cy5wdXNoKHN0YXRpY0JpbmRpbmcpOwoKICAgIGlmIChzaGlueU1vZGUpIHsKICAgICAgLy8gU2hpbnkgaXMgcnVubmluZy4gUmVnaXN0ZXIgdGhlIGRlZmluaXRpb24gd2l0aCBhbiBvdXRwdXQgYmluZGluZy4KICAgICAgLy8gVGhlIGRlZmluaXRpb24gaXRzZWxmIHdpbGwgbm90IGJlIHRoZSBvdXRwdXQgYmluZGluZywgaW5zdGVhZAogICAgICAvLyB3ZSB3aWxsIG1ha2UgYW4gb3V0cHV0IGJpbmRpbmcgb2JqZWN0IHRoYXQgZGVsZWdhdGVzIHRvIHRoZQogICAgICAvLyBkZWZpbml0aW9uLiBUaGlzIGlzIGJlY2F1c2Ugd2UgZm9vbGlzaGx5IHVzZWQgdGhlIHNhbWUgbWV0aG9kCiAgICAgIC8vIG5hbWUgKHJlbmRlclZhbHVlKSBmb3IgaHRtbHdpZGdldHMgZGVmaW5pdGlvbiBhbmQgU2hpbnkgYmluZGluZ3MKICAgICAgLy8gYnV0IHRoZXkgYWN0dWFsbHkgaGF2ZSBxdWl0ZSBkaWZmZXJlbnQgc2VtYW50aWNzICh0aGUgU2hpbnkKICAgICAgLy8gYmluZGluZ3MgcmVjZWl2ZSBkYXRhIHRoYXQgaW5jbHVkZXMgbG90cyBvZiBtZXRhZGF0YSB0aGF0IGl0CiAgICAgIC8vIHN0cmlwcyBvZmYgYmVmb3JlIGNhbGxpbmcgaHRtbHdpZGdldHMgcmVuZGVyVmFsdWUpLiBXZSBjYW4ndAogICAgICAvLyBqdXN0IGlnbm9yZSB0aGUgZGlmZmVyZW5jZSBiZWNhdXNlIGluIHNvbWUgd2lkZ2V0cyBpdCdzIGhlbHBmdWwKICAgICAgLy8gdG8gY2FsbCB0aGlzLnJlbmRlclZhbHVlKCkgZnJvbSBpbnNpZGUgb2YgcmVzaXplKCksIGFuZCBpZgogICAgICAvLyB3ZSdyZSBub3QgZGVsZWdhdGluZywgdGhlbiB0aGF0IGNhbGwgd2lsbCBnbyB0byB0aGUgU2hpbnkKICAgICAgLy8gdmVyc2lvbiBpbnN0ZWFkIG9mIHRoZSBodG1sd2lkZ2V0cyB2ZXJzaW9uLgoKICAgICAgLy8gTWVyZ2UgZGVmYXVsdHMgd2l0aCBkZWZpbml0aW9uLCB3aXRob3V0IG11dGF0aW5nIGVpdGhlci4KICAgICAgdmFyIGJpbmRpbmdEZWYgPSBleHRlbmQoe30sIGRlZmF1bHRzLCBkZWZpbml0aW9uKTsKCiAgICAgIC8vIFRoaXMgb2JqZWN0IHdpbGwgYmUgb3VyIGFjdHVhbCBTaGlueSBiaW5kaW5nLgogICAgICB2YXIgc2hpbnlCaW5kaW5nID0gbmV3IFNoaW55Lk91dHB1dEJpbmRpbmcoKTsKCiAgICAgIC8vIFdpdGggYSBmZXcgZXhjZXB0aW9ucywgd2UnbGwgd2FudCB0byBzaW1wbHkgdXNlIHRoZSBiaW5kaW5nRGVmJ3MKICAgICAgLy8gdmVyc2lvbiBvZiBtZXRob2RzIGlmIHRoZXkgYXJlIGF2YWlsYWJsZSwgb3RoZXJ3aXNlIGZhbGwgYmFjayB0bwogICAgICAvLyBTaGlueSdzIGRlZmF1bHRzLiBOT1RFOiBJZiBTaGlueSdzIG91dHB1dCBiaW5kaW5ncyBnYWluIGFkZGl0aW9uYWwKICAgICAgLy8gbWV0aG9kcyBpbiB0aGUgZnV0dXJlLCBhbmQgd2Ugd2FudCB0aGVtIHRvIGJlIG92ZXJyaWRlYWJsZSBieQogICAgICAvLyBIVE1MV2lkZ2V0IGJpbmRpbmcgZGVmaW5pdGlvbnMsIHRoZW4gd2UnbGwgbmVlZCB0byBhZGQgdGhlbSB0byB0aGlzCiAgICAgIC8vIGxpc3QuCiAgICAgIGRlbGVnYXRlTWV0aG9kKHNoaW55QmluZGluZywgYmluZGluZ0RlZiwgImdldElkIik7CiAgICAgIGRlbGVnYXRlTWV0aG9kKHNoaW55QmluZGluZywgYmluZGluZ0RlZiwgIm9uVmFsdWVDaGFuZ2UiKTsKICAgICAgZGVsZWdhdGVNZXRob2Qoc2hpbnlCaW5kaW5nLCBiaW5kaW5nRGVmLCAib25WYWx1ZUVycm9yIik7CiAgICAgIGRlbGVnYXRlTWV0aG9kKHNoaW55QmluZGluZywgYmluZGluZ0RlZiwgInJlbmRlckVycm9yIik7CiAgICAgIGRlbGVnYXRlTWV0aG9kKHNoaW55QmluZGluZywgYmluZGluZ0RlZiwgImNsZWFyRXJyb3IiKTsKICAgICAgZGVsZWdhdGVNZXRob2Qoc2hpbnlCaW5kaW5nLCBiaW5kaW5nRGVmLCAic2hvd1Byb2dyZXNzIik7CgogICAgICAvLyBUaGUgZmluZCwgcmVuZGVyVmFsdWUsIGFuZCByZXNpemUgYXJlIGhhbmRsZWQgZGlmZmVyZW50bHksIGJlY2F1c2Ugd2UKICAgICAgLy8gd2FudCB0byBhY3R1YWxseSBkZWNvcmF0ZSB0aGUgYmVoYXZpb3Igb2YgdGhlIGJpbmRpbmdEZWYgbWV0aG9kcy4KCiAgICAgIHNoaW55QmluZGluZy5maW5kID0gZnVuY3Rpb24oc2NvcGUpIHsKICAgICAgICB2YXIgcmVzdWx0cyA9IGJpbmRpbmdEZWYuZmluZChzY29wZSk7CgogICAgICAgIC8vIE9ubHkgcmV0dXJuIGVsZW1lbnRzIHRoYXQgYXJlIFNoaW55IG91dHB1dHMsIG5vdCBzdGF0aWMgb25lcwogICAgICAgIHZhciBkeW5hbWljUmVzdWx0cyA9IHJlc3VsdHMuZmlsdGVyKCIuaHRtbC13aWRnZXQtb3V0cHV0Iik7CgogICAgICAgIC8vIEl0J3MgcG9zc2libGUgdGhhdCB3aGF0ZXZlciBjYXVzZWQgU2hpbnkgdG8gdGhpbmsgdGhlcmUgbWlnaHQgYmUKICAgICAgICAvLyBuZXcgZHluYW1pYyBvdXRwdXRzLCBhbHNvIGNhdXNlZCB0aGVyZSB0byBiZSBuZXcgc3RhdGljIG91dHB1dHMuCiAgICAgICAgLy8gU2luY2UgdGhlcmUgbWlnaHQgYmUgbG90cyBvZiBkaWZmZXJlbnQgaHRtbHdpZGdldHMgYmluZGluZ3MsIHdlCiAgICAgICAgLy8gc2NoZWR1bGUgZXhlY3V0aW9uIGZvciBsYXRlci0tbm8gbmVlZCB0byBzdGF0aWNSZW5kZXIgbXVsdGlwbGUKICAgICAgICAvLyB0aW1lcy4KICAgICAgICBpZiAocmVzdWx0cy5sZW5ndGggIT09IGR5bmFtaWNSZXN1bHRzLmxlbmd0aCkKICAgICAgICAgIHNjaGVkdWxlU3RhdGljUmVuZGVyKCk7CgogICAgICAgIHJldHVybiBkeW5hbWljUmVzdWx0czsKICAgICAgfTsKCiAgICAgIC8vIFdyYXAgcmVuZGVyVmFsdWUgdG8gaGFuZGxlIGluaXRpYWxpemF0aW9uLCB3aGljaCB1bmZvcnR1bmF0ZWx5IGlzbid0CiAgICAgIC8vIHN1cHBvcnRlZCBuYXRpdmVseSBieSBTaGlueSBhdCB0aGUgdGltZSBvZiB0aGlzIHdyaXRpbmcuCgogICAgICBzaGlueUJpbmRpbmcucmVuZGVyVmFsdWUgPSBmdW5jdGlvbihlbCwgZGF0YSkgewogICAgICAgIC8vIFJlc29sdmUgc3RyaW5ncyBtYXJrZWQgYXMgamF2YXNjcmlwdCBsaXRlcmFscyB0byBvYmplY3RzCiAgICAgICAgaWYgKCEoZGF0YS5ldmFscyBpbnN0YW5jZW9mIEFycmF5KSkgZGF0YS5ldmFscyA9IFtkYXRhLmV2YWxzXTsKICAgICAgICBmb3IgKHZhciBpID0gMDsgZGF0YS5ldmFscyAmJiBpIDwgZGF0YS5ldmFscy5sZW5ndGg7IGkrKykgewogICAgICAgICAgd2luZG93LkhUTUxXaWRnZXRzLmV2YWx1YXRlU3RyaW5nTWVtYmVyKGRhdGEueCwgZGF0YS5ldmFsc1tpXSk7CiAgICAgICAgfQogICAgICAgIGlmICghYmluZGluZ0RlZi5yZW5kZXJPbk51bGxWYWx1ZSkgewogICAgICAgICAgaWYgKGRhdGEueCA9PT0gbnVsbCkgewogICAgICAgICAgICBlbC5zdHlsZS52aXNpYmlsaXR5ID0gImhpZGRlbiI7CiAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgIGVsLnN0eWxlLnZpc2liaWxpdHkgPSAiaW5oZXJpdCI7CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIGlmICghZWxlbWVudERhdGEoZWwsICJpbml0aWFsaXplZCIpKSB7CiAgICAgICAgICBpbml0U2l6aW5nKGVsKTsKCiAgICAgICAgICBlbGVtZW50RGF0YShlbCwgImluaXRpYWxpemVkIiwgdHJ1ZSk7CiAgICAgICAgICBpZiAoYmluZGluZ0RlZi5pbml0aWFsaXplKSB7CiAgICAgICAgICAgIHZhciByZXN1bHQgPSBiaW5kaW5nRGVmLmluaXRpYWxpemUoZWwsIGVsLm9mZnNldFdpZHRoLAogICAgICAgICAgICAgIGVsLm9mZnNldEhlaWdodCk7CiAgICAgICAgICAgIGVsZW1lbnREYXRhKGVsLCAiaW5pdF9yZXN1bHQiLCByZXN1bHQpOwogICAgICAgICAgfQogICAgICAgIH0KICAgICAgICBTaGlueS5yZW5kZXJEZXBlbmRlbmNpZXMoZGF0YS5kZXBzKTsKICAgICAgICBiaW5kaW5nRGVmLnJlbmRlclZhbHVlKGVsLCBkYXRhLngsIGVsZW1lbnREYXRhKGVsLCAiaW5pdF9yZXN1bHQiKSk7CiAgICAgICAgZXZhbEFuZFJ1bihkYXRhLmpzSG9va3MucmVuZGVyLCBlbGVtZW50RGF0YShlbCwgImluaXRfcmVzdWx0IiksIFtlbCwgZGF0YS54XSk7CiAgICAgIH07CgogICAgICAvLyBPbmx5IG92ZXJyaWRlIHJlc2l6ZSBpZiBiaW5kaW5nRGVmIGltcGxlbWVudHMgaXQKICAgICAgaWYgKGJpbmRpbmdEZWYucmVzaXplKSB7CiAgICAgICAgc2hpbnlCaW5kaW5nLnJlc2l6ZSA9IGZ1bmN0aW9uKGVsLCB3aWR0aCwgaGVpZ2h0KSB7CiAgICAgICAgICAvLyBTaGlueSBjYW4gY2FsbCByZXNpemUgYmVmb3JlIGluaXRpYWxpemUvcmVuZGVyVmFsdWUgaGF2ZSBiZWVuCiAgICAgICAgICAvLyBjYWxsZWQsIHdoaWNoIGRvZXNuJ3QgbWFrZSBzZW5zZSBmb3Igd2lkZ2V0cy4KICAgICAgICAgIGlmIChlbGVtZW50RGF0YShlbCwgImluaXRpYWxpemVkIikpIHsKICAgICAgICAgICAgYmluZGluZ0RlZi5yZXNpemUoZWwsIHdpZHRoLCBoZWlnaHQsIGVsZW1lbnREYXRhKGVsLCAiaW5pdF9yZXN1bHQiKSk7CiAgICAgICAgICB9CiAgICAgICAgfTsKICAgICAgfQoKICAgICAgU2hpbnkub3V0cHV0QmluZGluZ3MucmVnaXN0ZXIoc2hpbnlCaW5kaW5nLCBiaW5kaW5nRGVmLm5hbWUpOwogICAgfQogIH07CgogIHZhciBzY2hlZHVsZVN0YXRpY1JlbmRlclRpbWVySWQgPSBudWxsOwogIGZ1bmN0aW9uIHNjaGVkdWxlU3RhdGljUmVuZGVyKCkgewogICAgaWYgKCFzY2hlZHVsZVN0YXRpY1JlbmRlclRpbWVySWQpIHsKICAgICAgc2NoZWR1bGVTdGF0aWNSZW5kZXJUaW1lcklkID0gc2V0VGltZW91dChmdW5jdGlvbigpIHsKICAgICAgICBzY2hlZHVsZVN0YXRpY1JlbmRlclRpbWVySWQgPSBudWxsOwogICAgICAgIHdpbmRvdy5IVE1MV2lkZ2V0cy5zdGF0aWNSZW5kZXIoKTsKICAgICAgfSwgMSk7CiAgICB9CiAgfQoKICAvLyBSZW5kZXIgc3RhdGljIHdpZGdldHMgYWZ0ZXIgdGhlIGRvY3VtZW50IGZpbmlzaGVzIGxvYWRpbmcKICAvLyBTdGF0aWNhbGx5IHJlbmRlciBhbGwgZWxlbWVudHMgdGhhdCBhcmUgb2YgdGhpcyB3aWRnZXQncyBjbGFzcwogIHdpbmRvdy5IVE1MV2lkZ2V0cy5zdGF0aWNSZW5kZXIgPSBmdW5jdGlvbigpIHsKICAgIHZhciBiaW5kaW5ncyA9IHdpbmRvdy5IVE1MV2lkZ2V0cy53aWRnZXRzIHx8IFtdOwogICAgZm9yRWFjaChiaW5kaW5ncywgZnVuY3Rpb24oYmluZGluZykgewogICAgICB2YXIgbWF0Y2hlcyA9IGJpbmRpbmcuZmluZChkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQpOwogICAgICBmb3JFYWNoKG1hdGNoZXMsIGZ1bmN0aW9uKGVsKSB7CiAgICAgICAgdmFyIHNpemVPYmogPSBpbml0U2l6aW5nKGVsLCBiaW5kaW5nKTsKCiAgICAgICAgaWYgKGhhc0NsYXNzKGVsLCAiaHRtbC13aWRnZXQtc3RhdGljLWJvdW5kIikpCiAgICAgICAgICByZXR1cm47CiAgICAgICAgZWwuY2xhc3NOYW1lID0gZWwuY2xhc3NOYW1lICsgIiBodG1sLXdpZGdldC1zdGF0aWMtYm91bmQiOwoKICAgICAgICB2YXIgaW5pdFJlc3VsdDsKICAgICAgICBpZiAoYmluZGluZy5pbml0aWFsaXplKSB7CiAgICAgICAgICBpbml0UmVzdWx0ID0gYmluZGluZy5pbml0aWFsaXplKGVsLAogICAgICAgICAgICBzaXplT2JqID8gc2l6ZU9iai5nZXRXaWR0aCgpIDogZWwub2Zmc2V0V2lkdGgsCiAgICAgICAgICAgIHNpemVPYmogPyBzaXplT2JqLmdldEhlaWdodCgpIDogZWwub2Zmc2V0SGVpZ2h0CiAgICAgICAgICApOwogICAgICAgICAgZWxlbWVudERhdGEoZWwsICJpbml0X3Jlc3VsdCIsIGluaXRSZXN1bHQpOwogICAgICAgIH0KCiAgICAgICAgaWYgKGJpbmRpbmcucmVzaXplKSB7CiAgICAgICAgICB2YXIgbGFzdFNpemUgPSB7fTsKICAgICAgICAgIHZhciByZXNpemVIYW5kbGVyID0gZnVuY3Rpb24oZSkgewogICAgICAgICAgICB2YXIgc2l6ZSA9IHsKICAgICAgICAgICAgICB3OiBzaXplT2JqID8gc2l6ZU9iai5nZXRXaWR0aCgpIDogZWwub2Zmc2V0V2lkdGgsCiAgICAgICAgICAgICAgaDogc2l6ZU9iaiA/IHNpemVPYmouZ2V0SGVpZ2h0KCkgOiBlbC5vZmZzZXRIZWlnaHQKICAgICAgICAgICAgfTsKICAgICAgICAgICAgaWYgKHNpemUudyA9PT0gMCAmJiBzaXplLmggPT09IDApCiAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICBpZiAoc2l6ZS53ID09PSBsYXN0U2l6ZS53ICYmIHNpemUuaCA9PT0gbGFzdFNpemUuaCkKICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgIGxhc3RTaXplID0gc2l6ZTsKICAgICAgICAgICAgYmluZGluZy5yZXNpemUoZWwsIHNpemUudywgc2l6ZS5oLCBpbml0UmVzdWx0KTsKICAgICAgICAgIH07CgogICAgICAgICAgb24od2luZG93LCAicmVzaXplIiwgcmVzaXplSGFuZGxlcik7CgogICAgICAgICAgLy8gVGhpcyBpcyBuZWVkZWQgZm9yIGNhc2VzIHdoZXJlIHdlJ3JlIHJ1bm5pbmcgaW4gYSBTaGlueQogICAgICAgICAgLy8gYXBwLCBidXQgdGhlIHdpZGdldCBpdHNlbGYgaXMgbm90IGEgU2hpbnkgb3V0cHV0LCBidXQKICAgICAgICAgIC8vIHJhdGhlciBhIHNpbXBsZSBzdGF0aWMgd2lkZ2V0LiBPbmUgZXhhbXBsZSBvZiB0aGlzIGlzCiAgICAgICAgICAvLyBhbiBybWFya2Rvd24gZG9jdW1lbnQgdGhhdCBoYXMgcnVudGltZTpzaGlueSBhbmQgd2lkZ2V0CiAgICAgICAgICAvLyB0aGF0IGlzbid0IGluIGEgcmVuZGVyIGZ1bmN0aW9uLiBTaGlueSBvbmx5IGtub3dzIHRvCiAgICAgICAgICAvLyBjYWxsIHJlc2l6ZSBoYW5kbGVycyBmb3IgU2hpbnkgb3V0cHV0cywgbm90IGZvciBzdGF0aWMKICAgICAgICAgIC8vIHdpZGdldHMsIHNvIHdlIGRvIGl0IG91cnNlbHZlcy4KICAgICAgICAgIGlmICh3aW5kb3cualF1ZXJ5KSB7CiAgICAgICAgICAgIHdpbmRvdy5qUXVlcnkoZG9jdW1lbnQpLm9uKAogICAgICAgICAgICAgICJzaG93bi5odG1sd2lkZ2V0cyBzaG93bi5icy50YWIuaHRtbHdpZGdldHMgc2hvd24uYnMuY29sbGFwc2UuaHRtbHdpZGdldHMiLAogICAgICAgICAgICAgIHJlc2l6ZUhhbmRsZXIKICAgICAgICAgICAgKTsKICAgICAgICAgICAgd2luZG93LmpRdWVyeShkb2N1bWVudCkub24oCiAgICAgICAgICAgICAgImhpZGRlbi5odG1sd2lkZ2V0cyBoaWRkZW4uYnMudGFiLmh0bWx3aWRnZXRzIGhpZGRlbi5icy5jb2xsYXBzZS5odG1sd2lkZ2V0cyIsCiAgICAgICAgICAgICAgcmVzaXplSGFuZGxlcgogICAgICAgICAgICApOwogICAgICAgICAgfQoKICAgICAgICAgIC8vIFRoaXMgaXMgbmVlZGVkIGZvciB0aGUgc3BlY2lmaWMgY2FzZSBvZiBpb3NsaWRlcywgd2hpY2gKICAgICAgICAgIC8vIGZsaXBzIHNsaWRlcyBiZXR3ZWVuIGRpc3BsYXk6bm9uZSBhbmQgZGlzcGxheTpibG9jay4KICAgICAgICAgIC8vIElkZWFsbHkgd2Ugd291bGQgbm90IGhhdmUgdG8gaGF2ZSBpb3NsaWRlLXNwZWNpZmljIGNvZGUKICAgICAgICAgIC8vIGhlcmUsIGJ1dCByYXRoZXIgaGF2ZSBpb3NsaWRlcyByYWlzZSBhIGdlbmVyaWMgZXZlbnQsCiAgICAgICAgICAvLyBidXQgdGhlIHJtYXJrZG93biBwYWNrYWdlIGp1c3Qgd2VudCB0byBDUkFOIHNvIHRoZQogICAgICAgICAgLy8gd2luZG93IHRvIGdldHRpbmcgdGhhdCBmaXhlZCBtYXkgYmUgbG9uZy4KICAgICAgICAgIGlmICh3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcikgewogICAgICAgICAgICAvLyBJdCdzIE9LIHRvIGxpbWl0IHRoaXMgdG8gd2luZG93LmFkZEV2ZW50TGlzdGVuZXIKICAgICAgICAgICAgLy8gYnJvd3NlcnMgYmVjYXVzZSBpb3NsaWRlcyBpdHNlbGYgb25seSBzdXBwb3J0cwogICAgICAgICAgICAvLyBzdWNoIGJyb3dzZXJzLgogICAgICAgICAgICBvbihkb2N1bWVudCwgInNsaWRlZW50ZXIiLCByZXNpemVIYW5kbGVyKTsKICAgICAgICAgICAgb24oZG9jdW1lbnQsICJzbGlkZWxlYXZlIiwgcmVzaXplSGFuZGxlcik7CiAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgICB2YXIgc2NyaXB0RGF0YSA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoInNjcmlwdFtkYXRhLWZvcj0nIiArIGVsLmlkICsgIiddW3R5cGU9J2FwcGxpY2F0aW9uL2pzb24nXSIpOwogICAgICAgIGlmIChzY3JpcHREYXRhKSB7CiAgICAgICAgICB2YXIgZGF0YSA9IEpTT04ucGFyc2Uoc2NyaXB0RGF0YS50ZXh0Q29udGVudCB8fCBzY3JpcHREYXRhLnRleHQpOwogICAgICAgICAgLy8gUmVzb2x2ZSBzdHJpbmdzIG1hcmtlZCBhcyBqYXZhc2NyaXB0IGxpdGVyYWxzIHRvIG9iamVjdHMKICAgICAgICAgIGlmICghKGRhdGEuZXZhbHMgaW5zdGFuY2VvZiBBcnJheSkpIGRhdGEuZXZhbHMgPSBbZGF0YS5ldmFsc107CiAgICAgICAgICBmb3IgKHZhciBrID0gMDsgZGF0YS5ldmFscyAmJiBrIDwgZGF0YS5ldmFscy5sZW5ndGg7IGsrKykgewogICAgICAgICAgICB3aW5kb3cuSFRNTFdpZGdldHMuZXZhbHVhdGVTdHJpbmdNZW1iZXIoZGF0YS54LCBkYXRhLmV2YWxzW2tdKTsKICAgICAgICAgIH0KICAgICAgICAgIGJpbmRpbmcucmVuZGVyVmFsdWUoZWwsIGRhdGEueCwgaW5pdFJlc3VsdCk7CiAgICAgICAgICBldmFsQW5kUnVuKGRhdGEuanNIb29rcy5yZW5kZXIsIGluaXRSZXN1bHQsIFtlbCwgZGF0YS54XSk7CiAgICAgICAgfQogICAgICB9KTsKICAgIH0pOwoKICAgIGludm9rZVBvc3RSZW5kZXJIYW5kbGVycygpOwogIH0KCiAgLy8gV2FpdCB1bnRpbCBhZnRlciB0aGUgZG9jdW1lbnQgaGFzIGxvYWRlZCB0byByZW5kZXIgdGhlIHdpZGdldHMuCiAgaWYgKGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIpIHsKICAgIGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoIkRPTUNvbnRlbnRMb2FkZWQiLCBmdW5jdGlvbigpIHsKICAgICAgZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcigiRE9NQ29udGVudExvYWRlZCIsIGFyZ3VtZW50cy5jYWxsZWUsIGZhbHNlKTsKICAgICAgd2luZG93LkhUTUxXaWRnZXRzLnN0YXRpY1JlbmRlcigpOwogICAgfSwgZmFsc2UpOwogIH0gZWxzZSBpZiAoZG9jdW1lbnQuYXR0YWNoRXZlbnQpIHsKICAgIGRvY3VtZW50LmF0dGFjaEV2ZW50KCJvbnJlYWR5c3RhdGVjaGFuZ2UiLCBmdW5jdGlvbigpIHsKICAgICAgaWYgKGRvY3VtZW50LnJlYWR5U3RhdGUgPT09ICJjb21wbGV0ZSIpIHsKICAgICAgICBkb2N1bWVudC5kZXRhY2hFdmVudCgib25yZWFkeXN0YXRlY2hhbmdlIiwgYXJndW1lbnRzLmNhbGxlZSk7CiAgICAgICAgd2luZG93LkhUTUxXaWRnZXRzLnN0YXRpY1JlbmRlcigpOwogICAgICB9CiAgICB9KTsKICB9CgoKICB3aW5kb3cuSFRNTFdpZGdldHMuZ2V0QXR0YWNobWVudFVybCA9IGZ1bmN0aW9uKGRlcG5hbWUsIGtleSkgewogICAgLy8gSWYgbm8ga2V5LCBkZWZhdWx0IHRvIHRoZSBmaXJzdCBpdGVtCiAgICBpZiAodHlwZW9mKGtleSkgPT09ICJ1bmRlZmluZWQiKQogICAgICBrZXkgPSAxOwoKICAgIHZhciBsaW5rID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoZGVwbmFtZSArICItIiArIGtleSArICItYXR0YWNobWVudCIpOwogICAgaWYgKCFsaW5rKSB7CiAgICAgIHRocm93IG5ldyBFcnJvcigiQXR0YWNobWVudCAiICsgZGVwbmFtZSArICIvIiArIGtleSArICIgbm90IGZvdW5kIGluIGRvY3VtZW50Iik7CiAgICB9CiAgICByZXR1cm4gbGluay5nZXRBdHRyaWJ1dGUoImhyZWYiKTsKICB9OwoKICB3aW5kb3cuSFRNTFdpZGdldHMuZGF0YWZyYW1lVG9EMyA9IGZ1bmN0aW9uKGRmKSB7CiAgICB2YXIgbmFtZXMgPSBbXTsKICAgIHZhciBsZW5ndGg7CiAgICBmb3IgKHZhciBuYW1lIGluIGRmKSB7CiAgICAgICAgaWYgKGRmLmhhc093blByb3BlcnR5KG5hbWUpKQogICAgICAgICAgICBuYW1lcy5wdXNoKG5hbWUpOwogICAgICAgIGlmICh0eXBlb2YoZGZbbmFtZV0pICE9PSAib2JqZWN0IiB8fCB0eXBlb2YoZGZbbmFtZV0ubGVuZ3RoKSA9PT0gInVuZGVmaW5lZCIpIHsKICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCJBbGwgZmllbGRzIG11c3QgYmUgYXJyYXlzIik7CiAgICAgICAgfSBlbHNlIGlmICh0eXBlb2YobGVuZ3RoKSAhPT0gInVuZGVmaW5lZCIgJiYgbGVuZ3RoICE9PSBkZltuYW1lXS5sZW5ndGgpIHsKICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCJBbGwgZmllbGRzIG11c3QgYmUgYXJyYXlzIG9mIHRoZSBzYW1lIGxlbmd0aCIpOwogICAgICAgIH0KICAgICAgICBsZW5ndGggPSBkZltuYW1lXS5sZW5ndGg7CiAgICB9CiAgICB2YXIgcmVzdWx0cyA9IFtdOwogICAgdmFyIGl0ZW07CiAgICBmb3IgKHZhciByb3cgPSAwOyByb3cgPCBsZW5ndGg7IHJvdysrKSB7CiAgICAgICAgaXRlbSA9IHt9OwogICAgICAgIGZvciAodmFyIGNvbCA9IDA7IGNvbCA8IG5hbWVzLmxlbmd0aDsgY29sKyspIHsKICAgICAgICAgICAgaXRlbVtuYW1lc1tjb2xdXSA9IGRmW25hbWVzW2NvbF1dW3Jvd107CiAgICAgICAgfQogICAgICAgIHJlc3VsdHMucHVzaChpdGVtKTsKICAgIH0KICAgIHJldHVybiByZXN1bHRzOwogIH07CgogIHdpbmRvdy5IVE1MV2lkZ2V0cy50cmFuc3Bvc2VBcnJheTJEID0gZnVuY3Rpb24oYXJyYXkpIHsKICAgICAgaWYgKGFycmF5Lmxlbmd0aCA9PT0gMCkgcmV0dXJuIGFycmF5OwogICAgICB2YXIgbmV3QXJyYXkgPSBhcnJheVswXS5tYXAoZnVuY3Rpb24oY29sLCBpKSB7CiAgICAgICAgICByZXR1cm4gYXJyYXkubWFwKGZ1bmN0aW9uKHJvdykgewogICAgICAgICAgICAgIHJldHVybiByb3dbaV0KICAgICAgICAgIH0pCiAgICAgIH0pOwogICAgICByZXR1cm4gbmV3QXJyYXk7CiAgfTsKICAvLyBTcGxpdCB2YWx1ZSBhdCBzcGxpdENoYXIsIGJ1dCBhbGxvdyBzcGxpdENoYXIgdG8gYmUgZXNjYXBlZAogIC8vIHVzaW5nIGVzY2FwZUNoYXIuIEFueSBvdGhlciBjaGFyYWN0ZXJzIGVzY2FwZWQgYnkgZXNjYXBlQ2hhcgogIC8vIHdpbGwgYmUgaW5jbHVkZWQgYXMgdXN1YWwgKGluY2x1ZGluZyBlc2NhcGVDaGFyIGl0c2VsZikuCiAgZnVuY3Rpb24gc3BsaXRXaXRoRXNjYXBlKHZhbHVlLCBzcGxpdENoYXIsIGVzY2FwZUNoYXIpIHsKICAgIHZhciByZXN1bHRzID0gW107CiAgICB2YXIgZXNjYXBlTW9kZSA9IGZhbHNlOwogICAgdmFyIGN1cnJlbnRSZXN1bHQgPSAiIjsKICAgIGZvciAodmFyIHBvcyA9IDA7IHBvcyA8IHZhbHVlLmxlbmd0aDsgcG9zKyspIHsKICAgICAgaWYgKCFlc2NhcGVNb2RlKSB7CiAgICAgICAgaWYgKHZhbHVlW3Bvc10gPT09IHNwbGl0Q2hhcikgewogICAgICAgICAgcmVzdWx0cy5wdXNoKGN1cnJlbnRSZXN1bHQpOwogICAgICAgICAgY3VycmVudFJlc3VsdCA9ICIiOwogICAgICAgIH0gZWxzZSBpZiAodmFsdWVbcG9zXSA9PT0gZXNjYXBlQ2hhcikgewogICAgICAgICAgZXNjYXBlTW9kZSA9IHRydWU7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgIGN1cnJlbnRSZXN1bHQgKz0gdmFsdWVbcG9zXTsKICAgICAgICB9CiAgICAgIH0gZWxzZSB7CiAgICAgICAgY3VycmVudFJlc3VsdCArPSB2YWx1ZVtwb3NdOwogICAgICAgIGVzY2FwZU1vZGUgPSBmYWxzZTsKICAgICAgfQogICAgfQogICAgaWYgKGN1cnJlbnRSZXN1bHQgIT09ICIiKSB7CiAgICAgIHJlc3VsdHMucHVzaChjdXJyZW50UmVzdWx0KTsKICAgIH0KICAgIHJldHVybiByZXN1bHRzOwogIH0KICAvLyBGdW5jdGlvbiBhdXRob3JlZCBieSBZaWh1aS9KSiBBbGxhaXJlCiAgd2luZG93LkhUTUxXaWRnZXRzLmV2YWx1YXRlU3RyaW5nTWVtYmVyID0gZnVuY3Rpb24obywgbWVtYmVyKSB7CiAgICB2YXIgcGFydHMgPSBzcGxpdFdpdGhFc2NhcGUobWVtYmVyLCAnLicsICdcXCcpOwogICAgZm9yICh2YXIgaSA9IDAsIGwgPSBwYXJ0cy5sZW5ndGg7IGkgPCBsOyBpKyspIHsKICAgICAgdmFyIHBhcnQgPSBwYXJ0c1tpXTsKICAgICAgLy8gcGFydCBtYXkgYmUgYSBjaGFyYWN0ZXIgb3IgJ251bWVyaWMnIG1lbWJlciBuYW1lCiAgICAgIGlmIChvICE9PSBudWxsICYmIHR5cGVvZiBvID09PSAib2JqZWN0IiAmJiBwYXJ0IGluIG8pIHsKICAgICAgICBpZiAoaSA9PSAobCAtIDEpKSB7IC8vIGlmIHdlIGFyZSBhdCB0aGUgZW5kIG9mIHRoZSBsaW5lIHRoZW4gZXZhbHVsYXRlCiAgICAgICAgICBpZiAodHlwZW9mIG9bcGFydF0gPT09ICJzdHJpbmciKQogICAgICAgICAgICBvW3BhcnRdID0gZXZhbCgiKCIgKyBvW3BhcnRdICsgIikiKTsKICAgICAgICB9IGVsc2UgeyAvLyBvdGhlcndpc2UgY29udGludWUgdG8gbmV4dCBlbWJlZGRlZCBvYmplY3QKICAgICAgICAgIG8gPSBvW3BhcnRdOwogICAgICAgIH0KICAgICAgfQogICAgfQogIH07CgogIC8vIFJldHJpZXZlIHRoZSBIVE1MV2lkZ2V0IGluc3RhbmNlIChpLmUuIHRoZSByZXR1cm4gdmFsdWUgb2YgYW4KICAvLyBIVE1MV2lkZ2V0IGJpbmRpbmcncyBpbml0aWFsaXplKCkgb3IgZmFjdG9yeSgpIGZ1bmN0aW9uKQogIC8vIGFzc29jaWF0ZWQgd2l0aCBhbiBlbGVtZW50LCBvciBudWxsIGlmIG5vbmUuCiAgd2luZG93LkhUTUxXaWRnZXRzLmdldEluc3RhbmNlID0gZnVuY3Rpb24oZWwpIHsKICAgIHJldHVybiBlbGVtZW50RGF0YShlbCwgImluaXRfcmVzdWx0Iik7CiAgfTsKCiAgLy8gRmluZHMgdGhlIGZpcnN0IGVsZW1lbnQgaW4gdGhlIHNjb3BlIHRoYXQgbWF0Y2hlcyB0aGUgc2VsZWN0b3IsCiAgLy8gYW5kIHJldHVybnMgdGhlIEhUTUxXaWRnZXQgaW5zdGFuY2UgKGkuZS4gdGhlIHJldHVybiB2YWx1ZSBvZgogIC8vIGFuIEhUTUxXaWRnZXQgYmluZGluZydzIGluaXRpYWxpemUoKSBvciBmYWN0b3J5KCkgZnVuY3Rpb24pCiAgLy8gYXNzb2NpYXRlZCB3aXRoIHRoYXQgZWxlbWVudCwgaWYgYW55LiBJZiBubyBlbGVtZW50IG1hdGNoZXMgdGhlCiAgLy8gc2VsZWN0b3IsIG9yIHRoZSBmaXJzdCBtYXRjaGluZyBlbGVtZW50IGhhcyBubyBIVE1MV2lkZ2V0CiAgLy8gaW5zdGFuY2UgYXNzb2NpYXRlZCB3aXRoIGl0LCB0aGVuIG51bGwgaXMgcmV0dXJuZWQuCiAgLy8KICAvLyBUaGUgc2NvcGUgYXJndW1lbnQgaXMgb3B0aW9uYWwsIGFuZCBkZWZhdWx0cyB0byB3aW5kb3cuZG9jdW1lbnQuCiAgd2luZG93LkhUTUxXaWRnZXRzLmZpbmQgPSBmdW5jdGlvbihzY29wZSwgc2VsZWN0b3IpIHsKICAgIGlmIChhcmd1bWVudHMubGVuZ3RoID09IDEpIHsKICAgICAgc2VsZWN0b3IgPSBzY29wZTsKICAgICAgc2NvcGUgPSBkb2N1bWVudDsKICAgIH0KCiAgICB2YXIgZWwgPSBzY29wZS5xdWVyeVNlbGVjdG9yKHNlbGVjdG9yKTsKICAgIGlmIChlbCA9PT0gbnVsbCkgewogICAgICByZXR1cm4gbnVsbDsKICAgIH0gZWxzZSB7CiAgICAgIHJldHVybiB3aW5kb3cuSFRNTFdpZGdldHMuZ2V0SW5zdGFuY2UoZWwpOwogICAgfQogIH07CgogIC8vIEZpbmRzIGFsbCBlbGVtZW50cyBpbiB0aGUgc2NvcGUgdGhhdCBtYXRjaCB0aGUgc2VsZWN0b3IsIGFuZAogIC8vIHJldHVybnMgdGhlIEhUTUxXaWRnZXQgaW5zdGFuY2VzIChpLmUuIHRoZSByZXR1cm4gdmFsdWVzIG9mCiAgLy8gYW4gSFRNTFdpZGdldCBiaW5kaW5nJ3MgaW5pdGlhbGl6ZSgpIG9yIGZhY3RvcnkoKSBmdW5jdGlvbikKICAvLyBhc3NvY2lhdGVkIHdpdGggdGhlIGVsZW1lbnRzLCBpbiBhbiBhcnJheS4gSWYgZWxlbWVudHMgdGhhdAogIC8vIG1hdGNoIHRoZSBzZWxlY3RvciBkb24ndCBoYXZlIGFuIGFzc29jaWF0ZWQgSFRNTFdpZGdldAogIC8vIGluc3RhbmNlLCB0aGUgcmV0dXJuZWQgYXJyYXkgd2lsbCBjb250YWluIG51bGxzLgogIC8vCiAgLy8gVGhlIHNjb3BlIGFyZ3VtZW50IGlzIG9wdGlvbmFsLCBhbmQgZGVmYXVsdHMgdG8gd2luZG93LmRvY3VtZW50LgogIHdpbmRvdy5IVE1MV2lkZ2V0cy5maW5kQWxsID0gZnVuY3Rpb24oc2NvcGUsIHNlbGVjdG9yKSB7CiAgICBpZiAoYXJndW1lbnRzLmxlbmd0aCA9PSAxKSB7CiAgICAgIHNlbGVjdG9yID0gc2NvcGU7CiAgICAgIHNjb3BlID0gZG9jdW1lbnQ7CiAgICB9CgogICAgdmFyIG5vZGVzID0gc2NvcGUucXVlcnlTZWxlY3RvckFsbChzZWxlY3Rvcik7CiAgICB2YXIgcmVzdWx0cyA9IFtdOwogICAgZm9yICh2YXIgaSA9IDA7IGkgPCBub2Rlcy5sZW5ndGg7IGkrKykgewogICAgICByZXN1bHRzLnB1c2god2luZG93LkhUTUxXaWRnZXRzLmdldEluc3RhbmNlKG5vZGVzW2ldKSk7CiAgICB9CiAgICByZXR1cm4gcmVzdWx0czsKICB9OwoKICB2YXIgcG9zdFJlbmRlckhhbmRsZXJzID0gW107CiAgZnVuY3Rpb24gaW52b2tlUG9zdFJlbmRlckhhbmRsZXJzKCkgewogICAgd2hpbGUgKHBvc3RSZW5kZXJIYW5kbGVycy5sZW5ndGgpIHsKICAgICAgdmFyIGhhbmRsZXIgPSBwb3N0UmVuZGVySGFuZGxlcnMuc2hpZnQoKTsKICAgICAgaWYgKGhhbmRsZXIpIHsKICAgICAgICBoYW5kbGVyKCk7CiAgICAgIH0KICAgIH0KICB9CgogIC8vIFJlZ2lzdGVyIHRoZSBnaXZlbiBjYWxsYmFjayBmdW5jdGlvbiB0byBiZSBpbnZva2VkIGFmdGVyIHRoZQogIC8vIG5leHQgdGltZSBzdGF0aWMgd2lkZ2V0cyBhcmUgcmVuZGVyZWQuCiAgd2luZG93LkhUTUxXaWRnZXRzLmFkZFBvc3RSZW5kZXJIYW5kbGVyID0gZnVuY3Rpb24oY2FsbGJhY2spIHsKICAgIHBvc3RSZW5kZXJIYW5kbGVycy5wdXNoKGNhbGxiYWNrKTsKICB9OwoKICAvLyBUYWtlcyBhIG5ldy1zdHlsZSBpbnN0YW5jZS1ib3VuZCBkZWZpbml0aW9uLCBhbmQgcmV0dXJucyBhbgogIC8vIG9sZC1zdHlsZSBjbGFzcy1ib3VuZCBkZWZpbml0aW9uLiBUaGlzIHNhdmVzIHVzIGZyb20gaGF2aW5nCiAgLy8gdG8gcmV3cml0ZSBhbGwgdGhlIGxvZ2ljIGluIHRoaXMgZmlsZSB0byBhY2NvbW9kYXRlIGJvdGgKICAvLyB0eXBlcyBvZiBkZWZpbml0aW9ucy4KICBmdW5jdGlvbiBjcmVhdGVMZWdhY3lEZWZpbml0aW9uQWRhcHRlcihkZWZuKSB7CiAgICB2YXIgcmVzdWx0ID0gewogICAgICBuYW1lOiBkZWZuLm5hbWUsCiAgICAgIHR5cGU6IGRlZm4udHlwZSwKICAgICAgaW5pdGlhbGl6ZTogZnVuY3Rpb24oZWwsIHdpZHRoLCBoZWlnaHQpIHsKICAgICAgICByZXR1cm4gZGVmbi5mYWN0b3J5KGVsLCB3aWR0aCwgaGVpZ2h0KTsKICAgICAgfSwKICAgICAgcmVuZGVyVmFsdWU6IGZ1bmN0aW9uKGVsLCB4LCBpbnN0YW5jZSkgewogICAgICAgIHJldHVybiBpbnN0YW5jZS5yZW5kZXJWYWx1ZSh4KTsKICAgICAgfSwKICAgICAgcmVzaXplOiBmdW5jdGlvbihlbCwgd2lkdGgsIGhlaWdodCwgaW5zdGFuY2UpIHsKICAgICAgICByZXR1cm4gaW5zdGFuY2UucmVzaXplKHdpZHRoLCBoZWlnaHQpOwogICAgICB9CiAgICB9OwoKICAgIGlmIChkZWZuLmZpbmQpCiAgICAgIHJlc3VsdC5maW5kID0gZGVmbi5maW5kOwogICAgaWYgKGRlZm4ucmVuZGVyRXJyb3IpCiAgICAgIHJlc3VsdC5yZW5kZXJFcnJvciA9IGRlZm4ucmVuZGVyRXJyb3I7CiAgICBpZiAoZGVmbi5jbGVhckVycm9yKQogICAgICByZXN1bHQuY2xlYXJFcnJvciA9IGRlZm4uY2xlYXJFcnJvcjsKCiAgICByZXR1cm4gcmVzdWx0OwogIH0KfSkoKTsKCg=="></script> <script src="data:application/x-javascript;base64,IWZ1bmN0aW9uKCl7ZnVuY3Rpb24gbihuKXtyZXR1cm4gbiYmKG4ub3duZXJEb2N1bWVudHx8bi5kb2N1bWVudHx8bikuZG9jdW1lbnRFbGVtZW50fWZ1bmN0aW9uIHQobil7cmV0dXJuIG4mJihuLm93bmVyRG9jdW1lbnQmJm4ub3duZXJEb2N1bWVudC5kZWZhdWx0Vmlld3x8bi5kb2N1bWVudCYmbnx8bi5kZWZhdWx0Vmlldyl9ZnVuY3Rpb24gZShuLHQpe3JldHVybiB0Pm4/LTE6bj50PzE6bj49dD8wOjAvMH1mdW5jdGlvbiByKG4pe3JldHVybiBudWxsPT09bj8wLzA6K259ZnVuY3Rpb24gdShuKXtyZXR1cm4haXNOYU4obil9ZnVuY3Rpb24gaShuKXtyZXR1cm57bGVmdDpmdW5jdGlvbih0LGUscix1KXtmb3IoYXJndW1lbnRzLmxlbmd0aDwzJiYocj0wKSxhcmd1bWVudHMubGVuZ3RoPDQmJih1PXQubGVuZ3RoKTt1PnI7KXt2YXIgaT1yK3U+Pj4xO24odFtpXSxlKTwwP3I9aSsxOnU9aX1yZXR1cm4gcn0scmlnaHQ6ZnVuY3Rpb24odCxlLHIsdSl7Zm9yKGFyZ3VtZW50cy5sZW5ndGg8MyYmKHI9MCksYXJndW1lbnRzLmxlbmd0aDw0JiYodT10Lmxlbmd0aCk7dT5yOyl7dmFyIGk9cit1Pj4+MTtuKHRbaV0sZSk+MD91PWk6cj1pKzF9cmV0dXJuIHJ9fX1mdW5jdGlvbiBvKG4pe3JldHVybiBuLmxlbmd0aH1mdW5jdGlvbiBhKG4pe2Zvcih2YXIgdD0xO24qdCUxOyl0Kj0xMDtyZXR1cm4gdH1mdW5jdGlvbiBjKG4sdCl7Zm9yKHZhciBlIGluIHQpT2JqZWN0LmRlZmluZVByb3BlcnR5KG4ucHJvdG90eXBlLGUse3ZhbHVlOnRbZV0sZW51bWVyYWJsZTohMX0pfWZ1bmN0aW9uIGwoKXt0aGlzLl89T2JqZWN0LmNyZWF0ZShudWxsKX1mdW5jdGlvbiBzKG4pe3JldHVybihuKz0iIik9PT1wYXx8blswXT09PXZhP3ZhK246bn1mdW5jdGlvbiBmKG4pe3JldHVybihuKz0iIilbMF09PT12YT9uLnNsaWNlKDEpOm59ZnVuY3Rpb24gaChuKXtyZXR1cm4gcyhuKWluIHRoaXMuX31mdW5jdGlvbiBnKG4pe3JldHVybihuPXMobikpaW4gdGhpcy5fJiZkZWxldGUgdGhpcy5fW25dfWZ1bmN0aW9uIHAoKXt2YXIgbj1bXTtmb3IodmFyIHQgaW4gdGhpcy5fKW4ucHVzaChmKHQpKTtyZXR1cm4gbn1mdW5jdGlvbiB2KCl7dmFyIG49MDtmb3IodmFyIHQgaW4gdGhpcy5fKSsrbjtyZXR1cm4gbn1mdW5jdGlvbiBkKCl7Zm9yKHZhciBuIGluIHRoaXMuXylyZXR1cm4hMTtyZXR1cm4hMH1mdW5jdGlvbiBtKCl7dGhpcy5fPU9iamVjdC5jcmVhdGUobnVsbCl9ZnVuY3Rpb24geShuKXtyZXR1cm4gbn1mdW5jdGlvbiBNKG4sdCxlKXtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgcj1lLmFwcGx5KHQsYXJndW1lbnRzKTtyZXR1cm4gcj09PXQ/bjpyfX1mdW5jdGlvbiB4KG4sdCl7aWYodCBpbiBuKXJldHVybiB0O3Q9dC5jaGFyQXQoMCkudG9VcHBlckNhc2UoKSt0LnNsaWNlKDEpO2Zvcih2YXIgZT0wLHI9ZGEubGVuZ3RoO3I+ZTsrK2Upe3ZhciB1PWRhW2VdK3Q7aWYodSBpbiBuKXJldHVybiB1fX1mdW5jdGlvbiBiKCl7fWZ1bmN0aW9uIF8oKXt9ZnVuY3Rpb24gdyhuKXtmdW5jdGlvbiB0KCl7Zm9yKHZhciB0LHI9ZSx1PS0xLGk9ci5sZW5ndGg7Kyt1PGk7KSh0PXJbdV0ub24pJiZ0LmFwcGx5KHRoaXMsYXJndW1lbnRzKTtyZXR1cm4gbn12YXIgZT1bXSxyPW5ldyBsO3JldHVybiB0Lm9uPWZ1bmN0aW9uKHQsdSl7dmFyIGksbz1yLmdldCh0KTtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aDwyP28mJm8ub246KG8mJihvLm9uPW51bGwsZT1lLnNsaWNlKDAsaT1lLmluZGV4T2YobykpLmNvbmNhdChlLnNsaWNlKGkrMSkpLHIucmVtb3ZlKHQpKSx1JiZlLnB1c2goci5zZXQodCx7b246dX0pKSxuKX0sdH1mdW5jdGlvbiBTKCl7dGEuZXZlbnQucHJldmVudERlZmF1bHQoKX1mdW5jdGlvbiBrKCl7Zm9yKHZhciBuLHQ9dGEuZXZlbnQ7bj10LnNvdXJjZUV2ZW50Oyl0PW47cmV0dXJuIHR9ZnVuY3Rpb24gRShuKXtmb3IodmFyIHQ9bmV3IF8sZT0wLHI9YXJndW1lbnRzLmxlbmd0aDsrK2U8cjspdFthcmd1bWVudHNbZV1dPXcodCk7cmV0dXJuIHQub2Y9ZnVuY3Rpb24oZSxyKXtyZXR1cm4gZnVuY3Rpb24odSl7dHJ5e3ZhciBpPXUuc291cmNlRXZlbnQ9dGEuZXZlbnQ7dS50YXJnZXQ9bix0YS5ldmVudD11LHRbdS50eXBlXS5hcHBseShlLHIpfWZpbmFsbHl7dGEuZXZlbnQ9aX19fSx0fWZ1bmN0aW9uIEEobil7cmV0dXJuIHlhKG4sX2EpLG59ZnVuY3Rpb24gTihuKXtyZXR1cm4iZnVuY3Rpb24iPT10eXBlb2Ygbj9uOmZ1bmN0aW9uKCl7cmV0dXJuIE1hKG4sdGhpcyl9fWZ1bmN0aW9uIEMobil7cmV0dXJuImZ1bmN0aW9uIj09dHlwZW9mIG4/bjpmdW5jdGlvbigpe3JldHVybiB4YShuLHRoaXMpfX1mdW5jdGlvbiB6KG4sdCl7ZnVuY3Rpb24gZSgpe3RoaXMucmVtb3ZlQXR0cmlidXRlKG4pfWZ1bmN0aW9uIHIoKXt0aGlzLnJlbW92ZUF0dHJpYnV0ZU5TKG4uc3BhY2Usbi5sb2NhbCl9ZnVuY3Rpb24gdSgpe3RoaXMuc2V0QXR0cmlidXRlKG4sdCl9ZnVuY3Rpb24gaSgpe3RoaXMuc2V0QXR0cmlidXRlTlMobi5zcGFjZSxuLmxvY2FsLHQpfWZ1bmN0aW9uIG8oKXt2YXIgZT10LmFwcGx5KHRoaXMsYXJndW1lbnRzKTtudWxsPT1lP3RoaXMucmVtb3ZlQXR0cmlidXRlKG4pOnRoaXMuc2V0QXR0cmlidXRlKG4sZSl9ZnVuY3Rpb24gYSgpe3ZhciBlPXQuYXBwbHkodGhpcyxhcmd1bWVudHMpO251bGw9PWU/dGhpcy5yZW1vdmVBdHRyaWJ1dGVOUyhuLnNwYWNlLG4ubG9jYWwpOnRoaXMuc2V0QXR0cmlidXRlTlMobi5zcGFjZSxuLmxvY2FsLGUpfXJldHVybiBuPXRhLm5zLnF1YWxpZnkobiksbnVsbD09dD9uLmxvY2FsP3I6ZToiZnVuY3Rpb24iPT10eXBlb2YgdD9uLmxvY2FsP2E6bzpuLmxvY2FsP2k6dX1mdW5jdGlvbiBxKG4pe3JldHVybiBuLnRyaW0oKS5yZXBsYWNlKC9ccysvZywiICIpfWZ1bmN0aW9uIEwobil7cmV0dXJuIG5ldyBSZWdFeHAoIig/Ol58XFxzKykiK3RhLnJlcXVvdGUobikrIig/Olxccyt8JCkiLCJnIil9ZnVuY3Rpb24gVChuKXtyZXR1cm4obisiIikudHJpbSgpLnNwbGl0KC9efFxzKy8pfWZ1bmN0aW9uIFIobix0KXtmdW5jdGlvbiBlKCl7Zm9yKHZhciBlPS0xOysrZTx1OyluW2VdKHRoaXMsdCl9ZnVuY3Rpb24gcigpe2Zvcih2YXIgZT0tMSxyPXQuYXBwbHkodGhpcyxhcmd1bWVudHMpOysrZTx1OyluW2VdKHRoaXMscil9bj1UKG4pLm1hcChEKTt2YXIgdT1uLmxlbmd0aDtyZXR1cm4iZnVuY3Rpb24iPT10eXBlb2YgdD9yOmV9ZnVuY3Rpb24gRChuKXt2YXIgdD1MKG4pO3JldHVybiBmdW5jdGlvbihlLHIpe2lmKHU9ZS5jbGFzc0xpc3QpcmV0dXJuIHI/dS5hZGQobik6dS5yZW1vdmUobik7dmFyIHU9ZS5nZXRBdHRyaWJ1dGUoImNsYXNzIil8fCIiO3I/KHQubGFzdEluZGV4PTAsdC50ZXN0KHUpfHxlLnNldEF0dHJpYnV0ZSgiY2xhc3MiLHEodSsiICIrbikpKTplLnNldEF0dHJpYnV0ZSgiY2xhc3MiLHEodS5yZXBsYWNlKHQsIiAiKSkpfX1mdW5jdGlvbiBQKG4sdCxlKXtmdW5jdGlvbiByKCl7dGhpcy5zdHlsZS5yZW1vdmVQcm9wZXJ0eShuKX1mdW5jdGlvbiB1KCl7dGhpcy5zdHlsZS5zZXRQcm9wZXJ0eShuLHQsZSl9ZnVuY3Rpb24gaSgpe3ZhciByPXQuYXBwbHkodGhpcyxhcmd1bWVudHMpO251bGw9PXI/dGhpcy5zdHlsZS5yZW1vdmVQcm9wZXJ0eShuKTp0aGlzLnN0eWxlLnNldFByb3BlcnR5KG4scixlKX1yZXR1cm4gbnVsbD09dD9yOiJmdW5jdGlvbiI9PXR5cGVvZiB0P2k6dX1mdW5jdGlvbiBVKG4sdCl7ZnVuY3Rpb24gZSgpe2RlbGV0ZSB0aGlzW25dfWZ1bmN0aW9uIHIoKXt0aGlzW25dPXR9ZnVuY3Rpb24gdSgpe3ZhciBlPXQuYXBwbHkodGhpcyxhcmd1bWVudHMpO251bGw9PWU/ZGVsZXRlIHRoaXNbbl06dGhpc1tuXT1lfXJldHVybiBudWxsPT10P2U6ImZ1bmN0aW9uIj09dHlwZW9mIHQ/dTpyfWZ1bmN0aW9uIGoobil7ZnVuY3Rpb24gdCgpe3ZhciB0PXRoaXMub3duZXJEb2N1bWVudCxlPXRoaXMubmFtZXNwYWNlVVJJO3JldHVybiBlP3QuY3JlYXRlRWxlbWVudE5TKGUsbik6dC5jcmVhdGVFbGVtZW50KG4pfWZ1bmN0aW9uIGUoKXtyZXR1cm4gdGhpcy5vd25lckRvY3VtZW50LmNyZWF0ZUVsZW1lbnROUyhuLnNwYWNlLG4ubG9jYWwpfXJldHVybiJmdW5jdGlvbiI9PXR5cGVvZiBuP246KG49dGEubnMucXVhbGlmeShuKSkubG9jYWw/ZTp0fWZ1bmN0aW9uIEYoKXt2YXIgbj10aGlzLnBhcmVudE5vZGU7biYmbi5yZW1vdmVDaGlsZCh0aGlzKX1mdW5jdGlvbiBIKG4pe3JldHVybntfX2RhdGFfXzpufX1mdW5jdGlvbiBPKG4pe3JldHVybiBmdW5jdGlvbigpe3JldHVybiBiYSh0aGlzLG4pfX1mdW5jdGlvbiBJKG4pe3JldHVybiBhcmd1bWVudHMubGVuZ3RofHwobj1lKSxmdW5jdGlvbih0LGUpe3JldHVybiB0JiZlP24odC5fX2RhdGFfXyxlLl9fZGF0YV9fKTohdC0hZX19ZnVuY3Rpb24gWShuLHQpe2Zvcih2YXIgZT0wLHI9bi5sZW5ndGg7cj5lO2UrKylmb3IodmFyIHUsaT1uW2VdLG89MCxhPWkubGVuZ3RoO2E+bztvKyspKHU9aVtvXSkmJnQodSxvLGUpO3JldHVybiBufWZ1bmN0aW9uIFoobil7cmV0dXJuIHlhKG4sU2EpLG59ZnVuY3Rpb24gVihuKXt2YXIgdCxlO3JldHVybiBmdW5jdGlvbihyLHUsaSl7dmFyIG8sYT1uW2ldLnVwZGF0ZSxjPWEubGVuZ3RoO2ZvcihpIT1lJiYoZT1pLHQ9MCksdT49dCYmKHQ9dSsxKTshKG89YVt0XSkmJisrdDxjOyk7cmV0dXJuIG99fWZ1bmN0aW9uIFgobix0LGUpe2Z1bmN0aW9uIHIoKXt2YXIgdD10aGlzW29dO3QmJih0aGlzLnJlbW92ZUV2ZW50TGlzdGVuZXIobix0LHQuJCksZGVsZXRlIHRoaXNbb10pfWZ1bmN0aW9uIHUoKXt2YXIgdT1jKHQscmEoYXJndW1lbnRzKSk7ci5jYWxsKHRoaXMpLHRoaXMuYWRkRXZlbnRMaXN0ZW5lcihuLHRoaXNbb109dSx1LiQ9ZSksdS5fPXR9ZnVuY3Rpb24gaSgpe3ZhciB0LGU9bmV3IFJlZ0V4cCgiXl9fb24oW14uXSspIit0YS5yZXF1b3RlKG4pKyIkIik7Zm9yKHZhciByIGluIHRoaXMpaWYodD1yLm1hdGNoKGUpKXt2YXIgdT10aGlzW3JdO3RoaXMucmVtb3ZlRXZlbnRMaXN0ZW5lcih0WzFdLHUsdS4kKSxkZWxldGUgdGhpc1tyXX19dmFyIG89Il9fb24iK24sYT1uLmluZGV4T2YoIi4iKSxjPSQ7YT4wJiYobj1uLnNsaWNlKDAsYSkpO3ZhciBsPWthLmdldChuKTtyZXR1cm4gbCYmKG49bCxjPUIpLGE/dD91OnI6dD9iOml9ZnVuY3Rpb24gJChuLHQpe3JldHVybiBmdW5jdGlvbihlKXt2YXIgcj10YS5ldmVudDt0YS5ldmVudD1lLHRbMF09dGhpcy5fX2RhdGFfXzt0cnl7bi5hcHBseSh0aGlzLHQpfWZpbmFsbHl7dGEuZXZlbnQ9cn19fWZ1bmN0aW9uIEIobix0KXt2YXIgZT0kKG4sdCk7cmV0dXJuIGZ1bmN0aW9uKG4pe3ZhciB0PXRoaXMscj1uLnJlbGF0ZWRUYXJnZXQ7ciYmKHI9PT10fHw4JnIuY29tcGFyZURvY3VtZW50UG9zaXRpb24odCkpfHxlLmNhbGwodCxuKX19ZnVuY3Rpb24gVyhlKXt2YXIgcj0iLmRyYWdzdXBwcmVzcy0iKyArK0FhLHU9ImNsaWNrIityLGk9dGEuc2VsZWN0KHQoZSkpLm9uKCJ0b3VjaG1vdmUiK3IsUykub24oImRyYWdzdGFydCIrcixTKS5vbigic2VsZWN0c3RhcnQiK3IsUyk7aWYobnVsbD09RWEmJihFYT0ib25zZWxlY3RzdGFydCJpbiBlPyExOngoZS5zdHlsZSwidXNlclNlbGVjdCIpKSxFYSl7dmFyIG89bihlKS5zdHlsZSxhPW9bRWFdO29bRWFdPSJub25lIn1yZXR1cm4gZnVuY3Rpb24obil7aWYoaS5vbihyLG51bGwpLEVhJiYob1tFYV09YSksbil7dmFyIHQ9ZnVuY3Rpb24oKXtpLm9uKHUsbnVsbCl9O2kub24odSxmdW5jdGlvbigpe1MoKSx0KCl9LCEwKSxzZXRUaW1lb3V0KHQsMCl9fX1mdW5jdGlvbiBKKG4sZSl7ZS5jaGFuZ2VkVG91Y2hlcyYmKGU9ZS5jaGFuZ2VkVG91Y2hlc1swXSk7dmFyIHI9bi5vd25lclNWR0VsZW1lbnR8fG47aWYoci5jcmVhdGVTVkdQb2ludCl7dmFyIHU9ci5jcmVhdGVTVkdQb2ludCgpO2lmKDA+TmEpe3ZhciBpPXQobik7aWYoaS5zY3JvbGxYfHxpLnNjcm9sbFkpe3I9dGEuc2VsZWN0KCJib2R5IikuYXBwZW5kKCJzdmciKS5zdHlsZSh7cG9zaXRpb246ImFic29sdXRlIix0b3A6MCxsZWZ0OjAsbWFyZ2luOjAscGFkZGluZzowLGJvcmRlcjoibm9uZSJ9LCJpbXBvcnRhbnQiKTt2YXIgbz1yWzBdWzBdLmdldFNjcmVlbkNUTSgpO05hPSEoby5mfHxvLmUpLHIucmVtb3ZlKCl9fXJldHVybiBOYT8odS54PWUucGFnZVgsdS55PWUucGFnZVkpOih1Lng9ZS5jbGllbnRYLHUueT1lLmNsaWVudFkpLHU9dS5tYXRyaXhUcmFuc2Zvcm0obi5nZXRTY3JlZW5DVE0oKS5pbnZlcnNlKCkpLFt1LngsdS55XX12YXIgYT1uLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO3JldHVybltlLmNsaWVudFgtYS5sZWZ0LW4uY2xpZW50TGVmdCxlLmNsaWVudFktYS50b3Atbi5jbGllbnRUb3BdfWZ1bmN0aW9uIEcoKXtyZXR1cm4gdGEuZXZlbnQuY2hhbmdlZFRvdWNoZXNbMF0uaWRlbnRpZmllcn1mdW5jdGlvbiBLKG4pe3JldHVybiBuPjA/MTowPm4/LTE6MH1mdW5jdGlvbiBRKG4sdCxlKXtyZXR1cm4odFswXS1uWzBdKSooZVsxXS1uWzFdKS0odFsxXS1uWzFdKSooZVswXS1uWzBdKX1mdW5jdGlvbiBudChuKXtyZXR1cm4gbj4xPzA6LTE+bj9xYTpNYXRoLmFjb3Mobil9ZnVuY3Rpb24gdHQobil7cmV0dXJuIG4+MT9SYTotMT5uPy1SYTpNYXRoLmFzaW4obil9ZnVuY3Rpb24gZXQobil7cmV0dXJuKChuPU1hdGguZXhwKG4pKS0xL24pLzJ9ZnVuY3Rpb24gcnQobil7cmV0dXJuKChuPU1hdGguZXhwKG4pKSsxL24pLzJ9ZnVuY3Rpb24gdXQobil7cmV0dXJuKChuPU1hdGguZXhwKDIqbikpLTEpLyhuKzEpfWZ1bmN0aW9uIGl0KG4pe3JldHVybihuPU1hdGguc2luKG4vMikpKm59ZnVuY3Rpb24gb3QoKXt9ZnVuY3Rpb24gYXQobix0LGUpe3JldHVybiB0aGlzIGluc3RhbmNlb2YgYXQ/KHRoaXMuaD0rbix0aGlzLnM9K3Qsdm9pZCh0aGlzLmw9K2UpKTphcmd1bWVudHMubGVuZ3RoPDI/biBpbnN0YW5jZW9mIGF0P25ldyBhdChuLmgsbi5zLG4ubCk6YnQoIiIrbixfdCxhdCk6bmV3IGF0KG4sdCxlKX1mdW5jdGlvbiBjdChuLHQsZSl7ZnVuY3Rpb24gcihuKXtyZXR1cm4gbj4zNjA/bi09MzYwOjA+biYmKG4rPTM2MCksNjA+bj9pKyhvLWkpKm4vNjA6MTgwPm4/bzoyNDA+bj9pKyhvLWkpKigyNDAtbikvNjA6aX1mdW5jdGlvbiB1KG4pe3JldHVybiBNYXRoLnJvdW5kKDI1NSpyKG4pKX12YXIgaSxvO3JldHVybiBuPWlzTmFOKG4pPzA6KG4lPTM2MCk8MD9uKzM2MDpuLHQ9aXNOYU4odCk/MDowPnQ/MDp0PjE/MTp0LGU9MD5lPzA6ZT4xPzE6ZSxvPS41Pj1lP2UqKDErdCk6ZSt0LWUqdCxpPTIqZS1vLG5ldyBtdCh1KG4rMTIwKSx1KG4pLHUobi0xMjApKX1mdW5jdGlvbiBsdChuLHQsZSl7cmV0dXJuIHRoaXMgaW5zdGFuY2VvZiBsdD8odGhpcy5oPStuLHRoaXMuYz0rdCx2b2lkKHRoaXMubD0rZSkpOmFyZ3VtZW50cy5sZW5ndGg8Mj9uIGluc3RhbmNlb2YgbHQ/bmV3IGx0KG4uaCxuLmMsbi5sKTpuIGluc3RhbmNlb2YgZnQ/Z3Qobi5sLG4uYSxuLmIpOmd0KChuPXd0KChuPXRhLnJnYihuKSkucixuLmcsbi5iKSkubCxuLmEsbi5iKTpuZXcgbHQobix0LGUpfWZ1bmN0aW9uIHN0KG4sdCxlKXtyZXR1cm4gaXNOYU4obikmJihuPTApLGlzTmFOKHQpJiYodD0wKSxuZXcgZnQoZSxNYXRoLmNvcyhuKj1EYSkqdCxNYXRoLnNpbihuKSp0KX1mdW5jdGlvbiBmdChuLHQsZSl7cmV0dXJuIHRoaXMgaW5zdGFuY2VvZiBmdD8odGhpcy5sPStuLHRoaXMuYT0rdCx2b2lkKHRoaXMuYj0rZSkpOmFyZ3VtZW50cy5sZW5ndGg8Mj9uIGluc3RhbmNlb2YgZnQ/bmV3IGZ0KG4ubCxuLmEsbi5iKTpuIGluc3RhbmNlb2YgbHQ/c3Qobi5oLG4uYyxuLmwpOnd0KChuPW10KG4pKS5yLG4uZyxuLmIpOm5ldyBmdChuLHQsZSl9ZnVuY3Rpb24gaHQobix0LGUpe3ZhciByPShuKzE2KS8xMTYsdT1yK3QvNTAwLGk9ci1lLzIwMDtyZXR1cm4gdT1wdCh1KSpYYSxyPXB0KHIpKiRhLGk9cHQoaSkqQmEsbmV3IG10KGR0KDMuMjQwNDU0Mip1LTEuNTM3MTM4NSpyLS40OTg1MzE0KmkpLGR0KC0uOTY5MjY2KnUrMS44NzYwMTA4KnIrLjA0MTU1NippKSxkdCguMDU1NjQzNCp1LS4yMDQwMjU5KnIrMS4wNTcyMjUyKmkpKX1mdW5jdGlvbiBndChuLHQsZSl7cmV0dXJuIG4+MD9uZXcgbHQoTWF0aC5hdGFuMihlLHQpKlBhLE1hdGguc3FydCh0KnQrZSplKSxuKTpuZXcgbHQoMC8wLDAvMCxuKX1mdW5jdGlvbiBwdChuKXtyZXR1cm4gbj4uMjA2ODkzMDM0P24qbipuOihuLTQvMjkpLzcuNzg3MDM3fWZ1bmN0aW9uIHZ0KG4pe3JldHVybiBuPi4wMDg4NTY/TWF0aC5wb3cobiwxLzMpOjcuNzg3MDM3Km4rNC8yOX1mdW5jdGlvbiBkdChuKXtyZXR1cm4gTWF0aC5yb3VuZCgyNTUqKC4wMDMwND49bj8xMi45MipuOjEuMDU1Kk1hdGgucG93KG4sMS8yLjQpLS4wNTUpKX1mdW5jdGlvbiBtdChuLHQsZSl7cmV0dXJuIHRoaXMgaW5zdGFuY2VvZiBtdD8odGhpcy5yPX5+bix0aGlzLmc9fn50LHZvaWQodGhpcy5iPX5+ZSkpOmFyZ3VtZW50cy5sZW5ndGg8Mj9uIGluc3RhbmNlb2YgbXQ/bmV3IG10KG4ucixuLmcsbi5iKTpidCgiIituLG10LGN0KTpuZXcgbXQobix0LGUpfWZ1bmN0aW9uIHl0KG4pe3JldHVybiBuZXcgbXQobj4+MTYsbj4+OCYyNTUsMjU1Jm4pfWZ1bmN0aW9uIE10KG4pe3JldHVybiB5dChuKSsiIn1mdW5jdGlvbiB4dChuKXtyZXR1cm4gMTY+bj8iMCIrTWF0aC5tYXgoMCxuKS50b1N0cmluZygxNik6TWF0aC5taW4oMjU1LG4pLnRvU3RyaW5nKDE2KX1mdW5jdGlvbiBidChuLHQsZSl7dmFyIHIsdSxpLG89MCxhPTAsYz0wO2lmKHI9LyhbYS16XSspXCgoLiopXCkvaS5leGVjKG4pKXN3aXRjaCh1PXJbMl0uc3BsaXQoIiwiKSxyWzFdKXtjYXNlImhzbCI6cmV0dXJuIGUocGFyc2VGbG9hdCh1WzBdKSxwYXJzZUZsb2F0KHVbMV0pLzEwMCxwYXJzZUZsb2F0KHVbMl0pLzEwMCk7Y2FzZSJyZ2IiOnJldHVybiB0KGt0KHVbMF0pLGt0KHVbMV0pLGt0KHVbMl0pKX1yZXR1cm4oaT1HYS5nZXQobi50b0xvd2VyQ2FzZSgpKSk/dChpLnIsaS5nLGkuYik6KG51bGw9PW58fCIjIiE9PW4uY2hhckF0KDApfHxpc05hTihpPXBhcnNlSW50KG4uc2xpY2UoMSksMTYpKXx8KDQ9PT1uLmxlbmd0aD8obz0oMzg0MCZpKT4+NCxvPW8+PjR8byxhPTI0MCZpLGE9YT4+NHxhLGM9MTUmaSxjPWM8PDR8Yyk6Nz09PW4ubGVuZ3RoJiYobz0oMTY3MTE2ODAmaSk+PjE2LGE9KDY1MjgwJmkpPj44LGM9MjU1JmkpKSx0KG8sYSxjKSl9ZnVuY3Rpb24gX3Qobix0LGUpe3ZhciByLHUsaT1NYXRoLm1pbihuLz0yNTUsdC89MjU1LGUvPTI1NSksbz1NYXRoLm1heChuLHQsZSksYT1vLWksYz0obytpKS8yO3JldHVybiBhPyh1PS41PmM/YS8obytpKTphLygyLW8taSkscj1uPT1vPyh0LWUpL2ErKGU+dD82OjApOnQ9PW8/KGUtbikvYSsyOihuLXQpL2ErNCxyKj02MCk6KHI9MC8wLHU9Yz4wJiYxPmM/MDpyKSxuZXcgYXQocix1LGMpfWZ1bmN0aW9uIHd0KG4sdCxlKXtuPVN0KG4pLHQ9U3QodCksZT1TdChlKTt2YXIgcj12dCgoLjQxMjQ1NjQqbisuMzU3NTc2MSp0Ky4xODA0Mzc1KmUpL1hhKSx1PXZ0KCguMjEyNjcyOSpuKy43MTUxNTIyKnQrLjA3MjE3NSplKS8kYSksaT12dCgoLjAxOTMzMzkqbisuMTE5MTkyKnQrLjk1MDMwNDEqZSkvQmEpO3JldHVybiBmdCgxMTYqdS0xNiw1MDAqKHItdSksMjAwKih1LWkpKX1mdW5jdGlvbiBTdChuKXtyZXR1cm4obi89MjU1KTw9LjA0MDQ1P24vMTIuOTI6TWF0aC5wb3coKG4rLjA1NSkvMS4wNTUsMi40KX1mdW5jdGlvbiBrdChuKXt2YXIgdD1wYXJzZUZsb2F0KG4pO3JldHVybiIlIj09PW4uY2hhckF0KG4ubGVuZ3RoLTEpP01hdGgucm91bmQoMi41NSp0KTp0fWZ1bmN0aW9uIEV0KG4pe3JldHVybiJmdW5jdGlvbiI9PXR5cGVvZiBuP246ZnVuY3Rpb24oKXtyZXR1cm4gbn19ZnVuY3Rpb24gQXQobil7cmV0dXJuIGZ1bmN0aW9uKHQsZSxyKXtyZXR1cm4gMj09PWFyZ3VtZW50cy5sZW5ndGgmJiJmdW5jdGlvbiI9PXR5cGVvZiBlJiYocj1lLGU9bnVsbCksTnQodCxlLG4scil9fWZ1bmN0aW9uIE50KG4sdCxlLHIpe2Z1bmN0aW9uIHUoKXt2YXIgbix0PWMuc3RhdHVzO2lmKCF0JiZ6dChjKXx8dD49MjAwJiYzMDA+dHx8MzA0PT09dCl7dHJ5e249ZS5jYWxsKGksYyl9Y2F0Y2gocil7cmV0dXJuIHZvaWQgby5lcnJvci5jYWxsKGkscil9by5sb2FkLmNhbGwoaSxuKX1lbHNlIG8uZXJyb3IuY2FsbChpLGMpfXZhciBpPXt9LG89dGEuZGlzcGF0Y2goImJlZm9yZXNlbmQiLCJwcm9ncmVzcyIsImxvYWQiLCJlcnJvciIpLGE9e30sYz1uZXcgWE1MSHR0cFJlcXVlc3QsbD1udWxsO3JldHVybiF0aGlzLlhEb21haW5SZXF1ZXN0fHwid2l0aENyZWRlbnRpYWxzImluIGN8fCEvXihodHRwKHMpPzopP1wvXC8vLnRlc3Qobil8fChjPW5ldyBYRG9tYWluUmVxdWVzdCksIm9ubG9hZCJpbiBjP2Mub25sb2FkPWMub25lcnJvcj11OmMub25yZWFkeXN0YXRlY2hhbmdlPWZ1bmN0aW9uKCl7Yy5yZWFkeVN0YXRlPjMmJnUoKX0sYy5vbnByb2dyZXNzPWZ1bmN0aW9uKG4pe3ZhciB0PXRhLmV2ZW50O3RhLmV2ZW50PW47dHJ5e28ucHJvZ3Jlc3MuY2FsbChpLGMpfWZpbmFsbHl7dGEuZXZlbnQ9dH19LGkuaGVhZGVyPWZ1bmN0aW9uKG4sdCl7cmV0dXJuIG49KG4rIiIpLnRvTG93ZXJDYXNlKCksYXJndW1lbnRzLmxlbmd0aDwyP2Fbbl06KG51bGw9PXQ/ZGVsZXRlIGFbbl06YVtuXT10KyIiLGkpfSxpLm1pbWVUeXBlPWZ1bmN0aW9uKG4pe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh0PW51bGw9PW4/bnVsbDpuKyIiLGkpOnR9LGkucmVzcG9uc2VUeXBlPWZ1bmN0aW9uKG4pe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhsPW4saSk6bH0saS5yZXNwb25zZT1mdW5jdGlvbihuKXtyZXR1cm4gZT1uLGl9LFsiZ2V0IiwicG9zdCJdLmZvckVhY2goZnVuY3Rpb24obil7aVtuXT1mdW5jdGlvbigpe3JldHVybiBpLnNlbmQuYXBwbHkoaSxbbl0uY29uY2F0KHJhKGFyZ3VtZW50cykpKX19KSxpLnNlbmQ9ZnVuY3Rpb24oZSxyLHUpe2lmKDI9PT1hcmd1bWVudHMubGVuZ3RoJiYiZnVuY3Rpb24iPT10eXBlb2YgciYmKHU9cixyPW51bGwpLGMub3BlbihlLG4sITApLG51bGw9PXR8fCJhY2NlcHQiaW4gYXx8KGEuYWNjZXB0PXQrIiwqLyoiKSxjLnNldFJlcXVlc3RIZWFkZXIpZm9yKHZhciBzIGluIGEpYy5zZXRSZXF1ZXN0SGVhZGVyKHMsYVtzXSk7cmV0dXJuIG51bGwhPXQmJmMub3ZlcnJpZGVNaW1lVHlwZSYmYy5vdmVycmlkZU1pbWVUeXBlKHQpLG51bGwhPWwmJihjLnJlc3BvbnNlVHlwZT1sKSxudWxsIT11JiZpLm9uKCJlcnJvciIsdSkub24oImxvYWQiLGZ1bmN0aW9uKG4pe3UobnVsbCxuKX0pLG8uYmVmb3Jlc2VuZC5jYWxsKGksYyksYy5zZW5kKG51bGw9PXI/bnVsbDpyKSxpfSxpLmFib3J0PWZ1bmN0aW9uKCl7cmV0dXJuIGMuYWJvcnQoKSxpfSx0YS5yZWJpbmQoaSxvLCJvbiIpLG51bGw9PXI/aTppLmdldChDdChyKSl9ZnVuY3Rpb24gQ3Qobil7cmV0dXJuIDE9PT1uLmxlbmd0aD9mdW5jdGlvbih0LGUpe24obnVsbD09dD9lOm51bGwpfTpufWZ1bmN0aW9uIHp0KG4pe3ZhciB0PW4ucmVzcG9uc2VUeXBlO3JldHVybiB0JiYidGV4dCIhPT10P24ucmVzcG9uc2U6bi5yZXNwb25zZVRleHR9ZnVuY3Rpb24gcXQoKXt2YXIgbj1MdCgpLHQ9VHQoKS1uO3Q+MjQ/KGlzRmluaXRlKHQpJiYoY2xlYXJUaW1lb3V0KHRjKSx0Yz1zZXRUaW1lb3V0KHF0LHQpKSxuYz0wKToobmM9MSxyYyhxdCkpfWZ1bmN0aW9uIEx0KCl7dmFyIG49RGF0ZS5ub3coKTtmb3IoZWM9S2E7ZWM7KW4+PWVjLnQmJihlYy5mPWVjLmMobi1lYy50KSksZWM9ZWMubjtyZXR1cm4gbn1mdW5jdGlvbiBUdCgpe2Zvcih2YXIgbix0PUthLGU9MS8wO3Q7KXQuZj90PW4/bi5uPXQubjpLYT10Lm46KHQudDxlJiYoZT10LnQpLHQ9KG49dCkubik7cmV0dXJuIFFhPW4sZX1mdW5jdGlvbiBSdChuLHQpe3JldHVybiB0LShuP01hdGguY2VpbChNYXRoLmxvZyhuKS9NYXRoLkxOMTApOjEpfWZ1bmN0aW9uIER0KG4sdCl7dmFyIGU9TWF0aC5wb3coMTAsMypnYSg4LXQpKTtyZXR1cm57c2NhbGU6dD44P2Z1bmN0aW9uKG4pe3JldHVybiBuL2V9OmZ1bmN0aW9uKG4pe3JldHVybiBuKmV9LHN5bWJvbDpufX1mdW5jdGlvbiBQdChuKXt2YXIgdD1uLmRlY2ltYWwsZT1uLnRob3VzYW5kcyxyPW4uZ3JvdXBpbmcsdT1uLmN1cnJlbmN5LGk9ciYmZT9mdW5jdGlvbihuLHQpe2Zvcih2YXIgdT1uLmxlbmd0aCxpPVtdLG89MCxhPXJbMF0sYz0wO3U+MCYmYT4wJiYoYythKzE+dCYmKGE9TWF0aC5tYXgoMSx0LWMpKSxpLnB1c2gobi5zdWJzdHJpbmcodS09YSx1K2EpKSwhKChjKz1hKzEpPnQpKTspYT1yW289KG8rMSklci5sZW5ndGhdO3JldHVybiBpLnJldmVyc2UoKS5qb2luKGUpfTp5O3JldHVybiBmdW5jdGlvbihuKXt2YXIgZT1pYy5leGVjKG4pLHI9ZVsxXXx8IiAiLG89ZVsyXXx8Ij4iLGE9ZVszXXx8Ii0iLGM9ZVs0XXx8IiIsbD1lWzVdLHM9K2VbNl0sZj1lWzddLGg9ZVs4XSxnPWVbOV0scD0xLHY9IiIsZD0iIixtPSExLHk9ITA7c3dpdGNoKGgmJihoPStoLnN1YnN0cmluZygxKSksKGx8fCIwIj09PXImJiI9Ij09PW8pJiYobD1yPSIwIixvPSI9IiksZyl7Y2FzZSJuIjpmPSEwLGc9ImciO2JyZWFrO2Nhc2UiJSI6cD0xMDAsZD0iJSIsZz0iZiI7YnJlYWs7Y2FzZSJwIjpwPTEwMCxkPSIlIixnPSJyIjticmVhaztjYXNlImIiOmNhc2UibyI6Y2FzZSJ4IjpjYXNlIlgiOiIjIj09PWMmJih2PSIwIitnLnRvTG93ZXJDYXNlKCkpO2Nhc2UiYyI6eT0hMTtjYXNlImQiOm09ITAsaD0wO2JyZWFrO2Nhc2UicyI6cD0tMSxnPSJyIn0iJCI9PT1jJiYodj11WzBdLGQ9dVsxXSksInIiIT1nfHxofHwoZz0iZyIpLG51bGwhPWgmJigiZyI9PWc/aD1NYXRoLm1heCgxLE1hdGgubWluKDIxLGgpKTooImUiPT1nfHwiZiI9PWcpJiYoaD1NYXRoLm1heCgwLE1hdGgubWluKDIwLGgpKSkpLGc9b2MuZ2V0KGcpfHxVdDt2YXIgTT1sJiZmO3JldHVybiBmdW5jdGlvbihuKXt2YXIgZT1kO2lmKG0mJm4lMSlyZXR1cm4iIjt2YXIgdT0wPm58fDA9PT1uJiYwPjEvbj8obj0tbiwiLSIpOiItIj09PWE/IiI6YTtpZigwPnApe3ZhciBjPXRhLmZvcm1hdFByZWZpeChuLGgpO249Yy5zY2FsZShuKSxlPWMuc3ltYm9sK2R9ZWxzZSBuKj1wO249ZyhuLGgpO3ZhciB4LGIsXz1uLmxhc3RJbmRleE9mKCIuIik7aWYoMD5fKXt2YXIgdz15P24ubGFzdEluZGV4T2YoImUiKTotMTswPnc/KHg9bixiPSIiKTooeD1uLnN1YnN0cmluZygwLHcpLGI9bi5zdWJzdHJpbmcodykpfWVsc2UgeD1uLnN1YnN0cmluZygwLF8pLGI9dCtuLnN1YnN0cmluZyhfKzEpOyFsJiZmJiYoeD1pKHgsMS8wKSk7dmFyIFM9di5sZW5ndGgreC5sZW5ndGgrYi5sZW5ndGgrKE0/MDp1Lmxlbmd0aCksaz1zPlM/bmV3IEFycmF5KFM9cy1TKzEpLmpvaW4ocik6IiI7cmV0dXJuIE0mJih4PWkoayt4LGsubGVuZ3RoP3MtYi5sZW5ndGg6MS8wKSksdSs9dixuPXgrYiwoIjwiPT09bz91K24razoiPiI9PT1vP2srdStuOiJeIj09PW8/ay5zdWJzdHJpbmcoMCxTPj49MSkrdStuK2suc3Vic3RyaW5nKFMpOnUrKE0/bjprK24pKStlfX19ZnVuY3Rpb24gVXQobil7cmV0dXJuIG4rIiJ9ZnVuY3Rpb24ganQoKXt0aGlzLl89bmV3IERhdGUoYXJndW1lbnRzLmxlbmd0aD4xP0RhdGUuVVRDLmFwcGx5KHRoaXMsYXJndW1lbnRzKTphcmd1bWVudHNbMF0pfWZ1bmN0aW9uIEZ0KG4sdCxlKXtmdW5jdGlvbiByKHQpe3ZhciBlPW4odCkscj1pKGUsMSk7cmV0dXJuIHItdD50LWU/ZTpyfWZ1bmN0aW9uIHUoZSl7cmV0dXJuIHQoZT1uKG5ldyBjYyhlLTEpKSwxKSxlfWZ1bmN0aW9uIGkobixlKXtyZXR1cm4gdChuPW5ldyBjYygrbiksZSksbn1mdW5jdGlvbiBvKG4scixpKXt2YXIgbz11KG4pLGE9W107aWYoaT4xKWZvcig7cj5vOyllKG8pJWl8fGEucHVzaChuZXcgRGF0ZSgrbykpLHQobywxKTtlbHNlIGZvcig7cj5vOylhLnB1c2gobmV3IERhdGUoK28pKSx0KG8sMSk7cmV0dXJuIGF9ZnVuY3Rpb24gYShuLHQsZSl7dHJ5e2NjPWp0O3ZhciByPW5ldyBqdDtyZXR1cm4gci5fPW4sbyhyLHQsZSl9ZmluYWxseXtjYz1EYXRlfX1uLmZsb29yPW4sbi5yb3VuZD1yLG4uY2VpbD11LG4ub2Zmc2V0PWksbi5yYW5nZT1vO3ZhciBjPW4udXRjPUh0KG4pO3JldHVybiBjLmZsb29yPWMsYy5yb3VuZD1IdChyKSxjLmNlaWw9SHQodSksYy5vZmZzZXQ9SHQoaSksYy5yYW5nZT1hLG59ZnVuY3Rpb24gSHQobil7cmV0dXJuIGZ1bmN0aW9uKHQsZSl7dHJ5e2NjPWp0O3ZhciByPW5ldyBqdDtyZXR1cm4gci5fPXQsbihyLGUpLl99ZmluYWxseXtjYz1EYXRlfX19ZnVuY3Rpb24gT3Qobil7ZnVuY3Rpb24gdChuKXtmdW5jdGlvbiB0KHQpe2Zvcih2YXIgZSx1LGksbz1bXSxhPS0xLGM9MDsrK2E8cjspMzc9PT1uLmNoYXJDb2RlQXQoYSkmJihvLnB1c2gobi5zbGljZShjLGEpKSxudWxsIT0odT1zY1tlPW4uY2hhckF0KCsrYSldKSYmKGU9bi5jaGFyQXQoKythKSksKGk9TltlXSkmJihlPWkodCxudWxsPT11PyJlIj09PWU/IiAiOiIwIjp1KSksby5wdXNoKGUpLGM9YSsxKTtyZXR1cm4gby5wdXNoKG4uc2xpY2UoYyxhKSksby5qb2luKCIiKX12YXIgcj1uLmxlbmd0aDtyZXR1cm4gdC5wYXJzZT1mdW5jdGlvbih0KXt2YXIgcj17eToxOTAwLG06MCxkOjEsSDowLE06MCxTOjAsTDowLFo6bnVsbH0sdT1lKHIsbix0LDApO2lmKHUhPXQubGVuZ3RoKXJldHVybiBudWxsOyJwImluIHImJihyLkg9ci5IJTEyKzEyKnIucCk7dmFyIGk9bnVsbCE9ci5aJiZjYyE9PWp0LG89bmV3KGk/anQ6Y2MpO3JldHVybiJqImluIHI/by5zZXRGdWxsWWVhcihyLnksMCxyLmopOiJ3ImluIHImJigiVyJpbiByfHwiVSJpbiByKT8oby5zZXRGdWxsWWVhcihyLnksMCwxKSxvLnNldEZ1bGxZZWFyKHIueSwwLCJXImluIHI/KHIudys2KSU3Kzcqci5XLShvLmdldERheSgpKzUpJTc6ci53Kzcqci5VLShvLmdldERheSgpKzYpJTcpKTpvLnNldEZ1bGxZZWFyKHIueSxyLm0sci5kKSxvLnNldEhvdXJzKHIuSCsoci5aLzEwMHwwKSxyLk0rci5aJTEwMCxyLlMsci5MKSxpP28uXzpvfSx0LnRvU3RyaW5nPWZ1bmN0aW9uKCl7cmV0dXJuIG59LHR9ZnVuY3Rpb24gZShuLHQsZSxyKXtmb3IodmFyIHUsaSxvLGE9MCxjPXQubGVuZ3RoLGw9ZS5sZW5ndGg7Yz5hOyl7aWYocj49bClyZXR1cm4tMTtpZih1PXQuY2hhckNvZGVBdChhKyspLDM3PT09dSl7aWYobz10LmNoYXJBdChhKyspLGk9Q1tvIGluIHNjP3QuY2hhckF0KGErKyk6b10sIWl8fChyPWkobixlLHIpKTwwKXJldHVybi0xfWVsc2UgaWYodSE9ZS5jaGFyQ29kZUF0KHIrKykpcmV0dXJuLTF9cmV0dXJuIHJ9ZnVuY3Rpb24gcihuLHQsZSl7Xy5sYXN0SW5kZXg9MDt2YXIgcj1fLmV4ZWModC5zbGljZShlKSk7cmV0dXJuIHI/KG4udz13LmdldChyWzBdLnRvTG93ZXJDYXNlKCkpLGUrclswXS5sZW5ndGgpOi0xfWZ1bmN0aW9uIHUobix0LGUpe3gubGFzdEluZGV4PTA7dmFyIHI9eC5leGVjKHQuc2xpY2UoZSkpO3JldHVybiByPyhuLnc9Yi5nZXQoclswXS50b0xvd2VyQ2FzZSgpKSxlK3JbMF0ubGVuZ3RoKTotMX1mdW5jdGlvbiBpKG4sdCxlKXtFLmxhc3RJbmRleD0wO3ZhciByPUUuZXhlYyh0LnNsaWNlKGUpKTtyZXR1cm4gcj8obi5tPUEuZ2V0KHJbMF0udG9Mb3dlckNhc2UoKSksZStyWzBdLmxlbmd0aCk6LTF9ZnVuY3Rpb24gbyhuLHQsZSl7Uy5sYXN0SW5kZXg9MDt2YXIgcj1TLmV4ZWModC5zbGljZShlKSk7cmV0dXJuIHI/KG4ubT1rLmdldChyWzBdLnRvTG93ZXJDYXNlKCkpLGUrclswXS5sZW5ndGgpOi0xfWZ1bmN0aW9uIGEobix0LHIpe3JldHVybiBlKG4sTi5jLnRvU3RyaW5nKCksdCxyKX1mdW5jdGlvbiBjKG4sdCxyKXtyZXR1cm4gZShuLE4ueC50b1N0cmluZygpLHQscil9ZnVuY3Rpb24gbChuLHQscil7cmV0dXJuIGUobixOLlgudG9TdHJpbmcoKSx0LHIpfWZ1bmN0aW9uIHMobix0LGUpe3ZhciByPU0uZ2V0KHQuc2xpY2UoZSxlKz0yKS50b0xvd2VyQ2FzZSgpKTtyZXR1cm4gbnVsbD09cj8tMToobi5wPXIsZSl9dmFyIGY9bi5kYXRlVGltZSxoPW4uZGF0ZSxnPW4udGltZSxwPW4ucGVyaW9kcyx2PW4uZGF5cyxkPW4uc2hvcnREYXlzLG09bi5tb250aHMseT1uLnNob3J0TW9udGhzO3QudXRjPWZ1bmN0aW9uKG4pe2Z1bmN0aW9uIGUobil7dHJ5e2NjPWp0O3ZhciB0PW5ldyBjYztyZXR1cm4gdC5fPW4scih0KX1maW5hbGx5e2NjPURhdGV9fXZhciByPXQobik7cmV0dXJuIGUucGFyc2U9ZnVuY3Rpb24obil7dHJ5e2NjPWp0O3ZhciB0PXIucGFyc2Uobik7cmV0dXJuIHQmJnQuX31maW5hbGx5e2NjPURhdGV9fSxlLnRvU3RyaW5nPXIudG9TdHJpbmcsZX0sdC5tdWx0aT10LnV0Yy5tdWx0aT1hZTt2YXIgTT10YS5tYXAoKSx4PVl0KHYpLGI9WnQodiksXz1ZdChkKSx3PVp0KGQpLFM9WXQobSksaz1adChtKSxFPVl0KHkpLEE9WnQoeSk7cC5mb3JFYWNoKGZ1bmN0aW9uKG4sdCl7TS5zZXQobi50b0xvd2VyQ2FzZSgpLHQpfSk7dmFyIE49e2E6ZnVuY3Rpb24obil7cmV0dXJuIGRbbi5nZXREYXkoKV19LEE6ZnVuY3Rpb24obil7cmV0dXJuIHZbbi5nZXREYXkoKV19LGI6ZnVuY3Rpb24obil7cmV0dXJuIHlbbi5nZXRNb250aCgpXX0sQjpmdW5jdGlvbihuKXtyZXR1cm4gbVtuLmdldE1vbnRoKCldfSxjOnQoZiksZDpmdW5jdGlvbihuLHQpe3JldHVybiBJdChuLmdldERhdGUoKSx0LDIpfSxlOmZ1bmN0aW9uKG4sdCl7cmV0dXJuIEl0KG4uZ2V0RGF0ZSgpLHQsMil9LEg6ZnVuY3Rpb24obix0KXtyZXR1cm4gSXQobi5nZXRIb3VycygpLHQsMil9LEk6ZnVuY3Rpb24obix0KXtyZXR1cm4gSXQobi5nZXRIb3VycygpJTEyfHwxMix0LDIpfSxqOmZ1bmN0aW9uKG4sdCl7cmV0dXJuIEl0KDErYWMuZGF5T2ZZZWFyKG4pLHQsMyl9LEw6ZnVuY3Rpb24obix0KXtyZXR1cm4gSXQobi5nZXRNaWxsaXNlY29uZHMoKSx0LDMpfSxtOmZ1bmN0aW9uKG4sdCl7cmV0dXJuIEl0KG4uZ2V0TW9udGgoKSsxLHQsMil9LE06ZnVuY3Rpb24obix0KXtyZXR1cm4gSXQobi5nZXRNaW51dGVzKCksdCwyKX0scDpmdW5jdGlvbihuKXtyZXR1cm4gcFsrKG4uZ2V0SG91cnMoKT49MTIpXX0sUzpmdW5jdGlvbihuLHQpe3JldHVybiBJdChuLmdldFNlY29uZHMoKSx0LDIpfSxVOmZ1bmN0aW9uKG4sdCl7cmV0dXJuIEl0KGFjLnN1bmRheU9mWWVhcihuKSx0LDIpfSx3OmZ1bmN0aW9uKG4pe3JldHVybiBuLmdldERheSgpfSxXOmZ1bmN0aW9uKG4sdCl7cmV0dXJuIEl0KGFjLm1vbmRheU9mWWVhcihuKSx0LDIpfSx4OnQoaCksWDp0KGcpLHk6ZnVuY3Rpb24obix0KXtyZXR1cm4gSXQobi5nZXRGdWxsWWVhcigpJTEwMCx0LDIpfSxZOmZ1bmN0aW9uKG4sdCl7cmV0dXJuIEl0KG4uZ2V0RnVsbFllYXIoKSUxZTQsdCw0KX0sWjppZSwiJSI6ZnVuY3Rpb24oKXtyZXR1cm4iJSJ9fSxDPXthOnIsQTp1LGI6aSxCOm8sYzphLGQ6UXQsZTpRdCxIOnRlLEk6dGUsajpuZSxMOnVlLG06S3QsTTplZSxwOnMsUzpyZSxVOlh0LHc6VnQsVzokdCx4OmMsWDpsLHk6V3QsWTpCdCxaOkp0LCIlIjpvZX07cmV0dXJuIHR9ZnVuY3Rpb24gSXQobix0LGUpe3ZhciByPTA+bj8iLSI6IiIsdT0ocj8tbjpuKSsiIixpPXUubGVuZ3RoO3JldHVybiByKyhlPmk/bmV3IEFycmF5KGUtaSsxKS5qb2luKHQpK3U6dSl9ZnVuY3Rpb24gWXQobil7cmV0dXJuIG5ldyBSZWdFeHAoIl4oPzoiK24ubWFwKHRhLnJlcXVvdGUpLmpvaW4oInwiKSsiKSIsImkiKX1mdW5jdGlvbiBadChuKXtmb3IodmFyIHQ9bmV3IGwsZT0tMSxyPW4ubGVuZ3RoOysrZTxyOyl0LnNldChuW2VdLnRvTG93ZXJDYXNlKCksZSk7cmV0dXJuIHR9ZnVuY3Rpb24gVnQobix0LGUpe2ZjLmxhc3RJbmRleD0wO3ZhciByPWZjLmV4ZWModC5zbGljZShlLGUrMSkpO3JldHVybiByPyhuLnc9K3JbMF0sZStyWzBdLmxlbmd0aCk6LTF9ZnVuY3Rpb24gWHQobix0LGUpe2ZjLmxhc3RJbmRleD0wO3ZhciByPWZjLmV4ZWModC5zbGljZShlKSk7cmV0dXJuIHI/KG4uVT0rclswXSxlK3JbMF0ubGVuZ3RoKTotMX1mdW5jdGlvbiAkdChuLHQsZSl7ZmMubGFzdEluZGV4PTA7dmFyIHI9ZmMuZXhlYyh0LnNsaWNlKGUpKTtyZXR1cm4gcj8obi5XPStyWzBdLGUrclswXS5sZW5ndGgpOi0xfWZ1bmN0aW9uIEJ0KG4sdCxlKXtmYy5sYXN0SW5kZXg9MDt2YXIgcj1mYy5leGVjKHQuc2xpY2UoZSxlKzQpKTtyZXR1cm4gcj8obi55PStyWzBdLGUrclswXS5sZW5ndGgpOi0xfWZ1bmN0aW9uIFd0KG4sdCxlKXtmYy5sYXN0SW5kZXg9MDt2YXIgcj1mYy5leGVjKHQuc2xpY2UoZSxlKzIpKTtyZXR1cm4gcj8obi55PUd0KCtyWzBdKSxlK3JbMF0ubGVuZ3RoKTotMX1mdW5jdGlvbiBKdChuLHQsZSl7cmV0dXJuL15bKy1dXGR7NH0kLy50ZXN0KHQ9dC5zbGljZShlLGUrNSkpPyhuLlo9LXQsZSs1KTotMX1mdW5jdGlvbiBHdChuKXtyZXR1cm4gbisobj42OD8xOTAwOjJlMyl9ZnVuY3Rpb24gS3Qobix0LGUpe2ZjLmxhc3RJbmRleD0wO3ZhciByPWZjLmV4ZWModC5zbGljZShlLGUrMikpO3JldHVybiByPyhuLm09clswXS0xLGUrclswXS5sZW5ndGgpOi0xfWZ1bmN0aW9uIFF0KG4sdCxlKXtmYy5sYXN0SW5kZXg9MDt2YXIgcj1mYy5leGVjKHQuc2xpY2UoZSxlKzIpKTtyZXR1cm4gcj8obi5kPStyWzBdLGUrclswXS5sZW5ndGgpOi0xfWZ1bmN0aW9uIG5lKG4sdCxlKXtmYy5sYXN0SW5kZXg9MDt2YXIgcj1mYy5leGVjKHQuc2xpY2UoZSxlKzMpKTtyZXR1cm4gcj8obi5qPStyWzBdLGUrclswXS5sZW5ndGgpOi0xfWZ1bmN0aW9uIHRlKG4sdCxlKXtmYy5sYXN0SW5kZXg9MDt2YXIgcj1mYy5leGVjKHQuc2xpY2UoZSxlKzIpKTtyZXR1cm4gcj8obi5IPStyWzBdLGUrclswXS5sZW5ndGgpOi0xfWZ1bmN0aW9uIGVlKG4sdCxlKXtmYy5sYXN0SW5kZXg9MDt2YXIgcj1mYy5leGVjKHQuc2xpY2UoZSxlKzIpKTtyZXR1cm4gcj8obi5NPStyWzBdLGUrclswXS5sZW5ndGgpOi0xfWZ1bmN0aW9uIHJlKG4sdCxlKXtmYy5sYXN0SW5kZXg9MDt2YXIgcj1mYy5leGVjKHQuc2xpY2UoZSxlKzIpKTtyZXR1cm4gcj8obi5TPStyWzBdLGUrclswXS5sZW5ndGgpOi0xfWZ1bmN0aW9uIHVlKG4sdCxlKXtmYy5sYXN0SW5kZXg9MDt2YXIgcj1mYy5leGVjKHQuc2xpY2UoZSxlKzMpKTtyZXR1cm4gcj8obi5MPStyWzBdLGUrclswXS5sZW5ndGgpOi0xfWZ1bmN0aW9uIGllKG4pe3ZhciB0PW4uZ2V0VGltZXpvbmVPZmZzZXQoKSxlPXQ+MD8iLSI6IisiLHI9Z2EodCkvNjB8MCx1PWdhKHQpJTYwO3JldHVybiBlK0l0KHIsIjAiLDIpK0l0KHUsIjAiLDIpfWZ1bmN0aW9uIG9lKG4sdCxlKXtoYy5sYXN0SW5kZXg9MDt2YXIgcj1oYy5leGVjKHQuc2xpY2UoZSxlKzEpKTtyZXR1cm4gcj9lK3JbMF0ubGVuZ3RoOi0xfWZ1bmN0aW9uIGFlKG4pe2Zvcih2YXIgdD1uLmxlbmd0aCxlPS0xOysrZTx0OyluW2VdWzBdPXRoaXMobltlXVswXSk7cmV0dXJuIGZ1bmN0aW9uKHQpe2Zvcih2YXIgZT0wLHI9bltlXTshclsxXSh0KTspcj1uWysrZV07cmV0dXJuIHJbMF0odCl9fWZ1bmN0aW9uIGNlKCl7fWZ1bmN0aW9uIGxlKG4sdCxlKXt2YXIgcj1lLnM9bit0LHU9ci1uLGk9ci11O2UudD1uLWkrKHQtdSl9ZnVuY3Rpb24gc2Uobix0KXtuJiZkYy5oYXNPd25Qcm9wZXJ0eShuLnR5cGUpJiZkY1tuLnR5cGVdKG4sdCl9ZnVuY3Rpb24gZmUobix0LGUpe3ZhciByLHU9LTEsaT1uLmxlbmd0aC1lO2Zvcih0LmxpbmVTdGFydCgpOysrdTxpOylyPW5bdV0sdC5wb2ludChyWzBdLHJbMV0sclsyXSk7dC5saW5lRW5kKCl9ZnVuY3Rpb24gaGUobix0KXt2YXIgZT0tMSxyPW4ubGVuZ3RoO2Zvcih0LnBvbHlnb25TdGFydCgpOysrZTxyOylmZShuW2VdLHQsMSk7dC5wb2x5Z29uRW5kKCl9ZnVuY3Rpb24gZ2UoKXtmdW5jdGlvbiBuKG4sdCl7bio9RGEsdD10KkRhLzIrcWEvNDt2YXIgZT1uLXIsbz1lPj0wPzE6LTEsYT1vKmUsYz1NYXRoLmNvcyh0KSxsPU1hdGguc2luKHQpLHM9aSpsLGY9dSpjK3MqTWF0aC5jb3MoYSksaD1zKm8qTWF0aC5zaW4oYSk7eWMuYWRkKE1hdGguYXRhbjIoaCxmKSkscj1uLHU9YyxpPWx9dmFyIHQsZSxyLHUsaTtNYy5wb2ludD1mdW5jdGlvbihvLGEpe01jLnBvaW50PW4scj0odD1vKSpEYSx1PU1hdGguY29zKGE9KGU9YSkqRGEvMitxYS80KSxpPU1hdGguc2luKGEpfSxNYy5saW5lRW5kPWZ1bmN0aW9uKCl7bih0LGUpfX1mdW5jdGlvbiBwZShuKXt2YXIgdD1uWzBdLGU9blsxXSxyPU1hdGguY29zKGUpO3JldHVybltyKk1hdGguY29zKHQpLHIqTWF0aC5zaW4odCksTWF0aC5zaW4oZSldfWZ1bmN0aW9uIHZlKG4sdCl7cmV0dXJuIG5bMF0qdFswXStuWzFdKnRbMV0rblsyXSp0WzJdfWZ1bmN0aW9uIGRlKG4sdCl7cmV0dXJuW25bMV0qdFsyXS1uWzJdKnRbMV0sblsyXSp0WzBdLW5bMF0qdFsyXSxuWzBdKnRbMV0tblsxXSp0WzBdXX1mdW5jdGlvbiBtZShuLHQpe25bMF0rPXRbMF0sblsxXSs9dFsxXSxuWzJdKz10WzJdfWZ1bmN0aW9uIHllKG4sdCl7cmV0dXJuW25bMF0qdCxuWzFdKnQsblsyXSp0XX1mdW5jdGlvbiBNZShuKXt2YXIgdD1NYXRoLnNxcnQoblswXSpuWzBdK25bMV0qblsxXStuWzJdKm5bMl0pO25bMF0vPXQsblsxXS89dCxuWzJdLz10fWZ1bmN0aW9uIHhlKG4pe3JldHVybltNYXRoLmF0YW4yKG5bMV0sblswXSksdHQoblsyXSldfWZ1bmN0aW9uIGJlKG4sdCl7cmV0dXJuIGdhKG5bMF0tdFswXSk8Q2EmJmdhKG5bMV0tdFsxXSk8Q2F9ZnVuY3Rpb24gX2Uobix0KXtuKj1EYTt2YXIgZT1NYXRoLmNvcyh0Kj1EYSk7d2UoZSpNYXRoLmNvcyhuKSxlKk1hdGguc2luKG4pLE1hdGguc2luKHQpKX1mdW5jdGlvbiB3ZShuLHQsZSl7Kyt4YyxfYys9KG4tX2MpL3hjLHdjKz0odC13YykveGMsU2MrPShlLVNjKS94Y31mdW5jdGlvbiBTZSgpe2Z1bmN0aW9uIG4obix1KXtuKj1EYTt2YXIgaT1NYXRoLmNvcyh1Kj1EYSksbz1pKk1hdGguY29zKG4pLGE9aSpNYXRoLnNpbihuKSxjPU1hdGguc2luKHUpLGw9TWF0aC5hdGFuMihNYXRoLnNxcnQoKGw9ZSpjLXIqYSkqbCsobD1yKm8tdCpjKSpsKyhsPXQqYS1lKm8pKmwpLHQqbytlKmErcipjKTtiYys9bCxrYys9bCoodCsodD1vKSksRWMrPWwqKGUrKGU9YSkpLEFjKz1sKihyKyhyPWMpKSx3ZSh0LGUscil9dmFyIHQsZSxyO3FjLnBvaW50PWZ1bmN0aW9uKHUsaSl7dSo9RGE7dmFyIG89TWF0aC5jb3MoaSo9RGEpO3Q9bypNYXRoLmNvcyh1KSxlPW8qTWF0aC5zaW4odSkscj1NYXRoLnNpbihpKSxxYy5wb2ludD1uLHdlKHQsZSxyKX19ZnVuY3Rpb24ga2UoKXtxYy5wb2ludD1fZX1mdW5jdGlvbiBFZSgpe2Z1bmN0aW9uIG4obix0KXtuKj1EYTt2YXIgZT1NYXRoLmNvcyh0Kj1EYSksbz1lKk1hdGguY29zKG4pLGE9ZSpNYXRoLnNpbihuKSxjPU1hdGguc2luKHQpLGw9dSpjLWkqYSxzPWkqby1yKmMsZj1yKmEtdSpvLGg9TWF0aC5zcXJ0KGwqbCtzKnMrZipmKSxnPXIqbyt1KmEraSpjLHA9aCYmLW50KGcpL2gsdj1NYXRoLmF0YW4yKGgsZyk7TmMrPXAqbCxDYys9cCpzLHpjKz1wKmYsYmMrPXYsa2MrPXYqKHIrKHI9bykpLEVjKz12Kih1Kyh1PWEpKSxBYys9diooaSsoaT1jKSksd2Uocix1LGkpfXZhciB0LGUscix1LGk7cWMucG9pbnQ9ZnVuY3Rpb24obyxhKXt0PW8sZT1hLHFjLnBvaW50PW4sbyo9RGE7dmFyIGM9TWF0aC5jb3MoYSo9RGEpO3I9YypNYXRoLmNvcyhvKSx1PWMqTWF0aC5zaW4obyksaT1NYXRoLnNpbihhKSx3ZShyLHUsaSl9LHFjLmxpbmVFbmQ9ZnVuY3Rpb24oKXtuKHQsZSkscWMubGluZUVuZD1rZSxxYy5wb2ludD1fZX19ZnVuY3Rpb24gQWUobix0KXtmdW5jdGlvbiBlKGUscil7cmV0dXJuIGU9bihlLHIpLHQoZVswXSxlWzFdKX1yZXR1cm4gbi5pbnZlcnQmJnQuaW52ZXJ0JiYoZS5pbnZlcnQ9ZnVuY3Rpb24oZSxyKXtyZXR1cm4gZT10LmludmVydChlLHIpLGUmJm4uaW52ZXJ0KGVbMF0sZVsxXSl9KSxlfWZ1bmN0aW9uIE5lKCl7cmV0dXJuITB9ZnVuY3Rpb24gQ2Uobix0LGUscix1KXt2YXIgaT1bXSxvPVtdO2lmKG4uZm9yRWFjaChmdW5jdGlvbihuKXtpZighKCh0PW4ubGVuZ3RoLTEpPD0wKSl7dmFyIHQsZT1uWzBdLHI9blt0XTtpZihiZShlLHIpKXt1LmxpbmVTdGFydCgpO2Zvcih2YXIgYT0wO3Q+YTsrK2EpdS5wb2ludCgoZT1uW2FdKVswXSxlWzFdKTtyZXR1cm4gdm9pZCB1LmxpbmVFbmQoKX12YXIgYz1uZXcgcWUoZSxuLG51bGwsITApLGw9bmV3IHFlKGUsbnVsbCxjLCExKTtjLm89bCxpLnB1c2goYyksby5wdXNoKGwpLGM9bmV3IHFlKHIsbixudWxsLCExKSxsPW5ldyBxZShyLG51bGwsYywhMCksYy5vPWwsaS5wdXNoKGMpLG8ucHVzaChsKX19KSxvLnNvcnQodCksemUoaSksemUobyksaS5sZW5ndGgpe2Zvcih2YXIgYT0wLGM9ZSxsPW8ubGVuZ3RoO2w+YTsrK2Epb1thXS5lPWM9IWM7Zm9yKHZhciBzLGYsaD1pWzBdOzspe2Zvcih2YXIgZz1oLHA9ITA7Zy52OylpZigoZz1nLm4pPT09aClyZXR1cm47cz1nLnosdS5saW5lU3RhcnQoKTtkb3tpZihnLnY9Zy5vLnY9ITAsZy5lKXtpZihwKWZvcih2YXIgYT0wLGw9cy5sZW5ndGg7bD5hOysrYSl1LnBvaW50KChmPXNbYV0pWzBdLGZbMV0pO2Vsc2UgcihnLngsZy5uLngsMSx1KTtnPWcubn1lbHNle2lmKHApe3M9Zy5wLno7Zm9yKHZhciBhPXMubGVuZ3RoLTE7YT49MDstLWEpdS5wb2ludCgoZj1zW2FdKVswXSxmWzFdKX1lbHNlIHIoZy54LGcucC54LC0xLHUpO2c9Zy5wfWc9Zy5vLHM9Zy56LHA9IXB9d2hpbGUoIWcudik7dS5saW5lRW5kKCl9fX1mdW5jdGlvbiB6ZShuKXtpZih0PW4ubGVuZ3RoKXtmb3IodmFyIHQsZSxyPTAsdT1uWzBdOysrcjx0Oyl1Lm49ZT1uW3JdLGUucD11LHU9ZTt1Lm49ZT1uWzBdLGUucD11fX1mdW5jdGlvbiBxZShuLHQsZSxyKXt0aGlzLng9bix0aGlzLno9dCx0aGlzLm89ZSx0aGlzLmU9cix0aGlzLnY9ITEsdGhpcy5uPXRoaXMucD1udWxsfWZ1bmN0aW9uIExlKG4sdCxlLHIpe3JldHVybiBmdW5jdGlvbih1LGkpe2Z1bmN0aW9uIG8odCxlKXt2YXIgcj11KHQsZSk7bih0PXJbMF0sZT1yWzFdKSYmaS5wb2ludCh0LGUpfWZ1bmN0aW9uIGEobix0KXt2YXIgZT11KG4sdCk7ZC5wb2ludChlWzBdLGVbMV0pfWZ1bmN0aW9uIGMoKXt5LnBvaW50PWEsZC5saW5lU3RhcnQoKX1mdW5jdGlvbiBsKCl7eS5wb2ludD1vLGQubGluZUVuZCgpfWZ1bmN0aW9uIHMobix0KXt2LnB1c2goW24sdF0pO3ZhciBlPXUobix0KTt4LnBvaW50KGVbMF0sZVsxXSl9ZnVuY3Rpb24gZigpe3gubGluZVN0YXJ0KCksdj1bXX1mdW5jdGlvbiBoKCl7cyh2WzBdWzBdLHZbMF1bMV0pLHgubGluZUVuZCgpO3ZhciBuLHQ9eC5jbGVhbigpLGU9TS5idWZmZXIoKSxyPWUubGVuZ3RoO2lmKHYucG9wKCkscC5wdXNoKHYpLHY9bnVsbCxyKWlmKDEmdCl7bj1lWzBdO3ZhciB1LHI9bi5sZW5ndGgtMSxvPS0xO2lmKHI+MCl7Zm9yKGJ8fChpLnBvbHlnb25TdGFydCgpLGI9ITApLGkubGluZVN0YXJ0KCk7KytvPHI7KWkucG9pbnQoKHU9bltvXSlbMF0sdVsxXSk7aS5saW5lRW5kKCl9fWVsc2Ugcj4xJiYyJnQmJmUucHVzaChlLnBvcCgpLmNvbmNhdChlLnNoaWZ0KCkpKSxnLnB1c2goZS5maWx0ZXIoVGUpKX12YXIgZyxwLHYsZD10KGkpLG09dS5pbnZlcnQoclswXSxyWzFdKSx5PXtwb2ludDpvLGxpbmVTdGFydDpjLGxpbmVFbmQ6bCxwb2x5Z29uU3RhcnQ6ZnVuY3Rpb24oKXt5LnBvaW50PXMseS5saW5lU3RhcnQ9Zix5LmxpbmVFbmQ9aCxnPVtdLHA9W119LHBvbHlnb25FbmQ6ZnVuY3Rpb24oKXt5LnBvaW50PW8seS5saW5lU3RhcnQ9Yyx5LmxpbmVFbmQ9bCxnPXRhLm1lcmdlKGcpO3ZhciBuPUZlKG0scCk7Zy5sZW5ndGg/KGJ8fChpLnBvbHlnb25TdGFydCgpLGI9ITApLENlKGcsRGUsbixlLGkpKTpuJiYoYnx8KGkucG9seWdvblN0YXJ0KCksYj0hMCksaS5saW5lU3RhcnQoKSxlKG51bGwsbnVsbCwxLGkpLGkubGluZUVuZCgpKSxiJiYoaS5wb2x5Z29uRW5kKCksYj0hMSksZz1wPW51bGx9LHNwaGVyZTpmdW5jdGlvbigpe2kucG9seWdvblN0YXJ0KCksaS5saW5lU3RhcnQoKSxlKG51bGwsbnVsbCwxLGkpLGkubGluZUVuZCgpLGkucG9seWdvbkVuZCgpfX0sTT1SZSgpLHg9dChNKSxiPSExO3JldHVybiB5fX1mdW5jdGlvbiBUZShuKXtyZXR1cm4gbi5sZW5ndGg+MX1mdW5jdGlvbiBSZSgpe3ZhciBuLHQ9W107cmV0dXJue2xpbmVTdGFydDpmdW5jdGlvbigpe3QucHVzaChuPVtdKX0scG9pbnQ6ZnVuY3Rpb24odCxlKXtuLnB1c2goW3QsZV0pfSxsaW5lRW5kOmIsYnVmZmVyOmZ1bmN0aW9uKCl7dmFyIGU9dDtyZXR1cm4gdD1bXSxuPW51bGwsZX0scmVqb2luOmZ1bmN0aW9uKCl7dC5sZW5ndGg+MSYmdC5wdXNoKHQucG9wKCkuY29uY2F0KHQuc2hpZnQoKSkpfX19ZnVuY3Rpb24gRGUobix0KXtyZXR1cm4oKG49bi54KVswXTwwP25bMV0tUmEtQ2E6UmEtblsxXSktKCh0PXQueClbMF08MD90WzFdLVJhLUNhOlJhLXRbMV0pfWZ1bmN0aW9uIFBlKG4pe3ZhciB0LGU9MC8wLHI9MC8wLHU9MC8wO3JldHVybntsaW5lU3RhcnQ6ZnVuY3Rpb24oKXtuLmxpbmVTdGFydCgpLHQ9MX0scG9pbnQ6ZnVuY3Rpb24oaSxvKXt2YXIgYT1pPjA/cWE6LXFhLGM9Z2EoaS1lKTtnYShjLXFhKTxDYT8obi5wb2ludChlLHI9KHIrbykvMj4wP1JhOi1SYSksbi5wb2ludCh1LHIpLG4ubGluZUVuZCgpLG4ubGluZVN0YXJ0KCksbi5wb2ludChhLHIpLG4ucG9pbnQoaSxyKSx0PTApOnUhPT1hJiZjPj1xYSYmKGdhKGUtdSk8Q2EmJihlLT11KkNhKSxnYShpLWEpPENhJiYoaS09YSpDYSkscj1VZShlLHIsaSxvKSxuLnBvaW50KHUsciksbi5saW5lRW5kKCksbi5saW5lU3RhcnQoKSxuLnBvaW50KGEsciksdD0wKSxuLnBvaW50KGU9aSxyPW8pLHU9YX0sbGluZUVuZDpmdW5jdGlvbigpe24ubGluZUVuZCgpLGU9cj0wLzB9LGNsZWFuOmZ1bmN0aW9uKCl7cmV0dXJuIDItdH19fWZ1bmN0aW9uIFVlKG4sdCxlLHIpe3ZhciB1LGksbz1NYXRoLnNpbihuLWUpO3JldHVybiBnYShvKT5DYT9NYXRoLmF0YW4oKE1hdGguc2luKHQpKihpPU1hdGguY29zKHIpKSpNYXRoLnNpbihlKS1NYXRoLnNpbihyKSoodT1NYXRoLmNvcyh0KSkqTWF0aC5zaW4obikpLyh1KmkqbykpOih0K3IpLzJ9ZnVuY3Rpb24gamUobix0LGUscil7dmFyIHU7aWYobnVsbD09bil1PWUqUmEsci5wb2ludCgtcWEsdSksci5wb2ludCgwLHUpLHIucG9pbnQocWEsdSksci5wb2ludChxYSwwKSxyLnBvaW50KHFhLC11KSxyLnBvaW50KDAsLXUpLHIucG9pbnQoLXFhLC11KSxyLnBvaW50KC1xYSwwKSxyLnBvaW50KC1xYSx1KTtlbHNlIGlmKGdhKG5bMF0tdFswXSk+Q2Epe3ZhciBpPW5bMF08dFswXT9xYTotcWE7dT1lKmkvMixyLnBvaW50KC1pLHUpLHIucG9pbnQoMCx1KSxyLnBvaW50KGksdSl9ZWxzZSByLnBvaW50KHRbMF0sdFsxXSl9ZnVuY3Rpb24gRmUobix0KXt2YXIgZT1uWzBdLHI9blsxXSx1PVtNYXRoLnNpbihlKSwtTWF0aC5jb3MoZSksMF0saT0wLG89MDt5Yy5yZXNldCgpO2Zvcih2YXIgYT0wLGM9dC5sZW5ndGg7Yz5hOysrYSl7dmFyIGw9dFthXSxzPWwubGVuZ3RoO2lmKHMpZm9yKHZhciBmPWxbMF0saD1mWzBdLGc9ZlsxXS8yK3FhLzQscD1NYXRoLnNpbihnKSx2PU1hdGguY29zKGcpLGQ9MTs7KXtkPT09cyYmKGQ9MCksbj1sW2RdO3ZhciBtPW5bMF0seT1uWzFdLzIrcWEvNCxNPU1hdGguc2luKHkpLHg9TWF0aC5jb3MoeSksYj1tLWgsXz1iPj0wPzE6LTEsdz1fKmIsUz13PnFhLGs9cCpNO2lmKHljLmFkZChNYXRoLmF0YW4yKGsqXypNYXRoLnNpbih3KSx2KngraypNYXRoLmNvcyh3KSkpLGkrPVM/YitfKkxhOmIsU15oPj1lXm0+PWUpe3ZhciBFPWRlKHBlKGYpLHBlKG4pKTtNZShFKTt2YXIgQT1kZSh1LEUpO01lKEEpO3ZhciBOPShTXmI+PTA/LTE6MSkqdHQoQVsyXSk7KHI+Tnx8cj09PU4mJihFWzBdfHxFWzFdKSkmJihvKz1TXmI+PTA/MTotMSl9aWYoIWQrKylicmVhaztoPW0scD1NLHY9eCxmPW59fXJldHVybigtQ2E+aXx8Q2E+aSYmMD55YyleMSZvfWZ1bmN0aW9uIEhlKG4pe2Z1bmN0aW9uIHQobix0KXtyZXR1cm4gTWF0aC5jb3MobikqTWF0aC5jb3ModCk+aX1mdW5jdGlvbiBlKG4pe3ZhciBlLGksYyxsLHM7cmV0dXJue2xpbmVTdGFydDpmdW5jdGlvbigpe2w9Yz0hMSxzPTF9LHBvaW50OmZ1bmN0aW9uKGYsaCl7dmFyIGcscD1bZixoXSx2PXQoZixoKSxkPW8/dj8wOnUoZixoKTp2P3UoZisoMD5mP3FhOi1xYSksaCk6MDtpZighZSYmKGw9Yz12KSYmbi5saW5lU3RhcnQoKSx2IT09YyYmKGc9cihlLHApLChiZShlLGcpfHxiZShwLGcpKSYmKHBbMF0rPUNhLHBbMV0rPUNhLHY9dChwWzBdLHBbMV0pKSksdiE9PWMpcz0wLHY/KG4ubGluZVN0YXJ0KCksZz1yKHAsZSksbi5wb2ludChnWzBdLGdbMV0pKTooZz1yKGUscCksbi5wb2ludChnWzBdLGdbMV0pLG4ubGluZUVuZCgpKSxlPWc7ZWxzZSBpZihhJiZlJiZvXnYpe3ZhciBtO2QmaXx8IShtPXIocCxlLCEwKSl8fChzPTAsbz8obi5saW5lU3RhcnQoKSxuLnBvaW50KG1bMF1bMF0sbVswXVsxXSksbi5wb2ludChtWzFdWzBdLG1bMV1bMV0pLG4ubGluZUVuZCgpKToobi5wb2ludChtWzFdWzBdLG1bMV1bMV0pLG4ubGluZUVuZCgpLG4ubGluZVN0YXJ0KCksbi5wb2ludChtWzBdWzBdLG1bMF1bMV0pKSl9IXZ8fGUmJmJlKGUscCl8fG4ucG9pbnQocFswXSxwWzFdKSxlPXAsYz12LGk9ZH0sbGluZUVuZDpmdW5jdGlvbigpe2MmJm4ubGluZUVuZCgpLGU9bnVsbH0sY2xlYW46ZnVuY3Rpb24oKXtyZXR1cm4gc3wobCYmYyk8PDF9fX1mdW5jdGlvbiByKG4sdCxlKXt2YXIgcj1wZShuKSx1PXBlKHQpLG89WzEsMCwwXSxhPWRlKHIsdSksYz12ZShhLGEpLGw9YVswXSxzPWMtbCpsO2lmKCFzKXJldHVybiFlJiZuO3ZhciBmPWkqYy9zLGg9LWkqbC9zLGc9ZGUobyxhKSxwPXllKG8sZiksdj15ZShhLGgpO21lKHAsdik7dmFyIGQ9ZyxtPXZlKHAsZCkseT12ZShkLGQpLE09bSptLXkqKHZlKHAscCktMSk7aWYoISgwPk0pKXt2YXIgeD1NYXRoLnNxcnQoTSksYj15ZShkLCgtbS14KS95KTtpZihtZShiLHApLGI9eGUoYiksIWUpcmV0dXJuIGI7dmFyIF8sdz1uWzBdLFM9dFswXSxrPW5bMV0sRT10WzFdO3c+UyYmKF89dyx3PVMsUz1fKTt2YXIgQT1TLXcsTj1nYShBLXFhKTxDYSxDPU58fENhPkE7aWYoIU4mJms+RSYmKF89ayxrPUUsRT1fKSxDP04/aytFPjBeYlsxXTwoZ2EoYlswXS13KTxDYT9rOkUpOms8PWJbMV0mJmJbMV08PUU6QT5xYV4odzw9YlswXSYmYlswXTw9Uykpe3ZhciB6PXllKGQsKC1tK3gpL3kpO3JldHVybiBtZSh6LHApLFtiLHhlKHopXX19fWZ1bmN0aW9uIHUodCxlKXt2YXIgcj1vP246cWEtbix1PTA7cmV0dXJuLXI+dD91fD0xOnQ+ciYmKHV8PTIpLC1yPmU/dXw9NDplPnImJih1fD04KSx1fXZhciBpPU1hdGguY29zKG4pLG89aT4wLGE9Z2EoaSk+Q2EsYz1ncihuLDYqRGEpO3JldHVybiBMZSh0LGUsYyxvP1swLC1uXTpbLXFhLG4tcWFdKX1mdW5jdGlvbiBPZShuLHQsZSxyKXtyZXR1cm4gZnVuY3Rpb24odSl7dmFyIGksbz11LmEsYT11LmIsYz1vLngsbD1vLnkscz1hLngsZj1hLnksaD0wLGc9MSxwPXMtYyx2PWYtbDtpZihpPW4tYyxwfHwhKGk+MCkpe2lmKGkvPXAsMD5wKXtpZihoPmkpcmV0dXJuO2c+aSYmKGc9aSl9ZWxzZSBpZihwPjApe2lmKGk+ZylyZXR1cm47aT5oJiYoaD1pKX1pZihpPWUtYyxwfHwhKDA+aSkpe2lmKGkvPXAsMD5wKXtpZihpPmcpcmV0dXJuO2k+aCYmKGg9aSl9ZWxzZSBpZihwPjApe2lmKGg+aSlyZXR1cm47Zz5pJiYoZz1pKX1pZihpPXQtbCx2fHwhKGk+MCkpe2lmKGkvPXYsMD52KXtpZihoPmkpcmV0dXJuO2c+aSYmKGc9aSl9ZWxzZSBpZih2PjApe2lmKGk+ZylyZXR1cm47aT5oJiYoaD1pKX1pZihpPXItbCx2fHwhKDA+aSkpe2lmKGkvPXYsMD52KXtpZihpPmcpcmV0dXJuO2k+aCYmKGg9aSl9ZWxzZSBpZih2PjApe2lmKGg+aSlyZXR1cm47Zz5pJiYoZz1pKX1yZXR1cm4gaD4wJiYodS5hPXt4OmMraCpwLHk6bCtoKnZ9KSwxPmcmJih1LmI9e3g6YytnKnAseTpsK2cqdn0pLHV9fX19fX1mdW5jdGlvbiBJZShuLHQsZSxyKXtmdW5jdGlvbiB1KHIsdSl7cmV0dXJuIGdhKHJbMF0tbik8Q2E/dT4wPzA6MzpnYShyWzBdLWUpPENhP3U+MD8yOjE6Z2EoclsxXS10KTxDYT91PjA/MTowOnU+MD8zOjJ9ZnVuY3Rpb24gaShuLHQpe3JldHVybiBvKG4ueCx0LngpfWZ1bmN0aW9uIG8obix0KXt2YXIgZT11KG4sMSkscj11KHQsMSk7cmV0dXJuIGUhPT1yP2UtcjowPT09ZT90WzFdLW5bMV06MT09PWU/blswXS10WzBdOjI9PT1lP25bMV0tdFsxXTp0WzBdLW5bMF19cmV0dXJuIGZ1bmN0aW9uKGEpe2Z1bmN0aW9uIGMobil7Zm9yKHZhciB0PTAsZT1kLmxlbmd0aCxyPW5bMV0sdT0wO2U+dTsrK3UpZm9yKHZhciBpLG89MSxhPWRbdV0sYz1hLmxlbmd0aCxsPWFbMF07Yz5vOysrbylpPWFbb10sbFsxXTw9cj9pWzFdPnImJlEobCxpLG4pPjAmJisrdDppWzFdPD1yJiZRKGwsaSxuKTwwJiYtLXQsbD1pO3JldHVybiAwIT09dH1mdW5jdGlvbiBsKGksYSxjLGwpe3ZhciBzPTAsZj0wO2lmKG51bGw9PWl8fChzPXUoaSxjKSkhPT0oZj11KGEsYykpfHxvKGksYSk8MF5jPjApe2RvIGwucG9pbnQoMD09PXN8fDM9PT1zP246ZSxzPjE/cjp0KTt3aGlsZSgocz0ocytjKzQpJTQpIT09Zil9ZWxzZSBsLnBvaW50KGFbMF0sYVsxXSl9ZnVuY3Rpb24gcyh1LGkpe3JldHVybiB1Pj1uJiZlPj11JiZpPj10JiZyPj1pfWZ1bmN0aW9uIGYobix0KXtzKG4sdCkmJmEucG9pbnQobix0KX1mdW5jdGlvbiBoKCl7Qy5wb2ludD1wLGQmJmQucHVzaChtPVtdKSxTPSEwLHc9ITEsYj1fPTAvMH1mdW5jdGlvbiBnKCl7diYmKHAoeSxNKSx4JiZ3JiZBLnJlam9pbigpLHYucHVzaChBLmJ1ZmZlcigpKSksQy5wb2ludD1mLHcmJmEubGluZUVuZCgpfWZ1bmN0aW9uIHAobix0KXtuPU1hdGgubWF4KC1UYyxNYXRoLm1pbihUYyxuKSksdD1NYXRoLm1heCgtVGMsTWF0aC5taW4oVGMsdCkpO3ZhciBlPXMobix0KTtpZihkJiZtLnB1c2goW24sdF0pLFMpeT1uLE09dCx4PWUsUz0hMSxlJiYoYS5saW5lU3RhcnQoKSxhLnBvaW50KG4sdCkpO2Vsc2UgaWYoZSYmdylhLnBvaW50KG4sdCk7ZWxzZXt2YXIgcj17YTp7eDpiLHk6X30sYjp7eDpuLHk6dH19O04ocik/KHd8fChhLmxpbmVTdGFydCgpLGEucG9pbnQoci5hLngsci5hLnkpKSxhLnBvaW50KHIuYi54LHIuYi55KSxlfHxhLmxpbmVFbmQoKSxrPSExKTplJiYoYS5saW5lU3RhcnQoKSxhLnBvaW50KG4sdCksaz0hMSl9Yj1uLF89dCx3PWV9dmFyIHYsZCxtLHksTSx4LGIsXyx3LFMsayxFPWEsQT1SZSgpLE49T2Uobix0LGUsciksQz17cG9pbnQ6ZixsaW5lU3RhcnQ6aCxsaW5lRW5kOmcscG9seWdvblN0YXJ0OmZ1bmN0aW9uKCl7YT1BLHY9W10sZD1bXSxrPSEwfSxwb2x5Z29uRW5kOmZ1bmN0aW9uKCl7YT1FLHY9dGEubWVyZ2Uodik7dmFyIHQ9YyhbbixyXSksZT1rJiZ0LHU9di5sZW5ndGg7KGV8fHUpJiYoYS5wb2x5Z29uU3RhcnQoKSxlJiYoYS5saW5lU3RhcnQoKSxsKG51bGwsbnVsbCwxLGEpLGEubGluZUVuZCgpKSx1JiZDZSh2LGksdCxsLGEpLGEucG9seWdvbkVuZCgpKSx2PWQ9bT1udWxsfX07cmV0dXJuIEN9fWZ1bmN0aW9uIFllKG4pe3ZhciB0PTAsZT1xYS8zLHI9aXIobiksdT1yKHQsZSk7cmV0dXJuIHUucGFyYWxsZWxzPWZ1bmN0aW9uKG4pe3JldHVybiBhcmd1bWVudHMubGVuZ3RoP3IodD1uWzBdKnFhLzE4MCxlPW5bMV0qcWEvMTgwKTpbdC9xYSoxODAsZS9xYSoxODBdfSx1fWZ1bmN0aW9uIFplKG4sdCl7ZnVuY3Rpb24gZShuLHQpe3ZhciBlPU1hdGguc3FydChpLTIqdSpNYXRoLnNpbih0KSkvdTtyZXR1cm5bZSpNYXRoLnNpbihuKj11KSxvLWUqTWF0aC5jb3MobildfXZhciByPU1hdGguc2luKG4pLHU9KHIrTWF0aC5zaW4odCkpLzIsaT0xK3IqKDIqdS1yKSxvPU1hdGguc3FydChpKS91O3JldHVybiBlLmludmVydD1mdW5jdGlvbihuLHQpe3ZhciBlPW8tdDtyZXR1cm5bTWF0aC5hdGFuMihuLGUpL3UsdHQoKGktKG4qbitlKmUpKnUqdSkvKDIqdSkpXX0sZX1mdW5jdGlvbiBWZSgpe2Z1bmN0aW9uIG4obix0KXtEYys9dSpuLXIqdCxyPW4sdT10fXZhciB0LGUscix1O0hjLnBvaW50PWZ1bmN0aW9uKGksbyl7SGMucG9pbnQ9bix0PXI9aSxlPXU9b30sSGMubGluZUVuZD1mdW5jdGlvbigpe24odCxlKX19ZnVuY3Rpb24gWGUobix0KXtQYz5uJiYoUGM9biksbj5qYyYmKGpjPW4pLFVjPnQmJihVYz10KSx0PkZjJiYoRmM9dCl9ZnVuY3Rpb24gJGUoKXtmdW5jdGlvbiBuKG4sdCl7by5wdXNoKCJNIixuLCIsIix0LGkpfWZ1bmN0aW9uIHQobix0KXtvLnB1c2goIk0iLG4sIiwiLHQpLGEucG9pbnQ9ZX1mdW5jdGlvbiBlKG4sdCl7by5wdXNoKCJMIixuLCIsIix0KX1mdW5jdGlvbiByKCl7YS5wb2ludD1ufWZ1bmN0aW9uIHUoKXtvLnB1c2goIloiKX12YXIgaT1CZSg0LjUpLG89W10sYT17cG9pbnQ6bixsaW5lU3RhcnQ6ZnVuY3Rpb24oKXthLnBvaW50PXR9LGxpbmVFbmQ6cixwb2x5Z29uU3RhcnQ6ZnVuY3Rpb24oKXthLmxpbmVFbmQ9dX0scG9seWdvbkVuZDpmdW5jdGlvbigpe2EubGluZUVuZD1yLGEucG9pbnQ9bn0scG9pbnRSYWRpdXM6ZnVuY3Rpb24obil7cmV0dXJuIGk9QmUobiksYX0scmVzdWx0OmZ1bmN0aW9uKCl7aWYoby5sZW5ndGgpe3ZhciBuPW8uam9pbigiIik7cmV0dXJuIG89W10sbn19fTtyZXR1cm4gYX1mdW5jdGlvbiBCZShuKXtyZXR1cm4ibTAsIituKyJhIituKyIsIituKyIgMCAxLDEgMCwiKy0yKm4rImEiK24rIiwiK24rIiAwIDEsMSAwLCIrMipuKyJ6In1mdW5jdGlvbiBXZShuLHQpe19jKz1uLHdjKz10LCsrU2N9ZnVuY3Rpb24gSmUoKXtmdW5jdGlvbiBuKG4scil7dmFyIHU9bi10LGk9ci1lLG89TWF0aC5zcXJ0KHUqdStpKmkpO2tjKz1vKih0K24pLzIsRWMrPW8qKGUrcikvMixBYys9byxXZSh0PW4sZT1yKX12YXIgdCxlO0ljLnBvaW50PWZ1bmN0aW9uKHIsdSl7SWMucG9pbnQ9bixXZSh0PXIsZT11KX19ZnVuY3Rpb24gR2UoKXtJYy5wb2ludD1XZX1mdW5jdGlvbiBLZSgpe2Z1bmN0aW9uIG4obix0KXt2YXIgZT1uLXIsaT10LXUsbz1NYXRoLnNxcnQoZSplK2kqaSk7a2MrPW8qKHIrbikvMixFYys9byoodSt0KS8yLEFjKz1vLG89dSpuLXIqdCxOYys9byoocituKSxDYys9byoodSt0KSx6Yys9MypvLFdlKHI9bix1PXQpfXZhciB0LGUscix1O0ljLnBvaW50PWZ1bmN0aW9uKGksbyl7SWMucG9pbnQ9bixXZSh0PXI9aSxlPXU9byl9LEljLmxpbmVFbmQ9ZnVuY3Rpb24oKXtuKHQsZSl9fWZ1bmN0aW9uIFFlKG4pe2Z1bmN0aW9uIHQodCxlKXtuLm1vdmVUbyh0K28sZSksbi5hcmModCxlLG8sMCxMYSl9ZnVuY3Rpb24gZSh0LGUpe24ubW92ZVRvKHQsZSksYS5wb2ludD1yfWZ1bmN0aW9uIHIodCxlKXtuLmxpbmVUbyh0LGUpfWZ1bmN0aW9uIHUoKXthLnBvaW50PXR9ZnVuY3Rpb24gaSgpe24uY2xvc2VQYXRoKCl9dmFyIG89NC41LGE9e3BvaW50OnQsbGluZVN0YXJ0OmZ1bmN0aW9uKCl7YS5wb2ludD1lfSxsaW5lRW5kOnUscG9seWdvblN0YXJ0OmZ1bmN0aW9uKCl7YS5saW5lRW5kPWl9LHBvbHlnb25FbmQ6ZnVuY3Rpb24oKXthLmxpbmVFbmQ9dSxhLnBvaW50PXR9LHBvaW50UmFkaXVzOmZ1bmN0aW9uKG4pe3JldHVybiBvPW4sYX0scmVzdWx0OmJ9O3JldHVybiBhfWZ1bmN0aW9uIG5yKG4pe2Z1bmN0aW9uIHQobil7cmV0dXJuKGE/cjplKShuKX1mdW5jdGlvbiBlKHQpe3JldHVybiBycih0LGZ1bmN0aW9uKGUscil7ZT1uKGUsciksdC5wb2ludChlWzBdLGVbMV0pfSl9ZnVuY3Rpb24gcih0KXtmdW5jdGlvbiBlKGUscil7ZT1uKGUsciksdC5wb2ludChlWzBdLGVbMV0pfWZ1bmN0aW9uIHIoKXtNPTAvMCxTLnBvaW50PWksdC5saW5lU3RhcnQoKX1mdW5jdGlvbiBpKGUscil7dmFyIGk9cGUoW2Uscl0pLG89bihlLHIpO3UoTSx4LHksYixfLHcsTT1vWzBdLHg9b1sxXSx5PWUsYj1pWzBdLF89aVsxXSx3PWlbMl0sYSx0KSx0LnBvaW50KE0seCl9ZnVuY3Rpb24gbygpe1MucG9pbnQ9ZSx0LmxpbmVFbmQoKX1mdW5jdGlvbiBjKCl7cigpLFMucG9pbnQ9bCxTLmxpbmVFbmQ9c31mdW5jdGlvbiBsKG4sdCl7aShmPW4saD10KSxnPU0scD14LHY9YixkPV8sbT13LFMucG9pbnQ9aX1mdW5jdGlvbiBzKCl7dShNLHgseSxiLF8sdyxnLHAsZix2LGQsbSxhLHQpLFMubGluZUVuZD1vLG8oKX12YXIgZixoLGcscCx2LGQsbSx5LE0seCxiLF8sdyxTPXtwb2ludDplLGxpbmVTdGFydDpyLGxpbmVFbmQ6byxwb2x5Z29uU3RhcnQ6ZnVuY3Rpb24oKXt0LnBvbHlnb25TdGFydCgpLFMubGluZVN0YXJ0PWMKfSxwb2x5Z29uRW5kOmZ1bmN0aW9uKCl7dC5wb2x5Z29uRW5kKCksUy5saW5lU3RhcnQ9cn19O3JldHVybiBTfWZ1bmN0aW9uIHUodCxlLHIsYSxjLGwscyxmLGgsZyxwLHYsZCxtKXt2YXIgeT1zLXQsTT1mLWUseD15KnkrTSpNO2lmKHg+NCppJiZkLS0pe3ZhciBiPWErZyxfPWMrcCx3PWwrdixTPU1hdGguc3FydChiKmIrXypfK3cqdyksaz1NYXRoLmFzaW4ody89UyksRT1nYShnYSh3KS0xKTxDYXx8Z2Eoci1oKTxDYT8ocitoKS8yOk1hdGguYXRhbjIoXyxiKSxBPW4oRSxrKSxOPUFbMF0sQz1BWzFdLHo9Ti10LHE9Qy1lLEw9TSp6LXkqcTsoTCpML3g+aXx8Z2EoKHkqeitNKnEpL3gtLjUpPi4zfHxvPmEqZytjKnArbCp2KSYmKHUodCxlLHIsYSxjLGwsTixDLEUsYi89UyxfLz1TLHcsZCxtKSxtLnBvaW50KE4sQyksdShOLEMsRSxiLF8sdyxzLGYsaCxnLHAsdixkLG0pKX19dmFyIGk9LjUsbz1NYXRoLmNvcygzMCpEYSksYT0xNjtyZXR1cm4gdC5wcmVjaXNpb249ZnVuY3Rpb24obil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGE9KGk9bipuKT4wJiYxNix0KTpNYXRoLnNxcnQoaSl9LHR9ZnVuY3Rpb24gdHIobil7dmFyIHQ9bnIoZnVuY3Rpb24odCxlKXtyZXR1cm4gbihbdCpQYSxlKlBhXSl9KTtyZXR1cm4gZnVuY3Rpb24obil7cmV0dXJuIG9yKHQobikpfX1mdW5jdGlvbiBlcihuKXt0aGlzLnN0cmVhbT1ufWZ1bmN0aW9uIHJyKG4sdCl7cmV0dXJue3BvaW50OnQsc3BoZXJlOmZ1bmN0aW9uKCl7bi5zcGhlcmUoKX0sbGluZVN0YXJ0OmZ1bmN0aW9uKCl7bi5saW5lU3RhcnQoKX0sbGluZUVuZDpmdW5jdGlvbigpe24ubGluZUVuZCgpfSxwb2x5Z29uU3RhcnQ6ZnVuY3Rpb24oKXtuLnBvbHlnb25TdGFydCgpfSxwb2x5Z29uRW5kOmZ1bmN0aW9uKCl7bi5wb2x5Z29uRW5kKCl9fX1mdW5jdGlvbiB1cihuKXtyZXR1cm4gaXIoZnVuY3Rpb24oKXtyZXR1cm4gbn0pKCl9ZnVuY3Rpb24gaXIobil7ZnVuY3Rpb24gdChuKXtyZXR1cm4gbj1hKG5bMF0qRGEsblsxXSpEYSksW25bMF0qaCtjLGwtblsxXSpoXX1mdW5jdGlvbiBlKG4pe3JldHVybiBuPWEuaW52ZXJ0KChuWzBdLWMpL2gsKGwtblsxXSkvaCksbiYmW25bMF0qUGEsblsxXSpQYV19ZnVuY3Rpb24gcigpe2E9QWUobz1scihtLE0seCksaSk7dmFyIG49aSh2LGQpO3JldHVybiBjPWctblswXSpoLGw9cCtuWzFdKmgsdSgpfWZ1bmN0aW9uIHUoKXtyZXR1cm4gcyYmKHMudmFsaWQ9ITEscz1udWxsKSx0fXZhciBpLG8sYSxjLGwscyxmPW5yKGZ1bmN0aW9uKG4sdCl7cmV0dXJuIG49aShuLHQpLFtuWzBdKmgrYyxsLW5bMV0qaF19KSxoPTE1MCxnPTQ4MCxwPTI1MCx2PTAsZD0wLG09MCxNPTAseD0wLGI9TGMsXz15LHc9bnVsbCxTPW51bGw7cmV0dXJuIHQuc3RyZWFtPWZ1bmN0aW9uKG4pe3JldHVybiBzJiYocy52YWxpZD0hMSkscz1vcihiKG8sZihfKG4pKSkpLHMudmFsaWQ9ITAsc30sdC5jbGlwQW5nbGU9ZnVuY3Rpb24obil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGI9bnVsbD09bj8odz1uLExjKTpIZSgodz0rbikqRGEpLHUoKSk6d30sdC5jbGlwRXh0ZW50PWZ1bmN0aW9uKG4pe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhTPW4sXz1uP0llKG5bMF1bMF0sblswXVsxXSxuWzFdWzBdLG5bMV1bMV0pOnksdSgpKTpTfSx0LnNjYWxlPWZ1bmN0aW9uKG4pe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhoPStuLHIoKSk6aH0sdC50cmFuc2xhdGU9ZnVuY3Rpb24obil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGc9K25bMF0scD0rblsxXSxyKCkpOltnLHBdfSx0LmNlbnRlcj1mdW5jdGlvbihuKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8odj1uWzBdJTM2MCpEYSxkPW5bMV0lMzYwKkRhLHIoKSk6W3YqUGEsZCpQYV19LHQucm90YXRlPWZ1bmN0aW9uKG4pe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhtPW5bMF0lMzYwKkRhLE09blsxXSUzNjAqRGEseD1uLmxlbmd0aD4yP25bMl0lMzYwKkRhOjAscigpKTpbbSpQYSxNKlBhLHgqUGFdfSx0YS5yZWJpbmQodCxmLCJwcmVjaXNpb24iKSxmdW5jdGlvbigpe3JldHVybiBpPW4uYXBwbHkodGhpcyxhcmd1bWVudHMpLHQuaW52ZXJ0PWkuaW52ZXJ0JiZlLHIoKX19ZnVuY3Rpb24gb3Iobil7cmV0dXJuIHJyKG4sZnVuY3Rpb24odCxlKXtuLnBvaW50KHQqRGEsZSpEYSl9KX1mdW5jdGlvbiBhcihuLHQpe3JldHVybltuLHRdfWZ1bmN0aW9uIGNyKG4sdCl7cmV0dXJuW24+cWE/bi1MYTotcWE+bj9uK0xhOm4sdF19ZnVuY3Rpb24gbHIobix0LGUpe3JldHVybiBuP3R8fGU/QWUoZnIobiksaHIodCxlKSk6ZnIobik6dHx8ZT9ocih0LGUpOmNyfWZ1bmN0aW9uIHNyKG4pe3JldHVybiBmdW5jdGlvbih0LGUpe3JldHVybiB0Kz1uLFt0PnFhP3QtTGE6LXFhPnQ/dCtMYTp0LGVdfX1mdW5jdGlvbiBmcihuKXt2YXIgdD1zcihuKTtyZXR1cm4gdC5pbnZlcnQ9c3IoLW4pLHR9ZnVuY3Rpb24gaHIobix0KXtmdW5jdGlvbiBlKG4sdCl7dmFyIGU9TWF0aC5jb3ModCksYT1NYXRoLmNvcyhuKSplLGM9TWF0aC5zaW4obikqZSxsPU1hdGguc2luKHQpLHM9bCpyK2EqdTtyZXR1cm5bTWF0aC5hdGFuMihjKmktcypvLGEqci1sKnUpLHR0KHMqaStjKm8pXX12YXIgcj1NYXRoLmNvcyhuKSx1PU1hdGguc2luKG4pLGk9TWF0aC5jb3ModCksbz1NYXRoLnNpbih0KTtyZXR1cm4gZS5pbnZlcnQ9ZnVuY3Rpb24obix0KXt2YXIgZT1NYXRoLmNvcyh0KSxhPU1hdGguY29zKG4pKmUsYz1NYXRoLnNpbihuKSplLGw9TWF0aC5zaW4odCkscz1sKmktYypvO3JldHVybltNYXRoLmF0YW4yKGMqaStsKm8sYSpyK3MqdSksdHQocypyLWEqdSldfSxlfWZ1bmN0aW9uIGdyKG4sdCl7dmFyIGU9TWF0aC5jb3Mobikscj1NYXRoLnNpbihuKTtyZXR1cm4gZnVuY3Rpb24odSxpLG8sYSl7dmFyIGM9byp0O251bGwhPXU/KHU9cHIoZSx1KSxpPXByKGUsaSksKG8+MD9pPnU6dT5pKSYmKHUrPW8qTGEpKToodT1uK28qTGEsaT1uLS41KmMpO2Zvcih2YXIgbCxzPXU7bz4wP3M+aTppPnM7cy09YylhLnBvaW50KChsPXhlKFtlLC1yKk1hdGguY29zKHMpLC1yKk1hdGguc2luKHMpXSkpWzBdLGxbMV0pfX1mdW5jdGlvbiBwcihuLHQpe3ZhciBlPXBlKHQpO2VbMF0tPW4sTWUoZSk7dmFyIHI9bnQoLWVbMV0pO3JldHVybigoLWVbMl08MD8tcjpyKSsyKk1hdGguUEktQ2EpJSgyKk1hdGguUEkpfWZ1bmN0aW9uIHZyKG4sdCxlKXt2YXIgcj10YS5yYW5nZShuLHQtQ2EsZSkuY29uY2F0KHQpO3JldHVybiBmdW5jdGlvbihuKXtyZXR1cm4gci5tYXAoZnVuY3Rpb24odCl7cmV0dXJuW24sdF19KX19ZnVuY3Rpb24gZHIobix0LGUpe3ZhciByPXRhLnJhbmdlKG4sdC1DYSxlKS5jb25jYXQodCk7cmV0dXJuIGZ1bmN0aW9uKG4pe3JldHVybiByLm1hcChmdW5jdGlvbih0KXtyZXR1cm5bdCxuXX0pfX1mdW5jdGlvbiBtcihuKXtyZXR1cm4gbi5zb3VyY2V9ZnVuY3Rpb24geXIobil7cmV0dXJuIG4udGFyZ2V0fWZ1bmN0aW9uIE1yKG4sdCxlLHIpe3ZhciB1PU1hdGguY29zKHQpLGk9TWF0aC5zaW4odCksbz1NYXRoLmNvcyhyKSxhPU1hdGguc2luKHIpLGM9dSpNYXRoLmNvcyhuKSxsPXUqTWF0aC5zaW4obikscz1vKk1hdGguY29zKGUpLGY9bypNYXRoLnNpbihlKSxoPTIqTWF0aC5hc2luKE1hdGguc3FydChpdChyLXQpK3UqbyppdChlLW4pKSksZz0xL01hdGguc2luKGgpLHA9aD9mdW5jdGlvbihuKXt2YXIgdD1NYXRoLnNpbihuKj1oKSpnLGU9TWF0aC5zaW4oaC1uKSpnLHI9ZSpjK3Qqcyx1PWUqbCt0KmYsbz1lKmkrdCphO3JldHVybltNYXRoLmF0YW4yKHUscikqUGEsTWF0aC5hdGFuMihvLE1hdGguc3FydChyKnIrdSp1KSkqUGFdfTpmdW5jdGlvbigpe3JldHVybltuKlBhLHQqUGFdfTtyZXR1cm4gcC5kaXN0YW5jZT1oLHB9ZnVuY3Rpb24geHIoKXtmdW5jdGlvbiBuKG4sdSl7dmFyIGk9TWF0aC5zaW4odSo9RGEpLG89TWF0aC5jb3ModSksYT1nYSgobio9RGEpLXQpLGM9TWF0aC5jb3MoYSk7WWMrPU1hdGguYXRhbjIoTWF0aC5zcXJ0KChhPW8qTWF0aC5zaW4oYSkpKmErKGE9cippLWUqbypjKSphKSxlKmkrcipvKmMpLHQ9bixlPWkscj1vfXZhciB0LGUscjtaYy5wb2ludD1mdW5jdGlvbih1LGkpe3Q9dSpEYSxlPU1hdGguc2luKGkqPURhKSxyPU1hdGguY29zKGkpLFpjLnBvaW50PW59LFpjLmxpbmVFbmQ9ZnVuY3Rpb24oKXtaYy5wb2ludD1aYy5saW5lRW5kPWJ9fWZ1bmN0aW9uIGJyKG4sdCl7ZnVuY3Rpb24gZSh0LGUpe3ZhciByPU1hdGguY29zKHQpLHU9TWF0aC5jb3MoZSksaT1uKHIqdSk7cmV0dXJuW2kqdSpNYXRoLnNpbih0KSxpKk1hdGguc2luKGUpXX1yZXR1cm4gZS5pbnZlcnQ9ZnVuY3Rpb24obixlKXt2YXIgcj1NYXRoLnNxcnQobipuK2UqZSksdT10KHIpLGk9TWF0aC5zaW4odSksbz1NYXRoLmNvcyh1KTtyZXR1cm5bTWF0aC5hdGFuMihuKmkscipvKSxNYXRoLmFzaW4ociYmZSppL3IpXX0sZX1mdW5jdGlvbiBfcihuLHQpe2Z1bmN0aW9uIGUobix0KXtvPjA/LVJhK0NhPnQmJih0PS1SYStDYSk6dD5SYS1DYSYmKHQ9UmEtQ2EpO3ZhciBlPW8vTWF0aC5wb3codSh0KSxpKTtyZXR1cm5bZSpNYXRoLnNpbihpKm4pLG8tZSpNYXRoLmNvcyhpKm4pXX12YXIgcj1NYXRoLmNvcyhuKSx1PWZ1bmN0aW9uKG4pe3JldHVybiBNYXRoLnRhbihxYS80K24vMil9LGk9bj09PXQ/TWF0aC5zaW4obik6TWF0aC5sb2coci9NYXRoLmNvcyh0KSkvTWF0aC5sb2codSh0KS91KG4pKSxvPXIqTWF0aC5wb3codShuKSxpKS9pO3JldHVybiBpPyhlLmludmVydD1mdW5jdGlvbihuLHQpe3ZhciBlPW8tdCxyPUsoaSkqTWF0aC5zcXJ0KG4qbitlKmUpO3JldHVybltNYXRoLmF0YW4yKG4sZSkvaSwyKk1hdGguYXRhbihNYXRoLnBvdyhvL3IsMS9pKSktUmFdfSxlKTpTcn1mdW5jdGlvbiB3cihuLHQpe2Z1bmN0aW9uIGUobix0KXt2YXIgZT1pLXQ7cmV0dXJuW2UqTWF0aC5zaW4odSpuKSxpLWUqTWF0aC5jb3ModSpuKV19dmFyIHI9TWF0aC5jb3MobiksdT1uPT09dD9NYXRoLnNpbihuKTooci1NYXRoLmNvcyh0KSkvKHQtbiksaT1yL3UrbjtyZXR1cm4gZ2EodSk8Q2E/YXI6KGUuaW52ZXJ0PWZ1bmN0aW9uKG4sdCl7dmFyIGU9aS10O3JldHVybltNYXRoLmF0YW4yKG4sZSkvdSxpLUsodSkqTWF0aC5zcXJ0KG4qbitlKmUpXX0sZSl9ZnVuY3Rpb24gU3Iobix0KXtyZXR1cm5bbixNYXRoLmxvZyhNYXRoLnRhbihxYS80K3QvMikpXX1mdW5jdGlvbiBrcihuKXt2YXIgdCxlPXVyKG4pLHI9ZS5zY2FsZSx1PWUudHJhbnNsYXRlLGk9ZS5jbGlwRXh0ZW50O3JldHVybiBlLnNjYWxlPWZ1bmN0aW9uKCl7dmFyIG49ci5hcHBseShlLGFyZ3VtZW50cyk7cmV0dXJuIG49PT1lP3Q/ZS5jbGlwRXh0ZW50KG51bGwpOmU6bn0sZS50cmFuc2xhdGU9ZnVuY3Rpb24oKXt2YXIgbj11LmFwcGx5KGUsYXJndW1lbnRzKTtyZXR1cm4gbj09PWU/dD9lLmNsaXBFeHRlbnQobnVsbCk6ZTpufSxlLmNsaXBFeHRlbnQ9ZnVuY3Rpb24obil7dmFyIG89aS5hcHBseShlLGFyZ3VtZW50cyk7aWYobz09PWUpe2lmKHQ9bnVsbD09bil7dmFyIGE9cWEqcigpLGM9dSgpO2koW1tjWzBdLWEsY1sxXS1hXSxbY1swXSthLGNbMV0rYV1dKX19ZWxzZSB0JiYobz1udWxsKTtyZXR1cm4gb30sZS5jbGlwRXh0ZW50KG51bGwpfWZ1bmN0aW9uIEVyKG4sdCl7cmV0dXJuW01hdGgubG9nKE1hdGgudGFuKHFhLzQrdC8yKSksLW5dfWZ1bmN0aW9uIEFyKG4pe3JldHVybiBuWzBdfWZ1bmN0aW9uIE5yKG4pe3JldHVybiBuWzFdfWZ1bmN0aW9uIENyKG4pe2Zvcih2YXIgdD1uLmxlbmd0aCxlPVswLDFdLHI9Mix1PTI7dD51O3UrKyl7Zm9yKDtyPjEmJlEobltlW3ItMl1dLG5bZVtyLTFdXSxuW3VdKTw9MDspLS1yO2VbcisrXT11fXJldHVybiBlLnNsaWNlKDAscil9ZnVuY3Rpb24genIobix0KXtyZXR1cm4gblswXS10WzBdfHxuWzFdLXRbMV19ZnVuY3Rpb24gcXIobix0LGUpe3JldHVybihlWzBdLXRbMF0pKihuWzFdLXRbMV0pPChlWzFdLXRbMV0pKihuWzBdLXRbMF0pfWZ1bmN0aW9uIExyKG4sdCxlLHIpe3ZhciB1PW5bMF0saT1lWzBdLG89dFswXS11LGE9clswXS1pLGM9blsxXSxsPWVbMV0scz10WzFdLWMsZj1yWzFdLWwsaD0oYSooYy1sKS1mKih1LWkpKS8oZipvLWEqcyk7cmV0dXJuW3UraCpvLGMraCpzXX1mdW5jdGlvbiBUcihuKXt2YXIgdD1uWzBdLGU9bltuLmxlbmd0aC0xXTtyZXR1cm4hKHRbMF0tZVswXXx8dFsxXS1lWzFdKX1mdW5jdGlvbiBScigpe3R1KHRoaXMpLHRoaXMuZWRnZT10aGlzLnNpdGU9dGhpcy5jaXJjbGU9bnVsbH1mdW5jdGlvbiBEcihuKXt2YXIgdD1lbC5wb3AoKXx8bmV3IFJyO3JldHVybiB0LnNpdGU9bix0fWZ1bmN0aW9uIFByKG4pe1hyKG4pLFFjLnJlbW92ZShuKSxlbC5wdXNoKG4pLHR1KG4pfWZ1bmN0aW9uIFVyKG4pe3ZhciB0PW4uY2lyY2xlLGU9dC54LHI9dC5jeSx1PXt4OmUseTpyfSxpPW4uUCxvPW4uTixhPVtuXTtQcihuKTtmb3IodmFyIGM9aTtjLmNpcmNsZSYmZ2EoZS1jLmNpcmNsZS54KTxDYSYmZ2Eoci1jLmNpcmNsZS5jeSk8Q2E7KWk9Yy5QLGEudW5zaGlmdChjKSxQcihjKSxjPWk7YS51bnNoaWZ0KGMpLFhyKGMpO2Zvcih2YXIgbD1vO2wuY2lyY2xlJiZnYShlLWwuY2lyY2xlLngpPENhJiZnYShyLWwuY2lyY2xlLmN5KTxDYTspbz1sLk4sYS5wdXNoKGwpLFByKGwpLGw9bzthLnB1c2gobCksWHIobCk7dmFyIHMsZj1hLmxlbmd0aDtmb3Iocz0xO2Y+czsrK3MpbD1hW3NdLGM9YVtzLTFdLEtyKGwuZWRnZSxjLnNpdGUsbC5zaXRlLHUpO2M9YVswXSxsPWFbZi0xXSxsLmVkZ2U9SnIoYy5zaXRlLGwuc2l0ZSxudWxsLHUpLFZyKGMpLFZyKGwpfWZ1bmN0aW9uIGpyKG4pe2Zvcih2YXIgdCxlLHIsdSxpPW4ueCxvPW4ueSxhPVFjLl87YTspaWYocj1GcihhLG8pLWkscj5DYSlhPWEuTDtlbHNle2lmKHU9aS1IcihhLG8pLCEodT5DYSkpe3I+LUNhPyh0PWEuUCxlPWEpOnU+LUNhPyh0PWEsZT1hLk4pOnQ9ZT1hO2JyZWFrfWlmKCFhLlIpe3Q9YTticmVha31hPWEuUn12YXIgYz1EcihuKTtpZihRYy5pbnNlcnQodCxjKSx0fHxlKXtpZih0PT09ZSlyZXR1cm4gWHIodCksZT1Ecih0LnNpdGUpLFFjLmluc2VydChjLGUpLGMuZWRnZT1lLmVkZ2U9SnIodC5zaXRlLGMuc2l0ZSksVnIodCksdm9pZCBWcihlKTtpZighZSlyZXR1cm4gdm9pZChjLmVkZ2U9SnIodC5zaXRlLGMuc2l0ZSkpO1hyKHQpLFhyKGUpO3ZhciBsPXQuc2l0ZSxzPWwueCxmPWwueSxoPW4ueC1zLGc9bi55LWYscD1lLnNpdGUsdj1wLngtcyxkPXAueS1mLG09MiooaCpkLWcqdikseT1oKmgrZypnLE09dip2K2QqZCx4PXt4OihkKnktZypNKS9tK3MseTooaCpNLXYqeSkvbStmfTtLcihlLmVkZ2UsbCxwLHgpLGMuZWRnZT1KcihsLG4sbnVsbCx4KSxlLmVkZ2U9SnIobixwLG51bGwseCksVnIodCksVnIoZSl9fWZ1bmN0aW9uIEZyKG4sdCl7dmFyIGU9bi5zaXRlLHI9ZS54LHU9ZS55LGk9dS10O2lmKCFpKXJldHVybiByO3ZhciBvPW4uUDtpZighbylyZXR1cm4tMS8wO2U9by5zaXRlO3ZhciBhPWUueCxjPWUueSxsPWMtdDtpZighbClyZXR1cm4gYTt2YXIgcz1hLXIsZj0xL2ktMS9sLGg9cy9sO3JldHVybiBmPygtaCtNYXRoLnNxcnQoaCpoLTIqZioocypzLygtMipsKS1jK2wvMit1LWkvMikpKS9mK3I6KHIrYSkvMn1mdW5jdGlvbiBIcihuLHQpe3ZhciBlPW4uTjtpZihlKXJldHVybiBGcihlLHQpO3ZhciByPW4uc2l0ZTtyZXR1cm4gci55PT09dD9yLng6MS8wfWZ1bmN0aW9uIE9yKG4pe3RoaXMuc2l0ZT1uLHRoaXMuZWRnZXM9W119ZnVuY3Rpb24gSXIobil7Zm9yKHZhciB0LGUscix1LGksbyxhLGMsbCxzLGY9blswXVswXSxoPW5bMV1bMF0sZz1uWzBdWzFdLHA9blsxXVsxXSx2PUtjLGQ9di5sZW5ndGg7ZC0tOylpZihpPXZbZF0saSYmaS5wcmVwYXJlKCkpZm9yKGE9aS5lZGdlcyxjPWEubGVuZ3RoLG89MDtjPm87KXM9YVtvXS5lbmQoKSxyPXMueCx1PXMueSxsPWFbKytvJWNdLnN0YXJ0KCksdD1sLngsZT1sLnksKGdhKHItdCk+Q2F8fGdhKHUtZSk+Q2EpJiYoYS5zcGxpY2UobywwLG5ldyBRcihHcihpLnNpdGUscyxnYShyLWYpPENhJiZwLXU+Q2E/e3g6Zix5OmdhKHQtZik8Q2E/ZTpwfTpnYSh1LXApPENhJiZoLXI+Q2E/e3g6Z2EoZS1wKTxDYT90OmgseTpwfTpnYShyLWgpPENhJiZ1LWc+Q2E/e3g6aCx5OmdhKHQtaCk8Q2E/ZTpnfTpnYSh1LWcpPENhJiZyLWY+Q2E/e3g6Z2EoZS1nKTxDYT90OmYseTpnfTpudWxsKSxpLnNpdGUsbnVsbCkpLCsrYyl9ZnVuY3Rpb24gWXIobix0KXtyZXR1cm4gdC5hbmdsZS1uLmFuZ2xlfWZ1bmN0aW9uIFpyKCl7dHUodGhpcyksdGhpcy54PXRoaXMueT10aGlzLmFyYz10aGlzLnNpdGU9dGhpcy5jeT1udWxsfWZ1bmN0aW9uIFZyKG4pe3ZhciB0PW4uUCxlPW4uTjtpZih0JiZlKXt2YXIgcj10LnNpdGUsdT1uLnNpdGUsaT1lLnNpdGU7aWYociE9PWkpe3ZhciBvPXUueCxhPXUueSxjPXIueC1vLGw9ci55LWEscz1pLngtbyxmPWkueS1hLGg9MiooYypmLWwqcyk7aWYoIShoPj0temEpKXt2YXIgZz1jKmMrbCpsLHA9cypzK2YqZix2PShmKmctbCpwKS9oLGQ9KGMqcC1zKmcpL2gsZj1kK2EsbT1ybC5wb3AoKXx8bmV3IFpyO20uYXJjPW4sbS5zaXRlPXUsbS54PXYrbyxtLnk9ZitNYXRoLnNxcnQodip2K2QqZCksbS5jeT1mLG4uY2lyY2xlPW07Zm9yKHZhciB5PW51bGwsTT10bC5fO007KWlmKG0ueTxNLnl8fG0ueT09PU0ueSYmbS54PD1NLngpe2lmKCFNLkwpe3k9TS5QO2JyZWFrfU09TS5MfWVsc2V7aWYoIU0uUil7eT1NO2JyZWFrfU09TS5SfXRsLmluc2VydCh5LG0pLHl8fChubD1tKX19fX1mdW5jdGlvbiBYcihuKXt2YXIgdD1uLmNpcmNsZTt0JiYodC5QfHwobmw9dC5OKSx0bC5yZW1vdmUodCkscmwucHVzaCh0KSx0dSh0KSxuLmNpcmNsZT1udWxsKX1mdW5jdGlvbiAkcihuKXtmb3IodmFyIHQsZT1HYyxyPU9lKG5bMF1bMF0sblswXVsxXSxuWzFdWzBdLG5bMV1bMV0pLHU9ZS5sZW5ndGg7dS0tOyl0PWVbdV0sKCFCcih0LG4pfHwhcih0KXx8Z2EodC5hLngtdC5iLngpPENhJiZnYSh0LmEueS10LmIueSk8Q2EpJiYodC5hPXQuYj1udWxsLGUuc3BsaWNlKHUsMSkpfWZ1bmN0aW9uIEJyKG4sdCl7dmFyIGU9bi5iO2lmKGUpcmV0dXJuITA7dmFyIHIsdSxpPW4uYSxvPXRbMF1bMF0sYT10WzFdWzBdLGM9dFswXVsxXSxsPXRbMV1bMV0scz1uLmwsZj1uLnIsaD1zLngsZz1zLnkscD1mLngsdj1mLnksZD0oaCtwKS8yLG09KGcrdikvMjtpZih2PT09Zyl7aWYobz5kfHxkPj1hKXJldHVybjtpZihoPnApe2lmKGkpe2lmKGkueT49bClyZXR1cm59ZWxzZSBpPXt4OmQseTpjfTtlPXt4OmQseTpsfX1lbHNle2lmKGkpe2lmKGkueTxjKXJldHVybn1lbHNlIGk9e3g6ZCx5Omx9O2U9e3g6ZCx5OmN9fX1lbHNlIGlmKHI9KGgtcCkvKHYtZyksdT1tLXIqZCwtMT5yfHxyPjEpaWYoaD5wKXtpZihpKXtpZihpLnk+PWwpcmV0dXJufWVsc2UgaT17eDooYy11KS9yLHk6Y307ZT17eDoobC11KS9yLHk6bH19ZWxzZXtpZihpKXtpZihpLnk8YylyZXR1cm59ZWxzZSBpPXt4OihsLXUpL3IseTpsfTtlPXt4OihjLXUpL3IseTpjfX1lbHNlIGlmKHY+Zyl7aWYoaSl7aWYoaS54Pj1hKXJldHVybn1lbHNlIGk9e3g6byx5OnIqbyt1fTtlPXt4OmEseTpyKmErdX19ZWxzZXtpZihpKXtpZihpLng8bylyZXR1cm59ZWxzZSBpPXt4OmEseTpyKmErdX07ZT17eDpvLHk6cipvK3V9fXJldHVybiBuLmE9aSxuLmI9ZSwhMH1mdW5jdGlvbiBXcihuLHQpe3RoaXMubD1uLHRoaXMucj10LHRoaXMuYT10aGlzLmI9bnVsbH1mdW5jdGlvbiBKcihuLHQsZSxyKXt2YXIgdT1uZXcgV3Iobix0KTtyZXR1cm4gR2MucHVzaCh1KSxlJiZLcih1LG4sdCxlKSxyJiZLcih1LHQsbixyKSxLY1tuLmldLmVkZ2VzLnB1c2gobmV3IFFyKHUsbix0KSksS2NbdC5pXS5lZGdlcy5wdXNoKG5ldyBRcih1LHQsbikpLHV9ZnVuY3Rpb24gR3Iobix0LGUpe3ZhciByPW5ldyBXcihuLG51bGwpO3JldHVybiByLmE9dCxyLmI9ZSxHYy5wdXNoKHIpLHJ9ZnVuY3Rpb24gS3Iobix0LGUscil7bi5hfHxuLmI/bi5sPT09ZT9uLmI9cjpuLmE9cjoobi5hPXIsbi5sPXQsbi5yPWUpfWZ1bmN0aW9uIFFyKG4sdCxlKXt2YXIgcj1uLmEsdT1uLmI7dGhpcy5lZGdlPW4sdGhpcy5zaXRlPXQsdGhpcy5hbmdsZT1lP01hdGguYXRhbjIoZS55LXQueSxlLngtdC54KTpuLmw9PT10P01hdGguYXRhbjIodS54LXIueCxyLnktdS55KTpNYXRoLmF0YW4yKHIueC11LngsdS55LXIueSl9ZnVuY3Rpb24gbnUoKXt0aGlzLl89bnVsbH1mdW5jdGlvbiB0dShuKXtuLlU9bi5DPW4uTD1uLlI9bi5QPW4uTj1udWxsfWZ1bmN0aW9uIGV1KG4sdCl7dmFyIGU9dCxyPXQuUix1PWUuVTt1P3UuTD09PWU/dS5MPXI6dS5SPXI6bi5fPXIsci5VPXUsZS5VPXIsZS5SPXIuTCxlLlImJihlLlIuVT1lKSxyLkw9ZX1mdW5jdGlvbiBydShuLHQpe3ZhciBlPXQscj10LkwsdT1lLlU7dT91Lkw9PT1lP3UuTD1yOnUuUj1yOm4uXz1yLHIuVT11LGUuVT1yLGUuTD1yLlIsZS5MJiYoZS5MLlU9ZSksci5SPWV9ZnVuY3Rpb24gdXUobil7Zm9yKDtuLkw7KW49bi5MO3JldHVybiBufWZ1bmN0aW9uIGl1KG4sdCl7dmFyIGUscix1LGk9bi5zb3J0KG91KS5wb3AoKTtmb3IoR2M9W10sS2M9bmV3IEFycmF5KG4ubGVuZ3RoKSxRYz1uZXcgbnUsdGw9bmV3IG51OzspaWYodT1ubCxpJiYoIXV8fGkueTx1Lnl8fGkueT09PXUueSYmaS54PHUueCkpKGkueCE9PWV8fGkueSE9PXIpJiYoS2NbaS5pXT1uZXcgT3IoaSksanIoaSksZT1pLngscj1pLnkpLGk9bi5wb3AoKTtlbHNle2lmKCF1KWJyZWFrO1VyKHUuYXJjKX10JiYoJHIodCksSXIodCkpO3ZhciBvPXtjZWxsczpLYyxlZGdlczpHY307cmV0dXJuIFFjPXRsPUdjPUtjPW51bGwsb31mdW5jdGlvbiBvdShuLHQpe3JldHVybiB0Lnktbi55fHx0Lngtbi54fWZ1bmN0aW9uIGF1KG4sdCxlKXtyZXR1cm4obi54LWUueCkqKHQueS1uLnkpLShuLngtdC54KSooZS55LW4ueSl9ZnVuY3Rpb24gY3Uobil7cmV0dXJuIG4ueH1mdW5jdGlvbiBsdShuKXtyZXR1cm4gbi55fWZ1bmN0aW9uIHN1KCl7cmV0dXJue2xlYWY6ITAsbm9kZXM6W10scG9pbnQ6bnVsbCx4Om51bGwseTpudWxsfX1mdW5jdGlvbiBmdShuLHQsZSxyLHUsaSl7aWYoIW4odCxlLHIsdSxpKSl7dmFyIG89LjUqKGUrdSksYT0uNSoocitpKSxjPXQubm9kZXM7Y1swXSYmZnUobixjWzBdLGUscixvLGEpLGNbMV0mJmZ1KG4sY1sxXSxvLHIsdSxhKSxjWzJdJiZmdShuLGNbMl0sZSxhLG8saSksY1szXSYmZnUobixjWzNdLG8sYSx1LGkpfX1mdW5jdGlvbiBodShuLHQsZSxyLHUsaSxvKXt2YXIgYSxjPTEvMDtyZXR1cm4gZnVuY3Rpb24gbChuLHMsZixoLGcpe2lmKCEocz5pfHxmPm98fHI+aHx8dT5nKSl7aWYocD1uLnBvaW50KXt2YXIgcCx2PXQtbi54LGQ9ZS1uLnksbT12KnYrZCpkO2lmKGM+bSl7dmFyIHk9TWF0aC5zcXJ0KGM9bSk7cj10LXksdT1lLXksaT10K3ksbz1lK3ksYT1wfX1mb3IodmFyIE09bi5ub2Rlcyx4PS41KihzK2gpLGI9LjUqKGYrZyksXz10Pj14LHc9ZT49YixTPXc8PDF8XyxrPVMrNDtrPlM7KytTKWlmKG49TVszJlNdKXN3aXRjaCgzJlMpe2Nhc2UgMDpsKG4scyxmLHgsYik7YnJlYWs7Y2FzZSAxOmwobix4LGYsaCxiKTticmVhaztjYXNlIDI6bChuLHMsYix4LGcpO2JyZWFrO2Nhc2UgMzpsKG4seCxiLGgsZyl9fX0obixyLHUsaSxvKSxhfWZ1bmN0aW9uIGd1KG4sdCl7bj10YS5yZ2IobiksdD10YS5yZ2IodCk7dmFyIGU9bi5yLHI9bi5nLHU9bi5iLGk9dC5yLWUsbz10LmctcixhPXQuYi11O3JldHVybiBmdW5jdGlvbihuKXtyZXR1cm4iIyIreHQoTWF0aC5yb3VuZChlK2kqbikpK3h0KE1hdGgucm91bmQocitvKm4pKSt4dChNYXRoLnJvdW5kKHUrYSpuKSl9fWZ1bmN0aW9uIHB1KG4sdCl7dmFyIGUscj17fSx1PXt9O2ZvcihlIGluIG4pZSBpbiB0P3JbZV09bXUobltlXSx0W2VdKTp1W2VdPW5bZV07Zm9yKGUgaW4gdCllIGluIG58fCh1W2VdPXRbZV0pO3JldHVybiBmdW5jdGlvbihuKXtmb3IoZSBpbiByKXVbZV09cltlXShuKTtyZXR1cm4gdX19ZnVuY3Rpb24gdnUobix0KXtyZXR1cm4gbj0rbix0PSt0LGZ1bmN0aW9uKGUpe3JldHVybiBuKigxLWUpK3QqZX19ZnVuY3Rpb24gZHUobix0KXt2YXIgZSxyLHUsaT1pbC5sYXN0SW5kZXg9b2wubGFzdEluZGV4PTAsbz0tMSxhPVtdLGM9W107Zm9yKG4rPSIiLHQrPSIiOyhlPWlsLmV4ZWMobikpJiYocj1vbC5leGVjKHQpKTspKHU9ci5pbmRleCk+aSYmKHU9dC5zbGljZShpLHUpLGFbb10/YVtvXSs9dTphWysrb109dSksKGU9ZVswXSk9PT0ocj1yWzBdKT9hW29dP2Fbb10rPXI6YVsrK29dPXI6KGFbKytvXT1udWxsLGMucHVzaCh7aTpvLHg6dnUoZSxyKX0pKSxpPW9sLmxhc3RJbmRleDtyZXR1cm4gaTx0Lmxlbmd0aCYmKHU9dC5zbGljZShpKSxhW29dP2Fbb10rPXU6YVsrK29dPXUpLGEubGVuZ3RoPDI/Y1swXT8odD1jWzBdLngsZnVuY3Rpb24obil7cmV0dXJuIHQobikrIiJ9KTpmdW5jdGlvbigpe3JldHVybiB0fToodD1jLmxlbmd0aCxmdW5jdGlvbihuKXtmb3IodmFyIGUscj0wO3Q+cjsrK3IpYVsoZT1jW3JdKS5pXT1lLngobik7cmV0dXJuIGEuam9pbigiIil9KX1mdW5jdGlvbiBtdShuLHQpe2Zvcih2YXIgZSxyPXRhLmludGVycG9sYXRvcnMubGVuZ3RoOy0tcj49MCYmIShlPXRhLmludGVycG9sYXRvcnNbcl0obix0KSk7KTtyZXR1cm4gZX1mdW5jdGlvbiB5dShuLHQpe3ZhciBlLHI9W10sdT1bXSxpPW4ubGVuZ3RoLG89dC5sZW5ndGgsYT1NYXRoLm1pbihuLmxlbmd0aCx0Lmxlbmd0aCk7Zm9yKGU9MDthPmU7KytlKXIucHVzaChtdShuW2VdLHRbZV0pKTtmb3IoO2k+ZTsrK2UpdVtlXT1uW2VdO2Zvcig7bz5lOysrZSl1W2VdPXRbZV07cmV0dXJuIGZ1bmN0aW9uKG4pe2ZvcihlPTA7YT5lOysrZSl1W2VdPXJbZV0obik7cmV0dXJuIHV9fWZ1bmN0aW9uIE11KG4pe3JldHVybiBmdW5jdGlvbih0KXtyZXR1cm4gMD49dD8wOnQ+PTE/MTpuKHQpfX1mdW5jdGlvbiB4dShuKXtyZXR1cm4gZnVuY3Rpb24odCl7cmV0dXJuIDEtbigxLXQpfX1mdW5jdGlvbiBidShuKXtyZXR1cm4gZnVuY3Rpb24odCl7cmV0dXJuLjUqKC41PnQ/bigyKnQpOjItbigyLTIqdCkpfX1mdW5jdGlvbiBfdShuKXtyZXR1cm4gbipufWZ1bmN0aW9uIHd1KG4pe3JldHVybiBuKm4qbn1mdW5jdGlvbiBTdShuKXtpZigwPj1uKXJldHVybiAwO2lmKG4+PTEpcmV0dXJuIDE7dmFyIHQ9bipuLGU9dCpuO3JldHVybiA0KiguNT5uP2U6Myoobi10KStlLS43NSl9ZnVuY3Rpb24ga3Uobil7cmV0dXJuIGZ1bmN0aW9uKHQpe3JldHVybiBNYXRoLnBvdyh0LG4pfX1mdW5jdGlvbiBFdShuKXtyZXR1cm4gMS1NYXRoLmNvcyhuKlJhKX1mdW5jdGlvbiBBdShuKXtyZXR1cm4gTWF0aC5wb3coMiwxMCoobi0xKSl9ZnVuY3Rpb24gTnUobil7cmV0dXJuIDEtTWF0aC5zcXJ0KDEtbipuKX1mdW5jdGlvbiBDdShuLHQpe3ZhciBlO3JldHVybiBhcmd1bWVudHMubGVuZ3RoPDImJih0PS40NSksYXJndW1lbnRzLmxlbmd0aD9lPXQvTGEqTWF0aC5hc2luKDEvbik6KG49MSxlPXQvNCksZnVuY3Rpb24ocil7cmV0dXJuIDErbipNYXRoLnBvdygyLC0xMCpyKSpNYXRoLnNpbigoci1lKSpMYS90KX19ZnVuY3Rpb24genUobil7cmV0dXJuIG58fChuPTEuNzAxNTgpLGZ1bmN0aW9uKHQpe3JldHVybiB0KnQqKChuKzEpKnQtbil9fWZ1bmN0aW9uIHF1KG4pe3JldHVybiAxLzIuNzU+bj83LjU2MjUqbipuOjIvMi43NT5uPzcuNTYyNSoobi09MS41LzIuNzUpKm4rLjc1OjIuNS8yLjc1Pm4/Ny41NjI1KihuLT0yLjI1LzIuNzUpKm4rLjkzNzU6Ny41NjI1KihuLT0yLjYyNS8yLjc1KSpuKy45ODQzNzV9ZnVuY3Rpb24gTHUobix0KXtuPXRhLmhjbChuKSx0PXRhLmhjbCh0KTt2YXIgZT1uLmgscj1uLmMsdT1uLmwsaT10LmgtZSxvPXQuYy1yLGE9dC5sLXU7cmV0dXJuIGlzTmFOKG8pJiYobz0wLHI9aXNOYU4ocik/dC5jOnIpLGlzTmFOKGkpPyhpPTAsZT1pc05hTihlKT90Lmg6ZSk6aT4xODA/aS09MzYwOi0xODA+aSYmKGkrPTM2MCksZnVuY3Rpb24obil7cmV0dXJuIHN0KGUraSpuLHIrbypuLHUrYSpuKSsiIn19ZnVuY3Rpb24gVHUobix0KXtuPXRhLmhzbChuKSx0PXRhLmhzbCh0KTt2YXIgZT1uLmgscj1uLnMsdT1uLmwsaT10LmgtZSxvPXQucy1yLGE9dC5sLXU7cmV0dXJuIGlzTmFOKG8pJiYobz0wLHI9aXNOYU4ocik/dC5zOnIpLGlzTmFOKGkpPyhpPTAsZT1pc05hTihlKT90Lmg6ZSk6aT4xODA/aS09MzYwOi0xODA+aSYmKGkrPTM2MCksZnVuY3Rpb24obil7cmV0dXJuIGN0KGUraSpuLHIrbypuLHUrYSpuKSsiIn19ZnVuY3Rpb24gUnUobix0KXtuPXRhLmxhYihuKSx0PXRhLmxhYih0KTt2YXIgZT1uLmwscj1uLmEsdT1uLmIsaT10LmwtZSxvPXQuYS1yLGE9dC5iLXU7cmV0dXJuIGZ1bmN0aW9uKG4pe3JldHVybiBodChlK2kqbixyK28qbix1K2EqbikrIiJ9fWZ1bmN0aW9uIER1KG4sdCl7cmV0dXJuIHQtPW4sZnVuY3Rpb24oZSl7cmV0dXJuIE1hdGgucm91bmQobit0KmUpfX1mdW5jdGlvbiBQdShuKXt2YXIgdD1bbi5hLG4uYl0sZT1bbi5jLG4uZF0scj1qdSh0KSx1PVV1KHQsZSksaT1qdShGdShlLHQsLXUpKXx8MDt0WzBdKmVbMV08ZVswXSp0WzFdJiYodFswXSo9LTEsdFsxXSo9LTEscio9LTEsdSo9LTEpLHRoaXMucm90YXRlPShyP01hdGguYXRhbjIodFsxXSx0WzBdKTpNYXRoLmF0YW4yKC1lWzBdLGVbMV0pKSpQYSx0aGlzLnRyYW5zbGF0ZT1bbi5lLG4uZl0sdGhpcy5zY2FsZT1bcixpXSx0aGlzLnNrZXc9aT9NYXRoLmF0YW4yKHUsaSkqUGE6MH1mdW5jdGlvbiBVdShuLHQpe3JldHVybiBuWzBdKnRbMF0rblsxXSp0WzFdfWZ1bmN0aW9uIGp1KG4pe3ZhciB0PU1hdGguc3FydChVdShuLG4pKTtyZXR1cm4gdCYmKG5bMF0vPXQsblsxXS89dCksdH1mdW5jdGlvbiBGdShuLHQsZSl7cmV0dXJuIG5bMF0rPWUqdFswXSxuWzFdKz1lKnRbMV0sbn1mdW5jdGlvbiBIdShuLHQpe3ZhciBlLHI9W10sdT1bXSxpPXRhLnRyYW5zZm9ybShuKSxvPXRhLnRyYW5zZm9ybSh0KSxhPWkudHJhbnNsYXRlLGM9by50cmFuc2xhdGUsbD1pLnJvdGF0ZSxzPW8ucm90YXRlLGY9aS5za2V3LGg9by5za2V3LGc9aS5zY2FsZSxwPW8uc2NhbGU7cmV0dXJuIGFbMF0hPWNbMF18fGFbMV0hPWNbMV0/KHIucHVzaCgidHJhbnNsYXRlKCIsbnVsbCwiLCIsbnVsbCwiKSIpLHUucHVzaCh7aToxLHg6dnUoYVswXSxjWzBdKX0se2k6Myx4OnZ1KGFbMV0sY1sxXSl9KSk6ci5wdXNoKGNbMF18fGNbMV0/InRyYW5zbGF0ZSgiK2MrIikiOiIiKSxsIT1zPyhsLXM+MTgwP3MrPTM2MDpzLWw+MTgwJiYobCs9MzYwKSx1LnB1c2goe2k6ci5wdXNoKHIucG9wKCkrInJvdGF0ZSgiLG51bGwsIikiKS0yLHg6dnUobCxzKX0pKTpzJiZyLnB1c2goci5wb3AoKSsicm90YXRlKCIrcysiKSIpLGYhPWg/dS5wdXNoKHtpOnIucHVzaChyLnBvcCgpKyJza2V3WCgiLG51bGwsIikiKS0yLHg6dnUoZixoKX0pOmgmJnIucHVzaChyLnBvcCgpKyJza2V3WCgiK2grIikiKSxnWzBdIT1wWzBdfHxnWzFdIT1wWzFdPyhlPXIucHVzaChyLnBvcCgpKyJzY2FsZSgiLG51bGwsIiwiLG51bGwsIikiKSx1LnB1c2goe2k6ZS00LHg6dnUoZ1swXSxwWzBdKX0se2k6ZS0yLHg6dnUoZ1sxXSxwWzFdKX0pKTooMSE9cFswXXx8MSE9cFsxXSkmJnIucHVzaChyLnBvcCgpKyJzY2FsZSgiK3ArIikiKSxlPXUubGVuZ3RoLGZ1bmN0aW9uKG4pe2Zvcih2YXIgdCxpPS0xOysraTxlOylyWyh0PXVbaV0pLmldPXQueChuKTtyZXR1cm4gci5qb2luKCIiKX19ZnVuY3Rpb24gT3Uobix0KXtyZXR1cm4gdD0odC09bj0rbil8fDEvdCxmdW5jdGlvbihlKXtyZXR1cm4oZS1uKS90fX1mdW5jdGlvbiBJdShuLHQpe3JldHVybiB0PSh0LT1uPStuKXx8MS90LGZ1bmN0aW9uKGUpe3JldHVybiBNYXRoLm1heCgwLE1hdGgubWluKDEsKGUtbikvdCkpfX1mdW5jdGlvbiBZdShuKXtmb3IodmFyIHQ9bi5zb3VyY2UsZT1uLnRhcmdldCxyPVZ1KHQsZSksdT1bdF07dCE9PXI7KXQ9dC5wYXJlbnQsdS5wdXNoKHQpO2Zvcih2YXIgaT11Lmxlbmd0aDtlIT09cjspdS5zcGxpY2UoaSwwLGUpLGU9ZS5wYXJlbnQ7cmV0dXJuIHV9ZnVuY3Rpb24gWnUobil7Zm9yKHZhciB0PVtdLGU9bi5wYXJlbnQ7bnVsbCE9ZTspdC5wdXNoKG4pLG49ZSxlPWUucGFyZW50O3JldHVybiB0LnB1c2gobiksdH1mdW5jdGlvbiBWdShuLHQpe2lmKG49PT10KXJldHVybiBuO2Zvcih2YXIgZT1adShuKSxyPVp1KHQpLHU9ZS5wb3AoKSxpPXIucG9wKCksbz1udWxsO3U9PT1pOylvPXUsdT1lLnBvcCgpLGk9ci5wb3AoKTtyZXR1cm4gb31mdW5jdGlvbiBYdShuKXtuLmZpeGVkfD0yfWZ1bmN0aW9uICR1KG4pe24uZml4ZWQmPS03fWZ1bmN0aW9uIEJ1KG4pe24uZml4ZWR8PTQsbi5weD1uLngsbi5weT1uLnl9ZnVuY3Rpb24gV3Uobil7bi5maXhlZCY9LTV9ZnVuY3Rpb24gSnUobix0LGUpe3ZhciByPTAsdT0wO2lmKG4uY2hhcmdlPTAsIW4ubGVhZilmb3IodmFyIGksbz1uLm5vZGVzLGE9by5sZW5ndGgsYz0tMTsrK2M8YTspaT1vW2NdLG51bGwhPWkmJihKdShpLHQsZSksbi5jaGFyZ2UrPWkuY2hhcmdlLHIrPWkuY2hhcmdlKmkuY3gsdSs9aS5jaGFyZ2UqaS5jeSk7aWYobi5wb2ludCl7bi5sZWFmfHwobi5wb2ludC54Kz1NYXRoLnJhbmRvbSgpLS41LG4ucG9pbnQueSs9TWF0aC5yYW5kb20oKS0uNSk7dmFyIGw9dCplW24ucG9pbnQuaW5kZXhdO24uY2hhcmdlKz1uLnBvaW50Q2hhcmdlPWwscis9bCpuLnBvaW50LngsdSs9bCpuLnBvaW50Lnl9bi5jeD1yL24uY2hhcmdlLG4uY3k9dS9uLmNoYXJnZX1mdW5jdGlvbiBHdShuLHQpe3JldHVybiB0YS5yZWJpbmQobix0LCJzb3J0IiwiY2hpbGRyZW4iLCJ2YWx1ZSIpLG4ubm9kZXM9bixuLmxpbmtzPXJpLG59ZnVuY3Rpb24gS3Uobix0KXtmb3IodmFyIGU9W25dO251bGwhPShuPWUucG9wKCkpOylpZih0KG4pLCh1PW4uY2hpbGRyZW4pJiYocj11Lmxlbmd0aCkpZm9yKHZhciByLHU7LS1yPj0wOyllLnB1c2godVtyXSl9ZnVuY3Rpb24gUXUobix0KXtmb3IodmFyIGU9W25dLHI9W107bnVsbCE9KG49ZS5wb3AoKSk7KWlmKHIucHVzaChuKSwoaT1uLmNoaWxkcmVuKSYmKHU9aS5sZW5ndGgpKWZvcih2YXIgdSxpLG89LTE7KytvPHU7KWUucHVzaChpW29dKTtmb3IoO251bGwhPShuPXIucG9wKCkpOyl0KG4pfWZ1bmN0aW9uIG5pKG4pe3JldHVybiBuLmNoaWxkcmVufWZ1bmN0aW9uIHRpKG4pe3JldHVybiBuLnZhbHVlfWZ1bmN0aW9uIGVpKG4sdCl7cmV0dXJuIHQudmFsdWUtbi52YWx1ZX1mdW5jdGlvbiByaShuKXtyZXR1cm4gdGEubWVyZ2Uobi5tYXAoZnVuY3Rpb24obil7cmV0dXJuKG4uY2hpbGRyZW58fFtdKS5tYXAoZnVuY3Rpb24odCl7cmV0dXJue3NvdXJjZTpuLHRhcmdldDp0fX0pfSkpfWZ1bmN0aW9uIHVpKG4pe3JldHVybiBuLnh9ZnVuY3Rpb24gaWkobil7cmV0dXJuIG4ueX1mdW5jdGlvbiBvaShuLHQsZSl7bi55MD10LG4ueT1lfWZ1bmN0aW9uIGFpKG4pe3JldHVybiB0YS5yYW5nZShuLmxlbmd0aCl9ZnVuY3Rpb24gY2kobil7Zm9yKHZhciB0PS0xLGU9blswXS5sZW5ndGgscj1bXTsrK3Q8ZTspclt0XT0wO3JldHVybiByfWZ1bmN0aW9uIGxpKG4pe2Zvcih2YXIgdCxlPTEscj0wLHU9blswXVsxXSxpPW4ubGVuZ3RoO2k+ZTsrK2UpKHQ9bltlXVsxXSk+dSYmKHI9ZSx1PXQpO3JldHVybiByfWZ1bmN0aW9uIHNpKG4pe3JldHVybiBuLnJlZHVjZShmaSwwKX1mdW5jdGlvbiBmaShuLHQpe3JldHVybiBuK3RbMV19ZnVuY3Rpb24gaGkobix0KXtyZXR1cm4gZ2kobixNYXRoLmNlaWwoTWF0aC5sb2codC5sZW5ndGgpL01hdGguTE4yKzEpKX1mdW5jdGlvbiBnaShuLHQpe2Zvcih2YXIgZT0tMSxyPStuWzBdLHU9KG5bMV0tcikvdCxpPVtdOysrZTw9dDspaVtlXT11KmUrcjtyZXR1cm4gaX1mdW5jdGlvbiBwaShuKXtyZXR1cm5bdGEubWluKG4pLHRhLm1heChuKV19ZnVuY3Rpb24gdmkobix0KXtyZXR1cm4gbi52YWx1ZS10LnZhbHVlfWZ1bmN0aW9uIGRpKG4sdCl7dmFyIGU9bi5fcGFja19uZXh0O24uX3BhY2tfbmV4dD10LHQuX3BhY2tfcHJldj1uLHQuX3BhY2tfbmV4dD1lLGUuX3BhY2tfcHJldj10fWZ1bmN0aW9uIG1pKG4sdCl7bi5fcGFja19uZXh0PXQsdC5fcGFja19wcmV2PW59ZnVuY3Rpb24geWkobix0KXt2YXIgZT10Lngtbi54LHI9dC55LW4ueSx1PW4ucit0LnI7cmV0dXJuLjk5OSp1KnU+ZSplK3Iqcn1mdW5jdGlvbiBNaShuKXtmdW5jdGlvbiB0KG4pe3M9TWF0aC5taW4obi54LW4ucixzKSxmPU1hdGgubWF4KG4ueCtuLnIsZiksaD1NYXRoLm1pbihuLnktbi5yLGgpLGc9TWF0aC5tYXgobi55K24ucixnKX1pZigoZT1uLmNoaWxkcmVuKSYmKGw9ZS5sZW5ndGgpKXt2YXIgZSxyLHUsaSxvLGEsYyxsLHM9MS8wLGY9LTEvMCxoPTEvMCxnPS0xLzA7aWYoZS5mb3JFYWNoKHhpKSxyPWVbMF0sci54PS1yLnIsci55PTAsdChyKSxsPjEmJih1PWVbMV0sdS54PXUucix1Lnk9MCx0KHUpLGw+MikpZm9yKGk9ZVsyXSx3aShyLHUsaSksdChpKSxkaShyLGkpLHIuX3BhY2tfcHJldj1pLGRpKGksdSksdT1yLl9wYWNrX25leHQsbz0zO2w+bztvKyspe3dpKHIsdSxpPWVbb10pO3ZhciBwPTAsdj0xLGQ9MTtmb3IoYT11Ll9wYWNrX25leHQ7YSE9PXU7YT1hLl9wYWNrX25leHQsdisrKWlmKHlpKGEsaSkpe3A9MTticmVha31pZigxPT1wKWZvcihjPXIuX3BhY2tfcHJldjtjIT09YS5fcGFja19wcmV2JiYheWkoYyxpKTtjPWMuX3BhY2tfcHJldixkKyspO3A/KGQ+dnx8dj09ZCYmdS5yPHIucj9taShyLHU9YSk6bWkocj1jLHUpLG8tLSk6KGRpKHIsaSksdT1pLHQoaSkpfXZhciBtPShzK2YpLzIseT0oaCtnKS8yLE09MDtmb3Iobz0wO2w+bztvKyspaT1lW29dLGkueC09bSxpLnktPXksTT1NYXRoLm1heChNLGkucitNYXRoLnNxcnQoaS54KmkueCtpLnkqaS55KSk7bi5yPU0sZS5mb3JFYWNoKGJpKX19ZnVuY3Rpb24geGkobil7bi5fcGFja19uZXh0PW4uX3BhY2tfcHJldj1ufWZ1bmN0aW9uIGJpKG4pe2RlbGV0ZSBuLl9wYWNrX25leHQsZGVsZXRlIG4uX3BhY2tfcHJldn1mdW5jdGlvbiBfaShuLHQsZSxyKXt2YXIgdT1uLmNoaWxkcmVuO2lmKG4ueD10Kz1yKm4ueCxuLnk9ZSs9cipuLnksbi5yKj1yLHUpZm9yKHZhciBpPS0xLG89dS5sZW5ndGg7KytpPG87KV9pKHVbaV0sdCxlLHIpfWZ1bmN0aW9uIHdpKG4sdCxlKXt2YXIgcj1uLnIrZS5yLHU9dC54LW4ueCxpPXQueS1uLnk7aWYociYmKHV8fGkpKXt2YXIgbz10LnIrZS5yLGE9dSp1K2kqaTtvKj1vLHIqPXI7dmFyIGM9LjUrKHItbykvKDIqYSksbD1NYXRoLnNxcnQoTWF0aC5tYXgoMCwyKm8qKHIrYSktKHItPWEpKnItbypvKSkvKDIqYSk7ZS54PW4ueCtjKnUrbCppLGUueT1uLnkrYyppLWwqdX1lbHNlIGUueD1uLngrcixlLnk9bi55fWZ1bmN0aW9uIFNpKG4sdCl7cmV0dXJuIG4ucGFyZW50PT10LnBhcmVudD8xOjJ9ZnVuY3Rpb24ga2kobil7dmFyIHQ9bi5jaGlsZHJlbjtyZXR1cm4gdC5sZW5ndGg/dFswXTpuLnR9ZnVuY3Rpb24gRWkobil7dmFyIHQsZT1uLmNoaWxkcmVuO3JldHVybih0PWUubGVuZ3RoKT9lW3QtMV06bi50fWZ1bmN0aW9uIEFpKG4sdCxlKXt2YXIgcj1lLyh0Lmktbi5pKTt0LmMtPXIsdC5zKz1lLG4uYys9cix0LnorPWUsdC5tKz1lfWZ1bmN0aW9uIE5pKG4pe2Zvcih2YXIgdCxlPTAscj0wLHU9bi5jaGlsZHJlbixpPXUubGVuZ3RoOy0taT49MDspdD11W2ldLHQueis9ZSx0Lm0rPWUsZSs9dC5zKyhyKz10LmMpfWZ1bmN0aW9uIENpKG4sdCxlKXtyZXR1cm4gbi5hLnBhcmVudD09PXQucGFyZW50P24uYTplfWZ1bmN0aW9uIHppKG4pe3JldHVybiAxK3RhLm1heChuLGZ1bmN0aW9uKG4pe3JldHVybiBuLnl9KX1mdW5jdGlvbiBxaShuKXtyZXR1cm4gbi5yZWR1Y2UoZnVuY3Rpb24obix0KXtyZXR1cm4gbit0Lnh9LDApL24ubGVuZ3RofWZ1bmN0aW9uIExpKG4pe3ZhciB0PW4uY2hpbGRyZW47cmV0dXJuIHQmJnQubGVuZ3RoP0xpKHRbMF0pOm59ZnVuY3Rpb24gVGkobil7dmFyIHQsZT1uLmNoaWxkcmVuO3JldHVybiBlJiYodD1lLmxlbmd0aCk/VGkoZVt0LTFdKTpufWZ1bmN0aW9uIFJpKG4pe3JldHVybnt4Om4ueCx5Om4ueSxkeDpuLmR4LGR5Om4uZHl9fWZ1bmN0aW9uIERpKG4sdCl7dmFyIGU9bi54K3RbM10scj1uLnkrdFswXSx1PW4uZHgtdFsxXS10WzNdLGk9bi5keS10WzBdLXRbMl07cmV0dXJuIDA+dSYmKGUrPXUvMix1PTApLDA+aSYmKHIrPWkvMixpPTApLHt4OmUseTpyLGR4OnUsZHk6aX19ZnVuY3Rpb24gUGkobil7dmFyIHQ9blswXSxlPW5bbi5sZW5ndGgtMV07cmV0dXJuIGU+dD9bdCxlXTpbZSx0XX1mdW5jdGlvbiBVaShuKXtyZXR1cm4gbi5yYW5nZUV4dGVudD9uLnJhbmdlRXh0ZW50KCk6UGkobi5yYW5nZSgpKX1mdW5jdGlvbiBqaShuLHQsZSxyKXt2YXIgdT1lKG5bMF0sblsxXSksaT1yKHRbMF0sdFsxXSk7cmV0dXJuIGZ1bmN0aW9uKG4pe3JldHVybiBpKHUobikpfX1mdW5jdGlvbiBGaShuLHQpe3ZhciBlLHI9MCx1PW4ubGVuZ3RoLTEsaT1uW3JdLG89blt1XTtyZXR1cm4gaT5vJiYoZT1yLHI9dSx1PWUsZT1pLGk9byxvPWUpLG5bcl09dC5mbG9vcihpKSxuW3VdPXQuY2VpbChvKSxufWZ1bmN0aW9uIEhpKG4pe3JldHVybiBuP3tmbG9vcjpmdW5jdGlvbih0KXtyZXR1cm4gTWF0aC5mbG9vcih0L24pKm59LGNlaWw6ZnVuY3Rpb24odCl7cmV0dXJuIE1hdGguY2VpbCh0L24pKm59fTptbH1mdW5jdGlvbiBPaShuLHQsZSxyKXt2YXIgdT1bXSxpPVtdLG89MCxhPU1hdGgubWluKG4ubGVuZ3RoLHQubGVuZ3RoKS0xO2ZvcihuW2FdPG5bMF0mJihuPW4uc2xpY2UoKS5yZXZlcnNlKCksdD10LnNsaWNlKCkucmV2ZXJzZSgpKTsrK288PWE7KXUucHVzaChlKG5bby0xXSxuW29dKSksaS5wdXNoKHIodFtvLTFdLHRbb10pKTtyZXR1cm4gZnVuY3Rpb24odCl7dmFyIGU9dGEuYmlzZWN0KG4sdCwxLGEpLTE7cmV0dXJuIGlbZV0odVtlXSh0KSl9fWZ1bmN0aW9uIElpKG4sdCxlLHIpe2Z1bmN0aW9uIHUoKXt2YXIgdT1NYXRoLm1pbihuLmxlbmd0aCx0Lmxlbmd0aCk+Mj9PaTpqaSxjPXI/SXU6T3U7cmV0dXJuIG89dShuLHQsYyxlKSxhPXUodCxuLGMsbXUpLGl9ZnVuY3Rpb24gaShuKXtyZXR1cm4gbyhuKX12YXIgbyxhO3JldHVybiBpLmludmVydD1mdW5jdGlvbihuKXtyZXR1cm4gYShuKX0saS5kb21haW49ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG49dC5tYXAoTnVtYmVyKSx1KCkpOm59LGkucmFuZ2U9ZnVuY3Rpb24obil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHQ9bix1KCkpOnR9LGkucmFuZ2VSb3VuZD1mdW5jdGlvbihuKXtyZXR1cm4gaS5yYW5nZShuKS5pbnRlcnBvbGF0ZShEdSl9LGkuY2xhbXA9ZnVuY3Rpb24obil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHI9bix1KCkpOnJ9LGkuaW50ZXJwb2xhdGU9ZnVuY3Rpb24obil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGU9bix1KCkpOmV9LGkudGlja3M9ZnVuY3Rpb24odCl7cmV0dXJuIFhpKG4sdCl9LGkudGlja0Zvcm1hdD1mdW5jdGlvbih0LGUpe3JldHVybiAkaShuLHQsZSl9LGkubmljZT1mdW5jdGlvbih0KXtyZXR1cm4gWmkobix0KSx1KCl9LGkuY29weT1mdW5jdGlvbigpe3JldHVybiBJaShuLHQsZSxyKX0sdSgpfWZ1bmN0aW9uIFlpKG4sdCl7cmV0dXJuIHRhLnJlYmluZChuLHQsInJhbmdlIiwicmFuZ2VSb3VuZCIsImludGVycG9sYXRlIiwiY2xhbXAiKX1mdW5jdGlvbiBaaShuLHQpe3JldHVybiBGaShuLEhpKFZpKG4sdClbMl0pKX1mdW5jdGlvbiBWaShuLHQpe251bGw9PXQmJih0PTEwKTt2YXIgZT1QaShuKSxyPWVbMV0tZVswXSx1PU1hdGgucG93KDEwLE1hdGguZmxvb3IoTWF0aC5sb2coci90KS9NYXRoLkxOMTApKSxpPXQvcip1O3JldHVybi4xNT49aT91Kj0xMDouMzU+PWk/dSo9NTouNzU+PWkmJih1Kj0yKSxlWzBdPU1hdGguY2VpbChlWzBdL3UpKnUsZVsxXT1NYXRoLmZsb29yKGVbMV0vdSkqdSsuNSp1LGVbMl09dSxlfWZ1bmN0aW9uIFhpKG4sdCl7cmV0dXJuIHRhLnJhbmdlLmFwcGx5KHRhLFZpKG4sdCkpfWZ1bmN0aW9uICRpKG4sdCxlKXt2YXIgcj1WaShuLHQpO2lmKGUpe3ZhciB1PWljLmV4ZWMoZSk7aWYodS5zaGlmdCgpLCJzIj09PXVbOF0pe3ZhciBpPXRhLmZvcm1hdFByZWZpeChNYXRoLm1heChnYShyWzBdKSxnYShyWzFdKSkpO3JldHVybiB1WzddfHwodVs3XT0iLiIrQmkoaS5zY2FsZShyWzJdKSkpLHVbOF09ImYiLGU9dGEuZm9ybWF0KHUuam9pbigiIikpLGZ1bmN0aW9uKG4pe3JldHVybiBlKGkuc2NhbGUobikpK2kuc3ltYm9sfX11WzddfHwodVs3XT0iLiIrV2kodVs4XSxyKSksZT11LmpvaW4oIiIpfWVsc2UgZT0iLC4iK0JpKHJbMl0pKyJmIjtyZXR1cm4gdGEuZm9ybWF0KGUpfWZ1bmN0aW9uIEJpKG4pe3JldHVybi1NYXRoLmZsb29yKE1hdGgubG9nKG4pL01hdGguTE4xMCsuMDEpfWZ1bmN0aW9uIFdpKG4sdCl7dmFyIGU9QmkodFsyXSk7cmV0dXJuIG4gaW4geWw/TWF0aC5hYnMoZS1CaShNYXRoLm1heChnYSh0WzBdKSxnYSh0WzFdKSkpKSsgKygiZSIhPT1uKTplLTIqKCIlIj09PW4pfWZ1bmN0aW9uIEppKG4sdCxlLHIpe2Z1bmN0aW9uIHUobil7cmV0dXJuKGU/TWF0aC5sb2coMD5uPzA6bik6LU1hdGgubG9nKG4+MD8wOi1uKSkvTWF0aC5sb2codCl9ZnVuY3Rpb24gaShuKXtyZXR1cm4gZT9NYXRoLnBvdyh0LG4pOi1NYXRoLnBvdyh0LC1uKX1mdW5jdGlvbiBvKHQpe3JldHVybiBuKHUodCkpfXJldHVybiBvLmludmVydD1mdW5jdGlvbih0KXtyZXR1cm4gaShuLmludmVydCh0KSl9LG8uZG9tYWluPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhlPXRbMF0+PTAsbi5kb21haW4oKHI9dC5tYXAoTnVtYmVyKSkubWFwKHUpKSxvKTpyfSxvLmJhc2U9ZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHQ9K2Usbi5kb21haW4oci5tYXAodSkpLG8pOnR9LG8ubmljZT1mdW5jdGlvbigpe3ZhciB0PUZpKHIubWFwKHUpLGU/TWF0aDp4bCk7cmV0dXJuIG4uZG9tYWluKHQpLHI9dC5tYXAoaSksb30sby50aWNrcz1mdW5jdGlvbigpe3ZhciBuPVBpKHIpLG89W10sYT1uWzBdLGM9blsxXSxsPU1hdGguZmxvb3IodShhKSkscz1NYXRoLmNlaWwodShjKSksZj10JTE/Mjp0O2lmKGlzRmluaXRlKHMtbCkpe2lmKGUpe2Zvcig7cz5sO2wrKylmb3IodmFyIGg9MTtmPmg7aCsrKW8ucHVzaChpKGwpKmgpO28ucHVzaChpKGwpKX1lbHNlIGZvcihvLnB1c2goaShsKSk7bCsrPHM7KWZvcih2YXIgaD1mLTE7aD4wO2gtLSlvLnB1c2goaShsKSpoKTtmb3IobD0wO29bbF08YTtsKyspO2ZvcihzPW8ubGVuZ3RoO29bcy0xXT5jO3MtLSk7bz1vLnNsaWNlKGwscyl9cmV0dXJuIG99LG8udGlja0Zvcm1hdD1mdW5jdGlvbihuLHQpe2lmKCFhcmd1bWVudHMubGVuZ3RoKXJldHVybiBNbDthcmd1bWVudHMubGVuZ3RoPDI/dD1NbDoiZnVuY3Rpb24iIT10eXBlb2YgdCYmKHQ9dGEuZm9ybWF0KHQpKTt2YXIgcixhPU1hdGgubWF4KC4xLG4vby50aWNrcygpLmxlbmd0aCksYz1lPyhyPTFlLTEyLE1hdGguY2VpbCk6KHI9LTFlLTEyLE1hdGguZmxvb3IpO3JldHVybiBmdW5jdGlvbihuKXtyZXR1cm4gbi9pKGModShuKStyKSk8PWE/dChuKToiIn19LG8uY29weT1mdW5jdGlvbigpe3JldHVybiBKaShuLmNvcHkoKSx0LGUscil9LFlpKG8sbil9ZnVuY3Rpb24gR2kobix0LGUpe2Z1bmN0aW9uIHIodCl7cmV0dXJuIG4odSh0KSl9dmFyIHU9S2kodCksaT1LaSgxL3QpO3JldHVybiByLmludmVydD1mdW5jdGlvbih0KXtyZXR1cm4gaShuLmludmVydCh0KSl9LHIuZG9tYWluPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhuLmRvbWFpbigoZT10Lm1hcChOdW1iZXIpKS5tYXAodSkpLHIpOmV9LHIudGlja3M9ZnVuY3Rpb24obil7cmV0dXJuIFhpKGUsbil9LHIudGlja0Zvcm1hdD1mdW5jdGlvbihuLHQpe3JldHVybiAkaShlLG4sdCl9LHIubmljZT1mdW5jdGlvbihuKXtyZXR1cm4gci5kb21haW4oWmkoZSxuKSl9LHIuZXhwb25lbnQ9ZnVuY3Rpb24obyl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHU9S2kodD1vKSxpPUtpKDEvdCksbi5kb21haW4oZS5tYXAodSkpLHIpOnR9LHIuY29weT1mdW5jdGlvbigpe3JldHVybiBHaShuLmNvcHkoKSx0LGUpfSxZaShyLG4pfWZ1bmN0aW9uIEtpKG4pe3JldHVybiBmdW5jdGlvbih0KXtyZXR1cm4gMD50Py1NYXRoLnBvdygtdCxuKTpNYXRoLnBvdyh0LG4pfX1mdW5jdGlvbiBRaShuLHQpe2Z1bmN0aW9uIGUoZSl7cmV0dXJuIGlbKCh1LmdldChlKXx8KCJyYW5nZSI9PT10LnQ/dS5zZXQoZSxuLnB1c2goZSkpOjAvMCkpLTEpJWkubGVuZ3RoXX1mdW5jdGlvbiByKHQsZSl7cmV0dXJuIHRhLnJhbmdlKG4ubGVuZ3RoKS5tYXAoZnVuY3Rpb24obil7cmV0dXJuIHQrZSpufSl9dmFyIHUsaSxvO3JldHVybiBlLmRvbWFpbj1mdW5jdGlvbihyKXtpZighYXJndW1lbnRzLmxlbmd0aClyZXR1cm4gbjtuPVtdLHU9bmV3IGw7Zm9yKHZhciBpLG89LTEsYT1yLmxlbmd0aDsrK288YTspdS5oYXMoaT1yW29dKXx8dS5zZXQoaSxuLnB1c2goaSkpO3JldHVybiBlW3QudF0uYXBwbHkoZSx0LmEpfSxlLnJhbmdlPWZ1bmN0aW9uKG4pe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhpPW4sbz0wLHQ9e3Q6InJhbmdlIixhOmFyZ3VtZW50c30sZSk6aX0sZS5yYW5nZVBvaW50cz1mdW5jdGlvbih1LGEpe2FyZ3VtZW50cy5sZW5ndGg8MiYmKGE9MCk7dmFyIGM9dVswXSxsPXVbMV0scz1uLmxlbmd0aDwyPyhjPShjK2wpLzIsMCk6KGwtYykvKG4ubGVuZ3RoLTErYSk7cmV0dXJuIGk9cihjK3MqYS8yLHMpLG89MCx0PXt0OiJyYW5nZVBvaW50cyIsYTphcmd1bWVudHN9LGV9LGUucmFuZ2VSb3VuZFBvaW50cz1mdW5jdGlvbih1LGEpe2FyZ3VtZW50cy5sZW5ndGg8MiYmKGE9MCk7dmFyIGM9dVswXSxsPXVbMV0scz1uLmxlbmd0aDwyPyhjPWw9TWF0aC5yb3VuZCgoYytsKS8yKSwwKToobC1jKS8obi5sZW5ndGgtMSthKXwwO3JldHVybiBpPXIoYytNYXRoLnJvdW5kKHMqYS8yKyhsLWMtKG4ubGVuZ3RoLTErYSkqcykvMikscyksbz0wLHQ9e3Q6InJhbmdlUm91bmRQb2ludHMiLGE6YXJndW1lbnRzfSxlfSxlLnJhbmdlQmFuZHM9ZnVuY3Rpb24odSxhLGMpe2FyZ3VtZW50cy5sZW5ndGg8MiYmKGE9MCksYXJndW1lbnRzLmxlbmd0aDwzJiYoYz1hKTt2YXIgbD11WzFdPHVbMF0scz11W2wtMF0sZj11WzEtbF0saD0oZi1zKS8obi5sZW5ndGgtYSsyKmMpO3JldHVybiBpPXIocytoKmMsaCksbCYmaS5yZXZlcnNlKCksbz1oKigxLWEpLHQ9e3Q6InJhbmdlQmFuZHMiLGE6YXJndW1lbnRzfSxlfSxlLnJhbmdlUm91bmRCYW5kcz1mdW5jdGlvbih1LGEsYyl7YXJndW1lbnRzLmxlbmd0aDwyJiYoYT0wKSxhcmd1bWVudHMubGVuZ3RoPDMmJihjPWEpO3ZhciBsPXVbMV08dVswXSxzPXVbbC0wXSxmPXVbMS1sXSxoPU1hdGguZmxvb3IoKGYtcykvKG4ubGVuZ3RoLWErMipjKSk7cmV0dXJuIGk9cihzK01hdGgucm91bmQoKGYtcy0obi5sZW5ndGgtYSkqaCkvMiksaCksbCYmaS5yZXZlcnNlKCksbz1NYXRoLnJvdW5kKGgqKDEtYSkpLHQ9e3Q6InJhbmdlUm91bmRCYW5kcyIsYTphcmd1bWVudHN9LGV9LGUucmFuZ2VCYW5kPWZ1bmN0aW9uKCl7cmV0dXJuIG99LGUucmFuZ2VFeHRlbnQ9ZnVuY3Rpb24oKXtyZXR1cm4gUGkodC5hWzBdKX0sZS5jb3B5PWZ1bmN0aW9uKCl7cmV0dXJuIFFpKG4sdCl9LGUuZG9tYWluKG4pfWZ1bmN0aW9uIG5vKG4sdCl7ZnVuY3Rpb24gaSgpe3ZhciBlPTAscj10Lmxlbmd0aDtmb3IoYT1bXTsrK2U8cjspYVtlLTFdPXRhLnF1YW50aWxlKG4sZS9yKTtyZXR1cm4gb31mdW5jdGlvbiBvKG4pe3JldHVybiBpc05hTihuPStuKT92b2lkIDA6dFt0YS5iaXNlY3QoYSxuKV19dmFyIGE7cmV0dXJuIG8uZG9tYWluPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhuPXQubWFwKHIpLmZpbHRlcih1KS5zb3J0KGUpLGkoKSk6bn0sby5yYW5nZT1mdW5jdGlvbihuKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8odD1uLGkoKSk6dH0sby5xdWFudGlsZXM9ZnVuY3Rpb24oKXtyZXR1cm4gYX0sby5pbnZlcnRFeHRlbnQ9ZnVuY3Rpb24oZSl7cmV0dXJuIGU9dC5pbmRleE9mKGUpLDA+ZT9bMC8wLDAvMF06W2U+MD9hW2UtMV06blswXSxlPGEubGVuZ3RoP2FbZV06bltuLmxlbmd0aC0xXV19LG8uY29weT1mdW5jdGlvbigpe3JldHVybiBubyhuLHQpfSxpKCl9ZnVuY3Rpb24gdG8obix0LGUpe2Z1bmN0aW9uIHIodCl7cmV0dXJuIGVbTWF0aC5tYXgoMCxNYXRoLm1pbihvLE1hdGguZmxvb3IoaSoodC1uKSkpKV19ZnVuY3Rpb24gdSgpe3JldHVybiBpPWUubGVuZ3RoLyh0LW4pLG89ZS5sZW5ndGgtMSxyfXZhciBpLG87cmV0dXJuIHIuZG9tYWluPWZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhuPStlWzBdLHQ9K2VbZS5sZW5ndGgtMV0sdSgpKTpbbix0XX0sci5yYW5nZT1mdW5jdGlvbihuKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oZT1uLHUoKSk6ZX0sci5pbnZlcnRFeHRlbnQ9ZnVuY3Rpb24odCl7cmV0dXJuIHQ9ZS5pbmRleE9mKHQpLHQ9MD50PzAvMDp0L2krbixbdCx0KzEvaV19LHIuY29weT1mdW5jdGlvbigpe3JldHVybiB0byhuLHQsZSl9LHUoKX1mdW5jdGlvbiBlbyhuLHQpe2Z1bmN0aW9uIGUoZSl7cmV0dXJuIGU+PWU/dFt0YS5iaXNlY3QobixlKV06dm9pZCAwfXJldHVybiBlLmRvbWFpbj1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obj10LGUpOm59LGUucmFuZ2U9ZnVuY3Rpb24obil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHQ9bixlKTp0fSxlLmludmVydEV4dGVudD1mdW5jdGlvbihlKXtyZXR1cm4gZT10LmluZGV4T2YoZSksW25bZS0xXSxuW2VdXX0sZS5jb3B5PWZ1bmN0aW9uKCl7cmV0dXJuIGVvKG4sdCl9LGV9ZnVuY3Rpb24gcm8obil7ZnVuY3Rpb24gdChuKXtyZXR1cm4rbn1yZXR1cm4gdC5pbnZlcnQ9dCx0LmRvbWFpbj10LnJhbmdlPWZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhuPWUubWFwKHQpLHQpOm59LHQudGlja3M9ZnVuY3Rpb24odCl7cmV0dXJuIFhpKG4sdCl9LHQudGlja0Zvcm1hdD1mdW5jdGlvbih0LGUpe3JldHVybiAkaShuLHQsZSl9LHQuY29weT1mdW5jdGlvbigpe3JldHVybiBybyhuKX0sdH1mdW5jdGlvbiB1bygpe3JldHVybiAwfWZ1bmN0aW9uIGlvKG4pe3JldHVybiBuLmlubmVyUmFkaXVzfWZ1bmN0aW9uIG9vKG4pe3JldHVybiBuLm91dGVyUmFkaXVzfWZ1bmN0aW9uIGFvKG4pe3JldHVybiBuLnN0YXJ0QW5nbGV9ZnVuY3Rpb24gY28obil7cmV0dXJuIG4uZW5kQW5nbGV9ZnVuY3Rpb24gbG8obil7cmV0dXJuIG4mJm4ucGFkQW5nbGV9ZnVuY3Rpb24gc28obix0LGUscil7cmV0dXJuKG4tZSkqdC0odC1yKSpuPjA/MDoxfWZ1bmN0aW9uIGZvKG4sdCxlLHIsdSl7dmFyIGk9blswXS10WzBdLG89blsxXS10WzFdLGE9KHU/cjotcikvTWF0aC5zcXJ0KGkqaStvKm8pLGM9YSpvLGw9LWEqaSxzPW5bMF0rYyxmPW5bMV0rbCxoPXRbMF0rYyxnPXRbMV0rbCxwPShzK2gpLzIsdj0oZitnKS8yLGQ9aC1zLG09Zy1mLHk9ZCpkK20qbSxNPWUtcix4PXMqZy1oKmYsYj0oMD5tPy0xOjEpKk1hdGguc3FydChNKk0qeS14KngpLF89KHgqbS1kKmIpL3ksdz0oLXgqZC1tKmIpL3ksUz0oeCptK2QqYikveSxrPSgteCpkK20qYikveSxFPV8tcCxBPXctdixOPVMtcCxDPWstdjtyZXR1cm4gRSpFK0EqQT5OKk4rQypDJiYoXz1TLHc9ayksW1tfLWMsdy1sXSxbXyplL00sdyplL01dXX1mdW5jdGlvbiBobyhuKXtmdW5jdGlvbiB0KHQpe2Z1bmN0aW9uIG8oKXtsLnB1c2goIk0iLGkobihzKSxhKSl9Zm9yKHZhciBjLGw9W10scz1bXSxmPS0xLGg9dC5sZW5ndGgsZz1FdChlKSxwPUV0KHIpOysrZjxoOyl1LmNhbGwodGhpcyxjPXRbZl0sZik/cy5wdXNoKFsrZy5jYWxsKHRoaXMsYyxmKSwrcC5jYWxsKHRoaXMsYyxmKV0pOnMubGVuZ3RoJiYobygpLHM9W10pO3JldHVybiBzLmxlbmd0aCYmbygpLGwubGVuZ3RoP2wuam9pbigiIik6bnVsbH12YXIgZT1BcixyPU5yLHU9TmUsaT1nbyxvPWkua2V5LGE9Ljc7cmV0dXJuIHQueD1mdW5jdGlvbihuKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oZT1uLHQpOmV9LHQueT1mdW5jdGlvbihuKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8ocj1uLHQpOnJ9LHQuZGVmaW5lZD1mdW5jdGlvbihuKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8odT1uLHQpOnV9LHQuaW50ZXJwb2xhdGU9ZnVuY3Rpb24obil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG89ImZ1bmN0aW9uIj09dHlwZW9mIG4/aT1uOihpPUVsLmdldChuKXx8Z28pLmtleSx0KTpvfSx0LnRlbnNpb249ZnVuY3Rpb24obil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGE9bix0KTphfSx0fWZ1bmN0aW9uIGdvKG4pe3JldHVybiBuLmpvaW4oIkwiKX1mdW5jdGlvbiBwbyhuKXtyZXR1cm4gZ28obikrIloifWZ1bmN0aW9uIHZvKG4pe2Zvcih2YXIgdD0wLGU9bi5sZW5ndGgscj1uWzBdLHU9W3JbMF0sIiwiLHJbMV1dOysrdDxlOyl1LnB1c2goIkgiLChyWzBdKyhyPW5bdF0pWzBdKS8yLCJWIixyWzFdKTtyZXR1cm4gZT4xJiZ1LnB1c2goIkgiLHJbMF0pLHUuam9pbigiIil9ZnVuY3Rpb24gbW8obil7Zm9yKHZhciB0PTAsZT1uLmxlbmd0aCxyPW5bMF0sdT1bclswXSwiLCIsclsxXV07Kyt0PGU7KXUucHVzaCgiViIsKHI9blt0XSlbMV0sIkgiLHJbMF0pO3JldHVybiB1LmpvaW4oIiIpfWZ1bmN0aW9uIHlvKG4pe2Zvcih2YXIgdD0wLGU9bi5sZW5ndGgscj1uWzBdLHU9W3JbMF0sIiwiLHJbMV1dOysrdDxlOyl1LnB1c2goIkgiLChyPW5bdF0pWzBdLCJWIixyWzFdKTtyZXR1cm4gdS5qb2luKCIiKX1mdW5jdGlvbiBNbyhuLHQpe3JldHVybiBuLmxlbmd0aDw0P2dvKG4pOm5bMV0rX28obi5zbGljZSgxLC0xKSx3byhuLHQpKX1mdW5jdGlvbiB4byhuLHQpe3JldHVybiBuLmxlbmd0aDwzP2dvKG4pOm5bMF0rX28oKG4ucHVzaChuWzBdKSxuKSx3byhbbltuLmxlbmd0aC0yXV0uY29uY2F0KG4sW25bMV1dKSx0KSl9ZnVuY3Rpb24gYm8obix0KXtyZXR1cm4gbi5sZW5ndGg8Mz9nbyhuKTpuWzBdK19vKG4sd28obix0KSl9ZnVuY3Rpb24gX28obix0KXtpZih0Lmxlbmd0aDwxfHxuLmxlbmd0aCE9dC5sZW5ndGgmJm4ubGVuZ3RoIT10Lmxlbmd0aCsyKXJldHVybiBnbyhuKTt2YXIgZT1uLmxlbmd0aCE9dC5sZW5ndGgscj0iIix1PW5bMF0saT1uWzFdLG89dFswXSxhPW8sYz0xO2lmKGUmJihyKz0iUSIrKGlbMF0tMipvWzBdLzMpKyIsIisoaVsxXS0yKm9bMV0vMykrIiwiK2lbMF0rIiwiK2lbMV0sdT1uWzFdLGM9MiksdC5sZW5ndGg+MSl7YT10WzFdLGk9bltjXSxjKysscis9IkMiKyh1WzBdK29bMF0pKyIsIisodVsxXStvWzFdKSsiLCIrKGlbMF0tYVswXSkrIiwiKyhpWzFdLWFbMV0pKyIsIitpWzBdKyIsIitpWzFdO2Zvcih2YXIgbD0yO2w8dC5sZW5ndGg7bCsrLGMrKylpPW5bY10sYT10W2xdLHIrPSJTIisoaVswXS1hWzBdKSsiLCIrKGlbMV0tYVsxXSkrIiwiK2lbMF0rIiwiK2lbMV19aWYoZSl7dmFyIHM9bltjXTtyKz0iUSIrKGlbMF0rMiphWzBdLzMpKyIsIisoaVsxXSsyKmFbMV0vMykrIiwiK3NbMF0rIiwiK3NbMV19cmV0dXJuIHJ9ZnVuY3Rpb24gd28obix0KXtmb3IodmFyIGUscj1bXSx1PSgxLXQpLzIsaT1uWzBdLG89blsxXSxhPTEsYz1uLmxlbmd0aDsrK2E8YzspZT1pLGk9byxvPW5bYV0sci5wdXNoKFt1KihvWzBdLWVbMF0pLHUqKG9bMV0tZVsxXSldKTtyZXR1cm4gcn1mdW5jdGlvbiBTbyhuKXtpZihuLmxlbmd0aDwzKXJldHVybiBnbyhuKTt2YXIgdD0xLGU9bi5sZW5ndGgscj1uWzBdLHU9clswXSxpPXJbMV0sbz1bdSx1LHUsKHI9blsxXSlbMF1dLGE9W2ksaSxpLHJbMV1dLGM9W3UsIiwiLGksIkwiLE5vKENsLG8pLCIsIixObyhDbCxhKV07Zm9yKG4ucHVzaChuW2UtMV0pOysrdDw9ZTspcj1uW3RdLG8uc2hpZnQoKSxvLnB1c2goclswXSksYS5zaGlmdCgpLGEucHVzaChyWzFdKSxDbyhjLG8sYSk7cmV0dXJuIG4ucG9wKCksYy5wdXNoKCJMIixyKSxjLmpvaW4oIiIpfWZ1bmN0aW9uIGtvKG4pe2lmKG4ubGVuZ3RoPDQpcmV0dXJuIGdvKG4pO2Zvcih2YXIgdCxlPVtdLHI9LTEsdT1uLmxlbmd0aCxpPVswXSxvPVswXTsrK3I8MzspdD1uW3JdLGkucHVzaCh0WzBdKSxvLnB1c2godFsxXSk7Zm9yKGUucHVzaChObyhDbCxpKSsiLCIrTm8oQ2wsbykpLC0tcjsrK3I8dTspdD1uW3JdLGkuc2hpZnQoKSxpLnB1c2godFswXSksby5zaGlmdCgpLG8ucHVzaCh0WzFdKSxDbyhlLGksbyk7cmV0dXJuIGUuam9pbigiIil9ZnVuY3Rpb24gRW8obil7Zm9yKHZhciB0LGUscj0tMSx1PW4ubGVuZ3RoLGk9dSs0LG89W10sYT1bXTsrK3I8NDspZT1uW3IldV0sby5wdXNoKGVbMF0pLGEucHVzaChlWzFdKTtmb3IodD1bTm8oQ2wsbyksIiwiLE5vKENsLGEpXSwtLXI7KytyPGk7KWU9bltyJXVdLG8uc2hpZnQoKSxvLnB1c2goZVswXSksYS5zaGlmdCgpLGEucHVzaChlWzFdKSxDbyh0LG8sYSk7cmV0dXJuIHQuam9pbigiIil9ZnVuY3Rpb24gQW8obix0KXt2YXIgZT1uLmxlbmd0aC0xO2lmKGUpZm9yKHZhciByLHUsaT1uWzBdWzBdLG89blswXVsxXSxhPW5bZV1bMF0taSxjPW5bZV1bMV0tbyxsPS0xOysrbDw9ZTspcj1uW2xdLHU9bC9lLHJbMF09dCpyWzBdKygxLXQpKihpK3UqYSksclsxXT10KnJbMV0rKDEtdCkqKG8rdSpjKTtyZXR1cm4gU28obil9ZnVuY3Rpb24gTm8obix0KXtyZXR1cm4gblswXSp0WzBdK25bMV0qdFsxXStuWzJdKnRbMl0rblszXSp0WzNdfWZ1bmN0aW9uIENvKG4sdCxlKXtuLnB1c2goIkMiLE5vKEFsLHQpLCIsIixObyhBbCxlKSwiLCIsTm8oTmwsdCksIiwiLE5vKE5sLGUpLCIsIixObyhDbCx0KSwiLCIsTm8oQ2wsZSkpfWZ1bmN0aW9uIHpvKG4sdCl7cmV0dXJuKHRbMV0tblsxXSkvKHRbMF0tblswXSl9ZnVuY3Rpb24gcW8obil7Zm9yKHZhciB0PTAsZT1uLmxlbmd0aC0xLHI9W10sdT1uWzBdLGk9blsxXSxvPXJbMF09em8odSxpKTsrK3Q8ZTspclt0XT0obysobz16byh1PWksaT1uW3QrMV0pKSkvMjtyZXR1cm4gclt0XT1vLHJ9ZnVuY3Rpb24gTG8obil7Zm9yKHZhciB0LGUscix1LGk9W10sbz1xbyhuKSxhPS0xLGM9bi5sZW5ndGgtMTsrK2E8YzspdD16byhuW2FdLG5bYSsxXSksZ2EodCk8Q2E/b1thXT1vW2ErMV09MDooZT1vW2FdL3Qscj1vW2ErMV0vdCx1PWUqZStyKnIsdT45JiYodT0zKnQvTWF0aC5zcXJ0KHUpLG9bYV09dSplLG9bYSsxXT11KnIpKTtmb3IoYT0tMTsrK2E8PWM7KXU9KG5bTWF0aC5taW4oYyxhKzEpXVswXS1uW01hdGgubWF4KDAsYS0xKV1bMF0pLyg2KigxK29bYV0qb1thXSkpLGkucHVzaChbdXx8MCxvW2FdKnV8fDBdKTtyZXR1cm4gaX1mdW5jdGlvbiBUbyhuKXtyZXR1cm4gbi5sZW5ndGg8Mz9nbyhuKTpuWzBdK19vKG4sTG8obikpfWZ1bmN0aW9uIFJvKG4pe2Zvcih2YXIgdCxlLHIsdT0tMSxpPW4ubGVuZ3RoOysrdTxpOyl0PW5bdV0sZT10WzBdLHI9dFsxXS1SYSx0WzBdPWUqTWF0aC5jb3MociksdFsxXT1lKk1hdGguc2luKHIpO3JldHVybiBufWZ1bmN0aW9uIERvKG4pe2Z1bmN0aW9uIHQodCl7ZnVuY3Rpb24gYygpe3YucHVzaCgiTSIsYShuKG0pLGYpLHMsbChuKGQucmV2ZXJzZSgpKSxmKSwiWiIpfWZvcih2YXIgaCxnLHAsdj1bXSxkPVtdLG09W10seT0tMSxNPXQubGVuZ3RoLHg9RXQoZSksYj1FdCh1KSxfPWU9PT1yP2Z1bmN0aW9uKCl7cmV0dXJuIGd9OkV0KHIpLHc9dT09PWk/ZnVuY3Rpb24oKXtyZXR1cm4gcH06RXQoaSk7Kyt5PE07KW8uY2FsbCh0aGlzLGg9dFt5XSx5KT8oZC5wdXNoKFtnPSt4LmNhbGwodGhpcyxoLHkpLHA9K2IuY2FsbCh0aGlzLGgseSldKSxtLnB1c2goWytfLmNhbGwodGhpcyxoLHkpLCt3LmNhbGwodGhpcyxoLHkpXSkpOmQubGVuZ3RoJiYoYygpLGQ9W10sbT1bXSk7cmV0dXJuIGQubGVuZ3RoJiZjKCksdi5sZW5ndGg/di5qb2luKCIiKTpudWxsfXZhciBlPUFyLHI9QXIsdT0wLGk9TnIsbz1OZSxhPWdvLGM9YS5rZXksbD1hLHM9IkwiLGY9Ljc7cmV0dXJuIHQueD1mdW5jdGlvbihuKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oZT1yPW4sdCk6cn0sdC54MD1mdW5jdGlvbihuKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oZT1uLHQpOmV9LHQueDE9ZnVuY3Rpb24obil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHI9bix0KTpyCn0sdC55PWZ1bmN0aW9uKG4pe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh1PWk9bix0KTppfSx0LnkwPWZ1bmN0aW9uKG4pe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh1PW4sdCk6dX0sdC55MT1mdW5jdGlvbihuKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oaT1uLHQpOml9LHQuZGVmaW5lZD1mdW5jdGlvbihuKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obz1uLHQpOm99LHQuaW50ZXJwb2xhdGU9ZnVuY3Rpb24obil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGM9ImZ1bmN0aW9uIj09dHlwZW9mIG4/YT1uOihhPUVsLmdldChuKXx8Z28pLmtleSxsPWEucmV2ZXJzZXx8YSxzPWEuY2xvc2VkPyJNIjoiTCIsdCk6Y30sdC50ZW5zaW9uPWZ1bmN0aW9uKG4pe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhmPW4sdCk6Zn0sdH1mdW5jdGlvbiBQbyhuKXtyZXR1cm4gbi5yYWRpdXN9ZnVuY3Rpb24gVW8obil7cmV0dXJuW24ueCxuLnldfWZ1bmN0aW9uIGpvKG4pe3JldHVybiBmdW5jdGlvbigpe3ZhciB0PW4uYXBwbHkodGhpcyxhcmd1bWVudHMpLGU9dFswXSxyPXRbMV0tUmE7cmV0dXJuW2UqTWF0aC5jb3MociksZSpNYXRoLnNpbihyKV19fWZ1bmN0aW9uIEZvKCl7cmV0dXJuIDY0fWZ1bmN0aW9uIEhvKCl7cmV0dXJuImNpcmNsZSJ9ZnVuY3Rpb24gT28obil7dmFyIHQ9TWF0aC5zcXJ0KG4vcWEpO3JldHVybiJNMCwiK3QrIkEiK3QrIiwiK3QrIiAwIDEsMSAwLCIrLXQrIkEiK3QrIiwiK3QrIiAwIDEsMSAwLCIrdCsiWiJ9ZnVuY3Rpb24gSW8obil7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIHQsZTsodD10aGlzW25dKSYmKGU9dFt0LmFjdGl2ZV0pJiYoLS10LmNvdW50P2RlbGV0ZSB0W3QuYWN0aXZlXTpkZWxldGUgdGhpc1tuXSx0LmFjdGl2ZSs9LjUsZS5ldmVudCYmZS5ldmVudC5pbnRlcnJ1cHQuY2FsbCh0aGlzLHRoaXMuX19kYXRhX18sZS5pbmRleCkpfX1mdW5jdGlvbiBZbyhuLHQsZSl7cmV0dXJuIHlhKG4sUGwpLG4ubmFtZXNwYWNlPXQsbi5pZD1lLG59ZnVuY3Rpb24gWm8obix0LGUscil7dmFyIHU9bi5pZCxpPW4ubmFtZXNwYWNlO3JldHVybiBZKG4sImZ1bmN0aW9uIj09dHlwZW9mIGU/ZnVuY3Rpb24obixvLGEpe25baV1bdV0udHdlZW4uc2V0KHQscihlLmNhbGwobixuLl9fZGF0YV9fLG8sYSkpKX06KGU9cihlKSxmdW5jdGlvbihuKXtuW2ldW3VdLnR3ZWVuLnNldCh0LGUpfSkpfWZ1bmN0aW9uIFZvKG4pe3JldHVybiBudWxsPT1uJiYobj0iIiksZnVuY3Rpb24oKXt0aGlzLnRleHRDb250ZW50PW59fWZ1bmN0aW9uIFhvKG4pe3JldHVybiBudWxsPT1uPyJfX3RyYW5zaXRpb25fXyI6Il9fdHJhbnNpdGlvbl8iK24rIl9fIn1mdW5jdGlvbiAkbyhuLHQsZSxyLHUpe3ZhciBpPW5bZV18fChuW2VdPXthY3RpdmU6MCxjb3VudDowfSksbz1pW3JdO2lmKCFvKXt2YXIgYT11LnRpbWU7bz1pW3JdPXt0d2VlbjpuZXcgbCx0aW1lOmEsZGVsYXk6dS5kZWxheSxkdXJhdGlvbjp1LmR1cmF0aW9uLGVhc2U6dS5lYXNlLGluZGV4OnR9LHU9bnVsbCwrK2kuY291bnQsdGEudGltZXIoZnVuY3Rpb24odSl7ZnVuY3Rpb24gYyhlKXtpZihpLmFjdGl2ZT5yKXJldHVybiBzKCk7dmFyIHU9aVtpLmFjdGl2ZV07dSYmKC0taS5jb3VudCxkZWxldGUgaVtpLmFjdGl2ZV0sdS5ldmVudCYmdS5ldmVudC5pbnRlcnJ1cHQuY2FsbChuLG4uX19kYXRhX18sdS5pbmRleCkpLGkuYWN0aXZlPXIsby5ldmVudCYmby5ldmVudC5zdGFydC5jYWxsKG4sbi5fX2RhdGFfXyx0KSxvLnR3ZWVuLmZvckVhY2goZnVuY3Rpb24oZSxyKXsocj1yLmNhbGwobixuLl9fZGF0YV9fLHQpKSYmdi5wdXNoKHIpfSksaD1vLmVhc2UsZj1vLmR1cmF0aW9uLHRhLnRpbWVyKGZ1bmN0aW9uKCl7cmV0dXJuIHAuYz1sKGV8fDEpP05lOmwsMX0sMCxhKX1mdW5jdGlvbiBsKGUpe2lmKGkuYWN0aXZlIT09cilyZXR1cm4gMTtmb3IodmFyIHU9ZS9mLGE9aCh1KSxjPXYubGVuZ3RoO2M+MDspdlstLWNdLmNhbGwobixhKTtyZXR1cm4gdT49MT8oby5ldmVudCYmby5ldmVudC5lbmQuY2FsbChuLG4uX19kYXRhX18sdCkscygpKTp2b2lkIDB9ZnVuY3Rpb24gcygpe3JldHVybi0taS5jb3VudD9kZWxldGUgaVtyXTpkZWxldGUgbltlXSwxfXZhciBmLGgsZz1vLmRlbGF5LHA9ZWMsdj1bXTtyZXR1cm4gcC50PWcrYSx1Pj1nP2ModS1nKTp2b2lkKHAuYz1jKX0sMCxhKX19ZnVuY3Rpb24gQm8obix0LGUpe24uYXR0cigidHJhbnNmb3JtIixmdW5jdGlvbihuKXt2YXIgcj10KG4pO3JldHVybiJ0cmFuc2xhdGUoIisoaXNGaW5pdGUocik/cjplKG4pKSsiLDApIn0pfWZ1bmN0aW9uIFdvKG4sdCxlKXtuLmF0dHIoInRyYW5zZm9ybSIsZnVuY3Rpb24obil7dmFyIHI9dChuKTtyZXR1cm4idHJhbnNsYXRlKDAsIisoaXNGaW5pdGUocik/cjplKG4pKSsiKSJ9KX1mdW5jdGlvbiBKbyhuKXtyZXR1cm4gbi50b0lTT1N0cmluZygpfWZ1bmN0aW9uIEdvKG4sdCxlKXtmdW5jdGlvbiByKHQpe3JldHVybiBuKHQpfWZ1bmN0aW9uIHUobixlKXt2YXIgcj1uWzFdLW5bMF0sdT1yL2UsaT10YS5iaXNlY3QoVmwsdSk7cmV0dXJuIGk9PVZsLmxlbmd0aD9bdC55ZWFyLFZpKG4ubWFwKGZ1bmN0aW9uKG4pe3JldHVybiBuLzMxNTM2ZTZ9KSxlKVsyXV06aT90W3UvVmxbaS0xXTxWbFtpXS91P2ktMTppXTpbQmwsVmkobixlKVsyXV19cmV0dXJuIHIuaW52ZXJ0PWZ1bmN0aW9uKHQpe3JldHVybiBLbyhuLmludmVydCh0KSl9LHIuZG9tYWluPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhuLmRvbWFpbih0KSxyKTpuLmRvbWFpbigpLm1hcChLbyl9LHIubmljZT1mdW5jdGlvbihuLHQpe2Z1bmN0aW9uIGUoZSl7cmV0dXJuIWlzTmFOKGUpJiYhbi5yYW5nZShlLEtvKCtlKzEpLHQpLmxlbmd0aH12YXIgaT1yLmRvbWFpbigpLG89UGkoaSksYT1udWxsPT1uP3UobywxMCk6Im51bWJlciI9PXR5cGVvZiBuJiZ1KG8sbik7cmV0dXJuIGEmJihuPWFbMF0sdD1hWzFdKSxyLmRvbWFpbihGaShpLHQ+MT97Zmxvb3I6ZnVuY3Rpb24odCl7Zm9yKDtlKHQ9bi5mbG9vcih0KSk7KXQ9S28odC0xKTtyZXR1cm4gdH0sY2VpbDpmdW5jdGlvbih0KXtmb3IoO2UodD1uLmNlaWwodCkpOyl0PUtvKCt0KzEpO3JldHVybiB0fX06bikpfSxyLnRpY2tzPWZ1bmN0aW9uKG4sdCl7dmFyIGU9UGkoci5kb21haW4oKSksaT1udWxsPT1uP3UoZSwxMCk6Im51bWJlciI9PXR5cGVvZiBuP3UoZSxuKTohbi5yYW5nZSYmW3tyYW5nZTpufSx0XTtyZXR1cm4gaSYmKG49aVswXSx0PWlbMV0pLG4ucmFuZ2UoZVswXSxLbygrZVsxXSsxKSwxPnQ/MTp0KX0sci50aWNrRm9ybWF0PWZ1bmN0aW9uKCl7cmV0dXJuIGV9LHIuY29weT1mdW5jdGlvbigpe3JldHVybiBHbyhuLmNvcHkoKSx0LGUpfSxZaShyLG4pfWZ1bmN0aW9uIEtvKG4pe3JldHVybiBuZXcgRGF0ZShuKX1mdW5jdGlvbiBRbyhuKXtyZXR1cm4gSlNPTi5wYXJzZShuLnJlc3BvbnNlVGV4dCl9ZnVuY3Rpb24gbmEobil7dmFyIHQ9dWEuY3JlYXRlUmFuZ2UoKTtyZXR1cm4gdC5zZWxlY3ROb2RlKHVhLmJvZHkpLHQuY3JlYXRlQ29udGV4dHVhbEZyYWdtZW50KG4ucmVzcG9uc2VUZXh0KX12YXIgdGE9e3ZlcnNpb246IjMuNS41In0sZWE9W10uc2xpY2UscmE9ZnVuY3Rpb24obil7cmV0dXJuIGVhLmNhbGwobil9LHVhPXRoaXMuZG9jdW1lbnQ7aWYodWEpdHJ5e3JhKHVhLmRvY3VtZW50RWxlbWVudC5jaGlsZE5vZGVzKVswXS5ub2RlVHlwZX1jYXRjaChpYSl7cmE9ZnVuY3Rpb24obil7Zm9yKHZhciB0PW4ubGVuZ3RoLGU9bmV3IEFycmF5KHQpO3QtLTspZVt0XT1uW3RdO3JldHVybiBlfX1pZihEYXRlLm5vd3x8KERhdGUubm93PWZ1bmN0aW9uKCl7cmV0dXJuK25ldyBEYXRlfSksdWEpdHJ5e3VhLmNyZWF0ZUVsZW1lbnQoIkRJViIpLnN0eWxlLnNldFByb3BlcnR5KCJvcGFjaXR5IiwwLCIiKX1jYXRjaChvYSl7dmFyIGFhPXRoaXMuRWxlbWVudC5wcm90b3R5cGUsY2E9YWEuc2V0QXR0cmlidXRlLGxhPWFhLnNldEF0dHJpYnV0ZU5TLHNhPXRoaXMuQ1NTU3R5bGVEZWNsYXJhdGlvbi5wcm90b3R5cGUsZmE9c2Euc2V0UHJvcGVydHk7YWEuc2V0QXR0cmlidXRlPWZ1bmN0aW9uKG4sdCl7Y2EuY2FsbCh0aGlzLG4sdCsiIil9LGFhLnNldEF0dHJpYnV0ZU5TPWZ1bmN0aW9uKG4sdCxlKXtsYS5jYWxsKHRoaXMsbix0LGUrIiIpfSxzYS5zZXRQcm9wZXJ0eT1mdW5jdGlvbihuLHQsZSl7ZmEuY2FsbCh0aGlzLG4sdCsiIixlKX19dGEuYXNjZW5kaW5nPWUsdGEuZGVzY2VuZGluZz1mdW5jdGlvbihuLHQpe3JldHVybiBuPnQ/LTE6dD5uPzE6dD49bj8wOjAvMH0sdGEubWluPWZ1bmN0aW9uKG4sdCl7dmFyIGUscix1PS0xLGk9bi5sZW5ndGg7aWYoMT09PWFyZ3VtZW50cy5sZW5ndGgpe2Zvcig7Kyt1PGk7KWlmKG51bGwhPShyPW5bdV0pJiZyPj1yKXtlPXI7YnJlYWt9Zm9yKDsrK3U8aTspbnVsbCE9KHI9blt1XSkmJmU+ciYmKGU9cil9ZWxzZXtmb3IoOysrdTxpOylpZihudWxsIT0ocj10LmNhbGwobixuW3VdLHUpKSYmcj49cil7ZT1yO2JyZWFrfWZvcig7Kyt1PGk7KW51bGwhPShyPXQuY2FsbChuLG5bdV0sdSkpJiZlPnImJihlPXIpfXJldHVybiBlfSx0YS5tYXg9ZnVuY3Rpb24obix0KXt2YXIgZSxyLHU9LTEsaT1uLmxlbmd0aDtpZigxPT09YXJndW1lbnRzLmxlbmd0aCl7Zm9yKDsrK3U8aTspaWYobnVsbCE9KHI9blt1XSkmJnI+PXIpe2U9cjticmVha31mb3IoOysrdTxpOyludWxsIT0ocj1uW3VdKSYmcj5lJiYoZT1yKX1lbHNle2Zvcig7Kyt1PGk7KWlmKG51bGwhPShyPXQuY2FsbChuLG5bdV0sdSkpJiZyPj1yKXtlPXI7YnJlYWt9Zm9yKDsrK3U8aTspbnVsbCE9KHI9dC5jYWxsKG4sblt1XSx1KSkmJnI+ZSYmKGU9cil9cmV0dXJuIGV9LHRhLmV4dGVudD1mdW5jdGlvbihuLHQpe3ZhciBlLHIsdSxpPS0xLG89bi5sZW5ndGg7aWYoMT09PWFyZ3VtZW50cy5sZW5ndGgpe2Zvcig7KytpPG87KWlmKG51bGwhPShyPW5baV0pJiZyPj1yKXtlPXU9cjticmVha31mb3IoOysraTxvOyludWxsIT0ocj1uW2ldKSYmKGU+ciYmKGU9cikscj51JiYodT1yKSl9ZWxzZXtmb3IoOysraTxvOylpZihudWxsIT0ocj10LmNhbGwobixuW2ldLGkpKSYmcj49cil7ZT11PXI7YnJlYWt9Zm9yKDsrK2k8bzspbnVsbCE9KHI9dC5jYWxsKG4sbltpXSxpKSkmJihlPnImJihlPXIpLHI+dSYmKHU9cikpfXJldHVybltlLHVdfSx0YS5zdW09ZnVuY3Rpb24obix0KXt2YXIgZSxyPTAsaT1uLmxlbmd0aCxvPS0xO2lmKDE9PT1hcmd1bWVudHMubGVuZ3RoKWZvcig7KytvPGk7KXUoZT0rbltvXSkmJihyKz1lKTtlbHNlIGZvcig7KytvPGk7KXUoZT0rdC5jYWxsKG4sbltvXSxvKSkmJihyKz1lKTtyZXR1cm4gcn0sdGEubWVhbj1mdW5jdGlvbihuLHQpe3ZhciBlLGk9MCxvPW4ubGVuZ3RoLGE9LTEsYz1vO2lmKDE9PT1hcmd1bWVudHMubGVuZ3RoKWZvcig7KythPG87KXUoZT1yKG5bYV0pKT9pKz1lOi0tYztlbHNlIGZvcig7KythPG87KXUoZT1yKHQuY2FsbChuLG5bYV0sYSkpKT9pKz1lOi0tYztyZXR1cm4gYz9pL2M6dm9pZCAwfSx0YS5xdWFudGlsZT1mdW5jdGlvbihuLHQpe3ZhciBlPShuLmxlbmd0aC0xKSp0KzEscj1NYXRoLmZsb29yKGUpLHU9K25bci0xXSxpPWUtcjtyZXR1cm4gaT91K2kqKG5bcl0tdSk6dX0sdGEubWVkaWFuPWZ1bmN0aW9uKG4sdCl7dmFyIGksbz1bXSxhPW4ubGVuZ3RoLGM9LTE7aWYoMT09PWFyZ3VtZW50cy5sZW5ndGgpZm9yKDsrK2M8YTspdShpPXIobltjXSkpJiZvLnB1c2goaSk7ZWxzZSBmb3IoOysrYzxhOyl1KGk9cih0LmNhbGwobixuW2NdLGMpKSkmJm8ucHVzaChpKTtyZXR1cm4gby5sZW5ndGg/dGEucXVhbnRpbGUoby5zb3J0KGUpLC41KTp2b2lkIDB9LHRhLnZhcmlhbmNlPWZ1bmN0aW9uKG4sdCl7dmFyIGUsaSxvPW4ubGVuZ3RoLGE9MCxjPTAsbD0tMSxzPTA7aWYoMT09PWFyZ3VtZW50cy5sZW5ndGgpZm9yKDsrK2w8bzspdShlPXIobltsXSkpJiYoaT1lLWEsYSs9aS8rK3MsYys9aSooZS1hKSk7ZWxzZSBmb3IoOysrbDxvOyl1KGU9cih0LmNhbGwobixuW2xdLGwpKSkmJihpPWUtYSxhKz1pLysrcyxjKz1pKihlLWEpKTtyZXR1cm4gcz4xP2MvKHMtMSk6dm9pZCAwfSx0YS5kZXZpYXRpb249ZnVuY3Rpb24oKXt2YXIgbj10YS52YXJpYW5jZS5hcHBseSh0aGlzLGFyZ3VtZW50cyk7cmV0dXJuIG4/TWF0aC5zcXJ0KG4pOm59O3ZhciBoYT1pKGUpO3RhLmJpc2VjdExlZnQ9aGEubGVmdCx0YS5iaXNlY3Q9dGEuYmlzZWN0UmlnaHQ9aGEucmlnaHQsdGEuYmlzZWN0b3I9ZnVuY3Rpb24obil7cmV0dXJuIGkoMT09PW4ubGVuZ3RoP2Z1bmN0aW9uKHQscil7cmV0dXJuIGUobih0KSxyKX06bil9LHRhLnNodWZmbGU9ZnVuY3Rpb24obix0LGUpeyhpPWFyZ3VtZW50cy5sZW5ndGgpPDMmJihlPW4ubGVuZ3RoLDI+aSYmKHQ9MCkpO2Zvcih2YXIgcix1LGk9ZS10O2k7KXU9TWF0aC5yYW5kb20oKSppLS18MCxyPW5baSt0XSxuW2krdF09blt1K3RdLG5bdSt0XT1yO3JldHVybiBufSx0YS5wZXJtdXRlPWZ1bmN0aW9uKG4sdCl7Zm9yKHZhciBlPXQubGVuZ3RoLHI9bmV3IEFycmF5KGUpO2UtLTspcltlXT1uW3RbZV1dO3JldHVybiByfSx0YS5wYWlycz1mdW5jdGlvbihuKXtmb3IodmFyIHQsZT0wLHI9bi5sZW5ndGgtMSx1PW5bMF0saT1uZXcgQXJyYXkoMD5yPzA6cik7cj5lOylpW2VdPVt0PXUsdT1uWysrZV1dO3JldHVybiBpfSx0YS56aXA9ZnVuY3Rpb24oKXtpZighKHI9YXJndW1lbnRzLmxlbmd0aCkpcmV0dXJuW107Zm9yKHZhciBuPS0xLHQ9dGEubWluKGFyZ3VtZW50cyxvKSxlPW5ldyBBcnJheSh0KTsrK248dDspZm9yKHZhciByLHU9LTEsaT1lW25dPW5ldyBBcnJheShyKTsrK3U8cjspaVt1XT1hcmd1bWVudHNbdV1bbl07cmV0dXJuIGV9LHRhLnRyYW5zcG9zZT1mdW5jdGlvbihuKXtyZXR1cm4gdGEuemlwLmFwcGx5KHRhLG4pfSx0YS5rZXlzPWZ1bmN0aW9uKG4pe3ZhciB0PVtdO2Zvcih2YXIgZSBpbiBuKXQucHVzaChlKTtyZXR1cm4gdH0sdGEudmFsdWVzPWZ1bmN0aW9uKG4pe3ZhciB0PVtdO2Zvcih2YXIgZSBpbiBuKXQucHVzaChuW2VdKTtyZXR1cm4gdH0sdGEuZW50cmllcz1mdW5jdGlvbihuKXt2YXIgdD1bXTtmb3IodmFyIGUgaW4gbil0LnB1c2goe2tleTplLHZhbHVlOm5bZV19KTtyZXR1cm4gdH0sdGEubWVyZ2U9ZnVuY3Rpb24obil7Zm9yKHZhciB0LGUscix1PW4ubGVuZ3RoLGk9LTEsbz0wOysraTx1OylvKz1uW2ldLmxlbmd0aDtmb3IoZT1uZXcgQXJyYXkobyk7LS11Pj0wOylmb3Iocj1uW3VdLHQ9ci5sZW5ndGg7LS10Pj0wOyllWy0tb109clt0XTtyZXR1cm4gZX07dmFyIGdhPU1hdGguYWJzO3RhLnJhbmdlPWZ1bmN0aW9uKG4sdCxlKXtpZihhcmd1bWVudHMubGVuZ3RoPDMmJihlPTEsYXJndW1lbnRzLmxlbmd0aDwyJiYodD1uLG49MCkpLCh0LW4pL2U9PT0xLzApdGhyb3cgbmV3IEVycm9yKCJpbmZpbml0ZSByYW5nZSIpO3ZhciByLHU9W10saT1hKGdhKGUpKSxvPS0xO2lmKG4qPWksdCo9aSxlKj1pLDA+ZSlmb3IoOyhyPW4rZSorK28pPnQ7KXUucHVzaChyL2kpO2Vsc2UgZm9yKDsocj1uK2UqKytvKTx0Oyl1LnB1c2goci9pKTtyZXR1cm4gdX0sdGEubWFwPWZ1bmN0aW9uKG4sdCl7dmFyIGU9bmV3IGw7aWYobiBpbnN0YW5jZW9mIGwpbi5mb3JFYWNoKGZ1bmN0aW9uKG4sdCl7ZS5zZXQobix0KX0pO2Vsc2UgaWYoQXJyYXkuaXNBcnJheShuKSl7dmFyIHIsdT0tMSxpPW4ubGVuZ3RoO2lmKDE9PT1hcmd1bWVudHMubGVuZ3RoKWZvcig7Kyt1PGk7KWUuc2V0KHUsblt1XSk7ZWxzZSBmb3IoOysrdTxpOyllLnNldCh0LmNhbGwobixyPW5bdV0sdSkscil9ZWxzZSBmb3IodmFyIG8gaW4gbillLnNldChvLG5bb10pO3JldHVybiBlfTt2YXIgcGE9Il9fcHJvdG9fXyIsdmE9Ilx4MDAiO2MobCx7aGFzOmgsZ2V0OmZ1bmN0aW9uKG4pe3JldHVybiB0aGlzLl9bcyhuKV19LHNldDpmdW5jdGlvbihuLHQpe3JldHVybiB0aGlzLl9bcyhuKV09dH0scmVtb3ZlOmcsa2V5czpwLHZhbHVlczpmdW5jdGlvbigpe3ZhciBuPVtdO2Zvcih2YXIgdCBpbiB0aGlzLl8pbi5wdXNoKHRoaXMuX1t0XSk7cmV0dXJuIG59LGVudHJpZXM6ZnVuY3Rpb24oKXt2YXIgbj1bXTtmb3IodmFyIHQgaW4gdGhpcy5fKW4ucHVzaCh7a2V5OmYodCksdmFsdWU6dGhpcy5fW3RdfSk7cmV0dXJuIG59LHNpemU6dixlbXB0eTpkLGZvckVhY2g6ZnVuY3Rpb24obil7Zm9yKHZhciB0IGluIHRoaXMuXyluLmNhbGwodGhpcyxmKHQpLHRoaXMuX1t0XSl9fSksdGEubmVzdD1mdW5jdGlvbigpe2Z1bmN0aW9uIG4odCxvLGEpe2lmKGE+PWkubGVuZ3RoKXJldHVybiByP3IuY2FsbCh1LG8pOmU/by5zb3J0KGUpOm87Zm9yKHZhciBjLHMsZixoLGc9LTEscD1vLmxlbmd0aCx2PWlbYSsrXSxkPW5ldyBsOysrZzxwOykoaD1kLmdldChjPXYocz1vW2ddKSkpP2gucHVzaChzKTpkLnNldChjLFtzXSk7cmV0dXJuIHQ/KHM9dCgpLGY9ZnVuY3Rpb24oZSxyKXtzLnNldChlLG4odCxyLGEpKX0pOihzPXt9LGY9ZnVuY3Rpb24oZSxyKXtzW2VdPW4odCxyLGEpfSksZC5mb3JFYWNoKGYpLHN9ZnVuY3Rpb24gdChuLGUpe2lmKGU+PWkubGVuZ3RoKXJldHVybiBuO3ZhciByPVtdLHU9b1tlKytdO3JldHVybiBuLmZvckVhY2goZnVuY3Rpb24obix1KXtyLnB1c2goe2tleTpuLHZhbHVlczp0KHUsZSl9KX0pLHU/ci5zb3J0KGZ1bmN0aW9uKG4sdCl7cmV0dXJuIHUobi5rZXksdC5rZXkpfSk6cn12YXIgZSxyLHU9e30saT1bXSxvPVtdO3JldHVybiB1Lm1hcD1mdW5jdGlvbih0LGUpe3JldHVybiBuKGUsdCwwKX0sdS5lbnRyaWVzPWZ1bmN0aW9uKGUpe3JldHVybiB0KG4odGEubWFwLGUsMCksMCl9LHUua2V5PWZ1bmN0aW9uKG4pe3JldHVybiBpLnB1c2gobiksdX0sdS5zb3J0S2V5cz1mdW5jdGlvbihuKXtyZXR1cm4gb1tpLmxlbmd0aC0xXT1uLHV9LHUuc29ydFZhbHVlcz1mdW5jdGlvbihuKXtyZXR1cm4gZT1uLHV9LHUucm9sbHVwPWZ1bmN0aW9uKG4pe3JldHVybiByPW4sdX0sdX0sdGEuc2V0PWZ1bmN0aW9uKG4pe3ZhciB0PW5ldyBtO2lmKG4pZm9yKHZhciBlPTAscj1uLmxlbmd0aDtyPmU7KytlKXQuYWRkKG5bZV0pO3JldHVybiB0fSxjKG0se2hhczpoLGFkZDpmdW5jdGlvbihuKXtyZXR1cm4gdGhpcy5fW3Mobis9IiIpXT0hMCxufSxyZW1vdmU6Zyx2YWx1ZXM6cCxzaXplOnYsZW1wdHk6ZCxmb3JFYWNoOmZ1bmN0aW9uKG4pe2Zvcih2YXIgdCBpbiB0aGlzLl8pbi5jYWxsKHRoaXMsZih0KSl9fSksdGEuYmVoYXZpb3I9e30sdGEucmViaW5kPWZ1bmN0aW9uKG4sdCl7Zm9yKHZhciBlLHI9MSx1PWFyZ3VtZW50cy5sZW5ndGg7KytyPHU7KW5bZT1hcmd1bWVudHNbcl1dPU0obix0LHRbZV0pO3JldHVybiBufTt2YXIgZGE9WyJ3ZWJraXQiLCJtcyIsIm1veiIsIk1veiIsIm8iLCJPIl07dGEuZGlzcGF0Y2g9ZnVuY3Rpb24oKXtmb3IodmFyIG49bmV3IF8sdD0tMSxlPWFyZ3VtZW50cy5sZW5ndGg7Kyt0PGU7KW5bYXJndW1lbnRzW3RdXT13KG4pO3JldHVybiBufSxfLnByb3RvdHlwZS5vbj1mdW5jdGlvbihuLHQpe3ZhciBlPW4uaW5kZXhPZigiLiIpLHI9IiI7aWYoZT49MCYmKHI9bi5zbGljZShlKzEpLG49bi5zbGljZSgwLGUpKSxuKXJldHVybiBhcmd1bWVudHMubGVuZ3RoPDI/dGhpc1tuXS5vbihyKTp0aGlzW25dLm9uKHIsdCk7aWYoMj09PWFyZ3VtZW50cy5sZW5ndGgpe2lmKG51bGw9PXQpZm9yKG4gaW4gdGhpcyl0aGlzLmhhc093blByb3BlcnR5KG4pJiZ0aGlzW25dLm9uKHIsbnVsbCk7cmV0dXJuIHRoaXN9fSx0YS5ldmVudD1udWxsLHRhLnJlcXVvdGU9ZnVuY3Rpb24obil7cmV0dXJuIG4ucmVwbGFjZShtYSwiXFwkJiIpfTt2YXIgbWE9L1tcXFxeXCRcKlwrXD9cfFxbXF1cKFwpXC5ce1x9XS9nLHlhPXt9Ll9fcHJvdG9fXz9mdW5jdGlvbihuLHQpe24uX19wcm90b19fPXR9OmZ1bmN0aW9uKG4sdCl7Zm9yKHZhciBlIGluIHQpbltlXT10W2VdfSxNYT1mdW5jdGlvbihuLHQpe3JldHVybiB0LnF1ZXJ5U2VsZWN0b3Iobil9LHhhPWZ1bmN0aW9uKG4sdCl7cmV0dXJuIHQucXVlcnlTZWxlY3RvckFsbChuKX0sYmE9ZnVuY3Rpb24obix0KXt2YXIgZT1uLm1hdGNoZXN8fG5beChuLCJtYXRjaGVzU2VsZWN0b3IiKV07cmV0dXJuKGJhPWZ1bmN0aW9uKG4sdCl7cmV0dXJuIGUuY2FsbChuLHQpfSkobix0KX07ImZ1bmN0aW9uIj09dHlwZW9mIFNpenpsZSYmKE1hPWZ1bmN0aW9uKG4sdCl7cmV0dXJuIFNpenpsZShuLHQpWzBdfHxudWxsfSx4YT1TaXp6bGUsYmE9U2l6emxlLm1hdGNoZXNTZWxlY3RvciksdGEuc2VsZWN0aW9uPWZ1bmN0aW9uKCl7cmV0dXJuIHRhLnNlbGVjdCh1YS5kb2N1bWVudEVsZW1lbnQpfTt2YXIgX2E9dGEuc2VsZWN0aW9uLnByb3RvdHlwZT1bXTtfYS5zZWxlY3Q9ZnVuY3Rpb24obil7dmFyIHQsZSxyLHUsaT1bXTtuPU4obik7Zm9yKHZhciBvPS0xLGE9dGhpcy5sZW5ndGg7KytvPGE7KXtpLnB1c2godD1bXSksdC5wYXJlbnROb2RlPShyPXRoaXNbb10pLnBhcmVudE5vZGU7Zm9yKHZhciBjPS0xLGw9ci5sZW5ndGg7KytjPGw7KSh1PXJbY10pPyh0LnB1c2goZT1uLmNhbGwodSx1Ll9fZGF0YV9fLGMsbykpLGUmJiJfX2RhdGFfXyJpbiB1JiYoZS5fX2RhdGFfXz11Ll9fZGF0YV9fKSk6dC5wdXNoKG51bGwpfXJldHVybiBBKGkpfSxfYS5zZWxlY3RBbGw9ZnVuY3Rpb24obil7dmFyIHQsZSxyPVtdO249QyhuKTtmb3IodmFyIHU9LTEsaT10aGlzLmxlbmd0aDsrK3U8aTspZm9yKHZhciBvPXRoaXNbdV0sYT0tMSxjPW8ubGVuZ3RoOysrYTxjOykoZT1vW2FdKSYmKHIucHVzaCh0PXJhKG4uY2FsbChlLGUuX19kYXRhX18sYSx1KSkpLHQucGFyZW50Tm9kZT1lKTtyZXR1cm4gQShyKX07dmFyIHdhPXtzdmc6Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIix4aHRtbDoiaHR0cDovL3d3dy53My5vcmcvMTk5OS94aHRtbCIseGxpbms6Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiLHhtbDoiaHR0cDovL3d3dy53My5vcmcvWE1MLzE5OTgvbmFtZXNwYWNlIix4bWxuczoiaHR0cDovL3d3dy53My5vcmcvMjAwMC94bWxucy8ifTt0YS5ucz17cHJlZml4OndhLHF1YWxpZnk6ZnVuY3Rpb24obil7dmFyIHQ9bi5pbmRleE9mKCI6IiksZT1uO3JldHVybiB0Pj0wJiYoZT1uLnNsaWNlKDAsdCksbj1uLnNsaWNlKHQrMSkpLHdhLmhhc093blByb3BlcnR5KGUpP3tzcGFjZTp3YVtlXSxsb2NhbDpufTpufX0sX2EuYXR0cj1mdW5jdGlvbihuLHQpe2lmKGFyZ3VtZW50cy5sZW5ndGg8Mil7aWYoInN0cmluZyI9PXR5cGVvZiBuKXt2YXIgZT10aGlzLm5vZGUoKTtyZXR1cm4gbj10YS5ucy5xdWFsaWZ5KG4pLG4ubG9jYWw/ZS5nZXRBdHRyaWJ1dGVOUyhuLnNwYWNlLG4ubG9jYWwpOmUuZ2V0QXR0cmlidXRlKG4pfWZvcih0IGluIG4pdGhpcy5lYWNoKHoodCxuW3RdKSk7cmV0dXJuIHRoaXN9cmV0dXJuIHRoaXMuZWFjaCh6KG4sdCkpfSxfYS5jbGFzc2VkPWZ1bmN0aW9uKG4sdCl7aWYoYXJndW1lbnRzLmxlbmd0aDwyKXtpZigic3RyaW5nIj09dHlwZW9mIG4pe3ZhciBlPXRoaXMubm9kZSgpLHI9KG49VChuKSkubGVuZ3RoLHU9LTE7aWYodD1lLmNsYXNzTGlzdCl7Zm9yKDsrK3U8cjspaWYoIXQuY29udGFpbnMoblt1XSkpcmV0dXJuITF9ZWxzZSBmb3IodD1lLmdldEF0dHJpYnV0ZSgiY2xhc3MiKTsrK3U8cjspaWYoIUwoblt1XSkudGVzdCh0KSlyZXR1cm4hMTtyZXR1cm4hMH1mb3IodCBpbiBuKXRoaXMuZWFjaChSKHQsblt0XSkpO3JldHVybiB0aGlzfXJldHVybiB0aGlzLmVhY2goUihuLHQpKX0sX2Euc3R5bGU9ZnVuY3Rpb24obixlLHIpe3ZhciB1PWFyZ3VtZW50cy5sZW5ndGg7aWYoMz51KXtpZigic3RyaW5nIiE9dHlwZW9mIG4pezI+dSYmKGU9IiIpO2ZvcihyIGluIG4pdGhpcy5lYWNoKFAocixuW3JdLGUpKTtyZXR1cm4gdGhpc31pZigyPnUpe3ZhciBpPXRoaXMubm9kZSgpO3JldHVybiB0KGkpLmdldENvbXB1dGVkU3R5bGUoaSxudWxsKS5nZXRQcm9wZXJ0eVZhbHVlKG4pfXI9IiJ9cmV0dXJuIHRoaXMuZWFjaChQKG4sZSxyKSl9LF9hLnByb3BlcnR5PWZ1bmN0aW9uKG4sdCl7aWYoYXJndW1lbnRzLmxlbmd0aDwyKXtpZigic3RyaW5nIj09dHlwZW9mIG4pcmV0dXJuIHRoaXMubm9kZSgpW25dO2Zvcih0IGluIG4pdGhpcy5lYWNoKFUodCxuW3RdKSk7cmV0dXJuIHRoaXN9cmV0dXJuIHRoaXMuZWFjaChVKG4sdCkpfSxfYS50ZXh0PWZ1bmN0aW9uKG4pe3JldHVybiBhcmd1bWVudHMubGVuZ3RoP3RoaXMuZWFjaCgiZnVuY3Rpb24iPT10eXBlb2Ygbj9mdW5jdGlvbigpe3ZhciB0PW4uYXBwbHkodGhpcyxhcmd1bWVudHMpO3RoaXMudGV4dENvbnRlbnQ9bnVsbD09dD8iIjp0fTpudWxsPT1uP2Z1bmN0aW9uKCl7dGhpcy50ZXh0Q29udGVudD0iIn06ZnVuY3Rpb24oKXt0aGlzLnRleHRDb250ZW50PW59KTp0aGlzLm5vZGUoKS50ZXh0Q29udGVudH0sX2EuaHRtbD1mdW5jdGlvbihuKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD90aGlzLmVhY2goImZ1bmN0aW9uIj09dHlwZW9mIG4/ZnVuY3Rpb24oKXt2YXIgdD1uLmFwcGx5KHRoaXMsYXJndW1lbnRzKTt0aGlzLmlubmVySFRNTD1udWxsPT10PyIiOnR9Om51bGw9PW4/ZnVuY3Rpb24oKXt0aGlzLmlubmVySFRNTD0iIn06ZnVuY3Rpb24oKXt0aGlzLmlubmVySFRNTD1ufSk6dGhpcy5ub2RlKCkuaW5uZXJIVE1MfSxfYS5hcHBlbmQ9ZnVuY3Rpb24obil7cmV0dXJuIG49aihuKSx0aGlzLnNlbGVjdChmdW5jdGlvbigpe3JldHVybiB0aGlzLmFwcGVuZENoaWxkKG4uYXBwbHkodGhpcyxhcmd1bWVudHMpKX0pfSxfYS5pbnNlcnQ9ZnVuY3Rpb24obix0KXtyZXR1cm4gbj1qKG4pLHQ9Tih0KSx0aGlzLnNlbGVjdChmdW5jdGlvbigpe3JldHVybiB0aGlzLmluc2VydEJlZm9yZShuLmFwcGx5KHRoaXMsYXJndW1lbnRzKSx0LmFwcGx5KHRoaXMsYXJndW1lbnRzKXx8bnVsbCl9KX0sX2EucmVtb3ZlPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZWFjaChGKX0sX2EuZGF0YT1mdW5jdGlvbihuLHQpe2Z1bmN0aW9uIGUobixlKXt2YXIgcix1LGksbz1uLmxlbmd0aCxmPWUubGVuZ3RoLGg9TWF0aC5taW4obyxmKSxnPW5ldyBBcnJheShmKSxwPW5ldyBBcnJheShmKSx2PW5ldyBBcnJheShvKTtpZih0KXt2YXIgZCxtPW5ldyBsLHk9bmV3IEFycmF5KG8pO2ZvcihyPS0xOysrcjxvOyltLmhhcyhkPXQuY2FsbCh1PW5bcl0sdS5fX2RhdGFfXyxyKSk/dltyXT11Om0uc2V0KGQsdSkseVtyXT1kO2ZvcihyPS0xOysrcjxmOykodT1tLmdldChkPXQuY2FsbChlLGk9ZVtyXSxyKSkpP3UhPT0hMCYmKGdbcl09dSx1Ll9fZGF0YV9fPWkpOnBbcl09SChpKSxtLnNldChkLCEwKTtmb3Iocj0tMTsrK3I8bzspbS5nZXQoeVtyXSkhPT0hMCYmKHZbcl09bltyXSl9ZWxzZXtmb3Iocj0tMTsrK3I8aDspdT1uW3JdLGk9ZVtyXSx1Pyh1Ll9fZGF0YV9fPWksZ1tyXT11KTpwW3JdPUgoaSk7Zm9yKDtmPnI7KytyKXBbcl09SChlW3JdKTtmb3IoO28+cjsrK3IpdltyXT1uW3JdfXAudXBkYXRlPWcscC5wYXJlbnROb2RlPWcucGFyZW50Tm9kZT12LnBhcmVudE5vZGU9bi5wYXJlbnROb2RlLGEucHVzaChwKSxjLnB1c2goZykscy5wdXNoKHYpfXZhciByLHUsaT0tMSxvPXRoaXMubGVuZ3RoO2lmKCFhcmd1bWVudHMubGVuZ3RoKXtmb3Iobj1uZXcgQXJyYXkobz0ocj10aGlzWzBdKS5sZW5ndGgpOysraTxvOykodT1yW2ldKSYmKG5baV09dS5fX2RhdGFfXyk7cmV0dXJuIG59dmFyIGE9WihbXSksYz1BKFtdKSxzPUEoW10pO2lmKCJmdW5jdGlvbiI9PXR5cGVvZiBuKWZvcig7KytpPG87KWUocj10aGlzW2ldLG4uY2FsbChyLHIucGFyZW50Tm9kZS5fX2RhdGFfXyxpKSk7ZWxzZSBmb3IoOysraTxvOyllKHI9dGhpc1tpXSxuKTtyZXR1cm4gYy5lbnRlcj1mdW5jdGlvbigpe3JldHVybiBhfSxjLmV4aXQ9ZnVuY3Rpb24oKXtyZXR1cm4gc30sY30sX2EuZGF0dW09ZnVuY3Rpb24obil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/dGhpcy5wcm9wZXJ0eSgiX19kYXRhX18iLG4pOnRoaXMucHJvcGVydHkoIl9fZGF0YV9fIil9LF9hLmZpbHRlcj1mdW5jdGlvbihuKXt2YXIgdCxlLHIsdT1bXTsiZnVuY3Rpb24iIT10eXBlb2YgbiYmKG49TyhuKSk7Zm9yKHZhciBpPTAsbz10aGlzLmxlbmd0aDtvPmk7aSsrKXt1LnB1c2godD1bXSksdC5wYXJlbnROb2RlPShlPXRoaXNbaV0pLnBhcmVudE5vZGU7Zm9yKHZhciBhPTAsYz1lLmxlbmd0aDtjPmE7YSsrKShyPWVbYV0pJiZuLmNhbGwocixyLl9fZGF0YV9fLGEsaSkmJnQucHVzaChyKX1yZXR1cm4gQSh1KX0sX2Eub3JkZXI9ZnVuY3Rpb24oKXtmb3IodmFyIG49LTEsdD10aGlzLmxlbmd0aDsrK248dDspZm9yKHZhciBlLHI9dGhpc1tuXSx1PXIubGVuZ3RoLTEsaT1yW3VdOy0tdT49MDspKGU9clt1XSkmJihpJiZpIT09ZS5uZXh0U2libGluZyYmaS5wYXJlbnROb2RlLmluc2VydEJlZm9yZShlLGkpLGk9ZSk7cmV0dXJuIHRoaXN9LF9hLnNvcnQ9ZnVuY3Rpb24obil7bj1JLmFwcGx5KHRoaXMsYXJndW1lbnRzKTtmb3IodmFyIHQ9LTEsZT10aGlzLmxlbmd0aDsrK3Q8ZTspdGhpc1t0XS5zb3J0KG4pO3JldHVybiB0aGlzLm9yZGVyKCl9LF9hLmVhY2g9ZnVuY3Rpb24obil7cmV0dXJuIFkodGhpcyxmdW5jdGlvbih0LGUscil7bi5jYWxsKHQsdC5fX2RhdGFfXyxlLHIpfSl9LF9hLmNhbGw9ZnVuY3Rpb24obil7dmFyIHQ9cmEoYXJndW1lbnRzKTtyZXR1cm4gbi5hcHBseSh0WzBdPXRoaXMsdCksdGhpc30sX2EuZW1wdHk9ZnVuY3Rpb24oKXtyZXR1cm4hdGhpcy5ub2RlKCl9LF9hLm5vZGU9ZnVuY3Rpb24oKXtmb3IodmFyIG49MCx0PXRoaXMubGVuZ3RoO3Q+bjtuKyspZm9yKHZhciBlPXRoaXNbbl0scj0wLHU9ZS5sZW5ndGg7dT5yO3IrKyl7dmFyIGk9ZVtyXTtpZihpKXJldHVybiBpfXJldHVybiBudWxsfSxfYS5zaXplPWZ1bmN0aW9uKCl7dmFyIG49MDtyZXR1cm4gWSh0aGlzLGZ1bmN0aW9uKCl7KytufSksbn07dmFyIFNhPVtdO3RhLnNlbGVjdGlvbi5lbnRlcj1aLHRhLnNlbGVjdGlvbi5lbnRlci5wcm90b3R5cGU9U2EsU2EuYXBwZW5kPV9hLmFwcGVuZCxTYS5lbXB0eT1fYS5lbXB0eSxTYS5ub2RlPV9hLm5vZGUsU2EuY2FsbD1fYS5jYWxsLFNhLnNpemU9X2Euc2l6ZSxTYS5zZWxlY3Q9ZnVuY3Rpb24obil7Zm9yKHZhciB0LGUscix1LGksbz1bXSxhPS0xLGM9dGhpcy5sZW5ndGg7KythPGM7KXtyPSh1PXRoaXNbYV0pLnVwZGF0ZSxvLnB1c2godD1bXSksdC5wYXJlbnROb2RlPXUucGFyZW50Tm9kZTtmb3IodmFyIGw9LTEscz11Lmxlbmd0aDsrK2w8czspKGk9dVtsXSk/KHQucHVzaChyW2xdPWU9bi5jYWxsKHUucGFyZW50Tm9kZSxpLl9fZGF0YV9fLGwsYSkpLGUuX19kYXRhX189aS5fX2RhdGFfXyk6dC5wdXNoKG51bGwpfXJldHVybiBBKG8pfSxTYS5pbnNlcnQ9ZnVuY3Rpb24obix0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aDwyJiYodD1WKHRoaXMpKSxfYS5pbnNlcnQuY2FsbCh0aGlzLG4sdCl9LHRhLnNlbGVjdD1mdW5jdGlvbih0KXt2YXIgZTtyZXR1cm4ic3RyaW5nIj09dHlwZW9mIHQ/KGU9W01hKHQsdWEpXSxlLnBhcmVudE5vZGU9dWEuZG9jdW1lbnRFbGVtZW50KTooZT1bdF0sZS5wYXJlbnROb2RlPW4odCkpLEEoW2VdKX0sdGEuc2VsZWN0QWxsPWZ1bmN0aW9uKG4pe3ZhciB0O3JldHVybiJzdHJpbmciPT10eXBlb2Ygbj8odD1yYSh4YShuLHVhKSksdC5wYXJlbnROb2RlPXVhLmRvY3VtZW50RWxlbWVudCk6KHQ9bix0LnBhcmVudE5vZGU9bnVsbCksQShbdF0pfSxfYS5vbj1mdW5jdGlvbihuLHQsZSl7dmFyIHI9YXJndW1lbnRzLmxlbmd0aDtpZigzPnIpe2lmKCJzdHJpbmciIT10eXBlb2Ygbil7Mj5yJiYodD0hMSk7Zm9yKGUgaW4gbil0aGlzLmVhY2goWChlLG5bZV0sdCkpO3JldHVybiB0aGlzfWlmKDI+cilyZXR1cm4ocj10aGlzLm5vZGUoKVsiX19vbiIrbl0pJiZyLl87ZT0hMX1yZXR1cm4gdGhpcy5lYWNoKFgobix0LGUpKX07dmFyIGthPXRhLm1hcCh7bW91c2VlbnRlcjoibW91c2VvdmVyIixtb3VzZWxlYXZlOiJtb3VzZW91dCJ9KTt1YSYma2EuZm9yRWFjaChmdW5jdGlvbihuKXsib24iK24gaW4gdWEmJmthLnJlbW92ZShuKX0pO3ZhciBFYSxBYT0wO3RhLm1vdXNlPWZ1bmN0aW9uKG4pe3JldHVybiBKKG4saygpKX07dmFyIE5hPXRoaXMubmF2aWdhdG9yJiYvV2ViS2l0Ly50ZXN0KHRoaXMubmF2aWdhdG9yLnVzZXJBZ2VudCk/LTE6MDt0YS50b3VjaD1mdW5jdGlvbihuLHQsZSl7aWYoYXJndW1lbnRzLmxlbmd0aDwzJiYoZT10LHQ9aygpLmNoYW5nZWRUb3VjaGVzKSx0KWZvcih2YXIgcix1PTAsaT10Lmxlbmd0aDtpPnU7Kyt1KWlmKChyPXRbdV0pLmlkZW50aWZpZXI9PT1lKXJldHVybiBKKG4scil9LHRhLmJlaGF2aW9yLmRyYWc9ZnVuY3Rpb24oKXtmdW5jdGlvbiBuKCl7dGhpcy5vbigibW91c2Vkb3duLmRyYWciLGkpLm9uKCJ0b3VjaHN0YXJ0LmRyYWciLG8pfWZ1bmN0aW9uIGUobix0LGUsaSxvKXtyZXR1cm4gZnVuY3Rpb24oKXtmdW5jdGlvbiBhKCl7dmFyIG4sZSxyPXQoaCx2KTtyJiYobj1yWzBdLU1bMF0sZT1yWzFdLU1bMV0scHw9bnxlLE09cixnKHt0eXBlOiJkcmFnIix4OnJbMF0rbFswXSx5OnJbMV0rbFsxXSxkeDpuLGR5OmV9KSl9ZnVuY3Rpb24gYygpe3QoaCx2KSYmKG0ub24oaStkLG51bGwpLm9uKG8rZCxudWxsKSx5KHAmJnRhLmV2ZW50LnRhcmdldD09PWYpLGcoe3R5cGU6ImRyYWdlbmQifSkpfXZhciBsLHM9dGhpcyxmPXRhLmV2ZW50LnRhcmdldCxoPXMucGFyZW50Tm9kZSxnPXIub2Yocyxhcmd1bWVudHMpLHA9MCx2PW4oKSxkPSIuZHJhZyIrKG51bGw9PXY/IiI6Ii0iK3YpLG09dGEuc2VsZWN0KGUoZikpLm9uKGkrZCxhKS5vbihvK2QsYykseT1XKGYpLE09dChoLHYpO3U/KGw9dS5hcHBseShzLGFyZ3VtZW50cyksbD1bbC54LU1bMF0sbC55LU1bMV1dKTpsPVswLDBdLGcoe3R5cGU6ImRyYWdzdGFydCJ9KX19dmFyIHI9RShuLCJkcmFnIiwiZHJhZ3N0YXJ0IiwiZHJhZ2VuZCIpLHU9bnVsbCxpPWUoYix0YS5tb3VzZSx0LCJtb3VzZW1vdmUiLCJtb3VzZXVwIiksbz1lKEcsdGEudG91Y2gseSwidG91Y2htb3ZlIiwidG91Y2hlbmQiKTtyZXR1cm4gbi5vcmlnaW49ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHU9dCxuKTp1fSx0YS5yZWJpbmQobixyLCJvbiIpfSx0YS50b3VjaGVzPWZ1bmN0aW9uKG4sdCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg8MiYmKHQ9aygpLnRvdWNoZXMpLHQ/cmEodCkubWFwKGZ1bmN0aW9uKHQpe3ZhciBlPUoobix0KTtyZXR1cm4gZS5pZGVudGlmaWVyPXQuaWRlbnRpZmllcixlfSk6W119O3ZhciBDYT0xZS02LHphPUNhKkNhLHFhPU1hdGguUEksTGE9MipxYSxUYT1MYS1DYSxSYT1xYS8yLERhPXFhLzE4MCxQYT0xODAvcWEsVWE9TWF0aC5TUVJUMixqYT0yLEZhPTQ7dGEuaW50ZXJwb2xhdGVab29tPWZ1bmN0aW9uKG4sdCl7ZnVuY3Rpb24gZShuKXt2YXIgdD1uKnk7aWYobSl7dmFyIGU9cnQodiksbz1pLyhqYSpoKSooZSp1dChVYSp0K3YpLWV0KHYpKTtyZXR1cm5bcitvKmwsdStvKnMsaSplL3J0KFVhKnQrdildfXJldHVybltyK24qbCx1K24qcyxpKk1hdGguZXhwKFVhKnQpXX12YXIgcj1uWzBdLHU9blsxXSxpPW5bMl0sbz10WzBdLGE9dFsxXSxjPXRbMl0sbD1vLXIscz1hLXUsZj1sKmwrcypzLGg9TWF0aC5zcXJ0KGYpLGc9KGMqYy1pKmkrRmEqZikvKDIqaSpqYSpoKSxwPShjKmMtaSppLUZhKmYpLygyKmMqamEqaCksdj1NYXRoLmxvZyhNYXRoLnNxcnQoZypnKzEpLWcpLGQ9TWF0aC5sb2coTWF0aC5zcXJ0KHAqcCsxKS1wKSxtPWQtdix5PShtfHxNYXRoLmxvZyhjL2kpKS9VYTtyZXR1cm4gZS5kdXJhdGlvbj0xZTMqeSxlfSx0YS5iZWhhdmlvci56b29tPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gbihuKXtuLm9uKHEsZikub24oT2ErIi56b29tIixnKS5vbigiZGJsY2xpY2suem9vbSIscCkub24oUixoKX1mdW5jdGlvbiBlKG4pe3JldHVyblsoblswXS1rLngpL2suaywoblsxXS1rLnkpL2sua119ZnVuY3Rpb24gcihuKXtyZXR1cm5bblswXSprLmsray54LG5bMV0qay5rK2sueV19ZnVuY3Rpb24gdShuKXtrLms9TWF0aC5tYXgoTlswXSxNYXRoLm1pbihOWzFdLG4pKX1mdW5jdGlvbiBpKG4sdCl7dD1yKHQpLGsueCs9blswXS10WzBdLGsueSs9blsxXS10WzFdfWZ1bmN0aW9uIG8odCxlLHIsbyl7dC5fX2NoYXJ0X189e3g6ay54LHk6ay55LGs6ay5rfSx1KE1hdGgucG93KDIsbykpLGkoZD1lLHIpLHQ9dGEuc2VsZWN0KHQpLEM+MCYmKHQ9dC50cmFuc2l0aW9uKCkuZHVyYXRpb24oQykpLHQuY2FsbChuLmV2ZW50KX1mdW5jdGlvbiBhKCl7YiYmYi5kb21haW4oeC5yYW5nZSgpLm1hcChmdW5jdGlvbihuKXtyZXR1cm4obi1rLngpL2sua30pLm1hcCh4LmludmVydCkpLHcmJncuZG9tYWluKF8ucmFuZ2UoKS5tYXAoZnVuY3Rpb24obil7cmV0dXJuKG4tay55KS9rLmt9KS5tYXAoXy5pbnZlcnQpKX1mdW5jdGlvbiBjKG4pe3orK3x8bih7dHlwZToiem9vbXN0YXJ0In0pfWZ1bmN0aW9uIGwobil7YSgpLG4oe3R5cGU6Inpvb20iLHNjYWxlOmsuayx0cmFuc2xhdGU6W2sueCxrLnldfSl9ZnVuY3Rpb24gcyhuKXstLXp8fG4oe3R5cGU6Inpvb21lbmQifSksZD1udWxsfWZ1bmN0aW9uIGYoKXtmdW5jdGlvbiBuKCl7Zj0xLGkodGEubW91c2UodSksZyksbChhKX1mdW5jdGlvbiByKCl7aC5vbihMLG51bGwpLm9uKFQsbnVsbCkscChmJiZ0YS5ldmVudC50YXJnZXQ9PT1vKSxzKGEpfXZhciB1PXRoaXMsbz10YS5ldmVudC50YXJnZXQsYT1ELm9mKHUsYXJndW1lbnRzKSxmPTAsaD10YS5zZWxlY3QodCh1KSkub24oTCxuKS5vbihULHIpLGc9ZSh0YS5tb3VzZSh1KSkscD1XKHUpO0RsLmNhbGwodSksYyhhKX1mdW5jdGlvbiBoKCl7ZnVuY3Rpb24gbigpe3ZhciBuPXRhLnRvdWNoZXMocCk7cmV0dXJuIGc9ay5rLG4uZm9yRWFjaChmdW5jdGlvbihuKXtuLmlkZW50aWZpZXIgaW4gZCYmKGRbbi5pZGVudGlmaWVyXT1lKG4pKX0pLG59ZnVuY3Rpb24gdCgpe3ZhciB0PXRhLmV2ZW50LnRhcmdldDt0YS5zZWxlY3QodCkub24oeCxyKS5vbihiLGEpLF8ucHVzaCh0KTtmb3IodmFyIGU9dGEuZXZlbnQuY2hhbmdlZFRvdWNoZXMsdT0wLGk9ZS5sZW5ndGg7aT51OysrdSlkW2VbdV0uaWRlbnRpZmllcl09bnVsbDt2YXIgYz1uKCksbD1EYXRlLm5vdygpO2lmKDE9PT1jLmxlbmd0aCl7aWYoNTAwPmwtTSl7dmFyIHM9Y1swXTtvKHAscyxkW3MuaWRlbnRpZmllcl0sTWF0aC5mbG9vcihNYXRoLmxvZyhrLmspL01hdGguTE4yKSsxKSxTKCl9TT1sfWVsc2UgaWYoYy5sZW5ndGg+MSl7dmFyIHM9Y1swXSxmPWNbMV0saD1zWzBdLWZbMF0sZz1zWzFdLWZbMV07bT1oKmgrZypnfX1mdW5jdGlvbiByKCl7dmFyIG4sdCxlLHIsbz10YS50b3VjaGVzKHApO0RsLmNhbGwocCk7Zm9yKHZhciBhPTAsYz1vLmxlbmd0aDtjPmE7KythLHI9bnVsbClpZihlPW9bYV0scj1kW2UuaWRlbnRpZmllcl0pe2lmKHQpYnJlYWs7bj1lLHQ9cn1pZihyKXt2YXIgcz0ocz1lWzBdLW5bMF0pKnMrKHM9ZVsxXS1uWzFdKSpzLGY9bSYmTWF0aC5zcXJ0KHMvbSk7bj1bKG5bMF0rZVswXSkvMiwoblsxXStlWzFdKS8yXSx0PVsodFswXStyWzBdKS8yLCh0WzFdK3JbMV0pLzJdLHUoZipnKX1NPW51bGwsaShuLHQpLGwodil9ZnVuY3Rpb24gYSgpe2lmKHRhLmV2ZW50LnRvdWNoZXMubGVuZ3RoKXtmb3IodmFyIHQ9dGEuZXZlbnQuY2hhbmdlZFRvdWNoZXMsZT0wLHI9dC5sZW5ndGg7cj5lOysrZSlkZWxldGUgZFt0W2VdLmlkZW50aWZpZXJdO2Zvcih2YXIgdSBpbiBkKXJldHVybiB2b2lkIG4oKX10YS5zZWxlY3RBbGwoXykub24oeSxudWxsKSx3Lm9uKHEsZikub24oUixoKSxFKCkscyh2KX12YXIgZyxwPXRoaXMsdj1ELm9mKHAsYXJndW1lbnRzKSxkPXt9LG09MCx5PSIuem9vbS0iK3RhLmV2ZW50LmNoYW5nZWRUb3VjaGVzWzBdLmlkZW50aWZpZXIseD0idG91Y2htb3ZlIit5LGI9InRvdWNoZW5kIit5LF89W10sdz10YS5zZWxlY3QocCksRT1XKHApO3QoKSxjKHYpLHcub24ocSxudWxsKS5vbihSLHQpfWZ1bmN0aW9uIGcoKXt2YXIgbj1ELm9mKHRoaXMsYXJndW1lbnRzKTt5P2NsZWFyVGltZW91dCh5KToodj1lKGQ9bXx8dGEubW91c2UodGhpcykpLERsLmNhbGwodGhpcyksYyhuKSkseT1zZXRUaW1lb3V0KGZ1bmN0aW9uKCl7eT1udWxsLHMobil9LDUwKSxTKCksdShNYXRoLnBvdygyLC4wMDIqSGEoKSkqay5rKSxpKGQsdiksbChuKX1mdW5jdGlvbiBwKCl7dmFyIG49dGEubW91c2UodGhpcyksdD1NYXRoLmxvZyhrLmspL01hdGguTE4yO28odGhpcyxuLGUobiksdGEuZXZlbnQuc2hpZnRLZXk/TWF0aC5jZWlsKHQpLTE6TWF0aC5mbG9vcih0KSsxKX12YXIgdixkLG0seSxNLHgsYixfLHcsaz17eDowLHk6MCxrOjF9LEE9Wzk2MCw1MDBdLE49SWEsQz0yNTAsej0wLHE9Im1vdXNlZG93bi56b29tIixMPSJtb3VzZW1vdmUuem9vbSIsVD0ibW91c2V1cC56b29tIixSPSJ0b3VjaHN0YXJ0Lnpvb20iLEQ9RShuLCJ6b29tc3RhcnQiLCJ6b29tIiwiem9vbWVuZCIpO3JldHVybiBPYXx8KE9hPSJvbndoZWVsImluIHVhPyhIYT1mdW5jdGlvbigpe3JldHVybi10YS5ldmVudC5kZWx0YVkqKHRhLmV2ZW50LmRlbHRhTW9kZT8xMjA6MSl9LCJ3aGVlbCIpOiJvbm1vdXNld2hlZWwiaW4gdWE/KEhhPWZ1bmN0aW9uKCl7cmV0dXJuIHRhLmV2ZW50LndoZWVsRGVsdGF9LCJtb3VzZXdoZWVsIik6KEhhPWZ1bmN0aW9uKCl7cmV0dXJuLXRhLmV2ZW50LmRldGFpbH0sIk1vek1vdXNlUGl4ZWxTY3JvbGwiKSksbi5ldmVudD1mdW5jdGlvbihuKXtuLmVhY2goZnVuY3Rpb24oKXt2YXIgbj1ELm9mKHRoaXMsYXJndW1lbnRzKSx0PWs7VGw/dGEuc2VsZWN0KHRoaXMpLnRyYW5zaXRpb24oKS5lYWNoKCJzdGFydC56b29tIixmdW5jdGlvbigpe2s9dGhpcy5fX2NoYXJ0X198fHt4OjAseTowLGs6MX0sYyhuKX0pLnR3ZWVuKCJ6b29tOnpvb20iLGZ1bmN0aW9uKCl7dmFyIGU9QVswXSxyPUFbMV0sdT1kP2RbMF06ZS8yLGk9ZD9kWzFdOnIvMixvPXRhLmludGVycG9sYXRlWm9vbShbKHUtay54KS9rLmssKGktay55KS9rLmssZS9rLmtdLFsodS10LngpL3QuaywoaS10LnkpL3QuayxlL3Qua10pO3JldHVybiBmdW5jdGlvbih0KXt2YXIgcj1vKHQpLGE9ZS9yWzJdO3RoaXMuX19jaGFydF9fPWs9e3g6dS1yWzBdKmEseTppLXJbMV0qYSxrOmF9LGwobil9fSkuZWFjaCgiaW50ZXJydXB0Lnpvb20iLGZ1bmN0aW9uKCl7cyhuKX0pLmVhY2goImVuZC56b29tIixmdW5jdGlvbigpe3Mobil9KToodGhpcy5fX2NoYXJ0X189ayxjKG4pLGwobikscyhuKSl9KX0sbi50cmFuc2xhdGU9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGs9e3g6K3RbMF0seTordFsxXSxrOmsua30sYSgpLG4pOltrLngsay55XX0sbi5zY2FsZT1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oaz17eDprLngseTprLnksazordH0sYSgpLG4pOmsua30sbi5zY2FsZUV4dGVudD1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oTj1udWxsPT10P0lhOlsrdFswXSwrdFsxXV0sbik6Tn0sbi5jZW50ZXI9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG09dCYmWyt0WzBdLCt0WzFdXSxuKTptfSxuLnNpemU9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KEE9dCYmWyt0WzBdLCt0WzFdXSxuKTpBfSxuLmR1cmF0aW9uPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhDPSt0LG4pOkN9LG4ueD1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oYj10LHg9dC5jb3B5KCksaz17eDowLHk6MCxrOjF9LG4pOmJ9LG4ueT1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8odz10LF89dC5jb3B5KCksaz17eDowLHk6MCxrOjF9LG4pOnd9LHRhLnJlYmluZChuLEQsIm9uIil9O3ZhciBIYSxPYSxJYT1bMCwxLzBdO3RhLmNvbG9yPW90LG90LnByb3RvdHlwZS50b1N0cmluZz1mdW5jdGlvbigpe3JldHVybiB0aGlzLnJnYigpKyIifSx0YS5oc2w9YXQ7dmFyIFlhPWF0LnByb3RvdHlwZT1uZXcgb3Q7WWEuYnJpZ2h0ZXI9ZnVuY3Rpb24obil7cmV0dXJuIG49TWF0aC5wb3coLjcsYXJndW1lbnRzLmxlbmd0aD9uOjEpLG5ldyBhdCh0aGlzLmgsdGhpcy5zLHRoaXMubC9uKX0sWWEuZGFya2VyPWZ1bmN0aW9uKG4pe3JldHVybiBuPU1hdGgucG93KC43LGFyZ3VtZW50cy5sZW5ndGg/bjoxKSxuZXcgYXQodGhpcy5oLHRoaXMucyxuKnRoaXMubCl9LFlhLnJnYj1mdW5jdGlvbigpe3JldHVybiBjdCh0aGlzLmgsdGhpcy5zLHRoaXMubCl9LHRhLmhjbD1sdDt2YXIgWmE9bHQucHJvdG90eXBlPW5ldyBvdDtaYS5icmlnaHRlcj1mdW5jdGlvbihuKXtyZXR1cm4gbmV3IGx0KHRoaXMuaCx0aGlzLmMsTWF0aC5taW4oMTAwLHRoaXMubCtWYSooYXJndW1lbnRzLmxlbmd0aD9uOjEpKSl9LFphLmRhcmtlcj1mdW5jdGlvbihuKXtyZXR1cm4gbmV3IGx0KHRoaXMuaCx0aGlzLmMsTWF0aC5tYXgoMCx0aGlzLmwtVmEqKGFyZ3VtZW50cy5sZW5ndGg/bjoxKSkpfSxaYS5yZ2I9ZnVuY3Rpb24oKXtyZXR1cm4gc3QodGhpcy5oLHRoaXMuYyx0aGlzLmwpLnJnYigpfSx0YS5sYWI9ZnQ7dmFyIFZhPTE4LFhhPS45NTA0NywkYT0xLEJhPTEuMDg4ODMsV2E9ZnQucHJvdG90eXBlPW5ldyBvdDtXYS5icmlnaHRlcj1mdW5jdGlvbihuKXtyZXR1cm4gbmV3IGZ0KE1hdGgubWluKDEwMCx0aGlzLmwrVmEqKGFyZ3VtZW50cy5sZW5ndGg/bjoxKSksdGhpcy5hLHRoaXMuYil9LFdhLmRhcmtlcj1mdW5jdGlvbihuKXtyZXR1cm4gbmV3IGZ0KE1hdGgubWF4KDAsdGhpcy5sLVZhKihhcmd1bWVudHMubGVuZ3RoP246MSkpLHRoaXMuYSx0aGlzLmIpfSxXYS5yZ2I9ZnVuY3Rpb24oKXtyZXR1cm4gaHQodGhpcy5sLHRoaXMuYSx0aGlzLmIpfSx0YS5yZ2I9bXQ7dmFyIEphPW10LnByb3RvdHlwZT1uZXcgb3Q7SmEuYnJpZ2h0ZXI9ZnVuY3Rpb24obil7bj1NYXRoLnBvdyguNyxhcmd1bWVudHMubGVuZ3RoP246MSk7dmFyIHQ9dGhpcy5yLGU9dGhpcy5nLHI9dGhpcy5iLHU9MzA7cmV0dXJuIHR8fGV8fHI/KHQmJnU+dCYmKHQ9dSksZSYmdT5lJiYoZT11KSxyJiZ1PnImJihyPXUpLG5ldyBtdChNYXRoLm1pbigyNTUsdC9uKSxNYXRoLm1pbigyNTUsZS9uKSxNYXRoLm1pbigyNTUsci9uKSkpOm5ldyBtdCh1LHUsdSl9LEphLmRhcmtlcj1mdW5jdGlvbihuKXtyZXR1cm4gbj1NYXRoLnBvdyguNyxhcmd1bWVudHMubGVuZ3RoP246MSksbmV3IG10KG4qdGhpcy5yLG4qdGhpcy5nLG4qdGhpcy5iKX0sSmEuaHNsPWZ1bmN0aW9uKCl7cmV0dXJuIF90KHRoaXMucix0aGlzLmcsdGhpcy5iKX0sSmEudG9TdHJpbmc9ZnVuY3Rpb24oKXtyZXR1cm4iIyIreHQodGhpcy5yKSt4dCh0aGlzLmcpK3h0KHRoaXMuYil9O3ZhciBHYT10YS5tYXAoe2FsaWNlYmx1ZToxNTc5MjM4MyxhbnRpcXVld2hpdGU6MTY0NDQzNzUsYXF1YTo2NTUzNSxhcXVhbWFyaW5lOjgzODg1NjQsYXp1cmU6MTU3OTQxNzUsYmVpZ2U6MTYxMTkyNjAsYmlzcXVlOjE2NzcwMjQ0LGJsYWNrOjAsYmxhbmNoZWRhbG1vbmQ6MTY3NzIwNDUsYmx1ZToyNTUsYmx1ZXZpb2xldDo5MDU1MjAyLGJyb3duOjEwODI0MjM0LGJ1cmx5d29vZDoxNDU5NjIzMSxjYWRldGJsdWU6NjI2NjUyOCxjaGFydHJldXNlOjgzODgzNTIsY2hvY29sYXRlOjEzNzg5NDcwLGNvcmFsOjE2NzQ0MjcyLGNvcm5mbG93ZXJibHVlOjY1OTE5ODEsY29ybnNpbGs6MTY3NzUzODgsY3JpbXNvbjoxNDQyMzEwMCxjeWFuOjY1NTM1LGRhcmtibHVlOjEzOSxkYXJrY3lhbjozNTcyMyxkYXJrZ29sZGVucm9kOjEyMDkyOTM5LGRhcmtncmF5OjExMTE5MDE3LGRhcmtncmVlbjoyNTYwMCxkYXJrZ3JleToxMTExOTAxNyxkYXJra2hha2k6MTI0MzMyNTksZGFya21hZ2VudGE6OTEwOTY0MyxkYXJrb2xpdmVncmVlbjo1NTk3OTk5LGRhcmtvcmFuZ2U6MTY3NDc1MjAsZGFya29yY2hpZDoxMDA0MDAxMixkYXJrcmVkOjkxMDk1MDQsZGFya3NhbG1vbjoxNTMwODQxMCxkYXJrc2VhZ3JlZW46OTQxOTkxOSxkYXJrc2xhdGVibHVlOjQ3MzQzNDcsZGFya3NsYXRlZ3JheTozMTAwNDk1LGRhcmtzbGF0ZWdyZXk6MzEwMDQ5NSxkYXJrdHVycXVvaXNlOjUyOTQ1LGRhcmt2aW9sZXQ6OTY5OTUzOSxkZWVwcGluazoxNjcxNjk0NyxkZWVwc2t5Ymx1ZTo0OTE1MSxkaW1ncmF5OjY5MDgyNjUsZGltZ3JleTo2OTA4MjY1LGRvZGdlcmJsdWU6MjAwMzE5OSxmaXJlYnJpY2s6MTE2NzQxNDYsZmxvcmFsd2hpdGU6MTY3NzU5MjAsZm9yZXN0Z3JlZW46MjI2Mzg0MixmdWNoc2lhOjE2NzExOTM1LGdhaW5zYm9ybzoxNDQ3NDQ2MCxnaG9zdHdoaXRlOjE2MzE2NjcxLGdvbGQ6MTY3NjY3MjAsZ29sZGVucm9kOjE0MzI5MTIwLGdyYXk6ODQyMTUwNCxncmVlbjozMjc2OCxncmVlbnllbGxvdzoxMTQwMzA1NSxncmV5Ojg0MjE1MDQsaG9uZXlkZXc6MTU3OTQxNjAsaG90cGluazoxNjczODc0MCxpbmRpYW5yZWQ6MTM0NTg1MjQsaW5kaWdvOjQ5MTUzMzAsaXZvcnk6MTY3NzcyMDAsa2hha2k6MTU3ODc2NjAsbGF2ZW5kZXI6MTUxMzI0MTAsbGF2ZW5kZXJibHVzaDoxNjc3MzM2NSxsYXduZ3JlZW46ODE5MDk3NixsZW1vbmNoaWZmb246MTY3NzU4ODUsbGlnaHRibHVlOjExMzkzMjU0LGxpZ2h0Y29yYWw6MTU3NjE1MzYsbGlnaHRjeWFuOjE0NzQ1NTk5LGxpZ2h0Z29sZGVucm9keWVsbG93OjE2NDQ4MjEwLGxpZ2h0Z3JheToxMzg4MjMyMyxsaWdodGdyZWVuOjk0OTgyNTYsbGlnaHRncmV5OjEzODgyMzIzLGxpZ2h0cGluazoxNjc1ODQ2NSxsaWdodHNhbG1vbjoxNjc1Mjc2MixsaWdodHNlYWdyZWVuOjIxNDI4OTAsbGlnaHRza3libHVlOjg5MDAzNDYsbGlnaHRzbGF0ZWdyYXk6NzgzMzc1MyxsaWdodHNsYXRlZ3JleTo3ODMzNzUzLGxpZ2h0c3RlZWxibHVlOjExNTg0NzM0LGxpZ2h0eWVsbG93OjE2Nzc3MTg0LGxpbWU6NjUyODAsbGltZWdyZWVuOjMzMjkzMzAsbGluZW46MTY0NDU2NzAsbWFnZW50YToxNjcxMTkzNSxtYXJvb246ODM4ODYwOCxtZWRpdW1hcXVhbWFyaW5lOjY3MzczMjIsbWVkaXVtYmx1ZToyMDUsbWVkaXVtb3JjaGlkOjEyMjExNjY3LG1lZGl1bXB1cnBsZTo5NjYyNjgzLG1lZGl1bXNlYWdyZWVuOjM5NzgwOTcsbWVkaXVtc2xhdGVibHVlOjgwODc3OTAsbWVkaXVtc3ByaW5nZ3JlZW46NjQxNTQsbWVkaXVtdHVycXVvaXNlOjQ3NzIzMDAsbWVkaXVtdmlvbGV0cmVkOjEzMDQ3MTczLG1pZG5pZ2h0Ymx1ZToxNjQ0OTEyLG1pbnRjcmVhbToxNjEyMTg1MCxtaXN0eXJvc2U6MTY3NzAyNzMsbW9jY2FzaW46MTY3NzAyMjksbmF2YWpvd2hpdGU6MTY3Njg2ODUsbmF2eToxMjgsb2xkbGFjZToxNjY0MzU1OCxvbGl2ZTo4NDIxMzc2LG9saXZlZHJhYjo3MDQ4NzM5LG9yYW5nZToxNjc1MzkyMCxvcmFuZ2VyZWQ6MTY3MjkzNDQsb3JjaGlkOjE0MzE1NzM0LHBhbGVnb2xkZW5yb2Q6MTU2NTcxMzAscGFsZWdyZWVuOjEwMDI1ODgwLHBhbGV0dXJxdW9pc2U6MTE1Mjk5NjYscGFsZXZpb2xldHJlZDoxNDM4MTIwMyxwYXBheWF3aGlwOjE2NzczMDc3LHBlYWNocHVmZjoxNjc2NzY3MyxwZXJ1OjEzNDY4OTkxLHBpbms6MTY3NjEwMzUscGx1bToxNDUyNDYzNyxwb3dkZXJibHVlOjExNTkxOTEwLHB1cnBsZTo4Mzg4NzM2LHJlYmVjY2FwdXJwbGU6NjY5Nzg4MSxyZWQ6MTY3MTE2ODAscm9zeWJyb3duOjEyMzU3NTE5LHJveWFsYmx1ZTo0Mjg2OTQ1LHNhZGRsZWJyb3duOjkxMjcxODcsc2FsbW9uOjE2NDE2ODgyLHNhbmR5YnJvd246MTYwMzI4NjQsc2VhZ3JlZW46MzA1MDMyNyxzZWFzaGVsbDoxNjc3NDYzOCxzaWVubmE6MTA1MDY3OTcsc2lsdmVyOjEyNjMyMjU2LHNreWJsdWU6ODkwMDMzMSxzbGF0ZWJsdWU6Njk3MDA2MSxzbGF0ZWdyYXk6NzM3Mjk0NCxzbGF0ZWdyZXk6NzM3Mjk0NCxzbm93OjE2Nzc1OTMwLHNwcmluZ2dyZWVuOjY1NDA3LHN0ZWVsYmx1ZTo0NjIwOTgwLHRhbjoxMzgwODc4MCx0ZWFsOjMyODk2LHRoaXN0bGU6MTQyMDQ4ODgsdG9tYXRvOjE2NzM3MDk1LHR1cnF1b2lzZTo0MjUxODU2LHZpb2xldDoxNTYzMTA4Nix3aGVhdDoxNjExMzMzMSx3aGl0ZToxNjc3NzIxNSx3aGl0ZXNtb2tlOjE2MTE5Mjg1LHllbGxvdzoxNjc3Njk2MCx5ZWxsb3dncmVlbjoxMDE0NTA3NH0pO0dhLmZvckVhY2goZnVuY3Rpb24obix0KXtHYS5zZXQobix5dCh0KSl9KSx0YS5mdW5jdG9yPUV0LHRhLnhocj1BdCh5KSx0YS5kc3Y9ZnVuY3Rpb24obix0KXtmdW5jdGlvbiBlKG4sZSxpKXthcmd1bWVudHMubGVuZ3RoPDMmJihpPWUsZT1udWxsKTt2YXIgbz1OdChuLHQsbnVsbD09ZT9yOnUoZSksaSk7cmV0dXJuIG8ucm93PWZ1bmN0aW9uKG4pe3JldHVybiBhcmd1bWVudHMubGVuZ3RoP28ucmVzcG9uc2UobnVsbD09KGU9bik/cjp1KG4pKTplfSxvfWZ1bmN0aW9uIHIobil7cmV0dXJuIGUucGFyc2Uobi5yZXNwb25zZVRleHQpfWZ1bmN0aW9uIHUobil7cmV0dXJuIGZ1bmN0aW9uKHQpe3JldHVybiBlLnBhcnNlKHQucmVzcG9uc2VUZXh0LG4pfX1mdW5jdGlvbiBpKHQpe3JldHVybiB0Lm1hcChvKS5qb2luKG4pfWZ1bmN0aW9uIG8obil7cmV0dXJuIGEudGVzdChuKT8nIicrbi5yZXBsYWNlKC9cIi9nLCciIicpKyciJzpufXZhciBhPW5ldyBSZWdFeHAoJ1siJytuKyJcbl0iKSxjPW4uY2hhckNvZGVBdCgwKTtyZXR1cm4gZS5wYXJzZT1mdW5jdGlvbihuLHQpe3ZhciByO3JldHVybiBlLnBhcnNlUm93cyhuLGZ1bmN0aW9uKG4sZSl7aWYocilyZXR1cm4gcihuLGUtMSk7dmFyIHU9bmV3IEZ1bmN0aW9uKCJkIiwicmV0dXJuIHsiK24ubWFwKGZ1bmN0aW9uKG4sdCl7cmV0dXJuIEpTT04uc3RyaW5naWZ5KG4pKyI6IGRbIit0KyJdIn0pLmpvaW4oIiwiKSsifSIpO3I9dD9mdW5jdGlvbihuLGUpe3JldHVybiB0KHUobiksZSl9OnV9KX0sZS5wYXJzZVJvd3M9ZnVuY3Rpb24obix0KXtmdW5jdGlvbiBlKCl7aWYocz49bClyZXR1cm4gbztpZih1KXJldHVybiB1PSExLGk7dmFyIHQ9cztpZigzND09PW4uY2hhckNvZGVBdCh0KSl7Zm9yKHZhciBlPXQ7ZSsrPGw7KWlmKDM0PT09bi5jaGFyQ29kZUF0KGUpKXtpZigzNCE9PW4uY2hhckNvZGVBdChlKzEpKWJyZWFrOysrZX1zPWUrMjt2YXIgcj1uLmNoYXJDb2RlQXQoZSsxKTtyZXR1cm4gMTM9PT1yPyh1PSEwLDEwPT09bi5jaGFyQ29kZUF0KGUrMikmJisrcyk6MTA9PT1yJiYodT0hMCksbi5zbGljZSh0KzEsZSkucmVwbGFjZSgvIiIvZywnIicpfWZvcig7bD5zOyl7dmFyIHI9bi5jaGFyQ29kZUF0KHMrKyksYT0xO2lmKDEwPT09cil1PSEwO2Vsc2UgaWYoMTM9PT1yKXU9ITAsMTA9PT1uLmNoYXJDb2RlQXQocykmJigrK3MsKythKTtlbHNlIGlmKHIhPT1jKWNvbnRpbnVlO3JldHVybiBuLnNsaWNlKHQscy1hKX1yZXR1cm4gbi5zbGljZSh0KX1mb3IodmFyIHIsdSxpPXt9LG89e30sYT1bXSxsPW4ubGVuZ3RoLHM9MCxmPTA7KHI9ZSgpKSE9PW87KXtmb3IodmFyIGg9W107ciE9PWkmJnIhPT1vOyloLnB1c2gocikscj1lKCk7dCYmbnVsbD09KGg9dChoLGYrKykpfHxhLnB1c2goaCl9cmV0dXJuIGF9LGUuZm9ybWF0PWZ1bmN0aW9uKHQpe2lmKEFycmF5LmlzQXJyYXkodFswXSkpcmV0dXJuIGUuZm9ybWF0Um93cyh0KTt2YXIgcj1uZXcgbSx1PVtdO3JldHVybiB0LmZvckVhY2goZnVuY3Rpb24obil7Zm9yKHZhciB0IGluIG4pci5oYXModCl8fHUucHVzaChyLmFkZCh0KSl9KSxbdS5tYXAobykuam9pbihuKV0uY29uY2F0KHQubWFwKGZ1bmN0aW9uKHQpe3JldHVybiB1Lm1hcChmdW5jdGlvbihuKXtyZXR1cm4gbyh0W25dKX0pLmpvaW4obil9KSkuam9pbigiXG4iKX0sZS5mb3JtYXRSb3dzPWZ1bmN0aW9uKG4pe3JldHVybiBuLm1hcChpKS5qb2luKCJcbiIpfSxlfSx0YS5jc3Y9dGEuZHN2KCIsIiwidGV4dC9jc3YiKSx0YS50c3Y9dGEuZHN2KCIJIiwidGV4dC90YWItc2VwYXJhdGVkLXZhbHVlcyIpO3ZhciBLYSxRYSxuYyx0YyxlYyxyYz10aGlzW3godGhpcywicmVxdWVzdEFuaW1hdGlvbkZyYW1lIildfHxmdW5jdGlvbihuKXtzZXRUaW1lb3V0KG4sMTcpfTt0YS50aW1lcj1mdW5jdGlvbihuLHQsZSl7dmFyIHI9YXJndW1lbnRzLmxlbmd0aDsyPnImJih0PTApLDM+ciYmKGU9RGF0ZS5ub3coKSk7dmFyIHU9ZSt0LGk9e2M6bix0OnUsZjohMSxuOm51bGx9O1FhP1FhLm49aTpLYT1pLFFhPWksbmN8fCh0Yz1jbGVhclRpbWVvdXQodGMpLG5jPTEscmMocXQpKX0sdGEudGltZXIuZmx1c2g9ZnVuY3Rpb24oKXtMdCgpLFR0KCl9LHRhLnJvdW5kPWZ1bmN0aW9uKG4sdCl7cmV0dXJuIHQ/TWF0aC5yb3VuZChuKih0PU1hdGgucG93KDEwLHQpKSkvdDpNYXRoLnJvdW5kKG4pfTt2YXIgdWM9WyJ5IiwieiIsImEiLCJmIiwicCIsIm4iLCJceGI1IiwibSIsIiIsImsiLCJNIiwiRyIsIlQiLCJQIiwiRSIsIloiLCJZIl0ubWFwKER0KTt0YS5mb3JtYXRQcmVmaXg9ZnVuY3Rpb24obix0KXt2YXIgZT0wO3JldHVybiBuJiYoMD5uJiYobio9LTEpLHQmJihuPXRhLnJvdW5kKG4sUnQobix0KSkpLGU9MStNYXRoLmZsb29yKDFlLTEyK01hdGgubG9nKG4pL01hdGguTE4xMCksZT1NYXRoLm1heCgtMjQsTWF0aC5taW4oMjQsMypNYXRoLmZsb29yKChlLTEpLzMpKSkpLHVjWzgrZS8zXX07dmFyIGljPS8oPzooW157XSk/KFs8Pj1eXSkpPyhbK1wtIF0pPyhbJCNdKT8oMCk/KFxkKyk/KCwpPyhcLi0/XGQrKT8oW2EteiVdKT8vaSxvYz10YS5tYXAoe2I6ZnVuY3Rpb24obil7cmV0dXJuIG4udG9TdHJpbmcoMil9LGM6ZnVuY3Rpb24obil7cmV0dXJuIFN0cmluZy5mcm9tQ2hhckNvZGUobil9LG86ZnVuY3Rpb24obil7cmV0dXJuIG4udG9TdHJpbmcoOCl9LHg6ZnVuY3Rpb24obil7cmV0dXJuIG4udG9TdHJpbmcoMTYpfSxYOmZ1bmN0aW9uKG4pe3JldHVybiBuLnRvU3RyaW5nKDE2KS50b1VwcGVyQ2FzZSgpfSxnOmZ1bmN0aW9uKG4sdCl7cmV0dXJuIG4udG9QcmVjaXNpb24odCl9LGU6ZnVuY3Rpb24obix0KXtyZXR1cm4gbi50b0V4cG9uZW50aWFsKHQpfSxmOmZ1bmN0aW9uKG4sdCl7cmV0dXJuIG4udG9GaXhlZCh0KX0scjpmdW5jdGlvbihuLHQpe3JldHVybihuPXRhLnJvdW5kKG4sUnQobix0KSkpLnRvRml4ZWQoTWF0aC5tYXgoMCxNYXRoLm1pbigyMCxSdChuKigxKzFlLTE1KSx0KSkpKX19KSxhYz10YS50aW1lPXt9LGNjPURhdGU7anQucHJvdG90eXBlPXtnZXREYXRlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuXy5nZXRVVENEYXRlKCl9LGdldERheTpmdW5jdGlvbigpe3JldHVybiB0aGlzLl8uZ2V0VVRDRGF5KCl9LGdldEZ1bGxZZWFyOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuXy5nZXRVVENGdWxsWWVhcigpfSxnZXRIb3VyczpmdW5jdGlvbigpe3JldHVybiB0aGlzLl8uZ2V0VVRDSG91cnMoKX0sZ2V0TWlsbGlzZWNvbmRzOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuXy5nZXRVVENNaWxsaXNlY29uZHMoKX0sZ2V0TWludXRlczpmdW5jdGlvbigpe3JldHVybiB0aGlzLl8uZ2V0VVRDTWludXRlcygpfSxnZXRNb250aDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl8uZ2V0VVRDTW9udGgoKX0sZ2V0U2Vjb25kczpmdW5jdGlvbigpe3JldHVybiB0aGlzLl8uZ2V0VVRDU2Vjb25kcygpfSxnZXRUaW1lOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuXy5nZXRUaW1lKCl9LGdldFRpbWV6b25lT2Zmc2V0OmZ1bmN0aW9uKCl7cmV0dXJuIDB9LHZhbHVlT2Y6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fLnZhbHVlT2YoKX0sc2V0RGF0ZTpmdW5jdGlvbigpe2xjLnNldFVUQ0RhdGUuYXBwbHkodGhpcy5fLGFyZ3VtZW50cyl9LHNldERheTpmdW5jdGlvbigpe2xjLnNldFVUQ0RheS5hcHBseSh0aGlzLl8sYXJndW1lbnRzKX0sc2V0RnVsbFllYXI6ZnVuY3Rpb24oKXtsYy5zZXRVVENGdWxsWWVhci5hcHBseSh0aGlzLl8sYXJndW1lbnRzKX0sc2V0SG91cnM6ZnVuY3Rpb24oKXtsYy5zZXRVVENIb3Vycy5hcHBseSh0aGlzLl8sYXJndW1lbnRzKX0sc2V0TWlsbGlzZWNvbmRzOmZ1bmN0aW9uKCl7bGMuc2V0VVRDTWlsbGlzZWNvbmRzLmFwcGx5KHRoaXMuXyxhcmd1bWVudHMpfSxzZXRNaW51dGVzOmZ1bmN0aW9uKCl7bGMuc2V0VVRDTWludXRlcy5hcHBseSh0aGlzLl8sYXJndW1lbnRzKX0sc2V0TW9udGg6ZnVuY3Rpb24oKXtsYy5zZXRVVENNb250aC5hcHBseSh0aGlzLl8sYXJndW1lbnRzKX0sc2V0U2Vjb25kczpmdW5jdGlvbigpe2xjLnNldFVUQ1NlY29uZHMuYXBwbHkodGhpcy5fLGFyZ3VtZW50cyl9LHNldFRpbWU6ZnVuY3Rpb24oKXtsYy5zZXRUaW1lLmFwcGx5KHRoaXMuXyxhcmd1bWVudHMpfX07dmFyIGxjPURhdGUucHJvdG90eXBlO2FjLnllYXI9RnQoZnVuY3Rpb24obil7cmV0dXJuIG49YWMuZGF5KG4pLG4uc2V0TW9udGgoMCwxKSxufSxmdW5jdGlvbihuLHQpe24uc2V0RnVsbFllYXIobi5nZXRGdWxsWWVhcigpK3QpfSxmdW5jdGlvbihuKXtyZXR1cm4gbi5nZXRGdWxsWWVhcigpfSksYWMueWVhcnM9YWMueWVhci5yYW5nZSxhYy55ZWFycy51dGM9YWMueWVhci51dGMucmFuZ2UsYWMuZGF5PUZ0KGZ1bmN0aW9uKG4pe3ZhciB0PW5ldyBjYygyZTMsMCk7cmV0dXJuIHQuc2V0RnVsbFllYXIobi5nZXRGdWxsWWVhcigpLG4uZ2V0TW9udGgoKSxuLmdldERhdGUoKSksdH0sZnVuY3Rpb24obix0KXtuLnNldERhdGUobi5nZXREYXRlKCkrdCl9LGZ1bmN0aW9uKG4pe3JldHVybiBuLmdldERhdGUoKS0xfSksYWMuZGF5cz1hYy5kYXkucmFuZ2UsYWMuZGF5cy51dGM9YWMuZGF5LnV0Yy5yYW5nZSxhYy5kYXlPZlllYXI9ZnVuY3Rpb24obil7dmFyIHQ9YWMueWVhcihuKTtyZXR1cm4gTWF0aC5mbG9vcigobi10LTZlNCoobi5nZXRUaW1lem9uZU9mZnNldCgpLXQuZ2V0VGltZXpvbmVPZmZzZXQoKSkpLzg2NGU1KX0sWyJzdW5kYXkiLCJtb25kYXkiLCJ0dWVzZGF5Iiwid2VkbmVzZGF5IiwidGh1cnNkYXkiLCJmcmlkYXkiLCJzYXR1cmRheSJdLmZvckVhY2goZnVuY3Rpb24obix0KXt0PTctdDt2YXIgZT1hY1tuXT1GdChmdW5jdGlvbihuKXtyZXR1cm4obj1hYy5kYXkobikpLnNldERhdGUobi5nZXREYXRlKCktKG4uZ2V0RGF5KCkrdCklNyksbn0sZnVuY3Rpb24obix0KXtuLnNldERhdGUobi5nZXREYXRlKCkrNypNYXRoLmZsb29yKHQpKX0sZnVuY3Rpb24obil7dmFyIGU9YWMueWVhcihuKS5nZXREYXkoKTtyZXR1cm4gTWF0aC5mbG9vcigoYWMuZGF5T2ZZZWFyKG4pKyhlK3QpJTcpLzcpLShlIT09dCl9KTthY1tuKyJzIl09ZS5yYW5nZSxhY1tuKyJzIl0udXRjPWUudXRjLnJhbmdlLGFjW24rIk9mWWVhciJdPWZ1bmN0aW9uKG4pe3ZhciBlPWFjLnllYXIobikuZ2V0RGF5KCk7cmV0dXJuIE1hdGguZmxvb3IoKGFjLmRheU9mWWVhcihuKSsoZSt0KSU3KS83KX19KSxhYy53ZWVrPWFjLnN1bmRheSxhYy53ZWVrcz1hYy5zdW5kYXkucmFuZ2UsYWMud2Vla3MudXRjPWFjLnN1bmRheS51dGMucmFuZ2UsYWMud2Vla09mWWVhcj1hYy5zdW5kYXlPZlllYXI7dmFyIHNjPXsiLSI6IiIsXzoiICIsMDoiMCJ9LGZjPS9eXHMqXGQrLyxoYz0vXiUvO3RhLmxvY2FsZT1mdW5jdGlvbihuKXtyZXR1cm57bnVtYmVyRm9ybWF0OlB0KG4pLHRpbWVGb3JtYXQ6T3Qobil9fTt2YXIgZ2M9dGEubG9jYWxlKHtkZWNpbWFsOiIuIix0aG91c2FuZHM6IiwiLGdyb3VwaW5nOlszXSxjdXJyZW5jeTpbIiQiLCIiXSxkYXRlVGltZToiJWEgJWIgJWUgJVggJVkiLGRhdGU6IiVtLyVkLyVZIix0aW1lOiIlSDolTTolUyIscGVyaW9kczpbIkFNIiwiUE0iXSxkYXlzOlsiU3VuZGF5IiwiTW9uZGF5IiwiVHVlc2RheSIsIldlZG5lc2RheSIsIlRodXJzZGF5IiwiRnJpZGF5IiwiU2F0dXJkYXkiXSxzaG9ydERheXM6WyJTdW4iLCJNb24iLCJUdWUiLCJXZWQiLCJUaHUiLCJGcmkiLCJTYXQiXSxtb250aHM6WyJKYW51YXJ5IiwiRmVicnVhcnkiLCJNYXJjaCIsIkFwcmlsIiwiTWF5IiwiSnVuZSIsIkp1bHkiLCJBdWd1c3QiLCJTZXB0ZW1iZXIiLCJPY3RvYmVyIiwiTm92ZW1iZXIiLCJEZWNlbWJlciJdLHNob3J0TW9udGhzOlsiSmFuIiwiRmViIiwiTWFyIiwiQXByIiwiTWF5IiwiSnVuIiwiSnVsIiwiQXVnIiwiU2VwIiwiT2N0IiwiTm92IiwiRGVjIl19KTt0YS5mb3JtYXQ9Z2MubnVtYmVyRm9ybWF0LHRhLmdlbz17fSxjZS5wcm90b3R5cGU9e3M6MCx0OjAsYWRkOmZ1bmN0aW9uKG4pe2xlKG4sdGhpcy50LHBjKSxsZShwYy5zLHRoaXMucyx0aGlzKSx0aGlzLnM/dGhpcy50Kz1wYy50OnRoaXMucz1wYy50Cn0scmVzZXQ6ZnVuY3Rpb24oKXt0aGlzLnM9dGhpcy50PTB9LHZhbHVlT2Y6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5zfX07dmFyIHBjPW5ldyBjZTt0YS5nZW8uc3RyZWFtPWZ1bmN0aW9uKG4sdCl7biYmdmMuaGFzT3duUHJvcGVydHkobi50eXBlKT92Y1tuLnR5cGVdKG4sdCk6c2Uobix0KX07dmFyIHZjPXtGZWF0dXJlOmZ1bmN0aW9uKG4sdCl7c2Uobi5nZW9tZXRyeSx0KX0sRmVhdHVyZUNvbGxlY3Rpb246ZnVuY3Rpb24obix0KXtmb3IodmFyIGU9bi5mZWF0dXJlcyxyPS0xLHU9ZS5sZW5ndGg7KytyPHU7KXNlKGVbcl0uZ2VvbWV0cnksdCl9fSxkYz17U3BoZXJlOmZ1bmN0aW9uKG4sdCl7dC5zcGhlcmUoKX0sUG9pbnQ6ZnVuY3Rpb24obix0KXtuPW4uY29vcmRpbmF0ZXMsdC5wb2ludChuWzBdLG5bMV0sblsyXSl9LE11bHRpUG9pbnQ6ZnVuY3Rpb24obix0KXtmb3IodmFyIGU9bi5jb29yZGluYXRlcyxyPS0xLHU9ZS5sZW5ndGg7KytyPHU7KW49ZVtyXSx0LnBvaW50KG5bMF0sblsxXSxuWzJdKX0sTGluZVN0cmluZzpmdW5jdGlvbihuLHQpe2ZlKG4uY29vcmRpbmF0ZXMsdCwwKX0sTXVsdGlMaW5lU3RyaW5nOmZ1bmN0aW9uKG4sdCl7Zm9yKHZhciBlPW4uY29vcmRpbmF0ZXMscj0tMSx1PWUubGVuZ3RoOysrcjx1OylmZShlW3JdLHQsMCl9LFBvbHlnb246ZnVuY3Rpb24obix0KXtoZShuLmNvb3JkaW5hdGVzLHQpfSxNdWx0aVBvbHlnb246ZnVuY3Rpb24obix0KXtmb3IodmFyIGU9bi5jb29yZGluYXRlcyxyPS0xLHU9ZS5sZW5ndGg7KytyPHU7KWhlKGVbcl0sdCl9LEdlb21ldHJ5Q29sbGVjdGlvbjpmdW5jdGlvbihuLHQpe2Zvcih2YXIgZT1uLmdlb21ldHJpZXMscj0tMSx1PWUubGVuZ3RoOysrcjx1OylzZShlW3JdLHQpfX07dGEuZ2VvLmFyZWE9ZnVuY3Rpb24obil7cmV0dXJuIG1jPTAsdGEuZ2VvLnN0cmVhbShuLE1jKSxtY307dmFyIG1jLHljPW5ldyBjZSxNYz17c3BoZXJlOmZ1bmN0aW9uKCl7bWMrPTQqcWF9LHBvaW50OmIsbGluZVN0YXJ0OmIsbGluZUVuZDpiLHBvbHlnb25TdGFydDpmdW5jdGlvbigpe3ljLnJlc2V0KCksTWMubGluZVN0YXJ0PWdlfSxwb2x5Z29uRW5kOmZ1bmN0aW9uKCl7dmFyIG49Mip5YzttYys9MD5uPzQqcWErbjpuLE1jLmxpbmVTdGFydD1NYy5saW5lRW5kPU1jLnBvaW50PWJ9fTt0YS5nZW8uYm91bmRzPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gbihuLHQpe00ucHVzaCh4PVtzPW4saD1uXSksZj50JiYoZj10KSx0PmcmJihnPXQpfWZ1bmN0aW9uIHQodCxlKXt2YXIgcj1wZShbdCpEYSxlKkRhXSk7aWYobSl7dmFyIHU9ZGUobSxyKSxpPVt1WzFdLC11WzBdLDBdLG89ZGUoaSx1KTtNZShvKSxvPXhlKG8pO3ZhciBjPXQtcCxsPWM+MD8xOi0xLHY9b1swXSpQYSpsLGQ9Z2EoYyk+MTgwO2lmKGReKHY+bCpwJiZsKnQ+dikpe3ZhciB5PW9bMV0qUGE7eT5nJiYoZz15KX1lbHNlIGlmKHY9KHYrMzYwKSUzNjAtMTgwLGReKHY+bCpwJiZsKnQ+dikpe3ZhciB5PS1vWzFdKlBhO2Y+eSYmKGY9eSl9ZWxzZSBmPmUmJihmPWUpLGU+ZyYmKGc9ZSk7ZD9wPnQ/YShzLHQpPmEocyxoKSYmKGg9dCk6YSh0LGgpPmEocyxoKSYmKHM9dCk6aD49cz8ocz50JiYocz10KSx0PmgmJihoPXQpKTp0PnA/YShzLHQpPmEocyxoKSYmKGg9dCk6YSh0LGgpPmEocyxoKSYmKHM9dCl9ZWxzZSBuKHQsZSk7bT1yLHA9dH1mdW5jdGlvbiBlKCl7Yi5wb2ludD10fWZ1bmN0aW9uIHIoKXt4WzBdPXMseFsxXT1oLGIucG9pbnQ9bixtPW51bGx9ZnVuY3Rpb24gdShuLGUpe2lmKG0pe3ZhciByPW4tcDt5Kz1nYShyKT4xODA/cisocj4wPzM2MDotMzYwKTpyfWVsc2Ugdj1uLGQ9ZTtNYy5wb2ludChuLGUpLHQobixlKX1mdW5jdGlvbiBpKCl7TWMubGluZVN0YXJ0KCl9ZnVuY3Rpb24gbygpe3UodixkKSxNYy5saW5lRW5kKCksZ2EoeSk+Q2EmJihzPS0oaD0xODApKSx4WzBdPXMseFsxXT1oLG09bnVsbH1mdW5jdGlvbiBhKG4sdCl7cmV0dXJuKHQtPW4pPDA/dCszNjA6dH1mdW5jdGlvbiBjKG4sdCl7cmV0dXJuIG5bMF0tdFswXX1mdW5jdGlvbiBsKG4sdCl7cmV0dXJuIHRbMF08PXRbMV0/dFswXTw9biYmbjw9dFsxXTpuPHRbMF18fHRbMV08bn12YXIgcyxmLGgsZyxwLHYsZCxtLHksTSx4LGI9e3BvaW50Om4sbGluZVN0YXJ0OmUsbGluZUVuZDpyLHBvbHlnb25TdGFydDpmdW5jdGlvbigpe2IucG9pbnQ9dSxiLmxpbmVTdGFydD1pLGIubGluZUVuZD1vLHk9MCxNYy5wb2x5Z29uU3RhcnQoKX0scG9seWdvbkVuZDpmdW5jdGlvbigpe01jLnBvbHlnb25FbmQoKSxiLnBvaW50PW4sYi5saW5lU3RhcnQ9ZSxiLmxpbmVFbmQ9ciwwPnljPyhzPS0oaD0xODApLGY9LShnPTkwKSk6eT5DYT9nPTkwOi1DYT55JiYoZj0tOTApLHhbMF09cyx4WzFdPWh9fTtyZXR1cm4gZnVuY3Rpb24obil7Zz1oPS0ocz1mPTEvMCksTT1bXSx0YS5nZW8uc3RyZWFtKG4sYik7dmFyIHQ9TS5sZW5ndGg7aWYodCl7TS5zb3J0KGMpO2Zvcih2YXIgZSxyPTEsdT1NWzBdLGk9W3VdO3Q+cjsrK3IpZT1NW3JdLGwoZVswXSx1KXx8bChlWzFdLHUpPyhhKHVbMF0sZVsxXSk+YSh1WzBdLHVbMV0pJiYodVsxXT1lWzFdKSxhKGVbMF0sdVsxXSk+YSh1WzBdLHVbMV0pJiYodVswXT1lWzBdKSk6aS5wdXNoKHU9ZSk7Zm9yKHZhciBvLGUscD0tMS8wLHQ9aS5sZW5ndGgtMSxyPTAsdT1pW3RdO3Q+PXI7dT1lLCsrcillPWlbcl0sKG89YSh1WzFdLGVbMF0pKT5wJiYocD1vLHM9ZVswXSxoPXVbMV0pfXJldHVybiBNPXg9bnVsbCwxLzA9PT1zfHwxLzA9PT1mP1tbMC8wLDAvMF0sWzAvMCwwLzBdXTpbW3MsZl0sW2gsZ11dfX0oKSx0YS5nZW8uY2VudHJvaWQ9ZnVuY3Rpb24obil7eGM9YmM9X2M9d2M9U2M9a2M9RWM9QWM9TmM9Q2M9emM9MCx0YS5nZW8uc3RyZWFtKG4scWMpO3ZhciB0PU5jLGU9Q2Mscj16Yyx1PXQqdCtlKmUrcipyO3JldHVybiB6YT51JiYodD1rYyxlPUVjLHI9QWMsQ2E+YmMmJih0PV9jLGU9d2Mscj1TYyksdT10KnQrZSplK3Iqcix6YT51KT9bMC8wLDAvMF06W01hdGguYXRhbjIoZSx0KSpQYSx0dChyL01hdGguc3FydCh1KSkqUGFdfTt2YXIgeGMsYmMsX2Msd2MsU2Msa2MsRWMsQWMsTmMsQ2MsemMscWM9e3NwaGVyZTpiLHBvaW50Ol9lLGxpbmVTdGFydDpTZSxsaW5lRW5kOmtlLHBvbHlnb25TdGFydDpmdW5jdGlvbigpe3FjLmxpbmVTdGFydD1FZX0scG9seWdvbkVuZDpmdW5jdGlvbigpe3FjLmxpbmVTdGFydD1TZX19LExjPUxlKE5lLFBlLGplLFstcWEsLXFhLzJdKSxUYz0xZTk7dGEuZ2VvLmNsaXBFeHRlbnQ9ZnVuY3Rpb24oKXt2YXIgbix0LGUscix1LGksbz17c3RyZWFtOmZ1bmN0aW9uKG4pe3JldHVybiB1JiYodS52YWxpZD0hMSksdT1pKG4pLHUudmFsaWQ9ITAsdX0sZXh0ZW50OmZ1bmN0aW9uKGEpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhpPUllKG49K2FbMF1bMF0sdD0rYVswXVsxXSxlPSthWzFdWzBdLHI9K2FbMV1bMV0pLHUmJih1LnZhbGlkPSExLHU9bnVsbCksbyk6W1tuLHRdLFtlLHJdXX19O3JldHVybiBvLmV4dGVudChbWzAsMF0sWzk2MCw1MDBdXSl9LCh0YS5nZW8uY29uaWNFcXVhbEFyZWE9ZnVuY3Rpb24oKXtyZXR1cm4gWWUoWmUpfSkucmF3PVplLHRhLmdlby5hbGJlcnM9ZnVuY3Rpb24oKXtyZXR1cm4gdGEuZ2VvLmNvbmljRXF1YWxBcmVhKCkucm90YXRlKFs5NiwwXSkuY2VudGVyKFstLjYsMzguN10pLnBhcmFsbGVscyhbMjkuNSw0NS41XSkuc2NhbGUoMTA3MCl9LHRhLmdlby5hbGJlcnNVc2E9ZnVuY3Rpb24oKXtmdW5jdGlvbiBuKG4pe3ZhciBpPW5bMF0sbz1uWzFdO3JldHVybiB0PW51bGwsZShpLG8pLHR8fChyKGksbyksdCl8fHUoaSxvKSx0fXZhciB0LGUscix1LGk9dGEuZ2VvLmFsYmVycygpLG89dGEuZ2VvLmNvbmljRXF1YWxBcmVhKCkucm90YXRlKFsxNTQsMF0pLmNlbnRlcihbLTIsNTguNV0pLnBhcmFsbGVscyhbNTUsNjVdKSxhPXRhLmdlby5jb25pY0VxdWFsQXJlYSgpLnJvdGF0ZShbMTU3LDBdKS5jZW50ZXIoWy0zLDE5LjldKS5wYXJhbGxlbHMoWzgsMThdKSxjPXtwb2ludDpmdW5jdGlvbihuLGUpe3Q9W24sZV19fTtyZXR1cm4gbi5pbnZlcnQ9ZnVuY3Rpb24obil7dmFyIHQ9aS5zY2FsZSgpLGU9aS50cmFuc2xhdGUoKSxyPShuWzBdLWVbMF0pL3QsdT0oblsxXS1lWzFdKS90O3JldHVybih1Pj0uMTImJi4yMzQ+dSYmcj49LS40MjUmJi0uMjE0PnI/bzp1Pj0uMTY2JiYuMjM0PnUmJnI+PS0uMjE0JiYtLjExNT5yP2E6aSkuaW52ZXJ0KG4pfSxuLnN0cmVhbT1mdW5jdGlvbihuKXt2YXIgdD1pLnN0cmVhbShuKSxlPW8uc3RyZWFtKG4pLHI9YS5zdHJlYW0obik7cmV0dXJue3BvaW50OmZ1bmN0aW9uKG4sdSl7dC5wb2ludChuLHUpLGUucG9pbnQobix1KSxyLnBvaW50KG4sdSl9LHNwaGVyZTpmdW5jdGlvbigpe3Quc3BoZXJlKCksZS5zcGhlcmUoKSxyLnNwaGVyZSgpfSxsaW5lU3RhcnQ6ZnVuY3Rpb24oKXt0LmxpbmVTdGFydCgpLGUubGluZVN0YXJ0KCksci5saW5lU3RhcnQoKX0sbGluZUVuZDpmdW5jdGlvbigpe3QubGluZUVuZCgpLGUubGluZUVuZCgpLHIubGluZUVuZCgpfSxwb2x5Z29uU3RhcnQ6ZnVuY3Rpb24oKXt0LnBvbHlnb25TdGFydCgpLGUucG9seWdvblN0YXJ0KCksci5wb2x5Z29uU3RhcnQoKX0scG9seWdvbkVuZDpmdW5jdGlvbigpe3QucG9seWdvbkVuZCgpLGUucG9seWdvbkVuZCgpLHIucG9seWdvbkVuZCgpfX19LG4ucHJlY2lzaW9uPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhpLnByZWNpc2lvbih0KSxvLnByZWNpc2lvbih0KSxhLnByZWNpc2lvbih0KSxuKTppLnByZWNpc2lvbigpfSxuLnNjYWxlPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhpLnNjYWxlKHQpLG8uc2NhbGUoLjM1KnQpLGEuc2NhbGUodCksbi50cmFuc2xhdGUoaS50cmFuc2xhdGUoKSkpOmkuc2NhbGUoKX0sbi50cmFuc2xhdGU9ZnVuY3Rpb24odCl7aWYoIWFyZ3VtZW50cy5sZW5ndGgpcmV0dXJuIGkudHJhbnNsYXRlKCk7dmFyIGw9aS5zY2FsZSgpLHM9K3RbMF0sZj0rdFsxXTtyZXR1cm4gZT1pLnRyYW5zbGF0ZSh0KS5jbGlwRXh0ZW50KFtbcy0uNDU1KmwsZi0uMjM4KmxdLFtzKy40NTUqbCxmKy4yMzgqbF1dKS5zdHJlYW0oYykucG9pbnQscj1vLnRyYW5zbGF0ZShbcy0uMzA3KmwsZisuMjAxKmxdKS5jbGlwRXh0ZW50KFtbcy0uNDI1KmwrQ2EsZisuMTIqbCtDYV0sW3MtLjIxNCpsLUNhLGYrLjIzNCpsLUNhXV0pLnN0cmVhbShjKS5wb2ludCx1PWEudHJhbnNsYXRlKFtzLS4yMDUqbCxmKy4yMTIqbF0pLmNsaXBFeHRlbnQoW1tzLS4yMTQqbCtDYSxmKy4xNjYqbCtDYV0sW3MtLjExNSpsLUNhLGYrLjIzNCpsLUNhXV0pLnN0cmVhbShjKS5wb2ludCxufSxuLnNjYWxlKDEwNzApfTt2YXIgUmMsRGMsUGMsVWMsamMsRmMsSGM9e3BvaW50OmIsbGluZVN0YXJ0OmIsbGluZUVuZDpiLHBvbHlnb25TdGFydDpmdW5jdGlvbigpe0RjPTAsSGMubGluZVN0YXJ0PVZlfSxwb2x5Z29uRW5kOmZ1bmN0aW9uKCl7SGMubGluZVN0YXJ0PUhjLmxpbmVFbmQ9SGMucG9pbnQ9YixSYys9Z2EoRGMvMil9fSxPYz17cG9pbnQ6WGUsbGluZVN0YXJ0OmIsbGluZUVuZDpiLHBvbHlnb25TdGFydDpiLHBvbHlnb25FbmQ6Yn0sSWM9e3BvaW50OldlLGxpbmVTdGFydDpKZSxsaW5lRW5kOkdlLHBvbHlnb25TdGFydDpmdW5jdGlvbigpe0ljLmxpbmVTdGFydD1LZX0scG9seWdvbkVuZDpmdW5jdGlvbigpe0ljLnBvaW50PVdlLEljLmxpbmVTdGFydD1KZSxJYy5saW5lRW5kPUdlfX07dGEuZ2VvLnBhdGg9ZnVuY3Rpb24oKXtmdW5jdGlvbiBuKG4pe3JldHVybiBuJiYoImZ1bmN0aW9uIj09dHlwZW9mIGEmJmkucG9pbnRSYWRpdXMoK2EuYXBwbHkodGhpcyxhcmd1bWVudHMpKSxvJiZvLnZhbGlkfHwobz11KGkpKSx0YS5nZW8uc3RyZWFtKG4sbykpLGkucmVzdWx0KCl9ZnVuY3Rpb24gdCgpe3JldHVybiBvPW51bGwsbn12YXIgZSxyLHUsaSxvLGE9NC41O3JldHVybiBuLmFyZWE9ZnVuY3Rpb24obil7cmV0dXJuIFJjPTAsdGEuZ2VvLnN0cmVhbShuLHUoSGMpKSxSY30sbi5jZW50cm9pZD1mdW5jdGlvbihuKXtyZXR1cm4gX2M9d2M9U2M9a2M9RWM9QWM9TmM9Q2M9emM9MCx0YS5nZW8uc3RyZWFtKG4sdShJYykpLHpjP1tOYy96YyxDYy96Y106QWM/W2tjL0FjLEVjL0FjXTpTYz9bX2MvU2Msd2MvU2NdOlswLzAsMC8wXX0sbi5ib3VuZHM9ZnVuY3Rpb24obil7cmV0dXJuIGpjPUZjPS0oUGM9VWM9MS8wKSx0YS5nZW8uc3RyZWFtKG4sdShPYykpLFtbUGMsVWNdLFtqYyxGY11dfSxuLnByb2plY3Rpb249ZnVuY3Rpb24obil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHU9KGU9bik/bi5zdHJlYW18fHRyKG4pOnksdCgpKTplfSxuLmNvbnRleHQ9ZnVuY3Rpb24obil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGk9bnVsbD09KHI9bik/bmV3ICRlOm5ldyBRZShuKSwiZnVuY3Rpb24iIT10eXBlb2YgYSYmaS5wb2ludFJhZGl1cyhhKSx0KCkpOnJ9LG4ucG9pbnRSYWRpdXM9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGE9ImZ1bmN0aW9uIj09dHlwZW9mIHQ/dDooaS5wb2ludFJhZGl1cygrdCksK3QpLG4pOmF9LG4ucHJvamVjdGlvbih0YS5nZW8uYWxiZXJzVXNhKCkpLmNvbnRleHQobnVsbCl9LHRhLmdlby50cmFuc2Zvcm09ZnVuY3Rpb24obil7cmV0dXJue3N0cmVhbTpmdW5jdGlvbih0KXt2YXIgZT1uZXcgZXIodCk7Zm9yKHZhciByIGluIG4pZVtyXT1uW3JdO3JldHVybiBlfX19LGVyLnByb3RvdHlwZT17cG9pbnQ6ZnVuY3Rpb24obix0KXt0aGlzLnN0cmVhbS5wb2ludChuLHQpfSxzcGhlcmU6ZnVuY3Rpb24oKXt0aGlzLnN0cmVhbS5zcGhlcmUoKX0sbGluZVN0YXJ0OmZ1bmN0aW9uKCl7dGhpcy5zdHJlYW0ubGluZVN0YXJ0KCl9LGxpbmVFbmQ6ZnVuY3Rpb24oKXt0aGlzLnN0cmVhbS5saW5lRW5kKCl9LHBvbHlnb25TdGFydDpmdW5jdGlvbigpe3RoaXMuc3RyZWFtLnBvbHlnb25TdGFydCgpfSxwb2x5Z29uRW5kOmZ1bmN0aW9uKCl7dGhpcy5zdHJlYW0ucG9seWdvbkVuZCgpfX0sdGEuZ2VvLnByb2plY3Rpb249dXIsdGEuZ2VvLnByb2plY3Rpb25NdXRhdG9yPWlyLCh0YS5nZW8uZXF1aXJlY3Rhbmd1bGFyPWZ1bmN0aW9uKCl7cmV0dXJuIHVyKGFyKX0pLnJhdz1hci5pbnZlcnQ9YXIsdGEuZ2VvLnJvdGF0aW9uPWZ1bmN0aW9uKG4pe2Z1bmN0aW9uIHQodCl7cmV0dXJuIHQ9bih0WzBdKkRhLHRbMV0qRGEpLHRbMF0qPVBhLHRbMV0qPVBhLHR9cmV0dXJuIG49bHIoblswXSUzNjAqRGEsblsxXSpEYSxuLmxlbmd0aD4yP25bMl0qRGE6MCksdC5pbnZlcnQ9ZnVuY3Rpb24odCl7cmV0dXJuIHQ9bi5pbnZlcnQodFswXSpEYSx0WzFdKkRhKSx0WzBdKj1QYSx0WzFdKj1QYSx0fSx0fSxjci5pbnZlcnQ9YXIsdGEuZ2VvLmNpcmNsZT1mdW5jdGlvbigpe2Z1bmN0aW9uIG4oKXt2YXIgbj0iZnVuY3Rpb24iPT10eXBlb2Ygcj9yLmFwcGx5KHRoaXMsYXJndW1lbnRzKTpyLHQ9bHIoLW5bMF0qRGEsLW5bMV0qRGEsMCkuaW52ZXJ0LHU9W107cmV0dXJuIGUobnVsbCxudWxsLDEse3BvaW50OmZ1bmN0aW9uKG4sZSl7dS5wdXNoKG49dChuLGUpKSxuWzBdKj1QYSxuWzFdKj1QYX19KSx7dHlwZToiUG9seWdvbiIsY29vcmRpbmF0ZXM6W3VdfX12YXIgdCxlLHI9WzAsMF0sdT02O3JldHVybiBuLm9yaWdpbj1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8ocj10LG4pOnJ9LG4uYW5nbGU9ZnVuY3Rpb24ocil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGU9Z3IoKHQ9K3IpKkRhLHUqRGEpLG4pOnR9LG4ucHJlY2lzaW9uPWZ1bmN0aW9uKHIpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhlPWdyKHQqRGEsKHU9K3IpKkRhKSxuKTp1fSxuLmFuZ2xlKDkwKX0sdGEuZ2VvLmRpc3RhbmNlPWZ1bmN0aW9uKG4sdCl7dmFyIGUscj0odFswXS1uWzBdKSpEYSx1PW5bMV0qRGEsaT10WzFdKkRhLG89TWF0aC5zaW4ociksYT1NYXRoLmNvcyhyKSxjPU1hdGguc2luKHUpLGw9TWF0aC5jb3ModSkscz1NYXRoLnNpbihpKSxmPU1hdGguY29zKGkpO3JldHVybiBNYXRoLmF0YW4yKE1hdGguc3FydCgoZT1mKm8pKmUrKGU9bCpzLWMqZiphKSplKSxjKnMrbCpmKmEpfSx0YS5nZW8uZ3JhdGljdWxlPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gbigpe3JldHVybnt0eXBlOiJNdWx0aUxpbmVTdHJpbmciLGNvb3JkaW5hdGVzOnQoKX19ZnVuY3Rpb24gdCgpe3JldHVybiB0YS5yYW5nZShNYXRoLmNlaWwoaS9kKSpkLHUsZCkubWFwKGgpLmNvbmNhdCh0YS5yYW5nZShNYXRoLmNlaWwobC9tKSptLGMsbSkubWFwKGcpKS5jb25jYXQodGEucmFuZ2UoTWF0aC5jZWlsKHIvcCkqcCxlLHApLmZpbHRlcihmdW5jdGlvbihuKXtyZXR1cm4gZ2EobiVkKT5DYX0pLm1hcChzKSkuY29uY2F0KHRhLnJhbmdlKE1hdGguY2VpbChhL3YpKnYsbyx2KS5maWx0ZXIoZnVuY3Rpb24obil7cmV0dXJuIGdhKG4lbSk+Q2F9KS5tYXAoZikpfXZhciBlLHIsdSxpLG8sYSxjLGwscyxmLGgsZyxwPTEwLHY9cCxkPTkwLG09MzYwLHk9Mi41O3JldHVybiBuLmxpbmVzPWZ1bmN0aW9uKCl7cmV0dXJuIHQoKS5tYXAoZnVuY3Rpb24obil7cmV0dXJue3R5cGU6IkxpbmVTdHJpbmciLGNvb3JkaW5hdGVzOm59fSl9LG4ub3V0bGluZT1mdW5jdGlvbigpe3JldHVybnt0eXBlOiJQb2x5Z29uIixjb29yZGluYXRlczpbaChpKS5jb25jYXQoZyhjKS5zbGljZSgxKSxoKHUpLnJldmVyc2UoKS5zbGljZSgxKSxnKGwpLnJldmVyc2UoKS5zbGljZSgxKSldfX0sbi5leHRlbnQ9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/bi5tYWpvckV4dGVudCh0KS5taW5vckV4dGVudCh0KTpuLm1pbm9yRXh0ZW50KCl9LG4ubWFqb3JFeHRlbnQ9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGk9K3RbMF1bMF0sdT0rdFsxXVswXSxsPSt0WzBdWzFdLGM9K3RbMV1bMV0saT51JiYodD1pLGk9dSx1PXQpLGw+YyYmKHQ9bCxsPWMsYz10KSxuLnByZWNpc2lvbih5KSk6W1tpLGxdLFt1LGNdXX0sbi5taW5vckV4dGVudD1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8ocj0rdFswXVswXSxlPSt0WzFdWzBdLGE9K3RbMF1bMV0sbz0rdFsxXVsxXSxyPmUmJih0PXIscj1lLGU9dCksYT5vJiYodD1hLGE9byxvPXQpLG4ucHJlY2lzaW9uKHkpKTpbW3IsYV0sW2Usb11dfSxuLnN0ZXA9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/bi5tYWpvclN0ZXAodCkubWlub3JTdGVwKHQpOm4ubWlub3JTdGVwKCl9LG4ubWFqb3JTdGVwPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhkPSt0WzBdLG09K3RbMV0sbik6W2QsbV19LG4ubWlub3JTdGVwPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhwPSt0WzBdLHY9K3RbMV0sbik6W3Asdl19LG4ucHJlY2lzaW9uPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh5PSt0LHM9dnIoYSxvLDkwKSxmPWRyKHIsZSx5KSxoPXZyKGwsYyw5MCksZz1kcihpLHUseSksbik6eX0sbi5tYWpvckV4dGVudChbWy0xODAsLTkwK0NhXSxbMTgwLDkwLUNhXV0pLm1pbm9yRXh0ZW50KFtbLTE4MCwtODAtQ2FdLFsxODAsODArQ2FdXSl9LHRhLmdlby5ncmVhdEFyYz1mdW5jdGlvbigpe2Z1bmN0aW9uIG4oKXtyZXR1cm57dHlwZToiTGluZVN0cmluZyIsY29vcmRpbmF0ZXM6W3R8fHIuYXBwbHkodGhpcyxhcmd1bWVudHMpLGV8fHUuYXBwbHkodGhpcyxhcmd1bWVudHMpXX19dmFyIHQsZSxyPW1yLHU9eXI7cmV0dXJuIG4uZGlzdGFuY2U9ZnVuY3Rpb24oKXtyZXR1cm4gdGEuZ2VvLmRpc3RhbmNlKHR8fHIuYXBwbHkodGhpcyxhcmd1bWVudHMpLGV8fHUuYXBwbHkodGhpcyxhcmd1bWVudHMpKX0sbi5zb3VyY2U9ZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHI9ZSx0PSJmdW5jdGlvbiI9PXR5cGVvZiBlP251bGw6ZSxuKTpyfSxuLnRhcmdldD1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8odT10LGU9ImZ1bmN0aW9uIj09dHlwZW9mIHQ/bnVsbDp0LG4pOnV9LG4ucHJlY2lzaW9uPWZ1bmN0aW9uKCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/bjowfSxufSx0YS5nZW8uaW50ZXJwb2xhdGU9ZnVuY3Rpb24obix0KXtyZXR1cm4gTXIoblswXSpEYSxuWzFdKkRhLHRbMF0qRGEsdFsxXSpEYSl9LHRhLmdlby5sZW5ndGg9ZnVuY3Rpb24obil7cmV0dXJuIFljPTAsdGEuZ2VvLnN0cmVhbShuLFpjKSxZY307dmFyIFljLFpjPXtzcGhlcmU6Yixwb2ludDpiLGxpbmVTdGFydDp4cixsaW5lRW5kOmIscG9seWdvblN0YXJ0OmIscG9seWdvbkVuZDpifSxWYz1icihmdW5jdGlvbihuKXtyZXR1cm4gTWF0aC5zcXJ0KDIvKDErbikpfSxmdW5jdGlvbihuKXtyZXR1cm4gMipNYXRoLmFzaW4obi8yKX0pOyh0YS5nZW8uYXppbXV0aGFsRXF1YWxBcmVhPWZ1bmN0aW9uKCl7cmV0dXJuIHVyKFZjKX0pLnJhdz1WYzt2YXIgWGM9YnIoZnVuY3Rpb24obil7dmFyIHQ9TWF0aC5hY29zKG4pO3JldHVybiB0JiZ0L01hdGguc2luKHQpfSx5KTsodGEuZ2VvLmF6aW11dGhhbEVxdWlkaXN0YW50PWZ1bmN0aW9uKCl7cmV0dXJuIHVyKFhjKX0pLnJhdz1YYywodGEuZ2VvLmNvbmljQ29uZm9ybWFsPWZ1bmN0aW9uKCl7cmV0dXJuIFllKF9yKX0pLnJhdz1fciwodGEuZ2VvLmNvbmljRXF1aWRpc3RhbnQ9ZnVuY3Rpb24oKXtyZXR1cm4gWWUod3IpfSkucmF3PXdyO3ZhciAkYz1icihmdW5jdGlvbihuKXtyZXR1cm4gMS9ufSxNYXRoLmF0YW4pOyh0YS5nZW8uZ25vbW9uaWM9ZnVuY3Rpb24oKXtyZXR1cm4gdXIoJGMpfSkucmF3PSRjLFNyLmludmVydD1mdW5jdGlvbihuLHQpe3JldHVybltuLDIqTWF0aC5hdGFuKE1hdGguZXhwKHQpKS1SYV19LCh0YS5nZW8ubWVyY2F0b3I9ZnVuY3Rpb24oKXtyZXR1cm4ga3IoU3IpfSkucmF3PVNyO3ZhciBCYz1icihmdW5jdGlvbigpe3JldHVybiAxfSxNYXRoLmFzaW4pOyh0YS5nZW8ub3J0aG9ncmFwaGljPWZ1bmN0aW9uKCl7cmV0dXJuIHVyKEJjKX0pLnJhdz1CYzt2YXIgV2M9YnIoZnVuY3Rpb24obil7cmV0dXJuIDEvKDErbil9LGZ1bmN0aW9uKG4pe3JldHVybiAyKk1hdGguYXRhbihuKX0pOyh0YS5nZW8uc3RlcmVvZ3JhcGhpYz1mdW5jdGlvbigpe3JldHVybiB1cihXYyl9KS5yYXc9V2MsRXIuaW52ZXJ0PWZ1bmN0aW9uKG4sdCl7cmV0dXJuWy10LDIqTWF0aC5hdGFuKE1hdGguZXhwKG4pKS1SYV19LCh0YS5nZW8udHJhbnN2ZXJzZU1lcmNhdG9yPWZ1bmN0aW9uKCl7dmFyIG49a3IoRXIpLHQ9bi5jZW50ZXIsZT1uLnJvdGF0ZTtyZXR1cm4gbi5jZW50ZXI9ZnVuY3Rpb24obil7cmV0dXJuIG4/dChbLW5bMV0sblswXV0pOihuPXQoKSxbblsxXSwtblswXV0pfSxuLnJvdGF0ZT1mdW5jdGlvbihuKXtyZXR1cm4gbj9lKFtuWzBdLG5bMV0sbi5sZW5ndGg+Mj9uWzJdKzkwOjkwXSk6KG49ZSgpLFtuWzBdLG5bMV0sblsyXS05MF0pfSxlKFswLDAsOTBdKX0pLnJhdz1Fcix0YS5nZW9tPXt9LHRhLmdlb20uaHVsbD1mdW5jdGlvbihuKXtmdW5jdGlvbiB0KG4pe2lmKG4ubGVuZ3RoPDMpcmV0dXJuW107dmFyIHQsdT1FdChlKSxpPUV0KHIpLG89bi5sZW5ndGgsYT1bXSxjPVtdO2Zvcih0PTA7bz50O3QrKylhLnB1c2goWyt1LmNhbGwodGhpcyxuW3RdLHQpLCtpLmNhbGwodGhpcyxuW3RdLHQpLHRdKTtmb3IoYS5zb3J0KHpyKSx0PTA7bz50O3QrKyljLnB1c2goW2FbdF1bMF0sLWFbdF1bMV1dKTt2YXIgbD1DcihhKSxzPUNyKGMpLGY9c1swXT09PWxbMF0saD1zW3MubGVuZ3RoLTFdPT09bFtsLmxlbmd0aC0xXSxnPVtdO2Zvcih0PWwubGVuZ3RoLTE7dD49MDstLXQpZy5wdXNoKG5bYVtsW3RdXVsyXV0pO2Zvcih0PStmO3Q8cy5sZW5ndGgtaDsrK3QpZy5wdXNoKG5bYVtzW3RdXVsyXV0pO3JldHVybiBnfXZhciBlPUFyLHI9TnI7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/dChuKToodC54PWZ1bmN0aW9uKG4pe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhlPW4sdCk6ZX0sdC55PWZ1bmN0aW9uKG4pe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhyPW4sdCk6cn0sdCl9LHRhLmdlb20ucG9seWdvbj1mdW5jdGlvbihuKXtyZXR1cm4geWEobixKYyksbn07dmFyIEpjPXRhLmdlb20ucG9seWdvbi5wcm90b3R5cGU9W107SmMuYXJlYT1mdW5jdGlvbigpe2Zvcih2YXIgbix0PS0xLGU9dGhpcy5sZW5ndGgscj10aGlzW2UtMV0sdT0wOysrdDxlOyluPXIscj10aGlzW3RdLHUrPW5bMV0qclswXS1uWzBdKnJbMV07cmV0dXJuLjUqdX0sSmMuY2VudHJvaWQ9ZnVuY3Rpb24obil7dmFyIHQsZSxyPS0xLHU9dGhpcy5sZW5ndGgsaT0wLG89MCxhPXRoaXNbdS0xXTtmb3IoYXJndW1lbnRzLmxlbmd0aHx8KG49LTEvKDYqdGhpcy5hcmVhKCkpKTsrK3I8dTspdD1hLGE9dGhpc1tyXSxlPXRbMF0qYVsxXS1hWzBdKnRbMV0saSs9KHRbMF0rYVswXSkqZSxvKz0odFsxXSthWzFdKSplO3JldHVybltpKm4sbypuXX0sSmMuY2xpcD1mdW5jdGlvbihuKXtmb3IodmFyIHQsZSxyLHUsaSxvLGE9VHIobiksYz0tMSxsPXRoaXMubGVuZ3RoLVRyKHRoaXMpLHM9dGhpc1tsLTFdOysrYzxsOyl7Zm9yKHQ9bi5zbGljZSgpLG4ubGVuZ3RoPTAsdT10aGlzW2NdLGk9dFsocj10Lmxlbmd0aC1hKS0xXSxlPS0xOysrZTxyOylvPXRbZV0scXIobyxzLHUpPyhxcihpLHMsdSl8fG4ucHVzaChMcihpLG8scyx1KSksbi5wdXNoKG8pKTpxcihpLHMsdSkmJm4ucHVzaChMcihpLG8scyx1KSksaT1vO2EmJm4ucHVzaChuWzBdKSxzPXV9cmV0dXJuIG59O3ZhciBHYyxLYyxRYyxubCx0bCxlbD1bXSxybD1bXTtPci5wcm90b3R5cGUucHJlcGFyZT1mdW5jdGlvbigpe2Zvcih2YXIgbix0PXRoaXMuZWRnZXMsZT10Lmxlbmd0aDtlLS07KW49dFtlXS5lZGdlLG4uYiYmbi5hfHx0LnNwbGljZShlLDEpO3JldHVybiB0LnNvcnQoWXIpLHQubGVuZ3RofSxRci5wcm90b3R5cGU9e3N0YXJ0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZWRnZS5sPT09dGhpcy5zaXRlP3RoaXMuZWRnZS5hOnRoaXMuZWRnZS5ifSxlbmQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5lZGdlLmw9PT10aGlzLnNpdGU/dGhpcy5lZGdlLmI6dGhpcy5lZGdlLmF9fSxudS5wcm90b3R5cGU9e2luc2VydDpmdW5jdGlvbihuLHQpe3ZhciBlLHIsdTtpZihuKXtpZih0LlA9bix0Lk49bi5OLG4uTiYmKG4uTi5QPXQpLG4uTj10LG4uUil7Zm9yKG49bi5SO24uTDspbj1uLkw7bi5MPXR9ZWxzZSBuLlI9dDtlPW59ZWxzZSB0aGlzLl8/KG49dXUodGhpcy5fKSx0LlA9bnVsbCx0Lk49bixuLlA9bi5MPXQsZT1uKToodC5QPXQuTj1udWxsLHRoaXMuXz10LGU9bnVsbCk7Zm9yKHQuTD10LlI9bnVsbCx0LlU9ZSx0LkM9ITAsbj10O2UmJmUuQzspcj1lLlUsZT09PXIuTD8odT1yLlIsdSYmdS5DPyhlLkM9dS5DPSExLHIuQz0hMCxuPXIpOihuPT09ZS5SJiYoZXUodGhpcyxlKSxuPWUsZT1uLlUpLGUuQz0hMSxyLkM9ITAscnUodGhpcyxyKSkpOih1PXIuTCx1JiZ1LkM/KGUuQz11LkM9ITEsci5DPSEwLG49cik6KG49PT1lLkwmJihydSh0aGlzLGUpLG49ZSxlPW4uVSksZS5DPSExLHIuQz0hMCxldSh0aGlzLHIpKSksZT1uLlU7dGhpcy5fLkM9ITF9LHJlbW92ZTpmdW5jdGlvbihuKXtuLk4mJihuLk4uUD1uLlApLG4uUCYmKG4uUC5OPW4uTiksbi5OPW4uUD1udWxsO3ZhciB0LGUscix1PW4uVSxpPW4uTCxvPW4uUjtpZihlPWk/bz91dShvKTppOm8sdT91Lkw9PT1uP3UuTD1lOnUuUj1lOnRoaXMuXz1lLGkmJm8/KHI9ZS5DLGUuQz1uLkMsZS5MPWksaS5VPWUsZSE9PW8/KHU9ZS5VLGUuVT1uLlUsbj1lLlIsdS5MPW4sZS5SPW8sby5VPWUpOihlLlU9dSx1PWUsbj1lLlIpKToocj1uLkMsbj1lKSxuJiYobi5VPXUpLCFyKXtpZihuJiZuLkMpcmV0dXJuIHZvaWQobi5DPSExKTtkb3tpZihuPT09dGhpcy5fKWJyZWFrO2lmKG49PT11Lkwpe2lmKHQ9dS5SLHQuQyYmKHQuQz0hMSx1LkM9ITAsZXUodGhpcyx1KSx0PXUuUiksdC5MJiZ0LkwuQ3x8dC5SJiZ0LlIuQyl7dC5SJiZ0LlIuQ3x8KHQuTC5DPSExLHQuQz0hMCxydSh0aGlzLHQpLHQ9dS5SKSx0LkM9dS5DLHUuQz10LlIuQz0hMSxldSh0aGlzLHUpLG49dGhpcy5fO2JyZWFrfX1lbHNlIGlmKHQ9dS5MLHQuQyYmKHQuQz0hMSx1LkM9ITAscnUodGhpcyx1KSx0PXUuTCksdC5MJiZ0LkwuQ3x8dC5SJiZ0LlIuQyl7dC5MJiZ0LkwuQ3x8KHQuUi5DPSExLHQuQz0hMCxldSh0aGlzLHQpLHQ9dS5MKSx0LkM9dS5DLHUuQz10LkwuQz0hMSxydSh0aGlzLHUpLG49dGhpcy5fO2JyZWFrfXQuQz0hMCxuPXUsdT11LlV9d2hpbGUoIW4uQyk7biYmKG4uQz0hMSl9fX0sdGEuZ2VvbS52b3Jvbm9pPWZ1bmN0aW9uKG4pe2Z1bmN0aW9uIHQobil7dmFyIHQ9bmV3IEFycmF5KG4ubGVuZ3RoKSxyPWFbMF1bMF0sdT1hWzBdWzFdLGk9YVsxXVswXSxvPWFbMV1bMV07cmV0dXJuIGl1KGUobiksYSkuY2VsbHMuZm9yRWFjaChmdW5jdGlvbihlLGEpe3ZhciBjPWUuZWRnZXMsbD1lLnNpdGUscz10W2FdPWMubGVuZ3RoP2MubWFwKGZ1bmN0aW9uKG4pe3ZhciB0PW4uc3RhcnQoKTtyZXR1cm5bdC54LHQueV19KTpsLng+PXImJmwueDw9aSYmbC55Pj11JiZsLnk8PW8/W1tyLG9dLFtpLG9dLFtpLHVdLFtyLHVdXTpbXTtzLnBvaW50PW5bYV19KSx0fWZ1bmN0aW9uIGUobil7cmV0dXJuIG4ubWFwKGZ1bmN0aW9uKG4sdCl7cmV0dXJue3g6TWF0aC5yb3VuZChpKG4sdCkvQ2EpKkNhLHk6TWF0aC5yb3VuZChvKG4sdCkvQ2EpKkNhLGk6dH19KX12YXIgcj1Bcix1PU5yLGk9cixvPXUsYT11bDtyZXR1cm4gbj90KG4pOih0LmxpbmtzPWZ1bmN0aW9uKG4pe3JldHVybiBpdShlKG4pKS5lZGdlcy5maWx0ZXIoZnVuY3Rpb24obil7cmV0dXJuIG4ubCYmbi5yfSkubWFwKGZ1bmN0aW9uKHQpe3JldHVybntzb3VyY2U6blt0LmwuaV0sdGFyZ2V0Om5bdC5yLmldfX0pfSx0LnRyaWFuZ2xlcz1mdW5jdGlvbihuKXt2YXIgdD1bXTtyZXR1cm4gaXUoZShuKSkuY2VsbHMuZm9yRWFjaChmdW5jdGlvbihlLHIpe2Zvcih2YXIgdSxpLG89ZS5zaXRlLGE9ZS5lZGdlcy5zb3J0KFlyKSxjPS0xLGw9YS5sZW5ndGgscz1hW2wtMV0uZWRnZSxmPXMubD09PW8/cy5yOnMubDsrK2M8bDspdT1zLGk9ZixzPWFbY10uZWRnZSxmPXMubD09PW8/cy5yOnMubCxyPGkuaSYmcjxmLmkmJmF1KG8saSxmKTwwJiZ0LnB1c2goW25bcl0sbltpLmldLG5bZi5pXV0pfSksdH0sdC54PWZ1bmN0aW9uKG4pe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhpPUV0KHI9biksdCk6cn0sdC55PWZ1bmN0aW9uKG4pe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhvPUV0KHU9biksdCk6dX0sdC5jbGlwRXh0ZW50PWZ1bmN0aW9uKG4pe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhhPW51bGw9PW4/dWw6bix0KTphPT09dWw/bnVsbDphfSx0LnNpemU9ZnVuY3Rpb24obil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/dC5jbGlwRXh0ZW50KG4mJltbMCwwXSxuXSk6YT09PXVsP251bGw6YSYmYVsxXX0sdCl9O3ZhciB1bD1bWy0xZTYsLTFlNl0sWzFlNiwxZTZdXTt0YS5nZW9tLmRlbGF1bmF5PWZ1bmN0aW9uKG4pe3JldHVybiB0YS5nZW9tLnZvcm9ub2koKS50cmlhbmdsZXMobil9LHRhLmdlb20ucXVhZHRyZWU9ZnVuY3Rpb24obix0LGUscix1KXtmdW5jdGlvbiBpKG4pe2Z1bmN0aW9uIGkobix0LGUscix1LGksbyxhKXtpZighaXNOYU4oZSkmJiFpc05hTihyKSlpZihuLmxlYWYpe3ZhciBjPW4ueCxzPW4ueTtpZihudWxsIT1jKWlmKGdhKGMtZSkrZ2Eocy1yKTwuMDEpbChuLHQsZSxyLHUsaSxvLGEpO2Vsc2V7dmFyIGY9bi5wb2ludDtuLng9bi55PW4ucG9pbnQ9bnVsbCxsKG4sZixjLHMsdSxpLG8sYSksbChuLHQsZSxyLHUsaSxvLGEpfWVsc2Ugbi54PWUsbi55PXIsbi5wb2ludD10fWVsc2UgbChuLHQsZSxyLHUsaSxvLGEpfWZ1bmN0aW9uIGwobix0LGUscix1LG8sYSxjKXt2YXIgbD0uNSoodSthKSxzPS41KihvK2MpLGY9ZT49bCxoPXI+PXMsZz1oPDwxfGY7bi5sZWFmPSExLG49bi5ub2Rlc1tnXXx8KG4ubm9kZXNbZ109c3UoKSksZj91PWw6YT1sLGg/bz1zOmM9cyxpKG4sdCxlLHIsdSxvLGEsYyl9dmFyIHMsZixoLGcscCx2LGQsbSx5LE09RXQoYSkseD1FdChjKTtpZihudWxsIT10KXY9dCxkPWUsbT1yLHk9dTtlbHNlIGlmKG09eT0tKHY9ZD0xLzApLGY9W10saD1bXSxwPW4ubGVuZ3RoLG8pZm9yKGc9MDtwPmc7KytnKXM9bltnXSxzLng8diYmKHY9cy54KSxzLnk8ZCYmKGQ9cy55KSxzLng+bSYmKG09cy54KSxzLnk+eSYmKHk9cy55KSxmLnB1c2gocy54KSxoLnB1c2gocy55KTtlbHNlIGZvcihnPTA7cD5nOysrZyl7dmFyIGI9K00ocz1uW2ddLGcpLF89K3gocyxnKTt2PmImJih2PWIpLGQ+XyYmKGQ9XyksYj5tJiYobT1iKSxfPnkmJih5PV8pLGYucHVzaChiKSxoLnB1c2goXyl9dmFyIHc9bS12LFM9eS1kO3c+Uz95PWQrdzptPXYrUzt2YXIgaz1zdSgpO2lmKGsuYWRkPWZ1bmN0aW9uKG4pe2koayxuLCtNKG4sKytnKSwreChuLGcpLHYsZCxtLHkpfSxrLnZpc2l0PWZ1bmN0aW9uKG4pe2Z1KG4sayx2LGQsbSx5KX0say5maW5kPWZ1bmN0aW9uKG4pe3JldHVybiBodShrLG5bMF0sblsxXSx2LGQsbSx5KX0sZz0tMSxudWxsPT10KXtmb3IoOysrZzxwOylpKGssbltnXSxmW2ddLGhbZ10sdixkLG0seSk7LS1nfWVsc2Ugbi5mb3JFYWNoKGsuYWRkKTtyZXR1cm4gZj1oPW49cz1udWxsLGt9dmFyIG8sYT1BcixjPU5yO3JldHVybihvPWFyZ3VtZW50cy5sZW5ndGgpPyhhPWN1LGM9bHUsMz09PW8mJih1PWUscj10LGU9dD0wKSxpKG4pKTooaS54PWZ1bmN0aW9uKG4pe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhhPW4saSk6YX0saS55PWZ1bmN0aW9uKG4pe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhjPW4saSk6Y30saS5leHRlbnQ9ZnVuY3Rpb24obil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG51bGw9PW4/dD1lPXI9dT1udWxsOih0PStuWzBdWzBdLGU9K25bMF1bMV0scj0rblsxXVswXSx1PStuWzFdWzFdKSxpKTpudWxsPT10P251bGw6W1t0LGVdLFtyLHVdXX0saS5zaXplPWZ1bmN0aW9uKG4pe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhudWxsPT1uP3Q9ZT1yPXU9bnVsbDoodD1lPTAscj0rblswXSx1PStuWzFdKSxpKTpudWxsPT10P251bGw6W3ItdCx1LWVdfSxpKX0sdGEuaW50ZXJwb2xhdGVSZ2I9Z3UsdGEuaW50ZXJwb2xhdGVPYmplY3Q9cHUsdGEuaW50ZXJwb2xhdGVOdW1iZXI9dnUsdGEuaW50ZXJwb2xhdGVTdHJpbmc9ZHU7dmFyIGlsPS9bLStdPyg/OlxkK1wuP1xkKnxcLj9cZCspKD86W2VFXVstK10/XGQrKT8vZyxvbD1uZXcgUmVnRXhwKGlsLnNvdXJjZSwiZyIpO3RhLmludGVycG9sYXRlPW11LHRhLmludGVycG9sYXRvcnM9W2Z1bmN0aW9uKG4sdCl7dmFyIGU9dHlwZW9mIHQ7cmV0dXJuKCJzdHJpbmciPT09ZT9HYS5oYXModCl8fC9eKCN8cmdiXCh8aHNsXCgpLy50ZXN0KHQpP2d1OmR1OnQgaW5zdGFuY2VvZiBvdD9ndTpBcnJheS5pc0FycmF5KHQpP3l1OiJvYmplY3QiPT09ZSYmaXNOYU4odCk/cHU6dnUpKG4sdCl9XSx0YS5pbnRlcnBvbGF0ZUFycmF5PXl1O3ZhciBhbD1mdW5jdGlvbigpe3JldHVybiB5fSxjbD10YS5tYXAoe2xpbmVhcjphbCxwb2x5Omt1LHF1YWQ6ZnVuY3Rpb24oKXtyZXR1cm4gX3V9LGN1YmljOmZ1bmN0aW9uKCl7cmV0dXJuIHd1fSxzaW46ZnVuY3Rpb24oKXtyZXR1cm4gRXV9LGV4cDpmdW5jdGlvbigpe3JldHVybiBBdX0sY2lyY2xlOmZ1bmN0aW9uKCl7cmV0dXJuIE51fSxlbGFzdGljOkN1LGJhY2s6enUsYm91bmNlOmZ1bmN0aW9uKCl7cmV0dXJuIHF1fX0pLGxsPXRhLm1hcCh7ImluIjp5LG91dDp4dSwiaW4tb3V0IjpidSwib3V0LWluIjpmdW5jdGlvbihuKXtyZXR1cm4gYnUoeHUobikpfX0pO3RhLmVhc2U9ZnVuY3Rpb24obil7dmFyIHQ9bi5pbmRleE9mKCItIiksZT10Pj0wP24uc2xpY2UoMCx0KTpuLHI9dD49MD9uLnNsaWNlKHQrMSk6ImluIjtyZXR1cm4gZT1jbC5nZXQoZSl8fGFsLHI9bGwuZ2V0KHIpfHx5LE11KHIoZS5hcHBseShudWxsLGVhLmNhbGwoYXJndW1lbnRzLDEpKSkpfSx0YS5pbnRlcnBvbGF0ZUhjbD1MdSx0YS5pbnRlcnBvbGF0ZUhzbD1UdSx0YS5pbnRlcnBvbGF0ZUxhYj1SdSx0YS5pbnRlcnBvbGF0ZVJvdW5kPUR1LHRhLnRyYW5zZm9ybT1mdW5jdGlvbihuKXt2YXIgdD11YS5jcmVhdGVFbGVtZW50TlModGEubnMucHJlZml4LnN2ZywiZyIpO3JldHVybih0YS50cmFuc2Zvcm09ZnVuY3Rpb24obil7aWYobnVsbCE9bil7dC5zZXRBdHRyaWJ1dGUoInRyYW5zZm9ybSIsbik7dmFyIGU9dC50cmFuc2Zvcm0uYmFzZVZhbC5jb25zb2xpZGF0ZSgpfXJldHVybiBuZXcgUHUoZT9lLm1hdHJpeDpzbCl9KShuKX0sUHUucHJvdG90eXBlLnRvU3RyaW5nPWZ1bmN0aW9uKCl7cmV0dXJuInRyYW5zbGF0ZSgiK3RoaXMudHJhbnNsYXRlKyIpcm90YXRlKCIrdGhpcy5yb3RhdGUrIilza2V3WCgiK3RoaXMuc2tldysiKXNjYWxlKCIrdGhpcy5zY2FsZSsiKSJ9O3ZhciBzbD17YToxLGI6MCxjOjAsZDoxLGU6MCxmOjB9O3RhLmludGVycG9sYXRlVHJhbnNmb3JtPUh1LHRhLmxheW91dD17fSx0YS5sYXlvdXQuYnVuZGxlPWZ1bmN0aW9uKCl7cmV0dXJuIGZ1bmN0aW9uKG4pe2Zvcih2YXIgdD1bXSxlPS0xLHI9bi5sZW5ndGg7KytlPHI7KXQucHVzaChZdShuW2VdKSk7cmV0dXJuIHR9fSx0YS5sYXlvdXQuY2hvcmQ9ZnVuY3Rpb24oKXtmdW5jdGlvbiBuKCl7dmFyIG4sbCxmLGgsZyxwPXt9LHY9W10sZD10YS5yYW5nZShpKSxtPVtdO2ZvcihlPVtdLHI9W10sbj0wLGg9LTE7KytoPGk7KXtmb3IobD0wLGc9LTE7KytnPGk7KWwrPXVbaF1bZ107di5wdXNoKGwpLG0ucHVzaCh0YS5yYW5nZShpKSksbis9bH1mb3IobyYmZC5zb3J0KGZ1bmN0aW9uKG4sdCl7cmV0dXJuIG8odltuXSx2W3RdKX0pLGEmJm0uZm9yRWFjaChmdW5jdGlvbihuLHQpe24uc29ydChmdW5jdGlvbihuLGUpe3JldHVybiBhKHVbdF1bbl0sdVt0XVtlXSl9KX0pLG49KExhLXMqaSkvbixsPTAsaD0tMTsrK2g8aTspe2ZvcihmPWwsZz0tMTsrK2c8aTspe3ZhciB5PWRbaF0sTT1tW3ldW2ddLHg9dVt5XVtNXSxiPWwsXz1sKz14Km47cFt5KyItIitNXT17aW5kZXg6eSxzdWJpbmRleDpNLHN0YXJ0QW5nbGU6YixlbmRBbmdsZTpfLHZhbHVlOnh9fXJbeV09e2luZGV4Onksc3RhcnRBbmdsZTpmLGVuZEFuZ2xlOmwsdmFsdWU6KGwtZikvbn0sbCs9c31mb3IoaD0tMTsrK2g8aTspZm9yKGc9aC0xOysrZzxpOyl7dmFyIHc9cFtoKyItIitnXSxTPXBbZysiLSIraF07KHcudmFsdWV8fFMudmFsdWUpJiZlLnB1c2gody52YWx1ZTxTLnZhbHVlP3tzb3VyY2U6Uyx0YXJnZXQ6d306e3NvdXJjZTp3LHRhcmdldDpTfSl9YyYmdCgpfWZ1bmN0aW9uIHQoKXtlLnNvcnQoZnVuY3Rpb24obix0KXtyZXR1cm4gYygobi5zb3VyY2UudmFsdWUrbi50YXJnZXQudmFsdWUpLzIsKHQuc291cmNlLnZhbHVlK3QudGFyZ2V0LnZhbHVlKS8yKX0pfXZhciBlLHIsdSxpLG8sYSxjLGw9e30scz0wO3JldHVybiBsLm1hdHJpeD1mdW5jdGlvbihuKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oaT0odT1uKSYmdS5sZW5ndGgsZT1yPW51bGwsbCk6dX0sbC5wYWRkaW5nPWZ1bmN0aW9uKG4pe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhzPW4sZT1yPW51bGwsbCk6c30sbC5zb3J0R3JvdXBzPWZ1bmN0aW9uKG4pe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhvPW4sZT1yPW51bGwsbCk6b30sbC5zb3J0U3ViZ3JvdXBzPWZ1bmN0aW9uKG4pe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhhPW4sZT1udWxsLGwpOmF9LGwuc29ydENob3Jkcz1mdW5jdGlvbihuKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oYz1uLGUmJnQoKSxsKTpjfSxsLmNob3Jkcz1mdW5jdGlvbigpe3JldHVybiBlfHxuKCksZX0sbC5ncm91cHM9ZnVuY3Rpb24oKXtyZXR1cm4gcnx8bigpLHJ9LGx9LHRhLmxheW91dC5mb3JjZT1mdW5jdGlvbigpe2Z1bmN0aW9uIG4obil7cmV0dXJuIGZ1bmN0aW9uKHQsZSxyLHUpe2lmKHQucG9pbnQhPT1uKXt2YXIgaT10LmN4LW4ueCxvPXQuY3ktbi55LGE9dS1lLGM9aSppK28qbztpZihjPmEqYS9kKXtpZihwPmMpe3ZhciBsPXQuY2hhcmdlL2M7bi5weC09aSpsLG4ucHktPW8qbH1yZXR1cm4hMH1pZih0LnBvaW50JiZjJiZwPmMpe3ZhciBsPXQucG9pbnRDaGFyZ2UvYztuLnB4LT1pKmwsbi5weS09bypsfX1yZXR1cm4hdC5jaGFyZ2V9fWZ1bmN0aW9uIHQobil7bi5weD10YS5ldmVudC54LG4ucHk9dGEuZXZlbnQueSxhLnJlc3VtZSgpfXZhciBlLHIsdSxpLG8sYT17fSxjPXRhLmRpc3BhdGNoKCJzdGFydCIsInRpY2siLCJlbmQiKSxsPVsxLDFdLHM9LjksZj1mbCxoPWhsLGc9LTMwLHA9Z2wsdj0uMSxkPS42NCxtPVtdLE09W107cmV0dXJuIGEudGljaz1mdW5jdGlvbigpe2lmKChyKj0uOTkpPC4wMDUpcmV0dXJuIGMuZW5kKHt0eXBlOiJlbmQiLGFscGhhOnI9MH0pLCEwO3ZhciB0LGUsYSxmLGgscCxkLHkseCxiPW0ubGVuZ3RoLF89TS5sZW5ndGg7Zm9yKGU9MDtfPmU7KytlKWE9TVtlXSxmPWEuc291cmNlLGg9YS50YXJnZXQseT1oLngtZi54LHg9aC55LWYueSwocD15KnkreCp4KSYmKHA9cippW2VdKigocD1NYXRoLnNxcnQocCkpLXVbZV0pL3AseSo9cCx4Kj1wLGgueC09eSooZD1mLndlaWdodC8oaC53ZWlnaHQrZi53ZWlnaHQpKSxoLnktPXgqZCxmLngrPXkqKGQ9MS1kKSxmLnkrPXgqZCk7aWYoKGQ9cip2KSYmKHk9bFswXS8yLHg9bFsxXS8yLGU9LTEsZCkpZm9yKDsrK2U8YjspYT1tW2VdLGEueCs9KHktYS54KSpkLGEueSs9KHgtYS55KSpkO2lmKGcpZm9yKEp1KHQ9dGEuZ2VvbS5xdWFkdHJlZShtKSxyLG8pLGU9LTE7KytlPGI7KShhPW1bZV0pLmZpeGVkfHx0LnZpc2l0KG4oYSkpO2ZvcihlPS0xOysrZTxiOylhPW1bZV0sYS5maXhlZD8oYS54PWEucHgsYS55PWEucHkpOihhLngtPShhLnB4LShhLnB4PWEueCkpKnMsYS55LT0oYS5weS0oYS5weT1hLnkpKSpzKTtjLnRpY2soe3R5cGU6InRpY2siLGFscGhhOnJ9KX0sYS5ub2Rlcz1mdW5jdGlvbihuKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obT1uLGEpOm19LGEubGlua3M9ZnVuY3Rpb24obil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KE09bixhKTpNfSxhLnNpemU9ZnVuY3Rpb24obil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGw9bixhKTpsfSxhLmxpbmtEaXN0YW5jZT1mdW5jdGlvbihuKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oZj0iZnVuY3Rpb24iPT10eXBlb2Ygbj9uOituLGEpOmZ9LGEuZGlzdGFuY2U9YS5saW5rRGlzdGFuY2UsYS5saW5rU3RyZW5ndGg9ZnVuY3Rpb24obil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGg9ImZ1bmN0aW9uIj09dHlwZW9mIG4/bjorbixhKTpofSxhLmZyaWN0aW9uPWZ1bmN0aW9uKG4pe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhzPStuLGEpOnN9LGEuY2hhcmdlPWZ1bmN0aW9uKG4pe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhnPSJmdW5jdGlvbiI9PXR5cGVvZiBuP246K24sYSk6Z30sYS5jaGFyZ2VEaXN0YW5jZT1mdW5jdGlvbihuKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8ocD1uKm4sYSk6TWF0aC5zcXJ0KHApfSxhLmdyYXZpdHk9ZnVuY3Rpb24obil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHY9K24sYSk6dn0sYS50aGV0YT1mdW5jdGlvbihuKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oZD1uKm4sYSk6TWF0aC5zcXJ0KGQpfSxhLmFscGhhPWZ1bmN0aW9uKG4pe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhuPStuLHI/cj1uPjA/bjowOm4+MCYmKGMuc3RhcnQoe3R5cGU6InN0YXJ0IixhbHBoYTpyPW59KSx0YS50aW1lcihhLnRpY2spKSxhKTpyfSxhLnN0YXJ0PWZ1bmN0aW9uKCl7ZnVuY3Rpb24gbihuLHIpe2lmKCFlKXtmb3IoZT1uZXcgQXJyYXkoYyksYT0wO2M+YTsrK2EpZVthXT1bXTtmb3IoYT0wO3M+YTsrK2Epe3ZhciB1PU1bYV07ZVt1LnNvdXJjZS5pbmRleF0ucHVzaCh1LnRhcmdldCksZVt1LnRhcmdldC5pbmRleF0ucHVzaCh1LnNvdXJjZSl9fWZvcih2YXIgaSxvPWVbdF0sYT0tMSxsPW8ubGVuZ3RoOysrYTxsOylpZighaXNOYU4oaT1vW2FdW25dKSlyZXR1cm4gaTtyZXR1cm4gTWF0aC5yYW5kb20oKSpyfXZhciB0LGUscixjPW0ubGVuZ3RoLHM9TS5sZW5ndGgscD1sWzBdLHY9bFsxXTtmb3IodD0wO2M+dDsrK3QpKHI9bVt0XSkuaW5kZXg9dCxyLndlaWdodD0wO2Zvcih0PTA7cz50OysrdClyPU1bdF0sIm51bWJlciI9PXR5cGVvZiByLnNvdXJjZSYmKHIuc291cmNlPW1bci5zb3VyY2VdKSwibnVtYmVyIj09dHlwZW9mIHIudGFyZ2V0JiYoci50YXJnZXQ9bVtyLnRhcmdldF0pLCsrci5zb3VyY2Uud2VpZ2h0LCsrci50YXJnZXQud2VpZ2h0O2Zvcih0PTA7Yz50OysrdClyPW1bdF0saXNOYU4oci54KSYmKHIueD1uKCJ4IixwKSksaXNOYU4oci55KSYmKHIueT1uKCJ5Iix2KSksaXNOYU4oci5weCkmJihyLnB4PXIueCksaXNOYU4oci5weSkmJihyLnB5PXIueSk7aWYodT1bXSwiZnVuY3Rpb24iPT10eXBlb2YgZilmb3IodD0wO3M+dDsrK3QpdVt0XT0rZi5jYWxsKHRoaXMsTVt0XSx0KTtlbHNlIGZvcih0PTA7cz50OysrdCl1W3RdPWY7aWYoaT1bXSwiZnVuY3Rpb24iPT10eXBlb2YgaClmb3IodD0wO3M+dDsrK3QpaVt0XT0raC5jYWxsKHRoaXMsTVt0XSx0KTtlbHNlIGZvcih0PTA7cz50OysrdClpW3RdPWg7aWYobz1bXSwiZnVuY3Rpb24iPT10eXBlb2YgZylmb3IodD0wO2M+dDsrK3Qpb1t0XT0rZy5jYWxsKHRoaXMsbVt0XSx0KTtlbHNlIGZvcih0PTA7Yz50OysrdClvW3RdPWc7cmV0dXJuIGEucmVzdW1lKCl9LGEucmVzdW1lPWZ1bmN0aW9uKCl7cmV0dXJuIGEuYWxwaGEoLjEpfSxhLnN0b3A9ZnVuY3Rpb24oKXtyZXR1cm4gYS5hbHBoYSgwKX0sYS5kcmFnPWZ1bmN0aW9uKCl7cmV0dXJuIGV8fChlPXRhLmJlaGF2aW9yLmRyYWcoKS5vcmlnaW4oeSkub24oImRyYWdzdGFydC5mb3JjZSIsWHUpLm9uKCJkcmFnLmZvcmNlIix0KS5vbigiZHJhZ2VuZC5mb3JjZSIsJHUpKSxhcmd1bWVudHMubGVuZ3RoP3ZvaWQgdGhpcy5vbigibW91c2VvdmVyLmZvcmNlIixCdSkub24oIm1vdXNlb3V0LmZvcmNlIixXdSkuY2FsbChlKTplfSx0YS5yZWJpbmQoYSxjLCJvbiIpfTt2YXIgZmw9MjAsaGw9MSxnbD0xLzA7dGEubGF5b3V0LmhpZXJhcmNoeT1mdW5jdGlvbigpe2Z1bmN0aW9uIG4odSl7dmFyIGksbz1bdV0sYT1bXTtmb3IodS5kZXB0aD0wO251bGwhPShpPW8ucG9wKCkpOylpZihhLnB1c2goaSksKGw9ZS5jYWxsKG4saSxpLmRlcHRoKSkmJihjPWwubGVuZ3RoKSl7Zm9yKHZhciBjLGwsczstLWM+PTA7KW8ucHVzaChzPWxbY10pLHMucGFyZW50PWkscy5kZXB0aD1pLmRlcHRoKzE7ciYmKGkudmFsdWU9MCksaS5jaGlsZHJlbj1sfWVsc2UgciYmKGkudmFsdWU9K3IuY2FsbChuLGksaS5kZXB0aCl8fDApLGRlbGV0ZSBpLmNoaWxkcmVuO3JldHVybiBRdSh1LGZ1bmN0aW9uKG4pe3ZhciBlLHU7dCYmKGU9bi5jaGlsZHJlbikmJmUuc29ydCh0KSxyJiYodT1uLnBhcmVudCkmJih1LnZhbHVlKz1uLnZhbHVlKX0pLGF9dmFyIHQ9ZWksZT1uaSxyPXRpO3JldHVybiBuLnNvcnQ9ZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHQ9ZSxuKTp0fSxuLmNoaWxkcmVuPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhlPXQsbik6ZX0sbi52YWx1ZT1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8ocj10LG4pOnJ9LG4ucmV2YWx1ZT1mdW5jdGlvbih0KXtyZXR1cm4gciYmKEt1KHQsZnVuY3Rpb24obil7bi5jaGlsZHJlbiYmKG4udmFsdWU9MCl9KSxRdSh0LGZ1bmN0aW9uKHQpe3ZhciBlO3QuY2hpbGRyZW58fCh0LnZhbHVlPStyLmNhbGwobix0LHQuZGVwdGgpfHwwKSwoZT10LnBhcmVudCkmJihlLnZhbHVlKz10LnZhbHVlKX0pKSx0fSxufSx0YS5sYXlvdXQucGFydGl0aW9uPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gbih0LGUscix1KXt2YXIgaT10LmNoaWxkcmVuO2lmKHQueD1lLHQueT10LmRlcHRoKnUsdC5keD1yLHQuZHk9dSxpJiYobz1pLmxlbmd0aCkpe3ZhciBvLGEsYyxsPS0xO2ZvcihyPXQudmFsdWU/ci90LnZhbHVlOjA7KytsPG87KW4oYT1pW2xdLGUsYz1hLnZhbHVlKnIsdSksZSs9Y319ZnVuY3Rpb24gdChuKXt2YXIgZT1uLmNoaWxkcmVuLHI9MDtpZihlJiYodT1lLmxlbmd0aCkpZm9yKHZhciB1LGk9LTE7KytpPHU7KXI9TWF0aC5tYXgocix0KGVbaV0pKTtyZXR1cm4gMStyfWZ1bmN0aW9uIGUoZSxpKXt2YXIgbz1yLmNhbGwodGhpcyxlLGkpO3JldHVybiBuKG9bMF0sMCx1WzBdLHVbMV0vdChvWzBdKSksb312YXIgcj10YS5sYXlvdXQuaGllcmFyY2h5KCksdT1bMSwxXTtyZXR1cm4gZS5zaXplPWZ1bmN0aW9uKG4pe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh1PW4sZSk6dX0sR3UoZSxyKX0sdGEubGF5b3V0LnBpZT1mdW5jdGlvbigpe2Z1bmN0aW9uIG4obyl7dmFyIGEsYz1vLmxlbmd0aCxsPW8ubWFwKGZ1bmN0aW9uKGUscil7cmV0dXJuK3QuY2FsbChuLGUscil9KSxzPSsoImZ1bmN0aW9uIj09dHlwZW9mIHI/ci5hcHBseSh0aGlzLGFyZ3VtZW50cyk6ciksZj0oImZ1bmN0aW9uIj09dHlwZW9mIHU/dS5hcHBseSh0aGlzLGFyZ3VtZW50cyk6dSktcyxoPU1hdGgubWluKE1hdGguYWJzKGYpL2MsKygiZnVuY3Rpb24iPT10eXBlb2YgaT9pLmFwcGx5KHRoaXMsYXJndW1lbnRzKTppKSksZz1oKigwPmY/LTE6MSkscD0oZi1jKmcpL3RhLnN1bShsKSx2PXRhLnJhbmdlKGMpLGQ9W107cmV0dXJuIG51bGwhPWUmJnYuc29ydChlPT09cGw/ZnVuY3Rpb24obix0KXtyZXR1cm4gbFt0XS1sW25dfTpmdW5jdGlvbihuLHQpe3JldHVybiBlKG9bbl0sb1t0XSl9KSx2LmZvckVhY2goZnVuY3Rpb24obil7ZFtuXT17ZGF0YTpvW25dLHZhbHVlOmE9bFtuXSxzdGFydEFuZ2xlOnMsZW5kQW5nbGU6cys9YSpwK2cscGFkQW5nbGU6aH19KSxkfXZhciB0PU51bWJlcixlPXBsLHI9MCx1PUxhLGk9MDtyZXR1cm4gbi52YWx1ZT1mdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8odD1lLG4pOnR9LG4uc29ydD1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oZT10LG4pOmV9LG4uc3RhcnRBbmdsZT1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8ocj10LG4pOnJ9LG4uZW5kQW5nbGU9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHU9dCxuKTp1fSxuLnBhZEFuZ2xlPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhpPXQsbik6aX0sbn07dmFyIHBsPXt9O3RhLmxheW91dC5zdGFjaz1mdW5jdGlvbigpe2Z1bmN0aW9uIG4oYSxjKXtpZighKGg9YS5sZW5ndGgpKXJldHVybiBhO3ZhciBsPWEubWFwKGZ1bmN0aW9uKGUscil7cmV0dXJuIHQuY2FsbChuLGUscil9KSxzPWwubWFwKGZ1bmN0aW9uKHQpe3JldHVybiB0Lm1hcChmdW5jdGlvbih0LGUpe3JldHVybltpLmNhbGwobix0LGUpLG8uY2FsbChuLHQsZSldfSl9KSxmPWUuY2FsbChuLHMsYyk7bD10YS5wZXJtdXRlKGwsZikscz10YS5wZXJtdXRlKHMsZik7dmFyIGgsZyxwLHYsZD1yLmNhbGwobixzLGMpLG09bFswXS5sZW5ndGg7Zm9yKHA9MDttPnA7KytwKWZvcih1LmNhbGwobixsWzBdW3BdLHY9ZFtwXSxzWzBdW3BdWzFdKSxnPTE7aD5nOysrZyl1LmNhbGwobixsW2ddW3BdLHYrPXNbZy0xXVtwXVsxXSxzW2ddW3BdWzFdKTtyZXR1cm4gYX12YXIgdD15LGU9YWkscj1jaSx1PW9pLGk9dWksbz1paTtyZXR1cm4gbi52YWx1ZXM9ZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHQ9ZSxuKTp0fSxuLm9yZGVyPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhlPSJmdW5jdGlvbiI9PXR5cGVvZiB0P3Q6dmwuZ2V0KHQpfHxhaSxuKTplfSxuLm9mZnNldD1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8ocj0iZnVuY3Rpb24iPT10eXBlb2YgdD90OmRsLmdldCh0KXx8Y2ksbik6cn0sbi54PWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhpPXQsbik6aX0sbi55PWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhvPXQsbik6b30sbi5vdXQ9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHU9dCxuKTp1fSxufTt2YXIgdmw9dGEubWFwKHsiaW5zaWRlLW91dCI6ZnVuY3Rpb24obil7dmFyIHQsZSxyPW4ubGVuZ3RoLHU9bi5tYXAobGkpLGk9bi5tYXAoc2kpLG89dGEucmFuZ2Uocikuc29ydChmdW5jdGlvbihuLHQpe3JldHVybiB1W25dLXVbdF19KSxhPTAsYz0wLGw9W10scz1bXTtmb3IodD0wO3I+dDsrK3QpZT1vW3RdLGM+YT8oYSs9aVtlXSxsLnB1c2goZSkpOihjKz1pW2VdLHMucHVzaChlKSk7cmV0dXJuIHMucmV2ZXJzZSgpLmNvbmNhdChsKX0scmV2ZXJzZTpmdW5jdGlvbihuKXtyZXR1cm4gdGEucmFuZ2Uobi5sZW5ndGgpLnJldmVyc2UoKX0sImRlZmF1bHQiOmFpfSksZGw9dGEubWFwKHtzaWxob3VldHRlOmZ1bmN0aW9uKG4pe3ZhciB0LGUscix1PW4ubGVuZ3RoLGk9blswXS5sZW5ndGgsbz1bXSxhPTAsYz1bXTtmb3IoZT0wO2k+ZTsrK2Upe2Zvcih0PTAscj0wO3U+dDt0Kyspcis9blt0XVtlXVsxXTtyPmEmJihhPXIpLG8ucHVzaChyKX1mb3IoZT0wO2k+ZTsrK2UpY1tlXT0oYS1vW2VdKS8yO3JldHVybiBjfSx3aWdnbGU6ZnVuY3Rpb24obil7dmFyIHQsZSxyLHUsaSxvLGEsYyxsLHM9bi5sZW5ndGgsZj1uWzBdLGg9Zi5sZW5ndGgsZz1bXTtmb3IoZ1swXT1jPWw9MCxlPTE7aD5lOysrZSl7Zm9yKHQ9MCx1PTA7cz50OysrdCl1Kz1uW3RdW2VdWzFdO2Zvcih0PTAsaT0wLGE9ZltlXVswXS1mW2UtMV1bMF07cz50OysrdCl7Zm9yKHI9MCxvPShuW3RdW2VdWzFdLW5bdF1bZS0xXVsxXSkvKDIqYSk7dD5yOysrcilvKz0obltyXVtlXVsxXS1uW3JdW2UtMV1bMV0pL2E7aSs9bypuW3RdW2VdWzFdfWdbZV09Yy09dT9pL3UqYTowLGw+YyYmKGw9Yyl9Zm9yKGU9MDtoPmU7KytlKWdbZV0tPWw7cmV0dXJuIGd9LGV4cGFuZDpmdW5jdGlvbihuKXt2YXIgdCxlLHIsdT1uLmxlbmd0aCxpPW5bMF0ubGVuZ3RoLG89MS91LGE9W107Zm9yKGU9MDtpPmU7KytlKXtmb3IodD0wLHI9MDt1PnQ7dCsrKXIrPW5bdF1bZV1bMV07aWYocilmb3IodD0wO3U+dDt0Kyspblt0XVtlXVsxXS89cjtlbHNlIGZvcih0PTA7dT50O3QrKyluW3RdW2VdWzFdPW99Zm9yKGU9MDtpPmU7KytlKWFbZV09MDtyZXR1cm4gYX0semVybzpjaX0pO3RhLmxheW91dC5oaXN0b2dyYW09ZnVuY3Rpb24oKXtmdW5jdGlvbiBuKG4saSl7Zm9yKHZhciBvLGEsYz1bXSxsPW4ubWFwKGUsdGhpcykscz1yLmNhbGwodGhpcyxsLGkpLGY9dS5jYWxsKHRoaXMscyxsLGkpLGk9LTEsaD1sLmxlbmd0aCxnPWYubGVuZ3RoLTEscD10PzE6MS9oOysraTxnOylvPWNbaV09W10sby5keD1mW2krMV0tKG8ueD1mW2ldKSxvLnk9MDtpZihnPjApZm9yKGk9LTE7KytpPGg7KWE9bFtpXSxhPj1zWzBdJiZhPD1zWzFdJiYobz1jW3RhLmJpc2VjdChmLGEsMSxnKS0xXSxvLnkrPXAsby5wdXNoKG5baV0pKTtyZXR1cm4gY312YXIgdD0hMCxlPU51bWJlcixyPXBpLHU9aGk7cmV0dXJuIG4udmFsdWU9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGU9dCxuKTplfSxuLnJhbmdlPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhyPUV0KHQpLG4pOnJ9LG4uYmlucz1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8odT0ibnVtYmVyIj09dHlwZW9mIHQ/ZnVuY3Rpb24obil7cmV0dXJuIGdpKG4sdCl9OkV0KHQpLG4pOnV9LG4uZnJlcXVlbmN5PWZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh0PSEhZSxuKTp0fSxufSx0YS5sYXlvdXQucGFjaz1mdW5jdGlvbigpe2Z1bmN0aW9uIG4obixpKXt2YXIgbz1lLmNhbGwodGhpcyxuLGkpLGE9b1swXSxjPXVbMF0sbD11WzFdLHM9bnVsbD09dD9NYXRoLnNxcnQ6ImZ1bmN0aW9uIj09dHlwZW9mIHQ/dDpmdW5jdGlvbigpe3JldHVybiB0fTtpZihhLng9YS55PTAsUXUoYSxmdW5jdGlvbihuKXtuLnI9K3Mobi52YWx1ZSl9KSxRdShhLE1pKSxyKXt2YXIgZj1yKih0PzE6TWF0aC5tYXgoMiphLnIvYywyKmEuci9sKSkvMjtRdShhLGZ1bmN0aW9uKG4pe24ucis9Zn0pLFF1KGEsTWkpLFF1KGEsZnVuY3Rpb24obil7bi5yLT1mfSl9cmV0dXJuIF9pKGEsYy8yLGwvMix0PzE6MS9NYXRoLm1heCgyKmEuci9jLDIqYS5yL2wpKSxvfXZhciB0LGU9dGEubGF5b3V0LmhpZXJhcmNoeSgpLnNvcnQodmkpLHI9MCx1PVsxLDFdO3JldHVybiBuLnNpemU9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHU9dCxuKTp1fSxuLnJhZGl1cz1mdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8odD1udWxsPT1lfHwiZnVuY3Rpb24iPT10eXBlb2YgZT9lOitlLG4pOnR9LG4ucGFkZGluZz1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8ocj0rdCxuKTpyfSxHdShuLGUpfSx0YS5sYXlvdXQudHJlZT1mdW5jdGlvbigpe2Z1bmN0aW9uIG4obix1KXt2YXIgcz1vLmNhbGwodGhpcyxuLHUpLGY9c1swXSxoPXQoZik7aWYoUXUoaCxlKSxoLnBhcmVudC5tPS1oLnosS3UoaCxyKSxsKUt1KGYsaSk7ZWxzZXt2YXIgZz1mLHA9Zix2PWY7S3UoZixmdW5jdGlvbihuKXtuLng8Zy54JiYoZz1uKSxuLng+cC54JiYocD1uKSxuLmRlcHRoPnYuZGVwdGgmJih2PW4pfSk7dmFyIGQ9YShnLHApLzItZy54LG09Y1swXS8ocC54K2EocCxnKS8yK2QpLHk9Y1sxXS8odi5kZXB0aHx8MSk7S3UoZixmdW5jdGlvbihuKXtuLng9KG4ueCtkKSptLG4ueT1uLmRlcHRoKnl9KX1yZXR1cm4gc31mdW5jdGlvbiB0KG4pe2Zvcih2YXIgdCxlPXtBOm51bGwsY2hpbGRyZW46W25dfSxyPVtlXTtudWxsIT0odD1yLnBvcCgpKTspZm9yKHZhciB1LGk9dC5jaGlsZHJlbixvPTAsYT1pLmxlbmd0aDthPm87KytvKXIucHVzaCgoaVtvXT11PXtfOmlbb10scGFyZW50OnQsY2hpbGRyZW46KHU9aVtvXS5jaGlsZHJlbikmJnUuc2xpY2UoKXx8W10sQTpudWxsLGE6bnVsbCx6OjAsbTowLGM6MCxzOjAsdDpudWxsLGk6b30pLmE9dSk7cmV0dXJuIGUuY2hpbGRyZW5bMF19ZnVuY3Rpb24gZShuKXt2YXIgdD1uLmNoaWxkcmVuLGU9bi5wYXJlbnQuY2hpbGRyZW4scj1uLmk/ZVtuLmktMV06bnVsbDtpZih0Lmxlbmd0aCl7Tmkobik7dmFyIGk9KHRbMF0ueit0W3QubGVuZ3RoLTFdLnopLzI7cj8obi56PXIueithKG4uXyxyLl8pLG4ubT1uLnotaSk6bi56PWl9ZWxzZSByJiYobi56PXIueithKG4uXyxyLl8pKTtuLnBhcmVudC5BPXUobixyLG4ucGFyZW50LkF8fGVbMF0pfWZ1bmN0aW9uIHIobil7bi5fLng9bi56K24ucGFyZW50Lm0sbi5tKz1uLnBhcmVudC5tfWZ1bmN0aW9uIHUobix0LGUpe2lmKHQpe2Zvcih2YXIgcix1PW4saT1uLG89dCxjPXUucGFyZW50LmNoaWxkcmVuWzBdLGw9dS5tLHM9aS5tLGY9by5tLGg9Yy5tO289RWkobyksdT1raSh1KSxvJiZ1OyljPWtpKGMpLGk9RWkoaSksaS5hPW4scj1vLnorZi11LnotbCthKG8uXyx1Ll8pLHI+MCYmKEFpKENpKG8sbixlKSxuLHIpLGwrPXIscys9ciksZis9by5tLGwrPXUubSxoKz1jLm0scys9aS5tO28mJiFFaShpKSYmKGkudD1vLGkubSs9Zi1zKSx1JiYha2koYykmJihjLnQ9dSxjLm0rPWwtaCxlPW4pfXJldHVybiBlfWZ1bmN0aW9uIGkobil7bi54Kj1jWzBdLG4ueT1uLmRlcHRoKmNbMV19dmFyIG89dGEubGF5b3V0LmhpZXJhcmNoeSgpLnNvcnQobnVsbCkudmFsdWUobnVsbCksYT1TaSxjPVsxLDFdLGw9bnVsbDtyZXR1cm4gbi5zZXBhcmF0aW9uPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhhPXQsbik6YX0sbi5zaXplPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhsPW51bGw9PShjPXQpP2k6bnVsbCxuKTpsP251bGw6Y30sbi5ub2RlU2l6ZT1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obD1udWxsPT0oYz10KT9udWxsOmksbik6bD9jOm51bGx9LEd1KG4sbyl9LHRhLmxheW91dC5jbHVzdGVyPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gbihuLGkpe3ZhciBvLGE9dC5jYWxsKHRoaXMsbixpKSxjPWFbMF0sbD0wO1F1KGMsZnVuY3Rpb24obil7dmFyIHQ9bi5jaGlsZHJlbjt0JiZ0Lmxlbmd0aD8obi54PXFpKHQpLG4ueT16aSh0KSk6KG4ueD1vP2wrPWUobixvKTowLG4ueT0wLG89bil9KTt2YXIgcz1MaShjKSxmPVRpKGMpLGg9cy54LWUocyxmKS8yLGc9Zi54K2UoZixzKS8yO3JldHVybiBRdShjLHU/ZnVuY3Rpb24obil7bi54PShuLngtYy54KSpyWzBdLG4ueT0oYy55LW4ueSkqclsxXX06ZnVuY3Rpb24obil7bi54PShuLngtaCkvKGctaCkqclswXSxuLnk9KDEtKGMueT9uLnkvYy55OjEpKSpyWzFdfSksYX12YXIgdD10YS5sYXlvdXQuaGllcmFyY2h5KCkuc29ydChudWxsKS52YWx1ZShudWxsKSxlPVNpLHI9WzEsMV0sdT0hMTtyZXR1cm4gbi5zZXBhcmF0aW9uPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhlPXQsbik6ZX0sbi5zaXplPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh1PW51bGw9PShyPXQpLG4pOnU/bnVsbDpyfSxuLm5vZGVTaXplPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh1PW51bGwhPShyPXQpLG4pOnU/cjpudWxsfSxHdShuLHQpfSx0YS5sYXlvdXQudHJlZW1hcD1mdW5jdGlvbigpe2Z1bmN0aW9uIG4obix0KXtmb3IodmFyIGUscix1PS0xLGk9bi5sZW5ndGg7Kyt1PGk7KXI9KGU9blt1XSkudmFsdWUqKDA+dD8wOnQpLGUuYXJlYT1pc05hTihyKXx8MD49cj8wOnJ9ZnVuY3Rpb24gdChlKXt2YXIgaT1lLmNoaWxkcmVuO2lmKGkmJmkubGVuZ3RoKXt2YXIgbyxhLGMsbD1mKGUpLHM9W10saD1pLnNsaWNlKCkscD0xLzAsdj0ic2xpY2UiPT09Zz9sLmR4OiJkaWNlIj09PWc/bC5keToic2xpY2UtZGljZSI9PT1nPzEmZS5kZXB0aD9sLmR5OmwuZHg6TWF0aC5taW4obC5keCxsLmR5KTtmb3IobihoLGwuZHgqbC5keS9lLnZhbHVlKSxzLmFyZWE9MDsoYz1oLmxlbmd0aCk+MDspcy5wdXNoKG89aFtjLTFdKSxzLmFyZWErPW8uYXJlYSwic3F1YXJpZnkiIT09Z3x8KGE9cihzLHYpKTw9cD8oaC5wb3AoKSxwPWEpOihzLmFyZWEtPXMucG9wKCkuYXJlYSx1KHMsdixsLCExKSx2PU1hdGgubWluKGwuZHgsbC5keSkscy5sZW5ndGg9cy5hcmVhPTAscD0xLzApO3MubGVuZ3RoJiYodShzLHYsbCwhMCkscy5sZW5ndGg9cy5hcmVhPTApLGkuZm9yRWFjaCh0KX19ZnVuY3Rpb24gZSh0KXt2YXIgcj10LmNoaWxkcmVuO2lmKHImJnIubGVuZ3RoKXt2YXIgaSxvPWYodCksYT1yLnNsaWNlKCksYz1bXTtmb3IobihhLG8uZHgqby5keS90LnZhbHVlKSxjLmFyZWE9MDtpPWEucG9wKCk7KWMucHVzaChpKSxjLmFyZWErPWkuYXJlYSxudWxsIT1pLnomJih1KGMsaS56P28uZHg6by5keSxvLCFhLmxlbmd0aCksYy5sZW5ndGg9Yy5hcmVhPTApO3IuZm9yRWFjaChlKX19ZnVuY3Rpb24gcihuLHQpe2Zvcih2YXIgZSxyPW4uYXJlYSx1PTAsaT0xLzAsbz0tMSxhPW4ubGVuZ3RoOysrbzxhOykoZT1uW29dLmFyZWEpJiYoaT5lJiYoaT1lKSxlPnUmJih1PWUpKTtyZXR1cm4gcio9cix0Kj10LHI/TWF0aC5tYXgodCp1KnAvcixyLyh0KmkqcCkpOjEvMH1mdW5jdGlvbiB1KG4sdCxlLHIpe3ZhciB1LGk9LTEsbz1uLmxlbmd0aCxhPWUueCxsPWUueSxzPXQ/YyhuLmFyZWEvdCk6MDtpZih0PT1lLmR4KXtmb3IoKHJ8fHM+ZS5keSkmJihzPWUuZHkpOysraTxvOyl1PW5baV0sdS54PWEsdS55PWwsdS5keT1zLGErPXUuZHg9TWF0aC5taW4oZS54K2UuZHgtYSxzP2ModS5hcmVhL3MpOjApO3Uuej0hMCx1LmR4Kz1lLngrZS5keC1hLGUueSs9cyxlLmR5LT1zfWVsc2V7Zm9yKChyfHxzPmUuZHgpJiYocz1lLmR4KTsrK2k8bzspdT1uW2ldLHUueD1hLHUueT1sLHUuZHg9cyxsKz11LmR5PU1hdGgubWluKGUueStlLmR5LWwscz9jKHUuYXJlYS9zKTowKTt1Lno9ITEsdS5keSs9ZS55K2UuZHktbCxlLngrPXMsZS5keC09c319ZnVuY3Rpb24gaShyKXt2YXIgdT1vfHxhKHIpLGk9dVswXTtyZXR1cm4gaS54PTAsaS55PTAsaS5keD1sWzBdLGkuZHk9bFsxXSxvJiZhLnJldmFsdWUoaSksbihbaV0saS5keCppLmR5L2kudmFsdWUpLChvP2U6dCkoaSksaCYmKG89dSksdX12YXIgbyxhPXRhLmxheW91dC5oaWVyYXJjaHkoKSxjPU1hdGgucm91bmQsbD1bMSwxXSxzPW51bGwsZj1SaSxoPSExLGc9InNxdWFyaWZ5IixwPS41KigxK01hdGguc3FydCg1KSk7CnJldHVybiBpLnNpemU9ZnVuY3Rpb24obil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGw9bixpKTpsfSxpLnBhZGRpbmc9ZnVuY3Rpb24obil7ZnVuY3Rpb24gdCh0KXt2YXIgZT1uLmNhbGwoaSx0LHQuZGVwdGgpO3JldHVybiBudWxsPT1lP1JpKHQpOkRpKHQsIm51bWJlciI9PXR5cGVvZiBlP1tlLGUsZSxlXTplKX1mdW5jdGlvbiBlKHQpe3JldHVybiBEaSh0LG4pfWlmKCFhcmd1bWVudHMubGVuZ3RoKXJldHVybiBzO3ZhciByO3JldHVybiBmPW51bGw9PShzPW4pP1JpOiJmdW5jdGlvbiI9PShyPXR5cGVvZiBuKT90OiJudW1iZXIiPT09cj8obj1bbixuLG4sbl0sZSk6ZSxpfSxpLnJvdW5kPWZ1bmN0aW9uKG4pe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhjPW4/TWF0aC5yb3VuZDpOdW1iZXIsaSk6YyE9TnVtYmVyfSxpLnN0aWNreT1mdW5jdGlvbihuKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oaD1uLG89bnVsbCxpKTpofSxpLnJhdGlvPWZ1bmN0aW9uKG4pe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhwPW4saSk6cH0saS5tb2RlPWZ1bmN0aW9uKG4pe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhnPW4rIiIsaSk6Z30sR3UoaSxhKX0sdGEucmFuZG9tPXtub3JtYWw6ZnVuY3Rpb24obix0KXt2YXIgZT1hcmd1bWVudHMubGVuZ3RoO3JldHVybiAyPmUmJih0PTEpLDE+ZSYmKG49MCksZnVuY3Rpb24oKXt2YXIgZSxyLHU7ZG8gZT0yKk1hdGgucmFuZG9tKCktMSxyPTIqTWF0aC5yYW5kb20oKS0xLHU9ZSplK3Iqcjt3aGlsZSghdXx8dT4xKTtyZXR1cm4gbit0KmUqTWF0aC5zcXJ0KC0yKk1hdGgubG9nKHUpL3UpfX0sbG9nTm9ybWFsOmZ1bmN0aW9uKCl7dmFyIG49dGEucmFuZG9tLm5vcm1hbC5hcHBseSh0YSxhcmd1bWVudHMpO3JldHVybiBmdW5jdGlvbigpe3JldHVybiBNYXRoLmV4cChuKCkpfX0sYmF0ZXM6ZnVuY3Rpb24obil7dmFyIHQ9dGEucmFuZG9tLmlyd2luSGFsbChuKTtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gdCgpL259fSxpcndpbkhhbGw6ZnVuY3Rpb24obil7cmV0dXJuIGZ1bmN0aW9uKCl7Zm9yKHZhciB0PTAsZT0wO24+ZTtlKyspdCs9TWF0aC5yYW5kb20oKTtyZXR1cm4gdH19fSx0YS5zY2FsZT17fTt2YXIgbWw9e2Zsb29yOnksY2VpbDp5fTt0YS5zY2FsZS5saW5lYXI9ZnVuY3Rpb24oKXtyZXR1cm4gSWkoWzAsMV0sWzAsMV0sbXUsITEpfTt2YXIgeWw9e3M6MSxnOjEscDoxLHI6MSxlOjF9O3RhLnNjYWxlLmxvZz1mdW5jdGlvbigpe3JldHVybiBKaSh0YS5zY2FsZS5saW5lYXIoKS5kb21haW4oWzAsMV0pLDEwLCEwLFsxLDEwXSl9O3ZhciBNbD10YS5mb3JtYXQoIi4wZSIpLHhsPXtmbG9vcjpmdW5jdGlvbihuKXtyZXR1cm4tTWF0aC5jZWlsKC1uKX0sY2VpbDpmdW5jdGlvbihuKXtyZXR1cm4tTWF0aC5mbG9vcigtbil9fTt0YS5zY2FsZS5wb3c9ZnVuY3Rpb24oKXtyZXR1cm4gR2kodGEuc2NhbGUubGluZWFyKCksMSxbMCwxXSl9LHRhLnNjYWxlLnNxcnQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGEuc2NhbGUucG93KCkuZXhwb25lbnQoLjUpfSx0YS5zY2FsZS5vcmRpbmFsPWZ1bmN0aW9uKCl7cmV0dXJuIFFpKFtdLHt0OiJyYW5nZSIsYTpbW11dfSl9LHRhLnNjYWxlLmNhdGVnb3J5MTA9ZnVuY3Rpb24oKXtyZXR1cm4gdGEuc2NhbGUub3JkaW5hbCgpLnJhbmdlKGJsKX0sdGEuc2NhbGUuY2F0ZWdvcnkyMD1mdW5jdGlvbigpe3JldHVybiB0YS5zY2FsZS5vcmRpbmFsKCkucmFuZ2UoX2wpfSx0YS5zY2FsZS5jYXRlZ29yeTIwYj1mdW5jdGlvbigpe3JldHVybiB0YS5zY2FsZS5vcmRpbmFsKCkucmFuZ2Uod2wpfSx0YS5zY2FsZS5jYXRlZ29yeTIwYz1mdW5jdGlvbigpe3JldHVybiB0YS5zY2FsZS5vcmRpbmFsKCkucmFuZ2UoU2wpfTt2YXIgYmw9WzIwNjIyNjAsMTY3NDQyMDYsMjkyNDU4OCwxNDAzNDcyOCw5NzI1ODg1LDkxOTcxMzEsMTQ5MDczMzAsODM1NTcxMSwxMjM2OTE4NiwxNTU2MTc1XS5tYXAoTXQpLF9sPVsyMDYyMjYwLDExNDU0NDQwLDE2NzQ0MjA2LDE2NzU5NjcyLDI5MjQ1ODgsMTAwMTg2OTgsMTQwMzQ3MjgsMTY3NTA3NDIsOTcyNTg4NSwxMjk1NTg2MSw5MTk3MTMxLDEyODg1MTQwLDE0OTA3MzMwLDE2MjM0MTk0LDgzNTU3MTEsMTMwOTI4MDcsMTIzNjkxODYsMTQ0MDg1ODksMTU1NjE3NSwxMDQxMDcyNV0ubWFwKE10KSx3bD1bMzc1MDc3Nyw1Mzk1NjE5LDcwNDA3MTksMTAyNjQyODYsNjUxOTA5Nyw5MjE2NTk0LDExOTE1MTE1LDEzNTU2NjM2LDkyMDI5OTMsMTI0MjY4MDksMTUxODY1MTQsMTUxOTA5MzIsODY2NjE2OSwxMTM1NjQ5MCwxNDA0OTY0MywxNTE3NzM3Miw4MDc3NjgzLDEwODM0MzI0LDEzNTI4NTA5LDE0NTg5NjU0XS5tYXAoTXQpLFNsPVszMjQ0NzMzLDcwNTcxMTAsMTA0MDY2MjUsMTMwMzI0MzEsMTUwOTUwNTMsMTY2MTY3NjQsMTY2MjUyNTksMTY2MzQwMTgsMzI1MzA3Niw3NjUyNDcwLDEwNjA3MDAzLDEzMTAxNTA0LDc2OTUyODEsMTAzOTQzMTIsMTIzNjkzNzIsMTQzNDI4OTEsNjUxMzUwNyw5ODY4OTUwLDEyNDM0ODc3LDE0Mjc3MDgxXS5tYXAoTXQpO3RhLnNjYWxlLnF1YW50aWxlPWZ1bmN0aW9uKCl7cmV0dXJuIG5vKFtdLFtdKX0sdGEuc2NhbGUucXVhbnRpemU9ZnVuY3Rpb24oKXtyZXR1cm4gdG8oMCwxLFswLDFdKX0sdGEuc2NhbGUudGhyZXNob2xkPWZ1bmN0aW9uKCl7cmV0dXJuIGVvKFsuNV0sWzAsMV0pfSx0YS5zY2FsZS5pZGVudGl0eT1mdW5jdGlvbigpe3JldHVybiBybyhbMCwxXSl9LHRhLnN2Zz17fSx0YS5zdmcuYXJjPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gbigpe3ZhciBuPU1hdGgubWF4KDAsK2UuYXBwbHkodGhpcyxhcmd1bWVudHMpKSxsPU1hdGgubWF4KDAsK3IuYXBwbHkodGhpcyxhcmd1bWVudHMpKSxzPW8uYXBwbHkodGhpcyxhcmd1bWVudHMpLVJhLGY9YS5hcHBseSh0aGlzLGFyZ3VtZW50cyktUmEsaD1NYXRoLmFicyhmLXMpLGc9cz5mPzA6MTtpZihuPmwmJihwPWwsbD1uLG49cCksaD49VGEpcmV0dXJuIHQobCxnKSsobj90KG4sMS1nKToiIikrIloiO3ZhciBwLHYsZCxtLHksTSx4LGIsXyx3LFMsayxFPTAsQT0wLE49W107aWYoKG09KCtjLmFwcGx5KHRoaXMsYXJndW1lbnRzKXx8MCkvMikmJihkPWk9PT1rbD9NYXRoLnNxcnQobipuK2wqbCk6K2kuYXBwbHkodGhpcyxhcmd1bWVudHMpLGd8fChBKj0tMSksbCYmKEE9dHQoZC9sKk1hdGguc2luKG0pKSksbiYmKEU9dHQoZC9uKk1hdGguc2luKG0pKSkpLGwpe3k9bCpNYXRoLmNvcyhzK0EpLE09bCpNYXRoLnNpbihzK0EpLHg9bCpNYXRoLmNvcyhmLUEpLGI9bCpNYXRoLnNpbihmLUEpO3ZhciBDPU1hdGguYWJzKGYtcy0yKkEpPD1xYT8wOjE7aWYoQSYmc28oeSxNLHgsYik9PT1nXkMpe3ZhciB6PShzK2YpLzI7eT1sKk1hdGguY29zKHopLE09bCpNYXRoLnNpbih6KSx4PWI9bnVsbH19ZWxzZSB5PU09MDtpZihuKXtfPW4qTWF0aC5jb3MoZi1FKSx3PW4qTWF0aC5zaW4oZi1FKSxTPW4qTWF0aC5jb3MocytFKSxrPW4qTWF0aC5zaW4ocytFKTt2YXIgcT1NYXRoLmFicyhzLWYrMipFKTw9cWE/MDoxO2lmKEUmJnNvKF8sdyxTLGspPT09MS1nXnEpe3ZhciBMPShzK2YpLzI7Xz1uKk1hdGguY29zKEwpLHc9bipNYXRoLnNpbihMKSxTPWs9bnVsbH19ZWxzZSBfPXc9MDtpZigocD1NYXRoLm1pbihNYXRoLmFicyhsLW4pLzIsK3UuYXBwbHkodGhpcyxhcmd1bWVudHMpKSk+LjAwMSl7dj1sPm5eZz8wOjE7dmFyIFQ9bnVsbD09Uz9bXyx3XTpudWxsPT14P1t5LE1dOkxyKFt5LE1dLFtTLGtdLFt4LGJdLFtfLHddKSxSPXktVFswXSxEPU0tVFsxXSxQPXgtVFswXSxVPWItVFsxXSxqPTEvTWF0aC5zaW4oTWF0aC5hY29zKChSKlArRCpVKS8oTWF0aC5zcXJ0KFIqUitEKkQpKk1hdGguc3FydChQKlArVSpVKSkpLzIpLEY9TWF0aC5zcXJ0KFRbMF0qVFswXStUWzFdKlRbMV0pO2lmKG51bGwhPXgpe3ZhciBIPU1hdGgubWluKHAsKGwtRikvKGorMSkpLE89Zm8obnVsbD09Uz9bXyx3XTpbUyxrXSxbeSxNXSxsLEgsZyksST1mbyhbeCxiXSxbXyx3XSxsLEgsZyk7cD09PUg/Ti5wdXNoKCJNIixPWzBdLCJBIixILCIsIixILCIgMCAwLCIsdiwiICIsT1sxXSwiQSIsbCwiLCIsbCwiIDAgIiwxLWdec28oT1sxXVswXSxPWzFdWzFdLElbMV1bMF0sSVsxXVsxXSksIiwiLGcsIiAiLElbMV0sIkEiLEgsIiwiLEgsIiAwIDAsIix2LCIgIixJWzBdKTpOLnB1c2goIk0iLE9bMF0sIkEiLEgsIiwiLEgsIiAwIDEsIix2LCIgIixJWzBdKX1lbHNlIE4ucHVzaCgiTSIseSwiLCIsTSk7aWYobnVsbCE9Uyl7dmFyIFk9TWF0aC5taW4ocCwobi1GKS8oai0xKSksWj1mbyhbeSxNXSxbUyxrXSxuLC1ZLGcpLFY9Zm8oW18sd10sbnVsbD09eD9beSxNXTpbeCxiXSxuLC1ZLGcpO3A9PT1ZP04ucHVzaCgiTCIsVlswXSwiQSIsWSwiLCIsWSwiIDAgMCwiLHYsIiAiLFZbMV0sIkEiLG4sIiwiLG4sIiAwICIsZ15zbyhWWzFdWzBdLFZbMV1bMV0sWlsxXVswXSxaWzFdWzFdKSwiLCIsMS1nLCIgIixaWzFdLCJBIixZLCIsIixZLCIgMCAwLCIsdiwiICIsWlswXSk6Ti5wdXNoKCJMIixWWzBdLCJBIixZLCIsIixZLCIgMCAwLCIsdiwiICIsWlswXSl9ZWxzZSBOLnB1c2goIkwiLF8sIiwiLHcpfWVsc2UgTi5wdXNoKCJNIix5LCIsIixNKSxudWxsIT14JiZOLnB1c2goIkEiLGwsIiwiLGwsIiAwICIsQywiLCIsZywiICIseCwiLCIsYiksTi5wdXNoKCJMIixfLCIsIix3KSxudWxsIT1TJiZOLnB1c2goIkEiLG4sIiwiLG4sIiAwICIscSwiLCIsMS1nLCIgIixTLCIsIixrKTtyZXR1cm4gTi5wdXNoKCJaIiksTi5qb2luKCIiKX1mdW5jdGlvbiB0KG4sdCl7cmV0dXJuIk0wLCIrbisiQSIrbisiLCIrbisiIDAgMSwiK3QrIiAwLCIrLW4rIkEiK24rIiwiK24rIiAwIDEsIit0KyIgMCwiK259dmFyIGU9aW8scj1vbyx1PXVvLGk9a2wsbz1hbyxhPWNvLGM9bG87cmV0dXJuIG4uaW5uZXJSYWRpdXM9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGU9RXQodCksbik6ZX0sbi5vdXRlclJhZGl1cz1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8ocj1FdCh0KSxuKTpyfSxuLmNvcm5lclJhZGl1cz1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8odT1FdCh0KSxuKTp1fSxuLnBhZFJhZGl1cz1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oaT10PT1rbD9rbDpFdCh0KSxuKTppfSxuLnN0YXJ0QW5nbGU9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG89RXQodCksbik6b30sbi5lbmRBbmdsZT1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oYT1FdCh0KSxuKTphfSxuLnBhZEFuZ2xlPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhjPUV0KHQpLG4pOmN9LG4uY2VudHJvaWQ9ZnVuY3Rpb24oKXt2YXIgbj0oK2UuYXBwbHkodGhpcyxhcmd1bWVudHMpKyArci5hcHBseSh0aGlzLGFyZ3VtZW50cykpLzIsdD0oK28uYXBwbHkodGhpcyxhcmd1bWVudHMpKyArYS5hcHBseSh0aGlzLGFyZ3VtZW50cykpLzItUmE7cmV0dXJuW01hdGguY29zKHQpKm4sTWF0aC5zaW4odCkqbl19LG59O3ZhciBrbD0iYXV0byI7dGEuc3ZnLmxpbmU9ZnVuY3Rpb24oKXtyZXR1cm4gaG8oeSl9O3ZhciBFbD10YS5tYXAoe2xpbmVhcjpnbywibGluZWFyLWNsb3NlZCI6cG8sc3RlcDp2bywic3RlcC1iZWZvcmUiOm1vLCJzdGVwLWFmdGVyIjp5byxiYXNpczpTbywiYmFzaXMtb3BlbiI6a28sImJhc2lzLWNsb3NlZCI6RW8sYnVuZGxlOkFvLGNhcmRpbmFsOmJvLCJjYXJkaW5hbC1vcGVuIjpNbywiY2FyZGluYWwtY2xvc2VkIjp4byxtb25vdG9uZTpUb30pO0VsLmZvckVhY2goZnVuY3Rpb24obix0KXt0LmtleT1uLHQuY2xvc2VkPS8tY2xvc2VkJC8udGVzdChuKX0pO3ZhciBBbD1bMCwyLzMsMS8zLDBdLE5sPVswLDEvMywyLzMsMF0sQ2w9WzAsMS82LDIvMywxLzZdO3RhLnN2Zy5saW5lLnJhZGlhbD1mdW5jdGlvbigpe3ZhciBuPWhvKFJvKTtyZXR1cm4gbi5yYWRpdXM9bi54LGRlbGV0ZSBuLngsbi5hbmdsZT1uLnksZGVsZXRlIG4ueSxufSxtby5yZXZlcnNlPXlvLHlvLnJldmVyc2U9bW8sdGEuc3ZnLmFyZWE9ZnVuY3Rpb24oKXtyZXR1cm4gRG8oeSl9LHRhLnN2Zy5hcmVhLnJhZGlhbD1mdW5jdGlvbigpe3ZhciBuPURvKFJvKTtyZXR1cm4gbi5yYWRpdXM9bi54LGRlbGV0ZSBuLngsbi5pbm5lclJhZGl1cz1uLngwLGRlbGV0ZSBuLngwLG4ub3V0ZXJSYWRpdXM9bi54MSxkZWxldGUgbi54MSxuLmFuZ2xlPW4ueSxkZWxldGUgbi55LG4uc3RhcnRBbmdsZT1uLnkwLGRlbGV0ZSBuLnkwLG4uZW5kQW5nbGU9bi55MSxkZWxldGUgbi55MSxufSx0YS5zdmcuY2hvcmQ9ZnVuY3Rpb24oKXtmdW5jdGlvbiBuKG4sYSl7dmFyIGM9dCh0aGlzLGksbixhKSxsPXQodGhpcyxvLG4sYSk7cmV0dXJuIk0iK2MucDArcihjLnIsYy5wMSxjLmExLWMuYTApKyhlKGMsbCk/dShjLnIsYy5wMSxjLnIsYy5wMCk6dShjLnIsYy5wMSxsLnIsbC5wMCkrcihsLnIsbC5wMSxsLmExLWwuYTApK3UobC5yLGwucDEsYy5yLGMucDApKSsiWiJ9ZnVuY3Rpb24gdChuLHQsZSxyKXt2YXIgdT10LmNhbGwobixlLHIpLGk9YS5jYWxsKG4sdSxyKSxvPWMuY2FsbChuLHUsciktUmEscz1sLmNhbGwobix1LHIpLVJhO3JldHVybntyOmksYTA6byxhMTpzLHAwOltpKk1hdGguY29zKG8pLGkqTWF0aC5zaW4obyldLHAxOltpKk1hdGguY29zKHMpLGkqTWF0aC5zaW4ocyldfX1mdW5jdGlvbiBlKG4sdCl7cmV0dXJuIG4uYTA9PXQuYTAmJm4uYTE9PXQuYTF9ZnVuY3Rpb24gcihuLHQsZSl7cmV0dXJuIkEiK24rIiwiK24rIiAwICIrICsoZT5xYSkrIiwxICIrdH1mdW5jdGlvbiB1KG4sdCxlLHIpe3JldHVybiJRIDAsMCAiK3J9dmFyIGk9bXIsbz15cixhPVBvLGM9YW8sbD1jbztyZXR1cm4gbi5yYWRpdXM9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGE9RXQodCksbik6YX0sbi5zb3VyY2U9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGk9RXQodCksbik6aX0sbi50YXJnZXQ9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG89RXQodCksbik6b30sbi5zdGFydEFuZ2xlPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhjPUV0KHQpLG4pOmN9LG4uZW5kQW5nbGU9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGw9RXQodCksbik6bH0sbn0sdGEuc3ZnLmRpYWdvbmFsPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gbihuLHUpe3ZhciBpPXQuY2FsbCh0aGlzLG4sdSksbz1lLmNhbGwodGhpcyxuLHUpLGE9KGkueStvLnkpLzIsYz1baSx7eDppLngseTphfSx7eDpvLngseTphfSxvXTtyZXR1cm4gYz1jLm1hcChyKSwiTSIrY1swXSsiQyIrY1sxXSsiICIrY1syXSsiICIrY1szXX12YXIgdD1tcixlPXlyLHI9VW87cmV0dXJuIG4uc291cmNlPWZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh0PUV0KGUpLG4pOnR9LG4udGFyZ2V0PWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhlPUV0KHQpLG4pOmV9LG4ucHJvamVjdGlvbj1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8ocj10LG4pOnJ9LG59LHRhLnN2Zy5kaWFnb25hbC5yYWRpYWw9ZnVuY3Rpb24oKXt2YXIgbj10YS5zdmcuZGlhZ29uYWwoKSx0PVVvLGU9bi5wcm9qZWN0aW9uO3JldHVybiBuLnByb2plY3Rpb249ZnVuY3Rpb24obil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/ZShqbyh0PW4pKTp0fSxufSx0YS5zdmcuc3ltYm9sPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gbihuLHIpe3JldHVybih6bC5nZXQodC5jYWxsKHRoaXMsbixyKSl8fE9vKShlLmNhbGwodGhpcyxuLHIpKX12YXIgdD1IbyxlPUZvO3JldHVybiBuLnR5cGU9ZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHQ9RXQoZSksbik6dH0sbi5zaXplPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhlPUV0KHQpLG4pOmV9LG59O3ZhciB6bD10YS5tYXAoe2NpcmNsZTpPbyxjcm9zczpmdW5jdGlvbihuKXt2YXIgdD1NYXRoLnNxcnQobi81KS8yO3JldHVybiJNIistMyp0KyIsIistdCsiSCIrLXQrIlYiKy0zKnQrIkgiK3QrIlYiKy10KyJIIiszKnQrIlYiK3QrIkgiK3QrIlYiKzMqdCsiSCIrLXQrIlYiK3QrIkgiKy0zKnQrIloifSxkaWFtb25kOmZ1bmN0aW9uKG4pe3ZhciB0PU1hdGguc3FydChuLygyKkxsKSksZT10KkxsO3JldHVybiJNMCwiKy10KyJMIitlKyIsMCAwLCIrdCsiICIrLWUrIiwwWiJ9LHNxdWFyZTpmdW5jdGlvbihuKXt2YXIgdD1NYXRoLnNxcnQobikvMjtyZXR1cm4iTSIrLXQrIiwiKy10KyJMIit0KyIsIistdCsiICIrdCsiLCIrdCsiICIrLXQrIiwiK3QrIloifSwidHJpYW5nbGUtZG93biI6ZnVuY3Rpb24obil7dmFyIHQ9TWF0aC5zcXJ0KG4vcWwpLGU9dCpxbC8yO3JldHVybiJNMCwiK2UrIkwiK3QrIiwiKy1lKyIgIistdCsiLCIrLWUrIloifSwidHJpYW5nbGUtdXAiOmZ1bmN0aW9uKG4pe3ZhciB0PU1hdGguc3FydChuL3FsKSxlPXQqcWwvMjtyZXR1cm4iTTAsIistZSsiTCIrdCsiLCIrZSsiICIrLXQrIiwiK2UrIloifX0pO3RhLnN2Zy5zeW1ib2xUeXBlcz16bC5rZXlzKCk7dmFyIHFsPU1hdGguc3FydCgzKSxMbD1NYXRoLnRhbigzMCpEYSk7X2EudHJhbnNpdGlvbj1mdW5jdGlvbihuKXtmb3IodmFyIHQsZSxyPVRsfHwrK1VsLHU9WG8obiksaT1bXSxvPVJsfHx7dGltZTpEYXRlLm5vdygpLGVhc2U6U3UsZGVsYXk6MCxkdXJhdGlvbjoyNTB9LGE9LTEsYz10aGlzLmxlbmd0aDsrK2E8Yzspe2kucHVzaCh0PVtdKTtmb3IodmFyIGw9dGhpc1thXSxzPS0xLGY9bC5sZW5ndGg7KytzPGY7KShlPWxbc10pJiYkbyhlLHMsdSxyLG8pLHQucHVzaChlKX1yZXR1cm4gWW8oaSx1LHIpfSxfYS5pbnRlcnJ1cHQ9ZnVuY3Rpb24obil7cmV0dXJuIHRoaXMuZWFjaChudWxsPT1uP0RsOklvKFhvKG4pKSl9O3ZhciBUbCxSbCxEbD1JbyhYbygpKSxQbD1bXSxVbD0wO1BsLmNhbGw9X2EuY2FsbCxQbC5lbXB0eT1fYS5lbXB0eSxQbC5ub2RlPV9hLm5vZGUsUGwuc2l6ZT1fYS5zaXplLHRhLnRyYW5zaXRpb249ZnVuY3Rpb24obix0KXtyZXR1cm4gbiYmbi50cmFuc2l0aW9uP1RsP24udHJhbnNpdGlvbih0KTpuOnRhLnNlbGVjdGlvbigpLnRyYW5zaXRpb24obil9LHRhLnRyYW5zaXRpb24ucHJvdG90eXBlPVBsLFBsLnNlbGVjdD1mdW5jdGlvbihuKXt2YXIgdCxlLHIsdT10aGlzLmlkLGk9dGhpcy5uYW1lc3BhY2Usbz1bXTtuPU4obik7Zm9yKHZhciBhPS0xLGM9dGhpcy5sZW5ndGg7KythPGM7KXtvLnB1c2godD1bXSk7Zm9yKHZhciBsPXRoaXNbYV0scz0tMSxmPWwubGVuZ3RoOysrczxmOykocj1sW3NdKSYmKGU9bi5jYWxsKHIsci5fX2RhdGFfXyxzLGEpKT8oIl9fZGF0YV9fImluIHImJihlLl9fZGF0YV9fPXIuX19kYXRhX18pLCRvKGUscyxpLHUscltpXVt1XSksdC5wdXNoKGUpKTp0LnB1c2gobnVsbCl9cmV0dXJuIFlvKG8saSx1KX0sUGwuc2VsZWN0QWxsPWZ1bmN0aW9uKG4pe3ZhciB0LGUscix1LGksbz10aGlzLmlkLGE9dGhpcy5uYW1lc3BhY2UsYz1bXTtuPUMobik7Zm9yKHZhciBsPS0xLHM9dGhpcy5sZW5ndGg7KytsPHM7KWZvcih2YXIgZj10aGlzW2xdLGg9LTEsZz1mLmxlbmd0aDsrK2g8ZzspaWYocj1mW2hdKXtpPXJbYV1bb10sZT1uLmNhbGwocixyLl9fZGF0YV9fLGgsbCksYy5wdXNoKHQ9W10pO2Zvcih2YXIgcD0tMSx2PWUubGVuZ3RoOysrcDx2OykodT1lW3BdKSYmJG8odSxwLGEsbyxpKSx0LnB1c2godSl9cmV0dXJuIFlvKGMsYSxvKX0sUGwuZmlsdGVyPWZ1bmN0aW9uKG4pe3ZhciB0LGUscix1PVtdOyJmdW5jdGlvbiIhPXR5cGVvZiBuJiYobj1PKG4pKTtmb3IodmFyIGk9MCxvPXRoaXMubGVuZ3RoO28+aTtpKyspe3UucHVzaCh0PVtdKTtmb3IodmFyIGU9dGhpc1tpXSxhPTAsYz1lLmxlbmd0aDtjPmE7YSsrKShyPWVbYV0pJiZuLmNhbGwocixyLl9fZGF0YV9fLGEsaSkmJnQucHVzaChyKX1yZXR1cm4gWW8odSx0aGlzLm5hbWVzcGFjZSx0aGlzLmlkKX0sUGwudHdlZW49ZnVuY3Rpb24obix0KXt2YXIgZT10aGlzLmlkLHI9dGhpcy5uYW1lc3BhY2U7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg8Mj90aGlzLm5vZGUoKVtyXVtlXS50d2Vlbi5nZXQobik6WSh0aGlzLG51bGw9PXQ/ZnVuY3Rpb24odCl7dFtyXVtlXS50d2Vlbi5yZW1vdmUobil9OmZ1bmN0aW9uKHUpe3Vbcl1bZV0udHdlZW4uc2V0KG4sdCl9KX0sUGwuYXR0cj1mdW5jdGlvbihuLHQpe2Z1bmN0aW9uIGUoKXt0aGlzLnJlbW92ZUF0dHJpYnV0ZShhKX1mdW5jdGlvbiByKCl7dGhpcy5yZW1vdmVBdHRyaWJ1dGVOUyhhLnNwYWNlLGEubG9jYWwpfWZ1bmN0aW9uIHUobil7cmV0dXJuIG51bGw9PW4/ZToobis9IiIsZnVuY3Rpb24oKXt2YXIgdCxlPXRoaXMuZ2V0QXR0cmlidXRlKGEpO3JldHVybiBlIT09biYmKHQ9byhlLG4pLGZ1bmN0aW9uKG4pe3RoaXMuc2V0QXR0cmlidXRlKGEsdChuKSl9KX0pfWZ1bmN0aW9uIGkobil7cmV0dXJuIG51bGw9PW4/cjoobis9IiIsZnVuY3Rpb24oKXt2YXIgdCxlPXRoaXMuZ2V0QXR0cmlidXRlTlMoYS5zcGFjZSxhLmxvY2FsKTtyZXR1cm4gZSE9PW4mJih0PW8oZSxuKSxmdW5jdGlvbihuKXt0aGlzLnNldEF0dHJpYnV0ZU5TKGEuc3BhY2UsYS5sb2NhbCx0KG4pKX0pfSl9aWYoYXJndW1lbnRzLmxlbmd0aDwyKXtmb3IodCBpbiBuKXRoaXMuYXR0cih0LG5bdF0pO3JldHVybiB0aGlzfXZhciBvPSJ0cmFuc2Zvcm0iPT1uP0h1Om11LGE9dGEubnMucXVhbGlmeShuKTtyZXR1cm4gWm8odGhpcywiYXR0ci4iK24sdCxhLmxvY2FsP2k6dSl9LFBsLmF0dHJUd2Vlbj1mdW5jdGlvbihuLHQpe2Z1bmN0aW9uIGUobixlKXt2YXIgcj10LmNhbGwodGhpcyxuLGUsdGhpcy5nZXRBdHRyaWJ1dGUodSkpO3JldHVybiByJiZmdW5jdGlvbihuKXt0aGlzLnNldEF0dHJpYnV0ZSh1LHIobikpfX1mdW5jdGlvbiByKG4sZSl7dmFyIHI9dC5jYWxsKHRoaXMsbixlLHRoaXMuZ2V0QXR0cmlidXRlTlModS5zcGFjZSx1LmxvY2FsKSk7cmV0dXJuIHImJmZ1bmN0aW9uKG4pe3RoaXMuc2V0QXR0cmlidXRlTlModS5zcGFjZSx1LmxvY2FsLHIobikpfX12YXIgdT10YS5ucy5xdWFsaWZ5KG4pO3JldHVybiB0aGlzLnR3ZWVuKCJhdHRyLiIrbix1LmxvY2FsP3I6ZSl9LFBsLnN0eWxlPWZ1bmN0aW9uKG4sZSxyKXtmdW5jdGlvbiB1KCl7dGhpcy5zdHlsZS5yZW1vdmVQcm9wZXJ0eShuKX1mdW5jdGlvbiBpKGUpe3JldHVybiBudWxsPT1lP3U6KGUrPSIiLGZ1bmN0aW9uKCl7dmFyIHUsaT10KHRoaXMpLmdldENvbXB1dGVkU3R5bGUodGhpcyxudWxsKS5nZXRQcm9wZXJ0eVZhbHVlKG4pO3JldHVybiBpIT09ZSYmKHU9bXUoaSxlKSxmdW5jdGlvbih0KXt0aGlzLnN0eWxlLnNldFByb3BlcnR5KG4sdSh0KSxyKX0pfSl9dmFyIG89YXJndW1lbnRzLmxlbmd0aDtpZigzPm8pe2lmKCJzdHJpbmciIT10eXBlb2Ygbil7Mj5vJiYoZT0iIik7Zm9yKHIgaW4gbil0aGlzLnN0eWxlKHIsbltyXSxlKTtyZXR1cm4gdGhpc31yPSIifXJldHVybiBabyh0aGlzLCJzdHlsZS4iK24sZSxpKX0sUGwuc3R5bGVUd2Vlbj1mdW5jdGlvbihuLGUscil7ZnVuY3Rpb24gdSh1LGkpe3ZhciBvPWUuY2FsbCh0aGlzLHUsaSx0KHRoaXMpLmdldENvbXB1dGVkU3R5bGUodGhpcyxudWxsKS5nZXRQcm9wZXJ0eVZhbHVlKG4pKTtyZXR1cm4gbyYmZnVuY3Rpb24odCl7dGhpcy5zdHlsZS5zZXRQcm9wZXJ0eShuLG8odCkscil9fXJldHVybiBhcmd1bWVudHMubGVuZ3RoPDMmJihyPSIiKSx0aGlzLnR3ZWVuKCJzdHlsZS4iK24sdSl9LFBsLnRleHQ9ZnVuY3Rpb24obil7cmV0dXJuIFpvKHRoaXMsInRleHQiLG4sVm8pfSxQbC5yZW1vdmU9ZnVuY3Rpb24oKXt2YXIgbj10aGlzLm5hbWVzcGFjZTtyZXR1cm4gdGhpcy5lYWNoKCJlbmQudHJhbnNpdGlvbiIsZnVuY3Rpb24oKXt2YXIgdDt0aGlzW25dLmNvdW50PDImJih0PXRoaXMucGFyZW50Tm9kZSkmJnQucmVtb3ZlQ2hpbGQodGhpcyl9KX0sUGwuZWFzZT1mdW5jdGlvbihuKXt2YXIgdD10aGlzLmlkLGU9dGhpcy5uYW1lc3BhY2U7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg8MT90aGlzLm5vZGUoKVtlXVt0XS5lYXNlOigiZnVuY3Rpb24iIT10eXBlb2YgbiYmKG49dGEuZWFzZS5hcHBseSh0YSxhcmd1bWVudHMpKSxZKHRoaXMsZnVuY3Rpb24ocil7cltlXVt0XS5lYXNlPW59KSl9LFBsLmRlbGF5PWZ1bmN0aW9uKG4pe3ZhciB0PXRoaXMuaWQsZT10aGlzLm5hbWVzcGFjZTtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aDwxP3RoaXMubm9kZSgpW2VdW3RdLmRlbGF5OlkodGhpcywiZnVuY3Rpb24iPT10eXBlb2Ygbj9mdW5jdGlvbihyLHUsaSl7cltlXVt0XS5kZWxheT0rbi5jYWxsKHIsci5fX2RhdGFfXyx1LGkpfToobj0rbixmdW5jdGlvbihyKXtyW2VdW3RdLmRlbGF5PW59KSl9LFBsLmR1cmF0aW9uPWZ1bmN0aW9uKG4pe3ZhciB0PXRoaXMuaWQsZT10aGlzLm5hbWVzcGFjZTtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aDwxP3RoaXMubm9kZSgpW2VdW3RdLmR1cmF0aW9uOlkodGhpcywiZnVuY3Rpb24iPT10eXBlb2Ygbj9mdW5jdGlvbihyLHUsaSl7cltlXVt0XS5kdXJhdGlvbj1NYXRoLm1heCgxLG4uY2FsbChyLHIuX19kYXRhX18sdSxpKSl9OihuPU1hdGgubWF4KDEsbiksZnVuY3Rpb24ocil7cltlXVt0XS5kdXJhdGlvbj1ufSkpfSxQbC5lYWNoPWZ1bmN0aW9uKG4sdCl7dmFyIGU9dGhpcy5pZCxyPXRoaXMubmFtZXNwYWNlO2lmKGFyZ3VtZW50cy5sZW5ndGg8Mil7dmFyIHU9UmwsaT1UbDt0cnl7VGw9ZSxZKHRoaXMsZnVuY3Rpb24odCx1LGkpe1JsPXRbcl1bZV0sbi5jYWxsKHQsdC5fX2RhdGFfXyx1LGkpfSl9ZmluYWxseXtSbD11LFRsPWl9fWVsc2UgWSh0aGlzLGZ1bmN0aW9uKHUpe3ZhciBpPXVbcl1bZV07KGkuZXZlbnR8fChpLmV2ZW50PXRhLmRpc3BhdGNoKCJzdGFydCIsImVuZCIsImludGVycnVwdCIpKSkub24obix0KX0pO3JldHVybiB0aGlzfSxQbC50cmFuc2l0aW9uPWZ1bmN0aW9uKCl7Zm9yKHZhciBuLHQsZSxyLHU9dGhpcy5pZCxpPSsrVWwsbz10aGlzLm5hbWVzcGFjZSxhPVtdLGM9MCxsPXRoaXMubGVuZ3RoO2w+YztjKyspe2EucHVzaChuPVtdKTtmb3IodmFyIHQ9dGhpc1tjXSxzPTAsZj10Lmxlbmd0aDtmPnM7cysrKShlPXRbc10pJiYocj1lW29dW3VdLCRvKGUscyxvLGkse3RpbWU6ci50aW1lLGVhc2U6ci5lYXNlLGRlbGF5OnIuZGVsYXkrci5kdXJhdGlvbixkdXJhdGlvbjpyLmR1cmF0aW9ufSkpLG4ucHVzaChlKX1yZXR1cm4gWW8oYSxvLGkpfSx0YS5zdmcuYXhpcz1mdW5jdGlvbigpe2Z1bmN0aW9uIG4obil7bi5lYWNoKGZ1bmN0aW9uKCl7dmFyIG4sbD10YS5zZWxlY3QodGhpcykscz10aGlzLl9fY2hhcnRfX3x8ZSxmPXRoaXMuX19jaGFydF9fPWUuY29weSgpLGg9bnVsbD09Yz9mLnRpY2tzP2YudGlja3MuYXBwbHkoZixhKTpmLmRvbWFpbigpOmMsZz1udWxsPT10P2YudGlja0Zvcm1hdD9mLnRpY2tGb3JtYXQuYXBwbHkoZixhKTp5OnQscD1sLnNlbGVjdEFsbCgiLnRpY2siKS5kYXRhKGgsZiksdj1wLmVudGVyKCkuaW5zZXJ0KCJnIiwiLmRvbWFpbiIpLmF0dHIoImNsYXNzIiwidGljayIpLnN0eWxlKCJvcGFjaXR5IixDYSksZD10YS50cmFuc2l0aW9uKHAuZXhpdCgpKS5zdHlsZSgib3BhY2l0eSIsQ2EpLnJlbW92ZSgpLG09dGEudHJhbnNpdGlvbihwLm9yZGVyKCkpLnN0eWxlKCJvcGFjaXR5IiwxKSxNPU1hdGgubWF4KHUsMCkrbyx4PVVpKGYpLGI9bC5zZWxlY3RBbGwoIi5kb21haW4iKS5kYXRhKFswXSksXz0oYi5lbnRlcigpLmFwcGVuZCgicGF0aCIpLmF0dHIoImNsYXNzIiwiZG9tYWluIiksdGEudHJhbnNpdGlvbihiKSk7di5hcHBlbmQoImxpbmUiKSx2LmFwcGVuZCgidGV4dCIpO3ZhciB3LFMsayxFLEE9di5zZWxlY3QoImxpbmUiKSxOPW0uc2VsZWN0KCJsaW5lIiksQz1wLnNlbGVjdCgidGV4dCIpLnRleHQoZyksej12LnNlbGVjdCgidGV4dCIpLHE9bS5zZWxlY3QoInRleHQiKSxMPSJ0b3AiPT09cnx8ImxlZnQiPT09cj8tMToxO2lmKCJib3R0b20iPT09cnx8InRvcCI9PT1yPyhuPUJvLHc9IngiLGs9InkiLFM9IngyIixFPSJ5MiIsQy5hdHRyKCJkeSIsMD5MPyIwZW0iOiIuNzFlbSIpLnN0eWxlKCJ0ZXh0LWFuY2hvciIsIm1pZGRsZSIpLF8uYXR0cigiZCIsIk0iK3hbMF0rIiwiK0wqaSsiVjBIIit4WzFdKyJWIitMKmkpKToobj1Xbyx3PSJ5IixrPSJ4IixTPSJ5MiIsRT0ieDIiLEMuYXR0cigiZHkiLCIuMzJlbSIpLnN0eWxlKCJ0ZXh0LWFuY2hvciIsMD5MPyJlbmQiOiJzdGFydCIpLF8uYXR0cigiZCIsIk0iK0wqaSsiLCIreFswXSsiSDBWIit4WzFdKyJIIitMKmkpKSxBLmF0dHIoRSxMKnUpLHouYXR0cihrLEwqTSksTi5hdHRyKFMsMCkuYXR0cihFLEwqdSkscS5hdHRyKHcsMCkuYXR0cihrLEwqTSksZi5yYW5nZUJhbmQpe3ZhciBUPWYsUj1ULnJhbmdlQmFuZCgpLzI7cz1mPWZ1bmN0aW9uKG4pe3JldHVybiBUKG4pK1J9fWVsc2Ugcy5yYW5nZUJhbmQ/cz1mOmQuY2FsbChuLGYscyk7di5jYWxsKG4scyxmKSxtLmNhbGwobixmLGYpfSl9dmFyIHQsZT10YS5zY2FsZS5saW5lYXIoKSxyPWpsLHU9NixpPTYsbz0zLGE9WzEwXSxjPW51bGw7cmV0dXJuIG4uc2NhbGU9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGU9dCxuKTplfSxuLm9yaWVudD1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8ocj10IGluIEZsP3QrIiI6amwsbik6cn0sbi50aWNrcz1mdW5jdGlvbigpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhhPWFyZ3VtZW50cyxuKTphfSxuLnRpY2tWYWx1ZXM9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGM9dCxuKTpjfSxuLnRpY2tGb3JtYXQ9ZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHQ9ZSxuKTp0fSxuLnRpY2tTaXplPWZ1bmN0aW9uKHQpe3ZhciBlPWFyZ3VtZW50cy5sZW5ndGg7cmV0dXJuIGU/KHU9K3QsaT0rYXJndW1lbnRzW2UtMV0sbik6dX0sbi5pbm5lclRpY2tTaXplPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh1PSt0LG4pOnV9LG4ub3V0ZXJUaWNrU2l6ZT1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oaT0rdCxuKTppfSxuLnRpY2tQYWRkaW5nPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhvPSt0LG4pOm99LG4udGlja1N1YmRpdmlkZT1mdW5jdGlvbigpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoJiZufSxufTt2YXIgamw9ImJvdHRvbSIsRmw9e3RvcDoxLHJpZ2h0OjEsYm90dG9tOjEsbGVmdDoxfTt0YS5zdmcuYnJ1c2g9ZnVuY3Rpb24oKXtmdW5jdGlvbiBuKHQpe3QuZWFjaChmdW5jdGlvbigpe3ZhciB0PXRhLnNlbGVjdCh0aGlzKS5zdHlsZSgicG9pbnRlci1ldmVudHMiLCJhbGwiKS5zdHlsZSgiLXdlYmtpdC10YXAtaGlnaGxpZ2h0LWNvbG9yIiwicmdiYSgwLDAsMCwwKSIpLm9uKCJtb3VzZWRvd24uYnJ1c2giLGkpLm9uKCJ0b3VjaHN0YXJ0LmJydXNoIixpKSxvPXQuc2VsZWN0QWxsKCIuYmFja2dyb3VuZCIpLmRhdGEoWzBdKTtvLmVudGVyKCkuYXBwZW5kKCJyZWN0IikuYXR0cigiY2xhc3MiLCJiYWNrZ3JvdW5kIikuc3R5bGUoInZpc2liaWxpdHkiLCJoaWRkZW4iKS5zdHlsZSgiY3Vyc29yIiwiY3Jvc3NoYWlyIiksdC5zZWxlY3RBbGwoIi5leHRlbnQiKS5kYXRhKFswXSkuZW50ZXIoKS5hcHBlbmQoInJlY3QiKS5hdHRyKCJjbGFzcyIsImV4dGVudCIpLnN0eWxlKCJjdXJzb3IiLCJtb3ZlIik7dmFyIGE9dC5zZWxlY3RBbGwoIi5yZXNpemUiKS5kYXRhKHYseSk7YS5leGl0KCkucmVtb3ZlKCksYS5lbnRlcigpLmFwcGVuZCgiZyIpLmF0dHIoImNsYXNzIixmdW5jdGlvbihuKXtyZXR1cm4icmVzaXplICIrbn0pLnN0eWxlKCJjdXJzb3IiLGZ1bmN0aW9uKG4pe3JldHVybiBIbFtuXX0pLmFwcGVuZCgicmVjdCIpLmF0dHIoIngiLGZ1bmN0aW9uKG4pe3JldHVybi9bZXddJC8udGVzdChuKT8tMzpudWxsfSkuYXR0cigieSIsZnVuY3Rpb24obil7cmV0dXJuL15bbnNdLy50ZXN0KG4pPy0zOm51bGx9KS5hdHRyKCJ3aWR0aCIsNikuYXR0cigiaGVpZ2h0Iiw2KS5zdHlsZSgidmlzaWJpbGl0eSIsImhpZGRlbiIpLGEuc3R5bGUoImRpc3BsYXkiLG4uZW1wdHkoKT8ibm9uZSI6bnVsbCk7dmFyIGMsZj10YS50cmFuc2l0aW9uKHQpLGg9dGEudHJhbnNpdGlvbihvKTtsJiYoYz1VaShsKSxoLmF0dHIoIngiLGNbMF0pLmF0dHIoIndpZHRoIixjWzFdLWNbMF0pLHIoZikpLHMmJihjPVVpKHMpLGguYXR0cigieSIsY1swXSkuYXR0cigiaGVpZ2h0IixjWzFdLWNbMF0pLHUoZikpLGUoZil9KX1mdW5jdGlvbiBlKG4pe24uc2VsZWN0QWxsKCIucmVzaXplIikuYXR0cigidHJhbnNmb3JtIixmdW5jdGlvbihuKXtyZXR1cm4idHJhbnNsYXRlKCIrZlsrL2UkLy50ZXN0KG4pXSsiLCIraFsrL15zLy50ZXN0KG4pXSsiKSJ9KX1mdW5jdGlvbiByKG4pe24uc2VsZWN0KCIuZXh0ZW50IikuYXR0cigieCIsZlswXSksbi5zZWxlY3RBbGwoIi5leHRlbnQsLm4+cmVjdCwucz5yZWN0IikuYXR0cigid2lkdGgiLGZbMV0tZlswXSl9ZnVuY3Rpb24gdShuKXtuLnNlbGVjdCgiLmV4dGVudCIpLmF0dHIoInkiLGhbMF0pLG4uc2VsZWN0QWxsKCIuZXh0ZW50LC5lPnJlY3QsLnc+cmVjdCIpLmF0dHIoImhlaWdodCIsaFsxXS1oWzBdKX1mdW5jdGlvbiBpKCl7ZnVuY3Rpb24gaSgpezMyPT10YS5ldmVudC5rZXlDb2RlJiYoQ3x8KE09bnVsbCxxWzBdLT1mWzFdLHFbMV0tPWhbMV0sQz0yKSxTKCkpfWZ1bmN0aW9uIHYoKXszMj09dGEuZXZlbnQua2V5Q29kZSYmMj09QyYmKHFbMF0rPWZbMV0scVsxXSs9aFsxXSxDPTAsUygpKX1mdW5jdGlvbiBkKCl7dmFyIG49dGEubW91c2UoYiksdD0hMTt4JiYoblswXSs9eFswXSxuWzFdKz14WzFdKSxDfHwodGEuZXZlbnQuYWx0S2V5PyhNfHwoTT1bKGZbMF0rZlsxXSkvMiwoaFswXStoWzFdKS8yXSkscVswXT1mWysoblswXTxNWzBdKV0scVsxXT1oWysoblsxXTxNWzFdKV0pOk09bnVsbCksQSYmbShuLGwsMCkmJihyKGspLHQ9ITApLE4mJm0obixzLDEpJiYodShrKSx0PSEwKSx0JiYoZShrKSx3KHt0eXBlOiJicnVzaCIsbW9kZTpDPyJtb3ZlIjoicmVzaXplIn0pKX1mdW5jdGlvbiBtKG4sdCxlKXt2YXIgcix1LGk9VWkodCksYz1pWzBdLGw9aVsxXSxzPXFbZV0sdj1lP2g6ZixkPXZbMV0tdlswXTtyZXR1cm4gQyYmKGMtPXMsbC09ZCtzKSxyPShlP3A6Zyk/TWF0aC5tYXgoYyxNYXRoLm1pbihsLG5bZV0pKTpuW2VdLEM/dT0ocis9cykrZDooTSYmKHM9TWF0aC5tYXgoYyxNYXRoLm1pbihsLDIqTVtlXS1yKSkpLHI+cz8odT1yLHI9cyk6dT1zKSx2WzBdIT1yfHx2WzFdIT11PyhlP2E9bnVsbDpvPW51bGwsdlswXT1yLHZbMV09dSwhMCk6dm9pZCAwfWZ1bmN0aW9uIHkoKXtkKCksay5zdHlsZSgicG9pbnRlci1ldmVudHMiLCJhbGwiKS5zZWxlY3RBbGwoIi5yZXNpemUiKS5zdHlsZSgiZGlzcGxheSIsbi5lbXB0eSgpPyJub25lIjpudWxsKSx0YS5zZWxlY3QoImJvZHkiKS5zdHlsZSgiY3Vyc29yIixudWxsKSxMLm9uKCJtb3VzZW1vdmUuYnJ1c2giLG51bGwpLm9uKCJtb3VzZXVwLmJydXNoIixudWxsKS5vbigidG91Y2htb3ZlLmJydXNoIixudWxsKS5vbigidG91Y2hlbmQuYnJ1c2giLG51bGwpLm9uKCJrZXlkb3duLmJydXNoIixudWxsKS5vbigia2V5dXAuYnJ1c2giLG51bGwpLHooKSx3KHt0eXBlOiJicnVzaGVuZCJ9KX12YXIgTSx4LGI9dGhpcyxfPXRhLnNlbGVjdCh0YS5ldmVudC50YXJnZXQpLHc9Yy5vZihiLGFyZ3VtZW50cyksaz10YS5zZWxlY3QoYiksRT1fLmRhdHVtKCksQT0hL14obnxzKSQvLnRlc3QoRSkmJmwsTj0hL14oZXx3KSQvLnRlc3QoRSkmJnMsQz1fLmNsYXNzZWQoImV4dGVudCIpLHo9VyhiKSxxPXRhLm1vdXNlKGIpLEw9dGEuc2VsZWN0KHQoYikpLm9uKCJrZXlkb3duLmJydXNoIixpKS5vbigia2V5dXAuYnJ1c2giLHYpO2lmKHRhLmV2ZW50LmNoYW5nZWRUb3VjaGVzP0wub24oInRvdWNobW92ZS5icnVzaCIsZCkub24oInRvdWNoZW5kLmJydXNoIix5KTpMLm9uKCJtb3VzZW1vdmUuYnJ1c2giLGQpLm9uKCJtb3VzZXVwLmJydXNoIix5KSxrLmludGVycnVwdCgpLnNlbGVjdEFsbCgiKiIpLmludGVycnVwdCgpLEMpcVswXT1mWzBdLXFbMF0scVsxXT1oWzBdLXFbMV07ZWxzZSBpZihFKXt2YXIgVD0rL3ckLy50ZXN0KEUpLFI9Ky9ebi8udGVzdChFKTt4PVtmWzEtVF0tcVswXSxoWzEtUl0tcVsxXV0scVswXT1mW1RdLHFbMV09aFtSXX1lbHNlIHRhLmV2ZW50LmFsdEtleSYmKE09cS5zbGljZSgpKTtrLnN0eWxlKCJwb2ludGVyLWV2ZW50cyIsIm5vbmUiKS5zZWxlY3RBbGwoIi5yZXNpemUiKS5zdHlsZSgiZGlzcGxheSIsbnVsbCksdGEuc2VsZWN0KCJib2R5Iikuc3R5bGUoImN1cnNvciIsXy5zdHlsZSgiY3Vyc29yIikpLHcoe3R5cGU6ImJydXNoc3RhcnQifSksZCgpfXZhciBvLGEsYz1FKG4sImJydXNoc3RhcnQiLCJicnVzaCIsImJydXNoZW5kIiksbD1udWxsLHM9bnVsbCxmPVswLDBdLGg9WzAsMF0sZz0hMCxwPSEwLHY9T2xbMF07cmV0dXJuIG4uZXZlbnQ9ZnVuY3Rpb24obil7bi5lYWNoKGZ1bmN0aW9uKCl7dmFyIG49Yy5vZih0aGlzLGFyZ3VtZW50cyksdD17eDpmLHk6aCxpOm8sajphfSxlPXRoaXMuX19jaGFydF9ffHx0O3RoaXMuX19jaGFydF9fPXQsVGw/dGEuc2VsZWN0KHRoaXMpLnRyYW5zaXRpb24oKS5lYWNoKCJzdGFydC5icnVzaCIsZnVuY3Rpb24oKXtvPWUuaSxhPWUuaixmPWUueCxoPWUueSxuKHt0eXBlOiJicnVzaHN0YXJ0In0pfSkudHdlZW4oImJydXNoOmJydXNoIixmdW5jdGlvbigpe3ZhciBlPXl1KGYsdC54KSxyPXl1KGgsdC55KTtyZXR1cm4gbz1hPW51bGwsZnVuY3Rpb24odSl7Zj10Lng9ZSh1KSxoPXQueT1yKHUpLG4oe3R5cGU6ImJydXNoIixtb2RlOiJyZXNpemUifSl9fSkuZWFjaCgiZW5kLmJydXNoIixmdW5jdGlvbigpe289dC5pLGE9dC5qLG4oe3R5cGU6ImJydXNoIixtb2RlOiJyZXNpemUifSksbih7dHlwZToiYnJ1c2hlbmQifSl9KToobih7dHlwZToiYnJ1c2hzdGFydCJ9KSxuKHt0eXBlOiJicnVzaCIsbW9kZToicmVzaXplIn0pLG4oe3R5cGU6ImJydXNoZW5kIn0pKX0pfSxuLng9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGw9dCx2PU9sWyFsPDwxfCFzXSxuKTpsfSxuLnk9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHM9dCx2PU9sWyFsPDwxfCFzXSxuKTpzfSxuLmNsYW1wPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhsJiZzPyhnPSEhdFswXSxwPSEhdFsxXSk6bD9nPSEhdDpzJiYocD0hIXQpLG4pOmwmJnM/W2cscF06bD9nOnM/cDpudWxsfSxuLmV4dGVudD1mdW5jdGlvbih0KXt2YXIgZSxyLHUsaSxjO3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhsJiYoZT10WzBdLHI9dFsxXSxzJiYoZT1lWzBdLHI9clswXSksbz1bZSxyXSxsLmludmVydCYmKGU9bChlKSxyPWwocikpLGU+ciYmKGM9ZSxlPXIscj1jKSwoZSE9ZlswXXx8ciE9ZlsxXSkmJihmPVtlLHJdKSkscyYmKHU9dFswXSxpPXRbMV0sbCYmKHU9dVsxXSxpPWlbMV0pLGE9W3UsaV0scy5pbnZlcnQmJih1PXModSksaT1zKGkpKSx1PmkmJihjPXUsdT1pLGk9YyksKHUhPWhbMF18fGkhPWhbMV0pJiYoaD1bdSxpXSkpLG4pOihsJiYobz8oZT1vWzBdLHI9b1sxXSk6KGU9ZlswXSxyPWZbMV0sbC5pbnZlcnQmJihlPWwuaW52ZXJ0KGUpLHI9bC5pbnZlcnQocikpLGU+ciYmKGM9ZSxlPXIscj1jKSkpLHMmJihhPyh1PWFbMF0saT1hWzFdKToodT1oWzBdLGk9aFsxXSxzLmludmVydCYmKHU9cy5pbnZlcnQodSksaT1zLmludmVydChpKSksdT5pJiYoYz11LHU9aSxpPWMpKSksbCYmcz9bW2UsdV0sW3IsaV1dOmw/W2Uscl06cyYmW3UsaV0pfSxuLmNsZWFyPWZ1bmN0aW9uKCl7cmV0dXJuIG4uZW1wdHkoKXx8KGY9WzAsMF0saD1bMCwwXSxvPWE9bnVsbCksbn0sbi5lbXB0eT1mdW5jdGlvbigpe3JldHVybiEhbCYmZlswXT09ZlsxXXx8ISFzJiZoWzBdPT1oWzFdfSx0YS5yZWJpbmQobixjLCJvbiIpfTt2YXIgSGw9e246Im5zLXJlc2l6ZSIsZToiZXctcmVzaXplIixzOiJucy1yZXNpemUiLHc6ImV3LXJlc2l6ZSIsbnc6Im53c2UtcmVzaXplIixuZToibmVzdy1yZXNpemUiLHNlOiJud3NlLXJlc2l6ZSIsc3c6Im5lc3ctcmVzaXplIn0sT2w9W1sibiIsImUiLCJzIiwidyIsIm53IiwibmUiLCJzZSIsInN3Il0sWyJlIiwidyJdLFsibiIsInMiXSxbXV0sSWw9YWMuZm9ybWF0PWdjLnRpbWVGb3JtYXQsWWw9SWwudXRjLFpsPVlsKCIlWS0lbS0lZFQlSDolTTolUy4lTFoiKTtJbC5pc289RGF0ZS5wcm90b3R5cGUudG9JU09TdHJpbmcmJituZXcgRGF0ZSgiMjAwMC0wMS0wMVQwMDowMDowMC4wMDBaIik/Sm86WmwsSm8ucGFyc2U9ZnVuY3Rpb24obil7dmFyIHQ9bmV3IERhdGUobik7cmV0dXJuIGlzTmFOKHQpP251bGw6dH0sSm8udG9TdHJpbmc9WmwudG9TdHJpbmcsYWMuc2Vjb25kPUZ0KGZ1bmN0aW9uKG4pe3JldHVybiBuZXcgY2MoMWUzKk1hdGguZmxvb3Iobi8xZTMpKX0sZnVuY3Rpb24obix0KXtuLnNldFRpbWUobi5nZXRUaW1lKCkrMWUzKk1hdGguZmxvb3IodCkpfSxmdW5jdGlvbihuKXtyZXR1cm4gbi5nZXRTZWNvbmRzKCl9KSxhYy5zZWNvbmRzPWFjLnNlY29uZC5yYW5nZSxhYy5zZWNvbmRzLnV0Yz1hYy5zZWNvbmQudXRjLnJhbmdlLGFjLm1pbnV0ZT1GdChmdW5jdGlvbihuKXtyZXR1cm4gbmV3IGNjKDZlNCpNYXRoLmZsb29yKG4vNmU0KSl9LGZ1bmN0aW9uKG4sdCl7bi5zZXRUaW1lKG4uZ2V0VGltZSgpKzZlNCpNYXRoLmZsb29yKHQpKX0sZnVuY3Rpb24obil7cmV0dXJuIG4uZ2V0TWludXRlcygpfSksYWMubWludXRlcz1hYy5taW51dGUucmFuZ2UsYWMubWludXRlcy51dGM9YWMubWludXRlLnV0Yy5yYW5nZSxhYy5ob3VyPUZ0KGZ1bmN0aW9uKG4pe3ZhciB0PW4uZ2V0VGltZXpvbmVPZmZzZXQoKS82MDtyZXR1cm4gbmV3IGNjKDM2ZTUqKE1hdGguZmxvb3Iobi8zNmU1LXQpK3QpKX0sZnVuY3Rpb24obix0KXtuLnNldFRpbWUobi5nZXRUaW1lKCkrMzZlNSpNYXRoLmZsb29yKHQpKX0sZnVuY3Rpb24obil7cmV0dXJuIG4uZ2V0SG91cnMoKX0pLGFjLmhvdXJzPWFjLmhvdXIucmFuZ2UsYWMuaG91cnMudXRjPWFjLmhvdXIudXRjLnJhbmdlLGFjLm1vbnRoPUZ0KGZ1bmN0aW9uKG4pe3JldHVybiBuPWFjLmRheShuKSxuLnNldERhdGUoMSksbn0sZnVuY3Rpb24obix0KXtuLnNldE1vbnRoKG4uZ2V0TW9udGgoKSt0KX0sZnVuY3Rpb24obil7cmV0dXJuIG4uZ2V0TW9udGgoKX0pLGFjLm1vbnRocz1hYy5tb250aC5yYW5nZSxhYy5tb250aHMudXRjPWFjLm1vbnRoLnV0Yy5yYW5nZTt2YXIgVmw9WzFlMyw1ZTMsMTVlMywzZTQsNmU0LDNlNSw5ZTUsMThlNSwzNmU1LDEwOGU1LDIxNmU1LDQzMmU1LDg2NGU1LDE3MjhlNSw2MDQ4ZTUsMjU5MmU2LDc3NzZlNiwzMTUzNmU2XSxYbD1bW2FjLnNlY29uZCwxXSxbYWMuc2Vjb25kLDVdLFthYy5zZWNvbmQsMTVdLFthYy5zZWNvbmQsMzBdLFthYy5taW51dGUsMV0sW2FjLm1pbnV0ZSw1XSxbYWMubWludXRlLDE1XSxbYWMubWludXRlLDMwXSxbYWMuaG91ciwxXSxbYWMuaG91ciwzXSxbYWMuaG91ciw2XSxbYWMuaG91ciwxMl0sW2FjLmRheSwxXSxbYWMuZGF5LDJdLFthYy53ZWVrLDFdLFthYy5tb250aCwxXSxbYWMubW9udGgsM10sW2FjLnllYXIsMV1dLCRsPUlsLm11bHRpKFtbIi4lTCIsZnVuY3Rpb24obil7cmV0dXJuIG4uZ2V0TWlsbGlzZWNvbmRzKCl9XSxbIjolUyIsZnVuY3Rpb24obil7cmV0dXJuIG4uZ2V0U2Vjb25kcygpfV0sWyIlSTolTSIsZnVuY3Rpb24obil7cmV0dXJuIG4uZ2V0TWludXRlcygpfV0sWyIlSSAlcCIsZnVuY3Rpb24obil7cmV0dXJuIG4uZ2V0SG91cnMoKX1dLFsiJWEgJWQiLGZ1bmN0aW9uKG4pe3JldHVybiBuLmdldERheSgpJiYxIT1uLmdldERhdGUoKX1dLFsiJWIgJWQiLGZ1bmN0aW9uKG4pe3JldHVybiAxIT1uLmdldERhdGUoKX1dLFsiJUIiLGZ1bmN0aW9uKG4pe3JldHVybiBuLmdldE1vbnRoKCl9XSxbIiVZIixOZV1dKSxCbD17cmFuZ2U6ZnVuY3Rpb24obix0LGUpe3JldHVybiB0YS5yYW5nZShNYXRoLmNlaWwobi9lKSplLCt0LGUpLm1hcChLbyl9LGZsb29yOnksY2VpbDp5fTtYbC55ZWFyPWFjLnllYXIsYWMuc2NhbGU9ZnVuY3Rpb24oKXtyZXR1cm4gR28odGEuc2NhbGUubGluZWFyKCksWGwsJGwpfTt2YXIgV2w9WGwubWFwKGZ1bmN0aW9uKG4pe3JldHVybltuWzBdLnV0YyxuWzFdXX0pLEpsPVlsLm11bHRpKFtbIi4lTCIsZnVuY3Rpb24obil7cmV0dXJuIG4uZ2V0VVRDTWlsbGlzZWNvbmRzKCl9XSxbIjolUyIsZnVuY3Rpb24obil7cmV0dXJuIG4uZ2V0VVRDU2Vjb25kcygpfV0sWyIlSTolTSIsZnVuY3Rpb24obil7cmV0dXJuIG4uZ2V0VVRDTWludXRlcygpfV0sWyIlSSAlcCIsZnVuY3Rpb24obil7cmV0dXJuIG4uZ2V0VVRDSG91cnMoKX1dLFsiJWEgJWQiLGZ1bmN0aW9uKG4pe3JldHVybiBuLmdldFVUQ0RheSgpJiYxIT1uLmdldFVUQ0RhdGUoKX1dLFsiJWIgJWQiLGZ1bmN0aW9uKG4pe3JldHVybiAxIT1uLmdldFVUQ0RhdGUoKX1dLFsiJUIiLGZ1bmN0aW9uKG4pe3JldHVybiBuLmdldFVUQ01vbnRoKCl9XSxbIiVZIixOZV1dKTtXbC55ZWFyPWFjLnllYXIudXRjLGFjLnNjYWxlLnV0Yz1mdW5jdGlvbigpe3JldHVybiBHbyh0YS5zY2FsZS5saW5lYXIoKSxXbCxKbCl9LHRhLnRleHQ9QXQoZnVuY3Rpb24obil7cmV0dXJuIG4ucmVzcG9uc2VUZXh0fSksdGEuanNvbj1mdW5jdGlvbihuLHQpe3JldHVybiBOdChuLCJhcHBsaWNhdGlvbi9qc29uIixRbyx0KX0sdGEuaHRtbD1mdW5jdGlvbihuLHQpe3JldHVybiBOdChuLCJ0ZXh0L2h0bWwiLG5hLHQpfSx0YS54bWw9QXQoZnVuY3Rpb24obil7cmV0dXJuIG4ucmVzcG9uc2VYTUx9KSwiZnVuY3Rpb24iPT10eXBlb2YgZGVmaW5lJiZkZWZpbmUuYW1kP2RlZmluZSh0YSk6Im9iamVjdCI9PXR5cGVvZiBtb2R1bGUmJm1vZHVsZS5leHBvcnRzJiYobW9kdWxlLmV4cG9ydHM9dGEpLHRoaXMuZDM9dGF9KCk7"></script> <link href="data:text/css;charset=utf-8,%2Eparcoords%20%3E%20svg%2C%20%2Eparcoords%20%3E%20canvas%20%7B%0Afont%3A%2014px%20sans%2Dserif%3B%0Aposition%3A%20absolute%3B%0A%7D%0A%2Eparcoords%20%3E%20canvas%20%7B%0Apointer%2Devents%3A%20none%3B%0A%7D%0A%2Eparcoords%20text%2Elabel%20%7B%0Acursor%3A%20default%3B%0A%7D%0A%2Eparcoords%20rect%2Ebackground%20%7B%0Afill%3A%20transparent%3B%0A%7D%0A%2Eparcoords%20rect%2Ebackground%3Ahover%20%7B%0Afill%3A%20rgba%28120%2C120%2C120%2C0%2E2%29%3B%0A%7D%0A%2Eparcoords%20%2Eresize%20rect%20%7B%0Afill%3A%20rgba%280%2C0%2C0%2C0%2E1%29%3B%0A%7D%0A%2Eparcoords%20rect%2Eextent%20%7B%0Afill%3A%20rgba%28255%2C255%2C255%2C0%2E25%29%3B%0Astroke%3A%20rgba%280%2C0%2C0%2C0%2E6%29%3B%0A%7D%0A%2Eparcoords%20%2Eaxis%20line%2C%20%2Eparcoords%20%2Eaxis%20path%20%7B%0Afill%3A%20none%3B%0Astroke%3A%20%23222%3B%0Ashape%2Drendering%3A%20crispEdges%3B%0A%7D%0A%2Eparcoords%20canvas%20%7B%0Aopacity%3A%201%3B%0A%2Dmoz%2Dtransition%3A%20opacity%200%2E3s%3B%0A%2Dwebkit%2Dtransition%3A%20opacity%200%2E3s%3B%0A%2Do%2Dtransition%3A%20opacity%200%2E3s%3B%0A%7D%0A%2Eparcoords%20canvas%2Efaded%20%7B%0Aopacity%3A%200%2E25%3B%0A%7D%0A%2Eparcoords%20%7B%0A%2Dwebkit%2Dtouch%2Dcallout%3A%20none%3B%0A%2Dwebkit%2Duser%2Dselect%3A%20none%3B%0A%2Dkhtml%2Duser%2Dselect%3A%20none%3B%0A%2Dmoz%2Duser%2Dselect%3A%20none%3B%0A%2Dms%2Duser%2Dselect%3A%20none%3B%0Auser%2Dselect%3A%20none%3B%0Abackground%2Dcolor%3A%20white%3B%0A%7D%0A" rel="stylesheet" /> <script src="data:application/x-javascript;base64,KGZ1bmN0aW9uICgpIHsKICBkMy5zdmcubXVsdGlicnVzaCA9IGZ1bmN0aW9uKCkgewoKICAgIC8vIEZyb20gZDMvc2NhbGUvc2NhbGUuanMKICAgIGZ1bmN0aW9uIGQzX3NjYWxlRXh0ZW50KGRvbWFpbikgewogICAgICB2YXIgc3RhcnQgPSBkb21haW5bMF0sIHN0b3AgPSBkb21haW5bZG9tYWluLmxlbmd0aCAtIDFdOwogICAgICByZXR1cm4gc3RhcnQgPCBzdG9wID8gWyBzdGFydCwgc3RvcCBdIDogWyBzdG9wLCBzdGFydCBdOwogICAgfQogICAgZnVuY3Rpb24gZDNfc2NhbGVSYW5nZShzY2FsZSkgewogICAgICByZXR1cm4gc2NhbGUucmFuZ2VFeHRlbnQgPyBzY2FsZS5yYW5nZUV4dGVudCgpIDogZDNfc2NhbGVFeHRlbnQoc2NhbGUucmFuZ2UoKSk7CiAgICB9CgogICAgLy8gRnJvbSBkMwogICAgdmFyIGQzX2RvY3VtZW50ID0gdGhpcy5kb2N1bWVudDsKICAgIGZ1bmN0aW9uIGQzX2RvY3VtZW50RWxlbWVudChub2RlKSB7CiAgICAgIHJldHVybiBub2RlICYmIChub2RlLm93bmVyRG9jdW1lbnQgfHwgbm9kZS5kb2N1bWVudCB8fCBub2RlKS5kb2N1bWVudEVsZW1lbnQ7CiAgICB9CiAgICBmdW5jdGlvbiBkM193aW5kb3cobm9kZSkgewogICAgICByZXR1cm4gbm9kZSAmJiAobm9kZS5vd25lckRvY3VtZW50ICYmIG5vZGUub3duZXJEb2N1bWVudC5kZWZhdWx0VmlldyB8fCBub2RlLmRvY3VtZW50ICYmIG5vZGUgfHwgbm9kZS5kZWZhdWx0Vmlldyk7CiAgICB9CiAgICBpZiAoZDNfZG9jdW1lbnQpIHsKICAgICAgdHJ5IHsKICAgICAgICBkM19hcnJheShkM19kb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuY2hpbGROb2RlcylbMF0ubm9kZVR5cGU7CiAgICAgIH0gY2F0Y2ggKGUpIHsKICAgICAgICBkM19hcnJheSA9IGZ1bmN0aW9uKGxpc3QpIHsKICAgICAgICAgIHZhciBpID0gbGlzdC5sZW5ndGgsIGFycmF5ID0gbmV3IEFycmF5KGkpOwogICAgICAgICAgd2hpbGUgKGktLSkgYXJyYXlbaV0gPSBsaXN0W2ldOwogICAgICAgICAgcmV0dXJuIGFycmF5OwogICAgICAgIH07CiAgICAgIH0KICAgIH0KCiAgICBmdW5jdGlvbiBkM19ldmVudFByZXZlbnREZWZhdWx0KCkgewogICAgICBkMy5ldmVudC5wcmV2ZW50RGVmYXVsdCgpOwogICAgfQoKICAgIGZ1bmN0aW9uIGQzX3ZlbmRvclN5bWJvbChvYmplY3QsIG5hbWUpIHsKICAgICAgaWYgKG5hbWUgaW4gb2JqZWN0KSByZXR1cm4gbmFtZTsKICAgICAgbmFtZSA9IG5hbWUuY2hhckF0KDApLnRvVXBwZXJDYXNlKCkgKyBuYW1lLnNsaWNlKDEpOwogICAgICBmb3IgKHZhciBpID0gMCwgbiA9IGQzX3ZlbmRvclByZWZpeGVzLmxlbmd0aDsgaSA8IG47ICsraSkgewogICAgICAgIHZhciBwcmVmaXhOYW1lID0gZDNfdmVuZG9yUHJlZml4ZXNbaV0gKyBuYW1lOwogICAgICAgIGlmIChwcmVmaXhOYW1lIGluIG9iamVjdCkgcmV0dXJuIHByZWZpeE5hbWU7CiAgICAgIH0KICAgIH0KICAgIHZhciBkM192ZW5kb3JQcmVmaXhlcyA9IFsgIndlYmtpdCIsICJtcyIsICJtb3oiLCAiTW96IiwgIm8iLCAiTyIgXTsKCiAgICB2YXIgZDNfZXZlbnRfZHJhZ1NlbGVjdCA9ICJvbnNlbGVjdHN0YXJ0IiBpbiBkb2N1bWVudCA/IG51bGwgOiBkM192ZW5kb3JTeW1ib2woZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LnN0eWxlLCAidXNlclNlbGVjdCIpLCBkM19ldmVudF9kcmFnSWQgPSAwOwogICAgZnVuY3Rpb24gZDNfZXZlbnRfZHJhZ1N1cHByZXNzKG5vZGUpIHsKICAgICAgdmFyIG5hbWUgPSAiLmRyYWdzdXBwcmVzcy0iICsgKytkM19ldmVudF9kcmFnSWQsIGNsaWNrID0gImNsaWNrIiArIG5hbWUsIHcgPSBkMy5zZWxlY3QoZDNfd2luZG93KG5vZGUpKS5vbigidG91Y2htb3ZlIiArIG5hbWUsIGQzX2V2ZW50UHJldmVudERlZmF1bHQpLm9uKCJkcmFnc3RhcnQiICsgbmFtZSwgZDNfZXZlbnRQcmV2ZW50RGVmYXVsdCkub24oInNlbGVjdHN0YXJ0IiArIG5hbWUsIGQzX2V2ZW50UHJldmVudERlZmF1bHQpOwogICAgICBpZiAoZDNfZXZlbnRfZHJhZ1NlbGVjdCA9PSBudWxsKSB7CiAgICAgICAgZDNfZXZlbnRfZHJhZ1NlbGVjdCA9ICJvbnNlbGVjdHN0YXJ0IiBpbiBub2RlID8gZmFsc2UgOiBkM192ZW5kb3JTeW1ib2wobm9kZS5zdHlsZSwgInVzZXJTZWxlY3QiKTsKICAgICAgfQogICAgICBpZiAoZDNfZXZlbnRfZHJhZ1NlbGVjdCkgewogICAgICAgIHZhciBzdHlsZSA9IGQzX2RvY3VtZW50RWxlbWVudChub2RlKS5zdHlsZSwgc2VsZWN0ID0gc3R5bGVbZDNfZXZlbnRfZHJhZ1NlbGVjdF07CiAgICAgICAgc3R5bGVbZDNfZXZlbnRfZHJhZ1NlbGVjdF0gPSAibm9uZSI7CiAgICAgIH0KICAgICAgcmV0dXJuIGZ1bmN0aW9uKHN1cHByZXNzQ2xpY2spIHsKICAgICAgICB3Lm9uKG5hbWUsIG51bGwpOwogICAgICAgIGlmIChkM19ldmVudF9kcmFnU2VsZWN0KSBzdHlsZVtkM19ldmVudF9kcmFnU2VsZWN0XSA9IHNlbGVjdDsKICAgICAgICBpZiAoc3VwcHJlc3NDbGljaykgewogICAgICAgICAgdmFyIG9mZiA9IGZ1bmN0aW9uKCkgewogICAgICAgICAgICB3Lm9uKGNsaWNrLCBudWxsKTsKICAgICAgICAgIH07CiAgICAgICAgICB3Lm9uKGNsaWNrLCBmdW5jdGlvbigpIHsKICAgICAgICAgICAgZDNfZXZlbnRQcmV2ZW50RGVmYXVsdCgpOwogICAgICAgICAgICBvZmYoKTsKICAgICAgICAgIH0sIHRydWUpOwogICAgICAgICAgc2V0VGltZW91dChvZmYsIDApOwogICAgICAgIH0KICAgICAgfTsKICAgIH0KCiAgICB2YXIgZXZlbnQgPSBkMy5kaXNwYXRjaCgiYnJ1c2hzdGFydCIsICJicnVzaCIsICJicnVzaGVuZCIpLAogICAgICAgIGJydXNoRWxlbWVudCwKICAgICAgICB4ID0gbnVsbCwgLy8geC1zY2FsZSwgb3B0aW9uYWwKICAgICAgICB5ID0gbnVsbCwgLy8geS1zY2FsZSwgb3B0aW9uYWwKICAgICAgICB4RXh0ZW50ID0gW1swLCAwXV0sIC8vIFt4MCwgeDFdIGluIGludGVnZXIgcGl4ZWxzCiAgICAgICAgeUV4dGVudCA9IFtbMCwgMF1dLCAvLyBbeTAsIHkxXSBpbiBpbnRlZ2VyIHBpeGVscwogICAgICAgIHhFeHRlbnREb21haW4gPSBbXSwgLy8geC1leHRlbnQgaW4gZGF0YSBzcGFjZQogICAgICAgIHlFeHRlbnREb21haW4gPSBbXSwgLy8geS1leHRlbnQgaW4gZGF0YSBzcGFjZQogICAgICAgIHhDbGFtcCA9IHRydWUsIC8vIHdoZXRoZXIgdG8gY2xhbXAgdGhlIHgtZXh0ZW50IHRvIHRoZSByYW5nZQogICAgICAgIHlDbGFtcCA9IHRydWUsIC8vIHdoZXRoZXIgdG8gY2xhbXAgdGhlIHktZXh0ZW50IHRvIHRoZSByYW5nZQogICAgICAgIHJlc2l6ZXMgPSBkM19zdmdfYnJ1c2hSZXNpemVzWzBdLAogICAgICAgIHJlc2l6ZUFkYXB0aW9uID0gZnVuY3Rpb24gKCkge30sIC8vIEZ1bmN0aW9uIHRvICdjYWxsJyBvbiBuZXcgcmVzaXplIHNlbGVjdGlvbgogICAgICAgIGV4dGVudEFkYXB0aW9uID0gZnVuY3Rpb24gKCkge307IC8vIEZ1bmN0aW9uIHRvICdjYWxsJyBvbiBuZXcgZXh0ZW50IHNlbGVjdGlvbgoKICAgIGV2ZW50Lm9mID0gZnVuY3Rpb24odGhpeiwgYXJndW1lbnR6KSB7CiAgICAgIHJldHVybiBmdW5jdGlvbihlMSkgewogICAgICAgIHRyeSB7CiAgICAgICAgICB2YXIgZTAgPQogICAgICAgICAgZTEuc291cmNlRXZlbnQgPSBkMy5ldmVudDsKICAgICAgICAgIGUxLnRhcmdldCA9IGJydXNoOwogICAgICAgICAgZDMuZXZlbnQgPSBlMTsKICAgICAgICAgIGV2ZW50W2UxLnR5cGVdLmFwcGx5KHRoaXosIGFyZ3VtZW50eik7CiAgICAgICAgfSBmaW5hbGx5IHsKICAgICAgICAgIGQzLmV2ZW50ID0gZTA7CiAgICAgICAgfQogICAgICB9OwogICAgfTsKCiAgICBmdW5jdGlvbiBicnVzaChnKSB7CiAgICAgIGcuZWFjaChmdW5jdGlvbigpIHsKCiAgICAgICAgLy8gUHJlcGFyZSB0aGUgYnJ1c2ggY29udGFpbmVyIGZvciBldmVudHMuCiAgICAgICAgdmFyIGcgPSBkMy5zZWxlY3QodGhpcykKICAgICAgICAgICAgLnN0eWxlKCJwb2ludGVyLWV2ZW50cyIsICJhbGwiKQogICAgICAgICAgICAuc3R5bGUoIi13ZWJraXQtdGFwLWhpZ2hsaWdodC1jb2xvciIsICJyZ2JhKDAsMCwwLDApIikKICAgICAgICAgICAgLm9uKCJtb3VzZWRvd24uYnJ1c2giLCBicnVzaHN0YXJ0KQogICAgICAgICAgICAub24oInRvdWNoc3RhcnQuYnJ1c2giLCBicnVzaHN0YXJ0KTsKCiAgICAgICAgYnJ1c2hFbGVtZW50ID0gZzsKCiAgICAgICAgLy8gQW4gaW52aXNpYmxlLCBtb3VzZWFibGUgYXJlYSBmb3Igc3RhcnRpbmcgYSBuZXcgYnJ1c2guCiAgICAgICAgdmFyIGJhY2tncm91bmQgPSBnLnNlbGVjdEFsbCgiLmJhY2tncm91bmQiKQogICAgICAgICAgICAuZGF0YShbMF0pOwoKICAgICAgICBiYWNrZ3JvdW5kLmVudGVyKCkuYXBwZW5kKCJyZWN0IikKICAgICAgICAgICAgLmF0dHIoImNsYXNzIiwgImJhY2tncm91bmQiKQogICAgICAgICAgICAuc3R5bGUoInZpc2liaWxpdHkiLCAiaGlkZGVuIikKICAgICAgICAgICAgLnN0eWxlKCJjdXJzb3IiLCAiY3Jvc3NoYWlyIik7CgogICAgICAgIGRyYXdFeHRlbnRzKGcpOwoKICAgICAgICAvLyBXaGVuIGNhbGxlZCBvbiBhIHRyYW5zaXRpb24sIHVzZSBhIHRyYW5zaXRpb24gdG8gdXBkYXRlLgogICAgICAgIHZhciBnVXBkYXRlID0gZDMudHJhbnNpdGlvbihnKSwKICAgICAgICAgICAgYmFja2dyb3VuZFVwZGF0ZSA9IGQzLnRyYW5zaXRpb24oYmFja2dyb3VuZCksCiAgICAgICAgICAgIHJhbmdlOwoKICAgICAgICAvLyBJbml0aWFsaXplIHRoZSBiYWNrZ3JvdW5kIHRvIGZpbGwgdGhlIGRlZmluZWQgcmFuZ2UuCiAgICAgICAgLy8gSWYgdGhlIHJhbmdlIGlzbid0IGRlZmluZWQsIHlvdSBjYW4gcG9zdC1wcm9jZXNzLgogICAgICAgIGlmICh4KSB7CiAgICAgICAgICByYW5nZSA9IGQzX3NjYWxlUmFuZ2UoeCk7CiAgICAgICAgICBiYWNrZ3JvdW5kVXBkYXRlLmF0dHIoIngiLCByYW5nZVswXSkuYXR0cigid2lkdGgiLCByYW5nZVsxXSAtIHJhbmdlWzBdKTsKICAgICAgICAgIHJlZHJhd1goZ1VwZGF0ZSk7CiAgICAgICAgfQogICAgICAgIGlmICh5KSB7CiAgICAgICAgICByYW5nZSA9IGQzX3NjYWxlUmFuZ2UoeSk7CiAgICAgICAgICBiYWNrZ3JvdW5kVXBkYXRlLmF0dHIoInkiLCByYW5nZVswXSkuYXR0cigiaGVpZ2h0IiwgcmFuZ2VbMV0gLSByYW5nZVswXSk7CiAgICAgICAgICByZWRyYXdZKGdVcGRhdGUpOwogICAgICAgIH0KICAgICAgICByZWRyYXcoZ1VwZGF0ZSk7CiAgICAgIH0pOwogICAgfQoKICAgIGZ1bmN0aW9uIGRyYXdFeHRlbnRzKGcpIHsKICAgICAgdmFyIGV4ID0geEV4dGVudC5sZW5ndGggPiB5RXh0ZW50Lmxlbmd0aCA/IHhFeHRlbnQgOiB5RXh0ZW50LAogICAgICAgICAgaSA9IGV4Lmxlbmd0aAogICAgICAgICAgZXh0ZW50QXJyID0gZXgubWFwKGZ1bmN0aW9uKGQsaSkgeyByZXR1cm4gaTsgfSksCiAgICAgICAgICBleHRlbnRSZXNpemVzID0gZDMubWVyZ2UoZXgubWFwKGZ1bmN0aW9uKGQsaSkgeyByZXR1cm4gcmVzaXplcy5tYXAoZnVuY3Rpb24ocikgeyByZXR1cm4gW3IsIGldOyB9KTsgfSkpOwoKICAgICAgaWYoIWcpIGcgPSBicnVzaEVsZW1lbnQ7CgogICAgICAvLyBUaGUgdmlzaWJsZSBicnVzaCBleHRlbnQ7IHN0eWxlIHRoaXMgYXMgeW91IGxpa2UhCiAgICAgIHZhciBleHRlbnQgPSBnLnNlbGVjdEFsbCgiLmV4dGVudCIpCiAgICAgICAgICAuZGF0YShleHRlbnRBcnIsIGZ1bmN0aW9uIChkKSB7IHJldHVybiBkOyB9KTsKCiAgICAgIGV4dGVudC5leGl0KCkucmVtb3ZlKCk7CgogICAgICBleHRlbnQuZW50ZXIoKS5hcHBlbmQoInJlY3QiKQogICAgICAgICAgLmF0dHIoImNsYXNzIiwgImV4dGVudCIpCiAgICAgICAgICAuc3R5bGUoImN1cnNvciIsICJtb3ZlIikKICAgICAgICAgIC5jYWxsKGV4dGVudEFkYXB0aW9uKTsKCiAgICAgIC8vIE1vcmUgaW52aXNpYmxlIHJlY3RzIGZvciByZXNpemluZyB0aGUgZXh0ZW50LgogICAgICB2YXIgcmVzaXplID0gZy5zZWxlY3RBbGwoIi5yZXNpemUiKQogICAgICAgICAgLmRhdGEoZXh0ZW50UmVzaXplcywgZnVuY3Rpb24gKGQpIHsgcmV0dXJuIGRbMF0gKyBkWzFdOyB9KTsKCiAgICAgIC8vIFJlbW92ZSBhbnkgc3VwZXJmbHVvdXMgcmVzaXplcnMuCiAgICAgIHJlc2l6ZS5leGl0KCkucmVtb3ZlKCk7CgogICAgICB2YXIgbmV3UmVzaXplID0gcmVzaXplLmVudGVyKCkuYXBwZW5kKCJnIikKICAgICAgICAgIC5hdHRyKCJjbGFzcyIsIGZ1bmN0aW9uKGQpIHsgcmV0dXJuICJyZXNpemUgIiArIGRbMF07IH0pCiAgICAgICAgICAuc3R5bGUoImN1cnNvciIsIGZ1bmN0aW9uKGQpIHsgcmV0dXJuIGQzX3N2Z19icnVzaEN1cnNvcltkWzBdXTsgfSk7CgogICAgICBuZXdSZXNpemUuYXBwZW5kKCJyZWN0IikKICAgICAgICAgIC5hdHRyKCJ4IiwgZnVuY3Rpb24oZCkgeyByZXR1cm4gL1tld10kLy50ZXN0KGRbMF0pID8gLTMgOiBudWxsOyB9KQogICAgICAgICAgLmF0dHIoInkiLCBmdW5jdGlvbihkKSB7IHJldHVybiAvXltuc10vLnRlc3QoZFswXSkgPyAtMyA6IG51bGw7IH0pCiAgICAgICAgICAuYXR0cigid2lkdGgiLCA2KQogICAgICAgICAgLmF0dHIoImhlaWdodCIsIDYpCiAgICAgICAgICAuc3R5bGUoInZpc2liaWxpdHkiLCAiaGlkZGVuIik7CgogICAgICBuZXdSZXNpemUuY2FsbChyZXNpemVBZGFwdGlvbik7CgogICAgICAvLyBTaG93IG9yIGhpZGUgdGhlIHJlc2l6ZXJzLgogICAgICByZXNpemUuc3R5bGUoImRpc3BsYXkiLCBmdW5jdGlvbiAoZCkgeyByZXR1cm4gYnJ1c2guZW1wdHkoZFsxXSkgPyAibm9uZSIgOiBudWxsOyB9KTsKICAgIH0KCiAgICBicnVzaC5ldmVudCA9IGZ1bmN0aW9uKGcpIHsKICAgICAgZy5lYWNoKGZ1bmN0aW9uKCkgewogICAgICAgIHZhciBldmVudF8gPSBldmVudC5vZih0aGlzLCBhcmd1bWVudHMpLAogICAgICAgICAgICBleHRlbnQxID0ge3g6IHhFeHRlbnQsIHk6IHlFeHRlbnQsIGk6IHhFeHRlbnREb21haW4sIGo6IHlFeHRlbnREb21haW59LAogICAgICAgICAgICBleHRlbnQwID0gdGhpcy5fX2NoYXJ0X18gfHwgZXh0ZW50MTsKICAgICAgICB0aGlzLl9fY2hhcnRfXyA9IGV4dGVudDE7CiAgICAgICAgaWYgKGQzX3RyYW5zaXRpb25Jbmhlcml0SWQpIHsKICAgICAgICAgIGQzLnNlbGVjdCh0aGlzKS50cmFuc2l0aW9uKCkKICAgICAgICAgICAgICAuZWFjaCgic3RhcnQuYnJ1c2giLCBmdW5jdGlvbigpIHsKICAgICAgICAgICAgICAgIHhFeHRlbnREb21haW4gPSBleHRlbnQwLmk7IC8vIHByZS10cmFuc2l0aW9uIHN0YXRlCiAgICAgICAgICAgICAgICB5RXh0ZW50RG9tYWluID0gZXh0ZW50MC5qOwogICAgICAgICAgICAgICAgeEV4dGVudCA9IGV4dGVudDAueDsKICAgICAgICAgICAgICAgIHlFeHRlbnQgPSBleHRlbnQwLnk7CiAgICAgICAgICAgICAgICBldmVudF8oe3R5cGU6ICJicnVzaHN0YXJ0In0pOwogICAgICAgICAgICAgIH0pCiAgICAgICAgICAgICAgLnR3ZWVuKCJicnVzaDpicnVzaCIsIGZ1bmN0aW9uKCkgewogICAgICAgICAgICAgICAgLy8gVE9ETzogdHJhbnNpdGlvbnMgZm9yIGFsbCBleHRlbnRzCiAgICAgICAgICAgICAgICB2YXIgeGkgPSBkM19pbnRlcnBvbGF0ZUFycmF5KHhFeHRlbnRbMF0sIGV4dGVudDEueFswXSksCiAgICAgICAgICAgICAgICAgICAgeWkgPSBkM19pbnRlcnBvbGF0ZUFycmF5KHlFeHRlbnRbMF0sIGV4dGVudDEueVswXSk7CiAgICAgICAgICAgICAgICB4RXh0ZW50RG9tYWluWzBdID0geUV4dGVudERvbWFpblswXSA9IG51bGw7IC8vIHRyYW5zaXRpb24gc3RhdGUKICAgICAgICAgICAgICAgIHJldHVybiBmdW5jdGlvbih0KSB7CiAgICAgICAgICAgICAgICAgIHhFeHRlbnRbMF0gPSBleHRlbnQxLnhbMF0gPSB4aSh0KTsKICAgICAgICAgICAgICAgICAgeUV4dGVudFswXSA9IGV4dGVudDEueVswXSA9IHlpKHQpOwogICAgICAgICAgICAgICAgICBldmVudF8oe3R5cGU6ICJicnVzaCIsIG1vZGU6ICJyZXNpemUifSk7CiAgICAgICAgICAgICAgICB9OwogICAgICAgICAgICAgIH0pCiAgICAgICAgICAgICAgLmVhY2goImVuZC5icnVzaCIsIGZ1bmN0aW9uKCkgewogICAgICAgICAgICAgICAgeEV4dGVudERvbWFpbiA9IGV4dGVudDEuaTsgLy8gcG9zdC10cmFuc2l0aW9uIHN0YXRlCiAgICAgICAgICAgICAgICB5RXh0ZW50RG9tYWluID0gZXh0ZW50MS5qOwogICAgICAgICAgICAgICAgZXZlbnRfKHt0eXBlOiAiYnJ1c2giLCBtb2RlOiAicmVzaXplIn0pOwogICAgICAgICAgICAgICAgZXZlbnRfKHt0eXBlOiAiYnJ1c2hlbmQifSk7CiAgICAgICAgICAgICAgfSk7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgIGV2ZW50Xyh7dHlwZTogImJydXNoc3RhcnQifSk7CiAgICAgICAgICBldmVudF8oe3R5cGU6ICJicnVzaCIsIG1vZGU6ICJyZXNpemUifSk7CiAgICAgICAgICBldmVudF8oe3R5cGU6ICJicnVzaGVuZCJ9KTsKICAgICAgICB9CiAgICAgIH0pOwogICAgfTsKCiAgICBmdW5jdGlvbiByZWRyYXcoZykgewogICAgICBnLnNlbGVjdEFsbCgiLnJlc2l6ZSIpLmF0dHIoInRyYW5zZm9ybSIsIGZ1bmN0aW9uKGQpIHsKICAgICAgICByZXR1cm4gInRyYW5zbGF0ZSgiICsgeEV4dGVudFtkWzFdXVsrL2UkLy50ZXN0KGRbMF0pXSArICIsIiArIHlFeHRlbnRbZFsxXV1bKy9ecy8udGVzdChkWzBdKV0gKyAiKSI7CiAgICAgIH0pOwogICAgfQoKICAgIGZ1bmN0aW9uIHJlZHJhd1goZykgewogICAgICBnLnNlbGVjdEFsbCgiLmV4dGVudCIpLmF0dHIoIngiLCBmdW5jdGlvbiAoZCkgeyByZXR1cm4geEV4dGVudFtkXVswXTsgfSk7CiAgICAgIGcuc2VsZWN0QWxsKCIuZXh0ZW50IikuYXR0cigid2lkdGgiLCBmdW5jdGlvbihkKSB7IHJldHVybiB4RXh0ZW50W2RdWzFdIC0geEV4dGVudFtkXVswXTsgfSk7CiAgICB9CgogICAgZnVuY3Rpb24gcmVkcmF3WShnKSB7CiAgICAgIGcuc2VsZWN0QWxsKCIuZXh0ZW50IikuYXR0cigieSIsIGZ1bmN0aW9uIChkKSB7IHJldHVybiB5RXh0ZW50W2RdWzBdOyB9KTsKICAgICAgZy5zZWxlY3RBbGwoIi5leHRlbnQiKS5hdHRyKCJoZWlnaHQiLCBmdW5jdGlvbiAoZCkgeyByZXR1cm4geUV4dGVudFtkXVsxXSAtIHlFeHRlbnRbZF1bMF07IH0pOwogICAgfQoKICAgIGZ1bmN0aW9uIGJydXNoc3RhcnQoKSB7CiAgICAgIHZhciB0YXJnZXQgPSB0aGlzLAogICAgICAgICAgZXZlbnRUYXJnZXQgPSBkMy5zZWxlY3QoZDMuZXZlbnQudGFyZ2V0KSwKICAgICAgICAgIGV2ZW50XyA9IGV2ZW50Lm9mKHRhcmdldCwgYXJndW1lbnRzKSwKICAgICAgICAgIGcgPSBkMy5zZWxlY3QodGFyZ2V0KSwKICAgICAgICAgIHJlc2l6aW5nID0gZXZlbnRUYXJnZXQuZGF0dW0oKVswXSwKICAgICAgICAgIHJlc2l6aW5nWCA9ICEvXihufHMpJC8udGVzdChyZXNpemluZykgJiYgeCwKICAgICAgICAgIHJlc2l6aW5nWSA9ICEvXihlfHcpJC8udGVzdChyZXNpemluZykgJiYgeSwKICAgICAgICAgIGRyYWdnaW5nID0gZXZlbnRUYXJnZXQuY2xhc3NlZCgiZXh0ZW50IiksCiAgICAgICAgICBkcmFnUmVzdG9yZSA9IGQzX2V2ZW50X2RyYWdTdXBwcmVzcyh0YXJnZXQpLAogICAgICAgICAgY2VudGVyLAogICAgICAgICAgb3JpZ2luID0gZDMubW91c2UodGFyZ2V0KSwKICAgICAgICAgIG9mZnNldCwKICAgICAgICAgIGk7CgogICAgICB2YXIgdyA9IGQzLnNlbGVjdCh3aW5kb3cpCiAgICAgICAgICAub24oImtleWRvd24uYnJ1c2giLCBrZXlkb3duKQogICAgICAgICAgLm9uKCJrZXl1cC5icnVzaCIsIGtleXVwKTsKCiAgICAgIGlmIChkMy5ldmVudC5jaGFuZ2VkVG91Y2hlcykgewogICAgICAgIHcub24oInRvdWNobW92ZS5icnVzaCIsIGJydXNobW92ZSkub24oInRvdWNoZW5kLmJydXNoIiwgYnJ1c2hlbmQpOwogICAgICB9IGVsc2UgewogICAgICAgIHcub24oIm1vdXNlbW92ZS5icnVzaCIsIGJydXNobW92ZSkub24oIm1vdXNldXAuYnJ1c2giLCBicnVzaGVuZCk7CiAgICAgIH0KCiAgICAgIC8vIEludGVycnVwdCB0aGUgdHJhbnNpdGlvbiwgaWYgYW55LgogICAgICBnLmludGVycnVwdCgpLnNlbGVjdEFsbCgiKiIpLmludGVycnVwdCgpOwoKICAgICAgLy8gSWYgdGhlIGV4dGVudCB3YXMgY2xpY2tlZCBvbiwgZHJhZyByYXRoZXIgdGhhbiBicnVzaDsKICAgICAgLy8gc3RvcmUgdGhlIHBvaW50IGJldHdlZW4gdGhlIG1vdXNlIGFuZCBleHRlbnQgb3JpZ2luIGluc3RlYWQuCiAgICAgIGlmIChkcmFnZ2luZykgewogICAgICAgIGkgPSBldmVudFRhcmdldC5kYXR1bSgpOwogICAgICAgIG9yaWdpblswXSA9IHhFeHRlbnRbaV1bMF0gLSBvcmlnaW5bMF07CiAgICAgICAgb3JpZ2luWzFdID0geUV4dGVudFtpXVswXSAtIG9yaWdpblsxXTsKICAgICAgfQoKICAgICAgLy8gSWYgYSByZXNpemVyIHdhcyBjbGlja2VkIG9uLCByZWNvcmQgd2hpY2ggc2lkZSBpcyB0byBiZSByZXNpemVkLgogICAgICAvLyBBbHNvLCBzZXQgdGhlIG9yaWdpbiB0byB0aGUgb3Bwb3NpdGUgc2lkZS4KICAgICAgZWxzZSBpZiAocmVzaXppbmcpIHsKICAgICAgICB2YXIgZXggPSArL3ckLy50ZXN0KHJlc2l6aW5nKSwKICAgICAgICAgICAgZXkgPSArL15uLy50ZXN0KHJlc2l6aW5nKTsKCiAgICAgICAgaSA9IGV2ZW50VGFyZ2V0LmRhdHVtKClbMV07CiAgICAgICAgb2Zmc2V0ID0gW3hFeHRlbnRbaV1bMSAtIGV4XSAtIG9yaWdpblswXSwgeUV4dGVudFtpXVsxIC0gZXldIC0gb3JpZ2luWzFdXTsKICAgICAgICBvcmlnaW5bMF0gPSB4RXh0ZW50W2ldW2V4XTsKICAgICAgICBvcmlnaW5bMV0gPSB5RXh0ZW50W2ldW2V5XTsKICAgICAgfQoKICAgICAgZWxzZSB7CiAgICAgICAgaSA9IHhFeHRlbnQubGVuZ3RoIC0gMTsgLy8gRmlndXJlIG91dCB0aGUgY291bnQgb2YgdGhlIG5ldyBleHRlbnQuCiAgICAgICAgeEV4dGVudC5wdXNoKFswLDBdKTsKICAgICAgICB5RXh0ZW50LnB1c2goWzAsMF0pOwoKICAgICAgICAvLyBJZiB0aGUgQUxUIGtleSBpcyBkb3duIHdoZW4gc3RhcnRpbmcgYSBicnVzaCwgdGhlIGNlbnRlciBpcyBhdCB0aGUgbW91c2UuCiAgICAgICAgaWYgKGQzLmV2ZW50LmFsdEtleSkgY2VudGVyID0gb3JpZ2luLnNsaWNlKCk7CiAgICAgIH0KCiAgICAgIC8vIFByb3BhZ2F0ZSB0aGUgYWN0aXZlIGN1cnNvciB0byB0aGUgYm9keSBmb3IgdGhlIGRyYWcgZHVyYXRpb24uCiAgICAgIGcuc3R5bGUoInBvaW50ZXItZXZlbnRzIiwgIm5vbmUiKTsKICAgICAgZDMuc2VsZWN0KCJib2R5Iikuc3R5bGUoImN1cnNvciIsIGV2ZW50VGFyZ2V0LnN0eWxlKCJjdXJzb3IiKSk7CgogICAgICAvLyBTaG93IHJlc2l6ZXJzIGFzIGxvbmcgYXMgd2UncmUgbm90IGRyYWdnaW5nIG9yIHJlc2l6aW5nLgogICAgICBpZighZHJhZ2dpbmcgJiYgIXJlc2l6aW5nKSBnLnNlbGVjdEFsbCgiLnJlc2l6ZSIpLnN0eWxlKCJkaXNwbGF5IiwgbnVsbCkKCiAgICAgIC8vIE5vdGlmeSBsaXN0ZW5lcnMuCiAgICAgIGV2ZW50Xyh7dHlwZTogImJydXNoc3RhcnQifSk7CiAgICAgIGJydXNobW92ZSgpOwoKICAgICAgZnVuY3Rpb24ga2V5ZG93bigpIHsKICAgICAgICBpZiAoZDMuZXZlbnQua2V5Q29kZSA9PSAzMikgewogICAgICAgICAgaWYgKCFkcmFnZ2luZykgewogICAgICAgICAgICBjZW50ZXIgPSBudWxsOwogICAgICAgICAgICBvcmlnaW5bMF0gLT0geEV4dGVudFtpXVsxXTsKICAgICAgICAgICAgb3JpZ2luWzFdIC09IHlFeHRlbnRbaV1bMV07CiAgICAgICAgICAgIGRyYWdnaW5nID0gMjsKICAgICAgICAgIH0KICAgICAgICAgIGQzLmV2ZW50LnByZXZlbnREZWZhdWx0KCk7CiAgICAgICAgfQogICAgICB9CgogICAgICBmdW5jdGlvbiBrZXl1cCgpIHsKICAgICAgICBpZiAoZDMuZXZlbnQua2V5Q29kZSA9PSAzMiAmJiBkcmFnZ2luZyA9PSAyKSB7CiAgICAgICAgICBvcmlnaW5bMF0gKz0geEV4dGVudFtpXVsxXTsKICAgICAgICAgIG9yaWdpblsxXSArPSB5RXh0ZW50W2ldWzFdOwogICAgICAgICAgZHJhZ2dpbmcgPSAwOwogICAgICAgICAgZDMuZXZlbnQucHJldmVudERlZmF1bHQoKTsKICAgICAgICB9CiAgICAgIH0KCiAgICAgIGZ1bmN0aW9uIGJydXNobW92ZSgpIHsKICAgICAgICB2YXIgcG9pbnQgPSBkMy5tb3VzZSh0YXJnZXQpLAogICAgICAgICAgICBtb3ZlZCA9IGZhbHNlOwoKICAgICAgICAvLyBQcmVzZXJ2ZSB0aGUgb2Zmc2V0IGZvciB0aGljayByZXNpemVycy4KICAgICAgICBpZiAob2Zmc2V0KSB7CiAgICAgICAgICBwb2ludFswXSArPSBvZmZzZXRbMF07CiAgICAgICAgICBwb2ludFsxXSArPSBvZmZzZXRbMV07CiAgICAgICAgfQoKICAgICAgICBpZiAoIWRyYWdnaW5nKSB7CgogICAgICAgICAgLy8gSWYgbmVlZGVkLCBkZXRlcm1pbmUgdGhlIGNlbnRlciBmcm9tIHRoZSBjdXJyZW50IGV4dGVudC4KICAgICAgICAgIGlmIChkMy5ldmVudC5hbHRLZXkpIHsKICAgICAgICAgICAgaWYgKCFjZW50ZXIpIGNlbnRlciA9IFsoeEV4dGVudFtpXVswXSArIHhFeHRlbnRbaV1bMV0pIC8gMiwgKHlFeHRlbnRbaV1bMF0gKyB5RXh0ZW50W2ldWzFdKSAvIDJdOwoKICAgICAgICAgICAgLy8gVXBkYXRlIHRoZSBvcmlnaW4sIGZvciB3aGVuIHRoZSBBTFQga2V5IGlzIHJlbGVhc2VkLgogICAgICAgICAgICBvcmlnaW5bMF0gPSB4RXh0ZW50W2ldWysocG9pbnRbMF0gPCBjZW50ZXJbMF0pXTsKICAgICAgICAgICAgb3JpZ2luWzFdID0geUV4dGVudFtpXVsrKHBvaW50WzFdIDwgY2VudGVyWzFdKV07CiAgICAgICAgICB9CgogICAgICAgICAgLy8gV2hlbiB0aGUgQUxUIGtleSBpcyByZWxlYXNlZCwgd2UgY2xlYXIgdGhlIGNlbnRlci4KICAgICAgICAgIGVsc2UgY2VudGVyID0gbnVsbDsKICAgICAgICB9CgogICAgICAgIC8vIFVwZGF0ZSB0aGUgYnJ1c2ggZXh0ZW50IGZvciBlYWNoIGRpbWVuc2lvbi4KICAgICAgICBpZiAocmVzaXppbmdYICYmIG1vdmUxKHBvaW50LCB4LCAwKSkgewogICAgICAgICAgcmVkcmF3WChnLCBpKTsKICAgICAgICAgIG1vdmVkID0gdHJ1ZTsKICAgICAgICB9CiAgICAgICAgaWYgKHJlc2l6aW5nWSAmJiBtb3ZlMShwb2ludCwgeSwgMSkpIHsKICAgICAgICAgIHJlZHJhd1koZywgaSk7CiAgICAgICAgICBtb3ZlZCA9IHRydWU7CiAgICAgICAgfQoKICAgICAgICAvLyBGaW5hbCByZWRyYXcgYW5kIG5vdGlmeSBsaXN0ZW5lcnMuCiAgICAgICAgaWYgKG1vdmVkKSB7CiAgICAgICAgICByZWRyYXcoZyk7CiAgICAgICAgICBldmVudF8oe3R5cGU6ICJicnVzaCIsIG1vZGU6IGRyYWdnaW5nID8gIm1vdmUiIDogInJlc2l6ZSJ9KTsKICAgICAgICB9CiAgICAgIH0KCiAgICAgIGZ1bmN0aW9uIG1vdmUxKHBvaW50LCBzY2FsZSwgaikgewogICAgICAgIHZhciByYW5nZSA9IGQzX3NjYWxlUmFuZ2Uoc2NhbGUpLAogICAgICAgICAgICByMCA9IHJhbmdlWzBdLAogICAgICAgICAgICByMSA9IHJhbmdlWzFdLAogICAgICAgICAgICBwb3NpdGlvbiA9IG9yaWdpbltqXSwKICAgICAgICAgICAgZXh0ZW50ID0gaiA/IHlFeHRlbnRbaV0gOiB4RXh0ZW50W2ldLAogICAgICAgICAgICBzaXplID0gZXh0ZW50WzFdIC0gZXh0ZW50WzBdLAogICAgICAgICAgICBtaW4sCiAgICAgICAgICAgIG1heDsKCiAgICAgICAgLy8gV2hlbiBkcmFnZ2luZywgcmVkdWNlIHRoZSByYW5nZSBieSB0aGUgZXh0ZW50IHNpemUgYW5kIHBvc2l0aW9uLgogICAgICAgIGlmIChkcmFnZ2luZykgewogICAgICAgICAgcjAgLT0gcG9zaXRpb247CiAgICAgICAgICByMSAtPSBzaXplICsgcG9zaXRpb247CiAgICAgICAgfQoKICAgICAgICAvLyBDbGFtcCB0aGUgcG9pbnQgKHVubGVzcyBjbGFtcCBzZXQgdG8gZmFsc2UpIHNvIHRoYXQgdGhlIGV4dGVudCBmaXRzIHdpdGhpbiB0aGUgcmFuZ2UgZXh0ZW50LgogICAgICAgIG1pbiA9IChqID8geUNsYW1wIDogeENsYW1wKSA/IE1hdGgubWF4KHIwLCBNYXRoLm1pbihyMSwgcG9pbnRbal0pKSA6IHBvaW50W2pdOwoKICAgICAgICAvLyBDb21wdXRlIHRoZSBuZXcgZXh0ZW50IGJvdW5kcy4KICAgICAgICBpZiAoZHJhZ2dpbmcpIHsKICAgICAgICAgIG1heCA9IChtaW4gKz0gcG9zaXRpb24pICsgc2l6ZTsKICAgICAgICB9IGVsc2UgewoKICAgICAgICAgIC8vIElmIHRoZSBBTFQga2V5IGlzIHByZXNzZWQsIHRoZW4gcHJlc2VydmUgdGhlIGNlbnRlciBvZiB0aGUgZXh0ZW50LgogICAgICAgICAgaWYgKGNlbnRlcikgcG9zaXRpb24gPSBNYXRoLm1heChyMCwgTWF0aC5taW4ocjEsIDIgKiBjZW50ZXJbal0gLSBtaW4pKTsKCiAgICAgICAgICAvLyBDb21wdXRlIHRoZSBtaW4gYW5kIG1heCBvZiB0aGUgcG9zaXRpb24gYW5kIHBvaW50LgogICAgICAgICAgaWYgKHBvc2l0aW9uIDwgbWluKSB7CiAgICAgICAgICAgIG1heCA9IG1pbjsKICAgICAgICAgICAgbWluID0gcG9zaXRpb247CiAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICBtYXggPSBwb3NpdGlvbjsKICAgICAgICAgIH0KICAgICAgICB9CgogICAgICAgIC8vIFVwZGF0ZSB0aGUgc3RvcmVkIGJvdW5kcy4KICAgICAgICBpZiAoZXh0ZW50WzBdICE9IG1pbiB8fCBleHRlbnRbMV0gIT0gbWF4KSB7CiAgICAgICAgICBpZiAoaikgeUV4dGVudERvbWFpbltpXSA9IG51bGw7CiAgICAgICAgICBlbHNlIHhFeHRlbnREb21haW5baV0gPSBudWxsOwogICAgICAgICAgZXh0ZW50WzBdID0gbWluOwogICAgICAgICAgZXh0ZW50WzFdID0gbWF4OwogICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgfQogICAgICB9CgogICAgICBmdW5jdGlvbiBicnVzaGVuZCgpIHsKICAgICAgICBicnVzaG1vdmUoKTsKCiAgICAgICAgLy8gSWYgdGhlIGN1cnJlbnQgZXh0ZW50IGlzIGVtcHR5LCBjbGVhciBldmVyeXRoaW5nLgogICAgICAgIGlmKHggJiYgeEV4dGVudFtpXVswXSA9PSB4RXh0ZW50W2ldWzFdIHx8CiAgICAgICAgICAgeSAmJiB5RXh0ZW50W2ldWzBdID09IHlFeHRlbnRbaV1bMV0pIHsKICAgICAgICAgIGJydXNoLmNsZWFyKCk7CiAgICAgICAgfQoKICAgICAgICAvLyByZXNldCB0aGUgY3Vyc29yIHN0eWxlcwogICAgICAgIGcuc3R5bGUoInBvaW50ZXItZXZlbnRzIiwgImFsbCIpLnNlbGVjdEFsbCgiLnJlc2l6ZSIpLnN0eWxlKCJkaXNwbGF5IiwgZnVuY3Rpb24oZCkgeyByZXR1cm4gYnJ1c2guZW1wdHkoZFsxXSkgPyAibm9uZSIgOiBudWxsOyB9KTsKICAgICAgICBkMy5zZWxlY3QoImJvZHkiKS5zdHlsZSgiY3Vyc29yIiwgbnVsbCk7CgogICAgICAgIHcgLm9uKCJtb3VzZW1vdmUuYnJ1c2giLCBudWxsKQogICAgICAgICAgLm9uKCJtb3VzZXVwLmJydXNoIiwgbnVsbCkKICAgICAgICAgIC5vbigidG91Y2htb3ZlLmJydXNoIiwgbnVsbCkKICAgICAgICAgIC5vbigidG91Y2hlbmQuYnJ1c2giLCBudWxsKQogICAgICAgICAgLm9uKCJrZXlkb3duLmJydXNoIiwgbnVsbCkKICAgICAgICAgIC5vbigia2V5dXAuYnJ1c2giLCBudWxsKTsKCiAgICAgICAgZHJhd0V4dGVudHMoKTsKCiAgICAgICAgZHJhZ1Jlc3RvcmUoKTsKICAgICAgICBldmVudF8oe3R5cGU6ICJicnVzaGVuZCJ9KTsKICAgICAgfQogICAgfQoKICAgIGJydXNoLnggPSBmdW5jdGlvbih6KSB7CiAgICAgIGlmICghYXJndW1lbnRzLmxlbmd0aCkgcmV0dXJuIHg7CiAgICAgIHggPSB6OwogICAgICByZXNpemVzID0gZDNfc3ZnX2JydXNoUmVzaXplc1sheCA8PCAxIHwgIXldOyAvLyBmb3JlIQogICAgICByZXR1cm4gYnJ1c2g7CiAgICB9OwoKICAgIGJydXNoLnkgPSBmdW5jdGlvbih6KSB7CiAgICAgIGlmICghYXJndW1lbnRzLmxlbmd0aCkgcmV0dXJuIHk7CiAgICAgIHkgPSB6OwogICAgICByZXNpemVzID0gZDNfc3ZnX2JydXNoUmVzaXplc1sheCA8PCAxIHwgIXldOyAvLyBmb3JlIQogICAgICByZXR1cm4gYnJ1c2g7CiAgICB9OwoKICAgIGJydXNoLnJlc2l6ZUFkYXB0aW9uID0gZnVuY3Rpb24oeikgewogICAgICBpZiAoIWFyZ3VtZW50cy5sZW5ndGgpIHJldHVybiByZXNpemVBZGFwdGlvbjsKICAgICAgcmVzaXplQWRhcHRpb24gPSB6OwogICAgICByZXR1cm4gYnJ1c2g7CiAgICB9CgogICAgYnJ1c2guZXh0ZW50QWRhcHRpb24gPSBmdW5jdGlvbih6KSB7CiAgICAgIGlmICghYXJndW1lbnRzLmxlbmd0aCkgcmV0dXJuIGV4dGVudEFkYXB0aW9uOwogICAgICBleHRlbnRBZGFwdGlvbiA9IHo7CiAgICAgIHJldHVybiBicnVzaDsKICAgIH0KCiAgICBicnVzaC5jbGFtcCA9IGZ1bmN0aW9uKHopIHsKICAgICAgaWYgKCFhcmd1bWVudHMubGVuZ3RoKSByZXR1cm4geCAmJiB5ID8gW3hDbGFtcCwgeUNsYW1wXSA6IHggPyB4Q2xhbXAgOiB5ID8geUNsYW1wIDogbnVsbDsKICAgICAgaWYgKHggJiYgeSkgeENsYW1wID0gISF6WzBdLCB5Q2xhbXAgPSAhIXpbMV07CiAgICAgIGVsc2UgaWYgKHgpIHhDbGFtcCA9ICEhejsKICAgICAgZWxzZSBpZiAoeSkgeUNsYW1wID0gISF6OwogICAgICByZXR1cm4gYnJ1c2g7CiAgICB9OwoKICAgIGJydXNoLmV4dGVudCA9IGZ1bmN0aW9uKHopIHsKICAgICAgdmFyIHgwLCB4MSwgeTAsIHkxLCB0OwogICAgICB2YXIgeE91dHB1dCwgeU91dHB1dCwgeHlPdXRwdXQgPSBbXTsKCiAgICAgIC8vIEludmVydCB0aGUgcGl4ZWwgZXh0ZW50IHRvIGRhdGEtc3BhY2UuCiAgICAgIGlmICghYXJndW1lbnRzLmxlbmd0aCkgewogICAgICAgIGlmICh4KSB7CiAgICAgICAgICBpZiAoeEV4dGVudERvbWFpblswXSkgewogICAgICAgICAgICB4T3V0cHV0ID0geEV4dGVudERvbWFpbjsKICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgIHhPdXRwdXQgPSB4RXh0ZW50Lm1hcChmdW5jdGlvbiAoZCkgewogICAgICAgICAgICAgIGlmICh4LmludmVydCkgcmV0dXJuIFsgeC5pbnZlcnQoZFswXSksIHguaW52ZXJ0KGRbMV0pIF07CiAgICAgICAgICAgICAgcmV0dXJuIGQ7CiAgICAgICAgICAgIH0pLm1hcChmdW5jdGlvbiAoZCkgewogICAgICAgICAgICAgIGlmIChkWzFdIDwgZFswXSkgcmV0dXJuIFsgZFsxXSwgZFswXSBdOwogICAgICAgICAgICAgIHJldHVybiBkOwogICAgICAgICAgICB9KS5maWx0ZXIoZnVuY3Rpb24gKGQpIHsgcmV0dXJuIGRbMV0gLSBkWzBdICE9IDA7IH0pOwogICAgICAgICAgfQogICAgICAgIH0KICAgICAgICBpZiAoeSkgewogICAgICAgICAgaWYgKHlFeHRlbnREb21haW5bMF0pIHsKICAgICAgICAgICAgeU91dHB1dCA9IHlFeHRlbnREb21haW47CiAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICB5T3V0cHV0ID0geUV4dGVudC5tYXAoZnVuY3Rpb24gKGQpIHsKICAgICAgICAgICAgICBpZih5LmludmVydCkgcmV0dXJuIFsgeS5pbnZlcnQoZFswXSksIHkuaW52ZXJ0KGRbMV0pIF07CiAgICAgICAgICAgICAgcmV0dXJuIGQ7CiAgICAgICAgICAgIH0pLm1hcChmdW5jdGlvbiAoZCkgewogICAgICAgICAgICAgIGlmIChkWzFdIDwgZFswXSkgcmV0dXJuIFsgZFsxXSwgZFswXSBdOwogICAgICAgICAgICAgIHJldHVybiBkOwogICAgICAgICAgICB9KS5maWx0ZXIoZnVuY3Rpb24gKGQpIHsgcmV0dXJuIGRbMV0gLSBkWzBdICE9IDA7IH0pOwogICAgICAgICAgfQogICAgICAgIH0KICAgICAgICBpZih4ICYmIHkpIHsKICAgICAgICAgIHhPdXRwdXQuZm9yRWFjaChmdW5jdGlvbiAoZCwgaSkgewogICAgICAgICAgICB4eU91dHB1dC5wdXNoKFtbZFswXSwgeU91dHB1dFtpXVswXV0sIFtkWzFdLCB5T3V0cHV0W2ldWzFdXV0pOwogICAgICAgICAgfSk7CiAgICAgICAgfQogICAgICAgIHJldHVybiB4ICYmIHkgPyB4eU91dHB1dCA6IHggPyB4T3V0cHV0IDogeSAmJiB5T3V0cHV0OwogICAgICB9CgogICAgICAvLyBTY2FsZSB0aGUgZGF0YS1zcGFjZSBleHRlbnQgdG8gcGl4ZWxzLgogICAgICBpZiAoeCkgewogICAgICAgIHhPdXRwdXQgPSB6OwogICAgICAgIGlmICh5KSB4T3V0cHV0ID0geE91dHB1dC5tYXAoZnVuY3Rpb24gKGQpIHsKICAgICAgICAgIHJldHVybiBbZFswXVswXSwgZFsxXVswXV07CiAgICAgICAgfSk7CiAgICAgICAgeEV4dGVudERvbWFpbiA9IHhPdXRwdXQ7CiAgICAgICAgeE91dHB1dCA9IHhPdXRwdXQubWFwKGZ1bmN0aW9uIChkKSB7CiAgICAgICAgICBpZiAoeC5pbnZlcnQpIHJldHVybiBbeChkWzBdKSwgeChkWzFdKV07CiAgICAgICAgICByZXR1cm4gZDsKICAgICAgICB9KS5tYXAoZnVuY3Rpb24gKGQpIHsKICAgICAgICAgIGlmKGRbMV0gPCBkWzBdKSByZXR1cm4gW2RbMV0sIGRbMF1dOwogICAgICAgICAgcmV0dXJuIGQ7CiAgICAgICAgfSk7CiAgICAgICAgeEV4dGVudCA9IHhPdXRwdXQ7CiAgICAgICAgaWYoIXkpIHlFeHRlbnQgPSB4T3V0cHV0Lm1hcChmdW5jdGlvbigpIHsgcmV0dXJuIFswLDBdOyB9KTsKICAgICAgfQogICAgICBpZiAoeSkgewogICAgICAgIHlPdXRwdXQgPSB6OwogICAgICAgIGlmICh4KSB5T3V0cHV0ID0geU91dHB1dC5tYXAoZnVuY3Rpb24gKGQpIHsKICAgICAgICAgIHJldHVybiBbZFswXVsxXSwgZFsxXVsxXV07CiAgICAgICAgfSk7CiAgICAgICAgeUV4dGVudERvbWFpbiA9IHlPdXRwdXQ7CiAgICAgICAgeU91dHB1dCA9IHlPdXRwdXQubWFwKGZ1bmN0aW9uIChkKSB7CiAgICAgICAgICBpZiAoeS5pbnZlcnQpIHJldHVybiBbeShkWzBdKSwgeShkWzFdKV07CiAgICAgICAgICByZXR1cm4gZDsKICAgICAgICB9KS5tYXAoZnVuY3Rpb24gKGQpIHsKICAgICAgICAgIGlmKGRbMV0gPCBkWzBdKSByZXR1cm4gW2RbMV0sIGRbMF1dOwogICAgICAgICAgcmV0dXJuIGQ7CiAgICAgICAgfSk7CiAgICAgICAgeUV4dGVudCA9IHlPdXRwdXQ7CiAgICAgICAgaWYoIXgpIHhFeHRlbnQgPSB5T3V0cHV0Lm1hcChmdW5jdGlvbiAoKSB7IHJldHVybiBbMCwwXTsgfSk7CiAgICAgIH0KCiAgICAgIC8vIEhhbmRsZSB0aGUgY2FzZSB3aGVyZSB0aGUgZXh0ZW50cyBhcmUgc2V0IHRvIGVtcHR5IGFycmF5cy4KICAgICAgaWYoeEV4dGVudC5sZW5ndGggPT09IDApIHhFeHRlbnQgPSBbWzAsMF1dOwogICAgICBpZih5RXh0ZW50Lmxlbmd0aCA9PT0gMCkgeUV4dGVudCA9IFtbMCwwXV07CgogICAgICByZXR1cm4gYnJ1c2g7CiAgICB9OwoKICAgIGJydXNoLmNsZWFyID0gZnVuY3Rpb24oKSB7CiAgICAgIHhFeHRlbnQgPSBbWzAsIDBdXSwgeUV4dGVudCA9IFtbMCwgMF1dOwogICAgICB4RXh0ZW50RG9tYWluID0geUV4dGVudERvbWFpbiA9IFtdOwogICAgICBkcmF3RXh0ZW50cygpOwogICAgICBpZih4KSByZWRyYXdYKGJydXNoRWxlbWVudCk7CiAgICAgIGlmKHkpIHJlZHJhd1koYnJ1c2hFbGVtZW50KTsKICAgICAgcmV0dXJuIGJydXNoOwogICAgfTsKCiAgICBicnVzaC5lbXB0eSA9IGZ1bmN0aW9uKGkpIHsKICAgIGlmICh0aGlzLmV4dGVudCgpLmxlbmd0aCA9PT0gMCkgewogICAgICByZXR1cm4gdHJ1ZTsKICAgIH0KICAgICAgaWYoeEV4dGVudC5sZW5ndGggPT0gMSAmJiB5RXh0ZW50Lmxlbmd0aCA9PSAxKSBpID0gMDsKICAgICAgaWYoaSAhPT0gdW5kZWZpbmVkKSB7CiAgICAgICAgcmV0dXJuICEheCAmJiB4RXh0ZW50W2ldWzBdID09IHhFeHRlbnRbaV1bMV0KICAgICAgICAgIHx8ICEheSAmJiB5RXh0ZW50W2ldWzBdID09IHlFeHRlbnRbaV1bMV07CiAgICAgIH0gZWxzZSB7CiAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICB9CiAgICB9OwoKICAgIHJldHVybiBkMy5yZWJpbmQoYnJ1c2gsIGV2ZW50LCAib24iKTsKICB9OwoKICB2YXIgZDNfc3ZnX2JydXNoQ3Vyc29yID0gewogICAgbjogIm5zLXJlc2l6ZSIsCiAgICBlOiAiZXctcmVzaXplIiwKICAgIHM6ICJucy1yZXNpemUiLAogICAgdzogImV3LXJlc2l6ZSIsCiAgICBudzogIm53c2UtcmVzaXplIiwKICAgIG5lOiAibmVzdy1yZXNpemUiLAogICAgc2U6ICJud3NlLXJlc2l6ZSIsCiAgICBzdzogIm5lc3ctcmVzaXplIgogIH07CgogIHZhciBkM19zdmdfYnJ1c2hSZXNpemVzID0gWwogICAgWyJuIiwgImUiLCAicyIsICJ3IiwgIm53IiwgIm5lIiwgInNlIiwgInN3Il0sCiAgICBbImUiLCAidyJdLAogICAgWyJuIiwgInMiXSwKICAgIFtdCiAgXTsKfSkoKTsK"></script> <script src="data:application/x-javascript;base64,ZDMucGFyY29vcmRzID0gZnVuY3Rpb24oY29uZmlnKSB7CiAgdmFyIF9fID0gewogICAgZGF0YTogW10sCiAgICBoaWdobGlnaHRlZDogW10sCiAgICBkaW1lbnNpb25zOiB7fSwKICAgIGRpbWVuc2lvblRpdGxlUm90YXRpb246IDAsCiAgICBicnVzaGVkOiBmYWxzZSwKICAgIGJydXNoZWRDb2xvcjogbnVsbCwKICAgIGFscGhhT25CcnVzaGVkOiAwLjAsCiAgICBtb2RlOiAiZGVmYXVsdCIsCiAgICByYXRlOiAyMCwKICAgIHdpZHRoOiA2MDAsCiAgICBoZWlnaHQ6IDMwMCwKICAgIG1hcmdpbjogeyB0b3A6IDI0LCByaWdodDogMCwgYm90dG9tOiAxMiwgbGVmdDogMCB9LAogICAgbnVsbFZhbHVlU2VwYXJhdG9yOiAidW5kZWZpbmVkIiwgLy8gc2V0IHRvICJ0b3AiIG9yICJib3R0b20iCiAgICBudWxsVmFsdWVTZXBhcmF0b3JQYWRkaW5nOiB7IHRvcDogOCwgcmlnaHQ6IDAsIGJvdHRvbTogOCwgbGVmdDogMCB9LAogICAgY29sb3I6ICIjMDY5IiwKICAgIGNvbXBvc2l0ZTogInNvdXJjZS1vdmVyIiwKICAgIGFscGhhOiAwLjcsCiAgICBidW5kbGluZ1N0cmVuZ3RoOiAwLjUsCiAgICBidW5kbGVEaW1lbnNpb246IG51bGwsCiAgICBzbW9vdGhuZXNzOiAwLjAsCiAgICBzaG93Q29udHJvbFBvaW50czogZmFsc2UsCiAgICBoaWRlQXhpcyA6IFtdLAogICAgZmxpcEF4ZXM6IFtdLAogICAgYW5pbWF0aW9uVGltZTogMTEwMCwgLy8gSG93IGxvbmcgaXQgdGFrZXMgdG8gZmxpcCB0aGUgYXhpcyB3aGVuIHlvdSBkb3VibGUgY2xpY2sKICAgIHJvdGF0ZUxhYmVsczogZmFsc2UKICB9OwoKICBleHRlbmQoX18sIGNvbmZpZyk7CgogIGlmIChjb25maWcgJiYgY29uZmlnLmRpbWVuc2lvblRpdGxlcykgewogICAgY29uc29sZS53YXJuKCJkaW1lbnNpb25UaXRsZXMgcGFzc2VkIGluIGNvbmZpZyBpcyBkZXByZWNhdGVkLiBBZGQgdGl0bGUgdG8gZGltZW5zaW9uIG9iamVjdC4iKTsKICAgIGQzLmVudHJpZXMoY29uZmlnLmRpbWVuc2lvblRpdGxlcykuZm9yRWFjaChmdW5jdGlvbihkKSB7CiAgICAgIGlmIChfXy5kaW1lbnNpb25zW2Qua2V5XSkgewogICAgICAgIF9fLmRpbWVuc2lvbnNbZC5rZXldLnRpdGxlID0gX18uZGltZW5zaW9uc1tkLmtleV0udGl0bGUgPyBfXy5kaW1lbnNpb25zW2Qua2V5XS50aXRsZSA6IGQudmFsdWU7CiAgICAgIH0gZWxzZSB7CiAgICAgICAgX18uZGltZW5zaW9uc1tkLmtleV0gPSB7CiAgICAgICAgICB0aXRsZTogZC52YWx1ZQogICAgICAgIH07CiAgICAgIH0KICAgIH0pOwogIH0KdmFyIHBjID0gZnVuY3Rpb24oc2VsZWN0aW9uKSB7CiAgc2VsZWN0aW9uID0gcGMuc2VsZWN0aW9uID0gZDMuc2VsZWN0KHNlbGVjdGlvbik7CgogIF9fLndpZHRoID0gc2VsZWN0aW9uWzBdWzBdLmNsaWVudFdpZHRoOwogIF9fLmhlaWdodCA9IHNlbGVjdGlvblswXVswXS5jbGllbnRIZWlnaHQ7CgogIC8vIGNhbnZhcyBkYXRhIGxheWVycwogIFsibWFya3MiLCAiZm9yZWdyb3VuZCIsICJicnVzaGVkIiwgImhpZ2hsaWdodCJdLmZvckVhY2goZnVuY3Rpb24obGF5ZXIpIHsKICAgIGNhbnZhc1tsYXllcl0gPSBzZWxlY3Rpb24KICAgICAgLmFwcGVuZCgiY2FudmFzIikKICAgICAgLmF0dHIoImNsYXNzIiwgbGF5ZXIpWzBdWzBdOwogICAgY3R4W2xheWVyXSA9IGNhbnZhc1tsYXllcl0uZ2V0Q29udGV4dCgiMmQiKTsKICB9KTsKCiAgLy8gc3ZnIHRpY2sgYW5kIGJydXNoIGxheWVycwogIHBjLnN2ZyA9IHNlbGVjdGlvbgogICAgLmFwcGVuZCgic3ZnIikKICAgICAgLmF0dHIoIndpZHRoIiwgX18ud2lkdGgpCiAgICAgIC5hdHRyKCJoZWlnaHQiLCBfXy5oZWlnaHQpCiAgICAgIC5zdHlsZSgiZm9udCIsICIxNHB4IHNhbnMtc2VyaWYiKQogICAgICAuc3R5bGUoInBvc2l0aW9uIiwgImFic29sdXRlIikKCiAgICAuYXBwZW5kKCJzdmc6ZyIpCiAgICAgIC5hdHRyKCJ0cmFuc2Zvcm0iLCAidHJhbnNsYXRlKCIgKyBfXy5tYXJnaW4ubGVmdCArICIsIiArIF9fLm1hcmdpbi50b3AgKyAiKSIpOwoKICByZXR1cm4gcGM7Cn07CnZhciBldmVudHMgPSBkMy5kaXNwYXRjaC5hcHBseSh0aGlzLFsicmVuZGVyIiwgInJlc2l6ZSIsICJoaWdobGlnaHQiLCAiYnJ1c2giLCAiYnJ1c2hlbmQiLCAiYnJ1c2hzdGFydCIsICJheGVzcmVvcmRlciJdLmNvbmNhdChkMy5rZXlzKF9fKSkpLAogICAgdyA9IGZ1bmN0aW9uKCkgeyByZXR1cm4gX18ud2lkdGggLSBfXy5tYXJnaW4ucmlnaHQgLSBfXy5tYXJnaW4ubGVmdDsgfSwKICAgIGggPSBmdW5jdGlvbigpIHsgcmV0dXJuIF9fLmhlaWdodCAtIF9fLm1hcmdpbi50b3AgLSBfXy5tYXJnaW4uYm90dG9tOyB9LAogICAgZmxhZ3MgPSB7CiAgICAgIGJydXNoYWJsZTogZmFsc2UsCiAgICAgIHJlb3JkZXJhYmxlOiBmYWxzZSwKICAgICAgYXhlczogZmFsc2UsCiAgICAgIGludGVyYWN0aXZlOiBmYWxzZSwKICAgICAgZGVidWc6IGZhbHNlCiAgICB9LAogICAgeHNjYWxlID0gZDMuc2NhbGUub3JkaW5hbCgpLAogICAgZHJhZ2dpbmcgPSB7fSwKICAgIGxpbmUgPSBkMy5zdmcubGluZSgpLAogICAgYXhpcyA9IGQzLnN2Zy5heGlzKCkub3JpZW50KCJsZWZ0IikudGlja3MoNSksCiAgICBnLCAvLyBncm91cHMgZm9yIGF4ZXMsIGJydXNoZXMKICAgIGN0eCA9IHt9LAogICAgY2FudmFzID0ge30sCiAgICBjbHVzdGVyQ2VudHJvaWRzID0gW107CgovLyBzaWRlIGVmZmVjdHMgZm9yIHNldHRlcnMKdmFyIHNpZGVfZWZmZWN0cyA9IGQzLmRpc3BhdGNoLmFwcGx5KHRoaXMsZDMua2V5cyhfXykpCiAgLm9uKCJjb21wb3NpdGUiLCBmdW5jdGlvbihkKSB7CiAgICBjdHguZm9yZWdyb3VuZC5nbG9iYWxDb21wb3NpdGVPcGVyYXRpb24gPSBkLnZhbHVlOwogICAgY3R4LmJydXNoZWQuZ2xvYmFsQ29tcG9zaXRlT3BlcmF0aW9uID0gZC52YWx1ZTsKICB9KQogIC5vbigiYWxwaGEiLCBmdW5jdGlvbihkKSB7CiAgICBjdHguZm9yZWdyb3VuZC5nbG9iYWxBbHBoYSA9IGQudmFsdWU7CiAgICBjdHguYnJ1c2hlZC5nbG9iYWxBbHBoYSA9IGQudmFsdWU7CiAgfSkKICAub24oImJydXNoZWRDb2xvciIsIGZ1bmN0aW9uIChkKSB7CiAgICBjdHguYnJ1c2hlZC5zdHJva2VTdHlsZSA9IGQudmFsdWU7CiAgfSkKICAub24oIndpZHRoIiwgZnVuY3Rpb24oZCkgeyBwYy5yZXNpemUoKTsgfSkKICAub24oImhlaWdodCIsIGZ1bmN0aW9uKGQpIHsgcGMucmVzaXplKCk7IH0pCiAgLm9uKCJtYXJnaW4iLCBmdW5jdGlvbihkKSB7IHBjLnJlc2l6ZSgpOyB9KQogIC5vbigicmF0ZSIsIGZ1bmN0aW9uKGQpIHsKICAgIGJydXNoZWRRdWV1ZS5yYXRlKGQudmFsdWUpOwogICAgZm9yZWdyb3VuZFF1ZXVlLnJhdGUoZC52YWx1ZSk7CiAgfSkKICAub24oImRpbWVuc2lvbnMiLCBmdW5jdGlvbihkKSB7CiAgICBfXy5kaW1lbnNpb25zID0gcGMuYXBwbHlEaW1lbnNpb25EZWZhdWx0cyhkMy5rZXlzKGQudmFsdWUpKTsKICAgIHhzY2FsZS5kb21haW4ocGMuZ2V0T3JkZXJlZERpbWVuc2lvbktleXMoKSk7CiAgICBwYy5zb3J0RGltZW5zaW9ucygpOwogICAgaWYgKGZsYWdzLmludGVyYWN0aXZlKXtwYy5yZW5kZXIoKS51cGRhdGVBeGVzKCk7fQogIH0pCiAgLm9uKCJidW5kbGVEaW1lbnNpb24iLCBmdW5jdGlvbihkKSB7CiAgICAgIGlmICghZDMua2V5cyhfXy5kaW1lbnNpb25zKS5sZW5ndGgpIHBjLmRldGVjdERpbWVuc2lvbnMoKTsKICAgICAgcGMuYXV0b3NjYWxlKCk7CiAgICAgIGlmICh0eXBlb2YgZC52YWx1ZSA9PT0gIm51bWJlciIpIHsKICAgICAgICAgIGlmIChkLnZhbHVlIDwgZDMua2V5cyhfXy5kaW1lbnNpb25zKS5sZW5ndGgpIHsKICAgICAgICAgICAgICBfXy5idW5kbGVEaW1lbnNpb24gPSBfXy5kaW1lbnNpb25zW2QudmFsdWVdOwogICAgICAgICAgfSBlbHNlIGlmIChkLnZhbHVlIDwgX18uaGlkZUF4aXMubGVuZ3RoKSB7CiAgICAgICAgICAgICAgX18uYnVuZGxlRGltZW5zaW9uID0gX18uaGlkZUF4aXNbZC52YWx1ZV07CiAgICAgICAgICB9CiAgICAgIH0gZWxzZSB7CiAgICAgICAgICBfXy5idW5kbGVEaW1lbnNpb24gPSBkLnZhbHVlOwogICAgICB9CgogICAgICBfXy5jbHVzdGVyQ2VudHJvaWRzID0gY29tcHV0ZV9jbHVzdGVyX2NlbnRyb2lkcyhfXy5idW5kbGVEaW1lbnNpb24pOwogICAgaWYgKGZsYWdzLmludGVyYWN0aXZlKXtwYy5yZW5kZXIoKTt9CiAgfSkKICAub24oImhpZGVBeGlzIiwgZnVuY3Rpb24oZCkgewogICAgcGMuZGltZW5zaW9ucyhwYy5hcHBseURpbWVuc2lvbkRlZmF1bHRzKCkpOwogICAgcGMuZGltZW5zaW9ucyh3aXRob3V0KF9fLmRpbWVuc2lvbnMsIGQudmFsdWUpKTsKICB9KQogIC5vbigiZmxpcEF4ZXMiLCBmdW5jdGlvbihkKSB7CiAgICBpZiAoZC52YWx1ZSAmJiBkLnZhbHVlLmxlbmd0aCkgewogICAgICAgIGQudmFsdWUuZm9yRWFjaChmdW5jdGlvbihheGlzKSB7CiAgICAgICAgICAgIGZsaXBBeGlzQW5kVXBkYXRlUENQKGF4aXMpOwogICAgICAgIH0pOwogICAgICAgIHBjLnVwZGF0ZUF4ZXMoMCk7CiAgICB9CiAgfSk7CgovLyBleHBvc2UgdGhlIHN0YXRlIG9mIHRoZSBjaGFydApwYy5zdGF0ZSA9IF9fOwpwYy5mbGFncyA9IGZsYWdzOwoKLy8gY3JlYXRlIGdldHRlci9zZXR0ZXJzCmdldHNldChwYywgX18sIGV2ZW50cyk7CgovLyBleHBvc2UgZXZlbnRzCmQzLnJlYmluZChwYywgZXZlbnRzLCAib24iKTsKCi8vIGdldHRlci9zZXR0ZXIgd2l0aCBldmVudCBmaXJpbmcKZnVuY3Rpb24gZ2V0c2V0KG9iaixzdGF0ZSxldmVudHMpICB7CiAgZDMua2V5cyhzdGF0ZSkuZm9yRWFjaChmdW5jdGlvbihrZXkpIHsKICAgICAgb2JqW2tleV0gPSBmdW5jdGlvbih4KSB7CiAgICAgICAgaWYgKCFhcmd1bWVudHMubGVuZ3RoKSB7CiAgICAgICAgICByZXR1cm4gc3RhdGVba2V5XTsKICAgICAgICB9CiAgICAgICAgaWYgKGtleSA9PT0gJ2RpbWVuc2lvbnMnICYmIE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbCh4KSA9PT0gJ1tvYmplY3QgQXJyYXldJykgewogICAgICAgICAgY29uc29sZS53YXJuKCJwYy5kaW1lbnNpb25zKFtdKSBpcyBkZXByZWNhdGVkLCB1c2UgcGMuZGltZW5zaW9ucyh7fSkiKTsKICAgICAgICAgIHggPSBwYy5hcHBseURpbWVuc2lvbkRlZmF1bHRzKHgpOwogICAgICAgIH0KICAgICAgICB2YXIgb2xkID0gc3RhdGVba2V5XTsKICAgICAgICBzdGF0ZVtrZXldID0geDsKICAgICAgICBzaWRlX2VmZmVjdHNba2V5XS5jYWxsKHBjLHsidmFsdWUiOiB4LCAicHJldmlvdXMiOiBvbGR9KTsKICAgICAgICBldmVudHNba2V5XS5jYWxsKHBjLHsidmFsdWUiOiB4LCAicHJldmlvdXMiOiBvbGR9KTsKICAgICAgICByZXR1cm4gb2JqOwogICAgICB9OwogIH0pOwp9OwoKZnVuY3Rpb24gZXh0ZW5kKHRhcmdldCwgc291cmNlKSB7CiAgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgewogICAgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsKICB9CiAgcmV0dXJuIHRhcmdldDsKfTsKCmZ1bmN0aW9uIHdpdGhvdXQoYXJyLCBpdGVtcykgewogIGl0ZW1zLmZvckVhY2goZnVuY3Rpb24gKGVsKSB7CiAgICBkZWxldGUgYXJyW2VsXTsKICB9KTsKICByZXR1cm4gYXJyOwp9OwovKiogYWRqdXN0cyBhbiBheGlzJyBkZWZhdWx0IHJhbmdlIFtoKCkrMSwgMV0gaWYgYSBOdWxsVmFsdWVTZXBhcmF0b3IgaXMgc2V0ICovCmZ1bmN0aW9uIGdldFJhbmdlKCkgewoJaWYgKF9fLm51bGxWYWx1ZVNlcGFyYXRvcj09ImJvdHRvbSIpIHsKCQlyZXR1cm4gW2goKSsxLV9fLm51bGxWYWx1ZVNlcGFyYXRvclBhZGRpbmcuYm90dG9tLV9fLm51bGxWYWx1ZVNlcGFyYXRvclBhZGRpbmcudG9wLCAxXTsKCX0gZWxzZSBpZiAoX18ubnVsbFZhbHVlU2VwYXJhdG9yPT0idG9wIikgewoJCXJldHVybiBbaCgpKzEsIDErX18ubnVsbFZhbHVlU2VwYXJhdG9yUGFkZGluZy5ib3R0b20rX18ubnVsbFZhbHVlU2VwYXJhdG9yUGFkZGluZy50b3BdOwoJfQoJcmV0dXJuIFtoKCkrMSwgMV07Cn07CgpwYy5hdXRvc2NhbGUgPSBmdW5jdGlvbigpIHsKICAvLyB5c2NhbGUKICB2YXIgZGVmYXVsdFNjYWxlcyA9IHsKICAgICJkYXRlIjogZnVuY3Rpb24oaykgewogICAgICB2YXIgZXh0ZW50ID0gZDMuZXh0ZW50KF9fLmRhdGEsIGZ1bmN0aW9uKGQpIHsKICAgICAgICByZXR1cm4gZFtrXSA/IGRba10uZ2V0VGltZSgpIDogbnVsbDsKICAgICAgfSk7CgogICAgICAvLyBzcGVjaWFsIGNhc2UgaWYgc2luZ2xlIHZhbHVlCiAgICAgIGlmIChleHRlbnRbMF0gPT09IGV4dGVudFsxXSkgewogICAgICAgIHJldHVybiBkMy5zY2FsZS5vcmRpbmFsKCkKICAgICAgICAgIC5kb21haW4oW2V4dGVudFswXV0pCiAgICAgICAgICAucmFuZ2VQb2ludHMoZ2V0UmFuZ2UoKSk7CiAgICAgIH0KCiAgICAgIHJldHVybiBkMy50aW1lLnNjYWxlKCkKICAgICAgICAuZG9tYWluKGV4dGVudCkKICAgICAgICAucmFuZ2UoZ2V0UmFuZ2UoKSk7CiAgICB9LAogICAgIm51bWJlciI6IGZ1bmN0aW9uKGspIHsKICAgICAgdmFyIGV4dGVudCA9IGQzLmV4dGVudChfXy5kYXRhLCBmdW5jdGlvbihkKSB7IHJldHVybiArZFtrXTsgfSk7CgogICAgICAvLyBzcGVjaWFsIGNhc2UgaWYgc2luZ2xlIHZhbHVlCiAgICAgIGlmIChleHRlbnRbMF0gPT09IGV4dGVudFsxXSkgewogICAgICAgIHJldHVybiBkMy5zY2FsZS5vcmRpbmFsKCkKICAgICAgICAgIC5kb21haW4oW2V4dGVudFswXV0pCiAgICAgICAgICAucmFuZ2VQb2ludHMoZ2V0UmFuZ2UoKSk7CiAgICAgIH0KCiAgICAgIHJldHVybiBkMy5zY2FsZS5saW5lYXIoKQogICAgICAgIC5kb21haW4oZXh0ZW50KQogICAgICAgIC5yYW5nZShnZXRSYW5nZSgpKTsKICAgIH0sCiAgICAic3RyaW5nIjogZnVuY3Rpb24oaykgewogICAgICB2YXIgY291bnRzID0ge30sCiAgICAgICAgICBkb21haW4gPSBbXTsKCiAgICAgIC8vIExldCdzIGdldCB0aGUgY291bnQgZm9yIGVhY2ggdmFsdWUgc28gdGhhdCB3ZSBjYW4gc29ydCB0aGUgZG9tYWluIGJhc2VkCiAgICAgIC8vIG9uIHRoZSBudW1iZXIgb2YgaXRlbXMgZm9yIGVhY2ggdmFsdWUuCiAgICAgIF9fLmRhdGEubWFwKGZ1bmN0aW9uKHApIHsKICAgICAgICBpZiAocFtrXSA9PT0gdW5kZWZpbmVkICYmIF9fLm51bGxWYWx1ZVNlcGFyYXRvciE9PSAidW5kZWZpbmVkIil7CiAgICAgICAgICByZXR1cm47IC8vIG51bGwgdmFsdWVzIHdpbGwgYmUgZHJhd24gYmV5b25kIHRoZSBob3Jpem9udGFsIG51bGwgdmFsdWUgc2VwYXJhdG9yIQogICAgICAgIH0KICAgICAgICBpZiAoY291bnRzW3Bba11dID09PSB1bmRlZmluZWQpIHsKICAgICAgICAgIGNvdW50c1twW2tdXSA9IDE7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgIGNvdW50c1twW2tdXSA9IGNvdW50c1twW2tdXSArIDE7CiAgICAgICAgfQogICAgICB9KTsKCiAgICAgIGRvbWFpbiA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKGNvdW50cykuc29ydChmdW5jdGlvbihhLCBiKSB7CiAgICAgICAgcmV0dXJuIGNvdW50c1thXSAtIGNvdW50c1tiXTsKICAgICAgfSk7CgogICAgICByZXR1cm4gZDMuc2NhbGUub3JkaW5hbCgpCiAgICAgICAgLmRvbWFpbihkb21haW4pCiAgICAgICAgLnJhbmdlUG9pbnRzKGdldFJhbmdlKCkpOwogICAgfQogIH07CgogIGQzLmtleXMoX18uZGltZW5zaW9ucykuZm9yRWFjaChmdW5jdGlvbihrKSB7CiAgICBpZiAoIV9fLmRpbWVuc2lvbnNba10ueXNjYWxlKXsKICAgICAgX18uZGltZW5zaW9uc1trXS55c2NhbGUgPSBkZWZhdWx0U2NhbGVzW19fLmRpbWVuc2lvbnNba10udHlwZV0oayk7CiAgICB9CiAgfSk7CgogIC8vIHhzY2FsZQogIHhzY2FsZS5yYW5nZVBvaW50cyhbMCwgdygpXSwgMSk7CgogIC8vIFJldGluYSBkaXNwbGF5LCBldGMuCiAgdmFyIGRldmljZVBpeGVsUmF0aW8gPSB3aW5kb3cuZGV2aWNlUGl4ZWxSYXRpbyB8fCAxOwoKICAvLyBjYW52YXMgc2l6ZXMKICBwYy5zZWxlY3Rpb24uc2VsZWN0QWxsKCJjYW52YXMiKQogICAgICAuc3R5bGUoIm1hcmdpbi10b3AiLCBfXy5tYXJnaW4udG9wICsgInB4IikKICAgICAgLnN0eWxlKCJtYXJnaW4tbGVmdCIsIF9fLm1hcmdpbi5sZWZ0ICsgInB4IikKICAgICAgLnN0eWxlKCJ3aWR0aCIsICh3KCkrMikgKyAicHgiKQogICAgICAuc3R5bGUoImhlaWdodCIsIChoKCkrMikgKyAicHgiKQogICAgICAuYXR0cigid2lkdGgiLCAodygpKzIpICogZGV2aWNlUGl4ZWxSYXRpbykKICAgICAgLmF0dHIoImhlaWdodCIsIChoKCkrMikgKiBkZXZpY2VQaXhlbFJhdGlvKTsKCiAgLy8gZGVmYXVsdCBzdHlsZXMsIG5lZWRzIHRvIGJlIHNldCB3aGVuIGNhbnZhcyB3aWR0aCBjaGFuZ2VzCiAgY3R4LmZvcmVncm91bmQuc3Ryb2tlU3R5bGUgPSBfXy5jb2xvcjsKICBjdHguZm9yZWdyb3VuZC5saW5lV2lkdGggPSAxLjQ7CiAgY3R4LmZvcmVncm91bmQuZ2xvYmFsQ29tcG9zaXRlT3BlcmF0aW9uID0gX18uY29tcG9zaXRlOwogIGN0eC5mb3JlZ3JvdW5kLmdsb2JhbEFscGhhID0gX18uYWxwaGE7CiAgY3R4LmZvcmVncm91bmQuc2NhbGUoZGV2aWNlUGl4ZWxSYXRpbywgZGV2aWNlUGl4ZWxSYXRpbyk7CiAgY3R4LmJydXNoZWQuc3Ryb2tlU3R5bGUgPSBfXy5icnVzaGVkQ29sb3I7CiAgY3R4LmJydXNoZWQubGluZVdpZHRoID0gMS40OwogIGN0eC5icnVzaGVkLmdsb2JhbENvbXBvc2l0ZU9wZXJhdGlvbiA9IF9fLmNvbXBvc2l0ZTsKICBjdHguYnJ1c2hlZC5nbG9iYWxBbHBoYSA9IF9fLmFscGhhOwogIGN0eC5icnVzaGVkLnNjYWxlKGRldmljZVBpeGVsUmF0aW8sIGRldmljZVBpeGVsUmF0aW8pOwogIGN0eC5oaWdobGlnaHQubGluZVdpZHRoID0gMzsKICBjdHguaGlnaGxpZ2h0LnNjYWxlKGRldmljZVBpeGVsUmF0aW8sIGRldmljZVBpeGVsUmF0aW8pOwoKICByZXR1cm4gdGhpczsKfTsKCnBjLnNjYWxlID0gZnVuY3Rpb24oZCwgZG9tYWluKSB7CiAgX18uZGltZW5zaW9uc1tkXS55c2NhbGUuZG9tYWluKGRvbWFpbik7CgogIHJldHVybiB0aGlzOwp9OwoKcGMuZmxpcCA9IGZ1bmN0aW9uKGQpIHsKICAvL19fLmRpbWVuc2lvbnNbZF0ueXNjYWxlLmRvbWFpbigpLnJldmVyc2UoKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gZG9lcyBub3Qgd29yawogIF9fLmRpbWVuc2lvbnNbZF0ueXNjYWxlLmRvbWFpbihfXy5kaW1lbnNpb25zW2RdLnlzY2FsZS5kb21haW4oKS5yZXZlcnNlKCkpOyAvLyB3b3JrcwoKICByZXR1cm4gdGhpczsKfTsKCnBjLmNvbW1vblNjYWxlID0gZnVuY3Rpb24oZ2xvYmFsLCB0eXBlKSB7CiAgdmFyIHQgPSB0eXBlIHx8ICJudW1iZXIiOwogIGlmICh0eXBlb2YgZ2xvYmFsID09PSAndW5kZWZpbmVkJykgewogICAgZ2xvYmFsID0gdHJ1ZTsKICB9CgogIC8vIHRyeSB0byBhdXRvZGV0ZWN0IGRpbWVuc2lvbnMgYW5kIGNyZWF0ZSBzY2FsZXMKICBpZiAoIWQzLmtleXMoX18uZGltZW5zaW9ucykubGVuZ3RoKSB7CiAgICBwYy5kZXRlY3REaW1lbnNpb25zKCkKICB9CiAgcGMuYXV0b3NjYWxlKCk7CgogIC8vIHNjYWxlcyBvZiB0aGUgc2FtZSB0eXBlCiAgdmFyIHNjYWxlcyA9IGQzLmtleXMoX18uZGltZW5zaW9ucykuZmlsdGVyKGZ1bmN0aW9uKHApIHsKICAgIHJldHVybiBfXy5kaW1lbnNpb25zW3BdLnR5cGUgPT0gdDsKICB9KTsKCiAgaWYgKGdsb2JhbCkgewogICAgdmFyIGV4dGVudCA9IGQzLmV4dGVudChzY2FsZXMubWFwKGZ1bmN0aW9uKGQsaSkgewogICAgICByZXR1cm4gX18uZGltZW5zaW9uc1tkXS55c2NhbGUuZG9tYWluKCk7CiAgICB9KS5yZWR1Y2UoZnVuY3Rpb24oYSxiKSB7CiAgICAgIHJldHVybiBhLmNvbmNhdChiKTsKICAgIH0pKTsKCiAgICBzY2FsZXMuZm9yRWFjaChmdW5jdGlvbihkKSB7CiAgICAgIF9fLmRpbWVuc2lvbnNbZF0ueXNjYWxlLmRvbWFpbihleHRlbnQpOwogICAgfSk7CgogIH0gZWxzZSB7CiAgICBzY2FsZXMuZm9yRWFjaChmdW5jdGlvbihkKSB7CiAgICAgIF9fLmRpbWVuc2lvbnNbZF0ueXNjYWxlLmRvbWFpbihkMy5leHRlbnQoX18uZGF0YSwgZnVuY3Rpb24oZCkgeyByZXR1cm4gK2Rba107IH0pKTsKICAgIH0pOwogIH0KCiAgLy8gdXBkYXRlIGNlbnRyb2lkcwogIGlmIChfXy5idW5kbGVEaW1lbnNpb24gIT09IG51bGwpIHsKICAgIHBjLmJ1bmRsZURpbWVuc2lvbihfXy5idW5kbGVEaW1lbnNpb24pOwogIH0KCiAgcmV0dXJuIHRoaXM7Cn07CnBjLmRldGVjdERpbWVuc2lvbnMgPSBmdW5jdGlvbigpIHsKICBwYy5kaW1lbnNpb25zKHBjLmFwcGx5RGltZW5zaW9uRGVmYXVsdHMoKSk7CiAgcmV0dXJuIHRoaXM7Cn07CgpwYy5hcHBseURpbWVuc2lvbkRlZmF1bHRzID0gZnVuY3Rpb24oZGltcykgewogIHZhciB0eXBlcyA9IHBjLmRldGVjdERpbWVuc2lvblR5cGVzKF9fLmRhdGEpOwogIGRpbXMgPSBkaW1zID8gZGltcyA6IGQzLmtleXModHlwZXMpOwogIHZhciBuZXdEaW1zID0ge307CiAgdmFyIGN1cnJJbmRleCA9IDA7CiAgZGltcy5mb3JFYWNoKGZ1bmN0aW9uKGspIHsKICAgIG5ld0RpbXNba10gPSBfXy5kaW1lbnNpb25zW2tdID8gX18uZGltZW5zaW9uc1trXSA6IHt9OwogICAgLy9TZXQgdXAgZGVmYXVsdHMKICAgIG5ld0RpbXNba10ub3JpZW50PSBuZXdEaW1zW2tdLm9yaWVudCA/IG5ld0RpbXNba10ub3JpZW50IDogJ2xlZnQnOwogICAgbmV3RGltc1trXS50aWNrcz0gbmV3RGltc1trXS50aWNrcyAhPSBudWxsID8gbmV3RGltc1trXS50aWNrcyA6IDU7CiAgICBuZXdEaW1zW2tdLmlubmVyVGlja1NpemU9IG5ld0RpbXNba10uaW5uZXJUaWNrU2l6ZSAhPSBudWxsID8gbmV3RGltc1trXS5pbm5lclRpY2tTaXplIDogNjsKICAgIG5ld0RpbXNba10ub3V0ZXJUaWNrU2l6ZT0gbmV3RGltc1trXS5vdXRlclRpY2tTaXplICE9IG51bGwgPyBuZXdEaW1zW2tdLm91dGVyVGlja1NpemUgOiAwOwogICAgbmV3RGltc1trXS50aWNrUGFkZGluZz0gbmV3RGltc1trXS50aWNrUGFkZGluZyAhPSBudWxsID8gbmV3RGltc1trXS50aWNrUGFkZGluZyA6IDM7CiAgICBuZXdEaW1zW2tdLnR5cGU9IG5ld0RpbXNba10udHlwZSA/IG5ld0RpbXNba10udHlwZSA6IHR5cGVzW2tdOwoKICAgIG5ld0RpbXNba10uaW5kZXggPSBuZXdEaW1zW2tdLmluZGV4ICE9IG51bGwgPyBuZXdEaW1zW2tdLmluZGV4IDogY3VyckluZGV4OwogICAgY3VyckluZGV4Kys7CiAgfSk7CiAgcmV0dXJuIG5ld0RpbXM7Cn07CgpwYy5nZXRPcmRlcmVkRGltZW5zaW9uS2V5cyA9IGZ1bmN0aW9uKCl7CiAgcmV0dXJuIGQzLmtleXMoX18uZGltZW5zaW9ucykuc29ydChmdW5jdGlvbih4LCB5KXsKICAgIHJldHVybiBkMy5hc2NlbmRpbmcoX18uZGltZW5zaW9uc1t4XS5pbmRleCwgX18uZGltZW5zaW9uc1t5XS5pbmRleCk7CiAgfSk7Cn07CgovLyBhIGJldHRlciAidHlwZW9mIiBmcm9tIHRoaXMgcG9zdDogaHR0cDovL3N0YWNrb3ZlcmZsb3cuY29tL3F1ZXN0aW9ucy83MzkwNDI2L2JldHRlci13YXktdG8tZ2V0LXR5cGUtb2YtYS1qYXZhc2NyaXB0LXZhcmlhYmxlCnBjLnRvVHlwZSA9IGZ1bmN0aW9uKHYpIHsKICByZXR1cm4gKHt9KS50b1N0cmluZy5jYWxsKHYpLm1hdGNoKC9ccyhbYS16QS1aXSspLylbMV0udG9Mb3dlckNhc2UoKTsKfTsKCi8vIHRyeSB0byBjb2VyY2UgdG8gbnVtYmVyIGJlZm9yZSByZXR1cm5pbmcgdHlwZQpwYy50b1R5cGVDb2VyY2VOdW1iZXJzID0gZnVuY3Rpb24odikgewogIGlmICgocGFyc2VGbG9hdCh2KSA9PSB2KSAmJiAodiAhPSBudWxsKSkgewogICAgcmV0dXJuICJudW1iZXIiOwogIH0KICByZXR1cm4gcGMudG9UeXBlKHYpOwp9OwoKLy8gYXR0ZW1wdCB0byBkZXRlcm1pbmUgdHlwZXMgb2YgZWFjaCBkaW1lbnNpb24gYmFzZWQgb24gZmlyc3Qgcm93IG9mIGRhdGEKcGMuZGV0ZWN0RGltZW5zaW9uVHlwZXMgPSBmdW5jdGlvbihkYXRhKSB7CiAgdmFyIHR5cGVzID0ge307CiAgZDMua2V5cyhkYXRhWzBdKQogICAgLmZvckVhY2goZnVuY3Rpb24oY29sKSB7CiAgICAgIHR5cGVzW2lzTmFOKE51bWJlcihjb2wpKSA/IGNvbCA6IHBhcnNlSW50KGNvbCldID0gcGMudG9UeXBlQ29lcmNlTnVtYmVycyhkYXRhWzBdW2NvbF0pOwogICAgfSk7CiAgcmV0dXJuIHR5cGVzOwp9OwpwYy5yZW5kZXIgPSBmdW5jdGlvbigpIHsKICAvLyB0cnkgdG8gYXV0b2RldGVjdCBkaW1lbnNpb25zIGFuZCBjcmVhdGUgc2NhbGVzCiAgaWYgKCFkMy5rZXlzKF9fLmRpbWVuc2lvbnMpLmxlbmd0aCkgewogICAgcGMuZGV0ZWN0RGltZW5zaW9ucygpCiAgfQogIHBjLmF1dG9zY2FsZSgpOwoKICBwYy5yZW5kZXJbX18ubW9kZV0oKTsKCiAgZXZlbnRzLnJlbmRlci5jYWxsKHRoaXMpOwogIHJldHVybiB0aGlzOwp9OwoKcGMucmVuZGVyQnJ1c2hlZCA9IGZ1bmN0aW9uKCkgewogIGlmICghZDMua2V5cyhfXy5kaW1lbnNpb25zKS5sZW5ndGgpIHBjLmRldGVjdERpbWVuc2lvbnMoKTsKCiAgcGMucmVuZGVyQnJ1c2hlZFtfXy5tb2RlXSgpOwoKICBldmVudHMucmVuZGVyLmNhbGwodGhpcyk7CiAgcmV0dXJuIHRoaXM7Cn07CgpmdW5jdGlvbiBpc0JydXNoZWQoKSB7CiAgaWYgKF9fLmJydXNoZWQgJiYgX18uYnJ1c2hlZC5sZW5ndGggIT09IF9fLmRhdGEubGVuZ3RoKQogICAgcmV0dXJuIHRydWU7CgogIHZhciBvYmplY3QgPSBicnVzaC5jdXJyZW50TW9kZSgpLmJydXNoU3RhdGUoKTsKCiAgZm9yICh2YXIga2V5IGluIG9iamVjdCkgewogICAgaWYgKG9iamVjdC5oYXNPd25Qcm9wZXJ0eShrZXkpKSB7CiAgICAgIHJldHVybiB0cnVlOwogICAgfQogIH0KICByZXR1cm4gZmFsc2U7Cn07CgpwYy5yZW5kZXIuZGVmYXVsdCA9IGZ1bmN0aW9uKCkgewogIHBjLmNsZWFyKCdmb3JlZ3JvdW5kJyk7CiAgcGMuY2xlYXIoJ2hpZ2hsaWdodCcpOwoKICBwYy5yZW5kZXJCcnVzaGVkLmRlZmF1bHQoKTsKCiAgX18uZGF0YS5mb3JFYWNoKHBhdGhfZm9yZWdyb3VuZCk7Cn07Cgp2YXIgZm9yZWdyb3VuZFF1ZXVlID0gZDMucmVuZGVyUXVldWUocGF0aF9mb3JlZ3JvdW5kKQogIC5yYXRlKDUwKQogIC5jbGVhcihmdW5jdGlvbigpIHsKICAgIHBjLmNsZWFyKCdmb3JlZ3JvdW5kJyk7CiAgICBwYy5jbGVhcignaGlnaGxpZ2h0Jyk7CiAgfSk7CgpwYy5yZW5kZXIucXVldWUgPSBmdW5jdGlvbigpIHsKICBwYy5yZW5kZXJCcnVzaGVkLnF1ZXVlKCk7CgogIGZvcmVncm91bmRRdWV1ZShfXy5kYXRhKTsKfTsKCnBjLnJlbmRlckJydXNoZWQuZGVmYXVsdCA9IGZ1bmN0aW9uKCkgewogIHBjLmNsZWFyKCdicnVzaGVkJyk7CgogIGlmIChpc0JydXNoZWQoKSkgewogICAgX18uYnJ1c2hlZC5mb3JFYWNoKHBhdGhfYnJ1c2hlZCk7CiAgfQp9OwoKdmFyIGJydXNoZWRRdWV1ZSA9IGQzLnJlbmRlclF1ZXVlKHBhdGhfYnJ1c2hlZCkKICAucmF0ZSg1MCkKICAuY2xlYXIoZnVuY3Rpb24oKSB7CiAgICBwYy5jbGVhcignYnJ1c2hlZCcpOwogIH0pOwoKcGMucmVuZGVyQnJ1c2hlZC5xdWV1ZSA9IGZ1bmN0aW9uKCkgewogIGlmIChpc0JydXNoZWQoKSkgewogICAgYnJ1c2hlZFF1ZXVlKF9fLmJydXNoZWQpOwogIH0gZWxzZSB7CiAgICBicnVzaGVkUXVldWUoW10pOyAvLyBUaGlzIGlzIG5lZWRlZCB0byBjbGVhciB0aGUgY3VycmVudGx5IGJydXNoZWQgaXRlbXMKICB9Cn07CmZ1bmN0aW9uIGNvbXB1dGVfY2x1c3Rlcl9jZW50cm9pZHMoZCkgewoKCXZhciBjbHVzdGVyQ2VudHJvaWRzID0gZDMubWFwKCk7Cgl2YXIgY2x1c3RlckNvdW50cyA9IGQzLm1hcCgpOwoJLy8gZGV0ZXJtaW5lIGNsdXN0ZXJDb3VudHMKCV9fLmRhdGEuZm9yRWFjaChmdW5jdGlvbihyb3cpIHsKCQl2YXIgc2NhbGVkID0gX18uZGltZW5zaW9uc1tkXS55c2NhbGUocm93W2RdKTsKCQlpZiAoIWNsdXN0ZXJDb3VudHMuaGFzKHNjYWxlZCkpIHsKCQkJY2x1c3RlckNvdW50cy5zZXQoc2NhbGVkLCAwKTsKCQl9CgkJdmFyIGNvdW50ID0gY2x1c3RlckNvdW50cy5nZXQoc2NhbGVkKTsKCQljbHVzdGVyQ291bnRzLnNldChzY2FsZWQsIGNvdW50ICsgMSk7Cgl9KTsKCglfXy5kYXRhLmZvckVhY2goZnVuY3Rpb24ocm93KSB7CgkJZDMua2V5cyhfXy5kaW1lbnNpb25zKS5tYXAoZnVuY3Rpb24ocCwgaSkgewoJCQl2YXIgc2NhbGVkID0gX18uZGltZW5zaW9uc1tkXS55c2NhbGUocm93W2RdKTsKCQkJaWYgKCFjbHVzdGVyQ2VudHJvaWRzLmhhcyhzY2FsZWQpKSB7CgkJCQl2YXIgbWFwID0gZDMubWFwKCk7CgkJCQljbHVzdGVyQ2VudHJvaWRzLnNldChzY2FsZWQsIG1hcCk7CgkJCX0KCQkJaWYgKCFjbHVzdGVyQ2VudHJvaWRzLmdldChzY2FsZWQpLmhhcyhwKSkgewoJCQkJY2x1c3RlckNlbnRyb2lkcy5nZXQoc2NhbGVkKS5zZXQocCwgMCk7CgkJCX0KCQkJdmFyIHZhbHVlID0gY2x1c3RlckNlbnRyb2lkcy5nZXQoc2NhbGVkKS5nZXQocCk7CgkJCXZhbHVlICs9IF9fLmRpbWVuc2lvbnNbcF0ueXNjYWxlKHJvd1twXSkgLyBjbHVzdGVyQ291bnRzLmdldChzY2FsZWQpOwoJCQljbHVzdGVyQ2VudHJvaWRzLmdldChzY2FsZWQpLnNldChwLCB2YWx1ZSk7CgkJfSk7Cgl9KTsKCglyZXR1cm4gY2x1c3RlckNlbnRyb2lkczsKCn0KCmZ1bmN0aW9uIGNvbXB1dGVfY2VudHJvaWRzKHJvdykgewoJdmFyIGNlbnRyb2lkcyA9IFtdOwoKCXZhciBwID0gZDMua2V5cyhfXy5kaW1lbnNpb25zKTsKCXZhciBjb2xzID0gcC5sZW5ndGg7Cgl2YXIgYSA9IDAuNTsJCQkvLyBjZW50ZXIgYmV0d2VlbiBheGVzCglmb3IgKHZhciBpID0gMDsgaSA8IGNvbHM7ICsraSkgewoJCS8vIGNlbnRyb2lkcyBvbiAncmVhbCcgYXhlcwoJCXZhciB4ID0gcG9zaXRpb24ocFtpXSk7CgkJdmFyIHkgPSBfXy5kaW1lbnNpb25zW3BbaV1dLnlzY2FsZShyb3dbcFtpXV0pOwoJCWNlbnRyb2lkcy5wdXNoKCRWKFt4LCB5XSkpOwoKCQkvLyBjZW50cm9pZHMgb24gJ3ZpcnR1YWwnIGF4ZXMKCQlpZiAoaSA8IGNvbHMgLSAxKSB7CgkJCXZhciBjeCA9IHggKyBhICogKHBvc2l0aW9uKHBbaSsxXSkgLSB4KTsKCQkJdmFyIGN5ID0geSArIGEgKiAoX18uZGltZW5zaW9uc1twW2krMV1dLnlzY2FsZShyb3dbcFtpKzFdXSkgLSB5KTsKCQkJaWYgKF9fLmJ1bmRsZURpbWVuc2lvbiAhPT0gbnVsbCkgewoJCQkJdmFyIGxlZnRDZW50cm9pZCA9IF9fLmNsdXN0ZXJDZW50cm9pZHMuZ2V0KF9fLmRpbWVuc2lvbnNbX18uYnVuZGxlRGltZW5zaW9uXS55c2NhbGUocm93W19fLmJ1bmRsZURpbWVuc2lvbl0pKS5nZXQocFtpXSk7CgkJCQl2YXIgcmlnaHRDZW50cm9pZCA9IF9fLmNsdXN0ZXJDZW50cm9pZHMuZ2V0KF9fLmRpbWVuc2lvbnNbX18uYnVuZGxlRGltZW5zaW9uXS55c2NhbGUocm93W19fLmJ1bmRsZURpbWVuc2lvbl0pKS5nZXQocFtpKzFdKTsKCQkJCXZhciBjZW50cm9pZCA9IDAuNSAqIChsZWZ0Q2VudHJvaWQgKyByaWdodENlbnRyb2lkKTsKCQkJCWN5ID0gY2VudHJvaWQgKyAoMSAtIF9fLmJ1bmRsaW5nU3RyZW5ndGgpICogKGN5IC0gY2VudHJvaWQpOwoJCQl9CgkJCWNlbnRyb2lkcy5wdXNoKCRWKFtjeCwgY3ldKSk7CgkJfQoJfQoKCXJldHVybiBjZW50cm9pZHM7Cn0KCmZ1bmN0aW9uIGNvbXB1dGVfY29udHJvbF9wb2ludHMoY2VudHJvaWRzKSB7CgoJdmFyIGNvbHMgPSBjZW50cm9pZHMubGVuZ3RoOwoJdmFyIGEgPSBfXy5zbW9vdGhuZXNzOwoJdmFyIGNwcyA9IFtdOwoKCWNwcy5wdXNoKGNlbnRyb2lkc1swXSk7CgljcHMucHVzaCgkVihbY2VudHJvaWRzWzBdLmUoMSkgKyBhKjIqKGNlbnRyb2lkc1sxXS5lKDEpLWNlbnRyb2lkc1swXS5lKDEpKSwgY2VudHJvaWRzWzBdLmUoMildKSk7Cglmb3IgKHZhciBjb2wgPSAxOyBjb2wgPCBjb2xzIC0gMTsgKytjb2wpIHsKCQl2YXIgbWlkID0gY2VudHJvaWRzW2NvbF07CgkJdmFyIGxlZnQgPSBjZW50cm9pZHNbY29sIC0gMV07CgkJdmFyIHJpZ2h0ID0gY2VudHJvaWRzW2NvbCArIDFdOwoKCQl2YXIgZGlmZiA9IGxlZnQuc3VidHJhY3QocmlnaHQpOwoJCWNwcy5wdXNoKG1pZC5hZGQoZGlmZi54KGEpKSk7CgkJY3BzLnB1c2gobWlkKTsKCQljcHMucHVzaChtaWQuc3VidHJhY3QoZGlmZi54KGEpKSk7Cgl9CgljcHMucHVzaCgkVihbY2VudHJvaWRzW2NvbHMtMV0uZSgxKSArIGEqMiooY2VudHJvaWRzW2NvbHMtMl0uZSgxKS1jZW50cm9pZHNbY29scy0xXS5lKDEpKSwgY2VudHJvaWRzW2NvbHMtMV0uZSgyKV0pKTsKCWNwcy5wdXNoKGNlbnRyb2lkc1tjb2xzIC0gMV0pOwoKCXJldHVybiBjcHM7Cgp9O3BjLnNoYWRvd3MgPSBmdW5jdGlvbigpIHsKCWZsYWdzLnNoYWRvd3MgPSB0cnVlOwoJcGMuYWxwaGFPbkJydXNoZWQoMC4xKTsKCXBjLnJlbmRlcigpOwoJcmV0dXJuIHRoaXM7Cn07CgovLyBkcmF3IGRvdHMgd2l0aCByYWRpdXMgciBvbiB0aGUgYXhpcyBsaW5lIHdoZXJlIGRhdGEgaW50ZXJzZWN0cwpwYy5heGlzRG90cyA9IGZ1bmN0aW9uKHIpIHsKCXZhciByID0gciB8fCAwLjE7Cgl2YXIgY3R4ID0gcGMuY3R4Lm1hcmtzOwoJdmFyIHN0YXJ0QW5nbGUgPSAwOwoJdmFyIGVuZEFuZ2xlID0gMiAqIE1hdGguUEk7CgljdHguZ2xvYmFsQWxwaGEgPSBkMy5taW4oWyAxIC8gTWF0aC5wb3coX18uZGF0YS5sZW5ndGgsIDEgLyAyKSwgMSBdKTsKCV9fLmRhdGEuZm9yRWFjaChmdW5jdGlvbihkKSB7CgkJZDMuZW50cmllcyhfXy5kaW1lbnNpb25zKS5mb3JFYWNoKGZ1bmN0aW9uKHAsIGkpIHsKCQkJY3R4LmJlZ2luUGF0aCgpOwoJCQljdHguYXJjKHBvc2l0aW9uKHApLCBfXy5kaW1lbnNpb25zW3Aua2V5XS55c2NhbGUoZFtwXSksIHIsIHN0YXJ0QW5nbGUsIGVuZEFuZ2xlKTsKCQkJY3R4LnN0cm9rZSgpOwoJCQljdHguZmlsbCgpOwoJCX0pOwoJfSk7CglyZXR1cm4gdGhpczsKfTsKCi8vIGRyYXcgc2luZ2xlIGN1YmljIGJlemllciBjdXJ2ZQpmdW5jdGlvbiBzaW5nbGVfY3VydmUoZCwgY3R4KSB7CgoJdmFyIGNlbnRyb2lkcyA9IGNvbXB1dGVfY2VudHJvaWRzKGQpOwoJdmFyIGNwcyA9IGNvbXB1dGVfY29udHJvbF9wb2ludHMoY2VudHJvaWRzKTsKCgljdHgubW92ZVRvKGNwc1swXS5lKDEpLCBjcHNbMF0uZSgyKSk7Cglmb3IgKHZhciBpID0gMTsgaSA8IGNwcy5sZW5ndGg7IGkgKz0gMykgewoJCWlmIChfXy5zaG93Q29udHJvbFBvaW50cykgewoJCQlmb3IgKHZhciBqID0gMDsgaiA8IDM7IGorKykgewoJCQkJY3R4LmZpbGxSZWN0KGNwc1tpK2pdLmUoMSksIGNwc1tpK2pdLmUoMiksIDIsIDIpOwoJCQl9CgkJfQoJCWN0eC5iZXppZXJDdXJ2ZVRvKGNwc1tpXS5lKDEpLCBjcHNbaV0uZSgyKSwgY3BzW2krMV0uZSgxKSwgY3BzW2krMV0uZSgyKSwgY3BzW2krMl0uZSgxKSwgY3BzW2krMl0uZSgyKSk7Cgl9Cn07CgovLyBkcmF3IHNpbmdsZSBwb2x5bGluZQpmdW5jdGlvbiBjb2xvcl9wYXRoKGQsIGN0eCkgewoJY3R4LmJlZ2luUGF0aCgpOwoJaWYgKChfXy5idW5kbGVEaW1lbnNpb24gIT09IG51bGwgJiYgX18uYnVuZGxpbmdTdHJlbmd0aCA+IDApIHx8IF9fLnNtb290aG5lc3MgPiAwKSB7CgkJc2luZ2xlX2N1cnZlKGQsIGN0eCk7Cgl9IGVsc2UgewoJCXNpbmdsZV9wYXRoKGQsIGN0eCk7Cgl9CgljdHguc3Ryb2tlKCk7Cn07CgovLyBkcmF3IG1hbnkgcG9seWxpbmVzIG9mIHRoZSBzYW1lIGNvbG9yCmZ1bmN0aW9uIHBhdGhzKGRhdGEsIGN0eCkgewoJY3R4LmNsZWFyUmVjdCgtMSwgLTEsIHcoKSArIDIsIGgoKSArIDIpOwoJY3R4LmJlZ2luUGF0aCgpOwoJZGF0YS5mb3JFYWNoKGZ1bmN0aW9uKGQpIHsKCQlpZiAoKF9fLmJ1bmRsZURpbWVuc2lvbiAhPT0gbnVsbCAmJiBfXy5idW5kbGluZ1N0cmVuZ3RoID4gMCkgfHwgX18uc21vb3RobmVzcyA+IDApIHsKCQkJc2luZ2xlX2N1cnZlKGQsIGN0eCk7CgkJfSBlbHNlIHsKCQkJc2luZ2xlX3BhdGgoZCwgY3R4KTsKCQl9Cgl9KTsKCWN0eC5zdHJva2UoKTsKfTsKCi8vIHJldHVybnMgdGhlIHktcG9zaXRpb24ganVzdCBiZXlvbmQgdGhlIHNlcGFyYXRpbmcgbnVsbCB2YWx1ZSBsaW5lCmZ1bmN0aW9uIGdldE51bGxQb3NpdGlvbigpIHsKCWlmIChfXy5udWxsVmFsdWVTZXBhcmF0b3I9PSJib3R0b20iKSB7CgkJcmV0dXJuIGgoKSsxOwoJfSBlbHNlIGlmIChfXy5udWxsVmFsdWVTZXBhcmF0b3I9PSJ0b3AiKSB7CgkJcmV0dXJuIDE7Cgl9IGVsc2UgewoJCWNvbnNvbGUubG9nKCJBIHZhbHVlIGlzIE5VTEwsIGJ1dCBudWxsVmFsdWVTZXBhcmF0b3IgaXMgbm90IHNldDsgc2V0IGl0IHRvICdib3R0b20nIG9yICd0b3AnLiIpOwoJfQoJcmV0dXJuIGgoKSsxOwp9OwoKZnVuY3Rpb24gc2luZ2xlX3BhdGgoZCwgY3R4KSB7CglkMy5lbnRyaWVzKF9fLmRpbWVuc2lvbnMpLmZvckVhY2goZnVuY3Rpb24ocCwgaSkgeyAgLy9wIGlzbid0IHJlYWxseSBwCgkJaWYgKGkgPT0gMCkgewoJCQljdHgubW92ZVRvKHBvc2l0aW9uKHAua2V5KSwgdHlwZW9mIGRbcC5rZXldID09J3VuZGVmaW5lZCcgPyBnZXROdWxsUG9zaXRpb24oKSA6IF9fLmRpbWVuc2lvbnNbcC5rZXldLnlzY2FsZShkW3Aua2V5XSkpOwoJCX0gZWxzZSB7CgkJCWN0eC5saW5lVG8ocG9zaXRpb24ocC5rZXkpLCB0eXBlb2YgZFtwLmtleV0gPT0ndW5kZWZpbmVkJyA/IGdldE51bGxQb3NpdGlvbigpIDogX18uZGltZW5zaW9uc1twLmtleV0ueXNjYWxlKGRbcC5rZXldKSk7CgkJfQoJfSk7Cn07CgpmdW5jdGlvbiBwYXRoX2JydXNoZWQoZCwgaSkgewogIGlmIChfXy5icnVzaGVkQ29sb3IgIT09IG51bGwpIHsKICAgIGN0eC5icnVzaGVkLnN0cm9rZVN0eWxlID0gZDMuZnVuY3RvcihfXy5icnVzaGVkQ29sb3IpKGQsIGkpOwogIH0gZWxzZSB7CiAgICBjdHguYnJ1c2hlZC5zdHJva2VTdHlsZSA9IGQzLmZ1bmN0b3IoX18uY29sb3IpKGQsIGkpOwogIH0KICByZXR1cm4gY29sb3JfcGF0aChkLCBjdHguYnJ1c2hlZCkKfTsKCmZ1bmN0aW9uIHBhdGhfZm9yZWdyb3VuZChkLCBpKSB7CiAgY3R4LmZvcmVncm91bmQuc3Ryb2tlU3R5bGUgPSBkMy5mdW5jdG9yKF9fLmNvbG9yKShkLCBpKTsKCXJldHVybiBjb2xvcl9wYXRoKGQsIGN0eC5mb3JlZ3JvdW5kKTsKfTsKCmZ1bmN0aW9uIHBhdGhfaGlnaGxpZ2h0KGQsIGkpIHsKICBjdHguaGlnaGxpZ2h0LnN0cm9rZVN0eWxlID0gZDMuZnVuY3RvcihfXy5jb2xvcikoZCwgaSk7CglyZXR1cm4gY29sb3JfcGF0aChkLCBjdHguaGlnaGxpZ2h0KTsKfTsKcGMuY2xlYXIgPSBmdW5jdGlvbihsYXllcikgewogIGN0eFtsYXllcl0uY2xlYXJSZWN0KDAsIDAsIHcoKSArIDIsIGgoKSArIDIpOwoKICAvLyBUaGlzIHdpbGwgbWFrZSBzdXJlIHRoYXQgdGhlIGZvcmVncm91bmQgaXRlbXMgYXJlIHRyYW5zcGFyZW50CiAgLy8gd2l0aG91dCB0aGUgbmVlZCBmb3IgY2hhbmdpbmcgdGhlIG9wYWNpdHkgc3R5bGUgb2YgdGhlIGZvcmVncm91bmQgY2FudmFzCiAgLy8gYXMgdGhpcyB3b3VsZCBzdG9wIHRoZSBjc3Mgc3R5bGluZyBmcm9tIHdvcmtpbmcKICBpZihsYXllciA9PT0gImJydXNoZWQiICYmIGlzQnJ1c2hlZCgpKSB7CiAgICBjdHguYnJ1c2hlZC5maWxsU3R5bGUgPSBwYy5zZWxlY3Rpb24uc3R5bGUoImJhY2tncm91bmQtY29sb3IiKTsKICAgIGN0eC5icnVzaGVkLmdsb2JhbEFscGhhID0gMSAtIF9fLmFscGhhT25CcnVzaGVkOwogICAgY3R4LmJydXNoZWQuZmlsbFJlY3QoMCwgMCwgdygpICsgMiwgaCgpICsgMik7CiAgICBjdHguYnJ1c2hlZC5nbG9iYWxBbHBoYSA9IF9fLmFscGhhOwogIH0KICByZXR1cm4gdGhpczsKfTsKZDMucmViaW5kKHBjLCBheGlzLCAidGlja3MiLCAib3JpZW50IiwgInRpY2tWYWx1ZXMiLCAidGlja1N1YmRpdmlkZSIsICJ0aWNrU2l6ZSIsICJ0aWNrUGFkZGluZyIsICJ0aWNrRm9ybWF0Iik7CgpmdW5jdGlvbiBmbGlwQXhpc0FuZFVwZGF0ZVBDUChkaW1lbnNpb24pIHsKICB2YXIgZyA9IHBjLnN2Zy5zZWxlY3RBbGwoIi5kaW1lbnNpb24iKTsKCiAgcGMuZmxpcChkaW1lbnNpb24pOwoKICBkMy5zZWxlY3QodGhpcy5wYXJlbnRFbGVtZW50KQogICAgLnRyYW5zaXRpb24oKQogICAgICAuZHVyYXRpb24oX18uYW5pbWF0aW9uVGltZSkKICAgICAgLmNhbGwoYXhpcy5zY2FsZShfXy5kaW1lbnNpb25zW2RpbWVuc2lvbl0ueXNjYWxlKSk7CgogIHBjLnJlbmRlcigpOwp9CgpmdW5jdGlvbiByb3RhdGVMYWJlbHMoKSB7CiAgaWYgKCFfXy5yb3RhdGVMYWJlbHMpIHJldHVybjsKICAKICB2YXIgZGVsdGEgPSBkMy5ldmVudC5kZWx0YVk7CiAgZGVsdGEgPSBkZWx0YSA8IDAgPyAtNSA6IGRlbHRhOwogIGRlbHRhID0gZGVsdGEgPiAwID8gNSA6IGRlbHRhOwoKICBfXy5kaW1lbnNpb25UaXRsZVJvdGF0aW9uICs9IGRlbHRhOwogIHBjLnN2Zy5zZWxlY3RBbGwoInRleHQubGFiZWwiKQogICAgLmF0dHIoInRyYW5zZm9ybSIsICJ0cmFuc2xhdGUoMCwtNSkgcm90YXRlKCIgKyBfXy5kaW1lbnNpb25UaXRsZVJvdGF0aW9uICsgIikiKTsKICBkMy5ldmVudC5wcmV2ZW50RGVmYXVsdCgpOwp9CgpmdW5jdGlvbiBkaW1lbnNpb25MYWJlbHMoZCkgewogIHJldHVybiBfXy5kaW1lbnNpb25zW2RdLnRpdGxlID8gX18uZGltZW5zaW9uc1tkXS50aXRsZSA6IGQ7ICAvLyBkaW1lbnNpb24gZGlzcGxheSBuYW1lcwp9CgpwYy5jcmVhdGVBeGVzID0gZnVuY3Rpb24oKSB7CiAgaWYgKGcpIHBjLnJlbW92ZUF4ZXMoKTsKCiAgLy8gQWRkIGEgZ3JvdXAgZWxlbWVudCBmb3IgZWFjaCBkaW1lbnNpb24uCiAgZyA9IHBjLnN2Zy5zZWxlY3RBbGwoIi5kaW1lbnNpb24iKQogICAgICAuZGF0YShwYy5nZXRPcmRlcmVkRGltZW5zaW9uS2V5cygpLCBmdW5jdGlvbihkKSB7CiAgICAgICAgcmV0dXJuIGQ7CiAgICAgIH0pCiAgICAuZW50ZXIoKS5hcHBlbmQoInN2ZzpnIikKICAgICAgLmF0dHIoImNsYXNzIiwgImRpbWVuc2lvbiIpCiAgICAgIC5hdHRyKCJ0cmFuc2Zvcm0iLCBmdW5jdGlvbihkKSB7CiAgICAgICAgcmV0dXJuICJ0cmFuc2xhdGUoIiArIHhzY2FsZShkKSArICIpIjsKICAgICAgfSk7CgogIC8vIEFkZCBhbiBheGlzIGFuZCB0aXRsZS4KICBnLmFwcGVuZCgic3ZnOmciKQogICAgICAuYXR0cigiY2xhc3MiLCAiYXhpcyIpCiAgICAgIC5hdHRyKCJ0cmFuc2Zvcm0iLCAidHJhbnNsYXRlKDAsMCkiKQogICAgICAuZWFjaChmdW5jdGlvbihkKSB7CiAgICAgICAgdmFyIGF4aXNFbGVtZW50ID0gZDMuc2VsZWN0KHRoaXMpLmNhbGwoIHBjLmFwcGx5QXhpc0NvbmZpZyhheGlzLCBfXy5kaW1lbnNpb25zW2RdKSApOwoKICAgICAgICBheGlzRWxlbWVudC5zZWxlY3RBbGwoInBhdGgiKQogICAgICAgICAgICAuc3R5bGUoImZpbGwiLCAibm9uZSIpCiAgICAgICAgICAgIC5zdHlsZSgic3Ryb2tlIiwgIiMyMjIiKQogICAgICAgICAgICAuc3R5bGUoInNoYXBlLXJlbmRlcmluZyIsICJjcmlzcEVkZ2VzIik7CgogICAgICAgIGF4aXNFbGVtZW50LnNlbGVjdEFsbCgibGluZSIpCiAgICAgICAgICAgIC5zdHlsZSgiZmlsbCIsICJub25lIikKICAgICAgICAgICAgLnN0eWxlKCJzdHJva2UiLCAiIzIyMiIpCiAgICAgICAgICAgIC5zdHlsZSgic2hhcGUtcmVuZGVyaW5nIiwgImNyaXNwRWRnZXMiKTsKICAgICAgfSkKICAgIC5hcHBlbmQoInN2Zzp0ZXh0IikKICAgICAgLmF0dHIoewogICAgICAgICJ0ZXh0LWFuY2hvciI6ICJtaWRkbGUiLAogICAgICAgICJ5IjogMCwKICAgICAgICAidHJhbnNmb3JtIjogInRyYW5zbGF0ZSgwLC01KSByb3RhdGUoIiArIF9fLmRpbWVuc2lvblRpdGxlUm90YXRpb24gKyAiKSIsCiAgICAgICAgIngiOiAwLAogICAgICAgICJjbGFzcyI6ICJsYWJlbCIKICAgICAgfSkKICAgICAgLnRleHQoZGltZW5zaW9uTGFiZWxzKQogICAgICAub24oImRibGNsaWNrIiwgZmxpcEF4aXNBbmRVcGRhdGVQQ1ApCiAgICAgIC5vbigid2hlZWwiLCByb3RhdGVMYWJlbHMpOwoKICBpZiAoX18ubnVsbFZhbHVlU2VwYXJhdG9yPT0idG9wIikgewogICAgcGMuc3ZnLmFwcGVuZCgibGluZSIpCiAgICAgIC5hdHRyKCJ4MSIsIDApCiAgICAgIC5hdHRyKCJ5MSIsIDErX18ubnVsbFZhbHVlU2VwYXJhdG9yUGFkZGluZy50b3ApCiAgICAgIC5hdHRyKCJ4MiIsIHcoKSkKICAgICAgLmF0dHIoInkyIiwgMStfXy5udWxsVmFsdWVTZXBhcmF0b3JQYWRkaW5nLnRvcCkKICAgICAgLmF0dHIoInN0cm9rZS13aWR0aCIsIDEpCiAgICAgIC5hdHRyKCJzdHJva2UiLCAiIzc3NyIpCiAgICAgIC5hdHRyKCJmaWxsIiwgIm5vbmUiKQogICAgICAuYXR0cigic2hhcGUtcmVuZGVyaW5nIiwgImNyaXNwRWRnZXMiKTsKICB9IGVsc2UgaWYgKF9fLm51bGxWYWx1ZVNlcGFyYXRvcj09ImJvdHRvbSIpIHsKICAgIHBjLnN2Zy5hcHBlbmQoImxpbmUiKQogICAgICAuYXR0cigieDEiLCAwKQogICAgICAuYXR0cigieTEiLCBoKCkrMS1fXy5udWxsVmFsdWVTZXBhcmF0b3JQYWRkaW5nLmJvdHRvbSkKICAgICAgLmF0dHIoIngyIiwgdygpKQogICAgICAuYXR0cigieTIiLCBoKCkrMS1fXy5udWxsVmFsdWVTZXBhcmF0b3JQYWRkaW5nLmJvdHRvbSkKICAgICAgLmF0dHIoInN0cm9rZS13aWR0aCIsIDEpCiAgICAgIC5hdHRyKCJzdHJva2UiLCAiIzc3NyIpCiAgICAgIC5hdHRyKCJmaWxsIiwgIm5vbmUiKQogICAgICAuYXR0cigic2hhcGUtcmVuZGVyaW5nIiwgImNyaXNwRWRnZXMiKTsKICB9CgogIGZsYWdzLmF4ZXM9IHRydWU7CiAgcmV0dXJuIHRoaXM7Cn07CgpwYy5yZW1vdmVBeGVzID0gZnVuY3Rpb24oKSB7CiAgZy5yZW1vdmUoKTsKICBnID0gdW5kZWZpbmVkOwogIHJldHVybiB0aGlzOwp9OwoKcGMudXBkYXRlQXhlcyA9IGZ1bmN0aW9uKGFuaW1hdGlvblRpbWUpIHsKICBpZiAodHlwZW9mIGFuaW1hdGlvblRpbWUgPT09ICd1bmRlZmluZWQnKSB7CiAgICBhbmltYXRpb25UaW1lID0gX18uYW5pbWF0aW9uVGltZTsKICB9CgogIHZhciBnX2RhdGEgPSBwYy5zdmcuc2VsZWN0QWxsKCIuZGltZW5zaW9uIikuZGF0YShwYy5nZXRPcmRlcmVkRGltZW5zaW9uS2V5cygpKTsKCiAgLy8gRW50ZXIKICBnX2RhdGEuZW50ZXIoKS5hcHBlbmQoInN2ZzpnIikKICAgICAgLmF0dHIoImNsYXNzIiwgImRpbWVuc2lvbiIpCiAgICAgIC5hdHRyKCJ0cmFuc2Zvcm0iLCBmdW5jdGlvbihwKSB7IHJldHVybiAidHJhbnNsYXRlKCIgKyBwb3NpdGlvbihwKSArICIpIjsgfSkKICAgICAgLnN0eWxlKCJvcGFjaXR5IiwgMCkKICAgIC5hcHBlbmQoInN2ZzpnIikKICAgICAgLmF0dHIoImNsYXNzIiwgImF4aXMiKQogICAgICAuYXR0cigidHJhbnNmb3JtIiwgInRyYW5zbGF0ZSgwLDApIikKICAgICAgLmVhY2goZnVuY3Rpb24oZCkgewogICAgICAgIHZhciBheGlzRWxlbWVudCA9IGQzLnNlbGVjdCh0aGlzKS5jYWxsKCBwYy5hcHBseUF4aXNDb25maWcoYXhpcywgX18uZGltZW5zaW9uc1tkXSkgKTsKCiAgICAgICAgYXhpc0VsZW1lbnQuc2VsZWN0QWxsKCJwYXRoIikKICAgICAgICAgICAgLnN0eWxlKCJmaWxsIiwgIm5vbmUiKQogICAgICAgICAgICAuc3R5bGUoInN0cm9rZSIsICIjMjIyIikKICAgICAgICAgICAgLnN0eWxlKCJzaGFwZS1yZW5kZXJpbmciLCAiY3Jpc3BFZGdlcyIpOwoKICAgICAgICBheGlzRWxlbWVudC5zZWxlY3RBbGwoImxpbmUiKQogICAgICAgICAgICAuc3R5bGUoImZpbGwiLCAibm9uZSIpCiAgICAgICAgICAgIC5zdHlsZSgic3Ryb2tlIiwgIiMyMjIiKQogICAgICAgICAgICAuc3R5bGUoInNoYXBlLXJlbmRlcmluZyIsICJjcmlzcEVkZ2VzIik7CiAgICAgIH0pCiAgICAuYXBwZW5kKCJzdmc6dGV4dCIpCiAgICAgIC5hdHRyKHsKICAgICAgICAidGV4dC1hbmNob3IiOiAibWlkZGxlIiwKICAgICAgICAieSI6IDAsCiAgICAgICAgInRyYW5zZm9ybSI6ICJ0cmFuc2xhdGUoMCwtNSkgcm90YXRlKCIgKyBfXy5kaW1lbnNpb25UaXRsZVJvdGF0aW9uICsgIikiLAogICAgICAgICJ4IjogMCwKICAgICAgICAiY2xhc3MiOiAibGFiZWwiCiAgICAgIH0pCiAgICAgIC50ZXh0KGRpbWVuc2lvbkxhYmVscykKICAgICAgLm9uKCJkYmxjbGljayIsIGZsaXBBeGlzQW5kVXBkYXRlUENQKQogICAgICAub24oIndoZWVsIiwgcm90YXRlTGFiZWxzKTsKCiAgLy8gVXBkYXRlCiAgZ19kYXRhLmF0dHIoIm9wYWNpdHkiLCAwKTsKICBnX2RhdGEuc2VsZWN0KCIuYXhpcyIpCiAgICAudHJhbnNpdGlvbigpCiAgICAgIC5kdXJhdGlvbihhbmltYXRpb25UaW1lKQogICAgICAuZWFjaChmdW5jdGlvbihkKSB7IGQzLnNlbGVjdCh0aGlzKS5jYWxsKCBwYy5hcHBseUF4aXNDb25maWcoYXhpcywgX18uZGltZW5zaW9uc1tkXSkgKQogICAgICB9KTsKICBnX2RhdGEuc2VsZWN0KCIubGFiZWwiKQogICAgLnRyYW5zaXRpb24oKQogICAgICAuZHVyYXRpb24oYW5pbWF0aW9uVGltZSkKICAgICAgLnRleHQoZGltZW5zaW9uTGFiZWxzKQogICAgICAuYXR0cigidHJhbnNmb3JtIiwgInRyYW5zbGF0ZSgwLC01KSByb3RhdGUoIiArIF9fLmRpbWVuc2lvblRpdGxlUm90YXRpb24gKyAiKSIpOwoKICAvLyBFeGl0CiAgZ19kYXRhLmV4aXQoKS5yZW1vdmUoKTsKCiAgZyA9IHBjLnN2Zy5zZWxlY3RBbGwoIi5kaW1lbnNpb24iKTsKICBnLnRyYW5zaXRpb24oKS5kdXJhdGlvbihhbmltYXRpb25UaW1lKQogICAgLmF0dHIoInRyYW5zZm9ybSIsIGZ1bmN0aW9uKHApIHsgcmV0dXJuICJ0cmFuc2xhdGUoIiArIHBvc2l0aW9uKHApICsgIikiOyB9KQogICAgLnN0eWxlKCJvcGFjaXR5IiwgMSk7CgogIHBjLnN2Zy5zZWxlY3RBbGwoIi5heGlzIikKICAgIC50cmFuc2l0aW9uKCkKICAgICAgLmR1cmF0aW9uKGFuaW1hdGlvblRpbWUpCiAgICAgIC5lYWNoKGZ1bmN0aW9uKGQpIHsgZDMuc2VsZWN0KHRoaXMpLmNhbGwoIHBjLmFwcGx5QXhpc0NvbmZpZyhheGlzLCBfXy5kaW1lbnNpb25zW2RdKSApOwogICAgICB9KTsKCiAgaWYgKGZsYWdzLmJydXNoYWJsZSkgcGMuYnJ1c2hhYmxlKCk7CiAgaWYgKGZsYWdzLnJlb3JkZXJhYmxlKSBwYy5yZW9yZGVyYWJsZSgpOwogIGlmIChwYy5icnVzaE1vZGUoKSAhPT0gIk5vbmUiKSB7CiAgICB2YXIgbW9kZSA9IHBjLmJydXNoTW9kZSgpOwogICAgcGMuYnJ1c2hNb2RlKCJOb25lIik7CiAgICBwYy5icnVzaE1vZGUobW9kZSk7CiAgfQogIHJldHVybiB0aGlzOwp9OwoKcGMuYXBwbHlBeGlzQ29uZmlnID0gZnVuY3Rpb24oYXhpcywgZGltZW5zaW9uKSB7CiAgcmV0dXJuIGF4aXMuc2NhbGUoZGltZW5zaW9uLnlzY2FsZSkKICAgIC5vcmllbnQoZGltZW5zaW9uLm9yaWVudCkKICAgIC50aWNrcyhkaW1lbnNpb24udGlja3MpCiAgICAudGlja1ZhbHVlcyhkaW1lbnNpb24udGlja1ZhbHVlcykKICAgIC5pbm5lclRpY2tTaXplKGRpbWVuc2lvbi5pbm5lclRpY2tTaXplKQogICAgLm91dGVyVGlja1NpemUoZGltZW5zaW9uLm91dGVyVGlja1NpemUpCiAgICAudGlja1BhZGRpbmcoZGltZW5zaW9uLnRpY2tQYWRkaW5nKQogICAgLnRpY2tGb3JtYXQoZGltZW5zaW9uLnRpY2tGb3JtYXQpCn07CgovLyBKYXNvbiBEYXZpZXMsIGh0dHA6Ly9ibC5vY2tzLm9yZy8xMzQxMjgxCnBjLnJlb3JkZXJhYmxlID0gZnVuY3Rpb24oKSB7CiAgaWYgKCFnKSBwYy5jcmVhdGVBeGVzKCk7CgogIGcuc3R5bGUoImN1cnNvciIsICJtb3ZlIikKICAgIC5jYWxsKGQzLmJlaGF2aW9yLmRyYWcoKQogICAgICAub24oImRyYWdzdGFydCIsIGZ1bmN0aW9uKGQpIHsKICAgICAgICBkcmFnZ2luZ1tkXSA9IHRoaXMuX19vcmlnaW5fXyA9IHhzY2FsZShkKTsKICAgICAgfSkKICAgICAgLm9uKCJkcmFnIiwgZnVuY3Rpb24oZCkgewogICAgICAgIGRyYWdnaW5nW2RdID0gTWF0aC5taW4odygpLCBNYXRoLm1heCgwLCB0aGlzLl9fb3JpZ2luX18gKz0gZDMuZXZlbnQuZHgpKTsKICAgICAgICBwYy5zb3J0RGltZW5zaW9ucygpOwogICAgICAgIHhzY2FsZS5kb21haW4ocGMuZ2V0T3JkZXJlZERpbWVuc2lvbktleXMoKSk7CiAgICAgICAgcGMucmVuZGVyKCk7CiAgICAgICAgZy5hdHRyKCJ0cmFuc2Zvcm0iLCBmdW5jdGlvbihkKSB7CiAgICAgICAgICByZXR1cm4gInRyYW5zbGF0ZSgiICsgcG9zaXRpb24oZCkgKyAiKSI7CiAgICAgICAgfSk7CiAgICAgIH0pCiAgICAgIC5vbigiZHJhZ2VuZCIsIGZ1bmN0aW9uKGQpIHsKICAgICAgICAvLyBMZXQncyBzZWUgaWYgdGhlIG9yZGVyIGhhcyBjaGFuZ2VkIGFuZCBzZW5kIG91dCBhbiBldmVudCBpZiBzby4KICAgICAgICB2YXIgaSA9IDAsCiAgICAgICAgICAgIGogPSBfXy5kaW1lbnNpb25zW2RdLmluZGV4LAogICAgICAgICAgICBlbGVtID0gdGhpcywKICAgICAgICAgICAgcGFyZW50ID0gdGhpcy5wYXJlbnRFbGVtZW50OwoKICAgICAgICB3aGlsZSgoZWxlbSA9IGVsZW0ucHJldmlvdXNFbGVtZW50U2libGluZykgIT0gbnVsbCkgKytpOwogICAgICAgIGlmIChpICE9PSBqKSB7CiAgICAgICAgICBldmVudHMuYXhlc3Jlb3JkZXIuY2FsbChwYywgcGMuZ2V0T3JkZXJlZERpbWVuc2lvbktleXMoKSk7CiAgICAgICAgICAvLyBXZSBub3cgYWxzbyB3YW50IHRvIHJlb3JkZXIgdGhlIGFjdHVhbCBkb20gZWxlbWVudHMgdGhhdCByZXByZXNlbnQKICAgICAgICAgIC8vIHRoZSBheGVzLiBUaGF0IGlzLCB0aGUgZy5kaW1lbnNpb24gZWxlbWVudHMuIElmIHdlIGRvbid0IGRvIHRoaXMsCiAgICAgICAgICAvLyB3ZSBnZXQgYSB3ZWlyZCBhbmQgY29uZnVzaW5nIHRyYW5zaXRpb24gd2hlbiB1cGRhdGVBeGVzIGlzIGNhbGxlZC4KICAgICAgICAgIC8vIFRoaXMgaXMgZHVlIHRvIHRoZSBmYWN0IHRoYXQsIGluaXRpYWxseSB0aGUgbnRoIGcuZGltZW5zaW9uIGVsZW1lbnQKICAgICAgICAgIC8vIHJlcHJlc2VudHMgdGhlIG50aCBheGlzLiBIb3dldmVyLCBhZnRlciBhIG1hbnVhbCByZW9yZGVyaW5nLAogICAgICAgICAgLy8gd2l0aG91dCByZW9yZGVyaW5nIHRoZSBkb20gZWxlbWVudHMsIHRoZSBudGggZG9tIGVsZW1lbnRzIG5vIGxvbmdlcgogICAgICAgICAgLy8gbmVjZXNzYXJpbHkgcmVwcmVzZW50cyB0aGUgbnRoIGF4aXMuCiAgICAgICAgICAvLwogICAgICAgICAgLy8gaSBpcyB0aGUgb3JpZ2luYWwgaW5kZXggb2YgdGhlIGRvbSBlbGVtZW50CiAgICAgICAgICAvLyBqIGlzIHRoZSBuZXcgaW5kZXggb2YgdGhlIGRvbSBlbGVtZW50CiAgICAgICAgICBpZiAoaSA+IGopIHsgLy8gRWxlbWVudCBtb3ZlZCBsZWZ0CiAgICAgICAgICAgIHBhcmVudC5pbnNlcnRCZWZvcmUodGhpcywgcGFyZW50LmNoaWxkcmVuW2ogLSAxXSk7CiAgICAgICAgICB9IGVsc2UgeyAgICAgLy8gRWxlbWVudCBtb3ZlZCByaWdodAogICAgICAgICAgICBpZiAoKGogKyAxKSA8IHBhcmVudC5jaGlsZHJlbi5sZW5ndGgpIHsKICAgICAgICAgICAgICBwYXJlbnQuaW5zZXJ0QmVmb3JlKHRoaXMsIHBhcmVudC5jaGlsZHJlbltqICsgMV0pOwogICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgIHBhcmVudC5hcHBlbmRDaGlsZCh0aGlzKTsKICAgICAgICAgICAgfQogICAgICAgICAgfQogICAgICAgIH0KCiAgICAgICAgZGVsZXRlIHRoaXMuX19vcmlnaW5fXzsKICAgICAgICBkZWxldGUgZHJhZ2dpbmdbZF07CiAgICAgICAgZDMuc2VsZWN0KHRoaXMpLnRyYW5zaXRpb24oKS5hdHRyKCJ0cmFuc2Zvcm0iLCAidHJhbnNsYXRlKCIgKyB4c2NhbGUoZCkgKyAiKSIpOwogICAgICAgIHBjLnJlbmRlcigpOwogICAgICB9KSk7CiAgZmxhZ3MucmVvcmRlcmFibGUgPSB0cnVlOwogIHJldHVybiB0aGlzOwp9OwoKLy8gUmVvcmRlciBkaW1lbnNpb25zLCBzdWNoIHRoYXQgdGhlIGhpZ2hlc3QgdmFsdWUgKHZpc3VhbGx5KSBpcyBvbiB0aGUgbGVmdCBhbmQKLy8gdGhlIGxvd2VzdCBvbiB0aGUgcmlnaHQuIFZpc3VhbCB2YWx1ZXMgYXJlIGRldGVybWluZWQgYnkgdGhlIGRhdGEgdmFsdWVzIGluCi8vIHRoZSBnaXZlbiByb3cuCnBjLnJlb3JkZXIgPSBmdW5jdGlvbihyb3dkYXRhKSB7CiAgdmFyIGZpcnN0RGltID0gcGMuZ2V0T3JkZXJlZERpbWVuc2lvbktleXMoKVswXTsKCiAgcGMuc29ydERpbWVuc2lvbnNCeVJvd0RhdGEocm93ZGF0YSk7CiAgLy8gTk9URTogdGhpcyBpcyByZWxhdGl2ZWx5IGNoZWFwIGdpdmVuIHRoYXQ6CiAgLy8gbnVtYmVyIG9mIGRpbWVuc2lvbnMgPCBudW1iZXIgb2YgZGF0YSBpdGVtcwogIC8vIFRodXMgd2UgY2hlY2sgZXF1YWxpdHkgb2Ygb3JkZXIgdG8gcHJldmVudCByZXJlbmRlcmluZyB3aGVuIHRoaXMgaXMgdGhlIGNhc2UuCiAgdmFyIHJlb3JkZXJlZCA9IGZhbHNlOwogIHJlb3JkZXJlZCA9IGZpcnN0RGltICE9PSBwYy5nZXRPcmRlcmVkRGltZW5zaW9uS2V5cygpWzBdOwoKICBpZiAocmVvcmRlcmVkKSB7CiAgICB4c2NhbGUuZG9tYWluKHBjLmdldE9yZGVyZWREaW1lbnNpb25LZXlzKCkpOwogICAgdmFyIGhpZ2hsaWdodGVkID0gX18uaGlnaGxpZ2h0ZWQuc2xpY2UoMCk7CiAgICBwYy51bmhpZ2hsaWdodCgpOwoKICAgIGcudHJhbnNpdGlvbigpCiAgICAgIC5kdXJhdGlvbigxNTAwKQogICAgICAuYXR0cigidHJhbnNmb3JtIiwgZnVuY3Rpb24oZCkgewogICAgICAgIHJldHVybiAidHJhbnNsYXRlKCIgKyB4c2NhbGUoZCkgKyAiKSI7CiAgICAgIH0pOwogICAgcGMucmVuZGVyKCk7CgogICAgLy8gcGMuaGlnaGxpZ2h0KCkgZG9lcyBub3QgY2hlY2sgd2hldGhlciBoaWdobGlnaHRlZCBpcyBsZW5ndGggemVybywgc28gd2UgZG8gdGhhdCBoZXJlLgogICAgaWYgKGhpZ2hsaWdodGVkLmxlbmd0aCAhPT0gMCkgewogICAgICBwYy5oaWdobGlnaHQoaGlnaGxpZ2h0ZWQpOwogICAgfQogIH0KfQoKcGMuc29ydERpbWVuc2lvbnNCeVJvd0RhdGEgPSBmdW5jdGlvbihyb3dkYXRhKSB7CiAgdmFyIGNvcHkgPSBfXy5kaW1lbnNpb25zOwogIHZhciBwb3NpdGlvblNvcnRlZEtleXMgPSBkMy5rZXlzKF9fLmRpbWVuc2lvbnMpLnNvcnQoZnVuY3Rpb24oYSwgYikgewogICAgdmFyIHBpeGVsRGlmZmVyZW5jZSA9IF9fLmRpbWVuc2lvbnNbYV0ueXNjYWxlKHJvd2RhdGFbYV0pIC0gX18uZGltZW5zaW9uc1tiXS55c2NhbGUocm93ZGF0YVtiXSk7CgogICAgLy8gQXJyYXkuc29ydCBpcyBub3QgbmVjZXNzYXJpbHkgc3RhYmxlLCB0aGlzIG1lYW5zIHRoYXQgaWYgcGl4ZWxEaWZmZXJlbmNlIGlzIHplcm8KICAgIC8vIHRoZSBvcmRlcmluZyBvZiBkaW1lbnNpb25zIG1pZ2h0IGNoYW5nZSB1bmV4cGVjdGVkbHkuIFRoaXMgaXMgc29sdmVkIGJ5IHNvcnRpbmcgb24KICAgIC8vIHZhcmlhYmxlIG5hbWUgaW4gdGhhdCBjYXNlLgogICAgaWYgKHBpeGVsRGlmZmVyZW5jZSA9PT0gMCkgewogICAgICByZXR1cm4gYS5sb2NhbGVDb21wYXJlKGIpOwogICAgfSAvLyBlbHNlCiAgICByZXR1cm4gcGl4ZWxEaWZmZXJlbmNlOwogIH0pOwogIF9fLmRpbWVuc2lvbnMgPSB7fTsKICBwb3NpdGlvblNvcnRlZEtleXMuZm9yRWFjaChmdW5jdGlvbihwLCBpKXsKICAgIF9fLmRpbWVuc2lvbnNbcF0gPSBjb3B5W3BdOwogICAgX18uZGltZW5zaW9uc1twXS5pbmRleCA9IGk7CiAgfSk7Cn0KCnBjLnNvcnREaW1lbnNpb25zID0gZnVuY3Rpb24oKSB7CiAgdmFyIGNvcHkgPSBfXy5kaW1lbnNpb25zOwogIHZhciBwb3NpdGlvblNvcnRlZEtleXMgPSBkMy5rZXlzKF9fLmRpbWVuc2lvbnMpLnNvcnQoZnVuY3Rpb24oYSwgYikgewogICAgcmV0dXJuIHBvc2l0aW9uKGEpIC0gcG9zaXRpb24oYik7CiAgfSk7CiAgX18uZGltZW5zaW9ucyA9IHt9OwogIHBvc2l0aW9uU29ydGVkS2V5cy5mb3JFYWNoKGZ1bmN0aW9uKHAsIGkpewogICAgX18uZGltZW5zaW9uc1twXSA9IGNvcHlbcF07CiAgICBfXy5kaW1lbnNpb25zW3BdLmluZGV4ID0gaTsKICB9KQp9OwoKLy8gcGFpcnMgb2YgYWRqYWNlbnQgZGltZW5zaW9ucwpwYy5hZGphY2VudF9wYWlycyA9IGZ1bmN0aW9uKGFycikgewogIHZhciByZXQgPSBbXTsKICBmb3IgKHZhciBpID0gMDsgaSA8IGFyci5sZW5ndGgtMTsgaSsrKSB7CiAgICByZXQucHVzaChbYXJyW2ldLGFycltpKzFdXSk7CiAgfTsKICByZXR1cm4gcmV0Owp9OwoKdmFyIGJydXNoID0gewogIG1vZGVzOiB7CiAgICAiTm9uZSI6IHsKICAgICAgaW5zdGFsbDogZnVuY3Rpb24ocGMpIHt9LCAgICAgICAgICAgIC8vIE5vdGhpbmcgdG8gYmUgZG9uZS4KICAgICAgdW5pbnN0YWxsOiBmdW5jdGlvbihwYykge30sICAgICAgICAgIC8vIE5vdGhpbmcgdG8gYmUgZG9uZS4KICAgICAgc2VsZWN0ZWQ6IGZ1bmN0aW9uKCkgeyByZXR1cm4gW107IH0sIC8vIE5vdGhpbmcgdG8gcmV0dXJuCiAgICAgIGJydXNoU3RhdGU6IGZ1bmN0aW9uKCkgeyByZXR1cm4ge307IH0KICAgIH0KICB9LAogIG1vZGU6ICJOb25lIiwKICBwcmVkaWNhdGU6ICJBTkQiLAogIGN1cnJlbnRNb2RlOiBmdW5jdGlvbigpIHsKICAgIHJldHVybiB0aGlzLm1vZGVzW3RoaXMubW9kZV07CiAgfQp9OwoKLy8gVGhpcyBmdW5jdGlvbiBjYW4gYmUgdXNlZCBmb3IgJ2xpdmUnIHVwZGF0ZXMgb2YgYnJ1c2hlcy4gVGhhdCBpcywgZHVyaW5nIHRoZQovLyBzcGVjaWZpY2F0aW9uIG9mIGEgYnJ1c2gsIHRoaXMgbWV0aG9kIGNhbiBiZSBjYWxsZWQgdG8gdXBkYXRlIHRoZSB2aWV3LgovLwovLyBAcGFyYW0gbmV3U2VsZWN0aW9uIC0gVGhlIG5ldyBzZXQgb2YgZGF0YSBpdGVtcyB0aGF0IGlzIGN1cnJlbnRseSBjb250YWluZWQKLy8gICAgICAgICAgICAgICAgICAgICAgIGJ5IHRoZSBicnVzaGVzCmZ1bmN0aW9uIGJydXNoVXBkYXRlZChuZXdTZWxlY3Rpb24pIHsKICBfXy5icnVzaGVkID0gbmV3U2VsZWN0aW9uOwogIGV2ZW50cy5icnVzaC5jYWxsKHBjLF9fLmJydXNoZWQpOwogIHBjLnJlbmRlckJydXNoZWQoKTsKfQoKZnVuY3Rpb24gYnJ1c2hQcmVkaWNhdGUocHJlZGljYXRlKSB7CiAgaWYgKCFhcmd1bWVudHMubGVuZ3RoKSB7IHJldHVybiBicnVzaC5wcmVkaWNhdGU7IH0KCiAgcHJlZGljYXRlID0gU3RyaW5nKHByZWRpY2F0ZSkudG9VcHBlckNhc2UoKTsKICBpZiAocHJlZGljYXRlICE9PSAiQU5EIiAmJiBwcmVkaWNhdGUgIT09ICJPUiIpIHsKICAgIHRocm93ICJJbnZhbGlkIHByZWRpY2F0ZSAiICsgcHJlZGljYXRlOwogIH0KCiAgYnJ1c2gucHJlZGljYXRlID0gcHJlZGljYXRlOwogIF9fLmJydXNoZWQgPSBicnVzaC5jdXJyZW50TW9kZSgpLnNlbGVjdGVkKCk7CiAgcGMucmVuZGVyQnJ1c2hlZCgpOwogIHJldHVybiBwYzsKfQoKcGMuYnJ1c2hNb2RlcyA9IGZ1bmN0aW9uKCkgewogIHJldHVybiBPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyhicnVzaC5tb2Rlcyk7Cn07CgpwYy5icnVzaE1vZGUgPSBmdW5jdGlvbihtb2RlKSB7CiAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPT09IDApIHsKICAgIHJldHVybiBicnVzaC5tb2RlOwogIH0KCiAgaWYgKHBjLmJydXNoTW9kZXMoKS5pbmRleE9mKG1vZGUpID09PSAtMSkgewogICAgdGhyb3cgInBjLmJydXNobW9kZTogVW5zdXBwb3J0ZWQgYnJ1c2ggbW9kZTogIiArIG1vZGU7CiAgfQoKICAvLyBNYWtlIHN1cmUgdGhhdCB3ZSBkb24ndCB0cmlnZ2VyIHVubmVjZXNzYXJ5IGV2ZW50cyBieSBjaGVja2luZyBpZiB0aGUgbW9kZQogIC8vIGFjdHVhbGx5IGNoYW5nZXMuCiAgaWYgKG1vZGUgIT09IGJydXNoLm1vZGUpIHsKICAgIC8vIFdoZW4gY2hhbmdpbmcgYnJ1c2ggbW9kZXMsIHRoZSBmaXJzdCB0aGluZyB3ZSBuZWVkIHRvIGRvIGlzIGNsZWFyaW5nIGFueQogICAgLy8gYnJ1c2hlcyBmcm9tIHRoZSBjdXJyZW50IG1vZGUsIGlmIGFueS4KICAgIGlmIChicnVzaC5tb2RlICE9PSAiTm9uZSIpIHsKICAgICAgcGMuYnJ1c2hSZXNldCgpOwogICAgfQoKICAgIC8vIE5leHQsIHdlIG5lZWQgdG8gJ3VuaW5zdGFsbCcgdGhlIGN1cnJlbnQgYnJ1c2hNb2RlLgogICAgYnJ1c2gubW9kZXNbYnJ1c2gubW9kZV0udW5pbnN0YWxsKHBjKTsKICAgIC8vIEZpbmFsbHksIHdlIGNhbiBpbnN0YWxsIHRoZSByZXF1ZXN0ZWQgb25lLgogICAgYnJ1c2gubW9kZSA9IG1vZGU7CiAgICBicnVzaC5tb2Rlc1ticnVzaC5tb2RlXS5pbnN0YWxsKCk7CiAgICBpZiAobW9kZSA9PT0gIk5vbmUiKSB7CiAgICAgIGRlbGV0ZSBwYy5icnVzaFByZWRpY2F0ZTsKICAgIH0gZWxzZSB7CiAgICAgIHBjLmJydXNoUHJlZGljYXRlID0gYnJ1c2hQcmVkaWNhdGU7CiAgICB9CiAgfQoKICByZXR1cm4gcGM7Cn07CgovLyBicnVzaCBtb2RlOiAxRC1BeGVzCgooZnVuY3Rpb24oKSB7Cgl2YXIgYnJ1c2hlcyA9IHt9OwoKCWZ1bmN0aW9uIGlzX2JydXNoZWQocCkgewoJCXJldHVybiAhYnJ1c2hlc1twXS5lbXB0eSgpOwoJfQoKICAvLyBkYXRhIHdpdGhpbiBleHRlbnRzCiAgZnVuY3Rpb24gc2VsZWN0ZWQoKSB7CiAgICB2YXIgYWN0aXZlcyA9IGQzLmtleXMoX18uZGltZW5zaW9ucykuZmlsdGVyKGlzX2JydXNoZWQpLAogICAgICAgIGV4dGVudHMgPSBhY3RpdmVzLm1hcChmdW5jdGlvbihwKSB7IHJldHVybiBicnVzaGVzW3BdLmV4dGVudCgpOyB9KTsKCgkJLy8gV2UgZG9uJ3Qgd2FudCB0byByZXR1cm4gdGhlIGZ1bGwgZGF0YSBzZXQgd2hlbiB0aGVyZSBhcmUgbm8gYXhlcyBicnVzaGVkLgoJCS8vIEFjdHVhbGx5LCB3aGVuIHRoZXJlIGFyZSBubyBheGVzIGJydXNoZWQsIGJ5IGRlZmluaXRpb24sIG5vIGl0ZW1zIGFyZQoJCS8vIHNlbGVjdGVkLiBTbywgbGV0J3MgYXZvaWQgdGhlIGZpbHRlcmluZyBhbmQganVzdCByZXR1cm4gZmFsc2UuCgkJLy9pZiAoYWN0aXZlcy5sZW5ndGggPT09IDApIHJldHVybiBmYWxzZTsKCgkJLy8gUmVzb2x2ZXMgYnJva2VuIGV4YW1wbGVzIGZvciBub3cuIFRoZXkgZXhwZWN0IHRvIGdldCB0aGUgZnVsbCBkYXRhc2V0IGJhY2sgZnJvbSBlbXB0eSBicnVzaGVzCgkJaWYgKGFjdGl2ZXMubGVuZ3RoID09PSAwKSByZXR1cm4gX18uZGF0YTsKCgkJLy8gdGVzdCBpZiB3aXRoaW4gcmFuZ2UKCQl2YXIgd2l0aGluID0gewoJCQkiZGF0ZSI6IGZ1bmN0aW9uKGQscCxkaW1lbnNpb24pIHsKCWlmICh0eXBlb2YgX18uZGltZW5zaW9uc1twXS55c2NhbGUucmFuZ2VQb2ludHMgPT09ICJmdW5jdGlvbiIpIHsgLy8gaWYgaXQgaXMgb3JkaW5hbAogICAgICAgICAgcmV0dXJuIGV4dGVudHNbZGltZW5zaW9uXVswXSA8PSBfXy5kaW1lbnNpb25zW3BdLnlzY2FsZShkW3BdKSAmJiBfXy5kaW1lbnNpb25zW3BdLnlzY2FsZShkW3BdKSA8PSBleHRlbnRzW2RpbWVuc2lvbl1bMV0KICAgICAgICB9IGVsc2UgewogICAgICAgICAgcmV0dXJuIGV4dGVudHNbZGltZW5zaW9uXVswXSA8PSBkW3BdICYmIGRbcF0gPD0gZXh0ZW50c1tkaW1lbnNpb25dWzFdCiAgICAgICAgfQogICAgICB9LAogICAgICAibnVtYmVyIjogZnVuY3Rpb24oZCxwLGRpbWVuc2lvbikgewogICAgICAgIGlmICh0eXBlb2YgX18uZGltZW5zaW9uc1twXS55c2NhbGUucmFuZ2VQb2ludHMgPT09ICJmdW5jdGlvbiIpIHsgLy8gaWYgaXQgaXMgb3JkaW5hbAogICAgICAgICAgcmV0dXJuIGV4dGVudHNbZGltZW5zaW9uXVswXSA8PSBfXy5kaW1lbnNpb25zW3BdLnlzY2FsZShkW3BdKSAmJiBfXy5kaW1lbnNpb25zW3BdLnlzY2FsZShkW3BdKSA8PSBleHRlbnRzW2RpbWVuc2lvbl1bMV0KICAgICAgICB9IGVsc2UgewogICAgICAgICAgcmV0dXJuIGV4dGVudHNbZGltZW5zaW9uXVswXSA8PSBkW3BdICYmIGRbcF0gPD0gZXh0ZW50c1tkaW1lbnNpb25dWzFdCiAgICAgICAgfQogICAgICB9LAogICAgICAic3RyaW5nIjogZnVuY3Rpb24oZCxwLGRpbWVuc2lvbikgewogICAgICAgIHJldHVybiBleHRlbnRzW2RpbWVuc2lvbl1bMF0gPD0gX18uZGltZW5zaW9uc1twXS55c2NhbGUoZFtwXSkgJiYgX18uZGltZW5zaW9uc1twXS55c2NhbGUoZFtwXSkgPD0gZXh0ZW50c1tkaW1lbnNpb25dWzFdCiAgICAgIH0KICAgIH07CgogICAgcmV0dXJuIF9fLmRhdGEKICAgICAgLmZpbHRlcihmdW5jdGlvbihkKSB7CiAgICAgICAgc3dpdGNoKGJydXNoLnByZWRpY2F0ZSkgewogICAgICAgIGNhc2UgIkFORCI6CiAgICAgICAgICByZXR1cm4gYWN0aXZlcy5ldmVyeShmdW5jdGlvbihwLCBkaW1lbnNpb24pIHsKICAgICAgICAgICAgcmV0dXJuIHdpdGhpbltfXy5kaW1lbnNpb25zW3BdLnR5cGVdKGQscCxkaW1lbnNpb24pOwogICAgICAgICAgfSk7CiAgICAgICAgY2FzZSAiT1IiOgogICAgICAgICAgcmV0dXJuIGFjdGl2ZXMuc29tZShmdW5jdGlvbihwLCBkaW1lbnNpb24pIHsKICAgICAgICAgICAgcmV0dXJuIHdpdGhpbltfXy5kaW1lbnNpb25zW3BdLnR5cGVdKGQscCxkaW1lbnNpb24pOwogICAgICAgICAgfSk7CiAgICAgICAgZGVmYXVsdDoKICAgICAgICAgIHRocm93ICJVbmtub3duIGJydXNoIHByZWRpY2F0ZSAiICsgX18uYnJ1c2hQcmVkaWNhdGU7CiAgICAgICAgfQogICAgICB9KTsKICB9OwoKICBmdW5jdGlvbiBicnVzaEV4dGVudHMoZXh0ZW50cykgewogICAgaWYodHlwZW9mKGV4dGVudHMpID09PSAndW5kZWZpbmVkJykKCQl7CgkJCXZhciBleHRlbnRzID0ge307CgkJCWQzLmtleXMoX18uZGltZW5zaW9ucykuZm9yRWFjaChmdW5jdGlvbihkKSB7CgkJCQl2YXIgYnJ1c2ggPSBicnVzaGVzW2RdOwoJCQkJaWYgKGJydXNoICE9PSB1bmRlZmluZWQgJiYgIWJydXNoLmVtcHR5KCkpIHsKCQkJCQl2YXIgZXh0ZW50ID0gYnJ1c2guZXh0ZW50KCk7CgkJCQkJZXh0ZW50LnNvcnQoZDMuYXNjZW5kaW5nKTsKCQkJCQlleHRlbnRzW2RdID0gZXh0ZW50OwoJCQkJfQoJCQl9KTsKCQkJcmV0dXJuIGV4dGVudHM7CgkJfQoJCWVsc2UKCQl7CgkJCS8vZmlyc3QgZ2V0IGFsbCB0aGUgYnJ1c2ggc2VsZWN0aW9ucwoJCQl2YXIgYnJ1c2hTZWxlY3Rpb25zID0ge307CgkJCWcuc2VsZWN0QWxsKCcuYnJ1c2gnKQoJCQkJLmVhY2goZnVuY3Rpb24oZCkgewoJCQkJCWJydXNoU2VsZWN0aW9uc1tkXSA9IGQzLnNlbGVjdCh0aGlzKTsKCgkJCX0pOwoKCQkJLy8gbG9vcCBvdmVyIGVhY2ggZGltZW5zaW9uIGFuZCB1cGRhdGUgYXBwcm9wcmlhdGVseSAoaWYgaXQgd2FzIHBhc3NlZCBpbiB0aHJvdWdoIGV4dGVudHMpCgkJCWQzLmtleXMoX18uZGltZW5zaW9ucykuZm9yRWFjaChmdW5jdGlvbihkKSB7CgkJCQlpZiAoZXh0ZW50c1tkXSA9PT0gdW5kZWZpbmVkKXsKCQkJCQlyZXR1cm47CgkJCQl9CgoJCQkJdmFyIGJydXNoID0gYnJ1c2hlc1tkXTsKCQkJCWlmIChicnVzaCAhPT0gdW5kZWZpbmVkKSB7CgkJCQkJLy91cGRhdGUgdGhlIGV4dGVudAoJCQkJCWJydXNoLmV4dGVudChleHRlbnRzW2RdKTsKCgkJCQkJLy9yZWRyYXcgdGhlIGJydXNoCgkJCQkJYnJ1c2hTZWxlY3Rpb25zW2RdCgkJCQkJCS50cmFuc2l0aW9uKCkKCQkJCQkJLmR1cmF0aW9uKDApCgkJCQkJCS5jYWxsKGJydXNoKTsKCgkJCQkJLy9maXJlIHNvbWUgZXZlbnRzCgkJCQkJYnJ1c2guZXZlbnQoYnJ1c2hTZWxlY3Rpb25zW2RdKTsKCQkJCX0KCQkJfSk7CgoJCQkvL3JlZHJhdyB0aGUgY2hhcnQKCQkJcGMucmVuZGVyQnJ1c2hlZCgpOwoKCQkJcmV0dXJuIHBjOwoJCX0KICB9CgogIGZ1bmN0aW9uIGJydXNoRm9yKGF4aXMpIHsKICAgIHZhciBicnVzaCA9IGQzLnN2Zy5icnVzaCgpOwoKICAgIGJydXNoCiAgICAgIC55KF9fLmRpbWVuc2lvbnNbYXhpc10ueXNjYWxlKQogICAgICAub24oImJydXNoc3RhcnQiLCBmdW5jdGlvbigpIHsKCQkJCWlmKGQzLmV2ZW50LnNvdXJjZUV2ZW50ICE9PSBudWxsKSB7CgkJCQkJZXZlbnRzLmJydXNoc3RhcnQuY2FsbChwYywgX18uYnJ1c2hlZCk7CgkJCQkJZDMuZXZlbnQuc291cmNlRXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7CgkJCQl9CgkJCX0pCgkJCS5vbigiYnJ1c2giLCBmdW5jdGlvbigpIHsKCQkJCWJydXNoVXBkYXRlZChzZWxlY3RlZCgpKTsKCQkJfSkKCQkJLm9uKCJicnVzaGVuZCIsIGZ1bmN0aW9uKCkgewoJCQkJZXZlbnRzLmJydXNoZW5kLmNhbGwocGMsIF9fLmJydXNoZWQpOwoJCQl9KTsKCgkJYnJ1c2hlc1theGlzXSA9IGJydXNoOwoJCXJldHVybiBicnVzaDsKCX07CgoJZnVuY3Rpb24gYnJ1c2hSZXNldChkaW1lbnNpb24pIHsKCQlpZiAoZGltZW5zaW9uPT09dW5kZWZpbmVkKSB7CgkJCV9fLmJydXNoZWQgPSBmYWxzZTsKCQkJaWYgKGcpIHsKCQkJCWcuc2VsZWN0QWxsKCcuYnJ1c2gnKQoJCQkJCS5lYWNoKGZ1bmN0aW9uKGQpIHsKCQkJCQkJZDMuc2VsZWN0KHRoaXMpCgkJCQkJCQkudHJhbnNpdGlvbigpCgkJCQkJCQkuZHVyYXRpb24oMCkKCQkJCQkJCS5jYWxsKGJydXNoZXNbZF0uY2xlYXIoKSk7CgkJCQkJfSk7CgkJCQlwYy5yZW5kZXJCcnVzaGVkKCk7CgkJCX0KCQl9CgkJZWxzZSB7CgkJCWlmIChnKSB7CgkJCQlnLnNlbGVjdEFsbCgnLmJydXNoJykKCQkJCQkuZWFjaChmdW5jdGlvbihkKSB7CgkJCQkJCWlmIChkIT1kaW1lbnNpb24pIHJldHVybjsKCQkJCQkJZDMuc2VsZWN0KHRoaXMpCgkJCQkJCQkudHJhbnNpdGlvbigpCgkJCQkJCQkuZHVyYXRpb24oMCkKCQkJCQkJCS5jYWxsKGJydXNoZXNbZF0uY2xlYXIoKSk7CgkJCQkJCWJydXNoZXNbZF0uZXZlbnQoZDMuc2VsZWN0KHRoaXMpKTsKCQkJCQl9KTsKCQkJCXBjLnJlbmRlckJydXNoZWQoKTsKCQkJfQoJCX0KCQlyZXR1cm4gdGhpczsKCX07CgoJZnVuY3Rpb24gaW5zdGFsbCgpIHsKCQlpZiAoIWcpIHBjLmNyZWF0ZUF4ZXMoKTsKCgkJLy8gQWRkIGFuZCBzdG9yZSBhIGJydXNoIGZvciBlYWNoIGF4aXMuCgkJdmFyIGJydXNoID0gZy5hcHBlbmQoInN2ZzpnIikKCQkJLmF0dHIoImNsYXNzIiwgImJydXNoIikKCQkJLmVhY2goZnVuY3Rpb24oZCkgewoJCQkJZDMuc2VsZWN0KHRoaXMpLmNhbGwoYnJ1c2hGb3IoZCkpOwoJCQl9KTsKCgkJYnJ1c2guc2VsZWN0QWxsKCJyZWN0IikKCQkJCS5zdHlsZSgidmlzaWJpbGl0eSIsIG51bGwpCgkJCQkuYXR0cigieCIsIC0xNSkKCQkJCS5hdHRyKCJ3aWR0aCIsIDMwKTsKCgkJYnJ1c2guc2VsZWN0QWxsKCJyZWN0LmJhY2tncm91bmQiKQoJCQkJLnN0eWxlKCJmaWxsIiwgInRyYW5zcGFyZW50Iik7CgoJCWJydXNoLnNlbGVjdEFsbCgicmVjdC5leHRlbnQiKQoJCQkJLnN0eWxlKCJmaWxsIiwgInJnYmEoMjU1LDI1NSwyNTUsMC4yNSkiKQoJCQkJLnN0eWxlKCJzdHJva2UiLCAicmdiYSgwLDAsMCwwLjYpIik7CgoJCWJydXNoLnNlbGVjdEFsbCgiLnJlc2l6ZSByZWN0IikKCQkJCS5zdHlsZSgiZmlsbCIsICJyZ2JhKDAsMCwwLDAuMSkiKTsKCgkJcGMuYnJ1c2hFeHRlbnRzID0gYnJ1c2hFeHRlbnRzOwoJCXBjLmJydXNoUmVzZXQgPSBicnVzaFJlc2V0OwoJCXJldHVybiBwYzsKCX07CgoJYnJ1c2gubW9kZXNbIjFELWF4ZXMiXSA9IHsKCQlpbnN0YWxsOiBpbnN0YWxsLAoJCXVuaW5zdGFsbDogZnVuY3Rpb24oKSB7CgkJCWcuc2VsZWN0QWxsKCIuYnJ1c2giKS5yZW1vdmUoKTsKCQkJYnJ1c2hlcyA9IHt9OwoJCQlkZWxldGUgcGMuYnJ1c2hFeHRlbnRzOwoJCQlkZWxldGUgcGMuYnJ1c2hSZXNldDsKCQl9LAoJCXNlbGVjdGVkOiBzZWxlY3RlZCwKCQlicnVzaFN0YXRlOiBicnVzaEV4dGVudHMKCX0KfSkoKTsKLy8gYnJ1c2ggbW9kZTogMkQtc3RydW1zCi8vIGJsLm9ja3Mub3JnL3N5bnRhZ21hdGljLzU0NDEwMjIKCihmdW5jdGlvbigpIHsKICB2YXIgc3RydW1zID0ge30sCiAgICAgIHN0cnVtUmVjdDsKCiAgZnVuY3Rpb24gZHJhd1N0cnVtKHN0cnVtLCBhY3RpdmVQb2ludCkgewogICAgdmFyIHN2ZyA9IHBjLnNlbGVjdGlvbi5zZWxlY3QoInN2ZyIpLnNlbGVjdCgiZyNzdHJ1bXMiKSwKICAgICAgICBpZCA9IHN0cnVtLmRpbXMuaSwKICAgICAgICBwb2ludHMgPSBbc3RydW0ucDEsIHN0cnVtLnAyXSwKICAgICAgICBsaW5lID0gc3ZnLnNlbGVjdEFsbCgibGluZSNzdHJ1bS0iICsgaWQpLmRhdGEoW3N0cnVtXSksCiAgICAgICAgY2lyY2xlcyA9IHN2Zy5zZWxlY3RBbGwoImNpcmNsZSNzdHJ1bS0iICsgaWQpLmRhdGEocG9pbnRzKSwKICAgICAgICBkcmFnID0gZDMuYmVoYXZpb3IuZHJhZygpOwoKICAgIGxpbmUuZW50ZXIoKQogICAgICAuYXBwZW5kKCJsaW5lIikKICAgICAgLmF0dHIoImlkIiwgInN0cnVtLSIgKyBpZCkKICAgICAgLmF0dHIoImNsYXNzIiwgInN0cnVtIik7CgogICAgbGluZQogICAgICAuYXR0cigieDEiLCBmdW5jdGlvbihkKSB7CiAgICAgICAgcmV0dXJuIGQucDFbMF07IH0pCiAgICAgIC5hdHRyKCJ5MSIsIGZ1bmN0aW9uKGQpIHsKICAgICAgICByZXR1cm4gZC5wMVsxXTsgfSkKICAgICAgLmF0dHIoIngyIiwgZnVuY3Rpb24oZCkgewogICAgICAgIHJldHVybiBkLnAyWzBdOyB9KQogICAgICAuYXR0cigieTIiLCBmdW5jdGlvbihkKSB7CiAgICAgICAgcmV0dXJuIGQucDJbMV07IH0pCiAgICAgIC5hdHRyKCJzdHJva2UiLCAiYmxhY2siKQogICAgICAuYXR0cigic3Ryb2tlLXdpZHRoIiwgMik7CgogICAgZHJhZwogICAgICAub24oImRyYWciLCBmdW5jdGlvbihkLCBpKSB7IAogICAgICAgIHZhciBldiA9IGQzLmV2ZW50OwogICAgICAgIGkgPSBpICsgMTsKICAgICAgICBzdHJ1bVsicCIgKyBpXVswXSA9IE1hdGgubWluKE1hdGgubWF4KHN0cnVtLm1pblggKyAxLCBldi54KSwgc3RydW0ubWF4WCk7CiAgICAgICAgc3RydW1bInAiICsgaV1bMV0gPSBNYXRoLm1pbihNYXRoLm1heChzdHJ1bS5taW5ZLCBldi55KSwgc3RydW0ubWF4WSk7CiAgICAgICAgZHJhd1N0cnVtKHN0cnVtLCBpIC0gMSk7CiAgICAgIH0pCiAgICAgIC5vbigiZHJhZ2VuZCIsIG9uRHJhZ0VuZCgpKTsKCiAgICBjaXJjbGVzLmVudGVyKCkKICAgICAgLmFwcGVuZCgiY2lyY2xlIikKICAgICAgLmF0dHIoImlkIiwgInN0cnVtLSIgKyBpZCkKICAgICAgLmF0dHIoImNsYXNzIiwgInN0cnVtIik7CgogICAgY2lyY2xlcwogICAgICAuYXR0cigiY3giLCBmdW5jdGlvbihkKSB7IHJldHVybiBkWzBdOyB9KQogICAgICAuYXR0cigiY3kiLCBmdW5jdGlvbihkKSB7IHJldHVybiBkWzFdOyB9KQogICAgICAuYXR0cigiciIsIDUpCiAgICAgIC5zdHlsZSgib3BhY2l0eSIsIGZ1bmN0aW9uKGQsIGkpIHsKICAgICAgICByZXR1cm4gKGFjdGl2ZVBvaW50ICE9PSB1bmRlZmluZWQgJiYgaSA9PT0gYWN0aXZlUG9pbnQpID8gMC44IDogMDsKICAgICAgfSkKICAgICAgLm9uKCJtb3VzZW92ZXIiLCBmdW5jdGlvbigpIHsKICAgICAgICBkMy5zZWxlY3QodGhpcykuc3R5bGUoIm9wYWNpdHkiLCAwLjgpOwogICAgICB9KQogICAgICAub24oIm1vdXNlb3V0IiwgZnVuY3Rpb24oKSB7CiAgICAgICAgZDMuc2VsZWN0KHRoaXMpLnN0eWxlKCJvcGFjaXR5IiwgMCk7CiAgICAgIH0pCiAgICAgIC5jYWxsKGRyYWcpOwogIH0KCiAgZnVuY3Rpb24gZGltZW5zaW9uc0ZvclBvaW50KHApIHsKICAgIHZhciBkaW1zID0geyBpOiAtMSwgbGVmdDogdW5kZWZpbmVkLCByaWdodDogdW5kZWZpbmVkIH07CiAgICBkMy5rZXlzKF9fLmRpbWVuc2lvbnMpLnNvbWUoZnVuY3Rpb24oZGltLCBpKSB7CiAgICAgIGlmICh4c2NhbGUoZGltKSA8IHBbMF0pIHsKICAgICAgICB2YXIgbmV4dCA9IGQzLmtleXMoX18uZGltZW5zaW9ucylbcGMuZ2V0T3JkZXJlZERpbWVuc2lvbktleXMoKS5pbmRleE9mKGRpbSkrMV07CiAgICAgICAgZGltcy5pID0gaTsKICAgICAgICBkaW1zLmxlZnQgPSBkaW07CiAgICAgICAgZGltcy5yaWdodCA9IG5leHQ7CiAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICB9CiAgICAgIHJldHVybiB0cnVlOwogICAgfSk7CgogICAgaWYgKGRpbXMubGVmdCA9PT0gdW5kZWZpbmVkKSB7CiAgICAgIC8vIEV2ZW50IG9uIHRoZSBsZWZ0IHNpZGUgb2YgdGhlIGZpcnN0IGF4aXMuCiAgICAgIGRpbXMuaSA9IDA7CiAgICAgIGRpbXMubGVmdCA9IHBjLmdldE9yZGVyZWREaW1lbnNpb25LZXlzKClbMF07CiAgICAgIGRpbXMucmlnaHQgPSBwYy5nZXRPcmRlcmVkRGltZW5zaW9uS2V5cygpWzFdOwogICAgfSBlbHNlIGlmIChkaW1zLnJpZ2h0ID09PSB1bmRlZmluZWQpIHsKICAgICAgLy8gRXZlbnQgb24gdGhlIHJpZ2h0IHNpZGUgb2YgdGhlIGxhc3QgYXhpcwogICAgICBkaW1zLmkgPSBkMy5rZXlzKF9fLmRpbWVuc2lvbnMpLmxlbmd0aCAtIDE7CiAgICAgIGRpbXMucmlnaHQgPSBkaW1zLmxlZnQ7CiAgICAgIGRpbXMubGVmdCA9IHBjLmdldE9yZGVyZWREaW1lbnNpb25LZXlzKClbZDMua2V5cyhfXy5kaW1lbnNpb25zKS5sZW5ndGggLSAyXTsKICAgIH0KCiAgICByZXR1cm4gZGltczsKICB9CgogIGZ1bmN0aW9uIG9uRHJhZ1N0YXJ0KCkgewogICAgLy8gRmlyc3Qgd2UgbmVlZCB0byBkZXRlcm1pbmUgYmV0d2VlbiB3aGljaCB0d28gYXhlcyB0aGUgc3R1cm0gd2FzIHN0YXJ0ZWQuCiAgICAvLyBUaGlzIHdpbGwgZGV0ZXJtaW5lIHRoZSBmcmVlZG9tIG9mIG1vdmVtZW50LCBiZWNhdXNlIGEgc3RydW0gY2FuCiAgICAvLyBsb2dpY2FsbHkgb25seSBoYXBwZW4gYmV0d2VlbiB0d28gYXhlcywgc28gbm8gbW92ZW1lbnQgb3V0c2lkZSB0aGVzZSBheGVzCiAgICAvLyBzaG91bGQgYmUgYWxsb3dlZC4KICAgIHJldHVybiBmdW5jdGlvbigpIHsKICAgICAgdmFyIHAgPSBkMy5tb3VzZShzdHJ1bVJlY3RbMF1bMF0pLAogICAgICAgICAgZGltcywKICAgICAgICAgIHN0cnVtOwoKICAgICAgcFswXSA9IHBbMF0gLSBfXy5tYXJnaW4ubGVmdDsKICAgICAgcFsxXSA9IHBbMV0gLSBfXy5tYXJnaW4udG9wOwoKICAgICAgZGltcyA9IGRpbWVuc2lvbnNGb3JQb2ludChwKSwKICAgICAgc3RydW0gPSB7CiAgICAgICAgcDE6IHAsCiAgICAgICAgZGltczogZGltcywKICAgICAgICBtaW5YOiB4c2NhbGUoZGltcy5sZWZ0KSwKICAgICAgICBtYXhYOiB4c2NhbGUoZGltcy5yaWdodCksCiAgICAgICAgbWluWTogMCwKICAgICAgICBtYXhZOiBoKCkKICAgICAgfTsKCiAgICAgIHN0cnVtc1tkaW1zLmldID0gc3RydW07CiAgICAgIHN0cnVtcy5hY3RpdmUgPSBkaW1zLmk7CgogICAgICAvLyBNYWtlIHN1cmUgdGhhdCB0aGUgcG9pbnQgaXMgd2l0aGluIHRoZSBib3VuZHMKICAgICAgc3RydW0ucDFbMF0gPSBNYXRoLm1pbihNYXRoLm1heChzdHJ1bS5taW5YLCBwWzBdKSwgc3RydW0ubWF4WCk7CiAgICAgIHN0cnVtLnAyID0gc3RydW0ucDEuc2xpY2UoKTsKICAgIH07CiAgfQoKICBmdW5jdGlvbiBvbkRyYWcoKSB7CiAgICByZXR1cm4gZnVuY3Rpb24oKSB7CiAgICAgIHZhciBldiA9IGQzLmV2ZW50LAogICAgICAgICAgc3RydW0gPSBzdHJ1bXNbc3RydW1zLmFjdGl2ZV07CgogICAgICAvLyBNYWtlIHN1cmUgdGhhdCB0aGUgcG9pbnQgaXMgd2l0aGluIHRoZSBib3VuZHMKICAgICAgc3RydW0ucDJbMF0gPSBNYXRoLm1pbihNYXRoLm1heChzdHJ1bS5taW5YICsgMSwgZXYueCAtIF9fLm1hcmdpbi5sZWZ0KSwgc3RydW0ubWF4WCk7CiAgICAgIHN0cnVtLnAyWzFdID0gTWF0aC5taW4oTWF0aC5tYXgoc3RydW0ubWluWSwgZXYueSAtIF9fLm1hcmdpbi50b3ApLCBzdHJ1bS5tYXhZKTsKICAgICAgZHJhd1N0cnVtKHN0cnVtLCAxKTsKICAgIH07CiAgfQoKICBmdW5jdGlvbiBjb250YWlubWVudFRlc3Qoc3RydW0sIHdpZHRoKSB7CiAgICB2YXIgcDEgPSBbc3RydW0ucDFbMF0gLSBzdHJ1bS5taW5YLCBzdHJ1bS5wMVsxXSAtIHN0cnVtLm1pblhdLAogICAgICAgIHAyID0gW3N0cnVtLnAyWzBdIC0gc3RydW0ubWluWCwgc3RydW0ucDJbMV0gLSBzdHJ1bS5taW5YXSwKICAgICAgICBtMSA9IDEgLSB3aWR0aCAvIHAxWzBdLAogICAgICAgIGIxID0gcDFbMV0gKiAoMSAtIG0xKSwKICAgICAgICBtMiA9IDEgLSB3aWR0aCAvIHAyWzBdLAogICAgICAgIGIyID0gcDJbMV0gKiAoMSAtIG0yKTsKCiAgICAvLyB0ZXN0IGlmIHBvaW50IGZhbGxzIGJldHdlZW4gbGluZXMKICAgIHJldHVybiBmdW5jdGlvbihwKSB7CiAgICAgIHZhciB4ID0gcFswXSwKICAgICAgICAgIHkgPSBwWzFdLAogICAgICAgICAgeTEgPSBtMSAqIHggKyBiMSwKICAgICAgICAgIHkyID0gbTIgKiB4ICsgYjI7CgogICAgICBpZiAoeSA+IE1hdGgubWluKHkxLCB5MikgJiYgeSA8IE1hdGgubWF4KHkxLCB5MikpIHsKICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgfQoKICAgICAgcmV0dXJuIGZhbHNlOwogICAgfTsKICB9CgogIGZ1bmN0aW9uIHNlbGVjdGVkKCkgewogICAgdmFyIGlkcyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKHN0cnVtcyksCiAgICAgICAgYnJ1c2hlZCA9IF9fLmRhdGE7CgogICAgLy8gR2V0IHRoZSBpZHMgb2YgdGhlIGN1cnJlbnRseSBhY3RpdmUgc3RydW1zLgogICAgaWRzID0gaWRzLmZpbHRlcihmdW5jdGlvbihkKSB7CiAgICAgIHJldHVybiAhaXNOYU4oZCk7CiAgICB9KTsKCiAgICBmdW5jdGlvbiBjcm9zc2VzU3RydW0oZCwgaWQpIHsKICAgICAgdmFyIHN0cnVtID0gc3RydW1zW2lkXSwKICAgICAgICAgIHRlc3QgPSBjb250YWlubWVudFRlc3Qoc3RydW0sIHN0cnVtcy53aWR0aChpZCkpLAogICAgICAgICAgZDEgPSBzdHJ1bS5kaW1zLmxlZnQsCiAgICAgICAgICBkMiA9IHN0cnVtLmRpbXMucmlnaHQsCiAgICAgICAgICB5MSA9IF9fLmRpbWVuc2lvbnNbZDFdLnlzY2FsZSwKICAgICAgICAgIHkyID0gX18uZGltZW5zaW9uc1tkMl0ueXNjYWxlLAogICAgICAgICAgcG9pbnQgPSBbeTEoZFtkMV0pIC0gc3RydW0ubWluWCwgeTIoZFtkMl0pIC0gc3RydW0ubWluWF07CiAgICAgIHJldHVybiB0ZXN0KHBvaW50KTsKICAgIH0KCiAgICBpZiAoaWRzLmxlbmd0aCA9PT0gMCkgeyByZXR1cm4gYnJ1c2hlZDsgfQoKICAgIHJldHVybiBicnVzaGVkLmZpbHRlcihmdW5jdGlvbihkKSB7CiAgICAgIHN3aXRjaChicnVzaC5wcmVkaWNhdGUpIHsKICAgICAgY2FzZSAiQU5EIjoKICAgICAgICByZXR1cm4gaWRzLmV2ZXJ5KGZ1bmN0aW9uKGlkKSB7IHJldHVybiBjcm9zc2VzU3RydW0oZCwgaWQpOyB9KTsKICAgICAgY2FzZSAiT1IiOgogICAgICAgIHJldHVybiBpZHMuc29tZShmdW5jdGlvbihpZCkgeyByZXR1cm4gY3Jvc3Nlc1N0cnVtKGQsIGlkKTsgfSk7CiAgICAgIGRlZmF1bHQ6CiAgICAgICAgdGhyb3cgIlVua25vd24gYnJ1c2ggcHJlZGljYXRlICIgKyBfXy5icnVzaFByZWRpY2F0ZTsKICAgICAgfQogICAgfSk7CiAgfQoKICBmdW5jdGlvbiByZW1vdmVTdHJ1bSgpIHsKICAgIHZhciBzdHJ1bSA9IHN0cnVtc1tzdHJ1bXMuYWN0aXZlXSwKICAgICAgICBzdmcgPSBwYy5zZWxlY3Rpb24uc2VsZWN0KCJzdmciKS5zZWxlY3QoImcjc3RydW1zIik7CgogICAgZGVsZXRlIHN0cnVtc1tzdHJ1bXMuYWN0aXZlXTsKICAgIHN0cnVtcy5hY3RpdmUgPSB1bmRlZmluZWQ7CiAgICBzdmcuc2VsZWN0QWxsKCJsaW5lI3N0cnVtLSIgKyBzdHJ1bS5kaW1zLmkpLnJlbW92ZSgpOwogICAgc3ZnLnNlbGVjdEFsbCgiY2lyY2xlI3N0cnVtLSIgKyBzdHJ1bS5kaW1zLmkpLnJlbW92ZSgpOwogIH0KCiAgZnVuY3Rpb24gb25EcmFnRW5kKCkgewogICAgcmV0dXJuIGZ1bmN0aW9uKCkgewogICAgICB2YXIgYnJ1c2hlZCA9IF9fLmRhdGEsCiAgICAgICAgICBzdHJ1bSA9IHN0cnVtc1tzdHJ1bXMuYWN0aXZlXTsKCiAgICAgIC8vIE9rYXksIHNvbWV3aGF0IHVuZXhwZWN0ZWQsIGJ1dCBub3QgdG90YWxseSB1bnN1cnByaXNpbmcsIGEgbW91c2NsaWNrIGlzCiAgICAgIC8vIGNvbnNpZGVyZWQgYSBkcmFnIHdpdGhvdXQgbW92ZS4gU28gd2UgaGF2ZSB0byBkZWFsIHdpdGggdGhhdCBjYXNlCiAgICAgIGlmIChzdHJ1bSAmJiBzdHJ1bS5wMVswXSA9PT0gc3RydW0ucDJbMF0gJiYgc3RydW0ucDFbMV0gPT09IHN0cnVtLnAyWzFdKSB7CiAgICAgICAgcmVtb3ZlU3RydW0oc3RydW1zKTsKICAgICAgfQoKICAgICAgYnJ1c2hlZCA9IHNlbGVjdGVkKHN0cnVtcyk7CiAgICAgIHN0cnVtcy5hY3RpdmUgPSB1bmRlZmluZWQ7CiAgICAgIF9fLmJydXNoZWQgPSBicnVzaGVkOwogICAgICBwYy5yZW5kZXJCcnVzaGVkKCk7CiAgICAgIGV2ZW50cy5icnVzaGVuZC5jYWxsKHBjLCBfXy5icnVzaGVkKTsKICAgIH07CiAgfQoKICBmdW5jdGlvbiBicnVzaFJlc2V0KHN0cnVtcykgewogICAgcmV0dXJuIGZ1bmN0aW9uKCkgewogICAgICB2YXIgaWRzID0gT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMoc3RydW1zKS5maWx0ZXIoZnVuY3Rpb24oZCkgewogICAgICAgIHJldHVybiAhaXNOYU4oZCk7CiAgICAgIH0pOwoKICAgICAgaWRzLmZvckVhY2goZnVuY3Rpb24oZCkgewogICAgICAgIHN0cnVtcy5hY3RpdmUgPSBkOwogICAgICAgIHJlbW92ZVN0cnVtKHN0cnVtcyk7CiAgICAgIH0pOwogICAgICBvbkRyYWdFbmQoc3RydW1zKSgpOwogICAgfTsKICB9CgogIGZ1bmN0aW9uIGluc3RhbGwoKSB7CiAgICB2YXIgZHJhZyA9IGQzLmJlaGF2aW9yLmRyYWcoKTsKCiAgICAvLyBNYXAgb2YgY3VycmVudCBzdHJ1bXMuIFN0cnVtcyBhcmUgc3RvcmVkIHBlciBzZWdtZW50IG9mIHRoZSBQQy4gQSBzZWdtZW50LAogICAgLy8gYmVpbmcgdGhlIGFyZWEgYmV0d2VlbiB0d28gYXhlcy4gVGhlIGxlZnQgbW9zdCBhcmVhIGlzIGluZGV4ZWQgYXQgMC4KICAgIHN0cnVtcy5hY3RpdmUgPSB1bmRlZmluZWQ7CiAgICAvLyBSZXR1cm5zIHRoZSB3aWR0aCBvZiB0aGUgUEMgc2VnbWVudCB3aGVyZSBjdXJyZW50bHkgYSBzdHJ1bSBpcyBiZWluZwogICAgLy8gcGxhY2VkLiBOT1RFOiBldmVuIHRob3VnaCB0aGV5IGFyZSBldmVubHkgc3BhY2VkIGluIG91ciBjdXJyZW50CiAgICAvLyBpbXBsZW1lbnRhdGlvbiwgd2Uga2VlcCBmb3Igd2hlbiBub24tZXZlbiBzcGFjZWQgc2VnbWVudHMgYXJlIHN1cHBvcnRlZCBhcwogICAgLy8gd2VsbC4KICAgIHN0cnVtcy53aWR0aCA9IGZ1bmN0aW9uKGlkKSB7CiAgICAgIHZhciBzdHJ1bSA9IHN0cnVtc1tpZF07CgogICAgICBpZiAoc3RydW0gPT09IHVuZGVmaW5lZCkgewogICAgICAgIHJldHVybiB1bmRlZmluZWQ7CiAgICAgIH0KCiAgICAgIHJldHVybiBzdHJ1bS5tYXhYIC0gc3RydW0ubWluWDsKICAgIH07CgogICAgcGMub24oImF4ZXNyZW9yZGVyLnN0cnVtcyIsIGZ1bmN0aW9uKCkgewogICAgICB2YXIgaWRzID0gT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMoc3RydW1zKS5maWx0ZXIoZnVuY3Rpb24oZCkgewogICAgICAgIHJldHVybiAhaXNOYU4oZCk7CiAgICAgIH0pOwoKICAgICAgLy8gQ2hlY2tzIGlmIHRoZSBmaXJzdCBkaW1lbnNpb24gaXMgZGlyZWN0bHkgbGVmdCBvZiB0aGUgc2Vjb25kIGRpbWVuc2lvbi4KICAgICAgZnVuY3Rpb24gY29uc2VjdXRpdmUoZmlyc3QsIHNlY29uZCkgewogICAgICAgIHZhciBsZW5ndGggPSBkMy5rZXlzKF9fLmRpbWVuc2lvbnMpLmxlbmd0aDsKICAgICAgICByZXR1cm4gZDMua2V5cyhfXy5kaW1lbnNpb25zKS5zb21lKGZ1bmN0aW9uKGQsIGkpIHsKICAgICAgICAgIHJldHVybiAoZCA9PT0gZmlyc3QpCiAgICAgICAgICAgID8gaSArIGkgPCBsZW5ndGggJiYgX18uZGltZW5zaW9uc1tpICsgMV0gPT09IHNlY29uZAogICAgICAgICAgICA6IGZhbHNlOwogICAgICAgIH0pOwogICAgICB9CgogICAgICBpZiAoaWRzLmxlbmd0aCA+IDApIHsgLy8gV2UgaGF2ZSBzb21lIHN0cnVtcywgd2hpY2ggbWlnaHQgbmVlZCB0byBiZSByZW1vdmVkLgogICAgICAgIGlkcy5mb3JFYWNoKGZ1bmN0aW9uKGQpIHsKICAgICAgICAgIHZhciBkaW1zID0gc3RydW1zW2RdLmRpbXM7CiAgICAgICAgICBzdHJ1bXMuYWN0aXZlID0gZDsKICAgICAgICAgIC8vIElmIHRoZSB0d28gZGltZW5zaW9ucyBvZiB0aGUgY3VycmVudCBzdHJ1bSBhcmUgbm90IG5leHQgdG8gZWFjaCBvdGhlcgogICAgICAgICAgLy8gYW55IG1vcmUsIHRoYW4gd2UnbGwgbmVlZCB0byByZW1vdmUgdGhlIHN0cnVtLiBPdGhlcndpc2Ugd2Uga2VlcCBpdC4KICAgICAgICAgIGlmICghY29uc2VjdXRpdmUoZGltcy5sZWZ0LCBkaW1zLnJpZ2h0KSkgewogICAgICAgICAgICByZW1vdmVTdHJ1bShzdHJ1bXMpOwogICAgICAgICAgfQogICAgICAgIH0pOwogICAgICAgIG9uRHJhZ0VuZChzdHJ1bXMpKCk7CiAgICAgIH0KICAgIH0pOwoKICAgIC8vIEFkZCBhIG5ldyBzdmcgZ3JvdXAgaW4gd2hpY2ggd2UgZHJhdyB0aGUgc3RydW1zLgogICAgcGMuc2VsZWN0aW9uLnNlbGVjdCgic3ZnIikuYXBwZW5kKCJnIikKICAgICAgLmF0dHIoImlkIiwgInN0cnVtcyIpCiAgICAgIC5hdHRyKCJ0cmFuc2Zvcm0iLCAidHJhbnNsYXRlKCIgKyBfXy5tYXJnaW4ubGVmdCArICIsIiArIF9fLm1hcmdpbi50b3AgKyAiKSIpOwoKICAgIC8vIEluc3RhbGwgdGhlIHJlcXVpcmVkIGJydXNoUmVzZXQgZnVuY3Rpb24KICAgIHBjLmJydXNoUmVzZXQgPSBicnVzaFJlc2V0KHN0cnVtcyk7CgogICAgZHJhZwogICAgICAub24oImRyYWdzdGFydCIsIG9uRHJhZ1N0YXJ0KHN0cnVtcykpCiAgICAgIC5vbigiZHJhZyIsIG9uRHJhZyhzdHJ1bXMpKQogICAgICAub24oImRyYWdlbmQiLCBvbkRyYWdFbmQoc3RydW1zKSk7CgogICAgLy8gTk9URTogVGhlIHN0eWxpbmcgbmVlZHMgdG8gYmUgZG9uZSBoZXJlIGFuZCBub3QgaW4gdGhlIGNzcy4gVGhpcyBpcyBiZWNhdXNlCiAgICAvLyAgICAgICBmb3IgMUQgYnJ1c2hpbmcsIHRoZSBjYW52YXMgbGF5ZXJzIHNob3VsZCBub3QgbGlzdGVuIHRvCiAgICAvLyAgICAgICBwb2ludGVyLWV2ZW50cy4KICAgIHN0cnVtUmVjdCA9IHBjLnNlbGVjdGlvbi5zZWxlY3QoInN2ZyIpLmluc2VydCgicmVjdCIsICJnI3N0cnVtcyIpCiAgICAgIC5hdHRyKCJpZCIsICJzdHJ1bS1ldmVudHMiKQogICAgICAuYXR0cigieCIsIF9fLm1hcmdpbi5sZWZ0KQogICAgICAuYXR0cigieSIsIF9fLm1hcmdpbi50b3ApCiAgICAgIC5hdHRyKCJ3aWR0aCIsIHcoKSkKICAgICAgLmF0dHIoImhlaWdodCIsIGgoKSArIDIpCiAgICAgIC5zdHlsZSgib3BhY2l0eSIsIDApCiAgICAgIC5jYWxsKGRyYWcpOwogIH0KCiAgYnJ1c2gubW9kZXNbIjJELXN0cnVtcyJdID0gewogICAgaW5zdGFsbDogaW5zdGFsbCwKICAgIHVuaW5zdGFsbDogZnVuY3Rpb24oKSB7CiAgICAgIHBjLnNlbGVjdGlvbi5zZWxlY3QoInN2ZyIpLnNlbGVjdCgiZyNzdHJ1bXMiKS5yZW1vdmUoKTsKICAgICAgcGMuc2VsZWN0aW9uLnNlbGVjdCgic3ZnIikuc2VsZWN0KCJyZWN0I3N0cnVtLWV2ZW50cyIpLnJlbW92ZSgpOwogICAgICBwYy5vbigiYXhlc3Jlb3JkZXIuc3RydW1zIiwgdW5kZWZpbmVkKTsKICAgICAgZGVsZXRlIHBjLmJydXNoUmVzZXQ7CgogICAgICBzdHJ1bVJlY3QgPSB1bmRlZmluZWQ7CiAgICB9LAogICAgc2VsZWN0ZWQ6IHNlbGVjdGVkLAogICAgYnJ1c2hTdGF0ZTogZnVuY3Rpb24gKCkgeyByZXR1cm4gc3RydW1zOyB9CiAgfTsKCn0oKSk7CgovLyBicnVzaCBtb2RlOiAxRC1BeGVzIHdpdGggbXVsdGlwbGUgZXh0ZW50cwovLyByZXF1aXJlcyBkMy5zdmcubXVsdGlicnVzaAoKKGZ1bmN0aW9uKCkgewogIGlmICh0eXBlb2YgZDMuc3ZnLm11bHRpYnJ1c2ggIT09ICdmdW5jdGlvbicpIHsKCSAgcmV0dXJuOwogIH0KICB2YXIgYnJ1c2hlcyA9IHt9OwoKICBmdW5jdGlvbiBpc19icnVzaGVkKHApIHsKICAgIHJldHVybiAhYnJ1c2hlc1twXS5lbXB0eSgpOwogIH0KCiAgLy8gZGF0YSB3aXRoaW4gZXh0ZW50cwogIGZ1bmN0aW9uIHNlbGVjdGVkKCkgewogICAgdmFyIGFjdGl2ZXMgPSBkMy5rZXlzKF9fLmRpbWVuc2lvbnMpLmZpbHRlcihpc19icnVzaGVkKSwKICAgICAgICBleHRlbnRzID0gYWN0aXZlcy5tYXAoZnVuY3Rpb24ocCkgeyByZXR1cm4gYnJ1c2hlc1twXS5leHRlbnQoKTsgfSk7CgogICAgLy8gV2UgZG9uJ3Qgd2FudCB0byByZXR1cm4gdGhlIGZ1bGwgZGF0YSBzZXQgd2hlbiB0aGVyZSBhcmUgbm8gYXhlcyBicnVzaGVkLgogICAgLy8gQWN0dWFsbHksIHdoZW4gdGhlcmUgYXJlIG5vIGF4ZXMgYnJ1c2hlZCwgYnkgZGVmaW5pdGlvbiwgbm8gaXRlbXMgYXJlCiAgICAvLyBzZWxlY3RlZC4gU28sIGxldCdzIGF2b2lkIHRoZSBmaWx0ZXJpbmcgYW5kIGp1c3QgcmV0dXJuIGZhbHNlLgogICAgLy9pZiAoYWN0aXZlcy5sZW5ndGggPT09IDApIHJldHVybiBmYWxzZTsKCiAgICAvLyBSZXNvbHZlcyBicm9rZW4gZXhhbXBsZXMgZm9yIG5vdy4gVGhleSBleHBlY3QgdG8gZ2V0IHRoZSBmdWxsIGRhdGFzZXQgYmFjayBmcm9tIGVtcHR5IGJydXNoZXMKICAgIGlmIChhY3RpdmVzLmxlbmd0aCA9PT0gMCkgcmV0dXJuIF9fLmRhdGE7CgogICAgLy8gdGVzdCBpZiB3aXRoaW4gcmFuZ2UKICAgIHZhciB3aXRoaW4gPSB7CiAgICAgICJkYXRlIjogZnVuY3Rpb24oZCxwLGRpbWVuc2lvbixiKSB7CiAgICAgICAgaWYgKHR5cGVvZiBfXy5kaW1lbnNpb25zW3BdLnlzY2FsZS5yYW5nZVBvaW50cyA9PT0gImZ1bmN0aW9uIikgeyAvLyBpZiBpdCBpcyBvcmRpbmFsCiAgICAgICAgICByZXR1cm4gYlswXSA8PSBfXy5kaW1lbnNpb25zW3BdLnlzY2FsZShkW3BdKSAmJiBfXy5kaW1lbnNpb25zW3BdLnlzY2FsZShkW3BdKSA8PSBiWzFdCiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgcmV0dXJuIGJbMF0gPD0gZFtwXSAmJiBkW3BdIDw9IGJbMV0KICAgICAgICB9CiAgICAgIH0sCiAgICAgICJudW1iZXIiOiBmdW5jdGlvbihkLHAsZGltZW5zaW9uLGIpIHsKICAgICAgICBpZiAodHlwZW9mIF9fLmRpbWVuc2lvbnNbcF0ueXNjYWxlLnJhbmdlUG9pbnRzID09PSAiZnVuY3Rpb24iKSB7IC8vIGlmIGl0IGlzIG9yZGluYWwKICAgICAgICAgIHJldHVybiBiWzBdIDw9IF9fLmRpbWVuc2lvbnNbcF0ueXNjYWxlKGRbcF0pICYmIF9fLmRpbWVuc2lvbnNbcF0ueXNjYWxlKGRbcF0pIDw9IGJbMV0KICAgICAgICB9IGVsc2UgewogICAgICAgICAgICByZXR1cm4gYlswXSA8PSBkW3BdICYmIGRbcF0gPD0gYlsxXQogICAgICAgIH0KICAgICAgfSwKICAgICAgInN0cmluZyI6IGZ1bmN0aW9uKGQscCxkaW1lbnNpb24sYikgewogICAgICAgIHJldHVybiBiWzBdIDw9IF9fLmRpbWVuc2lvbnNbcF0ueXNjYWxlKGRbcF0pICYmIF9fLmRpbWVuc2lvbnNbcF0ueXNjYWxlKGRbcF0pIDw9IGJbMV0KICAgICAgfQogICAgfTsKCiAgICByZXR1cm4gX18uZGF0YQogICAgLmZpbHRlcihmdW5jdGlvbihkKSB7CiAgICAgIHN3aXRjaChicnVzaC5wcmVkaWNhdGUpIHsKICAgICAgY2FzZSAiQU5EIjoKICAgICAgICByZXR1cm4gYWN0aXZlcy5ldmVyeShmdW5jdGlvbihwLCBkaW1lbnNpb24pIHsKICAgICAgICAgIHJldHVybiBleHRlbnRzW2RpbWVuc2lvbl0uc29tZShmdW5jdGlvbihiKSB7CiAgICAgICAgICAJcmV0dXJuIHdpdGhpbltfXy5kaW1lbnNpb25zW3BdLnR5cGVdKGQscCxkaW1lbnNpb24sYik7CiAgICAgICAgICB9KTsKICAgICAgICB9KTsKICAgICAgY2FzZSAiT1IiOgogICAgICAgIHJldHVybiBhY3RpdmVzLnNvbWUoZnVuY3Rpb24ocCwgZGltZW5zaW9uKSB7CiAgICAgIAkgIHJldHVybiBleHRlbnRzW2RpbWVuc2lvbl0uc29tZShmdW5jdGlvbihiKSB7CiAgICAgICAgICAgIAlyZXR1cm4gd2l0aGluW19fLmRpbWVuc2lvbnNbcF0udHlwZV0oZCxwLGRpbWVuc2lvbixiKTsKICAgICAgICAgICAgfSk7CiAgICAgICAgfSk7CiAgICAgIGRlZmF1bHQ6CiAgICAgICAgdGhyb3cgIlVua25vd24gYnJ1c2ggcHJlZGljYXRlICIgKyBfXy5icnVzaFByZWRpY2F0ZTsKICAgICAgfQogICAgfSk7CiAgfTsKCiAgZnVuY3Rpb24gYnJ1c2hFeHRlbnRzKGV4dGVudHMpIHsKICAgIGlmICh0eXBlb2YoZXh0ZW50cykgPT09ICd1bmRlZmluZWQnKSB7CiAgICAgIGV4dGVudHMgPSB7fTsKICAgICAgZDMua2V5cyhfXy5kaW1lbnNpb25zKS5mb3JFYWNoKGZ1bmN0aW9uIChkKSB7CiAgICAgICAgdmFyIGJydXNoID0gYnJ1c2hlc1tkXTsKICAgICAgICBpZiAoYnJ1c2ggIT09IHVuZGVmaW5lZCAmJiAhYnJ1c2guZW1wdHkoKSkgewogICAgICAgICAgdmFyIGV4dGVudCA9IGJydXNoLmV4dGVudCgpOwogICAgICAgICAgZXh0ZW50c1tkXSA9IGV4dGVudDsKICAgICAgICB9CiAgICAgIH0pOwogICAgICByZXR1cm4gZXh0ZW50czsKICAgIH0KICAgIGVsc2UgewogICAgICAvL2ZpcnN0IGdldCBhbGwgdGhlIGJydXNoIHNlbGVjdGlvbnMKICAgICAgdmFyIGJydXNoU2VsZWN0aW9ucyA9IHt9OwogICAgICBnLnNlbGVjdEFsbCgnLmJydXNoJykKICAgICAgICAgIC5lYWNoKGZ1bmN0aW9uIChkKSB7CiAgICAgICAgICAgIGJydXNoU2VsZWN0aW9uc1tkXSA9IGQzLnNlbGVjdCh0aGlzKTsKICAgICAgICAgIH0pOwoKICAgICAgLy8gbG9vcCBvdmVyIGVhY2ggZGltZW5zaW9uIGFuZCB1cGRhdGUgYXBwcm9wcmlhdGVseSAoaWYgaXQgd2FzIHBhc3NlZCBpbiB0aHJvdWdoIGV4dGVudHMpCiAgICAgIGQzLmtleXMoX18uZGltZW5zaW9ucykuZm9yRWFjaChmdW5jdGlvbiAoZCkgewogICAgICAgIGlmIChleHRlbnRzW2RdID09PSB1bmRlZmluZWQpIHsKICAgICAgICAgIHJldHVybjsKICAgICAgICB9CgogICAgICAgIHZhciBicnVzaCA9IGJydXNoZXNbZF07CiAgICAgICAgaWYgKGJydXNoICE9PSB1bmRlZmluZWQpIHsKICAgICAgICAgIC8vdXBkYXRlIHRoZSBleHRlbnQKICAgICAgICAgIGJydXNoLmV4dGVudChleHRlbnRzW2RdKTsKCiAgICAgICAgICAvL3JlZHJhdyB0aGUgYnJ1c2gKICAgICAgICAgIGJydXNoU2VsZWN0aW9uc1tkXQogICAgICAgICAgICAgIC50cmFuc2l0aW9uKCkKICAgICAgICAgICAgICAuZHVyYXRpb24oMCkKICAgICAgICAgICAgICAuY2FsbChicnVzaCk7CgogICAgICAgICAgLy9maXJlIHNvbWUgZXZlbnRzCiAgICAgICAgICBicnVzaC5ldmVudChicnVzaFNlbGVjdGlvbnNbZF0pOwogICAgICAgIH0KICAgICAgfSk7CgogICAgICAvL3JlZHJhdyB0aGUgY2hhcnQKICAgICAgcGMucmVuZGVyQnJ1c2hlZCgpOwoKICAgICAgcmV0dXJuIHBjOwogICAgfQogIH0KCiAgLy9mdW5jdGlvbiBicnVzaEV4dGVudHMoKSB7CiAgLy8gIHZhciBleHRlbnRzID0ge307CiAgLy8gIGQzLmtleXMoX18uZGltZW5zaW9ucykuZm9yRWFjaChmdW5jdGlvbihkKSB7CiAgLy8gICAgdmFyIGJydXNoID0gYnJ1c2hlc1tkXTsKICAvLyAgICBpZiAoYnJ1c2ggIT09IHVuZGVmaW5lZCAmJiAhYnJ1c2guZW1wdHkoKSkgewogIC8vICAgICAgdmFyIGV4dGVudCA9IGJydXNoLmV4dGVudCgpOwogIC8vICAgICAgZXh0ZW50c1tkXSA9IGV4dGVudDsKICAvLyAgICB9CiAgLy8gIH0pOwogIC8vICByZXR1cm4gZXh0ZW50czsKICAvL30KCiAgZnVuY3Rpb24gYnJ1c2hGb3IoYXhpcykgewogICAgdmFyIGJydXNoID0gZDMuc3ZnLm11bHRpYnJ1c2goKTsKCiAgICBicnVzaAogICAgICAueShfXy5kaW1lbnNpb25zW2F4aXNdLnlzY2FsZSkKICAgICAgLm9uKCJicnVzaHN0YXJ0IiwgZnVuY3Rpb24oKSB7CgkJCQlpZihkMy5ldmVudC5zb3VyY2VFdmVudCAhPT0gbnVsbCkgewogICAgICAgICAgICAgICAgICAgIGV2ZW50cy5icnVzaHN0YXJ0LmNhbGwocGMsIF9fLmJydXNoZWQpOwoJCQkJCWQzLmV2ZW50LnNvdXJjZUV2ZW50LnN0b3BQcm9wYWdhdGlvbigpOwoJCQkJfQogICAgICB9KQogICAgICAub24oImJydXNoIiwgZnVuY3Rpb24oKSB7CiAgICAgICAgYnJ1c2hVcGRhdGVkKHNlbGVjdGVkKCkpOwogICAgICB9KQogICAgICAub24oImJydXNoZW5kIiwgZnVuY3Rpb24oKSB7CiAgICAJLy8gZDMuc3ZnLm11bHRpYnJ1c2ggY2xlYXJzIGV4dGVudHMganVzdCBiZWZvcmUgY2FsbGluZyAnYnJ1c2hlbmQnCiAgICAJLy8gc28gd2UgaGF2ZSB0byB1cGRhdGUgaGVyZSBhZ2Fpbi4KICAgIAkvLyBUaGlzIGZpeGVzIGlzc3VlICMxMDMgZm9yIG5vdywgYnV0IHNob3VsZCBiZSBjaGFuZ2VkIGluIGQzLnN2Zy5tdWx0aWJydXNoCiAgICAJLy8gdG8gYXZvaWQgdW5uZWNlc3NhcnkgY29tcHV0YXRpb24uCiAgICAJYnJ1c2hVcGRhdGVkKHNlbGVjdGVkKCkpOwogICAgICAgIGV2ZW50cy5icnVzaGVuZC5jYWxsKHBjLCBfXy5icnVzaGVkKTsKICAgICAgfSkKICAgICAgLmV4dGVudEFkYXB0aW9uKGZ1bmN0aW9uKHNlbGVjdGlvbikgewogICAgCSAgc2VsZWN0aW9uCiAgICAJICAuc3R5bGUoInZpc2liaWxpdHkiLCBudWxsKQogICAgICAgICAgLmF0dHIoIngiLCAtMTUpCiAgICAgICAgICAuYXR0cigid2lkdGgiLCAzMCkKICAgICAgICAgIC5zdHlsZSgiZmlsbCIsICJyZ2JhKDI1NSwyNTUsMjU1LDAuMjUpIikKICAgICAgICAgIC5zdHlsZSgic3Ryb2tlIiwgInJnYmEoMCwwLDAsMC42KSIpOwogICAgICB9KQogICAgICAucmVzaXplQWRhcHRpb24oZnVuY3Rpb24oc2VsZWN0aW9uKSB7CiAgICAJIHNlbGVjdGlvbgogICAgCSAgIC5zZWxlY3RBbGwoInJlY3QiKQogICAgCSAgIC5hdHRyKCJ4IiwgLTE1KQogICAgCSAgIC5hdHRyKCJ3aWR0aCIsIDMwKQogICAgICAgICAuc3R5bGUoInZpc2liaWxpdHkiLCBudWxsKQogICAgICAgICAuc3R5bGUoImZpbGwiLCAicmdiYSgwLDAsMCwwLjEpIik7CiAgICAgIH0pOwoKICAgIGJydXNoZXNbYXhpc10gPSBicnVzaDsKICAgIHJldHVybiBicnVzaDsKICB9CgogIGZ1bmN0aW9uIGJydXNoUmVzZXQoZGltZW5zaW9uKSB7CiAgICBfXy5icnVzaGVkID0gZmFsc2U7CiAgICBpZiAoZykgewogICAgICBnLnNlbGVjdEFsbCgnLmJydXNoJykKICAgICAgICAuZWFjaChmdW5jdGlvbihkKSB7CiAgICAgICAgICBkMy5zZWxlY3QodGhpcykuY2FsbCgKICAgICAgICAgICAgYnJ1c2hlc1tkXS5jbGVhcigpCiAgICAgICAgICApOwogICAgICAgIH0pOwogICAgICBwYy5yZW5kZXJCcnVzaGVkKCk7CiAgICB9CiAgICByZXR1cm4gdGhpczsKICB9OwoKICBmdW5jdGlvbiBpbnN0YWxsKCkgewogICAgaWYgKCFnKSBwYy5jcmVhdGVBeGVzKCk7CgogICAgLy8gQWRkIGFuZCBzdG9yZSBhIGJydXNoIGZvciBlYWNoIGF4aXMuCiAgICB2YXIgYnJ1c2ggPSBnLmFwcGVuZCgic3ZnOmciKQogICAgICAuYXR0cigiY2xhc3MiLCAiYnJ1c2giKQogICAgICAuZWFjaChmdW5jdGlvbihkKSB7CiAgICAgICAgZDMuc2VsZWN0KHRoaXMpLmNhbGwoYnJ1c2hGb3IoZCkpOwogICAgICB9KQoKICAgIGJydXNoLnNlbGVjdEFsbCgicmVjdCIpCiAgICAgICAgLnN0eWxlKCJ2aXNpYmlsaXR5IiwgbnVsbCkKICAgICAgICAuYXR0cigieCIsIC0xNSkKICAgICAgICAuYXR0cigid2lkdGgiLCAzMCk7CgogICAgYnJ1c2guc2VsZWN0QWxsKCJyZWN0LmJhY2tncm91bmQiKQogICAgICAgIC5zdHlsZSgiZmlsbCIsICJ0cmFuc3BhcmVudCIpOwoKICAgIGJydXNoLnNlbGVjdEFsbCgicmVjdC5leHRlbnQiKQogICAgICAgIC5zdHlsZSgiZmlsbCIsICJyZ2JhKDI1NSwyNTUsMjU1LDAuMjUpIikKICAgICAgICAuc3R5bGUoInN0cm9rZSIsICJyZ2JhKDAsMCwwLDAuNikiKTsKCiAgICBicnVzaC5zZWxlY3RBbGwoIi5yZXNpemUgcmVjdCIpCiAgICAgICAgLnN0eWxlKCJmaWxsIiwgInJnYmEoMCwwLDAsMC4xKSIpOwoKICAgIHBjLmJydXNoRXh0ZW50cyA9IGJydXNoRXh0ZW50czsKICAgIHBjLmJydXNoUmVzZXQgPSBicnVzaFJlc2V0OwogICAgcmV0dXJuIHBjOwogIH0KCiAgYnJ1c2gubW9kZXNbIjFELWF4ZXMtbXVsdGkiXSA9IHsKICAgIGluc3RhbGw6IGluc3RhbGwsCiAgICB1bmluc3RhbGw6IGZ1bmN0aW9uKCkgewogICAgICBnLnNlbGVjdEFsbCgiLmJydXNoIikucmVtb3ZlKCk7CiAgICAgIGJydXNoZXMgPSB7fTsKICAgICAgZGVsZXRlIHBjLmJydXNoRXh0ZW50czsKICAgICAgZGVsZXRlIHBjLmJydXNoUmVzZXQ7CiAgICB9LAogICAgc2VsZWN0ZWQ6IHNlbGVjdGVkLAogICAgYnJ1c2hTdGF0ZTogYnJ1c2hFeHRlbnRzCiAgfQp9KSgpOwovLyBicnVzaCBtb2RlOiBhbmd1bGFyCi8vIGNvZGUgYmFzZWQgb24gMkQuc3RydW1zLmpzCgooZnVuY3Rpb24oKSB7CiAgdmFyIGFyY3MgPSB7fSwKICAgICAgc3RydW1SZWN0OwoKICBmdW5jdGlvbiBkcmF3U3RydW0oYXJjLCBhY3RpdmVQb2ludCkgewogICAgdmFyIHN2ZyA9IHBjLnNlbGVjdGlvbi5zZWxlY3QoInN2ZyIpLnNlbGVjdCgiZyNhcmNzIiksCiAgICAgICAgaWQgPSBhcmMuZGltcy5pLAogICAgICAgIHBvaW50cyA9IFthcmMucDIsIGFyYy5wM10sCiAgICAgICAgbGluZSA9IHN2Zy5zZWxlY3RBbGwoImxpbmUjYXJjLSIgKyBpZCkuZGF0YShbe3AxOmFyYy5wMSxwMjphcmMucDJ9LHtwMTphcmMucDEscDI6YXJjLnAzfV0pLAogICAgICAgIGNpcmNsZXMgPSBzdmcuc2VsZWN0QWxsKCJjaXJjbGUjYXJjLSIgKyBpZCkuZGF0YShwb2ludHMpLAogICAgICAgIGRyYWcgPSBkMy5iZWhhdmlvci5kcmFnKCksCiAgICAgICAgcGF0aCA9IHN2Zy5zZWxlY3RBbGwoInBhdGgjYXJjLSIgKyBpZCkuZGF0YShbYXJjXSk7CgogICAgcGF0aC5lbnRlcigpCiAgICAgIC5hcHBlbmQoInBhdGgiKQogICAgICAuYXR0cigiaWQiLCAiYXJjLSIgKyBpZCkKICAgICAgLmF0dHIoImNsYXNzIiwgImFyYyIpCiAgICAgIC5zdHlsZSgiZmlsbCIsICJvcmFuZ2UiKQogICAgICAuc3R5bGUoIm9wYWNpdHkiLCAwLjUpOwoKICAgIHBhdGgKICAgICAgLmF0dHIoImQiLCBhcmMuYXJjKQogICAgICAuYXR0cigidHJhbnNmb3JtIiwgInRyYW5zbGF0ZSgiICsgYXJjLnAxWzBdICsgIiwiICsgYXJjLnAxWzFdICsgIikiKTsKCiAgICBsaW5lLmVudGVyKCkKICAgICAgLmFwcGVuZCgibGluZSIpCiAgICAgIC5hdHRyKCJpZCIsICJhcmMtIiArIGlkKQogICAgICAuYXR0cigiY2xhc3MiLCAiYXJjIik7CgogICAgbGluZQogICAgICAuYXR0cigieDEiLCBmdW5jdGlvbihkKSB7IHJldHVybiBkLnAxWzBdOyB9KQogICAgICAuYXR0cigieTEiLCBmdW5jdGlvbihkKSB7IHJldHVybiBkLnAxWzFdOyB9KQogICAgICAuYXR0cigieDIiLCBmdW5jdGlvbihkKSB7IHJldHVybiBkLnAyWzBdOyB9KQogICAgICAuYXR0cigieTIiLCBmdW5jdGlvbihkKSB7IHJldHVybiBkLnAyWzFdOyB9KQogICAgICAuYXR0cigic3Ryb2tlIiwgImJsYWNrIikKICAgICAgLmF0dHIoInN0cm9rZS13aWR0aCIsIDIpOwoKICAgIGRyYWcKICAgICAgLm9uKCJkcmFnIiwgZnVuY3Rpb24oZCwgaSkgewogICAgICAgIHZhciBldiA9IGQzLmV2ZW50LAogICAgICAgIAlhbmdsZSA9IDA7CgogICAgICAgIGkgPSBpICsgMjsKCiAgICAgICAgYXJjWyJwIiArIGldWzBdID0gTWF0aC5taW4oTWF0aC5tYXgoYXJjLm1pblggKyAxLCBldi54KSwgYXJjLm1heFgpOwogICAgICAgIGFyY1sicCIgKyBpXVsxXSA9IE1hdGgubWluKE1hdGgubWF4KGFyYy5taW5ZLCBldi55KSwgYXJjLm1heFkpOwoKICAgICAgICBhbmdsZSA9IGkgPT09IDMgPyBhcmNzLnN0YXJ0QW5nbGUoaWQpIDogYXJjcy5lbmRBbmdsZShpZCk7CgogICAgICAgIGlmICgoYXJjLnN0YXJ0QW5nbGUgPCBNYXRoLlBJICYmIGFyYy5lbmRBbmdsZSA8IE1hdGguUEkgJiYgYW5nbGUgPCBNYXRoLlBJKSB8fAogICAgICAgIAkJKGFyYy5zdGFydEFuZ2xlID49IE1hdGguUEkgJiYgYXJjLmVuZEFuZ2xlID49IE1hdGguUEkgJiYgYW5nbGUgPj0gTWF0aC5QSSkpIHsKCiAgICAgICAgCWlmIChpID09PSAyKSB7CgkgICAgICAgIAlhcmMuZW5kQW5nbGUgPSBhbmdsZTsKCSAgICAgICAgCWFyYy5hcmMuZW5kQW5nbGUoYW5nbGUpOwoJICAgICAgICB9IGVsc2UgaWYgKGkgPT09IDMpIHsKCSAgICAgICAgCWFyYy5zdGFydEFuZ2xlID0gYW5nbGU7CgkgICAgICAgIAlhcmMuYXJjLnN0YXJ0QW5nbGUoYW5nbGUpOwoJICAgICAgICB9CgogICAgICAgIH0KCiAgICAgICAgZHJhd1N0cnVtKGFyYywgaSAtIDIpOwogICAgICB9KQogICAgICAub24oImRyYWdlbmQiLCBvbkRyYWdFbmQoKSk7CgogICAgY2lyY2xlcy5lbnRlcigpCiAgICAgIC5hcHBlbmQoImNpcmNsZSIpCiAgICAgIC5hdHRyKCJpZCIsICJhcmMtIiArIGlkKQogICAgICAuYXR0cigiY2xhc3MiLCAiYXJjIik7CgogICAgY2lyY2xlcwogICAgICAuYXR0cigiY3giLCBmdW5jdGlvbihkKSB7IHJldHVybiBkWzBdOyB9KQogICAgICAuYXR0cigiY3kiLCBmdW5jdGlvbihkKSB7IHJldHVybiBkWzFdOyB9KQogICAgICAuYXR0cigiciIsIDUpCiAgICAgIC5zdHlsZSgib3BhY2l0eSIsIGZ1bmN0aW9uKGQsIGkpIHsKICAgICAgICByZXR1cm4gKGFjdGl2ZVBvaW50ICE9PSB1bmRlZmluZWQgJiYgaSA9PT0gYWN0aXZlUG9pbnQpID8gMC44IDogMDsKICAgICAgfSkKICAgICAgLm9uKCJtb3VzZW92ZXIiLCBmdW5jdGlvbigpIHsKICAgICAgICBkMy5zZWxlY3QodGhpcykuc3R5bGUoIm9wYWNpdHkiLCAwLjgpOwogICAgICB9KQogICAgICAub24oIm1vdXNlb3V0IiwgZnVuY3Rpb24oKSB7CiAgICAgICAgZDMuc2VsZWN0KHRoaXMpLnN0eWxlKCJvcGFjaXR5IiwgMCk7CiAgICAgIH0pCiAgICAgIC5jYWxsKGRyYWcpOwogIH0KCiAgZnVuY3Rpb24gZGltZW5zaW9uc0ZvclBvaW50KHApIHsKICAgIHZhciBkaW1zID0geyBpOiAtMSwgbGVmdDogdW5kZWZpbmVkLCByaWdodDogdW5kZWZpbmVkIH07CiAgICBkMy5rZXlzKF9fLmRpbWVuc2lvbnMpLnNvbWUoZnVuY3Rpb24oZGltLCBpKSB7CiAgICAgIGlmICh4c2NhbGUoZGltKSA8IHBbMF0pIHsKICAgICAgICB2YXIgbmV4dCA9IGQzLmtleXMoX18uZGltZW5zaW9ucylbcGMuZ2V0T3JkZXJlZERpbWVuc2lvbktleXMoKS5pbmRleE9mKGRpbSkrMV07CiAgICAgICAgZGltcy5pID0gaTsKICAgICAgICBkaW1zLmxlZnQgPSBkaW07CiAgICAgICAgZGltcy5yaWdodCA9IG5leHQ7CiAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICB9CiAgICAgIHJldHVybiB0cnVlOwogICAgfSk7CgogICAgaWYgKGRpbXMubGVmdCA9PT0gdW5kZWZpbmVkKSB7CiAgICAgIC8vIEV2ZW50IG9uIHRoZSBsZWZ0IHNpZGUgb2YgdGhlIGZpcnN0IGF4aXMuCiAgICAgIGRpbXMuaSA9IDA7CiAgICAgIGRpbXMubGVmdCA9IHBjLmdldE9yZGVyZWREaW1lbnNpb25LZXlzKClbMF07CiAgICAgIGRpbXMucmlnaHQgPSBwYy5nZXRPcmRlcmVkRGltZW5zaW9uS2V5cygpWzFdOwogICAgfSBlbHNlIGlmIChkaW1zLnJpZ2h0ID09PSB1bmRlZmluZWQpIHsKICAgICAgLy8gRXZlbnQgb24gdGhlIHJpZ2h0IHNpZGUgb2YgdGhlIGxhc3QgYXhpcwogICAgICBkaW1zLmkgPSBkMy5rZXlzKF9fLmRpbWVuc2lvbnMpLmxlbmd0aCAtIDE7CiAgICAgIGRpbXMucmlnaHQgPSBkaW1zLmxlZnQ7CiAgICAgIGRpbXMubGVmdCA9IHBjLmdldE9yZGVyZWREaW1lbnNpb25LZXlzKClbZDMua2V5cyhfXy5kaW1lbnNpb25zKS5sZW5ndGggLSAyXTsKICAgIH0KCiAgICByZXR1cm4gZGltczsKICB9CgogIGZ1bmN0aW9uIG9uRHJhZ1N0YXJ0KCkgewogICAgLy8gRmlyc3Qgd2UgbmVlZCB0byBkZXRlcm1pbmUgYmV0d2VlbiB3aGljaCB0d28gYXhlcyB0aGUgYXJjIHdhcyBzdGFydGVkLgogICAgLy8gVGhpcyB3aWxsIGRldGVybWluZSB0aGUgZnJlZWRvbSBvZiBtb3ZlbWVudCwgYmVjYXVzZSBhIGFyYyBjYW4KICAgIC8vIGxvZ2ljYWxseSBvbmx5IGhhcHBlbiBiZXR3ZWVuIHR3byBheGVzLCBzbyBubyBtb3ZlbWVudCBvdXRzaWRlIHRoZXNlIGF4ZXMKICAgIC8vIHNob3VsZCBiZSBhbGxvd2VkLgogICAgcmV0dXJuIGZ1bmN0aW9uKCkgewogICAgICB2YXIgcCA9IGQzLm1vdXNlKHN0cnVtUmVjdFswXVswXSksCiAgICAgICAgICBkaW1zLAogICAgICAgICAgYXJjOwoKICAgICAgcFswXSA9IHBbMF0gLSBfXy5tYXJnaW4ubGVmdDsKICAgICAgcFsxXSA9IHBbMV0gLSBfXy5tYXJnaW4udG9wOwoKICAgICAgZGltcyA9IGRpbWVuc2lvbnNGb3JQb2ludChwKSwKICAgICAgYXJjID0gewogICAgICAgIHAxOiBwLAogICAgICAgIGRpbXM6IGRpbXMsCiAgICAgICAgbWluWDogeHNjYWxlKGRpbXMubGVmdCksCiAgICAgICAgbWF4WDogeHNjYWxlKGRpbXMucmlnaHQpLAogICAgICAgIG1pblk6IDAsCiAgICAgICAgbWF4WTogaCgpLAogICAgICAgIHN0YXJ0QW5nbGU6IHVuZGVmaW5lZCwKICAgICAgICBlbmRBbmdsZTogdW5kZWZpbmVkLAogICAgICAgIGFyYzogZDMuc3ZnLmFyYygpLmlubmVyUmFkaXVzKDApCiAgICAgIH07CgogICAgICBhcmNzW2RpbXMuaV0gPSBhcmM7CiAgICAgIGFyY3MuYWN0aXZlID0gZGltcy5pOwoKICAgICAgLy8gTWFrZSBzdXJlIHRoYXQgdGhlIHBvaW50IGlzIHdpdGhpbiB0aGUgYm91bmRzCiAgICAgIGFyYy5wMVswXSA9IE1hdGgubWluKE1hdGgubWF4KGFyYy5taW5YLCBwWzBdKSwgYXJjLm1heFgpOwogICAgICBhcmMucDIgPSBhcmMucDEuc2xpY2UoKTsKICAgICAgYXJjLnAzID0gYXJjLnAxLnNsaWNlKCk7CiAgICB9OwogIH0KCiAgZnVuY3Rpb24gb25EcmFnKCkgewogICAgcmV0dXJuIGZ1bmN0aW9uKCkgewogICAgICB2YXIgZXYgPSBkMy5ldmVudCwKICAgICAgICAgIGFyYyA9IGFyY3NbYXJjcy5hY3RpdmVdOwoKICAgICAgLy8gTWFrZSBzdXJlIHRoYXQgdGhlIHBvaW50IGlzIHdpdGhpbiB0aGUgYm91bmRzCiAgICAgIGFyYy5wMlswXSA9IE1hdGgubWluKE1hdGgubWF4KGFyYy5taW5YICsgMSwgZXYueCAtIF9fLm1hcmdpbi5sZWZ0KSwgYXJjLm1heFgpOwogICAgICBhcmMucDJbMV0gPSBNYXRoLm1pbihNYXRoLm1heChhcmMubWluWSwgZXYueSAtIF9fLm1hcmdpbi50b3ApLCBhcmMubWF4WSk7CiAgICAgIGFyYy5wMyA9IGFyYy5wMi5zbGljZSgpOwovLyAgICAgIGNvbnNvbGUubG9nKGFyY3MuYW5nbGUoYXJjcy5hY3RpdmUpKTsKLy8gICAgICBjb25zb2xlLmxvZyhzaWduZWRBbmdsZShhcmNzLnVuc2lnbmVkQW5nbGUoYXJjcy5hY3RpdmUpKSk7CiAgICAgIGRyYXdTdHJ1bShhcmMsIDEpOwogICAgfTsKICB9CgogIC8vIHNvbWUgaGVscGVyIGZ1bmN0aW9ucwogIGZ1bmN0aW9uIGh5cG90aGVudXNlKGEsIGIpIHsKCSAgcmV0dXJuIE1hdGguc3FydChhKmEgKyBiKmIpOwogIH0KCiAgdmFyIHJhZCA9IChmdW5jdGlvbigpIHsKCSAgdmFyIGMgPSBNYXRoLlBJIC8gMTgwOwoJICByZXR1cm4gZnVuY3Rpb24oYW5nbGUpIHsKCQkgIHJldHVybiBhbmdsZSAqIGM7CgkgIH07CiAgfSkoKTsKCiAgdmFyIGRlZyA9IChmdW5jdGlvbigpIHsKCSAgdmFyIGMgPSAxODAgLyBNYXRoLlBJOwoJICByZXR1cm4gZnVuY3Rpb24oYW5nbGUpIHsKCQkgIHJldHVybiBhbmdsZSAqIGM7CgkgIH07CiAgfSkoKTsKCiAgLy8gWzAsIDIqUEldIC0+IFstUEkvMiwgUEkvMl0KICB2YXIgc2lnbmVkQW5nbGUgPSBmdW5jdGlvbihhbmdsZSkgewogICAgdmFyIHJldCA9IGFuZ2xlOwogICAgaWYgKGFuZ2xlID4gTWF0aC5QSSkgewogICAgICByZXQgPSBhbmdsZSAtIDEuNSAqIE1hdGguUEk7CiAgICAgIHJldCA9IGFuZ2xlIC0gMS41ICogTWF0aC5QSTsKICAgIH0gZWxzZSB7CiAgICAgIHJldCA9IGFuZ2xlIC0gMC41ICogTWF0aC5QSTsKICAgICAgcmV0ID0gYW5nbGUgLSAwLjUgKiBNYXRoLlBJOwogICAgfQogICAgcmV0dXJuIC1yZXQ7CiAgfQoKICAvKioKICAgKiBhbmdsZXMgYXJlIHN0b3JlZCBpbiByYWRpYW5zIGZyb20gaW4gWzAsIDIqUEldLCB3aGVyZSAwIGluIDEyIG8nY2xvY2suCiAgICogSG93ZXZlciwgb25lIGNhbiBvbmx5IHNlbGVjdCBsaW5lcyBmcm9tIDAgdG8gUEksIHNvIHdlIGNvbXB1dGUgdGhlCiAgICogJ3NpZ25lZCcgYW5nbGUsIHdoZXJlIDAgaXMgdGhlIGhvcml6b250YWwgbGluZSAoMyBvJ2Nsb2NrKSwgYW5kICsvLSBQSS8yCiAgICogYXJlIDEyIGFuZCA2IG8nY2xvY2sgcmVzcGVjdGl2ZWx5LgogICAqLwogIGZ1bmN0aW9uIGNvbnRhaW5tZW50VGVzdChhcmMpIHsKICAgIHZhciBzdGFydEFuZ2xlID0gc2lnbmVkQW5nbGUoYXJjLnN0YXJ0QW5nbGUpOwogICAgdmFyIGVuZEFuZ2xlID0gc2lnbmVkQW5nbGUoYXJjLmVuZEFuZ2xlKTsKCiAgICBpZiAoc3RhcnRBbmdsZSA+IGVuZEFuZ2xlKSB7CiAgICAJdmFyIHRtcCA9IHN0YXJ0QW5nbGU7CiAgICAJc3RhcnRBbmdsZSA9IGVuZEFuZ2xlOwogICAgCWVuZEFuZ2xlID0gdG1wOwogICAgfQoKICAgIC8vIHRlc3QgaWYgc2VnbWVudCBhbmdsZSBpcyBjb250YWluZWQgaW4gYW5nbGUgaW50ZXJ2YWwKICAgIHJldHVybiBmdW5jdGlvbihhKSB7CgogICAgICBpZiAoYSA+PSBzdGFydEFuZ2xlICYmIGEgPD0gZW5kQW5nbGUpIHsKICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgfQoKICAgICAgcmV0dXJuIGZhbHNlOwogICAgfTsKICB9CgogIGZ1bmN0aW9uIHNlbGVjdGVkKCkgewogICAgdmFyIGlkcyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKGFyY3MpLAogICAgICAgIGJydXNoZWQgPSBfXy5kYXRhOwoKICAgIC8vIEdldCB0aGUgaWRzIG9mIHRoZSBjdXJyZW50bHkgYWN0aXZlIGFyY3MuCiAgICBpZHMgPSBpZHMuZmlsdGVyKGZ1bmN0aW9uKGQpIHsKICAgICAgcmV0dXJuICFpc05hTihkKTsKICAgIH0pOwoKICAgIGZ1bmN0aW9uIGNyb3NzZXNTdHJ1bShkLCBpZCkgewogICAgICB2YXIgYXJjID0gYXJjc1tpZF0sCiAgICAgICAgICB0ZXN0ID0gY29udGFpbm1lbnRUZXN0KGFyYyksCiAgICAgICAgICBkMSA9IGFyYy5kaW1zLmxlZnQsCiAgICAgICAgICBkMiA9IGFyYy5kaW1zLnJpZ2h0LAogICAgICAgICAgeTEgPSBfXy5kaW1lbnNpb25zW2QxXS55c2NhbGUsCiAgICAgICAgICB5MiA9IF9fLmRpbWVuc2lvbnNbZDJdLnlzY2FsZSwKICAgICAgICAgIGEgPSBhcmNzLndpZHRoKGlkKSwKICAgICAgICAgIGIgPSB5MShkW2QxXSkgLSB5MihkW2QyXSksCiAgICAgICAgICBjID0gaHlwb3RoZW51c2UoYSwgYiksCiAgICAgICAgICBhbmdsZSA9IE1hdGguYXNpbihiL2MpOwkvLyByYWQgaW4gWy1QSS8yLCBQSS8yXQogICAgICByZXR1cm4gdGVzdChhbmdsZSk7CiAgICB9CgogICAgaWYgKGlkcy5sZW5ndGggPT09IDApIHsgcmV0dXJuIGJydXNoZWQ7IH0KCiAgICByZXR1cm4gYnJ1c2hlZC5maWx0ZXIoZnVuY3Rpb24oZCkgewogICAgICBzd2l0Y2goYnJ1c2gucHJlZGljYXRlKSB7CiAgICAgIGNhc2UgIkFORCI6CiAgICAgICAgcmV0dXJuIGlkcy5ldmVyeShmdW5jdGlvbihpZCkgeyByZXR1cm4gY3Jvc3Nlc1N0cnVtKGQsIGlkKTsgfSk7CiAgICAgIGNhc2UgIk9SIjoKICAgICAgICByZXR1cm4gaWRzLnNvbWUoZnVuY3Rpb24oaWQpIHsgcmV0dXJuIGNyb3NzZXNTdHJ1bShkLCBpZCk7IH0pOwogICAgICBkZWZhdWx0OgogICAgICAgIHRocm93ICJVbmtub3duIGJydXNoIHByZWRpY2F0ZSAiICsgX18uYnJ1c2hQcmVkaWNhdGU7CiAgICAgIH0KICAgIH0pOwogIH0KCiAgZnVuY3Rpb24gcmVtb3ZlU3RydW0oKSB7CiAgICB2YXIgYXJjID0gYXJjc1thcmNzLmFjdGl2ZV0sCiAgICAgICAgc3ZnID0gcGMuc2VsZWN0aW9uLnNlbGVjdCgic3ZnIikuc2VsZWN0KCJnI2FyY3MiKTsKCiAgICBkZWxldGUgYXJjc1thcmNzLmFjdGl2ZV07CiAgICBhcmNzLmFjdGl2ZSA9IHVuZGVmaW5lZDsKICAgIHN2Zy5zZWxlY3RBbGwoImxpbmUjYXJjLSIgKyBhcmMuZGltcy5pKS5yZW1vdmUoKTsKICAgIHN2Zy5zZWxlY3RBbGwoImNpcmNsZSNhcmMtIiArIGFyYy5kaW1zLmkpLnJlbW92ZSgpOwogICAgc3ZnLnNlbGVjdEFsbCgicGF0aCNhcmMtIiArIGFyYy5kaW1zLmkpLnJlbW92ZSgpOwogIH0KCiAgZnVuY3Rpb24gb25EcmFnRW5kKCkgewogICAgcmV0dXJuIGZ1bmN0aW9uKCkgewogICAgICB2YXIgYnJ1c2hlZCA9IF9fLmRhdGEsCiAgICAgICAgICBhcmMgPSBhcmNzW2FyY3MuYWN0aXZlXTsKCiAgICAgIC8vIE9rYXksIHNvbWV3aGF0IHVuZXhwZWN0ZWQsIGJ1dCBub3QgdG90YWxseSB1bnN1cnByaXNpbmcsIGEgbW91c2NsaWNrIGlzCiAgICAgIC8vIGNvbnNpZGVyZWQgYSBkcmFnIHdpdGhvdXQgbW92ZS4gU28gd2UgaGF2ZSB0byBkZWFsIHdpdGggdGhhdCBjYXNlCiAgICAgIGlmIChhcmMgJiYgYXJjLnAxWzBdID09PSBhcmMucDJbMF0gJiYgYXJjLnAxWzFdID09PSBhcmMucDJbMV0pIHsKICAgICAgICByZW1vdmVTdHJ1bShhcmNzKTsKICAgICAgfQoKICAgICAgaWYgKGFyYykgewogICAgCSAgdmFyIGFuZ2xlID0gYXJjcy5zdGFydEFuZ2xlKGFyY3MuYWN0aXZlKTsKCiAgICAJICBhcmMuc3RhcnRBbmdsZSA9IGFuZ2xlOwogICAgICAgICAgYXJjLmVuZEFuZ2xlID0gYW5nbGU7CiAgICAgICAgICBhcmMuYXJjCiAgICAgICAgICAgIC5vdXRlclJhZGl1cyhhcmNzLmxlbmd0aChhcmNzLmFjdGl2ZSkpCiAgICAgICAgICAgIC5zdGFydEFuZ2xlKGFuZ2xlKQogICAgICAgICAgICAuZW5kQW5nbGUoYW5nbGUpOwogICAgICB9CgoKICAgICAgYnJ1c2hlZCA9IHNlbGVjdGVkKGFyY3MpOwogICAgICBhcmNzLmFjdGl2ZSA9IHVuZGVmaW5lZDsKICAgICAgX18uYnJ1c2hlZCA9IGJydXNoZWQ7CiAgICAgIHBjLnJlbmRlckJydXNoZWQoKTsKICAgICAgZXZlbnRzLmJydXNoZW5kLmNhbGwocGMsIF9fLmJydXNoZWQpOwogICAgfTsKICB9CgogIGZ1bmN0aW9uIGJydXNoUmVzZXQoYXJjcykgewogICAgcmV0dXJuIGZ1bmN0aW9uKCkgewogICAgICB2YXIgaWRzID0gT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMoYXJjcykuZmlsdGVyKGZ1bmN0aW9uKGQpIHsKICAgICAgICByZXR1cm4gIWlzTmFOKGQpOwogICAgICB9KTsKCiAgICAgIGlkcy5mb3JFYWNoKGZ1bmN0aW9uKGQpIHsKICAgICAgICBhcmNzLmFjdGl2ZSA9IGQ7CiAgICAgICAgcmVtb3ZlU3RydW0oYXJjcyk7CiAgICAgIH0pOwogICAgICBvbkRyYWdFbmQoYXJjcykoKTsKICAgIH07CiAgfQoKICBmdW5jdGlvbiBpbnN0YWxsKCkgewogICAgdmFyIGRyYWcgPSBkMy5iZWhhdmlvci5kcmFnKCk7CgogICAgLy8gTWFwIG9mIGN1cnJlbnQgYXJjcy4gYXJjcyBhcmUgc3RvcmVkIHBlciBzZWdtZW50IG9mIHRoZSBQQy4gQSBzZWdtZW50LAogICAgLy8gYmVpbmcgdGhlIGFyZWEgYmV0d2VlbiB0d28gYXhlcy4gVGhlIGxlZnQgbW9zdCBhcmVhIGlzIGluZGV4ZWQgYXQgMC4KICAgIGFyY3MuYWN0aXZlID0gdW5kZWZpbmVkOwogICAgLy8gUmV0dXJucyB0aGUgd2lkdGggb2YgdGhlIFBDIHNlZ21lbnQgd2hlcmUgY3VycmVudGx5IGEgYXJjIGlzIGJlaW5nCiAgICAvLyBwbGFjZWQuIE5PVEU6IGV2ZW4gdGhvdWdoIHRoZXkgYXJlIGV2ZW5seSBzcGFjZWQgaW4gb3VyIGN1cnJlbnQKICAgIC8vIGltcGxlbWVudGF0aW9uLCB3ZSBrZWVwIGZvciB3aGVuIG5vbi1ldmVuIHNwYWNlZCBzZWdtZW50cyBhcmUgc3VwcG9ydGVkIGFzCiAgICAvLyB3ZWxsLgogICAgYXJjcy53aWR0aCA9IGZ1bmN0aW9uKGlkKSB7CiAgICAgIHZhciBhcmMgPSBhcmNzW2lkXTsKCiAgICAgIGlmIChhcmMgPT09IHVuZGVmaW5lZCkgewogICAgICAgIHJldHVybiB1bmRlZmluZWQ7CiAgICAgIH0KCiAgICAgIHJldHVybiBhcmMubWF4WCAtIGFyYy5taW5YOwogICAgfTsKCiAgICAvLyByZXR1cm5zIGFuZ2xlcyBpbiBbLVBJLzIsIFBJLzJdCiAgICBhbmdsZSA9IGZ1bmN0aW9uKHAxLCBwMikgewogICAgICAgIHZhciBhID0gcDFbMF0gLSBwMlswXSwKICAgICAgICAJYiA9IHAxWzFdIC0gcDJbMV0sCiAgICAgICAgCWMgPSBoeXBvdGhlbnVzZShhLCBiKTsKCiAgICAgICAgcmV0dXJuIE1hdGguYXNpbihiL2MpOwogICAgfQoKICAgIC8vIHJldHVybnMgYW5nbGVzIGluIFswLCAyICogUEldCiAgICBhcmNzLmVuZEFuZ2xlID0gZnVuY3Rpb24oaWQpIHsKICAgIAl2YXIgYXJjID0gYXJjc1tpZF07CiAgICAJaWYgKGFyYyA9PT0gdW5kZWZpbmVkKSB7CiAgICAgICAgICAgIHJldHVybiB1bmRlZmluZWQ7CiAgICAgICAgfQogICAgCXZhciBzQW5nbGUgPSBhbmdsZShhcmMucDEsIGFyYy5wMiksCiAgICAJCXVBbmdsZSA9IC1zQW5nbGUgKyBNYXRoLlBJIC8gMjsKCiAgICAJaWYgKGFyYy5wMVswXSA+IGFyYy5wMlswXSkgewogICAgCQl1QW5nbGUgPSAyICogTWF0aC5QSSAtIHVBbmdsZTsKICAgIAl9CgogICAgCXJldHVybiB1QW5nbGU7CiAgICB9CgogICAgYXJjcy5zdGFydEFuZ2xlID0gZnVuY3Rpb24oaWQpIHsKICAgIAl2YXIgYXJjID0gYXJjc1tpZF07CiAgICAJaWYgKGFyYyA9PT0gdW5kZWZpbmVkKSB7CiAgICAgICAgICAgIHJldHVybiB1bmRlZmluZWQ7CiAgICAgICAgfQoKICAgIAl2YXIgc0FuZ2xlID0gYW5nbGUoYXJjLnAxLCBhcmMucDMpLAogICAgCQl1QW5nbGUgPSAtc0FuZ2xlICsgTWF0aC5QSSAvIDI7CgogICAgCWlmIChhcmMucDFbMF0gPiBhcmMucDNbMF0pIHsKICAgIAkJdUFuZ2xlID0gMiAqIE1hdGguUEkgLSB1QW5nbGU7CiAgICAJfQoKICAgIAlyZXR1cm4gdUFuZ2xlOwogICAgfQoKICAgIGFyY3MubGVuZ3RoID0gZnVuY3Rpb24oaWQpIHsKICAgIAl2YXIgYXJjID0gYXJjc1tpZF07CgogICAgICAgIGlmIChhcmMgPT09IHVuZGVmaW5lZCkgewogICAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDsKICAgICAgICB9CgogICAgICAgIHZhciBhID0gYXJjLnAxWzBdIC0gYXJjLnAyWzBdLAogICAgICAgIAliID0gYXJjLnAxWzFdIC0gYXJjLnAyWzFdLAogICAgICAgIAljID0gaHlwb3RoZW51c2UoYSwgYik7CgogICAgICAgIHJldHVybihjKTsKICAgIH0KCiAgICBwYy5vbigiYXhlc3Jlb3JkZXIuYXJjcyIsIGZ1bmN0aW9uKCkgewogICAgICB2YXIgaWRzID0gT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMoYXJjcykuZmlsdGVyKGZ1bmN0aW9uKGQpIHsKICAgICAgICByZXR1cm4gIWlzTmFOKGQpOwogICAgICB9KTsKCiAgICAgIC8vIENoZWNrcyBpZiB0aGUgZmlyc3QgZGltZW5zaW9uIGlzIGRpcmVjdGx5IGxlZnQgb2YgdGhlIHNlY29uZCBkaW1lbnNpb24uCiAgICAgIGZ1bmN0aW9uIGNvbnNlY3V0aXZlKGZpcnN0LCBzZWNvbmQpIHsKICAgICAgICB2YXIgbGVuZ3RoID0gZDMua2V5cyhfXy5kaW1lbnNpb25zKS5sZW5ndGg7CiAgICAgICAgcmV0dXJuIGQzLmtleXMoX18uZGltZW5zaW9ucykuc29tZShmdW5jdGlvbihkLCBpKSB7CiAgICAgICAgICByZXR1cm4gKGQgPT09IGZpcnN0KQogICAgICAgICAgICA/IGkgKyBpIDwgbGVuZ3RoICYmIF9fLmRpbWVuc2lvbnNbaSArIDFdID09PSBzZWNvbmQKICAgICAgICAgICAgOiBmYWxzZTsKICAgICAgICB9KTsKICAgICAgfQoKICAgICAgaWYgKGlkcy5sZW5ndGggPiAwKSB7IC8vIFdlIGhhdmUgc29tZSBhcmNzLCB3aGljaCBtaWdodCBuZWVkIHRvIGJlIHJlbW92ZWQuCiAgICAgICAgaWRzLmZvckVhY2goZnVuY3Rpb24oZCkgewogICAgICAgICAgdmFyIGRpbXMgPSBhcmNzW2RdLmRpbXM7CiAgICAgICAgICBhcmNzLmFjdGl2ZSA9IGQ7CiAgICAgICAgICAvLyBJZiB0aGUgdHdvIGRpbWVuc2lvbnMgb2YgdGhlIGN1cnJlbnQgYXJjIGFyZSBub3QgbmV4dCB0byBlYWNoIG90aGVyCiAgICAgICAgICAvLyBhbnkgbW9yZSwgdGhhbiB3ZSdsbCBuZWVkIHRvIHJlbW92ZSB0aGUgYXJjLiBPdGhlcndpc2Ugd2Uga2VlcCBpdC4KICAgICAgICAgIGlmICghY29uc2VjdXRpdmUoZGltcy5sZWZ0LCBkaW1zLnJpZ2h0KSkgewogICAgICAgICAgICByZW1vdmVTdHJ1bShhcmNzKTsKICAgICAgICAgIH0KICAgICAgICB9KTsKICAgICAgICBvbkRyYWdFbmQoYXJjcykoKTsKICAgICAgfQogICAgfSk7CgogICAgLy8gQWRkIGEgbmV3IHN2ZyBncm91cCBpbiB3aGljaCB3ZSBkcmF3IHRoZSBhcmNzLgogICAgcGMuc2VsZWN0aW9uLnNlbGVjdCgic3ZnIikuYXBwZW5kKCJnIikKICAgICAgLmF0dHIoImlkIiwgImFyY3MiKQogICAgICAuYXR0cigidHJhbnNmb3JtIiwgInRyYW5zbGF0ZSgiICsgX18ubWFyZ2luLmxlZnQgKyAiLCIgKyBfXy5tYXJnaW4udG9wICsgIikiKTsKCiAgICAvLyBJbnN0YWxsIHRoZSByZXF1aXJlZCBicnVzaFJlc2V0IGZ1bmN0aW9uCiAgICBwYy5icnVzaFJlc2V0ID0gYnJ1c2hSZXNldChhcmNzKTsKCiAgICBkcmFnCiAgICAgIC5vbigiZHJhZ3N0YXJ0Iiwgb25EcmFnU3RhcnQoYXJjcykpCiAgICAgIC5vbigiZHJhZyIsIG9uRHJhZyhhcmNzKSkKICAgICAgLm9uKCJkcmFnZW5kIiwgb25EcmFnRW5kKGFyY3MpKTsKCiAgICAvLyBOT1RFOiBUaGUgc3R5bGluZyBuZWVkcyB0byBiZSBkb25lIGhlcmUgYW5kIG5vdCBpbiB0aGUgY3NzLiBUaGlzIGlzIGJlY2F1c2UKICAgIC8vICAgICAgIGZvciAxRCBicnVzaGluZywgdGhlIGNhbnZhcyBsYXllcnMgc2hvdWxkIG5vdCBsaXN0ZW4gdG8KICAgIC8vICAgICAgIHBvaW50ZXItZXZlbnRzLgogICAgc3RydW1SZWN0ID0gcGMuc2VsZWN0aW9uLnNlbGVjdCgic3ZnIikuaW5zZXJ0KCJyZWN0IiwgImcjYXJjcyIpCiAgICAgIC5hdHRyKCJpZCIsICJhcmMtZXZlbnRzIikKICAgICAgLmF0dHIoIngiLCBfXy5tYXJnaW4ubGVmdCkKICAgICAgLmF0dHIoInkiLCBfXy5tYXJnaW4udG9wKQogICAgICAuYXR0cigid2lkdGgiLCB3KCkpCiAgICAgIC5hdHRyKCJoZWlnaHQiLCBoKCkgKyAyKQogICAgICAuc3R5bGUoIm9wYWNpdHkiLCAwKQogICAgICAuY2FsbChkcmFnKTsKICB9CgogIGJydXNoLm1vZGVzWyJhbmd1bGFyIl0gPSB7CiAgICBpbnN0YWxsOiBpbnN0YWxsLAogICAgdW5pbnN0YWxsOiBmdW5jdGlvbigpIHsKICAgICAgcGMuc2VsZWN0aW9uLnNlbGVjdCgic3ZnIikuc2VsZWN0KCJnI2FyY3MiKS5yZW1vdmUoKTsKICAgICAgcGMuc2VsZWN0aW9uLnNlbGVjdCgic3ZnIikuc2VsZWN0KCJyZWN0I2FyYy1ldmVudHMiKS5yZW1vdmUoKTsKICAgICAgcGMub24oImF4ZXNyZW9yZGVyLmFyY3MiLCB1bmRlZmluZWQpOwogICAgICBkZWxldGUgcGMuYnJ1c2hSZXNldDsKCiAgICAgIHN0cnVtUmVjdCA9IHVuZGVmaW5lZDsKICAgIH0sCiAgICBzZWxlY3RlZDogc2VsZWN0ZWQsCiAgICBicnVzaFN0YXRlOiBmdW5jdGlvbiAoKSB7IHJldHVybiBhcmNzOyB9CiAgfTsKCn0oKSk7CnBjLmludGVyYWN0aXZlID0gZnVuY3Rpb24oKSB7CiAgZmxhZ3MuaW50ZXJhY3RpdmUgPSB0cnVlOwogIHJldHVybiB0aGlzOwp9OwoKLy8gZXhwb3NlIGEgZmV3IG9iamVjdHMKcGMueHNjYWxlID0geHNjYWxlOwpwYy5jdHggPSBjdHg7CnBjLmNhbnZhcyA9IGNhbnZhczsKcGMuZyA9IGZ1bmN0aW9uKCkgeyByZXR1cm4gZzsgfTsKCi8vIHJlc2NhbGUgZm9yIGhlaWdodCwgd2lkdGggYW5kIG1hcmdpbnMKLy8gVE9ETyBjdXJyZW50bHkgYXNzdW1lcyBjaGFydCBpcyBicnVzaGFibGUsIGFuZCBkZXN0cm95cyBvbGQgYnJ1c2hlcwpwYy5yZXNpemUgPSBmdW5jdGlvbigpIHsKICAvLyBzZWxlY3Rpb24gc2l6ZQogIHBjLnNlbGVjdGlvbi5zZWxlY3QoInN2ZyIpCiAgICAuYXR0cigid2lkdGgiLCBfXy53aWR0aCkKICAgIC5hdHRyKCJoZWlnaHQiLCBfXy5oZWlnaHQpCiAgcGMuc3ZnLmF0dHIoInRyYW5zZm9ybSIsICJ0cmFuc2xhdGUoIiArIF9fLm1hcmdpbi5sZWZ0ICsgIiwiICsgX18ubWFyZ2luLnRvcCArICIpIik7CgogIC8vIEZJWE1FOiB0aGUgY3VycmVudCBicnVzaCBzdGF0ZSBzaG91bGQgcGFzcyB0aHJvdWdoCiAgaWYgKGZsYWdzLmJydXNoYWJsZSkgcGMuYnJ1c2hSZXNldCgpOwoKICAvLyBzY2FsZXMKICBwYy5hdXRvc2NhbGUoKTsKCiAgLy8gYXhlcywgZGVzdHJveXMgb2xkIGJydXNoZXMuCiAgaWYgKGcpIHBjLmNyZWF0ZUF4ZXMoKTsKICBpZiAoZmxhZ3MuYnJ1c2hhYmxlKSBwYy5icnVzaGFibGUoKTsKICBpZiAoZmxhZ3MucmVvcmRlcmFibGUpIHBjLnJlb3JkZXJhYmxlKCk7CgogIGV2ZW50cy5yZXNpemUuY2FsbCh0aGlzLCB7d2lkdGg6IF9fLndpZHRoLCBoZWlnaHQ6IF9fLmhlaWdodCwgbWFyZ2luOiBfXy5tYXJnaW59KTsKICByZXR1cm4gdGhpczsKfTsKCi8vIGhpZ2hsaWdodCBhbiBhcnJheSBvZiBkYXRhCnBjLmhpZ2hsaWdodCA9IGZ1bmN0aW9uKGRhdGEpIHsKICBpZiAoYXJndW1lbnRzLmxlbmd0aCA9PT0gMCkgewogICAgcmV0dXJuIF9fLmhpZ2hsaWdodGVkOwogIH0KCiAgX18uaGlnaGxpZ2h0ZWQgPSBkYXRhOwogIHBjLmNsZWFyKCJoaWdobGlnaHQiKTsKICBkMy5zZWxlY3RBbGwoW2NhbnZhcy5mb3JlZ3JvdW5kLCBjYW52YXMuYnJ1c2hlZF0pLmNsYXNzZWQoImZhZGVkIiwgdHJ1ZSk7CiAgZGF0YS5mb3JFYWNoKHBhdGhfaGlnaGxpZ2h0KTsKICBldmVudHMuaGlnaGxpZ2h0LmNhbGwodGhpcywgZGF0YSk7CiAgcmV0dXJuIHRoaXM7Cn07CgovLyBjbGVhciBoaWdobGlnaHRpbmcKcGMudW5oaWdobGlnaHQgPSBmdW5jdGlvbigpIHsKICBfXy5oaWdobGlnaHRlZCA9IFtdOwogIHBjLmNsZWFyKCJoaWdobGlnaHQiKTsKICBkMy5zZWxlY3RBbGwoW2NhbnZhcy5mb3JlZ3JvdW5kLCBjYW52YXMuYnJ1c2hlZF0pLmNsYXNzZWQoImZhZGVkIiwgZmFsc2UpOwogIHJldHVybiB0aGlzOwp9OwoKLy8gY2FsY3VsYXRlIDJkIGludGVyc2VjdGlvbiBvZiBsaW5lIGEtPmIgd2l0aCBsaW5lIGMtPmQKLy8gcG9pbnRzIGFyZSBvYmplY3RzIHdpdGggeCBhbmQgeSBwcm9wZXJ0aWVzCnBjLmludGVyc2VjdGlvbiA9ICBmdW5jdGlvbihhLCBiLCBjLCBkKSB7CiAgcmV0dXJuIHsKICAgIHg6ICgoYS54ICogYi55IC0gYS55ICogYi54KSAqIChjLnggLSBkLngpIC0gKGEueCAtIGIueCkgKiAoYy54ICogZC55IC0gYy55ICogZC54KSkgLyAoKGEueCAtIGIueCkgKiAoYy55IC0gZC55KSAtIChhLnkgLSBiLnkpICogKGMueCAtIGQueCkpLAogICAgeTogKChhLnggKiBiLnkgLSBhLnkgKiBiLngpICogKGMueSAtIGQueSkgLSAoYS55IC0gYi55KSAqIChjLnggKiBkLnkgLSBjLnkgKiBkLngpKSAvICgoYS54IC0gYi54KSAqIChjLnkgLSBkLnkpIC0gKGEueSAtIGIueSkgKiAoYy54IC0gZC54KSkKICB9Owp9OwoKZnVuY3Rpb24gcG9zaXRpb24oZCkgewogIGlmICh4c2NhbGUucmFuZ2UoKS5sZW5ndGggPT09IDApIHsKICAgIHhzY2FsZS5yYW5nZVBvaW50cyhbMCwgdygpXSwgMSk7CiAgfQogIHZhciB2ID0gZHJhZ2dpbmdbZF07CiAgcmV0dXJuIHYgPT0gbnVsbCA/IHhzY2FsZShkKSA6IHY7Cn0KCi8vIE1lcmdlcyB0aGUgY2FudmFzZXMgYW5kIFNWRyBlbGVtZW50cyBpbnRvIG9uZSBjYW52YXMgZWxlbWVudCB3aGljaCBpcyB0aGVuIHBhc3NlZCBpbnRvIHRoZSBjYWxsYmFjawovLyAoc28geW91IGNhbiBjaG9vc2UgdG8gc2F2ZSBpdCB0byBkaXNrLCBldGMuKQpwYy5tZXJnZVBhcmNvb3JkcyA9IGZ1bmN0aW9uKGNhbGxiYWNrKSB7CiAgLy8gUmV0aW5hIGRpc3BsYXksIGV0Yy4KICB2YXIgZGV2aWNlUGl4ZWxSYXRpbyA9IHdpbmRvdy5kZXZpY2VQaXhlbFJhdGlvIHx8IDE7CgogIC8vIENyZWF0ZSBhIGNhbnZhcyBlbGVtZW50IHRvIHN0b3JlIHRoZSBtZXJnZWQgY2FudmFzZXMKICB2YXIgbWVyZ2VkQ2FudmFzID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiY2FudmFzIik7CiAgbWVyZ2VkQ2FudmFzLndpZHRoID0gcGMuY2FudmFzLmZvcmVncm91bmQuY2xpZW50V2lkdGggKiBkZXZpY2VQaXhlbFJhdGlvCiAgbWVyZ2VkQ2FudmFzLmhlaWdodCA9IChwYy5jYW52YXMuZm9yZWdyb3VuZC5jbGllbnRIZWlnaHQgKyAzMCkgKiBkZXZpY2VQaXhlbFJhdGlvOwogIG1lcmdlZENhbnZhcy5zdHlsZS53aWR0aCA9IG1lcmdlZENhbnZhcy53aWR0aCAvIGRldmljZVBpeGVsUmF0aW8gKyAicHgiOwogIG1lcmdlZENhbnZhcy5zdHlsZS5oZWlnaHQgPSBtZXJnZWRDYW52YXMuaGVpZ2h0IC8gZGV2aWNlUGl4ZWxSYXRpbyArICJweCI7CgogIC8vIEdpdmUgdGhlIGNhbnZhcyBhIHdoaXRlIGJhY2tncm91bmQKICB2YXIgY29udGV4dCA9IG1lcmdlZENhbnZhcy5nZXRDb250ZXh0KCIyZCIpOwogIGNvbnRleHQuZmlsbFN0eWxlID0gIiNmZmZmZmYiOwogIGNvbnRleHQuZmlsbFJlY3QoMCwgMCwgbWVyZ2VkQ2FudmFzLndpZHRoLCBtZXJnZWRDYW52YXMuaGVpZ2h0KTsKCiAgLy8gTWVyZ2UgYWxsIHRoZSBjYW52YXNlcwogIGZvciAodmFyIGtleSBpbiBwYy5jYW52YXMpIHsKICAgIGNvbnRleHQuZHJhd0ltYWdlKHBjLmNhbnZhc1trZXldLCAwLCAyNCAqIGRldmljZVBpeGVsUmF0aW8sIG1lcmdlZENhbnZhcy53aWR0aCwgbWVyZ2VkQ2FudmFzLmhlaWdodCAtIDMwICogZGV2aWNlUGl4ZWxSYXRpbyk7CiAgfQoKICAvLyBBZGQgU1ZHIGVsZW1lbnRzIHRvIGNhbnZhcwogIHZhciBET01VUkwgPSB3aW5kb3cuVVJMIHx8IHdpbmRvdy53ZWJraXRVUkwgfHwgd2luZG93OwogIHZhciBzZXJpYWxpemVyID0gbmV3IFhNTFNlcmlhbGl6ZXIoKTsKICB2YXIgc3ZnU3RyID0gc2VyaWFsaXplci5zZXJpYWxpemVUb1N0cmluZyhwYy5zZWxlY3Rpb24uc2VsZWN0KCJzdmciKVswXVswXSk7CgogIC8vIENyZWF0ZSBhIERhdGEgVVJJLgogIHZhciBzcmMgPSAnZGF0YTppbWFnZS9zdmcreG1sO2Jhc2U2NCwnICsgd2luZG93LmJ0b2Eoc3ZnU3RyKTsKICB2YXIgaW1nID0gbmV3IEltYWdlKCk7CiAgaW1nLm9ubG9hZCA9IGZ1bmN0aW9uICgpIHsKICAgIGNvbnRleHQuZHJhd0ltYWdlKGltZywgMCwgMCwgaW1nLndpZHRoICogZGV2aWNlUGl4ZWxSYXRpbywgaW1nLmhlaWdodCAqIGRldmljZVBpeGVsUmF0aW8pOwogICAgaWYgKHR5cGVvZiBjYWxsYmFjayA9PT0gImZ1bmN0aW9uIikgewogICAgICBjYWxsYmFjayhtZXJnZWRDYW52YXMpOwogICAgfQogIH07CiAgaW1nLnNyYyA9IHNyYzsKfQpwYy52ZXJzaW9uID0gIjAuNy4wIjsKICAvLyB0aGlzIGRlc2NyaXB0aXZlIHRleHQgc2hvdWxkIGxpdmUgd2l0aCBvdGhlciBpbnRyb3NwZWN0aXZlIG1ldGhvZHMKICBwYy50b1N0cmluZyA9IGZ1bmN0aW9uKCkgeyByZXR1cm4gIlBhcmFsbGVsIENvb3JkaW5hdGVzOiAiICsgZDMua2V5cyhfXy5kaW1lbnNpb25zKS5sZW5ndGggKyAiIGRpbWVuc2lvbnMgKCIgKyBkMy5rZXlzKF9fLmRhdGFbMF0pLmxlbmd0aCArICIgdG90YWwpICwgIiArIF9fLmRhdGEubGVuZ3RoICsgIiByb3dzIjsgfTsKCiAgcmV0dXJuIHBjOwp9OwoKZDMucmVuZGVyUXVldWUgPSAoZnVuY3Rpb24oZnVuYykgewogIHZhciBfcXVldWUgPSBbXSwgICAgICAgICAgICAgICAgICAvLyBkYXRhIHRvIGJlIHJlbmRlcmVkCiAgICAgIF9yYXRlID0gMTAsICAgICAgICAgICAgICAgICAgIC8vIG51bWJlciBvZiBjYWxscyBwZXIgZnJhbWUKICAgICAgX2NsZWFyID0gZnVuY3Rpb24oKSB7fSwgICAgICAgLy8gY2xlYXJpbmcgZnVuY3Rpb24KICAgICAgX2kgPSAwOyAgICAgICAgICAgICAgICAgICAgICAgLy8gY3VycmVudCBpdGVyYXRpb24KCiAgdmFyIHJxID0gZnVuY3Rpb24oZGF0YSkgewogICAgaWYgKGRhdGEpIHJxLmRhdGEoZGF0YSk7CiAgICBycS5pbnZhbGlkYXRlKCk7CiAgICBfY2xlYXIoKTsKICAgIHJxLnJlbmRlcigpOwogIH07CgogIHJxLnJlbmRlciA9IGZ1bmN0aW9uKCkgewogICAgX2kgPSAwOwogICAgdmFyIHZhbGlkID0gdHJ1ZTsKICAgIHJxLmludmFsaWRhdGUgPSBmdW5jdGlvbigpIHsgdmFsaWQgPSBmYWxzZTsgfTsKCiAgICBmdW5jdGlvbiBkb0ZyYW1lKCkgewogICAgICBpZiAoIXZhbGlkKSByZXR1cm4gdHJ1ZTsKICAgICAgaWYgKF9pID4gX3F1ZXVlLmxlbmd0aCkgcmV0dXJuIHRydWU7CgogICAgICAvLyBUeXBpY2FsIGQzIGJlaGF2aW9yIGlzIHRvIHBhc3MgYSBkYXRhIGl0ZW0gKmFuZCogaXRzIGluZGV4LiBBcyB0aGUKICAgICAgLy8gcmVuZGVyIHF1ZXVlIHNwbGl0cyB0aGUgb3JpZ2luYWwgZGF0YSBzZXQsIHdlJ2xsIGhhdmUgdG8gYmUgc2xpZ2h0bHkKICAgICAgLy8gbW9yZSBjYXJlZnVsbCBhYm91dCBwYXNzaW5nIHRoZSBjb3JyZWN0IGluZGV4IHdpdGggdGhlIGRhdGEgaXRlbS4KICAgICAgdmFyIGVuZCA9IE1hdGgubWluKF9pICsgX3JhdGUsIF9xdWV1ZS5sZW5ndGgpOwogICAgICBmb3IgKHZhciBpID0gX2k7IGkgPCBlbmQ7IGkrKykgewogICAgICAgIGZ1bmMoX3F1ZXVlW2ldLCBpKTsKICAgICAgfQogICAgICBfaSArPSBfcmF0ZTsKICAgIH0KCiAgICBkMy50aW1lcihkb0ZyYW1lKTsKICB9OwoKICBycS5kYXRhID0gZnVuY3Rpb24oZGF0YSkgewogICAgcnEuaW52YWxpZGF0ZSgpOwogICAgX3F1ZXVlID0gZGF0YS5zbGljZSgwKTsKICAgIHJldHVybiBycTsKICB9OwoKICBycS5yYXRlID0gZnVuY3Rpb24odmFsdWUpIHsKICAgIGlmICghYXJndW1lbnRzLmxlbmd0aCkgcmV0dXJuIF9yYXRlOwogICAgX3JhdGUgPSB2YWx1ZTsKICAgIHJldHVybiBycTsKICB9OwoKICBycS5yZW1haW5pbmcgPSBmdW5jdGlvbigpIHsKICAgIHJldHVybiBfcXVldWUubGVuZ3RoIC0gX2k7CiAgfTsKCiAgLy8gY2xlYXIgdGhlIGNhbnZhcwogIHJxLmNsZWFyID0gZnVuY3Rpb24oZnVuYykgewogICAgaWYgKCFhcmd1bWVudHMubGVuZ3RoKSB7CiAgICAgIF9jbGVhcigpOwogICAgICByZXR1cm4gcnE7CiAgICB9CiAgICBfY2xlYXIgPSBmdW5jOwogICAgcmV0dXJuIHJxOwogIH07CgogIHJxLmludmFsaWRhdGUgPSBmdW5jdGlvbigpIHt9OwoKICByZXR1cm4gcnE7Cn0pOwo="></script> <script src="data:application/x-javascript;base64,SFRNTFdpZGdldHMud2lkZ2V0KHsKCiAgbmFtZTogJ3BhcmNvb3JkcycsCgogIHR5cGU6ICdvdXRwdXQnLAoKICBpbml0aWFsaXplOiBmdW5jdGlvbihlbCwgd2lkdGgsIGhlaWdodCkgewoKICAgIHJldHVybiB7IH0KCiAgfSwKCiAgcmVuZGVyVmFsdWU6IGZ1bmN0aW9uKGVsLCB4LCBpbnN0YW5jZSkgewoKICAgIC8vIGJhc2ljIGNoZWNrIG9mIGRhdGEgdG8gbWFrZSBzdXJlIHdlIHJlY2VpdmVkCiAgICAvLyAgIGluIGNvbHVtbiBmb3JtYXQgb3Igb2JqZWN0IG9mIGFycmF5cwogICAgLy8gICB3aGljaCBpcyB0aGUgZGVmYXVsdCBiZWhhdmlvciBvZiBodG1sd2lkZ2V0cwogICAgLy8gICByZWFzb24gZm9yIHRoaXMgY2hlY2sgaXMKICAgIC8vICAgICAgZnV0dXJlLXByb29maW5nIGlmIGJlaGF2aW9yIGNoYW5nZXMKICAgIC8vICAgICAgc29tZW9uZSBzdXBwbGllcyBkYXRhIGluIGFuIGF0eXBpY2FsIHdheQogICAgaWYoIHguZGF0YS5jb25zdHJ1Y3Rvci5uYW1lID09PSAiT2JqZWN0IiApewogICAgICAvLyB1c2UgSFRNTFdpZGdldHMgZnVuY3Rpb24gdG8gY29udmVydCB0byBhbiBhcnJheSBvZiBvYmplY3RzIChyb3cgZm9ybWF0KQovKgogICAgICAvLyAgd2l0aCBleHBlcmltZW50YWwgZGltZW5zaW9ucwogICAgICAvLyAgYnVnIHdpdGggaGlkZUF4aXMgc28gcmVtb3ZlIHJvd25hbWVzIGZyb20gZGF0YQogICAgICBpZiggdHlwZW9mIHgub3B0aW9ucy5yb3duYW1lcyA9PSAidW5kZWZpbmVkIiB8fAogICAgICAgICAgeC5vcHRpb25zLnJvd25hbWVzID09PSBmYWxzZQogICAgICApIHsKICAgICAgICB2YXIgdGVtcGRhdGEgPSB7fTsKICAgICAgICBPYmplY3Qua2V5cyh4LmRhdGEpCiAgICAgICAgICAgICAgLmZpbHRlcihmdW5jdGlvbihreSkge3JldHVybiBreSE9PSJuYW1lcyJ9ICkKICAgICAgICAgICAgICAubWFwKGZ1bmN0aW9uKGt5KXsKICAgICAgICAgICAgICAgIHRlbXBkYXRhW2t5XSA9IHguZGF0YVtreV07CiAgICAgICAgICAgICAgfSkKICAgICAgICB4LmRhdGEgPSB0ZW1wZGF0YTsKICAgICAgfQoqLwogICAgICB4LmRhdGEgPSBIVE1MV2lkZ2V0cy5kYXRhZnJhbWVUb0QzKCB4LmRhdGEgKQogICAgfQoKICAgIC8vIGRlbGV0ZSBhbGwgY2hpbGRyZW4gb2YgZWwKICAgIC8vICBwb3NzaWJseSByZXZpc2l0IHRvIHNlZSBpZiB3ZSBzaG91bGQgYmUgYSBsaXR0bGUgbW9yZSBkZWxpY2F0ZQogICAgZDMuc2VsZWN0KCBlbCApLnNlbGVjdEFsbCgiKiIpLnJlbW92ZSgpOwoKICAgIC8vIGNyZWF0ZSBvdXIgcGFyYWxsZWwgY29vcmRpbmF0ZXMKICAgIHZhciBwYXJjb29yZHMgPSBkMy5wYXJjb29yZHMoKSgiIyIgKyBlbC5pZCkKICAgICAgLmRhdGEoIHguZGF0YSApOwoKICAgIC8vaWRlbnRpZnkgdGhlIGJydXNoZWQgZWxlbWVudHMgYW5kIHJldHVybiB0aG9zZSBkYXRhIElEcyB0byBSc2hpbnkKICAgIC8vdGhlIHBhcmNvb3Jkcy5vbigiYnJ1c2giLGZ1bmN0aW9uKGQpKXt9IG9ubHkgd29ya3Mgd2l0aCAxRC1heGVzIHNlbGVjdGlvbgogICAgaWYgKEhUTUxXaWRnZXRzLnNoaW55TW9kZSl7CiAgICAgIHBhcmNvb3Jkcy5vbigicmVuZGVyIiwgZnVuY3Rpb24oKSB7CiAgICAgICAgdmFyIGlkcyA9IFtdOwogICAgICAgIGlmKHRoaXMuYnJ1c2hlZCgpKXsKICAgICAgICAgIGlkcyA9IHRoaXMuYnJ1c2hlZCgpLm1hcChmdW5jdGlvbihkKXsKICAgICAgICAgICAgcmV0dXJuIGQubmFtZXM7CiAgICAgICAgICB9KQogICAgICAgIH0KCiAgICAgICAgLy9yZXR1cm4gdGhlIGJydXNoZWQgcm93IG5hbWVzCiAgICAgICAgaWYoU2hpbnkub25JbnB1dENoYW5nZSl7CiAgICAgICAgICBTaGlueS5vbklucHV0Q2hhbmdlKGVsLmlkICsgIl9icnVzaGVkX3Jvd19uYW1lcyIsIGlkcyk7CiAgICAgICAgfQogICAgICB9KTsKICAgIH0KCiAgICAvLyBoYW5kbGUgZGltZW5zaW9uczsgIGl0IGFwcGVhcnMgdGhhdCBwYXJjb29yZHMKICAgIC8vICAgZGV0ZWN0RGltZW5zaW9ucyBkb2VzIG5vdCBydW4gaWYgY3VzdG9tIGRpbWVuc2lvbnMKICAgIC8vICAgYXJlIHByb3ZpZGVkLCBzbyB3ZSdsbCBuZWVkIHRvIGRldGVjdERpbWVuc2lvbnMKICAgIC8vICAgYW5kIHRoZW4gaW4gYW55IHRoYXQgYXJlIHNwZWNpZmllZAogICAgaWYoIHgub3B0aW9ucy5kaW1lbnNpb25zICl7CiAgICAgIHBhcmNvb3Jkcy5kZXRlY3REaW1lbnNpb25zKCk7CiAgICAgIHZhciBkaW1zID0gcGFyY29vcmRzLmRpbWVuc2lvbnMoKTsKICAgICAgT2JqZWN0LmtleXMoeC5vcHRpb25zLmRpbWVuc2lvbnMpLm1hcChmdW5jdGlvbihrKXsKICAgICAgICBkaW1zW2tdID0geC5vcHRpb25zLmRpbWVuc2lvbnNba107CiAgICAgIH0pCiAgICAgIHgub3B0aW9ucy5kaW1lbnNpb25zID0gZGltczsKICAgIH0KCiAgICAvLyBjdXN0b21pemUgb3VyIHBhcmNvb3JkcyBhY2NvcmRpbmcgdG8gb3B0aW9ucwogICAgT2JqZWN0LmtleXMoIHgub3B0aW9ucyApLmZpbHRlcihmdW5jdGlvbihrKXsgcmV0dXJuIGsgIT09ICJyZW9yZGVyYWJsZSIgJiYgayAhPT0gImJydXNoTW9kZSIgJiYgayAhPT0gImJydXNoUHJlZGljYXRlIiAmJiBrIT09ICJjb2xvciIgJiYgayE9PSJyb3duYW1lcyJ9KS5tYXAoIGZ1bmN0aW9uKGspIHsKICAgICAgLy8gaWYgdGhlIGtleSBleGlzdHMgd2l0aGluIHBhcmNvb3JkcwogICAgICBpZiAoIHBhcmNvb3Jkc1trXSApewogICAgICAgIGlmKCB0eXBlb2YgeC5vcHRpb25zW2tdID09PSAiYm9vbGVhbiIgKXsKICAgICAgICAgIHRyeSB7CiAgICAgICAgICAgIHBhcmNvb3Jkc1trXSgpOwogICAgICAgICAgfSBjYXRjaChlKSB7CiAgICAgICAgICAgIGNvbnNvbGUubG9nKCAia2V5L29wdGlvbjogIiArIGsgKyAiIGRpZCBub3Qgd29yayBzbyBpZ25vcmUgZm9yIG5vdy4iICkKICAgICAgICAgIH0KICAgICAgICB9IGVsc2UgewogICAgICAgICAgdHJ5ewogICAgICAgICAgICBwYXJjb29yZHNba10oIHgub3B0aW9uc1trXSApOwogICAgICAgICAgfSBjYXRjaChlKSB7CiAgICAgICAgICAgIGNvbnNvbGUubG9nKCAia2V5L29wdGlvbjogIiArIGsgKyAiIHdpdGggdmFsdWUgIiArIHgub3B0aW9uc1trXSArICJkaWQgbm90IHdvcmsgc28gaWdub3JlIGZvciBub3cuIiApCiAgICAgICAgICB9CiAgICAgICAgfQogICAgICB9IGVsc2UgewogICAgICAgIGNvbnNvbGUubG9nKCAia2V5L29wdGlvbjogIiArIGsgKyAiIGlzIG5vdCBhdmFpbGFibGUgZm9yIGN1c3RvbWl6YXRpb24uIiApCiAgICAgIH0KICAgIH0pCgoKICAgIC8vIGF0IG9uZSBwb2ludCB0aG91Z2h0IEkgc2hvdWxkCiAgICAvLyAgIHJlbW92ZSB0aGlzIGJlY2F1c2Ugb2YgYnVnIHdpdGggZXhwZXJpbWVudGFsIGRpbWVuc2lvbnMKICAgIC8vICAgIGFuZCBoYW5kbGUgZm9yIG5vdyBieSByZW1vdmluZyByb3duYW1lcyBmcm9tIHRoZSBkYXRhCiAgICAvLyBidXQgaW5zdGVhZCBJIGp1c3QgaGFkIHRvIG1vdmUgdGhpcyBwaWVjZSB0byBoZXJlCiAgICBpZiggdHlwZW9mIHgub3B0aW9ucy5yb3duYW1lcyA9PSAidW5kZWZpbmVkIiB8fCB4Lm9wdGlvbnMucm93bmFtZXMgPT09IGZhbHNlICkgewogICAgICAvL3Jvd25hbWVzID0gRiBzbyBoaWRlIHRoZSBheGlzCiAgICAgIHBhcmNvb3Jkcy5oaWRlQXhpcyhbIm5hbWVzIl0pOwogICAgfQoKCiAgICAvLyBjb2xvciBvcHRpb24gd2lsbCByZXF1aXJlIHNvbWUgY3VzdG9tIGhhbmRsaW5nCiAgICAvLyAgIGlmIGNvbG9yIGlzIGFuIG9iamVjdCB3aXRoIGNvbG9yU2NhbGUgYW5kIGNvbG9yQnkKICAgIC8vICAgIHdpbGwgbmVlZCB0byBpdGVyYXRlIHRocm91Z2ggZWFjaCBvZiB0aGUgdW5pcXVlIGdyb3VwIHZhbHVlcwogICAgLy8gICAgYW5kIGFzc2lnbiBhIGNvbG9yCiAgICBpZiAoIHR5cGVvZiB4Lm9wdGlvbnMuY29sb3IgIT09ICJ1bmRlZmluZWQiICkgewogICAgICB2YXIgY29sb3I7CiAgICAgIGlmKCB4Lm9wdGlvbnMuY29sb3IuY29uc3RydWN0b3IubmFtZSA9PT0gIk9iamVjdCIgKSB7CiAgICAgICAgY29sb3JTY2FsZSA9IHgub3B0aW9ucy5jb2xvci5jb2xvclNjYWxlICA/IHgub3B0aW9ucy5jb2xvci5jb2xvclNjYWxlIDogZDMuc2NhbGUuY2F0ZWdvcnkyMGIoKTsKICAgICAgICB2YXIgY29sb3JzID0ge307CiAgICAgICAgZDMua2V5cyhkMy5uZXN0KCkua2V5KGZ1bmN0aW9uKGQpe3JldHVybiBkW3gub3B0aW9ucy5jb2xvci5jb2xvckJ5XX0pLm1hcCh4LmRhdGEpKS5tYXAoZnVuY3Rpb24oYyl7CiAgICAgICAgICBjb2xvcnNbY10gPSBjb2xvclNjYWxlKGMpOwogICAgICAgIH0pCgogICAgICAgIGNvbG9yID0gZnVuY3Rpb24oZCkgewogICAgICAgICAgcmV0dXJuIGNvbG9yc1tkW3gub3B0aW9ucy5jb2xvci5jb2xvckJ5XV07CiAgICAgICAgfTsKICAgICAgfSBlbHNlIHsKICAgICAgICAvLyAgIGNvbG9yIGNhbiBiZSBhIHNpbmdsZSB2YWx1ZSBpbiB3aGljaCBhbGwgbGluZXMgd2lsbCBiZSBzYW1lIGNvbG9yCiAgICAgICAgLy8gICAgZm9yIHRoaXMgd2UgZG8gbm90IG5lZWQgdG8gZG8gYW55dGhpbmcKICAgICAgICBjb2xvciA9IHgub3B0aW9ucy5jb2xvcjsKICAgICAgfQoKICAgICAgcGFyY29vcmRzLmNvbG9yKCBjb2xvciApOwogICAgfQoKICAgIC8vIG5vdyByZW5kZXIgb3VyIHBhcmNvb3JkcwogICAgcGFyY29vcmRzCiAgICAgIC5yZW5kZXIoKQoKICAgIGlmKCB4Lm9wdGlvbnMucmVvcmRlcmFibGUgKSB7CiAgICAgIHBhcmNvb3Jkcy5yZW9yZGVyYWJsZSgpOwogICAgfSBlbHNlIHsKICAgICAgcGFyY29vcmRzLmNyZWF0ZUF4ZXMoKTsKICAgIH0KCiAgICBpZiggeC5vcHRpb25zLmJydXNoTW9kZSApIHsKICAgICAgcGFyY29vcmRzLmJydXNoTW9kZSh4Lm9wdGlvbnMuYnJ1c2hNb2RlKTsKICAgICAgcGFyY29vcmRzLmJydXNoUHJlZGljYXRlKHgub3B0aW9ucy5icnVzaFByZWRpY2F0ZSk7CiAgICB9CgogICAgLy8gaWYgcm93bmFtZXMgPSBUIHRoZW4gcmVtb3ZlIGF4aXMgdGl0bGUKICAgIGlmKCB0eXBlb2YgeC5vcHRpb25zLnJvd25hbWVzICE9PSAidW5kZWZpbmVkIiAmJiB4Lm9wdGlvbnMucm93bmFtZXMgPT09IHRydWUgKSB7CiAgICAgIGQzLnNlbGVjdCgiIyIgKyBlbC5pZCArICIgLmRpbWVuc2lvbiAuYXhpcyA+IHRleHQiKS5yZW1vdmUoKTsKICAgIH0KCiAgICAvLyBzbG9wcHkgYnV0IGZvciBub3cgbGV0J3MgZm9yY2UgdGV4dCBzbWFsbGVyCiAgICAvLyAgID8/IGhvdyBiZXN0IHRvIHByb3ZpZGUgcGFyYW1ldGVyIGluIFIKICAgIGQzLnNlbGVjdEFsbCgiIyIgKyBlbC5pZCArICIgc3ZnIHRleHQiKQogICAgICAgIC5zdHlsZSgiZm9udC1zaXplIiwiMTBweCIpOwoKICAgIC8vIHNldCB1cCBhIGNvbnRhaW5lciBmb3IgdGFza3MgdG8gcGVyZm9ybSBhZnRlciBjb21wbGV0aW9uCiAgICAvLyAgb25lIGV4YW1wbGUgd291bGQgYmUgYWRkIGNhbGxiYWNrcyBmb3IgZXZlbnQgaGFuZGxpbmcKICAgIC8vICBzdHlsaW5nCiAgICBpZiAoISh0eXBlb2YgeC50YXNrcyA9PT0gInVuZGVmaW5lZCIgfHwgeC50YXNrcyA9PT0gbnVsbCkgKXsKICAgICAgaWYgKCAodHlwZW9mIHgudGFza3MubGVuZ3RoID09PSAidW5kZWZpbmVkIikgfHwKICAgICAgICh0eXBlb2YgeC50YXNrcyA9PT0gImZ1bmN0aW9uIiApICkgewogICAgICAgICAvLyBoYW5kbGUgYSBmdW5jdGlvbiBub3QgZW5jbG9zZWQgaW4gYXJyYXkKICAgICAgICAgLy8gc2hvdWxkIGJlIGFibGUgdG8gcmVtb3ZlIG9uY2UgdXNpbmcganNvbmxpdGUKICAgICAgICAgeC50YXNrcyA9IFt4LnRhc2tzXTsKICAgICAgfQogICAgICB4LnRhc2tzLm1hcChmdW5jdGlvbih0KXsKICAgICAgICAvLyBmb3IgZWFjaCB0YXNrcyBjYWxsIHRoZSB0YXNrIHdpdGggZWwgc3VwcGxpZWQgYXMgYHRoaXNgCiAgICAgICAgdC5jYWxsKHtlbDplbCxwYXJjb29yZHM6cGFyY29vcmRzLHg6eH0pOwogICAgICB9KTsKICAgIH0KCgogICAgLy8gdXNlIGV4cGFuZG8gdG8gYXR0YWNoIHBhcmNvb3JkcyB0byB0aGUgZWxlbWVudAogICAgZWwucGFyY29vcmRzID0gcGFyY29vcmRzOwogICAgLy8gYWxzbyBhdHRhY2ggdGhlIHBhcmFsbGVsIGNvb3JkaW5hdGVzIHRvIGluc3RhbmNlCiAgICBpbnN0YW5jZS5wYXJjb29yZHMgPSBwYXJjb29yZHM7CgoKCiAgfSwKCiAgcmVzaXplOiBmdW5jdGlvbihlbCwgd2lkdGgsIGhlaWdodCwgaW5zdGFuY2UpIHsKCiAgfQoKfSk7Cgo="></script> <script src="data:application/javascript; charset=utf-8;base64,ZXZhbChmdW5jdGlvbihlLHQsaSxuLHIscyl7aWYocj1mdW5jdGlvbihlKXtyZXR1cm4odD5lPyIiOnIocGFyc2VJbnQoZS90KSkpKygoZSU9dCk+MzU/U3RyaW5nLmZyb21DaGFyQ29kZShlKzI5KTplLnRvU3RyaW5nKDM2KSl9LCEiIi5yZXBsYWNlKC9eLyxTdHJpbmcpKXtmb3IoO2ktLTspc1tyKGkpXT1uW2ldfHxyKGkpO249W2Z1bmN0aW9uKGUpe3JldHVybiBzW2VdfV0scj1mdW5jdGlvbigpe3JldHVybiJcXHcrIn0saT0xfWZvcig7aS0tOyluW2ldJiYoZT1lLnJlcGxhY2UoUmVnRXhwKCJcXGIiK3IoaSkrIlxcYiIsImciKSxuW2ldKSk7cmV0dXJuIGV9KCI5IDE3PXszaTonMC4xLjMnLDE2OjFlLTZ9O2wgdigpe312LjIzPXtlOmwoaSl7OChpPDF8fGk+Ny40LnEpP3c6Ny40W2ktMV19LDJSOmwoKXs4IDcuNC5xfSwxdTpsKCl7OCBGLjF4KDcuMnUoNykpfSwyNDpsKGEpezkgbj03LjQucTs5IFY9YS40fHxhO28obiE9Vi5xKXs4IDFMfUp7byhGLjEzKDcuNFtuLTFdLVZbbi0xXSk+MTcuMTYpezggMUx9fUgoLS1uKTs4IDJ4fSwxcTpsKCl7OCB2LnUoNy40KX0sMWI6bChhKXs5IGI9W107Ny4yOChsKHgsaSl7Yi4xOShhKHgsaSkpfSk7OCB2LnUoYil9LDI4OmwoYSl7OSBuPTcuNC5xLGs9bixpO0p7aT1rLW47YSg3LjRbaV0saSsxKX1IKC0tbil9LDJxOmwoKXs5IHI9Ny4xdSgpO28ocj09PTApezggNy4xcSgpfTggNy4xYihsKHgpezggeC9yfSl9LDFDOmwoYSl7OSBWPWEuNHx8YTs5IG49Ny40LnEsaz1uLGk7byhuIT1WLnEpezggd305IGI9MCwxRD0wLDFGPTA7Ny4yOChsKHgsaSl7Yis9eCpWW2ktMV07MUQrPXgqeDsxRis9VltpLTFdKlZbaS0xXX0pOzFEPUYuMXgoMUQpOzFGPUYuMXgoMUYpO28oMUQqMUY9PT0wKXs4IHd9OSBjPWIvKDFEKjFGKTtvKGM8LTEpe2M9LTF9byhjPjEpe2M9MX04IEYuMzcoYyl9LDFtOmwoYSl7OSBiPTcuMUMoYSk7OChiPT09dyk/dzooYjw9MTcuMTYpfSwzNDpsKGEpezkgYj03LjFDKGEpOzgoYj09PXcpP3c6KEYuMTMoYi1GLjFBKTw9MTcuMTYpfSwyazpsKGEpezkgYj03LjJ1KGEpOzgoYj09PXcpP3c6KEYuMTMoYik8PTE3LjE2KX0sMmo6bChhKXs5IFY9YS40fHxhO28oNy40LnEhPVYucSl7OCB3fTggNy4xYihsKHgsaSl7OCB4K1ZbaS0xXX0pfSwyQzpsKGEpezkgVj1hLjR8fGE7byg3LjQucSE9Vi5xKXs4IHd9OCA3LjFiKGwoeCxpKXs4IHgtVltpLTFdfSl9LDIyOmwoayl7OCA3LjFiKGwoeCl7OCB4Kmt9KX0seDpsKGspezggNy4yMihrKX0sMnU6bChhKXs5IFY9YS40fHxhOzkgaSwyZz0wLG49Ny40LnE7byhuIT1WLnEpezggd31KezJnKz03LjRbbi0xXSpWW24tMV19SCgtLW4pOzggMmd9LDJmOmwoYSl7OSBCPWEuNHx8YTtvKDcuNC5xIT0zfHxCLnEhPTMpezggd305IEE9Ny40Ozggdi51KFsoQVsxXSpCWzJdKS0oQVsyXSpCWzFdKSwoQVsyXSpCWzBdKS0oQVswXSpCWzJdKSwoQVswXSpCWzFdKS0oQVsxXSpCWzBdKV0pfSwyQTpsKCl7OSBtPTAsbj03LjQucSxrPW4saTtKe2k9ay1uO28oRi4xMyg3LjRbaV0pPkYuMTMobSkpe209Ny40W2ldfX1IKC0tbik7OCBtfSwyWjpsKHgpezkgYT13LG49Ny40LnEsaz1uLGk7SntpPWstbjtvKGE9PT13JiY3LjRbaV09PXgpe2E9aSsxfX1IKC0tbik7OCBhfSwzZzpsKCl7OCBTLjJYKDcuNCl9LDJkOmwoKXs4IDcuMWIobCh4KXs4IEYuMmQoeCl9KX0sMlY6bCh4KXs4IDcuMWIobCh5KXs4KEYuMTMoeS14KTw9MTcuMTYpP3g6eX0pfSwxbzpsKGEpe28oYS5LKXs4IGEuMW8oNyl9OSBWPWEuNHx8YTtvKFYucSE9Ny40LnEpezggd305IGI9MCwyYjs3LjI4KGwoeCxpKXsyYj14LVZbaS0xXTtiKz0yYioyYn0pOzggRi4xeChiKX0sM2E6bChhKXs4IGEuMWgoNyl9LDJUOmwoYSl7OCBhLjFoKDcpfSwxVjpsKHQsYSl7OSBWLFIseCx5LHo7MlMoNy40LnEpezI3IDI6Vj1hLjR8fGE7byhWLnEhPTIpezggd31SPVMuMVIodCkuNDt4PTcuNFswXS1WWzBdO3k9Ny40WzFdLVZbMV07OCB2LnUoW1ZbMF0rUlswXVswXSp4K1JbMF1bMV0qeSxWWzFdK1JbMV1bMF0qeCtSWzFdWzFdKnldKTsxSTsyNyAzOm8oIWEuVSl7OCB3fTkgQz1hLjFyKDcpLjQ7Uj1TLjFSKHQsYS5VKS40O3g9Ny40WzBdLUNbMF07eT03LjRbMV0tQ1sxXTt6PTcuNFsyXS1DWzJdOzggdi51KFtDWzBdK1JbMF1bMF0qeCtSWzBdWzFdKnkrUlswXVsyXSp6LENbMV0rUlsxXVswXSp4K1JbMV1bMV0qeStSWzFdWzJdKnosQ1syXStSWzJdWzBdKngrUlsyXVsxXSp5K1JbMl1bMl0qel0pOzFJOzJQOjggd319LDF0OmwoYSl7byhhLkspezkgUD03LjQuMk8oKTs5IEM9YS4xcihQKS40Ozggdi51KFtDWzBdKyhDWzBdLVBbMF0pLENbMV0rKENbMV0tUFsxXSksQ1syXSsoQ1syXS0oUFsyXXx8MCkpXSl9MWR7OSBRPWEuNHx8YTtvKDcuNC5xIT1RLnEpezggd304IDcuMWIobCh4LGkpezggUVtpLTFdKyhRW2ktMV0teCl9KX19LDFOOmwoKXs5IFY9Ny4xcSgpOzJTKFYuNC5xKXsyNyAzOjFJOzI3IDI6Vi40LjE5KDApOzFJOzJQOjggd304IFZ9LDJuOmwoKXs4J1snKzcuNC4ySygnLCAnKSsnXSd9LDI2OmwoYSl7Ny40PShhLjR8fGEpLjJPKCk7OCA3fX07di51PWwoYSl7OSBWPTI1IHYoKTs4IFYuMjYoYSl9O3YuaT12LnUoWzEsMCwwXSk7di5qPXYudShbMCwxLDBdKTt2Lms9di51KFswLDAsMV0pO3YuMko9bChuKXs5IGE9W107SnthLjE5KEYuMkYoKSl9SCgtLW4pOzggdi51KGEpfTt2LjFqPWwobil7OSBhPVtdO0p7YS4xOSgwKX1IKC0tbik7OCB2LnUoYSl9O2wgUygpe31TLjIzPXtlOmwoaSxqKXtvKGk8MXx8aT43LjQucXx8ajwxfHxqPjcuNFswXS5xKXs4IHd9OCA3LjRbaS0xXVtqLTFdfSwzMzpsKGkpe28oaT43LjQucSl7OCB3fTggdi51KDcuNFtpLTFdKX0sMkU6bChqKXtvKGo+Ny40WzBdLnEpezggd305IGE9W10sbj03LjQucSxrPW4saTtKe2k9ay1uO2EuMTkoNy40W2ldW2otMV0pfUgoLS1uKTs4IHYudShhKX0sMlI6bCgpezh7MkQ6Ny40LnEsMXA6Ny40WzBdLnF9fSwyRDpsKCl7OCA3LjQucX0sMXA6bCgpezggNy40WzBdLnF9LDI0OmwoYSl7OSBNPWEuNHx8YTtvKDFnKE1bMF1bMF0pPT0nMWYnKXtNPVMudShNKS40fW8oNy40LnEhPU0ucXx8Ny40WzBdLnEhPU1bMF0ucSl7OCAxTH05IGI9Ny40LnEsMTU9YixpLEcsMTA9Ny40WzBdLnEsajtKe2k9MTUtYjtHPTEwO0p7aj0xMC1HO28oRi4xMyg3LjRbaV1bal0tTVtpXVtqXSk+MTcuMTYpezggMUx9fUgoLS1HKX1IKC0tYik7OCAyeH0sMXE6bCgpezggUy51KDcuNCl9LDFiOmwoYSl7OSBiPVtdLDEyPTcuNC5xLDE1PTEyLGksRywxMD03LjRbMF0ucSxqO0p7aT0xNS0xMjtHPTEwO2JbaV09W107SntqPTEwLUc7YltpXVtqXT1hKDcuNFtpXVtqXSxpKzEsaisxKX1IKC0tRyl9SCgtLTEyKTs4IFMudShiKX0sMmk6bChhKXs5IE09YS40fHxhO28oMWcoTVswXVswXSk9PScxZicpe009Uy51KE0pLjR9OCg3LjQucT09TS5xJiY3LjRbMF0ucT09TVswXS5xKX0sMmo6bChhKXs5IE09YS40fHxhO28oMWcoTVswXVswXSk9PScxZicpe009Uy51KE0pLjR9byghNy4yaShNKSl7OCB3fTggNy4xYihsKHgsaSxqKXs4IHgrTVtpLTFdW2otMV19KX0sMkM6bChhKXs5IE09YS40fHxhO28oMWcoTVswXVswXSk9PScxZicpe009Uy51KE0pLjR9byghNy4yaShNKSl7OCB3fTggNy4xYihsKHgsaSxqKXs4IHgtTVtpLTFdW2otMV19KX0sMkI6bChhKXs5IE09YS40fHxhO28oMWcoTVswXVswXSk9PScxZicpe009Uy51KE0pLjR9OCg3LjRbMF0ucT09TS5xKX0sMjI6bChhKXtvKCFhLjQpezggNy4xYihsKHgpezggeCphfSl9OSBiPWEuMXU/Mng6MUw7OSBNPWEuNHx8YTtvKDFnKE1bMF1bMF0pPT0nMWYnKXtNPVMudShNKS40fW8oITcuMkIoTSkpezggd305IGQ9Ny40LnEsMTU9ZCxpLEcsMTA9TVswXS5xLGo7OSBlPTcuNFswXS5xLDQ9W10sMjEsMjAsYztKe2k9MTUtZDs0W2ldPVtdO0c9MTA7SntqPTEwLUc7MjE9MDsyMD1lO0p7Yz1lLTIwOzIxKz03LjRbaV1bY10qTVtjXVtqXX1IKC0tMjApOzRbaV1bal09MjF9SCgtLUcpfUgoLS1kKTs5IE09Uy51KDQpOzggYj9NLjJFKDEpOk19LHg6bChhKXs4IDcuMjIoYSl9LDMyOmwoYSxiLGMsZCl7OSBlPVtdLDEyPWMsaSxHLGo7OSBmPTcuNC5xLDFwPTcuNFswXS5xO0p7aT1jLTEyO2VbaV09W107Rz1kO0p7aj1kLUc7ZVtpXVtqXT03LjRbKGEraS0xKSVmXVsoYitqLTEpJTFwXX1IKC0tRyl9SCgtLTEyKTs4IFMudShlKX0sMzE6bCgpezkgYT03LjQucSwxcD03LjRbMF0ucTs5IGI9W10sMTI9MXAsaSxHLGo7SntpPTFwLTEyO2JbaV09W107Rz1hO0p7aj1hLUc7YltpXVtqXT03LjRbal1baV19SCgtLUcpfUgoLS0xMik7OCBTLnUoYil9LDF5OmwoKXs4KDcuNC5xPT03LjRbMF0ucSl9LDJBOmwoKXs5IG09MCwxMj03LjQucSwxNT0xMixpLEcsMTA9Ny40WzBdLnEsajtKe2k9MTUtMTI7Rz0xMDtKe2o9MTAtRztvKEYuMTMoNy40W2ldW2pdKT5GLjEzKG0pKXttPTcuNFtpXVtqXX19SCgtLUcpfUgoLS0xMik7OCBtfSwyWjpsKHgpezkgYT13LDEyPTcuNC5xLDE1PTEyLGksRywxMD03LjRbMF0ucSxqO0p7aT0xNS0xMjtHPTEwO0p7aj0xMC1HO28oNy40W2ldW2pdPT14KXs4e2k6aSsxLGo6aisxfX19SCgtLUcpfUgoLS0xMik7OCB3fSwzMDpsKCl7byghNy4xeSl7OCB3fTkgYT1bXSxuPTcuNC5xLGs9bixpO0p7aT1rLW47YS4xOSg3LjRbaV1baV0pfUgoLS1uKTs4IHYudShhKX0sMUs6bCgpezkgTT03LjFxKCksMWM7OSBuPTcuNC5xLGs9bixpLDFzLDFuPTcuNFswXS5xLHA7SntpPWstbjtvKE0uNFtpXVtpXT09MCl7MmUoaj1pKzE7ajxrO2orKyl7byhNLjRbal1baV0hPTApezFjPVtdOzFzPTFuO0p7cD0xbi0xczsxYy4xOShNLjRbaV1bcF0rTS40W2pdW3BdKX1IKC0tMXMpO00uNFtpXT0xYzsxSX19fW8oTS40W2ldW2ldIT0wKXsyZShqPWkrMTtqPGs7aisrKXs5IGE9TS40W2pdW2ldL00uNFtpXVtpXTsxYz1bXTsxcz0xbjtKe3A9MW4tMXM7MWMuMTkocDw9aT8wOk0uNFtqXVtwXS1NLjRbaV1bcF0qYSl9SCgtLTFzKTtNLjRbal09MWN9fX1IKC0tbik7OCBNfSwzaDpsKCl7OCA3LjFLKCl9LDJ6OmwoKXtvKCE3LjF5KCkpezggd305IE09Ny4xSygpOzkgYT1NLjRbMF1bMF0sbj1NLjQucS0xLGs9bixpO0p7aT1rLW4rMTthPWEqTS40W2ldW2ldfUgoLS1uKTs4IGF9LDNmOmwoKXs4IDcuMnooKX0sMnk6bCgpezgoNy4xeSgpJiY3LjJ6KCk9PT0wKX0sMlk6bCgpe28oITcuMXkoKSl7OCB3fTkgYT03LjRbMF1bMF0sbj03LjQucS0xLGs9bixpO0p7aT1rLW4rMTthKz03LjRbaV1baV19SCgtLW4pOzggYX0sM2U6bCgpezggNy4yWSgpfSwxWTpsKCl7OSBNPTcuMUsoKSwxWT0wOzkgYT03LjQucSwxNT1hLGksRywxMD03LjRbMF0ucSxqO0p7aT0xNS1hO0c9MTA7SntqPTEwLUc7byhGLjEzKE0uNFtpXVtqXSk+MTcuMTYpezFZKys7MUl9fUgoLS1HKX1IKC0tYSk7OCAxWX0sM2Q6bCgpezggNy4xWSgpfSwyVzpsKGEpezkgTT1hLjR8fGE7bygxZyhNWzBdWzBdKT09JzFmJyl7TT1TLnUoTSkuNH05IFQ9Ny4xcSgpLDFwPVQuNFswXS5xOzkgYj1ULjQucSwxNT1iLGksRywxMD1NWzBdLnEsajtvKGIhPU0ucSl7OCB3fUp7aT0xNS1iO0c9MTA7SntqPTEwLUc7VC40W2ldWzFwK2pdPU1baV1bal19SCgtLUcpfUgoLS1iKTs4IFR9LDJ3OmwoKXtvKCE3LjF5KCl8fDcuMnkoKSl7OCB3fTkgYT03LjQucSwxNT1hLGksajs5IE09Ny4yVyhTLkkoYSkpLjFLKCk7OSBiLDFuPU0uNFswXS5xLHAsMWMsMnY7OSBjPVtdLDJjO0p7aT1hLTE7MWM9W107Yj0xbjtjW2ldPVtdOzJ2PU0uNFtpXVtpXTtKe3A9MW4tYjsyYz1NLjRbaV1bcF0vMnY7MWMuMTkoMmMpO28ocD49MTUpe2NbaV0uMTkoMmMpfX1IKC0tYik7TS40W2ldPTFjOzJlKGo9MDtqPGk7aisrKXsxYz1bXTtiPTFuO0p7cD0xbi1iOzFjLjE5KE0uNFtqXVtwXS1NLjRbaV1bcF0qTS40W2pdW2ldKX1IKC0tYik7TS40W2pdPTFjfX1IKC0tYSk7OCBTLnUoYyl9LDNjOmwoKXs4IDcuMncoKX0sMmQ6bCgpezggNy4xYihsKHgpezggRi4yZCh4KX0pfSwyVjpsKHgpezggNy4xYihsKHApezgoRi4xMyhwLXgpPD0xNy4xNik/eDpwfSl9LDJuOmwoKXs5IGE9W107OSBuPTcuNC5xLGs9bixpO0p7aT1rLW47YS4xOSh2LnUoNy40W2ldKS4ybigpKX1IKC0tbik7OCBhLjJLKCdcXG4nKX0sMjY6bChhKXs5IGksND1hLjR8fGE7bygxZyg0WzBdWzBdKSE9JzFmJyl7OSBiPTQucSwxNT1iLEcsMTAsajs3LjQ9W107SntpPTE1LWI7Rz00W2ldLnE7MTA9Rzs3LjRbaV09W107SntqPTEwLUc7Ny40W2ldW2pdPTRbaV1bal19SCgtLUcpfUgoLS1iKTs4IDd9OSBuPTQucSxrPW47Ny40PVtdO0p7aT1rLW47Ny40LjE5KFs0W2ldXSl9SCgtLW4pOzggN319O1MudT1sKGEpezkgTT0yNSBTKCk7OCBNLjI2KGEpfTtTLkk9bChuKXs5IGE9W10saz1uLGksRyxqO0p7aT1rLW47YVtpXT1bXTtHPWs7SntqPWstRzthW2ldW2pdPShpPT1qKT8xOjB9SCgtLUcpfUgoLS1uKTs4IFMudShhKX07Uy4yWD1sKGEpezkgbj1hLnEsaz1uLGk7OSBNPVMuSShuKTtKe2k9ay1uO00uNFtpXVtpXT1hW2ldfUgoLS1uKTs4IE19O1MuMVI9bChiLGEpe28oIWEpezggUy51KFtbRi4xSChiKSwtRi4xRyhiKV0sW0YuMUcoYiksRi4xSChiKV1dKX05IGQ9YS4xcSgpO28oZC40LnEhPTMpezggd305IGU9ZC4xdSgpOzkgeD1kLjRbMF0vZSx5PWQuNFsxXS9lLHo9ZC40WzJdL2U7OSBzPUYuMUcoYiksYz1GLjFIKGIpLHQ9MS1jOzggUy51KFtbdCp4KngrYyx0KngqeS1zKnosdCp4Knorcyp5XSxbdCp4Knkrcyp6LHQqeSp5K2MsdCp5Knotcyp4XSxbdCp4Knotcyp5LHQqeSp6K3MqeCx0KnoqeitjXV0pfTtTLjNiPWwodCl7OSBjPUYuMUgodCkscz1GLjFHKHQpOzggUy51KFtbMSwwLDBdLFswLGMsLXNdLFswLHMsY11dKX07Uy4zOT1sKHQpezkgYz1GLjFIKHQpLHM9Ri4xRyh0KTs4IFMudShbW2MsMCxzXSxbMCwxLDBdLFstcywwLGNdXSl9O1MuMzg9bCh0KXs5IGM9Ri4xSCh0KSxzPUYuMUcodCk7OCBTLnUoW1tjLC1zLDBdLFtzLGMsMF0sWzAsMCwxXV0pfTtTLjJKPWwobixtKXs4IFMuMWoobixtKS4xYihsKCl7OCBGLjJGKCl9KX07Uy4xaj1sKG4sbSl7OSBhPVtdLDEyPW4saSxHLGo7SntpPW4tMTI7YVtpXT1bXTtHPW07SntqPW0tRzthW2ldW2pdPTB9SCgtLUcpfUgoLS0xMik7OCBTLnUoYSl9O2wgMTQoKXt9MTQuMjM9ezI0OmwoYSl7OCg3LjFtKGEpJiY3LjFoKGEuSykpfSwxcTpsKCl7OCAxNC51KDcuSyw3LlUpfSwyVTpsKGEpezkgVj1hLjR8fGE7OCAxNC51KFs3LksuNFswXStWWzBdLDcuSy40WzFdK1ZbMV0sNy5LLjRbMl0rKFZbMl18fDApXSw3LlUpfSwxbTpsKGEpe28oYS5XKXs4IGEuMW0oNyl9OSBiPTcuVS4xQyhhLlUpOzgoRi4xMyhiKTw9MTcuMTZ8fEYuMTMoYi1GLjFBKTw9MTcuMTYpfSwxbzpsKGEpe28oYS5XKXs4IGEuMW8oNyl9byhhLlUpe28oNy4xbShhKSl7OCA3LjFvKGEuSyl9OSBOPTcuVS4yZihhLlUpLjJxKCkuNDs5IEE9Ny5LLjQsQj1hLksuNDs4IEYuMTMoKEFbMF0tQlswXSkqTlswXSsoQVsxXS1CWzFdKSpOWzFdKyhBWzJdLUJbMl0pKk5bMl0pfTFkezkgUD1hLjR8fGE7OSBBPTcuSy40LEQ9Ny5VLjQ7OSBiPVBbMF0tQVswXSwyYT1QWzFdLUFbMV0sMjk9KFBbMl18fDApLUFbMl07OSBjPUYuMXgoYipiKzJhKjJhKzI5KjI5KTtvKGM9PT0wKTggMDs5IGQ9KGIqRFswXSsyYSpEWzFdKzI5KkRbMl0pL2M7OSBlPTEtZCpkOzggRi4xMyhjKkYuMXgoZTwwPzA6ZSkpfX0sMWg6bChhKXs5IGI9Ny4xbyhhKTs4KGIhPT13JiZiPD0xNy4xNil9LDJUOmwoYSl7OCBhLjFoKDcpfSwxdjpsKGEpe28oYS5XKXs4IGEuMXYoNyl9OCghNy4xbShhKSYmNy4xbyhhKTw9MTcuMTYpfSwxVTpsKGEpe28oYS5XKXs4IGEuMVUoNyl9byghNy4xdihhKSl7OCB3fTkgUD03LksuNCxYPTcuVS40LFE9YS5LLjQsWT1hLlUuNDs5IGI9WFswXSwxej1YWzFdLDFCPVhbMl0sMVQ9WVswXSwxUz1ZWzFdLDFNPVlbMl07OSBjPVBbMF0tUVswXSwycz1QWzFdLVFbMV0sMnI9UFsyXS1RWzJdOzkgZD0tYipjLTF6KjJzLTFCKjJyOzkgZT0xVCpjKzFTKjJzKzFNKjJyOzkgZj1iKmIrMXoqMXorMUIqMUI7OSBnPTFUKjFUKzFTKjFTKzFNKjFNOzkgaD1iKjFUKzF6KjFTKzFCKjFNOzkgaz0oZCpnL2YraCplKS8oZy1oKmgpOzggdi51KFtQWzBdK2sqYixQWzFdK2sqMXosUFsyXStrKjFCXSl9LDFyOmwoYSl7byhhLlUpe28oNy4xdihhKSl7OCA3LjFVKGEpfW8oNy4xbShhKSl7OCB3fTkgRD03LlUuNCxFPWEuVS40OzkgYj1EWzBdLDFsPURbMV0sMWs9RFsyXSwxUD1FWzBdLDFPPUVbMV0sMVE9RVsyXTs5IHg9KDFrKjFQLWIqMVEpLHk9KGIqMU8tMWwqMVApLHo9KDFsKjFRLTFrKjFPKTs5IE49di51KFt4KjFRLXkqMU8seSoxUC16KjFRLHoqMU8teCoxUF0pOzkgUD0xMS51KGEuSyxOKTs4IFAuMVUoNyl9MWR7OSBQPWEuNHx8YTtvKDcuMWgoUCkpezggdi51KFApfTkgQT03LksuNCxEPTcuVS40OzkgYj1EWzBdLDFsPURbMV0sMWs9RFsyXSwxdz1BWzBdLDE4PUFbMV0sMWE9QVsyXTs5IHg9YiooUFsxXS0xOCktMWwqKFBbMF0tMXcpLHk9MWwqKChQWzJdfHwwKS0xYSktMWsqKFBbMV0tMTgpLHo9MWsqKFBbMF0tMXcpLWIqKChQWzJdfHwwKS0xYSk7OSBWPXYudShbMWwqeC0xayp6LDFrKnktYip4LGIqei0xbCp5XSk7OSBrPTcuMW8oUCkvVi4xdSgpOzggdi51KFtQWzBdK1YuNFswXSprLFBbMV0rVi40WzFdKmssKFBbMl18fDApK1YuNFsyXSprXSl9fSwxVjpsKHQsYSl7bygxZyhhLlUpPT0nMWYnKXthPTE0LnUoYS4xTigpLHYuayl9OSBSPVMuMVIodCxhLlUpLjQ7OSBDPWEuMXIoNy5LKS40OzkgQT03LksuNCxEPTcuVS40OzkgYj1DWzBdLDFFPUNbMV0sMUo9Q1syXSwxdz1BWzBdLDE4PUFbMV0sMWE9QVsyXTs5IHg9MXctYix5PTE4LTFFLHo9MWEtMUo7OCAxNC51KFtiK1JbMF1bMF0qeCtSWzBdWzFdKnkrUlswXVsyXSp6LDFFK1JbMV1bMF0qeCtSWzFdWzFdKnkrUlsxXVsyXSp6LDFKK1JbMl1bMF0qeCtSWzJdWzFdKnkrUlsyXVsyXSp6XSxbUlswXVswXSpEWzBdK1JbMF1bMV0qRFsxXStSWzBdWzJdKkRbMl0sUlsxXVswXSpEWzBdK1JbMV1bMV0qRFsxXStSWzFdWzJdKkRbMl0sUlsyXVswXSpEWzBdK1JbMl1bMV0qRFsxXStSWzJdWzJdKkRbMl1dKX0sMXQ6bChhKXtvKGEuVyl7OSBBPTcuSy40LEQ9Ny5VLjQ7OSBiPUFbMF0sMTg9QVsxXSwxYT1BWzJdLDJOPURbMF0sMWw9RFsxXSwxaz1EWzJdOzkgYz03LksuMXQoYSkuNDs5IGQ9YisyTiwyaD0xOCsxbCwybz0xYSsxazs5IFE9YS4xcihbZCwyaCwyb10pLjQ7OSBlPVtRWzBdKyhRWzBdLWQpLWNbMF0sUVsxXSsoUVsxXS0yaCktY1sxXSxRWzJdKyhRWzJdLTJvKS1jWzJdXTs4IDE0LnUoYyxlKX0xZCBvKGEuVSl7OCA3LjFWKEYuMUEsYSl9MWR7OSBQPWEuNHx8YTs4IDE0LnUoNy5LLjF0KFtQWzBdLFBbMV0sKFBbMl18fDApXSksNy5VKX19LDFaOmwoYSxiKXthPXYudShhKTtiPXYudShiKTtvKGEuNC5xPT0yKXthLjQuMTkoMCl9byhiLjQucT09Mil7Yi40LjE5KDApfW8oYS40LnE+M3x8Yi40LnE+Myl7OCB3fTkgYz1iLjF1KCk7byhjPT09MCl7OCB3fTcuSz1hOzcuVT12LnUoW2IuNFswXS9jLGIuNFsxXS9jLGIuNFsyXS9jXSk7OCA3fX07MTQudT1sKGEsYil7OSBMPTI1IDE0KCk7OCBMLjFaKGEsYil9OzE0Llg9MTQudSh2LjFqKDMpLHYuaSk7MTQuWT0xNC51KHYuMWooMyksdi5qKTsxNC5aPTE0LnUodi4xaigzKSx2LmspO2wgMTEoKXt9MTEuMjM9ezI0OmwoYSl7OCg3LjFoKGEuSykmJjcuMW0oYSkpfSwxcTpsKCl7OCAxMS51KDcuSyw3LlcpfSwyVTpsKGEpezkgVj1hLjR8fGE7OCAxMS51KFs3LksuNFswXStWWzBdLDcuSy40WzFdK1ZbMV0sNy5LLjRbMl0rKFZbMl18fDApXSw3LlcpfSwxbTpsKGEpezkgYjtvKGEuVyl7Yj03LlcuMUMoYS5XKTs4KEYuMTMoYik8PTE3LjE2fHxGLjEzKEYuMUEtYik8PTE3LjE2KX0xZCBvKGEuVSl7OCA3LlcuMmsoYS5VKX04IHd9LDJrOmwoYSl7OSBiPTcuVy4xQyhhLlcpOzgoRi4xMyhGLjFBLzItYik8PTE3LjE2KX0sMW86bChhKXtvKDcuMXYoYSl8fDcuMWgoYSkpezggMH1vKGEuSyl7OSBBPTcuSy40LEI9YS5LLjQsTj03LlcuNDs4IEYuMTMoKEFbMF0tQlswXSkqTlswXSsoQVsxXS1CWzFdKSpOWzFdKyhBWzJdLUJbMl0pKk5bMl0pfTFkezkgUD1hLjR8fGE7OSBBPTcuSy40LE49Ny5XLjQ7OCBGLjEzKChBWzBdLVBbMF0pKk5bMF0rKEFbMV0tUFsxXSkqTlsxXSsoQVsyXS0oUFsyXXx8MCkpKk5bMl0pfX0sMWg6bChhKXtvKGEuVyl7OCB3fW8oYS5VKXs4KDcuMWgoYS5LKSYmNy4xaChhLksuMmooYS5VKSkpfTFkezkgUD1hLjR8fGE7OSBBPTcuSy40LE49Ny5XLjQ7OSBiPUYuMTMoTlswXSooQVswXS1QWzBdKStOWzFdKihBWzFdLVBbMV0pK05bMl0qKEFbMl0tKFBbMl18fDApKSk7OChiPD0xNy4xNil9fSwxdjpsKGEpe28oMWcoYS5VKT09JzFmJyYmMWcoYS5XKT09JzFmJyl7OCB3fTghNy4xbShhKX0sMVU6bChhKXtvKCE3LjF2KGEpKXs4IHd9byhhLlUpezkgQT1hLksuNCxEPWEuVS40LFA9Ny5LLjQsTj03LlcuNDs5IGI9KE5bMF0qKFBbMF0tQVswXSkrTlsxXSooUFsxXS1BWzFdKStOWzJdKihQWzJdLUFbMl0pKS8oTlswXSpEWzBdK05bMV0qRFsxXStOWzJdKkRbMl0pOzggdi51KFtBWzBdK0RbMF0qYixBWzFdK0RbMV0qYixBWzJdK0RbMl0qYl0pfTFkIG8oYS5XKXs5IGM9Ny5XLjJmKGEuVykuMnEoKTs5IE49Ny5XLjQsQT03LksuNCxPPWEuVy40LEI9YS5LLjQ7OSBkPVMuMWooMiwyKSxpPTA7SChkLjJ5KCkpe2krKztkPVMudShbW05baSUzXSxOWyhpKzEpJTNdXSxbT1tpJTNdLE9bKGkrMSklM11dXSl9OSBlPWQuMncoKS40OzkgeD1OWzBdKkFbMF0rTlsxXSpBWzFdK05bMl0qQVsyXTs5IHk9T1swXSpCWzBdK09bMV0qQlsxXStPWzJdKkJbMl07OSBmPVtlWzBdWzBdKngrZVswXVsxXSp5LGVbMV1bMF0qeCtlWzFdWzFdKnldOzkgZz1bXTsyZSg5IGo9MTtqPD0zO2orKyl7Zy4xOSgoaT09aik/MDpmWyhqKyg1LWkpJTMpJTNdKX04IDE0LnUoZyxjKX19LDFyOmwoYSl7OSBQPWEuNHx8YTs5IEE9Ny5LLjQsTj03LlcuNDs5IGI9KEFbMF0tUFswXSkqTlswXSsoQVsxXS1QWzFdKSpOWzFdKyhBWzJdLShQWzJdfHwwKSkqTlsyXTs4IHYudShbUFswXStOWzBdKmIsUFsxXStOWzFdKmIsKFBbMl18fDApK05bMl0qYl0pfSwxVjpsKHQsYSl7OSBSPVMuMVIodCxhLlUpLjQ7OSBDPWEuMXIoNy5LKS40OzkgQT03LksuNCxOPTcuVy40OzkgYj1DWzBdLDFFPUNbMV0sMUo9Q1syXSwxdz1BWzBdLDE4PUFbMV0sMWE9QVsyXTs5IHg9MXctYix5PTE4LTFFLHo9MWEtMUo7OCAxMS51KFtiK1JbMF1bMF0qeCtSWzBdWzFdKnkrUlswXVsyXSp6LDFFK1JbMV1bMF0qeCtSWzFdWzFdKnkrUlsxXVsyXSp6LDFKK1JbMl1bMF0qeCtSWzJdWzFdKnkrUlsyXVsyXSp6XSxbUlswXVswXSpOWzBdK1JbMF1bMV0qTlsxXStSWzBdWzJdKk5bMl0sUlsxXVswXSpOWzBdK1JbMV1bMV0qTlsxXStSWzFdWzJdKk5bMl0sUlsyXVswXSpOWzBdK1JbMl1bMV0qTlsxXStSWzJdWzJdKk5bMl1dKX0sMXQ6bChhKXtvKGEuVyl7OSBBPTcuSy40LE49Ny5XLjQ7OSBiPUFbMF0sMTg9QVsxXSwxYT1BWzJdLDJNPU5bMF0sMkw9TlsxXSwyUT1OWzJdOzkgYz03LksuMXQoYSkuNDs5IGQ9YisyTSwycD0xOCsyTCwybT0xYSsyUTs5IFE9YS4xcihbZCwycCwybV0pLjQ7OSBlPVtRWzBdKyhRWzBdLWQpLWNbMF0sUVsxXSsoUVsxXS0ycCktY1sxXSxRWzJdKyhRWzJdLTJtKS1jWzJdXTs4IDExLnUoYyxlKX0xZCBvKGEuVSl7OCA3LjFWKEYuMUEsYSl9MWR7OSBQPWEuNHx8YTs4IDExLnUoNy5LLjF0KFtQWzBdLFBbMV0sKFBbMl18fDApXSksNy5XKX19LDFaOmwoYSxiLGMpe2E9di51KGEpO2E9YS4xTigpO28oYT09PXcpezggd31iPXYudShiKTtiPWIuMU4oKTtvKGI9PT13KXs4IHd9bygxZyhjKT09JzFmJyl7Yz13fTFke2M9di51KGMpO2M9Yy4xTigpO28oYz09PXcpezggd319OSBkPWEuNFswXSwxOD1hLjRbMV0sMWE9YS40WzJdOzkgZT1iLjRbMF0sMVc9Yi40WzFdLDFYPWIuNFsyXTs5IGYsMWk7byhjIT09dyl7OSBnPWMuNFswXSwybD1jLjRbMV0sMnQ9Yy40WzJdO2Y9di51KFsoMVctMTgpKigydC0xYSktKDFYLTFhKSooMmwtMTgpLCgxWC0xYSkqKGctZCktKGUtZCkqKDJ0LTFhKSwoZS1kKSooMmwtMTgpLSgxVy0xOCkqKGctZCldKTsxaT1mLjF1KCk7bygxaT09PTApezggd31mPXYudShbZi40WzBdLzFpLGYuNFsxXS8xaSxmLjRbMl0vMWldKX0xZHsxaT1GLjF4KGUqZSsxVyoxVysxWCoxWCk7bygxaT09PTApezggd31mPXYudShbYi40WzBdLzFpLGIuNFsxXS8xaSxiLjRbMl0vMWldKX03Lks9YTs3Llc9Zjs4IDd9fTsxMS51PWwoYSxiLGMpezkgUD0yNSAxMSgpOzggUC4xWihhLGIsYyl9OzExLjJJPTExLnUodi4xaigzKSx2LmspOzExLjJIPTExLnUodi4xaigzKSx2LmkpOzExLjJHPTExLnUodi4xaigzKSx2LmopOzExLjM2PTExLjJJOzExLjM1PTExLjJIOzExLjNqPTExLjJHOzkgJFY9di51OzkgJE09Uy51OzkgJEw9MTQudTs5ICRQPTExLnU7Iiw2MiwyMDYsInx8fHxlbGVtZW50c3x8fHRoaXN8cmV0dXJufHZhcnx8fHx8fHx8fHx8fGZ1bmN0aW9ufHx8aWZ8fGxlbmd0aHx8fHxjcmVhdGV8VmVjdG9yfG51bGx8fHx8fHx8fHxNYXRofG5qfHdoaWxlfHxkb3xhbmNob3J8fHx8fHx8fE1hdHJpeHx8ZGlyZWN0aW9ufHxub3JtYWx8fHx8a2p8UGxhbmV8bml8YWJzfExpbmV8a2l8cHJlY2lzaW9ufFN5bHZlc3RlcnxBMnxwdXNofEEzfG1hcHxlbHN8ZWxzZXx8dW5kZWZpbmVkfHR5cGVvZnxjb250YWluc3xtb2R8WmVyb3xEM3xEMnxpc1BhcmFsbGVsVG98a3B8ZGlzdGFuY2VGcm9tfGNvbHN8ZHVwfHBvaW50Q2xvc2VzdFRvfG5wfHJlZmxlY3Rpb25Jbnxtb2R1bHVzfGludGVyc2VjdHN8QTF8c3FydHxpc1NxdWFyZXxYMnxQSXxYM3xhbmdsZUZyb218bW9kMXxDMnxtb2QyfHNpbnxjb3N8YnJlYWt8QzN8dG9SaWdodFRyaWFuZ3VsYXJ8ZmFsc2V8WTN8dG8zRHxFMnxFMXxFM3xSb3RhdGlvbnxZMnxZMXxpbnRlcnNlY3Rpb25XaXRofHJvdGF0ZXx2MTJ8djEzfHJhbmt8c2V0VmVjdG9yc3xuY3xzdW18bXVsdGlwbHl8cHJvdG90eXBlfGVxbHxuZXd8c2V0RWxlbWVudHN8Y2FzZXxlYWNofFBBM3xQQTJ8cGFydHxuZXdfZWxlbWVudHxyb3VuZHxmb3J8Y3Jvc3N8cHJvZHVjdHxBRDJ8aXNTYW1lU2l6ZUFzfGFkZHxpc1BlcnBlbmRpY3VsYXJUb3x2MjJ8QU4zfGluc3BlY3R8QUQzfEFOMnx0b1VuaXRWZWN0b3J8UHN1YlEzfFBzdWJRMnx2MjN8ZG90fGRpdmlzb3J8aW52ZXJzZXx0cnVlfGlzU2luZ3VsYXJ8ZGV0ZXJtaW5hbnR8bWF4fGNhbk11bHRpcGx5RnJvbUxlZnR8c3VidHJhY3R8cm93c3xjb2x8cmFuZG9tfFpYfFlafFhZfFJhbmRvbXxqb2lufE4yfE4xfEQxfHNsaWNlfGRlZmF1bHR8TjN8ZGltZW5zaW9uc3xzd2l0Y2h8bGllc0lufHRyYW5zbGF0ZXxzbmFwVG98YXVnbWVudHxEaWFnb25hbHx0cmFjZXxpbmRleE9mfGRpYWdvbmFsfHRyYW5zcG9zZXxtaW5vcnxyb3d8aXNBbnRpcGFyYWxsZWxUb3xaWXxZWHxhY29zfFJvdGF0aW9uWnxSb3RhdGlvbll8bGllc09ufFJvdGF0aW9uWHxpbnZ8cmt8dHJ8ZGV0fHRvRGlhZ29uYWxNYXRyaXh8dG9VcHBlclRyaWFuZ3VsYXJ8dmVyc2lvbnxYWiIuc3BsaXQoInwiKSwwLHt9KSk7"></script> </head> <body style="background-color:white;"> <div id="htmlwidget_container"> <div id="htmlwidget-e15be1a3d5bb585de653" class="parcoords html-widget" style="width:960px;height:500px;"> </div> </div> <script type="application/json" data-for="htmlwidget-e15be1a3d5bb585de653">{"x":{"data":{"names":["1","2","3","4","5","6","7","8","9","10","11","12","13","14","15","16","17","18","19","20","21","22","23","24","25","26","27","28","29","30","31","32","33","34","35","36","37","38","39","40","41","42","43","44","45","46","47","48","49","50","51","52","53","54","55","56","57","58","59","60","61","62","63","64","65","66","67","68","69","70","71","72","73","74","75","76","77","78","79","80","81","82","83","84","85","86","87","88","89","90","91","92","93","94","95","96","97","98","99","100","101","102","103","104","105","106","107","108","109","110","111","112","113","114","115","116","117","118","119","120","121","122","123","124","125","126","127","128","129","130","131","132","133","134","135","136","137","138","139","140","141","142","143","144","145","146","147","148","149","150","151","152","153","154","155","156","157","158","159","160","161","162","163","164","165","166","167","168","169","170","171","172","173","174","175","176","177","178","179","180","181","182","183","184","185","186","187","188","189","190","191","192","193","194","195","196","197","198","199","200","201","202","203","204","205","206","207","208","209","210","211","212","213","214","215","216","217","218","219","220","221","222","223","224","225","226","227","228","229","230","231","232","233","234","235","236","237","238","239","240","241","242","243","244","245","246","247","248","249","250","251","252","253","254","255","256","257","258","259","260","261","262","263","264","265","266","267","268","269","270","271","272","273","274","275","276","277","278","279","280","281","282","283","284","285","286","287","288","289","290","291","292","293","294","295","296","297","298","299","300","301","302","303","304","305","306","307","308","309","310","311","312","313","314","315","316","317","318","319","320","321","322","323","324","325","326","327","328","329","330","331","332","333","334","335","336","337","338","339","340","341","342","343","344","345","346","347","348","349","350","351","352","353","354","355","356","357","358","359","360","361","362","363","364","365","366","367","368","369","370","371","372","373","374","375","376","377","378","379","380","381","382","383","384","385","386","387","388","389","390","391","392","393","394","395","396","397","398","399","400","401","402","403","404","405","406","407","408","409","410","411","412","413","414","415","416","417","418","419","420","421","422","423","424","425","426","427","428","429","430","431","432","433","434","435","436","437","438","439","440","441","442","443","444","445","446","447","448","449","450","451","452","453","454","455","456","457","458","459","460","461","462","463","464","465","466","467","468","469","470","471","472","473","474","475","476","477","478","479","480","481","482","483","484","485","486","487","488","489","490","491","492","493","494","495","496","497","498","499","500","501","502","503","504","505","506","507","508","509","510","511","512","513","514","515","516","517","518","519","520","521","522","523","524","525","526","527","528","529","530","531","532","533","534","535","536","537","538","539","540","541","542","543","544","545","546","547","548","549","550","551","552","553","554","555","556","557","558","559","560","561","562","563","564","565","566","567","568","569","570","571","572","573","574","575","576","577","578","579","580","581","582","583","584","585","586","587","588","589","590","591","592","593","594","595","596","597","598","599","600","601","602","603","604","605","606","607","608","609","610","611","612","613","614","615","616","617","618","619","620","621","622","623","624","625","626","627","628","629","630","631","632","633","634","635","636","637","638","639","640","641","642","643","644","645","646","647","648","649","650","651","652","653","654","655","656","657","658","659","660","661","662","663","664","665","666","667","668","669","670","671","672","673","674","675","676","677","678","679","680","681","682","683","684","685","686","687","688","689","690","691","692","693","694","695","696","697","698","699","700","701","702","703","704","705","706","707","708","709","710","711","712","713","714","715","716","717","718","719","720","721","722","723","724","725","726","727","728","729","730","731","732","733","734","735","736","737","738","739","740","741","742","743","744","745","746","747","748","749","750","751","752","753","754","755","756","757","758","759","760","761","762","763","764","765","766","767","768","769","770","771","772","773","774","775","776","777","778","779","780","781","782","783","784","785","786","787","788","789","790","791","792","793","794","795","796","797","798","799","800","801","802","803","804","805","806","807","808","809","810","811","812","813","814","815","816","817","818","819","820","821","822","823","824","825","826","827","828","829","830","831","832","833","834","835","836","837","838","839","840","841","842","843","844","845","846","847","848","849","850","851","852","853","854","855","856","857","858","859","860","861","862","863","864","865","866","867","868","869","870","871","872","873","874","875","876","877","878","879","880","881","882","883","884","885","886","887","888","889","890","891","892","893","894","895","896","897","898","899","900","901","902","903","904","905","906","907","908","909","910","911","912","913","914","915","916","917","918","919","920","921","922","923","924","925","926","927","928","929","930","931","932","933","934","935","936","937","938","939","940","941","942","943","944","945","946","947","948","949","950","951","952","953","954","955","956","957","958","959","960","961","962","963","964","965","966","967","968","969","970","971","972","973","974","975","976","977","978","979","980","981","982","983","984","985","986","987","988","989","990","991","992","993","994","995","996","997","998","999","1000","1001","1002","1003","1004","1005","1006","1007","1008","1009","1010","1011","1012","1013","1014","1015","1016","1017","1018","1019","1020","1021","1022","1023","1024","1025","1026","1027","1028","1029","1030","1031","1032","1033","1034","1035","1036","1037","1038","1039","1040","1041","1042","1043","1044","1045","1046","1047","1048","1049","1050","1051","1052","1053","1054","1055","1056","1057","1058","1059","1060","1061","1062","1063","1064","1065","1066","1067","1068","1069","1070","1071","1072","1073","1074","1075","1076","1077","1078","1079","1080","1081","1082","1083","1084","1085","1086","1087","1088","1089","1090","1091","1092","1093","1094","1095","1096","1097","1098","1099","1100","1101","1102","1103","1104","1105","1106","1107","1108","1109","1110","1111","1112","1113","1114","1115","1116","1117","1118","1119","1120","1121","1122","1123","1124","1125","1126","1127","1128","1129","1130","1131","1132","1133","1134","1135","1136","1137","1138","1139","1140","1141","1142","1143","1144","1145","1146","1147","1148","1149","1150","1151","1152","1153","1154","1155","1156","1157","1158","1159","1160","1161","1162","1163","1164","1165","1166","1167","1168","1169","1170","1171","1172","1173","1174","1175","1176","1177","1178","1179","1180","1181","1182","1183","1184","1185","1186","1187","1188","1189","1190","1191","1192","1193","1194","1195","1196","1197","1198","1199","1200","1201","1202","1203","1204","1205","1206","1207","1208","1209","1210","1211","1212","1213","1214","1215","1216","1217","1218","1219","1220","1221","1222","1223","1224","1225","1226","1227","1228","1229","1230","1231","1232","1233","1234","1235","1236","1237","1238","1239","1240","1241","1242","1243","1244","1245","1246","1247","1248","1249","1250","1251","1252","1253","1254","1255","1256","1257","1258","1259","1260","1261","1262","1263","1264","1265","1266","1267","1268","1269","1270","1271","1272","1273","1274","1275","1276","1277","1278","1279","1280","1281","1282","1283","1284","1285","1286","1287","1288","1289","1290","1291","1292","1293","1294","1295","1296","1297","1298","1299","1300","1301","1302","1303","1304","1305","1306","1307","1308","1309","1310","1311","1312","1313","1314","1315","1316","1317","1318","1319","1320","1321","1322","1323","1324","1325","1326","1327","1328","1329","1330","1331","1332","1333","1334","1335","1336","1337","1338","1339","1340","1341","1342","1343","1344","1345","1346","1347","1348","1349","1350","1351","1352","1353","1354","1355","1356","1357","1358","1359","1360","1361","1362","1363","1364","1365","1366","1367","1368","1369","1370","1371","1372","1373","1374","1375","1376","1377","1378","1379","1380","1381","1382","1383","1384","1385","1386","1387","1388","1389","1390","1391","1392","1393","1394","1395","1396","1397","1398","1399","1400","1401","1402","1403","1404","1405","1406","1407","1408","1409","1410","1411","1412","1413","1414","1415","1416","1417","1418","1419","1420","1421","1422","1423","1424","1425","1426","1427","1428","1429","1430","1431","1432","1433","1434","1435","1436","1437","1438","1439","1440","1441","1442","1443","1444","1445","1446","1447","1448","1449","1450","1451","1452","1453","1454","1455","1456","1457","1458","1459","1460","1461","1462","1463","1464","1465","1466","1467","1468","1469","1470","1471","1472","1473","1474","1475","1476","1477","1478","1479","1480","1481","1482","1483","1484","1485","1486","1487","1488","1489","1490","1491","1492","1493","1494","1495","1496","1497","1498","1499","1500","1501","1502","1503","1504","1505","1506","1507","1508","1509","1510","1511","1512","1513","1514","1515","1516","1517","1518","1519","1520","1521","1522","1523","1524","1525","1526","1527","1528","1529","1530","1531","1532","1533","1534","1535","1536","1537","1538","1539","1540","1541","1542","1543","1544","1545","1546","1547","1548","1549","1550","1551","1552","1553","1554","1555","1556","1557","1558","1559","1560","1561","1562","1563","1564","1565","1566","1567","1568","1569","1570","1571","1572","1573","1574","1575","1576","1577","1578","1579","1580","1581","1582","1583","1584","1585","1586","1587","1588","1589","1590","1591","1592","1593","1594","1595","1596","1597","1598","1599","1600","1601","1602","1603","1604","1605","1606","1607","1608","1609","1610","1611","1612","1613","1614","1615","1616","1617","1618","1619","1620","1621","1622","1623","1624","1625","1626","1627","1628","1629","1630","1631","1632","1633","1634","1635","1636","1637","1638","1639","1640","1641","1642","1643","1644","1645","1646","1647","1648","1649","1650","1651","1652","1653","1654","1655","1656","1657","1658","1659","1660","1661","1662","1663","1664","1665","1666","1667","1668","1669","1670","1671","1672","1673","1674","1675","1676","1677","1678","1679","1680","1681","1682","1683","1684","1685","1686","1687","1688","1689","1690","1691","1692","1693","1694","1695","1696","1697","1698","1699","1700","1701","1702","1703","1704","1705","1706","1707","1708","1709","1710","1711","1712","1713","1714","1715","1716","1717","1718","1719","1720","1721","1722","1723","1724","1725","1726","1727","1728","1729","1730","1731","1732","1733","1734","1735","1736","1737","1738","1739","1740","1741","1742","1743","1744","1745","1746","1747","1748","1749","1750","1751","1752","1753","1754","1755","1756","1757","1758","1759","1760","1761","1762","1763","1764","1765","1766","1767","1768","1769","1770","1771","1772","1773","1774","1775","1776","1777","1778","1779","1780","1781","1782","1783","1784","1785","1786","1787","1788","1789","1790","1791","1792","1793","1794","1795","1796","1797","1798","1799","1800","1801","1802","1803","1804","1805","1806","1807","1808","1809","1810","1811","1812","1813","1814","1815","1816","1817","1818","1819","1820","1821","1822","1823","1824","1825","1826","1827","1828","1829","1830","1831","1832","1833","1834","1835","1836","1837","1838","1839","1840","1841","1842","1843","1844","1845","1846","1847","1848","1849","1850","1851","1852","1853","1854","1855","1856","1857","1858","1859","1860","1861","1862","1863","1864","1865","1866","1867","1868","1869","1870","1871","1872","1873","1874","1875","1876","1877","1878","1879","1880","1881","1882","1883","1884","1885","1886","1887","1888","1889","1890","1891","1892","1893","1894","1895","1896","1897","1898","1899","1900","1901","1902","1903","1904","1905","1906","1907","1908","1909","1910","1911","1912","1913","1914","1915","1916","1917","1918","1919","1920","1921","1922","1923","1924","1925","1926","1927","1928","1929","1930","1931","1932","1933","1934","1935","1936","1937","1938","1939","1940","1941","1942","1943","1944","1945","1946","1947","1948","1949","1950","1951","1952","1953","1954","1955","1956","1957","1958","1959","1960","1961","1962","1963","1964","1965","1966","1967","1968","1969","1970","1971","1972","1973","1974","1975","1976","1977","1978","1979","1980","1981","1982","1983","1984","1985","1986","1987","1988","1989","1990","1991","1992","1993","1994","1995","1996","1997","1998","1999","2000","2001","2002","2003","2004","2005","2006","2007","2008","2009","2010","2011","2012","2013","2014","2015","2016","2017","2018","2019","2020","2021","2022","2023","2024","2025","2026","2027","2028","2029","2030","2031","2032","2033","2034","2035","2036","2037","2038","2039","2040","2041","2042","2043","2044","2045","2046","2047","2048","2049","2050","2051","2052","2053","2054","2055","2056","2057","2058","2059","2060","2061","2062","2063","2064","2065","2066","2067","2068","2069","2070","2071","2072","2073","2074","2075","2076","2077","2078","2079","2080","2081","2082","2083","2084","2085","2086","2087","2088","2089","2090","2091","2092","2093","2094","2095","2096","2097","2098","2099","2100","2101","2102","2103","2104","2105","2106","2107","2108","2109","2110","2111","2112","2113","2114","2115","2116","2117","2118","2119","2120","2121","2122","2123","2124","2125","2126","2127","2128","2129","2130","2131","2132","2133","2134","2135","2136","2137","2138","2139","2140","2141","2142","2143","2144","2145","2146","2147","2148","2149","2150","2151","2152","2153","2154","2155","2156","2157","2158","2159","2160","2161","2162","2163","2164","2165","2166","2167","2168","2169","2170","2171","2172","2173","2174","2175","2176","2177","2178","2179","2180","2181","2182","2183","2184","2185","2186","2187","2188","2189","2190","2191","2192","2193","2194","2195","2196","2197","2198","2199","2200","2201","2202","2203","2204","2205","2206","2207","2208","2209","2210","2211","2212","2213","2214","2215","2216","2217","2218","2219","2220","2221","2222","2223","2224","2225","2226","2227","2228","2229","2230","2231","2232","2233","2234","2235","2236","2237","2238","2239","2240","2241","2242","2243","2244","2245","2246","2247","2248","2249","2250","2251","2252","2253","2254","2255","2256","2257","2258","2259","2260","2261","2262","2263","2264","2265","2266","2267","2268","2269","2270","2271","2272","2273","2274","2275","2276","2277","2278","2279","2280","2281","2282","2283","2284","2285","2286","2287","2288","2289","2290","2291","2292","2293","2294","2295","2296","2297","2298","2299","2300","2301","2302","2303","2304","2305","2306","2307","2308","2309","2310","2311","2312","2313","2314","2315","2316","2317","2318","2319","2320","2321","2322","2323","2324","2325","2326","2327","2328","2329","2330","2331","2332","2333","2334","2335","2336","2337","2338","2339","2340","2341","2342","2343","2344","2345","2346","2347","2348","2349","2350","2351","2352","2353","2354","2355","2356","2357","2358","2359","2360","2361","2362","2363","2364","2365","2366","2367","2368","2369","2370","2371","2372","2373","2374","2375","2376","2377","2378","2379","2380","2381","2382","2383","2384","2385","2386","2387","2388","2389","2390","2391","2392","2393","2394","2395","2396","2397","2398","2399","2400","2401","2402","2403","2404","2405","2406","2407","2408","2409","2410","2411","2412","2413","2414","2415","2416","2417","2418","2419","2420","2421","2422","2423","2424","2425","2426","2427","2428","2429","2430","2431","2432","2433","2434","2435","2436","2437","2438","2439","2440","2441","2442","2443","2444","2445","2446","2447","2448","2449","2450","2451","2452","2453","2454","2455","2456","2457","2458","2459","2460","2461","2462","2463","2464","2465","2466","2467","2468","2469","2470","2471","2472","2473","2474","2475","2476","2477","2478","2479","2480","2481","2482","2483","2484","2485","2486","2487","2488","2489","2490","2491","2492","2493","2494","2495","2496","2497","2498","2499","2500","2501","2502","2503","2504","2505","2506","2507","2508","2509","2510","2511","2512","2513","2514","2515","2516","2517","2518","2519","2520","2521","2522","2523","2524","2525","2526","2527","2528","2529","2530","2531","2532","2533","2534","2535","2536","2537","2538","2539","2540","2541","2542","2543","2544","2545","2546","2547","2548","2549","2550","2551","2552","2553","2554","2555","2556","2557","2558","2559","2560","2561","2562","2563","2564","2565","2566","2567","2568","2569","2570","2571","2572","2573","2574","2575","2576","2577","2578","2579","2580","2581","2582","2583","2584","2585","2586","2587","2588","2589","2590","2591","2592","2593","2594","2595","2596","2597","2598","2599","2600","2601","2602","2603","2604","2605","2606","2607","2608","2609","2610","2611","2612","2613","2614","2615","2616","2617","2618","2619","2620","2621","2622","2623","2624","2625","2626","2627","2628","2629","2630","2631","2632","2633","2634","2635","2636","2637","2638","2639","2640","2641","2642","2643","2644","2645","2646","2647","2648","2649","2650","2651","2652","2653","2654","2655","2656","2657","2658","2659","2660","2661","2662","2663","2664","2665","2666","2667","2668","2669","2670","2671","2672","2673","2674","2675","2676","2677","2678","2679","2680","2681","2682","2683","2684","2685","2686","2687","2688","2689","2690","2691","2692","2693","2694","2695","2696","2697","2698","2699","2700","2701","2702","2703","2704","2705","2706","2707","2708","2709","2710","2711","2712","2713","2714","2715","2716","2717","2718","2719","2720","2721","2722","2723","2724","2725","2726","2727","2728","2729","2730","2731","2732","2733","2734","2735","2736","2737","2738","2739","2740","2741","2742","2743","2744","2745","2746","2747","2748","2749","2750","2751","2752","2753","2754","2755","2756","2757","2758","2759","2760","2761","2762","2763","2764","2765","2766","2767","2768","2769","2770","2771","2772","2773","2774","2775","2776","2777","2778","2779","2780","2781","2782","2783","2784","2785","2786","2787","2788","2789","2790","2791","2792","2793","2794","2795","2796","2797","2798","2799","2800","2801","2802","2803","2804","2805","2806","2807","2808","2809","2810","2811","2812","2813","2814","2815","2816","2817","2818","2819","2820","2821","2822","2823","2824","2825","2826","2827","2828","2829","2830","2831","2832","2833","2834","2835","2836","2837","2838","2839","2840","2841","2842","2843","2844","2845","2846","2847","2848","2849","2850","2851","2852","2853","2854","2855","2856","2857","2858","2859","2860","2861","2862","2863","2864","2865","2866","2867","2868","2869","2870","2871","2872","2873","2874","2875","2876","2877","2878","2879","2880","2881","2882","2883","2884","2885","2886","2887","2888","2889","2890","2891","2892","2893","2894","2895","2896","2897","2898","2899","2900","2901","2902","2903","2904","2905","2906","2907","2908","2909","2910","2911","2912","2913","2914","2915","2916","2917","2918","2919","2920","2921","2922","2923","2924","2925","2926","2927","2928","2929","2930","2931","2932","2933","2934","2935","2936","2937","2938","2939","2940","2941","2942","2943","2944","2945","2946","2947","2948","2949","2950","2951","2952","2953","2954","2955","2956","2957","2958","2959","2960","2961","2962","2963","2964","2965","2966","2967","2968","2969","2970","2971","2972","2973","2974","2975","2976","2977","2978","2979","2980","2981","2982","2983","2984","2985","2986","2987","2988","2989","2990","2991","2992","2993","2994","2995","2996","2997","2998","2999","3000","3001","3002","3003","3004","3005","3006","3007","3008","3009","3010","3011","3012","3013","3014","3015","3016","3017","3018","3019","3020","3021","3022","3023","3024","3025","3026","3027","3028","3029","3030","3031","3032","3033","3034","3035","3036","3037","3038","3039","3040","3041","3042","3043","3044","3045","3046","3047","3048","3049","3050","3051","3052","3053","3054","3055","3056","3057","3058","3059","3060","3061","3062","3063","3064","3065","3066","3067","3068","3069","3070","3071","3072","3073","3074","3075","3076","3077","3078","3079","3080","3081","3082","3083","3084","3085","3086","3087","3088","3089","3090","3091","3092","3093","3094","3095","3096","3097","3098","3099","3100","3101","3102","3103","3104","3105","3106","3107","3108","3109","3110","3111","3112","3113","3114","3115","3116","3117","3118","3119","3120","3121","3122","3123","3124","3125","3126","3127","3128","3129","3130","3131","3132","3133","3134","3135","3136","3137","3138","3139","3140","3141","3142","3143","3144","3145","3146","3147","3148","3149","3150","3151","3152","3153","3154","3155","3156","3157","3158","3159","3160","3161","3162","3163","3164","3165","3166","3167","3168","3169","3170","3171","3172","3173","3174","3175","3176","3177","3178","3179","3180","3181","3182","3183","3184","3185","3186","3187","3188","3189","3190","3191","3192","3193","3194","3195","3196","3197","3198","3199","3200","3201","3202","3203","3204","3205","3206","3207","3208","3209","3210","3211","3212","3213","3214","3215","3216","3217","3218","3219","3220","3221","3222","3223","3224","3225","3226","3227","3228","3229","3230","3231","3232","3233","3234","3235","3236","3237","3238","3239","3240","3241","3242","3243","3244","3245","3246","3247","3248","3249","3250","3251","3252","3253","3254","3255","3256","3257","3258","3259","3260","3261","3262","3263","3264","3265","3266","3267","3268","3269","3270","3271","3272","3273","3274","3275","3276","3277","3278","3279","3280","3281","3282","3283","3284","3285","3286","3287","3288","3289","3290","3291","3292","3293","3294","3295","3296","3297","3298","3299","3300","3301","3302","3303","3304","3305","3306","3307","3308","3309","3310","3311","3312","3313","3314","3315","3316","3317","3318","3319","3320","3321","3322","3323","3324","3325","3326","3327","3328","3329","3330","3331","3332","3333","3334","3335","3336","3337","3338","3339","3340","3341","3342","3343","3344","3345","3346","3347","3348","3349","3350","3351","3352","3353","3354","3355","3356","3357","3358","3359","3360","3361","3362","3363","3364","3365","3366","3367","3368","3369","3370","3371","3372","3373","3374","3375","3376","3377","3378","3379","3380","3381","3382","3383","3384","3385","3386","3387","3388","3389","3390","3391","3392","3393","3394","3395","3396","3397","3398","3399","3400","3401","3402","3403","3404","3405","3406","3407","3408","3409","3410","3411","3412","3413","3414","3415","3416","3417","3418","3419","3420","3421","3422","3423","3424","3425","3426","3427","3428","3429","3430","3431","3432","3433","3434","3435","3436","3437","3438","3439","3440","3441","3442","3443","3444","3445","3446","3447","3448","3449","3450","3451","3452","3453","3454","3455","3456","3457","3458","3459","3460","3461","3462","3463","3464","3465","3466","3467","3468","3469","3470","3471","3472","3473","3474","3475","3476","3477","3478","3479","3480","3481","3482","3483","3484","3485","3486","3487","3488","3489","3490","3491","3492","3493","3494","3495","3496","3497","3498","3499","3500","3501","3502","3503","3504","3505","3506","3507","3508","3509","3510","3511","3512","3513","3514","3515","3516","3517","3518","3519","3520","3521","3522","3523","3524","3525","3526","3527","3528","3529","3530","3531","3532","3533","3534","3535","3536","3537","3538","3539","3540","3541","3542","3543","3544","3545","3546","3547","3548","3549","3550","3551","3552","3553","3554","3555","3556","3557","3558","3559","3560","3561","3562","3563","3564","3565","3566","3567","3568","3569","3570","3571","3572","3573","3574","3575","3576","3577","3578","3579","3580","3581","3582","3583","3584","3585","3586","3587","3588","3589","3590","3591","3592","3593","3594","3595","3596","3597","3598","3599","3600","3601","3602","3603","3604","3605","3606","3607","3608","3609","3610","3611","3612","3613","3614","3615","3616","3617","3618","3619","3620","3621","3622","3623","3624","3625","3626","3627","3628","3629","3630","3631","3632","3633","3634","3635","3636","3637","3638","3639","3640","3641","3642","3643","3644","3645","3646","3647","3648","3649","3650","3651","3652","3653","3654","3655","3656","3657","3658","3659","3660","3661","3662","3663","3664","3665","3666","3667","3668","3669","3670","3671","3672","3673","3674","3675","3676","3677","3678","3679","3680","3681","3682","3683","3684","3685","3686","3687","3688","3689","3690","3691","3692","3693","3694","3695","3696","3697","3698","3699","3700","3701","3702","3703","3704","3705","3706","3707","3708","3709","3710","3711","3712","3713","3714","3715","3716","3717","3718","3719","3720","3721","3722","3723","3724","3725","3726","3727","3728","3729","3730","3731","3732","3733","3734","3735","3736","3737","3738","3739","3740","3741","3742","3743","3744","3745","3746","3747","3748","3749","3750","3751","3752","3753","3754","3755","3756","3757","3758","3759","3760","3761","3762","3763","3764","3765","3766","3767","3768","3769","3770","3771","3772","3773","3774","3775","3776","3777","3778","3779","3780","3781","3782","3783","3784","3785","3786","3787","3788","3789","3790","3791","3792","3793","3794","3795","3796","3797","3798","3799","3800","3801","3802","3803","3804","3805","3806","3807","3808","3809","3810","3811","3812","3813","3814","3815","3816","3817","3818","3819","3820","3821","3822","3823","3824","3825","3826","3827","3828","3829","3830","3831","3832","3833","3834","3835","3836","3837","3838","3839","3840","3841","3842","3843","3844","3845","3846","3847","3848","3849","3850","3851","3852","3853","3854","3855","3856","3857","3858","3859","3860","3861","3862","3863","3864","3865","3866","3867","3868","3869","3870","3871","3872","3873","3874","3875","3876","3877","3878","3879","3880","3881","3882","3883","3884","3885","3886","3887","3888","3889","3890","3891","3892","3893","3894","3895","3896","3897","3898","3899","3900","3901","3902","3903","3904","3905","3906","3907","3908","3909","3910","3911","3912","3913","3914","3915","3916","3917","3918","3919","3920","3921","3922","3923","3924","3925","3926","3927","3928","3929","3930","3931","3932","3933","3934","3935","3936","3937","3938","3939","3940","3941","3942","3943","3944","3945","3946","3947","3948","3949","3950","3951","3952","3953","3954","3955","3956","3957","3958","3959","3960","3961","3962","3963","3964","3965","3966","3967","3968","3969","3970","3971","3972","3973","3974","3975","3976","3977","3978","3979","3980","3981","3982","3983","3984","3985","3986","3987","3988","3989","3990","3991","3992","3993","3994","3995","3996","3997","3998","3999","4000","4001","4002","4003","4004","4005","4006","4007","4008","4009","4010","4011","4012","4013","4014","4015","4016","4017","4018","4019","4020","4021","4022","4023","4024","4025","4026","4027","4028","4029","4030","4031","4032","4033","4034","4035","4036","4037","4038","4039","4040","4041","4042","4043","4044","4045","4046","4047","4048","4049","4050","4051","4052","4053","4054","4055","4056","4057","4058","4059","4060","4061","4062","4063","4064","4065","4066","4067","4068","4069","4070","4071","4072","4073","4074","4075","4076","4077","4078","4079","4080","4081","4082","4083","4084","4085","4086","4087","4088","4089","4090","4091","4092","4093","4094","4095","4096","4097","4098","4099","4100","4101","4102","4103","4104","4105","4106","4107","4108","4109","4110","4111","4112","4113","4114","4115","4116","4117","4118","4119","4120","4121","4122","4123","4124","4125","4126","4127","4128","4129","4130","4131","4132","4133","4134","4135","4136","4137","4138","4139","4140","4141","4142","4143","4144","4145","4146","4147","4148","4149","4150","4151","4152","4153","4154","4155","4156","4157","4158","4159","4160","4161","4162","4163","4164","4165","4166","4167","4168","4169","4170","4171","4172","4173","4174","4175","4176","4177","4178","4179","4180","4181","4182","4183","4184","4185","4186","4187","4188","4189","4190","4191","4192","4193","4194","4195","4196","4197","4198","4199","4200","4201","4202","4203","4204","4205","4206","4207","4208","4209","4210","4211","4212","4213","4214","4215","4216","4217","4218","4219","4220","4221","4222","4223","4224","4225","4226","4227","4228","4229","4230","4231","4232","4233","4234","4235","4236","4237","4238","4239","4240","4241","4242","4243","4244","4245","4246","4247","4248","4249","4250","4251","4252","4253","4254","4255","4256","4257","4258","4259","4260","4261","4262","4263","4264","4265","4266","4267","4268","4269","4270","4271","4272","4273","4274","4275","4276","4277","4278","4279","4280","4281","4282","4283","4284","4285","4286","4287","4288","4289","4290","4291","4292","4293","4294","4295","4296","4297","4298","4299","4300","4301","4302","4303","4304","4305","4306","4307","4308","4309","4310","4311","4312","4313","4314","4315","4316","4317","4318","4319","4320","4321","4322","4323","4324","4325","4326","4327","4328","4329","4330","4331","4332","4333","4334","4335","4336","4337","4338","4339","4340","4341","4342","4343","4344","4345","4346","4347","4348","4349","4350","4351","4352","4353","4354","4355","4356","4357","4358","4359","4360","4361","4362","4363","4364","4365","4366","4367","4368","4369","4370","4371","4372","4373","4374","4375","4376","4377","4378","4379","4380","4381","4382","4383","4384","4385","4386","4387","4388","4389","4390","4391","4392","4393","4394","4395","4396","4397","4398","4399","4400","4401","4402","4403","4404","4405","4406","4407","4408","4409","4410","4411","4412","4413","4414","4415","4416","4417","4418","4419","4420","4421","4422","4423","4424","4425","4426","4427","4428","4429","4430","4431","4432","4433","4434","4435","4436","4437","4438","4439","4440","4441","4442","4443","4444","4445","4446","4447","4448","4449","4450","4451","4452","4453","4454","4455","4456","4457","4458","4459","4460","4461","4462","4463","4464","4465","4466","4467","4468","4469","4470","4471","4472","4473","4474","4475","4476","4477","4478","4479","4480","4481","4482","4483","4484","4485","4486","4487","4488","4489","4490","4491","4492","4493","4494","4495","4496","4497","4498","4499","4500","4501","4502","4503","4504","4505","4506","4507","4508","4509","4510","4511","4512","4513","4514","4515","4516","4517","4518","4519","4520","4521","4522","4523","4524","4525","4526","4527","4528","4529","4530","4531","4532","4533","4534","4535","4536","4537","4538","4539","4540","4541","4542","4543","4544","4545","4546","4547","4548","4549","4550","4551","4552","4553","4554","4555","4556","4557","4558","4559","4560","4561","4562","4563","4564","4565","4566","4567","4568","4569","4570","4571","4572","4573","4574","4575","4576","4577","4578","4579","4580","4581","4582","4583","4584","4585","4586","4587","4588","4589","4590","4591","4592","4593","4594","4595","4596","4597","4598","4599","4600","4601","4602","4603","4604","4605","4606","4607","4608","4609","4610","4611","4612","4613","4614","4615","4616","4617","4618","4619","4620","4621","4622","4623","4624","4625","4626","4627","4628","4629","4630","4631","4632","4633","4634","4635","4636","4637","4638","4639","4640","4641","4642","4643","4644","4645","4646","4647","4648","4649","4650","4651","4652","4653","4654","4655","4656","4657","4658","4659","4660","4661","4662","4663","4664","4665","4666","4667","4668","4669","4670","4671","4672","4673","4674","4675","4676","4677","4678","4679","4680","4681","4682","4683","4684","4685","4686","4687","4688","4689","4690","4691","4692","4693","4694","4695","4696","4697","4698","4699","4700","4701","4702","4703","4704","4705","4706","4707","4708","4709","4710","4711","4712","4713","4714","4715","4716","4717","4718","4719","4720","4721","4722","4723","4724","4725","4726","4727","4728","4729","4730","4731","4732","4733","4734","4735","4736","4737","4738","4739","4740","4741","4742","4743","4744","4745","4746","4747","4748","4749","4750","4751","4752","4753","4754","4755","4756","4757","4758","4759","4760","4761","4762","4763","4764","4765","4766","4767","4768","4769","4770","4771","4772","4773","4774","4775","4776","4777","4778","4779","4780","4781","4782","4783","4784","4785","4786","4787","4788","4789","4790","4791","4792","4793","4794","4795","4796","4797","4798","4799","4800","4801","4802","4803","4804","4805","4806","4807","4808","4809","4810","4811","4812","4813","4814","4815","4816","4817","4818","4819","4820","4821","4822","4823","4824","4825","4826","4827","4828","4829","4830","4831","4832","4833","4834","4835","4836","4837","4838","4839","4840","4841","4842","4843","4844","4845","4846","4847","4848","4849","4850","4851","4852","4853","4854","4855","4856","4857","4858","4859","4860","4861","4862","4863","4864","4865","4866","4867","4868","4869","4870","4871","4872","4873","4874","4875","4876","4877","4878","4879","4880","4881","4882","4883","4884","4885","4886","4887","4888","4889","4890","4891","4892","4893","4894","4895","4896","4897","4898","4899","4900","4901","4902","4903","4904","4905","4906","4907","4908","4909","4910","4911","4912","4913","4914","4915","4916","4917","4918","4919","4920","4921","4922","4923","4924","4925","4926","4927","4928","4929","4930","4931","4932","4933","4934","4935","4936","4937","4938","4939","4940","4941","4942","4943","4944","4945","4946","4947","4948","4949","4950","4951","4952","4953","4954","4955","4956","4957","4958","4959","4960","4961","4962","4963","4964","4965","4966","4967","4968","4969","4970","4971","4972","4973","4974","4975","4976","4977","4978","4979","4980","4981","4982","4983","4984","4985","4986","4987","4988","4989","4990","4991","4992","4993","4994","4995","4996","4997","4998","4999","5000","5001","5002","5003","5004","5005","5006","5007","5008","5009","5010","5011","5012","5013","5014","5015","5016","5017","5018","5019","5020","5021","5022","5023","5024","5025","5026","5027","5028","5029","5030","5031","5032","5033","5034","5035","5036","5037","5038","5039","5040","5041","5042","5043","5044","5045","5046","5047","5048","5049","5050","5051","5052","5053","5054","5055","5056","5057","5058","5059","5060","5061","5062","5063","5064","5065","5066","5067","5068","5069","5070","5071","5072","5073","5074","5075","5076","5077","5078","5079","5080","5081","5082","5083","5084","5085","5086","5087","5088","5089","5090","5091","5092","5093","5094","5095","5096","5097","5098","5099","5100","5101","5102","5103","5104","5105","5106","5107","5108","5109","5110","5111","5112","5113","5114","5115","5116","5117","5118","5119","5120","5121","5122","5123","5124","5125","5126","5127","5128","5129","5130","5131","5132","5133","5134","5135","5136","5137","5138","5139","5140","5141","5142","5143","5144","5145","5146","5147","5148","5149","5150","5151","5152","5153","5154","5155","5156","5157","5158","5159","5160","5161","5162","5163","5164","5165","5166","5167","5168","5169","5170","5171","5172","5173","5174","5175","5176","5177","5178","5179","5180","5181","5182","5183","5184","5185","5186","5187","5188","5189","5190","5191","5192","5193","5194","5195","5196","5197","5198","5199","5200","5201","5202","5203","5204","5205","5206","5207","5208","5209","5210","5211","5212","5213","5214","5215","5216","5217","5218","5219","5220","5221","5222","5223","5224","5225","5226","5227","5228","5229","5230","5231","5232","5233","5234","5235","5236","5237","5238","5239","5240","5241","5242","5243","5244","5245","5246","5247","5248","5249","5250","5251","5252","5253","5254","5255","5256","5257","5258","5259","5260","5261","5262","5263","5264","5265","5266","5267","5268","5269","5270","5271","5272","5273","5274","5275","5276","5277","5278","5279","5280","5281","5282","5283","5284","5285","5286","5287","5288","5289","5290","5291","5292","5293","5294","5295","5296","5297","5298","5299","5300","5301","5302","5303","5304","5305","5306","5307","5308","5309","5310","5311","5312","5313","5314","5315","5316","5317","5318","5319","5320","5321","5322","5323","5324","5325","5326","5327","5328","5329","5330","5331","5332","5333","5334","5335","5336","5337","5338","5339","5340","5341","5342","5343","5344","5345","5346","5347","5348","5349","5350","5351","5352","5353","5354","5355","5356","5357","5358","5359","5360","5361","5362","5363","5364","5365","5366","5367","5368","5369","5370","5371","5372","5373","5374","5375","5376","5377","5378","5379","5380","5381","5382","5383","5384","5385","5386","5387","5388","5389","5390","5391","5392","5393","5394","5395","5396","5397","5398","5399","5400","5401","5402","5403","5404","5405","5406","5407","5408","5409","5410","5411","5412","5413","5414","5415","5416","5417","5418","5419","5420","5421","5422","5423","5424","5425","5426","5427","5428","5429","5430","5431","5432","5433","5434","5435","5436","5437","5438","5439","5440","5441","5442","5443","5444","5445","5446","5447","5448","5449","5450","5451","5452","5453","5454","5455","5456","5457","5458","5459","5460","5461","5462","5463","5464","5465","5466","5467","5468","5469","5470","5471","5472","5473","5474","5475","5476","5477","5478","5479","5480","5481","5482","5483","5484","5485","5486","5487","5488","5489","5490","5491","5492","5493","5494","5495","5496","5497","5498","5499","5500","5501","5502","5503","5504","5505","5506","5507","5508","5509","5510","5511","5512","5513","5514","5515","5516","5517","5518","5519","5520","5521","5522","5523","5524","5525","5526","5527","5528","5529","5530","5531","5532","5533","5534","5535","5536","5537","5538","5539","5540","5541","5542","5543","5544","5545","5546","5547","5548","5549","5550","5551","5552","5553","5554","5555","5556","5557","5558","5559","5560","5561","5562","5563","5564","5565","5566","5567","5568","5569","5570","5571","5572","5573","5574","5575","5576","5577","5578","5579","5580","5581","5582","5583","5584","5585","5586","5587","5588","5589","5590","5591","5592","5593","5594","5595","5596","5597","5598","5599","5600","5601","5602","5603","5604","5605","5606","5607","5608","5609","5610","5611","5612","5613","5614","5615","5616","5617","5618","5619","5620","5621","5622","5623","5624","5625","5626","5627","5628","5629","5630","5631","5632","5633","5634","5635","5636","5637","5638","5639","5640","5641","5642","5643","5644","5645","5646","5647","5648","5649","5650","5651","5652","5653","5654","5655","5656","5657","5658","5659","5660","5661","5662","5663","5664","5665","5666","5667","5668","5669","5670","5671","5672","5673","5674","5675","5676","5677","5678","5679","5680","5681","5682","5683","5684","5685","5686","5687","5688","5689","5690","5691","5692","5693","5694","5695","5696","5697","5698","5699","5700","5701","5702","5703","5704","5705","5706","5707","5708","5709","5710","5711","5712","5713","5714","5715","5716","5717","5718","5719","5720","5721","5722","5723","5724","5725","5726","5727","5728","5729","5730","5731","5732","5733","5734","5735","5736","5737","5738","5739","5740","5741","5742","5743","5744","5745","5746","5747","5748","5749","5750","5751","5752","5753","5754","5755","5756","5757","5758","5759","5760","5761","5762","5763","5764","5765","5766","5767","5768","5769","5770","5771","5772","5773","5774","5775","5776","5777","5778","5779","5780","5781","5782","5783","5784","5785","5786","5787","5788","5789","5790","5791","5792","5793","5794","5795","5796","5797","5798","5799","5800","5801","5802","5803","5804","5805","5806","5807","5808","5809","5810","5811","5812","5813","5814","5815","5816","5817","5818","5819","5820","5821","5822","5823","5824","5825","5826","5827","5828","5829","5830","5831","5832","5833","5834","5835","5836","5837","5838","5839","5840","5841","5842","5843","5844","5845","5846","5847","5848","5849","5850","5851","5852","5853","5854","5855","5856","5857","5858","5859","5860","5861","5862","5863","5864","5865","5866","5867","5868","5869","5870","5871","5872","5873","5874","5875","5876","5877","5878","5879","5880","5881","5882","5883","5884","5885","5886","5887","5888","5889","5890","5891","5892","5893","5894","5895","5896","5897","5898","5899","5900","5901","5902","5903","5904","5905","5906","5907","5908","5909","5910","5911","5912","5913","5914","5915","5916","5917","5918","5919","5920","5921","5922","5923","5924","5925","5926","5927","5928","5929","5930","5931","5932","5933","5934","5935","5936","5937","5938","5939","5940","5941","5942","5943","5944","5945","5946","5947","5948","5949","5950","5951","5952","5953","5954","5955","5956","5957","5958","5959","5960","5961","5962","5963","5964","5965","5966","5967","5968","5969","5970","5971","5972","5973","5974","5975","5976","5977","5978","5979","5980","5981","5982","5983","5984","5985","5986","5987","5988","5989","5990","5991","5992","5993","5994","5995","5996","5997","5998","5999","6000","6001","6002","6003","6004","6005","6006","6007","6008","6009","6010","6011","6012","6013","6014","6015","6016","6017","6018","6019","6020","6021","6022","6023","6024","6025","6026","6027","6028","6029","6030","6031","6032","6033","6034","6035","6036","6037","6038","6039","6040","6041","6042","6043","6044","6045","6046","6047","6048","6049","6050","6051","6052","6053","6054","6055","6056","6057","6058","6059","6060","6061","6062","6063","6064","6065","6066","6067","6068","6069","6070","6071","6072","6073","6074","6075","6076","6077","6078","6079","6080","6081","6082","6083","6084","6085","6086","6087","6088","6089","6090","6091","6092","6093","6094","6095","6096","6097","6098","6099","6100","6101","6102","6103","6104","6105","6106","6107","6108","6109","6110","6111","6112","6113","6114","6115","6116","6117","6118","6119","6120","6121","6122","6123","6124","6125","6126","6127","6128","6129","6130","6131","6132","6133","6134","6135","6136","6137","6138","6139","6140","6141","6142","6143","6144","6145","6146","6147","6148","6149","6150","6151","6152","6153","6154","6155","6156","6157","6158","6159","6160","6161","6162","6163","6164","6165","6166","6167","6168","6169","6170","6171","6172","6173","6174","6175","6176","6177","6178","6179","6180","6181","6182","6183","6184","6185","6186","6187","6188","6189","6190","6191","6192","6193","6194","6195","6196","6197","6198","6199","6200","6201","6202","6203","6204","6205","6206","6207","6208","6209","6210","6211","6212","6213","6214","6215","6216","6217","6218","6219","6220","6221","6222","6223","6224","6225","6226","6227","6228","6229","6230","6231","6232","6233","6234","6235","6236","6237","6238","6239","6240","6241","6242","6243","6244","6245","6246","6247","6248","6249","6250","6251","6252","6253","6254","6255","6256","6257","6258","6259","6260","6261","6262","6263","6264","6265","6266","6267","6268","6269","6270","6271","6272","6273","6274","6275","6276","6277","6278","6279","6280","6281","6282","6283","6284","6285","6286","6287","6288","6289","6290","6291","6292","6293","6294","6295","6296","6297","6298","6299","6300","6301","6302","6303","6304","6305","6306","6307","6308","6309","6310","6311","6312","6313","6314","6315","6316","6317","6318","6319","6320","6321","6322","6323","6324","6325","6326","6327","6328","6329","6330","6331","6332","6333","6334","6335","6336","6337","6338","6339","6340","6341","6342","6343","6344","6345","6346","6347","6348","6349","6350","6351","6352","6353","6354","6355","6356","6357","6358","6359","6360","6361","6362","6363","6364","6365","6366","6367","6368","6369","6370","6371","6372","6373","6374","6375","6376","6377","6378","6379","6380","6381","6382","6383","6384","6385","6386","6387","6388","6389","6390","6391","6392","6393","6394","6395","6396","6397","6398","6399","6400","6401","6402","6403","6404","6405","6406","6407","6408","6409","6410","6411","6412","6413","6414","6415","6416","6417","6418","6419","6420","6421","6422","6423","6424","6425","6426","6427","6428","6429","6430","6431","6432","6433","6434","6435","6436","6437","6438","6439","6440","6441","6442","6443","6444","6445","6446","6447","6448","6449","6450","6451","6452","6453","6454","6455","6456","6457","6458","6459","6460","6461","6462","6463","6464","6465","6466","6467","6468","6469","6470","6471","6472","6473","6474","6475","6476","6477","6478","6479","6480","6481","6482","6483","6484","6485","6486","6487","6488","6489","6490","6491","6492","6493","6494","6495","6496","6497","6498","6499","6500","6501","6502","6503","6504","6505","6506","6507","6508","6509","6510","6511","6512","6513","6514","6515","6516","6517","6518","6519","6520","6521","6522","6523","6524","6525","6526","6527","6528","6529","6530","6531","6532","6533","6534","6535","6536","6537","6538","6539","6540","6541","6542","6543","6544","6545","6546","6547","6548","6549","6550","6551","6552","6553","6554","6555","6556","6557","6558","6559","6560","6561","6562","6563","6564","6565","6566","6567","6568","6569","6570","6571","6572","6573","6574","6575","6576","6577","6578","6579","6580","6581","6582","6583","6584","6585","6586","6587","6588","6589","6590","6591","6592","6593","6594","6595","6596","6597","6598","6599","6600","6601","6602","6603","6604","6605","6606","6607","6608","6609","6610","6611","6612","6613","6614","6615","6616","6617","6618","6619","6620","6621","6622","6623","6624","6625","6626","6627","6628","6629","6630","6631","6632","6633","6634","6635","6636","6637","6638","6639","6640","6641","6642","6643","6644","6645","6646","6647","6648","6649","6650","6651","6652","6653","6654","6655","6656","6657","6658","6659","6660","6661","6662","6663","6664","6665","6666","6667","6668","6669","6670","6671","6672","6673","6674","6675","6676","6677","6678","6679","6680","6681","6682","6683","6684","6685","6686","6687","6688","6689","6690","6691","6692","6693","6694","6695","6696","6697","6698","6699","6700","6701","6702","6703","6704","6705","6706","6707","6708","6709","6710","6711","6712","6713","6714","6715","6716","6717","6718","6719","6720","6721","6722","6723","6724","6725","6726","6727","6728","6729","6730","6731","6732","6733","6734","6735","6736","6737","6738","6739","6740","6741","6742","6743","6744","6745","6746","6747","6748","6749","6750","6751","6752","6753","6754","6755","6756","6757","6758","6759","6760","6761","6762","6763","6764","6765","6766","6767","6768","6769","6770","6771","6772","6773","6774","6775","6776","6777","6778","6779","6780","6781","6782","6783","6784","6785","6786","6787","6788","6789","6790","6791","6792","6793","6794","6795","6796","6797","6798","6799","6800","6801","6802","6803","6804","6805","6806","6807","6808","6809","6810","6811","6812","6813","6814","6815","6816","6817","6818","6819","6820","6821","6822","6823","6824","6825","6826","6827","6828","6829","6830","6831","6832","6833","6834","6835","6836","6837","6838","6839","6840","6841","6842","6843","6844","6845","6846","6847","6848","6849","6850","6851","6852","6853","6854","6855","6856","6857","6858","6859","6860","6861","6862","6863","6864","6865","6866","6867","6868","6869","6870","6871","6872","6873","6874","6875","6876","6877","6878","6879","6880","6881","6882","6883","6884","6885","6886","6887","6888","6889","6890","6891","6892","6893","6894","6895","6896","6897","6898","6899","6900","6901","6902","6903","6904","6905","6906","6907","6908","6909","6910","6911","6912","6913","6914","6915","6916","6917","6918","6919","6920","6921","6922","6923","6924","6925","6926","6927","6928","6929","6930","6931","6932","6933","6934","6935","6936","6937","6938","6939","6940","6941","6942","6943","6944","6945","6946","6947","6948","6949","6950","6951","6952","6953","6954","6955","6956","6957","6958","6959","6960","6961","6962","6963","6964","6965","6966","6967","6968","6969","6970","6971","6972","6973","6974","6975","6976","6977","6978","6979","6980","6981","6982","6983","6984","6985","6986","6987","6988","6989","6990","6991","6992","6993","6994","6995","6996","6997","6998","6999","7000","7001","7002","7003","7004","7005","7006","7007","7008","7009","7010","7011","7012","7013","7014","7015","7016","7017","7018","7019","7020","7021","7022","7023","7024","7025","7026","7027","7028","7029","7030","7031","7032","7033","7034","7035","7036","7037","7038","7039","7040","7041","7042","7043","7044","7045","7046","7047","7048","7049","7050","7051","7052","7053","7054","7055","7056","7057","7058","7059","7060","7061","7062","7063","7064","7065","7066","7067","7068","7069","7070","7071","7072","7073","7074","7075","7076","7077","7078","7079","7080","7081","7082","7083","7084","7085","7086","7087","7088","7089","7090","7091","7092","7093","7094","7095","7096","7097","7098","7099","7100","7101","7102","7103","7104","7105","7106","7107","7108","7109","7110","7111","7112","7113","7114","7115","7116","7117","7118","7119","7120","7121","7122","7123","7124","7125","7126","7127","7128","7129","7130","7131","7132","7133","7134","7135","7136","7137","7138","7139","7140","7141","7142","7143","7144","7145","7146","7147","7148","7149","7150","7151","7152","7153","7154","7155","7156","7157","7158","7159","7160","7161","7162","7163","7164","7165","7166","7167","7168","7169","7170","7171","7172","7173","7174","7175","7176","7177","7178","7179","7180","7181","7182","7183","7184","7185","7186","7187","7188","7189","7190","7191","7192","7193","7194","7195","7196","7197","7198","7199","7200","7201","7202","7203","7204","7205","7206","7207","7208","7209","7210","7211","7212","7213","7214","7215","7216","7217","7218","7219","7220","7221","7222","7223","7224","7225","7226","7227","7228","7229","7230","7231","7232","7233","7234","7235","7236","7237","7238","7239","7240","7241","7242","7243","7244","7245","7246","7247","7248","7249","7250","7251","7252","7253","7254","7255","7256","7257","7258","7259","7260","7261","7262","7263","7264","7265","7266","7267","7268","7269","7270","7271","7272","7273","7274","7275","7276","7277","7278","7279","7280","7281","7282","7283","7284","7285","7286","7287","7288","7289","7290","7291","7292","7293","7294","7295","7296","7297","7298","7299","7300","7301","7302","7303","7304","7305","7306","7307","7308","7309","7310","7311","7312","7313","7314","7315","7316","7317","7318","7319","7320","7321","7322","7323","7324","7325","7326","7327","7328","7329","7330","7331","7332","7333","7334","7335","7336","7337","7338","7339","7340","7341","7342","7343","7344","7345","7346","7347","7348","7349","7350","7351","7352","7353","7354","7355","7356","7357","7358","7359","7360","7361","7362","7363","7364","7365","7366","7367","7368","7369","7370","7371","7372","7373","7374","7375","7376","7377","7378","7379","7380","7381","7382","7383","7384","7385","7386","7387","7388","7389","7390","7391","7392","7393","7394","7395","7396","7397","7398","7399","7400","7401","7402","7403","7404","7405","7406","7407","7408","7409","7410","7411","7412","7413","7414","7415","7416","7417","7418","7419","7420","7421","7422","7423","7424","7425","7426","7427","7428","7429","7430","7431","7432","7433","7434","7435","7436","7437","7438","7439","7440","7441","7442","7443","7444","7445","7446","7447","7448","7449","7450","7451","7452","7453","7454","7455","7456","7457","7458","7459","7460","7461","7462","7463","7464","7465","7466","7467","7468","7469","7470","7471","7472","7473","7474","7475","7476","7477","7478","7479","7480","7481","7482","7483","7484","7485","7486","7487","7488","7489","7490","7491","7492","7493","7494","7495","7496","7497","7498","7499","7500","7501","7502","7503","7504","7505","7506","7507","7508","7509","7510","7511","7512","7513","7514","7515","7516","7517","7518","7519","7520","7521","7522","7523","7524","7525","7526","7527","7528","7529","7530","7531","7532","7533","7534","7535","7536","7537","7538","7539","7540","7541","7542","7543","7544","7545","7546","7547","7548","7549","7550","7551","7552","7553","7554","7555","7556","7557","7558","7559","7560","7561","7562","7563","7564","7565","7566","7567","7568","7569","7570","7571","7572","7573","7574","7575","7576","7577","7578","7579","7580","7581","7582","7583","7584","7585","7586","7587","7588","7589","7590","7591","7592","7593","7594","7595","7596","7597","7598","7599","7600","7601","7602","7603","7604","7605","7606","7607","7608","7609","7610","7611","7612","7613","7614","7615","7616","7617","7618","7619","7620","7621","7622","7623","7624","7625","7626","7627","7628","7629","7630","7631","7632","7633","7634","7635","7636","7637","7638","7639","7640","7641","7642","7643","7644","7645","7646","7647","7648","7649","7650","7651","7652","7653","7654","7655","7656","7657","7658","7659","7660","7661","7662","7663","7664","7665","7666","7667","7668","7669","7670","7671","7672","7673","7674","7675","7676","7677","7678","7679","7680","7681","7682","7683","7684","7685","7686","7687","7688","7689","7690","7691","7692","7693","7694","7695","7696","7697","7698","7699","7700","7701","7702","7703","7704","7705","7706","7707","7708","7709","7710","7711","7712","7713","7714","7715","7716","7717","7718","7719","7720","7721","7722","7723","7724","7725","7726","7727","7728","7729","7730","7731","7732","7733","7734","7735","7736","7737","7738","7739","7740","7741","7742","7743","7744","7745","7746","7747","7748","7749","7750","7751","7752","7753","7754","7755","7756","7757","7758","7759","7760","7761","7762","7763","7764","7765","7766","7767","7768","7769","7770","7771","7772","7773","7774","7775","7776","7777","7778","7779","7780","7781","7782","7783","7784","7785","7786","7787","7788","7789","7790","7791","7792","7793","7794","7795","7796","7797","7798","7799","7800","7801","7802","7803","7804","7805","7806","7807","7808","7809","7810","7811","7812","7813","7814","7815","7816","7817","7818","7819","7820","7821","7822","7823","7824","7825","7826","7827","7828","7829","7830","7831","7832","7833","7834","7835","7836","7837","7838","7839","7840","7841","7842","7843","7844","7845","7846","7847","7848","7849","7850","7851","7852","7853","7854","7855","7856","7857","7858","7859","7860","7861","7862","7863","7864","7865","7866","7867","7868","7869","7870","7871","7872","7873","7874","7875","7876","7877","7878","7879","7880","7881","7882","7883","7884","7885","7886","7887","7888","7889","7890","7891","7892","7893","7894","7895","7896","7897","7898","7899","7900","7901","7902","7903","7904","7905","7906","7907","7908","7909","7910","7911","7912","7913","7914","7915","7916","7917","7918","7919","7920","7921","7922","7923","7924","7925","7926","7927","7928","7929","7930","7931","7932","7933","7934","7935","7936","7937","7938","7939","7940","7941","7942","7943","7944","7945","7946","7947","7948","7949","7950","7951","7952","7953","7954","7955","7956","7957","7958","7959","7960","7961","7962","7963","7964","7965","7966","7967","7968","7969","7970","7971","7972","7973","7974","7975","7976","7977","7978","7979","7980","7981","7982","7983","7984","7985","7986","7987","7988","7989","7990","7991","7992","7993","7994","7995","7996","7997","7998","7999","8000","8001","8002","8003","8004","8005","8006","8007","8008","8009","8010","8011","8012","8013","8014","8015","8016","8017","8018","8019","8020","8021","8022","8023","8024","8025","8026","8027","8028","8029","8030","8031","8032","8033","8034","8035","8036","8037","8038","8039","8040","8041","8042","8043","8044","8045","8046","8047","8048","8049","8050","8051","8052","8053","8054","8055","8056","8057","8058","8059","8060","8061","8062","8063","8064","8065","8066","8067","8068","8069","8070","8071","8072","8073","8074","8075","8076","8077","8078","8079","8080","8081","8082","8083","8084","8085","8086","8087","8088","8089","8090","8091","8092","8093","8094","8095","8096","8097","8098","8099","8100","8101","8102","8103","8104","8105","8106","8107","8108","8109","8110","8111","8112","8113","8114","8115","8116","8117","8118","8119","8120","8121","8122","8123","8124","8125","8126","8127","8128","8129","8130","8131","8132","8133","8134","8135","8136","8137","8138","8139","8140","8141","8142","8143","8144","8145","8146","8147","8148","8149","8150","8151","8152","8153","8154","8155","8156","8157","8158","8159","8160","8161","8162","8163","8164","8165","8166","8167","8168","8169","8170","8171","8172","8173","8174","8175","8176","8177","8178","8179","8180","8181","8182","8183","8184","8185","8186","8187","8188","8189","8190","8191","8192","8193","8194","8195","8196","8197","8198","8199","8200","8201","8202","8203","8204","8205","8206","8207","8208","8209","8210","8211","8212","8213","8214","8215","8216","8217","8218","8219","8220","8221","8222","8223","8224","8225","8226","8227","8228","8229","8230","8231","8232","8233","8234","8235","8236","8237","8238","8239","8240","8241","8242","8243","8244","8245","8246","8247","8248","8249","8250","8251","8252","8253","8254","8255","8256","8257","8258","8259","8260","8261","8262","8263","8264","8265","8266","8267","8268","8269","8270","8271","8272","8273","8274","8275","8276","8277","8278","8279","8280","8281","8282","8283","8284","8285","8286","8287","8288","8289","8290","8291","8292","8293","8294","8295","8296","8297","8298","8299","8300","8301","8302","8303","8304","8305","8306","8307","8308","8309","8310","8311","8312","8313","8314","8315","8316","8317","8318","8319","8320","8321","8322","8323","8324","8325","8326","8327","8328","8329","8330","8331","8332","8333","8334","8335","8336","8337","8338","8339","8340","8341","8342","8343","8344","8345","8346","8347","8348","8349","8350","8351","8352","8353","8354","8355","8356","8357","8358","8359","8360","8361","8362","8363","8364","8365","8366","8367","8368","8369","8370","8371","8372","8373","8374","8375","8376","8377","8378","8379","8380","8381","8382","8383","8384","8385","8386","8387","8388","8389","8390","8391","8392","8393","8394","8395","8396","8397","8398","8399","8400","8401","8402","8403","8404","8405","8406","8407","8408","8409","8410","8411","8412","8413","8414","8415","8416","8417","8418","8419","8420","8421","8422","8423","8424","8425","8426","8427","8428","8429","8430","8431","8432","8433","8434","8435","8436","8437","8438","8439","8440","8441","8442","8443","8444","8445","8446","8447","8448","8449","8450","8451","8452","8453","8454","8455","8456","8457","8458","8459","8460","8461","8462","8463","8464","8465","8466","8467","8468","8469","8470","8471","8472","8473","8474","8475","8476","8477","8478","8479","8480","8481","8482","8483","8484","8485","8486","8487","8488","8489","8490","8491","8492","8493","8494","8495","8496","8497","8498","8499","8500","8501","8502","8503","8504","8505","8506","8507","8508","8509","8510","8511","8512","8513","8514","8515","8516","8517","8518","8519","8520","8521","8522","8523","8524","8525","8526","8527","8528","8529","8530","8531","8532","8533","8534","8535","8536","8537","8538","8539","8540","8541","8542","8543","8544","8545","8546","8547","8548","8549","8550","8551","8552","8553","8554","8555","8556","8557","8558","8559","8560","8561","8562","8563","8564","8565","8566","8567","8568","8569","8570","8571","8572","8573","8574","8575","8576","8577","8578","8579","8580","8581","8582","8583","8584","8585","8586","8587","8588","8589","8590","8591","8592","8593","8594","8595","8596","8597","8598","8599","8600","8601","8602","8603","8604","8605","8606","8607","8608","8609","8610","8611","8612","8613","8614","8615","8616","8617","8618","8619","8620","8621","8622","8623","8624","8625","8626","8627","8628","8629","8630","8631","8632","8633","8634","8635","8636","8637","8638","8639","8640","8641","8642","8643","8644","8645","8646","8647","8648","8649","8650","8651","8652","8653","8654","8655","8656","8657","8658","8659","8660","8661","8662","8663","8664","8665","8666","8667","8668","8669","8670","8671","8672","8673","8674","8675","8676","8677","8678","8679","8680","8681","8682","8683","8684","8685","8686","8687","8688","8689","8690","8691","8692","8693","8694","8695","8696","8697","8698","8699","8700","8701","8702","8703","8704","8705","8706","8707","8708","8709","8710","8711","8712","8713","8714","8715","8716","8717","8718","8719","8720","8721","8722","8723","8724","8725","8726","8727","8728","8729","8730","8731","8732","8733","8734","8735","8736","8737","8738","8739","8740","8741","8742","8743","8744","8745","8746","8747","8748","8749","8750","8751","8752","8753","8754","8755","8756","8757","8758","8759","8760","8761","8762","8763","8764","8765","8766","8767","8768","8769","8770","8771","8772","8773","8774","8775","8776","8777","8778","8779","8780","8781","8782","8783","8784","8785","8786","8787","8788","8789","8790","8791","8792","8793","8794","8795","8796","8797","8798","8799","8800","8801","8802","8803","8804","8805","8806","8807","8808","8809","8810","8811","8812","8813","8814","8815","8816","8817","8818","8819","8820","8821","8822","8823","8824","8825","8826","8827","8828","8829","8830","8831","8832","8833","8834","8835","8836","8837","8838","8839","8840","8841","8842","8843","8844","8845","8846","8847","8848","8849","8850","8851","8852","8853","8854","8855","8856","8857","8858","8859","8860","8861","8862","8863","8864","8865","8866","8867","8868","8869","8870","8871","8872","8873","8874","8875","8876","8877","8878","8879","8880","8881","8882","8883","8884","8885","8886","8887","8888","8889","8890","8891","8892","8893","8894","8895","8896","8897","8898","8899","8900","8901","8902","8903","8904","8905","8906","8907","8908","8909","8910","8911","8912","8913","8914","8915","8916","8917","8918","8919","8920","8921","8922","8923","8924","8925","8926","8927","8928","8929","8930","8931","8932","8933","8934","8935","8936","8937","8938","8939","8940","8941","8942","8943","8944","8945","8946","8947","8948","8949","8950","8951","8952","8953","8954","8955","8956","8957","8958","8959","8960","8961","8962","8963","8964","8965","8966","8967","8968","8969","8970","8971","8972","8973","8974","8975","8976","8977","8978","8979","8980","8981","8982","8983","8984","8985","8986","8987","8988","8989","8990","8991","8992","8993","8994","8995","8996","8997","8998","8999","9000","9001","9002","9003","9004","9005","9006","9007","9008","9009","9010","9011","9012","9013","9014","9015","9016","9017","9018","9019","9020","9021","9022","9023","9024","9025","9026","9027","9028","9029","9030","9031","9032","9033","9034","9035","9036","9037","9038","9039","9040","9041","9042","9043","9044","9045","9046","9047","9048","9049","9050","9051","9052","9053","9054","9055","9056","9057","9058","9059","9060","9061","9062","9063","9064","9065","9066","9067","9068","9069","9070","9071","9072","9073","9074","9075","9076","9077","9078","9079","9080","9081","9082","9083","9084","9085","9086","9087","9088","9089","9090","9091","9092","9093","9094","9095","9096","9097","9098","9099","9100","9101","9102","9103","9104","9105","9106","9107","9108","9109","9110","9111","9112","9113","9114","9115","9116","9117","9118","9119","9120","9121","9122","9123","9124","9125","9126","9127","9128","9129","9130","9131","9132","9133","9134","9135","9136","9137","9138","9139","9140","9141","9142","9143","9144","9145","9146","9147","9148","9149","9150","9151","9152","9153","9154","9155","9156","9157","9158","9159","9160","9161","9162","9163","9164","9165","9166","9167","9168","9169","9170","9171","9172","9173","9174","9175","9176","9177","9178","9179","9180","9181","9182","9183","9184","9185","9186","9187","9188","9189","9190","9191","9192","9193","9194","9195","9196","9197","9198","9199","9200","9201","9202","9203","9204","9205","9206","9207","9208","9209","9210","9211","9212","9213","9214","9215","9216","9217","9218","9219","9220","9221","9222","9223","9224","9225","9226","9227","9228","9229","9230","9231","9232","9233","9234","9235","9236","9237","9238","9239","9240","9241","9242","9243","9244","9245","9246","9247","9248","9249","9250","9251","9252","9253","9254","9255","9256","9257","9258","9259","9260","9261","9262","9263","9264","9265","9266","9267","9268","9269","9270","9271","9272","9273","9274","9275","9276","9277","9278","9279","9280","9281","9282","9283","9284","9285","9286","9287","9288","9289","9290","9291","9292","9293","9294","9295","9296","9297","9298","9299","9300","9301","9302","9303","9304","9305","9306","9307","9308","9309","9310","9311","9312","9313","9314","9315","9316","9317","9318","9319","9320","9321","9322","9323","9324","9325","9326","9327","9328","9329","9330","9331","9332","9333","9334","9335","9336","9337","9338","9339","9340","9341","9342","9343","9344","9345","9346","9347","9348","9349","9350","9351","9352","9353","9354","9355","9356","9357","9358","9359","9360","9361","9362","9363","9364","9365","9366","9367","9368","9369","9370","9371","9372","9373","9374","9375","9376","9377","9378","9379","9380","9381","9382","9383","9384","9385","9386","9387","9388","9389","9390","9391","9392","9393","9394","9395","9396","9397","9398","9399","9400","9401","9402","9403","9404","9405","9406","9407","9408","9409","9410","9411","9412","9413","9414","9415","9416","9417","9418","9419","9420","9421","9422","9423","9424","9425","9426","9427","9428","9429","9430","9431","9432","9433","9434","9435","9436","9437","9438","9439","9440","9441","9442","9443","9444","9445","9446","9447","9448","9449","9450","9451","9452","9453","9454","9455","9456","9457","9458","9459","9460","9461","9462","9463","9464","9465","9466","9467","9468","9469","9470","9471","9472","9473","9474","9475","9476","9477","9478","9479","9480","9481","9482","9483","9484","9485","9486","9487","9488","9489","9490","9491","9492","9493","9494","9495","9496","9497","9498","9499","9500","9501","9502","9503","9504","9505","9506","9507","9508","9509","9510","9511","9512","9513","9514","9515","9516","9517","9518","9519","9520","9521","9522","9523","9524","9525","9526","9527","9528","9529","9530","9531","9532","9533","9534","9535","9536","9537","9538","9539","9540","9541","9542","9543","9544","9545","9546","9547","9548","9549","9550","9551","9552","9553","9554","9555","9556","9557","9558","9559","9560","9561","9562","9563","9564","9565","9566","9567","9568","9569","9570","9571","9572","9573","9574","9575","9576","9577","9578","9579","9580","9581","9582","9583","9584","9585","9586","9587","9588","9589","9590","9591","9592","9593","9594","9595","9596","9597","9598","9599","9600","9601","9602","9603","9604","9605","9606","9607","9608","9609","9610","9611","9612","9613","9614","9615","9616","9617","9618","9619","9620","9621","9622","9623","9624","9625","9626","9627","9628","9629","9630","9631","9632","9633","9634","9635","9636","9637","9638","9639","9640","9641","9642","9643","9644","9645","9646","9647","9648","9649","9650","9651","9652","9653","9654","9655","9656","9657","9658","9659","9660","9661","9662","9663","9664","9665","9666","9667","9668","9669","9670","9671","9672","9673","9674","9675","9676","9677","9678","9679","9680","9681","9682","9683","9684","9685","9686","9687","9688","9689","9690","9691","9692","9693","9694","9695","9696","9697","9698","9699","9700","9701","9702","9703","9704","9705","9706","9707","9708","9709","9710","9711","9712","9713","9714","9715","9716","9717","9718","9719","9720","9721","9722","9723","9724","9725","9726","9727","9728","9729","9730","9731","9732","9733","9734","9735","9736","9737","9738","9739","9740","9741","9742","9743","9744","9745","9746","9747","9748","9749","9750","9751","9752","9753","9754","9755","9756","9757","9758","9759","9760","9761","9762","9763","9764","9765","9766","9767","9768","9769","9770","9771","9772","9773","9774","9775","9776","9777","9778","9779","9780","9781","9782","9783","9784","9785","9786","9787","9788","9789","9790","9791","9792","9793","9794","9795","9796","9797","9798","9799","9800","9801","9802","9803","9804","9805","9806","9807","9808","9809","9810","9811","9812","9813","9814","9815","9816","9817","9818","9819","9820","9821","9822","9823","9824","9825","9826","9827","9828","9829","9830","9831","9832","9833","9834","9835","9836","9837","9838","9839","9840","9841","9842","9843","9844","9845","9846","9847","9848","9849","9850","9851","9852","9853","9854","9855","9856","9857","9858","9859","9860","9861","9862","9863","9864","9865","9866","9867","9868","9869","9870","9871","9872","9873","9874","9875","9876","9877","9878","9879","9880","9881","9882","9883","9884","9885","9886","9887","9888","9889","9890","9891","9892","9893","9894","9895","9896","9897","9898","9899","9900","9901","9902","9903","9904","9905","9906","9907","9908","9909","9910","9911","9912","9913","9914","9915","9916","9917","9918","9919","9920","9921","9922","9923","9924","9925","9926","9927","9928","9929","9930","9931","9932","9933","9934","9935","9936","9937","9938","9939","9940","9941","9942","9943","9944","9945","9946","9947","9948","9949","9950","9951","9952","9953","9954","9955","9956","9957","9958","9959","9960","9961","9962","9963","9964","9965","9966","9967","9968","9969","9970","9971","9972","9973","9974","9975","9976","9977","9978","9979","9980","9981","9982","9983","9984","9985","9986","9987","9988","9989","9990","9991","9992","9993","9994","9995","9996","9997","9998","9999","10000","10001","10002","10003","10004","10005","10006","10007","10008","10009","10010","10011","10012","10013","10014","10015","10016","10017","10018","10019","10020","10021","10022","10023","10024","10025","10026","10027","10028","10029","10030","10031","10032","10033","10034","10035","10036","10037","10038","10039","10040","10041","10042","10043","10044","10045","10046","10047","10048","10049","10050","10051","10052","10053","10054","10055","10056","10057","10058","10059","10060","10061","10062","10063","10064","10065","10066","10067","10068","10069","10070","10071","10072","10073","10074","10075","10076","10077","10078","10079","10080","10081","10082","10083","10084","10085","10086","10087","10088","10089","10090","10091","10092","10093","10094","10095","10096","10097","10098","10099","10100","10101","10102","10103","10104","10105","10106","10107","10108","10109","10110","10111","10112","10113","10114","10115","10116","10117","10118","10119","10120","10121","10122","10123","10124","10125","10126","10127","10128","10129","10130","10131","10132","10133","10134","10135","10136","10137","10138","10139","10140","10141","10142","10143","10144","10145","10146","10147","10148","10149","10150","10151","10152","10153","10154","10155","10156","10157","10158","10159","10160","10161","10162","10163","10164","10165","10166","10167","10168","10169","10170","10171","10172","10173","10174","10175","10176","10177","10178","10179","10180","10181","10182","10183","10184","10185","10186","10187","10188","10189","10190","10191","10192","10193","10194","10195","10196","10197","10198","10199","10200","10201","10202","10203","10204","10205","10206","10207","10208","10209","10210","10211","10212","10213","10214","10215","10216","10217","10218","10219","10220","10221","10222","10223","10224","10225","10226","10227","10228","10229","10230","10231","10232","10233","10234","10235","10236","10237","10238","10239","10240","10241","10242","10243","10244","10245","10246","10247","10248","10249","10250","10251","10252","10253","10254","10255","10256","10257","10258","10259","10260","10261","10262","10263","10264","10265","10266","10267","10268","10269","10270","10271","10272","10273","10274","10275","10276","10277","10278","10279","10280","10281","10282","10283","10284","10285","10286","10287","10288","10289","10290","10291","10292","10293","10294","10295","10296","10297","10298","10299","10300","10301","10302","10303","10304","10305","10306","10307","10308","10309","10310","10311","10312","10313","10314","10315","10316","10317","10318","10319","10320","10321","10322","10323","10324","10325","10326","10327","10328","10329","10330","10331","10332","10333","10334","10335","10336","10337","10338","10339","10340","10341","10342","10343","10344","10345","10346","10347","10348","10349","10350","10351","10352","10353","10354","10355","10356","10357","10358","10359","10360","10361","10362","10363","10364","10365","10366","10367","10368","10369","10370","10371","10372","10373","10374","10375","10376","10377","10378","10379","10380","10381","10382","10383","10384","10385","10386","10387","10388","10389","10390","10391","10392","10393","10394","10395","10396","10397","10398","10399","10400","10401","10402","10403","10404","10405","10406","10407","10408","10409","10410","10411","10412","10413","10414","10415","10416","10417","10418","10419","10420","10421","10422","10423","10424","10425","10426","10427","10428","10429","10430","10431","10432","10433","10434","10435","10436","10437","10438","10439","10440","10441","10442","10443","10444","10445","10446","10447","10448","10449","10450","10451","10452","10453","10454","10455","10456","10457","10458","10459","10460","10461","10462","10463","10464","10465","10466","10467","10468","10469","10470","10471","10472","10473","10474","10475","10476","10477","10478","10479","10480","10481","10482","10483","10484","10485","10486","10487","10488","10489","10490","10491","10492","10493","10494","10495","10496","10497","10498","10499","10500","10501","10502","10503","10504","10505","10506","10507","10508","10509","10510","10511","10512","10513","10514","10515","10516","10517","10518","10519","10520","10521","10522","10523","10524","10525","10526","10527","10528","10529","10530","10531","10532","10533","10534","10535","10536","10537","10538","10539","10540","10541","10542","10543","10544","10545","10546","10547","10548","10549","10550","10551","10552","10553","10554","10555","10556","10557","10558","10559","10560","10561","10562","10563","10564","10565","10566","10567","10568","10569","10570","10571","10572","10573","10574","10575","10576","10577","10578","10579","10580","10581","10582","10583","10584","10585","10586","10587","10588","10589","10590","10591","10592","10593","10594","10595","10596","10597","10598","10599","10600","10601","10602","10603","10604","10605","10606","10607","10608","10609","10610","10611","10612","10613","10614","10615","10616","10617","10618","10619","10620","10621","10622","10623","10624","10625","10626","10627","10628","10629","10630","10631","10632","10633","10634","10635","10636","10637","10638","10639","10640","10641","10642","10643","10644","10645","10646","10647","10648","10649","10650","10651","10652","10653","10654","10655","10656","10657","10658","10659","10660","10661","10662","10663","10664","10665","10666","10667","10668","10669","10670","10671","10672","10673","10674","10675","10676","10677","10678","10679","10680","10681","10682","10683","10684","10685","10686","10687","10688","10689","10690","10691","10692","10693","10694","10695","10696","10697","10698","10699","10700","10701","10702","10703","10704","10705","10706","10707","10708","10709","10710","10711","10712","10713","10714","10715","10716","10717","10718","10719","10720","10721","10722","10723","10724","10725","10726","10727","10728","10729","10730","10731","10732","10733","10734","10735","10736","10737","10738","10739","10740","10741","10742","10743","10744","10745","10746","10747","10748","10749","10750","10751","10752","10753","10754","10755","10756","10757","10758","10759","10760","10761","10762","10763","10764","10765","10766","10767","10768","10769","10770","10771","10772","10773","10774","10775","10776","10777","10778","10779","10780","10781","10782","10783","10784","10785","10786","10787","10788","10789","10790","10791","10792","10793","10794","10795","10796","10797","10798","10799","10800","10801","10802","10803","10804","10805","10806","10807","10808","10809","10810","10811","10812","10813","10814","10815","10816","10817","10818","10819","10820","10821","10822","10823","10824","10825","10826","10827","10828","10829","10830","10831","10832","10833","10834","10835","10836","10837","10838","10839","10840","10841","10842","10843","10844","10845","10846","10847","10848","10849","10850","10851","10852","10853","10854","10855","10856","10857","10858","10859","10860","10861","10862","10863","10864","10865","10866","10867","10868","10869","10870","10871","10872","10873","10874","10875","10876","10877","10878","10879","10880","10881","10882","10883","10884","10885","10886","10887","10888","10889","10890","10891","10892","10893","10894","10895","10896","10897","10898","10899","10900","10901","10902","10903","10904","10905","10906","10907","10908","10909","10910","10911","10912","10913","10914","10915","10916","10917","10918","10919","10920","10921","10922","10923","10924","10925","10926","10927","10928","10929","10930","10931","10932","10933","10934","10935","10936","10937","10938","10939","10940","10941","10942","10943","10944","10945","10946","10947","10948","10949","10950","10951","10952","10953","10954","10955","10956","10957","10958","10959","10960","10961","10962","10963","10964","10965","10966","10967","10968","10969","10970","10971","10972","10973","10974","10975","10976","10977","10978","10979","10980","10981","10982","10983","10984","10985","10986","10987","10988","10989","10990","10991","10992","10993","10994","10995","10996","10997","10998","10999","11000","11001","11002","11003","11004","11005","11006","11007","11008","11009","11010","11011","11012","11013","11014","11015","11016","11017","11018","11019","11020","11021","11022","11023","11024","11025","11026","11027","11028","11029","11030","11031","11032","11033","11034","11035","11036","11037","11038","11039","11040","11041","11042","11043","11044","11045","11046","11047","11048","11049","11050","11051","11052","11053","11054","11055","11056","11057","11058","11059","11060","11061","11062","11063","11064","11065","11066","11067","11068","11069","11070","11071","11072","11073","11074","11075","11076","11077","11078","11079","11080","11081","11082","11083","11084","11085","11086","11087","11088","11089","11090","11091","11092","11093","11094","11095","11096","11097","11098","11099","11100","11101","11102","11103","11104","11105","11106","11107","11108","11109","11110","11111","11112","11113","11114","11115","11116","11117","11118","11119","11120","11121","11122","11123","11124","11125","11126","11127","11128","11129","11130","11131","11132","11133","11134","11135","11136","11137","11138","11139","11140","11141","11142","11143","11144","11145","11146","11147","11148","11149","11150","11151","11152","11153","11154","11155","11156","11157","11158","11159","11160","11161","11162","11163","11164","11165","11166","11167","11168","11169","11170","11171","11172","11173","11174","11175","11176","11177","11178","11179","11180","11181","11182","11183","11184","11185","11186","11187","11188","11189","11190","11191","11192","11193","11194","11195","11196","11197","11198","11199","11200","11201","11202","11203","11204","11205","11206","11207","11208","11209","11210","11211","11212","11213","11214","11215","11216","11217","11218","11219","11220","11221","11222","11223","11224","11225","11226","11227","11228","11229","11230","11231","11232","11233","11234","11235","11236","11237","11238","11239","11240","11241","11242","11243","11244","11245","11246","11247","11248","11249","11250","11251","11252","11253","11254","11255","11256","11257","11258","11259","11260","11261","11262","11263","11264","11265","11266","11267","11268","11269","11270","11271","11272","11273","11274","11275","11276","11277","11278","11279","11280","11281","11282","11283","11284","11285","11286","11287","11288","11289","11290","11291","11292","11293","11294","11295","11296","11297","11298","11299","11300","11301","11302","11303","11304","11305","11306","11307","11308","11309","11310","11311","11312","11313","11314","11315","11316","11317","11318","11319","11320","11321","11322","11323","11324","11325","11326","11327","11328","11329","11330","11331","11332","11333","11334","11335","11336","11337","11338","11339","11340","11341","11342","11343","11344","11345","11346","11347","11348","11349","11350","11351","11352","11353","11354","11355","11356","11357","11358","11359","11360","11361","11362","11363","11364","11365","11366","11367","11368","11369","11370","11371","11372","11373","11374","11375","11376","11377","11378","11379","11380","11381","11382","11383","11384","11385","11386","11387","11388","11389","11390","11391","11392","11393","11394","11395","11396","11397","11398","11399","11400","11401","11402","11403","11404","11405","11406","11407","11408","11409","11410","11411","11412","11413","11414","11415","11416","11417","11418","11419","11420","11421","11422","11423","11424","11425","11426","11427","11428","11429","11430","11431","11432","11433","11434","11435","11436","11437","11438","11439","11440","11441","11442","11443","11444","11445","11446","11447","11448","11449","11450","11451","11452","11453","11454","11455","11456","11457","11458","11459","11460","11461","11462","11463","11464","11465","11466","11467","11468","11469","11470","11471","11472","11473","11474","11475","11476","11477","11478","11479","11480","11481","11482","11483","11484","11485","11486","11487","11488","11489","11490","11491","11492","11493","11494","11495","11496","11497","11498","11499","11500","11501","11502","11503","11504","11505","11506","11507","11508","11509","11510","11511","11512","11513","11514","11515","11516","11517","11518","11519","11520","11521","11522","11523","11524","11525","11526","11527","11528","11529","11530","11531","11532","11533","11534","11535","11536","11537","11538","11539","11540","11541","11542","11543","11544","11545","11546","11547","11548","11549","11550","11551","11552","11553","11554","11555","11556","11557","11558","11559","11560","11561","11562","11563","11564","11565","11566","11567","11568","11569","11570","11571","11572","11573","11574","11575","11576","11577","11578","11579","11580","11581","11582","11583","11584","11585","11586","11587","11588","11589","11590","11591","11592","11593","11594","11595","11596","11597","11598","11599","11600","11601","11602","11603","11604","11605","11606","11607","11608","11609","11610","11611","11612","11613","11614","11615","11616","11617","11618","11619","11620","11621","11622","11623","11624","11625","11626","11627","11628","11629","11630","11631","11632","11633","11634","11635","11636","11637","11638","11639","11640","11641","11642","11643","11644","11645","11646","11647","11648","11649","11650","11651","11652","11653","11654","11655","11656","11657","11658","11659","11660","11661","11662","11663","11664","11665","11666","11667","11668","11669","11670","11671","11672","11673","11674","11675","11676","11677","11678","11679","11680","11681","11682","11683","11684","11685","11686","11687","11688","11689","11690","11691","11692","11693","11694","11695","11696","11697","11698","11699","11700","11701","11702","11703","11704","11705","11706","11707","11708","11709","11710","11711","11712","11713","11714","11715","11716","11717","11718","11719","11720","11721","11722","11723","11724","11725","11726","11727","11728","11729","11730","11731","11732","11733","11734","11735","11736","11737","11738","11739","11740","11741","11742","11743","11744","11745","11746","11747","11748","11749","11750","11751","11752","11753","11754","11755","11756","11757","11758","11759","11760","11761","11762","11763","11764","11765","11766","11767","11768","11769","11770","11771","11772","11773","11774","11775","11776","11777","11778","11779","11780","11781","11782","11783","11784","11785","11786","11787","11788","11789","11790","11791","11792","11793","11794","11795","11796","11797","11798","11799","11800","11801","11802","11803","11804","11805","11806","11807","11808","11809","11810","11811","11812","11813","11814","11815","11816","11817","11818","11819","11820","11821","11822","11823","11824","11825","11826","11827","11828","11829","11830","11831","11832","11833","11834","11835","11836","11837","11838","11839","11840","11841","11842","11843","11844","11845","11846","11847","11848","11849","11850","11851","11852","11853","11854","11855","11856","11857","11858","11859","11860","11861","11862","11863","11864","11865","11866","11867","11868","11869","11870","11871","11872","11873","11874","11875","11876","11877","11878","11879","11880","11881","11882","11883","11884","11885","11886","11887","11888","11889","11890","11891","11892","11893","11894","11895","11896","11897","11898","11899","11900","11901","11902","11903","11904","11905","11906","11907","11908","11909","11910","11911","11912","11913","11914","11915","11916","11917","11918","11919","11920","11921","11922","11923","11924","11925","11926","11927","11928","11929","11930","11931","11932","11933","11934","11935","11936","11937","11938","11939","11940","11941","11942","11943","11944","11945","11946","11947","11948","11949","11950","11951","11952","11953","11954","11955","11956","11957","11958","11959","11960","11961","11962","11963","11964","11965","11966","11967","11968","11969","11970","11971","11972","11973","11974","11975","11976","11977","11978","11979","11980","11981","11982","11983","11984","11985","11986","11987","11988","11989","11990","11991","11992","11993","11994","11995","11996","11997","11998","11999","12000","12001","12002","12003","12004","12005","12006","12007","12008","12009","12010","12011","12012","12013","12014","12015","12016","12017","12018","12019","12020","12021","12022","12023","12024","12025","12026","12027","12028","12029","12030","12031","12032","12033","12034","12035","12036","12037","12038","12039","12040","12041","12042","12043","12044","12045","12046","12047","12048","12049","12050","12051","12052","12053","12054","12055","12056","12057","12058","12059","12060","12061","12062","12063","12064","12065","12066","12067","12068","12069","12070","12071","12072","12073","12074","12075","12076","12077","12078","12079","12080","12081","12082","12083","12084","12085","12086","12087","12088","12089","12090","12091","12092","12093","12094","12095","12096","12097","12098","12099","12100","12101","12102","12103","12104","12105","12106","12107","12108","12109","12110","12111","12112","12113","12114","12115","12116","12117","12118","12119","12120","12121","12122","12123","12124","12125","12126","12127","12128","12129","12130","12131","12132","12133","12134","12135","12136","12137","12138","12139","12140","12141","12142","12143","12144","12145","12146","12147","12148","12149","12150","12151","12152","12153","12154","12155","12156","12157","12158","12159","12160","12161","12162","12163","12164","12165","12166","12167","12168","12169","12170","12171","12172","12173","12174","12175","12176","12177","12178","12179","12180","12181","12182","12183","12184","12185","12186","12187","12188","12189","12190","12191","12192","12193","12194","12195","12196","12197","12198","12199","12200","12201","12202","12203","12204","12205","12206","12207","12208","12209","12210","12211","12212","12213","12214","12215","12216","12217","12218","12219","12220","12221","12222","12223","12224","12225","12226","12227","12228","12229","12230","12231","12232","12233","12234","12235","12236","12237","12238","12239","12240","12241","12242","12243","12244","12245","12246","12247","12248","12249","12250","12251","12252","12253","12254","12255","12256","12257","12258","12259","12260","12261","12262","12263","12264","12265","12266","12267","12268","12269","12270","12271","12272","12273","12274","12275","12276","12277","12278","12279","12280","12281","12282","12283","12284","12285","12286","12287","12288","12289","12290","12291","12292","12293","12294","12295","12296","12297","12298","12299","12300","12301","12302","12303","12304","12305","12306","12307","12308","12309","12310","12311","12312","12313","12314","12315","12316","12317","12318","12319","12320","12321","12322","12323","12324","12325","12326","12327","12328","12329","12330","12331","12332","12333","12334","12335","12336","12337","12338","12339","12340","12341","12342","12343","12344","12345","12346","12347","12348","12349","12350","12351","12352","12353","12354","12355","12356","12357","12358","12359","12360","12361","12362","12363","12364","12365","12366","12367","12368","12369","12370","12371","12372","12373","12374","12375","12376","12377","12378","12379","12380","12381","12382","12383","12384","12385","12386","12387","12388","12389","12390","12391","12392","12393","12394","12395","12396","12397","12398","12399","12400","12401","12402","12403","12404","12405","12406","12407","12408","12409","12410","12411","12412","12413","12414","12415","12416","12417","12418","12419","12420","12421","12422","12423","12424","12425","12426","12427","12428","12429","12430","12431","12432","12433","12434","12435","12436","12437","12438","12439","12440","12441","12442","12443","12444","12445","12446","12447","12448","12449","12450","12451","12452","12453","12454","12455","12456","12457","12458","12459","12460","12461","12462","12463","12464","12465","12466","12467","12468","12469","12470","12471","12472","12473","12474","12475","12476","12477","12478","12479","12480","12481","12482","12483","12484","12485","12486","12487","12488","12489","12490","12491","12492","12493","12494","12495","12496","12497","12498","12499","12500","12501","12502","12503","12504","12505","12506","12507","12508","12509","12510","12511","12512","12513","12514","12515","12516","12517","12518","12519","12520","12521","12522","12523","12524","12525","12526","12527","12528","12529","12530","12531","12532","12533","12534","12535","12536","12537","12538","12539","12540","12541","12542","12543","12544","12545","12546","12547","12548","12549","12550","12551","12552","12553","12554","12555","12556","12557","12558","12559","12560","12561","12562","12563","12564","12565","12566","12567","12568","12569","12570","12571","12572","12573","12574","12575","12576","12577","12578","12579","12580","12581","12582","12583","12584","12585","12586","12587","12588","12589","12590","12591","12592","12593","12594","12595","12596","12597","12598","12599","12600","12601","12602","12603","12604","12605","12606","12607","12608","12609","12610","12611","12612","12613","12614","12615","12616","12617","12618","12619","12620","12621","12622","12623","12624","12625","12626","12627","12628","12629","12630","12631","12632","12633","12634","12635","12636","12637","12638","12639","12640","12641","12642","12643","12644","12645","12646","12647","12648","12649","12650","12651","12652","12653","12654","12655","12656","12657","12658","12659","12660","12661","12662","12663","12664","12665","12666","12667","12668","12669","12670","12671","12672","12673","12674","12675","12676","12677","12678","12679","12680","12681","12682","12683","12684","12685","12686","12687","12688","12689","12690","12691","12692","12693","12694","12695","12696","12697","12698","12699","12700","12701","12702","12703","12704","12705","12706","12707","12708","12709","12710","12711","12712","12713","12714","12715","12716","12717","12718","12719","12720","12721","12722","12723","12724","12725","12726","12727","12728","12729","12730","12731","12732","12733","12734","12735","12736","12737","12738","12739","12740","12741","12742","12743","12744","12745","12746","12747","12748","12749","12750","12751","12752","12753","12754","12755","12756","12757","12758","12759","12760","12761","12762","12763","12764","12765","12766","12767","12768","12769","12770","12771","12772","12773","12774","12775","12776","12777","12778","12779","12780","12781","12782","12783","12784","12785","12786","12787","12788","12789","12790","12791","12792","12793","12794","12795","12796","12797","12798","12799","12800","12801","12802","12803","12804","12805","12806","12807","12808","12809","12810","12811","12812","12813","12814","12815","12816","12817","12818","12819","12820","12821","12822","12823","12824","12825","12826","12827","12828","12829","12830","12831","12832","12833","12834","12835","12836","12837","12838","12839","12840","12841","12842","12843","12844","12845","12846","12847","12848","12849","12850","12851","12852","12853","12854","12855","12856","12857","12858","12859","12860","12861","12862","12863","12864","12865","12866","12867","12868","12869","12870","12871","12872","12873","12874","12875","12876","12877","12878","12879","12880","12881","12882","12883","12884","12885","12886","12887","12888","12889","12890","12891","12892","12893","12894","12895","12896","12897","12898","12899","12900","12901","12902","12903","12904","12905","12906","12907","12908","12909","12910","12911","12912","12913","12914","12915","12916","12917","12918","12919","12920","12921","12922","12923","12924","12925","12926","12927","12928","12929","12930","12931","12932","12933","12934","12935","12936","12937","12938","12939","12940","12941","12942","12943","12944","12945","12946","12947","12948","12949","12950","12951","12952","12953","12954","12955","12956","12957","12958","12959","12960","12961","12962","12963","12964","12965","12966","12967","12968","12969","12970","12971","12972","12973","12974","12975","12976","12977","12978","12979","12980","12981","12982","12983","12984","12985","12986","12987","12988","12989","12990","12991","12992","12993","12994","12995","12996","12997","12998","12999","13000","13001","13002","13003","13004","13005","13006","13007","13008","13009","13010","13011","13012","13013","13014","13015","13016","13017","13018","13019","13020","13021","13022","13023","13024","13025","13026","13027","13028","13029","13030","13031","13032","13033","13034","13035","13036","13037","13038","13039","13040","13041","13042","13043","13044","13045","13046","13047","13048","13049","13050","13051","13052","13053","13054","13055","13056","13057","13058","13059","13060","13061","13062","13063","13064","13065","13066","13067","13068","13069","13070","13071","13072","13073","13074","13075","13076","13077","13078","13079","13080","13081","13082","13083","13084","13085","13086","13087","13088","13089","13090","13091","13092","13093","13094","13095","13096","13097","13098","13099","13100","13101","13102","13103","13104","13105","13106","13107","13108","13109","13110","13111","13112","13113","13114","13115","13116","13117","13118","13119","13120","13121","13122","13123","13124","13125","13126","13127","13128","13129","13130","13131","13132","13133","13134","13135","13136","13137","13138","13139","13140","13141","13142","13143","13144","13145","13146","13147","13148","13149","13150","13151","13152","13153","13154","13155","13156","13157","13158","13159","13160","13161","13162","13163","13164","13165","13166","13167","13168","13169","13170","13171","13172","13173","13174","13175","13176","13177","13178","13179","13180","13181","13182","13183","13184","13185","13186","13187","13188","13189","13190","13191","13192","13193","13194","13195","13196","13197","13198","13199","13200","13201","13202","13203","13204","13205","13206","13207","13208","13209","13210","13211","13212","13213","13214","13215","13216","13217","13218","13219","13220","13221","13222","13223","13224","13225","13226","13227","13228","13229","13230","13231","13232","13233","13234","13235","13236","13237","13238","13239","13240","13241","13242","13243","13244","13245","13246","13247","13248","13249","13250","13251","13252","13253","13254","13255","13256","13257","13258","13259","13260","13261","13262","13263","13264","13265","13266","13267","13268","13269","13270","13271","13272","13273","13274","13275","13276","13277","13278","13279","13280","13281","13282","13283","13284","13285","13286","13287","13288","13289","13290","13291","13292","13293","13294","13295","13296","13297","13298","13299","13300","13301","13302","13303","13304","13305","13306","13307","13308","13309","13310","13311","13312","13313","13314","13315","13316","13317","13318","13319","13320","13321","13322","13323","13324","13325","13326","13327","13328","13329","13330","13331","13332","13333","13334","13335","13336","13337","13338","13339","13340","13341","13342","13343","13344","13345","13346","13347","13348","13349","13350","13351","13352","13353","13354","13355","13356","13357","13358","13359","13360","13361","13362","13363","13364","13365","13366","13367","13368","13369","13370","13371","13372","13373","13374","13375","13376","13377","13378","13379","13380","13381","13382","13383","13384","13385","13386","13387","13388","13389","13390","13391","13392","13393","13394","13395","13396","13397","13398","13399","13400","13401","13402","13403","13404","13405","13406","13407","13408","13409","13410","13411","13412","13413","13414","13415","13416","13417","13418","13419","13420","13421","13422","13423","13424","13425","13426","13427","13428","13429","13430","13431","13432","13433","13434","13435","13436","13437","13438","13439","13440","13441","13442","13443","13444","13445","13446","13447","13448","13449","13450","13451","13452","13453","13454","13455","13456","13457","13458","13459","13460","13461","13462","13463","13464","13465","13466","13467","13468","13469","13470","13471","13472","13473","13474","13475","13476","13477","13478","13479","13480","13481","13482","13483","13484","13485","13486","13487","13488","13489","13490","13491","13492","13493","13494","13495","13496","13497","13498","13499","13500","13501","13502","13503","13504","13505","13506","13507","13508","13509","13510","13511","13512","13513","13514","13515","13516","13517","13518","13519","13520","13521","13522","13523","13524","13525","13526","13527","13528","13529","13530","13531","13532","13533","13534","13535","13536","13537","13538","13539","13540","13541","13542","13543","13544","13545","13546","13547","13548","13549","13550","13551","13552","13553","13554","13555","13556","13557","13558","13559","13560","13561","13562","13563","13564","13565","13566","13567","13568","13569","13570","13571","13572","13573","13574","13575","13576","13577","13578","13579","13580","13581","13582","13583","13584","13585","13586","13587","13588","13589","13590","13591","13592","13593","13594","13595","13596","13597","13598","13599","13600","13601","13602","13603","13604","13605","13606","13607","13608","13609","13610","13611","13612","13613","13614","13615","13616","13617","13618","13619","13620","13621","13622","13623","13624","13625","13626","13627","13628","13629","13630","13631","13632","13633","13634","13635","13636","13637","13638","13639","13640","13641","13642","13643","13644","13645","13646","13647","13648","13649","13650","13651","13652","13653","13654","13655","13656","13657","13658","13659","13660","13661","13662","13663","13664","13665","13666","13667","13668","13669","13670","13671","13672","13673","13674","13675","13676","13677","13678","13679","13680","13681","13682","13683","13684","13685","13686","13687","13688","13689","13690","13691","13692","13693","13694","13695","13696","13697","13698","13699","13700","13701","13702","13703","13704","13705","13706","13707","13708","13709","13710","13711","13712","13713","13714","13715","13716","13717","13718","13719","13720","13721","13722","13723","13724","13725","13726","13727","13728","13729","13730","13731","13732","13733","13734","13735","13736","13737","13738","13739","13740","13741","13742","13743","13744","13745","13746","13747","13748","13749","13750","13751","13752","13753","13754","13755","13756","13757","13758","13759","13760","13761","13762","13763","13764","13765","13766","13767","13768","13769","13770","13771","13772","13773","13774","13775","13776","13777","13778","13779","13780","13781","13782","13783","13784","13785","13786","13787","13788","13789","13790","13791","13792","13793","13794","13795","13796","13797","13798","13799","13800","13801","13802","13803","13804","13805","13806","13807","13808","13809","13810","13811","13812","13813","13814","13815","13816","13817","13818","13819","13820","13821","13822","13823","13824","13825","13826","13827","13828","13829","13830","13831","13832","13833","13834","13835","13836","13837","13838","13839","13840","13841","13842","13843","13844","13845","13846","13847","13848","13849","13850","13851","13852","13853","13854","13855","13856","13857","13858","13859","13860","13861","13862","13863","13864","13865","13866","13867","13868","13869","13870","13871","13872","13873","13874","13875","13876","13877","13878","13879","13880","13881","13882","13883","13884","13885","13886","13887","13888","13889","13890","13891","13892","13893","13894","13895","13896","13897","13898","13899","13900","13901","13902","13903","13904","13905","13906","13907","13908","13909","13910","13911","13912","13913","13914","13915","13916","13917","13918","13919","13920","13921","13922","13923","13924","13925","13926","13927","13928","13929","13930","13931","13932","13933","13934","13935","13936","13937","13938","13939","13940","13941","13942","13943","13944","13945","13946","13947","13948","13949","13950","13951","13952","13953","13954","13955","13956","13957","13958","13959","13960","13961","13962","13963","13964","13965","13966","13967","13968","13969","13970","13971","13972","13973","13974","13975","13976","13977","13978","13979","13980","13981","13982","13983","13984","13985","13986","13987","13988","13989","13990","13991","13992","13993","13994","13995","13996","13997","13998","13999","14000","14001","14002","14003","14004","14005","14006","14007","14008","14009","14010","14011","14012","14013","14014","14015","14016","14017","14018","14019","14020","14021","14022","14023","14024","14025","14026","14027","14028","14029","14030","14031","14032","14033","14034","14035","14036","14037","14038","14039","14040","14041","14042","14043","14044","14045","14046","14047","14048","14049","14050","14051","14052","14053","14054","14055","14056","14057","14058","14059","14060","14061","14062","14063","14064","14065","14066","14067","14068","14069","14070","14071","14072","14073","14074","14075","14076","14077","14078","14079","14080","14081","14082","14083","14084","14085","14086","14087","14088","14089","14090","14091","14092","14093","14094","14095","14096","14097","14098","14099","14100","14101","14102","14103","14104","14105","14106","14107","14108","14109","14110","14111","14112","14113","14114","14115","14116","14117","14118","14119","14120","14121","14122","14123","14124","14125","14126","14127","14128","14129","14130","14131","14132","14133","14134","14135","14136","14137","14138","14139","14140","14141","14142","14143","14144","14145","14146","14147","14148","14149","14150","14151","14152","14153","14154","14155","14156","14157","14158","14159","14160","14161","14162","14163","14164","14165","14166","14167","14168","14169","14170","14171","14172","14173","14174","14175","14176","14177","14178","14179","14180","14181","14182","14183","14184","14185","14186","14187","14188","14189","14190","14191","14192","14193","14194","14195","14196","14197","14198","14199","14200","14201","14202","14203","14204","14205","14206","14207","14208","14209","14210","14211","14212","14213","14214","14215","14216","14217","14218","14219","14220","14221","14222","14223","14224","14225","14226","14227","14228","14229","14230","14231","14232","14233","14234","14235","14236","14237","14238","14239","14240","14241","14242","14243","14244","14245","14246","14247","14248","14249","14250","14251","14252","14253","14254","14255","14256","14257","14258","14259","14260","14261","14262","14263","14264","14265","14266","14267","14268","14269","14270","14271","14272","14273","14274","14275","14276","14277","14278","14279","14280","14281","14282","14283","14284","14285","14286","14287","14288","14289","14290","14291","14292","14293","14294","14295","14296","14297","14298","14299","14300","14301","14302","14303","14304","14305","14306","14307","14308","14309","14310","14311","14312","14313","14314","14315","14316","14317","14318","14319","14320","14321","14322","14323","14324","14325","14326","14327","14328","14329","14330","14331","14332","14333","14334","14335","14336","14337","14338","14339","14340","14341","14342","14343","14344","14345","14346","14347","14348","14349","14350","14351","14352","14353","14354","14355","14356","14357","14358","14359","14360","14361","14362","14363","14364","14365","14366","14367","14368","14369","14370","14371","14372","14373","14374","14375","14376","14377","14378","14379","14380","14381","14382","14383","14384","14385","14386","14387","14388","14389","14390","14391","14392","14393","14394","14395","14396","14397","14398","14399","14400","14401","14402","14403","14404","14405","14406","14407","14408","14409","14410","14411","14412","14413","14414","14415","14416","14417","14418","14419","14420","14421","14422","14423","14424","14425","14426","14427","14428","14429","14430","14431","14432","14433","14434","14435","14436","14437","14438","14439","14440","14441","14442","14443","14444","14445","14446","14447","14448","14449","14450","14451","14452","14453","14454","14455","14456","14457","14458","14459","14460","14461","14462","14463","14464","14465","14466","14467","14468","14469","14470","14471","14472","14473","14474","14475","14476","14477","14478","14479","14480","14481","14482","14483","14484","14485","14486","14487","14488","14489","14490","14491","14492","14493","14494","14495","14496","14497","14498","14499","14500","14501","14502","14503","14504","14505","14506","14507","14508","14509","14510","14511","14512","14513","14514","14515","14516","14517","14518","14519","14520","14521","14522","14523","14524","14525","14526","14527","14528","14529","14530","14531","14532","14533","14534","14535","14536","14537","14538","14539","14540","14541","14542","14543","14544","14545","14546","14547","14548","14549","14550","14551","14552","14553","14554","14555","14556","14557","14558","14559","14560","14561","14562","14563","14564","14565","14566","14567","14568","14569","14570","14571","14572","14573","14574","14575","14576","14577","14578","14579","14580","14581","14582","14583","14584","14585","14586","14587","14588","14589","14590","14591","14592","14593","14594","14595","14596","14597","14598","14599","14600","14601","14602","14603","14604","14605","14606","14607","14608","14609","14610","14611","14612","14613","14614","14615","14616","14617","14618","14619","14620","14621","14622","14623","14624","14625","14626","14627","14628","14629","14630","14631","14632","14633","14634","14635","14636","14637","14638","14639","14640","14641","14642","14643","14644","14645","14646","14647","14648","14649","14650","14651","14652","14653","14654","14655","14656","14657","14658","14659","14660","14661","14662","14663","14664","14665","14666","14667","14668","14669","14670","14671","14672","14673","14674","14675","14676","14677","14678","14679","14680","14681","14682","14683","14684","14685","14686","14687","14688","14689","14690","14691","14692","14693","14694","14695","14696","14697","14698","14699","14700","14701","14702","14703","14704","14705","14706","14707","14708","14709","14710","14711","14712","14713","14714","14715","14716","14717","14718","14719","14720","14721","14722","14723","14724","14725","14726","14727","14728","14729","14730","14731","14732","14733","14734","14735","14736","14737","14738","14739","14740","14741","14742","14743","14744","14745","14746","14747","14748","14749","14750","14751","14752","14753","14754","14755","14756","14757","14758","14759","14760","14761","14762","14763","14764","14765","14766","14767","14768","14769","14770","14771","14772","14773","14774","14775","14776","14777","14778","14779","14780","14781","14782","14783","14784","14785","14786","14787","14788","14789","14790","14791","14792","14793","14794","14795","14796","14797","14798","14799","14800","14801","14802","14803","14804","14805","14806","14807","14808","14809","14810","14811","14812","14813","14814","14815","14816","14817","14818","14819","14820","14821","14822","14823","14824","14825","14826","14827","14828","14829","14830","14831","14832","14833","14834","14835","14836","14837","14838","14839","14840","14841","14842","14843","14844","14845","14846","14847","14848","14849","14850","14851","14852","14853","14854","14855","14856","14857","14858","14859","14860","14861","14862","14863","14864","14865","14866","14867","14868","14869","14870","14871","14872","14873","14874","14875","14876","14877","14878","14879","14880","14881","14882","14883","14884","14885","14886","14887","14888","14889","14890","14891","14892","14893","14894","14895","14896","14897","14898","14899","14900","14901","14902","14903","14904","14905","14906","14907","14908","14909","14910","14911","14912","14913","14914","14915","14916","14917","14918","14919","14920","14921","14922","14923","14924","14925","14926","14927","14928","14929","14930","14931","14932","14933","14934","14935","14936","14937","14938","14939","14940","14941","14942","14943","14944","14945","14946","14947","14948","14949","14950","14951","14952","14953","14954","14955","14956","14957","14958","14959","14960","14961","14962","14963","14964","14965","14966","14967","14968","14969","14970","14971","14972","14973","14974","14975","14976","14977","14978","14979","14980","14981","14982","14983","14984","14985","14986","14987","14988","14989","14990","14991","14992","14993","14994","14995","14996","14997","14998","14999","15000","15001","15002","15003","15004","15005","15006","15007","15008","15009","15010","15011","15012","15013","15014","15015","15016","15017","15018","15019","15020","15021","15022","15023","15024","15025","15026","15027","15028","15029","15030","15031","15032","15033","15034","15035","15036","15037","15038","15039","15040","15041","15042","15043","15044","15045","15046","15047","15048","15049","15050","15051","15052","15053","15054","15055","15056","15057","15058","15059","15060","15061","15062","15063","15064","15065","15066","15067","15068","15069","15070","15071","15072","15073","15074","15075","15076","15077","15078","15079","15080","15081","15082","15083","15084","15085","15086","15087","15088","15089","15090","15091","15092","15093","15094","15095","15096","15097","15098","15099","15100","15101","15102","15103","15104","15105","15106","15107","15108","15109","15110","15111","15112","15113","15114","15115","15116","15117","15118","15119","15120","15121","15122","15123","15124","15125","15126","15127","15128","15129","15130","15131","15132","15133","15134","15135","15136","15137","15138","15139","15140","15141","15142","15143","15144","15145","15146","15147","15148","15149","15150","15151","15152","15153","15154","15155","15156","15157","15158","15159","15160","15161","15162","15163","15164","15165","15166","15167","15168","15169","15170","15171","15172","15173","15174","15175","15176","15177","15178","15179","15180","15181","15182","15183","15184","15185","15186","15187","15188","15189","15190","15191","15192","15193","15194","15195","15196","15197","15198","15199","15200","15201","15202","15203","15204","15205","15206","15207","15208","15209","15210","15211","15212","15213","15214","15215","15216","15217","15218","15219","15220","15221","15222","15223","15224","15225","15226","15227","15228","15229","15230","15231","15232","15233","15234","15235","15236","15237","15238","15239","15240","15241","15242","15243","15244","15245","15246","15247","15248","15249","15250","15251","15252","15253","15254","15255","15256","15257","15258","15259","15260","15261","15262","15263","15264","15265","15266","15267","15268","15269","15270","15271","15272","15273","15274","15275","15276","15277","15278","15279","15280","15281","15282","15283","15284","15285","15286","15287","15288","15289","15290","15291","15292","15293","15294","15295","15296","15297","15298","15299","15300","15301","15302","15303","15304","15305","15306","15307","15308","15309","15310","15311","15312","15313","15314","15315","15316","15317","15318","15319","15320","15321","15322","15323","15324","15325","15326","15327","15328","15329","15330","15331","15332","15333","15334","15335","15336","15337","15338","15339","15340","15341","15342","15343","15344","15345","15346","15347","15348","15349","15350","15351","15352","15353","15354","15355","15356","15357","15358","15359","15360","15361","15362","15363","15364","15365","15366","15367","15368","15369","15370","15371","15372","15373","15374","15375","15376","15377","15378","15379","15380","15381","15382","15383","15384","15385","15386","15387","15388","15389","15390","15391","15392","15393","15394","15395","15396","15397","15398","15399","15400","15401","15402","15403","15404","15405","15406","15407","15408","15409","15410","15411","15412","15413","15414","15415","15416","15417","15418","15419","15420","15421","15422","15423","15424","15425","15426","15427","15428","15429","15430","15431","15432","15433","15434","15435","15436","15437","15438","15439","15440","15441","15442","15443","15444","15445","15446","15447","15448","15449","15450","15451","15452","15453","15454","15455","15456","15457","15458","15459","15460","15461","15462","15463","15464","15465","15466","15467","15468","15469","15470","15471","15472","15473","15474","15475","15476","15477","15478","15479","15480","15481","15482","15483","15484"],"amountAUMTotal":[3238683963404,1458202207981,1435041550942,1144017666981,1105010882939,941236118198,892601202607,755955008121,707025858737,644940297675,623633116893,587616984807,578335027128,575341577965,535890075705,491297599217,461290822092,436186843136,424504874312,411810422485,401087558687,384947572235,372112672153,372046175105,359060623475,358253449119,338819167107,336117494872,323067278274,312299673511,289895377014,286435509012,280190194102,272306534765,269885924929,267843552270,259473512026,257852134237,252870731925,245658705283,244810227077,239399329463,236389700000,224675464000,222611890335,222418227413,217713569279,217534032907,212286924638,211455541084,207883137000,202665589753,195227762278,191640000000,191108215794,190736687980,183458669878,181783830131,178060338187,177021741469,174506598514,174431000000,173567468875,173503825350,172972734314,166169771803,165045198301,162267760328,162108250837,160833119063,160264259363,159937015443,154183875708,150831832178,150414766750,149215631922,144288947570,143765661848,142173094470,141318090026,140424122263,138796847164,137576804161,137422695433,136275741653,136032875666,134102707872,133514412210,133161698303,131839440064,131600627590,127617996664,125924583694,125546351389,122191467586,120572680105,120527029906,120137893092,117259251498,116788899614,114040537221,113922698813,113423769815,112894098238,112760814912,112086363193,110796899720,108520981229,108184598986,108118645787,106896843028,106332327786,105646814111,104224030531,102571362963,101463017117,101423101561,99847760065,99576205352,99255954225,98903896310,98334081121,98081160480,96844351870,96167862307,95300000000,94435769192,93101931275,92109394162,91885658665,91401318711,90470900562,90183005291,89697641408,88459305769,87905725258,87152384556,87142449138,86088066086,85773092362,85483306931,85384229634,85143052673,84236109156,83909768903,82196034628,81467110000,81207952207,81009900000,79883275245,79288012646,79110489000,78865493098,77990672379,77716470000,77083711825,76273816366,76230678261,76166931115,74898625352,74832273513,74635785692,74559031063,74284899426,73513721252,72201585700,72164338070,71894000000,71839022318,71143664000,70743245584,70170540431,69574579183,68675975312,67823192358,66834849512,65441619574,65394171410,64423494323,64326801869,64325859823,64209831249,63905123809,63625119264,63389658093,63224769970,62950761426,62717587639,62434941216,62305869000,61574659386,61042048137,60069541084,60003827969,59754390478,59349863824,59323201396,59232020207,58845323291,58319663126,57967700000,57952859924,57810846595,57021000000,56856620157,56405784330,56404540029,56295710000,55974428137,55945246286,55586061615,55162971991,54886659015,54857997783,54655483075,54496576878,54224812978,54202006007,53905393031,53716255091,53386472285,52980350774,52916243321,52640299060,52626407212,52613641278,52593886349,52470270244,52303986404,52072831792,51747561891,51638764006,51438237226,51154642262,50953290724,50934591549,48107459288,48051000000,47895000000,47611870729,47210888726,46457810263,46200757013,46154017441,46111024076,45724420990,45520487487,45477715082,45431158631,45412023330,45293900000,45132387090,44879284000,44701962183,44683459702,44195378981,43946700000,43939488842,43868065908,43333330794,43222804862,43129000000,43087386084,42752415292,42752415292,42328751459,42122362134,42086000000,41924611000,41918194823,41853418766,41800000000,41691541396,41592474446,41556468363,41391061000,41060255397,40835536201,40714381576,40415534929,39901443403,39803933235,39551649674,39455315531,39321000000,38971479071,38677042200,38525334067,38415108607,38401423436,38332219304,38181869484,38122574602,37974138682,37912000000,37769539444,37580096664,37569307552,37429120365,37383341028,36725241327,36658229522,36574678993,36523191114,36424399453,36370759549,36039543101,36000000000,35957130362,35899125627,35825968522,35717522238,35642793304,35389935220,35311209000,34910435564,34856708158,34805113094,34379203313,34219658821,34218790511,34213519000,34091612379,34022767389,33627833261,33439330090,33396840050,33321368199,33164571280,33118114289,33102523457,33081824586,33016081291,32932060494,32860505471,32754830577,32538793487,32444848908,32304158461,32272000000,32269600000,32057476352,32009659697,31899244165,31797487561,31553911862,31486793484,31431193602,31199155000,31178159921,31073000000,30943404391,30833000000,30669762173,30661818354,30659585874,30246585905,30152000000,30121000000,30068004141,30032332259,29780689003,29774007792,29762420917,29538853503,29529718648,29486856012,29271087909,29201700000,28969981841,28951838508,28928877380,28912989683,28880292585,28588297569,28417500000,28393363681,28366508528,28274470521,28229379579,28140668750,27820064940,27776685891,27721868374,27715600000,27708735472,27517697586,27401841632,27398192495,27323000000,27267389849,27240963534,27226000000,27184681089,27000193000,26941258004,26930662345,26863193084,26646814009,26424083713,26331670946,26312034301,26273517661,25846951000,25750537482,25701081034,25598134880,25535722509,25502543244,25500000000,25489338526,25404335803,25400316935,25383777455,25366496424,25187129440,25171544827,25162393375,24894413703,24840989340,24812000000,24686888552,24652248000,24636204212,24600000000,24600000000,24500384964,24460209710,24453943313,24431000000,24400471672,24144952337,24098800000,24083109034,24071345921,24057729440,23999821635,23763716480,23746669992,23630607169,23347642496,23339416726,23305888169,23290722840,23279119645,23172691091,23056176939,22958638464,22944440647,22686596424,22665000797,22635841646,22581759118,22406805924,22387080000,22354000000,22310228060,22300000000,22285328224,22114570317,22077000000,21957709397,21907632841,21829547800,21739628468,21712243844,21665028689,21645229587,21639149428,21637139000,21594559791,21562000000,21553800769,21310000000,21284225404,21264885425,21245141313,21235426581,21199591287,21100000000,21016782582,20974380275,20932326433,20894314160,20886061000,20768159702,20665984777,20551390670,20534799680,20524943274,20478592112,20455707297,20455672299,20446359310,20429683898,20378105000,20313000000,20242815538,20083168595,20083168595,20069837000,20062247174,20055160072,20053397158,19924526650,19903578113,19884483739,19759899550,19750890000,19747980000,19593327347,19585402438,19472868747,19420546000,19379000000,19283982129,19265000000,19156627856,19056482433,18958977393,18891013380,18869625694,18864786011,18830583578,18824789371,18768993748,18744019693,18681734154,18641459082,18623890438,18620579258,18607126290,18520931682,18437606580,18395082935,18380397645,18362837648,18308936178,18262708458,18258265558,18257238352,18252650439,18229646839,18221683857,18175389500,18102353489,17954496985,17930000000,17906800182,17859102680,17667532814,17635775505,17632124310,17569064000,17553350773,17542828000,17504128000,17487725888,17475790634,17474029261,17456339159,17407553277,17309715288,17264166385,17259701183,17202886582,17101066896,17091640696,17043292855,16988031869,16984000000,16966315676,16943581663,16905416095,16879345267,16841395790,16817500000,16812353087,16791740880,16790828992,16790789838,16704100000,16696393854,16661356556,16537420319,16528577072,16463067411,16458973817,16445000000,16435328381,16350526166,16350000000,16337238558,16328494397,16315734144,16264592285,16222613529,16136397798,16084770234,16049447302,15986561502,15964112479,15888299000,15781357125,15664926093,15616625783,15589091676,15573184774,15513117151,15492183713,15407319797,15406381912,15404000000,15345980950,15337276092,15319001398,15218469275,15190701000,15188244831,15172500993,15097547768,15078939010,14972854000,14880000000,14852852383,14841663208,14826300000,14809748753,14804366992,14759593566,14747606304,14739401401,14697739279,14688207106,14560597032,14543120878,14539335963,14531900000,14528362175,14508000000,14409987129,14409200000,14400000000,14383747445,14377862972,14327648282,14244200000,14131287493,14114804591,14079573588,14056700000,14047255562,13973503000,13970458705,13955056409,13939858532,13908299448,13875198252,13864645245,13843322260,13813141164,13803739189,13751000000,13686667665,13685707938,13659102466,13588458000,13576984015,13556576209,13547831333,13514524919,13495591866,13484159319,13480000000,13432560320,13350000000,13337066382,13317681425,13307615000,13243148689,13229983343,13220776335,13200000000,13182441430,13071432254,13061665378,13059539766,13055467192,13014777152,12974931341,12922387485,12879432344,12815854700,12800000000,12783968000,12781102238,12781102238,12673430367,12667040000,12655156545,12642139056,12594000000,12581885766,12364877000,12364877000,12340845676,12340677719,12327661614,12317410631,12317102533,12305992262,12301837099,12278347325,12253997703,12208149000,12189290942,12157733000,12155023714,12148361073,12101837796,11993953555,11988412271,11950094864,11944364513,11898834004,11821767105,11805886317,11805151496,11800940155,11779846812,11757091574,11746567882,11743920000,11729962013,11723227299,11710854560,11707053427,11676834000,11661657640,11656743606,11648313338,11646847649,11578697217,11577543452,11542394810,11539978855,11526746000,11507061062,11502118555,11500000000,11452434622,11347893272,11347893272,11331908713,11328864846,11328515197,11326001564,11297000000,11295000000,11293377453,11279977000,11256934632,11225434190,11220800000,11195073167,11188402978,11161419867,11118908372,11115255823,11103371045,11098163368,11061857166,11056445966,11044844000,11023309766,11005293485,11004620000,11000000000,10904260254,10891255000,10888091876,10861463891,10858400000,10842008664,10812496304,10808010543,10745740946,10735000000,10722774257,10721896992,10687593469,10681657195,10665763177,10654339886,10642200000,10641383756,10629837000,10619000000,10611086972,10588769843,10586270870,10565566613,10547000000,10540444233,10536900000,10512671843,10500000000,10497441295,10451521440,10443202992,10429608297,10374926884,10355031777,10350257504,10348711000,10343781905,10307063479,10237457085,10229324699,10227451020,10192612204,10185568000,10181126908,10174361058,10166800000,10161894718,10143872262,10133211035,10126142912,10034453895,10016880335,9994551200,9989802000,9988655259,9947578056,9929753485,9918434088,9897708000,9866708220,9866281222,9855753093,9846665336,9812490151,9800163330,9787250896,9778323084,9776113974,9742982096,9713140122,9699696456,9672000000,9634655820,9629311204,9624434339,9611308858,9608315099,9592238453,9590899528,9574732599,9564571321,9557138891,9541974062,9535451245,9441000000,9438281851,9436223494,9423904537,9417371728,9409930684,9344859971,9318463060,9318419619,9314851205,9307946476,9306136000,9298466245,9293888010,9292440247,9284254926,9277696298,9269787235,9241010000,9238370272,9218672123,9214872642,9186763027,9146439360,9140750712,9131723000,9110181675,9082015250,9080294393,9067640631,9005941160,8984670218,8973840000,8972586912,8961687000,8933409217,8931075261,8930651575,8929968677,8928865190,8922806679,8908872315,8906902470,8894685348,8883679852,8866580269,8864650600,8861826240,8846297940,8845220151,8841400000,8824356996,8806799281,8774346543,8774000000,8744213611,8740700000,8705000000,8689359846,8647514853,8593266565,8556244072,8552181501,8549633869,8487698761,8454398462,8452970085,8450190851,8440813006,8419724908,8386971933,8363280260,8356417682,8356155284,8350897266,8347405000,8342207924,8337050444,8336337000,8306552497,8298684812,8298036178,8280693106,8275900000,8251441000,8224513280,8211375000,8194803575,8169846224,8164864300,8137569702,8137018935,8125400000,8109032000,8104700085,8087305018,8086132454,8080361159,8071314363,8026735231,8023870345,8011615840,8000000000,7999895367,7994549043,7993978112,7964772081,7918507274,7910664711,7837517997,7832598128,7828657902,7825269163,7810794288,7798790272,7798762719,7757173231,7726750034,7725162704,7719469232,7704801565,7684492201,7678724000,7655643040,7622187024,7576216705,7555203836,7555090096,7554181322,7548543076,7548014942,7546924683,7542663192,7538226551,7510459267,7482599151,7473059563,7470305261,7454455068,7442505133,7413597132,7410412104,7394076532,7381794830,7377470453,7368840428,7366467491,7355399840,7333555988,7319255386,7315383236,7314449689,7273500000,7257076776,7254348251,7235333426,7232934549,7227303000,7217753458,7173240979,7170943543,7170218077,7169014543,7124264000,7108513121,7106620016,7095630179,7091602753,7089883717,7083658193,7078322130,7076000000,7042000000,7019802397,7010574000,7010067264,6981051348,6980056323,6965984909,6953894794,6918502000,6918171405,6908427851,6907970695,6886207031,6854969759,6849441630,6846374954,6830738715,6828874655,6812508878,6812214305,6771544707,6770255310,6763200000,6748886421,6741907596,6732233261,6711210426,6693687689,6691023527,6687921803,6683181135,6680956009,6675679837,6670074192,6646115856,6636502000,6627257286,6626628459,6607309837,6602732545,6595302000,6573615543,6543006227,6542000000,6534279665,6521946520,6499201115,6492309582,6488700439,6453000000,6432545660,6430865728,6420026000,6401749271,6400535607,6397070489,6383648418,6376422694,6363000000,6342896198,6340058487,6335930155,6330372000,6312750933,6310812315,6310246205,6303777222,6301199366,6292028859,6263956715,6259425178,6258931063,6251741183,6240262235,6237276425,6214719735,6212731511,6211559808,6206503398,6181169123,6179018814,6169102747,6148702030,6146082634,6135301095,6126046112,6124536389,6106901119,6106257757,6098494000,6091831814,6077406932,6075586862,6070197552,6053100000,6021786553,6020834000,6014475000,5998712663,5989734370,5987985422,5984919657,5982406502,5962064541,5954618000,5953661617,5941273319,5939928831,5925522734,5923309000,5910000000,5890925273,5883522221,5867916381,5864324208,5854626733,5841424663,5835657936,5830744269,5819272842,5814728105,5801067329,5800000000,5790437006,5786786447,5786234909,5770218112,5767200000,5759118986,5756900000,5755981060,5753978943,5752334187,5747816693,5746182202,5724124000,5718030897,5715407676,5709311882,5700000000,5695459882,5695000000,5691199916,5684991136,5683945378,5673429539,5659927000,5659480116,5651500000,5629578959,5627212205,5626695611,5619645910,5619600000,5611965455,5610746643,5609033406,5605940399,5604528249,5600000000,5587265956,5576594689,5576427193,5573908648,5566856243,5565147587,5530000000,5528616420,5523930881,5522335846,5515656063,5512970110,5506268123,5499565299,5488056756,5482402000,5473916216,5455000000,5453579106,5433526116,5432020378,5426341461,5425498783,5416534000,5409476885,5400537530,5400000000,5388602617,5376000000,5372149392,5364248000,5361736647,5356094015,5354230035,5347796913,5347796913,5347188211,5333803000,5330386174,5324697835,5322956933,5319786999,5315547307,5298634034,5297588467,5285203559,5270101110,5261767781,5254669799,5250417348,5242508000,5230640000,5219989000,5219385113,5219097056,5216818148,5212277000,5200000000,5180897667,5180819697,5175533515,5173931122,5169847540,5154244688,5153420449,5149614874,5147554562,5130692362,5125497361,5124417377,5120095325,5118026785,5114200000,5112788067,5109339049,5088815245,5075198914,5074363824,5072276462,5071927610,5066353906,5065077962,5059219047,5056989250,5048361749,5045040086,5038363000,5037048304,5030836965,5019404544,5015069987,5008474752,4998080993,4993072062,4988024014,4974796255,4972507354,4971439974,4971066166,4955206000,4954239000,4950600000,4937000000,4933944338,4930481877,4922805868,4922000000,4912510077,4911756104,4911597041,4910789967,4905842880,4898900000,4897746427,4895995822,4895298223,4885289075,4879642255,4865698936,4863834532,4862757501,4858753096,4858117279,4856982000,4853498852,4844889871,4836055000,4834264966,4834100464,4829000000,4826199968,4818953517,4815444957,4814832329,4811267061,4809872460,4809860383,4808976645,4805132297,4804912271,4803000000,4794287474,4790175561,4789505144,4766456781,4753032397,4750098769,4746063783,4745168575,4726729067,4722276198,4721119110,4720799842,4718606458,4713541000,4706472615,4706118721,4702434843,4696505455,4693448498,4682295983,4676320451,4671541693,4661563947,4659984000,4657818437,4655717806,4654088718,4637341655,4630676904,4629210022,4626990000,4626833131,4621359423,4608280929,4603778032,4597911000,4596083826,4596000000,4594920763,4591082346,4590706216,4589699026,4576588748,4576539173,4576328000,4575404266,4571400000,4570706179,4560230938,4557894075,4544033898,4542920986,4542321508,4541859003,4532181047,4497141085,4494890251,4493084981,4492476425,4492294895,4487836174,4485732551,4484769687,4479293930,4477841890,4469025320,4466498999,4459709535,4459171000,4447016833,4444851660,4441276990,4438564585,4432848046,4432267641,4427443454,4422368420,4419037144,4404992207,4396712121,4389224244,4387523027,4384524786,4380000000,4375642553,4375170100,4363015223,4361607213,4347736768,4347693589,4343043945,4340889182,4340686400,4329699645,4328089016,4316722757,4312627072,4311941667,4292792733,4287434168,4270000000,4264477481,4255228748,4247258589,4244377683,4240210130,4239005629,4237824123,4235234000,4231847121,4226707511,4225863441,4225658663,4224367522,4221466696,4219614527,4212958228,4211205000,4210897347,4207000317,4206024069,4203000000,4200937462,4199579443,4194340135,4192222276,4188068170,4178896235,4178882772,4172496093,4168311873,4161544174,4160388615,4159218799,4157638177,4157365238,4156647299,4153984000,4149663205,4149492369,4148436181,4142633987,4141929504,4138969724,4124219720,4122983277,4122784596,4122715000,4119174446,4115625865,4112050151,4092053529,4087138544,4081977249,4080375045,4078581000,4074679432,4069482441,4059875000,4059566214,4058453938,4049420716,4033379469,4029446487,4025208890,4023724581,4022214647,4018647952,4011127000,4008640616,4003106865,4000000000,3996184585,3982325000,3981709206,3979400000,3972591950,3959669652,3959170490,3953122604,3951915362,3947980781,3946349409,3944624136,3943252917,3941995431,3941847406,3941206161,3927257502,3920118792,3912157008,3910565028,3906059039,3904833183,3899804112,3892006884,3889693884,3886566393,3886007994,3882179000,3874702529,3871290453,3864000000,3860000000,3850600891,3849796729,3847190898,3846117707,3842872168,3842212903,3841815000,3840102000,3839699575,3826490066,3825390358,3824778429,3824027530,3820603349,3819607888,3819514451,3818772802,3817842231,3815531740,3802616355,3802394655,3793000000,3792247683,3789275220,3781885011,3778437000,3773900069,3769758972,3766389629,3763880982,3763394282,3760317096,3759781338,3756771470,3755247064,3754844000,3748962267,3748599108,3745556909,3745067349,3745028038,3741968532,3741384720,3740071000,3739242510,3738874514,3738040156,3736482528,3735783837,3734985246,3733697756,3733385843,3730848016,3722788699,3720000000,3719893004,3719490000,3717593272,3717396290,3709372872,3703417461,3698695327,3697000000,3694534645,3694500000,3693233208,3691999933,3687890976,3687832843,3682856276,3682856276,3682366946,3679711452,3674440316,3668404497,3667890000,3667062000,3666449368,3663646058,3652623793,3642680379,3641809095,3637668207,3622206601,3621671621,3615945158,3615000000,3613087603,3609910621,3609455194,3607398143,3604134038,3600000000,3595113637,3594237614,3590226000,3583537321,3582840806,3582247088,3581261000,3580364660,3579437999,3578946234,3577165537,3575088226,3572045615,3567467458,3563775061,3561273127,3556489602,3556443160,3556039310,3554223701,3553805631,3543853666,3542767681,3542026725,3536082222,3528429117,3520488781,3518725622,3517418000,3515587846,3513060769,3507872217,3501194158,3474634106,3472741593,3468900000,3467289601,3461948361,3458512737,3456000000,3455974000,3441707421,3431267547,3430545150,3420439209,3419671720,3410091189,3408229132,3408053712,3400474431,3391970996,3386542238,3384541534,3380200015,3373753138,3373315559,3372067247,3366939693,3365289537,3359740000,3358334069,3358322933,3354535143,3353866556,3348842973,3348548334,3346807185,3345284053,3340247010,3338523255,3337516689,3335439162,3332814541,3324554794,3324468175,3317599761,3316470324,3315437491,3313822982,3311696219,3296432169,3295221533,3293737174,3293566011,3293207317,3292687515,3289138018,3289138018,3284810747,3275361004,3274082750,3273102562,3271904496,3269453050,3265078743,3256858180,3255530700,3249069431,3246597837,3231000000,3226700000,3223443056,3221175000,3215436000,3215000000,3211146000,3208065003,3205662151,3205461460,3203920603,3199995706,3198904000,3197152743,3196062597,3194463708,3193402310,3192013616,3190848771,3185627351,3183323000,3181194143,3175656885,3169617106,3165199538,3163388198,3161371437,3158095898,3156094744,3145454989,3142000000,3141465756,3134343132,3132888210,3130718291,3128409000,3126437264,3126263817,3121190307,3118855078,3113976555,3112131134,3111650610,3110341113,3108866067,3108785772,3102708075,3101311823,3100040205,3098511513,3098161706,3095960087,3093369062,3091844000,3090346848,3079410916,3071925966,3068700000,3068288844,3066000000,3063500991,3058706000,3058485598,3054503860,3051512107,3051406397,3050760869,3049761093,3045371189,3043219896,3038000000,3037161283,3036082985,3032268109,3031978000,3031000000,3028130000,3026118200,3016931027,3016845972,3016407272,3016146547,3015846974,3015390533,3013480529,3013338095,3000546214,2993184627,2991555233,2984957636,2973543911,2964556000,2964073092,2962841961,2960530138,2960473775,2950816277,2950061776,2948719467,2947731964,2942331969,2941494690,2929912550,2925871635,2923435609,2919586474,2918237295,2909467397,2905905430,2905604115,2902798174,2891396375,2889109196,2887498914,2884108756,2875621333,2872452927,2864545754,2864454474,2862637760,2860947090,2860817000,2859425731,2854250658,2853461487,2853314000,2849494000,2849130697,2847934433,2847570701,2846411225,2837203969,2833161674,2829806371,2827413432,2824020091,2823903892,2822324427,2816564161,2809964398,2809170500,2807811000,2800058702,2796290538,2793716219,2793639636,2785000000,2783663000,2780029035,2777841077,2776634053,2776125410,2772748836,2771974000,2763062615,2762258379,2761882600,2760341977,2759067034,2756743805,2750904289,2749812744,2743367000,2742150638,2740492873,2738134799,2737963643,2736661000,2727012897,2723471971,2717464175,2715419025,2712808000,2709788913,2706333000,2705252000,2704386191,2700491138,2700000000,2696849604,2694672179,2694606522,2693366111,2692138324,2691827562,2691327152,2689246505,2683536836,2678867134,2677981209,2677658365,2673000000,2671462474,2667299553,2666290000,2660786000,2658021214,2657345576,2652512703,2650281774,2642853098,2640398000,2637585000,2635856875,2630076596,2629666114,2626665496,2624035883,2623928665,2622800000,2621694404,2621433707,2620913023,2619321717,2610209091,2607196190,2604497390,2599012693,2598031058,2596523588,2594563591,2591991897,2590994497,2585682303,2585511942,2580859160,2578720670,2570011581,2568563319,2567000000,2563020298,2556211381,2554733894,2554642271,2552905000,2549842000,2548909000,2548103524,2545625018,2530692964,2530360176,2526514616,2525226980,2521251857,2520387231,2520337962,2520337962,2514115023,2509680860,2509190729,2508000000,2503000000,2502481000,2498520007,2498297110,2497007463,2492587031,2489254789,2487913029,2487658612,2487279574,2484717960,2484395351,2481855600,2481676018,2480200000,2475176500,2474524726,2471238263,2464948000,2464713000,2454779773,2450980350,2450771742,2447681986,2447109573,2445928784,2445727347,2444043228,2443847497,2443354211,2438838312,2438320605,2437867242,2436249991,2436249991,2435489800,2435469804,2432084226,2430588926,2430250731,2429584646,2427694698,2426894239,2419465159,2418504868,2412445808,2411488271,2405317375,2403986000,2396853203,2395294590,2394000000,2393588000,2391897748,2391299154,2385312220,2384990499,2384117510,2379067982,2378527129,2378450000,2373800000,2368924407,2368675729,2366845931,2365716239,2364939013,2362764023,2352982309,2350510304,2349321479,2348702650,2346131351,2342676855,2342000000,2339691705,2338382489,2338323164,2333825939,2332256627,2331667749,2329179932,2329069777,2325822661,2323389112,2321021373,2318970453,2314560000,2314002997,2308450000,2302744829,2302029890,2301471000,2299136501,2298504222,2298295655,2297736633,2296955570,2296291708,2296054142,2294220372,2292045384,2290324803,2286139211,2284620965,2282473284,2281720129,2281673066,2280428706,2278600000,2275254484,2274904981,2274842000,2272350625,2271520440,2270750612,2269484030,2268614517,2268600000,2266295982,2264358226,2258558736,2258257198,2258000000,2257380984,2255899462,2245657072,2245649232,2245316500,2241966088,2241836000,2239765000,2238260687,2236696000,2233872974,2232450130,2231398009,2230500279,2230300000,2227317184,2225912325,2225500000,2223666756,2221806275,2220541828,2214820000,2214299461,2212665077,2211633025,2211616252,2209541775,2208703531,2208511889,2206225154,2204906913,2200982201,2200818466,2198500595,2195722024,2194039271,2187108069,2186583466,2180334850,2180251176,2180000000,2179976309,2178463657,2176759527,2176083698,2174350000,2156476122,2155760000,2155368886,2154430000,2154287682,2154000000,2153758644,2152781908,2149476303,2144585960,2141622320,2140843405,2140552073,2139721420,2139102048,2133105161,2129315070,2128084550,2128000000,2127072569,2123876000,2121033256,2119816532,2117089331,2116260000,2115800505,2112737983,2111654271,2111532807,2111336843,2110651176,2108914898,2108017615,2106914687,2106272000,2105390903,2102776527,2100000000,2100000000,2098983358,2096440138,2094900000,2093894771,2089450231,2087470642,2087230310,2086529418,2080752844,2080092722,2079833723,2077976000,2076387842,2074007506,2069688712,2068309354,2067435564,2066129747,2066020716,2061713109,2061080313,2061027226,2058927765,2058055915,2057034447,2055988037,2054598787,2054536903,2053426882,2051864000,2051864000,2049314104,2048815000,2046654273,2044535467,2044374903,2041066873,2040591267,2037223834,2037004866,2036747067,2035614067,2035457032,2035100000,2032469965,2032413676,2031389162,2030134145,2026731201,2024093538,2020345668,2020200000,2019037109,2015507737,2014753926,2013906640,2012306125,2011384171,2011068621,2010881174,2010049235,2009082810,2007038624,2005471543,2005108731,2003515973,2001211466,2000000000,2000000000,1995000000,1993307443,1991021603,1988135767,1987474066,1987360195,1984786894,1984722433,1982876909,1982693415,1982693415,1980855414,1976659103,1973018250,1972360498,1970070936,1969474739,1967892000,1967600920,1967359005,1966176874,1965837432,1964719213,1962365809,1961752080,1961160160,1960242568,1959400684,1958466808,1958358842,1957500000,1957238002,1957181102,1955841852,1954052483,1952476176,1952476017,1952210919,1950360546,1948918723,1948129723,1947634544,1943780000,1943642204,1942584664,1938973833,1935753906,1934407873,1933497620,1930748276,1930318035,1929288847,1928177000,1926231338,1926000000,1923686812,1923322000,1923249313,1922760373,1921061625,1920943000,1918569678,1918031992,1917846152,1917146435,1916596158,1916549932,1913753000,1908900000,1906736699,1901179640,1900000000,1899987125,1899322603,1899272000,1898700000,1895807918,1895346948,1888485000,1887767511,1886003095,1885719000,1884801708,1877464327,1876402000,1875046049,1873640289,1873231000,1873051000,1872728202,1870876506,1870841642,1869804259,1868383975,1866682265,1865766582,1863288175,1862819000,1862222233,1861965929,1861947036,1860429148,1859957558,1859529724,1856880557,1856696091,1855911326,1853059890,1852391486,1850882670,1850648073,1848923122,1846906933,1845776925,1845134490,1841713873,1840255441,1840000000,1837505000,1837018520,1836990273,1836035004,1833560055,1832579770,1832036744,1825066170,1824761000,1823415000,1822794943,1818103754,1817467869,1815456945,1813421805,1811648312,1810300000,1810194034,1809303670,1805607716,1804683240,1803000000,1801871385,1801628644,1800539875,1800238214,1799815893,1799327059,1797722294,1797609648,1795673305,1794834000,1794043151,1792600000,1791316379,1789854001,1789084000,1788667208,1784000000,1779851685,1778502820,1778139504,1777953780,1774250065,1773064693,1771843227,1771570742,1769700048,1767592266,1767422691,1766855703,1766078136,1764643514,1761029639,1757745555,1752896968,1752869082,1752450334,1748678260,1747774839,1745076327,1744242000,1741902484,1740100000,1739859142,1738531040,1737974014,1736311933,1735910000,1735655725,1734000000,1734000000,1732542796,1731305387,1728979800,1728578679,1727597000,1726625000,1726307670,1726194665,1725386353,1724516057,1723672295,1723258072,1722278775,1722093887,1718612833,1718113327,1717899236,1714229027,1712067988,1710413060,1709817975,1707388823,1706614717,1704116595,1700862984,1700755237,1698890752,1698632730,1698251975,1693454000,1687423521,1687142651,1684621097,1679842567,1679528919,1678350000,1678215828,1677406686,1677029960,1674716763,1673562262,1673210616,1670873833,1670330000,1669848613,1669500000,1668871206,1667698023,1664355275,1662974069,1662700000,1662421129,1662000000,1661822576,1658100830,1657530230,1657000000,1656630495,1655143000,1651500000,1649031376,1647928712,1646685000,1646358745,1645373644,1644950630,1644716241,1643161247,1642878668,1640632250,1640152759,1638896511,1638207043,1638083262,1630599678,1629588367,1627320000,1623857885,1623600473,1622700307,1622407722,1621980696,1620931000,1615787592,1614244950,1609894278,1609093293,1609031000,1608997213,1606881906,1606156597,1606094268,1605732360,1604181993,1602254479,1602137746,1601632578,1601499823,1600000000,1598843468,1597539071,1597174000,1596800883,1596266858,1595155761,1595000000,1591512250,1590930000,1590517860,1590370232,1590317105,1589134455,1585740647,1585130128,1584928037,1580769313,1580736772,1579188864,1578144438,1577236389,1574382884,1572176000,1571413221,1568355417,1566879917,1566108541,1564941147,1564162786,1563697406,1563063287,1562019517,1561943562,1561503417,1560738000,1556684000,1556466638,1555515237,1554863521,1554084920,1552331564,1551193300,1550698816,1550654307,1550361085,1549469156,1547981899,1547970242,1545384855,1545185458,1543563224,1541236126,1541149841,1539700909,1539600139,1538802336,1538337965,1537581912,1535833388,1535551113,1534477737,1533470014,1529000000,1529000000,1527752000,1527476708,1527287877,1526000000,1525872502,1525776000,1525441765,1524413272,1524410423,1523622956,1523387318,1522523000,1522240102,1521053431,1520585021,1517956951,1516900000,1514258364,1511524610,1508693888,1504584769,1502214127,1501220882,1500227933,1499834619,1498500000,1498451015,1497116702,1493504563,1492070865,1491824454,1490149626,1489163313,1487747587,1487114833,1485400000,1483971371,1482214197,1481685360,1480664246,1480413180,1480241282,1479900251,1479738347,1478279000,1474623157,1474399465,1472144157,1471956910,1471547132,1471451488,1471151852,1471084165,1468560782,1468328302,1466795358,1466330704,1465980500,1465400000,1465100000,1465064366,1463630670,1463571485,1461845360,1461572000,1461196595,1460860528,1458862263,1458645220,1457830624,1457129097,1456485522,1455132339,1454409764,1454342591,1453092743,1450911497,1450788000,1450000000,1447855700,1447699006,1446531051,1445918657,1445784541,1444419666,1443124298,1442643091,1441861195,1441628000,1441000000,1439541878,1439278909,1439036490,1438210759,1437491303,1437301094,1436373174,1436323734,1435602473,1435331000,1434397000,1433179269,1431247616,1430587024,1428917526,1427954786,1426374709,1425858000,1424619890,1424291737,1422993549,1422463977,1420420167,1419120942,1416314360,1416120446,1415458000,1415321291,1414772155,1414378359,1414340519,1414000000,1412564654,1412363611,1411800000,1411268893,1410297871,1410112470,1409580808,1408968306,1407999751,1407502304,1406734868,1403065399,1402167438,1402091692,1401550862,1400000000,1399439413,1399266743,1399217054,1399000000,1398146532,1394867934,1394702250,1394522484,1392166927,1389975729,1387057498,1384724682,1384609253,1384210978,1382828955,1381986127,1379898143,1379606077,1379395940,1378909558,1377000000,1376928223,1373927170,1373794499,1373003946,1373000000,1372616782,1372071578,1371787442,1371019948,1370863958,1370210732,1370000000,1368182908,1365882175,1365142550,1365016851,1364757835,1363990349,1360389297,1360116221,1359888464,1359423470,1359176350,1358451205,1358100107,1357123212,1356318000,1356125168,1355885000,1355529210,1355000000,1354239994,1352176296,1351587958,1351531023,1350530165,1345703219,1343862051,1343010696,1342285845,1341878401,1340975000,1340059804,1339508350,1337535791,1337000000,1335770200,1334611902,1334120403,1331394844,1330830486,1329419377,1327676281,1327153700,1322749935,1322142059,1322036663,1321967312,1320644171,1320000000,1319902425,1318738721,1318228000,1318211837,1316895955,1315877723,1315273542,1315001241,1313176458,1312200000,1311820213,1311078717,1310695271,1309784258,1308491000,1308032119,1307004331,1306477507,1304865546,1303793353,1303449476,1303292719,1302784000,1302634523,1302411080,1301637028,1301172948,1301034052,1300287232,1300000000,1299676000,1299601598,1298978359,1298478588,1298226935,1298147404,1297657405,1297569658,1296628788,1296338716,1291158138,1290997223,1290106687,1288385187,1286622545,1286237240,1284534375,1283982000,1282873018,1282176257,1281213000,1279791413,1279295405,1278464468,1276000000,1274956980,1274288052,1274240000,1273543025,1272607681,1272478957,1272231067,1270334375,1269891313,1268266660,1266350204,1266227827,1265482370,1264647995,1264576519,1263592527,1262000000,1261341328,1258527774,1258000000,1257667351,1257400000,1256450664,1256351915,1255756000,1254605000,1254132054,1252531858,1252172153,1251189719,1250544341,1250000000,1249939333,1249924980,1249905884,1248824279,1248421170,1247550000,1246643560,1246545599,1246213675,1246000000,1244596293,1244250350,1242692000,1241286380,1238945047,1238942751,1238008420,1235178000,1233764722,1232960336,1232900000,1232805487,1232695836,1231936895,1231393356,1230977362,1230709921,1229917830,1229448000,1229221413,1227910071,1227707236,1227699082,1227645883,1227340000,1226735981,1225640356,1225348194,1224866576,1224040799,1223828298,1222823674,1222200000,1221883214,1221679749,1216052742,1213047244,1212855665,1212259052,1210196013,1209320384,1208481745,1208116038,1207819000,1207648741,1207305475,1207091148,1206034291,1205720000,1205163967,1203008000,1202946684,1202287642,1201014540,1200000000,1200000000,1200000000,1200000000,1200000000,1199805259,1199755669,1199648851,1199257498,1198784251,1198534030,1198025132,1197290288,1196868198,1196570987,1195972391,1195929626,1195778582,1195762699,1195321632,1193798741,1192820641,1191960264,1191519605,1191244754,1189350465,1188800000,1188792474,1188134000,1186751246,1186583976,1186247438,1185674344,1185006573,1184935404,1184714256,1184429121,1184312544,1184066533,1183076000,1182988488,1182033185,1181459311,1181000000,1180601772,1179929576,1179326587,1178945990,1178746030,1178605458,1177600000,1175400000,1173744893,1173233748,1172867763,1172033784,1171128126,1170994309,1170156321,1167692000,1167234674,1167096780,1165200884,1163452066,1161867494,1161207414,1158070816,1158057888,1157827705,1157169185,1156985085,1156615454,1155925665,1155520000,1155435714,1155410329,1153442740,1152869215,1152516285,1152266745,1151811562,1150064507,1146790000,1146355552,1145630509,1145214502,1144700000,1142786022,1140859562,1140724763,1140625101,1139627350,1139008553,1137285996,1136887000,1135432844,1134251900,1133017994,1132403911,1129754586,1129385525,1127448272,1126821147,1126803166,1126640000,1126623000,1126454724,1125977313,1124475603,1123664625,1123277491,1123092246,1121758932,1121577403,1121455279,1119967087,1118761093,1118500000,1117861066,1117265216,1117000000,1116374216,1115816418,1112668471,1112194625,1112138000,1110738232,1110203000,1109346690,1108298055,1107700000,1107595664,1106748000,1106249260,1105358000,1104950855,1104258773,1103759000,1101162201,1100574123,1100366216,1099533625,1098986007,1097834597,1097461500,1096789305,1095773760,1095153648,1095076187,1095022125,1094730810,1094593875,1094523990,1094395209,1093500000,1093191800,1090542002,1089459840,1087423261,1086757000,1086358992,1086000000,1085999000,1085800000,1085730674,1085556027,1083451299,1082514261,1081981400,1081851000,1081836331,1081621512,1080462400,1079543916,1077737502,1077270291,1076908044,1076249047,1075931861,1075636592,1075000000,1074679911,1074600000,1073395015,1073311754,1070922948,1070777530,1070720698,1070547018,1070004983,1068910000,1068159361,1067032432,1065648098,1065342314,1064711743,1064528187,1063024511,1061962933,1061211430,1060587656,1060000000,1059621656,1059157056,1058749585,1058700622,1058595141,1058172235,1057100000,1056511298,1055756000,1055632778,1055632778,1055631902,1055609539,1055370205,1054629371,1052684324,1052650000,1052267219,1051186311,1051157126,1050029460,1049380034,1048850709,1048449254,1048328881,1048102547,1046180151,1046000000,1045179478,1045151254,1045037238,1043679775,1043617601,1043288397,1043020175,1042322519,1042190630,1041643815,1039685729,1039322891,1039309524,1037519244,1037171600,1036851000,1036591517,1036408940,1035351971,1034149095,1033656934,1033034389,1031650422,1028680835,1028232551,1028184915,1027466576,1026633813,1025800000,1025647624,1025000000,1024411259,1023514132,1022100000,1022000000,1021241000,1020815271,1020452064,1020358427,1020206446,1020108497,1020083242,1019659624,1019440298,1019344847,1019056394,1017858508,1017732084,1017500000,1016789089,1016416000,1016000000,1015900247,1014775999,1014572525,1013529412,1013407190,1012790045,1012690309,1012083743,1011356090,1011104135,1010576000,1010571767,1010294572,1009588299,1009300000,1009000000,1008739195,1007091339,1006669578,1006505974,1006445585,1006000000,1005900000,1005900000,1005848231,1005756536,1003791738,1002631334,1002097118,1001593691,1001592175,1000712954,1000484293,1000063106,1000000000,1000000000,998823994,997379066,997008414,995980997,995952478,995847981,994576278,993953189,993124917,992815068,992000000,990631818,990317786,990227594,989896426,989708216,988921957,988537642,988280669,987882605,987172993,987117496,987009845,985280716,984863552,984690000,982923360,981946197,979940023,979705210,979416528,979060247,979000000,978720427,978279538,978147505,977270902,977192169,976963601,976494475,976442375,975847525,975530000,974600428,973601150,973032368,972285010,971097382,970713148,970279810,970212285,970041574,969616924,969230955,969221514,969190000,969085000,968341089,968257000,968165908,967962471,967300000,967263391,966357000,966000000,965774555,964613043,964529621,964338210,964220170,964104111,963900206,963551196,962627817,962185284,962164635,961163220,960818501,960500000,960248402,959366956,959293266,958241426,957940000,957619908,957568731,957400000,956740258,956493442,956359619,955619393,955200000,954829336,954061799,954000000,952901680,952801170,952225032,952158816,951866484,950829919,950399588,949504030,949475024,949250123,948940000,948667420,948000000,947838013,946497901,945464559,945034803,943939881,943632796,943347295,943013500,942652413,942398244,941903060,941175904,941167147,940657927,940420505,939091778,939083216,938865998,938449602,938090351,936135069,935889601,935702407,934877000,934792665,934237313,933327499,932000000,931762920,931333097,931304000,929532160,928850720,928526072,928217391,927538515,927417866,927199346,926519821,926106311,925656000,922850760,922093513,921415011,921112063,920927000,920040172,920033620,919682232,918258891,918201420,914489964,914068508,913763406,913545839,913143287,912097200,911726000,911677617,910350030,910268897,910050743,909898337,908178981,907572560,907500000,906901000,906769000,906476000,906259568,906084000,906006000,903586202,903352820,903000000,902591696,902478182,902000000,900563725,900000000,899549062,899443260,898401000,897994300,896885556,896486817,895405688,895167240,895065995,895000000,894348550,893796860,893412000,893412000,891901372,891362000,889308478,887916904,887549734,887202973,887058773,886803824,883928063,881913391,880722604,880438955,879495564,879375738,879000000,878963694,878615207,878255871,878048206,877912485,877731642,877450854,877133726,877028000,876682233,876600000,875857136,875582523,875482984,875339587,874754154,874114331,873939994,872000000,869875822,869116054,868960000,868944912,868083000,867621000,867092964,867000000,866776347,866219054,864826590,863282681,863228295,862562352,861994434,860637095,860300000,860262150,859915727,859726194,859390000,858916644,858495352,857896034,857708917,856933437,856726310,856112010,856000000,855095282,854559520,854502000,854329184,854100000,853852393,852655844,852293356,852176419,852035776,851568015,851405858,851234759,850900000,850786332,850420060,849885386,849730424,848739438,848490722,847980765,847473924,847202745,846644641,846568600,846122812,846079894,845773220,845663536,845301898,844856504,844737467,841501106,841292000,841109178,841087796,840971343,840843400,840668231,840385694,840177186,840131445,839124988,838965537,838552044,838319990,837901698,837100000,836907810,836848209,836109206,836000000,835824966,835665703,835505913,833036749,832976000,832466749,831844397,831279200,830598508,830511000,830190062,829186104,828915198,828462481,828188078,827081706,826572883,826323857,826320979,826265000,826219174,826107478,826000000,825748000,825486976,824538785,824400000,824042423,823729313,823532508,822144760,821717819,821524706,821520000,820098000,819882049,819766129,819676276,819420780,819251000,819069474,817931176,817439245,816671273,816546000,815710256,814690000,813564550,813096118,813045737,813001229,813000000,811779066,811254000,811043707,811017547,810956244,810482042,810294213,810249000,810162053,810080905,809829060,809656573,809423917,809107755,808981775,808885886,808763035,808589000,807032735,806964007,806676427,806197164,806152769,805803413,805302986,805000000,804838051,804808247,804750832,804719178,804294423,803981713,803846561,803390871,802583275,802162784,801873087,801828403,801596222,801210869,800742000,800422000,800353000,800228452,800000000,799859678,799799866,799485055,798826998,798619137,798261510,797395874,797125008,797021000,796808600,796147000,795489037,795218624,795010591,794923444,794882067,794421181,794342400,794276494,793895798,793670478,793518915,793496000,792455258,791459592,791233676,790973515,790247094,790096278,790043337,790000000,790000000,789765000,789013076,788238599,788195794,787889886,787887383,787708048,787535698,787150582,787034667,786648199,786620279,786253282,786086000,784500222,784494114,784203696,784184743,783984059,783097035,783000000,782919555,782852622,782844000,782684000,782378748,782252228,782154690,782127305,781168499,781000000,780931400,780799902,780000000,779381582,778995641,778604557,778519147,778166720,777323531,776400000,776023376,775417717,775415297,775043181,774107720,773335700,773233796,772241522,772216074,771714841,771308570,770900000,770277005,769611005,769139162,769100000,768810000,768738029,768714382,768526656,768162581,768125000,767482890,766655322,766602288,765650000,765284000,765000000,764979291,764700000,764500000,764197368,764143950,763470844,763234165,763185885,762920000,762561294,762480000,761600000,760945113,760809189,760477048,760020232,759775000,759106533,758790849,758084919,757784419,757711337,757674437,756787679,756610774,756258182,756013941,755212642,754728700,754312217,753124415,753045452,753000000,752398785,752000000,752000000,751686400,751652000,751306521,750802617,750200000,750000000,749883382,749531475,749100000,748599939,748449000,747649211,747433214,747411790,746500000,746186846,746000000,745944450,743816906,743500000,743398422,743373532,742936119,742875186,742826363,742249005,742000000,740400000,740192957,739587232,739523773,738552985,738469564,738000000,737861504,737724459,737149661,735656960,735630031,735422511,735400000,735316789,734739874,734338461,734061888,733434516,733310148,732445738,731573350,731096263,730872114,730377000,729734113,729661352,729515020,729412407,729211701,728970000,728700000,728333862,728229000,728195653,727918351,727275329,726968792,726805978,726177278,725399736,725348473,725060875,724843000,724626437,724597865,723727000,723533851,723290343,723201026,722608984,722509176,722392000,722245130,722196905,722068082,721875964,721594000,721058407,720879810,720626937,720118384,718762740,718284662,717945713,717677987,717633447,716908509,716667967,715913697,715766000,715408619,715275968,715000000,714556920,714397000,714190449,713747000,713634757,713222491,713153111,713007687,712106175,711689273,711443201,711342617,711049983,710234846,709493286,709441466,709000000,708895213,708212000,708000000,707800000,706928956,706713131,706703560,706599406,706193519,706075010,706000006,705934259,705653327,705444645,704000000,703790072,703586935,703231000,702536042,702037500,702000000,701875430,701875169,701772432,701476038,700731353,700666424,700500946,700295000,700208821,700103170,700100000,700000000,699505452,699274831,699145058,698874400,698732031,698637564,698454082,698316198,697771246,697701301,697228004,696494854,696162247,696059355,695628176,695020329,695004446,694668000,693764301,693000000,693000000,692743237,692715584,692592590,691875944,691829463,691382202,691288141,691145508,691103103,690353655,690083667,690079858,689491304,689233000,689147097,689011374,688595229,688374916,688206948,687700000,687431810,687141541,686871693,686824582,686657082,686307527,686266571,686107155,683098805,682200000,682053000,681407478,681329000,680627916,680599522,680595500,680262035,680166357,679698432,679428000,678793126,678677141,678618989,678365363,678350034,678000000,677993409,677600000,677482326,676855153,675866983,675854532,675016545,675000000,674989450,673855387,673678794,672996393,672277095,671772618,671632109,671609726,671523679,671481977,671163666,671084986,670913627,670909065,670761944,669456939,668467891,668264472,667996589,667881556,667747795,667527052,667464491,667100245,666968711,666482960,666152000,665734903,665686305,665428058,665393000,665334110,665250389,665216759,664906225,664804837,664713365,663186017,663097955,662669927,662190969,662078981,662060000,662000000,661821429,661159109,661000000,660956840,660572938,660569275,660370230,660289000,659953582,659858577,659719818,659403323,658790626,658595627,657966930,657500000,657149504,656406951,656149661,655934360,655773490,655683967,655628388,655306423,655145008,654622155,654485990,653610255,653574113,653517962,653000000,652950000,652725418,652259892,652149413,652126833,651500000,651487433,651455851,651455851,650000000,649834056,649131579,649002539,648751616,648470717,648417253,648037976,647841873,647575038,647388803,647157382,647000000,646365737,645573256,645051199,644978737,644912469,644497531,644154985,643962116,643853248,643796472,643728368,643684439,643436000,643348934,643154526,642816927,642783122,642629060,641000000,640665504,640000000,639994000,639886370,639768328,639583306,639221863,637990615,637787681,637175084,637131110,636477793,636340000,635709000,635000000,634502315,634131119,633549219,633484162,633263945,633200000,633069035,632962608,632961060,632300000,631804091,631600000,631300000,631284785,631200000,631005387,630222868,630150000,630000000,629515723,629032006,628528851,628020000,628000000,627202120,626660131,626500000,626408659,626388739,626278290,626086279,625684194,625000000,624946864,624772663,624164028,624020739,623647000,623459412,622340231,622073225,621602457,621533960,621407843,621389159,621361109,621099926,621019051,621015860,620644697,620341881,620126083,619847745,619820630,619700000,619100000,618910521,618900000,618187000,618045070,617850006,617547764,616473671,616000000,615206235,615190915,615027090,615000000,614525106,614317069,613885683,613351118,613137207,613127631,613024774,613006064,612869715,612507660,612440079,612416893,612123473,611841745,611824172,611675484,611598618,611472707,611330298,611273019,611000000,610936618,610930328,610897051,610373000,610089425,609377526,609202318,609038294,608745203,608377298,608354815,608029961,607998740,606665267,606316680,606284586,606182951,606000000,606000000,605896996,605694722,605633642,605008675,605000000,605000000,604953979,604911249,604646000,604393858,604130107,604044284,603539861,603539000,602871389,602714000,602600000,602044897,601661427,601655000,601583550,601357129,600740586,600497393,600319110,600231000,600000000,600000000,600000000,599446000,599231086,599064729,598926838,598905432,598734296,598096728,597292351,597209596,596630441,596389144,595917238,595445198,595207090,594673311,594543000,594384478,594000000,593892886,593855372,593292401,593259159,592921799,592074000,592017501,592009000,591675221,591482906,591024925,590775176,590675300,590610684,590575768,590204556,590113960,589906708,589645324,589618630,589399270,588991616,588803999,588720135,588419410,588307000,588247313,587520194,587108333,586966426,586964881,586880000,586531709,586516354,586463467,586278311,586141161,585988000,585828532,585264972,585089681,584718255,584517135,584188856,584184218,583829041,583357387,583147682,582485318,582000000,581393170,581357561,580278105,580278000,580036354,580000000,580000000,580000000,579884910,579628127,579591763,579535147,579485000,579082690,579000000,578688069,578642262,577967304,577751597,577709100,577540000,577454824,576754303,576691351,576366164,576239958,576200000,576121526,576000000,575324917,575321699,574972355,572660113,572563532,571818000,571661448,571010542,571000552,570738395,570690409,570377613,570196657,570109731,569931825,569592112,568911000,568786484,568770331,568342033,568276966,568000000,567884581,566900000,566716098,566407316,566200562,565236676,565106219,565018547,564647716,564290467,563782001,563781461,563024876,562824813,562607739,562599440,562574099,562186935,561033571,560981552,560893915,560463107,560310444,560101701,560099000,559270405,559058215,559039260,558723175,558109224,557996658,557986373,557720482,557665078,557257823,556143750,556108417,556076000,556000000,555873055,555666765,555500000,555400000,555358074,555186576,554947669,554798835,554707093,554206946,554146998,553786000,553615010,552891632,552424044,552375531,552213575,551645755,551585000,551407090,550741975,550718681,550482598,550332456,550100000,550000000,549961848,549440490,548972237,548697336,548094139,548017326,548000000,547760429,547652000,547011000,546677062,546144000,546033955,546000000,545500000,545336286,545000000,544904718,544897135,544805276,544041000,543230825,543074291,542700000,542589139,542554980,542456338,542358835,542221681,542023838,541900000,541500000,541346127,541334000,541218883,540613758,540428573,540337000,540295105,540200000,539828977,538685721,538511606,538457719,538397667,537704520,537701300,537217396,537000000,536440842,535777080,535398189,535104647,535089752,534829865,534781529,534505707,534417264,534244326,534185842,534160490,534113958,533287000,533157968,533139436,532589677,532300000,532180660,532078363,532000000,532000000,531589631,531339956,531099915,531084775,531000000,530145720,530000000,529816135,529797547,529574996,529042411,528830377,528571485,528403921,527673912,527327537,527289000,527208727,526794217,526396096,526046504,526024508,526000000,525449685,525260636,525100000,524997478,524911000,524744872,524538000,524378000,524312602,523650290,523440117,523280699,523040500,522697945,522570739,522553862,522393209,522368153,522271425,522078318,522000668,521424894,521135908,520971093,520624169,520462000,520146794,520083490,520074815,519582270,519361383,519300000,519239395,518521697,518300249,518162111,518145046,517801498,517785631,517307555,517000000,517000000,517000000,516169901,515896654,515701460,515618129,515516000,515396812,515172000,515019783,514651554,514519530,514404511,513697369,512789586,512228465,511991430,511967924,511864187,511779000,511340191,511268504,511208091,511079917,510894000,510847907,510707269,510230164,510170756,510114620,510103095,510000000,509903537,509410000,509293132,508827508,508725572,508711063,508312973,508059750,507608020,507554457,507282304,507000000,506884779,506813007,506564764,506292576,506002173,505956842,505675870,505658629,505557185,505534001,505525000,505352592,505163460,505043131,504902934,504856000,504720042,504530905,504417471,504071154,504031370,503994000,503844000,503538447,503484737,503461880,503426000,503412930,503247120,503141117,503012222,503000000,502674794,502327000,502297249,502126887,501700000,501590013,501253000,501029274,500827373,500820000,500634428,500483039,500012177,500000000,500000000,500000000,499692115,498559409,498447490,498043656,497819396,497797156,497401085,497288634,496959935,496931974,496558901,496442254,496374704,496254433,495375750,495129441,495052893,495000000,495000000,494525526,494181778,494047259,493495077,493475791,493427909,493422333,493260960,493252490,493188970,493126806,493124423,493061788,492526723,492415152,492119902,492106141,491860000,491303439,491200000,491095115,491000000,491000000,491000000,490953335,490926262,490775566,490542022,490120820,490084282,489965206,489728530,489609850,488933218,488915862,488743206,488243678,487989075,487498846,487331000,486691703,486131441,486036561,485692802,485171070,485149807,484990653,484756000,484671798,484230925,484114155,484033934,484000000,483911600,483735651,483694499,483155586,482706000,482234867,482063121,481947846,481817000,481804000,481742000,481640739,481000000,480974398,480581591,480477693,480471624,480261987,479321746,479313000,478101000,477905679,477621229,477452357,477104300,477057636,476953399,476762069,476665823,476604831,476300000,476253585,476234495,476166333,476112243,476030672,475885159,475803888,475607404,475582199,475559000,475556268,475535497,474980980,474784132,474782492,474737513,474476708,473836414,473387397,473220889,473026030,472413564,472019000,471561178,471530000,471511768,471481150,471397370,471126997,470956525,470859025,470830000,470812011,470565118,470256539,470000000,470000000,469869332,469764970,469216560,469186258,469094941,469092466,468989247,468833354,468760000,468734051,468707288,468600021,467758998,467565000,466815052,466783241,466571128,466211699,466184955,466174634,466051385,465820595,465751000,465551042,465406597,465366064,464412232,464174911,463975309,463931933,462583312,462583312,462583312,462583312,462577620,462480363,462433077,462148953,461626016,461029227,460801886,460788551,460783208,460666252,460595121,460261077,460174352,460100000,459904593,459651083,459543135,459456148,459321476,459115983,458826934,458666567,458640000,458486055,458360987,458197029,458043507,458000000,457651000,457501000,457246271,457219228,457049017,457000000,456949661,456917187,456311508,456240511,456029928,455947205,455737000,455703173,455679368,455502508,455297431,455173470,454871983,454676555,454400000,454126351,453928790,453736895,453290844,453256778,453197066,453173000,453077512,453050000,452717550,452631542,452492262,451983000,451971203,451702723,451500000,451417170,451211105,451048294,451046857,451000000,450925489,450848777,450745341,450650000,450527915,450418888,450418888,450418888,450418888,450267757,450131030,450000000,450000000,450000000,449936970,449811743,449576438,449084314,448900000,448800000,448606922,448293117,448278000,448126304,448111150,447897865,447100651,446456513,446410105,446397680,446375887,446008087,445720764,445678251,445448630,445271860,445228876,445150000,445112927,444336881,444100000,444083854,444040433,443269000,443015926,442811862,442728342,442051994,441987076,441785000,441663613,441441906,441395382,441077808,441061006,440785045,440468776,440080000,439946531,439394815,439275674,439217423,439021513,439020000,439000000,439000000,438627497,438495074,438242400,438213635,437930735,437885000,437706243,437682235,437598527,437597415,437595372,437511288,437322077,437180433,436354351,436000000,436000000,435174038,435000000,434789268,434679205,434644331,434554000,434553135,434327660,434129783,434110423,434105735,434000000,433970320,433520146,433397790,433149800,433000000,432913812,432818653,432544683,432146540,432114404,431968000,431946540,431700541,431669798,431668448,431662314,431641368,431392112,431124595,431000000,430571476,430300319,429736375,429510174,429289090,429191725,429048000,428888274,428555891,428410922,428279064,428000000,427591323,427491364,427450230,427308985,427308877,427042882,426921000,426433475,426339020,426247385,425802938,425271317,425030108,425000000,425000000,425000000,424812384,424727703,424300000,424141338,423695230,423500000,423461820,423422401,423293401,422500000,422464490,422368751,422367000,422000000,421788658,421534193,421237354,420926000,420837923,420591198,420589018,420500000,420484308,420372320,420065282,419643408,419543436,419473323,419172267,419144720,418985295,418835094,418537753,418000000,417863254,417746823,417481864,417369670,417327007,417233039,417059199,416985000,416886281,416828762,416447721,416245844,416235973,416208070,416200000,416000000,415843201,415693258,415200202,415156000,415000000,414710918,414402036,414310859,414248931,414122355,414000000,414000000,413896716,413845945,413600000,413421249,413162249,413000000,412887883,412539022,412423080,412294150,412194015,412129405,412000000,412000000,412000000,411795817,411449549,411147054,411106976,411046000,411000000,410845000,410600000,410552854,410506000,410200000,410194661,410026375,410000000,410000000,409939000,409855016,409787235,409600000,409550393,409288462,409248925,409208892,409091589,409016182,408956518,408590642,408207759,408000000,407853544,407660031,407611814,407584042,407549545,407442854,407409939,407351631,407339982,407196329,407021532,406987295,406857109,406718039,406690650,406665242,406381425,406049000,405765015,405668156,405660738,405134466,405000000,404987695,404797437,404757813,404736648,404675414,404588127,404577800,404338587,403466156,403422630,403329339,403132473,403000000,403000000,402735479,402672996,402500000,402315162,402258092,402184613,401947500,401788293,401788100,401738190,401571597,401490234,401471597,401315471,400737748,400712178,400484686,400403510,400006230,400000000,400000000,400000000,400000000,399661000,399628824,399600000,399600000,399412187,399320337,399270000,398900000,398521324,398110469,398096547,397850274,397541000,397531091,397302660,397297536,397276000,397228000,397024403,396712000,396605369,396502920,396475668,396082814,395646066,395420568,395305120,395295596,395292596,395287210,395120687,395023394,394990679,394942000,394911475,394892909,394788071,394609930,394540000,394382416,394130943,394066259,394000000,394000000,393806746,393657692,393588811,393414517,393287726,393202017,393133748,393075384,393055941,393000000,392875002,392711969,392700000,392668397,392585445,392413509,392000000,391969298,391723632,391711517,391449924,391294452,391100257,391000000,390943113,390720758,390617103,390459000,390123373,390114313,390025618,390008216,389981573,389953975,389876425,389627829,389571543,389523623,389490850,389441784,389413300,389359254,389240139,389142559,388867906,388651995,388386684,388282148,388007129,387741902,387511773,387319642,386764867,386658151,386607153,386404309,386400000,386284373,386269357,386045963,386013545,385903859,385794684,385710754,385665937,385387316,385027690,384746877,384670742,384646557,384259115,383709196,383452543,383193798,382960672,382644000,382181994,381580871,381513103,381288596,381287152,381267000,381254000,381237205,381139512,381131168,381008200,380936201,380916780,380916488,380557000,380338713,380164885,380000000,380000000,380000000,379996130,379972000,379963976,379962000,379560000,379555911,379552850,379482214,379000009,378861662,378856393,378758088,378351380,378294707,378175412,378000000,378000000,377928937,377825699,377727798,377703000,377256196,376838579,376755499,376492316,376457153,376320303,376309781,376291266,375968466,375651723,375642815,375590774,375545810,375360209,375220658,375201716,375134045,375000000,374953002,374914263,374882992,374829556,374329213,374000000,373863413,373734150,373636000,373546167,373464332,373077656,372858032,372696208,372647336,372631336,372451886,372330000,372321986,372232938,372101768,372063489,372053602,372000000,372000000,371943000,371817134,371778754,371434186,371321726,371209184,370990771,370952108,370917927,370792739,370225997,370000000,369772227,369764000,369508145,369459000,369352527,369119407,368935726,368927749,368546785,368268338,368200428,367751887,367500000,367269141,367000000,367000000,366825000,366750000,366414619,366369000,366087869,366009945,366000000,365953032,365861138,365793589,365778078,365721000,365470062,365156700,365000000,365000000,365000000,364597000,364437295,363935250,363801522,363484000,363321716,363228692,363124511,363076319,363013304,363000000,362907466,362901529,362890752,362701127,362574487,362543569,362400000,362335179,362000000,361923053,361910093,361866337,361813000,361655000,361584559,361496997,361460035,361423799,361390000,361208903,361000000,360946519,360900772,360900000,360879000,360835022,360666855,360600000,360560129,360400000,360344324,360302286,360164363,360000000,359967170,359862884,359816155,359780604,359700000,359590000,359315000,359265490,359097806,358500575,358368900,358200000,358018260,357958034,357913837,357756848,357629143,357600000,357546000,357508610,357357364,357186437,357062036,357022272,357000000,357000000,356817871,356631765,356347876,356044207,355970627,355968881,355730915,355430171,355360000,355355245,355147000,355051500,355000000,355000000,354891334,354775319,354690993,354433237,353950927,353949831,353853411,353690065,353579861,353382309,353320033,353292130,353204685,353195954,353072992,353057322,353000000,352800000,352754254,352453241,352270000,352143803,351828161,351259778,351000000,350940802,350637696,350631372,350249465,350044216,350000000,350000000,349900000,349862992,349839638,349625218,349513259,349500000,349302443,349140000,349089000,349074974,349000000,348880991,348829897,348779517,348441653,347791082,347700000,347648619,347644782,347464294,347362719,346985535,346862589,346823609,346762393,346505321,346454003,346353189,345939542,345927606,345865317,345656909,345382434,344678482,344647482,344500844,344401960,344371265,344050000,343948448,343700000,343649881,343413169,343396045,343090795,342894954,342817180,342768671,342577946,342501000,342361794,342348317,342206347,342145522,342092417,341877789,341846235,341803899,341787277,341478381,341066133,341000000,341000000,340921882,340878096,340590163,340486046,340200000,340166553,340000000,339982731,339964520,339926765,339819214,339670951,339607948,339538393,339199015,339189702,338809207,338778478,338649551,338541919,338541828,338440912,338200000,338002839,337965246,337733117,337644776,337578265,337576897,337457688,337407000,337335572,337258646,337167082,336986503,336906787,336835411,336766419,336747101,336400000,336377000,336063000,336048195,336039449,336000000,335862301,335744393,335542456,335419312,335377804,335280000,335097397,335095812,335062717,335003502,335000000,335000000,334976456,334801085,334751711,334730511,334681863,334610304,334500000,334390774,334333729,334173383,334066251,333829712,333619965,333414000,333383762,333178788,333152115,333066455,332853742,332824850,332794434,332570132,332556801,332458041,332456440,332014834,332000000,331977336,331904887,331600000,331555000,331301318,331091469,331000000,331000000,330959085,330872661,330387980,330164777,330086705,330005098,330000000,330000000,330000000,329912773,329850562,329782607,329691639,329578000,329457946,329430343,329149441,329143335,329131420,329066000,329000000,328959816,328677093,328668695,328562825,328467708,328182125,328160211,328040717,328040126,327916421,327896277,327778371,327634082,327422242,327348418,327341446,327114907,326942277,326877000,326826535,326794000,326601658,326451250,326375885,326373858,326259000,326192132,326124453,325628687,325528000,325442748,325412000,325380308,325229806,325180054,325000000,324943994,324800000,324588694,324586209,324322191,324239330,324200000,323991823,323612650,323605889,323266290,323112462,322966474,322841163,322493167,322493020,322438584,322387604,322291000,322203324,322199683,322187506,322004531,321902906,321808707,321753834,321655531,321643492,321542294,321008141,320872139,320837878,320822389,320807770,320795000,320757135,320581798,320485856,320401672,320200000,320146923,320128000,320081099,320027057,320000000,319961415,319635438,319608591,319514847,319498752,319459045,319440865,319414857,319280053,318877326,318846879,318787386,318770079,318706000,318604860,318443829,318424483,318359706,318245055,318132306,318000000,317920766,317873395,317237670,317139785,317007157,317000000,316961399,316889597,316832236,316795087,316714262,316600000,316562000,316272619,316168135,316145323,315963788,315889565,315866998,315851289,315816678,315812000,315786084,315693088,315603300,315472629,315411962,315350000,315336486,315134977,315105427,315000000,315000000,315000000,314984817,314794100,314624929,314348721,314040000,314003042,314000000,314000000,313677001,313653400,313332275,313204000,312789024,312527116,312500000,312328291,312303887,312028418,312000000,312000000,311761000,311720892,311632997,311573535,311441882,311380912,311282556,311173631,311000000,310902489,310793975,310736442,310716003,310712000,310477284,310441623,310355836,310225920,310067085,310020741,310000000,310000000,310000000,310000000,309841075,309523628,309304467,309299313,309146000,309000000,308755512,308512256,308268923,308227000,308033695,308000000,307950032,307811278,307607738,307549453,307473174,307250000,307248000,307208346,306984225,306977652,306600000,306547861,306369341,306338601,306189129,306000000,305864200,305804963,305760329,305501576,305466861,305424508,305392354,305302207,305157000,305000000,305000000,305000000,304976670,304970000,304498120,304385704,304243199,304000000,303898256,303790779,303662531,303540920,303467722,303430593,303430593,303407161,303348922,303306375,303288783,303038401,303000000,302998103,302896816,302842428,302731343,302713741,302597613,302413611,302269000,302201600,302200000,302184783,302082392,302057882,302000000,301989465,301898080,301712057,301520762,301357295,301280271,301257000,300986731,300950454,300851183,300788769,300748021,300725000,300681673,300585000,300498000,300401928,300392000,300336883,300312487,300174931,300075373,300033014,300000000,300000000,300000000,300000000,300000000,299985493,299954084,299815940,299647623,299510818,299216000,298876274,298709152,298628930,298531529,298524105,298511674,298464891,298287704,298205107,298000000,298000000,297850000,297830000,297802466,297793750,297780018,297520861,297493398,297369355,297213000,297197842,297190385,297053150,296951332,296944837,296654192,296638837,296543551,296268900,296235393,296196300,296000000,296000000,295713878,295711875,295637980,295564691,295553594,295546008,295244720,295002996,295000000,294862143,294710506,294692832,294638986,294620005,294513532,294405985,294385000,294337529,294326969,294231558,294103340,293873997,293806970,293778768,293763539,293547054,293485552,293232000,293224939,293000000,292997508,292944133,292851519,292747660,292644354,292584417,292433118,292428950,292378000,292353471,292135685,292066000,291995000,291922322,291850671,291821656,291771723,291741758,291733346,291698860,291528418,291505531,291450000,291350000,291308658,291193396,291172424,290628606,290374033,290325108,290323634,290244155,290028572,290000000,289927533,289790346,289768424,289666485,289645951,289630000,289586271,289541330,289476787,289417166,289361776,289200000,289180537,289180000,289149610,288992775,288921989,288650075,288486812,288247224,288154140,288114453,288101704,288000000,287934080,287920864,287841909,287700000,287625090,287259569,287232378,287200000,287137771,287045688,287000000,286975457,286650909,286604620,286571115,286396495,286247333,286209970,286204152,286142064,286039280,286030768,286000000,285965020,285953517,285896563,285875303,285850000,285707000,285692092,285687168,285617277,285398846,285326503,285200000,285156265,285095802,285000000,284930799,284925927,284896059,284891949,284800000,284768316,284753814,284652250,284615118,284459296,284365132,284361722,284330376,284330376,284270138,284220487,284081315,284045287,283993699,283850241,283845263,283769969,283722000,283714894,283688660,283667249,283621000,283447348,283318042,283266000,283228873,283153949,283000000,282838937,282778000,282712739,282600655,282515475,282328493,282321666,282275368,282150139,282129262,282033835,281969607,281911970,281853618,281800000,281705355,281388107,281262351,281162217,281126314,280717050,280605818,280462048,280278400,280077497,280000000,280000000,279836378,279602614,279576339,279500000,279416000,279345411,279340482,279200000,279188372,279111963,279089857,278908738,278888876,278843798,278799852,278598559,278575000,278491094,278414702,278226583,278100000,278018033,278000000,277786250,277745095,277734501,277691220,277654748,277639367,277555000,277331015,277147386,276973507,276886146,276874783,276637489,276586335,276437687,276414481,276199082,276000000,276000000,275900013,275808995,275800000,275697767,275603337,275578837,275378000,275335117,275266369,275009752,275005000,274910339,274662365,274595841,274486000,274397075,274274375,274228678,274158994,273926698,273838000,273820000,273570715,273169034,272863532,272814950,272673199,272629285,272563750,272334085,272300000,272297963,272107075,272100212,271680874,271670000,271597000,271578453,271523354,271457393,271443390,271396327,271225036,271186875,271151440,270980000,270962838,270884783,270813640,270400000,270358219,270322961,270319865,270090047,270058182,270000000,270000000,270000000,270000000,269963000,269835325,269729881,269641681,269516000,269404537,269304512,269148234,269024190,269000000,268981840,268800000,268800000,268796553,268746906,268693812,268531864,268519821,268516771,268479399,268401000,268300000,268284604,268215517,268132849,268130964,268104048,268000252,267917687,267814718,267812513,267709659,267658551,267408650,267276305,267182966,267151000,267136706,267044290,267000000,267000000,266963901,266947538,266844386,266827165,266705000,266682941,266581044,266416699,266315206,266096573,266000000,266000000,265607649,265463305,265332883,265176266,265118000,265008717,264790000,264744175,264700000,264538842,264444326,264392999,264338298,264275374,264171178,264169407,264000000,264000000,263636200,263436000,263427494,263409527,263299840,263135590,262897066,262838560,262826226,262802356,262697557,262612523,262595645,262503000,262389925,262368007,262282900,262209468,262114911,262075066,262000000,261862881,261601311,261572473,261523000,261470031,261463810,261439922,261319611,261282849,261219311,261177609,261067603,261049000,261022498,261000000,260955333,260738873,260535214,260503623,260432146,260406368,260346485,260081014,260000000,259907525,259725778,259664000,259557529,259507721,259431675,259200000,259079498,259065900,259007736,258838680,258834506,258796604,258728390,258699293,258526694,258368730,258135818,258053332,258006260,258003934,257896856,257811797,257498156,257459467,257342916,257189630,257028726,257012479,257000000,256763085,256712332,256541509,256532957,256472997,256458701,256199310,256179000,256114032,256095000,255440000,255401339,255217759,255185195,255153822,255149905,255000000,255000000,254975418,254973084,254893298,254827981,254752563,254740288,254639700,254622668,254620400,254418146,254342849,254308561,254142957,254116456,254097118,254097000,254084044,254000000,253682426,253650746,253500000,253329824,253300216,253202000,253000000,252982421,252899929,252863358,252595308,252525252,252468000,252417051,252281152,252262352,252163883,252079318,252000000,252000000,251947614,251885198,251491448,251335690,251317520,251100000,251086206,251044331,251000000,250893498,250633975,250601255,250589751,250392000,250280049,250100000,250083581,250000000,250000000,250000000,250000000,250000000,250000000,250000000,250000000,250000000,250000000,249948101,249770014,249697560,249376032,249344000,248845525,248840186,248816374,248632927,248549144,248548281,248531178,248270849,248263722,248199608,248173547,247939922,247924422,247811634,247548752,247399159,247189227,247170618,247054784,247042057,247000000,246909823,246766504,246743071,246703935,246690443,246405026,246371036,246367817,246315096,246201264,246042329,246014000,246010510,246000000,245991584,245839795,245723000,245644495,245629163,245524517,245442335,245369812,245253125,245090047,245044717,245000000,244893166,244825000,244600000,244586129,244500000,244328353,244276350,244235430,244215431,244100000,244042000,244003424,244000000,243633781,243524339,243523761,243444743,243436578,243288000,243196681,243077490,242473012,242231291,242102107,242000000,242000000,241955822,241866729,241820000,241796720,241626688,241615313,241557786,241500000,241392197,241298533,240729693,240708546,240564148,240514849,240483978,240397255,240389105,240361789,240357446,240061753,240000000,240000000,240000000,240000000,240000000,239915087,239747170,239687695,239643456,239615850,239598907,239470559,239446000,239279857,239266590,238966000,238864100,238860470,238680544,238605664,238479605,238439299,238029905,238000000,237877240,237798000,237680884,237455461,237395885,237309033,237307392,237261807,237202922,237190000,237037928,237003278,237000000,236981539,236907627,236894000,236871479,236741050,236704730,236646654,236457684,236377330,236119982,236077076,236058001,236023319,235951081,235805000,235653562,235569563,235503214,235223950,235182139,235000000,234900000,234867281,234857796,234851570,234734363,234723844,234709712,234622178,234536285,234519590,234449469,234428290,234361000,234330520,234313946,234255629,234226286,234090866,234080182,234000000,234000000,233879400,233823800,233753806,233712039,233464357,233321143,233221841,233205622,233155264,233139138,233060229,233039495,233009552,232975005,232962749,232950229,232930632,232753760,232735537,232722347,232474390,232414973,232374125,232343269,232294077,232158313,232129161,232100000,232000000,232000000,232000000,231988586,231951809,231928099,231842005,231832000,231778520,231707748,231700000,231676006,231639292,231628743,231531430,231476587,231280587,231268000,231165806,231122207,231122207,231011000,231000000,230964768,230920934,230776773,230671287,230411904,230400000,230278806,230175334,230098425,230028194,229942477,229894035,229774564,229649126,229500000,229431728,229407655,229246984,229000000,229000000,228909028,228865115,228804678,228721100,228500000,228498810,228320000,228303937,228295675,228145290,228067511,228021975,227988715,227973290,227736387,227594307,227584045,227433871,227387112,227294401,227200000,227069820,227000000,226922829,226572114,226500000,226488066,226433733,226292906,226173071,226000000,225798307,225755937,225600000,225543385,225522757,225460000,225401615,225286806,225270584,225256156,225144000,225016458,225000000,225000000,224954867,224897324,224621000,224557167,224438047,224386754,224357943,224214716,224203611,224108400,223893268,223817725,223704713,223485831,223424942,223411249,223319394,223302347,223244657,223085427,223034794,223000000,222900000,222844625,222739716,222700000,222697270,222681535,222653343,222538982,222500000,222478265,222388106,222375000,222339413,222300000,222289165,222218279,222216427,222191000,222103417,222019653,221884139,221704221,221702000,221620000,221577819,221480734,221472180,221400000,221212420,221031000,221028028,221000000,221000000,221000000,220881516,220716144,220678677,220543543,220531576,220340644,220313286,220260623,220246092,220100000,220074815,220000000,220000000,220000000,220000000,220000000,219870499,219817567,219787690,219776865,219718376,219700000,219696977,219681787,219651458,219631635,219623788,219610039,219356119,219340000,219223468,219100606,219075822,219012496,219000000,218976000,218951491,218922770,218882497,218868562,218706559,218675356,218629965,218615477,218577836,218557424,218433545,218429851,218402180,218149692,218100000,218083636,218029430,218027472,218000000,217972556,217797980,217600000,217596443,217456479,217332540,217321023,217158988,217146567,217119000,217107656,217040556,217003964,216952029,216943049,216929542,216903535,216888413,216851602,216787999,216698458,216594796,216510151,216490062,216415758,216306939,216277778,216125816,216082000,216080876,216074314,216049340,216006678,216001810,215985650,215968790,215954106,215896608,215866108,215800000,215744000,215738596,215709211,215524644,215523000,215346514,215329473,215322146,215239201,215173163,215057000,214900000,214871419,214851000,214787290,214781388,214767950,214630373,214604125,214565876,214425000,214347745,214300431,214197682,214145141,214143927,214110698,214000000,213907016,213749599,213712860,213709215,213684443,213621705,213585442,213561755,213523196,213500000,213489799,213376733,213300000,213296643,213206701,213136179,213030547,213000000,212935200,212812213,212701942,212700000,212693185,212615540,212583466,212395904,212280618,212276047,212266453,212192426,212116730,211999999,211982089,211961193,211904425,211708430,211647997,211603574,211603574,211500000,211411790,211381119,211339099,211125433,211039581,211019574,211000000,210974430,210918608,210899906,210863380,210852276,210836173,210832239,210809937,210624458,210610059,210570887,210561963,210504615,210485976,210304779,210056023,210038663,210000000,210000000,210000000,210000000,210000000,209921233,209839045,209805269,209769249,209715586,209711332,209698567,209546191,209449894,209433634,209289243,209286934,209178000,209173832,209165059,209117820,209099355,209000000,208978608,208968975,208845859,208741601,208739535,208722930,208700000,208686375,208558885,208530570,208475596,208462665,208373086,208347758,208327868,208229829,208148703,208105752,208000000,207968037,207948718,207868945,207868000,207799857,207797370,207796119,207765195,207674907,207567854,207521993,207500000,207479924,207422779,207385000,207349403,207327119,207323946,207250000,207179888,207138000,207006000,207000000,207000000,206879372,206811361,206780174,206773675,206723285,206682896,206641682,206335289,206315084,206300000,206248000,206240375,206229303,206200000,206173273,206161599,206101964,206026241,206005600,206000000,205949873,205915520,205904113,205883843,205874000,205800000,205600000,205532078,205500000,205414703,205412766,205400000,205393743,205297873,205290748,205146000,205000000,205000000,205000000,204657507,204480552,204381097,204346474,204234000,204072552,204053600,203908000,203877100,203774088,203770524,203744189,203494222,203477023,203469000,203453497,203448783,203423816,203400000,203274037,203170000,203000000,202854393,202800000,202778583,202727277,202700000,202698647,202626028,202517217,202447231,202373002,202252564,202119081,202000000,201975176,201912233,201912233,201867405,201860646,201777759,201749408,201715000,201668899,201646911,201636802,201611394,201559000,201436088,201430000,201389000,201337528,201325696,201300424,201290675,201205000,201064679,201035219,200920705,200867101,200818846,200787857,200774336,200769874,200712995,200700000,200635309,200624000,200495990,200486899,200480000,200453449,200422817,200355055,200355000,200315428,200279650,200246613,200162639,200000000,200000000,200000000,200000000,200000000,200000000,200000000,200000000,200000000,200000000,200000000,200000000,200000000,199994463,199994114,199983837,199971876,199877529,199837916,199816181,199788074,199604422,199578081,199543000,199469000,199368266,199357000,199111215,199032997,198989013,198919826,198791408,198527295,198452835,198445747,198393721,198355155,198276229,198214552,198092013,198015570,198000000,198000000,198000000,197924076,197795084,197744263,197700000,197692707,197688608,197614823,197602092,197464018,197302781,197261753,197225969,197195089,197159937,197000000,197000000,197000000,197000000,196912632,196886123,196817000,196789267,196726867,196708449,196626439,196482867,196312031,196244249,196203038,196090693,196082321,196032720,196000000,195964470,195883115,195881301,195855374,195770908,195701000,195629675,195589333,195562108,195446694,195445145,195416832,195130963,195067650,195038479,195000000,194996420,194978000,194920838,194858657,194842774,194795261,194760673,194704989,194617393,194563722,194536462,194532042,194451433,194388506,194259404,194216045,194192999,194033000,193934026,193902554,193900000,193900000,193836520,193832646,193660188,193623547,193416540,193151193,193151076,193141000,193128764,193056140,192862426,192832464,192813679,192772715,192737042,192702757,192677493,192648475,192533669,192463300,192368571,192354649,192291672,192161622,192133400,192100000,192091321,192000000,192000000,191963322,191936503,191916389,191901616,191895000,191782000,191776131,191746827,191660303,191653668,191600000,191415739,191415264,191326577,191192104,191137954,191000000,191000000,190983012,190980000,190928942,190876000,190803000,190800000,190764334,190752939,190721852,190700000,190655552,190513403,190358730,190325991,190312870,190300000,190238494,190238075,190222222,190200000,190130072,190012041,190000000,190000000,189848103,189841792,189737401,189729294,189719875,189677583,189645742,189560694,189548731,189518242,189445629,189418110,189336938,189295656,189247452,189175863,189088025,189029299,188999785,188855033,188770260,188725997,188658500,188500000,188485698,188481868,188477445,188452760,188451153,188360375,188305650,188241863,188109677,188068500,188067944,188011795,188003095,188000000,187995829,187971940,187909396,187571084,187500000,187320247,187173661,187114425,187108000,187106753,187106477,187072794,187000000,187000000,186943682,186915073,186812000,186762478,186758705,186750080,186725647,186720000,186672338,186547993,186455704,186318793,186255860,186237251,186200699,186193722,186164521,186133035,186000000,185997000,185923516,185851793,185800000,185777025,185764031,185678097,185673000,185560000,185535444,185531583,185522735,185484752,185455000,185411568,185386743,185321639,185274899,185267000,185250576,185127483,185098788,185077179,185058380,185012222,185000000,185000000,184984593,184910863,184905211,184714310,184704649,184617538,184542776,184531872,184518731,184502183,184479268,184443457,184356357,184294938,184288647,184233000,184199662,184122712,184121000,184000000,184000000,183978000,183951907,183935847,183806226,183776000,183757213,183696691,183575520,183518716,183504065,183468761,183455964,183377486,183156385,183065772,183000000,183000000,183000000,182900000,182823301,182740250,182696852,182660581,182635651,182579825,182573548,182569874,182563488,182452303,182400000,182345464,182310679,182217149,182157727,182155000,182110106,182087000,182000000,182000000,181988033,181975046,181868376,181783772,181776317,181760399,181664834,181650000,181533113,181530846,181500000,181380517,181343176,181269033,181265229,181169441,181155000,181000000,180999564,180900000,180741347,180707593,180686575,180683643,180640214,180494500,180398000,180381216,180341415,180301979,180276514,180217553,180122656,180094276,180069619,180050976,180000000,180000000,180000000,179950000,179945150,179940173,179911715,179904000,179883632,179829139,179808000,179789045,179726749,179519476,179383643,179332960,179326345,179300000,179298801,179278000,179109678,179074519,179059367,179029445,178809025,178716935,178619713,178607285,178604170,178538000,178525677,178520300,178478727,178421090,178376239,178318117,178286180,178260056,178138776,178000000,177975523,177843518,177717656,177578925,177578817,177525487,177518454,177511267,177424229,177400000,177399754,177389655,177210067,177049000,177000000,176952888,176929789,176912000,176907000,176886330,176784750,176780187,176741403,176722234,176648469,176633069,176591242,176505778,176328830,176298423,176259122,176213000,176188412,176183732,176141780,176100000,175913249,175770000,175700000,175668250,175658203,175577550,175571703,175333061,175310000,175309945,175257000,175204632,175100000,175099428,175000000,175000000,175000000,175000000,174973000,174958100,174896103,174849897,174802053,174692696,174691302,174658436,174555407,174554206,174514811,174415477,174386757,174374988,174370761,174235950,174200377,174200000,174166739,174108780,174054043,174003398,174000000,174000000,174000000,173955829,173805248,173758247,173700000,173696707,173621562,173586271,173570000,173497390,173423274,173415054,173403464,173376000,173352446,173349803,173331826,173314688,173300000,173260974,173198730,173038533,173029207,173000000,172953761,172835000,172656184,172650329,172623407,172613955,172588590,172488160,172440935,172327000,172321327,172291396,172100000,172066583,171989440,171938000,171874926,171843680,171815701,171727508,171653050,171597763,171581704,171523764,171523764,171500000,171447892,171400000,171376849,171375021,171362195,171341456,171207537,171200000,171147000,171031098,171000000,170991102,170958345,170852622,170823679,170782000,170757690,170741725,170738737,170698378,170675673,170653000,170623914,170619810,170618760,170616670,170563997,170532000,170355349,170353000,170265741,170113592,170111652,170011254,170000000,170000000,170000000,170000000,169999269,169985477,169952897,169865000,169816643,169759342,169540588,169540588,169375494,169322947,169146000,169101156,169061000,169046525,169013707,169000000,168992293,168915847,168829161,168825000,168800000,168800000,168783000,168709390,168708588,168679311,168647823,168603678,168560713,168554477,168427494,168400000,168390652,168294372,168232864,168206640,168087168,168000000,167943825,167923467,167883011,167740636,167681027,167624314,167504406,167502537,167500000,167489684,167425262,167413328,167348632,167299314,167269254,167184865,167098037,167092633,167061363,167046351,167000000,167000000,166930238,166800000,166725926,166702262,166700000,166681802,166572807,166510000,166397897,166325000,166319941,166299950,166283000,166277917,166243526,166179182,166084368,166029196,166017844,166004599,166000000,165986026,165855385,165806198,165720000,165680818,165665003,165644000,165633814,165600000,165595592,165500000,165500000,165473227,165300226,165269910,165000000,165000000,165000000,164989472,164883439,164850590,164797776,164758302,164712114,164683882,164652068,164525568,164478946,164462400,164452259,164442462,164246176,164242936,164237680,164179951,164128993,164112577,164100000,164098471,164064368,164000000,163995748,163984512,163748306,163611650,163460103,163369832,163321366,163300418,163300000,163298669,163220851,163200000,163176000,163137500,163100000,163055236,163013054,163000000,163000000,163000000,162954620,162868666,162843750,162700329,162675431,162529777,162518039,162494131,162461556,162453846,162415612,162262883,162255856,162250846,162242103,162208685,162140001,162130858,162089106,162041151,162034000,162000000,162000000,161908085,161779979,161740028,161712310,161638000,161554984,161518644,161425655,161125420,161100000,161042975,161019238,161000000,161000000,160903159,160854882,160723188,160689756,160667000,160662345,160602420,160601575,160537956,160508178,160500000,160472144,160470186,160425242,160220741,160155167,160150000,160110637,160025000,160000000,160000000,160000000,160000000,160000000,160000000,160000000,160000000,159946365,159853289,159782783,159723564,159687867,159653741,159642389,159634592,159600000,159511088,159494306,159408262,159400000,159353895,159328000,159266156,159207446,159200000,159158800,159137031,159135000,159130786,159115674,159020619,159005852,158998467,158967656,158877067,158840497,158824695,158802761,158763801,158702491,158699327,158677630,158568766,158340717,158338024,158204403,158196000,158189115,158003788,158000000,157973541,157759840,157752897,157747833,157715459,157671085,157662501,157622580,157600000,157600000,157600000,157566689,157476000,157474167,157465305,157366547,157300623,157299707,157298944,157289528,157282304,157196481,157156773,157151076,157142287,157124728,157026000,157000000,157000000,156942935,156911114,156903193,156902787,156786960,156747260,156619000,156604375,156552908,156500000,156492762,156483242,156412349,156402237,156402134,156353650,156346758,156278426,156088976,156000000,156000000,155998014,155953688,155880948,155800000,155800000,155770977,155704896,155575852,155500000,155496144,155452621,155404645,155403346,155382550,155301335,155218279,155214516,155213008,155190499,155175777,155137038,155107762,155094293,155018598,155000000,155000000,155000000,154982682,154976179,154930000,154900000,154894601,154840000,154800000,154740007,154700000,154636000,154600000,154505178,154420843,154406179,154384886,154300000,154293953,154228919,154216763,154204088,154158637,154138676,154102169,154020400,154000000,153998299,153876406,153838450,153800000,153754358,153736958,153700000,153640744,153635579,153610869,153605773,153582807,153576762,153539236,153533802,153523373,153422518,153418044,153326484,153286471,153207620,153160000,153100000,153000000,152916747,152916607,152880346,152875000,152813000,152695669,152643464,152640584,152623944,152619106,152533611,152500000,152478548,152454966,152426471,152356107,152200000,152000000,152000000,152000000,151987406,151966982,151914274,151899241,151885965,151870765,151834265,151789244,151713600,151598630,151505795,151485873,151427094,151319934,151233159,151223000,151127939,151100000,151075964,151060542,151046783,151020000,151000000,150983801,150956108,150955639,150942065,150931802,150872315,150825129,150817117,150812753,150768476,150750000,150740304,150690649,150543575,150526482,150504416,150500000,150466741,150435809,150430213,150400459,150376533,150350680,150302733,150235101,150151048,150148598,150017000,150000000,150000000,150000000,150000000,150000000,150000000,150000000,150000000,149979222,149965000,149935754,149904000,149840153,149818001,149734443,149600000,149597000,149411000,149403969,149383968,149380823,149350043,149299246,149247000,149233940,149226325,149215987,149200000,149170000,149137859,149122834,148926723,148917625,148837632,148733991,148654126,148527366,148517710,148497768,148344001,148319771,148294279,148266423,148217240,148049125,148037211,148022338,148000000,148000000,148000000,148000000,147900537,147895630,147800000,147713354,147704857,147687552,147662624,147643758,147635824,147600000,147574505,147546889,147527627,147521179,147506780,147500064,147500000,147487831,147402092,147375102,147359596,147293000,147136456,147064744,147042517,147026161,147012475,147007184,147000000,147000000,147000000,146984603,146890938,146872000,146832817,146820231,146804300,146800000,146775694,146692254,146666812,146638107,146587627,146500000,146488675,146428739,146372000,146367842,146313766,146234612,146183067,146182568,146097250,146076940,146014202,146000000,145985418,145932761,145895490,145890299,145887252,145865821,145826125,145780000,145776792,145700000,145660880,145653081,145503962,145466556,145449102,145440803,145336806,145320988,145259624,145224716,145207689,145190039,145182378,145175316,145145507,145100886,145089130,145088856,145086315,145084787,145080300,145055000,145000000,145000000,145000000,144898810,144890227,144700000,144622629,144564315,144507645,144484909,144466178,144448998,144448557,144442282,144365000,144276315,144263300,144240444,144173613,144166531,144161151,144000000,144000000,143939023,143891703,143889870,143864587,143854015,143829000,143821380,143780786,143752909,143732141,143723598,143700000,143644929,143600000,143548704,143530154,143489955,143483670,143475551,143425880,143422866,143412486,143302984,143301068,143294121,143254384,143201074,143200000,143087979,143046026,143040229,143011256,142813441,142812886,142803153,142802760,142779203,142773520,142700000,142698963,142638989,142617091,142600000,142538701,142516651,142386270,142353000,142341584,142225176,142196478,142194030,142111052,142105767,142098000,142090541,142025722,142000000,142000000,142000000,141962379,141804000,141758140,141730206,141658113,141639000,141621268,141608984,141607179,141600141,141600000,141475041,141378565,141346190,141331735,141279970,141248005,141234000,141203739,141160800,141158679,141076018,141015257,141000000,141000000,140856647,140842029,140823196,140762545,140755834,140745152,140715700,140674281,140652989,140630078,140550000,140505049,140500000,140437834,140402120,140401370,140381578,140331948,140288000,140257955,140244000,140203863,140185503,140142449,140100000,140098000,140017052,140000464,140000000,140000000,140000000,140000000,140000000,140000000,140000000,140000000,139966451,139880000,139865862,139855180,139835626,139813182,139810268,139809886,139805317,139791503,139735479,139706172,139700000,139669200,139610046,139598997,139483354,139450021,139447000,139358706,139300000,139279091,139193851,139145423,139016000,139000000,139000000,138957750,138954580,138939612,138900000,138891047,138861592,138861400,138801108,138784294,138704741,138659381,138638667,138587000,138569652,138552303,138548267,138530390,138500000,138499702,138468000,138348363,138309097,138248703,138181170,138144028,138135075,138097830,138082176,138000000,138000000,137994327,137980352,137959631,137900000,137898797,137871828,137802173,137800000,137777876,137749450,137661860,137644735,137616983,137607532,137505498,137445693,137438462,137428945,137407263,137406915,137287615,137271080,137199172,137170116,137118524,137086740,137053147,136989054,136945541,136905433,136875318,136856431,136813000,136772912,136768311,136752000,136742319,136635860,136605573,136591617,136575424,136562618,136460000,136378647,136344142,136286944,136186614,136120928,136092011,136028000,136000000,136000000,136000000,135986000,135966708,135955275,135912330,135900000,135879225,135860405,135853000,135826140,135753318,135745898,135689375,135675167,135606044,135591163,135578557,135483873,135448166,135387600,135347591,135313301,135304077,135300000,135244055,135235015,135185204,135154952,135100000,135023035,135000000,135000000,135000000,135000000,135000000,135000000,135000000,134947252,134880000,134870705,134869529,134830830,134789384,134788158,134786480,134654971,134626114,134530000,134480127,134455595,134420831,134400000,134313258,134308267,134299625,134273866,134152000,134135288,134100000,134044878,134038129,134000000,134000000,134000000,134000000,133994464,133961923,133940219,133890278,133739733,133698213,133693109,133688297,133679174,133640000,133637620,133512521,133495781,133485000,133469106,133455000,133439401,133419000,133366623,133320000,133275781,133181388,133129570,133120000,133071514,133023611,133014879,133000000,132974838,132970570,132958811,132914518,132858988,132845000,132823564,132796000,132703886,132700000,132641000,132600000,132600000,132597287,132566966,132546676,132516346,132475148,132438170,132400419,132331918,132299232,132297350,132296646,132205353,132199245,132124350,131998700,131990000,131950219,131944128,131923802,131885452,131756000,131753124,131645008,131600000,131537408,131452000,131348388,131191381,131140884,131101776,131049621,131040000,131033889,131016463,131000000,130996129,130851400,130767419,130742451,130736076,130684000,130669852,130611967,130600000,130590648,130567000,130550817,130539921,130507500,130487062,130454775,130448465,130368179,130359232,130331796,130200000,130200000,130181485,130173000,130088621,130083582,130000000,130000000,130000000,130000000,130000000,130000000,130000000,130000000,130000000,129959000,129700500,129700000,129700000,129634473,129542634,129531767,129528298,129486079,129476168,129468324,129354499,129322579,129292006,129274660,129200000,129169773,129122944,129076835,129002622,129000000,129000000,128974487,128950104,128924274,128852081,128838322,128807867,128803653,128756047,128714519,128711050,128679500,128656125,128620514,128600000,128598314,128589214,128539280,128527223,128500000,128491048,128449123,128436850,128397709,128397400,128351497,128343994,128295214,128208758,128075988,128067454,128000000,128000000,128000000,127901251,127828152,127802614,127800000,127799589,127790830,127749773,127740015,127734471,127724031,127635522,127635103,127621450,127600000,127597460,127558280,127536061,127473389,127440943,127430787,127423081,127385248,127374865,127281033,127215522,127207236,127206789,127191177,127188000,127187955,127141183,127117061,127115639,127097887,127059891,127000000,127000000,127000000,126926204,126904375,126903825,126839727,126800000,126777451,126744324,126734884,126700000,126654678,126629203,126628288,126566635,126545393,126539911,126523568,126416320,126405395,126400000,126400000,126349348,126309701,126263431,126225497,126217538,126213249,126213021,126208708,126183431,126162572,126140702,126095616,126070585,126066865,126005027,126000000,126000000,125998190,125900000,125886000,125884687,125882157,125857464,125821926,125810000,125800000,125766296,125758649,125737516,125733623,125703650,125685801,125671250,125654725,125624882,125624000,125611530,125600000,125600000,125599240,125583428,125543000,125485024,125452696,125441541,125418693,125406757,125398485,125376506,125375041,125343418,125304628,125258853,125223341,125212713,125100000,125100000,125100000,125001364,125000000,125000000,125000000,125000000,125000000,125000000,125000000,125000000,125000000,125000000,125000000,125000000,124931929,124906277,124888080,124876926,124875680,124848642,124824656,124673000,124623678,124615039,124560000,124531003,124514531,124513906,124510728,124502878,124500000,124416385,124392006,124330379,124322740,124319515,124273317,124271228,124225930,124210408,124191440,124160567,124140690,124011742,124000000,124000000,124000000,124000000,123952291,123863645,123860013,123860000,123800000,123650000,123623596,123621126,123605764,123603000,123600000,123594395,123594216,123578554,123533797,123500000,123493477,123464494,123422709,123359968,123325214,123315011,123267173,123143396,123134835,123116205,123023846,123000000,123000000,123000000,122984866,122965382,122958477,122940169,122850432,122845541,122810914,122729404,122687769,122595457,122533377,122511448,122500000,122453660,122400000,122386440,122365916,122340000,122337783,122318736,122303360,122300000,122207965,122171901,122162071,122090867,122067717,122000000,122000000,121985176,121966959,121958827,121919397,121914088,121908840,121864940,121841341,121820246,121764409,121694600,121689000,121587254,121514000,121474233,121454586,121438242,121426541,121350785,121313814,121292052,121272407,121244169,121206474,121115762,121100000,121000000,121000000,120998857,120983147,120971000,120885028,120840000,120838071,120814915,120800000,120753958,120712998,120624876,120586538,120579372,120570558,120549907,120543000,120539930,120525684,120500000,120468278,120463222,120452911,120449637,120417476,120400000,120353377,120335000,120330514,120326192,120301051,120246898,120224000,120169501,120147000,120146520,120142543,120140248,120066111,120005000,120000000,120000000,120000000,120000000,120000000,120000000,120000000,120000000,120000000,120000000,119993747,119983874,119960000,119881264,119825587,119818979,119720308,119700000,119684930,119666142,119665601,119623579,119546547,119459855,119367812,119240717,119240240,119200000,119191509,119095675,119000000,118989276,118979517,118929620,118904602,118904017,118855933,118813179,118799588,118773633,118773539,118742467,118736451,118686579,118546903,118476495,118422882,118337983,118330270,118305269,118302193,118300000,118295331,118271126,118266962,118243899,118241716,118200000,118160672,118100000,118074695,118000000,118000000,117993992,117984003,117965997,117965264,117949477,117855067,117853985,117799679,117798920,117792134,117780868,117691000,117623254,117592952,117591394,117553798,117511997,117500000,117473558,117400000,117304568,117236096,117228000,117219660,117211064,117137729,117129148,117112000,117100721,117081920,117081895,117070333,117059490,117041000,117031725,117000000,116975956,116860611,116852357,116798873,116795944,116787144,116745803,116739721,116739020,116677291,116658834,116647199,116638951,116617389,116615000,116571358,116560000,116521853,116442216,116402185,116400000,116395000,116036183,116016739,116003106,116000000,115930442,115909883,115802927,115757946,115653185,115558300,115543179,115540771,115532398,115511000,115500000,115467312,115444912,115369674,115277077,115238490,115200111,115166287,115137694,115127647,115114897,115097849,115084521,115037529,115032697,115000000,115000000,115000000,115000000,115000000,115000000,114947882,114939299,114894234,114850000,114800000,114795867,114793123,114786489,114762846,114704511,114691447,114681928,114570948,114550000,114517577,114469217,114419000,114387000,114326200,114292000,114273352,114265136,114138484,114110363,114100000,114028571,114012010,114000000,114000000,113978000,113832149,113827161,113774000,113770758,113770708,113755133,113750000,113737416,113712498,113698566,113681750,113650518,113599992,113559311,113550000,113516677,113491044,113413667,113390077,113365000,113311500,113264166,113252696,113245500,113197400,113104067,113098000,113073912,113065951,113060826,113054954,113011000,113000000,113000000,113000000,112992761,112989046,112950327,112950000,112881235,112860000,112780117,112775936,112750000,112718360,112715005,112701951,112700000,112697000,112678684,112549409,112519062,112519025,112505800,112432023,112382581,112375000,112276456,112147231,112142276,112095842,112051000,112000000,111999360,111995703,111922105,111919812,111903430,111771018,111766300,111758647,111686030,111539397,111468192,111391495,111368000,111354111,111291010,111289248,111260623,111221000,111203528,111190455,111175213,111171721,111138371,111100000,111089518,111029252,111016595,111000000,111000000,111000000,111000000,110993439,110968416,110915005,110902805,110835759,110821640,110801201,110758885,110736725,110724207,110722514,110703438,110687900,110599377,110503122,110490000,110476612,110460243,110422284,110417275,110416745,110416437,110400247,110400000,110392325,110366203,110347643,110259892,110237966,110185706,110130588,110127192,110105313,110057296,110042250,110000000,110000000,110000000,110000000,110000000,110000000,110000000,110000000,109952930,109909295,109903600,109892333,109869791,109849329,109791046,109765047,109750182,109656154,109622798,109596519,109571913,109566913,109559887,109538535,109510206,109476775,109400000,109339000,109325714,109296586,109255096,109243288,109126577,109000000,109000000,109000000,109000000,108979354,108939159,108892376,108816000,108760657,108694000,108685000,108647401,108640806,108640467,108630000,108618928,108614014,108584669,108583533,108558968,108557000,108556704,108540215,108521878,108515837,108461833,108403258,108255806,108245640,108164523,108142167,108062162,108048000,108046060,108011025,108000000,108000000,107915267,107872470,107854408,107850877,107795125,107787646,107769835,107750685,107513246,107426728,107400832,107391929,107356959,107343000,107334847,107242040,107200000,107115703,107114234,107041921,107037449,107031944,106978054,106952187,106871858,106844460,106809668,106796139,106790580,106770924,106757993,106739312,106738141,106713700,106712531,106709307,106700000,106700000,106700000,106685563,106674986,106660171,106642344,106504000,106485200,106472637,106438000,106357597,106356000,106196441,106163403,106138750,106138750,106030240,106027333,106020061,106004622,106000000,106000000,105969908,105967568,105957979,105922864,105922828,105891177,105877347,105875000,105806505,105800000,105800000,105800000,105790000,105759178,105739095,105709211,105622099,105535629,105529805,105518160,105500166,105497626,105478242,105463500,105427000,105420826,105362000,105358000,105299075,105280350,105194490,105169649,105148796,105138208,105133209,105042993,105017210,105000000,105000000,105000000,105000000,105000000,105000000,105000000,105000000,105000000,105000000,105000000,105000000,105000000,104986000,104939492,104884144,104815152,104813816,104800000,104797053,104741860,104730793,104700000,104661879,104536537,104524238,104500000,104500000,104488600,104452484,104423541,104405611,104400000,104394792,104378963,104292796,104275205,104267863,104175868,104167228,104121879,104109777,104102271,104088525,104046745,104041304,104035126,104000644,104000000,104000000,103988748,103953940,103953103,103938055,103913769,103908266,103858485,103855152,103812595,103742692,103692580,103633584,103610266,103580000,103467820,103445153,103430168,103384787,103350000,103339574,103300000,103266347,103250000,103194119,103171722,103136232,103128842,103112350,103100000,103084559,103075496,103074164,103067092,103043958,103000000,103000000,103000000,103000000,102963952,102950000,102910541,102906014,102859453,102844902,102800000,102800000,102772455,102730441,102729281,102706041,102705500,102700000,102686000,102640661,102640000,102600000,102593557,102588283,102575550,102531935,102498563,102424204,102367628,102359344,102290000,102242297,102235557,102227430,102206654,102200000,102170800,102151823,102151686,102143883,102113481,102105153,102100000,102073334,102024143,102022785,102019167,102017853,102000000,102000000,102000000,102000000,102000000,102000000,101982566,101943098,101932024,101930413,101922000,101898235,101877988,101876121,101849485,101816356,101800000,101763920,101747507,101724247,101706571,101678222,101675000,101634166,101634117,101604002,101578573,101535000,101480411,101479979,101461317,101456414,101405694,101377775,101325996,101253433,101200000,101163878,101150018,101130086,101113210,101100000,101035000,101000000,101000000,101000000,101000000,100996000,100928846,100887403,100850000,100828281,100825138,100823784,100793639,100784617,100768000,100764796,100758536,100741796,100700000,100669013,100658007,100651662,100644022,100604105,100600000,100595147,100585000,100574492,100555925,100516074,100500000,100494478,100475539,100473716,100405556,100403000,100400000,100385945,100383161,100361474,100356204,100312294,100292463,100227515,100197568,100165000,100143200,100100000,100099227,100085989,100084119,100066377,100059102,100046806,100017482,100013959,100000000,100000000,100000000,100000000,100000000,100000000,100000000,100000000,100000000,100000000,100000000,100000000,100000000,99886685,99872469,99865587,99839393,99820879,99767194,99706969,99670479,99518177,99513017,99470257,99379793,99336804,99278000,99250257,99243093,99235948,99145231,99076000,99026653,98924642,98812782,98796826,98784000,98757519,98745226,98717344,98656829,98377187,98300000,98000000,97941173,97913183,97907182,97850000,97735754,97620677,97611000,97560712,97511083,97500000,97500000,97496335,97472139,97458140,97443887,97443368,97345468,97340772,97277000,97236358,97220457,97196916,97193000,97069908,97061506,97029827,97023885,97013885,96951826,96910800,96900000,96781847,96759395,96757826,96684009,96545597,96435047,96433391,96431000,96411036,96309046,96213665,96198187,96118377,96103116,96009230,96000000,95894329,95889034,95811064,95770509,95638677,95611173,95595134,95567083,95524178,95500000,95500000,95395355,95358204,95301035,95200000,95147749,95124101,95087992,95078285,95078000,95043788,95006000,95000000,95000000,94985996,94978191,94884693,94863799,94818762,94593589,94563623,94531711,94293886,94260093,94255445,94250447,94140245,94061160,94000000,93900000,93895667,93808761,93802002,93761245,93708081,93662926,93596444,93547412,93500000,93456583,93422516,93400000,93312727,93243538,93231699,93109198,93098794,93053915,93028812,92994611,92879406,92868108,92867394,92835424,92824423,92783043,92762716,92635478,92611442,92600316,92575915,92532974,92500000,92331725,92202820,92201872,92156239,92155480,92153513,92000000,92000000,92000000,91913980,91912271,91761295,91741619,91736434,91735535,91709730,91664592,91534955,91532000,91500000,91455973,91353387,91344277,91261000,91252595,91222300,91200000,91200000,91111000,91100000,91084507,91048082,91000000,90975000,90928475,90870000,90830165,90824126,90820538,90719512,90716876,90700000,90566053,90561860,90535000,90512432,90400000,90285713,90264362,90249000,90222001,90215309,90206642,90193847,90088510,90059072,90049000,90025000,90001776,90000000,90000000,90000000,90000000,90000000,89899421,89788355,89603333,89409203,89280000,89271395,89234875,89207976,88805422,88757527,88292523,88217108,88081000,88036494,87518918,87438212,87400000,87381981,87183098,86955440,86955223,86908559,86602903,86400000,86086001,86006000,86000000,86000000,85954000,85800000,85700000,85686550,85664274,85564935,85400000,85145682,85136057,85105770,85100290,85036838,85000000,85000000,84972836,84541109,84474321,84364000,84309725,83904754,83801000,83663003,83616164,83614558,83564691,83376279,83161260,83088256,83000000,82613186,82500000,82433000,82207758,82047970,82000000,82000000,81900000,81885400,81800000,81768554,81727192,81405710,81393658,81323053,81237136,81234606,80954881,80750521,80743112,80169674,80164118,80157000,80118065,80074804,80000000,80000000,80000000,79931399,79876679,79764572,79521672,79400000,79380374,79228000,79075000,78975000,78971654,78930476,78661061,78522515,78516439,78365600,78226000,78194291,78111318,78061091,78037779,77992776,77841326,77804785,77629862,77570390,77500000,77462382,77379054,77372425,77243322,77202712,77000000,77000000,76822465,76600000,76514000,76386138,76362250,76140778,76139338,76101694,76082390,76011668,75861392,75844419,75801670,75787866,75697872,75657800,75622624,75610000,75535895,75300000,75000000,74876492,74666559,74472683,74441011,73653015,73621733,73390210,73310011,73307000,73286021,73213889,73185184,73056941,73000000,72988882,72956404,72580214,72500000,72423697,72388942,72190721,72174687,72132492,72118445,72001773,72000000,71926951,71890000,71836201,71658773,71640000,71623920,71556268,71503751,71500000,71500000,71496238,71372000,71359568,71312333,71305282,71293254,71229911,71040528,71000000,70974578,70941026,70843000,70742355,70585943,70493272,70351758,70300000,70248000,70100000,70056666,70000000,70000000,70000000,69966793,69875474,69800000,69648187,69637400,69350848,69338378,69328060,69321300,69241151,69106700,69100000,68999580,68495000,68482445,68431000,68422886,68188498,68000000,67982609,67936411,67917935,67797691,67643000,67275031,67095383,67052451,67011434,66976000,66848000,66784000,66646509,66461063,66266547,66235799,66117176,66046000,66000000,65925000,65897582,65839921,65766177,65655804,65390705,65238895,65224000,65080000,65009838,65009076,65000000,64987866,64845479,64721000,64454692,64449596,64413776,64383000,64323854,64101887,63847695,63714462,63555173,63450000,63411952,63387674,63262218,63205300,63010095,62786450,62749499,62408549,62360986,62347000,62139806,62000000,61865437,61851506,61795825,61780844,61653508,61652146,61615189,61599804,61500100,61475000,61450903,61336941,61321660,61225970,61184517,61106000,61000000,60923829,60795950,60699800,60609214,60265994,60000000,60000000,60000000,59582895,59493340,59287551,59234962,59124490,59104628,59000000,59000000,58954875,58943806,58898572,58874538,58781432,58722217,58700000,58008618,58000000,58000000,58000000,57899540,57865985,57724923,57675333,57594578,57536602,57525735,57475744,57203890,57028099,57000000,57000000,57000000,57000000,56573247,56404730,56365014,56267000,56137777,56070951,56028858,56001141,56000000,55978657,55870000,55631118,55578207,55573752,55569897,55407000,55394489,55286932,55255239,55207705,55000000,55000000,55000000,54870223,54869122,54609002,54512662,54457622,54383305,54241386,54200000,54026603,54000000,53979036,53954873,53700000,53658000,53574031,53422804,53419964,53371019,53235164,53055874,53050000,53043449,53000000,53000000,53000000,52932000,52885253,52522322,52512195,52216299,52195437,52117783,52090424,52082577,51835497,51762218,51696000,51625299,51604902,51592593,51507055,51182783,51173346,51000000,50982529,50916195,50905120,50791508,50782953,50772954,50700000,50680119,50635134,50587840,50548223,50521000,50431037,50338548,50270395,50182734,50171325,50169263,50100000,50081860,50033330,50000000,50000000,50000000,50000000,50000000,50000000,50000000,50000000,49996000,49947854,49720000,49634537,49606406,49590799,49586401,49551316,49550000,49540909,49534588,49476680,49361518,49300673,49278999,49145063,49020424,49000000,48991067,48778993,48771636,48755000,48409552,48400000,48375852,48213084,48205542,48130646,48000000,47910678,47858280,47772309,47643182,47580438,47300000,47111370,47100000,47099915,46900000,46875045,46726894,46707000,46560000,46448544,46400000,46305255,46291000,46288127,46166000,46065261,45882774,45606333,45523013,45500079,45403962,45294963,45147733,45000000,45000000,45000000,45000000,45000000,45000000,44848950,44805702,44748517,44699191,44639460,44588114,44400000,44338929,44157944,44151000,44090851,44000000,43984679,43976832,43867795,43835000,43798514,43721108,43000000,42973000,42701939,42666992,42656000,42600000,42600000,42600000,42262536,42223970,42172700,42167853,42114670,42100000,42000000,42000000,41911442,41861284,41767913,41600000,41559250,41479000,41347515,41267679,41203647,40901000,40900000,40848518,40795893,40717484,40650435,40644399,40600000,40581515,40518119,40446174,40244556,40200000,40141591,40109581,40050000,40024000,40000000,40000000,40000000,40000000,39883059,39719241,39692379,39634500,39630397,39600000,39561000,39500000,39463580,39318681,39304648,39300000,39200032,39156270,39071868,39037779,39000000,38905612,38718542,38536978,38530168,38525692,38500000,38497000,38418143,38413447,38257104,38218977,38116443,38108150,38033657,37996848,37983066,37800000,37600000,37534612,37526559,37456636,37411415,37350872,37291270,37184000,37063283,37062399,37000000,37000000,36765810,36714000,36659052,36619376,36618899,36425800,36413130,36386677,36250000,36190243,36168000,36105982,36040118,36015000,36002490,36000000,35902900,35900000,35769813,35574831,35573995,35461616,35445118,35202814,35201000,35200000,35000000,35000000,35000000,35000000,35000000,34983675,34980451,34978698,34909499,34898000,34851097,34537131,34458841,34451900,34344752,34335165,34243746,34147924,34134233,34039653,33912386,33773000,33467606,33323007,33300000,33250000,33221791,33106477,33083636,33000000,33000000,33000000,33000000,33000000,32858309,32792217,32759683,32729314,32725191,32676712,32659950,32638036,32595000,32584146,32425138,32222816,32118281,32000000,32000000,32000000,31900000,31715393,31708184,31684403,31639763,31633014,31625180,31560000,31456542,31382540,31237774,31209193,31069544,31022536,31000000,31000000,30985692,30926049,30916118,30877159,30871392,30835000,30812886,30756624,30673471,30661626,30600000,30485000,30458471,30386666,30274653,30235000,30181790,30069517,30013191,30000000,30000000,30000000,30000000,30000000,29908526,29900000,29502552,29500000,29475834,29436458,29411961,29336550,29315698,29115826,29100000,29083582,29059581,29000000,29000000,28918259,28826700,28772872,28663832,28644692,28477888,28447872,28431633,28233400,28220704,28214246,28210455,28135715,28025891,28004246,28000000,28000000,28000000,27904901,27874257,27758451,27713000,27692173,27672639,27506000,27500000,27371490,27318163,27300000,27282000,27255395,27248301,27006998,27000000,27000000,27000000,26884453,26741374,26737908,26730148,26702388,26690740,26678736,26668717,26600000,26593924,26555076,26535227,26463000,26407169,26336119,26313888,26250320,26184133,26149922,26100048,26081215,26000000,26000000,25978462,25940000,25936581,25900000,25888338,25860377,25851579,25850000,25801091,25792000,25754074,25694300,25677000,25623967,25613037,25546170,25525000,25472805,25465416,25437534,25392868,25377434,25356386,25333254,25314387,25300000,25231516,25225000,25200000,25195604,25000100,25000000,25000000,25000000,25000000,25000000,25000000,25000000,25000000,25000000,24993899,24500000,24500000,24211189,24179212,24132498,24052623,23901781,23819705,23782637,23626563,23000000,23000000,22970000,22924237,22906198,22684226,22592753,22500000,22460000,22353371,22300000,22279708,22100000,22000000,21905042,21727474,21600000,21501344,21306171,20993742,20933209,20700000,20660000,20645446,20600000,20530771,20350632,20300000,20219083,20201553,20149516,20000000,20000000,20000000,20000000,19986061,19765985,19748773,19538829,19470000,19436511,19149219,19097623,19077259,19034592,18851379,18793000,18741579,18729232,18685952,18672598,18655425,18360000,18306056,18188400,18000000,18000000,17948465,17889865,17629896,17500239,17500000,17425019,17237404,17190130,17119616,17034897,17000000,16844330,16661530,16617874,16564282,16449000,16109000,16097929,16000000,16000000,15895868,15789765,15660508,15578594,15418648,15242000,15069674,15000000,15000000,14713122,14620075,14500000,14466974,14374935,14348129,14174088,14107078,13831582,13790000,13500000,13424739,13400000,13328000,13263279,13254422,13120645,13036100,13000000,12868242,12642959,12531004,12503321,12100000,12000000,12000000,12000000,11974984,11841946,11770699,11624000,11609188,11576534,11546478,11524724,11367018,11330022,11226163,11198957,11078974,11027768,11000000,11000000,10895384,10847288,10778798,10721983,10717953,10695265,10605000,10601613,10500000,10475715,10438483,10415884,10402394,10400284,10330000,10312440,10283274,10091378,10008380,10000000,10000000,10000000,9899451,9876998,9867098,9850000,9626445,9531817,9500000,9480000,9367150,9300000,9143622,9106318,8922256,8896540,8860268,8765133,8684475,8603614,8580576,8500000,8445878,8100000,8091304,8037458,8026988,8000000,7954683,7907000,7749505,7654000,7647885,7592347,7543696,7500000,7500000,7476337,7400000,7295000,7170341,7000000,7000000,6517940,6506029,6282818,6254913,6240739,6233746,6200000,6189000,6180000,6175829,6156963,6100000,6000000,5900000,5887319,5766151,5762954,5751466,5703000,5594488,5434000,5286651,5200000,5200000,5085113,5000000,5000000,5000000,5000000,4986348,4967000,4919753,4737610,4700000,4682810,4645827,4595400,4578890,4500000,4493000,4325000,4300000,4299024,4200000,4200000,4197150,4197000,4177952,4125188,4114000,4093071,4045125,4000000,4000000,4000000,3959537,3906968,3894379,3750000,3697092,3609581,3600470,3500000,3411326,3409136,3399455,3316904,3313519,3293211,3250780,3245525,3152668,3000000,3000000,2958519,2919276,2789872,2719054,2700000,2667130,2550000,2529742,2512772,2475000,2470833,2400000,2379318,2323000,2300000,2300000,2295596,2271672,2200000,2148599,2100000,2100000,2050000,2030680,2030000,2002926,2000000,2000000,1925644,1888374,1800000,1750000,1735700,1700000,1502877,1500000,1450000,1368048,1363299,1350000,1300000,1268136,1250000,1242540,1199394,1199000,1175558,1138000,1090992,1050000,1020838,1000000,1000000,1000000,1000000,1000000,967397,850000,799281,715000,650000,632636,604309,555756,505304,502022,500000,500000,484574,480000,400000,322342,250000,250000,220705,214894,200000,200000,187000,150000,147278,139985,136185,120692,120000,104427,100200,100000,100000,100000,100000,60000,50000,50000,49000,48704,36742,19785,16119,10000,10000,10000,9622,9000,3000,2500,2000,1266,77,28,10,10,2,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null],"stateOfficePrimary":["PA","CA","CA","NY","MA","CA","MA","MD","NY","MA","IL","NJ","NY","NY","NY","DE","CA","NY","TX","NY","GA","MA","MO",null,"CA","NJ","MA",null,null,null,"MA","CA","CA","NY","NY","CA","CA","NJ","PA",null,"CA","PA","MA","NY","NY","CT","MA","NY","CT","MA","NY","NJ","NY","NJ","NY","IA","NY","NC","MN","IA","PA","NY","NC",null,null,"MA","NY","PA","IL",null,null,null,"WA","CA","NY","IL","NY","CO",null,"IL","MO","MA","NJ","MO","WA","IL","MA",null,"NY","MA","MO","TX","CT","NY","IA",null,"IL","MN","MA","MA","NJ",null,"CA","DC",null,"MA","IL","IL",null,"CA","CT",null,"CA","IL","CA","NY","NY","WI","IL","NY","MA","MA",null,"NY","NY","CA","CA",null,"MN","PA","FL","MN","TX","NY",null,null,"GA","NY","PA",null,"IL","MN","NY","MA","WI","IL",null,null,"TX","PA","NY","CT","IL","CT","NY",null,"NY","NY","NY","NY","CO","NJ","MA",null,"NY","NY","PA",null,"NY","MN","NY","NY",null,null,"CA","MA","WA",null,"NH","PA","IL","FL","MA","PA",null,"CT","NY","MN","MA","OH","RI","NY",null,"MA",null,"NY",null,"IL",null,"PA","TX","NJ",null,"MD",null,"IL","NY","NY","IL",null,"DE","CT","MA","NM",null,null,"NY","CA","MA",null,"NY","NY",null,"NY","NY",null,"NY","NY","OH","MA",null,"NY","CA","NC","AZ","VT","TX",null,"WA","FL","CA","NY","NY","NY",null,"CT","MA","OH","NJ","MA","MA",null,"NY","NY","KS","VA","CA",null,null,"MI","KS",null,"FL","NY",null,null,"IL",null,"CA","NY","MD","OH","NY","MD",null,"CA","CT","NY","NY","MA","MN","TX","TX","NY","NY","CA","CT",null,"MO","MO","NY",null,"NY","FL","MA","MA",null,"NJ","CA",null,"NY","AZ","CT","NY","MA","CT",null,"CT","IL",null,null,"CT","VA","NY","NY","WA","CA","TX",null,"CA",null,"NY","CO","NY","CA",null,"CT","MA","CT","MA","MO",null,"FL","MN","CA","NY",null,"MA",null,"NY","NY","CT","IL","CA","DC","NY","NY","NY","NY","PA","VA","CA","CT","NJ",null,"CA","NY",null,"MA","CA","NY","CT","NY","NY",null,null,null,"MA","MN","AZ","NY","TX","CA","CA","MA",null,"IL","CA","WA",null,"NY","NY","CT","NY","NV",null,"NY",null,"PA","VT","NY",null,null,"MO","DE","MA",null,"NY","MA",null,"NY","DC",null,null,null,"NJ","NY","CA","CT","CA",null,"NY","CA","TX","IN","IA","CO","OR","NY",null,"CA",null,"CA","MN","FL","IL","PA",null,"NY",null,"TX","NY","NY","CA",null,"FL","NY","NY","NY","NJ","NY",null,"MA","TX","TX","MD","NY","CA",null,null,"TX","MO","NY","KS",null,null,null,"NY","NY","NY","CA","MD","IL","MA","GA","WI","NY","NY","MD","NY","CA","NY","NY","CT","IL",null,"NJ","CA","CA","PA","KS","PA","MA",null,"TX",null,"IL","WA","NY","TX",null,"NY","MD",null,"TN","IL","CA","IL",null,null,"IL",null,"CA","NY","NY","CO","NY","FL","NY","NY","PA","PA",null,"NY","CT","NY","WI","NY","CA","CA",null,"PA","CA","TX",null,"GA","NY","CA","CA","NY","MA",null,"CA","CT","IA","NY",null,"KS","IL","MA","TX","NY","NY","NY",null,"CA",null,"NY","CA","PA","IL","TX",null,"CA",null,null,"NY","PA","NY","CA","NY",null,"IN","TX","CA","AL","UT","NY","OH","NY",null,"FL","IL","CA","NJ","OH","NY","RI","NY","NY","CA","CA","OR",null,"NY","CT","MA","CO","CA",null,"MN","TX","NY","IL","CA","NY",null,null,"MA","GA","CO",null,"WI","NY","NE","IL","IL",null,"GA","NY","MA","CA","OR","MN","NY",null,"GA","TX","IL","DC","VA","NY","NY","VA","NY","NY","CA","NY","IL","NY","CA","NY","CT","NY","NY","TX","MA","VA","MO",null,"MA","TX","NY","MA",null,"NY","NY","NY",null,"TX","CA","CT","NY","NY","NY",null,"NY","NY","IL","NY",null,"MA",null,"MN",null,"NY","PA","IN","IL","IN","MD","NY",null,"NY","NE","OH","NY","TX","FL","CA",null,null,"CO","CT","NY","CA","NJ","OH","PA","WA","CA","IL","NY",null,"NY","NY",null,null,"CT","CT","NY","CO","MA","NY",null,"CT","CA","NY","CA",null,"PA",null,"NY","TX","WI","NY","NY","DE","TX",null,"KS",null,"MD","MA","NY","VA","NY",null,"IL","NY","NC","CA","TX","MI",null,null,"VA","IL","CA",null,null,"NY","IL","NC","CA","NY","AL","MI",null,"NY","CT","CA",null,"OH","CA","NJ","NY","NC","CA","OH","NY","NY","TX","NJ","PA","CO","NY","NY","CA",null,"NY","NJ","CT","OH","NY",null,"NY",null,"TX","NY","NJ",null,"NY","NY","CT","NY","CA","NY","DC","CA","WA","IL","CA","NY","VA","CT","NY","PA","CA","CA","CA","MA","MA","IL",null,"TX","NY","NY","CT","GA","NY","FL","MA","CT","NE","NY","IL",null,null,"FL","NY","TX","IL","MN","CA","NY","CA","IL","MA","MA","NY","OH","IL","NY","PA","CA","MT",null,"NY","NY","CA","NY","IL","IL","NJ","NY","PA","AL","NY","CT","MA",null,"CA","CT","MD","TX","IL",null,null,null,"NY","TX","NY","CT","NJ",null,"CO","IL","TX","MN","IL",null,"NY","NY","CA","IA",null,null,"CA","TX","NY","NY","IL","MA","NY","TX","NY","VA","CA","FL",null,"NY","NY","IL","NY","NY","NY","CT","PA","CT","CT","CA","CA","CT","NY","IL","MA",null,"DC","NC","NY","NY",null,null,"CT",null,"NY","VA","GA","IL",null,"OH","FL","OH","NY","KY","NJ",null,"NY","WI",null,"VA","CO","TX","MA",null,"CT","MA","OH","NY",null,"NY",null,"MA","NY","NY","CA","IL",null,null,"MO","CA",null,"KS","NY","NY","NY","MA","NY",null,"CA","CO","MN","NY","CA","NY","IL",null,null,"CA","CA","TX",null,"NY","IL","IL","CA","MA","MN",null,"NC","MN","NY","NY","NY","NY",null,"NY","NY","IL","CA",null,"NY","OK","CT","DE","CA","NY","NY","MA","ID","MD","CA",null,"MA",null,"CO","NY","NY","NY","NY","NY",null,"NY","MA","MA","MA","MA","NY","NY","NY","KS","PA","MA","MA","CT","CA","MA","NY","TX","NY","FL","GA","MA","NV","PA","AR","NY","IL","NY",null,"NY","NE",null,"GA","NY","CA","IL","VA","NJ","CT",null,"NY","IL","CA","MO","NY","CA","CA","NY","IL","CA","FL","AK","MA",null,"MN","NY","NY","NY","GA","MN","WI","OR","NY","IL","MD","TX","NJ",null,null,"NY","NY","MA","OH","NY","GA","NY","IL","PA","CA","IL",null,"OH","NY","TX",null,"NY","NY","MO","MA","KY","NY",null,"NY",null,"NY",null,"NY","NY","NJ","NY",null,null,"OR","KY","OH","CA","IL","VT","OH","WI","CA","NY",null,"NY","NY","CA","NY","IL",null,"NY","CT","MA","MA","CA","NJ","PA","NY","MA","PA","MA","NY","GA","IL","CA","NY","MA",null,"FL","CA","PA","CA","MN","NY","TX","MA","NY","FL","NY","CA","MA","GA","FL","VA",null,"NY","NY","CT","NY","NY","CA","NY","CA","MA","OH","CA","NY","NY","VA","NY","NY","CT","GA","GA","NY","NY",null,"TX","IL",null,"NY","IL","VA","LA","NY","NC","OR","CA","FL","NY","CO","VA","NY","IL","NY","MA","NJ","MA","NY","MD","NY",null,"TX","NY","NY","CA","NY","NY","TX","IL","NY",null,"TX","SC","CT","NY",null,"CT","NY",null,"CT","MA","CT","IL","WI","OH","MN","CT","NY","NY","TX","WI","NY","FL","TX","CO",null,"NY","CA","MD","NY",null,"TX","NY","NY","WA","MO","NY","PA","GA",null,"CT","CA",null,"CA","CA","WA","TX","PA","IL","CA","MA","CA","MD","TX","MN","MA","CA","CT","NY","CA","NY","MN",null,"FL",null,"NY","CA","GA","IL",null,"CA","TX","NY",null,"IA","NY","OH","NJ","CA","CT","MA","MA","NY","NY","MA","WI","IL",null,"TX",null,null,"MA","NY","MA","NE","NY","NY","NY",null,null,"IL","NY","TX","NY",null,"GA","VA","WA","PA","WA","VA","CT","PA","MD","NY","MA","NY","CA","NY","CA","CA","MA","NY","IL","CA",null,"NY","CT","NY","PA","MA","MI","MD","WI","NY",null,"NY","MA","NY","PA","NY","CA","NY","NY","MA","MA","IL",null,"MN","CT","NY","WA","MO","MN","NY","OH","IA","NY",null,"CT","TN","NY","MI","NY","CA","CA","TN","NY","TX","CA","NY","FL","TX","CT","CA","NY","CO","FL",null,"NY","NY","TX","NY",null,null,null,"MA","NY","FL","CA","NY","NY","IL","CA","NY","FL","AZ","AL","PA","IL","NY","TX","CA","FL",null,"NY","MA","MA","IL","NY","IL","OR","NY","NY",null,"TN","NY","NY",null,"NY","NJ","KY",null,"FL","IL","WI","IL","IL","MO",null,"MD","NY","NY",null,"NY","CT","NY","NY",null,"CT","CA","CA","PA","NY","SC","FL","MN","NY","NY",null,"NJ","NY","PA","GA","TN","NY","TX","IL","KS","TN",null,"CT","NY","UT","CA",null,null,"GA","CA","NY","CA","CA","PA","TX","NC",null,"NY","CT","NY","NY","NY","IL","CT",null,"MA","NY",null,"CA","NY","CT","NY","NY","CT","TN","NY","MA","AZ","NY","NY",null,"NY","CT","MA","AL","GA","NY","OR","CA","MD","NY","CA","NY","NY","MO","NY","NY","CT","NY",null,"CA",null,"CT","NY","NY","FL","CT","CA",null,"MN","NY","NY","NY","OH",null,"CT","CA","PA","NY","CA","NY","NY","MD","VA","CA","IL","MA","IL","OH","CT","CA","NY","FL","MA","NY",null,"NY","NY","NY","NY","GA","NY","CT","GA","NY","NY","GA",null,null,"KS","NJ","CA","NY","NH","CA","NY","TX","NY","MI",null,"IL","CA","MO","IL","NY","NJ","FL",null,null,null,"NH","CO","CT","CA","NY","CT","PA","NY","IL","NY","MI",null,"MA","NY","NY",null,"NJ","CA","OH","NY","NY",null,"WA","OH","NY","MA","DE","CT","NY","MO","FL","PA","MD",null,"IL","MO","GA","PA","MA","CT","NY",null,"MA","MN","NY","NY","MN","CA","GA","WA","TX",null,"CA","CA","CA","NY","IL","CA","MA",null,"CO","MA","CA","KY","NY",null,"PA","MI","TX",null,null,null,"NY",null,null,"TX","MA","PA","OH","GA","NY","WA","OH","NY","NC","MA","NY",null,"NY","NY","PA","NY","MI","IL","CA","NY","IL","NC","VA","NY","IL","NY","WA","CA",null,"NC","CA","CA",null,"TX",null,"NY","WA","IL","IL","CT","NY","CA","NY","NY","NY","IL","NY","NY",null,"NY",null,"MA","CA","NY","NY","NY","NY","NY","MD","IL","PA","NY","NJ","NY","NY","CT","CA","NY","NY","IL","NY","ME","VT","NY","CA","CA","CA","TX","WI","MO","WI","MA","NE","WA",null,"TN",null,"MA",null,"NY","TX","NY","KS","NY","NY","NY","NY","IA","TX","CT",null,"IL","NJ","WI","IL","TX","NY","PA","NY","TX","MA","TX",null,"MA","NY","MA","OR","CA","NJ","WI","CA",null,"MO","CA","MA","NY","CA","CA","MN","CA","NY",null,"IN","CT","NY","VA",null,"NY","IL","TX","MA","NY","CA","NY","MD","AK",null,"IL","NY","NJ","CA","NY","NY","NY","TX","AR","NY","IL","MD","KS","NY","CT","AZ","NY","VA",null,"NY","CO","NY","CA","MA",null,"NY","NY","WA","NY","CT","NY","WA","CA","MA","NY","MA","NY","IN","NY","FL","NY","CT",null,"MT","IL","NY","NY","KS","MN",null,"NY","MA","NY","CA","PA","SC","TX",null,"MI","WA","CA","NJ","DC","IL","NY","MD","CA",null,"CT","NY","NY","IL","PA","CT","CT","NY","CA","MN","NY","PR","MD","CT",null,"WI","CT","AL","NY","NY","CA","VA","OH","ME","NY","KY","CA","IL",null,"MI","CA","NY","CA","NY","CA","CA","MI","MA","CA","NY","UT","MA","OH","CA","MA","CT","MA","CA","PA","NY","NY","NY",null,"CA","MN","TX","CA","CA","NY",null,"WA","MA","FL","PA","NY",null,"CA","CA","TX","NY","NY","OH","CO","MO","NY","CO","PR","PA","IL","TN",null,"CA",null,"WA","IL","PA","NY","NY","NY","MA","NY","NY","VA",null,"CA","NY","VA","TX","OH","VI","PA","WA","NY","ID","RI","CT","FL","NY","CT",null,"TX","NY","GA","NY",null,"NJ","NY",null,"NY","NY","TX","CA","NY","MN","WA","NJ","IL","NY","KY",null,null,"SC","IL",null,"CA",null,null,"NY","CT","MA","MO",null,"NY","CA","MA","IL","IL","AZ","MA","NY","NY","NY","GA","NC",null,"LA","MA","NY","NY","IA","NJ","CT","CA","CA","NC",null,"TX","MA","TX","TX","WI","TX","NY",null,"NY","IL","GA","CA","TX","NE","MD","NY","DC","DC","CA","PA","NY","MA",null,"TX","CO","NY","MO","NJ","CA","NY","MD","TX","TX","VA","IL","GA","CA","CA","NY","WA","TX","KS","NY","CT","MA","FL","CT","MN","VA","IL","NY","WI","OR","NY","NY","VA","MI","NC","MI","MD","NY","FL","WA","CO","NY","MO","WA","VA","IL","NY","MN","NJ","NY","MA","NY","NY","TX","MA","IL","CA","CA","MA",null,"SC","PA","CT","IL","TX","CA","CA","MI",null,"FL","MA","NY","MA","NY","NY","NC","NY",null,"IL",null,"NJ",null,"CT","MN","TX",null,"IL","MD",null,"CA","PA","OH","NY","IL","NY","WI","NY","FL","OH","TX",null,"CA","MA","MA","TX","CA","MA","CO","WI","IL","GA","NY","NJ","CA","MA","NY","CA","OR","GA",null,"NY","FL","OR","NY",null,"NY","MA","MD","GA","NY",null,null,"NJ","WA","OH","LA","NY","CA","CA","IL",null,"NY",null,"NY","IL","NC","NY","NY","WY","NY","CO","CA","WA","MA","WA","MA","PA","CA","WA","MA","OH","NY",null,"CA","IN",null,"NY","NJ","NJ","NY","CA","PA","IN","NY","NY","MI","NJ","MA","NY",null,null,"AZ","NY","GA","MD","NY","IL","IL","CT","FL","NY","NY","NC","CA","NY","NY","TX","MO","TX","OK","WI","NY","IL","CA",null,"CA","NY","CA","CT",null,"NY","CT","CA","CA","NY","NY","PA","IL","PA","FL","MI","WA","IL","GA","VA",null,null,"NY","NY","NY","CA","MS","MD","CT","PA","NY","NY","NY","TX","IL","NY","MI","MA","CA","MA","VA","NY","NY","CA","MA","PA","CT","MO","PA","NJ","MA","NY","NY","CA","NY","CA","NY","NY","VA","CT","TX","NY","IL","CO","CT","MI",null,"AL","NY","DC",null,"CA","CA","IL","MI","OH","MA",null,"CA",null,"TN","OH","MN","NY","MA","MI","PA","NY","NY","NY","MD","CA","NJ","MN","UT","NH","MD","FL","CA","NY","FL","TN","AZ","VA","NE","CA","TX","MD","NY","NY","NY","TX","NY",null,"NY","NY","CT","NY","CA","NY","NY","IL","MA",null,"NY","MN","TX","NY","NY","NY","NY","CA",null,"NY","CA","PA","NY","MA","MI",null,"PA",null,"CA","NY","CT","MA","TX","TX",null,"IN","CA",null,"CT","FL","TX","NC","NY","PA",null,"WA","NY","FL","NC","NY","OH","MO","MA","NC","VA","NC","NY","NY","CT","FL","GA","NJ","MA","NY","CA","CA","NY",null,"IL","IL",null,"PA","CO","MA","CA","DC","VA","OK","CA","CA","CT","AL","NY","FL","CO","CA","CA","LA","NY","TN","AR","NY","NY","PA","CA","WA","CA","GA","NE","NY","NY","MA","NY","NY","NY","NY","NY","IL","GA","NY","IL","NJ","MN","NY","CA","NY","MA","NC","RI","PR",null,"IA",null,"TX","IL","NY","NY","VA","WA",null,"IA","GA","NY","FL","NY","NY","NY","MA","IL","MD","PA","NC","AL",null,"TX","CA","OK","CA","NY","CO","NY","TX","TX","PR","NY","NY","NY","MN","FL","NY","MA","IL","NY","PA","MT","MA","NY","TX","TX","MA","IL","IA","TN","VA","NY","CT","MD",null,"NY","TX","OK","NY","NY","CA",null,"IL","CA","CT","PA","OH","NY","IN","VA","NV","NY","MD","CA","CA","CA","TX","WA","WI","OH","MN","PA",null,"PA","CA","CA","CA","CA","NY",null,"VA","NY",null,"CA","NY","NY","IL","TX","IL","OH",null,"NY","CO","CA","MS","NY","TX","IL","TX","NY",null,"CA","CA","GA","NY","NJ","NY","NC","TN","NY","CO","CA","CA","IL","CA","CT","NY","CA","MD","NY","NY","NY","MA","NY","MA","VA","CA","WA","CA","IL","CA","NY","IA","CA","PA","CA","FL","MO","IL","NY","NY","NJ","NY","NY","CT",null,"PR","UT","TX",null,"NY","FL","PA","NY","IL","MN","GA","CA","CO","CA","NY","CO","KS","IL",null,"CA","NY","CT","IL","CA","CA","TX","NY","PA","MA","CT","AL","MA","NY","MA","OH","KY","AL","WA","GA","MA","MI","OR","NY",null,"CA","CO","MA","NY",null,"GA","MN","MA","WA","FL","NY","NY","NJ","MO","TX","FL","PA","OH","NY",null,"MA","NY","CA","CT","GA","IL","CO","NY","TN","FL","TX","FL","CT","TX","GA","VA","MN","CA","MA",null,"NY","NY","MA","VA","DC","MA","PA","MD","NY","DC","CA","CA","MA","PA","CA","CA","WI","CA","NY","TX","CA","CA","MN",null,"VA","AR","TX","NY","MO","FL","CA","NY","NY","TX","MN","MI","GA","FL","PA","NY","CA","NJ","LA","NY","NJ","MD","NY","NC","VA","IA","OH","TX","CT","CA","MA","NY","CA","MA",null,"MA","NY","CA","NE","CA","FL","GA","CT","MD","TX","NY","CA","MN","NY","NY","IL","OK","IN","CA","MA","PA","TX","MA","TX","NY","FL","NY","VA","CA","FL","GA",null,"AZ","MA","NY","WA","CT","PA","CA","SC","OR","CA","NY","CA","LA","NY","CA","HI","CT","CT","WA","IL","FL","CA","NY","NC","NY","NY","NY","CA","NC","MA","IN","MI","NY","MO","PA","MO","NY","IL","MA","TX",null,"NY",null,"CT","GA",null,"TX","NY","NY","MA","TX","WA","IL","IL","MO",null,"FL","CO","NY","AL","DC","MA","NJ","NY","NY","MN","PA","NY","MI","CO","NY","CA","CA","NY","TX","PA","PA","CA","CA","TN",null,"GA","PA","LA","IL","GA","CA","NY","CT","NJ","GA","CA","NY","NE","VA","NY","OK","NY","OH","MA","CT","PA","WI","IL","NY","CT","IL","NC","CA","NY","NY","TN","OH","NY","NY","IL","CA","MA","PA",null,"CA","MN",null,"NY",null,"PA","NY","NY","CA","CA","IL","MA","NY","NY","NY",null,"NY","MA","WA","CT","FL","NY","NY","NJ","FL",null,"NY","NY","FL","NY","KY","TN","IL","PA","NY","MA","PA",null,"TX","NY","NY","CT","FL","NC","PA",null,"CO",null,"TX","CA","CA","IL","CA","NY","IL","MA","DC","NY","NC","NY","MA","NY","CA","GA","CA",null,"CA","CT","CA","CO","MO","MA","MI","IL","WA",null,"MD","VA","OR","KS","NJ","NY","NY","KS","CA","CA","TN","PA","IN","NY","NY","CA","GA",null,"MA","NY","CA","NY","NY","NJ","NY","IL","NJ","CO","NY","PA","NY","CO","AZ","CA","NY",null,"KY","MI","NY",null,"NC","MA","GA","NY","MA","TX","IL","AL","NY","VA","GA","NY","CA","NY","FL","NY","CT","NY","NY","NC","PA","VA","OH","IN","NY","NY","NE","AK","WY","MA",null,"MD","MT","CT","CT",null,"CA","PA","CA","DE","NY","NY","CA","TX","NC","MA","IL","NY","CA","MA",null,"IL","CT","MA",null,"TX","CT","PA","MS","MO",null,null,"NY","CA","TX","WA","CT",null,"IL","OH","NY","SC","IL","NY","TX","AZ","CT","NY","CO","IL","NE","NC","IL","NY","NY",null,"NY","CA","CA","NY","FL","IL","WI","NY","WI",null,"MA","PA","IN","NY","CA","WI","OH","NY","CO","WA","IL","NJ","CA","FL","MD",null,"MD","PA","DC","MO","OH","MN","CA","CA","IL","WI",null,"CO","RI","MA","NY","NJ","CA","MA",null,"CT","NY","MA","CT","CA","NY","CA","CO","PA","NY","CO","NY","TX","CT","CA","UT","TX","NY","PA","GA","MA","NY","CA","NH","UT","TX","NY","TN","CT","NY","NY",null,"NY","OH",null,"CT","CA","TN","MA","NC","MO","FL","OH","OR","MA","CA","FL","NY","FL","NY","MN","NY","CA","MN","TX",null,null,"NY","MA","CA","MI","NY","NY","FL","NC","MA","MD","PA","MA",null,"NY",null,"NY","HI","NC","NY","UT","IL","WA","TX","MI","AL",null,null,"TX","CO","NC","NY","CT","NY","CT","MD","NY","TX","NY",null,null,"CA","NY","PA","NJ","OR","IL","CT","MA","NY","TX",null,"MA","WA","GA","FL","MD","CA","VT","PA","IL","MA","TX","NY","NY","AR","IL","NY","CA","IN","NY","CA","MD","NY","MA","NY","NY","NY","PA","CA",null,"CA","IL","CT","KS","NY","TN","TX","MI","CA","IL","NY","NY","NJ","NY","NY","GA","OR","NY","CT","ID","NY",null,"FL","NY","CA","CT","NY","NY","HI","KY","PA","DC","NJ","IL","NY","CA","CA",null,"OR",null,"CA","NY","NY","MA","CO","CA","NJ","TX","MI","CA","FL","CT","PA","TX","TN","NY","MA","VA","MD","CA","CO","MN","NY","VA","CO","IL","MI","NY","NY","OH","MA","NY","CA","CA","TX","IN","CT","RI","MD","TX","MN","CA",null,"NE","MA","CA","PA","CA","OR","MI","MO","OH","MN","TX","CA","ND","MO",null,"CA","OH","AL","CO","NY","MD","NY","NY","NY",null,"CT","NC","TX","UT","OK","PA","WV","CT",null,"NY","CA","FL","NY","CA","GA","OR","MI","IL","MI","NE","MA","NY","OH","MA","VA","NY","TX","TX","OH","NY","NJ","KY","MI","CA","NY","TX","FL","NY","FL","NY","GA","NY","CA","NY","CO","FL","MA","NY","TX","PA","MD","TX","NY","NM","MO","MA","MA","NJ","CA","PA","IL","TX","CA","NY","CT","NJ",null,"MA","NJ","IL","KS","KS","AL","NY","CA","NY","ID","CA","CA","NY","PA","PA",null,"CO","MA","OR","MA","CT","IN","NY","NY","IL","CT","NY","OR","NY","AL","CA","NH","LA","TX","CA","NC","FL","NY","IN","MA",null,"CA","RI","GA","DC","MA","NY","NY","TX","NJ","IL","MA","NY","NY","MD","KS","CA","MA","PA","FL","OH","TN","UT","NY","OR","WI","AZ","TX","MN","NY","FL","NY","NE","PA","CT","VA","CT","NY","NJ","NJ","IL","VA","OH","WI","NY","PA",null,"MD","MN","MN","WV","FL","TX","NY","WA","MA","NY","NY","CT","CA","NY","NY","PR","MN","TX","CA","CA","NY","NY","MI","NY","FL","NY","NY","MN","NY","MI","NY","RI","MI","TX","NY","PA",null,"OH","TX","TN","CO","NJ","NY","TX","OR","NY","IL","IL","NY","AZ","OH","CO",null,"OH","OH","IL","IL",null,"CA","NY","IL","SC","CA","NJ","CA",null,null,"NC","PA","CO","NJ","TX","VA","FL","IN","OH","NC","AZ","NC","CA","CA","CA","NY","NY","NY","NJ","IN","OH","CT","IN","GA","CA","PA","NY","CT","GA","UT","MI","NY",null,"AZ","NY","FL","NJ","NY","GA",null,"IL","MN","CA",null,"TX","TX","PA","VA","CA","PA","CO","CA","WI","MN","WI","WI","MA","IL","VA","CA","TX","AL","PA","CA","TX","IL","FL",null,"MN","VA","NY","MA","PA","VA","NC","NY","CA","CA","NY","MA","NY","CO","NC","NY","TX","CA","DC","MS","NC","CA","TX","CT","IL",null,"WI","CA","WA","CA","IL","MA","LA","MN","CT","CA","MA","NJ","VA","NY","CO","CT","NY","CA","MO","OH","NY","TX","CA","OR","NY","PA","DC","MA","IA","NY","PA","NJ","MA","NY","CT","MI","PA",null,"CA","LA","NY",null,"CA","MA","NY","VA","NY","TN","IL","IL","MD","NV","MD","CA","NY","AL","DC","NY","FL","MI","KS","CA","FL","MA","KS","CT","CT","CA",null,"CA","IL","TX","NY","CA","NY","CT",null,"GA","NY","IL","NJ","NY","CA","CO","WA","NY","NC","PR","TX","NY","NY","CA","PA","CA","CO",null,"CA","NH","WI","MA","TN","PA","CT","NY","LA","GA","OH","NY","IL","CA","CA","CA","FL",null,"NY","CA","NC","NH","PA","NY","MI","CA","CT","NY","MN","WI","NE","MI","WA","TX","CA","CA","MA","OR","CA","NH","CA","CT","NY","CO","NY","NY","CA","TX","CT","CA","CA","MN","CA",null,"WA","NY","MD","MN","GA","IL","NY","MO","IN","MA","CA",null,"CA","NY","NY","NY","TX","CA","MD","CT","TX","NY","MA","KY","OR","KS","NY","CT","CA","CT","NJ","TX","NY","MA","CA","FL","CA","MD","IL","TX","CA","AZ","TX","NY","CT","NJ","IL",null,null,null,"TX","TX","NY","MA","CT","OR","NY","PA","NC","IL","NJ","NY","WA","CA","OH","NY","CA","PA","CT","IL","GA","NM","CT","GA","NY","PA","CT",null,"NY","NY","NY","CT","NY","KS","TX",null,"CA",null,"CO","IL","OR","MN","OK","VA","IL","WI","CO","GA","NY","NJ","CT","NE","CA","NY","MO","MA","CA","CT","CA","NY","NY","OR","CA","MA","MN","NJ","TX","TX","CA","TX",null,"CA","VA","MA","NY","FL","OH","PA","PA","FL","CT","CA","MD","OH","OH","MA","ME","FL","NY","NY","CA","KS","GA","NY","NY","GA","CA","NJ","CT","RI","TX","WA","NY","CO","CA","TX","NY","TX","NY","NY",null,"IN","CA","VA","MA","MI","TX","TN","CT","FL","CA","DC","MI","AZ","NY","CA",null,"GA","CA","FL","CA",null,"NY","NY",null,"PA","NC","MI","PA","CT","NJ","NY","MA",null,"GA","NY","NY",null,"FL","CO","CT","NY","NJ","IA","NY","PA","KS","MD","MA","MI","IL","AZ","MO",null,"NY","NY",null,"VA","MA","CA","PA","PA","NC","NY","WI","MD","NY","NY","NY","AZ","MA","NY","TN","MI",null,"CA","MA","PA","CA","TN","MA","TX","MA","NY","WI",null,"PA","WA","CA","NJ","OH","GA","RI","NC","DE","FL","CT","TX","NY","VT","TX","MN","DE","NY","CT","PA","NJ","CO","NY","TX","TX","TX","CA","TN","MO","FL","CT","CA",null,"NY","FL","NY","CA","DC","PA","KS","IN","MA","IL","OR","WV","OH","NY","WI",null,"CT","NE","WA","OH","FL","TX","IL","CT","NY","WA","OH","MD","IL","NJ","IL","MI","NY","DC","NY","MA","NY","NY","NY","UT","MA","PA","VA","IL","CA","CT","UT","CA","NY","FL","CO","PA","NY","CA","CO","NY","NY","OH","MD","MA",null,"TX","TX","NY","NY",null,"NY","NC","IN","TX","MA","MO",null,"MD","OK","OH","NY","TX","CO","NY","NY","NY","MA","MN","IN","NY","OH","MA","NY","AZ","PA","MN","PA","PA","CA","NY","NY","NY","CA","NY","WI","WI","PA","MO","TX","NY","CA","NY","NY","NY","TX","NY","NC","RI","FL","NY","PA","NY","PA","FL","IL","NY","CT","CT",null,"TX",null,"NY","FL","NY","MA","IL","NJ","AL","IA","WI","MA",null,"VA","MA","AZ","CA","MA","IL","NY","CA","WI","WI","CT","CA","VA","NY","OH","NY","KS","CT","NY","NY","NY","FL","NJ","IL","OR","NY","FL","CA","CT","CA","IL","TN","OR","TN","NE","FL","NE","IN","IL","PA","KY","NY","DC","IL","CT","CT","IL","CA","MA","AL","PA",null,"MD","CT","TX","OH","UT","MA","MO","NY","CT","NC","FL","CA","CA","CT","NC","VA","IL","CT","CO","IL","MN","TX","NY","MO","CT","IL","IL","NY","NH",null,"MS","KS","DC","NY","NY","CT","NY","PA",null,"PA","PA","GA","NJ","CT","DC","NC","CA","VA","PA","IL","TX","MO","NY","OK","OK","NY",null,"NY","CT","GA","PA","MT","NM","CA","NY","NY","IA","CA","IL","CA","MO","CO","CA","CA","IL","NY","MN","CA","WI","NY","NY","OH","FL","NC","NY","VA","CT","OR","NC","CT","KS","PR","CA","PA","CA","CA","MN","NY","MA","VA","PA","NE","RI","CA","CO","IL","IA","TX","WV","NE","WI","GA","IN","NJ","WA","MD","GA","NY","IL","CT","OK","TX","CA","NY","SC","VA","OH","CA","NY","TX","CT","CA","MN","WA","MA","CA","GA","NY","IN","CA",null,"CA","CA","IL","CT","IN","OR","NY","CA","PA","OK",null,"CA","CA","CO","IL","CA","IL","NY","CT","FL","NY","VA","GA","MN","PA","DC","PA","NY",null,"NY","NY","NY","TX","NH",null,"CA","CO","OH","MD","NY","NY","CA","NY","NY","OR","MN","TX","VA","CA","IL","CT","OH","WI","GA","MA",null,"NY","NY","FL","IL","NC","MN","CA","TX","NJ","NJ",null,"IL","CA","TX","MI","TX","MA","WA","WA","NH","NY","TX","NY","CA","FL","TX",null,"MD","NY","CT","UT","IL","TX","IL",null,"AZ",null,"NC","WA","MD","NY","CT","NY","CT","OH","CA","CA","DE","TX","KY","CA","PA","NY","NY","NY","OH","CO","CA","GA","TX","NY","NY","NY","CA","NY","OK","AR","CA","MN","NY","PA","CT","CA","TX","CA","NY","GA",null,null,"TX","NY","CA","MN","PA","IL","PA","VA",null,"MD","IL",null,"TX","CA","CA","CA","OH","TX","CO","CA","NY","FL","CO","NY",null,null,"CA","MD","NY","CO","TX","OH","CA","IL","CT","PA","NY","TX","NY","FL","CA","NC","CA","PA","NY","IL","DE","UT","KS","OR","GA","KY","GA","FL","NY","NY","OH","PA","CT","NY","NY","NC","TX","NY","MA","MO","PA","CT","CT","CA","CT","CO","TN","CA","TN","PA","PA","NY","GA","WA","MN","TX","OH","CA",null,"WI","WI","MI","MA","CA","DE","PA","MD","MA","CA","NY",null,"CA","TN","CA","IL","AR","CT","NY",null,"IN","CA","TN","PA","NY","IL","TX","GA","NY","NJ","CA","MD","NC","PA","TX","MI","PA","CT","IA","OH","NY",null,"MA","GA","VA","CO","CT","NY","CO","TX",null,null,"IL","OH",null,"MA","MA","CT","FL",null,"VA","CA","OH","TX","OH","CA","NY","IN",null,"NY","MI","MO","NY","WI","NC","OH","NC","ME","NY","AZ","WY","CA","NY","WA","TX","NY","NY","MN","FL","TX","NY","TN","NY","TX","MI","NY","TX","TN","MS","NY","MD","CA","NY","CT","AR","WI","CA","NY","CA","PA","AL","PA","NY",null,null,"KS","CA","PA","CA","OK","NY","TX","NY","ME","MA","CO",null,"NY","CA",null,"MD","CT",null,"MA","CA",null,"IL","NY","NY","NY","NY","LA","NY","CT","KS","TN",null,"OH","NY","CA","NJ","CA","PA","ID","FL","NY","MA","TX","TX","TX","TX","VA","ID","IL","NY","NY","NJ","NY","AZ","NY","CA","TX","PA","NY","NY","MD","TN","IA","MO","CT",null,"NH","UT","IL","VA","NV","KS","OH","OH","NY","MD","TX","TX","FL","CT","NJ","KS","NY","IL","CA",null,"CA","TX",null,"FL","NH","TX","OH","PA","TX","UT","CA","MS","TX","IL","OH","CA","MD","CO","WI","CA","NJ","FL","UT","CO","TX","OR","WA","NJ","IL","OR","MO","MI","CA","TX","CO",null,"NY",null,null,"MI","GA","LA","CA","KS","PA","GA","NY","NJ","CA","NY","TX","NY","GA","WI","OH","CT","CA","PA","NY","FL","NY","MA","IL","IL","VA","VA","FL","NY","FL","ND","NY","PA","MA","IL","VA","TX","MI","MD","IN","NJ","NY","FL","GA","WI","MS","NY","VA","CO","VA","FL","AL","NY","ID","PA","NC","PA","NY","IL","TN","NY","GA","WI","FL","NC","TX","OH","OH","AR","VA","NY","CT","ID","PA","GA",null,"MA","NE","CA","NY","NY","CA","MA","MI","PA",null,"WI","MN","NH","TX","CO","MN","TX","NC","MS","CT","IL",null,"NY",null,"MI","NY","NY","CA","CA","KY","MN","NY","OH",null,"NY","MO","OH","CA","CA","CA","NY","NY","WY","NY","NY","MA","CA","IL","LA","OK","FL","KS","CA","CT","NY","NY","PA","NY","NJ","NJ","CA","MA","CT","NY","MD","GA","TX","NY","GA","CA","OH","CA","KS","FL","OR","CO","CA","OR","PR","NY","TX","LA","MA",null,"LA","MO",null,"PA","TX","IL","TX","MN","CO","MN","IN","MN","NC","NY",null,"NJ","MA","NY","FL","NY","MA","NV","FL","IL","TX","FL","AL","GA","CA","NY","NY","MA","CA","FL","CA",null,"AL","MN","NY","SC","MA","PA","VA","NY","CA","IL","NJ","MA","FL","CO","CA","NY","NY","NJ","PA","FL","MO","MA","OH","NY","CA","TX","NY","CA",null,null,"CA",null,"FL","NY","NY","TX","OR","FL","MI","IL","IL","IL","MA","NY","MO","VA","TX",null,"MI","VA","NY","CO","MO","NY","IN","IL","TX","GA","NY","KS","NY","CA","CO","FL","CO","CA","UT","CA","MO","NY","TX","WI","WA","NY","IL","NY","NY","CA",null,"CA","OH","FL","CA",null,"AZ","NY","TX","PA","NY","MI","NY","MN","MA","WV","NY","NY","GA","IL","CA","NY","CO","NY","NJ","MI",null,"TX","TX","NY","CO","VA","CA","WA","MA","PA",null,null,"NY",null,"CO","FL",null,"WI","MI","VA","PA","VT","WA","CA","CA",null,"NY","CT","CA",null,"CA","TX","CA","IL","MA","TX","NY","CA","CA","NY","CA","NY","PA","IL","PA","PA","VT","CA",null,"DC","MN","VA","FL","CA","WI","MO","CA","TX",null,"FL","NJ","GA","NY","PA","FL",null,"TX","OR","PA","VA","FL","NY","ME","NY","VA","CT","MN","CT","TX","NY","NY","NY","AL","CA","IL","CA","AZ","MN","NY","CA","IL","WA","OH","KS","MD",null,"CA","VA",null,"OR","CT","CA","KS","WA","CA","NY","CT","NY","NJ","CO","TX","PA","PA","NY","KY","RI","NY","GA","AZ","NY","NC","NJ","NY","CA","MD","MN","NY","CA","TX","CT","CO","MD","CA","TN","GA","CA","NY","ID","NY","VA","NC","CO","MI","MI","NC","KS","CT","PA","KS","SC","NJ","TX","MA","NY","MD","CA","FL","KS","NY","TX","WA","IA",null,null,"CA","KY","MA","CO","IL","WA",null,"MI",null,"MI","NJ","VA","NY","TX","MA","CA","CA",null,"TX","NY","MA","VA","NY","MA",null,"NY","CA","MA","AL","IL","CT","OR","CT","CA","NY","TX","CA","CT","NY",null,"MN","IL","OH","CA","TX","NY","NJ","MA","LA","PA","CT","MO","ME",null,"NC","IL","AR","CA","IL","NY","TX","TX","NY","OR","IN","CA","TX","OH","PA","CA","CA","MA","CA","NY","TN","SC",null,"CA","FL",null,null,"WA","CA","FL","MA","TN","CA","TX",null,"MA","IL","FL","NY","PA","MA","CO","MO","CO","FL","WA","OH","MO","IL","MD","WI","VA","NY","TX","GA","CA","NY","OH","NE","OH","CT","CA","MO","TX","NY","CA","IL","MD","NC","PA","CA","TX","NY","IN","NC","NY","NY","CA","WA","WI","PA","OH","NC","FL","KS","MA","PA","NY","VA","CA","NJ","GA","NY","WI","MI","FL","SC","NY","IL","IA","CA","WI","MN",null,"AR","MD","MA","IN","NY","MN","ID","VA","MD","NY","UT",null,"TN","OR","NY","MA","TX","MO","CT","PA",null,"IN","CA","IL","OH","GA","IN","NJ","NY",null,"NJ","CO","FL","GA","TX","NY","CA","OR","FL","CA","MO","MA","TX","NY","CT",null,"PA","GA","CT","NJ","CA","NY","NY","MI","NY","NY","GA","MI","PA","WA","MO","TX","TX","MD",null,"MI",null,"NY","NC","CT","CA","MO","NY","VA","TX","AL","TX","NY","MA","MO","PA","PA","CA","FL","NY","OH","FL","TX","IA","MO","NY","MD","NC","CO","NY","NC","NY","NY","NY","TX",null,"NY","PA","WI","NY","NY",null,"CT","IL","CA","NY","IL","PA","AZ","NY","NY","IL","TX","CA","CA","MI","KS",null,"NY",null,null,"TX","RI","MN","NY","NY","CT","FL","WA",null,"FL","FL","NY","PA","NY","MN","NY","NC","NY","AZ","CA","NY","OH","NY","FL","NJ","WI","MA","MO","NJ","CA","MD","NY","TX","OH","TX","PA","DC","FL","MA","MN","NY","NJ","FL","MA","CT","CA","NY","IL","OH","NY","AZ","IA","TN","TN","NY","GA","ID","CA","NC","CT","IL",null,"NY","OK","ND","AL","PA","TX","FL","NY","IN","TX","MD","DE","NY","NY","CA","IL","MA","CA","KS","CA","OR","VT","LA","MN","CA","DC","WA","NY","ID","NY","TX","WA","NY","CA","CT","NJ","PA","OH","NY","CT","FL","NY","PA","PA","CA","CA","IL","CA","WI","WA","MN","LA","CT","NY","CA","CA","NY","CA","NY","ID","MD",null,"TX","NY","OH","OH","CA","CT","ID","DC","FL","NY","SC",null,"IL","CO",null,"MA","IN","CO","NY","GA","MD","AZ","CO","IL","CA","CA","MN",null,"NY","FL","KY","NC","CA","NY","MA","TX","CA","CA","HI","UT","TN","OH","NJ","CA","CT","CA","CT","TX",null,"IN","TX","NY","OH",null,"CA","DC","MO","VA","CA","CA","CA","GA","WA","TN","OH","NY","NY","NY",null,"NJ","CA","PA","PA","CO","WI","OH","MN","IL","NY","MA","VA","VA","DE","CA",null,null,"TX","IA","CA","IL","CT","NY","CT","SC","NY","IL","MO","TN","CO","VA","IL","GA","OH","MN","CA","CT","IN","TX","NY","FL","GA","NY","NY","NM",null,"NY","NE","VA","NJ","CA","AZ","CA","OH","CA","NY","NJ","FL","VA","TX","NY","MA",null,"ME","NJ","NJ","FL","NY","PA","TN","TX","NY","CA","CT","TX","CA","GA","TX","NY","MA","IL","NY","PA","PA","CA","CA","NY",null,"NE","FL","MA","GA",null,"CA","PA","CA","MA","CT","NY","PA","NY","CA","TX","WA","WI","MO","CA","CA","MI","CA","CT","MI","NY","PA","PA","NC","MD","NY","CA","NY","CA","PA","MA","NY","MT","MI","NY","NC","NJ","WA","NY","MN","NY","NY","SC","PA","KS","PA","TX","IL","MD","KY","IN","DC","TN","PA","OR","MD","UT","CA",null,"CA","IA","TX","VA","OH","DE","FL","SC","PA","NY","NY","TX","CT","AZ","FL","PA","CA",null,"CA","CA","NY","OH","TX","TX","CT","FL","NY",null,"CA","WA","CT","KS","MA","MI","NJ","OR","OH","NY","OH","CA","NE","TX","WA","NY","MI","MD","CO","CO","AZ","NY","NY","TX","TN","TX",null,"VI","NY","CA",null,"CO","CA",null,"FL",null,"PA","CT","NJ","NY","IA","CA","NY","MO","MI","VA","WA","AZ","PA","NY",null,"CA","CT","WA","NY","AR","NY","CA","NY","KS","CA","CT","NY","FL","TN","CA","IL","OK","NY","FL","WA","WA","FL","MA","NJ","MD","CA",null,"VA","CA","MA","AR","FL","NY","NH","CA","TX","CT","OK","NY","TX","NY","CA","FL","IL",null,"FL","TN","CT",null,"NC","VT","NY",null,"NY","TN","OR","NY","TX","IL","TX","CO","NJ","FL","CA","CA","PA","CA","NY","NJ","NY","MA","CO","CT","CT","NJ","UT","NC","CA","PA","TX","IL","NC","NY","IL","MN","WI","CA","MA","OR","MO","NJ","NY","FL","MO","NY","CA","MI","CA","CA","FL","LA","WI","CT","MN","NJ","CA","PA","NY","MA","PA","NY","KY","CA","TX","IL","TX","FL","NY","NY","CA","NY","NY","CA","FL","NJ","PA","TX","GA","WI","NY","NY","DE","AZ","TX","MA","PA","MA",null,"NY","OR","PA","CA","TN","CT","OK","GA","NY","KS","IL",null,"TX","NY",null,"NY","NY","NY","NY","CA","OH","VA","NY","NY","WA","OH","TX","MN","PA","TN","CT","MN","GA","TX",null,"TX","WV","CT","TX","FL","CT","NY",null,"WA","NY","TX","NY","CA","NJ","OH","AZ","AL","LA","CA","MN","CA","TX","MI","OH","IL","NV","LA","FL","TX","MA","FL","NY","MA","MN","NY","NY","AL","IL","NY","NY","SC","NY","MA","RI","NY","NY","OR","HI","TX","WA","PA","HI","NY","WI","IL","WA","NY","CA","CA","VT","CA","FL",null,"GA","WA","VT","TN","CA","RI","OR","KS","PA","GA","NJ","CO","NY","NY","AZ","NC","NC","NY",null,"NY","WI","MI","MA","MA","NY","OH","MN","MI","CA","NY","CT","CT","WI","CT","TN","NY","CT","GA","GA","SD","NY","NY","MN","NE","FL","IL","TX","IL","NY","NY","CA","FL","CA","CA","WI",null,"TX",null,"TX","VA","IL","CA","CA","FL","CA","TN","FL","NY","GA","VA","IL","WI","NY","TX",null,"TN","VA","NY","MN","TN","MI","NY","CA","IN","IL","NJ","CA","TX","PA","OH","TX","NY",null,"WI","PA","MA","PA","TN","CA",null,"NY","CA","NE","NY","FL","IL","FL","SC","PA","CA","CA","TX","LA","CO","CO","IN","CA","TX","GA","NY","AL","CA","CA","CT","KS","OH","IL","MN","VA","CT","MI","NY","CA","NY","TX","MA","OH","IL","MN","TX","NY",null,"NY","VA","NH","NY","MA","TX","NY","IL",null,"MN","NY","MI","MN","WA","KS","AR","NY","UT","GA","NM","IL","TX","GA","UT","CA","IL","NC","MD","IL","MI","NY","MO","UT","CA","OH","VA","CA","MA","MD","NY","PA","MA","CA","FL","CA","IN","WI","CA","CA","NY","NY","KS","OH","CA","SC","CA","NJ","TN","TX","CA","NM","IN","IN","NY","CA","NE",null,"PA","WA","TX","CA","LA","NC","NY","MA","MA","NY","NY","NY","CO","NY","KS","NY","TX","NJ","OH","TX","TX","CA","IL","PA","TX","CA","OR","CA","CA",null,"PA","LA","AL","AZ","AL","NY","CA","NY","NY","NJ",null,"NY","NY","CA","NJ","TX","CA",null,"NY","FL","NY","FL","CA","CA","WA","CA","CT","MN","NY","DC","CA",null,"MD","MI","VA","NY","IL","MA","PA","MA","WA","NC","CT",null,"NY","MI","NC","GA","CT","WA","MA",null,null,"VT","TX","CA","MN","IL","TX","NY","TN","WA","CA","TX",null,"MD","TX","NH","OH","LA","CT","FL","CA","CT","CA","IL","TX","TX","TX","VA","AZ","AZ","CA",null,"NY","NY","VA","TX","IN","VA","CA","TX","NJ","CA","FL","GA","CO","CA","CT","VA",null,"NY","NJ","TX","ID","NY","CT","NY","TX","NY","WA","NV","CA","IA","CT","NJ","IL","WA","NY","CA","IL","RI","VA","CA","CT","IN","FL",null,"OR","TX","CA","FL","CA",null,"NY","FL","NY","NY","FL","NY","MA",null,"TX","NY","NY","FL","NY","IL","WA","TX","GA","OR","CA","CT","CT","NY","CT","MO","MD","TX","NY","AZ","IN","NY","MD","TX","CT","AR",null,"IL","PA","TX","CA","NC","OH","FL","IL","PA","NY","IL","CA","NY","NY","NC","MI","TX","MD","IN","CA","MA","NY","OH","TX","NJ","NE","IL","CA","CA","FL","FL","TX",null,"TX","OH","PA","NY","MD","NV","IL","CA","IL","DC","CT","FL",null,"SC","AL","NY","GA","PA","CA","VA","CA","NE","WY","CA","IL","FL","IL","CT","NY","CA","PA","OH","MO","NC","NY","NY","NY",null,"RI","NY","WI","GA","GA","FL","NJ","CO","CT","FL","FL","NY","IL","NY","CO","FL","NY",null,"WI","NH","MA","WA","FL","TN","MA","PA","MA","WA","IL","CO","CA","CO","MN","IA","IL","CA","MA","AZ","WA","CA","NV","WA","TX","CA","NY","OH","MA","CT","PA",null,"MA","NC","TN","NY","NY","OH","WA","CA","NE","TN","CA","CA","KY","OH",null,"NY","CA","FL","MN","CA","CO","AZ","CA","IA","PA","CT","AL","IL",null,"TX","OH","IL","MA","CO","TX","NY","AL","FL","AZ","NY","NY","WI","MA","CA","NY","VA","NY","OH","CA","IL","NC","CA","LA","OH","NY","NY","CA","MA","IL","OR","VT","CT","OK","NY",null,"NY","IL",null,"NY","NY","CT",null,"KS","CA","CA","CA","NY",null,null,"NC","TX",null,"CA","TX","NY","NJ","NJ","LA","CA","NY","NY","PA",null,"NE","NJ","PA","WI","MI","GA","TX","GA","WA",null,null,"NY","OH","MI","CT","OH","CA","CO","WA","NY","IN","TX","TX","NY","IN","MA","TX","AZ","CA","MD","NY","GA","TX","CA","IN","OH",null,"NY","NY","NC","NY",null,"AZ","NY","CT","NY","NC","PA","NC","IL","OH","MA","OH","MA","CA","CT","KS","NC","IL","WI","SC","NY","NY","PA","IL","TX","PA","NY","FL","MI","CA","CA","AZ","TN","CO",null,"IL","CA","NY","TX","GA","CA","CA","VA","CA","OH","MA","GA","CA","TX","CA","NJ","OK",null,"FL","VT","IL","MD","PA","CA","AL","KY","CO","IN",null,"AZ","FL","TN","CA","SC","CA","CT","TX","NY","NY","UT","CA","CA","CA","OR","FL","TX","CT","FL","NY","FL","MD","RI",null,"MD","CA","MI","NY","NJ","MD","PA","NY","MA","NY","NJ","CA","IL","WI","TX","VA","TX","TN","CT","CA","IL","NY","IL","TX","WA","NY","NE","NY","PA","IN","IN","CA","VA","NY","NY","MA","CA","TX","NY","NY","CA","TX","IL","NC","NC","TX","MI","MA","MA","CT","CA","NJ","OK","GA","TX","FL",null,null,null,"PA",null,"MI",null,"MD","GA","IL","MI","CA","TX","PA","MA","TX","NY","NY","IL","NY","PA","OR","MD","MA","FL","MO","CO","MA","WA","OH","NY","TN","MI","PA","PA","CA","IN","IN","CA","UT","CA","CA","MN","CT","FL","IN","NJ","MN","MA","CO","CA","AZ","MO","PA","MT","NY",null,"DE","MI",null,"NY","OH","GA","NY","MI","MA","MS","NM","PA","CA","WA","CA","MN","NY","SC","TX","NY","WI","CO","NJ","NV","MI","FL","OR","NY","ID","CA","MA","NY","NY","CA","GA",null,"WI","IL","DE","NC","CA",null,"OK","PA","NC","CA","KY","NJ","OH","OH","CA",null,"WI","MN","NY","NY","NJ","NY","NY","IN","NJ","CT","TX","NY","KY","MI","FL","CA","NY","CA","FL","IL","TX","CA","NC","MT",null,"CA","MI","CA","PA","CA","MI","FL","MD","MD","DC","NY","FL","CO","NC","PA","NC","MA","MI","CA","TX","CA","NJ","PA","CA","CA","OR","CA","GA","NY","NY","IL","CO","TX","CA","IL","TX","CT","IL","CA","FL","PA","OH","CA","OR","WI","CA","LA","MA","IL","FL","NJ","CA",null,"WI","OH","IL","TN","CA","CA","MA","NM","PA",null,"MI","PA","TX","KS","NY","IL","CA","VA","TX","GA","NH","CT","TX","NY","NH","TX","CA","UT","MA","MI","PA","CA","NJ","AR","NY","MS","CA","MO",null,"CA",null,"PA","FL","TX","TN","CT","GA","CA","MD","CT","CA","CA","FL","NY","MO","GA",null,null,"CA","NJ",null,"VA","CA","NJ","WI","NY","MD","MA","TX","CA","NY","CA","CT","OH","CA","IN","NJ","NY","RI","KS","NY","KY","GA","MA","NJ","NY","CA","FL","NJ","PA",null,"NY","CA",null,"TX","NC","CA","PA","GA","VA",null,"CA","NY","NC","CA","AZ","FL","MN","NY","NY","TX","NY","DE","NY","TX","TN","GA","MA","MA","CA","NY","AL","KS","SD","NY","TX","NJ","TX","TN",null,"NY","MN","MA","OR","OH","NC","VA","NY","CA","LA","FL","TX","NY","NY","NJ","VA","CA","NC","IL","IL","CO","OH","NY","KS","NY","MA","WA","NY","IL","OH","TX","OH",null,"PA","IL","CA","TX","NC",null,"FL","ME","CA","DC","VA","TN","WA","CA","CA","ID","NY","WI","PA","UT","OR","VT","GA","PA","TX","OH",null,"CA","NY","IL","TN","TX","CA","IL","CT","PA","WA","TX","IL","TX","MA","MS","MI",null,null,"OR","NE","TX","NJ","OR","MI","ME","TX","VA","KS","SC","CA","VA","NY","CA","MA","NY","NJ","FL","WI","IL","NY","MI","IL","CA","NJ","NC","NC","IL","WI","CA","FL","CA","TX","OR","IN","CA","UT","CA","NJ","IL","NY","PA","CA","MI","CA","WI","OH","TX","MN","CA","NH","CA","CT","GA","KS","FL","NY","NY","VA","NY","NY",null,"CO","NY","OK","TX","TX","CA","NY","CA","FL","CA","CO","TX","WI","MA","AK","MN","MO","IL","OR","AL","TN","AZ","RI","NY","WI","NY","NY",null,"IL","CA","MN","NY","CA","NC","WA","WA","NY","OH","WA","NC","CA","MN","NC","NY","WA","TN","NY","IL","WI",null,"MD","MI","NY","NY","NC",null,"WA","NC","DE","CA","IL","TX","CO","MI","NH","MI",null,"CA","FL",null,"NY","CA","IL","MA","AZ","CA","MD","NC","RI","WI","WA","CO","NY","RI","PA","CO","FL","CA","IL","VA","CA","OR",null,"MI","NY",null,"OK",null,"NJ","TX",null,"CA","CA","NY","CO","DE","MA","OK","GA","FL","FL","NY","NY","HI","OH","TX",null,"OH","OH","MD",null,"VA","CO","AZ","NE","WI","MN","NY","MI","CA","CT","CT","MO","SC","GA","NJ","CA","FL","MN","NY","CA","MA","GA","NY","TN","PR","TX","CA","NH","FL","SC","AZ","NC","NY","VA","CA","GA",null,"VA","NJ","MI","NY","NY","NY","WI","MA","TX",null,"MA","TX","CA","PA","IL","IL","MA","MN","TX","AZ","WA","NY","PA","CA","FL","MN","MD","VA","CA","NY","IL",null,"CA","TX",null,"CA","MD","IL","CA","LA","NY","IN","SD","PA","MA","WI","NJ","IL","NC","MD","NY","AZ","RI","NV","NY","TX",null,"NY","FL","IL","CT","NH","KS","OH","CA","IL",null,null,"NY","NC","TX","IA","CA","WI","NY","WA","CA","NY","ME",null,"NE","MD","CT","NH","CA","MD","SC","IL","MA","CO","IN","UT","TX","CA",null,"MI","TX","NJ","GA","CA","NY","OH","NY","HI","AL","DE","CA","NY","CT","KS","AZ","CA","CA","NY","MA","TX","CA","TX","NY","VA","CA","CO","IL","CA","CA","OR","NJ","SD","NY","OH","CA","CT","NH","NM","IN","NY","CA","MN","NY","CA","NJ","MA","AZ","FL","TX","NH","CA","UT","NY",null,null,"WI","MA","MD","MD","IL","MA","IL","NC","NY","MA","MA","FL",null,"IL","IL","NC","NY","NJ",null,"NY","PA","CO","TX","CA","OH","TX","MA","NY","TN","NJ","TN","CA","AR","TX","CA","CA","MA","NY","PA","CA","WI","CA","VA","CA","AZ","TX","OR","CO","CA","UT","MA","NY","IA","NJ","CA","TX","ME",null,"CA","CA","NY","IL","NY","CT","AZ","MA","OH","OH","OR","VT","NY","FL","MA",null,"FL","TX","CA","GA","CA","CA","MA","TX","NY","NJ","NJ","MA","CA","TX","CA","MI","MD","TX","NY","NY","NJ","NY","NY","FL","GA",null,null,"CA","CA","CA","SC","IL","WA","IL","OH","CA","GA","MI","MA","OH","NY","NY","FL",null,"MO",null,"GA","VA","PA","KS","IL","IN","ME","WA","OH","MD","TX","MI","CA","MA","MA","CA","TX","NJ","FL","KY","PA","PA","FL","NY","FL","TN","KY","CA","NJ","NY","ME","RI","NY","OH","OH","NY","NC","MI","AR","CA","GA","NY","TX","CT","KS","NC","WI","AK","NY","CA","WA",null,"RI","GA",null,"FL",null,"TX",null,"IA","WV","TX",null,"CA","NY",null,"MA","NY","AZ","FL","TN","NY","IL","TN","WI","TN","NY","UT","IL","GA","WI","CA","TX","TX","CA","HI",null,"IN","NY","TN","TX","IN","NY","MN","NY","FL","PA","TX",null,"MD","GA","NY","NJ","NY","CA","PA","OH","OH","NV","MI","IN","MA","VA","KY","MS","NJ","WI","CA","CT","NJ","KS","CA","NY","VA","MD","CA","NY","UT","CA","CA","NJ","TX","TX","CO","VA","CT","FL","CA","IL","TX","PA","TX","TN","AZ","VA","OH","IN","MA","AR","GA","GA","FL","CT","NY","WA","CT","PA","WA","IL","NY","IL","NY","NY","CA","GA","CO","NH","IN","TX","TX","PA","CA","KY","OK","VA","AZ","PA","LA","NY","SC","CA","IL","MD","CA","NY","NJ","NY","KS","CA","NY","IL","TX","WI","NY","TN","OH","WI","CA","MO","NY","CA","NY","NY","HI","MI","TX","VA","MD","IL","MI",null,"IL","NC","CA","CA","CA","IN","OK","SC","NY","NY","FL","FL","MO","CA","CA","TX","OR",null,"NY","NY","MO","CT","IL","MI","MD","MN","AL","NY",null,"CA","IL","WA",null,"MN","NC","FL","NY","CA","NJ","NY","IL","TX","NY","OH","CA","AL","PR","NY","MA","IN",null,"IL","WA","FL","MS","GA","PA","IL","CA","UT","LA","PA","AR","CA","CA","TX","OR","CA","CA","CO",null,"CT","PA",null,"WI","CO","OH","TX","IL","MA","NJ","TX","WI","MD","PA","CA","CT","MO","NY","MA","MA","MI","NY","NJ","CT","MA","TN","CT","CT","WV","CT","NC","NC","CO","TX","CA","MN","PA","SC","CT","KY","MI","CA","RI","CA","NY","CO","CT",null,"MD","MO","IL","CA","NM","TX","NJ","CA","WA","CO","MA","NC","NH","NM","CA","MA","TX","NY","MO",null,"PA","NC","NY","TX","NY","FL","MD","NY","NY","MD","CT","WI","FL","MA","NH","NJ","PA","WA","TN","GA",null,"WI","PA","WI","CA","CA","OR","IL","NJ","NJ",null,"VT",null,"IA","CA","TX","CA","CA",null,"TX","CA","TN","CA","IL","MD","WI","IN","TX","CA","TX","PA","MD","MA","IN","VA","MO","CA","RI","NY","CA","NY","CA","CT","MN","IA","IL","CT","TN","NY","CO","CA","NY","WA","MA","CA","CO","NY","KS","FL","CA","MD","FL","NY",null,"NY","CT","CA","OR","CA","IL","FL",null,null,null,"MA","UT","MI","NH","NH","CT","NY","IN","WI","LA","MA","IN","NH","IL","MD","OH","IN","KS","PA",null,"NY","NC","CA","CA","IL","FL","VI","NY","FL",null,"MA","NH",null,"IL","NY","NC","VA","NY","VT","CA","LA","OH","TX","MA","IL","IL","FL","VA","IL","VA","WA","TX","FL","NY","WI",null,"TX","SC","CA","CA","AR","WI","NC","NY","AR","CO","NC","NJ","CO","AL","CO",null,"FL","TX","OH","DE","MN","NY","TX","IL","CA","TX","CA","NY","TN","WA","CO","WI","CA","NH","IN","PA","MN","CO","CT","GA","AZ","NY","NY","OK","NY","MN","NY","GA","MN","PA","ND","GA","MI","WA","CA","CA","TX","CA","NY",null,"NY","NY","NJ",null,"GA","IN","PR","WI","NY",null,"FL","NY","CA","UT","AZ","DE","NH","CA",null,"WA","NY","CA","MA","IL","TX","CA","CT",null,"MA","NY","MO","CT","NY","TX","MI","SC","IL",null,"PA","CA","TX","MA","VA","GA","NY","MA","MN","KS",null,"MN","IA","WA","NY","NC","TX","NY","FL",null,"PA","OH","PA","IN","CO","CA","TX","NY","FL","PA","NJ","RI","TX","CA","NC","IL","NJ","NY","NY","FL","NJ","TX","SC","MA","TN","IL","MA","SD","MA","CA","CA","WA","PA","NY","VA","IL","IA","CA","NY","CA","FL","MD","CA","TX","IL","CA","NE","CA","PA","PA","CA","NJ","MA","IL","CA","TN","CA",null,"NJ","IN","AZ",null,"TX","MI","KS","MD","NY","NY","IN",null,"MI","TN","NE","CA","AL","PR","MN","MD","CT","NJ","MI","NY","IL","CA","NY","NJ","NY","MN","NJ","VA","CA","CT","TX","MA","PA","CA","PA","CO","TX","NY","NV","MN","NY","CT","MN","IA","VA","NY","CA","UT","KS","CO","TX","AL","CA","NJ","MI","NY","NY","NV","AZ","MI","MN","HI","NY","CA","CO","MA","CA","MN","CA","MA","AZ","CO","WI","AZ","PA",null,"FL","CT","CA","IL","NY","ID","KS","TN","CA","CA","NJ","AL","UT","UT","OH","GA","CO","NC","MA","TN","NY",null,"TX","NC","VA","MN",null,"CA","NY","CA","MA","NY","NE","CT","MD","TX","FL","MA","MA","TX","MA","TX",null,"PA","CA","CA","CT","HI","NY","NY","OH","IN","CA","IL","IL","NH","NC","FL","CT","FL","CA","CA","MS","CA","MA","NJ","KS","CA","CA","CA","MN","KS","FL","IL","CT","MD","PA","PA","CA","CA","PA","PA","CA","KY","VT","CA","CA","TX","TX","CA","NY","NY","IN","NY","MN","TX","FL","MO","VA","CA","OR",null,"NY","FL","CA","FL","LA","IL","SC",null,"NY","MN","KY","CA","NJ","SC","TX","NC","FL","IN","OH","OH","TX","WA","WA",null,"MA","CA","AZ","TN","ID","CA","NY","AZ","OH",null,"MS","GA","CA","IL","IL","OR","VA","FL","PA","SC","CA",null,"NY","OK","WA","PA","IL","OH","LA","NJ","NY","MA","CO","AZ","NY","MD",null,"TX",null,"MA","NY","MD","OR","MA","WI","VA","CT","OH","TX","MN","CA","GA",null,null,"IL","NJ","NY","NY","TX","FL","OR","TX",null,"CA","FL","GA",null,null,"CA","NY","MI",null,"CA","FL","LA","NY","NY","AZ","NC",null,"WA","NY","CA","NH","FL","VT","MS","MO",null,"CA","TN","MI","MD","MA","KS","KS","IL","NY","CO","TX","MA","OR","NJ","TX","DE","CA","UT","IA","WA","NH","WI","CA","CA","WA","HI","LA","CO","SC","GA","CT","VA","MT","MI","TX","CA","KS","CT","SC",null,"TX","MA","TN","MI","NY","CA","FL",null,"FL","CA","NC","CA","TX","CA","CA","NY","NY","IL","NC","NC","NE","AZ",null,"NY","TX",null,"VA","TN","PA","CA","SC","CA","MD","GA","NY","CA","NY","WA","SC","IL","MA","TX","OH","TX","KS",null,"CO","CA","TX","CO","IL",null,"CA","NC","TX","AK","TX",null,"CA",null,null,"CA","CA",null,"FL","NY",null,null,"WA","WI","ND","FL","ME","IN","TX","IL","IA","IN","VA","CA","CA","TN","MD",null,"NY","TX",null,"FL","CA","MI","OH","CA","NH","KS","CA","HI","TX",null,"NY","WY",null,"MA","MI","GA","NY","NH","CT","UT","OH","PA","CA","FL","NY","MN","GA","FL","NY","TX","CA","NY","TN","MN","CA","NY","MA","OH","MI","LA","MA","PA","MI",null,"CA","IN","IA","TX","AZ","NJ","NC","FL","TX","TX","GA","TX","NC","FL","SC","IL","NY","VA","CO","MA","FL","NY","NY","CA","IL","NY","NY","CA","CT","CA","NY","WI","CA","AZ","TN","WI","CA","OH","NY","MA","MA","CT","MD",null,"WI","FL","IL","TX","TX","CO","MN","NV","FL","KY","TX","NY","NY","OK","TX","CA","NY","MA","KS","MN","PA","TX","CA","TX",null,"OR","AL","CA","CA","NY",null,"CA","FL","CA","FL","CA","IL",null,"TX","FL","CA","TN","AZ","NY","PA","WI","MI","OR",null,null,"CT","CA","OH","TX","PA","CA","MD","NH","ID","MS",null,"AZ","NY","MI","OH","IN","NY","TX","MS","OH","MN","VA","FL","OR",null,"CO","OH","IA","NH","PR","TX","GA","NC","CA","NJ","TX",null,"NH","NJ","IL","NY","WI","CA",null,"AL","CA","TX","OR","FL","CT",null,"IL",null,"CT","MA",null,"UT","NY","OR","CA","CA","MD","NY","MI","CA","NY","PA","MD","PA","KY","FL","NY","PA","PA","OH","WI","TX",null,"CA","CA","VA","WA","CA","CT","CA","SC","TX","GA","IL","WI","MA","CT","GA","FL","TX","MN","NY","MA","WI","NC","IN","IL","NY","TX","TX",null,"NJ","WA",null,"CT","OH","MA","MA","FL","AZ","CA","OH","CT","TN","CA","NC","GA","CA","KY","AZ","IL","CA","ME","NM","CO","NY","WA","NJ","NY","CA",null,"FL","SC",null,null,"ND","MA","MI","GA","CO","TN","AZ","FL","MA","MI","IL","CA","OK",null,null,null,null,"IL","MA","CA","NY","PA",null,"FL","FL","CO","AZ","IL","WI",null,"IN","NJ","CT","WV","WA","CA","NY","CA","NY","FL","MI","CA","MA","NE","UT","IL",null,"NY","AR","NY","CA","NJ","CA","PA","PA","MO","NY","CA","FL",null,"NY","MA","CA","NY","TX","NY",null,"IL","NC","CT","PA","CA","WA","WI",null,"AZ","KS","TX","FL","TX",null,"NJ","NY","FL","IL","CA","CA","CA","WY","MO","OH","PA","CT","MD","TX","VT","NJ","FL","FL","CA",null,"TX","CA","UT","MI","NY","OH","MO","NY",null,"CO",null,"FL","CA","NJ","PA",null,"NH","CA","SC","CA","SC","MI","MN","CT","ID",null,"PA","OH","MD","CT","MD","VA","MS","UT","SD","MA","NC",null,"NJ","PA","AZ","FL","CA","NJ","CA","WI","NY","PA","NY","SC","NJ","MO","MA","IL","NY","FL","CA","TX","PA","WA","NY","CA","CO","MI","KY","CA","CA","IL","ID","NY","NC","TN","OR","MN","MA","AR","CA","AL",null,null,"AZ",null,"NC","NY",null,"CA","TX","NC","NV","TX",null,"NY","IA","MN","TN","NJ","MA","NY","WV","NY","VA","RI","MI","OR","WI","KY","CA","IL","MA","OR",null,"AL","NJ","FL","TX","OK",null,"MO","CA","CA","DE","MI","IA",null,"MA","MD","IL",null,null,"OH",null,"MN","IL","LA","WA","CA",null,"MN","NY","TN","CO","IL","CO",null,"OR","AR","FL","NJ","MI","IN","NY","PA","MO","CO","KS","MS","VA","FL","CA","TN","NY","GA","TX","TX","KY","CO","NY","CO","MN","CA","TX","NY","MI",null,null,"NH","MD","MA","NY","CT","UT","NY","RI","IL","OR","OH","MD","VA","NY","MD","PA","IL","WA",null,null,"GA","CA","SD",null,"DC","PA","CT","MA","PA","NC","NV","NY","KY","AZ","WA","CO","NJ","MA","SC","PA","OR","FL","TX",null,"NY","MI","FL","UT","TN","KS",null,"NV","NC","TN","CA","TN","CT","MA","MA","MD","AZ",null,"CA","CA","MA","NY","ID","MD","CA","WA","OH",null,null,"MD","DE","MO","CA",null,"NY","IL",null,"CT","IA","TN","FL","OH","FL","MD","OR","MD","IL","WA","OK","CA","MN","CA","OR","GA","PA","MA","NY","NE","CA","CA","PA","OH","OH","MA",null,null,"FL","NY","KY","OH","CA",null,"CO","IA","WA","NY","AZ","VA","FL","AR","VA","CA","CA","DE","NJ","NY",null,"FL","FL","CT","NY","FL","NC","FL","NY","NJ","OH","CA","NC","GA","FL","FL","TX","MD","PA","OH","MA","NY","KS","KS","CA","CA","MN","MA","MA","CA","CA","TN","CA","UT","CA","MN","WA","CT","NC","CA","CA","CA","NC","OR","NY","FL","NC",null,"TN","UT","CO","TX","WA","VA","TX","VA","AZ","MA","CA","AL","PA","TN","TX","CA",null,null,"CO","NE","NY","CA","FL","TX","CA","CA",null,null,"MD","MN","FL","NY","AZ","RI","CA","NY","LA","TX","CA",null,"MN","NE","CA","SD",null,"MA","DE","MO","AL","DE","MI","NC","OH","TX","NY","NY","NJ",null,null,"NY","FL","AZ","NY","NY",null,"VA","GA","GA","NY","CO","NC","MA",null,null,"FL","IL","CA","NC","IL","PA","NY","VA","AL","KS","VA","KY","MA","CA","NY","MA",null,"MA","MD",null,"DC","NJ",null,"NY",null,"VA","OH","FL",null,null,"TX","CA","FL","CT","NJ","AZ","MA","NY","CA","VA",null,"CA","IL","IL","TX","HI","NY","TN","NY",null,"FL","CA","IL","FL","CT","CT","NY","NY","GA","NC","KS","CO","CO","TN","CA","VT",null,"GA","MI","NV","NY","NJ","CA","CO","VA","NY","FL",null,"NC","MI",null,"NM","IA","NY","TX","MN","PA","MD","UT","KS","CO","NY","NC",null,"FL","MA","NY","VA","TN","TX","NJ","CO","NY","NH","NY",null,"NY","NY",null,"NJ","CA","TN","TN","CA","NM","VA","MA","CT","NY","FL","MD","OR","KS","MN","TX","FL","CA","CA","PA","FL","NY","MS","CA","TX","OH","NY","AK","NY","KY","TX","FL","NY","VA","NC","WI","FL","ME","NC","FL","PA","NV","CT","AK","CO",null,"PA",null,"UT","MO","CA","IL","PA","TN","HI","CA","MA","NY","NY","CO","NY","NY","NY","TX","NY","NJ",null,"NJ","IN","NY","MA","CA","CA","CA","NY","OH","CA","MI","WA","AZ","MA","NY","CA","KS","CA","CA","OK","FL","CT","NY","CT","MN",null,"OH",null,"TX","WI","NJ","DE","CO","NY","NY","TX","UT","CA","NC","HI",null,null,"IA","NY","NY","CA","CA","PA","HI","IL","TX","TN","IL","MA","CA","NH",null,"CA","NY","FL","PA",null,"NC","PA",null,null,"NY","TX","VA",null,"NY","NY","CA","IL","CA","AZ","TN","PA","NY","CA","CA","IL","MI","MI",null,"NY","IL","NY","TX","GA","WI","NY","RI",null,"LA","NY","NY",null,"GA","GA","NY","MD","NY","TX",null,"NY","CA","NH","NY","PA","NY","NY","CA",null,"NY","NY",null,"MI","MO","NY","NY","NY","NY","NY",null,"CA","NY",null,"CA","NJ","NY","NY","NY","NY",null,"NY","VA","NY","NY","FL",null,"IN","NY","FL","NY","NY","NY","CA",null,null,"CA","TN","NY","MS","NY","NY","NY",null,"CA","CA","CO","IL","CO","NY","NY","NY","NY","TX","CA","IL","TN","NY","NY","WY","NY","MA","FL","CA","CO","TX","FL","NY",null,null,null,"TN","MA",null,"NJ","PA","NJ","GA","NY","NY","NY",null,"IN","OH","NY","NY","IL","MN","VA","GA",null,"NY","CA","NJ","PA","NY","NY","NY",null,"WA","NY","CA","WA","NY","NY","PA","NY","TX","TX","NY","IA","CO","MO","MA","NY",null,"TN","IN","DE","MA","NY","NY","IL","CA","NY","MI","NY",null,"NJ","NY","NY","WI","CT","NY","NY","MO","FL","NJ","VA","WA","NY","IL","NY","NE","NY","FL","NY","WA","IL","NY","CO","WI","NY","IL","WY","CA",null,"VA","CT","NY",null,"AZ","TX","NY","FL","CA","MA","IL","CT","NY","CA","NY","NY","NY","MD","NY",null,"TX",null,"OH",null,"NY","NY","ID","NY","IN",null,"CA","NJ","NY","NY","NY","NY",null,"NY","OH","NJ","MN","GA","IL","CA","CA","NY",null,"NY","IN","CA","PR",null,"VA","NY","NY","NJ","NY","UT","NY","NY","KS","NJ","NY","NY","NE","FL","CT","CO","CA","SC","NY","NY","NY","NY",null,"NY","NY","WI","NY","NY","DE","CA",null,"NY","NY","ME",null,"CA","CO",null,"NY",null,"FL","NY","NY","ID",null,"MI","FL","UT","NY","AL","NY","CO","MA",null,"NY","NY","GA","NY","NY","PA","CA",null,"CT","PA","NY","NY","NY","NY","CO",null,null,"NY",null,null,"CA","OH","NY","ME",null,"NY","NY",null,null,"GA","WI","NY","CA","NY","NY","PA",null,null,"NY","NY","NY",null,"MA","TN","IL","WY","NY",null,"NY",null,"PA","PA","CA","FL","NY","IL","VA","NY",null,"NY","NY","NY","NY","NJ","NY","NY","CA","NY",null,"NY","LA","NJ","PR","NY","TN",null,"NY","NY","NY",null,"NY","NY","NY","OH","IL","NY","NY","NY","NY","OR","CA","WI","WA","MA",null,"TX",null,"GA",null,null,"NY","CA","NY","NC","NY","NY","NY","KS","NC",null,"NY","NY","NY","NY","TX",null,"PA","ME","NY",null,"KY","NY","PA","CA","NY","CA","IL","NY","NY","NY",null,"CA","NY","CT","MA","MD","TN","FL","TX","IL","MA","NY",null,"NY","CT","NY",null,null,null,"NY","NY","NY","CA","NY","NY","MA","NY","CA","NC","NY",null,"NY","NY","NY","NV","NY","NY","CT","FL","TX","NY",null,"PA","NY","CT","TN","NY","TN","IL","CO","NY","MA","OR",null,"VA","NY","NY","MA","NY","NY","CT","SC",null,"NY","NY","NY","NY","NY","NY","NY","NY","OH","WI","NY","NY","CA",null,"NY","NY",null,"NY","NY",null,"NY","NY","NY","NY",null,"NY","TX","NY","CA","NY","CA","TX","NY","NY","TN","MA","NY","NY",null,"NY","CT","NY","NY",null,"NY","NY",null,"NY",null,"GA","NY","NJ","NY","LA",null,"NY","PA",null,null,"FL","MO","PA","CA","NY",null,null,"NY","FL",null,"MA",null,"FL","NY","CA","NY","NY",null,"NY","TX","NY","CA","FL","NY",null,"NY","CA","NY",null,"NJ",null,"NY","NY","IL","CA","NY",null,"FL","NY",null,"CA","SC","CA",null,"NY",null,"TX","CA",null,"PA","CA","MA","MI",null,"NY","NY","FL","NY","NY",null,"NY","CA","NY","NY","NY","NY","NY","CO",null,"CT","CA","NY","NY","NY",null,"NJ","NY",null,"NY","NY","CA",null,"NY","NY",null,"IL","NY","KS","NY","CA","FL","OH","NY","NY","NY","NY","CA","NY","NY",null,"TX","NY","NY","VA","NJ","TX",null,"DC","AZ","NY","NY","NY",null,"NY","PA","NY","NY","NJ","NY","NY","NY","NY","NJ","KS","NY","CA","PA","TX","NY","NY","WY","NY",null,"NY","IL","TX",null,"CT","NY","WA","CA","NY","NY","NY","NY","NY","NY","NY","NY","NY","NY",null,null,"NY","NY","NY",null,"CT",null,null,"IL","NY","NY","MN",null,"NY","IN","IL","TX",null,"NY","NY","NY","CA",null,null,null,null,"OR","NY","NY","CA",null,"NY","NY",null,"NY","NY","NY","NY","NY","NY","AR","NY","NY","MI",null,null,null,null,"TX","IL",null,"NY","CA","PA","CT","CA","NY",null,"NY","NY",null,"NC","NY",null,null,"NY","NY","NY","NJ","NY","DC","NY","NJ","IL","MD","NY","NY","NY","CT","CO",null,"NY","NY","NY","MN",null,"CA","FL","NY",null,"CA","NY","CA","NY","NY",null,null,"NY","MN","NY","NY","NY","NY","NY","NY","FL","MO","MD","IL","CA","NY","PA",null,"NY","NY","NY","CA","IL","CA","TX","NY",null,null,"WY","NY",null,"NY","NY","OH","NY","NY","TX","NY","NY","WY",null,"NY","NY","MA","NY","NY",null,"MN","NY","NY","FL","NY","CA","NC","LA",null,"VA","PA","NY","NY",null,"NY",null,"WA",null,"WI",null,null,"NY",null,"VA",null,"VA","CT","PA","FL","VA","TX","FL","DC",null,"WA","NY",null,"NY","NJ","MA","CA","CA",null,null,null,"NY","NY","NJ",null,"CO",null,"TX","KS","DC","VA","NJ","NY",null,"NY","PA","KS",null,"GA","CA",null,"NJ","NJ","NY",null,null,"WA","PA",null,null,"OR","CO","OR","TX","NY","NJ",null,"CA","VA",null,null,null,null,"MD","TX","NY","IL",null,"FL","NY",null,"CT","VA",null,"LA",null,"NY","AZ","CA","CA","PA","GA","WY","WY","AL","IL","CA",null,"NC","NY","MD","OH","FL",null,"CA","NY","MA",null,"TX","NY","DC","WI",null,null,null,null,"FL","FL","CA","NY",null,"PA","IL","NY","CO","CA","IL","CA",null,"PA",null,"NY",null,"MO","NY","NY",null,"NY","TN",null,null,"AL",null,"NJ","NC",null,"MA","PA","NY","FL",null,"NY",null,"MD","FL","NY","NY",null,"NY",null,"WA","FL","WI",null,"CA",null,"KS","NY",null,"OK","CA","KS","CA","PA","NY","LA","NY","CO","MA","TX","WI","LA",null,"WA","FL","CA","CA","MN","VA","NY",null,"NJ",null,"CA","CA","NJ","NY","NY","NY","WA","MA","WI","PA","FL","NY","TX","TX","PA","DC","WA","NE","WI","CO","TN","CO","MA","SC",null,"IL","NY","MO","NY",null,null,"CA",null,"CO","WY",null,"GA","CA","WY",null,null,"NY",null,null,"NY",null,"CO","CO",null,"NY","CA",null,"FL",null,null,null,"AZ","NY","WI","CA","CA","PA","CA","AR","GA",null,null,"GA",null,"DC","NY","NY","CA","NY","CA","NY",null,"WA","FL",null,"VA","KS","PA","TN","IN","CO","CA",null,null,null,"NY","IL","CA",null,"GA","KY",null,null,"DC",null,"GA","OH",null,"TN",null,"CA",null,"NY","WY","NJ","TX",null,"NY","UT",null,null,"CA",null,null,"IL","NJ","NM","GA","IL","NV","CT","CT","MI",null,null,null,null,"IL","TX",null,"NY","CA",null,"NY","TX","MD","NV",null,"PA",null,"NY",null,"NY",null,"WY","AL","PA","PA",null,"CT","TX","NY","NY","CA","NJ","CA","MA","NY","PA",null,null,"KS","TN","NY",null,"CA","CA","NY","WA","VA","KS",null,null,"CA",null,"CA","FL",null,null,null,null,"KS","CA","NY","IL","MA",null,"NY","CA","IL",null,"TX","NY","MI","MD","NY","IL",null,"KS","MO","IA","TX","NY","MD","IL",null,"CT","CA","NY","MI",null,"CA","NY",null,"TN","VA","NY","FL","NV","GA","CA",null,"VA","NV","NY","IL","FL",null,"FL","FL",null,"MA","TN","TN","NY","CT","NY","KS",null,null,"IL",null,"MN","TX",null,"WA","GA","NY","NY",null,"NY","NY","NY","MO","VA",null,"MI","CT","TX","TX","IL","MD","FL","MA","OH","VA","OH","NJ","OR","CA","GA",null,"MN",null,"IL","FL","NY","CA","KS","CA","NH","WI","NY","NY","CA","MD","WY","CT","MN","CO","NY","MI","NY","CA","FL","CT","CA","OH","NJ","PA","OH","IL","GA","GA","MA","MA","WI","MT","OH","FL","NY","WA","PA","VA","GA","TX","MD","FL",null,"MD","CA","IL","CO","TN","IN","PA","TX","CA",null,"CT","IL","IN","NY","CA","CA","TX","PA","CA",null,"NY","PA","NY","NY","CA",null,null,null,"NY",null,"NY","CA","AZ","WI",null,null,"MA",null,"MO",null,"CA","FL",null,"WA","CO","CO","NY","NY","NY",null,null,null,"UT",null,null,"NY",null,"NY","WY",null,"MA","IL","PA",null,null,null,"FL","CA","CA",null,"MN","WA",null,"FL","TX","KS","NY","PA","CA","TN","TN","FL","MA","IL","KS",null,null,"LA","CA","CO",null,null,"CT","CA","CA","NY","IL","NJ",null,"IA",null,"CA","IL","GA","OK","NY","WA","FL","NC","CO",null,"CA","NY","IL",null,"WI","OR","CO","CA","NY",null,"MO","IL","TX","NY","TN",null,"CO","IL",null,"DE","MA","NY",null,"NY",null,null,"TX",null,null,null,null,"WY","TX","NJ",null,null,null,"WY",null,"OH","CA","OH",null,null,"NE","NJ","NY","CA","MA","CO","NY","MD","IL","NY","MN","OH","FL","NJ","AZ",null,"OH","FL","CA","NJ","TX","CA","MI","TX","NJ","NY","MN","PA",null,"CA","CA","CT","KS","WI","MA","NY","WA","OH","PA",null,"TN",null,"IL",null,"CT","CO","MA","CO",null,null,null,"CA","MD",null,"TX","MI","CA",null,"OH","CT","VA","FL","NY","NY",null,"FL","IL","GA","NC","IL","CA",null,"OR","NY","TX","KS","IL","PR",null,null,"DE","IL","FL","MA","MA",null,"IN","OH",null,"NY","CA","MA","CO",null,"AZ","CA",null,"CA","NY",null,null,"CA",null,"NY","CT","CA","NY","AZ","FL","WA",null,"CA","NY",null,"TX","FL","MI","MA","MA",null,"CA","NY","FL","OH","CA","IL",null,"CA","NY","NY","CA","TX","NY","NY","NY","MN","WA","NY","CA","NY",null,"CA","WA","CT","GA",null,"FL","MA","AZ","CT","NC","TX",null,null,"NH","CA","TX","CA",null,"CT",null,null,null,"CA","NY","CT","NY",null,"TX","CO","CT","CT","CA","GA","WY","MA","CT","FL","CA","KS","KS","KS","KS","GA",null,"FL","CT","NJ","IN",null,"NY","AZ","NY","TN",null,null,null,null,null,null,"NY","NJ","TX",null,"NY","NY",null,"NY",null,"NY","NY","NJ",null,"IL","WY","TX",null,"NJ","NJ","TX","WY","NY","NY",null,"CA",null,null,"WY","WY","NY","NY",null,"NY",null,null,"NY",null,"KY",null,null,"NY","PA","NY","NY",null,"NY",null,"FL",null,null,null,null,null,"NY","NY","NJ",null,"NY","NY",null,null,"DC",null,null,null,"MA",null,null,"CA",null,null,"NY","CA","NY","WI","MD","IL","CT","CA",null,"CA",null,"CA","NY","MA","MO","MD","NY",null,"ME","OR","CO","DC","WA",null,"CO","CO","NJ","MA","IN","MI","MA","FL","NJ","CA","MA","MD",null,"NV","MI","NC","CA","KS","FL","NY","CT","UT","CA",null,null,null,"NJ",null,null,"FL","CA",null,null,"NY","IL",null,"CA",null,"NY",null,null,"CA",null,null,null,"PA","NY",null,"NY","KY",null,"CA","CA","NC","NY",null,"OK",null,"NJ",null,"NJ","NJ",null,"MA",null,null,null,"MA",null,null,null,"NY","NJ","FL","SC","IN","PA","TX","NY","CA","MD","MA","IL","CA","MI","CA","TX","MI","OR","FL",null,"MN",null,null,"NY",null,null,null,"IL","NY","NE","GA","NY","NY","IA","CO","MD","MA","NY","MA","MD","FL","IL","IL",null,"NY","NJ","CA","MN","CA","MD","MA","GA","CA","CA",null,"NY","MI","NY","MA","CA","CA","CA",null,"GA",null,null,null,null,"DC",null,"CA",null,"NC",null,"MA","NY",null,"CA",null,"CA","WI","CA","NY","VA","CO",null,"CA","UT","CA","TX","CA","MA","CA",null,"IL","CT","CA",null,null,"NY",null,"MN",null,"TN",null,null,"CA","NY","CA",null,"MN","MA","NY","CA","CA","NY","CA",null,"CT","NY","NY","CA","NY",null,"CA","CA",null,null,null,"MD",null,"PA",null,"NY","CA",null,"OH","TX",null,"TX","TN","NY",null,null,"MA",null,null,null,"MA",null,"MA",null,"WA","CA",null,null,"CA",null,"NY","NY","IL",null,null,"CA",null,"DC","CT","PA","MD","PA","NY","NJ",null,"FL","CA","CO",null,"CA","CO","CA",null,"NY",null,null,null,"NY",null,"CA","NY",null,"WA",null,null,"IL",null,"DC","NY",null,null,null,"WI","GA","CA",null,"KS",null,"NY","WI","MD",null,null,null,"IL",null,null,"NY","OH",null,null,null,"NY","NY","GA","CA",null,null,"CA","CA","MA",null,null,"CT",null,"VA",null,null,null,"NY",null,"MI","CA",null,"CA","MD",null,null,"CA",null,"MA",null,"CA",null,null,null,null,"NY",null,"MA","MD","CA","CA","CA","TN",null,"NY","IL","NY","MA","VA","MA","GA",null,"WI",null,"CA",null,null,"MA",null,"MA",null,"NY","NY",null,null,null,"LA","CT","CO",null,null,"UT","TX","TN",null,"MA","TX",null,null,"CA","NY","FL","CA",null,"CT",null,null,"TX","NY","MA",null,"CA","MD","CA","NY",null,"NY","NY",null,"IL",null,"CA","CT","CA","FL",null,"CA",null,"CA","CA","CT",null,"NY","CT",null,null,null,"CA","IL",null,"TX","CA","CA",null,"MA","NY",null,null,"UT","NY","NY",null,null,null,"KS",null,"CT",null,"WA","CT",null,"CA","MA","MA","MN",null,"CA",null,null,null,"CA",null,"NY","TX",null,"NY",null,"MA",null,null,"FL","OH","TN",null,"NJ","NY",null,"NY","CA",null,"NY","WI","IL","TX","CA","FL",null,null,"CT","NY","TX","MI","NY","NY","CA",null,"CA","CA","CA",null,"CA","NJ",null,null,null,"GA","NY","CA","CA","NY",null,null,null,null,"FL",null,null,null,"CA","NY","VA","NY",null,"LA","CA","TX","CA","CA",null,"CA","NY",null,null,null,null,"NC",null,"NY",null,null,"NY","NY","NY",null,null,null,null,"CA",null,"GA","NY","FL","NY","MA",null,"CA","FL",null,null,null,null,"NY","MI",null,"NY","CA",null,"MA",null,"MA",null,null,null,null,"CT",null,"MI","CA","NY","CA",null,"MD","FL",null,null,"NY",null,null,null,null,null,null,null,"CT","CA","MA",null,"CT",null,null,"CA","IL","CA",null,"CT",null,null,null,null,"MI","NY","CA","IL",null,"CA","CA",null,"VA","NY","TX","NY","MI","CA",null,null,"NY","CT",null,"CT","MI",null,null,null,null,"NY","NY",null,null,null,null,"NC","CA","CT",null,null,null,null,"NY","NY",null,"GA",null,null,"TN","NY","OH",null,null,"CA",null,null,null,null,null,"MA","NY","OK",null,null,null,"IL","NY",null,null,"CA",null,"TX","CA","CO","FL","CA",null,null,"CA",null,null,"CA",null,null,null,null,"TX","MD","VA",null,null,"NY","CA",null,null,null,"CA","CA","CT","WY",null,null,null,"NY",null,null,"MA","PA",null,"NY","NY","CA",null,null,"NY",null,null,null,"WI",null,null,"CA","OH","NY","IL","FL","DE","NY",null,null,"CT",null,null,null,"NY",null,"CA",null,"NY",null,null,null,"CA","DC","IL","IL","NY","NJ","PA","CA","CT","MA",null,null,null,null,"PR","NC","NY","CA","CA",null,"NY",null,"CA",null,"NY","FL",null,"MA",null,null,"VA","UT","NY",null,"CA",null,null,"CA",null,null,null,"MO",null,"NY",null,"NY","NJ","NY","NY","NY","CA",null,null,null,null,null,null,"UT","TX","MA","FL","CO","TX","MA",null,null,"TX",null,null,"NY",null,"CA","CT","CA","NY","MA","NY",null,null,"WA",null,null,null,"CA",null,"IL",null,null,null,null,null,"CA",null,null,null,null,"CT",null,"NJ","NC","NY","NY","TX","TX",null,null,null,null,null,"CA","CA",null,null,"CA","CA",null,null,"NJ",null,"VA",null,"CT","CA","NY",null,"MA","CA","CA","CA",null,"IL",null,"NY","CA",null,"IL",null,null,null,"MD",null,null,"PA",null,null,"MI","NY","NY","NY",null,"CA","MA","NY",null,"NY","CA","NY","NY","DE",null,null,null,"NY","VA","HI","CT",null,null,null,"CA",null,"NJ","NY","TX","VT",null,null,null,"CA","WA","CA","WA","MI","CA",null,"NY",null,"MA",null,null,"NY","FL",null,"CA","MA","WA",null,"CA","NY","MA","CA","CA","CA","IL","NY","CA",null,"GA","CA","CA",null,"NY","CA","CA",null,null,"CT",null,null,"CA","IN","CA","MN",null,"FL","CA","CT",null,null,"CA","CA",null,"OR","NY",null,null,null,"NY","CA","NY","CA",null,"FL",null,null,"NY",null,"NJ",null,null,"MD","CT",null,"NY","MA","NY","OH",null,"CA","CA",null,"NY","IL","CT",null,"CA",null,"PA",null,"NY","CA","CA",null,"CA","NY",null,"MA",null,null,"TN","NY","CA","CA",null,null,"CA","CA","CT",null,"CA","PA",null,"NY","TX","MI",null,null,"NY",null,null,"MI",null,"NY",null,"TX",null,null,null,"CA",null,"MO","NY","TX",null,"CT",null,null,"VA",null,"NY","NY",null,null,null,null,null,null,null,"WI",null,null,null,"PA",null,"NY",null,null,"TX","MA","TX","MD",null,"CA",null,"NY",null,null,"NY",null,"MA",null,"MO","MI","IL","NY",null,null,"IL","TX",null,"CA","NJ",null,"MA","FL","NY","PA",null,null,null,null,"CA","CA",null,"CA",null,"NY","CA",null,"NJ","MA","NY","MA","NY","NY",null,null,null,null,"CA","OR","WI","UT","CT",null,null,"CT",null,null,null,null,"MD","NY","NC","NY","NY","NY",null,null,"MI",null,"MN","CA",null,"MA",null,null,null,null,null,null,null,"MA","NY",null,"NY","MA",null,"NY","GA","WA","CA",null,null,null,"MA",null,"NY","MD","NY","NY",null,"PR","NY",null,"WI","NY","NY","OR",null,"SD",null,null,null,"PA",null,null,null,null,"CA",null,null,null,"CA","PA","CA",null,"CT",null,null,"CA","NY",null,null,null,null,"NY","TX","GA","IL",null,null,"CT",null,"IL",null,"MA","WA",null,"CA",null,null,"NY",null,null,"PA","MA","DC","NY","CT",null,null,null,"CA","NY",null,null,"MA",null,"TX","NY","TX",null,"MA","CA","NY","NY",null,"CA","CA","OR",null,null,null,null,null,null,"CA",null,"CA",null,"NH",null,null,"OH",null,null,null,"MA",null,null,null,"CA","CA","MA","NY","OH",null,"MO","CA","CA",null,"IL",null,null,null,"CA","NY","WA","VA",null,null,null,"PA","NY","MA",null,null,null,null,null,"NY","TX","MA",null,null,null,"NJ","NY","MA",null,"CA",null,null,null,null,"NY","NY","MA",null,"NY","IL",null,"VA","TX",null,null,null,"MA","CT","CA","CA","OH","MN","CA","CA",null,"MA","IL",null,"MO","IA","NY",null,"PR","FL","NY","NY",null,"IL","CA",null,"NY","ID","CA",null,"CA",null,null,"CA","NC","NY","NY","CA",null,"NJ",null,"CA","NY","IL",null,null,null,null,null,null,"NJ","FL","IL","CA",null,"NY","CA",null,"CA","NY",null,"NY","NY","CA","IL","OH",null,null,"MA",null,"IL",null,null,null,"MD",null,"IL","TX","CA","NY",null,null,null,"TX","NY",null,"CT","NY","CA","NY",null,"TN",null,"OH","IL",null,null,null,null,"CA","NY","OR","MA",null,"IL",null,"CA","MA",null,"CA","MA",null,"CA",null,null,null,null,null,null,null,"TX","IL",null,null,null,null,"CT",null,null,"TX","CT","CA","FL",null,null,null,null,null,null,null,null,"VA","NY","NY",null,null,null,"GA","TX",null,null,"TX","CA","NY",null,"OH","NY","DC","NY","CA","NY","NY","NC",null,"CT",null,null,"CA",null,null,"NY","MA",null,"NJ",null,"CA","TX","NY","NY","MA","CA","NC",null,"NJ","PA","CA","CT",null,"CA","FL",null,"CA",null,"IL","TX",null,"CA","IL","CA","NY","TX","TX","NY",null,"CA","NY","NC",null,"TX","CA","CA","CA",null,"IL","NH",null,"NY","OR",null,null,"CA","MA","CA",null,null,"WA",null,null,"MA","CA","CA",null,"NY",null,null,"VA",null,null,"CA","TN","WI","TX",null,null,"CA",null,"CA","NY",null,"IL",null,null,null,"CA","CA","CT","NY","CA","CT",null,null,"MA","FL",null,null,"CA",null,null,"WI","DE",null,"MA",null,"TX",null,null,"UT","NY","IA",null,null,"MA",null,null,"NY",null,null,null,null,"TX","MD",null,null,null,null,null,"NY",null,"NY",null,"NY","CA","CA",null,"GA","NY","WI","CA",null,null,null,"WA","IL",null,"MA","PA","CO","CA",null,"MA",null,null,null,null,"NY","CA","LA",null,"MD","CA",null,null,"NY",null,"NY","CA",null,null,"MA",null,null,"CA","TX",null,null,"NY","CA","MO","IN","CA","NY","MD","CA","PA",null,"CA","CA","CA",null,"CA",null,"NY",null,null,"NY","FL",null,null,null,null,null,"CA",null,"TX",null,null,"CA","NY",null,"CA","NJ",null,null,null,null,"CT",null,"NY","NC",null,"CA","CA","CA",null,"NY",null,"PA","TX",null,"FL","CA",null,null,"NY",null,null,"NY",null,null,null,"TX","NY","TX","CA","CA",null,"MA",null,null,"NY","NY","FL",null,"IN","CA","CA","OH","NY","NY","CA","CA",null,"NY",null,"CA","IL","CA","CA",null,null,null,"MA",null,null,"CA","NY","MA","TX","DC","NY","NY",null,"MA","MD","CA",null,null,"FL",null,null,"NY","CA",null,null,"PA","NC","CA","CO","MA",null,"TX",null,"CA","CA","CT","CA","CA",null,null,"NY",null,null,null,null,null,null,null,null,"CA",null,null,"CA",null,"PA",null,"CA","CO",null,null,"CA",null,"MI",null,"TX","VT",null,null,null,null,null,null,null,"CA",null,null,null,null,null,"CA",null,null,"LA","CA","WA","CA","CT","NY",null,"CA",null,"TX","CA",null,"CT",null,null,null,null,"FL","NY","NY","IL","NY","NY",null,null,"NY","TX","PA","CA",null,null,null,"MA",null,"MN",null,null,"NY","MA","CA","CA","CA","NY","CA",null,null,null,"CA",null,null,null,"TX","IL","CT",null,null,null,null,"PA","NY","CA",null,"NY","IL",null,null,"CO","IL","MA","CA","NY","NY",null,null,null,"OH","IL","NY",null,null,null,"CT",null,"NC","FL",null,null,null,null,"NY","TX",null,"GA","CA",null,"NY","NY","CA",null,null,"TN","MA",null,null,null,null,null,"NY","MA",null,null,"NY","CA","PA",null,"OH",null,"CA",null,null,null,"CA",null,"CA",null,"CA","CA",null,"NY","NY",null,"TX","CA","PA",null,null,"MO",null,null,"MA","VA","OH","IL",null,null,null,null,"NY",null,null,"NY","UT","MN","MI",null,"NY","LA","PA","NY","PA","TX","CA",null,null,"NY",null,"TX",null,"CA",null,"CA",null,"WA","CA","TX","CT",null,"TX",null,null,null,null,null,"CA",null,"MA","CA",null,"NC",null,"GA",null,"MA","OR","TX","CA",null,null,"NJ","NY","MA","CA","CA",null,"MN",null,"SD",null,null,"TX",null,null,"FL",null,"NY","NY","NY","MA",null,"PR","CT",null,null,null,null,null,"MI",null,null,"NY",null,"CA","NJ",null,"NY","DC","NY",null,"TN","CA","OH",null,"MA","MA","FL",null,null,"FL",null,"WA",null,"CT","IN","TX",null,null,"IL","CA","TX","NY",null,null,"CA","NY","NY",null,null,"MN",null,"CA","CT",null,"NY",null,"DE","CA",null,null,"CA","CA","CO",null,null,null,"CA","TX","NY","CT",null,"TX",null,"MN",null,"CA","NJ","NJ",null,null,null,"CA","MD","NY","CA","MI","KS",null,"CA",null,"CA","MI",null,"NY","PR","CA",null,"CA","CA","OH",null,"FL","VA",null,"WI","NY","NY",null,"FL","NY",null,"UT","PA","OR","MN",null,null,null,"MA","TX","NY",null,null,null,"WI",null,"KY","MA",null,"NJ",null,"VA","CT","CA",null,"VA","AL",null,"MO",null,"CA",null,"VA","PA","DC",null,"NY",null,null,"CA","CA",null,null,"NY","CA","NJ",null,"TX","GA","MA","CA",null,null,null,"TX","GA","MA","VA","NY",null,"IL",null,"IL",null,null,"NY","MA","CA",null,null,"CA",null,"NJ","NY",null,"CA",null,null,"IL","NY","PA",null,null,null,null,"MA",null,"CA","CA",null,null,null,null,"CA",null,"MA",null,null,"TX","NY","NY",null,null,"NY",null,"CT",null,"NY","TX","CA","MA","PA","CA","NH","FL",null,"AL","NJ","NC","VA","DC",null,"NY","NY",null,"CA",null,"MA","CA",null,"CA","NY","CA","KS",null,null,"NY","CA",null,null,"PA",null,"GA",null,"CA","TX","NY","PA",null,"NY","MA",null,null,null,"NY","FL","CA","NY",null,"OH",null,"CA","MA","MA","CA",null,"CA","CA",null,"WI",null,"PA",null,null,null,null,null,null,"CA",null,"TX",null,null,null,"DE",null,"MN","CT",null,null,"CA",null,null,null,null,"CA","CA","TX","NY",null,"MO","CA","PA","GA",null,"PA","FL","CA",null,"CA",null,null,null,null,null,"MA","AL",null,null,"FL",null,"MA",null,"OH","NY","CA","CA","CO",null,null,null,null,"NY",null,null,null,"MA",null,"CA","PA","MI","OH",null,"CA","NY",null,null,null,null,null,"NY","NY",null,null,"MO","WI",null,null,null,"TX",null,null,"FL","CA",null,null,"CA",null,null,null,null,"CA",null,"CA","NY","KS",null,"FL","NY","CA","CA","NY","CT",null,"CA","TX","MA",null,null,"IL","WA","NY",null,null,null,"CA","DC","CA",null,"MA","CA",null,null,"MA","GA",null,"NY","CA","NY","CA",null,null,null,"CA","NY",null,null,null,"UT","CA","OH",null,"CA","NY",null,null,null,"CA","NY","VA",null,"NY",null,null,null,"NY","CA",null,"FL",null,"CT","GA",null,"CA","MA",null,null,"TX","CA",null,null,"NY","NY","MA",null,null,null,null,"NM",null,null,null,null,null,"IA","MA","TX",null,"NY",null,null,null,null,null,"TX","SD",null,null,"NY","NY",null,"CA","IL","NJ","OH",null,"WA",null,"VA","NJ","AZ","CA","NY","IL","CA","CA",null,"MA",null,"CA","CA","MA",null,"NY",null,"NY","WA","NY",null,"CA",null,"FL",null,"NY","FL",null,null,null,"NY","MA","NY",null,"CA",null,"NY",null,null,"CA","OH","NY",null,"CA","FL","MA",null,null,"CT",null,null,null,null,null,"CT","NY","CA",null,"NY",null,"CA","NY","FL",null,null,"NY","OH","NY",null,null,"OH","CO","MA",null,"CA",null,"NY",null,"GA",null,"MA","MD","NY","NY","FL",null,null,null,"NY","CO","TX","NY",null,"CA",null,"CA",null,null,null,null,"CA","CA",null,"CA","IL",null,null,null,"NY","VA","NY",null,"CA","MA","NY","NY",null,null,null,"MA",null,null,"CA","CA",null,null,null,null,"KS","CA","CA","GA","CA","NY","TN","MA","CA",null,"MA",null,null,null,null,"IL",null,null,"CO","NY",null,"CA",null,"TN",null,"MO",null,null,"CT","NY",null,null,null,null,"VA","TX","CA","CT","NY","CA","NY","IL",null,"NY",null,null,"NY",null,null,"TX","CT",null,"IL",null,"NY","CT","CO","WA","NY",null,"NY","PA",null,null,"CA","TX",null,"CA",null,"CT",null,"NY","NY",null,null,null,null,"IN","NY",null,null,null,"IL",null,null,null,"NY","NY",null,null,"FL","CA",null,"NY",null,null,"NY","TX",null,null,null,null,"NY",null,null,"MA","CA","CA",null,null,"OK","MA","MO","CA",null,"PA",null,null,"FL","NY",null,null,"CA",null,"CT",null,null,null,null,null,null,null,"CA",null,"MA","NY","TN",null,null,null,"CA",null,null,null,"CA","OH","NY",null,"NY","CA","TX",null,"CA","CT","CA",null,"CT",null,null,null,null,"TX","OH",null,null,null,"CA","FL","CA","NC","CA",null,"PA",null,null,"CA","OH","TX","CA","CA",null,"TX",null,"CA",null,"MA","OR","NY","NY",null,"CA","CA",null,"MN",null,null,"VA","WA",null,null,"IL",null,null,"CA","MN","NY","NY","HI","MA",null,"PA",null,"NY",null,null,"IL","CA",null,null,null,null,null,null,"NY",null,"OK",null,null,null,null,"CA","CA","CT",null,null,"MA","NY",null,null,null,null,null,null,"CA","CA","CT","VA","CA",null,null,null,"MN","IL",null,"FL",null,"VA","MO","CT",null,null,"CA","DC","SD","MA",null,null,"TX",null,null,"IL",null,null,"MO",null,null,null,null,"CA","CA","CA","NY","TX",null,"MN","NY",null,"NY",null,"TX","VT","CA",null,null,null,"NY",null,null,"FL","MI","MN","VA",null,"CA","TX","NY",null,"WA",null,"GA","PA","TX","CA","CA",null,null,"NY","MA","WA",null,"TX","FL","VT",null,null,"CA","VA",null,null,null,null,null,"DC","CA","FL","NY","NY","WA","NY","CA","CA",null,null,null,null,"TX","CA",null,"MA","MA",null,"IL",null,null,null,"AL",null,null,null,"NY","CA","PA",null,"CA",null,"MA",null,"CA","WA","IL","CA",null,"TX","MA","CT",null,null,null,null,"CA",null,"MA",null,null,null,null,null,null,"OH","NY","NY","NY",null,null,null,"TX","NJ",null,null,"NY","MA",null,null,null,null,null,"CA","NY","TX",null,"CA",null,"GA",null,null,"CO","NY","KY",null,null,null,null,"NY",null,null,null,null,"NY",null,"NY","CA",null,null,null,"NY","CT",null,"CA",null,null,"MA","TX","CT",null,null,null,null,"TX","NY","CT","CO",null,"OH","CA",null,null,"FL",null,"MA",null,"MI","CA","CA",null,null,"NY","CA",null,null,"CA",null,null,"WA","CA","UT","TN",null,null,"MI","NY",null,null,"MN","WY","NY",null,null,"MA","GA",null,"CA",null,null,null,null,"NY",null,null,null,null,null,null,"NY",null,null,"NY","NY","CA","CA",null,null,"AL","NY","GA",null,null,null,null,null,null,null,null,null,"OR",null,"MN","NY","KS",null,null,null,"CA","TX","TN","PA","TX","FL",null,"CT",null,"NY",null,null,"MN",null,"CA",null,"TX",null,null,"MA","MI",null,null,null,null,"GA",null,null,"MD","CA","CT","MA",null,null,"WI","NY",null,"CA",null,"NY","NC",null,"CA","NY",null,null,"IL",null,"NY","NV",null,"WI","CT",null,"MA","IL",null,null,null,"TX",null,null,"NY","PA",null,null,null,null,null,"NY",null,null,"NY","VA",null,null,null,"NY",null,null,null,"NY","TX","CA","VA","CA","MA","DC","CA",null,"CA",null,"CA",null,"MD","CA",null,"OH","FL","CA","CA",null,null,"WA",null,"MI",null,null,null,"NY",null,null,"CA",null,null,"CA","NY","CA","NY","FL",null,null,null,"NY","NJ",null,"NY",null,"MA","MI","CT",null,"TX","CA","CA",null,"NY",null,null,null,null,"NY","NY",null,"CO",null,null,"CO","MA","CA",null,"NC",null,"MA","TX","IL","TX",null,null,"CT","CA",null,"WA","CA","NY","CA","MA"],"hasManagerFelonyPleaConviction":["FALSE","FALSE","FALSE","TRUE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","TRUE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","TRUE","FALSE","FALSE","TRUE","FALSE","FALSE","TRUE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","TRUE","FALSE","FALSE","FALSE","FALSE","TRUE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","TRUE","FALSE","FALSE","FALSE","FALSE","FALSE","TRUE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","TRUE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","TRUE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","TRUE","FALSE","FALSE","FALSE","FALSE","TRUE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","TRUE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","TRUE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","TRUE","FALSE","FALSE","TRUE","FALSE","FALSE","FALSE","FALSE","FALSE","TRUE","TRUE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","TRUE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","TRUE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","TRUE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","TRUE","TRUE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","TRUE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","TRUE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","TRUE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","TRUE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","TRUE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","TRUE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","TRUE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","TRUE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","TRUE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","TRUE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","TRUE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","TRUE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","TRUE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","TRUE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","TRUE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","TRUE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","TRUE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","TRUE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","TRUE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","TRUE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","TRUE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","TRUE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","TRUE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","TRUE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","TRUE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","TRUE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","TRUE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","TRUE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","TRUE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","TRUE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","TRUE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","TRUE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","TRUE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","TRUE","FALSE","FALSE","FALSE","FALSE","TRUE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","TRUE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","TRUE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","TRUE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","TRUE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","TRUE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","TRUE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","TRUE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","TRUE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","TRUE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","TRUE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","TRUE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","TRUE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","TRUE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","TRUE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","TRUE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","TRUE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","TRUE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","TRUE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE"],"hasManagerFelonyCharge":["FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","TRUE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","TRUE","FALSE","FALSE","TRUE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","TRUE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","TRUE","FALSE","FALSE","FALSE","TRUE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","TRUE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","TRUE","FALSE","FALSE","FALSE","TRUE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","TRUE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","TRUE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","TRUE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","TRUE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","TRUE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","TRUE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","TRUE","TRUE","FALSE","FALSE","FALSE","FALSE","FALSE","TRUE","TRUE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","TRUE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","TRUE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","TRUE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","TRUE","TRUE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","TRUE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","TRUE","FALSE","TRUE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","TRUE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","TRUE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","TRUE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","TRUE","FALSE","FALSE","FALSE","FALSE","TRUE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","TRUE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","TRUE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","TRUE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","TRUE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","TRUE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","TRUE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","TRUE","TRUE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","TRUE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","TRUE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","TRUE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","TRUE","FALSE","FALSE","FALSE","TRUE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","TRUE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","TRUE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","TRUE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","TRUE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","TRUE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","TRUE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","TRUE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","TRUE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","TRUE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","TRUE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","TRUE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","TRUE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","TRUE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","TRUE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","TRUE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","TRUE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","TRUE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","TRUE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","TRUE","FALSE","FALSE","FALSE","FALSE","FALSE","TRUE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","TRUE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","TRUE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","TRUE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","TRUE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","TRUE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","TRUE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","TRUE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","TRUE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","TRUE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","TRUE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","TRUE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","TRUE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","TRUE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","TRUE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","TRUE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","TRUE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","TRUE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","TRUE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","TRUE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE"