/
vse.html
47 lines (46 loc) · 415 KB
/
vse.html
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
<!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,Ly8gaHR0cHM6Ly9kM2pzLm9yZy9kMy1jb2xvci8gVmVyc2lvbiAxLjAuMS4gQ29weXJpZ2h0IDIwMTYgTWlrZSBCb3N0b2NrLgohZnVuY3Rpb24odCxlKXsib2JqZWN0Ij09dHlwZW9mIGV4cG9ydHMmJiJ1bmRlZmluZWQiIT10eXBlb2YgbW9kdWxlP2UoZXhwb3J0cyk6ImZ1bmN0aW9uIj09dHlwZW9mIGRlZmluZSYmZGVmaW5lLmFtZD9kZWZpbmUoWyJleHBvcnRzIl0sZSk6ZSh0LmQzPXQuZDN8fHt9KX0odGhpcyxmdW5jdGlvbih0KXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gZSh0LGUsbil7dC5wcm90b3R5cGU9ZS5wcm90b3R5cGU9bixuLmNvbnN0cnVjdG9yPXR9ZnVuY3Rpb24gbih0LGUpe3ZhciBuPU9iamVjdC5jcmVhdGUodC5wcm90b3R5cGUpO2Zvcih2YXIgaSBpbiBlKW5baV09ZVtpXTtyZXR1cm4gbn1mdW5jdGlvbiBpKCl7fWZ1bmN0aW9uIHIodCl7dmFyIGU7cmV0dXJuIHQ9KHQrIiIpLnRyaW0oKS50b0xvd2VyQ2FzZSgpLChlPU8uZXhlYyh0KSk/KGU9cGFyc2VJbnQoZVsxXSwxNiksbmV3IGwoZT4+OCYxNXxlPj40JjI0MCxlPj40JjE1fDI0MCZlLCgxNSZlKTw8NHwxNSZlLDEpKTooZT1TLmV4ZWModCkpP2EocGFyc2VJbnQoZVsxXSwxNikpOihlPV8uZXhlYyh0KSk/bmV3IGwoZVsxXSxlWzJdLGVbM10sMSk6KGU9ei5leGVjKHQpKT9uZXcgbCgyNTUqZVsxXS8xMDAsMjU1KmVbMl0vMTAwLDI1NSplWzNdLzEwMCwxKTooZT1DLmV4ZWModCkpP3MoZVsxXSxlWzJdLGVbM10sZVs0XSk6KGU9TC5leGVjKHQpKT9zKDI1NSplWzFdLzEwMCwyNTUqZVsyXS8xMDAsMjU1KmVbM10vMTAwLGVbNF0pOihlPUEuZXhlYyh0KSk/dShlWzFdLGVbMl0vMTAwLGVbM10vMTAwLDEpOihlPUIuZXhlYyh0KSk/dShlWzFdLGVbMl0vMTAwLGVbM10vMTAwLGVbNF0pOkQuaGFzT3duUHJvcGVydHkodCk/YShEW3RdKToidHJhbnNwYXJlbnQiPT09dD9uZXcgbChOYU4sTmFOLE5hTiwwKTpudWxsfWZ1bmN0aW9uIGEodCl7cmV0dXJuIG5ldyBsKHQ+PjE2JjI1NSx0Pj44JjI1NSwyNTUmdCwxKX1mdW5jdGlvbiBzKHQsZSxuLGkpe3JldHVybiBpPD0wJiYodD1lPW49TmFOKSxuZXcgbCh0LGUsbixpKX1mdW5jdGlvbiBvKHQpe3JldHVybiB0IGluc3RhbmNlb2YgaXx8KHQ9cih0KSksdD8odD10LnJnYigpLG5ldyBsKHQucix0LmcsdC5iLHQub3BhY2l0eSkpOm5ldyBsfWZ1bmN0aW9uIGgodCxlLG4saSl7cmV0dXJuIDE9PT1hcmd1bWVudHMubGVuZ3RoP28odCk6bmV3IGwodCxlLG4sbnVsbD09aT8xOmkpfWZ1bmN0aW9uIGwodCxlLG4saSl7dGhpcy5yPSt0LHRoaXMuZz0rZSx0aGlzLmI9K24sdGhpcy5vcGFjaXR5PStpfWZ1bmN0aW9uIHUodCxlLG4saSl7cmV0dXJuIGk8PTA/dD1lPW49TmFOOm48PTB8fG4+PTE/dD1lPU5hTjplPD0wJiYodD1OYU4pLG5ldyBnKHQsZSxuLGkpfWZ1bmN0aW9uIGModCl7aWYodCBpbnN0YW5jZW9mIGcpcmV0dXJuIG5ldyBnKHQuaCx0LnMsdC5sLHQub3BhY2l0eSk7aWYodCBpbnN0YW5jZW9mIGl8fCh0PXIodCkpLCF0KXJldHVybiBuZXcgZztpZih0IGluc3RhbmNlb2YgZylyZXR1cm4gdDt0PXQucmdiKCk7dmFyIGU9dC5yLzI1NSxuPXQuZy8yNTUsYT10LmIvMjU1LHM9TWF0aC5taW4oZSxuLGEpLG89TWF0aC5tYXgoZSxuLGEpLGg9TmFOLGw9by1zLHU9KG8rcykvMjtyZXR1cm4gbD8oaD1lPT09bz8obi1hKS9sKzYqKG48YSk6bj09PW8/KGEtZSkvbCsyOihlLW4pL2wrNCxsLz11PC41P28rczoyLW8tcyxoKj02MCk6bD11PjAmJnU8MT8wOmgsbmV3IGcoaCxsLHUsdC5vcGFjaXR5KX1mdW5jdGlvbiBkKHQsZSxuLGkpe3JldHVybiAxPT09YXJndW1lbnRzLmxlbmd0aD9jKHQpOm5ldyBnKHQsZSxuLG51bGw9PWk/MTppKX1mdW5jdGlvbiBnKHQsZSxuLGkpe3RoaXMuaD0rdCx0aGlzLnM9K2UsdGhpcy5sPStuLHRoaXMub3BhY2l0eT0raX1mdW5jdGlvbiBwKHQsZSxuKXtyZXR1cm4gMjU1Kih0PDYwP2UrKG4tZSkqdC82MDp0PDE4MD9uOnQ8MjQwP2UrKG4tZSkqKDI0MC10KS82MDplKX1mdW5jdGlvbiBmKHQpe2lmKHQgaW5zdGFuY2VvZiB5KXJldHVybiBuZXcgeSh0LmwsdC5hLHQuYix0Lm9wYWNpdHkpO2lmKHQgaW5zdGFuY2VvZiB4KXt2YXIgZT10LmgqRTtyZXR1cm4gbmV3IHkodC5sLE1hdGguY29zKGUpKnQuYyxNYXRoLnNpbihlKSp0LmMsdC5vcGFjaXR5KX10IGluc3RhbmNlb2YgbHx8KHQ9byh0KSk7dmFyIG49Tih0LnIpLGk9Tih0LmcpLHI9Tih0LmIpLGE9dygoLjQxMjQ1NjQqbisuMzU3NTc2MSppKy4xODA0Mzc1KnIpL0gpLHM9dygoLjIxMjY3MjkqbisuNzE1MTUyMippKy4wNzIxNzUqcikvSiksaD13KCguMDE5MzMzOSpuKy4xMTkxOTIqaSsuOTUwMzA0MSpyKS9LKTtyZXR1cm4gbmV3IHkoMTE2KnMtMTYsNTAwKihhLXMpLDIwMCoocy1oKSx0Lm9wYWNpdHkpfWZ1bmN0aW9uIGIodCxlLG4saSl7cmV0dXJuIDE9PT1hcmd1bWVudHMubGVuZ3RoP2YodCk6bmV3IHkodCxlLG4sbnVsbD09aT8xOmkpfWZ1bmN0aW9uIHkodCxlLG4saSl7dGhpcy5sPSt0LHRoaXMuYT0rZSx0aGlzLmI9K24sdGhpcy5vcGFjaXR5PStpfWZ1bmN0aW9uIHcodCl7cmV0dXJuIHQ+VT9NYXRoLnBvdyh0LDEvMyk6dC9UK1F9ZnVuY3Rpb24gbSh0KXtyZXR1cm4gdD5SP3QqdCp0OlQqKHQtUSl9ZnVuY3Rpb24gayh0KXtyZXR1cm4gMjU1Kih0PD0uMDAzMTMwOD8xMi45Mip0OjEuMDU1Kk1hdGgucG93KHQsMS8yLjQpLS4wNTUpfWZ1bmN0aW9uIE4odCl7cmV0dXJuKHQvPTI1NSk8PS4wNDA0NT90LzEyLjkyOk1hdGgucG93KCh0Ky4wNTUpLzEuMDU1LDIuNCl9ZnVuY3Rpb24gTSh0KXtpZih0IGluc3RhbmNlb2YgeClyZXR1cm4gbmV3IHgodC5oLHQuYyx0LmwsdC5vcGFjaXR5KTt0IGluc3RhbmNlb2YgeXx8KHQ9Zih0KSk7dmFyIGU9TWF0aC5hdGFuMih0LmIsdC5hKSpGO3JldHVybiBuZXcgeChlPDA/ZSszNjA6ZSxNYXRoLnNxcnQodC5hKnQuYSt0LmIqdC5iKSx0LmwsdC5vcGFjaXR5KX1mdW5jdGlvbiB2KHQsZSxuLGkpe3JldHVybiAxPT09YXJndW1lbnRzLmxlbmd0aD9NKHQpOm5ldyB4KHQsZSxuLG51bGw9PWk/MTppKX1mdW5jdGlvbiB4KHQsZSxuLGkpe3RoaXMuaD0rdCx0aGlzLmM9K2UsdGhpcy5sPStuLHRoaXMub3BhY2l0eT0raX1mdW5jdGlvbiBxKHQpe2lmKHQgaW5zdGFuY2VvZiBqKXJldHVybiBuZXcgaih0LmgsdC5zLHQubCx0Lm9wYWNpdHkpO3QgaW5zdGFuY2VvZiBsfHwodD1vKHQpKTt2YXIgZT10LnIvMjU1LG49dC5nLzI1NSxpPXQuYi8yNTUscj0obnQqaSt0dCplLWV0Km4pLyhudCt0dC1ldCksYT1pLXIscz0oWioobi1yKS1YKmEpL1ksaD1NYXRoLnNxcnQocypzK2EqYSkvKFoqciooMS1yKSksdT1oP01hdGguYXRhbjIocyxhKSpGLTEyMDpOYU47cmV0dXJuIG5ldyBqKHU8MD91KzM2MDp1LGgscix0Lm9wYWNpdHkpfWZ1bmN0aW9uICQodCxlLG4saSl7cmV0dXJuIDE9PT1hcmd1bWVudHMubGVuZ3RoP3EodCk6bmV3IGoodCxlLG4sbnVsbD09aT8xOmkpfWZ1bmN0aW9uIGoodCxlLG4saSl7dGhpcy5oPSt0LHRoaXMucz0rZSx0aGlzLmw9K24sdGhpcy5vcGFjaXR5PStpfXZhciBJPS43LFA9MS9JLE89L14jKFswLTlhLWZdezN9KSQvLFM9L14jKFswLTlhLWZdezZ9KSQvLF89L15yZ2JcKFxzKihbLStdP1xkKylccyosXHMqKFstK10/XGQrKVxzKixccyooWy0rXT9cZCspXHMqXCkkLyx6PS9ecmdiXChccyooWy0rXT9cZCsoPzpcLlxkKyk/KSVccyosXHMqKFstK10/XGQrKD86XC5cZCspPyklXHMqLFxzKihbLStdP1xkKyg/OlwuXGQrKT8pJVxzKlwpJC8sQz0vXnJnYmFcKFxzKihbLStdP1xkKylccyosXHMqKFstK10/XGQrKVxzKixccyooWy0rXT9cZCspXHMqLFxzKihbLStdP1xkKyg/OlwuXGQrKT8pXHMqXCkkLyxMPS9ecmdiYVwoXHMqKFstK10/XGQrKD86XC5cZCspPyklXHMqLFxzKihbLStdP1xkKyg/OlwuXGQrKT8pJVxzKixccyooWy0rXT9cZCsoPzpcLlxkKyk/KSVccyosXHMqKFstK10/XGQrKD86XC5cZCspPylccypcKSQvLEE9L15oc2xcKFxzKihbLStdP1xkKyg/OlwuXGQrKT8pXHMqLFxzKihbLStdP1xkKyg/OlwuXGQrKT8pJVxzKixccyooWy0rXT9cZCsoPzpcLlxkKyk/KSVccypcKSQvLEI9L15oc2xhXChccyooWy0rXT9cZCsoPzpcLlxkKyk/KVxzKixccyooWy0rXT9cZCsoPzpcLlxkKyk/KSVccyosXHMqKFstK10/XGQrKD86XC5cZCspPyklXHMqLFxzKihbLStdP1xkKyg/OlwuXGQrKT8pXHMqXCkkLyxEPXthbGljZWJsdWU6MTU3OTIzODMsYW50aXF1ZXdoaXRlOjE2NDQ0Mzc1LGFxdWE6NjU1MzUsYXF1YW1hcmluZTo4Mzg4NTY0LGF6dXJlOjE1Nzk0MTc1LGJlaWdlOjE2MTE5MjYwLGJpc3F1ZToxNjc3MDI0NCxibGFjazowLGJsYW5jaGVkYWxtb25kOjE2NzcyMDQ1LGJsdWU6MjU1LGJsdWV2aW9sZXQ6OTA1NTIwMixicm93bjoxMDgyNDIzNCxidXJseXdvb2Q6MTQ1OTYyMzEsY2FkZXRibHVlOjYyNjY1MjgsY2hhcnRyZXVzZTo4Mzg4MzUyLGNob2NvbGF0ZToxMzc4OTQ3MCxjb3JhbDoxNjc0NDI3Mixjb3JuZmxvd2VyYmx1ZTo2NTkxOTgxLGNvcm5zaWxrOjE2Nzc1Mzg4LGNyaW1zb246MTQ0MjMxMDAsY3lhbjo2NTUzNSxkYXJrYmx1ZToxMzksZGFya2N5YW46MzU3MjMsZGFya2dvbGRlbnJvZDoxMjA5MjkzOSxkYXJrZ3JheToxMTExOTAxNyxkYXJrZ3JlZW46MjU2MDAsZGFya2dyZXk6MTExMTkwMTcsZGFya2toYWtpOjEyNDMzMjU5LGRhcmttYWdlbnRhOjkxMDk2NDMsZGFya29saXZlZ3JlZW46NTU5Nzk5OSxkYXJrb3JhbmdlOjE2NzQ3NTIwLGRhcmtvcmNoaWQ6MTAwNDAwMTIsZGFya3JlZDo5MTA5NTA0LGRhcmtzYWxtb246MTUzMDg0MTAsZGFya3NlYWdyZWVuOjk0MTk5MTksZGFya3NsYXRlYmx1ZTo0NzM0MzQ3LGRhcmtzbGF0ZWdyYXk6MzEwMDQ5NSxkYXJrc2xhdGVncmV5OjMxMDA0OTUsZGFya3R1cnF1b2lzZTo1Mjk0NSxkYXJrdmlvbGV0Ojk2OTk1MzksZGVlcHBpbms6MTY3MTY5NDcsZGVlcHNreWJsdWU6NDkxNTEsZGltZ3JheTo2OTA4MjY1LGRpbWdyZXk6NjkwODI2NSxkb2RnZXJibHVlOjIwMDMxOTksZmlyZWJyaWNrOjExNjc0MTQ2LGZsb3JhbHdoaXRlOjE2Nzc1OTIwLGZvcmVzdGdyZWVuOjIyNjM4NDIsZnVjaHNpYToxNjcxMTkzNSxnYWluc2Jvcm86MTQ0NzQ0NjAsZ2hvc3R3aGl0ZToxNjMxNjY3MSxnb2xkOjE2NzY2NzIwLGdvbGRlbnJvZDoxNDMyOTEyMCxncmF5Ojg0MjE1MDQsZ3JlZW46MzI3NjgsZ3JlZW55ZWxsb3c6MTE0MDMwNTUsZ3JleTo4NDIxNTA0LGhvbmV5ZGV3OjE1Nzk0MTYwLGhvdHBpbms6MTY3Mzg3NDAsaW5kaWFucmVkOjEzNDU4NTI0LGluZGlnbzo0OTE1MzMwLGl2b3J5OjE2Nzc3MjAwLGtoYWtpOjE1Nzg3NjYwLGxhdmVuZGVyOjE1MTMyNDEwLGxhdmVuZGVyYmx1c2g6MTY3NzMzNjUsbGF3bmdyZWVuOjgxOTA5NzYsbGVtb25jaGlmZm9uOjE2Nzc1ODg1LGxpZ2h0Ymx1ZToxMTM5MzI1NCxsaWdodGNvcmFsOjE1NzYxNTM2LGxpZ2h0Y3lhbjoxNDc0NTU5OSxsaWdodGdvbGRlbnJvZHllbGxvdzoxNjQ0ODIxMCxsaWdodGdyYXk6MTM4ODIzMjMsbGlnaHRncmVlbjo5NDk4MjU2LGxpZ2h0Z3JleToxMzg4MjMyMyxsaWdodHBpbms6MTY3NTg0NjUsbGlnaHRzYWxtb246MTY3NTI3NjIsbGlnaHRzZWFncmVlbjoyMTQyODkwLGxpZ2h0c2t5Ymx1ZTo4OTAwMzQ2LGxpZ2h0c2xhdGVncmF5Ojc4MzM3NTMsbGlnaHRzbGF0ZWdyZXk6NzgzMzc1MyxsaWdodHN0ZWVsYmx1ZToxMTU4NDczNCxsaWdodHllbGxvdzoxNjc3NzE4NCxsaW1lOjY1MjgwLGxpbWVncmVlbjozMzI5MzMwLGxpbmVuOjE2NDQ1NjcwLG1hZ2VudGE6MTY3MTE5MzUsbWFyb29uOjgzODg2MDgsbWVkaXVtYXF1YW1hcmluZTo2NzM3MzIyLG1lZGl1bWJsdWU6MjA1LG1lZGl1bW9yY2hpZDoxMjIxMTY2NyxtZWRpdW1wdXJwbGU6OTY2MjY4MyxtZWRpdW1zZWFncmVlbjozOTc4MDk3LG1lZGl1bXNsYXRlYmx1ZTo4MDg3NzkwLG1lZGl1bXNwcmluZ2dyZWVuOjY0MTU0LG1lZGl1bXR1cnF1b2lzZTo0NzcyMzAwLG1lZGl1bXZpb2xldHJlZDoxMzA0NzE3MyxtaWRuaWdodGJsdWU6MTY0NDkxMixtaW50Y3JlYW06MTYxMjE4NTAsbWlzdHlyb3NlOjE2NzcwMjczLG1vY2Nhc2luOjE2NzcwMjI5LG5hdmFqb3doaXRlOjE2NzY4Njg1LG5hdnk6MTI4LG9sZGxhY2U6MTY2NDM1NTgsb2xpdmU6ODQyMTM3NixvbGl2ZWRyYWI6NzA0ODczOSxvcmFuZ2U6MTY3NTM5MjAsb3JhbmdlcmVkOjE2NzI5MzQ0LG9yY2hpZDoxNDMxNTczNCxwYWxlZ29sZGVucm9kOjE1NjU3MTMwLHBhbGVncmVlbjoxMDAyNTg4MCxwYWxldHVycXVvaXNlOjExNTI5OTY2LHBhbGV2aW9sZXRyZWQ6MTQzODEyMDMscGFwYXlhd2hpcDoxNjc3MzA3NyxwZWFjaHB1ZmY6MTY3Njc2NzMscGVydToxMzQ2ODk5MSxwaW5rOjE2NzYxMDM1LHBsdW06MTQ1MjQ2MzcscG93ZGVyYmx1ZToxMTU5MTkxMCxwdXJwbGU6ODM4ODczNixyZWJlY2NhcHVycGxlOjY2OTc4ODEscmVkOjE2NzExNjgwLHJvc3licm93bjoxMjM1NzUxOSxyb3lhbGJsdWU6NDI4Njk0NSxzYWRkbGVicm93bjo5MTI3MTg3LHNhbG1vbjoxNjQxNjg4MixzYW5keWJyb3duOjE2MDMyODY0LHNlYWdyZWVuOjMwNTAzMjcsc2Vhc2hlbGw6MTY3NzQ2Mzgsc2llbm5hOjEwNTA2Nzk3LHNpbHZlcjoxMjYzMjI1Nixza3libHVlOjg5MDAzMzEsc2xhdGVibHVlOjY5NzAwNjEsc2xhdGVncmF5OjczNzI5NDQsc2xhdGVncmV5OjczNzI5NDQsc25vdzoxNjc3NTkzMCxzcHJpbmdncmVlbjo2NTQwNyxzdGVlbGJsdWU6NDYyMDk4MCx0YW46MTM4MDg3ODAsdGVhbDozMjg5Nix0aGlzdGxlOjE0MjA0ODg4LHRvbWF0bzoxNjczNzA5NSx0dXJxdW9pc2U6NDI1MTg1Nix2aW9sZXQ6MTU2MzEwODYsd2hlYXQ6MTYxMTMzMzEsd2hpdGU6MTY3NzcyMTUsd2hpdGVzbW9rZToxNjExOTI4NSx5ZWxsb3c6MTY3NzY5NjAseWVsbG93Z3JlZW46MTAxNDUwNzR9O2UoaSxyLHtkaXNwbGF5YWJsZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLnJnYigpLmRpc3BsYXlhYmxlKCl9LHRvU3RyaW5nOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMucmdiKCkrIiJ9fSksZShsLGgsbihpLHticmlnaHRlcjpmdW5jdGlvbih0KXtyZXR1cm4gdD1udWxsPT10P1A6TWF0aC5wb3coUCx0KSxuZXcgbCh0aGlzLnIqdCx0aGlzLmcqdCx0aGlzLmIqdCx0aGlzLm9wYWNpdHkpfSxkYXJrZXI6ZnVuY3Rpb24odCl7cmV0dXJuIHQ9bnVsbD09dD9JOk1hdGgucG93KEksdCksbmV3IGwodGhpcy5yKnQsdGhpcy5nKnQsdGhpcy5iKnQsdGhpcy5vcGFjaXR5KX0scmdiOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXN9LGRpc3BsYXlhYmxlOmZ1bmN0aW9uKCl7cmV0dXJuIDA8PXRoaXMuciYmdGhpcy5yPD0yNTUmJjA8PXRoaXMuZyYmdGhpcy5nPD0yNTUmJjA8PXRoaXMuYiYmdGhpcy5iPD0yNTUmJjA8PXRoaXMub3BhY2l0eSYmdGhpcy5vcGFjaXR5PD0xfSx0b1N0cmluZzpmdW5jdGlvbigpe3ZhciB0PXRoaXMub3BhY2l0eTtyZXR1cm4gdD1pc05hTih0KT8xOk1hdGgubWF4KDAsTWF0aC5taW4oMSx0KSksKDE9PT10PyJyZ2IoIjoicmdiYSgiKStNYXRoLm1heCgwLE1hdGgubWluKDI1NSxNYXRoLnJvdW5kKHRoaXMucil8fDApKSsiLCAiK01hdGgubWF4KDAsTWF0aC5taW4oMjU1LE1hdGgucm91bmQodGhpcy5nKXx8MCkpKyIsICIrTWF0aC5tYXgoMCxNYXRoLm1pbigyNTUsTWF0aC5yb3VuZCh0aGlzLmIpfHwwKSkrKDE9PT10PyIpIjoiLCAiK3QrIikiKX19KSksZShnLGQsbihpLHticmlnaHRlcjpmdW5jdGlvbih0KXtyZXR1cm4gdD1udWxsPT10P1A6TWF0aC5wb3coUCx0KSxuZXcgZyh0aGlzLmgsdGhpcy5zLHRoaXMubCp0LHRoaXMub3BhY2l0eSl9LGRhcmtlcjpmdW5jdGlvbih0KXtyZXR1cm4gdD1udWxsPT10P0k6TWF0aC5wb3coSSx0KSxuZXcgZyh0aGlzLmgsdGhpcy5zLHRoaXMubCp0LHRoaXMub3BhY2l0eSl9LHJnYjpmdW5jdGlvbigpe3ZhciB0PXRoaXMuaCUzNjArMzYwKih0aGlzLmg8MCksZT1pc05hTih0KXx8aXNOYU4odGhpcy5zKT8wOnRoaXMucyxuPXRoaXMubCxpPW4rKG48LjU/bjoxLW4pKmUscj0yKm4taTtyZXR1cm4gbmV3IGwocCh0Pj0yNDA/dC0yNDA6dCsxMjAscixpKSxwKHQscixpKSxwKHQ8MTIwP3QrMjQwOnQtMTIwLHIsaSksdGhpcy5vcGFjaXR5KX0sZGlzcGxheWFibGU6ZnVuY3Rpb24oKXtyZXR1cm4oMDw9dGhpcy5zJiZ0aGlzLnM8PTF8fGlzTmFOKHRoaXMucykpJiYwPD10aGlzLmwmJnRoaXMubDw9MSYmMDw9dGhpcy5vcGFjaXR5JiZ0aGlzLm9wYWNpdHk8PTF9fSkpO3ZhciBFPU1hdGguUEkvMTgwLEY9MTgwL01hdGguUEksRz0xOCxIPS45NTA0NyxKPTEsSz0xLjA4ODgzLFE9NC8yOSxSPTYvMjksVD0zKlIqUixVPVIqUipSO2UoeSxiLG4oaSx7YnJpZ2h0ZXI6ZnVuY3Rpb24odCl7cmV0dXJuIG5ldyB5KHRoaXMubCtHKihudWxsPT10PzE6dCksdGhpcy5hLHRoaXMuYix0aGlzLm9wYWNpdHkpfSxkYXJrZXI6ZnVuY3Rpb24odCl7cmV0dXJuIG5ldyB5KHRoaXMubC1HKihudWxsPT10PzE6dCksdGhpcy5hLHRoaXMuYix0aGlzLm9wYWNpdHkpfSxyZ2I6ZnVuY3Rpb24oKXt2YXIgdD0odGhpcy5sKzE2KS8xMTYsZT1pc05hTih0aGlzLmEpP3Q6dCt0aGlzLmEvNTAwLG49aXNOYU4odGhpcy5iKT90OnQtdGhpcy5iLzIwMDtyZXR1cm4gdD1KKm0odCksZT1IKm0oZSksbj1LKm0obiksbmV3IGwoaygzLjI0MDQ1NDIqZS0xLjUzNzEzODUqdC0uNDk4NTMxNCpuKSxrKC0uOTY5MjY2KmUrMS44NzYwMTA4KnQrLjA0MTU1NipuKSxrKC4wNTU2NDM0KmUtLjIwNDAyNTkqdCsxLjA1NzIyNTIqbiksdGhpcy5vcGFjaXR5KX19KSksZSh4LHYsbihpLHticmlnaHRlcjpmdW5jdGlvbih0KXtyZXR1cm4gbmV3IHgodGhpcy5oLHRoaXMuYyx0aGlzLmwrRyoobnVsbD09dD8xOnQpLHRoaXMub3BhY2l0eSl9LGRhcmtlcjpmdW5jdGlvbih0KXtyZXR1cm4gbmV3IHgodGhpcy5oLHRoaXMuYyx0aGlzLmwtRyoobnVsbD09dD8xOnQpLHRoaXMub3BhY2l0eSl9LHJnYjpmdW5jdGlvbigpe3JldHVybiBmKHRoaXMpLnJnYigpfX0pKTt2YXIgVj0tLjE0ODYxLFc9MS43ODI3NyxYPS0uMjkyMjcsWT0tLjkwNjQ5LFo9MS45NzI5NCx0dD1aKlksZXQ9WipXLG50PVcqWC1ZKlY7ZShqLCQsbihpLHticmlnaHRlcjpmdW5jdGlvbih0KXtyZXR1cm4gdD1udWxsPT10P1A6TWF0aC5wb3coUCx0KSxuZXcgaih0aGlzLmgsdGhpcy5zLHRoaXMubCp0LHRoaXMub3BhY2l0eSl9LGRhcmtlcjpmdW5jdGlvbih0KXtyZXR1cm4gdD1udWxsPT10P0k6TWF0aC5wb3coSSx0KSxuZXcgaih0aGlzLmgsdGhpcy5zLHRoaXMubCp0LHRoaXMub3BhY2l0eSl9LHJnYjpmdW5jdGlvbigpe3ZhciB0PWlzTmFOKHRoaXMuaCk/MDoodGhpcy5oKzEyMCkqRSxlPSt0aGlzLmwsbj1pc05hTih0aGlzLnMpPzA6dGhpcy5zKmUqKDEtZSksaT1NYXRoLmNvcyh0KSxyPU1hdGguc2luKHQpO3JldHVybiBuZXcgbCgyNTUqKGUrbiooVippK1cqcikpLDI1NSooZStuKihYKmkrWSpyKSksMjU1KihlK24qKFoqaSkpLHRoaXMub3BhY2l0eSl9fSkpLHQuY29sb3I9cix0LnJnYj1oLHQuaHNsPWQsdC5sYWI9Yix0LmhjbD12LHQuY3ViZWhlbGl4PSQsT2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pfSk7"></script>
<script src="data:application/x-javascript;base64,Ly8gaHR0cHM6Ly9kM2pzLm9yZy9kMy1hcnJheS8gVmVyc2lvbiAxLjAuMS4gQ29weXJpZ2h0IDIwMTYgTWlrZSBCb3N0b2NrLgohZnVuY3Rpb24obixyKXsib2JqZWN0Ij09dHlwZW9mIGV4cG9ydHMmJiJ1bmRlZmluZWQiIT10eXBlb2YgbW9kdWxlP3IoZXhwb3J0cyk6ImZ1bmN0aW9uIj09dHlwZW9mIGRlZmluZSYmZGVmaW5lLmFtZD9kZWZpbmUoWyJleHBvcnRzIl0scik6cihuLmQzPW4uZDN8fHt9KX0odGhpcyxmdW5jdGlvbihuKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gcihuLHIpe3JldHVybiBuPHI/LTE6bj5yPzE6bj49cj8wOk5hTn1mdW5jdGlvbiB0KG4pe3JldHVybiAxPT09bi5sZW5ndGgmJihuPWUobikpLHtsZWZ0OmZ1bmN0aW9uKHIsdCxlLHUpe2ZvcihudWxsPT1lJiYoZT0wKSxudWxsPT11JiYodT1yLmxlbmd0aCk7ZTx1Oyl7dmFyIG89ZSt1Pj4+MTtuKHJbb10sdCk8MD9lPW8rMTp1PW99cmV0dXJuIGV9LHJpZ2h0OmZ1bmN0aW9uKHIsdCxlLHUpe2ZvcihudWxsPT1lJiYoZT0wKSxudWxsPT11JiYodT1yLmxlbmd0aCk7ZTx1Oyl7dmFyIG89ZSt1Pj4+MTtuKHJbb10sdCk+MD91PW86ZT1vKzF9cmV0dXJuIGV9fX1mdW5jdGlvbiBlKG4pe3JldHVybiBmdW5jdGlvbih0LGUpe3JldHVybiByKG4odCksZSl9fWZ1bmN0aW9uIHUobixyKXtyZXR1cm4gcjxuPy0xOnI+bj8xOnI+PW4/MDpOYU59ZnVuY3Rpb24gbyhuKXtyZXR1cm4gbnVsbD09PW4/TmFOOitufWZ1bmN0aW9uIGYobixyKXt2YXIgdCxlLHU9bi5sZW5ndGgsZj0wLGw9MCxpPS0xLGE9MDtpZihudWxsPT1yKWZvcig7KytpPHU7KWlzTmFOKHQ9byhuW2ldKSl8fChlPXQtZixmKz1lLysrYSxsKz1lKih0LWYpKTtlbHNlIGZvcig7KytpPHU7KWlzTmFOKHQ9byhyKG5baV0saSxuKSkpfHwoZT10LWYsZis9ZS8rK2EsbCs9ZSoodC1mKSk7aWYoYT4xKXJldHVybiBsLyhhLTEpfWZ1bmN0aW9uIGwobixyKXt2YXIgdD1mKG4scik7cmV0dXJuIHQ/TWF0aC5zcXJ0KHQpOnR9ZnVuY3Rpb24gaShuLHIpe3ZhciB0LGUsdSxvPS0xLGY9bi5sZW5ndGg7aWYobnVsbD09cil7Zm9yKDsrK288ZjspaWYobnVsbCE9KGU9bltvXSkmJmU+PWUpe3Q9dT1lO2JyZWFrfWZvcig7KytvPGY7KW51bGwhPShlPW5bb10pJiYodD5lJiYodD1lKSx1PGUmJih1PWUpKX1lbHNle2Zvcig7KytvPGY7KWlmKG51bGwhPShlPXIobltvXSxvLG4pKSYmZT49ZSl7dD11PWU7YnJlYWt9Zm9yKDsrK288ZjspbnVsbCE9KGU9cihuW29dLG8sbikpJiYodD5lJiYodD1lKSx1PGUmJih1PWUpKX1yZXR1cm5bdCx1XX1mdW5jdGlvbiBhKG4pe3JldHVybiBmdW5jdGlvbigpe3JldHVybiBufX1mdW5jdGlvbiBoKG4pe3JldHVybiBufWZ1bmN0aW9uIGMobixyLHQpe249K24scj0rcix0PSh1PWFyZ3VtZW50cy5sZW5ndGgpPDI/KHI9bixuPTAsMSk6dTwzPzE6K3Q7Zm9yKHZhciBlPS0xLHU9MHxNYXRoLm1heCgwLE1hdGguY2VpbCgoci1uKS90KSksbz1uZXcgQXJyYXkodSk7KytlPHU7KW9bZV09bitlKnQ7cmV0dXJuIG99ZnVuY3Rpb24gcyhuLHIsdCl7dmFyIGU9ZyhuLHIsdCk7cmV0dXJuIGMoTWF0aC5jZWlsKG4vZSkqZSxNYXRoLmZsb29yKHIvZSkqZStlLzIsZSl9ZnVuY3Rpb24gZyhuLHIsdCl7dmFyIGU9TWF0aC5hYnMoci1uKS9NYXRoLm1heCgwLHQpLHU9TWF0aC5wb3coMTAsTWF0aC5mbG9vcihNYXRoLmxvZyhlKS9NYXRoLkxOMTApKSxvPWUvdTtyZXR1cm4gbz49Qz91Kj0xMDpvPj1FP3UqPTU6bz49RyYmKHUqPTIpLHI8bj8tdTp1fWZ1bmN0aW9uIHYobil7cmV0dXJuIE1hdGguY2VpbChNYXRoLmxvZyhuLmxlbmd0aCkvTWF0aC5MTjIpKzF9ZnVuY3Rpb24gcCgpe2Z1bmN0aW9uIG4obil7dmFyIHUsbyxmPW4ubGVuZ3RoLGw9bmV3IEFycmF5KGYpO2Zvcih1PTA7dTxmOysrdSlsW3VdPXIoblt1XSx1LG4pO3ZhciBpPXQobCksYT1pWzBdLGg9aVsxXSxjPWUobCxhLGgpO0FycmF5LmlzQXJyYXkoYyl8fChjPXMoYSxoLGMpKTtmb3IodmFyIGc9Yy5sZW5ndGg7Y1swXTw9YTspYy5zaGlmdCgpLC0tZztmb3IoO2NbZy0xXT49aDspYy5wb3AoKSwtLWc7dmFyIHYscD1uZXcgQXJyYXkoZysxKTtmb3IodT0wO3U8PWc7Kyt1KXY9cFt1XT1bXSx2LngwPXU+MD9jW3UtMV06YSx2LngxPXU8Zz9jW3VdOmg7Zm9yKHU9MDt1PGY7Kyt1KW89bFt1XSxhPD1vJiZvPD1oJiZwW0YoYyxvLDAsZyldLnB1c2goblt1XSk7cmV0dXJuIHB9dmFyIHI9aCx0PWksZT12O3JldHVybiBuLnZhbHVlPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhyPSJmdW5jdGlvbiI9PXR5cGVvZiB0P3Q6YSh0KSxuKTpyfSxuLmRvbWFpbj1mdW5jdGlvbihyKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8odD0iZnVuY3Rpb24iPT10eXBlb2Ygcj9yOmEoW3JbMF0sclsxXV0pLG4pOnR9LG4udGhyZXNob2xkcz1mdW5jdGlvbihyKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oZT0iZnVuY3Rpb24iPT10eXBlb2Ygcj9yOmEoQXJyYXkuaXNBcnJheShyKT9SLmNhbGwocik6ciksbik6ZX0sbn1mdW5jdGlvbiBkKG4scix0KXtpZihudWxsPT10JiYodD1vKSxlPW4ubGVuZ3RoKXtpZigocj0rcik8PTB8fGU8MilyZXR1cm4rdChuWzBdLDAsbik7aWYocj49MSlyZXR1cm4rdChuW2UtMV0sZS0xLG4pO3ZhciBlLHU9KGUtMSkqcixmPU1hdGguZmxvb3IodSksbD0rdChuW2ZdLGYsbiksaT0rdChuW2YrMV0sZisxLG4pO3JldHVybiBsKyhpLWwpKih1LWYpfX1mdW5jdGlvbiBNKG4sdCxlKXtyZXR1cm4gbj1CLmNhbGwobixvKS5zb3J0KHIpLE1hdGguY2VpbCgoZS10KS8oMiooZChuLC43NSktZChuLC4yNSkpKk1hdGgucG93KG4ubGVuZ3RoLC0xLzMpKSl9ZnVuY3Rpb24geShuLHIsdCl7cmV0dXJuIE1hdGguY2VpbCgodC1yKS8oMy41KmwobikqTWF0aC5wb3cobi5sZW5ndGgsLTEvMykpKX1mdW5jdGlvbiBOKG4scil7dmFyIHQsZSx1PS0xLG89bi5sZW5ndGg7aWYobnVsbD09cil7Zm9yKDsrK3U8bzspaWYobnVsbCE9KGU9blt1XSkmJmU+PWUpe3Q9ZTticmVha31mb3IoOysrdTxvOyludWxsIT0oZT1uW3VdKSYmZT50JiYodD1lKX1lbHNle2Zvcig7Kyt1PG87KWlmKG51bGwhPShlPXIoblt1XSx1LG4pKSYmZT49ZSl7dD1lO2JyZWFrfWZvcig7Kyt1PG87KW51bGwhPShlPXIoblt1XSx1LG4pKSYmZT50JiYodD1lKX1yZXR1cm4gdH1mdW5jdGlvbiBtKG4scil7dmFyIHQsZT0wLHU9bi5sZW5ndGgsZj0tMSxsPXU7aWYobnVsbD09cilmb3IoOysrZjx1Oylpc05hTih0PW8obltmXSkpPy0tbDplKz10O2Vsc2UgZm9yKDsrK2Y8dTspaXNOYU4odD1vKHIobltmXSxmLG4pKSk/LS1sOmUrPXQ7aWYobClyZXR1cm4gZS9sfWZ1bmN0aW9uIGIobix0KXt2YXIgZSx1PVtdLGY9bi5sZW5ndGgsbD0tMTtpZihudWxsPT10KWZvcig7KytsPGY7KWlzTmFOKGU9byhuW2xdKSl8fHUucHVzaChlKTtlbHNlIGZvcig7KytsPGY7KWlzTmFOKGU9byh0KG5bbF0sbCxuKSkpfHx1LnB1c2goZSk7cmV0dXJuIGQodS5zb3J0KHIpLC41KX1mdW5jdGlvbiBBKG4pe2Zvcih2YXIgcix0LGUsdT1uLmxlbmd0aCxvPS0xLGY9MDsrK288dTspZis9bltvXS5sZW5ndGg7Zm9yKHQ9bmV3IEFycmF5KGYpOy0tdT49MDspZm9yKGU9blt1XSxyPWUubGVuZ3RoOy0tcj49MDspdFstLWZdPWVbcl07cmV0dXJuIHR9ZnVuY3Rpb24gdyhuLHIpe3ZhciB0LGUsdT0tMSxvPW4ubGVuZ3RoO2lmKG51bGw9PXIpe2Zvcig7Kyt1PG87KWlmKG51bGwhPShlPW5bdV0pJiZlPj1lKXt0PWU7YnJlYWt9Zm9yKDsrK3U8bzspbnVsbCE9KGU9blt1XSkmJnQ+ZSYmKHQ9ZSl9ZWxzZXtmb3IoOysrdTxvOylpZihudWxsIT0oZT1yKG5bdV0sdSxuKSkmJmU+PWUpe3Q9ZTticmVha31mb3IoOysrdTxvOyludWxsIT0oZT1yKG5bdV0sdSxuKSkmJnQ+ZSYmKHQ9ZSl9cmV0dXJuIHR9ZnVuY3Rpb24geChuKXtmb3IodmFyIHI9MCx0PW4ubGVuZ3RoLTEsZT1uWzBdLHU9bmV3IEFycmF5KHQ8MD8wOnQpO3I8dDspdVtyXT1bZSxlPW5bKytyXV07cmV0dXJuIHV9ZnVuY3Rpb24gayhuLHIpe2Zvcih2YXIgdD1yLmxlbmd0aCxlPW5ldyBBcnJheSh0KTt0LS07KWVbdF09bltyW3RdXTtyZXR1cm4gZX1mdW5jdGlvbiBxKG4sdCl7aWYoZT1uLmxlbmd0aCl7dmFyIGUsdSxvPTAsZj0wLGw9bltmXTtmb3IodHx8KHQ9cik7KytvPGU7KSh0KHU9bltvXSxsKTwwfHwwIT09dChsLGwpKSYmKGw9dSxmPW8pO3JldHVybiAwPT09dChsLGwpP2Y6dm9pZCAwfX1mdW5jdGlvbiBMKG4scix0KXtmb3IodmFyIGUsdSxvPShudWxsPT10P24ubGVuZ3RoOnQpLShyPW51bGw9PXI/MDorcik7bzspdT1NYXRoLnJhbmRvbSgpKm8tLXwwLGU9bltvK3JdLG5bbytyXT1uW3Urcl0sblt1K3JdPWU7cmV0dXJuIG59ZnVuY3Rpb24gUyhuLHIpe3ZhciB0LGU9MCx1PW4ubGVuZ3RoLG89LTE7aWYobnVsbD09cilmb3IoOysrbzx1OykodD0rbltvXSkmJihlKz10KTtlbHNlIGZvcig7KytvPHU7KSh0PStyKG5bb10sbyxuKSkmJihlKz10KTtyZXR1cm4gZX1mdW5jdGlvbiBqKG4pe2lmKCEodT1uLmxlbmd0aCkpcmV0dXJuW107Zm9yKHZhciByPS0xLHQ9dyhuLF8pLGU9bmV3IEFycmF5KHQpOysrcjx0Oylmb3IodmFyIHUsbz0tMSxmPWVbcl09bmV3IEFycmF5KHUpOysrbzx1OylmW29dPW5bb11bcl07cmV0dXJuIGV9ZnVuY3Rpb24gXyhuKXtyZXR1cm4gbi5sZW5ndGh9ZnVuY3Rpb24geigpe3JldHVybiBqKGFyZ3VtZW50cyl9dmFyIEQ9dChyKSxGPUQucmlnaHQsTz1ELmxlZnQsUD1BcnJheS5wcm90b3R5cGUsUj1QLnNsaWNlLEI9UC5tYXAsQz1NYXRoLnNxcnQoNTApLEU9TWF0aC5zcXJ0KDEwKSxHPU1hdGguc3FydCgyKTtuLmJpc2VjdD1GLG4uYmlzZWN0UmlnaHQ9RixuLmJpc2VjdExlZnQ9TyxuLmFzY2VuZGluZz1yLG4uYmlzZWN0b3I9dCxuLmRlc2NlbmRpbmc9dSxuLmRldmlhdGlvbj1sLG4uZXh0ZW50PWksbi5oaXN0b2dyYW09cCxuLnRocmVzaG9sZEZyZWVkbWFuRGlhY29uaXM9TSxuLnRocmVzaG9sZFNjb3R0PXksbi50aHJlc2hvbGRTdHVyZ2VzPXYsbi5tYXg9TixuLm1lYW49bSxuLm1lZGlhbj1iLG4ubWVyZ2U9QSxuLm1pbj13LG4ucGFpcnM9eCxuLnBlcm11dGU9ayxuLnF1YW50aWxlPWQsbi5yYW5nZT1jLG4uc2Nhbj1xLG4uc2h1ZmZsZT1MLG4uc3VtPVMsbi50aWNrcz1zLG4udGlja1N0ZXA9ZyxuLnRyYW5zcG9zZT1qLG4udmFyaWFuY2U9ZixuLnppcD16LE9iamVjdC5kZWZpbmVQcm9wZXJ0eShuLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KX0pOw=="></script>
<script src="data:application/x-javascript;base64,Ly8gaHR0cHM6Ly9kM2pzLm9yZy9kMy1jb2xsZWN0aW9uLyBWZXJzaW9uIDEuMC4xLiBDb3B5cmlnaHQgMjAxNiBNaWtlIEJvc3RvY2suCiFmdW5jdGlvbihuLHQpeyJvYmplY3QiPT10eXBlb2YgZXhwb3J0cyYmInVuZGVmaW5lZCIhPXR5cGVvZiBtb2R1bGU/dChleHBvcnRzKToiZnVuY3Rpb24iPT10eXBlb2YgZGVmaW5lJiZkZWZpbmUuYW1kP2RlZmluZShbImV4cG9ydHMiXSx0KTp0KG4uZDM9bi5kM3x8e30pfSh0aGlzLGZ1bmN0aW9uKG4peyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiB0KCl7fWZ1bmN0aW9uIGUobixlKXt2YXIgcj1uZXcgdDtpZihuIGluc3RhbmNlb2YgdCluLmVhY2goZnVuY3Rpb24obix0KXtyLnNldCh0LG4pfSk7ZWxzZSBpZihBcnJheS5pc0FycmF5KG4pKXt2YXIgaSx1PS0xLG89bi5sZW5ndGg7aWYobnVsbD09ZSlmb3IoOysrdTxvOylyLnNldCh1LG5bdV0pO2Vsc2UgZm9yKDsrK3U8bzspci5zZXQoZShpPW5bdV0sdSxuKSxpKX1lbHNlIGlmKG4pZm9yKHZhciBzIGluIG4pci5zZXQocyxuW3NdKTtyZXR1cm4gcn1mdW5jdGlvbiByKCl7ZnVuY3Rpb24gbih0LGksdSxvKXtpZihpPj1hLmxlbmd0aClyZXR1cm4gbnVsbCE9Zj9mKHQpOm51bGwhPXI/dC5zb3J0KHIpOnQ7Zm9yKHZhciBzLGMsaCxsPS0xLHY9dC5sZW5ndGgscD1hW2krK10seT1lKCksZD11KCk7KytsPHY7KShoPXkuZ2V0KHM9cChjPXRbbF0pKyIiKSk/aC5wdXNoKGMpOnkuc2V0KHMsW2NdKTtyZXR1cm4geS5lYWNoKGZ1bmN0aW9uKHQsZSl7byhkLGUsbih0LGksdSxvKSl9KSxkfWZ1bmN0aW9uIHQobixlKXtpZigrK2U+YS5sZW5ndGgpcmV0dXJuIG47dmFyIHIsaT1oW2UtMV07cmV0dXJuIG51bGwhPWYmJmU+PWEubGVuZ3RoP3I9bi5lbnRyaWVzKCk6KHI9W10sbi5lYWNoKGZ1bmN0aW9uKG4saSl7ci5wdXNoKHtrZXk6aSx2YWx1ZXM6dChuLGUpfSl9KSksbnVsbCE9aT9yLnNvcnQoZnVuY3Rpb24obix0KXtyZXR1cm4gaShuLmtleSx0LmtleSl9KTpyfXZhciByLGYsYyxhPVtdLGg9W107cmV0dXJuIGM9e29iamVjdDpmdW5jdGlvbih0KXtyZXR1cm4gbih0LDAsaSx1KX0sbWFwOmZ1bmN0aW9uKHQpe3JldHVybiBuKHQsMCxvLHMpfSxlbnRyaWVzOmZ1bmN0aW9uKGUpe3JldHVybiB0KG4oZSwwLG8scyksMCl9LGtleTpmdW5jdGlvbihuKXtyZXR1cm4gYS5wdXNoKG4pLGN9LHNvcnRLZXlzOmZ1bmN0aW9uKG4pe3JldHVybiBoW2EubGVuZ3RoLTFdPW4sY30sc29ydFZhbHVlczpmdW5jdGlvbihuKXtyZXR1cm4gcj1uLGN9LHJvbGx1cDpmdW5jdGlvbihuKXtyZXR1cm4gZj1uLGN9fX1mdW5jdGlvbiBpKCl7cmV0dXJue319ZnVuY3Rpb24gdShuLHQsZSl7blt0XT1lfWZ1bmN0aW9uIG8oKXtyZXR1cm4gZSgpfWZ1bmN0aW9uIHMobix0LGUpe24uc2V0KHQsZSl9ZnVuY3Rpb24gZigpe31mdW5jdGlvbiBjKG4sdCl7dmFyIGU9bmV3IGY7aWYobiBpbnN0YW5jZW9mIGYpbi5lYWNoKGZ1bmN0aW9uKG4pe2UuYWRkKG4pfSk7ZWxzZSBpZihuKXt2YXIgcj0tMSxpPW4ubGVuZ3RoO2lmKG51bGw9PXQpZm9yKDsrK3I8aTspZS5hZGQobltyXSk7ZWxzZSBmb3IoOysrcjxpOyllLmFkZCh0KG5bcl0scixuKSl9cmV0dXJuIGV9ZnVuY3Rpb24gYShuKXt2YXIgdD1bXTtmb3IodmFyIGUgaW4gbil0LnB1c2goZSk7cmV0dXJuIHR9ZnVuY3Rpb24gaChuKXt2YXIgdD1bXTtmb3IodmFyIGUgaW4gbil0LnB1c2gobltlXSk7cmV0dXJuIHR9ZnVuY3Rpb24gbChuKXt2YXIgdD1bXTtmb3IodmFyIGUgaW4gbil0LnB1c2goe2tleTplLHZhbHVlOm5bZV19KTtyZXR1cm4gdH12YXIgdj0iJCI7dC5wcm90b3R5cGU9ZS5wcm90b3R5cGU9e2NvbnN0cnVjdG9yOnQsaGFzOmZ1bmN0aW9uKG4pe3JldHVybiB2K24gaW4gdGhpc30sZ2V0OmZ1bmN0aW9uKG4pe3JldHVybiB0aGlzW3Yrbl19LHNldDpmdW5jdGlvbihuLHQpe3JldHVybiB0aGlzW3Yrbl09dCx0aGlzfSxyZW1vdmU6ZnVuY3Rpb24obil7dmFyIHQ9dituO3JldHVybiB0IGluIHRoaXMmJmRlbGV0ZSB0aGlzW3RdfSxjbGVhcjpmdW5jdGlvbigpe2Zvcih2YXIgbiBpbiB0aGlzKW5bMF09PT12JiZkZWxldGUgdGhpc1tuXX0sa2V5czpmdW5jdGlvbigpe3ZhciBuPVtdO2Zvcih2YXIgdCBpbiB0aGlzKXRbMF09PT12JiZuLnB1c2godC5zbGljZSgxKSk7cmV0dXJuIG59LHZhbHVlczpmdW5jdGlvbigpe3ZhciBuPVtdO2Zvcih2YXIgdCBpbiB0aGlzKXRbMF09PT12JiZuLnB1c2godGhpc1t0XSk7cmV0dXJuIG59LGVudHJpZXM6ZnVuY3Rpb24oKXt2YXIgbj1bXTtmb3IodmFyIHQgaW4gdGhpcyl0WzBdPT09diYmbi5wdXNoKHtrZXk6dC5zbGljZSgxKSx2YWx1ZTp0aGlzW3RdfSk7cmV0dXJuIG59LHNpemU6ZnVuY3Rpb24oKXt2YXIgbj0wO2Zvcih2YXIgdCBpbiB0aGlzKXRbMF09PT12JiYrK247cmV0dXJuIG59LGVtcHR5OmZ1bmN0aW9uKCl7Zm9yKHZhciBuIGluIHRoaXMpaWYoblswXT09PXYpcmV0dXJuITE7cmV0dXJuITB9LGVhY2g6ZnVuY3Rpb24obil7Zm9yKHZhciB0IGluIHRoaXMpdFswXT09PXYmJm4odGhpc1t0XSx0LnNsaWNlKDEpLHRoaXMpfX07dmFyIHA9ZS5wcm90b3R5cGU7Zi5wcm90b3R5cGU9Yy5wcm90b3R5cGU9e2NvbnN0cnVjdG9yOmYsaGFzOnAuaGFzLGFkZDpmdW5jdGlvbihuKXtyZXR1cm4gbis9IiIsdGhpc1t2K25dPW4sdGhpc30scmVtb3ZlOnAucmVtb3ZlLGNsZWFyOnAuY2xlYXIsdmFsdWVzOnAua2V5cyxzaXplOnAuc2l6ZSxlbXB0eTpwLmVtcHR5LGVhY2g6cC5lYWNofSxuLm5lc3Q9cixuLnNldD1jLG4ubWFwPWUsbi5rZXlzPWEsbi52YWx1ZXM9aCxuLmVudHJpZXM9bCxPYmplY3QuZGVmaW5lUHJvcGVydHkobiwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSl9KTs="></script>
<script src="data:application/x-javascript;base64,Ly8gaHR0cHM6Ly9kM2pzLm9yZy9kMy1mb3JtYXQvIFZlcnNpb24gMS4wLjIuIENvcHlyaWdodCAyMDE2IE1pa2UgQm9zdG9jay4KIWZ1bmN0aW9uKHQsbil7Im9iamVjdCI9PXR5cGVvZiBleHBvcnRzJiYidW5kZWZpbmVkIiE9dHlwZW9mIG1vZHVsZT9uKGV4cG9ydHMpOiJmdW5jdGlvbiI9PXR5cGVvZiBkZWZpbmUmJmRlZmluZS5hbWQ/ZGVmaW5lKFsiZXhwb3J0cyJdLG4pOm4odC5kMz10LmQzfHx7fSl9KHRoaXMsZnVuY3Rpb24odCl7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIG4odCxuKXtpZigocj0odD1uP3QudG9FeHBvbmVudGlhbChuLTEpOnQudG9FeHBvbmVudGlhbCgpKS5pbmRleE9mKCJlIikpPDApcmV0dXJuIG51bGw7dmFyIHIsZT10LnNsaWNlKDAscik7cmV0dXJuW2UubGVuZ3RoPjE/ZVswXStlLnNsaWNlKDIpOmUsK3Quc2xpY2UocisxKV19ZnVuY3Rpb24gcih0KXtyZXR1cm4gdD1uKE1hdGguYWJzKHQpKSx0P3RbMV06TmFOfWZ1bmN0aW9uIGUodCxuKXtyZXR1cm4gZnVuY3Rpb24ocixlKXtmb3IodmFyIGk9ci5sZW5ndGgsbz1bXSxhPTAsdT10WzBdLHM9MDtpPjAmJnU+MCYmKHMrdSsxPmUmJih1PU1hdGgubWF4KDEsZS1zKSksby5wdXNoKHIuc3Vic3RyaW5nKGktPXUsaSt1KSksISgocys9dSsxKT5lKSk7KXU9dFthPShhKzEpJXQubGVuZ3RoXTtyZXR1cm4gby5yZXZlcnNlKCkuam9pbihuKX19ZnVuY3Rpb24gaSh0LG4pe3Q9dC50b1ByZWNpc2lvbihuKTt0OmZvcih2YXIgcixlPXQubGVuZ3RoLGk9MSxvPS0xO2k8ZTsrK2kpc3dpdGNoKHRbaV0pe2Nhc2UiLiI6bz1yPWk7YnJlYWs7Y2FzZSIwIjowPT09byYmKG89aSkscj1pO2JyZWFrO2Nhc2UiZSI6YnJlYWsgdDtkZWZhdWx0Om8+MCYmKG89MCl9cmV0dXJuIG8+MD90LnNsaWNlKDAsbykrdC5zbGljZShyKzEpOnR9ZnVuY3Rpb24gbyh0LHIpe3ZhciBlPW4odCxyKTtpZighZSlyZXR1cm4gdCsiIjt2YXIgaT1lWzBdLG89ZVsxXSxhPW8tKGQ9MypNYXRoLm1heCgtOCxNYXRoLm1pbig4LE1hdGguZmxvb3Ioby8zKSkpKSsxLHU9aS5sZW5ndGg7cmV0dXJuIGE9PT11P2k6YT51P2krbmV3IEFycmF5KGEtdSsxKS5qb2luKCIwIik6YT4wP2kuc2xpY2UoMCxhKSsiLiIraS5zbGljZShhKToiMC4iK25ldyBBcnJheSgxLWEpLmpvaW4oIjAiKStuKHQsTWF0aC5tYXgoMCxyK2EtMSkpWzBdfWZ1bmN0aW9uIGEodCxyKXt2YXIgZT1uKHQscik7aWYoIWUpcmV0dXJuIHQrIiI7dmFyIGk9ZVswXSxvPWVbMV07cmV0dXJuIG88MD8iMC4iK25ldyBBcnJheSgoLW8pKS5qb2luKCIwIikraTppLmxlbmd0aD5vKzE/aS5zbGljZSgwLG8rMSkrIi4iK2kuc2xpY2UobysxKTppK25ldyBBcnJheShvLWkubGVuZ3RoKzIpLmpvaW4oIjAiKX1mdW5jdGlvbiB1KHQpe3JldHVybiBuZXcgcyh0KX1mdW5jdGlvbiBzKHQpe2lmKCEobj1NLmV4ZWModCkpKXRocm93IG5ldyBFcnJvcigiaW52YWxpZCBmb3JtYXQ6ICIrdCk7dmFyIG4scj1uWzFdfHwiICIsZT1uWzJdfHwiPiIsaT1uWzNdfHwiLSIsbz1uWzRdfHwiIixhPSEhbls1XSx1PW5bNl0mJituWzZdLHM9ISFuWzddLGM9bls4XSYmK25bOF0uc2xpY2UoMSksZj1uWzldfHwiIjsibiI9PT1mPyhzPSEwLGY9ImciKTpwW2ZdfHwoZj0iIiksKGF8fCIwIj09PXImJiI9Ij09PWUpJiYoYT0hMCxyPSIwIixlPSI9IiksdGhpcy5maWxsPXIsdGhpcy5hbGlnbj1lLHRoaXMuc2lnbj1pLHRoaXMuc3ltYm9sPW8sdGhpcy56ZXJvPWEsdGhpcy53aWR0aD11LHRoaXMuY29tbWE9cyx0aGlzLnByZWNpc2lvbj1jLHRoaXMudHlwZT1mfWZ1bmN0aW9uIGModCl7cmV0dXJuIHR9ZnVuY3Rpb24gZih0KXtmdW5jdGlvbiBuKHQpe2Z1bmN0aW9uIG4odCl7dmFyIG4sYSx1LGM9TSxwPXg7aWYoImMiPT09ZylwPXYodCkrcCx0PSIiO2Vsc2V7dD0rdDt2YXIgdz0odDwwfHwxL3Q8MCkmJih0Kj0tMSwhMCk7aWYodD12KHQsbSksdylmb3Iobj0tMSxhPXQubGVuZ3RoLHc9ITE7KytuPGE7KWlmKHU9dC5jaGFyQ29kZUF0KG4pLDQ4PHUmJnU8NTh8fCJ4Ij09PWcmJjk2PHUmJnU8MTAzfHwiWCI9PT1nJiY2NDx1JiZ1PDcxKXt3PSEwO2JyZWFrfWlmKGM9KHc/IigiPT09aT9pOiItIjoiLSI9PT1pfHwiKCI9PT1pPyIiOmkpK2MscD1wKygicyI9PT1nP3lbOCtkLzNdOiIiKSsodyYmIigiPT09aT8iKSI6IiIpLGIpZm9yKG49LTEsYT10Lmxlbmd0aDsrK248YTspaWYodT10LmNoYXJDb2RlQXQobiksNDg+dXx8dT41Nyl7cD0oNDY9PT11P3MrdC5zbGljZShuKzEpOnQuc2xpY2UobikpK3AsdD10LnNsaWNlKDAsbik7YnJlYWt9fWwmJiFmJiYodD1vKHQsMS8wKSk7dmFyIGo9Yy5sZW5ndGgrdC5sZW5ndGgrcC5sZW5ndGgsUD1qPGg/bmV3IEFycmF5KGgtaisxKS5qb2luKHIpOiIiO3N3aXRjaChsJiZmJiYodD1vKFArdCxQLmxlbmd0aD9oLXAubGVuZ3RoOjEvMCksUD0iIiksZSl7Y2FzZSI8IjpyZXR1cm4gYyt0K3ArUDtjYXNlIj0iOnJldHVybiBjK1ArdCtwO2Nhc2UiXiI6cmV0dXJuIFAuc2xpY2UoMCxqPVAubGVuZ3RoPj4xKStjK3QrcCtQLnNsaWNlKGopfXJldHVybiBQK2MrdCtwfXQ9dSh0KTt2YXIgcj10LmZpbGwsZT10LmFsaWduLGk9dC5zaWduLGM9dC5zeW1ib2wsZj10Lnplcm8saD10LndpZHRoLGw9dC5jb21tYSxtPXQucHJlY2lzaW9uLGc9dC50eXBlLE09IiQiPT09Yz9hWzBdOiIjIj09PWMmJi9bYm94WF0vLnRlc3QoZyk/IjAiK2cudG9Mb3dlckNhc2UoKToiIix4PSIkIj09PWM/YVsxXTovWyVwXS8udGVzdChnKT8iJSI6IiIsdj1wW2ddLGI9IWd8fC9bZGVmZ3BycyVdLy50ZXN0KGcpO3JldHVybiBtPW51bGw9PW0/Zz82OjEyOi9bZ3Byc10vLnRlc3QoZyk/TWF0aC5tYXgoMSxNYXRoLm1pbigyMSxtKSk6TWF0aC5tYXgoMCxNYXRoLm1pbigyMCxtKSksbi50b1N0cmluZz1mdW5jdGlvbigpe3JldHVybiB0KyIifSxufWZ1bmN0aW9uIGkodCxlKXt2YXIgaT1uKCh0PXUodCksdC50eXBlPSJmIix0KSksbz0zKk1hdGgubWF4KC04LE1hdGgubWluKDgsTWF0aC5mbG9vcihyKGUpLzMpKSksYT1NYXRoLnBvdygxMCwtbykscz15Wzgrby8zXTtyZXR1cm4gZnVuY3Rpb24odCl7cmV0dXJuIGkoYSp0KStzfX12YXIgbz10Lmdyb3VwaW5nJiZ0LnRob3VzYW5kcz9lKHQuZ3JvdXBpbmcsdC50aG91c2FuZHMpOmMsYT10LmN1cnJlbmN5LHM9dC5kZWNpbWFsO3JldHVybntmb3JtYXQ6bixmb3JtYXRQcmVmaXg6aX19ZnVuY3Rpb24gaChuKXtyZXR1cm4geD1mKG4pLHQuZm9ybWF0PXguZm9ybWF0LHQuZm9ybWF0UHJlZml4PXguZm9ybWF0UHJlZml4LHh9ZnVuY3Rpb24gbCh0KXtyZXR1cm4gTWF0aC5tYXgoMCwtcihNYXRoLmFicyh0KSkpfWZ1bmN0aW9uIG0odCxuKXtyZXR1cm4gTWF0aC5tYXgoMCwzKk1hdGgubWF4KC04LE1hdGgubWluKDgsTWF0aC5mbG9vcihyKG4pLzMpKSktcihNYXRoLmFicyh0KSkpfWZ1bmN0aW9uIGcodCxuKXtyZXR1cm4gdD1NYXRoLmFicyh0KSxuPU1hdGguYWJzKG4pLXQsTWF0aC5tYXgoMCxyKG4pLXIodCkpKzF9dmFyIGQscD17IiI6aSwiJSI6ZnVuY3Rpb24odCxuKXtyZXR1cm4oMTAwKnQpLnRvRml4ZWQobil9LGI6ZnVuY3Rpb24odCl7cmV0dXJuIE1hdGgucm91bmQodCkudG9TdHJpbmcoMil9LGM6ZnVuY3Rpb24odCl7cmV0dXJuIHQrIiJ9LGQ6ZnVuY3Rpb24odCl7cmV0dXJuIE1hdGgucm91bmQodCkudG9TdHJpbmcoMTApfSxlOmZ1bmN0aW9uKHQsbil7cmV0dXJuIHQudG9FeHBvbmVudGlhbChuKX0sZjpmdW5jdGlvbih0LG4pe3JldHVybiB0LnRvRml4ZWQobil9LGc6ZnVuY3Rpb24odCxuKXtyZXR1cm4gdC50b1ByZWNpc2lvbihuKX0sbzpmdW5jdGlvbih0KXtyZXR1cm4gTWF0aC5yb3VuZCh0KS50b1N0cmluZyg4KX0scDpmdW5jdGlvbih0LG4pe3JldHVybiBhKDEwMCp0LG4pfSxyOmEsczpvLFg6ZnVuY3Rpb24odCl7cmV0dXJuIE1hdGgucm91bmQodCkudG9TdHJpbmcoMTYpLnRvVXBwZXJDYXNlKCl9LHg6ZnVuY3Rpb24odCl7cmV0dXJuIE1hdGgucm91bmQodCkudG9TdHJpbmcoMTYpfX0sTT0vXig/OiguKT8oWzw+PV5dKSk/KFsrXC1cKCBdKT8oWyQjXSk/KDApPyhcZCspPygsKT8oXC5cZCspPyhbYS16JV0pPyQvaTtzLnByb3RvdHlwZS50b1N0cmluZz1mdW5jdGlvbigpe3JldHVybiB0aGlzLmZpbGwrdGhpcy5hbGlnbit0aGlzLnNpZ24rdGhpcy5zeW1ib2wrKHRoaXMuemVybz8iMCI6IiIpKyhudWxsPT10aGlzLndpZHRoPyIiOk1hdGgubWF4KDEsMHx0aGlzLndpZHRoKSkrKHRoaXMuY29tbWE/IiwiOiIiKSsobnVsbD09dGhpcy5wcmVjaXNpb24/IiI6Ii4iK01hdGgubWF4KDAsMHx0aGlzLnByZWNpc2lvbikpK3RoaXMudHlwZX07dmFyIHgseT1bInkiLCJ6IiwiYSIsImYiLCJwIiwibiIsIsK1IiwibSIsIiIsImsiLCJNIiwiRyIsIlQiLCJQIiwiRSIsIloiLCJZIl07aCh7ZGVjaW1hbDoiLiIsdGhvdXNhbmRzOiIsIixncm91cGluZzpbM10sY3VycmVuY3k6WyIkIiwiIl19KSx0LmZvcm1hdERlZmF1bHRMb2NhbGU9aCx0LmZvcm1hdExvY2FsZT1mLHQuZm9ybWF0U3BlY2lmaWVyPXUsdC5wcmVjaXNpb25GaXhlZD1sLHQucHJlY2lzaW9uUHJlZml4PW0sdC5wcmVjaXNpb25Sb3VuZD1nLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KX0pOw=="></script>
<script src="data:application/x-javascript;base64,Ly8gaHR0cHM6Ly9kM2pzLm9yZy9kMy1kaXNwYXRjaC8gVmVyc2lvbiAxLjAuMS4gQ29weXJpZ2h0IDIwMTYgTWlrZSBCb3N0b2NrLgohZnVuY3Rpb24obixlKXsib2JqZWN0Ij09dHlwZW9mIGV4cG9ydHMmJiJ1bmRlZmluZWQiIT10eXBlb2YgbW9kdWxlP2UoZXhwb3J0cyk6ImZ1bmN0aW9uIj09dHlwZW9mIGRlZmluZSYmZGVmaW5lLmFtZD9kZWZpbmUoWyJleHBvcnRzIl0sZSk6ZShuLmQzPW4uZDN8fHt9KX0odGhpcyxmdW5jdGlvbihuKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gZSgpe2Zvcih2YXIgbixlPTAscj1hcmd1bWVudHMubGVuZ3RoLG89e307ZTxyOysrZSl7aWYoIShuPWFyZ3VtZW50c1tlXSsiIil8fG4gaW4gbyl0aHJvdyBuZXcgRXJyb3IoImlsbGVnYWwgdHlwZTogIituKTtvW25dPVtdfXJldHVybiBuZXcgdChvKX1mdW5jdGlvbiB0KG4pe3RoaXMuXz1ufWZ1bmN0aW9uIHIobixlKXtyZXR1cm4gbi50cmltKCkuc3BsaXQoL158XHMrLykubWFwKGZ1bmN0aW9uKG4pe3ZhciB0PSIiLHI9bi5pbmRleE9mKCIuIik7aWYocj49MCYmKHQ9bi5zbGljZShyKzEpLG49bi5zbGljZSgwLHIpKSxuJiYhZS5oYXNPd25Qcm9wZXJ0eShuKSl0aHJvdyBuZXcgRXJyb3IoInVua25vd24gdHlwZTogIituKTtyZXR1cm57dHlwZTpuLG5hbWU6dH19KX1mdW5jdGlvbiBvKG4sZSl7Zm9yKHZhciB0LHI9MCxvPW4ubGVuZ3RoO3I8bzsrK3IpaWYoKHQ9bltyXSkubmFtZT09PWUpcmV0dXJuIHQudmFsdWV9ZnVuY3Rpb24gaShuLGUsdCl7Zm9yKHZhciByPTAsbz1uLmxlbmd0aDtyPG87KytyKWlmKG5bcl0ubmFtZT09PWUpe25bcl09ZixuPW4uc2xpY2UoMCxyKS5jb25jYXQobi5zbGljZShyKzEpKTticmVha31yZXR1cm4gbnVsbCE9dCYmbi5wdXNoKHtuYW1lOmUsdmFsdWU6dH0pLG59dmFyIGY9e3ZhbHVlOmZ1bmN0aW9uKCl7fX07dC5wcm90b3R5cGU9ZS5wcm90b3R5cGU9e2NvbnN0cnVjdG9yOnQsb246ZnVuY3Rpb24obixlKXt2YXIgdCxmPXRoaXMuXyxsPXIobisiIixmKSx1PS0xLGE9bC5sZW5ndGg7e2lmKCEoYXJndW1lbnRzLmxlbmd0aDwyKSl7aWYobnVsbCE9ZSYmImZ1bmN0aW9uIiE9dHlwZW9mIGUpdGhyb3cgbmV3IEVycm9yKCJpbnZhbGlkIGNhbGxiYWNrOiAiK2UpO2Zvcig7Kyt1PGE7KWlmKHQ9KG49bFt1XSkudHlwZSlmW3RdPWkoZlt0XSxuLm5hbWUsZSk7ZWxzZSBpZihudWxsPT1lKWZvcih0IGluIGYpZlt0XT1pKGZbdF0sbi5uYW1lLG51bGwpO3JldHVybiB0aGlzfWZvcig7Kyt1PGE7KWlmKCh0PShuPWxbdV0pLnR5cGUpJiYodD1vKGZbdF0sbi5uYW1lKSkpcmV0dXJuIHR9fSxjb3B5OmZ1bmN0aW9uKCl7dmFyIG49e30sZT10aGlzLl87Zm9yKHZhciByIGluIGUpbltyXT1lW3JdLnNsaWNlKCk7cmV0dXJuIG5ldyB0KG4pfSxjYWxsOmZ1bmN0aW9uKG4sZSl7aWYoKHQ9YXJndW1lbnRzLmxlbmd0aC0yKT4wKWZvcih2YXIgdCxyLG89bmV3IEFycmF5KHQpLGk9MDtpPHQ7KytpKW9baV09YXJndW1lbnRzW2krMl07aWYoIXRoaXMuXy5oYXNPd25Qcm9wZXJ0eShuKSl0aHJvdyBuZXcgRXJyb3IoInVua25vd24gdHlwZTogIituKTtmb3Iocj10aGlzLl9bbl0saT0wLHQ9ci5sZW5ndGg7aTx0OysraSlyW2ldLnZhbHVlLmFwcGx5KGUsbyl9LGFwcGx5OmZ1bmN0aW9uKG4sZSx0KXtpZighdGhpcy5fLmhhc093blByb3BlcnR5KG4pKXRocm93IG5ldyBFcnJvcigidW5rbm93biB0eXBlOiAiK24pO2Zvcih2YXIgcj10aGlzLl9bbl0sbz0wLGk9ci5sZW5ndGg7bzxpOysrbylyW29dLnZhbHVlLmFwcGx5KGUsdCl9fSxuLmRpc3BhdGNoPWUsT2JqZWN0LmRlZmluZVByb3BlcnR5KG4sIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pfSk7"></script>
<script src="data:application/x-javascript;base64,Ly8gaHR0cHM6Ly9kM2pzLm9yZy9kMy1lYXNlLyBWZXJzaW9uIDEuMC4xLiBDb3B5cmlnaHQgMjAxNiBNaWtlIEJvc3RvY2suCiFmdW5jdGlvbihuLHQpeyJvYmplY3QiPT10eXBlb2YgZXhwb3J0cyYmInVuZGVmaW5lZCIhPXR5cGVvZiBtb2R1bGU/dChleHBvcnRzKToiZnVuY3Rpb24iPT10eXBlb2YgZGVmaW5lJiZkZWZpbmUuYW1kP2RlZmluZShbImV4cG9ydHMiXSx0KTp0KG4uZDM9bi5kM3x8e30pfSh0aGlzLGZ1bmN0aW9uKG4peyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiB0KG4pe3JldHVybitufWZ1bmN0aW9uIGUobil7cmV0dXJuIG4qbn1mdW5jdGlvbiB1KG4pe3JldHVybiBuKigyLW4pfWZ1bmN0aW9uIHIobil7cmV0dXJuKChuKj0yKTw9MT9uKm46LS1uKigyLW4pKzEpLzJ9ZnVuY3Rpb24gYShuKXtyZXR1cm4gbipuKm59ZnVuY3Rpb24gbyhuKXtyZXR1cm4tLW4qbipuKzF9ZnVuY3Rpb24gaShuKXtyZXR1cm4oKG4qPTIpPD0xP24qbipuOihuLT0yKSpuKm4rMikvMn1mdW5jdGlvbiBjKG4pe3JldHVybiAxLU1hdGguY29zKG4qRSl9ZnVuY3Rpb24gcyhuKXtyZXR1cm4gTWF0aC5zaW4obipFKX1mdW5jdGlvbiBmKG4pe3JldHVybigxLU1hdGguY29zKEMqbikpLzJ9ZnVuY3Rpb24gaChuKXtyZXR1cm4gTWF0aC5wb3coMiwxMCpuLTEwKX1mdW5jdGlvbiBwKG4pe3JldHVybiAxLU1hdGgucG93KDIsLTEwKm4pfWZ1bmN0aW9uIE0obil7cmV0dXJuKChuKj0yKTw9MT9NYXRoLnBvdygyLDEwKm4tMTApOjItTWF0aC5wb3coMiwxMC0xMCpuKSkvMn1mdW5jdGlvbiBkKG4pe3JldHVybiAxLU1hdGguc3FydCgxLW4qbil9ZnVuY3Rpb24gSShuKXtyZXR1cm4gTWF0aC5zcXJ0KDEtIC0tbipuKX1mdW5jdGlvbiBPKG4pe3JldHVybigobio9Mik8PTE/MS1NYXRoLnNxcnQoMS1uKm4pOk1hdGguc3FydCgxLShuLT0yKSpuKSsxKS8yfWZ1bmN0aW9uIGwobil7cmV0dXJuIDEteCgxLW4pfWZ1bmN0aW9uIHgobil7cmV0dXJuKG49K24pPFA/ZypuKm46bjxrP2cqKG4tPWIpKm4rcTpuPFM/Zyoobi09USkqbitqOmcqKG4tPV8pKm4rTH1mdW5jdGlvbiB3KG4pe3JldHVybigobio9Mik8PTE/MS14KDEtbik6eChuLTEpKzEpLzJ9dmFyIG09Myx2PWZ1bmN0aW9uIG4odCl7ZnVuY3Rpb24gZShuKXtyZXR1cm4gTWF0aC5wb3cobix0KX1yZXR1cm4gdD0rdCxlLmV4cG9uZW50PW4sZX0obSkseT1mdW5jdGlvbiBuKHQpe2Z1bmN0aW9uIGUobil7cmV0dXJuIDEtTWF0aC5wb3coMS1uLHQpfXJldHVybiB0PSt0LGUuZXhwb25lbnQ9bixlfShtKSxCPWZ1bmN0aW9uIG4odCl7ZnVuY3Rpb24gZShuKXtyZXR1cm4oKG4qPTIpPD0xP01hdGgucG93KG4sdCk6Mi1NYXRoLnBvdygyLW4sdCkpLzJ9cmV0dXJuIHQ9K3QsZS5leHBvbmVudD1uLGV9KG0pLEM9TWF0aC5QSSxFPUMvMixQPTQvMTEsYj02LzExLGs9OC8xMSxxPS43NSxRPTkvMTEsUz0xMC8xMSxqPS45Mzc1LF89MjEvMjIsTD02My82NCxnPTEvUC9QLHo9MS43MDE1OCxBPWZ1bmN0aW9uIG4odCl7ZnVuY3Rpb24gZShuKXtyZXR1cm4gbipuKigodCsxKSpuLXQpfXJldHVybiB0PSt0LGUub3ZlcnNob290PW4sZX0oeiksRD1mdW5jdGlvbiBuKHQpe2Z1bmN0aW9uIGUobil7cmV0dXJuLS1uKm4qKCh0KzEpKm4rdCkrMX1yZXR1cm4gdD0rdCxlLm92ZXJzaG9vdD1uLGV9KHopLEY9ZnVuY3Rpb24gbih0KXtmdW5jdGlvbiBlKG4pe3JldHVybigobio9Mik8MT9uKm4qKCh0KzEpKm4tdCk6KG4tPTIpKm4qKCh0KzEpKm4rdCkrMikvMn1yZXR1cm4gdD0rdCxlLm92ZXJzaG9vdD1uLGV9KHopLEc9MipNYXRoLlBJLEg9MSxKPS4zLEs9ZnVuY3Rpb24gbih0LGUpe2Z1bmN0aW9uIHUobil7cmV0dXJuIHQqTWF0aC5wb3coMiwxMCotLW4pKk1hdGguc2luKChyLW4pL2UpfXZhciByPU1hdGguYXNpbigxLyh0PU1hdGgubWF4KDEsdCkpKSooZS89Ryk7cmV0dXJuIHUuYW1wbGl0dWRlPWZ1bmN0aW9uKHQpe3JldHVybiBuKHQsZSpHKX0sdS5wZXJpb2Q9ZnVuY3Rpb24oZSl7cmV0dXJuIG4odCxlKX0sdX0oSCxKKSxOPWZ1bmN0aW9uIG4odCxlKXtmdW5jdGlvbiB1KG4pe3JldHVybiAxLXQqTWF0aC5wb3coMiwtMTAqKG49K24pKSpNYXRoLnNpbigobityKS9lKX12YXIgcj1NYXRoLmFzaW4oMS8odD1NYXRoLm1heCgxLHQpKSkqKGUvPUcpO3JldHVybiB1LmFtcGxpdHVkZT1mdW5jdGlvbih0KXtyZXR1cm4gbih0LGUqRyl9LHUucGVyaW9kPWZ1bmN0aW9uKGUpe3JldHVybiBuKHQsZSl9LHV9KEgsSiksUj1mdW5jdGlvbiBuKHQsZSl7ZnVuY3Rpb24gdShuKXtyZXR1cm4oKG49MipuLTEpPDA/dCpNYXRoLnBvdygyLDEwKm4pKk1hdGguc2luKChyLW4pL2UpOjItdCpNYXRoLnBvdygyLC0xMCpuKSpNYXRoLnNpbigocituKS9lKSkvMn12YXIgcj1NYXRoLmFzaW4oMS8odD1NYXRoLm1heCgxLHQpKSkqKGUvPUcpO3JldHVybiB1LmFtcGxpdHVkZT1mdW5jdGlvbih0KXtyZXR1cm4gbih0LGUqRyl9LHUucGVyaW9kPWZ1bmN0aW9uKGUpe3JldHVybiBuKHQsZSl9LHV9KEgsSik7bi5lYXNlTGluZWFyPXQsbi5lYXNlUXVhZD1yLG4uZWFzZVF1YWRJbj1lLG4uZWFzZVF1YWRPdXQ9dSxuLmVhc2VRdWFkSW5PdXQ9cixuLmVhc2VDdWJpYz1pLG4uZWFzZUN1YmljSW49YSxuLmVhc2VDdWJpY091dD1vLG4uZWFzZUN1YmljSW5PdXQ9aSxuLmVhc2VQb2x5PUIsbi5lYXNlUG9seUluPXYsbi5lYXNlUG9seU91dD15LG4uZWFzZVBvbHlJbk91dD1CLG4uZWFzZVNpbj1mLG4uZWFzZVNpbkluPWMsbi5lYXNlU2luT3V0PXMsbi5lYXNlU2luSW5PdXQ9ZixuLmVhc2VFeHA9TSxuLmVhc2VFeHBJbj1oLG4uZWFzZUV4cE91dD1wLG4uZWFzZUV4cEluT3V0PU0sbi5lYXNlQ2lyY2xlPU8sbi5lYXNlQ2lyY2xlSW49ZCxuLmVhc2VDaXJjbGVPdXQ9SSxuLmVhc2VDaXJjbGVJbk91dD1PLG4uZWFzZUJvdW5jZT14LG4uZWFzZUJvdW5jZUluPWwsbi5lYXNlQm91bmNlT3V0PXgsbi5lYXNlQm91bmNlSW5PdXQ9dyxuLmVhc2VCYWNrPUYsbi5lYXNlQmFja0luPUEsbi5lYXNlQmFja091dD1ELG4uZWFzZUJhY2tJbk91dD1GLG4uZWFzZUVsYXN0aWM9TixuLmVhc2VFbGFzdGljSW49SyxuLmVhc2VFbGFzdGljT3V0PU4sbi5lYXNlRWxhc3RpY0luT3V0PVIsT2JqZWN0LmRlZmluZVByb3BlcnR5KG4sIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pfSk7"></script>
<script src="data:application/x-javascript;base64,Ly8gaHR0cHM6Ly9kM2pzLm9yZy9kMy1pbnRlcnBvbGF0ZS8gVmVyc2lvbiAxLjEuMS4gQ29weXJpZ2h0IDIwMTYgTWlrZSBCb3N0b2NrLgohZnVuY3Rpb24odCxuKXsib2JqZWN0Ij09dHlwZW9mIGV4cG9ydHMmJiJ1bmRlZmluZWQiIT10eXBlb2YgbW9kdWxlP24oZXhwb3J0cyxyZXF1aXJlKCJkMy1jb2xvciIpKToiZnVuY3Rpb24iPT10eXBlb2YgZGVmaW5lJiZkZWZpbmUuYW1kP2RlZmluZShbImV4cG9ydHMiLCJkMy1jb2xvciJdLG4pOm4odC5kMz10LmQzfHx7fSx0LmQzKX0odGhpcyxmdW5jdGlvbih0LG4peyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiByKHQsbixyLGUsbyl7dmFyIGE9dCp0LHU9YSp0O3JldHVybigoMS0zKnQrMyphLXUpKm4rKDQtNiphKzMqdSkqcisoMSszKnQrMyphLTMqdSkqZSt1Km8pLzZ9ZnVuY3Rpb24gZSh0KXt2YXIgbj10Lmxlbmd0aC0xO3JldHVybiBmdW5jdGlvbihlKXt2YXIgbz1lPD0wP2U9MDplPj0xPyhlPTEsbi0xKTpNYXRoLmZsb29yKGUqbiksYT10W29dLHU9dFtvKzFdLGk9bz4wP3Rbby0xXToyKmEtdSxsPW88bi0xP3RbbysyXToyKnUtYTtyZXR1cm4gcigoZS1vL24pKm4saSxhLHUsbCl9fWZ1bmN0aW9uIG8odCl7dmFyIG49dC5sZW5ndGg7cmV0dXJuIGZ1bmN0aW9uKGUpe3ZhciBvPU1hdGguZmxvb3IoKChlJT0xKTwwPysrZTplKSpuKSxhPXRbKG8rbi0xKSVuXSx1PXRbbyVuXSxpPXRbKG8rMSklbl0sbD10WyhvKzIpJW5dO3JldHVybiByKChlLW8vbikqbixhLHUsaSxsKX19ZnVuY3Rpb24gYSh0KXtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gdH19ZnVuY3Rpb24gdSh0LG4pe3JldHVybiBmdW5jdGlvbihyKXtyZXR1cm4gdCtyKm59fWZ1bmN0aW9uIGkodCxuLHIpe3JldHVybiB0PU1hdGgucG93KHQsciksbj1NYXRoLnBvdyhuLHIpLXQscj0xL3IsZnVuY3Rpb24oZSl7cmV0dXJuIE1hdGgucG93KHQrZSpuLHIpfX1mdW5jdGlvbiBsKHQsbil7dmFyIHI9bi10O3JldHVybiByP3UodCxyPjE4MHx8cjwtMTgwP3ItMzYwKk1hdGgucm91bmQoci8zNjApOnIpOmEoaXNOYU4odCk/bjp0KX1mdW5jdGlvbiBjKHQpe3JldHVybiAxPT09KHQ9K3QpP2Y6ZnVuY3Rpb24obixyKXtyZXR1cm4gci1uP2kobixyLHQpOmEoaXNOYU4obik/cjpuKX19ZnVuY3Rpb24gZih0LG4pe3ZhciByPW4tdDtyZXR1cm4gcj91KHQscik6YShpc05hTih0KT9uOnQpfWZ1bmN0aW9uIHModCl7cmV0dXJuIGZ1bmN0aW9uKHIpe3ZhciBlLG8sYT1yLmxlbmd0aCx1PW5ldyBBcnJheShhKSxpPW5ldyBBcnJheShhKSxsPW5ldyBBcnJheShhKTtmb3IoZT0wO2U8YTsrK2Upbz1uLnJnYihyW2VdKSx1W2VdPW8ucnx8MCxpW2VdPW8uZ3x8MCxsW2VdPW8uYnx8MDtyZXR1cm4gdT10KHUpLGk9dChpKSxsPXQobCksby5vcGFjaXR5PTEsZnVuY3Rpb24odCl7cmV0dXJuIG8ucj11KHQpLG8uZz1pKHQpLG8uYj1sKHQpLG8rIiJ9fX1mdW5jdGlvbiBwKHQsbil7dmFyIHIsZT1uP24ubGVuZ3RoOjAsbz10P01hdGgubWluKGUsdC5sZW5ndGgpOjAsYT1uZXcgQXJyYXkoZSksdT1uZXcgQXJyYXkoZSk7Zm9yKHI9MDtyPG87KytyKWFbcl09eCh0W3JdLG5bcl0pO2Zvcig7cjxlOysrcil1W3JdPW5bcl07cmV0dXJuIGZ1bmN0aW9uKHQpe2ZvcihyPTA7cjxvOysrcil1W3JdPWFbcl0odCk7cmV0dXJuIHV9fWZ1bmN0aW9uIGgodCxuKXt2YXIgcj1uZXcgRGF0ZTtyZXR1cm4gdD0rdCxuLT10LGZ1bmN0aW9uKGUpe3JldHVybiByLnNldFRpbWUodCtuKmUpLHJ9fWZ1bmN0aW9uIGQodCxuKXtyZXR1cm4gdD0rdCxuLT10LGZ1bmN0aW9uKHIpe3JldHVybiB0K24qcn19ZnVuY3Rpb24gZyh0LG4pe3ZhciByLGU9e30sbz17fTtudWxsIT09dCYmIm9iamVjdCI9PXR5cGVvZiB0fHwodD17fSksbnVsbCE9PW4mJiJvYmplY3QiPT10eXBlb2Ygbnx8KG49e30pO2ZvcihyIGluIG4pciBpbiB0P2Vbcl09eCh0W3JdLG5bcl0pOm9bcl09bltyXTtyZXR1cm4gZnVuY3Rpb24odCl7Zm9yKHIgaW4gZSlvW3JdPWVbcl0odCk7cmV0dXJuIG99fWZ1bmN0aW9uIHkodCl7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIHR9fWZ1bmN0aW9uIHYodCl7cmV0dXJuIGZ1bmN0aW9uKG4pe3JldHVybiB0KG4pKyIifX1mdW5jdGlvbiBiKHQsbil7dmFyIHIsZSxvLGE9UC5sYXN0SW5kZXg9Ty5sYXN0SW5kZXg9MCx1PS0xLGk9W10sbD1bXTtmb3IodCs9IiIsbis9IiI7KHI9UC5leGVjKHQpKSYmKGU9Ty5leGVjKG4pKTspKG89ZS5pbmRleCk+YSYmKG89bi5zbGljZShhLG8pLGlbdV0/aVt1XSs9bzppWysrdV09byksKHI9clswXSk9PT0oZT1lWzBdKT9pW3VdP2lbdV0rPWU6aVsrK3VdPWU6KGlbKyt1XT1udWxsLGwucHVzaCh7aTp1LHg6ZChyLGUpfSkpLGE9Ty5sYXN0SW5kZXg7cmV0dXJuIGE8bi5sZW5ndGgmJihvPW4uc2xpY2UoYSksaVt1XT9pW3VdKz1vOmlbKyt1XT1vKSxpLmxlbmd0aDwyP2xbMF0/dihsWzBdLngpOnkobik6KG49bC5sZW5ndGgsZnVuY3Rpb24odCl7Zm9yKHZhciByLGU9MDtlPG47KytlKWlbKHI9bFtlXSkuaV09ci54KHQpO3JldHVybiBpLmpvaW4oIiIpfSl9ZnVuY3Rpb24geCh0LHIpe3ZhciBlLG89dHlwZW9mIHI7cmV0dXJuIG51bGw9PXJ8fCJib29sZWFuIj09PW8/YShyKTooIm51bWJlciI9PT1vP2Q6InN0cmluZyI9PT1vPyhlPW4uY29sb3IocikpPyhyPWUsTCk6YjpyIGluc3RhbmNlb2Ygbi5jb2xvcj9MOnIgaW5zdGFuY2VvZiBEYXRlP2g6QXJyYXkuaXNBcnJheShyKT9wOmlzTmFOKHIpP2c6ZCkodCxyKX1mdW5jdGlvbiBtKHQsbil7cmV0dXJuIHQ9K3Qsbi09dCxmdW5jdGlvbihyKXtyZXR1cm4gTWF0aC5yb3VuZCh0K24qcil9fWZ1bmN0aW9uIE0odCxuLHIsZSxvLGEpe3ZhciB1LGksbDtyZXR1cm4odT1NYXRoLnNxcnQodCp0K24qbikpJiYodC89dSxuLz11KSwobD10KnIrbiplKSYmKHItPXQqbCxlLT1uKmwpLChpPU1hdGguc3FydChyKnIrZSplKSkmJihyLz1pLGUvPWksbC89aSksdCplPG4qciYmKHQ9LXQsbj0tbixsPS1sLHU9LXUpLHt0cmFuc2xhdGVYOm8sdHJhbnNsYXRlWTphLHJvdGF0ZTpNYXRoLmF0YW4yKG4sdCkqXyxza2V3WDpNYXRoLmF0YW4obCkqXyxzY2FsZVg6dSxzY2FsZVk6aX19ZnVuY3Rpb24gdyh0KXtyZXR1cm4ibm9uZSI9PT10P3o6KFN8fChTPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoIkRJViIpLEI9ZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LEQ9ZG9jdW1lbnQuZGVmYXVsdFZpZXcpLFMuc3R5bGUudHJhbnNmb3JtPXQsdD1ELmdldENvbXB1dGVkU3R5bGUoQi5hcHBlbmRDaGlsZChTKSxudWxsKS5nZXRQcm9wZXJ0eVZhbHVlKCJ0cmFuc2Zvcm0iKSxCLnJlbW92ZUNoaWxkKFMpLHQ9dC5zbGljZSg3LC0xKS5zcGxpdCgiLCIpLE0oK3RbMF0sK3RbMV0sK3RbMl0sK3RbM10sK3RbNF0sK3RbNV0pKX1mdW5jdGlvbiBYKHQpe3JldHVybiBudWxsPT10P3o6KEh8fChIPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnROUygiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciLCJnIikpLEguc2V0QXR0cmlidXRlKCJ0cmFuc2Zvcm0iLHQpLCh0PUgudHJhbnNmb3JtLmJhc2VWYWwuY29uc29saWRhdGUoKSk/KHQ9dC5tYXRyaXgsTSh0LmEsdC5iLHQuYyx0LmQsdC5lLHQuZikpOnopfWZ1bmN0aW9uIEEodCxuLHIsZSl7ZnVuY3Rpb24gbyh0KXtyZXR1cm4gdC5sZW5ndGg/dC5wb3AoKSsiICI6IiJ9ZnVuY3Rpb24gYSh0LGUsbyxhLHUsaSl7aWYodCE9PW98fGUhPT1hKXt2YXIgbD11LnB1c2goInRyYW5zbGF0ZSgiLG51bGwsbixudWxsLHIpO2kucHVzaCh7aTpsLTQseDpkKHQsbyl9LHtpOmwtMix4OmQoZSxhKX0pfWVsc2Uob3x8YSkmJnUucHVzaCgidHJhbnNsYXRlKCIrbytuK2Ercil9ZnVuY3Rpb24gdSh0LG4scixhKXt0IT09bj8odC1uPjE4MD9uKz0zNjA6bi10PjE4MCYmKHQrPTM2MCksYS5wdXNoKHtpOnIucHVzaChvKHIpKyJyb3RhdGUoIixudWxsLGUpLTIseDpkKHQsbil9KSk6biYmci5wdXNoKG8ocikrInJvdGF0ZSgiK24rZSl9ZnVuY3Rpb24gaSh0LG4scixhKXt0IT09bj9hLnB1c2goe2k6ci5wdXNoKG8ocikrInNrZXdYKCIsbnVsbCxlKS0yLHg6ZCh0LG4pfSk6biYmci5wdXNoKG8ocikrInNrZXdYKCIrbitlKX1mdW5jdGlvbiBsKHQsbixyLGUsYSx1KXtpZih0IT09cnx8biE9PWUpe3ZhciBpPWEucHVzaChvKGEpKyJzY2FsZSgiLG51bGwsIiwiLG51bGwsIikiKTt1LnB1c2goe2k6aS00LHg6ZCh0LHIpfSx7aTppLTIseDpkKG4sZSl9KX1lbHNlIDE9PT1yJiYxPT09ZXx8YS5wdXNoKG8oYSkrInNjYWxlKCIrcisiLCIrZSsiKSIpfXJldHVybiBmdW5jdGlvbihuLHIpe3ZhciBlPVtdLG89W107cmV0dXJuIG49dChuKSxyPXQociksYShuLnRyYW5zbGF0ZVgsbi50cmFuc2xhdGVZLHIudHJhbnNsYXRlWCxyLnRyYW5zbGF0ZVksZSxvKSx1KG4ucm90YXRlLHIucm90YXRlLGUsbyksaShuLnNrZXdYLHIuc2tld1gsZSxvKSxsKG4uc2NhbGVYLG4uc2NhbGVZLHIuc2NhbGVYLHIuc2NhbGVZLGUsbyksbj1yPW51bGwsZnVuY3Rpb24odCl7Zm9yKHZhciBuLHI9LTEsYT1vLmxlbmd0aDsrK3I8YTspZVsobj1vW3JdKS5pXT1uLngodCk7cmV0dXJuIGUuam9pbigiIil9fX1mdW5jdGlvbiBOKHQpe3JldHVybigodD1NYXRoLmV4cCh0KSkrMS90KS8yfWZ1bmN0aW9uIEModCl7cmV0dXJuKCh0PU1hdGguZXhwKHQpKS0xL3QpLzJ9ZnVuY3Rpb24gWSh0KXtyZXR1cm4oKHQ9TWF0aC5leHAoMip0KSktMSkvKHQrMSl9ZnVuY3Rpb24gaih0LG4pe3ZhciByLGUsbz10WzBdLGE9dFsxXSx1PXRbMl0saT1uWzBdLGw9blsxXSxjPW5bMl0sZj1pLW8scz1sLWEscD1mKmYrcypzO2lmKHA8SyllPU1hdGgubG9nKGMvdSkvRixyPWZ1bmN0aW9uKHQpe3JldHVybltvK3QqZixhK3Qqcyx1Kk1hdGguZXhwKEYqdCplKV19O2Vsc2V7dmFyIGg9TWF0aC5zcXJ0KHApLGQ9KGMqYy11KnUrSipwKS8oMip1KkcqaCksZz0oYypjLXUqdS1KKnApLygyKmMqRypoKSx5PU1hdGgubG9nKE1hdGguc3FydChkKmQrMSktZCksdj1NYXRoLmxvZyhNYXRoLnNxcnQoZypnKzEpLWcpO2U9KHYteSkvRixyPWZ1bmN0aW9uKHQpe3ZhciBuPXQqZSxyPU4oeSksaT11LyhHKmgpKihyKlkoRipuK3kpLUMoeSkpO3JldHVybltvK2kqZixhK2kqcyx1KnIvTihGKm4reSldfX1yZXR1cm4gci5kdXJhdGlvbj0xZTMqZSxyfWZ1bmN0aW9uIHEodCl7cmV0dXJuIGZ1bmN0aW9uKHIsZSl7dmFyIG89dCgocj1uLmhzbChyKSkuaCwoZT1uLmhzbChlKSkuaCksYT1mKHIucyxlLnMpLHU9ZihyLmwsZS5sKSxpPWYoci5vcGFjaXR5LGUub3BhY2l0eSk7cmV0dXJuIGZ1bmN0aW9uKHQpe3JldHVybiByLmg9byh0KSxyLnM9YSh0KSxyLmw9dSh0KSxyLm9wYWNpdHk9aSh0KSxyKyIifX19ZnVuY3Rpb24gayh0LHIpe3ZhciBlPWYoKHQ9bi5sYWIodCkpLmwsKHI9bi5sYWIocikpLmwpLG89Zih0LmEsci5hKSxhPWYodC5iLHIuYiksdT1mKHQub3BhY2l0eSxyLm9wYWNpdHkpO3JldHVybiBmdW5jdGlvbihuKXtyZXR1cm4gdC5sPWUobiksdC5hPW8obiksdC5iPWEobiksdC5vcGFjaXR5PXUobiksdCsiIn19ZnVuY3Rpb24gUih0KXtyZXR1cm4gZnVuY3Rpb24ocixlKXt2YXIgbz10KChyPW4uaGNsKHIpKS5oLChlPW4uaGNsKGUpKS5oKSxhPWYoci5jLGUuYyksdT1mKHIubCxlLmwpLGk9ZihyLm9wYWNpdHksZS5vcGFjaXR5KTtyZXR1cm4gZnVuY3Rpb24odCl7cmV0dXJuIHIuaD1vKHQpLHIuYz1hKHQpLHIubD11KHQpLHIub3BhY2l0eT1pKHQpLHIrIiJ9fX1mdW5jdGlvbiBFKHQpe3JldHVybiBmdW5jdGlvbiByKGUpe2Z1bmN0aW9uIG8ocixvKXt2YXIgYT10KChyPW4uY3ViZWhlbGl4KHIpKS5oLChvPW4uY3ViZWhlbGl4KG8pKS5oKSx1PWYoci5zLG8ucyksaT1mKHIubCxvLmwpLGw9ZihyLm9wYWNpdHksby5vcGFjaXR5KTtyZXR1cm4gZnVuY3Rpb24odCl7cmV0dXJuIHIuaD1hKHQpLHIucz11KHQpLHIubD1pKE1hdGgucG93KHQsZSkpLHIub3BhY2l0eT1sKHQpLHIrIiJ9fXJldHVybiBlPStlLG8uZ2FtbWE9cixvfSgxKX1mdW5jdGlvbiBJKHQsbil7Zm9yKHZhciByPW5ldyBBcnJheShuKSxlPTA7ZTxuOysrZSlyW2VdPXQoZS8obi0xKSk7cmV0dXJuIHJ9dmFyIFMsQixELEgsTD1mdW5jdGlvbiB0KHIpe2Z1bmN0aW9uIGUodCxyKXt2YXIgZT1vKCh0PW4ucmdiKHQpKS5yLChyPW4ucmdiKHIpKS5yKSxhPW8odC5nLHIuZyksdT1vKHQuYixyLmIpLGk9byh0Lm9wYWNpdHksci5vcGFjaXR5KTtyZXR1cm4gZnVuY3Rpb24obil7cmV0dXJuIHQucj1lKG4pLHQuZz1hKG4pLHQuYj11KG4pLHQub3BhY2l0eT1pKG4pLHQrIiJ9fXZhciBvPWMocik7cmV0dXJuIGUuZ2FtbWE9dCxlfSgxKSxUPXMoZSksVj1zKG8pLFA9L1stK10/KD86XGQrXC4/XGQqfFwuP1xkKykoPzpbZUVdWy0rXT9cZCspPy9nLE89bmV3IFJlZ0V4cChQLnNvdXJjZSwiZyIpLF89MTgwL01hdGguUEksej17dHJhbnNsYXRlWDowLHRyYW5zbGF0ZVk6MCxyb3RhdGU6MCxza2V3WDowLHNjYWxlWDoxLHNjYWxlWToxfSxRPUEodywicHgsICIsInB4KSIsImRlZykiKSxaPUEoWCwiLCAiLCIpIiwiKSIpLEY9TWF0aC5TUVJUMixHPTIsSj00LEs9MWUtMTIsVT1xKGwpLFc9cShmKSwkPVIobCksdHQ9UihmKSxudD1FKGwpLHJ0PUUoZik7dC5pbnRlcnBvbGF0ZT14LHQuaW50ZXJwb2xhdGVBcnJheT1wLHQuaW50ZXJwb2xhdGVCYXNpcz1lLHQuaW50ZXJwb2xhdGVCYXNpc0Nsb3NlZD1vLHQuaW50ZXJwb2xhdGVEYXRlPWgsdC5pbnRlcnBvbGF0ZU51bWJlcj1kLHQuaW50ZXJwb2xhdGVPYmplY3Q9Zyx0LmludGVycG9sYXRlUm91bmQ9bSx0LmludGVycG9sYXRlU3RyaW5nPWIsdC5pbnRlcnBvbGF0ZVRyYW5zZm9ybUNzcz1RLHQuaW50ZXJwb2xhdGVUcmFuc2Zvcm1Tdmc9Wix0LmludGVycG9sYXRlWm9vbT1qLHQuaW50ZXJwb2xhdGVSZ2I9TCx0LmludGVycG9sYXRlUmdiQmFzaXM9VCx0LmludGVycG9sYXRlUmdiQmFzaXNDbG9zZWQ9Vix0LmludGVycG9sYXRlSHNsPVUsdC5pbnRlcnBvbGF0ZUhzbExvbmc9Vyx0LmludGVycG9sYXRlTGFiPWssdC5pbnRlcnBvbGF0ZUhjbD0kLHQuaW50ZXJwb2xhdGVIY2xMb25nPXR0LHQuaW50ZXJwb2xhdGVDdWJlaGVsaXg9bnQsdC5pbnRlcnBvbGF0ZUN1YmVoZWxpeExvbmc9cnQsdC5xdWFudGl6ZT1JLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KX0pOw=="></script>
<script src="data:application/x-javascript;base64,Ly8gaHR0cHM6Ly9kM2pzLm9yZy9kMy1zZWxlY3Rpb24vIFZlcnNpb24gMS4wLjIuIENvcHlyaWdodCAyMDE2IE1pa2UgQm9zdG9jay4KIWZ1bmN0aW9uKHQsbil7Im9iamVjdCI9PXR5cGVvZiBleHBvcnRzJiYidW5kZWZpbmVkIiE9dHlwZW9mIG1vZHVsZT9uKGV4cG9ydHMpOiJmdW5jdGlvbiI9PXR5cGVvZiBkZWZpbmUmJmRlZmluZS5hbWQ/ZGVmaW5lKFsiZXhwb3J0cyJdLG4pOm4odC5kMz10LmQzfHx7fSl9KHRoaXMsZnVuY3Rpb24odCl7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIG4odCl7dmFyIG49dCs9IiIsZT1uLmluZGV4T2YoIjoiKTtyZXR1cm4gZT49MCYmInhtbG5zIiE9PShuPXQuc2xpY2UoMCxlKSkmJih0PXQuc2xpY2UoZSsxKSksVXQuaGFzT3duUHJvcGVydHkobik/e3NwYWNlOlV0W25dLGxvY2FsOnR9OnR9ZnVuY3Rpb24gZSh0KXtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgbj10aGlzLm93bmVyRG9jdW1lbnQsZT10aGlzLm5hbWVzcGFjZVVSSTtyZXR1cm4gZT09PUl0JiZuLmRvY3VtZW50RWxlbWVudC5uYW1lc3BhY2VVUkk9PT1JdD9uLmNyZWF0ZUVsZW1lbnQodCk6bi5jcmVhdGVFbGVtZW50TlMoZSx0KX19ZnVuY3Rpb24gcih0KXtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5vd25lckRvY3VtZW50LmNyZWF0ZUVsZW1lbnROUyh0LnNwYWNlLHQubG9jYWwpfX1mdW5jdGlvbiBpKHQpe3ZhciBpPW4odCk7cmV0dXJuKGkubG9jYWw/cjplKShpKX1mdW5jdGlvbiBvKCl7cmV0dXJuIG5ldyB1fWZ1bmN0aW9uIHUoKXt0aGlzLl89IkAiKygrK2t0KS50b1N0cmluZygzNil9ZnVuY3Rpb24gYyh0LG4sZSl7cmV0dXJuIHQ9cyh0LG4sZSksZnVuY3Rpb24obil7dmFyIGU9bi5yZWxhdGVkVGFyZ2V0O2UmJihlPT09dGhpc3x8OCZlLmNvbXBhcmVEb2N1bWVudFBvc2l0aW9uKHRoaXMpKXx8dC5jYWxsKHRoaXMsbil9fWZ1bmN0aW9uIHMobixlLHIpe3JldHVybiBmdW5jdGlvbihpKXt2YXIgbz10LmV2ZW50O3QuZXZlbnQ9aTt0cnl7bi5jYWxsKHRoaXMsdGhpcy5fX2RhdGFfXyxlLHIpfWZpbmFsbHl7dC5ldmVudD1vfX19ZnVuY3Rpb24gYSh0KXtyZXR1cm4gdC50cmltKCkuc3BsaXQoL158XHMrLykubWFwKGZ1bmN0aW9uKHQpe3ZhciBuPSIiLGU9dC5pbmRleE9mKCIuIik7cmV0dXJuIGU+PTAmJihuPXQuc2xpY2UoZSsxKSx0PXQuc2xpY2UoMCxlKSkse3R5cGU6dCxuYW1lOm59fSl9ZnVuY3Rpb24gbCh0KXtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgbj10aGlzLl9fb247aWYobil7Zm9yKHZhciBlLHI9MCxpPS0xLG89bi5sZW5ndGg7cjxvOysrcillPW5bcl0sdC50eXBlJiZlLnR5cGUhPT10LnR5cGV8fGUubmFtZSE9PXQubmFtZT9uWysraV09ZTp0aGlzLnJlbW92ZUV2ZW50TGlzdGVuZXIoZS50eXBlLGUubGlzdGVuZXIsZS5jYXB0dXJlKTsrK2k/bi5sZW5ndGg9aTpkZWxldGUgdGhpcy5fX29ufX19ZnVuY3Rpb24gZih0LG4sZSl7dmFyIHI9RnQuaGFzT3duUHJvcGVydHkodC50eXBlKT9jOnM7cmV0dXJuIGZ1bmN0aW9uKGksbyx1KXt2YXIgYyxzPXRoaXMuX19vbixhPXIobixvLHUpO2lmKHMpZm9yKHZhciBsPTAsZj1zLmxlbmd0aDtsPGY7KytsKWlmKChjPXNbbF0pLnR5cGU9PT10LnR5cGUmJmMubmFtZT09PXQubmFtZSlyZXR1cm4gdGhpcy5yZW1vdmVFdmVudExpc3RlbmVyKGMudHlwZSxjLmxpc3RlbmVyLGMuY2FwdHVyZSksdGhpcy5hZGRFdmVudExpc3RlbmVyKGMudHlwZSxjLmxpc3RlbmVyPWEsYy5jYXB0dXJlPWUpLHZvaWQoYy52YWx1ZT1uKTt0aGlzLmFkZEV2ZW50TGlzdGVuZXIodC50eXBlLGEsZSksYz17dHlwZTp0LnR5cGUsbmFtZTp0Lm5hbWUsdmFsdWU6bixsaXN0ZW5lcjphLGNhcHR1cmU6ZX0scz9zLnB1c2goYyk6dGhpcy5fX29uPVtjXX19ZnVuY3Rpb24gaCh0LG4sZSl7dmFyIHIsaSxvPWEodCsiIiksdT1vLmxlbmd0aDt7aWYoIShhcmd1bWVudHMubGVuZ3RoPDIpKXtmb3IoYz1uP2Y6bCxudWxsPT1lJiYoZT0hMSkscj0wO3I8dTsrK3IpdGhpcy5lYWNoKGMob1tyXSxuLGUpKTtyZXR1cm4gdGhpc312YXIgYz10aGlzLm5vZGUoKS5fX29uO2lmKGMpZm9yKHZhciBzLGg9MCxwPWMubGVuZ3RoO2g8cDsrK2gpZm9yKHI9MCxzPWNbaF07cjx1OysrcilpZigoaT1vW3JdKS50eXBlPT09cy50eXBlJiZpLm5hbWU9PT1zLm5hbWUpcmV0dXJuIHMudmFsdWV9fWZ1bmN0aW9uIHAobixlLHIsaSl7dmFyIG89dC5ldmVudDtuLnNvdXJjZUV2ZW50PXQuZXZlbnQsdC5ldmVudD1uO3RyeXtyZXR1cm4gZS5hcHBseShyLGkpfWZpbmFsbHl7dC5ldmVudD1vfX1mdW5jdGlvbiBfKCl7Zm9yKHZhciBuLGU9dC5ldmVudDtuPWUuc291cmNlRXZlbnQ7KWU9bjtyZXR1cm4gZX1mdW5jdGlvbiB2KHQsbil7dmFyIGU9dC5vd25lclNWR0VsZW1lbnR8fHQ7aWYoZS5jcmVhdGVTVkdQb2ludCl7dmFyIHI9ZS5jcmVhdGVTVkdQb2ludCgpO3JldHVybiByLng9bi5jbGllbnRYLHIueT1uLmNsaWVudFkscj1yLm1hdHJpeFRyYW5zZm9ybSh0LmdldFNjcmVlbkNUTSgpLmludmVyc2UoKSksW3IueCxyLnldfXZhciBpPXQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7cmV0dXJuW24uY2xpZW50WC1pLmxlZnQtdC5jbGllbnRMZWZ0LG4uY2xpZW50WS1pLnRvcC10LmNsaWVudFRvcF19ZnVuY3Rpb24gZCh0KXt2YXIgbj1fKCk7cmV0dXJuIG4uY2hhbmdlZFRvdWNoZXMmJihuPW4uY2hhbmdlZFRvdWNoZXNbMF0pLHYodCxuKX1mdW5jdGlvbiBtKCl7fWZ1bmN0aW9uIHkodCl7cmV0dXJuIG51bGw9PXQ/bTpmdW5jdGlvbigpe3JldHVybiB0aGlzLnF1ZXJ5U2VsZWN0b3IodCl9fWZ1bmN0aW9uIGcodCl7ImZ1bmN0aW9uIiE9dHlwZW9mIHQmJih0PXkodCkpO2Zvcih2YXIgbj10aGlzLl9ncm91cHMsZT1uLmxlbmd0aCxyPW5ldyBBcnJheShlKSxpPTA7aTxlOysraSlmb3IodmFyIG8sdSxjPW5baV0scz1jLmxlbmd0aCxhPXJbaV09bmV3IEFycmF5KHMpLGw9MDtsPHM7KytsKShvPWNbbF0pJiYodT10LmNhbGwobyxvLl9fZGF0YV9fLGwsYykpJiYoIl9fZGF0YV9fImluIG8mJih1Ll9fZGF0YV9fPW8uX19kYXRhX18pLGFbbF09dSk7cmV0dXJuIG5ldyBEdChyLHRoaXMuX3BhcmVudHMpfWZ1bmN0aW9uIHcoKXtyZXR1cm5bXX1mdW5jdGlvbiBBKHQpe3JldHVybiBudWxsPT10P3c6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5xdWVyeVNlbGVjdG9yQWxsKHQpfX1mdW5jdGlvbiB4KHQpeyJmdW5jdGlvbiIhPXR5cGVvZiB0JiYodD1BKHQpKTtmb3IodmFyIG49dGhpcy5fZ3JvdXBzLGU9bi5sZW5ndGgscj1bXSxpPVtdLG89MDtvPGU7KytvKWZvcih2YXIgdSxjPW5bb10scz1jLmxlbmd0aCxhPTA7YTxzOysrYSkodT1jW2FdKSYmKHIucHVzaCh0LmNhbGwodSx1Ll9fZGF0YV9fLGEsYykpLGkucHVzaCh1KSk7cmV0dXJuIG5ldyBEdChyLGkpfWZ1bmN0aW9uIFModCl7ImZ1bmN0aW9uIiE9dHlwZW9mIHQmJih0PSR0KHQpKTtmb3IodmFyIG49dGhpcy5fZ3JvdXBzLGU9bi5sZW5ndGgscj1uZXcgQXJyYXkoZSksaT0wO2k8ZTsrK2kpZm9yKHZhciBvLHU9bltpXSxjPXUubGVuZ3RoLHM9cltpXT1bXSxhPTA7YTxjOysrYSkobz11W2FdKSYmdC5jYWxsKG8sby5fX2RhdGFfXyxhLHUpJiZzLnB1c2gobyk7cmV0dXJuIG5ldyBEdChyLHRoaXMuX3BhcmVudHMpfWZ1bmN0aW9uIGIodCl7cmV0dXJuIG5ldyBBcnJheSh0Lmxlbmd0aCl9ZnVuY3Rpb24gRSgpe3JldHVybiBuZXcgRHQodGhpcy5fZW50ZXJ8fHRoaXMuX2dyb3Vwcy5tYXAoYiksdGhpcy5fcGFyZW50cyl9ZnVuY3Rpb24gTih0LG4pe3RoaXMub3duZXJEb2N1bWVudD10Lm93bmVyRG9jdW1lbnQsdGhpcy5uYW1lc3BhY2VVUkk9dC5uYW1lc3BhY2VVUkksdGhpcy5fbmV4dD1udWxsLHRoaXMuX3BhcmVudD10LHRoaXMuX19kYXRhX189bn1mdW5jdGlvbiBDKHQpe3JldHVybiBmdW5jdGlvbigpe3JldHVybiB0fX1mdW5jdGlvbiBNKHQsbixlLHIsaSxvKXtmb3IodmFyIHUsYz0wLHM9bi5sZW5ndGgsYT1vLmxlbmd0aDtjPGE7KytjKSh1PW5bY10pPyh1Ll9fZGF0YV9fPW9bY10scltjXT11KTplW2NdPW5ldyBOKHQsb1tjXSk7Zm9yKDtjPHM7KytjKSh1PW5bY10pJiYoaVtjXT11KX1mdW5jdGlvbiBMKHQsbixlLHIsaSxvLHUpe3ZhciBjLHMsYSxsPXt9LGY9bi5sZW5ndGgsaD1vLmxlbmd0aCxwPW5ldyBBcnJheShmKTtmb3IoYz0wO2M8ZjsrK2MpKHM9bltjXSkmJihwW2NdPWE9S3QrdS5jYWxsKHMscy5fX2RhdGFfXyxjLG4pLGEgaW4gbD9pW2NdPXM6bFthXT1zKTtmb3IoYz0wO2M8aDsrK2MpYT1LdCt1LmNhbGwodCxvW2NdLGMsbyksKHM9bFthXSk/KHJbY109cyxzLl9fZGF0YV9fPW9bY10sbFthXT1udWxsKTplW2NdPW5ldyBOKHQsb1tjXSk7Zm9yKGM9MDtjPGY7KytjKShzPW5bY10pJiZsW3BbY11dPT09cyYmKGlbY109cyl9ZnVuY3Rpb24gUCh0LG4pe2lmKCF0KXJldHVybiBwPW5ldyBBcnJheSh0aGlzLnNpemUoKSksYT0tMSx0aGlzLmVhY2goZnVuY3Rpb24odCl7cFsrK2FdPXR9KSxwO3ZhciBlPW4/TDpNLHI9dGhpcy5fcGFyZW50cyxpPXRoaXMuX2dyb3VwczsiZnVuY3Rpb24iIT10eXBlb2YgdCYmKHQ9Qyh0KSk7Zm9yKHZhciBvPWkubGVuZ3RoLHU9bmV3IEFycmF5KG8pLGM9bmV3IEFycmF5KG8pLHM9bmV3IEFycmF5KG8pLGE9MDthPG87KythKXt2YXIgbD1yW2FdLGY9aVthXSxoPWYubGVuZ3RoLHA9dC5jYWxsKGwsbCYmbC5fX2RhdGFfXyxhLHIpLF89cC5sZW5ndGgsdj1jW2FdPW5ldyBBcnJheShfKSxkPXVbYV09bmV3IEFycmF5KF8pLG09c1thXT1uZXcgQXJyYXkoaCk7ZShsLGYsdixkLG0scCxuKTtmb3IodmFyIHksZyx3PTAsQT0wO3c8XzsrK3cpaWYoeT12W3ddKXtmb3Iodz49QSYmKEE9dysxKTshKGc9ZFtBXSkmJisrQTxfOyk7eS5fbmV4dD1nfHxudWxsfX1yZXR1cm4gdT1uZXcgRHQodSxyKSx1Ll9lbnRlcj1jLHUuX2V4aXQ9cyx1fWZ1bmN0aW9uIFQoKXtyZXR1cm4gbmV3IER0KHRoaXMuX2V4aXR8fHRoaXMuX2dyb3Vwcy5tYXAoYiksdGhpcy5fcGFyZW50cyl9ZnVuY3Rpb24gcSh0KXtmb3IodmFyIG49dGhpcy5fZ3JvdXBzLGU9dC5fZ3JvdXBzLHI9bi5sZW5ndGgsaT1lLmxlbmd0aCxvPU1hdGgubWluKHIsaSksdT1uZXcgQXJyYXkociksYz0wO2M8bzsrK2MpZm9yKHZhciBzLGE9bltjXSxsPWVbY10sZj1hLmxlbmd0aCxoPXVbY109bmV3IEFycmF5KGYpLHA9MDtwPGY7KytwKShzPWFbcF18fGxbcF0pJiYoaFtwXT1zKTtmb3IoO2M8cjsrK2MpdVtjXT1uW2NdO3JldHVybiBuZXcgRHQodSx0aGlzLl9wYXJlbnRzKX1mdW5jdGlvbiBPKCl7Zm9yKHZhciB0PXRoaXMuX2dyb3VwcyxuPS0xLGU9dC5sZW5ndGg7KytuPGU7KWZvcih2YXIgcixpPXRbbl0sbz1pLmxlbmd0aC0xLHU9aVtvXTstLW8+PTA7KShyPWlbb10pJiYodSYmdSE9PXIubmV4dFNpYmxpbmcmJnUucGFyZW50Tm9kZS5pbnNlcnRCZWZvcmUocix1KSx1PXIpO3JldHVybiB0aGlzfWZ1bmN0aW9uIEIodCl7ZnVuY3Rpb24gbihuLGUpe3JldHVybiBuJiZlP3Qobi5fX2RhdGFfXyxlLl9fZGF0YV9fKTohbi0hZX10fHwodD1EKTtmb3IodmFyIGU9dGhpcy5fZ3JvdXBzLHI9ZS5sZW5ndGgsaT1uZXcgQXJyYXkociksbz0wO288cjsrK28pe2Zvcih2YXIgdSxjPWVbb10scz1jLmxlbmd0aCxhPWlbb109bmV3IEFycmF5KHMpLGw9MDtsPHM7KytsKSh1PWNbbF0pJiYoYVtsXT11KTthLnNvcnQobil9cmV0dXJuIG5ldyBEdChpLHRoaXMuX3BhcmVudHMpLm9yZGVyKCl9ZnVuY3Rpb24gRCh0LG4pe3JldHVybiB0PG4/LTE6dD5uPzE6dD49bj8wOk5hTn1mdW5jdGlvbiBWKCl7dmFyIHQ9YXJndW1lbnRzWzBdO3JldHVybiBhcmd1bWVudHNbMF09dGhpcyx0LmFwcGx5KG51bGwsYXJndW1lbnRzKSx0aGlzfWZ1bmN0aW9uIFIoKXt2YXIgdD1uZXcgQXJyYXkodGhpcy5zaXplKCkpLG49LTE7cmV0dXJuIHRoaXMuZWFjaChmdW5jdGlvbigpe3RbKytuXT10aGlzfSksdH1mdW5jdGlvbiBqKCl7Zm9yKHZhciB0PXRoaXMuX2dyb3VwcyxuPTAsZT10Lmxlbmd0aDtuPGU7KytuKWZvcih2YXIgcj10W25dLGk9MCxvPXIubGVuZ3RoO2k8bzsrK2kpe3ZhciB1PXJbaV07aWYodSlyZXR1cm4gdX1yZXR1cm4gbnVsbH1mdW5jdGlvbiB6KCl7dmFyIHQ9MDtyZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uKCl7Kyt0fSksdH1mdW5jdGlvbiBIKCl7cmV0dXJuIXRoaXMubm9kZSgpfWZ1bmN0aW9uIEkodCl7Zm9yKHZhciBuPXRoaXMuX2dyb3VwcyxlPTAscj1uLmxlbmd0aDtlPHI7KytlKWZvcih2YXIgaSxvPW5bZV0sdT0wLGM9by5sZW5ndGg7dTxjOysrdSkoaT1vW3VdKSYmdC5jYWxsKGksaS5fX2RhdGFfXyx1LG8pO3JldHVybiB0aGlzfWZ1bmN0aW9uIFUodCl7cmV0dXJuIGZ1bmN0aW9uKCl7dGhpcy5yZW1vdmVBdHRyaWJ1dGUodCl9fWZ1bmN0aW9uIGsodCl7cmV0dXJuIGZ1bmN0aW9uKCl7dGhpcy5yZW1vdmVBdHRyaWJ1dGVOUyh0LnNwYWNlLHQubG9jYWwpfX1mdW5jdGlvbiBHKHQsbil7cmV0dXJuIGZ1bmN0aW9uKCl7dGhpcy5zZXRBdHRyaWJ1dGUodCxuKX19ZnVuY3Rpb24gWCh0LG4pe3JldHVybiBmdW5jdGlvbigpe3RoaXMuc2V0QXR0cmlidXRlTlModC5zcGFjZSx0LmxvY2FsLG4pfX1mdW5jdGlvbiBZKHQsbil7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIGU9bi5hcHBseSh0aGlzLGFyZ3VtZW50cyk7bnVsbD09ZT90aGlzLnJlbW92ZUF0dHJpYnV0ZSh0KTp0aGlzLnNldEF0dHJpYnV0ZSh0LGUpfX1mdW5jdGlvbiAkKHQsbil7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIGU9bi5hcHBseSh0aGlzLGFyZ3VtZW50cyk7bnVsbD09ZT90aGlzLnJlbW92ZUF0dHJpYnV0ZU5TKHQuc3BhY2UsdC5sb2NhbCk6dGhpcy5zZXRBdHRyaWJ1dGVOUyh0LnNwYWNlLHQubG9jYWwsZSl9fWZ1bmN0aW9uIEYodCxlKXt2YXIgcj1uKHQpO2lmKGFyZ3VtZW50cy5sZW5ndGg8Mil7dmFyIGk9dGhpcy5ub2RlKCk7cmV0dXJuIHIubG9jYWw/aS5nZXRBdHRyaWJ1dGVOUyhyLnNwYWNlLHIubG9jYWwpOmkuZ2V0QXR0cmlidXRlKHIpfXJldHVybiB0aGlzLmVhY2goKG51bGw9PWU/ci5sb2NhbD9rOlU6ImZ1bmN0aW9uIj09dHlwZW9mIGU/ci5sb2NhbD8kOlk6ci5sb2NhbD9YOkcpKHIsZSkpfWZ1bmN0aW9uIEoodCl7cmV0dXJuIHQub3duZXJEb2N1bWVudCYmdC5vd25lckRvY3VtZW50LmRlZmF1bHRWaWV3fHx0LmRvY3VtZW50JiZ0fHx0LmRlZmF1bHRWaWV3fWZ1bmN0aW9uIEsodCl7cmV0dXJuIGZ1bmN0aW9uKCl7dGhpcy5zdHlsZS5yZW1vdmVQcm9wZXJ0eSh0KX19ZnVuY3Rpb24gUSh0LG4sZSl7cmV0dXJuIGZ1bmN0aW9uKCl7dGhpcy5zdHlsZS5zZXRQcm9wZXJ0eSh0LG4sZSl9fWZ1bmN0aW9uIFcodCxuLGUpe3JldHVybiBmdW5jdGlvbigpe3ZhciByPW4uYXBwbHkodGhpcyxhcmd1bWVudHMpO251bGw9PXI/dGhpcy5zdHlsZS5yZW1vdmVQcm9wZXJ0eSh0KTp0aGlzLnN0eWxlLnNldFByb3BlcnR5KHQscixlKX19ZnVuY3Rpb24gWih0LG4sZSl7dmFyIHI7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg+MT90aGlzLmVhY2goKG51bGw9PW4/SzoiZnVuY3Rpb24iPT10eXBlb2Ygbj9XOlEpKHQsbixudWxsPT1lPyIiOmUpKTpKKHI9dGhpcy5ub2RlKCkpLmdldENvbXB1dGVkU3R5bGUocixudWxsKS5nZXRQcm9wZXJ0eVZhbHVlKHQpfWZ1bmN0aW9uIHR0KHQpe3JldHVybiBmdW5jdGlvbigpe2RlbGV0ZSB0aGlzW3RdfX1mdW5jdGlvbiBudCh0LG4pe3JldHVybiBmdW5jdGlvbigpe3RoaXNbdF09bn19ZnVuY3Rpb24gZXQodCxuKXtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgZT1uLmFwcGx5KHRoaXMsYXJndW1lbnRzKTtudWxsPT1lP2RlbGV0ZSB0aGlzW3RdOnRoaXNbdF09ZX19ZnVuY3Rpb24gcnQodCxuKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD4xP3RoaXMuZWFjaCgobnVsbD09bj90dDoiZnVuY3Rpb24iPT10eXBlb2Ygbj9ldDpudCkodCxuKSk6dGhpcy5ub2RlKClbdF19ZnVuY3Rpb24gaXQodCl7cmV0dXJuIHQudHJpbSgpLnNwbGl0KC9efFxzKy8pfWZ1bmN0aW9uIG90KHQpe3JldHVybiB0LmNsYXNzTGlzdHx8bmV3IHV0KHQpfWZ1bmN0aW9uIHV0KHQpe3RoaXMuX25vZGU9dCx0aGlzLl9uYW1lcz1pdCh0LmdldEF0dHJpYnV0ZSgiY2xhc3MiKXx8IiIpfWZ1bmN0aW9uIGN0KHQsbil7Zm9yKHZhciBlPW90KHQpLHI9LTEsaT1uLmxlbmd0aDsrK3I8aTspZS5hZGQobltyXSl9ZnVuY3Rpb24gc3QodCxuKXtmb3IodmFyIGU9b3QodCkscj0tMSxpPW4ubGVuZ3RoOysrcjxpOyllLnJlbW92ZShuW3JdKX1mdW5jdGlvbiBhdCh0KXtyZXR1cm4gZnVuY3Rpb24oKXtjdCh0aGlzLHQpfX1mdW5jdGlvbiBsdCh0KXtyZXR1cm4gZnVuY3Rpb24oKXtzdCh0aGlzLHQpfX1mdW5jdGlvbiBmdCh0LG4pe3JldHVybiBmdW5jdGlvbigpeyhuLmFwcGx5KHRoaXMsYXJndW1lbnRzKT9jdDpzdCkodGhpcyx0KX19ZnVuY3Rpb24gaHQodCxuKXt2YXIgZT1pdCh0KyIiKTtpZihhcmd1bWVudHMubGVuZ3RoPDIpe2Zvcih2YXIgcj1vdCh0aGlzLm5vZGUoKSksaT0tMSxvPWUubGVuZ3RoOysraTxvOylpZighci5jb250YWlucyhlW2ldKSlyZXR1cm4hMTtyZXR1cm4hMH1yZXR1cm4gdGhpcy5lYWNoKCgiZnVuY3Rpb24iPT10eXBlb2Ygbj9mdDpuP2F0Omx0KShlLG4pKX1mdW5jdGlvbiBwdCgpe3RoaXMudGV4dENvbnRlbnQ9IiJ9ZnVuY3Rpb24gX3QodCl7cmV0dXJuIGZ1bmN0aW9uKCl7dGhpcy50ZXh0Q29udGVudD10fX1mdW5jdGlvbiB2dCh0KXtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgbj10LmFwcGx5KHRoaXMsYXJndW1lbnRzKTt0aGlzLnRleHRDb250ZW50PW51bGw9PW4/IiI6bn19ZnVuY3Rpb24gZHQodCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/dGhpcy5lYWNoKG51bGw9PXQ/cHQ6KCJmdW5jdGlvbiI9PXR5cGVvZiB0P3Z0Ol90KSh0KSk6dGhpcy5ub2RlKCkudGV4dENvbnRlbnR9ZnVuY3Rpb24gbXQoKXt0aGlzLmlubmVySFRNTD0iIn1mdW5jdGlvbiB5dCh0KXtyZXR1cm4gZnVuY3Rpb24oKXt0aGlzLmlubmVySFRNTD10fX1mdW5jdGlvbiBndCh0KXtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgbj10LmFwcGx5KHRoaXMsYXJndW1lbnRzKTt0aGlzLmlubmVySFRNTD1udWxsPT1uPyIiOm59fWZ1bmN0aW9uIHd0KHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoP3RoaXMuZWFjaChudWxsPT10P210OigiZnVuY3Rpb24iPT10eXBlb2YgdD9ndDp5dCkodCkpOnRoaXMubm9kZSgpLmlubmVySFRNTH1mdW5jdGlvbiBBdCgpe3RoaXMubmV4dFNpYmxpbmcmJnRoaXMucGFyZW50Tm9kZS5hcHBlbmRDaGlsZCh0aGlzKX1mdW5jdGlvbiB4dCgpe3JldHVybiB0aGlzLmVhY2goQXQpfWZ1bmN0aW9uIFN0KCl7dGhpcy5wcmV2aW91c1NpYmxpbmcmJnRoaXMucGFyZW50Tm9kZS5pbnNlcnRCZWZvcmUodGhpcyx0aGlzLnBhcmVudE5vZGUuZmlyc3RDaGlsZCl9ZnVuY3Rpb24gYnQoKXtyZXR1cm4gdGhpcy5lYWNoKFN0KX1mdW5jdGlvbiBFdCh0KXt2YXIgbj0iZnVuY3Rpb24iPT10eXBlb2YgdD90OmkodCk7cmV0dXJuIHRoaXMuc2VsZWN0KGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuYXBwZW5kQ2hpbGQobi5hcHBseSh0aGlzLGFyZ3VtZW50cykpfSl9ZnVuY3Rpb24gTnQoKXtyZXR1cm4gbnVsbH1mdW5jdGlvbiBDdCh0LG4pe3ZhciBlPSJmdW5jdGlvbiI9PXR5cGVvZiB0P3Q6aSh0KSxyPW51bGw9PW4/TnQ6ImZ1bmN0aW9uIj09dHlwZW9mIG4/bjp5KG4pO3JldHVybiB0aGlzLnNlbGVjdChmdW5jdGlvbigpe3JldHVybiB0aGlzLmluc2VydEJlZm9yZShlLmFwcGx5KHRoaXMsYXJndW1lbnRzKSxyLmFwcGx5KHRoaXMsYXJndW1lbnRzKXx8bnVsbCl9KX1mdW5jdGlvbiBNdCgpe3ZhciB0PXRoaXMucGFyZW50Tm9kZTt0JiZ0LnJlbW92ZUNoaWxkKHRoaXMpfWZ1bmN0aW9uIEx0KCl7cmV0dXJuIHRoaXMuZWFjaChNdCl9ZnVuY3Rpb24gUHQodCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/dGhpcy5wcm9wZXJ0eSgiX19kYXRhX18iLHQpOnRoaXMubm9kZSgpLl9fZGF0YV9ffWZ1bmN0aW9uIFR0KHQsbixlKXt2YXIgcj1KKHQpLGk9ci5DdXN0b21FdmVudDtpP2k9bmV3IGkobixlKTooaT1yLmRvY3VtZW50LmNyZWF0ZUV2ZW50KCJFdmVudCIpLGU/KGkuaW5pdEV2ZW50KG4sZS5idWJibGVzLGUuY2FuY2VsYWJsZSksaS5kZXRhaWw9ZS5kZXRhaWwpOmkuaW5pdEV2ZW50KG4sITEsITEpKSx0LmRpc3BhdGNoRXZlbnQoaSl9ZnVuY3Rpb24gcXQodCxuKXtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gVHQodGhpcyx0LG4pfX1mdW5jdGlvbiBPdCh0LG4pe3JldHVybiBmdW5jdGlvbigpe3JldHVybiBUdCh0aGlzLHQsbi5hcHBseSh0aGlzLGFyZ3VtZW50cykpfX1mdW5jdGlvbiBCdCh0LG4pe3JldHVybiB0aGlzLmVhY2goKCJmdW5jdGlvbiI9PXR5cGVvZiBuP090OnF0KSh0LG4pKX1mdW5jdGlvbiBEdCh0LG4pe3RoaXMuX2dyb3Vwcz10LHRoaXMuX3BhcmVudHM9bn1mdW5jdGlvbiBWdCgpe3JldHVybiBuZXcgRHQoW1tkb2N1bWVudC5kb2N1bWVudEVsZW1lbnRdXSxRdCl9ZnVuY3Rpb24gUnQodCl7cmV0dXJuInN0cmluZyI9PXR5cGVvZiB0P25ldyBEdChbW2RvY3VtZW50LnF1ZXJ5U2VsZWN0b3IodCldXSxbZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50XSk6bmV3IER0KFtbdF1dLFF0KX1mdW5jdGlvbiBqdCh0KXtyZXR1cm4ic3RyaW5nIj09dHlwZW9mIHQ/bmV3IER0KFtkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKHQpXSxbZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50XSk6bmV3IER0KFtudWxsPT10P1tdOnRdLFF0KX1mdW5jdGlvbiB6dCh0LG4sZSl7YXJndW1lbnRzLmxlbmd0aDwzJiYoZT1uLG49XygpLmNoYW5nZWRUb3VjaGVzKTtmb3IodmFyIHIsaT0wLG89bj9uLmxlbmd0aDowO2k8bzsrK2kpaWYoKHI9bltpXSkuaWRlbnRpZmllcj09PWUpcmV0dXJuIHYodCxyKTtyZXR1cm4gbnVsbH1mdW5jdGlvbiBIdCh0LG4pe251bGw9PW4mJihuPV8oKS50b3VjaGVzKTtmb3IodmFyIGU9MCxyPW4/bi5sZW5ndGg6MCxpPW5ldyBBcnJheShyKTtlPHI7KytlKWlbZV09dih0LG5bZV0pO3JldHVybiBpfXZhciBJdD0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94aHRtbCIsVXQ9e3N2ZzoiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciLHhodG1sOkl0LHhsaW5rOiJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIix4bWw6Imh0dHA6Ly93d3cudzMub3JnL1hNTC8xOTk4L25hbWVzcGFjZSIseG1sbnM6Imh0dHA6Ly93d3cudzMub3JnLzIwMDAveG1sbnMvIn0sa3Q9MDt1LnByb3RvdHlwZT1vLnByb3RvdHlwZT17Y29uc3RydWN0b3I6dSxnZXQ6ZnVuY3Rpb24odCl7Zm9yKHZhciBuPXRoaXMuXzshKG4gaW4gdCk7KWlmKCEodD10LnBhcmVudE5vZGUpKXJldHVybjtyZXR1cm4gdFtuXX0sc2V0OmZ1bmN0aW9uKHQsbil7cmV0dXJuIHRbdGhpcy5fXT1ufSxyZW1vdmU6ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuXyBpbiB0JiZkZWxldGUgdFt0aGlzLl9dfSx0b1N0cmluZzpmdW5jdGlvbigpe3JldHVybiB0aGlzLl99fTt2YXIgR3Q9ZnVuY3Rpb24odCl7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMubWF0Y2hlcyh0KX19O2lmKCJ1bmRlZmluZWQiIT10eXBlb2YgZG9jdW1lbnQpe3ZhciBYdD1kb2N1bWVudC5kb2N1bWVudEVsZW1lbnQ7aWYoIVh0Lm1hdGNoZXMpe3ZhciBZdD1YdC53ZWJraXRNYXRjaGVzU2VsZWN0b3J8fFh0Lm1zTWF0Y2hlc1NlbGVjdG9yfHxYdC5tb3pNYXRjaGVzU2VsZWN0b3J8fFh0Lm9NYXRjaGVzU2VsZWN0b3I7R3Q9ZnVuY3Rpb24odCl7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIFl0LmNhbGwodGhpcyx0KX19fX12YXIgJHQ9R3QsRnQ9e307aWYodC5ldmVudD1udWxsLCJ1bmRlZmluZWQiIT10eXBlb2YgZG9jdW1lbnQpe3ZhciBKdD1kb2N1bWVudC5kb2N1bWVudEVsZW1lbnQ7Im9ubW91c2VlbnRlciJpbiBKdHx8KEZ0PXttb3VzZWVudGVyOiJtb3VzZW92ZXIiLG1vdXNlbGVhdmU6Im1vdXNlb3V0In0pfU4ucHJvdG90eXBlPXtjb25zdHJ1Y3RvcjpOLGFwcGVuZENoaWxkOmZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLl9wYXJlbnQuaW5zZXJ0QmVmb3JlKHQsdGhpcy5fbmV4dCl9LGluc2VydEJlZm9yZTpmdW5jdGlvbih0LG4pe3JldHVybiB0aGlzLl9wYXJlbnQuaW5zZXJ0QmVmb3JlKHQsbil9LHF1ZXJ5U2VsZWN0b3I6ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuX3BhcmVudC5xdWVyeVNlbGVjdG9yKHQpfSxxdWVyeVNlbGVjdG9yQWxsOmZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLl9wYXJlbnQucXVlcnlTZWxlY3RvckFsbCh0KX19O3ZhciBLdD0iJCI7dXQucHJvdG90eXBlPXthZGQ6ZnVuY3Rpb24odCl7dmFyIG49dGhpcy5fbmFtZXMuaW5kZXhPZih0KTtuPDAmJih0aGlzLl9uYW1lcy5wdXNoKHQpLHRoaXMuX25vZGUuc2V0QXR0cmlidXRlKCJjbGFzcyIsdGhpcy5fbmFtZXMuam9pbigiICIpKSl9LHJlbW92ZTpmdW5jdGlvbih0KXt2YXIgbj10aGlzLl9uYW1lcy5pbmRleE9mKHQpO24+PTAmJih0aGlzLl9uYW1lcy5zcGxpY2UobiwxKSx0aGlzLl9ub2RlLnNldEF0dHJpYnV0ZSgiY2xhc3MiLHRoaXMuX25hbWVzLmpvaW4oIiAiKSkpfSxjb250YWluczpmdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5fbmFtZXMuaW5kZXhPZih0KT49MH19O3ZhciBRdD1bbnVsbF07RHQucHJvdG90eXBlPVZ0LnByb3RvdHlwZT17Y29uc3RydWN0b3I6RHQsc2VsZWN0Omcsc2VsZWN0QWxsOngsZmlsdGVyOlMsZGF0YTpQLGVudGVyOkUsZXhpdDpULG1lcmdlOnEsb3JkZXI6Tyxzb3J0OkIsY2FsbDpWLG5vZGVzOlIsbm9kZTpqLHNpemU6eixlbXB0eTpILGVhY2g6SSxhdHRyOkYsc3R5bGU6Wixwcm9wZXJ0eTpydCxjbGFzc2VkOmh0LHRleHQ6ZHQsaHRtbDp3dCxyYWlzZTp4dCxsb3dlcjpidCxhcHBlbmQ6RXQsaW5zZXJ0OkN0LHJlbW92ZTpMdCxkYXR1bTpQdCxvbjpoLGRpc3BhdGNoOkJ0fSx0LmNyZWF0b3I9aSx0LmxvY2FsPW8sdC5tYXRjaGVyPSR0LHQubW91c2U9ZCx0Lm5hbWVzcGFjZT1uLHQubmFtZXNwYWNlcz1VdCx0LnNlbGVjdD1SdCx0LnNlbGVjdEFsbD1qdCx0LnNlbGVjdGlvbj1WdCx0LnNlbGVjdG9yPXksdC5zZWxlY3RvckFsbD1BLHQudG91Y2g9enQsdC50b3VjaGVzPUh0LHQud2luZG93PUosdC5jdXN0b21FdmVudD1wLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KX0pOw=="></script>
<script src="data:application/x-javascript;base64,Ly8gaHR0cHM6Ly9kM2pzLm9yZy9kMy1zY2FsZS8gVmVyc2lvbiAxLjAuMy4gQ29weXJpZ2h0IDIwMTYgTWlrZSBCb3N0b2NrLgohZnVuY3Rpb24oZSxuKXsib2JqZWN0Ij09dHlwZW9mIGV4cG9ydHMmJiJ1bmRlZmluZWQiIT10eXBlb2YgbW9kdWxlP24oZXhwb3J0cyxyZXF1aXJlKCJkMy1hcnJheSIpLHJlcXVpcmUoImQzLWNvbGxlY3Rpb24iKSxyZXF1aXJlKCJkMy1pbnRlcnBvbGF0ZSIpLHJlcXVpcmUoImQzLWZvcm1hdCIpLHJlcXVpcmUoImQzLXRpbWUiKSxyZXF1aXJlKCJkMy10aW1lLWZvcm1hdCIpLHJlcXVpcmUoImQzLWNvbG9yIikpOiJmdW5jdGlvbiI9PXR5cGVvZiBkZWZpbmUmJmRlZmluZS5hbWQ/ZGVmaW5lKFsiZXhwb3J0cyIsImQzLWFycmF5IiwiZDMtY29sbGVjdGlvbiIsImQzLWludGVycG9sYXRlIiwiZDMtZm9ybWF0IiwiZDMtdGltZSIsImQzLXRpbWUtZm9ybWF0IiwiZDMtY29sb3IiXSxuKTpuKGUuZDM9ZS5kM3x8e30sZS5kMyxlLmQzLGUuZDMsZS5kMyxlLmQzLGUuZDMsZS5kMyl9KHRoaXMsZnVuY3Rpb24oZSxuLGEsZixjLHQscixkKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gaShlKXtmdW5jdGlvbiBuKG4pe3ZhciBhPW4rIiIscj1mLmdldChhKTtpZighcil7aWYodCE9PVgpcmV0dXJuIHQ7Zi5zZXQoYSxyPWMucHVzaChuKSl9cmV0dXJuIGVbKHItMSklZS5sZW5ndGhdfXZhciBmPWEubWFwKCksYz1bXSx0PVg7cmV0dXJuIGU9bnVsbD09ZT9bXTpLLmNhbGwoZSksbi5kb21haW49ZnVuY3Rpb24oZSl7aWYoIWFyZ3VtZW50cy5sZW5ndGgpcmV0dXJuIGMuc2xpY2UoKTtjPVtdLGY9YS5tYXAoKTtmb3IodmFyIHQscixkPS0xLGk9ZS5sZW5ndGg7KytkPGk7KWYuaGFzKHI9KHQ9ZVtkXSkrIiIpfHxmLnNldChyLGMucHVzaCh0KSk7cmV0dXJuIG59LG4ucmFuZ2U9ZnVuY3Rpb24oYSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGU9Sy5jYWxsKGEpLG4pOmUuc2xpY2UoKX0sbi51bmtub3duPWZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh0PWUsbik6dH0sbi5jb3B5PWZ1bmN0aW9uKCl7cmV0dXJuIGkoKS5kb21haW4oYykucmFuZ2UoZSkudW5rbm93bih0KX0sbn1mdW5jdGlvbiB1KCl7ZnVuY3Rpb24gZSgpe3ZhciBlPXQoKS5sZW5ndGgsYz1kWzFdPGRbMF0saT1kW2MtMF0sdT1kWzEtY107YT0odS1pKS9NYXRoLm1heCgxLGUtbysyKmwpLGImJihhPU1hdGguZmxvb3IoYSkpLGkrPSh1LWktYSooZS1vKSkqaCxmPWEqKDEtbyksYiYmKGk9TWF0aC5yb3VuZChpKSxmPU1hdGgucm91bmQoZikpO3ZhciBzPW4ucmFuZ2UoZSkubWFwKGZ1bmN0aW9uKGUpe3JldHVybiBpK2EqZX0pO3JldHVybiByKGM/cy5yZXZlcnNlKCk6cyl9dmFyIGEsZixjPWkoKS51bmtub3duKHZvaWQgMCksdD1jLmRvbWFpbixyPWMucmFuZ2UsZD1bMCwxXSxiPSExLG89MCxsPTAsaD0uNTtyZXR1cm4gZGVsZXRlIGMudW5rbm93bixjLmRvbWFpbj1mdW5jdGlvbihuKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8odChuKSxlKCkpOnQoKX0sYy5yYW5nZT1mdW5jdGlvbihuKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oZD1bK25bMF0sK25bMV1dLGUoKSk6ZC5zbGljZSgpfSxjLnJhbmdlUm91bmQ9ZnVuY3Rpb24obil7cmV0dXJuIGQ9WytuWzBdLCtuWzFdXSxiPSEwLGUoKX0sYy5iYW5kd2lkdGg9ZnVuY3Rpb24oKXtyZXR1cm4gZn0sYy5zdGVwPWZ1bmN0aW9uKCl7cmV0dXJuIGF9LGMucm91bmQ9ZnVuY3Rpb24obil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGI9ISFuLGUoKSk6Yn0sYy5wYWRkaW5nPWZ1bmN0aW9uKG4pe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhvPWw9TWF0aC5tYXgoMCxNYXRoLm1pbigxLG4pKSxlKCkpOm99LGMucGFkZGluZ0lubmVyPWZ1bmN0aW9uKG4pe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhvPU1hdGgubWF4KDAsTWF0aC5taW4oMSxuKSksZSgpKTpvfSxjLnBhZGRpbmdPdXRlcj1mdW5jdGlvbihuKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obD1NYXRoLm1heCgwLE1hdGgubWluKDEsbikpLGUoKSk6bH0sYy5hbGlnbj1mdW5jdGlvbihuKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oaD1NYXRoLm1heCgwLE1hdGgubWluKDEsbikpLGUoKSk6aH0sYy5jb3B5PWZ1bmN0aW9uKCl7cmV0dXJuIHUoKS5kb21haW4odCgpKS5yYW5nZShkKS5yb3VuZChiKS5wYWRkaW5nSW5uZXIobykucGFkZGluZ091dGVyKGwpLmFsaWduKGgpfSxlKCl9ZnVuY3Rpb24gYihlKXt2YXIgbj1lLmNvcHk7cmV0dXJuIGUucGFkZGluZz1lLnBhZGRpbmdPdXRlcixkZWxldGUgZS5wYWRkaW5nSW5uZXIsZGVsZXRlIGUucGFkZGluZ091dGVyLGUuY29weT1mdW5jdGlvbigpe3JldHVybiBiKG4oKSl9LGV9ZnVuY3Rpb24gbygpe3JldHVybiBiKHUoKS5wYWRkaW5nSW5uZXIoMSkpfWZ1bmN0aW9uIGwoZSl7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIGV9fWZ1bmN0aW9uIGgoZSl7cmV0dXJuK2V9ZnVuY3Rpb24gcyhlLG4pe3JldHVybihuLT1lPStlKT9mdW5jdGlvbihhKXtyZXR1cm4oYS1lKS9ufTpsKG4pfWZ1bmN0aW9uIGcoZSl7cmV0dXJuIGZ1bmN0aW9uKG4sYSl7dmFyIGY9ZShuPStuLGE9K2EpO3JldHVybiBmdW5jdGlvbihlKXtyZXR1cm4gZTw9bj8wOmU+PWE/MTpmKGUpfX19ZnVuY3Rpb24gcChlKXtyZXR1cm4gZnVuY3Rpb24obixhKXt2YXIgZj1lKG49K24sYT0rYSk7cmV0dXJuIGZ1bmN0aW9uKGUpe3JldHVybiBlPD0wP246ZT49MT9hOmYoZSl9fX1mdW5jdGlvbiBtKGUsbixhLGYpe3ZhciBjPWVbMF0sdD1lWzFdLHI9blswXSxkPW5bMV07cmV0dXJuIHQ8Yz8oYz1hKHQsYykscj1mKGQscikpOihjPWEoYyx0KSxyPWYocixkKSksZnVuY3Rpb24oZSl7cmV0dXJuIHIoYyhlKSl9fWZ1bmN0aW9uIE0oZSxhLGYsYyl7dmFyIHQ9TWF0aC5taW4oZS5sZW5ndGgsYS5sZW5ndGgpLTEscj1uZXcgQXJyYXkodCksZD1uZXcgQXJyYXkodCksaT0tMTtmb3IoZVt0XTxlWzBdJiYoZT1lLnNsaWNlKCkucmV2ZXJzZSgpLGE9YS5zbGljZSgpLnJldmVyc2UoKSk7KytpPHQ7KXJbaV09ZihlW2ldLGVbaSsxXSksZFtpXT1jKGFbaV0sYVtpKzFdKTtyZXR1cm4gZnVuY3Rpb24oYSl7dmFyIGY9bi5iaXNlY3QoZSxhLDEsdCktMTtyZXR1cm4gZFtmXShyW2ZdKGEpKX19ZnVuY3Rpb24gdihlLG4pe3JldHVybiBuLmRvbWFpbihlLmRvbWFpbigpKS5yYW5nZShlLnJhbmdlKCkpLmludGVycG9sYXRlKGUuaW50ZXJwb2xhdGUoKSkuY2xhbXAoZS5jbGFtcCgpKX1mdW5jdGlvbiB4KGUsbil7ZnVuY3Rpb24gYSgpe3JldHVybiB0PU1hdGgubWluKGkubGVuZ3RoLHUubGVuZ3RoKT4yP006bSxyPWQ9bnVsbCxjfWZ1bmN0aW9uIGMobil7cmV0dXJuKHJ8fChyPXQoaSx1LG8/ZyhlKTplLGIpKSkoK24pfXZhciB0LHIsZCxpPVosdT1aLGI9Zi5pbnRlcnBvbGF0ZSxvPSExO3JldHVybiBjLmludmVydD1mdW5jdGlvbihlKXtyZXR1cm4oZHx8KGQ9dCh1LGkscyxvP3Aobik6bikpKSgrZSl9LGMuZG9tYWluPWZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhpPUouY2FsbChlLGgpLGEoKSk6aS5zbGljZSgpfSxjLnJhbmdlPWZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh1PUsuY2FsbChlKSxhKCkpOnUuc2xpY2UoKX0sYy5yYW5nZVJvdW5kPWZ1bmN0aW9uKGUpe3JldHVybiB1PUsuY2FsbChlKSxiPWYuaW50ZXJwb2xhdGVSb3VuZCxhKCl9LGMuY2xhbXA9ZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG89ISFlLGEoKSk6b30sYy5pbnRlcnBvbGF0ZT1mdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oYj1lLGEoKSk6Yn0sYSgpfWZ1bmN0aW9uIHkoZSxhLGYpe3ZhciB0LHI9ZVswXSxkPWVbZS5sZW5ndGgtMV0saT1uLnRpY2tTdGVwKHIsZCxudWxsPT1hPzEwOmEpO3N3aXRjaChmPWMuZm9ybWF0U3BlY2lmaWVyKG51bGw9PWY/IixmIjpmKSxmLnR5cGUpe2Nhc2UicyI6dmFyIHU9TWF0aC5tYXgoTWF0aC5hYnMociksTWF0aC5hYnMoZCkpO3JldHVybiBudWxsIT1mLnByZWNpc2lvbnx8aXNOYU4odD1jLnByZWNpc2lvblByZWZpeChpLHUpKXx8KGYucHJlY2lzaW9uPXQpLGMuZm9ybWF0UHJlZml4KGYsdSk7Y2FzZSIiOmNhc2UiZSI6Y2FzZSJnIjpjYXNlInAiOmNhc2UiciI6bnVsbCE9Zi5wcmVjaXNpb258fGlzTmFOKHQ9Yy5wcmVjaXNpb25Sb3VuZChpLE1hdGgubWF4KE1hdGguYWJzKHIpLE1hdGguYWJzKGQpKSkpfHwoZi5wcmVjaXNpb249dC0oImUiPT09Zi50eXBlKSk7YnJlYWs7Y2FzZSJmIjpjYXNlIiUiOm51bGwhPWYucHJlY2lzaW9ufHxpc05hTih0PWMucHJlY2lzaW9uRml4ZWQoaSkpfHwoZi5wcmVjaXNpb249dC0yKigiJSI9PT1mLnR5cGUpKX1yZXR1cm4gYy5mb3JtYXQoZil9ZnVuY3Rpb24gdyhlKXt2YXIgYT1lLmRvbWFpbjtyZXR1cm4gZS50aWNrcz1mdW5jdGlvbihlKXt2YXIgZj1hKCk7cmV0dXJuIG4udGlja3MoZlswXSxmW2YubGVuZ3RoLTFdLG51bGw9PWU/MTA6ZSl9LGUudGlja0Zvcm1hdD1mdW5jdGlvbihlLG4pe3JldHVybiB5KGEoKSxlLG4pfSxlLm5pY2U9ZnVuY3Rpb24oZil7dmFyIGM9YSgpLHQ9Yy5sZW5ndGgtMSxyPW51bGw9PWY/MTA6ZixkPWNbMF0saT1jW3RdLHU9bi50aWNrU3RlcChkLGkscik7cmV0dXJuIHUmJih1PW4udGlja1N0ZXAoTWF0aC5mbG9vcihkL3UpKnUsTWF0aC5jZWlsKGkvdSkqdSxyKSxjWzBdPU1hdGguZmxvb3IoZC91KSp1LGNbdF09TWF0aC5jZWlsKGkvdSkqdSxhKGMpKSxlfSxlfWZ1bmN0aW9uIGsoKXt2YXIgZT14KHMsZi5pbnRlcnBvbGF0ZU51bWJlcik7cmV0dXJuIGUuY29weT1mdW5jdGlvbigpe3JldHVybiB2KGUsaygpKX0sdyhlKX1mdW5jdGlvbiBOKCl7ZnVuY3Rpb24gZShlKXtyZXR1cm4rZX12YXIgbj1bMCwxXTtyZXR1cm4gZS5pbnZlcnQ9ZSxlLmRvbWFpbj1lLnJhbmdlPWZ1bmN0aW9uKGEpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhuPUouY2FsbChhLGgpLGUpOm4uc2xpY2UoKX0sZS5jb3B5PWZ1bmN0aW9uKCl7cmV0dXJuIE4oKS5kb21haW4obil9LHcoZSl9ZnVuY3Rpb24gcShlLG4pe2U9ZS5zbGljZSgpO3ZhciBhLGY9MCxjPWUubGVuZ3RoLTEsdD1lW2ZdLHI9ZVtjXTtyZXR1cm4gcjx0JiYoYT1mLGY9YyxjPWEsYT10LHQ9cixyPWEpLGVbZl09bi5mbG9vcih0KSxlW2NdPW4uY2VpbChyKSxlfWZ1bmN0aW9uIEMoZSxuKXtyZXR1cm4obj1NYXRoLmxvZyhuL2UpKT9mdW5jdGlvbihhKXtyZXR1cm4gTWF0aC5sb2coYS9lKS9ufTpsKG4pfWZ1bmN0aW9uIEQoZSxuKXtyZXR1cm4gZTwwP2Z1bmN0aW9uKGEpe3JldHVybi1NYXRoLnBvdygtbixhKSpNYXRoLnBvdygtZSwxLWEpfTpmdW5jdGlvbihhKXtyZXR1cm4gTWF0aC5wb3cobixhKSpNYXRoLnBvdyhlLDEtYSl9fWZ1bmN0aW9uIFMoZSl7cmV0dXJuIGlzRmluaXRlKGUpPysoIjFlIitlKTplPDA/MDplfWZ1bmN0aW9uIEkoZSl7cmV0dXJuIDEwPT09ZT9TOmU9PT1NYXRoLkU/TWF0aC5leHA6ZnVuY3Rpb24obil7cmV0dXJuIE1hdGgucG93KGUsbil9fWZ1bmN0aW9uIE8oZSl7cmV0dXJuIGU9PT1NYXRoLkU/TWF0aC5sb2c6MTA9PT1lJiZNYXRoLmxvZzEwfHwyPT09ZSYmTWF0aC5sb2cyfHwoZT1NYXRoLmxvZyhlKSxmdW5jdGlvbihuKXtyZXR1cm4gTWF0aC5sb2cobikvZX0pfWZ1bmN0aW9uIEYoZSl7cmV0dXJuIGZ1bmN0aW9uKG4pe3JldHVybi1lKC1uKX19ZnVuY3Rpb24gTCgpe2Z1bmN0aW9uIGUoKXtyZXR1cm4gcj1PKHQpLGQ9SSh0KSxmKClbMF08MCYmKHI9RihyKSxkPUYoZCkpLGF9dmFyIGE9eChDLEQpLmRvbWFpbihbMSwxMF0pLGY9YS5kb21haW4sdD0xMCxyPU8oMTApLGQ9SSgxMCk7cmV0dXJuIGEuYmFzZT1mdW5jdGlvbihuKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8odD0rbixlKCkpOnR9LGEuZG9tYWluPWZ1bmN0aW9uKG4pe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhmKG4pLGUoKSk6ZigpfSxhLnRpY2tzPWZ1bmN0aW9uKGUpe3ZhciBhLGM9ZigpLGk9Y1swXSx1PWNbYy5sZW5ndGgtMV07KGE9dTxpKSYmKGg9aSxpPXUsdT1oKTt2YXIgYixvLGwsaD1yKGkpLHM9cih1KSxnPW51bGw9PWU/MTA6K2UscD1bXTtpZighKHQlMSkmJnMtaDxnKXtpZihoPU1hdGgucm91bmQoaCktMSxzPU1hdGgucm91bmQocykrMSxpPjApe2Zvcig7aDxzOysraClmb3Iobz0xLGI9ZChoKTtvPHQ7KytvKWlmKGw9YipvLCEobDxpKSl7aWYobD51KWJyZWFrO3AucHVzaChsKX19ZWxzZSBmb3IoO2g8czsrK2gpZm9yKG89dC0xLGI9ZChoKTtvPj0xOy0tbylpZihsPWIqbywhKGw8aSkpe2lmKGw+dSlicmVhaztwLnB1c2gobCl9fWVsc2UgcD1uLnRpY2tzKGgscyxNYXRoLm1pbihzLWgsZykpLm1hcChkKTtyZXR1cm4gYT9wLnJldmVyc2UoKTpwfSxhLnRpY2tGb3JtYXQ9ZnVuY3Rpb24oZSxuKXtpZihudWxsPT1uJiYobj0xMD09PXQ/Ii4wZSI6IiwiKSwiZnVuY3Rpb24iIT10eXBlb2YgbiYmKG49Yy5mb3JtYXQobikpLGU9PT0xLzApcmV0dXJuIG47bnVsbD09ZSYmKGU9MTApO3ZhciBmPU1hdGgubWF4KDEsdCplL2EudGlja3MoKS5sZW5ndGgpO3JldHVybiBmdW5jdGlvbihlKXt2YXIgYT1lL2QoTWF0aC5yb3VuZChyKGUpKSk7cmV0dXJuIGEqdDx0LS41JiYoYSo9dCksYTw9Zj9uKGUpOiIifX0sYS5uaWNlPWZ1bmN0aW9uKCl7cmV0dXJuIGYocShmKCkse2Zsb29yOmZ1bmN0aW9uKGUpe3JldHVybiBkKE1hdGguZmxvb3IocihlKSkpfSxjZWlsOmZ1bmN0aW9uKGUpe3JldHVybiBkKE1hdGguY2VpbChyKGUpKSl9fSkpfSxhLmNvcHk9ZnVuY3Rpb24oKXtyZXR1cm4gdihhLEwoKS5iYXNlKHQpKX0sYX1mdW5jdGlvbiBQKGUsbil7cmV0dXJuIGU8MD8tTWF0aC5wb3coLWUsbik6TWF0aC5wb3coZSxuKX1mdW5jdGlvbiBBKCl7ZnVuY3Rpb24gZShlLG4pe3JldHVybihuPVAobixhKS0oZT1QKGUsYSkpKT9mdW5jdGlvbihmKXtyZXR1cm4oUChmLGEpLWUpL259Omwobil9ZnVuY3Rpb24gbihlLG4pe3JldHVybiBuPVAobixhKS0oZT1QKGUsYSkpLGZ1bmN0aW9uKGYpe3JldHVybiBQKGUrbipmLDEvYSl9fXZhciBhPTEsZj14KGUsbiksYz1mLmRvbWFpbjtyZXR1cm4gZi5leHBvbmVudD1mdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oYT0rZSxjKGMoKSkpOmF9LGYuY29weT1mdW5jdGlvbigpe3JldHVybiB2KGYsQSgpLmV4cG9uZW50KGEpKX0sdyhmKX1mdW5jdGlvbiBFKCl7cmV0dXJuIEEoKS5leHBvbmVudCguNSl9ZnVuY3Rpb24gUigpe2Z1bmN0aW9uIGUoKXt2YXIgZT0wLHI9TWF0aC5tYXgoMSxjLmxlbmd0aCk7Zm9yKHQ9bmV3IEFycmF5KHItMSk7KytlPHI7KXRbZS0xXT1uLnF1YW50aWxlKGYsZS9yKTtyZXR1cm4gYX1mdW5jdGlvbiBhKGUpe2lmKCFpc05hTihlPStlKSlyZXR1cm4gY1tuLmJpc2VjdCh0LGUpXX12YXIgZj1bXSxjPVtdLHQ9W107cmV0dXJuIGEuaW52ZXJ0RXh0ZW50PWZ1bmN0aW9uKGUpe3ZhciBuPWMuaW5kZXhPZihlKTtyZXR1cm4gbjwwP1tOYU4sTmFOXTpbbj4wP3Rbbi0xXTpmWzBdLG48dC5sZW5ndGg/dFtuXTpmW2YubGVuZ3RoLTFdXX0sYS5kb21haW49ZnVuY3Rpb24oYSl7aWYoIWFyZ3VtZW50cy5sZW5ndGgpcmV0dXJuIGYuc2xpY2UoKTtmPVtdO2Zvcih2YXIgYyx0PTAscj1hLmxlbmd0aDt0PHI7Kyt0KWM9YVt0XSxudWxsPT1jfHxpc05hTihjPStjKXx8Zi5wdXNoKGMpO3JldHVybiBmLnNvcnQobi5hc2NlbmRpbmcpLGUoKX0sYS5yYW5nZT1mdW5jdGlvbihuKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oYz1LLmNhbGwobiksZSgpKTpjLnNsaWNlKCl9LGEucXVhbnRpbGVzPWZ1bmN0aW9uKCl7cmV0dXJuIHQuc2xpY2UoKX0sYS5jb3B5PWZ1bmN0aW9uKCl7cmV0dXJuIFIoKS5kb21haW4oZikucmFuZ2UoYyl9LGF9ZnVuY3Rpb24gVCgpe2Z1bmN0aW9uIGUoZSl7aWYoZTw9ZSlyZXR1cm4gZFtuLmJpc2VjdChyLGUsMCx0KV19ZnVuY3Rpb24gYSgpe3ZhciBuPS0xO2ZvcihyPW5ldyBBcnJheSh0KTsrK248dDspcltuXT0oKG4rMSkqYy0obi10KSpmKS8odCsxKTtyZXR1cm4gZX12YXIgZj0wLGM9MSx0PTEscj1bLjVdLGQ9WzAsMV07cmV0dXJuIGUuZG9tYWluPWZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhmPStlWzBdLGM9K2VbMV0sYSgpKTpbZixjXX0sZS5yYW5nZT1mdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8odD0oZD1LLmNhbGwoZSkpLmxlbmd0aC0xLGEoKSk6ZC5zbGljZSgpfSxlLmludmVydEV4dGVudD1mdW5jdGlvbihlKXt2YXIgbj1kLmluZGV4T2YoZSk7cmV0dXJuIG48MD9bTmFOLE5hTl06bjwxP1tmLHJbMF1dOm4+PXQ/W3JbdC0xXSxjXTpbcltuLTFdLHJbbl1dfSxlLmNvcHk9ZnVuY3Rpb24oKXtyZXR1cm4gVCgpLmRvbWFpbihbZixjXSkucmFuZ2UoZCl9LHcoZSl9ZnVuY3Rpb24gVSgpe2Z1bmN0aW9uIGUoZSl7aWYoZTw9ZSlyZXR1cm4gZltuLmJpc2VjdChhLGUsMCxjKV19dmFyIGE9Wy41XSxmPVswLDFdLGM9MTtyZXR1cm4gZS5kb21haW49ZnVuY3Rpb24obil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGE9Sy5jYWxsKG4pLGM9TWF0aC5taW4oYS5sZW5ndGgsZi5sZW5ndGgtMSksZSk6YS5zbGljZSgpfSxlLnJhbmdlPWZ1bmN0aW9uKG4pe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhmPUsuY2FsbChuKSxjPU1hdGgubWluKGEubGVuZ3RoLGYubGVuZ3RoLTEpLGUpOmYuc2xpY2UoKX0sZS5pbnZlcnRFeHRlbnQ9ZnVuY3Rpb24oZSl7dmFyIG49Zi5pbmRleE9mKGUpO3JldHVyblthW24tMV0sYVtuXV19LGUuY29weT1mdW5jdGlvbigpe3JldHVybiBVKCkuZG9tYWluKGEpLnJhbmdlKGYpfSxlfWZ1bmN0aW9uIFcoZSl7cmV0dXJuIG5ldyBEYXRlKGUpfWZ1bmN0aW9uIFkoZSl7cmV0dXJuIGUgaW5zdGFuY2VvZiBEYXRlPytlOituZXcgRGF0ZSgoK2UpKX1mdW5jdGlvbiBqKGUsYSxjLHQscixkLGksdSxiKXtmdW5jdGlvbiBvKG4pe3JldHVybihpKG4pPG4/bTpkKG4pPG4/TTpyKG4pPG4/eTp0KG4pPG4/dzphKG4pPG4/YyhuKTxuP2s6TjplKG4pPG4/QzpEKShuKX1mdW5jdGlvbiBsKGEsZixjLHQpe2lmKG51bGw9PWEmJihhPTEwKSwibnVtYmVyIj09dHlwZW9mIGEpe3ZhciByPU1hdGguYWJzKGMtZikvYSxkPW4uYmlzZWN0b3IoZnVuY3Rpb24oZSl7cmV0dXJuIGVbMl19KS5yaWdodChTLHIpO2Q9PT1TLmxlbmd0aD8odD1uLnRpY2tTdGVwKGYvdGUsYy90ZSxhKSxhPWUpOmQ/KGQ9U1tyL1NbZC0xXVsyXTxTW2RdWzJdL3I/ZC0xOmRdLHQ9ZFsxXSxhPWRbMF0pOih0PW4udGlja1N0ZXAoZixjLGEpLGE9dSl9cmV0dXJuIG51bGw9PXQ/YTphLmV2ZXJ5KHQpfXZhciBoPXgocyxmLmludGVycG9sYXRlTnVtYmVyKSxnPWguaW52ZXJ0LHA9aC5kb21haW4sbT1iKCIuJUwiKSxNPWIoIjolUyIpLHk9YigiJUk6JU0iKSx3PWIoIiVJICVwIiksaz1iKCIlYSAlZCIpLE49YigiJWIgJWQiKSxDPWIoIiVCIiksRD1iKCIlWSIpLFM9W1tpLDEsJF0sW2ksNSw1KiRdLFtpLDE1LDE1KiRdLFtpLDMwLDMwKiRdLFtkLDEsZWVdLFtkLDUsNSplZV0sW2QsMTUsMTUqZWVdLFtkLDMwLDMwKmVlXSxbciwxLG5lXSxbciwzLDMqbmVdLFtyLDYsNipuZV0sW3IsMTIsMTIqbmVdLFt0LDEsYWVdLFt0LDIsMiphZV0sW2MsMSxmZV0sW2EsMSxjZV0sW2EsMywzKmNlXSxbZSwxLHRlXV07cmV0dXJuIGguaW52ZXJ0PWZ1bmN0aW9uKGUpe3JldHVybiBuZXcgRGF0ZShnKGUpKX0saC5kb21haW49ZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/cChKLmNhbGwoZSxZKSk6cCgpLm1hcChXKX0saC50aWNrcz1mdW5jdGlvbihlLG4pe3ZhciBhLGY9cCgpLGM9ZlswXSx0PWZbZi5sZW5ndGgtMV0scj10PGM7cmV0dXJuIHImJihhPWMsYz10LHQ9YSksYT1sKGUsYyx0LG4pLGE9YT9hLnJhbmdlKGMsdCsxKTpbXSxyP2EucmV2ZXJzZSgpOmF9LGgudGlja0Zvcm1hdD1mdW5jdGlvbihlLG4pe3JldHVybiBudWxsPT1uP286YihuKX0saC5uaWNlPWZ1bmN0aW9uKGUsbil7dmFyIGE9cCgpO3JldHVybihlPWwoZSxhWzBdLGFbYS5sZW5ndGgtMV0sbikpP3AocShhLGUpKTpofSxoLmNvcHk9ZnVuY3Rpb24oKXtyZXR1cm4gdihoLGooZSxhLGMsdCxyLGQsaSx1LGIpKX0saH1mdW5jdGlvbiBCKCl7cmV0dXJuIGoodC50aW1lWWVhcix0LnRpbWVNb250aCx0LnRpbWVXZWVrLHQudGltZURheSx0LnRpbWVIb3VyLHQudGltZU1pbnV0ZSx0LnRpbWVTZWNvbmQsdC50aW1lTWlsbGlzZWNvbmQsci50aW1lRm9ybWF0KS5kb21haW4oW25ldyBEYXRlKDJlMywwLDEpLG5ldyBEYXRlKDJlMywwLDIpXSl9ZnVuY3Rpb24gSCgpe3JldHVybiBqKHQudXRjWWVhcix0LnV0Y01vbnRoLHQudXRjV2Vlayx0LnV0Y0RheSx0LnV0Y0hvdXIsdC51dGNNaW51dGUsdC51dGNTZWNvbmQsdC51dGNNaWxsaXNlY29uZCxyLnV0Y0Zvcm1hdCkuZG9tYWluKFtEYXRlLlVUQygyZTMsMCwxKSxEYXRlLlVUQygyZTMsMCwyKV0pfWZ1bmN0aW9uIFEoZSl7cmV0dXJuIGUubWF0Y2goLy57Nn0vZykubWFwKGZ1bmN0aW9uKGUpe3JldHVybiIjIitlfSl9ZnVuY3Rpb24gXyhlKXsoZTwwfHxlPjEpJiYoZS09TWF0aC5mbG9vcihlKSk7dmFyIG49TWF0aC5hYnMoZS0uNSk7cmV0dXJuIGhlLmg9MzYwKmUtMTAwLGhlLnM9MS41LTEuNSpuLGhlLmw9LjgtLjkqbixoZSsiIn1mdW5jdGlvbiB6KGUpe3ZhciBuPWUubGVuZ3RoO3JldHVybiBmdW5jdGlvbihhKXtyZXR1cm4gZVtNYXRoLm1heCgwLE1hdGgubWluKG4tMSxNYXRoLmZsb29yKGEqbikpKV19fWZ1bmN0aW9uIFYoZSl7ZnVuY3Rpb24gbihuKXt2YXIgdD0obi1hKS8oZi1hKTtyZXR1cm4gZShjP01hdGgubWF4KDAsTWF0aC5taW4oMSx0KSk6dCl9dmFyIGE9MCxmPTEsYz0hMTtyZXR1cm4gbi5kb21haW49ZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGE9K2VbMF0sZj0rZVsxXSxuKTpbYSxmXX0sbi5jbGFtcD1mdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oYz0hIWUsbik6Y30sbi5pbnRlcnBvbGF0b3I9ZnVuY3Rpb24oYSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGU9YSxuKTplfSxuLmNvcHk9ZnVuY3Rpb24oKXtyZXR1cm4gVihlKS5kb21haW4oW2EsZl0pLmNsYW1wKGMpfSx3KG4pfXZhciBHPUFycmF5LnByb3RvdHlwZSxKPUcubWFwLEs9Ry5zbGljZSxYPXtuYW1lOiJpbXBsaWNpdCJ9LFo9WzAsMV0sJD0xZTMsZWU9NjAqJCxuZT02MCplZSxhZT0yNCpuZSxmZT03KmFlLGNlPTMwKmFlLHRlPTM2NSphZSxyZT1RKCIxZjc3YjRmZjdmMGUyY2EwMmNkNjI3Mjg5NDY3YmQ4YzU2NGJlMzc3YzI3ZjdmN2ZiY2JkMjIxN2JlY2YiKSxkZT1RKCIzOTNiNzk1MjU0YTM2YjZlY2Y5YzllZGU2Mzc5Mzk4Y2EyNTJiNWNmNmJjZWRiOWM4YzZkMzFiZDllMzllN2JhNTJlN2NiOTQ4NDNjMzlhZDQ5NGFkNjYxNmJlNzk2OWM3YjQxNzNhNTUxOTRjZTZkYmRkZTllZDYiKSxpZT1RKCIzMTgyYmQ2YmFlZDY5ZWNhZTFjNmRiZWZlNjU1MGRmZDhkM2NmZGFlNmJmZGQwYTIzMWEzNTQ3NGM0NzZhMWQ5OWJjN2U5YzA3NTZiYjE5ZTlhYzhiY2JkZGNkYWRhZWI2MzYzNjM5Njk2OTZiZGJkYmRkOWQ5ZDkiKSx1ZT1RKCIxZjc3YjRhZWM3ZThmZjdmMGVmZmJiNzgyY2EwMmM5OGRmOGFkNjI3MjhmZjk4OTY5NDY3YmRjNWIwZDU4YzU2NGJjNDljOTRlMzc3YzJmN2I2ZDI3ZjdmN2ZjN2M3YzdiY2JkMjJkYmRiOGQxN2JlY2Y5ZWRhZTUiKSxiZT1mLmludGVycG9sYXRlQ3ViZWhlbGl4TG9uZyhkLmN1YmVoZWxpeCgzMDAsLjUsMCksZC5jdWJlaGVsaXgoLTI0MCwuNSwxKSksb2U9Zi5pbnRlcnBvbGF0ZUN1YmVoZWxpeExvbmcoZC5jdWJlaGVsaXgoLTEwMCwuNzUsLjM1KSxkLmN1YmVoZWxpeCg4MCwxLjUsLjgpKSxsZT1mLmludGVycG9sYXRlQ3ViZWhlbGl4TG9uZyhkLmN1YmVoZWxpeCgyNjAsLjc1LC4zNSksZC5jdWJlaGVsaXgoODAsMS41LC44KSksaGU9ZC5jdWJlaGVsaXgoKSxzZT16KFEoIjQ0MDE1NDQ0MDI1NjQ1MDQ1NzQ1MDU1OTQ2MDc1YTQ2MDg1YzQ2MGE1ZDQ2MGI1ZTQ3MGQ2MDQ3MGU2MTQ3MTA2MzQ3MTE2NDQ3MTM2NTQ4MTQ2NzQ4MTY2ODQ4MTc2OTQ4MTg2YTQ4MWE2YzQ4MWI2ZDQ4MWM2ZTQ4MWQ2ZjQ4MWY3MDQ4MjA3MTQ4MjE3MzQ4MjM3NDQ4MjQ3NTQ4MjU3NjQ4MjY3NzQ4Mjg3ODQ4Mjk3OTQ3MmE3YTQ3MmM3YTQ3MmQ3YjQ3MmU3YzQ3MmY3ZDQ2MzA3ZTQ2MzI3ZTQ2MzM3ZjQ2MzQ4MDQ1MzU4MTQ1Mzc4MTQ1Mzg4MjQ0Mzk4MzQ0M2E4MzQ0M2I4NDQzM2Q4NDQzM2U4NTQyM2Y4NTQyNDA4NjQyNDE4NjQxNDI4NzQxNDQ4NzQwNDU4ODQwNDY4ODNmNDc4ODNmNDg4OTNlNDk4OTNlNGE4OTNlNGM4YTNkNGQ4YTNkNGU4YTNjNGY4YTNjNTA4YjNiNTE4YjNiNTI4YjNhNTM4YjNhNTQ4YzM5NTU4YzM5NTY4YzM4NTg4YzM4NTk4YzM3NWE4YzM3NWI4ZDM2NWM4ZDM2NWQ4ZDM1NWU4ZDM1NWY4ZDM0NjA4ZDM0NjE4ZDMzNjI4ZDMzNjM4ZDMyNjQ4ZTMyNjU4ZTMxNjY4ZTMxNjc4ZTMxNjg4ZTMwNjk4ZTMwNmE4ZTJmNmI4ZTJmNmM4ZTJlNmQ4ZTJlNmU4ZTJlNmY4ZTJkNzA4ZTJkNzE4ZTJjNzE4ZTJjNzI4ZTJjNzM4ZTJiNzQ4ZTJiNzU4ZTJhNzY4ZTJhNzc4ZTJhNzg4ZTI5Nzk4ZTI5N2E4ZTI5N2I4ZTI4N2M4ZTI4N2Q4ZTI3N2U4ZTI3N2Y4ZTI3ODA4ZTI2ODE4ZTI2ODI4ZTI2ODI4ZTI1ODM4ZTI1ODQ4ZTI1ODU4ZTI0ODY4ZTI0ODc4ZTIzODg4ZTIzODk4ZTIzOGE4ZDIyOGI4ZDIyOGM4ZDIyOGQ4ZDIxOGU4ZDIxOGY4ZDIxOTA4ZDIxOTE4YzIwOTI4YzIwOTI4YzIwOTM4YzFmOTQ4YzFmOTU4YjFmOTY4YjFmOTc4YjFmOTg4YjFmOTk4YTFmOWE4YTFlOWI4YTFlOWM4OTFlOWQ4OTFmOWU4OTFmOWY4ODFmYTA4ODFmYTE4ODFmYTE4NzFmYTI4NzIwYTM4NjIwYTQ4NjIxYTU4NTIxYTY4NTIyYTc4NTIyYTg4NDIzYTk4MzI0YWE4MzI1YWI4MjI1YWM4MjI2YWQ4MTI3YWQ4MTI4YWU4MDI5YWY3ZjJhYjA3ZjJjYjE3ZTJkYjI3ZDJlYjM3YzJmYjQ3YzMxYjU3YjMyYjY3YTM0YjY3OTM1Yjc3OTM3Yjg3ODM4Yjk3NzNhYmE3NjNiYmI3NTNkYmM3NDNmYmM3MzQwYmQ3MjQyYmU3MTQ0YmY3MDQ2YzA2ZjQ4YzE2ZTRhYzE2ZDRjYzI2YzRlYzM2YjUwYzQ2YTUyYzU2OTU0YzU2ODU2YzY2NzU4Yzc2NTVhYzg2NDVjYzg2MzVlYzk2MjYwY2E2MDYzY2I1ZjY1Y2I1ZTY3Y2M1YzY5Y2Q1YjZjY2Q1YTZlY2U1ODcwY2Y1NzczZDA1Njc1ZDA1NDc3ZDE1MzdhZDE1MTdjZDI1MDdmZDM0ZTgxZDM0ZDg0ZDQ0Yjg2ZDU0OTg5ZDU0ODhiZDY0NjhlZDY0NTkwZDc0MzkzZDc0MTk1ZDg0MDk4ZDgzZTliZDkzYzlkZDkzYmEwZGEzOWEyZGEzN2E1ZGIzNmE4ZGIzNGFhZGMzMmFkZGMzMGIwZGQyZmIyZGQyZGI1ZGUyYmI4ZGUyOWJhZGUyOGJkZGYyNmMwZGYyNWMyZGYyM2M1ZTAyMWM4ZTAyMGNhZTExZmNkZTExZGQwZTExY2QyZTIxYmQ1ZTIxYWQ4ZTIxOWRhZTMxOWRkZTMxOGRmZTMxOGUyZTQxOGU1ZTQxOWU3ZTQxOWVhZTUxYWVjZTUxYmVmZTUxY2YxZTUxZGY0ZTYxZWY2ZTYyMGY4ZTYyMWZiZTcyM2ZkZTcyNSIpKSxnZT16KFEoIjAwMDAwNDAxMDAwNTAxMDEwNjAxMDEwODAyMDEwOTAyMDIwYjAyMDIwZDAzMDMwZjAzMDMxMjA0MDQxNDA1MDQxNjA2MDUxODA2MDUxYTA3MDYxYzA4MDcxZTA5MDcyMDBhMDgyMjBiMDkyNDBjMDkyNjBkMGEyOTBlMGIyYjEwMGIyZDExMGMyZjEyMGQzMTEzMGQzNDE0MGUzNjE1MGUzODE2MGYzYjE4MGYzZDE5MTAzZjFhMTA0MjFjMTA0NDFkMTE0NzFlMTE0OTIwMTE0YjIxMTE0ZTIyMTE1MDI0MTI1MzI1MTI1NTI3MTI1ODI5MTE1YTJhMTE1YzJjMTE1ZjJkMTE2MTJmMTE2MzMxMTE2NTMzMTA2NzM0MTA2OTM2MTA2YjM4MTA2YzM5MGY2ZTNiMGY3MDNkMGY3MTNmMGY3MjQwMGY3NDQyMGY3NTQ0MGY3NjQ1MTA3NzQ3MTA3ODQ5MTA3ODRhMTA3OTRjMTE3YTRlMTE3YjRmMTI3YjUxMTI3YzUyMTM3YzU0MTM3ZDU2MTQ3ZDU3MTU3ZTU5MTU3ZTVhMTY3ZTVjMTY3ZjVkMTc3ZjVmMTg3ZjYwMTg4MDYyMTk4MDY0MWE4MDY1MWE4MDY3MWI4MDY4MWM4MTZhMWM4MTZiMWQ4MTZkMWQ4MTZlMWU4MTcwMWY4MTcyMWY4MTczMjA4MTc1MjE4MTc2MjE4MTc4MjI4MTc5MjI4MjdiMjM4MjdjMjM4MjdlMjQ4MjgwMjU4MjgxMjU4MTgzMjY4MTg0MjY4MTg2Mjc4MTg4Mjc4MTg5Mjg4MThiMjk4MThjMjk4MThlMmE4MTkwMmE4MTkxMmI4MTkzMmI4MDk0MmM4MDk2MmM4MDk4MmQ4MDk5MmQ4MDliMmU3ZjljMmU3ZjllMmY3ZmEwMmY3ZmExMzA3ZWEzMzA3ZWE1MzE3ZWE2MzE3ZGE4MzI3ZGFhMzM3ZGFiMzM3Y2FkMzQ3Y2FlMzQ3YmIwMzU3YmIyMzU3YmIzMzY3YWI1MzY3YWI3Mzc3OWI4Mzc3OWJhMzg3OGJjMzk3OGJkMzk3N2JmM2E3N2MwM2E3NmMyM2I3NWM0M2M3NWM1M2M3NGM3M2Q3M2M4M2U3M2NhM2U3MmNjM2Y3MWNkNDA3MWNmNDA3MGQwNDE2ZmQyNDI2ZmQzNDM2ZWQ1NDQ2ZGQ2NDU2Y2Q4NDU2Y2Q5NDY2YmRiNDc2YWRjNDg2OWRlNDk2OGRmNGE2OGUwNGM2N2UyNGQ2NmUzNGU2NWU0NGY2NGU1NTA2NGU3NTI2M2U4NTM2MmU5NTQ2MmVhNTY2MWViNTc2MGVjNTg2MGVkNWE1ZmVlNWI1ZWVmNWQ1ZWYwNWY1ZWYxNjA1ZGYyNjI1ZGYyNjQ1Y2YzNjU1Y2Y0Njc1Y2Y0Njk1Y2Y1NmI1Y2Y2NmM1Y2Y2NmU1Y2Y3NzA1Y2Y3NzI1Y2Y4NzQ1Y2Y4NzY1Y2Y5Nzg1ZGY5Nzk1ZGY5N2I1ZGZhN2Q1ZWZhN2Y1ZWZhODE1ZmZiODM1ZmZiODU2MGZiODc2MWZjODk2MWZjOGE2MmZjOGM2M2ZjOGU2NGZjOTA2NWZkOTI2NmZkOTQ2N2ZkOTY2OGZkOTg2OWZkOWE2YWZkOWI2YmZlOWQ2Y2ZlOWY2ZGZlYTE2ZWZlYTM2ZmZlYTU3MWZlYTc3MmZlYTk3M2ZlYWE3NGZlYWM3NmZlYWU3N2ZlYjA3OGZlYjI3YWZlYjQ3YmZlYjY3Y2ZlYjc3ZWZlYjk3ZmZlYmI4MWZlYmQ4MmZlYmY4NGZlYzE4NWZlYzI4N2ZlYzQ4OGZlYzY4YWZlYzg4Y2ZlY2E4ZGZlY2M4ZmZlY2Q5MGZlY2Y5MmZlZDE5NGZlZDM5NWZlZDU5N2ZlZDc5OWZlZDg5YWZkZGE5Y2ZkZGM5ZWZkZGVhMGZkZTBhMWZkZTJhM2ZkZTNhNWZkZTVhN2ZkZTdhOWZkZTlhYWZkZWJhY2ZjZWNhZWZjZWViMGZjZjBiMmZjZjJiNGZjZjRiNmZjZjZiOGZjZjdiOWZjZjliYmZjZmJiZGZjZmRiZiIpKSxwZT16KFEoIjAwMDAwNDAxMDAwNTAxMDEwNjAxMDEwODAyMDEwYTAyMDIwYzAyMDIwZTAzMDIxMDA0MDMxMjA0MDMxNDA1MDQxNzA2MDQxOTA3MDUxYjA4MDUxZDA5MDYxZjBhMDcyMjBiMDcyNDBjMDgyNjBkMDgyOTBlMDkyYjEwMDkyZDExMGEzMDEyMGEzMjE0MGIzNDE1MGIzNzE2MGIzOTE4MGMzYzE5MGMzZTFiMGM0MTFjMGM0MzFlMGM0NTFmMGM0ODIxMGM0YTIzMGM0YzI0MGM0ZjI2MGM1MTI4MGI1MzI5MGI1NTJiMGI1NzJkMGI1OTJmMGE1YjMxMGE1YzMyMGE1ZTM0MGE1ZjM2MDk2MTM4MDk2MjM5MDk2MzNiMDk2NDNkMDk2NTNlMDk2NjQwMGE2NzQyMGE2ODQ0MGE2ODQ1MGE2OTQ3MGI2YTQ5MGI2YTRhMGM2YjRjMGM2YjRkMGQ2YzRmMGQ2YzUxMGU2YzUyMGU2ZDU0MGY2ZDU1MGY2ZDU3MTA2ZTU5MTA2ZTVhMTE2ZTVjMTI2ZTVkMTI2ZTVmMTM2ZTYxMTM2ZTYyMTQ2ZTY0MTU2ZTY1MTU2ZTY3MTY2ZTY5MTY2ZTZhMTc2ZTZjMTg2ZTZkMTg2ZTZmMTk2ZTcxMTk2ZTcyMWE2ZTc0MWE2ZTc1MWI2ZTc3MWM2ZDc4MWM2ZDdhMWQ2ZDdjMWQ2ZDdkMWU2ZDdmMWU2YzgwMWY2YzgyMjA2Yzg0MjA2Yjg1MjE2Yjg3MjE2Yjg4MjI2YThhMjI2YThjMjM2OThkMjM2OThmMjQ2OTkwMjU2ODkyMjU2ODkzMjY2Nzk1MjY2Nzk3Mjc2Njk4Mjc2NjlhMjg2NTliMjk2NDlkMjk2NDlmMmE2M2EwMmE2M2EyMmI2MmEzMmM2MWE1MmM2MGE2MmQ2MGE4MmU1ZmE5MmU1ZWFiMmY1ZWFkMzA1ZGFlMzA1Y2IwMzE1YmIxMzI1YWIzMzI1YWI0MzM1OWI2MzQ1OGI3MzU1N2I5MzU1NmJhMzY1NWJjMzc1NGJkMzg1M2JmMzk1MmMwM2E1MWMxM2E1MGMzM2I0ZmM0M2M0ZWM2M2Q0ZGM3M2U0Y2M4M2Y0YmNhNDA0YWNiNDE0OWNjNDI0OGNlNDM0N2NmNDQ0NmQwNDU0NWQyNDY0NGQzNDc0M2Q0NDg0MmQ1NGE0MWQ3NGIzZmQ4NGMzZWQ5NGQzZGRhNGUzY2RiNTAzYmRkNTEzYWRlNTIzOGRmNTMzN2UwNTUzNmUxNTYzNWUyNTczNGUzNTkzM2U0NWEzMWU1NWMzMGU2NWQyZmU3NWUyZWU4NjAyZGU5NjEyYmVhNjMyYWViNjQyOWViNjYyOGVjNjcyNmVkNjkyNWVlNmEyNGVmNmMyM2VmNmUyMWYwNmYyMGYxNzExZmYxNzMxZGYyNzQxY2YzNzYxYmYzNzgxOWY0NzkxOGY1N2IxN2Y1N2QxNWY2N2UxNGY2ODAxM2Y3ODIxMmY3ODQxMGY4ODUwZmY4ODcwZWY4ODkwY2Y5OGIwYmY5OGMwYWY5OGUwOWZhOTAwOGZhOTIwN2ZhOTQwN2ZiOTYwNmZiOTcwNmZiOTkwNmZiOWIwNmZiOWQwN2ZjOWYwN2ZjYTEwOGZjYTMwOWZjYTUwYWZjYTYwY2ZjYTgwZGZjYWEwZmZjYWMxMWZjYWUxMmZjYjAxNGZjYjIxNmZjYjQxOGZiYjYxYWZiYjgxZGZiYmExZmZiYmMyMWZiYmUyM2ZhYzAyNmZhYzIyOGZhYzQyYWZhYzYyZGY5YzcyZmY5YzkzMmY5Y2IzNWY4Y2QzN2Y4Y2YzYWY3ZDEzZGY3ZDM0MGY2ZDU0M2Y2ZDc0NmY1ZDk0OWY1ZGI0Y2Y0ZGQ0ZmY0ZGY1M2Y0ZTE1NmYzZTM1YWYzZTU1ZGYyZTY2MWYyZTg2NWYyZWE2OWYxZWM2ZGYxZWQ3MWYxZWY3NWYxZjE3OWYyZjI3ZGYyZjQ4MmYzZjU4NmYzZjY4YWY0Zjg4ZWY1Zjk5MmY2ZmE5NmY4ZmI5YWY5ZmM5ZGZhZmRhMWZjZmZhNCIpKSxtZT16KFEoIjBkMDg4NzEwMDc4ODEzMDc4OTE2MDc4YTE5MDY4YzFiMDY4ZDFkMDY4ZTIwMDY4ZjIyMDY5MDI0MDY5MTI2MDU5MTI4MDU5MjJhMDU5MzJjMDU5NDJlMDU5NTJmMDU5NjMxMDU5NzMzMDU5NzM1MDQ5ODM3MDQ5OTM4MDQ5YTNhMDQ5YTNjMDQ5YjNlMDQ5YzNmMDQ5YzQxMDQ5ZDQzMDM5ZTQ0MDM5ZTQ2MDM5ZjQ4MDM5ZjQ5MDNhMDRiMDNhMTRjMDJhMTRlMDJhMjUwMDJhMjUxMDJhMzUzMDJhMzU1MDJhNDU2MDFhNDU4MDFhNDU5MDFhNTViMDFhNTVjMDFhNjVlMDFhNjYwMDFhNjYxMDBhNzYzMDBhNzY0MDBhNzY2MDBhNzY3MDBhODY5MDBhODZhMDBhODZjMDBhODZlMDBhODZmMDBhODcxMDBhODcyMDFhODc0MDFhODc1MDFhODc3MDFhODc4MDFhODdhMDJhODdiMDJhODdkMDNhODdlMDNhODgwMDRhODgxMDRhNzgzMDVhNzg0MDVhNzg2MDZhNjg3MDdhNjg4MDhhNjhhMDlhNThiMGFhNThkMGJhNThlMGNhNDhmMGRhNDkxMGVhMzkyMGZhMzk0MTBhMjk1MTFhMTk2MTNhMTk4MTRhMDk5MTU5ZjlhMTY5ZjljMTc5ZTlkMTg5ZDllMTk5ZGEwMWE5Y2ExMWI5YmEyMWQ5YWEzMWU5YWE1MWY5OWE2MjA5OGE3MjE5N2E4MjI5NmFhMjM5NWFiMjQ5NGFjMjY5NGFkMjc5M2FlMjg5MmIwMjk5MWIxMmE5MGIyMmI4ZmIzMmM4ZWI0MmU4ZGI1MmY4Y2I2MzA4YmI3MzE4YWI4MzI4OWJhMzM4OGJiMzQ4OGJjMzU4N2JkMzc4NmJlMzg4NWJmMzk4NGMwM2E4M2MxM2I4MmMyM2M4MWMzM2Q4MGM0M2U3ZmM1NDA3ZWM2NDE3ZGM3NDI3Y2M4NDM3YmM5NDQ3YWNhNDU3YWNiNDY3OWNjNDc3OGNjNDk3N2NkNGE3NmNlNGI3NWNmNGM3NGQwNGQ3M2QxNGU3MmQyNGY3MWQzNTE3MWQ0NTI3MGQ1NTM2ZmQ1NTQ2ZWQ2NTU2ZGQ3NTY2Y2Q4NTc2YmQ5NTg2YWRhNWE2YWRhNWI2OWRiNWM2OGRjNWQ2N2RkNWU2NmRlNWY2NWRlNjE2NGRmNjI2M2UwNjM2M2UxNjQ2MmUyNjU2MWUyNjY2MGUzNjg1ZmU0Njk1ZWU1NmE1ZGU1NmI1ZGU2NmM1Y2U3NmU1YmU3NmY1YWU4NzA1OWU5NzE1OGU5NzI1N2VhNzQ1N2ViNzU1NmViNzY1NWVjNzc1NGVkNzk1M2VkN2E1MmVlN2I1MWVmN2M1MWVmN2U1MGYwN2Y0ZmYwODA0ZWYxODE0ZGYxODM0Y2YyODQ0YmYzODU0YmYzODc0YWY0ODg0OWY0ODk0OGY1OGI0N2Y1OGM0NmY2OGQ0NWY2OGY0NGY3OTA0NGY3OTE0M2Y3OTM0MmY4OTQ0MWY4OTU0MGY5OTczZmY5OTgzZWY5OWEzZWZhOWIzZGZhOWMzY2ZhOWUzYmZiOWYzYWZiYTEzOWZiYTIzOGZjYTMzOGZjYTUzN2ZjYTYzNmZjYTgzNWZjYTkzNGZkYWIzM2ZkYWMzM2ZkYWUzMmZkYWYzMWZkYjEzMGZkYjIyZmZkYjQyZmZkYjUyZWZlYjcyZGZlYjgyY2ZlYmEyY2ZlYmIyYmZlYmQyYWZlYmUyYWZlYzAyOWZkYzIyOWZkYzMyOGZkYzUyN2ZkYzYyN2ZkYzgyN2ZkY2EyNmZkY2IyNmZjY2QyNWZjY2UyNWZjZDAyNWZjZDIyNWZiZDMyNGZiZDUyNGZiZDcyNGZhZDgyNGZhZGEyNGY5ZGMyNGY5ZGQyNWY4ZGYyNWY4ZTEyNWY3ZTIyNWY3ZTQyNWY2ZTYyNmY2ZTgyNmY1ZTkyNmY1ZWIyN2Y0ZWQyN2YzZWUyN2YzZjAyN2YyZjIyN2YxZjQyNmYxZjUyNWYwZjcyNGYwZjkyMSIpKTtlLnNjYWxlQmFuZD11LGUuc2NhbGVQb2ludD1vLGUuc2NhbGVJZGVudGl0eT1OLGUuc2NhbGVMaW5lYXI9ayxlLnNjYWxlTG9nPUwsZS5zY2FsZU9yZGluYWw9aSxlLnNjYWxlSW1wbGljaXQ9WCxlLnNjYWxlUG93PUEsZS5zY2FsZVNxcnQ9RSxlLnNjYWxlUXVhbnRpbGU9UixlLnNjYWxlUXVhbnRpemU9VCxlLnNjYWxlVGhyZXNob2xkPVUsZS5zY2FsZVRpbWU9QixlLnNjYWxlVXRjPUgsZS5zY2hlbWVDYXRlZ29yeTEwPXJlLGUuc2NoZW1lQ2F0ZWdvcnkyMGI9ZGUsZS5zY2hlbWVDYXRlZ29yeTIwYz1pZSxlLnNjaGVtZUNhdGVnb3J5MjA9dWUsZS5pbnRlcnBvbGF0ZUN1YmVoZWxpeERlZmF1bHQ9YmUsZS5pbnRlcnBvbGF0ZVJhaW5ib3c9XyxlLmludGVycG9sYXRlV2FybT1vZSxlLmludGVycG9sYXRlQ29vbD1sZSxlLmludGVycG9sYXRlVmlyaWRpcz1zZSxlLmludGVycG9sYXRlTWFnbWE9Z2UsZS5pbnRlcnBvbGF0ZUluZmVybm89cGUsZS5pbnRlcnBvbGF0ZVBsYXNtYT1tZSxlLnNjYWxlU2VxdWVudGlhbD1WLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KX0pOw=="></script>
<script src="data:application/x-javascript;base64,Ly8gaHR0cHM6Ly9kM2pzLm9yZy9kMy10aW1lci8gVmVyc2lvbiAxLjAuMy4gQ29weXJpZ2h0IDIwMTYgTWlrZSBCb3N0b2NrLgohZnVuY3Rpb24odCxuKXsib2JqZWN0Ij09dHlwZW9mIGV4cG9ydHMmJiJ1bmRlZmluZWQiIT10eXBlb2YgbW9kdWxlP24oZXhwb3J0cyk6ImZ1bmN0aW9uIj09dHlwZW9mIGRlZmluZSYmZGVmaW5lLmFtZD9kZWZpbmUoWyJleHBvcnRzIl0sbik6bih0LmQzPXQuZDN8fHt9KX0odGhpcyxmdW5jdGlvbih0KXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gbigpe3JldHVybiB4fHwoVChlKSx4PWIubm93KCkrdyl9ZnVuY3Rpb24gZSgpe3g9MH1mdW5jdGlvbiBpKCl7dGhpcy5fY2FsbD10aGlzLl90aW1lPXRoaXMuX25leHQ9bnVsbH1mdW5jdGlvbiBvKHQsbixlKXt2YXIgbz1uZXcgaTtyZXR1cm4gby5yZXN0YXJ0KHQsbixlKSxvfWZ1bmN0aW9uIHIoKXtuKCksKytwO2Zvcih2YXIgdCxlPV87ZTspKHQ9eC1lLl90aW1lKT49MCYmZS5fY2FsbC5jYWxsKG51bGwsdCksZT1lLl9uZXh0Oy0tcH1mdW5jdGlvbiB1KCl7eD0oZD1iLm5vdygpKSt3LHA9aD0wO3RyeXtyKCl9ZmluYWxseXtwPTAsYygpLHg9MH19ZnVuY3Rpb24gbCgpe3ZhciB0PWIubm93KCksbj10LWQ7bj55JiYody09bixkPXQpfWZ1bmN0aW9uIGMoKXtmb3IodmFyIHQsbixlPV8saT0xLzA7ZTspZS5fY2FsbD8oaT5lLl90aW1lJiYoaT1lLl90aW1lKSx0PWUsZT1lLl9uZXh0KToobj1lLl9uZXh0LGUuX25leHQ9bnVsbCxlPXQ/dC5fbmV4dD1uOl89bik7bT10LGYoaSl9ZnVuY3Rpb24gZih0KXtpZighcCl7aCYmKGg9Y2xlYXJUaW1lb3V0KGgpKTt2YXIgbj10LXg7bj4yND8odDwxLzAmJihoPXNldFRpbWVvdXQodSxuKSksdiYmKHY9Y2xlYXJJbnRlcnZhbCh2KSkpOih2fHwodj1zZXRJbnRlcnZhbChsLHkpKSxwPTEsVCh1KSl9fWZ1bmN0aW9uIGEodCxuLGUpe3ZhciBvPW5ldyBpO3JldHVybiBuPW51bGw9PW4/MDorbixvLnJlc3RhcnQoZnVuY3Rpb24oZSl7by5zdG9wKCksdChlK24pfSxuLGUpLG99ZnVuY3Rpb24gcyh0LGUsbyl7dmFyIHI9bmV3IGksdT1lO3JldHVybiBudWxsPT1lPyhyLnJlc3RhcnQodCxlLG8pLHIpOihlPStlLG89bnVsbD09bz9uKCk6K28sci5yZXN0YXJ0KGZ1bmN0aW9uIG4oaSl7aSs9dSxyLnJlc3RhcnQobix1Kz1lLG8pLHQoaSl9LGUsbykscil9dmFyIF8sbSxwPTAsaD0wLHY9MCx5PTFlMyxkPTAseD0wLHc9MCxiPSJvYmplY3QiPT10eXBlb2YgcGVyZm9ybWFuY2UmJnBlcmZvcm1hbmNlLm5vdz9wZXJmb3JtYW5jZTpEYXRlLFQ9ImZ1bmN0aW9uIj09dHlwZW9mIHJlcXVlc3RBbmltYXRpb25GcmFtZT9yZXF1ZXN0QW5pbWF0aW9uRnJhbWU6ZnVuY3Rpb24odCl7c2V0VGltZW91dCh0LDE3KX07aS5wcm90b3R5cGU9by5wcm90b3R5cGU9e2NvbnN0cnVjdG9yOmkscmVzdGFydDpmdW5jdGlvbih0LGUsaSl7aWYoImZ1bmN0aW9uIiE9dHlwZW9mIHQpdGhyb3cgbmV3IFR5cGVFcnJvcigiY2FsbGJhY2sgaXMgbm90IGEgZnVuY3Rpb24iKTtpPShudWxsPT1pP24oKToraSkrKG51bGw9PWU/MDorZSksdGhpcy5fbmV4dHx8bT09PXRoaXN8fChtP20uX25leHQ9dGhpczpfPXRoaXMsbT10aGlzKSx0aGlzLl9jYWxsPXQsdGhpcy5fdGltZT1pLGYoKX0sc3RvcDpmdW5jdGlvbigpe3RoaXMuX2NhbGwmJih0aGlzLl9jYWxsPW51bGwsdGhpcy5fdGltZT0xLzAsZigpKX19LHQubm93PW4sdC50aW1lcj1vLHQudGltZXJGbHVzaD1yLHQudGltZW91dD1hLHQuaW50ZXJ2YWw9cyxPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSl9KTs="></script>
<script src="data:application/x-javascript;base64,Ly8gaHR0cHM6Ly9kM2pzLm9yZy9kMy10cmFuc2l0aW9uLyBWZXJzaW9uIDEuMC4yLiBDb3B5cmlnaHQgMjAxNiBNaWtlIEJvc3RvY2suCiFmdW5jdGlvbih0LG4peyJvYmplY3QiPT10eXBlb2YgZXhwb3J0cyYmInVuZGVmaW5lZCIhPXR5cGVvZiBtb2R1bGU/bihleHBvcnRzLHJlcXVpcmUoImQzLXNlbGVjdGlvbiIpLHJlcXVpcmUoImQzLWRpc3BhdGNoIikscmVxdWlyZSgiZDMtdGltZXIiKSxyZXF1aXJlKCJkMy1pbnRlcnBvbGF0ZSIpLHJlcXVpcmUoImQzLWNvbG9yIikscmVxdWlyZSgiZDMtZWFzZSIpKToiZnVuY3Rpb24iPT10eXBlb2YgZGVmaW5lJiZkZWZpbmUuYW1kP2RlZmluZShbImV4cG9ydHMiLCJkMy1zZWxlY3Rpb24iLCJkMy1kaXNwYXRjaCIsImQzLXRpbWVyIiwiZDMtaW50ZXJwb2xhdGUiLCJkMy1jb2xvciIsImQzLWVhc2UiXSxuKTpuKHQuZDM9dC5kM3x8e30sdC5kMyx0LmQzLHQuZDMsdC5kMyx0LmQzLHQuZDMpfSh0aGlzLGZ1bmN0aW9uKHQsbixlLHIsaSxvLHUpeyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBhKHQsbixlLHIsaSxvKXt2YXIgdT10Ll9fdHJhbnNpdGlvbjtpZih1KXtpZihlIGluIHUpcmV0dXJufWVsc2UgdC5fX3RyYW5zaXRpb249e307Yyh0LGUse25hbWU6bixpbmRleDpyLGdyb3VwOmksb246ZnQsdHdlZW46Y3QsdGltZTpvLnRpbWUsZGVsYXk6by5kZWxheSxkdXJhdGlvbjpvLmR1cmF0aW9uLGVhc2U6by5lYXNlLHRpbWVyOm51bGwsc3RhdGU6aHR9KX1mdW5jdGlvbiBzKHQsbil7dmFyIGU9dC5fX3RyYW5zaXRpb247aWYoIWV8fCEoZT1lW25dKXx8ZS5zdGF0ZT5odCl0aHJvdyBuZXcgRXJyb3IoInRvbyBsYXRlIik7cmV0dXJuIGV9ZnVuY3Rpb24gbCh0LG4pe3ZhciBlPXQuX190cmFuc2l0aW9uO2lmKCFlfHwhKGU9ZVtuXSl8fGUuc3RhdGU+cHQpdGhyb3cgbmV3IEVycm9yKCJ0b28gbGF0ZSIpO3JldHVybiBlfWZ1bmN0aW9uIGYodCxuKXt2YXIgZT10Ll9fdHJhbnNpdGlvbjtpZighZXx8IShlPWVbbl0pKXRocm93IG5ldyBFcnJvcigidG9vIGxhdGUiKTtyZXR1cm4gZX1mdW5jdGlvbiBjKHQsbixlKXtmdW5jdGlvbiBpKHQpe2Uuc3RhdGU9ZHQsZS50aW1lci5yZXN0YXJ0KG8sZS5kZWxheSxlLnRpbWUpLGUuZGVsYXk8PXQmJm8odC1lLmRlbGF5KX1mdW5jdGlvbiBvKGkpe3ZhciBmLGMsaCxkO2lmKGUuc3RhdGUhPT1kdClyZXR1cm4gYSgpO2ZvcihmIGluIGwpaWYoZD1sW2ZdLGQubmFtZT09PWUubmFtZSl7aWYoZC5zdGF0ZT09PV90KXJldHVybiByLnRpbWVvdXQobyk7ZC5zdGF0ZT09PXZ0PyhkLnN0YXRlPW10LGQudGltZXIuc3RvcCgpLGQub24uY2FsbCgiaW50ZXJydXB0Iix0LHQuX19kYXRhX18sZC5pbmRleCxkLmdyb3VwKSxkZWxldGUgbFtmXSk6K2Y8biYmKGQuc3RhdGU9bXQsZC50aW1lci5zdG9wKCksZGVsZXRlIGxbZl0pfWlmKHIudGltZW91dChmdW5jdGlvbigpe2Uuc3RhdGU9PT1fdCYmKGUuc3RhdGU9dnQsZS50aW1lci5yZXN0YXJ0KHUsZS5kZWxheSxlLnRpbWUpLHUoaSkpfSksZS5zdGF0ZT1wdCxlLm9uLmNhbGwoInN0YXJ0Iix0LHQuX19kYXRhX18sZS5pbmRleCxlLmdyb3VwKSxlLnN0YXRlPT09cHQpe2ZvcihlLnN0YXRlPV90LHM9bmV3IEFycmF5KGg9ZS50d2Vlbi5sZW5ndGgpLGY9MCxjPS0xO2Y8aDsrK2YpKGQ9ZS50d2VlbltmXS52YWx1ZS5jYWxsKHQsdC5fX2RhdGFfXyxlLmluZGV4LGUuZ3JvdXApKSYmKHNbKytjXT1kKTtzLmxlbmd0aD1jKzF9fWZ1bmN0aW9uIHUobil7Zm9yKHZhciByPW48ZS5kdXJhdGlvbj9lLmVhc2UuY2FsbChudWxsLG4vZS5kdXJhdGlvbik6KGUudGltZXIucmVzdGFydChhKSxlLnN0YXRlPXl0LDEpLGk9LTEsbz1zLmxlbmd0aDsrK2k8bzspc1tpXS5jYWxsKG51bGwscik7ZS5zdGF0ZT09PXl0JiYoZS5vbi5jYWxsKCJlbmQiLHQsdC5fX2RhdGFfXyxlLmluZGV4LGUuZ3JvdXApLGEoKSl9ZnVuY3Rpb24gYSgpe2Uuc3RhdGU9bXQsZS50aW1lci5zdG9wKCksZGVsZXRlIGxbbl07Zm9yKHZhciByIGluIGwpcmV0dXJuO2RlbGV0ZSB0Ll9fdHJhbnNpdGlvbn12YXIgcyxsPXQuX190cmFuc2l0aW9uO2xbbl09ZSxlLnRpbWVyPXIudGltZXIoaSwwLGUudGltZSl9ZnVuY3Rpb24gaCh0LG4pe3ZhciBlLHIsaSxvPXQuX190cmFuc2l0aW9uLHU9ITA7aWYobyl7bj1udWxsPT1uP251bGw6bisiIjtmb3IoaSBpbiBvKShlPW9baV0pLm5hbWU9PT1uPyhyPWUuc3RhdGU9PT1fdCxlLnN0YXRlPW10LGUudGltZXIuc3RvcCgpLHImJmUub24uY2FsbCgiaW50ZXJydXB0Iix0LHQuX19kYXRhX18sZS5pbmRleCxlLmdyb3VwKSxkZWxldGUgb1tpXSk6dT0hMTt1JiZkZWxldGUgdC5fX3RyYW5zaXRpb259fWZ1bmN0aW9uIGQodCl7cmV0dXJuIHRoaXMuZWFjaChmdW5jdGlvbigpe2godGhpcyx0KX0pfWZ1bmN0aW9uIHAodCxuKXt2YXIgZSxyO3JldHVybiBmdW5jdGlvbigpe3ZhciBpPWwodGhpcyx0KSxvPWkudHdlZW47aWYobyE9PWUpe3I9ZT1vO2Zvcih2YXIgdT0wLGE9ci5sZW5ndGg7dTxhOysrdSlpZihyW3VdLm5hbWU9PT1uKXtyPXIuc2xpY2UoKSxyLnNwbGljZSh1LDEpO2JyZWFrfX1pLnR3ZWVuPXJ9fWZ1bmN0aW9uIF8odCxuLGUpe3ZhciByLGk7aWYoImZ1bmN0aW9uIiE9dHlwZW9mIGUpdGhyb3cgbmV3IEVycm9yO3JldHVybiBmdW5jdGlvbigpe3ZhciBvPWwodGhpcyx0KSx1PW8udHdlZW47aWYodSE9PXIpe2k9KHI9dSkuc2xpY2UoKTtmb3IodmFyIGE9e25hbWU6bix2YWx1ZTplfSxzPTAsZj1pLmxlbmd0aDtzPGY7KytzKWlmKGlbc10ubmFtZT09PW4pe2lbc109YTticmVha31zPT09ZiYmaS5wdXNoKGEpfW8udHdlZW49aX19ZnVuY3Rpb24gdih0LG4pe3ZhciBlPXRoaXMuX2lkO2lmKHQrPSIiLGFyZ3VtZW50cy5sZW5ndGg8Mil7Zm9yKHZhciByLGk9Zih0aGlzLm5vZGUoKSxlKS50d2VlbixvPTAsdT1pLmxlbmd0aDtvPHU7KytvKWlmKChyPWlbb10pLm5hbWU9PT10KXJldHVybiByLnZhbHVlO3JldHVybiBudWxsfXJldHVybiB0aGlzLmVhY2goKG51bGw9PW4/cDpfKShlLHQsbikpfWZ1bmN0aW9uIHkodCxuLGUpe3ZhciByPXQuX2lkO3JldHVybiB0LmVhY2goZnVuY3Rpb24oKXt2YXIgdD1sKHRoaXMscik7KHQudmFsdWV8fCh0LnZhbHVlPXt9KSlbbl09ZS5hcHBseSh0aGlzLGFyZ3VtZW50cyl9KSxmdW5jdGlvbih0KXtyZXR1cm4gZih0LHIpLnZhbHVlW25dfX1mdW5jdGlvbiBtKHQsbil7dmFyIGU7cmV0dXJuKCJudW1iZXIiPT10eXBlb2Ygbj9pLmludGVycG9sYXRlTnVtYmVyOm4gaW5zdGFuY2VvZiBvLmNvbG9yP2kuaW50ZXJwb2xhdGVSZ2I6KGU9by5jb2xvcihuKSk/KG49ZSxpLmludGVycG9sYXRlUmdiKTppLmludGVycG9sYXRlU3RyaW5nKSh0LG4pfWZ1bmN0aW9uIGcodCl7cmV0dXJuIGZ1bmN0aW9uKCl7dGhpcy5yZW1vdmVBdHRyaWJ1dGUodCl9fWZ1bmN0aW9uIHcodCl7cmV0dXJuIGZ1bmN0aW9uKCl7dGhpcy5yZW1vdmVBdHRyaWJ1dGVOUyh0LnNwYWNlLHQubG9jYWwpfX1mdW5jdGlvbiBiKHQsbixlKXt2YXIgcixpO3JldHVybiBmdW5jdGlvbigpe3ZhciBvPXRoaXMuZ2V0QXR0cmlidXRlKHQpO3JldHVybiBvPT09ZT9udWxsOm89PT1yP2k6aT1uKHI9byxlKX19ZnVuY3Rpb24gQSh0LG4sZSl7dmFyIHIsaTtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgbz10aGlzLmdldEF0dHJpYnV0ZU5TKHQuc3BhY2UsdC5sb2NhbCk7cmV0dXJuIG89PT1lP251bGw6bz09PXI/aTppPW4ocj1vLGUpfX1mdW5jdGlvbiB4KHQsbixlKXt2YXIgcixpLG87cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIHUsYT1lKHRoaXMpO3JldHVybiBudWxsPT1hP3ZvaWQgdGhpcy5yZW1vdmVBdHRyaWJ1dGUodCk6KHU9dGhpcy5nZXRBdHRyaWJ1dGUodCksdT09PWE/bnVsbDp1PT09ciYmYT09PWk/bzpvPW4ocj11LGk9YSkpfX1mdW5jdGlvbiBQKHQsbixlKXt2YXIgcixpLG87cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIHUsYT1lKHRoaXMpO3JldHVybiBudWxsPT1hP3ZvaWQgdGhpcy5yZW1vdmVBdHRyaWJ1dGVOUyh0LnNwYWNlLHQubG9jYWwpOih1PXRoaXMuZ2V0QXR0cmlidXRlTlModC5zcGFjZSx0LmxvY2FsKSx1PT09YT9udWxsOnU9PT1yJiZhPT09aT9vOm89bihyPXUsaT1hKSl9fWZ1bmN0aW9uIFModCxlKXt2YXIgcj1uLm5hbWVzcGFjZSh0KSxvPSJ0cmFuc2Zvcm0iPT09cj9pLmludGVycG9sYXRlVHJhbnNmb3JtU3ZnOm07cmV0dXJuIHRoaXMuYXR0clR3ZWVuKHQsImZ1bmN0aW9uIj09dHlwZW9mIGU/KHIubG9jYWw/UDp4KShyLG8seSh0aGlzLCJhdHRyLiIrdCxlKSk6bnVsbD09ZT8oci5sb2NhbD93OmcpKHIpOihyLmxvY2FsP0E6YikocixvLGUpKX1mdW5jdGlvbiBDKHQsbil7ZnVuY3Rpb24gZSgpe3ZhciBlPXRoaXMscj1uLmFwcGx5KGUsYXJndW1lbnRzKTtyZXR1cm4gciYmZnVuY3Rpb24obil7ZS5zZXRBdHRyaWJ1dGVOUyh0LnNwYWNlLHQubG9jYWwscihuKSl9fXJldHVybiBlLl92YWx1ZT1uLGV9ZnVuY3Rpb24gRSh0LG4pe2Z1bmN0aW9uIGUoKXt2YXIgZT10aGlzLHI9bi5hcHBseShlLGFyZ3VtZW50cyk7cmV0dXJuIHImJmZ1bmN0aW9uKG4pe2Uuc2V0QXR0cmlidXRlKHQscihuKSl9fXJldHVybiBlLl92YWx1ZT1uLGV9ZnVuY3Rpb24gTih0LGUpe3ZhciByPSJhdHRyLiIrdDtpZihhcmd1bWVudHMubGVuZ3RoPDIpcmV0dXJuKHI9dGhpcy50d2VlbihyKSkmJnIuX3ZhbHVlO2lmKG51bGw9PWUpcmV0dXJuIHRoaXMudHdlZW4ocixudWxsKTtpZigiZnVuY3Rpb24iIT10eXBlb2YgZSl0aHJvdyBuZXcgRXJyb3I7dmFyIGk9bi5uYW1lc3BhY2UodCk7cmV0dXJuIHRoaXMudHdlZW4ociwoaS5sb2NhbD9DOkUpKGksZSkpfWZ1bmN0aW9uIFQodCxuKXtyZXR1cm4gZnVuY3Rpb24oKXtzKHRoaXMsdCkuZGVsYXk9K24uYXBwbHkodGhpcyxhcmd1bWVudHMpfX1mdW5jdGlvbiBxKHQsbil7cmV0dXJuIG49K24sZnVuY3Rpb24oKXtzKHRoaXMsdCkuZGVsYXk9bn19ZnVuY3Rpb24gVih0KXt2YXIgbj10aGlzLl9pZDtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD90aGlzLmVhY2goKCJmdW5jdGlvbiI9PXR5cGVvZiB0P1Q6cSkobix0KSk6Zih0aGlzLm5vZGUoKSxuKS5kZWxheX1mdW5jdGlvbiBPKHQsbil7cmV0dXJuIGZ1bmN0aW9uKCl7bCh0aGlzLHQpLmR1cmF0aW9uPStuLmFwcGx5KHRoaXMsYXJndW1lbnRzKX19ZnVuY3Rpb24gaih0LG4pe3JldHVybiBuPStuLGZ1bmN0aW9uKCl7bCh0aGlzLHQpLmR1cmF0aW9uPW59fWZ1bmN0aW9uIGsodCl7dmFyIG49dGhpcy5faWQ7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/dGhpcy5lYWNoKCgiZnVuY3Rpb24iPT10eXBlb2YgdD9POmopKG4sdCkpOmYodGhpcy5ub2RlKCksbikuZHVyYXRpb259ZnVuY3Rpb24geih0LG4pe2lmKCJmdW5jdGlvbiIhPXR5cGVvZiBuKXRocm93IG5ldyBFcnJvcjtyZXR1cm4gZnVuY3Rpb24oKXtsKHRoaXMsdCkuZWFzZT1ufX1mdW5jdGlvbiBNKHQpe3ZhciBuPXRoaXMuX2lkO3JldHVybiBhcmd1bWVudHMubGVuZ3RoP3RoaXMuZWFjaCh6KG4sdCkpOmYodGhpcy5ub2RlKCksbikuZWFzZX1mdW5jdGlvbiBSKHQpeyJmdW5jdGlvbiIhPXR5cGVvZiB0JiYodD1uLm1hdGNoZXIodCkpO2Zvcih2YXIgZT10aGlzLl9ncm91cHMscj1lLmxlbmd0aCxpPW5ldyBBcnJheShyKSxvPTA7bzxyOysrbylmb3IodmFyIHUsYT1lW29dLHM9YS5sZW5ndGgsbD1pW29dPVtdLGY9MDtmPHM7KytmKSh1PWFbZl0pJiZ0LmNhbGwodSx1Ll9fZGF0YV9fLGYsYSkmJmwucHVzaCh1KTtyZXR1cm4gbmV3IGl0KGksdGhpcy5fcGFyZW50cyx0aGlzLl9uYW1lLHRoaXMuX2lkKX1mdW5jdGlvbiBJKHQpe2lmKHQuX2lkIT09dGhpcy5faWQpdGhyb3cgbmV3IEVycm9yO2Zvcih2YXIgbj10aGlzLl9ncm91cHMsZT10Ll9ncm91cHMscj1uLmxlbmd0aCxpPWUubGVuZ3RoLG89TWF0aC5taW4ocixpKSx1PW5ldyBBcnJheShyKSxhPTA7YTxvOysrYSlmb3IodmFyIHMsbD1uW2FdLGY9ZVthXSxjPWwubGVuZ3RoLGg9dVthXT1uZXcgQXJyYXkoYyksZD0wO2Q8YzsrK2QpKHM9bFtkXXx8ZltkXSkmJihoW2RdPXMpO2Zvcig7YTxyOysrYSl1W2FdPW5bYV07cmV0dXJuIG5ldyBpdCh1LHRoaXMuX3BhcmVudHMsdGhpcy5fbmFtZSx0aGlzLl9pZCl9ZnVuY3Rpb24gQih0KXtyZXR1cm4odCsiIikudHJpbSgpLnNwbGl0KC9efFxzKy8pLmV2ZXJ5KGZ1bmN0aW9uKHQpe3ZhciBuPXQuaW5kZXhPZigiLiIpO3JldHVybiBuPj0wJiYodD10LnNsaWNlKDAsbikpLCF0fHwic3RhcnQiPT09dH0pfWZ1bmN0aW9uIEQodCxuLGUpe3ZhciByLGksbz1CKG4pP3M6bDtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgdT1vKHRoaXMsdCksYT11Lm9uO2EhPT1yJiYoaT0ocj1hKS5jb3B5KCkpLm9uKG4sZSksdS5vbj1pfX1mdW5jdGlvbiBGKHQsbil7dmFyIGU9dGhpcy5faWQ7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg8Mj9mKHRoaXMubm9kZSgpLGUpLm9uLm9uKHQpOnRoaXMuZWFjaChEKGUsdCxuKSl9ZnVuY3Rpb24gRyh0KXtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgbj10aGlzLnBhcmVudE5vZGU7Zm9yKHZhciBlIGluIHRoaXMuX190cmFuc2l0aW9uKWlmKCtlIT09dClyZXR1cm47biYmbi5yZW1vdmVDaGlsZCh0aGlzKX19ZnVuY3Rpb24gSCgpe3JldHVybiB0aGlzLm9uKCJlbmQucmVtb3ZlIixHKHRoaXMuX2lkKSl9ZnVuY3Rpb24gSih0KXt2YXIgZT10aGlzLl9uYW1lLHI9dGhpcy5faWQ7ImZ1bmN0aW9uIiE9dHlwZW9mIHQmJih0PW4uc2VsZWN0b3IodCkpO2Zvcih2YXIgaT10aGlzLl9ncm91cHMsbz1pLmxlbmd0aCx1PW5ldyBBcnJheShvKSxzPTA7czxvOysrcylmb3IodmFyIGwsYyxoPWlbc10sZD1oLmxlbmd0aCxwPXVbc109bmV3IEFycmF5KGQpLF89MDtfPGQ7KytfKShsPWhbX10pJiYoYz10LmNhbGwobCxsLl9fZGF0YV9fLF8saCkpJiYoIl9fZGF0YV9fImluIGwmJihjLl9fZGF0YV9fPWwuX19kYXRhX18pLHBbX109YyxhKHBbX10sZSxyLF8scCxmKGwscikpKTtyZXR1cm4gbmV3IGl0KHUsdGhpcy5fcGFyZW50cyxlLHIpfWZ1bmN0aW9uIEsodCl7dmFyIGU9dGhpcy5fbmFtZSxyPXRoaXMuX2lkOyJmdW5jdGlvbiIhPXR5cGVvZiB0JiYodD1uLnNlbGVjdG9yQWxsKHQpKTtmb3IodmFyIGk9dGhpcy5fZ3JvdXBzLG89aS5sZW5ndGgsdT1bXSxzPVtdLGw9MDtsPG87KytsKWZvcih2YXIgYyxoPWlbbF0sZD1oLmxlbmd0aCxwPTA7cDxkOysrcClpZihjPWhbcF0pe2Zvcih2YXIgXyx2PXQuY2FsbChjLGMuX19kYXRhX18scCxoKSx5PWYoYyxyKSxtPTAsZz12Lmxlbmd0aDttPGc7KyttKShfPXZbbV0pJiZhKF8sZSxyLG0sdix5KTt1LnB1c2godikscy5wdXNoKGMpfXJldHVybiBuZXcgaXQodSxzLGUscil9ZnVuY3Rpb24gTCgpe3JldHVybiBuZXcgZ3QodGhpcy5fZ3JvdXBzLHRoaXMuX3BhcmVudHMpfWZ1bmN0aW9uIFEodCxlKXt2YXIgcixpLG87cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIHU9bi53aW5kb3codGhpcykuZ2V0Q29tcHV0ZWRTdHlsZSh0aGlzLG51bGwpLGE9dS5nZXRQcm9wZXJ0eVZhbHVlKHQpLHM9KHRoaXMuc3R5bGUucmVtb3ZlUHJvcGVydHkodCksdS5nZXRQcm9wZXJ0eVZhbHVlKHQpKTtyZXR1cm4gYT09PXM/bnVsbDphPT09ciYmcz09PWk/bzpvPWUocj1hLGk9cyl9fWZ1bmN0aW9uIFUodCl7cmV0dXJuIGZ1bmN0aW9uKCl7dGhpcy5zdHlsZS5yZW1vdmVQcm9wZXJ0eSh0KX19ZnVuY3Rpb24gVyh0LGUscil7dmFyIGksbztyZXR1cm4gZnVuY3Rpb24oKXt2YXIgdT1uLndpbmRvdyh0aGlzKS5nZXRDb21wdXRlZFN0eWxlKHRoaXMsbnVsbCkuZ2V0UHJvcGVydHlWYWx1ZSh0KTtyZXR1cm4gdT09PXI/bnVsbDp1PT09aT9vOm89ZShpPXUscil9fWZ1bmN0aW9uIFgodCxlLHIpe3ZhciBpLG8sdTtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgYT1uLndpbmRvdyh0aGlzKS5nZXRDb21wdXRlZFN0eWxlKHRoaXMsbnVsbCkscz1hLmdldFByb3BlcnR5VmFsdWUodCksbD1yKHRoaXMpO3JldHVybiBudWxsPT1sJiYodGhpcy5zdHlsZS5yZW1vdmVQcm9wZXJ0eSh0KSxsPWEuZ2V0UHJvcGVydHlWYWx1ZSh0KSkscz09PWw/bnVsbDpzPT09aSYmbD09PW8/dTp1PWUoaT1zLG89bCl9fWZ1bmN0aW9uIFkodCxuLGUpe3ZhciByPSJ0cmFuc2Zvcm0iPT0odCs9IiIpP2kuaW50ZXJwb2xhdGVUcmFuc2Zvcm1Dc3M6bTtyZXR1cm4gbnVsbD09bj90aGlzLnN0eWxlVHdlZW4odCxRKHQscikpLm9uKCJlbmQuc3R5bGUuIit0LFUodCkpOnRoaXMuc3R5bGVUd2Vlbih0LCJmdW5jdGlvbiI9PXR5cGVvZiBuP1godCxyLHkodGhpcywic3R5bGUuIit0LG4pKTpXKHQscixuKSxlKX1mdW5jdGlvbiBaKHQsbixlKXtmdW5jdGlvbiByKCl7dmFyIHI9dGhpcyxpPW4uYXBwbHkocixhcmd1bWVudHMpO3JldHVybiBpJiZmdW5jdGlvbihuKXtyLnN0eWxlLnNldFByb3BlcnR5KHQsaShuKSxlKX19cmV0dXJuIHIuX3ZhbHVlPW4scn1mdW5jdGlvbiAkKHQsbixlKXt2YXIgcj0ic3R5bGUuIisodCs9IiIpO2lmKGFyZ3VtZW50cy5sZW5ndGg8MilyZXR1cm4ocj10aGlzLnR3ZWVuKHIpKSYmci5fdmFsdWU7aWYobnVsbD09bilyZXR1cm4gdGhpcy50d2VlbihyLG51bGwpO2lmKCJmdW5jdGlvbiIhPXR5cGVvZiBuKXRocm93IG5ldyBFcnJvcjtyZXR1cm4gdGhpcy50d2VlbihyLFoodCxuLG51bGw9PWU/IiI6ZSkpfWZ1bmN0aW9uIHR0KHQpe3JldHVybiBmdW5jdGlvbigpe3RoaXMudGV4dENvbnRlbnQ9dH19ZnVuY3Rpb24gbnQodCl7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIG49dCh0aGlzKTt0aGlzLnRleHRDb250ZW50PW51bGw9PW4/IiI6bn19ZnVuY3Rpb24gZXQodCl7cmV0dXJuIHRoaXMudHdlZW4oInRleHQiLCJmdW5jdGlvbiI9PXR5cGVvZiB0P250KHkodGhpcywidGV4dCIsdCkpOnR0KG51bGw9PXQ/IiI6dCsiIikpfWZ1bmN0aW9uIHJ0KCl7Zm9yKHZhciB0PXRoaXMuX25hbWUsbj10aGlzLl9pZCxlPXV0KCkscj10aGlzLl9ncm91cHMsaT1yLmxlbmd0aCxvPTA7bzxpOysrbylmb3IodmFyIHUscz1yW29dLGw9cy5sZW5ndGgsYz0wO2M8bDsrK2MpaWYodT1zW2NdKXt2YXIgaD1mKHUsbik7YSh1LHQsZSxjLHMse3RpbWU6aC50aW1lK2guZGVsYXkraC5kdXJhdGlvbixkZWxheTowLGR1cmF0aW9uOmguZHVyYXRpb24sZWFzZTpoLmVhc2V9KX1yZXR1cm4gbmV3IGl0KHIsdGhpcy5fcGFyZW50cyx0LGUpfWZ1bmN0aW9uIGl0KHQsbixlLHIpe3RoaXMuX2dyb3Vwcz10LHRoaXMuX3BhcmVudHM9bix0aGlzLl9uYW1lPWUsdGhpcy5faWQ9cn1mdW5jdGlvbiBvdCh0KXtyZXR1cm4gbi5zZWxlY3Rpb24oKS50cmFuc2l0aW9uKHQpfWZ1bmN0aW9uIHV0KCl7cmV0dXJuKyt3dH1mdW5jdGlvbiBhdCh0LG4pe2Zvcih2YXIgZTshKGU9dC5fX3RyYW5zaXRpb24pfHwhKGU9ZVtuXSk7KWlmKCEodD10LnBhcmVudE5vZGUpKXJldHVybiBBdC50aW1lPXIubm93KCksQXQ7cmV0dXJuIGV9ZnVuY3Rpb24gc3QodCl7dmFyIG4sZTt0IGluc3RhbmNlb2YgaXQ/KG49dC5faWQsdD10Ll9uYW1lKToobj11dCgpLChlPUF0KS50aW1lPXIubm93KCksdD1udWxsPT10P251bGw6dCsiIik7Zm9yKHZhciBpPXRoaXMuX2dyb3VwcyxvPWkubGVuZ3RoLHU9MDt1PG87Kyt1KWZvcih2YXIgcyxsPWlbdV0sZj1sLmxlbmd0aCxjPTA7YzxmOysrYykocz1sW2NdKSYmYShzLHQsbixjLGwsZXx8YXQocyxuKSk7cmV0dXJuIG5ldyBpdChpLHRoaXMuX3BhcmVudHMsdCxuKX1mdW5jdGlvbiBsdCh0LG4pe3ZhciBlLHIsaT10Ll9fdHJhbnNpdGlvbjtpZihpKXtuPW51bGw9PW4/bnVsbDpuKyIiO2ZvcihyIGluIGkpaWYoKGU9aVtyXSkuc3RhdGU+ZHQmJmUubmFtZT09PW4pcmV0dXJuIG5ldyBpdChbW3RdXSx4dCxuLCtyKX1yZXR1cm4gbnVsbH12YXIgZnQ9ZS5kaXNwYXRjaCgic3RhcnQiLCJlbmQiLCJpbnRlcnJ1cHQiKSxjdD1bXSxodD0wLGR0PTEscHQ9MixfdD0zLHZ0PTQseXQ9NSxtdD02LGd0PW4uc2VsZWN0aW9uLnByb3RvdHlwZS5jb25zdHJ1Y3Rvcix3dD0wLGJ0PW4uc2VsZWN0aW9uLnByb3RvdHlwZTtpdC5wcm90b3R5cGU9b3QucHJvdG90eXBlPXtjb25zdHJ1Y3RvcjppdCxzZWxlY3Q6SixzZWxlY3RBbGw6SyxmaWx0ZXI6UixtZXJnZTpJLHNlbGVjdGlvbjpMLHRyYW5zaXRpb246cnQsY2FsbDpidC5jYWxsLG5vZGVzOmJ0Lm5vZGVzLG5vZGU6YnQubm9kZSxzaXplOmJ0LnNpemUsZW1wdHk6YnQuZW1wdHksZWFjaDpidC5lYWNoLG9uOkYsYXR0cjpTLGF0dHJUd2VlbjpOLHN0eWxlOlksc3R5bGVUd2VlbjokLHRleHQ6ZXQscmVtb3ZlOkgsdHdlZW46dixkZWxheTpWLGR1cmF0aW9uOmssZWFzZTpNfTt2YXIgQXQ9e3RpbWU6bnVsbCxkZWxheTowLGR1cmF0aW9uOjI1MCxlYXNlOnUuZWFzZUN1YmljSW5PdXR9O24uc2VsZWN0aW9uLnByb3RvdHlwZS5pbnRlcnJ1cHQ9ZCxuLnNlbGVjdGlvbi5wcm90b3R5cGUudHJhbnNpdGlvbj1zdDt2YXIgeHQ9W251bGxdO3QudHJhbnNpdGlvbj1vdCx0LmFjdGl2ZT1sdCx0LmludGVycnVwdD1oLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KX0pOw=="></script>
<script src="data:application/x-javascript;base64,Ly8gaHR0cHM6Ly9kM2pzLm9yZy9kMy1kcmFnLyBWZXJzaW9uIDEuMC4xLiBDb3B5cmlnaHQgMjAxNiBNaWtlIEJvc3RvY2suCiFmdW5jdGlvbihlLHQpeyJvYmplY3QiPT10eXBlb2YgZXhwb3J0cyYmInVuZGVmaW5lZCIhPXR5cGVvZiBtb2R1bGU/dChleHBvcnRzLHJlcXVpcmUoImQzLWRpc3BhdGNoIikscmVxdWlyZSgiZDMtc2VsZWN0aW9uIikpOiJmdW5jdGlvbiI9PXR5cGVvZiBkZWZpbmUmJmRlZmluZS5hbWQ/ZGVmaW5lKFsiZXhwb3J0cyIsImQzLWRpc3BhdGNoIiwiZDMtc2VsZWN0aW9uIl0sdCk6dChlLmQzPWUuZDN8fHt9LGUuZDMsZS5kMyl9KHRoaXMsZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBvKCl7bi5ldmVudC5zdG9wSW1tZWRpYXRlUHJvcGFnYXRpb24oKX1mdW5jdGlvbiBpKCl7bi5ldmVudC5wcmV2ZW50RGVmYXVsdCgpLG4uZXZlbnQuc3RvcEltbWVkaWF0ZVByb3BhZ2F0aW9uKCl9ZnVuY3Rpb24gcihlKXt2YXIgdD1lLmRvY3VtZW50LmRvY3VtZW50RWxlbWVudCxvPW4uc2VsZWN0KGUpLm9uKCJkcmFnc3RhcnQuZHJhZyIsaSwhMCk7Im9uc2VsZWN0c3RhcnQiaW4gdD9vLm9uKCJzZWxlY3RzdGFydC5kcmFnIixpLCEwKToodC5fX25vc2VsZWN0PXQuc3R5bGUuTW96VXNlclNlbGVjdCx0LnN0eWxlLk1velVzZXJTZWxlY3Q9Im5vbmUiKX1mdW5jdGlvbiB1KGUsdCl7dmFyIG89ZS5kb2N1bWVudC5kb2N1bWVudEVsZW1lbnQscj1uLnNlbGVjdChlKS5vbigiZHJhZ3N0YXJ0LmRyYWciLG51bGwpO3QmJihyLm9uKCJjbGljay5kcmFnIixpLCEwKSxzZXRUaW1lb3V0KGZ1bmN0aW9uKCl7ci5vbigiY2xpY2suZHJhZyIsbnVsbCl9LDApKSwib25zZWxlY3RzdGFydCJpbiBvP3Iub24oInNlbGVjdHN0YXJ0LmRyYWciLG51bGwpOihvLnN0eWxlLk1velVzZXJTZWxlY3Q9by5fX25vc2VsZWN0LGRlbGV0ZSBvLl9fbm9zZWxlY3QpfWZ1bmN0aW9uIGMoZSl7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIGV9fWZ1bmN0aW9uIHMoZSx0LG4sbyxpLHIsdSxjLHMsYSl7dGhpcy50YXJnZXQ9ZSx0aGlzLnR5cGU9dCx0aGlzLnN1YmplY3Q9bix0aGlzLmlkZW50aWZpZXI9byx0aGlzLmFjdGl2ZT1pLHRoaXMueD1yLHRoaXMueT11LHRoaXMuZHg9Yyx0aGlzLmR5PXMsdGhpcy5fPWF9ZnVuY3Rpb24gYSgpe3JldHVybiFuLmV2ZW50LmJ1dHRvbn1mdW5jdGlvbiBkKCl7cmV0dXJuIHRoaXMucGFyZW50Tm9kZX1mdW5jdGlvbiBsKGUpe3JldHVybiBudWxsPT1lP3t4Om4uZXZlbnQueCx5Om4uZXZlbnQueX06ZX1mdW5jdGlvbiBmKCl7ZnVuY3Rpb24gZShlKXtlLm9uKCJtb3VzZWRvd24uZHJhZyIsZikub24oInRvdWNoc3RhcnQuZHJhZyIsZykub24oInRvdWNobW92ZS5kcmFnIix2KS5vbigidG91Y2hlbmQuZHJhZyB0b3VjaGNhbmNlbC5kcmFnIixtKS5zdHlsZSgiLXdlYmtpdC10YXAtaGlnaGxpZ2h0LWNvbG9yIiwicmdiYSgwLDAsMCwwKSIpfWZ1bmN0aW9uIGYoKXtpZighXyYmdy5hcHBseSh0aGlzLGFyZ3VtZW50cykpe3ZhciBlPXkoIm1vdXNlIix4LmFwcGx5KHRoaXMsYXJndW1lbnRzKSxuLm1vdXNlLHRoaXMsYXJndW1lbnRzKTtlJiYobi5zZWxlY3Qobi5ldmVudC52aWV3KS5vbigibW91c2Vtb3ZlLmRyYWciLGgsITApLm9uKCJtb3VzZXVwLmRyYWciLHAsITApLHIobi5ldmVudC52aWV3KSxvKCksYj0hMSxlKCJzdGFydCIpKX19ZnVuY3Rpb24gaCgpe2koKSxiPSEwLGoubW91c2UoImRyYWciKX1mdW5jdGlvbiBwKCl7bi5zZWxlY3Qobi5ldmVudC52aWV3KS5vbigibW91c2Vtb3ZlLmRyYWcgbW91c2V1cC5kcmFnIixudWxsKSx1KG4uZXZlbnQudmlldyxiKSxpKCksai5tb3VzZSgiZW5kIil9ZnVuY3Rpb24gZygpe2lmKHcuYXBwbHkodGhpcyxhcmd1bWVudHMpKXt2YXIgZSx0LGk9bi5ldmVudC5jaGFuZ2VkVG91Y2hlcyxyPXguYXBwbHkodGhpcyxhcmd1bWVudHMpLHU9aS5sZW5ndGg7Zm9yKGU9MDtlPHU7KytlKSh0PXkoaVtlXS5pZGVudGlmaWVyLHIsbi50b3VjaCx0aGlzLGFyZ3VtZW50cykpJiYobygpLHQoInN0YXJ0IikpfX1mdW5jdGlvbiB2KCl7dmFyIGUsdCxvPW4uZXZlbnQuY2hhbmdlZFRvdWNoZXMscj1vLmxlbmd0aDtmb3IoZT0wO2U8cjsrK2UpKHQ9altvW2VdLmlkZW50aWZpZXJdKSYmKGkoKSx0KCJkcmFnIikpfWZ1bmN0aW9uIG0oKXt2YXIgZSx0LGk9bi5ldmVudC5jaGFuZ2VkVG91Y2hlcyxyPWkubGVuZ3RoO2ZvcihfJiZjbGVhclRpbWVvdXQoXyksXz1zZXRUaW1lb3V0KGZ1bmN0aW9uKCl7Xz1udWxsfSw1MDApLGU9MDtlPHI7KytlKSh0PWpbaVtlXS5pZGVudGlmaWVyXSkmJihvKCksdCgiZW5kIikpfWZ1bmN0aW9uIHkodCxvLGkscix1KXt2YXIgYyxhLGQsbD1pKG8sdCksZj1FLmNvcHkoKTtpZihuLmN1c3RvbUV2ZW50KG5ldyBzKGUsImJlZm9yZXN0YXJ0IixjLHQsayxsWzBdLGxbMV0sMCwwLGYpLGZ1bmN0aW9uKCl7cmV0dXJuIG51bGwhPShuLmV2ZW50LnN1YmplY3Q9Yz1ULmFwcGx5KHIsdSkpJiYoYT1jLngtbFswXXx8MCxkPWMueS1sWzFdfHwwLCEwKX0pKXJldHVybiBmdW5jdGlvbiBoKHApe3ZhciBnLHY9bDtzd2l0Y2gocCl7Y2FzZSJzdGFydCI6alt0XT1oLGc9aysrO2JyZWFrO2Nhc2UiZW5kIjpkZWxldGUgalt0XSwtLWs7Y2FzZSJkcmFnIjpsPWkobyx0KSxnPWt9bi5jdXN0b21FdmVudChuZXcgcyhlLHAsYyx0LGcsbFswXSthLGxbMV0rZCxsWzBdLXZbMF0sbFsxXS12WzFdLGYpLGYuYXBwbHksZixbcCxyLHVdKX19dmFyIGIsXyx3PWEseD1kLFQ9bCxqPXt9LEU9dC5kaXNwYXRjaCgic3RhcnQiLCJkcmFnIiwiZW5kIiksaz0wO3JldHVybiBlLmZpbHRlcj1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8odz0iZnVuY3Rpb24iPT10eXBlb2YgdD90OmMoISF0KSxlKTp3fSxlLmNvbnRhaW5lcj1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oeD0iZnVuY3Rpb24iPT10eXBlb2YgdD90OmModCksZSk6eH0sZS5zdWJqZWN0PWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhUPSJmdW5jdGlvbiI9PXR5cGVvZiB0P3Q6Yyh0KSxlKTpUfSxlLm9uPWZ1bmN0aW9uKCl7dmFyIHQ9RS5vbi5hcHBseShFLGFyZ3VtZW50cyk7cmV0dXJuIHQ9PT1FP2U6dH0sZX1zLnByb3RvdHlwZS5vbj1mdW5jdGlvbigpe3ZhciBlPXRoaXMuXy5vbi5hcHBseSh0aGlzLl8sYXJndW1lbnRzKTtyZXR1cm4gZT09PXRoaXMuXz90aGlzOmV9LGUuZHJhZz1mLGUuZHJhZ0Rpc2FibGU9cixlLmRyYWdFbmFibGU9dSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZSwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSl9KTs="></script>
<script src="data:application/x-javascript;base64,Ly8gaHR0cHM6Ly9kM2pzLm9yZy9kMy1wYXRoLyBWZXJzaW9uIDEuMC4xLiBDb3B5cmlnaHQgMjAxNiBNaWtlIEJvc3RvY2suCiFmdW5jdGlvbih0LHMpeyJvYmplY3QiPT10eXBlb2YgZXhwb3J0cyYmInVuZGVmaW5lZCIhPXR5cGVvZiBtb2R1bGU/cyhleHBvcnRzKToiZnVuY3Rpb24iPT10eXBlb2YgZGVmaW5lJiZkZWZpbmUuYW1kP2RlZmluZShbImV4cG9ydHMiXSxzKTpzKHQuZDM9dC5kM3x8e30pfSh0aGlzLGZ1bmN0aW9uKHQpeyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBzKCl7dGhpcy5feDA9dGhpcy5feTA9dGhpcy5feDE9dGhpcy5feTE9bnVsbCx0aGlzLl89W119ZnVuY3Rpb24gaSgpe3JldHVybiBuZXcgc312YXIgaD1NYXRoLlBJLF89MipoLG49MWUtNixlPV8tbjtzLnByb3RvdHlwZT1pLnByb3RvdHlwZT17Y29uc3RydWN0b3I6cyxtb3ZlVG86ZnVuY3Rpb24odCxzKXt0aGlzLl8ucHVzaCgiTSIsdGhpcy5feDA9dGhpcy5feDE9K3QsIiwiLHRoaXMuX3kwPXRoaXMuX3kxPStzKX0sY2xvc2VQYXRoOmZ1bmN0aW9uKCl7bnVsbCE9PXRoaXMuX3gxJiYodGhpcy5feDE9dGhpcy5feDAsdGhpcy5feTE9dGhpcy5feTAsdGhpcy5fLnB1c2goIloiKSl9LGxpbmVUbzpmdW5jdGlvbih0LHMpe3RoaXMuXy5wdXNoKCJMIix0aGlzLl94MT0rdCwiLCIsdGhpcy5feTE9K3MpfSxxdWFkcmF0aWNDdXJ2ZVRvOmZ1bmN0aW9uKHQscyxpLGgpe3RoaXMuXy5wdXNoKCJRIiwrdCwiLCIsK3MsIiwiLHRoaXMuX3gxPStpLCIsIix0aGlzLl95MT0raCl9LGJlemllckN1cnZlVG86ZnVuY3Rpb24odCxzLGksaCxfLG4pe3RoaXMuXy5wdXNoKCJDIiwrdCwiLCIsK3MsIiwiLCtpLCIsIiwraCwiLCIsdGhpcy5feDE9K18sIiwiLHRoaXMuX3kxPStuKX0sYXJjVG86ZnVuY3Rpb24odCxzLGksXyxlKXt0PSt0LHM9K3MsaT0raSxfPStfLGU9K2U7dmFyIG89dGhpcy5feDEsdT10aGlzLl95MSxyPWktdCxhPV8tcyxjPW8tdCxmPXUtcyxwPWMqYytmKmY7aWYoZTwwKXRocm93IG5ldyBFcnJvcigibmVnYXRpdmUgcmFkaXVzOiAiK2UpO2lmKG51bGw9PT10aGlzLl94MSl0aGlzLl8ucHVzaCgiTSIsdGhpcy5feDE9dCwiLCIsdGhpcy5feTE9cyk7ZWxzZSBpZihwPm4paWYoTWF0aC5hYnMoZipyLWEqYyk+biYmZSl7dmFyIHg9aS1vLHk9Xy11LE09cipyK2EqYSxsPXgqeCt5KnksZD1NYXRoLnNxcnQoTSksdj1NYXRoLnNxcnQocCksYj1lKk1hdGgudGFuKChoLU1hdGguYWNvcygoTStwLWwpLygyKmQqdikpKS8yKSx3PWIvdixUPWIvZDtNYXRoLmFicyh3LTEpPm4mJnRoaXMuXy5wdXNoKCJMIix0K3cqYywiLCIscyt3KmYpLHRoaXMuXy5wdXNoKCJBIixlLCIsIixlLCIsMCwwLCIsKyhmKng+Yyp5KSwiLCIsdGhpcy5feDE9dCtUKnIsIiwiLHRoaXMuX3kxPXMrVCphKX1lbHNlIHRoaXMuXy5wdXNoKCJMIix0aGlzLl94MT10LCIsIix0aGlzLl95MT1zKTtlbHNlO30sYXJjOmZ1bmN0aW9uKHQscyxpLG8sdSxyKXt0PSt0LHM9K3MsaT0raTt2YXIgYT1pKk1hdGguY29zKG8pLGM9aSpNYXRoLnNpbihvKSxmPXQrYSxwPXMrYyx4PTFecix5PXI/by11OnUtbztpZihpPDApdGhyb3cgbmV3IEVycm9yKCJuZWdhdGl2ZSByYWRpdXM6ICIraSk7bnVsbD09PXRoaXMuX3gxP3RoaXMuXy5wdXNoKCJNIixmLCIsIixwKTooTWF0aC5hYnModGhpcy5feDEtZik+bnx8TWF0aC5hYnModGhpcy5feTEtcCk+bikmJnRoaXMuXy5wdXNoKCJMIixmLCIsIixwKSxpJiYoeT5lP3RoaXMuXy5wdXNoKCJBIixpLCIsIixpLCIsMCwxLCIseCwiLCIsdC1hLCIsIixzLWMsIkEiLGksIiwiLGksIiwwLDEsIix4LCIsIix0aGlzLl94MT1mLCIsIix0aGlzLl95MT1wKTooeTwwJiYoeT15JV8rXyksdGhpcy5fLnB1c2goIkEiLGksIiwiLGksIiwwLCIsKyh5Pj1oKSwiLCIseCwiLCIsdGhpcy5feDE9dCtpKk1hdGguY29zKHUpLCIsIix0aGlzLl95MT1zK2kqTWF0aC5zaW4odSkpKSl9LHJlY3Q6ZnVuY3Rpb24odCxzLGksaCl7dGhpcy5fLnB1c2goIk0iLHRoaXMuX3gwPXRoaXMuX3gxPSt0LCIsIix0aGlzLl95MD10aGlzLl95MT0rcywiaCIsK2ksInYiLCtoLCJoIiwtaSwiWiIpfSx0b1N0cmluZzpmdW5jdGlvbigpe3JldHVybiB0aGlzLl8uam9pbigiIil9fSx0LnBhdGg9aSxPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSl9KTs="></script>
<script src="data:application/x-javascript;base64,Ly8gaHR0cHM6Ly9kM2pzLm9yZy9kMy1zaGFwZS8gVmVyc2lvbiAxLjAuMy4gQ29weXJpZ2h0IDIwMTYgTWlrZSBCb3N0b2NrLgohZnVuY3Rpb24odCxpKXsib2JqZWN0Ij09dHlwZW9mIGV4cG9ydHMmJiJ1bmRlZmluZWQiIT10eXBlb2YgbW9kdWxlP2koZXhwb3J0cyxyZXF1aXJlKCJkMy1wYXRoIikpOiJmdW5jdGlvbiI9PXR5cGVvZiBkZWZpbmUmJmRlZmluZS5hbWQ/ZGVmaW5lKFsiZXhwb3J0cyIsImQzLXBhdGgiXSxpKTppKHQuZDM9dC5kM3x8e30sdC5kMyl9KHRoaXMsZnVuY3Rpb24odCxpKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gbih0KXtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gdH19ZnVuY3Rpb24gZSh0KXtyZXR1cm4gdC5pbm5lclJhZGl1c31mdW5jdGlvbiBzKHQpe3JldHVybiB0Lm91dGVyUmFkaXVzfWZ1bmN0aW9uIGgodCl7cmV0dXJuIHQuc3RhcnRBbmdsZX1mdW5jdGlvbiBvKHQpe3JldHVybiB0LmVuZEFuZ2xlfWZ1bmN0aW9uIF8odCl7cmV0dXJuIHQmJnQucGFkQW5nbGV9ZnVuY3Rpb24gYSh0KXtyZXR1cm4gdD49MT9idDp0PD0tMT8tYnQ6TWF0aC5hc2luKHQpfWZ1bmN0aW9uIHIodCxpLG4sZSxzLGgsbyxfKXt2YXIgYT1uLXQscj1lLWksYz1vLXMsbD1fLWgsdT0oYyooaS1oKS1sKih0LXMpKS8obCphLWMqcik7cmV0dXJuW3QrdSphLGkrdSpyXX1mdW5jdGlvbiBjKHQsaSxuLGUscyxoLG8pe3ZhciBfPXQtbixhPWktZSxyPShvP2g6LWgpL01hdGguc3FydChfKl8rYSphKSxjPXIqYSxsPS1yKl8sdT10K2MsZj1pK2wseD1uK2MseT1lK2wscD0odSt4KS8yLHY9KGYreSkvMixkPXgtdSxUPXktZixNPWQqZCtUKlQsZz1zLWgsYj11KnkteCpmLHc9KFQ8MD8tMToxKSpNYXRoLnNxcnQoTWF0aC5tYXgoMCxnKmcqTS1iKmIpKSxtPShiKlQtZCp3KS9NLGs9KC1iKmQtVCp3KS9NLE49KGIqVCtkKncpL00sUz0oLWIqZCtUKncpL00sRT1tLXAsQT1rLXYsUD1OLXAscT1TLXY7cmV0dXJuIEUqRStBKkE+UCpQK3EqcSYmKG09TixrPVMpLHtjeDptLGN5OmsseDAxOi1jLHkwMTotbCx4MTE6bSoocy9nLTEpLHkxMTprKihzL2ctMSl9fWZ1bmN0aW9uIGwoKXtmdW5jdGlvbiB0KCl7dmFyIHQsbixlPStsLmFwcGx5KHRoaXMsYXJndW1lbnRzKSxzPSt1LmFwcGx5KHRoaXMsYXJndW1lbnRzKSxoPXkuYXBwbHkodGhpcyxhcmd1bWVudHMpLWJ0LG89cC5hcHBseSh0aGlzLGFyZ3VtZW50cyktYnQsXz1NYXRoLmFicyhvLWgpLFQ9bz5oO2lmKGR8fChkPXQ9aS5wYXRoKCkpLHM8ZSYmKG49cyxzPWUsZT1uKSxzPk10KWlmKF8+d3QtTXQpZC5tb3ZlVG8ocypNYXRoLmNvcyhoKSxzKk1hdGguc2luKGgpKSxkLmFyYygwLDAscyxoLG8sIVQpLGU+TXQmJihkLm1vdmVUbyhlKk1hdGguY29zKG8pLGUqTWF0aC5zaW4obykpLGQuYXJjKDAsMCxlLG8saCxUKSk7ZWxzZXt2YXIgTSxnLGI9aCx3PW8sbT1oLGs9byxOPV8sUz1fLEU9di5hcHBseSh0aGlzLGFyZ3VtZW50cykvMixBPUU+TXQmJih4Pyt4LmFwcGx5KHRoaXMsYXJndW1lbnRzKTpNYXRoLnNxcnQoZSplK3MqcykpLFA9TWF0aC5taW4oTWF0aC5hYnMocy1lKS8yLCtmLmFwcGx5KHRoaXMsYXJndW1lbnRzKSkscT1QLEM9UDtpZihBPk10KXt2YXIgTz1hKEEvZSpNYXRoLnNpbihFKSksUj1hKEEvcypNYXRoLnNpbihFKSk7KE4tPTIqTyk+TXQ/KE8qPVQ/MTotMSxtKz1PLGstPU8pOihOPTAsbT1rPShoK28pLzIpLChTLT0yKlIpPk10PyhSKj1UPzE6LTEsYis9Uix3LT1SKTooUz0wLGI9dz0oaCtvKS8yKX12YXIgej1zKk1hdGguY29zKGIpLFg9cypNYXRoLnNpbihiKSxZPWUqTWF0aC5jb3MoayksQj1lKk1hdGguc2luKGspO2lmKFA+TXQpe3ZhciBqPXMqTWF0aC5jb3ModyksST1zKk1hdGguc2luKHcpLEw9ZSpNYXRoLmNvcyhtKSxEPWUqTWF0aC5zaW4obSk7aWYoXzxndCl7dmFyIFc9Tj5NdD9yKHosWCxMLEQsaixJLFksQik6W1ksQl0sVj16LVdbMF0sRj1YLVdbMV0sRz1qLVdbMF0sSD1JLVdbMV0sSj0xL01hdGguc2luKE1hdGguYWNvcygoVipHK0YqSCkvKE1hdGguc3FydChWKlYrRipGKSpNYXRoLnNxcnQoRypHK0gqSCkpKS8yKSxLPU1hdGguc3FydChXWzBdKldbMF0rV1sxXSpXWzFdKTtxPU1hdGgubWluKFAsKGUtSykvKEotMSkpLEM9TWF0aC5taW4oUCwocy1LKS8oSisxKSl9fVM+TXQ/Qz5NdD8oTT1jKEwsRCx6LFgscyxDLFQpLGc9YyhqLEksWSxCLHMsQyxUKSxkLm1vdmVUbyhNLmN4K00ueDAxLE0uY3krTS55MDEpLEM8UD9kLmFyYyhNLmN4LE0uY3ksQyxNYXRoLmF0YW4yKE0ueTAxLE0ueDAxKSxNYXRoLmF0YW4yKGcueTAxLGcueDAxKSwhVCk6KGQuYXJjKE0uY3gsTS5jeSxDLE1hdGguYXRhbjIoTS55MDEsTS54MDEpLE1hdGguYXRhbjIoTS55MTEsTS54MTEpLCFUKSxkLmFyYygwLDAscyxNYXRoLmF0YW4yKE0uY3krTS55MTEsTS5jeCtNLngxMSksTWF0aC5hdGFuMihnLmN5K2cueTExLGcuY3grZy54MTEpLCFUKSxkLmFyYyhnLmN4LGcuY3ksQyxNYXRoLmF0YW4yKGcueTExLGcueDExKSxNYXRoLmF0YW4yKGcueTAxLGcueDAxKSwhVCkpKTooZC5tb3ZlVG8oeixYKSxkLmFyYygwLDAscyxiLHcsIVQpKTpkLm1vdmVUbyh6LFgpLGU+TXQmJk4+TXQ/cT5NdD8oTT1jKFksQixqLEksZSwtcSxUKSxnPWMoeixYLEwsRCxlLC1xLFQpLGQubGluZVRvKE0uY3grTS54MDEsTS5jeStNLnkwMSkscTxQP2QuYXJjKE0uY3gsTS5jeSxxLE1hdGguYXRhbjIoTS55MDEsTS54MDEpLE1hdGguYXRhbjIoZy55MDEsZy54MDEpLCFUKTooZC5hcmMoTS5jeCxNLmN5LHEsTWF0aC5hdGFuMihNLnkwMSxNLngwMSksTWF0aC5hdGFuMihNLnkxMSxNLngxMSksIVQpLGQuYXJjKDAsMCxlLE1hdGguYXRhbjIoTS5jeStNLnkxMSxNLmN4K00ueDExKSxNYXRoLmF0YW4yKGcuY3krZy55MTEsZy5jeCtnLngxMSksVCksZC5hcmMoZy5jeCxnLmN5LHEsTWF0aC5hdGFuMihnLnkxMSxnLngxMSksTWF0aC5hdGFuMihnLnkwMSxnLngwMSksIVQpKSk6ZC5hcmMoMCwwLGUsayxtLFQpOmQubGluZVRvKFksQil9ZWxzZSBkLm1vdmVUbygwLDApO2lmKGQuY2xvc2VQYXRoKCksdClyZXR1cm4gZD1udWxsLHQrIiJ8fG51bGx9dmFyIGw9ZSx1PXMsZj1uKDApLHg9bnVsbCx5PWgscD1vLHY9XyxkPW51bGw7cmV0dXJuIHQuY2VudHJvaWQ9ZnVuY3Rpb24oKXt2YXIgdD0oK2wuYXBwbHkodGhpcyxhcmd1bWVudHMpKyArdS5hcHBseSh0aGlzLGFyZ3VtZW50cykpLzIsaT0oK3kuYXBwbHkodGhpcyxhcmd1bWVudHMpKyArcC5hcHBseSh0aGlzLGFyZ3VtZW50cykpLzItZ3QvMjtyZXR1cm5bTWF0aC5jb3MoaSkqdCxNYXRoLnNpbihpKSp0XX0sdC5pbm5lclJhZGl1cz1mdW5jdGlvbihpKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obD0iZnVuY3Rpb24iPT10eXBlb2YgaT9pOm4oK2kpLHQpOmx9LHQub3V0ZXJSYWRpdXM9ZnVuY3Rpb24oaSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHU9ImZ1bmN0aW9uIj09dHlwZW9mIGk/aTpuKCtpKSx0KTp1fSx0LmNvcm5lclJhZGl1cz1mdW5jdGlvbihpKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oZj0iZnVuY3Rpb24iPT10eXBlb2YgaT9pOm4oK2kpLHQpOmZ9LHQucGFkUmFkaXVzPWZ1bmN0aW9uKGkpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh4PW51bGw9PWk/bnVsbDoiZnVuY3Rpb24iPT10eXBlb2YgaT9pOm4oK2kpLHQpOnh9LHQuc3RhcnRBbmdsZT1mdW5jdGlvbihpKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oeT0iZnVuY3Rpb24iPT10eXBlb2YgaT9pOm4oK2kpLHQpOnl9LHQuZW5kQW5nbGU9ZnVuY3Rpb24oaSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHA9ImZ1bmN0aW9uIj09dHlwZW9mIGk/aTpuKCtpKSx0KTpwfSx0LnBhZEFuZ2xlPWZ1bmN0aW9uKGkpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh2PSJmdW5jdGlvbiI9PXR5cGVvZiBpP2k6bigraSksdCk6dn0sdC5jb250ZXh0PWZ1bmN0aW9uKGkpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhkPW51bGw9PWk/bnVsbDppLHQpOmR9LHR9ZnVuY3Rpb24gdSh0KXt0aGlzLl9jb250ZXh0PXR9ZnVuY3Rpb24gZih0KXtyZXR1cm4gbmV3IHUodCl9ZnVuY3Rpb24geCh0KXtyZXR1cm4gdFswXX1mdW5jdGlvbiB5KHQpe3JldHVybiB0WzFdfWZ1bmN0aW9uIHAoKXtmdW5jdGlvbiB0KHQpe3ZhciBuLHIsYyxsPXQubGVuZ3RoLHU9ITE7Zm9yKG51bGw9PW8mJihhPV8oYz1pLnBhdGgoKSkpLG49MDtuPD1sOysrbikhKG48bCYmaChyPXRbbl0sbix0KSk9PT11JiYoKHU9IXUpP2EubGluZVN0YXJ0KCk6YS5saW5lRW5kKCkpLHUmJmEucG9pbnQoK2UocixuLHQpLCtzKHIsbix0KSk7aWYoYylyZXR1cm4gYT1udWxsLGMrIiJ8fG51bGx9dmFyIGU9eCxzPXksaD1uKCEwKSxvPW51bGwsXz1mLGE9bnVsbDtyZXR1cm4gdC54PWZ1bmN0aW9uKGkpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhlPSJmdW5jdGlvbiI9PXR5cGVvZiBpP2k6bigraSksdCk6ZX0sdC55PWZ1bmN0aW9uKGkpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhzPSJmdW5jdGlvbiI9PXR5cGVvZiBpP2k6bigraSksdCk6c30sdC5kZWZpbmVkPWZ1bmN0aW9uKGkpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhoPSJmdW5jdGlvbiI9PXR5cGVvZiBpP2k6bighIWkpLHQpOmh9LHQuY3VydmU9ZnVuY3Rpb24oaSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KF89aSxudWxsIT1vJiYoYT1fKG8pKSx0KTpffSx0LmNvbnRleHQ9ZnVuY3Rpb24oaSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG51bGw9PWk/bz1hPW51bGw6YT1fKG89aSksdCk6b30sdH1mdW5jdGlvbiB2KCl7ZnVuY3Rpb24gdCh0KXt2YXIgbixlLHUsZix4LHk9dC5sZW5ndGgscD0hMSx2PW5ldyBBcnJheSh5KSxkPW5ldyBBcnJheSh5KTtmb3IobnVsbD09ciYmKGw9Yyh4PWkucGF0aCgpKSksbj0wO248PXk7KytuKXtpZighKG48eSYmYShmPXRbbl0sbix0KSk9PT1wKWlmKHA9IXApZT1uLGwuYXJlYVN0YXJ0KCksbC5saW5lU3RhcnQoKTtlbHNle2ZvcihsLmxpbmVFbmQoKSxsLmxpbmVTdGFydCgpLHU9bi0xO3U+PWU7LS11KWwucG9pbnQodlt1XSxkW3VdKTtsLmxpbmVFbmQoKSxsLmFyZWFFbmQoKX1wJiYodltuXT0rcyhmLG4sdCksZFtuXT0rbyhmLG4sdCksbC5wb2ludChoPytoKGYsbix0KTp2W25dLF8/K18oZixuLHQpOmRbbl0pKX1pZih4KXJldHVybiBsPW51bGwseCsiInx8bnVsbH1mdW5jdGlvbiBlKCl7cmV0dXJuIHAoKS5kZWZpbmVkKGEpLmN1cnZlKGMpLmNvbnRleHQocil9dmFyIHM9eCxoPW51bGwsbz1uKDApLF89eSxhPW4oITApLHI9bnVsbCxjPWYsbD1udWxsO3JldHVybiB0Lng9ZnVuY3Rpb24oaSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHM9ImZ1bmN0aW9uIj09dHlwZW9mIGk/aTpuKCtpKSxoPW51bGwsdCk6c30sdC54MD1mdW5jdGlvbihpKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8ocz0iZnVuY3Rpb24iPT10eXBlb2YgaT9pOm4oK2kpLHQpOnN9LHQueDE9ZnVuY3Rpb24oaSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGg9bnVsbD09aT9udWxsOiJmdW5jdGlvbiI9PXR5cGVvZiBpP2k6bigraSksdCk6aH0sdC55PWZ1bmN0aW9uKGkpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhvPSJmdW5jdGlvbiI9PXR5cGVvZiBpP2k6bigraSksXz1udWxsLHQpOm99LHQueTA9ZnVuY3Rpb24oaSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG89ImZ1bmN0aW9uIj09dHlwZW9mIGk/aTpuKCtpKSx0KTpvfSx0LnkxPWZ1bmN0aW9uKGkpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhfPW51bGw9PWk/bnVsbDoiZnVuY3Rpb24iPT10eXBlb2YgaT9pOm4oK2kpLHQpOl99LHQubGluZVgwPXQubGluZVkwPWZ1bmN0aW9uKCl7cmV0dXJuIGUoKS54KHMpLnkobyl9LHQubGluZVkxPWZ1bmN0aW9uKCl7cmV0dXJuIGUoKS54KHMpLnkoXyl9LHQubGluZVgxPWZ1bmN0aW9uKCl7cmV0dXJuIGUoKS54KGgpLnkobyl9LHQuZGVmaW5lZD1mdW5jdGlvbihpKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oYT0iZnVuY3Rpb24iPT10eXBlb2YgaT9pOm4oISFpKSx0KTphfSx0LmN1cnZlPWZ1bmN0aW9uKGkpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhjPWksbnVsbCE9ciYmKGw9YyhyKSksdCk6Y30sdC5jb250ZXh0PWZ1bmN0aW9uKGkpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhudWxsPT1pP3I9bD1udWxsOmw9YyhyPWkpLHQpOnJ9LHR9ZnVuY3Rpb24gZCh0LGkpe3JldHVybiBpPHQ/LTE6aT50PzE6aT49dD8wOk5hTn1mdW5jdGlvbiBUKHQpe3JldHVybiB0fWZ1bmN0aW9uIE0oKXtmdW5jdGlvbiB0KHQpe3ZhciBuLGEscixjLGwsdT10Lmxlbmd0aCxmPTAseD1uZXcgQXJyYXkodSkseT1uZXcgQXJyYXkodSkscD0raC5hcHBseSh0aGlzLGFyZ3VtZW50cyksdj1NYXRoLm1pbih3dCxNYXRoLm1heCgtd3Qsby5hcHBseSh0aGlzLGFyZ3VtZW50cyktcCkpLGQ9TWF0aC5taW4oTWF0aC5hYnModikvdSxfLmFwcGx5KHRoaXMsYXJndW1lbnRzKSksVD1kKih2PDA/LTE6MSk7Zm9yKG49MDtuPHU7KytuKShsPXlbeFtuXT1uXT0raSh0W25dLG4sdCkpPjAmJihmKz1sKTtmb3IobnVsbCE9ZT94LnNvcnQoZnVuY3Rpb24odCxpKXtyZXR1cm4gZSh5W3RdLHlbaV0pfSk6bnVsbCE9cyYmeC5zb3J0KGZ1bmN0aW9uKGksbil7cmV0dXJuIHModFtpXSx0W25dKX0pLG49MCxyPWY/KHYtdSpUKS9mOjA7bjx1OysrbixwPWMpYT14W25dLGw9eVthXSxjPXArKGw+MD9sKnI6MCkrVCx5W2FdPXtkYXRhOnRbYV0saW5kZXg6bix2YWx1ZTpsLHN0YXJ0QW5nbGU6cCxlbmRBbmdsZTpjLHBhZEFuZ2xlOmR9O3JldHVybiB5fXZhciBpPVQsZT1kLHM9bnVsbCxoPW4oMCksbz1uKHd0KSxfPW4oMCk7cmV0dXJuIHQudmFsdWU9ZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGk9ImZ1bmN0aW9uIj09dHlwZW9mIGU/ZTpuKCtlKSx0KTppfSx0LnNvcnRWYWx1ZXM9ZnVuY3Rpb24oaSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGU9aSxzPW51bGwsdCk6ZX0sdC5zb3J0PWZ1bmN0aW9uKGkpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhzPWksZT1udWxsLHQpOnN9LHQuc3RhcnRBbmdsZT1mdW5jdGlvbihpKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oaD0iZnVuY3Rpb24iPT10eXBlb2YgaT9pOm4oK2kpLHQpOmh9LHQuZW5kQW5nbGU9ZnVuY3Rpb24oaSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG89ImZ1bmN0aW9uIj09dHlwZW9mIGk/aTpuKCtpKSx0KTpvfSx0LnBhZEFuZ2xlPWZ1bmN0aW9uKGkpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhfPSJmdW5jdGlvbiI9PXR5cGVvZiBpP2k6bigraSksdCk6X30sdH1mdW5jdGlvbiBnKHQpe3RoaXMuX2N1cnZlPXR9ZnVuY3Rpb24gYih0KXtmdW5jdGlvbiBpKGkpe3JldHVybiBuZXcgZyh0KGkpKX1yZXR1cm4gaS5fY3VydmU9dCxpfWZ1bmN0aW9uIHcodCl7dmFyIGk9dC5jdXJ2ZTtyZXR1cm4gdC5hbmdsZT10LngsZGVsZXRlIHQueCx0LnJhZGl1cz10LnksZGVsZXRlIHQueSx0LmN1cnZlPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoP2koYih0KSk6aSgpLl9jdXJ2ZX0sdH1mdW5jdGlvbiBtKCl7cmV0dXJuIHcocCgpLmN1cnZlKG10KSl9ZnVuY3Rpb24gaygpe3ZhciB0PXYoKS5jdXJ2ZShtdCksaT10LmN1cnZlLG49dC5saW5lWDAsZT10LmxpbmVYMSxzPXQubGluZVkwLGg9dC5saW5lWTE7cmV0dXJuIHQuYW5nbGU9dC54LGRlbGV0ZSB0LngsdC5zdGFydEFuZ2xlPXQueDAsZGVsZXRlIHQueDAsdC5lbmRBbmdsZT10LngxLGRlbGV0ZSB0LngxLHQucmFkaXVzPXQueSxkZWxldGUgdC55LHQuaW5uZXJSYWRpdXM9dC55MCxkZWxldGUgdC55MCx0Lm91dGVyUmFkaXVzPXQueTEsZGVsZXRlIHQueTEsdC5saW5lU3RhcnRBbmdsZT1mdW5jdGlvbigpe3JldHVybiB3KG4oKSl9LGRlbGV0ZSB0LmxpbmVYMCx0LmxpbmVFbmRBbmdsZT1mdW5jdGlvbigpe3JldHVybiB3KGUoKSl9LGRlbGV0ZSB0LmxpbmVYMSx0LmxpbmVJbm5lclJhZGl1cz1mdW5jdGlvbigpe3JldHVybiB3KHMoKSl9LGRlbGV0ZSB0LmxpbmVZMCx0LmxpbmVPdXRlclJhZGl1cz1mdW5jdGlvbigpe3JldHVybiB3KGgoKSl9LGRlbGV0ZSB0LmxpbmVZMSx0LmN1cnZlPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoP2koYih0KSk6aSgpLl9jdXJ2ZX0sdH1mdW5jdGlvbiBOKCl7ZnVuY3Rpb24gdCgpe3ZhciB0O2lmKGh8fChoPXQ9aS5wYXRoKCkpLGUuYXBwbHkodGhpcyxhcmd1bWVudHMpLmRyYXcoaCwrcy5hcHBseSh0aGlzLGFyZ3VtZW50cykpLHQpcmV0dXJuIGg9bnVsbCx0KyIifHxudWxsfXZhciBlPW4oa3QpLHM9big2NCksaD1udWxsO3JldHVybiB0LnR5cGU9ZnVuY3Rpb24oaSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGU9ImZ1bmN0aW9uIj09dHlwZW9mIGk/aTpuKGkpLHQpOmV9LHQuc2l6ZT1mdW5jdGlvbihpKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8ocz0iZnVuY3Rpb24iPT10eXBlb2YgaT9pOm4oK2kpLHQpOnN9LHQuY29udGV4dD1mdW5jdGlvbihpKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oaD1udWxsPT1pP251bGw6aSx0KTpofSx0fWZ1bmN0aW9uIFMoKXt9ZnVuY3Rpb24gRSh0LGksbil7dC5fY29udGV4dC5iZXppZXJDdXJ2ZVRvKCgyKnQuX3gwK3QuX3gxKS8zLCgyKnQuX3kwK3QuX3kxKS8zLCh0Ll94MCsyKnQuX3gxKS8zLCh0Ll95MCsyKnQuX3kxKS8zLCh0Ll94MCs0KnQuX3gxK2kpLzYsKHQuX3kwKzQqdC5feTErbikvNil9ZnVuY3Rpb24gQSh0KXt0aGlzLl9jb250ZXh0PXR9ZnVuY3Rpb24gUCh0KXtyZXR1cm4gbmV3IEEodCl9ZnVuY3Rpb24gcSh0KXt0aGlzLl9jb250ZXh0PXR9ZnVuY3Rpb24gQyh0KXtyZXR1cm4gbmV3IHEodCl9ZnVuY3Rpb24gTyh0KXt0aGlzLl9jb250ZXh0PXR9ZnVuY3Rpb24gUih0KXtyZXR1cm4gbmV3IE8odCl9ZnVuY3Rpb24geih0LGkpe3RoaXMuX2Jhc2lzPW5ldyBBKHQpLHRoaXMuX2JldGE9aX1mdW5jdGlvbiBYKHQsaSxuKXt0Ll9jb250ZXh0LmJlemllckN1cnZlVG8odC5feDErdC5fayoodC5feDItdC5feDApLHQuX3kxK3QuX2sqKHQuX3kyLXQuX3kwKSx0Ll94Mit0Ll9rKih0Ll94MS1pKSx0Ll95Mit0Ll9rKih0Ll95MS1uKSx0Ll94Mix0Ll95Mil9ZnVuY3Rpb24gWSh0LGkpe3RoaXMuX2NvbnRleHQ9dCx0aGlzLl9rPSgxLWkpLzZ9ZnVuY3Rpb24gQih0LGkpe3RoaXMuX2NvbnRleHQ9dCx0aGlzLl9rPSgxLWkpLzZ9ZnVuY3Rpb24gaih0LGkpe3RoaXMuX2NvbnRleHQ9dCx0aGlzLl9rPSgxLWkpLzZ9ZnVuY3Rpb24gSSh0LGksbil7dmFyIGU9dC5feDEscz10Ll95MSxoPXQuX3gyLG89dC5feTI7aWYodC5fbDAxX2E+TXQpe3ZhciBfPTIqdC5fbDAxXzJhKzMqdC5fbDAxX2EqdC5fbDEyX2ErdC5fbDEyXzJhLGE9Myp0Ll9sMDFfYSoodC5fbDAxX2ErdC5fbDEyX2EpO2U9KGUqXy10Ll94MCp0Ll9sMTJfMmErdC5feDIqdC5fbDAxXzJhKS9hLHM9KHMqXy10Ll95MCp0Ll9sMTJfMmErdC5feTIqdC5fbDAxXzJhKS9hfWlmKHQuX2wyM19hPk10KXt2YXIgcj0yKnQuX2wyM18yYSszKnQuX2wyM19hKnQuX2wxMl9hK3QuX2wxMl8yYSxjPTMqdC5fbDIzX2EqKHQuX2wyM19hK3QuX2wxMl9hKTtoPShoKnIrdC5feDEqdC5fbDIzXzJhLWkqdC5fbDEyXzJhKS9jLG89KG8qcit0Ll95MSp0Ll9sMjNfMmEtbip0Ll9sMTJfMmEpL2N9dC5fY29udGV4dC5iZXppZXJDdXJ2ZVRvKGUscyxoLG8sdC5feDIsdC5feTIpfWZ1bmN0aW9uIEwodCxpKXt0aGlzLl9jb250ZXh0PXQsdGhpcy5fYWxwaGE9aX1mdW5jdGlvbiBEKHQsaSl7dGhpcy5fY29udGV4dD10LHRoaXMuX2FscGhhPWl9ZnVuY3Rpb24gVyh0LGkpe3RoaXMuX2NvbnRleHQ9dCx0aGlzLl9hbHBoYT1pfWZ1bmN0aW9uIFYodCl7dGhpcy5fY29udGV4dD10fWZ1bmN0aW9uIEYodCl7cmV0dXJuIG5ldyBWKHQpfWZ1bmN0aW9uIEcodCl7cmV0dXJuIHQ8MD8tMToxfWZ1bmN0aW9uIEgodCxpLG4pe3ZhciBlPXQuX3gxLXQuX3gwLHM9aS10Ll94MSxoPSh0Ll95MS10Ll95MCkvKGV8fHM8MCYmLTApLG89KG4tdC5feTEpLyhzfHxlPDAmJi0wKSxfPShoKnMrbyplKS8oZStzKTtyZXR1cm4oRyhoKStHKG8pKSpNYXRoLm1pbihNYXRoLmFicyhoKSxNYXRoLmFicyhvKSwuNSpNYXRoLmFicyhfKSl8fDB9ZnVuY3Rpb24gSih0LGkpe3ZhciBuPXQuX3gxLXQuX3gwO3JldHVybiBuPygzKih0Ll95MS10Ll95MCkvbi1pKS8yOml9ZnVuY3Rpb24gSyh0LGksbil7dmFyIGU9dC5feDAscz10Ll95MCxoPXQuX3gxLG89dC5feTEsXz0oaC1lKS8zO3QuX2NvbnRleHQuYmV6aWVyQ3VydmVUbyhlK18scytfKmksaC1fLG8tXypuLGgsbyl9ZnVuY3Rpb24gUSh0KXt0aGlzLl9jb250ZXh0PXR9ZnVuY3Rpb24gVSh0KXt0aGlzLl9jb250ZXh0PW5ldyBaKHQpfWZ1bmN0aW9uIFoodCl7dGhpcy5fY29udGV4dD10fWZ1bmN0aW9uICQodCl7cmV0dXJuIG5ldyBRKHQpfWZ1bmN0aW9uIHR0KHQpe3JldHVybiBuZXcgVSh0KX1mdW5jdGlvbiBpdCh0KXt0aGlzLl9jb250ZXh0PXR9ZnVuY3Rpb24gbnQodCl7dmFyIGksbixlPXQubGVuZ3RoLTEscz1uZXcgQXJyYXkoZSksaD1uZXcgQXJyYXkoZSksbz1uZXcgQXJyYXkoZSk7Zm9yKHNbMF09MCxoWzBdPTIsb1swXT10WzBdKzIqdFsxXSxpPTE7aTxlLTE7KytpKXNbaV09MSxoW2ldPTQsb1tpXT00KnRbaV0rMip0W2krMV07Zm9yKHNbZS0xXT0yLGhbZS0xXT03LG9bZS0xXT04KnRbZS0xXSt0W2VdLGk9MTtpPGU7KytpKW49c1tpXS9oW2ktMV0saFtpXS09bixvW2ldLT1uKm9baS0xXTtmb3Ioc1tlLTFdPW9bZS0xXS9oW2UtMV0saT1lLTI7aT49MDstLWkpc1tpXT0ob1tpXS1zW2krMV0pL2hbaV07Zm9yKGhbZS0xXT0odFtlXStzW2UtMV0pLzIsaT0wO2k8ZS0xOysraSloW2ldPTIqdFtpKzFdLXNbaSsxXTtyZXR1cm5bcyxoXX1mdW5jdGlvbiBldCh0KXtyZXR1cm4gbmV3IGl0KHQpfWZ1bmN0aW9uIHN0KHQsaSl7dGhpcy5fY29udGV4dD10LHRoaXMuX3Q9aX1mdW5jdGlvbiBodCh0KXtyZXR1cm4gbmV3IHN0KHQsLjUpfWZ1bmN0aW9uIG90KHQpe3JldHVybiBuZXcgc3QodCwwKX1mdW5jdGlvbiBfdCh0KXtyZXR1cm4gbmV3IHN0KHQsMSl9ZnVuY3Rpb24gYXQodCxpKXtpZigoZT10Lmxlbmd0aCk+MSlmb3IodmFyIG4sZSxzPTEsaD10W2lbMF1dLG89aC5sZW5ndGg7czxlOysrcyl7bj1oLGg9dFtpW3NdXTtmb3IodmFyIF89MDtfPG87KytfKWhbX11bMV0rPWhbX11bMF09aXNOYU4obltfXVsxXSk/bltfXVswXTpuW19dWzFdfX1mdW5jdGlvbiBydCh0KXtmb3IodmFyIGk9dC5sZW5ndGgsbj1uZXcgQXJyYXkoaSk7LS1pPj0wOyluW2ldPWk7cmV0dXJuIG59ZnVuY3Rpb24gY3QodCxpKXtyZXR1cm4gdFtpXX1mdW5jdGlvbiBsdCgpe2Z1bmN0aW9uIHQodCl7dmFyIG4sbyxfPWkuYXBwbHkodGhpcyxhcmd1bWVudHMpLGE9dC5sZW5ndGgscj1fLmxlbmd0aCxjPW5ldyBBcnJheShyKTtmb3Iobj0wO248cjsrK24pe2Zvcih2YXIgbCx1PV9bbl0sZj1jW25dPW5ldyBBcnJheShhKSx4PTA7eDxhOysreClmW3hdPWw9WzAsK2godFt4XSx1LHgsdCldLGwuZGF0YT10W3hdO2Yua2V5PXV9Zm9yKG49MCxvPWUoYyk7bjxyOysrbiljW29bbl1dLmluZGV4PW47cmV0dXJuIHMoYyxvKSxjfXZhciBpPW4oW10pLGU9cnQscz1hdCxoPWN0O3JldHVybiB0LmtleXM9ZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGk9ImZ1bmN0aW9uIj09dHlwZW9mIGU/ZTpuKFV0LmNhbGwoZSkpLHQpOml9LHQudmFsdWU9ZnVuY3Rpb24oaSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGg9ImZ1bmN0aW9uIj09dHlwZW9mIGk/aTpuKCtpKSx0KTpofSx0Lm9yZGVyPWZ1bmN0aW9uKGkpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhlPW51bGw9PWk/cnQ6ImZ1bmN0aW9uIj09dHlwZW9mIGk/aTpuKFV0LmNhbGwoaSkpLHQpOmV9LHQub2Zmc2V0PWZ1bmN0aW9uKGkpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhzPW51bGw9PWk/YXQ6aSx0KTpzfSx0fWZ1bmN0aW9uIHV0KHQsaSl7aWYoKGU9dC5sZW5ndGgpPjApe2Zvcih2YXIgbixlLHMsaD0wLG89dFswXS5sZW5ndGg7aDxvOysraCl7Zm9yKHM9bj0wO248ZTsrK24pcys9dFtuXVtoXVsxXXx8MDtpZihzKWZvcihuPTA7bjxlOysrbil0W25dW2hdWzFdLz1zfWF0KHQsaSl9fWZ1bmN0aW9uIGZ0KHQsaSl7aWYoKG49dC5sZW5ndGgpPjApe2Zvcih2YXIgbixlPTAscz10W2lbMF1dLGg9cy5sZW5ndGg7ZTxoOysrZSl7Zm9yKHZhciBvPTAsXz0wO288bjsrK28pXys9dFtvXVtlXVsxXXx8MDtzW2VdWzFdKz1zW2VdWzBdPS1fLzJ9YXQodCxpKX19ZnVuY3Rpb24geHQodCxpKXtpZigocz10Lmxlbmd0aCk+MCYmKGU9KG49dFtpWzBdXSkubGVuZ3RoKT4wKXtmb3IodmFyIG4sZSxzLGg9MCxvPTE7bzxlOysrbyl7Zm9yKHZhciBfPTAsYT0wLHI9MDtfPHM7KytfKXtmb3IodmFyIGM9dFtpW19dXSxsPWNbb11bMV18fDAsdT1jW28tMV1bMV18fDAsZj0obC11KS8yLHg9MDt4PF87Kyt4KXt2YXIgeT10W2lbeF1dLHA9eVtvXVsxXXx8MCx2PXlbby0xXVsxXXx8MDtmKz1wLXZ9YSs9bCxyKz1mKmx9bltvLTFdWzFdKz1uW28tMV1bMF09aCxhJiYoaC09ci9hKX1uW28tMV1bMV0rPW5bby0xXVswXT1oLGF0KHQsaSl9fWZ1bmN0aW9uIHl0KHQpe3ZhciBpPXQubWFwKHB0KTtyZXR1cm4gcnQodCkuc29ydChmdW5jdGlvbih0LG4pe3JldHVybiBpW3RdLWlbbl19KX1mdW5jdGlvbiBwdCh0KXtmb3IodmFyIGksbj0wLGU9LTEscz10Lmxlbmd0aDsrK2U8czspKGk9K3RbZV1bMV0pJiYobis9aSk7cmV0dXJuIG59ZnVuY3Rpb24gdnQodCl7cmV0dXJuIHl0KHQpLnJldmVyc2UoKX1mdW5jdGlvbiBkdCh0KXt2YXIgaSxuLGU9dC5sZW5ndGgscz10Lm1hcChwdCksaD1ydCh0KS5zb3J0KGZ1bmN0aW9uKHQsaSl7cmV0dXJuIHNbaV0tc1t0XX0pLG89MCxfPTAsYT1bXSxyPVtdO2ZvcihpPTA7aTxlOysraSluPWhbaV0sbzxfPyhvKz1zW25dLGEucHVzaChuKSk6KF8rPXNbbl0sci5wdXNoKG4pKTtyZXR1cm4gci5yZXZlcnNlKCkuY29uY2F0KGEpfWZ1bmN0aW9uIFR0KHQpe3JldHVybiBydCh0KS5yZXZlcnNlKCl9dmFyIE10PTFlLTEyLGd0PU1hdGguUEksYnQ9Z3QvMix3dD0yKmd0O3UucHJvdG90eXBlPXthcmVhU3RhcnQ6ZnVuY3Rpb24oKXt0aGlzLl9saW5lPTB9LGFyZWFFbmQ6ZnVuY3Rpb24oKXt0aGlzLl9saW5lPU5hTn0sbGluZVN0YXJ0OmZ1bmN0aW9uKCl7dGhpcy5fcG9pbnQ9MH0sbGluZUVuZDpmdW5jdGlvbigpeyh0aGlzLl9saW5lfHwwIT09dGhpcy5fbGluZSYmMT09PXRoaXMuX3BvaW50KSYmdGhpcy5fY29udGV4dC5jbG9zZVBhdGgoKSx0aGlzLl9saW5lPTEtdGhpcy5fbGluZX0scG9pbnQ6ZnVuY3Rpb24odCxpKXtzd2l0Y2godD0rdCxpPStpLHRoaXMuX3BvaW50KXtjYXNlIDA6dGhpcy5fcG9pbnQ9MSx0aGlzLl9saW5lP3RoaXMuX2NvbnRleHQubGluZVRvKHQsaSk6dGhpcy5fY29udGV4dC5tb3ZlVG8odCxpKTticmVhaztjYXNlIDE6dGhpcy5fcG9pbnQ9MjtkZWZhdWx0OnRoaXMuX2NvbnRleHQubGluZVRvKHQsaSl9fX07dmFyIG10PWIoZik7Zy5wcm90b3R5cGU9e2FyZWFTdGFydDpmdW5jdGlvbigpe3RoaXMuX2N1cnZlLmFyZWFTdGFydCgpfSxhcmVhRW5kOmZ1bmN0aW9uKCl7dGhpcy5fY3VydmUuYXJlYUVuZCgpfSxsaW5lU3RhcnQ6ZnVuY3Rpb24oKXt0aGlzLl9jdXJ2ZS5saW5lU3RhcnQoKX0sbGluZUVuZDpmdW5jdGlvbigpe3RoaXMuX2N1cnZlLmxpbmVFbmQoKX0scG9pbnQ6ZnVuY3Rpb24odCxpKXt0aGlzLl9jdXJ2ZS5wb2ludChpKk1hdGguc2luKHQpLGkqLU1hdGguY29zKHQpKX19O3ZhciBrdD17ZHJhdzpmdW5jdGlvbih0LGkpe3ZhciBuPU1hdGguc3FydChpL2d0KTt0Lm1vdmVUbyhuLDApLHQuYXJjKDAsMCxuLDAsd3QpfX0sTnQ9e2RyYXc6ZnVuY3Rpb24odCxpKXt2YXIgbj1NYXRoLnNxcnQoaS81KS8yO3QubW92ZVRvKC0zKm4sLW4pLHQubGluZVRvKC1uLC1uKSx0LmxpbmVUbygtbiwtMypuKSx0LmxpbmVUbyhuLC0zKm4pLHQubGluZVRvKG4sLW4pLHQubGluZVRvKDMqbiwtbiksdC5saW5lVG8oMypuLG4pLHQubGluZVRvKG4sbiksdC5saW5lVG8obiwzKm4pLHQubGluZVRvKC1uLDMqbiksdC5saW5lVG8oLW4sbiksdC5saW5lVG8oLTMqbixuKSx0LmNsb3NlUGF0aCgpfX0sU3Q9TWF0aC5zcXJ0KDEvMyksRXQ9MipTdCxBdD17ZHJhdzpmdW5jdGlvbih0LGkpe3ZhciBuPU1hdGguc3FydChpL0V0KSxlPW4qU3Q7dC5tb3ZlVG8oMCwtbiksdC5saW5lVG8oZSwwKSx0LmxpbmVUbygwLG4pLHQubGluZVRvKC1lLDApLHQuY2xvc2VQYXRoKCl9fSxQdD0uODkwODEzMDkxNTI5Mjg1MixxdD1NYXRoLnNpbihndC8xMCkvTWF0aC5zaW4oNypndC8xMCksQ3Q9TWF0aC5zaW4od3QvMTApKnF0LE90PS1NYXRoLmNvcyh3dC8xMCkqcXQsUnQ9e2RyYXc6ZnVuY3Rpb24odCxpKXt2YXIgbj1NYXRoLnNxcnQoaSpQdCksZT1DdCpuLHM9T3Qqbjt0Lm1vdmVUbygwLC1uKSx0LmxpbmVUbyhlLHMpO2Zvcih2YXIgaD0xO2g8NTsrK2gpe3ZhciBvPXd0KmgvNSxfPU1hdGguY29zKG8pLGE9TWF0aC5zaW4obyk7dC5saW5lVG8oYSpuLC1fKm4pLHQubGluZVRvKF8qZS1hKnMsYSplK18qcyl9dC5jbG9zZVBhdGgoKX19LHp0PXtkcmF3OmZ1bmN0aW9uKHQsaSl7dmFyIG49TWF0aC5zcXJ0KGkpLGU9LW4vMjt0LnJlY3QoZSxlLG4sbil9fSxYdD1NYXRoLnNxcnQoMyksWXQ9e2RyYXc6ZnVuY3Rpb24odCxpKXt2YXIgbj0tTWF0aC5zcXJ0KGkvKDMqWHQpKTt0Lm1vdmVUbygwLDIqbiksdC5saW5lVG8oLVh0Km4sLW4pLHQubGluZVRvKFh0Km4sLW4pLHQuY2xvc2VQYXRoKCl9fSxCdD0tLjUsanQ9TWF0aC5zcXJ0KDMpLzIsSXQ9MS9NYXRoLnNxcnQoMTIpLEx0PTMqKEl0LzIrMSksRHQ9e2RyYXc6ZnVuY3Rpb24odCxpKXt2YXIgbj1NYXRoLnNxcnQoaS9MdCksZT1uLzIscz1uKkl0LGg9ZSxvPW4qSXQrbixfPS1oLGE9bzt0Lm1vdmVUbyhlLHMpLHQubGluZVRvKGgsbyksdC5saW5lVG8oXyxhKSx0LmxpbmVUbyhCdCplLWp0KnMsanQqZStCdCpzKSx0LmxpbmVUbyhCdCpoLWp0Km8sanQqaCtCdCpvKSx0LmxpbmVUbyhCdCpfLWp0KmEsanQqXytCdCphKSx0LmxpbmVUbyhCdCplK2p0KnMsQnQqcy1qdCplKSx0LmxpbmVUbyhCdCpoK2p0Km8sQnQqby1qdCpoKSx0LmxpbmVUbyhCdCpfK2p0KmEsQnQqYS1qdCpfKSx0LmNsb3NlUGF0aCgpfX0sV3Q9W2t0LE50LEF0LHp0LFJ0LFl0LER0XTtBLnByb3RvdHlwZT17YXJlYVN0YXJ0OmZ1bmN0aW9uKCl7dGhpcy5fbGluZT0wfSxhcmVhRW5kOmZ1bmN0aW9uKCl7dGhpcy5fbGluZT1OYU59LGxpbmVTdGFydDpmdW5jdGlvbigpe3RoaXMuX3gwPXRoaXMuX3gxPXRoaXMuX3kwPXRoaXMuX3kxPU5hTix0aGlzLl9wb2ludD0wfSxsaW5lRW5kOmZ1bmN0aW9uKCl7c3dpdGNoKHRoaXMuX3BvaW50KXtjYXNlIDM6RSh0aGlzLHRoaXMuX3gxLHRoaXMuX3kxKTtjYXNlIDI6dGhpcy5fY29udGV4dC5saW5lVG8odGhpcy5feDEsdGhpcy5feTEpfSh0aGlzLl9saW5lfHwwIT09dGhpcy5fbGluZSYmMT09PXRoaXMuX3BvaW50KSYmdGhpcy5fY29udGV4dC5jbG9zZVBhdGgoKSx0aGlzLl9saW5lPTEtdGhpcy5fbGluZX0scG9pbnQ6ZnVuY3Rpb24odCxpKXtzd2l0Y2godD0rdCxpPStpLHRoaXMuX3BvaW50KXtjYXNlIDA6dGhpcy5fcG9pbnQ9MSx0aGlzLl9saW5lP3RoaXMuX2NvbnRleHQubGluZVRvKHQsaSk6dGhpcy5fY29udGV4dC5tb3ZlVG8odCxpKTticmVhaztjYXNlIDE6dGhpcy5fcG9pbnQ9MjticmVhaztjYXNlIDI6dGhpcy5fcG9pbnQ9Myx0aGlzLl9jb250ZXh0LmxpbmVUbygoNSp0aGlzLl94MCt0aGlzLl94MSkvNiwoNSp0aGlzLl95MCt0aGlzLl95MSkvNik7ZGVmYXVsdDpFKHRoaXMsdCxpKX10aGlzLl94MD10aGlzLl94MSx0aGlzLl94MT10LHRoaXMuX3kwPXRoaXMuX3kxLHRoaXMuX3kxPWl9fSxxLnByb3RvdHlwZT17YXJlYVN0YXJ0OlMsYXJlYUVuZDpTLGxpbmVTdGFydDpmdW5jdGlvbigpe3RoaXMuX3gwPXRoaXMuX3gxPXRoaXMuX3gyPXRoaXMuX3gzPXRoaXMuX3g0PXRoaXMuX3kwPXRoaXMuX3kxPXRoaXMuX3kyPXRoaXMuX3kzPXRoaXMuX3k0PU5hTix0aGlzLl9wb2ludD0wfSxsaW5lRW5kOmZ1bmN0aW9uKCl7c3dpdGNoKHRoaXMuX3BvaW50KXtjYXNlIDE6dGhpcy5fY29udGV4dC5tb3ZlVG8odGhpcy5feDIsdGhpcy5feTIpLHRoaXMuX2NvbnRleHQuY2xvc2VQYXRoKCk7YnJlYWs7Y2FzZSAyOnRoaXMuX2NvbnRleHQubW92ZVRvKCh0aGlzLl94MisyKnRoaXMuX3gzKS8zLCh0aGlzLl95MisyKnRoaXMuX3kzKS8zKSx0aGlzLl9jb250ZXh0LmxpbmVUbygodGhpcy5feDMrMip0aGlzLl94MikvMywodGhpcy5feTMrMip0aGlzLl95MikvMyksdGhpcy5fY29udGV4dC5jbG9zZVBhdGgoKTticmVhaztjYXNlIDM6dGhpcy5wb2ludCh0aGlzLl94Mix0aGlzLl95MiksdGhpcy5wb2ludCh0aGlzLl94Myx0aGlzLl95MyksdGhpcy5wb2ludCh0aGlzLl94NCx0aGlzLl95NCl9fSxwb2ludDpmdW5jdGlvbih0LGkpe3N3aXRjaCh0PSt0LGk9K2ksdGhpcy5fcG9pbnQpe2Nhc2UgMDp0aGlzLl9wb2ludD0xLHRoaXMuX3gyPXQsdGhpcy5feTI9aTticmVhaztjYXNlIDE6dGhpcy5fcG9pbnQ9Mix0aGlzLl94Mz10LHRoaXMuX3kzPWk7YnJlYWs7Y2FzZSAyOnRoaXMuX3BvaW50PTMsdGhpcy5feDQ9dCx0aGlzLl95ND1pLHRoaXMuX2NvbnRleHQubW92ZVRvKCh0aGlzLl94MCs0KnRoaXMuX3gxK3QpLzYsKHRoaXMuX3kwKzQqdGhpcy5feTEraSkvNik7YnJlYWs7ZGVmYXVsdDpFKHRoaXMsdCxpKX10aGlzLl94MD10aGlzLl94MSx0aGlzLl94MT10LHRoaXMuX3kwPXRoaXMuX3kxLHRoaXMuX3kxPWl9fSxPLnByb3RvdHlwZT17YXJlYVN0YXJ0OmZ1bmN0aW9uKCl7dGhpcy5fbGluZT0wfSxhcmVhRW5kOmZ1bmN0aW9uKCl7dGhpcy5fbGluZT1OYU59LGxpbmVTdGFydDpmdW5jdGlvbigpe3RoaXMuX3gwPXRoaXMuX3gxPXRoaXMuX3kwPXRoaXMuX3kxPU5hTix0aGlzLl9wb2ludD0wfSxsaW5lRW5kOmZ1bmN0aW9uKCl7KHRoaXMuX2xpbmV8fDAhPT10aGlzLl9saW5lJiYzPT09dGhpcy5fcG9pbnQpJiZ0aGlzLl9jb250ZXh0LmNsb3NlUGF0aCgpLHRoaXMuX2xpbmU9MS10aGlzLl9saW5lfSxwb2ludDpmdW5jdGlvbih0LGkpe3N3aXRjaCh0PSt0LGk9K2ksdGhpcy5fcG9pbnQpe2Nhc2UgMDp0aGlzLl9wb2ludD0xO2JyZWFrO2Nhc2UgMTp0aGlzLl9wb2ludD0yO2JyZWFrO2Nhc2UgMjp0aGlzLl9wb2ludD0zO3ZhciBuPSh0aGlzLl94MCs0KnRoaXMuX3gxK3QpLzYsZT0odGhpcy5feTArNCp0aGlzLl95MStpKS82O3RoaXMuX2xpbmU/dGhpcy5fY29udGV4dC5saW5lVG8obixlKTp0aGlzLl9jb250ZXh0Lm1vdmVUbyhuLGUpO2JyZWFrO2Nhc2UgMzp0aGlzLl9wb2ludD00O2RlZmF1bHQ6RSh0aGlzLHQsaSl9dGhpcy5feDA9dGhpcy5feDEsdGhpcy5feDE9dCx0aGlzLl95MD10aGlzLl95MSx0aGlzLl95MT1pfX0sei5wcm90b3R5cGU9e2xpbmVTdGFydDpmdW5jdGlvbigpe3RoaXMuX3g9W10sdGhpcy5feT1bXSx0aGlzLl9iYXNpcy5saW5lU3RhcnQoKX0sbGluZUVuZDpmdW5jdGlvbigpe3ZhciB0PXRoaXMuX3gsaT10aGlzLl95LG49dC5sZW5ndGgtMTtpZihuPjApZm9yKHZhciBlLHM9dFswXSxoPWlbMF0sbz10W25dLXMsXz1pW25dLWgsYT0tMTsrK2E8PW47KWU9YS9uLHRoaXMuX2Jhc2lzLnBvaW50KHRoaXMuX2JldGEqdFthXSsoMS10aGlzLl9iZXRhKSoocytlKm8pLHRoaXMuX2JldGEqaVthXSsoMS10aGlzLl9iZXRhKSooaCtlKl8pKTt0aGlzLl94PXRoaXMuX3k9bnVsbCx0aGlzLl9iYXNpcy5saW5lRW5kKCl9LHBvaW50OmZ1bmN0aW9uKHQsaSl7dGhpcy5feC5wdXNoKCt0KSx0aGlzLl95LnB1c2goK2kpfX07dmFyIFZ0PWZ1bmN0aW9uIHQoaSl7ZnVuY3Rpb24gbih0KXtyZXR1cm4gMT09PWk/bmV3IEEodCk6bmV3IHoodCxpKX1yZXR1cm4gbi5iZXRhPWZ1bmN0aW9uKGkpe3JldHVybiB0KCtpKX0sbn0oLjg1KTtZLnByb3RvdHlwZT17YXJlYVN0YXJ0OmZ1bmN0aW9uKCl7dGhpcy5fbGluZT0wfSxhcmVhRW5kOmZ1bmN0aW9uKCl7dGhpcy5fbGluZT1OYU59LGxpbmVTdGFydDpmdW5jdGlvbigpe3RoaXMuX3gwPXRoaXMuX3gxPXRoaXMuX3gyPXRoaXMuX3kwPXRoaXMuX3kxPXRoaXMuX3kyPU5hTix0aGlzLl9wb2ludD0wfSxsaW5lRW5kOmZ1bmN0aW9uKCl7c3dpdGNoKHRoaXMuX3BvaW50KXtjYXNlIDI6dGhpcy5fY29udGV4dC5saW5lVG8odGhpcy5feDIsdGhpcy5feTIpO2JyZWFrO2Nhc2UgMzpYKHRoaXMsdGhpcy5feDEsdGhpcy5feTEpfSh0aGlzLl9saW5lfHwwIT09dGhpcy5fbGluZSYmMT09PXRoaXMuX3BvaW50KSYmdGhpcy5fY29udGV4dC5jbG9zZVBhdGgoKSx0aGlzLl9saW5lPTEtdGhpcy5fbGluZX0scG9pbnQ6ZnVuY3Rpb24odCxpKXtzd2l0Y2godD0rdCxpPStpLHRoaXMuX3BvaW50KXtjYXNlIDA6dGhpcy5fcG9pbnQ9MSx0aGlzLl9saW5lP3RoaXMuX2NvbnRleHQubGluZVRvKHQsaSk6dGhpcy5fY29udGV4dC5tb3ZlVG8odCxpKTticmVhaztjYXNlIDE6dGhpcy5fcG9pbnQ9Mix0aGlzLl94MT10LHRoaXMuX3kxPWk7YnJlYWs7Y2FzZSAyOnRoaXMuX3BvaW50PTM7ZGVmYXVsdDpYKHRoaXMsdCxpKX10aGlzLl94MD10aGlzLl94MSx0aGlzLl94MT10aGlzLl94Mix0aGlzLl94Mj10LHRoaXMuX3kwPXRoaXMuX3kxLHRoaXMuX3kxPXRoaXMuX3kyLHRoaXMuX3kyPWl9fTt2YXIgRnQ9ZnVuY3Rpb24gdChpKXtmdW5jdGlvbiBuKHQpe3JldHVybiBuZXcgWSh0LGkpfXJldHVybiBuLnRlbnNpb249ZnVuY3Rpb24oaSl7cmV0dXJuIHQoK2kpfSxufSgwKTtCLnByb3RvdHlwZT17YXJlYVN0YXJ0OlMsYXJlYUVuZDpTLGxpbmVTdGFydDpmdW5jdGlvbigpe3RoaXMuX3gwPXRoaXMuX3gxPXRoaXMuX3gyPXRoaXMuX3gzPXRoaXMuX3g0PXRoaXMuX3g1PXRoaXMuX3kwPXRoaXMuX3kxPXRoaXMuX3kyPXRoaXMuX3kzPXRoaXMuX3k0PXRoaXMuX3k1PU5hTix0aGlzLl9wb2ludD0wfSxsaW5lRW5kOmZ1bmN0aW9uKCl7c3dpdGNoKHRoaXMuX3BvaW50KXtjYXNlIDE6dGhpcy5fY29udGV4dC5tb3ZlVG8odGhpcy5feDMsdGhpcy5feTMpLHRoaXMuX2NvbnRleHQuY2xvc2VQYXRoKCk7YnJlYWs7Y2FzZSAyOnRoaXMuX2NvbnRleHQubGluZVRvKHRoaXMuX3gzLHRoaXMuX3kzKSx0aGlzLl9jb250ZXh0LmNsb3NlUGF0aCgpO2JyZWFrO2Nhc2UgMzp0aGlzLnBvaW50KHRoaXMuX3gzLHRoaXMuX3kzKSx0aGlzLnBvaW50KHRoaXMuX3g0LHRoaXMuX3k0KSx0aGlzLnBvaW50KHRoaXMuX3g1LHRoaXMuX3k1KX19LHBvaW50OmZ1bmN0aW9uKHQsaSl7c3dpdGNoKHQ9K3QsaT0raSx0aGlzLl9wb2ludCl7Y2FzZSAwOnRoaXMuX3BvaW50PTEsdGhpcy5feDM9dCx0aGlzLl95Mz1pO2JyZWFrO2Nhc2UgMTp0aGlzLl9wb2ludD0yLHRoaXMuX2NvbnRleHQubW92ZVRvKHRoaXMuX3g0PXQsdGhpcy5feTQ9aSk7YnJlYWs7Y2FzZSAyOnRoaXMuX3BvaW50PTMsdGhpcy5feDU9dCx0aGlzLl95NT1pO2JyZWFrO2RlZmF1bHQ6WCh0aGlzLHQsaSl9dGhpcy5feDA9dGhpcy5feDEsdGhpcy5feDE9dGhpcy5feDIsdGhpcy5feDI9dCx0aGlzLl95MD10aGlzLl95MSx0aGlzLl95MT10aGlzLl95Mix0aGlzLl95Mj1pfX07dmFyIEd0PWZ1bmN0aW9uIHQoaSl7ZnVuY3Rpb24gbih0KXtyZXR1cm4gbmV3IEIodCxpKX1yZXR1cm4gbi50ZW5zaW9uPWZ1bmN0aW9uKGkpe3JldHVybiB0KCtpKX0sbn0oMCk7ai5wcm90b3R5cGU9e2FyZWFTdGFydDpmdW5jdGlvbigpe3RoaXMuX2xpbmU9MH0sYXJlYUVuZDpmdW5jdGlvbigpe3RoaXMuX2xpbmU9TmFOfSxsaW5lU3RhcnQ6ZnVuY3Rpb24oKXt0aGlzLl94MD10aGlzLl94MT10aGlzLl94Mj10aGlzLl95MD10aGlzLl95MT10aGlzLl95Mj1OYU4sdGhpcy5fcG9pbnQ9MH0sbGluZUVuZDpmdW5jdGlvbigpeyh0aGlzLl9saW5lfHwwIT09dGhpcy5fbGluZSYmMz09PXRoaXMuX3BvaW50KSYmdGhpcy5fY29udGV4dC5jbG9zZVBhdGgoKSx0aGlzLl9saW5lPTEtdGhpcy5fbGluZX0scG9pbnQ6ZnVuY3Rpb24odCxpKXtzd2l0Y2godD0rdCxpPStpLHRoaXMuX3BvaW50KXtjYXNlIDA6dGhpcy5fcG9pbnQ9MTticmVhaztjYXNlIDE6dGhpcy5fcG9pbnQ9MjticmVhaztjYXNlIDI6dGhpcy5fcG9pbnQ9Myx0aGlzLl9saW5lP3RoaXMuX2NvbnRleHQubGluZVRvKHRoaXMuX3gyLHRoaXMuX3kyKTp0aGlzLl9jb250ZXh0Lm1vdmVUbyh0aGlzLl94Mix0aGlzLl95Mik7YnJlYWs7Y2FzZSAzOnRoaXMuX3BvaW50PTQ7ZGVmYXVsdDpYKHRoaXMsdCxpKX10aGlzLl94MD10aGlzLl94MSx0aGlzLl94MT10aGlzLl94Mix0aGlzLl94Mj10LHRoaXMuX3kwPXRoaXMuX3kxLHRoaXMuX3kxPXRoaXMuX3kyLHRoaXMuX3kyPWl9fTt2YXIgSHQ9ZnVuY3Rpb24gdChpKXtmdW5jdGlvbiBuKHQpe3JldHVybiBuZXcgaih0LGkpfXJldHVybiBuLnRlbnNpb249ZnVuY3Rpb24oaSl7cmV0dXJuIHQoK2kpfSxufSgwKTtMLnByb3RvdHlwZT17YXJlYVN0YXJ0OmZ1bmN0aW9uKCl7dGhpcy5fbGluZT0wfSxhcmVhRW5kOmZ1bmN0aW9uKCl7dGhpcy5fbGluZT1OYU59LGxpbmVTdGFydDpmdW5jdGlvbigpe3RoaXMuX3gwPXRoaXMuX3gxPXRoaXMuX3gyPXRoaXMuX3kwPXRoaXMuX3kxPXRoaXMuX3kyPU5hTix0aGlzLl9sMDFfYT10aGlzLl9sMTJfYT10aGlzLl9sMjNfYT10aGlzLl9sMDFfMmE9dGhpcy5fbDEyXzJhPXRoaXMuX2wyM18yYT10aGlzLl9wb2ludD0wfSxsaW5lRW5kOmZ1bmN0aW9uKCl7c3dpdGNoKHRoaXMuX3BvaW50KXtjYXNlIDI6dGhpcy5fY29udGV4dC5saW5lVG8odGhpcy5feDIsdGhpcy5feTIpO2JyZWFrO2Nhc2UgMzp0aGlzLnBvaW50KHRoaXMuX3gyLHRoaXMuX3kyKX0odGhpcy5fbGluZXx8MCE9PXRoaXMuX2xpbmUmJjE9PT10aGlzLl9wb2ludCkmJnRoaXMuX2NvbnRleHQuY2xvc2VQYXRoKCksdGhpcy5fbGluZT0xLXRoaXMuX2xpbmV9LHBvaW50OmZ1bmN0aW9uKHQsaSl7aWYodD0rdCxpPStpLHRoaXMuX3BvaW50KXt2YXIgbj10aGlzLl94Mi10LGU9dGhpcy5feTItaTt0aGlzLl9sMjNfYT1NYXRoLnNxcnQodGhpcy5fbDIzXzJhPU1hdGgucG93KG4qbitlKmUsdGhpcy5fYWxwaGEpKX1zd2l0Y2godGhpcy5fcG9pbnQpe2Nhc2UgMDp0aGlzLl9wb2ludD0xLHRoaXMuX2xpbmU/dGhpcy5fY29udGV4dC5saW5lVG8odCxpKTp0aGlzLl9jb250ZXh0Lm1vdmVUbyh0LGkpO2JyZWFrO2Nhc2UgMTp0aGlzLl9wb2ludD0yO2JyZWFrO2Nhc2UgMjp0aGlzLl9wb2ludD0zO2RlZmF1bHQ6SSh0aGlzLHQsaSl9dGhpcy5fbDAxX2E9dGhpcy5fbDEyX2EsdGhpcy5fbDEyX2E9dGhpcy5fbDIzX2EsdGhpcy5fbDAxXzJhPXRoaXMuX2wxMl8yYSx0aGlzLl9sMTJfMmE9dGhpcy5fbDIzXzJhLHRoaXMuX3gwPXRoaXMuX3gxLHRoaXMuX3gxPXRoaXMuX3gyLHRoaXMuX3gyPXQsdGhpcy5feTA9dGhpcy5feTEsdGhpcy5feTE9dGhpcy5feTIsdGhpcy5feTI9aX19O3ZhciBKdD1mdW5jdGlvbiB0KGkpe2Z1bmN0aW9uIG4odCl7cmV0dXJuIGk/bmV3IEwodCxpKTpuZXcgWSh0LDApfXJldHVybiBuLmFscGhhPWZ1bmN0aW9uKGkpe3JldHVybiB0KCtpKX0sbn0oLjUpO0QucHJvdG90eXBlPXthcmVhU3RhcnQ6UyxhcmVhRW5kOlMsbGluZVN0YXJ0OmZ1bmN0aW9uKCl7dGhpcy5feDA9dGhpcy5feDE9dGhpcy5feDI9dGhpcy5feDM9dGhpcy5feDQ9dGhpcy5feDU9dGhpcy5feTA9dGhpcy5feTE9dGhpcy5feTI9dGhpcy5feTM9dGhpcy5feTQ9dGhpcy5feTU9TmFOLHRoaXMuX2wwMV9hPXRoaXMuX2wxMl9hPXRoaXMuX2wyM19hPXRoaXMuX2wwMV8yYT10aGlzLl9sMTJfMmE9dGhpcy5fbDIzXzJhPXRoaXMuX3BvaW50PTB9LGxpbmVFbmQ6ZnVuY3Rpb24oKXtzd2l0Y2godGhpcy5fcG9pbnQpe2Nhc2UgMTp0aGlzLl9jb250ZXh0Lm1vdmVUbyh0aGlzLl94Myx0aGlzLl95MyksdGhpcy5fY29udGV4dC5jbG9zZVBhdGgoKTticmVhaztjYXNlIDI6dGhpcy5fY29udGV4dC5saW5lVG8odGhpcy5feDMsdGhpcy5feTMpLHRoaXMuX2NvbnRleHQuY2xvc2VQYXRoKCk7YnJlYWs7Y2FzZSAzOnRoaXMucG9pbnQodGhpcy5feDMsdGhpcy5feTMpLHRoaXMucG9pbnQodGhpcy5feDQsdGhpcy5feTQpLHRoaXMucG9pbnQodGhpcy5feDUsdGhpcy5feTUpfX0scG9pbnQ6ZnVuY3Rpb24odCxpKXtpZih0PSt0LGk9K2ksdGhpcy5fcG9pbnQpe3ZhciBuPXRoaXMuX3gyLXQsZT10aGlzLl95Mi1pO3RoaXMuX2wyM19hPU1hdGguc3FydCh0aGlzLl9sMjNfMmE9TWF0aC5wb3cobipuK2UqZSx0aGlzLl9hbHBoYSkpfXN3aXRjaCh0aGlzLl9wb2ludCl7Y2FzZSAwOnRoaXMuX3BvaW50PTEsdGhpcy5feDM9dCx0aGlzLl95Mz1pO2JyZWFrO2Nhc2UgMTp0aGlzLl9wb2ludD0yLHRoaXMuX2NvbnRleHQubW92ZVRvKHRoaXMuX3g0PXQsdGhpcy5feTQ9aSk7YnJlYWs7Y2FzZSAyOnRoaXMuX3BvaW50PTMsdGhpcy5feDU9dCx0aGlzLl95NT1pO2JyZWFrO2RlZmF1bHQ6SSh0aGlzLHQsaSl9dGhpcy5fbDAxX2E9dGhpcy5fbDEyX2EsdGhpcy5fbDEyX2E9dGhpcy5fbDIzX2EsdGhpcy5fbDAxXzJhPXRoaXMuX2wxMl8yYSx0aGlzLl9sMTJfMmE9dGhpcy5fbDIzXzJhLHRoaXMuX3gwPXRoaXMuX3gxLHRoaXMuX3gxPXRoaXMuX3gyLHRoaXMuX3gyPXQsdGhpcy5feTA9dGhpcy5feTEsdGhpcy5feTE9dGhpcy5feTIsdGhpcy5feTI9aX19O3ZhciBLdD1mdW5jdGlvbiB0KGkpe2Z1bmN0aW9uIG4odCl7cmV0dXJuIGk/bmV3IEQodCxpKTpuZXcgQih0LDApfXJldHVybiBuLmFscGhhPWZ1bmN0aW9uKGkpe3JldHVybiB0KCtpKX0sbn0oLjUpO1cucHJvdG90eXBlPXthcmVhU3RhcnQ6ZnVuY3Rpb24oKXt0aGlzLl9saW5lPTB9LGFyZWFFbmQ6ZnVuY3Rpb24oKXt0aGlzLl9saW5lPU5hTn0sbGluZVN0YXJ0OmZ1bmN0aW9uKCl7dGhpcy5feDA9dGhpcy5feDE9dGhpcy5feDI9dGhpcy5feTA9dGhpcy5feTE9dGhpcy5feTI9TmFOLHRoaXMuX2wwMV9hPXRoaXMuX2wxMl9hPXRoaXMuX2wyM19hPXRoaXMuX2wwMV8yYT10aGlzLl9sMTJfMmE9dGhpcy5fbDIzXzJhPXRoaXMuX3BvaW50PTB9LGxpbmVFbmQ6ZnVuY3Rpb24oKXsodGhpcy5fbGluZXx8MCE9PXRoaXMuX2xpbmUmJjM9PT10aGlzLl9wb2ludCkmJnRoaXMuX2NvbnRleHQuY2xvc2VQYXRoKCksdGhpcy5fbGluZT0xLXRoaXMuX2xpbmV9LHBvaW50OmZ1bmN0aW9uKHQsaSl7aWYodD0rdCxpPStpLHRoaXMuX3BvaW50KXt2YXIgbj10aGlzLl94Mi10LGU9dGhpcy5feTItaTt0aGlzLl9sMjNfYT1NYXRoLnNxcnQodGhpcy5fbDIzXzJhPU1hdGgucG93KG4qbitlKmUsdGhpcy5fYWxwaGEpKX1zd2l0Y2godGhpcy5fcG9pbnQpe2Nhc2UgMDp0aGlzLl9wb2ludD0xO2JyZWFrO2Nhc2UgMTp0aGlzLl9wb2ludD0yO2JyZWFrO2Nhc2UgMjp0aGlzLl9wb2ludD0zLHRoaXMuX2xpbmU/dGhpcy5fY29udGV4dC5saW5lVG8odGhpcy5feDIsdGhpcy5feTIpOnRoaXMuX2NvbnRleHQubW92ZVRvKHRoaXMuX3gyLHRoaXMuX3kyKTticmVhaztjYXNlIDM6dGhpcy5fcG9pbnQ9NDtkZWZhdWx0OkkodGhpcyx0LGkpfXRoaXMuX2wwMV9hPXRoaXMuX2wxMl9hLHRoaXMuX2wxMl9hPXRoaXMuX2wyM19hLHRoaXMuX2wwMV8yYT10aGlzLl9sMTJfMmEsdGhpcy5fbDEyXzJhPXRoaXMuX2wyM18yYSx0aGlzLl94MD10aGlzLl94MSx0aGlzLl94MT10aGlzLl94Mix0aGlzLl94Mj10LHRoaXMuX3kwPXRoaXMuX3kxLHRoaXMuX3kxPXRoaXMuX3kyLHRoaXMuX3kyPWl9fTt2YXIgUXQ9ZnVuY3Rpb24gdChpKXtmdW5jdGlvbiBuKHQpe3JldHVybiBpP25ldyBXKHQsaSk6bmV3IGoodCwwKX1yZXR1cm4gbi5hbHBoYT1mdW5jdGlvbihpKXtyZXR1cm4gdCgraSl9LG59KC41KTtWLnByb3RvdHlwZT17YXJlYVN0YXJ0OlMsYXJlYUVuZDpTLGxpbmVTdGFydDpmdW5jdGlvbigpe3RoaXMuX3BvaW50PTB9LGxpbmVFbmQ6ZnVuY3Rpb24oKXt0aGlzLl9wb2ludCYmdGhpcy5fY29udGV4dC5jbG9zZVBhdGgoKX0scG9pbnQ6ZnVuY3Rpb24odCxpKXt0PSt0LGk9K2ksdGhpcy5fcG9pbnQ/dGhpcy5fY29udGV4dC5saW5lVG8odCxpKToodGhpcy5fcG9pbnQ9MSx0aGlzLl9jb250ZXh0Lm1vdmVUbyh0LGkpKX19LFEucHJvdG90eXBlPXthcmVhU3RhcnQ6ZnVuY3Rpb24oKXt0aGlzLl9saW5lPTB9LGFyZWFFbmQ6ZnVuY3Rpb24oKXt0aGlzLl9saW5lPU5hTn0sbGluZVN0YXJ0OmZ1bmN0aW9uKCl7dGhpcy5feDA9dGhpcy5feDE9dGhpcy5feTA9dGhpcy5feTE9dGhpcy5fdDA9TmFOLHRoaXMuX3BvaW50PTB9LGxpbmVFbmQ6ZnVuY3Rpb24oKXtzd2l0Y2godGhpcy5fcG9pbnQpe2Nhc2UgMjp0aGlzLl9jb250ZXh0LmxpbmVUbyh0aGlzLl94MSx0aGlzLl95MSk7YnJlYWs7Y2FzZSAzOksodGhpcyx0aGlzLl90MCxKKHRoaXMsdGhpcy5fdDApKX0odGhpcy5fbGluZXx8MCE9PXRoaXMuX2xpbmUmJjE9PT10aGlzLl9wb2ludCkmJnRoaXMuX2NvbnRleHQuY2xvc2VQYXRoKCksdGhpcy5fbGluZT0xLXRoaXMuX2xpbmV9LHBvaW50OmZ1bmN0aW9uKHQsaSl7dmFyIG49TmFOO2lmKHQ9K3QsaT0raSx0IT09dGhpcy5feDF8fGkhPT10aGlzLl95MSl7c3dpdGNoKHRoaXMuX3BvaW50KXtjYXNlIDA6dGhpcy5fcG9pbnQ9MSx0aGlzLl9saW5lP3RoaXMuX2NvbnRleHQubGluZVRvKHQsaSk6dGhpcy5fY29udGV4dC5tb3ZlVG8odCxpKTticmVhaztjYXNlIDE6dGhpcy5fcG9pbnQ9MjticmVhaztjYXNlIDI6dGhpcy5fcG9pbnQ9MyxLKHRoaXMsSih0aGlzLG49SCh0aGlzLHQsaSkpLG4pO2JyZWFrO2RlZmF1bHQ6Syh0aGlzLHRoaXMuX3QwLG49SCh0aGlzLHQsaSkpfXRoaXMuX3gwPXRoaXMuX3gxLHRoaXMuX3gxPXQsdGhpcy5feTA9dGhpcy5feTEsdGhpcy5feTE9aSx0aGlzLl90MD1ufX19LChVLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKFEucHJvdG90eXBlKSkucG9pbnQ9ZnVuY3Rpb24odCxpKXtRLnByb3RvdHlwZS5wb2ludC5jYWxsKHRoaXMsaSx0KX0sWi5wcm90b3R5cGU9e21vdmVUbzpmdW5jdGlvbih0LGkpe3RoaXMuX2NvbnRleHQubW92ZVRvKGksdCl9LGNsb3NlUGF0aDpmdW5jdGlvbigpe3RoaXMuX2NvbnRleHQuY2xvc2VQYXRoKCl9LGxpbmVUbzpmdW5jdGlvbih0LGkpe3RoaXMuX2NvbnRleHQubGluZVRvKGksdCl9LGJlemllckN1cnZlVG86ZnVuY3Rpb24odCxpLG4sZSxzLGgpe3RoaXMuX2NvbnRleHQuYmV6aWVyQ3VydmVUbyhpLHQsZSxuLGgscyl9fSxpdC5wcm90b3R5cGU9e2FyZWFTdGFydDpmdW5jdGlvbigpe3RoaXMuX2xpbmU9MH0sYXJlYUVuZDpmdW5jdGlvbigpe3RoaXMuX2xpbmU9TmFOfSxsaW5lU3RhcnQ6ZnVuY3Rpb24oKXt0aGlzLl94PVtdLHRoaXMuX3k9W119LGxpbmVFbmQ6ZnVuY3Rpb24oKXt2YXIgdD10aGlzLl94LGk9dGhpcy5feSxuPXQubGVuZ3RoO2lmKG4paWYodGhpcy5fbGluZT90aGlzLl9jb250ZXh0LmxpbmVUbyh0WzBdLGlbMF0pOnRoaXMuX2NvbnRleHQubW92ZVRvKHRbMF0saVswXSksMj09PW4pdGhpcy5fY29udGV4dC5saW5lVG8odFsxXSxpWzFdKTtlbHNlIGZvcih2YXIgZT1udCh0KSxzPW50KGkpLGg9MCxvPTE7bzxuOysraCwrK28pdGhpcy5fY29udGV4dC5iZXppZXJDdXJ2ZVRvKGVbMF1baF0sc1swXVtoXSxlWzFdW2hdLHNbMV1baF0sdFtvXSxpW29dKTsodGhpcy5fbGluZXx8MCE9PXRoaXMuX2xpbmUmJjE9PT1uKSYmdGhpcy5fY29udGV4dC5jbG9zZVBhdGgoKSx0aGlzLl9saW5lPTEtdGhpcy5fbGluZSx0aGlzLl94PXRoaXMuX3k9bnVsbH0scG9pbnQ6ZnVuY3Rpb24odCxpKXt0aGlzLl94LnB1c2goK3QpLHRoaXMuX3kucHVzaCgraSl9fSxzdC5wcm90b3R5cGU9e2FyZWFTdGFydDpmdW5jdGlvbigpe3RoaXMuX2xpbmU9MH0sYXJlYUVuZDpmdW5jdGlvbigpe3RoaXMuX2xpbmU9TmFOfSxsaW5lU3RhcnQ6ZnVuY3Rpb24oKXt0aGlzLl94PXRoaXMuX3k9TmFOLHRoaXMuX3BvaW50PTB9LGxpbmVFbmQ6ZnVuY3Rpb24oKXswPHRoaXMuX3QmJnRoaXMuX3Q8MSYmMj09PXRoaXMuX3BvaW50JiZ0aGlzLl9jb250ZXh0LmxpbmVUbyh0aGlzLl94LHRoaXMuX3kpLCh0aGlzLl9saW5lfHwwIT09dGhpcy5fbGluZSYmMT09PXRoaXMuX3BvaW50KSYmdGhpcy5fY29udGV4dC5jbG9zZVBhdGgoKSx0aGlzLl9saW5lPj0wJiYodGhpcy5fdD0xLXRoaXMuX3QsdGhpcy5fbGluZT0xLXRoaXMuX2xpbmUpfSxwb2ludDpmdW5jdGlvbih0LGkpe3N3aXRjaCh0PSt0LGk9K2ksdGhpcy5fcG9pbnQpe2Nhc2UgMDp0aGlzLl9wb2ludD0xLHRoaXMuX2xpbmU/dGhpcy5fY29udGV4dC5saW5lVG8odCxpKTp0aGlzLl9jb250ZXh0Lm1vdmVUbyh0LGkpO2JyZWFrO2Nhc2UgMTp0aGlzLl9wb2ludD0yO2RlZmF1bHQ6aWYodGhpcy5fdDw9MCl0aGlzLl9jb250ZXh0LmxpbmVUbyh0aGlzLl94LGkpLHRoaXMuX2NvbnRleHQubGluZVRvKHQsaSk7ZWxzZXt2YXIgbj10aGlzLl94KigxLXRoaXMuX3QpK3QqdGhpcy5fdDt0aGlzLl9jb250ZXh0LmxpbmVUbyhuLHRoaXMuX3kpLHRoaXMuX2NvbnRleHQubGluZVRvKG4saSl9fXRoaXMuX3g9dCx0aGlzLl95PWl9fTt2YXIgVXQ9QXJyYXkucHJvdG90eXBlLnNsaWNlO3QuYXJjPWwsdC5hcmVhPXYsdC5saW5lPXAsdC5waWU9TSx0LnJhZGlhbEFyZWE9ayx0LnJhZGlhbExpbmU9bSx0LnN5bWJvbD1OLHQuc3ltYm9scz1XdCx0LnN5bWJvbENpcmNsZT1rdCx0LnN5bWJvbENyb3NzPU50LHQuc3ltYm9sRGlhbW9uZD1BdCx0LnN5bWJvbFNxdWFyZT16dCx0LnN5bWJvbFN0YXI9UnQsdC5zeW1ib2xUcmlhbmdsZT1ZdCx0LnN5bWJvbFd5ZT1EdCx0LmN1cnZlQmFzaXNDbG9zZWQ9Qyx0LmN1cnZlQmFzaXNPcGVuPVIsdC5jdXJ2ZUJhc2lzPVAsdC5jdXJ2ZUJ1bmRsZT1WdCx0LmN1cnZlQ2FyZGluYWxDbG9zZWQ9R3QsdC5jdXJ2ZUNhcmRpbmFsT3Blbj1IdCx0LmN1cnZlQ2FyZGluYWw9RnQsdC5jdXJ2ZUNhdG11bGxSb21DbG9zZWQ9S3QsdC5jdXJ2ZUNhdG11bGxSb21PcGVuPVF0LHQuY3VydmVDYXRtdWxsUm9tPUp0LHQuY3VydmVMaW5lYXJDbG9zZWQ9Rix0LmN1cnZlTGluZWFyPWYsdC5jdXJ2ZU1vbm90b25lWD0kLHQuY3VydmVNb25vdG9uZVk9dHQsdC5jdXJ2ZU5hdHVyYWw9ZXQsdC5jdXJ2ZVN0ZXA9aHQsdC5jdXJ2ZVN0ZXBBZnRlcj1fdCx0LmN1cnZlU3RlcEJlZm9yZT1vdCx0LnN0YWNrPWx0LHQuc3RhY2tPZmZzZXRFeHBhbmQ9dXQsdC5zdGFja09mZnNldE5vbmU9YXQsdC5zdGFja09mZnNldFNpbGhvdWV0dGU9ZnQsdC5zdGFja09mZnNldFdpZ2dsZT14dCx0LnN0YWNrT3JkZXJBc2NlbmRpbmc9eXQsdC5zdGFja09yZGVyRGVzY2VuZGluZz12dCx0LnN0YWNrT3JkZXJJbnNpZGVPdXQ9ZHQsdC5zdGFja09yZGVyTm9uZT1ydCx0LnN0YWNrT3JkZXJSZXZlcnNlPVR0LE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KX0pOw=="></script>
<script src="data:application/x-javascript;base64,Ly8gaHR0cHM6Ly9kM2pzLm9yZy9kMy1heGlzLyBWZXJzaW9uIDEuMC4zLiBDb3B5cmlnaHQgMjAxNiBNaWtlIEJvc3RvY2suCiFmdW5jdGlvbih0LG4peyJvYmplY3QiPT10eXBlb2YgZXhwb3J0cyYmInVuZGVmaW5lZCIhPXR5cGVvZiBtb2R1bGU/bihleHBvcnRzKToiZnVuY3Rpb24iPT10eXBlb2YgZGVmaW5lJiZkZWZpbmUuYW1kP2RlZmluZShbImV4cG9ydHMiXSxuKTpuKHQuZDM9dC5kM3x8e30pfSh0aGlzLGZ1bmN0aW9uKHQpeyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBuKHQpe3JldHVybiB0fWZ1bmN0aW9uIGUodCxuLGUpe3ZhciByPXQoZSk7cmV0dXJuInRyYW5zbGF0ZSgiKyhpc0Zpbml0ZShyKT9yOm4oZSkpKyIsMCkifWZ1bmN0aW9uIHIodCxuLGUpe3ZhciByPXQoZSk7cmV0dXJuInRyYW5zbGF0ZSgwLCIrKGlzRmluaXRlKHIpP3I6bihlKSkrIikifWZ1bmN0aW9uIGkodCl7dmFyIG49dC5iYW5kd2lkdGgoKS8yO3JldHVybiB0LnJvdW5kKCkmJihuPU1hdGgucm91bmQobikpLGZ1bmN0aW9uKGUpe3JldHVybiB0KGUpK259fWZ1bmN0aW9uIGEoKXtyZXR1cm4hdGhpcy5fX2F4aXN9ZnVuY3Rpb24gbyh0LG8pe2Z1bmN0aW9uIHUodSl7dmFyIGYsXz1udWxsPT1sP28udGlja3M/by50aWNrcy5hcHBseShvLGMpOm8uZG9tYWluKCk6bCx2PW51bGw9PXM/by50aWNrRm9ybWF0P28udGlja0Zvcm1hdC5hcHBseShvLGMpOm46cyxGPU1hdGgubWF4KGcsMCkreSxNPXQ9PT1kfHx0PT09bT9lOnIsYj1vLnJhbmdlKCksej1iWzBdKy41LEE9YltiLmxlbmd0aC0xXSsuNSxWPShvLmJhbmR3aWR0aD9pOm4pKG8uY29weSgpKSxIPXUuc2VsZWN0aW9uP3Uuc2VsZWN0aW9uKCk6dSxTPUguc2VsZWN0QWxsKCIuZG9tYWluIikuZGF0YShbbnVsbF0pLGo9SC5zZWxlY3RBbGwoIi50aWNrIikuZGF0YShfLG8pLm9yZGVyKCksdz1qLmV4aXQoKSxOPWouZW50ZXIoKS5hcHBlbmQoImciKS5hdHRyKCJjbGFzcyIsInRpY2siKSxPPWouc2VsZWN0KCJsaW5lIiksUD1qLnNlbGVjdCgidGV4dCIpLEI9dD09PWR8fHQ9PT1oPy0xOjEsST10PT09aHx8dD09PXA/KGY9IngiLCJ5Iik6KGY9InkiLCJ4Iik7Uz1TLm1lcmdlKFMuZW50ZXIoKS5pbnNlcnQoInBhdGgiLCIudGljayIpLmF0dHIoImNsYXNzIiwiZG9tYWluIikuYXR0cigic3Ryb2tlIiwiIzAwMCIpKSxqPWoubWVyZ2UoTiksTz1PLm1lcmdlKE4uYXBwZW5kKCJsaW5lIikuYXR0cigic3Ryb2tlIiwiIzAwMCIpLmF0dHIoZisiMiIsQipnKS5hdHRyKEkrIjEiLC41KS5hdHRyKEkrIjIiLC41KSksUD1QLm1lcmdlKE4uYXBwZW5kKCJ0ZXh0IikuYXR0cigiZmlsbCIsIiMwMDAiKS5hdHRyKGYsQipGKS5hdHRyKEksLjUpLmF0dHIoImR5Iix0PT09ZD8iMGVtIjp0PT09bT8iMC43MWVtIjoiMC4zMmVtIikpLHUhPT1IJiYoUz1TLnRyYW5zaXRpb24odSksaj1qLnRyYW5zaXRpb24odSksTz1PLnRyYW5zaXRpb24odSksUD1QLnRyYW5zaXRpb24odSksdz13LnRyYW5zaXRpb24odSkuYXR0cigib3BhY2l0eSIseCkuYXR0cigidHJhbnNmb3JtIixmdW5jdGlvbih0KXtyZXR1cm4gTShWLHRoaXMucGFyZW50Tm9kZS5fX2F4aXN8fFYsdCl9KSxOLmF0dHIoIm9wYWNpdHkiLHgpLmF0dHIoInRyYW5zZm9ybSIsZnVuY3Rpb24odCl7cmV0dXJuIE0odGhpcy5wYXJlbnROb2RlLl9fYXhpc3x8VixWLHQpfSkpLHcucmVtb3ZlKCksUy5hdHRyKCJkIix0PT09aHx8dD09cD8iTSIrQiprKyIsIit6KyJIMC41ViIrQSsiSCIrQiprOiJNIit6KyIsIitCKmsrIlYwLjVIIitBKyJWIitCKmspLGouYXR0cigib3BhY2l0eSIsMSkuYXR0cigidHJhbnNmb3JtIixmdW5jdGlvbih0KXtyZXR1cm4gTShWLFYsdCl9KSxPLmF0dHIoZisiMiIsQipnKSxQLmF0dHIoZixCKkYpLnRleHQodiksSC5maWx0ZXIoYSkuYXR0cigiZmlsbCIsIm5vbmUiKS5hdHRyKCJmb250LXNpemUiLDEwKS5hdHRyKCJmb250LWZhbWlseSIsInNhbnMtc2VyaWYiKS5hdHRyKCJ0ZXh0LWFuY2hvciIsdD09PXA/InN0YXJ0Ijp0PT09aD8iZW5kIjoibWlkZGxlIiksSC5lYWNoKGZ1bmN0aW9uKCl7dGhpcy5fX2F4aXM9Vn0pfXZhciBjPVtdLGw9bnVsbCxzPW51bGwsZz02LGs9Nix5PTM7cmV0dXJuIHUuc2NhbGU9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG89dCx1KTpvfSx1LnRpY2tzPWZ1bmN0aW9uKCl7cmV0dXJuIGM9Zi5jYWxsKGFyZ3VtZW50cyksdX0sdS50aWNrQXJndW1lbnRzPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhjPW51bGw9PXQ/W106Zi5jYWxsKHQpLHUpOmMuc2xpY2UoKX0sdS50aWNrVmFsdWVzPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhsPW51bGw9PXQ/bnVsbDpmLmNhbGwodCksdSk6bCYmbC5zbGljZSgpfSx1LnRpY2tGb3JtYXQ9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHM9dCx1KTpzfSx1LnRpY2tTaXplPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhnPWs9K3QsdSk6Z30sdS50aWNrU2l6ZUlubmVyPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhnPSt0LHUpOmd9LHUudGlja1NpemVPdXRlcj1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oaz0rdCx1KTprfSx1LnRpY2tQYWRkaW5nPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh5PSt0LHUpOnl9LHV9ZnVuY3Rpb24gdSh0KXtyZXR1cm4gbyhkLHQpfWZ1bmN0aW9uIGModCl7cmV0dXJuIG8ocCx0KX1mdW5jdGlvbiBsKHQpe3JldHVybiBvKG0sdCl9ZnVuY3Rpb24gcyh0KXtyZXR1cm4gbyhoLHQpfXZhciBmPUFycmF5LnByb3RvdHlwZS5zbGljZSxkPTEscD0yLG09MyxoPTQseD0xZS02O3QuYXhpc1RvcD11LHQuYXhpc1JpZ2h0PWMsdC5heGlzQm90dG9tPWwsdC5heGlzTGVmdD1zLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KX0pOw=="></script>
<script src="data:application/x-javascript;base64,IWZ1bmN0aW9uIGEoYixjLGQpe2Z1bmN0aW9uIGUoZyxoKXtpZighY1tnXSl7aWYoIWJbZ10pe3ZhciBpPSJmdW5jdGlvbiI9PXR5cGVvZiByZXF1aXJlJiZyZXF1aXJlO2lmKCFoJiZpKXJldHVybiBpKGcsITApO2lmKGYpcmV0dXJuIGYoZywhMCk7dmFyIGo9bmV3IEVycm9yKCJDYW5ub3QgZmluZCBtb2R1bGUgJyIrZysiJyIpO3Rocm93IGouY29kZT0iTU9EVUxFX05PVF9GT1VORCIsan12YXIgaz1jW2ddPXtleHBvcnRzOnt9fTtiW2ddWzBdLmNhbGwoay5leHBvcnRzLGZ1bmN0aW9uKGEpe3ZhciBjPWJbZ11bMV1bYV07cmV0dXJuIGUoYz9jOmEpfSxrLGsuZXhwb3J0cyxhLGIsYyxkKX1yZXR1cm4gY1tnXS5leHBvcnRzfWZvcih2YXIgZj0iZnVuY3Rpb24iPT10eXBlb2YgcmVxdWlyZSYmcmVxdWlyZSxnPTA7ZzxkLmxlbmd0aDtnKyspZShkW2ddKTtyZXR1cm4gZX0oezE6W2Z1bmN0aW9uKGEsYixjKXshZnVuY3Rpb24oYSxkKXsib2JqZWN0Ij09dHlwZW9mIGMmJiJ1bmRlZmluZWQiIT10eXBlb2YgYj9kKGMpOiJmdW5jdGlvbiI9PXR5cGVvZiBkZWZpbmUmJmRlZmluZS5hbWQ/ZGVmaW5lKFsiZXhwb3J0cyJdLGQpOmQoYS5kMz1hLmQzfHx7fSl9KHRoaXMsZnVuY3Rpb24oYSl7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIGIoYSxiKXtyZXR1cm4gYTxiPy0xOmE+Yj8xOmE+PWI/MDpOYU59ZnVuY3Rpb24gYyhhKXtyZXR1cm4gMT09PWEubGVuZ3RoJiYoYT1kKGEpKSx7bGVmdDpmdW5jdGlvbihiLGMsZCxlKXtmb3IobnVsbD09ZCYmKGQ9MCksbnVsbD09ZSYmKGU9Yi5sZW5ndGgpO2Q8ZTspe3ZhciBmPWQrZT4+PjE7YShiW2ZdLGMpPDA/ZD1mKzE6ZT1mfXJldHVybiBkfSxyaWdodDpmdW5jdGlvbihiLGMsZCxlKXtmb3IobnVsbD09ZCYmKGQ9MCksbnVsbD09ZSYmKGU9Yi5sZW5ndGgpO2Q8ZTspe3ZhciBmPWQrZT4+PjE7YShiW2ZdLGMpPjA/ZT1mOmQ9ZisxfXJldHVybiBkfX19ZnVuY3Rpb24gZChhKXtyZXR1cm4gZnVuY3Rpb24oYyxkKXtyZXR1cm4gYihhKGMpLGQpfX1mdW5jdGlvbiBlKGEsYil7cmV0dXJuIGI8YT8tMTpiPmE/MTpiPj1hPzA6TmFOfWZ1bmN0aW9uIGYoYSl7cmV0dXJuIG51bGw9PT1hP05hTjorYX1mdW5jdGlvbiBnKGEsYil7dmFyIGMsZCxlPWEubGVuZ3RoLGc9MCxoPTAsaT0tMSxqPTA7aWYobnVsbD09Yilmb3IoOysraTxlOylpc05hTihjPWYoYVtpXSkpfHwoZD1jLWcsZys9ZC8rK2osaCs9ZCooYy1nKSk7ZWxzZSBmb3IoOysraTxlOylpc05hTihjPWYoYihhW2ldLGksYSkpKXx8KGQ9Yy1nLGcrPWQvKytqLGgrPWQqKGMtZykpO2lmKGo+MSlyZXR1cm4gaC8oai0xKX1mdW5jdGlvbiBoKGEsYil7dmFyIGM9ZyhhLGIpO3JldHVybiBjP01hdGguc3FydChjKTpjfWZ1bmN0aW9uIGkoYSxiKXt2YXIgYyxkLGUsZj0tMSxnPWEubGVuZ3RoO2lmKG51bGw9PWIpe2Zvcig7KytmPGc7KWlmKG51bGwhPShkPWFbZl0pJiZkPj1kKXtjPWU9ZDticmVha31mb3IoOysrZjxnOyludWxsIT0oZD1hW2ZdKSYmKGM+ZCYmKGM9ZCksZTxkJiYoZT1kKSl9ZWxzZXtmb3IoOysrZjxnOylpZihudWxsIT0oZD1iKGFbZl0sZixhKSkmJmQ+PWQpe2M9ZT1kO2JyZWFrfWZvcig7KytmPGc7KW51bGwhPShkPWIoYVtmXSxmLGEpKSYmKGM+ZCYmKGM9ZCksZTxkJiYoZT1kKSl9cmV0dXJuW2MsZV19ZnVuY3Rpb24gaihhKXtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gYX19ZnVuY3Rpb24gayhhKXtyZXR1cm4gYX1mdW5jdGlvbiBsKGEsYixjKXthPSthLGI9K2IsYz0oZT1hcmd1bWVudHMubGVuZ3RoKTwyPyhiPWEsYT0wLDEpOmU8Mz8xOitjO2Zvcih2YXIgZD0tMSxlPTB8TWF0aC5tYXgoMCxNYXRoLmNlaWwoKGItYSkvYykpLGY9bmV3IEFycmF5KGUpOysrZDxlOylmW2RdPWErZCpjO3JldHVybiBmfWZ1bmN0aW9uIG0oYSxiLGMpe3ZhciBkPW4oYSxiLGMpO3JldHVybiBsKE1hdGguY2VpbChhL2QpKmQsTWF0aC5mbG9vcihiL2QpKmQrZC8yLGQpfWZ1bmN0aW9uIG4oYSxiLGMpe3ZhciBkPU1hdGguYWJzKGItYSkvTWF0aC5tYXgoMCxjKSxlPU1hdGgucG93KDEwLE1hdGguZmxvb3IoTWF0aC5sb2coZCkvTWF0aC5MTjEwKSksZj1kL2U7cmV0dXJuIGY+PU0/ZSo9MTA6Zj49Tj9lKj01OmY+PU8mJihlKj0yKSxiPGE/LWU6ZX1mdW5jdGlvbiBvKGEpe3JldHVybiBNYXRoLmNlaWwoTWF0aC5sb2coYS5sZW5ndGgpL01hdGguTE4yKSsxfWZ1bmN0aW9uIHAoKXtmdW5jdGlvbiBhKGEpe3ZhciBlLGYsZz1hLmxlbmd0aCxoPW5ldyBBcnJheShnKTtmb3IoZT0wO2U8ZzsrK2UpaFtlXT1iKGFbZV0sZSxhKTt2YXIgaT1jKGgpLGo9aVswXSxrPWlbMV0sbD1kKGgsaixrKTtBcnJheS5pc0FycmF5KGwpfHwobD1tKGosayxsKSk7Zm9yKHZhciBuPWwubGVuZ3RoO2xbMF08PWo7KWwuc2hpZnQoKSwtLW47Zm9yKDtsW24tMV0+PWs7KWwucG9wKCksLS1uO3ZhciBvLHA9bmV3IEFycmF5KG4rMSk7Zm9yKGU9MDtlPD1uOysrZSlvPXBbZV09W10sby54MD1lPjA/bFtlLTFdOmosby54MT1lPG4/bFtlXTprO2ZvcihlPTA7ZTxnOysrZSlmPWhbZV0sajw9ZiYmZjw9ayYmcFtIKGwsZiwwLG4pXS5wdXNoKGFbZV0pO3JldHVybiBwfXZhciBiPWssYz1pLGQ9bztyZXR1cm4gYS52YWx1ZT1mdW5jdGlvbihjKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oYj0iZnVuY3Rpb24iPT10eXBlb2YgYz9jOmooYyksYSk6Yn0sYS5kb21haW49ZnVuY3Rpb24oYil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGM9ImZ1bmN0aW9uIj09dHlwZW9mIGI/YjpqKFtiWzBdLGJbMV1dKSxhKTpjfSxhLnRocmVzaG9sZHM9ZnVuY3Rpb24oYil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGQ9ImZ1bmN0aW9uIj09dHlwZW9mIGI/YjpqKEFycmF5LmlzQXJyYXkoYik/Sy5jYWxsKGIpOmIpLGEpOmR9LGF9ZnVuY3Rpb24gcShhLGIsYyl7aWYobnVsbD09YyYmKGM9ZiksZD1hLmxlbmd0aCl7aWYoKGI9K2IpPD0wfHxkPDIpcmV0dXJuK2MoYVswXSwwLGEpO2lmKGI+PTEpcmV0dXJuK2MoYVtkLTFdLGQtMSxhKTt2YXIgZCxlPShkLTEpKmIsZz1NYXRoLmZsb29yKGUpLGg9K2MoYVtnXSxnLGEpLGk9K2MoYVtnKzFdLGcrMSxhKTtyZXR1cm4gaCsoaS1oKSooZS1nKX19ZnVuY3Rpb24gcihhLGMsZCl7cmV0dXJuIGE9TC5jYWxsKGEsZikuc29ydChiKSxNYXRoLmNlaWwoKGQtYykvKDIqKHEoYSwuNzUpLXEoYSwuMjUpKSpNYXRoLnBvdyhhLmxlbmd0aCwtMS8zKSkpfWZ1bmN0aW9uIHMoYSxiLGMpe3JldHVybiBNYXRoLmNlaWwoKGMtYikvKDMuNSpoKGEpKk1hdGgucG93KGEubGVuZ3RoLC0xLzMpKSl9ZnVuY3Rpb24gdChhLGIpe3ZhciBjLGQsZT0tMSxmPWEubGVuZ3RoO2lmKG51bGw9PWIpe2Zvcig7KytlPGY7KWlmKG51bGwhPShkPWFbZV0pJiZkPj1kKXtjPWQ7YnJlYWt9Zm9yKDsrK2U8ZjspbnVsbCE9KGQ9YVtlXSkmJmQ+YyYmKGM9ZCl9ZWxzZXtmb3IoOysrZTxmOylpZihudWxsIT0oZD1iKGFbZV0sZSxhKSkmJmQ+PWQpe2M9ZDticmVha31mb3IoOysrZTxmOyludWxsIT0oZD1iKGFbZV0sZSxhKSkmJmQ+YyYmKGM9ZCl9cmV0dXJuIGN9ZnVuY3Rpb24gdShhLGIpe3ZhciBjLGQ9MCxlPWEubGVuZ3RoLGc9LTEsaD1lO2lmKG51bGw9PWIpZm9yKDsrK2c8ZTspaXNOYU4oYz1mKGFbZ10pKT8tLWg6ZCs9YztlbHNlIGZvcig7KytnPGU7KWlzTmFOKGM9ZihiKGFbZ10sZyxhKSkpPy0taDpkKz1jO2lmKGgpcmV0dXJuIGQvaH1mdW5jdGlvbiB2KGEsYyl7dmFyIGQsZT1bXSxnPWEubGVuZ3RoLGg9LTE7aWYobnVsbD09Yylmb3IoOysraDxnOylpc05hTihkPWYoYVtoXSkpfHxlLnB1c2goZCk7ZWxzZSBmb3IoOysraDxnOylpc05hTihkPWYoYyhhW2hdLGgsYSkpKXx8ZS5wdXNoKGQpO3JldHVybiBxKGUuc29ydChiKSwuNSl9ZnVuY3Rpb24gdyhhKXtmb3IodmFyIGIsYyxkLGU9YS5sZW5ndGgsZj0tMSxnPTA7KytmPGU7KWcrPWFbZl0ubGVuZ3RoO2ZvcihjPW5ldyBBcnJheShnKTstLWU+PTA7KWZvcihkPWFbZV0sYj1kLmxlbmd0aDstLWI+PTA7KWNbLS1nXT1kW2JdO3JldHVybiBjfWZ1bmN0aW9uIHgoYSxiKXt2YXIgYyxkLGU9LTEsZj1hLmxlbmd0aDtpZihudWxsPT1iKXtmb3IoOysrZTxmOylpZihudWxsIT0oZD1hW2VdKSYmZD49ZCl7Yz1kO2JyZWFrfWZvcig7KytlPGY7KW51bGwhPShkPWFbZV0pJiZjPmQmJihjPWQpfWVsc2V7Zm9yKDsrK2U8ZjspaWYobnVsbCE9KGQ9YihhW2VdLGUsYSkpJiZkPj1kKXtjPWQ7YnJlYWt9Zm9yKDsrK2U8ZjspbnVsbCE9KGQ9YihhW2VdLGUsYSkpJiZjPmQmJihjPWQpfXJldHVybiBjfWZ1bmN0aW9uIHkoYSl7Zm9yKHZhciBiPTAsYz1hLmxlbmd0aC0xLGQ9YVswXSxlPW5ldyBBcnJheShjPDA/MDpjKTtiPGM7KWVbYl09W2QsZD1hWysrYl1dO3JldHVybiBlfWZ1bmN0aW9uIHooYSxiKXtmb3IodmFyIGM9Yi5sZW5ndGgsZD1uZXcgQXJyYXkoYyk7Yy0tOylkW2NdPWFbYltjXV07cmV0dXJuIGR9ZnVuY3Rpb24gQShhLGMpe2lmKGQ9YS5sZW5ndGgpe3ZhciBkLGUsZj0wLGc9MCxoPWFbZ107Zm9yKGN8fChjPWIpOysrZjxkOykoYyhlPWFbZl0saCk8MHx8MCE9PWMoaCxoKSkmJihoPWUsZz1mKTtyZXR1cm4gMD09PWMoaCxoKT9nOnZvaWQgMH19ZnVuY3Rpb24gQihhLGIsYyl7Zm9yKHZhciBkLGUsZj0obnVsbD09Yz9hLmxlbmd0aDpjKS0oYj1udWxsPT1iPzA6K2IpO2Y7KWU9TWF0aC5yYW5kb20oKSpmLS18MCxkPWFbZitiXSxhW2YrYl09YVtlK2JdLGFbZStiXT1kO3JldHVybiBhfWZ1bmN0aW9uIEMoYSxiKXt2YXIgYyxkPTAsZT1hLmxlbmd0aCxmPS0xO2lmKG51bGw9PWIpZm9yKDsrK2Y8ZTspKGM9K2FbZl0pJiYoZCs9Yyk7ZWxzZSBmb3IoOysrZjxlOykoYz0rYihhW2ZdLGYsYSkpJiYoZCs9Yyk7cmV0dXJuIGR9ZnVuY3Rpb24gRChhKXtpZighKGU9YS5sZW5ndGgpKXJldHVybltdO2Zvcih2YXIgYj0tMSxjPXgoYSxFKSxkPW5ldyBBcnJheShjKTsrK2I8YzspZm9yKHZhciBlLGY9LTEsZz1kW2JdPW5ldyBBcnJheShlKTsrK2Y8ZTspZ1tmXT1hW2ZdW2JdO3JldHVybiBkfWZ1bmN0aW9uIEUoYSl7cmV0dXJuIGEubGVuZ3RofWZ1bmN0aW9uIEYoKXtyZXR1cm4gRChhcmd1bWVudHMpfXZhciBHPWMoYiksSD1HLnJpZ2h0LEk9Ry5sZWZ0LEo9QXJyYXkucHJvdG90eXBlLEs9Si5zbGljZSxMPUoubWFwLE09TWF0aC5zcXJ0KDUwKSxOPU1hdGguc3FydCgxMCksTz1NYXRoLnNxcnQoMik7YS5iaXNlY3Q9SCxhLmJpc2VjdFJpZ2h0PUgsYS5iaXNlY3RMZWZ0PUksYS5hc2NlbmRpbmc9YixhLmJpc2VjdG9yPWMsYS5kZXNjZW5kaW5nPWUsYS5kZXZpYXRpb249aCxhLmV4dGVudD1pLGEuaGlzdG9ncmFtPXAsYS50aHJlc2hvbGRGcmVlZG1hbkRpYWNvbmlzPXIsYS50aHJlc2hvbGRTY290dD1zLGEudGhyZXNob2xkU3R1cmdlcz1vLGEubWF4PXQsYS5tZWFuPXUsYS5tZWRpYW49dixhLm1lcmdlPXcsYS5taW49eCxhLnBhaXJzPXksYS5wZXJtdXRlPXosYS5xdWFudGlsZT1xLGEucmFuZ2U9bCxhLnNjYW49QSxhLnNodWZmbGU9QixhLnN1bT1DLGEudGlja3M9bSxhLnRpY2tTdGVwPW4sYS50cmFuc3Bvc2U9RCxhLnZhcmlhbmNlPWcsYS56aXA9RixPYmplY3QuZGVmaW5lUHJvcGVydHkoYSwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSl9KX0se31dLDI6W2Z1bmN0aW9uKGEsYixjKXshZnVuY3Rpb24oYSxkKXsib2JqZWN0Ij09dHlwZW9mIGMmJiJ1bmRlZmluZWQiIT10eXBlb2YgYj9kKGMpOiJmdW5jdGlvbiI9PXR5cGVvZiBkZWZpbmUmJmRlZmluZS5hbWQ/ZGVmaW5lKFsiZXhwb3J0cyJdLGQpOmQoYS5kMz1hLmQzfHx7fSl9KHRoaXMsZnVuY3Rpb24oYSl7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIGIoKXt9ZnVuY3Rpb24gYyhhLGMpe3ZhciBkPW5ldyBiO2lmKGEgaW5zdGFuY2VvZiBiKWEuZWFjaChmdW5jdGlvbihhLGIpe2Quc2V0KGIsYSl9KTtlbHNlIGlmKEFycmF5LmlzQXJyYXkoYSkpe3ZhciBlLGY9LTEsZz1hLmxlbmd0aDtpZihudWxsPT1jKWZvcig7KytmPGc7KWQuc2V0KGYsYVtmXSk7ZWxzZSBmb3IoOysrZjxnOylkLnNldChjKGU9YVtmXSxmLGEpLGUpfWVsc2UgaWYoYSlmb3IodmFyIGggaW4gYSlkLnNldChoLGFbaF0pO3JldHVybiBkfWZ1bmN0aW9uIGQoKXtmdW5jdGlvbiBhKGIsZSxmLGcpe2lmKGU+PWsubGVuZ3RoKXJldHVybiBudWxsIT1pP2koYik6bnVsbCE9ZD9iLnNvcnQoZCk6Yjtmb3IodmFyIGgsaixsLG09LTEsbj1iLmxlbmd0aCxvPWtbZSsrXSxwPWMoKSxxPWYoKTsrK208bjspKGw9cC5nZXQoaD1vKGo9YlttXSkrIiIpKT9sLnB1c2goaik6cC5zZXQoaCxbal0pO3JldHVybiBwLmVhY2goZnVuY3Rpb24oYixjKXtnKHEsYyxhKGIsZSxmLGcpKX0pLHF9ZnVuY3Rpb24gYihhLGMpe2lmKCsrYz5rLmxlbmd0aClyZXR1cm4gYTt2YXIgZCxlPWxbYy0xXTtyZXR1cm4gbnVsbCE9aSYmYz49ay5sZW5ndGg/ZD1hLmVudHJpZXMoKTooZD1bXSxhLmVhY2goZnVuY3Rpb24oYSxlKXtkLnB1c2goe2tleTplLHZhbHVlczpiKGEsYyl9KX0pKSxudWxsIT1lP2Quc29ydChmdW5jdGlvbihhLGIpe3JldHVybiBlKGEua2V5LGIua2V5KX0pOmR9dmFyIGQsaSxqLGs9W10sbD1bXTtyZXR1cm4gaj17b2JqZWN0OmZ1bmN0aW9uKGIpe3JldHVybiBhKGIsMCxlLGYpfSxtYXA6ZnVuY3Rpb24oYil7cmV0dXJuIGEoYiwwLGcsaCl9LGVudHJpZXM6ZnVuY3Rpb24oYyl7cmV0dXJuIGIoYShjLDAsZyxoKSwwKX0sa2V5OmZ1bmN0aW9uKGEpe3JldHVybiBrLnB1c2goYSksan0sc29ydEtleXM6ZnVuY3Rpb24oYSl7cmV0dXJuIGxbay5sZW5ndGgtMV09YSxqfSxzb3J0VmFsdWVzOmZ1bmN0aW9uKGEpe3JldHVybiBkPWEsan0scm9sbHVwOmZ1bmN0aW9uKGEpe3JldHVybiBpPWEsan19fWZ1bmN0aW9uIGUoKXtyZXR1cm57fX1mdW5jdGlvbiBmKGEsYixjKXthW2JdPWN9ZnVuY3Rpb24gZygpe3JldHVybiBjKCl9ZnVuY3Rpb24gaChhLGIsYyl7YS5zZXQoYixjKX1mdW5jdGlvbiBpKCl7fWZ1bmN0aW9uIGooYSxiKXt2YXIgYz1uZXcgaTtpZihhIGluc3RhbmNlb2YgaSlhLmVhY2goZnVuY3Rpb24oYSl7Yy5hZGQoYSl9KTtlbHNlIGlmKGEpe3ZhciBkPS0xLGU9YS5sZW5ndGg7aWYobnVsbD09Yilmb3IoOysrZDxlOyljLmFkZChhW2RdKTtlbHNlIGZvcig7KytkPGU7KWMuYWRkKGIoYVtkXSxkLGEpKX1yZXR1cm4gY31mdW5jdGlvbiBrKGEpe3ZhciBiPVtdO2Zvcih2YXIgYyBpbiBhKWIucHVzaChjKTtyZXR1cm4gYn1mdW5jdGlvbiBsKGEpe3ZhciBiPVtdO2Zvcih2YXIgYyBpbiBhKWIucHVzaChhW2NdKTtyZXR1cm4gYn1mdW5jdGlvbiBtKGEpe3ZhciBiPVtdO2Zvcih2YXIgYyBpbiBhKWIucHVzaCh7a2V5OmMsdmFsdWU6YVtjXX0pO3JldHVybiBifXZhciBuPSIkIjtiLnByb3RvdHlwZT1jLnByb3RvdHlwZT17Y29uc3RydWN0b3I6YixoYXM6ZnVuY3Rpb24oYSl7cmV0dXJuIG4rYSBpbiB0aGlzfSxnZXQ6ZnVuY3Rpb24oYSl7cmV0dXJuIHRoaXNbbithXX0sc2V0OmZ1bmN0aW9uKGEsYil7cmV0dXJuIHRoaXNbbithXT1iLHRoaXN9LHJlbW92ZTpmdW5jdGlvbihhKXt2YXIgYj1uK2E7cmV0dXJuIGIgaW4gdGhpcyYmZGVsZXRlIHRoaXNbYl19LGNsZWFyOmZ1bmN0aW9uKCl7Zm9yKHZhciBhIGluIHRoaXMpYVswXT09PW4mJmRlbGV0ZSB0aGlzW2FdfSxrZXlzOmZ1bmN0aW9uKCl7dmFyIGE9W107Zm9yKHZhciBiIGluIHRoaXMpYlswXT09PW4mJmEucHVzaChiLnNsaWNlKDEpKTtyZXR1cm4gYX0sdmFsdWVzOmZ1bmN0aW9uKCl7dmFyIGE9W107Zm9yKHZhciBiIGluIHRoaXMpYlswXT09PW4mJmEucHVzaCh0aGlzW2JdKTtyZXR1cm4gYX0sZW50cmllczpmdW5jdGlvbigpe3ZhciBhPVtdO2Zvcih2YXIgYiBpbiB0aGlzKWJbMF09PT1uJiZhLnB1c2goe2tleTpiLnNsaWNlKDEpLHZhbHVlOnRoaXNbYl19KTtyZXR1cm4gYX0sc2l6ZTpmdW5jdGlvbigpe3ZhciBhPTA7Zm9yKHZhciBiIGluIHRoaXMpYlswXT09PW4mJisrYTtyZXR1cm4gYX0sZW1wdHk6ZnVuY3Rpb24oKXtmb3IodmFyIGEgaW4gdGhpcylpZihhWzBdPT09bilyZXR1cm4hMTtyZXR1cm4hMH0sZWFjaDpmdW5jdGlvbihhKXtmb3IodmFyIGIgaW4gdGhpcyliWzBdPT09biYmYSh0aGlzW2JdLGIuc2xpY2UoMSksdGhpcyl9fTt2YXIgbz1jLnByb3RvdHlwZTtpLnByb3RvdHlwZT1qLnByb3RvdHlwZT17Y29uc3RydWN0b3I6aSxoYXM6by5oYXMsYWRkOmZ1bmN0aW9uKGEpe3JldHVybiBhKz0iIix0aGlzW24rYV09YSx0aGlzfSxyZW1vdmU6by5yZW1vdmUsY2xlYXI6by5jbGVhcix2YWx1ZXM6by5rZXlzLHNpemU6by5zaXplLGVtcHR5Om8uZW1wdHksZWFjaDpvLmVhY2h9LGEubmVzdD1kLGEuc2V0PWosYS5tYXA9YyxhLmtleXM9ayxhLnZhbHVlcz1sLGEuZW50cmllcz1tLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShhLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KX0pfSx7fV0sMzpbZnVuY3Rpb24oYSxiLGMpeyFmdW5jdGlvbihhLGQpeyJvYmplY3QiPT10eXBlb2YgYyYmInVuZGVmaW5lZCIhPXR5cGVvZiBiP2QoYyk6ImZ1bmN0aW9uIj09dHlwZW9mIGRlZmluZSYmZGVmaW5lLmFtZD9kZWZpbmUoWyJleHBvcnRzIl0sZCk6ZChhLmQzPWEuZDN8fHt9KX0odGhpcyxmdW5jdGlvbihhKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gYihhLGIsYyl7YS5wcm90b3R5cGU9Yi5wcm90b3R5cGU9YyxjLmNvbnN0cnVjdG9yPWF9ZnVuY3Rpb24gYyhhLGIpe3ZhciBjPU9iamVjdC5jcmVhdGUoYS5wcm90b3R5cGUpO2Zvcih2YXIgZCBpbiBiKWNbZF09YltkXTtyZXR1cm4gY31mdW5jdGlvbiBkKCl7fWZ1bmN0aW9uIGUoYSl7dmFyIGI7cmV0dXJuIGE9KGErIiIpLnRyaW0oKS50b0xvd2VyQ2FzZSgpLChiPUUuZXhlYyhhKSk/KGI9cGFyc2VJbnQoYlsxXSwxNiksbmV3IGooYj4+OCYxNXxiPj40JjI0MCxiPj40JjE1fDI0MCZiLCgxNSZiKTw8NHwxNSZiLDEpKTooYj1GLmV4ZWMoYSkpP2YocGFyc2VJbnQoYlsxXSwxNikpOihiPUcuZXhlYyhhKSk/bmV3IGooYlsxXSxiWzJdLGJbM10sMSk6KGI9SC5leGVjKGEpKT9uZXcgaigyNTUqYlsxXS8xMDAsMjU1KmJbMl0vMTAwLDI1NSpiWzNdLzEwMCwxKTooYj1JLmV4ZWMoYSkpP2coYlsxXSxiWzJdLGJbM10sYls0XSk6KGI9Si5leGVjKGEpKT9nKDI1NSpiWzFdLzEwMCwyNTUqYlsyXS8xMDAsMjU1KmJbM10vMTAwLGJbNF0pOihiPUsuZXhlYyhhKSk/ayhiWzFdLGJbMl0vMTAwLGJbM10vMTAwLDEpOihiPUwuZXhlYyhhKSk/ayhiWzFdLGJbMl0vMTAwLGJbM10vMTAwLGJbNF0pOk0uaGFzT3duUHJvcGVydHkoYSk/ZihNW2FdKToidHJhbnNwYXJlbnQiPT09YT9uZXcgaihOYU4sTmFOLE5hTiwwKTpudWxsfWZ1bmN0aW9uIGYoYSl7cmV0dXJuIG5ldyBqKGE+PjE2JjI1NSxhPj44JjI1NSwyNTUmYSwxKX1mdW5jdGlvbiBnKGEsYixjLGQpe3JldHVybiBkPD0wJiYoYT1iPWM9TmFOKSxuZXcgaihhLGIsYyxkKX1mdW5jdGlvbiBoKGEpe3JldHVybiBhIGluc3RhbmNlb2YgZHx8KGE9ZShhKSksYT8oYT1hLnJnYigpLG5ldyBqKGEucixhLmcsYS5iLGEub3BhY2l0eSkpOm5ldyBqfWZ1bmN0aW9uIGkoYSxiLGMsZCl7cmV0dXJuIDE9PT1hcmd1bWVudHMubGVuZ3RoP2goYSk6bmV3IGooYSxiLGMsbnVsbD09ZD8xOmQpfWZ1bmN0aW9uIGooYSxiLGMsZCl7dGhpcy5yPSthLHRoaXMuZz0rYix0aGlzLmI9K2MsdGhpcy5vcGFjaXR5PStkfWZ1bmN0aW9uIGsoYSxiLGMsZCl7cmV0dXJuIGQ8PTA/YT1iPWM9TmFOOmM8PTB8fGM+PTE/YT1iPU5hTjpiPD0wJiYoYT1OYU4pLG5ldyBuKGEsYixjLGQpfWZ1bmN0aW9uIGwoYSl7aWYoYSBpbnN0YW5jZW9mIG4pcmV0dXJuIG5ldyBuKGEuaCxhLnMsYS5sLGEub3BhY2l0eSk7aWYoYSBpbnN0YW5jZW9mIGR8fChhPWUoYSkpLCFhKXJldHVybiBuZXcgbjtpZihhIGluc3RhbmNlb2YgbilyZXR1cm4gYTthPWEucmdiKCk7dmFyIGI9YS5yLzI1NSxjPWEuZy8yNTUsZj1hLmIvMjU1LGc9TWF0aC5taW4oYixjLGYpLGg9TWF0aC5tYXgoYixjLGYpLGk9TmFOLGo9aC1nLGs9KGgrZykvMjtyZXR1cm4gaj8oaT1iPT09aD8oYy1mKS9qKzYqKGM8Zik6Yz09PWg/KGYtYikvaisyOihiLWMpL2orNCxqLz1rPC41P2grZzoyLWgtZyxpKj02MCk6aj1rPjAmJms8MT8wOmksbmV3IG4oaSxqLGssYS5vcGFjaXR5KX1mdW5jdGlvbiBtKGEsYixjLGQpe3JldHVybiAxPT09YXJndW1lbnRzLmxlbmd0aD9sKGEpOm5ldyBuKGEsYixjLG51bGw9PWQ/MTpkKX1mdW5jdGlvbiBuKGEsYixjLGQpe3RoaXMuaD0rYSx0aGlzLnM9K2IsdGhpcy5sPStjLHRoaXMub3BhY2l0eT0rZH1mdW5jdGlvbiBvKGEsYixjKXtyZXR1cm4gMjU1KihhPDYwP2IrKGMtYikqYS82MDphPDE4MD9jOmE8MjQwP2IrKGMtYikqKDI0MC1hKS82MDpiKX1mdW5jdGlvbiBwKGEpe2lmKGEgaW5zdGFuY2VvZiByKXJldHVybiBuZXcgcihhLmwsYS5hLGEuYixhLm9wYWNpdHkpO2lmKGEgaW5zdGFuY2VvZiB5KXt2YXIgYj1hLmgqTjtyZXR1cm4gbmV3IHIoYS5sLE1hdGguY29zKGIpKmEuYyxNYXRoLnNpbihiKSphLmMsYS5vcGFjaXR5KX1hIGluc3RhbmNlb2Yganx8KGE9aChhKSk7dmFyIGM9dihhLnIpLGQ9dihhLmcpLGU9dihhLmIpLGY9cygoLjQxMjQ1NjQqYysuMzU3NTc2MSpkKy4xODA0Mzc1KmUpL1EpLGc9cygoLjIxMjY3MjkqYysuNzE1MTUyMipkKy4wNzIxNzUqZSkvUiksaT1zKCguMDE5MzMzOSpjKy4xMTkxOTIqZCsuOTUwMzA0MSplKS9TKTtyZXR1cm4gbmV3IHIoMTE2KmctMTYsNTAwKihmLWcpLDIwMCooZy1pKSxhLm9wYWNpdHkpfWZ1bmN0aW9uIHEoYSxiLGMsZCl7cmV0dXJuIDE9PT1hcmd1bWVudHMubGVuZ3RoP3AoYSk6bmV3IHIoYSxiLGMsbnVsbD09ZD8xOmQpfWZ1bmN0aW9uIHIoYSxiLGMsZCl7dGhpcy5sPSthLHRoaXMuYT0rYix0aGlzLmI9K2MsdGhpcy5vcGFjaXR5PStkfWZ1bmN0aW9uIHMoYSl7cmV0dXJuIGE+Vz9NYXRoLnBvdyhhLDEvMyk6YS9WK1R9ZnVuY3Rpb24gdChhKXtyZXR1cm4gYT5VP2EqYSphOlYqKGEtVCl9ZnVuY3Rpb24gdShhKXtyZXR1cm4gMjU1KihhPD0uMDAzMTMwOD8xMi45MiphOjEuMDU1Kk1hdGgucG93KGEsMS8yLjQpLS4wNTUpfWZ1bmN0aW9uIHYoYSl7cmV0dXJuKGEvPTI1NSk8PS4wNDA0NT9hLzEyLjkyOk1hdGgucG93KChhKy4wNTUpLzEuMDU1LDIuNCl9ZnVuY3Rpb24gdyhhKXtpZihhIGluc3RhbmNlb2YgeSlyZXR1cm4gbmV3IHkoYS5oLGEuYyxhLmwsYS5vcGFjaXR5KTthIGluc3RhbmNlb2Ygcnx8KGE9cChhKSk7dmFyIGI9TWF0aC5hdGFuMihhLmIsYS5hKSpPO3JldHVybiBuZXcgeShiPDA/YiszNjA6YixNYXRoLnNxcnQoYS5hKmEuYSthLmIqYS5iKSxhLmwsYS5vcGFjaXR5KX1mdW5jdGlvbiB4KGEsYixjLGQpe3JldHVybiAxPT09YXJndW1lbnRzLmxlbmd0aD93KGEpOm5ldyB5KGEsYixjLG51bGw9PWQ/MTpkKX1mdW5jdGlvbiB5KGEsYixjLGQpe3RoaXMuaD0rYSx0aGlzLmM9K2IsdGhpcy5sPStjLHRoaXMub3BhY2l0eT0rZH1mdW5jdGlvbiB6KGEpe2lmKGEgaW5zdGFuY2VvZiBCKXJldHVybiBuZXcgQihhLmgsYS5zLGEubCxhLm9wYWNpdHkpO2EgaW5zdGFuY2VvZiBqfHwoYT1oKGEpKTt2YXIgYj1hLnIvMjU1LGM9YS5nLzI1NSxkPWEuYi8yNTUsZT0oY2EqZCthYSpiLWJhKmMpLyhjYSthYS1iYSksZj1kLWUsZz0oXyooYy1lKS1aKmYpLyQsaT1NYXRoLnNxcnQoZypnK2YqZikvKF8qZSooMS1lKSksaz1pP01hdGguYXRhbjIoZyxmKSpPLTEyMDpOYU47cmV0dXJuIG5ldyBCKGs8MD9rKzM2MDprLGksZSxhLm9wYWNpdHkpfWZ1bmN0aW9uIEEoYSxiLGMsZCl7cmV0dXJuIDE9PT1hcmd1bWVudHMubGVuZ3RoP3ooYSk6bmV3IEIoYSxiLGMsbnVsbD09ZD8xOmQpfWZ1bmN0aW9uIEIoYSxiLGMsZCl7dGhpcy5oPSthLHRoaXMucz0rYix0aGlzLmw9K2MsdGhpcy5vcGFjaXR5PStkfXZhciBDPS43LEQ9MS9DLEU9L14jKFswLTlhLWZdezN9KSQvLEY9L14jKFswLTlhLWZdezZ9KSQvLEc9L15yZ2JcKFxzKihbLStdP1xkKylccyosXHMqKFstK10/XGQrKVxzKixccyooWy0rXT9cZCspXHMqXCkkLyxIPS9ecmdiXChccyooWy0rXT9cZCsoPzpcLlxkKyk/KSVccyosXHMqKFstK10/XGQrKD86XC5cZCspPyklXHMqLFxzKihbLStdP1xkKyg/OlwuXGQrKT8pJVxzKlwpJC8sST0vXnJnYmFcKFxzKihbLStdP1xkKylccyosXHMqKFstK10/XGQrKVxzKixccyooWy0rXT9cZCspXHMqLFxzKihbLStdP1xkKyg/OlwuXGQrKT8pXHMqXCkkLyxKPS9ecmdiYVwoXHMqKFstK10/XGQrKD86XC5cZCspPyklXHMqLFxzKihbLStdP1xkKyg/OlwuXGQrKT8pJVxzKixccyooWy0rXT9cZCsoPzpcLlxkKyk/KSVccyosXHMqKFstK10/XGQrKD86XC5cZCspPylccypcKSQvLEs9L15oc2xcKFxzKihbLStdP1xkKyg/OlwuXGQrKT8pXHMqLFxzKihbLStdP1xkKyg/OlwuXGQrKT8pJVxzKixccyooWy0rXT9cZCsoPzpcLlxkKyk/KSVccypcKSQvLEw9L15oc2xhXChccyooWy0rXT9cZCsoPzpcLlxkKyk/KVxzKixccyooWy0rXT9cZCsoPzpcLlxkKyk/KSVccyosXHMqKFstK10/XGQrKD86XC5cZCspPyklXHMqLFxzKihbLStdP1xkKyg/OlwuXGQrKT8pXHMqXCkkLyxNPXthbGljZWJsdWU6MTU3OTIzODMsYW50aXF1ZXdoaXRlOjE2NDQ0Mzc1LGFxdWE6NjU1MzUsYXF1YW1hcmluZTo4Mzg4NTY0LGF6dXJlOjE1Nzk0MTc1LGJlaWdlOjE2MTE5MjYwLGJpc3F1ZToxNjc3MDI0NCxibGFjazowLGJsYW5jaGVkYWxtb25kOjE2NzcyMDQ1LGJsdWU6MjU1LGJsdWV2aW9sZXQ6OTA1NTIwMixicm93bjoxMDgyNDIzNCxidXJseXdvb2Q6MTQ1OTYyMzEsY2FkZXRibHVlOjYyNjY1MjgsY2hhcnRyZXVzZTo4Mzg4MzUyLGNob2NvbGF0ZToxMzc4OTQ3MCxjb3JhbDoxNjc0NDI3Mixjb3JuZmxvd2VyYmx1ZTo2NTkxOTgxLGNvcm5zaWxrOjE2Nzc1Mzg4LGNyaW1zb246MTQ0MjMxMDAsY3lhbjo2NTUzNSxkYXJrYmx1ZToxMzksZGFya2N5YW46MzU3MjMsZGFya2dvbGRlbnJvZDoxMjA5MjkzOSxkYXJrZ3JheToxMTExOTAxNyxkYXJrZ3JlZW46MjU2MDAsZGFya2dyZXk6MTExMTkwMTcsZGFya2toYWtpOjEyNDMzMjU5LGRhcmttYWdlbnRhOjkxMDk2NDMsZGFya29saXZlZ3JlZW46NTU5Nzk5OSxkYXJrb3JhbmdlOjE2NzQ3NTIwLGRhcmtvcmNoaWQ6MTAwNDAwMTIsZGFya3JlZDo5MTA5NTA0LGRhcmtzYWxtb246MTUzMDg0MTAsZGFya3NlYWdyZWVuOjk0MTk5MTksZGFya3NsYXRlYmx1ZTo0NzM0MzQ3LGRhcmtzbGF0ZWdyYXk6MzEwMDQ5NSxkYXJrc2xhdGVncmV5OjMxMDA0OTUsZGFya3R1cnF1b2lzZTo1Mjk0NSxkYXJrdmlvbGV0Ojk2OTk1MzksZGVlcHBpbms6MTY3MTY5NDcsZGVlcHNreWJsdWU6NDkxNTEsZGltZ3JheTo2OTA4MjY1LGRpbWdyZXk6NjkwODI2NSxkb2RnZXJibHVlOjIwMDMxOTksZmlyZWJyaWNrOjExNjc0MTQ2LGZsb3JhbHdoaXRlOjE2Nzc1OTIwLGZvcmVzdGdyZWVuOjIyNjM4NDIsZnVjaHNpYToxNjcxMTkzNSxnYWluc2Jvcm86MTQ0NzQ0NjAsZ2hvc3R3aGl0ZToxNjMxNjY3MSxnb2xkOjE2NzY2NzIwLGdvbGRlbnJvZDoxNDMyOTEyMCxncmF5Ojg0MjE1MDQsZ3JlZW46MzI3NjgsZ3JlZW55ZWxsb3c6MTE0MDMwNTUsZ3JleTo4NDIxNTA0LGhvbmV5ZGV3OjE1Nzk0MTYwLGhvdHBpbms6MTY3Mzg3NDAsaW5kaWFucmVkOjEzNDU4NTI0LGluZGlnbzo0OTE1MzMwLGl2b3J5OjE2Nzc3MjAwLGtoYWtpOjE1Nzg3NjYwLGxhdmVuZGVyOjE1MTMyNDEwLGxhdmVuZGVyYmx1c2g6MTY3NzMzNjUsbGF3bmdyZWVuOjgxOTA5NzYsbGVtb25jaGlmZm9uOjE2Nzc1ODg1LGxpZ2h0Ymx1ZToxMTM5MzI1NCxsaWdodGNvcmFsOjE1NzYxNTM2LGxpZ2h0Y3lhbjoxNDc0NTU5OSxsaWdodGdvbGRlbnJvZHllbGxvdzoxNjQ0ODIxMCxsaWdodGdyYXk6MTM4ODIzMjMsbGlnaHRncmVlbjo5NDk4MjU2LGxpZ2h0Z3JleToxMzg4MjMyMyxsaWdodHBpbms6MTY3NTg0NjUsbGlnaHRzYWxtb246MTY3NTI3NjIsbGlnaHRzZWFncmVlbjoyMTQyODkwLGxpZ2h0c2t5Ymx1ZTo4OTAwMzQ2LGxpZ2h0c2xhdGVncmF5Ojc4MzM3NTMsbGlnaHRzbGF0ZWdyZXk6NzgzMzc1MyxsaWdodHN0ZWVsYmx1ZToxMTU4NDczNCxsaWdodHllbGxvdzoxNjc3NzE4NCxsaW1lOjY1MjgwLGxpbWVncmVlbjozMzI5MzMwLGxpbmVuOjE2NDQ1NjcwLG1hZ2VudGE6MTY3MTE5MzUsbWFyb29uOjgzODg2MDgsbWVkaXVtYXF1YW1hcmluZTo2NzM3MzIyLG1lZGl1bWJsdWU6MjA1LG1lZGl1bW9yY2hpZDoxMjIxMTY2NyxtZWRpdW1wdXJwbGU6OTY2MjY4MyxtZWRpdW1zZWFncmVlbjozOTc4MDk3LG1lZGl1bXNsYXRlYmx1ZTo4MDg3NzkwLG1lZGl1bXNwcmluZ2dyZWVuOjY0MTU0LG1lZGl1bXR1cnF1b2lzZTo0NzcyMzAwLG1lZGl1bXZpb2xldHJlZDoxMzA0NzE3MyxtaWRuaWdodGJsdWU6MTY0NDkxMixtaW50Y3JlYW06MTYxMjE4NTAsbWlzdHlyb3NlOjE2NzcwMjczLG1vY2Nhc2luOjE2NzcwMjI5LG5hdmFqb3doaXRlOjE2NzY4Njg1LG5hdnk6MTI4LG9sZGxhY2U6MTY2NDM1NTgsb2xpdmU6ODQyMTM3NixvbGl2ZWRyYWI6NzA0ODczOSxvcmFuZ2U6MTY3NTM5MjAsb3JhbmdlcmVkOjE2NzI5MzQ0LG9yY2hpZDoxNDMxNTczNCxwYWxlZ29sZGVucm9kOjE1NjU3MTMwLHBhbGVncmVlbjoxMDAyNTg4MCxwYWxldHVycXVvaXNlOjExNTI5OTY2LHBhbGV2aW9sZXRyZWQ6MTQzODEyMDMscGFwYXlhd2hpcDoxNjc3MzA3NyxwZWFjaHB1ZmY6MTY3Njc2NzMscGVydToxMzQ2ODk5MSxwaW5rOjE2NzYxMDM1LHBsdW06MTQ1MjQ2MzcscG93ZGVyYmx1ZToxMTU5MTkxMCxwdXJwbGU6ODM4ODczNixyZWJlY2NhcHVycGxlOjY2OTc4ODEscmVkOjE2NzExNjgwLHJvc3licm93bjoxMjM1NzUxOSxyb3lhbGJsdWU6NDI4Njk0NSxzYWRkbGVicm93bjo5MTI3MTg3LHNhbG1vbjoxNjQxNjg4MixzYW5keWJyb3duOjE2MDMyODY0LHNlYWdyZWVuOjMwNTAzMjcsc2Vhc2hlbGw6MTY3NzQ2Mzgsc2llbm5hOjEwNTA2Nzk3LHNpbHZlcjoxMjYzMjI1Nixza3libHVlOjg5MDAzMzEsc2xhdGVibHVlOjY5NzAwNjEsc2xhdGVncmF5OjczNzI5NDQsc2xhdGVncmV5OjczNzI5NDQsc25vdzoxNjc3NTkzMCxzcHJpbmdncmVlbjo2NTQwNyxzdGVlbGJsdWU6NDYyMDk4MCx0YW46MTM4MDg3ODAsdGVhbDozMjg5Nix0aGlzdGxlOjE0MjA0ODg4LHRvbWF0bzoxNjczNzA5NSx0dXJxdW9pc2U6NDI1MTg1Nix2aW9sZXQ6MTU2MzEwODYsd2hlYXQ6MTYxMTMzMzEsd2hpdGU6MTY3NzcyMTUsd2hpdGVzbW9rZToxNjExOTI4NSx5ZWxsb3c6MTY3NzY5NjAseWVsbG93Z3JlZW46MTAxNDUwNzR9O2IoZCxlLHtkaXNwbGF5YWJsZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLnJnYigpLmRpc3BsYXlhYmxlKCl9LHRvU3RyaW5nOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMucmdiKCkrIiJ9fSksYihqLGksYyhkLHticmlnaHRlcjpmdW5jdGlvbihhKXtyZXR1cm4gYT1udWxsPT1hP0Q6TWF0aC5wb3coRCxhKSxuZXcgaih0aGlzLnIqYSx0aGlzLmcqYSx0aGlzLmIqYSx0aGlzLm9wYWNpdHkpfSxkYXJrZXI6ZnVuY3Rpb24oYSl7cmV0dXJuIGE9bnVsbD09YT9DOk1hdGgucG93KEMsYSksbmV3IGoodGhpcy5yKmEsdGhpcy5nKmEsdGhpcy5iKmEsdGhpcy5vcGFjaXR5KX0scmdiOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXN9LGRpc3BsYXlhYmxlOmZ1bmN0aW9uKCl7cmV0dXJuIDA8PXRoaXMuciYmdGhpcy5yPD0yNTUmJjA8PXRoaXMuZyYmdGhpcy5nPD0yNTUmJjA8PXRoaXMuYiYmdGhpcy5iPD0yNTUmJjA8PXRoaXMub3BhY2l0eSYmdGhpcy5vcGFjaXR5PD0xfSx0b1N0cmluZzpmdW5jdGlvbigpe3ZhciBhPXRoaXMub3BhY2l0eTtyZXR1cm4gYT1pc05hTihhKT8xOk1hdGgubWF4KDAsTWF0aC5taW4oMSxhKSksKDE9PT1hPyJyZ2IoIjoicmdiYSgiKStNYXRoLm1heCgwLE1hdGgubWluKDI1NSxNYXRoLnJvdW5kKHRoaXMucil8fDApKSsiLCAiK01hdGgubWF4KDAsTWF0aC5taW4oMjU1LE1hdGgucm91bmQodGhpcy5nKXx8MCkpKyIsICIrTWF0aC5tYXgoMCxNYXRoLm1pbigyNTUsTWF0aC5yb3VuZCh0aGlzLmIpfHwwKSkrKDE9PT1hPyIpIjoiLCAiK2ErIikiKX19KSksYihuLG0sYyhkLHticmlnaHRlcjpmdW5jdGlvbihhKXtyZXR1cm4gYT1udWxsPT1hP0Q6TWF0aC5wb3coRCxhKSxuZXcgbih0aGlzLmgsdGhpcy5zLHRoaXMubCphLHRoaXMub3BhY2l0eSl9LGRhcmtlcjpmdW5jdGlvbihhKXtyZXR1cm4gYT1udWxsPT1hP0M6TWF0aC5wb3coQyxhKSxuZXcgbih0aGlzLmgsdGhpcy5zLHRoaXMubCphLHRoaXMub3BhY2l0eSl9LHJnYjpmdW5jdGlvbigpe3ZhciBhPXRoaXMuaCUzNjArMzYwKih0aGlzLmg8MCksYj1pc05hTihhKXx8aXNOYU4odGhpcy5zKT8wOnRoaXMucyxjPXRoaXMubCxkPWMrKGM8LjU/YzoxLWMpKmIsZT0yKmMtZDtyZXR1cm4gbmV3IGoobyhhPj0yNDA/YS0yNDA6YSsxMjAsZSxkKSxvKGEsZSxkKSxvKGE8MTIwP2ErMjQwOmEtMTIwLGUsZCksdGhpcy5vcGFjaXR5KX0sZGlzcGxheWFibGU6ZnVuY3Rpb24oKXtyZXR1cm4oMDw9dGhpcy5zJiZ0aGlzLnM8PTF8fGlzTmFOKHRoaXMucykpJiYwPD10aGlzLmwmJnRoaXMubDw9MSYmMDw9dGhpcy5vcGFjaXR5JiZ0aGlzLm9wYWNpdHk8PTF9fSkpO3ZhciBOPU1hdGguUEkvMTgwLE89MTgwL01hdGguUEksUD0xOCxRPS45NTA0NyxSPTEsUz0xLjA4ODgzLFQ9NC8yOSxVPTYvMjksVj0zKlUqVSxXPVUqVSpVO2IocixxLGMoZCx7YnJpZ2h0ZXI6ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyByKHRoaXMubCtQKihudWxsPT1hPzE6YSksdGhpcy5hLHRoaXMuYix0aGlzLm9wYWNpdHkpfSxkYXJrZXI6ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyByKHRoaXMubC1QKihudWxsPT1hPzE6YSksdGhpcy5hLHRoaXMuYix0aGlzLm9wYWNpdHkpfSxyZ2I6ZnVuY3Rpb24oKXt2YXIgYT0odGhpcy5sKzE2KS8xMTYsYj1pc05hTih0aGlzLmEpP2E6YSt0aGlzLmEvNTAwLGM9aXNOYU4odGhpcy5iKT9hOmEtdGhpcy5iLzIwMDtyZXR1cm4gYT1SKnQoYSksYj1RKnQoYiksYz1TKnQoYyksbmV3IGoodSgzLjI0MDQ1NDIqYi0xLjUzNzEzODUqYS0uNDk4NTMxNCpjKSx1KC0uOTY5MjY2KmIrMS44NzYwMTA4KmErLjA0MTU1NipjKSx1KC4wNTU2NDM0KmItLjIwNDAyNTkqYSsxLjA1NzIyNTIqYyksdGhpcy5vcGFjaXR5KX19KSksYih5LHgsYyhkLHticmlnaHRlcjpmdW5jdGlvbihhKXtyZXR1cm4gbmV3IHkodGhpcy5oLHRoaXMuYyx0aGlzLmwrUCoobnVsbD09YT8xOmEpLHRoaXMub3BhY2l0eSl9LGRhcmtlcjpmdW5jdGlvbihhKXtyZXR1cm4gbmV3IHkodGhpcy5oLHRoaXMuYyx0aGlzLmwtUCoobnVsbD09YT8xOmEpLHRoaXMub3BhY2l0eSl9LHJnYjpmdW5jdGlvbigpe3JldHVybiBwKHRoaXMpLnJnYigpfX0pKTt2YXIgWD0tLjE0ODYxLFk9MS43ODI3NyxaPS0uMjkyMjcsJD0tLjkwNjQ5LF89MS45NzI5NCxhYT1fKiQsYmE9XypZLGNhPVkqWi0kKlg7YihCLEEsYyhkLHticmlnaHRlcjpmdW5jdGlvbihhKXtyZXR1cm4gYT1udWxsPT1hP0Q6TWF0aC5wb3coRCxhKSxuZXcgQih0aGlzLmgsdGhpcy5zLHRoaXMubCphLHRoaXMub3BhY2l0eSl9LGRhcmtlcjpmdW5jdGlvbihhKXtyZXR1cm4gYT1udWxsPT1hP0M6TWF0aC5wb3coQyxhKSxuZXcgQih0aGlzLmgsdGhpcy5zLHRoaXMubCphLHRoaXMub3BhY2l0eSl9LHJnYjpmdW5jdGlvbigpe3ZhciBhPWlzTmFOKHRoaXMuaCk/MDoodGhpcy5oKzEyMCkqTixiPSt0aGlzLmwsYz1pc05hTih0aGlzLnMpPzA6dGhpcy5zKmIqKDEtYiksZD1NYXRoLmNvcyhhKSxlPU1hdGguc2luKGEpO3JldHVybiBuZXcgaigyNTUqKGIrYyooWCpkK1kqZSkpLDI1NSooYitjKihaKmQrJCplKSksMjU1KihiK2MqKF8qZCkpLHRoaXMub3BhY2l0eSl9fSkpLGEuY29sb3I9ZSxhLnJnYj1pLGEuaHNsPW0sYS5sYWI9cSxhLmhjbD14LGEuY3ViZWhlbGl4PUEsT2JqZWN0LmRlZmluZVByb3BlcnR5KGEsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pfSl9LHt9XSw0OltmdW5jdGlvbihhLGIsYyl7IWZ1bmN0aW9uKGEsZCl7Im9iamVjdCI9PXR5cGVvZiBjJiYidW5kZWZpbmVkIiE9dHlwZW9mIGI/ZChjKToiZnVuY3Rpb24iPT10eXBlb2YgZGVmaW5lJiZkZWZpbmUuYW1kP2RlZmluZShbImV4cG9ydHMiXSxkKTpkKGEuZDM9YS5kM3x8e30pfSh0aGlzLGZ1bmN0aW9uKGEpeyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBiKCl7Zm9yKHZhciBhLGI9MCxkPWFyZ3VtZW50cy5sZW5ndGgsZT17fTtiPGQ7KytiKXtpZighKGE9YXJndW1lbnRzW2JdKyIiKXx8YSBpbiBlKXRocm93IG5ldyBFcnJvcigiaWxsZWdhbCB0eXBlOiAiK2EpO2VbYV09W119cmV0dXJuIG5ldyBjKGUpfWZ1bmN0aW9uIGMoYSl7dGhpcy5fPWF9ZnVuY3Rpb24gZChhLGIpe3JldHVybiBhLnRyaW0oKS5zcGxpdCgvXnxccysvKS5tYXAoZnVuY3Rpb24oYSl7dmFyIGM9IiIsZD1hLmluZGV4T2YoIi4iKTtpZihkPj0wJiYoYz1hLnNsaWNlKGQrMSksYT1hLnNsaWNlKDAsZCkpLGEmJiFiLmhhc093blByb3BlcnR5KGEpKXRocm93IG5ldyBFcnJvcigidW5rbm93biB0eXBlOiAiK2EpO3JldHVybnt0eXBlOmEsbmFtZTpjfX0pfWZ1bmN0aW9uIGUoYSxiKXtmb3IodmFyIGMsZD0wLGU9YS5sZW5ndGg7ZDxlOysrZClpZigoYz1hW2RdKS5uYW1lPT09YilyZXR1cm4gYy52YWx1ZX1mdW5jdGlvbiBmKGEsYixjKXtmb3IodmFyIGQ9MCxlPWEubGVuZ3RoO2Q8ZTsrK2QpaWYoYVtkXS5uYW1lPT09Yil7YVtkXT1nLGE9YS5zbGljZSgwLGQpLmNvbmNhdChhLnNsaWNlKGQrMSkpO2JyZWFrfXJldHVybiBudWxsIT1jJiZhLnB1c2goe25hbWU6Yix2YWx1ZTpjfSksYX12YXIgZz17dmFsdWU6ZnVuY3Rpb24oKXt9fTtjLnByb3RvdHlwZT1iLnByb3RvdHlwZT17Y29uc3RydWN0b3I6YyxvbjpmdW5jdGlvbihhLGIpe3ZhciBjLGc9dGhpcy5fLGg9ZChhKyIiLGcpLGk9LTEsaj1oLmxlbmd0aDt7aWYoIShhcmd1bWVudHMubGVuZ3RoPDIpKXtpZihudWxsIT1iJiYiZnVuY3Rpb24iIT10eXBlb2YgYil0aHJvdyBuZXcgRXJyb3IoImludmFsaWQgY2FsbGJhY2s6ICIrYik7Zm9yKDsrK2k8ajspaWYoYz0oYT1oW2ldKS50eXBlKWdbY109ZihnW2NdLGEubmFtZSxiKTtlbHNlIGlmKG51bGw9PWIpZm9yKGMgaW4gZylnW2NdPWYoZ1tjXSxhLm5hbWUsbnVsbCk7cmV0dXJuIHRoaXN9Zm9yKDsrK2k8ajspaWYoKGM9KGE9aFtpXSkudHlwZSkmJihjPWUoZ1tjXSxhLm5hbWUpKSlyZXR1cm4gY319LGNvcHk6ZnVuY3Rpb24oKXt2YXIgYT17fSxiPXRoaXMuXztmb3IodmFyIGQgaW4gYilhW2RdPWJbZF0uc2xpY2UoKTtyZXR1cm4gbmV3IGMoYSl9LGNhbGw6ZnVuY3Rpb24oYSxiKXtpZigoYz1hcmd1bWVudHMubGVuZ3RoLTIpPjApZm9yKHZhciBjLGQsZT1uZXcgQXJyYXkoYyksZj0wO2Y8YzsrK2YpZVtmXT1hcmd1bWVudHNbZisyXTtpZighdGhpcy5fLmhhc093blByb3BlcnR5KGEpKXRocm93IG5ldyBFcnJvcigidW5rbm93biB0eXBlOiAiK2EpO2ZvcihkPXRoaXMuX1thXSxmPTAsYz1kLmxlbmd0aDtmPGM7KytmKWRbZl0udmFsdWUuYXBwbHkoYixlKX0sYXBwbHk6ZnVuY3Rpb24oYSxiLGMpe2lmKCF0aGlzLl8uaGFzT3duUHJvcGVydHkoYSkpdGhyb3cgbmV3IEVycm9yKCJ1bmtub3duIHR5cGU6ICIrYSk7Zm9yKHZhciBkPXRoaXMuX1thXSxlPTAsZj1kLmxlbmd0aDtlPGY7KytlKWRbZV0udmFsdWUuYXBwbHkoYixjKX19LGEuZGlzcGF0Y2g9YixPYmplY3QuZGVmaW5lUHJvcGVydHkoYSwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSl9KX0se31dLDU6W2Z1bmN0aW9uKGEsYixjKXshZnVuY3Rpb24oYSxkKXsib2JqZWN0Ij09dHlwZW9mIGMmJiJ1bmRlZmluZWQiIT10eXBlb2YgYj9kKGMpOiJmdW5jdGlvbiI9PXR5cGVvZiBkZWZpbmUmJmRlZmluZS5hbWQ/ZGVmaW5lKFsiZXhwb3J0cyJdLGQpOmQoYS5kMz1hLmQzfHx7fSl9KHRoaXMsZnVuY3Rpb24oYSl7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIGIoYSxiKXtpZigoYz0oYT1iP2EudG9FeHBvbmVudGlhbChiLTEpOmEudG9FeHBvbmVudGlhbCgpKS5pbmRleE9mKCJlIikpPDApcmV0dXJuIG51bGw7dmFyIGMsZD1hLnNsaWNlKDAsYyk7cmV0dXJuW2QubGVuZ3RoPjE/ZFswXStkLnNsaWNlKDIpOmQsK2Euc2xpY2UoYysxKV19ZnVuY3Rpb24gYyhhKXtyZXR1cm4gYT1iKE1hdGguYWJzKGEpKSxhP2FbMV06TmFOfWZ1bmN0aW9uIGQoYSxiKXtyZXR1cm4gZnVuY3Rpb24oYyxkKXtmb3IodmFyIGU9Yy5sZW5ndGgsZj1bXSxnPTAsaD1hWzBdLGk9MDtlPjAmJmg+MCYmKGkraCsxPmQmJihoPU1hdGgubWF4KDEsZC1pKSksZi5wdXNoKGMuc3Vic3RyaW5nKGUtPWgsZStoKSksISgoaSs9aCsxKT5kKSk7KWg9YVtnPShnKzEpJWEubGVuZ3RoXTtyZXR1cm4gZi5yZXZlcnNlKCkuam9pbihiKX19ZnVuY3Rpb24gZShhLGIpe2E9YS50b1ByZWNpc2lvbihiKTthOmZvcih2YXIgYyxkPWEubGVuZ3RoLGU9MSxmPS0xO2U8ZDsrK2Upc3dpdGNoKGFbZV0pe2Nhc2UiLiI6Zj1jPWU7YnJlYWs7Y2FzZSIwIjowPT09ZiYmKGY9ZSksYz1lO2JyZWFrO2Nhc2UiZSI6YnJlYWsgYTtkZWZhdWx0OmY+MCYmKGY9MCl9cmV0dXJuIGY+MD9hLnNsaWNlKDAsZikrYS5zbGljZShjKzEpOmF9ZnVuY3Rpb24gZihhLGMpe3ZhciBkPWIoYSxjKTtpZighZClyZXR1cm4gYSsiIjt2YXIgZT1kWzBdLGY9ZFsxXSxnPWYtKHA9MypNYXRoLm1heCgtOCxNYXRoLm1pbig4LE1hdGguZmxvb3IoZi8zKSkpKSsxLGg9ZS5sZW5ndGg7cmV0dXJuIGc9PT1oP2U6Zz5oP2UrbmV3IEFycmF5KGctaCsxKS5qb2luKCIwIik6Zz4wP2Uuc2xpY2UoMCxnKSsiLiIrZS5zbGljZShnKToiMC4iK25ldyBBcnJheSgxLWcpLmpvaW4oIjAiKStiKGEsTWF0aC5tYXgoMCxjK2ctMSkpWzBdfWZ1bmN0aW9uIGcoYSxjKXt2YXIgZD1iKGEsYyk7aWYoIWQpcmV0dXJuIGErIiI7dmFyIGU9ZFswXSxmPWRbMV07cmV0dXJuIGY8MD8iMC4iK25ldyBBcnJheSgoLWYpKS5qb2luKCIwIikrZTplLmxlbmd0aD5mKzE/ZS5zbGljZSgwLGYrMSkrIi4iK2Uuc2xpY2UoZisxKTplK25ldyBBcnJheShmLWUubGVuZ3RoKzIpLmpvaW4oIjAiKX1mdW5jdGlvbiBoKGEpe3JldHVybiBuZXcgaShhKX1mdW5jdGlvbiBpKGEpe2lmKCEoYj1yLmV4ZWMoYSkpKXRocm93IG5ldyBFcnJvcigiaW52YWxpZCBmb3JtYXQ6ICIrYSk7dmFyIGIsYz1iWzFdfHwiICIsZD1iWzJdfHwiPiIsZT1iWzNdfHwiLSIsZj1iWzRdfHwiIixnPSEhYls1XSxoPWJbNl0mJitiWzZdLGk9ISFiWzddLGo9Yls4XSYmK2JbOF0uc2xpY2UoMSksaz1iWzldfHwiIjsibiI9PT1rPyhpPSEwLGs9ImciKTpxW2tdfHwoaz0iIiksKGd8fCIwIj09PWMmJiI9Ij09PWQpJiYoZz0hMCxjPSIwIixkPSI9IiksdGhpcy5maWxsPWMsdGhpcy5hbGlnbj1kLHRoaXMuc2lnbj1lLHRoaXMuc3ltYm9sPWYsdGhpcy56ZXJvPWcsdGhpcy53aWR0aD1oLHRoaXMuY29tbWE9aSx0aGlzLnByZWNpc2lvbj1qLHRoaXMudHlwZT1rfWZ1bmN0aW9uIGooYSl7cmV0dXJuIGF9ZnVuY3Rpb24gayhhKXtmdW5jdGlvbiBiKGEpe2Z1bmN0aW9uIGIoYSl7dmFyIGIsZyxoLGo9cixxPXM7aWYoImMiPT09bylxPXUoYSkrcSxhPSIiO2Vsc2V7YT0rYTt2YXIgdz0oYTwwfHwxL2E8MCkmJihhKj0tMSwhMCk7aWYoYT11KGEsbiksdylmb3IoYj0tMSxnPWEubGVuZ3RoLHc9ITE7KytiPGc7KWlmKGg9YS5jaGFyQ29kZUF0KGIpLDQ4PGgmJmg8NTh8fCJ4Ij09PW8mJjk2PGgmJmg8MTAzfHwiWCI9PT1vJiY2NDxoJiZoPDcxKXt3PSEwO2JyZWFrfWlmKGo9KHc/IigiPT09ZT9lOiItIjoiLSI9PT1lfHwiKCI9PT1lPyIiOmUpK2oscT1xKygicyI9PT1vP3RbOCtwLzNdOiIiKSsodyYmIigiPT09ZT8iKSI6IiIpLHYpZm9yKGI9LTEsZz1hLmxlbmd0aDsrK2I8ZzspaWYoaD1hLmNoYXJDb2RlQXQoYiksNDg+aHx8aD41Nyl7cT0oNDY9PT1oP2krYS5zbGljZShiKzEpOmEuc2xpY2UoYikpK3EsYT1hLnNsaWNlKDAsYik7YnJlYWt9fW0mJiFrJiYoYT1mKGEsMS8wKSk7dmFyIHg9ai5sZW5ndGgrYS5sZW5ndGgrcS5sZW5ndGgseT14PGw/bmV3IEFycmF5KGwteCsxKS5qb2luKGMpOiIiO3N3aXRjaChtJiZrJiYoYT1mKHkrYSx5Lmxlbmd0aD9sLXEubGVuZ3RoOjEvMCkseT0iIiksZCl7Y2FzZSI8IjpyZXR1cm4gaithK3EreTtjYXNlIj0iOnJldHVybiBqK3krYStxO2Nhc2UiXiI6cmV0dXJuIHkuc2xpY2UoMCx4PXkubGVuZ3RoPj4xKStqK2ErcSt5LnNsaWNlKHgpfXJldHVybiB5K2orYStxfWE9aChhKTt2YXIgYz1hLmZpbGwsZD1hLmFsaWduLGU9YS5zaWduLGo9YS5zeW1ib2wsaz1hLnplcm8sbD1hLndpZHRoLG09YS5jb21tYSxuPWEucHJlY2lzaW9uLG89YS50eXBlLHI9IiQiPT09aj9nWzBdOiIjIj09PWomJi9bYm94WF0vLnRlc3Qobyk/IjAiK28udG9Mb3dlckNhc2UoKToiIixzPSIkIj09PWo/Z1sxXTovWyVwXS8udGVzdChvKT8iJSI6IiIsdT1xW29dLHY9IW98fC9bZGVmZ3BycyVdLy50ZXN0KG8pO3JldHVybiBuPW51bGw9PW4/bz82OjEyOi9bZ3Byc10vLnRlc3Qobyk/TWF0aC5tYXgoMSxNYXRoLm1pbigyMSxuKSk6TWF0aC5tYXgoMCxNYXRoLm1pbigyMCxuKSksYi50b1N0cmluZz1mdW5jdGlvbigpe3JldHVybiBhKyIifSxifWZ1bmN0aW9uIGUoYSxkKXt2YXIgZT1iKChhPWgoYSksYS50eXBlPSJmIixhKSksZj0zKk1hdGgubWF4KC04LE1hdGgubWluKDgsTWF0aC5mbG9vcihjKGQpLzMpKSksZz1NYXRoLnBvdygxMCwtZiksaT10WzgrZi8zXTtyZXR1cm4gZnVuY3Rpb24oYSl7cmV0dXJuIGUoZyphKStpfX12YXIgZj1hLmdyb3VwaW5nJiZhLnRob3VzYW5kcz9kKGEuZ3JvdXBpbmcsYS50aG91c2FuZHMpOmosZz1hLmN1cnJlbmN5LGk9YS5kZWNpbWFsO3JldHVybntmb3JtYXQ6Yixmb3JtYXRQcmVmaXg6ZX19ZnVuY3Rpb24gbChiKXtyZXR1cm4gcz1rKGIpLGEuZm9ybWF0PXMuZm9ybWF0LGEuZm9ybWF0UHJlZml4PXMuZm9ybWF0UHJlZml4LHN9ZnVuY3Rpb24gbShhKXtyZXR1cm4gTWF0aC5tYXgoMCwtYyhNYXRoLmFicyhhKSkpfWZ1bmN0aW9uIG4oYSxiKXtyZXR1cm4gTWF0aC5tYXgoMCwzKk1hdGgubWF4KC04LE1hdGgubWluKDgsTWF0aC5mbG9vcihjKGIpLzMpKSktYyhNYXRoLmFicyhhKSkpfWZ1bmN0aW9uIG8oYSxiKXtyZXR1cm4gYT1NYXRoLmFicyhhKSxiPU1hdGguYWJzKGIpLWEsTWF0aC5tYXgoMCxjKGIpLWMoYSkpKzF9dmFyIHAscT17IiI6ZSwiJSI6ZnVuY3Rpb24oYSxiKXtyZXR1cm4oMTAwKmEpLnRvRml4ZWQoYil9LGI6ZnVuY3Rpb24oYSl7cmV0dXJuIE1hdGgucm91bmQoYSkudG9TdHJpbmcoMil9LGM6ZnVuY3Rpb24oYSl7cmV0dXJuIGErIiJ9LGQ6ZnVuY3Rpb24oYSl7cmV0dXJuIE1hdGgucm91bmQoYSkudG9TdHJpbmcoMTApfSxlOmZ1bmN0aW9uKGEsYil7cmV0dXJuIGEudG9FeHBvbmVudGlhbChiKX0sZjpmdW5jdGlvbihhLGIpe3JldHVybiBhLnRvRml4ZWQoYil9LGc6ZnVuY3Rpb24oYSxiKXtyZXR1cm4gYS50b1ByZWNpc2lvbihiKX0sbzpmdW5jdGlvbihhKXtyZXR1cm4gTWF0aC5yb3VuZChhKS50b1N0cmluZyg4KX0scDpmdW5jdGlvbihhLGIpe3JldHVybiBnKDEwMCphLGIpfSxyOmcsczpmLFg6ZnVuY3Rpb24oYSl7cmV0dXJuIE1hdGgucm91bmQoYSkudG9TdHJpbmcoMTYpLnRvVXBwZXJDYXNlKCl9LHg6ZnVuY3Rpb24oYSl7cmV0dXJuIE1hdGgucm91bmQoYSkudG9TdHJpbmcoMTYpfX0scj0vXig/OiguKT8oWzw+PV5dKSk/KFsrXC1cKCBdKT8oWyQjXSk/KDApPyhcZCspPygsKT8oXC5cZCspPyhbYS16JV0pPyQvaTtpLnByb3RvdHlwZS50b1N0cmluZz1mdW5jdGlvbigpe3JldHVybiB0aGlzLmZpbGwrdGhpcy5hbGlnbit0aGlzLnNpZ24rdGhpcy5zeW1ib2wrKHRoaXMuemVybz8iMCI6IiIpKyhudWxsPT10aGlzLndpZHRoPyIiOk1hdGgubWF4KDEsMHx0aGlzLndpZHRoKSkrKHRoaXMuY29tbWE/IiwiOiIiKSsobnVsbD09dGhpcy5wcmVjaXNpb24/IiI6Ii4iK01hdGgubWF4KDAsMHx0aGlzLnByZWNpc2lvbikpK3RoaXMudHlwZX07dmFyIHMsdD1bInkiLCJ6IiwiYSIsImYiLCJwIiwibiIsIsK1IiwibSIsIiIsImsiLCJNIiwiRyIsIlQiLCJQIiwiRSIsIloiLCJZIl07bCh7ZGVjaW1hbDoiLiIsdGhvdXNhbmRzOiIsIixncm91cGluZzpbM10sY3VycmVuY3k6WyIkIiwiIl19KSxhLmZvcm1hdERlZmF1bHRMb2NhbGU9bCxhLmZvcm1hdExvY2FsZT1rLGEuZm9ybWF0U3BlY2lmaWVyPWgsYS5wcmVjaXNpb25GaXhlZD1tLGEucHJlY2lzaW9uUHJlZml4PW4sYS5wcmVjaXNpb25Sb3VuZD1vLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShhLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KX0pfSx7fV0sNjpbZnVuY3Rpb24oYSxiLGMpeyFmdW5jdGlvbihkLGUpeyJvYmplY3QiPT10eXBlb2YgYyYmInVuZGVmaW5lZCIhPXR5cGVvZiBiP2UoYyxhKCJkMy1jb2xvciIpKToiZnVuY3Rpb24iPT10eXBlb2YgZGVmaW5lJiZkZWZpbmUuYW1kP2RlZmluZShbImV4cG9ydHMiLCJkMy1jb2xvciJdLGUpOmUoZC5kMz1kLmQzfHx7fSxkLmQzKX0odGhpcyxmdW5jdGlvbihhLGIpeyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBjKGEsYixjLGQsZSl7dmFyIGY9YSphLGc9ZiphO3JldHVybigoMS0zKmErMypmLWcpKmIrKDQtNipmKzMqZykqYysoMSszKmErMypmLTMqZykqZCtnKmUpLzZ9ZnVuY3Rpb24gZChhKXt2YXIgYj1hLmxlbmd0aC0xO3JldHVybiBmdW5jdGlvbihkKXt2YXIgZT1kPD0wP2Q9MDpkPj0xPyhkPTEsYi0xKTpNYXRoLmZsb29yKGQqYiksZj1hW2VdLGc9YVtlKzFdLGg9ZT4wP2FbZS0xXToyKmYtZyxpPWU8Yi0xP2FbZSsyXToyKmctZjtyZXR1cm4gYygoZC1lL2IpKmIsaCxmLGcsaSl9fWZ1bmN0aW9uIGUoYSl7dmFyIGI9YS5sZW5ndGg7cmV0dXJuIGZ1bmN0aW9uKGQpe3ZhciBlPU1hdGguZmxvb3IoKChkJT0xKTwwPysrZDpkKSpiKSxmPWFbKGUrYi0xKSViXSxnPWFbZSViXSxoPWFbKGUrMSklYl0saT1hWyhlKzIpJWJdO3JldHVybiBjKChkLWUvYikqYixmLGcsaCxpKX19ZnVuY3Rpb24gZihhKXtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gYX19ZnVuY3Rpb24gZyhhLGIpe3JldHVybiBmdW5jdGlvbihjKXtyZXR1cm4gYStjKmJ9fWZ1bmN0aW9uIGgoYSxiLGMpe3JldHVybiBhPU1hdGgucG93KGEsYyksYj1NYXRoLnBvdyhiLGMpLWEsYz0xL2MsZnVuY3Rpb24oZCl7cmV0dXJuIE1hdGgucG93KGErZCpiLGMpfX1mdW5jdGlvbiBpKGEsYil7dmFyIGM9Yi1hO3JldHVybiBjP2coYSxjPjE4MHx8YzwtMTgwP2MtMzYwKk1hdGgucm91bmQoYy8zNjApOmMpOmYoaXNOYU4oYSk/YjphKX1mdW5jdGlvbiBqKGEpe3JldHVybiAxPT09KGE9K2EpP2s6ZnVuY3Rpb24oYixjKXtyZXR1cm4gYy1iP2goYixjLGEpOmYoaXNOYU4oYik/YzpiKX19ZnVuY3Rpb24gayhhLGIpe3ZhciBjPWItYTtyZXR1cm4gYz9nKGEsYyk6Zihpc05hTihhKT9iOmEpfWZ1bmN0aW9uIGwoYSl7cmV0dXJuIGZ1bmN0aW9uKGMpe3ZhciBkLGUsZj1jLmxlbmd0aCxnPW5ldyBBcnJheShmKSxoPW5ldyBBcnJheShmKSxpPW5ldyBBcnJheShmKTtmb3IoZD0wO2Q8ZjsrK2QpZT1iLnJnYihjW2RdKSxnW2RdPWUucnx8MCxoW2RdPWUuZ3x8MCxpW2RdPWUuYnx8MDtyZXR1cm4gZz1hKGcpLGg9YShoKSxpPWEoaSksZS5vcGFjaXR5PTEsZnVuY3Rpb24oYSl7cmV0dXJuIGUucj1nKGEpLGUuZz1oKGEpLGUuYj1pKGEpLGUrIiJ9fX1mdW5jdGlvbiBtKGEsYil7dmFyIGMsZD1iP2IubGVuZ3RoOjAsZT1hP01hdGgubWluKGQsYS5sZW5ndGgpOjAsZj1uZXcgQXJyYXkoZCksZz1uZXcgQXJyYXkoZCk7Zm9yKGM9MDtjPGU7KytjKWZbY109dChhW2NdLGJbY10pO2Zvcig7YzxkOysrYylnW2NdPWJbY107cmV0dXJuIGZ1bmN0aW9uKGEpe2ZvcihjPTA7YzxlOysrYylnW2NdPWZbY10oYSk7cmV0dXJuIGd9fWZ1bmN0aW9uIG4oYSxiKXt2YXIgYz1uZXcgRGF0ZTtyZXR1cm4gYT0rYSxiLT1hLGZ1bmN0aW9uKGQpe3JldHVybiBjLnNldFRpbWUoYStiKmQpLGN9fWZ1bmN0aW9uIG8oYSxiKXtyZXR1cm4gYT0rYSxiLT1hLGZ1bmN0aW9uKGMpe3JldHVybiBhK2IqY319ZnVuY3Rpb24gcChhLGIpe3ZhciBjLGQ9e30sZT17fTtudWxsIT09YSYmIm9iamVjdCI9PXR5cGVvZiBhfHwoYT17fSksbnVsbCE9PWImJiJvYmplY3QiPT10eXBlb2YgYnx8KGI9e30pO2ZvcihjIGluIGIpYyBpbiBhP2RbY109dChhW2NdLGJbY10pOmVbY109YltjXTtyZXR1cm4gZnVuY3Rpb24oYSl7Zm9yKGMgaW4gZCllW2NdPWRbY10oYSk7cmV0dXJuIGV9fWZ1bmN0aW9uIHEoYSl7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIGF9fWZ1bmN0aW9uIHIoYSl7cmV0dXJuIGZ1bmN0aW9uKGIpe3JldHVybiBhKGIpKyIifX1mdW5jdGlvbiBzKGEsYil7dmFyIGMsZCxlLGY9UC5sYXN0SW5kZXg9US5sYXN0SW5kZXg9MCxnPS0xLGg9W10saT1bXTtmb3IoYSs9IiIsYis9IiI7KGM9UC5leGVjKGEpKSYmKGQ9US5leGVjKGIpKTspKGU9ZC5pbmRleCk+ZiYmKGU9Yi5zbGljZShmLGUpLGhbZ10/aFtnXSs9ZTpoWysrZ109ZSksKGM9Y1swXSk9PT0oZD1kWzBdKT9oW2ddP2hbZ10rPWQ6aFsrK2ddPWQ6KGhbKytnXT1udWxsLGkucHVzaCh7aTpnLHg6byhjLGQpfSkpLGY9US5sYXN0SW5kZXg7cmV0dXJuIGY8Yi5sZW5ndGgmJihlPWIuc2xpY2UoZiksaFtnXT9oW2ddKz1lOmhbKytnXT1lKSxoLmxlbmd0aDwyP2lbMF0/cihpWzBdLngpOnEoYik6KGI9aS5sZW5ndGgsZnVuY3Rpb24oYSl7Zm9yKHZhciBjLGQ9MDtkPGI7KytkKWhbKGM9aVtkXSkuaV09Yy54KGEpO3JldHVybiBoLmpvaW4oIiIpfSl9ZnVuY3Rpb24gdChhLGMpe3ZhciBkLGU9dHlwZW9mIGM7cmV0dXJuIG51bGw9PWN8fCJib29sZWFuIj09PWU/ZihjKTooIm51bWJlciI9PT1lP286InN0cmluZyI9PT1lPyhkPWIuY29sb3IoYykpPyhjPWQsTSk6czpjIGluc3RhbmNlb2YgYi5jb2xvcj9NOmMgaW5zdGFuY2VvZiBEYXRlP246QXJyYXkuaXNBcnJheShjKT9tOmlzTmFOKGMpP3A6bykoYSxjKX1mdW5jdGlvbiB1KGEsYil7cmV0dXJuIGE9K2EsYi09YSxmdW5jdGlvbihjKXtyZXR1cm4gTWF0aC5yb3VuZChhK2IqYyl9fWZ1bmN0aW9uIHYoYSxiLGMsZCxlLGYpe3ZhciBnLGgsaTtyZXR1cm4oZz1NYXRoLnNxcnQoYSphK2IqYikpJiYoYS89ZyxiLz1nKSwoaT1hKmMrYipkKSYmKGMtPWEqaSxkLT1iKmkpLChoPU1hdGguc3FydChjKmMrZCpkKSkmJihjLz1oLGQvPWgsaS89aCksYSpkPGIqYyYmKGE9LWEsYj0tYixpPS1pLGc9LWcpLHt0cmFuc2xhdGVYOmUsdHJhbnNsYXRlWTpmLHJvdGF0ZTpNYXRoLmF0YW4yKGIsYSkqUixza2V3WDpNYXRoLmF0YW4oaSkqUixzY2FsZVg6ZyxzY2FsZVk6aH19ZnVuY3Rpb24gdyhhKXtyZXR1cm4ibm9uZSI9PT1hP1M6KEl8fChJPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoIkRJViIpLEo9ZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LEs9ZG9jdW1lbnQuZGVmYXVsdFZpZXcpLEkuc3R5bGUudHJhbnNmb3JtPWEsYT1LLmdldENvbXB1dGVkU3R5bGUoSi5hcHBlbmRDaGlsZChJKSxudWxsKS5nZXRQcm9wZXJ0eVZhbHVlKCJ0cmFuc2Zvcm0iKSxKLnJlbW92ZUNoaWxkKEkpLGE9YS5zbGljZSg3LC0xKS5zcGxpdCgiLCIpLHYoK2FbMF0sK2FbMV0sK2FbMl0sK2FbM10sK2FbNF0sK2FbNV0pKX1mdW5jdGlvbiB4KGEpe3JldHVybiBudWxsPT1hP1M6KEx8fChMPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnROUygiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciLCJnIikpLEwuc2V0QXR0cmlidXRlKCJ0cmFuc2Zvcm0iLGEpLChhPUwudHJhbnNmb3JtLmJhc2VWYWwuY29uc29saWRhdGUoKSk/KGE9YS5tYXRyaXgsdihhLmEsYS5iLGEuYyxhLmQsYS5lLGEuZikpOlMpfWZ1bmN0aW9uIHkoYSxiLGMsZCl7ZnVuY3Rpb24gZShhKXtyZXR1cm4gYS5sZW5ndGg/YS5wb3AoKSsiICI6IiJ9ZnVuY3Rpb24gZihhLGQsZSxmLGcsaCl7aWYoYSE9PWV8fGQhPT1mKXt2YXIgaT1nLnB1c2goInRyYW5zbGF0ZSgiLG51bGwsYixudWxsLGMpO2gucHVzaCh7aTppLTQseDpvKGEsZSl9LHtpOmktMix4Om8oZCxmKX0pfWVsc2UoZXx8ZikmJmcucHVzaCgidHJhbnNsYXRlKCIrZStiK2YrYyl9ZnVuY3Rpb24gZyhhLGIsYyxmKXthIT09Yj8oYS1iPjE4MD9iKz0zNjA6Yi1hPjE4MCYmKGErPTM2MCksZi5wdXNoKHtpOmMucHVzaChlKGMpKyJyb3RhdGUoIixudWxsLGQpLTIseDpvKGEsYil9KSk6YiYmYy5wdXNoKGUoYykrInJvdGF0ZSgiK2IrZCl9ZnVuY3Rpb24gaChhLGIsYyxmKXthIT09Yj9mLnB1c2goe2k6Yy5wdXNoKGUoYykrInNrZXdYKCIsbnVsbCxkKS0yLHg6byhhLGIpfSk6YiYmYy5wdXNoKGUoYykrInNrZXdYKCIrYitkKX1mdW5jdGlvbiBpKGEsYixjLGQsZixnKXtpZihhIT09Y3x8YiE9PWQpe3ZhciBoPWYucHVzaChlKGYpKyJzY2FsZSgiLG51bGwsIiwiLG51bGwsIikiKTtnLnB1c2goe2k6aC00LHg6byhhLGMpfSx7aTpoLTIseDpvKGIsZCl9KX1lbHNlIDE9PT1jJiYxPT09ZHx8Zi5wdXNoKGUoZikrInNjYWxlKCIrYysiLCIrZCsiKSIpfXJldHVybiBmdW5jdGlvbihiLGMpe3ZhciBkPVtdLGU9W107cmV0dXJuIGI9YShiKSxjPWEoYyksZihiLnRyYW5zbGF0ZVgsYi50cmFuc2xhdGVZLGMudHJhbnNsYXRlWCxjLnRyYW5zbGF0ZVksZCxlKSxnKGIucm90YXRlLGMucm90YXRlLGQsZSksaChiLnNrZXdYLGMuc2tld1gsZCxlKSxpKGIuc2NhbGVYLGIuc2NhbGVZLGMuc2NhbGVYLGMuc2NhbGVZLGQsZSksYj1jPW51bGwsZnVuY3Rpb24oYSl7Zm9yKHZhciBiLGM9LTEsZj1lLmxlbmd0aDsrK2M8ZjspZFsoYj1lW2NdKS5pXT1iLngoYSk7cmV0dXJuIGQuam9pbigiIil9fX1mdW5jdGlvbiB6KGEpe3JldHVybigoYT1NYXRoLmV4cChhKSkrMS9hKS8yfWZ1bmN0aW9uIEEoYSl7cmV0dXJuKChhPU1hdGguZXhwKGEpKS0xL2EpLzJ9ZnVuY3Rpb24gQihhKXtyZXR1cm4oKGE9TWF0aC5leHAoMiphKSktMSkvKGErMSl9ZnVuY3Rpb24gQyhhLGIpe3ZhciBjLGQsZT1hWzBdLGY9YVsxXSxnPWFbMl0saD1iWzBdLGk9YlsxXSxqPWJbMl0saz1oLWUsbD1pLWYsbT1rKmsrbCpsO2lmKG08WSlkPU1hdGgubG9nKGovZykvVixjPWZ1bmN0aW9uKGEpe3JldHVybltlK2EqayxmK2EqbCxnKk1hdGguZXhwKFYqYSpkKV19O2Vsc2V7dmFyIG49TWF0aC5zcXJ0KG0pLG89KGoqai1nKmcrWCptKS8oMipnKlcqbikscD0oaipqLWcqZy1YKm0pLygyKmoqVypuKSxxPU1hdGgubG9nKE1hdGguc3FydChvKm8rMSktbykscj1NYXRoLmxvZyhNYXRoLnNxcnQocCpwKzEpLXApO2Q9KHItcSkvVixjPWZ1bmN0aW9uKGEpe3ZhciBiPWEqZCxjPXoocSksaD1nLyhXKm4pKihjKkIoVipiK3EpLUEocSkpO3JldHVybltlK2gqayxmK2gqbCxnKmMveihWKmIrcSldfX1yZXR1cm4gYy5kdXJhdGlvbj0xZTMqZCxjfWZ1bmN0aW9uIEQoYSl7cmV0dXJuIGZ1bmN0aW9uKGMsZCl7dmFyIGU9YSgoYz1iLmhzbChjKSkuaCwoZD1iLmhzbChkKSkuaCksZj1rKGMucyxkLnMpLGc9ayhjLmwsZC5sKSxoPWsoYy5vcGFjaXR5LGQub3BhY2l0eSk7cmV0dXJuIGZ1bmN0aW9uKGEpe3JldHVybiBjLmg9ZShhKSxjLnM9ZihhKSxjLmw9ZyhhKSxjLm9wYWNpdHk9aChhKSxjKyIifX19ZnVuY3Rpb24gRShhLGMpe3ZhciBkPWsoKGE9Yi5sYWIoYSkpLmwsKGM9Yi5sYWIoYykpLmwpLGU9ayhhLmEsYy5hKSxmPWsoYS5iLGMuYiksZz1rKGEub3BhY2l0eSxjLm9wYWNpdHkpO3JldHVybiBmdW5jdGlvbihiKXtyZXR1cm4gYS5sPWQoYiksYS5hPWUoYiksYS5iPWYoYiksYS5vcGFjaXR5PWcoYiksYSsiIn19ZnVuY3Rpb24gRihhKXtyZXR1cm4gZnVuY3Rpb24oYyxkKXt2YXIgZT1hKChjPWIuaGNsKGMpKS5oLChkPWIuaGNsKGQpKS5oKSxmPWsoYy5jLGQuYyksZz1rKGMubCxkLmwpLGg9ayhjLm9wYWNpdHksZC5vcGFjaXR5KTtyZXR1cm4gZnVuY3Rpb24oYSl7cmV0dXJuIGMuaD1lKGEpLGMuYz1mKGEpLGMubD1nKGEpLGMub3BhY2l0eT1oKGEpLGMrIiJ9fX1mdW5jdGlvbiBHKGEpe3JldHVybiBmdW5jdGlvbiBjKGQpe2Z1bmN0aW9uIGUoYyxlKXt2YXIgZj1hKChjPWIuY3ViZWhlbGl4KGMpKS5oLChlPWIuY3ViZWhlbGl4KGUpKS5oKSxnPWsoYy5zLGUucyksaD1rKGMubCxlLmwpLGk9ayhjLm9wYWNpdHksZS5vcGFjaXR5KTtyZXR1cm4gZnVuY3Rpb24oYSl7cmV0dXJuIGMuaD1mKGEpLGMucz1nKGEpLGMubD1oKE1hdGgucG93KGEsZCkpLGMub3BhY2l0eT1pKGEpLGMrIiJ9fXJldHVybiBkPStkLGUuZ2FtbWE9YyxlfSgxKX1mdW5jdGlvbiBIKGEsYil7Zm9yKHZhciBjPW5ldyBBcnJheShiKSxkPTA7ZDxiOysrZCljW2RdPWEoZC8oYi0xKSk7cmV0dXJuIGN9dmFyIEksSixLLEwsTT1mdW5jdGlvbiBhKGMpe2Z1bmN0aW9uIGQoYSxjKXt2YXIgZD1lKChhPWIucmdiKGEpKS5yLChjPWIucmdiKGMpKS5yKSxmPWUoYS5nLGMuZyksZz1lKGEuYixjLmIpLGg9ZShhLm9wYWNpdHksYy5vcGFjaXR5KTtyZXR1cm4gZnVuY3Rpb24oYil7cmV0dXJuIGEucj1kKGIpLGEuZz1mKGIpLGEuYj1nKGIpLGEub3BhY2l0eT1oKGIpLGErIiJ9fXZhciBlPWooYyk7cmV0dXJuIGQuZ2FtbWE9YSxkfSgxKSxOPWwoZCksTz1sKGUpLFA9L1stK10/KD86XGQrXC4/XGQqfFwuP1xkKykoPzpbZUVdWy0rXT9cZCspPy9nLFE9bmV3IFJlZ0V4cChQLnNvdXJjZSwiZyIpLFI9MTgwL01hdGguUEksUz17dHJhbnNsYXRlWDowLHRyYW5zbGF0ZVk6MCxyb3RhdGU6MCxza2V3WDowLHNjYWxlWDoxLHNjYWxlWToxfSxUPXkodywicHgsICIsInB4KSIsImRlZykiKSxVPXkoeCwiLCAiLCIpIiwiKSIpLFY9TWF0aC5TUVJUMixXPTIsWD00LFk9MWUtMTIsWj1EKGkpLCQ9RChrKSxfPUYoaSksYWE9RihrKSxiYT1HKGkpLGNhPUcoayk7YS5pbnRlcnBvbGF0ZT10LGEuaW50ZXJwb2xhdGVBcnJheT1tLGEuaW50ZXJwb2xhdGVCYXNpcz1kLGEuaW50ZXJwb2xhdGVCYXNpc0Nsb3NlZD1lLGEuaW50ZXJwb2xhdGVEYXRlPW4sYS5pbnRlcnBvbGF0ZU51bWJlcj1vLGEuaW50ZXJwb2xhdGVPYmplY3Q9cCxhLmludGVycG9sYXRlUm91bmQ9dSxhLmludGVycG9sYXRlU3RyaW5nPXMsYS5pbnRlcnBvbGF0ZVRyYW5zZm9ybUNzcz1ULGEuaW50ZXJwb2xhdGVUcmFuc2Zvcm1Tdmc9VSxhLmludGVycG9sYXRlWm9vbT1DLGEuaW50ZXJwb2xhdGVSZ2I9TSxhLmludGVycG9sYXRlUmdiQmFzaXM9TixhLmludGVycG9sYXRlUmdiQmFzaXNDbG9zZWQ9TyxhLmludGVycG9sYXRlSHNsPVosYS5pbnRlcnBvbGF0ZUhzbExvbmc9JCxhLmludGVycG9sYXRlTGFiPUUsYS5pbnRlcnBvbGF0ZUhjbD1fLGEuaW50ZXJwb2xhdGVIY2xMb25nPWFhLGEuaW50ZXJwb2xhdGVDdWJlaGVsaXg9YmEsYS5pbnRlcnBvbGF0ZUN1YmVoZWxpeExvbmc9Y2EsYS5xdWFudGl6ZT1ILE9iamVjdC5kZWZpbmVQcm9wZXJ0eShhLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KX0pfSx7ImQzLWNvbG9yIjozfV0sNzpbZnVuY3Rpb24oYSxiLGMpeyFmdW5jdGlvbihkLGUpeyJvYmplY3QiPT10eXBlb2YgYyYmInVuZGVmaW5lZCIhPXR5cGVvZiBiP2UoYyxhKCJkMy1hcnJheSIpLGEoImQzLWNvbGxlY3Rpb24iKSxhKCJkMy1pbnRlcnBvbGF0ZSIpLGEoImQzLWZvcm1hdCIpLGEoImQzLXRpbWUiKSxhKCJkMy10aW1lLWZvcm1hdCIpLGEoImQzLWNvbG9yIikpOiJmdW5jdGlvbiI9PXR5cGVvZiBkZWZpbmUmJmRlZmluZS5hbWQ/ZGVmaW5lKFsiZXhwb3J0cyIsImQzLWFycmF5IiwiZDMtY29sbGVjdGlvbiIsImQzLWludGVycG9sYXRlIiwiZDMtZm9ybWF0IiwiZDMtdGltZSIsImQzLXRpbWUtZm9ybWF0IiwiZDMtY29sb3IiXSxlKTplKGQuZDM9ZC5kM3x8e30sZC5kMyxkLmQzLGQuZDMsZC5kMyxkLmQzLGQuZDMsZC5kMyl9KHRoaXMsZnVuY3Rpb24oYSxiLGMsZCxlLGYsZyxoKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gaShhKXtmdW5jdGlvbiBiKGIpe3ZhciBjPWIrIiIsZz1kLmdldChjKTtpZighZyl7aWYoZiE9PVopcmV0dXJuIGY7ZC5zZXQoYyxnPWUucHVzaChiKSl9cmV0dXJuIGFbKGctMSklYS5sZW5ndGhdfXZhciBkPWMubWFwKCksZT1bXSxmPVo7cmV0dXJuIGE9bnVsbD09YT9bXTpZLmNhbGwoYSksYi5kb21haW49ZnVuY3Rpb24oYSl7aWYoIWFyZ3VtZW50cy5sZW5ndGgpcmV0dXJuIGUuc2xpY2UoKTtlPVtdLGQ9Yy5tYXAoKTtmb3IodmFyIGYsZyxoPS0xLGk9YS5sZW5ndGg7KytoPGk7KWQuaGFzKGc9KGY9YVtoXSkrIiIpfHxkLnNldChnLGUucHVzaChmKSk7cmV0dXJuIGJ9LGIucmFuZ2U9ZnVuY3Rpb24oYyl7CnJldHVybiBhcmd1bWVudHMubGVuZ3RoPyhhPVkuY2FsbChjKSxiKTphLnNsaWNlKCl9LGIudW5rbm93bj1mdW5jdGlvbihhKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oZj1hLGIpOmZ9LGIuY29weT1mdW5jdGlvbigpe3JldHVybiBpKCkuZG9tYWluKGUpLnJhbmdlKGEpLnVua25vd24oZil9LGJ9ZnVuY3Rpb24gaigpe2Z1bmN0aW9uIGEoKXt2YXIgYT1mKCkubGVuZ3RoLGU9aFsxXTxoWzBdLGk9aFtlLTBdLGo9aFsxLWVdO2M9KGotaSkvTWF0aC5tYXgoMSxhLWwrMiptKSxrJiYoYz1NYXRoLmZsb29yKGMpKSxpKz0oai1pLWMqKGEtbCkpKm4sZD1jKigxLWwpLGsmJihpPU1hdGgucm91bmQoaSksZD1NYXRoLnJvdW5kKGQpKTt2YXIgbz1iLnJhbmdlKGEpLm1hcChmdW5jdGlvbihhKXtyZXR1cm4gaStjKmF9KTtyZXR1cm4gZyhlP28ucmV2ZXJzZSgpOm8pfXZhciBjLGQsZT1pKCkudW5rbm93bih2b2lkIDApLGY9ZS5kb21haW4sZz1lLnJhbmdlLGg9WzAsMV0saz0hMSxsPTAsbT0wLG49LjU7cmV0dXJuIGRlbGV0ZSBlLnVua25vd24sZS5kb21haW49ZnVuY3Rpb24oYil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGYoYiksYSgpKTpmKCl9LGUucmFuZ2U9ZnVuY3Rpb24oYil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGg9WytiWzBdLCtiWzFdXSxhKCkpOmguc2xpY2UoKX0sZS5yYW5nZVJvdW5kPWZ1bmN0aW9uKGIpe3JldHVybiBoPVsrYlswXSwrYlsxXV0saz0hMCxhKCl9LGUuYmFuZHdpZHRoPWZ1bmN0aW9uKCl7cmV0dXJuIGR9LGUuc3RlcD1mdW5jdGlvbigpe3JldHVybiBjfSxlLnJvdW5kPWZ1bmN0aW9uKGIpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhrPSEhYixhKCkpOmt9LGUucGFkZGluZz1mdW5jdGlvbihiKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obD1tPU1hdGgubWF4KDAsTWF0aC5taW4oMSxiKSksYSgpKTpsfSxlLnBhZGRpbmdJbm5lcj1mdW5jdGlvbihiKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obD1NYXRoLm1heCgwLE1hdGgubWluKDEsYikpLGEoKSk6bH0sZS5wYWRkaW5nT3V0ZXI9ZnVuY3Rpb24oYil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG09TWF0aC5tYXgoMCxNYXRoLm1pbigxLGIpKSxhKCkpOm19LGUuYWxpZ249ZnVuY3Rpb24oYil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG49TWF0aC5tYXgoMCxNYXRoLm1pbigxLGIpKSxhKCkpOm59LGUuY29weT1mdW5jdGlvbigpe3JldHVybiBqKCkuZG9tYWluKGYoKSkucmFuZ2UoaCkucm91bmQoaykucGFkZGluZ0lubmVyKGwpLnBhZGRpbmdPdXRlcihtKS5hbGlnbihuKX0sYSgpfWZ1bmN0aW9uIGsoYSl7dmFyIGI9YS5jb3B5O3JldHVybiBhLnBhZGRpbmc9YS5wYWRkaW5nT3V0ZXIsZGVsZXRlIGEucGFkZGluZ0lubmVyLGRlbGV0ZSBhLnBhZGRpbmdPdXRlcixhLmNvcHk9ZnVuY3Rpb24oKXtyZXR1cm4gayhiKCkpfSxhfWZ1bmN0aW9uIGwoKXtyZXR1cm4gayhqKCkucGFkZGluZ0lubmVyKDEpKX1mdW5jdGlvbiBtKGEpe3JldHVybiBmdW5jdGlvbigpe3JldHVybiBhfX1mdW5jdGlvbiBuKGEpe3JldHVybithfWZ1bmN0aW9uIG8oYSxiKXtyZXR1cm4oYi09YT0rYSk/ZnVuY3Rpb24oYyl7cmV0dXJuKGMtYSkvYn06bShiKX1mdW5jdGlvbiBwKGEpe3JldHVybiBmdW5jdGlvbihiLGMpe3ZhciBkPWEoYj0rYixjPStjKTtyZXR1cm4gZnVuY3Rpb24oYSl7cmV0dXJuIGE8PWI/MDphPj1jPzE6ZChhKX19fWZ1bmN0aW9uIHEoYSl7cmV0dXJuIGZ1bmN0aW9uKGIsYyl7dmFyIGQ9YShiPStiLGM9K2MpO3JldHVybiBmdW5jdGlvbihhKXtyZXR1cm4gYTw9MD9iOmE+PTE/YzpkKGEpfX19ZnVuY3Rpb24gcihhLGIsYyxkKXt2YXIgZT1hWzBdLGY9YVsxXSxnPWJbMF0saD1iWzFdO3JldHVybiBmPGU/KGU9YyhmLGUpLGc9ZChoLGcpKTooZT1jKGUsZiksZz1kKGcsaCkpLGZ1bmN0aW9uKGEpe3JldHVybiBnKGUoYSkpfX1mdW5jdGlvbiBzKGEsYyxkLGUpe3ZhciBmPU1hdGgubWluKGEubGVuZ3RoLGMubGVuZ3RoKS0xLGc9bmV3IEFycmF5KGYpLGg9bmV3IEFycmF5KGYpLGk9LTE7Zm9yKGFbZl08YVswXSYmKGE9YS5zbGljZSgpLnJldmVyc2UoKSxjPWMuc2xpY2UoKS5yZXZlcnNlKCkpOysraTxmOylnW2ldPWQoYVtpXSxhW2krMV0pLGhbaV09ZShjW2ldLGNbaSsxXSk7cmV0dXJuIGZ1bmN0aW9uKGMpe3ZhciBkPWIuYmlzZWN0KGEsYywxLGYpLTE7cmV0dXJuIGhbZF0oZ1tkXShjKSl9fWZ1bmN0aW9uIHQoYSxiKXtyZXR1cm4gYi5kb21haW4oYS5kb21haW4oKSkucmFuZ2UoYS5yYW5nZSgpKS5pbnRlcnBvbGF0ZShhLmludGVycG9sYXRlKCkpLmNsYW1wKGEuY2xhbXAoKSl9ZnVuY3Rpb24gdShhLGIpe2Z1bmN0aW9uIGMoKXtyZXR1cm4gZj1NYXRoLm1pbihpLmxlbmd0aCxqLmxlbmd0aCk+Mj9zOnIsZz1oPW51bGwsZX1mdW5jdGlvbiBlKGIpe3JldHVybihnfHwoZz1mKGksaixsP3AoYSk6YSxrKSkpKCtiKX12YXIgZixnLGgsaT0kLGo9JCxrPWQuaW50ZXJwb2xhdGUsbD0hMTtyZXR1cm4gZS5pbnZlcnQ9ZnVuY3Rpb24oYSl7cmV0dXJuKGh8fChoPWYoaixpLG8sbD9xKGIpOmIpKSkoK2EpfSxlLmRvbWFpbj1mdW5jdGlvbihhKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oaT1YLmNhbGwoYSxuKSxjKCkpOmkuc2xpY2UoKX0sZS5yYW5nZT1mdW5jdGlvbihhKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oaj1ZLmNhbGwoYSksYygpKTpqLnNsaWNlKCl9LGUucmFuZ2VSb3VuZD1mdW5jdGlvbihhKXtyZXR1cm4gaj1ZLmNhbGwoYSksaz1kLmludGVycG9sYXRlUm91bmQsYygpfSxlLmNsYW1wPWZ1bmN0aW9uKGEpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhsPSEhYSxjKCkpOmx9LGUuaW50ZXJwb2xhdGU9ZnVuY3Rpb24oYSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGs9YSxjKCkpOmt9LGMoKX1mdW5jdGlvbiB2KGEsYyxkKXt2YXIgZixnPWFbMF0saD1hW2EubGVuZ3RoLTFdLGk9Yi50aWNrU3RlcChnLGgsbnVsbD09Yz8xMDpjKTtzd2l0Y2goZD1lLmZvcm1hdFNwZWNpZmllcihudWxsPT1kPyIsZiI6ZCksZC50eXBlKXtjYXNlInMiOnZhciBqPU1hdGgubWF4KE1hdGguYWJzKGcpLE1hdGguYWJzKGgpKTtyZXR1cm4gbnVsbCE9ZC5wcmVjaXNpb258fGlzTmFOKGY9ZS5wcmVjaXNpb25QcmVmaXgoaSxqKSl8fChkLnByZWNpc2lvbj1mKSxlLmZvcm1hdFByZWZpeChkLGopO2Nhc2UiIjpjYXNlImUiOmNhc2UiZyI6Y2FzZSJwIjpjYXNlInIiOm51bGwhPWQucHJlY2lzaW9ufHxpc05hTihmPWUucHJlY2lzaW9uUm91bmQoaSxNYXRoLm1heChNYXRoLmFicyhnKSxNYXRoLmFicyhoKSkpKXx8KGQucHJlY2lzaW9uPWYtKCJlIj09PWQudHlwZSkpO2JyZWFrO2Nhc2UiZiI6Y2FzZSIlIjpudWxsIT1kLnByZWNpc2lvbnx8aXNOYU4oZj1lLnByZWNpc2lvbkZpeGVkKGkpKXx8KGQucHJlY2lzaW9uPWYtMiooIiUiPT09ZC50eXBlKSl9cmV0dXJuIGUuZm9ybWF0KGQpfWZ1bmN0aW9uIHcoYSl7dmFyIGM9YS5kb21haW47cmV0dXJuIGEudGlja3M9ZnVuY3Rpb24oYSl7dmFyIGQ9YygpO3JldHVybiBiLnRpY2tzKGRbMF0sZFtkLmxlbmd0aC0xXSxudWxsPT1hPzEwOmEpfSxhLnRpY2tGb3JtYXQ9ZnVuY3Rpb24oYSxiKXtyZXR1cm4gdihjKCksYSxiKX0sYS5uaWNlPWZ1bmN0aW9uKGQpe3ZhciBlPWMoKSxmPWUubGVuZ3RoLTEsZz1udWxsPT1kPzEwOmQsaD1lWzBdLGk9ZVtmXSxqPWIudGlja1N0ZXAoaCxpLGcpO3JldHVybiBqJiYoaj1iLnRpY2tTdGVwKE1hdGguZmxvb3IoaC9qKSpqLE1hdGguY2VpbChpL2opKmosZyksZVswXT1NYXRoLmZsb29yKGgvaikqaixlW2ZdPU1hdGguY2VpbChpL2opKmosYyhlKSksYX0sYX1mdW5jdGlvbiB4KCl7dmFyIGE9dShvLGQuaW50ZXJwb2xhdGVOdW1iZXIpO3JldHVybiBhLmNvcHk9ZnVuY3Rpb24oKXtyZXR1cm4gdChhLHgoKSl9LHcoYSl9ZnVuY3Rpb24geSgpe2Z1bmN0aW9uIGEoYSl7cmV0dXJuK2F9dmFyIGI9WzAsMV07cmV0dXJuIGEuaW52ZXJ0PWEsYS5kb21haW49YS5yYW5nZT1mdW5jdGlvbihjKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oYj1YLmNhbGwoYyxuKSxhKTpiLnNsaWNlKCl9LGEuY29weT1mdW5jdGlvbigpe3JldHVybiB5KCkuZG9tYWluKGIpfSx3KGEpfWZ1bmN0aW9uIHooYSxiKXthPWEuc2xpY2UoKTt2YXIgYyxkPTAsZT1hLmxlbmd0aC0xLGY9YVtkXSxnPWFbZV07cmV0dXJuIGc8ZiYmKGM9ZCxkPWUsZT1jLGM9ZixmPWcsZz1jKSxhW2RdPWIuZmxvb3IoZiksYVtlXT1iLmNlaWwoZyksYX1mdW5jdGlvbiBBKGEsYil7cmV0dXJuKGI9TWF0aC5sb2coYi9hKSk/ZnVuY3Rpb24oYyl7cmV0dXJuIE1hdGgubG9nKGMvYSkvYn06bShiKX1mdW5jdGlvbiBCKGEsYil7cmV0dXJuIGE8MD9mdW5jdGlvbihjKXtyZXR1cm4tTWF0aC5wb3coLWIsYykqTWF0aC5wb3coLWEsMS1jKX06ZnVuY3Rpb24oYyl7cmV0dXJuIE1hdGgucG93KGIsYykqTWF0aC5wb3coYSwxLWMpfX1mdW5jdGlvbiBDKGEpe3JldHVybiBpc0Zpbml0ZShhKT8rKCIxZSIrYSk6YTwwPzA6YX1mdW5jdGlvbiBEKGEpe3JldHVybiAxMD09PWE/QzphPT09TWF0aC5FP01hdGguZXhwOmZ1bmN0aW9uKGIpe3JldHVybiBNYXRoLnBvdyhhLGIpfX1mdW5jdGlvbiBFKGEpe3JldHVybiBhPT09TWF0aC5FP01hdGgubG9nOjEwPT09YSYmTWF0aC5sb2cxMHx8Mj09PWEmJk1hdGgubG9nMnx8KGE9TWF0aC5sb2coYSksZnVuY3Rpb24oYil7cmV0dXJuIE1hdGgubG9nKGIpL2F9KX1mdW5jdGlvbiBGKGEpe3JldHVybiBmdW5jdGlvbihiKXtyZXR1cm4tYSgtYil9fWZ1bmN0aW9uIEcoKXtmdW5jdGlvbiBhKCl7cmV0dXJuIGc9RShmKSxoPUQoZiksZCgpWzBdPDAmJihnPUYoZyksaD1GKGgpKSxjfXZhciBjPXUoQSxCKS5kb21haW4oWzEsMTBdKSxkPWMuZG9tYWluLGY9MTAsZz1FKDEwKSxoPUQoMTApO3JldHVybiBjLmJhc2U9ZnVuY3Rpb24oYil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGY9K2IsYSgpKTpmfSxjLmRvbWFpbj1mdW5jdGlvbihiKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oZChiKSxhKCkpOmQoKX0sYy50aWNrcz1mdW5jdGlvbihhKXt2YXIgYyxlPWQoKSxpPWVbMF0saj1lW2UubGVuZ3RoLTFdOyhjPWo8aSkmJihuPWksaT1qLGo9bik7dmFyIGssbCxtLG49ZyhpKSxvPWcoaikscD1udWxsPT1hPzEwOithLHE9W107aWYoIShmJTEpJiZvLW48cCl7aWYobj1NYXRoLnJvdW5kKG4pLTEsbz1NYXRoLnJvdW5kKG8pKzEsaT4wKXtmb3IoO248bzsrK24pZm9yKGw9MSxrPWgobik7bDxmOysrbClpZihtPWsqbCwhKG08aSkpe2lmKG0+ailicmVhaztxLnB1c2gobSl9fWVsc2UgZm9yKDtuPG87KytuKWZvcihsPWYtMSxrPWgobik7bD49MTstLWwpaWYobT1rKmwsIShtPGkpKXtpZihtPmopYnJlYWs7cS5wdXNoKG0pfX1lbHNlIHE9Yi50aWNrcyhuLG8sTWF0aC5taW4oby1uLHApKS5tYXAoaCk7cmV0dXJuIGM/cS5yZXZlcnNlKCk6cX0sYy50aWNrRm9ybWF0PWZ1bmN0aW9uKGEsYil7aWYobnVsbD09YiYmKGI9MTA9PT1mPyIuMGUiOiIsIiksImZ1bmN0aW9uIiE9dHlwZW9mIGImJihiPWUuZm9ybWF0KGIpKSxhPT09MS8wKXJldHVybiBiO251bGw9PWEmJihhPTEwKTt2YXIgZD1NYXRoLm1heCgxLGYqYS9jLnRpY2tzKCkubGVuZ3RoKTtyZXR1cm4gZnVuY3Rpb24oYSl7dmFyIGM9YS9oKE1hdGgucm91bmQoZyhhKSkpO3JldHVybiBjKmY8Zi0uNSYmKGMqPWYpLGM8PWQ/YihhKToiIn19LGMubmljZT1mdW5jdGlvbigpe3JldHVybiBkKHooZCgpLHtmbG9vcjpmdW5jdGlvbihhKXtyZXR1cm4gaChNYXRoLmZsb29yKGcoYSkpKX0sY2VpbDpmdW5jdGlvbihhKXtyZXR1cm4gaChNYXRoLmNlaWwoZyhhKSkpfX0pKX0sYy5jb3B5PWZ1bmN0aW9uKCl7cmV0dXJuIHQoYyxHKCkuYmFzZShmKSl9LGN9ZnVuY3Rpb24gSChhLGIpe3JldHVybiBhPDA/LU1hdGgucG93KC1hLGIpOk1hdGgucG93KGEsYil9ZnVuY3Rpb24gSSgpe2Z1bmN0aW9uIGEoYSxiKXtyZXR1cm4oYj1IKGIsYyktKGE9SChhLGMpKSk/ZnVuY3Rpb24oZCl7cmV0dXJuKEgoZCxjKS1hKS9ifTptKGIpfWZ1bmN0aW9uIGIoYSxiKXtyZXR1cm4gYj1IKGIsYyktKGE9SChhLGMpKSxmdW5jdGlvbihkKXtyZXR1cm4gSChhK2IqZCwxL2MpfX12YXIgYz0xLGQ9dShhLGIpLGU9ZC5kb21haW47cmV0dXJuIGQuZXhwb25lbnQ9ZnVuY3Rpb24oYSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGM9K2EsZShlKCkpKTpjfSxkLmNvcHk9ZnVuY3Rpb24oKXtyZXR1cm4gdChkLEkoKS5leHBvbmVudChjKSl9LHcoZCl9ZnVuY3Rpb24gSigpe3JldHVybiBJKCkuZXhwb25lbnQoLjUpfWZ1bmN0aW9uIEsoKXtmdW5jdGlvbiBhKCl7dmFyIGE9MCxnPU1hdGgubWF4KDEsZS5sZW5ndGgpO2ZvcihmPW5ldyBBcnJheShnLTEpOysrYTxnOylmW2EtMV09Yi5xdWFudGlsZShkLGEvZyk7cmV0dXJuIGN9ZnVuY3Rpb24gYyhhKXtpZighaXNOYU4oYT0rYSkpcmV0dXJuIGVbYi5iaXNlY3QoZixhKV19dmFyIGQ9W10sZT1bXSxmPVtdO3JldHVybiBjLmludmVydEV4dGVudD1mdW5jdGlvbihhKXt2YXIgYj1lLmluZGV4T2YoYSk7cmV0dXJuIGI8MD9bTmFOLE5hTl06W2I+MD9mW2ItMV06ZFswXSxiPGYubGVuZ3RoP2ZbYl06ZFtkLmxlbmd0aC0xXV19LGMuZG9tYWluPWZ1bmN0aW9uKGMpe2lmKCFhcmd1bWVudHMubGVuZ3RoKXJldHVybiBkLnNsaWNlKCk7ZD1bXTtmb3IodmFyIGUsZj0wLGc9Yy5sZW5ndGg7ZjxnOysrZillPWNbZl0sbnVsbD09ZXx8aXNOYU4oZT0rZSl8fGQucHVzaChlKTtyZXR1cm4gZC5zb3J0KGIuYXNjZW5kaW5nKSxhKCl9LGMucmFuZ2U9ZnVuY3Rpb24oYil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGU9WS5jYWxsKGIpLGEoKSk6ZS5zbGljZSgpfSxjLnF1YW50aWxlcz1mdW5jdGlvbigpe3JldHVybiBmLnNsaWNlKCl9LGMuY29weT1mdW5jdGlvbigpe3JldHVybiBLKCkuZG9tYWluKGQpLnJhbmdlKGUpfSxjfWZ1bmN0aW9uIEwoKXtmdW5jdGlvbiBhKGEpe2lmKGE8PWEpcmV0dXJuIGhbYi5iaXNlY3QoZyxhLDAsZildfWZ1bmN0aW9uIGMoKXt2YXIgYj0tMTtmb3IoZz1uZXcgQXJyYXkoZik7KytiPGY7KWdbYl09KChiKzEpKmUtKGItZikqZCkvKGYrMSk7cmV0dXJuIGF9dmFyIGQ9MCxlPTEsZj0xLGc9Wy41XSxoPVswLDFdO3JldHVybiBhLmRvbWFpbj1mdW5jdGlvbihhKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oZD0rYVswXSxlPSthWzFdLGMoKSk6W2QsZV19LGEucmFuZ2U9ZnVuY3Rpb24oYSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGY9KGg9WS5jYWxsKGEpKS5sZW5ndGgtMSxjKCkpOmguc2xpY2UoKX0sYS5pbnZlcnRFeHRlbnQ9ZnVuY3Rpb24oYSl7dmFyIGI9aC5pbmRleE9mKGEpO3JldHVybiBiPDA/W05hTixOYU5dOmI8MT9bZCxnWzBdXTpiPj1mP1tnW2YtMV0sZV06W2dbYi0xXSxnW2JdXX0sYS5jb3B5PWZ1bmN0aW9uKCl7cmV0dXJuIEwoKS5kb21haW4oW2QsZV0pLnJhbmdlKGgpfSx3KGEpfWZ1bmN0aW9uIE0oKXtmdW5jdGlvbiBhKGEpe2lmKGE8PWEpcmV0dXJuIGRbYi5iaXNlY3QoYyxhLDAsZSldfXZhciBjPVsuNV0sZD1bMCwxXSxlPTE7cmV0dXJuIGEuZG9tYWluPWZ1bmN0aW9uKGIpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhjPVkuY2FsbChiKSxlPU1hdGgubWluKGMubGVuZ3RoLGQubGVuZ3RoLTEpLGEpOmMuc2xpY2UoKX0sYS5yYW5nZT1mdW5jdGlvbihiKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oZD1ZLmNhbGwoYiksZT1NYXRoLm1pbihjLmxlbmd0aCxkLmxlbmd0aC0xKSxhKTpkLnNsaWNlKCl9LGEuaW52ZXJ0RXh0ZW50PWZ1bmN0aW9uKGEpe3ZhciBiPWQuaW5kZXhPZihhKTtyZXR1cm5bY1tiLTFdLGNbYl1dfSxhLmNvcHk9ZnVuY3Rpb24oKXtyZXR1cm4gTSgpLmRvbWFpbihjKS5yYW5nZShkKX0sYX1mdW5jdGlvbiBOKGEpe3JldHVybiBuZXcgRGF0ZShhKX1mdW5jdGlvbiBPKGEpe3JldHVybiBhIGluc3RhbmNlb2YgRGF0ZT8rYTorbmV3IERhdGUoKCthKSl9ZnVuY3Rpb24gUChhLGMsZSxmLGcsaCxpLGosayl7ZnVuY3Rpb24gbChiKXtyZXR1cm4oaShiKTxiP3I6aChiKTxiP3M6ZyhiKTxiP3Y6ZihiKTxiP3c6YyhiKTxiP2UoYik8Yj94Onk6YShiKTxiP0E6QikoYil9ZnVuY3Rpb24gbShjLGQsZSxmKXtpZihudWxsPT1jJiYoYz0xMCksIm51bWJlciI9PXR5cGVvZiBjKXt2YXIgZz1NYXRoLmFicyhlLWQpL2MsaD1iLmJpc2VjdG9yKGZ1bmN0aW9uKGEpe3JldHVybiBhWzJdfSkucmlnaHQoQyxnKTtoPT09Qy5sZW5ndGg/KGY9Yi50aWNrU3RlcChkL2ZhLGUvZmEsYyksYz1hKTpoPyhoPUNbZy9DW2gtMV1bMl08Q1toXVsyXS9nP2gtMTpoXSxmPWhbMV0sYz1oWzBdKTooZj1iLnRpY2tTdGVwKGQsZSxjKSxjPWopfXJldHVybiBudWxsPT1mP2M6Yy5ldmVyeShmKX12YXIgbj11KG8sZC5pbnRlcnBvbGF0ZU51bWJlcikscD1uLmludmVydCxxPW4uZG9tYWluLHI9aygiLiVMIikscz1rKCI6JVMiKSx2PWsoIiVJOiVNIiksdz1rKCIlSSAlcCIpLHg9aygiJWEgJWQiKSx5PWsoIiViICVkIiksQT1rKCIlQiIpLEI9aygiJVkiKSxDPVtbaSwxLF9dLFtpLDUsNSpfXSxbaSwxNSwxNSpfXSxbaSwzMCwzMCpfXSxbaCwxLGFhXSxbaCw1LDUqYWFdLFtoLDE1LDE1KmFhXSxbaCwzMCwzMCphYV0sW2csMSxiYV0sW2csMywzKmJhXSxbZyw2LDYqYmFdLFtnLDEyLDEyKmJhXSxbZiwxLGNhXSxbZiwyLDIqY2FdLFtlLDEsZGFdLFtjLDEsZWFdLFtjLDMsMyplYV0sW2EsMSxmYV1dO3JldHVybiBuLmludmVydD1mdW5jdGlvbihhKXtyZXR1cm4gbmV3IERhdGUocChhKSl9LG4uZG9tYWluPWZ1bmN0aW9uKGEpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoP3EoWC5jYWxsKGEsTykpOnEoKS5tYXAoTil9LG4udGlja3M9ZnVuY3Rpb24oYSxiKXt2YXIgYyxkPXEoKSxlPWRbMF0sZj1kW2QubGVuZ3RoLTFdLGc9ZjxlO3JldHVybiBnJiYoYz1lLGU9ZixmPWMpLGM9bShhLGUsZixiKSxjPWM/Yy5yYW5nZShlLGYrMSk6W10sZz9jLnJldmVyc2UoKTpjfSxuLnRpY2tGb3JtYXQ9ZnVuY3Rpb24oYSxiKXtyZXR1cm4gbnVsbD09Yj9sOmsoYil9LG4ubmljZT1mdW5jdGlvbihhLGIpe3ZhciBjPXEoKTtyZXR1cm4oYT1tKGEsY1swXSxjW2MubGVuZ3RoLTFdLGIpKT9xKHooYyxhKSk6bn0sbi5jb3B5PWZ1bmN0aW9uKCl7cmV0dXJuIHQobixQKGEsYyxlLGYsZyxoLGksaixrKSl9LG59ZnVuY3Rpb24gUSgpe3JldHVybiBQKGYudGltZVllYXIsZi50aW1lTW9udGgsZi50aW1lV2VlayxmLnRpbWVEYXksZi50aW1lSG91cixmLnRpbWVNaW51dGUsZi50aW1lU2Vjb25kLGYudGltZU1pbGxpc2Vjb25kLGcudGltZUZvcm1hdCkuZG9tYWluKFtuZXcgRGF0ZSgyZTMsMCwxKSxuZXcgRGF0ZSgyZTMsMCwyKV0pfWZ1bmN0aW9uIFIoKXtyZXR1cm4gUChmLnV0Y1llYXIsZi51dGNNb250aCxmLnV0Y1dlZWssZi51dGNEYXksZi51dGNIb3VyLGYudXRjTWludXRlLGYudXRjU2Vjb25kLGYudXRjTWlsbGlzZWNvbmQsZy51dGNGb3JtYXQpLmRvbWFpbihbRGF0ZS5VVEMoMmUzLDAsMSksRGF0ZS5VVEMoMmUzLDAsMildKX1mdW5jdGlvbiBTKGEpe3JldHVybiBhLm1hdGNoKC8uezZ9L2cpLm1hcChmdW5jdGlvbihhKXtyZXR1cm4iIyIrYX0pfWZ1bmN0aW9uIFQoYSl7KGE8MHx8YT4xKSYmKGEtPU1hdGguZmxvb3IoYSkpO3ZhciBiPU1hdGguYWJzKGEtLjUpO3JldHVybiBuYS5oPTM2MCphLTEwMCxuYS5zPTEuNS0xLjUqYixuYS5sPS44LS45KmIsbmErIiJ9ZnVuY3Rpb24gVShhKXt2YXIgYj1hLmxlbmd0aDtyZXR1cm4gZnVuY3Rpb24oYyl7cmV0dXJuIGFbTWF0aC5tYXgoMCxNYXRoLm1pbihiLTEsTWF0aC5mbG9vcihjKmIpKSldfX1mdW5jdGlvbiBWKGEpe2Z1bmN0aW9uIGIoYil7dmFyIGY9KGItYykvKGQtYyk7cmV0dXJuIGEoZT9NYXRoLm1heCgwLE1hdGgubWluKDEsZikpOmYpfXZhciBjPTAsZD0xLGU9ITE7cmV0dXJuIGIuZG9tYWluPWZ1bmN0aW9uKGEpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhjPSthWzBdLGQ9K2FbMV0sYik6W2MsZF19LGIuY2xhbXA9ZnVuY3Rpb24oYSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGU9ISFhLGIpOmV9LGIuaW50ZXJwb2xhdG9yPWZ1bmN0aW9uKGMpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhhPWMsYik6YX0sYi5jb3B5PWZ1bmN0aW9uKCl7cmV0dXJuIFYoYSkuZG9tYWluKFtjLGRdKS5jbGFtcChlKX0sdyhiKX12YXIgVz1BcnJheS5wcm90b3R5cGUsWD1XLm1hcCxZPVcuc2xpY2UsWj17bmFtZToiaW1wbGljaXQifSwkPVswLDFdLF89MWUzLGFhPTYwKl8sYmE9NjAqYWEsY2E9MjQqYmEsZGE9NypjYSxlYT0zMCpjYSxmYT0zNjUqY2EsZ2E9UygiMWY3N2I0ZmY3ZjBlMmNhMDJjZDYyNzI4OTQ2N2JkOGM1NjRiZTM3N2MyN2Y3ZjdmYmNiZDIyMTdiZWNmIiksaGE9UygiMzkzYjc5NTI1NGEzNmI2ZWNmOWM5ZWRlNjM3OTM5OGNhMjUyYjVjZjZiY2VkYjljOGM2ZDMxYmQ5ZTM5ZTdiYTUyZTdjYjk0ODQzYzM5YWQ0OTRhZDY2MTZiZTc5NjljN2I0MTczYTU1MTk0Y2U2ZGJkZGU5ZWQ2IiksaWE9UygiMzE4MmJkNmJhZWQ2OWVjYWUxYzZkYmVmZTY1NTBkZmQ4ZDNjZmRhZTZiZmRkMGEyMzFhMzU0NzRjNDc2YTFkOTliYzdlOWMwNzU2YmIxOWU5YWM4YmNiZGRjZGFkYWViNjM2MzYzOTY5Njk2YmRiZGJkZDlkOWQ5IiksamE9UygiMWY3N2I0YWVjN2U4ZmY3ZjBlZmZiYjc4MmNhMDJjOThkZjhhZDYyNzI4ZmY5ODk2OTQ2N2JkYzViMGQ1OGM1NjRiYzQ5Yzk0ZTM3N2MyZjdiNmQyN2Y3ZjdmYzdjN2M3YmNiZDIyZGJkYjhkMTdiZWNmOWVkYWU1Iiksa2E9ZC5pbnRlcnBvbGF0ZUN1YmVoZWxpeExvbmcoaC5jdWJlaGVsaXgoMzAwLC41LDApLGguY3ViZWhlbGl4KC0yNDAsLjUsMSkpLGxhPWQuaW50ZXJwb2xhdGVDdWJlaGVsaXhMb25nKGguY3ViZWhlbGl4KC0xMDAsLjc1LC4zNSksaC5jdWJlaGVsaXgoODAsMS41LC44KSksbWE9ZC5pbnRlcnBvbGF0ZUN1YmVoZWxpeExvbmcoaC5jdWJlaGVsaXgoMjYwLC43NSwuMzUpLGguY3ViZWhlbGl4KDgwLDEuNSwuOCkpLG5hPWguY3ViZWhlbGl4KCksb2E9VShTKCI0NDAxNTQ0NDAyNTY0NTA0NTc0NTA1NTk0NjA3NWE0NjA4NWM0NjBhNWQ0NjBiNWU0NzBkNjA0NzBlNjE0NzEwNjM0NzExNjQ0NzEzNjU0ODE0Njc0ODE2Njg0ODE3Njk0ODE4NmE0ODFhNmM0ODFiNmQ0ODFjNmU0ODFkNmY0ODFmNzA0ODIwNzE0ODIxNzM0ODIzNzQ0ODI0NzU0ODI1NzY0ODI2Nzc0ODI4Nzg0ODI5Nzk0NzJhN2E0NzJjN2E0NzJkN2I0NzJlN2M0NzJmN2Q0NjMwN2U0NjMyN2U0NjMzN2Y0NjM0ODA0NTM1ODE0NTM3ODE0NTM4ODI0NDM5ODM0NDNhODM0NDNiODQ0MzNkODQ0MzNlODU0MjNmODU0MjQwODY0MjQxODY0MTQyODc0MTQ0ODc0MDQ1ODg0MDQ2ODgzZjQ3ODgzZjQ4ODkzZTQ5ODkzZTRhODkzZTRjOGEzZDRkOGEzZDRlOGEzYzRmOGEzYzUwOGIzYjUxOGIzYjUyOGIzYTUzOGIzYTU0OGMzOTU1OGMzOTU2OGMzODU4OGMzODU5OGMzNzVhOGMzNzViOGQzNjVjOGQzNjVkOGQzNTVlOGQzNTVmOGQzNDYwOGQzNDYxOGQzMzYyOGQzMzYzOGQzMjY0OGUzMjY1OGUzMTY2OGUzMTY3OGUzMTY4OGUzMDY5OGUzMDZhOGUyZjZiOGUyZjZjOGUyZTZkOGUyZTZlOGUyZTZmOGUyZDcwOGUyZDcxOGUyYzcxOGUyYzcyOGUyYzczOGUyYjc0OGUyYjc1OGUyYTc2OGUyYTc3OGUyYTc4OGUyOTc5OGUyOTdhOGUyOTdiOGUyODdjOGUyODdkOGUyNzdlOGUyNzdmOGUyNzgwOGUyNjgxOGUyNjgyOGUyNjgyOGUyNTgzOGUyNTg0OGUyNTg1OGUyNDg2OGUyNDg3OGUyMzg4OGUyMzg5OGUyMzhhOGQyMjhiOGQyMjhjOGQyMjhkOGQyMThlOGQyMThmOGQyMTkwOGQyMTkxOGMyMDkyOGMyMDkyOGMyMDkzOGMxZjk0OGMxZjk1OGIxZjk2OGIxZjk3OGIxZjk4OGIxZjk5OGExZjlhOGExZTliOGExZTljODkxZTlkODkxZjllODkxZjlmODgxZmEwODgxZmExODgxZmExODcxZmEyODcyMGEzODYyMGE0ODYyMWE1ODUyMWE2ODUyMmE3ODUyMmE4ODQyM2E5ODMyNGFhODMyNWFiODIyNWFjODIyNmFkODEyN2FkODEyOGFlODAyOWFmN2YyYWIwN2YyY2IxN2UyZGIyN2QyZWIzN2MyZmI0N2MzMWI1N2IzMmI2N2EzNGI2NzkzNWI3NzkzN2I4NzgzOGI5NzczYWJhNzYzYmJiNzUzZGJjNzQzZmJjNzM0MGJkNzI0MmJlNzE0NGJmNzA0NmMwNmY0OGMxNmU0YWMxNmQ0Y2MyNmM0ZWMzNmI1MGM0NmE1MmM1Njk1NGM1Njg1NmM2Njc1OGM3NjU1YWM4NjQ1Y2M4NjM1ZWM5NjI2MGNhNjA2M2NiNWY2NWNiNWU2N2NjNWM2OWNkNWI2Y2NkNWE2ZWNlNTg3MGNmNTc3M2QwNTY3NWQwNTQ3N2QxNTM3YWQxNTE3Y2QyNTA3ZmQzNGU4MWQzNGQ4NGQ0NGI4NmQ1NDk4OWQ1NDg4YmQ2NDY4ZWQ2NDU5MGQ3NDM5M2Q3NDE5NWQ4NDA5OGQ4M2U5YmQ5M2M5ZGQ5M2JhMGRhMzlhMmRhMzdhNWRiMzZhOGRiMzRhYWRjMzJhZGRjMzBiMGRkMmZiMmRkMmRiNWRlMmJiOGRlMjliYWRlMjhiZGRmMjZjMGRmMjVjMmRmMjNjNWUwMjFjOGUwMjBjYWUxMWZjZGUxMWRkMGUxMWNkMmUyMWJkNWUyMWFkOGUyMTlkYWUzMTlkZGUzMThkZmUzMThlMmU0MThlNWU0MTllN2U0MTllYWU1MWFlY2U1MWJlZmU1MWNmMWU1MWRmNGU2MWVmNmU2MjBmOGU2MjFmYmU3MjNmZGU3MjUiKSkscGE9VShTKCIwMDAwMDQwMTAwMDUwMTAxMDYwMTAxMDgwMjAxMDkwMjAyMGIwMjAyMGQwMzAzMGYwMzAzMTIwNDA0MTQwNTA0MTYwNjA1MTgwNjA1MWEwNzA2MWMwODA3MWUwOTA3MjAwYTA4MjIwYjA5MjQwYzA5MjYwZDBhMjkwZTBiMmIxMDBiMmQxMTBjMmYxMjBkMzExMzBkMzQxNDBlMzYxNTBlMzgxNjBmM2IxODBmM2QxOTEwM2YxYTEwNDIxYzEwNDQxZDExNDcxZTExNDkyMDExNGIyMTExNGUyMjExNTAyNDEyNTMyNTEyNTUyNzEyNTgyOTExNWEyYTExNWMyYzExNWYyZDExNjEyZjExNjMzMTExNjUzMzEwNjczNDEwNjkzNjEwNmIzODEwNmMzOTBmNmUzYjBmNzAzZDBmNzEzZjBmNzI0MDBmNzQ0MjBmNzU0NDBmNzY0NTEwNzc0NzEwNzg0OTEwNzg0YTEwNzk0YzExN2E0ZTExN2I0ZjEyN2I1MTEyN2M1MjEzN2M1NDEzN2Q1NjE0N2Q1NzE1N2U1OTE1N2U1YTE2N2U1YzE2N2Y1ZDE3N2Y1ZjE4N2Y2MDE4ODA2MjE5ODA2NDFhODA2NTFhODA2NzFiODA2ODFjODE2YTFjODE2YjFkODE2ZDFkODE2ZTFlODE3MDFmODE3MjFmODE3MzIwODE3NTIxODE3NjIxODE3ODIyODE3OTIyODI3YjIzODI3YzIzODI3ZTI0ODI4MDI1ODI4MTI1ODE4MzI2ODE4NDI2ODE4NjI3ODE4ODI3ODE4OTI4ODE4YjI5ODE4YzI5ODE4ZTJhODE5MDJhODE5MTJiODE5MzJiODA5NDJjODA5NjJjODA5ODJkODA5OTJkODA5YjJlN2Y5YzJlN2Y5ZTJmN2ZhMDJmN2ZhMTMwN2VhMzMwN2VhNTMxN2VhNjMxN2RhODMyN2RhYTMzN2RhYjMzN2NhZDM0N2NhZTM0N2JiMDM1N2JiMjM1N2JiMzM2N2FiNTM2N2FiNzM3NzliODM3NzliYTM4NzhiYzM5NzhiZDM5NzdiZjNhNzdjMDNhNzZjMjNiNzVjNDNjNzVjNTNjNzRjNzNkNzNjODNlNzNjYTNlNzJjYzNmNzFjZDQwNzFjZjQwNzBkMDQxNmZkMjQyNmZkMzQzNmVkNTQ0NmRkNjQ1NmNkODQ1NmNkOTQ2NmJkYjQ3NmFkYzQ4NjlkZTQ5NjhkZjRhNjhlMDRjNjdlMjRkNjZlMzRlNjVlNDRmNjRlNTUwNjRlNzUyNjNlODUzNjJlOTU0NjJlYTU2NjFlYjU3NjBlYzU4NjBlZDVhNWZlZTViNWVlZjVkNWVmMDVmNWVmMTYwNWRmMjYyNWRmMjY0NWNmMzY1NWNmNDY3NWNmNDY5NWNmNTZiNWNmNjZjNWNmNjZlNWNmNzcwNWNmNzcyNWNmODc0NWNmODc2NWNmOTc4NWRmOTc5NWRmOTdiNWRmYTdkNWVmYTdmNWVmYTgxNWZmYjgzNWZmYjg1NjBmYjg3NjFmYzg5NjFmYzhhNjJmYzhjNjNmYzhlNjRmYzkwNjVmZDkyNjZmZDk0NjdmZDk2NjhmZDk4NjlmZDlhNmFmZDliNmJmZTlkNmNmZTlmNmRmZWExNmVmZWEzNmZmZWE1NzFmZWE3NzJmZWE5NzNmZWFhNzRmZWFjNzZmZWFlNzdmZWIwNzhmZWIyN2FmZWI0N2JmZWI2N2NmZWI3N2VmZWI5N2ZmZWJiODFmZWJkODJmZWJmODRmZWMxODVmZWMyODdmZWM0ODhmZWM2OGFmZWM4OGNmZWNhOGRmZWNjOGZmZWNkOTBmZWNmOTJmZWQxOTRmZWQzOTVmZWQ1OTdmZWQ3OTlmZWQ4OWFmZGRhOWNmZGRjOWVmZGRlYTBmZGUwYTFmZGUyYTNmZGUzYTVmZGU1YTdmZGU3YTlmZGU5YWFmZGViYWNmY2VjYWVmY2VlYjBmY2YwYjJmY2YyYjRmY2Y0YjZmY2Y2YjhmY2Y3YjlmY2Y5YmJmY2ZiYmRmY2ZkYmYiKSkscWE9VShTKCIwMDAwMDQwMTAwMDUwMTAxMDYwMTAxMDgwMjAxMGEwMjAyMGMwMjAyMGUwMzAyMTAwNDAzMTIwNDAzMTQwNTA0MTcwNjA0MTkwNzA1MWIwODA1MWQwOTA2MWYwYTA3MjIwYjA3MjQwYzA4MjYwZDA4MjkwZTA5MmIxMDA5MmQxMTBhMzAxMjBhMzIxNDBiMzQxNTBiMzcxNjBiMzkxODBjM2MxOTBjM2UxYjBjNDExYzBjNDMxZTBjNDUxZjBjNDgyMTBjNGEyMzBjNGMyNDBjNGYyNjBjNTEyODBiNTMyOTBiNTUyYjBiNTcyZDBiNTkyZjBhNWIzMTBhNWMzMjBhNWUzNDBhNWYzNjA5NjEzODA5NjIzOTA5NjMzYjA5NjQzZDA5NjUzZTA5NjY0MDBhNjc0MjBhNjg0NDBhNjg0NTBhNjk0NzBiNmE0OTBiNmE0YTBjNmI0YzBjNmI0ZDBkNmM0ZjBkNmM1MTBlNmM1MjBlNmQ1NDBmNmQ1NTBmNmQ1NzEwNmU1OTEwNmU1YTExNmU1YzEyNmU1ZDEyNmU1ZjEzNmU2MTEzNmU2MjE0NmU2NDE1NmU2NTE1NmU2NzE2NmU2OTE2NmU2YTE3NmU2YzE4NmU2ZDE4NmU2ZjE5NmU3MTE5NmU3MjFhNmU3NDFhNmU3NTFiNmU3NzFjNmQ3ODFjNmQ3YTFkNmQ3YzFkNmQ3ZDFlNmQ3ZjFlNmM4MDFmNmM4MjIwNmM4NDIwNmI4NTIxNmI4NzIxNmI4ODIyNmE4YTIyNmE4YzIzNjk4ZDIzNjk4ZjI0Njk5MDI1Njg5MjI1Njg5MzI2Njc5NTI2Njc5NzI3NjY5ODI3NjY5YTI4NjU5YjI5NjQ5ZDI5NjQ5ZjJhNjNhMDJhNjNhMjJiNjJhMzJjNjFhNTJjNjBhNjJkNjBhODJlNWZhOTJlNWVhYjJmNWVhZDMwNWRhZTMwNWNiMDMxNWJiMTMyNWFiMzMyNWFiNDMzNTliNjM0NThiNzM1NTdiOTM1NTZiYTM2NTViYzM3NTRiZDM4NTNiZjM5NTJjMDNhNTFjMTNhNTBjMzNiNGZjNDNjNGVjNjNkNGRjNzNlNGNjODNmNGJjYTQwNGFjYjQxNDljYzQyNDhjZTQzNDdjZjQ0NDZkMDQ1NDVkMjQ2NDRkMzQ3NDNkNDQ4NDJkNTRhNDFkNzRiM2ZkODRjM2VkOTRkM2RkYTRlM2NkYjUwM2JkZDUxM2FkZTUyMzhkZjUzMzdlMDU1MzZlMTU2MzVlMjU3MzRlMzU5MzNlNDVhMzFlNTVjMzBlNjVkMmZlNzVlMmVlODYwMmRlOTYxMmJlYTYzMmFlYjY0MjllYjY2MjhlYzY3MjZlZDY5MjVlZTZhMjRlZjZjMjNlZjZlMjFmMDZmMjBmMTcxMWZmMTczMWRmMjc0MWNmMzc2MWJmMzc4MTlmNDc5MThmNTdiMTdmNTdkMTVmNjdlMTRmNjgwMTNmNzgyMTJmNzg0MTBmODg1MGZmODg3MGVmODg5MGNmOThiMGJmOThjMGFmOThlMDlmYTkwMDhmYTkyMDdmYTk0MDdmYjk2MDZmYjk3MDZmYjk5MDZmYjliMDZmYjlkMDdmYzlmMDdmY2ExMDhmY2EzMDlmY2E1MGFmY2E2MGNmY2E4MGRmY2FhMGZmY2FjMTFmY2FlMTJmY2IwMTRmY2IyMTZmY2I0MThmYmI2MWFmYmI4MWRmYmJhMWZmYmJjMjFmYmJlMjNmYWMwMjZmYWMyMjhmYWM0MmFmYWM2MmRmOWM3MmZmOWM5MzJmOWNiMzVmOGNkMzdmOGNmM2FmN2QxM2RmN2QzNDBmNmQ1NDNmNmQ3NDZmNWQ5NDlmNWRiNGNmNGRkNGZmNGRmNTNmNGUxNTZmM2UzNWFmM2U1NWRmMmU2NjFmMmU4NjVmMmVhNjlmMWVjNmRmMWVkNzFmMWVmNzVmMWYxNzlmMmYyN2RmMmY0ODJmM2Y1ODZmM2Y2OGFmNGY4OGVmNWY5OTJmNmZhOTZmOGZiOWFmOWZjOWRmYWZkYTFmY2ZmYTQiKSkscmE9VShTKCIwZDA4ODcxMDA3ODgxMzA3ODkxNjA3OGExOTA2OGMxYjA2OGQxZDA2OGUyMDA2OGYyMjA2OTAyNDA2OTEyNjA1OTEyODA1OTIyYTA1OTMyYzA1OTQyZTA1OTUyZjA1OTYzMTA1OTczMzA1OTczNTA0OTgzNzA0OTkzODA0OWEzYTA0OWEzYzA0OWIzZTA0OWMzZjA0OWM0MTA0OWQ0MzAzOWU0NDAzOWU0NjAzOWY0ODAzOWY0OTAzYTA0YjAzYTE0YzAyYTE0ZTAyYTI1MDAyYTI1MTAyYTM1MzAyYTM1NTAyYTQ1NjAxYTQ1ODAxYTQ1OTAxYTU1YjAxYTU1YzAxYTY1ZTAxYTY2MDAxYTY2MTAwYTc2MzAwYTc2NDAwYTc2NjAwYTc2NzAwYTg2OTAwYTg2YTAwYTg2YzAwYTg2ZTAwYTg2ZjAwYTg3MTAwYTg3MjAxYTg3NDAxYTg3NTAxYTg3NzAxYTg3ODAxYTg3YTAyYTg3YjAyYTg3ZDAzYTg3ZTAzYTg4MDA0YTg4MTA0YTc4MzA1YTc4NDA1YTc4NjA2YTY4NzA3YTY4ODA4YTY4YTA5YTU4YjBhYTU4ZDBiYTU4ZTBjYTQ4ZjBkYTQ5MTBlYTM5MjBmYTM5NDEwYTI5NTExYTE5NjEzYTE5ODE0YTA5OTE1OWY5YTE2OWY5YzE3OWU5ZDE4OWQ5ZTE5OWRhMDFhOWNhMTFiOWJhMjFkOWFhMzFlOWFhNTFmOTlhNjIwOThhNzIxOTdhODIyOTZhYTIzOTVhYjI0OTRhYzI2OTRhZDI3OTNhZTI4OTJiMDI5OTFiMTJhOTBiMjJiOGZiMzJjOGViNDJlOGRiNTJmOGNiNjMwOGJiNzMxOGFiODMyODliYTMzODhiYjM0ODhiYzM1ODdiZDM3ODZiZTM4ODViZjM5ODRjMDNhODNjMTNiODJjMjNjODFjMzNkODBjNDNlN2ZjNTQwN2VjNjQxN2RjNzQyN2NjODQzN2JjOTQ0N2FjYTQ1N2FjYjQ2NzljYzQ3NzhjYzQ5NzdjZDRhNzZjZTRiNzVjZjRjNzRkMDRkNzNkMTRlNzJkMjRmNzFkMzUxNzFkNDUyNzBkNTUzNmZkNTU0NmVkNjU1NmRkNzU2NmNkODU3NmJkOTU4NmFkYTVhNmFkYTViNjlkYjVjNjhkYzVkNjdkZDVlNjZkZTVmNjVkZTYxNjRkZjYyNjNlMDYzNjNlMTY0NjJlMjY1NjFlMjY2NjBlMzY4NWZlNDY5NWVlNTZhNWRlNTZiNWRlNjZjNWNlNzZlNWJlNzZmNWFlODcwNTllOTcxNThlOTcyNTdlYTc0NTdlYjc1NTZlYjc2NTVlYzc3NTRlZDc5NTNlZDdhNTJlZTdiNTFlZjdjNTFlZjdlNTBmMDdmNGZmMDgwNGVmMTgxNGRmMTgzNGNmMjg0NGJmMzg1NGJmMzg3NGFmNDg4NDlmNDg5NDhmNThiNDdmNThjNDZmNjhkNDVmNjhmNDRmNzkwNDRmNzkxNDNmNzkzNDJmODk0NDFmODk1NDBmOTk3M2ZmOTk4M2VmOTlhM2VmYTliM2RmYTljM2NmYTllM2JmYjlmM2FmYmExMzlmYmEyMzhmY2EzMzhmY2E1MzdmY2E2MzZmY2E4MzVmY2E5MzRmZGFiMzNmZGFjMzNmZGFlMzJmZGFmMzFmZGIxMzBmZGIyMmZmZGI0MmZmZGI1MmVmZWI3MmRmZWI4MmNmZWJhMmNmZWJiMmJmZWJkMmFmZWJlMmFmZWMwMjlmZGMyMjlmZGMzMjhmZGM1MjdmZGM2MjdmZGM4MjdmZGNhMjZmZGNiMjZmY2NkMjVmY2NlMjVmY2QwMjVmY2QyMjVmYmQzMjRmYmQ1MjRmYmQ3MjRmYWQ4MjRmYWRhMjRmOWRjMjRmOWRkMjVmOGRmMjVmOGUxMjVmN2UyMjVmN2U0MjVmNmU2MjZmNmU4MjZmNWU5MjZmNWViMjdmNGVkMjdmM2VlMjdmM2YwMjdmMmYyMjdmMWY0MjZmMWY1MjVmMGY3MjRmMGY5MjEiKSk7YS5zY2FsZUJhbmQ9aixhLnNjYWxlUG9pbnQ9bCxhLnNjYWxlSWRlbnRpdHk9eSxhLnNjYWxlTGluZWFyPXgsYS5zY2FsZUxvZz1HLGEuc2NhbGVPcmRpbmFsPWksYS5zY2FsZUltcGxpY2l0PVosYS5zY2FsZVBvdz1JLGEuc2NhbGVTcXJ0PUosYS5zY2FsZVF1YW50aWxlPUssYS5zY2FsZVF1YW50aXplPUwsYS5zY2FsZVRocmVzaG9sZD1NLGEuc2NhbGVUaW1lPVEsYS5zY2FsZVV0Yz1SLGEuc2NoZW1lQ2F0ZWdvcnkxMD1nYSxhLnNjaGVtZUNhdGVnb3J5MjBiPWhhLGEuc2NoZW1lQ2F0ZWdvcnkyMGM9aWEsYS5zY2hlbWVDYXRlZ29yeTIwPWphLGEuaW50ZXJwb2xhdGVDdWJlaGVsaXhEZWZhdWx0PWthLGEuaW50ZXJwb2xhdGVSYWluYm93PVQsYS5pbnRlcnBvbGF0ZVdhcm09bGEsYS5pbnRlcnBvbGF0ZUNvb2w9bWEsYS5pbnRlcnBvbGF0ZVZpcmlkaXM9b2EsYS5pbnRlcnBvbGF0ZU1hZ21hPXBhLGEuaW50ZXJwb2xhdGVJbmZlcm5vPXFhLGEuaW50ZXJwb2xhdGVQbGFzbWE9cmEsYS5zY2FsZVNlcXVlbnRpYWw9VixPYmplY3QuZGVmaW5lUHJvcGVydHkoYSwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSl9KX0seyJkMy1hcnJheSI6MSwiZDMtY29sbGVjdGlvbiI6MiwiZDMtY29sb3IiOjMsImQzLWZvcm1hdCI6NSwiZDMtaW50ZXJwb2xhdGUiOjYsImQzLXRpbWUiOjksImQzLXRpbWUtZm9ybWF0Ijo4fV0sODpbZnVuY3Rpb24oYSxiLGMpeyFmdW5jdGlvbihkLGUpeyJvYmplY3QiPT10eXBlb2YgYyYmInVuZGVmaW5lZCIhPXR5cGVvZiBiP2UoYyxhKCJkMy10aW1lIikpOiJmdW5jdGlvbiI9PXR5cGVvZiBkZWZpbmUmJmRlZmluZS5hbWQ/ZGVmaW5lKFsiZXhwb3J0cyIsImQzLXRpbWUiXSxlKTplKGQuZDM9ZC5kM3x8e30sZC5kMyl9KHRoaXMsZnVuY3Rpb24oYSxiKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gYyhhKXtpZigwPD1hLnkmJmEueTwxMDApe3ZhciBiPW5ldyBEYXRlKCgtMSksYS5tLGEuZCxhLkgsYS5NLGEuUyxhLkwpO3JldHVybiBiLnNldEZ1bGxZZWFyKGEueSksYn1yZXR1cm4gbmV3IERhdGUoYS55LGEubSxhLmQsYS5ILGEuTSxhLlMsYS5MKX1mdW5jdGlvbiBkKGEpe2lmKDA8PWEueSYmYS55PDEwMCl7dmFyIGI9bmV3IERhdGUoRGF0ZS5VVEMoLTEsYS5tLGEuZCxhLkgsYS5NLGEuUyxhLkwpKTtyZXR1cm4gYi5zZXRVVENGdWxsWWVhcihhLnkpLGJ9cmV0dXJuIG5ldyBEYXRlKERhdGUuVVRDKGEueSxhLm0sYS5kLGEuSCxhLk0sYS5TLGEuTCkpfWZ1bmN0aW9uIGUoYSl7cmV0dXJue3k6YSxtOjAsZDoxLEg6MCxNOjAsUzowLEw6MH19ZnVuY3Rpb24gZihhKXtmdW5jdGlvbiBiKGEsYil7cmV0dXJuIGZ1bmN0aW9uKGMpe3ZhciBkLGUsZixnPVtdLGg9LTEsaT0wLGo9YS5sZW5ndGg7Zm9yKGMgaW5zdGFuY2VvZiBEYXRlfHwoYz1uZXcgRGF0ZSgoK2MpKSk7KytoPGo7KTM3PT09YS5jaGFyQ29kZUF0KGgpJiYoZy5wdXNoKGEuc2xpY2UoaSxoKSksbnVsbCE9KGU9ZGFbZD1hLmNoYXJBdCgrK2gpXSk/ZD1hLmNoYXJBdCgrK2gpOmU9ImUiPT09ZD8iICI6IjAiLChmPWJbZF0pJiYoZD1mKGMsZSkpLGcucHVzaChkKSxpPWgrMSk7cmV0dXJuIGcucHVzaChhLnNsaWNlKGksaCkpLGcuam9pbigiIil9fWZ1bmN0aW9uIGYoYSxiKXtyZXR1cm4gZnVuY3Rpb24oYyl7dmFyIGY9ZSgxOTAwKSxoPWcoZixhLGMrPSIiLDApO2lmKGghPWMubGVuZ3RoKXJldHVybiBudWxsO2lmKCJwImluIGYmJihmLkg9Zi5IJTEyKzEyKmYucCksIlciaW4gZnx8IlUiaW4gZil7InciaW4gZnx8KGYudz0iVyJpbiBmPzE6MCk7dmFyIGk9IloiaW4gZj9kKGUoZi55KSkuZ2V0VVRDRGF5KCk6YihlKGYueSkpLmdldERheSgpO2YubT0wLGYuZD0iVyJpbiBmPyhmLncrNiklNys3KmYuVy0oaSs1KSU3OmYudys3KmYuVS0oaSs2KSU3fXJldHVybiJaImluIGY/KGYuSCs9Zi5aLzEwMHwwLGYuTSs9Zi5aJTEwMCxkKGYpKTpiKGYpfX1mdW5jdGlvbiBnKGEsYixjLGQpe2Zvcih2YXIgZSxmLGc9MCxoPWIubGVuZ3RoLGk9Yy5sZW5ndGg7ZzxoOyl7aWYoZD49aSlyZXR1cm4tMTtpZihlPWIuY2hhckNvZGVBdChnKyspLDM3PT09ZSl7aWYoZT1iLmNoYXJBdChnKyspLGY9TGFbZSBpbiBkYT9iLmNoYXJBdChnKyspOmVdLCFmfHwoZD1mKGEsYyxkKSk8MClyZXR1cm4tMX1lbHNlIGlmKGUhPWMuY2hhckNvZGVBdChkKyspKXJldHVybi0xfXJldHVybiBkfWZ1bmN0aW9uIGgoYSxiLGMpe3ZhciBkPXphLmV4ZWMoYi5zbGljZShjKSk7cmV0dXJuIGQ/KGEucD1BYVtkWzBdLnRvTG93ZXJDYXNlKCldLGMrZFswXS5sZW5ndGgpOi0xfWZ1bmN0aW9uIF8oYSxiLGMpe3ZhciBkPURhLmV4ZWMoYi5zbGljZShjKSk7cmV0dXJuIGQ/KGEudz1FYVtkWzBdLnRvTG93ZXJDYXNlKCldLGMrZFswXS5sZW5ndGgpOi0xfWZ1bmN0aW9uIGFhKGEsYixjKXt2YXIgZD1CYS5leGVjKGIuc2xpY2UoYykpO3JldHVybiBkPyhhLnc9Q2FbZFswXS50b0xvd2VyQ2FzZSgpXSxjK2RbMF0ubGVuZ3RoKTotMX1mdW5jdGlvbiBiYShhLGIsYyl7dmFyIGQ9SGEuZXhlYyhiLnNsaWNlKGMpKTtyZXR1cm4gZD8oYS5tPUlhW2RbMF0udG9Mb3dlckNhc2UoKV0sYytkWzBdLmxlbmd0aCk6LTF9ZnVuY3Rpb24gY2EoYSxiLGMpe3ZhciBkPUZhLmV4ZWMoYi5zbGljZShjKSk7cmV0dXJuIGQ/KGEubT1HYVtkWzBdLnRvTG93ZXJDYXNlKCldLGMrZFswXS5sZW5ndGgpOi0xfWZ1bmN0aW9uIGVhKGEsYixjKXtyZXR1cm4gZyhhLHJhLGIsYyl9ZnVuY3Rpb24gZmEoYSxiLGMpe3JldHVybiBnKGEsc2EsYixjKX1mdW5jdGlvbiBnYShhLGIsYyl7cmV0dXJuIGcoYSx0YSxiLGMpfWZ1bmN0aW9uIGhhKGEpe3JldHVybiB3YVthLmdldERheSgpXX1mdW5jdGlvbiBpYShhKXtyZXR1cm4gdmFbYS5nZXREYXkoKV19ZnVuY3Rpb24gamEoYSl7cmV0dXJuIHlhW2EuZ2V0TW9udGgoKV19ZnVuY3Rpb24ga2EoYSl7cmV0dXJuIHhhW2EuZ2V0TW9udGgoKV19ZnVuY3Rpb24gbGEoYSl7cmV0dXJuIHVhWysoYS5nZXRIb3VycygpPj0xMildfWZ1bmN0aW9uIG1hKGEpe3JldHVybiB3YVthLmdldFVUQ0RheSgpXX1mdW5jdGlvbiBuYShhKXtyZXR1cm4gdmFbYS5nZXRVVENEYXkoKV19ZnVuY3Rpb24gb2EoYSl7cmV0dXJuIHlhW2EuZ2V0VVRDTW9udGgoKV19ZnVuY3Rpb24gcGEoYSl7cmV0dXJuIHhhW2EuZ2V0VVRDTW9udGgoKV19ZnVuY3Rpb24gcWEoYSl7cmV0dXJuIHVhWysoYS5nZXRVVENIb3VycygpPj0xMildfXZhciByYT1hLmRhdGVUaW1lLHNhPWEuZGF0ZSx0YT1hLnRpbWUsdWE9YS5wZXJpb2RzLHZhPWEuZGF5cyx3YT1hLnNob3J0RGF5cyx4YT1hLm1vbnRocyx5YT1hLnNob3J0TW9udGhzLHphPWkodWEpLEFhPWoodWEpLEJhPWkodmEpLENhPWoodmEpLERhPWkod2EpLEVhPWood2EpLEZhPWkoeGEpLEdhPWooeGEpLEhhPWkoeWEpLElhPWooeWEpLEphPXthOmhhLEE6aWEsYjpqYSxCOmthLGM6bnVsbCxkOnksZTp5LEg6eixJOkEsajpCLEw6QyxtOkQsTTpFLHA6bGEsUzpGLFU6Ryx3OkgsVzpJLHg6bnVsbCxYOm51bGwseTpKLFk6SyxaOkwsIiUiOiR9LEthPXthOm1hLEE6bmEsYjpvYSxCOnBhLGM6bnVsbCxkOk0sZTpNLEg6TixJOk8sajpQLEw6USxtOlIsTTpTLHA6cWEsUzpULFU6VSx3OlYsVzpXLHg6bnVsbCxYOm51bGwseTpYLFk6WSxaOlosIiUiOiR9LExhPXthOl8sQTphYSxiOmJhLEI6Y2EsYzplYSxkOnIsZTpyLEg6dCxJOnQsajpzLEw6dyxtOnEsTTp1LHA6aCxTOnYsVTpsLHc6ayxXOm0seDpmYSxYOmdhLHk6byxZOm4sWjpwLCIlIjp4fTtyZXR1cm4gSmEueD1iKHNhLEphKSxKYS5YPWIodGEsSmEpLEphLmM9YihyYSxKYSksS2EueD1iKHNhLEthKSxLYS5YPWIodGEsS2EpLEthLmM9YihyYSxLYSkse2Zvcm1hdDpmdW5jdGlvbihhKXt2YXIgYz1iKGErPSIiLEphKTtyZXR1cm4gYy50b1N0cmluZz1mdW5jdGlvbigpe3JldHVybiBhfSxjfSxwYXJzZTpmdW5jdGlvbihhKXt2YXIgYj1mKGErPSIiLGMpO3JldHVybiBiLnRvU3RyaW5nPWZ1bmN0aW9uKCl7cmV0dXJuIGF9LGJ9LHV0Y0Zvcm1hdDpmdW5jdGlvbihhKXt2YXIgYz1iKGErPSIiLEthKTtyZXR1cm4gYy50b1N0cmluZz1mdW5jdGlvbigpe3JldHVybiBhfSxjfSx1dGNQYXJzZTpmdW5jdGlvbihhKXt2YXIgYj1mKGEsZCk7cmV0dXJuIGIudG9TdHJpbmc9ZnVuY3Rpb24oKXtyZXR1cm4gYX0sYn19fWZ1bmN0aW9uIGcoYSxiLGMpe3ZhciBkPWE8MD8iLSI6IiIsZT0oZD8tYTphKSsiIixmPWUubGVuZ3RoO3JldHVybiBkKyhmPGM/bmV3IEFycmF5KGMtZisxKS5qb2luKGIpK2U6ZSl9ZnVuY3Rpb24gaChhKXtyZXR1cm4gYS5yZXBsYWNlKGdhLCJcXCQmIil9ZnVuY3Rpb24gaShhKXtyZXR1cm4gbmV3IFJlZ0V4cCgiXig/OiIrYS5tYXAoaCkuam9pbigifCIpKyIpIiwiaSIpfWZ1bmN0aW9uIGooYSl7Zm9yKHZhciBiPXt9LGM9LTEsZD1hLmxlbmd0aDsrK2M8ZDspYlthW2NdLnRvTG93ZXJDYXNlKCldPWM7cmV0dXJuIGJ9ZnVuY3Rpb24gayhhLGIsYyl7dmFyIGQ9ZWEuZXhlYyhiLnNsaWNlKGMsYysxKSk7cmV0dXJuIGQ/KGEudz0rZFswXSxjK2RbMF0ubGVuZ3RoKTotMX1mdW5jdGlvbiBsKGEsYixjKXt2YXIgZD1lYS5leGVjKGIuc2xpY2UoYykpO3JldHVybiBkPyhhLlU9K2RbMF0sYytkWzBdLmxlbmd0aCk6LTF9ZnVuY3Rpb24gbShhLGIsYyl7dmFyIGQ9ZWEuZXhlYyhiLnNsaWNlKGMpKTtyZXR1cm4gZD8oYS5XPStkWzBdLGMrZFswXS5sZW5ndGgpOi0xfWZ1bmN0aW9uIG4oYSxiLGMpe3ZhciBkPWVhLmV4ZWMoYi5zbGljZShjLGMrNCkpO3JldHVybiBkPyhhLnk9K2RbMF0sYytkWzBdLmxlbmd0aCk6LTF9ZnVuY3Rpb24gbyhhLGIsYyl7dmFyIGQ9ZWEuZXhlYyhiLnNsaWNlKGMsYysyKSk7cmV0dXJuIGQ/KGEueT0rZFswXSsoK2RbMF0+Njg/MTkwMDoyZTMpLGMrZFswXS5sZW5ndGgpOi0xfWZ1bmN0aW9uIHAoYSxiLGMpe3ZhciBkPS9eKFopfChbKy1dXGRcZCkoPzpcOj8oXGRcZCkpPy8uZXhlYyhiLnNsaWNlKGMsYys2KSk7cmV0dXJuIGQ/KGEuWj1kWzFdPzA6LShkWzJdKyhkWzNdfHwiMDAiKSksYytkWzBdLmxlbmd0aCk6LTF9ZnVuY3Rpb24gcShhLGIsYyl7dmFyIGQ9ZWEuZXhlYyhiLnNsaWNlKGMsYysyKSk7cmV0dXJuIGQ/KGEubT1kWzBdLTEsYytkWzBdLmxlbmd0aCk6LTF9ZnVuY3Rpb24gcihhLGIsYyl7dmFyIGQ9ZWEuZXhlYyhiLnNsaWNlKGMsYysyKSk7cmV0dXJuIGQ/KGEuZD0rZFswXSxjK2RbMF0ubGVuZ3RoKTotMX1mdW5jdGlvbiBzKGEsYixjKXt2YXIgZD1lYS5leGVjKGIuc2xpY2UoYyxjKzMpKTtyZXR1cm4gZD8oYS5tPTAsYS5kPStkWzBdLGMrZFswXS5sZW5ndGgpOi0xfWZ1bmN0aW9uIHQoYSxiLGMpe3ZhciBkPWVhLmV4ZWMoYi5zbGljZShjLGMrMikpO3JldHVybiBkPyhhLkg9K2RbMF0sYytkWzBdLmxlbmd0aCk6LTF9ZnVuY3Rpb24gdShhLGIsYyl7dmFyIGQ9ZWEuZXhlYyhiLnNsaWNlKGMsYysyKSk7cmV0dXJuIGQ/KGEuTT0rZFswXSxjK2RbMF0ubGVuZ3RoKTotMX1mdW5jdGlvbiB2KGEsYixjKXt2YXIgZD1lYS5leGVjKGIuc2xpY2UoYyxjKzIpKTtyZXR1cm4gZD8oYS5TPStkWzBdLGMrZFswXS5sZW5ndGgpOi0xfWZ1bmN0aW9uIHcoYSxiLGMpe3ZhciBkPWVhLmV4ZWMoYi5zbGljZShjLGMrMykpO3JldHVybiBkPyhhLkw9K2RbMF0sYytkWzBdLmxlbmd0aCk6LTF9ZnVuY3Rpb24geChhLGIsYyl7dmFyIGQ9ZmEuZXhlYyhiLnNsaWNlKGMsYysxKSk7cmV0dXJuIGQ/YytkWzBdLmxlbmd0aDotMX1mdW5jdGlvbiB5KGEsYil7cmV0dXJuIGcoYS5nZXREYXRlKCksYiwyKX1mdW5jdGlvbiB6KGEsYil7cmV0dXJuIGcoYS5nZXRIb3VycygpLGIsMil9ZnVuY3Rpb24gQShhLGIpe3JldHVybiBnKGEuZ2V0SG91cnMoKSUxMnx8MTIsYiwyKX1mdW5jdGlvbiBCKGEsYyl7cmV0dXJuIGcoMStiLnRpbWVEYXkuY291bnQoYi50aW1lWWVhcihhKSxhKSxjLDMpfWZ1bmN0aW9uIEMoYSxiKXtyZXR1cm4gZyhhLmdldE1pbGxpc2Vjb25kcygpLGIsMyl9ZnVuY3Rpb24gRChhLGIpe3JldHVybiBnKGEuZ2V0TW9udGgoKSsxLGIsMil9ZnVuY3Rpb24gRShhLGIpe3JldHVybiBnKGEuZ2V0TWludXRlcygpLGIsMil9ZnVuY3Rpb24gRihhLGIpe3JldHVybiBnKGEuZ2V0U2Vjb25kcygpLGIsMil9ZnVuY3Rpb24gRyhhLGMpe3JldHVybiBnKGIudGltZVN1bmRheS5jb3VudChiLnRpbWVZZWFyKGEpLGEpLGMsMil9ZnVuY3Rpb24gSChhKXtyZXR1cm4gYS5nZXREYXkoKX1mdW5jdGlvbiBJKGEsYyl7cmV0dXJuIGcoYi50aW1lTW9uZGF5LmNvdW50KGIudGltZVllYXIoYSksYSksYywyKX1mdW5jdGlvbiBKKGEsYil7cmV0dXJuIGcoYS5nZXRGdWxsWWVhcigpJTEwMCxiLDIpfWZ1bmN0aW9uIEsoYSxiKXtyZXR1cm4gZyhhLmdldEZ1bGxZZWFyKCklMWU0LGIsNCl9ZnVuY3Rpb24gTChhKXt2YXIgYj1hLmdldFRpbWV6b25lT2Zmc2V0KCk7cmV0dXJuKGI+MD8iLSI6KGIqPS0xLCIrIikpK2coYi82MHwwLCIwIiwyKStnKGIlNjAsIjAiLDIpfWZ1bmN0aW9uIE0oYSxiKXtyZXR1cm4gZyhhLmdldFVUQ0RhdGUoKSxiLDIpfWZ1bmN0aW9uIE4oYSxiKXtyZXR1cm4gZyhhLmdldFVUQ0hvdXJzKCksYiwyKX1mdW5jdGlvbiBPKGEsYil7cmV0dXJuIGcoYS5nZXRVVENIb3VycygpJTEyfHwxMixiLDIpfWZ1bmN0aW9uIFAoYSxjKXtyZXR1cm4gZygxK2IudXRjRGF5LmNvdW50KGIudXRjWWVhcihhKSxhKSxjLDMpfWZ1bmN0aW9uIFEoYSxiKXtyZXR1cm4gZyhhLmdldFVUQ01pbGxpc2Vjb25kcygpLGIsMyl9ZnVuY3Rpb24gUihhLGIpe3JldHVybiBnKGEuZ2V0VVRDTW9udGgoKSsxLGIsMil9ZnVuY3Rpb24gUyhhLGIpe3JldHVybiBnKGEuZ2V0VVRDTWludXRlcygpLGIsMil9ZnVuY3Rpb24gVChhLGIpe3JldHVybiBnKGEuZ2V0VVRDU2Vjb25kcygpLGIsMil9ZnVuY3Rpb24gVShhLGMpe3JldHVybiBnKGIudXRjU3VuZGF5LmNvdW50KGIudXRjWWVhcihhKSxhKSxjLDIpfWZ1bmN0aW9uIFYoYSl7cmV0dXJuIGEuZ2V0VVRDRGF5KCl9ZnVuY3Rpb24gVyhhLGMpe3JldHVybiBnKGIudXRjTW9uZGF5LmNvdW50KGIudXRjWWVhcihhKSxhKSxjLDIpfWZ1bmN0aW9uIFgoYSxiKXtyZXR1cm4gZyhhLmdldFVUQ0Z1bGxZZWFyKCklMTAwLGIsMil9ZnVuY3Rpb24gWShhLGIpe3JldHVybiBnKGEuZ2V0VVRDRnVsbFllYXIoKSUxZTQsYiw0KX1mdW5jdGlvbiBaKCl7cmV0dXJuIiswMDAwIn1mdW5jdGlvbiAkKCl7cmV0dXJuIiUifWZ1bmN0aW9uIF8oYil7cmV0dXJuIGNhPWYoYiksYS50aW1lRm9ybWF0PWNhLmZvcm1hdCxhLnRpbWVQYXJzZT1jYS5wYXJzZSxhLnV0Y0Zvcm1hdD1jYS51dGNGb3JtYXQsYS51dGNQYXJzZT1jYS51dGNQYXJzZSxjYX1mdW5jdGlvbiBhYShhKXtyZXR1cm4gYS50b0lTT1N0cmluZygpfWZ1bmN0aW9uIGJhKGEpe3ZhciBiPW5ldyBEYXRlKGEpO3JldHVybiBpc05hTihiKT9udWxsOmJ9dmFyIGNhLGRhPXsiLSI6IiIsXzoiICIsMDoiMCJ9LGVhPS9eXHMqXGQrLyxmYT0vXiUvLGdhPS9bXFxcXlwkXCpcK1w/XHxcW1xdXChcKVwuXHtcfV0vZztfKHtkYXRlVGltZToiJXgsICVYIixkYXRlOiIlLW0vJS1kLyVZIix0aW1lOiIlLUk6JU06JVMgJXAiLHBlcmlvZHM6WyJBTSIsIlBNIl0sZGF5czpbIlN1bmRheSIsIk1vbmRheSIsIlR1ZXNkYXkiLCJXZWRuZXNkYXkiLCJUaHVyc2RheSIsIkZyaWRheSIsIlNhdHVyZGF5Il0sc2hvcnREYXlzOlsiU3VuIiwiTW9uIiwiVHVlIiwiV2VkIiwiVGh1IiwiRnJpIiwiU2F0Il0sbW9udGhzOlsiSmFudWFyeSIsIkZlYnJ1YXJ5IiwiTWFyY2giLCJBcHJpbCIsIk1heSIsIkp1bmUiLCJKdWx5IiwiQXVndXN0IiwiU2VwdGVtYmVyIiwiT2N0b2JlciIsIk5vdmVtYmVyIiwiRGVjZW1iZXIiXSxzaG9ydE1vbnRoczpbIkphbiIsIkZlYiIsIk1hciIsIkFwciIsIk1heSIsIkp1biIsIkp1bCIsIkF1ZyIsIlNlcCIsIk9jdCIsIk5vdiIsIkRlYyJdfSk7dmFyIGhhPSIlWS0lbS0lZFQlSDolTTolUy4lTFoiLGlhPURhdGUucHJvdG90eXBlLnRvSVNPU3RyaW5nP2FhOmEudXRjRm9ybWF0KGhhKSxqYT0rbmV3IERhdGUoIjIwMDAtMDEtMDFUMDA6MDA6MDAuMDAwWiIpP2JhOmEudXRjUGFyc2UoaGEpO2EudGltZUZvcm1hdERlZmF1bHRMb2NhbGU9XyxhLnRpbWVGb3JtYXRMb2NhbGU9ZixhLmlzb0Zvcm1hdD1pYSxhLmlzb1BhcnNlPWphLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShhLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KX0pfSx7ImQzLXRpbWUiOjl9XSw5OltmdW5jdGlvbihhLGIsYyl7IWZ1bmN0aW9uKGEsZCl7Im9iamVjdCI9PXR5cGVvZiBjJiYidW5kZWZpbmVkIiE9dHlwZW9mIGI/ZChjKToiZnVuY3Rpb24iPT10eXBlb2YgZGVmaW5lJiZkZWZpbmUuYW1kP2RlZmluZShbImV4cG9ydHMiXSxkKTpkKGEuZDM9YS5kM3x8e30pfSh0aGlzLGZ1bmN0aW9uKGEpeyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBiKGEsYyxkLGcpe2Z1bmN0aW9uIGgoYil7cmV0dXJuIGEoYj1uZXcgRGF0ZSgoK2IpKSksYn1yZXR1cm4gaC5mbG9vcj1oLGguY2VpbD1mdW5jdGlvbihiKXtyZXR1cm4gYShiPW5ldyBEYXRlKGItMSkpLGMoYiwxKSxhKGIpLGJ9LGgucm91bmQ9ZnVuY3Rpb24oYSl7dmFyIGI9aChhKSxjPWguY2VpbChhKTtyZXR1cm4gYS1iPGMtYT9iOmN9LGgub2Zmc2V0PWZ1bmN0aW9uKGEsYil7cmV0dXJuIGMoYT1uZXcgRGF0ZSgoK2EpKSxudWxsPT1iPzE6TWF0aC5mbG9vcihiKSksYX0saC5yYW5nZT1mdW5jdGlvbihiLGQsZSl7dmFyIGY9W107aWYoYj1oLmNlaWwoYiksZT1udWxsPT1lPzE6TWF0aC5mbG9vcihlKSwhKGI8ZCYmZT4wKSlyZXR1cm4gZjtkbyBmLnB1c2gobmV3IERhdGUoKCtiKSkpO3doaWxlKGMoYixlKSxhKGIpLGI8ZCk7cmV0dXJuIGZ9LGguZmlsdGVyPWZ1bmN0aW9uKGQpe3JldHVybiBiKGZ1bmN0aW9uKGIpe2Zvcig7YShiKSwhZChiKTspYi5zZXRUaW1lKGItMSl9LGZ1bmN0aW9uKGEsYil7Zm9yKDstLWI+PTA7KWZvcig7YyhhLDEpLCFkKGEpOyk7fSl9LGQmJihoLmNvdW50PWZ1bmN0aW9uKGIsYyl7cmV0dXJuIGUuc2V0VGltZSgrYiksZi5zZXRUaW1lKCtjKSxhKGUpLGEoZiksTWF0aC5mbG9vcihkKGUsZikpfSxoLmV2ZXJ5PWZ1bmN0aW9uKGEpe3JldHVybiBhPU1hdGguZmxvb3IoYSksaXNGaW5pdGUoYSkmJmE+MD9hPjE/aC5maWx0ZXIoZz9mdW5jdGlvbihiKXtyZXR1cm4gZyhiKSVhPT09MH06ZnVuY3Rpb24oYil7cmV0dXJuIGguY291bnQoMCxiKSVhPT09MH0pOmg6bnVsbH0pLGh9ZnVuY3Rpb24gYyhhKXtyZXR1cm4gYihmdW5jdGlvbihiKXtiLnNldERhdGUoYi5nZXREYXRlKCktKGIuZ2V0RGF5KCkrNy1hKSU3KSxiLnNldEhvdXJzKDAsMCwwLDApfSxmdW5jdGlvbihhLGIpe2Euc2V0RGF0ZShhLmdldERhdGUoKSs3KmIpfSxmdW5jdGlvbihhLGIpe3JldHVybihiLWEtKGIuZ2V0VGltZXpvbmVPZmZzZXQoKS1hLmdldFRpbWV6b25lT2Zmc2V0KCkpKmopL219KX1mdW5jdGlvbiBkKGEpe3JldHVybiBiKGZ1bmN0aW9uKGIpe2Iuc2V0VVRDRGF0ZShiLmdldFVUQ0RhdGUoKS0oYi5nZXRVVENEYXkoKSs3LWEpJTcpLGIuc2V0VVRDSG91cnMoMCwwLDAsMCl9LGZ1bmN0aW9uKGEsYil7YS5zZXRVVENEYXRlKGEuZ2V0VVRDRGF0ZSgpKzcqYil9LGZ1bmN0aW9uKGEsYil7cmV0dXJuKGItYSkvbX0pfXZhciBlPW5ldyBEYXRlLGY9bmV3IERhdGUsZz1iKGZ1bmN0aW9uKCl7fSxmdW5jdGlvbihhLGIpe2Euc2V0VGltZSgrYStiKX0sZnVuY3Rpb24oYSxiKXtyZXR1cm4gYi1hfSk7Zy5ldmVyeT1mdW5jdGlvbihhKXtyZXR1cm4gYT1NYXRoLmZsb29yKGEpLGlzRmluaXRlKGEpJiZhPjA/YT4xP2IoZnVuY3Rpb24oYil7Yi5zZXRUaW1lKE1hdGguZmxvb3IoYi9hKSphKX0sZnVuY3Rpb24oYixjKXtiLnNldFRpbWUoK2IrYyphKX0sZnVuY3Rpb24oYixjKXtyZXR1cm4oYy1iKS9hfSk6ZzpudWxsfTt2YXIgaD1nLnJhbmdlLGk9MWUzLGo9NmU0LGs9MzZlNSxsPTg2NGU1LG09NjA0OGU1LG49YihmdW5jdGlvbihhKXthLnNldFRpbWUoTWF0aC5mbG9vcihhL2kpKmkpfSxmdW5jdGlvbihhLGIpe2Euc2V0VGltZSgrYStiKmkpfSxmdW5jdGlvbihhLGIpe3JldHVybihiLWEpL2l9LGZ1bmN0aW9uKGEpe3JldHVybiBhLmdldFVUQ1NlY29uZHMoKX0pLG89bi5yYW5nZSxwPWIoZnVuY3Rpb24oYSl7YS5zZXRUaW1lKE1hdGguZmxvb3IoYS9qKSpqKX0sZnVuY3Rpb24oYSxiKXthLnNldFRpbWUoK2ErYipqKX0sZnVuY3Rpb24oYSxiKXtyZXR1cm4oYi1hKS9qfSxmdW5jdGlvbihhKXtyZXR1cm4gYS5nZXRNaW51dGVzKCl9KSxxPXAucmFuZ2Uscj1iKGZ1bmN0aW9uKGEpe3ZhciBiPWEuZ2V0VGltZXpvbmVPZmZzZXQoKSpqJWs7YjwwJiYoYis9ayksYS5zZXRUaW1lKE1hdGguZmxvb3IoKCthLWIpL2spKmsrYil9LGZ1bmN0aW9uKGEsYil7YS5zZXRUaW1lKCthK2Iqayl9LGZ1bmN0aW9uKGEsYil7cmV0dXJuKGItYSkva30sZnVuY3Rpb24oYSl7cmV0dXJuIGEuZ2V0SG91cnMoKX0pLHM9ci5yYW5nZSx0PWIoZnVuY3Rpb24oYSl7YS5zZXRIb3VycygwLDAsMCwwKX0sZnVuY3Rpb24oYSxiKXthLnNldERhdGUoYS5nZXREYXRlKCkrYil9LGZ1bmN0aW9uKGEsYil7cmV0dXJuKGItYS0oYi5nZXRUaW1lem9uZU9mZnNldCgpLWEuZ2V0VGltZXpvbmVPZmZzZXQoKSkqaikvbH0sZnVuY3Rpb24oYSl7cmV0dXJuIGEuZ2V0RGF0ZSgpLTF9KSx1PXQucmFuZ2Usdj1jKDApLHc9YygxKSx4PWMoMikseT1jKDMpLHo9Yyg0KSxBPWMoNSksQj1jKDYpLEM9di5yYW5nZSxEPXcucmFuZ2UsRT14LnJhbmdlLEY9eS5yYW5nZSxHPXoucmFuZ2UsSD1BLnJhbmdlLEk9Qi5yYW5nZSxKPWIoZnVuY3Rpb24oYSl7YS5zZXREYXRlKDEpLGEuc2V0SG91cnMoMCwwLDAsMCl9LGZ1bmN0aW9uKGEsYil7YS5zZXRNb250aChhLmdldE1vbnRoKCkrYil9LGZ1bmN0aW9uKGEsYil7cmV0dXJuIGIuZ2V0TW9udGgoKS1hLmdldE1vbnRoKCkrMTIqKGIuZ2V0RnVsbFllYXIoKS1hLmdldEZ1bGxZZWFyKCkpfSxmdW5jdGlvbihhKXtyZXR1cm4gYS5nZXRNb250aCgpfSksSz1KLnJhbmdlLEw9YihmdW5jdGlvbihhKXthLnNldE1vbnRoKDAsMSksYS5zZXRIb3VycygwLDAsMCwwKX0sZnVuY3Rpb24oYSxiKXthLnNldEZ1bGxZZWFyKGEuZ2V0RnVsbFllYXIoKStiKX0sZnVuY3Rpb24oYSxiKXtyZXR1cm4gYi5nZXRGdWxsWWVhcigpLWEuZ2V0RnVsbFllYXIoKX0sZnVuY3Rpb24oYSl7cmV0dXJuIGEuZ2V0RnVsbFllYXIoKX0pO0wuZXZlcnk9ZnVuY3Rpb24oYSl7cmV0dXJuIGlzRmluaXRlKGE9TWF0aC5mbG9vcihhKSkmJmE+MD9iKGZ1bmN0aW9uKGIpe2Iuc2V0RnVsbFllYXIoTWF0aC5mbG9vcihiLmdldEZ1bGxZZWFyKCkvYSkqYSksYi5zZXRNb250aCgwLDEpLGIuc2V0SG91cnMoMCwwLDAsMCl9LGZ1bmN0aW9uKGIsYyl7Yi5zZXRGdWxsWWVhcihiLmdldEZ1bGxZZWFyKCkrYyphKX0pOm51bGx9O3ZhciBNPUwucmFuZ2UsTj1iKGZ1bmN0aW9uKGEpe2Euc2V0VVRDU2Vjb25kcygwLDApfSxmdW5jdGlvbihhLGIpe2Euc2V0VGltZSgrYStiKmopfSxmdW5jdGlvbihhLGIpe3JldHVybihiLWEpL2p9LGZ1bmN0aW9uKGEpe3JldHVybiBhLmdldFVUQ01pbnV0ZXMoKX0pLE89Ti5yYW5nZSxQPWIoZnVuY3Rpb24oYSl7YS5zZXRVVENNaW51dGVzKDAsMCwwKX0sZnVuY3Rpb24oYSxiKXthLnNldFRpbWUoK2ErYiprKX0sZnVuY3Rpb24oYSxiKXtyZXR1cm4oYi1hKS9rfSxmdW5jdGlvbihhKXtyZXR1cm4gYS5nZXRVVENIb3VycygpfSksUT1QLnJhbmdlLFI9YihmdW5jdGlvbihhKXthLnNldFVUQ0hvdXJzKDAsMCwwLDApfSxmdW5jdGlvbihhLGIpe2Euc2V0VVRDRGF0ZShhLmdldFVUQ0RhdGUoKStiKX0sZnVuY3Rpb24oYSxiKXtyZXR1cm4oYi1hKS9sfSxmdW5jdGlvbihhKXtyZXR1cm4gYS5nZXRVVENEYXRlKCktMX0pLFM9Ui5yYW5nZSxUPWQoMCksVT1kKDEpLFY9ZCgyKSxXPWQoMyksWD1kKDQpLFk9ZCg1KSxaPWQoNiksJD1ULnJhbmdlLF89VS5yYW5nZSxhYT1WLnJhbmdlLGJhPVcucmFuZ2UsY2E9WC5yYW5nZSxkYT1ZLnJhbmdlLGVhPVoucmFuZ2UsZmE9YihmdW5jdGlvbihhKXthLnNldFVUQ0RhdGUoMSksYS5zZXRVVENIb3VycygwLDAsMCwwKX0sZnVuY3Rpb24oYSxiKXthLnNldFVUQ01vbnRoKGEuZ2V0VVRDTW9udGgoKStiKX0sZnVuY3Rpb24oYSxiKXtyZXR1cm4gYi5nZXRVVENNb250aCgpLWEuZ2V0VVRDTW9udGgoKSsxMiooYi5nZXRVVENGdWxsWWVhcigpLWEuZ2V0VVRDRnVsbFllYXIoKSl9LGZ1bmN0aW9uKGEpe3JldHVybiBhLmdldFVUQ01vbnRoKCl9KSxnYT1mYS5yYW5nZSxoYT1iKGZ1bmN0aW9uKGEpe2Euc2V0VVRDTW9udGgoMCwxKSxhLnNldFVUQ0hvdXJzKDAsMCwwLDApfSxmdW5jdGlvbihhLGIpe2Euc2V0VVRDRnVsbFllYXIoYS5nZXRVVENGdWxsWWVhcigpK2IpfSxmdW5jdGlvbihhLGIpe3JldHVybiBiLmdldFVUQ0Z1bGxZZWFyKCktYS5nZXRVVENGdWxsWWVhcigpfSxmdW5jdGlvbihhKXtyZXR1cm4gYS5nZXRVVENGdWxsWWVhcigpfSk7aGEuZXZlcnk9ZnVuY3Rpb24oYSl7cmV0dXJuIGlzRmluaXRlKGE9TWF0aC5mbG9vcihhKSkmJmE+MD9iKGZ1bmN0aW9uKGIpe2Iuc2V0VVRDRnVsbFllYXIoTWF0aC5mbG9vcihiLmdldFVUQ0Z1bGxZZWFyKCkvYSkqYSksYi5zZXRVVENNb250aCgwLDEpLGIuc2V0VVRDSG91cnMoMCwwLDAsMCl9LGZ1bmN0aW9uKGIsYyl7Yi5zZXRVVENGdWxsWWVhcihiLmdldFVUQ0Z1bGxZZWFyKCkrYyphKX0pOm51bGx9O3ZhciBpYT1oYS5yYW5nZTthLnRpbWVJbnRlcnZhbD1iLGEudGltZU1pbGxpc2Vjb25kPWcsYS50aW1lTWlsbGlzZWNvbmRzPWgsYS51dGNNaWxsaXNlY29uZD1nLGEudXRjTWlsbGlzZWNvbmRzPWgsYS50aW1lU2Vjb25kPW4sYS50aW1lU2Vjb25kcz1vLGEudXRjU2Vjb25kPW4sYS51dGNTZWNvbmRzPW8sYS50aW1lTWludXRlPXAsYS50aW1lTWludXRlcz1xLGEudGltZUhvdXI9cixhLnRpbWVIb3Vycz1zLGEudGltZURheT10LGEudGltZURheXM9dSxhLnRpbWVXZWVrPXYsYS50aW1lV2Vla3M9QyxhLnRpbWVTdW5kYXk9dixhLnRpbWVTdW5kYXlzPUMsYS50aW1lTW9uZGF5PXcsYS50aW1lTW9uZGF5cz1ELGEudGltZVR1ZXNkYXk9eCxhLnRpbWVUdWVzZGF5cz1FLGEudGltZVdlZG5lc2RheT15LGEudGltZVdlZG5lc2RheXM9RixhLnRpbWVUaHVyc2RheT16LGEudGltZVRodXJzZGF5cz1HLGEudGltZUZyaWRheT1BLGEudGltZUZyaWRheXM9SCxhLnRpbWVTYXR1cmRheT1CLGEudGltZVNhdHVyZGF5cz1JLGEudGltZU1vbnRoPUosYS50aW1lTW9udGhzPUssYS50aW1lWWVhcj1MLGEudGltZVllYXJzPU0sYS51dGNNaW51dGU9TixhLnV0Y01pbnV0ZXM9TyxhLnV0Y0hvdXI9UCxhLnV0Y0hvdXJzPVEsYS51dGNEYXk9UixhLnV0Y0RheXM9UyxhLnV0Y1dlZWs9VCxhLnV0Y1dlZWtzPSQsYS51dGNTdW5kYXk9VCxhLnV0Y1N1bmRheXM9JCxhLnV0Y01vbmRheT1VLGEudXRjTW9uZGF5cz1fLGEudXRjVHVlc2RheT1WLGEudXRjVHVlc2RheXM9YWEsYS51dGNXZWRuZXNkYXk9VyxhLnV0Y1dlZG5lc2RheXM9YmEsYS51dGNUaHVyc2RheT1YLGEudXRjVGh1cnNkYXlzPWNhLGEudXRjRnJpZGF5PVksYS51dGNGcmlkYXlzPWRhLGEudXRjU2F0dXJkYXk9WixhLnV0Y1NhdHVyZGF5cz1lYSxhLnV0Y01vbnRoPWZhLGEudXRjTW9udGhzPWdhLGEudXRjWWVhcj1oYSxhLnV0Y1llYXJzPWlhLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShhLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KX0pfSx7fV0sMTA6W2Z1bmN0aW9uKGEsYixjKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gZChhKXtyZXR1cm4gYSYmYS5fX2VzTW9kdWxlP2E6e2RlZmF1bHQ6YX19ZnVuY3Rpb24gZSgpe2Z1bmN0aW9uIGEoYSl7dmFyIGg9Zy5kZWZhdWx0LmQzX2NhbGNUeXBlKGMsdyxtLG4scix1KSxpPWEuc2VsZWN0QWxsKCJnIikuZGF0YShbY10pO2kuZW50ZXIoKS5hcHBlbmQoImciKS5hdHRyKCJjbGFzcyIsbysibGVnZW5kQ2VsbHMiKTt2YXIgaj1hLnNlbGVjdCgiLiIrbysibGVnZW5kQ2VsbHMiKS5zZWxlY3RBbGwoIi4iK28rImNlbGwiKS5kYXRhKGguZGF0YSkseT1qLmVudGVyKCkuYXBwZW5kKCJnIikuYXR0cigiY2xhc3MiLG8rImNlbGwiKSx6PSh5LmFwcGVuZChkKS5hdHRyKCJjbGFzcyIsbysic3dhdGNoIiksYS5zZWxlY3RBbGwoImcuIitvKyJjZWxsICIrZCkpO2cuZGVmYXVsdC5kM19hZGRFdmVudHMoeSx4KSxqLmV4aXQoKS50cmFuc2l0aW9uKCkuc3R5bGUoIm9wYWNpdHkiLDApLnJlbW92ZSgpLGcuZGVmYXVsdC5kM19kcmF3U2hhcGVzKGQseixmLGUsayxiKSxnLmRlZmF1bHQuZDNfYWRkVGV4dChhLHksaC5sYWJlbHMsbyk7dmFyIEE9eS5zZWxlY3RBbGwoInRleHQiKSxCPXoubm9kZXMoKS5tYXAoZnVuY3Rpb24oYSl7cmV0dXJuIGEuZ2V0QkJveCgpfSk7cD96LmF0dHIoImNsYXNzIixmdW5jdGlvbihhKXtyZXR1cm4gbysic3dhdGNoICIraC5mZWF0dXJlKGEpfSk6ImxpbmUiPT1kP3ouc3R5bGUoInN0cm9rZSIsaC5mZWF0dXJlKTp6LnN0eWxlKCJmaWxsIixoLmZlYXR1cmUpO3ZhciBDLEQsRT0ic3RhcnQiPT10PzA6Im1pZGRsZSI9PXQ/LjU6MTsidmVydGljYWwiPT09dj8oQz1mdW5jdGlvbihhLGIpe3JldHVybiJ0cmFuc2xhdGUoMCwgIitiKihCW2JdLmhlaWdodCtsKSsiKSJ9LEQ9ZnVuY3Rpb24oYSxiKXtyZXR1cm4idHJhbnNsYXRlKCIrKEJbYl0ud2lkdGgrQltiXS54K3MpKyIsIisoQltiXS55K0JbYl0uaGVpZ2h0LzIrNSkrIikifSk6Imhvcml6b250YWwiPT09diYmKEM9ZnVuY3Rpb24oYSxiKXtyZXR1cm4idHJhbnNsYXRlKCIrYiooQltiXS53aWR0aCtsKSsiLDApIn0sRD1mdW5jdGlvbihhLGIpe3JldHVybiJ0cmFuc2xhdGUoIisoQltiXS53aWR0aCpFK0JbYl0ueCkrIiwiKyhCW2JdLmhlaWdodCtCW2JdLnkrcys4KSsiKSJ9KSxnLmRlZmF1bHQuZDNfcGxhY2VtZW50KHYseSxDLEEsRCx0KSwKZy5kZWZhdWx0LmQzX3RpdGxlKGEscSxvKSxqLnRyYW5zaXRpb24oKS5zdHlsZSgib3BhY2l0eSIsMSl9dmFyIGIsYz0oMCxpLnNjYWxlTGluZWFyKSgpLGQ9InJlY3QiLGU9MTUsZj0xNSxrPTEwLGw9MixtPVs1XSxuPVtdLG89IiIscD0hMSxxPSIiLHI9KDAsai5mb3JtYXQpKCIuMDFmIikscz0xMCx0PSJtaWRkbGUiLHU9InRvIix2PSJ2ZXJ0aWNhbCIsdz0hMSx4PSgwLGguZGlzcGF0Y2gpKCJjZWxsb3ZlciIsImNlbGxvdXQiLCJjZWxsY2xpY2siKTtyZXR1cm4gYS5zY2FsZT1mdW5jdGlvbihiKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oYz1iLGEpOmN9LGEuY2VsbHM9ZnVuY3Rpb24oYil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KChiLmxlbmd0aD4xfHxiPj0yKSYmKG09YiksYSk6bX0sYS5zaGFwZT1mdW5jdGlvbihjLGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPygoInJlY3QiPT1jfHwiY2lyY2xlIj09Y3x8ImxpbmUiPT1jfHwicGF0aCI9PWMmJiJzdHJpbmciPT10eXBlb2YgZSkmJihkPWMsYj1lKSxhKTpkfSxhLnNoYXBlV2lkdGg9ZnVuY3Rpb24oYil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGU9K2IsYSk6ZX0sYS5zaGFwZUhlaWdodD1mdW5jdGlvbihiKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oZj0rYixhKTpmfSxhLnNoYXBlUmFkaXVzPWZ1bmN0aW9uKGIpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhrPStiLGEpOmt9LGEuc2hhcGVQYWRkaW5nPWZ1bmN0aW9uKGIpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhsPStiLGEpOmx9LGEubGFiZWxzPWZ1bmN0aW9uKGIpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhuPWIsYSk6bn0sYS5sYWJlbEFsaWduPWZ1bmN0aW9uKGIpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPygic3RhcnQiIT1iJiYiZW5kIiE9YiYmIm1pZGRsZSIhPWJ8fCh0PWIpLGEpOnR9LGEubGFiZWxGb3JtYXQ9ZnVuY3Rpb24oYil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHI9YixhKTpyfSxhLmxhYmVsT2Zmc2V0PWZ1bmN0aW9uKGIpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhzPStiLGEpOnN9LGEubGFiZWxEZWxpbWl0ZXI9ZnVuY3Rpb24oYil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHU9YixhKTp1fSxhLnVzZUNsYXNzPWZ1bmN0aW9uKGIpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhiIT09ITAmJmIhPT0hMXx8KHA9YiksYSk6cH0sYS5vcmllbnQ9ZnVuY3Rpb24oYil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGI9Yi50b0xvd2VyQ2FzZSgpLCJob3Jpem9udGFsIiE9YiYmInZlcnRpY2FsIiE9Ynx8KHY9YiksYSk6dn0sYS5hc2NlbmRpbmc9ZnVuY3Rpb24oYil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHc9ISFiLGEpOnd9LGEuY2xhc3NQcmVmaXg9ZnVuY3Rpb24oYil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG89YixhKTpvfSxhLnRpdGxlPWZ1bmN0aW9uKGIpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhxPWIsYSk6cX0sYS5vbj1mdW5jdGlvbigpe3ZhciBiPXgub24uYXBwbHkoeCxhcmd1bWVudHMpO3JldHVybiBiPT09eD9hOmJ9LGF9T2JqZWN0LmRlZmluZVByb3BlcnR5KGMsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLGMuZGVmYXVsdD1lO3ZhciBmPWEoIi4vbGVnZW5kIiksZz1kKGYpLGg9YSgiZDMtZGlzcGF0Y2giKSxpPWEoImQzLXNjYWxlIiksaj1hKCJkMy1mb3JtYXQiKX0seyIuL2xlZ2VuZCI6MTEsImQzLWRpc3BhdGNoIjo0LCJkMy1mb3JtYXQiOjUsImQzLXNjYWxlIjo3fV0sMTE6W2Z1bmN0aW9uKGEsYixjKXsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KGMsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLGMuZGVmYXVsdD17ZDNfaWRlbnRpdHk6ZnVuY3Rpb24oYSl7cmV0dXJuIGF9LGQzX21lcmdlTGFiZWxzOmZ1bmN0aW9uKGEsYil7aWYoMD09PWIubGVuZ3RoKXJldHVybiBhO2E9YT9hOltdO2Zvcih2YXIgYz1iLmxlbmd0aDtjPGEubGVuZ3RoO2MrKyliLnB1c2goYVtjXSk7cmV0dXJuIGJ9LGQzX2xpbmVhckxlZ2VuZDpmdW5jdGlvbihhLGIsYyl7dmFyIGQ9W107aWYoYi5sZW5ndGg+MSlkPWI7ZWxzZSBmb3IodmFyIGU9YS5kb21haW4oKSxmPShlW2UubGVuZ3RoLTFdLWVbMF0pLyhiLTEpLGc9MDtnPGI7ZysrKWQucHVzaChlWzBdK2cqZik7dmFyIGg9ZC5tYXAoYyk7cmV0dXJue2RhdGE6ZCxsYWJlbHM6aCxmZWF0dXJlOmZ1bmN0aW9uKGIpe3JldHVybiBhKGIpfX19LGQzX3F1YW50TGVnZW5kOmZ1bmN0aW9uKGEsYixjKXt2YXIgZD1hLnJhbmdlKCkubWFwKGZ1bmN0aW9uKGQpe3ZhciBlPWEuaW52ZXJ0RXh0ZW50KGQpO2IoZVswXSksYihlWzFdKTtyZXR1cm4gYihlWzBdKSsiICIrYysiICIrYihlWzFdKX0pO3JldHVybntkYXRhOmEucmFuZ2UoKSxsYWJlbHM6ZCxmZWF0dXJlOnRoaXMuZDNfaWRlbnRpdHl9fSxkM19vcmRpbmFsTGVnZW5kOmZ1bmN0aW9uKGEpe3JldHVybntkYXRhOmEuZG9tYWluKCksbGFiZWxzOmEuZG9tYWluKCksZmVhdHVyZTpmdW5jdGlvbihiKXtyZXR1cm4gYShiKX19fSxkM19kcmF3U2hhcGVzOmZ1bmN0aW9uKGEsYixjLGQsZSxmKXsicmVjdCI9PT1hP2IuYXR0cigiaGVpZ2h0IixjKS5hdHRyKCJ3aWR0aCIsZCk6ImNpcmNsZSI9PT1hP2IuYXR0cigiciIsZSk6ImxpbmUiPT09YT9iLmF0dHIoIngxIiwwKS5hdHRyKCJ4MiIsZCkuYXR0cigieTEiLDApLmF0dHIoInkyIiwwKToicGF0aCI9PT1hJiZiLmF0dHIoImQiLGYpfSxkM19hZGRUZXh0OmZ1bmN0aW9uKGEsYixjLGQpe2IuYXBwZW5kKCJ0ZXh0IikuYXR0cigiY2xhc3MiLGQrImxhYmVsIiksYS5zZWxlY3RBbGwoImcuIitkKyJjZWxsIHRleHQiKS5kYXRhKGMpLnRleHQodGhpcy5kM19pZGVudGl0eSl9LGQzX2NhbGNUeXBlOmZ1bmN0aW9uKGEsYixjLGQsZSxmKXt2YXIgZz1hLmludmVydEV4dGVudD90aGlzLmQzX3F1YW50TGVnZW5kKGEsZSxmKTphLnRpY2tzP3RoaXMuZDNfbGluZWFyTGVnZW5kKGEsYyxlKTp0aGlzLmQzX29yZGluYWxMZWdlbmQoYSk7cmV0dXJuIGcubGFiZWxzPXRoaXMuZDNfbWVyZ2VMYWJlbHMoZy5sYWJlbHMsZCksYiYmKGcubGFiZWxzPXRoaXMuZDNfcmV2ZXJzZShnLmxhYmVscyksZy5kYXRhPXRoaXMuZDNfcmV2ZXJzZShnLmRhdGEpKSxnfSxkM19yZXZlcnNlOmZ1bmN0aW9uKGEpe2Zvcih2YXIgYj1bXSxjPTAsZD1hLmxlbmd0aDtjPGQ7YysrKWJbY109YVtkLWMtMV07cmV0dXJuIGJ9LGQzX3BsYWNlbWVudDpmdW5jdGlvbihhLGIsYyxkLGUsZil7Yi5hdHRyKCJ0cmFuc2Zvcm0iLGMpLGQuYXR0cigidHJhbnNmb3JtIixlKSwiaG9yaXpvbnRhbCI9PT1hJiZkLnN0eWxlKCJ0ZXh0LWFuY2hvciIsZil9LGQzX2FkZEV2ZW50czpmdW5jdGlvbihhLGIpe3ZhciBjPXRoaXM7YS5vbigibW91c2VvdmVyLmxlZ2VuZCIsZnVuY3Rpb24oYSl7Yy5kM19jZWxsT3ZlcihiLGEsdGhpcyl9KS5vbigibW91c2VvdXQubGVnZW5kIixmdW5jdGlvbihhKXtjLmQzX2NlbGxPdXQoYixhLHRoaXMpfSkub24oImNsaWNrLmxlZ2VuZCIsZnVuY3Rpb24oYSl7Yy5kM19jZWxsQ2xpY2soYixhLHRoaXMpfSl9LGQzX2NlbGxPdmVyOmZ1bmN0aW9uKGEsYixjKXthLmNhbGwoImNlbGxvdmVyIixjLGIpfSxkM19jZWxsT3V0OmZ1bmN0aW9uKGEsYixjKXthLmNhbGwoImNlbGxvdXQiLGMsYil9LGQzX2NlbGxDbGljazpmdW5jdGlvbihhLGIsYyl7YS5jYWxsKCJjZWxsY2xpY2siLGMsYil9LGQzX3RpdGxlOmZ1bmN0aW9uKGEsYixjKXtpZigiIiE9PWIpe3ZhciBkPWEuc2VsZWN0QWxsKCJ0ZXh0LiIrYysibGVnZW5kVGl0bGUiKTtkLmRhdGEoW2JdKS5lbnRlcigpLmFwcGVuZCgidGV4dCIpLmF0dHIoImNsYXNzIixjKyJsZWdlbmRUaXRsZSIpLGEuc2VsZWN0QWxsKCJ0ZXh0LiIrYysibGVnZW5kVGl0bGUiKS50ZXh0KGIpO3ZhciBlPWEuc2VsZWN0KCIuIitjKyJsZWdlbmRDZWxscyIpLGY9YS5zZWxlY3QoIi4iK2MrImxlZ2VuZFRpdGxlIikubm9kZXMoKS5tYXAoZnVuY3Rpb24oYSl7cmV0dXJuIGEuZ2V0QkJveCgpLmhlaWdodH0pWzBdLGc9LWUubm9kZXMoKS5tYXAoZnVuY3Rpb24oYSl7cmV0dXJuIGEuZ2V0QkJveCgpLnh9KVswXTtlLmF0dHIoInRyYW5zZm9ybSIsInRyYW5zbGF0ZSgiK2crIiwiKyhmKzEwKSsiKSIpfX19fSx7fV0sMTI6W2Z1bmN0aW9uKGEsYixjKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gZChhKXtyZXR1cm4gYSYmYS5fX2VzTW9kdWxlP2E6e2RlZmF1bHQ6YX19ZnVuY3Rpb24gZSgpe2Z1bmN0aW9uIGEoYSl7dmFyIGg9Zy5kZWZhdWx0LmQzX2NhbGNUeXBlKGMsdSxsLG0scCxzKSxpPWEuc2VsZWN0QWxsKCJnIikuZGF0YShbY10pO2kuZW50ZXIoKS5hcHBlbmQoImciKS5hdHRyKCJjbGFzcyIsbisibGVnZW5kQ2VsbHMiKTt2YXIgaj1hLnNlbGVjdCgiLiIrbisibGVnZW5kQ2VsbHMiKS5zZWxlY3RBbGwoIi4iK24rImNlbGwiKS5kYXRhKGguZGF0YSksdz1qLmVudGVyKCkuYXBwZW5kKCJnIikuYXR0cigiY2xhc3MiLG4rImNlbGwiKSx4PSh3LmFwcGVuZChkKS5hdHRyKCJjbGFzcyIsbisic3dhdGNoIiksYS5zZWxlY3RBbGwoImcuIituKyJjZWxsICIrZCkpO2cuZGVmYXVsdC5kM19hZGRFdmVudHModyx2KSxqLmV4aXQoKS50cmFuc2l0aW9uKCkuc3R5bGUoIm9wYWNpdHkiLDApLnJlbW92ZSgpLCJsaW5lIj09PWQ/KGcuZGVmYXVsdC5kM19kcmF3U2hhcGVzKGQseCwwLGUpLHguYXR0cigic3Ryb2tlLXdpZHRoIixoLmZlYXR1cmUpKTpnLmRlZmF1bHQuZDNfZHJhd1NoYXBlcyhkLHgsaC5mZWF0dXJlLGguZmVhdHVyZSxoLmZlYXR1cmUsYiksZy5kZWZhdWx0LmQzX2FkZFRleHQoYSx3LGgubGFiZWxzLG4pO3ZhciB5LHosQT13LnNlbGVjdEFsbCgidGV4dCIpLEI9eC5ub2RlcygpLm1hcChmdW5jdGlvbihhLGIpe3ZhciBlPWEuZ2V0QkJveCgpLGY9YyhoLmRhdGFbYl0pO3JldHVybiJsaW5lIj09PWQmJiJob3Jpem9udGFsIj09PXQ/ZS5oZWlnaHQ9ZS5oZWlnaHQrZjoibGluZSI9PT1kJiYidmVydGljYWwiPT09dCYmKGUud2lkdGg9ZS53aWR0aCksZX0pLEM9KDAsay5tYXgpKEIsZnVuY3Rpb24oYSl7cmV0dXJuIGEuaGVpZ2h0K2EueX0pLEQ9KDAsay5tYXgpKEIsZnVuY3Rpb24oYSl7cmV0dXJuIGEud2lkdGgrYS54fSksRT0ic3RhcnQiPT1yPzA6Im1pZGRsZSI9PXI/LjU6MTsidmVydGljYWwiPT09dD8oeT1mdW5jdGlvbihhLGIpe3ZhciBjPSgwLGsuc3VtKShCLnNsaWNlKDAsYisxKSxmdW5jdGlvbihhKXtyZXR1cm4gYS5oZWlnaHR9KTtyZXR1cm4idHJhbnNsYXRlKDAsICIrKGMrYipmKSsiKSJ9LHo9ZnVuY3Rpb24oYSxiKXtyZXR1cm4idHJhbnNsYXRlKCIrKEQrcSkrIiwiKyhCW2JdLnkrQltiXS5oZWlnaHQvMis1KSsiKSJ9KToiaG9yaXpvbnRhbCI9PT10JiYoeT1mdW5jdGlvbihhLGIpe3ZhciBjPSgwLGsuc3VtKShCLnNsaWNlKDAsYisxKSxmdW5jdGlvbihhKXtyZXR1cm4gYS53aWR0aH0pO3JldHVybiJ0cmFuc2xhdGUoIisoYytiKmYpKyIsMCkifSx6PWZ1bmN0aW9uKGEsYil7cmV0dXJuInRyYW5zbGF0ZSgiKyhCW2JdLndpZHRoKkUrQltiXS54KSsiLCIrKEMrcSkrIikifSksZy5kZWZhdWx0LmQzX3BsYWNlbWVudCh0LHcseSxBLHosciksZy5kZWZhdWx0LmQzX3RpdGxlKGEsbyxuKSxqLnRyYW5zaXRpb24oKS5zdHlsZSgib3BhY2l0eSIsMSl9dmFyIGIsYz0oMCxpLnNjYWxlTGluZWFyKSgpLGQ9InJlY3QiLGU9MTUsZj0yLGw9WzVdLG09W10sbj0iIixvPSIiLHA9KDAsai5mb3JtYXQpKCIuMDFmIikscT0xMCxyPSJtaWRkbGUiLHM9InRvIix0PSJ2ZXJ0aWNhbCIsdT0hMSx2PSgwLGguZGlzcGF0Y2gpKCJjZWxsb3ZlciIsImNlbGxvdXQiLCJjZWxsY2xpY2siKTtyZXR1cm4gYS5zY2FsZT1mdW5jdGlvbihiKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oYz1iLGEpOmN9LGEuY2VsbHM9ZnVuY3Rpb24oYil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KChiLmxlbmd0aD4xfHxiPj0yKSYmKGw9YiksYSk6bH0sYS5zaGFwZT1mdW5jdGlvbihjLGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPygicmVjdCIhPWMmJiJjaXJjbGUiIT1jJiYibGluZSIhPWN8fChkPWMsYj1lKSxhKTpkfSxhLnNoYXBlV2lkdGg9ZnVuY3Rpb24oYil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGU9K2IsYSk6ZX0sYS5zaGFwZVBhZGRpbmc9ZnVuY3Rpb24oYil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGY9K2IsYSk6Zn0sYS5sYWJlbHM9ZnVuY3Rpb24oYil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG09YixhKTptfSxhLmxhYmVsQWxpZ249ZnVuY3Rpb24oYil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KCJzdGFydCIhPWImJiJlbmQiIT1iJiYibWlkZGxlIiE9Ynx8KHI9YiksYSk6cn0sYS5sYWJlbEZvcm1hdD1mdW5jdGlvbihiKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8ocD1iLGEpOnB9LGEubGFiZWxPZmZzZXQ9ZnVuY3Rpb24oYil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHE9K2IsYSk6cX0sYS5sYWJlbERlbGltaXRlcj1mdW5jdGlvbihiKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8ocz1iLGEpOnN9LGEub3JpZW50PWZ1bmN0aW9uKGIpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhiPWIudG9Mb3dlckNhc2UoKSwiaG9yaXpvbnRhbCIhPWImJiJ2ZXJ0aWNhbCIhPWJ8fCh0PWIpLGEpOnR9LGEuYXNjZW5kaW5nPWZ1bmN0aW9uKGIpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh1PSEhYixhKTp1fSxhLmNsYXNzUHJlZml4PWZ1bmN0aW9uKGIpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhuPWIsYSk6bn0sYS50aXRsZT1mdW5jdGlvbihiKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obz1iLGEpOm99LGEub249ZnVuY3Rpb24oKXt2YXIgYj12Lm9uLmFwcGx5KHYsYXJndW1lbnRzKTtyZXR1cm4gYj09PXY/YTpifSxhfU9iamVjdC5kZWZpbmVQcm9wZXJ0eShjLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSxjLmRlZmF1bHQ9ZTt2YXIgZj1hKCIuL2xlZ2VuZCIpLGc9ZChmKSxoPWEoImQzLWRpc3BhdGNoIiksaT1hKCJkMy1zY2FsZSIpLGo9YSgiZDMtZm9ybWF0Iiksaz1hKCJkMy1hcnJheSIpfSx7Ii4vbGVnZW5kIjoxMSwiZDMtYXJyYXkiOjEsImQzLWRpc3BhdGNoIjo0LCJkMy1mb3JtYXQiOjUsImQzLXNjYWxlIjo3fV0sMTM6W2Z1bmN0aW9uKGEsYixjKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gZChhKXtyZXR1cm4gYSYmYS5fX2VzTW9kdWxlP2E6e2RlZmF1bHQ6YX19ZnVuY3Rpb24gZSgpe2Z1bmN0aW9uIGEoYSl7dmFyIGg9Zy5kZWZhdWx0LmQzX2NhbGNUeXBlKGIsdixtLG4scSx0KSxpPWEuc2VsZWN0QWxsKCJnIikuZGF0YShbYl0pO2kuZW50ZXIoKS5hcHBlbmQoImciKS5hdHRyKCJjbGFzcyIsbysibGVnZW5kQ2VsbHMiKTt2YXIgaj1hLnNlbGVjdCgiLiIrbysibGVnZW5kQ2VsbHMiKS5zZWxlY3RBbGwoIi4iK28rImNlbGwiKS5kYXRhKGguZGF0YSkseD1qLmVudGVyKCkuYXBwZW5kKCJnIikuYXR0cigiY2xhc3MiLG8rImNlbGwiKSx5PSh4LmFwcGVuZChjKS5hdHRyKCJjbGFzcyIsbysic3dhdGNoIiksYS5zZWxlY3RBbGwoImcuIitvKyJjZWxsICIrYykpO2cuZGVmYXVsdC5kM19hZGRFdmVudHMoeCx3KSxqLmV4aXQoKS50cmFuc2l0aW9uKCkuc3R5bGUoIm9wYWNpdHkiLDApLnJlbW92ZSgpLGcuZGVmYXVsdC5kM19kcmF3U2hhcGVzKGMseSxlLGQsZixoLmZlYXR1cmUpLGcuZGVmYXVsdC5kM19hZGRUZXh0KGEseCxoLmxhYmVscyxvKTt2YXIgeixBLEI9eC5zZWxlY3RBbGwoInRleHQiKSxDPXkubm9kZXMoKS5tYXAoZnVuY3Rpb24oYSl7cmV0dXJuIGEuZ2V0QkJveCgpfSksRD0oMCxrLm1heCkoQyxmdW5jdGlvbihhKXtyZXR1cm4gYS5oZWlnaHR9KSxFPSgwLGsubWF4KShDLGZ1bmN0aW9uKGEpe3JldHVybiBhLndpZHRofSksRj0ic3RhcnQiPT1yPzA6Im1pZGRsZSI9PXI/LjU6MTsidmVydGljYWwiPT09dT8oej1mdW5jdGlvbihhLGIpe3JldHVybiJ0cmFuc2xhdGUoMCwgIitiKihEK2wpKyIpIn0sQT1mdW5jdGlvbihhLGIpe3JldHVybiJ0cmFuc2xhdGUoIisoRStzKSsiLCIrKENbYl0ueStDW2JdLmhlaWdodC8yKzUpKyIpIn0pOiJob3Jpem9udGFsIj09PXUmJih6PWZ1bmN0aW9uKGEsYil7cmV0dXJuInRyYW5zbGF0ZSgiK2IqKEUrbCkrIiwwKSJ9LEE9ZnVuY3Rpb24oYSxiKXtyZXR1cm4idHJhbnNsYXRlKCIrKENbYl0ud2lkdGgqRitDW2JdLngpKyIsIisoRCtzKSsiKSJ9KSxnLmRlZmF1bHQuZDNfcGxhY2VtZW50KHUseCx6LEIsQSxyKSxnLmRlZmF1bHQuZDNfdGl0bGUoYSxwLG8pLGoudHJhbnNpdGlvbigpLnN0eWxlKCJvcGFjaXR5IiwxKX12YXIgYj0oMCxpLnNjYWxlTGluZWFyKSgpLGM9InBhdGgiLGQ9MTUsZT0xNSxmPTEwLGw9NSxtPVs1XSxuPVtdLG89IiIscD0iIixxPSgwLGouZm9ybWF0KSgiLjAxZiIpLHI9Im1pZGRsZSIscz0xMCx0PSJ0byIsdT0idmVydGljYWwiLHY9ITEsdz0oMCxoLmRpc3BhdGNoKSgiY2VsbG92ZXIiLCJjZWxsb3V0IiwiY2VsbGNsaWNrIik7cmV0dXJuIGEuc2NhbGU9ZnVuY3Rpb24oYyl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGI9YyxhKTpifSxhLmNlbGxzPWZ1bmN0aW9uKGIpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPygoYi5sZW5ndGg+MXx8Yj49MikmJihtPWIpLGEpOm19LGEuc2hhcGVQYWRkaW5nPWZ1bmN0aW9uKGIpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhsPStiLGEpOmx9LGEubGFiZWxzPWZ1bmN0aW9uKGIpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhuPWIsYSk6bn0sYS5sYWJlbEFsaWduPWZ1bmN0aW9uKGIpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPygic3RhcnQiIT1iJiYiZW5kIiE9YiYmIm1pZGRsZSIhPWJ8fChyPWIpLGEpOnJ9LGEubGFiZWxGb3JtYXQ9ZnVuY3Rpb24oYil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHE9YixhKTpxfSxhLmxhYmVsT2Zmc2V0PWZ1bmN0aW9uKGIpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhzPStiLGEpOnN9LGEubGFiZWxEZWxpbWl0ZXI9ZnVuY3Rpb24oYil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHQ9YixhKTp0fSxhLm9yaWVudD1mdW5jdGlvbihiKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oYj1iLnRvTG93ZXJDYXNlKCksImhvcml6b250YWwiIT1iJiYidmVydGljYWwiIT1ifHwodT1iKSxhKTp1fSxhLmFzY2VuZGluZz1mdW5jdGlvbihiKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8odj0hIWIsYSk6dn0sYS5jbGFzc1ByZWZpeD1mdW5jdGlvbihiKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obz1iLGEpOm99LGEudGl0bGU9ZnVuY3Rpb24oYil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHA9YixhKTpwfSxhLm9uPWZ1bmN0aW9uKCl7dmFyIGI9dy5vbi5hcHBseSh3LGFyZ3VtZW50cyk7cmV0dXJuIGI9PT13P2E6Yn0sYX1PYmplY3QuZGVmaW5lUHJvcGVydHkoYywiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksYy5kZWZhdWx0PWU7dmFyIGY9YSgiLi9sZWdlbmQiKSxnPWQoZiksaD1hKCJkMy1kaXNwYXRjaCIpLGk9YSgiZDMtc2NhbGUiKSxqPWEoImQzLWZvcm1hdCIpLGs9YSgiZDMtYXJyYXkiKX0seyIuL2xlZ2VuZCI6MTEsImQzLWFycmF5IjoxLCJkMy1kaXNwYXRjaCI6NCwiZDMtZm9ybWF0Ijo1LCJkMy1zY2FsZSI6N31dLDE0OltmdW5jdGlvbihhLGIsYyl7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIGQoYSl7cmV0dXJuIGEmJmEuX19lc01vZHVsZT9hOntkZWZhdWx0OmF9fXZhciBlPWEoIi4vY29sb3IiKSxmPWQoZSksZz1hKCIuL3NpemUiKSxoPWQoZyksaT1hKCIuL3N5bWJvbCIpLGo9ZChpKTtkMy5sZWdlbmRDb2xvcj1mLmRlZmF1bHQsZDMubGVnZW5kU2l6ZT1oLmRlZmF1bHQsZDMubGVnZW5kU3ltYm9sPWouZGVmYXVsdH0seyIuL2NvbG9yIjoxMCwiLi9zaXplIjoxMiwiLi9zeW1ib2wiOjEzfV19LHt9LFsxNF0pOw=="></script>
<script src="data:application/x-javascript;base64,Ly8gaHR0cHM6Ly9kM2pzLm9yZy9kMy16b29tLyBWZXJzaW9uIDEuMC4zLiBDb3B5cmlnaHQgMjAxNiBNaWtlIEJvc3RvY2suCiFmdW5jdGlvbih0LGUpeyJvYmplY3QiPT10eXBlb2YgZXhwb3J0cyYmInVuZGVmaW5lZCIhPXR5cGVvZiBtb2R1bGU/ZShleHBvcnRzLHJlcXVpcmUoImQzLWRpc3BhdGNoIikscmVxdWlyZSgiZDMtZHJhZyIpLHJlcXVpcmUoImQzLWludGVycG9sYXRlIikscmVxdWlyZSgiZDMtc2VsZWN0aW9uIikscmVxdWlyZSgiZDMtdHJhbnNpdGlvbiIpKToiZnVuY3Rpb24iPT10eXBlb2YgZGVmaW5lJiZkZWZpbmUuYW1kP2RlZmluZShbImV4cG9ydHMiLCJkMy1kaXNwYXRjaCIsImQzLWRyYWciLCJkMy1pbnRlcnBvbGF0ZSIsImQzLXNlbGVjdGlvbiIsImQzLXRyYW5zaXRpb24iXSxlKTplKHQuZDM9dC5kM3x8e30sdC5kMyx0LmQzLHQuZDMsdC5kMyx0LmQzKX0odGhpcyxmdW5jdGlvbih0LGUsbixvLGksdSl7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIHIodCl7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIHR9fWZ1bmN0aW9uIGgodCxlLG4pe3RoaXMudGFyZ2V0PXQsdGhpcy50eXBlPWUsdGhpcy50cmFuc2Zvcm09bn1mdW5jdGlvbiBzKHQsZSxuKXt0aGlzLms9dCx0aGlzLng9ZSx0aGlzLnk9bn1mdW5jdGlvbiBjKHQpe3JldHVybiB0Ll9fem9vbXx8dn1mdW5jdGlvbiBhKCl7aS5ldmVudC5zdG9wSW1tZWRpYXRlUHJvcGFnYXRpb24oKX1mdW5jdGlvbiBmKCl7aS5ldmVudC5wcmV2ZW50RGVmYXVsdCgpLGkuZXZlbnQuc3RvcEltbWVkaWF0ZVByb3BhZ2F0aW9uKCl9ZnVuY3Rpb24gbCgpe3JldHVybiFpLmV2ZW50LmJ1dHRvbn1mdW5jdGlvbiBtKCl7dmFyIHQsZSxuPXRoaXM7cmV0dXJuIG4gaW5zdGFuY2VvZiBTVkdFbGVtZW50PyhuPW4ub3duZXJTVkdFbGVtZW50fHxuLHQ9bi53aWR0aC5iYXNlVmFsLnZhbHVlLGU9bi5oZWlnaHQuYmFzZVZhbC52YWx1ZSk6KHQ9bi5jbGllbnRXaWR0aCxlPW4uY2xpZW50SGVpZ2h0KSxbWzAsMF0sW3QsZV1dfWZ1bmN0aW9uIHAoKXtyZXR1cm4gdGhpcy5fX3pvb218fHZ9ZnVuY3Rpb24gZCgpe2Z1bmN0aW9uIHQodCl7dC5vbihaKyIuem9vbSIseCkub24oIm1vdXNlZG93bi56b29tIixrKS5vbigiZGJsY2xpY2suem9vbSIsdykub24oInRvdWNoc3RhcnQuem9vbSIsTSkub24oInRvdWNobW92ZS56b29tIixUKS5vbigidG91Y2hlbmQuem9vbSB0b3VjaGNhbmNlbC56b29tIixiKS5zdHlsZSgiLXdlYmtpdC10YXAtaGlnaGxpZ2h0LWNvbG9yIiwicmdiYSgwLDAsMCwwKSIpLnByb3BlcnR5KCJfX3pvb20iLHApfWZ1bmN0aW9uIGModCxlKXtyZXR1cm4gZT1NYXRoLm1heChWLE1hdGgubWluKEQsZSkpLGU9PT10Lms/dDpuZXcgcyhlLHQueCx0LnkpfWZ1bmN0aW9uIGQodCxlLG4pe3ZhciBvPWVbMF0tblswXSp0LmssaT1lWzFdLW5bMV0qdC5rO3JldHVybiBvPT09dC54JiZpPT09dC55P3Q6bmV3IHModC5rLG8saSl9ZnVuY3Rpb24gdih0LGUpe3ZhciBuPXQuaW52ZXJ0WChlWzBdWzBdKS1JLG89dC5pbnZlcnRYKGVbMV1bMF0pLVAsaT10LmludmVydFkoZVswXVsxXSktUyx1PXQuaW52ZXJ0WShlWzFdWzFdKS1qO3JldHVybiB0LnRyYW5zbGF0ZShvPm4/KG4rbykvMjpNYXRoLm1pbigwLG4pfHxNYXRoLm1heCgwLG8pLHU+aT8oaSt1KS8yOk1hdGgubWluKDAsaSl8fE1hdGgubWF4KDAsdSkpfWZ1bmN0aW9uIHkodCl7cmV0dXJuWygrdFswXVswXSsgK3RbMV1bMF0pLzIsKCt0WzBdWzFdKyArdFsxXVsxXSkvMl19ZnVuY3Rpb24geih0LGUsbil7dC5vbigic3RhcnQuem9vbSIsZnVuY3Rpb24oKXtfKHRoaXMsYXJndW1lbnRzKS5zdGFydCgpfSkub24oImludGVycnVwdC56b29tIGVuZC56b29tIixmdW5jdGlvbigpe18odGhpcyxhcmd1bWVudHMpLmVuZCgpfSkudHdlZW4oInpvb20iLGZ1bmN0aW9uKCl7dmFyIHQ9dGhpcyxvPWFyZ3VtZW50cyxpPV8odCxvKSx1PVguYXBwbHkodCxvKSxyPW58fHkodSksaD1NYXRoLm1heCh1WzFdWzBdLXVbMF1bMF0sdVsxXVsxXS11WzBdWzFdKSxjPXQuX196b29tLGE9ImZ1bmN0aW9uIj09dHlwZW9mIGU/ZS5hcHBseSh0LG8pOmUsZj1HKGMuaW52ZXJ0KHIpLmNvbmNhdChoL2MuayksYS5pbnZlcnQocikuY29uY2F0KGgvYS5rKSk7cmV0dXJuIGZ1bmN0aW9uKHQpe2lmKDE9PT10KXQ9YTtlbHNle3ZhciBlPWYodCksbj1oL2VbMl07dD1uZXcgcyhuLHJbMF0tZVswXSpuLHJbMV0tZVsxXSpuKX1pLnpvb20obnVsbCx0KX19KX1mdW5jdGlvbiBfKHQsZSl7Zm9yKHZhciBuLG89MCxpPUgubGVuZ3RoO288aTsrK28paWYoKG49SFtvXSkudGhhdD09PXQpcmV0dXJuIG47cmV0dXJuIG5ldyBnKHQsZSl9ZnVuY3Rpb24gZyh0LGUpe3RoaXMudGhhdD10LHRoaXMuYXJncz1lLHRoaXMuaW5kZXg9LTEsdGhpcy5hY3RpdmU9MCx0aGlzLmV4dGVudD1YLmFwcGx5KHQsZSl9ZnVuY3Rpb24geCgpe2Z1bmN0aW9uIHQoKXtlLndoZWVsPW51bGwsZS5lbmQoKX1pZihFLmFwcGx5KHRoaXMsYXJndW1lbnRzKSl7dmFyIGU9Xyh0aGlzLGFyZ3VtZW50cyksbj10aGlzLl9fem9vbSxvPSJ3aGVlbCI9PVo/LWkuZXZlbnQuZGVsdGFZOmkuZXZlbnQud2hlZWxEZWx0YVkscj1NYXRoLm1heChWLE1hdGgubWluKEQsbi5rKk1hdGgucG93KDIsbyooaS5ldmVudC5kZWx0YU1vZGU/MTIwOjEpLzUwMCkpKSxoPWkubW91c2UodGhpcyk7aWYoZS53aGVlbCllLm1vdXNlWzBdWzBdPT09aFswXSYmZS5tb3VzZVswXVsxXT09PWhbMV18fChlLm1vdXNlWzFdPW4uaW52ZXJ0KGUubW91c2VbMF09aCkpLGNsZWFyVGltZW91dChlLndoZWVsKTtlbHNle2lmKG4uaz09PXIpcmV0dXJuO2UubW91c2U9W2gsbi5pbnZlcnQoaCldLHUuaW50ZXJydXB0KHRoaXMpLGUuc3RhcnQoKX1mKCksZS53aGVlbD1zZXRUaW1lb3V0KHQsVyksZS56b29tKCJtb3VzZSIsdihkKGMobixyKSxlLm1vdXNlWzBdLGUubW91c2VbMV0pLGUuZXh0ZW50KSl9fWZ1bmN0aW9uIGsoKXtmdW5jdGlvbiB0KCl7ZigpLG8ubW92ZWQ9ITAsby56b29tKCJtb3VzZSIsdihkKG8udGhhdC5fX3pvb20sby5tb3VzZVswXT1pLm1vdXNlKG8udGhhdCksby5tb3VzZVsxXSksby5leHRlbnQpKX1mdW5jdGlvbiBlKCl7ci5vbigibW91c2Vtb3ZlLnpvb20gbW91c2V1cC56b29tIixudWxsKSxuLmRyYWdFbmFibGUoaS5ldmVudC52aWV3LG8ubW92ZWQpLGYoKSxvLmVuZCgpfWlmKCFxJiZFLmFwcGx5KHRoaXMsYXJndW1lbnRzKSl7dmFyIG89Xyh0aGlzLGFyZ3VtZW50cykscj1pLnNlbGVjdChpLmV2ZW50LnZpZXcpLm9uKCJtb3VzZW1vdmUuem9vbSIsdCwhMCkub24oIm1vdXNldXAuem9vbSIsZSwhMCksaD1pLm1vdXNlKHRoaXMpO24uZHJhZ0Rpc2FibGUoaS5ldmVudC52aWV3KSxhKCksby5tb3VzZT1baCx0aGlzLl9fem9vbS5pbnZlcnQoaCldLHUuaW50ZXJydXB0KHRoaXMpLG8uc3RhcnQoKX19ZnVuY3Rpb24gdygpe2lmKEUuYXBwbHkodGhpcyxhcmd1bWVudHMpKXt2YXIgZT10aGlzLl9fem9vbSxuPWkubW91c2UodGhpcyksbz1lLmludmVydChuKSx1PWUuayooaS5ldmVudC5zaGlmdEtleT8uNToyKSxyPXYoZChjKGUsdSksbixvKSxYLmFwcGx5KHRoaXMsYXJndW1lbnRzKSk7ZigpLEI+MD9pLnNlbGVjdCh0aGlzKS50cmFuc2l0aW9uKCkuZHVyYXRpb24oQikuY2FsbCh6LHIsbik6aS5zZWxlY3QodGhpcykuY2FsbCh0LnRyYW5zZm9ybSxyKX19ZnVuY3Rpb24gTSgpe2lmKEUuYXBwbHkodGhpcyxhcmd1bWVudHMpKXt2YXIgdCxlLG4sbz1fKHRoaXMsYXJndW1lbnRzKSxyPWkuZXZlbnQuY2hhbmdlZFRvdWNoZXMsaD1yLmxlbmd0aDtmb3IoYSgpLHQ9MDt0PGg7Kyt0KWU9clt0XSxuPWkudG91Y2godGhpcyxyLGUuaWRlbnRpZmllciksbj1bbix0aGlzLl9fem9vbS5pbnZlcnQobiksZS5pZGVudGlmaWVyXSxvLnRvdWNoMD9vLnRvdWNoMXx8KG8udG91Y2gxPW4pOm8udG91Y2gwPW47cmV0dXJuIFkmJihZPWNsZWFyVGltZW91dChZKSwhby50b3VjaDEpPyhvLmVuZCgpLG49aS5zZWxlY3QodGhpcykub24oImRibGNsaWNrLnpvb20iKSx2b2lkKG4mJm4uYXBwbHkodGhpcyxhcmd1bWVudHMpKSk6dm9pZChpLmV2ZW50LnRvdWNoZXMubGVuZ3RoPT09aCYmKFk9c2V0VGltZW91dChmdW5jdGlvbigpe1k9bnVsbH0sTyksdS5pbnRlcnJ1cHQodGhpcyksby5zdGFydCgpKSl9fWZ1bmN0aW9uIFQoKXt2YXIgdCxlLG4sbyx1PV8odGhpcyxhcmd1bWVudHMpLHI9aS5ldmVudC5jaGFuZ2VkVG91Y2hlcyxoPXIubGVuZ3RoO2ZvcihmKCksWSYmKFk9Y2xlYXJUaW1lb3V0KFkpKSx0PTA7dDxoOysrdCllPXJbdF0sbj1pLnRvdWNoKHRoaXMscixlLmlkZW50aWZpZXIpLHUudG91Y2gwJiZ1LnRvdWNoMFsyXT09PWUuaWRlbnRpZmllcj91LnRvdWNoMFswXT1uOnUudG91Y2gxJiZ1LnRvdWNoMVsyXT09PWUuaWRlbnRpZmllciYmKHUudG91Y2gxWzBdPW4pO2lmKGU9dS50aGF0Ll9fem9vbSx1LnRvdWNoMSl7dmFyIHM9dS50b3VjaDBbMF0sYT11LnRvdWNoMFsxXSxsPXUudG91Y2gxWzBdLG09dS50b3VjaDFbMV0scD0ocD1sWzBdLXNbMF0pKnArKHA9bFsxXS1zWzFdKSpwLHk9KHk9bVswXS1hWzBdKSp5Kyh5PW1bMV0tYVsxXSkqeTtlPWMoZSxNYXRoLnNxcnQocC95KSksbj1bKHNbMF0rbFswXSkvMiwoc1sxXStsWzFdKS8yXSxvPVsoYVswXSttWzBdKS8yLChhWzFdK21bMV0pLzJdfWVsc2V7aWYoIXUudG91Y2gwKXJldHVybjtuPXUudG91Y2gwWzBdLG89dS50b3VjaDBbMV19dS56b29tKCJ0b3VjaCIsdihkKGUsbixvKSx1LmV4dGVudCkpfWZ1bmN0aW9uIGIoKXt2YXIgdCxlLG49Xyh0aGlzLGFyZ3VtZW50cyksbz1pLmV2ZW50LmNoYW5nZWRUb3VjaGVzLHU9by5sZW5ndGg7Zm9yKGEoKSxxJiZjbGVhclRpbWVvdXQocSkscT1zZXRUaW1lb3V0KGZ1bmN0aW9uKCl7cT1udWxsfSxPKSx0PTA7dDx1OysrdCllPW9bdF0sbi50b3VjaDAmJm4udG91Y2gwWzJdPT09ZS5pZGVudGlmaWVyP2RlbGV0ZSBuLnRvdWNoMDpuLnRvdWNoMSYmbi50b3VjaDFbMl09PT1lLmlkZW50aWZpZXImJmRlbGV0ZSBuLnRvdWNoMTtuLnRvdWNoMSYmIW4udG91Y2gwJiYobi50b3VjaDA9bi50b3VjaDEsZGVsZXRlIG4udG91Y2gxKSxuLnRvdWNoMHx8bi5lbmQoKX12YXIgWSxxLEU9bCxYPW0sVj0wLEQ9MS8wLEk9LUQsUD1ELFM9SSxqPVAsQj0yNTAsRz1vLmludGVycG9sYXRlWm9vbSxIPVtdLEs9ZS5kaXNwYXRjaCgic3RhcnQiLCJ6b29tIiwiZW5kIiksTz01MDAsVz0xNTAsWj12b2lkIDAhPT1kb2N1bWVudC5vbm1vdXNld2hlZWw/Im1vdXNld2hlZWwiOiJ3aGVlbCI7cmV0dXJuIHQudHJhbnNmb3JtPWZ1bmN0aW9uKHQsZSl7dmFyIG49dC5zZWxlY3Rpb24/dC5zZWxlY3Rpb24oKTp0O24ucHJvcGVydHkoIl9fem9vbSIscCksdCE9PW4/eih0LGUpOm4uaW50ZXJydXB0KCkuZWFjaChmdW5jdGlvbigpe18odGhpcyxhcmd1bWVudHMpLnN0YXJ0KCkuem9vbShudWxsLCJmdW5jdGlvbiI9PXR5cGVvZiBlP2UuYXBwbHkodGhpcyxhcmd1bWVudHMpOmUpLmVuZCgpfSl9LHQuc2NhbGVCeT1mdW5jdGlvbihlLG4pe3Quc2NhbGVUbyhlLGZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5fX3pvb20uayxlPSJmdW5jdGlvbiI9PXR5cGVvZiBuP24uYXBwbHkodGhpcyxhcmd1bWVudHMpOm47cmV0dXJuIHQqZX0pfSx0LnNjYWxlVG89ZnVuY3Rpb24oZSxuKXt0LnRyYW5zZm9ybShlLGZ1bmN0aW9uKCl7dmFyIHQ9WC5hcHBseSh0aGlzLGFyZ3VtZW50cyksZT10aGlzLl9fem9vbSxvPXkodCksaT1lLmludmVydChvKSx1PSJmdW5jdGlvbiI9PXR5cGVvZiBuP24uYXBwbHkodGhpcyxhcmd1bWVudHMpOm47cmV0dXJuIHYoZChjKGUsdSksbyxpKSx0KX0pfSx0LnRyYW5zbGF0ZUJ5PWZ1bmN0aW9uKGUsbixvKXt0LnRyYW5zZm9ybShlLGZ1bmN0aW9uKCl7cmV0dXJuIHYodGhpcy5fX3pvb20udHJhbnNsYXRlKCJmdW5jdGlvbiI9PXR5cGVvZiBuP24uYXBwbHkodGhpcyxhcmd1bWVudHMpOm4sImZ1bmN0aW9uIj09dHlwZW9mIG8/by5hcHBseSh0aGlzLGFyZ3VtZW50cyk6byksWC5hcHBseSh0aGlzLGFyZ3VtZW50cykpfSl9LGcucHJvdG90eXBlPXtzdGFydDpmdW5jdGlvbigpe3JldHVybiAxPT09Kyt0aGlzLmFjdGl2ZSYmKHRoaXMuaW5kZXg9SC5wdXNoKHRoaXMpLTEsdGhpcy5lbWl0KCJzdGFydCIpKSx0aGlzfSx6b29tOmZ1bmN0aW9uKHQsZSl7cmV0dXJuIHRoaXMubW91c2UmJiJtb3VzZSIhPT10JiYodGhpcy5tb3VzZVsxXT1lLmludmVydCh0aGlzLm1vdXNlWzBdKSksdGhpcy50b3VjaDAmJiJ0b3VjaCIhPT10JiYodGhpcy50b3VjaDBbMV09ZS5pbnZlcnQodGhpcy50b3VjaDBbMF0pKSx0aGlzLnRvdWNoMSYmInRvdWNoIiE9PXQmJih0aGlzLnRvdWNoMVsxXT1lLmludmVydCh0aGlzLnRvdWNoMVswXSkpLHRoaXMudGhhdC5fX3pvb209ZSx0aGlzLmVtaXQoInpvb20iKSx0aGlzfSxlbmQ6ZnVuY3Rpb24oKXtyZXR1cm4gMD09PS0tdGhpcy5hY3RpdmUmJihILnNwbGljZSh0aGlzLmluZGV4LDEpLHRoaXMuaW5kZXg9LTEsdGhpcy5lbWl0KCJlbmQiKSksdGhpc30sZW1pdDpmdW5jdGlvbihlKXtpLmN1c3RvbUV2ZW50KG5ldyBoKHQsZSx0aGlzLnRoYXQuX196b29tKSxLLmFwcGx5LEssW2UsdGhpcy50aGF0LHRoaXMuYXJnc10pfX0sdC5maWx0ZXI9ZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KEU9ImZ1bmN0aW9uIj09dHlwZW9mIGU/ZTpyKCEhZSksdCk6RX0sdC5leHRlbnQ9ZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KFg9ImZ1bmN0aW9uIj09dHlwZW9mIGU/ZTpyKFtbK2VbMF1bMF0sK2VbMF1bMV1dLFsrZVsxXVswXSwrZVsxXVsxXV1dKSx0KTpYfSx0LnNjYWxlRXh0ZW50PWZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhWPStlWzBdLEQ9K2VbMV0sdCk6W1YsRF19LHQudHJhbnNsYXRlRXh0ZW50PWZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhJPStlWzBdWzBdLFA9K2VbMV1bMF0sUz0rZVswXVsxXSxqPStlWzFdWzFdLHQpOltbSSxTXSxbUCxqXV19LHQuZHVyYXRpb249ZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KEI9K2UsdCk6Qn0sdC5pbnRlcnBvbGF0ZT1mdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oRz1lLHQpOkd9LHQub249ZnVuY3Rpb24oKXt2YXIgZT1LLm9uLmFwcGx5KEssYXJndW1lbnRzKTtyZXR1cm4gZT09PUs/dDplfSx0fXMucHJvdG90eXBlPXtjb25zdHJ1Y3RvcjpzLHNjYWxlOmZ1bmN0aW9uKHQpe3JldHVybiAxPT09dD90aGlzOm5ldyBzKHRoaXMuayp0LHRoaXMueCx0aGlzLnkpfSx0cmFuc2xhdGU6ZnVuY3Rpb24odCxlKXtyZXR1cm4gMD09PXQmMD09PWU/dGhpczpuZXcgcyh0aGlzLmssdGhpcy54K3RoaXMuayp0LHRoaXMueSt0aGlzLmsqZSl9LGFwcGx5OmZ1bmN0aW9uKHQpe3JldHVyblt0WzBdKnRoaXMuayt0aGlzLngsdFsxXSp0aGlzLmsrdGhpcy55XX0sYXBwbHlYOmZ1bmN0aW9uKHQpe3JldHVybiB0KnRoaXMuayt0aGlzLnh9LGFwcGx5WTpmdW5jdGlvbih0KXtyZXR1cm4gdCp0aGlzLmsrdGhpcy55fSxpbnZlcnQ6ZnVuY3Rpb24odCl7cmV0dXJuWyh0WzBdLXRoaXMueCkvdGhpcy5rLCh0WzFdLXRoaXMueSkvdGhpcy5rXX0saW52ZXJ0WDpmdW5jdGlvbih0KXtyZXR1cm4odC10aGlzLngpL3RoaXMua30saW52ZXJ0WTpmdW5jdGlvbih0KXtyZXR1cm4odC10aGlzLnkpL3RoaXMua30scmVzY2FsZVg6ZnVuY3Rpb24odCl7cmV0dXJuIHQuY29weSgpLmRvbWFpbih0LnJhbmdlKCkubWFwKHRoaXMuaW52ZXJ0WCx0aGlzKS5tYXAodC5pbnZlcnQsdCkpfSxyZXNjYWxlWTpmdW5jdGlvbih0KXtyZXR1cm4gdC5jb3B5KCkuZG9tYWluKHQucmFuZ2UoKS5tYXAodGhpcy5pbnZlcnRZLHRoaXMpLm1hcCh0LmludmVydCx0KSl9LHRvU3RyaW5nOmZ1bmN0aW9uKCl7cmV0dXJuInRyYW5zbGF0ZSgiK3RoaXMueCsiLCIrdGhpcy55KyIpIHNjYWxlKCIrdGhpcy5rKyIpIn19O3ZhciB2PW5ldyBzKDEsMCwwKTtjLnByb3RvdHlwZT1zLnByb3RvdHlwZSx0Lnpvb209ZCx0Lnpvb21UcmFuc2Zvcm09Yyx0Lnpvb21JZGVudGl0eT12LE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KX0pOw=="></script>
<link href="data:text/css;charset=utf-8,%2Elasso%20path%20%7B%0Astroke%3A%20rgb%2880%2C80%2C80%29%3B%0Astroke%2Dwidth%3A%202px%3B%0A%7D%0A%2Elasso%20%2Edrawn%20%7B%0Afill%3A%20%23CCCCCC%3B%0Afill%2Dopacity%3A%20%2E15%20%3B%0A%7D%0A%2Elasso%20%2Eloop%5Fclose%20%7B%0Afill%3A%20none%3B%0Astroke%2Ddasharray%3A%204%2C4%3B%0A%7D%0A%2Elasso%20%2Eorigin%20%7B%0Afill%3A%20%233399FF%3B%0Afill%2Dopacity%3A%20%2E5%3B%0A%7D%0A%2EscatterD3%20%2Enot%2Dpossible%2Dlasso%20%7B%0Afill%3A%20rgb%28150%2C150%2C150%29%3B%0Aopacity%3A%201%3B%0A%7D%0A%2EscatterD3%20%2Earrow%2Enot%2Dpossible%2Dlasso%20%7B%0Astroke%3A%20rgb%28200%2C200%2C200%29%3B%0A%7D%0A%2EscatterD3%20%2Epossible%2Dlasso%20%7B%0Afill%3A%20%23EC888C%3B%0Aopacity%3A%201%3B%0A%7D%0A%2EscatterD3%20%2Earrow%2Epossible%2Dlasso%20%7B%0Astroke%3A%20%23EC888C%3B%0A%7D%0A%0A" rel="stylesheet" />
<script src="data:application/x-javascript;base64,ZDMubGFzc28gPSBmdW5jdGlvbigpIHsKCiAgICB2YXIgaXRlbXMgPSBudWxsLAogICAgICAgIGNsb3NlUGF0aERpc3RhbmNlID0gNzUsCiAgICAgICAgY2xvc2VQYXRoU2VsZWN0ID0gdHJ1ZSwKICAgICAgICBpc1BhdGhDbG9zZWQgPSBmYWxzZSwKICAgICAgICBob3ZlclNlbGVjdCA9IHRydWUsCiAgICAgICAgcG9pbnRzID0gW10sCiAgICAgICAgYXJlYSA9IG51bGwsCiAgICAgICAgb24gPSB7c3RhcnQ6ZnVuY3Rpb24oKXt9LCBkcmF3OiBmdW5jdGlvbigpe30sIGVuZDogZnVuY3Rpb24oKXt9fTsKCiAgICBmdW5jdGlvbiBsYXNzbyhzZWxlY3Rpb24pIHsKCiAgICAgICAgLy8gdGhlIGVsZW1lbnQgd2hlcmUgdGhlIGxhc3NvIHdhcyBjYWxsZWQKICAgICAgICB2YXIgX3RoaXMgPSBzZWxlY3Rpb247CgogICAgICAgIC8vIGFkZCBhIG5ldyBncm91cCBmb3IgdGhlIGxhc3NvCiAgICAgICAgdmFyIGcgPSBfdGhpcy5hcHBlbmQoImciKQogICAgICAgICAgICAgICAgICAgIC5hdHRyKCJjbGFzcyIsImxhc3NvIik7CgogICAgICAgIC8vIGFkZCB0aGUgZHJhd24gcGF0aCBmb3IgdGhlIGxhc3NvCiAgICAgICAgdmFyIGR5bl9wYXRoID0gZy5hcHBlbmQoInBhdGgiKQogICAgICAgICAgICAuYXR0cigiY2xhc3MiLCJkcmF3biIpOwoKICAgICAgICAvLyBhZGQgYSBwYXRoIHVzZWQgZm9yIGNhbGN1bGF0aW9ucwogICAgICAgIHZhciBjYWxjX3BhdGggPSBnLmFwcGVuZCgicGF0aCIpCiAgICAgICAgICAgIC5hdHRyKCJkaXNwbGF5Iiwibm9uZSIpOwoKICAgICAgICAvLyBhZGQgYSBjbG9zZWQgcGF0aAogICAgICAgIHZhciBjbG9zZV9wYXRoID0gZy5hcHBlbmQoInBhdGgiKQogICAgICAgICAgICAuYXR0cigiY2xhc3MiLCJsb29wX2Nsb3NlIik7CgogICAgICAgIC8vIGFkZCBhIGNsb3NlIHBhdGggdXNlZCBmb3IgY2FsY3VsYXRpb25zCiAgICAgICAgdmFyIGNhbGNfY2xvc2VfcGF0aCA9IGcuYXBwZW5kKCJwYXRoIikKICAgICAgICAgICAgLmF0dHIoImRpc3BsYXkiLCJub25lIik7CgogICAgICAgIC8vIGFkZCBhbiBvcmlnaW4gbm9kZQogICAgICAgIHZhciBvcmlnaW5fbm9kZSA9IGcuYXBwZW5kKCJjaXJjbGUiKQogICAgICAgICAgICAuYXR0cigiY2xhc3MiLCJvcmlnaW4iKTsKCiAgICAgICAgLy8gVGhlIGxhc3NvIHBhdGggZm9yIGNhbGN1bGF0aW9ucwogICAgICAgIHZhciBwYXRoOwoKICAgICAgICAvLyBUaGUgdHJhbnNmb3JtZWQgbGFzc28gcGF0aCBmb3IgcmVuZGVyaW5nCiAgICAgICAgdmFyIHRwYXRoOwoKICAgICAgICAvLyBUaGUgbGFzc28gb3JpZ2luIGZvciBjYWxjdWxhdGlvbnMKICAgICAgICB2YXIgb3JpZ2luOwoKICAgICAgICAvLyBUaGUgdHJhbnNmb3JtZWQgbGFzc28gb3JpZ2luIGZvciByZW5kZXJpbmcKICAgICAgICB2YXIgdG9yaWdpbjsKCiAgICAgICAgLy8gVGhlIGxhc3Qga25vd24gcG9pbnQgb24gdGhlIGxhc3NvIGR1cmluZyBkcmFnIC0gbmVlZGVkIGZvciBldmFsdWF0aW5nIGVkZ2VzCiAgICAgICAgdmFyIGxhc3Rfa25vd25fcG9pbnQ7CgogICAgICAgIC8vIFRoZSBzdGFydGluZyBwb2ludCBmb3IgZXZhbHVhdGluZyB0aGUgcGF0aAogICAgICAgIHZhciBwYXRoX2xlbmd0aF9zdGFydDsKCiAgICAgICAgLy8gQXBwbHkgZHJhZyBiZWhhdmlvcnMKICAgICAgICB2YXIgZHJhZyA9IGQzLmRyYWcoKQogICAgICAgICAgICAub24oInN0YXJ0IiwgZHJhZ3N0YXJ0KQogICAgICAgICAgICAub24oImRyYWciLCBkcmFnbW92ZSkKICAgICAgICAgICAgLm9uKCJlbmQiLCBkcmFnZW5kKTsKCgkvLyBJbml0IERPTS1sb2NhbCBkYXRhCgl2YXIgcmlnaHRfZWRnZXMgPSBkMy5sb2NhbCgpOwoJdmFyIGxlZnRfZWRnZXMgPSBkMy5sb2NhbCgpOwoJdmFyIGNsb3NlX3JpZ2h0X2VkZ2VzID0gZDMubG9jYWwoKTsKCXZhciBjbG9zZV9sZWZ0X2VkZ2VzID0gZDMubG9jYWwoKTsKCQogICAgICAgIC8vIENhbGwgZHJhZwogICAgICAgIGFyZWEuY2FsbChkcmFnKTsKCiAgICAgICAgZnVuY3Rpb24gZHJhZ3N0YXJ0KCkgewogICAgICAgICAgICAvLyBJbml0aWFsaXplIHBhdGhzCiAgICAgICAgICAgIHBhdGg9IiI7CiAgICAgICAgICAgIHRwYXRoID0gIiI7CiAgICAgICAgICAgIGR5bl9wYXRoLmF0dHIoImQiLCAiTTAgMCIpOwogICAgICAgICAgICBjbG9zZV9wYXRoLmF0dHIoImQiLCAiTTAgMCIpOwoJICAgIAogICAgICAgICAgICAvLyBTZXQgcGF0aCBsZW5ndGggc3RhcnQKICAgICAgICAgICAgcGF0aF9sZW5ndGhfc3RhcnQgPSAwOwogICAgICAgICAgICAvLyBTZXQgZXZlcnkgaXRlbSB0byBoYXZlIGEgZmFsc2Ugc2VsZWN0aW9uIGFuZCByZXNldCB0aGVpciBjZW50ZXIgcG9pbnQgYW5kIGNvdW50ZXJzCiAgICAgICAgICAgIGl0ZW1zLmVhY2goZnVuY3Rpb24oZCkgewogICAgICAgICAgICAgICAgZC5ob3ZlclNlbGVjdGVkID0gZmFsc2U7CiAgICAgICAgICAgICAgICBkLmxvb3BTZWxlY3RlZCA9IGZhbHNlOwoJCS8vIElnbm9yZSB0ZXh0IGxhYmVscyBmb3IgY2VudGVyIGNvb3JkaW5hdGVzCgkJaWYgKHRoaXMudGFnTmFtZSAhPSAidGV4dCIpIHsKICAgICAgICAgICAgICAgICAgICB2YXIgYm94ID0gdGhpcy5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTsKICAgICAgICAgICAgICAgICAgICBkLmxhc3NvUG9pbnQgPSB7CgkJCWN4OiBNYXRoLnJvdW5kKGJveC5sZWZ0ICsgYm94LndpZHRoLzIpLAoJCQljeTogTWF0aC5yb3VuZChib3gudG9wICsgYm94LmhlaWdodC8yKQogICAgICAgICAgICAgICAgICAgIH07CgkJfQoJCXJpZ2h0X2VkZ2VzLnNldCh0aGlzLCAwKTsKCQlsZWZ0X2VkZ2VzLnNldCh0aGlzLCAwKTsKCQljbG9zZV9yaWdodF9lZGdlcy5zZXQodGhpcywgMCk7CgkJY2xvc2VfbGVmdF9lZGdlcy5zZXQodGhpcywgMCk7CiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgLy8gaWYgaG92ZXIgaXMgb24sIGFkZCBob3ZlciBmdW5jdGlvbgogICAgICAgICAgICBpZihob3ZlclNlbGVjdD09PXRydWUpIHsKICAgICAgICAgICAgICAgIGl0ZW1zLm9uKCJtb3VzZW92ZXIubGFzc28iLGZ1bmN0aW9uKCkgewogICAgICAgICAgICAgICAgICAgIC8vIGlmIGhvdmVyZWQsIGNoYW5nZSBsYXNzbyBzZWxlY3Rpb24gYXR0cmlidXRlIHRvIHRydWUKICAgICAgICAgICAgICAgICAgICBkMy5zZWxlY3QodGhpcykuaG92ZXJTZWxlY3RlZCA9IHRydWU7CiAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgLy8gUnVuIHVzZXIgZGVmaW5lZCBzdGFydCBmdW5jdGlvbgogICAgICAgICAgICBvbi5zdGFydCgpOwogICAgICAgIH0KCiAgICAgICAgZnVuY3Rpb24gZHJhZ21vdmUoKSB7CiAgICAgICAgICAgIC8vIEdldCBtb3VzZSBwb3NpdGlvbiB3aXRoaW4gYm9keSwgdXNlZCBmb3IgY2FsY3VsYXRpb25zCiAgICAgICAgICAgIHZhciB4ID0gZDMuZXZlbnQuc291cmNlRXZlbnQuY2xpZW50WDsKICAgICAgICAgICAgdmFyIHkgPSBkMy5ldmVudC5zb3VyY2VFdmVudC5jbGllbnRZOwogICAgICAgICAgICAvLyBHZXQgbW91c2UgcG9zaXRpb24gd2l0aGluIGRyYXdpbmcgYXJlYSwgdXNlZCBmb3IgcmVuZGVyaW5nCiAgICAgICAgICAgIHZhciB0eCA9IGQzLm1vdXNlKHRoaXMpWzBdOwogICAgICAgICAgICB2YXIgdHkgPSBkMy5tb3VzZSh0aGlzKVsxXTsKCiAgICAgICAgICAgIC8vIEluaXRpYWxpemUgdGhlIHBhdGggb3IgYWRkIHRoZSBsYXRlc3QgcG9pbnQgdG8gaXQKICAgICAgICAgICAgaWYgKHBhdGg9PT0iIikgewogICAgICAgICAgICAgICAgcGF0aCA9IHBhdGggKyAiTSAiICsgeCArICIgIiArIHk7CiAgICAgICAgICAgICAgICB0cGF0aCA9IHRwYXRoICsgIk0gIiArIHR4ICsgIiAiICsgdHk7CiAgICAgICAgICAgICAgICBvcmlnaW4gPSBbeCx5XTsKICAgICAgICAgICAgICAgIHRvcmlnaW4gPSBbdHgsdHldOwogICAgICAgICAgICAgICAgLy8gRHJhdyBvcmlnaW4gbm9kZQogICAgICAgICAgICAgICAgb3JpZ2luX25vZGUKICAgICAgICAgICAgICAgICAgICAuYXR0cigiY3giLHR4KQogICAgICAgICAgICAgICAgICAgIC5hdHRyKCJjeSIsdHkpCiAgICAgICAgICAgICAgICAgICAgLmF0dHIoInIiLDcpCiAgICAgICAgICAgICAgICAgICAgLmF0dHIoImRpc3BsYXkiLG51bGwpOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGVsc2UgewogICAgICAgICAgICAgICAgcGF0aCA9IHBhdGggKyAiIEwgIiArIHggKyAiICIgKyB5OwogICAgICAgICAgICAgICAgdHBhdGggPSB0cGF0aCArICIgTCAiICsgdHggKyAiICIgKyB0eTsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgLy8gUmVzZXQgY2xvc2VkIGVkZ2VzIGNvdW50ZXIKICAgICAgICAgICAgaXRlbXMuZWFjaChmdW5jdGlvbihkKSB7CgkJY2xvc2VfbGVmdF9lZGdlcy5zZXQodGhpcywgMCk7CgkJY2xvc2VfcmlnaHRfZWRnZXMuc2V0KHRoaXMsIDApOwogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIC8vIENhbGN1bGF0ZSB0aGUgY3VycmVudCBkaXN0YW5jZSBmcm9tIHRoZSBsYXNzbyBvcmlnaW4KICAgICAgICAgICAgdmFyIGRpc3RhbmNlID0gTWF0aC5zcXJ0KE1hdGgucG93KHgtb3JpZ2luWzBdLDIpK01hdGgucG93KHktb3JpZ2luWzFdLDIpKTsKCiAgICAgICAgICAgIC8vIFNldCB0aGUgY2xvc2VkIHBhdGggbGluZQogICAgICAgICAgICB2YXIgY2xvc2VfZHJhd19wYXRoID0gIk0gIiArIHR4ICsgIiAiICsgdHkgKyAiIEwgIiArIHRvcmlnaW5bMF0gKyAiICIgKyB0b3JpZ2luWzFdOwoKICAgICAgICAgICAgLy8gU2V0IHRoZSBjYWxjIGNsb3NlZCBwYXRoIGxpbmUKICAgICAgICAgICAgdmFyIGNhbGNfY2xvc2VfZHJhd19wYXRoID0gIk0gIiArIHggKyAiICIgKyB5ICsgIiBMICIgKyBvcmlnaW5bMF0gKyAiICIgKyBvcmlnaW5bMV07CgogICAgICAgICAgICAvLyBEcmF3IHRoZSBsaW5lcwogICAgICAgICAgICBkeW5fcGF0aC5hdHRyKCJkIix0cGF0aCk7CgogICAgICAgICAgICAvLyBwYXRoIGZvciBjYWxjcwogICAgICAgICAgICBjYWxjX3BhdGguYXR0cigiZCIscGF0aCk7CgogICAgICAgICAgICBjYWxjX2Nsb3NlX3BhdGguYXR0cigiZCIsY2FsY19jbG9zZV9kcmF3X3BhdGgpOwoKICAgICAgICAgICAgLy8gQ2hlY2sgaWYgdGhlIHBhdGggaXMgY2xvc2VkCiAgICAgICAgICAgIGlzUGF0aENsb3NlZCA9IGRpc3RhbmNlPD1jbG9zZVBhdGhEaXN0YW5jZSA/IHRydWUgOiBmYWxzZTsKCiAgICAgICAgICAgIC8vIElmIHdpdGhpbiB0aGUgY2xvc2VkIHBhdGggZGlzdGFuY2UgcGFyYW1ldGVyLCBzaG93IHRoZSBjbG9zZWQgcGF0aC4gb3RoZXJ3aXNlLCBoaWRlIGl0CiAgICAgICAgICAgIGlmKGlzUGF0aENsb3NlZCkgewogICAgICAgICAgICAgICAgY2xvc2VfcGF0aC5hdHRyKCJkaXNwbGF5IixudWxsKTsKICAgICAgICAgICAgfQogICAgICAgICAgICBlbHNlIHsKICAgICAgICAgICAgICAgIGNsb3NlX3BhdGguYXR0cigiZGlzcGxheSIsIm5vbmUiKTsKICAgICAgICAgICAgfQoKCiAgICAgICAgICAgIC8vIEdldCBwYXRoIGxlbmd0aAogICAgICAgICAgICB2YXIgcGF0aF9ub2RlID0gY2FsY19wYXRoLm5vZGUoKTsKICAgICAgICAgICAgdmFyIHBhdGhfbGVuZ3RoX2VuZCA9IHBhdGhfbm9kZS5nZXRUb3RhbExlbmd0aCgpOwogICAgICAgICAgICAvLyBHZXQgdGhlIGVuZGluZyBwb2ludCBvZiB0aGUgcGF0aAogICAgICAgICAgICB2YXIgbGFzdF9wb3MgPSBwYXRoX25vZGUuZ2V0UG9pbnRBdExlbmd0aChwYXRoX2xlbmd0aF9zdGFydC0xKTsKCiAgICAgICAgICAgIC8vIEl0ZXJhdGUgdGhyb3VnaCBlYWNoIHBvaW50IG9uIHRoZSBwYXRoCiAgICAgICAgICAgIGZvciAodmFyIGkgPSBwYXRoX2xlbmd0aF9zdGFydDsgaTw9cGF0aF9sZW5ndGhfZW5kOyBpKyspIHsKICAgICAgICAgICAgICAgIC8vIEdldCB0aGUgY3VycmVudCBjb29yZGluYXRlcyBvbiB0aGUgcGF0aAogICAgICAgICAgICAgICAgdmFyIGN1cl9wb3MgPSBwYXRoX25vZGUuZ2V0UG9pbnRBdExlbmd0aChpKTsKICAgICAgICAgICAgICAgIHZhciBjdXJfcG9zX29iaiA9IHsKICAgICAgICAgICAgICAgICAgICB4Ok1hdGgucm91bmQoY3VyX3Bvcy54KjEwMCkvMTAwLAogICAgICAgICAgICAgICAgICAgIHk6TWF0aC5yb3VuZChjdXJfcG9zLnkqMTAwKS8xMDAKICAgICAgICAgICAgICAgIH07CiAgICAgICAgICAgICAgICAvLyBHZXQgdGhlIHByaW9yIGNvb3JkaW5hdGVzIG9uIHRoZSBwYXRoCiAgICAgICAgICAgICAgICB2YXIgcHJpb3JfcG9zID0gcGF0aF9ub2RlLmdldFBvaW50QXRMZW5ndGgoaS0xKTsKICAgICAgICAgICAgICAgIHZhciBwcmlvcl9wb3Nfb2JqID0gewogICAgICAgICAgICAgICAgICAgIHg6TWF0aC5yb3VuZChwcmlvcl9wb3MueCoxMDApLzEwMCwKICAgICAgICAgICAgICAgICAgICB5Ok1hdGgucm91bmQocHJpb3JfcG9zLnkqMTAwKS8xMDAKICAgICAgICAgICAgICAgIH07CiAgICAgICAgICAgICAgICAvLyBJdGVyYXRlIHRocm91Z2ggZWFjaCBpdGVtCiAgICAgICAgICAgICAgICBpdGVtcy5maWx0ZXIoZnVuY3Rpb24oZCkgewogICAgICAgICAgICAgICAgICAgIHZhciBhOwogICAgICAgICAgICAgICAgICAgIC8vIElmIHdlIGFyZSBvbiB0aGUgc2FtZSB5IHBvc2l0aW9uIGFzIHRoZSBpdGVtIGFuZCB3ZSB3ZXJlbid0IG9uIHRoaXMgeSBiZWZvcmUsCiAgICAgICAgICAgICAgICAgICAgLy8gbWFyayBhcyB0aGUgbGFzdCBrbm93biBwb2ludC4gUmV0dXJuIGZhbHNlIC0gd2UgZG9uJ3QgbmVlZCB0byBjb3VudCBhbiBlZGdlIHlldAogICAgICAgICAgICAgICAgICAgIGlmKGQubGFzc29Qb2ludC5jeSA9PT0gY3VyX3Bvc19vYmoueSAmJiBkLmxhc3NvUG9pbnQuY3kgIT0gcHJpb3JfcG9zX29iai55KSB7CiAgICAgICAgICAgICAgICAgICAgICAgIGxhc3Rfa25vd25fcG9pbnQgPSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICB4OiBwcmlvcl9wb3Nfb2JqLngsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICB5OiBwcmlvcl9wb3Nfb2JqLnkKICAgICAgICAgICAgICAgICAgICAgICAgfTsKICAgICAgICAgICAgICAgICAgICAgICAgYT1mYWxzZTsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgLy8gSWYgd2UgYXJlIG9uIHRoZSBzYW1lIHkgcG9zaXRpb24gYXMgdGhlIGl0ZW0gYW5kIHdlIHdlcmUgb24gdGhpcyB5IGJlZm9yZSwKICAgICAgICAgICAgICAgICAgICAvLyByZXR1cm4gZmFsc2UgLSB3ZSBkb24ndCBuZWVkIHRvIGNvdW50IGFuIGVkZ2UgeWV0CiAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAoZC5sYXNzb1BvaW50LmN5ID09PSBjdXJfcG9zX29iai55ICYmIGQubGFzc29Qb2ludC5jeSA9PT0gcHJpb3JfcG9zX29iai55KSB7CiAgICAgICAgICAgICAgICAgICAgICAgIGEgPSBmYWxzZTsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgLy8gSWYgd2UgYXJlIG5vdCBvbiB0aGUgc2FtZSB5IHBvc2l0aW9uIGFzIHRoZSBpdGVtIGJ1dCB3ZSB3ZXJlIHByZXZpb3VzbHksCiAgICAgICAgICAgICAgICAgICAgLy8gZGV0ZXJtaW5lIGlmIHdlIHBhc3NlZCBieSB0aGUgaXRlbSBvciBjYW1lIHVwIHRvIGl0IGFuZCB0dXJuZWQgYXJvdW5kLgogICAgICAgICAgICAgICAgICAgIC8vIFJldHVybiB0cnVlIGlmIHdlIHBhc3NlZCBpdCBzbyB0aGF0IHdlIGNhbiBldmFsdWF0ZSBmb3IgYW4gZWRnZQogICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKGQubGFzc29Qb2ludC5jeSAhPSBjdXJfcG9zX29iai55ICYmIGQubGFzc29Qb2ludC5jeSA9PT0gcHJpb3JfcG9zX29iai55KSB7CiAgICAgICAgICAgICAgICAgICAgICAgIGEgPSBzaWduKGQubGFzc29Qb2ludC5jeS1jdXJfcG9zX29iai55KSE9c2lnbihkLmxhc3NvUG9pbnQuY3ktbGFzdF9rbm93bl9wb2ludC55KTsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgLy8gRWxzZSwgbWFyayBhIGxhc3Qga25vd24gcG9pbnQgYW5kIGNoZWNrIGZvciBhIGNyb3NzaW5nLgogICAgICAgICAgICAgICAgICAgIC8vIElmIHdlIGNyb3NzZWQsIHdlIG5lZWQgdG8gZXZhbHVhdGUgZm9yIGVkZ2VzCiAgICAgICAgICAgICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgICAgIGxhc3Rfa25vd25fcG9pbnQgPSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICB4OiBwcmlvcl9wb3Nfb2JqLngsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICB5OiBwcmlvcl9wb3Nfb2JqLnkKICAgICAgICAgICAgICAgICAgICAgICAgfTsKICAgICAgICAgICAgICAgICAgICAgICAgYSA9IHNpZ24oZC5sYXNzb1BvaW50LmN5LWN1cl9wb3Nfb2JqLnkpIT1zaWduKGQubGFzc29Qb2ludC5jeS1wcmlvcl9wb3Nfb2JqLnkpOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICByZXR1cm4gYTsKICAgICAgICAgICAgICAgIH0pLmVhY2goZnVuY3Rpb24oZCkgewogICAgICAgICAgICAgICAgICAgIC8vIEl0ZXJhdGUgdGhyb3VnaCBlYWNoIG9iamVjdCBhbmQgYWRkIGFuIGVkZ2UgdG8gdGhlIGxlZnQgb3IgcmlnaHQKICAgICAgICAgICAgICAgICAgICBpZihjdXJfcG9zX29iai54PmQubGFzc29Qb2ludC5jeCkgewoJCQlyaWdodF9lZGdlcy5zZXQodGhpcywgcmlnaHRfZWRnZXMuZ2V0KHRoaXMpICsgMSk7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIGlmKGN1cl9wb3Nfb2JqLng8ZC5sYXNzb1BvaW50LmN4KSB7CgkJCWxlZnRfZWRnZXMuc2V0KHRoaXMsIGxlZnRfZWRnZXMuZ2V0KHRoaXMpICsgMSk7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICB9CgogICAgICAgICAgICAvLyBJZiB0aGUgcGF0aCBpcyBjbG9zZWQgYW5kIGNsb3NlIHNlbGVjdCBpcyBzZXQgdG8gdHJ1ZSwgZHJhdyB0aGUgY2xvc2VkIHBhdGhzIGFuZCBjb3VudCBlZGdlcwogICAgICAgICAgICAgaWYoaXNQYXRoQ2xvc2VkID09PSB0cnVlICYmIGNsb3NlUGF0aFNlbGVjdCA9PT0gdHJ1ZSkgewogICAgICAgICAgICAgICAgY2xvc2VfcGF0aC5hdHRyKCJkIixjbG9zZV9kcmF3X3BhdGgpOwogICAgICAgICAgICAgICAgdmFyIGNsb3NlX3BhdGhfbm9kZSA9IGNhbGNfY2xvc2VfcGF0aC5ub2RlKCk7CiAgICAgICAgICAgICAgICB2YXIgY2xvc2VfcGF0aF9sZW5ndGggPSBjbG9zZV9wYXRoX25vZGUuZ2V0VG90YWxMZW5ndGgoKTsKICAgICAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpPD1jbG9zZV9wYXRoX2xlbmd0aDsgaSsrKSB7CiAgICAgICAgICAgICAgICAgICAgdmFyIGN1cl9wb3MgPSBjbG9zZV9wYXRoX25vZGUuZ2V0UG9pbnRBdExlbmd0aChpKTsKICAgICAgICAgICAgICAgICAgICB2YXIgcHJpb3JfcG9zID0gY2xvc2VfcGF0aF9ub2RlLmdldFBvaW50QXRMZW5ndGgoaS0xKTsKCiAgICAgICAgICAgICAgICAgICAgaXRlbXMuZmlsdGVyKGZ1bmN0aW9uKGQpIHtyZXR1cm4gZC5sYXNzb1BvaW50LmN5PT1NYXRoLnJvdW5kKGN1cl9wb3MueSk7fSkuZWFjaChmdW5jdGlvbihkKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIGlmKE1hdGgucm91bmQoY3VyX3Bvcy55KSE9TWF0aC5yb3VuZChwcmlvcl9wb3MueSkgJiYgTWF0aC5yb3VuZChjdXJfcG9zLngpPmQubGFzc29Qb2ludC5jeCkgewoJCQkgICAgY2xvc2VfcmlnaHRfZWRnZXMuc2V0KHRoaXMsIDEpOwogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgIGlmKE1hdGgucm91bmQoY3VyX3Bvcy55KSE9TWF0aC5yb3VuZChwcmlvcl9wb3MueSkgJiYgTWF0aC5yb3VuZChjdXJfcG9zLngpPGQubGFzc29Qb2ludC5jeCkgewoJCQkgICAgY2xvc2VfbGVmdF9lZGdlcy5zZXQodGhpcywgMSk7ICAKICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAvLyBDaGVjayBhbmQgc2VlIGlmIHRoZSBwb2ludHMgaGF2ZSBhdCBsZWFzdCBvbmUgZWRnZSB0byB0aGUgbGVmdCwgYW5kIGFuIG9kZCAjIG9mIGVkZ2VzIHRvIHRoZSByaWdodC4gSWYgc28sIG1hcmsgYXMgc2VsZWN0ZWQuCiAgICAgICAgICAgICAgICAgaXRlbXMuZWFjaChmdW5jdGlvbihhKSB7CiAgICAgICAgICAgICAgICAgICAgIGlmKChsZWZ0X2VkZ2VzLmdldCh0aGlzKSArIGNsb3NlX2xlZnRfZWRnZXMuZ2V0KHRoaXMpKT4wICYmIChyaWdodF9lZGdlcy5nZXQodGhpcykgKyBjbG9zZV9yaWdodF9lZGdlcy5nZXQodGhpcykpICUgMiA9PSAxKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIGEubG9vcFNlbGVjdGVkID0gdHJ1ZTsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgIGVsc2UgewogICAgICAgICAgICAgICAgICAgICAgICBhLmxvb3BTZWxlY3RlZCA9IGZhbHNlOwogICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgfQogICAgICAgICAgICBlbHNlIHsKICAgICAgICAgICAgICAgIGl0ZW1zLmVhY2goZnVuY3Rpb24oZCkgewogICAgICAgICAgICAgICAgICAgIGQubG9vcFNlbGVjdGVkID0gZmFsc2U7CiAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgfQogICAgICAgICAgICAvLyBUYWcgcG9zc2libGUgaXRlbXMKICAgICAgICAgICAgaXRlbXMuZmlsdGVyKGZ1bmN0aW9uKGQpIHtyZXR1cm4gKGQubG9vcFNlbGVjdGVkICYmIGlzUGF0aENsb3NlZCkgfHwgZC5ob3ZlclNlbGVjdGVkO30pCiAgICAgICAgICAgICAgICAuZWFjaChmdW5jdGlvbihkKSB7IGQucG9zc2libGUgPSB0cnVlO30pOwoKICAgICAgICAgICAgaXRlbXMuZmlsdGVyKGZ1bmN0aW9uKGQpIHtyZXR1cm4gISgoZC5sb29wU2VsZWN0ZWQgJiYgaXNQYXRoQ2xvc2VkKSB8fCBkLmhvdmVyU2VsZWN0ZWQpO30pCiAgICAgICAgICAgICAgICAuZWFjaChmdW5jdGlvbihkKSB7ZC5wb3NzaWJsZSA9IGZhbHNlO30pOwoKICAgICAgICAgICAgb24uZHJhdygpOwoKICAgICAgICAgICAgLy8gQ29udGludWUgZHJhd2luZyBwYXRoIGZyb20gd2hlcmUgaXQgbGVmdCBvZmYKICAgICAgICAgICAgcGF0aF9sZW5ndGhfc3RhcnQgPSBwYXRoX2xlbmd0aF9lbmQrMTsKICAgICAgICB9CgogICAgICAgIGZ1bmN0aW9uIGRyYWdlbmQoKSB7CiAgICAgICAgICAgIC8vIFJlbW92ZSBtb3VzZW92ZXIgdGFnZ2luZyBmdW5jdGlvbgogICAgICAgICAgICBpdGVtcy5vbigibW91c2VvdmVyLmxhc3NvIixudWxsKTsKCiAgICAgICAgICAgIC8vIFRhZyBzZWxlY3RlZCBpdGVtcwogICAgICAgICAgICBpdGVtcy5maWx0ZXIoZnVuY3Rpb24oZCkge3JldHVybiBkLnBvc3NpYmxlID09PSB0cnVlO30pCiAgICAgICAgICAgICAgICAuZWFjaChmdW5jdGlvbihkKSB7ZC5zZWxlY3RlZCA9IHRydWU7fSk7CgogICAgICAgICAgICBpdGVtcy5maWx0ZXIoZnVuY3Rpb24oZCkge3JldHVybiBkLnBvc3NpYmxlID09PSBmYWxzZTt9KQogICAgICAgICAgICAgICAgLmVhY2goZnVuY3Rpb24oZCkge2Quc2VsZWN0ZWQgPSBmYWxzZTt9KTsKCiAgICAgICAgICAgIC8vIFJlc2V0IHBvc3NpYmxlIGl0ZW1zCiAgICAgICAgICAgIGl0ZW1zCiAgICAgICAgICAgICAgICAuZWFjaChmdW5jdGlvbihkKSB7ZC5wb3NzaWJsZSA9IGZhbHNlO30pOwoKICAgICAgICAgICAgLy8gQ2xlYXIgbGFzc28KICAgICAgICAgICAgZHluX3BhdGguYXR0cigiZCIsICJNMCAwIik7CiAgICAgICAgICAgIGNsb3NlX3BhdGguYXR0cigiZCIsICJNMCAwIik7CiAgICAgICAgICAgIG9yaWdpbl9ub2RlLmF0dHIoImRpc3BsYXkiLCJub25lIik7CiAgICAgICAgICAgIC8vIFJ1biB1c2VyIGRlZmluZWQgZW5kIGZ1bmN0aW9uCiAgICAgICAgICAgIG9uLmVuZCgpOwoKICAgICAgICB9CiAgICB9CgogICAgbGFzc28uaXRlbXMgID0gZnVuY3Rpb24oXykgewoKICAgICAgICBpZiAoIWFyZ3VtZW50cy5sZW5ndGgpIHJldHVybiBpdGVtczsKICAgICAgICBpdGVtcyA9IF87CiAgICAgICAgaXRlbXMuZWFjaChmdW5jdGlvbihkKSB7CiAgICAgICAgICAgIHZhciBpdGVtID0gZDMuc2VsZWN0KHRoaXMpOwogICAgICAgICAgICBpZih0eXBlb2YgaXRlbS5kYXR1bSgpID09PSAndW5kZWZpbmVkJykgewogICAgICAgICAgICAgICAgaXRlbS5kYXR1bSh7cG9zc2libGU6ZmFsc2Usc2VsZWN0ZWQ6ZmFsc2V9KTsKICAgICAgICAgICAgfQogICAgICAgICAgICBlbHNlIHsKICAgICAgICAgICAgICAgIC8vaXRlbS5hdHRyKCJkIixmdW5jdGlvbihlKSB7ZS5wb3NzaWJsZSA9IGZhbHNlOyBlLnNlbGVjdGVkID0gZmFsc2U7IHJldHVybiBlO30pOwogICAgICAgICAgICAgICAgdmFyIGUgPSBpdGVtLmRhdHVtKCk7CiAgICAgICAgICAgICAgICBlLnBvc3NpYmxlID0gZmFsc2U7CiAgICAgICAgICAgICAgICBlLnNlbGVjdGVkID0gZmFsc2U7CiAgICAgICAgICAgICAgICBpdGVtLmRhdHVtKGUpOwogICAgICAgICAgICB9CiAgICAgICAgfSk7CiAgICAgICAgcmV0dXJuIGxhc3NvOwogICAgfTsKCiAgICBsYXNzby5jbG9zZVBhdGhEaXN0YW5jZSAgPSBmdW5jdGlvbihfKSB7CiAgICAgICAgaWYgKCFhcmd1bWVudHMubGVuZ3RoKSByZXR1cm4gY2xvc2VQYXRoRGlzdGFuY2U7CiAgICAgICAgY2xvc2VQYXRoRGlzdGFuY2UgPSBfOwogICAgICAgIHJldHVybiBsYXNzbzsKICAgIH07CgogICAgbGFzc28uY2xvc2VQYXRoU2VsZWN0ID0gZnVuY3Rpb24oXykgewogICAgICAgIGlmICghYXJndW1lbnRzLmxlbmd0aCkgcmV0dXJuIGNsb3NlUGF0aFNlbGVjdDsKICAgICAgICBjbG9zZVBhdGhTZWxlY3QgPSBfPT09dHJ1ZSA/IHRydWUgOiBmYWxzZTsKICAgICAgICByZXR1cm4gbGFzc287CiAgICB9OwoKICAgIGxhc3NvLmlzUGF0aENsb3NlZCA9IGZ1bmN0aW9uKF8pIHsKICAgICAgICBpZiAoIWFyZ3VtZW50cy5sZW5ndGgpIHJldHVybiBpc1BhdGhDbG9zZWQ7CiAgICAgICAgaXNQYXRoQ2xvc2VkID0gXz09PXRydWUgPyB0cnVlIDogZmFsc2U7CiAgICAgICAgcmV0dXJuIGxhc3NvOwogICAgfTsKCiAgICBsYXNzby5ob3ZlclNlbGVjdCA9IGZ1bmN0aW9uKF8pIHsKICAgICAgICBpZiAoIWFyZ3VtZW50cy5sZW5ndGgpIHJldHVybiBob3ZlclNlbGVjdDsKICAgICAgICBob3ZlclNlbGVjdCA9IF89PT10cnVlID8gdHJ1ZSA6IGZhbHNlOwogICAgICAgIHJldHVybiBsYXNzbzsKICAgIH07CgogICAgbGFzc28ub24gPSBmdW5jdGlvbih0eXBlLF8pIHsKICAgICAgICBpZighYXJndW1lbnRzLmxlbmd0aCkgcmV0dXJuIG9uOwogICAgICAgIGlmKGFyZ3VtZW50cy5sZW5ndGg9PT0xKSByZXR1cm4gb25bdHlwZV07CiAgICAgICAgdmFyIHR5cGVzID0gWyJzdGFydCIsImRyYXciLCJlbmQiXTsKICAgICAgICBpZih0eXBlcy5pbmRleE9mKHR5cGUpPi0xKSB7CiAgICAgICAgICAgIG9uW3R5cGVdID0gXzsKICAgICAgICB9CiAgICAgICAgcmV0dXJuIGxhc3NvOwogICAgfTsKCiAgICBsYXNzby5hcmVhID0gZnVuY3Rpb24oXykgewogICAgICAgIGlmKCFhcmd1bWVudHMubGVuZ3RoKSByZXR1cm4gYXJlYTsKICAgICAgICBhcmVhPV87CiAgICAgICAgcmV0dXJuIGxhc3NvOwogICAgfTsKCiAgICBmdW5jdGlvbiBzaWduKHgpIHsKICAgICAgICByZXR1cm4geD94PDA/LTE6MTowOwogICAgfQoKCiAgICByZXR1cm4gbGFzc287Cgp9Owo="></script>
<link href="data:text/css;charset=utf-8,%0A%2EscatterD3%2Dtooltip%20%7B%0Aposition%3A%20absolute%3B%0Acolor%3A%20%23222%3B%0Abackground%3A%20%23fff%3B%0Apadding%3A%20%2E5em%3B%0Atext%2Dshadow%3A%20%23f5f5f5%200%201px%200%3B%0Aborder%2Dradius%3A%202px%3B%0Abox%2Dshadow%3A%200px%200px%207px%201px%20%23a6a6a6%3B%0Aopacity%3A%200%2E95%3B%0Afont%2Dfamily%3A%20Open%20Sans%2C%20Droid%20Sans%2C%20Helvetica%2C%20Verdana%2C%20sans%2Dserif%3B%0Afont%2Dsize%3A%2010px%3B%0Az%2Dindex%3A%2010%3B%0A%7D%0A%0A%2EscatterD3%2Dmenu%20%7B%0Aposition%3A%20absolute%3B%0Aopacity%3A%200%3B%0Awidth%3A%200%3B%0Aoverflow%3A%20hidden%3B%0Atop%3A%2037px%3B%0Aright%3A%2015px%3B%0Az%2Dindex%3A%2010%3B%0Abackground%3A%20%23F5F7F9%3B%0Abox%2Dshadow%3A%200px%200px%202px%201px%20%23d6d6d6%3B%0Afont%2Dfamily%3A%20Open%20Sans%2C%20Droid%20Sans%2C%20Helvetica%2C%20Verdana%2C%20sans%2Dserif%3B%0Afont%2Dsize%3A%2011px%3B%0Atext%2Dalign%3A%20right%3B%0Alist%2Dstyle%3A%20none%3B%0Apadding%3A%200%2E2em%3B%0Amargin%3A%200%3B%0A%7D%0A%2EscatterD3%2Dmenu%20li%20%7B%0Awhite%2Dspace%3A%20nowrap%3B%0Apadding%3A%200%2E6em%200%2E8em%3B%0Amargin%3A%200%3B%0A%7D%0A%2EscatterD3%2Dmenu%20li%20a%20%7B%0Acursor%3A%20pointer%3B%0Acolor%3A%20%23727476%3B%0A%0Atext%2Ddecoration%3A%20none%3B%0Atext%2Dtransform%3A%20uppercase%3B%0A%7D%0A%2EscatterD3%2Dmenu%20li%20a%3Ahover%20%7B%0Acolor%3A%20%2325282A%3B%0A%7D%0A%0A%2EscatterD3%20%2Egear%2Dmenu%20%7B%0Acursor%3A%20pointer%3B%0Aheight%3A%2025px%3B%0Awidth%3A%2025px%3B%0A%7D%0A%2EscatterD3%20%2Egear%2Dmenu%20path%20%7B%0Aopacity%3A%200%2E2%3B%0Atransition%3A%20opacity%20%2E3s%3B%0A%7D%0A%2EscatterD3%20%2Egear%2Dmenu%3Ahover%20path%2C%0A%2EscatterD3%20%2Egear%2Dmenu%2Eselected%20path%20%7B%0Aopacity%3A%200%2E8%3B%0Atransition%3A%20opacity%20%2E3s%3B%0A%7D%0A%0A%2EscatterD3%2Dcaption%20%7B%0Abackground%3A%20%23F5F7F9%3B%0Acolor%3A%20%23727476%3B%0Abox%2Dshadow%3A%200px%200px%202px%201px%20%23d6d6d6%3B%0Afont%2Dfamily%3A%20Open%20Sans%2C%20Droid%20Sans%2C%20Helvetica%2C%20Verdana%2C%20sans%2Dserif%3B%0Afont%2Dsize%3A%201px%3B%0Atext%2Dalign%3A%20left%3B%0Apadding%3A%2010px%200%3B%0Amargin%3A%200%3B%0Aposition%3A%20absolute%3B%0Az%2Dindex%3A%2010%3B%0Awidth%3A%20100%25%3B%0Atransition%3A%20all%20%2E3s%3B%0Aopacity%3A%200%3B%0A%7D%0A%2EscatterD3%2Dcaption%2Evisible%20%7B%0Aopacity%3A%200%2E97%3B%0Acursor%3A%20pointer%3B%0A%7D%0A%2EscatterD3%2Dcaption%20h1%2C%0A%2EscatterD3%2Dcaption%20h2%2C%0A%2EscatterD3%2Dcaption%20p%0A%7B%0Amargin%3A%205px%2015px%3B%0Aline%2Dheight%3A%201%2E35%3B%0Apadding%3A%200%3B%0Aborder%3A%20none%3B%0A%7D%0A%2EscatterD3%2Dcaption%20h1%20%7B%0Afont%2Dsize%3A%2014px%3B%0Afont%2Dweight%3A%20bold%3B%0A%7D%0A%2EscatterD3%2Dcaption%20h2%20%7B%0Afont%2Dsize%3A%2013px%3B%0Afont%2Dweight%3A%20normal%3B%0A%7D%0A%2EscatterD3%2Dcaption%20%2Ecaption%20%7B%0Afont%2Dsize%3A%2011px%3B%0Afont%2Dweight%3A%20normal%3B%0A%7D%0A%0A%2EscatterD3%20%2Ecaption%2Dicon%20%7B%0Acursor%3A%20pointer%3B%0Aheight%3A%2025px%3B%0Awidth%3A%2025px%3B%0A%7D%0A%2EscatterD3%20%2Ecaption%2Dicon%20path%20%7B%0Aopacity%3A%200%2E2%3B%0Atransition%3A%20opacity%20%2E3s%3B%0A%7D%0A%2EscatterD3%20%2Ecaption%2Dicon%3Ahover%20path%2C%0A%2EscatterD3%20%2Ecaption%2Dicon%2Eselected%20path%20%7B%0Aopacity%3A%200%2E8%3B%0Atransition%3A%20opacity%20%2E3s%3B%0A%7D%0A%0A%2Ehidden%20%7B%0Adisplay%3A%20none%3B%0A%7D%0A%2EscatterD3%20%2Edot%20%7B%0Acursor%3A%20default%3B%0A%7D%0A%2EscatterD3%20%2Epoint%2Dlabel%20%7B%0Acursor%3A%20pointer%3B%0A%7D%0A%2EscatterD3%2C%20%2EscatterD3%3Afocus%20%7B%0Aoutline%3A%200px%20solid%20transparent%0A%7D%0A%2EscatterD3%20%2Eroot%20%7B%0Acursor%3A%20move%3B%0A%7D%0A%0A%2Eshiny%2Dbound%2Doutput%20%2Elabel%20%7B%0Afont%2Dsize%3A%20100%25%3B%0Afont%2Dweight%3A%20normal%3B%0Atext%2Dalign%3A%20left%3B%0A%7D%0A" rel="stylesheet" />
<script src="data:application/x-javascript;base64,Ly8gQ2xlYW4gdmFyaWFibGVzIGxldmVscyB0byBiZSB2YWxpZCBDU1MgY2xhc3NlcwpmdW5jdGlvbiBjc3NfY2xlYW4ocykgewogICAgaWYgKHMgPT09IHVuZGVmaW5lZCkgcmV0dXJuICIiOwogICAgcmV0dXJuIHMudG9TdHJpbmcoKS5yZXBsYWNlKC9bXlx3LV0vZywgIl8iKTsKfQoKLy8gRGVmYXVsdCB0cmFuc2xhdGlvbiBmdW5jdGlvbiBmb3IgcG9pbnRzIGFuZCBsYWJlbHMKZnVuY3Rpb24gdHJhbnNsYXRpb24oZCwgc2NhbGVzKSB7CiAgICAgcmV0dXJuICJ0cmFuc2xhdGUoIiArIHNjYWxlcy54KGQueCkgKyAiLCIgKyBzY2FsZXMueShkLnkpICsgIikiOwp9CgovLyBDcmVhdGUgdG9vbHRpcCBjb250ZW50IGZ1bmN0aW9uCmZ1bmN0aW9uIHRvb2x0aXBfY29udGVudChkLCBzZXR0aW5ncykgewogICAgLy8gbm8gdG9vbHRpcHMKICAgIGlmICghc2V0dGluZ3MuaGFzX3Rvb2x0aXBzKSByZXR1cm4gbnVsbDsKICAgIGlmIChzZXR0aW5ncy5oYXNfY3VzdG9tX3Rvb2x0aXBzKSB7CiAgICAgICAgLy8gY3VzdG9tIHRvb2x0aXBzbAogICAgICAgIHJldHVybiBkLnRvb2x0aXBfdGV4dDsKICAgIH0gZWxzZSB7CiAgICAgICAgLy8gZGVmYXVsdCB0b29sdGlwcwogICAgICAgIHZhciB0ZXh0ID0gQXJyYXkoKTsKICAgICAgICBpZiAoc2V0dGluZ3MuaGFzX2xhYmVscykgdGV4dC5wdXNoKCI8Yj4iK2QubGFiKyI8L2I+Iik7Cgl2YXIgeF92YWx1ZSA9IHNldHRpbmdzLnhfY2F0ZWdvcmljYWwgPyBkLnggOiBkLngudG9GaXhlZCgzKTsKCXZhciB5X3ZhbHVlID0gc2V0dGluZ3MueV9jYXRlZ29yaWNhbCA/IGQueSA6IGQueS50b0ZpeGVkKDMpOwogICAgICAgIHRleHQucHVzaCgiPGI+IitzZXR0aW5ncy54bGFiKyI6PC9iPiAiKyB4X3ZhbHVlKTsKICAgICAgICB0ZXh0LnB1c2goIjxiPiIrc2V0dGluZ3MueWxhYisiOjwvYj4gIisgeV92YWx1ZSk7CiAgICAgICAgaWYgKHNldHRpbmdzLmhhc19jb2xvcl92YXIpIHRleHQucHVzaCgiPGI+IitzZXR0aW5ncy5jb2xfbGFiKyI6PC9iPiAiK2QuY29sX3Zhcik7CiAgICAgICAgaWYgKHNldHRpbmdzLmhhc19zeW1ib2xfdmFyKSB0ZXh0LnB1c2goIjxiPiIrc2V0dGluZ3Muc3ltYm9sX2xhYisiOjwvYj4gIitkLnN5bWJvbF92YXIpOwogICAgICAgIGlmIChzZXR0aW5ncy5oYXNfc2l6ZV92YXIpIHRleHQucHVzaCgiPGI+IitzZXR0aW5ncy5zaXplX2xhYisiOjwvYj4gIitkLnNpemVfdmFyKTsKICAgICAgICBpZiAoc2V0dGluZ3MuaGFzX29wYWNpdHlfdmFyKSB0ZXh0LnB1c2goIjxiPiIrc2V0dGluZ3Mub3BhY2l0eV9sYWIrIjo8L2I+ICIrZC5vcGFjaXR5X3Zhcik7CiAgICAgICAgcmV0dXJuIHRleHQuam9pbigiPGJyIC8+Iik7CiAgICB9Cn0K"></script>
<script src="data:application/x-javascript;base64,Ly8gQ3VzdG9tIGNvbG9yIHNjaGVtZQpmdW5jdGlvbiBjdXN0b21fc2NoZW1lMTAgKCkgewogICAgLy8gc2xpY2UoKSB0byBjcmVhdGUgYSBjb3B5CiAgICB2YXIgc2NoZW1lID0gZDMuc2NoZW1lQ2F0ZWdvcnkxMC5zbGljZSgpOwogICAgLy8gU3dpdGNoIG9yYW5nZSBhbmQgcmVkCiAgICB2YXIJdG1wID0gc2NoZW1lWzNdOwogICAgc2NoZW1lWzNdID0gc2NoZW1lWzFdOwogICAgc2NoZW1lWzFdID0gdG1wOwogICAgcmV0dXJuIHNjaGVtZTsKfQoKLy8gU2V0dXAgZGltZW5zaW9ucwpmdW5jdGlvbiBzZXR1cF9zaXplcyAod2lkdGgsIGhlaWdodCwgc2V0dGluZ3MpIHsKCiAgICB2YXIgZGltcyA9IHt9LAoJbWFyZ2lucyA9IHt0b3A6IDUsIHJpZ2h0OiAxMCwgYm90dG9tOiAyMCwgbGVmdDogMzB9OwoKICAgIGlmIChzZXR0aW5ncy5sZWZ0X21hcmdpbiAhPT0gbnVsbCkgewoJbWFyZ2lucy5sZWZ0ID0gc2V0dGluZ3MubGVmdF9tYXJnaW47CiAgICB9CgogICAgZGltcy5zdmdfd2lkdGggPSB3aWR0aDsKICAgIGRpbXMuc3ZnX2hlaWdodCA9IGhlaWdodDsKICAgIAogICAgZGltcy5sZWdlbmRfd2lkdGggPSAwOwogICAgaWYgKHNldHRpbmdzLmhhc19sZWdlbmQpIGRpbXMubGVnZW5kX3dpZHRoID0gc2V0dGluZ3MubGVnZW5kX3dpZHRoOwogICAgCiAgICBkaW1zLndpZHRoID0gd2lkdGggLSBkaW1zLmxlZ2VuZF93aWR0aDsKICAgIGRpbXMuaGVpZ2h0ID0gaGVpZ2h0OwogICAgZGltcy5oZWlnaHQgPSBkaW1zLmhlaWdodCAtIG1hcmdpbnMudG9wIC0gbWFyZ2lucy5ib3R0b207CiAgICBkaW1zLndpZHRoID0gZGltcy53aWR0aCAtIG1hcmdpbnMubGVmdCAtIG1hcmdpbnMucmlnaHQ7CiAgICAKICAgIC8vIEZpeGVkIHJhdGlvCiAgICBpZiAoc2V0dGluZ3MuZml4ZWQpIHsKICAgICAgICAgZGltcy5oZWlnaHQgPSBNYXRoLm1pbihkaW1zLmhlaWdodCwgZGltcy53aWR0aCk7CiAgICAgICAgIGRpbXMud2lkdGggPSBkaW1zLmhlaWdodDsKICAgIH0KCiAgICBkaW1zLnRvdGFsX3dpZHRoID0gZGltcy53aWR0aCArIG1hcmdpbnMubGVmdCArIG1hcmdpbnMucmlnaHQgKyBkaW1zLmxlZ2VuZF93aWR0aDsKICAgIGRpbXMudG90YWxfaGVpZ2h0ID0gZGltcy5oZWlnaHQgKyBtYXJnaW5zLnRvcCArIG1hcmdpbnMuYm90dG9tOwogICAgCiAgICBkaW1zLmxlZ2VuZF94ID0gZGltcy50b3RhbF93aWR0aCAtIG1hcmdpbnMucmlnaHQgLSBkaW1zLmxlZ2VuZF93aWR0aCArIDI0OwoKICAgIGRpbXMubWFyZ2lucyA9IG1hcmdpbnM7CiAgICAKICAgIHJldHVybiBkaW1zOwp9CgovLyBDb21wdXRlIGFuZCBzZXR1cCBsZWdlbmQgcG9zaXRpb25zCmZ1bmN0aW9uIHNldHVwX2xlZ2VuZF9zaXplcyAoZGltcywgc2NhbGVzLCBzZXR0aW5ncykgewoKICAgIGRpbXMubWFyZ2lucy5sZWdlbmRfdG9wID0gNTA7CgogICAgLy8gSGVpZ2h0IG9mIGNvbG9yIGxlZ2VuZAogICAgdmFyIGNvbG9yX2xlZ2VuZF9oZWlnaHQgPSAwOwogICAgaWYgKHNldHRpbmdzLmhhc19jb2xvcl92YXIpIHsKCXZhciBuID0gc2V0dGluZ3MuY29sX2NvbnRpbnVvdXMgPyA2IDogc2NhbGVzLmNvbG9yLmRvbWFpbigpLmxlbmd0aDsKCWNvbG9yX2xlZ2VuZF9oZWlnaHQgPSBuICogMjAgKyAzMDsKICAgIH0KICAgIGRpbXMubWFyZ2lucy5zeW1ib2xfbGVnZW5kX3RvcCA9IGNvbG9yX2xlZ2VuZF9oZWlnaHQgKyBkaW1zLm1hcmdpbnMubGVnZW5kX3RvcDsKCiAgICAvLyBIZWlnaHQgb2Ygc3ltYm9sIGxlZ2VuZAogICAgdmFyIHN5bWJvbF9sZWdlbmRfaGVpZ2h0ID0gc2V0dGluZ3MuaGFzX3N5bWJvbF92YXIgPyBzY2FsZXMuc3ltYm9sLmRvbWFpbigpLmxlbmd0aCAqIDIwICsgMzAgOiAwOwogICAgZGltcy5tYXJnaW5zLnNpemVfbGVnZW5kX3RvcCA9IGNvbG9yX2xlZ2VuZF9oZWlnaHQgKyBzeW1ib2xfbGVnZW5kX2hlaWdodCArIGRpbXMubWFyZ2lucy5sZWdlbmRfdG9wOwogICAgCiAgICByZXR1cm4gZGltczsKfQoKLy8gQ29tcHV0ZSBhbmQgc2V0dXAgc2NhbGVzCmZ1bmN0aW9uIHNldHVwX3NjYWxlcyAoZGltcywgc2V0dGluZ3MsIGRhdGEpIHsKCiAgICB2YXIgbWluX3gsIG1pbl95LCBtYXhfeCwgbWF4X3ksIGdhcF94LCBnYXBfeTsKICAgIHZhciBzY2FsZXMgPSB7fTsKCiAgICAvLyBpZiBkYXRhIGlzIGVtcHR5CiAgICBpZiAoZGF0YS5sZW5ndGggPT0gMCkgewoJc2V0dGluZ3MueF9jYXRlZ29yaWNhbCA9IGZhbHNlOwoJc2V0dGluZ3MueV9jYXRlZ29yaWNhbCA9IGZhbHNlOwoJZGF0YSA9IFt7eDowLCB5OjAsIGtleToxfV07CiAgICB9CiAgICAKICAgIC8vIHggYW5kIHkgbGltaXRzCiAgICBpZiAoc2V0dGluZ3MueGxpbSA9PT0gbnVsbCkgewogICAgICAgIG1pbl94ID0gZDMubWluKGRhdGEsIGZ1bmN0aW9uKGQpIHsgcmV0dXJuKGQueCk7fSApOwogICAgICAgIG1heF94ID0gZDMubWF4KGRhdGEsIGZ1bmN0aW9uKGQpIHsgcmV0dXJuKGQueCk7fSApOwogICAgICAgIGdhcF94ID0gKG1heF94IC0gbWluX3gpICogMC4yOwoJaWYgKG1pbl94ID09IG1heF94KSB7CgkgICAgbWluX3ggPSBtaW5feCAqIDAuODsKCSAgICBtYXhfeCA9IG1heF94ICogMS4yOwoJICAgIGdhcF94ID0gMDsKCX0KCWlmIChtaW5feCA9PSAwICYmIG1heF94ID09IDApIHsKCSAgICBtaW5feCA9IC0xOwoJICAgIG1heF94ID0gMTsKCSAgICBnYXBfeCA9IDAuMTsKCX0KICAgIH0gZWxzZSB7CiAgICAgICAgbWluX3ggPSBzZXR0aW5ncy54bGltWzBdOwogICAgICAgIG1heF94ID0gc2V0dGluZ3MueGxpbVsxXTsKICAgICAgICBnYXBfeCA9IDA7CiAgICB9CiAgICBpZiAoc2V0dGluZ3MueWxpbSA9PT0gbnVsbCkgewogICAgICAgIG1pbl95ID0gZDMubWluKGRhdGEsIGZ1bmN0aW9uKGQpIHsgcmV0dXJuKGQueSk7fSApOwogICAgICAgIG1heF95ID0gZDMubWF4KGRhdGEsIGZ1bmN0aW9uKGQpIHsgcmV0dXJuKGQueSk7fSApOwogICAgICAgIGdhcF95ID0gKG1heF95IC0gbWluX3kpICogMC4yOwoJaWYgKG1pbl95ID09IG1heF95KSB7CgkgICAgbWluX3kgPSBtaW5feSAqIDAuODsKCSAgICBtYXhfeSA9IG1heF95ICogMS4yOwoJICAgIGdhcF95ID0gMDsKCX0KCWlmIChtaW5feSA9PSAwICYmIG1heF95ID09IDApIHsKCSAgICBtaW5feSA9IC0xOwoJICAgIG1heF95ID0gMTsKCSAgICBnYXBfeSA9IDAuMTsKCX0KICAgIH0gZWxzZSB7CiAgICAgICAgbWluX3kgPSBzZXR0aW5ncy55bGltWzBdOwogICAgICAgIG1heF95ID0gc2V0dGluZ3MueWxpbVsxXTsKICAgICAgICBnYXBfeSA9IDA7CiAgICB9CgogICAgbWluX3ggPSBzZXR0aW5ncy54X2xvZyA/IG1pbl94ICogMC44IDogbWluX3ggLSBnYXBfeDsKICAgIG1heF94ID0gc2V0dGluZ3MueF9sb2cgPyBtYXhfeCAqIDEuMyA6IG1heF94ICsgZ2FwX3g7CiAgICBtaW5feSA9IHNldHRpbmdzLnlfbG9nID8gbWluX3kgKiAwLjkgOiBtaW5feSAtIGdhcF95OwogICAgbWF4X3kgPSBzZXR0aW5ncy55X2xvZyA/IG1heF95ICogMS4xIDogbWF4X3kgKyBnYXBfeTsKICAgIAogICAgLy8gRml4ZWQgcmF0aW8KICAgIHZhciByYW5nZV94ID0gbWF4X3ggLSBtaW5feDsKICAgIHZhciBtaWRfeCA9IChtYXhfeCArIG1pbl94KSAvIDI7CiAgICB2YXIgcmFuZ2VfeSA9IG1heF95IC0gbWluX3k7CiAgICB2YXIgbWlkX3kgPSAobWF4X3kgKyBtaW5feSkgLyAyOwogICAgaWYgKHNldHRpbmdzLmZpeGVkICYmIHNldHRpbmdzLnhsaW0gPT09IG51bGwgJiYgc2V0dGluZ3MueWxpbSA9PT0gbnVsbCkgewoJdmFyIHJhdGlvID0gKHJhbmdlX3kgLyByYW5nZV94KTsKCWlmIChyYXRpbyA+IDEpIHsKCSAgICByYW5nZV94ID0gcmFuZ2VfeCAqIHJhdGlvOwoJICAgIG1pbl94ID0gbWlkX3ggLSByYW5nZV94IC8gMjsKCSAgICBtYXhfeCA9IG1pZF94ICsgcmFuZ2VfeCAvIDI7Cgl9IGVsc2UgewoJICAgIHJhbmdlX3kgPSByYW5nZV95IC8gcmF0aW87CgkgICAgbWluX3kgPSBtaWRfeSAtIHJhbmdlX3kgLyAyOwoJICAgIG1heF95ID0gbWlkX3kgKyByYW5nZV95IC8gMjsKCX0KICAgIH0KICAgIGlmIChzZXR0aW5ncy5maXhlZCAmJiBzZXR0aW5ncy54bGltICE9IG51bGwpIHsKCXJhbmdlX3kgPSByYW5nZV94OwoJbWluX3kgPSBtaWRfeSAtIHJhbmdlX3kgLyAyOwoJbWF4X3kgPSBtaWRfeSArIHJhbmdlX3kgLyAyOwogICAgfQogICAgaWYgKHNldHRpbmdzLmZpeGVkICYmIHNldHRpbmdzLnlsaW0gIT0gbnVsbCkgewoJcmFuZ2VfeCA9IHJhbmdlX3k7CgltaW5feCA9IG1pZF94IC0gcmFuZ2VfeCAvIDI7CgltYXhfeCA9IG1pZF94ICsgcmFuZ2VfeCAvIDI7CiAgICB9CgogICAgCiAgICAvLyB4LCB5IHNjYWxlcwogICAgaWYgKCFzZXR0aW5ncy54X2NhdGVnb3JpY2FsKSB7CglzY2FsZXMueCA9IHNldHRpbmdzLnhfbG9nID8gZDMuc2NhbGVMb2coKSA6IGQzLnNjYWxlTGluZWFyKCk7CiAgICAgICAgc2NhbGVzLngucmFuZ2UoWzAsIGRpbXMud2lkdGhdKQoJICAgIC5kb21haW4oW21pbl94LCBtYXhfeF0pOwogICAgfSBlbHNlIHsKCXNjYWxlcy54ID0gZDMuc2NhbGVQb2ludCgpCgkgICAgLnJhbmdlKFswLCBkaW1zLndpZHRoXSkKCSAgICAucGFkZGluZygwLjkpCgkgICAgLmRvbWFpbihkMy5tYXAoZGF0YSwgZnVuY3Rpb24oZCl7IHJldHVybiBkLng7IH0pLmtleXMoKS5zb3J0KCkpOwogICAgfQogICAgaWYgKCFzZXR0aW5ncy55X2NhdGVnb3JpY2FsKSB7CglzY2FsZXMueSA9IHNldHRpbmdzLnlfbG9nID8gZDMuc2NhbGVMb2coKTogZDMuc2NhbGVMaW5lYXIoKTsKICAgICAgICBzY2FsZXMueS5yYW5nZShbZGltcy5oZWlnaHQsIDBdKQoJICAgIC5kb21haW4oW21pbl95LCBtYXhfeV0pOwogICAgfSBlbHNlIHsKCXNjYWxlcy55ID0gZDMuc2NhbGVQb2ludCgpCgkgICAgLnJhbmdlKFtkaW1zLmhlaWdodCwgMF0pCgkgICAgLnBhZGRpbmcoMC45KQoJICAgIC5kb21haW4oZDMubWFwKGRhdGEsIGZ1bmN0aW9uKGQpeyByZXR1cm4gZC55OyB9KS5rZXlzKCkuc29ydCgpKTsKICAgIH0KICAgIC8vIEtlZXAgdHJhY2sgb2Ygb3JpZ2luYWwgc2NhbGVzCiAgICBzY2FsZXMueF9vcmlnID0gc2NhbGVzLng7CiAgICBzY2FsZXMueV9vcmlnID0gc2NhbGVzLnk7CiAgICAvLyB4IGFuZCB5IGF4aXMgZnVuY3Rpb25zCiAgICBzY2FsZXMueEF4aXMgPSBkMy5heGlzQm90dG9tKHNjYWxlcy54KQogICAgICAgIC50aWNrU2l6ZSgtZGltcy5oZWlnaHQpOwogICAgaWYgKCFzZXR0aW5ncy54X2NhdGVnb3JpY2FsKSB7CglzY2FsZXMueEF4aXMudGlja0Zvcm1hdChkMy5mb3JtYXQoIiIpKTsKICAgIH0KICAgIHNjYWxlcy55QXhpcyA9IGQzLmF4aXNMZWZ0KHNjYWxlcy55KQogICAgICAgIC50aWNrU2l6ZSgtZGltcy53aWR0aCk7CiAgICBpZiAoIXNldHRpbmdzLnlfY2F0ZWdvcmljYWwpIHsKCXNjYWxlcy55QXhpcy50aWNrRm9ybWF0KGQzLmZvcm1hdCgiIikpOwogICAgfQogICAgLy8gQ29udGludW91cyBjb2xvciBzY2FsZQogICAgaWYgKHNldHRpbmdzLmNvbF9jb250aW51b3VzKSB7CglzY2FsZXMuY29sb3IgPSBkMy5zY2FsZVNlcXVlbnRpYWwoZDMuaW50ZXJwb2xhdGVWaXJpZGlzKQoJICAgIC5kb21haW4oW2QzLm1pbihkYXRhLCBmdW5jdGlvbihkKSB7IHJldHVybihkLmNvbF92YXIpO30gKSwKCQkgICAgIGQzLm1heChkYXRhLCBmdW5jdGlvbihkKSB7IHJldHVybihkLmNvbF92YXIpO30gKV0pOwogICAgfQogICAgLy8gT3JkaW5hbCBjb2xvciBzY2FsZQogICAgZWxzZSB7CiAgICAgICAgaWYgKHNldHRpbmdzLmNvbG9ycyA9PT0gbnVsbCkgewoJICAgIC8vIE51bWJlciBvZiBkaWZmZXJlbnQgbGV2ZWxzLiBTZWUgaHR0cHM6Ly9naXRodWIuY29tL21ib3N0b2NrL2QzL2lzc3Vlcy80NzIKCSAgICB2YXIgbiA9IGQzLm1hcChkYXRhLCBmdW5jdGlvbihkKSB7IHJldHVybiBkLmNvbF92YXI7IH0pLnNpemUoKTsKCSAgICBzY2FsZXMuY29sb3IgPSBuIDw9IDkgPyBkMy5zY2FsZU9yZGluYWwoY3VzdG9tX3NjaGVtZTEwKCkpIDogZDMuc2NhbGVPcmRpbmFsKGQzLnNjaGVtZUNhdGVnb3J5MjApOwogICAgICAgIH0gZWxzZSBpZiAoQXJyYXkuaXNBcnJheShzZXR0aW5ncy5jb2xvcnMpKSB7CgkgICAgc2NhbGVzLmNvbG9yID0gZDMuc2NhbGVPcmRpbmFsKCkucmFuZ2Uoc2V0dGluZ3MuY29sb3JzKTsKICAgICAgICB9IGVsc2UgaWYgKHR5cGVvZihzZXR0aW5ncy5jb2xvcnMpID09PSAic3RyaW5nIil7CgkgICAgLy8gU2luZ2xlIHN0cmluZyBnaXZlbgoJICAgIHNjYWxlcy5jb2xvciA9IGQzLnNjYWxlT3JkaW5hbCgpLnJhbmdlKEFycmF5KHNldHRpbmdzLmNvbG9ycykpOwogICAgICAgIH0gZWxzZSBpZiAodHlwZW9mKHNldHRpbmdzLmNvbG9ycykgPT09ICJvYmplY3QiKXsKCSAgICBzY2FsZXMuY29sb3IgPSBkMy5zY2FsZU9yZGluYWwoKQogICAgICAgICAgICAgICAgLnJhbmdlKGQzLnZhbHVlcyhzZXR0aW5ncy5jb2xvcnMpKQogICAgICAgICAgICAgICAgLmRvbWFpbihkMy5rZXlzKHNldHRpbmdzLmNvbG9ycykpOwogICAgICAgIH0KICAgIH0KICAgIC8vIFN5bWJvbCBzY2FsZQogICAgc2NhbGVzLnN5bWJvbCA9IGQzLnNjYWxlT3JkaW5hbCgpLnJhbmdlKGQzLnJhbmdlKGQzLnN5bWJvbHMubGVuZ3RoKSk7CiAgICAvLyBTaXplIHNjYWxlCiAgICBzY2FsZXMuc2l6ZSA9IGQzLnNjYWxlTGluZWFyKCkKICAgICAgICAucmFuZ2Uoc2V0dGluZ3Muc2l6ZV9yYW5nZSkKICAgICAgICAuZG9tYWluKFtkMy5taW4oZGF0YSwgZnVuY3Rpb24oZCkgeyByZXR1cm4oZC5zaXplX3Zhcik7fSApLAogICAgICAgICAgICAgICAgIGQzLm1heChkYXRhLCBmdW5jdGlvbihkKSB7IHJldHVybihkLnNpemVfdmFyKTt9ICldKTsKICAgIC8vIE9wYWNpdHkgc2NhbGUKICAgIHNjYWxlcy5vcGFjaXR5ID0gZDMuc2NhbGVMaW5lYXIoKQogICAgICAgIC5yYW5nZShbMC4xLCAxXSkKICAgICAgICAuZG9tYWluKFtkMy5taW4oZGF0YSwgZnVuY3Rpb24oZCkgeyByZXR1cm4oZC5vcGFjaXR5X3Zhcik7fSApLAogICAgICAgICAgICAgICAgIGQzLm1heChkYXRhLCBmdW5jdGlvbihkKSB7IHJldHVybihkLm9wYWNpdHlfdmFyKTt9ICldKTsKCiAgICByZXR1cm4gc2NhbGVzOwogICAgCn0KCgoKCi8vIEdlYXIgaWNvbiBwYXRoCmZ1bmN0aW9uIGdlYXJfcGF0aCAoKSB7CiAgICByZXR1cm4gIm0gMjQuMjgsNy4yMDg3Mzc0IC0xLjMwNzc5NiwwIGMgLTAuMTcwNTIsLTAuNjU1MzM4IC0wLjQzMzQ4NiwtMS4yODYzNDkgLTAuNzcyMjA4LC0xLjg1ODg0NiBsIDAuOTI3NTY2LC0wLjkyOTc5NyBjIDAuMjgxMjczLC0wLjI4MTE4OCAwLjI4MTI3MywtMC43MzgxMzkgMCwtMS4wMTkzMTIgTCAyMS42MDAxODUsMS44NzI4NzI3IEMgMjEuMzE5MDg4LDEuNTkxNjg1IDIwLjg2MzE0NiwxLjU5MTQyMTkgMjAuNTgyMDQ4LDEuODcyNjA5NiBMIDE5LjY1MDA2OSwyLjgwMDEzNTggQyAxOS4wNzc2MDYsMi40NjE0MTczIDE4LjQ0NjYwMiwyLjE5ODIyOTYgMTcuNzkxMjYyLDIuMDI3ODM4OSBsIDAsLTEuMzA3ODM4NDYgYyAwLC0wLjM5NzYyIC0wLjMxMzY0NSwtMC43MiAtMC43MTEyNjIsLTAuNzIgbCAtMi4xNiwwIGMgLTAuMzk3NjE4LDAgLTAuNzExMjYyLDAuMzIyMzggLTAuNzExMjYyLDAuNzIgbCAwLDEuMzA3ODM4NDYgYyAtMC42NTUzNCwwLjE3MDM5MDcgLTEuMjg2MzQ1LDAuNDMzNDQgLTEuODU4ODQ5LDAuNzcyMjEzOCBMIDExLjQyMDA5MiwxLjg3MjQ0MzUgYyAtMC4yODExODUsLTAuMjgxMjg0NiAtMC43MzgxMzEsLTAuMjgxMjg0NiAtMS4wMTkzMTUsMCBMIDguODcyODczNywzLjM5OTgxMjQgQyA4LjU5MTY4ODgsMy42ODA5MTc0IDguNTkxNDI3LDQuMTM2ODU3NCA4Ljg3MjYxMiw0LjQxNzk0ODQgbCAwLjkyNzUyMzQsMC45MzE5ODQgYyAtMC4zMzg4MDk5LDAuNTcyNDU2IC0wLjYwMTkwNzYsMS4yMDM0NjcgLTAuNzcyMjk1NiwxLjg1ODgwNSBsIC0xLjMwNzgzOTgsMCBjIC0wLjM5NzYxNTksMCAtMC43MiwwLjMxMzY0MyAtMC43MiwwLjcxMTI2MyBMIDcsMTAuMDggYyAwLDAuMzk3NjYxIDAuMzIyMzg0MSwwLjcxMTI2MyAwLjcyLDAuNzExMjYzIGwgMS4zMDc4Mzk4LDAgYyAwLjE3MDM4OCwwLjY1NTMzOCAwLjQzMzQ0MTQsMS4yODYzNDkgMC43NzIyMDg0LDEuODU4ODQ2IEwgOC44NzIzNDksMTMuNTc5OTA2IGMgLTAuMjgxMTgzNiwwLjI4MTEwNSAtMC4yODExODM2LDAuNzM4MTM5IDAsMS4wMTkxODggbCAxLjUyNzM3OCwxLjUyNzk1MSBjIDAuMjgxMTg1LDAuMjgxMjcgMC43MzcwNDEsMC4yODE1MzMgMS4wMTgyMjQsMy4wNGUtNCBsIDAuOTMxOTgxLC0wLjkyNzQ4NCBjIDAuNTcyNDYxLDAuMzM4NzE4IDEuMjAzNDY2LDAuNjAxODIzIDEuODU4ODA2LDAuNzcyMzM4IGwgMCwxLjMwNzc5NyBjIDAsMC4zOTc2NjIgMC4zMTM2NDQsMC43MiAwLjcxMTI2MiwwLjcyIGwgMi4xNiwwIGMgMC4zOTc2NiwwIDAuNzExMjYyLC0wLjMyMjM4IDAuNzExMjYyLC0wLjcyIGwgMCwtMS4zMDc3OTcgYyAwLjY1NTM0LC0wLjE3MDUxNSAxLjI4NjM0NCwtMC40MzM0ODEgMS44NTg4NDksLTAuNzcyMjE0IGwgMC45Mjk3OTcsMC45Mjc1NjggYyAwLjI4MTA5OCwwLjI4MTI3MSAwLjczODEzMSwwLjI4MTI3MSAxLjAxOTE4NCwwIGwgMS41Mjc5NDcsLTEuNTI3MzY5IGMgMC4yODEyNzMsLTAuMjgxMTA1IDAuMjgxNTM0LC0wLjczNzA0NSAzLjA2ZS00LC0xLjAxODEzNiBsIC0wLjkyNzQ4LC0wLjkzMTk4NCBjIDAuMzM4NzIzLC0wLjU3MjQ1NiAwLjYwMTgxOSwtMS4yMDM0NjcgMC43NzIzMzksLTEuODU4ODA1IGwgMS4zMDc3OTYsMCBjIDAuMzk3NjYsMCAwLjcyLC0wLjMxMzY0MyAwLjcyLC0wLjcxMTI2MyBsIDAsLTIuMTU5OTk5NiBjIDAsLTAuMzk3NjIgLTAuMzIyMzg0LC0wLjcxMTI2MyAtMC43MiwtMC43MTEyNjMgeiBNIDE2LDEyLjYgYyAtMS45ODgyNTgsMCAtMy42LC0xLjYxMTc4OSAtMy42LC0zLjU5OTk5OTYgMCwtMS45ODgyNTIgMS42MTE3NDIsLTMuNiAzLjYsLTMuNiAxLjk4ODI1OCwwIDMuNiwxLjYxMTc0OCAzLjYsMy42IEMgMTkuNiwxMC45ODgyNTIgMTcuOTg4MjU4LDEyLjYgMTYsMTIuNiBaIjsKfQoKLy8gQ2FwdGlvbiBpY29uIHBhdGgKZnVuY3Rpb24gY2FwdGlvbl9wYXRoICgpIHsKICAgIHJldHVybiAibSA5LjAwODQ3NjUsMC4wMDMyMTYzIHEgMS44MjQ5NjQ1LDAgMy40OTM5Mzk1LDAuNzA5NzUzOSAxLjY2ODk3NCwwLjcwOTYxNTMgMi44Nzc4MSwxLjkxODUyMyAxLjIwODgzOSwxLjIwODc3MDcgMS45MTg1NSwyLjg3Nzc4NDcgMC43MDk3MDIsMS42NjkwMTU1IDAuNzA5NzAyLDMuNDkzOTM4NyAwLDEuODI0OTIzNCAtMC43MDk3MDIsMy40OTM5Mzg0IC0wLjcwOTcxMSwxLjY2OTAxNSAtMS45MTg1NSwyLjg3Nzc4NCAtMS4yMDg4MzYsMS4yMDg5MDcgLTIuODc3ODEsMS45MTg1MjMgLTEuNjY4OTc1LDAuNzA5NzU0IC0zLjQ5MzkzOTUsMC43MDk3NTQgLTEuODI0OTUwMiwwIC0zLjQ5MzkyNCwtMC43MDk3NTQgUSAzLjg0NTU2NTEsMTYuNTgzODQ2IDIuNjM2NzI2NywxNS4zNzQ5MzkgMS40Mjc4ODg1LDE0LjE2NjE3IDAuNzE4MTksMTIuNDk3MTU1IDAuMDA4NDc3OCwxMC44MjgxNCAwLjAwODQ3NzgsOS4wMDMyMTY2IDAuMDA4NDc3OCw3LjE3ODI5MzQgMC43MTgxOSw1LjUwOTI3NzkgMS40Mjc4ODg1LDMuODQwMjYyNSAyLjYzNjcyNjcsMi42MzE0OTMyIDMuODQ1NTY1MSwxLjQyMjU4NTUgNS41MTQ1NTI1LDAuNzEyOTcwMiA3LjE4MzUyNjMsMC4wMDMyMTYzIDkuMDA4NDc2NSwwLjAwMzIxNjMgWiBtIDEuMTY5ODQ3NSwyLjc2MDc4NiAtMi4zMzk2ODEsMCBxIC0wLjE1NTk5MDUsMCAtMC4yNzI5NjMyLDAuMTE3NjkyNCAtMC4xMTcsMC4xMTYzMDc2IC0wLjExNywwLjI3MzA0NjIgbCAwLDIuMzM5NTg0NyBxIDAsMC4xNTYwNDYyIDAuMTE3LDAuMjczMDQ0NyAwLjExNywwLjExNzY5MjQgMC4yNzI5NjMyLDAuMTE3NjkyNCBsIDIuMzM5NjgxLDAgcSAwLjE1NTk3NywwIDAuMjcyOTYzLC0wLjExNzY5MjQgMC4xMTcsLTAuMTE2MzA3NiAwLjExNywtMC4yNzMwNDQ3IGwgMCwtMi4zMzk1ODQ3IHEgMCwtMC4xNTYwNDYyIC0wLjExNywtMC4yNzMwNDYyIC0wLjExNywtMC4xMTc2OTI0IC0wLjI3Mjk2MywtMC4xMTc2OTI0IHogbSAwLDQuNjc5NDQ2MyAtMy44OTk0Nzc3LDAgcSAtMC4xNTU5NzcyLDAgLTAuMjcyOTYzLDAuMTE3NjkyNCAtMC4xMTcsMC4xMTYzMDc2IC0wLjExNywwLjI3MjkwNzggbCAwLDAuNzc5OTUyNCBxIDAsMC4xNTU5MDc4IDAuMTE3LDAuMjcyOTA3OCAwLjExNywwLjExNjMwNzYgMC4yNzI5NjMsMC4xMTYzMDc2IGwgMS4xNjk4NDc1LDAgMCwzLjExOTUzOTQgLTEuMTY5ODQ3NSwwIHEgLTAuMTU1OTc3MiwwIC0wLjI3Mjk2MywwLjExNzY5NiAtMC4xMTcsMC4xMTYzMDQgLTAuMTE3LDAuMjczMDQ2IGwgMCwwLjc3OTgxNSBxIDAsMC4xNTYwNDYgMC4xMTcsMC4yNzMwNDYgMC4xMTcsMC4xMTYzMDQgMC4yNzI5NjMsMC4xMTYzMDQgbCA1LjQ1OTI3NDcsMCBxIDAuMTU1OTc3LDAgMC4yNzI5NjQsLTAuMTE2MzA0IDAuMTE3LC0wLjExNjMwNCAwLjExNywtMC4yNzMwNDYgbCAwLC0wLjc3OTgxNSBxIDAsLTAuMTU2MDQ2IC0wLjExNywtMC4yNzMwNDYgLTAuMTE3LC0wLjExNzY5NiAtMC4yNzI5NjQsLTAuMTE3Njk2IGwgLTEuMTY5ODQ4LDAgMCwtNC4yODkzOTk2IHEgMCwtMC4xNTU5MDc4IC0wLjExNywtMC4yNzI5MDc4IC0wLjExNywtMC4xMTc2OTI0IC0wLjI3Mjk2MywtMC4xMTc2OTI0IHoiOwp9Cg=="></script>
<script src="data:application/x-javascript;base64,Ly8gQ3JlYXRlIGFuZCBkcmF3IHggYW5kIHkgYXhlcwpmdW5jdGlvbiBhZGRfYXhlcyhzZWxlY3Rpb24sIGRpbXMsIHNldHRpbmdzLCBzY2FsZXMpIHsKCiAgICAvLyB4IGF4aXMKICAgIHNlbGVjdGlvbi5hcHBlbmQoImciKQogICAgICAgIC5hdHRyKCJjbGFzcyIsICJ4IGF4aXMiKQogICAgICAgIC5hdHRyKCJ0cmFuc2Zvcm0iLCAidHJhbnNsYXRlKDAsIiArIGRpbXMuaGVpZ2h0ICsgIikiKQogICAgICAgIC5zdHlsZSgiZm9udC1zaXplIiwgc2V0dGluZ3MuYXhlc19mb250X3NpemUpCiAgICAgICAgLmNhbGwoc2NhbGVzLnhBeGlzKTsKCiAgICAvLyB5IGF4aXMKICAgIHNlbGVjdGlvbi5hcHBlbmQoImciKQogICAgICAgIC5hdHRyKCJjbGFzcyIsICJ5IGF4aXMiKQogICAgICAgIC5zdHlsZSgiZm9udC1zaXplIiwgc2V0dGluZ3MuYXhlc19mb250X3NpemUpCiAgICAgICAgLmNhbGwoc2NhbGVzLnlBeGlzKTsKCiAgICAvLyB4IGF4aXMgbGFiZWwKICAgIHNlbGVjdGlvbi5hcHBlbmQoInRleHQiKQogICAgICAgIC5hdHRyKCJjbGFzcyIsICJ4LWF4aXMtbGFiZWwiKQogICAgICAgIC5hdHRyKCJ0cmFuc2Zvcm0iLCAidHJhbnNsYXRlKCIgKyAoZGltcy53aWR0aCAtIDUpICsgIiwiICsgKGRpbXMuaGVpZ2h0IC0gNikgKyAiKSIpCiAgICAgICAgLnN0eWxlKCJ0ZXh0LWFuY2hvciIsICJlbmQiKQogICAgICAgIC5zdHlsZSgiZm9udC1zaXplIiwgc2V0dGluZ3MuYXhlc19mb250X3NpemUpCiAgICAgICAgLnRleHQoc2V0dGluZ3MueGxhYik7CgogICAgLy8geSBheGlzIGxhYmVsCiAgICBzZWxlY3Rpb24uYXBwZW5kKCJ0ZXh0IikKICAgICAgICAuYXR0cigiY2xhc3MiLCAieS1heGlzLWxhYmVsIikKICAgICAgICAuYXR0cigidHJhbnNmb3JtIiwgInRyYW5zbGF0ZSg1LDYpIHJvdGF0ZSgtOTApIikKICAgICAgICAuYXR0cigiZHkiLCAiLjcxZW0iKQogICAgICAgIC5zdHlsZSgidGV4dC1hbmNob3IiLCAiZW5kIikKICAgICAgICAudGV4dChzZXR0aW5ncy55bGFiKTsKCn0KCi8vIEFkZCB1bml0IGNpcmNsZQpmdW5jdGlvbiBhZGRfdW5pdF9jaXJjbGUoc2VsZWN0aW9uLCBzY2FsZXMpIHsKICAgIHNlbGVjdGlvbgogICAgICAgIC5hdHRyKCdjeCcsIHNjYWxlcy54KDApKQogICAgICAgIC5hdHRyKCdjeScsIHNjYWxlcy55KDApKQogICAgICAgIC5hdHRyKCdyeCcsIHNjYWxlcy54KDEpLXNjYWxlcy54KDApKQogICAgICAgIC5hdHRyKCdyeScsIHNjYWxlcy55KDApLXNjYWxlcy55KDEpKQogICAgICAgIC5zdHlsZSgic3Ryb2tlIiwgIiM4ODgiKQogICAgICAgIC5zdHlsZSgiZmlsbCIsICJub25lIikKICAgICAgICAuc3R5bGUoIm9wYWNpdHkiLCAiMSIpOwp9Cg=="></script>
<script src="data:application/x-javascript;base64,Ly8gUmV0dXJucyBkb3Qgc2l6ZSBmcm9tIGFzc29jaWF0ZWQgZGF0YQpmdW5jdGlvbiBkb3Rfc2l6ZShkYXRhLCBzZXR0aW5ncywgc2NhbGVzKSB7CiAgICB2YXIgc2l6ZSA9IHNldHRpbmdzLnBvaW50X3NpemU7CiAgICBpZiAoc2V0dGluZ3MuaGFzX3NpemVfdmFyKSB7IHNpemUgPSBzY2FsZXMuc2l6ZShkYXRhLnNpemVfdmFyKTsgfQogICAgcmV0dXJuKHNpemUpOwp9CgovLyBJbml0aWFsIGRvdCBhdHRyaWJ1dGVzCmZ1bmN0aW9uIGRvdF9pbml0IChzZWxlY3Rpb24sIHNldHRpbmdzLCBzY2FsZXMpIHsKICAgIC8vIHRvb2x0aXBzIHdoZW4gaG92ZXJpbmcgcG9pbnRzCiAgICB2YXIgdG9vbHRpcCA9IGQzLnNlbGVjdCgiLnNjYXR0ZXJEMy10b29sdGlwIik7CiAgICBzZWxlY3Rpb24ub24oIm1vdXNlb3ZlciIsIGZ1bmN0aW9uKGQsIGkpewogICAgICAgIGQzLnNlbGVjdCh0aGlzKQogICAgICAgICAgICAudHJhbnNpdGlvbigpLmR1cmF0aW9uKDE1MCkKICAgICAgICAgICAgLmF0dHIoImQiLCBkMy5zeW1ib2woKQoJCSAgLnR5cGUoZnVuY3Rpb24oZCkgeyByZXR1cm4gZDMuc3ltYm9sc1tzY2FsZXMuc3ltYm9sKGQuc3ltYm9sX3ZhcildOyB9KQoJCSAgLnNpemUoZnVuY3Rpb24oZCkgeyByZXR1cm4gKGRvdF9zaXplKGQsIHNldHRpbmdzLCBzY2FsZXMpICogc2V0dGluZ3MuaG92ZXJfc2l6ZSk7IH0pCgkJICkKICAgICAgICAgICAgLnN0eWxlKCJvcGFjaXR5IiwgZnVuY3Rpb24oZCkgewoJCWlmIChzZXR0aW5ncy5ob3Zlcl9vcGFjaXR5ICE9PSBudWxsKSB7CgkJICAgIHJldHVybiBzZXR0aW5ncy5ob3Zlcl9vcGFjaXR5OwoJCX0gZWxzZSB7CgkJICAgIHJldHVybihkLm9wYWNpdHlfdmFyID09PSB1bmRlZmluZWQgPyBzZXR0aW5ncy5wb2ludF9vcGFjaXR5IDogc2NhbGVzLm9wYWNpdHkoZC5vcGFjaXR5X3ZhcikpOwoJCX0KICAgICAgICAgICAgfSk7CglpZiAoc2V0dGluZ3MuaGFzX3VybF92YXIpIHsKICAgICAgICAgICAgZDMuc2VsZWN0KHRoaXMpCgkJLnN0eWxlKCJjdXJzb3IiLCBmdW5jdGlvbihkKSB7CgkJICAgIHJldHVybiAoZC51cmxfdmFyICE9ICIiID8gInBvaW50ZXIiIDogImRlZmF1bHQiKTsKCQl9KTsKCX0KCWlmIChzZXR0aW5ncy5oYXNfdG9vbHRpcHMpIHsKCSAgICB0b29sdGlwLnN0eWxlKCJ2aXNpYmlsaXR5IiwgInZpc2libGUiKQoJCS5odG1sKHRvb2x0aXBfY29udGVudChkLCBzZXR0aW5ncykpOwoJfQogICAgfSk7CiAgICBzZWxlY3Rpb24ub24oIm1vdXNlbW92ZSIsIGZ1bmN0aW9uKCl7CglpZiAoc2V0dGluZ3MuaGFzX3Rvb2x0aXBzKSB7CgkgICAgdG9vbHRpcC5zdHlsZSgidG9wIiwgKGQzLmV2ZW50LnBhZ2VZKzE1KSsicHgiKS5zdHlsZSgibGVmdCIsKGQzLmV2ZW50LnBhZ2VYKzE1KSsicHgiKTsKCX0KICAgIH0pOwogICAgc2VsZWN0aW9uLm9uKCJtb3VzZW91dCIsIGZ1bmN0aW9uKCl7CiAgICAgICAgZDMuc2VsZWN0KHRoaXMpCiAgICAgICAgICAgIC50cmFuc2l0aW9uKCkuZHVyYXRpb24oMTUwKQogICAgICAgICAgICAuYXR0cigiZCIsIGQzLnN5bWJvbCgpCgkJICAudHlwZShmdW5jdGlvbihkKSB7IHJldHVybiBkMy5zeW1ib2xzW3NjYWxlcy5zeW1ib2woZC5zeW1ib2xfdmFyKV07IH0pCgkJICAuc2l6ZShmdW5jdGlvbihkKSB7IHJldHVybiBkb3Rfc2l6ZShkLCBzZXR0aW5ncywgc2NhbGVzKTt9KQoJCSApCiAgICAgICAgICAgIC5zdHlsZSgib3BhY2l0eSIsIGZ1bmN0aW9uKGQpIHsKCQlyZXR1cm4oZC5vcGFjaXR5X3ZhciA9PT0gdW5kZWZpbmVkID8gc2V0dGluZ3MucG9pbnRfb3BhY2l0eSA6IHNjYWxlcy5vcGFjaXR5KGQub3BhY2l0eV92YXIpKTsKCSAgICB9KTsKCWlmIChzZXR0aW5ncy5oYXNfdG9vbHRpcHMpIHsKICAgICAgICAgICAgdG9vbHRpcC5zdHlsZSgidmlzaWJpbGl0eSIsICJoaWRkZW4iKTsKCX0KICAgIH0pOwogICAgc2VsZWN0aW9uLm9uKCJjbGljayIsIGZ1bmN0aW9uKGQsIGkpIHsKCWlmICh0eXBlb2Ygc2V0dGluZ3MuY2xpY2tfY2FsbGJhY2sgPT09ICdmdW5jdGlvbicpIHsKCSAgICBzZXR0aW5ncy5jbGlja19jYWxsYmFjayhzZXR0aW5ncy5odG1sX2lkLCBpICsgMSk7Cgl9CglpZiAoc2V0dGluZ3MuaGFzX3VybF92YXIgJiYgZC51cmxfdmFyICE9ICIiKSB7CgkgICAgdmFyIHdpbiA9IHdpbmRvdy5vcGVuKGQudXJsX3ZhciwgJ19ibGFuaycpOwoJICAgIHdpbi5mb2N1cygpOwoJfQogICAgfSk7Cn0KCi8vIEFwcGx5IGZvcm1hdCB0byBkb3QKZnVuY3Rpb24gZG90X2Zvcm1hdHRpbmcoc2VsZWN0aW9uLCBzZXR0aW5ncywgc2NhbGVzKSB7CiAgICB2YXIgc2VsID0gc2VsZWN0aW9uCiAgICAgICAgLmF0dHIoInRyYW5zZm9ybSIsIGZ1bmN0aW9uKGQpIHsgcmV0dXJuIHRyYW5zbGF0aW9uKGQsIHNjYWxlcyk7IH0pCiAgICAvLyBmaWxsIGNvbG9yCiAgICAgICAgLnN0eWxlKCJmaWxsIiwgZnVuY3Rpb24oZCkgeyByZXR1cm4gc2NhbGVzLmNvbG9yKGQuY29sX3Zhcik7IH0pCgkuc3R5bGUoIm9wYWNpdHkiLCBmdW5jdGlvbihkKSB7CgkgICAgcmV0dXJuIGQub3BhY2l0eV92YXIgIT09IHVuZGVmaW5lZCA/IHNjYWxlcy5vcGFjaXR5KGQub3BhY2l0eV92YXIpIDogc2V0dGluZ3MucG9pbnRfb3BhY2l0eTsKCX0pCiAgICAvLyBzeW1ib2wgYW5kIHNpemUKICAgICAgICAuYXR0cigiZCIsIGQzLnN5bWJvbCgpCgkgICAgICAudHlwZShmdW5jdGlvbihkKSB7cmV0dXJuIGQzLnN5bWJvbHNbc2NhbGVzLnN5bWJvbChkLnN5bWJvbF92YXIpXTt9KQoJICAgICAgLnNpemUoZnVuY3Rpb24oZCkgeyByZXR1cm4gZG90X3NpemUoZCwgc2V0dGluZ3MsIHNjYWxlcyk7IH0pCgkgICAgICkKICAgICAgICAuYXR0cigiY2xhc3MiLCBmdW5jdGlvbihkLGkpIHsKCSAgICByZXR1cm4gImRvdCBzeW1ib2wgc3ltYm9sLWMiICsgY3NzX2NsZWFuKGQuc3ltYm9sX3ZhcikgKyAiIGNvbG9yIGNvbG9yLWMiICsgY3NzX2NsZWFuKGQuY29sX3Zhcik7CiAgICAgICAgfSk7CiAgICByZXR1cm4gc2VsOwp9Cg=="></script>
<script src="data:application/x-javascript;base64,CmZ1bmN0aW9uIGFkZF9hcnJvd3NfZGVmcyhzdmcsIHNldHRpbmdzLCBzY2FsZXMpIHsKICAgIC8vIDxkZWZzPgogICAgdmFyIGRlZnMgPSBzdmcuYXBwZW5kKCJkZWZzIik7CiAgICAvLyBhcnJvdyBoZWFkIG1hcmtlcnMKICAgIHNjYWxlcy5jb2xvci5yYW5nZSgpLmZvckVhY2goZnVuY3Rpb24oZCkgewogICAgICAgIGRlZnMuYXBwZW5kKCJtYXJrZXIiKQoJICAgIC5hdHRyKCJpZCIsICJhcnJvdy1oZWFkLSIgKyBzZXR0aW5ncy5odG1sX2lkICsgIi0iICsgZCkKCSAgICAuYXR0cigibWFya2VyV2lkdGgiLCAiMTAiKQoJICAgIC5hdHRyKCJtYXJrZXJIZWlnaHQiLCAiMTAiKQoJICAgIC5hdHRyKCJyZWZYIiwgIjEwIikKCSAgICAuYXR0cigicmVmWSIsICI0IikKCSAgICAuYXR0cigib3JpZW50IiwgImF1dG8iKQoJICAgIC5hcHBlbmQoInBhdGgiKQoJICAgIC5hdHRyKCJkIiwgIk0wLDAgTDAsOCBMMTAsNCBMMCwwIikKCSAgICAuc3R5bGUoImZpbGwiLCBkKTsKICAgIH0pOwp9CgoKLy8gQXJyb3cgZHJhd2luZyBmdW5jdGlvbgpmdW5jdGlvbiBkcmF3X2Fycm93KHNlbGVjdGlvbiwgc2NhbGVzKSB7CiAgICBzZWxlY3Rpb24KICAgICAgICAuYXR0cigieDEiLCBmdW5jdGlvbihkKSB7IHJldHVybiBzY2FsZXMueCgwKTsgfSkKICAgICAgICAuYXR0cigieTEiLCBmdW5jdGlvbihkKSB7IHJldHVybiBzY2FsZXMueSgwKTsgfSkKICAgICAgICAuYXR0cigieDIiLCBmdW5jdGlvbihkKSB7IHJldHVybiBzY2FsZXMueChkLngpOyB9KQogICAgICAgIC5hdHRyKCJ5MiIsIGZ1bmN0aW9uKGQpIHsgcmV0dXJuIHNjYWxlcy55KGQueSk7IH0pOwp9CgovLyBJbml0aWFsIGFycm93IGF0dHJpYnV0ZXMKZnVuY3Rpb24gYXJyb3dfaW5pdCAoc2VsZWN0aW9uLCBzZXR0aW5ncykgewogICAgLy8gdG9vbHRpcHMgd2hlbiBob3ZlcmluZyBwb2ludHMKICAgIGlmIChzZXR0aW5ncy5oYXNfdG9vbHRpcHMpIHsKICAgICAgICB2YXIgdG9vbHRpcCA9IGQzLnNlbGVjdCgiLnNjYXR0ZXJEMy10b29sdGlwIik7CiAgICAgICAgc2VsZWN0aW9uLm9uKCJtb3VzZW92ZXIiLCBmdW5jdGlvbihkLCBpKXsKICAgICAgICAgICAgdG9vbHRpcC5zdHlsZSgidmlzaWJpbGl0eSIsICJ2aXNpYmxlIikKICAgICAgICAgICAgICAgIC5odG1sKHRvb2x0aXBfY29udGVudChkLCBzZXR0aW5ncykpOwogICAgICAgIH0pOwogICAgICAgIHNlbGVjdGlvbi5vbigibW91c2Vtb3ZlIiwgZnVuY3Rpb24oKXsKICAgICAgICAgICAgdG9vbHRpcC5zdHlsZSgidG9wIiwgKGQzLmV2ZW50LnBhZ2VZKzE1KSsicHgiKS5zdHlsZSgibGVmdCIsKGQzLmV2ZW50LnBhZ2VYKzE1KSsicHgiKTsKICAgICAgICB9KTsKICAgICAgICBzZWxlY3Rpb24ub24oIm1vdXNlb3V0IiwgZnVuY3Rpb24oKXsKICAgICAgICAgICAgdG9vbHRpcC5zdHlsZSgidmlzaWJpbGl0eSIsICJoaWRkZW4iKTsKICAgICAgICB9KTsKICAgIH0KfQoKLy8gQXBwbHkgZm9ybWF0IHRvIGFycm93CmZ1bmN0aW9uIGFycm93X2Zvcm1hdHRpbmcoc2VsZWN0aW9uLCBzZXR0aW5ncywgc2NhbGVzKSB7CiAgICB2YXIgc2VsID0gc2VsZWN0aW9uCiAgICAgICAgLmNhbGwoZnVuY3Rpb24oc2VsKSB7ZHJhd19hcnJvdyhzZWwsIHNjYWxlcyk7fSkKICAgICAgICAuc3R5bGUoInN0cm9rZS13aWR0aCIsICIxcHgiKQogICAgLy8gc3Ryb2tlIGNvbG9yCiAgICAgICAgLnN0eWxlKCJzdHJva2UiLCBmdW5jdGlvbihkKSB7IHJldHVybiBzY2FsZXMuY29sb3IoZC5jb2xfdmFyKTsgfSkKICAgICAgICAuYXR0cigibWFya2VyLWVuZCIsIGZ1bmN0aW9uKGQpIHsgcmV0dXJuICJ1cmwoI2Fycm93LWhlYWQtIiArIHNldHRpbmdzLmh0bWxfaWQgKyAiLSIgKyBzY2FsZXMuY29sb3IoZC5jb2xfdmFyKSArICIpIjsgfSkKICAgICAgICAuYXR0cigiY2xhc3MiLCBmdW5jdGlvbihkLGkpIHsgcmV0dXJuICJhcnJvdyBjb2xvciBjb2xvci1jIiArIGNzc19jbGVhbihkLmNvbF92YXIpOyB9KQogICAgICAgIC5zdHlsZSgib3BhY2l0eSIsIGZ1bmN0aW9uKGQpIHsKCSAgICByZXR1cm4gZC5vcGFjaXR5X3ZhciAhPT0gdW5kZWZpbmVkID8gc2NhbGVzLm9wYWNpdHkoZC5vcGFjaXR5X3ZhcikgOiBzZXR0aW5ncy5wb2ludF9vcGFjaXR5OwoJfSk7CiAgICByZXR1cm4gc2VsOwp9Cgo="></script>
<script src="data:application/x-javascript;base64,Ci8vIEluaXRpYWwgdGV4dCBsYWJlbCBhdHRyaWJ1dGVzCmZ1bmN0aW9uIGxhYmVsX2luaXQgKHNlbGVjdGlvbikgewogICAgc2VsZWN0aW9uCiAgICAgICAgLmF0dHIoInRleHQtYW5jaG9yIiwgIm1pZGRsZSIpOwp9CgovLyBDb21wdXRlIGRlZmF1bHQgdmVydGljYWwgb2Zmc2V0IGZvciBsYWJlbHMKZnVuY3Rpb24gZGVmYXVsdF9sYWJlbF9keShzaXplLCB5LCB0eXBlX3ZhcixzZXR0aW5ncykgewogICAgaWYgKHkgPCAwICYmIHR5cGVfdmFyICE9PSB1bmRlZmluZWQgJiYgdHlwZV92YXIgPT0gImFycm93IikgewogICAgICAgIHJldHVybiAoTWF0aC5zcXJ0KHNpemUpIC8gMikgKyBzZXR0aW5ncy5sYWJlbHNfc2l6ZSArIDI7CiAgICB9CiAgICBlbHNlIHsKICAgICAgICByZXR1cm4gKC1NYXRoLnNxcnQoc2l6ZSkgLyAyKSAtIDY7CiAgICB9Cn0KCi8vIENvbXB1dGUgbGFiZWwgeCBwb3NpdGlvbgpmdW5jdGlvbiBnZXRfbGFiZWxfZHgoZCwgaSwgc2V0dGluZ3MsIHNjYWxlcykgewogICAgLy8gTWFudWFsbHkgZGVmaW5lZAogICAgaWYgKGQubGFiX2R4ICE9PSB1bmRlZmluZWQpIHJldHVybihkLmxhYl9keCk7CiAgICAvLyBGcm9tIGxhYmVsc19wb3NpdGlvbnMgYXJndW1lbnQKICAgIGlmIChzZXR0aW5ncy5sYWJlbHNfcG9zaXRpb25zKSB7Cgl2YXIgZHggPSBzY2FsZXMueChzZXR0aW5ncy5sYWJlbHNfcG9zaXRpb25zW2ldLmxhYl94KSAtIHNjYWxlcy54KGQueCk7CglyZXR1cm4gZHg7CiAgICB9CiAgICAvLyBEZWZhdWx0CiAgICByZXR1cm4oIjAiKTsKfQoKLy8gQ29tcHV0ZSBsYWJlbCB5IHBvc2l0aW9uCmZ1bmN0aW9uIGdldF9sYWJlbF9keShkLCBpLCBzZXR0aW5ncywgc2NhbGVzKSB7CiAgICAvLyBNYW51YWxseSBkZWZpbmVkCiAgICBpZiAoZC5sYWJfZHkgIT09IHVuZGVmaW5lZCkgcmV0dXJuKGQubGFiX2R5KTsKICAgIC8vIEZyb20gbGFiZWxzX3Bvc2l0aW9ucyBhcmd1bWVudAogICAgaWYgKHNldHRpbmdzLmxhYmVsc19wb3NpdGlvbnMpIHsKCXZhciBkeSA9IHNjYWxlcy55KHNldHRpbmdzLmxhYmVsc19wb3NpdGlvbnNbaV0ubGFiX3kpIC0gc2NhbGVzLnkoZC55KTsKCXJldHVybiBkeTsKICAgIH0KICAgIC8vIERlZmF1bHQKICAgIHZhciBzaXplID0gKGQuc2l6ZV92YXIgPT09IHVuZGVmaW5lZCkgPyBzZXR0aW5ncy5wb2ludF9zaXplIDogc2NhbGVzLnNpemUoZC5zaXplX3Zhcik7CiAgICByZXR1cm4gZGVmYXVsdF9sYWJlbF9keShzaXplLCBkLnksIGQudHlwZV92YXIsIHNldHRpbmdzKTsKfQoKLy8gQXBwbHkgZm9ybWF0IHRvIHRleHQgbGFiZWwKZnVuY3Rpb24gbGFiZWxfZm9ybWF0dGluZyAoc2VsZWN0aW9uLCBzZXR0aW5ncywgc2NhbGVzKSB7CiAgICB2YXIgc2VsID0gc2VsZWN0aW9uCiAgICAgICAgLnRleHQoZnVuY3Rpb24oZCkge3JldHVybihkLmxhYik7fSkKICAgICAgICAuc3R5bGUoImZvbnQtc2l6ZSIsIHNldHRpbmdzLmxhYmVsc19zaXplICsgInB4IikKICAgICAgICAuYXR0cigiY2xhc3MiLCBmdW5jdGlvbihkLGkpIHsgcmV0dXJuICJwb2ludC1sYWJlbCBjb2xvciBjb2xvci1jIiArIGNzc19jbGVhbihkLmNvbF92YXIpICsgIiBzeW1ib2wgc3ltYm9sLWMiICsgY3NzX2NsZWFuKGQuc3ltYm9sX3Zhcik7IH0pCiAgICAgICAgLmF0dHIoInRyYW5zZm9ybSIsIGZ1bmN0aW9uKGQpIHsgcmV0dXJuIHRyYW5zbGF0aW9uKGQsIHNjYWxlcyk7IH0pCiAgICAgICAgLnN0eWxlKCJmaWxsIiwgZnVuY3Rpb24oZCkgeyByZXR1cm4gc2NhbGVzLmNvbG9yKGQuY29sX3Zhcik7IH0pCiAgICAgICAgLmF0dHIoImR4IiwgZnVuY3Rpb24oZCwgaSkgewoJICAgIHJldHVybiBnZXRfbGFiZWxfZHgoZCwgaSwgc2V0dGluZ3MsIHNjYWxlcykgKyAicHgiOwogICAgICAgIH0pCiAgICAgICAgLmF0dHIoImR5IiwgZnVuY3Rpb24oZCwgaSkgewoJICAgIHJldHVybiBnZXRfbGFiZWxfZHkoZCwgaSwgc2V0dGluZ3MsIHNjYWxlcykgKyAicHgiOwogICAgICAgIH0pOwogICAgcmV0dXJuIHNlbDsKfQo="></script>
<script src="data:application/x-javascript;base64,Ly8gWmVybyBob3Jpem9udGFsIGFuZCB2ZXJ0aWNhbCBsaW5lcwp2YXIgZHJhd19saW5lID0gZDMubGluZSgpCiAgICAueChmdW5jdGlvbihkKSB7cmV0dXJuIGQueDt9KQogICAgLnkoZnVuY3Rpb24oZCkge3JldHVybiBkLnk7fSk7CgpmdW5jdGlvbiBsaW5lX2luaXQoc2VsZWN0aW9uKSB7CiAgICBzZWxlY3Rpb24KCS5hdHRyKCJjbGFzcyIsICJsaW5lIik7CgogICAgcmV0dXJuIHNlbGVjdGlvbjsKfQoKZnVuY3Rpb24gbGluZV9mb3JtYXR0aW5nKHNlbGVjdGlvbiwgZGltcywgc2V0dGluZ3MsIHNjYWxlcykgewogICAgc2VsZWN0aW9uCgkuYXR0cigiZCIsIGZ1bmN0aW9uKGQpIHsKCSAgICAvLyBDYXRlZ29yaWNhbCB2YXJpYWJsZXMKCSAgICBpZiAoc2V0dGluZ3MueF9jYXRlZ29yaWNhbCAmJiBzZXR0aW5ncy55X2NhdGVnb3JpY2FsKSB7IHJldHVybiBudWxsOyB9OwoJICAgIGlmIChzZXR0aW5ncy54X2NhdGVnb3JpY2FsKSB7CgkJaWYgKGQuc2xvcGUgIT0gMCkgeyByZXR1cm4gbnVsbDsgfQoJCWVsc2UgewoJCSAgICByZXR1cm4gZHJhd19saW5lKFt7eDowLCB5OiBzY2FsZXMueShkLmludGVyY2VwdCl9LAoJCQkJICAgICAge3g6ZGltcy53aWR0aCwgeTogc2NhbGVzLnkoZC5pbnRlcmNlcHQpfV0pOwoJCX0KCSAgICB9CgkgICAgaWYgKHNldHRpbmdzLnlfY2F0ZWdvcmljYWwpIHsKCQlpZiAoZC5zbG9wZSAhPT0gbnVsbCkgeyByZXR1cm4gbnVsbDsgfQoJICAgIH0KCSAgICAvLyBWZXJ0aWNhbCBsaW5lCgkgICAgaWYgKGQuc2xvcGUgPT09IG51bGwpIHsKCQlyZXR1cm4gZHJhd19saW5lKFt7eDpzY2FsZXMueChkLmludGVyY2VwdCksIHk6IDB9LAoJCQkJICB7eDpzY2FsZXMueChkLmludGVyY2VwdCksIHk6IGRpbXMuaGVpZ2h0fV0pOwoJICAgIH0KCSAgICAvLyBBbGwgb3RoZXIgbGluZXMKCSAgICBlbHNlIHsKCQlyZXR1cm4gZHJhd19saW5lKFt7eDowLCB5OiBzY2FsZXMueShkLnNsb3BlICogc2NhbGVzLnguZG9tYWluKClbMF0gKyBkLmludGVyY2VwdCl9LAoJCQkJICB7eDpkaW1zLndpZHRoLCB5OiBzY2FsZXMueShkLnNsb3BlICogc2NhbGVzLnguZG9tYWluKClbMV0gKyBkLmludGVyY2VwdCl9XSk7CgkgICAgfQoJfSkKCS5zdHlsZSgic3Ryb2tlLXdpZHRoIiwgZnVuY3Rpb24oZCkgewoJICAgIHJldHVybiBkLnN0cm9rZV93aWR0aCAhPT0gdW5kZWZpbmVkICYmIGQuc3Ryb2tlX3dpZHRoICE9PSBudWxsID8gZC5zdHJva2Vfd2lkdGggOiAiMXB4IjsKCX0pCgkuc3R5bGUoInN0cm9rZSIsIGZ1bmN0aW9uKGQpIHsKCSAgICByZXR1cm4gZC5zdHJva2UgIT09IHVuZGVmaW5lZCAmJiBkLnN0cm9rZSAhPT0gbnVsbCA/IGQuc3Ryb2tlIDogIiMwMDAwMDAiOwoJfSkKCS5zdHlsZSgic3Ryb2tlLWRhc2hhcnJheSIsIGZ1bmN0aW9uKGQpIHsKCSAgICByZXR1cm4gZC5zdHJva2VfZGFzaGFycmF5ICE9PSB1bmRlZmluZWQgJiYgZC5zdHJva2VfZGFzaGFycmF5ICE9PSBudWxsID8gZC5zdHJva2VfZGFzaGFycmF5IDogbnVsbDsKCX0pOwoKICAgIHJldHVybiBzZWxlY3Rpb247Cn0K"></script>
<script src="data:application/x-javascript;base64,Ci8vIEluaXRpYWwgZWxsaXBzZSBhdHRyaWJ1dGVzCmZ1bmN0aW9uIGVsbGlwc2VfaW5pdChzZWxlY3Rpb24pIHsKICAgIHNlbGVjdGlvbgogICAgICAgIC5zdHlsZSgiZmlsbCIsICJub25lIik7Cn0KCi8vIEFwcGx5IGZvcm1hdCB0byBlbGxpcHNlCmZ1bmN0aW9uIGVsbGlwc2VfZm9ybWF0dGluZyhzZWxlY3Rpb24sIHNldHRpbmdzLCBzY2FsZXMpIHsKCiAgICAvLyBFbGxpcHNlcyBwYXRoIGZ1bmN0aW9uCiAgICB2YXIgZWxsaXBzZUZ1bmMgPSBkMy5saW5lKCkKICAgICAgICAueChmdW5jdGlvbihkKSB7IHJldHVybiBzY2FsZXMueChkLngpOyB9KQogICAgICAgIC55KGZ1bmN0aW9uKGQpIHsgcmV0dXJuIHNjYWxlcy55KGQueSk7IH0pOwoKICAgIHNlbGVjdGlvbgogICAgICAgIC5hdHRyKCJkIiwgZnVuY3Rpb24oZCkgewoJICAgIHZhciBlbGwgPSBIVE1MV2lkZ2V0cy5kYXRhZnJhbWVUb0QzKGQuZGF0YSk7CgkgICAgcmV0dXJuIChlbGxpcHNlRnVuYyhlbGwpKTsKICAgICAgICB9KQogICAgICAgIC5zdHlsZSgic3Ryb2tlIiwgZnVuY3Rpb24oZCkgewoJICAgIC8vIE9ubHkgb25lIGVsbGlwc2UKCSAgICBpZiAoZC5sZXZlbCA9PSAiX3NjYXR0ZXJEM19hbGwiKSB7CgkJaWYgKHNldHRpbmdzLmNvbF9jb250aW51b3VzKSB7CgkJICAgIHJldHVybihkMy5pbnRlcnBvbGF0ZVZpcmlkaXMoMCkpOwoJCX0gZWxzZSB7CgkJICAgIHJldHVybihzY2FsZXMuY29sb3IucmFuZ2UoKVswXSk7CgkJfQoJICAgIH0KCSAgICByZXR1cm4oIHNjYWxlcy5jb2xvcihkLmxldmVsKSk7CiAgICAgICAgfSkKICAgICAgICAuc3R5bGUoIm9wYWNpdHkiLCAxKQogICAgICAgIC5hdHRyKCJjbGFzcyIsIGZ1bmN0aW9uKGQpIHsKCSAgICByZXR1cm4gImVsbGlwc2UgY29sb3IgY29sb3ItYyIgKyBjc3NfY2xlYW4oZC5sZXZlbCk7CiAgICAgICAgfSk7Cn0K"></script>
<script src="data:application/x-javascript;base64,Ly8gRm9ybWF0IGxlZ2VuZCBsYWJlbApmdW5jdGlvbiBsZWdlbmRfbGFiZWxfZm9ybWF0dGluZyAoc2VsZWN0aW9uKSB7CiAgICBzZWxlY3Rpb24KICAgICAgICAuc3R5bGUoInRleHQtYW5jaG9yIiwgImJlZ2lubmluZyIpCiAgICAgICAgLnN0eWxlKCJmaWxsIiwgIiMwMDAiKQogICAgICAgIC5zdHlsZSgiZm9udC13ZWlnaHQiLCAiYm9sZCIpOwp9CgovLyBDcmVhdGUgY29sb3IgbGVnZW5kCmZ1bmN0aW9uIGFkZF9jb2xvcl9sZWdlbmQoc3ZnLCBkaW1zLCBzZXR0aW5ncywgc2NhbGVzLCBkdXJhdGlvbikgewoKICAgIC8vIERlZmF1bHQgdHJhbnNpdGlvbiBkdXJhdGlvbiB0byAwCiAgICBkdXJhdGlvbiA9IHR5cGVvZiBkdXJhdGlvbiAhPT0gJ3VuZGVmaW5lZCcgPyBkdXJhdGlvbiA6IDA7CgogICAgdmFyIGxlZ2VuZCA9IHN2Zy5zZWxlY3QoIi5sZWdlbmQiKTsKICAgIHZhciBsZWdlbmRfY29sb3Jfc2NhbGUgPSBzY2FsZXMuY29sb3IuY29weSgpOwogICAgaWYgKCFzZXR0aW5ncy5jb2xfY29udGludW91cykgewoJLy8gU29ydCBsZWdlbmQKCWxlZ2VuZF9jb2xvcl9zY2FsZQoJICAgIC5kb21haW4obGVnZW5kX2NvbG9yX3NjYWxlLmRvbWFpbigpLnNvcnQoKSkKCSAgICAucmFuZ2UobGVnZW5kX2NvbG9yX3NjYWxlLmRvbWFpbigpLm1hcChmdW5jdGlvbihkKSB7cmV0dXJuIHNjYWxlcy5jb2xvcihkKTt9KSk7CiAgICB9CiAgICAKICAgIHZhciBjb2xvcl9sZWdlbmQgPSBkMy5sZWdlbmRDb2xvcigpCiAgICAgICAgLnNoYXBlUGFkZGluZygzKQogICAgICAgIC5zaGFwZSgicmVjdCIpCiAgICAgICAgLnNjYWxlKGxlZ2VuZF9jb2xvcl9zY2FsZSk7CgogICAgaWYgKCFzZXR0aW5ncy5jb2xfY29udGludW91cykgewoJY29sb3JfbGVnZW5kCgkgICAgLm9uKCJjZWxsb3ZlciIsIGZ1bmN0aW9uKGQpIHsKCQlkID0gY3NzX2NsZWFuKGQpOwoJCXZhciBuc2VsID0gIi5jb2xvcjpub3QoLmNvbG9yLWMiICsgZCArICIpOm5vdCguc2VsZWN0ZWQtbGFzc28pOm5vdCgubm90LXNlbGVjdGVkLWxhc3NvKSI7CgkJdmFyIHNlbCA9ICIuY29sb3ItYyIgKyBkICsgIjpub3QoLnNlbGVjdGVkLWxhc3NvKTpub3QoLm5vdC1zZWxlY3RlZC1sYXNzbykiOwoJCXN2Zy5zZWxlY3RBbGwobnNlbCkKCQkgICAgLnRyYW5zaXRpb24oKQoJCSAgICAuc3R5bGUoIm9wYWNpdHkiLCAwLjIpOwoJCXN2Zy5zZWxlY3RBbGwoc2VsKQoJCSAgICAudHJhbnNpdGlvbigpCgkJICAgIC5zdHlsZSgib3BhY2l0eSIsIDEpOwoJICAgIH0pCgkgICAgLm9uKCJjZWxsb3V0IiwgZnVuY3Rpb24oZCkgewoJCXZhciBzZWwgPSAiLmNvbG9yOm5vdCguc2VsZWN0ZWQtbGFzc28pOm5vdCgubm90LXNlbGVjdGVkLWxhc3NvKSI7CgkJc3ZnLnNlbGVjdEFsbChzZWwpCgkJICAgIC50cmFuc2l0aW9uKCkKCQkgICAgLnN0eWxlKCJvcGFjaXR5IiwgZnVuY3Rpb24oZDIpIHsKCQkJcmV0dXJuKGQyLm9wYWNpdHlfdmFyID09PSB1bmRlZmluZWQgPyBzZXR0aW5ncy5wb2ludF9vcGFjaXR5IDogc2NhbGVzLm9wYWNpdHkoZDIub3BhY2l0eV92YXIpKTsKCQkgICAgfSk7CgkJc3ZnLnNlbGVjdEFsbCgiLnBvaW50LWxhYmVsOm5vdCguc2VsZWN0ZWQtbGFzc28pOm5vdCgubm90LXNlbGVjdGVkLWxhc3NvKSIpCgkJICAgIC50cmFuc2l0aW9uKCkKCQkgICAgLnN0eWxlKCJvcGFjaXR5IiwgMSk7CgkgICAgfSk7CiAgICB9IGVsc2UgewoJY29sb3JfbGVnZW5kLmNlbGxzKDYpOwogICAgfQoKICAgIGxlZ2VuZC5hcHBlbmQoImciKQogICAgICAgIC5hdHRyKCJjbGFzcyIsICJjb2xvci1sZWdlbmQtbGFiZWwiKQogICAgICAgIC5hcHBlbmQoInRleHQiKQogICAgICAgIC50ZXh0KHNldHRpbmdzLmNvbF9sYWIpCiAgICAgICAgLmNhbGwobGVnZW5kX2xhYmVsX2Zvcm1hdHRpbmcpOwoKICAgIGxlZ2VuZC5hcHBlbmQoImciKQogICAgICAgIC5hdHRyKCJjbGFzcyIsICJjb2xvci1sZWdlbmQiKQogICAgICAgIC5jYWxsKGNvbG9yX2xlZ2VuZCk7CgogICAgbGVnZW5kLmNhbGwoZnVuY3Rpb24obGVnZW5kKSB7IG1vdmVfY29sb3JfbGVnZW5kKGxlZ2VuZCwgZGltcywgMCk7fSk7CgogICAgaWYgKGR1cmF0aW9uICE9IDApIHsKCWxlZ2VuZC5zZWxlY3RBbGwoIi5jb2xvci1sZWdlbmQtbGFiZWwsIC5jb2xvci1sZWdlbmQiKQoJICAgIC5zdHlsZSgib3BhY2l0eSIsIDApCgkgICAgLnRyYW5zaXRpb24oKS5kdXJhdGlvbihkdXJhdGlvbikKCSAgICAuc3R5bGUoIm9wYWNpdHkiLCAxKTsKICAgIH0KICAgIAp9CgovLyBDcmVhdGUgc3ltYm9sIGxlZ2VuZApmdW5jdGlvbiBhZGRfc3ltYm9sX2xlZ2VuZChzdmcsIGRpbXMsIHNldHRpbmdzLCBzY2FsZXMsIGR1cmF0aW9uKSB7CgogICAgLy8gRGVmYXVsdCB0cmFuc2l0aW9uIGR1cmF0aW9uIHRvIDAKICAgIGR1cmF0aW9uID0gdHlwZW9mIGR1cmF0aW9uICE9PSAndW5kZWZpbmVkJyA/IGR1cmF0aW9uIDogMDsKCiAgICB2YXIgbGVnZW5kID0gc3ZnLnNlbGVjdCgiLmxlZ2VuZCIpOwogICAgLy8gU29ydCBsZWdlbmQKICAgIHZhciBsZWdlbmRfc3ltYm9sX3NjYWxlID0gc2NhbGVzLnN5bWJvbC5jb3B5KCk7CiAgICBsZWdlbmRfc3ltYm9sX3NjYWxlCgkuZG9tYWluKGxlZ2VuZF9zeW1ib2xfc2NhbGUuZG9tYWluKCkuc29ydCgpKQogICAgICAgIC5yYW5nZShsZWdlbmRfc3ltYm9sX3NjYWxlLmRvbWFpbigpLm1hcChmdW5jdGlvbihkKSB7cmV0dXJuIGQzLnN5bWJvbCgpLnR5cGUoZDMuc3ltYm9sc1tzY2FsZXMuc3ltYm9sKGQpXSkoKTt9KSk7CiAgICAKICAgIHZhciBzeW1ib2xfbGVnZW5kID0gZDMubGVnZW5kU3ltYm9sKCkKICAgICAgICAuc2hhcGVQYWRkaW5nKDUpCiAgICAgICAgLnNjYWxlKGxlZ2VuZF9zeW1ib2xfc2NhbGUpCiAgICAgICAgLm9uKCJjZWxsb3ZlciIsIGZ1bmN0aW9uKGQpIHsKCSAgICBkID0gY3NzX2NsZWFuKGQpOwoJICAgIHZhciBuc2VsID0gIi5zeW1ib2w6bm90KC5zeW1ib2wtYyIgKyBkICsgIik6bm90KC5zZWxlY3RlZC1sYXNzbyk6bm90KC5ub3Qtc2VsZWN0ZWQtbGFzc28pIjsKCSAgICB2YXIgc2VsID0gIi5zeW1ib2wtYyIgKyBkICsgIjpub3QoLnNlbGVjdGVkLWxhc3NvKTpub3QoLm5vdC1zZWxlY3RlZC1sYXNzbykiOwoJICAgIHN2Zy5zZWxlY3RBbGwobnNlbCkKCQkudHJhbnNpdGlvbigpCgkJLnN0eWxlKCJvcGFjaXR5IiwgMC4yKTsKCSAgICBzdmcuc2VsZWN0QWxsKHNlbCkKCQkudHJhbnNpdGlvbigpCgkJLnN0eWxlKCJvcGFjaXR5IiwgMSk7CiAgICAgICAgfSkKICAgICAgICAub24oImNlbGxvdXQiLCBmdW5jdGlvbihkKSB7CgkgICAgdmFyIHNlbCA9ICIuc3ltYm9sOm5vdCguc2VsZWN0ZWQtbGFzc28pOm5vdCgubm90LXNlbGVjdGVkLWxhc3NvKSI7CgkgICAgc3ZnLnNlbGVjdEFsbChzZWwpCgkJLnRyYW5zaXRpb24oKQoJCS5zdHlsZSgib3BhY2l0eSIsIGZ1bmN0aW9uKGQyKSB7CgkJICAgIHJldHVybihkMi5vcGFjaXR5X3ZhciA9PT0gdW5kZWZpbmVkID8gc2V0dGluZ3MucG9pbnRfb3BhY2l0eSA6IHNjYWxlcy5vcGFjaXR5KGQyLm9wYWNpdHlfdmFyKSk7CgkJfSk7CgkgICAgc3ZnLnNlbGVjdEFsbCgiLnBvaW50LWxhYmVsOm5vdCguc2VsZWN0ZWQtbGFzc28pOm5vdCgubm90LXNlbGVjdGVkLWxhc3NvKSIpCgkJLnRyYW5zaXRpb24oKQoJCS5zdHlsZSgib3BhY2l0eSIsIDEpOwogICAgICAgIH0pOwoKICAgIGxlZ2VuZC5hcHBlbmQoImciKQogICAgICAgIC5hcHBlbmQoInRleHQiKQogICAgICAgIC5hdHRyKCJjbGFzcyIsICJzeW1ib2wtbGVnZW5kLWxhYmVsIikKICAgICAgICAudGV4dChzZXR0aW5ncy5zeW1ib2xfbGFiKQogICAgICAgIC5jYWxsKGxlZ2VuZF9sYWJlbF9mb3JtYXR0aW5nKTsKCiAgICBsZWdlbmQuYXBwZW5kKCJnIikKICAgICAgICAuYXR0cigiY2xhc3MiLCAic3ltYm9sLWxlZ2VuZCIpCiAgICAgICAgLmNhbGwoc3ltYm9sX2xlZ2VuZCk7CgogICAgbGVnZW5kLmNhbGwoZnVuY3Rpb24oc2VsKSB7IG1vdmVfc3ltYm9sX2xlZ2VuZChzZWwsIGRpbXMsIDApO30pOwoKICAgIGlmIChkdXJhdGlvbiAhPSAwKSB7CglsZWdlbmQuc2VsZWN0QWxsKCIuc3ltYm9sLWxlZ2VuZC1sYWJlbCwgLnN5bWJvbC1sZWdlbmQiKQoJICAgIC5zdHlsZSgib3BhY2l0eSIsIDApCgkgICAgLnRyYW5zaXRpb24oKS5kdXJhdGlvbihkdXJhdGlvbikKCSAgICAuc3R5bGUoIm9wYWNpdHkiLCAxKTsKICAgIH0KCn0KCi8vIENyZWF0ZSBzaXplIGxlZ2VuZApmdW5jdGlvbiBhZGRfc2l6ZV9sZWdlbmQoc3ZnLCBkaW1zLCBzZXR0aW5ncywgc2NhbGVzLCBkdXJhdGlvbikgewoKICAgIC8vIERlZmF1bHQgdHJhbnNpdGlvbiBkdXJhdGlvbiB0byAwCiAgICBkdXJhdGlvbiA9IHR5cGVvZiBkdXJhdGlvbiAhPT0gJ3VuZGVmaW5lZCcgPyBkdXJhdGlvbiA6IDA7CgogICAgdmFyIGxlZ2VuZCA9IHN2Zy5zZWxlY3QoIi5sZWdlbmQiKTsKICAgIHZhciBsZWdlbmRfc2l6ZV9zY2FsZSA9IHNjYWxlcy5zaXplLmNvcHkoKTsKICAgIC8vIEZJWE1FIDogZmluZCBleGFjdCBmb3JtdWxhCiAgICBsZWdlbmRfc2l6ZV9zY2FsZS5yYW5nZShzY2FsZXMuc2l6ZS5yYW5nZSgpLm1hcChmdW5jdGlvbihkKSB7cmV0dXJuIE1hdGguc3FydChkKS8xLjg7fSkpOwoKICAgIHZhciBzaXplX2xlZ2VuZCA9IGQzLmxlZ2VuZFNpemUoKQogICAgICAgIC5zaGFwZVBhZGRpbmcoMykKICAgICAgICAuc2hhcGUoJ2NpcmNsZScpCiAgICAgICAgLnNjYWxlKGxlZ2VuZF9zaXplX3NjYWxlKTsKCiAgICBsZWdlbmQuYXBwZW5kKCJnIikKICAgICAgICAuYXBwZW5kKCJ0ZXh0IikKICAgICAgICAuYXR0cigiY2xhc3MiLCAic2l6ZS1sZWdlbmQtbGFiZWwiKQogICAgICAgIC50ZXh0KHNldHRpbmdzLnNpemVfbGFiKQogICAgICAgIC5jYWxsKGxlZ2VuZF9sYWJlbF9mb3JtYXR0aW5nKTsKCiAgICBsZWdlbmQuYXBwZW5kKCJnIikKICAgICAgICAuYXR0cigiY2xhc3MiLCAic2l6ZS1sZWdlbmQiKQogICAgICAgIC5jYWxsKHNpemVfbGVnZW5kKTsKCiAgICBsZWdlbmQuY2FsbChmdW5jdGlvbihzZWwpIHsgbW92ZV9zaXplX2xlZ2VuZChzZWwsIGRpbXMsIDApO30pOwoKICAgIGlmIChkdXJhdGlvbiAhPSAwKSB7CglsZWdlbmQuc2VsZWN0QWxsKCIuc2l6ZS1sZWdlbmQtbGFiZWwsIC5zaXplLWxlZ2VuZCIpCgkgICAgLnN0eWxlKCJvcGFjaXR5IiwgMCkKCSAgICAudHJhbnNpdGlvbigpLmR1cmF0aW9uKGR1cmF0aW9uKQoJICAgIC5zdHlsZSgib3BhY2l0eSIsIDEpOwogICAgfQoKICAgIAp9CgoKLy8gTW92ZSBjb2xvciBsZWdlbmQgb24gcmVzaXplCmZ1bmN0aW9uIG1vdmVfY29sb3JfbGVnZW5kIChsZWdlbmQsIGRpbXMsIGR1cmF0aW9uKSB7CiAgICBsZWdlbmQuc2VsZWN0KCIuY29sb3ItbGVnZW5kLWxhYmVsIikKICAgIAkudHJhbnNpdGlvbigpLmR1cmF0aW9uKGR1cmF0aW9uKQoJLmF0dHIoInRyYW5zZm9ybSIsICJ0cmFuc2xhdGUoIiArIGRpbXMubGVnZW5kX3ggKyAiLCIgKyBkaW1zLm1hcmdpbnMubGVnZW5kX3RvcCArICIpIik7CiAgICBsZWdlbmQuc2VsZWN0KCIuY29sb3ItbGVnZW5kIikKICAgIAkudHJhbnNpdGlvbigpLmR1cmF0aW9uKGR1cmF0aW9uKQoJLmF0dHIoInRyYW5zZm9ybSIsICJ0cmFuc2xhdGUoIiArIGRpbXMubGVnZW5kX3ggKyAiLCIgKyAoZGltcy5tYXJnaW5zLmxlZ2VuZF90b3AgKyAxMikgKyAiKSIpOwp9CgovLyBNb3ZlIHN5bWJvbCBsZWdlbmQgb24gcmVzaXplCmZ1bmN0aW9uIG1vdmVfc3ltYm9sX2xlZ2VuZCAobGVnZW5kLCBkaW1zLCBkdXJhdGlvbikgewogICAgbGVnZW5kLnNlbGVjdCgiLnN5bWJvbC1sZWdlbmQtbGFiZWwiKQogICAgCS50cmFuc2l0aW9uKCkuZHVyYXRpb24oZHVyYXRpb24pCgkuYXR0cigidHJhbnNmb3JtIiwgInRyYW5zbGF0ZSgiICsgZGltcy5sZWdlbmRfeCArICIsIiArIGRpbXMubWFyZ2lucy5zeW1ib2xfbGVnZW5kX3RvcCArICIpIik7CiAgICBsZWdlbmQuc2VsZWN0KCIuc3ltYm9sLWxlZ2VuZCIpCiAgICAJLnRyYW5zaXRpb24oKS5kdXJhdGlvbihkdXJhdGlvbikKCS5hdHRyKCJ0cmFuc2Zvcm0iLCAidHJhbnNsYXRlKCIgKyAoZGltcy5sZWdlbmRfeCArIDgpICsgIiwiICsgKGRpbXMubWFyZ2lucy5zeW1ib2xfbGVnZW5kX3RvcCArIDE2KSArICIpIik7Cn0KCi8vIE1vdmUgc2l6ZSBsZWdlbmQgb24gcmVzaXplCmZ1bmN0aW9uIG1vdmVfc2l6ZV9sZWdlbmQgKGxlZ2VuZCwgZGltcywgZHVyYXRpb24pIHsKICAgIGxlZ2VuZC5zZWxlY3QoIi5zaXplLWxlZ2VuZC1sYWJlbCIpCiAgICAJLnRyYW5zaXRpb24oKS5kdXJhdGlvbihkdXJhdGlvbikKCS5hdHRyKCJ0cmFuc2Zvcm0iLCAidHJhbnNsYXRlKCIgKyBkaW1zLmxlZ2VuZF94ICsgIiwiICsgZGltcy5tYXJnaW5zLnNpemVfbGVnZW5kX3RvcCArICIpIik7CiAgICBsZWdlbmQuc2VsZWN0KCIuc2l6ZS1sZWdlbmQiKQogICAgCS50cmFuc2l0aW9uKCkuZHVyYXRpb24oZHVyYXRpb24pCgkuYXR0cigidHJhbnNmb3JtIiwgInRyYW5zbGF0ZSgiICsgKGRpbXMubGVnZW5kX3ggKyA4KSArICIsIiArIChkaW1zLm1hcmdpbnMuc2l6ZV9sZWdlbmRfdG9wICsgMTQpICsgIikiKTsKfQoKCi8vIFJlbW92ZSBjb2xvciBsZWdlbmQKZnVuY3Rpb24gcmVtb3ZlX2NvbG9yX2xlZ2VuZCAobGVnZW5kKSB7CiAgICBsZWdlbmQuc2VsZWN0QWxsKCIuY29sb3ItbGVnZW5kLWxhYmVsLCAuY29sb3ItbGVnZW5kIikKICAgIAkuc3R5bGUoIm9wYWNpdHkiLCAiMCIpCgkucmVtb3ZlKCk7Cn0KCi8vIFJlbW92ZSBzeW1ib2wgbGVnZW5kCmZ1bmN0aW9uIHJlbW92ZV9zeW1ib2xfbGVnZW5kIChsZWdlbmQpIHsKICAgIGxlZ2VuZC5zZWxlY3RBbGwoIi5zeW1ib2wtbGVnZW5kLWxhYmVsLCAuc3ltYm9sLWxlZ2VuZCIpCgkuc3R5bGUoIm9wYWNpdHkiLCAiMCIpCgkucmVtb3ZlKCk7Cn0KCi8vIFJlbW92ZSBzaXplIGxlZ2VuZApmdW5jdGlvbiByZW1vdmVfc2l6ZV9sZWdlbmQgKGxlZ2VuZCkgewogICAgbGVnZW5kLnNlbGVjdEFsbCgiLnNpemUtbGVnZW5kLWxhYmVsLCAuc2l6ZS1sZWdlbmQiKQogICAgCS5zdHlsZSgib3BhY2l0eSIsICIwIikKCS5yZW1vdmUoKTsKfQo="></script>
<script src="data:application/x-javascript;base64,Ly8gTGFzc28gZnVuY3Rpb25zIHRvIGV4ZWN1dGUgd2hpbGUgbGFzc29pbmcKdmFyIGxhc3NvX3N0YXJ0ID0gZnVuY3Rpb24obGFzc28pIHsKICAgIGxhc3NvLml0ZW1zKCkKICAgICAgICAuZWFjaChmdW5jdGlvbihkKXsKCSAgICBpZiAoZDMuc2VsZWN0KHRoaXMpLmNsYXNzZWQoJ2RvdCcpKSB7CiAgICAgICAgICAgICAgICBkLnNjYXR0ZXJEM19sYXNzb19kb3Rfc3Ryb2tlID0gZC5zY2F0dGVyRDNfbGFzc29fZG90X3N0cm9rZSA/IGQuc2NhdHRlckQzX2xhc3NvX2RvdF9zdHJva2UgOiBkMy5zZWxlY3QodGhpcykuc3R5bGUoInN0cm9rZSIpOwogICAgICAgICAgICAgICAgZC5zY2F0dGVyRDNfbGFzc29fZG90X2ZpbGwgPSBkLnNjYXR0ZXJEM19sYXNzb19kb3RfZmlsbCA/IGQuc2NhdHRlckQzX2xhc3NvX2RvdF9maWxsIDogZDMuc2VsZWN0KHRoaXMpLnN0eWxlKCJmaWxsIik7CiAgICAgICAgICAgICAgICBkLnNjYXR0ZXJEM19sYXNzb19kb3Rfb3BhY2l0eSA9IGQuc2NhdHRlckQzX2xhc3NvX2RvdF9vcGFjaXR5ID8gZC5zY2F0dGVyRDNfbGFzc29fZG90X29wYWNpdHkgOiBkMy5zZWxlY3QodGhpcykuc3R5bGUoIm9wYWNpdHkiKTsKCSAgICB9CgkgICAgaWYgKGQzLnNlbGVjdCh0aGlzKS5jbGFzc2VkKCdhcnJvdycpKSB7CiAgICAgICAgICAgICAgICBkLnNjYXR0ZXJEM19sYXNzb19hcnJvd19zdHJva2UgPSBkLnNjYXR0ZXJEM19sYXNzb19hcnJvd19zdHJva2UgPyBkLnNjYXR0ZXJEM19sYXNzb19hcnJvd19zdHJva2UgOiBkMy5zZWxlY3QodGhpcykuc3R5bGUoInN0cm9rZSIpOwogICAgICAgICAgICAgICAgZC5zY2F0dGVyRDNfbGFzc29fYXJyb3dfZmlsbCA9IGQuc2NhdHRlckQzX2xhc3NvX2Fycm93X2ZpbGwgPyBkLnNjYXR0ZXJEM19sYXNzb19hcnJvd19maWxsIDogZDMuc2VsZWN0KHRoaXMpLnN0eWxlKCJmaWxsIik7CiAgICAgICAgICAgICAgICBkLnNjYXR0ZXJEM19sYXNzb19hcnJvd19vcGFjaXR5ID0gZC5zY2F0dGVyRDNfbGFzc29fYXJyb3dfb3BhY2l0eSA/IGQuc2NhdHRlckQzX2xhc3NvX2Fycm93X29wYWNpdHkgOiBkMy5zZWxlY3QodGhpcykuc3R5bGUoIm9wYWNpdHkiKTsKCSAgICB9CgkgICAgaWYgKGQzLnNlbGVjdCh0aGlzKS5jbGFzc2VkKCdwb2ludC1sYWJlbCcpKSB7CiAgICAgICAgICAgICAgICBkLnNjYXR0ZXJEM19sYXNzb190ZXh0X3N0cm9rZSA9IGQuc2NhdHRlckQzX2xhc3NvX3RleHRfc3Ryb2tlID8gZC5zY2F0dGVyRDNfbGFzc29fdGV4dF9zdHJva2UgOiBkMy5zZWxlY3QodGhpcykuc3R5bGUoInN0cm9rZSIpOwogICAgICAgICAgICAgICAgZC5zY2F0dGVyRDNfbGFzc29fdGV4dF9maWxsID0gZC5zY2F0dGVyRDNfbGFzc29fdGV4dF9maWxsID8gZC5zY2F0dGVyRDNfbGFzc29fdGV4dF9maWxsIDogZDMuc2VsZWN0KHRoaXMpLnN0eWxlKCJmaWxsIik7CiAgICAgICAgICAgICAgICBkLnNjYXR0ZXJEM19sYXNzb190ZXh0X29wYWNpdHkgPSBkLnNjYXR0ZXJEM19sYXNzb190ZXh0X29wYWNpdHkgPyBkLnNjYXR0ZXJEM19sYXNzb190ZXh0X29wYWNpdHkgOiBkMy5zZWxlY3QodGhpcykuc3R5bGUoIm9wYWNpdHkiKTsKCSAgICB9CiAgICAgICAgfSkKCSAgICAuc3R5bGUoImZpbGwiLCBudWxsKSAvLyBjbGVhciBhbGwgb2YgdGhlIGZpbGxzCiAgICAgICAgLnN0eWxlKCJvcGFjaXR5IiwgbnVsbCkgLy8gY2xlYXIgYWxsIG9mIHRoZSBvcGFjaXRpZXMKICAgICAgICAuc3R5bGUoInN0cm9rZSIsIG51bGwpIC8vIGNsZWFyIGFsbCBvZiB0aGUgc3Ryb2tlcwogICAgICAgIC5jbGFzc2VkKCJub3QtcG9zc2libGUtbGFzc28iLCB0cnVlKQogICAgICAgIC5jbGFzc2VkKCJzZWxlY3RlZC1sYXNzbyBub3Qtc2VsZWN0ZWQtbGFzc28iLCBmYWxzZSk7IC8vIHN0eWxlIGFzIG5vdCBwb3NzaWJsZQp9OwoKdmFyIGxhc3NvX2RyYXcgPSBmdW5jdGlvbihsYXNzbykgewogICAgLy8gU3R5bGUgdGhlIHBvc3NpYmxlIGRvdHMKICAgIGxhc3NvLml0ZW1zKCkKICAgICAgICAuZmlsdGVyKGZ1bmN0aW9uKGQpIHtyZXR1cm4gZC5wb3NzaWJsZSA9PT0gdHJ1ZTt9KQogICAgICAgIC5jbGFzc2VkKCJub3QtcG9zc2libGUtbGFzc28iLCBmYWxzZSkKICAgICAgICAuY2xhc3NlZCgicG9zc2libGUtbGFzc28iLCB0cnVlKTsKICAgIC8vIFN0eWxlIHRoZSBub3QgcG9zc2libGUgZG90CiAgICBsYXNzby5pdGVtcygpLmZpbHRlcihmdW5jdGlvbihkKSB7cmV0dXJuIGQucG9zc2libGUgPT09IGZhbHNlO30pCiAgICAgICAgLmNsYXNzZWQoIm5vdC1wb3NzaWJsZS1sYXNzbyIsIHRydWUpCiAgICAgICAgLmNsYXNzZWQoInBvc3NpYmxlLWxhc3NvIiwgZmFsc2UpOwp9OwoKdmFyIGxhc3NvX2VuZCA9IGZ1bmN0aW9uKGxhc3NvLCBzdmcsIHNldHRpbmdzLCBzY2FsZXMsIHpvb20pIHsKICAgIGxhc3NvX29mZihzdmcsIHNldHRpbmdzLCB6b29tKTsKICAgIHZhciBzb21lX3NlbGVjdGVkID0gZmFsc2U7CiAgICBpZihsYXNzby5pdGVtcygpLmZpbHRlcihmdW5jdGlvbihkKSB7cmV0dXJuIGQuc2VsZWN0ZWQgPT09IHRydWU7fSkuc2l6ZSgpICE9PSAwKXsKICAgICAgICBzb21lX3NlbGVjdGVkID0gdHJ1ZTsKICAgIH0KICAgIC8vIFJlc2V0IHRoZSBjb2xvciBvZiBhbGwgZG90cwogICAgbGFzc28uaXRlbXMoKQogICAgICAgIC5zdHlsZSgiZmlsbCIsIGZ1bmN0aW9uKGQpIHsKCSAgICBpZiAoZDMuc2VsZWN0KHRoaXMpLmNsYXNzZWQoJ3BvaW50LWxhYmVsJykpIHsgcmV0dXJuIGQuc2NhdHRlckQzX2xhc3NvX3RleHRfZmlsbDsgfQoJICAgIGlmIChkMy5zZWxlY3QodGhpcykuY2xhc3NlZCgnZG90JykpIHsgcmV0dXJuIGQuc2NhdHRlckQzX2xhc3NvX2RvdF9maWxsOyB9CgkgICAgaWYgKGQzLnNlbGVjdCh0aGlzKS5jbGFzc2VkKCdhcnJvdycpKSB7IHJldHVybiBkLnNjYXR0ZXJEM19sYXNzb19hcnJvd19maWxsOyB9CgkgICAgcmV0dXJuIG51bGw7CiAgICAgICAgfSkKICAgICAgICAuc3R5bGUoIm9wYWNpdHkiLCBmdW5jdGlvbihkKSB7CgkgICAgaWYgKGQzLnNlbGVjdCh0aGlzKS5jbGFzc2VkKCdwb2ludC1sYWJlbCcpKSB7IHJldHVybiBkLnNjYXR0ZXJEM19sYXNzb190ZXh0X29wYWNpdHk7IH0KCSAgICBpZiAoZDMuc2VsZWN0KHRoaXMpLmNsYXNzZWQoJ2RvdCcpKSB7IHJldHVybiBkLnNjYXR0ZXJEM19sYXNzb19kb3Rfb3BhY2l0eTsgfQoJICAgIGlmIChkMy5zZWxlY3QodGhpcykuY2xhc3NlZCgnYXJyb3cnKSkgeyByZXR1cm4gZC5zY2F0dGVyRDNfbGFzc29fYXJyb3dfb3BhY2l0eTsgfQoJICAgIHJldHVybiBudWxsOwogICAgICAgIH0pCiAgICAgICAgLnN0eWxlKCJzdHJva2UiLCBmdW5jdGlvbihkKSB7CgkgICAgaWYgKGQzLnNlbGVjdCh0aGlzKS5jbGFzc2VkKCdwb2ludC1sYWJlbCcpKSB7IHJldHVybiBkLnNjYXR0ZXJEM19sYXNzb190ZXh0X3N0cm9rZTsgfQoJICAgIGlmIChkMy5zZWxlY3QodGhpcykuY2xhc3NlZCgnZG90JykpIHsgcmV0dXJuIGQuc2NhdHRlckQzX2xhc3NvX2RvdF9zdHJva2U7IH0KCSAgICBpZiAoZDMuc2VsZWN0KHRoaXMpLmNsYXNzZWQoJ2Fycm93JykpIHsgcmV0dXJuIGQuc2NhdHRlckQzX2xhc3NvX2Fycm93X3N0cm9rZTsgfQoJICAgIHJldHVybiBudWxsOwogICAgICAgIH0pOwogICAgaWYgKHNvbWVfc2VsZWN0ZWQpIHsKICAgICAgICAvLyBTdHlsZSB0aGUgc2VsZWN0ZWQgZG90cwogICAgICAgIHZhciBzZWwgPSBsYXNzby5pdGVtcygpLmZpbHRlcihmdW5jdGlvbihkKSB7cmV0dXJuIGQuc2VsZWN0ZWQgPT09IHRydWU7fSkKCSAgICAuY2xhc3NlZCgibm90LXBvc3NpYmxlLWxhc3NvIHBvc3NpYmxlLWxhc3NvIiwgZmFsc2UpCgkgICAgLmNsYXNzZWQoInNlbGVjdGVkLWxhc3NvIiwgdHJ1ZSkKCSAgICAuc3R5bGUoIm9wYWNpdHkiLCAiMSIpOwoKICAgICAgICAvLyBSZXNldCB0aGUgc3R5bGUgb2YgdGhlIG5vdCBzZWxlY3RlZCBkb3RzCiAgICAgICAgbGFzc28uaXRlbXMoKS5maWx0ZXIoZnVuY3Rpb24oZCkge3JldHVybiBkLnNlbGVjdGVkID09PSBmYWxzZTt9KQoJICAgIC5jbGFzc2VkKCJub3QtcG9zc2libGUtbGFzc28gcG9zc2libGUtbGFzc28iLCBmYWxzZSkKCSAgICAuY2xhc3NlZCgibm90LXNlbGVjdGVkLWxhc3NvIiwgdHJ1ZSkKCSAgICAuc3R5bGUoIm9wYWNpdHkiLCBmdW5jdGlvbihkKSB7IHJldHVybiBzZXR0aW5ncy5wb2ludF9vcGFjaXR5IC8gNzsgfSk7CgogICAgICAgIC8vIENhbGwgY3VzdG9tIGNhbGxiYWNrIGZ1bmN0aW9uCiAgICAgICAgdmFyIGNhbGxiYWNrX3NlbCA9IHN2Zy5zZWxlY3RBbGwoIi5kb3QsIC5hcnJvdyIpLmZpbHRlcihmdW5jdGlvbihkKSB7cmV0dXJuIGQuc2VsZWN0ZWQgPT09IHRydWU7fSk7CiAgICAgICAgaWYgKHR5cGVvZiBzZXR0aW5ncy5sYXNzb19jYWxsYmFjayA9PT0gJ2Z1bmN0aW9uJykgc2V0dGluZ3MubGFzc29fY2FsbGJhY2soY2FsbGJhY2tfc2VsKTsKICAgIH0KICAgIGVsc2UgewogICAgICAgIGxhc3NvLml0ZW1zKCkKCSAgICAuY2xhc3NlZCgibm90LXBvc3NpYmxlLWxhc3NvIHBvc3NpYmxlLWxhc3NvIG5vdC1zZWxlY3RlZC1sYXNzbyBzZWxlY3RlZC1sYXNzbyIsIGZhbHNlKQoJICAgIC5zdHlsZSgib3BhY2l0eSIsIGZ1bmN0aW9uKGQpIHsKICAgICAgICAgICAgICAgIGlmIChkMy5zZWxlY3QodGhpcykuY2xhc3NlZCgncG9pbnQtbGFiZWwnKSkge3JldHVybiAxO307CgkJcmV0dXJuIGQub3BhY2l0eV92YXIgIT09IHVuZGVmaW5lZCA/IHNjYWxlcy5vcGFjaXR5KGQub3BhY2l0eV92YXIpIDogc2V0dGluZ3MucG9pbnRfb3BhY2l0eTsKCSAgICB9KTsKICAgIH0KfTsKCgovLyBUb2dnbGUgbGFzc28gb24gLyB6b29tIG9mZgpmdW5jdGlvbiBsYXNzb19vbihzdmcsIHNldHRpbmdzLCBzY2FsZXMsIHpvb20pIHsKICAgIHZhciByb290ID0gc3ZnLnNlbGVjdCgiLnJvb3QiKTsKICAgIHZhciBjaGFydF9ib2R5ID0gc3ZnLnNlbGVjdCgiLmNoYXJ0LWJvZHkiKTsKICAgIAogICAgdmFyIGxhc3NvX2NsYXNzZXMgPSAiLmRvdCwgLmFycm93LCAucG9pbnQtbGFiZWwiOwogICAgLy8gRGlzYWJsZSB6b29tIGJlaGF2aW9yCiAgICByb290Lm9uKCIuem9vbSIsIG51bGwpOwogICAgLy8gRW5hYmxlIGxhc3NvCiAgICB2YXIgbGFzc28gPSBkMy5sYXNzbygpCgkuY2xvc2VQYXRoRGlzdGFuY2UoMjAwMCkgICAvLyBtYXggZGlzdGFuY2UgZm9yIHRoZSBsYXNzbyBsb29wIHRvIGJlIGNsb3NlZAoJLmNsb3NlUGF0aFNlbGVjdCh0cnVlKSAgICAgLy8gY2FuIGl0ZW1zIGJlIHNlbGVjdGVkIGJ5IGNsb3NpbmcgdGhlIHBhdGg/CgkuaG92ZXJTZWxlY3QodHJ1ZSkgICAgICAgICAvLyBjYW4gaXRlbXMgYnkgc2VsZWN0ZWQgYnkgaG92ZXJpbmcgb3ZlciB0aGVtPwogICAgICAgIC5hcmVhKHJvb3QpCiAgICAgICAgLml0ZW1zKGNoYXJ0X2JvZHkuc2VsZWN0QWxsKGxhc3NvX2NsYXNzZXMpKQogICAgCS5vbigic3RhcnQiLCBmdW5jdGlvbigpIHsgbGFzc29fc3RhcnQobGFzc28pOyB9KSAgIC8vIGxhc3NvIHN0YXJ0IGZ1bmN0aW9uCgkub24oImRyYXciLCBmdW5jdGlvbigpIHsgbGFzc29fZHJhdyhsYXNzbyk7IH0pICAgICAvLyBsYXNzbyBkcmF3IGZ1bmN0aW9uCgkub24oImVuZCIsIGZ1bmN0aW9uKCkgeyBsYXNzb19lbmQobGFzc28sIHN2Zywgc2V0dGluZ3MsIHNjYWxlcywgem9vbSk7IH0pOyAgICAgIC8vIGxhc3NvIGVuZCBmdW5jdGlvbgogICAgcm9vdC5jYWxsKGxhc3NvKTsKCiAgICAvLyBDaGFuZ2UgY3Vyc29yIHN0eWxlCiAgICByb290LnN0eWxlKCJjdXJzb3IiLCAiY3Jvc3NoYWlyIik7CiAgICAvLyBDaGFuZ2UgdG9nZ2xlcnMgc3RhdGUKICAgIHZhciBtZW51X2VudHJ5ID0gZDMuc2VsZWN0KCIjc2NhdHRlckQzLW1lbnUtIiArIHNldHRpbmdzLmh0bWxfaWQgKyAiIC5sYXNzby1lbnRyeSIpOwogICAgdmFyIGN1c3RvbV9lbnRyeSA9IGQzLnNlbGVjdCgiIyIgKyBzZXR0aW5ncy5kb21faWRfbGFzc29fdG9nZ2xlKTsKICAgIGlmICghbWVudV9lbnRyeS5lbXB0eSgpKSB7CiAgICAgICAgbWVudV9lbnRyeS5jbGFzc2VkKCJhY3RpdmUiLCB0cnVlKQoJICAgIC5odG1sKCJUb2dnbGUgbGFzc28gb2ZmIik7CiAgICB9CiAgICBpZiAoIWN1c3RvbV9lbnRyeS5lbXB0eSgpKSB7IGN1c3RvbV9lbnRyeS5jbGFzc2VkKCJhY3RpdmUiLCB0cnVlKTsgfQp9CgovLyBUb2dnbGUgbGFzc28gb2ZmIC8gem9vbSBvbgpmdW5jdGlvbiBsYXNzb19vZmYoc3ZnLCBzZXR0aW5ncywgem9vbSkgewogICAgdmFyIHJvb3QgPSBzdmcuc2VsZWN0KCIucm9vdCIpOwogICAgLy8gRGlzYWJsZSBsYXNzbwogICAgcm9vdC5vbigiLmRyYWdzdGFydCIsIG51bGwpOwogICAgcm9vdC5vbigiLmRyYWciLCBudWxsKTsKICAgIHJvb3Qub24oIi5kcmFnZW5kIiwgbnVsbCk7CiAgICAvLyBFbmFibGUgem9vbQogICAgcm9vdC5jYWxsKHpvb20pOwogICAgLy8gQ2hhbmdlIGN1cnNvciBzdHlsZQogICAgcm9vdC5zdHlsZSgiY3Vyc29yIiwgIm1vdmUiKTsKICAgIC8vIENoYW5nZSB0b2dnbGVycyBzdGF0ZQogICAgdmFyIG1lbnVfZW50cnkgPSBkMy5zZWxlY3QoIiNzY2F0dGVyRDMtbWVudS0iICsgc2V0dGluZ3MuaHRtbF9pZCArICIgLmxhc3NvLWVudHJ5Iik7CiAgICB2YXIgY3VzdG9tX2VudHJ5ID0gZDMuc2VsZWN0KCIjIiArIHNldHRpbmdzLmRvbV9pZF9sYXNzb190b2dnbGUpOwogICAgaWYgKCFtZW51X2VudHJ5LmVtcHR5KCkpIHsKICAgICAgICBtZW51X2VudHJ5LmNsYXNzZWQoImFjdGl2ZSIsIGZhbHNlKQoJICAgIC5odG1sKCJUb2dnbGUgbGFzc28gb24iKTsKICAgIH0KICAgIGlmICghY3VzdG9tX2VudHJ5LmVtcHR5KCkpIHsgY3VzdG9tX2VudHJ5LmNsYXNzZWQoImFjdGl2ZSIsIGZhbHNlKTsgfQp9CgovLyBUb2dnbGUgbGFzc28gc3RhdGUgd2hlbiBlbGVtZW50IGNsaWNrZWQKZnVuY3Rpb24gbGFzc29fdG9nZ2xlKHN2Zywgc2V0dGluZ3MsIHNjYWxlcywgem9vbSkgewogICAgdmFyIG1lbnVfZW50cnkgPSBkMy5zZWxlY3QoIiNzY2F0dGVyRDMtbWVudS0iICsgc2V0dGluZ3MuaHRtbF9pZCArICIgLmxhc3NvLWVudHJ5Iik7CiAgICB2YXIgY3VzdG9tX2VudHJ5ID0gZDMuc2VsZWN0KCIjIiArIHNldHRpbmdzLmRvbV9pZF9sYXNzb190b2dnbGUpOwogICAgaWYgKHNldHRpbmdzLmxhc3NvICYmCiAgICAgICAgKCghbWVudV9lbnRyeS5lbXB0eSgpICYmIG1lbnVfZW50cnkuY2xhc3NlZCgiYWN0aXZlIikpIHx8CiAgICAgICAgICghY3VzdG9tX2VudHJ5LmVtcHR5KCkgJiYgY3VzdG9tX2VudHJ5LmNsYXNzZWQoImFjdGl2ZSIpKSkpIHsKICAgICAgICBsYXNzb19vZmYoc3ZnLCBzZXR0aW5ncywgem9vbSk7CiAgICB9CiAgICBlbHNlIHsKICAgICAgICBsYXNzb19vbihzdmcsIHNldHRpbmdzLCBzY2FsZXMsIHpvb20pOwogICAgfQp9Cg=="></script>
<script src="data:application/x-javascript;base64,Ly8gRXhwb3J0IHRvIFNWRyBmdW5jdGlvbgpmdW5jdGlvbiBleHBvcnRfc3ZnKHNlbCwgc3ZnLCBzZXR0aW5ncykgewogICAgdmFyIHN2Z19jb250ZW50ID0gc3ZnCiAgICAgICAgLmF0dHIoInhtbG5zIiwgImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIikKICAgICAgICAuYXR0cigidmVyc2lvbiIsIDEuMSkKICAgICAgICAubm9kZSgpLnBhcmVudE5vZGUuaW5uZXJIVE1MOwogICAgLy8gRGlydHkgZGlydHkgZGlydHkuLi4KICAgIHN2Z19jb250ZW50ID0gc3ZnX2NvbnRlbnQucmVwbGFjZSgvPGcgY2xhc3M9ImdlYXItbWVudVtcc1xTXSo/PFwvZz4vLCAnJyk7CiAgICBzdmdfY29udGVudCA9IHN2Z19jb250ZW50LnJlcGxhY2UoLzx1bCBjbGFzcz0ic2NhdHRlckQzLW1lbnVbXHNcU10qPzxcL3VsPi8sICcnKTsKICAgIHN2Z19jb250ZW50ID0gc3ZnX2NvbnRlbnQucmVwbGFjZSgvPGcgY2xhc3M9ImNhcHRpb24taWNvbltcc1xTXSo/PFwvZz4vLCAnJyk7CiAgICBzdmdfY29udGVudCA9IHN2Z19jb250ZW50LnJlcGxhY2UoLzxkaXYgY2xhc3M9InNjYXR0ZXJEMy1jYXB0aW9uW1xzXFNdKj88XC9kaXY+LywgJycpOwogICAgdmFyIGltYWdlX2RhdGEgPSAiZGF0YTppbWFnZS9vY3RldC1zdHJlYW07YmFzZTY0LCIgKyB3aW5kb3cuYnRvYSh1bmVzY2FwZShlbmNvZGVVUklDb21wb25lbnQoc3ZnX2NvbnRlbnQpKSk7CiAgICBkMy5zZWxlY3Qoc2VsKQogICAgICAgIC5hdHRyKCJkb3dubG9hZCIsIHNldHRpbmdzLmh0bWxfaWQgKyAiLnN2ZyIpCiAgICAgICAgLmF0dHIoImhyZWYiLCBpbWFnZV9kYXRhKTsKfQoKLy8gRnVuY3Rpb24gdG8gZXhwb3J0IGN1c3RvbSBsYWJlbHMgcG9zaXRpb24gdG8gQ1NWIGZpbGUKZnVuY3Rpb24gZXhwb3J0X2xhYmVsc19wb3NpdGlvbihzZWwsIGRhdGEsIHNldHRpbmdzLCBzY2FsZXMpIHsKICAgIHZhciBsaW5lc19kYXRhID0gWyJsYWIsbGFiX3gsbGFiX3kiXTsKICAgIGRhdGEuZm9yRWFjaChmdW5jdGlvbihkLCBpbmRleCl7CiAgICAgICAgdmFyIGxhYnggPSBkLng7CiAgICAgICAgaWYgKGQubGFiX2R4ICE9PSB1bmRlZmluZWQpIHsKCSAgICBsYWJ4ID0gZC54ICsgc2NhbGVzLnguaW52ZXJ0KGQubGFiX2R4KSAtIHNjYWxlcy54LmRvbWFpbigpWzBdOwogICAgICAgIH0KICAgICAgICB2YXIgc2l6ZSA9IChkLnNpemVfdmFyID09PSB1bmRlZmluZWQpID8gc2V0dGluZ3MucG9pbnRfc2l6ZSA6IHNjYWxlcy5zaXplKGQuc2l6ZV92YXIpOwogICAgICAgIHZhciBvZmZzZXRfeSA9ICgtTWF0aC5zcXJ0KHNpemUpIC8gMikgLSA2OwogICAgICAgIGlmIChkLmxhYl9keSAhPT0gdW5kZWZpbmVkKSB7CgkgICAgb2Zmc2V0X3kgPSBkLmxhYl9keTsKICAgICAgICB9CiAgICAgICAgdmFyIGxhYnkgPSBkLnkgKyBzY2FsZXMueS5pbnZlcnQob2Zmc2V0X3kpIC0gc2NhbGVzLnkuZG9tYWluKClbMV07CiAgICAgICAgdmFyIHRoaXNfbGluZSA9IGQubGFiICsgIiwiICsgbGFieCArICIsIiArIGxhYnk7CiAgICAgICAgbGluZXNfZGF0YS5wdXNoKHRoaXNfbGluZSk7CiAgICB9KTsKICAgIHZhciBjc3ZfY29udGVudCA9ICJkYXRhOnRleHQvY3N2O2Jhc2U2NCwiICsgYnRvYShsaW5lc19kYXRhLmpvaW4oIlxuIikpOwogICAgZDMuc2VsZWN0KHNlbCkKICAgICAgICAuYXR0cigiZG93bmxvYWQiLCBzZXR0aW5ncy5odG1sX2lkICsgIl9sYWJlbHMuY3N2IikKICAgICAgICAuYXR0cigiaHJlZiIsIGVuY29kZVVSSShjc3ZfY29udGVudCkpOwp9Cg=="></script>
<script src="data:application/x-javascript;base64,ZnVuY3Rpb24gc2NhdHRlckQzKCkgewoKICAgIHZhciB3aWR0aCA9IDYwMCwgLy8gZGVmYXVsdCB3aWR0aAoJaGVpZ2h0ID0gNjAwLCAvLyBkZWZhdWx0IGhlaWdodAoJZGltcyA9IHt9LAoJc2V0dGluZ3MgPSB7fSwKCXNjYWxlcyA9IHt9LAoJZGF0YSA9IFtdLAoJc3ZnLAoJem9vbSwgZHJhZzsKCiAgICAvLyBab29tIGJlaGF2aW9yCiAgICB6b29tID0gZDMuem9vbSgpCiAgICAgICAgLnNjYWxlRXh0ZW50KFswLCAzMl0pCiAgICAgICAgLm9uKCJ6b29tIiwgem9vbWVkKTsKCiAgICAvLyBab29tIGZ1bmN0aW9uCiAgICBmdW5jdGlvbiB6b29tZWQocmVzZXQpIHsKCXZhciByb290ID0gc3ZnLnNlbGVjdCgiLnJvb3QiKTsKCWlmICghc2V0dGluZ3MueF9jYXRlZ29yaWNhbCkgewogICAgICAgICAgICBzY2FsZXMueCA9IGQzLmV2ZW50LnRyYW5zZm9ybS5yZXNjYWxlWChzY2FsZXMueF9vcmlnKTsKICAgICAgICAgICAgc2NhbGVzLnhBeGlzID0gc2NhbGVzLnhBeGlzLnNjYWxlKHNjYWxlcy54KTsKICAgICAgICAgICAgcm9vdC5zZWxlY3QoIi54LmF4aXMiKS5jYWxsKHNjYWxlcy54QXhpcyk7Cgl9CglpZiAoIXNldHRpbmdzLnlfY2F0ZWdvcmljYWwpIHsKICAgICAgICAgICAgc2NhbGVzLnkgPSBkMy5ldmVudC50cmFuc2Zvcm0ucmVzY2FsZVkoc2NhbGVzLnlfb3JpZyk7CiAgICAgICAgICAgIHNjYWxlcy55QXhpcyA9IHNjYWxlcy55QXhpcy5zY2FsZShzY2FsZXMueSk7CiAgICAgICAgICAgIHJvb3Quc2VsZWN0KCIueS5heGlzIikuY2FsbChzY2FsZXMueUF4aXMpOwoJfQoJdmFyIGNoYXJ0X2JvZHkgPSBzdmcuc2VsZWN0KCIuY2hhcnQtYm9keSIpOwogICAgICAgIGNoYXJ0X2JvZHkuc2VsZWN0QWxsKCIuZG90LCAucG9pbnQtbGFiZWwiKQogICAgICAgICAgICAuYXR0cigidHJhbnNmb3JtIiwgZnVuY3Rpb24oZCkgeyByZXR1cm4gdHJhbnNsYXRpb24oZCwgc2NhbGVzKTsgfSk7CgljaGFydF9ib2R5LnNlbGVjdEFsbCgiLmxpbmUiKS5jYWxsKGZ1bmN0aW9uKHNlbCkgewoJICAgIGxpbmVfZm9ybWF0dGluZyhzZWwsIGRpbXMsIHNldHRpbmdzLCBzY2FsZXMpOwoJfSk7CiAgICAgICAgY2hhcnRfYm9keS5zZWxlY3RBbGwoIi5hcnJvdyIpLmNhbGwoZnVuY3Rpb24oc2VsKSB7IGRyYXdfYXJyb3coc2VsLCBzY2FsZXMpO30pOwogICAgICAgIGNoYXJ0X2JvZHkuc2VsZWN0QWxsKCIuZWxsaXBzZSIpLmNhbGwoZnVuY3Rpb24oc2VsKSB7IGVsbGlwc2VfZm9ybWF0dGluZyhzZWwsIHNldHRpbmdzLCBzY2FsZXMpO30pOwogICAgICAgIHN2Zy5zZWxlY3QoIi51bml0LWNpcmNsZSIpLmNhbGwoZnVuY3Rpb24oc2VsKSB7IGFkZF91bml0X2NpcmNsZShzZWwsIHNjYWxlcyk7IH0pOwogICAgICAgIGlmICh0eXBlb2Ygc2V0dGluZ3Muem9vbV9jYWxsYmFjayA9PT0gJ2Z1bmN0aW9uJykgewoJCSAgICAgIHNldHRpbmdzLnpvb21fY2FsbGJhY2soc2NhbGVzLnguZG9tYWluKClbMF0sIHNjYWxlcy54LmRvbWFpbigpWzFdLCBzY2FsZXMueS5kb21haW4oKVswXSwgc2NhbGVzLnkuZG9tYWluKClbMV0pOwoJCSAgICB9CiAgICB9CgogICAgLy8gUmVzZXQgem9vbSBmdW5jdGlvbgogICAgZnVuY3Rpb24gcmVzZXRfem9vbSgpIHsKCXZhciByb290ID0gc3ZnLnNlbGVjdCgiLnJvb3QiKTsKICAgICAgICByb290LnRyYW5zaXRpb24oKS5kdXJhdGlvbig3NTApLmNhbGwoem9vbS50cmFuc2Zvcm0sIGQzLnpvb21JZGVudGl0eSk7CiAgICB9CgoKICAgIC8vIFRleHQgbGFiZWxzIGRyYWdnaW5nIGZ1bmN0aW9uCiAgICB2YXIgZHJhZ2dpbmcgPSBmYWxzZTsKICAgIGRyYWcgPSBkMy5kcmFnKCkKCS5zdWJqZWN0KGZ1bmN0aW9uKGQsIGkpIHsKICAgICAgICAgICAgdmFyIHNpemUgPSAoZC5zaXplX3ZhciA9PT0gdW5kZWZpbmVkKSA/IHNldHRpbmdzLnBvaW50X3NpemUgOiBzY2FsZXMuc2l6ZShkLnNpemVfdmFyKTsKICAgICAgICAgICAgdmFyIGR4ID0gZ2V0X2xhYmVsX2R4KGQsIGksIHNldHRpbmdzLCBzY2FsZXMpOwogICAgICAgICAgICB2YXIgZHkgPSBnZXRfbGFiZWxfZHkoZCwgaSwgc2V0dGluZ3MsIHNjYWxlcyk7CiAgICAgICAgICAgIHJldHVybiB7eDpzY2FsZXMueChkLngpK2R4LCB5OnNjYWxlcy55KGQueSkrZHl9OwoJfSkKCS5vbignc3RhcnQnLCBmdW5jdGlvbihkLCBpKSB7CgkgICAgaWYgKCFkMy5ldmVudC5zb3VyY2VFdmVudC5zaGlmdEtleSkgewoJCWRyYWdnaW5nID0gdHJ1ZTsKCQlkMy5zZWxlY3QodGhpcykuc3R5bGUoJ2ZpbGwnLCAnIzAwMCcpOwoJCXZhciBjaGFydCA9IGQzLnNlbGVjdCh0aGlzKS5ub2RlKCkucGFyZW50Tm9kZTsKCQl2YXIgc2l6ZSA9IChkLnNpemVfdmFyID09PSB1bmRlZmluZWQpID8gc2V0dGluZ3MucG9pbnRfc2l6ZSA6IHNjYWxlcy5zaXplKGQuc2l6ZV92YXIpOwoJCXZhciBkeCA9IGdldF9sYWJlbF9keChkLCBpLCBzZXR0aW5ncywgc2NhbGVzKTsKCQl2YXIgZHkgPSBnZXRfbGFiZWxfZHkoZCwgaSwgc2V0dGluZ3MsIHNjYWxlcyk7CgkJZDMuc2VsZWN0KGNoYXJ0KS5hcHBlbmQoInN2ZzpsaW5lIikKCQkgICAgLmF0dHIoImlkIiwgInNjYXR0ZXJEMy1kcmFnLWxpbmUiKQoJCSAgICAuYXR0cigieDEiLCBzY2FsZXMueChkLngpKS5hdHRyKCJ4MiIsIHNjYWxlcy54KGQueCkgKyBkeCkKCQkgICAgLmF0dHIoInkxIiwgc2NhbGVzLnkoZC55KSkuYXR0cigieTIiLCBzY2FsZXMueShkLnkpICsgZHkpCgkJICAgIC5zdHlsZSgic3Ryb2tlIiwgIiMwMDAiKQoJCSAgICAuc3R5bGUoIm9wYWNpdHkiLCAwLjMpOwoJICAgIH0KCX0pCgkub24oJ2RyYWcnLCBmdW5jdGlvbihkKSB7CgkgICAgaWYgKGRyYWdnaW5nKSB7CgkJdmFyIGN4ID0gZDMuZXZlbnQueCAtIHNjYWxlcy54KGQueCk7CgkJdmFyIGN5ID0gZDMuZXZlbnQueSAtIHNjYWxlcy55KGQueSk7CgkJZDMuc2VsZWN0KHRoaXMpCgkJICAgIC5hdHRyKCdkeCcsIGN4ICsgInB4IikKCQkgICAgLmF0dHIoJ2R5JywgY3kgKyAicHgiKTsKCQlkMy5zZWxlY3QoIiNzY2F0dGVyRDMtZHJhZy1saW5lIikKCQkgICAgLmF0dHIoJ3gyJywgc2NhbGVzLngoZC54KSArIGN4KQoJCSAgICAuYXR0cigieTIiLCBzY2FsZXMueShkLnkpICsgY3kpOwoJCWQubGFiX2R4ID0gY3g7CgkJZC5sYWJfZHkgPSBjeTsKCSAgICB9Cgl9KQoJLm9uKCdlbmQnLCBmdW5jdGlvbihkKSB7CgkgICAgaWYgKGRyYWdnaW5nKXsKCQlkMy5zZWxlY3QodGhpcykuc3R5bGUoJ2ZpbGwnLCBzY2FsZXMuY29sb3IoZC5jb2xfdmFyKSk7CgkJZDMuc2VsZWN0KCIjc2NhdHRlckQzLWRyYWctbGluZSIpLnJlbW92ZSgpOwoJCWRyYWdnaW5nID0gZmFsc2U7CgkgICAgfQoJfSk7CgoKICAgIC8vIEtleSBmdW5jdGlvbiB0byBpZGVudGlmeSByb3dzIHdoZW4gaW50ZXJhY3RpdmVseSBmaWx0ZXJpbmcKICAgIGZ1bmN0aW9uIGtleShkKSB7CiAgICAgICAgcmV0dXJuIGQua2V5X3ZhcjsKICAgIH0KCiAgICAvLyBGaWx0ZXIgcG9pbnRzIGFuZCBhcnJvd3MgZGF0YQogICAgZnVuY3Rpb24gcG9pbnRfZmlsdGVyKGQpIHsKCXJldHVybiBkLnR5cGVfdmFyID09PSB1bmRlZmluZWQgfHwgZC50eXBlX3ZhciA9PSAicG9pbnQiOwogICAgfQogICAgZnVuY3Rpb24gYXJyb3dfZmlsdGVyKGQpIHsKCXJldHVybiBkLnR5cGVfdmFyICE9PSB1bmRlZmluZWQgJiYgZC50eXBlX3ZhciA9PSAiYXJyb3ciOwogICAgfQoKCiAgICBmdW5jdGlvbiBjaGFydChzZWxlY3Rpb24pIHsKICAgICAgICBzZWxlY3Rpb24uZWFjaChmdW5jdGlvbigpIHsKCiAgICAgICAgICAgIGRpbXMgPSBzZXR1cF9zaXplcyh3aWR0aCwgaGVpZ2h0LCBzZXR0aW5ncyk7CiAgICAgICAgICAgIHNjYWxlcyA9IHNldHVwX3NjYWxlcyhkaW1zLCBzZXR0aW5ncywgZGF0YSk7CgogICAgICAgICAgICAvLyBSb290IGNoYXJ0IGVsZW1lbnQgYW5kIGF4ZXMKICAgICAgICAgICAgdmFyIHJvb3QgPSBzdmcuYXBwZW5kKCJnIikKCQkuYXR0cigiY2xhc3MiLCAicm9vdCIpCgkJLmF0dHIoInRyYW5zZm9ybSIsICJ0cmFuc2xhdGUoIiArIGRpbXMubWFyZ2lucy5sZWZ0ICsgIiwiICsgZGltcy5tYXJnaW5zLnRvcCArICIpIikKCQkuY2FsbCh6b29tKTsKCiAgICAgICAgICAgIHJvb3QuYXBwZW5kKCJyZWN0IikKCQkuc3R5bGUoImZpbGwiLCAiI0ZGRiIpCgkJLmF0dHIoIndpZHRoIiwgZGltcy53aWR0aCkKCQkuYXR0cigiaGVpZ2h0IiwgZGltcy5oZWlnaHQpOwoKICAgICAgICAgICAgcm9vdC5jYWxsKGZ1bmN0aW9uKHNlbCkgeyBhZGRfYXhlcyhzZWwsIGRpbXMsIHNldHRpbmdzLCBzY2FsZXMpOyB9KTsKCiAgICAgICAgICAgIC8vIGNoYXJ0IGJvZHkKICAgICAgICAgICAgdmFyIGNoYXJ0X2JvZHkgPSByb290LmFwcGVuZCgic3ZnIikKCQkuYXR0cigiY2xhc3MiLCAiY2hhcnQtYm9keSIpCgkJLmF0dHIoIndpZHRoIiwgZGltcy53aWR0aCkKCQkuYXR0cigiaGVpZ2h0IiwgZGltcy5oZWlnaHQpOwoKCSAgICAvLyBsaW5lcwoJICAgIGlmIChzZXR0aW5ncy5saW5lcyAhPT0gbnVsbCkgewoJCXZhciBsaW5lcyA9IGNoYXJ0X2JvZHkKCQkgICAgLnNlbGVjdEFsbCgiLmxpbmVzIikKCQkgICAgLmRhdGEoSFRNTFdpZGdldHMuZGF0YWZyYW1lVG9EMyhzZXR0aW5ncy5saW5lcykpOwoJCWxpbmVzLmVudGVyKCkKCQkgICAgLmFwcGVuZCgicGF0aCIpCgkJICAgIC5jYWxsKGxpbmVfaW5pdCkKCQkgICAgLmNhbGwoZnVuY3Rpb24oc2VsKSB7CgkJCWxpbmVfZm9ybWF0dGluZyhzZWwsIGRpbXMsIHNldHRpbmdzLCBzY2FsZXMpOwoJCSAgICB9KTsKCSAgICB9CgoKICAgICAgICAgICAgLy8gVW5pdCBjaXJjbGUKICAgICAgICAgICAgaWYgKHNldHRpbmdzLnVuaXRfY2lyY2xlKSB7CgkJdmFyIHVuaXRfY2lyY2xlID0gY2hhcnRfYm9keS5hcHBlbmQoJ3N2ZzplbGxpcHNlJykKCQkgICAgLmF0dHIoJ2NsYXNzJywgJ3VuaXQtY2lyY2xlJykKCQkgICAgLmNhbGwoZnVuY3Rpb24oc2VsKSB7IGFkZF91bml0X2NpcmNsZShzZWwsIHNjYWxlcyk7IH0pOwogICAgICAgICAgICB9CgogICAgICAgICAgICAvLyBBZGQgcG9pbnRzCiAgICAgICAgICAgIHZhciBkb3QgPSBjaGFydF9ib2R5CgkJLnNlbGVjdEFsbCgiLmRvdCIpCgkJLmRhdGEoZGF0YS5maWx0ZXIocG9pbnRfZmlsdGVyKSwga2V5KTsKICAgICAgICAgICAgZG90LmVudGVyKCkKCQkuYXBwZW5kKCJwYXRoIikKCQkuY2FsbChmdW5jdGlvbihzZWwpIHsgZG90X2luaXQoc2VsLCBzZXR0aW5ncywgc2NhbGVzKTsgfSkKCQkuY2FsbChmdW5jdGlvbihzZWwpIHsgZG90X2Zvcm1hdHRpbmcoc2VsLCBzZXR0aW5ncywgc2NhbGVzKTsgfSk7CiAgICAgICAgICAgIC8vIEFkZCBhcnJvd3MKCSAgICBpZiAoIXNldHRpbmdzLmNvbF9jb250aW51b3VzKSBhZGRfYXJyb3dzX2RlZnMoc3ZnLCBzZXR0aW5ncywgc2NhbGVzKTsKICAgICAgICAgICAgdmFyIGFycm93ID0gY2hhcnRfYm9keQoJCS5zZWxlY3RBbGwoIi5hcnJvdyIpCgkJLmRhdGEoZGF0YS5maWx0ZXIoYXJyb3dfZmlsdGVyKSwga2V5KTsKICAgICAgICAgICAgYXJyb3cuZW50ZXIoKQoJCS5hcHBlbmQoInN2ZzpsaW5lIikKCQkuY2FsbChmdW5jdGlvbihzZWwpIHsgYXJyb3dfaW5pdChzZWwsIHNldHRpbmdzKTsgfSkKCQkuY2FsbChmdW5jdGlvbihzZWwpIHsgYXJyb3dfZm9ybWF0dGluZyhzZWwsIHNldHRpbmdzLCBzY2FsZXMpOyB9KTsKCiAgICAgICAgICAgIC8vIEFkZCBlbGxpcHNlcwogICAgICAgICAgICBpZiAoc2V0dGluZ3MuZWxsaXBzZXMpIHsKCQl2YXIgZWxsaXBzZSA9IGNoYXJ0X2JvZHkKCQkgICAgLnNlbGVjdEFsbCgiLmVsbGlwc2UiKQoJCSAgICAuZGF0YShzZXR0aW5ncy5lbGxpcHNlc19kYXRhKTsKCQllbGxpcHNlLmVudGVyKCkKCQkgICAgLmFwcGVuZCgic3ZnOnBhdGgiKQoJCSAgICAuY2FsbChlbGxpcHNlX2luaXQpCgkJICAgIC5jYWxsKGZ1bmN0aW9uKHNlbCkgeyBlbGxpcHNlX2Zvcm1hdHRpbmcoc2VsLCBzZXR0aW5ncywgc2NhbGVzKTsgfSk7CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgIC8vIEFkZCB0ZXh0IGxhYmVscwogICAgICAgICAgICBpZiAoc2V0dGluZ3MuaGFzX2xhYmVscykgewogICAgICAgICAgICAgICAgdmFyIGxhYmVscyA9IGNoYXJ0X2JvZHkuc2VsZWN0QWxsKCIucG9pbnQtbGFiZWwiKQogICAgICAgICAgICAgICAgICAgIC5kYXRhKGRhdGEsIGtleSk7CgogICAgICAgICAgICAgICAgbGFiZWxzLmVudGVyKCkKICAgICAgICAgICAgICAgICAgICAuYXBwZW5kKCJ0ZXh0IikKICAgICAgICAgICAgICAgICAgICAuY2FsbChsYWJlbF9pbml0KQogICAgICAgICAgICAgICAgICAgIC5jYWxsKGZ1bmN0aW9uKHNlbCkgeyBsYWJlbF9mb3JtYXR0aW5nKHNlbCwgc2V0dGluZ3MsIHNjYWxlcyk7IH0pCiAgICAgICAgICAgICAgICAgICAgLmNhbGwoZHJhZyk7CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgIC8vIExlZ2VuZHMKCSAgICB2YXIgbGVnZW5kID0gc3ZnLmFwcGVuZCgiZyIpLmF0dHIoImNsYXNzIiwgImxlZ2VuZCIpCgkJLnN0eWxlKCJmb250LXNpemUiLCBzZXR0aW5ncy5sZWdlbmRfZm9udF9zaXplKTsKCiAgICAgICAgICAgIGlmIChzZXR0aW5ncy5oYXNfbGVnZW5kICYmIHNldHRpbmdzLmxlZ2VuZF93aWR0aCA+IDApIHsKCQlkaW1zID0gc2V0dXBfbGVnZW5kX3NpemVzKGRpbXMsIHNjYWxlcywgc2V0dGluZ3MpOwogICAgICAgICAgICAgICAgLy8gQ29sb3IgbGVnZW5kCiAgICAgICAgICAgICAgICBpZiAoc2V0dGluZ3MuaGFzX2NvbG9yX3ZhcikKCQkgICAgYWRkX2NvbG9yX2xlZ2VuZChzdmcsIGRpbXMsIHNldHRpbmdzLCBzY2FsZXMpOwogICAgICAgICAgICAgICAgLy8gU3ltYm9sIGxlZ2VuZAogICAgICAgICAgICAgICAgaWYgKHNldHRpbmdzLmhhc19zeW1ib2xfdmFyKQoJCSAgICBhZGRfc3ltYm9sX2xlZ2VuZChzdmcsIGRpbXMsIHNldHRpbmdzLCBzY2FsZXMpOwogICAgICAgICAgICAgICAgLy8gU2l6ZSBsZWdlbmQKICAgICAgICAgICAgICAgIGlmIChzZXR0aW5ncy5oYXNfc2l6ZV92YXIpCgkJICAgIGFkZF9zaXplX2xlZ2VuZChzdmcsIGRpbXMsIHNldHRpbmdzLCBzY2FsZXMpOwogICAgICAgICAgICB9CgogICAgICAgICAgICAvLyBUb29scyBtZW51CiAgICAgICAgICAgIGlmKHNldHRpbmdzLm1lbnUpIHsKCgkJLy8gR2VhciBpY29uCgkJdmFyIGdlYXIgPSBzdmcuYXBwZW5kKCJnIikKCQkgICAgLmF0dHIoImNsYXNzIiwgImdlYXItbWVudSIpCgkJICAgIC5hdHRyKCJ0cmFuc2Zvcm0iLCAidHJhbnNsYXRlKCIgKyAod2lkdGggLSA0MCkgKyAiLCIgKyAxMCArICIpIik7CgkJZ2Vhci5hcHBlbmQoInJlY3QiKQoJCSAgICAuYXR0cigiY2xhc3MiLCAiZ2Vhci10b2dnbGUiKQoJCSAgICAuYXR0cigid2lkdGgiLCAiMjUiKQoJCSAgICAuYXR0cigiaGVpZ2h0IiwgIjI1IikKCQkgICAgLnN0eWxlKCJmaWxsIiwgIiNGRkZGRkYiKTsKCQlnZWFyLmFwcGVuZCgicGF0aCIpCgkJICAgIC5hdHRyKCJkIiwgZ2Vhcl9wYXRoKCkpCgkJICAgIC5hdHRyKCJ0cmFuc2Zvcm0iLCAidHJhbnNsYXRlKC0zLDMpIikKCQkgICAgLnN0eWxlKCJmaWxsIiwgIiM2NjY2NjYiKTsKCgkJdmFyIG1lbnVfcGFyZW50ID0gZDMuc2VsZWN0KHN2Zy5ub2RlKCkucGFyZW50Tm9kZSk7CgkJbWVudV9wYXJlbnQuc3R5bGUoInBvc2l0aW9uIiwgInJlbGF0aXZlIik7CgkJdmFyIG1lbnUgPSBtZW51X3BhcmVudC5zZWxlY3QoIi5zY2F0dGVyRDMtbWVudSIpOwoKCQltZW51LmF0dHIoImlkIiwgInNjYXR0ZXJEMy1tZW51LSIgKyBzZXR0aW5ncy5odG1sX2lkKTsKCgkJbWVudS5hcHBlbmQoImxpIikKCQkgICAgLmFwcGVuZCgiYSIpCgkJICAgIC5vbigiY2xpY2siLCByZXNldF96b29tKQoJCSAgICAuaHRtbCgiUmVzZXQgem9vbSIpOwoKCQltZW51LmFwcGVuZCgibGkiKQoJCSAgICAuYXBwZW5kKCJhIikKCQkgICAgLm9uKCJjbGljayIsIGZ1bmN0aW9uKCkgeyBleHBvcnRfc3ZnKHRoaXMsIHN2Zywgc2V0dGluZ3MpOyB9KQoJCSAgICAuaHRtbCgiRXhwb3J0IHRvIFNWRyIpOwoKCQlpZiAoc2V0dGluZ3MubGFzc28pIHsKICAgICAgICAgICAgICAgICAgICBtZW51LmFwcGVuZCgibGkiKQoJCQkuYXBwZW5kKCJhIikKCQkJLmF0dHIoImNsYXNzIiwgImxhc3NvLWVudHJ5IikKCQkJLm9uKCJjbGljayIsIGZ1bmN0aW9uICgpIHtsYXNzb190b2dnbGUoc3ZnLCBzZXR0aW5ncywgc2NhbGVzLCB6b29tKTt9KQoJCQkuaHRtbCgiVG9nZ2xlIGxhc3NvIG9uIik7CgkJfQoKICAgICAgICAgICAgICAgIHZhciBsYWJlbF9leHBvcnQgPSBtZW51LmFwcGVuZCgibGkiKQoJCSAgICAuYXR0cigiY2xhc3MiLCAibGFiZWwtZXhwb3J0Iik7CgkJbGFiZWxfZXhwb3J0LmFwcGVuZCgiYSIpCgkJICAgIC5vbigiY2xpY2siLCBmdW5jdGlvbigpIHsgZXhwb3J0X2xhYmVsc19wb3NpdGlvbih0aGlzLCBkYXRhLCBzZXR0aW5ncywgc2NhbGVzKTsgfSkKCQkgICAgLmh0bWwoIkV4cG9ydCBsYWJlbHMgcG9zaXRpb25zIik7CgkJaWYgKCFzZXR0aW5ncy5oYXNfbGFiZWxzKSB7CgkJICAgIGxhYmVsX2V4cG9ydC5zdHlsZSgiZGlzcGxheSIsICJub25lIik7CgkJfQoKCQlnZWFyLm9uKCJjbGljayIsIGZ1bmN0aW9uKGQsIGkpewogICAgICAgICAgICAgICAgICAgIHZhciBtZW51ID0gZDMuc2VsZWN0KCIjc2NhdHRlckQzLW1lbnUtIiArIHNldHRpbmdzLmh0bWxfaWQpOwogICAgICAgICAgICAgICAgICAgIHZhciBnZWFyID0gc3ZnLnNlbGVjdCgiLmdlYXItbWVudSIpOwogICAgICAgICAgICAgICAgICAgIGlmICghbWVudS5jbGFzc2VkKCJvcGVuIikpIHsKCQkJbWVudS50cmFuc2l0aW9uKCkuZHVyYXRpb24oMzAwKQoJCQkgICAgLnN0eWxlKCJvcGFjaXR5IiwgIjAuOTUiKQoJCQkgICAgLnN0eWxlKCJ3aWR0aCIsICIxNjVweCIpOwoJCQlnZWFyLmNsYXNzZWQoInNlbGVjdGVkIiwgdHJ1ZSk7CgkJCW1lbnUuY2xhc3NlZCgib3BlbiIsIHRydWUpOwogICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7CgkJCW1lbnUudHJhbnNpdGlvbigpLmR1cmF0aW9uKDMwMCkKCQkJICAgIC5zdHlsZSgib3BhY2l0eSIsICIwIikKCQkJICAgIC5zdHlsZSgid2lkdGgiLCAiMHB4Iik7CgkJCWdlYXIuY2xhc3NlZCgic2VsZWN0ZWQiLCBmYWxzZSk7CgkJCW1lbnUuY2xhc3NlZCgib3BlbiIsIGZhbHNlKTsKICAgICAgICAgICAgICAgICAgICB9CgkJfSk7CiAgICAgICAgICAgIH0KCgkgICAgdmFyIGNhcHRpb25fcGFyZW50ID0gZDMuc2VsZWN0KHN2Zy5ub2RlKCkucGFyZW50Tm9kZSk7CgkgICAgdmFyIGNhcHRpb24gPSBjYXB0aW9uX3BhcmVudC5zZWxlY3QoIi5zY2F0dGVyRDMtY2FwdGlvbiIpOwoKCSAgICAvLyBDYXB0aW9uCgkgICAgaWYgKHNldHRpbmdzLmNhcHRpb24pIHsKCQlpZiAoc2V0dGluZ3MuY2FwdGlvbi50aXRsZSkKCQkgICAgY2FwdGlvbi5hcHBlbmQoImgxIikuYXR0cigiY2xhc3MiLCAidGl0bGUiKS5odG1sKHNldHRpbmdzLmNhcHRpb24udGl0bGUpOwoJCWlmIChzZXR0aW5ncy5jYXB0aW9uLnN1YnRpdGxlKQoJCSAgICBjYXB0aW9uLmFwcGVuZCgiaDIiKS5hdHRyKCJjbGFzcyIsICJzdWJ0aXRsZSIpLmh0bWwoc2V0dGluZ3MuY2FwdGlvbi5zdWJ0aXRsZSk7CgkJaWYgKHNldHRpbmdzLmNhcHRpb24udGV4dCkKCQkgICAgY2FwdGlvbi5hcHBlbmQoInAiKS5hdHRyKCJjbGFzcyIsICJjYXB0aW9uIikuaHRtbChzZXR0aW5ncy5jYXB0aW9uLnRleHQpOwoJCWNhcHRpb24uc3R5bGUoInRvcCIsIGRpbXMuc3ZnX2hlaWdodCArICJweCIpOwoKCQkvLyBDYXB0aW9uIGljb24KCQl2YXIgY2FwdGlvbl90b3BfbWFyZ2luID0gc2V0dGluZ3MubWVudSA/IDM1IDogMTA7CgkJdmFyIGNhcHRpb25faWNvbiA9IHN2Zy5hcHBlbmQoImciKQoJCSAgICAuYXR0cigiY2xhc3MiLCAiY2FwdGlvbi1pY29uIikKCQkgICAgLmF0dHIoInRyYW5zZm9ybSIsICJ0cmFuc2xhdGUoIiArIChkaW1zLnN2Z193aWR0aCAtIDQwKSArICIsIiArIChkaW1zLnN2Z19oZWlnaHQgLSA3MSkgKyAiKSIpCgkJICAgIC5hdHRyKCJ0cmFuc2Zvcm0iLCAidHJhbnNsYXRlKCIgKyAoZGltcy5zdmdfd2lkdGggLSA0MCkgKyAiLCIgKyBjYXB0aW9uX3RvcF9tYXJnaW4gKyAiKSIpOwoJCWNhcHRpb25faWNvbi5hcHBlbmQoInJlY3QiKQoJCSAgICAuYXR0cigiY2xhc3MiLCAiY2FwdGlvbi10b2dnbGUiKQoJCSAgICAuYXR0cigid2lkdGgiLCAiMjUiKQoJCSAgICAuYXR0cigiaGVpZ2h0IiwgIjI1IikKCQkgICAgLnN0eWxlKCJmaWxsIiwgIiNGRkZGRkYiKTsKCQljYXB0aW9uX2ljb24uYXBwZW5kKCJwYXRoIikKCQkgICAgLmF0dHIoImQiLCBjYXB0aW9uX3BhdGgoKSkKCQkgICAgLmF0dHIoInRyYW5zZm9ybSIsICJ0cmFuc2xhdGUoNCw0KSIpCgkJICAgIC5zdHlsZSgiZmlsbCIsICIjNjY2NjY2Iik7CgoJCWNhcHRpb25faWNvbi5vbigiY2xpY2siLCBmdW5jdGlvbigpIHsKCQkgICAgaWYgKCFjYXB0aW9uLmNsYXNzZWQoInZpc2libGUiKSkgewoJCQljYXB0aW9uLmNsYXNzZWQoInZpc2libGUiLCB0cnVlKTsKCQkJY2FwdGlvbi5zdHlsZSgibWFyZ2luLXRvcCIsIC1jYXB0aW9uLm5vZGUoKS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS5oZWlnaHQgKyAicHgiKTsKCQkgICAgfQoJCSAgICBlbHNlIHsKCQkJY2FwdGlvbi5jbGFzc2VkKCJ2aXNpYmxlIiwgZmFsc2UpOwoJCQljYXB0aW9uLnN0eWxlKCJtYXJnaW4tdG9wIiwgIjBweCIpOwoJCSAgICB9CgkJfSk7CgoJCWNhcHRpb24ub24oImNsaWNrIiwgZnVuY3Rpb24oKSB7CgkJICAgIGNhcHRpb24uY2xhc3NlZCgidmlzaWJsZSIsIGZhbHNlKTsKCQkgICAgY2FwdGlvbi5zdHlsZSgibWFyZ2luLXRvcCIsICIwcHgiKTsKCQl9KTsKCgkgICAgfQoJICAgIC8vIE5vIHRpdGxlCgkgICAgZWxzZSB7CgkJY2FwdGlvbi5yZW1vdmUoKTsKCSAgICB9CgogICAgICAgIH0pOwogICAgfQoKCiAgICAvLyBVcGRhdGUgY2hhcnQgd2l0aCB0cmFuc2l0aW9ucwogICAgZnVuY3Rpb24gdXBkYXRlX3NldHRpbmdzKG9sZF9zZXR0aW5ncykgewoJdmFyIGNoYXJ0X2JvZHkgPSBzdmcuc2VsZWN0KCIuY2hhcnQtYm9keSIpOwogICAgICAgIGlmIChvbGRfc2V0dGluZ3MubGFiZWxzX3NpemUgIT0gc2V0dGluZ3MubGFiZWxzX3NpemUpCiAgICAgICAgICAgIHN2Zy5zZWxlY3RBbGwoIi5wb2ludC1sYWJlbCIpLnRyYW5zaXRpb24oKS5zdHlsZSgiZm9udC1zaXplIiwgc2V0dGluZ3MubGFiZWxzX3NpemUgKyAicHgiKTsKICAgICAgICBpZiAob2xkX3NldHRpbmdzLnBvaW50X3NpemUgIT0gc2V0dGluZ3MucG9pbnRfc2l6ZSB8fAoJICAgIG9sZF9zZXR0aW5ncy5wb2ludF9vcGFjaXR5ICE9IHNldHRpbmdzLnBvaW50X29wYWNpdHkpIHsKICAgICAgICAgICAgc3ZnLnNlbGVjdEFsbCgiLmRvdCIpLnRyYW5zaXRpb24oKQoJCS5jYWxsKGZ1bmN0aW9uKHNlbCkgeyBkb3RfZm9ybWF0dGluZyhzZWwsIHNldHRpbmdzLCBzY2FsZXMpOyB9KTsKCX0KICAgICAgICBpZiAob2xkX3NldHRpbmdzLmhhc19sYWJlbHMgIT0gc2V0dGluZ3MuaGFzX2xhYmVscykgewogICAgICAgICAgICBpZiAoIXNldHRpbmdzLmhhc19sYWJlbHMpIHsKICAgICAgICAgICAgICAgIHN2Zy5zZWxlY3RBbGwoIi5wb2ludC1sYWJlbCIpLnJlbW92ZSgpOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGlmIChzZXR0aW5ncy5oYXNfbGFiZWxzKSB7CiAgICAgICAgICAgICAgICB2YXIgbGFiZWxzID0gY2hhcnRfYm9keS5zZWxlY3RBbGwoIi5wb2ludC1sYWJlbCIpCiAgICAgICAgICAgICAgICAgICAgLmRhdGEoZGF0YSwga2V5KTsKICAgICAgICAgICAgICAgIGxhYmVscy5lbnRlcigpCiAgICAgICAgICAgICAgICAgICAgLmFwcGVuZCgidGV4dCIpCiAgICAgICAgICAgICAgICAgICAgLmNhbGwobGFiZWxfaW5pdCkKICAgICAgICAgICAgICAgICAgICAuY2FsbChmdW5jdGlvbihzZWwpIHsgbGFiZWxfZm9ybWF0dGluZyhzZWwsIHNldHRpbmdzLCBzY2FsZXMpOyB9KQogICAgICAgICAgICAgICAgICAgIC5jYWxsKGRyYWcpOwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIGlmIChvbGRfc2V0dGluZ3MudW5pdF9jaXJjbGUgIT0gc2V0dGluZ3MudW5pdF9jaXJjbGUpIHsKICAgICAgICAgICAgaWYgKCFzZXR0aW5ncy51bml0X2NpcmNsZSkgewogICAgICAgICAgICAgICAgdmFyIGNpcmNsZSA9IHN2Zy5zZWxlY3QoIi51bml0LWNpcmNsZSIpOwogICAgICAgICAgICAgICAgY2lyY2xlLnRyYW5zaXRpb24oKS5kdXJhdGlvbigxMDAwKQoJCSAgICAuY2FsbChmdW5jdGlvbihzZWwpIHsgYWRkX3VuaXRfY2lyY2xlKHNlbCwgc2NhbGVzKTsgfSkKICAgICAgICAgICAgICAgICAgICAuc3R5bGUoIm9wYWNpdHkiLCAiMCIpLnJlbW92ZSgpOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGlmIChzZXR0aW5ncy51bml0X2NpcmNsZSkgewogICAgICAgICAgICAgICAgY2hhcnRfYm9keS5hcHBlbmQoJ3N2ZzplbGxpcHNlJykKICAgICAgICAgICAgICAgICAgICAuYXR0cignY2xhc3MnLCAndW5pdC1jaXJjbGUnKQogICAgICAgICAgICAgICAgICAgIC5zdHlsZSgib3BhY2l0eSIsICIwIik7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAgIAlpZiAoc2V0dGluZ3MubWVudSkgewoJICAgICAgICAgIHZhciBtZW51X3BhcmVudCA9IGQzLnNlbGVjdChzdmcubm9kZSgpLnBhcmVudE5vZGUpOwoJICAgICAgICAgIG1lbnVfcGFyZW50LnN0eWxlKCJwb3NpdGlvbiIsICJyZWxhdGl2ZSIpOwoJICAgICAgICAgIHZhciBtZW51ID0gbWVudV9wYXJlbnQuc2VsZWN0KCIuc2NhdHRlckQzLW1lbnUiKTsKCSAgICAgICAgICBtZW51LmF0dHIoImlkIiwgInNjYXR0ZXJEMy1tZW51LSIgKyBzZXR0aW5ncy5odG1sX2lkKTsKICAgICAgCX0KICAgIH07CgogICAgLy8gVXBkYXRlIGRhdGEgd2l0aCB0cmFuc2l0aW9ucwogICAgZnVuY3Rpb24gdXBkYXRlX2RhdGEoKSB7CgoJZGltcyA9IHNldHVwX3NpemVzKHdpZHRoLCBoZWlnaHQsIHNldHRpbmdzKTsKCXNjYWxlcyA9IHNldHVwX3NjYWxlcyhkaW1zLCBzZXR0aW5ncywgZGF0YSk7CgoJLy8gQ2hhbmdlIGF4ZXMgbGFiZWxzCglzdmcuc2VsZWN0KCIueC1heGlzLWxhYmVsIikudGV4dChzZXR0aW5ncy54bGFiKTsKCXN2Zy5zZWxlY3QoIi55LWF4aXMtbGFiZWwiKS50ZXh0KHNldHRpbmdzLnlsYWIpOwoKCXZhciB0MCA9IHN2Zy50cmFuc2l0aW9uKCkuZHVyYXRpb24oMTAwMCk7Cgl0MC5jYWxsKHJlc2l6ZV9wbG90KTsKCgl2YXIgY2hhcnRfYm9keSA9IHN2Zy5zZWxlY3QoIi5jaGFydC1ib2R5Iik7CgkvLyBBZGQgbGluZXMKCWlmIChzZXR0aW5ncy5saW5lcyAhPT0gbnVsbCkgewoJICAgIHZhciBsaW5lID0gY2hhcnRfYm9keS5zZWxlY3RBbGwoIi5saW5lIikKCQkuZGF0YShIVE1MV2lkZ2V0cy5kYXRhZnJhbWVUb0QzKHNldHRpbmdzLmxpbmVzKSk7CgkgICAgbGluZS5lbnRlcigpLmFwcGVuZCgicGF0aCIpLmNhbGwobGluZV9pbml0KQoJCS5zdHlsZSgib3BhY2l0eSIsICIwIikKCQkubWVyZ2UobGluZSkKCQkudHJhbnNpdGlvbigpLmR1cmF0aW9uKDEwMDApCgkJLmNhbGwoZnVuY3Rpb24oc2VsKSB7CgkJICAgIGxpbmVfZm9ybWF0dGluZyhzZWwsIGRpbXMsIHNldHRpbmdzLCBzY2FsZXMpOwoJCX0pCgkJLnN0eWxlKCJvcGFjaXR5IiwgIjEiKTsKCSAgICBsaW5lLmV4aXQoKS50cmFuc2l0aW9uKCkuZHVyYXRpb24oMTAwMCkuc3R5bGUoIm9wYWNpdHkiLCAiMCIpLnJlbW92ZSgpOwoJfQoKCS8vIFVuaXQgY2lyY2xlCglpZiAoc2V0dGluZ3MudW5pdF9jaXJjbGUpIHsKCSAgICB0MC5zZWxlY3QoIi51bml0LWNpcmNsZSIpCgkJLmNhbGwoZnVuY3Rpb24oc2VsKSB7IGFkZF91bml0X2NpcmNsZShzZWwsIHNjYWxlcyk7IH0pOwoJfQoKCS8vIEFkZCBwb2ludHMKCXZhciBkb3QgPSBjaGFydF9ib2R5LnNlbGVjdEFsbCgiLmRvdCIpCgkgICAgLmRhdGEoZGF0YS5maWx0ZXIocG9pbnRfZmlsdGVyKSwga2V5KTsKCWRvdC5lbnRlcigpLmFwcGVuZCgicGF0aCIpLmNhbGwoZnVuY3Rpb24oc2VsKSB7ZG90X2luaXQoc2VsLCBzZXR0aW5ncywgc2NhbGVzKTt9KQoJICAgIC5tZXJnZShkb3QpLmNhbGwoZnVuY3Rpb24oc2VsKSB7ZG90X2luaXQoc2VsLCBzZXR0aW5ncywgc2NhbGVzKTt9KS50cmFuc2l0aW9uKCkuZHVyYXRpb24oMTAwMCkuY2FsbChmdW5jdGlvbihzZWwpIHtkb3RfZm9ybWF0dGluZyhzZWwsIHNldHRpbmdzLCBzY2FsZXMpO30pOwoJZG90LmV4aXQoKS50cmFuc2l0aW9uKCkuZHVyYXRpb24oMTAwMCkuYXR0cigidHJhbnNmb3JtIiwgInRyYW5zbGF0ZSgwLDApIikucmVtb3ZlKCk7CgkvLyBBZGQgYXJyb3dzCgl2YXIgYXJyb3cgPSBjaGFydF9ib2R5LnNlbGVjdEFsbCgiLmFycm93IikKCSAgICAuZGF0YShkYXRhLmZpbHRlcihhcnJvd19maWx0ZXIpLCBrZXkpOwoJYXJyb3cuZW50ZXIoKS5hcHBlbmQoInN2ZzpsaW5lIikuY2FsbChmdW5jdGlvbihzZWwpIHthcnJvd19pbml0KHNlbCwgc2V0dGluZ3MpO30pCgkgICAgLnN0eWxlKCJvcGFjaXR5IiwgIjAiKQoJICAgIC5tZXJnZShhcnJvdykKCSAgICAudHJhbnNpdGlvbigpLmR1cmF0aW9uKDEwMDApCgkgICAgLmNhbGwoZnVuY3Rpb24oc2VsKSB7IGFycm93X2Zvcm1hdHRpbmcoc2VsLCBzZXR0aW5ncywgc2NhbGVzKTsgfSkKCSAgICAuc3R5bGUoIm9wYWNpdHkiLCAiMSIpOwoJYXJyb3cuZXhpdCgpLnRyYW5zaXRpb24oKS5kdXJhdGlvbigxMDAwKS5zdHlsZSgib3BhY2l0eSIsICIwIikucmVtb3ZlKCk7CgoJLy8gQWRkIGVsbGlwc2VzCglpZiAoc2V0dGluZ3MuZWxsaXBzZXMgfHwgc2V0dGluZ3MuZWxsaXBzZXNfY2hhbmdlZCkgewogICAgICAgICAgICB2YXIgZWxsaXBzZSA9IGNoYXJ0X2JvZHkuc2VsZWN0QWxsKCIuZWxsaXBzZSIpCgkJLmRhdGEoc2V0dGluZ3MuZWxsaXBzZXNfZGF0YSk7CiAgICAgICAgICAgIGVsbGlwc2UuZW50ZXIoKS5hcHBlbmQoInBhdGgiKS5jYWxsKGVsbGlwc2VfaW5pdCkKCQkuc3R5bGUoIm9wYWNpdHkiLCAiMCIpCgkJLm1lcmdlKGVsbGlwc2UpCgkJLnRyYW5zaXRpb24oKS5kdXJhdGlvbigxMDAwKQoJCS5jYWxsKGZ1bmN0aW9uKHNlbCkgeyBlbGxpcHNlX2Zvcm1hdHRpbmcoc2VsLCBzZXR0aW5ncywgc2NhbGVzKTt9KQoJCS5zdHlsZSgib3BhY2l0eSIsICIxIik7CiAgICAgICAgICAgIGVsbGlwc2UuZXhpdCgpLnRyYW5zaXRpb24oKS5kdXJhdGlvbigxMDAwKS5zdHlsZSgib3BhY2l0eSIsICIwIikucmVtb3ZlKCk7Cgl9CgoJaWYgKHNldHRpbmdzLmhhc19sYWJlbHMpIHsKICAgICAgICAgICAgdmFyIGxhYmVscyA9IGNoYXJ0X2JvZHkuc2VsZWN0QWxsKCIucG9pbnQtbGFiZWwiKQoJCS5kYXRhKGRhdGEsIGtleSk7CiAgICAgICAgICAgIGxhYmVscy5lbnRlcigpLmFwcGVuZCgidGV4dCIpLmNhbGwobGFiZWxfaW5pdCkuY2FsbChkcmFnKQoJCS5tZXJnZShsYWJlbHMpLnRyYW5zaXRpb24oKS5kdXJhdGlvbigxMDAwKS5jYWxsKGZ1bmN0aW9uKHNlbCkgeyBsYWJlbF9mb3JtYXR0aW5nKHNlbCwgc2V0dGluZ3MsIHNjYWxlcyk7IH0pOwogICAgICAgICAgICBsYWJlbHMuZXhpdCgpLnRyYW5zaXRpb24oKS5kdXJhdGlvbigxMDAwKS5hdHRyKCJ0cmFuc2Zvcm0iLCAidHJhbnNsYXRlKDAsMCkiKS5yZW1vdmUoKTsKCX0KCglpZiAoc2V0dGluZ3MuaGFzX2xhYmVsc19jaGFuZ2VkKSB7CgkgICAgdmFyIGxhYmVsX2V4cG9ydCA9IGQzLnNlbGVjdCgiI3NjYXR0ZXJEMy1tZW51LSIgKyBzZXR0aW5ncy5odG1sX2lkKQoJCS5zZWxlY3QoIi5sYWJlbC1leHBvcnQiKTsKCSAgICBsYWJlbF9leHBvcnQuc3R5bGUoImRpc3BsYXkiLCBzZXR0aW5ncy5oYXNfbGFiZWxzID8gImJsb2NrIiA6ICJub25lIik7Cgl9CgoJaWYgKHNldHRpbmdzLmxlZ2VuZF9jaGFuZ2VkKSB7CgkgICAgdmFyIGxlZ2VuZCA9IHN2Zy5zZWxlY3QoIi5sZWdlbmQiKTsKCSAgICBkaW1zID0gc2V0dXBfbGVnZW5kX3NpemVzKGRpbXMsIHNjYWxlcywgc2V0dGluZ3MpOwoKCSAgICAvLyBNb3ZlIGNvbG9yIGxlZ2VuZAoJICAgIGlmKHNldHRpbmdzLmhhc19jb2xvcl92YXIgJiYgc2V0dGluZ3MuaGFkX2NvbG9yX3ZhciAmJiAhc2V0dGluZ3MuY29sX2NoYW5nZWQpIHsKCQlsZWdlbmQuY2FsbChmdW5jdGlvbihzZWwpIHsKCQkgICAgbW92ZV9jb2xvcl9sZWdlbmQoc2VsLCBkaW1zLCAxMDAwKTsgfSk7CgkgICAgfQoJICAgIC8vIFJlcGxhY2UgY29sb3IgbGVnZW5kCgkgICAgaWYoc2V0dGluZ3MuaGFzX2NvbG9yX3ZhciAmJiBzZXR0aW5ncy5oYWRfY29sb3JfdmFyICYmIHNldHRpbmdzLmNvbF9jaGFuZ2VkKSB7CgkJbGVnZW5kLmNhbGwoZnVuY3Rpb24oc2VsKSB7CgkJICAgIHJlbW92ZV9jb2xvcl9sZWdlbmQoc2VsKTsKCQkgICAgYWRkX2NvbG9yX2xlZ2VuZChzdmcsIGRpbXMsIHNldHRpbmdzLCBzY2FsZXMsIDEwMDApOwoJCX0pOwoJICAgIH0KCSAgICAvLyBBZGQgY29sb3IgbGVnZW5kCgkgICAgaWYoc2V0dGluZ3MuaGFzX2NvbG9yX3ZhciAmJiAhc2V0dGluZ3MuaGFkX2NvbG9yX3ZhcikgewoJCWFkZF9jb2xvcl9sZWdlbmQoc3ZnLCBkaW1zLCBzZXR0aW5ncywgc2NhbGVzLCAxMDAwKTsKCSAgICB9CgkgICAgLy8gUmVtb3ZlIGNvbG9yIGxlZ2VuZAoJICAgIGlmKCFzZXR0aW5ncy5oYXNfY29sb3JfdmFyICYmIHNldHRpbmdzLmhhZF9jb2xvcl92YXIpIHsKCQlsZWdlbmQuY2FsbChyZW1vdmVfY29sb3JfbGVnZW5kKTsKCSAgICB9CgoJICAgIC8vIE1vdmUgc3ltYm9sIGxlZ2VuZAoJICAgIGlmKHNldHRpbmdzLmhhc19zeW1ib2xfdmFyICYmIHNldHRpbmdzLmhhZF9zeW1ib2xfdmFyICYmICFzZXR0aW5ncy5zeW1ib2xfY2hhbmdlZCkgewoJCWxlZ2VuZC5jYWxsKGZ1bmN0aW9uKHNlbCkgewoJCSAgICBtb3ZlX3N5bWJvbF9sZWdlbmQoc2VsLCBkaW1zLCAxMDAwKTsgfSk7CgkgICAgfQoJICAgIC8vIFJlcGxhY2Ugc3ltYm9sIGxlZ2VuZAoJICAgIGlmKHNldHRpbmdzLmhhc19zeW1ib2xfdmFyICYmIHNldHRpbmdzLmhhZF9zeW1ib2xfdmFyICYmIHNldHRpbmdzLnN5bWJvbF9jaGFuZ2VkKSB7CgkJbGVnZW5kLmNhbGwoZnVuY3Rpb24oc2VsKSB7CgkJICAgIHJlbW92ZV9zeW1ib2xfbGVnZW5kKHNlbCk7CgkJICAgIGFkZF9zeW1ib2xfbGVnZW5kKHN2ZywgZGltcywgc2V0dGluZ3MsIHNjYWxlcywgMTAwMCk7CgkJfSk7CgkgICAgfQoJICAgIC8vIEFkZCBzeW1ib2wgbGVnZW5kCgkgICAgaWYoc2V0dGluZ3MuaGFzX3N5bWJvbF92YXIgJiYgIXNldHRpbmdzLmhhZF9zeW1ib2xfdmFyKSB7CgkJYWRkX3N5bWJvbF9sZWdlbmQoc3ZnLCBkaW1zLCBzZXR0aW5ncywgc2NhbGVzLCAxMDAwKTsKCSAgICB9CgkgICAgLy8gUmVtb3ZlIHN5bWJvbCBsZWdlbmQKCSAgICBpZighc2V0dGluZ3MuaGFzX3N5bWJvbF92YXIgJiYgc2V0dGluZ3MuaGFkX3N5bWJvbF92YXIpIHsKCQlsZWdlbmQuY2FsbChyZW1vdmVfc3ltYm9sX2xlZ2VuZCk7CgkgICAgfQoKCSAgICAvLyBNb3ZlIHNpemUgbGVnZW5kCgkgICAgaWYoc2V0dGluZ3MuaGFzX3NpemVfdmFyICYmIHNldHRpbmdzLmhhZF9zaXplX3ZhciAmJiAhc2V0dGluZ3Muc2l6ZV9jaGFuZ2VkKSB7CgkJbGVnZW5kLmNhbGwoZnVuY3Rpb24oc2VsKSB7CgkJICAgIG1vdmVfc2l6ZV9sZWdlbmQoc2VsLCBkaW1zLCAxMDAwKTsgfSk7CgkgICAgfQoJICAgIC8vIFJlcGxhY2Ugc2l6ZSBsZWdlbmQKCSAgICBpZihzZXR0aW5ncy5oYXNfc2l6ZV92YXIgJiYgc2V0dGluZ3MuaGFkX3NpemVfdmFyICYmIHNldHRpbmdzLnNpemVfY2hhbmdlZCkgewoJCWxlZ2VuZC5jYWxsKGZ1bmN0aW9uKHNlbCkgewoJCSAgICByZW1vdmVfc2l6ZV9sZWdlbmQoc2VsKTsKCQkgICAgYWRkX3NpemVfbGVnZW5kKHN2ZywgZGltcywgc2V0dGluZ3MsIHNjYWxlcywgMTAwMCk7CgkJfSk7CgkgICAgfQoJICAgIC8vIEFkZCBzaXplIGxlZ2VuZAoJICAgIGlmKHNldHRpbmdzLmhhc19zaXplX3ZhciAmJiAhc2V0dGluZ3MuaGFkX3NpemVfdmFyKSB7CgkJYWRkX3NpemVfbGVnZW5kKHN2ZywgZGltcywgc2V0dGluZ3MsIHNjYWxlcywgMTAwMCk7CgkgICAgfQoJICAgIC8vIFJlbW92ZSBzaXplIGxlZ2VuZAoJICAgIGlmKCFzZXR0aW5ncy5oYXNfc2l6ZV92YXIgJiYgc2V0dGluZ3MuaGFkX3NpemVfdmFyKSB7CgkJbGVnZW5kLmNhbGwocmVtb3ZlX3NpemVfbGVnZW5kKTsKCSAgICB9CgoJfQoJLy8gUmVzZXQgem9vbQoJc3ZnLnNlbGVjdCgiLnJvb3QiKQoJICAgIC50cmFuc2l0aW9uKCkuZGVsYXkoMTAwMCkuZHVyYXRpb24oMCkKCSAgICAuY2FsbCh6b29tLnRyYW5zZm9ybSwgZDMuem9vbUlkZW50aXR5KTsKCgoKCglsYXNzb19vZmYoc3ZnLCBzZXR0aW5ncywgem9vbSk7CiAgICB9OwoKICAgIC8vIER5bmFtaWNhbGx5IHJlc2l6ZSBwbG90IGFyZWEKICAgIGZ1bmN0aW9uIHJlc2l6ZV9wbG90KHNlbGVjdGlvbikgewoJLy8gQ2hhbmdlIHN2ZyBhdHRyaWJ1dGVzCiAgICAgICAgc2VsZWN0aW9uLnNlbGVjdEFsbCgiLnJvb3QiKQogICAgICAgICAgICAuYXR0cigid2lkdGgiLCBkaW1zLndpZHRoKQogICAgICAgICAgICAuYXR0cigiaGVpZ2h0IiwgZGltcy5oZWlnaHQpOwoJc2VsZWN0aW9uLnNlbGVjdEFsbCgiLnJvb3QiKQoJICAgIC5zZWxlY3QoInJlY3QiKQogICAgICAgICAgICAuYXR0cigid2lkdGgiLCBkaW1zLndpZHRoKQogICAgICAgICAgICAuYXR0cigiaGVpZ2h0IiwgZGltcy5oZWlnaHQpOwogICAgICAgIHNlbGVjdGlvbi5zZWxlY3RBbGwoIi5jaGFydC1ib2R5IikKICAgICAgICAgICAgLmF0dHIoIndpZHRoIiwgZGltcy53aWR0aCkKICAgICAgICAgICAgLmF0dHIoImhlaWdodCIsIGRpbXMuaGVpZ2h0KTsKCXNlbGVjdGlvbi5zZWxlY3QoIi54LmF4aXMiKQoJICAgIC5hdHRyKCJ0cmFuc2Zvcm0iLCAidHJhbnNsYXRlKDAsIiArIGRpbXMuaGVpZ2h0ICsgIikiKTsKICAgICAgICBzZWxlY3Rpb24uc2VsZWN0KCIueC1heGlzLWxhYmVsIikKCSAgICAuYXR0cigidHJhbnNmb3JtIiwgInRyYW5zbGF0ZSgiICsgKGRpbXMud2lkdGggLSA1KSArICIsIiArIChkaW1zLmhlaWdodCAtIDYpICsgIikiKTsKCXNlbGVjdGlvbi5zZWxlY3QoIi54LmF4aXMiKS5jYWxsKHNjYWxlcy54QXhpcyk7CglzZWxlY3Rpb24uc2VsZWN0KCIueS5heGlzIikuY2FsbChzY2FsZXMueUF4aXMpOwoKCWlmIChzZXR0aW5ncy51bml0X2NpcmNsZSkgewogICAgICAgICAgICBzZWxlY3Rpb24uc2VsZWN0KCIudW5pdC1jaXJjbGUiKQoJCS5jYWxsKGZ1bmN0aW9uKHNlbCkgeyBhZGRfdW5pdF9jaXJjbGUoc2VsLCBzY2FsZXMpOyB9KTsKCX0KICAgIH0KCiAgICAvLyBEeW5hbWljYWxseSByZXNpemUgY2hhcnQgZWxlbWVudHMKICAgIGZ1bmN0aW9uIHJlc2l6ZV9jaGFydCAoKSB7CiAgICAgICAgLy8gcmVjb21wdXRlIHNpemVzCiAgICAgICAgZGltcyA9IHNldHVwX3NpemVzKHdpZHRoLCBoZWlnaHQsIHNldHRpbmdzKTsKCWRpbXMgPSBzZXR1cF9sZWdlbmRfc2l6ZXMoZGltcywgc2NhbGVzLCBzZXR0aW5ncyk7CiAgICAgICAgLy8gcmVjb21wdXRlIHggYW5kIHkgc2NhbGVzCiAgICAgICAgc2NhbGVzLngucmFuZ2UoWzAsIGRpbXMud2lkdGhdKTsKICAgICAgICBzY2FsZXMueF9vcmlnLnJhbmdlKFswLCBkaW1zLndpZHRoXSk7CiAgICAgICAgc2NhbGVzLnkucmFuZ2UoW2RpbXMuaGVpZ2h0LCAwXSk7CiAgICAgICAgc2NhbGVzLnlfb3JpZy5yYW5nZShbZGltcy5oZWlnaHQsIDBdKTsKCXNjYWxlcy54QXhpcyA9IGQzLmF4aXNCb3R0b20oc2NhbGVzLngpLnRpY2tTaXplKC1kaW1zLmhlaWdodCk7CglzY2FsZXMueUF4aXMgPSBkMy5heGlzTGVmdChzY2FsZXMueSkudGlja1NpemUoLWRpbXMud2lkdGgpOwoKCXN2Zy5jYWxsKHJlc2l6ZV9wbG90KTsKCglzdmcuc2VsZWN0KCIucm9vdCIpCgkgICAgLmNhbGwoem9vbS50cmFuc2Zvcm0sCgkJICBkMy56b29tVHJhbnNmb3JtKHN2Zy5zZWxlY3QoIi5yb290Iikubm9kZSgpKSk7CgogICAgICAgIC8vIE1vdmUgbGVnZW5kcwoJaWYgKHNldHRpbmdzLmhhc19sZWdlbmQgJiYgc2V0dGluZ3MubGVnZW5kX3dpZHRoID4gMCkgewoJICAgIHZhciBsZWdlbmQgPSBzdmcuc2VsZWN0KCIubGVnZW5kIik7CiAgICAgICAgICAgIGlmIChzZXR0aW5ncy5oYXNfY29sb3JfdmFyKQoJCW1vdmVfY29sb3JfbGVnZW5kKGxlZ2VuZCwgZGltcywgMCk7CiAgICAgICAgICAgIGlmIChzZXR0aW5ncy5oYXNfc3ltYm9sX3ZhcikKCQltb3ZlX3N5bWJvbF9sZWdlbmQobGVnZW5kLCBkaW1zLCAwKTsKICAgICAgICAgICAgaWYgKHNldHRpbmdzLmhhc19zaXplX3ZhcikKCQltb3ZlX3NpemVfbGVnZW5kKGxlZ2VuZCwgZGltcywgMCk7Cgl9CiAgICAgICAgLy8gTW92ZSBtZW51CiAgICAgICAgaWYgKHNldHRpbmdzLm1lbnUpIHsKICAgICAgICAgICAgc3ZnLnNlbGVjdCgiLmdlYXItbWVudSIpCgkJLmF0dHIoInRyYW5zZm9ybSIsICJ0cmFuc2xhdGUoIiArICh3aWR0aCAtIDQwKSArICIsIiArIDEwICsgIikiKTsKICAgICAgICB9CiAgICAgICAgLy8gTW92ZSBjYXB0aW9uIGljb24gYW5kIGRpdgogICAgICAgIGlmIChzZXR0aW5ncy5jYXB0aW9uKSB7CgkgICAgdmFyIGNhcHRpb25fdG9wX21hcmdpbiA9IHNldHRpbmdzLm1lbnUgPyAzNSA6IDEwOwogICAgICAgICAgICBzdmcuc2VsZWN0KCIuY2FwdGlvbi1pY29uIikKCSAgICAJLmF0dHIoInRyYW5zZm9ybSIsICJ0cmFuc2xhdGUoIiArIChkaW1zLnN2Z193aWR0aCAtIDQwKSArICIsIiArIGNhcHRpb25fdG9wX21hcmdpbiArICIpIik7CgkgICAgZDMuc2VsZWN0KHN2Zy5ub2RlKCkucGFyZW50Tm9kZSkKCQkuc2VsZWN0KCIuc2NhdHRlckQzLWNhcHRpb24iKQoJCS5zdHlsZSgidG9wIiwgZGltcy5zdmdfaGVpZ2h0ICsgInB4Iik7CiAgICAgICAgfQoKCiAgICB9OwoKCiAgICAvLyBBZGQgY29udHJvbHMgaGFuZGxlcnMgZm9yIHNoaW55CiAgICBjaGFydC5hZGRfY29udHJvbHNfaGFuZGxlcnMgPSBmdW5jdGlvbigpIHsKICAgICAgICAvLyBab29tIHJlc2V0CiAgICAgICAgZDMuc2VsZWN0KCIjIiArIHNldHRpbmdzLmRvbV9pZF9yZXNldF96b29tKQogICAgICAgICAgICAub24oImNsaWNrIiwgcmVzZXRfem9vbSk7CgogICAgICAgIC8vIFNWRyBleHBvcnQKICAgICAgICBkMy5zZWxlY3QoIiMiICsgc2V0dGluZ3MuZG9tX2lkX3N2Z19leHBvcnQpCiAgICAgICAgICAgIC5vbigiY2xpY2siLCBmdW5jdGlvbigpIHsgZXhwb3J0X3N2Zyh0aGlzLCBzdmcsIHNldHRpbmdzKTsgfSk7CgogICAgICAgIC8vIExhc3NvIHRvZ2dsZQogICAgICAgIGQzLnNlbGVjdCgiIyIgKyBzZXR0aW5ncy5kb21faWRfbGFzc29fdG9nZ2xlKQogICAgICAgICAgICAub24oImNsaWNrIiwgZnVuY3Rpb24gKCkge2xhc3NvX3RvZ2dsZShzdmcsIHNldHRpbmdzLCBzY2FsZXMsIHpvb20pO30pOwogICAgfTsKCiAgICBjaGFydC5hZGRfZ2xvYmFsX2xpc3RlbmVycyA9IGZ1bmN0aW9uKCkgewoJLy8gVG9vZ2xlIHpvb20gYW5kIGxhc3NvIGJlaGF2aW9ycyB3aGVuIHNoaWZ0IGlzIHByZXNzZWQKCXZhciBwYXJlbnQgPSBkMy5zZWxlY3QoIiNzY2F0dGVyRDMtc3ZnLSIgKyBzZXR0aW5ncy5odG1sX2lkKS5ub2RlKCkucGFyZW50Tm9kZTsKCWQzLnNlbGVjdChwYXJlbnQpCgkgICAgLmF0dHIoInRhYmluZGV4IiwgMCkKCSAgICAub24oImtleWRvd24iLCBmdW5jdGlvbigpIHsKCQl2YXIga2V5ID0gZDMuZXZlbnQua2V5ICE9PSB1bmRlZmluZWQgPyBkMy5ldmVudC5rZXkgOiBkMy5ldmVudC5rZXlJZGVudGlmaWVyOwoJCWlmIChrZXkgPT0gIlNoaWZ0IikgewoJCSAgICBpZiAoc2V0dGluZ3MubGFzc28pIHsKCQkJbGFzc29fb24oc3ZnLCBzZXR0aW5ncywgc2NhbGVzLCB6b29tKTsKCQkgICAgfQoJCX0KCSAgICB9KQoJICAgIC5vbigia2V5dXAiLCBmdW5jdGlvbigpIHsKCQl2YXIga2V5ID0gZDMuZXZlbnQua2V5ICE9PSB1bmRlZmluZWQgPyBkMy5ldmVudC5rZXkgOiBkMy5ldmVudC5rZXlJZGVudGlmaWVyOwoJCWlmIChrZXkgPT0gIlNoaWZ0IikgewoJCSAgICBpZiAoc2V0dGluZ3MubGFzc28pIHsKCQkJbGFzc29fb2ZmKHN2Zywgc2V0dGluZ3MsIHpvb20pOwoJCSAgICB9CgkJfQoJICAgIH0pOwoKICAgIH07CgogICAgLy8gcmVzaXplCiAgICBjaGFydC5yZXNpemUgPSBmdW5jdGlvbigpIHsKICAgICAgICByZXNpemVfY2hhcnQoKTsKICAgIH07CgogICAgLy8gc2V0dGluZ3MgZ2V0dGVyL3NldHRlcgogICAgY2hhcnQuZGF0YSA9IGZ1bmN0aW9uKHZhbHVlLCByZWRyYXcpIHsKICAgICAgICBpZiAoIWFyZ3VtZW50cy5sZW5ndGgpIHJldHVybiBkYXRhOwogICAgICAgIGRhdGEgPSB2YWx1ZTsKICAgICAgICBpZiAoIXJlZHJhdykgdXBkYXRlX2RhdGEoKTsKICAgICAgICByZXR1cm4gY2hhcnQ7CiAgICB9OwoKICAgIC8vIHNldHRpbmdzIGdldHRlci9zZXR0ZXIKICAgIGNoYXJ0LnNldHRpbmdzID0gZnVuY3Rpb24odmFsdWUpIHsKICAgICAgICBpZiAoIWFyZ3VtZW50cy5sZW5ndGgpIHJldHVybiBzZXR0aW5nczsKICAgICAgICBpZiAoT2JqZWN0LmtleXMoc2V0dGluZ3MpLmxlbmd0aCA9PT0gMCkgewogICAgICAgICAgICBzZXR0aW5ncyA9IHZhbHVlOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgIHZhciBvbGRfc2V0dGluZ3MgPSBzZXR0aW5nczsKICAgICAgICAgICAgc2V0dGluZ3MgPSB2YWx1ZTsKICAgICAgICAgICAgdXBkYXRlX3NldHRpbmdzKG9sZF9zZXR0aW5ncyk7CiAgICAgICAgfQogICAgICAgIHJldHVybiBjaGFydDsKICAgIH07CgogICAgY2hhcnQuc3ZnID0gZnVuY3Rpb24odmFsdWUpIHsKICAgICAgICBpZiAoIWFyZ3VtZW50cy5sZW5ndGgpIHJldHVybiBzdmc7CiAgICAgICAgc3ZnID0gdmFsdWU7CiAgICAgICAgcmV0dXJuIGNoYXJ0OwogICAgfTsKCiAgICAvLyB3aWR0aCBnZXR0ZXIvc2V0dGVyCiAgICBjaGFydC53aWR0aCA9IGZ1bmN0aW9uKHZhbHVlKSB7CiAgICAgICAgaWYgKCFhcmd1bWVudHMubGVuZ3RoKSByZXR1cm4gd2lkdGg7CiAgICAgICAgd2lkdGggPSB2YWx1ZTsKICAgICAgICByZXR1cm4gY2hhcnQ7CiAgICB9OwoKICAgIC8vIGhlaWdodCBnZXR0ZXIvc2V0dGVyCiAgICBjaGFydC5oZWlnaHQgPSBmdW5jdGlvbih2YWx1ZSkgewogICAgICAgIGlmICghYXJndW1lbnRzLmxlbmd0aCkgcmV0dXJuIGhlaWdodDsKICAgICAgICBoZWlnaHQgPSB2YWx1ZTsKICAgICAgICByZXR1cm4gY2hhcnQ7CiAgICB9OwoKICAgIHJldHVybiBjaGFydDsKfQoKCgpIVE1MV2lkZ2V0cy53aWRnZXQoewoKICAgIG5hbWU6ICdzY2F0dGVyRDMnLAoKICAgIHR5cGU6ICdvdXRwdXQnLAoKICAgIGZhY3Rvcnk6IGZ1bmN0aW9uKGVsLCB3aWR0aCwgaGVpZ2h0KSB7CgogICAgICAgIGlmICh3aWR0aCA8IDApIHdpZHRoID0gMDsKICAgICAgICBpZiAoaGVpZ2h0IDwgMCkgaGVpZ2h0ID0gMDsKICAgICAgICAvLyBDcmVhdGUgcm9vdCBzdmcgZWxlbWVudAogICAgICAgIHZhciBzdmcgPSBkMy5zZWxlY3QoZWwpLmFwcGVuZCgic3ZnIik7CiAgICAgICAgc3ZnCiAgICAgICAgICAgIC5hdHRyKCJ3aWR0aCIsIHdpZHRoKQogICAgICAgICAgICAuYXR0cigiaGVpZ2h0IiwgaGVpZ2h0KQogICAgICAgICAgICAuYXR0cigiY2xhc3MiLCAic2NhdHRlckQzIikKICAgICAgICAgICAgLmFwcGVuZCgic3R5bGUiKQogICAgICAgICAgICAudGV4dCgiLnNjYXR0ZXJEMyB7Zm9udDogMTFweCBPcGVuIFNhbnMsIERyb2lkIFNhbnMsIEhlbHZldGljYSwgVmVyZGFuYSwgc2Fucy1zZXJpZjt9IiArCgkJICAiLnNjYXR0ZXJEMyAuYXhpcyBsaW5lLCAuYXhpcyBwYXRoIHsgc3Ryb2tlOiAjMDAwOyBmaWxsOiBub25lOyBzaGFwZS1yZW5kZXJpbmc6IENyaXNwRWRnZXM7fSAiICsKCQkgICIuc2NhdHRlckQzIC5heGlzIC50aWNrIGxpbmUgeyBzdHJva2U6ICNkZGQ7fSAiICsKCQkgICIuc2NhdHRlckQzIC5heGlzIHRleHQgeyBmaWxsOiAjMDAwOyB9Iik7CgogICAgICAgIC8vIENyZWF0ZSB0b29sdGlwIGNvbnRlbnQgZGl2CiAgICAgICAgdmFyIHRvb2x0aXAgPSBkMy5zZWxlY3QoIi5zY2F0dGVyRDMtdG9vbHRpcCIpOwogICAgICAgIGlmICh0b29sdGlwLmVtcHR5KCkpIHsKICAgICAgICAgICAgdG9vbHRpcCA9IGQzLnNlbGVjdCgiYm9keSIpCgkJLmFwcGVuZCgiZGl2IikKCQkuc3R5bGUoInZpc2liaWxpdHkiLCAiaGlkZGVuIikKCQkuYXR0cigiY2xhc3MiLCAic2NhdHRlckQzLXRvb2x0aXAiKTsKICAgICAgICB9CgoJLy8gQ3JlYXRlIHRpdGxlIGFuZCBzdWJ0aXRsZSBkaXYKICAgICAgICB2YXIgY2FwdGlvbiA9IGQzLnNlbGVjdChlbCkuc2VsZWN0KCIuc2NhdHRlckQzLWNhcHRpb24iKTsKICAgICAgICBpZiAoY2FwdGlvbi5lbXB0eSgpKSB7CiAgICAgICAgICAgIGNhcHRpb24gPSBkMy5zZWxlY3QoZWwpLmFwcGVuZCgiZGl2IikKCQkuYXR0cigiY2xhc3MiLCAic2NhdHRlckQzLWNhcHRpb24iKTsKICAgICAgICB9CgogICAgICAgIC8vIENyZWF0ZSBtZW51IGRpdgogICAgICAgIHZhciBtZW51ID0gZDMuc2VsZWN0KGVsKS5zZWxlY3QoIi5zY2F0dGVyRDMtbWVudSIpOwogICAgICAgIGlmIChtZW51LmVtcHR5KCkpIHsKICAgICAgICAgICAgbWVudSA9IGQzLnNlbGVjdChlbCkuYXBwZW5kKCJ1bCIpCgkJLmF0dHIoImNsYXNzIiwgInNjYXR0ZXJEMy1tZW51Iik7CiAgICAgICAgfQoKICAgICAgICAvLyBDcmVhdGUgc2NhdHRlckQzIGluc3RhbmNlCiAgICAgICAgdmFyIHNjYXR0ZXIgPSBzY2F0dGVyRDMoKS53aWR0aCh3aWR0aCkuaGVpZ2h0KGhlaWdodCkuc3ZnKHN2Zyk7CgoJcmV0dXJuKHsKICAgICAgICAgICAgcmVzaXplOiBmdW5jdGlvbih3aWR0aCwgaGVpZ2h0KSB7CgoJCWlmICh3aWR0aCA8IDApIHdpZHRoID0gMDsKCQlpZiAoaGVpZ2h0IDwgMCkgaGVpZ2h0ID0gMDsKCQkvLyByZXNpemUgcm9vdCBzdmcgZWxlbWVudAoJCXZhciBzdmcgPSBkMy5zZWxlY3QoZWwpLnNlbGVjdCgic3ZnIik7CgkJc3ZnCgkJICAgIC5hdHRyKCJ3aWR0aCIsIHdpZHRoKQoJCSAgICAuYXR0cigiaGVpZ2h0IiwgaGVpZ2h0KTsKCQkvLyByZXNpemUgY2hhcnQKCQlzY2F0dGVyLndpZHRoKHdpZHRoKS5oZWlnaHQoaGVpZ2h0KS5zdmcoc3ZnKS5yZXNpemUoKTsKICAgICAgICAgICAgfSwKCiAgICAgICAgICAgIHJlbmRlclZhbHVlOiBmdW5jdGlvbihvYmopIHsKCQkvLyBDaGVjayBpZiB1cGRhdGUgb3IgcmVkcmF3CgkJdmFyIGZpcnN0X2RyYXcgPSAoT2JqZWN0LmtleXMoc2NhdHRlci5zZXR0aW5ncygpKS5sZW5ndGggPT09IDApOwoJCXZhciByZWRyYXcgPSBmaXJzdF9kcmF3IHx8ICFvYmouc2V0dGluZ3MudHJhbnNpdGlvbnM7CgkJdmFyIHN2ZyA9IGQzLnNlbGVjdChlbCkuc2VsZWN0KCJzdmciKS5hdHRyKCJpZCIsICJzY2F0dGVyRDMtc3ZnLSIgKyBvYmouc2V0dGluZ3MuaHRtbF9pZCk7CgkJc2NhdHRlciA9IHNjYXR0ZXIuc3ZnKHN2Zyk7CgoJCS8vIGNvbnZlcnQgZGF0YSB0byBkMyBmb3JtYXQKCQl2YXIgZGF0YSA9IEhUTUxXaWRnZXRzLmRhdGFmcmFtZVRvRDMob2JqLmRhdGEpOwoJCWlmIChvYmouc2V0dGluZ3MubGFiZWxzX3Bvc2l0aW9ucykgewoJCSAgICBvYmouc2V0dGluZ3MubGFiZWxzX3Bvc2l0aW9ucyA9IEhUTUxXaWRnZXRzLmRhdGFmcmFtZVRvRDMob2JqLnNldHRpbmdzLmxhYmVsc19wb3NpdGlvbnMpOwoJCX0KCgkJLy8gSWYgbm8gdHJhbnNpdGlvbnMsIHJlbW92ZSBjaGFydCBhbmQgcmVkcmF3IGl0CgkJaWYgKCFvYmouc2V0dGluZ3MudHJhbnNpdGlvbnMpIHsKICAgICAgICAgICAgICAgICAgICBzdmcuc2VsZWN0QWxsKCIqOm5vdChzdHlsZSkiKS5yZW1vdmUoKTsKCQkgICAgbWVudS5zZWxlY3RBbGwoImxpIikucmVtb3ZlKCk7CgkJICAgIGNhcHRpb24uc2VsZWN0QWxsKCIqIikucmVtb3ZlKCk7CgkJfQoKCQkvLyBDb21wbGV0ZSBkcmF3CgkJaWYgKHJlZHJhdykgewogICAgICAgICAgICAgICAgICAgIHNjYXR0ZXIgPSBzY2F0dGVyLmRhdGEoZGF0YSwgcmVkcmF3KTsKICAgICAgICAgICAgICAgICAgICBvYmouc2V0dGluZ3MucmVkcmF3ID0gdHJ1ZTsKICAgICAgICAgICAgICAgICAgICBzY2F0dGVyID0gc2NhdHRlci5zZXR0aW5ncyhvYmouc2V0dGluZ3MpOwogICAgICAgICAgICAgICAgICAgIC8vIGFkZCBjb250cm9scyBoYW5kbGVycyBhbmQgZ2xvYmFsIGxpc3RlbmVycyBmb3Igc2hpbnkgYXBwcwogICAgICAgICAgICAgICAgICAgIHNjYXR0ZXIuYWRkX2NvbnRyb2xzX2hhbmRsZXJzKCk7CiAgICAgICAgICAgICAgICAgICAgc2NhdHRlci5hZGRfZ2xvYmFsX2xpc3RlbmVycygpOwogICAgICAgICAgICAgICAgICAgIC8vIGRyYXcgY2hhcnQKICAgICAgICAgICAgICAgICAgICBkMy5zZWxlY3QoZWwpCgkJCS5jYWxsKHNjYXR0ZXIpOwoJCX0KCQkvLyBVcGRhdGUgb25seQoJCWVsc2UgewoJCSAgICAvLyBBcnJheSBlcXVhbGl0eSB0ZXN0CgkJICAgIGZ1bmN0aW9uIGFycmF5X2VxdWFsIChhMSwgYTIpIHsKCQkJcmV0dXJuIGExLmxlbmd0aCA9PSBhMi5sZW5ndGggJiYgYTEuZXZlcnkoZnVuY3Rpb24odixpKSB7IHJldHVybiB2ID09PSBhMltpXTt9KTsKCQkgICAgfQoKICAgICAgICAgICAgICAgICAgICAvLyBDaGVjayB3aGF0IGRpZCBjaGFuZ2UKICAgICAgICAgICAgICAgICAgICBvYmouc2V0dGluZ3MuaGFzX2xlZ2VuZF9jaGFuZ2VkID0gc2NhdHRlci5zZXR0aW5ncygpLmhhc19sZWdlbmQgIT0gb2JqLnNldHRpbmdzLmhhc19sZWdlbmQ7CiAgICAgICAgICAgICAgICAgICAgb2JqLnNldHRpbmdzLmhhc19sYWJlbHNfY2hhbmdlZCA9IHNjYXR0ZXIuc2V0dGluZ3MoKS5oYXNfbGFiZWxzICE9IG9iai5zZXR0aW5ncy5oYXNfbGFiZWxzOwogICAgICAgICAgICAgICAgICAgIG9iai5zZXR0aW5ncy5zaXplX3JhbmdlX2NoYW5nZWQgPSAhYXJyYXlfZXF1YWwoc2NhdHRlci5zZXR0aW5ncygpLnNpemVfcmFuZ2UsIG9iai5zZXR0aW5ncy5zaXplX3JhbmdlKTsKICAgICAgICAgICAgICAgICAgICBvYmouc2V0dGluZ3MuZWxsaXBzZXNfY2hhbmdlZCA9IHNjYXR0ZXIuc2V0dGluZ3MoKS5lbGxpcHNlcyAhPSBvYmouc2V0dGluZ3MuZWxsaXBzZXM7CgkJICAgIG9iai5zZXR0aW5ncy5jb2xvcnNfY2hhbmdlZCA9IHNjYXR0ZXIuc2V0dGluZ3MoKS5jb2xvcnMgIT0gb2JqLnNldHRpbmdzLmNvbG9yczsKCQkgICAgb2JqLnNldHRpbmdzLnhfbG9nX2NoYW5nZWQgPSBzY2F0dGVyLnNldHRpbmdzKCkueF9sb2cgIT0gb2JqLnNldHRpbmdzLnhfbG9nOwoJCSAgICBvYmouc2V0dGluZ3MueV9sb2dfY2hhbmdlZCA9IHNjYXR0ZXIuc2V0dGluZ3MoKS55X2xvZyAhPSBvYmouc2V0dGluZ3MueV9sb2c7CgkJICAgIG9iai5zZXR0aW5ncy54bGltX2NoYW5nZWQgPSBzY2F0dGVyLnNldHRpbmdzKCkueGxpbSAhPSBvYmouc2V0dGluZ3MueGxpbTsKCQkgICAgb2JqLnNldHRpbmdzLnlsaW1fY2hhbmdlZCA9IHNjYXR0ZXIuc2V0dGluZ3MoKS55bGltICE9IG9iai5zZXR0aW5ncy55bGltOwoKCQkgICAgb2JqLnNldHRpbmdzLmhhZF9jb2xvcl92YXIgPSBzY2F0dGVyLnNldHRpbmdzKCkuaGFzX2NvbG9yX3ZhcjsKCQkgICAgb2JqLnNldHRpbmdzLmhhZF9zeW1ib2xfdmFyID0gc2NhdHRlci5zZXR0aW5ncygpLmhhc19zeW1ib2xfdmFyOwoJCSAgICBvYmouc2V0dGluZ3MuaGFkX3NpemVfdmFyID0gc2NhdHRlci5zZXR0aW5ncygpLmhhc19zaXplX3ZhcjsKCgkJICAgIGZ1bmN0aW9uIGNoYW5nZWQodmFybmFtZSkgewoJCQlyZXR1cm4gb2JqLnNldHRpbmdzLmhhc2hlc1t2YXJuYW1lXSAhPSBzY2F0dGVyLnNldHRpbmdzKCkuaGFzaGVzW3Zhcm5hbWVdOwogICAgICAgICAgICAgICAgICAgIH07CiAgICAgICAgICAgICAgICAgICAgb2JqLnNldHRpbmdzLnhfY2hhbmdlZCA9IGNoYW5nZWQoIngiKTsKICAgICAgICAgICAgICAgICAgICBvYmouc2V0dGluZ3MueV9jaGFuZ2VkID0gY2hhbmdlZCgieSIpOwogICAgICAgICAgICAgICAgICAgIG9iai5zZXR0aW5ncy5sYWJfY2hhbmdlZCA9IGNoYW5nZWQoImxhYiIpOwoJCSAgICBvYmouc2V0dGluZ3MuY29sX2NoYW5nZWQgPSBjaGFuZ2VkKCJjb2xfdmFyIikgfHwKCQkJb2JqLnNldHRpbmdzLmNvbG9yc19jaGFuZ2VkOwoJCSAgICBvYmouc2V0dGluZ3Muc2l6ZV9jaGFuZ2VkID0gY2hhbmdlZCgic2l6ZV92YXIiKSB8fAoJCQlvYmouc2V0dGluZ3Muc2l6ZV9yYW5nZV9jaGFuZ2VkOwoJCSAgICBvYmouc2V0dGluZ3Muc3ltYm9sX2NoYW5nZWQgPSBjaGFuZ2VkKCJzeW1ib2xfdmFyIik7CiAgICAgICAgICAgICAgICAgICAgb2JqLnNldHRpbmdzLmxlZ2VuZF9jaGFuZ2VkID0gb2JqLnNldHRpbmdzLmNvbF9jaGFuZ2VkIHx8CgkJCW9iai5zZXR0aW5ncy5zeW1ib2xfY2hhbmdlZCB8fAoJCQlvYmouc2V0dGluZ3Muc2l6ZV9jaGFuZ2VkOwogICAgICAgICAgICAgICAgICAgIG9iai5zZXR0aW5ncy5kYXRhX2NoYW5nZWQgPSBvYmouc2V0dGluZ3MueF9jaGFuZ2VkIHx8CgkJCW9iai5zZXR0aW5ncy55X2NoYW5nZWQgfHwKCQkJb2JqLnNldHRpbmdzLmxhYl9jaGFuZ2VkIHx8CgkJCW9iai5zZXR0aW5ncy5sZWdlbmRfY2hhbmdlZCB8fAoJCQlvYmouc2V0dGluZ3MuaGFzX2xhYmVsc19jaGFuZ2VkIHx8CgkJCWNoYW5nZWQoImVsbGlwc2VzX2RhdGEiKSB8fAoJCQlvYmouc2V0dGluZ3MuZWxsaXBzZXNfY2hhbmdlZCB8fAoJCQlvYmouc2V0dGluZ3MueF9sb2dfY2hhbmdlZCB8fAoJCQlvYmouc2V0dGluZ3MueV9sb2dfY2hhbmdlZCB8fAoJCQlvYmouc2V0dGluZ3MueGxpbV9jaGFuZ2VkIHx8CgkJCW9iai5zZXR0aW5ncy55bGltX2NoYW5nZWQgfHwKCQkJY2hhbmdlZCgib3BhY2l0eV92YXIiKSB8fAoJCQljaGFuZ2VkKCJsaW5lcyIpOwoKCQkgICAgLy8gVXBkYXRlIHNldHRpbmdzCiAgICAgICAgICAgICAgICAgICAgc2NhdHRlciA9IHNjYXR0ZXIuc2V0dGluZ3Mob2JqLnNldHRpbmdzKTsKICAgICAgICAgICAgICAgICAgICAvLyBVcGRhdGUgZGF0YSBvbmx5IGlmIG5lZWRlZAogICAgICAgICAgICAgICAgICAgIGlmIChvYmouc2V0dGluZ3MuZGF0YV9jaGFuZ2VkKSBzY2F0dGVyID0gc2NhdHRlci5kYXRhKGRhdGEsIHJlZHJhdyk7CgkJfQogICAgICAgICAgICB9LAoKICAgICAgICAgICAgczogc2NhdHRlcgoJfSk7CiAgICB9Cn0pOwo="></script>
</head>
<body style="background-color:white;">
<div id="htmlwidget_container">
<div id="htmlwidget-b7435ae06a8e1a138be0" style="width:960px;height:500px;" class="scatterD3 html-widget"></div>
</div>
<script type="application/json" data-for="htmlwidget-b7435ae06a8e1a138be0">{"x":{"data":{"x":[0.971484211041739,0.954406588009535,0.843083053298353,0.958341614660365,0.910219263665683,0.965995175264141,0.967601209694857,0.956539283624443,0.843524256157348,0.953117086110139,0.909776138156644,0.96652589906596,0.932775980210885,0.952091248419092,0.845822695230511,0.920177653689669,0.902108073894977,0.957454095545952,0.875064727211005,0.946845405823116,0.840571365586817,0.868826927697466,0.881011083717807,0.943728373650207,0.898705505417564,0.952810262001966,0.853951339745966,0.896328710035976,0.899060457349452,0.955331201421736,0.983270863511924,0.935469766088331,0.911971600339774,0.958438351465796,0.957761403451895,0.971322277982163,0.942253823996861,0.935372746013321,0.883910868999411,0.924796588302771,0.928825614034941,0.956187096156954,0.737712272938313,0.859955333355031,0.718000426072079,0.729894928804224,0.77455526916333,0.834589039300918,0.965568521217713,-0.106269818836669,0.70357932602774,0.789521934438837,0.877491725750915,0.763198738142313,0.913279773647558,0.796655969293376,0.847561428158811,0.893903189189923,0.877159631153812,0.85206101073419,0.985116010840035,0.915684073104097,0.79985244276895,0.816330860488426,0.904374038886032,0.948830750482768,0.987696793468512,0.92370006353105,0.869565044932144,0.878517272412739,0.937558230580537,0.956627029623909,0.943112711566024,0.942074897721521,0.918716196222782,0.928166766521808,0.94275152468267,0.951318204290781,0.890163815424478,0.783661079526733,0.827946567121668,0.828344526534427,0.881436645127739,0.806611248234294,0.912734032003193,0.850703917607839,0.831960983632658,0.836578879179211,0.885134358367623,0.808409680757251],"y":["12. Score0to1000","12. Score0to1000","12. Score0to1000","12. Score0to1000","12. Score0to1000","12. Score0to1000","11. Score0to10","11. Score0to10","11. Score0to10","11. Score0to10","11. Score0to10","11. Score0to10","10. Score0to2","10. Score0to2","10. Score0to2","10. Score0to2","10. Score0to2","10. Score0to2"," 9. IdealApproval"," 9. IdealApproval"," 9. IdealApproval"," 9. IdealApproval"," 9. IdealApproval"," 9. IdealApproval"," 8. BulletyApproval60"," 8. BulletyApproval60"," 8. BulletyApproval60"," 8. BulletyApproval60"," 8. BulletyApproval60"," 8. BulletyApproval60","13. Star0to10","13. Star0to10","13. Star0to10","13. Star0to10","13. Star0to10","13. Star0to10","14. Star0to2","14. Star0to2","14. Star0to2","14. Star0to2","14. Star0to2","14. Star0to2"," 1. Plurality"," 1. Plurality"," 1. Plurality"," 1. Plurality"," 1. Plurality"," 1. Plurality"," 2. Borda"," 2. Borda"," 2. Borda"," 2. Borda"," 2. Borda"," 2. Borda"," 5. Irv"," 5. Irv"," 5. Irv"," 5. Irv"," 5. Irv"," 5. Irv"," 6. Schulze"," 6. Schulze"," 6. Schulze"," 6. Schulze"," 6. Schulze"," 6. Schulze"," 7. Rp"," 7. Rp"," 7. Rp"," 7. Rp"," 7. Rp"," 7. Rp","15. V321","15. V321","15. V321","15. V321","15. V321","15. V321"," 3. Mav"," 3. Mav"," 3. Mav"," 3. Mav"," 3. Mav"," 3. Mav"," 4. Mj"," 4. Mj"," 4. Mj"," 4. Mj"," 4. Mj"," 4. Mj"],"col_var":["a.100% honest","f.100% strategic","e.100% 1-sided strategy","d.Smart 1-sided strat.","b.50% 1-sided strategy","c.50% strategic","a.100% honest","f.100% strategic","e.100% 1-sided strategy","d.Smart 1-sided strat.","b.50% 1-sided strategy","c.50% strategic","a.100% honest","f.100% strategic","e.100% 1-sided strategy","d.Smart 1-sided strat.","b.50% 1-sided strategy","c.50% strategic","a.100% honest","f.100% strategic","e.100% 1-sided strategy","d.Smart 1-sided strat.","b.50% 1-sided strategy","c.50% strategic","a.100% honest","f.100% strategic","e.100% 1-sided strategy","d.Smart 1-sided strat.","b.50% 1-sided strategy","c.50% strategic","a.100% honest","f.100% strategic","e.100% 1-sided strategy","d.Smart 1-sided strat.","b.50% 1-sided strategy","c.50% strategic","a.100% honest","f.100% strategic","e.100% 1-sided strategy","d.Smart 1-sided strat.","b.50% 1-sided strategy","c.50% strategic","a.100% honest","f.100% strategic","e.100% 1-sided strategy","d.Smart 1-sided strat.","b.50% 1-sided strategy","c.50% strategic","a.100% honest","f.100% strategic","e.100% 1-sided strategy","d.Smart 1-sided strat.","b.50% 1-sided strategy","c.50% strategic","a.100% honest","f.100% strategic","e.100% 1-sided strategy","d.Smart 1-sided strat.","b.50% 1-sided strategy","c.50% strategic","a.100% honest","f.100% strategic","e.100% 1-sided strategy","d.Smart 1-sided strat.","b.50% 1-sided strategy","c.50% strategic","a.100% honest","f.100% strategic","e.100% 1-sided strategy","d.Smart 1-sided strat.","b.50% 1-sided strategy","c.50% strategic","a.100% honest","f.100% strategic","e.100% 1-sided strategy","d.Smart 1-sided strat.","b.50% 1-sided strategy","c.50% strategic","a.100% honest","f.100% strategic","e.100% 1-sided strategy","d.Smart 1-sided strat.","b.50% 1-sided strategy","c.50% strategic","a.100% honest","f.100% strategic","e.100% 1-sided strategy","d.Smart 1-sided strat.","b.50% 1-sided strategy","c.50% strategic"],"key_var":[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]},"settings":{"x_log":false,"y_log":false,"labels_size":10,"labels_positions":null,"point_size":64,"point_opacity":1,"hover_size":1,"hover_opacity":null,"xlab":"vse","ylab":"method","has_labels":false,"col_lab":"strategy","col_continuous":false,"colors":null,"ellipses":false,"ellipses_data":[],"symbol_lab":"NULL","size_range":[10,300],"size_lab":"NULL","opacity_lab":"NULL","unit_circle":false,"has_color_var":true,"has_symbol_var":false,"has_size_var":false,"has_opacity_var":false,"has_url_var":false,"has_legend":true,"has_tooltips":true,"tooltip_text":null,"has_custom_tooltips":false,"click_callback":null,"zoom_callback":null,"fixed":false,"legend_width":150,"left_margin":90,"html_id":"scatterD3-HCVATVBW","xlim":[-0.2,1],"ylim":null,"x_categorical":false,"y_categorical":true,"menu":true,"lasso":false,"lasso_callback":null,"dom_id_reset_zoom":"scatterD3-reset-zoom","dom_id_svg_export":"scatterD3-svg-export","dom_id_lasso_toggle":"scatterD3-lasso-toggle","transitions":false,"axes_font_size":"100%","legend_font_size":"100%","caption":null,"lines":{"slope":[0,null],"intercept":[0,0],"stroke_dasharray":[5,5]},"hashes":[]}},"evals":[],"jsHooks":[]}</script>
<script type="application/htmlwidget-sizing" data-for="htmlwidget-b7435ae06a8e1a138be0">{"viewer":{"width":450,"height":350,"padding":15,"fill":true},"browser":{"width":960,"height":500,"padding":40,"fill":true}}</script>
</body>
</html>