@sprig-technologies/sprig-browser 2.14.2 → 2.14.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/controller/controller.js +34 -32
- package/controller/encodedViewJs.js +1 -1
- package/controller/queue.js +1 -2
- package/index.js +2 -1
- package/package.json +1 -1
- package/shared/network.js +1 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
export default 'LyohIEZvciBsaWNlbnNlIGluZm9ybWF0aW9uIHBsZWFzZSBzZWUgdXNlcmxlYXAtd2ViLXZpZXctc2RrLXYyLjE0LjIuanMuTElDRU5TRS50eHQgKi8KIWZ1bmN0aW9uKCl7dmFyIHQ9ezkzMTMwOmZ1bmN0aW9uKHQsZSxuKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gcih0LGUpe3JldHVybiBuZXcgUHJvbWlzZSgoZnVuY3Rpb24obil7c2V0VGltZW91dChuLmJpbmQobnVsbCxlKSx0KX0pKX1uLnIoZSksbi5kKGUse2RlbGF5OmZ1bmN0aW9uKCl7cmV0dXJuIHJ9LE5FVFdPUktfQ09ORklHOmZ1bmN0aW9uKCl7cmV0dXJuIG99fSk7dmFyIG89e1JBVEVMSU1JVF9SRVNFVF9ERUZBVUxUOjEwfX0sNzc4ODpmdW5jdGlvbih0LGUsbil7KGU9bigxODk4NikoITEpKS5wdXNoKFt0LmlkLCIudWwtY2FyZCB7XG4gIGZsZXg6IDEgMSBhdXRvO1xuICBib3JkZXItcmFkaXVzOiAycHg7XG4gIGRpc3BsYXk6IGZsZXg7XG4gIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XG4gIGZvbnQtc2l6ZTogMTdweDtcbiAgbGluZS1oZWlnaHQ6IDE5cHg7XG4gIHRleHQtYWxpZ246IGxlZnQ7XG59XG5cbi51bC1jYXJkX19jb250YWluZXItLWRlc2t0b3Age1xuICBtYXJnaW46IDE1cHg7XG4gIGJvcmRlcjogMnB4IHNvbGlkICNmZmY7XG4gIGJveC1zaGFkb3c6IDBweCAwcHggMTVweCByZ2JhKDAsIDAsIDAsIDAuMTUpO1xufVxuXG4udWwtY2FyZF9fY29udGFpbmVyLS1tb2JpbGUge1xuICBib3JkZXItd2lkdGg6IDA7XG4gIGJveC1zaGFkb3c6IDBweCAwcHggNXB4IHJnYmEoMCwgMCwgMCwgMC4yNSk7XG4gIG1hcmdpbi10b3A6IDVweDtcbn1cblxuLnVsLWNhcmRfX2NvbnRhaW5lciB7XG4gIHBhZGRpbmc6IDIwcHggMjBweCA1cHggMjBweDtcbiAgZmxleDogMSAxIGF1dG87XG4gIGJhY2tncm91bmQ6ICNmZmZmZmY7XG4gIGRpc3BsYXk6IGZsZXg7XG4gIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XG4gIGZvbnQtc2l6ZTogMTdweDtcbiAgbGluZS1oZWlnaHQ6IDIzcHg7XG4gIHRleHQtYWxpZ246IGNlbnRlcjtcbiAgb3ZlcmZsb3c6IGF1dG87XG4gIGJvcmRlci1yYWRpdXM6IDZweDtcbn1cblxuLnVsLXF1ZXN0aW9uIHtcbiAgZmxleDogMSAwIGF1dG87XG4gIGNvbG9yOiAjMzQzNDQyO1xuICBkaXNwbGF5OiBibG9jaztcbiAgZm9udC1zaXplOiAyMHB4O1xuICBsaW5lLWhlaWdodDogMTI1JTtcbiAgZm9udC13ZWlnaHQ6IDUwMDtcbiAgY3Vyc29yOiBkZWZhdWx0O1xuICB0ZXh0LWFsaWduOiBsZWZ0O1xufVxuXG4udWwtY2FwdGlvbiB7XG4gIGZsZXg6IDEgMCBhdXRvO1xuICBtYXJnaW4tdG9wOiA4cHg7XG4gIG1hcmdpbi1ib3R0b206IDE1cHg7XG4gIGZvbnQtc2l6ZTogMTVweDtcbiAgbGluZS1oZWlnaHQ6IDEzMC4zNSU7XG4gIGxldHRlci1zcGFjaW5nOiAwLjAyZW07XG4gIGNvbG9yOiAjNmM2YzZlO1xuICB0ZXh0LWFsaWduOiBsZWZ0O1xufVxuXG4udWwtY2FyZC0tbXVsdGlwbGUge1xuICBtYXJnaW4tdG9wOiAxNXB4O1xufVxuXG4udWwtY2FyZF9fY2hvaWNlcyB7XG4gIG1hcmdpbjogNXB4IDAgMCAwO1xuICBmbGV4OiAxIDA7XG4gIGhlaWdodDogMTAwJTtcbn1cblxuLmNob2ljZS0tbW9iaWxlIHtcbiAgYm9yZGVyOiAycHggc29saWQgI2U2ZTZlNjtcbn1cblxuLmNob2ljZS0tZGVza3RvcCB7XG4gIGJvcmRlcjogMXB4IHNvbGlkICNlNmU2ZTY7XG59XG5cbi5jaG9pY2Uge1xuICBhbGlnbi1pdGVtczogY2VudGVyO1xuICBjb2xvcjogIzI2MjEzNjtcbiAgY3Vyc29yOiBwb2ludGVyO1xuICBkaXNwbGF5OiBmbGV4O1xuICBqdXN0aWZ5LWNvbnRlbnQ6IGZsZXgtc3RhcnQ7XG5cbiAgYm94LXNpemluZzogYm9yZGVyLWJveDtcbiAgYm9yZGVyLXJhZGl1czogM3B4O1xuXG4gIG1hcmdpbi1ib3R0b206IDdweDtcbiAgZm9udC1zaXplOiAxNXB4O1xuICBsaW5lLWhlaWdodDogMjBweDtcbiAgcGFkZGluZzogMTBweCAyMHB4IDEwcHggMTVweDtcbiAgYmFja2dyb3VuZC1jb2xvcjogcmdiYSgwLCAwLCAwLCAwLjAxKTtcbn1cblxuLmNob2ljZS0tZGVza3RvcDpob3ZlciB7XG4gIGJhY2tncm91bmQtY29sb3I6IHJnYmEoMCwgMCwgMCwgMC4wNSk7XG59XG5cbi5jaG9pY2UtLWRlc2t0b3A6YWN0aXZlLFxuLmNob2ljZS0tbW9iaWxlOmFjdGl2ZSB7XG4gIGJhY2tncm91bmQtY29sb3I6IHJnYmEoMCwgMCwgMCwgMC4wNSk7XG59XG5cbi51bC1jYXJkLS10aGFua3Mge1xuICBtYXJnaW4tdG9wOiAxNXB4O1xufVxuXG4udWwtdGhhbmtzLWNoZWNrIHtcbiAgdGV4dC1hbGlnbjogY2VudGVyO1xuICBtYXJnaW4tYm90dG9tOiAyMHB4O1xufVxuXG4udWwtY2FyZC0tdGhhbmtzLWNvbnRlbnQge1xuICBwYWRkaW5nOiAyMHB4IDAgMTBweCAwO1xufVxuXG4udWwtY2FyZC0tdGhhbmtzIC51bC1xdWVzdGlvbiB7XG4gIHBhZGRpbmctdG9wOiAwO1xuICB0ZXh0LWFsaWduOiBjZW50ZXI7XG59XG5cbi51bC1jYXJkLS10aGFua3MgLnVsLWNhcHRpb24ge1xuICBwYWRkaW5nLXRvcDogMDtcbiAgdGV4dC1hbGlnbjogY2VudGVyO1xuICBvdmVyZmxvdy13cmFwOiBicmVhay13b3JkO1xuICBoeXBoZW5zOiBhdXRvO1xuICBoeXBoZW5hdGUtbGltaXQtbGluZXM6IG5vLWxpbWl0O1xufVxuXG4uc2VsZWN0LWNoZWNrYm94IHtcbiAgaGVpZ2h0OiAxNnB4O1xuICB3aWR0aDogMTZweDtcbiAgYm9yZGVyLXJhZGl1czogM3B4O1xuICBib3JkZXI6IDFweCBzb2xpZCAjMzIzMjMyO1xuICBkaXNwbGF5OiBmbGV4O1xuICBib3gtc2l6aW5nOiBib3JkZXItYm94O1xuICBib3gtc2hhZG93OiBpbnNldCAzcHggM3B4IDBweCByZ2JhKDAsIDAsIDAsIDAuMSk7XG4gIGJhY2tncm91bmQtY29sb3I6ICd0cmFuc3BhcmVudCc7XG4gIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gIGp1c3RpZnktY29udGVudDogY2VudGVyO1xufVxuXG4uc2VsZWN0LXJhZGlvIHtcbiAgaGVpZ2h0OiAxNnB4O1xuICB3aWR0aDogMTZweDtcbiAgYm9yZGVyLXJhZGl1czogMTZweDtcbiAgYm9yZGVyOiAxcHggc29saWQgIzMyMzIzMjtcbiAgZGlzcGxheTogZmxleDtcbiAgYm94LXNpemluZzogYm9yZGVyLWJveDtcbiAgYm94LXNoYWRvdzogaW5zZXQgMnB4IDJweCAwcHggcmdiYSgwLCAwLCAwLCAwLjEpO1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAndHJhbnNwYXJlbnQnO1xuICBhbGlnbi1pdGVtczogY2VudGVyO1xuICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjtcbn1cblxuLyogTGluayBzdHVkaWVzIHdpZGUgc2NyZWVuIHZpZXcgKi9cbkBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG1pbi13aWR0aDogNjAwcHgpIHtcbiAgLnVsLWNhcmRfX2NvbnRhaW5lci0tZGVza3RvcCB7XG4gICAgYm94LXNoYWRvdzogdW5zZXQ7XG4gIH1cblxuICAudWwtY2FyZF9fY29udGFpbmVyIHtcbiAgICBib3JkZXItcmFkaXVzOiB1bnNldDtcbiAgICBib3JkZXI6IG5vbmUgIWltcG9ydGFudDtcbiAgfVxufVxuXG4uZmFkZS1pbi10cmFuc2l0aW9uIHtcbiAgYW5pbWF0aW9uOiBmYWRlSW4gNDAwbXMgZWFzZS1pbjtcbiAgLXdlYmtpdC1hbmltYXRpb246IGZhZGVJbiA0MDBtcyBlYXNlLWluO1xuICAtbW96LWFuaW1hdGlvbjogZmFkZUluIDQwMG1zIGVhc2UtaW47XG4gIC1vLWFuaW1hdGlvbjogZmFkZUluIDQwMG1zIGVhc2UtaW47XG4gIC1tcy1hbmltYXRpb246IGZhZGVJbiA0MDBtcyBlYXNlLWluO1xufVxuXG5Aa2V5ZnJhbWVzIGZhZGVJbiB7XG4gIDAlIHtcbiAgICBvcGFjaXR5OiAwO1xuICB9XG4gIDEwMCUge1xuICAgIG9wYWNpdHk6IDE7XG4gIH1cbn1cblxuQC1tb3ota2V5ZnJhbWVzIGZhZGVJbiB7XG4gIDAlIHtcbiAgICBvcGFjaXR5OiAwO1xuICB9XG4gIDEwMCUge1xuICAgIG9wYWNpdHk6IDE7XG4gIH1cbn1cblxuQC13ZWJraXQta2V5ZnJhbWVzIGZhZGVJbiB7XG4gIDAlIHtcbiAgICBvcGFjaXR5OiAwO1xuICB9XG4gIDEwMCUge1xuICAgIG9wYWNpdHk6IDE7XG4gIH1cbn1cblxuQC1vLWtleWZyYW1lcyBmYWRlSW4ge1xuICAwJSB7XG4gICAgb3BhY2l0eTogMDtcbiAgfVxuICAxMDAlIHtcbiAgICBvcGFjaXR5OiAxO1xuICB9XG59XG5cbkAtbXMta2V5ZnJhbWVzIGZhZGVJbiB7XG4gIDAlIHtcbiAgICBvcGFjaXR5OiAwO1xuICB9XG4gIDEwMCUge1xuICAgIG9wYWNpdHk6IDE7XG4gIH1cbn1cbiIsIiJdKSx0LmV4cG9ydHM9ZX0sNDcwNjY6ZnVuY3Rpb24odCxlLG4pe3ZhciByPW4oMTg5ODYpLG89bigxMDY2OSksaT1uKDc3ODgpLGE9big4NjU1OCksYz1uKDYwNjMyKSxzPW4oNDIwMDUpLHU9big3NjQyOCksbD1uKDczNTIzKSxmPW4oNjM1NTMpOyhlPXIoITEpKS5pKG8pLGUuaShpKSxlLmkoYSksZS5pKGMpLGUuaShzKSxlLmkodSksZS5pKGwpLGUuaShmKSxlLnB1c2goW3QuaWQsImh0bWwsXG5ib2R5IHtcbiAgY3Vyc29yOiBkZWZhdWx0O1xuICBmb250LWZhbWlseTogLWFwcGxlLXN5c3RlbSwgQmxpbmtNYWNTeXN0ZW1Gb250LCAnU2Vnb2UgVUknLCBSb2JvdG8sIEhlbHZldGljYSwgQXJpYWwsIHNhbnMtc2VyaWYsICdBcHBsZSBDb2xvciBFbW9qaScsXG4gICAgJ1NlZ29lIFVJIEVtb2ppJywgJ1NlZ29lIFVJIFN5bWJvbCc7XG4gIGhlaWdodDogMTAwJTtcbiAgb3ZlcmZsb3c6IGhpZGRlbjtcbiAgLXdlYmtpdC10YXAtaGlnaGxpZ2h0LWNvbG9yOiB0cmFuc3BhcmVudDtcbiAgLXdlYmtpdC11c2VyLXNlbGVjdDogbm9uZTtcbiAgLXdlYmtpdC10b3VjaC1jYWxsb3V0OiBub25lO1xufVxuXG5iIHtcbiAgZm9udC13ZWlnaHQ6IDUwMDtcbn1cblxuI3VsLWFwcCB7XG4gIG9wYWNpdHk6IDA7XG4gIHdpZHRoOiAxMDAlO1xufVxuXG4jdWwtYXBwLnVsLWFwcC0tb3ZlcmxheSB7XG4gIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgYm90dG9tOiAwO1xuICB0cmFuc2l0aW9uOiBvcGFjaXR5IDAuMXMgZWFzZS1vdXQ7XG59XG5cbiN1bC1hcHAudWwtYXBwLS12aXNpYmxlIHtcbiAgb3BhY2l0eTogMTtcbiAgYm90dG9tOiAwO1xufVxuXG4udWwtYXBwX19jb250YWluZXIge1xuICB3aWR0aDogMTAwJTtcbiAgZGlzcGxheTogZmxleDtcbiAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcbiAgcG9zaXRpb246IHJlbGF0aXZlO1xuICBtYXgtaGVpZ2h0OiAxMDB2aDtcbn1cblxuLnVsLWZvb3RlciB7XG4gIGRpc3BsYXk6IGZsZXg7XG4gIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XG4gIGZsZXgtc2hyaW5rOiAwO1xuICBhbGlnbi1pdGVtczogY2VudGVyO1xuICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjtcbiAgbWFyZ2luLXRvcDogMTBweDtcbn1cblxuLnVsLWZvb3Rlci1idWJibGUge1xuICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XG4gIG1hcmdpbjogMCAzcHg7XG4gIHdpZHRoOiA3cHg7XG4gIGhlaWdodDogN3B4O1xuICBib3JkZXItcmFkaXVzOiAzcHg7XG4gIGJvcmRlcjogMXB4IHNvbGlkIHRyYW5zcGFyZW50O1xufVxuXG4uY2xvc2UtY29udGFpbmVyLS1kZXNrdG9wLFxuLmNsb3NlLWNvbnRhaW5lci0tbW9iaWxlIHtcbiAgaGVpZ2h0OiAyMnB4O1xuICB3aWR0aDogMjJweDtcbiAgYm9yZGVyLXJhZGl1czogMjJweDtcbiAgYmFja2dyb3VuZC1jb2xvcjogI2ZmZmZmZjtcbiAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7XG59XG5cbi5jbG9zZS1jb250YWluZXItLWRlc2t0b3Age1xuICB0b3A6IDI1cHg7XG4gIHJpZ2h0OiAyNXB4O1xufVxuXG4uY2xvc2UtY29udGFpbmVyLS1tb2JpbGUge1xuICB0b3A6IDE1cHg7XG4gIHJpZ2h0OiAxMHB4O1xufVxuXG4uY2xvc2UtY29udGFpbmVyIHtcbiAgYm94LXNpemluZzogYm9yZGVyLWJveDtcbiAgZGlzcGxheTogZmxleDtcbiAgcG9zaXRpb246IGFic29sdXRlO1xufVxuXG4uY2xvc2UtYnRuIHtcbiAgaGVpZ2h0OiAxOHB4O1xuICB3aWR0aDogMThweDtcbiAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7XG4gIGRpc3BsYXk6IGZsZXg7XG4gIGN1cnNvcjogcG9pbnRlcjtcbn1cblxuLnVsLWFwcF9fY29udGFpbmVyIHtcbiAgdHJhbnNpdGlvbjogb3BhY2l0eSAwLjNzIGVhc2Utb3V0O1xufVxuIiwiIl0pLHQuZXhwb3J0cz1lfSw4NjU1ODpmdW5jdGlvbih0LGUsbil7KGU9bigxODk4NikoITEpKS5wdXNoKFt0LmlkLCIvKiBpZGVudGljYWwgdG8gbnBzLmNzcywgb3RoZXIgdGhhbiBjbGFzcyBuYW1lcy4gKi9cbi51bC1jYXJkLS1saWtlcnQge1xuICBtYXJnaW4tdG9wOiAxNXB4O1xufVxuXG4udWwtY2FyZC0tbGlrZXJ0X19udW1iZXJzIHtcbiAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAgYm9yZGVyLXJhZGl1czogNXB4O1xuICBkaXNwbGF5OiBmbGV4O1xuICBmbGV4LWRpcmVjdGlvbjogcm93O1xuICBmbGV4OiAxIDA7XG4gIGp1c3RpZnktY29udGVudDogY2VudGVyO1xuICBtYXJnaW46IDVweCAwIDAgMDtcbn1cblxuLmxpa2VydC1udW1iZXItLW1vYmlsZSB7XG4gIGJvcmRlcjogMnB4IHNvbGlkICNlNmU2ZTY7XG4gIG1hcmdpbi1sZWZ0OiAtMnB4O1xufVxuXG4ubGlrZXJ0LW51bWJlci0tZGVza3RvcCB7XG4gIGJvcmRlcjogMXB4IHNvbGlkICNlNmU2ZTY7XG4gIG1hcmdpbi1sZWZ0OiAtMXB4O1xufVxuXG4ubGlrZXJ0LW51bWJlciB7XG4gIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gIGN1cnNvcjogcG9pbnRlcjtcbiAgZGlzcGxheTogZmxleDtcbiAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7XG4gIGZsZXg6IDEgMDtcblxuICBiYWNrZ3JvdW5kLWNvbG9yOiByZ2JhKDAsIDAsIDAsIDAuMDEpO1xuICBmb250LXNpemU6IDE4cHg7XG4gIGxpbmUtaGVpZ2h0OiAyNHB4O1xuICBoZWlnaHQ6IDY3cHg7XG59XG5cbi5saWtlcnQtbnVtYmVyOmFjdGl2ZSB7XG4gIGJhY2tncm91bmQtY29sb3I6IHJnYmEoMCwgMCwgMCwgMC4wNSk7XG4gIGZvbnQtd2VpZ2h0OiA1MDA7XG59XG5cbi5saWtlcnQtbnVtYmVyLS1kZXNrdG9wOmhvdmVyIHtcbiAgYmFja2dyb3VuZC1jb2xvcjogcmdiYSgwLCAwLCAwLCAwLjA1KTtcbiAgZm9udC13ZWlnaHQ6IDUwMDtcbn1cblxuLmxpa2VydC1udW1iZXItMSB7XG4gIGJvcmRlci10b3AtbGVmdC1yYWRpdXM6IDVweDtcbiAgYm9yZGVyLWJvdHRvbS1sZWZ0LXJhZGl1czogNXB4O1xufVxuXG4ubGlrZXJ0LW51bWJlci01IHtcbiAgYm9yZGVyLXRvcC1yaWdodC1yYWRpdXM6IDVweDtcbiAgYm9yZGVyLWJvdHRvbS1yaWdodC1yYWRpdXM6IDVweDtcbn1cblxuLnVsLWNhcmQtLWxpa2VydF9fbGFiZWxzIHtcbiAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAgY29sb3I6ICMyNjIxMzY7XG4gIGRpc3BsYXk6IGZsZXg7XG4gIGZsZXgtZGlyZWN0aW9uOiByb3c7XG4gIGZsZXg6IDEgMDtcbiAgZm9udC13ZWlnaHQ6IDUwMDtcbiAgZm9udC1zaXplOiAxM3B4O1xuICBsaW5lLWhlaWdodDogMTVweDtcbiAganVzdGlmeS1jb250ZW50OiBzcGFjZS1iZXR3ZWVuO1xuICBtYXJnaW46IDdweCAwIDEwcHggMDtcbn1cblxuLnVsLWNhcmQtLWxpa2VydF9fbGFiZWxzIHNwYW46bGFzdC1jaGlsZCB7XG4gIHRleHQtYWxpZ246IHJpZ2h0O1xufVxuIiwiIl0pLHQuZXhwb3J0cz1lfSw2MDYzMjpmdW5jdGlvbih0LGUsbil7KGU9bigxODk4NikoITEpKS5wdXNoKFt0LmlkLCIuc2VsZWN0LWxhYmVsIHtcbiAgZmxleDogMTtcbiAgb3ZlcmZsb3ctd3JhcDogYW55d2hlcmU7XG4gIGN1cnNvcjogcG9pbnRlcjtcbiAgcGFkZGluZy1sZWZ0OiAxNXB4O1xufVxuIiwiIl0pLHQuZXhwb3J0cz1lfSw0MjAwNTpmdW5jdGlvbih0LGUsbil7KGU9bigxODk4NikoITEpKS5wdXNoKFt0LmlkLCIvKiBpZGVudGljYWwgdG8gbGlrZXJ0LmNzcywgb3RoZXIgdGhhbiBjbGFzcyBuYW1lcy4gKi9cbi51bC1jYXJkLS1ucHMge1xuICBtYXJnaW4tdG9wOiAxNXB4O1xufVxuXG4udWwtY2FyZC0tbnBzX19udW1iZXJzIHtcbiAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAgYm9yZGVyLXJhZGl1czogNXB4O1xuICBkaXNwbGF5OiBmbGV4O1xuICBmbGV4LWRpcmVjdGlvbjogcm93O1xuICBmbGV4OiAxIDA7XG4gIGp1c3RpZnktY29udGVudDogY2VudGVyO1xuICBtYXJnaW46IDVweCAwIDAgMDtcbn1cblxuLm5wcy1udW1iZXItLW1vYmlsZSB7XG4gIGJvcmRlcjogMnB4IHNvbGlkICNlNmU2ZTY7XG4gIG1hcmdpbi1sZWZ0OiAtMnB4O1xufVxuXG4ubnBzLW51bWJlci0tZGVza3RvcCB7XG4gIGJvcmRlcjogMXB4IHNvbGlkICNlNmU2ZTY7XG4gIG1hcmdpbi1sZWZ0OiAtMXB4O1xufVxuXG4ubnBzLW51bWJlciB7XG4gIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gIGN1cnNvcjogcG9pbnRlcjtcbiAgZGlzcGxheTogZmxleDtcbiAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7XG4gIGZsZXg6IDEgMDtcblxuICBiYWNrZ3JvdW5kLWNvbG9yOiByZ2JhKDAsIDAsIDAsIDAuMDEpO1xuICBmb250LXNpemU6IDE4cHg7XG4gIGxpbmUtaGVpZ2h0OiAyNHB4O1xuICBoZWlnaHQ6IDY3cHg7XG59XG5cbi5ucHMtbnVtYmVyOmFjdGl2ZSB7XG4gIGJhY2tncm91bmQtY29sb3I6IHJnYmEoMCwgMCwgMCwgMC4wNSk7XG4gIGZvbnQtd2VpZ2h0OiA1MDA7XG59XG5cbi5ucHMtbnVtYmVyLS1kZXNrdG9wOmhvdmVyIHtcbiAgYmFja2dyb3VuZC1jb2xvcjogcmdiYSgwLCAwLCAwLCAwLjA1KTtcbiAgZm9udC13ZWlnaHQ6IDUwMDtcbn1cblxuLm5wcy1udW1iZXItMCB7XG4gIGJvcmRlci10b3AtbGVmdC1yYWRpdXM6IDVweDtcbiAgYm9yZGVyLWJvdHRvbS1sZWZ0LXJhZGl1czogNXB4O1xufVxuXG4ubnBzLW51bWJlci0xMCB7XG4gIGJvcmRlci10b3AtcmlnaHQtcmFkaXVzOiA1cHg7XG4gIGJvcmRlci1ib3R0b20tcmlnaHQtcmFkaXVzOiA1cHg7XG59XG5cbi51bC1jYXJkLS1ucHNfX2xhYmVscyB7XG4gIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gIGNvbG9yOiAjMjYyMTM2O1xuICBkaXNwbGF5OiBmbGV4O1xuICBmbGV4LWRpcmVjdGlvbjogcm93O1xuICBmbGV4OiAxIDA7XG4gIGZvbnQtd2VpZ2h0OiA1MDA7XG4gIGZvbnQtc2l6ZTogMTNweDtcbiAgbGluZS1oZWlnaHQ6IDE1cHg7XG4gIGp1c3RpZnktY29udGVudDogc3BhY2UtYmV0d2VlbjtcbiAgbWFyZ2luOiA3cHggMCAxMHB4IDA7XG59XG5cbi51bC1jYXJkLS1ucHNfX2xhYmVscyBzcGFuOmxhc3QtY2hpbGQge1xuICB0ZXh0LWFsaWduOiByaWdodDtcbn1cbiIsIiJdKSx0LmV4cG9ydHM9ZX0sMTA2Njk6ZnVuY3Rpb24odCxlLG4peyhlPW4oMTg5ODYpKCExKSkucHVzaChbdC5pZCwiLyoqXG4gKiBtaW5pcmVzZXQuY3NzXG4gKiBodHRwczovL2dpdGh1Yi5jb20vamd0aG1zL21pbmlyZXNldC5jc3NcbiAqL1xuXG5odG1sLFxuYm9keSxcbnAsXG5vbCxcbnVsLFxubGksXG5kbCxcbmR0LFxuZGQsXG5ibG9ja3F1b3RlLFxuZmlndXJlLFxuZmllbGRzZXQsXG5sZWdlbmQsXG50ZXh0YXJlYSxcbnByZSxcbmlmcmFtZSxcbmhyLFxuaDEsXG5oMixcbmgzLFxuaDQsXG5oNSxcbmg2IHtcbiAgbWFyZ2luOiAwO1xuICBwYWRkaW5nOiAwO1xufVxuXG5oMSxcbmgyLFxuaDMsXG5oNCxcbmg1LFxuaDYge1xuICBmb250LXNpemU6IDEwMCU7XG4gIGZvbnQtd2VpZ2h0OiBub3JtYWw7XG59XG5cbnVsIHtcbiAgbGlzdC1zdHlsZTogbm9uZTtcbn1cblxuYnV0dG9uLFxuaW5wdXQsXG5zZWxlY3QsXG50ZXh0YXJlYSB7XG4gIG1hcmdpbjogMDtcbn1cblxuaHRtbCB7XG4gIGJveC1zaXppbmc6IGJvcmRlci1ib3g7XG59XG5cbiosICo6YmVmb3JlLCAqOmFmdGVyIHtcbiAgYm94LXNpemluZzogaW5oZXJpdDtcbn1cbiIsIiJdKSx0LmV4cG9ydHM9ZX0sNzY0Mjg6ZnVuY3Rpb24odCxlLG4peyhlPW4oMTg5ODYpKCExKSkucHVzaChbdC5pZCwiLnVsLWNhcmQtLXRleHQge1xuICBtYXJnaW4tdG9wOiAxNXB4O1xufVxuXG4udWwtY2FyZC10ZXh0IHtcbiAgZmxleDogMSAwIGF1dG87XG4gIG1hcmdpbi10b3A6IDJweDtcbiAgbWFyZ2luLWJvdHRvbTogM3B4O1xuICBhbGlnbi1pdGVtczogY2VudGVyO1xuICBkaXNwbGF5OiBmbGV4O1xuICBmbGV4LXdyYXA6IHdyYXA7XG4gIGp1c3RpZnktY29udGVudDogY2VudGVyO1xuICBwYWRkaW5nOiAwO1xufVxuXG4udWwtY2FyZC10ZXh0X19jb250YWluZXIge1xuICBhbGlnbi1pdGVtczogY2VudGVyO1xuICBib3gtc2l6aW5nOiBib3JkZXItYm94O1xuICBib3JkZXItcmFkaXVzOiAzcHg7XG4gIGRpc3BsYXk6IGZsZXg7XG4gIGp1c3RpZnktY29udGVudDogY2VudGVyO1xuICBtYXJnaW4tYm90dG9tOiAxMnB4O1xuICBmbGV4OiAxIDAgMTAwJTtcbn1cblxuLnVsLWNhcmQtdGV4dF9faW5wdXQtLW1vYmlsZSB7XG4gIGJvcmRlcjogMnB4IHNvbGlkICNlNmU2ZTY7XG4gIG1heC1oZWlnaHQ6IDYzcHg7XG59XG5cbi51bC1jYXJkLXRleHRfX2lucHV0LS1kZXNrdG9wIHtcbiAgYm9yZGVyOiAxcHggc29saWQgI2U2ZTZlNjtcbiAgbWF4LWhlaWdodDogMTUwcHg7XG59XG5cbi51bC1jYXJkLXRleHRfX2lucHV0IHtcbiAgYmFja2dyb3VuZDogcmdiYSgwLCAwLCAwLCAwLjAxKTtcbiAgYm94LXNpemluZzogYm9yZGVyLWJveDtcbiAgY29sb3I6ICMzNDM0NDI7XG4gIGZvbnQtZmFtaWx5OiAtYXBwbGUtc3lzdGVtLCBCbGlua01hY1N5c3RlbUZvbnQsICdTZWdvZSBVSScsIFJvYm90bywgSGVsdmV0aWNhLCBBcmlhbCwgc2Fucy1zZXJpZiwgJ0FwcGxlIENvbG9yIEVtb2ppJyxcbiAgICAnU2Vnb2UgVUkgRW1vamknLCAnU2Vnb2UgVUkgU3ltYm9sJztcbiAgbWluLWhlaWdodDogNjNweDtcbiAgb3ZlcmZsb3c6IGhpZGRlbjtcbiAgcGFkZGluZzogMTJweDtcbiAgcmVzaXplOiBub25lO1xuICB3aWR0aDogMTAwJTtcbiAgYm9yZGVyLXJhZGl1czogM3B4O1xuICBmb250LXNpemU6IDE1cHg7XG4gIGxpbmUtaGVpZ2h0OiAyMHB4O1xufVxuXG4udWwtY2FyZC10ZXh0X19pbnB1dDo6cGxhY2Vob2xkZXIge1xuICBjb2xvcjogcmdiYSgxMDgsIDEwOCwgMTEwLCAwLjUpO1xufVxuXG4udWwtY2FyZC10ZXh0X19pbnB1dDpmb2N1cyB7XG4gIG91dGxpbmU6IG5vbmU7XG4gIGJhY2tncm91bmQ6IHdoaXRlO1xufVxuXG4udWwtY2FyZC10ZXh0X19idXR0b24ge1xuICBib3JkZXItcmFkaXVzOiAzcHg7XG4gIGNvbG9yOiB3aGl0ZTtcbiAgZm9udC1zaXplOiAxNXB4O1xuICBsaW5lLWhlaWdodDogMThweDtcbiAgcGFkZGluZzogMTAuNXB4IDIxcHg7XG4gIGZvbnQtd2VpZ2h0OiA1MDA7XG4gIGJvcmRlcjogbm9uZTtcbiAgY3Vyc29yOiBwb2ludGVyO1xufVxuIiwiIl0pLHQuZXhwb3J0cz1lfSw3MzUyMzpmdW5jdGlvbih0LGUsbil7KGU9bigxODk4NikoITEpKS5wdXNoKFt0LmlkLCIudWwtY2FyZF9fdGV4dC11cmwtcHJvbXB0IHtcbiAgbWFyZ2luLXRvcDogMTVweDtcbn1cblxuLnVsLWNhcmRfX3RleHQtdXJsLWJvZHktY29udGFpbmVyLFxuLnVsLWNhcmRfX3RleHQtdXJsLXByb21wdC1ib2R5IHtcbiAgbWFyZ2luLXRvcDogMTBweDtcbiAgbWFyZ2luLWJvdHRvbTogMTBweDtcbn1cblxuLnVsLWNhcmRfX3RleHQtdXJsLXByb21wdC1ib2R5IHtcbiAgZm9udC1zaXplOiAxNXB4O1xuICBsaW5lLWhlaWdodDogMTMwLjM1JTtcbiAgbGV0dGVyLXNwYWNpbmc6IDAuMDJlbTtcbiAgY29sb3I6ICMzNDM0NDI7XG4gIHRleHQtYWxpZ246IGxlZnQ7XG4gIHdoaXRlLXNwYWNlOiBwcmUtbGluZTtcbn1cblxuLnVsLWNhcmRfX3RleHQtdXJsLXByb21wdC1ib2R5Omxhc3QtY2hpbGQge1xuICBtYXJnaW4tYm90dG9tOiAxNXB4O1xufVxuXG4udWwtY2FyZF9fdGV4dC11cmwtcHJvbXB0LWJ1dHRvbiB7XG4gIG1hcmdpbi1yaWdodDogYXV0bztcbiAgdGV4dC1vdmVyZmxvdzogZWxsaXBzaXM7XG4gIG92ZXJmbG93OiBoaWRkZW47XG4gIHdoaXRlLXNwYWNlOiBub3dyYXA7XG4gIG1heC13aWR0aDogMTAwJTtcbn1cblxuLnVsLWNhcmRfX3RleHQtdXJsLWJvZHktY29udGFpbmVyIHtcbiAgbWluLWhlaWdodDogMmVtO1xufVxuIiwiIl0pLHQuZXhwb3J0cz1lfSw2MzU1MzpmdW5jdGlvbih0LGUsbil7KGU9bigxODk4NikoITEpKS5wdXNoKFt0LmlkLCIudWwtY2FyZC0tdmlkZW8ge1xuICBtYXJnaW4tdG9wOiAxNXB4O1xufVxuXG4jdWwtY2FyZC12b2ljZV9fdmlkZW8ge1xuICBhbGlnbi1pdGVtczogY2VudGVyO1xuICBkaXNwbGF5OiBmbGV4O1xuICBmbGV4LWRpcmVjdGlvbjogY29sdW1uO1xufVxuLnVsLWNhcmQtdGV4dF9fYnV0dG9uLnVsLWJ1dHRvbi1pbmFjdGl2ZSB7XG4gIGJhY2tncm91bmQtY29sb3I6IHdoaXRlICFpbXBvcnRhbnQ7XG4gIGNvbG9yOiAjNWQ2OTZmICFpbXBvcnRhbnQ7XG59XG5cbiN1bC1jYXJkLXZpZGVvX19wbGF5ZXJfcmVjb3JkZXIge1xuICB3aWR0aDogMTAwJTtcbiAgd2lkdGg6IC1tb3otYXZhaWxhYmxlOyAvKiBXZWJLaXQtYmFzZWQgYnJvd3NlcnMgd2lsbCBpZ25vcmUgdGhpcy4gKi9cbiAgd2lkdGg6IC13ZWJraXQtZmlsbC1hdmFpbGFibGU7IC8qIE1vemlsbGEtYmFzZWQgYnJvd3NlcnMgd2lsbCBpZ25vcmUgdGhpcy4gKi9cbiAgd2lkdGg6IGZpbGwtYXZhaWxhYmxlO1xufVxuIiwiIl0pLHQuZXhwb3J0cz1lfSw2MjU4MjpmdW5jdGlvbih0KXt0LmV4cG9ydHM9ZnVuY3Rpb24odCl7aWYoQXJyYXkuaXNBcnJheSh0KSl7Zm9yKHZhciBlPTAsbj1uZXcgQXJyYXkodC5sZW5ndGgpO2U8dC5sZW5ndGg7ZSsrKW5bZV09dFtlXTtyZXR1cm4gbn19fSw0NDYyMTpmdW5jdGlvbih0KXtmdW5jdGlvbiBlKHQsZSxuLHIsbyxpLGEpe3RyeXt2YXIgYz10W2ldKGEpLHM9Yy52YWx1ZX1jYXRjaCh0KXtyZXR1cm4gdm9pZCBuKHQpfWMuZG9uZT9lKHMpOlByb21pc2UucmVzb2x2ZShzKS50aGVuKHIsbyl9dC5leHBvcnRzPWZ1bmN0aW9uKHQpe3JldHVybiBmdW5jdGlvbigpe3ZhciBuPXRoaXMscj1hcmd1bWVudHM7cmV0dXJuIG5ldyBQcm9taXNlKChmdW5jdGlvbihvLGkpe3ZhciBhPXQuYXBwbHkobixyKTtmdW5jdGlvbiBjKHQpe2UoYSxvLGksYyxzLCJuZXh0Iix0KX1mdW5jdGlvbiBzKHQpe2UoYSxvLGksYyxzLCJ0aHJvdyIsdCl9Yyh2b2lkIDApfSkpfX19LDMwNTkzOmZ1bmN0aW9uKHQpe3QuZXhwb3J0cz1mdW5jdGlvbih0LGUpe2lmKCEodCBpbnN0YW5jZW9mIGUpKXRocm93IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCBjYWxsIGEgY2xhc3MgYXMgYSBmdW5jdGlvbiIpfX0sNDQ1MzpmdW5jdGlvbih0KXtmdW5jdGlvbiBlKHQsZSl7Zm9yKHZhciBuPTA7bjxlLmxlbmd0aDtuKyspe3ZhciByPWVbbl07ci5lbnVtZXJhYmxlPXIuZW51bWVyYWJsZXx8ITEsci5jb25maWd1cmFibGU9ITAsInZhbHVlImluIHImJihyLndyaXRhYmxlPSEwKSxPYmplY3QuZGVmaW5lUHJvcGVydHkodCxyLmtleSxyKX19dC5leHBvcnRzPWZ1bmN0aW9uKHQsbixyKXtyZXR1cm4gbiYmZSh0LnByb3RvdHlwZSxuKSxyJiZlKHQsciksdH19LDY0MTU3OmZ1bmN0aW9uKHQpe3QuZXhwb3J0cz1mdW5jdGlvbih0LGUsbil7cmV0dXJuIGUgaW4gdD9PYmplY3QuZGVmaW5lUHJvcGVydHkodCxlLHt2YWx1ZTpuLGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwLHdyaXRhYmxlOiEwfSk6dFtlXT1uLHR9fSw2NjA4MTpmdW5jdGlvbih0KXtmdW5jdGlvbiBlKCl7cmV0dXJuIHQuZXhwb3J0cz1lPU9iamVjdC5hc3NpZ258fGZ1bmN0aW9uKHQpe2Zvcih2YXIgZT0xO2U8YXJndW1lbnRzLmxlbmd0aDtlKyspe3ZhciBuPWFyZ3VtZW50c1tlXTtmb3IodmFyIHIgaW4gbilPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwobixyKSYmKHRbcl09bltyXSl9cmV0dXJuIHR9LGUuYXBwbHkodGhpcyxhcmd1bWVudHMpfXQuZXhwb3J0cz1lfSw5NDI2NjpmdW5jdGlvbih0KXt0LmV4cG9ydHM9ZnVuY3Rpb24odCl7aWYoU3ltYm9sLml0ZXJhdG9yIGluIE9iamVjdCh0KXx8IltvYmplY3QgQXJndW1lbnRzXSI9PT1PYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwodCkpcmV0dXJuIEFycmF5LmZyb20odCl9fSw5NDU2NjpmdW5jdGlvbih0KXt0LmV4cG9ydHM9ZnVuY3Rpb24oKXt0aHJvdyBuZXcgVHlwZUVycm9yKCJJbnZhbGlkIGF0dGVtcHQgdG8gc3ByZWFkIG5vbi1pdGVyYWJsZSBpbnN0YW5jZSIpfX0sOTI4MTY6ZnVuY3Rpb24odCxlLG4pe3ZhciByPW4oNjI1ODIpLG89big5NDI2NiksaT1uKDk0NTY2KTt0LmV4cG9ydHM9ZnVuY3Rpb24odCl7cmV0dXJuIHIodCl8fG8odCl8fGkoKX19LDc2MzkwOmZ1bmN0aW9uKHQpe2Z1bmN0aW9uIGUobil7cmV0dXJuImZ1bmN0aW9uIj09dHlwZW9mIFN5bWJvbCYmInN5bWJvbCI9PXR5cGVvZiBTeW1ib2wuaXRlcmF0b3I/dC5leHBvcnRzPWU9ZnVuY3Rpb24odCl7cmV0dXJuIHR5cGVvZiB0fTp0LmV4cG9ydHM9ZT1mdW5jdGlvbih0KXtyZXR1cm4gdCYmImZ1bmN0aW9uIj09dHlwZW9mIFN5bWJvbCYmdC5jb25zdHJ1Y3Rvcj09PVN5bWJvbCYmdCE9PVN5bWJvbC5wcm90b3R5cGU/InN5bWJvbCI6dHlwZW9mIHR9LGUobil9dC5leHBvcnRzPWV9LDQ0Njc0OmZ1bmN0aW9uKHQsZSxuKXt0LmV4cG9ydHM9big0NjY3OSl9LDk3MzQzOmZ1bmN0aW9uKHQsZSl7dmFyIG4scixvO3I9W3QsZV0sbj1mdW5jdGlvbih0LGUpeyJ1c2Ugc3RyaWN0Ijt2YXIgbixyLG89ImZ1bmN0aW9uIj09dHlwZW9mIE1hcD9uZXcgTWFwOihuPVtdLHI9W10se2hhczpmdW5jdGlvbih0KXtyZXR1cm4gbi5pbmRleE9mKHQpPi0xfSxnZXQ6ZnVuY3Rpb24odCl7cmV0dXJuIHJbbi5pbmRleE9mKHQpXX0sc2V0OmZ1bmN0aW9uKHQsZSl7LTE9PT1uLmluZGV4T2YodCkmJihuLnB1c2godCksci5wdXNoKGUpKX0sZGVsZXRlOmZ1bmN0aW9uKHQpe3ZhciBlPW4uaW5kZXhPZih0KTtlPi0xJiYobi5zcGxpY2UoZSwxKSxyLnNwbGljZShlLDEpKX19KSxpPWZ1bmN0aW9uKHQpe3JldHVybiBuZXcgRXZlbnQodCx7YnViYmxlczohMH0pfTt0cnl7bmV3IEV2ZW50KCJ0ZXN0Iil9Y2F0Y2godCl7aT1mdW5jdGlvbih0KXt2YXIgZT1kb2N1bWVudC5jcmVhdGVFdmVudCgiRXZlbnQiKTtyZXR1cm4gZS5pbml0RXZlbnQodCwhMCwhMSksZX19ZnVuY3Rpb24gYSh0KXtpZih0JiZ0Lm5vZGVOYW1lJiYiVEVYVEFSRUEiPT09dC5ub2RlTmFtZSYmIW8uaGFzKHQpKXt2YXIgZT1udWxsLG49bnVsbCxyPW51bGwsYT1mdW5jdGlvbigpe3QuY2xpZW50V2lkdGghPT1uJiZkKCl9LGM9ZnVuY3Rpb24oZSl7d2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoInJlc2l6ZSIsYSwhMSksdC5yZW1vdmVFdmVudExpc3RlbmVyKCJpbnB1dCIsZCwhMSksdC5yZW1vdmVFdmVudExpc3RlbmVyKCJrZXl1cCIsZCwhMSksdC5yZW1vdmVFdmVudExpc3RlbmVyKCJhdXRvc2l6ZTpkZXN0cm95IixjLCExKSx0LnJlbW92ZUV2ZW50TGlzdGVuZXIoImF1dG9zaXplOnVwZGF0ZSIsZCwhMSksT2JqZWN0LmtleXMoZSkuZm9yRWFjaCgoZnVuY3Rpb24obil7dC5zdHlsZVtuXT1lW25dfSkpLG8uZGVsZXRlKHQpfS5iaW5kKHQse2hlaWdodDp0LnN0eWxlLmhlaWdodCxyZXNpemU6dC5zdHlsZS5yZXNpemUsb3ZlcmZsb3dZOnQuc3R5bGUub3ZlcmZsb3dZLG92ZXJmbG93WDp0LnN0eWxlLm92ZXJmbG93WCx3b3JkV3JhcDp0LnN0eWxlLndvcmRXcmFwfSk7dC5hZGRFdmVudExpc3RlbmVyKCJhdXRvc2l6ZTpkZXN0cm95IixjLCExKSwib25wcm9wZXJ0eWNoYW5nZSJpbiB0JiYib25pbnB1dCJpbiB0JiZ0LmFkZEV2ZW50TGlzdGVuZXIoImtleXVwIixkLCExKSx3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcigicmVzaXplIixhLCExKSx0LmFkZEV2ZW50TGlzdGVuZXIoImlucHV0IixkLCExKSx0LmFkZEV2ZW50TGlzdGVuZXIoImF1dG9zaXplOnVwZGF0ZSIsZCwhMSksdC5zdHlsZS5vdmVyZmxvd1g9ImhpZGRlbiIsdC5zdHlsZS53b3JkV3JhcD0iYnJlYWstd29yZCIsby5zZXQodCx7ZGVzdHJveTpjLHVwZGF0ZTpkfSkscygpfWZ1bmN0aW9uIHMoKXt2YXIgbj13aW5kb3cuZ2V0Q29tcHV0ZWRTdHlsZSh0LG51bGwpOyJ2ZXJ0aWNhbCI9PT1uLnJlc2l6ZT90LnN0eWxlLnJlc2l6ZT0ibm9uZSI6ImJvdGgiPT09bi5yZXNpemUmJih0LnN0eWxlLnJlc2l6ZT0iaG9yaXpvbnRhbCIpLGU9ImNvbnRlbnQtYm94Ij09PW4uYm94U2l6aW5nPy0ocGFyc2VGbG9hdChuLnBhZGRpbmdUb3ApK3BhcnNlRmxvYXQobi5wYWRkaW5nQm90dG9tKSk6cGFyc2VGbG9hdChuLmJvcmRlclRvcFdpZHRoKStwYXJzZUZsb2F0KG4uYm9yZGVyQm90dG9tV2lkdGgpLGlzTmFOKGUpJiYoZT0wKSxkKCl9ZnVuY3Rpb24gdShlKXt2YXIgbj10LnN0eWxlLndpZHRoO3Quc3R5bGUud2lkdGg9IjBweCIsdC5vZmZzZXRXaWR0aCx0LnN0eWxlLndpZHRoPW4sdC5zdHlsZS5vdmVyZmxvd1k9ZX1mdW5jdGlvbiBsKHQpe2Zvcih2YXIgZT1bXTt0JiZ0LnBhcmVudE5vZGUmJnQucGFyZW50Tm9kZSBpbnN0YW5jZW9mIEVsZW1lbnQ7KXQucGFyZW50Tm9kZS5zY3JvbGxUb3AmJmUucHVzaCh7bm9kZTp0LnBhcmVudE5vZGUsc2Nyb2xsVG9wOnQucGFyZW50Tm9kZS5zY3JvbGxUb3B9KSx0PXQucGFyZW50Tm9kZTtyZXR1cm4gZX1mdW5jdGlvbiBmKCl7aWYoMCE9PXQuc2Nyb2xsSGVpZ2h0KXt2YXIgcj1sKHQpLG89ZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50JiZkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuc2Nyb2xsVG9wO3Quc3R5bGUuaGVpZ2h0PSIiLHQuc3R5bGUuaGVpZ2h0PXQuc2Nyb2xsSGVpZ2h0K2UrInB4IixuPXQuY2xpZW50V2lkdGgsci5mb3JFYWNoKChmdW5jdGlvbih0KXt0Lm5vZGUuc2Nyb2xsVG9wPXQuc2Nyb2xsVG9wfSkpLG8mJihkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuc2Nyb2xsVG9wPW8pfX1mdW5jdGlvbiBkKCl7ZigpO3ZhciBlPU1hdGgucm91bmQocGFyc2VGbG9hdCh0LnN0eWxlLmhlaWdodCkpLG49d2luZG93LmdldENvbXB1dGVkU3R5bGUodCxudWxsKSxvPSJjb250ZW50LWJveCI9PT1uLmJveFNpemluZz9NYXRoLnJvdW5kKHBhcnNlRmxvYXQobi5oZWlnaHQpKTp0Lm9mZnNldEhlaWdodDtpZihvPGU/ImhpZGRlbiI9PT1uLm92ZXJmbG93WSYmKHUoInNjcm9sbCIpLGYoKSxvPSJjb250ZW50LWJveCI9PT1uLmJveFNpemluZz9NYXRoLnJvdW5kKHBhcnNlRmxvYXQod2luZG93LmdldENvbXB1dGVkU3R5bGUodCxudWxsKS5oZWlnaHQpKTp0Lm9mZnNldEhlaWdodCk6ImhpZGRlbiIhPT1uLm92ZXJmbG93WSYmKHUoImhpZGRlbiIpLGYoKSxvPSJjb250ZW50LWJveCI9PT1uLmJveFNpemluZz9NYXRoLnJvdW5kKHBhcnNlRmxvYXQod2luZG93LmdldENvbXB1dGVkU3R5bGUodCxudWxsKS5oZWlnaHQpKTp0Lm9mZnNldEhlaWdodCksciE9PW8pe3I9bzt2YXIgYT1pKCJhdXRvc2l6ZTpyZXNpemVkIik7dHJ5e3QuZGlzcGF0Y2hFdmVudChhKX1jYXRjaCh0KXt9fX19ZnVuY3Rpb24gYyh0KXt2YXIgZT1vLmdldCh0KTtlJiZlLmRlc3Ryb3koKX1mdW5jdGlvbiBzKHQpe3ZhciBlPW8uZ2V0KHQpO2UmJmUudXBkYXRlKCl9dmFyIHU9bnVsbDsidW5kZWZpbmVkIj09dHlwZW9mIHdpbmRvd3x8ImZ1bmN0aW9uIiE9dHlwZW9mIHdpbmRvdy5nZXRDb21wdXRlZFN0eWxlPygodT1mdW5jdGlvbih0KXtyZXR1cm4gdH0pLmRlc3Ryb3k9ZnVuY3Rpb24odCl7cmV0dXJuIHR9LHUudXBkYXRlPWZ1bmN0aW9uKHQpe3JldHVybiB0fSk6KCh1PWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHQmJkFycmF5LnByb3RvdHlwZS5mb3JFYWNoLmNhbGwodC5sZW5ndGg/dDpbdF0sKGZ1bmN0aW9uKHQpe3JldHVybiBhKHQsZSl9KSksdH0pLmRlc3Ryb3k9ZnVuY3Rpb24odCl7cmV0dXJuIHQmJkFycmF5LnByb3RvdHlwZS5mb3JFYWNoLmNhbGwodC5sZW5ndGg/dDpbdF0sYyksdH0sdS51cGRhdGU9ZnVuY3Rpb24odCl7cmV0dXJuIHQmJkFycmF5LnByb3RvdHlwZS5mb3JFYWNoLmNhbGwodC5sZW5ndGg/dDpbdF0scyksdH0pLGUuZGVmYXVsdD11LHQuZXhwb3J0cz1lLmRlZmF1bHR9LHZvaWQgMD09PShvPSJmdW5jdGlvbiI9PXR5cGVvZiBuP24uYXBwbHkoZSxyKTpuKXx8KHQuZXhwb3J0cz1vKX0sNDAwNDY6ZnVuY3Rpb24odCxlLG4pe24oNjU2NzkpLG4oNTEwOTApLG4oMjQ3ODUpLG4oODkxNyksbig1NDc4NiksbigxMjgxNiksbig2MTkyNCksbig5ODMwNiksbigxMjAyNSksbigyODMzKSxuKDk2NDUzKSxuKDcwODYzKSxuKDI0ODAyKSxuKDE4MjczKSxuKDQyNDExKSxuKDM3NDgxKSxuKDQ1NTUwKSxuKDU4MTY1KSxuKDUxMTczKSxuKDg3NDMpLG4oNzU4MDQpLG4oNDYxNDYpLG4oMTUwNzcpLG4oNTgzMjkpLG4oNjA1MjUpLG4oNzQ5NTMpLG4oNTQ3ODEpLG4oNTE2Niksbig4OTc1OCksbigxODM3OCksbig5MjUyKSxuKDkzMjcyKSxuKDU2MTU4KSxuKDQxNDU2KSxuKDcyODUxKSxuKDM0NTI5KSxuKDE5Mjc4KSxuKDkxMjA5KSxuKDcyNTYwKSxuKDEwNjMpLG4oOTY0OTgpLG4oMjI0NDIpLG4oNzU4OTQpLG4oNzE2MjIpLG4oNzQ1MzgpLG4oMjEyNyksbig2OTk4OCksbig1NzM4NyksbigzMDgxNyksbig1MjA1NSksbig3MzM2MCksbig0NzUwMiksbigzMzE5NSksbig5MDkxMiksbigyODIwMyksbig3OTIyNyksbig0MzU5MSksbigyMjI3NyksbigyNDEyOSksbig3NDEyMCksbig5NDk2MyksbigyNzM4OCksbig4MDUyMiksbig0NTUyOCksbig4MDExNiksbigyOTExMCksbig4NTU5NCksbig2NzgxMiksbigzMzc5Miksbig4NjIxNCksbig3MDE0Niksbig3MTg0Niksbig1MDA2MyksbigxMDc0Myksbig4MDUxMSksbigxNTM3Myksbig5NzY4OCksbig3NDU2Myksbig2NTAwMyksbig4MTI3Nyksbig0NDAxOSksbigzODIpLG4oMTg4MjMpLG4oMzMzMjIpLG4oMzMwNjUpLG4oMTc0OTQpLG4oODAzNjMpLG4oNDMzOTYpLG4oNjkxODgpLG4oNzQ3OTUpLG4oODIyMDEpLG4oNDE3NzMpLG4oMzA0MDIpLG4oMTgxNzUpLG4oNjY4OTYpLG4oODU3NjcpLG4oODQzNiksbig5MjE5MiksbigxMjE1NSksbigyNjAxNiksbig3NDExNyksbigyODAwMyksbig2Nzk0MSksbig0NDA1MSksbig0OTQ5NSksbig4NzIwOSksbigxODI3NiksbigzNzU0KSxuKDMzNDM3KSxuKDE5NDMzKSxuKDcxODI3KSxuKDI2MDYzKSxuKDk2NyksbigzMzEwMCksbig0MTkyOCksbigxNTg2OSksbig4ODcxNSksbigzNjk5NSksbigxMTIyNCksbig2Mzc2NSksbigxMzA2NCksbigzMjI5MyksbigyMTAzMiksbigzNzkzNiksbig5Mzk5NSksbigxMzM5MyksbigxMTI4MSksbigzODAzNiksbigxMTM4KSxuKDQ2MDc4KSxuKDMwMDgzKSxuKDQ3MzgzKSxuKDcxNTU4KSxuKDk5MjE4KSxuKDk4OTc4KSxuKDgwNjkpLG4oNzAyMDQpLG4oODU3NTgpLG4oMTE3NzMpLG4oMTU3NjMpLG4oNDE2MzIpLG4oMzYyMzMpLG4oNDAwNDUpLG4oMjEzNzYpLG4oODQwNyksbigxNjUwKSxuKDgxMTA0KSxuKDExNjg4KSxuKDE3NjI5KSxuKDQyNDkwKSxuKDk0OTA2KSxuKDc0MDYxKSxuKDU4NjA2KSxuKDQ1MTU3KSxuKDYxMjQ1KSxuKDI5MjczKSxuKDkwNTYwKSxuKDQ1MTU0KSxuKDcwMzczKSxuKDgwNzU3KSxuKDY5ODc5KSxuKDI0NDk4KSxuKDE2OTc4KSxuKDE3MTUyKSxuKDM3OTg3KSxuKDI2ODApLG4oMzgyODApLG4oMTg1NTkpLG4oNTA0ODIpLG4oNzQyMzApLG4oMTg1MDYpLG4oMjAyNDIpLG4oMjgxNTUpLG4oMzM5MDEpLG4oNzY0NDIpLG4oODg2MzYpLG4oODE0NjMpLG4oOTUxNjMpLG4oODM2NzMpLG4oMjM1NjgpLG4oMjcyOTQpLG4oMjQ0NTcpLG4oMzkzMiksbig3NTQ5OSksbig4NzU2NCksbig4NDUwKSxuKDE3NjA1KSxuKDczNTYyKSxuKDExODc4KSxuKDYwOTI5KSxuKDQzOTUxKSxuKDkxMzQ3KSxuKDI5Mjg0KSxuKDYxOTQzKSxuKDI2OTg2KSxuKDEzNjYpLG4oODMzMTApLG4oNDY1OTcpLG4oNzAxMzYpLG4oNjA4NjUpLG4oNjc3MDgpLG4oOTY2MzgpLG4oMzk3MzApLG4oNzQxMTUpLG4oODU2ODYpO3ZhciByPW4oNTYyMzgpO3QuZXhwb3J0cz1yfSw2MDQ5MTpmdW5jdGlvbih0LGUsbil7big0MDA0NiksbigxNTYyNCksbig5MjQwNCk7dmFyIHI9big1NjIzOCk7dC5leHBvcnRzPXJ9LDg2NDcwOmZ1bmN0aW9uKHQpe3QuZXhwb3J0cz1mdW5jdGlvbih0KXtpZigiZnVuY3Rpb24iIT10eXBlb2YgdCl0aHJvdyBUeXBlRXJyb3IoU3RyaW5nKHQpKyIgaXMgbm90IGEgZnVuY3Rpb24iKTtyZXR1cm4gdH19LDc5ODYxOmZ1bmN0aW9uKHQsZSxuKXt2YXIgcj1uKDEwNTkyKTt0LmV4cG9ydHM9ZnVuY3Rpb24odCl7aWYoIXIodCkmJm51bGwhPT10KXRocm93IFR5cGVFcnJvcigiQ2FuJ3Qgc2V0ICIrU3RyaW5nKHQpKyIgYXMgYSBwcm90b3R5cGUiKTtyZXR1cm4gdH19LDc2NTEzOmZ1bmN0aW9uKHQsZSxuKXt2YXIgcj1uKDIzNzI0KSxvPW4oNTA4NjgpLGk9big2Njk3MSksYT1yKCJ1bnNjb3BhYmxlcyIpLGM9QXJyYXkucHJvdG90eXBlO251bGw9PWNbYV0mJmkoYyxhLG8obnVsbCkpLHQuZXhwb3J0cz1mdW5jdGlvbih0KXtjW2FdW3RdPSEwfX0sNTMxNDE6ZnVuY3Rpb24odCxlLG4peyJ1c2Ugc3RyaWN0Ijt2YXIgcj1uKDYwMTQwKS5jaGFyQXQ7dC5leHBvcnRzPWZ1bmN0aW9uKHQsZSxuKXtyZXR1cm4gZSsobj9yKHQsZSkubGVuZ3RoOjEpfX0sNTkzNzk6ZnVuY3Rpb24odCl7dC5leHBvcnRzPWZ1bmN0aW9uKHQsZSxuKXtpZighKHQgaW5zdGFuY2VvZiBlKSl0aHJvdyBUeXBlRXJyb3IoIkluY29ycmVjdCAiKyhuP24rIiAiOiIiKSsiaW52b2NhdGlvbiIpO3JldHVybiB0fX0sODc1Nzk6ZnVuY3Rpb24odCxlLG4pe3ZhciByPW4oMTA1OTIpO3QuZXhwb3J0cz1mdW5jdGlvbih0KXtpZighcih0KSl0aHJvdyBUeXBlRXJyb3IoU3RyaW5nKHQpKyIgaXMgbm90IGFuIG9iamVjdCIpO3JldHVybiB0fX0sNzMwNzQ6ZnVuY3Rpb24odCxlLG4peyJ1c2Ugc3RyaWN0Ijt2YXIgcixvPW4oNjI1NTYpLGk9big4OTU1OCksYT1uKDEwNTkyKSxjPW4oNzYyOTgpLHM9big1OTU5MSksdT1uKDY2OTcxKSxsPW4oOTI5MTMpLGY9bigzNzYyMCkuZixkPW4oNjQ5NjUpLHA9big3MTg0MiksaD1uKDIzNzI0KSx2PW4oNjcyOSksZz1pLkRhdGFWaWV3LHk9ZyYmZy5wcm90b3R5cGUsbT1pLkludDhBcnJheSxiPW0mJm0ucHJvdG90eXBlLHg9aS5VaW50OENsYW1wZWRBcnJheSx3PXgmJngucHJvdG90eXBlLEU9bSYmZChtKSxqPWImJmQoYiksQz1PYmplY3QucHJvdG90eXBlLGs9Qy5pc1Byb3RvdHlwZU9mLFM9aCgidG9TdHJpbmdUYWciKSxPPXYoIlRZUEVEX0FSUkFZX1RBRyIpLEE9ISghaS5BcnJheUJ1ZmZlcnx8IWcpLEk9QSYmISFwJiYiT3BlcmEiIT09cyhpLm9wZXJhKSxUPSExLF89e0ludDhBcnJheToxLFVpbnQ4QXJyYXk6MSxVaW50OENsYW1wZWRBcnJheToxLEludDE2QXJyYXk6MixVaW50MTZBcnJheToyLEludDMyQXJyYXk6NCxVaW50MzJBcnJheTo0LEZsb2F0MzJBcnJheTo0LEZsb2F0NjRBcnJheTo4fSxNPWZ1bmN0aW9uKHQpe3JldHVybiBhKHQpJiZjKF8scyh0KSl9O2ZvcihyIGluIF8paVtyXXx8KEk9ITEpO2lmKCghSXx8ImZ1bmN0aW9uIiE9dHlwZW9mIEV8fEU9PT1GdW5jdGlvbi5wcm90b3R5cGUpJiYoRT1mdW5jdGlvbigpe3Rocm93IFR5cGVFcnJvcigiSW5jb3JyZWN0IGludm9jYXRpb24iKX0sSSkpZm9yKHIgaW4gXylpW3JdJiZwKGlbcl0sRSk7aWYoKCFJfHwhanx8aj09PUMpJiYoaj1FLnByb3RvdHlwZSxJKSlmb3IociBpbiBfKWlbcl0mJnAoaVtyXS5wcm90b3R5cGUsaik7aWYoSSYmZCh3KSE9PWomJnAodyxqKSxvJiYhYyhqLFMpKWZvcihyIGluIFQ9ITAsZihqLFMse2dldDpmdW5jdGlvbigpe3JldHVybiBhKHRoaXMpP3RoaXNbT106dm9pZCAwfX0pLF8paVtyXSYmdShpW3JdLE8scik7QSYmcCYmZCh5KSE9PUMmJnAoeSxDKSx0LmV4cG9ydHM9e05BVElWRV9BUlJBWV9CVUZGRVI6QSxOQVRJVkVfQVJSQVlfQlVGRkVSX1ZJRVdTOkksVFlQRURfQVJSQVlfVEFHOlQmJk8sYVR5cGVkQXJyYXk6ZnVuY3Rpb24odCl7aWYoTSh0KSlyZXR1cm4gdDt0aHJvdyBUeXBlRXJyb3IoIlRhcmdldCBpcyBub3QgYSB0eXBlZCBhcnJheSIpfSxhVHlwZWRBcnJheUNvbnN0cnVjdG9yOmZ1bmN0aW9uKHQpe2lmKHApe2lmKGsuY2FsbChFLHQpKXJldHVybiB0fWVsc2UgZm9yKHZhciBlIGluIF8paWYoYyhfLHIpKXt2YXIgbj1pW2VdO2lmKG4mJih0PT09bnx8ay5jYWxsKG4sdCkpKXJldHVybiB0fXRocm93IFR5cGVFcnJvcigiVGFyZ2V0IGlzIG5vdCBhIHR5cGVkIGFycmF5IGNvbnN0cnVjdG9yIil9LGV4cG9ydFR5cGVkQXJyYXlNZXRob2Q6ZnVuY3Rpb24odCxlLG4pe2lmKG8pe2lmKG4pZm9yKHZhciByIGluIF8pe3ZhciBhPWlbcl07YSYmYyhhLnByb3RvdHlwZSx0KSYmZGVsZXRlIGEucHJvdG90eXBlW3RdfWpbdF0mJiFufHxsKGosdCxuP2U6SSYmYlt0XXx8ZSl9fSxleHBvcnRUeXBlZEFycmF5U3RhdGljTWV0aG9kOmZ1bmN0aW9uKHQsZSxuKXt2YXIgcixhO2lmKG8pe2lmKHApe2lmKG4pZm9yKHIgaW4gXykoYT1pW3JdKSYmYyhhLHQpJiZkZWxldGUgYVt0XTtpZihFW3RdJiYhbilyZXR1cm47dHJ5e3JldHVybiBsKEUsdCxuP2U6SSYmbVt0XXx8ZSl9Y2F0Y2godCl7fX1mb3IociBpbiBfKSEoYT1pW3JdKXx8YVt0XSYmIW58fGwoYSx0LGUpfX0saXNWaWV3OmZ1bmN0aW9uKHQpe3ZhciBlPXModCk7cmV0dXJuIkRhdGFWaWV3Ij09PWV8fGMoXyxlKX0saXNUeXBlZEFycmF5Ok0sVHlwZWRBcnJheTpFLFR5cGVkQXJyYXlQcm90b3R5cGU6an19LDgyODM1OmZ1bmN0aW9uKHQsZSxuKXsidXNlIHN0cmljdCI7dmFyIHI9big4OTU1OCksbz1uKDYyNTU2KSxpPW4oNzMwNzQpLk5BVElWRV9BUlJBWV9CVUZGRVIsYT1uKDY2OTcxKSxjPW4oMTkyNikscz1uKDMyMTg3KSx1PW4oNTkzNzkpLGw9big0MzQxNiksZj1uKDI3ODg0KSxkPW4oODM5MTQpLHA9big5MDcyNSksaD1uKDEzMzM0KS5mLHY9bigzNzYyMCkuZixnPW4oNjU4OTUpLHk9big1MTEyOCksbT1uKDg5ODI3KSxiPW0uZ2V0LHg9bS5zZXQsdz0iQXJyYXlCdWZmZXIiLEU9IkRhdGFWaWV3IixqPSJXcm9uZyBpbmRleCIsQz1yLkFycmF5QnVmZmVyLGs9QyxTPXIuRGF0YVZpZXcsTz1yLlJhbmdlRXJyb3IsQT1wLnBhY2ssST1wLnVucGFjayxUPWZ1bmN0aW9uKHQpe3JldHVyblsyNTUmdF19LF89ZnVuY3Rpb24odCl7cmV0dXJuWzI1NSZ0LHQ+PjgmMjU1XX0sTT1mdW5jdGlvbih0KXtyZXR1cm5bMjU1JnQsdD4+OCYyNTUsdD4+MTYmMjU1LHQ+PjI0JjI1NV19LEw9ZnVuY3Rpb24odCl7cmV0dXJuIHRbM108PDI0fHRbMl08PDE2fHRbMV08PDh8dFswXX0sUj1mdW5jdGlvbih0KXtyZXR1cm4gQSh0LDIzLDQpfSxQPWZ1bmN0aW9uKHQpe3JldHVybiBBKHQsNTIsOCl9LE49ZnVuY3Rpb24odCxlKXt2KHQucHJvdG90eXBlLGUse2dldDpmdW5jdGlvbigpe3JldHVybiBiKHRoaXMpW2VdfX0pfSxGPWZ1bmN0aW9uKHQsZSxuLHIpe3ZhciBvPWQobiksaT1iKHQpO2lmKG8rZT5pLmJ5dGVMZW5ndGgpdGhyb3cgTyhqKTt2YXIgYT1iKGkuYnVmZmVyKS5ieXRlcyxjPW8raS5ieXRlT2Zmc2V0LHM9YS5zbGljZShjLGMrZSk7cmV0dXJuIHI/czpzLnJldmVyc2UoKX0sRD1mdW5jdGlvbih0LGUsbixyLG8saSl7dmFyIGE9ZChuKSxjPWIodCk7aWYoYStlPmMuYnl0ZUxlbmd0aCl0aHJvdyBPKGopO2Zvcih2YXIgcz1iKGMuYnVmZmVyKS5ieXRlcyx1PWErYy5ieXRlT2Zmc2V0LGw9cigrbyksZj0wO2Y8ZTtmKyspc1t1K2ZdPWxbaT9mOmUtZi0xXX07aWYoaSl7aWYoIXMoKGZ1bmN0aW9uKCl7QygxKX0pKXx8IXMoKGZ1bmN0aW9uKCl7bmV3IEMoLTEpfSkpfHxzKChmdW5jdGlvbigpe3JldHVybiBuZXcgQyxuZXcgQygxLjUpLG5ldyBDKE5hTiksQy5uYW1lIT13fSkpKXtmb3IodmFyIFUsQj0oaz1mdW5jdGlvbih0KXtyZXR1cm4gdSh0aGlzLGspLG5ldyBDKGQodCkpfSkucHJvdG90eXBlPUMucHJvdG90eXBlLHo9aChDKSxIPTA7ei5sZW5ndGg+SDspKFU9eltIKytdKWluIGt8fGEoayxVLENbVV0pO0IuY29uc3RydWN0b3I9a312YXIgVj1uZXcgUyhuZXcgaygyKSkscT1TLnByb3RvdHlwZS5zZXRJbnQ4O1Yuc2V0SW50OCgwLDIxNDc0ODM2NDgpLFYuc2V0SW50OCgxLDIxNDc0ODM2NDkpLCFWLmdldEludDgoMCkmJlYuZ2V0SW50OCgxKXx8YyhTLnByb3RvdHlwZSx7c2V0SW50ODpmdW5jdGlvbih0LGUpe3EuY2FsbCh0aGlzLHQsZTw8MjQ+PjI0KX0sc2V0VWludDg6ZnVuY3Rpb24odCxlKXtxLmNhbGwodGhpcyx0LGU8PDI0Pj4yNCl9fSx7dW5zYWZlOiEwfSl9ZWxzZSBrPWZ1bmN0aW9uKHQpe3UodGhpcyxrLHcpO3ZhciBlPWQodCk7eCh0aGlzLHtieXRlczpnLmNhbGwobmV3IEFycmF5KGUpLDApLGJ5dGVMZW5ndGg6ZX0pLG98fCh0aGlzLmJ5dGVMZW5ndGg9ZSl9LFM9ZnVuY3Rpb24odCxlLG4pe3UodGhpcyxTLEUpLHUodCxrLEUpO3ZhciByPWIodCkuYnl0ZUxlbmd0aCxpPWwoZSk7aWYoaTwwfHxpPnIpdGhyb3cgTygiV3Jvbmcgb2Zmc2V0Iik7aWYoaSsobj12b2lkIDA9PT1uP3ItaTpmKG4pKT5yKXRocm93IE8oIldyb25nIGxlbmd0aCIpO3godGhpcyx7YnVmZmVyOnQsYnl0ZUxlbmd0aDpuLGJ5dGVPZmZzZXQ6aX0pLG98fCh0aGlzLmJ1ZmZlcj10LHRoaXMuYnl0ZUxlbmd0aD1uLHRoaXMuYnl0ZU9mZnNldD1pKX0sbyYmKE4oaywiYnl0ZUxlbmd0aCIpLE4oUywiYnVmZmVyIiksTihTLCJieXRlTGVuZ3RoIiksTihTLCJieXRlT2Zmc2V0IikpLGMoUy5wcm90b3R5cGUse2dldEludDg6ZnVuY3Rpb24odCl7cmV0dXJuIEYodGhpcywxLHQpWzBdPDwyND4+MjR9LGdldFVpbnQ4OmZ1bmN0aW9uKHQpe3JldHVybiBGKHRoaXMsMSx0KVswXX0sZ2V0SW50MTY6ZnVuY3Rpb24odCl7dmFyIGU9Rih0aGlzLDIsdCxhcmd1bWVudHMubGVuZ3RoPjE/YXJndW1lbnRzWzFdOnZvaWQgMCk7cmV0dXJuKGVbMV08PDh8ZVswXSk8PDE2Pj4xNn0sZ2V0VWludDE2OmZ1bmN0aW9uKHQpe3ZhciBlPUYodGhpcywyLHQsYXJndW1lbnRzLmxlbmd0aD4xP2FyZ3VtZW50c1sxXTp2b2lkIDApO3JldHVybiBlWzFdPDw4fGVbMF19LGdldEludDMyOmZ1bmN0aW9uKHQpe3JldHVybiBMKEYodGhpcyw0LHQsYXJndW1lbnRzLmxlbmd0aD4xP2FyZ3VtZW50c1sxXTp2b2lkIDApKX0sZ2V0VWludDMyOmZ1bmN0aW9uKHQpe3JldHVybiBMKEYodGhpcyw0LHQsYXJndW1lbnRzLmxlbmd0aD4xP2FyZ3VtZW50c1sxXTp2b2lkIDApKT4+PjB9LGdldEZsb2F0MzI6ZnVuY3Rpb24odCl7cmV0dXJuIEkoRih0aGlzLDQsdCxhcmd1bWVudHMubGVuZ3RoPjE/YXJndW1lbnRzWzFdOnZvaWQgMCksMjMpfSxnZXRGbG9hdDY0OmZ1bmN0aW9uKHQpe3JldHVybiBJKEYodGhpcyw4LHQsYXJndW1lbnRzLmxlbmd0aD4xP2FyZ3VtZW50c1sxXTp2b2lkIDApLDUyKX0sc2V0SW50ODpmdW5jdGlvbih0LGUpe0QodGhpcywxLHQsVCxlKX0sc2V0VWludDg6ZnVuY3Rpb24odCxlKXtEKHRoaXMsMSx0LFQsZSl9LHNldEludDE2OmZ1bmN0aW9uKHQsZSl7RCh0aGlzLDIsdCxfLGUsYXJndW1lbnRzLmxlbmd0aD4yP2FyZ3VtZW50c1syXTp2b2lkIDApfSxzZXRVaW50MTY6ZnVuY3Rpb24odCxlKXtEKHRoaXMsMix0LF8sZSxhcmd1bWVudHMubGVuZ3RoPjI/YXJndW1lbnRzWzJdOnZvaWQgMCl9LHNldEludDMyOmZ1bmN0aW9uKHQsZSl7RCh0aGlzLDQsdCxNLGUsYXJndW1lbnRzLmxlbmd0aD4yP2FyZ3VtZW50c1syXTp2b2lkIDApfSxzZXRVaW50MzI6ZnVuY3Rpb24odCxlKXtEKHRoaXMsNCx0LE0sZSxhcmd1bWVudHMubGVuZ3RoPjI/YXJndW1lbnRzWzJdOnZvaWQgMCl9LHNldEZsb2F0MzI6ZnVuY3Rpb24odCxlKXtEKHRoaXMsNCx0LFIsZSxhcmd1bWVudHMubGVuZ3RoPjI/YXJndW1lbnRzWzJdOnZvaWQgMCl9LHNldEZsb2F0NjQ6ZnVuY3Rpb24odCxlKXtEKHRoaXMsOCx0LFAsZSxhcmd1bWVudHMubGVuZ3RoPjI/YXJndW1lbnRzWzJdOnZvaWQgMCl9fSk7eShrLHcpLHkoUyxFKSx0LmV4cG9ydHM9e0FycmF5QnVmZmVyOmssRGF0YVZpZXc6U319LDk5NDMxOmZ1bmN0aW9uKHQsZSxuKXsidXNlIHN0cmljdCI7dmFyIHI9bigxOTIwOSksbz1uKDc2OTc2KSxpPW4oMjc4ODQpLGE9TWF0aC5taW47dC5leHBvcnRzPVtdLmNvcHlXaXRoaW58fGZ1bmN0aW9uKHQsZSl7dmFyIG49cih0aGlzKSxjPWkobi5sZW5ndGgpLHM9byh0LGMpLHU9byhlLGMpLGw9YXJndW1lbnRzLmxlbmd0aD4yP2FyZ3VtZW50c1syXTp2b2lkIDAsZj1hKCh2b2lkIDA9PT1sP2M6byhsLGMpKS11LGMtcyksZD0xO2Zvcih1PHMmJnM8dStmJiYoZD0tMSx1Kz1mLTEscys9Zi0xKTtmLS0gPjA7KXUgaW4gbj9uW3NdPW5bdV06ZGVsZXRlIG5bc10scys9ZCx1Kz1kO3JldHVybiBufX0sNjU4OTU6ZnVuY3Rpb24odCxlLG4peyJ1c2Ugc3RyaWN0Ijt2YXIgcj1uKDE5MjA5KSxvPW4oNzY5NzYpLGk9bigyNzg4NCk7dC5leHBvcnRzPWZ1bmN0aW9uKHQpe2Zvcih2YXIgZT1yKHRoaXMpLG49aShlLmxlbmd0aCksYT1hcmd1bWVudHMubGVuZ3RoLGM9byhhPjE/YXJndW1lbnRzWzFdOnZvaWQgMCxuKSxzPWE+Mj9hcmd1bWVudHNbMl06dm9pZCAwLHU9dm9pZCAwPT09cz9uOm8ocyxuKTt1PmM7KWVbYysrXT10O3JldHVybiBlfX0sMzEzNjg6ZnVuY3Rpb24odCxlLG4peyJ1c2Ugc3RyaWN0Ijt2YXIgcj1uKDMwMDI1KS5mb3JFYWNoLG89bigyMjkwOSk7dC5leHBvcnRzPW8oImZvckVhY2giKT9mdW5jdGlvbih0KXtyZXR1cm4gcih0aGlzLHQsYXJndW1lbnRzLmxlbmd0aD4xP2FyZ3VtZW50c1sxXTp2b2lkIDApfTpbXS5mb3JFYWNofSw4NTE2NjpmdW5jdGlvbih0LGUsbil7InVzZSBzdHJpY3QiO3ZhciByPW4oNDYxMzApLG89bigxOTIwOSksaT1uKDEyMjc4KSxhPW4oNDQ5ODQpLGM9bigyNzg4NCkscz1uKDU4ODEwKSx1PW4oNzM4OTApO3QuZXhwb3J0cz1mdW5jdGlvbih0KXt2YXIgZSxuLGwsZixkLHA9byh0KSxoPSJmdW5jdGlvbiI9PXR5cGVvZiB0aGlzP3RoaXM6QXJyYXksdj1hcmd1bWVudHMubGVuZ3RoLGc9dj4xP2FyZ3VtZW50c1sxXTp2b2lkIDAseT12b2lkIDAhPT1nLG09MCxiPXUocCk7aWYoeSYmKGc9cihnLHY+Mj9hcmd1bWVudHNbMl06dm9pZCAwLDIpKSxudWxsPT1ifHxoPT1BcnJheSYmYShiKSlmb3Iobj1uZXcgaChlPWMocC5sZW5ndGgpKTtlPm07bSsrKXMobixtLHk/ZyhwW21dLG0pOnBbbV0pO2Vsc2UgZm9yKGQ9KGY9Yi5jYWxsKHApKS5uZXh0LG49bmV3IGg7IShsPWQuY2FsbChmKSkuZG9uZTttKyspcyhuLG0seT9pKGYsZyxbbC52YWx1ZSxtXSwhMCk6bC52YWx1ZSk7cmV0dXJuIG4ubGVuZ3RoPW0sbn19LDg1ODAzOmZ1bmN0aW9uKHQsZSxuKXt2YXIgcj1uKDk1NzMpLG89bigyNzg4NCksaT1uKDc2OTc2KSxhPWZ1bmN0aW9uKHQpe3JldHVybiBmdW5jdGlvbihlLG4sYSl7dmFyIGMscz1yKGUpLHU9byhzLmxlbmd0aCksbD1pKGEsdSk7aWYodCYmbiE9bil7Zm9yKDt1Pmw7KWlmKChjPXNbbCsrXSkhPWMpcmV0dXJuITB9ZWxzZSBmb3IoO3U+bDtsKyspaWYoKHR8fGwgaW4gcykmJnNbbF09PT1uKXJldHVybiB0fHxsfHwwO3JldHVybiF0JiYtMX19O3QuZXhwb3J0cz17aW5jbHVkZXM6YSghMCksaW5kZXhPZjphKCExKX19LDMwMDI1OmZ1bmN0aW9uKHQsZSxuKXt2YXIgcj1uKDQ2MTMwKSxvPW4oMjQ5OCksaT1uKDE5MjA5KSxhPW4oMjc4ODQpLGM9big3MDA5KSxzPVtdLnB1c2gsdT1mdW5jdGlvbih0KXt2YXIgZT0xPT10LG49Mj09dCx1PTM9PXQsbD00PT10LGY9Nj09dCxkPTU9PXR8fGY7cmV0dXJuIGZ1bmN0aW9uKHAsaCx2LGcpe2Zvcih2YXIgeSxtLGI9aShwKSx4PW8oYiksdz1yKGgsdiwzKSxFPWEoeC5sZW5ndGgpLGo9MCxDPWd8fGMsaz1lP0MocCxFKTpuP0MocCwwKTp2b2lkIDA7RT5qO2orKylpZigoZHx8aiBpbiB4KSYmKG09dyh5PXhbal0saixiKSx0KSlpZihlKWtbal09bTtlbHNlIGlmKG0pc3dpdGNoKHQpe2Nhc2UgMzpyZXR1cm4hMDtjYXNlIDU6cmV0dXJuIHk7Y2FzZSA2OnJldHVybiBqO2Nhc2UgMjpzLmNhbGwoayx5KX1lbHNlIGlmKGwpcmV0dXJuITE7cmV0dXJuIGY/LTE6dXx8bD9sOmt9fTt0LmV4cG9ydHM9e2ZvckVhY2g6dSgwKSxtYXA6dSgxKSxmaWx0ZXI6dSgyKSxzb21lOnUoMyksZXZlcnk6dSg0KSxmaW5kOnUoNSksZmluZEluZGV4OnUoNil9fSw0OTI0OTpmdW5jdGlvbih0LGUsbil7InVzZSBzdHJpY3QiO3ZhciByPW4oOTU3Myksbz1uKDQzNDE2KSxpPW4oMjc4ODQpLGE9bigyMjkwOSksYz1NYXRoLm1pbixzPVtdLmxhc3RJbmRleE9mLHU9ISFzJiYxL1sxXS5sYXN0SW5kZXhPZigxLC0wKTwwLGw9YSgibGFzdEluZGV4T2YiKTt0LmV4cG9ydHM9dXx8bD9mdW5jdGlvbih0KXtpZih1KXJldHVybiBzLmFwcGx5KHRoaXMsYXJndW1lbnRzKXx8MDt2YXIgZT1yKHRoaXMpLG49aShlLmxlbmd0aCksYT1uLTE7Zm9yKGFyZ3VtZW50cy5sZW5ndGg+MSYmKGE9YyhhLG8oYXJndW1lbnRzWzFdKSkpLGE8MCYmKGE9bithKTthPj0wO2EtLSlpZihhIGluIGUmJmVbYV09PT10KXJldHVybiBhfHwwO3JldHVybi0xfTpzfSw2MTk2MzpmdW5jdGlvbih0LGUsbil7dmFyIHI9bigzMjE4Nyksbz1uKDIzNzI0KSxpPW4oNzkwNzEpLGE9bygic3BlY2llcyIpO3QuZXhwb3J0cz1mdW5jdGlvbih0KXtyZXR1cm4gaT49NTF8fCFyKChmdW5jdGlvbigpe3ZhciBlPVtdO3JldHVybihlLmNvbnN0cnVjdG9yPXt9KVthXT1mdW5jdGlvbigpe3JldHVybntmb286MX19LDEhPT1lW3RdKEJvb2xlYW4pLmZvb30pKX19LDEyMzY2OmZ1bmN0aW9uKHQsZSxuKXt2YXIgcj1uKDg2NDcwKSxvPW4oMTkyMDkpLGk9bigyNDk4KSxhPW4oMjc4ODQpLGM9ZnVuY3Rpb24odCl7cmV0dXJuIGZ1bmN0aW9uKGUsbixjLHMpe3Iobik7dmFyIHU9byhlKSxsPWkodSksZj1hKHUubGVuZ3RoKSxkPXQ/Zi0xOjAscD10Py0xOjE7aWYoYzwyKWZvcig7Oyl7aWYoZCBpbiBsKXtzPWxbZF0sZCs9cDticmVha31pZihkKz1wLHQ/ZDwwOmY8PWQpdGhyb3cgVHlwZUVycm9yKCJSZWR1Y2Ugb2YgZW1wdHkgYXJyYXkgd2l0aCBubyBpbml0aWFsIHZhbHVlIil9Zm9yKDt0P2Q+PTA6Zj5kO2QrPXApZCBpbiBsJiYocz1uKHMsbFtkXSxkLHUpKTtyZXR1cm4gc319O3QuZXhwb3J0cz17bGVmdDpjKCExKSxyaWdodDpjKCEwKX19LDcwMDk6ZnVuY3Rpb24odCxlLG4pe3ZhciByPW4oMTA1OTIpLG89big2MTk5KSxpPW4oMjM3MjQpKCJzcGVjaWVzIik7dC5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7dmFyIG47cmV0dXJuIG8odCkmJigiZnVuY3Rpb24iIT10eXBlb2Yobj10LmNvbnN0cnVjdG9yKXx8biE9PUFycmF5JiYhbyhuLnByb3RvdHlwZSk/cihuKSYmbnVsbD09PShuPW5baV0pJiYobj12b2lkIDApOm49dm9pZCAwKSxuZXcodm9pZCAwPT09bj9BcnJheTpuKSgwPT09ZT8wOmUpfX0sNDU2NjY6ZnVuY3Rpb24odCxlLG4peyJ1c2Ugc3RyaWN0Ijt2YXIgcj1uKDg2NDcwKSxvPW4oODc1NzkpLGk9big3NzAxKSgiUHJvbWlzZSIpLGE9W10ucHVzaCxjPWZ1bmN0aW9uKHQpe3ZhciBlPTA9PXQsbj0xPT10LGM9Mj09dCxzPTM9PXQ7cmV0dXJuIGZ1bmN0aW9uKHQsdSl7byh0KTt2YXIgbD1yKHQubmV4dCksZj1lP1tdOnZvaWQgMDtyZXR1cm4gZXx8cih1KSxuZXcgaSgoZnVuY3Rpb24ocixkKXt2YXIgcD1mdW5jdGlvbigpe3RyeXtpLnJlc29sdmUobyhsLmNhbGwodCkpKS50aGVuKChmdW5jdGlvbih0KXt0cnl7aWYobyh0KS5kb25lKXIoZT9mOiFzJiYoY3x8dm9pZCAwKSk7ZWxzZXt2YXIgbD10LnZhbHVlO2U/KGEuY2FsbChmLGwpLHAoKSk6aS5yZXNvbHZlKHUobCkpLnRoZW4oKGZ1bmN0aW9uKHQpe24/cCgpOmM/dD9wKCk6cighMSk6dD9yKHN8fGwpOnAoKX0pLGQpfX1jYXRjaCh0KXtkKHQpfX0pLGQpfWNhdGNoKHQpe2QodCl9fTtwKCl9KSl9fTt0LmV4cG9ydHM9e3RvQXJyYXk6YygwKSxmb3JFYWNoOmMoMSksZXZlcnk6YygyKSxzb21lOmMoMyksZmluZDpjKDQpfX0sNjM4NDU6ZnVuY3Rpb24odCxlLG4pe3ZhciByLG8saT1uKDg5NTU4KSxhPW4oMzQ3NDEpLGM9big2NDk2NSkscz1uKDc2Mjk4KSx1PW4oNjY5NzEpLGw9bigyMzcyNCksZj1uKDY1NjcyKSxkPWwoImFzeW5jSXRlcmF0b3IiKSxwPWkuQXN5bmNJdGVyYXRvcixoPWEuQXN5bmNJdGVyYXRvclByb3RvdHlwZTtpZighZilpZihoKXI9aDtlbHNlIGlmKCJmdW5jdGlvbiI9PXR5cGVvZiBwKXI9cC5wcm90b3R5cGU7ZWxzZSBpZihhLlVTRV9GVU5DVElPTl9DT05TVFJVQ1RPUnx8aS5VU0VfRlVOQ1RJT05fQ09OU1RSVUNUT1IpdHJ5e289YyhjKGMoRnVuY3Rpb24oInJldHVybiBhc3luYyBmdW5jdGlvbiooKXt9KCkiKSgpKSkpLGMobyk9PT1PYmplY3QucHJvdG90eXBlJiYocj1vKX1jYXRjaCh0KXt9cnx8KHI9e30pLHMocixkKXx8dShyLGQsKGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXN9KSksdC5leHBvcnRzPXJ9LDQ2MTMwOmZ1bmN0aW9uKHQsZSxuKXt2YXIgcj1uKDg2NDcwKTt0LmV4cG9ydHM9ZnVuY3Rpb24odCxlLG4pe2lmKHIodCksdm9pZCAwPT09ZSlyZXR1cm4gdDtzd2l0Y2gobil7Y2FzZSAwOnJldHVybiBmdW5jdGlvbigpe3JldHVybiB0LmNhbGwoZSl9O2Nhc2UgMTpyZXR1cm4gZnVuY3Rpb24obil7cmV0dXJuIHQuY2FsbChlLG4pfTtjYXNlIDI6cmV0dXJuIGZ1bmN0aW9uKG4scil7cmV0dXJuIHQuY2FsbChlLG4scil9O2Nhc2UgMzpyZXR1cm4gZnVuY3Rpb24obixyLG8pe3JldHVybiB0LmNhbGwoZSxuLHIsbyl9fXJldHVybiBmdW5jdGlvbigpe3JldHVybiB0LmFwcGx5KGUsYXJndW1lbnRzKX19fSwxMjI3ODpmdW5jdGlvbih0LGUsbil7dmFyIHI9big4NzU3OSk7dC5leHBvcnRzPWZ1bmN0aW9uKHQsZSxuLG8pe3RyeXtyZXR1cm4gbz9lKHIobilbMF0sblsxXSk6ZShuKX1jYXRjaChlKXt2YXIgaT10LnJldHVybjt0aHJvdyB2b2lkIDAhPT1pJiZyKGkuY2FsbCh0KSksZX19fSw0Nzk2OmZ1bmN0aW9uKHQsZSxuKXt2YXIgcj1uKDIzNzI0KSgiaXRlcmF0b3IiKSxvPSExO3RyeXt2YXIgaT0wLGE9e25leHQ6ZnVuY3Rpb24oKXtyZXR1cm57ZG9uZTohIWkrK319LHJldHVybjpmdW5jdGlvbigpe289ITB9fTthW3JdPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXN9LEFycmF5LmZyb20oYSwoZnVuY3Rpb24oKXt0aHJvdyAyfSkpfWNhdGNoKHQpe310LmV4cG9ydHM9ZnVuY3Rpb24odCxlKXtpZighZSYmIW8pcmV0dXJuITE7dmFyIG49ITE7dHJ5e3ZhciBpPXt9O2lbcl09ZnVuY3Rpb24oKXtyZXR1cm57bmV4dDpmdW5jdGlvbigpe3JldHVybntkb25lOm49ITB9fX19LHQoaSl9Y2F0Y2godCl7fXJldHVybiBufX0sMjQ1OTQ6ZnVuY3Rpb24odCl7dmFyIGU9e30udG9TdHJpbmc7dC5leHBvcnRzPWZ1bmN0aW9uKHQpe3JldHVybiBlLmNhbGwodCkuc2xpY2UoOCwtMSl9fSw1OTU5MTpmdW5jdGlvbih0LGUsbil7dmFyIHI9big5MDYxMyksbz1uKDI0NTk0KSxpPW4oMjM3MjQpKCJ0b1N0cmluZ1RhZyIpLGE9IkFyZ3VtZW50cyI9PW8oZnVuY3Rpb24oKXtyZXR1cm4gYXJndW1lbnRzfSgpKTt0LmV4cG9ydHM9cj9vOmZ1bmN0aW9uKHQpe3ZhciBlLG4scjtyZXR1cm4gdm9pZCAwPT09dD8iVW5kZWZpbmVkIjpudWxsPT09dD8iTnVsbCI6InN0cmluZyI9PXR5cGVvZihuPWZ1bmN0aW9uKHQsZSl7dHJ5e3JldHVybiB0W2VdfWNhdGNoKHQpe319KGU9T2JqZWN0KHQpLGkpKT9uOmE/byhlKToiT2JqZWN0Ij09KHI9byhlKSkmJiJmdW5jdGlvbiI9PXR5cGVvZiBlLmNhbGxlZT8iQXJndW1lbnRzIjpyfX0sOTgxNzk6ZnVuY3Rpb24odCxlLG4peyJ1c2Ugc3RyaWN0Ijt2YXIgcj1uKDg3NTc5KSxvPW4oODY0NzApO3QuZXhwb3J0cz1mdW5jdGlvbigpe2Zvcih2YXIgdD1yKHRoaXMpLGU9byh0LmFkZCksbj0wLGk9YXJndW1lbnRzLmxlbmd0aDtuPGk7bisrKWUuY2FsbCh0LGFyZ3VtZW50c1tuXSk7cmV0dXJuIHR9fSwxNDY2OmZ1bmN0aW9uKHQsZSxuKXsidXNlIHN0cmljdCI7dmFyIHI9big4NzU3OSksbz1uKDg2NDcwKTt0LmV4cG9ydHM9ZnVuY3Rpb24oKXtmb3IodmFyIHQsZT1yKHRoaXMpLG49byhlLmRlbGV0ZSksaT0hMCxhPTAsYz1hcmd1bWVudHMubGVuZ3RoO2E8YzthKyspdD1uLmNhbGwoZSxhcmd1bWVudHNbYV0pLGk9aSYmdDtyZXR1cm4hIWl9fSwxMjkwMTpmdW5jdGlvbih0LGUsbil7InVzZSBzdHJpY3QiO3ZhciByPW4oODY0NzApLG89big0NjEzMCksaT1uKDQxMzM0KTt0LmV4cG9ydHM9ZnVuY3Rpb24odCl7dmFyIGUsbixhLGMscz1hcmd1bWVudHMubGVuZ3RoLHU9cz4xP2FyZ3VtZW50c1sxXTp2b2lkIDA7cmV0dXJuIHIodGhpcyksKGU9dm9pZCAwIT09dSkmJnIodSksbnVsbD09dD9uZXcgdGhpczoobj1bXSxlPyhhPTAsYz1vKHUscz4yP2FyZ3VtZW50c1syXTp2b2lkIDAsMiksaSh0LChmdW5jdGlvbih0KXtuLnB1c2goYyh0LGErKykpfSkpKTppKHQsbi5wdXNoLG4pLG5ldyB0aGlzKG4pKX19LDI1MDI2OmZ1bmN0aW9uKHQpeyJ1c2Ugc3RyaWN0Ijt0LmV4cG9ydHM9ZnVuY3Rpb24oKXtmb3IodmFyIHQ9YXJndW1lbnRzLmxlbmd0aCxlPW5ldyBBcnJheSh0KTt0LS07KWVbdF09YXJndW1lbnRzW3RdO3JldHVybiBuZXcgdGhpcyhlKX19LDY0NTA6ZnVuY3Rpb24odCxlLG4peyJ1c2Ugc3RyaWN0Ijt2YXIgcj1uKDM3NjIwKS5mLG89big1MDg2OCksaT1uKDE5MjYpLGE9big0NjEzMCksYz1uKDU5Mzc5KSxzPW4oNDEzMzQpLHU9big0NjA2MSksbD1uKDY3NTM4KSxmPW4oNjI1NTYpLGQ9big5NjAzKS5mYXN0S2V5LHA9big4OTgyNyksaD1wLnNldCx2PXAuZ2V0dGVyRm9yO3QuZXhwb3J0cz17Z2V0Q29uc3RydWN0b3I6ZnVuY3Rpb24odCxlLG4sdSl7dmFyIGw9dCgoZnVuY3Rpb24odCxyKXtjKHQsbCxlKSxoKHQse3R5cGU6ZSxpbmRleDpvKG51bGwpLGZpcnN0OnZvaWQgMCxsYXN0OnZvaWQgMCxzaXplOjB9KSxmfHwodC5zaXplPTApLG51bGwhPXImJnMocix0W3VdLHQsbil9KSkscD12KGUpLGc9ZnVuY3Rpb24odCxlLG4pe3ZhciByLG8saT1wKHQpLGE9eSh0LGUpO3JldHVybiBhP2EudmFsdWU9bjooaS5sYXN0PWE9e2luZGV4Om89ZChlLCEwKSxrZXk6ZSx2YWx1ZTpuLHByZXZpb3VzOnI9aS5sYXN0LG5leHQ6dm9pZCAwLHJlbW92ZWQ6ITF9LGkuZmlyc3R8fChpLmZpcnN0PWEpLHImJihyLm5leHQ9YSksZj9pLnNpemUrKzp0LnNpemUrKywiRiIhPT1vJiYoaS5pbmRleFtvXT1hKSksdH0seT1mdW5jdGlvbih0LGUpe3ZhciBuLHI9cCh0KSxvPWQoZSk7aWYoIkYiIT09bylyZXR1cm4gci5pbmRleFtvXTtmb3Iobj1yLmZpcnN0O247bj1uLm5leHQpaWYobi5rZXk9PWUpcmV0dXJuIG59O3JldHVybiBpKGwucHJvdG90eXBlLHtjbGVhcjpmdW5jdGlvbigpe2Zvcih2YXIgdD1wKHRoaXMpLGU9dC5pbmRleCxuPXQuZmlyc3Q7bjspbi5yZW1vdmVkPSEwLG4ucHJldmlvdXMmJihuLnByZXZpb3VzPW4ucHJldmlvdXMubmV4dD12b2lkIDApLGRlbGV0ZSBlW24uaW5kZXhdLG49bi5uZXh0O3QuZmlyc3Q9dC5sYXN0PXZvaWQgMCxmP3Quc2l6ZT0wOnRoaXMuc2l6ZT0wfSxkZWxldGU6ZnVuY3Rpb24odCl7dmFyIGU9dGhpcyxuPXAoZSkscj15KGUsdCk7aWYocil7dmFyIG89ci5uZXh0LGk9ci5wcmV2aW91cztkZWxldGUgbi5pbmRleFtyLmluZGV4XSxyLnJlbW92ZWQ9ITAsaSYmKGkubmV4dD1vKSxvJiYoby5wcmV2aW91cz1pKSxuLmZpcnN0PT1yJiYobi5maXJzdD1vKSxuLmxhc3Q9PXImJihuLmxhc3Q9aSksZj9uLnNpemUtLTplLnNpemUtLX1yZXR1cm4hIXJ9LGZvckVhY2g6ZnVuY3Rpb24odCl7Zm9yKHZhciBlLG49cCh0aGlzKSxyPWEodCxhcmd1bWVudHMubGVuZ3RoPjE/YXJndW1lbnRzWzFdOnZvaWQgMCwzKTtlPWU/ZS5uZXh0Om4uZmlyc3Q7KWZvcihyKGUudmFsdWUsZS5rZXksdGhpcyk7ZSYmZS5yZW1vdmVkOyllPWUucHJldmlvdXN9LGhhczpmdW5jdGlvbih0KXtyZXR1cm4hIXkodGhpcyx0KX19KSxpKGwucHJvdG90eXBlLG4/e2dldDpmdW5jdGlvbih0KXt2YXIgZT15KHRoaXMsdCk7cmV0dXJuIGUmJmUudmFsdWV9LHNldDpmdW5jdGlvbih0LGUpe3JldHVybiBnKHRoaXMsMD09PXQ/MDp0LGUpfX06e2FkZDpmdW5jdGlvbih0KXtyZXR1cm4gZyh0aGlzLHQ9MD09PXQ/MDp0LHQpfX0pLGYmJnIobC5wcm90b3R5cGUsInNpemUiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gcCh0aGlzKS5zaXplfX0pLGx9LHNldFN0cm9uZzpmdW5jdGlvbih0LGUsbil7dmFyIHI9ZSsiIEl0ZXJhdG9yIixvPXYoZSksaT12KHIpO3UodCxlLChmdW5jdGlvbih0LGUpe2godGhpcyx7dHlwZTpyLHRhcmdldDp0LHN0YXRlOm8odCksa2luZDplLGxhc3Q6dm9pZCAwfSl9KSwoZnVuY3Rpb24oKXtmb3IodmFyIHQ9aSh0aGlzKSxlPXQua2luZCxuPXQubGFzdDtuJiZuLnJlbW92ZWQ7KW49bi5wcmV2aW91cztyZXR1cm4gdC50YXJnZXQmJih0Lmxhc3Q9bj1uP24ubmV4dDp0LnN0YXRlLmZpcnN0KT8ia2V5cyI9PWU/e3ZhbHVlOm4ua2V5LGRvbmU6ITF9OiJ2YWx1ZXMiPT1lP3t2YWx1ZTpuLnZhbHVlLGRvbmU6ITF9Ont2YWx1ZTpbbi5rZXksbi52YWx1ZV0sZG9uZTohMX06KHQudGFyZ2V0PXZvaWQgMCx7dmFsdWU6dm9pZCAwLGRvbmU6ITB9KX0pLG4/ImVudHJpZXMiOiJ2YWx1ZXMiLCFuLCEwKSxsKGUpfX19LDcxMzAzOmZ1bmN0aW9uKHQsZSxuKXsidXNlIHN0cmljdCI7dmFyIHI9bigxOTI2KSxvPW4oOTYwMykuZ2V0V2Vha0RhdGEsaT1uKDg3NTc5KSxhPW4oMTA1OTIpLGM9big1OTM3OSkscz1uKDQxMzM0KSx1PW4oMzAwMjUpLGw9big3NjI5OCksZj1uKDg5ODI3KSxkPWYuc2V0LHA9Zi5nZXR0ZXJGb3IsaD11LmZpbmQsdj11LmZpbmRJbmRleCxnPTAseT1mdW5jdGlvbih0KXtyZXR1cm4gdC5mcm96ZW58fCh0LmZyb3plbj1uZXcgbSl9LG09ZnVuY3Rpb24oKXt0aGlzLmVudHJpZXM9W119LGI9ZnVuY3Rpb24odCxlKXtyZXR1cm4gaCh0LmVudHJpZXMsKGZ1bmN0aW9uKHQpe3JldHVybiB0WzBdPT09ZX0pKX07bS5wcm90b3R5cGU9e2dldDpmdW5jdGlvbih0KXt2YXIgZT1iKHRoaXMsdCk7aWYoZSlyZXR1cm4gZVsxXX0saGFzOmZ1bmN0aW9uKHQpe3JldHVybiEhYih0aGlzLHQpfSxzZXQ6ZnVuY3Rpb24odCxlKXt2YXIgbj1iKHRoaXMsdCk7bj9uWzFdPWU6dGhpcy5lbnRyaWVzLnB1c2goW3QsZV0pfSxkZWxldGU6ZnVuY3Rpb24odCl7dmFyIGU9dih0aGlzLmVudHJpZXMsKGZ1bmN0aW9uKGUpe3JldHVybiBlWzBdPT09dH0pKTtyZXR1cm5+ZSYmdGhpcy5lbnRyaWVzLnNwbGljZShlLDEpLCEhfmV9fSx0LmV4cG9ydHM9e2dldENvbnN0cnVjdG9yOmZ1bmN0aW9uKHQsZSxuLHUpe3ZhciBmPXQoKGZ1bmN0aW9uKHQscil7Yyh0LGYsZSksZCh0LHt0eXBlOmUsaWQ6ZysrLGZyb3plbjp2b2lkIDB9KSxudWxsIT1yJiZzKHIsdFt1XSx0LG4pfSkpLGg9cChlKSx2PWZ1bmN0aW9uKHQsZSxuKXt2YXIgcj1oKHQpLGE9byhpKGUpLCEwKTtyZXR1cm4hMD09PWE/eShyKS5zZXQoZSxuKTphW3IuaWRdPW4sdH07cmV0dXJuIHIoZi5wcm90b3R5cGUse2RlbGV0ZTpmdW5jdGlvbih0KXt2YXIgZT1oKHRoaXMpO2lmKCFhKHQpKXJldHVybiExO3ZhciBuPW8odCk7cmV0dXJuITA9PT1uP3koZSkuZGVsZXRlKHQpOm4mJmwobixlLmlkKSYmZGVsZXRlIG5bZS5pZF19LGhhczpmdW5jdGlvbih0KXt2YXIgZT1oKHRoaXMpO2lmKCFhKHQpKXJldHVybiExO3ZhciBuPW8odCk7cmV0dXJuITA9PT1uP3koZSkuaGFzKHQpOm4mJmwobixlLmlkKX19KSxyKGYucHJvdG90eXBlLG4/e2dldDpmdW5jdGlvbih0KXt2YXIgZT1oKHRoaXMpO2lmKGEodCkpe3ZhciBuPW8odCk7cmV0dXJuITA9PT1uP3koZSkuZ2V0KHQpOm4/bltlLmlkXTp2b2lkIDB9fSxzZXQ6ZnVuY3Rpb24odCxlKXtyZXR1cm4gdih0aGlzLHQsZSl9fTp7YWRkOmZ1bmN0aW9uKHQpe3JldHVybiB2KHRoaXMsdCwhMCl9fSksZn19fSw4MTk1MTpmdW5jdGlvbih0LGUsbil7InVzZSBzdHJpY3QiO3ZhciByPW4oMTQwNDQpLG89big4OTU1OCksaT1uKDY0NTA0KSxhPW4oOTI5MTMpLGM9big5NjAzKSxzPW4oNDEzMzQpLHU9big1OTM3OSksbD1uKDEwNTkyKSxmPW4oMzIxODcpLGQ9big0Nzk2KSxwPW4oNTExMjgpLGg9bigzMDI3Mik7dC5leHBvcnRzPWZ1bmN0aW9uKHQsZSxuKXt2YXIgdj0tMSE9PXQuaW5kZXhPZigiTWFwIiksZz0tMSE9PXQuaW5kZXhPZigiV2VhayIpLHk9dj8ic2V0IjoiYWRkIixtPW9bdF0sYj1tJiZtLnByb3RvdHlwZSx4PW0sdz17fSxFPWZ1bmN0aW9uKHQpe3ZhciBlPWJbdF07YShiLHQsImFkZCI9PXQ/ZnVuY3Rpb24odCl7cmV0dXJuIGUuY2FsbCh0aGlzLDA9PT10PzA6dCksdGhpc306ImRlbGV0ZSI9PXQ/ZnVuY3Rpb24odCl7cmV0dXJuIShnJiYhbCh0KSkmJmUuY2FsbCh0aGlzLDA9PT10PzA6dCl9OiJnZXQiPT10P2Z1bmN0aW9uKHQpe3JldHVybiBnJiYhbCh0KT92b2lkIDA6ZS5jYWxsKHRoaXMsMD09PXQ/MDp0KX06ImhhcyI9PXQ/ZnVuY3Rpb24odCl7cmV0dXJuIShnJiYhbCh0KSkmJmUuY2FsbCh0aGlzLDA9PT10PzA6dCl9OmZ1bmN0aW9uKHQsbil7cmV0dXJuIGUuY2FsbCh0aGlzLDA9PT10PzA6dCxuKSx0aGlzfSl9O2lmKGkodCwiZnVuY3Rpb24iIT10eXBlb2YgbXx8IShnfHxiLmZvckVhY2gmJiFmKChmdW5jdGlvbigpeyhuZXcgbSkuZW50cmllcygpLm5leHQoKX0pKSkpKXg9bi5nZXRDb25zdHJ1Y3RvcihlLHQsdix5KSxjLlJFUVVJUkVEPSEwO2Vsc2UgaWYoaSh0LCEwKSl7dmFyIGo9bmV3IHgsQz1qW3ldKGc/e306LTAsMSkhPWosaz1mKChmdW5jdGlvbigpe2ouaGFzKDEpfSkpLFM9ZCgoZnVuY3Rpb24odCl7bmV3IG0odCl9KSksTz0hZyYmZigoZnVuY3Rpb24oKXtmb3IodmFyIHQ9bmV3IG0sZT01O2UtLTspdFt5XShlLGUpO3JldHVybiF0LmhhcygtMCl9KSk7U3x8KCh4PWUoKGZ1bmN0aW9uKGUsbil7dShlLHgsdCk7dmFyIHI9aChuZXcgbSxlLHgpO3JldHVybiBudWxsIT1uJiZzKG4sclt5XSxyLHYpLHJ9KSkpLnByb3RvdHlwZT1iLGIuY29uc3RydWN0b3I9eCksKGt8fE8pJiYoRSgiZGVsZXRlIiksRSgiaGFzIiksdiYmRSgiZ2V0IikpLChPfHxDKSYmRSh5KSxnJiZiLmNsZWFyJiZkZWxldGUgYi5jbGVhcn1yZXR1cm4gd1t0XT14LHIoe2dsb2JhbDohMCxmb3JjZWQ6eCE9bX0sdykscCh4LHQpLGd8fG4uc2V0U3Ryb25nKHgsdCx2KSx4fX0sNzQ2ODU6ZnVuY3Rpb24odCxlLG4pe3ZhciByPW4oOTQ5MDYpLG89big1ODYwNiksaT1uKDUwODY4KSxhPW4oMTA1OTIpLGM9ZnVuY3Rpb24oKXt0aGlzLm9iamVjdD1udWxsLHRoaXMuc3ltYm9sPW51bGwsdGhpcy5wcmltaXRpdmVzPW51bGwsdGhpcy5vYmplY3RzQnlJbmRleD1pKG51bGwpfTtjLnByb3RvdHlwZS5nZXQ9ZnVuY3Rpb24odCxlKXtyZXR1cm4gdGhpc1t0XXx8KHRoaXNbdF09ZSgpKX0sYy5wcm90b3R5cGUubmV4dD1mdW5jdGlvbih0LGUsbil7dmFyIGk9bj90aGlzLm9iamVjdHNCeUluZGV4W3RdfHwodGhpcy5vYmplY3RzQnlJbmRleFt0XT1uZXcgbyk6dGhpcy5wcmltaXRpdmVzfHwodGhpcy5wcmltaXRpdmVzPW5ldyByKSxhPWkuZ2V0KGUpO3JldHVybiBhfHxpLnNldChlLGE9bmV3IGMpLGF9O3ZhciBzPW5ldyBjO3QuZXhwb3J0cz1mdW5jdGlvbigpe3ZhciB0LGUsbj1zLHI9YXJndW1lbnRzLmxlbmd0aDtmb3IodD0wO3Q8cjt0KyspYShlPWFyZ3VtZW50c1t0XSkmJihuPW4ubmV4dCh0LGUsITApKTtpZih0aGlzPT09T2JqZWN0JiZuPT09cyl0aHJvdyBUeXBlRXJyb3IoIkNvbXBvc2l0ZSBrZXlzIG11c3QgY29udGFpbiBhIG5vbi1wcmltaXRpdmUgY29tcG9uZW50Iik7Zm9yKHQ9MDt0PHI7dCsrKWEoZT1hcmd1bWVudHNbdF0pfHwobj1uLm5leHQodCxlLCExKSk7cmV0dXJuIG59fSw5OTYyNTpmdW5jdGlvbih0LGUsbil7dmFyIHI9big3NjI5OCksbz1uKDI0NDE1KSxpPW4oOTcyNTcpLGE9bigzNzYyMCk7dC5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7Zm9yKHZhciBuPW8oZSksYz1hLmYscz1pLmYsdT0wO3U8bi5sZW5ndGg7dSsrKXt2YXIgbD1uW3VdO3IodCxsKXx8Yyh0LGwscyhlLGwpKX19fSw5MzkxNTpmdW5jdGlvbih0LGUsbil7dmFyIHI9bigyMzcyNCkoIm1hdGNoIik7dC5leHBvcnRzPWZ1bmN0aW9uKHQpe3ZhciBlPS8uLzt0cnl7Ii8uLyJbdF0oZSl9Y2F0Y2gobil7dHJ5e3JldHVybiBlW3JdPSExLCIvLi8iW3RdKGUpfWNhdGNoKHQpe319cmV0dXJuITF9fSw3MTYwODpmdW5jdGlvbih0LGUsbil7dmFyIHI9bigzMjE4Nyk7dC5leHBvcnRzPSFyKChmdW5jdGlvbigpe2Z1bmN0aW9uIHQoKXt9cmV0dXJuIHQucHJvdG90eXBlLmNvbnN0cnVjdG9yPW51bGwsT2JqZWN0LmdldFByb3RvdHlwZU9mKG5ldyB0KSE9PXQucHJvdG90eXBlfSkpfSwyNzAwNDpmdW5jdGlvbih0LGUsbil7InVzZSBzdHJpY3QiO3ZhciByPW4oNTYyMzgpLG89big4NjQ3MCksaT1uKDg3NTc5KSxhPW4oNTA4NjgpLGM9big2Njk3MSkscz1uKDE5MjYpLHU9bigyMzcyNCksbD1uKDg5ODI3KSxmPW4oNzcwMSkoIlByb21pc2UiKSxkPWwuc2V0LHA9bC5nZXQsaD11KCJ0b1N0cmluZ1RhZyIpLHY9ZnVuY3Rpb24odCl7dmFyIGU9cCh0aGlzKS5pdGVyYXRvcixuPWUucmV0dXJuO3JldHVybiB2b2lkIDA9PT1uP2YucmVzb2x2ZSh7ZG9uZTohMCx2YWx1ZTp0fSk6aShuLmNhbGwoZSx0KSl9LGc9ZnVuY3Rpb24odCl7dmFyIGU9cCh0aGlzKS5pdGVyYXRvcixuPWUudGhyb3c7cmV0dXJuIHZvaWQgMD09PW4/Zi5yZWplY3QodCk6bi5jYWxsKGUsdCl9O3QuZXhwb3J0cz1mdW5jdGlvbih0LGUpe3ZhciBuPWZ1bmN0aW9uKHQpe3QubmV4dD1vKHQuaXRlcmF0b3IubmV4dCksdC5kb25lPSExLGQodGhpcyx0KX07cmV0dXJuIG4ucHJvdG90eXBlPXMoYShyLkFzeW5jSXRlcmF0b3IucHJvdG90eXBlKSx7bmV4dDpmdW5jdGlvbihlKXt2YXIgbj1wKHRoaXMpO2lmKG4uZG9uZSlyZXR1cm4gZi5yZXNvbHZlKHtkb25lOiEwLHZhbHVlOnZvaWQgMH0pO3RyeXtyZXR1cm4gZi5yZXNvbHZlKGkodC5jYWxsKG4sZSxmKSkpfWNhdGNoKHQpe3JldHVybiBmLnJlamVjdCh0KX19LHJldHVybjp2LHRocm93Omd9KSxlfHxjKG4ucHJvdG90eXBlLGgsIkdlbmVyYXRvciIpLG59fSwzMTM1MTpmdW5jdGlvbih0LGUsbil7dmFyIHI9big3MDEzMiksbz0vIi9nO3QuZXhwb3J0cz1mdW5jdGlvbih0LGUsbixpKXt2YXIgYT1TdHJpbmcocih0KSksYz0iPCIrZTtyZXR1cm4iIiE9PW4mJihjKz0iICIrbisnPSInK1N0cmluZyhpKS5yZXBsYWNlKG8sIiZxdW90OyIpKyciJyksYysiPiIrYSsiPC8iK2UrIj4ifX0sNzEyMDE6ZnVuY3Rpb24odCxlLG4peyJ1c2Ugc3RyaWN0Ijt2YXIgcj1uKDY0MTc2KS5JdGVyYXRvclByb3RvdHlwZSxvPW4oNTA4NjgpLGk9bigxNDIwOSksYT1uKDUxMTI4KSxjPW4oMTIzNSkscz1mdW5jdGlvbigpe3JldHVybiB0aGlzfTt0LmV4cG9ydHM9ZnVuY3Rpb24odCxlLG4pe3ZhciB1PWUrIiBJdGVyYXRvciI7cmV0dXJuIHQucHJvdG90eXBlPW8ocix7bmV4dDppKDEsbil9KSxhKHQsdSwhMSwhMCksY1t1XT1zLHR9fSw4ODA3OmZ1bmN0aW9uKHQsZSxuKXsidXNlIHN0cmljdCI7dmFyIHI9big1NjIzOCksbz1uKDg2NDcwKSxpPW4oODc1NzkpLGE9big1MDg2OCksYz1uKDY2OTcxKSxzPW4oMTkyNiksdT1uKDIzNzI0KSxsPW4oODk4MjcpLGY9bC5zZXQsZD1sLmdldCxwPXUoInRvU3RyaW5nVGFnIiksaD1mdW5jdGlvbih0KXt2YXIgZT1kKHRoaXMpLml0ZXJhdG9yLG49ZS5yZXR1cm47cmV0dXJuIHZvaWQgMD09PW4/e2RvbmU6ITAsdmFsdWU6dH06aShuLmNhbGwoZSx0KSl9LHY9ZnVuY3Rpb24odCl7dmFyIGU9ZCh0aGlzKS5pdGVyYXRvcixuPWUudGhyb3c7aWYodm9pZCAwPT09bil0aHJvdyB0O3JldHVybiBuLmNhbGwoZSx0KX07dC5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7dmFyIG49ZnVuY3Rpb24odCl7dC5uZXh0PW8odC5pdGVyYXRvci5uZXh0KSx0LmRvbmU9ITEsZih0aGlzLHQpfTtyZXR1cm4gbi5wcm90b3R5cGU9cyhhKHIuSXRlcmF0b3IucHJvdG90eXBlKSx7bmV4dDpmdW5jdGlvbigpe3ZhciBlPWQodGhpcyksbj1lLmRvbmU/dm9pZCAwOnQuYXBwbHkoZSxhcmd1bWVudHMpO3JldHVybntkb25lOmUuZG9uZSx2YWx1ZTpufX0scmV0dXJuOmgsdGhyb3c6dn0pLGV8fGMobi5wcm90b3R5cGUscCwiR2VuZXJhdG9yIiksbn19LDY2OTcxOmZ1bmN0aW9uKHQsZSxuKXt2YXIgcj1uKDYyNTU2KSxvPW4oMzc2MjApLGk9bigxNDIwOSk7dC5leHBvcnRzPXI/ZnVuY3Rpb24odCxlLG4pe3JldHVybiBvLmYodCxlLGkoMSxuKSl9OmZ1bmN0aW9uKHQsZSxuKXtyZXR1cm4gdFtlXT1uLHR9fSwxNDIwOTpmdW5jdGlvbih0KXt0LmV4cG9ydHM9ZnVuY3Rpb24odCxlKXtyZXR1cm57ZW51bWVyYWJsZTohKDEmdCksY29uZmlndXJhYmxlOiEoMiZ0KSx3cml0YWJsZTohKDQmdCksdmFsdWU6ZX19fSw1ODgxMDpmdW5jdGlvbih0LGUsbil7InVzZSBzdHJpY3QiO3ZhciByPW4oNTM0OTgpLG89bigzNzYyMCksaT1uKDE0MjA5KTt0LmV4cG9ydHM9ZnVuY3Rpb24odCxlLG4pe3ZhciBhPXIoZSk7YSBpbiB0P28uZih0LGEsaSgwLG4pKTp0W2FdPW59fSw3OTE2NzpmdW5jdGlvbih0LGUsbil7InVzZSBzdHJpY3QiO3ZhciByPW4oMzIxODcpLG89bigyNjU3Mykuc3RhcnQsaT1NYXRoLmFicyxhPURhdGUucHJvdG90eXBlLGM9YS5nZXRUaW1lLHM9YS50b0lTT1N0cmluZzt0LmV4cG9ydHM9cigoZnVuY3Rpb24oKXtyZXR1cm4iMDM4NS0wNy0yNVQwNzowNjozOS45OTlaIiE9cy5jYWxsKG5ldyBEYXRlKC01MDAwMDAwMDAwMDAwMSkpfSkpfHwhcigoZnVuY3Rpb24oKXtzLmNhbGwobmV3IERhdGUoTmFOKSl9KSk/ZnVuY3Rpb24oKXtpZighaXNGaW5pdGUoYy5jYWxsKHRoaXMpKSl0aHJvdyBSYW5nZUVycm9yKCJJbnZhbGlkIHRpbWUgdmFsdWUiKTt2YXIgdD10aGlzLGU9dC5nZXRVVENGdWxsWWVhcigpLG49dC5nZXRVVENNaWxsaXNlY29uZHMoKSxyPWU8MD8iLSI6ZT45OTk5PyIrIjoiIjtyZXR1cm4gcitvKGkoZSkscj82OjQsMCkrIi0iK28odC5nZXRVVENNb250aCgpKzEsMiwwKSsiLSIrbyh0LmdldFVUQ0RhdGUoKSwyLDApKyJUIitvKHQuZ2V0VVRDSG91cnMoKSwyLDApKyI6IitvKHQuZ2V0VVRDTWludXRlcygpLDIsMCkrIjoiK28odC5nZXRVVENTZWNvbmRzKCksMiwwKSsiLiIrbyhuLDMsMCkrIloifTpzfSw3Njk3NDpmdW5jdGlvbih0LGUsbil7InVzZSBzdHJpY3QiO3ZhciByPW4oODc1NzkpLG89big1MzQ5OCk7dC5leHBvcnRzPWZ1bmN0aW9uKHQpe2lmKCJzdHJpbmciIT09dCYmIm51bWJlciIhPT10JiYiZGVmYXVsdCIhPT10KXRocm93IFR5cGVFcnJvcigiSW5jb3JyZWN0IGhpbnQiKTtyZXR1cm4gbyhyKHRoaXMpLCJudW1iZXIiIT09dCl9fSw0NjA2MTpmdW5jdGlvbih0LGUsbil7InVzZSBzdHJpY3QiO3ZhciByPW4oMTQwNDQpLG89big3MTIwMSksaT1uKDY0OTY1KSxhPW4oNzE4NDIpLGM9big1MTEyOCkscz1uKDY2OTcxKSx1PW4oOTI5MTMpLGw9bigyMzcyNCksZj1uKDY1NjcyKSxkPW4oMTIzNSkscD1uKDY0MTc2KSxoPXAuSXRlcmF0b3JQcm90b3R5cGUsdj1wLkJVR0dZX1NBRkFSSV9JVEVSQVRPUlMsZz1sKCJpdGVyYXRvciIpLHk9ImtleXMiLG09InZhbHVlcyIsYj0iZW50cmllcyIseD1mdW5jdGlvbigpe3JldHVybiB0aGlzfTt0LmV4cG9ydHM9ZnVuY3Rpb24odCxlLG4sbCxwLHcsRSl7byhuLGUsbCk7dmFyIGosQyxrLFM9ZnVuY3Rpb24odCl7aWYodD09PXAmJl8pcmV0dXJuIF87aWYoIXYmJnQgaW4gSSlyZXR1cm4gSVt0XTtzd2l0Y2godCl7Y2FzZSB5OmNhc2UgbTpjYXNlIGI6cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBuKHRoaXMsdCl9fXJldHVybiBmdW5jdGlvbigpe3JldHVybiBuZXcgbih0aGlzKX19LE89ZSsiIEl0ZXJhdG9yIixBPSExLEk9dC5wcm90b3R5cGUsVD1JW2ddfHxJWyJAQGl0ZXJhdG9yIl18fHAmJklbcF0sXz0hdiYmVHx8UyhwKSxNPSJBcnJheSI9PWUmJkkuZW50cmllc3x8VDtpZihNJiYoaj1pKE0uY2FsbChuZXcgdCkpLGghPT1PYmplY3QucHJvdG90eXBlJiZqLm5leHQmJihmfHxpKGopPT09aHx8KGE/YShqLGgpOiJmdW5jdGlvbiIhPXR5cGVvZiBqW2ddJiZzKGosZyx4KSksYyhqLE8sITAsITApLGYmJihkW09dPXgpKSkscD09bSYmVCYmVC5uYW1lIT09bSYmKEE9ITAsXz1mdW5jdGlvbigpe3JldHVybiBULmNhbGwodGhpcyl9KSxmJiYhRXx8SVtnXT09PV98fHMoSSxnLF8pLGRbZV09XyxwKWlmKEM9e3ZhbHVlczpTKG0pLGtleXM6dz9fOlMoeSksZW50cmllczpTKGIpfSxFKWZvcihrIGluIEMpKHZ8fEF8fCEoayBpbiBJKSkmJnUoSSxrLENba10pO2Vsc2Ugcih7dGFyZ2V0OmUscHJvdG86ITAsZm9yY2VkOnZ8fEF9LEMpO3JldHVybiBDfX0sOTIyNzU6ZnVuY3Rpb24odCxlLG4pe3ZhciByPW4oNTYyMzgpLG89big3NjI5OCksaT1uKDczOTE2KSxhPW4oMzc2MjApLmY7dC5leHBvcnRzPWZ1bmN0aW9uKHQpe3ZhciBlPXIuU3ltYm9sfHwoci5TeW1ib2w9e30pO28oZSx0KXx8YShlLHQse3ZhbHVlOmkuZih0KX0pfX0sNjI1NTY6ZnVuY3Rpb24odCxlLG4pe3ZhciByPW4oMzIxODcpO3QuZXhwb3J0cz0hcigoZnVuY3Rpb24oKXtyZXR1cm4gNyE9T2JqZWN0LmRlZmluZVByb3BlcnR5KHt9LCJhIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIDd9fSkuYX0pKX0sMTkyMzpmdW5jdGlvbih0LGUsbil7dmFyIHI9big4OTU1OCksbz1uKDEwNTkyKSxpPXIuZG9jdW1lbnQsYT1vKGkpJiZvKGkuY3JlYXRlRWxlbWVudCk7dC5leHBvcnRzPWZ1bmN0aW9uKHQpe3JldHVybiBhP2kuY3JlYXRlRWxlbWVudCh0KTp7fX19LDQ3MDk0OmZ1bmN0aW9uKHQpe3QuZXhwb3J0cz17Q1NTUnVsZUxpc3Q6MCxDU1NTdHlsZURlY2xhcmF0aW9uOjAsQ1NTVmFsdWVMaXN0OjAsQ2xpZW50UmVjdExpc3Q6MCxET01SZWN0TGlzdDowLERPTVN0cmluZ0xpc3Q6MCxET01Ub2tlbkxpc3Q6MSxEYXRhVHJhbnNmZXJJdGVtTGlzdDowLEZpbGVMaXN0OjAsSFRNTEFsbENvbGxlY3Rpb246MCxIVE1MQ29sbGVjdGlvbjowLEhUTUxGb3JtRWxlbWVudDowLEhUTUxTZWxlY3RFbGVtZW50OjAsTWVkaWFMaXN0OjAsTWltZVR5cGVBcnJheTowLE5hbWVkTm9kZU1hcDowLE5vZGVMaXN0OjEsUGFpbnRSZXF1ZXN0TGlzdDowLFBsdWdpbjowLFBsdWdpbkFycmF5OjAsU1ZHTGVuZ3RoTGlzdDowLFNWR051bWJlckxpc3Q6MCxTVkdQYXRoU2VnTGlzdDowLFNWR1BvaW50TGlzdDowLFNWR1N0cmluZ0xpc3Q6MCxTVkdUcmFuc2Zvcm1MaXN0OjAsU291cmNlQnVmZmVyTGlzdDowLFN0eWxlU2hlZXRMaXN0OjAsVGV4dFRyYWNrQ3VlTGlzdDowLFRleHRUcmFja0xpc3Q6MCxUb3VjaExpc3Q6MH19LDU5MTM1OmZ1bmN0aW9uKHQpe3QuZXhwb3J0cz1bImNvbnN0cnVjdG9yIiwiaGFzT3duUHJvcGVydHkiLCJpc1Byb3RvdHlwZU9mIiwicHJvcGVydHlJc0VudW1lcmFibGUiLCJ0b0xvY2FsZVN0cmluZyIsInRvU3RyaW5nIiwidmFsdWVPZiJdfSwxNDA0NDpmdW5jdGlvbih0LGUsbil7dmFyIHI9big4OTU1OCksbz1uKDk3MjU3KS5mLGk9big2Njk3MSksYT1uKDkyOTEzKSxjPW4oOTgyNjkpLHM9big5OTYyNSksdT1uKDY0NTA0KTt0LmV4cG9ydHM9ZnVuY3Rpb24odCxlKXt2YXIgbixsLGYsZCxwLGg9dC50YXJnZXQsdj10Lmdsb2JhbCxnPXQuc3RhdDtpZihuPXY/cjpnP3JbaF18fGMoaCx7fSk6KHJbaF18fHt9KS5wcm90b3R5cGUpZm9yKGwgaW4gZSl7aWYoZD1lW2xdLGY9dC5ub1RhcmdldEdldD8ocD1vKG4sbCkpJiZwLnZhbHVlOm5bbF0sIXUodj9sOmgrKGc/Ii4iOiIjIikrbCx0LmZvcmNlZCkmJnZvaWQgMCE9PWYpe2lmKHR5cGVvZiBkPT10eXBlb2YgZiljb250aW51ZTtzKGQsZil9KHQuc2hhbXx8ZiYmZi5zaGFtKSYmaShkLCJzaGFtIiwhMCksYShuLGwsZCx0KX19fSwzMjE4NzpmdW5jdGlvbih0KXt0LmV4cG9ydHM9ZnVuY3Rpb24odCl7dHJ5e3JldHVybiEhdCgpfWNhdGNoKHQpe3JldHVybiEwfX19LDM1ODYwOmZ1bmN0aW9uKHQsZSxuKXsidXNlIHN0cmljdCI7dmFyIHI9big2Njk3MSksbz1uKDkyOTEzKSxpPW4oMzIxODcpLGE9bigyMzcyNCksYz1uKDM4NTk4KSxzPWEoInNwZWNpZXMiKSx1PSFpKChmdW5jdGlvbigpe3ZhciB0PS8uLztyZXR1cm4gdC5leGVjPWZ1bmN0aW9uKCl7dmFyIHQ9W107cmV0dXJuIHQuZ3JvdXBzPXthOiI3In0sdH0sIjciIT09IiIucmVwbGFjZSh0LCIkPGE+Iil9KSksbD0haSgoZnVuY3Rpb24oKXt2YXIgdD0vKD86KS8sZT10LmV4ZWM7dC5leGVjPWZ1bmN0aW9uKCl7cmV0dXJuIGUuYXBwbHkodGhpcyxhcmd1bWVudHMpfTt2YXIgbj0iYWIiLnNwbGl0KHQpO3JldHVybiAyIT09bi5sZW5ndGh8fCJhIiE9PW5bMF18fCJiIiE9PW5bMV19KSk7dC5leHBvcnRzPWZ1bmN0aW9uKHQsZSxuLGYpe3ZhciBkPWEodCkscD0haSgoZnVuY3Rpb24oKXt2YXIgZT17fTtyZXR1cm4gZVtkXT1mdW5jdGlvbigpe3JldHVybiA3fSw3IT0iIlt0XShlKX0pKSxoPXAmJiFpKChmdW5jdGlvbigpe3ZhciBlPSExLG49L2EvO3JldHVybiJzcGxpdCI9PT10JiYoKG49e30pLmNvbnN0cnVjdG9yPXt9LG4uY29uc3RydWN0b3Jbc109ZnVuY3Rpb24oKXtyZXR1cm4gbn0sbi5mbGFncz0iIixuW2RdPS8uL1tkXSksbi5leGVjPWZ1bmN0aW9uKCl7cmV0dXJuIGU9ITAsbnVsbH0sbltkXSgiIiksIWV9KSk7aWYoIXB8fCFofHwicmVwbGFjZSI9PT10JiYhdXx8InNwbGl0Ij09PXQmJiFsKXt2YXIgdj0vLi9bZF0sZz1uKGQsIiJbdF0sKGZ1bmN0aW9uKHQsZSxuLHIsbyl7cmV0dXJuIGUuZXhlYz09PWM/cCYmIW8/e2RvbmU6ITAsdmFsdWU6di5jYWxsKGUsbixyKX06e2RvbmU6ITAsdmFsdWU6dC5jYWxsKG4sZSxyKX06e2RvbmU6ITF9fSkpLHk9Z1swXSxtPWdbMV07byhTdHJpbmcucHJvdG90eXBlLHQseSksbyhSZWdFeHAucHJvdG90eXBlLGQsMj09ZT9mdW5jdGlvbih0LGUpe3JldHVybiBtLmNhbGwodCx0aGlzLGUpfTpmdW5jdGlvbih0KXtyZXR1cm4gbS5jYWxsKHQsdGhpcyl9KSxmJiZyKFJlZ0V4cC5wcm90b3R5cGVbZF0sInNoYW0iLCEwKX19fSw4MDY2NTpmdW5jdGlvbih0LGUsbil7InVzZSBzdHJpY3QiO3ZhciByPW4oNjE5OSksbz1uKDI3ODg0KSxpPW4oNDYxMzApLGE9ZnVuY3Rpb24odCxlLG4sYyxzLHUsbCxmKXtmb3IodmFyIGQscD1zLGg9MCx2PSEhbCYmaShsLGYsMyk7aDxjOyl7aWYoaCBpbiBuKXtpZihkPXY/dihuW2hdLGgsZSk6bltoXSx1PjAmJnIoZCkpcD1hKHQsZSxkLG8oZC5sZW5ndGgpLHAsdS0xKS0xO2Vsc2V7aWYocD49OTAwNzE5OTI1NDc0MDk5MSl0aHJvdyBUeXBlRXJyb3IoIkV4Y2VlZCB0aGUgYWNjZXB0YWJsZSBhcnJheSBsZW5ndGgiKTt0W3BdPWR9cCsrfWgrK31yZXR1cm4gcH07dC5leHBvcnRzPWF9LDQ3ODEyOmZ1bmN0aW9uKHQsZSxuKXsidXNlIHN0cmljdCI7dmFyIHI9big2NTY3Miksbz1uKDg5NTU4KSxpPW4oMzIxODcpO3QuZXhwb3J0cz1yfHwhaSgoZnVuY3Rpb24oKXt2YXIgdD1NYXRoLnJhbmRvbSgpO19fZGVmaW5lU2V0dGVyX18uY2FsbChudWxsLHQsKGZ1bmN0aW9uKCl7fSkpLGRlbGV0ZSBvW3RdfSkpfSw1MjEyOTpmdW5jdGlvbih0LGUsbil7dmFyIHI9bigzMjE4Nyk7dC5leHBvcnRzPWZ1bmN0aW9uKHQpe3JldHVybiByKChmdW5jdGlvbigpe3ZhciBlPSIiW3RdKCciJyk7cmV0dXJuIGUhPT1lLnRvTG93ZXJDYXNlKCl8fGUuc3BsaXQoJyInKS5sZW5ndGg+M30pKX19LDg0NzU0OmZ1bmN0aW9uKHQsZSxuKXt2YXIgcj1uKDMyMTg3KSxvPW4oNTAwNTUpO3QuZXhwb3J0cz1mdW5jdGlvbih0KXtyZXR1cm4gcigoZnVuY3Rpb24oKXtyZXR1cm4hIW9bdF0oKXx8IuKAi8KF4aCOIiE9IuKAi8KF4aCOIlt0XSgpfHxvW3RdLm5hbWUhPT10fSkpfX0sNzQ1MjA6ZnVuY3Rpb24odCxlLG4pe3ZhciByPW4oMzIxODcpO3QuZXhwb3J0cz0hcigoZnVuY3Rpb24oKXtyZXR1cm4gT2JqZWN0LmlzRXh0ZW5zaWJsZShPYmplY3QucHJldmVudEV4dGVuc2lvbnMoe30pKX0pKX0sNzM3Mzk6ZnVuY3Rpb24odCxlLG4peyJ1c2Ugc3RyaWN0Ijt2YXIgcj1uKDg2NDcwKSxvPW4oMTA1OTIpLGk9W10uc2xpY2UsYT17fSxjPWZ1bmN0aW9uKHQsZSxuKXtpZighKGUgaW4gYSkpe2Zvcih2YXIgcj1bXSxvPTA7bzxlO28rKylyW29dPSJhWyIrbysiXSI7YVtlXT1GdW5jdGlvbigiQyxhIiwicmV0dXJuIG5ldyBDKCIrci5qb2luKCIsIikrIikiKX1yZXR1cm4gYVtlXSh0LG4pfTt0LmV4cG9ydHM9RnVuY3Rpb24uYmluZHx8ZnVuY3Rpb24odCl7dmFyIGU9cih0aGlzKSxuPWkuY2FsbChhcmd1bWVudHMsMSksYT1mdW5jdGlvbigpe3ZhciByPW4uY29uY2F0KGkuY2FsbChhcmd1bWVudHMpKTtyZXR1cm4gdGhpcyBpbnN0YW5jZW9mIGE/YyhlLHIubGVuZ3RoLHIpOmUuYXBwbHkodCxyKX07cmV0dXJuIG8oZS5wcm90b3R5cGUpJiYoYS5wcm90b3R5cGU9ZS5wcm90b3R5cGUpLGF9fSw2NjkyMDpmdW5jdGlvbih0LGUsbil7dmFyIHI9big3Mzg5MCksbz1uKDIzNzI0KSgiYXN5bmNJdGVyYXRvciIpO3QuZXhwb3J0cz1mdW5jdGlvbih0KXt2YXIgZT10W29dO3JldHVybiB2b2lkIDA9PT1lP3IodCk6ZX19LDc3MDE6ZnVuY3Rpb24odCxlLG4pe3ZhciByPW4oNTYyMzgpLG89big4OTU1OCksaT1mdW5jdGlvbih0KXtyZXR1cm4iZnVuY3Rpb24iPT10eXBlb2YgdD90OnZvaWQgMH07dC5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg8Mj9pKHJbdF0pfHxpKG9bdF0pOnJbdF0mJnJbdF1bZV18fG9bdF0mJm9bdF1bZV19fSw3Mzg5MDpmdW5jdGlvbih0LGUsbil7dmFyIHI9big1OTU5MSksbz1uKDEyMzUpLGk9bigyMzcyNCkoIml0ZXJhdG9yIik7dC5leHBvcnRzPWZ1bmN0aW9uKHQpe2lmKG51bGwhPXQpcmV0dXJuIHRbaV18fHRbIkBAaXRlcmF0b3IiXXx8b1tyKHQpXX19LDMxMDc0OmZ1bmN0aW9uKHQsZSxuKXt2YXIgcj1uKDg3NTc5KSxvPW4oNzM4OTApO3QuZXhwb3J0cz1mdW5jdGlvbih0KXt2YXIgZT1vKHQpO2lmKCJmdW5jdGlvbiIhPXR5cGVvZiBlKXRocm93IFR5cGVFcnJvcihTdHJpbmcodCkrIiBpcyBub3QgaXRlcmFibGUiKTtyZXR1cm4gcihlLmNhbGwodCkpfX0sNDE5ODk6ZnVuY3Rpb24odCxlLG4pe3ZhciByPW4oNjU2NzIpLG89bigzMTA3NCk7dC5leHBvcnRzPXI/bzpmdW5jdGlvbih0KXtyZXR1cm4gTWFwLnByb3RvdHlwZS5lbnRyaWVzLmNhbGwodCl9fSw0MTQ3NTpmdW5jdGlvbih0LGUsbil7dmFyIHI9big2NTY3Miksbz1uKDMxMDc0KTt0LmV4cG9ydHM9cj9vOmZ1bmN0aW9uKHQpe3JldHVybiBTZXQucHJvdG90eXBlLnZhbHVlcy5jYWxsKHQpfX0sODk1NTg6ZnVuY3Rpb24odCxlLG4pe3ZhciByPWZ1bmN0aW9uKHQpe3JldHVybiB0JiZ0Lk1hdGg9PU1hdGgmJnR9O3QuZXhwb3J0cz1yKCJvYmplY3QiPT10eXBlb2YgZ2xvYmFsVGhpcyYmZ2xvYmFsVGhpcyl8fHIoIm9iamVjdCI9PXR5cGVvZiB3aW5kb3cmJndpbmRvdyl8fHIoIm9iamVjdCI9PXR5cGVvZiBzZWxmJiZzZWxmKXx8cigib2JqZWN0Ij09dHlwZW9mIG4uZyYmbi5nKXx8RnVuY3Rpb24oInJldHVybiB0aGlzIikoKX0sNzYyOTg6ZnVuY3Rpb24odCl7dmFyIGU9e30uaGFzT3duUHJvcGVydHk7dC5leHBvcnRzPWZ1bmN0aW9uKHQsbil7cmV0dXJuIGUuY2FsbCh0LG4pfX0sMjMwNzA6ZnVuY3Rpb24odCl7dC5leHBvcnRzPXt9fSw4MzYyMDpmdW5jdGlvbih0LGUsbil7dmFyIHI9big4OTU1OCk7dC5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7dmFyIG49ci5jb25zb2xlO24mJm4uZXJyb3ImJigxPT09YXJndW1lbnRzLmxlbmd0aD9uLmVycm9yKHQpOm4uZXJyb3IodCxlKSl9fSw1MTU3MTpmdW5jdGlvbih0LGUsbil7dmFyIHI9big3NzAxKTt0LmV4cG9ydHM9cigiZG9jdW1lbnQiLCJkb2N1bWVudEVsZW1lbnQiKX0sNjI3OTk6ZnVuY3Rpb24odCxlLG4pe3ZhciByPW4oNjI1NTYpLG89bigzMjE4NyksaT1uKDE5MjMpO3QuZXhwb3J0cz0hciYmIW8oKGZ1bmN0aW9uKCl7cmV0dXJuIDchPU9iamVjdC5kZWZpbmVQcm9wZXJ0eShpKCJkaXYiKSwiYSIse2dldDpmdW5jdGlvbigpe3JldHVybiA3fX0pLmF9KSl9LDkwNzI1OmZ1bmN0aW9uKHQpe3ZhciBlPTEvMCxuPU1hdGguYWJzLHI9TWF0aC5wb3csbz1NYXRoLmZsb29yLGk9TWF0aC5sb2csYT1NYXRoLkxOMjt0LmV4cG9ydHM9e3BhY2s6ZnVuY3Rpb24odCxjLHMpe3ZhciB1LGwsZixkPW5ldyBBcnJheShzKSxwPTgqcy1jLTEsaD0oMTw8cCktMSx2PWg+PjEsZz0yMz09PWM/cigyLC0yNCktcigyLC03Nyk6MCx5PXQ8MHx8MD09PXQmJjEvdDwwPzE6MCxtPTA7Zm9yKCh0PW4odCkpIT10fHx0PT09ZT8obD10IT10PzE6MCx1PWgpOih1PW8oaSh0KS9hKSx0KihmPXIoMiwtdSkpPDEmJih1LS0sZio9MiksKHQrPXUrdj49MT9nL2Y6ZypyKDIsMS12KSkqZj49MiYmKHUrKyxmLz0yKSx1K3Y+PWg/KGw9MCx1PWgpOnUrdj49MT8obD0odCpmLTEpKnIoMixjKSx1Kz12KToobD10KnIoMix2LTEpKnIoMixjKSx1PTApKTtjPj04O2RbbSsrXT0yNTUmbCxsLz0yNTYsYy09OCk7Zm9yKHU9dTw8Y3xsLHArPWM7cD4wO2RbbSsrXT0yNTUmdSx1Lz0yNTYscC09OCk7cmV0dXJuIGRbLS1tXXw9MTI4KnksZH0sdW5wYWNrOmZ1bmN0aW9uKHQsbil7dmFyIG8saT10Lmxlbmd0aCxhPTgqaS1uLTEsYz0oMTw8YSktMSxzPWM+PjEsdT1hLTcsbD1pLTEsZj10W2wtLV0sZD0xMjcmZjtmb3IoZj4+PTc7dT4wO2Q9MjU2KmQrdFtsXSxsLS0sdS09OCk7Zm9yKG89ZCYoMTw8LXUpLTEsZD4+PS11LHUrPW47dT4wO289MjU2Km8rdFtsXSxsLS0sdS09OCk7aWYoMD09PWQpZD0xLXM7ZWxzZXtpZihkPT09YylyZXR1cm4gbz9OYU46Zj8tMS8wOmU7bys9cigyLG4pLGQtPXN9cmV0dXJuKGY/LTE6MSkqbypyKDIsZC1uKX19fSwyNDk4OmZ1bmN0aW9uKHQsZSxuKXt2YXIgcj1uKDMyMTg3KSxvPW4oMjQ1OTQpLGk9IiIuc3BsaXQ7dC5leHBvcnRzPXIoKGZ1bmN0aW9uKCl7cmV0dXJuIU9iamVjdCgieiIpLnByb3BlcnR5SXNFbnVtZXJhYmxlKDApfSkpP2Z1bmN0aW9uKHQpe3JldHVybiJTdHJpbmciPT1vKHQpP2kuY2FsbCh0LCIiKTpPYmplY3QodCl9Ok9iamVjdH0sMzAyNzI6ZnVuY3Rpb24odCxlLG4pe3ZhciByPW4oMTA1OTIpLG89big3MTg0Mik7dC5leHBvcnRzPWZ1bmN0aW9uKHQsZSxuKXt2YXIgaSxhO3JldHVybiBvJiYiZnVuY3Rpb24iPT10eXBlb2YoaT1lLmNvbnN0cnVjdG9yKSYmaSE9PW4mJnIoYT1pLnByb3RvdHlwZSkmJmEhPT1uLnByb3RvdHlwZSYmbyh0LGEpLHR9fSw3Njc3MzpmdW5jdGlvbih0LGUsbil7dmFyIHI9bigzNDc0MSksbz1GdW5jdGlvbi50b1N0cmluZzsiZnVuY3Rpb24iIT10eXBlb2Ygci5pbnNwZWN0U291cmNlJiYoci5pbnNwZWN0U291cmNlPWZ1bmN0aW9uKHQpe3JldHVybiBvLmNhbGwodCl9KSx0LmV4cG9ydHM9ci5pbnNwZWN0U291cmNlfSw5NjAzOmZ1bmN0aW9uKHQsZSxuKXt2YXIgcj1uKDIzMDcwKSxvPW4oMTA1OTIpLGk9big3NjI5OCksYT1uKDM3NjIwKS5mLGM9big2NzI5KSxzPW4oNzQ1MjApLHU9YygibWV0YSIpLGw9MCxmPU9iamVjdC5pc0V4dGVuc2libGV8fGZ1bmN0aW9uKCl7cmV0dXJuITB9LGQ9ZnVuY3Rpb24odCl7YSh0LHUse3ZhbHVlOntvYmplY3RJRDoiTyIrICsrbCx3ZWFrRGF0YTp7fX19KX0scD10LmV4cG9ydHM9e1JFUVVJUkVEOiExLGZhc3RLZXk6ZnVuY3Rpb24odCxlKXtpZighbyh0KSlyZXR1cm4ic3ltYm9sIj09dHlwZW9mIHQ/dDooInN0cmluZyI9PXR5cGVvZiB0PyJTIjoiUCIpK3Q7aWYoIWkodCx1KSl7aWYoIWYodCkpcmV0dXJuIkYiO2lmKCFlKXJldHVybiJFIjtkKHQpfXJldHVybiB0W3VdLm9iamVjdElEfSxnZXRXZWFrRGF0YTpmdW5jdGlvbih0LGUpe2lmKCFpKHQsdSkpe2lmKCFmKHQpKXJldHVybiEwO2lmKCFlKXJldHVybiExO2QodCl9cmV0dXJuIHRbdV0ud2Vha0RhdGF9LG9uRnJlZXplOmZ1bmN0aW9uKHQpe3JldHVybiBzJiZwLlJFUVVJUkVEJiZmKHQpJiYhaSh0LHUpJiZkKHQpLHR9fTtyW3VdPSEwfSw4OTgyNzpmdW5jdGlvbih0LGUsbil7dmFyIHIsbyxpLGE9bigxOTU5MSksYz1uKDg5NTU4KSxzPW4oMTA1OTIpLHU9big2Njk3MSksbD1uKDc2Mjk4KSxmPW4oODMxOTcpLGQ9bigyMzA3MCkscD1jLldlYWtNYXA7aWYoYSl7dmFyIGg9bmV3IHAsdj1oLmdldCxnPWguaGFzLHk9aC5zZXQ7cj1mdW5jdGlvbih0LGUpe3JldHVybiB5LmNhbGwoaCx0LGUpLGV9LG89ZnVuY3Rpb24odCl7cmV0dXJuIHYuY2FsbChoLHQpfHx7fX0saT1mdW5jdGlvbih0KXtyZXR1cm4gZy5jYWxsKGgsdCl9fWVsc2V7dmFyIG09Zigic3RhdGUiKTtkW21dPSEwLHI9ZnVuY3Rpb24odCxlKXtyZXR1cm4gdSh0LG0sZSksZX0sbz1mdW5jdGlvbih0KXtyZXR1cm4gbCh0LG0pP3RbbV06e319LGk9ZnVuY3Rpb24odCl7cmV0dXJuIGwodCxtKX19dC5leHBvcnRzPXtzZXQ6cixnZXQ6byxoYXM6aSxlbmZvcmNlOmZ1bmN0aW9uKHQpe3JldHVybiBpKHQpP28odCk6cih0LHt9KX0sZ2V0dGVyRm9yOmZ1bmN0aW9uKHQpe3JldHVybiBmdW5jdGlvbihlKXt2YXIgbjtpZighcyhlKXx8KG49byhlKSkudHlwZSE9PXQpdGhyb3cgVHlwZUVycm9yKCJJbmNvbXBhdGlibGUgcmVjZWl2ZXIsICIrdCsiIHJlcXVpcmVkIik7cmV0dXJuIG59fX19LDQ0OTg0OmZ1bmN0aW9uKHQsZSxuKXt2YXIgcj1uKDIzNzI0KSxvPW4oMTIzNSksaT1yKCJpdGVyYXRvciIpLGE9QXJyYXkucHJvdG90eXBlO3QuZXhwb3J0cz1mdW5jdGlvbih0KXtyZXR1cm4gdm9pZCAwIT09dCYmKG8uQXJyYXk9PT10fHxhW2ldPT09dCl9fSw2MTk5OmZ1bmN0aW9uKHQsZSxuKXt2YXIgcj1uKDI0NTk0KTt0LmV4cG9ydHM9QXJyYXkuaXNBcnJheXx8ZnVuY3Rpb24odCl7cmV0dXJuIkFycmF5Ij09cih0KX19LDY0NTA0OmZ1bmN0aW9uKHQsZSxuKXt2YXIgcj1uKDMyMTg3KSxvPS8jfFwucHJvdG90eXBlXC4vLGk9ZnVuY3Rpb24odCxlKXt2YXIgbj1jW2EodCldO3JldHVybiBuPT11fHxuIT1zJiYoImZ1bmN0aW9uIj09dHlwZW9mIGU/cihlKTohIWUpfSxhPWkubm9ybWFsaXplPWZ1bmN0aW9uKHQpe3JldHVybiBTdHJpbmcodCkucmVwbGFjZShvLCIuIikudG9Mb3dlckNhc2UoKX0sYz1pLmRhdGE9e30scz1pLk5BVElWRT0iTiIsdT1pLlBPTFlGSUxMPSJQIjt0LmV4cG9ydHM9aX0sMzgyNTc6ZnVuY3Rpb24odCxlLG4pe3ZhciByPW4oMTA1OTIpLG89TWF0aC5mbG9vcjt0LmV4cG9ydHM9ZnVuY3Rpb24odCl7cmV0dXJuIXIodCkmJmlzRmluaXRlKHQpJiZvKHQpPT09dH19LDIxMjMxOmZ1bmN0aW9uKHQsZSxuKXt2YXIgcj1uKDM5NDc2KTt0LmV4cG9ydHM9LyhpcGhvbmV8aXBvZHxpcGFkKS4qYXBwbGV3ZWJraXQvaS50ZXN0KHIpfSwxMDU5MjpmdW5jdGlvbih0KXt0LmV4cG9ydHM9ZnVuY3Rpb24odCl7cmV0dXJuIm9iamVjdCI9PXR5cGVvZiB0P251bGwhPT10OiJmdW5jdGlvbiI9PXR5cGVvZiB0fX0sNjU2NzI6ZnVuY3Rpb24odCl7dC5leHBvcnRzPSExfSw0MzIyMzpmdW5jdGlvbih0LGUsbil7dmFyIHI9bigxMDU5Miksbz1uKDI0NTk0KSxpPW4oMjM3MjQpKCJtYXRjaCIpO3QuZXhwb3J0cz1mdW5jdGlvbih0KXt2YXIgZTtyZXR1cm4gcih0KSYmKHZvaWQgMCE9PShlPXRbaV0pPyEhZToiUmVnRXhwIj09byh0KSl9fSw0MTMzNDpmdW5jdGlvbih0LGUsbil7dmFyIHI9big4NzU3OSksbz1uKDQ0OTg0KSxpPW4oMjc4ODQpLGE9big0NjEzMCksYz1uKDczODkwKSxzPW4oMTIyNzgpLHU9ZnVuY3Rpb24odCxlKXt0aGlzLnN0b3BwZWQ9dCx0aGlzLnJlc3VsdD1lfTsodC5leHBvcnRzPWZ1bmN0aW9uKHQsZSxuLGwsZil7dmFyIGQscCxoLHYsZyx5LG0sYj1hKGUsbixsPzI6MSk7aWYoZilkPXQ7ZWxzZXtpZigiZnVuY3Rpb24iIT10eXBlb2YocD1jKHQpKSl0aHJvdyBUeXBlRXJyb3IoIlRhcmdldCBpcyBub3QgaXRlcmFibGUiKTtpZihvKHApKXtmb3IoaD0wLHY9aSh0Lmxlbmd0aCk7dj5oO2grKylpZigoZz1sP2IocihtPXRbaF0pWzBdLG1bMV0pOmIodFtoXSkpJiZnIGluc3RhbmNlb2YgdSlyZXR1cm4gZztyZXR1cm4gbmV3IHUoITEpfWQ9cC5jYWxsKHQpfWZvcih5PWQubmV4dDshKG09eS5jYWxsKGQpKS5kb25lOylpZigib2JqZWN0Ij09dHlwZW9mKGc9cyhkLGIsbS52YWx1ZSxsKSkmJmcmJmcgaW5zdGFuY2VvZiB1KXJldHVybiBnO3JldHVybiBuZXcgdSghMSl9KS5zdG9wPWZ1bmN0aW9uKHQpe3JldHVybiBuZXcgdSghMCx0KX19LDY0MTc2OmZ1bmN0aW9uKHQsZSxuKXsidXNlIHN0cmljdCI7dmFyIHIsbyxpLGE9big2NDk2NSksYz1uKDY2OTcxKSxzPW4oNzYyOTgpLHU9bigyMzcyNCksbD1uKDY1NjcyKSxmPXUoIml0ZXJhdG9yIiksZD0hMTtbXS5rZXlzJiYoIm5leHQiaW4oaT1bXS5rZXlzKCkpPyhvPWEoYShpKSkpIT09T2JqZWN0LnByb3RvdHlwZSYmKHI9byk6ZD0hMCksbnVsbD09ciYmKHI9e30pLGx8fHMocixmKXx8YyhyLGYsKGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXN9KSksdC5leHBvcnRzPXtJdGVyYXRvclByb3RvdHlwZTpyLEJVR0dZX1NBRkFSSV9JVEVSQVRPUlM6ZH19LDEyMzU6ZnVuY3Rpb24odCl7dC5leHBvcnRzPXt9fSw0NzkyNzpmdW5jdGlvbih0LGUsbil7InVzZSBzdHJpY3QiO3ZhciByPW4oODc1NzkpO3QuZXhwb3J0cz1mdW5jdGlvbih0LGUpe3ZhciBuLG89cih0aGlzKSxpPWFyZ3VtZW50cy5sZW5ndGg+Mj9hcmd1bWVudHNbMl06dm9pZCAwO2lmKCJmdW5jdGlvbiIhPXR5cGVvZiBlJiYiZnVuY3Rpb24iIT10eXBlb2YgaSl0aHJvdyBUeXBlRXJyb3IoIkF0IGxlYXN0IG9uZSBjYWxsYmFjayByZXF1aXJlZCIpO3JldHVybiBvLmhhcyh0KT8obj1vLmdldCh0KSwiZnVuY3Rpb24iPT10eXBlb2YgZSYmKG49ZShuKSxvLnNldCh0LG4pKSk6ImZ1bmN0aW9uIj09dHlwZW9mIGkmJihuPWkoKSxvLnNldCh0LG4pKSxufX0sNzI5NzA6ZnVuY3Rpb24odCl7dmFyIGU9TWF0aC5leHBtMSxuPU1hdGguZXhwO3QuZXhwb3J0cz0hZXx8ZSgxMCk+MjIwMjUuNDY1Nzk0ODA2NzE4fHxlKDEwKTwyMjAyNS40NjU3OTQ4MDY3MTh8fC0yZS0xNyE9ZSgtMmUtMTcpP2Z1bmN0aW9uKHQpe3JldHVybiAwPT0odD0rdCk/dDp0Pi0xZS02JiZ0PDFlLTY/dCt0KnQvMjpuKHQpLTF9OmV9LDUzMjUxOmZ1bmN0aW9uKHQsZSxuKXt2YXIgcj1uKDM4Nzg3KSxvPU1hdGguYWJzLGk9TWF0aC5wb3csYT1pKDIsLTUyKSxjPWkoMiwtMjMpLHM9aSgyLDEyNykqKDItYyksdT1pKDIsLTEyNik7dC5leHBvcnRzPU1hdGguZnJvdW5kfHxmdW5jdGlvbih0KXt2YXIgZSxuLGk9byh0KSxsPXIodCk7cmV0dXJuIGk8dT9sKihpL3UvYysxL2EtMS9hKSp1KmM6KG49KGU9KDErYy9hKSppKS0oZS1pKSk+c3x8biE9bj9sKigxLzApOmwqbn19LDIxOTMyOmZ1bmN0aW9uKHQpe3ZhciBlPU1hdGgubG9nO3QuZXhwb3J0cz1NYXRoLmxvZzFwfHxmdW5jdGlvbih0KXtyZXR1cm4odD0rdCk+LTFlLTgmJnQ8MWUtOD90LXQqdC8yOmUoMSt0KX19LDc3NDI6ZnVuY3Rpb24odCl7dC5leHBvcnRzPU1hdGguc2NhbGV8fGZ1bmN0aW9uKHQsZSxuLHIsbyl7cmV0dXJuIDA9PT1hcmd1bWVudHMubGVuZ3RofHx0IT10fHxlIT1lfHxuIT1ufHxyIT1yfHxvIT1vP05hTjp0PT09MS8wfHx0PT09LTEvMD90Oih0LWUpKihvLXIpLyhuLWUpK3J9fSwzODc4NzpmdW5jdGlvbih0KXt0LmV4cG9ydHM9TWF0aC5zaWdufHxmdW5jdGlvbih0KXtyZXR1cm4gMD09KHQ9K3QpfHx0IT10P3Q6dDwwPy0xOjF9fSw2NTU1NTpmdW5jdGlvbih0LGUsbil7dmFyIHIsbyxpLGEsYyxzLHUsbCxmPW4oODk1NTgpLGQ9big5NzI1NykuZixwPW4oMjQ1OTQpLGg9bigyMTc0NCkuc2V0LHY9bigyMTIzMSksZz1mLk11dGF0aW9uT2JzZXJ2ZXJ8fGYuV2ViS2l0TXV0YXRpb25PYnNlcnZlcix5PWYucHJvY2VzcyxtPWYuUHJvbWlzZSxiPSJwcm9jZXNzIj09cCh5KSx4PWQoZiwicXVldWVNaWNyb3Rhc2siKSx3PXgmJngudmFsdWU7d3x8KHI9ZnVuY3Rpb24oKXt2YXIgdCxlO2ZvcihiJiYodD15LmRvbWFpbikmJnQuZXhpdCgpO287KXtlPW8uZm4sbz1vLm5leHQ7dHJ5e2UoKX1jYXRjaCh0KXt0aHJvdyBvP2EoKTppPXZvaWQgMCx0fX1pPXZvaWQgMCx0JiZ0LmVudGVyKCl9LGI/YT1mdW5jdGlvbigpe3kubmV4dFRpY2socil9OmcmJiF2PyhjPSEwLHM9ZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUoIiIpLG5ldyBnKHIpLm9ic2VydmUocyx7Y2hhcmFjdGVyRGF0YTohMH0pLGE9ZnVuY3Rpb24oKXtzLmRhdGE9Yz0hY30pOm0mJm0ucmVzb2x2ZT8odT1tLnJlc29sdmUodm9pZCAwKSxsPXUudGhlbixhPWZ1bmN0aW9uKCl7bC5jYWxsKHUscil9KTphPWZ1bmN0aW9uKCl7aC5jYWxsKGYscil9KSx0LmV4cG9ydHM9d3x8ZnVuY3Rpb24odCl7dmFyIGU9e2ZuOnQsbmV4dDp2b2lkIDB9O2kmJihpLm5leHQ9ZSksb3x8KG89ZSxhKCkpLGk9ZX19LDM5NDU3OmZ1bmN0aW9uKHQsZSxuKXt2YXIgcj1uKDg5NTU4KTt0LmV4cG9ydHM9ci5Qcm9taXNlfSw5MDE0OmZ1bmN0aW9uKHQsZSxuKXt2YXIgcj1uKDMyMTg3KTt0LmV4cG9ydHM9ISFPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzJiYhcigoZnVuY3Rpb24oKXtyZXR1cm4hU3RyaW5nKFN5bWJvbCgpKX0pKX0sNTc1OTc6ZnVuY3Rpb24odCxlLG4pe3ZhciByPW4oMzIxODcpLG89bigyMzcyNCksaT1uKDY1NjcyKSxhPW8oIml0ZXJhdG9yIik7dC5leHBvcnRzPSFyKChmdW5jdGlvbigpe3ZhciB0PW5ldyBVUkwoImI/YT0xJmI9MiZjPTMiLCJodHRwOi8vYSIpLGU9dC5zZWFyY2hQYXJhbXMsbj0iIjtyZXR1cm4gdC5wYXRobmFtZT0iYyUyMGQiLGUuZm9yRWFjaCgoZnVuY3Rpb24odCxyKXtlLmRlbGV0ZSgiYiIpLG4rPXIrdH0pKSxpJiYhdC50b0pTT058fCFlLnNvcnR8fCJodHRwOi8vYS9jJTIwZD9hPTEmYz0zIiE9PXQuaHJlZnx8IjMiIT09ZS5nZXQoImMiKXx8ImE9MSIhPT1TdHJpbmcobmV3IFVSTFNlYXJjaFBhcmFtcygiP2E9MSIpKXx8IWVbYV18fCJhIiE9PW5ldyBVUkwoImh0dHBzOi8vYUBiIikudXNlcm5hbWV8fCJiIiE9PW5ldyBVUkxTZWFyY2hQYXJhbXMobmV3IFVSTFNlYXJjaFBhcmFtcygiYT1iIikpLmdldCgiYSIpfHwieG4tLWUxYXliYyIhPT1uZXcgVVJMKCJodHRwOi8v0YLQtdGB0YIiKS5ob3N0fHwiIyVEMCVCMSIhPT1uZXcgVVJMKCJodHRwOi8vYSPQsSIpLmhhc2h8fCJhMWMzIiE9PW58fCJ4IiE9PW5ldyBVUkwoImh0dHA6Ly94Iix2b2lkIDApLmhvc3R9KSl9LDE5NTkxOmZ1bmN0aW9uKHQsZSxuKXt2YXIgcj1uKDg5NTU4KSxvPW4oNzY3NzMpLGk9ci5XZWFrTWFwO3QuZXhwb3J0cz0iZnVuY3Rpb24iPT10eXBlb2YgaSYmL25hdGl2ZSBjb2RlLy50ZXN0KG8oaSkpfSw4MzA4MzpmdW5jdGlvbih0LGUsbil7InVzZSBzdHJpY3QiO3ZhciByPW4oODY0NzApLG89ZnVuY3Rpb24odCl7dmFyIGUsbjt0aGlzLnByb21pc2U9bmV3IHQoKGZ1bmN0aW9uKHQscil7aWYodm9pZCAwIT09ZXx8dm9pZCAwIT09bil0aHJvdyBUeXBlRXJyb3IoIkJhZCBQcm9taXNlIGNvbnN0cnVjdG9yIik7ZT10LG49cn0pKSx0aGlzLnJlc29sdmU9cihlKSx0aGlzLnJlamVjdD1yKG4pfTt0LmV4cG9ydHMuZj1mdW5jdGlvbih0KXtyZXR1cm4gbmV3IG8odCl9fSw5OTM0NjpmdW5jdGlvbih0LGUsbil7dmFyIHI9big0MzIyMyk7dC5leHBvcnRzPWZ1bmN0aW9uKHQpe2lmKHIodCkpdGhyb3cgVHlwZUVycm9yKCJUaGUgbWV0aG9kIGRvZXNuJ3QgYWNjZXB0IHJlZ3VsYXIgZXhwcmVzc2lvbnMiKTtyZXR1cm4gdH19LDg5NTQyOmZ1bmN0aW9uKHQsZSxuKXt2YXIgcj1uKDg5NTU4KS5pc0Zpbml0ZTt0LmV4cG9ydHM9TnVtYmVyLmlzRmluaXRlfHxmdW5jdGlvbih0KXtyZXR1cm4ibnVtYmVyIj09dHlwZW9mIHQmJnIodCl9fSw3ODY4NTpmdW5jdGlvbih0LGUsbil7InVzZSBzdHJpY3QiO3ZhciByPW4oNjI1NTYpLG89bigzMjE4NyksaT1uKDI1NTA3KSxhPW4oNTY5OTEpLGM9big0MTYyOCkscz1uKDE5MjA5KSx1PW4oMjQ5OCksbD1PYmplY3QuYXNzaWduLGY9T2JqZWN0LmRlZmluZVByb3BlcnR5O3QuZXhwb3J0cz0hbHx8bygoZnVuY3Rpb24oKXtpZihyJiYxIT09bCh7YjoxfSxsKGYoe30sImEiLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe2YodGhpcywiYiIse3ZhbHVlOjMsZW51bWVyYWJsZTohMX0pfX0pLHtiOjJ9KSkuYilyZXR1cm4hMDt2YXIgdD17fSxlPXt9LG49U3ltYm9sKCksbz0iYWJjZGVmZ2hpamtsbW5vcHFyc3QiO3JldHVybiB0W25dPTcsby5zcGxpdCgiIikuZm9yRWFjaCgoZnVuY3Rpb24odCl7ZVt0XT10fSkpLDchPWwoe30sdClbbl18fGkobCh7fSxlKSkuam9pbigiIikhPW99KSk/ZnVuY3Rpb24odCxlKXtmb3IodmFyIG49cyh0KSxvPWFyZ3VtZW50cy5sZW5ndGgsbD0xLGY9YS5mLGQ9Yy5mO28+bDspZm9yKHZhciBwLGg9dShhcmd1bWVudHNbbCsrXSksdj1mP2koaCkuY29uY2F0KGYoaCkpOmkoaCksZz12Lmxlbmd0aCx5PTA7Zz55OylwPXZbeSsrXSxyJiYhZC5jYWxsKGgscCl8fChuW3BdPWhbcF0pO3JldHVybiBufTpsfSw1MDg2ODpmdW5jdGlvbih0LGUsbil7dmFyIHI9big4NzU3OSksbz1uKDg2NDAxKSxpPW4oNTkxMzUpLGE9bigyMzA3MCksYz1uKDUxNTcxKSxzPW4oMTkyMyksdT1uKDgzMTk3KSgiSUVfUFJPVE8iKSxsPWZ1bmN0aW9uKCl7fSxmPWZ1bmN0aW9uKCl7dmFyIHQsZT1zKCJpZnJhbWUiKSxuPWkubGVuZ3RoO2ZvcihlLnN0eWxlLmRpc3BsYXk9Im5vbmUiLGMuYXBwZW5kQ2hpbGQoZSksZS5zcmM9U3RyaW5nKCJqYXZhc2NyaXB0OiIpLCh0PWUuY29udGVudFdpbmRvdy5kb2N1bWVudCkub3BlbigpLHQud3JpdGUoIjxzY3JpcHQ+ZG9jdW1lbnQuRj1PYmplY3Q8XC9zY3JpcHQ+IiksdC5jbG9zZSgpLGY9dC5GO24tLTspZGVsZXRlIGYucHJvdG90eXBlW2lbbl1dO3JldHVybiBmKCl9O3QuZXhwb3J0cz1PYmplY3QuY3JlYXRlfHxmdW5jdGlvbih0LGUpe3ZhciBuO3JldHVybiBudWxsIT09dD8obC5wcm90b3R5cGU9cih0KSxuPW5ldyBsLGwucHJvdG90eXBlPW51bGwsblt1XT10KTpuPWYoKSx2b2lkIDA9PT1lP246byhuLGUpfSxhW3VdPSEwfSw4NjQwMTpmdW5jdGlvbih0LGUsbil7dmFyIHI9big2MjU1Niksbz1uKDM3NjIwKSxpPW4oODc1NzkpLGE9bigyNTUwNyk7dC5leHBvcnRzPXI/T2JqZWN0LmRlZmluZVByb3BlcnRpZXM6ZnVuY3Rpb24odCxlKXtpKHQpO2Zvcih2YXIgbixyPWEoZSksYz1yLmxlbmd0aCxzPTA7Yz5zOylvLmYodCxuPXJbcysrXSxlW25dKTtyZXR1cm4gdH19LDM3NjIwOmZ1bmN0aW9uKHQsZSxuKXt2YXIgcj1uKDYyNTU2KSxvPW4oNjI3OTkpLGk9big4NzU3OSksYT1uKDUzNDk4KSxjPU9iamVjdC5kZWZpbmVQcm9wZXJ0eTtlLmY9cj9jOmZ1bmN0aW9uKHQsZSxuKXtpZihpKHQpLGU9YShlLCEwKSxpKG4pLG8pdHJ5e3JldHVybiBjKHQsZSxuKX1jYXRjaCh0KXt9aWYoImdldCJpbiBufHwic2V0ImluIG4pdGhyb3cgVHlwZUVycm9yKCJBY2Nlc3NvcnMgbm90IHN1cHBvcnRlZCIpO3JldHVybiJ2YWx1ZSJpbiBuJiYodFtlXT1uLnZhbHVlKSx0fX0sOTcyNTc6ZnVuY3Rpb24odCxlLG4pe3ZhciByPW4oNjI1NTYpLG89big0MTYyOCksaT1uKDE0MjA5KSxhPW4oOTU3MyksYz1uKDUzNDk4KSxzPW4oNzYyOTgpLHU9big2Mjc5OSksbD1PYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yO2UuZj1yP2w6ZnVuY3Rpb24odCxlKXtpZih0PWEodCksZT1jKGUsITApLHUpdHJ5e3JldHVybiBsKHQsZSl9Y2F0Y2godCl7fWlmKHModCxlKSlyZXR1cm4gaSghby5mLmNhbGwodCxlKSx0W2VdKX19LDI2OTM3OmZ1bmN0aW9uKHQsZSxuKXt2YXIgcj1uKDk1NzMpLG89bigxMzMzNCkuZixpPXt9LnRvU3RyaW5nLGE9Im9iamVjdCI9PXR5cGVvZiB3aW5kb3cmJndpbmRvdyYmT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXM/T2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMod2luZG93KTpbXTt0LmV4cG9ydHMuZj1mdW5jdGlvbih0KXtyZXR1cm4gYSYmIltvYmplY3QgV2luZG93XSI9PWkuY2FsbCh0KT9mdW5jdGlvbih0KXt0cnl7cmV0dXJuIG8odCl9Y2F0Y2godCl7cmV0dXJuIGEuc2xpY2UoKX19KHQpOm8ocih0KSl9fSwxMzMzNDpmdW5jdGlvbih0LGUsbil7dmFyIHI9big0MTc2KSxvPW4oNTkxMzUpLmNvbmNhdCgibGVuZ3RoIiwicHJvdG90eXBlIik7ZS5mPU9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzfHxmdW5jdGlvbih0KXtyZXR1cm4gcih0LG8pfX0sNTY5OTE6ZnVuY3Rpb24odCxlKXtlLmY9T2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9sc30sNjQ5NjU6ZnVuY3Rpb24odCxlLG4pe3ZhciByPW4oNzYyOTgpLG89bigxOTIwOSksaT1uKDgzMTk3KSxhPW4oNzE2MDgpLGM9aSgiSUVfUFJPVE8iKSxzPU9iamVjdC5wcm90b3R5cGU7dC5leHBvcnRzPWE/T2JqZWN0LmdldFByb3RvdHlwZU9mOmZ1bmN0aW9uKHQpe3JldHVybiB0PW8odCkscih0LGMpP3RbY106ImZ1bmN0aW9uIj09dHlwZW9mIHQuY29uc3RydWN0b3ImJnQgaW5zdGFuY2VvZiB0LmNvbnN0cnVjdG9yP3QuY29uc3RydWN0b3IucHJvdG90eXBlOnQgaW5zdGFuY2VvZiBPYmplY3Q/czpudWxsfX0sODY0MDM6ZnVuY3Rpb24odCxlLG4peyJ1c2Ugc3RyaWN0Ijt2YXIgcj1uKDg5ODI3KSxvPW4oNzEyMDEpLGk9big3NjI5OCksYT1uKDI1NTA3KSxjPW4oMTkyMDkpLHM9Ik9iamVjdCBJdGVyYXRvciIsdT1yLnNldCxsPXIuZ2V0dGVyRm9yKHMpO3QuZXhwb3J0cz1vKChmdW5jdGlvbih0LGUpe3ZhciBuPWModCk7dSh0aGlzLHt0eXBlOnMsbW9kZTplLG9iamVjdDpuLGtleXM6YShuKSxpbmRleDowfSl9KSwiT2JqZWN0IiwoZnVuY3Rpb24oKXtmb3IodmFyIHQ9bCh0aGlzKSxlPXQua2V5czs7KXtpZihudWxsPT09ZXx8dC5pbmRleD49ZS5sZW5ndGgpcmV0dXJuIHQub2JqZWN0PXQua2V5cz1udWxsLHt2YWx1ZTp2b2lkIDAsZG9uZTohMH07dmFyIG49ZVt0LmluZGV4KytdLHI9dC5vYmplY3Q7aWYoaShyLG4pKXtzd2l0Y2godC5tb2RlKXtjYXNlImtleXMiOnJldHVybnt2YWx1ZTpuLGRvbmU6ITF9O2Nhc2UidmFsdWVzIjpyZXR1cm57dmFsdWU6cltuXSxkb25lOiExfX1yZXR1cm57dmFsdWU6W24scltuXV0sZG9uZTohMX19fX0pKX0sNDE3NjpmdW5jdGlvbih0LGUsbil7dmFyIHI9big3NjI5OCksbz1uKDk1NzMpLGk9big4NTgwMykuaW5kZXhPZixhPW4oMjMwNzApO3QuZXhwb3J0cz1mdW5jdGlvbih0LGUpe3ZhciBuLGM9byh0KSxzPTAsdT1bXTtmb3IobiBpbiBjKSFyKGEsbikmJnIoYyxuKSYmdS5wdXNoKG4pO2Zvcig7ZS5sZW5ndGg+czspcihjLG49ZVtzKytdKSYmKH5pKHUsbil8fHUucHVzaChuKSk7cmV0dXJuIHV9fSwyNTUwNzpmdW5jdGlvbih0LGUsbil7dmFyIHI9big0MTc2KSxvPW4oNTkxMzUpO3QuZXhwb3J0cz1PYmplY3Qua2V5c3x8ZnVuY3Rpb24odCl7cmV0dXJuIHIodCxvKX19LDQxNjI4OmZ1bmN0aW9uKHQsZSl7InVzZSBzdHJpY3QiO3ZhciBuPXt9LnByb3BlcnR5SXNFbnVtZXJhYmxlLHI9T2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcixvPXImJiFuLmNhbGwoezE6Mn0sMSk7ZS5mPW8/ZnVuY3Rpb24odCl7dmFyIGU9cih0aGlzLHQpO3JldHVybiEhZSYmZS5lbnVtZXJhYmxlfTpufSw3MTg0MjpmdW5jdGlvbih0LGUsbil7dmFyIHI9big4NzU3OSksbz1uKDc5ODYxKTt0LmV4cG9ydHM9T2JqZWN0LnNldFByb3RvdHlwZU9mfHwoIl9fcHJvdG9fXyJpbnt9P2Z1bmN0aW9uKCl7dmFyIHQsZT0hMSxuPXt9O3RyeXsodD1PYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKE9iamVjdC5wcm90b3R5cGUsIl9fcHJvdG9fXyIpLnNldCkuY2FsbChuLFtdKSxlPW4gaW5zdGFuY2VvZiBBcnJheX1jYXRjaCh0KXt9cmV0dXJuIGZ1bmN0aW9uKG4saSl7cmV0dXJuIHIobiksbyhpKSxlP3QuY2FsbChuLGkpOm4uX19wcm90b19fPWksbn19KCk6dm9pZCAwKX0sMzU2NzpmdW5jdGlvbih0LGUsbil7dmFyIHI9big2MjU1Niksbz1uKDI1NTA3KSxpPW4oOTU3MyksYT1uKDQxNjI4KS5mLGM9ZnVuY3Rpb24odCl7cmV0dXJuIGZ1bmN0aW9uKGUpe2Zvcih2YXIgbixjPWkoZSkscz1vKGMpLHU9cy5sZW5ndGgsbD0wLGY9W107dT5sOyluPXNbbCsrXSxyJiYhYS5jYWxsKGMsbil8fGYucHVzaCh0P1tuLGNbbl1dOmNbbl0pO3JldHVybiBmfX07dC5leHBvcnRzPXtlbnRyaWVzOmMoITApLHZhbHVlczpjKCExKX19LDE5NzU4OmZ1bmN0aW9uKHQsZSxuKXsidXNlIHN0cmljdCI7dmFyIHI9big5MDYxMyksbz1uKDU5NTkxKTt0LmV4cG9ydHM9cj97fS50b1N0cmluZzpmdW5jdGlvbigpe3JldHVybiJbb2JqZWN0ICIrbyh0aGlzKSsiXSJ9fSwyNDQxNTpmdW5jdGlvbih0LGUsbil7dmFyIHI9big3NzAxKSxvPW4oMTMzMzQpLGk9big1Njk5MSksYT1uKDg3NTc5KTt0LmV4cG9ydHM9cigiUmVmbGVjdCIsIm93bktleXMiKXx8ZnVuY3Rpb24odCl7dmFyIGU9by5mKGEodCkpLG49aS5mO3JldHVybiBuP2UuY29uY2F0KG4odCkpOmV9fSwyNDQ5NzpmdW5jdGlvbih0LGUsbil7dmFyIHI9big4OTU1OCksbz1uKDgyMzUwKS50cmltLGk9big1MDA1NSksYT1yLnBhcnNlRmxvYXQsYz0xL2EoaSsiLTAiKSE9LTEvMDt0LmV4cG9ydHM9Yz9mdW5jdGlvbih0KXt2YXIgZT1vKFN0cmluZyh0KSksbj1hKGUpO3JldHVybiAwPT09biYmIi0iPT1lLmNoYXJBdCgwKT8tMDpufTphfSw3ODQ2OmZ1bmN0aW9uKHQsZSxuKXt2YXIgcj1uKDg5NTU4KSxvPW4oODIzNTApLnRyaW0saT1uKDUwMDU1KSxhPXIucGFyc2VJbnQsYz0vXlsrLV0/MFtYeF0vLHM9OCE9PWEoaSsiMDgiKXx8MjIhPT1hKGkrIjB4MTYiKTt0LmV4cG9ydHM9cz9mdW5jdGlvbih0LGUpe3ZhciBuPW8oU3RyaW5nKHQpKTtyZXR1cm4gYShuLGU+Pj4wfHwoYy50ZXN0KG4pPzE2OjEwKSl9OmF9LDU2MjM4OmZ1bmN0aW9uKHQsZSxuKXt2YXIgcj1uKDg5NTU4KTt0LmV4cG9ydHM9cn0sMzExNTpmdW5jdGlvbih0KXt0LmV4cG9ydHM9ZnVuY3Rpb24odCl7dHJ5e3JldHVybntlcnJvcjohMSx2YWx1ZTp0KCl9fWNhdGNoKHQpe3JldHVybntlcnJvcjohMCx2YWx1ZTp0fX19fSw2MzEzNDpmdW5jdGlvbih0LGUsbil7dmFyIHI9big4NzU3OSksbz1uKDEwNTkyKSxpPW4oODMwODMpO3QuZXhwb3J0cz1mdW5jdGlvbih0LGUpe2lmKHIodCksbyhlKSYmZS5jb25zdHJ1Y3Rvcj09PXQpcmV0dXJuIGU7dmFyIG49aS5mKHQpO3JldHVybigwLG4ucmVzb2x2ZSkoZSksbi5wcm9taXNlfX0sNjk5Mjc6ZnVuY3Rpb24odCl7InVzZSBzdHJpY3QiO3ZhciBlPTIxNDc0ODM2NDcsbj0vW15cMC1cdTAwN0VdLyxyPS9bLlx1MzAwMlx1RkYwRVx1RkY2MV0vZyxvPSJPdmVyZmxvdzogaW5wdXQgbmVlZHMgd2lkZXIgaW50ZWdlcnMgdG8gcHJvY2VzcyIsaT1NYXRoLmZsb29yLGE9U3RyaW5nLmZyb21DaGFyQ29kZSxjPWZ1bmN0aW9uKHQpe3JldHVybiB0KzIyKzc1Kih0PDI2KX0scz1mdW5jdGlvbih0LGUsbil7dmFyIHI9MDtmb3IodD1uP2kodC83MDApOnQ+PjEsdCs9aSh0L2UpO3Q+NDU1O3IrPTM2KXQ9aSh0LzM1KTtyZXR1cm4gaShyKzM2KnQvKHQrMzgpKX0sdT1mdW5jdGlvbih0KXt2YXIgbj1bXTt0PWZ1bmN0aW9uKHQpe2Zvcih2YXIgZT1bXSxuPTAscj10Lmxlbmd0aDtuPHI7KXt2YXIgbz10LmNoYXJDb2RlQXQobisrKTtpZihvPj01NTI5NiYmbzw9NTYzMTkmJm48cil7dmFyIGk9dC5jaGFyQ29kZUF0KG4rKyk7NTYzMjA9PSg2NDUxMiZpKT9lLnB1c2goKCgxMDIzJm8pPDwxMCkrKDEwMjMmaSkrNjU1MzYpOihlLnB1c2gobyksbi0tKX1lbHNlIGUucHVzaChvKX1yZXR1cm4gZX0odCk7dmFyIHIsdSxsPXQubGVuZ3RoLGY9MTI4LGQ9MCxwPTcyO2ZvcihyPTA7cjx0Lmxlbmd0aDtyKyspKHU9dFtyXSk8MTI4JiZuLnB1c2goYSh1KSk7dmFyIGg9bi5sZW5ndGgsdj1oO2ZvcihoJiZuLnB1c2goIi0iKTt2PGw7KXt2YXIgZz1lO2ZvcihyPTA7cjx0Lmxlbmd0aDtyKyspKHU9dFtyXSk+PWYmJnU8ZyYmKGc9dSk7dmFyIHk9disxO2lmKGctZj5pKChlLWQpL3kpKXRocm93IFJhbmdlRXJyb3Iobyk7Zm9yKGQrPShnLWYpKnksZj1nLHI9MDtyPHQubGVuZ3RoO3IrKyl7aWYoKHU9dFtyXSk8ZiYmKytkPmUpdGhyb3cgUmFuZ2VFcnJvcihvKTtpZih1PT1mKXtmb3IodmFyIG09ZCxiPTM2OztiKz0zNil7dmFyIHg9Yjw9cD8xOmI+PXArMjY/MjY6Yi1wO2lmKG08eClicmVhazt2YXIgdz1tLXgsRT0zNi14O24ucHVzaChhKGMoeCt3JUUpKSksbT1pKHcvRSl9bi5wdXNoKGEoYyhtKSkpLHA9cyhkLHksdj09aCksZD0wLCsrdn19KytkLCsrZn1yZXR1cm4gbi5qb2luKCIiKX07dC5leHBvcnRzPWZ1bmN0aW9uKHQpe3ZhciBlLG8saT1bXSxhPXQudG9Mb3dlckNhc2UoKS5yZXBsYWNlKHIsIi4iKS5zcGxpdCgiLiIpO2ZvcihlPTA7ZTxhLmxlbmd0aDtlKyspbz1hW2VdLGkucHVzaChuLnRlc3Qobyk/InhuLS0iK3Uobyk6byk7cmV0dXJuIGkuam9pbigiLiIpfX0sMTkyNjpmdW5jdGlvbih0LGUsbil7dmFyIHI9big5MjkxMyk7dC5leHBvcnRzPWZ1bmN0aW9uKHQsZSxuKXtmb3IodmFyIG8gaW4gZSlyKHQsbyxlW29dLG4pO3JldHVybiB0fX0sOTI5MTM6ZnVuY3Rpb24odCxlLG4pe3ZhciByPW4oODk1NTgpLG89big2Njk3MSksaT1uKDc2Mjk4KSxhPW4oOTgyNjkpLGM9big3Njc3Mykscz1uKDg5ODI3KSx1PXMuZ2V0LGw9cy5lbmZvcmNlLGY9U3RyaW5nKFN0cmluZykuc3BsaXQoIlN0cmluZyIpOyh0LmV4cG9ydHM9ZnVuY3Rpb24odCxlLG4sYyl7dmFyIHM9ISFjJiYhIWMudW5zYWZlLHU9ISFjJiYhIWMuZW51bWVyYWJsZSxkPSEhYyYmISFjLm5vVGFyZ2V0R2V0OyJmdW5jdGlvbiI9PXR5cGVvZiBuJiYoInN0cmluZyIhPXR5cGVvZiBlfHxpKG4sIm5hbWUiKXx8byhuLCJuYW1lIixlKSxsKG4pLnNvdXJjZT1mLmpvaW4oInN0cmluZyI9PXR5cGVvZiBlP2U6IiIpKSx0IT09cj8ocz8hZCYmdFtlXSYmKHU9ITApOmRlbGV0ZSB0W2VdLHU/dFtlXT1uOm8odCxlLG4pKTp1P3RbZV09bjphKGUsbil9KShGdW5jdGlvbi5wcm90b3R5cGUsInRvU3RyaW5nIiwoZnVuY3Rpb24oKXtyZXR1cm4iZnVuY3Rpb24iPT10eXBlb2YgdGhpcyYmdSh0aGlzKS5zb3VyY2V8fGModGhpcyl9KSl9LDc3MDIwOmZ1bmN0aW9uKHQsZSxuKXt2YXIgcj1uKDk0OTA2KSxvPW4oNTg2MDYpLGk9big2MjA1NCkoIm1ldGFkYXRhIiksYT1pLnN0b3JlfHwoaS5zdG9yZT1uZXcgbyksYz1mdW5jdGlvbih0LGUsbil7dmFyIG89YS5nZXQodCk7aWYoIW8pe2lmKCFuKXJldHVybjthLnNldCh0LG89bmV3IHIpfXZhciBpPW8uZ2V0KGUpO2lmKCFpKXtpZighbilyZXR1cm47by5zZXQoZSxpPW5ldyByKX1yZXR1cm4gaX07dC5leHBvcnRzPXtzdG9yZTphLGdldE1hcDpjLGhhczpmdW5jdGlvbih0LGUsbil7dmFyIHI9YyhlLG4sITEpO3JldHVybiB2b2lkIDAhPT1yJiZyLmhhcyh0KX0sZ2V0OmZ1bmN0aW9uKHQsZSxuKXt2YXIgcj1jKGUsbiwhMSk7cmV0dXJuIHZvaWQgMD09PXI/dm9pZCAwOnIuZ2V0KHQpfSxzZXQ6ZnVuY3Rpb24odCxlLG4scil7YyhuLHIsITApLnNldCh0LGUpfSxrZXlzOmZ1bmN0aW9uKHQsZSl7dmFyIG49Yyh0LGUsITEpLHI9W107cmV0dXJuIG4mJm4uZm9yRWFjaCgoZnVuY3Rpb24odCxlKXtyLnB1c2goZSl9KSkscn0sdG9LZXk6ZnVuY3Rpb24odCl7cmV0dXJuIHZvaWQgMD09PXR8fCJzeW1ib2wiPT10eXBlb2YgdD90OlN0cmluZyh0KX19fSwzNTQ1NTpmdW5jdGlvbih0LGUsbil7dmFyIHI9bigyNDU5NCksbz1uKDM4NTk4KTt0LmV4cG9ydHM9ZnVuY3Rpb24odCxlKXt2YXIgbj10LmV4ZWM7aWYoImZ1bmN0aW9uIj09dHlwZW9mIG4pe3ZhciBpPW4uY2FsbCh0LGUpO2lmKCJvYmplY3QiIT10eXBlb2YgaSl0aHJvdyBUeXBlRXJyb3IoIlJlZ0V4cCBleGVjIG1ldGhvZCByZXR1cm5lZCBzb21ldGhpbmcgb3RoZXIgdGhhbiBhbiBPYmplY3Qgb3IgbnVsbCIpO3JldHVybiBpfWlmKCJSZWdFeHAiIT09cih0KSl0aHJvdyBUeXBlRXJyb3IoIlJlZ0V4cCNleGVjIGNhbGxlZCBvbiBpbmNvbXBhdGlibGUgcmVjZWl2ZXIiKTtyZXR1cm4gby5jYWxsKHQsZSl9fSwzODU5ODpmdW5jdGlvbih0LGUsbil7InVzZSBzdHJpY3QiO3ZhciByLG8saT1uKDI1NDE5KSxhPVJlZ0V4cC5wcm90b3R5cGUuZXhlYyxjPVN0cmluZy5wcm90b3R5cGUucmVwbGFjZSxzPWEsdT0ocj0vYS8sbz0vYiovZyxhLmNhbGwociwiYSIpLGEuY2FsbChvLCJhIiksMCE9PXIubGFzdEluZGV4fHwwIT09by5sYXN0SW5kZXgpLGw9dm9pZCAwIT09LygpPz8vLmV4ZWMoIiIpWzFdOyh1fHxsKSYmKHM9ZnVuY3Rpb24odCl7dmFyIGUsbixyLG8scz10aGlzO3JldHVybiBsJiYobj1uZXcgUmVnRXhwKCJeIitzLnNvdXJjZSsiJCg/IVxccykiLGkuY2FsbChzKSkpLHUmJihlPXMubGFzdEluZGV4KSxyPWEuY2FsbChzLHQpLHUmJnImJihzLmxhc3RJbmRleD1zLmdsb2JhbD9yLmluZGV4K3JbMF0ubGVuZ3RoOmUpLGwmJnImJnIubGVuZ3RoPjEmJmMuY2FsbChyWzBdLG4sKGZ1bmN0aW9uKCl7Zm9yKG89MTtvPGFyZ3VtZW50cy5sZW5ndGgtMjtvKyspdm9pZCAwPT09YXJndW1lbnRzW29dJiYocltvXT12b2lkIDApfSkpLHJ9KSx0LmV4cG9ydHM9c30sMjU0MTk6ZnVuY3Rpb24odCxlLG4peyJ1c2Ugc3RyaWN0Ijt2YXIgcj1uKDg3NTc5KTt0LmV4cG9ydHM9ZnVuY3Rpb24oKXt2YXIgdD1yKHRoaXMpLGU9IiI7cmV0dXJuIHQuZ2xvYmFsJiYoZSs9ImciKSx0Lmlnbm9yZUNhc2UmJihlKz0iaSIpLHQubXVsdGlsaW5lJiYoZSs9Im0iKSx0LmRvdEFsbCYmKGUrPSJzIiksdC51bmljb2RlJiYoZSs9InUiKSx0LnN0aWNreSYmKGUrPSJ5IiksZX19LDcwMTMyOmZ1bmN0aW9uKHQpe3QuZXhwb3J0cz1mdW5jdGlvbih0KXtpZihudWxsPT10KXRocm93IFR5cGVFcnJvcigiQ2FuJ3QgY2FsbCBtZXRob2Qgb24gIit0KTtyZXR1cm4gdH19LDM4MTg5OmZ1bmN0aW9uKHQpe3QuZXhwb3J0cz1mdW5jdGlvbih0LGUpe3JldHVybiB0PT09ZXx8dCE9dCYmZSE9ZX19LDc2NDgyOmZ1bmN0aW9uKHQpe3QuZXhwb3J0cz1PYmplY3QuaXN8fGZ1bmN0aW9uKHQsZSl7cmV0dXJuIHQ9PT1lPzAhPT10fHwxL3Q9PTEvZTp0IT10JiZlIT1lfX0sOTgyNjk6ZnVuY3Rpb24odCxlLG4pe3ZhciByPW4oODk1NTgpLG89big2Njk3MSk7dC5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7dHJ5e28ocix0LGUpfWNhdGNoKG4pe3JbdF09ZX1yZXR1cm4gZX19LDY3NTM4OmZ1bmN0aW9uKHQsZSxuKXsidXNlIHN0cmljdCI7dmFyIHI9big3NzAxKSxvPW4oMzc2MjApLGk9bigyMzcyNCksYT1uKDYyNTU2KSxjPWkoInNwZWNpZXMiKTt0LmV4cG9ydHM9ZnVuY3Rpb24odCl7dmFyIGU9cih0KSxuPW8uZjthJiZlJiYhZVtjXSYmbihlLGMse2NvbmZpZ3VyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpc319KX19LDUxMTI4OmZ1bmN0aW9uKHQsZSxuKXt2YXIgcj1uKDM3NjIwKS5mLG89big3NjI5OCksaT1uKDIzNzI0KSgidG9TdHJpbmdUYWciKTt0LmV4cG9ydHM9ZnVuY3Rpb24odCxlLG4pe3QmJiFvKHQ9bj90OnQucHJvdG90eXBlLGkpJiZyKHQsaSx7Y29uZmlndXJhYmxlOiEwLHZhbHVlOmV9KX19LDgzMTk3OmZ1bmN0aW9uKHQsZSxuKXt2YXIgcj1uKDYyMDU0KSxvPW4oNjcyOSksaT1yKCJrZXlzIik7dC5leHBvcnRzPWZ1bmN0aW9uKHQpe3JldHVybiBpW3RdfHwoaVt0XT1vKHQpKX19LDM0NzQxOmZ1bmN0aW9uKHQsZSxuKXt2YXIgcj1uKDg5NTU4KSxvPW4oOTgyNjkpLGk9Il9fY29yZS1qc19zaGFyZWRfXyIsYT1yW2ldfHxvKGkse30pO3QuZXhwb3J0cz1hfSw2MjA1NDpmdW5jdGlvbih0LGUsbil7dmFyIHI9big2NTY3Miksbz1uKDM0NzQxKTsodC5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIG9bdF18fChvW3RdPXZvaWQgMCE9PWU/ZTp7fSl9KSgidmVyc2lvbnMiLFtdKS5wdXNoKHt2ZXJzaW9uOiIzLjUuMCIsbW9kZTpyPyJwdXJlIjoiZ2xvYmFsIixjb3B5cmlnaHQ6IsKpIDIwMTkgRGVuaXMgUHVzaGthcmV2ICh6bG9pcm9jay5ydSkifSl9LDIyOTA5OmZ1bmN0aW9uKHQsZSxuKXsidXNlIHN0cmljdCI7dmFyIHI9bigzMjE4Nyk7dC5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7dmFyIG49W11bdF07cmV0dXJuIW58fCFyKChmdW5jdGlvbigpe24uY2FsbChudWxsLGV8fGZ1bmN0aW9uKCl7dGhyb3cgMX0sMSl9KSl9fSwxMzk3OTpmdW5jdGlvbih0LGUsbil7dmFyIHI9big4NzU3OSksbz1uKDg2NDcwKSxpPW4oMjM3MjQpKCJzcGVjaWVzIik7dC5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7dmFyIG4sYT1yKHQpLmNvbnN0cnVjdG9yO3JldHVybiB2b2lkIDA9PT1hfHxudWxsPT0obj1yKGEpW2ldKT9lOm8obil9fSw2MDE0MDpmdW5jdGlvbih0LGUsbil7dmFyIHI9big0MzQxNiksbz1uKDcwMTMyKSxpPWZ1bmN0aW9uKHQpe3JldHVybiBmdW5jdGlvbihlLG4pe3ZhciBpLGEsYz1TdHJpbmcobyhlKSkscz1yKG4pLHU9Yy5sZW5ndGg7cmV0dXJuIHM8MHx8cz49dT90PyIiOnZvaWQgMDooaT1jLmNoYXJDb2RlQXQocykpPDU1Mjk2fHxpPjU2MzE5fHxzKzE9PT11fHwoYT1jLmNoYXJDb2RlQXQocysxKSk8NTYzMjB8fGE+NTczNDM/dD9jLmNoYXJBdChzKTppOnQ/Yy5zbGljZShzLHMrMik6YS01NjMyMCsoaS01NTI5Njw8MTApKzY1NTM2fX07dC5leHBvcnRzPXtjb2RlQXQ6aSghMSksY2hhckF0OmkoITApfX0sMjY1NzM6ZnVuY3Rpb24odCxlLG4pe3ZhciByPW4oMjc4ODQpLG89big2ODI1MyksaT1uKDcwMTMyKSxhPU1hdGguY2VpbCxjPWZ1bmN0aW9uKHQpe3JldHVybiBmdW5jdGlvbihlLG4sYyl7dmFyIHMsdSxsPVN0cmluZyhpKGUpKSxmPWwubGVuZ3RoLGQ9dm9pZCAwPT09Yz8iICI6U3RyaW5nKGMpLHA9cihuKTtyZXR1cm4gcDw9Znx8IiI9PWQ/bDoocz1wLWYsKHU9by5jYWxsKGQsYShzL2QubGVuZ3RoKSkpLmxlbmd0aD5zJiYodT11LnNsaWNlKDAscykpLHQ/bCt1OnUrbCl9fTt0LmV4cG9ydHM9e3N0YXJ0OmMoITEpLGVuZDpjKCEwKX19LDY4MjUzOmZ1bmN0aW9uKHQsZSxuKXsidXNlIHN0cmljdCI7dmFyIHI9big0MzQxNiksbz1uKDcwMTMyKTt0LmV4cG9ydHM9IiIucmVwZWF0fHxmdW5jdGlvbih0KXt2YXIgZT1TdHJpbmcobyh0aGlzKSksbj0iIixpPXIodCk7aWYoaTwwfHxpPT0xLzApdGhyb3cgUmFuZ2VFcnJvcigiV3JvbmcgbnVtYmVyIG9mIHJlcGV0aXRpb25zIik7Zm9yKDtpPjA7KGk+Pj49MSkmJihlKz1lKSkxJmkmJihuKz1lKTtyZXR1cm4gbn19LDgyMzUwOmZ1bmN0aW9uKHQsZSxuKXt2YXIgcj1uKDcwMTMyKSxvPSJbIituKDUwMDU1KSsiXSIsaT1SZWdFeHAoIl4iK28rbysiKiIpLGE9UmVnRXhwKG8rbysiKiQiKSxjPWZ1bmN0aW9uKHQpe3JldHVybiBmdW5jdGlvbihlKXt2YXIgbj1TdHJpbmcocihlKSk7cmV0dXJuIDEmdCYmKG49bi5yZXBsYWNlKGksIiIpKSwyJnQmJihuPW4ucmVwbGFjZShhLCIiKSksbn19O3QuZXhwb3J0cz17c3RhcnQ6YygxKSxlbmQ6YygyKSx0cmltOmMoMyl9fSwyMTc0NDpmdW5jdGlvbih0LGUsbil7dmFyIHIsbyxpLGE9big4OTU1OCksYz1uKDMyMTg3KSxzPW4oMjQ1OTQpLHU9big0NjEzMCksbD1uKDUxNTcxKSxmPW4oMTkyMyksZD1uKDIxMjMxKSxwPWEubG9jYXRpb24saD1hLnNldEltbWVkaWF0ZSx2PWEuY2xlYXJJbW1lZGlhdGUsZz1hLnByb2Nlc3MseT1hLk1lc3NhZ2VDaGFubmVsLG09YS5EaXNwYXRjaCxiPTAseD17fSx3PSJvbnJlYWR5c3RhdGVjaGFuZ2UiLEU9ZnVuY3Rpb24odCl7aWYoeC5oYXNPd25Qcm9wZXJ0eSh0KSl7dmFyIGU9eFt0XTtkZWxldGUgeFt0XSxlKCl9fSxqPWZ1bmN0aW9uKHQpe3JldHVybiBmdW5jdGlvbigpe0UodCl9fSxDPWZ1bmN0aW9uKHQpe0UodC5kYXRhKX0saz1mdW5jdGlvbih0KXthLnBvc3RNZXNzYWdlKHQrIiIscC5wcm90b2NvbCsiLy8iK3AuaG9zdCl9O2gmJnZ8fChoPWZ1bmN0aW9uKHQpe2Zvcih2YXIgZT1bXSxuPTE7YXJndW1lbnRzLmxlbmd0aD5uOyllLnB1c2goYXJndW1lbnRzW24rK10pO3JldHVybiB4WysrYl09ZnVuY3Rpb24oKXsoImZ1bmN0aW9uIj09dHlwZW9mIHQ/dDpGdW5jdGlvbih0KSkuYXBwbHkodm9pZCAwLGUpfSxyKGIpLGJ9LHY9ZnVuY3Rpb24odCl7ZGVsZXRlIHhbdF19LCJwcm9jZXNzIj09cyhnKT9yPWZ1bmN0aW9uKHQpe2cubmV4dFRpY2soaih0KSl9Om0mJm0ubm93P3I9ZnVuY3Rpb24odCl7bS5ub3coaih0KSl9OnkmJiFkPyhpPShvPW5ldyB5KS5wb3J0MixvLnBvcnQxLm9ubWVzc2FnZT1DLHI9dShpLnBvc3RNZXNzYWdlLGksMSkpOiFhLmFkZEV2ZW50TGlzdGVuZXJ8fCJmdW5jdGlvbiIhPXR5cGVvZiBwb3N0TWVzc2FnZXx8YS5pbXBvcnRTY3JpcHRzfHxjKGspP3I9dyBpbiBmKCJzY3JpcHQiKT9mdW5jdGlvbih0KXtsLmFwcGVuZENoaWxkKGYoInNjcmlwdCIpKS5vbnJlYWR5c3RhdGVjaGFuZ2U9ZnVuY3Rpb24oKXtsLnJlbW92ZUNoaWxkKHRoaXMpLEUodCl9fTpmdW5jdGlvbih0KXtzZXRUaW1lb3V0KGoodCksMCl9OihyPWssYS5hZGRFdmVudExpc3RlbmVyKCJtZXNzYWdlIixDLCExKSkpLHQuZXhwb3J0cz17c2V0OmgsY2xlYXI6dn19LDUzOTk3OmZ1bmN0aW9uKHQsZSxuKXt2YXIgcj1uKDI0NTk0KTt0LmV4cG9ydHM9ZnVuY3Rpb24odCl7aWYoIm51bWJlciIhPXR5cGVvZiB0JiYiTnVtYmVyIiE9cih0KSl0aHJvdyBUeXBlRXJyb3IoIkluY29ycmVjdCBpbnZvY2F0aW9uIik7cmV0dXJuK3R9fSw3Njk3NjpmdW5jdGlvbih0LGUsbil7dmFyIHI9big0MzQxNiksbz1NYXRoLm1heCxpPU1hdGgubWluO3QuZXhwb3J0cz1mdW5jdGlvbih0LGUpe3ZhciBuPXIodCk7cmV0dXJuIG48MD9vKG4rZSwwKTppKG4sZSl9fSw4MzkxNDpmdW5jdGlvbih0LGUsbil7dmFyIHI9big0MzQxNiksbz1uKDI3ODg0KTt0LmV4cG9ydHM9ZnVuY3Rpb24odCl7aWYodm9pZCAwPT09dClyZXR1cm4gMDt2YXIgZT1yKHQpLG49byhlKTtpZihlIT09bil0aHJvdyBSYW5nZUVycm9yKCJXcm9uZyBsZW5ndGggb3IgaW5kZXgiKTtyZXR1cm4gbn19LDk1NzM6ZnVuY3Rpb24odCxlLG4pe3ZhciByPW4oMjQ5OCksbz1uKDcwMTMyKTt0LmV4cG9ydHM9ZnVuY3Rpb24odCl7cmV0dXJuIHIobyh0KSl9fSw0MzQxNjpmdW5jdGlvbih0KXt2YXIgZT1NYXRoLmNlaWwsbj1NYXRoLmZsb29yO3QuZXhwb3J0cz1mdW5jdGlvbih0KXtyZXR1cm4gaXNOYU4odD0rdCk/MDoodD4wP246ZSkodCl9fSwyNzg4NDpmdW5jdGlvbih0LGUsbil7dmFyIHI9big0MzQxNiksbz1NYXRoLm1pbjt0LmV4cG9ydHM9ZnVuY3Rpb24odCl7cmV0dXJuIHQ+MD9vKHIodCksOTAwNzE5OTI1NDc0MDk5MSk6MH19LDE5MjA5OmZ1bmN0aW9uKHQsZSxuKXt2YXIgcj1uKDcwMTMyKTt0LmV4cG9ydHM9ZnVuY3Rpb24odCl7cmV0dXJuIE9iamVjdChyKHQpKX19LDYwNTU4OmZ1bmN0aW9uKHQsZSxuKXt2YXIgcj1uKDQ1NjgwKTt0LmV4cG9ydHM9ZnVuY3Rpb24odCxlKXt2YXIgbj1yKHQpO2lmKG4lZSl0aHJvdyBSYW5nZUVycm9yKCJXcm9uZyBvZmZzZXQiKTtyZXR1cm4gbn19LDQ1NjgwOmZ1bmN0aW9uKHQsZSxuKXt2YXIgcj1uKDQzNDE2KTt0LmV4cG9ydHM9ZnVuY3Rpb24odCl7dmFyIGU9cih0KTtpZihlPDApdGhyb3cgUmFuZ2VFcnJvcigiVGhlIGFyZ3VtZW50IGNhbid0IGJlIGxlc3MgdGhhbiAwIik7cmV0dXJuIGV9fSw1MzQ5ODpmdW5jdGlvbih0LGUsbil7dmFyIHI9bigxMDU5Mik7dC5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7aWYoIXIodCkpcmV0dXJuIHQ7dmFyIG4sbztpZihlJiYiZnVuY3Rpb24iPT10eXBlb2Yobj10LnRvU3RyaW5nKSYmIXIobz1uLmNhbGwodCkpKXJldHVybiBvO2lmKCJmdW5jdGlvbiI9PXR5cGVvZihuPXQudmFsdWVPZikmJiFyKG89bi5jYWxsKHQpKSlyZXR1cm4gbztpZighZSYmImZ1bmN0aW9uIj09dHlwZW9mKG49dC50b1N0cmluZykmJiFyKG89bi5jYWxsKHQpKSlyZXR1cm4gbzt0aHJvdyBUeXBlRXJyb3IoIkNhbid0IGNvbnZlcnQgb2JqZWN0IHRvIHByaW1pdGl2ZSB2YWx1ZSIpfX0sOTA2MTM6ZnVuY3Rpb24odCxlLG4pe3ZhciByPXt9O3JbbigyMzcyNCkoInRvU3RyaW5nVGFnIildPSJ6Iix0LmV4cG9ydHM9IltvYmplY3Qgel0iPT09U3RyaW5nKHIpfSw5MzAxNzpmdW5jdGlvbih0LGUsbil7InVzZSBzdHJpY3QiO3ZhciByPW4oMTQwNDQpLG89big4OTU1OCksaT1uKDYyNTU2KSxhPW4oMzU2MjcpLGM9big3MzA3NCkscz1uKDgyODM1KSx1PW4oNTkzNzkpLGw9bigxNDIwOSksZj1uKDY2OTcxKSxkPW4oMjc4ODQpLHA9big4MzkxNCksaD1uKDYwNTU4KSx2PW4oNTM0OTgpLGc9big3NjI5OCkseT1uKDU5NTkxKSxtPW4oMTA1OTIpLGI9big1MDg2OCkseD1uKDcxODQyKSx3PW4oMTMzMzQpLmYsRT1uKDIwNDU1KSxqPW4oMzAwMjUpLmZvckVhY2gsQz1uKDY3NTM4KSxrPW4oMzc2MjApLFM9big5NzI1NyksTz1uKDg5ODI3KSxBPW4oMzAyNzIpLEk9Ty5nZXQsVD1PLnNldCxfPWsuZixNPVMuZixMPU1hdGgucm91bmQsUj1vLlJhbmdlRXJyb3IsUD1zLkFycmF5QnVmZmVyLE49cy5EYXRhVmlldyxGPWMuTkFUSVZFX0FSUkFZX0JVRkZFUl9WSUVXUyxEPWMuVFlQRURfQVJSQVlfVEFHLFU9Yy5UeXBlZEFycmF5LEI9Yy5UeXBlZEFycmF5UHJvdG90eXBlLHo9Yy5hVHlwZWRBcnJheUNvbnN0cnVjdG9yLEg9Yy5pc1R5cGVkQXJyYXksVj0iQllURVNfUEVSX0VMRU1FTlQiLHE9Ildyb25nIGxlbmd0aCIsVz1mdW5jdGlvbih0LGUpe2Zvcih2YXIgbj0wLHI9ZS5sZW5ndGgsbz1uZXcoeih0KSkocik7cj5uOylvW25dPWVbbisrXTtyZXR1cm4gb30sRz1mdW5jdGlvbih0LGUpe18odCxlLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gSSh0aGlzKVtlXX19KX0sWj1mdW5jdGlvbih0KXt2YXIgZTtyZXR1cm4gdCBpbnN0YW5jZW9mIFB8fCJBcnJheUJ1ZmZlciI9PShlPXkodCkpfHwiU2hhcmVkQXJyYXlCdWZmZXIiPT1lfSxZPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIEgodCkmJiJzeW1ib2wiIT10eXBlb2YgZSYmZSBpbiB0JiZTdHJpbmcoK2UpPT1TdHJpbmcoZSl9LCQ9ZnVuY3Rpb24odCxlKXtyZXR1cm4gWSh0LGU9dihlLCEwKSk/bCgyLHRbZV0pOk0odCxlKX0sSz1mdW5jdGlvbih0LGUsbil7cmV0dXJuIShZKHQsZT12KGUsITApKSYmbShuKSYmZyhuLCJ2YWx1ZSIpKXx8ZyhuLCJnZXQiKXx8ZyhuLCJzZXQiKXx8bi5jb25maWd1cmFibGV8fGcobiwid3JpdGFibGUiKSYmIW4ud3JpdGFibGV8fGcobiwiZW51bWVyYWJsZSIpJiYhbi5lbnVtZXJhYmxlP18odCxlLG4pOih0W2VdPW4udmFsdWUsdCl9O2k/KEZ8fChTLmY9JCxrLmY9SyxHKEIsImJ1ZmZlciIpLEcoQiwiYnl0ZU9mZnNldCIpLEcoQiwiYnl0ZUxlbmd0aCIpLEcoQiwibGVuZ3RoIikpLHIoe3RhcmdldDoiT2JqZWN0IixzdGF0OiEwLGZvcmNlZDohRn0se2dldE93blByb3BlcnR5RGVzY3JpcHRvcjokLGRlZmluZVByb3BlcnR5Okt9KSx0LmV4cG9ydHM9ZnVuY3Rpb24odCxlLG4pe3ZhciBpPXQubWF0Y2goL1xkKyQvKVswXS84LGM9dCsobj8iQ2xhbXBlZCI6IiIpKyJBcnJheSIscz0iZ2V0Iit0LGw9InNldCIrdCx2PW9bY10sZz12LHk9ZyYmZy5wcm90b3R5cGUsaz17fSxTPWZ1bmN0aW9uKHQsZSl7Xyh0LGUse2dldDpmdW5jdGlvbigpe3JldHVybiBmdW5jdGlvbih0LGUpe3ZhciBuPUkodCk7cmV0dXJuIG4udmlld1tzXShlKmkrbi5ieXRlT2Zmc2V0LCEwKX0odGhpcyxlKX0sc2V0OmZ1bmN0aW9uKHQpe3JldHVybiBmdW5jdGlvbih0LGUscil7dmFyIG89SSh0KTtuJiYocj0ocj1MKHIpKTwwPzA6cj4yNTU/MjU1OjI1NSZyKSxvLnZpZXdbbF0oZSppK28uYnl0ZU9mZnNldCxyLCEwKX0odGhpcyxlLHQpfSxlbnVtZXJhYmxlOiEwfSl9O0Y/YSYmKGc9ZSgoZnVuY3Rpb24odCxlLG4scil7cmV0dXJuIHUodCxnLGMpLEEobShlKT9aKGUpP3ZvaWQgMCE9PXI/bmV3IHYoZSxoKG4saSkscik6dm9pZCAwIT09bj9uZXcgdihlLGgobixpKSk6bmV3IHYoZSk6SChlKT9XKGcsZSk6RS5jYWxsKGcsZSk6bmV3IHYocChlKSksdCxnKX0pKSx4JiZ4KGcsVSksaih3KHYpLChmdW5jdGlvbih0KXt0IGluIGd8fGYoZyx0LHZbdF0pfSkpLGcucHJvdG90eXBlPXkpOihnPWUoKGZ1bmN0aW9uKHQsZSxuLHIpe3UodCxnLGMpO3ZhciBvLGEscyxsPTAsZj0wO2lmKG0oZSkpe2lmKCFaKGUpKXJldHVybiBIKGUpP1coZyxlKTpFLmNhbGwoZyxlKTtvPWUsZj1oKG4saSk7dmFyIHY9ZS5ieXRlTGVuZ3RoO2lmKHZvaWQgMD09PXIpe2lmKHYlaSl0aHJvdyBSKHEpO2lmKChhPXYtZik8MCl0aHJvdyBSKHEpfWVsc2UgaWYoKGE9ZChyKSppKStmPnYpdGhyb3cgUihxKTtzPWEvaX1lbHNlIHM9cChlKSxvPW5ldyBQKGE9cyppKTtmb3IoVCh0LHtidWZmZXI6byxieXRlT2Zmc2V0OmYsYnl0ZUxlbmd0aDphLGxlbmd0aDpzLHZpZXc6bmV3IE4obyl9KTtsPHM7KVModCxsKyspfSkpLHgmJngoZyxVKSx5PWcucHJvdG90eXBlPWIoQikpLHkuY29uc3RydWN0b3IhPT1nJiZmKHksImNvbnN0cnVjdG9yIixnKSxEJiZmKHksRCxjKSxrW2NdPWcscih7Z2xvYmFsOiEwLGZvcmNlZDpnIT12LHNoYW06IUZ9LGspLFYgaW4gZ3x8ZihnLFYsaSksViBpbiB5fHxmKHksVixpKSxDKGMpfSk6dC5leHBvcnRzPWZ1bmN0aW9uKCl7fX0sMjA0NTU6ZnVuY3Rpb24odCxlLG4pe3ZhciByPW4oMTkyMDkpLG89bigyNzg4NCksaT1uKDczODkwKSxhPW4oNDQ5ODQpLGM9big0NjEzMCkscz1uKDczMDc0KS5hVHlwZWRBcnJheUNvbnN0cnVjdG9yO3QuZXhwb3J0cz1mdW5jdGlvbih0KXt2YXIgZSxuLHUsbCxmLGQscD1yKHQpLGg9YXJndW1lbnRzLmxlbmd0aCx2PWg+MT9hcmd1bWVudHNbMV06dm9pZCAwLGc9dm9pZCAwIT09dix5PWkocCk7aWYobnVsbCE9eSYmIWEoeSkpZm9yKGQ9KGY9eS5jYWxsKHApKS5uZXh0LHA9W107IShsPWQuY2FsbChmKSkuZG9uZTspcC5wdXNoKGwudmFsdWUpO2ZvcihnJiZoPjImJih2PWModixhcmd1bWVudHNbMl0sMikpLG49byhwLmxlbmd0aCksdT1uZXcocyh0aGlzKSkobiksZT0wO24+ZTtlKyspdVtlXT1nP3YocFtlXSxlKTpwW2VdO3JldHVybiB1fX0sMzU2Mjc6ZnVuY3Rpb24odCxlLG4pe3ZhciByPW4oODk1NTgpLG89bigzMjE4NyksaT1uKDQ3OTYpLGE9big3MzA3NCkuTkFUSVZFX0FSUkFZX0JVRkZFUl9WSUVXUyxjPXIuQXJyYXlCdWZmZXIscz1yLkludDhBcnJheTt0LmV4cG9ydHM9IWF8fCFvKChmdW5jdGlvbigpe3MoMSl9KSl8fCFvKChmdW5jdGlvbigpe25ldyBzKC0xKX0pKXx8IWkoKGZ1bmN0aW9uKHQpe25ldyBzLG5ldyBzKG51bGwpLG5ldyBzKDEuNSksbmV3IHModCl9KSwhMCl8fG8oKGZ1bmN0aW9uKCl7cmV0dXJuIDEhPT1uZXcgcyhuZXcgYygyKSwxLHZvaWQgMCkubGVuZ3RofSkpfSw2NzI5OmZ1bmN0aW9uKHQpe3ZhciBlPTAsbj1NYXRoLnJhbmRvbSgpO3QuZXhwb3J0cz1mdW5jdGlvbih0KXtyZXR1cm4iU3ltYm9sKCIrU3RyaW5nKHZvaWQgMD09PXQ/IiI6dCkrIilfIisoKytlK24pLnRvU3RyaW5nKDM2KX19LDE2NDEwOmZ1bmN0aW9uKHQsZSxuKXt2YXIgcj1uKDkwMTQpO3QuZXhwb3J0cz1yJiYhU3ltYm9sLnNoYW0mJiJzeW1ib2wiPT10eXBlb2YgU3ltYm9sKCl9LDM5NDc2OmZ1bmN0aW9uKHQsZSxuKXt2YXIgcj1uKDc3MDEpO3QuZXhwb3J0cz1yKCJuYXZpZ2F0b3IiLCJ1c2VyQWdlbnQiKXx8IiJ9LDc5MDcxOmZ1bmN0aW9uKHQsZSxuKXt2YXIgcixvLGk9big4OTU1OCksYT1uKDM5NDc2KSxjPWkucHJvY2VzcyxzPWMmJmMudmVyc2lvbnMsdT1zJiZzLnY4O3U/bz0ocj11LnNwbGl0KCIuIikpWzBdK3JbMV06YSYmKCEocj1hLm1hdGNoKC9FZGdlXC8oXGQrKS8pKXx8clsxXT49NzQpJiYocj1hLm1hdGNoKC9DaHJvbWVcLyhcZCspLykpJiYobz1yWzFdKSx0LmV4cG9ydHM9byYmK299LDQyMTg0OmZ1bmN0aW9uKHQsZSxuKXt2YXIgcj1uKDM5NDc2KTt0LmV4cG9ydHM9L1ZlcnNpb25cLzEwXC5cZCsoXC5cZCspPyggTW9iaWxlXC9cdyspPyBTYWZhcmlcLy8udGVzdChyKX0sMjM3MjQ6ZnVuY3Rpb24odCxlLG4pe3ZhciByPW4oODk1NTgpLG89big2MjA1NCksaT1uKDc2Mjk4KSxhPW4oNjcyOSksYz1uKDkwMTQpLHM9bigxNjQxMCksdT1vKCJ3a3MiKSxsPXIuU3ltYm9sLGY9cz9sOmE7dC5leHBvcnRzPWZ1bmN0aW9uKHQpe3JldHVybiBpKHUsdCl8fChjJiZpKGwsdCk/dVt0XT1sW3RdOnVbdF09ZigiU3ltYm9sLiIrdCkpLHVbdF19fSw1MDA1NTpmdW5jdGlvbih0KXt0LmV4cG9ydHM9Ilx0XG5cdlxmXHIgwqDhmoDigIDigIHigILigIPigITigIXigIbigIfigIjigInigIrigK/igZ/jgIBcdTIwMjhcdTIwMjlcdWZlZmYifSw3MzkxNjpmdW5jdGlvbih0LGUsbil7dmFyIHI9bigyMzcyNCk7ZS5mPXJ9LDYxMjQ1OmZ1bmN0aW9uKHQsZSxuKXsidXNlIHN0cmljdCI7dmFyIHI9bigxNDA0NCksbz1uKDg5NTU4KSxpPW4oODI4MzUpLGE9big2NzUzOCksYz0iQXJyYXlCdWZmZXIiLHM9aS5BcnJheUJ1ZmZlcjtyKHtnbG9iYWw6ITAsZm9yY2VkOm8uQXJyYXlCdWZmZXIhPT1zfSx7QXJyYXlCdWZmZXI6c30pLGEoYyl9LDI5MjczOmZ1bmN0aW9uKHQsZSxuKXt2YXIgcj1uKDE0MDQ0KSxvPW4oNzMwNzQpO3Ioe3RhcmdldDoiQXJyYXlCdWZmZXIiLHN0YXQ6ITAsZm9yY2VkOiFvLk5BVElWRV9BUlJBWV9CVUZGRVJfVklFV1N9LHtpc1ZpZXc6by5pc1ZpZXd9KX0sOTA1NjA6ZnVuY3Rpb24odCxlLG4peyJ1c2Ugc3RyaWN0Ijt2YXIgcj1uKDE0MDQ0KSxvPW4oMzIxODcpLGk9big4MjgzNSksYT1uKDg3NTc5KSxjPW4oNzY5NzYpLHM9bigyNzg4NCksdT1uKDEzOTc5KSxsPWkuQXJyYXlCdWZmZXIsZj1pLkRhdGFWaWV3LGQ9bC5wcm90b3R5cGUuc2xpY2U7cih7dGFyZ2V0OiJBcnJheUJ1ZmZlciIscHJvdG86ITAsdW5zYWZlOiEwLGZvcmNlZDpvKChmdW5jdGlvbigpe3JldHVybiFuZXcgbCgyKS5zbGljZSgxLHZvaWQgMCkuYnl0ZUxlbmd0aH0pKX0se3NsaWNlOmZ1bmN0aW9uKHQsZSl7aWYodm9pZCAwIT09ZCYmdm9pZCAwPT09ZSlyZXR1cm4gZC5jYWxsKGEodGhpcyksdCk7Zm9yKHZhciBuPWEodGhpcykuYnl0ZUxlbmd0aCxyPWModCxuKSxvPWModm9pZCAwPT09ZT9uOmUsbiksaT1uZXcodSh0aGlzLGwpKShzKG8tcikpLHA9bmV3IGYodGhpcyksaD1uZXcgZihpKSx2PTA7cjxvOyloLnNldFVpbnQ4KHYrKyxwLmdldFVpbnQ4KHIrKykpO3JldHVybiBpfX0pfSw1NzM4NzpmdW5jdGlvbih0LGUsbil7InVzZSBzdHJpY3QiO3ZhciByPW4oMTQwNDQpLG89bigzMjE4NyksaT1uKDYxOTkpLGE9bigxMDU5MiksYz1uKDE5MjA5KSxzPW4oMjc4ODQpLHU9big1ODgxMCksbD1uKDcwMDkpLGY9big2MTk2MyksZD1uKDIzNzI0KSxwPW4oNzkwNzEpLGg9ZCgiaXNDb25jYXRTcHJlYWRhYmxlIiksdj05MDA3MTk5MjU0NzQwOTkxLGc9Ik1heGltdW0gYWxsb3dlZCBpbmRleCBleGNlZWRlZCIseT1wPj01MXx8IW8oKGZ1bmN0aW9uKCl7dmFyIHQ9W107cmV0dXJuIHRbaF09ITEsdC5jb25jYXQoKVswXSE9PXR9KSksbT1mKCJjb25jYXQiKSxiPWZ1bmN0aW9uKHQpe2lmKCFhKHQpKXJldHVybiExO3ZhciBlPXRbaF07cmV0dXJuIHZvaWQgMCE9PWU/ISFlOmkodCl9O3Ioe3RhcmdldDoiQXJyYXkiLHByb3RvOiEwLGZvcmNlZDoheXx8IW19LHtjb25jYXQ6ZnVuY3Rpb24odCl7dmFyIGUsbixyLG8saSxhPWModGhpcyksZj1sKGEsMCksZD0wO2ZvcihlPS0xLHI9YXJndW1lbnRzLmxlbmd0aDtlPHI7ZSsrKWlmKGIoaT0tMT09PWU/YTphcmd1bWVudHNbZV0pKXtpZihkKyhvPXMoaS5sZW5ndGgpKT52KXRocm93IFR5cGVFcnJvcihnKTtmb3Iobj0wO248bztuKyssZCsrKW4gaW4gaSYmdShmLGQsaVtuXSl9ZWxzZXtpZihkPj12KXRocm93IFR5cGVFcnJvcihnKTt1KGYsZCsrLGkpfXJldHVybiBmLmxlbmd0aD1kLGZ9fSl9LDMwODE3OmZ1bmN0aW9uKHQsZSxuKXt2YXIgcj1uKDE0MDQ0KSxvPW4oOTk0MzEpLGk9big3NjUxMyk7cih7dGFyZ2V0OiJBcnJheSIscHJvdG86ITB9LHtjb3B5V2l0aGluOm99KSxpKCJjb3B5V2l0aGluIil9LDUyMDU1OmZ1bmN0aW9uKHQsZSxuKXsidXNlIHN0cmljdCI7dmFyIHI9bigxNDA0NCksbz1uKDMwMDI1KS5ldmVyeTtyKHt0YXJnZXQ6IkFycmF5Iixwcm90bzohMCxmb3JjZWQ6bigyMjkwOSkoImV2ZXJ5Iil9LHtldmVyeTpmdW5jdGlvbih0KXtyZXR1cm4gbyh0aGlzLHQsYXJndW1lbnRzLmxlbmd0aD4xP2FyZ3VtZW50c1sxXTp2b2lkIDApfX0pfSw3MzM2MDpmdW5jdGlvbih0LGUsbil7dmFyIHI9bigxNDA0NCksbz1uKDY1ODk1KSxpPW4oNzY1MTMpO3Ioe3RhcmdldDoiQXJyYXkiLHByb3RvOiEwfSx7ZmlsbDpvfSksaSgiZmlsbCIpfSw0NzUwMjpmdW5jdGlvbih0LGUsbil7InVzZSBzdHJpY3QiO3ZhciByPW4oMTQwNDQpLG89bigzMDAyNSkuZmlsdGVyLGk9bigzMjE4NyksYT1uKDYxOTYzKSgiZmlsdGVyIiksYz1hJiYhaSgoZnVuY3Rpb24oKXtbXS5maWx0ZXIuY2FsbCh7bGVuZ3RoOi0xLDA6MX0sKGZ1bmN0aW9uKHQpe3Rocm93IHR9KSl9KSk7cih7dGFyZ2V0OiJBcnJheSIscHJvdG86ITAsZm9yY2VkOiFhfHwhY30se2ZpbHRlcjpmdW5jdGlvbih0KXtyZXR1cm4gbyh0aGlzLHQsYXJndW1lbnRzLmxlbmd0aD4xP2FyZ3VtZW50c1sxXTp2b2lkIDApfX0pfSw5MDkxMjpmdW5jdGlvbih0LGUsbil7InVzZSBzdHJpY3QiO3ZhciByPW4oMTQwNDQpLG89bigzMDAyNSkuZmluZEluZGV4LGk9big3NjUxMyksYT0iZmluZEluZGV4IixjPSEwO2EgaW5bXSYmQXJyYXkoMSkuZmluZEluZGV4KChmdW5jdGlvbigpe2M9ITF9KSkscih7dGFyZ2V0OiJBcnJheSIscHJvdG86ITAsZm9yY2VkOmN9LHtmaW5kSW5kZXg6ZnVuY3Rpb24odCl7cmV0dXJuIG8odGhpcyx0LGFyZ3VtZW50cy5sZW5ndGg+MT9hcmd1bWVudHNbMV06dm9pZCAwKX19KSxpKGEpfSwzMzE5NTpmdW5jdGlvbih0LGUsbil7InVzZSBzdHJpY3QiO3ZhciByPW4oMTQwNDQpLG89bigzMDAyNSkuZmluZCxpPW4oNzY1MTMpLGE9ImZpbmQiLGM9ITA7YSBpbltdJiZBcnJheSgxKS5maW5kKChmdW5jdGlvbigpe2M9ITF9KSkscih7dGFyZ2V0OiJBcnJheSIscHJvdG86ITAsZm9yY2VkOmN9LHtmaW5kOmZ1bmN0aW9uKHQpe3JldHVybiBvKHRoaXMsdCxhcmd1bWVudHMubGVuZ3RoPjE/YXJndW1lbnRzWzFdOnZvaWQgMCl9fSksaShhKX0sNzkyMjc6ZnVuY3Rpb24odCxlLG4peyJ1c2Ugc3RyaWN0Ijt2YXIgcj1uKDE0MDQ0KSxvPW4oODA2NjUpLGk9bigxOTIwOSksYT1uKDI3ODg0KSxjPW4oODY0NzApLHM9big3MDA5KTtyKHt0YXJnZXQ6IkFycmF5Iixwcm90bzohMH0se2ZsYXRNYXA6ZnVuY3Rpb24odCl7dmFyIGUsbj1pKHRoaXMpLHI9YShuLmxlbmd0aCk7cmV0dXJuIGModCksKGU9cyhuLDApKS5sZW5ndGg9byhlLG4sbixyLDAsMSx0LGFyZ3VtZW50cy5sZW5ndGg+MT9hcmd1bWVudHNbMV06dm9pZCAwKSxlfX0pfSwyODIwMzpmdW5jdGlvbih0LGUsbil7InVzZSBzdHJpY3QiO3ZhciByPW4oMTQwNDQpLG89big4MDY2NSksaT1uKDE5MjA5KSxhPW4oMjc4ODQpLGM9big0MzQxNikscz1uKDcwMDkpO3Ioe3RhcmdldDoiQXJyYXkiLHByb3RvOiEwfSx7ZmxhdDpmdW5jdGlvbigpe3ZhciB0PWFyZ3VtZW50cy5sZW5ndGg/YXJndW1lbnRzWzBdOnZvaWQgMCxlPWkodGhpcyksbj1hKGUubGVuZ3RoKSxyPXMoZSwwKTtyZXR1cm4gci5sZW5ndGg9byhyLGUsZSxuLDAsdm9pZCAwPT09dD8xOmModCkpLHJ9fSl9LDQzNTkxOmZ1bmN0aW9uKHQsZSxuKXsidXNlIHN0cmljdCI7dmFyIHI9bigxNDA0NCksbz1uKDMxMzY4KTtyKHt0YXJnZXQ6IkFycmF5Iixwcm90bzohMCxmb3JjZWQ6W10uZm9yRWFjaCE9b30se2ZvckVhY2g6b30pfSw3NDUzODpmdW5jdGlvbih0LGUsbil7dmFyIHI9bigxNDA0NCksbz1uKDg1MTY2KTtyKHt0YXJnZXQ6IkFycmF5IixzdGF0OiEwLGZvcmNlZDohbig0Nzk2KSgoZnVuY3Rpb24odCl7QXJyYXkuZnJvbSh0KX0pKX0se2Zyb206b30pfSwyMjI3NzpmdW5jdGlvbih0LGUsbil7InVzZSBzdHJpY3QiO3ZhciByPW4oMTQwNDQpLG89big4NTgwMykuaW5jbHVkZXMsaT1uKDc2NTEzKTtyKHt0YXJnZXQ6IkFycmF5Iixwcm90bzohMH0se2luY2x1ZGVzOmZ1bmN0aW9uKHQpe3JldHVybiBvKHRoaXMsdCxhcmd1bWVudHMubGVuZ3RoPjE/YXJndW1lbnRzWzFdOnZvaWQgMCl9fSksaSgiaW5jbHVkZXMiKX0sMjQxMjk6ZnVuY3Rpb24odCxlLG4peyJ1c2Ugc3RyaWN0Ijt2YXIgcj1uKDE0MDQ0KSxvPW4oODU4MDMpLmluZGV4T2YsaT1uKDIyOTA5KSxhPVtdLmluZGV4T2YsYz0hIWEmJjEvWzFdLmluZGV4T2YoMSwtMCk8MCxzPWkoImluZGV4T2YiKTtyKHt0YXJnZXQ6IkFycmF5Iixwcm90bzohMCxmb3JjZWQ6Y3x8c30se2luZGV4T2Y6ZnVuY3Rpb24odCl7cmV0dXJuIGM/YS5hcHBseSh0aGlzLGFyZ3VtZW50cyl8fDA6byh0aGlzLHQsYXJndW1lbnRzLmxlbmd0aD4xP2FyZ3VtZW50c1sxXTp2b2lkIDApfX0pfSwyMTI3OmZ1bmN0aW9uKHQsZSxuKXtuKDE0MDQ0KSh7dGFyZ2V0OiJBcnJheSIsc3RhdDohMH0se2lzQXJyYXk6big2MTk5KX0pfSw1MDA2MzpmdW5jdGlvbih0LGUsbil7InVzZSBzdHJpY3QiO3ZhciByPW4oOTU3Myksbz1uKDc2NTEzKSxpPW4oMTIzNSksYT1uKDg5ODI3KSxjPW4oNDYwNjEpLHM9IkFycmF5IEl0ZXJhdG9yIix1PWEuc2V0LGw9YS5nZXR0ZXJGb3Iocyk7dC5leHBvcnRzPWMoQXJyYXksIkFycmF5IiwoZnVuY3Rpb24odCxlKXt1KHRoaXMse3R5cGU6cyx0YXJnZXQ6cih0KSxpbmRleDowLGtpbmQ6ZX0pfSksKGZ1bmN0aW9uKCl7dmFyIHQ9bCh0aGlzKSxlPXQudGFyZ2V0LG49dC5raW5kLHI9dC5pbmRleCsrO3JldHVybiFlfHxyPj1lLmxlbmd0aD8odC50YXJnZXQ9dm9pZCAwLHt2YWx1ZTp2b2lkIDAsZG9uZTohMH0pOiJrZXlzIj09bj97dmFsdWU6cixkb25lOiExfToidmFsdWVzIj09bj97dmFsdWU6ZVtyXSxkb25lOiExfTp7dmFsdWU6W3IsZVtyXV0sZG9uZTohMX19KSwidmFsdWVzIiksaS5Bcmd1bWVudHM9aS5BcnJheSxvKCJrZXlzIiksbygidmFsdWVzIiksbygiZW50cmllcyIpfSw3NDEyMDpmdW5jdGlvbih0LGUsbil7InVzZSBzdHJpY3QiO3ZhciByPW4oMTQwNDQpLG89bigyNDk4KSxpPW4oOTU3MyksYT1uKDIyOTA5KSxjPVtdLmpvaW4scz1vIT1PYmplY3QsdT1hKCJqb2luIiwiLCIpO3Ioe3RhcmdldDoiQXJyYXkiLHByb3RvOiEwLGZvcmNlZDpzfHx1fSx7am9pbjpmdW5jdGlvbih0KXtyZXR1cm4gYy5jYWxsKGkodGhpcyksdm9pZCAwPT09dD8iLCI6dCl9fSl9LDk0OTYzOmZ1bmN0aW9uKHQsZSxuKXt2YXIgcj1uKDE0MDQ0KSxvPW4oNDkyNDkpO3Ioe3RhcmdldDoiQXJyYXkiLHByb3RvOiEwLGZvcmNlZDpvIT09W10ubGFzdEluZGV4T2Z9LHtsYXN0SW5kZXhPZjpvfSl9LDI3Mzg4OmZ1bmN0aW9uKHQsZSxuKXsidXNlIHN0cmljdCI7dmFyIHI9bigxNDA0NCksbz1uKDMwMDI1KS5tYXAsaT1uKDMyMTg3KSxhPW4oNjE5NjMpKCJtYXAiKSxjPWEmJiFpKChmdW5jdGlvbigpe1tdLm1hcC5jYWxsKHtsZW5ndGg6LTEsMDoxfSwoZnVuY3Rpb24odCl7dGhyb3cgdH0pKX0pKTtyKHt0YXJnZXQ6IkFycmF5Iixwcm90bzohMCxmb3JjZWQ6IWF8fCFjfSx7bWFwOmZ1bmN0aW9uKHQpe3JldHVybiBvKHRoaXMsdCxhcmd1bWVudHMubGVuZ3RoPjE/YXJndW1lbnRzWzFdOnZvaWQgMCl9fSl9LDY5OTg4OmZ1bmN0aW9uKHQsZSxuKXsidXNlIHN0cmljdCI7dmFyIHI9bigxNDA0NCksbz1uKDMyMTg3KSxpPW4oNTg4MTApO3Ioe3RhcmdldDoiQXJyYXkiLHN0YXQ6ITAsZm9yY2VkOm8oKGZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCgpe31yZXR1cm4hKEFycmF5Lm9mLmNhbGwodClpbnN0YW5jZW9mIHQpfSkpfSx7b2Y6ZnVuY3Rpb24oKXtmb3IodmFyIHQ9MCxlPWFyZ3VtZW50cy5sZW5ndGgsbj1uZXcoImZ1bmN0aW9uIj09dHlwZW9mIHRoaXM/dGhpczpBcnJheSkoZSk7ZT50OylpKG4sdCxhcmd1bWVudHNbdCsrXSk7cmV0dXJuIG4ubGVuZ3RoPWUsbn19KX0sNDU1Mjg6ZnVuY3Rpb24odCxlLG4peyJ1c2Ugc3RyaWN0Ijt2YXIgcj1uKDE0MDQ0KSxvPW4oMTIzNjYpLnJpZ2h0O3Ioe3RhcmdldDoiQXJyYXkiLHByb3RvOiEwLGZvcmNlZDpuKDIyOTA5KSgicmVkdWNlUmlnaHQiKX0se3JlZHVjZVJpZ2h0OmZ1bmN0aW9uKHQpe3JldHVybiBvKHRoaXMsdCxhcmd1bWVudHMubGVuZ3RoLGFyZ3VtZW50cy5sZW5ndGg+MT9hcmd1bWVudHNbMV06dm9pZCAwKX19KX0sODA1MjI6ZnVuY3Rpb24odCxlLG4peyJ1c2Ugc3RyaWN0Ijt2YXIgcj1uKDE0MDQ0KSxvPW4oMTIzNjYpLmxlZnQ7cih7dGFyZ2V0OiJBcnJheSIscHJvdG86ITAsZm9yY2VkOm4oMjI5MDkpKCJyZWR1Y2UiKX0se3JlZHVjZTpmdW5jdGlvbih0KXtyZXR1cm4gbyh0aGlzLHQsYXJndW1lbnRzLmxlbmd0aCxhcmd1bWVudHMubGVuZ3RoPjE/YXJndW1lbnRzWzFdOnZvaWQgMCl9fSl9LDgwMTE2OmZ1bmN0aW9uKHQsZSxuKXsidXNlIHN0cmljdCI7dmFyIHI9bigxNDA0NCksbz1uKDYxOTkpLGk9W10ucmV2ZXJzZSxhPVsxLDJdO3Ioe3RhcmdldDoiQXJyYXkiLHByb3RvOiEwLGZvcmNlZDpTdHJpbmcoYSk9PT1TdHJpbmcoYS5yZXZlcnNlKCkpfSx7cmV2ZXJzZTpmdW5jdGlvbigpe3JldHVybiBvKHRoaXMpJiYodGhpcy5sZW5ndGg9dGhpcy5sZW5ndGgpLGkuY2FsbCh0aGlzKX19KX0sMjkxMTA6ZnVuY3Rpb24odCxlLG4peyJ1c2Ugc3RyaWN0Ijt2YXIgcj1uKDE0MDQ0KSxvPW4oMTA1OTIpLGk9big2MTk5KSxhPW4oNzY5NzYpLGM9bigyNzg4NCkscz1uKDk1NzMpLHU9big1ODgxMCksbD1uKDYxOTYzKSxmPW4oMjM3MjQpKCJzcGVjaWVzIiksZD1bXS5zbGljZSxwPU1hdGgubWF4O3Ioe3RhcmdldDoiQXJyYXkiLHByb3RvOiEwLGZvcmNlZDohbCgic2xpY2UiKX0se3NsaWNlOmZ1bmN0aW9uKHQsZSl7dmFyIG4scixsLGg9cyh0aGlzKSx2PWMoaC5sZW5ndGgpLGc9YSh0LHYpLHk9YSh2b2lkIDA9PT1lP3Y6ZSx2KTtpZihpKGgpJiYoImZ1bmN0aW9uIiE9dHlwZW9mKG49aC5jb25zdHJ1Y3Rvcil8fG4hPT1BcnJheSYmIWkobi5wcm90b3R5cGUpP28obikmJm51bGw9PT0obj1uW2ZdKSYmKG49dm9pZCAwKTpuPXZvaWQgMCxuPT09QXJyYXl8fHZvaWQgMD09PW4pKXJldHVybiBkLmNhbGwoaCxnLHkpO2ZvcihyPW5ldyh2b2lkIDA9PT1uP0FycmF5Om4pKHAoeS1nLDApKSxsPTA7Zzx5O2crKyxsKyspZyBpbiBoJiZ1KHIsbCxoW2ddKTtyZXR1cm4gci5sZW5ndGg9bCxyfX0pfSw4NTU5NDpmdW5jdGlvbih0LGUsbil7InVzZSBzdHJpY3QiO3ZhciByPW4oMTQwNDQpLG89bigzMDAyNSkuc29tZTtyKHt0YXJnZXQ6IkFycmF5Iixwcm90bzohMCxmb3JjZWQ6bigyMjkwOSkoInNvbWUiKX0se3NvbWU6ZnVuY3Rpb24odCl7cmV0dXJuIG8odGhpcyx0LGFyZ3VtZW50cy5sZW5ndGg+MT9hcmd1bWVudHNbMV06dm9pZCAwKX19KX0sNjc4MTI6ZnVuY3Rpb24odCxlLG4peyJ1c2Ugc3RyaWN0Ijt2YXIgcj1uKDE0MDQ0KSxvPW4oODY0NzApLGk9bigxOTIwOSksYT1uKDMyMTg3KSxjPW4oMjI5MDkpLHM9W10sdT1zLnNvcnQsbD1hKChmdW5jdGlvbigpe3Muc29ydCh2b2lkIDApfSkpLGY9YSgoZnVuY3Rpb24oKXtzLnNvcnQobnVsbCl9KSksZD1jKCJzb3J0Iik7cih7dGFyZ2V0OiJBcnJheSIscHJvdG86ITAsZm9yY2VkOmx8fCFmfHxkfSx7c29ydDpmdW5jdGlvbih0KXtyZXR1cm4gdm9pZCAwPT09dD91LmNhbGwoaSh0aGlzKSk6dS5jYWxsKGkodGhpcyksbyh0KSl9fSl9LDg2MjE0OmZ1bmN0aW9uKHQsZSxuKXtuKDY3NTM4KSgiQXJyYXkiKX0sMzM3OTI6ZnVuY3Rpb24odCxlLG4peyJ1c2Ugc3RyaWN0Ijt2YXIgcj1uKDE0MDQ0KSxvPW4oNzY5NzYpLGk9big0MzQxNiksYT1uKDI3ODg0KSxjPW4oMTkyMDkpLHM9big3MDA5KSx1PW4oNTg4MTApLGw9big2MTk2MyksZj1NYXRoLm1heCxkPU1hdGgubWluLHA9OTAwNzE5OTI1NDc0MDk5MSxoPSJNYXhpbXVtIGFsbG93ZWQgbGVuZ3RoIGV4Y2VlZGVkIjtyKHt0YXJnZXQ6IkFycmF5Iixwcm90bzohMCxmb3JjZWQ6IWwoInNwbGljZSIpfSx7c3BsaWNlOmZ1bmN0aW9uKHQsZSl7dmFyIG4scixsLHYsZyx5LG09Yyh0aGlzKSxiPWEobS5sZW5ndGgpLHg9byh0LGIpLHc9YXJndW1lbnRzLmxlbmd0aDtpZigwPT09dz9uPXI9MDoxPT09dz8obj0wLHI9Yi14KToobj13LTIscj1kKGYoaShlKSwwKSxiLXgpKSxiK24tcj5wKXRocm93IFR5cGVFcnJvcihoKTtmb3IobD1zKG0sciksdj0wO3Y8cjt2KyspKGc9eCt2KWluIG0mJnUobCx2LG1bZ10pO2lmKGwubGVuZ3RoPXIsbjxyKXtmb3Iodj14O3Y8Yi1yO3YrKyl5PXYrbiwoZz12K3IpaW4gbT9tW3ldPW1bZ106ZGVsZXRlIG1beV07Zm9yKHY9Yjt2PmItcituO3YtLSlkZWxldGUgbVt2LTFdfWVsc2UgaWYobj5yKWZvcih2PWItcjt2Png7di0tKXk9dituLTEsKGc9dityLTEpaW4gbT9tW3ldPW1bZ106ZGVsZXRlIG1beV07Zm9yKHY9MDt2PG47disrKW1bdit4XT1hcmd1bWVudHNbdisyXTtyZXR1cm4gbS5sZW5ndGg9Yi1yK24sbH19KX0sNzE4NDY6ZnVuY3Rpb24odCxlLG4pe24oNzY1MTMpKCJmbGF0TWFwIil9LDcwMTQ2OmZ1bmN0aW9uKHQsZSxuKXtuKDc2NTEzKSgiZmxhdCIpfSw0NTE1NDpmdW5jdGlvbih0LGUsbil7dmFyIHI9bigxNDA0NCksbz1uKDgyODM1KTtyKHtnbG9iYWw6ITAsZm9yY2VkOiFuKDczMDc0KS5OQVRJVkVfQVJSQVlfQlVGRkVSfSx7RGF0YVZpZXc6by5EYXRhVmlld30pfSw0MTYzMjpmdW5jdGlvbih0LGUsbil7bigxNDA0NCkoe3RhcmdldDoiRGF0ZSIsc3RhdDohMH0se25vdzpmdW5jdGlvbigpe3JldHVybihuZXcgRGF0ZSkuZ2V0VGltZSgpfX0pfSw0MDA0NTpmdW5jdGlvbih0LGUsbil7dmFyIHI9bigxNDA0NCksbz1uKDc5MTY3KTtyKHt0YXJnZXQ6IkRhdGUiLHByb3RvOiEwLGZvcmNlZDpEYXRlLnByb3RvdHlwZS50b0lTT1N0cmluZyE9PW99LHt0b0lTT1N0cmluZzpvfSl9LDM2MjMzOmZ1bmN0aW9uKHQsZSxuKXsidXNlIHN0cmljdCI7dmFyIHI9bigxNDA0NCksbz1uKDMyMTg3KSxpPW4oMTkyMDkpLGE9big1MzQ5OCk7cih7dGFyZ2V0OiJEYXRlIixwcm90bzohMCxmb3JjZWQ6bygoZnVuY3Rpb24oKXtyZXR1cm4gbnVsbCE9PW5ldyBEYXRlKE5hTikudG9KU09OKCl8fDEhPT1EYXRlLnByb3RvdHlwZS50b0pTT04uY2FsbCh7dG9JU09TdHJpbmc6ZnVuY3Rpb24oKXtyZXR1cm4gMX19KX0pKX0se3RvSlNPTjpmdW5jdGlvbih0KXt2YXIgZT1pKHRoaXMpLG49YShlKTtyZXR1cm4ibnVtYmVyIiE9dHlwZW9mIG58fGlzRmluaXRlKG4pP2UudG9JU09TdHJpbmcoKTpudWxsfX0pfSw4NDA3OmZ1bmN0aW9uKHQsZSxuKXt2YXIgcj1uKDY2OTcxKSxvPW4oNzY5NzQpLGk9bigyMzcyNCkoInRvUHJpbWl0aXZlIiksYT1EYXRlLnByb3RvdHlwZTtpIGluIGF8fHIoYSxpLG8pfSwyMTM3NjpmdW5jdGlvbih0LGUsbil7dmFyIHI9big5MjkxMyksbz1EYXRlLnByb3RvdHlwZSxpPSJJbnZhbGlkIERhdGUiLGE9InRvU3RyaW5nIixjPW8udG9TdHJpbmcscz1vLmdldFRpbWU7bmV3IERhdGUoTmFOKSsiIiE9aSYmcihvLGEsKGZ1bmN0aW9uKCl7dmFyIHQ9cy5jYWxsKHRoaXMpO3JldHVybiB0PT10P2MuY2FsbCh0aGlzKTppfSkpfSw5NjQ5ODpmdW5jdGlvbih0LGUsbil7bigxNDA0NCkoe3RhcmdldDoiRnVuY3Rpb24iLHByb3RvOiEwfSx7YmluZDpuKDczNzM5KX0pfSw3NTg5NDpmdW5jdGlvbih0LGUsbil7InVzZSBzdHJpY3QiO3ZhciByPW4oMTA1OTIpLG89bigzNzYyMCksaT1uKDY0OTY1KSxhPW4oMjM3MjQpKCJoYXNJbnN0YW5jZSIpLGM9RnVuY3Rpb24ucHJvdG90eXBlO2EgaW4gY3x8by5mKGMsYSx7dmFsdWU6ZnVuY3Rpb24odCl7aWYoImZ1bmN0aW9uIiE9dHlwZW9mIHRoaXN8fCFyKHQpKXJldHVybiExO2lmKCFyKHRoaXMucHJvdG90eXBlKSlyZXR1cm4gdCBpbnN0YW5jZW9mIHRoaXM7Zm9yKDt0PWkodCk7KWlmKHRoaXMucHJvdG90eXBlPT09dClyZXR1cm4hMDtyZXR1cm4hMX19KX0sMjI0NDI6ZnVuY3Rpb24odCxlLG4pe3ZhciByPW4oNjI1NTYpLG89bigzNzYyMCkuZixpPUZ1bmN0aW9uLnByb3RvdHlwZSxhPWkudG9TdHJpbmcsYz0vXlxzKmZ1bmN0aW9uIChbXiAoXSopLyxzPSJuYW1lIjtyJiYhKHMgaW4gaSkmJm8oaSxzLHtjb25maWd1cmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7dHJ5e3JldHVybiBhLmNhbGwodGhpcykubWF0Y2goYylbMV19Y2F0Y2godCl7cmV0dXJuIiJ9fX0pfSw3MTYyMjpmdW5jdGlvbih0LGUsbil7bigxNDA0NCkoe2dsb2JhbDohMH0se2dsb2JhbFRoaXM6big4OTU1OCl9KX0sMTY1MDpmdW5jdGlvbih0LGUsbil7dmFyIHI9bigxNDA0NCksbz1uKDc3MDEpLGk9bigzMjE4NyksYT1vKCJKU09OIiwic3RyaW5naWZ5IiksYz0vW1x1RDgwMC1cdURGRkZdL2cscz0vXltcdUQ4MDAtXHVEQkZGXSQvLHU9L15bXHVEQzAwLVx1REZGRl0kLyxsPWZ1bmN0aW9uKHQsZSxuKXt2YXIgcj1uLmNoYXJBdChlLTEpLG89bi5jaGFyQXQoZSsxKTtyZXR1cm4gcy50ZXN0KHQpJiYhdS50ZXN0KG8pfHx1LnRlc3QodCkmJiFzLnRlc3Qocik/IlxcdSIrdC5jaGFyQ29kZUF0KDApLnRvU3RyaW5nKDE2KTp0fSxmPWkoKGZ1bmN0aW9uKCl7cmV0dXJuJyJcXHVkZjA2XFx1ZDgzNCInIT09YSgiXHVkZjA2XHVkODM0Iil8fCciXFx1ZGVhZCInIT09YSgiXHVkZWFkIil9KSk7YSYmcih7dGFyZ2V0OiJKU09OIixzdGF0OiEwLGZvcmNlZDpmfSx7c3RyaW5naWZ5OmZ1bmN0aW9uKHQsZSxuKXt2YXIgcj1hLmFwcGx5KG51bGwsYXJndW1lbnRzKTtyZXR1cm4ic3RyaW5nIj09dHlwZW9mIHI/ci5yZXBsYWNlKGMsbCk6cn19KX0sODExMDQ6ZnVuY3Rpb24odCxlLG4pe3ZhciByPW4oODk1NTgpO24oNTExMjgpKHIuSlNPTiwiSlNPTiIsITApfSw5NDkwNjpmdW5jdGlvbih0LGUsbil7InVzZSBzdHJpY3QiO3ZhciByPW4oODE5NTEpLG89big2NDUwKTt0LmV4cG9ydHM9cigiTWFwIiwoZnVuY3Rpb24odCl7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIHQodGhpcyxhcmd1bWVudHMubGVuZ3RoP2FyZ3VtZW50c1swXTp2b2lkIDApfX0pLG8pfSwyMTAzMjpmdW5jdGlvbih0LGUsbil7dmFyIHI9bigxNDA0NCksbz1uKDIxOTMyKSxpPU1hdGguYWNvc2gsYT1NYXRoLmxvZyxjPU1hdGguc3FydCxzPU1hdGguTE4yO3Ioe3RhcmdldDoiTWF0aCIsc3RhdDohMCxmb3JjZWQ6IWl8fDcxMCE9TWF0aC5mbG9vcihpKE51bWJlci5NQVhfVkFMVUUpKXx8aSgxLzApIT0xLzB9LHthY29zaDpmdW5jdGlvbih0KXtyZXR1cm4odD0rdCk8MT9OYU46dD45NDkwNjI2NS42MjQyNTE1Nj9hKHQpK3M6byh0LTErYyh0LTEpKmModCsxKSl9fSl9LDM3OTM2OmZ1bmN0aW9uKHQsZSxuKXt2YXIgcj1uKDE0MDQ0KSxvPU1hdGguYXNpbmgsaT1NYXRoLmxvZyxhPU1hdGguc3FydDtyKHt0YXJnZXQ6Ik1hdGgiLHN0YXQ6ITAsZm9yY2VkOiEobyYmMS9vKDApPjApfSx7YXNpbmg6ZnVuY3Rpb24gdChlKXtyZXR1cm4gaXNGaW5pdGUoZT0rZSkmJjAhPWU/ZTwwPy10KC1lKTppKGUrYShlKmUrMSkpOmV9fSl9LDkzOTk1OmZ1bmN0aW9uKHQsZSxuKXt2YXIgcj1uKDE0MDQ0KSxvPU1hdGguYXRhbmgsaT1NYXRoLmxvZztyKHt0YXJnZXQ6Ik1hdGgiLHN0YXQ6ITAsZm9yY2VkOiEobyYmMS9vKC0wKTwwKX0se2F0YW5oOmZ1bmN0aW9uKHQpe3JldHVybiAwPT0odD0rdCk/dDppKCgxK3QpLygxLXQpKS8yfX0pfSwxMzM5MzpmdW5jdGlvbih0LGUsbil7dmFyIHI9bigxNDA0NCksbz1uKDM4Nzg3KSxpPU1hdGguYWJzLGE9TWF0aC5wb3c7cih7dGFyZ2V0OiJNYXRoIixzdGF0OiEwfSx7Y2JydDpmdW5jdGlvbih0KXtyZXR1cm4gbyh0PSt0KSphKGkodCksMS8zKX19KX0sMTEyODE6ZnVuY3Rpb24odCxlLG4pe3ZhciByPW4oMTQwNDQpLG89TWF0aC5mbG9vcixpPU1hdGgubG9nLGE9TWF0aC5MT0cyRTtyKHt0YXJnZXQ6Ik1hdGgiLHN0YXQ6ITB9LHtjbHozMjpmdW5jdGlvbih0KXtyZXR1cm4odD4+Pj0wKT8zMS1vKGkodCsuNSkqYSk6MzJ9fSl9LDM4MDM2OmZ1bmN0aW9uKHQsZSxuKXt2YXIgcj1uKDE0MDQ0KSxvPW4oNzI5NzApLGk9TWF0aC5jb3NoLGE9TWF0aC5hYnMsYz1NYXRoLkU7cih7dGFyZ2V0OiJNYXRoIixzdGF0OiEwLGZvcmNlZDohaXx8aSg3MTApPT09MS8wfSx7Y29zaDpmdW5jdGlvbih0KXt2YXIgZT1vKGEodCktMSkrMTtyZXR1cm4oZSsxLyhlKmMqYykpKihjLzIpfX0pfSwxMTM4OmZ1bmN0aW9uKHQsZSxuKXt2YXIgcj1uKDE0MDQ0KSxvPW4oNzI5NzApO3Ioe3RhcmdldDoiTWF0aCIsc3RhdDohMCxmb3JjZWQ6byE9TWF0aC5leHBtMX0se2V4cG0xOm99KX0sNDYwNzg6ZnVuY3Rpb24odCxlLG4pe24oMTQwNDQpKHt0YXJnZXQ6Ik1hdGgiLHN0YXQ6ITB9LHtmcm91bmQ6big1MzI1MSl9KX0sMzAwODM6ZnVuY3Rpb24odCxlLG4pe3ZhciByPW4oMTQwNDQpLG89TWF0aC5oeXBvdCxpPU1hdGguYWJzLGE9TWF0aC5zcXJ0O3Ioe3RhcmdldDoiTWF0aCIsc3RhdDohMCxmb3JjZWQ6ISFvJiZvKDEvMCxOYU4pIT09MS8wfSx7aHlwb3Q6ZnVuY3Rpb24odCxlKXtmb3IodmFyIG4scixvPTAsYz0wLHM9YXJndW1lbnRzLmxlbmd0aCx1PTA7YzxzOyl1PChuPWkoYXJndW1lbnRzW2MrK10pKT8obz1vKihyPXUvbikqcisxLHU9bik6bys9bj4wPyhyPW4vdSkqcjpuO3JldHVybiB1PT09MS8wPzEvMDp1KmEobyl9fSl9LDQ3MzgzOmZ1bmN0aW9uKHQsZSxuKXt2YXIgcj1uKDE0MDQ0KSxvPW4oMzIxODcpLGk9TWF0aC5pbXVsO3Ioe3RhcmdldDoiTWF0aCIsc3RhdDohMCxmb3JjZWQ6bygoZnVuY3Rpb24oKXtyZXR1cm4tNSE9aSg0Mjk0OTY3Mjk1LDUpfHwyIT1pLmxlbmd0aH0pKX0se2ltdWw6ZnVuY3Rpb24odCxlKXt2YXIgbj02NTUzNSxyPSt0LG89K2UsaT1uJnIsYT1uJm87cmV0dXJuIDB8aSphKygobiZyPj4+MTYpKmEraSoobiZvPj4+MTYpPDwxNj4+PjApfX0pfSw3MTU1ODpmdW5jdGlvbih0LGUsbil7dmFyIHI9bigxNDA0NCksbz1NYXRoLmxvZyxpPU1hdGguTE9HMTBFO3Ioe3RhcmdldDoiTWF0aCIsc3RhdDohMH0se2xvZzEwOmZ1bmN0aW9uKHQpe3JldHVybiBvKHQpKml9fSl9LDk5MjE4OmZ1bmN0aW9uKHQsZSxuKXtuKDE0MDQ0KSh7dGFyZ2V0OiJNYXRoIixzdGF0OiEwfSx7bG9nMXA6bigyMTkzMil9KX0sOTg5Nzg6ZnVuY3Rpb24odCxlLG4pe3ZhciByPW4oMTQwNDQpLG89TWF0aC5sb2csaT1NYXRoLkxOMjtyKHt0YXJnZXQ6Ik1hdGgiLHN0YXQ6ITB9LHtsb2cyOmZ1bmN0aW9uKHQpe3JldHVybiBvKHQpL2l9fSl9LDgwNjk6ZnVuY3Rpb24odCxlLG4pe24oMTQwNDQpKHt0YXJnZXQ6Ik1hdGgiLHN0YXQ6ITB9LHtzaWduOm4oMzg3ODcpfSl9LDcwMjA0OmZ1bmN0aW9uKHQsZSxuKXt2YXIgcj1uKDE0MDQ0KSxvPW4oMzIxODcpLGk9big3Mjk3MCksYT1NYXRoLmFicyxjPU1hdGguZXhwLHM9TWF0aC5FO3Ioe3RhcmdldDoiTWF0aCIsc3RhdDohMCxmb3JjZWQ6bygoZnVuY3Rpb24oKXtyZXR1cm4tMmUtMTchPU1hdGguc2luaCgtMmUtMTcpfSkpfSx7c2luaDpmdW5jdGlvbih0KXtyZXR1cm4gYSh0PSt0KTwxPyhpKHQpLWkoLXQpKS8yOihjKHQtMSktYygtdC0xKSkqKHMvMil9fSl9LDg1NzU4OmZ1bmN0aW9uKHQsZSxuKXt2YXIgcj1uKDE0MDQ0KSxvPW4oNzI5NzApLGk9TWF0aC5leHA7cih7dGFyZ2V0OiJNYXRoIixzdGF0OiEwfSx7dGFuaDpmdW5jdGlvbih0KXt2YXIgZT1vKHQ9K3QpLG49bygtdCk7cmV0dXJuIGU9PTEvMD8xOm49PTEvMD8tMTooZS1uKS8oaSh0KStpKC10KSl9fSl9LDExNzczOmZ1bmN0aW9uKHQsZSxuKXtuKDUxMTI4KShNYXRoLCJNYXRoIiwhMCl9LDE1NzYzOmZ1bmN0aW9uKHQsZSxuKXt2YXIgcj1uKDE0MDQ0KSxvPU1hdGguY2VpbCxpPU1hdGguZmxvb3I7cih7dGFyZ2V0OiJNYXRoIixzdGF0OiEwfSx7dHJ1bmM6ZnVuY3Rpb24odCl7cmV0dXJuKHQ+MD9pOm8pKHQpfX0pfSw3MTgyNzpmdW5jdGlvbih0LGUsbil7InVzZSBzdHJpY3QiO3ZhciByPW4oNjI1NTYpLG89big4OTU1OCksaT1uKDY0NTA0KSxhPW4oOTI5MTMpLGM9big3NjI5OCkscz1uKDI0NTk0KSx1PW4oMzAyNzIpLGw9big1MzQ5OCksZj1uKDMyMTg3KSxkPW4oNTA4NjgpLHA9bigxMzMzNCkuZixoPW4oOTcyNTcpLmYsdj1uKDM3NjIwKS5mLGc9big4MjM1MCkudHJpbSx5PSJOdW1iZXIiLG09by5OdW1iZXIsYj1tLnByb3RvdHlwZSx4PXMoZChiKSk9PXksdz1mdW5jdGlvbih0KXt2YXIgZSxuLHIsbyxpLGEsYyxzLHU9bCh0LCExKTtpZigic3RyaW5nIj09dHlwZW9mIHUmJnUubGVuZ3RoPjIpaWYoNDM9PT0oZT0odT1nKHUpKS5jaGFyQ29kZUF0KDApKXx8NDU9PT1lKXtpZig4OD09PShuPXUuY2hhckNvZGVBdCgyKSl8fDEyMD09PW4pcmV0dXJuIE5hTn1lbHNlIGlmKDQ4PT09ZSl7c3dpdGNoKHUuY2hhckNvZGVBdCgxKSl7Y2FzZSA2NjpjYXNlIDk4OnI9MixvPTQ5O2JyZWFrO2Nhc2UgNzk6Y2FzZSAxMTE6cj04LG89NTU7YnJlYWs7ZGVmYXVsdDpyZXR1cm4rdX1mb3IoYT0oaT11LnNsaWNlKDIpKS5sZW5ndGgsYz0wO2M8YTtjKyspaWYoKHM9aS5jaGFyQ29kZUF0KGMpKTw0OHx8cz5vKXJldHVybiBOYU47cmV0dXJuIHBhcnNlSW50KGkscil9cmV0dXJuK3V9O2lmKGkoeSwhbSgiIDBvMSIpfHwhbSgiMGIxIil8fG0oIisweDEiKSkpe2Zvcih2YXIgRSxqPWZ1bmN0aW9uKHQpe3ZhciBlPWFyZ3VtZW50cy5sZW5ndGg8MT8wOnQsbj10aGlzO3JldHVybiBuIGluc3RhbmNlb2YgaiYmKHg/ZigoZnVuY3Rpb24oKXtiLnZhbHVlT2YuY2FsbChuKX0pKTpzKG4pIT15KT91KG5ldyBtKHcoZSkpLG4saik6dyhlKX0sQz1yP3AobSk6Ik1BWF9WQUxVRSxNSU5fVkFMVUUsTmFOLE5FR0FUSVZFX0lORklOSVRZLFBPU0lUSVZFX0lORklOSVRZLEVQU0lMT04saXNGaW5pdGUsaXNJbnRlZ2VyLGlzTmFOLGlzU2FmZUludGVnZXIsTUFYX1NBRkVfSU5URUdFUixNSU5fU0FGRV9JTlRFR0VSLHBhcnNlRmxvYXQscGFyc2VJbnQsaXNJbnRlZ2VyIi5zcGxpdCgiLCIpLGs9MDtDLmxlbmd0aD5rO2srKyljKG0sRT1DW2tdKSYmIWMoaixFKSYmdihqLEUsaChtLEUpKTtqLnByb3RvdHlwZT1iLGIuY29uc3RydWN0b3I9aixhKG8seSxqKX19LDI2MDYzOmZ1bmN0aW9uKHQsZSxuKXtuKDE0MDQ0KSh7dGFyZ2V0OiJOdW1iZXIiLHN0YXQ6ITB9LHtFUFNJTE9OOk1hdGgucG93KDIsLTUyKX0pfSw5Njc6ZnVuY3Rpb24odCxlLG4pe24oMTQwNDQpKHt0YXJnZXQ6Ik51bWJlciIsc3RhdDohMH0se2lzRmluaXRlOm4oODk1NDIpfSl9LDMzMTAwOmZ1bmN0aW9uKHQsZSxuKXtuKDE0MDQ0KSh7dGFyZ2V0OiJOdW1iZXIiLHN0YXQ6ITB9LHtpc0ludGVnZXI6bigzODI1Nyl9KX0sNDE5Mjg6ZnVuY3Rpb24odCxlLG4pe24oMTQwNDQpKHt0YXJnZXQ6Ik51bWJlciIsc3RhdDohMH0se2lzTmFOOmZ1bmN0aW9uKHQpe3JldHVybiB0IT10fX0pfSwxNTg2OTpmdW5jdGlvbih0LGUsbil7dmFyIHI9bigxNDA0NCksbz1uKDM4MjU3KSxpPU1hdGguYWJzO3Ioe3RhcmdldDoiTnVtYmVyIixzdGF0OiEwfSx7aXNTYWZlSW50ZWdlcjpmdW5jdGlvbih0KXtyZXR1cm4gbyh0KSYmaSh0KTw9OTAwNzE5OTI1NDc0MDk5MX19KX0sODg3MTU6ZnVuY3Rpb24odCxlLG4pe24oMTQwNDQpKHt0YXJnZXQ6Ik51bWJlciIsc3RhdDohMH0se01BWF9TQUZFX0lOVEVHRVI6OTAwNzE5OTI1NDc0MDk5MX0pfSwzNjk5NTpmdW5jdGlvbih0LGUsbil7bigxNDA0NCkoe3RhcmdldDoiTnVtYmVyIixzdGF0OiEwfSx7TUlOX1NBRkVfSU5URUdFUjotOTAwNzE5OTI1NDc0MDk5MX0pfSwxMTIyNDpmdW5jdGlvbih0LGUsbil7dmFyIHI9bigxNDA0NCksbz1uKDI0NDk3KTtyKHt0YXJnZXQ6Ik51bWJlciIsc3RhdDohMCxmb3JjZWQ6TnVtYmVyLnBhcnNlRmxvYXQhPW99LHtwYXJzZUZsb2F0Om99KX0sNjM3NjU6ZnVuY3Rpb24odCxlLG4pe3ZhciByPW4oMTQwNDQpLG89big3ODQ2KTtyKHt0YXJnZXQ6Ik51bWJlciIsc3RhdDohMCxmb3JjZWQ6TnVtYmVyLnBhcnNlSW50IT1vfSx7cGFyc2VJbnQ6b30pfSwxMzA2NDpmdW5jdGlvbih0LGUsbil7InVzZSBzdHJpY3QiO3ZhciByPW4oMTQwNDQpLG89big0MzQxNiksaT1uKDUzOTk3KSxhPW4oNjgyNTMpLGM9bigzMjE4Nykscz0xLi50b0ZpeGVkLHU9TWF0aC5mbG9vcixsPWZ1bmN0aW9uKHQsZSxuKXtyZXR1cm4gMD09PWU/bjplJTI9PTE/bCh0LGUtMSxuKnQpOmwodCp0LGUvMixuKX07cih7dGFyZ2V0OiJOdW1iZXIiLHByb3RvOiEwLGZvcmNlZDpzJiYoIjAuMDAwIiE9PThlLTUudG9GaXhlZCgzKXx8IjEiIT09LjkudG9GaXhlZCgwKXx8IjEuMjUiIT09MS4yNTUudG9GaXhlZCgyKXx8IjEwMDAwMDAwMDAwMDAwMDAxMjgiIT09KDB4ZGUwYjZiM2E3NjQwMDgwKS50b0ZpeGVkKDApKXx8IWMoKGZ1bmN0aW9uKCl7cy5jYWxsKHt9KX0pKX0se3RvRml4ZWQ6ZnVuY3Rpb24odCl7dmFyIGUsbixyLGMscz1pKHRoaXMpLGY9byh0KSxkPVswLDAsMCwwLDAsMF0scD0iIixoPSIwIix2PWZ1bmN0aW9uKHQsZSl7Zm9yKHZhciBuPS0xLHI9ZTsrK248Njspcis9dCpkW25dLGRbbl09ciUxZTcscj11KHIvMWU3KX0sZz1mdW5jdGlvbih0KXtmb3IodmFyIGU9NixuPTA7LS1lPj0wOyluKz1kW2VdLGRbZV09dShuL3QpLG49biV0KjFlN30seT1mdW5jdGlvbigpe2Zvcih2YXIgdD02LGU9IiI7LS10Pj0wOylpZigiIiE9PWV8fDA9PT10fHwwIT09ZFt0XSl7dmFyIG49U3RyaW5nKGRbdF0pO2U9IiI9PT1lP246ZSthLmNhbGwoIjAiLDctbi5sZW5ndGgpK259cmV0dXJuIGV9O2lmKGY8MHx8Zj4yMCl0aHJvdyBSYW5nZUVycm9yKCJJbmNvcnJlY3QgZnJhY3Rpb24gZGlnaXRzIik7aWYocyE9cylyZXR1cm4iTmFOIjtpZihzPD0tMWUyMXx8cz49MWUyMSlyZXR1cm4gU3RyaW5nKHMpO2lmKHM8MCYmKHA9Ii0iLHM9LXMpLHM+MWUtMjEpaWYobj0oZT1mdW5jdGlvbih0KXtmb3IodmFyIGU9MCxuPXQ7bj49NDA5NjspZSs9MTIsbi89NDA5Njtmb3IoO24+PTI7KWUrPTEsbi89MjtyZXR1cm4gZX0ocypsKDIsNjksMSkpLTY5KTwwP3MqbCgyLC1lLDEpOnMvbCgyLGUsMSksbio9NDUwMzU5OTYyNzM3MDQ5NiwoZT01Mi1lKT4wKXtmb3IodigwLG4pLHI9ZjtyPj03Oyl2KDFlNywwKSxyLT03O2Zvcih2KGwoMTAsciwxKSwwKSxyPWUtMTtyPj0yMzspZygxPDwyMyksci09MjM7ZygxPDxyKSx2KDEsMSksZygyKSxoPXkoKX1lbHNlIHYoMCxuKSx2KDE8PC1lLDApLGg9eSgpK2EuY2FsbCgiMCIsZik7cmV0dXJuIGg9Zj4wP3ArKChjPWgubGVuZ3RoKTw9Zj8iMC4iK2EuY2FsbCgiMCIsZi1jKStoOmguc2xpY2UoMCxjLWYpKyIuIitoLnNsaWNlKGMtZikpOnAraH19KX0sMzIyOTM6ZnVuY3Rpb24odCxlLG4peyJ1c2Ugc3RyaWN0Ijt2YXIgcj1uKDE0MDQ0KSxvPW4oMzIxODcpLGk9big1Mzk5NyksYT0xLi50b1ByZWNpc2lvbjtyKHt0YXJnZXQ6Ik51bWJlciIscHJvdG86ITAsZm9yY2VkOm8oKGZ1bmN0aW9uKCl7cmV0dXJuIjEiIT09YS5jYWxsKDEsdm9pZCAwKX0pKXx8IW8oKGZ1bmN0aW9uKCl7YS5jYWxsKHt9KX0pKX0se3RvUHJlY2lzaW9uOmZ1bmN0aW9uKHQpe3JldHVybiB2b2lkIDA9PT10P2EuY2FsbChpKHRoaXMpKTphLmNhbGwoaSh0aGlzKSx0KX19KX0sMzc0ODE6ZnVuY3Rpb24odCxlLG4pe3ZhciByPW4oMTQwNDQpLG89big3ODY4NSk7cih7dGFyZ2V0OiJPYmplY3QiLHN0YXQ6ITAsZm9yY2VkOk9iamVjdC5hc3NpZ24hPT1vfSx7YXNzaWduOm99KX0sNDU1NTA6ZnVuY3Rpb24odCxlLG4pe24oMTQwNDQpKHt0YXJnZXQ6Ik9iamVjdCIsc3RhdDohMCxzaGFtOiFuKDYyNTU2KX0se2NyZWF0ZTpuKDUwODY4KX0pfSwxOTI3ODpmdW5jdGlvbih0LGUsbil7InVzZSBzdHJpY3QiO3ZhciByPW4oMTQwNDQpLG89big2MjU1NiksaT1uKDQ3ODEyKSxhPW4oMTkyMDkpLGM9big4NjQ3MCkscz1uKDM3NjIwKTtvJiZyKHt0YXJnZXQ6Ik9iamVjdCIscHJvdG86ITAsZm9yY2VkOml9LHtfX2RlZmluZUdldHRlcl9fOmZ1bmN0aW9uKHQsZSl7cy5mKGEodGhpcyksdCx7Z2V0OmMoZSksZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITB9KX19KX0sNTExNzM6ZnVuY3Rpb24odCxlLG4pe3ZhciByPW4oMTQwNDQpLG89big2MjU1Nik7cih7dGFyZ2V0OiJPYmplY3QiLHN0YXQ6ITAsZm9yY2VkOiFvLHNoYW06IW99LHtkZWZpbmVQcm9wZXJ0aWVzOm4oODY0MDEpfSl9LDU4MTY1OmZ1bmN0aW9uKHQsZSxuKXt2YXIgcj1uKDE0MDQ0KSxvPW4oNjI1NTYpO3Ioe3RhcmdldDoiT2JqZWN0IixzdGF0OiEwLGZvcmNlZDohbyxzaGFtOiFvfSx7ZGVmaW5lUHJvcGVydHk6bigzNzYyMCkuZn0pfSw5MTIwOTpmdW5jdGlvbih0LGUsbil7InVzZSBzdHJpY3QiO3ZhciByPW4oMTQwNDQpLG89big2MjU1NiksaT1uKDQ3ODEyKSxhPW4oMTkyMDkpLGM9big4NjQ3MCkscz1uKDM3NjIwKTtvJiZyKHt0YXJnZXQ6Ik9iamVjdCIscHJvdG86ITAsZm9yY2VkOml9LHtfX2RlZmluZVNldHRlcl9fOmZ1bmN0aW9uKHQsZSl7cy5mKGEodGhpcyksdCx7c2V0OmMoZSksZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITB9KX19KX0sODc0MzpmdW5jdGlvbih0LGUsbil7dmFyIHI9bigxNDA0NCksbz1uKDM1NjcpLmVudHJpZXM7cih7dGFyZ2V0OiJPYmplY3QiLHN0YXQ6ITB9LHtlbnRyaWVzOmZ1bmN0aW9uKHQpe3JldHVybiBvKHQpfX0pfSw3NTgwNDpmdW5jdGlvbih0LGUsbil7dmFyIHI9bigxNDA0NCksbz1uKDc0NTIwKSxpPW4oMzIxODcpLGE9bigxMDU5MiksYz1uKDk2MDMpLm9uRnJlZXplLHM9T2JqZWN0LmZyZWV6ZTtyKHt0YXJnZXQ6Ik9iamVjdCIsc3RhdDohMCxmb3JjZWQ6aSgoZnVuY3Rpb24oKXtzKDEpfSkpLHNoYW06IW99LHtmcmVlemU6ZnVuY3Rpb24odCl7cmV0dXJuIHMmJmEodCk/cyhjKHQpKTp0fX0pfSw0NjE0NjpmdW5jdGlvbih0LGUsbil7dmFyIHI9bigxNDA0NCksbz1uKDQxMzM0KSxpPW4oNTg4MTApO3Ioe3RhcmdldDoiT2JqZWN0IixzdGF0OiEwfSx7ZnJvbUVudHJpZXM6ZnVuY3Rpb24odCl7dmFyIGU9e307cmV0dXJuIG8odCwoZnVuY3Rpb24odCxuKXtpKGUsdCxuKX0pLHZvaWQgMCwhMCksZX19KX0sMTUwNzc6ZnVuY3Rpb24odCxlLG4pe3ZhciByPW4oMTQwNDQpLG89bigzMjE4NyksaT1uKDk1NzMpLGE9big5NzI1NykuZixjPW4oNjI1NTYpLHM9bygoZnVuY3Rpb24oKXthKDEpfSkpO3Ioe3RhcmdldDoiT2JqZWN0IixzdGF0OiEwLGZvcmNlZDohY3x8cyxzaGFtOiFjfSx7Z2V0T3duUHJvcGVydHlEZXNjcmlwdG9yOmZ1bmN0aW9uKHQsZSl7cmV0dXJuIGEoaSh0KSxlKX19KX0sNTgzMjk6ZnVuY3Rpb24odCxlLG4pe3ZhciByPW4oMTQwNDQpLG89big2MjU1NiksaT1uKDI0NDE1KSxhPW4oOTU3MyksYz1uKDk3MjU3KSxzPW4oNTg4MTApO3Ioe3RhcmdldDoiT2JqZWN0IixzdGF0OiEwLHNoYW06IW99LHtnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzOmZ1bmN0aW9uKHQpe2Zvcih2YXIgZSxuLHI9YSh0KSxvPWMuZix1PWkociksbD17fSxmPTA7dS5sZW5ndGg+Zjspdm9pZCAwIT09KG49byhyLGU9dVtmKytdKSkmJnMobCxlLG4pO3JldHVybiBsfX0pfSw2MDUyNTpmdW5jdGlvbih0LGUsbil7dmFyIHI9bigxNDA0NCksbz1uKDMyMTg3KSxpPW4oMjY5MzcpLmY7cih7dGFyZ2V0OiJPYmplY3QiLHN0YXQ6ITAsZm9yY2VkOm8oKGZ1bmN0aW9uKCl7cmV0dXJuIU9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKDEpfSkpfSx7Z2V0T3duUHJvcGVydHlOYW1lczppfSl9LDc0OTUzOmZ1bmN0aW9uKHQsZSxuKXt2YXIgcj1uKDE0MDQ0KSxvPW4oMzIxODcpLGk9bigxOTIwOSksYT1uKDY0OTY1KSxjPW4oNzE2MDgpO3Ioe3RhcmdldDoiT2JqZWN0IixzdGF0OiEwLGZvcmNlZDpvKChmdW5jdGlvbigpe2EoMSl9KSksc2hhbTohY30se2dldFByb3RvdHlwZU9mOmZ1bmN0aW9uKHQpe3JldHVybiBhKGkodCkpfX0pfSw1MTY2OmZ1bmN0aW9uKHQsZSxuKXt2YXIgcj1uKDE0MDQ0KSxvPW4oMzIxODcpLGk9bigxMDU5MiksYT1PYmplY3QuaXNFeHRlbnNpYmxlO3Ioe3RhcmdldDoiT2JqZWN0IixzdGF0OiEwLGZvcmNlZDpvKChmdW5jdGlvbigpe2EoMSl9KSl9LHtpc0V4dGVuc2libGU6ZnVuY3Rpb24odCl7cmV0dXJuISFpKHQpJiYoIWF8fGEodCkpfX0pfSw4OTc1ODpmdW5jdGlvbih0LGUsbil7dmFyIHI9bigxNDA0NCksbz1uKDMyMTg3KSxpPW4oMTA1OTIpLGE9T2JqZWN0LmlzRnJvemVuO3Ioe3RhcmdldDoiT2JqZWN0IixzdGF0OiEwLGZvcmNlZDpvKChmdW5jdGlvbigpe2EoMSl9KSl9LHtpc0Zyb3plbjpmdW5jdGlvbih0KXtyZXR1cm4haSh0KXx8ISFhJiZhKHQpfX0pfSwxODM3ODpmdW5jdGlvbih0LGUsbil7dmFyIHI9bigxNDA0NCksbz1uKDMyMTg3KSxpPW4oMTA1OTIpLGE9T2JqZWN0LmlzU2VhbGVkO3Ioe3RhcmdldDoiT2JqZWN0IixzdGF0OiEwLGZvcmNlZDpvKChmdW5jdGlvbigpe2EoMSl9KSl9LHtpc1NlYWxlZDpmdW5jdGlvbih0KXtyZXR1cm4haSh0KXx8ISFhJiZhKHQpfX0pfSw1NDc4MTpmdW5jdGlvbih0LGUsbil7bigxNDA0NCkoe3RhcmdldDoiT2JqZWN0IixzdGF0OiEwfSx7aXM6big3NjQ4Mil9KX0sOTI1MjpmdW5jdGlvbih0LGUsbil7dmFyIHI9bigxNDA0NCksbz1uKDE5MjA5KSxpPW4oMjU1MDcpO3Ioe3RhcmdldDoiT2JqZWN0IixzdGF0OiEwLGZvcmNlZDpuKDMyMTg3KSgoZnVuY3Rpb24oKXtpKDEpfSkpfSx7a2V5czpmdW5jdGlvbih0KXtyZXR1cm4gaShvKHQpKX19KX0sNzI1NjA6ZnVuY3Rpb24odCxlLG4peyJ1c2Ugc3RyaWN0Ijt2YXIgcj1uKDE0MDQ0KSxvPW4oNjI1NTYpLGk9big0NzgxMiksYT1uKDE5MjA5KSxjPW4oNTM0OTgpLHM9big2NDk2NSksdT1uKDk3MjU3KS5mO28mJnIoe3RhcmdldDoiT2JqZWN0Iixwcm90bzohMCxmb3JjZWQ6aX0se19fbG9va3VwR2V0dGVyX186ZnVuY3Rpb24odCl7dmFyIGUsbj1hKHRoaXMpLHI9Yyh0LCEwKTtkb3tpZihlPXUobixyKSlyZXR1cm4gZS5nZXR9d2hpbGUobj1zKG4pKX19KX0sMTA2MzpmdW5jdGlvbih0LGUsbil7InVzZSBzdHJpY3QiO3ZhciByPW4oMTQwNDQpLG89big2MjU1NiksaT1uKDQ3ODEyKSxhPW4oMTkyMDkpLGM9big1MzQ5OCkscz1uKDY0OTY1KSx1PW4oOTcyNTcpLmY7byYmcih7dGFyZ2V0OiJPYmplY3QiLHByb3RvOiEwLGZvcmNlZDppfSx7X19sb29rdXBTZXR0ZXJfXzpmdW5jdGlvbih0KXt2YXIgZSxuPWEodGhpcykscj1jKHQsITApO2Rve2lmKGU9dShuLHIpKXJldHVybiBlLnNldH13aGlsZShuPXMobikpfX0pfSw5MzI3MjpmdW5jdGlvbih0LGUsbil7dmFyIHI9bigxNDA0NCksbz1uKDEwNTkyKSxpPW4oOTYwMykub25GcmVlemUsYT1uKDc0NTIwKSxjPW4oMzIxODcpLHM9T2JqZWN0LnByZXZlbnRFeHRlbnNpb25zO3Ioe3RhcmdldDoiT2JqZWN0IixzdGF0OiEwLGZvcmNlZDpjKChmdW5jdGlvbigpe3MoMSl9KSksc2hhbTohYX0se3ByZXZlbnRFeHRlbnNpb25zOmZ1bmN0aW9uKHQpe3JldHVybiBzJiZvKHQpP3MoaSh0KSk6dH19KX0sNTYxNTg6ZnVuY3Rpb24odCxlLG4pe3ZhciByPW4oMTQwNDQpLG89bigxMDU5MiksaT1uKDk2MDMpLm9uRnJlZXplLGE9big3NDUyMCksYz1uKDMyMTg3KSxzPU9iamVjdC5zZWFsO3Ioe3RhcmdldDoiT2JqZWN0IixzdGF0OiEwLGZvcmNlZDpjKChmdW5jdGlvbigpe3MoMSl9KSksc2hhbTohYX0se3NlYWw6ZnVuY3Rpb24odCl7cmV0dXJuIHMmJm8odCk/cyhpKHQpKTp0fX0pfSw0MTQ1NjpmdW5jdGlvbih0LGUsbil7bigxNDA0NCkoe3RhcmdldDoiT2JqZWN0IixzdGF0OiEwfSx7c2V0UHJvdG90eXBlT2Y6big3MTg0Mil9KX0sMzQ1Mjk6ZnVuY3Rpb24odCxlLG4pe3ZhciByPW4oOTA2MTMpLG89big5MjkxMyksaT1uKDE5NzU4KTtyfHxvKE9iamVjdC5wcm90b3R5cGUsInRvU3RyaW5nIixpLHt1bnNhZmU6ITB9KX0sNzI4NTE6ZnVuY3Rpb24odCxlLG4pe3ZhciByPW4oMTQwNDQpLG89bigzNTY3KS52YWx1ZXM7cih7dGFyZ2V0OiJPYmplY3QiLHN0YXQ6ITB9LHt2YWx1ZXM6ZnVuY3Rpb24odCl7cmV0dXJuIG8odCl9fSl9LDE5NDMzOmZ1bmN0aW9uKHQsZSxuKXt2YXIgcj1uKDE0MDQ0KSxvPW4oMjQ0OTcpO3Ioe2dsb2JhbDohMCxmb3JjZWQ6cGFyc2VGbG9hdCE9b30se3BhcnNlRmxvYXQ6b30pfSwzMzQzNzpmdW5jdGlvbih0LGUsbil7dmFyIHI9bigxNDA0NCksbz1uKDc4NDYpO3Ioe2dsb2JhbDohMCxmb3JjZWQ6cGFyc2VJbnQhPW99LHtwYXJzZUludDpvfSl9LDE3NjI5OmZ1bmN0aW9uKHQsZSxuKXsidXNlIHN0cmljdCI7dmFyIHI9bigxNDA0NCksbz1uKDg2NDcwKSxpPW4oODMwODMpLGE9bigzMTE1KSxjPW4oNDEzMzQpO3Ioe3RhcmdldDoiUHJvbWlzZSIsc3RhdDohMH0se2FsbFNldHRsZWQ6ZnVuY3Rpb24odCl7dmFyIGU9dGhpcyxuPWkuZihlKSxyPW4ucmVzb2x2ZSxzPW4ucmVqZWN0LHU9YSgoZnVuY3Rpb24oKXt2YXIgbj1vKGUucmVzb2x2ZSksaT1bXSxhPTAscz0xO2ModCwoZnVuY3Rpb24odCl7dmFyIG89YSsrLGM9ITE7aS5wdXNoKHZvaWQgMCkscysrLG4uY2FsbChlLHQpLnRoZW4oKGZ1bmN0aW9uKHQpe2N8fChjPSEwLGlbb109e3N0YXR1czoiZnVsZmlsbGVkIix2YWx1ZTp0fSwtLXN8fHIoaSkpfSksKGZ1bmN0aW9uKHQpe2N8fChjPSEwLGlbb109e3N0YXR1czoicmVqZWN0ZWQiLHJlYXNvbjp0fSwtLXN8fHIoaSkpfSkpfSkpLC0tc3x8cihpKX0pKTtyZXR1cm4gdS5lcnJvciYmcyh1LnZhbHVlKSxuLnByb21pc2V9fSl9LDQyNDkwOmZ1bmN0aW9uKHQsZSxuKXsidXNlIHN0cmljdCI7dmFyIHI9bigxNDA0NCksbz1uKDY1NjcyKSxpPW4oMzk0NTcpLGE9bigzMjE4NyksYz1uKDc3MDEpLHM9bigxMzk3OSksdT1uKDYzMTM0KSxsPW4oOTI5MTMpO3Ioe3RhcmdldDoiUHJvbWlzZSIscHJvdG86ITAscmVhbDohMCxmb3JjZWQ6ISFpJiZhKChmdW5jdGlvbigpe2kucHJvdG90eXBlLmZpbmFsbHkuY2FsbCh7dGhlbjpmdW5jdGlvbigpe319LChmdW5jdGlvbigpe30pKX0pKX0se2ZpbmFsbHk6ZnVuY3Rpb24odCl7dmFyIGU9cyh0aGlzLGMoIlByb21pc2UiKSksbj0iZnVuY3Rpb24iPT10eXBlb2YgdDtyZXR1cm4gdGhpcy50aGVuKG4/ZnVuY3Rpb24obil7cmV0dXJuIHUoZSx0KCkpLnRoZW4oKGZ1bmN0aW9uKCl7cmV0dXJuIG59KSl9OnQsbj9mdW5jdGlvbihuKXtyZXR1cm4gdShlLHQoKSkudGhlbigoZnVuY3Rpb24oKXt0aHJvdyBufSkpfTp0KX19KSxvfHwiZnVuY3Rpb24iIT10eXBlb2YgaXx8aS5wcm90b3R5cGUuZmluYWxseXx8bChpLnByb3RvdHlwZSwiZmluYWxseSIsYygiUHJvbWlzZSIpLnByb3RvdHlwZS5maW5hbGx5KX0sMTE2ODg6ZnVuY3Rpb24odCxlLG4peyJ1c2Ugc3RyaWN0Ijt2YXIgcixvLGksYSxjPW4oMTQwNDQpLHM9big2NTY3MiksdT1uKDg5NTU4KSxsPW4oNzcwMSksZj1uKDM5NDU3KSxkPW4oOTI5MTMpLHA9bigxOTI2KSxoPW4oNTExMjgpLHY9big2NzUzOCksZz1uKDEwNTkyKSx5PW4oODY0NzApLG09big1OTM3OSksYj1uKDI0NTk0KSx4PW4oNzY3NzMpLHc9big0MTMzNCksRT1uKDQ3OTYpLGo9bigxMzk3OSksQz1uKDIxNzQ0KS5zZXQsaz1uKDY1NTU1KSxTPW4oNjMxMzQpLE89big4MzYyMCksQT1uKDgzMDgzKSxJPW4oMzExNSksVD1uKDg5ODI3KSxfPW4oNjQ1MDQpLE09bigyMzcyNCksTD1uKDc5MDcxKSxSPU0oInNwZWNpZXMiKSxQPSJQcm9taXNlIixOPVQuZ2V0LEY9VC5zZXQsRD1ULmdldHRlckZvcihQKSxVPWYsQj11LlR5cGVFcnJvcix6PXUuZG9jdW1lbnQsSD11LnByb2Nlc3MsVj1sKCJmZXRjaCIpLHE9QS5mLFc9cSxHPSJwcm9jZXNzIj09YihIKSxaPSEhKHomJnouY3JlYXRlRXZlbnQmJnUuZGlzcGF0Y2hFdmVudCksWT0idW5oYW5kbGVkcmVqZWN0aW9uIiwkPV8oUCwoZnVuY3Rpb24oKXtpZighKHgoVSkhPT1TdHJpbmcoVSkpKXtpZig2Nj09PUwpcmV0dXJuITA7aWYoIUcmJiJmdW5jdGlvbiIhPXR5cGVvZiBQcm9taXNlUmVqZWN0aW9uRXZlbnQpcmV0dXJuITB9aWYocyYmIVUucHJvdG90eXBlLmZpbmFsbHkpcmV0dXJuITA7aWYoTD49NTEmJi9uYXRpdmUgY29kZS8udGVzdChVKSlyZXR1cm4hMTt2YXIgdD1VLnJlc29sdmUoMSksZT1mdW5jdGlvbih0KXt0KChmdW5jdGlvbigpe30pLChmdW5jdGlvbigpe30pKX07cmV0dXJuKHQuY29uc3RydWN0b3I9e30pW1JdPWUsISh0LnRoZW4oKGZ1bmN0aW9uKCl7fSkpaW5zdGFuY2VvZiBlKX0pKSxLPSR8fCFFKChmdW5jdGlvbih0KXtVLmFsbCh0KS5jYXRjaCgoZnVuY3Rpb24oKXt9KSl9KSksSj1mdW5jdGlvbih0KXt2YXIgZTtyZXR1cm4hKCFnKHQpfHwiZnVuY3Rpb24iIT10eXBlb2YoZT10LnRoZW4pKSYmZX0sWD1mdW5jdGlvbih0LGUsbil7aWYoIWUubm90aWZpZWQpe2Uubm90aWZpZWQ9ITA7dmFyIHI9ZS5yZWFjdGlvbnM7aygoZnVuY3Rpb24oKXtmb3IodmFyIG89ZS52YWx1ZSxpPTE9PWUuc3RhdGUsYT0wO3IubGVuZ3RoPmE7KXt2YXIgYyxzLHUsbD1yW2ErK10sZj1pP2wub2s6bC5mYWlsLGQ9bC5yZXNvbHZlLHA9bC5yZWplY3QsaD1sLmRvbWFpbjt0cnl7Zj8oaXx8KDI9PT1lLnJlamVjdGlvbiYmbnQodCxlKSxlLnJlamVjdGlvbj0xKSwhMD09PWY/Yz1vOihoJiZoLmVudGVyKCksYz1mKG8pLGgmJihoLmV4aXQoKSx1PSEwKSksYz09PWwucHJvbWlzZT9wKEIoIlByb21pc2UtY2hhaW4gY3ljbGUiKSk6KHM9SihjKSk/cy5jYWxsKGMsZCxwKTpkKGMpKTpwKG8pfWNhdGNoKHQpe2gmJiF1JiZoLmV4aXQoKSxwKHQpfX1lLnJlYWN0aW9ucz1bXSxlLm5vdGlmaWVkPSExLG4mJiFlLnJlamVjdGlvbiYmdHQodCxlKX0pKX19LFE9ZnVuY3Rpb24odCxlLG4pe3ZhciByLG87Wj8oKHI9ei5jcmVhdGVFdmVudCgiRXZlbnQiKSkucHJvbWlzZT1lLHIucmVhc29uPW4sci5pbml0RXZlbnQodCwhMSwhMCksdS5kaXNwYXRjaEV2ZW50KHIpKTpyPXtwcm9taXNlOmUscmVhc29uOm59LChvPXVbIm9uIit0XSk/byhyKTp0PT09WSYmTygiVW5oYW5kbGVkIHByb21pc2UgcmVqZWN0aW9uIixuKX0sdHQ9ZnVuY3Rpb24odCxlKXtDLmNhbGwodSwoZnVuY3Rpb24oKXt2YXIgbixyPWUudmFsdWU7aWYoZXQoZSkmJihuPUkoKGZ1bmN0aW9uKCl7Rz9ILmVtaXQoInVuaGFuZGxlZFJlamVjdGlvbiIscix0KTpRKFksdCxyKX0pKSxlLnJlamVjdGlvbj1HfHxldChlKT8yOjEsbi5lcnJvcikpdGhyb3cgbi52YWx1ZX0pKX0sZXQ9ZnVuY3Rpb24odCl7cmV0dXJuIDEhPT10LnJlamVjdGlvbiYmIXQucGFyZW50fSxudD1mdW5jdGlvbih0LGUpe0MuY2FsbCh1LChmdW5jdGlvbigpe0c/SC5lbWl0KCJyZWplY3Rpb25IYW5kbGVkIix0KTpRKCJyZWplY3Rpb25oYW5kbGVkIix0LGUudmFsdWUpfSkpfSxydD1mdW5jdGlvbih0LGUsbixyKXtyZXR1cm4gZnVuY3Rpb24obyl7dChlLG4sbyxyKX19LG90PWZ1bmN0aW9uKHQsZSxuLHIpe2UuZG9uZXx8KGUuZG9uZT0hMCxyJiYoZT1yKSxlLnZhbHVlPW4sZS5zdGF0ZT0yLFgodCxlLCEwKSl9LGl0PWZ1bmN0aW9uKHQsZSxuLHIpe2lmKCFlLmRvbmUpe2UuZG9uZT0hMCxyJiYoZT1yKTt0cnl7aWYodD09PW4pdGhyb3cgQigiUHJvbWlzZSBjYW4ndCBiZSByZXNvbHZlZCBpdHNlbGYiKTt2YXIgbz1KKG4pO28/aygoZnVuY3Rpb24oKXt2YXIgcj17ZG9uZTohMX07dHJ5e28uY2FsbChuLHJ0KGl0LHQscixlKSxydChvdCx0LHIsZSkpfWNhdGNoKG4pe290KHQscixuLGUpfX0pKTooZS52YWx1ZT1uLGUuc3RhdGU9MSxYKHQsZSwhMSkpfWNhdGNoKG4pe290KHQse2RvbmU6ITF9LG4sZSl9fX07JCYmKFU9ZnVuY3Rpb24odCl7bSh0aGlzLFUsUCkseSh0KSxyLmNhbGwodGhpcyk7dmFyIGU9Tih0aGlzKTt0cnl7dChydChpdCx0aGlzLGUpLHJ0KG90LHRoaXMsZSkpfWNhdGNoKHQpe290KHRoaXMsZSx0KX19LChyPWZ1bmN0aW9uKHQpe0YodGhpcyx7dHlwZTpQLGRvbmU6ITEsbm90aWZpZWQ6ITEscGFyZW50OiExLHJlYWN0aW9uczpbXSxyZWplY3Rpb246ITEsc3RhdGU6MCx2YWx1ZTp2b2lkIDB9KX0pLnByb3RvdHlwZT1wKFUucHJvdG90eXBlLHt0aGVuOmZ1bmN0aW9uKHQsZSl7dmFyIG49RCh0aGlzKSxyPXEoaih0aGlzLFUpKTtyZXR1cm4gci5vaz0iZnVuY3Rpb24iIT10eXBlb2YgdHx8dCxyLmZhaWw9ImZ1bmN0aW9uIj09dHlwZW9mIGUmJmUsci5kb21haW49Rz9ILmRvbWFpbjp2b2lkIDAsbi5wYXJlbnQ9ITAsbi5yZWFjdGlvbnMucHVzaChyKSwwIT1uLnN0YXRlJiZYKHRoaXMsbiwhMSksci5wcm9taXNlfSxjYXRjaDpmdW5jdGlvbih0KXtyZXR1cm4gdGhpcy50aGVuKHZvaWQgMCx0KX19KSxvPWZ1bmN0aW9uKCl7dmFyIHQ9bmV3IHIsZT1OKHQpO3RoaXMucHJvbWlzZT10LHRoaXMucmVzb2x2ZT1ydChpdCx0LGUpLHRoaXMucmVqZWN0PXJ0KG90LHQsZSl9LEEuZj1xPWZ1bmN0aW9uKHQpe3JldHVybiB0PT09VXx8dD09PWk/bmV3IG8odCk6Vyh0KX0sc3x8ImZ1bmN0aW9uIiE9dHlwZW9mIGZ8fChhPWYucHJvdG90eXBlLnRoZW4sZChmLnByb3RvdHlwZSwidGhlbiIsKGZ1bmN0aW9uKHQsZSl7dmFyIG49dGhpcztyZXR1cm4gbmV3IFUoKGZ1bmN0aW9uKHQsZSl7YS5jYWxsKG4sdCxlKX0pKS50aGVuKHQsZSl9KSx7dW5zYWZlOiEwfSksImZ1bmN0aW9uIj09dHlwZW9mIFYmJmMoe2dsb2JhbDohMCxlbnVtZXJhYmxlOiEwLGZvcmNlZDohMH0se2ZldGNoOmZ1bmN0aW9uKHQpe3JldHVybiBTKFUsVi5hcHBseSh1LGFyZ3VtZW50cykpfX0pKSksYyh7Z2xvYmFsOiEwLHdyYXA6ITAsZm9yY2VkOiR9LHtQcm9taXNlOlV9KSxoKFUsUCwhMSwhMCksdihQKSxpPWwoUCksYyh7dGFyZ2V0OlAsc3RhdDohMCxmb3JjZWQ6JH0se3JlamVjdDpmdW5jdGlvbih0KXt2YXIgZT1xKHRoaXMpO3JldHVybiBlLnJlamVjdC5jYWxsKHZvaWQgMCx0KSxlLnByb21pc2V9fSksYyh7dGFyZ2V0OlAsc3RhdDohMCxmb3JjZWQ6c3x8JH0se3Jlc29sdmU6ZnVuY3Rpb24odCl7cmV0dXJuIFMocyYmdGhpcz09PWk/VTp0aGlzLHQpfX0pLGMoe3RhcmdldDpQLHN0YXQ6ITAsZm9yY2VkOkt9LHthbGw6ZnVuY3Rpb24odCl7dmFyIGU9dGhpcyxuPXEoZSkscj1uLnJlc29sdmUsbz1uLnJlamVjdCxpPUkoKGZ1bmN0aW9uKCl7dmFyIG49eShlLnJlc29sdmUpLGk9W10sYT0wLGM9MTt3KHQsKGZ1bmN0aW9uKHQpe3ZhciBzPWErKyx1PSExO2kucHVzaCh2b2lkIDApLGMrKyxuLmNhbGwoZSx0KS50aGVuKChmdW5jdGlvbih0KXt1fHwodT0hMCxpW3NdPXQsLS1jfHxyKGkpKX0pLG8pfSkpLC0tY3x8cihpKX0pKTtyZXR1cm4gaS5lcnJvciYmbyhpLnZhbHVlKSxuLnByb21pc2V9LHJhY2U6ZnVuY3Rpb24odCl7dmFyIGU9dGhpcyxuPXEoZSkscj1uLnJlamVjdCxvPUkoKGZ1bmN0aW9uKCl7dmFyIG89eShlLnJlc29sdmUpO3codCwoZnVuY3Rpb24odCl7by5jYWxsKGUsdCkudGhlbihuLnJlc29sdmUscil9KSl9KSk7cmV0dXJuIG8uZXJyb3ImJnIoby52YWx1ZSksbi5wcm9taXNlfX0pfSwyOTI4NDpmdW5jdGlvbih0LGUsbil7dmFyIHI9bigxNDA0NCksbz1uKDc3MDEpLGk9big4NjQ3MCksYT1uKDg3NTc5KSxjPW4oMzIxODcpLHM9bygiUmVmbGVjdCIsImFwcGx5IiksdT1GdW5jdGlvbi5hcHBseTtyKHt0YXJnZXQ6IlJlZmxlY3QiLHN0YXQ6ITAsZm9yY2VkOiFjKChmdW5jdGlvbigpe3MoKGZ1bmN0aW9uKCl7fSkpfSkpfSx7YXBwbHk6ZnVuY3Rpb24odCxlLG4pe3JldHVybiBpKHQpLGEobikscz9zKHQsZSxuKTp1LmNhbGwodCxlLG4pfX0pfSw2MTk0MzpmdW5jdGlvbih0LGUsbil7dmFyIHI9bigxNDA0NCksbz1uKDc3MDEpLGk9big4NjQ3MCksYT1uKDg3NTc5KSxjPW4oMTA1OTIpLHM9big1MDg2OCksdT1uKDczNzM5KSxsPW4oMzIxODcpLGY9bygiUmVmbGVjdCIsImNvbnN0cnVjdCIpLGQ9bCgoZnVuY3Rpb24oKXtmdW5jdGlvbiB0KCl7fXJldHVybiEoZigoZnVuY3Rpb24oKXt9KSxbXSx0KWluc3RhbmNlb2YgdCl9KSkscD0hbCgoZnVuY3Rpb24oKXtmKChmdW5jdGlvbigpe30pKX0pKSxoPWR8fHA7cih7dGFyZ2V0OiJSZWZsZWN0IixzdGF0OiEwLGZvcmNlZDpoLHNoYW06aH0se2NvbnN0cnVjdDpmdW5jdGlvbih0LGUpe2kodCksYShlKTt2YXIgbj1hcmd1bWVudHMubGVuZ3RoPDM/dDppKGFyZ3VtZW50c1syXSk7aWYocCYmIWQpcmV0dXJuIGYodCxlLG4pO2lmKHQ9PW4pe3N3aXRjaChlLmxlbmd0aCl7Y2FzZSAwOnJldHVybiBuZXcgdDtjYXNlIDE6cmV0dXJuIG5ldyB0KGVbMF0pO2Nhc2UgMjpyZXR1cm4gbmV3IHQoZVswXSxlWzFdKTtjYXNlIDM6cmV0dXJuIG5ldyB0KGVbMF0sZVsxXSxlWzJdKTtjYXNlIDQ6cmV0dXJuIG5ldyB0KGVbMF0sZVsxXSxlWzJdLGVbM10pfXZhciByPVtudWxsXTtyZXR1cm4gci5wdXNoLmFwcGx5KHIsZSksbmV3KHUuYXBwbHkodCxyKSl9dmFyIG89bi5wcm90b3R5cGUsbD1zKGMobyk/bzpPYmplY3QucHJvdG90eXBlKSxoPUZ1bmN0aW9uLmFwcGx5LmNhbGwodCxsLGUpO3JldHVybiBjKGgpP2g6bH19KX0sMjY5ODY6ZnVuY3Rpb24odCxlLG4pe3ZhciByPW4oMTQwNDQpLG89big2MjU1NiksaT1uKDg3NTc5KSxhPW4oNTM0OTgpLGM9bigzNzYyMCk7cih7dGFyZ2V0OiJSZWZsZWN0IixzdGF0OiEwLGZvcmNlZDpuKDMyMTg3KSgoZnVuY3Rpb24oKXtSZWZsZWN0LmRlZmluZVByb3BlcnR5KGMuZih7fSwxLHt2YWx1ZToxfSksMSx7dmFsdWU6Mn0pfSkpLHNoYW06IW99LHtkZWZpbmVQcm9wZXJ0eTpmdW5jdGlvbih0LGUsbil7aSh0KTt2YXIgcj1hKGUsITApO2kobik7dHJ5e3JldHVybiBjLmYodCxyLG4pLCEwfWNhdGNoKHQpe3JldHVybiExfX19KX0sMTM2NjpmdW5jdGlvbih0LGUsbil7dmFyIHI9bigxNDA0NCksbz1uKDg3NTc5KSxpPW4oOTcyNTcpLmY7cih7dGFyZ2V0OiJSZWZsZWN0IixzdGF0OiEwfSx7ZGVsZXRlUHJvcGVydHk6ZnVuY3Rpb24odCxlKXt2YXIgbj1pKG8odCksZSk7cmV0dXJuIShuJiYhbi5jb25maWd1cmFibGUpJiZkZWxldGUgdFtlXX19KX0sNDY1OTc6ZnVuY3Rpb24odCxlLG4pe3ZhciByPW4oMTQwNDQpLG89big2MjU1NiksaT1uKDg3NTc5KSxhPW4oOTcyNTcpO3Ioe3RhcmdldDoiUmVmbGVjdCIsc3RhdDohMCxzaGFtOiFvfSx7Z2V0T3duUHJvcGVydHlEZXNjcmlwdG9yOmZ1bmN0aW9uKHQsZSl7cmV0dXJuIGEuZihpKHQpLGUpfX0pfSw3MDEzNjpmdW5jdGlvbih0LGUsbil7dmFyIHI9bigxNDA0NCksbz1uKDg3NTc5KSxpPW4oNjQ5NjUpO3Ioe3RhcmdldDoiUmVmbGVjdCIsc3RhdDohMCxzaGFtOiFuKDcxNjA4KX0se2dldFByb3RvdHlwZU9mOmZ1bmN0aW9uKHQpe3JldHVybiBpKG8odCkpfX0pfSw4MzMxMDpmdW5jdGlvbih0LGUsbil7dmFyIHI9bigxNDA0NCksbz1uKDEwNTkyKSxpPW4oODc1NzkpLGE9big3NjI5OCksYz1uKDk3MjU3KSxzPW4oNjQ5NjUpO3Ioe3RhcmdldDoiUmVmbGVjdCIsc3RhdDohMH0se2dldDpmdW5jdGlvbiB0KGUsbil7dmFyIHIsdSxsPWFyZ3VtZW50cy5sZW5ndGg8Mz9lOmFyZ3VtZW50c1syXTtyZXR1cm4gaShlKT09PWw/ZVtuXToocj1jLmYoZSxuKSk/YShyLCJ2YWx1ZSIpP3IudmFsdWU6dm9pZCAwPT09ci5nZXQ/dm9pZCAwOnIuZ2V0LmNhbGwobCk6byh1PXMoZSkpP3QodSxuLGwpOnZvaWQgMH19KX0sNjA4NjU6ZnVuY3Rpb24odCxlLG4pe24oMTQwNDQpKHt0YXJnZXQ6IlJlZmxlY3QiLHN0YXQ6ITB9LHtoYXM6ZnVuY3Rpb24odCxlKXtyZXR1cm4gZSBpbiB0fX0pfSw2NzcwODpmdW5jdGlvbih0LGUsbil7dmFyIHI9bigxNDA0NCksbz1uKDg3NTc5KSxpPU9iamVjdC5pc0V4dGVuc2libGU7cih7dGFyZ2V0OiJSZWZsZWN0IixzdGF0OiEwfSx7aXNFeHRlbnNpYmxlOmZ1bmN0aW9uKHQpe3JldHVybiBvKHQpLCFpfHxpKHQpfX0pfSw5NjYzODpmdW5jdGlvbih0LGUsbil7bigxNDA0NCkoe3RhcmdldDoiUmVmbGVjdCIsc3RhdDohMH0se293bktleXM6bigyNDQxNSl9KX0sMzk3MzA6ZnVuY3Rpb24odCxlLG4pe3ZhciByPW4oMTQwNDQpLG89big3NzAxKSxpPW4oODc1NzkpO3Ioe3RhcmdldDoiUmVmbGVjdCIsc3RhdDohMCxzaGFtOiFuKDc0NTIwKX0se3ByZXZlbnRFeHRlbnNpb25zOmZ1bmN0aW9uKHQpe2kodCk7dHJ5e3ZhciBlPW8oIk9iamVjdCIsInByZXZlbnRFeHRlbnNpb25zIik7cmV0dXJuIGUmJmUodCksITB9Y2F0Y2godCl7cmV0dXJuITF9fX0pfSw4NTY4NjpmdW5jdGlvbih0LGUsbil7dmFyIHI9bigxNDA0NCksbz1uKDg3NTc5KSxpPW4oNzk4NjEpLGE9big3MTg0Mik7YSYmcih7dGFyZ2V0OiJSZWZsZWN0IixzdGF0OiEwfSx7c2V0UHJvdG90eXBlT2Y6ZnVuY3Rpb24odCxlKXtvKHQpLGkoZSk7dHJ5e3JldHVybiBhKHQsZSksITB9Y2F0Y2godCl7cmV0dXJuITF9fX0pfSw3NDExNTpmdW5jdGlvbih0LGUsbil7dmFyIHI9bigxNDA0NCksbz1uKDg3NTc5KSxpPW4oMTA1OTIpLGE9big3NjI5OCksYz1uKDMyMTg3KSxzPW4oMzc2MjApLHU9big5NzI1NyksbD1uKDY0OTY1KSxmPW4oMTQyMDkpO3Ioe3RhcmdldDoiUmVmbGVjdCIsc3RhdDohMCxmb3JjZWQ6YygoZnVuY3Rpb24oKXt2YXIgdD1zLmYoe30sImEiLHtjb25maWd1cmFibGU6ITB9KTtyZXR1cm4hMSE9PVJlZmxlY3Quc2V0KGwodCksImEiLDEsdCl9KSl9LHtzZXQ6ZnVuY3Rpb24gdChlLG4scil7dmFyIGMsZCxwPWFyZ3VtZW50cy5sZW5ndGg8ND9lOmFyZ3VtZW50c1szXSxoPXUuZihvKGUpLG4pO2lmKCFoKXtpZihpKGQ9bChlKSkpcmV0dXJuIHQoZCxuLHIscCk7aD1mKDApfWlmKGEoaCwidmFsdWUiKSl7aWYoITE9PT1oLndyaXRhYmxlfHwhaShwKSlyZXR1cm4hMTtpZihjPXUuZihwLG4pKXtpZihjLmdldHx8Yy5zZXR8fCExPT09Yy53cml0YWJsZSlyZXR1cm4hMTtjLnZhbHVlPXIscy5mKHAsbixjKX1lbHNlIHMuZihwLG4sZigwLHIpKTtyZXR1cm4hMH1yZXR1cm4gdm9pZCAwIT09aC5zZXQmJihoLnNldC5jYWxsKHAsciksITApfX0pfSw0OTQ5NTpmdW5jdGlvbih0LGUsbil7dmFyIHI9big2MjU1Niksbz1uKDg5NTU4KSxpPW4oNjQ1MDQpLGE9bigzMDI3MiksYz1uKDM3NjIwKS5mLHM9bigxMzMzNCkuZix1PW4oNDMyMjMpLGw9bigyNTQxOSksZj1uKDkyOTEzKSxkPW4oMzIxODcpLHA9big2NzUzOCksaD1uKDIzNzI0KSgibWF0Y2giKSx2PW8uUmVnRXhwLGc9di5wcm90b3R5cGUseT0vYS9nLG09L2EvZyxiPW5ldyB2KHkpIT09eTtpZihyJiZpKCJSZWdFeHAiLCFifHxkKChmdW5jdGlvbigpe3JldHVybiBtW2hdPSExLHYoeSkhPXl8fHYobSk9PW18fCIvYS9pIiE9dih5LCJpIil9KSkpKXtmb3IodmFyIHg9ZnVuY3Rpb24odCxlKXt2YXIgbj10aGlzIGluc3RhbmNlb2YgeCxyPXUodCksbz12b2lkIDA9PT1lO3JldHVybiFuJiZyJiZ0LmNvbnN0cnVjdG9yPT09eCYmbz90OmEoYj9uZXcgdihyJiYhbz90LnNvdXJjZTp0LGUpOnYoKHI9dCBpbnN0YW5jZW9mIHgpP3Quc291cmNlOnQsciYmbz9sLmNhbGwodCk6ZSksbj90aGlzOmcseCl9LHc9ZnVuY3Rpb24odCl7dCBpbiB4fHxjKHgsdCx7Y29uZmlndXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiB2W3RdfSxzZXQ6ZnVuY3Rpb24oZSl7dlt0XT1lfX0pfSxFPXModiksaj0wO0UubGVuZ3RoPmo7KXcoRVtqKytdKTtnLmNvbnN0cnVjdG9yPXgseC5wcm90b3R5cGU9ZyxmKG8sIlJlZ0V4cCIseCl9cCgiUmVnRXhwIil9LDg3MjA5OmZ1bmN0aW9uKHQsZSxuKXsidXNlIHN0cmljdCI7dmFyIHI9bigxNDA0NCksbz1uKDM4NTk4KTtyKHt0YXJnZXQ6IlJlZ0V4cCIscHJvdG86ITAsZm9yY2VkOi8uLy5leGVjIT09b30se2V4ZWM6b30pfSwxODI3NjpmdW5jdGlvbih0LGUsbil7dmFyIHI9big2MjU1Niksbz1uKDM3NjIwKSxpPW4oMjU0MTkpO3ImJiJnIiE9Ly4vZy5mbGFncyYmby5mKFJlZ0V4cC5wcm90b3R5cGUsImZsYWdzIix7Y29uZmlndXJhYmxlOiEwLGdldDppfSl9LDM3NTQ6ZnVuY3Rpb24odCxlLG4peyJ1c2Ugc3RyaWN0Ijt2YXIgcj1uKDkyOTEzKSxvPW4oODc1NzkpLGk9bigzMjE4NyksYT1uKDI1NDE5KSxjPSJ0b1N0cmluZyIscz1SZWdFeHAucHJvdG90eXBlLHU9cy50b1N0cmluZyxsPWkoKGZ1bmN0aW9uKCl7cmV0dXJuIi9hL2IiIT11LmNhbGwoe3NvdXJjZToiYSIsZmxhZ3M6ImIifSl9KSksZj11Lm5hbWUhPWM7KGx8fGYpJiZyKFJlZ0V4cC5wcm90b3R5cGUsYywoZnVuY3Rpb24oKXt2YXIgdD1vKHRoaXMpLGU9U3RyaW5nKHQuc291cmNlKSxuPXQuZmxhZ3M7cmV0dXJuIi8iK2UrIi8iK1N0cmluZyh2b2lkIDA9PT1uJiZ0IGluc3RhbmNlb2YgUmVnRXhwJiYhKCJmbGFncyJpbiBzKT9hLmNhbGwodCk6bil9KSx7dW5zYWZlOiEwfSl9LDc0MDYxOmZ1bmN0aW9uKHQsZSxuKXsidXNlIHN0cmljdCI7dmFyIHI9big4MTk1MSksbz1uKDY0NTApO3QuZXhwb3J0cz1yKCJTZXQiLChmdW5jdGlvbih0KXtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gdCh0aGlzLGFyZ3VtZW50cy5sZW5ndGg/YXJndW1lbnRzWzBdOnZvaWQgMCl9fSksbyl9LDQxNzczOmZ1bmN0aW9uKHQsZSxuKXsidXNlIHN0cmljdCI7dmFyIHI9bigxNDA0NCksbz1uKDMxMzUxKTtyKHt0YXJnZXQ6IlN0cmluZyIscHJvdG86ITAsZm9yY2VkOm4oNTIxMjkpKCJhbmNob3IiKX0se2FuY2hvcjpmdW5jdGlvbih0KXtyZXR1cm4gbyh0aGlzLCJhIiwibmFtZSIsdCl9fSl9LDMwNDAyOmZ1bmN0aW9uKHQsZSxuKXsidXNlIHN0cmljdCI7dmFyIHI9bigxNDA0NCksbz1uKDMxMzUxKTtyKHt0YXJnZXQ6IlN0cmluZyIscHJvdG86ITAsZm9yY2VkOm4oNTIxMjkpKCJiaWciKX0se2JpZzpmdW5jdGlvbigpe3JldHVybiBvKHRoaXMsImJpZyIsIiIsIiIpfX0pfSwxODE3NTpmdW5jdGlvbih0LGUsbil7InVzZSBzdHJpY3QiO3ZhciByPW4oMTQwNDQpLG89bigzMTM1MSk7cih7dGFyZ2V0OiJTdHJpbmciLHByb3RvOiEwLGZvcmNlZDpuKDUyMTI5KSgiYmxpbmsiKX0se2JsaW5rOmZ1bmN0aW9uKCl7cmV0dXJuIG8odGhpcywiYmxpbmsiLCIiLCIiKX19KX0sNjY4OTY6ZnVuY3Rpb24odCxlLG4peyJ1c2Ugc3RyaWN0Ijt2YXIgcj1uKDE0MDQ0KSxvPW4oMzEzNTEpO3Ioe3RhcmdldDoiU3RyaW5nIixwcm90bzohMCxmb3JjZWQ6big1MjEyOSkoImJvbGQiKX0se2JvbGQ6ZnVuY3Rpb24oKXtyZXR1cm4gbyh0aGlzLCJiIiwiIiwiIil9fSl9LDE1MzczOmZ1bmN0aW9uKHQsZSxuKXsidXNlIHN0cmljdCI7dmFyIHI9bigxNDA0NCksbz1uKDYwMTQwKS5jb2RlQXQ7cih7dGFyZ2V0OiJTdHJpbmciLHByb3RvOiEwfSx7Y29kZVBvaW50QXQ6ZnVuY3Rpb24odCl7cmV0dXJuIG8odGhpcyx0KX19KX0sOTc2ODg6ZnVuY3Rpb24odCxlLG4peyJ1c2Ugc3RyaWN0Ijt2YXIgcixvPW4oMTQwNDQpLGk9big5NzI1NykuZixhPW4oMjc4ODQpLGM9big5OTM0Nikscz1uKDcwMTMyKSx1PW4oOTM5MTUpLGw9big2NTY3MiksZj0iIi5lbmRzV2l0aCxkPU1hdGgubWluLHA9dSgiZW5kc1dpdGgiKTtvKHt0YXJnZXQ6IlN0cmluZyIscHJvdG86ITAsZm9yY2VkOiEhKGx8fHB8fChyPWkoU3RyaW5nLnByb3RvdHlwZSwiZW5kc1dpdGgiKSwhcnx8ci53cml0YWJsZSkpJiYhcH0se2VuZHNXaXRoOmZ1bmN0aW9uKHQpe3ZhciBlPVN0cmluZyhzKHRoaXMpKTtjKHQpO3ZhciBuPWFyZ3VtZW50cy5sZW5ndGg+MT9hcmd1bWVudHNbMV06dm9pZCAwLHI9YShlLmxlbmd0aCksbz12b2lkIDA9PT1uP3I6ZChhKG4pLHIpLGk9U3RyaW5nKHQpO3JldHVybiBmP2YuY2FsbChlLGksbyk6ZS5zbGljZShvLWkubGVuZ3RoLG8pPT09aX19KX0sODU3Njc6ZnVuY3Rpb24odCxlLG4peyJ1c2Ugc3RyaWN0Ijt2YXIgcj1uKDE0MDQ0KSxvPW4oMzEzNTEpO3Ioe3RhcmdldDoiU3RyaW5nIixwcm90bzohMCxmb3JjZWQ6big1MjEyOSkoImZpeGVkIil9LHtmaXhlZDpmdW5jdGlvbigpe3JldHVybiBvKHRoaXMsInR0IiwiIiwiIil9fSl9LDg0MzY6ZnVuY3Rpb24odCxlLG4peyJ1c2Ugc3RyaWN0Ijt2YXIgcj1uKDE0MDQ0KSxvPW4oMzEzNTEpO3Ioe3RhcmdldDoiU3RyaW5nIixwcm90bzohMCxmb3JjZWQ6big1MjEyOSkoImZvbnRjb2xvciIpfSx7Zm9udGNvbG9yOmZ1bmN0aW9uKHQpe3JldHVybiBvKHRoaXMsImZvbnQiLCJjb2xvciIsdCl9fSl9LDkyMTkyOmZ1bmN0aW9uKHQsZSxuKXsidXNlIHN0cmljdCI7dmFyIHI9bigxNDA0NCksbz1uKDMxMzUxKTtyKHt0YXJnZXQ6IlN0cmluZyIscHJvdG86ITAsZm9yY2VkOm4oNTIxMjkpKCJmb250c2l6ZSIpfSx7Zm9udHNpemU6ZnVuY3Rpb24odCl7cmV0dXJuIG8odGhpcywiZm9udCIsInNpemUiLHQpfX0pfSwxMDc0MzpmdW5jdGlvbih0LGUsbil7dmFyIHI9bigxNDA0NCksbz1uKDc2OTc2KSxpPVN0cmluZy5mcm9tQ2hhckNvZGUsYT1TdHJpbmcuZnJvbUNvZGVQb2ludDtyKHt0YXJnZXQ6IlN0cmluZyIsc3RhdDohMCxmb3JjZWQ6ISFhJiYxIT1hLmxlbmd0aH0se2Zyb21Db2RlUG9pbnQ6ZnVuY3Rpb24odCl7Zm9yKHZhciBlLG49W10scj1hcmd1bWVudHMubGVuZ3RoLGE9MDtyPmE7KXtpZihlPSthcmd1bWVudHNbYSsrXSxvKGUsMTExNDExMSkhPT1lKXRocm93IFJhbmdlRXJyb3IoZSsiIGlzIG5vdCBhIHZhbGlkIGNvZGUgcG9pbnQiKTtuLnB1c2goZTw2NTUzNj9pKGUpOmkoNTUyOTYrKChlLT02NTUzNik+PjEwKSxlJTEwMjQrNTYzMjApKX1yZXR1cm4gbi5qb2luKCIiKX19KX0sNzQ1NjM6ZnVuY3Rpb24odCxlLG4peyJ1c2Ugc3RyaWN0Ijt2YXIgcj1uKDE0MDQ0KSxvPW4oOTkzNDYpLGk9big3MDEzMik7cih7dGFyZ2V0OiJTdHJpbmciLHByb3RvOiEwLGZvcmNlZDohbig5MzkxNSkoImluY2x1ZGVzIil9LHtpbmNsdWRlczpmdW5jdGlvbih0KXtyZXR1cm4hIX5TdHJpbmcoaSh0aGlzKSkuaW5kZXhPZihvKHQpLGFyZ3VtZW50cy5sZW5ndGg+MT9hcmd1bWVudHNbMV06dm9pZCAwKX19KX0sMTIxNTU6ZnVuY3Rpb24odCxlLG4peyJ1c2Ugc3RyaWN0Ijt2YXIgcj1uKDE0MDQ0KSxvPW4oMzEzNTEpO3Ioe3RhcmdldDoiU3RyaW5nIixwcm90bzohMCxmb3JjZWQ6big1MjEyOSkoIml0YWxpY3MiKX0se2l0YWxpY3M6ZnVuY3Rpb24oKXtyZXR1cm4gbyh0aGlzLCJpIiwiIiwiIil9fSl9LDgyMjAxOmZ1bmN0aW9uKHQsZSxuKXsidXNlIHN0cmljdCI7dmFyIHI9big2MDE0MCkuY2hhckF0LG89big4OTgyNyksaT1uKDQ2MDYxKSxhPSJTdHJpbmcgSXRlcmF0b3IiLGM9by5zZXQscz1vLmdldHRlckZvcihhKTtpKFN0cmluZywiU3RyaW5nIiwoZnVuY3Rpb24odCl7Yyh0aGlzLHt0eXBlOmEsc3RyaW5nOlN0cmluZyh0KSxpbmRleDowfSl9KSwoZnVuY3Rpb24oKXt2YXIgdCxlPXModGhpcyksbj1lLnN0cmluZyxvPWUuaW5kZXg7cmV0dXJuIG8+PW4ubGVuZ3RoP3t2YWx1ZTp2b2lkIDAsZG9uZTohMH06KHQ9cihuLG8pLGUuaW5kZXgrPXQubGVuZ3RoLHt2YWx1ZTp0LGRvbmU6ITF9KX0pKX0sMjYwMTY6ZnVuY3Rpb24odCxlLG4peyJ1c2Ugc3RyaWN0Ijt2YXIgcj1uKDE0MDQ0KSxvPW4oMzEzNTEpO3Ioe3RhcmdldDoiU3RyaW5nIixwcm90bzohMCxmb3JjZWQ6big1MjEyOSkoImxpbmsiKX0se2xpbms6ZnVuY3Rpb24odCl7cmV0dXJuIG8odGhpcywiYSIsImhyZWYiLHQpfX0pfSw4MTI3NzpmdW5jdGlvbih0LGUsbil7InVzZSBzdHJpY3QiO3ZhciByPW4oMTQwNDQpLG89big3MTIwMSksaT1uKDcwMTMyKSxhPW4oMjc4ODQpLGM9big4NjQ3MCkscz1uKDg3NTc5KSx1PW4oMjQ1OTQpLGw9big0MzIyMyksZj1uKDI1NDE5KSxkPW4oNjY5NzEpLHA9bigzMjE4NyksaD1uKDIzNzI0KSx2PW4oMTM5NzkpLGc9big1MzE0MSkseT1uKDg5ODI3KSxtPW4oNjU2NzIpLGI9aCgibWF0Y2hBbGwiKSx4PSJSZWdFeHAgU3RyaW5nIix3PSJSZWdFeHAgU3RyaW5nIEl0ZXJhdG9yIixFPXkuc2V0LGo9eS5nZXR0ZXJGb3IodyksQz1SZWdFeHAucHJvdG90eXBlLGs9Qy5leGVjLFM9IiIubWF0Y2hBbGwsTz0hIVMmJiFwKChmdW5jdGlvbigpeyJhIi5tYXRjaEFsbCgvLi8pfSkpLEE9bygoZnVuY3Rpb24odCxlLG4scil7RSh0aGlzLHt0eXBlOncscmVnZXhwOnQsc3RyaW5nOmUsZ2xvYmFsOm4sdW5pY29kZTpyLGRvbmU6ITF9KX0pLHgsKGZ1bmN0aW9uKCl7dmFyIHQ9aih0aGlzKTtpZih0LmRvbmUpcmV0dXJue3ZhbHVlOnZvaWQgMCxkb25lOiEwfTt2YXIgZT10LnJlZ2V4cCxuPXQuc3RyaW5nLHI9ZnVuY3Rpb24odCxlKXt2YXIgbixyPXQuZXhlYztpZigiZnVuY3Rpb24iPT10eXBlb2Ygcil7aWYoIm9iamVjdCIhPXR5cGVvZihuPXIuY2FsbCh0LGUpKSl0aHJvdyBUeXBlRXJyb3IoIkluY29ycmVjdCBleGVjIHJlc3VsdCIpO3JldHVybiBufXJldHVybiBrLmNhbGwodCxlKX0oZSxuKTtyZXR1cm4gbnVsbD09PXI/e3ZhbHVlOnZvaWQgMCxkb25lOnQuZG9uZT0hMH06dC5nbG9iYWw/KCIiPT1TdHJpbmcoclswXSkmJihlLmxhc3RJbmRleD1nKG4sYShlLmxhc3RJbmRleCksdC51bmljb2RlKSkse3ZhbHVlOnIsZG9uZTohMX0pOih0LmRvbmU9ITAse3ZhbHVlOnIsZG9uZTohMX0pfSkpLEk9ZnVuY3Rpb24odCl7dmFyIGUsbixyLG8saSxjLHU9cyh0aGlzKSxsPVN0cmluZyh0KTtyZXR1cm4gZT12KHUsUmVnRXhwKSx2b2lkIDA9PT0obj11LmZsYWdzKSYmdSBpbnN0YW5jZW9mIFJlZ0V4cCYmISgiZmxhZ3MiaW4gQykmJihuPWYuY2FsbCh1KSkscj12b2lkIDA9PT1uPyIiOlN0cmluZyhuKSxvPW5ldyBlKGU9PT1SZWdFeHA/dS5zb3VyY2U6dSxyKSxpPSEhfnIuaW5kZXhPZigiZyIpLGM9ISF+ci5pbmRleE9mKCJ1Iiksby5sYXN0SW5kZXg9YSh1Lmxhc3RJbmRleCksbmV3IEEobyxsLGksYyl9O3Ioe3RhcmdldDoiU3RyaW5nIixwcm90bzohMCxmb3JjZWQ6T30se21hdGNoQWxsOmZ1bmN0aW9uKHQpe3ZhciBlLG4scixvPWkodGhpcyk7aWYobnVsbCE9dCl7aWYobCh0KSYmIX5TdHJpbmcoaSgiZmxhZ3MiaW4gQz90LmZsYWdzOmYuY2FsbCh0KSkpLmluZGV4T2YoImciKSl0aHJvdyBUeXBlRXJyb3IoImAubWF0Y2hBbGxgIGRvZXMgbm90IGFsbG93IG5vbi1nbG9iYWwgcmVnZXhlcyIpO2lmKE8pcmV0dXJuIFMuYXBwbHkobyxhcmd1bWVudHMpO2lmKHZvaWQgMD09PShuPXRbYl0pJiZtJiYiUmVnRXhwIj09dSh0KSYmKG49SSksbnVsbCE9bilyZXR1cm4gYyhuKS5jYWxsKHQsbyl9ZWxzZSBpZihPKXJldHVybiBTLmFwcGx5KG8sYXJndW1lbnRzKTtyZXR1cm4gZT1TdHJpbmcobykscj1uZXcgUmVnRXhwKHQsImciKSxtP0kuY2FsbChyLGUpOnJbYl0oZSl9fSksbXx8YiBpbiBDfHxkKEMsYixJKX0sNjUwMDM6ZnVuY3Rpb24odCxlLG4peyJ1c2Ugc3RyaWN0Ijt2YXIgcj1uKDM1ODYwKSxvPW4oODc1NzkpLGk9bigyNzg4NCksYT1uKDcwMTMyKSxjPW4oNTMxNDEpLHM9bigzNTQ1NSk7cigibWF0Y2giLDEsKGZ1bmN0aW9uKHQsZSxuKXtyZXR1cm5bZnVuY3Rpb24oZSl7dmFyIG49YSh0aGlzKSxyPW51bGw9PWU/dm9pZCAwOmVbdF07cmV0dXJuIHZvaWQgMCE9PXI/ci5jYWxsKGUsbik6bmV3IFJlZ0V4cChlKVt0XShTdHJpbmcobikpfSxmdW5jdGlvbih0KXt2YXIgcj1uKGUsdCx0aGlzKTtpZihyLmRvbmUpcmV0dXJuIHIudmFsdWU7dmFyIGE9byh0KSx1PVN0cmluZyh0aGlzKTtpZighYS5nbG9iYWwpcmV0dXJuIHMoYSx1KTt2YXIgbD1hLnVuaWNvZGU7YS5sYXN0SW5kZXg9MDtmb3IodmFyIGYsZD1bXSxwPTA7bnVsbCE9PShmPXMoYSx1KSk7KXt2YXIgaD1TdHJpbmcoZlswXSk7ZFtwXT1oLCIiPT09aCYmKGEubGFzdEluZGV4PWModSxpKGEubGFzdEluZGV4KSxsKSkscCsrfXJldHVybiAwPT09cD9udWxsOmR9XX0pKX0sNDQwMTk6ZnVuY3Rpb24odCxlLG4peyJ1c2Ugc3RyaWN0Ijt2YXIgcj1uKDE0MDQ0KSxvPW4oMjY1NzMpLmVuZDtyKHt0YXJnZXQ6IlN0cmluZyIscHJvdG86ITAsZm9yY2VkOm4oNDIxODQpfSx7cGFkRW5kOmZ1bmN0aW9uKHQpe3JldHVybiBvKHRoaXMsdCxhcmd1bWVudHMubGVuZ3RoPjE/YXJndW1lbnRzWzFdOnZvaWQgMCl9fSl9LDM4MjpmdW5jdGlvbih0LGUsbil7InVzZSBzdHJpY3QiO3ZhciByPW4oMTQwNDQpLG89bigyNjU3Mykuc3RhcnQ7cih7dGFyZ2V0OiJTdHJpbmciLHByb3RvOiEwLGZvcmNlZDpuKDQyMTg0KX0se3BhZFN0YXJ0OmZ1bmN0aW9uKHQpe3JldHVybiBvKHRoaXMsdCxhcmd1bWVudHMubGVuZ3RoPjE/YXJndW1lbnRzWzFdOnZvaWQgMCl9fSl9LDgwNTExOmZ1bmN0aW9uKHQsZSxuKXt2YXIgcj1uKDE0MDQ0KSxvPW4oOTU3MyksaT1uKDI3ODg0KTtyKHt0YXJnZXQ6IlN0cmluZyIsc3RhdDohMH0se3JhdzpmdW5jdGlvbih0KXtmb3IodmFyIGU9byh0LnJhdyksbj1pKGUubGVuZ3RoKSxyPWFyZ3VtZW50cy5sZW5ndGgsYT1bXSxjPTA7bj5jOylhLnB1c2goU3RyaW5nKGVbYysrXSkpLGM8ciYmYS5wdXNoKFN0cmluZyhhcmd1bWVudHNbY10pKTtyZXR1cm4gYS5qb2luKCIiKX19KX0sMTg4MjM6ZnVuY3Rpb24odCxlLG4pe24oMTQwNDQpKHt0YXJnZXQ6IlN0cmluZyIscHJvdG86ITB9LHtyZXBlYXQ6big2ODI1Myl9KX0sMzMzMjI6ZnVuY3Rpb24odCxlLG4peyJ1c2Ugc3RyaWN0Ijt2YXIgcj1uKDM1ODYwKSxvPW4oODc1NzkpLGk9bigxOTIwOSksYT1uKDI3ODg0KSxjPW4oNDM0MTYpLHM9big3MDEzMiksdT1uKDUzMTQxKSxsPW4oMzU0NTUpLGY9TWF0aC5tYXgsZD1NYXRoLm1pbixwPU1hdGguZmxvb3IsaD0vXCQoWyQmJ2BdfFxkXGQ/fDxbXj5dKj4pL2csdj0vXCQoWyQmJ2BdfFxkXGQ/KS9nO3IoInJlcGxhY2UiLDIsKGZ1bmN0aW9uKHQsZSxuKXtyZXR1cm5bZnVuY3Rpb24obixyKXt2YXIgbz1zKHRoaXMpLGk9bnVsbD09bj92b2lkIDA6blt0XTtyZXR1cm4gdm9pZCAwIT09aT9pLmNhbGwobixvLHIpOmUuY2FsbChTdHJpbmcobyksbixyKX0sZnVuY3Rpb24odCxpKXt2YXIgcz1uKGUsdCx0aGlzLGkpO2lmKHMuZG9uZSlyZXR1cm4gcy52YWx1ZTt2YXIgcD1vKHQpLGg9U3RyaW5nKHRoaXMpLHY9ImZ1bmN0aW9uIj09dHlwZW9mIGk7dnx8KGk9U3RyaW5nKGkpKTt2YXIgZz1wLmdsb2JhbDtpZihnKXt2YXIgeT1wLnVuaWNvZGU7cC5sYXN0SW5kZXg9MH1mb3IodmFyIG09W107Oyl7dmFyIGI9bChwLGgpO2lmKG51bGw9PT1iKWJyZWFrO2lmKG0ucHVzaChiKSwhZylicmVhazsiIj09PVN0cmluZyhiWzBdKSYmKHAubGFzdEluZGV4PXUoaCxhKHAubGFzdEluZGV4KSx5KSl9Zm9yKHZhciB4LHc9IiIsRT0wLGo9MDtqPG0ubGVuZ3RoO2orKyl7Yj1tW2pdO2Zvcih2YXIgQz1TdHJpbmcoYlswXSksaz1mKGQoYyhiLmluZGV4KSxoLmxlbmd0aCksMCksUz1bXSxPPTE7TzxiLmxlbmd0aDtPKyspUy5wdXNoKHZvaWQgMD09PSh4PWJbT10pP3g6U3RyaW5nKHgpKTt2YXIgQT1iLmdyb3VwcztpZih2KXt2YXIgST1bQ10uY29uY2F0KFMsayxoKTt2b2lkIDAhPT1BJiZJLnB1c2goQSk7dmFyIFQ9U3RyaW5nKGkuYXBwbHkodm9pZCAwLEkpKX1lbHNlIFQ9cihDLGgsayxTLEEsaSk7az49RSYmKHcrPWguc2xpY2UoRSxrKStULEU9aytDLmxlbmd0aCl9cmV0dXJuIHcraC5zbGljZShFKX1dO2Z1bmN0aW9uIHIodCxuLHIsbyxhLGMpe3ZhciBzPXIrdC5sZW5ndGgsdT1vLmxlbmd0aCxsPXY7cmV0dXJuIHZvaWQgMCE9PWEmJihhPWkoYSksbD1oKSxlLmNhbGwoYyxsLChmdW5jdGlvbihlLGkpe3ZhciBjO3N3aXRjaChpLmNoYXJBdCgwKSl7Y2FzZSIkIjpyZXR1cm4iJCI7Y2FzZSImIjpyZXR1cm4gdDtjYXNlImAiOnJldHVybiBuLnNsaWNlKDAscik7Y2FzZSInIjpyZXR1cm4gbi5zbGljZShzKTtjYXNlIjwiOmM9YVtpLnNsaWNlKDEsLTEpXTticmVhaztkZWZhdWx0OnZhciBsPStpO2lmKDA9PT1sKXJldHVybiBlO2lmKGw+dSl7dmFyIGY9cChsLzEwKTtyZXR1cm4gMD09PWY/ZTpmPD11P3ZvaWQgMD09PW9bZi0xXT9pLmNoYXJBdCgxKTpvW2YtMV0raS5jaGFyQXQoMSk6ZX1jPW9bbC0xXX1yZXR1cm4gdm9pZCAwPT09Yz8iIjpjfSkpfX0pKX0sMzMwNjU6ZnVuY3Rpb24odCxlLG4peyJ1c2Ugc3RyaWN0Ijt2YXIgcj1uKDM1ODYwKSxvPW4oODc1NzkpLGk9big3MDEzMiksYT1uKDc2NDgyKSxjPW4oMzU0NTUpO3IoInNlYXJjaCIsMSwoZnVuY3Rpb24odCxlLG4pe3JldHVybltmdW5jdGlvbihlKXt2YXIgbj1pKHRoaXMpLHI9bnVsbD09ZT92b2lkIDA6ZVt0XTtyZXR1cm4gdm9pZCAwIT09cj9yLmNhbGwoZSxuKTpuZXcgUmVnRXhwKGUpW3RdKFN0cmluZyhuKSl9LGZ1bmN0aW9uKHQpe3ZhciByPW4oZSx0LHRoaXMpO2lmKHIuZG9uZSlyZXR1cm4gci52YWx1ZTt2YXIgaT1vKHQpLHM9U3RyaW5nKHRoaXMpLHU9aS5sYXN0SW5kZXg7YSh1LDApfHwoaS5sYXN0SW5kZXg9MCk7dmFyIGw9YyhpLHMpO3JldHVybiBhKGkubGFzdEluZGV4LHUpfHwoaS5sYXN0SW5kZXg9dSksbnVsbD09PWw/LTE6bC5pbmRleH1dfSkpfSw3NDExNzpmdW5jdGlvbih0LGUsbil7InVzZSBzdHJpY3QiO3ZhciByPW4oMTQwNDQpLG89bigzMTM1MSk7cih7dGFyZ2V0OiJTdHJpbmciLHByb3RvOiEwLGZvcmNlZDpuKDUyMTI5KSgic21hbGwiKX0se3NtYWxsOmZ1bmN0aW9uKCl7cmV0dXJuIG8odGhpcywic21hbGwiLCIiLCIiKX19KX0sMTc0OTQ6ZnVuY3Rpb24odCxlLG4peyJ1c2Ugc3RyaWN0Ijt2YXIgcj1uKDM1ODYwKSxvPW4oNDMyMjMpLGk9big4NzU3OSksYT1uKDcwMTMyKSxjPW4oMTM5NzkpLHM9big1MzE0MSksdT1uKDI3ODg0KSxsPW4oMzU0NTUpLGY9bigzODU5OCksZD1uKDMyMTg3KSxwPVtdLnB1c2gsaD1NYXRoLm1pbix2PTQyOTQ5NjcyOTUsZz0hZCgoZnVuY3Rpb24oKXtyZXR1cm4hUmVnRXhwKHYsInkiKX0pKTtyKCJzcGxpdCIsMiwoZnVuY3Rpb24odCxlLG4pe3ZhciByO3JldHVybiByPSJjIj09ImFiYmMiLnNwbGl0KC8oYikqLylbMV18fDQhPSJ0ZXN0Ii5zcGxpdCgvKD86KS8sLTEpLmxlbmd0aHx8MiE9ImFiIi5zcGxpdCgvKD86YWIpKi8pLmxlbmd0aHx8NCE9Ii4iLnNwbGl0KC8oLj8pKC4/KS8pLmxlbmd0aHx8Ii4iLnNwbGl0KC8oKSgpLykubGVuZ3RoPjF8fCIiLnNwbGl0KC8uPy8pLmxlbmd0aD9mdW5jdGlvbih0LG4pe3ZhciByPVN0cmluZyhhKHRoaXMpKSxpPXZvaWQgMD09PW4/djpuPj4+MDtpZigwPT09aSlyZXR1cm5bXTtpZih2b2lkIDA9PT10KXJldHVybltyXTtpZighbyh0KSlyZXR1cm4gZS5jYWxsKHIsdCxpKTtmb3IodmFyIGMscyx1LGw9W10sZD0odC5pZ25vcmVDYXNlPyJpIjoiIikrKHQubXVsdGlsaW5lPyJtIjoiIikrKHQudW5pY29kZT8idSI6IiIpKyh0LnN0aWNreT8ieSI6IiIpLGg9MCxnPW5ldyBSZWdFeHAodC5zb3VyY2UsZCsiZyIpOyhjPWYuY2FsbChnLHIpKSYmISgocz1nLmxhc3RJbmRleCk+aCYmKGwucHVzaChyLnNsaWNlKGgsYy5pbmRleCkpLGMubGVuZ3RoPjEmJmMuaW5kZXg8ci5sZW5ndGgmJnAuYXBwbHkobCxjLnNsaWNlKDEpKSx1PWNbMF0ubGVuZ3RoLGg9cyxsLmxlbmd0aD49aSkpOylnLmxhc3RJbmRleD09PWMuaW5kZXgmJmcubGFzdEluZGV4Kys7cmV0dXJuIGg9PT1yLmxlbmd0aD8hdSYmZy50ZXN0KCIiKXx8bC5wdXNoKCIiKTpsLnB1c2goci5zbGljZShoKSksbC5sZW5ndGg+aT9sLnNsaWNlKDAsaSk6bH06IjAiLnNwbGl0KHZvaWQgMCwwKS5sZW5ndGg/ZnVuY3Rpb24odCxuKXtyZXR1cm4gdm9pZCAwPT09dCYmMD09PW4/W106ZS5jYWxsKHRoaXMsdCxuKX06ZSxbZnVuY3Rpb24oZSxuKXt2YXIgbz1hKHRoaXMpLGk9bnVsbD09ZT92b2lkIDA6ZVt0XTtyZXR1cm4gdm9pZCAwIT09aT9pLmNhbGwoZSxvLG4pOnIuY2FsbChTdHJpbmcobyksZSxuKX0sZnVuY3Rpb24odCxvKXt2YXIgYT1uKHIsdCx0aGlzLG8sciE9PWUpO2lmKGEuZG9uZSlyZXR1cm4gYS52YWx1ZTt2YXIgZj1pKHQpLGQ9U3RyaW5nKHRoaXMpLHA9YyhmLFJlZ0V4cCkseT1mLnVuaWNvZGUsbT0oZi5pZ25vcmVDYXNlPyJpIjoiIikrKGYubXVsdGlsaW5lPyJtIjoiIikrKGYudW5pY29kZT8idSI6IiIpKyhnPyJ5IjoiZyIpLGI9bmV3IHAoZz9mOiJeKD86IitmLnNvdXJjZSsiKSIsbSkseD12b2lkIDA9PT1vP3Y6bz4+PjA7aWYoMD09PXgpcmV0dXJuW107aWYoMD09PWQubGVuZ3RoKXJldHVybiBudWxsPT09bChiLGQpP1tkXTpbXTtmb3IodmFyIHc9MCxFPTAsaj1bXTtFPGQubGVuZ3RoOyl7Yi5sYXN0SW5kZXg9Zz9FOjA7dmFyIEMsaz1sKGIsZz9kOmQuc2xpY2UoRSkpO2lmKG51bGw9PT1rfHwoQz1oKHUoYi5sYXN0SW5kZXgrKGc/MDpFKSksZC5sZW5ndGgpKT09PXcpRT1zKGQsRSx5KTtlbHNle2lmKGoucHVzaChkLnNsaWNlKHcsRSkpLGoubGVuZ3RoPT09eClyZXR1cm4gajtmb3IodmFyIFM9MTtTPD1rLmxlbmd0aC0xO1MrKylpZihqLnB1c2goa1tTXSksai5sZW5ndGg9PT14KXJldHVybiBqO0U9dz1DfX1yZXR1cm4gai5wdXNoKGQuc2xpY2UodykpLGp9XX0pLCFnKX0sODAzNjM6ZnVuY3Rpb24odCxlLG4peyJ1c2Ugc3RyaWN0Ijt2YXIgcixvPW4oMTQwNDQpLGk9big5NzI1NykuZixhPW4oMjc4ODQpLGM9big5OTM0Nikscz1uKDcwMTMyKSx1PW4oOTM5MTUpLGw9big2NTY3MiksZj0iIi5zdGFydHNXaXRoLGQ9TWF0aC5taW4scD11KCJzdGFydHNXaXRoIik7byh7dGFyZ2V0OiJTdHJpbmciLHByb3RvOiEwLGZvcmNlZDohIShsfHxwfHwocj1pKFN0cmluZy5wcm90b3R5cGUsInN0YXJ0c1dpdGgiKSwhcnx8ci53cml0YWJsZSkpJiYhcH0se3N0YXJ0c1dpdGg6ZnVuY3Rpb24odCl7dmFyIGU9U3RyaW5nKHModGhpcykpO2ModCk7dmFyIG49YShkKGFyZ3VtZW50cy5sZW5ndGg+MT9hcmd1bWVudHNbMV06dm9pZCAwLGUubGVuZ3RoKSkscj1TdHJpbmcodCk7cmV0dXJuIGY/Zi5jYWxsKGUscixuKTplLnNsaWNlKG4sbityLmxlbmd0aCk9PT1yfX0pfSwyODAwMzpmdW5jdGlvbih0LGUsbil7InVzZSBzdHJpY3QiO3ZhciByPW4oMTQwNDQpLG89bigzMTM1MSk7cih7dGFyZ2V0OiJTdHJpbmciLHByb3RvOiEwLGZvcmNlZDpuKDUyMTI5KSgic3RyaWtlIil9LHtzdHJpa2U6ZnVuY3Rpb24oKXtyZXR1cm4gbyh0aGlzLCJzdHJpa2UiLCIiLCIiKX19KX0sNjc5NDE6ZnVuY3Rpb24odCxlLG4peyJ1c2Ugc3RyaWN0Ijt2YXIgcj1uKDE0MDQ0KSxvPW4oMzEzNTEpO3Ioe3RhcmdldDoiU3RyaW5nIixwcm90bzohMCxmb3JjZWQ6big1MjEyOSkoInN1YiIpfSx7c3ViOmZ1bmN0aW9uKCl7cmV0dXJuIG8odGhpcywic3ViIiwiIiwiIil9fSl9LDQ0MDUxOmZ1bmN0aW9uKHQsZSxuKXsidXNlIHN0cmljdCI7dmFyIHI9bigxNDA0NCksbz1uKDMxMzUxKTtyKHt0YXJnZXQ6IlN0cmluZyIscHJvdG86ITAsZm9yY2VkOm4oNTIxMjkpKCJzdXAiKX0se3N1cDpmdW5jdGlvbigpe3JldHVybiBvKHRoaXMsInN1cCIsIiIsIiIpfX0pfSw3NDc5NTpmdW5jdGlvbih0LGUsbil7InVzZSBzdHJpY3QiO3ZhciByPW4oMTQwNDQpLG89big4MjM1MCkuZW5kLGk9big4NDc1NCkoInRyaW1FbmQiKSxhPWk/ZnVuY3Rpb24oKXtyZXR1cm4gbyh0aGlzKX06IiIudHJpbUVuZDtyKHt0YXJnZXQ6IlN0cmluZyIscHJvdG86ITAsZm9yY2VkOml9LHt0cmltRW5kOmEsdHJpbVJpZ2h0OmF9KX0sNjkxODg6ZnVuY3Rpb24odCxlLG4peyJ1c2Ugc3RyaWN0Ijt2YXIgcj1uKDE0MDQ0KSxvPW4oODIzNTApLnN0YXJ0LGk9big4NDc1NCkoInRyaW1TdGFydCIpLGE9aT9mdW5jdGlvbigpe3JldHVybiBvKHRoaXMpfToiIi50cmltU3RhcnQ7cih7dGFyZ2V0OiJTdHJpbmciLHByb3RvOiEwLGZvcmNlZDppfSx7dHJpbVN0YXJ0OmEsdHJpbUxlZnQ6YX0pfSw0MzM5NjpmdW5jdGlvbih0LGUsbil7InVzZSBzdHJpY3QiO3ZhciByPW4oMTQwNDQpLG89big4MjM1MCkudHJpbTtyKHt0YXJnZXQ6IlN0cmluZyIscHJvdG86ITAsZm9yY2VkOm4oODQ3NTQpKCJ0cmltIil9LHt0cmltOmZ1bmN0aW9uKCl7cmV0dXJuIG8odGhpcyl9fSl9LDUxMDkwOmZ1bmN0aW9uKHQsZSxuKXtuKDkyMjc1KSgiYXN5bmNJdGVyYXRvciIpfSwyNDc4NTpmdW5jdGlvbih0LGUsbil7InVzZSBzdHJpY3QiO3ZhciByPW4oMTQwNDQpLG89big2MjU1NiksaT1uKDg5NTU4KSxhPW4oNzYyOTgpLGM9bigxMDU5Mikscz1uKDM3NjIwKS5mLHU9big5OTYyNSksbD1pLlN5bWJvbDtpZihvJiYiZnVuY3Rpb24iPT10eXBlb2YgbCYmKCEoImRlc2NyaXB0aW9uImluIGwucHJvdG90eXBlKXx8dm9pZCAwIT09bCgpLmRlc2NyaXB0aW9uKSl7dmFyIGY9e30sZD1mdW5jdGlvbigpe3ZhciB0PWFyZ3VtZW50cy5sZW5ndGg8MXx8dm9pZCAwPT09YXJndW1lbnRzWzBdP3ZvaWQgMDpTdHJpbmcoYXJndW1lbnRzWzBdKSxlPXRoaXMgaW5zdGFuY2VvZiBkP25ldyBsKHQpOnZvaWQgMD09PXQ/bCgpOmwodCk7cmV0dXJuIiI9PT10JiYoZltlXT0hMCksZX07dShkLGwpO3ZhciBwPWQucHJvdG90eXBlPWwucHJvdG90eXBlO3AuY29uc3RydWN0b3I9ZDt2YXIgaD1wLnRvU3RyaW5nLHY9IlN5bWJvbCh0ZXN0KSI9PVN0cmluZyhsKCJ0ZXN0IikpLGc9L15TeW1ib2xcKCguKilcKVteKV0rJC87cyhwLCJkZXNjcmlwdGlvbiIse2NvbmZpZ3VyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXt2YXIgdD1jKHRoaXMpP3RoaXMudmFsdWVPZigpOnRoaXMsZT1oLmNhbGwodCk7aWYoYShmLHQpKXJldHVybiIiO3ZhciBuPXY/ZS5zbGljZSg3LC0xKTplLnJlcGxhY2UoZywiJDEiKTtyZXR1cm4iIj09PW4/dm9pZCAwOm59fSkscih7Z2xvYmFsOiEwLGZvcmNlZDohMH0se1N5bWJvbDpkfSl9fSw4OTE3OmZ1bmN0aW9uKHQsZSxuKXtuKDkyMjc1KSgiaGFzSW5zdGFuY2UiKX0sNTQ3ODY6ZnVuY3Rpb24odCxlLG4pe24oOTIyNzUpKCJpc0NvbmNhdFNwcmVhZGFibGUiKX0sMTI4MTY6ZnVuY3Rpb24odCxlLG4pe24oOTIyNzUpKCJpdGVyYXRvciIpfSw2NTY3OTpmdW5jdGlvbih0LGUsbil7InVzZSBzdHJpY3QiO3ZhciByPW4oMTQwNDQpLG89big4OTU1OCksaT1uKDc3MDEpLGE9big2NTY3MiksYz1uKDYyNTU2KSxzPW4oOTAxNCksdT1uKDE2NDEwKSxsPW4oMzIxODcpLGY9big3NjI5OCksZD1uKDYxOTkpLHA9bigxMDU5MiksaD1uKDg3NTc5KSx2PW4oMTkyMDkpLGc9big5NTczKSx5PW4oNTM0OTgpLG09bigxNDIwOSksYj1uKDUwODY4KSx4PW4oMjU1MDcpLHc9bigxMzMzNCksRT1uKDI2OTM3KSxqPW4oNTY5OTEpLEM9big5NzI1Nyksaz1uKDM3NjIwKSxTPW4oNDE2MjgpLE89big2Njk3MSksQT1uKDkyOTEzKSxJPW4oNjIwNTQpLFQ9big4MzE5NyksXz1uKDIzMDcwKSxNPW4oNjcyOSksTD1uKDIzNzI0KSxSPW4oNzM5MTYpLFA9big5MjI3NSksTj1uKDUxMTI4KSxGPW4oODk4MjcpLEQ9bigzMDAyNSkuZm9yRWFjaCxVPVQoImhpZGRlbiIpLEI9IlN5bWJvbCIsej1MKCJ0b1ByaW1pdGl2ZSIpLEg9Ri5zZXQsVj1GLmdldHRlckZvcihCKSxxPU9iamVjdC5wcm90b3R5cGUsVz1vLlN5bWJvbCxHPWkoIkpTT04iLCJzdHJpbmdpZnkiKSxaPUMuZixZPWsuZiwkPUUuZixLPVMuZixKPUkoInN5bWJvbHMiKSxYPUkoIm9wLXN5bWJvbHMiKSxRPUkoInN0cmluZy10by1zeW1ib2wtcmVnaXN0cnkiKSx0dD1JKCJzeW1ib2wtdG8tc3RyaW5nLXJlZ2lzdHJ5IiksZXQ9SSgid2tzIiksbnQ9by5RT2JqZWN0LHJ0PSFudHx8IW50LnByb3RvdHlwZXx8IW50LnByb3RvdHlwZS5maW5kQ2hpbGQsb3Q9YyYmbCgoZnVuY3Rpb24oKXtyZXR1cm4gNyE9YihZKHt9LCJhIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIFkodGhpcywiYSIse3ZhbHVlOjd9KS5hfX0pKS5hfSkpP2Z1bmN0aW9uKHQsZSxuKXt2YXIgcj1aKHEsZSk7ciYmZGVsZXRlIHFbZV0sWSh0LGUsbiksciYmdCE9PXEmJlkocSxlLHIpfTpZLGl0PWZ1bmN0aW9uKHQsZSl7dmFyIG49Slt0XT1iKFcucHJvdG90eXBlKTtyZXR1cm4gSChuLHt0eXBlOkIsdGFnOnQsZGVzY3JpcHRpb246ZX0pLGN8fChuLmRlc2NyaXB0aW9uPWUpLG59LGF0PXMmJiJzeW1ib2wiPT10eXBlb2YgVy5pdGVyYXRvcj9mdW5jdGlvbih0KXtyZXR1cm4ic3ltYm9sIj09dHlwZW9mIHR9OmZ1bmN0aW9uKHQpe3JldHVybiBPYmplY3QodClpbnN0YW5jZW9mIFd9LGN0PWZ1bmN0aW9uKHQsZSxuKXt0PT09cSYmY3QoWCxlLG4pLGgodCk7dmFyIHI9eShlLCEwKTtyZXR1cm4gaChuKSxmKEoscik/KG4uZW51bWVyYWJsZT8oZih0LFUpJiZ0W1VdW3JdJiYodFtVXVtyXT0hMSksbj1iKG4se2VudW1lcmFibGU6bSgwLCExKX0pKTooZih0LFUpfHxZKHQsVSxtKDEse30pKSx0W1VdW3JdPSEwKSxvdCh0LHIsbikpOlkodCxyLG4pfSxzdD1mdW5jdGlvbih0LGUpe2godCk7dmFyIG49ZyhlKSxyPXgobikuY29uY2F0KGR0KG4pKTtyZXR1cm4gRChyLChmdW5jdGlvbihlKXtjJiYhdXQuY2FsbChuLGUpfHxjdCh0LGUsbltlXSl9KSksdH0sdXQ9ZnVuY3Rpb24odCl7dmFyIGU9eSh0LCEwKSxuPUsuY2FsbCh0aGlzLGUpO3JldHVybiEodGhpcz09PXEmJmYoSixlKSYmIWYoWCxlKSkmJighKG58fCFmKHRoaXMsZSl8fCFmKEosZSl8fGYodGhpcyxVKSYmdGhpc1tVXVtlXSl8fG4pfSxsdD1mdW5jdGlvbih0LGUpe3ZhciBuPWcodCkscj15KGUsITApO2lmKG4hPT1xfHwhZihKLHIpfHxmKFgscikpe3ZhciBvPVoobixyKTtyZXR1cm4hb3x8IWYoSixyKXx8ZihuLFUpJiZuW1VdW3JdfHwoby5lbnVtZXJhYmxlPSEwKSxvfX0sZnQ9ZnVuY3Rpb24odCl7dmFyIGU9JChnKHQpKSxuPVtdO3JldHVybiBEKGUsKGZ1bmN0aW9uKHQpe2YoSix0KXx8ZihfLHQpfHxuLnB1c2godCl9KSksbn0sZHQ9ZnVuY3Rpb24odCl7dmFyIGU9dD09PXEsbj0kKGU/WDpnKHQpKSxyPVtdO3JldHVybiBEKG4sKGZ1bmN0aW9uKHQpeyFmKEosdCl8fGUmJiFmKHEsdCl8fHIucHVzaChKW3RdKX0pKSxyfTsoc3x8KFc9ZnVuY3Rpb24oKXtpZih0aGlzIGluc3RhbmNlb2YgVyl0aHJvdyBUeXBlRXJyb3IoIlN5bWJvbCBpcyBub3QgYSBjb25zdHJ1Y3RvciIpO3ZhciB0PWFyZ3VtZW50cy5sZW5ndGgmJnZvaWQgMCE9PWFyZ3VtZW50c1swXT9TdHJpbmcoYXJndW1lbnRzWzBdKTp2b2lkIDAsZT1NKHQpLG49ZnVuY3Rpb24odCl7dGhpcz09PXEmJm4uY2FsbChYLHQpLGYodGhpcyxVKSYmZih0aGlzW1VdLGUpJiYodGhpc1tVXVtlXT0hMSksb3QodGhpcyxlLG0oMSx0KSl9O3JldHVybiBjJiZydCYmb3QocSxlLHtjb25maWd1cmFibGU6ITAsc2V0Om59KSxpdChlLHQpfSxBKFcucHJvdG90eXBlLCJ0b1N0cmluZyIsKGZ1bmN0aW9uKCl7cmV0dXJuIFYodGhpcykudGFnfSkpLFMuZj11dCxrLmY9Y3QsQy5mPWx0LHcuZj1FLmY9ZnQsai5mPWR0LGMmJihZKFcucHJvdG90eXBlLCJkZXNjcmlwdGlvbiIse2NvbmZpZ3VyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gVih0aGlzKS5kZXNjcmlwdGlvbn19KSxhfHxBKHEsInByb3BlcnR5SXNFbnVtZXJhYmxlIix1dCx7dW5zYWZlOiEwfSkpKSx1fHwoUi5mPWZ1bmN0aW9uKHQpe3JldHVybiBpdChMKHQpLHQpfSkscih7Z2xvYmFsOiEwLHdyYXA6ITAsZm9yY2VkOiFzLHNoYW06IXN9LHtTeW1ib2w6V30pLEQoeChldCksKGZ1bmN0aW9uKHQpe1AodCl9KSkscih7dGFyZ2V0OkIsc3RhdDohMCxmb3JjZWQ6IXN9LHtmb3I6ZnVuY3Rpb24odCl7dmFyIGU9U3RyaW5nKHQpO2lmKGYoUSxlKSlyZXR1cm4gUVtlXTt2YXIgbj1XKGUpO3JldHVybiBRW2VdPW4sdHRbbl09ZSxufSxrZXlGb3I6ZnVuY3Rpb24odCl7aWYoIWF0KHQpKXRocm93IFR5cGVFcnJvcih0KyIgaXMgbm90IGEgc3ltYm9sIik7aWYoZih0dCx0KSlyZXR1cm4gdHRbdF19LHVzZVNldHRlcjpmdW5jdGlvbigpe3J0PSEwfSx1c2VTaW1wbGU6ZnVuY3Rpb24oKXtydD0hMX19KSxyKHt0YXJnZXQ6Ik9iamVjdCIsc3RhdDohMCxmb3JjZWQ6IXMsc2hhbTohY30se2NyZWF0ZTpmdW5jdGlvbih0LGUpe3JldHVybiB2b2lkIDA9PT1lP2IodCk6c3QoYih0KSxlKX0sZGVmaW5lUHJvcGVydHk6Y3QsZGVmaW5lUHJvcGVydGllczpzdCxnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3I6bHR9KSxyKHt0YXJnZXQ6Ik9iamVjdCIsc3RhdDohMCxmb3JjZWQ6IXN9LHtnZXRPd25Qcm9wZXJ0eU5hbWVzOmZ0LGdldE93blByb3BlcnR5U3ltYm9sczpkdH0pLHIoe3RhcmdldDoiT2JqZWN0IixzdGF0OiEwLGZvcmNlZDpsKChmdW5jdGlvbigpe2ouZigxKX0pKX0se2dldE93blByb3BlcnR5U3ltYm9sczpmdW5jdGlvbih0KXtyZXR1cm4gai5mKHYodCkpfX0pLEcpJiZyKHt0YXJnZXQ6IkpTT04iLHN0YXQ6ITAsZm9yY2VkOiFzfHxsKChmdW5jdGlvbigpe3ZhciB0PVcoKTtyZXR1cm4iW251bGxdIiE9RyhbdF0pfHwie30iIT1HKHthOnR9KXx8Int9IiE9RyhPYmplY3QodCkpfSkpfSx7c3RyaW5naWZ5OmZ1bmN0aW9uKHQsZSxuKXtmb3IodmFyIHIsbz1bdF0saT0xO2FyZ3VtZW50cy5sZW5ndGg+aTspby5wdXNoKGFyZ3VtZW50c1tpKytdKTtpZihyPWUsKHAoZSl8fHZvaWQgMCE9PXQpJiYhYXQodCkpcmV0dXJuIGQoZSl8fChlPWZ1bmN0aW9uKHQsZSl7aWYoImZ1bmN0aW9uIj09dHlwZW9mIHImJihlPXIuY2FsbCh0aGlzLHQsZSkpLCFhdChlKSlyZXR1cm4gZX0pLG9bMV09ZSxHLmFwcGx5KG51bGwsbyl9fSk7Vy5wcm90b3R5cGVbel18fE8oVy5wcm90b3R5cGUseixXLnByb3RvdHlwZS52YWx1ZU9mKSxOKFcsQiksX1tVXT0hMH0sOTgzMDY6ZnVuY3Rpb24odCxlLG4pe24oOTIyNzUpKCJtYXRjaEFsbCIpfSw2MTkyNDpmdW5jdGlvbih0LGUsbil7big5MjI3NSkoIm1hdGNoIil9LDEyMDI1OmZ1bmN0aW9uKHQsZSxuKXtuKDkyMjc1KSgicmVwbGFjZSIpfSwyODMzOmZ1bmN0aW9uKHQsZSxuKXtuKDkyMjc1KSgic2VhcmNoIil9LDk2NDUzOmZ1bmN0aW9uKHQsZSxuKXtuKDkyMjc1KSgic3BlY2llcyIpfSw3MDg2MzpmdW5jdGlvbih0LGUsbil7big5MjI3NSkoInNwbGl0Iil9LDI0ODAyOmZ1bmN0aW9uKHQsZSxuKXtuKDkyMjc1KSgidG9QcmltaXRpdmUiKX0sMTgyNzM6ZnVuY3Rpb24odCxlLG4pe24oOTIyNzUpKCJ0b1N0cmluZ1RhZyIpfSw0MjQxMTpmdW5jdGlvbih0LGUsbil7big5MjI3NSkoInVuc2NvcGFibGVzIil9LDc0MjMwOmZ1bmN0aW9uKHQsZSxuKXsidXNlIHN0cmljdCI7dmFyIHI9big3MzA3NCksbz1uKDk5NDMxKSxpPXIuYVR5cGVkQXJyYXk7KDAsci5leHBvcnRUeXBlZEFycmF5TWV0aG9kKSgiY29weVdpdGhpbiIsKGZ1bmN0aW9uKHQsZSl7cmV0dXJuIG8uY2FsbChpKHRoaXMpLHQsZSxhcmd1bWVudHMubGVuZ3RoPjI/YXJndW1lbnRzWzJdOnZvaWQgMCl9KSl9LDE4NTA2OmZ1bmN0aW9uKHQsZSxuKXsidXNlIHN0cmljdCI7dmFyIHI9big3MzA3NCksbz1uKDMwMDI1KS5ldmVyeSxpPXIuYVR5cGVkQXJyYXk7KDAsci5leHBvcnRUeXBlZEFycmF5TWV0aG9kKSgiZXZlcnkiLChmdW5jdGlvbih0KXtyZXR1cm4gbyhpKHRoaXMpLHQsYXJndW1lbnRzLmxlbmd0aD4xP2FyZ3VtZW50c1sxXTp2b2lkIDApfSkpfSwyMDI0MjpmdW5jdGlvbih0LGUsbil7InVzZSBzdHJpY3QiO3ZhciByPW4oNzMwNzQpLG89big2NTg5NSksaT1yLmFUeXBlZEFycmF5OygwLHIuZXhwb3J0VHlwZWRBcnJheU1ldGhvZCkoImZpbGwiLChmdW5jdGlvbih0KXtyZXR1cm4gby5hcHBseShpKHRoaXMpLGFyZ3VtZW50cyl9KSl9LDI4MTU1OmZ1bmN0aW9uKHQsZSxuKXsidXNlIHN0cmljdCI7dmFyIHI9big3MzA3NCksbz1uKDMwMDI1KS5maWx0ZXIsaT1uKDEzOTc5KSxhPXIuYVR5cGVkQXJyYXksYz1yLmFUeXBlZEFycmF5Q29uc3RydWN0b3I7KDAsci5leHBvcnRUeXBlZEFycmF5TWV0aG9kKSgiZmlsdGVyIiwoZnVuY3Rpb24odCl7Zm9yKHZhciBlPW8oYSh0aGlzKSx0LGFyZ3VtZW50cy5sZW5ndGg+MT9hcmd1bWVudHNbMV06dm9pZCAwKSxuPWkodGhpcyx0aGlzLmNvbnN0cnVjdG9yKSxyPTAscz1lLmxlbmd0aCx1PW5ldyhjKG4pKShzKTtzPnI7KXVbcl09ZVtyKytdO3JldHVybiB1fSkpfSw3NjQ0MjpmdW5jdGlvbih0LGUsbil7InVzZSBzdHJpY3QiO3ZhciByPW4oNzMwNzQpLG89bigzMDAyNSkuZmluZEluZGV4LGk9ci5hVHlwZWRBcnJheTsoMCxyLmV4cG9ydFR5cGVkQXJyYXlNZXRob2QpKCJmaW5kSW5kZXgiLChmdW5jdGlvbih0KXtyZXR1cm4gbyhpKHRoaXMpLHQsYXJndW1lbnRzLmxlbmd0aD4xP2FyZ3VtZW50c1sxXTp2b2lkIDApfSkpfSwzMzkwMTpmdW5jdGlvbih0LGUsbil7InVzZSBzdHJpY3QiO3ZhciByPW4oNzMwNzQpLG89bigzMDAyNSkuZmluZCxpPXIuYVR5cGVkQXJyYXk7KDAsci5leHBvcnRUeXBlZEFycmF5TWV0aG9kKSgiZmluZCIsKGZ1bmN0aW9uKHQpe3JldHVybiBvKGkodGhpcyksdCxhcmd1bWVudHMubGVuZ3RoPjE/YXJndW1lbnRzWzFdOnZvaWQgMCl9KSl9LDI2ODA6ZnVuY3Rpb24odCxlLG4pe24oOTMwMTcpKCJGbG9hdDMyIiwoZnVuY3Rpb24odCl7cmV0dXJuIGZ1bmN0aW9uKGUsbixyKXtyZXR1cm4gdCh0aGlzLGUsbixyKX19KSl9LDM4MjgwOmZ1bmN0aW9uKHQsZSxuKXtuKDkzMDE3KSgiRmxvYXQ2NCIsKGZ1bmN0aW9uKHQpe3JldHVybiBmdW5jdGlvbihlLG4scil7cmV0dXJuIHQodGhpcyxlLG4scil9fSkpfSw4ODYzNjpmdW5jdGlvbih0LGUsbil7InVzZSBzdHJpY3QiO3ZhciByPW4oNzMwNzQpLG89bigzMDAyNSkuZm9yRWFjaCxpPXIuYVR5cGVkQXJyYXk7KDAsci5leHBvcnRUeXBlZEFycmF5TWV0aG9kKSgiZm9yRWFjaCIsKGZ1bmN0aW9uKHQpe28oaSh0aGlzKSx0LGFyZ3VtZW50cy5sZW5ndGg+MT9hcmd1bWVudHNbMV06dm9pZCAwKX0pKX0sMTg1NTk6ZnVuY3Rpb24odCxlLG4peyJ1c2Ugc3RyaWN0Ijt2YXIgcj1uKDM1NjI3KTsoMCxuKDczMDc0KS5leHBvcnRUeXBlZEFycmF5U3RhdGljTWV0aG9kKSgiZnJvbSIsbigyMDQ1NSkscil9LDgxNDYzOmZ1bmN0aW9uKHQsZSxuKXsidXNlIHN0cmljdCI7dmFyIHI9big3MzA3NCksbz1uKDg1ODAzKS5pbmNsdWRlcyxpPXIuYVR5cGVkQXJyYXk7KDAsci5leHBvcnRUeXBlZEFycmF5TWV0aG9kKSgiaW5jbHVkZXMiLChmdW5jdGlvbih0KXtyZXR1cm4gbyhpKHRoaXMpLHQsYXJndW1lbnRzLmxlbmd0aD4xP2FyZ3VtZW50c1sxXTp2b2lkIDApfSkpfSw5NTE2MzpmdW5jdGlvbih0LGUsbil7InVzZSBzdHJpY3QiO3ZhciByPW4oNzMwNzQpLG89big4NTgwMykuaW5kZXhPZixpPXIuYVR5cGVkQXJyYXk7KDAsci5leHBvcnRUeXBlZEFycmF5TWV0aG9kKSgiaW5kZXhPZiIsKGZ1bmN0aW9uKHQpe3JldHVybiBvKGkodGhpcyksdCxhcmd1bWVudHMubGVuZ3RoPjE/YXJndW1lbnRzWzFdOnZvaWQgMCl9KSl9LDI0NDk4OmZ1bmN0aW9uKHQsZSxuKXtuKDkzMDE3KSgiSW50MTYiLChmdW5jdGlvbih0KXtyZXR1cm4gZnVuY3Rpb24oZSxuLHIpe3JldHVybiB0KHRoaXMsZSxuLHIpfX0pKX0sMTcxNTI6ZnVuY3Rpb24odCxlLG4pe24oOTMwMTcpKCJJbnQzMiIsKGZ1bmN0aW9uKHQpe3JldHVybiBmdW5jdGlvbihlLG4scil7cmV0dXJuIHQodGhpcyxlLG4scil9fSkpfSw3MDM3MzpmdW5jdGlvbih0LGUsbil7big5MzAxNykoIkludDgiLChmdW5jdGlvbih0KXtyZXR1cm4gZnVuY3Rpb24oZSxuLHIpe3JldHVybiB0KHRoaXMsZSxuLHIpfX0pKX0sODM2NzM6ZnVuY3Rpb24odCxlLG4peyJ1c2Ugc3RyaWN0Ijt2YXIgcj1uKDg5NTU4KSxvPW4oNzMwNzQpLGk9big1MDA2MyksYT1uKDIzNzI0KSgiaXRlcmF0b3IiKSxjPXIuVWludDhBcnJheSxzPWkudmFsdWVzLHU9aS5rZXlzLGw9aS5lbnRyaWVzLGY9by5hVHlwZWRBcnJheSxkPW8uZXhwb3J0VHlwZWRBcnJheU1ldGhvZCxwPWMmJmMucHJvdG90eXBlW2FdLGg9ISFwJiYoInZhbHVlcyI9PXAubmFtZXx8bnVsbD09cC5uYW1lKSx2PWZ1bmN0aW9uKCl7cmV0dXJuIHMuY2FsbChmKHRoaXMpKX07ZCgiZW50cmllcyIsKGZ1bmN0aW9uKCl7cmV0dXJuIGwuY2FsbChmKHRoaXMpKX0pKSxkKCJrZXlzIiwoZnVuY3Rpb24oKXtyZXR1cm4gdS5jYWxsKGYodGhpcykpfSkpLGQoInZhbHVlcyIsdiwhaCksZChhLHYsIWgpfSwyMzU2ODpmdW5jdGlvbih0LGUsbil7InVzZSBzdHJpY3QiO3ZhciByPW4oNzMwNzQpLG89ci5hVHlwZWRBcnJheSxpPXIuZXhwb3J0VHlwZWRBcnJheU1ldGhvZCxhPVtdLmpvaW47aSgiam9pbiIsKGZ1bmN0aW9uKHQpe3JldHVybiBhLmFwcGx5KG8odGhpcyksYXJndW1lbnRzKX0pKX0sMjcyOTQ6ZnVuY3Rpb24odCxlLG4peyJ1c2Ugc3RyaWN0Ijt2YXIgcj1uKDczMDc0KSxvPW4oNDkyNDkpLGk9ci5hVHlwZWRBcnJheTsoMCxyLmV4cG9ydFR5cGVkQXJyYXlNZXRob2QpKCJsYXN0SW5kZXhPZiIsKGZ1bmN0aW9uKHQpe3JldHVybiBvLmFwcGx5KGkodGhpcyksYXJndW1lbnRzKX0pKX0sMjQ0NTc6ZnVuY3Rpb24odCxlLG4peyJ1c2Ugc3RyaWN0Ijt2YXIgcj1uKDczMDc0KSxvPW4oMzAwMjUpLm1hcCxpPW4oMTM5NzkpLGE9ci5hVHlwZWRBcnJheSxjPXIuYVR5cGVkQXJyYXlDb25zdHJ1Y3RvcjsoMCxyLmV4cG9ydFR5cGVkQXJyYXlNZXRob2QpKCJtYXAiLChmdW5jdGlvbih0KXtyZXR1cm4gbyhhKHRoaXMpLHQsYXJndW1lbnRzLmxlbmd0aD4xP2FyZ3VtZW50c1sxXTp2b2lkIDAsKGZ1bmN0aW9uKHQsZSl7cmV0dXJuIG5ldyhjKGkodCx0LmNvbnN0cnVjdG9yKSkpKGUpfSkpfSkpfSw1MDQ4MjpmdW5jdGlvbih0LGUsbil7InVzZSBzdHJpY3QiO3ZhciByPW4oNzMwNzQpLG89bigzNTYyNyksaT1yLmFUeXBlZEFycmF5Q29uc3RydWN0b3I7KDAsci5leHBvcnRUeXBlZEFycmF5U3RhdGljTWV0aG9kKSgib2YiLChmdW5jdGlvbigpe2Zvcih2YXIgdD0wLGU9YXJndW1lbnRzLmxlbmd0aCxuPW5ldyhpKHRoaXMpKShlKTtlPnQ7KW5bdF09YXJndW1lbnRzW3QrK107cmV0dXJuIG59KSxvKX0sNzU0OTk6ZnVuY3Rpb24odCxlLG4peyJ1c2Ugc3RyaWN0Ijt2YXIgcj1uKDczMDc0KSxvPW4oMTIzNjYpLnJpZ2h0LGk9ci5hVHlwZWRBcnJheTsoMCxyLmV4cG9ydFR5cGVkQXJyYXlNZXRob2QpKCJyZWR1Y2VSaWdodCIsKGZ1bmN0aW9uKHQpe3JldHVybiBvKGkodGhpcyksdCxhcmd1bWVudHMubGVuZ3RoLGFyZ3VtZW50cy5sZW5ndGg+MT9hcmd1bWVudHNbMV06dm9pZCAwKX0pKX0sMzkzMjpmdW5jdGlvbih0LGUsbil7InVzZSBzdHJpY3QiO3ZhciByPW4oNzMwNzQpLG89bigxMjM2NikubGVmdCxpPXIuYVR5cGVkQXJyYXk7KDAsci5leHBvcnRUeXBlZEFycmF5TWV0aG9kKSgicmVkdWNlIiwoZnVuY3Rpb24odCl7cmV0dXJuIG8oaSh0aGlzKSx0LGFyZ3VtZW50cy5sZW5ndGgsYXJndW1lbnRzLmxlbmd0aD4xP2FyZ3VtZW50c1sxXTp2b2lkIDApfSkpfSw4NzU2NDpmdW5jdGlvbih0LGUsbil7InVzZSBzdHJpY3QiO3ZhciByPW4oNzMwNzQpLG89ci5hVHlwZWRBcnJheSxpPXIuZXhwb3J0VHlwZWRBcnJheU1ldGhvZCxhPU1hdGguZmxvb3I7aSgicmV2ZXJzZSIsKGZ1bmN0aW9uKCl7Zm9yKHZhciB0LGU9dGhpcyxuPW8oZSkubGVuZ3RoLHI9YShuLzIpLGk9MDtpPHI7KXQ9ZVtpXSxlW2krK109ZVstLW5dLGVbbl09dDtyZXR1cm4gZX0pKX0sODQ1MDpmdW5jdGlvbih0LGUsbil7InVzZSBzdHJpY3QiO3ZhciByPW4oNzMwNzQpLG89bigyNzg4NCksaT1uKDYwNTU4KSxhPW4oMTkyMDkpLGM9bigzMjE4Nykscz1yLmFUeXBlZEFycmF5OygwLHIuZXhwb3J0VHlwZWRBcnJheU1ldGhvZCkoInNldCIsKGZ1bmN0aW9uKHQpe3ModGhpcyk7dmFyIGU9aShhcmd1bWVudHMubGVuZ3RoPjE/YXJndW1lbnRzWzFdOnZvaWQgMCwxKSxuPXRoaXMubGVuZ3RoLHI9YSh0KSxjPW8oci5sZW5ndGgpLHU9MDtpZihjK2U+bil0aHJvdyBSYW5nZUVycm9yKCJXcm9uZyBsZW5ndGgiKTtmb3IoO3U8YzspdGhpc1tlK3VdPXJbdSsrXX0pLGMoKGZ1bmN0aW9uKCl7bmV3IEludDhBcnJheSgxKS5zZXQoe30pfSkpKX0sMTc2MDU6ZnVuY3Rpb24odCxlLG4peyJ1c2Ugc3RyaWN0Ijt2YXIgcj1uKDczMDc0KSxvPW4oMTM5NzkpLGk9bigzMjE4NyksYT1yLmFUeXBlZEFycmF5LGM9ci5hVHlwZWRBcnJheUNvbnN0cnVjdG9yLHM9ci5leHBvcnRUeXBlZEFycmF5TWV0aG9kLHU9W10uc2xpY2U7cygic2xpY2UiLChmdW5jdGlvbih0LGUpe2Zvcih2YXIgbj11LmNhbGwoYSh0aGlzKSx0LGUpLHI9byh0aGlzLHRoaXMuY29uc3RydWN0b3IpLGk9MCxzPW4ubGVuZ3RoLGw9bmV3KGMocikpKHMpO3M+aTspbFtpXT1uW2krK107cmV0dXJuIGx9KSxpKChmdW5jdGlvbigpe25ldyBJbnQ4QXJyYXkoMSkuc2xpY2UoKX0pKSl9LDczNTYyOmZ1bmN0aW9uKHQsZSxuKXsidXNlIHN0cmljdCI7dmFyIHI9big3MzA3NCksbz1uKDMwMDI1KS5zb21lLGk9ci5hVHlwZWRBcnJheTsoMCxyLmV4cG9ydFR5cGVkQXJyYXlNZXRob2QpKCJzb21lIiwoZnVuY3Rpb24odCl7cmV0dXJuIG8oaSh0aGlzKSx0LGFyZ3VtZW50cy5sZW5ndGg+MT9hcmd1bWVudHNbMV06dm9pZCAwKX0pKX0sMTE4Nzg6ZnVuY3Rpb24odCxlLG4peyJ1c2Ugc3RyaWN0Ijt2YXIgcj1uKDczMDc0KSxvPXIuYVR5cGVkQXJyYXksaT1yLmV4cG9ydFR5cGVkQXJyYXlNZXRob2QsYT1bXS5zb3J0O2koInNvcnQiLChmdW5jdGlvbih0KXtyZXR1cm4gYS5jYWxsKG8odGhpcyksdCl9KSl9LDYwOTI5OmZ1bmN0aW9uKHQsZSxuKXsidXNlIHN0cmljdCI7dmFyIHI9big3MzA3NCksbz1uKDI3ODg0KSxpPW4oNzY5NzYpLGE9bigxMzk3OSksYz1yLmFUeXBlZEFycmF5OygwLHIuZXhwb3J0VHlwZWRBcnJheU1ldGhvZCkoInN1YmFycmF5IiwoZnVuY3Rpb24odCxlKXt2YXIgbj1jKHRoaXMpLHI9bi5sZW5ndGgscz1pKHQscik7cmV0dXJuIG5ldyhhKG4sbi5jb25zdHJ1Y3RvcikpKG4uYnVmZmVyLG4uYnl0ZU9mZnNldCtzKm4uQllURVNfUEVSX0VMRU1FTlQsbygodm9pZCAwPT09ZT9yOmkoZSxyKSktcykpfSkpfSw0Mzk1MTpmdW5jdGlvbih0LGUsbil7InVzZSBzdHJpY3QiO3ZhciByPW4oODk1NTgpLG89big3MzA3NCksaT1uKDMyMTg3KSxhPXIuSW50OEFycmF5LGM9by5hVHlwZWRBcnJheSxzPW8uZXhwb3J0VHlwZWRBcnJheU1ldGhvZCx1PVtdLnRvTG9jYWxlU3RyaW5nLGw9W10uc2xpY2UsZj0hIWEmJmkoKGZ1bmN0aW9uKCl7dS5jYWxsKG5ldyBhKDEpKX0pKTtzKCJ0b0xvY2FsZVN0cmluZyIsKGZ1bmN0aW9uKCl7cmV0dXJuIHUuYXBwbHkoZj9sLmNhbGwoYyh0aGlzKSk6Yyh0aGlzKSxhcmd1bWVudHMpfSksaSgoZnVuY3Rpb24oKXtyZXR1cm5bMSwyXS50b0xvY2FsZVN0cmluZygpIT1uZXcgYShbMSwyXSkudG9Mb2NhbGVTdHJpbmcoKX0pKXx8IWkoKGZ1bmN0aW9uKCl7YS5wcm90b3R5cGUudG9Mb2NhbGVTdHJpbmcuY2FsbChbMSwyXSl9KSkpfSw5MTM0NzpmdW5jdGlvbih0LGUsbil7InVzZSBzdHJpY3QiO3ZhciByPW4oNzMwNzQpLmV4cG9ydFR5cGVkQXJyYXlNZXRob2Qsbz1uKDMyMTg3KSxpPW4oODk1NTgpLlVpbnQ4QXJyYXksYT1pJiZpLnByb3RvdHlwZXx8e30sYz1bXS50b1N0cmluZyxzPVtdLmpvaW47bygoZnVuY3Rpb24oKXtjLmNhbGwoe30pfSkpJiYoYz1mdW5jdGlvbigpe3JldHVybiBzLmNhbGwodGhpcyl9KTt2YXIgdT1hLnRvU3RyaW5nIT1jO3IoInRvU3RyaW5nIixjLHUpfSwxNjk3ODpmdW5jdGlvbih0LGUsbil7big5MzAxNykoIlVpbnQxNiIsKGZ1bmN0aW9uKHQpe3JldHVybiBmdW5jdGlvbihlLG4scil7cmV0dXJuIHQodGhpcyxlLG4scil9fSkpfSwzNzk4NzpmdW5jdGlvbih0LGUsbil7big5MzAxNykoIlVpbnQzMiIsKGZ1bmN0aW9uKHQpe3JldHVybiBmdW5jdGlvbihlLG4scil7cmV0dXJuIHQodGhpcyxlLG4scil9fSkpfSw4MDc1NzpmdW5jdGlvbih0LGUsbil7big5MzAxNykoIlVpbnQ4IiwoZnVuY3Rpb24odCl7cmV0dXJuIGZ1bmN0aW9uKGUsbixyKXtyZXR1cm4gdCh0aGlzLGUsbixyKX19KSl9LDY5ODc5OmZ1bmN0aW9uKHQsZSxuKXtuKDkzMDE3KSgiVWludDgiLChmdW5jdGlvbih0KXtyZXR1cm4gZnVuY3Rpb24oZSxuLHIpe3JldHVybiB0KHRoaXMsZSxuLHIpfX0pLCEwKX0sNTg2MDY6ZnVuY3Rpb24odCxlLG4peyJ1c2Ugc3RyaWN0Ijt2YXIgcixvPW4oODk1NTgpLGk9bigxOTI2KSxhPW4oOTYwMyksYz1uKDgxOTUxKSxzPW4oNzEzMDMpLHU9bigxMDU5MiksbD1uKDg5ODI3KS5lbmZvcmNlLGY9bigxOTU5MSksZD0hby5BY3RpdmVYT2JqZWN0JiYiQWN0aXZlWE9iamVjdCJpbiBvLHA9T2JqZWN0LmlzRXh0ZW5zaWJsZSxoPWZ1bmN0aW9uKHQpe3JldHVybiBmdW5jdGlvbigpe3JldHVybiB0KHRoaXMsYXJndW1lbnRzLmxlbmd0aD9hcmd1bWVudHNbMF06dm9pZCAwKX19LHY9dC5leHBvcnRzPWMoIldlYWtNYXAiLGgscyk7aWYoZiYmZCl7cj1zLmdldENvbnN0cnVjdG9yKGgsIldlYWtNYXAiLCEwKSxhLlJFUVVJUkVEPSEwO3ZhciBnPXYucHJvdG90eXBlLHk9Zy5kZWxldGUsbT1nLmhhcyxiPWcuZ2V0LHg9Zy5zZXQ7aShnLHtkZWxldGU6ZnVuY3Rpb24odCl7aWYodSh0KSYmIXAodCkpe3ZhciBlPWwodGhpcyk7cmV0dXJuIGUuZnJvemVufHwoZS5mcm96ZW49bmV3IHIpLHkuY2FsbCh0aGlzLHQpfHxlLmZyb3plbi5kZWxldGUodCl9cmV0dXJuIHkuY2FsbCh0aGlzLHQpfSxoYXM6ZnVuY3Rpb24odCl7aWYodSh0KSYmIXAodCkpe3ZhciBlPWwodGhpcyk7cmV0dXJuIGUuZnJvemVufHwoZS5mcm96ZW49bmV3IHIpLG0uY2FsbCh0aGlzLHQpfHxlLmZyb3plbi5oYXModCl9cmV0dXJuIG0uY2FsbCh0aGlzLHQpfSxnZXQ6ZnVuY3Rpb24odCl7aWYodSh0KSYmIXAodCkpe3ZhciBlPWwodGhpcyk7cmV0dXJuIGUuZnJvemVufHwoZS5mcm96ZW49bmV3IHIpLG0uY2FsbCh0aGlzLHQpP2IuY2FsbCh0aGlzLHQpOmUuZnJvemVuLmdldCh0KX1yZXR1cm4gYi5jYWxsKHRoaXMsdCl9LHNldDpmdW5jdGlvbih0LGUpe2lmKHUodCkmJiFwKHQpKXt2YXIgbj1sKHRoaXMpO24uZnJvemVufHwobi5mcm96ZW49bmV3IHIpLG0uY2FsbCh0aGlzLHQpP3guY2FsbCh0aGlzLHQsZSk6bi5mcm96ZW4uc2V0KHQsZSl9ZWxzZSB4LmNhbGwodGhpcyx0LGUpO3JldHVybiB0aGlzfX0pfX0sNDUxNTc6ZnVuY3Rpb24odCxlLG4peyJ1c2Ugc3RyaWN0IjtuKDgxOTUxKSgiV2Vha1NldCIsKGZ1bmN0aW9uKHQpe3JldHVybiBmdW5jdGlvbigpe3JldHVybiB0KHRoaXMsYXJndW1lbnRzLmxlbmd0aD9hcmd1bWVudHNbMF06dm9pZCAwKX19KSxuKDcxMzAzKSl9LDk2NzUxOmZ1bmN0aW9uKHQsZSxuKXsidXNlIHN0cmljdCI7dmFyIHI9bigxNDA0NCksbz1uKDYyNTU2KSxpPW4oNjQ5NjUpLGE9big3MTg0MiksYz1uKDUwODY4KSxzPW4oMzc2MjApLHU9bigxNDIwOSksbD1uKDQxMzM0KSxmPW4oNjY5NzEpLGQ9big4OTgyNykscD1kLnNldCxoPWQuZ2V0dGVyRm9yKCJBZ2dyZWdhdGVFcnJvciIpLHY9ZnVuY3Rpb24odCxlKXt2YXIgbj10aGlzO2lmKCEobiBpbnN0YW5jZW9mIHYpKXJldHVybiBuZXcgdih0LGUpO2EmJihuPWEobmV3IEVycm9yKGUpLGkobikpKTt2YXIgcj1bXTtyZXR1cm4gbCh0LHIucHVzaCxyKSxvP3Aobix7ZXJyb3JzOnIsdHlwZToiQWdncmVnYXRlRXJyb3IifSk6bi5lcnJvcnM9cix2b2lkIDAhPT1lJiZmKG4sIm1lc3NhZ2UiLFN0cmluZyhlKSksbn07di5wcm90b3R5cGU9YyhFcnJvci5wcm90b3R5cGUse2NvbnN0cnVjdG9yOnUoNSx2KSxtZXNzYWdlOnUoNSwiIiksbmFtZTp1KDUsIkFnZ3JlZ2F0ZUVycm9yIil9KSxvJiZzLmYodi5wcm90b3R5cGUsImVycm9ycyIse2dldDpmdW5jdGlvbigpe3JldHVybiBoKHRoaXMpLmVycm9yc30sY29uZmlndXJhYmxlOiEwfSkscih7Z2xvYmFsOiEwfSx7QWdncmVnYXRlRXJyb3I6dn0pfSwxNDA4NjpmdW5jdGlvbih0LGUsbil7dmFyIHI9bigxNDA0NCksbz1uKDYxOTkpLGk9T2JqZWN0LmlzRnJvemVuLGE9ZnVuY3Rpb24odCxlKXtpZighaXx8IW8odCl8fCFpKHQpKXJldHVybiExO2Zvcih2YXIgbixyPTAsYT10Lmxlbmd0aDtyPGE7KWlmKCEoInN0cmluZyI9PXR5cGVvZihuPXRbcisrXSl8fGUmJnZvaWQgMD09PW4pKXJldHVybiExO3JldHVybiAwIT09YX07cih7dGFyZ2V0OiJBcnJheSIsc3RhdDohMH0se2lzVGVtcGxhdGVPYmplY3Q6ZnVuY3Rpb24odCl7aWYoIWEodCwhMCkpcmV0dXJuITE7dmFyIGU9dC5yYXc7cmV0dXJuIShlLmxlbmd0aCE9PXQubGVuZ3RofHwhYShlLCExKSl9fSl9LDQ5MzA6ZnVuY3Rpb24odCxlLG4peyJ1c2Ugc3RyaWN0Ijt2YXIgcj1uKDYyNTU2KSxvPW4oNzY1MTMpLGk9bigxOTIwOSksYT1uKDI3ODg0KSxjPW4oMzc2MjApLmY7ciYmISgibGFzdEluZGV4ImluW10pJiYoYyhBcnJheS5wcm90b3R5cGUsImxhc3RJbmRleCIse2NvbmZpZ3VyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXt2YXIgdD1pKHRoaXMpLGU9YSh0Lmxlbmd0aCk7cmV0dXJuIDA9PWU/MDplLTF9fSksbygibGFzdEluZGV4IikpfSw2MzY0OmZ1bmN0aW9uKHQsZSxuKXsidXNlIHN0cmljdCI7dmFyIHI9big2MjU1Niksbz1uKDc2NTEzKSxpPW4oMTkyMDkpLGE9bigyNzg4NCksYz1uKDM3NjIwKS5mO3ImJiEoImxhc3RJdGVtImluW10pJiYoYyhBcnJheS5wcm90b3R5cGUsImxhc3RJdGVtIix7Y29uZmlndXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3ZhciB0PWkodGhpcyksZT1hKHQubGVuZ3RoKTtyZXR1cm4gMD09ZT92b2lkIDA6dFtlLTFdfSxzZXQ6ZnVuY3Rpb24odCl7dmFyIGU9aSh0aGlzKSxuPWEoZS5sZW5ndGgpO3JldHVybiBlWzA9PW4/MDpuLTFdPXR9fSksbygibGFzdEl0ZW0iKSl9LDQ3MDA0OmZ1bmN0aW9uKHQsZSxuKXsidXNlIHN0cmljdCI7dmFyIHI9bigxNDA0NCksbz1uKDg3NTc5KSxpPW4oMjcwMDQpKChmdW5jdGlvbih0LGUpe3ZhciBuPXRoaXMscj1uLml0ZXJhdG9yO3JldHVybiBlLnJlc29sdmUobyhuLm5leHQuY2FsbChyLHQpKSkudGhlbigoZnVuY3Rpb24odCl7cmV0dXJuIG8odCkuZG9uZT8obi5kb25lPSEwLHtkb25lOiEwLHZhbHVlOnZvaWQgMH0pOntkb25lOiExLHZhbHVlOltuLmluZGV4KyssdC52YWx1ZV19fSkpfSkpO3Ioe3RhcmdldDoiQXN5bmNJdGVyYXRvciIscHJvdG86ITAscmVhbDohMH0se2FzSW5kZXhlZFBhaXJzOmZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBpKHtpdGVyYXRvcjpvKHRoaXMpLGluZGV4OjB9KX19KX0sNjEyOTg6ZnVuY3Rpb24odCxlLG4peyJ1c2Ugc3RyaWN0Ijt2YXIgcj1uKDE0MDQ0KSxvPW4oNTkzNzkpLGk9big2Njk3MSksYT1uKDc2Mjk4KSxjPW4oMjM3MjQpLHM9big2Mzg0NSksdT1uKDY1NjcyKSxsPWMoInRvU3RyaW5nVGFnIiksZj1mdW5jdGlvbigpe28odGhpcyxmKX07Zi5wcm90b3R5cGU9cyxhKHMsbCl8fGkocyxsLCJBc3luY0l0ZXJhdG9yIiksYShzLCJjb25zdHJ1Y3RvciIpJiZzLmNvbnN0cnVjdG9yIT09T2JqZWN0fHxpKHMsImNvbnN0cnVjdG9yIixmKSxyKHtnbG9iYWw6ITAsZm9yY2VkOnV9LHtBc3luY0l0ZXJhdG9yOmZ9KX0sNjc0NjI6ZnVuY3Rpb24odCxlLG4peyJ1c2Ugc3RyaWN0Ijt2YXIgcj1uKDE0MDQ0KSxvPW4oODc1NzkpLGk9big0NTY4MCksYT1uKDI3MDA0KSgoZnVuY3Rpb24odCxlKXt2YXIgbj10aGlzO3JldHVybiBuZXcgZSgoZnVuY3Rpb24ocixpKXt2YXIgYT1mdW5jdGlvbigpe3RyeXtlLnJlc29sdmUobyhuLm5leHQuY2FsbChuLml0ZXJhdG9yLG4ucmVtYWluaW5nP3ZvaWQgMDp0KSkpLnRoZW4oKGZ1bmN0aW9uKHQpe3RyeXtvKHQpLmRvbmU/KG4uZG9uZT0hMCxyKHtkb25lOiEwLHZhbHVlOnZvaWQgMH0pKTpuLnJlbWFpbmluZz8obi5yZW1haW5pbmctLSxhKCkpOnIoe2RvbmU6ITEsdmFsdWU6dC52YWx1ZX0pfWNhdGNoKHQpe2kodCl9fSksaSl9Y2F0Y2godCl7aSh0KX19O2EoKX0pKX0pKTtyKHt0YXJnZXQ6IkFzeW5jSXRlcmF0b3IiLHByb3RvOiEwLHJlYWw6ITB9LHtkcm9wOmZ1bmN0aW9uKHQpe3JldHVybiBuZXcgYSh7aXRlcmF0b3I6byh0aGlzKSxyZW1haW5pbmc6aSh0KX0pfX0pfSw5MDY3OmZ1bmN0aW9uKHQsZSxuKXsidXNlIHN0cmljdCI7dmFyIHI9bigxNDA0NCksbz1uKDQ1NjY2KS5ldmVyeTtyKHt0YXJnZXQ6IkFzeW5jSXRlcmF0b3IiLHByb3RvOiEwLHJlYWw6ITB9LHtldmVyeTpmdW5jdGlvbih0KXtyZXR1cm4gbyh0aGlzLHQpfX0pfSwyMDEyNDpmdW5jdGlvbih0LGUsbil7InVzZSBzdHJpY3QiO3ZhciByPW4oMTQwNDQpLG89big4NjQ3MCksaT1uKDg3NTc5KSxhPW4oMjcwMDQpKChmdW5jdGlvbih0LGUpe3ZhciBuPXRoaXMscj1uLmZpbHRlcmVyO3JldHVybiBuZXcgZSgoZnVuY3Rpb24obyxhKXt2YXIgYz1mdW5jdGlvbigpe3RyeXtlLnJlc29sdmUoaShuLm5leHQuY2FsbChuLml0ZXJhdG9yLHQpKSkudGhlbigoZnVuY3Rpb24odCl7dHJ5e2lmKGkodCkuZG9uZSluLmRvbmU9ITAsbyh7ZG9uZTohMCx2YWx1ZTp2b2lkIDB9KTtlbHNle3ZhciBzPXQudmFsdWU7ZS5yZXNvbHZlKHIocykpLnRoZW4oKGZ1bmN0aW9uKHQpe3Q/byh7ZG9uZTohMSx2YWx1ZTpzfSk6YygpfSksYSl9fWNhdGNoKHQpe2EodCl9fSksYSl9Y2F0Y2godCl7YSh0KX19O2MoKX0pKX0pKTtyKHt0YXJnZXQ6IkFzeW5jSXRlcmF0b3IiLHByb3RvOiEwLHJlYWw6ITB9LHtmaWx0ZXI6ZnVuY3Rpb24odCl7cmV0dXJuIG5ldyBhKHtpdGVyYXRvcjppKHRoaXMpLGZpbHRlcmVyOm8odCl9KX19KX0sMjEzNzE6ZnVuY3Rpb24odCxlLG4peyJ1c2Ugc3RyaWN0Ijt2YXIgcj1uKDE0MDQ0KSxvPW4oNDU2NjYpLmZpbmQ7cih7dGFyZ2V0OiJBc3luY0l0ZXJhdG9yIixwcm90bzohMCxyZWFsOiEwfSx7ZmluZDpmdW5jdGlvbih0KXtyZXR1cm4gbyh0aGlzLHQpfX0pfSwzODk4NDpmdW5jdGlvbih0LGUsbil7InVzZSBzdHJpY3QiO3ZhciByPW4oMTQwNDQpLG89big4NjQ3MCksaT1uKDg3NTc5KSxhPW4oMjcwMDQpLGM9big2NjkyMCkscz1hKChmdW5jdGlvbih0LGUpe3ZhciBuLHIsYT10aGlzLHM9YS5tYXBwZXI7cmV0dXJuIG5ldyBlKChmdW5jdGlvbih1LGwpe3ZhciBmPWZ1bmN0aW9uKCl7dHJ5e2UucmVzb2x2ZShpKGEubmV4dC5jYWxsKGEuaXRlcmF0b3IsdCkpKS50aGVuKChmdW5jdGlvbih0KXt0cnl7aSh0KS5kb25lPyhhLmRvbmU9ITAsdSh7ZG9uZTohMCx2YWx1ZTp2b2lkIDB9KSk6ZS5yZXNvbHZlKHModC52YWx1ZSkpLnRoZW4oKGZ1bmN0aW9uKHQpe3RyeXtpZih2b2lkIDAhPT0ocj1jKHQpKSlyZXR1cm4gYS5pbm5lckl0ZXJhdG9yPW49aShyLmNhbGwodCkpLGEuaW5uZXJOZXh0PW8obi5uZXh0KSxkKCk7bChUeXBlRXJyb3IoIi5mbGF0TWFwIGNhbGxiYWNrIHNob3VsZCByZXR1cm4gYW4gaXRlcmFibGUgb2JqZWN0IikpfWNhdGNoKHQpe2wodCl9fSksbCl9Y2F0Y2godCl7bCh0KX19KSxsKX1jYXRjaCh0KXtsKHQpfX0sZD1mdW5jdGlvbigpe2lmKG49YS5pbm5lckl0ZXJhdG9yKXRyeXtlLnJlc29sdmUoaShhLmlubmVyTmV4dC5jYWxsKG4pKSkudGhlbigoZnVuY3Rpb24odCl7dHJ5e2kodCkuZG9uZT8oYS5pbm5lckl0ZXJhdG9yPWEuaW5uZXJOZXh0PW51bGwsZigpKTp1KHtkb25lOiExLHZhbHVlOnQudmFsdWV9KX1jYXRjaCh0KXtsKHQpfX0pLGwpfWNhdGNoKHQpe2wodCl9ZWxzZSBmKCl9O2QoKX0pKX0pKTtyKHt0YXJnZXQ6IkFzeW5jSXRlcmF0b3IiLHByb3RvOiEwLHJlYWw6ITB9LHtmbGF0TWFwOmZ1bmN0aW9uKHQpe3JldHVybiBuZXcgcyh7aXRlcmF0b3I6aSh0aGlzKSxtYXBwZXI6byh0KSxpbm5lckl0ZXJhdG9yOm51bGwsaW5uZXJOZXh0Om51bGx9KX19KX0sNjkyMzc6ZnVuY3Rpb24odCxlLG4peyJ1c2Ugc3RyaWN0Ijt2YXIgcj1uKDE0MDQ0KSxvPW4oNDU2NjYpLmZvckVhY2g7cih7dGFyZ2V0OiJBc3luY0l0ZXJhdG9yIixwcm90bzohMCxyZWFsOiEwfSx7Zm9yRWFjaDpmdW5jdGlvbih0KXtyZXR1cm4gbyh0aGlzLHQpfX0pfSwyNjQ5NzpmdW5jdGlvbih0LGUsbil7dmFyIHI9bigxNDA0NCksbz1uKDU2MjM4KSxpPW4oODY0NzApLGE9big4NzU3OSksYz1uKDE5MjA5KSxzPW4oMjcwMDQpLHU9big2NjkyMCksbD1vLkFzeW5jSXRlcmF0b3IsZj1zKChmdW5jdGlvbih0KXtyZXR1cm4gYSh0aGlzLm5leHQuY2FsbCh0aGlzLml0ZXJhdG9yLHQpKX0pLCEwKTtyKHt0YXJnZXQ6IkFzeW5jSXRlcmF0b3IiLHN0YXQ6ITB9LHtmcm9tOmZ1bmN0aW9uKHQpe3ZhciBlLG49Yyh0KSxyPXUobik7aWYobnVsbCE9cil7aWYoKGU9aShyKS5jYWxsKG4pKWluc3RhbmNlb2YgbClyZXR1cm4gZX1lbHNlIGU9bjtyZXR1cm4gbmV3IGYoe2l0ZXJhdG9yOmV9KX19KX0sNTMxNjg6ZnVuY3Rpb24odCxlLG4peyJ1c2Ugc3RyaWN0Ijt2YXIgcj1uKDE0MDQ0KSxvPW4oODY0NzApLGk9big4NzU3OSksYT1uKDI3MDA0KSgoZnVuY3Rpb24odCxlKXt2YXIgbj10aGlzLHI9bi5tYXBwZXI7cmV0dXJuIGUucmVzb2x2ZShpKG4ubmV4dC5jYWxsKG4uaXRlcmF0b3IsdCkpKS50aGVuKChmdW5jdGlvbih0KXtyZXR1cm4gaSh0KS5kb25lPyhuLmRvbmU9ITAse2RvbmU6ITAsdmFsdWU6dm9pZCAwfSk6ZS5yZXNvbHZlKHIodC52YWx1ZSkpLnRoZW4oKGZ1bmN0aW9uKHQpe3JldHVybntkb25lOiExLHZhbHVlOnR9fSkpfSkpfSkpO3Ioe3RhcmdldDoiQXN5bmNJdGVyYXRvciIscHJvdG86ITAscmVhbDohMH0se21hcDpmdW5jdGlvbih0KXtyZXR1cm4gbmV3IGEoe2l0ZXJhdG9yOmkodGhpcyksbWFwcGVyOm8odCl9KX19KX0sNzM5NDk6ZnVuY3Rpb24odCxlLG4peyJ1c2Ugc3RyaWN0Ijt2YXIgcj1uKDE0MDQ0KSxvPW4oODY0NzApLGk9big4NzU3OSksYT1uKDc3MDEpKCJQcm9taXNlIik7cih7dGFyZ2V0OiJBc3luY0l0ZXJhdG9yIixwcm90bzohMCxyZWFsOiEwfSx7cmVkdWNlOmZ1bmN0aW9uKHQpe3ZhciBlPWkodGhpcyksbj1vKGUubmV4dCkscj1hcmd1bWVudHMubGVuZ3RoPDIsYz1yP3ZvaWQgMDphcmd1bWVudHNbMV07cmV0dXJuIG8odCksbmV3IGEoKGZ1bmN0aW9uKG8scyl7dmFyIHU9ZnVuY3Rpb24oKXt0cnl7YS5yZXNvbHZlKGkobi5jYWxsKGUpKSkudGhlbigoZnVuY3Rpb24oZSl7dHJ5e2lmKGkoZSkuZG9uZSlyP3MoVHlwZUVycm9yKCJSZWR1Y2Ugb2YgZW1wdHkgaXRlcmF0b3Igd2l0aCBubyBpbml0aWFsIHZhbHVlIikpOm8oYyk7ZWxzZXt2YXIgbj1lLnZhbHVlO3I/KHI9ITEsYz1uLHUoKSk6YS5yZXNvbHZlKHQoYyxuKSkudGhlbigoZnVuY3Rpb24odCl7Yz10LHUoKX0pLHMpfX1jYXRjaCh0KXtzKHQpfX0pLHMpfWNhdGNoKHQpe3ModCl9fTt1KCl9KSl9fSl9LDg4MjExOmZ1bmN0aW9uKHQsZSxuKXsidXNlIHN0cmljdCI7dmFyIHI9bigxNDA0NCksbz1uKDQ1NjY2KS5zb21lO3Ioe3RhcmdldDoiQXN5bmNJdGVyYXRvciIscHJvdG86ITAscmVhbDohMH0se3NvbWU6ZnVuY3Rpb24odCl7cmV0dXJuIG8odGhpcyx0KX19KX0sNzM3NjE6ZnVuY3Rpb24odCxlLG4peyJ1c2Ugc3RyaWN0Ijt2YXIgcj1uKDE0MDQ0KSxvPW4oODc1NzkpLGk9big0NTY4MCksYT1uKDI3MDA0KSgoZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMucmVtYWluaW5nLS0/dGhpcy5uZXh0LmNhbGwodGhpcy5pdGVyYXRvcix0KToodGhpcy5kb25lPSEwLHtkb25lOiEwLHZhbHVlOnZvaWQgMH0pfSkpO3Ioe3RhcmdldDoiQXN5bmNJdGVyYXRvciIscHJvdG86ITAscmVhbDohMH0se3Rha2U6ZnVuY3Rpb24odCl7cmV0dXJuIG5ldyBhKHtpdGVyYXRvcjpvKHRoaXMpLHJlbWFpbmluZzppKHQpfSl9fSl9LDQyMTk2OmZ1bmN0aW9uKHQsZSxuKXsidXNlIHN0cmljdCI7dmFyIHI9bigxNDA0NCksbz1uKDQ1NjY2KS50b0FycmF5O3Ioe3RhcmdldDoiQXN5bmNJdGVyYXRvciIscHJvdG86ITAscmVhbDohMH0se3RvQXJyYXk6ZnVuY3Rpb24oKXtyZXR1cm4gbyh0aGlzKX19KX0sMzY1NzE6ZnVuY3Rpb24odCxlLG4pe3ZhciByPW4oMTQwNDQpLG89big3NDY4NSksaT1uKDc3MDEpLGE9big1MDg2OCksYz1mdW5jdGlvbigpe3ZhciB0PWkoIk9iamVjdCIsImZyZWV6ZSIpO3JldHVybiB0P3QoYShudWxsKSk6YShudWxsKX07cih7Z2xvYmFsOiEwfSx7Y29tcG9zaXRlS2V5OmZ1bmN0aW9uKCl7cmV0dXJuIG8uYXBwbHkoT2JqZWN0LGFyZ3VtZW50cykuZ2V0KCJvYmplY3QiLGMpfX0pfSw0MzA4NjpmdW5jdGlvbih0LGUsbil7dmFyIHI9bigxNDA0NCksbz1uKDc0Njg1KSxpPW4oNzcwMSk7cih7Z2xvYmFsOiEwfSx7Y29tcG9zaXRlU3ltYm9sOmZ1bmN0aW9uKCl7cmV0dXJuIDE9PT1hcmd1bWVudHMubGVuZ3RoJiYic3RyaW5nIj09dHlwZW9mIGFyZ3VtZW50c1swXT9pKCJTeW1ib2wiKS5mb3IoYXJndW1lbnRzWzBdKTpvLmFwcGx5KG51bGwsYXJndW1lbnRzKS5nZXQoInN5bWJvbCIsaSgiU3ltYm9sIikpfX0pfSw5OTYyODpmdW5jdGlvbih0LGUsbil7big3MTYyMil9LDkyNjAxOmZ1bmN0aW9uKHQsZSxuKXsidXNlIHN0cmljdCI7dmFyIHI9bigxNDA0NCksbz1uKDg3NTc5KSxpPW4oODgwNykoKGZ1bmN0aW9uKHQpe3ZhciBlPW8odGhpcy5uZXh0LmNhbGwodGhpcy5pdGVyYXRvcix0KSk7aWYoISh0aGlzLmRvbmU9ISFlLmRvbmUpKXJldHVyblt0aGlzLmluZGV4KyssZS52YWx1ZV19KSk7cih7dGFyZ2V0OiJJdGVyYXRvciIscHJvdG86ITAscmVhbDohMH0se2FzSW5kZXhlZFBhaXJzOmZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBpKHtpdGVyYXRvcjpvKHRoaXMpLGluZGV4OjB9KX19KX0sNDMzMzI6ZnVuY3Rpb24odCxlLG4peyJ1c2Ugc3RyaWN0Ijt2YXIgcj1uKDE0MDQ0KSxvPW4oODk1NTgpLGk9big1OTM3OSksYT1uKDY2OTcxKSxjPW4oMzIxODcpLHM9big3NjI5OCksdT1uKDIzNzI0KSxsPW4oNjQxNzYpLkl0ZXJhdG9yUHJvdG90eXBlLGY9big2NTY3MiksZD11KCJpdGVyYXRvciIpLHA9dSgidG9TdHJpbmdUYWciKSxoPW8uSXRlcmF0b3Isdj1mfHwiZnVuY3Rpb24iIT10eXBlb2YgaHx8aC5wcm90b3R5cGUhPT1sfHwhYygoZnVuY3Rpb24oKXtoKHt9KX0pKSxnPWZ1bmN0aW9uKCl7aSh0aGlzLGcpfTtmJiZhKGw9e30sZCwoZnVuY3Rpb24oKXtyZXR1cm4gdGhpc30pKSxzKGwscCl8fGEobCxwLCJJdGVyYXRvciIpLCF2JiZzKGwsImNvbnN0cnVjdG9yIikmJmwuY29uc3RydWN0b3IhPT1PYmplY3R8fGEobCwiY29uc3RydWN0b3IiLGcpLGcucHJvdG90eXBlPWwscih7Z2xvYmFsOiEwLGZvcmNlZDp2fSx7SXRlcmF0b3I6Z30pfSwyMDQ3NDpmdW5jdGlvbih0LGUsbil7InVzZSBzdHJpY3QiO3ZhciByPW4oMTQwNDQpLG89big4NzU3OSksaT1uKDQ1NjgwKSxhPW4oODgwNykoKGZ1bmN0aW9uKHQpe2Zvcih2YXIgZSxuPXRoaXMuaXRlcmF0b3Iscj10aGlzLm5leHQ7dGhpcy5yZW1haW5pbmc7KWlmKHRoaXMucmVtYWluaW5nLS0sZT1vKHIuY2FsbChuKSksdGhpcy5kb25lPSEhZS5kb25lKXJldHVybjtpZihlPW8oci5jYWxsKG4sdCkpLCEodGhpcy5kb25lPSEhZS5kb25lKSlyZXR1cm4gZS52YWx1ZX0pKTtyKHt0YXJnZXQ6Ikl0ZXJhdG9yIixwcm90bzohMCxyZWFsOiEwfSx7ZHJvcDpmdW5jdGlvbih0KXtyZXR1cm4gbmV3IGEoe2l0ZXJhdG9yOm8odGhpcykscmVtYWluaW5nOmkodCl9KX19KX0sNTQ1NTY6ZnVuY3Rpb24odCxlLG4peyJ1c2Ugc3RyaWN0Ijt2YXIgcj1uKDE0MDQ0KSxvPW4oNDEzMzQpLGk9big4NjQ3MCksYT1uKDg3NTc5KTtyKHt0YXJnZXQ6Ikl0ZXJhdG9yIixwcm90bzohMCxyZWFsOiEwfSx7ZXZlcnk6ZnVuY3Rpb24odCl7cmV0dXJuIGEodGhpcyksaSh0KSwhbyh0aGlzLChmdW5jdGlvbihlKXtpZighdChlKSlyZXR1cm4gby5zdG9wKCl9KSx2b2lkIDAsITEsITApLnN0b3BwZWR9fSl9LDQwNjM4OmZ1bmN0aW9uKHQsZSxuKXsidXNlIHN0cmljdCI7dmFyIHI9bigxNDA0NCksbz1uKDg2NDcwKSxpPW4oODc1NzkpLGE9big4ODA3KSxjPW4oMTIyNzgpLHM9YSgoZnVuY3Rpb24odCl7Zm9yKHZhciBlLG4scj10aGlzLml0ZXJhdG9yLG89dGhpcy5maWx0ZXJlcixhPXRoaXMubmV4dDs7KXtpZihlPWkoYS5jYWxsKHIsdCkpLHRoaXMuZG9uZT0hIWUuZG9uZSlyZXR1cm47aWYobj1lLnZhbHVlLGMocixvLG4pKXJldHVybiBufX0pKTtyKHt0YXJnZXQ6Ikl0ZXJhdG9yIixwcm90bzohMCxyZWFsOiEwfSx7ZmlsdGVyOmZ1bmN0aW9uKHQpe3JldHVybiBuZXcgcyh7aXRlcmF0b3I6aSh0aGlzKSxmaWx0ZXJlcjpvKHQpfSl9fSl9LDk2NjU5OmZ1bmN0aW9uKHQsZSxuKXsidXNlIHN0cmljdCI7dmFyIHI9bigxNDA0NCksbz1uKDQxMzM0KSxpPW4oODY0NzApLGE9big4NzU3OSk7cih7dGFyZ2V0OiJJdGVyYXRvciIscHJvdG86ITAscmVhbDohMH0se2ZpbmQ6ZnVuY3Rpb24odCl7cmV0dXJuIGEodGhpcyksaSh0KSxvKHRoaXMsKGZ1bmN0aW9uKGUpe2lmKHQoZSkpcmV0dXJuIG8uc3RvcChlKX0pLHZvaWQgMCwhMSwhMCkucmVzdWx0fX0pfSwxNDY4ODpmdW5jdGlvbih0LGUsbil7InVzZSBzdHJpY3QiO3ZhciByPW4oMTQwNDQpLG89big4NjQ3MCksaT1uKDg3NTc5KSxhPW4oNzM4OTApLGM9big4ODA3KSxzPW4oMTIyNzgpLHU9YygoZnVuY3Rpb24odCl7Zm9yKHZhciBlLG4scixjLHU9dGhpcy5pdGVyYXRvcjs7KXtpZihjPXRoaXMuaW5uZXJJdGVyYXRvcil7aWYoIShlPWkodGhpcy5pbm5lck5leHQuY2FsbChjKSkpLmRvbmUpcmV0dXJuIGUudmFsdWU7dGhpcy5pbm5lckl0ZXJhdG9yPXRoaXMuaW5uZXJOZXh0PW51bGx9aWYoZT1pKHRoaXMubmV4dC5jYWxsKHUsdCkpLHRoaXMuZG9uZT0hIWUuZG9uZSlyZXR1cm47aWYobj1zKHUsdGhpcy5tYXBwZXIsZS52YWx1ZSksdm9pZCAwPT09KHI9YShuKSkpdGhyb3cgVHlwZUVycm9yKCIuZmxhdE1hcCBjYWxsYmFjayBzaG91bGQgcmV0dXJuIGFuIGl0ZXJhYmxlIG9iamVjdCIpO3RoaXMuaW5uZXJJdGVyYXRvcj1jPWkoci5jYWxsKG4pKSx0aGlzLmlubmVyTmV4dD1vKGMubmV4dCl9fSkpO3Ioe3RhcmdldDoiSXRlcmF0b3IiLHByb3RvOiEwLHJlYWw6ITB9LHtmbGF0TWFwOmZ1bmN0aW9uKHQpe3JldHVybiBuZXcgdSh7aXRlcmF0b3I6aSh0aGlzKSxtYXBwZXI6byh0KSxpbm5lckl0ZXJhdG9yOm51bGwsaW5uZXJOZXh0Om51bGx9KX19KX0sNzM3ODpmdW5jdGlvbih0LGUsbil7InVzZSBzdHJpY3QiO3ZhciByPW4oMTQwNDQpLG89big0MTMzNCksaT1uKDg3NTc5KTtyKHt0YXJnZXQ6Ikl0ZXJhdG9yIixwcm90bzohMCxyZWFsOiEwfSx7Zm9yRWFjaDpmdW5jdGlvbih0KXtvKGkodGhpcyksdCx2b2lkIDAsITEsITApfX0pfSwyNzQyODpmdW5jdGlvbih0LGUsbil7dmFyIHI9bigxNDA0NCksbz1uKDU2MjM4KSxpPW4oODY0NzApLGE9big4NzU3OSksYz1uKDE5MjA5KSxzPW4oODgwNyksdT1uKDczODkwKSxsPW8uSXRlcmF0b3IsZj1zKChmdW5jdGlvbih0KXt2YXIgZT1hKHRoaXMubmV4dC5jYWxsKHRoaXMuaXRlcmF0b3IsdCkpO2lmKCEodGhpcy5kb25lPSEhZS5kb25lKSlyZXR1cm4gZS52YWx1ZX0pLCEwKTtyKHt0YXJnZXQ6Ikl0ZXJhdG9yIixzdGF0OiEwfSx7ZnJvbTpmdW5jdGlvbih0KXt2YXIgZSxuPWModCkscj11KG4pO2lmKG51bGwhPXIpe2lmKChlPWkocikuY2FsbChuKSlpbnN0YW5jZW9mIGwpcmV0dXJuIGV9ZWxzZSBlPW47cmV0dXJuIG5ldyBmKHtpdGVyYXRvcjplfSl9fSl9LDMzNDM2OmZ1bmN0aW9uKHQsZSxuKXsidXNlIHN0cmljdCI7dmFyIHI9bigxNDA0NCksbz1uKDg2NDcwKSxpPW4oODc1NzkpLGE9big4ODA3KSxjPW4oMTIyNzgpLHM9YSgoZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5pdGVyYXRvcixuPWkodGhpcy5uZXh0LmNhbGwoZSx0KSk7aWYoISh0aGlzLmRvbmU9ISFuLmRvbmUpKXJldHVybiBjKGUsdGhpcy5tYXBwZXIsbi52YWx1ZSl9KSk7cih7dGFyZ2V0OiJJdGVyYXRvciIscHJvdG86ITAscmVhbDohMH0se21hcDpmdW5jdGlvbih0KXtyZXR1cm4gbmV3IHMoe2l0ZXJhdG9yOmkodGhpcyksbWFwcGVyOm8odCl9KX19KX0sODQzODg6ZnVuY3Rpb24odCxlLG4peyJ1c2Ugc3RyaWN0Ijt2YXIgcj1uKDE0MDQ0KSxvPW4oNDEzMzQpLGk9big4NjQ3MCksYT1uKDg3NTc5KTtyKHt0YXJnZXQ6Ikl0ZXJhdG9yIixwcm90bzohMCxyZWFsOiEwfSx7cmVkdWNlOmZ1bmN0aW9uKHQpe2EodGhpcyksaSh0KTt2YXIgZT1hcmd1bWVudHMubGVuZ3RoPDIsbj1lP3ZvaWQgMDphcmd1bWVudHNbMV07aWYobyh0aGlzLChmdW5jdGlvbihyKXtlPyhlPSExLG49cik6bj10KG4scil9KSx2b2lkIDAsITEsITApLGUpdGhyb3cgVHlwZUVycm9yKCJSZWR1Y2Ugb2YgZW1wdHkgaXRlcmF0b3Igd2l0aCBubyBpbml0aWFsIHZhbHVlIik7cmV0dXJuIG59fSl9LDU5NjIzOmZ1bmN0aW9uKHQsZSxuKXsidXNlIHN0cmljdCI7dmFyIHI9bigxNDA0NCksbz1uKDQxMzM0KSxpPW4oODY0NzApLGE9big4NzU3OSk7cih7dGFyZ2V0OiJJdGVyYXRvciIscHJvdG86ITAscmVhbDohMH0se3NvbWU6ZnVuY3Rpb24odCl7cmV0dXJuIGEodGhpcyksaSh0KSxvKHRoaXMsKGZ1bmN0aW9uKGUpe2lmKHQoZSkpcmV0dXJuIG8uc3RvcCgpfSksdm9pZCAwLCExLCEwKS5zdG9wcGVkfX0pfSwzMjg1MzpmdW5jdGlvbih0LGUsbil7InVzZSBzdHJpY3QiO3ZhciByPW4oMTQwNDQpLG89big4NzU3OSksaT1uKDQ1NjgwKSxhPW4oODgwNykoKGZ1bmN0aW9uKHQpe2lmKHRoaXMucmVtYWluaW5nLS0pe3ZhciBlPW8odGhpcy5uZXh0LmNhbGwodGhpcy5pdGVyYXRvcix0KSk7cmV0dXJuKHRoaXMuZG9uZT0hIWUuZG9uZSk/dm9pZCAwOmUudmFsdWV9dGhpcy5kb25lPSEwfSkpO3Ioe3RhcmdldDoiSXRlcmF0b3IiLHByb3RvOiEwLHJlYWw6ITB9LHt0YWtlOmZ1bmN0aW9uKHQpe3JldHVybiBuZXcgYSh7aXRlcmF0b3I6byh0aGlzKSxyZW1haW5pbmc6aSh0KX0pfX0pfSw2NzA3MjpmdW5jdGlvbih0LGUsbil7InVzZSBzdHJpY3QiO3ZhciByPW4oMTQwNDQpLG89big0MTMzNCksaT1uKDg3NTc5KSxhPVtdLnB1c2g7cih7dGFyZ2V0OiJJdGVyYXRvciIscHJvdG86ITAscmVhbDohMH0se3RvQXJyYXk6ZnVuY3Rpb24oKXt2YXIgdD1bXTtyZXR1cm4gbyhpKHRoaXMpLGEsdCwhMSwhMCksdH19KX0sNDg0NDpmdW5jdGlvbih0LGUsbil7InVzZSBzdHJpY3QiO3ZhciByPW4oMTQwNDQpLG89big2NTY3MiksaT1uKDE0NjYpO3Ioe3RhcmdldDoiTWFwIixwcm90bzohMCxyZWFsOiEwLGZvcmNlZDpvfSx7ZGVsZXRlQWxsOmZ1bmN0aW9uKCl7cmV0dXJuIGkuYXBwbHkodGhpcyxhcmd1bWVudHMpfX0pfSwzNTU0OmZ1bmN0aW9uKHQsZSxuKXsidXNlIHN0cmljdCI7dmFyIHI9bigxNDA0NCksbz1uKDY1NjcyKSxpPW4oODc1NzkpLGE9big0NjEzMCksYz1uKDQxOTg5KSxzPW4oNDEzMzQpO3Ioe3RhcmdldDoiTWFwIixwcm90bzohMCxyZWFsOiEwLGZvcmNlZDpvfSx7ZXZlcnk6ZnVuY3Rpb24odCl7dmFyIGU9aSh0aGlzKSxuPWMoZSkscj1hKHQsYXJndW1lbnRzLmxlbmd0aD4xP2FyZ3VtZW50c1sxXTp2b2lkIDAsMyk7cmV0dXJuIXMobiwoZnVuY3Rpb24odCxuKXtpZighcihuLHQsZSkpcmV0dXJuIHMuc3RvcCgpfSksdm9pZCAwLCEwLCEwKS5zdG9wcGVkfX0pfSwxODg0NDpmdW5jdGlvbih0LGUsbil7InVzZSBzdHJpY3QiO3ZhciByPW4oMTQwNDQpLG89big2NTY3MiksaT1uKDc3MDEpLGE9big4NzU3OSksYz1uKDg2NDcwKSxzPW4oNDYxMzApLHU9bigxMzk3OSksbD1uKDQxOTg5KSxmPW4oNDEzMzQpO3Ioe3RhcmdldDoiTWFwIixwcm90bzohMCxyZWFsOiEwLGZvcmNlZDpvfSx7ZmlsdGVyOmZ1bmN0aW9uKHQpe3ZhciBlPWEodGhpcyksbj1sKGUpLHI9cyh0LGFyZ3VtZW50cy5sZW5ndGg+MT9hcmd1bWVudHNbMV06dm9pZCAwLDMpLG89bmV3KHUoZSxpKCJNYXAiKSkpLGQ9YyhvLnNldCk7cmV0dXJuIGYobiwoZnVuY3Rpb24odCxuKXtyKG4sdCxlKSYmZC5jYWxsKG8sdCxuKX0pLHZvaWQgMCwhMCwhMCksb319KX0sNDkwNTA6ZnVuY3Rpb24odCxlLG4peyJ1c2Ugc3RyaWN0Ijt2YXIgcj1uKDE0MDQ0KSxvPW4oNjU2NzIpLGk9big4NzU3OSksYT1uKDQ2MTMwKSxjPW4oNDE5ODkpLHM9big0MTMzNCk7cih7dGFyZ2V0OiJNYXAiLHByb3RvOiEwLHJlYWw6ITAsZm9yY2VkOm99LHtmaW5kS2V5OmZ1bmN0aW9uKHQpe3ZhciBlPWkodGhpcyksbj1jKGUpLHI9YSh0LGFyZ3VtZW50cy5sZW5ndGg+MT9hcmd1bWVudHNbMV06dm9pZCAwLDMpO3JldHVybiBzKG4sKGZ1bmN0aW9uKHQsbil7aWYocihuLHQsZSkpcmV0dXJuIHMuc3RvcCh0KX0pLHZvaWQgMCwhMCwhMCkucmVzdWx0fX0pfSwzNTY1NjpmdW5jdGlvbih0LGUsbil7InVzZSBzdHJpY3QiO3ZhciByPW4oMTQwNDQpLG89big2NTY3MiksaT1uKDg3NTc5KSxhPW4oNDYxMzApLGM9big0MTk4OSkscz1uKDQxMzM0KTtyKHt0YXJnZXQ6Ik1hcCIscHJvdG86ITAscmVhbDohMCxmb3JjZWQ6b30se2ZpbmQ6ZnVuY3Rpb24odCl7dmFyIGU9aSh0aGlzKSxuPWMoZSkscj1hKHQsYXJndW1lbnRzLmxlbmd0aD4xP2FyZ3VtZW50c1sxXTp2b2lkIDAsMyk7cmV0dXJuIHMobiwoZnVuY3Rpb24odCxuKXtpZihyKG4sdCxlKSlyZXR1cm4gcy5zdG9wKG4pfSksdm9pZCAwLCEwLCEwKS5yZXN1bHR9fSl9LDM4NzkyOmZ1bmN0aW9uKHQsZSxuKXtuKDE0MDQ0KSh7dGFyZ2V0OiJNYXAiLHN0YXQ6ITB9LHtmcm9tOm4oMTI5MDEpfSl9LDUzNTEzOmZ1bmN0aW9uKHQsZSxuKXsidXNlIHN0cmljdCI7dmFyIHI9bigxNDA0NCksbz1uKDQxMzM0KSxpPW4oODY0NzApO3Ioe3RhcmdldDoiTWFwIixzdGF0OiEwfSx7Z3JvdXBCeTpmdW5jdGlvbih0LGUpe3ZhciBuPW5ldyB0aGlzO2koZSk7dmFyIHI9aShuLmhhcyksYT1pKG4uZ2V0KSxjPWkobi5zZXQpO3JldHVybiBvKHQsKGZ1bmN0aW9uKHQpe3ZhciBvPWUodCk7ci5jYWxsKG4sbyk/YS5jYWxsKG4sbykucHVzaCh0KTpjLmNhbGwobixvLFt0XSl9KSksbn19KX0sOTM4NDM6ZnVuY3Rpb24odCxlLG4peyJ1c2Ugc3RyaWN0Ijt2YXIgcj1uKDE0MDQ0KSxvPW4oNjU2NzIpLGk9big4NzU3OSksYT1uKDQxOTg5KSxjPW4oMzgxODkpLHM9big0MTMzNCk7cih7dGFyZ2V0OiJNYXAiLHByb3RvOiEwLHJlYWw6ITAsZm9yY2VkOm99LHtpbmNsdWRlczpmdW5jdGlvbih0KXtyZXR1cm4gcyhhKGkodGhpcykpLChmdW5jdGlvbihlLG4pe2lmKGMobix0KSlyZXR1cm4gcy5zdG9wKCl9KSx2b2lkIDAsITAsITApLnN0b3BwZWR9fSl9LDk5MjU1OmZ1bmN0aW9uKHQsZSxuKXsidXNlIHN0cmljdCI7dmFyIHI9bigxNDA0NCksbz1uKDQxMzM0KSxpPW4oODY0NzApO3Ioe3RhcmdldDoiTWFwIixzdGF0OiEwfSx7a2V5Qnk6ZnVuY3Rpb24odCxlKXt2YXIgbj1uZXcgdGhpcztpKGUpO3ZhciByPWkobi5zZXQpO3JldHVybiBvKHQsKGZ1bmN0aW9uKHQpe3IuY2FsbChuLGUodCksdCl9KSksbn19KX0sNjYyMjQ6ZnVuY3Rpb24odCxlLG4peyJ1c2Ugc3RyaWN0Ijt2YXIgcj1uKDE0MDQ0KSxvPW4oNjU2NzIpLGk9big4NzU3OSksYT1uKDQxOTg5KSxjPW4oNDEzMzQpO3Ioe3RhcmdldDoiTWFwIixwcm90bzohMCxyZWFsOiEwLGZvcmNlZDpvfSx7a2V5T2Y6ZnVuY3Rpb24odCl7cmV0dXJuIGMoYShpKHRoaXMpKSwoZnVuY3Rpb24oZSxuKXtpZihuPT09dClyZXR1cm4gYy5zdG9wKGUpfSksdm9pZCAwLCEwLCEwKS5yZXN1bHR9fSl9LDcxNzAwOmZ1bmN0aW9uKHQsZSxuKXsidXNlIHN0cmljdCI7dmFyIHI9bigxNDA0NCksbz1uKDY1NjcyKSxpPW4oNzcwMSksYT1uKDg3NTc5KSxjPW4oODY0NzApLHM9big0NjEzMCksdT1uKDEzOTc5KSxsPW4oNDE5ODkpLGY9big0MTMzNCk7cih7dGFyZ2V0OiJNYXAiLHByb3RvOiEwLHJlYWw6ITAsZm9yY2VkOm99LHttYXBLZXlzOmZ1bmN0aW9uKHQpe3ZhciBlPWEodGhpcyksbj1sKGUpLHI9cyh0LGFyZ3VtZW50cy5sZW5ndGg+MT9hcmd1bWVudHNbMV06dm9pZCAwLDMpLG89bmV3KHUoZSxpKCJNYXAiKSkpLGQ9YyhvLnNldCk7cmV0dXJuIGYobiwoZnVuY3Rpb24odCxuKXtkLmNhbGwobyxyKG4sdCxlKSxuKX0pLHZvaWQgMCwhMCwhMCksb319KX0sNjk1Mjk6ZnVuY3Rpb24odCxlLG4peyJ1c2Ugc3RyaWN0Ijt2YXIgcj1uKDE0MDQ0KSxvPW4oNjU2NzIpLGk9big3NzAxKSxhPW4oODc1NzkpLGM9big4NjQ3MCkscz1uKDQ2MTMwKSx1PW4oMTM5NzkpLGw9big0MTk4OSksZj1uKDQxMzM0KTtyKHt0YXJnZXQ6Ik1hcCIscHJvdG86ITAscmVhbDohMCxmb3JjZWQ6b30se21hcFZhbHVlczpmdW5jdGlvbih0KXt2YXIgZT1hKHRoaXMpLG49bChlKSxyPXModCxhcmd1bWVudHMubGVuZ3RoPjE/YXJndW1lbnRzWzFdOnZvaWQgMCwzKSxvPW5ldyh1KGUsaSgiTWFwIikpKSxkPWMoby5zZXQpO3JldHVybiBmKG4sKGZ1bmN0aW9uKHQsbil7ZC5jYWxsKG8sdCxyKG4sdCxlKSl9KSx2b2lkIDAsITAsITApLG99fSl9LDI3NzM0OmZ1bmN0aW9uKHQsZSxuKXsidXNlIHN0cmljdCI7dmFyIHI9bigxNDA0NCksbz1uKDY1NjcyKSxpPW4oODc1NzkpLGE9big4NjQ3MCksYz1uKDQxMzM0KTtyKHt0YXJnZXQ6Ik1hcCIscHJvdG86ITAscmVhbDohMCxmb3JjZWQ6b30se21lcmdlOmZ1bmN0aW9uKHQpe2Zvcih2YXIgZT1pKHRoaXMpLG49YShlLnNldCkscj0wO3I8YXJndW1lbnRzLmxlbmd0aDspYyhhcmd1bWVudHNbcisrXSxuLGUsITApO3JldHVybiBlfX0pfSwxOTkwOmZ1bmN0aW9uKHQsZSxuKXtuKDE0MDQ0KSh7dGFyZ2V0OiJNYXAiLHN0YXQ6ITB9LHtvZjpuKDI1MDI2KX0pfSw3NzM2OTpmdW5jdGlvbih0LGUsbil7InVzZSBzdHJpY3QiO3ZhciByPW4oMTQwNDQpLG89big2NTY3MiksaT1uKDg3NTc5KSxhPW4oODY0NzApLGM9big0MTk4OSkscz1uKDQxMzM0KTtyKHt0YXJnZXQ6Ik1hcCIscHJvdG86ITAscmVhbDohMCxmb3JjZWQ6b30se3JlZHVjZTpmdW5jdGlvbih0KXt2YXIgZT1pKHRoaXMpLG49YyhlKSxyPWFyZ3VtZW50cy5sZW5ndGg8MixvPXI/dm9pZCAwOmFyZ3VtZW50c1sxXTtpZihhKHQpLHMobiwoZnVuY3Rpb24obixpKXtyPyhyPSExLG89aSk6bz10KG8saSxuLGUpfSksdm9pZCAwLCEwLCEwKSxyKXRocm93IFR5cGVFcnJvcigiUmVkdWNlIG9mIGVtcHR5IG1hcCB3aXRoIG5vIGluaXRpYWwgdmFsdWUiKTtyZXR1cm4gb319KX0sNjk4NDI6ZnVuY3Rpb24odCxlLG4peyJ1c2Ugc3RyaWN0Ijt2YXIgcj1uKDE0MDQ0KSxvPW4oNjU2NzIpLGk9big4NzU3OSksYT1uKDQ2MTMwKSxjPW4oNDE5ODkpLHM9big0MTMzNCk7cih7dGFyZ2V0OiJNYXAiLHByb3RvOiEwLHJlYWw6ITAsZm9yY2VkOm99LHtzb21lOmZ1bmN0aW9uKHQpe3ZhciBlPWkodGhpcyksbj1jKGUpLHI9YSh0LGFyZ3VtZW50cy5sZW5ndGg+MT9hcmd1bWVudHNbMV06dm9pZCAwLDMpO3JldHVybiBzKG4sKGZ1bmN0aW9uKHQsbil7aWYocihuLHQsZSkpcmV0dXJuIHMuc3RvcCgpfSksdm9pZCAwLCEwLCEwKS5zdG9wcGVkfX0pfSw0MzI5MDpmdW5jdGlvbih0LGUsbil7InVzZSBzdHJpY3QiO24oMTQwNDQpKHt0YXJnZXQ6Ik1hcCIscHJvdG86ITAscmVhbDohMCxmb3JjZWQ6big2NTY3Mil9LHt1cGRhdGVPckluc2VydDpuKDQ3OTI3KX0pfSw5NzkyODpmdW5jdGlvbih0LGUsbil7InVzZSBzdHJpY3QiO3ZhciByPW4oMTQwNDQpLG89big2NTY3MiksaT1uKDg3NTc5KSxhPW4oODY0NzApO3Ioe3RhcmdldDoiTWFwIixwcm90bzohMCxyZWFsOiEwLGZvcmNlZDpvfSx7dXBkYXRlOmZ1bmN0aW9uKHQsZSl7dmFyIG49aSh0aGlzKSxyPWFyZ3VtZW50cy5sZW5ndGg7YShlKTt2YXIgbz1uLmhhcyh0KTtpZighbyYmcjwzKXRocm93IFR5cGVFcnJvcigiVXBkYXRpbmcgYWJzZW50IHZhbHVlIik7dmFyIGM9bz9uLmdldCh0KTphKHI+Mj9hcmd1bWVudHNbMl06dm9pZCAwKSh0LG4pO3JldHVybiBuLnNldCh0LGUoYyx0LG4pKSxufX0pfSwxNDY4MjpmdW5jdGlvbih0LGUsbil7InVzZSBzdHJpY3QiO24oMTQwNDQpKHt0YXJnZXQ6Ik1hcCIscHJvdG86ITAscmVhbDohMCxmb3JjZWQ6big2NTY3Mil9LHt1cHNlcnQ6big0NzkyNyl9KX0sNzAyMjU6ZnVuY3Rpb24odCxlLG4pe3ZhciByPW4oMTQwNDQpLG89TWF0aC5taW4saT1NYXRoLm1heDtyKHt0YXJnZXQ6Ik1hdGgiLHN0YXQ6ITB9LHtjbGFtcDpmdW5jdGlvbih0LGUsbil7cmV0dXJuIG8obixpKGUsdCkpfX0pfSwyMzk5OmZ1bmN0aW9uKHQsZSxuKXtuKDE0MDQ0KSh7dGFyZ2V0OiJNYXRoIixzdGF0OiEwfSx7REVHX1BFUl9SQUQ6TWF0aC5QSS8xODB9KX0sMTY4MDk6ZnVuY3Rpb24odCxlLG4pe3ZhciByPW4oMTQwNDQpLG89MTgwL01hdGguUEk7cih7dGFyZ2V0OiJNYXRoIixzdGF0OiEwfSx7ZGVncmVlczpmdW5jdGlvbih0KXtyZXR1cm4gdCpvfX0pfSw2NzE0MTpmdW5jdGlvbih0LGUsbil7dmFyIHI9bigxNDA0NCksbz1uKDc3NDIpLGk9big1MzI1MSk7cih7dGFyZ2V0OiJNYXRoIixzdGF0OiEwfSx7ZnNjYWxlOmZ1bmN0aW9uKHQsZSxuLHIsYSl7cmV0dXJuIGkobyh0LGUsbixyLGEpKX19KX0sMzA2MTM6ZnVuY3Rpb24odCxlLG4pe24oMTQwNDQpKHt0YXJnZXQ6Ik1hdGgiLHN0YXQ6ITB9LHtpYWRkaDpmdW5jdGlvbih0LGUsbixyKXt2YXIgbz10Pj4+MCxpPW4+Pj4wO3JldHVybihlPj4+MCkrKHI+Pj4wKSsoKG8maXwob3xpKSZ+KG8raT4+PjApKT4+PjMxKXwwfX0pfSw0OTc5OmZ1bmN0aW9uKHQsZSxuKXtuKDE0MDQ0KSh7dGFyZ2V0OiJNYXRoIixzdGF0OiEwfSx7aW11bGg6ZnVuY3Rpb24odCxlKXt2YXIgbj02NTUzNSxyPSt0LG89K2UsaT1yJm4sYT1vJm4sYz1yPj4xNixzPW8+PjE2LHU9KGMqYT4+PjApKyhpKmE+Pj4xNik7cmV0dXJuIGMqcysodT4+MTYpKygoaSpzPj4+MCkrKHUmbik+PjE2KX19KX0sNjg0MDY6ZnVuY3Rpb24odCxlLG4pe24oMTQwNDQpKHt0YXJnZXQ6Ik1hdGgiLHN0YXQ6ITB9LHtpc3ViaDpmdW5jdGlvbih0LGUsbixyKXt2YXIgbz10Pj4+MCxpPW4+Pj4wO3JldHVybihlPj4+MCktKHI+Pj4wKS0oKH5vJml8fihvXmkpJm8taT4+PjApPj4+MzEpfDB9fSl9LDkwNzY5OmZ1bmN0aW9uKHQsZSxuKXtuKDE0MDQ0KSh7dGFyZ2V0OiJNYXRoIixzdGF0OiEwfSx7UkFEX1BFUl9ERUc6MTgwL01hdGguUEl9KX0sNTc4OTE6ZnVuY3Rpb24odCxlLG4pe3ZhciByPW4oMTQwNDQpLG89TWF0aC5QSS8xODA7cih7dGFyZ2V0OiJNYXRoIixzdGF0OiEwfSx7cmFkaWFuczpmdW5jdGlvbih0KXtyZXR1cm4gdCpvfX0pfSwxNTcyMjpmdW5jdGlvbih0LGUsbil7bigxNDA0NCkoe3RhcmdldDoiTWF0aCIsc3RhdDohMH0se3NjYWxlOm4oNzc0Mil9KX0sMTc2NTpmdW5jdGlvbih0LGUsbil7dmFyIHI9bigxNDA0NCksbz1uKDg3NTc5KSxpPW4oODk1NDIpLGE9big3MTIwMSksYz1uKDg5ODI3KSxzPSJTZWVkZWQgUmFuZG9tIix1PSJTZWVkZWQgUmFuZG9tIEdlbmVyYXRvciIsbD1jLnNldCxmPWMuZ2V0dGVyRm9yKHUpLGQ9YSgoZnVuY3Rpb24odCl7bCh0aGlzLHt0eXBlOnUsc2VlZDp0JTIxNDc0ODM2NDd9KX0pLHMsKGZ1bmN0aW9uKCl7dmFyIHQ9Zih0aGlzKTtyZXR1cm57dmFsdWU6KDEwNzM3NDE4MjMmKHQuc2VlZD0oMTEwMzUxNTI0NSp0LnNlZWQrMTIzNDUpJTIxNDc0ODM2NDcpKS8xMDczNzQxODIzLGRvbmU6ITF9fSkpO3Ioe3RhcmdldDoiTWF0aCIsc3RhdDohMCxmb3JjZWQ6ITB9LHtzZWVkZWRQUk5HOmZ1bmN0aW9uKHQpe3ZhciBlPW8odCkuc2VlZDtpZighaShlKSl0aHJvdyBUeXBlRXJyb3IoJ01hdGguc2VlZGVkUFJORygpIGFyZ3VtZW50IHNob3VsZCBoYXZlIGEgInNlZWQiIGZpZWxkIHdpdGggYSBmaW5pdGUgdmFsdWUuJyk7cmV0dXJuIG5ldyBkKGUpfX0pfSw3NzkwNzpmdW5jdGlvbih0LGUsbil7bigxNDA0NCkoe3RhcmdldDoiTWF0aCIsc3RhdDohMH0se3NpZ25iaXQ6ZnVuY3Rpb24odCl7cmV0dXJuKHQ9K3QpPT10JiYwPT10PzEvdD09LTEvMDp0PDB9fSl9LDQ0NjQ2OmZ1bmN0aW9uKHQsZSxuKXtuKDE0MDQ0KSh7dGFyZ2V0OiJNYXRoIixzdGF0OiEwfSx7dW11bGg6ZnVuY3Rpb24odCxlKXt2YXIgbj02NTUzNSxyPSt0LG89K2UsaT1yJm4sYT1vJm4sYz1yPj4+MTYscz1vPj4+MTYsdT0oYyphPj4+MCkrKGkqYT4+PjE2KTtyZXR1cm4gYypzKyh1Pj4+MTYpKygoaSpzPj4+MCkrKHUmbik+Pj4xNil9fSl9LDc1NjQ3OmZ1bmN0aW9uKHQsZSxuKXsidXNlIHN0cmljdCI7dmFyIHI9bigxNDA0NCksbz1uKDQzNDE2KSxpPW4oNzg0NiksYT0iSW52YWxpZCBudW1iZXIgcmVwcmVzZW50YXRpb24iLGM9L15bXGRhLXpdKyQvO3Ioe3RhcmdldDoiTnVtYmVyIixzdGF0OiEwfSx7ZnJvbVN0cmluZzpmdW5jdGlvbih0LGUpe3ZhciBuLHIscz0xO2lmKCJzdHJpbmciIT10eXBlb2YgdCl0aHJvdyBUeXBlRXJyb3IoYSk7aWYoIXQubGVuZ3RoKXRocm93IFN5bnRheEVycm9yKGEpO2lmKCItIj09dC5jaGFyQXQoMCkmJihzPS0xLCEodD10LnNsaWNlKDEpKS5sZW5ndGgpKXRocm93IFN5bnRheEVycm9yKGEpO2lmKChuPXZvaWQgMD09PWU/MTA6byhlKSk8Mnx8bj4zNil0aHJvdyBSYW5nZUVycm9yKCJJbnZhbGlkIHJhZGl4Iik7aWYoIWMudGVzdCh0KXx8KHI9aSh0LG4pKS50b1N0cmluZyhuKSE9PXQpdGhyb3cgU3ludGF4RXJyb3IoYSk7cmV0dXJuIHMqcn19KX0sODQzMDk6ZnVuY3Rpb24odCxlLG4peyJ1c2Ugc3RyaWN0Ijt2YXIgcj1uKDE0MDQ0KSxvPW4oODY0MDMpO3Ioe3RhcmdldDoiT2JqZWN0IixzdGF0OiEwfSx7aXRlcmF0ZUVudHJpZXM6ZnVuY3Rpb24odCl7cmV0dXJuIG5ldyBvKHQsImVudHJpZXMiKX19KX0sNzI5NjM6ZnVuY3Rpb24odCxlLG4peyJ1c2Ugc3RyaWN0Ijt2YXIgcj1uKDE0MDQ0KSxvPW4oODY0MDMpO3Ioe3RhcmdldDoiT2JqZWN0IixzdGF0OiEwfSx7aXRlcmF0ZUtleXM6ZnVuY3Rpb24odCl7cmV0dXJuIG5ldyBvKHQsImtleXMiKX19KX0sNTYzNTk6ZnVuY3Rpb24odCxlLG4peyJ1c2Ugc3RyaWN0Ijt2YXIgcj1uKDE0MDQ0KSxvPW4oODY0MDMpO3Ioe3RhcmdldDoiT2JqZWN0IixzdGF0OiEwfSx7aXRlcmF0ZVZhbHVlczpmdW5jdGlvbih0KXtyZXR1cm4gbmV3IG8odCwidmFsdWVzIil9fSl9LDIwMjM0OmZ1bmN0aW9uKHQsZSxuKXsidXNlIHN0cmljdCI7dmFyIHI9bigxNDA0NCksbz1uKDYyNTU2KSxpPW4oNjc1MzgpLGE9big4NjQ3MCksYz1uKDg3NTc5KSxzPW4oMTA1OTIpLHU9big1OTM3OSksbD1uKDM3NjIwKS5mLGY9big2Njk3MSksZD1uKDE5MjYpLHA9bigzMTA3NCksaD1uKDQxMzM0KSx2PW4oODM2MjApLGc9bigyMzcyNCkseT1uKDg5ODI3KSxtPWcoIm9ic2VydmFibGUiKSxiPXkuZ2V0LHg9eS5zZXQsdz1mdW5jdGlvbih0KXtyZXR1cm4gbnVsbD09dD92b2lkIDA6YSh0KX0sRT1mdW5jdGlvbih0KXt2YXIgZT10LmNsZWFudXA7aWYoZSl7dC5jbGVhbnVwPXZvaWQgMDt0cnl7ZSgpfWNhdGNoKHQpe3YodCl9fX0saj1mdW5jdGlvbih0KXtyZXR1cm4gdm9pZCAwPT09dC5vYnNlcnZlcn0sQz1mdW5jdGlvbih0LGUpe2lmKCFvKXt0LmNsb3NlZD0hMDt2YXIgbj1lLnN1YnNjcmlwdGlvbk9ic2VydmVyO24mJihuLmNsb3NlZD0hMCl9ZS5vYnNlcnZlcj12b2lkIDB9LGs9ZnVuY3Rpb24odCxlKXt2YXIgbixyPXgodGhpcyx7Y2xlYW51cDp2b2lkIDAsb2JzZXJ2ZXI6Yyh0KSxzdWJzY3JpcHRpb25PYnNlcnZlcjp2b2lkIDB9KTtvfHwodGhpcy5jbG9zZWQ9ITEpO3RyeXsobj13KHQuc3RhcnQpKSYmbi5jYWxsKHQsdGhpcyl9Y2F0Y2godCl7dih0KX1pZighaihyKSl7dmFyIGk9ci5zdWJzY3JpcHRpb25PYnNlcnZlcj1uZXcgUyh0aGlzKTt0cnl7dmFyIHM9ZShpKSx1PXM7bnVsbCE9cyYmKHIuY2xlYW51cD0iZnVuY3Rpb24iPT10eXBlb2Ygcy51bnN1YnNjcmliZT9mdW5jdGlvbigpe3UudW5zdWJzY3JpYmUoKX06YShzKSl9Y2F0Y2godCl7cmV0dXJuIHZvaWQgaS5lcnJvcih0KX1qKHIpJiZFKHIpfX07ay5wcm90b3R5cGU9ZCh7fSx7dW5zdWJzY3JpYmU6ZnVuY3Rpb24oKXt2YXIgdD1iKHRoaXMpO2oodCl8fChDKHRoaXMsdCksRSh0KSl9fSksbyYmbChrLnByb3RvdHlwZSwiY2xvc2VkIix7Y29uZmlndXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiBqKGIodGhpcykpfX0pO3ZhciBTPWZ1bmN0aW9uKHQpe3godGhpcyx7c3Vic2NyaXB0aW9uOnR9KSxvfHwodGhpcy5jbG9zZWQ9ITEpfTtTLnByb3RvdHlwZT1kKHt9LHtuZXh0OmZ1bmN0aW9uKHQpe3ZhciBlPWIoYih0aGlzKS5zdWJzY3JpcHRpb24pO2lmKCFqKGUpKXt2YXIgbj1lLm9ic2VydmVyO3RyeXt2YXIgcj13KG4ubmV4dCk7ciYmci5jYWxsKG4sdCl9Y2F0Y2godCl7dih0KX19fSxlcnJvcjpmdW5jdGlvbih0KXt2YXIgZT1iKHRoaXMpLnN1YnNjcmlwdGlvbixuPWIoZSk7aWYoIWoobikpe3ZhciByPW4ub2JzZXJ2ZXI7QyhlLG4pO3RyeXt2YXIgbz13KHIuZXJyb3IpO28/by5jYWxsKHIsdCk6dih0KX1jYXRjaCh0KXt2KHQpfUUobil9fSxjb21wbGV0ZTpmdW5jdGlvbigpe3ZhciB0PWIodGhpcykuc3Vic2NyaXB0aW9uLGU9Yih0KTtpZighaihlKSl7dmFyIG49ZS5vYnNlcnZlcjtDKHQsZSk7dHJ5e3ZhciByPXcobi5jb21wbGV0ZSk7ciYmci5jYWxsKG4pfWNhdGNoKHQpe3YodCl9RShlKX19fSksbyYmbChTLnByb3RvdHlwZSwiY2xvc2VkIix7Y29uZmlndXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiBqKGIoYih0aGlzKS5zdWJzY3JpcHRpb24pKX19KTt2YXIgTz1mdW5jdGlvbih0KXt1KHRoaXMsTywiT2JzZXJ2YWJsZSIpLHgodGhpcyx7c3Vic2NyaWJlcjphKHQpfSl9O2QoTy5wcm90b3R5cGUse3N1YnNjcmliZTpmdW5jdGlvbih0KXt2YXIgZT1hcmd1bWVudHMubGVuZ3RoO3JldHVybiBuZXcgaygiZnVuY3Rpb24iPT10eXBlb2YgdD97bmV4dDp0LGVycm9yOmU+MT9hcmd1bWVudHNbMV06dm9pZCAwLGNvbXBsZXRlOmU+Mj9hcmd1bWVudHNbMl06dm9pZCAwfTpzKHQpP3Q6e30sYih0aGlzKS5zdWJzY3JpYmVyKX19KSxkKE8se2Zyb206ZnVuY3Rpb24odCl7dmFyIGU9ImZ1bmN0aW9uIj09dHlwZW9mIHRoaXM/dGhpczpPLG49dyhjKHQpW21dKTtpZihuKXt2YXIgcj1jKG4uY2FsbCh0KSk7cmV0dXJuIHIuY29uc3RydWN0b3I9PT1lP3I6bmV3IGUoKGZ1bmN0aW9uKHQpe3JldHVybiByLnN1YnNjcmliZSh0KX0pKX12YXIgbz1wKHQpO3JldHVybiBuZXcgZSgoZnVuY3Rpb24odCl7aChvLChmdW5jdGlvbihlKXtpZih0Lm5leHQoZSksdC5jbG9zZWQpcmV0dXJuIGguc3RvcCgpfSksdm9pZCAwLCExLCEwKSx0LmNvbXBsZXRlKCl9KSl9LG9mOmZ1bmN0aW9uKCl7Zm9yKHZhciB0PSJmdW5jdGlvbiI9PXR5cGVvZiB0aGlzP3RoaXM6TyxlPWFyZ3VtZW50cy5sZW5ndGgsbj1uZXcgQXJyYXkoZSkscj0wO3I8ZTspbltyXT1hcmd1bWVudHNbcisrXTtyZXR1cm4gbmV3IHQoKGZ1bmN0aW9uKHQpe2Zvcih2YXIgcj0wO3I8ZTtyKyspaWYodC5uZXh0KG5bcl0pLHQuY2xvc2VkKXJldHVybjt0LmNvbXBsZXRlKCl9KSl9fSksZihPLnByb3RvdHlwZSxtLChmdW5jdGlvbigpe3JldHVybiB0aGlzfSkpLHIoe2dsb2JhbDohMH0se09ic2VydmFibGU6T30pLGkoIk9ic2VydmFibGUiKX0sMjc3NTpmdW5jdGlvbih0LGUsbil7bigxNzYyOSl9LDczMjIwOmZ1bmN0aW9uKHQsZSxuKXsidXNlIHN0cmljdCI7dmFyIHI9bigxNDA0NCksbz1uKDg2NDcwKSxpPW4oNzcwMSksYT1uKDgzMDgzKSxjPW4oMzExNSkscz1uKDQxMzM0KSx1PSJObyBvbmUgcHJvbWlzZSByZXNvbHZlZCI7cih7dGFyZ2V0OiJQcm9taXNlIixzdGF0OiEwfSx7YW55OmZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMsbj1hLmYoZSkscj1uLnJlc29sdmUsbD1uLnJlamVjdCxmPWMoKGZ1bmN0aW9uKCl7dmFyIG49byhlLnJlc29sdmUpLGE9W10sYz0wLGY9MSxkPSExO3ModCwoZnVuY3Rpb24odCl7dmFyIG89YysrLHM9ITE7YS5wdXNoKHZvaWQgMCksZisrLG4uY2FsbChlLHQpLnRoZW4oKGZ1bmN0aW9uKHQpe3N8fGR8fChkPSEwLHIodCkpfSksKGZ1bmN0aW9uKHQpe3N8fGR8fChzPSEwLGFbb109dCwtLWZ8fGwobmV3KGkoIkFnZ3JlZ2F0ZUVycm9yIikpKGEsdSkpKX0pKX0pKSwtLWZ8fGwobmV3KGkoIkFnZ3JlZ2F0ZUVycm9yIikpKGEsdSkpfSkpO3JldHVybiBmLmVycm9yJiZsKGYudmFsdWUpLG4ucHJvbWlzZX19KX0sMTEwNzE6ZnVuY3Rpb24odCxlLG4peyJ1c2Ugc3RyaWN0Ijt2YXIgcj1uKDE0MDQ0KSxvPW4oODMwODMpLGk9bigzMTE1KTtyKHt0YXJnZXQ6IlByb21pc2UiLHN0YXQ6ITB9LHt0cnk6ZnVuY3Rpb24odCl7dmFyIGU9by5mKHRoaXMpLG49aSh0KTtyZXR1cm4obi5lcnJvcj9lLnJlamVjdDplLnJlc29sdmUpKG4udmFsdWUpLGUucHJvbWlzZX19KX0sNDk2NDA6ZnVuY3Rpb24odCxlLG4pe3ZhciByPW4oMTQwNDQpLG89big3NzAyMCksaT1uKDg3NTc5KSxhPW8udG9LZXksYz1vLnNldDtyKHt0YXJnZXQ6IlJlZmxlY3QiLHN0YXQ6ITB9LHtkZWZpbmVNZXRhZGF0YTpmdW5jdGlvbih0LGUsbil7dmFyIHI9YXJndW1lbnRzLmxlbmd0aDw0P3ZvaWQgMDphKGFyZ3VtZW50c1szXSk7Yyh0LGUsaShuKSxyKX19KX0sNzQ5NjM6ZnVuY3Rpb24odCxlLG4pe3ZhciByPW4oMTQwNDQpLG89big3NzAyMCksaT1uKDg3NTc5KSxhPW8udG9LZXksYz1vLmdldE1hcCxzPW8uc3RvcmU7cih7dGFyZ2V0OiJSZWZsZWN0IixzdGF0OiEwfSx7ZGVsZXRlTWV0YWRhdGE6ZnVuY3Rpb24odCxlKXt2YXIgbj1hcmd1bWVudHMubGVuZ3RoPDM/dm9pZCAwOmEoYXJndW1lbnRzWzJdKSxyPWMoaShlKSxuLCExKTtpZih2b2lkIDA9PT1yfHwhci5kZWxldGUodCkpcmV0dXJuITE7aWYoci5zaXplKXJldHVybiEwO3ZhciBvPXMuZ2V0KGUpO3JldHVybiBvLmRlbGV0ZShuKSwhIW8uc2l6ZXx8cy5kZWxldGUoZSl9fSl9LDQ5MTU1OmZ1bmN0aW9uKHQsZSxuKXt2YXIgcj1uKDE0MDQ0KSxvPW4oNzQwNjEpLGk9big3NzAyMCksYT1uKDg3NTc5KSxjPW4oNjQ5NjUpLHM9big0MTMzNCksdT1pLmtleXMsbD1pLnRvS2V5LGY9ZnVuY3Rpb24odCxlKXt2YXIgbj11KHQsZSkscj1jKHQpO2lmKG51bGw9PT1yKXJldHVybiBuO3ZhciBpLGEsbD1mKHIsZSk7cmV0dXJuIGwubGVuZ3RoP24ubGVuZ3RoPyhpPW5ldyBvKG4uY29uY2F0KGwpKSxzKGksKGE9W10pLnB1c2gsYSksYSk6bDpufTtyKHt0YXJnZXQ6IlJlZmxlY3QiLHN0YXQ6ITB9LHtnZXRNZXRhZGF0YUtleXM6ZnVuY3Rpb24odCl7dmFyIGU9YXJndW1lbnRzLmxlbmd0aDwyP3ZvaWQgMDpsKGFyZ3VtZW50c1sxXSk7cmV0dXJuIGYoYSh0KSxlKX19KX0sNjk0NTk6ZnVuY3Rpb24odCxlLG4pe3ZhciByPW4oMTQwNDQpLG89big3NzAyMCksaT1uKDg3NTc5KSxhPW4oNjQ5NjUpLGM9by5oYXMscz1vLmdldCx1PW8udG9LZXksbD1mdW5jdGlvbih0LGUsbil7aWYoYyh0LGUsbikpcmV0dXJuIHModCxlLG4pO3ZhciByPWEoZSk7cmV0dXJuIG51bGwhPT1yP2wodCxyLG4pOnZvaWQgMH07cih7dGFyZ2V0OiJSZWZsZWN0IixzdGF0OiEwfSx7Z2V0TWV0YWRhdGE6ZnVuY3Rpb24odCxlKXt2YXIgbj1hcmd1bWVudHMubGVuZ3RoPDM/dm9pZCAwOnUoYXJndW1lbnRzWzJdKTtyZXR1cm4gbCh0LGkoZSksbil9fSl9LDg3NDc0OmZ1bmN0aW9uKHQsZSxuKXt2YXIgcj1uKDE0MDQ0KSxvPW4oNzcwMjApLGk9big4NzU3OSksYT1vLmtleXMsYz1vLnRvS2V5O3Ioe3RhcmdldDoiUmVmbGVjdCIsc3RhdDohMH0se2dldE93bk1ldGFkYXRhS2V5czpmdW5jdGlvbih0KXt2YXIgZT1hcmd1bWVudHMubGVuZ3RoPDI/dm9pZCAwOmMoYXJndW1lbnRzWzFdKTtyZXR1cm4gYShpKHQpLGUpfX0pfSwyNjg5NjpmdW5jdGlvbih0LGUsbil7dmFyIHI9bigxNDA0NCksbz1uKDc3MDIwKSxpPW4oODc1NzkpLGE9by5nZXQsYz1vLnRvS2V5O3Ioe3RhcmdldDoiUmVmbGVjdCIsc3RhdDohMH0se2dldE93bk1ldGFkYXRhOmZ1bmN0aW9uKHQsZSl7dmFyIG49YXJndW1lbnRzLmxlbmd0aDwzP3ZvaWQgMDpjKGFyZ3VtZW50c1syXSk7cmV0dXJuIGEodCxpKGUpLG4pfX0pfSw5NzQzMzpmdW5jdGlvbih0LGUsbil7dmFyIHI9bigxNDA0NCksbz1uKDc3MDIwKSxpPW4oODc1NzkpLGE9big2NDk2NSksYz1vLmhhcyxzPW8udG9LZXksdT1mdW5jdGlvbih0LGUsbil7aWYoYyh0LGUsbikpcmV0dXJuITA7dmFyIHI9YShlKTtyZXR1cm4gbnVsbCE9PXImJnUodCxyLG4pfTtyKHt0YXJnZXQ6IlJlZmxlY3QiLHN0YXQ6ITB9LHtoYXNNZXRhZGF0YTpmdW5jdGlvbih0LGUpe3ZhciBuPWFyZ3VtZW50cy5sZW5ndGg8Mz92b2lkIDA6cyhhcmd1bWVudHNbMl0pO3JldHVybiB1KHQsaShlKSxuKX19KX0sNzEwODpmdW5jdGlvbih0LGUsbil7dmFyIHI9bigxNDA0NCksbz1uKDc3MDIwKSxpPW4oODc1NzkpLGE9by5oYXMsYz1vLnRvS2V5O3Ioe3RhcmdldDoiUmVmbGVjdCIsc3RhdDohMH0se2hhc093bk1ldGFkYXRhOmZ1bmN0aW9uKHQsZSl7dmFyIG49YXJndW1lbnRzLmxlbmd0aDwzP3ZvaWQgMDpjKGFyZ3VtZW50c1syXSk7cmV0dXJuIGEodCxpKGUpLG4pfX0pfSwyMzYzMTpmdW5jdGlvbih0LGUsbil7dmFyIHI9bigxNDA0NCksbz1uKDc3MDIwKSxpPW4oODc1NzkpLGE9by50b0tleSxjPW8uc2V0O3Ioe3RhcmdldDoiUmVmbGVjdCIsc3RhdDohMH0se21ldGFkYXRhOmZ1bmN0aW9uKHQsZSl7cmV0dXJuIGZ1bmN0aW9uKG4scil7Yyh0LGUsaShuKSxhKHIpKX19fSl9LDkzOTpmdW5jdGlvbih0LGUsbil7InVzZSBzdHJpY3QiO3ZhciByPW4oMTQwNDQpLG89big2NTY3MiksaT1uKDk4MTc5KTtyKHt0YXJnZXQ6IlNldCIscHJvdG86ITAscmVhbDohMCxmb3JjZWQ6b30se2FkZEFsbDpmdW5jdGlvbigpe3JldHVybiBpLmFwcGx5KHRoaXMsYXJndW1lbnRzKX19KX0sNjE0Njc6ZnVuY3Rpb24odCxlLG4peyJ1c2Ugc3RyaWN0Ijt2YXIgcj1uKDE0MDQ0KSxvPW4oNjU2NzIpLGk9bigxNDY2KTtyKHt0YXJnZXQ6IlNldCIscHJvdG86ITAscmVhbDohMCxmb3JjZWQ6b30se2RlbGV0ZUFsbDpmdW5jdGlvbigpe3JldHVybiBpLmFwcGx5KHRoaXMsYXJndW1lbnRzKX19KX0sOTgzNTA6ZnVuY3Rpb24odCxlLG4peyJ1c2Ugc3RyaWN0Ijt2YXIgcj1uKDE0MDQ0KSxvPW4oNjU2NzIpLGk9big3NzAxKSxhPW4oODc1NzkpLGM9big4NjQ3MCkscz1uKDEzOTc5KSx1PW4oNDEzMzQpO3Ioe3RhcmdldDoiU2V0Iixwcm90bzohMCxyZWFsOiEwLGZvcmNlZDpvfSx7ZGlmZmVyZW5jZTpmdW5jdGlvbih0KXt2YXIgZT1hKHRoaXMpLG49bmV3KHMoZSxpKCJTZXQiKSkpKGUpLHI9YyhuLmRlbGV0ZSk7cmV0dXJuIHUodCwoZnVuY3Rpb24odCl7ci5jYWxsKG4sdCl9KSksbn19KX0sMTYxMjc6ZnVuY3Rpb24odCxlLG4peyJ1c2Ugc3RyaWN0Ijt2YXIgcj1uKDE0MDQ0KSxvPW4oNjU2NzIpLGk9big4NzU3OSksYT1uKDQ2MTMwKSxjPW4oNDE0NzUpLHM9big0MTMzNCk7cih7dGFyZ2V0OiJTZXQiLHByb3RvOiEwLHJlYWw6ITAsZm9yY2VkOm99LHtldmVyeTpmdW5jdGlvbih0KXt2YXIgZT1pKHRoaXMpLG49YyhlKSxyPWEodCxhcmd1bWVudHMubGVuZ3RoPjE/YXJndW1lbnRzWzFdOnZvaWQgMCwzKTtyZXR1cm4hcyhuLChmdW5jdGlvbih0KXtpZighcih0LHQsZSkpcmV0dXJuIHMuc3RvcCgpfSksdm9pZCAwLCExLCEwKS5zdG9wcGVkfX0pfSw1MzU4OTpmdW5jdGlvbih0LGUsbil7InVzZSBzdHJpY3QiO3ZhciByPW4oMTQwNDQpLG89big2NTY3MiksaT1uKDc3MDEpLGE9big4NzU3OSksYz1uKDg2NDcwKSxzPW4oNDYxMzApLHU9bigxMzk3OSksbD1uKDQxNDc1KSxmPW4oNDEzMzQpO3Ioe3RhcmdldDoiU2V0Iixwcm90bzohMCxyZWFsOiEwLGZvcmNlZDpvfSx7ZmlsdGVyOmZ1bmN0aW9uKHQpe3ZhciBlPWEodGhpcyksbj1sKGUpLHI9cyh0LGFyZ3VtZW50cy5sZW5ndGg+MT9hcmd1bWVudHNbMV06dm9pZCAwLDMpLG89bmV3KHUoZSxpKCJTZXQiKSkpLGQ9YyhvLmFkZCk7cmV0dXJuIGYobiwoZnVuY3Rpb24odCl7cih0LHQsZSkmJmQuY2FsbChvLHQpfSksdm9pZCAwLCExLCEwKSxvfX0pfSw4MTA0MjpmdW5jdGlvbih0LGUsbil7InVzZSBzdHJpY3QiO3ZhciByPW4oMTQwNDQpLG89big2NTY3MiksaT1uKDg3NTc5KSxhPW4oNDYxMzApLGM9big0MTQ3NSkscz1uKDQxMzM0KTtyKHt0YXJnZXQ6IlNldCIscHJvdG86ITAscmVhbDohMCxmb3JjZWQ6b30se2ZpbmQ6ZnVuY3Rpb24odCl7dmFyIGU9aSh0aGlzKSxuPWMoZSkscj1hKHQsYXJndW1lbnRzLmxlbmd0aD4xP2FyZ3VtZW50c1sxXTp2b2lkIDAsMyk7cmV0dXJuIHMobiwoZnVuY3Rpb24odCl7aWYocih0LHQsZSkpcmV0dXJuIHMuc3RvcCh0KX0pLHZvaWQgMCwhMSwhMCkucmVzdWx0fX0pfSw5NzI4NDpmdW5jdGlvbih0LGUsbil7bigxNDA0NCkoe3RhcmdldDoiU2V0IixzdGF0OiEwfSx7ZnJvbTpuKDEyOTAxKX0pfSw0MTcxODpmdW5jdGlvbih0LGUsbil7InVzZSBzdHJpY3QiO3ZhciByPW4oMTQwNDQpLG89big2NTY3MiksaT1uKDc3MDEpLGE9big4NzU3OSksYz1uKDg2NDcwKSxzPW4oMTM5NzkpLHU9big0MTMzNCk7cih7dGFyZ2V0OiJTZXQiLHByb3RvOiEwLHJlYWw6ITAsZm9yY2VkOm99LHtpbnRlcnNlY3Rpb246ZnVuY3Rpb24odCl7dmFyIGU9YSh0aGlzKSxuPW5ldyhzKGUsaSgiU2V0IikpKSxyPWMoZS5oYXMpLG89YyhuLmFkZCk7cmV0dXJuIHUodCwoZnVuY3Rpb24odCl7ci5jYWxsKGUsdCkmJm8uY2FsbChuLHQpfSkpLG59fSl9LDU3MzcxOmZ1bmN0aW9uKHQsZSxuKXsidXNlIHN0cmljdCI7dmFyIHI9bigxNDA0NCksbz1uKDY1NjcyKSxpPW4oODc1NzkpLGE9big4NjQ3MCksYz1uKDQxMzM0KTtyKHt0YXJnZXQ6IlNldCIscHJvdG86ITAscmVhbDohMCxmb3JjZWQ6b30se2lzRGlzam9pbnRGcm9tOmZ1bmN0aW9uKHQpe3ZhciBlPWkodGhpcyksbj1hKGUuaGFzKTtyZXR1cm4hYyh0LChmdW5jdGlvbih0KXtpZighMD09PW4uY2FsbChlLHQpKXJldHVybiBjLnN0b3AoKX0pKS5zdG9wcGVkfX0pfSw4OTIzMDpmdW5jdGlvbih0LGUsbil7InVzZSBzdHJpY3QiO3ZhciByPW4oMTQwNDQpLG89big2NTY3MiksaT1uKDc3MDEpLGE9big4NzU3OSksYz1uKDg2NDcwKSxzPW4oMzEwNzQpLHU9big0MTMzNCk7cih7dGFyZ2V0OiJTZXQiLHByb3RvOiEwLHJlYWw6ITAsZm9yY2VkOm99LHtpc1N1YnNldE9mOmZ1bmN0aW9uKHQpe3ZhciBlPXModGhpcyksbj1hKHQpLHI9bi5oYXM7cmV0dXJuImZ1bmN0aW9uIiE9dHlwZW9mIHImJihuPW5ldyhpKCJTZXQiKSkodCkscj1jKG4uaGFzKSksIXUoZSwoZnVuY3Rpb24odCl7aWYoITE9PT1yLmNhbGwobix0KSlyZXR1cm4gdS5zdG9wKCl9KSx2b2lkIDAsITEsITApLnN0b3BwZWR9fSl9LDMyMzAzOmZ1bmN0aW9uKHQsZSxuKXsidXNlIHN0cmljdCI7dmFyIHI9bigxNDA0NCksbz1uKDY1NjcyKSxpPW4oODc1NzkpLGE9big4NjQ3MCksYz1uKDQxMzM0KTtyKHt0YXJnZXQ6IlNldCIscHJvdG86ITAscmVhbDohMCxmb3JjZWQ6b30se2lzU3VwZXJzZXRPZjpmdW5jdGlvbih0KXt2YXIgZT1pKHRoaXMpLG49YShlLmhhcyk7cmV0dXJuIWModCwoZnVuY3Rpb24odCl7aWYoITE9PT1uLmNhbGwoZSx0KSlyZXR1cm4gYy5zdG9wKCl9KSkuc3RvcHBlZH19KX0sMTY3NTc6ZnVuY3Rpb24odCxlLG4peyJ1c2Ugc3RyaWN0Ijt2YXIgcj1uKDE0MDQ0KSxvPW4oNjU2NzIpLGk9big4NzU3OSksYT1uKDQxNDc1KSxjPW4oNDEzMzQpO3Ioe3RhcmdldDoiU2V0Iixwcm90bzohMCxyZWFsOiEwLGZvcmNlZDpvfSx7am9pbjpmdW5jdGlvbih0KXt2YXIgZT1pKHRoaXMpLG49YShlKSxyPXZvaWQgMD09PXQ/IiwiOlN0cmluZyh0KSxvPVtdO3JldHVybiBjKG4sby5wdXNoLG8sITEsITApLG8uam9pbihyKX19KX0sMTEwNzQ6ZnVuY3Rpb24odCxlLG4peyJ1c2Ugc3RyaWN0Ijt2YXIgcj1uKDE0MDQ0KSxvPW4oNjU2NzIpLGk9big3NzAxKSxhPW4oODc1NzkpLGM9big4NjQ3MCkscz1uKDQ2MTMwKSx1PW4oMTM5NzkpLGw9big0MTQ3NSksZj1uKDQxMzM0KTtyKHt0YXJnZXQ6IlNldCIscHJvdG86ITAscmVhbDohMCxmb3JjZWQ6b30se21hcDpmdW5jdGlvbih0KXt2YXIgZT1hKHRoaXMpLG49bChlKSxyPXModCxhcmd1bWVudHMubGVuZ3RoPjE/YXJndW1lbnRzWzFdOnZvaWQgMCwzKSxvPW5ldyh1KGUsaSgiU2V0IikpKSxkPWMoby5hZGQpO3JldHVybiBmKG4sKGZ1bmN0aW9uKHQpe2QuY2FsbChvLHIodCx0LGUpKX0pLHZvaWQgMCwhMSwhMCksb319KX0sMjQ1OTg6ZnVuY3Rpb24odCxlLG4pe24oMTQwNDQpKHt0YXJnZXQ6IlNldCIsc3RhdDohMH0se29mOm4oMjUwMjYpfSl9LDMzNTM5OmZ1bmN0aW9uKHQsZSxuKXsidXNlIHN0cmljdCI7dmFyIHI9bigxNDA0NCksbz1uKDY1NjcyKSxpPW4oODc1NzkpLGE9big4NjQ3MCksYz1uKDQxNDc1KSxzPW4oNDEzMzQpO3Ioe3RhcmdldDoiU2V0Iixwcm90bzohMCxyZWFsOiEwLGZvcmNlZDpvfSx7cmVkdWNlOmZ1bmN0aW9uKHQpe3ZhciBlPWkodGhpcyksbj1jKGUpLHI9YXJndW1lbnRzLmxlbmd0aDwyLG89cj92b2lkIDA6YXJndW1lbnRzWzFdO2lmKGEodCkscyhuLChmdW5jdGlvbihuKXtyPyhyPSExLG89bik6bz10KG8sbixuLGUpfSksdm9pZCAwLCExLCEwKSxyKXRocm93IFR5cGVFcnJvcigiUmVkdWNlIG9mIGVtcHR5IHNldCB3aXRoIG5vIGluaXRpYWwgdmFsdWUiKTtyZXR1cm4gb319KX0sMjQxMDM6ZnVuY3Rpb24odCxlLG4peyJ1c2Ugc3RyaWN0Ijt2YXIgcj1uKDE0MDQ0KSxvPW4oNjU2NzIpLGk9big4NzU3OSksYT1uKDQ2MTMwKSxjPW4oNDE0NzUpLHM9big0MTMzNCk7cih7dGFyZ2V0OiJTZXQiLHByb3RvOiEwLHJlYWw6ITAsZm9yY2VkOm99LHtzb21lOmZ1bmN0aW9uKHQpe3ZhciBlPWkodGhpcyksbj1jKGUpLHI9YSh0LGFyZ3VtZW50cy5sZW5ndGg+MT9hcmd1bWVudHNbMV06dm9pZCAwLDMpO3JldHVybiBzKG4sKGZ1bmN0aW9uKHQpe2lmKHIodCx0LGUpKXJldHVybiBzLnN0b3AoKX0pLHZvaWQgMCwhMSwhMCkuc3RvcHBlZH19KX0sNjYxODE6ZnVuY3Rpb24odCxlLG4peyJ1c2Ugc3RyaWN0Ijt2YXIgcj1uKDE0MDQ0KSxvPW4oNjU2NzIpLGk9big3NzAxKSxhPW4oODc1NzkpLGM9big4NjQ3MCkscz1uKDEzOTc5KSx1PW4oNDEzMzQpO3Ioe3RhcmdldDoiU2V0Iixwcm90bzohMCxyZWFsOiEwLGZvcmNlZDpvfSx7c3ltbWV0cmljRGlmZmVyZW5jZTpmdW5jdGlvbih0KXt2YXIgZT1hKHRoaXMpLG49bmV3KHMoZSxpKCJTZXQiKSkpKGUpLHI9YyhuLmRlbGV0ZSksbz1jKG4uYWRkKTtyZXR1cm4gdSh0LChmdW5jdGlvbih0KXtyLmNhbGwobix0KXx8by5jYWxsKG4sdCl9KSksbn19KX0sNjI5MTpmdW5jdGlvbih0LGUsbil7InVzZSBzdHJpY3QiO3ZhciByPW4oMTQwNDQpLG89big2NTY3MiksaT1uKDc3MDEpLGE9big4NzU3OSksYz1uKDg2NDcwKSxzPW4oMTM5NzkpLHU9big0MTMzNCk7cih7dGFyZ2V0OiJTZXQiLHByb3RvOiEwLHJlYWw6ITAsZm9yY2VkOm99LHt1bmlvbjpmdW5jdGlvbih0KXt2YXIgZT1hKHRoaXMpLG49bmV3KHMoZSxpKCJTZXQiKSkpKGUpO3JldHVybiB1KHQsYyhuLmFkZCksbiksbn19KX0sNzM0NjA6ZnVuY3Rpb24odCxlLG4peyJ1c2Ugc3RyaWN0Ijt2YXIgcj1uKDE0MDQ0KSxvPW4oNjAxNDApLmNoYXJBdDtyKHt0YXJnZXQ6IlN0cmluZyIscHJvdG86ITB9LHthdDpmdW5jdGlvbih0KXtyZXR1cm4gbyh0aGlzLHQpfX0pfSwzMjA2MjpmdW5jdGlvbih0LGUsbil7InVzZSBzdHJpY3QiO3ZhciByPW4oMTQwNDQpLG89big3MTIwMSksaT1uKDcwMTMyKSxhPW4oODk4MjcpLGM9big2MDE0MCkscz1jLmNvZGVBdCx1PWMuY2hhckF0LGw9IlN0cmluZyBJdGVyYXRvciIsZj1hLnNldCxkPWEuZ2V0dGVyRm9yKGwpLHA9bygoZnVuY3Rpb24odCl7Zih0aGlzLHt0eXBlOmwsc3RyaW5nOnQsaW5kZXg6MH0pfSksIlN0cmluZyIsKGZ1bmN0aW9uKCl7dmFyIHQsZT1kKHRoaXMpLG49ZS5zdHJpbmcscj1lLmluZGV4O3JldHVybiByPj1uLmxlbmd0aD97dmFsdWU6dm9pZCAwLGRvbmU6ITB9Oih0PXUobixyKSxlLmluZGV4Kz10Lmxlbmd0aCx7dmFsdWU6e2NvZGVQb2ludDpzKHQsMCkscG9zaXRpb246cn0sZG9uZTohMX0pfSkpO3Ioe3RhcmdldDoiU3RyaW5nIixwcm90bzohMH0se2NvZGVQb2ludHM6ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IHAoU3RyaW5nKGkodGhpcykpKX19KX0sNzQ1MjU6ZnVuY3Rpb24odCxlLG4pe24oODEyNzcpfSw2NDAyNjpmdW5jdGlvbih0LGUsbil7InVzZSBzdHJpY3QiO3ZhciByPW4oMTQwNDQpLG89big3MDEzMiksaT1uKDQzMjIzKSxhPW4oMjU0MTkpLGM9bigyMzcyNCkscz1uKDY1NjcyKSx1PWMoInJlcGxhY2UiKSxsPVJlZ0V4cC5wcm90b3R5cGU7cih7dGFyZ2V0OiJTdHJpbmciLHByb3RvOiEwfSx7cmVwbGFjZUFsbDpmdW5jdGlvbiB0KGUsbil7dmFyIHIsYyxmLGQscCxoLHYsZyx5PW8odGhpcyk7aWYobnVsbCE9ZSl7aWYoKHI9aShlKSkmJiF+U3RyaW5nKG8oImZsYWdzImluIGw/ZS5mbGFnczphLmNhbGwoZSkpKS5pbmRleE9mKCJnIikpdGhyb3cgVHlwZUVycm9yKCJgLnJlcGxhY2VBbGxgIGRvZXMgbm90IGFsbG93IG5vbi1nbG9iYWwgcmVnZXhlcyIpO2lmKHZvaWQgMCE9PShjPWVbdV0pKXJldHVybiBjLmNhbGwoZSx5LG4pO2lmKHMmJnIpcmV0dXJuIFN0cmluZyh5KS5yZXBsYWNlKGUsbil9aWYoZj1TdHJpbmcoeSksIiI9PT0oZD1TdHJpbmcoZSkpKXJldHVybiB0LmNhbGwoZiwvKD86KS9nLG4pO2lmKHA9Zi5zcGxpdChkKSwiZnVuY3Rpb24iIT10eXBlb2YgbilyZXR1cm4gcC5qb2luKFN0cmluZyhuKSk7Zm9yKHY9KGg9cFswXSkubGVuZ3RoLGc9MTtnPHAubGVuZ3RoO2crKyloKz1TdHJpbmcobihkLHYsZikpLHYrPWQubGVuZ3RoK3BbZ10ubGVuZ3RoLGgrPXBbZ107cmV0dXJuIGh9fSl9LDY5NDI6ZnVuY3Rpb24odCxlLG4pe24oOTIyNzUpKCJhc3luY0Rpc3Bvc2UiKX0sOTQyNDk6ZnVuY3Rpb24odCxlLG4pe24oOTIyNzUpKCJkaXNwb3NlIil9LDUxMzc0OmZ1bmN0aW9uKHQsZSxuKXtuKDkyMjc1KSgib2JzZXJ2YWJsZSIpfSw1Mzc3MjpmdW5jdGlvbih0LGUsbil7big5MjI3NSkoInBhdHRlcm5NYXRjaCIpfSw4NjA3NzpmdW5jdGlvbih0LGUsbil7big5MjI3NSkoInJlcGxhY2VBbGwiKX0sNjQ4MTM6ZnVuY3Rpb24odCxlLG4peyJ1c2Ugc3RyaWN0Ijt2YXIgcj1uKDE0MDQ0KSxvPW4oNjU2NzIpLGk9bigxNDY2KTtyKHt0YXJnZXQ6IldlYWtNYXAiLHByb3RvOiEwLHJlYWw6ITAsZm9yY2VkOm99LHtkZWxldGVBbGw6ZnVuY3Rpb24oKXtyZXR1cm4gaS5hcHBseSh0aGlzLGFyZ3VtZW50cyl9fSl9LDk5OTc5OmZ1bmN0aW9uKHQsZSxuKXtuKDE0MDQ0KSh7dGFyZ2V0OiJXZWFrTWFwIixzdGF0OiEwfSx7ZnJvbTpuKDEyOTAxKX0pfSwxODIwNTpmdW5jdGlvbih0LGUsbil7bigxNDA0NCkoe3RhcmdldDoiV2Vha01hcCIsc3RhdDohMH0se29mOm4oMjUwMjYpfSl9LDg3NTU1OmZ1bmN0aW9uKHQsZSxuKXsidXNlIHN0cmljdCI7bigxNDA0NCkoe3RhcmdldDoiV2Vha01hcCIscHJvdG86ITAscmVhbDohMCxmb3JjZWQ6big2NTY3Mil9LHt1cHNlcnQ6big0NzkyNyl9KX0sNjg5OTk6ZnVuY3Rpb24odCxlLG4peyJ1c2Ugc3RyaWN0Ijt2YXIgcj1uKDE0MDQ0KSxvPW4oNjU2NzIpLGk9big5ODE3OSk7cih7dGFyZ2V0OiJXZWFrU2V0Iixwcm90bzohMCxyZWFsOiEwLGZvcmNlZDpvfSx7YWRkQWxsOmZ1bmN0aW9uKCl7cmV0dXJuIGkuYXBwbHkodGhpcyxhcmd1bWVudHMpfX0pfSw1MzgyNDpmdW5jdGlvbih0LGUsbil7InVzZSBzdHJpY3QiO3ZhciByPW4oMTQwNDQpLG89big2NTY3MiksaT1uKDE0NjYpO3Ioe3RhcmdldDoiV2Vha1NldCIscHJvdG86ITAscmVhbDohMCxmb3JjZWQ6b30se2RlbGV0ZUFsbDpmdW5jdGlvbigpe3JldHVybiBpLmFwcGx5KHRoaXMsYXJndW1lbnRzKX19KX0sODU4OmZ1bmN0aW9uKHQsZSxuKXtuKDE0MDQ0KSh7dGFyZ2V0OiJXZWFrU2V0IixzdGF0OiEwfSx7ZnJvbTpuKDEyOTAxKX0pfSw2NDg5OTpmdW5jdGlvbih0LGUsbil7bigxNDA0NCkoe3RhcmdldDoiV2Vha1NldCIsc3RhdDohMH0se29mOm4oMjUwMjYpfSl9LDY3MDM5OmZ1bmN0aW9uKHQsZSxuKXt2YXIgcj1uKDg5NTU4KSxvPW4oNDcwOTQpLGk9bigzMTM2OCksYT1uKDY2OTcxKTtmb3IodmFyIGMgaW4gbyl7dmFyIHM9cltjXSx1PXMmJnMucHJvdG90eXBlO2lmKHUmJnUuZm9yRWFjaCE9PWkpdHJ5e2EodSwiZm9yRWFjaCIsaSl9Y2F0Y2godCl7dS5mb3JFYWNoPWl9fX0sNzk3OTk6ZnVuY3Rpb24odCxlLG4pe3ZhciByPW4oODk1NTgpLG89big0NzA5NCksaT1uKDUwMDYzKSxhPW4oNjY5NzEpLGM9bigyMzcyNCkscz1jKCJpdGVyYXRvciIpLHU9YygidG9TdHJpbmdUYWciKSxsPWkudmFsdWVzO2Zvcih2YXIgZiBpbiBvKXt2YXIgZD1yW2ZdLHA9ZCYmZC5wcm90b3R5cGU7aWYocCl7aWYocFtzXSE9PWwpdHJ5e2EocCxzLGwpfWNhdGNoKHQpe3Bbc109bH1pZihwW3VdfHxhKHAsdSxmKSxvW2ZdKWZvcih2YXIgaCBpbiBpKWlmKHBbaF0hPT1pW2hdKXRyeXthKHAsaCxpW2hdKX1jYXRjaCh0KXtwW2hdPWlbaF19fX19LDc0MDEwOmZ1bmN0aW9uKHQsZSxuKXt2YXIgcj1uKDE0MDQ0KSxvPW4oODk1NTgpLGk9bigyMTc0NCk7cih7Z2xvYmFsOiEwLGJpbmQ6ITAsZW51bWVyYWJsZTohMCxmb3JjZWQ6IW8uc2V0SW1tZWRpYXRlfHwhby5jbGVhckltbWVkaWF0ZX0se3NldEltbWVkaWF0ZTppLnNldCxjbGVhckltbWVkaWF0ZTppLmNsZWFyfSl9LDY1OTc2OmZ1bmN0aW9uKHQsZSxuKXt2YXIgcj1uKDE0MDQ0KSxvPW4oODk1NTgpLGk9big2NTU1NSksYT1uKDI0NTk0KSxjPW8ucHJvY2VzcyxzPSJwcm9jZXNzIj09YShjKTtyKHtnbG9iYWw6ITAsZW51bWVyYWJsZTohMCxub1RhcmdldEdldDohMH0se3F1ZXVlTWljcm90YXNrOmZ1bmN0aW9uKHQpe3ZhciBlPXMmJmMuZG9tYWluO2koZT9lLmJpbmQodCk6dCl9fSl9LDgxOTk0OmZ1bmN0aW9uKHQsZSxuKXt2YXIgcj1uKDE0MDQ0KSxvPW4oODk1NTgpLGk9bigzOTQ3NiksYT1bXS5zbGljZSxjPWZ1bmN0aW9uKHQpe3JldHVybiBmdW5jdGlvbihlLG4pe3ZhciByPWFyZ3VtZW50cy5sZW5ndGg+MixvPXI/YS5jYWxsKGFyZ3VtZW50cywyKTp2b2lkIDA7cmV0dXJuIHQocj9mdW5jdGlvbigpeygiZnVuY3Rpb24iPT10eXBlb2YgZT9lOkZ1bmN0aW9uKGUpKS5hcHBseSh0aGlzLG8pfTplLG4pfX07cih7Z2xvYmFsOiEwLGJpbmQ6ITAsZm9yY2VkOi9NU0lFIC5cLi8udGVzdChpKX0se3NldFRpbWVvdXQ6YyhvLnNldFRpbWVvdXQpLHNldEludGVydmFsOmMoby5zZXRJbnRlcnZhbCl9KX0sNTU1NzpmdW5jdGlvbih0LGUsbil7InVzZSBzdHJpY3QiO24oNTAwNjMpO3ZhciByPW4oMTQwNDQpLG89big3NzAxKSxpPW4oNTc1OTcpLGE9big5MjkxMyksYz1uKDE5MjYpLHM9big1MTEyOCksdT1uKDcxMjAxKSxsPW4oODk4MjcpLGY9big1OTM3OSksZD1uKDc2Mjk4KSxwPW4oNDYxMzApLGg9big1OTU5MSksdj1uKDg3NTc5KSxnPW4oMTA1OTIpLHk9big1MDg2OCksbT1uKDE0MjA5KSxiPW4oMzEwNzQpLHg9big3Mzg5MCksdz1uKDIzNzI0KSxFPW8oImZldGNoIiksaj1vKCJIZWFkZXJzIiksQz13KCJpdGVyYXRvciIpLGs9IlVSTFNlYXJjaFBhcmFtcyIsUz0iVVJMU2VhcmNoUGFyYW1zSXRlcmF0b3IiLE89bC5zZXQsQT1sLmdldHRlckZvcihrKSxJPWwuZ2V0dGVyRm9yKFMpLFQ9L1wrL2csXz1BcnJheSg0KSxNPWZ1bmN0aW9uKHQpe3JldHVybiBfW3QtMV18fChfW3QtMV09UmVnRXhwKCIoKD86JVtcXGRhLWZdezJ9KXsiK3QrIn0pIiwiZ2kiKSl9LEw9ZnVuY3Rpb24odCl7dHJ5e3JldHVybiBkZWNvZGVVUklDb21wb25lbnQodCl9Y2F0Y2goZSl7cmV0dXJuIHR9fSxSPWZ1bmN0aW9uKHQpe3ZhciBlPXQucmVwbGFjZShULCIgIiksbj00O3RyeXtyZXR1cm4gZGVjb2RlVVJJQ29tcG9uZW50KGUpfWNhdGNoKHQpe2Zvcig7bjspZT1lLnJlcGxhY2UoTShuLS0pLEwpO3JldHVybiBlfX0sUD0vWyEnKCl+XXwlMjAvZyxOPXsiISI6IiUyMSIsIiciOiIlMjciLCIoIjoiJTI4IiwiKSI6IiUyOSIsIn4iOiIlN0UiLCIlMjAiOiIrIn0sRj1mdW5jdGlvbih0KXtyZXR1cm4gTlt0XX0sRD1mdW5jdGlvbih0KXtyZXR1cm4gZW5jb2RlVVJJQ29tcG9uZW50KHQpLnJlcGxhY2UoUCxGKX0sVT1mdW5jdGlvbih0LGUpe2lmKGUpZm9yKHZhciBuLHIsbz1lLnNwbGl0KCImIiksaT0wO2k8by5sZW5ndGg7KShuPW9baSsrXSkubGVuZ3RoJiYocj1uLnNwbGl0KCI9IiksdC5wdXNoKHtrZXk6UihyLnNoaWZ0KCkpLHZhbHVlOlIoci5qb2luKCI9IikpfSkpfSxCPWZ1bmN0aW9uKHQpe3RoaXMuZW50cmllcy5sZW5ndGg9MCxVKHRoaXMuZW50cmllcyx0KX0sej1mdW5jdGlvbih0LGUpe2lmKHQ8ZSl0aHJvdyBUeXBlRXJyb3IoIk5vdCBlbm91Z2ggYXJndW1lbnRzIil9LEg9dSgoZnVuY3Rpb24odCxlKXtPKHRoaXMse3R5cGU6UyxpdGVyYXRvcjpiKEEodCkuZW50cmllcyksa2luZDplfSl9KSwiSXRlcmF0b3IiLChmdW5jdGlvbigpe3ZhciB0PUkodGhpcyksZT10LmtpbmQsbj10Lml0ZXJhdG9yLm5leHQoKSxyPW4udmFsdWU7cmV0dXJuIG4uZG9uZXx8KG4udmFsdWU9ImtleXMiPT09ZT9yLmtleToidmFsdWVzIj09PWU/ci52YWx1ZTpbci5rZXksci52YWx1ZV0pLG59KSksVj1mdW5jdGlvbigpe2YodGhpcyxWLGspO3ZhciB0LGUsbixyLG8saSxhLGMscyx1PWFyZ3VtZW50cy5sZW5ndGg+MD9hcmd1bWVudHNbMF06dm9pZCAwLGw9dGhpcyxwPVtdO2lmKE8obCx7dHlwZTprLGVudHJpZXM6cCx1cGRhdGVVUkw6ZnVuY3Rpb24oKXt9LHVwZGF0ZVNlYXJjaFBhcmFtczpCfSksdm9pZCAwIT09dSlpZihnKHUpKWlmKCJmdW5jdGlvbiI9PXR5cGVvZih0PXgodSkpKWZvcihuPShlPXQuY2FsbCh1KSkubmV4dDshKHI9bi5jYWxsKGUpKS5kb25lOyl7aWYoKGE9KGk9KG89Yih2KHIudmFsdWUpKSkubmV4dCkuY2FsbChvKSkuZG9uZXx8KGM9aS5jYWxsKG8pKS5kb25lfHwhaS5jYWxsKG8pLmRvbmUpdGhyb3cgVHlwZUVycm9yKCJFeHBlY3RlZCBzZXF1ZW5jZSB3aXRoIGxlbmd0aCAyIik7cC5wdXNoKHtrZXk6YS52YWx1ZSsiIix2YWx1ZTpjLnZhbHVlKyIifSl9ZWxzZSBmb3IocyBpbiB1KWQodSxzKSYmcC5wdXNoKHtrZXk6cyx2YWx1ZTp1W3NdKyIifSk7ZWxzZSBVKHAsInN0cmluZyI9PXR5cGVvZiB1PyI/Ij09PXUuY2hhckF0KDApP3Uuc2xpY2UoMSk6dTp1KyIiKX0scT1WLnByb3RvdHlwZTtjKHEse2FwcGVuZDpmdW5jdGlvbih0LGUpe3ooYXJndW1lbnRzLmxlbmd0aCwyKTt2YXIgbj1BKHRoaXMpO24uZW50cmllcy5wdXNoKHtrZXk6dCsiIix2YWx1ZTplKyIifSksbi51cGRhdGVVUkwoKX0sZGVsZXRlOmZ1bmN0aW9uKHQpe3ooYXJndW1lbnRzLmxlbmd0aCwxKTtmb3IodmFyIGU9QSh0aGlzKSxuPWUuZW50cmllcyxyPXQrIiIsbz0wO288bi5sZW5ndGg7KW5bb10ua2V5PT09cj9uLnNwbGljZShvLDEpOm8rKztlLnVwZGF0ZVVSTCgpfSxnZXQ6ZnVuY3Rpb24odCl7eihhcmd1bWVudHMubGVuZ3RoLDEpO2Zvcih2YXIgZT1BKHRoaXMpLmVudHJpZXMsbj10KyIiLHI9MDtyPGUubGVuZ3RoO3IrKylpZihlW3JdLmtleT09PW4pcmV0dXJuIGVbcl0udmFsdWU7cmV0dXJuIG51bGx9LGdldEFsbDpmdW5jdGlvbih0KXt6KGFyZ3VtZW50cy5sZW5ndGgsMSk7Zm9yKHZhciBlPUEodGhpcykuZW50cmllcyxuPXQrIiIscj1bXSxvPTA7bzxlLmxlbmd0aDtvKyspZVtvXS5rZXk9PT1uJiZyLnB1c2goZVtvXS52YWx1ZSk7cmV0dXJuIHJ9LGhhczpmdW5jdGlvbih0KXt6KGFyZ3VtZW50cy5sZW5ndGgsMSk7Zm9yKHZhciBlPUEodGhpcykuZW50cmllcyxuPXQrIiIscj0wO3I8ZS5sZW5ndGg7KWlmKGVbcisrXS5rZXk9PT1uKXJldHVybiEwO3JldHVybiExfSxzZXQ6ZnVuY3Rpb24odCxlKXt6KGFyZ3VtZW50cy5sZW5ndGgsMSk7Zm9yKHZhciBuLHI9QSh0aGlzKSxvPXIuZW50cmllcyxpPSExLGE9dCsiIixjPWUrIiIscz0wO3M8by5sZW5ndGg7cysrKShuPW9bc10pLmtleT09PWEmJihpP28uc3BsaWNlKHMtLSwxKTooaT0hMCxuLnZhbHVlPWMpKTtpfHxvLnB1c2goe2tleTphLHZhbHVlOmN9KSxyLnVwZGF0ZVVSTCgpfSxzb3J0OmZ1bmN0aW9uKCl7dmFyIHQsZSxuLHI9QSh0aGlzKSxvPXIuZW50cmllcyxpPW8uc2xpY2UoKTtmb3Ioby5sZW5ndGg9MCxuPTA7bjxpLmxlbmd0aDtuKyspe2Zvcih0PWlbbl0sZT0wO2U8bjtlKyspaWYob1tlXS5rZXk+dC5rZXkpe28uc3BsaWNlKGUsMCx0KTticmVha31lPT09biYmby5wdXNoKHQpfXIudXBkYXRlVVJMKCl9LGZvckVhY2g6ZnVuY3Rpb24odCl7Zm9yKHZhciBlLG49QSh0aGlzKS5lbnRyaWVzLHI9cCh0LGFyZ3VtZW50cy5sZW5ndGg+MT9hcmd1bWVudHNbMV06dm9pZCAwLDMpLG89MDtvPG4ubGVuZ3RoOylyKChlPW5bbysrXSkudmFsdWUsZS5rZXksdGhpcyl9LGtleXM6ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IEgodGhpcywia2V5cyIpfSx2YWx1ZXM6ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IEgodGhpcywidmFsdWVzIil9LGVudHJpZXM6ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IEgodGhpcywiZW50cmllcyIpfX0se2VudW1lcmFibGU6ITB9KSxhKHEsQyxxLmVudHJpZXMpLGEocSwidG9TdHJpbmciLChmdW5jdGlvbigpe2Zvcih2YXIgdCxlPUEodGhpcykuZW50cmllcyxuPVtdLHI9MDtyPGUubGVuZ3RoOyl0PWVbcisrXSxuLnB1c2goRCh0LmtleSkrIj0iK0QodC52YWx1ZSkpO3JldHVybiBuLmpvaW4oIiYiKX0pLHtlbnVtZXJhYmxlOiEwfSkscyhWLGspLHIoe2dsb2JhbDohMCxmb3JjZWQ6IWl9LHtVUkxTZWFyY2hQYXJhbXM6Vn0pLGl8fCJmdW5jdGlvbiIhPXR5cGVvZiBFfHwiZnVuY3Rpb24iIT10eXBlb2Yganx8cih7Z2xvYmFsOiEwLGVudW1lcmFibGU6ITAsZm9yY2VkOiEwfSx7ZmV0Y2g6ZnVuY3Rpb24odCl7dmFyIGUsbixyLG89W3RdO3JldHVybiBhcmd1bWVudHMubGVuZ3RoPjEmJihnKGU9YXJndW1lbnRzWzFdKSYmKG49ZS5ib2R5LGgobik9PT1rJiYoKHI9ZS5oZWFkZXJzP25ldyBqKGUuaGVhZGVycyk6bmV3IGopLmhhcygiY29udGVudC10eXBlIil8fHIuc2V0KCJjb250ZW50LXR5cGUiLCJhcHBsaWNhdGlvbi94LXd3dy1mb3JtLXVybGVuY29kZWQ7Y2hhcnNldD1VVEYtOCIpLGU9eShlLHtib2R5Om0oMCxTdHJpbmcobikpLGhlYWRlcnM6bSgwLHIpfSkpKSxvLnB1c2goZSkpLEUuYXBwbHkodGhpcyxvKX19KSx0LmV4cG9ydHM9e1VSTFNlYXJjaFBhcmFtczpWLGdldFN0YXRlOkF9fSwxMzkxMDpmdW5jdGlvbih0LGUsbil7InVzZSBzdHJpY3QiO24oODIyMDEpO3ZhciByLG89bigxNDA0NCksaT1uKDYyNTU2KSxhPW4oNTc1OTcpLGM9big4OTU1OCkscz1uKDg2NDAxKSx1PW4oOTI5MTMpLGw9big1OTM3OSksZj1uKDc2Mjk4KSxkPW4oNzg2ODUpLHA9big4NTE2NiksaD1uKDYwMTQwKS5jb2RlQXQsdj1uKDY5OTI3KSxnPW4oNTExMjgpLHk9big1NTU3KSxtPW4oODk4MjcpLGI9Yy5VUkwseD15LlVSTFNlYXJjaFBhcmFtcyx3PXkuZ2V0U3RhdGUsRT1tLnNldCxqPW0uZ2V0dGVyRm9yKCJVUkwiKSxDPU1hdGguZmxvb3Isaz1NYXRoLnBvdyxTPSJJbnZhbGlkIHNjaGVtZSIsTz0iSW52YWxpZCBob3N0IixBPSJJbnZhbGlkIHBvcnQiLEk9L1tBLVphLXpdLyxUPS9bXGQrXC0uQS1aYS16XS8sXz0vXGQvLE09L14oMHh8MFgpLyxMPS9eWzAtN10rJC8sUj0vXlxkKyQvLFA9L15bXGRBLUZhLWZdKyQvLE49L1tcdTAwMDBcdTAwMDlcdTAwMEFcdTAwMEQgIyUvOj9AW1xcXV0vLEY9L1tcdTAwMDBcdTAwMDlcdTAwMEFcdTAwMEQgIy86P0BbXFxdXS8sRD0vXltcdTAwMDAtXHUwMDFGIF0rfFtcdTAwMDAtXHUwMDFGIF0rJC9nLFU9L1tcdTAwMDlcdTAwMEFcdTAwMERdL2csQj1mdW5jdGlvbih0LGUpe3ZhciBuLHIsbztpZigiWyI9PWUuY2hhckF0KDApKXtpZigiXSIhPWUuY2hhckF0KGUubGVuZ3RoLTEpKXJldHVybiBPO2lmKCEobj1IKGUuc2xpY2UoMSwtMSkpKSlyZXR1cm4gTzt0Lmhvc3Q9bn1lbHNlIGlmKEsodCkpe2lmKGU9dihlKSxOLnRlc3QoZSkpcmV0dXJuIE87aWYobnVsbD09PShuPXooZSkpKXJldHVybiBPO3QuaG9zdD1ufWVsc2V7aWYoRi50ZXN0KGUpKXJldHVybiBPO2ZvcihuPSIiLHI9cChlKSxvPTA7bzxyLmxlbmd0aDtvKyspbis9WShyW29dLHEpO3QuaG9zdD1ufX0sej1mdW5jdGlvbih0KXt2YXIgZSxuLHIsbyxpLGEsYyxzPXQuc3BsaXQoIi4iKTtpZihzLmxlbmd0aCYmIiI9PXNbcy5sZW5ndGgtMV0mJnMucG9wKCksKGU9cy5sZW5ndGgpPjQpcmV0dXJuIHQ7Zm9yKG49W10scj0wO3I8ZTtyKyspe2lmKCIiPT0obz1zW3JdKSlyZXR1cm4gdDtpZihpPTEwLG8ubGVuZ3RoPjEmJiIwIj09by5jaGFyQXQoMCkmJihpPU0udGVzdChvKT8xNjo4LG89by5zbGljZSg4PT1pPzE6MikpLCIiPT09bylhPTA7ZWxzZXtpZighKDEwPT1pP1I6OD09aT9MOlApLnRlc3QobykpcmV0dXJuIHQ7YT1wYXJzZUludChvLGkpfW4ucHVzaChhKX1mb3Iocj0wO3I8ZTtyKyspaWYoYT1uW3JdLHI9PWUtMSl7aWYoYT49aygyNTYsNS1lKSlyZXR1cm4gbnVsbH1lbHNlIGlmKGE+MjU1KXJldHVybiBudWxsO2ZvcihjPW4ucG9wKCkscj0wO3I8bi5sZW5ndGg7cisrKWMrPW5bcl0qaygyNTYsMy1yKTtyZXR1cm4gY30sSD1mdW5jdGlvbih0KXt2YXIgZSxuLHIsbyxpLGEsYyxzPVswLDAsMCwwLDAsMCwwLDBdLHU9MCxsPW51bGwsZj0wLGQ9ZnVuY3Rpb24oKXtyZXR1cm4gdC5jaGFyQXQoZil9O2lmKCI6Ij09ZCgpKXtpZigiOiIhPXQuY2hhckF0KDEpKXJldHVybjtmKz0yLGw9Kyt1fWZvcig7ZCgpOyl7aWYoOD09dSlyZXR1cm47aWYoIjoiIT1kKCkpe2ZvcihlPW49MDtuPDQmJlAudGVzdChkKCkpOyllPTE2KmUrcGFyc2VJbnQoZCgpLDE2KSxmKyssbisrO2lmKCIuIj09ZCgpKXtpZigwPT1uKXJldHVybjtpZihmLT1uLHU+NilyZXR1cm47Zm9yKHI9MDtkKCk7KXtpZihvPW51bGwscj4wKXtpZighKCIuIj09ZCgpJiZyPDQpKXJldHVybjtmKyt9aWYoIV8udGVzdChkKCkpKXJldHVybjtmb3IoO18udGVzdChkKCkpOyl7aWYoaT1wYXJzZUludChkKCksMTApLG51bGw9PT1vKW89aTtlbHNle2lmKDA9PW8pcmV0dXJuO289MTAqbytpfWlmKG8+MjU1KXJldHVybjtmKyt9c1t1XT0yNTYqc1t1XStvLDIhPSsrciYmNCE9cnx8dSsrfWlmKDQhPXIpcmV0dXJuO2JyZWFrfWlmKCI6Ij09ZCgpKXtpZihmKyssIWQoKSlyZXR1cm59ZWxzZSBpZihkKCkpcmV0dXJuO3NbdSsrXT1lfWVsc2V7aWYobnVsbCE9PWwpcmV0dXJuO2YrKyxsPSsrdX19aWYobnVsbCE9PWwpZm9yKGE9dS1sLHU9NzswIT11JiZhPjA7KWM9c1t1XSxzW3UtLV09c1tsK2EtMV0sc1tsKy0tYV09YztlbHNlIGlmKDghPXUpcmV0dXJuO3JldHVybiBzfSxWPWZ1bmN0aW9uKHQpe3ZhciBlLG4scixvO2lmKCJudW1iZXIiPT10eXBlb2YgdCl7Zm9yKGU9W10sbj0wO248NDtuKyspZS51bnNoaWZ0KHQlMjU2KSx0PUModC8yNTYpO3JldHVybiBlLmpvaW4oIi4iKX1pZigib2JqZWN0Ij09dHlwZW9mIHQpe2ZvcihlPSIiLHI9ZnVuY3Rpb24odCl7Zm9yKHZhciBlPW51bGwsbj0xLHI9bnVsbCxvPTAsaT0wO2k8ODtpKyspMCE9PXRbaV0/KG8+biYmKGU9cixuPW8pLHI9bnVsbCxvPTApOihudWxsPT09ciYmKHI9aSksKytvKTtyZXR1cm4gbz5uJiYoZT1yLG49byksZX0odCksbj0wO248ODtuKyspbyYmMD09PXRbbl18fChvJiYobz0hMSkscj09PW4/KGUrPW4/IjoiOiI6OiIsbz0hMCk6KGUrPXRbbl0udG9TdHJpbmcoMTYpLG48NyYmKGUrPSI6IikpKTtyZXR1cm4iWyIrZSsiXSJ9cmV0dXJuIHR9LHE9e30sVz1kKHt9LHEseyIgIjoxLCciJzoxLCI8IjoxLCI+IjoxLCJgIjoxfSksRz1kKHt9LFcseyIjIjoxLCI/IjoxLCJ7IjoxLCJ9IjoxfSksWj1kKHt9LEcseyIvIjoxLCI6IjoxLCI7IjoxLCI9IjoxLCJAIjoxLCJbIjoxLCJcXCI6MSwiXSI6MSwiXiI6MSwifCI6MX0pLFk9ZnVuY3Rpb24odCxlKXt2YXIgbj1oKHQsMCk7cmV0dXJuIG4+MzImJm48MTI3JiYhZihlLHQpP3Q6ZW5jb2RlVVJJQ29tcG9uZW50KHQpfSwkPXtmdHA6MjEsZmlsZTpudWxsLGh0dHA6ODAsaHR0cHM6NDQzLHdzOjgwLHdzczo0NDN9LEs9ZnVuY3Rpb24odCl7cmV0dXJuIGYoJCx0LnNjaGVtZSl9LEo9ZnVuY3Rpb24odCl7cmV0dXJuIiIhPXQudXNlcm5hbWV8fCIiIT10LnBhc3N3b3JkfSxYPWZ1bmN0aW9uKHQpe3JldHVybiF0Lmhvc3R8fHQuY2Fubm90QmVBQmFzZVVSTHx8ImZpbGUiPT10LnNjaGVtZX0sUT1mdW5jdGlvbih0LGUpe3ZhciBuO3JldHVybiAyPT10Lmxlbmd0aCYmSS50ZXN0KHQuY2hhckF0KDApKSYmKCI6Ij09KG49dC5jaGFyQXQoMSkpfHwhZSYmInwiPT1uKX0sdHQ9ZnVuY3Rpb24odCl7dmFyIGU7cmV0dXJuIHQubGVuZ3RoPjEmJlEodC5zbGljZSgwLDIpKSYmKDI9PXQubGVuZ3RofHwiLyI9PT0oZT10LmNoYXJBdCgyKSl8fCJcXCI9PT1lfHwiPyI9PT1lfHwiIyI9PT1lKX0sZXQ9ZnVuY3Rpb24odCl7dmFyIGU9dC5wYXRoLG49ZS5sZW5ndGg7IW58fCJmaWxlIj09dC5zY2hlbWUmJjE9PW4mJlEoZVswXSwhMCl8fGUucG9wKCl9LG50PWZ1bmN0aW9uKHQpe3JldHVybiIuIj09PXR8fCIlMmUiPT09dC50b0xvd2VyQ2FzZSgpfSxydD17fSxvdD17fSxpdD17fSxhdD17fSxjdD17fSxzdD17fSx1dD17fSxsdD17fSxmdD17fSxkdD17fSxwdD17fSxodD17fSx2dD17fSxndD17fSx5dD17fSxtdD17fSxidD17fSx4dD17fSx3dD17fSxFdD17fSxqdD17fSxDdD1mdW5jdGlvbih0LGUsbixvKXt2YXIgaSxhLGMscyx1LGw9bnx8cnQsZD0wLGg9IiIsdj0hMSxnPSExLHk9ITE7Zm9yKG58fCh0LnNjaGVtZT0iIix0LnVzZXJuYW1lPSIiLHQucGFzc3dvcmQ9IiIsdC5ob3N0PW51bGwsdC5wb3J0PW51bGwsdC5wYXRoPVtdLHQucXVlcnk9bnVsbCx0LmZyYWdtZW50PW51bGwsdC5jYW5ub3RCZUFCYXNlVVJMPSExLGU9ZS5yZXBsYWNlKEQsIiIpKSxlPWUucmVwbGFjZShVLCIiKSxpPXAoZSk7ZDw9aS5sZW5ndGg7KXtzd2l0Y2goYT1pW2RdLGwpe2Nhc2UgcnQ6aWYoIWF8fCFJLnRlc3QoYSkpe2lmKG4pcmV0dXJuIFM7bD1pdDtjb250aW51ZX1oKz1hLnRvTG93ZXJDYXNlKCksbD1vdDticmVhaztjYXNlIG90OmlmKGEmJihULnRlc3QoYSl8fCIrIj09YXx8Ii0iPT1hfHwiLiI9PWEpKWgrPWEudG9Mb3dlckNhc2UoKTtlbHNle2lmKCI6IiE9YSl7aWYobilyZXR1cm4gUztoPSIiLGw9aXQsZD0wO2NvbnRpbnVlfWlmKG4mJihLKHQpIT1mKCQsaCl8fCJmaWxlIj09aCYmKEoodCl8fG51bGwhPT10LnBvcnQpfHwiZmlsZSI9PXQuc2NoZW1lJiYhdC5ob3N0KSlyZXR1cm47aWYodC5zY2hlbWU9aCxuKXJldHVybiB2b2lkKEsodCkmJiRbdC5zY2hlbWVdPT10LnBvcnQmJih0LnBvcnQ9bnVsbCkpO2g9IiIsImZpbGUiPT10LnNjaGVtZT9sPWd0OksodCkmJm8mJm8uc2NoZW1lPT10LnNjaGVtZT9sPWF0OksodCk/bD1sdDoiLyI9PWlbZCsxXT8obD1jdCxkKyspOih0LmNhbm5vdEJlQUJhc2VVUkw9ITAsdC5wYXRoLnB1c2goIiIpLGw9d3QpfWJyZWFrO2Nhc2UgaXQ6aWYoIW98fG8uY2Fubm90QmVBQmFzZVVSTCYmIiMiIT1hKXJldHVybiBTO2lmKG8uY2Fubm90QmVBQmFzZVVSTCYmIiMiPT1hKXt0LnNjaGVtZT1vLnNjaGVtZSx0LnBhdGg9by5wYXRoLnNsaWNlKCksdC5xdWVyeT1vLnF1ZXJ5LHQuZnJhZ21lbnQ9IiIsdC5jYW5ub3RCZUFCYXNlVVJMPSEwLGw9anQ7YnJlYWt9bD0iZmlsZSI9PW8uc2NoZW1lP2d0OnN0O2NvbnRpbnVlO2Nhc2UgYXQ6aWYoIi8iIT1hfHwiLyIhPWlbZCsxXSl7bD1zdDtjb250aW51ZX1sPWZ0LGQrKzticmVhaztjYXNlIGN0OmlmKCIvIj09YSl7bD1kdDticmVha31sPXh0O2NvbnRpbnVlO2Nhc2Ugc3Q6aWYodC5zY2hlbWU9by5zY2hlbWUsYT09cil0LnVzZXJuYW1lPW8udXNlcm5hbWUsdC5wYXNzd29yZD1vLnBhc3N3b3JkLHQuaG9zdD1vLmhvc3QsdC5wb3J0PW8ucG9ydCx0LnBhdGg9by5wYXRoLnNsaWNlKCksdC5xdWVyeT1vLnF1ZXJ5O2Vsc2UgaWYoIi8iPT1hfHwiXFwiPT1hJiZLKHQpKWw9dXQ7ZWxzZSBpZigiPyI9PWEpdC51c2VybmFtZT1vLnVzZXJuYW1lLHQucGFzc3dvcmQ9by5wYXNzd29yZCx0Lmhvc3Q9by5ob3N0LHQucG9ydD1vLnBvcnQsdC5wYXRoPW8ucGF0aC5zbGljZSgpLHQucXVlcnk9IiIsbD1FdDtlbHNle2lmKCIjIiE9YSl7dC51c2VybmFtZT1vLnVzZXJuYW1lLHQucGFzc3dvcmQ9by5wYXNzd29yZCx0Lmhvc3Q9by5ob3N0LHQucG9ydD1vLnBvcnQsdC5wYXRoPW8ucGF0aC5zbGljZSgpLHQucGF0aC5wb3AoKSxsPXh0O2NvbnRpbnVlfXQudXNlcm5hbWU9by51c2VybmFtZSx0LnBhc3N3b3JkPW8ucGFzc3dvcmQsdC5ob3N0PW8uaG9zdCx0LnBvcnQ9by5wb3J0LHQucGF0aD1vLnBhdGguc2xpY2UoKSx0LnF1ZXJ5PW8ucXVlcnksdC5mcmFnbWVudD0iIixsPWp0fWJyZWFrO2Nhc2UgdXQ6aWYoIUsodCl8fCIvIiE9YSYmIlxcIiE9YSl7aWYoIi8iIT1hKXt0LnVzZXJuYW1lPW8udXNlcm5hbWUsdC5wYXNzd29yZD1vLnBhc3N3b3JkLHQuaG9zdD1vLmhvc3QsdC5wb3J0PW8ucG9ydCxsPXh0O2NvbnRpbnVlfWw9ZHR9ZWxzZSBsPWZ0O2JyZWFrO2Nhc2UgbHQ6aWYobD1mdCwiLyIhPWF8fCIvIiE9aC5jaGFyQXQoZCsxKSljb250aW51ZTtkKys7YnJlYWs7Y2FzZSBmdDppZigiLyIhPWEmJiJcXCIhPWEpe2w9ZHQ7Y29udGludWV9YnJlYWs7Y2FzZSBkdDppZigiQCI9PWEpe3YmJihoPSIlNDAiK2gpLHY9ITAsYz1wKGgpO2Zvcih2YXIgbT0wO208Yy5sZW5ndGg7bSsrKXt2YXIgYj1jW21dO2lmKCI6IiE9Ynx8eSl7dmFyIHg9WShiLFopO3k/dC5wYXNzd29yZCs9eDp0LnVzZXJuYW1lKz14fWVsc2UgeT0hMH1oPSIifWVsc2UgaWYoYT09cnx8Ii8iPT1hfHwiPyI9PWF8fCIjIj09YXx8IlxcIj09YSYmSyh0KSl7aWYodiYmIiI9PWgpcmV0dXJuIkludmFsaWQgYXV0aG9yaXR5IjtkLT1wKGgpLmxlbmd0aCsxLGg9IiIsbD1wdH1lbHNlIGgrPWE7YnJlYWs7Y2FzZSBwdDpjYXNlIGh0OmlmKG4mJiJmaWxlIj09dC5zY2hlbWUpe2w9bXQ7Y29udGludWV9aWYoIjoiIT1hfHxnKXtpZihhPT1yfHwiLyI9PWF8fCI/Ij09YXx8IiMiPT1hfHwiXFwiPT1hJiZLKHQpKXtpZihLKHQpJiYiIj09aClyZXR1cm4gTztpZihuJiYiIj09aCYmKEoodCl8fG51bGwhPT10LnBvcnQpKXJldHVybjtpZihzPUIodCxoKSlyZXR1cm4gcztpZihoPSIiLGw9YnQsbilyZXR1cm47Y29udGludWV9IlsiPT1hP2c9ITA6Il0iPT1hJiYoZz0hMSksaCs9YX1lbHNle2lmKCIiPT1oKXJldHVybiBPO2lmKHM9Qih0LGgpKXJldHVybiBzO2lmKGg9IiIsbD12dCxuPT1odClyZXR1cm59YnJlYWs7Y2FzZSB2dDppZighXy50ZXN0KGEpKXtpZihhPT1yfHwiLyI9PWF8fCI/Ij09YXx8IiMiPT1hfHwiXFwiPT1hJiZLKHQpfHxuKXtpZigiIiE9aCl7dmFyIHc9cGFyc2VJbnQoaCwxMCk7aWYodz42NTUzNSlyZXR1cm4gQTt0LnBvcnQ9Syh0KSYmdz09PSRbdC5zY2hlbWVdP251bGw6dyxoPSIifWlmKG4pcmV0dXJuO2w9YnQ7Y29udGludWV9cmV0dXJuIEF9aCs9YTticmVhaztjYXNlIGd0OmlmKHQuc2NoZW1lPSJmaWxlIiwiLyI9PWF8fCJcXCI9PWEpbD15dDtlbHNle2lmKCFvfHwiZmlsZSIhPW8uc2NoZW1lKXtsPXh0O2NvbnRpbnVlfWlmKGE9PXIpdC5ob3N0PW8uaG9zdCx0LnBhdGg9by5wYXRoLnNsaWNlKCksdC5xdWVyeT1vLnF1ZXJ5O2Vsc2UgaWYoIj8iPT1hKXQuaG9zdD1vLmhvc3QsdC5wYXRoPW8ucGF0aC5zbGljZSgpLHQucXVlcnk9IiIsbD1FdDtlbHNle2lmKCIjIiE9YSl7dHQoaS5zbGljZShkKS5qb2luKCIiKSl8fCh0Lmhvc3Q9by5ob3N0LHQucGF0aD1vLnBhdGguc2xpY2UoKSxldCh0KSksbD14dDtjb250aW51ZX10Lmhvc3Q9by5ob3N0LHQucGF0aD1vLnBhdGguc2xpY2UoKSx0LnF1ZXJ5PW8ucXVlcnksdC5mcmFnbWVudD0iIixsPWp0fX1icmVhaztjYXNlIHl0OmlmKCIvIj09YXx8IlxcIj09YSl7bD1tdDticmVha31vJiYiZmlsZSI9PW8uc2NoZW1lJiYhdHQoaS5zbGljZShkKS5qb2luKCIiKSkmJihRKG8ucGF0aFswXSwhMCk/dC5wYXRoLnB1c2goby5wYXRoWzBdKTp0Lmhvc3Q9by5ob3N0KSxsPXh0O2NvbnRpbnVlO2Nhc2UgbXQ6aWYoYT09cnx8Ii8iPT1hfHwiXFwiPT1hfHwiPyI9PWF8fCIjIj09YSl7aWYoIW4mJlEoaCkpbD14dDtlbHNlIGlmKCIiPT1oKXtpZih0Lmhvc3Q9IiIsbilyZXR1cm47bD1idH1lbHNle2lmKHM9Qih0LGgpKXJldHVybiBzO2lmKCJsb2NhbGhvc3QiPT10Lmhvc3QmJih0Lmhvc3Q9IiIpLG4pcmV0dXJuO2g9IiIsbD1idH1jb250aW51ZX1oKz1hO2JyZWFrO2Nhc2UgYnQ6aWYoSyh0KSl7aWYobD14dCwiLyIhPWEmJiJcXCIhPWEpY29udGludWV9ZWxzZSBpZihufHwiPyIhPWEpaWYobnx8IiMiIT1hKXtpZihhIT1yJiYobD14dCwiLyIhPWEpKWNvbnRpbnVlfWVsc2UgdC5mcmFnbWVudD0iIixsPWp0O2Vsc2UgdC5xdWVyeT0iIixsPUV0O2JyZWFrO2Nhc2UgeHQ6aWYoYT09cnx8Ii8iPT1hfHwiXFwiPT1hJiZLKHQpfHwhbiYmKCI/Ij09YXx8IiMiPT1hKSl7aWYoIi4uIj09PSh1PSh1PWgpLnRvTG93ZXJDYXNlKCkpfHwiJTJlLiI9PT11fHwiLiUyZSI9PT11fHwiJTJlJTJlIj09PXU/KGV0KHQpLCIvIj09YXx8IlxcIj09YSYmSyh0KXx8dC5wYXRoLnB1c2goIiIpKTpudChoKT8iLyI9PWF8fCJcXCI9PWEmJksodCl8fHQucGF0aC5wdXNoKCIiKTooImZpbGUiPT10LnNjaGVtZSYmIXQucGF0aC5sZW5ndGgmJlEoaCkmJih0Lmhvc3QmJih0Lmhvc3Q9IiIpLGg9aC5jaGFyQXQoMCkrIjoiKSx0LnBhdGgucHVzaChoKSksaD0iIiwiZmlsZSI9PXQuc2NoZW1lJiYoYT09cnx8Ij8iPT1hfHwiIyI9PWEpKWZvcig7dC5wYXRoLmxlbmd0aD4xJiYiIj09PXQucGF0aFswXTspdC5wYXRoLnNoaWZ0KCk7Ij8iPT1hPyh0LnF1ZXJ5PSIiLGw9RXQpOiIjIj09YSYmKHQuZnJhZ21lbnQ9IiIsbD1qdCl9ZWxzZSBoKz1ZKGEsRyk7YnJlYWs7Y2FzZSB3dDoiPyI9PWE/KHQucXVlcnk9IiIsbD1FdCk6IiMiPT1hPyh0LmZyYWdtZW50PSIiLGw9anQpOmEhPXImJih0LnBhdGhbMF0rPVkoYSxxKSk7YnJlYWs7Y2FzZSBFdDpufHwiIyIhPWE/YSE9ciYmKCInIj09YSYmSyh0KT90LnF1ZXJ5Kz0iJTI3Ijp0LnF1ZXJ5Kz0iIyI9PWE/IiUyMyI6WShhLHEpKToodC5mcmFnbWVudD0iIixsPWp0KTticmVhaztjYXNlIGp0OmEhPXImJih0LmZyYWdtZW50Kz1ZKGEsVykpfWQrK319LGt0PWZ1bmN0aW9uKHQpe3ZhciBlLG4scj1sKHRoaXMsa3QsIlVSTCIpLG89YXJndW1lbnRzLmxlbmd0aD4xP2FyZ3VtZW50c1sxXTp2b2lkIDAsYT1TdHJpbmcodCksYz1FKHIse3R5cGU6IlVSTCJ9KTtpZih2b2lkIDAhPT1vKWlmKG8gaW5zdGFuY2VvZiBrdCllPWoobyk7ZWxzZSBpZihuPUN0KGU9e30sU3RyaW5nKG8pKSl0aHJvdyBUeXBlRXJyb3Iobik7aWYobj1DdChjLGEsbnVsbCxlKSl0aHJvdyBUeXBlRXJyb3Iobik7dmFyIHM9Yy5zZWFyY2hQYXJhbXM9bmV3IHgsdT13KHMpO3UudXBkYXRlU2VhcmNoUGFyYW1zKGMucXVlcnkpLHUudXBkYXRlVVJMPWZ1bmN0aW9uKCl7Yy5xdWVyeT1TdHJpbmcocyl8fG51bGx9LGl8fChyLmhyZWY9T3QuY2FsbChyKSxyLm9yaWdpbj1BdC5jYWxsKHIpLHIucHJvdG9jb2w9SXQuY2FsbChyKSxyLnVzZXJuYW1lPVR0LmNhbGwociksci5wYXNzd29yZD1fdC5jYWxsKHIpLHIuaG9zdD1NdC5jYWxsKHIpLHIuaG9zdG5hbWU9THQuY2FsbChyKSxyLnBvcnQ9UnQuY2FsbChyKSxyLnBhdGhuYW1lPVB0LmNhbGwociksci5zZWFyY2g9TnQuY2FsbChyKSxyLnNlYXJjaFBhcmFtcz1GdC5jYWxsKHIpLHIuaGFzaD1EdC5jYWxsKHIpKX0sU3Q9a3QucHJvdG90eXBlLE90PWZ1bmN0aW9uKCl7dmFyIHQ9aih0aGlzKSxlPXQuc2NoZW1lLG49dC51c2VybmFtZSxyPXQucGFzc3dvcmQsbz10Lmhvc3QsaT10LnBvcnQsYT10LnBhdGgsYz10LnF1ZXJ5LHM9dC5mcmFnbWVudCx1PWUrIjoiO3JldHVybiBudWxsIT09bz8odSs9Ii8vIixKKHQpJiYodSs9bisocj8iOiIrcjoiIikrIkAiKSx1Kz1WKG8pLG51bGwhPT1pJiYodSs9IjoiK2kpKToiZmlsZSI9PWUmJih1Kz0iLy8iKSx1Kz10LmNhbm5vdEJlQUJhc2VVUkw/YVswXTphLmxlbmd0aD8iLyIrYS5qb2luKCIvIik6IiIsbnVsbCE9PWMmJih1Kz0iPyIrYyksbnVsbCE9PXMmJih1Kz0iIyIrcyksdX0sQXQ9ZnVuY3Rpb24oKXt2YXIgdD1qKHRoaXMpLGU9dC5zY2hlbWUsbj10LnBvcnQ7aWYoImJsb2IiPT1lKXRyeXtyZXR1cm4gbmV3IFVSTChlLnBhdGhbMF0pLm9yaWdpbn1jYXRjaCh0KXtyZXR1cm4ibnVsbCJ9cmV0dXJuImZpbGUiIT1lJiZLKHQpP2UrIjovLyIrVih0Lmhvc3QpKyhudWxsIT09bj8iOiIrbjoiIik6Im51bGwifSxJdD1mdW5jdGlvbigpe3JldHVybiBqKHRoaXMpLnNjaGVtZSsiOiJ9LFR0PWZ1bmN0aW9uKCl7cmV0dXJuIGoodGhpcykudXNlcm5hbWV9LF90PWZ1bmN0aW9uKCl7cmV0dXJuIGoodGhpcykucGFzc3dvcmR9LE10PWZ1bmN0aW9uKCl7dmFyIHQ9aih0aGlzKSxlPXQuaG9zdCxuPXQucG9ydDtyZXR1cm4gbnVsbD09PWU/IiI6bnVsbD09PW4/VihlKTpWKGUpKyI6IitufSxMdD1mdW5jdGlvbigpe3ZhciB0PWoodGhpcykuaG9zdDtyZXR1cm4gbnVsbD09PXQ/IiI6Vih0KX0sUnQ9ZnVuY3Rpb24oKXt2YXIgdD1qKHRoaXMpLnBvcnQ7cmV0dXJuIG51bGw9PT10PyIiOlN0cmluZyh0KX0sUHQ9ZnVuY3Rpb24oKXt2YXIgdD1qKHRoaXMpLGU9dC5wYXRoO3JldHVybiB0LmNhbm5vdEJlQUJhc2VVUkw/ZVswXTplLmxlbmd0aD8iLyIrZS5qb2luKCIvIik6IiJ9LE50PWZ1bmN0aW9uKCl7dmFyIHQ9aih0aGlzKS5xdWVyeTtyZXR1cm4gdD8iPyIrdDoiIn0sRnQ9ZnVuY3Rpb24oKXtyZXR1cm4gaih0aGlzKS5zZWFyY2hQYXJhbXN9LER0PWZ1bmN0aW9uKCl7dmFyIHQ9aih0aGlzKS5mcmFnbWVudDtyZXR1cm4gdD8iIyIrdDoiIn0sVXQ9ZnVuY3Rpb24odCxlKXtyZXR1cm57Z2V0OnQsc2V0OmUsY29uZmlndXJhYmxlOiEwLGVudW1lcmFibGU6ITB9fTtpZihpJiZzKFN0LHtocmVmOlV0KE90LChmdW5jdGlvbih0KXt2YXIgZT1qKHRoaXMpLG49U3RyaW5nKHQpLHI9Q3QoZSxuKTtpZihyKXRocm93IFR5cGVFcnJvcihyKTt3KGUuc2VhcmNoUGFyYW1zKS51cGRhdGVTZWFyY2hQYXJhbXMoZS5xdWVyeSl9KSksb3JpZ2luOlV0KEF0KSxwcm90b2NvbDpVdChJdCwoZnVuY3Rpb24odCl7dmFyIGU9aih0aGlzKTtDdChlLFN0cmluZyh0KSsiOiIscnQpfSkpLHVzZXJuYW1lOlV0KFR0LChmdW5jdGlvbih0KXt2YXIgZT1qKHRoaXMpLG49cChTdHJpbmcodCkpO2lmKCFYKGUpKXtlLnVzZXJuYW1lPSIiO2Zvcih2YXIgcj0wO3I8bi5sZW5ndGg7cisrKWUudXNlcm5hbWUrPVkobltyXSxaKX19KSkscGFzc3dvcmQ6VXQoX3QsKGZ1bmN0aW9uKHQpe3ZhciBlPWoodGhpcyksbj1wKFN0cmluZyh0KSk7aWYoIVgoZSkpe2UucGFzc3dvcmQ9IiI7Zm9yKHZhciByPTA7cjxuLmxlbmd0aDtyKyspZS5wYXNzd29yZCs9WShuW3JdLFopfX0pKSxob3N0OlV0KE10LChmdW5jdGlvbih0KXt2YXIgZT1qKHRoaXMpO2UuY2Fubm90QmVBQmFzZVVSTHx8Q3QoZSxTdHJpbmcodCkscHQpfSkpLGhvc3RuYW1lOlV0KEx0LChmdW5jdGlvbih0KXt2YXIgZT1qKHRoaXMpO2UuY2Fubm90QmVBQmFzZVVSTHx8Q3QoZSxTdHJpbmcodCksaHQpfSkpLHBvcnQ6VXQoUnQsKGZ1bmN0aW9uKHQpe3ZhciBlPWoodGhpcyk7WChlKXx8KCIiPT0odD1TdHJpbmcodCkpP2UucG9ydD1udWxsOkN0KGUsdCx2dCkpfSkpLHBhdGhuYW1lOlV0KFB0LChmdW5jdGlvbih0KXt2YXIgZT1qKHRoaXMpO2UuY2Fubm90QmVBQmFzZVVSTHx8KGUucGF0aD1bXSxDdChlLHQrIiIsYnQpKX0pKSxzZWFyY2g6VXQoTnQsKGZ1bmN0aW9uKHQpe3ZhciBlPWoodGhpcyk7IiI9PSh0PVN0cmluZyh0KSk/ZS5xdWVyeT1udWxsOigiPyI9PXQuY2hhckF0KDApJiYodD10LnNsaWNlKDEpKSxlLnF1ZXJ5PSIiLEN0KGUsdCxFdCkpLHcoZS5zZWFyY2hQYXJhbXMpLnVwZGF0ZVNlYXJjaFBhcmFtcyhlLnF1ZXJ5KX0pKSxzZWFyY2hQYXJhbXM6VXQoRnQpLGhhc2g6VXQoRHQsKGZ1bmN0aW9uKHQpe3ZhciBlPWoodGhpcyk7IiIhPSh0PVN0cmluZyh0KSk/KCIjIj09dC5jaGFyQXQoMCkmJih0PXQuc2xpY2UoMSkpLGUuZnJhZ21lbnQ9IiIsQ3QoZSx0LGp0KSk6ZS5mcmFnbWVudD1udWxsfSkpfSksdShTdCwidG9KU09OIiwoZnVuY3Rpb24oKXtyZXR1cm4gT3QuY2FsbCh0aGlzKX0pLHtlbnVtZXJhYmxlOiEwfSksdShTdCwidG9TdHJpbmciLChmdW5jdGlvbigpe3JldHVybiBPdC5jYWxsKHRoaXMpfSkse2VudW1lcmFibGU6ITB9KSxiKXt2YXIgQnQ9Yi5jcmVhdGVPYmplY3RVUkwsenQ9Yi5yZXZva2VPYmplY3RVUkw7QnQmJnUoa3QsImNyZWF0ZU9iamVjdFVSTCIsKGZ1bmN0aW9uKHQpe3JldHVybiBCdC5hcHBseShiLGFyZ3VtZW50cyl9KSksenQmJnUoa3QsInJldm9rZU9iamVjdFVSTCIsKGZ1bmN0aW9uKHQpe3JldHVybiB6dC5hcHBseShiLGFyZ3VtZW50cyl9KSl9ZyhrdCwiVVJMIiksbyh7Z2xvYmFsOiEwLGZvcmNlZDohYSxzaGFtOiFpfSx7VVJMOmt0fSl9LDk4NDpmdW5jdGlvbih0LGUsbil7InVzZSBzdHJpY3QiO24oMTQwNDQpKHt0YXJnZXQ6IlVSTCIscHJvdG86ITAsZW51bWVyYWJsZTohMH0se3RvSlNPTjpmdW5jdGlvbigpe3JldHVybiBVUkwucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwodGhpcyl9fSl9LDM2NDY3OmZ1bmN0aW9uKHQsZSxuKXtuKDE0MDg2KX0sNjY1NTQ6ZnVuY3Rpb24odCxlLG4pe24oNDkzMCksbig2MzY0KX0sOTMyNzA6ZnVuY3Rpb24odCxlLG4pe24oNTM1MTMpLG4oOTkyNTUpLG4oNDg0NCksbigzNTU0KSxuKDE4ODQ0KSxuKDM1NjU2KSxuKDQ5MDUwKSxuKDkzODQzKSxuKDY2MjI0KSxuKDcxNzAwKSxuKDY5NTI5KSxuKDI3NzM0KSxuKDc3MzY5KSxuKDY5ODQyKSxuKDk3OTI4KSxuKDkzOSksbig2MTQ2NyksbigxNjEyNyksbig1MzU4OSksbig4MTA0MiksbigxNjc1NyksbigxMTA3NCksbigzMzUzOSksbigyNDEwMyksbig2NDgxMyksbig2ODk5OSksbig1MzgyNCl9LDg5NzQwOmZ1bmN0aW9uKHQsZSxuKXtuKDM4NzkyKSxuKDE5OTApLG4oOTcyODQpLG4oMjQ1OTgpLG4oOTk5NzkpLG4oMTgyMDUpLG4oODU4KSxuKDY0ODk5KX0sNjgwMDE6ZnVuY3Rpb24odCxlLG4pe24oMzA2MTMpLG4oNjg0MDYpLG4oNDk3OSksbig0NDY0Nil9LDI4Njk5OmZ1bmN0aW9uKHQsZSxuKXtuKDk5NjI4KTt2YXIgcj1uKDg5NTU4KTt0LmV4cG9ydHM9cn0sMTU2MjQ6ZnVuY3Rpb24odCxlLG4pe24oNTczNjApfSw4MTIxMzpmdW5jdGlvbih0LGUsbil7big2MTI5OCksbig0NzAwNCksbig2NzQ2Miksbig5MDY3KSxuKDIwMTI0KSxuKDIxMzcxKSxuKDM4OTg0KSxuKDY5MjM3KSxuKDI2NDk3KSxuKDUzMTY4KSxuKDczOTQ5KSxuKDg4MjExKSxuKDczNzYxKSxuKDQyMTk2KSxuKDQzMzMyKSxuKDkyNjAxKSxuKDIwNDc0KSxuKDU0NTU2KSxuKDQwNjM4KSxuKDk2NjU5KSxuKDE0Njg4KSxuKDczNzgpLG4oMjc0MjgpLG4oMzM0MzYpLG4oODQzODgpLG4oNTk2MjMpLG4oMzI4NTMpLG4oNjcwNzIpfSw2MjY3NzpmdW5jdGlvbih0LGUsbil7bigzNjU3MSksbig0MzA4Nil9LDM3NjEzOmZ1bmN0aW9uKHQsZSxuKXtuKDQzMjkwKSxuKDE0NjgyKSxuKDg3NTU1KX0sMTQ3MTU6ZnVuY3Rpb24odCxlLG4pe24oNzAyMjUpLG4oMjM5OSksbigxNjgwOSksbig2NzE0MSksbig5MDc2OSksbig1Nzg5MSksbigxNTcyMil9LDM2Njg2OmZ1bmN0aW9uKHQsZSxuKXtuKDc3OTA3KX0sNjc3OTM6ZnVuY3Rpb24odCxlLG4pe24oNzU2NDcpfSw5NDc3OmZ1bmN0aW9uKHQsZSxuKXtuKDg0MzA5KSxuKDcyOTYzKSxuKDU2MzU5KX0sNzIzNTQ6ZnVuY3Rpb24odCxlLG4pe24oMjAyMzQpLG4oNTEzNzQpfSw3NDY3OTpmdW5jdGlvbih0LGUsbil7big1Mzc3Mil9LDk0Nzk6ZnVuY3Rpb24odCxlLG4pe24oMjc3NSl9LDg1NjU5OmZ1bmN0aW9uKHQsZSxuKXtuKDk2NzUxKSxuKDczMjIwKX0sNTQ5ODY6ZnVuY3Rpb24odCxlLG4pe24oMTEwNzEpfSwxODgxOmZ1bmN0aW9uKHQsZSxuKXtuKDQ5NjQwKSxuKDc0OTYzKSxuKDY5NDU5KSxuKDQ5MTU1KSxuKDI2ODk2KSxuKDg3NDc0KSxuKDk3NDMzKSxuKDcxMDgpLG4oMjM2MzEpfSw1NzYwMzpmdW5jdGlvbih0LGUsbil7bigxNzY1KX0sODE1NDg6ZnVuY3Rpb24odCxlLG4pe24oOTgzNTApLG4oNDE3MTgpLG4oNTczNzEpLG4oODkyMzApLG4oMzIzMDMpLG4oNjI5MSksbig2NjE4MSl9LDIzMTAyOmZ1bmN0aW9uKHQsZSxuKXtuKDczNDYwKX0sNDQxNTM6ZnVuY3Rpb24odCxlLG4pe24oMzIwNjIpfSw3MzkyOmZ1bmN0aW9uKHQsZSxuKXtuKDc0NTI1KX0sNzc3OTpmdW5jdGlvbih0LGUsbil7big2NDAyNiksbig4NjA3Nyl9LDYwODI2OmZ1bmN0aW9uKHQsZSxuKXtuKDEzOTEwKSxuKDk4NCksbig1NTU3KX0sNTU5MzM6ZnVuY3Rpb24odCxlLG4pe24oNjk0Miksbig5NDI0OSl9LDg3NjAyOmZ1bmN0aW9uKHQsZSxuKXtuKDY4MDAxKSxuKDIzMTAyKSxuKDYwODI2KTt2YXIgcj1uKDk1OTY4KTt0LmV4cG9ydHM9cn0sOTU5Njg6ZnVuY3Rpb24odCxlLG4pe24oNjY1NTQpLG4oOTMyNzApLG4oODk3NDApLG4oNjI2NzcpLG4oMTQ3MTUpLG4oMzY2ODYpLG4oNjc3OTMpLG4oOTQ3Nyksbig3MjM1NCksbig3NDY3OSksbig1NDk4Niksbig1NzYwMyksbig0NDE1Myk7dmFyIHI9big0Nzk3Mik7dC5leHBvcnRzPXJ9LDQ3OTcyOmZ1bmN0aW9uKHQsZSxuKXtuKDM2NDY3KSxuKDgxMjEzKSxuKDM3NjEzKSxuKDgxNTQ4KSxuKDU1OTMzKTt2YXIgcj1uKDU5MDExKTt0LmV4cG9ydHM9cn0sNTkwMTE6ZnVuY3Rpb24odCxlLG4pe24oODU2NTkpLG4oNzc3OSk7dmFyIHI9big2ODY4NSk7dC5leHBvcnRzPXJ9LDY4Njg1OmZ1bmN0aW9uKHQsZSxuKXtuKDI4Njk5KSxuKDk0NzkpLG4oNzM5Mik7dmFyIHI9big1NjIzOCk7dC5leHBvcnRzPXJ9LDU3MzYwOmZ1bmN0aW9uKHQsZSxuKXt2YXIgcj1uKDUzMzM1KTt0LmV4cG9ydHM9cn0sNTMzMzU6ZnVuY3Rpb24odCxlLG4pe24oMTg4MSk7dmFyIHI9big4NzYwMik7dC5leHBvcnRzPXJ9LDkyNDA0OmZ1bmN0aW9uKHQsZSxuKXtuKDY3MDM5KSxuKDc5Nzk5KSxuKDc0MDEwKSxuKDY1OTc2KSxuKDgxOTk0KSxuKDEzOTEwKSxuKDk4NCksbig1NTU3KTt2YXIgcj1uKDU2MjM4KTt0LmV4cG9ydHM9cn0sMTg5ODY6ZnVuY3Rpb24odCl7InVzZSBzdHJpY3QiO3QuZXhwb3J0cz1mdW5jdGlvbih0KXt2YXIgZT1bXTtyZXR1cm4gZS50b1N0cmluZz1mdW5jdGlvbigpe3JldHVybiB0aGlzLm1hcCgoZnVuY3Rpb24oZSl7dmFyIG49ZnVuY3Rpb24odCxlKXt2YXIgbj10WzFdfHwiIixyPXRbM107aWYoIXIpcmV0dXJuIG47aWYoZSYmImZ1bmN0aW9uIj09dHlwZW9mIGJ0b2Epe3ZhciBvPShhPXIsYz1idG9hKHVuZXNjYXBlKGVuY29kZVVSSUNvbXBvbmVudChKU09OLnN0cmluZ2lmeShhKSkpKSxzPSJzb3VyY2VNYXBwaW5nVVJMPWRhdGE6YXBwbGljYXRpb24vanNvbjtjaGFyc2V0PXV0Zi04O2Jhc2U2NCwiLmNvbmNhdChjKSwiLyojICIuY29uY2F0KHMsIiAqLyIpKSxpPXIuc291cmNlcy5tYXAoKGZ1bmN0aW9uKHQpe3JldHVybiIvKiMgc291cmNlVVJMPSIuY29uY2F0KHIuc291cmNlUm9vdCkuY29uY2F0KHQsIiAqLyIpfSkpO3JldHVybltuXS5jb25jYXQoaSkuY29uY2F0KFtvXSkuam9pbigiXG4iKX12YXIgYSxjLHM7cmV0dXJuW25dLmpvaW4oIlxuIil9KGUsdCk7cmV0dXJuIGVbMl0/IkBtZWRpYSAiLmNvbmNhdChlWzJdLCIgeyIpLmNvbmNhdChuLCJ9Iik6bn0pKS5qb2luKCIiKX0sZS5pPWZ1bmN0aW9uKHQsbil7InN0cmluZyI9PXR5cGVvZiB0JiYodD1bW251bGwsdCwiIl1dKTtmb3IodmFyIHI9MDtyPHQubGVuZ3RoO3IrKyl7dmFyIG89W10uY29uY2F0KHRbcl0pO24mJihvWzJdP29bMl09IiIuY29uY2F0KG4sIiBhbmQgIikuY29uY2F0KG9bMl0pOm9bMl09biksZS5wdXNoKG8pfX0sZX19LDQ2Njc5OmZ1bmN0aW9uKHQpe3ZhciBlPWZ1bmN0aW9uKHQpeyJ1c2Ugc3RyaWN0Ijt2YXIgZSxuPU9iamVjdC5wcm90b3R5cGUscj1uLmhhc093blByb3BlcnR5LG89ImZ1bmN0aW9uIj09dHlwZW9mIFN5bWJvbD9TeW1ib2w6e30saT1vLml0ZXJhdG9yfHwiQEBpdGVyYXRvciIsYT1vLmFzeW5jSXRlcmF0b3J8fCJAQGFzeW5jSXRlcmF0b3IiLGM9by50b1N0cmluZ1RhZ3x8IkBAdG9TdHJpbmdUYWciO2Z1bmN0aW9uIHModCxlLG4pe3JldHVybiBPYmplY3QuZGVmaW5lUHJvcGVydHkodCxlLHt2YWx1ZTpuLGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwLHdyaXRhYmxlOiEwfSksdFtlXX10cnl7cyh7fSwiIil9Y2F0Y2godCl7cz1mdW5jdGlvbih0LGUsbil7cmV0dXJuIHRbZV09bn19ZnVuY3Rpb24gdSh0LGUsbixyKXt2YXIgbz1lJiZlLnByb3RvdHlwZSBpbnN0YW5jZW9mIGc/ZTpnLGk9T2JqZWN0LmNyZWF0ZShvLnByb3RvdHlwZSksYT1uZXcgQShyfHxbXSk7cmV0dXJuIGkuX2ludm9rZT1mdW5jdGlvbih0LGUsbil7dmFyIHI9ZjtyZXR1cm4gZnVuY3Rpb24obyxpKXtpZihyPT09cCl0aHJvdyBuZXcgRXJyb3IoIkdlbmVyYXRvciBpcyBhbHJlYWR5IHJ1bm5pbmciKTtpZihyPT09aCl7aWYoInRocm93Ij09PW8pdGhyb3cgaTtyZXR1cm4gVCgpfWZvcihuLm1ldGhvZD1vLG4uYXJnPWk7Oyl7dmFyIGE9bi5kZWxlZ2F0ZTtpZihhKXt2YXIgYz1rKGEsbik7aWYoYyl7aWYoYz09PXYpY29udGludWU7cmV0dXJuIGN9fWlmKCJuZXh0Ij09PW4ubWV0aG9kKW4uc2VudD1uLl9zZW50PW4uYXJnO2Vsc2UgaWYoInRocm93Ij09PW4ubWV0aG9kKXtpZihyPT09Zil0aHJvdyByPWgsbi5hcmc7bi5kaXNwYXRjaEV4Y2VwdGlvbihuLmFyZyl9ZWxzZSJyZXR1cm4iPT09bi5tZXRob2QmJm4uYWJydXB0KCJyZXR1cm4iLG4uYXJnKTtyPXA7dmFyIHM9bCh0LGUsbik7aWYoIm5vcm1hbCI9PT1zLnR5cGUpe2lmKHI9bi5kb25lP2g6ZCxzLmFyZz09PXYpY29udGludWU7cmV0dXJue3ZhbHVlOnMuYXJnLGRvbmU6bi5kb25lfX0idGhyb3ciPT09cy50eXBlJiYocj1oLG4ubWV0aG9kPSJ0aHJvdyIsbi5hcmc9cy5hcmcpfX19KHQsbixhKSxpfWZ1bmN0aW9uIGwodCxlLG4pe3RyeXtyZXR1cm57dHlwZToibm9ybWFsIixhcmc6dC5jYWxsKGUsbil9fWNhdGNoKHQpe3JldHVybnt0eXBlOiJ0aHJvdyIsYXJnOnR9fX10LndyYXA9dTt2YXIgZj0ic3VzcGVuZGVkU3RhcnQiLGQ9InN1c3BlbmRlZFlpZWxkIixwPSJleGVjdXRpbmciLGg9ImNvbXBsZXRlZCIsdj17fTtmdW5jdGlvbiBnKCl7fWZ1bmN0aW9uIHkoKXt9ZnVuY3Rpb24gbSgpe312YXIgYj17fTtzKGIsaSwoZnVuY3Rpb24oKXtyZXR1cm4gdGhpc30pKTt2YXIgeD1PYmplY3QuZ2V0UHJvdG90eXBlT2Ysdz14JiZ4KHgoSShbXSkpKTt3JiZ3IT09biYmci5jYWxsKHcsaSkmJihiPXcpO3ZhciBFPW0ucHJvdG90eXBlPWcucHJvdG90eXBlPU9iamVjdC5jcmVhdGUoYik7ZnVuY3Rpb24gaih0KXtbIm5leHQiLCJ0aHJvdyIsInJldHVybiJdLmZvckVhY2goKGZ1bmN0aW9uKGUpe3ModCxlLChmdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5faW52b2tlKGUsdCl9KSl9KSl9ZnVuY3Rpb24gQyh0LGUpe2Z1bmN0aW9uIG4obyxpLGEsYyl7dmFyIHM9bCh0W29dLHQsaSk7aWYoInRocm93IiE9PXMudHlwZSl7dmFyIHU9cy5hcmcsZj11LnZhbHVlO3JldHVybiBmJiYib2JqZWN0Ij09dHlwZW9mIGYmJnIuY2FsbChmLCJfX2F3YWl0Iik/ZS5yZXNvbHZlKGYuX19hd2FpdCkudGhlbigoZnVuY3Rpb24odCl7bigibmV4dCIsdCxhLGMpfSksKGZ1bmN0aW9uKHQpe24oInRocm93Iix0LGEsYyl9KSk6ZS5yZXNvbHZlKGYpLnRoZW4oKGZ1bmN0aW9uKHQpe3UudmFsdWU9dCxhKHUpfSksKGZ1bmN0aW9uKHQpe3JldHVybiBuKCJ0aHJvdyIsdCxhLGMpfSkpfWMocy5hcmcpfXZhciBvO3RoaXMuX2ludm9rZT1mdW5jdGlvbih0LHIpe2Z1bmN0aW9uIGkoKXtyZXR1cm4gbmV3IGUoKGZ1bmN0aW9uKGUsbyl7bih0LHIsZSxvKX0pKX1yZXR1cm4gbz1vP28udGhlbihpLGkpOmkoKX19ZnVuY3Rpb24gayh0LG4pe3ZhciByPXQuaXRlcmF0b3Jbbi5tZXRob2RdO2lmKHI9PT1lKXtpZihuLmRlbGVnYXRlPW51bGwsInRocm93Ij09PW4ubWV0aG9kKXtpZih0Lml0ZXJhdG9yLnJldHVybiYmKG4ubWV0aG9kPSJyZXR1cm4iLG4uYXJnPWUsayh0LG4pLCJ0aHJvdyI9PT1uLm1ldGhvZCkpcmV0dXJuIHY7bi5tZXRob2Q9InRocm93IixuLmFyZz1uZXcgVHlwZUVycm9yKCJUaGUgaXRlcmF0b3IgZG9lcyBub3QgcHJvdmlkZSBhICd0aHJvdycgbWV0aG9kIil9cmV0dXJuIHZ9dmFyIG89bChyLHQuaXRlcmF0b3Isbi5hcmcpO2lmKCJ0aHJvdyI9PT1vLnR5cGUpcmV0dXJuIG4ubWV0aG9kPSJ0aHJvdyIsbi5hcmc9by5hcmcsbi5kZWxlZ2F0ZT1udWxsLHY7dmFyIGk9by5hcmc7cmV0dXJuIGk/aS5kb25lPyhuW3QucmVzdWx0TmFtZV09aS52YWx1ZSxuLm5leHQ9dC5uZXh0TG9jLCJyZXR1cm4iIT09bi5tZXRob2QmJihuLm1ldGhvZD0ibmV4dCIsbi5hcmc9ZSksbi5kZWxlZ2F0ZT1udWxsLHYpOmk6KG4ubWV0aG9kPSJ0aHJvdyIsbi5hcmc9bmV3IFR5cGVFcnJvcigiaXRlcmF0b3IgcmVzdWx0IGlzIG5vdCBhbiBvYmplY3QiKSxuLmRlbGVnYXRlPW51bGwsdil9ZnVuY3Rpb24gUyh0KXt2YXIgZT17dHJ5TG9jOnRbMF19OzEgaW4gdCYmKGUuY2F0Y2hMb2M9dFsxXSksMiBpbiB0JiYoZS5maW5hbGx5TG9jPXRbMl0sZS5hZnRlckxvYz10WzNdKSx0aGlzLnRyeUVudHJpZXMucHVzaChlKX1mdW5jdGlvbiBPKHQpe3ZhciBlPXQuY29tcGxldGlvbnx8e307ZS50eXBlPSJub3JtYWwiLGRlbGV0ZSBlLmFyZyx0LmNvbXBsZXRpb249ZX1mdW5jdGlvbiBBKHQpe3RoaXMudHJ5RW50cmllcz1be3RyeUxvYzoicm9vdCJ9XSx0LmZvckVhY2goUyx0aGlzKSx0aGlzLnJlc2V0KCEwKX1mdW5jdGlvbiBJKHQpe2lmKHQpe3ZhciBuPXRbaV07aWYobilyZXR1cm4gbi5jYWxsKHQpO2lmKCJmdW5jdGlvbiI9PXR5cGVvZiB0Lm5leHQpcmV0dXJuIHQ7aWYoIWlzTmFOKHQubGVuZ3RoKSl7dmFyIG89LTEsYT1mdW5jdGlvbiBuKCl7Zm9yKDsrK288dC5sZW5ndGg7KWlmKHIuY2FsbCh0LG8pKXJldHVybiBuLnZhbHVlPXRbb10sbi5kb25lPSExLG47cmV0dXJuIG4udmFsdWU9ZSxuLmRvbmU9ITAsbn07cmV0dXJuIGEubmV4dD1hfX1yZXR1cm57bmV4dDpUfX1mdW5jdGlvbiBUKCl7cmV0dXJue3ZhbHVlOmUsZG9uZTohMH19cmV0dXJuIHkucHJvdG90eXBlPW0scyhFLCJjb25zdHJ1Y3RvciIsbSkscyhtLCJjb25zdHJ1Y3RvciIseSkseS5kaXNwbGF5TmFtZT1zKG0sYywiR2VuZXJhdG9yRnVuY3Rpb24iKSx0LmlzR2VuZXJhdG9yRnVuY3Rpb249ZnVuY3Rpb24odCl7dmFyIGU9ImZ1bmN0aW9uIj09dHlwZW9mIHQmJnQuY29uc3RydWN0b3I7cmV0dXJuISFlJiYoZT09PXl8fCJHZW5lcmF0b3JGdW5jdGlvbiI9PT0oZS5kaXNwbGF5TmFtZXx8ZS5uYW1lKSl9LHQubWFyaz1mdW5jdGlvbih0KXtyZXR1cm4gT2JqZWN0LnNldFByb3RvdHlwZU9mP09iamVjdC5zZXRQcm90b3R5cGVPZih0LG0pOih0Ll9fcHJvdG9fXz1tLHModCxjLCJHZW5lcmF0b3JGdW5jdGlvbiIpKSx0LnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKEUpLHR9LHQuYXdyYXA9ZnVuY3Rpb24odCl7cmV0dXJue19fYXdhaXQ6dH19LGooQy5wcm90b3R5cGUpLHMoQy5wcm90b3R5cGUsYSwoZnVuY3Rpb24oKXtyZXR1cm4gdGhpc30pKSx0LkFzeW5jSXRlcmF0b3I9Qyx0LmFzeW5jPWZ1bmN0aW9uKGUsbixyLG8saSl7dm9pZCAwPT09aSYmKGk9UHJvbWlzZSk7dmFyIGE9bmV3IEModShlLG4scixvKSxpKTtyZXR1cm4gdC5pc0dlbmVyYXRvckZ1bmN0aW9uKG4pP2E6YS5uZXh0KCkudGhlbigoZnVuY3Rpb24odCl7cmV0dXJuIHQuZG9uZT90LnZhbHVlOmEubmV4dCgpfSkpfSxqKEUpLHMoRSxjLCJHZW5lcmF0b3IiKSxzKEUsaSwoZnVuY3Rpb24oKXtyZXR1cm4gdGhpc30pKSxzKEUsInRvU3RyaW5nIiwoZnVuY3Rpb24oKXtyZXR1cm4iW29iamVjdCBHZW5lcmF0b3JdIn0pKSx0LmtleXM9ZnVuY3Rpb24odCl7dmFyIGU9W107Zm9yKHZhciBuIGluIHQpZS5wdXNoKG4pO3JldHVybiBlLnJldmVyc2UoKSxmdW5jdGlvbiBuKCl7Zm9yKDtlLmxlbmd0aDspe3ZhciByPWUucG9wKCk7aWYociBpbiB0KXJldHVybiBuLnZhbHVlPXIsbi5kb25lPSExLG59cmV0dXJuIG4uZG9uZT0hMCxufX0sdC52YWx1ZXM9SSxBLnByb3RvdHlwZT17Y29uc3RydWN0b3I6QSxyZXNldDpmdW5jdGlvbih0KXtpZih0aGlzLnByZXY9MCx0aGlzLm5leHQ9MCx0aGlzLnNlbnQ9dGhpcy5fc2VudD1lLHRoaXMuZG9uZT0hMSx0aGlzLmRlbGVnYXRlPW51bGwsdGhpcy5tZXRob2Q9Im5leHQiLHRoaXMuYXJnPWUsdGhpcy50cnlFbnRyaWVzLmZvckVhY2goTyksIXQpZm9yKHZhciBuIGluIHRoaXMpInQiPT09bi5jaGFyQXQoMCkmJnIuY2FsbCh0aGlzLG4pJiYhaXNOYU4oK24uc2xpY2UoMSkpJiYodGhpc1tuXT1lKX0sc3RvcDpmdW5jdGlvbigpe3RoaXMuZG9uZT0hMDt2YXIgdD10aGlzLnRyeUVudHJpZXNbMF0uY29tcGxldGlvbjtpZigidGhyb3ciPT09dC50eXBlKXRocm93IHQuYXJnO3JldHVybiB0aGlzLnJ2YWx9LGRpc3BhdGNoRXhjZXB0aW9uOmZ1bmN0aW9uKHQpe2lmKHRoaXMuZG9uZSl0aHJvdyB0O3ZhciBuPXRoaXM7ZnVuY3Rpb24gbyhyLG8pe3JldHVybiBjLnR5cGU9InRocm93IixjLmFyZz10LG4ubmV4dD1yLG8mJihuLm1ldGhvZD0ibmV4dCIsbi5hcmc9ZSksISFvfWZvcih2YXIgaT10aGlzLnRyeUVudHJpZXMubGVuZ3RoLTE7aT49MDstLWkpe3ZhciBhPXRoaXMudHJ5RW50cmllc1tpXSxjPWEuY29tcGxldGlvbjtpZigicm9vdCI9PT1hLnRyeUxvYylyZXR1cm4gbygiZW5kIik7aWYoYS50cnlMb2M8PXRoaXMucHJldil7dmFyIHM9ci5jYWxsKGEsImNhdGNoTG9jIiksdT1yLmNhbGwoYSwiZmluYWxseUxvYyIpO2lmKHMmJnUpe2lmKHRoaXMucHJldjxhLmNhdGNoTG9jKXJldHVybiBvKGEuY2F0Y2hMb2MsITApO2lmKHRoaXMucHJldjxhLmZpbmFsbHlMb2MpcmV0dXJuIG8oYS5maW5hbGx5TG9jKX1lbHNlIGlmKHMpe2lmKHRoaXMucHJldjxhLmNhdGNoTG9jKXJldHVybiBvKGEuY2F0Y2hMb2MsITApfWVsc2V7aWYoIXUpdGhyb3cgbmV3IEVycm9yKCJ0cnkgc3RhdGVtZW50IHdpdGhvdXQgY2F0Y2ggb3IgZmluYWxseSIpO2lmKHRoaXMucHJldjxhLmZpbmFsbHlMb2MpcmV0dXJuIG8oYS5maW5hbGx5TG9jKX19fX0sYWJydXB0OmZ1bmN0aW9uKHQsZSl7Zm9yKHZhciBuPXRoaXMudHJ5RW50cmllcy5sZW5ndGgtMTtuPj0wOy0tbil7dmFyIG89dGhpcy50cnlFbnRyaWVzW25dO2lmKG8udHJ5TG9jPD10aGlzLnByZXYmJnIuY2FsbChvLCJmaW5hbGx5TG9jIikmJnRoaXMucHJldjxvLmZpbmFsbHlMb2Mpe3ZhciBpPW87YnJlYWt9fWkmJigiYnJlYWsiPT09dHx8ImNvbnRpbnVlIj09PXQpJiZpLnRyeUxvYzw9ZSYmZTw9aS5maW5hbGx5TG9jJiYoaT1udWxsKTt2YXIgYT1pP2kuY29tcGxldGlvbjp7fTtyZXR1cm4gYS50eXBlPXQsYS5hcmc9ZSxpPyh0aGlzLm1ldGhvZD0ibmV4dCIsdGhpcy5uZXh0PWkuZmluYWxseUxvYyx2KTp0aGlzLmNvbXBsZXRlKGEpfSxjb21wbGV0ZTpmdW5jdGlvbih0LGUpe2lmKCJ0aHJvdyI9PT10LnR5cGUpdGhyb3cgdC5hcmc7cmV0dXJuImJyZWFrIj09PXQudHlwZXx8ImNvbnRpbnVlIj09PXQudHlwZT90aGlzLm5leHQ9dC5hcmc6InJldHVybiI9PT10LnR5cGU/KHRoaXMucnZhbD10aGlzLmFyZz10LmFyZyx0aGlzLm1ldGhvZD0icmV0dXJuIix0aGlzLm5leHQ9ImVuZCIpOiJub3JtYWwiPT09dC50eXBlJiZlJiYodGhpcy5uZXh0PWUpLHZ9LGZpbmlzaDpmdW5jdGlvbih0KXtmb3IodmFyIGU9dGhpcy50cnlFbnRyaWVzLmxlbmd0aC0xO2U+PTA7LS1lKXt2YXIgbj10aGlzLnRyeUVudHJpZXNbZV07aWYobi5maW5hbGx5TG9jPT09dClyZXR1cm4gdGhpcy5jb21wbGV0ZShuLmNvbXBsZXRpb24sbi5hZnRlckxvYyksTyhuKSx2fX0sY2F0Y2g6ZnVuY3Rpb24odCl7Zm9yKHZhciBlPXRoaXMudHJ5RW50cmllcy5sZW5ndGgtMTtlPj0wOy0tZSl7dmFyIG49dGhpcy50cnlFbnRyaWVzW2VdO2lmKG4udHJ5TG9jPT09dCl7dmFyIHI9bi5jb21wbGV0aW9uO2lmKCJ0aHJvdyI9PT1yLnR5cGUpe3ZhciBvPXIuYXJnO08obil9cmV0dXJuIG99fXRocm93IG5ldyBFcnJvcigiaWxsZWdhbCBjYXRjaCBhdHRlbXB0Iil9LGRlbGVnYXRlWWllbGQ6ZnVuY3Rpb24odCxuLHIpe3JldHVybiB0aGlzLmRlbGVnYXRlPXtpdGVyYXRvcjpJKHQpLHJlc3VsdE5hbWU6bixuZXh0TG9jOnJ9LCJuZXh0Ij09PXRoaXMubWV0aG9kJiYodGhpcy5hcmc9ZSksdn19LHR9KHQuZXhwb3J0cyk7dHJ5e3JlZ2VuZXJhdG9yUnVudGltZT1lfWNhdGNoKHQpeyJvYmplY3QiPT10eXBlb2YgZ2xvYmFsVGhpcz9nbG9iYWxUaGlzLnJlZ2VuZXJhdG9yUnVudGltZT1lOkZ1bmN0aW9uKCJyIiwicmVnZW5lcmF0b3JSdW50aW1lID0gciIpKGUpfX19LGU9e307ZnVuY3Rpb24gbihyKXt2YXIgbz1lW3JdO2lmKHZvaWQgMCE9PW8pcmV0dXJuIG8uZXhwb3J0czt2YXIgaT1lW3JdPXtpZDpyLGV4cG9ydHM6e319O3JldHVybiB0W3JdLmNhbGwoaS5leHBvcnRzLGksaS5leHBvcnRzLG4pLGkuZXhwb3J0c31uLm49ZnVuY3Rpb24odCl7dmFyIGU9dCYmdC5fX2VzTW9kdWxlP2Z1bmN0aW9uKCl7cmV0dXJuIHQuZGVmYXVsdH06ZnVuY3Rpb24oKXtyZXR1cm4gdH07cmV0dXJuIG4uZChlLHthOmV9KSxlfSxuLmQ9ZnVuY3Rpb24odCxlKXtmb3IodmFyIHIgaW4gZSluLm8oZSxyKSYmIW4ubyh0LHIpJiZPYmplY3QuZGVmaW5lUHJvcGVydHkodCxyLHtlbnVtZXJhYmxlOiEwLGdldDplW3JdfSl9LG4uZz1mdW5jdGlvbigpe2lmKCJvYmplY3QiPT10eXBlb2YgZ2xvYmFsVGhpcylyZXR1cm4gZ2xvYmFsVGhpczt0cnl7cmV0dXJuIHRoaXN8fG5ldyBGdW5jdGlvbigicmV0dXJuIHRoaXMiKSgpfWNhdGNoKHQpe2lmKCJvYmplY3QiPT10eXBlb2Ygd2luZG93KXJldHVybiB3aW5kb3d9fSgpLG4ubz1mdW5jdGlvbih0LGUpe3JldHVybiBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwodCxlKX0sbi5yPWZ1bmN0aW9uKHQpeyJ1bmRlZmluZWQiIT10eXBlb2YgU3ltYm9sJiZTeW1ib2wudG9TdHJpbmdUYWcmJk9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LFN5bWJvbC50b1N0cmluZ1RhZyx7dmFsdWU6Ik1vZHVsZSJ9KSxPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSl9LGZ1bmN0aW9uKCl7InVzZSBzdHJpY3QiO3ZhciB0PXt9O24ucih0KSxuLmQodCx7ZGlzYWJsZTpmdW5jdGlvbigpe3JldHVybiBDdH0sZW5hYmxlOmZ1bmN0aW9uKCl7cmV0dXJuIGp0fX0pO3ZhciBlPW4oNjQxNTcpLHI9bi5uKGUpLG89KG4oNjA0OTEpLG4oNDY2NzkpLCJVUkxTZWFyY2hQYXJhbXMiaW4gc2VsZiksaT0iU3ltYm9sImluIHNlbGYmJiJpdGVyYXRvciJpbiBTeW1ib2wsYT0iRmlsZVJlYWRlciJpbiBzZWxmJiYiQmxvYiJpbiBzZWxmJiZmdW5jdGlvbigpe3RyeXtyZXR1cm4gbmV3IEJsb2IsITB9Y2F0Y2godCl7cmV0dXJuITF9fSgpLGM9IkZvcm1EYXRhImluIHNlbGYscz0iQXJyYXlCdWZmZXIiaW4gc2VsZjtpZihzKXZhciB1PVsiW29iamVjdCBJbnQ4QXJyYXldIiwiW29iamVjdCBVaW50OEFycmF5XSIsIltvYmplY3QgVWludDhDbGFtcGVkQXJyYXldIiwiW29iamVjdCBJbnQxNkFycmF5XSIsIltvYmplY3QgVWludDE2QXJyYXldIiwiW29iamVjdCBJbnQzMkFycmF5XSIsIltvYmplY3QgVWludDMyQXJyYXldIiwiW29iamVjdCBGbG9hdDMyQXJyYXldIiwiW29iamVjdCBGbG9hdDY0QXJyYXldIl0sbD1BcnJheUJ1ZmZlci5pc1ZpZXd8fGZ1bmN0aW9uKHQpe3JldHVybiB0JiZ1LmluZGV4T2YoT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKHQpKT4tMX07ZnVuY3Rpb24gZih0KXtpZigic3RyaW5nIiE9dHlwZW9mIHQmJih0PVN0cmluZyh0KSksL1teYS16MC05XC0jJCUmJyorLl5fYHx+XS9pLnRlc3QodCkpdGhyb3cgbmV3IFR5cGVFcnJvcigiSW52YWxpZCBjaGFyYWN0ZXIgaW4gaGVhZGVyIGZpZWxkIG5hbWUiKTtyZXR1cm4gdC50b0xvd2VyQ2FzZSgpfWZ1bmN0aW9uIGQodCl7cmV0dXJuInN0cmluZyIhPXR5cGVvZiB0JiYodD1TdHJpbmcodCkpLHR9ZnVuY3Rpb24gcCh0KXt2YXIgZT17bmV4dDpmdW5jdGlvbigpe3ZhciBlPXQuc2hpZnQoKTtyZXR1cm57ZG9uZTp2b2lkIDA9PT1lLHZhbHVlOmV9fX07cmV0dXJuIGkmJihlW1N5bWJvbC5pdGVyYXRvcl09ZnVuY3Rpb24oKXtyZXR1cm4gZX0pLGV9ZnVuY3Rpb24gaCh0KXt0aGlzLm1hcD17fSx0IGluc3RhbmNlb2YgaD90LmZvckVhY2goKGZ1bmN0aW9uKHQsZSl7dGhpcy5hcHBlbmQoZSx0KX0pLHRoaXMpOkFycmF5LmlzQXJyYXkodCk/dC5mb3JFYWNoKChmdW5jdGlvbih0KXt0aGlzLmFwcGVuZCh0WzBdLHRbMV0pfSksdGhpcyk6dCYmT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXModCkuZm9yRWFjaCgoZnVuY3Rpb24oZSl7dGhpcy5hcHBlbmQoZSx0W2VdKX0pLHRoaXMpfWZ1bmN0aW9uIHYodCl7aWYodC5ib2R5VXNlZClyZXR1cm4gUHJvbWlzZS5yZWplY3QobmV3IFR5cGVFcnJvcigiQWxyZWFkeSByZWFkIikpO3QuYm9keVVzZWQ9ITB9ZnVuY3Rpb24gZyh0KXtyZXR1cm4gbmV3IFByb21pc2UoKGZ1bmN0aW9uKGUsbil7dC5vbmxvYWQ9ZnVuY3Rpb24oKXtlKHQucmVzdWx0KX0sdC5vbmVycm9yPWZ1bmN0aW9uKCl7bih0LmVycm9yKX19KSl9ZnVuY3Rpb24geSh0KXt2YXIgZT1uZXcgRmlsZVJlYWRlcixuPWcoZSk7cmV0dXJuIGUucmVhZEFzQXJyYXlCdWZmZXIodCksbn1mdW5jdGlvbiBtKHQpe2lmKHQuc2xpY2UpcmV0dXJuIHQuc2xpY2UoMCk7dmFyIGU9bmV3IFVpbnQ4QXJyYXkodC5ieXRlTGVuZ3RoKTtyZXR1cm4gZS5zZXQobmV3IFVpbnQ4QXJyYXkodCkpLGUuYnVmZmVyfWZ1bmN0aW9uIGIoKXtyZXR1cm4gdGhpcy5ib2R5VXNlZD0hMSx0aGlzLl9pbml0Qm9keT1mdW5jdGlvbih0KXt2YXIgZTt0aGlzLl9ib2R5SW5pdD10LHQ/InN0cmluZyI9PXR5cGVvZiB0P3RoaXMuX2JvZHlUZXh0PXQ6YSYmQmxvYi5wcm90b3R5cGUuaXNQcm90b3R5cGVPZih0KT90aGlzLl9ib2R5QmxvYj10OmMmJkZvcm1EYXRhLnByb3RvdHlwZS5pc1Byb3RvdHlwZU9mKHQpP3RoaXMuX2JvZHlGb3JtRGF0YT10Om8mJlVSTFNlYXJjaFBhcmFtcy5wcm90b3R5cGUuaXNQcm90b3R5cGVPZih0KT90aGlzLl9ib2R5VGV4dD10LnRvU3RyaW5nKCk6cyYmYSYmKChlPXQpJiZEYXRhVmlldy5wcm90b3R5cGUuaXNQcm90b3R5cGVPZihlKSk/KHRoaXMuX2JvZHlBcnJheUJ1ZmZlcj1tKHQuYnVmZmVyKSx0aGlzLl9ib2R5SW5pdD1uZXcgQmxvYihbdGhpcy5fYm9keUFycmF5QnVmZmVyXSkpOnMmJihBcnJheUJ1ZmZlci5wcm90b3R5cGUuaXNQcm90b3R5cGVPZih0KXx8bCh0KSk/dGhpcy5fYm9keUFycmF5QnVmZmVyPW0odCk6dGhpcy5fYm9keVRleHQ9dD1PYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwodCk6dGhpcy5fYm9keVRleHQ9IiIsdGhpcy5oZWFkZXJzLmdldCgiY29udGVudC10eXBlIil8fCgic3RyaW5nIj09dHlwZW9mIHQ/dGhpcy5oZWFkZXJzLnNldCgiY29udGVudC10eXBlIiwidGV4dC9wbGFpbjtjaGFyc2V0PVVURi04Iik6dGhpcy5fYm9keUJsb2ImJnRoaXMuX2JvZHlCbG9iLnR5cGU/dGhpcy5oZWFkZXJzLnNldCgiY29udGVudC10eXBlIix0aGlzLl9ib2R5QmxvYi50eXBlKTpvJiZVUkxTZWFyY2hQYXJhbXMucHJvdG90eXBlLmlzUHJvdG90eXBlT2YodCkmJnRoaXMuaGVhZGVycy5zZXQoImNvbnRlbnQtdHlwZSIsImFwcGxpY2F0aW9uL3gtd3d3LWZvcm0tdXJsZW5jb2RlZDtjaGFyc2V0PVVURi04IikpfSxhJiYodGhpcy5ibG9iPWZ1bmN0aW9uKCl7dmFyIHQ9dih0aGlzKTtpZih0KXJldHVybiB0O2lmKHRoaXMuX2JvZHlCbG9iKXJldHVybiBQcm9taXNlLnJlc29sdmUodGhpcy5fYm9keUJsb2IpO2lmKHRoaXMuX2JvZHlBcnJheUJ1ZmZlcilyZXR1cm4gUHJvbWlzZS5yZXNvbHZlKG5ldyBCbG9iKFt0aGlzLl9ib2R5QXJyYXlCdWZmZXJdKSk7aWYodGhpcy5fYm9keUZvcm1EYXRhKXRocm93IG5ldyBFcnJvcigiY291bGQgbm90IHJlYWQgRm9ybURhdGEgYm9keSBhcyBibG9iIik7cmV0dXJuIFByb21pc2UucmVzb2x2ZShuZXcgQmxvYihbdGhpcy5fYm9keVRleHRdKSl9LHRoaXMuYXJyYXlCdWZmZXI9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fYm9keUFycmF5QnVmZmVyP3YodGhpcyl8fFByb21pc2UucmVzb2x2ZSh0aGlzLl9ib2R5QXJyYXlCdWZmZXIpOnRoaXMuYmxvYigpLnRoZW4oeSl9KSx0aGlzLnRleHQ9ZnVuY3Rpb24oKXt2YXIgdCxlLG4scj12KHRoaXMpO2lmKHIpcmV0dXJuIHI7aWYodGhpcy5fYm9keUJsb2IpcmV0dXJuIHQ9dGhpcy5fYm9keUJsb2IsZT1uZXcgRmlsZVJlYWRlcixuPWcoZSksZS5yZWFkQXNUZXh0KHQpLG47aWYodGhpcy5fYm9keUFycmF5QnVmZmVyKXJldHVybiBQcm9taXNlLnJlc29sdmUoZnVuY3Rpb24odCl7Zm9yKHZhciBlPW5ldyBVaW50OEFycmF5KHQpLG49bmV3IEFycmF5KGUubGVuZ3RoKSxyPTA7cjxlLmxlbmd0aDtyKyspbltyXT1TdHJpbmcuZnJvbUNoYXJDb2RlKGVbcl0pO3JldHVybiBuLmpvaW4oIiIpfSh0aGlzLl9ib2R5QXJyYXlCdWZmZXIpKTtpZih0aGlzLl9ib2R5Rm9ybURhdGEpdGhyb3cgbmV3IEVycm9yKCJjb3VsZCBub3QgcmVhZCBGb3JtRGF0YSBib2R5IGFzIHRleHQiKTtyZXR1cm4gUHJvbWlzZS5yZXNvbHZlKHRoaXMuX2JvZHlUZXh0KX0sYyYmKHRoaXMuZm9ybURhdGE9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy50ZXh0KCkudGhlbihFKX0pLHRoaXMuanNvbj1mdW5jdGlvbigpe3JldHVybiB0aGlzLnRleHQoKS50aGVuKEpTT04ucGFyc2UpfSx0aGlzfWgucHJvdG90eXBlLmFwcGVuZD1mdW5jdGlvbih0LGUpe3Q9Zih0KSxlPWQoZSk7dmFyIG49dGhpcy5tYXBbdF07dGhpcy5tYXBbdF09bj9uKyIsICIrZTplfSxoLnByb3RvdHlwZS5kZWxldGU9ZnVuY3Rpb24odCl7ZGVsZXRlIHRoaXMubWFwW2YodCldfSxoLnByb3RvdHlwZS5nZXQ9ZnVuY3Rpb24odCl7cmV0dXJuIHQ9Zih0KSx0aGlzLmhhcyh0KT90aGlzLm1hcFt0XTpudWxsfSxoLnByb3RvdHlwZS5oYXM9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMubWFwLmhhc093blByb3BlcnR5KGYodCkpfSxoLnByb3RvdHlwZS5zZXQ9ZnVuY3Rpb24odCxlKXt0aGlzLm1hcFtmKHQpXT1kKGUpfSxoLnByb3RvdHlwZS5mb3JFYWNoPWZ1bmN0aW9uKHQsZSl7Zm9yKHZhciBuIGluIHRoaXMubWFwKXRoaXMubWFwLmhhc093blByb3BlcnR5KG4pJiZ0LmNhbGwoZSx0aGlzLm1hcFtuXSxuLHRoaXMpfSxoLnByb3RvdHlwZS5rZXlzPWZ1bmN0aW9uKCl7dmFyIHQ9W107cmV0dXJuIHRoaXMuZm9yRWFjaCgoZnVuY3Rpb24oZSxuKXt0LnB1c2gobil9KSkscCh0KX0saC5wcm90b3R5cGUudmFsdWVzPWZ1bmN0aW9uKCl7dmFyIHQ9W107cmV0dXJuIHRoaXMuZm9yRWFjaCgoZnVuY3Rpb24oZSl7dC5wdXNoKGUpfSkpLHAodCl9LGgucHJvdG90eXBlLmVudHJpZXM9ZnVuY3Rpb24oKXt2YXIgdD1bXTtyZXR1cm4gdGhpcy5mb3JFYWNoKChmdW5jdGlvbihlLG4pe3QucHVzaChbbixlXSl9KSkscCh0KX0saSYmKGgucHJvdG90eXBlW1N5bWJvbC5pdGVyYXRvcl09aC5wcm90b3R5cGUuZW50cmllcyk7dmFyIHg9WyJERUxFVEUiLCJHRVQiLCJIRUFEIiwiT1BUSU9OUyIsIlBPU1QiLCJQVVQiXTtmdW5jdGlvbiB3KHQsZSl7dmFyIG4scixvPShlPWV8fHt9KS5ib2R5O2lmKHQgaW5zdGFuY2VvZiB3KXtpZih0LmJvZHlVc2VkKXRocm93IG5ldyBUeXBlRXJyb3IoIkFscmVhZHkgcmVhZCIpO3RoaXMudXJsPXQudXJsLHRoaXMuY3JlZGVudGlhbHM9dC5jcmVkZW50aWFscyxlLmhlYWRlcnN8fCh0aGlzLmhlYWRlcnM9bmV3IGgodC5oZWFkZXJzKSksdGhpcy5tZXRob2Q9dC5tZXRob2QsdGhpcy5tb2RlPXQubW9kZSx0aGlzLnNpZ25hbD10LnNpZ25hbCxvfHxudWxsPT10Ll9ib2R5SW5pdHx8KG89dC5fYm9keUluaXQsdC5ib2R5VXNlZD0hMCl9ZWxzZSB0aGlzLnVybD1TdHJpbmcodCk7aWYodGhpcy5jcmVkZW50aWFscz1lLmNyZWRlbnRpYWxzfHx0aGlzLmNyZWRlbnRpYWxzfHwic2FtZS1vcmlnaW4iLCFlLmhlYWRlcnMmJnRoaXMuaGVhZGVyc3x8KHRoaXMuaGVhZGVycz1uZXcgaChlLmhlYWRlcnMpKSx0aGlzLm1ldGhvZD0obj1lLm1ldGhvZHx8dGhpcy5tZXRob2R8fCJHRVQiLHI9bi50b1VwcGVyQ2FzZSgpLHguaW5kZXhPZihyKT4tMT9yOm4pLHRoaXMubW9kZT1lLm1vZGV8fHRoaXMubW9kZXx8bnVsbCx0aGlzLnNpZ25hbD1lLnNpZ25hbHx8dGhpcy5zaWduYWwsdGhpcy5yZWZlcnJlcj1udWxsLCgiR0VUIj09PXRoaXMubWV0aG9kfHwiSEVBRCI9PT10aGlzLm1ldGhvZCkmJm8pdGhyb3cgbmV3IFR5cGVFcnJvcigiQm9keSBub3QgYWxsb3dlZCBmb3IgR0VUIG9yIEhFQUQgcmVxdWVzdHMiKTt0aGlzLl9pbml0Qm9keShvKX1mdW5jdGlvbiBFKHQpe3ZhciBlPW5ldyBGb3JtRGF0YTtyZXR1cm4gdC50cmltKCkuc3BsaXQoIiYiKS5mb3JFYWNoKChmdW5jdGlvbih0KXtpZih0KXt2YXIgbj10LnNwbGl0KCI9Iikscj1uLnNoaWZ0KCkucmVwbGFjZSgvXCsvZywiICIpLG89bi5qb2luKCI9IikucmVwbGFjZSgvXCsvZywiICIpO2UuYXBwZW5kKGRlY29kZVVSSUNvbXBvbmVudChyKSxkZWNvZGVVUklDb21wb25lbnQobykpfX0pKSxlfWZ1bmN0aW9uIGoodCl7dmFyIGU9bmV3IGg7cmV0dXJuIHQucmVwbGFjZSgvXHI/XG5bXHQgXSsvZywiICIpLnNwbGl0KC9ccj9cbi8pLmZvckVhY2goKGZ1bmN0aW9uKHQpe3ZhciBuPXQuc3BsaXQoIjoiKSxyPW4uc2hpZnQoKS50cmltKCk7aWYocil7dmFyIG89bi5qb2luKCI6IikudHJpbSgpO2UuYXBwZW5kKHIsbyl9fSkpLGV9ZnVuY3Rpb24gQyh0LGUpe2V8fChlPXt9KSx0aGlzLnR5cGU9ImRlZmF1bHQiLHRoaXMuc3RhdHVzPXZvaWQgMD09PWUuc3RhdHVzPzIwMDplLnN0YXR1cyx0aGlzLm9rPXRoaXMuc3RhdHVzPj0yMDAmJnRoaXMuc3RhdHVzPDMwMCx0aGlzLnN0YXR1c1RleHQ9InN0YXR1c1RleHQiaW4gZT9lLnN0YXR1c1RleHQ6Ik9LIix0aGlzLmhlYWRlcnM9bmV3IGgoZS5oZWFkZXJzKSx0aGlzLnVybD1lLnVybHx8IiIsdGhpcy5faW5pdEJvZHkodCl9dy5wcm90b3R5cGUuY2xvbmU9ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IHcodGhpcyx7Ym9keTp0aGlzLl9ib2R5SW5pdH0pfSxiLmNhbGwody5wcm90b3R5cGUpLGIuY2FsbChDLnByb3RvdHlwZSksQy5wcm90b3R5cGUuY2xvbmU9ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IEModGhpcy5fYm9keUluaXQse3N0YXR1czp0aGlzLnN0YXR1cyxzdGF0dXNUZXh0OnRoaXMuc3RhdHVzVGV4dCxoZWFkZXJzOm5ldyBoKHRoaXMuaGVhZGVycyksdXJsOnRoaXMudXJsfSl9LEMuZXJyb3I9ZnVuY3Rpb24oKXt2YXIgdD1uZXcgQyhudWxsLHtzdGF0dXM6MCxzdGF0dXNUZXh0OiIifSk7cmV0dXJuIHQudHlwZT0iZXJyb3IiLHR9O3ZhciBrPVszMDEsMzAyLDMwMywzMDcsMzA4XTtDLnJlZGlyZWN0PWZ1bmN0aW9uKHQsZSl7aWYoLTE9PT1rLmluZGV4T2YoZSkpdGhyb3cgbmV3IFJhbmdlRXJyb3IoIkludmFsaWQgc3RhdHVzIGNvZGUiKTtyZXR1cm4gbmV3IEMobnVsbCx7c3RhdHVzOmUsaGVhZGVyczp7bG9jYXRpb246dH19KX07dmFyIFM9c2VsZi5ET01FeGNlcHRpb247dHJ5e25ldyBTfWNhdGNoKHQpeyhTPWZ1bmN0aW9uKHQsZSl7dGhpcy5tZXNzYWdlPXQsdGhpcy5uYW1lPWU7dmFyIG49RXJyb3IodCk7dGhpcy5zdGFjaz1uLnN0YWNrfSkucHJvdG90eXBlPU9iamVjdC5jcmVhdGUoRXJyb3IucHJvdG90eXBlKSxTLnByb3RvdHlwZS5jb25zdHJ1Y3Rvcj1TfWZ1bmN0aW9uIE8odCxlKXtyZXR1cm4gbmV3IFByb21pc2UoKGZ1bmN0aW9uKG4scil7dmFyIG89bmV3IHcodCxlKTtpZihvLnNpZ25hbCYmby5zaWduYWwuYWJvcnRlZClyZXR1cm4gcihuZXcgUygiQWJvcnRlZCIsIkFib3J0RXJyb3IiKSk7dmFyIGk9bmV3IFhNTEh0dHBSZXF1ZXN0O2Z1bmN0aW9uIGMoKXtpLmFib3J0KCl9aS5vbmxvYWQ9ZnVuY3Rpb24oKXt2YXIgdD17c3RhdHVzOmkuc3RhdHVzLHN0YXR1c1RleHQ6aS5zdGF0dXNUZXh0LGhlYWRlcnM6aihpLmdldEFsbFJlc3BvbnNlSGVhZGVycygpfHwiIil9O3QudXJsPSJyZXNwb25zZVVSTCJpbiBpP2kucmVzcG9uc2VVUkw6dC5oZWFkZXJzLmdldCgiWC1SZXF1ZXN0LVVSTCIpO3ZhciBlPSJyZXNwb25zZSJpbiBpP2kucmVzcG9uc2U6aS5yZXNwb25zZVRleHQ7bihuZXcgQyhlLHQpKX0saS5vbmVycm9yPWZ1bmN0aW9uKCl7cihuZXcgVHlwZUVycm9yKCJOZXR3b3JrIHJlcXVlc3QgZmFpbGVkIikpfSxpLm9udGltZW91dD1mdW5jdGlvbigpe3IobmV3IFR5cGVFcnJvcigiTmV0d29yayByZXF1ZXN0IGZhaWxlZCIpKX0saS5vbmFib3J0PWZ1bmN0aW9uKCl7cihuZXcgUygiQWJvcnRlZCIsIkFib3J0RXJyb3IiKSl9LGkub3BlbihvLm1ldGhvZCxvLnVybCwhMCksImluY2x1ZGUiPT09by5jcmVkZW50aWFscz9pLndpdGhDcmVkZW50aWFscz0hMDoib21pdCI9PT1vLmNyZWRlbnRpYWxzJiYoaS53aXRoQ3JlZGVudGlhbHM9ITEpLCJyZXNwb25zZVR5cGUiaW4gaSYmYSYmKGkucmVzcG9uc2VUeXBlPSJibG9iIiksby5oZWFkZXJzLmZvckVhY2goKGZ1bmN0aW9uKHQsZSl7aS5zZXRSZXF1ZXN0SGVhZGVyKGUsdCl9KSksby5zaWduYWwmJihvLnNpZ25hbC5hZGRFdmVudExpc3RlbmVyKCJhYm9ydCIsYyksaS5vbnJlYWR5c3RhdGVjaGFuZ2U9ZnVuY3Rpb24oKXs0PT09aS5yZWFkeVN0YXRlJiZvLnNpZ25hbC5yZW1vdmVFdmVudExpc3RlbmVyKCJhYm9ydCIsYyl9KSxpLnNlbmQodm9pZCAwPT09by5fYm9keUluaXQ/bnVsbDpvLl9ib2R5SW5pdCl9KSl9ZnVuY3Rpb24gQSh0LGUpe2Zvcih2YXIgbj1bXSxyPVtdLG89YXJndW1lbnRzLmxlbmd0aDtvLS0gPjI7KW4ucHVzaChhcmd1bWVudHNbb10pO2Zvcig7bi5sZW5ndGg7KXt2YXIgaT1uLnBvcCgpO2lmKGkmJmkucG9wKWZvcihvPWkubGVuZ3RoO28tLTspbi5wdXNoKGlbb10pO2Vsc2UgbnVsbCE9aSYmITAhPT1pJiYhMSE9PWkmJnIucHVzaChpKX1yZXR1cm4iZnVuY3Rpb24iPT10eXBlb2YgdD90KGV8fHt9LHIpOntub2RlTmFtZTp0LGF0dHJpYnV0ZXM6ZXx8e30sY2hpbGRyZW46cixrZXk6ZSYmZS5rZXl9fU8ucG9seWZpbGw9ITAsc2VsZi5mZXRjaHx8KHNlbGYuZmV0Y2g9TyxzZWxmLkhlYWRlcnM9aCxzZWxmLlJlcXVlc3Q9dyxzZWxmLlJlc3BvbnNlPUMpO3ZhciBJPW4oNjYwODEpLFQ9bi5uKEkpLF89big5MjgxNiksTT1uLm4oXyksTD1uKDQ0Njc0KSxSPW4ubihMKSxQPW4oNDQ2MjEpLE49bi5uKFApLEY9QXJyYXkuaXNBcnJheTtmdW5jdGlvbiBEKHQpe3ZhciBlLG4scj10eXBlb2YgdCxvPSIiO2lmKCJzdHJpbmciPT09cnx8Im51bWJlciI9PT1yKXJldHVybiB0fHwiIjtpZihGKHQpJiZ0Lmxlbmd0aD4wKWZvcihlPTAsbj10Lmxlbmd0aDtlPG47ZSsrKSIiIT09KHI9RCh0W2VdKSkmJihvKz0obyYmIiAiKStyKTtlbHNlIGZvcihlIGluIHQpdC5oYXNPd25Qcm9wZXJ0eShlKSYmdFtlXSYmKG8rPShvJiYiICIpK2UpO3JldHVybiBvfXZhciBVPSJ4LXVsLWVudmlyb25tZW50LWlkIixCPSJ4LXVsLWFub255bW91cy1pZCIsej0ieC11bC11c2VyLWlkIixIPSJ4LXVsLXZpc2l0b3ItaWQiLFY9IngtdWwtaW5zdGFsbGF0aW9uLW1ldGhvZCIscT0id2ViLWd0bSIsVz0id2ViLXNlZ21lbnQiLEc9IndlYi1zbmlwcGV0IixaPSJ1bC1jdXN0b20tc3R5bGUiLFk9InVsLWNhcmRfX2NvbnRhaW5lciIsJD0idWwtY2FyZC0tdmlkZW8iLEs9ImNsb3NlLWNvbnRhaW5lciIsSj0iY2xvc2UtYnRuIixYPSJsaWtlcnQtbnVtYmVyIixRPSJucHMtbnVtYmVyIix0dD0iY2hvaWNlIixldD0ic2VsZWN0LWxhYmVsIixudD0ic2VsZWN0LWNoZWNrYm94IixydD0ic2VsZWN0LXJhZGlvIixvdD0idWwtY2FyZF9fY2hvaWNlcyIsaXQ9InVsLWNhcmQtdGV4dF9faW5wdXQiLGF0PSItLWRlc2t0b3AiLGN0PSItLW1vYmlsZSIsc3Q9InVsLXF1ZXN0aW9uIix1dD0idWwtY2FwdGlvbiIsbHQ9ImZhZGUtaW4tdHJhbnNpdGlvbiIsZnQ9ZnVuY3Rpb24odCxlKXtyZXR1cm5bdCsoZT9jdDphdCksdF19O2Z1bmN0aW9uIGR0KHQsZSl7dmFyIG49InVuZGVmaW5lZCIhPXR5cGVvZiBTeW1ib2wmJnRbU3ltYm9sLml0ZXJhdG9yXXx8dFsiQEBpdGVyYXRvciJdO2lmKCFuKXtpZihBcnJheS5pc0FycmF5KHQpfHwobj1mdW5jdGlvbih0LGUpe2lmKCF0KXJldHVybjtpZigic3RyaW5nIj09dHlwZW9mIHQpcmV0dXJuIHB0KHQsZSk7dmFyIG49T2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKHQpLnNsaWNlKDgsLTEpOyJPYmplY3QiPT09biYmdC5jb25zdHJ1Y3RvciYmKG49dC5jb25zdHJ1Y3Rvci5uYW1lKTtpZigiTWFwIj09PW58fCJTZXQiPT09bilyZXR1cm4gQXJyYXkuZnJvbSh0KTtpZigiQXJndW1lbnRzIj09PW58fC9eKD86VWl8SSludCg/Ojh8MTZ8MzIpKD86Q2xhbXBlZCk/QXJyYXkkLy50ZXN0KG4pKXJldHVybiBwdCh0LGUpfSh0KSl8fGUmJnQmJiJudW1iZXIiPT10eXBlb2YgdC5sZW5ndGgpe24mJih0PW4pO3ZhciByPTAsbz1mdW5jdGlvbigpe307cmV0dXJue3M6byxuOmZ1bmN0aW9uKCl7cmV0dXJuIHI+PXQubGVuZ3RoP3tkb25lOiEwfTp7ZG9uZTohMSx2YWx1ZTp0W3IrK119fSxlOmZ1bmN0aW9uKHQpe3Rocm93IHR9LGY6b319dGhyb3cgbmV3IFR5cGVFcnJvcigiSW52YWxpZCBhdHRlbXB0IHRvIGl0ZXJhdGUgbm9uLWl0ZXJhYmxlIGluc3RhbmNlLlxuSW4gb3JkZXIgdG8gYmUgaXRlcmFibGUsIG5vbi1hcnJheSBvYmplY3RzIG11c3QgaGF2ZSBhIFtTeW1ib2wuaXRlcmF0b3JdKCkgbWV0aG9kLiIpfXZhciBpLGE9ITAsYz0hMTtyZXR1cm57czpmdW5jdGlvbigpe249bi5jYWxsKHQpfSxuOmZ1bmN0aW9uKCl7dmFyIHQ9bi5uZXh0KCk7cmV0dXJuIGE9dC5kb25lLHR9LGU6ZnVuY3Rpb24odCl7Yz0hMCxpPXR9LGY6ZnVuY3Rpb24oKXt0cnl7YXx8bnVsbD09bi5yZXR1cm58fG4ucmV0dXJuKCl9ZmluYWxseXtpZihjKXRocm93IGl9fX19ZnVuY3Rpb24gcHQodCxlKXsobnVsbD09ZXx8ZT50Lmxlbmd0aCkmJihlPXQubGVuZ3RoKTtmb3IodmFyIG49MCxyPW5ldyBBcnJheShlKTtuPGU7bisrKXJbbl09dFtuXTtyZXR1cm4gcn12YXIgaHQ9InVsLWFwcCIsdnQ9ZnVuY3Rpb24odCxlKXt2YXIgbj10LmFwcDtuLnJ1bm5pbmd8fGUuZGVzdHJveShodCk7dmFyIG8saT1uLmRlY2suY2FyZHNbbi5kZWNrLmluZGV4XSxhPWkuQ2FyZCxjPWkucHJvcHMscz1pLnR5cGUsdT1pLm5hbWUsbD1uLmJvcmRlcixmPWZ1bmN0aW9uKCl7dmFyIHQ9TigpKFIoKS5tYXJrKChmdW5jdGlvbiB0KCl7cmV0dXJuIFIoKS53cmFwKChmdW5jdGlvbih0KXtmb3IoOzspc3dpdGNoKHQucHJldj10Lm5leHQpe2Nhc2UgMDpyZXR1cm4gdC5uZXh0PTIsZS5jbG9zZShodCk7Y2FzZSAyOmNhc2UiZW5kIjpyZXR1cm4gdC5zdG9wKCl9fSksdCl9KSkpO3JldHVybiBmdW5jdGlvbigpe3JldHVybiB0LmFwcGx5KHRoaXMsYXJndW1lbnRzKX19KCksZD1uLmRlY2suY2FyZHMscD1uLmRlY2suaW5kZXgsaD1uLmZvbnRGYW1pbHk/e2ZvbnRGYW1pbHk6bi5mb250RmFtaWx5LnJlcGxhY2UoIjsiLCIiKX06e30sdj1uLmVuZENhcmQsZz1mdW5jdGlvbigpe3ZhciB0PU4oKShSKCkubWFyaygoZnVuY3Rpb24gdChuKXtyZXR1cm4gUigpLndyYXAoKGZ1bmN0aW9uKHQpe2Zvcig7Oylzd2l0Y2godC5wcmV2PXQubmV4dCl7Y2FzZSAwOmUuYXBwLm5leHQoe2RhdGE6bixjb21wbGV0ZVN1cnZleTpmdW5jdGlvbigpe2UuZGVzdHJveShodCl9LGVuZENhcmQ6dn0pO2Nhc2UgMTpjYXNlImVuZCI6cmV0dXJuIHQuc3RvcCgpfX0pLHQpfSkpKTtyZXR1cm4gZnVuY3Rpb24oZSl7cmV0dXJuIHQuYXBwbHkodGhpcyxhcmd1bWVudHMpfX0oKSx5PWR0KG4uYW5zd2Vyc3x8W10pO3RyeXt2YXIgbT1mdW5jdGlvbigpe3ZhciB0PW8udmFsdWU7aWYodC5xdWVzdGlvbklkPT09dSl7dmFyIGU7aWYoIm11bHRpcGxlY2hvaWNlIj09PXMpe3ZhciBuPWMub3B0aW9ucy5maW5kKChmdW5jdGlvbihlKXtyZXR1cm4gZS52YWx1ZT09PXQudmFsdWV9KSk7aWYoIW4pcmV0dXJuImJyZWFrIjtlPXIoKSh7fSxuLmlkLG4udmFsdWUpfWVsc2UgZT10LnZhbHVlO3JldHVybiBnKHt2YWx1ZTplfSksImJyZWFrIn19O2Zvcih5LnMoKTshKG89eS5uKCkpLmRvbmU7KXtpZigiYnJlYWsiPT09bSgpKWJyZWFrfX1jYXRjaCh0KXt5LmUodCl9ZmluYWxseXt5LmYoKX1yZXR1cm4gQSgiZGl2Iix7Y2xhc3NOYW1lOiJ1bC1hcHAiLGlkOmh0LG9uY3JlYXRlOmZ1bmN0aW9uKHQpe3JldHVybiBmdW5jdGlvbih0KXt2YXIgcj1bInRyYW5zaXRpb25lbmQiLCJ3ZWJraXRUcmFuc2l0aW9uRW5kIiwibW96VHJhbnNpdGlvbkVuZCJdLG89ITEsaT1mdW5jdGlvbiBuKCl7aWYoIW8mJndpbmRvdy5mcmFtZUVsZW1lbnQpe3ZhciBpPW5ldyBFdmVudCgidWw6ZnJhbWU6cmVuZGVyZWQiKTt3aW5kb3cuZnJhbWVFbGVtZW50LmRpc3BhdGNoRXZlbnQoaSl9bz0hMCxyLmZvckVhY2goKGZ1bmN0aW9uKGUpe3QucmVtb3ZlRXZlbnRMaXN0ZW5lcihlLG4pfSkpLHNldFRpbWVvdXQoKGZ1bmN0aW9uKCl7cmV0dXJuIGUudXBkYXRlKGh0KX0pLDMwMCl9O3IuZm9yRWFjaCgoZnVuY3Rpb24oZSl7dC5hZGRFdmVudExpc3RlbmVyKGUsaSl9KSksbi5jb25maWd1cmVFeGl0T25PdmVybGF5Q2xpY2soKGZ1bmN0aW9uKCl7ZS5jbG9zZShodCl9KSksZS51cGRhdGUoaHQpfSh0KX0sb251cGRhdGU6ZnVuY3Rpb24oKXtyZXR1cm4gZS51cGRhdGUoaHQpfSxzdHlsZTpofSxBKCJkaXYiLHtjbGFzc05hbWU6InVsLWFwcF9fY29udGFpbmVyIn0sQSgiZGl2Iix7Y2xhc3NOYW1lOkQoTSgpKGZ0KFksbi51c2VNb2JpbGVTdHlsaW5nKSkpLHN0eWxlOntib3JkZXJDb2xvcjpsfX0sQShhLFQoKSh7fSxjLHtib3JkZXI6bCxjbGFzc05hbWU6InVsLWNhcmQiLG5leHQ6ZyxlbmRDYXJkOnYsbG9jYWxlOm4ubG9jYWxlLHF1ZXN0aW9uSWQ6dSx1cGRhdGVIZWlnaHQ6ZnVuY3Rpb24oKXtyZXR1cm4gZS51cGRhdGUoaHQpfX0pKSksImVtYWlsIiE9PW4uaGVhZGVyc1sidXNlcmxlYXAtcGxhdGZvcm0iXSYmImxpbmsiIT09bi5oZWFkZXJzWyJ1c2VybGVhcC1wbGF0Zm9ybSJdJiYoIXZ8fHArMSE9PWQubGVuZ3RoKSYmQSgiZGl2Iix7Y2xhc3NOYW1lOkQoZnQoSyxuLnVzZU1vYmlsZVN0eWxpbmcpKX0sQSgiZGl2Iix7Y2xhc3NOYW1lOkosb25jbGljazpmLG9ua2V5cHJlc3M6ZnVuY3Rpb24odCl7MTM9PXQua2V5Q29kZSYmZigpfSxyb2xlOiJidXR0b24iLCJhcmlhLWxhYmVsIjoiQ2xvc2UgYnV0dG9uIix0YWJpbmRleDowfSxBKCJzdmciLHt3aWR0aDoiMThweCIsaGVpZ2h0OiIxOHB4Iix2aWV3Qm94OiIwIDAgMTMgMTMiLGZpbGw6Im5vbmUiLHhtbG5zOiJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyJ9LEEoInBhdGgiLHtkOiJNMi41NDk2NCAxLjc4MzY5TDEuNzgzNjkgMi41NDk2NEw1LjczNDA1IDYuNUwxLjc4MzY5IDEwLjQ1MDRMMi41NDk2NCAxMS4yMTYzTDYuNSA3LjI2NTk1TDEwLjQ1MDQgMTEuMjE2M0wxMS4yMTYzIDEwLjQ1MDRMNy4yNjU5NSA2LjVMMTEuMjE2MyAyLjU0OTY0TDEwLjQ1MDQgMS43ODM2OUw2LjUgNS43MzQwNUwyLjU0OTY0IDEuNzgzNjlaIixmaWxsOiIjMjYyMTM2In0pKSkpKSl9LGd0PW4oNDcwNjYpLHl0PW4ubihndCksbXQ9bigzMDU5MyksYnQ9bi5uKG10KSx4dD1uKDQ0NTMpLHd0PW4ubih4dCksRXQ9ZnVuY3Rpb24oKXt0cnl7cmV0dXJuIHdpbmRvdy5wYXJlbnQuSW50ZXJjb219Y2F0Y2godCl7fX0sanQ9ZnVuY3Rpb24oKXt2YXIgdD1FdCgpO3QmJih0LnVsX3dhc1Zpc2libGUmJnQoInVwZGF0ZSIse2hpZGVfZGVmYXVsdF9sYXVuY2hlcjohMX0pLGRlbGV0ZSB0LnVsX3dhc1Zpc2libGUpfSxDdD1mdW5jdGlvbigpe3ZhciB0PUV0KCk7dCYmKHQudWxfd2FzVmlzaWJsZT0hIWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoImlmcmFtZS5pbnRlcmNvbS1sYXVuY2hlci1mcmFtZSIpLHQudWxfd2FzVmlzaWJsZSYmdCgidXBkYXRlIix7aGlkZV9kZWZhdWx0X2xhdW5jaGVyOiEwfSkpfSxrdD1bdF0sU3Q9ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KCl7YnQoKSh0aGlzLHQpfXJldHVybiB3dCgpKHQsbnVsbCxbe2tleToiZGlzYWJsZSIsdmFsdWU6ZnVuY3Rpb24oKXtrdC5mb3JFYWNoKChmdW5jdGlvbih0KXtyZXR1cm4gdC5kaXNhYmxlKCl9KSl9fSx7a2V5OiJlbmFibGUiLHZhbHVlOmZ1bmN0aW9uKCl7a3QuZm9yRWFjaCgoZnVuY3Rpb24odCl7cmV0dXJuIHQuZW5hYmxlKCl9KSl9fV0pLHR9KCksT3Q9big3NjM5MCksQXQ9bi5uKE90KSxJdD1mdW5jdGlvbigpe3JldHVybiBBKCJzdmciLHt3aWR0aDoiMTAwIixoZWlnaHQ6IjEzIix2aWV3Qm94OiIwIDAgMTAwIDEzIixmaWxsOiJub25lIix4bWxuczoiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciLGFsdDoiUG93ZXJlZCBieSBTcHJpZyJ9LEEoInBhdGgiLHtkOiJNMy4wMzY5IDAuODM5OTgxSDAuMDI0OTAyM1Y4Ljk5OTk4SDEuMzIwOVY2LjUzOTk4SDIuODU2OUM0Ljg5NjkgNi41Mzk5OCA2LjI0MDkgNS4zNzU5OCA2LjI0MDkgMy42MjM5OEM2LjI0MDkgMS45NTU5OCA0Ljk2ODkgMC44Mzk5ODEgMy4wMzY5IDAuODM5OTgxWk0zLjAwMDkgNS4zNTE5OEgxLjMyMDlWMi4wMjc5OEgzLjAwMDlDNC4xNzY5IDIuMDI3OTggNC45Njg5IDIuNjc1OTggNC45Njg5IDMuNjIzOThDNC45Njg5IDQuNjU1OTggNC4xNzY5IDUuMzUxOTggMy4wMDA5IDUuMzUxOThaIixmaWxsOiIjNUQ2OTZGIn0pLEEoInBhdGgiLHtkOiJNOS45MDY1MyAzLjIxNTk4QzguMTU0NTMgMy4yMTU5OCA2LjkwNjUzIDQuNDUxOTggNi45MDY1MyA2LjE3OTk4QzYuOTA2NTMgNy45MDc5OCA4LjE1NDUzIDkuMTQzOTggOS45MDY1MyA5LjE0Mzk4QzExLjY1ODUgOS4xNDM5OCAxMi45MDY1IDcuOTA3OTggMTIuOTA2NSA2LjE3OTk4QzEyLjkwNjUgNC40NTE5OCAxMS42NTg1IDMuMjE1OTggOS45MDY1MyAzLjIxNTk4Wk05LjkwNjUzIDguMDE1OThDOC44ODY1MyA4LjAxNTk4IDguMTU0NTMgNy4yMzU5OCA4LjE1NDUzIDYuMTc5OThDOC4xNTQ1MyA1LjExMTk4IDguODg2NTMgNC4zNDM5OCA5LjkwNjUzIDQuMzQzOThDMTAuOTI2NSA0LjM0Mzk4IDExLjY1ODUgNS4xMTE5OCAxMS42NTg1IDYuMTc5OThDMTEuNjU4NSA3LjIzNTk4IDEwLjkyNjUgOC4wMTU5OCA5LjkwNjUzIDguMDE1OThaIixmaWxsOiIjNUQ2OTZGIn0pLEEoInBhdGgiLHtkOiJNMjAuOTYzMSAzLjM1OTk4TDE5LjczOTEgNy4xMTU5OEwxOC4zOTUxIDMuMzU5OThIMTcuMzI3MUwxNS45ODMxIDcuMTI3OThMMTQuNzU5MSAzLjM1OTk4SDEzLjQxNTFMMTUuNDQzMSA4Ljk5OTk4SDE2LjUzNTFMMTcuODY3MSA1LjA4Nzk4TDE5LjE4NzEgOC45OTk5OEgyMC4yNzkxTDIyLjMwNzEgMy4zNTk5OEgyMC45NjMxWiIsZmlsbDoiIzVENjk2RiJ9KSxBKCJwYXRoIix7ZDoiTTI1LjcyNDYgMy4yMTU5OEMyNC4wMDg2IDMuMjE1OTggMjIuODIwNiA0LjUxMTk4IDIyLjgyMDYgNi4xNzk5OEMyMi44MjA2IDcuODU5OTggMjQuMDIwNiA5LjE0Mzk4IDI1Ljc5NjYgOS4xNDM5OEMyNy4wMjA2IDkuMTQzOTggMjguMDE2NiA4LjU0Mzk4IDI4LjM3NjYgNy41MjM5OEgyNy4wMDg2QzI2Ljc4MDYgNy44ODM5OCAyNi4zNjA2IDguMDUxOTggMjUuODA4NiA4LjA1MTk4QzI0Ljc1MjYgOC4wNTE5OCAyNC4yMTI2IDcuNDAzOTggMjQuMDkyNiA2LjU1MTk4SDI4LjUyMDZDMjguNzYwNiA0LjY0Mzk4IDI3LjU5NjYgMy4yMTU5OCAyNS43MjQ2IDMuMjE1OThaTTI1LjczNjYgNC4yNzE5OEMyNi42MTI2IDQuMjcxOTggMjcuMjEyNiA0Ljc2Mzk4IDI3LjI4NDYgNS42ODc5OEgyNC4xMTY2QzI0LjI2MDYgNC44OTU5OCAyNC44MDA2IDQuMjcxOTggMjUuNzM2NiA0LjI3MTk4WiIsZmlsbDoiIzVENjk2RiJ9KSxBKCJwYXRoIix7ZDoiTTMxLjEyOTcgNC4xMjc5OFYzLjM1OTk4SDI5Ljg4MTdWOC45OTk5OEgzMS4xMjk3VjUuNDQ3OThDMzEuNjMzNyA0Ljc4Nzk4IDMyLjMxNzcgNC40NTE5OCAzMy4yMTc3IDQuNDE1OThWMy4yMzk5OEMzMi4zNTM3IDMuMjM5OTggMzEuNjQ1NyAzLjU2Mzk4IDMxLjEyOTcgNC4xMjc5OFoiLGZpbGw6IiM1RDY5NkYifSksQSgicGF0aCIse2Q6Ik0zNi44MjIyIDMuMjE1OThDMzUuMTA2MiAzLjIxNTk4IDMzLjkxODIgNC41MTE5OCAzMy45MTgyIDYuMTc5OThDMzMuOTE4MiA3Ljg1OTk4IDM1LjExODIgOS4xNDM5OCAzNi44OTQyIDkuMTQzOThDMzguMTE4MiA5LjE0Mzk4IDM5LjExNDIgOC41NDM5OCAzOS40NzQyIDcuNTIzOThIMzguMTA2MkMzNy44NzgyIDcuODgzOTggMzcuNDU4MiA4LjA1MTk4IDM2LjkwNjIgOC4wNTE5OEMzNS44NTAyIDguMDUxOTggMzUuMzEwMiA3LjQwMzk4IDM1LjE5MDIgNi41NTE5OEgzOS42MTgyQzM5Ljg1ODIgNC42NDM5OCAzOC42OTQyIDMuMjE1OTggMzYuODIyMiAzLjIxNTk4Wk0zNi44MzQyIDQuMjcxOThDMzcuNzEwMiA0LjI3MTk4IDM4LjMxMDIgNC43NjM5OCAzOC4zODIyIDUuNjg3OThIMzUuMjE0MkMzNS4zNTgyIDQuODk1OTggMzUuODk4MiA0LjI3MTk4IDM2LjgzNDIgNC4yNzE5OFoiLGZpbGw6IiM1RDY5NkYifSksQSgicGF0aCIse2Q6Ik00NS40ODg2IDAuNDc5OThWMy44MDM5OEM0NS4wMDg2IDMuNDMxOTggNDQuMzk2NiAzLjIxNTk4IDQzLjY3NjYgMy4yMTU5OEM0Mi4wOTI2IDMuMjE1OTggNDAuODIwNiA0LjUzNTk4IDQwLjgyMDYgNi4xNjc5OEM0MC44MjA2IDcuODIzOTggNDIuMDkyNiA5LjE0Mzk4IDQzLjY3NjYgOS4xNDM5OEM0NC4zOTY2IDkuMTQzOTggNDUuMDA4NiA4LjkyNzk4IDQ1LjQ4ODYgOC41NDM5OFY4Ljk5OTk4SDQ2LjcyNDZWMC40Nzk5OEg0NS40ODg2Wk00My44NTY2IDguMDE1OThDNDIuODI0NiA4LjAxNTk4IDQyLjA2ODYgNy4xNzU5OCA0Mi4wNjg2IDYuMTY3OThDNDIuMDY4NiA1LjE3MTk4IDQyLjgyNDYgNC4zNDM5OCA0My44NTY2IDQuMzQzOThDNDQuNDgwNiA0LjM0Mzk4IDQ1LjA2ODYgNC41NTk5OCA0NS40ODg2IDUuMTU5OThWNy4xODc5OEM0NS4wNjg2IDcuNzk5OTggNDQuNDgwNiA4LjAxNTk4IDQzLjg1NjYgOC4wMTU5OFoiLGZpbGw6IiM1RDY5NkYifSksQSgicGF0aCIse2Q6Ik01NC42Nzk3IDMuMjE1OThDNTMuOTU5NyAzLjIxNTk4IDUzLjM0NzcgMy40MzE5OCA1Mi44Nzk3IDMuNzkxOThWMC40Nzk5OEg1MS42MzE3VjguOTk5OThINTIuODc5N1Y4LjU1NTk4QzUzLjM0NzcgOC45Mjc5OCA1My45NTk3IDkuMTQzOTggNTQuNjc5NyA5LjE0Mzk4QzU2LjI2MzcgOS4xNDM5OCA1Ny41NDc3IDcuODIzOTggNTcuNTQ3NyA2LjE2Nzk4QzU3LjU0NzcgNC41MzU5OCA1Ni4yNjM3IDMuMjE1OTggNTQuNjc5NyAzLjIxNTk4Wk01NC40OTk3IDguMDE1OThDNTMuODc1NyA4LjAxNTk4IDUzLjI5OTcgNy43OTk5OCA1Mi44Nzk3IDcuMjExOThWNS4xMzU5OEM1My4yOTk3IDQuNTQ3OTggNTMuODc1NyA0LjM0Mzk4IDU0LjQ5OTcgNC4zNDM5OEM1NS41NDM3IDQuMzQzOTggNTYuMjk5NyA1LjE3MTk4IDU2LjI5OTcgNi4xNjc5OEM1Ni4yOTk3IDcuMTc1OTggNTUuNTQzNyA4LjAxNTk4IDU0LjQ5OTcgOC4wMTU5OFoiLGZpbGw6IiM1RDY5NkYifSksQSgicGF0aCIse2Q6Ik02My4zMzQ3IDMuMzQ3OThMNjEuMzkwNyA3Ljc2Mzk4TDU5LjI2NjcgMy4zNDc5OEg1Ny45MzQ3TDYwLjgxNDcgOS4wODM5OEw1OS42MjY3IDExLjc4NEg2MC45MzQ3TDY0LjY1NDcgMy4zNDc5OEg2My4zMzQ3WiIsZmlsbDoiIzVENjk2RiJ9KSxBKCJwYXRoIix7ZDoiTTcxLjE0NjYgNC4zNDY2MUM2OS44MDkyIDQuMDUwMzggNjkuMTMxIDMuNTMwMDEgNjkuMTMxIDIuODAwNjVDNjkuMTMxIDIuMDQ3MDUgNjkuODU0NiAxLjQ3ODIyIDcwLjgxNDIgMS40NzgyMkM3MS44MDM0IDEuNDc4MjIgNzIuNTQ5NiAyLjEwMzM5IDcyLjU0OTYgMi45MzIxVjIuOTk4MTNINzMuOTE2NVYyLjkzMjFDNzMuOTE2NSAxLjQxNzY0IDcyLjU4ODMgMC4yNzI3MDUgNzAuODI3MSAwLjI3MjcwNUM2OS45Nzg0IDAuMjcyNzA1IDY5LjIwMDkgMC41MzMxOTEgNjguNjM3OSAxLjAwNTdDNjguMzU4NCAxLjIzNjE5IDY4LjEzMzkgMS41MjQ4NyA2Ny45ODA1IDEuODUxMUM2Ny44MjcxIDIuMTc3MzMgNjcuNzQ4NiAyLjUzMzAzIDY3Ljc1MDYgMi44OTI3M0M2Ny43NDUxIDMuMjIyNTUgNjcuODEzNyAzLjU0OTQ5IDY3Ljk1MTUgMy44NDk5NEM2OC4wODk0IDQuMTUwMzggNjguMjkzIDQuNDE2ODYgNjguNTQ3OCA0LjYzMDEyQzY5LjAyMTggNS4wNDI2NiA2OS42OTQ1IDUuMzQ3OTggNzAuNTQ2MyA1LjUzODhDNzEuOTgwNiA1Ljg1NTAyIDcyLjcwNzggNi4zOTI5NiA3Mi43MDc4IDcuMTM2ODZDNzIuNzA3OCA3Ljk0MzE2IDcxLjkxNTYgOC41NTA3NiA3MC44NjgyIDguNTUwNzZDNjkuNzgwNCA4LjU1MDc2IDY4Ljk1OTkgNy44NzUzMSA2OC45NTk5IDYuOTc5OTZWNi45MTM5M0g2Ny41OTE4VjYuOTc5OTZDNjcuNTkxOCA4LjU2MzQ4IDY4Ljk5NDIgOS43NTY4OCA3MC44NTM1IDkuNzU2ODhDNzEuNzQyNiA5Ljc1Njg4IDcyLjU1ODggOS40ODczMSA3My4xNTE4IDguOTk2NjJDNzMuNDQ2IDguNzU4MzEgNzMuNjgyNyA4LjQ1ODEgNzMuODQ0NSA4LjExNzlDNzQuMDA2MyA3Ljc3NzcgNzQuMDg5MSA3LjQwNjExIDc0LjA4NyA3LjAzMDI0Qzc0LjA4NyA1LjY4NTQgNzMuMDk5MSA0Ljc4MjE3IDcxLjE0NjYgNC4zNDY2MVoiLGZpbGw6IiM1RDY5NkYifSksQSgicGF0aCIse2Q6Ik03OC43OTg2IDIuNTA4MDZDNzguMjg3NCAyLjUwMTc1IDc3Ljc4MjMgMi42MTc2IDc3LjMyNjMgMi44NDU3NkM3Ni44NzAzIDMuMDczOTEgNzYuNDc2OCAzLjQwNzU5IDc2LjE3OTUgMy44MTgzN1YyLjY2NzM4SDc0Ljg3ODlWMTIuMDc1Mkg3Ni4xNzk1VjguNDg3MTZDNzYuNDc2OCA4Ljg5NzkgNzYuODcwMyA5LjIzMTUyIDc3LjMyNjMgOS40NTk1N0M3Ny43ODI0IDkuNjg3NjMgNzguMjg3NSA5LjgwMzM1IDc4Ljc5ODYgOS43OTY4N0M4MC44MTY3IDkuNzk2ODcgODIuMzM4MSA4LjIzMDMxIDgyLjMzODEgNi4xNTI0NkM4Mi4zMzgxIDQuMDc0NjIgODAuODE2NyAyLjUwODA2IDc4Ljc5ODYgMi41MDgwNlpNODAuOTgzNSA2LjQyMjY0QzgwLjkzMTYgNi45NjI5IDgwLjY5MjEgNy40Njg3OSA4MC4zMDU2IDcuODU0NEM3OS45MTkgOC4yNDAwMSA3OS40MDkzIDguNDgxNTYgNzguODYzIDguNTM4MDRDNzguMTM2OSA4LjYxMDc0IDc3LjQ2MDUgOC40MDI5NSA3Ni45NTgzIDcuOTU0MDdDNzYuNDU2MSA3LjUwNTE4IDc2LjE3OTUgNi44NjM2NSA3Ni4xNzk1IDYuMTUyNDZDNzYuMTc5NSA0Ljc4NDYgNzcuMjEyMiAzLjc1Mjk1IDc4LjU4MTUgMy43NTI5NUM3OS4yOTA0IDMuNzUyOTUgNzkuOTMwNiA0LjAyMTkxIDgwLjM3NzYgNC41MTAxOEM4MC44Mzg3IDUuMDExMTYgODEuMDU0IDUuNjkwMjUgODAuOTgzNSA2LjQyMjY0WiIsZmlsbDoiIzVENjk2RiJ9KSxBKCJwYXRoIix7ZDoiTTk4LjI5MDggMi42NjkyVjMuODA3NDdDOTcuNjc3NiAyLjk3ODc1IDk2LjczMDIgMi41MDgwNiA5NS42NTgzIDIuNTA4MDZDOTMuNjQ4MiAyLjUwODA2IDkyLjEzMjMgNC4wNDYxNSA5Mi4xMzIzIDYuMDg1ODJDOTIuMTMyMyA4LjEyNTUgOTMuNjQ4MiA5LjY2Mjk5IDk1LjY1ODMgOS42NjI5OUM5Ni43MzQ1IDkuNjYyOTkgOTcuNjgxOSA5LjE5NzE0IDk4LjI5MDggOC4zNzY5MVY4LjU1MTk4Qzk4LjI5MDggOS45Njg5MSA5Ny4zOTA2IDEwLjg4NDMgOTUuOTk3NCAxMC44ODQzQzk1LjA1NjEgMTAuODg0MyA5NC4yNzE4IDEwLjQ3NjYgOTMuODk5NiA5Ljc5Mzg0TDkzLjg4MDYgOS43NTg3SDkyLjUzODlMOTIuNTY5NSA5Ljg0NjU0QzkyLjc5NjEgMTAuNTE0IDkzLjIzOTIgMTEuMDg4OSA5My44MzAzIDExLjQ4MjJDOTQuNDIzMyAxMS44NzIzIDk1LjE3MjYgMTIuMDc4MyA5NS45OTc0IDEyLjA3ODNDOTcuMDU1MiAxMi4wNzgzIDk3Ljk1NTQgMTEuNzQ1MSA5OC42MDE3IDExLjExNTdDOTkuMjQ4MSAxMC40ODYyIDk5LjU5MTUgOS42MDEyIDk5LjU5MTUgOC41Njc3M1YyLjY2OTJIOTguMjkwOFpNOTcuNTYxMSA3Ljg0MkM5Ny4wMDkyIDguMzY0MTggOTYuMjIyNSA4LjU4MzQ4IDk1LjQwMDEgOC40NDI5NEM5NC45MTMyIDguMzU3OTYgOTQuNDY2NCA4LjEyMTg0IDk0LjEyNDUgNy43Njg4OUM5My43ODI3IDcuNDE1OTMgOTMuNTYzNiA2Ljk2NDUyIDkzLjQ5OTIgNi40ODAxOUM5My4zODMzIDUuNjY1NDEgOTMuNjMxIDQuODkzNjQgOTQuMTc4NiA0LjM2NDE4Qzk0LjYzODMgMy45Mjc0MSA5NS4yNTQyIDMuNjg3ODggOTUuODkxOSAzLjY5NzgyQzk2LjA0NjQgMy42OTc5NSA5Ni4yMDA2IDMuNzEwMzEgOTYuMzUzMSAzLjczNDc3Qzk3LjM0NTkgMy44OTM0OSA5OC4xMzE0IDQuNzA0MDMgOTguMjYzMiA1LjcxMDI0Qzk4LjM3NDkgNi41MzgzNSA5OC4xMTc5IDcuMzE0MzYgOTcuNTYxMSA3Ljg0MloiLGZpbGw6IiM1RDY5NkYifSksQSgicGF0aCIse2Q6Ik05MC43MDUgMC4wOTk1OTc1QzkwLjQ2MDIgMC4wNDY3NzMgOTAuMjA0MyAwLjA5MTE5NzEgODkuOTkyNSAwLjIyMzI2OUM4OS43ODA2IDAuMzU1MzQgODkuNjI5OSAwLjU2NDQ1MiA4OS41NzI5IDAuODA1NDA5Qzg5LjUxNTkgMS4wNDYzNyA4OS41NTcxIDEuMjk5ODIgODkuNjg3NyAxLjUxMDk4Qzg5LjgxODMgMS43MjIxNSA5MC4wMjc3IDEuODc0MDcgOTAuMjcwOCAxLjkzMzkxQzkwLjM0MTUgMS45NDk1NCA5MC40MTM2IDEuOTU3NDcgOTAuNDg2IDEuOTU3NTRDOTAuNzIgMS45NTc5IDkwLjk0NTggMS44NzMyNSA5MS4xMjA2IDEuNzE5NzNDOTEuMjk1NSAxLjU2NjIgOTEuNDA3IDEuMzU0NTIgOTEuNDM0MSAxLjEyNUM5MS40NjExIDAuODk1NDcgOTEuNDAxNyAwLjY2NDEzNSA5MS4yNjczIDAuNDc1MDQ2QzkxLjEzMjkgMC4yODU5NTggOTAuOTMyNyAwLjE1MjMyNSA5MC43MDUgMC4wOTk1OTc1VjAuMDk5NTk3NVoiLGZpbGw6IiM1RDY5NkYifSksQSgicGF0aCIse2Q6Ik04OS44MzY2IDguMzkxNDNIODguNzE1Qzg3LjkxNzggOC4zOTE0MyA4Ny40Mzg5IDcuODU1MzEgODcuNDM4OSA2Ljk1NjkzQzg3LjQzODkgNi4wODA5NiA4Ny44NjgxIDUuMDM2NTkgODguNzQzMiAzLjc2NDQ0TDg4Ljc1NDggMy43NDc0OFYzLjM4ODI1TDg1LjAyNzEgMi44NjcyN0M4NS4wMjg0IDIuNzE1NTMgODQuOTg4NiAyLjU2NjIyIDg0LjkxMTggMi40MzQ3OEM4NC44MzUxIDIuMzAzMzUgODQuNzI0MSAyLjE5NDU4IDg0LjU5MDUgMi4xMTk3M0M4NC4yNTYzIDEuOTM4IDgzLjg5MDggMS45MzggODMuNTg3OSAyLjExMzY4QzgzLjQzNjEgMi4yMDIzIDgzLjMxMjIgMi4zMzA3NyA4My4yMyAyLjQ4NDhDODMuMTQ3NyAyLjYzODg0IDgzLjExMDMgMi44MTI0IDgzLjEyMTkgMi45ODYxOEM4My4xMzM2IDMuMTU5OTYgODMuMTkzOCAzLjMyNzE0IDgzLjI5NTggMy40NjkxNEM4My4zOTc5IDMuNjExMTQgODMuNTM3OSAzLjcyMjM4IDgzLjcwMDEgMy43OTA0OUw4Mi41NDA1IDkuNjM3NTNIODMuODI4M0w4NC44OTc3IDQuMDg1NTFMODYuOTExNSA0LjQyMTExQzg2LjM3MDEgNS4zODAwNyA4Ni4wOTUzIDYuMjc0MjEgODYuMDk1MyA3LjA3ODY5Qzg2LjA5NTMgOC41NjM0NyA4Ny4wMDQxIDkuNTM1NzYgODguNDczNCA5LjYyOTY1VjkuNjM3NTNIOTEuMTM0MVYyLjY5MDk5SDg5LjgzNjZWOC4zOTE0M1oiLGZpbGw6IiM1RDY5NkYifSkpfSxUdD1mdW5jdGlvbigpe3JldHVybiBmdW5jdGlvbih0KXt2YXIgZT10LmFwcC5kZWNrLmNhcmRzfHxbXSxuPWUuZmlsdGVyKChmdW5jdGlvbih0KXtyZXR1cm4gdC50eXBlfSkpLHI9dC5hcHAuZGVjay5pbmRleCxvPXQuYXBwLGk9by5zaG93U3VydmV5QnJhbmQsYT1vLm1hcmtldGluZ1VybCxjPW8uc2x1Z05hbWUscz1vLnN1cnZleUlkLHU9ZnVuY3Rpb24oKXtyZXR1cm4gaT9BKCJhIix7c3R5bGU6ImRpc3BsYXk6IGJsb2NrOyBtYXJnaW46IDVweCAwIDEwcHggMCIsaHJlZjoiIi5jb25jYXQoYSwiP3V0bV9zb3VyY2U9c3VydmV5X2JyYW5kaW5nJnV0bV9tZWRpdW09d2Vic2l0ZSZ1dG1fY2FtcGFpZ249IikuY29uY2F0KGMsIiZ1dG1fY29udGVudD0iKS5jb25jYXQocyksdGFyZ2V0OiJfYmxhbmsifSxJdCk6bnVsbH07aWYocisxPT09ZS5sZW5ndGh8fCFufHwxPT09bi5sZW5ndGgpcmV0dXJuIEEoImZvb3RlciIse2NsYXNzTmFtZToidWwtZm9vdGVyIn0sdSk7cmV0dXJuIEEoImZvb3RlciIse2NsYXNzTmFtZToidWwtZm9vdGVyIn0sKGZ1bmN0aW9uKCl7aWYobi5sZW5ndGg+MSYmbi5sZW5ndGg8PTEwKXt2YXIgZT1uLm1hcCgoZnVuY3Rpb24oZSxuKXtyZXR1cm4gQSgic3BhbiIse2NsYXNzTmFtZToidWwtZm9vdGVyLWJ1YmJsZSIsa2V5Om4sc3R5bGU6cj09PW4/e2JhY2tncm91bmRDb2xvcjp0LmFwcC5ib3JkZXJ9Ontib3JkZXJDb2xvcjp0LmFwcC5ib3JkZXJ9fSl9KSk7cmV0dXJuIEEoImRpdiIse3N0eWxlOiJtYXJnaW4tYm90dG9tOiAxMHB4OyJ9LGUpfXJldHVybiBudWxsfSksdSl9fSxfdD1mdW5jdGlvbih0KXtyZXR1cm4gdCYmdC5jYXB0aW9uVGV4dD9BKCJwIix7aWQ6dXQsY2xhc3NOYW1lOnV0fSx0LmNhcHRpb25UZXh0KTpudWxsfSxNdD1mdW5jdGlvbih0LGUpe3JldHVybiBBKCJwIix0P3tpZDpzdCxjbGFzc05hbWU6c3Qscm9sZToiaGVhZGluZyJ9OntpZDpzdCxjbGFzc05hbWU6c3Qsc3R5bGU6Im1hcmdpbi1ib3R0b206IDE1cHgiLHJvbGU6ImhlYWRpbmcifSxlKX0sTHQ9ZnVuY3Rpb24odCl7cmV0dXJuIHQmJnQuYnV0dG9uVGV4dD90LmJ1dHRvblRleHQ6Ik5leHQifSxSdD1mdW5jdGlvbih0KXtyZXR1cm4gdCYmdC5za2lwQnV0dG9uVGV4dD90LnNraXBCdXR0b25UZXh0OiJTa2lwIn0sUHQ9big5NzM0MyksTnQ9bi5uKFB0KTtmdW5jdGlvbiBGdCh0LGUpe2UodCl9dmFyIER0PWZ1bmN0aW9uKHQpe3ZhciBlPXQuYm9yZGVyLG49dC5sYWJlbCxyPXQuc2VsZWN0ZWQsbz0odC5pbmRleCx0LmlkKSxpPXQub25TZWxlY3QsYT10LmlzUmFkaW8sYz10LnVzZU1vYmlsZVN0eWxpbmcscz1mdW5jdGlvbih0KXt2YXIgbj1kb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiY2hvaWNlLWRpdi0iLmNvbmNhdChvKSkscj1kb2N1bWVudC5nZXRFbGVtZW50QnlJZCgicmFkaW8tIi5jb25jYXQobykpO24mJihuLnN0eWxlLmJvcmRlckNvbG9yPWUpLHImJihyLnN0eWxlLmJvcmRlcldpZHRoPSI2cHgiLHIuc3R5bGUuYm9yZGVyQ29sb3I9ZSxyLnN0eWxlLmJveFNoYWRvdz0ibm9uZSIpfSx1PWZ1bmN0aW9uKHQpe3ZhciBlPWRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJjaG9pY2UtZGl2LSIuY29uY2F0KG8pKSxuPWRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJyYWRpby0iLmNvbmNhdChvKSk7ZSYmKGUuc3R5bGUuYm9yZGVyQ29sb3I9IiNlNmU2ZTYiKSxuJiYobi5zdHlsZS5ib3JkZXJXaWR0aD0iMXB4IixuLnN0eWxlLmJvcmRlckNvbG9yPSIjMzIzMjMyIixuLnN0eWxlLmJveFNoYWRvdz0iaW5zZXQgM3B4IDNweCAwcHggcmdiYSgwLCAwLCAwLCAwLjEpIil9LGw9ZnVuY3Rpb24odCl7dC5zdG9wUHJvcGFnYXRpb24oKSx1KCksaShvKX0sZj17b25jbGljazpmdW5jdGlvbih0KXtyZXR1cm4gbCh0KX0sb25rZXlwcmVzczpmdW5jdGlvbih0KXtyZXR1cm4gZnVuY3Rpb24odCl7MTMhPXQua2V5Q29kZSYmMzIhPXQua2V5Q29kZXx8bCh0KX0odCl9fTsib250b3VjaHN0YXJ0ImluIGRvY3VtZW50LmRvY3VtZW50RWxlbWVudD8oZi5vbnRvdWNoc3RhcnQ9cyxmLm9udG91Y2hjYW5jZWw9dSxmLm9udG91Y2htb3ZlPXUsZi5vbnRvdWNoZW5kPXUpOihmLm9ubW91c2Vkb3duPXMsZi5vbm1vdXNlbGVhdmU9dSk7dmFyIGQ9YT8icmFkaW8tIi5jb25jYXQobyk6ImNoZWNrYm94LSIuY29uY2F0KG8pO3JldHVybiBBKCJkaXYiLFQoKSh7Y2xhc3NOYW1lOkQoZnQodHQsYykpLGlkOiJjaG9pY2UtZGl2LSIuY29uY2F0KG8pfSxmKSwhYSYmQSgiZGl2Iix7Y2xhc3NOYW1lOm50LGlkOmQsc3R5bGU6cj97YmFja2dyb3VuZENvbG9yOmUsYm9yZGVyQ29sb3I6ZSxib3hTaGFkb3c6Im5vbmUifTp7fSxyb2xlOiJjaGVja2JveCIsImFyaWEtbGFiZWxsZWRieSI6IiIuY29uY2F0KHN0LCIgbGFiZWwtIikuY29uY2F0KG8pLCJhcmlhLWNoZWNrZWQiOnIsdGFiaW5kZXg6MH0sciYmQSgic3ZnIix7d2lkdGg6IjEwIixoZWlnaHQ6IjEwIix2aWV3Qm94OiIwIDAgMTAgMTAiLGZpbGw6Im5vbmUiLHhtbG5zOiJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyJ9LEEoInBhdGgiLHtkOiJNOS4xNTM3NyAxLjMwNzc0TDQuMDc2ODUgOC4yMzA4MkwxLjMwNzYyIDUuMDAwMDUiLHN0cm9rZToid2hpdGUiLCJzdHJva2Utd2lkdGgiOiIyIiwic3Ryb2tlLWxpbmVjYXAiOiJyb3VuZCJ9KSkpLGEmJkEoImRpdiIse2NsYXNzTmFtZTpydCxpZDpkLHJvbGU6InJhZGlvIiwiYXJpYS1sYWJlbGxlZGJ5IjoiIi5jb25jYXQoc3QsIiBsYWJlbC0iKS5jb25jYXQobyksdGFiaW5kZXg6MH0pLEEoImxhYmVsIix7Y2xhc3NOYW1lOkQoZnQoZXQsYykpLGZvcjpkLGlkOiJsYWJlbC0iLmNvbmNhdChvKX0sbikpfTtjb25zdCBVdD0iaHR0cHM6Ly9jZG4uc3ByaWcuY29tIixCdD10PT50KyItbG9hZGluZy1zcGluZXIiLHp0PSJoaWRkZW4iLEh0PSJ2aXNpYmxlIixWdD0idWwtdmlkZW8tcmVjb3JkZXItY2FtZXJhLW9mZi1idXR0b24iLHF0PSJ1bC1pbmFjdGl2ZSIsV3Q9InVsLXJlY29yZGluZy1pbi1zZXNzaW9uIixHdD1be3R5cGU6ImxpbmsiLGNvbnRlbnQ6YCR7VXR9L2RlcGVuZGVuY2llcy92aWRlb2pzLXJlY29yZC00LjUuMC5taW4uY3NzYH0se3R5cGU6InNjcmlwdCIsY29udGVudDpgJHtVdH0vZGVwZW5kZW5jaWVzL1JlY29yZFJUQy01LjYuMi5qc2B9LHt0eXBlOiJzY3JpcHQiLGNvbnRlbnQ6YCR7VXR9L2RlcGVuZGVuY2llcy9hZGFwdGVyLjguMC4wLm1pbi5qc2B9LHt0eXBlOiJzY3JpcHQiLGNvbnRlbnQ6YCR7VXR9L2RlcGVuZGVuY2llcy92aWRlb2pzLXJlY29yZC00LjUuMC5taW4uanNgfSx7dHlwZToic2NyaXB0Iixjb250ZW50OmAke1V0fS91c2VybGVhcC13ZWItdXBjaHVuay12Mi4yLjIuanNgfV0sWnQ9W3t0eXBlOiJsaW5rIixjb250ZW50OmAke1V0fS9kZXBlbmRlbmNpZXMvdmlkZW8tanMtNy4xOC4wLm1pbi5jc3NgfSx7dHlwZToic2NyaXB0Iixjb250ZW50OmAke1V0fS9kZXBlbmRlbmNpZXMvdmlkZW8tanMtNy4xOC4wLm1pbi5qc2B9LHt0eXBlOiJzdHlsZSIsY29udGVudDoiLyogcHJvZ3Jlc3MgY29udHJvbCBzdHlsZXMgKi9cbi52aWRlby1qcyAudmpzLXByb2dyZXNzLWNvbnRyb2wgLnZqcy1wcm9ncmVzcy1ob2xkZXIge1xuICBtYXJnaW46IDAgMHB4O1xufVxuXG4udmlkZW8tanMgLnZqcy1wcm9ncmVzcy1jb250cm9sIHtcbiAgcG9zaXRpb246IGFic29sdXRlO1xuICBoZWlnaHQ6IDNweDtcbiAgd2lkdGg6IDEwMCU7XG59XG4vKiBwb3NpdGlvbiBhbmQgYWxpZ24gdGhlIGJ1dHRvbnMgYW5kIGJ1dHRvbiB0ZXh0cyAqL1xuLnVsLWNvbnRyb2wtcGFuZWwge1xuICBib3R0b206IDA7XG4gIHdpZHRoOiAxMDAlO1xuICBmbGV4LWRpcmVjdGlvbjogY29sdW1uO1xuICBiYWNrZ3JvdW5kLWNvbG9yOiB3aGl0ZTtcbiAgaGVpZ2h0OiBmaXQtY29udGVudDtcbiAgei1pbmRleDogMjtcbiAgYmFja2dyb3VuZC1jb2xvcjogI0Y4RjhGODtcbn1cblxuLnVsLWJ1dHRvbnMtcGFuZWwge1xuICBkaXNwbGF5OiBmbGV4O1xuICBjb2xvcjogYmxhY2s7XG4gIGhlaWdodDogNTBweDtcbiAgcGFkZGluZzogMnB4IDE0cHggMDtcbn1cblxuLnZpZGVvLWpzIC52anMtdm9sdW1lLXBhbmVsIHtcbiAgaGVpZ2h0OiAzMHB4O1xuICB3aWR0aDogNDBweDtcbn1cblxuLnVsLWJ1dHRvbnMtcGFuZWwgPiAudmpzLWJ1dHRvbiB7XG4gIGJhY2tncm91bmQtY29sb3I6IHJnYmEoMCwgMCwgMCwgMC4wNSk7XG4gIGJvcmRlci1yYWRpdXM6IDUwJTtcbiAgaGVpZ2h0OiAzZW07XG4gIHdpZHRoOiAzZW07XG4gIG1hcmdpbjogMCAxMHB4O1xufVxuXG5zcGFuLnVsLWJ1dHRvbi10ZXh0IHtcbiAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xuICB0cmFuc2Zvcm06IHRyYW5zbGF0ZSgwcHgsIDI1cHgpO1xuICAtbW96LXRyYW5zZm9ybTogdHJhbnNsYXRlKDFweCwgMjVweCk7XG59XG5cbi52anMtcGxheWJhY2stcmF0ZSA+IHNwYW4udWwtYnV0dG9uLXRleHQge1xuICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XG4gIHRyYW5zZm9ybTogdHJhbnNsYXRlKDBweCwgMzVweCk7XG59XG5cbi51bC12aWRlby1yZWNvcmRlci1kZWxldGUtYnV0dG9uID4gc3Bhbi51bC1idXR0b24tdGV4dCB7XG4gIHRyYW5zZm9ybTogdHJhbnNsYXRlKC03cHgsIDI1cHgpO1xufVxuXG4jdWwtcmVjb3JkZXItdG9nZ2xlIHtcbiAgdHJhbnNmb3JtOiB0cmFuc2xhdGUoLTdweCwgMjVweCk7XG4gIC1tb3otdHJhbnNmb3JtOiB0cmFuc2xhdGUoLTVweCwgMjVweCk7XG59XG5cbiN1bC1jYW1lcmEtYnV0dG9uIHtcbiAgd2hpdGUtc3BhY2U6IG5vd3JhcDtcbiAgdHJhbnNmb3JtOiB0cmFuc2xhdGUoLTdweCwgMjVweCk7XG59XG5cbi51bC12aWRlby1yZWNvcmRlci1jYW1lcmEtb2ZmLWJ1dHRvbi1hdWRpby1vbmx5ID4gI3VsLWNhbWVyYS1idXR0b24ge1xuICB0cmFuc2Zvcm06IHRyYW5zbGF0ZSgtMTFweCwgMjVweCk7XG59XG5cbi51bC1pbmFjdGl2ZSB7XG4gIG9wYWNpdHk6IDAuMztcbiAgY3Vyc29yOiBkZWZhdWx0O1xuICBwb2ludGVyLWV2ZW50czogbm9uZTtcbn1cblxuLnZpZGVvLWpzIC52anMtdm9sdW1lLWNvbnRyb2wudmpzLXZvbHVtZS1ob3Jpem9udGFsIHtcbiAgYmFja2dyb3VuZC1jb2xvcjogI2ZmZjtcbiAgei1pbmRleDogMTtcbn1cblxuLnZqcy12b2x1bWUtYmFyLnZqcy1zbGlkZXItaG9yaXpvbnRhbCAudmpzLXZvbHVtZS1sZXZlbCB7XG4gIGJhY2tncm91bmQtY29sb3I6IGJsYWNrO1xufVxuXG4udmlkZW8tanMgLnZqcy12b2x1bWUtcGFuZWwudmpzLXZvbHVtZS1wYW5lbC1ob3Jpem9udGFsLnZqcy1ob3Zlcixcbi52aWRlby1qcyAudmpzLXZvbHVtZS1wYW5lbC52anMtdm9sdW1lLXBhbmVsLWhvcml6b250YWwudmpzLXNsaWRlci1hY3RpdmUsXG4udmlkZW8tanMgLnZqcy12b2x1bWUtcGFuZWwudmpzLXZvbHVtZS1wYW5lbC1ob3Jpem9udGFsOmFjdGl2ZSB7XG4gIHdpZHRoOiA0MHB4O1xufVxuXG4udmlkZW8tanMgLnZqcy12b2x1bWUtcGFuZWwgLnZqcy12b2x1bWUtY29udHJvbC52anMtc2xpZGVyLWFjdGl2ZSxcbi52aWRlby1qcyAudmpzLXZvbHVtZS1wYW5lbCAudmpzLXZvbHVtZS1jb250cm9sOmFjdGl2ZSxcbi52aWRlby1qcyAudmpzLXZvbHVtZS1wYW5lbC52anMtaG92ZXIgLnZqcy1tdXRlLWNvbnRyb2wgfiAudmpzLXZvbHVtZS1jb250cm9sLFxuLnZpZGVvLWpzIC52anMtdm9sdW1lLXBhbmVsLnZqcy1ob3ZlciAudmpzLXZvbHVtZS1jb250cm9sLFxuLnZpZGVvLWpzIC52anMtdm9sdW1lLXBhbmVsOmFjdGl2ZSAudmpzLXZvbHVtZS1jb250cm9sLFxuLnZpZGVvLWpzIC52anMtdm9sdW1lLXBhbmVsOmZvY3VzIC52anMtdm9sdW1lLWNvbnRyb2wge1xuICB2aXNpYmlsaXR5OiB2aXNpYmxlO1xuICBsZWZ0OiA0MHB4O1xuICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gIHRyYW5zaXRpb246IHZpc2liaWxpdHkgMC4xcywgb3BhY2l0eSAwLjFzLCBoZWlnaHQgMC4xcywgd2lkdGggMC4xcywgbGVmdCAwcywgdG9wIDBzO1xufVxuXG4vKiBwbGF5IGJ1dHRvbiBjdXN0b21pemF0aW9uICovXG4udmlkZW8tanMgLnZqcy1wbGF5LWNvbnRyb2wge1xuICBjb2xvcjogYmxhY2s7XG59XG5cbi52aWRlby1qcyAudmpzLXBsYXktY29udHJvbCAudmpzLWljb24tcGxhY2Vob2xkZXI6YmVmb3JlIHtcbiAgZGlzcGxheTogZmxleDtcbiAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7XG4gIGNvbnRlbnQ6IHVybChcImRhdGE6aW1hZ2Uvc3ZnK3htbCwlM0Nzdmcgd2lkdGg9JzEyJyBoZWlnaHQ9JzEyJyB2aWV3Qm94PScwIDAgMTIgMTInIGZpbGw9J25vbmUnIHhtbG5zPSdodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyclM0UlM0NwYXRoIGQ9J00xMC41MzYzIDYuNDAyMjZMMS45Mzk1OCAxMC43MDA2QzEuNjQwMzcgMTAuODUwMiAxLjI4ODMzIDEwLjYzMjYgMS4yODgzMyAxMC4yOTgxVjEuNzAxNEMxLjI4ODMzIDEuMzY2ODggMS42NDAzNyAxLjE0OTMxIDEuOTM5NTggMS4yOTg5MUwxMC41MzYzIDUuNTk3MjdDMTAuODY4IDUuNzYzMTEgMTAuODY4IDYuMjM2NDIgMTAuNTM2MyA2LjQwMjI2Wicgc3Ryb2tlPSdibGFjaycgc3Ryb2tlLXdpZHRoPScxLjUnIHN0cm9rZS1saW5lY2FwPSdyb3VuZCcvJTNFJTNDL3N2ZyUzRVwiKTtcbn1cblxuLyogcG9zaXRpb24gYW5kIHN0eWxlIHRoZSBjdXJyZW50IHRpbWVyICovXG4udWwtdGltZS1wYW5lbCB7XG4gIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgYm90dG9tOiA4MHB4O1xuICBsZWZ0OiAxMHB4O1xuICBoZWlnaHQ6IDIycHg7XG4gIGNvbG9yOiBibGFjaztcbiAgYm9yZGVyOiAxcHggc29saWQgI2UwZTBlYjtcbiAgYm9yZGVyLXJhZGl1czogMjNweDtcbiAgYmFja2dyb3VuZC1jb2xvcjogd2hpdGU7XG4gIHdpZHRoOiBmaXQtY29udGVudDtcbn1cblxuLnZpZGVvLWpzIC52anMtY3VycmVudC10aW1lLFxuLnZqcy1uby1mbGV4IC52anMtY3VycmVudC10aW1lIHtcbiAgZGlzcGxheTogZmxleDtcbiAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAgdGV4dC1hbGlnbjogY2VudGVyO1xufVxuXG4vKiByZW1vdmUgdGhlIGRvdCBwcm9ncmVzcyBpbmRpY2F0b3IgKi9cbi52aWRlby1qcyAudmpzLXBsYXktcHJvZ3Jlc3M6YmVmb3JlLFxuLnZpZGVvLWpzIC52anMtdm9sdW1lLWxldmVsOmJlZm9yZSxcbi52anMtaWNvbi1jaXJjbGU6YmVmb3JlLFxuLnZqcy1zZWVrLXRvLWxpdmUtY29udHJvbCAudmpzLWljb24tcGxhY2Vob2xkZXI6YmVmb3JlIHtcbiAgY29udGVudDogbm9uZTtcbn1cblxuLnZpZGVvLWpzIC52anMtbXV0ZS1jb250cm9sIC52anMtaWNvbi1wbGFjZWhvbGRlcjpiZWZvcmUge1xuICBjb250ZW50OiB1cmwoXCJkYXRhOmltYWdlL3N2Zyt4bWwsJTNDc3ZnIHdpZHRoPScxOScgaGVpZ2h0PScxNCcgZmlsbD0nbm9uZScgeG1sbnM9J2h0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnJyUzRSUzQ3BhdGggZmlsbC1ydWxlPSdldmVub2RkJyBjbGlwLXJ1bGU9J2V2ZW5vZGQnIGQ9J004LjgyNS4zMjRBLjc1Ljc1IDAgMDE5LjI1IDF2MTEuNjY3YS43NS43NSAwIDAxLTEuMjE5LjU4NWwtMy45Ni0zLjE2OUgxYS43NS43NSAwIDAxLS43NS0uNzV2LTVhLjc1Ljc1IDAgMDEuNzUtLjc1aDMuMDdMOC4wMzEuNDE0YS43NS43NSAwIDAxLjc5NC0uMDl6TTcuNzUgMi41Nkw0LjgwMiA0LjkyYS43NS43NSAwIDAxLS40NjkuMTY0SDEuNzV2My41aDIuNTgzYS43NS43NSAwIDAxLjQ2OS4xNjVsMi45NDggMi4zNThWMi41NnpNMTQuOTExLjQ3YS43NS43NSAwIDAxMS4wNjEgMCA5LjA4NCA5LjA4NCAwIDAxMCAxMi44NDQuNzUuNzUgMCAwMS0xLjA2LTEuMDYgNy41ODQgNy41ODQgMCAwMDAtMTAuNzI0Ljc1Ljc1IDAgMDEwLTEuMDZ6TTExLjk3IDMuNDFhLjc1Ljc1IDAgMDExLjA2IDAgNC45MTcgNC45MTcgMCAwMTAgNi45NTMuNzUuNzUgMCAxMS0xLjA2LTEuMDYgMy40MTcgMy40MTcgMCAwMDAtNC44MzIuNzUuNzUgMCAwMTAtMS4wNnonIGZpbGw9JyUyMzI2MjEzNicvJTNFJTNDL3N2ZyUzRVwiKTtcbn1cblxuLnZpZGVvLWpzIC52anMtbXV0ZS1jb250cm9sLnZqcy12b2wtMCAudmpzLWljb24tcGxhY2Vob2xkZXI6YmVmb3JlIHtcbiAgY29udGVudDogdXJsKFwiZGF0YTppbWFnZS9zdmcreG1sLCUzQ3N2ZyB3aWR0aD0nMTknIGhlaWdodD0nMTQnIGZpbGw9J25vbmUnIHhtbG5zPSdodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyclM0UlM0NwYXRoIGQ9J004LjUgMS4xNjdMNC4zMzMgNC41SDF2NWgzLjMzM0w4LjUgMTIuODMzVjEuMTY3ek0xNy4xNyA0LjVsLTUgNU0xMi4xNyA0LjVsNSA1JyBzdHJva2U9JyUyMzI2MjEzNicgc3Ryb2tlLXdpZHRoPScxLjUnIHN0cm9rZS1saW5lY2FwPSdyb3VuZCcgc3Ryb2tlLWxpbmVqb2luPSdyb3VuZCcvJTNFJTNDL3N2ZyUzRVwiKTtcbn1cblxuLnZpZGVvLWpzIC52anMtbXV0ZS1jb250cm9sLnZqcy12b2wtMSAudmpzLWljb24tcGxhY2Vob2xkZXI6YmVmb3JlIHtcbiAgY29udGVudDogdXJsKFwiZGF0YTppbWFnZS9zdmcreG1sLCUzQ3N2ZyB3aWR0aD0nMTknIGhlaWdodD0nMTQnIHZpZXdCb3g9JzAgMCAxOSAxNCcgZmlsbD0nbm9uZScgeG1sbnM9J2h0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnJyUzRSUzQ3BhdGggZmlsbC1ydWxlPSdldmVub2RkJyBjbGlwLXJ1bGU9J2V2ZW5vZGQnIGQ9J004LjgyNDg5IDAuMzI0MDNDOS4wODQ3NCAwLjQ0ODkyIDkuMjUgMC43MTE3MDMgOS4yNSAxLjAwMDAxVjEyLjY2NjdDOS4yNSAxMi45NTUgOS4wODQ3NCAxMy4yMTc4IDguODI0ODkgMTMuMzQyN0M4LjU2NTA0IDEzLjQ2NzUgOC4yNTY2MSAxMy40MzI0IDguMDMxNDggMTMuMjUyM0w0LjA3MDI1IDEwLjA4MzNIMUMwLjU4NTc4NiAxMC4wODMzIDAuMjUgOS43NDc1NSAwLjI1IDkuMzMzMzRWNC4zMzMzNEMwLjI1IDMuOTE5MTMgMC41ODU3ODYgMy41ODMzNCAxIDMuNTgzMzRINC4wNzAyNUw4LjAzMTQ4IDAuNDE0MzU1QzguMjU2NjEgMC4yMzQyNTMgOC41NjUwNCAwLjE5OTE0IDguODI0ODkgMC4zMjQwM1pNNy43NSAyLjU2MDQ4TDQuODAxODUgNC45MTg5OUM0LjY2ODg3IDUuMDI1MzggNC41MDM2NCA1LjA4MzM0IDQuMzMzMzMgNS4wODMzNEgxLjc1VjguNTgzMzRINC4zMzMzM0M0LjUwMzY0IDguNTgzMzQgNC42Njg4NyA4LjY0MTMgNC44MDE4NSA4Ljc0NzY5TDcuNzUgMTEuMTA2MlYyLjU2MDQ4WicgZmlsbD0nJTIzMjYyMTM2Jy8lM0UlM0Mvc3ZnJTNFJTBBXCIpO1xufVxuXG4udmlkZW8tanMgLnZqcy1tdXRlLWNvbnRyb2wudmpzLXZvbC0yIC52anMtaWNvbi1wbGFjZWhvbGRlcjpiZWZvcmUge1xuICBjb250ZW50OiB1cmwoXCJkYXRhOmltYWdlL3N2Zyt4bWwsJTNDc3ZnIHdpZHRoPScxOScgaGVpZ2h0PScxNCcgdmlld0JveD0nMCAwIDE5IDE0JyBmaWxsPSdub25lJyB4bWxucz0naHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmcnJTNFJTNDcGF0aCBmaWxsLXJ1bGU9J2V2ZW5vZGQnIGNsaXAtcnVsZT0nZXZlbm9kZCcgZD0nTTguODI0ODkgMC4zMjQwM0M5LjA4NDc0IDAuNDQ4OTIgOS4yNSAwLjcxMTcwMyA5LjI1IDEuMDAwMDFWMTIuNjY2N0M5LjI1IDEyLjk1NSA5LjA4NDc0IDEzLjIxNzggOC44MjQ4OSAxMy4zNDI3QzguNTY1MDQgMTMuNDY3NSA4LjI1NjYxIDEzLjQzMjQgOC4wMzE0OCAxMy4yNTIzTDQuMDcwMjUgMTAuMDgzM0gxQzAuNTg1Nzg2IDEwLjA4MzMgMC4yNSA5Ljc0NzU1IDAuMjUgOS4zMzMzNFY0LjMzMzM0QzAuMjUgMy45MTkxMyAwLjU4NTc4NiAzLjU4MzM0IDEgMy41ODMzNEg0LjA3MDI1TDguMDMxNDggMC40MTQzNTVDOC4yNTY2MSAwLjIzNDI1MyA4LjU2NTA0IDAuMTk5MTQgOC44MjQ4OSAwLjMyNDAzWk03Ljc1IDIuNTYwNDhMNC44MDE4NSA0LjkxODk5QzQuNjY4ODcgNS4wMjUzOCA0LjUwMzY0IDUuMDgzMzQgNC4zMzMzMyA1LjA4MzM0SDEuNzVWOC41ODMzNEg0LjMzMzMzQzQuNTAzNjQgOC41ODMzNCA0LjY2ODg3IDguNjQxMyA0LjgwMTg1IDguNzQ3NjlMNy43NSAxMS4xMDYyVjIuNTYwNDhaJyBmaWxsPSclMjMyNjIxMzYnLyUzRSUzQ3BhdGggZmlsbC1ydWxlPSdldmVub2RkJyBjbGlwLXJ1bGU9J2V2ZW5vZGQnIGQ9J00xMS45Njk4IDMuNDExMjRDMTIuMjYyNyAzLjExODM5IDEyLjczNzYgMy4xMTg0NiAxMy4wMzA0IDMuNDExNEMxMy45NTIxIDQuMzMzNDEgMTQuNDY5OSA1LjU4Mzc2IDE0LjQ2OTkgNi44ODc0OEMxNC40Njk5IDguMTkxMjEgMTMuOTUyMSA5LjQ0MTU2IDEzLjAzMDQgMTAuMzYzNkMxMi43Mzc2IDEwLjY1NjUgMTIuMjYyNyAxMC42NTY2IDExLjk2OTggMTAuMzYzN0MxMS42NzY4IDEwLjA3MDkgMTEuNjc2NyA5LjU5NiAxMS45Njk2IDkuMzAzMDdDMTIuNjEwMSA4LjY2MjM1IDEyLjk2OTkgNy43OTM0NiAxMi45Njk5IDYuODg3NDhDMTIuOTY5OSA1Ljk4MTUxIDEyLjYxMDEgNS4xMTI2MiAxMS45Njk2IDQuNDcxOUMxMS42NzY3IDQuMTc4OTYgMTEuNjc2OCAzLjcwNDA5IDExLjk2OTggMy40MTEyNFonIGZpbGw9JyUyMzI2MjEzNicvJTNFJTNDL3N2ZyUzRSUwQVwiKTtcbn1cblxuLnZpZGVvLWpzIC52anMtdm9sdW1lLWNvbnRyb2w6aG92ZXIgLnZqcy1tb3VzZS1kaXNwbGF5IHtcbiAgZGlzcGxheTogbm9uZSAhaW1wb3J0YW50O1xufVxuXG4udmlkZW8tanMgLnZqcy1wbGF5LXByb2dyZXNzIHtcbiAgYmFja2dyb3VuZC1jb2xvcjogYmxhY2s7XG59XG5cbi8qIHBvc2l0aW9uIHZpZGVvIHBsYXllciBpbnNpZGUgdGhlIGNvbnRhaW5lciAqL1xuLnZpZGVvLWpzIC52anMtdGVjaCB7XG4gIHBvc2l0aW9uOiBzdGF0aWM7XG59XG5cbi52aWRlby1qcyAudmpzLXRpbWUtdG9vbHRpcCB7XG4gIHBhZGRpbmc6IDAuMjVlbSAwLjc1ZW07XG4gIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gIGNvbG9yOiAjMzMzO1xuICBiYWNrZ3JvdW5kOiAjRkNGQ0ZEO1xuICBib3JkZXItcmFkaXVzOiA5OXB4O1xuICB0ZXh0LWFsaWduOiBjZW50ZXI7XG4gIGJvcmRlcjogMXB4IHNvbGlkICNFMEUwRUI7XG4gIGRpc3BsYXk6IGZsZXg7XG4gIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gIGp1c3RpZnktY29udGVudDogY2VudGVyO1xuICB0b3A6IC0yNXB4O1xuICBmb250LXNpemU6IDEycHggIWltcG9ydGFudDtcbiAgd2lkdGg6IDUwcHggIWltcG9ydGFudDtcbn1cblxuLnZpZGVvLWpzIC52anMtcGxheS1wcm9ncmVzcy52anMtc2xpZGVyLWJhciAudmpzLXRpbWUtdG9vbHRpcCB7XG4gIHZpc2liaWxpdHk6IGhpZGRlbiAhaW1wb3J0YW50O1xufVxuXG4udmlkZW8tanMgLnZqcy1wcm9ncmVzcy1jb250cm9sIC52anMtbW91c2UtZGlzcGxheSB7XG4gIHotaW5kZXg6IDI7XG59XG5cbi51bC12aWRlby1wbGF5ZXIge1xuICB3aWR0aDogMTAwJTtcbiAgZGlzcGxheTogZmxleDtcbiAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcbiAgaGVpZ2h0OiBhdXRvO1xuICBib3JkZXI6IDFweCBzb2xpZCAjRTZFNkU2O1xuICBiYWNrZ3JvdW5kLWNvbG9yOiB3aGl0ZTtcbiAgYm94LXNpemluZzogYm9yZGVyLWJveDtcbiAgYm9yZGVyLXJhZGl1czogNHB4O1xuICBiYWNrZ3JvdW5kLWNsaXA6IGJvcmRlci1ib3g7XG4gIG92ZXJmbG93OiBoaWRkZW47XG59XG5cbi52aWRlby1qcy52anMtZnVsbHNjcmVlbjpub3QoLnZqcy1pb3MtbmF0aXZlLWZzKSB7XG4gIGJvcmRlcjogbm9uZTtcbn1cblxuI3VsLWNhcmQtdmlkZW9fX3BsYXllcl9yZWNvcmRlci12aWRlby1yZWNvcmRlci52anMtZnVsbHNjcmVlbiB7XG4gIGRpc3BsYXk6IHRhYmxlO1xufVxuXG4udmlkZW8tanMgZGl2LnZqcy1wcm9ncmVzcy1jb250cm9sIHtcbiAgbWFyZ2luLXRvcDogLTNweDtcbn1cblxuLnZpZGVvLWpzIC52anMtcHJvZ3Jlc3MtY29udHJvbCAudmpzLXNsaWRlciB7XG4gIGJhY2tncm91bmQtY29sb3I6ICNCMkJCQkQ7XG59XG5cbi52anMtcmVjb3JkLnZpZGVvLWpzIC52anMtY29udHJvbC52anMtYnV0dG9uLnZqcy1mdWxsc2NyZWVuLWNvbnRyb2wge1xuICBwb3NpdGlvbjpyZWxhdGl2ZTtcbn1cblxuLyogZml4IGEgc3VidGxlIG1pc2FsaWdubWVudCBidWcgb24gY2lyY3VsYXIgcGxheSBjb250cm9sIGJ1dHRvbnMgKi9cbi52aWRlby1qcyAudmpzLXBsYXktY29udHJvbCAudmpzLWljb24tcGxhY2Vob2xkZXIge1xuICB0cmFuc2Zvcm06IHRyYW5zbGF0ZSgxcHgsIDJweCk7XG4gIC1tb3otdHJhbnNmb3JtOiB0cmFuc2xhdGUoMXB4LCA1cHgpO1xufVxuXG4udmlkZW8tanMgLnZqcy1wbGF5LWNvbnRyb2wudmpzLXBsYXlpbmcgPiAudmpzLWljb24tcGxhY2Vob2xkZXIge1xuICB0cmFuc2Zvcm06IHRyYW5zbGF0ZSgwcHgsIDJweCk7XG4gIC1tb3otdHJhbnNmb3JtOiB0cmFuc2xhdGUoMHB4LCA0cHgpO1xufVxuXG4vKiBmaXggb3Bwb3NpdGUgbWlzYWxpZ25tZW50IGJ1ZyBvbiBub25jaXJjdWxhciBidXR0b25zICovXG4udmlkZW8tanMgLnZqcy1tdXRlLWNvbnRyb2wgLnZqcy1pY29uLXBsYWNlaG9sZGVyOmJlZm9yZSB7XG4gIHRyYW5zZm9ybTogdHJhbnNsYXRlWSgtMnB4KTtcbn1cblxuLnZpZGVvLWpzIC52anMtZnVsbHNjcmVlbi1jb250cm9sIC52anMtaWNvbi1wbGFjZWhvbGRlcjpiZWZvcmUge1xuICBjb250ZW50OiB1cmwoXCJkYXRhOmltYWdlL3N2Zyt4bWwsJTNDc3ZnIHdpZHRoPScxNicgaGVpZ2h0PScxNicgdmlld0JveD0nMCAwIDE2IDE2JyBmaWxsPSdub25lJyB4bWxucz0naHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmcnJTNFJTNDcGF0aCBkPSdNOS44MjE0MyAyLjU0MDA0TDEyLjI2MTQgMi41NDAwNEMxMi45MjQyIDIuNTQwMDQgMTMuNDYxNCAzLjA3NzMgMTMuNDYxNCAzLjc0MDA0TDEzLjQ2MTQgNi4xODAwNCcgc3Ryb2tlPSdibGFjaycgc3Ryb2tlLXdpZHRoPScxLjUnIHN0cm9rZS1saW5lY2FwPSdyb3VuZCcgc3Ryb2tlLWxpbmVqb2luPSdyb3VuZCcvJTNFJTNDcGF0aCBkPSdNNi4xNzk1NSAxMy40NkwzLjczOTU1IDEzLjQ2QzMuMDc2ODEgMTMuNDYgMi41Mzk1NSAxMi45MjI3IDIuNTM5NTUgMTIuMjZMMi41Mzk1NSA5LjgxOTk2JyBzdHJva2U9J2JsYWNrJyBzdHJva2Utd2lkdGg9JzEuNScgc3Ryb2tlLWxpbmVjYXA9J3JvdW5kJyBzdHJva2UtbGluZWpvaW49J3JvdW5kJy8lM0UlM0NwYXRoIGQ9J00xMi43NzcyIDMuMjIyNjZMOS4zNjQ3NSA2LjYzNTE2JyBzdHJva2U9J2JsYWNrJyBzdHJva2Utd2lkdGg9JzEuNScgc3Ryb2tlLWxpbmVjYXA9J3JvdW5kJyBzdHJva2UtbGluZWpvaW49J3JvdW5kJy8lM0UlM0NwYXRoIGQ9J002LjI5NDM0IDkuNzA2MDVMMi44ODE4NCAxMy4xMTg2JyBzdHJva2U9J2JsYWNrJyBzdHJva2Utd2lkdGg9JzEuNScgc3Ryb2tlLWxpbmVjYXA9J3JvdW5kJyBzdHJva2UtbGluZWpvaW49J3JvdW5kJy8lM0UlM0Mvc3ZnJTNFXCIpO1xufVxuXG4udmlkZW8tanMudmpzLWZ1bGxzY3JlZW4gLnZqcy1mdWxsc2NyZWVuLWNvbnRyb2wgLnZqcy1pY29uLXBsYWNlaG9sZGVyOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IHVybChcImRhdGE6aW1hZ2Uvc3ZnK3htbCwlM0Nzdmcgd2lkdGg9JzE2JyBoZWlnaHQ9JzE2JyBmaWxsPSdub25lJyB4bWxucz0naHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmcnJTNFJTNDcGF0aCBkPSdNMS41ODMgOS44MTNINS4yNWExIDEgMCAwMTEgMXYzLjY2Nk01LjM3NSAxMC42ODhMMSAxNS4wNjFNMTQuOTE3IDUuODEzSDExLjI1YTEgMSAwIDAxLTEtMVYxLjE0Nk0xNS4wNjMgMWwtNC4zNzYgNC4zNzUnIHN0cm9rZT0nJTIzMjYyMTM2JyBzdHJva2Utd2lkdGg9JzEuNScgc3Ryb2tlLWxpbmVjYXA9J3JvdW5kJyBzdHJva2UtbGluZWpvaW49J3JvdW5kJy8lM0UlM0Mvc3ZnJTNFXCIpO1xufVxuXG4udmlkZW8tanMgLnZqcy1wbGF5LWNvbnRyb2wudmpzLWVuZGVkIC52anMtaWNvbi1wbGFjZWhvbGRlcjpiZWZvcmUsIC52aWRlby1qcyAudmpzLWljb24tcmVwbGF5OmJlZm9yZSB7XG4gIGNvbnRlbnQ6IHVybChcImRhdGE6aW1hZ2Uvc3ZnK3htbCwlM0Nzdmcgd2lkdGg9JzEyJyBoZWlnaHQ9JzEyJyB2aWV3Qm94PScwIDAgMTIgMTInIGZpbGw9J25vbmUnIHhtbG5zPSdodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyclM0UlM0NwYXRoIGQ9J00xMC41MzYzIDYuNDAyMjZMMS45Mzk1OCAxMC43MDA2QzEuNjQwMzcgMTAuODUwMiAxLjI4ODMzIDEwLjYzMjYgMS4yODgzMyAxMC4yOTgxVjEuNzAxNEMxLjI4ODMzIDEuMzY2ODggMS42NDAzNyAxLjE0OTMxIDEuOTM5NTggMS4yOTg5MUwxMC41MzYzIDUuNTk3MjdDMTAuODY4IDUuNzYzMTEgMTAuODY4IDYuMjM2NDIgMTAuNTM2MyA2LjQwMjI2Wicgc3Ryb2tlPSdibGFjaycgc3Ryb2tlLXdpZHRoPScxLjUnIHN0cm9rZS1saW5lY2FwPSdyb3VuZCcvJTNFJTNDL3N2ZyUzRVwiKTtcbn1cblxuLnZpZGVvLWpzIC52anMtcGxheS1jb250cm9sLnZqcy1wbGF5aW5nIC52anMtaWNvbi1wbGFjZWhvbGRlcjpiZWZvcmUsIC52anMtaWNvbi1wYXVzZTpiZWZvcmUge1xuICBjb250ZW50OiB1cmwoXCJkYXRhOmltYWdlL3N2Zyt4bWwsJTNDc3ZnIHdpZHRoPScxNicgaGVpZ2h0PScxNicgdmlld0JveD0nMCAwIDE2IDE2JyBmaWxsPSdub25lJyB4bWxucz0naHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmcnJTNFJTNDcmVjdCB4PSczLjYxODg1JyB5PScyLjA2MDc0JyB3aWR0aD0nMy4xNjE4NScgaGVpZ2h0PScxMS44OCcgcng9JzAuOScgZmlsbD0nYmxhY2snIHN0cm9rZT0nJTIzRURFREVEJyBzdHJva2Utd2lkdGg9JzAuNicgc3Ryb2tlLWxpbmVjYXA9J3JvdW5kJy8lM0UlM0NyZWN0IHg9JzkuMjE3OTcnIHk9JzIuMDYwNzQnIHdpZHRoPSczLjE2MTg1JyBoZWlnaHQ9JzExLjg4JyByeD0nMC45JyBmaWxsPSdibGFjaycgc3Ryb2tlPSclMjNFREVERUQnIHN0cm9rZS13aWR0aD0nMC42JyBzdHJva2UtbGluZWNhcD0ncm91bmQnLyUzRSUzQy9zdmclM0UlMEFcIik7XG4gIHBhZGRpbmc6IDJweDtcbn1cblxuLnZqcy1lcnJvci1kaXNwbGF5IHtcbiAgZGlzcGxheTogbm9uZTtcbn1cblxuLnVsLXZpZGVvLXBsYXllci12aWRlbyB7XG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgdG9wOiAwO1xuICBsZWZ0OiAwO1xuICB3aWR0aDogMTAwJTtcbn1cblxuLnVsLXZpZGVvLWNvbnRhaW5lciB7XG4gIHdpZHRoOiAxMDAlO1xuICBoZWlnaHQ6IGF1dG87XG4gIGxlZnQ6IDBweDtcbiAgdG9wOiAwcHg7XG5cbiAgYmFja2dyb3VuZC1jb2xvcjogI2ZmZmZmZjtcbiAgYm9yZGVyLXJhZGl1czogNHB4O1xuXG4gIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gIGRpc3BsYXk6IGZsZXg7XG4gIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XG5cbiAgLyogSW5zaWRlIEF1dG8gTGF5b3V0ICovXG5cbiAgZmxleDogbm9uZTtcbiAgb3JkZXI6IDA7XG4gIGZsZXgtZ3JvdzogMDtcbiAgbWFyZ2luOiAxMHB4IDBweDtcbiAgcG9zaXRpb246IHJlbGF0aXZlO1xufVxuXG4udmpzLXJlY29yZCBidXR0b24udmpzLWRldmljZS1idXR0b24udmpzLWNvbnRyb2wge1xuICBiYWNrZ3JvdW5kOiByZ2JhKDI1NSwgMjU1LCAyNTUsIDk2KTtcbiAgZm9udC1mYW1pbHk6IC1hcHBsZS1zeXN0ZW0sIEJsaW5rTWFjU3lzdGVtRm9udCwgXCJTZWdvZSBVSVwiLCBSb2JvdG8sIEhlbHZldGljYSwgQXJpYWwsIHNhbnMtc2VyaWYsIFwiQXBwbGUgQ29sb3IgRW1vamlcIiwgXCJTZWdvZSBVSSBFbW9qaVwiLCBcIlNlZ29lIFVJIFN5bWJvbFwiO1xuICB3aWR0aDogMTAwJTtcbiAgaGVpZ2h0OiAxMDAlO1xuICBsZWZ0OiAwO1xuICB0b3A6IDA7XG4gIG1hcmdpbjogMDtcbiAgYm9yZGVyLXJhZGl1czogMDtcbiAgbGluZS1oZWlnaHQ6IDAuNjtcbiAgcGFkZGluZzogMTBweDtcbiAgZGlzcGxheTogZmxleDtcbiAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcbiAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7XG4gIHotaW5kZXg6IDM7XG59XG5cbi52anMtcmVjb3JkIC52anMtZGV2aWNlLWJ1dHRvbi52anMtY29udHJvbDpiZWZvcmUge1xuICBmb250LXNpemU6IDE0cHggIWltcG9ydGFudDtcbiAgY29sb3I6ICMzMzM7XG4gIGNvbnRlbnQ6IFwiWW91ciBicm93c2VyIG5lZWRzIHRvIGFjY2VzcyB5b3VyIGNhbWVyYSBhbmQgbWljcm9waG9uZSBmb3IgdmlkZW8gcmVjb3JkaW5nXCI7XG4gIGxpbmUtaGVpZ2h0OiAxMzUlO1xufVxuXG4udmpzLXJlY29yZCAudmpzLWRldmljZS1idXR0b24udmpzLWNvbnRyb2wucGVybWlzc2lvbi1kZW5pZWQ6YmVmb3JlIHtcbiAgZm9udC1zaXplOiAxNnB4ICFpbXBvcnRhbnQ7XG4gIGNvbG9yOiAjMjYyMTM2O1xuICBjb250ZW50OiBcIlVuYWJsZSB0byBhY2Nlc3MgeW91ciBjYW1lcmEgYW5kIG1pY3JvcGhvbmVcIjtcbn1cblxuLnZqcy1yZWNvcmQgLnZqcy1kZXZpY2UtYnV0dG9uLnZqcy1jb250cm9sOmFmdGVyIHtcbiAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xuICBiYWNrZ3JvdW5kOiAjRjBGMEY1O1xuICBmb250LXNpemU6IDEzcHg7XG4gIGJvcmRlci1yYWRpdXM6IDRweDtcbiAgY29udGVudDogXCJSZXF1ZXN0IFBlcm1pc3Npb25zXCI7XG4gIHBhZGRpbmc6IDFlbSAyZW07XG4gIGNvbG9yOiAjMzMzO1xuICBtYXJnaW4tdG9wOiAyMHB4O1xufVxuXG4udmpzLXJlY29yZCAudmpzLWRldmljZS1idXR0b24udmpzLWNvbnRyb2wucGVybWlzc2lvbi1kZW5pZWQ6YWZ0ZXIge1xuICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XG4gIGJhY2tncm91bmQ6IHdoaXRlO1xuICBmb250LXNpemU6IDEzcHg7XG4gIGNvbnRlbnQ6IFwiUGxlYXNlIGdvIHRvIHlvdXIgYnJvd3NlciBzZXR0aW5ncyBhbmQgdXBkYXRlIHBlcm1pc3Npb25zIHRvIGVuYWJsZSByZWNvcmRpbmdcIjtcbiAgcGFkZGluZzogMWVtO1xuICBjb2xvcjogIzRCNTc1RDtcbiAgbWFyZ2luOiA1cHg7XG4gIGxpbmUtaGVpZ2h0OiAxMzUlO1xuICB0ZXh0LWFsaWduOiBjZW50ZXI7XG59XG5cbi52anMtY29udHJvbC52anMtYnV0dG9uLnVsLXZpZGVvLXJlY29yZGVyLWRlbGV0ZS1idXR0b24sIC52anMtY29udHJvbC52anMtYnV0dG9uLnVsLXZpZGVvLXJlY29yZGVyLXRvZ2dsZS1idXR0b24sIC52anMtY29udHJvbC52anMtYnV0dG9uLnVsLXZpZGVvLXJlY29yZGVyLWNhbWVyYS1vZmYtYnV0dG9uLWF1ZGlvLW9ubHksIC52anMtY29udHJvbC52anMtYnV0dG9uLnVsLXZpZGVvLXJlY29yZGVyLWNhbWVyYS1vZmYtYnV0dG9uIHtcbiAgZGlzcGxheTogZmxleDtcbiAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7XG4gIGN1cnNvcjogcG9pbnRlcjtcbn1cblxuLnVsLXZpZGVvLXJlY29yZGVyLXRvZ2dsZS1idXR0b24gLnZqcy1pY29uLXBsYWNlaG9sZGVyIHtcbiAgdHJhbnNmb3JtOiB0cmFuc2xhdGUoMTZweCwgMnB4KTtcbiAgLW1vei10cmFuc2Zvcm06IHRyYW5zbGF0ZSgxN3B4LCAxcHgpO1xufVxuXG4udWwtdmlkZW8tcmVjb3JkZXItZGVsZXRlLWJ1dHRvbiAudmpzLWljb24tcGxhY2Vob2xkZXIge1xuICB0cmFuc2Zvcm06IHRyYW5zbGF0ZSgxNHB4LCAycHgpO1xuICAtbW96LXRyYW5zZm9ybTogdHJhbnNsYXRlKDE2cHgsIDFweCk7XG59XG5cbi51bC12aWRlby1yZWNvcmRlci1kZWxldGUtYnV0dG9uIC52anMtaWNvbi1wbGFjZWhvbGRlcjpiZWZvcmUge1xuICBjb250ZW50OiB1cmwoXCJkYXRhOmltYWdlL3N2Zyt4bWwsJTNDc3ZnIHdpZHRoPScxNicgaGVpZ2h0PScxNicgdmlld0JveD0nMCAwIDE2IDE2JyBmaWxsPSdub25lJyB4bWxucz0naHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmcnJTNFJTNDcGF0aCBkPSdNOS4yMTIzNCA3LjM3NTQ5VjExLjExOTNNMi41MzkzMSA0LjI1NTk1SDEzLjQ1OTNIMi41MzkzMVpNNS41NzIzNCA0LjI1NTk1VjMuMDA4MzNDNS41NzIyMiAyLjg0NDMzIDUuNjAzNTQgMi42ODE5MiA1LjY2NDUgMi41MzAzOEM1LjcyNTQ2IDIuMzc4ODQgNS44MTQ4OCAyLjI0MTE1IDUuOTI3NjIgMi4xMjUxOUM2LjA0MDM3IDIuMDA5MjIgNi4xNzQyNCAxLjkxNzI2IDYuMzIxNTggMS44NTQ1NkM2LjQ2ODkyIDEuNzkxODUgNi42MjY4MyAxLjc1OTY0IDYuNzg2MjggMS43NTk3N0g5LjIxMjM0QzkuMzcxNzkgMS43NTk2NCA5LjUyOTcgMS43OTE4NSA5LjY3NzAzIDEuODU0NTZDOS44MjQzNyAxLjkxNzI2IDkuOTU4MjQgMi4wMDkyMiAxMC4wNzEgMi4xMjUxOUMxMC4xODM3IDIuMjQxMTUgMTAuMjczMiAyLjM3ODg0IDEwLjMzNDEgMi41MzAzOEMxMC4zOTUxIDIuNjgxOTIgMTAuNDI2NCAyLjg0NDMzIDEwLjQyNjMgMy4wMDgzM1Y0LjI1NTk1SDUuNTcyMzRaTTEyLjI0NjMgNC4yNTU5NVYxMi45OTEyQzEyLjI0NjMgMTMuMzIyMyAxMi4xMTg0IDEzLjYzOTkgMTEuODkwNyAxMy44NzQxQzExLjY2MzEgMTQuMTA4MiAxMS4zNTQzIDE0LjIzOTggMTEuMDMyMyAxNC4yMzk4SDQuOTY2MjhDNC42NDQzMiAxNC4yMzk4IDQuMzM1NTUgMTQuMTA4MiA0LjEwNzg5IDEzLjg3NDFDMy44ODAyMyAxMy42Mzk5IDMuNzUyMzQgMTMuMzIyMyAzLjc1MjM0IDEyLjk5MTJWNC4yNTU5NUgxMi4yNDYzWk02Ljc4NjI4IDcuMzc1NDlWMTEuMTE5M1Y3LjM3NTQ5Wicgc3Ryb2tlPSdibGFjaycgc3Ryb2tlLXdpZHRoPScxLjUnIHN0cm9rZS1saW5lY2FwPSdyb3VuZCcgc3Ryb2tlLWxpbmVqb2luPSdyb3VuZCcvJTNFJTNDL3N2ZyUzRSUwQVwiKTtcbiAgcG9zaXRpb246IHJlbGF0aXZlO1xufVxuXG4udWwtdmlkZW8tcmVjb3JkZXItdG9nZ2xlLWJ1dHRvbiAudmpzLWljb24tcGxhY2Vob2xkZXI6YmVmb3JlIHtcbiAgY29udGVudDogdXJsKFwiZGF0YTppbWFnZS9zdmcreG1sLCUzQ3N2ZyB3aWR0aD0nMTYnIGhlaWdodD0nMTYnIHZpZXdCb3g9JzAgMCAxNiAxNicgZmlsbD0nbm9uZScgeG1sbnM9J2h0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnJyUzRSUzQ3BhdGggZD0nTTggMEMxMi40MTgzIDAgMTYgMy41ODE3MiAxNiA4QzE2IDEyLjQxODMgMTIuNDE4MyAxNiA4IDE2QzMuNTgxNzIgMTYgMCAxMi40MTgzIDAgOEMwIDMuNTgxNzIgMy41ODE3MiAwIDggMFonIGZpbGw9JyUyM0QxNTE1MycvJTNFJTNDL3N2ZyUzRVwiKTtcbiAgcG9zaXRpb246IHJlbGF0aXZlO1xufVxuXG4udWwtdmlkZW8tcmVjb3JkZXItdG9nZ2xlLWJ1dHRvbi51bC1yZWNvcmRpbmctaW4tc2Vzc2lvbiAudmpzLWljb24tcGxhY2Vob2xkZXI6YmVmb3JlIHtcbiAgY29udGVudDogdXJsKFwiZGF0YTppbWFnZS9zdmcreG1sLCUzQ3N2ZyB3aWR0aD0nMTInIGhlaWdodD0nMTInIHZpZXdCb3g9JzAgMCAxMiAxMicgZmlsbD0nbm9uZScgeG1sbnM9J2h0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnJyUzRSUzQ3BhdGggZD0nTTEyIDEwTDEyIDJDMTIgMC44OTU0MyAxMS4xMDQ2IC00Ljg1Mzk2ZS0wNyAxMCAtNC4zNzExNGUtMDdMMiAtOC43NDIyOGUtMDhDMC44OTU0MyAtMy45MTQwNWUtMDggLTQuODUzOTZlLTA3IDAuODk1NDMxIC00LjM3MTE0ZS0wNyAyTC04Ljc0MjI4ZS0wOCAxMEMtMy45MTQwNWUtMDggMTEuMTA0NiAwLjg5NTQzMSAxMiAyIDEyTDEwIDEyQzExLjEwNDYgMTIgMTIgMTEuMTA0NiAxMiAxMFonIGZpbGw9JyUyM0QxNTE1MycvJTNFJTNDL3N2ZyUzRSUwQVwiKTtcbiAgcG9zaXRpb246IHJlbGF0aXZlO1xufVxuXG4udWwtcmVjb3JkaW5nLWluLXNlc3Npb24gLnZqcy1pY29uLXBsYWNlaG9sZGVyIHtcbiAgdHJhbnNmb3JtOiB0cmFuc2xhdGUoMTBweCwgMHB4KTtcbiAgLW1vei10cmFuc2Zvcm06IHRyYW5zbGF0ZSgxMXB4LCAtMXB4KTtcbn1cblxuLnVsLXZpZGVvLXJlY29yZGVyLWNhbWVyYS1vZmYtYnV0dG9uIC52anMtaWNvbi1wbGFjZWhvbGRlciB7XG4gIHRyYW5zZm9ybTogdHJhbnNsYXRlKDE4cHgsIDJweCk7XG4gIC1tb3otdHJhbnNmb3JtOiB0cmFuc2xhdGUoMjBweCwgMXB4KTtcbn1cblxuLnVsLXZpZGVvLXJlY29yZGVyLWNhbWVyYS1vZmYtYnV0dG9uLWF1ZGlvLW9ubHkgLnZqcy1pY29uLXBsYWNlaG9sZGVyIHtcbiAgdHJhbnNmb3JtOiBzY2FsZSgwLjc1KSB0cmFuc2xhdGUoMjRweCwgMnB4KTtcbiAgLW1vei10cmFuc2Zvcm06IHNjYWxlKDAuNzUpIHRyYW5zbGF0ZSgyNXB4LCAxcHgpO1xufVxuXG4vKiBmaXggYSBzdWJ0bGUgbWlzYWxpZ25tZW50IGJ1ZyBmb3IgZnVsbCBzY3JlZW4gYnV0dG9ucyAqL1xuLnZqcy1mdWxsc2NyZWVuIC51bC12aWRlby1yZWNvcmRlci1kZWxldGUtYnV0dG9uIC52anMtaWNvbi1wbGFjZWhvbGRlciB7XG4gIHRyYW5zZm9ybTogdHJhbnNsYXRlKDE1cHgsIDJweCk7XG4gIC1tb3otdHJhbnNmb3JtOiB0cmFuc2xhdGUoMTZweCwgMnB4KTtcbn1cblxuLnZqcy1mdWxsc2NyZWVuIC51bC1yZWNvcmRpbmctaW4tc2Vzc2lvbiAudmpzLWljb24tcGxhY2Vob2xkZXIge1xuICB0cmFuc2Zvcm06IHRyYW5zbGF0ZSgxMXB4LCAwcHgpO1xuICAtbW96LXRyYW5zZm9ybTogdHJhbnNsYXRlKDEycHgsIDBweCk7XG59XG5cbi52anMtZnVsbHNjcmVlbiAudWwtdmlkZW8tcmVjb3JkZXItY2FtZXJhLW9mZi1idXR0b24gLnZqcy1pY29uLXBsYWNlaG9sZGVyIHtcbiAgdHJhbnNmb3JtOiB0cmFuc2xhdGUoMThweCwgM3B4KTtcbiAgLW1vei10cmFuc2Zvcm06IHRyYW5zbGF0ZSgxOXB4LCAycHgpO1xufVxuXG4udmpzLWZ1bGxzY3JlZW4gLnVsLXZpZGVvLXJlY29yZGVyLWNhbWVyYS1vZmYtYnV0dG9uLWF1ZGlvLW9ubHkgLnZqcy1pY29uLXBsYWNlaG9sZGVyIHtcbiAgdHJhbnNmb3JtOiBzY2FsZSgwLjc1KSB0cmFuc2xhdGUoMjVweCwgMnB4KTtcbn1cblxuLnVsLXZpZGVvLXJlY29yZGVyLWNhbWVyYS1vZmYtYnV0dG9uIC52anMtaWNvbi1wbGFjZWhvbGRlcjpiZWZvcmUge1xuICBjb250ZW50OiB1cmwoXCJkYXRhOmltYWdlL3N2Zyt4bWwsJTNDc3ZnIHdpZHRoPScxNicgaGVpZ2h0PScxNicgdmlld0JveD0nMCAwIDE2IDE2JyBmaWxsPSdub25lJyB4bWxucz0naHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmcnJTNFJTNDZyBjbGlwLXBhdGg9J3VybCglMjNjbGlwMF8yNjQ1XzQ2NTQpJyUzRSUzQ3BhdGggZD0nTTE1LjE0OTEgNC43NUwxMC41OTkxIDhMMTUuMTQ5MSAxMS4yNVY0Ljc1Wicgc3Ryb2tlPSdibGFjaycgc3Ryb2tlLXdpZHRoPScxLjUnIHN0cm9rZS1saW5lY2FwPSdyb3VuZCcgc3Ryb2tlLWxpbmVqb2luPSdyb3VuZCcvJTNFJTNDcGF0aCBkPSdNOS4yOTkxMiAzLjQ1MDJIMi4xNDkxMkMxLjQzMTE1IDMuNDUwMiAwLjg0OTEyMSA0LjAzMjIzIDAuODQ5MTIxIDQuNzUwMlYxMS4yNTAyQzAuODQ5MTIxIDExLjk2ODIgMS40MzExNSAxMi41NTAyIDIuMTQ5MTIgMTIuNTUwMkg5LjI5OTEyQzEwLjAxNzEgMTIuNTUwMiAxMC41OTkxIDExLjk2ODIgMTAuNTk5MSAxMS4yNTAyVjQuNzUwMkMxMC41OTkxIDQuMDMyMjMgMTAuMDE3MSAzLjQ1MDIgOS4yOTkxMiAzLjQ1MDJaJyBzdHJva2U9J2JsYWNrJyBzdHJva2Utd2lkdGg9JzEuNScgc3Ryb2tlLWxpbmVjYXA9J3JvdW5kJyBzdHJva2UtbGluZWpvaW49J3JvdW5kJy8lM0UlM0MvZyUzRSUzQ2RlZnMlM0UlM0NjbGlwUGF0aCBpZD0nY2xpcDBfMjY0NV80NjU0JyUzRSUzQ3JlY3Qgd2lkdGg9JzE1LjYnIGhlaWdodD0nMTUuNicgZmlsbD0nd2hpdGUnIHRyYW5zZm9ybT0ndHJhbnNsYXRlKDAuMTk5OTUxIDAuMjAwMTk1KScvJTNFJTNDL2NsaXBQYXRoJTNFJTNDL2RlZnMlM0UlM0Mvc3ZnJTNFXCIpO1xuICBwb3NpdGlvbjogcmVsYXRpdmU7XG59XG5cbi51bC12aWRlby1yZWNvcmRlci1jYW1lcmEtb2ZmLWJ1dHRvbi1hdWRpby1vbmx5IC52anMtaWNvbi1wbGFjZWhvbGRlcjpiZWZvcmUge1xuICBjb250ZW50OiB1cmwoXCJkYXRhOmltYWdlL3N2Zyt4bWwsJTNDc3ZnIHdpZHRoPScyMicgaGVpZ2h0PScxNScgZmlsbD0nbm9uZScgeG1sbnM9J2h0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnJyUzRSUzQ3BhdGggZmlsbC1ydWxlPSdldmVub2RkJyBjbGlwLXJ1bGU9J2V2ZW5vZGQnIGQ9J00uNzUgM0EyLjc1IDIuNzUgMCAwMTMuNS4yNWg5LjA4MUEyLjc1IDIuNzUgMCAwMTE1LjMzMSAzdjlhMi43NSAyLjc1IDAgMDEtMi43NSAyLjc1SDMuNUEyLjc1IDIuNzUgMCAwMS43NSAxMlYzek0zLjUgMS43NWMtLjY5IDAtMS4yNS41Ni0xLjI1IDEuMjV2OWMwIC42OS41NiAxLjI1IDEuMjUgMS4yNWg5LjA4MWMuNjkgMCAxLjI1LS41NiAxLjI1LTEuMjVWM2MwLS42OS0uNTYtMS4yNS0xLjI1LTEuMjVIMy41eicgZmlsbD0nJTIzMjYyMTM2Jy8lM0UlM0NwYXRoIGZpbGwtcnVsZT0nZXZlbm9kZCcgY2xpcC1ydWxlPSdldmVub2RkJyBkPSdNMTQuNTMgMi4wM2wtMTIgMTItMS4wNi0xLjA2IDEyLTEyIDEuMDYgMS4wNnpNMjAuODcgMS41MjVhLjc1Ljc1IDAgMDEuMzguNjUydjEwLjU4OGEuNzUuNzUgMCAwMS0xLjEzNC42NDRsLTUuOTItMy41M2EuNzUuNzUgMCAwMS0uMzY1LS42NDN2LTMuNTNhLjc1Ljc1IDAgMDEuMzY2LS42NDRsNS45MTktMy41M2EuNzUuNzUgMCAwMS43NTQtLjAwN3ptLTUuNTM5IDQuNjA3VjguODFsNC40MTkgMi42MzVWMy40OTdsLTQuNDE5IDIuNjM1eicgZmlsbD0nJTIzMjYyMTM2Jy8lM0UlM0Mvc3ZnJTNFXCIpO1xuICBwb3NpdGlvbjogcmVsYXRpdmU7XG59XG5cbi51bC11cGxvYWQtcHJvZ3Jlc3MtbGFiZWwge1xuICBwYWRkaW5nOiAwLjE1ZW0gMC43NWVtO1xuICBhbGlnbi1pdGVtczogY2VudGVyO1xuICBmb250LXNpemU6IDEycHg7XG4gIGNvbG9yOiAjMzMzO1xuICBiYWNrZ3JvdW5kOiAjRkNGQ0ZEO1xuICBib3JkZXItcmFkaXVzOiA5OXB4O1xuICB0ZXh0LWFsaWduOiBjZW50ZXI7XG4gIGJvcmRlcjogMXB4IHNvbGlkICNFMEUwRUI7XG4gIGRpc3BsYXk6IGZsZXg7XG4gIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gIGp1c3RpZnktY29udGVudDogY2VudGVyO1xuICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gIGJvdHRvbTogNzVweDtcbiAgbGVmdDogY2FsYyg1MCUgLSA2NXB4KTtcbiAgd2lkdGg6IDEzMHB4O1xuICB6LWluZGV4OiA1O1xufVxuXG4udWwtdXBsb2FkLXByb2dyZXNzLWxhYmVsX190aW1lIHtcbiAgZGlzcGxheTogaW5saW5lLWZsZXg7XG4gIG1hcmdpbi1sZWZ0OiAwLjhlbTtcbiAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbn1cblxuLnVsLXVwbG9hZC1wcm9ncmVzcy1sYWJlbF9fdGltZTpiZWZvcmUge1xuICBjb250ZW50OiBcIlwiO1xuICBkaXNwbGF5OiBpbmxpbmUtZmxleDtcbiAgd2lkdGg6IDFweDtcbiAgaGVpZ2h0OiAxMnB4O1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAjRTBFMEVCO1xuICBtYXJnaW4tcmlnaHQ6IDAuOGVtO1xufVxuXG5Aa2V5ZnJhbWVzIGdyb3cge1xuICAwJSB7XG4gICAgdHJhbnNmb3JtOiBzY2FsZSgxKTtcbiAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjRUVFQ0ZDO1xuICB9XG4gIDUwJSAge1xuICAgIHRyYW5zZm9ybTogc2NhbGUoMS4yKTtcbiAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjRTFERkY0O1xuICB9XG4gIDEwMCUge1xuICAgIHRyYW5zZm9ybTogc2NhbGUoMSk7XG4gICAgYmFja2dyb3VuZC1jb2xvcjogI0VFRUNGQztcbiAgfVxufVxuXG4udWwtYXVkaW8tcmVjb3JkZXItcGxhY2Vob2xkZXI6YmVmb3JlIHtcbiAgd2lkdGg6IDgwcHg7XG4gIGhlaWdodDogODBweDtcbiAgYm9yZGVyLXJhZGl1czogMTIwcHg7XG4gIGJhY2tncm91bmQtY29sb3I6ICNFRUVDRkM7XG4gIGNvbnRlbnQ6IFwiXCI7XG4gIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgbGVmdDogY2FsYyg1MCUgLSA0MHB4KTtcbiAgdG9wOiBjYWxjKDUwJSAtIDQwcHgpO1xuICBhbmltYXRpb246IDZzIGluZmluaXRlIGdyb3c7XG4gIHRyYW5zZm9ybS1vcmlnaW46IDUwJSA2MCU7XG59XG5cbi51bC1hdWRpby1yZWNvcmRlci1wbGFjZWhvbGRlcjphZnRlciB7XG4gIGNvbnRlbnQ6IHVybChcImRhdGE6aW1hZ2Uvc3ZnK3htbCwlM0Nzdmcgd2lkdGg9Jzk4JyBoZWlnaHQ9Jzk4JyBmaWxsPSdub25lJyB4bWxucz0naHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmcnJTNFJTNDbWFzayBpZD0nYScgbWFza1VuaXRzPSd1c2VyU3BhY2VPblVzZScgeD0nMCcgeT0nMCcgd2lkdGg9Jzk4JyBoZWlnaHQ9Jzk4JyUzRSUzQ2NpcmNsZSBjeD0nNDknIGN5PSc0OScgcj0nNDknIGZpbGw9JyUyM0VERUNGOCcvJTNFJTNDL21hc2slM0UlM0NnIG1hc2s9J3VybCglMjNhKSclM0UlM0NjaXJjbGUgY3g9JzQ5JyBjeT0nNDknIHI9JzUwJyBmaWxsPSclMjM2NDVDQzInLyUzRSUzQ3BhdGggZmlsbC1ydWxlPSdldmVub2RkJyBjbGlwLXJ1bGU9J2V2ZW5vZGQnIGQ9J00xMS40MjIgODEuODEyYzUuNDA1LTE1LjU0NyAyMC4xODctMjYuNzA2IDM3LjU3Ni0yNi43MDYgMTcuMzkgMCAzMi4xNzIgMTEuMTU5IDM3LjU3NyAyNi43MDctOS4xNjQgMTAuNDMtMjIuNjAxIDE3LjAxMy0zNy41NzYgMTcuMDEzLTE0Ljk3NiAwLTI4LjQxNC02LjU4My0zNy41NzctMTcuMDE0eicgZmlsbD0nJTIzZmZmJyBmaWxsLW9wYWNpdHk9Jy42Jy8lM0UlM0NjaXJjbGUgY3g9JzQ5JyBjeT0nMjknIHI9JzE3JyBmaWxsPSclMjNmZmYnIGZpbGwtb3BhY2l0eT0nLjcnLyUzRSUzQy9nJTNFJTNDL3N2ZyUzRVwiKTtcbiAgcG9zaXRpb246IGFic29sdXRlO1xuICBsZWZ0OiA1MCU7XG4gIHRvcDogNTAlO1xuICB0cmFuc2Zvcm06IHRyYW5zbGF0ZSgtNTAlLCAtNTAlKTtcbiAgdHJhbnNmb3JtOiB0cmFuc2xhdGUoLTUwJSwgLTUwJSkgc2NhbGUoMC42KTtcbn1cblxuLnVsLWF1ZGlvLXJlY29yZGVyLXBsYWNlaG9sZGVyIHtcbiAgbWluLWhlaWdodDogMTUwcHg7XG4gIHdpZHRoOiAxMDAlO1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAjZmNmY2ZkO1xuICBkaXNwbGF5OiBibG9jaztcbiAgcG9zaXRpb246IHJlbGF0aXZlO1xufVxuXG4udmpzLWZ1bGxzY3JlZW4gLnVsLWF1ZGlvLXJlY29yZGVyLXBsYWNlaG9sZGVyIHtcbiAgLyogaGVpZ2h0OiAtbW96LWF2YWlsYWJsZTtcbiAgaGVpZ2h0OiAtd2Via2l0LWZpbGwtYXZhaWxhYmxlO1xuICBoZWlnaHQ6IGZpbGwtYXZhaWxhYmxlOyAqL1xuXG4gIHZlcnRpY2FsLWFsaWduOiBtaWRkbGU7XG4gIGRpc3BsYXk6IHRhYmxlLWNlbGw7XG59XG5cbkBrZXlmcmFtZXMgZ3JvdyB7XG4gIDAlIHtcbiAgICB0cmFuc2Zvcm06IHNjYWxlKDEpO1xuICAgIGJhY2tncm91bmQtY29sb3I6ICNFRUVDRkM7XG4gIH1cbiAgNTAlICB7XG4gICAgdHJhbnNmb3JtOiBzY2FsZSgxLjIpO1xuICAgIGJhY2tncm91bmQtY29sb3I6ICNFMURGRjQ7XG4gIH1cbiAgMTAwJSB7XG4gICAgdHJhbnNmb3JtOiBzY2FsZSgxKTtcbiAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjRUVFQ0ZDO1xuICB9XG59XG5cbi52anMtZnVsbHNjcmVlbiAudWwtY29udHJvbC1wYW5lbCB7XG4gIGhlaWdodDogODBweDtcbiAgcG9zaXRpb246IGFic29sdXRlO1xuICBib3R0b206IDA7XG4gIGxlZnQ6IDA7XG4gIHdpZHRoOiAxMDAlO1xuICBtYXgtd2lkdGg6IDEwMCU7XG4gIGJhY2tncm91bmQtY29sb3I6ICNGOEY4Rjg7XG59XG5cbi51bC1idXR0b25zLXBhbmVsIHtcbiAgbWFyZ2luOiAxMHB4O1xuICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjtcbn1cblxuLnZqcy1wbGF5YmFjay1yYXRlIC52anMtcGxheWJhY2stcmF0ZS12YWx1ZSB7XG4gIGZvbnQtc2l6ZTogMTJweDtcbiAgdHJhbnNmb3JtOiB0cmFuc2xhdGUoMCwgM3B4KTtcbn1cblxuLnZqcy1wbGF5YmFjay1yYXRlIC52anMtbWVudSB7XG4gIHRyYW5zZm9ybTogdHJhbnNsYXRlKC02cHgsIDEycHgpO1xuICBwb3NpdGlvbjogdW5zZXQ7XG59XG5cbi52anMtbWVudS1idXR0b24tcG9wdXAgLnZqcy1tZW51IC52anMtbWVudS1jb250ZW50IHtcbiAgYmFja2dyb3VuZC1jb2xvcjogd2hpdGU7XG4gIGJvcmRlcjogMXB4IHNvbGlkIHJnYmEoMCwgMCwgMCwgMC4xKTtcbiAgYm94LXNpemluZzogYm9yZGVyLWJveDtcbiAgYm9yZGVyLXJhZGl1czogNHB4O1xufVxuXG4udmpzLW1lbnUtYnV0dG9uLXBvcHVwIC52anMtbWVudSB7XG4gIG1hcmdpbi1ib3R0b206IHVuc2V0O1xufVxuXG4udmpzLW1lbnUgbGkge1xuICBmb250LXNpemU6IDEycHg7XG4gIHBhZGRpbmc6IDVweCAwO1xufVxuXG4udmpzLW1lbnUgbGkudmpzLXNlbGVjdGVkIHtcbiAgY29sb3I6IGxpZ2h0Z3JheTtcbn1cblxuLnZqcy1tZW51IGxpLnZqcy1tZW51LWl0ZW06aG92ZXIge1xuICBiYWNrZ3JvdW5kLWNvbG9yOiByZ2JhKDAsIDAsIDAsIDAuMDUpO1xufVxuXG4udmpzLWZ1bGxzY3JlZW4gLnVsLWJ1dHRvbnMtcGFuZWwge1xuICB0b3A6IGNhbGMoNTAlIC0gMzBweCk7XG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcbn1cblxuLnZqcy1yZWNvcmQudmlkZW8tanMgZGl2LnZqcy1jb250cm9sLnZqcy1yZWNvcmQtaW5kaWNhdG9yIHtcbiAgcGFkZGluZzogMC4zZW0gMC43NWVtIDAuMTVlbSAxNXB4O1xuICBhbGlnbi1pdGVtczogY2VudGVyO1xuICBmb250LXNpemU6IDEycHg7XG4gIGNvbG9yOiAjMzMzO1xuICBiYWNrZ3JvdW5kOiAjRkNGQ0ZEO1xuICBib3JkZXItcmFkaXVzOiA5OXB4O1xuICB0ZXh0LWFsaWduOiBjZW50ZXI7XG4gIGJvcmRlcjogMXB4IHNvbGlkICNFMEUwRUI7XG4gIGRpc3BsYXk6IGZsZXg7XG4gIGp1c3RpZnktY29udGVudDogY2VudGVyO1xuICBhbGlnbi1pdGVtczogY2VudGVyO1xuICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gIGJvdHRvbTogNzVweDtcbiAgdG9wOiBhdXRvO1xuICBsZWZ0OiBjYWxjKDUwJSAtIDIxcHgpO1xuICB3aWR0aDogNDNweDtcbiAgaGVpZ2h0OiAxNnB4O1xuICB6LWluZGV4OiA0O1xufVxuXG4udmpzLXJlY29yZC52aWRlby1qcyBkaXYudmpzLWNvbnRyb2wudmpzLXJlY29yZC1pbmRpY2F0b3I6YWZ0ZXIge1xuICBjb250ZW50OiBcIlwiO1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAjRUI1NzU3O1xuICB3aWR0aDogNnB4O1xuICBoZWlnaHQ6IDZweDtcbiAgYm9yZGVyLXJhZGl1czogOHB4O1xuICBhbmltYXRpb246IG5vbmU7XG4gIHRvcDogNHB4O1xuICBsZWZ0OiA1cHg7XG59XG5cbi52anMtcmVjb3JkLnZpZGVvLWpzIGRpdi52anMtY29udHJvbC52anMtcmVjb3JkLWluZGljYXRvcjpiZWZvcmUge1xuICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gIGZvbnQtc2l6ZTogOXB4O1xuICBhbmltYXRpb246IG5vbmU7XG4gIG9wYWNpdHk6IDE7XG4gIGNvbG9yOiAjMzMzO1xuICB0b3A6IGF1dG87XG4gIGxlZnQ6IGF1dG87XG59XG5cbi52anMtZnVsbHNjcmVlbiBkaXYudmpzLWNvbnRyb2wudmpzLXJlY29yZC1pbmRpY2F0b3Ige1xuICBib3R0b206IDkwcHg7XG59XG5cbi51bC12aWRlby1wbGF5ZXItbG9hZGluZyB7XG4gIGRpc3BsYXk6IGlubGluZS1ibG9jaztcbiAgcG9zaXRpb246IHJlbGF0aXZlO1xuICB3aWR0aDogNnJlbTtcbiAgaGVpZ2h0OiA2cmVtO1xuXG59XG4udWwtdmlkZW8tcGxheWVyLWxvYWRpbmcgZGl2IHtcbiAgYm94LXNpemluZzogYm9yZGVyLWJveDtcbiAgcG9zaXRpb246IGFic29sdXRlO1xuICBkaXNwbGF5OiBibG9jaztcbiAgd2lkdGg6IDgwJTtcbiAgaGVpZ2h0OiA4MCU7XG4gIG1hcmdpbjogNXB4O1xuICBib3JkZXI6IDVweCBzb2xpZCAjNjY2O1xuICBib3JkZXItcmFkaXVzOiA1MCU7XG4gIGFuaW1hdGlvbjogbGRzLXJpbmcgMS4ycyBjdWJpYy1iZXppZXIoMC41LCAwLCAwLjUsIDEpIGluZmluaXRlO1xuICBib3JkZXItY29sb3I6ICM2NjYgdHJhbnNwYXJlbnQgdHJhbnNwYXJlbnQgdHJhbnNwYXJlbnQ7XG59XG5cbi5maXJzdCB7XG4gIGFuaW1hdGlvbi1kZWxheTogLTAuNDVzO1xufVxuLnNlY29uZCB7XG4gIGFuaW1hdGlvbi1kZWxheTogLTAuM3M7XG59XG4udGhpcmQge1xuICBhbmltYXRpb24tZGVsYXk6IC0wLjE1cztcbn1cblxuQGtleWZyYW1lcyBsZHMtcmluZyB7XG4gIDAlIHtcbiAgICB0cmFuc2Zvcm06IHJvdGF0ZSgwZGVnKTtcbiAgfVxuICAxMDAlIHtcbiAgICB0cmFuc2Zvcm06IHJvdGF0ZSgzNjBkZWcpO1xuICB9XG59XG5cbi51bC12aWRlby1idG4ge1xuICB3aWR0aDogMTAwJTtcbiAgYm9yZGVyOiAxcHggc29saWQgI0U2RTZFNjtcbiAgYm9yZGVyLXJhZGl1czogNHB4O1xuICBiYWNrZ3JvdW5kLWNvbG9yOiByZ2JhKDAsIDAsIDAsIDAuMDIpO1xuICBwYWRkaW5nOiA4cHg7XG4gIGZvbnQtd2VpZ2h0OiA1MDA7XG4gIGZvbnQtc2l6ZTogMTVweDtcbn1cblxuLnVsLXJlY29yZC1yZXNwb25zZS1idG46YmVmb3JlLCAudWwtcmVjb3JkLXJlc3BvbnNlLWJ0bjphZnRlciwgLnVsLWJhY2stcXVlc3Rpb24tYnRuOmJlZm9yZSwgLnVsLWJhY2stcXVlc3Rpb24tYnRuOmFmdGVyIHtcbiAgbWFyZ2luOiAwIDVweDtcbiAgdmVydGljYWwtYWxpZ246IG1pZGRsZTtcbn1cblxuLnVsLXJlY29yZC1yZXNwb25zZS1idG46YmVmb3JlIHtcbiAgY29udGVudDogdXJsKFwiZGF0YTppbWFnZS9zdmcreG1sLCUzQ3N2ZyB3aWR0aD0nMTYnIGhlaWdodD0nMTYnIHZpZXdCb3g9JzAgMCAxNiAxNicgZmlsbD0nbm9uZScgeG1sbnM9J2h0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnJyUzRSUzQ2cgY2xpcC1wYXRoPSd1cmwoJTIzY2xpcDBfMjY0NV80NjU0KSclM0UlM0NwYXRoIGQ9J00xNS4xNDkxIDQuNzVMMTAuNTk5MSA4TDE1LjE0OTEgMTEuMjVWNC43NVonIHN0cm9rZT0nYmxhY2snIHN0cm9rZS13aWR0aD0nMS41JyBzdHJva2UtbGluZWNhcD0ncm91bmQnIHN0cm9rZS1saW5lam9pbj0ncm91bmQnLyUzRSUzQ3BhdGggZD0nTTkuMjk5MTIgMy40NTAySDIuMTQ5MTJDMS40MzExNSAzLjQ1MDIgMC44NDkxMjEgNC4wMzIyMyAwLjg0OTEyMSA0Ljc1MDJWMTEuMjUwMkMwLjg0OTEyMSAxMS45NjgyIDEuNDMxMTUgMTIuNTUwMiAyLjE0OTEyIDEyLjU1MDJIOS4yOTkxMkMxMC4wMTcxIDEyLjU1MDIgMTAuNTk5MSAxMS45NjgyIDEwLjU5OTEgMTEuMjUwMlY0Ljc1MDJDMTAuNTk5MSA0LjAzMjIzIDEwLjAxNzEgMy40NTAyIDkuMjk5MTIgMy40NTAyWicgc3Ryb2tlPSdibGFjaycgc3Ryb2tlLXdpZHRoPScxLjUnIHN0cm9rZS1saW5lY2FwPSdyb3VuZCcgc3Ryb2tlLWxpbmVqb2luPSdyb3VuZCcvJTNFJTNDL2clM0UlM0NkZWZzJTNFJTNDY2xpcFBhdGggaWQ9J2NsaXAwXzI2NDVfNDY1NCclM0UlM0NyZWN0IHdpZHRoPScxNS42JyBoZWlnaHQ9JzE1LjYnIGZpbGw9J3doaXRlJyB0cmFuc2Zvcm09J3RyYW5zbGF0ZSgwLjE5OTk1MSAwLjIwMDE5NSknLyUzRSUzQy9jbGlwUGF0aCUzRSUzQy9kZWZzJTNFJTNDL3N2ZyUzRVwiKTtcbiAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xuICB0cmFuc2Zvcm06IHRyYW5zbGF0ZSgwcHgsIDJweCk7XG59XG5cbi51bC1yZWNvcmQtcmVzcG9uc2UtYnRuOmFmdGVyIHtcbiAgY29udGVudDogJ1JlY29yZCB5b3VyIFJlc3BvbnNlJztcbn1cblxuLnVsLWJhY2stcXVlc3Rpb24tYnRuOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IHVybChcImRhdGE6aW1hZ2Uvc3ZnK3htbCwlM0Nzdmcgd2lkdGg9JzE1JyBoZWlnaHQ9JzE2JyB2aWV3Qm94PScwIDAgMTUgMTYnIGZpbGw9J25vbmUnIHhtbG5zPSdodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyclM0UlM0NwYXRoIGQ9J00xMy44NzU3IDguMjIzNjFMMS4xMTE4IDE0LjYwNTZDMC45NDU1NzggMTQuNjg4NyAwLjc1IDE0LjU2NzggMC43NSAxNC4zODJWMS42MTgwM0MwLjc1IDEuNDMyMTkgMC45NDU1NzkgMS4zMTEzMSAxLjExMTggMS4zOTQ0M0wxMy44NzU3IDcuNzc2MzlDMTQuMDYgNy44Njg1MiAxNC4wNiA4LjEzMTQ4IDEzLjg3NTcgOC4yMjM2MVonIHN0cm9rZT0nYmxhY2snIHN0cm9rZS13aWR0aD0nMS41JyBzdHJva2UtbGluZWNhcD0ncm91bmQnLyUzRSUzQy9zdmclM0VcIik7XG4gIGRpc3BsYXk6IGlubGluZS1ibG9jaztcbiAgdHJhbnNmb3JtOiBzY2FsZSgwLjg1KSB0cmFuc2xhdGUoMCwgMXB4KTtcbiAgLW1vei10cmFuc2Zvcm06IHNjYWxlKDAuODUpIHRyYW5zbGF0ZSgwLCAycHgpO1xufVxuXG4udWwtYmFjay1xdWVzdGlvbi1idG46YWZ0ZXIge1xuICBjb250ZW50OiAnQmFjayB0byBRdWVzdGlvbic7XG59XG5cbi5oaWRkZW4ge1xuICBkaXNwbGF5OiBub25lICFpbXBvcnRhbnQ7XG4gIG9wYWNpdHk6IDA7XG4gIHZpc2liaWxpdHk6IGhpZGRlbjtcbn1cblxuLnZpc2libGUge1xuICB2aXNpYmlsaXR5OiB2aXNpYmxlO1xuICBvcGFjaXR5OiAxO1xuICBhbmltYXRpb246IGZhZGUgMC4zcztcbn1cblxuQGtleWZyYW1lcyBmYWRlIHtcbiAgMCUge1xuICAgICAgb3BhY2l0eTogMDtcbiAgfVxuXG4gIDEwMCUge1xuICAgICAgb3BhY2l0eTogMTtcbiAgfVxufVxuXG4jdWwtcmVjb3JkaW5nLWNvdW50ZG93bi1zY3JlZW4ge1xuICB3aWR0aDogMTAwJTtcbiAgaGVpZ2h0OiAxMDAlO1xuICBjb2xvcjogYmxhY2s7XG4gIGJhY2tncm91bmQtY29sb3I6IHJnYmEoMjU1LCAyNTUsIDI1NSwgMC44KTtcbiAgcG9zaXRpb246IGFic29sdXRlO1xuICB0ZXh0LWFsaWduOiBjZW50ZXI7XG4gIGZvbnQtc2l6ZTogMTVweDtcbiAgei1pbmRleDogMTtcbiAgZGlzcGxheTogdGFibGU7XG59XG5cbi51bC1jb3VudGRvd24tdGV4dCB7XG4gIHZlcnRpY2FsLWFsaWduOiBtaWRkbGU7XG4gIGRpc3BsYXk6IHRhYmxlLWNlbGw7XG4gIHRyYW5zZm9ybTogdHJhbnNsYXRlKDAsIC0yNXB4KTtcbn1cblxuLnZqcy1mdWxsc2NyZWVuID4gI3VsLXJlY29yZGluZy1jb3VudGRvd24tc2NyZWVuIHtcbiAgZm9udC1zaXplOiAyNXB4O1xuICB0cmFuc2Zvcm06IHVuc2V0O1xufVxuXG4vKiBTYWZhcmkgb25seSBjc3MgKi9cbl86Oi13ZWJraXQtZnVsbC1wYWdlLW1lZGlhLCBfOmZ1dHVyZSwgOnJvb3QgI3VsLXJlY29yZGluZy1jb3VudGRvd24tc2NyZWVuIHtcbiAgaGVpZ2h0OiAyNTBweDtcbiB9XG5cbl86Oi13ZWJraXQtZnVsbC1wYWdlLW1lZGlhLCBfOmZ1dHVyZSwgOnJvb3QgLnVsLXZpZGVvLXJlY29yZGVyLWNhbWVyYS1vZmYtYnV0dG9uIC52anMtaWNvbi1wbGFjZWhvbGRlciB7XG4gIHRyYW5zZm9ybTogdHJhbnNsYXRlKDE5cHgsIDJweCk7XG59XG5cbl86Oi13ZWJraXQtZnVsbC1wYWdlLW1lZGlhLCBfOmZ1dHVyZSwgOnJvb3QgLnVsLXZpZGVvLXJlY29yZGVyLXRvZ2dsZS1idXR0b24gLnZqcy1pY29uLXBsYWNlaG9sZGVyIHtcbiAgdHJhbnNmb3JtOiB0cmFuc2xhdGUoMTdweCwgMnB4KTtcbn1cblxuXzo6LXdlYmtpdC1mdWxsLXBhZ2UtbWVkaWEsIF86ZnV0dXJlLCA6cm9vdCAudWwtcmVjb3JkaW5nLWluLXNlc3Npb24gLnZqcy1pY29uLXBsYWNlaG9sZGVyIHtcbiAgdHJhbnNmb3JtOiB0cmFuc2xhdGUoMTFweCwgMHB4KTtcbn1cblxuXzo6LXdlYmtpdC1mdWxsLXBhZ2UtbWVkaWEsIF86ZnV0dXJlLCA6cm9vdCAudWwtdmlkZW8tcmVjb3JkZXItZGVsZXRlLWJ1dHRvbiAudmpzLWljb24tcGxhY2Vob2xkZXIge1xuICB0cmFuc2Zvcm06IHRyYW5zbGF0ZSgxNXB4LCAycHgpO1xufVxuIn1dLFl0PSItdmlkZW8tcGxheWVyIiwkdD0iLXZpZGVvLXJlY29yZGVyIjtsZXQgS3QsSnQ7Y29uc3QgWHQ9YXN5bmModCxlLG4scixvLGkpPT57Y29uc3QgYT1kb2N1bWVudC5kb2N1bWVudEVsZW1lbnQsYz17c2NyZWVuV2lkdGg6d2luZG93LnNjcmVlbi53aWR0aCxzY3JlZW5IZWlnaHQ6d2luZG93LnNjcmVlbi5oZWlnaHQsY2xpZW50V2lkdGg6YS5jbGllbnRXaWR0aCxjbGllbnRIZWlnaHQ6YS5jbGllbnRIZWlnaHQsbG9jYXRpb246d2luZG93LmxvY2F0aW9uLmhyZWYsbGFuZ3VhZ2U6bmF2aWdhdG9yLmxhbmd1YWdlfSxzPXthY3Rpb246ZSxlcnI6e21lc3NhZ2U6dC5tZXNzYWdlLHN0YWNrOnQuc3RhY2t9LG1ldGE6Yyx2aWQ6byxlbnZJZDppfTsoYXdhaXQgZmV0Y2goYCR7bn0vc2RrLzEvZXJyb3JzYCx7bWV0aG9kOiJQT1NUIixjYWNoZToibm8tY2FjaGUiLGhlYWRlcnM6ey4uLnIsInVzZXJsZWFwLXBsYXRmb3JtIjoidmlkZW9fcmVjb3JkZXIiLCJ4LXVsLWVycm9yIjp3aW5kb3cuYnRvYShgdXNlcmxlYXAtJHtEYXRlLm5vdygpfS1lcnJvcmApfSxib2R5OkpTT04uc3RyaW5naWZ5KHMpfSkpLm9rfHxjb25zb2xlLndhcm4oIltVc2VyTGVhcF0gKEVSUi00NDQpIEZhaWxlZCB0byByZXBvcnQgZXJyb3IgdG8gQVBJIix0KX0sUXQ9KHQsZSxuKT0+e2lmKDA9PT1lLmxlbmd0aClyZXR1cm4gbiYmbigpO1Byb21pc2UuYWxsKGUucmVkdWNlKCgoZSxuKT0+KGUucHVzaCgoKHQse3R5cGU6ZSxjb250ZW50Om59KT0+bmV3IFByb21pc2UoKGZ1bmN0aW9uKHIsbyl7bGV0IGk7InNjcmlwdCI9PT1lPyhpPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInNjcmlwdCIpLGkuc3JjPW4pOiJsaW5rIj09PWU/KGk9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgibGluayIpLGkucmVsPSJzdHlsZXNoZWV0IixpLmhyZWY9bixpLnR5cGU9InRleHQvY3NzIik6KGk9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgic3R5bGUiKSxpLmlubmVySFRNTD1uKSxpLm9ubG9hZD1mdW5jdGlvbigpe3Iobil9LGkub25lcnJvcj1mdW5jdGlvbigpe28obil9LGkuYXN5bmM9ITEsaS5pZD1idG9hKG4pLHQuYXBwZW5kQ2hpbGQoaSl9KSkpKHQsbikpLGUpKSxbXSkpLnRoZW4oKCgpPT57biYmbigpfSkpLmNhdGNoKChmdW5jdGlvbih0KXtjb25zb2xlLmxvZyh0KyIgZmFpbGVkIHRvIGxvYWQiKX0pKX0sdGU9KHQsZSxuKT0+e2lmKCJzdGFydCI9PT1lJiYodC5zdHlsZS52aXNpYmlsaXR5PSJ2aXNpYmxlIiksIm5vbmUiPT09ZSl0LnN0eWxlLnZpc2liaWxpdHk9enQ7ZWxzZSBpZigic3VjY2VzcyI9PT1lKXQuc3R5bGUudmlzaWJpbGl0eT16dCx0LmlubmVySFRNTD0iVXBsb2FkIHN1Y2NlZWRlZCEiO2Vsc2V7Y29uc3QgZT1NYXRoLnJvdW5kKHBhcnNlRmxvYXQobikpO3QuaW5uZXJIVE1MPWBVcGxvYWRpbmcgPHNwYW4gY2xhc3M9InVsLXVwbG9hZC1wcm9ncmVzcy1sYWJlbF9fdGltZSI+JHtlfSU8L3NwYW4+YCx0LnN0eWxlLmJhY2tncm91bmQ9YGxpbmVhci1ncmFkaWVudCh0byByaWdodCwgI0UwRTBFQiAwJSwgI0UwRTBFQiAke2V9JSwgI0ZDRkNGRCAke2V9JSwgI0ZDRkNGRCAxMDAlKWB9fSxlZT0odCxlKT0+e2NvbnN0IG49bmV3KHdpbmRvdy52aWRlb2pzLmdldENvbXBvbmVudCgiQ29tcG9uZW50IikpKHQpO3JldHVybiBuLmFkZENsYXNzKCJ1bC1idXR0b25zLXBhbmVsIiksZS5tYXAoKHQ9PntuLmFkZENoaWxkKHQpfSkpLG5lKG4pLG59LG5lPXQ9Pnt0LmNoaWxkcmVuKCkuZm9yRWFjaCgodD0+e2lmKGhlW3QubmFtZV9dKXtjb25zdCBlPXJlKGhlW3QubmFtZV9dKTt0LmVsXy5hcHBlbmRDaGlsZChlKX19KSl9LHJlPSh0LGU9IiIpPT57Y29uc3Qgbj1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJzcGFuIik7cmV0dXJuIG4uY2xhc3NOYW1lPSJ1bC1idXR0b24tdGV4dCIsbi5pbm5lckhUTUw9dCxuLmlkPWUsbn0sb2U9KHQsZSxuLHIsbz0hMSk9Pnt0LmFkZENsYXNzKCJ1bC12aWRlby1wbGF5ZXIiKTtjb25zdCBpPW5ldyh3aW5kb3cudmlkZW9qcy5nZXRDb21wb25lbnQoIkNvbXBvbmVudCIpKSh0KTtpLmFkZENsYXNzKCJ1bC1jb250cm9sLXBhbmVsIiksdC5wcm9ncmVzc0Jhcj1pLmFkZENoaWxkKCJQcm9ncmVzc0NvbnRyb2wiKSxuJiZ0LnNyYyhuKSx0LmF1ZGlvUGxheWVyUGxhY2Vob2xkZXI9bmV3KHdpbmRvdy52aWRlb2pzLmdldENvbXBvbmVudCgiQ29tcG9uZW50IikpKHQpLHQuYXVkaW9QbGF5ZXJQbGFjZWhvbGRlci5hZGRDbGFzcygidWwtYXVkaW8tcmVjb3JkZXItcGxhY2Vob2xkZXIiKSxvJiZuP3QuY2hpbGRyZW4oKVswXS5jbGFzc0xpc3QuYWRkKCJ2anMtaGlkZGVuIik6dC5hdWRpb1BsYXllclBsYWNlaG9sZGVyLmhpZGUoKSx0LmFkZENoaWxkKHQuYXVkaW9QbGF5ZXJQbGFjZWhvbGRlcix7fSwxKSxpLmFkZENoaWxkKGUpLHQuYWRkQ2hpbGQoaSksciYmcih0KX0saWU9KHQsZSxuLHIsbyxpLGEsYz0hMSk9PntKdD1EYXRlLm5vdygpO2NvbnN0IHM9d2luZG93LnZpZGVvanMsdT1zKGUse2NvbnRyb2xzOiExLGJpZ1BsYXlCdXR0b246ITEscHJlbG9hZDoiYXV0byIsZmx1aWQ6ITEsd2lkdGg6MTI4MCxoZWlnaHQ6NzIwLHBsYXlzaW5saW5lOiEwLHBsdWdpbnM6e3JlY29yZDp7YXVkaW86ITAsdmlkZW86e21hbmRhdG9yeTp7bWluV2lkdGg6MTI4MCxtaW5IZWlnaHQ6NzIwfX0sZnJhbWVXaWR0aDoxMjgwLGZyYW1lSGVpZ2h0OjcyMCxtYXhMZW5ndGg6NjAwLGF1dG9NdXRlRGV2aWNlOiEwfX19KTt1LnBheWxvYWQ9bjtjb25zdCBsPXQ9Pntjb25zdCBlPVZ0LG49VnQrIi1hdWRpby1vbmx5Ijt0ZSh1LnVwbG9hZFByb2dyZXNzTGFiZWwsIm5vbmUiKSxLdCYmS3Quc3RhcnRUaW1lPj1KdCYmS3QuYWJvcnQoKTtjb25zdCByPWRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJ1bC1jYW1lcmEtYnV0dG9uIik7dD8odS5jaGlsZHJlbigpWzBdLmNsYXNzTGlzdC5hZGQoInZqcy1oaWRkZW4iKSxoLnJlbW92ZUNsYXNzKGUpLGguYWRkQ2xhc3Mobiksci5pbm5lckhUTUw9aGUuVHVybk9uQ2FtZXJhLHUuYXVkaW9QbGF5ZXJQbGFjZWhvbGRlci5yZW1vdmVDbGFzcygidmpzLWhpZGRlbiIpLHdpbmRvdy5uYXZpZ2F0b3IubWVkaWFEZXZpY2VzLmdldFVzZXJNZWRpYSh7dmlkZW86ITAsYXVkaW86ITB9KS50aGVuKCh0PT57dS5yZWNvcmQoKS5vbkRldmljZVJlYWR5KHQpLHQuZ2V0VmlkZW9UcmFja3MoKS5mb3JFYWNoKCh0PT57dC5zdG9wKCl9KSl9KSkuY2F0Y2godS5yZWNvcmQoKS5vbkRldmljZUVycm9yLmJpbmQodS5yZWNvcmQoKSkpKToodS5jaGlsZHJlbigpWzBdLmNsYXNzTGlzdC5yZW1vdmUoInZqcy1oaWRkZW4iKSx1LnJlY29yZCgpLmdldERldmljZSgpLGgucmVtb3ZlQ2xhc3MobiksaC5hZGRDbGFzcyhlKSxyLmlubmVySFRNTD1oZS5UdXJuT2ZmQ2FtZXJhLHUuYXVkaW9QbGF5ZXJQbGFjZWhvbGRlci5hZGRDbGFzcygidmpzLWhpZGRlbiIpKX0sZj1uZXcocy5nZXRDb21wb25lbnQoIkJ1dHRvbiIpKSh1LHtjbGlja0hhbmRsZXI6KCk9PntmLmhhc0NsYXNzKHF0KXx8KGwodS5jYW1lcmFPZmYpLG8ocGUuREVMRVRFLHt9KSxoLnJlbW92ZUNsYXNzKHp0KSxmLmFkZENsYXNzKHp0KSl9fSk7Zi5hZGRDbGFzcygidWwtdmlkZW8tcmVjb3JkZXItZGVsZXRlLWJ1dHRvbiIpLGYuYWRkQ2xhc3MoenQpLGYuZWxfLmFwcGVuZENoaWxkKHJlKGhlLkRlbGV0ZUJ1dHRvbikpO2NvbnN0IGQ9ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoInVsLWNhcmQtdmlkZW9fX3BsYXllcl9yZWNvcmRlci12aWRlby1yZWNvcmRlciIpLHA9KCk9PntkLmNsYXNzTGlzdC5jb250YWlucygidmpzLWZ1bGxzY3JlZW4iKSYmdS5jYW1lcmFPZmY/ZC5zdHlsZS5kaXNwbGF5PSJ0YWJsZSI6ZC5zdHlsZS5kaXNwbGF5PSJmbGV4In07cCgpO2NvbnN0IGg9bmV3KHMuZ2V0Q29tcG9uZW50KCJCdXR0b24iKSkodSx7Y2xpY2tIYW5kbGVyOigpPT57dS5yZWNvcmQoKS5pc1JlY29yZGluZygpfHwodS5jYW1lcmFPZmY9IXUuY2FtZXJhT2ZmLGwodS5jYW1lcmFPZmYpLCFmLmhhc0NsYXNzKHF0KSYmZi5hZGRDbGFzcyhxdCksbyhwZS5ERUxFVEUse30pLHAoKSl9fSk7aC5hZGRDbGFzcyhWdCksaC5lbF8uYXBwZW5kQ2hpbGQocmUoaGUuVHVybk9mZkNhbWVyYSwidWwtY2FtZXJhLWJ1dHRvbiIpKTtjb25zdCB2PW5ldyhzLmdldENvbXBvbmVudCgiQnV0dG9uIikpKHUse2NsaWNrSGFuZGxlcjooKT0+e2NvbnN0IHQ9ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoInVsLXJlY29yZGVyLXRvZ2dsZSIpO2lmKHUucmVjb3JkKCkuaXNSZWNvcmRpbmcoKSl1LnJlY29yZCgpLnN0b3AoKSx0JiYodC5pbm5lckhUTUw9aGUuUmVjb3JkQnV0dG9uKSx2LnJlbW92ZUNsYXNzKFd0KSxmLnJlbW92ZUNsYXNzKHp0KTtlbHNle2NvbnN0IGU9ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoInVsLXJlY29yZGluZy1jb3VudGRvd24tc2NyZWVuIik7aWYoZSllLnJlbW92ZSgpLHQmJih0LmlubmVySFRNTD1oZS5SZWNvcmRCdXR0b24pLGwodS5jYW1lcmFPZmYpLG8ocGUuREVMRVRFLHt9KSxoLnJlbW92ZUNsYXNzKHp0KSxmLmFkZENsYXNzKHp0KSx2LnJlbW92ZUNsYXNzKFd0KSxtLnNob3coKTtlbHNle3YuYWRkQ2xhc3MoV3QpLG0uaGlkZSgpLGguYWRkQ2xhc3MoenQpLGYuYWRkQ2xhc3MoenQpLHQmJih0LmlubmVySFRNTD1oZS5TdG9wQnV0dG9uKTtjb25zdCBlPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpO2UuaWQ9InVsLXJlY29yZGluZy1jb3VudGRvd24tc2NyZWVuIixkLmluc2VydEJlZm9yZShlLGQuY2hpbGRyZW5bMV0pLGUuc3R5bGUuaGVpZ2h0PWAke2Qub2Zmc2V0SGVpZ2h0fXB4YCxhZSh1LDMpfX19fSk7di5hZGRDbGFzcygidWwtdmlkZW8tcmVjb3JkZXItdG9nZ2xlLWJ1dHRvbiIpLHYuZWxfLmFwcGVuZENoaWxkKHJlKGhlLlJlY29yZEJ1dHRvbiwidWwtcmVjb3JkZXItdG9nZ2xlIikpO2NvbnN0IGc9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgicCIpO2cuc3R5bGUudmlzaWJpbGl0eT0iaGlkZGVuIixnLmNsYXNzTmFtZT0idWwtdXBsb2FkLXByb2dyZXNzLWxhYmVsIix0LmFwcGVuZENoaWxkKGcpLHUudXBsb2FkUHJvZ3Jlc3NMYWJlbD1nO2NvbnN0IHk9ZWUodSxbZixoLCJQbGF5VG9nZ2xlIix2LCJGdWxsc2NyZWVuVG9nZ2xlIl0pLG09eS5jaGlsZHJlbigpLmZpbmQoKHQ9PiJGdWxsc2NyZWVuVG9nZ2xlIj09PXQubmFtZV8pKTttLmhhc0NsYXNzKCJ2anMtZGlzYWJsZWQiKSYmbS5oaWRlKCk7Y29uc3QgYj15LmNoaWxkcmVuKCkuZmluZCgodD0+IlBsYXlUb2dnbGUiPT09dC5uYW1lXykpO2lmKGIuaGlkZSgpLGkmJmguYWRkQ2xhc3MoVnQpLG9lKHUseSxpLCExLGMpLHUub24oInN0b3BSZWNvcmQiLCgoKT0+e3YuaGlkZSgpLGIuc2hvdygpLG0uc2hvdygpLGYucmVtb3ZlQ2xhc3MocXQpfSkpLHUub24oImRldmljZVJlYWR5IiwoKCk9Pnt2LnNob3coKSxiLmhpZGUoKSxmLmFkZENsYXNzKHF0KX0pKSwoKHQsZSxuLHIsbyk9Pnt0Lm9uKCJkZXZpY2VFcnJvciIsKGZ1bmN0aW9uKCl7Y29uc29sZS5sb2coImRldmljZSBlcnJvcjoiLHQuZGV2aWNlRXJyb3JDb2RlKSwiUGVybWlzc2lvbiBkZW5pZWQiPT09dC5kZXZpY2VFcnJvckNvZGUubWVzc2FnZT8odC5kZXZpY2VCdXR0b24uYWRkQ2xhc3MoInBlcm1pc3Npb24tZGVuaWVkIiksbiYmbihwZS5FUlJPUix7dHlwZTpwZS5QRVJNSVNTSU9OX0RFTklFRH0pKToobiYmbihwZS5FUlJPUix7dHlwZTpwZS5PVEhFUn0pLFh0KG5ldyBFcnJvcih0LmRldmljZUVycm9yQ29kZS5tZXNzYWdlKSwicmVjb3JkZXJEZXZpY2VFcnJvciIsZSxvLHQucGF5bG9hZC52aXNpdG9ySWQsdC5wYXlsb2FkLmVudklkKSl9KSksdC5vbigiZXJyb3IiLChmdW5jdGlvbihuLHIpe1h0KHJ8fHQuZXJyb3IoKSwicmVjb3JkZXJFcnJvciIsZSxvLHQucGF5bG9hZC52aXNpdG9ySWQsdC5wYXlsb2FkLmVudklkKX0pKSx0Lm9uKCJzdGFydFJlY29yZCIsKGZ1bmN0aW9uKGUsbil7cih0LnVwbG9hZFByb2dyZXNzTGFiZWwsIm5vbmUiKX0pKSx0Lm9uKCJmaW5pc2hSZWNvcmQiLChhc3luYyBmdW5jdGlvbigpe3IodC51cGxvYWRQcm9ncmVzc0xhYmVsLCJzdGFydCIsMCk7Y29uc3R7c3VydmV5SWQ6aSxxdWVzdGlvbklkOmEscmVzcG9uc2VHcm91cFVpZDpjLHZpc2l0b3JJZDpzLGVudklkOnV9PXQucGF5bG9hZDtpZighaSl7Y29uc3QgdD0iaW50ZXJuYWwgZXJyb3I6IG1pc3NpbmcgZmllbGRzIGluIHBheWxvYWQiO3JldHVybiBuJiZuKHBlLkVSUk9SLHt0eXBlOnBlLk9USEVSfSksWHQobmV3IEVycm9yKHQpLCJmaW5pc2hSZWNvcmQiLGUsbyxzLHUpLG51bGx9dC5yZWNvcmQoKS5zdG9wRGV2aWNlKCk7Y29uc3QgbD10LmNhbWVyYU9mZj9wZS5NRURJQV9UWVBFX0FVRElPOnBlLk1FRElBX1RZUEVfVklERU8sZj17c3VydmV5SWQ6aSx1cGRhdGVkQXQ6KG5ldyBEYXRlKS50b0lTT1N0cmluZygpLG1lZGlhVHlwZTpsfTthJiYoZi5xdWVzdGlvbklkPWEpLGMmJihmLnJlc3BvbnNlR3JvdXBVaWQ9YykscyYmKGYudmlzaXRvcklkPXMpO2NvbnN0IGQ9YXdhaXQoYXN5bmMoKT0+e2NvbnN0IHI9YXdhaXQgZmV0Y2goYCR7ZX0vMi9lbnZpcm9ubWVudHMvaW50ZWdyYXRpb25zL3VwbG9hZGAse21ldGhvZDoiUE9TVCIsY2FjaGU6Im5vLWNhY2hlIixoZWFkZXJzOnsiQ29udGVudC1UeXBlIjoiYXBwbGljYXRpb24vanNvbiJ9LGJvZHk6SlNPTi5zdHJpbmdpZnkoZil9KTtpZihyLm9rKXtjb25zdCB0PWF3YWl0IHIuanNvbigpO3JldHVybiBuJiZuKHBlLlVQTE9BRF9TVEFSVEVELHtbcGUuVVBMT0FEX0lEXTp0LnVwbG9hZC5pZCxbcGUuTUVESUFfVFlQRV06bH0pLHQudXBsb2FkLnVybH1yZXR1cm4gbiYmbihwZS5FUlJPUix7dHlwZTpwZS5PVEhFUixyZXNwb25zZTpyfSksWHQobmV3IEVycm9yKCJmYWlsZWQgdG8gZ2V0IHVwbG9hZCByZXNwb25zZSB3aXRoIHVybCIpLCJmaW5pc2hSZWNvcmQiLGUsbyx0LnBheWxvYWQudmlzaXRvcklkLHQucGF5bG9hZC5lbnZJZCksbnVsbH0pKCk7ZCYmKEt0PXdpbmRvdy5VcENodW5rLmNyZWF0ZVVwbG9hZCh7ZW5kcG9pbnQ6ZCxmaWxlOm5ldyBGaWxlKFt0LnJlY29yZGVkRGF0YV0sYHJlY29yZGluZyAke2x9ICR7RGF0ZS5ub3coKX1gKSxjaHVua1NpemU6NTEyMH0pLEt0LnN0YXJ0VGltZT1EYXRlLm5vdygpLEt0Lm9uKCJlcnJvciIsKG49PntyKHQudXBsb2FkUHJvZ3Jlc3NMYWJlbCwibm9uZSIpLFh0KG4sImZpbmlzaFJlY29yZCIsZSxvLHQucGF5bG9hZC52aXNpdG9ySWQsdC5wYXlsb2FkLmVudklkKX0pKSxLdC5vbigicHJvZ3Jlc3MiLChlPT57cih0LnVwbG9hZFByb2dyZXNzTGFiZWwsInByb2dyZXNzIixlLmRldGFpbCl9KSksS3Qub24oInN1Y2Nlc3MiLCgoKT0+e3IodC51cGxvYWRQcm9ncmVzc0xhYmVsLCJzdWNjZXNzIiksbiYmbihwZS5VUExPQURfRklOSVNIRUQpfSkpKX0pKX0pKHUscixvLHRlLGEpLCFuYXZpZ2F0b3IucGVybWlzc2lvbnMpcmV0dXJuO2NvbnN0IHg9W3tuYW1lOiJtaWNyb3Bob25lIn1dOyF1LmNhbWVyYU9mZiYmeC5wdXNoKHtuYW1lOiJjYW1lcmEifSksUHJvbWlzZS5hbGwoeC5tYXAoKHQ9Pm5hdmlnYXRvci5wZXJtaXNzaW9ucy5xdWVyeSh0KSkpKS50aGVuKCh0PT57dC5yZWR1Y2UoKCh0LGUpPT50JiJncmFudGVkIj09PWUuc3RhdGUpLCEwKSYmdSYmKHUuZGV2aWNlQnV0dG9uJiZ1LmRldmljZUJ1dHRvbi5oaWRlKCksIWkmJnUucmVjb3JkKCkuZ2V0RGV2aWNlKCkpLGkmJih1LnNyYyhpKSxiLnNob3coKSx2LmhpZGUoKSxmLnJlbW92ZUNsYXNzKHF0KSl9KSkuY2F0Y2goKCgpPT57fSkpfSxhZT0odCxlPTMpPT57Y29uc3Qgbj1kb2N1bWVudC5nZXRFbGVtZW50QnlJZCgidWwtcmVjb3JkaW5nLWNvdW50ZG93bi1zY3JlZW4iKTtuJiYwPT09ZT8obi5yZW1vdmUoKSx0LnJlY29yZCgpLnN0YXJ0KCkpOm4mJihuLmlubmVySFRNTD1gPHNwYW4gY2xhc3M9J3VsLWNvdW50ZG93bi10ZXh0Jz5SZWNvcmRpbmcgaW4uLi4gJHtlfTwvc3Bhbj5gLHNldFRpbWVvdXQoKCgpPT57YWUodCxlLTEpfSksMWUzKSl9LGNlPXQ9Pntjb25zdCBlPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpO3JldHVybiBlLmNsYXNzTmFtZT0idWwtdmlkZW8tY29udGFpbmVyIixlLmFwcGVuZENoaWxkKCh0PT57Y29uc3QgZT1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKTtyZXR1cm4gZS5jbGFzc05hbWU9InVsLXZpZGVvLXBsYXllci1sb2FkaW5nIixlLmlkPUJ0KHQpLFsiZmlyc3QiLCJzZWNvbmQiLCJ0aGlyZCIsImZvdXJ0aCJdLm1hcCgodD0+e2NvbnN0IG49ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2Iik7bi5jbGFzc05hbWU9dCxlLmFwcGVuZENoaWxkKG4pfSkpLGV9KSh0KSksZX0sc2U9KHQsZSk9Pntjb25zdCBuPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInZpZGVvIik7bi5pZD10LG4uY2xhc3NOYW1lPSJ2aWRlby1qcyB2anMtZGVmYXVsdC1za2luIHVsLXZpZGVvLXBsYXllci12aWRlbyI7Y29uc3Qgcj1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJwIik7ci5jbGFzc05hbWU9InZqcy1uby1qcyIsci5pbm5lckhUTUw9IlRvIHZpZXcgdGhpcyB2aWRlbyBwbGVhc2UgZW5hYmxlIEphdmFTY3JpcHQsIGFuZCBjb25zaWRlciB1cGdyYWRpbmcgdG8gYSB3ZWIgYnJvd3NlciB0aGF0Ijtjb25zdCBvPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImEiKTtyZXR1cm4gby5ocmVmPSJodHRwczovL3ZpZGVvanMuY29tL2h0bWw1LXZpZGVvLXN1cHBvcnQvIixvLnRhcmdldD0iX2JsYW5rIixvLmlubmVySFRNTD0ic3VwcG9ydHMgSFRNTDUgdmlkZW8iLHIuYXBwZW5kQ2hpbGQobyksbi5hcHBlbmRDaGlsZChyKSxlLmFwcGVuZENoaWxkKG4pLGV9LHVlPSh0LGUpPT57ZT8odC5jaGlsZHJlbigpWzBdLmNsYXNzTGlzdC5hZGQoInZqcy1oaWRkZW4iKSx0LmF1ZGlvUGxheWVyUGxhY2Vob2xkZXIuc2hvdygpKToodC5jaGlsZHJlbigpWzBdLmNsYXNzTGlzdC5yZW1vdmUoInZqcy1oaWRkZW4iKSx0LmF1ZGlvUGxheWVyUGxhY2Vob2xkZXIuaGlkZSgpKX0sbGU9dD0+e2NvbnN0IGU9d2luZG93LnZpZGVvanMsbj10KyR0O2lmKGUpe3RyeXtpZighZShuKS5yZWNvcmQoKS5zdHJlYW0pcmV0dXJufWNhdGNoKHQpe3JldHVybn1kb2N1bWVudC5nZXRFbGVtZW50QnlJZChuKSYmZShuKS5yZWNvcmQoKS5zdG9wKCksZShuKS5yZWNvcmQoKS5zdG9wRGV2aWNlKCl9fSxmZT10PT57d2luZG93LnZpZGVvanModCtZdCkucGF1c2UoKX0sZGU9KHQsZSxuLHIpPT57Y29uc3Qgbz10K1l0LGk9d2luZG93LnZpZGVvanMobyksYT13aW5kb3cudmlkZW9qcyh0KyR0KTsoKHQsZSxuKT0+e2NvbnN0IHI9d2luZG93LnZpZGVvanModCk7IXIucGF1c2VkKCkmJnIucGF1c2UoKSxyLnNyYyh7c3JjOmUsdHlwZToiYXBwbGljYXRpb24veC1tcGVnVVJMIn0pLHIuY3VycmVudFRpbWUoMCksdWUocixuKX0pKG8sZSksYS5yZWNvcmQoKS5yZXNldFN0YXRlKCksYS5yZWNvcmQoKS5nZXREZXZpY2UoKTtpZihkb2N1bWVudC5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKCJ1bC12aWRlby1yZWNvcmRlci1kZWxldGUtYnV0dG9uIilbMF0uY2xhc3NMaXN0LmFkZCh6dCksYS5jYW1lcmFPZmYpe2RvY3VtZW50LmdldEVsZW1lbnRzQnlDbGFzc05hbWUoInVsLXZpZGVvLXJlY29yZGVyLWNhbWVyYS1vZmYtYnV0dG9uLWF1ZGlvLW9ubHkiKVswXS5jbGFzc0xpc3QucmVtb3ZlKHp0KSx3aW5kb3cubmF2aWdhdG9yLm1lZGlhRGV2aWNlcy5nZXRVc2VyTWVkaWEoe3ZpZGVvOiEwLGF1ZGlvOiEwfSkudGhlbigodD0+e2EucmVjb3JkKCkub25EZXZpY2VSZWFkeSh0KSx0LmdldFZpZGVvVHJhY2tzKCkuZm9yRWFjaCgodD0+e3Quc3RvcCgpfSkpfSkpLmNhdGNoKGEucmVjb3JkKCkub25EZXZpY2VFcnJvci5iaW5kKGEucmVjb3JkKCkpKX1lbHNle2RvY3VtZW50LmdldEVsZW1lbnRzQnlDbGFzc05hbWUoInVsLXZpZGVvLXJlY29yZGVyLWNhbWVyYS1vZmYtYnV0dG9uIilbMF0uY2xhc3NMaXN0LnJlbW92ZSh6dCl9YS5wYXlsb2FkPW4sdGUoYS51cGxvYWRQcm9ncmVzc0xhYmVsLCJub25lIiksSnQ9RGF0ZS5ub3coKSx1ZShpLHIpfSxwZT17VVBMT0FEX1NUQVJURUQ6InVwbG9hZC5zdGFydGVkIixVUExPQURfRklOSVNIRUQ6InVwbG9hZC5maW5pc2hlZCIsREVMRVRFOiJkZWxldGUiLEVSUk9SOiJlcnJvciIsTUVESUFfVFlQRToibWVkaWEudHlwZSIsUEVSTUlTU0lPTl9ERU5JRUQ6InBlcm1pc3Npb25fZGVuaWVkIixPVEhFUjoib3RoZXIiLFVQTE9BRF9JRDoidXBsb2FkLmlkIixNRURJQV9UWVBFX1ZJREVPOiJ2aWRlbyIsTUVESUFfVFlQRV9BVURJTzoiYXVkaW8ifSxoZT17UGxheWJhY2tSYXRlTWVudUJ1dHRvbjoiU3BlZWQiLFBsYXlUb2dnbGU6IlBsYXkiLEZ1bGxzY3JlZW5Ub2dnbGU6IkV4cGFuZCIsVHVybk9uQ2FtZXJhOiJUdXJuIG9uIixUdXJuT2ZmQ2FtZXJhOiJUdXJuIG9mZiIsRGVsZXRlQnV0dG9uOiJEZWxldGUiLFJlY29yZEJ1dHRvbjoiUmVjb3JkIixTdG9wQnV0dG9uOiJTdG9wIixQYXVzZUJ1dHRvbjoiUGF1c2UifTtmdW5jdGlvbiB2ZSh0LGUpe3ZhciBuPU9iamVjdC5rZXlzKHQpO2lmKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpe3ZhciByPU9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHModCk7ZSYmKHI9ci5maWx0ZXIoKGZ1bmN0aW9uKGUpe3JldHVybiBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHQsZSkuZW51bWVyYWJsZX0pKSksbi5wdXNoLmFwcGx5KG4scil9cmV0dXJuIG59dmFyIGdlPSJ1bC1idXR0b24taW5hY3RpdmUiO2Z1bmN0aW9uIHllKHQsZSl7ZSh0KX12YXIgbWU9e2VxOmZ1bmN0aW9uKHQsZSl7cmV0dXJuIHQ9PWV9LG5lcTpmdW5jdGlvbih0LGUpe3JldHVybiF0aGlzLmVxKHQsZSl9LGd0OmZ1bmN0aW9uKHQsZSl7cmV0dXJuIHQ+ZX0sZ3RlOmZ1bmN0aW9uKHQsZSl7cmV0dXJuIHQ+PWV9LGx0OmZ1bmN0aW9uKHQsZSl7cmV0dXJuIHQ8ZX0sbHRlOmZ1bmN0aW9uKHQsZSl7cmV0dXJuIHQ8PWV9LGxpc3RfZXhhY3Q6ZnVuY3Rpb24odCxlKXtyZXR1cm4hKCFBcnJheS5pc0FycmF5KHQpfHwhQXJyYXkuaXNBcnJheShlKSkmJnQuc2xpY2UoKS5zb3J0KCkuam9pbigiLCIpPT09ZS5zbGljZSgpLnNvcnQoKS5qb2luKCIsIil9LGxpc3RfYWxsOmZ1bmN0aW9uKHQsZSl7cmV0dXJuISghQXJyYXkuaXNBcnJheSh0KXx8IUFycmF5LmlzQXJyYXkoZSkpJiYhZS5zb21lKChmdW5jdGlvbihlKXtyZXR1cm4tMT09PXQuaW5kZXhPZihlKX0pKX0sbGlzdF9hbG86ZnVuY3Rpb24odCxlKXtyZXR1cm4hKCFBcnJheS5pc0FycmF5KHQpfHwhQXJyYXkuaXNBcnJheShlKSkmJmUuc29tZSgoZnVuY3Rpb24oZSl7cmV0dXJuLTEhPXQuaW5kZXhPZihlKX0pKX19O3ZhciBiZT1mdW5jdGlvbigpe2Z1bmN0aW9uIHQoZSl7dmFyIG49dGhpcztidCgpKHRoaXMsdCksdGhpcy5wcm9taXNlPW5ldyBQcm9taXNlKChmdW5jdGlvbih0LHIpe24ucGF5bG9hZD1lLG4ucmVqZWN0PXIsbi5yZXNvbHZlPXR9KSl9cmV0dXJuIHd0KCkodCxbe2tleToicmVzb2x2ZVJlcXVlc3QiLHZhbHVlOmZ1bmN0aW9uKHQpe3RoaXMucmVzb2x2ZSh0KX19XSksdH0oKSx4ZT1uKDkzMTMwKSx3ZT14ZS5kZWxheSxFZT14ZS5ORVRXT1JLX0NPTkZJRyxqZT0hMSxDZT0iIixrZT0hMSxTZT1bXTtmdW5jdGlvbiBPZSh0KXtyZXR1cm4gdC5fY29uZmlnJiZ0Ll9jb25maWcuaW5zdGFsbGF0aW9uTWV0aG9kP3QuX2NvbmZpZy5pbnN0YWxsYXRpb25NZXRob2Q6dC5fZ3RtP3E6dC5fc2VnbWVudD9XOkd9ZnVuY3Rpb24gQWUodCl7amU9ITAsQ2U9dH1mdW5jdGlvbiBJZSgpe3ZhciB0PWFyZ3VtZW50cy5sZW5ndGg+MCYmdm9pZCAwIT09YXJndW1lbnRzWzBdP2FyZ3VtZW50c1swXTp7fSxlPXsiQ29udGVudC1UeXBlIjoiYXBwbGljYXRpb24vanNvbiIsInVzZXJsZWFwLXBsYXRmb3JtIjoid2ViIiwieC11bC1zZGstdmVyc2lvbiI6IjIuMTQuMiJ9O2lmKHQuZW52SWQmJihlW1VdPXQuZW52SWQpLHQudG9rZW4mJihlLkF1dGhvcml6YXRpb249IkJlYXJlciAiK3QudG9rZW4pLHQudXNlcklkJiYoZVt6XT10LnVzZXJJZCksdC52aXNpdG9ySWQmJihlW0hdPXQudmlzaXRvcklkKSx0LnBhcnRuZXJBbm9ueW1vdXNJZCYmKGVbQl09dC5wYXJ0bmVyQW5vbnltb3VzSWQpLHQubW9iaWxlSGVhZGVyc0pTT04pe3ZhciBuPUpTT04ucGFyc2UodC5tb2JpbGVIZWFkZXJzSlNPTik7T2JqZWN0LmFzc2lnbihlLG4pfXJldHVybiBlW1ZdPU9lKHQpLHQubG9jYWxlJiYoZVsiYWNjZXB0LWxhbmd1YWdlIl09dC5sb2NhbGUpLGV9ZnVuY3Rpb24gVGUodCxlLG4pe3JldHVybiBfZS5hcHBseSh0aGlzLGFyZ3VtZW50cyl9ZnVuY3Rpb24gX2UoKXtyZXR1cm4oX2U9TigpKFIoKS5tYXJrKChmdW5jdGlvbiB0KGUsbixyKXt2YXIgbztyZXR1cm4gUigpLndyYXAoKGZ1bmN0aW9uKHQpe2Zvcig7Oylzd2l0Y2godC5wcmV2PXQubmV4dCl7Y2FzZSAwOmlmKCFlKXt0Lm5leHQ9NDticmVha31yZXR1cm4gdC5hYnJ1cHQoInJldHVybiIse3N0YXR1czo0Mjl9KTtjYXNlIDQ6cmV0dXJuIG89bmV3IGJlKHIpLFNlLnB1c2gobyksdC5hYnJ1cHQoInJldHVybiIsby5wcm9taXNlKTtjYXNlIDc6Y2FzZSJlbmQiOnJldHVybiB0LnN0b3AoKX19KSx0KX0pKSkpLmFwcGx5KHRoaXMsYXJndW1lbnRzKX1mdW5jdGlvbiBNZSh0LGUpe3JldHVybiBMZS5hcHBseSh0aGlzLGFyZ3VtZW50cyl9ZnVuY3Rpb24gTGUoKXtyZXR1cm4gTGU9TigpKFIoKS5tYXJrKChmdW5jdGlvbiB0KGUsbil7dmFyIHIsbyxpLGEsYyxzLHUsbCxmLGQ9YXJndW1lbnRzO3JldHVybiBSKCkud3JhcCgoZnVuY3Rpb24odCl7Zm9yKDs7KXN3aXRjaCh0LnByZXY9dC5uZXh0KXtjYXNlIDA6aWYocj1kLmxlbmd0aD4yJiZ2b2lkIDAhPT1kWzJdP2RbMl06MCxvPWQubGVuZ3RoPjMmJnZvaWQgMCE9PWRbM10mJmRbM10saT1kLmxlbmd0aD40JiZ2b2lkIDAhPT1kWzRdJiZkWzRdLGE9e3VybDplLG9wdGlvbnM6bixhdHRlbXB0OnIsc2hvdWxkRHJvcE9uUmF0ZUxpbWl0Om99LCFrZXx8aSl7dC5uZXh0PTY7YnJlYWt9cmV0dXJuIHQuYWJydXB0KCJyZXR1cm4iLFRlKG8saSxhKSk7Y2FzZSA2OmlmKGM9e29rOiExLHJlcG9ydEVycm9yOiExfSwhamUpe3QubmV4dD0xMDticmVha31yZXR1cm4gY29uc29sZS5sb2coIlVzZXJMZWFwIC0gIi5jb25jYXQoQ2UpKSx0LmFicnVwdCgicmV0dXJuIixjKTtjYXNlIDEwOnJldHVybiB0LnByZXY9MTAsbi5oZWFkZXJzPU9iamVjdC5hc3NpZ24oSWUoKSxuLmhlYWRlcnMpLHQubmV4dD0xNCxmZXRjaChlLG4pO2Nhc2UgMTQ6aWYoNDI5IT09KHM9dC5zZW50KS5zdGF0dXMpe3QubmV4dD0yNDticmVha31pZighKCFrZSYmIW98fGkpKXt0Lm5leHQ9MjM7YnJlYWt9cmV0dXJuIGtlPSEwLHU9cy5oZWFkZXJzLmhhcygicmF0ZWxpbWl0LXJlc2V0Iik/TnVtYmVyKHMuaGVhZGVycy5nZXQoInJhdGVsaW1pdC1yZXNldCIpKTpFZS5SQVRFTElNSVRfUkVTRVRfREVGQVVMVCx0LmFicnVwdCgicmV0dXJuIix3ZSgxZTMqdSkudGhlbihOKCkoUigpLm1hcmsoKGZ1bmN0aW9uIHQoKXtyZXR1cm4gUigpLndyYXAoKGZ1bmN0aW9uKHQpe2Zvcig7Oylzd2l0Y2godC5wcmV2PXQubmV4dCl7Y2FzZSAwOnJldHVybiB0LmFicnVwdCgicmV0dXJuIixNZShlLG4sMCxvLCEwKSk7Y2FzZSAxOmNhc2UiZW5kIjpyZXR1cm4gdC5zdG9wKCl9fSksdCl9KSkpKSk7Y2FzZSAyMzpyZXR1cm4gdC5hYnJ1cHQoInJldHVybiIsVGUobywhMSxhKSk7Y2FzZSAyNDppZihrZT0hMSxTZS5sZW5ndGgmJihTZS5tYXAoKGZ1bmN0aW9uKHQpe3ZhciBlPXQucGF5bG9hZDtNZShlLnVybCxlLm9wdGlvbnMsZS5hdHRlbXB0LGUuc2hvdWxkRHJvcE9uUmF0ZUxpbWl0KS50aGVuKChmdW5jdGlvbihlKXt0LnJlc29sdmVSZXF1ZXN0KGUpfSkpfSkpLFNlPVtdKSwhcy5vayl7dC5uZXh0PTQxO2JyZWFrfWlmKDI0OSE9PXMuc3RhdHVzKXt0Lm5leHQ9MzA7YnJlYWt9cmV0dXJuIEFlKCksdC5hYnJ1cHQoInJldHVybiIsYyk7Y2FzZSAzMDpyZXR1cm4gdC5uZXh0PTMyLHMudGV4dCgpO2Nhc2UgMzI6cmV0dXJuIGw9dC5zZW50LHQucHJldj0zMyxsJiYiT0siIT09bCYmKHMuanNvbj1KU09OLnBhcnNlKGwpKSx0LmFicnVwdCgicmV0dXJuIixzKTtjYXNlIDM4OnJldHVybiB0LnByZXY9MzgsdC50MD10LmNhdGNoKDMzKSx0LmFicnVwdCgicmV0dXJuIix7b2s6ITEscmVwb3J0RXJyb3I6ITAsZXJyb3I6bmV3IEVycm9yKCJmYWlsZWQgcGFyc2luZyByZXNwb25zZSBqc29uIGZvciAiLmNvbmNhdChlLCIgLSAiKS5jb25jYXQobCkpfSk7Y2FzZSA0MTpyZXR1cm4gdC5hYnJ1cHQoInJldHVybiIscyk7Y2FzZSA0NDppZih0LnByZXY9NDQsdC50MT10LmNhdGNoKDEwKSwhKChmPXIrMSk+Mikpe3QubmV4dD00OTticmVha31yZXR1cm4gdC5hYnJ1cHQoInJldHVybiIse29rOiExLHJlcG9ydEVycm9yOiExLGVycm9yOnQudDF9KTtjYXNlIDQ5OnJldHVybiB0LmFicnVwdCgicmV0dXJuIix3ZSgxZTMqZikudGhlbigoZnVuY3Rpb24oKXtyZXR1cm4gTWUoZSxuLGYpfSkpKTtjYXNlIDUwOmNhc2UiZW5kIjpyZXR1cm4gdC5zdG9wKCl9fSksdCxudWxsLFtbMTAsNDRdLFszMywzOF1dKX0pKSksTGUuYXBwbHkodGhpcyxhcmd1bWVudHMpfWZ1bmN0aW9uIFJlKHQsZSl7dmFyIG49T2JqZWN0LmtleXModCk7aWYoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyl7dmFyIHI9T2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyh0KTtlJiYocj1yLmZpbHRlcigoZnVuY3Rpb24oZSl7cmV0dXJuIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IodCxlKS5lbnVtZXJhYmxlfSkpKSxuLnB1c2guYXBwbHkobixyKX1yZXR1cm4gbn1mdW5jdGlvbiBQZSh0KXtmb3IodmFyIGU9MTtlPGFyZ3VtZW50cy5sZW5ndGg7ZSsrKXt2YXIgbj1udWxsIT1hcmd1bWVudHNbZV0/YXJndW1lbnRzW2VdOnt9O2UlMj9SZShPYmplY3QobiksITApLmZvckVhY2goKGZ1bmN0aW9uKGUpe3IoKSh0LGUsbltlXSl9KSk6T2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcnM/T2JqZWN0LmRlZmluZVByb3BlcnRpZXModCxPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycyhuKSk6UmUoT2JqZWN0KG4pKS5mb3JFYWNoKChmdW5jdGlvbihlKXtPYmplY3QuZGVmaW5lUHJvcGVydHkodCxlLE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IobixlKSl9KSl9cmV0dXJuIHR9ZnVuY3Rpb24gTmUodCxlLG4pe3JldHVybiBGZS5hcHBseSh0aGlzLGFyZ3VtZW50cyl9ZnVuY3Rpb24gRmUoKXtyZXR1cm4gRmU9TigpKFIoKS5tYXJrKChmdW5jdGlvbiB0KGUsbixyKXt2YXIgbyxpLGEsYyxzLHUsbCxmO3JldHVybiBSKCkud3JhcCgoZnVuY3Rpb24odCl7Zm9yKDs7KXN3aXRjaCh0LnByZXY9dC5uZXh0KXtjYXNlIDA6cmV0dXJuIG89ZS5tb2RlLGk9ZS51c2VySWQsYT1lLmVudklkLGM9ZS5hcGlVUkwscz1lLmhlYWRlcnMsdT13aW5kb3cuZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LGw9e21vZGU6byxzY3JlZW5XaWR0aDp3aW5kb3cuc2NyZWVuLndpZHRoLHNjcmVlbkhlaWdodDp3aW5kb3cuc2NyZWVuLmhlaWdodCxjbGllbnRXaWR0aDp1LmNsaWVudFdpZHRoLGNsaWVudEhlaWdodDp1LmNsaWVudEhlaWdodCxsb2NhdGlvbjp3aW5kb3cubG9jYXRpb24uaHJlZixsYW5ndWFnZTp3aW5kb3cubmF2aWdhdG9yLmxhbmd1YWdlfSxmPXthY3Rpb246bixlcnI6e21lc3NhZ2U6ci5tZXNzYWdlLHN0YWNrOnIuc3RhY2t9LG1ldGE6bCx2aWQ6aSxlbnZJZDphfSx0Lm5leHQ9NixNZSgiIi5jb25jYXQoYywiL3Nkay8xL2Vycm9ycyIpLHttZXRob2Q6IlBPU1QiLGhlYWRlcnM6T2JqZWN0LmFzc2lnbih7IngtdWwtZXJyb3IiOndpbmRvdy5idG9hKCJ1c2VybGVhcC0iLmNvbmNhdChEYXRlLm5vdygpLCItZXJyb3IiKSl9LHMpLGJvZHk6SlNPTi5zdHJpbmdpZnkoZil9KTtjYXNlIDY6dC5zZW50Lm9rfHxjb25zb2xlLndhcm4oIltVc2VyTGVhcF0gKEVSUi00NDQpIEZhaWxlZCB0byByZXBvcnQgZXJyb3IgdG8gQVBJIixyKTtjYXNlIDg6Y2FzZSJlbmQiOnJldHVybiB0LnN0b3AoKX19KSx0KX0pKSksRmUuYXBwbHkodGhpcyxhcmd1bWVudHMpfXZhciBEZT1mdW5jdGlvbih0KXtyZXR1cm4gMD09PXQudXNlcklkfHx0Lm1ldGEmJiJ0ZXN0Ij09PXQubWV0YS5tb2RlfHx0LmlzUHJldmlld30sVWU9e3N1cnZleUlkOm51bGwscnVubmluZzohMSxmcmFtZTpudWxsLGVudklkOm51bGwsdXNlcklkOm51bGwsbWV0YTp7fSxib3JkZXI6bnVsbCxmb250RmFtaWx5Om51bGwsZm9udEZhbWlseVVSTDpudWxsLHRpbWVvdXQ6bnVsbCxpbnRlcnZhbDpudWxsLG1vZGU6bnVsbCxkZWNrOntpbmRleDowLGNhcmRzOltdfSxjb250ZXh0Ont9LHNlbmRpbmc6ITEsY2FyZHM6e29wZW46ZnVuY3Rpb24odCl7dmFyIGU9dC5jbGFzc05hbWUsbj10Lm1lc3NhZ2Uscj10LnByb3BlcnRpZXMsbz0odC5sb2NhbGUsdC5uZXh0KSxpPXQucXVlc3Rpb25JZDtyZXR1cm4gZnVuY3Rpb24odCxhKXt2YXIgYz10LmFwcCxzPWMudXNlTW9iaWxlU3R5bGluZyx1PWMuYm9yZGVyLGw9RChbZSwidWwtY2FyZC0tdGV4dCIsbHRdKSxmPV90KHIpLGQ9ciYmci5vcGVuVGV4dFBsYWNlaG9sZGVyP3Iub3BlblRleHRQbGFjZWhvbGRlcjpudWxsO3JldHVybiBBKCJmb3JtIix7aWQ6InRleHQtZm9ybSIsY2xhc3NOYW1lOmwsb25zdWJtaXQ6ZnVuY3Rpb24odCl7cmV0dXJuIEZ0KHQsbyl9LGtleTppfSxNdChmLG4pLGYsQSgiZGl2Iix7Y2xhc3NOYW1lOiJ1bC1jYXJkLXRleHQifSxBKCJkaXYiLHtjbGFzc05hbWU6InVsLWNhcmQtdGV4dF9fY29udGFpbmVyIn0sQSgidGV4dGFyZWEiLHsiZGF0YS1ncmFtbSI6ImZhbHNlIixtYXhsZW5ndGg6IjUwMDAiLGNsYXNzTmFtZTpEKGZ0KGl0LHMpKSxuYW1lOiJ0ZXh0IixwbGFjZWhvbGRlcjpkLCJhcmlhLXBsYWNlaG9sZGVyIjpkLCJhcmlhLW11bHRpbGluZSI6InRydWUiLHZhbHVlOnQub3BlblRleHQudmFsdWUsb25jcmVhdGU6TnQoKSxvbmlucHV0OmZ1bmN0aW9uKHQpe3QucHJldmVudERlZmF1bHQoKSx0LnN0b3BQcm9wYWdhdGlvbigpLGEub3BlblRleHQub25UZXh0Q2hhbmdlKHQudGFyZ2V0LnZhbHVlKX0sb25mb2N1czpmdW5jdGlvbih0KXt0LnRhcmdldC5zdHlsZS5ib3JkZXJDb2xvcj11fSxvbmJsdXI6ZnVuY3Rpb24odCl7dC50YXJnZXQuc3R5bGUuYm9yZGVyQ29sb3I9IiNlNmU2ZTYifSx0YWJpbmRleDowLCJhcmlhLWxhYmVsbGVkYnkiOnN0LGNvbnRlbnRlZGl0YWJsZToidHJ1ZSIscm9sZToidGV4dGJveCIsImFyaWEtbGFiZWwiOmR9KSksQSgiYnV0dG9uIix7aWQ6InVsLWNhcmQtdGV4dF9fYnV0dG9uIixjbGFzc05hbWU6InVsLWNhcmQtdGV4dF9fYnV0dG9uIixzdHlsZTp7YmFja2dyb3VuZENvbG9yOnV9LG9uY2xpY2s6ZnVuY3Rpb24oZSl7KGUucHJldmVudERlZmF1bHQoKSxlLnN0b3BQcm9wYWdhdGlvbigpLGRvY3VtZW50LmZvcm1zWyJ0ZXh0LWZvcm0iXSkmJihGdCh0Lm9wZW5UZXh0LnZhbHVlLnRyaW0oKSxvKSx0Lm9wZW5UZXh0LnZhbHVlPSIiKX0scm9sZToiYnV0dG9uIiwiYXJpYS1sYWJlbGxlZGJ5IjoiIi5jb25jYXQoc3QsIiB1bC1jYXJkLXRleHRfX2J1dHRvbiIpfSxMdChyKSkpLEEoVHQsbnVsbCkpfX0sdGV4dHVybHByb21wdDpmdW5jdGlvbih0KXt2YXIgZT10LmNsYXNzTmFtZSxuPXQubWVzc2FnZSxyPXQucHJvcGVydGllcyxvPSh0LmxvY2FsZSx0Lm5leHQpLGk9dC5xdWVzdGlvbklkO3JldHVybiBmdW5jdGlvbih0LGEpe3ZhciBjPUQoW2UsInVsLWNhcmRfX3RleHQtdXJsLXByb21wdCIsbHRdKSxzPXQuYXBwLmJvcmRlcjtyZXR1cm4gQSgiZGl2Iix7Y2xhc3NOYW1lOmMsa2V5Oml9LEEoInAiLHtpZDpzdCxjbGFzc05hbWU6InVsLXF1ZXN0aW9uIn0sbiksQSgiZGl2Iix7aWQ6InVsLWNhcmRfX3RleHQtdXJsLWJvZHktY29udGFpbmVyIixjbGFzc05hbWU6InVsLWNhcmRfX3RleHQtdXJsLWJvZHktY29udGFpbmVyIn0sKHImJnIuYm9keT9yLmJvZHkuc3BsaXQoL1xuXHMqXG4vZyk6W10pLm1hcCgoZnVuY3Rpb24odCl7cmV0dXJuIEEoInAiLHtjbGFzc05hbWU6InVsLWNhcmRfX3RleHQtdXJsLXByb21wdC1ib2R5In0sdCl9KSkpLEEoImEiLHtpZDoidWwtY2FyZC10ZXh0X19idXR0b24iLGNsYXNzTmFtZToidWwtY2FyZC10ZXh0X19idXR0b24gdWwtY2FyZF9fdGV4dC11cmwtcHJvbXB0LWJ1dHRvbiIsc3R5bGU6e2JhY2tncm91bmRDb2xvcjpzLCJtYXJnaW4tcmlnaHQiOiJhdXRvIiwidGV4dC1vdmVyZmxvdyI6ImVsbGlwc2lzIix0ZXh0RGVjb3JhdGlvbjoibm9uZSIsb3ZlcmZsb3c6InZpc2libGUifSxvbmNsaWNrOmZ1bmN0aW9uKHQpe28oKX0sb25rZXlwcmVzczpmdW5jdGlvbih0KXsxMyE9dC5rZXlDb2RlJiYzMiE9dC5rZXlDb2RlfHxvKCl9LGhyZWY6ciYmci5idXR0b25VcmwsdGFyZ2V0OiJfYmxhbmsiLHJvbGU6ImJ1dHRvbiIsdGFiaW5kZXg6MCwiYXJpYS1sYWJlbGxlZGJ5IjoiIi5jb25jYXQoc3QsIiB1bC1jYXJkLXRleHRfX2J1dHRvbiIpLCJhcmlhLWRlc2NyaWJlZGJ5IjoidWwtY2FyZF9fdGV4dC11cmwtYm9keS1jb250YWluZXIifSxyJiZyLmJ1dHRvblRleHQ/ci5idXR0b25UZXh0OiJOZXh0IiksQShUdCxudWxsKSl9fSxtdWx0aXBsZWNob2ljZTpmdW5jdGlvbih0KXt2YXIgZT10LmNsYXNzTmFtZSxuPXQuYm9yZGVyLG89dC5tZXNzYWdlLGk9dC5wcm9wZXJ0aWVzLGE9KHQubG9jYWxlLHQub3B0aW9ucyksYz12b2lkIDA9PT1hP1tdOmEscz10Lm5leHQsdT10LnF1ZXN0aW9uSWQ7cmV0dXJuIGZ1bmN0aW9uKHQsYSl7dmFyIGw9dC5hcHAudXNlTW9iaWxlU3R5bGluZyxmPUQoW2UsInVsLWNhcmQtLW11bHRpcGxlIixsdF0pO2Z1bmN0aW9uIGQodCxlKXtzKHt2YWx1ZTpyKCkoe30sdCxlKX0pfXZhciBwPWMubWFwKChmdW5jdGlvbih0LGUpe3ZhciByPXQuaWQsbz10LmxhYmVsLGk9dC52YWx1ZTtyZXR1cm4gQShEdCx7Ym9yZGVyOm4saW5kZXg6ZSxsYWJlbDpvLHRhYmluZGV4OmUrMSxvblNlbGVjdDpkLmJpbmQobnVsbCxyLGkpLGlkOnIsaXNSYWRpbzohMCx1c2VNb2JpbGVTdHlsaW5nOmx9KX0pKSxoPV90KGkpO3JldHVybiBBKCJkaXYiLHtjbGFzc05hbWU6ZixrZXk6dX0sTXQoaCxvKSxoLEEoImRpdiIse2NsYXNzTmFtZTpEKGZ0KG90LGwpKSxyb2xlOiJyYWRpb2dyb3VwIiwiYXJpYS1sYWJlbGVkYnkiOnN0fSxwKSxBKFR0LG51bGwpKX19LG11bHRpcGxlc2VsZWN0OmZ1bmN0aW9uKHQpe3ZhciBlPXQuY2xhc3NOYW1lLG49dC5ib3JkZXIscj10Lm1lc3NhZ2Usbz10LnByb3BlcnRpZXMsaT0odC5sb2NhbGUsdC5vcHRpb25zKSxhPXZvaWQgMD09PWk/W106aSxjPSh0LmlzTGFzdCx0Lm5leHQpLHM9dC5xdWVzdGlvbklkO3JldHVybiBmdW5jdGlvbih0LGkpe3ZhciB1PUQoW2UsInVsLWNhcmQtLW11bHRpcGxlIixsdF0pLGw9dC5tdWx0aXBsZXNlbGVjdC5zZWxlY3RlZE9wdGlvbnMsZj1pLm11bHRpcGxlc2VsZWN0LGQ9Zi5pbml0LHA9Zi5yZXNldCxoPWYudXBkYXRlU2VsZWN0ZWQsdj10LmFwcC51c2VNb2JpbGVTdHlsaW5nLGc9ZnVuY3Rpb24oZSl7ZS5wcmV2ZW50RGVmYXVsdCgpLGUuc3RvcFByb3BhZ2F0aW9uKCksZnVuY3Rpb24odCxlKXtlKHt2YWx1ZTp0fSl9KHQubXVsdGlwbGVzZWxlY3Quc2VsZWN0ZWRPcHRpb25zLGMpLHAoKX0seT1hLm1hcCgoZnVuY3Rpb24odCxlKXt2YXIgcj10LmlkLG89dC5sYWJlbDt0LnZhbHVlO3JldHVybiBBKER0LHtib3JkZXI6bixpbmRleDplLGxhYmVsOm8sb25TZWxlY3Q6aCxzZWxlY3RlZDpsW3JdLGlkOnIsaXNSYWRpbzohMSx1c2VNb2JpbGVTdHlsaW5nOnZ9KX0pKSxtPV90KG8pO3JldHVybiBBKCJmb3JtIix7aWQ6InRleHQtZm9ybSIsY2xhc3NOYW1lOnUsb25zdWJtaXQ6ZyxvbmNyZWF0ZTpmdW5jdGlvbih0KXtyZXR1cm4gZT17fSxhLmZvckVhY2goKGZ1bmN0aW9uKHQpe2VbdC5pZF09ITF9KSksdm9pZCBkKGUpO3ZhciBlfSxrZXk6c30sTXQobSxyKSxtLEEoImRpdiIse2NsYXNzTmFtZTpEKGZ0KG90LHYpKSxyb2xlOiJyYWRpb2dyb3VwIn0seSksQSgiZGl2Iix7Y2xhc3NOYW1lOiJ1bC1jYXJkLXRleHQifSxBKCJidXR0b24iLHtpZDoidWwtY2FyZC10ZXh0X19idXR0b24iLGNsYXNzTmFtZToidWwtY2FyZC10ZXh0X19idXR0b24iLHN0eWxlOntiYWNrZ3JvdW5kQ29sb3I6bn0sb25jbGljazpnLHJvbGU6ImJ1dHRvbiIsImFyaWEtbGFiZWxsZWRieSI6IiIuY29uY2F0KHN0LCIgdWwtY2FyZC10ZXh0X19idXR0b24iKX0sTHQobykpKSxBKFR0LG51bGwpKX19LGxpa2VydDpmdW5jdGlvbih0KXt2YXIgZT10LmJvcmRlcixuPXQuY2xhc3NOYW1lLHI9KHQubG9jYWxlLHQubGFiZWxzKSxvPXQubWVzc2FnZSxpPXQucHJvcGVydGllcyxhPXQubmV4dCxjPXQucXVlc3Rpb25JZDtyZXR1cm4gZnVuY3Rpb24odCxzKXt2YXIgdT10LmFwcCxsPXUudXNlTW9iaWxlU3R5bGluZyxmPXUuZGVjay5pbmRleCxkPUQoW24sInVsLWNhcmQtLWxpa2VydCIsbHRdKSxwPXImJnIubGVmdCxoPXImJnIucmlnaHQsdj1NKCkoQXJyYXkoNSkpLm1hcCgoZnVuY3Rpb24odCxuKXt2YXIgcj1uKzEsbz0ib3B0aW9uLSIuY29uY2F0KHIpLGk9ZnVuY3Rpb24odCl7dC50YXJnZXQuc3R5bGUuekluZGV4PTIsdC50YXJnZXQuc3R5bGUuYm9yZGVyQ29sb3I9ZX0sYz1mdW5jdGlvbih0KXt0LnRhcmdldC5zdHlsZS56SW5kZXg9ImF1dG8iLHQudGFyZ2V0LnN0eWxlLmJvcmRlckNvbG9yPSIjZTZlNmU2In0scz17b25jbGljazpmdW5jdGlvbigpe3JldHVybiBhKHIpfSxvbmtleXByZXNzOmZ1bmN0aW9uKHQpe3JldHVybiBmdW5jdGlvbih0KXsxMyE9dC5rZXlDb2RlJiYzMiE9dC5rZXlDb2RlfHxhKHIpfSh0KX19O3JldHVybiJvbnRvdWNoc3RhcnQiaW4gZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50PyhzLm9udG91Y2hzdGFydD1pLHMub250b3VjaGNhbmNlbD1jLHMub250b3VjaG1vdmU9YyxzLm9udG91Y2hlbmQ9Yyk6KHMub25tb3VzZWRvd249aSxzLm9ubW91c2VsZWF2ZT1jKSxBKCJkaXYiLFQoKSh7aWQ6byxjbGFzc05hbWU6RChbXS5jb25jYXQoTSgpKGZ0KFgsbCkpLE0oKShmdCgiIi5jb25jYXQoWCwiLSIpLmNvbmNhdChyKSxsKSkpKX0scyx7ImFyaWEtbGFiZWxsZWRieSI6IiIuY29uY2F0KHN0LCIgIikuY29uY2F0KG8pLHJvbGU6InRleHRib3giLHRhYmluZGV4OjAsImFyaWEtZGVzY3JpYmVkYnkiOnV0fSkscil9KSksZz1fdChpKTtyZXR1cm4gQSgiZm9ybSIse2NsYXNzTmFtZTpkLGtleTpjfSxNdChnLG8pLGcsZiUyPT0wJiZBKCJkaXYiLG51bGwpLEEoImRpdiIse2NsYXNzTmFtZToidWwtY2FyZC0tbGlrZXJ0X19udW1iZXJzIn0sdiksQSgiZGl2Iix7Y2xhc3NOYW1lOiJ1bC1jYXJkLS1saWtlcnRfX2xhYmVscyJ9LEEoInNwYW4iLG51bGwscCksQSgic3BhbiIsbnVsbCxoKSksQShUdCxudWxsKSl9fSx0aGFua3M6ZnVuY3Rpb24odCl7dmFyIGU9dC5lbmRDYXJkLG49dC5ib3JkZXIscj10LmNsYXNzTmFtZSxvPSh0LmxvY2FsZSx0LnF1ZXN0aW9uSWQpO3JldHVybiBmdW5jdGlvbih0LGkpe3ZhciBhPUQoW3IsInVsLWNhcmQtLXRoYW5rcyIsbHRdKSxjPWUmJmUuc3ViaGVhZGVyP0EoInAiLHtjbGFzc05hbWU6InVsLWNhcHRpb24ifSxlLnN1YmhlYWRlcik6bnVsbCxzPWUmJmUuaGVhZGxpbmU/ZS5oZWFkbGluZTpudWxsO3JldHVybiBBKCJkaXYiLHtjbGFzc05hbWU6YSxrZXk6b30sQSgiZGl2Iix7b25jcmVhdGU6ZnVuY3Rpb24oKXtyZXR1cm4gaS5hcHAuY29tcGxldGUoKX19LEEoImRpdiIse2NsYXNzTmFtZToidWwtY2FyZC0tdGhhbmtzLWNvbnRlbnQifSxBKCJkaXYiLHtjbGFzc05hbWU6InVsLXRoYW5rcy1jaGVjayJ9LEEoInN2ZyIse3dpZHRoOiI4MSIsaGVpZ2h0OiI5OSIsdmlld0JveDoiMCAwIDgxIDk5IixmaWxsOiJub25lIix4bWxuczoiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciLCJhcmlhLWxhYmVsbGVkYnkiOiJ0aXRsZSJ9LEEoInBhdGgiLHsiZmlsbC1ydWxlIjoiZXZlbm9kZCIsImNsaXAtcnVsZSI6ImV2ZW5vZGQiLGQ6Ik00MC41IDc3QzYwLjkzNDUgNzcgNzcuNSA2MC40MzQ1IDc3LjUgNDBDNzcuNSAxOS41NjU1IDYwLjkzNDUgMyA0MC41IDNDMjAuMDY1NSAzIDMuNSAxOS41NjU1IDMuNSA0MEMzLjUgNjAuNDM0NSAyMC4wNjU1IDc3IDQwLjUgNzdaTTgwLjUgNDBDODAuNSA2Mi4wOTE0IDYyLjU5MTQgODAgNDAuNSA4MEMxOC40MDg2IDgwIDAuNSA2Mi4wOTE0IDAuNSA0MEMwLjUgMTcuOTA4NiAxOC40MDg2IDAgNDAuNSAwQzYyLjU5MTQgMCA4MC41IDE3LjkwODYgODAuNSA0MFoiLGZpbGw6bn0pLEEoInBhdGgiLHsiZmlsbC1ydWxlIjoiZXZlbm9kZCIsImNsaXAtcnVsZSI6ImV2ZW5vZGQiLGQ6Ik01NS4wMjUgMjIuOTA0NkM1NS42Mjk5IDIzLjQ3MDUgNTUuNjYxNiAyNC40MTk4IDU1LjA5NTYgMjUuMDI0N0M1NC44NzI0IDI1LjI2MzQgNTQuNjEwOSAyNS41Mjg1IDU0LjMxNTcgMjUuODI3N0M1Mi4yNTQ3IDI3LjkxNjggNDguNTU0OSAzMS42NjcgNDQuODEzNSAzOS42NjU4QzQzLjI4MTggNDIuOTQwNiA0Mi4wODY0IDQ1LjgzODYgNDEuMDgyMyA0OC4yNzI5QzQwLjY1MzkgNDkuMzExNiA0MC4yNjAzIDUwLjI2NTkgMzkuODkwMiA1MS4xMjlDMzkuMjg3IDUyLjUzNTkgMzguNzI0OCA1My43NTA4IDM4LjE3NDQgNTQuNjI1QzM3Ljg5OTcgNTUuMDYxMyAzNy41ODA2IDU1LjQ5MDUgMzcuMjAxNyA1NS44MjQ1QzM2LjgyMDEgNTYuMTYwNyAzNi4yNjEzIDU2LjUgMzUuNTQ1NyA1Ni41QzM0LjY3NDIgNTYuNSAzNC4wODkyIDU1Ljk2OTIgMzMuNzc3NCA1NS42MDgzQzMzLjQ1MDIgNTUuMjI5NiAzMy4xNzUyIDU0Ljc1MTEgMzIuOTM5NiA1NC4zMDFDMzIuNzMwNSA1My45MDEzIDMyLjUwODggNTMuNDM2NyAzMi4yNzk3IDUyLjk1NjVDMzIuMjQyOSA1Mi44Nzk0IDMyLjIwNTkgNTIuODAxOSAzMi4xNjg4IDUyLjcyNDNDMzEuODk0MiA1Mi4xNDk5IDMxLjU5NTkgNTEuNTM0IDMxLjI1MzcgNTAuODg2OEMyOS44ODg2IDQ4LjMwNSAyNy44NTM5IDQ1LjI4NzggMjQuMjM0MyA0My4xMzgyQzIzLjUyMiA0Mi43MTUyIDIzLjI4NzUgNDEuNzk0OSAyMy43MTA1IDQxLjA4MjZDMjQuMTMzNSA0MC4zNzAzIDI1LjA1MzkgNDAuMTM1OCAyNS43NjYyIDQwLjU1ODhDMzAuMDU1NiA0My4xMDYyIDMyLjQxNDkgNDYuNjY0NyAzMy45MDU4IDQ5LjQ4NDVDMzQuMjc3NiA1MC4xODc2IDM0LjU5NzMgNTAuODQ4NyAzNC44NzUzIDUxLjQzMDJDMzQuOTE0NyA1MS41MTI0IDM0Ljk1MjkgNTEuNTkyNiAzNC45OTAyIDUxLjY3MDdDMzUuMjIyMiA1Mi4xNTY3IDM1LjQxNjQgNTIuNTYzNyAzNS41OTc4IDUyLjkxMDJDMzUuNjE1MSA1Mi45NDM0IDM1LjYzMjEgNTIuOTc1NCAzNS42NDg1IDUzLjAwNjFDMzYuMDU2NSA1Mi4zNTMxIDM2LjUzNDEgNTEuMzQzNCAzNy4xMzMgNDkuOTQ2OEMzNy40NzgxIDQ5LjE0MTggMzcuODU3MiA0OC4yMjI5IDM4LjI3NjEgNDcuMjA3NEMzOS4yODg2IDQ0Ljc1MzIgNDAuNTMzOSA0MS43MzQ3IDQyLjA5NjEgMzguMzk0OEM0Ni4wNTkxIDI5LjkyMjEgNTAuMDY0MSAyNS44NjQ4IDUyLjE1MzUgMjMuNzQ4MkM1Mi40NDIzIDIzLjQ1NTYgNTIuNjk0NCAyMy4yMDAyIDUyLjkwNDggMjIuOTc1M0M1My40NzA4IDIyLjM3MDMgNTQuNDIgMjIuMzM4NyA1NS4wMjUgMjIuOTA0NlpNMzUuMTk5NCA1My41ODkyQzM1LjE5OTQgNTMuNTg5MiAzNS4yIDUzLjU4ODggMzUuMjAxMiA1My41ODc5QzM1LjIgNTMuNTg4OSAzNS4xOTk0IDUzLjU4OTMgMzUuMTk5NCA1My41ODkyWk0zNi4wNjY2IDUzLjY2ODJDMzYuMDczMiA1My42NzQgMzYuMDc2NSA1My42Nzc1IDM2LjA3NjUgNTMuNjc3N0MzNi4wNzY1IDUzLjY3OCAzNi4wNzMyIDUzLjY3NTEgMzYuMDY2NiA1My42NjgyWiIsZmlsbDpufSksQSgicGF0aCIse2Q6Ik02OS41IDk3QzY5LjUgOTguMTA0NiA1Ni4yOTI0IDk5IDQwIDk5QzIzLjcwNzYgOTkgMTAuNSA5OC4xMDQ2IDEwLjUgOTdDMTAuNSA5NS44OTU0IDIzLjcwNzYgOTUgNDAgOTVDNTYuMjkyNCA5NSA2OS41IDk1Ljg5NTQgNjkuNSA5N1oiLGZpbGw6ImJsYWNrIiwiZmlsbC1vcGFjaXR5IjoiMC4yIn0pKSksQSgicCIse2NsYXNzTmFtZTpzdCxpZDpzdH0scyksYyksQShUdCxudWxsKSkpfX0sbnBzOmZ1bmN0aW9uKHQpe3ZhciBlPXQuYm9yZGVyLG49dC5jbGFzc05hbWUscj0odC5sb2NhbGUsdC5sYWJlbHMpLG89dC5tZXNzYWdlLGk9dC5wcm9wZXJ0aWVzLGE9dC5uZXh0LGM9dC5xdWVzdGlvbklkO3JldHVybiBmdW5jdGlvbih0LHMpe3ZhciB1PXQuYXBwLGw9dS51c2VNb2JpbGVTdHlsaW5nLGY9dS5kZWNrLmluZGV4LGQ9RChbbiwidWwtY2FyZC0tbnBzIixsdF0pLHA9ciYmci5sZWZ0LGg9ciYmci5yaWdodCx2PU0oKShBcnJheSgxMSkpLm1hcCgoZnVuY3Rpb24odCxuKXt2YXIgcj1uLG89Im9wdGlvbi0iLmNvbmNhdChyKSxpPWZ1bmN0aW9uKHQpe3QudGFyZ2V0LnN0eWxlLnpJbmRleD0yLHQudGFyZ2V0LnN0eWxlLmJvcmRlckNvbG9yPWV9LGM9ZnVuY3Rpb24odCl7dC50YXJnZXQuc3R5bGUuekluZGV4PSJhdXRvIix0LnRhcmdldC5zdHlsZS5ib3JkZXJDb2xvcj0iI2U2ZTZlNiJ9LHM9e29uY2xpY2s6ZnVuY3Rpb24oKXtyZXR1cm4gYShyKX0sb25rZXlwcmVzczpmdW5jdGlvbih0KXtyZXR1cm4gZnVuY3Rpb24odCl7MTMhPXQua2V5Q29kZSYmMzIhPXQua2V5Q29kZXx8YShyKX0odCl9fTtyZXR1cm4ib250b3VjaHN0YXJ0ImluIGRvY3VtZW50LmRvY3VtZW50RWxlbWVudD8ocy5vbnRvdWNoc3RhcnQ9aSxzLm9udG91Y2hjYW5jZWw9YyxzLm9udG91Y2htb3ZlPWMscy5vbnRvdWNoZW5kPWMpOihzLm9ubW91c2Vkb3duPWkscy5vbm1vdXNlbGVhdmU9YyksQSgiZGl2IixUKCkoe2NsYXNzTmFtZTpEKFtdLmNvbmNhdChNKCkoZnQoUSxsKSksTSgpKGZ0KCIiLmNvbmNhdChRLCItIikuY29uY2F0KHIpLGwpKSkpfSxzLHsiYXJpYS1sYWJlbGxlZGJ5IjoiIi5jb25jYXQoc3QsIiAiKS5jb25jYXQobykscm9sZToicmFkaW8iLHRhYmluZGV4OjAsaWQ6b30pLHIpfSkpLGc9X3QoaSk7cmV0dXJuIEEoImZvcm0iLHtjbGFzc05hbWU6ZCxrZXk6Y30sTXQoZyxvKSxnLGYlMj09MCYmQSgiZGl2IixudWxsKSxBKCJkaXYiLHtjbGFzc05hbWU6InVsLWNhcmQtLW5wc19fbnVtYmVycyJ9LHYpLEEoImRpdiIse2NsYXNzTmFtZToidWwtY2FyZC0tbnBzX19sYWJlbHMifSxBKCJzcGFuIixudWxsLHApLEEoInNwYW4iLG51bGwsaCkpLEEoVHQsbnVsbCkpfX0sdmlkZW92b2ljZTpmdW5jdGlvbih0KXt2YXIgZT10LmNsYXNzTmFtZSxuPXQubWVzc2FnZSxvPXQucHJvcGVydGllcyxpPXQubmV4dCxhPXQucXVlc3Rpb25JZCxjPXQudXBkYXRlSGVpZ2h0O3JldHVybiBmdW5jdGlvbih0LHMpe3ZhciB1PUQoW2UsJF0pLGw9InVsLWNhcmQtdmlkZW9fX3BsYXllcl9yZWNvcmRlciIsZj0idWwtY2FyZC12aWRlb19fbmV4dF9idXR0b24iLGQ9InVsLXZpZGVvLWludGVydmlldy1mb3JtIixwPSJ1bC1xdWVzdGlvbi1wbGF5ZXItY29udGFpbmVyIixoPSJ1bC1yZWNvcmRlci1wbGF5ZXItY29udGFpbmVyIix2PW8mJm8udmlkZW9VcmwsZz10LmFwcCx5PWcuc3VydmV5SWQsbT1nLnJlc3BvbnNlR3JvdXBVaWQsYj1nLmFwaVVSTCx4PWcudXNlcklkLHc9Zy5ib3JkZXIsRT1nLmVudklkLGo9Zy5oZWFkZXJzO2lmKHQuY2FyZERhdGF8fCh0LmNhcmREYXRhPXt9KSx0LmNhcmREYXRhLnVwbG9hZElkPXZvaWQgMCx0LmNhcmREYXRhLmJ1dHRvblRleHQ9THQobyksdC5jYXJkRGF0YS5za2lwQnV0dG9uVGV4dD1SdChvKSxkb2N1bWVudC5nZXRFbGVtZW50QnlJZChsKSl7ZGUobCx2LHtzdXJ2ZXlJZDp5LHJlc3BvbnNlR3JvdXBVaWQ6bSxxdWVzdGlvbklkOmEsdmlzaXRvcklkOnh9LG8ubWVkaWFUeXBlPT09cGUuTUVESUFfVFlQRV9BVURJTyk7dmFyIEM9ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoZik7Qy5pbm5lclRleHQ9dC5jYXJkRGF0YS5za2lwQnV0dG9uVGV4dCxDLmNsYXNzTGlzdC5hZGQoZ2UpfXZhciBrPWZ1bmN0aW9uKGUsbil7dmFyIHI9ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoZik7ZT09PXBlLlVQTE9BRF9TVEFSVEVEPyh0LmNhcmREYXRhLnVwbG9hZElkPW5bcGUuVVBMT0FEX0lEXSxyLmlubmVyVGV4dD10LmNhcmREYXRhLmJ1dHRvblRleHQsci5jbGFzc0xpc3QucmVtb3ZlKGdlKSxPYmplY3QuYXNzaWduKHIuc3R5bGUse2JhY2tncm91bmRDb2xvcjp3fSkpOmU9PT1wZS5ERUxFVEUmJih0LmNhcmREYXRhLnVwbG9hZElkPW51bGwsci5jbGFzc0xpc3QuYWRkKGdlKSxyLmlubmVyVGV4dD10LmNhcmREYXRhLnNraXBCdXR0b25UZXh0LE9iamVjdC5hc3NpZ24oci5zdHlsZSx7YmFja2dyb3VuZENvbG9yOiIifSkpfSxTPWZ1bmN0aW9uKHQsZSl7dmFyIG49ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiYnV0dG9uIik7cmV0dXJuIG4uY2xhc3NOYW1lPSIiLmNvbmNhdCgidWwtdmlkZW8tYnRuIiwiICIpLmNvbmNhdCh0KSxuLmFkZEV2ZW50TGlzdGVuZXIoImNsaWNrIiwoZnVuY3Rpb24odCl7dC5wcmV2ZW50RGVmYXVsdCgpLHQuc3RvcFByb3BhZ2F0aW9uKCksZnVuY3Rpb24oKXt2YXIgdD0hKGFyZ3VtZW50cy5sZW5ndGg+MCYmdm9pZCAwIT09YXJndW1lbnRzWzBdKXx8YXJndW1lbnRzWzBdLGU9ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQocCksbj1kb2N1bWVudC5nZXRFbGVtZW50QnlJZChoKTt0PyhlLmNsYXNzTGlzdC5yZW1vdmUoenQpLGUuY2xhc3NMaXN0LmFkZChIdCksbi5jbGFzc0xpc3QuYWRkKHp0KSxuLmNsYXNzTGlzdC5yZW1vdmUoSHQpKTooZmUobCksZS5jbGFzc0xpc3QuYWRkKHp0KSxlLmNsYXNzTGlzdC5yZW1vdmUoSHQpLG4uY2xhc3NMaXN0LnJlbW92ZSh6dCksbi5jbGFzc0xpc3QuYWRkKEh0KSl9KGUpfSkpLG59LE89ZnVuY3Rpb24oKXt2YXIgdD1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKTt0LmlkPSJ1bC1xdWVzdGlvbi1wbGF5ZXItY29udGFpbmVyIix0LmNsYXNzTmFtZT0idWwtdmlkZW8tY29udGFpbmVyICIuY29uY2F0KEh0KSx0LmFwcGVuZENoaWxkKCgodCxlLG4scj0hMSxvPSJodHRwczovL2FwaS5zcHJpZy5jb20iKT0+e2NvbnN0IGk9dCtZdCxhPWNlKGkpO3JldHVybiBkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCJzZWN1cml0eXBvbGljeXZpb2xhdGlvbiIsKHQ9PntYdChuZXcgRXJyb3IoYFZvaWNlICYgVmlkZW8gZmVhdHVyZSB2aW9sYXRlcyAke3QudmlvbGF0ZWREaXJlY3RpdmV9IHdlYiBwYWdlIENTUCBwb2xpY2llcyBmb3IgdGhlIHF1ZXN0aW9uIHBsYXllci5gKSwicGxheWVyRGV2aWNlRXJyb3IiLG8se30pfSkpLFF0KGEsWnQsKCgpPT57ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoQnQoaSkpLnJlbW92ZSgpLHNlKGksYSk7Y29uc3QgdD13aW5kb3cudmlkZW9qcyhpLHtwbGF5c2lubGluZTohMCxwbGF5YmFja1JhdGVzOlsuNSwxLDEuNSwyXX0pLG89ZWUodCxbIlBsYXliYWNrUmF0ZU1lbnVCdXR0b24iLCJQbGF5VG9nZ2xlIiwiRnVsbHNjcmVlblRvZ2dsZSJdKSxjPW8uY2hpbGRyZW4oKS5maW5kKCh0PT4iRnVsbHNjcmVlblRvZ2dsZSI9PT10Lm5hbWVfKSk7Yy5oYXNDbGFzcygidmpzLWRpc2FibGVkIikmJmMuaGlkZSgpLG9lKHQsbyxlLG4scil9KSksYX0pKGwse3NyYzp2LHR5cGU6ImFwcGxpY2F0aW9uL3gtbXBlZ1VSTCJ9LHZvaWQgMCxvLm1lZGlhVHlwZT09PXBlLk1FRElBX1RZUEVfQVVESU8sYikpO3ZhciBlPVMoInVsLXJlY29yZC1yZXNwb25zZS1idG4iLCExKTtyZXR1cm4gdC5hcHBlbmRDaGlsZChlKSx0fSxJPWZ1bmN0aW9uKCl7dmFyIHQ9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2Iik7dC5pZD0idWwtcmVjb3JkZXItcGxheWVyLWNvbnRhaW5lciIsdC5jbGFzc05hbWU9InVsLXZpZGVvLWNvbnRhaW5lciAiLmNvbmNhdCh6dCk7dmFyIGU9UygidWwtYmFjay1xdWVzdGlvbi1idG4iLCEwKTtyZXR1cm4gdC5hcHBlbmRDaGlsZChlKSx0LmFwcGVuZENoaWxkKCgodCxlPXt9LG49Imh0dHBzOi8vYXBpLnVzZXJsZWFwLmNvbSIscixvLGksYT0hMSk9Pntjb25zdCBjPXQrJHQscz1jZShjKTtyZXR1cm4gZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigic2VjdXJpdHlwb2xpY3l2aW9sYXRpb24iLCh0PT57Y29uc3QgZT13aW5kb3cudmlkZW9qcyhjKTtYdChuZXcgRXJyb3IoYFZvaWNlICYgVmlkZW8gZmVhdHVyZSB2aW9sYXRlcyAke3QudmlvbGF0ZWREaXJlY3RpdmV9IHdlYiBwYWdlIENTUCBwb2xpY2llcyBmb3IgdGhlIHJlY29yZGVyIHBsYXllci5gKSwicmVjb3JkZXJEZXZpY2VFcnJvciIsbixpLGUucGF5bG9hZC52aXNpdG9ySWQsZS5wYXlsb2FkLmVudklkKX0pKSxRdChzLFp0LmNvbmNhdChHdCksKCgpPT57c2UoYyxzKSxkb2N1bWVudC5nZXRFbGVtZW50QnlJZChCdChjKSkucmVtb3ZlKCksaWUocyxjLGUsbixyLG8saSxhKX0pKSxzfSkobCx7c3VydmV5SWQ6eSxyZXNwb25zZUdyb3VwVWlkOm0scXVlc3Rpb25JZDphLHZpc2l0b3JJZDp4LGVudklkOkV9LGIsaywhMSxmdW5jdGlvbih0KXtmb3IodmFyIGU9MTtlPGFyZ3VtZW50cy5sZW5ndGg7ZSsrKXt2YXIgbj1udWxsIT1hcmd1bWVudHNbZV0/YXJndW1lbnRzW2VdOnt9O2UlMj92ZShPYmplY3QobiksITApLmZvckVhY2goKGZ1bmN0aW9uKGUpe3IoKSh0LGUsbltlXSl9KSk6T2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcnM/T2JqZWN0LmRlZmluZVByb3BlcnRpZXModCxPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycyhuKSk6dmUoT2JqZWN0KG4pKS5mb3JFYWNoKChmdW5jdGlvbihlKXtPYmplY3QuZGVmaW5lUHJvcGVydHkodCxlLE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IobixlKSl9KSl9cmV0dXJuIHR9KHt9LGoseyJ4LXVsLXZpZGVvLXJlY29yZGVyLW9yaWdpbiI6InNkayJ9KSxvLm1lZGlhVHlwZT09PXBlLk1FRElBX1RZUEVfQVVESU8pKSx0fSxUPV90KG8pO3JldHVybiBBKCJkaXYiLHtjbGFzc05hbWU6bHQsa2V5OmF9LEEoImZvcm0iLHtpZDpkLGNsYXNzTmFtZTp1LG9uY3JlYXRlOmZ1bmN0aW9uKCl7dmFyIHQ9bmV3IFJlc2l6ZU9ic2VydmVyKChmdW5jdGlvbih0KXtyZXR1cm4gYygpfSkpLGU9ZG9jdW1lbnQucXVlcnlTZWxlY3RvcigiLiIuY29uY2F0KCQpKTt0Lm9ic2VydmUoZSl9LG9uc3VibWl0OmZ1bmN0aW9uKHQpe3JldHVybiB5ZSh0LGkpfX0sTXQoVCxuKSxULEEoImRpdiIse2lkOiJ1bC1jYXJkLXZvaWNlX192aWRlbyJ9LEEoImRpdiIse2lkOmwsb25jcmVhdGU6ZnVuY3Rpb24oKXt2YXIgdD1kb2N1bWVudC5nZXRFbGVtZW50QnlJZChsKTtyZXR1cm4gdC5hcHBlbmRDaGlsZChPKCkpLHQuYXBwZW5kQ2hpbGQoSSgpKSx0fX0pLEEoImJ1dHRvbiIse2lkOmYsY2xhc3NOYW1lOiJ1bC1jYXJkLXRleHRfX2J1dHRvbiAiLmNvbmNhdChnZSksb25jbGljazpmdW5jdGlvbihlKXtpZihlLnByZXZlbnREZWZhdWx0KCksZS5zdG9wUHJvcGFnYXRpb24oKSxsZShsKSxkb2N1bWVudC5mb3Jtc1tkXSl7dC5jYXJkRGF0YS51cGxvYWRJZD95ZSh7fSxpKTp5ZSh7ZGVsZXRlZEF0OkRhdGUubm93KCl9LGkpO3ZhciBuPWRvY3VtZW50LmdldEVsZW1lbnRCeUlkKHApO2RvY3VtZW50LmdldEVsZW1lbnRCeUlkKGgpLmNsYXNzTGlzdC5hZGQoenQpLG4uY2xhc3NMaXN0LnJlbW92ZSh6dCl9fSxyb2xlOiJidXR0b24ifSxSdChvKSkpLEEoVHQsbnVsbCkpKX19fSxsb2NhbGU6ImVuIixhcGlVUkw6Imh0dHBzOi8vYXBpLnVzZXJsZWFwLmNvbSIsc2hvd1N1cnZleUJyYW5kOiEwLG1hcmtldGluZ1VybDoiaHR0cHM6Ly91c2VybGVhcC5jb20iLHNsdWdOYW1lOm51bGwscmVzcG9uc2VHcm91cFVpZDpudWxsLGhlYWRlcnM6e30saXNQcmV2aWV3OiExLGFuc3dlcnM6W10sY3VzdG9tTWV0YWRhdGE6e319LEJlPXtpbml0OmZ1bmN0aW9uKHQpe3ZhciBlPXQuc3VydmV5SWQsbj10LmZyYW1lLHI9dC5jYXJkcyxvPXQuZW52SWQsaT10LnVzZXJJZCxhPXQubWV0YSxjPXQuYm9yZGVyLHM9dC5mb250RmFtaWx5LHU9dC5mb250RmFtaWx5VVJMLGw9dC5tb2RlLGY9dC5jb250ZXh0LGQ9dC5sb2NhbGUscD10LmFwaVVSTCxoPXQuc2hvd1N1cnZleUJyYW5kLHY9dC5tYXJrZXRpbmdVcmwsZz10LnNsdWdOYW1lLHk9dC5yZXNwb25zZUdyb3VwVWlkLG09dC5oZWFkZXJzLGI9dC5lbmRDYXJkLHg9dC5jb25maWd1cmVFeGl0T25PdmVybGF5Q2xpY2ssdz10LmlzUHJldmlldyxFPXQuYW5zd2VycyxqPXQuY3VzdG9tTWV0YWRhdGEsQz10LmV4cGVyaW1lbnRGbGFncyxrPXQudXNlTW9iaWxlU3R5bGluZyxTPXQuZXZlbnRFbWl0dGVyO3JldHVybiBmdW5jdGlvbih0LE8pe3JldHVybiBQZSh7fSxPLmFkZERlY2soe2RlY2s6cixoYXNFbmRDYXJkOmJ9KSx7c3VydmV5SWQ6ZSxydW5uaW5nOiEwLGZyYW1lOm4sZW52SWQ6byx1c2VySWQ6aSxtZXRhOmEsYm9yZGVyOmMsZm9udEZhbWlseTpzLGZvbnRGYW1pbHlVUkw6dSx0aW1lb3V0OjEsbW9kZTpsLGNvbnRleHQ6Zixsb2NhbGU6ZCxhcGlVUkw6cCxzaG93U3VydmV5QnJhbmQ6aCxtYXJrZXRpbmdVcmw6dixzbHVnTmFtZTpnLHJlc3BvbnNlR3JvdXBVaWQ6eSxoZWFkZXJzOm0sZW5kQ2FyZDpiLGNvbmZpZ3VyZUV4aXRPbk92ZXJsYXlDbGljazp4LGlzUHJldmlldzp3LGFuc3dlcnM6RSxjdXN0b21NZXRhZGF0YTpqLGV4cGVyaW1lbnRGbGFnczpDLHVzZU1vYmlsZVN0eWxpbmc6ayxldmVudEVtaXR0ZXI6U30pfX0sYWRkRGVjazpmdW5jdGlvbih0KXt2YXIgZT10LmRlY2ssbj10Lmhhc0VuZENhcmQ7cmV0dXJuIGZ1bmN0aW9uKHQpe3ZhciByPWUubWFwKChmdW5jdGlvbihlKXtyZXR1cm4gUGUoe30sZSx7Q2FyZDp0LmNhcmRzW2UudHlwZV19KX0pKTtyZXR1cm4gbiYmci5wdXNoKHtDYXJkOnQuY2FyZHMudGhhbmtzfSkse2RlY2s6e2luZGV4OjAsY2FyZHM6cn19fX0sY29tcGxldGU6ZnVuY3Rpb24oKXtyZXR1cm4gZnVuY3Rpb24odCxlKXtyZXR1cm57aW50ZXJ2YWw6c2V0SW50ZXJ2YWwoZS5kZWR1Y3QsMWUzKX19fSxzZWVuOmZ1bmN0aW9uKCl7cmV0dXJuIGZ1bmN0aW9uKHQsZSl7RGUodCl8fGUudHJhY2tIaXN0b3J5KHtldmVudDoic2VlbiIsaXNOZXc6ITB9KX19LGNsb3NlOmZ1bmN0aW9uKCl7cmV0dXJuIGZ1bmN0aW9uKHQsZSl7aWYoIURlKHQpKXJldHVybiBlLnRyYWNrSGlzdG9yeSh7ZXZlbnQ6ImNsb3NlZCJ9KX19LHN1Ym1pdDpmdW5jdGlvbih0KXt2YXIgZT10LnJlc3BvbnNlLG49dC5yZXNwb25zZUdyb3VwVWlkLHI9dC5jb21wbGV0ZWRBdDtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgdD1OKCkoUigpLm1hcmsoKGZ1bmN0aW9uIHQobyl7dmFyIGksYTtyZXR1cm4gUigpLndyYXAoKGZ1bmN0aW9uKHQpe2Zvcig7Oylzd2l0Y2godC5wcmV2PXQubmV4dCl7Y2FzZSAwOmlmKG4mJiFEZShvKSl7dC5uZXh0PTI7YnJlYWt9cmV0dXJuIHQuYWJydXB0KCJyZXR1cm4iKTtjYXNlIDI6cmV0dXJuIGk9e3Jlc3BvbnNlR3JvdXBVaWQ6bixtZXRhOm8ubWV0YSxjdXN0b21NZXRhZGF0YTpvLmN1c3RvbU1ldGFkYXRhLHJlc3BvbnNlczpbZV0sY29tcGxldGVkQXQ6cn0sdC5uZXh0PTUsTWUoIiIuY29uY2F0KG8uYXBpVVJMLCIvc2RrLzEvZW52aXJvbm1lbnRzLyIpLmNvbmNhdChvLmVudklkLCIvdmlzaXRvcnMvIikuY29uY2F0KG8udXNlcklkLCIvcmVzcG9uc2VzL3N1Ym1pdCIpLHtib2R5OkpTT04uc3RyaW5naWZ5KGkpLGhlYWRlcnM6by5oZWFkZXJzLG1ldGhvZDoiUE9TVCJ9KTtjYXNlIDU6aWYoYT10LnNlbnQsZG9jdW1lbnQuYWN0aXZlRWxlbWVudC5ibHVyKCksYS5vayl7dC5uZXh0PTEzO2JyZWFrfWlmKCFhLnJlcG9ydEVycm9yKXt0Lm5leHQ9MTI7YnJlYWt9cmV0dXJuIGNvbnNvbGUud2FybigiW1VzZXJMZWFwXSAoRVJSLTQyNykgRmFpbGVkIHRvIHN1Ym1pdCByZXNwb25zZSIsYS5lcnJvciksdC5uZXh0PTEyLE5lKG8sInN1Ym1pdFJlc3BvbnNlIixhLmVycm9yKTtjYXNlIDEyOnJldHVybiB0LmFicnVwdCgicmV0dXJuIik7Y2FzZSAxMzpjYXNlImVuZCI6cmV0dXJuIHQuc3RvcCgpfX0pLHQpfSkpKTtyZXR1cm4gZnVuY3Rpb24oZSl7cmV0dXJuIHQuYXBwbHkodGhpcyxhcmd1bWVudHMpfX0oKX0sZGVkdWN0OmZ1bmN0aW9uKCl7cmV0dXJuIGZ1bmN0aW9uKHQpe3ZhciBlPXQudGltZW91dC0xO3JldHVybiBlPD0wPyhjbGVhckludGVydmFsKHQuaW50ZXJ2YWwpLFN0LmVuYWJsZSgpLHtydW5uaW5nOiExLGludGVydmFsOm51bGwsdGltZW91dDplfSk6e3RpbWVvdXQ6ZX19fSxuZXh0OmZ1bmN0aW9uKHQpe3JldHVybiBmdW5jdGlvbihlLG4pe3ZhciByPURhdGUubm93KCksbz1lLmRlY2ssaT1vLmNhcmRzLGE9by5pbmRleCxjPWlbYV0scz1jLm5hbWUsdT1jLnR5cGUsbD1lLnJlc3BvbnNlR3JvdXBVaWQsZj0ib2JqZWN0Ij09PUF0KCkodC5kYXRhKT90LmRhdGE6e3ZhbHVlOnQuZGF0YX0sZD1mLnZhbHVlO2lbYV0udmFsdWU9ZCxmLnF1ZXN0aW9uSWQ9cyxmLmFuc3dlcmVkQXQ9cjt2YXIgcD17cmVzcG9uc2U6ZixyZXNwb25zZUdyb3VwVWlkOmwsdHlwZTp1fSxoPSJtdWx0aXBsZWNob2ljZSI9PT11P09iamVjdC52YWx1ZXMoZCkuZmluZCgoZnVuY3Rpb24odCl7cmV0dXJuITEhPT10fSkpOmQsdj0idmlkZW92b2ljZSIhPT11fHwhZi5kZWxldGVkQXQ7Im11bHRpcGxlc2VsZWN0Ij09PXUmJihoPWlbYV0ucHJvcHMub3B0aW9ucy5yZWR1Y2UoKGZ1bmN0aW9uKHQsZSl7cmV0dXJuIGRbZS5pZF0mJnQucHVzaChlLnZhbHVlKSx0fSksW10pKTt2YXIgZz1mdW5jdGlvbih0LGUsbixyKXt2YXIgbz0hKGFyZ3VtZW50cy5sZW5ndGg+NCYmdm9pZCAwIT09YXJndW1lbnRzWzRdKXx8YXJndW1lbnRzWzRdO2lmKGU+PXQubGVuZ3RofHxlPDApcmV0dXJuIG51bGw7Zm9yKHZhciBpPXRbZV0mJnRbZV0ucHJvcHMmJnRbZV0ucHJvcHMucm91dGluZ09wdGlvbnN8fFtdLGE9TWF0aC5taW4oZSsxLHQubGVuZ3RoLTEpLGM9bnVsbCxzPTA7czxpLmxlbmd0aDtzKyspe3ZhciB1PWlbc10sbD11LmNvbXBhcmF0b3IsZj11LnRhcmdldCxkPXUudmFsdWU7aWYoImFuc3dlcmVkIj09PWwmJm8pe2M9cGFyc2VJbnQoZiwxMCk7YnJlYWt9aWYobWVbbF0mJm1lW2xdKG4sZCkpe2M9cGFyc2VJbnQoZiwxMCk7YnJlYWt9fXJldHVybiBudWxsPT09YyYmZT09PXQubGVuZ3RoLTE/bnVsbDotMT09PWM/cj90Lmxlbmd0aC0xOm51bGw6bnVsbD09PWM/YTpjfShpLGEsaCwhIXQuZW5kQ2FyZCx2KTtpZihudWxsPT09ZylyZXR1cm4gcC5jb21wbGV0ZWRBdD1yLG4uc3VibWl0KHApLHZvaWQgdC5jb21wbGV0ZVN1cnZleSgpO2lbZ10uQ2FyZD09PWUuY2FyZHMudGhhbmtzJiYocC5jb21wbGV0ZWRBdD1yKTt2YXIgeT1uLnN1Ym1pdChwKTtyZXR1cm4gaVtnXS5DYXJkIT1lLmNhcmRzLnRoYW5rcyYmeS5maW5hbGx5KChmdW5jdGlvbigpe24udHJhY2tIaXN0b3J5KHtldmVudDoic2VlbiIsaW5kZXg6Z30pfSkpLHtkZWNrOntjYXJkczppLGluZGV4Omd9fX19LHRyYWNrSGlzdG9yeTpmdW5jdGlvbih0KXt2YXIgZT10LmV2ZW50LG49dC5pbmRleCxyPXQuaXNOZXcsbz12b2lkIDAhPT1yJiZyO3JldHVybiBmdW5jdGlvbigpe3ZhciB0PU4oKShSKCkubWFyaygoZnVuY3Rpb24gdChyKXt2YXIgaSxhLGMscyx1LGw7cmV0dXJuIFIoKS53cmFwKChmdW5jdGlvbih0KXtmb3IoOzspc3dpdGNoKHQucHJldj10Lm5leHQpe2Nhc2UgMDppZighRGUocikpe3QubmV4dD0yO2JyZWFrfXJldHVybiB0LmFicnVwdCgicmV0dXJuIik7Y2FzZSAyOnJldHVybiBpPXIuZGVjayxhPWkuY2FyZHMsYz1pLmluZGV4LHM9dm9pZCAwIT09bj9hW25dOmFbY10sdT17c2lkOnIuc3VydmV5SWQscWlkOnMubmFtZSxhY3Rpb246ZSx2aWQ6ci51c2VySWQsZWlkOnIuZW52SWQsaXNOZXc6byxyZXNwb25zZUdyb3VwVWlkOnIucmVzcG9uc2VHcm91cFVpZH0sdC5uZXh0PTcsTWUoIiIuY29uY2F0KHIuYXBpVVJMLCIvc2RrLzEvdmlzaXRvcnMvIikuY29uY2F0KHIudXNlcklkLCIvc3VydmV5cy8iKS5jb25jYXQoci5zdXJ2ZXlJZCwiL2hpc3RvcnkiKSx7Ym9keTpKU09OLnN0cmluZ2lmeSh1KSxoZWFkZXJzOnIuaGVhZGVycyxtZXRob2Q6IlBPU1QifSk7Y2FzZSA3OmlmKChsPXQuc2VudCkub2spe3QubmV4dD0xMzticmVha31pZighbC5yZXBvcnRFcnJvcil7dC5uZXh0PTEzO2JyZWFrfXJldHVybiBjb25zb2xlLndhcm4oIltVc2VyTGVhcF0gKEVSUi00MjgpIEZhaWxlZCB0byB0cmFjayBzdXJ2ZXkgZXZlbnQiLGwuZXJyb3IpLHQubmV4dD0xMyxOZShyLCJ0cmFja0hpc3RvcnkiLGwuZXJyb3IpO2Nhc2UgMTM6Y2FzZSJlbmQiOnJldHVybiB0LnN0b3AoKX19KSx0KX0pKSk7cmV0dXJuIGZ1bmN0aW9uKGUpe3JldHVybiB0LmFwcGx5KHRoaXMsYXJndW1lbnRzKX19KCl9fTtmdW5jdGlvbiB6ZSh0LGUpe3ZhciBuPU9iamVjdC5rZXlzKHQpO2lmKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpe3ZhciByPU9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHModCk7ZSYmKHI9ci5maWx0ZXIoKGZ1bmN0aW9uKGUpe3JldHVybiBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHQsZSkuZW51bWVyYWJsZX0pKSksbi5wdXNoLmFwcGx5KG4scil9cmV0dXJuIG59ZnVuY3Rpb24gSGUodCl7Zm9yKHZhciBlPTE7ZTxhcmd1bWVudHMubGVuZ3RoO2UrKyl7dmFyIG49bnVsbCE9YXJndW1lbnRzW2VdP2FyZ3VtZW50c1tlXTp7fTtlJTI/emUoT2JqZWN0KG4pLCEwKS5mb3JFYWNoKChmdW5jdGlvbihlKXtyKCkodCxlLG5bZV0pfSkpOk9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzP09iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKHQsT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcnMobikpOnplKE9iamVjdChuKSkuZm9yRWFjaCgoZnVuY3Rpb24oZSl7T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsZSxPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKG4sZSkpfSkpfXJldHVybiB0fXZhciBWZT17aW5pdDpmdW5jdGlvbih0KXtyZXR1cm4gZnVuY3Rpb24oZSl7cmV0dXJuIEhlKHt9LGUse3NlbGVjdGVkT3B0aW9uczp0fSl9fSxyZXNldDpmdW5jdGlvbigpe3JldHVybiBmdW5jdGlvbih0KXtyZXR1cm4gSGUoe30sdCx7c2VsZWN0ZWRPcHRpb25zOnt9fSl9fSx1cGRhdGVTZWxlY3RlZDpmdW5jdGlvbih0KXtyZXR1cm4gZnVuY3Rpb24oZSl7aWYobnVsbCE9dCl7dmFyIG49T2JqZWN0LmFzc2lnbihlLnNlbGVjdGVkT3B0aW9ucyk7cmV0dXJuIG5bdF09IW5bdF0sSGUoe30sZSx7c2VsZWN0ZWRPcHRpb25zOm59KX19fX07ZnVuY3Rpb24gcWUodCxlKXt2YXIgbj1PYmplY3Qua2V5cyh0KTtpZihPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKXt2YXIgcj1PYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHQpO2UmJihyPXIuZmlsdGVyKChmdW5jdGlvbihlKXtyZXR1cm4gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcih0LGUpLmVudW1lcmFibGV9KSkpLG4ucHVzaC5hcHBseShuLHIpfXJldHVybiBufXZhciBXZT17b25UZXh0Q2hhbmdlOmZ1bmN0aW9uKHQpe3JldHVybiBmdW5jdGlvbihlKXtyZXR1cm4gZnVuY3Rpb24odCl7Zm9yKHZhciBlPTE7ZTxhcmd1bWVudHMubGVuZ3RoO2UrKyl7dmFyIG49bnVsbCE9YXJndW1lbnRzW2VdP2FyZ3VtZW50c1tlXTp7fTtlJTI/cWUoT2JqZWN0KG4pLCEwKS5mb3JFYWNoKChmdW5jdGlvbihlKXtyKCkodCxlLG5bZV0pfSkpOk9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzP09iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKHQsT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcnMobikpOnFlKE9iamVjdChuKSkuZm9yRWFjaCgoZnVuY3Rpb24oZSl7T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsZSxPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKG4sZSkpfSkpfXJldHVybiB0fSh7fSxlLHt2YWx1ZTp0fSl9fX0sR2U9InN1cnZleS5hcHBlYXJlZCIsWmU9InN1cnZleS5mYWRpbmdPdXQiLFllPSJzdXJ2ZXkud2lsbENsb3NlIiwkZT17VkVSSUZZX1ZJRVdfVkVSU0lPTjoidmVyaWZ5LnZpZXcudmVyc2lvbiJ9LEtlPXtWSUVXX1ZFUlNJT046InZpZXcudmVyc2lvbiJ9LEplPSJjbG9zZS5jbGljayIsWGU9InN1cnZleS5jb21wbGV0ZWQiO2Z1bmN0aW9uIFFlKHQpe3JldHVybiJ3ZWIiIT09dFsidXNlcmxlYXAtcGxhdGZvcm0iXX1mdW5jdGlvbiB0bih0LGUpe3ZhciBuPU9iamVjdC5rZXlzKHQpO2lmKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpe3ZhciByPU9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHModCk7ZSYmKHI9ci5maWx0ZXIoKGZ1bmN0aW9uKGUpe3JldHVybiBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHQsZSkuZW51bWVyYWJsZX0pKSksbi5wdXNoLmFwcGx5KG4scil9cmV0dXJuIG59dmFyIGVuPXtpbml0OmZ1bmN0aW9uKHQpe3ZhciBlPXQuZnJhbWUsbj10LmNhcmRzLHI9dC5zdXJ2ZXlJZCxvPXQuZW52SWQsaT10LnVzZXJJZCxhPXQubWV0YSxjPXQuYm9yZGVyLHM9dC5mb250RmFtaWx5LHU9dC5mb250RmFtaWx5VVJMLGw9dC5jb250ZXh0LGY9dC5sb2NhbGUsZD10LmFwaVVSTCxwPXQuc2hvd1N1cnZleUJyYW5kLGg9dC5tYXJrZXRpbmdVcmwsdj10LnNsdWdOYW1lLGc9dC5yZXNwb25zZUdyb3VwVWlkLHk9dC5oZWFkZXJzLG09dC5lbmRDYXJkLGI9dC5jb25maWd1cmVFeGl0T25PdmVybGF5Q2xpY2sseD10LmlzUHJldmlldyx3PXQuYW5zd2VycyxFPXQuY3VzdG9tTWV0YWRhdGEsaj10LmV4cGVyaW1lbnRGbGFncyxDPXQudXNlTW9iaWxlU3R5bGluZyxrPXQubW9iaWxlUGxhdGZvcm0sUz10LmV2ZW50RW1pdHRlcjtyZXR1cm4gZnVuY3Rpb24odCxPKXt2YXIgQT1RZSh5KT93aW5kb3cuZG9jdW1lbnQ6d2luZG93LnBhcmVudC5kb2N1bWVudDtPLmFwcC5pbml0KHtmcmFtZTpBLmdldEVsZW1lbnRCeUlkKGUpLHN1cnZleUlkOnIsY2FyZHM6bixlbnZJZDpvLHVzZXJJZDppLG1ldGE6YSxib3JkZXI6Yyxmb250RmFtaWx5OnMsZm9udEZhbWlseVVSTDp1LGNvbnRleHQ6bCxsb2NhbGU6ZixhcGlVUkw6ZCxzaG93U3VydmV5QnJhbmQ6cCxtYXJrZXRpbmdVcmw6aCxzbHVnTmFtZTp2LHJlc3BvbnNlR3JvdXBVaWQ6ZyxoZWFkZXJzOnksZW5kQ2FyZDptLGNvbmZpZ3VyZUV4aXRPbk92ZXJsYXlDbGljazpiLGlzUHJldmlldzp4LGFuc3dlcnM6dyxjdXN0b21NZXRhZGF0YTpFLGV4cGVyaW1lbnRGbGFnczpqLHVzZU1vYmlsZVN0eWxpbmc6Qyxtb2JpbGVQbGF0Zm9ybTprLGV2ZW50RW1pdHRlcjpTfSksTy5hcHAuc2VlbigpfX0sdXBkYXRlOmZ1bmN0aW9uKHQpe3JldHVybiBmdW5jdGlvbihlKXt2YXIgbj1lLmFwcCxyPWRvY3VtZW50LmdldEVsZW1lbnRCeUlkKHQpLmNsYXNzTGlzdDtuLnJ1bm5pbmcmJiFyLmNvbnRhaW5zKCJ1bC1hcHAtLXZpc2libGUiKSYmKFFlKG4uaGVhZGVycyk/ci5hZGQoInVsLWFwcC0tdmlzaWJsZSIpOihyLmFkZCgidWwtYXBwLS1vdmVybGF5Iiksc2V0VGltZW91dCgoZnVuY3Rpb24oKXtyLmFkZCgidWwtYXBwLS12aXNpYmxlIil9KSwxMDApKSxuLmV2ZW50RW1pdHRlciYmbi5ldmVudEVtaXR0ZXIuZW1pdChHZSkpLFFlKG4uaGVhZGVycyl8fG4uZnJhbWUuc2V0SGVpZ2h0KGZ1bmN0aW9uKHQpe3ZhciBlPXQucXVlcnlTZWxlY3RvcigiLiIuY29uY2F0KFkpKTtyZXR1cm4oZT9lLnNjcm9sbEhlaWdodDo2MDApKyhlJiZlLnBhcmVudEVsZW1lbnQ/ZS5wYXJlbnRFbGVtZW50LmNsaWVudEhlaWdodC1lLmNsaWVudEhlaWdodDowKX0oZG9jdW1lbnQpKX19LGZhZGVvdXQ6ZnVuY3Rpb24odCl7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIGU9TigpKFIoKS5tYXJrKChmdW5jdGlvbiBlKG4pe3ZhciByLG87cmV0dXJuIFIoKS53cmFwKChmdW5jdGlvbihlKXtmb3IoOzspc3dpdGNoKGUucHJldj1lLm5leHQpe2Nhc2UgMDppZihyPW4uYXBwLG89ci5ldmVudEVtaXR0ZXIsIVFlKHIuaGVhZGVycykpe2UubmV4dD00O2JyZWFrfXJldHVybiBlLmFicnVwdCgicmV0dXJuIik7Y2FzZSA0OnJldHVybiBvLmVtaXQoWmUpLGUuYWJydXB0KCJyZXR1cm4iLG5ldyBQcm9taXNlKChmdW5jdGlvbihlKXt2YXIgbj1kb2N1bWVudC5nZXRFbGVtZW50QnlJZCh0KTtuLmFkZEV2ZW50TGlzdGVuZXIoInRyYW5zaXRpb25lbmQiLChmdW5jdGlvbih0KXsib3BhY2l0eSI9PT10LnByb3BlcnR5TmFtZSYmZSgpfSkpLG4uY2xhc3NMaXN0LnJlbW92ZSgidWwtYXBwLS12aXNpYmxlIil9KSkpO2Nhc2UgNjpjYXNlImVuZCI6cmV0dXJuIGUuc3RvcCgpfX0pLGUpfSkpKTtyZXR1cm4gZnVuY3Rpb24odCl7cmV0dXJuIGUuYXBwbHkodGhpcyxhcmd1bWVudHMpfX0oKX0scmVtb3ZlOmZ1bmN0aW9uKHQpe3ZhciBlPXQuaW5pdGlhdG9yO3JldHVybiBmdW5jdGlvbih0KXt2YXIgbj10LmFwcCxyPW4uZnJhbWUsbz1uLmV2ZW50RW1pdHRlcjtbImlvcyIsImFuZHJvaWQiXS5pbmNsdWRlcyhuLmhlYWRlcnNbInVzZXJsZWFwLXBsYXRmb3JtIl0pJiZvLmVtaXQoWWUse2luaXRpYXRvcjplfSksUWUobi5oZWFkZXJzKXx8KG8uZW1pdChZZSx7aW5pdGlhdG9yOmV9KSxyLnJlbW92ZSgpKX19LGNsb3NlOmZ1bmN0aW9uKHQpe3JldHVybiBmdW5jdGlvbigpe3ZhciBlPU4oKShSKCkubWFyaygoZnVuY3Rpb24gZShuLHIpe3JldHVybiBSKCkud3JhcCgoZnVuY3Rpb24oZSl7Zm9yKDs7KXN3aXRjaChlLnByZXY9ZS5uZXh0KXtjYXNlIDA6cmV0dXJuIGUubmV4dD0yLHIuZmFkZW91dCh0KTtjYXNlIDI6cmV0dXJuIGUubmV4dD00LHIuYXBwLmNsb3NlKCk7Y2FzZSA0OlN0LmVuYWJsZSgpLHIucmVtb3ZlKHtpbml0aWF0b3I6SmV9KTtjYXNlIDY6Y2FzZSJlbmQiOnJldHVybiBlLnN0b3AoKX19KSxlKX0pKSk7cmV0dXJuIGZ1bmN0aW9uKHQsbil7cmV0dXJuIGUuYXBwbHkodGhpcyxhcmd1bWVudHMpfX0oKX0sZGVzdHJveTpmdW5jdGlvbih0KXtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgZT1OKCkoUigpLm1hcmsoKGZ1bmN0aW9uIGUobixyKXtyZXR1cm4gUigpLndyYXAoKGZ1bmN0aW9uKGUpe2Zvcig7Oylzd2l0Y2goZS5wcmV2PWUubmV4dCl7Y2FzZSAwOnJldHVybiBlLm5leHQ9MixyLmZhZGVvdXQodCk7Y2FzZSAyOlN0LmVuYWJsZSgpLHIucmVtb3ZlKHtpbml0aWF0b3I6WGV9KTtjYXNlIDQ6Y2FzZSJlbmQiOnJldHVybiBlLnN0b3AoKX19KSxlKX0pKSk7cmV0dXJuIGZ1bmN0aW9uKHQsbil7cmV0dXJuIGUuYXBwbHkodGhpcyxhcmd1bWVudHMpfX0oKX19LG5uPWZ1bmN0aW9uKHQpe2Zvcih2YXIgZT0xO2U8YXJndW1lbnRzLmxlbmd0aDtlKyspe3ZhciBuPW51bGwhPWFyZ3VtZW50c1tlXT9hcmd1bWVudHNbZV06e307ZSUyP3RuKE9iamVjdChuKSwhMCkuZm9yRWFjaCgoZnVuY3Rpb24oZSl7cigpKHQsZSxuW2VdKX0pKTpPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycz9PYmplY3QuZGVmaW5lUHJvcGVydGllcyh0LE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzKG4pKTp0bihPYmplY3QobikpLmZvckVhY2goKGZ1bmN0aW9uKGUpe09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LGUsT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihuLGUpKX0pKX1yZXR1cm4gdH0oe2FwcDpCZSxtdWx0aXBsZXNlbGVjdDpWZSxvcGVuVGV4dDpXZX0sZW4pLHJuPXthcHA6VWUsbXVsdGlwbGVzZWxlY3Q6e3NlbGVjdGVkT3B0aW9uczp7fX0sb3BlblRleHQ6e3ZhbHVlOiIifX07dmFyIG9uPXdpbmRvdy5fX2NmZyxhbj1vbi5mcmFtZSxjbj1vbi5lbnZJZCxzbj1vbi5zdXJ2ZXlJZCx1bj1vbi51c2VySWQsbG49b24uY2FyZHMsZm49b24ubW9kZSxkbj1vbi5ib3JkZXIscG49dm9pZCAwPT09ZG4/IiM2NjY0ZjciOmRuLGhuPW9uLmNvbnRleHQsdm49b24ubG9jYWxlLGduPW9uLmZvbnRGYW1pbHkseW49b24uZm9udEZhbWlseVVSTCxtbj1vbi5hcGlVUkwsYm49b24uc2hvd1N1cnZleUJyYW5kLHhuPW9uLm1hcmtldGluZ1VybCx3bj1vbi5zbHVnTmFtZSxFbj1vbi5yZXNwb25zZUdyb3VwVWlkLGpuPW9uLmhlYWRlcnMsQ249b24uZW5kQ2FyZCxrbj1vbi5jdXN0b21TdHlsZXMsU249b24uY29uZmlndXJlRXhpdE9uT3ZlcmxheUNsaWNrLE9uPW9uLmlzUHJldmlldyxBbj1vbi5hbnN3ZXJzLEluPW9uLmN1c3RvbU1ldGFkYXRhLFRuPW9uLmV4cGVyaW1lbnRGbGFncyxfbj1vbi51c2VNb2JpbGVTdHlsaW5nLE1uPW9uLm1vYmlsZVBsYXRmb3JtLExuPW9uLmV2ZW50RW1pdHRlcixSbj1kb2N1bWVudC5oZWFkLFBuPUxufHxhbi5ldmVudEVtaXR0ZXI7UG4mJlBuLmVtaXQoJGUuVkVSSUZZX1ZJRVdfVkVSU0lPTixyKCkoe30sS2UuVklFV19WRVJTSU9OLCIyLjE0LjIiKSk7dmFyIE5uPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInN0eWxlIik7aWYoTm4udHlwZT0idGV4dC9jc3MiLE5uLmFwcGVuZENoaWxkKGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKHl0KCkpKSxSbi5hcHBlbmRDaGlsZChObiksa24mJmZ1bmN0aW9uKHQsZSl7dmFyIG49dC5jcmVhdGVFbGVtZW50KCJzdHlsZSIpO24udHlwZT0idGV4dC9jc3MiLG4udGV4dENvbnRlbnQ9ZSxuLmlkPVosdC5oZWFkLmFwcGVuZENoaWxkKG4pfShkb2N1bWVudCxrbiksZ24mJnluJiZwYXJlbnQpe3ZhciBGbj1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJsaW5rIik7Rm4ucmVsPSJzdHlsZXNoZWV0IixGbi5ocmVmPXluLFJuLmFwcGVuZENoaWxkKEZuKX12YXIgRG49ZnVuY3Rpb24odCxlLG4scil7dmFyIG8saT1bXS5tYXAsYT1yJiZyLmNoaWxkcmVuWzBdfHxudWxsLGM9YSYmZnVuY3Rpb24gdChlKXtyZXR1cm57bm9kZU5hbWU6ZS5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpLGF0dHJpYnV0ZXM6e30sY2hpbGRyZW46aS5jYWxsKGUuY2hpbGROb2RlcywoZnVuY3Rpb24oZSl7cmV0dXJuIDM9PT1lLm5vZGVUeXBlP2Uubm9kZVZhbHVlOnQoZSl9KSl9fShhKSxzPVtdLHU9ITAsbD12KHQpLGY9ZnVuY3Rpb24gdChlLG4scil7Zm9yKHZhciBvIGluIHIpImZ1bmN0aW9uIj09dHlwZW9mIHJbb10/ZnVuY3Rpb24odCxvKXtyW3RdPWZ1bmN0aW9uKHQpe3ZhciBpPW8odCk7cmV0dXJuImZ1bmN0aW9uIj09dHlwZW9mIGkmJihpPWkoeShlLGwpLHIpKSxpJiZpIT09KG49eShlLGwpKSYmIWkudGhlbiYmaChsPWcoZSx2KG4saSksbCkpLGl9fShvLHJbb10pOnQoZS5jb25jYXQobyksbltvXT12KG5bb10pLHJbb109dihyW29dKSk7cmV0dXJuIHJ9KFtdLGwsdihlKSk7cmV0dXJuIGgoKSxmO2Z1bmN0aW9uIGQodCl7cmV0dXJuImZ1bmN0aW9uIj09dHlwZW9mIHQ/ZCh0KGwsZikpOm51bGwhPXQ/dDoiIn1mdW5jdGlvbiBwKCl7bz0hbzt2YXIgdD1kKG4pO2ZvcihyJiYhbyYmKGE9QyhyLGEsYyxjPXQpKSx1PSExO3MubGVuZ3RoOylzLnBvcCgpKCl9ZnVuY3Rpb24gaCgpe298fChvPSEwLHNldFRpbWVvdXQocCkpfWZ1bmN0aW9uIHYodCxlKXt2YXIgbj17fTtmb3IodmFyIHIgaW4gdCluW3JdPXRbcl07Zm9yKHZhciByIGluIGUpbltyXT1lW3JdO3JldHVybiBufWZ1bmN0aW9uIGcodCxlLG4pe3ZhciByPXt9O3JldHVybiB0Lmxlbmd0aD8oclt0WzBdXT10Lmxlbmd0aD4xP2codC5zbGljZSgxKSxlLG5bdFswXV0pOmUsdihuLHIpKTplfWZ1bmN0aW9uIHkodCxlKXtmb3IodmFyIG49MDtuPHQubGVuZ3RoOyllPWVbdFtuKytdXTtyZXR1cm4gZX1mdW5jdGlvbiBtKHQpe3JldHVybiB0P3Qua2V5Om51bGx9ZnVuY3Rpb24gYih0KXtyZXR1cm4gdC5jdXJyZW50VGFyZ2V0LmV2ZW50c1t0LnR5cGVdKHQpfWZ1bmN0aW9uIHgodCxlLG4scixvKXtpZigia2V5Ij09PWUpO2Vsc2UgaWYoInN0eWxlIj09PWUpaWYoInN0cmluZyI9PXR5cGVvZiBuKXQuc3R5bGUuY3NzVGV4dD1uO2Vsc2UgZm9yKHZhciBpIGluInN0cmluZyI9PXR5cGVvZiByJiYocj10LnN0eWxlLmNzc1RleHQ9IiIpLHYocixuKSl7dmFyIGE9bnVsbD09bnx8bnVsbD09bltpXT8iIjpuW2ldOyItIj09PWlbMF0/dC5zdHlsZS5zZXRQcm9wZXJ0eShpLGEpOnQuc3R5bGVbaV09YX1lbHNlIm8iPT09ZVswXSYmIm4iPT09ZVsxXT8oZT1lLnNsaWNlKDIpLHQuZXZlbnRzP3J8fChyPXQuZXZlbnRzW2VdKTp0LmV2ZW50cz17fSx0LmV2ZW50c1tlXT1uLG4/cnx8dC5hZGRFdmVudExpc3RlbmVyKGUsYik6dC5yZW1vdmVFdmVudExpc3RlbmVyKGUsYikpOmUgaW4gdCYmImxpc3QiIT09ZSYmInR5cGUiIT09ZSYmImRyYWdnYWJsZSIhPT1lJiYic3BlbGxjaGVjayIhPT1lJiYidHJhbnNsYXRlIiE9PWUmJiFvP3RbZV09bnVsbD09bj8iIjpuOm51bGwhPW4mJiExIT09biYmdC5zZXRBdHRyaWJ1dGUoZSxuKSxudWxsIT1uJiYhMSE9PW58fHQucmVtb3ZlQXR0cmlidXRlKGUpfWZ1bmN0aW9uIHcodCxlKXt2YXIgbj0ic3RyaW5nIj09dHlwZW9mIHR8fCJudW1iZXIiPT10eXBlb2YgdD9kb2N1bWVudC5jcmVhdGVUZXh0Tm9kZSh0KTooZT1lfHwic3ZnIj09PXQubm9kZU5hbWUpP2RvY3VtZW50LmNyZWF0ZUVsZW1lbnROUygiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciLHQubm9kZU5hbWUpOmRvY3VtZW50LmNyZWF0ZUVsZW1lbnQodC5ub2RlTmFtZSkscj10LmF0dHJpYnV0ZXM7aWYocil7ci5vbmNyZWF0ZSYmcy5wdXNoKChmdW5jdGlvbigpe3Iub25jcmVhdGUobil9KSk7Zm9yKHZhciBvPTA7bzx0LmNoaWxkcmVuLmxlbmd0aDtvKyspbi5hcHBlbmRDaGlsZCh3KHQuY2hpbGRyZW5bb109ZCh0LmNoaWxkcmVuW29dKSxlKSk7Zm9yKHZhciBpIGluIHIpeChuLGkscltpXSxudWxsLGUpfXJldHVybiBufWZ1bmN0aW9uIEUodCxlKXt2YXIgbj1lLmF0dHJpYnV0ZXM7aWYobil7Zm9yKHZhciByPTA7cjxlLmNoaWxkcmVuLmxlbmd0aDtyKyspRSh0LmNoaWxkTm9kZXNbcl0sZS5jaGlsZHJlbltyXSk7bi5vbmRlc3Ryb3kmJm4ub25kZXN0cm95KHQpfXJldHVybiB0fWZ1bmN0aW9uIGoodCxlLG4pe2Z1bmN0aW9uIHIoKXt0LnJlbW92ZUNoaWxkKEUoZSxuKSl9dmFyIG89bi5hdHRyaWJ1dGVzJiZuLmF0dHJpYnV0ZXMub25yZW1vdmU7bz9vKGUscik6cigpfWZ1bmN0aW9uIEModCxlLG4scixvKXtpZihyPT09bik7ZWxzZSBpZihudWxsPT1ufHxuLm5vZGVOYW1lIT09ci5ub2RlTmFtZSl7dmFyIGk9dyhyLG8pO3QuaW5zZXJ0QmVmb3JlKGksZSksbnVsbCE9biYmaih0LGUsbiksZT1pfWVsc2UgaWYobnVsbD09bi5ub2RlTmFtZSllLm5vZGVWYWx1ZT1yO2Vsc2V7IWZ1bmN0aW9uKHQsZSxuLHIpe2Zvcih2YXIgbyBpbiB2KGUsbikpbltvXSE9PSgidmFsdWUiPT09b3x8ImNoZWNrZWQiPT09bz90W29dOmVbb10pJiZ4KHQsbyxuW29dLGVbb10scik7dmFyIGk9dT9uLm9uY3JlYXRlOm4ub251cGRhdGU7aSYmcy5wdXNoKChmdW5jdGlvbigpe2kodCxlKX0pKX0oZSxuLmF0dHJpYnV0ZXMsci5hdHRyaWJ1dGVzLG89b3x8InN2ZyI9PT1yLm5vZGVOYW1lKTtmb3IodmFyIGE9e30sYz17fSxsPVtdLGY9bi5jaGlsZHJlbixwPXIuY2hpbGRyZW4saD0wO2g8Zi5sZW5ndGg7aCsrKXtsW2hdPWUuY2hpbGROb2Rlc1toXSxudWxsIT0oeT1tKGZbaF0pKSYmKGFbeV09W2xbaF0sZltoXV0pfWg9MDtmb3IodmFyIGc9MDtnPHAubGVuZ3RoOyl7dmFyIHk9bShmW2hdKSxiPW0ocFtnXT1kKHBbZ10pKTtpZihjW3ldKWgrKztlbHNlIGlmKG51bGw9PWJ8fGIhPT1tKGZbaCsxXSkpaWYobnVsbD09Ynx8dSludWxsPT15JiYoQyhlLGxbaF0sZltoXSxwW2ddLG8pLGcrKyksaCsrO2Vsc2V7dmFyIEU9YVtiXXx8W107eT09PWI/KEMoZSxFWzBdLEVbMV0scFtnXSxvKSxoKyspOkVbMF0/QyhlLGUuaW5zZXJ0QmVmb3JlKEVbMF0sbFtoXSksRVsxXSxwW2ddLG8pOkMoZSxsW2hdLG51bGwscFtnXSxvKSxjW2JdPXBbZ10sZysrfWVsc2UgbnVsbD09eSYmaihlLGxbaF0sZltoXSksaCsrfWZvcig7aDxmLmxlbmd0aDspbnVsbD09bShmW2hdKSYmaihlLGxbaF0sZltoXSksaCsrO2Zvcih2YXIgaCBpbiBhKWNbaF18fGooZSxhW2hdWzBdLGFbaF1bMV0pfXJldHVybiBlfX0ocm4sbm4sdnQsUWUoam4pP3dpbmRvdy5kb2N1bWVudC5nZXRFbGVtZW50QnlJZChhbik6ZG9jdW1lbnQuYm9keSk7RG4uaW5pdCh7c3VydmV5SWQ6c24sZnJhbWU6YW4sZW52SWQ6Y24sdXNlcklkOnVuLGNhcmRzOmxuLG1vZGU6Zm4sbWV0YTpmdW5jdGlvbih0KXt2YXIgZT10LmRpcmVjdEVtYmVkLG49dC5tb2RlLHI9dm9pZCAwPT09bj9udWxsOm4sbz1lP3dpbmRvdzp3aW5kb3cucGFyZW50LGk9by5kb2N1bWVudC5kb2N1bWVudEVsZW1lbnQ7cmV0dXJue21vZGU6cixzdzpvLnNjcmVlbi53aWR0aCxzaDpvLnNjcmVlbi5oZWlnaHQsY3c6aS5jbGllbnRXaWR0aCxjaDppLmNsaWVudEhlaWdodCxwOm8ubG9jYXRpb24uaHJlZixsOm8ubmF2aWdhdG9yLmxhbmd1YWdlfX0oe21vZGU6Zm4sZGlyZWN0RW1iZWQ6UWUoam4pfSksYm9yZGVyOnBuLGZvbnRGYW1pbHk6Z24sY29udGV4dDpobixsb2NhbGU6dm4sYXBpVVJMOm1uLHNob3dTdXJ2ZXlCcmFuZDpibixtYXJrZXRpbmdVcmw6eG4sc2x1Z05hbWU6d24scmVzcG9uc2VHcm91cFVpZDpFbixoZWFkZXJzOmpuLGVuZENhcmQ6Q24sY29uZmlndXJlRXhpdE9uT3ZlcmxheUNsaWNrOlNuLGlzUHJldmlldzpPbixhbnN3ZXJzOkFuLGN1c3RvbU1ldGFkYXRhOkluLGV4cGVyaW1lbnRGbGFnczpUbix1c2VNb2JpbGVTdHlsaW5nOl9uLG1vYmlsZVBsYXRmb3JtOk1uLGV2ZW50RW1pdHRlcjpMbn0pfSgpfSgpOw=='
|
|
1
|
+
export const encodedViewJs = 'LyohIEZvciBsaWNlbnNlIGluZm9ybWF0aW9uIHBsZWFzZSBzZWUgdXNlcmxlYXAtd2ViLXZpZXctc2RrLXYyLjE0LjMuanMuTElDRU5TRS50eHQgKi8KIWZ1bmN0aW9uKCl7dmFyIHQ9ezkzMTMwOmZ1bmN0aW9uKHQsZSxuKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gcih0LGUpe3JldHVybiBuZXcgUHJvbWlzZSgoZnVuY3Rpb24obil7c2V0VGltZW91dChuLmJpbmQobnVsbCxlKSx0KX0pKX1uLnIoZSksbi5kKGUse2RlbGF5OmZ1bmN0aW9uKCl7cmV0dXJuIHJ9LE5FVFdPUktfQ09ORklHOmZ1bmN0aW9uKCl7cmV0dXJuIG99fSk7dmFyIG89e1JBVEVMSU1JVF9SRVNFVF9ERUZBVUxUOjEwfX0sNzc4ODpmdW5jdGlvbih0LGUsbil7KGU9bigxODk4NikoITEpKS5wdXNoKFt0LmlkLCIudWwtY2FyZCB7XG4gIGZsZXg6IDEgMSBhdXRvO1xuICBib3JkZXItcmFkaXVzOiAycHg7XG4gIGRpc3BsYXk6IGZsZXg7XG4gIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XG4gIGZvbnQtc2l6ZTogMTdweDtcbiAgbGluZS1oZWlnaHQ6IDE5cHg7XG4gIHRleHQtYWxpZ246IGxlZnQ7XG59XG5cbi51bC1jYXJkX19jb250YWluZXItLWRlc2t0b3Age1xuICBtYXJnaW46IDE1cHg7XG4gIGJvcmRlcjogMnB4IHNvbGlkICNmZmY7XG4gIGJveC1zaGFkb3c6IDBweCAwcHggMTVweCByZ2JhKDAsIDAsIDAsIDAuMTUpO1xufVxuXG4udWwtY2FyZF9fY29udGFpbmVyLS1tb2JpbGUge1xuICBib3JkZXItd2lkdGg6IDA7XG4gIGJveC1zaGFkb3c6IDBweCAwcHggNXB4IHJnYmEoMCwgMCwgMCwgMC4yNSk7XG4gIG1hcmdpbi10b3A6IDVweDtcbn1cblxuLnVsLWNhcmRfX2NvbnRhaW5lciB7XG4gIHBhZGRpbmc6IDIwcHggMjBweCA1cHggMjBweDtcbiAgZmxleDogMSAxIGF1dG87XG4gIGJhY2tncm91bmQ6ICNmZmZmZmY7XG4gIGRpc3BsYXk6IGZsZXg7XG4gIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XG4gIGZvbnQtc2l6ZTogMTdweDtcbiAgbGluZS1oZWlnaHQ6IDIzcHg7XG4gIHRleHQtYWxpZ246IGNlbnRlcjtcbiAgb3ZlcmZsb3c6IGF1dG87XG4gIGJvcmRlci1yYWRpdXM6IDZweDtcbn1cblxuLnVsLXF1ZXN0aW9uIHtcbiAgZmxleDogMSAwIGF1dG87XG4gIGNvbG9yOiAjMzQzNDQyO1xuICBkaXNwbGF5OiBibG9jaztcbiAgZm9udC1zaXplOiAyMHB4O1xuICBsaW5lLWhlaWdodDogMTI1JTtcbiAgZm9udC13ZWlnaHQ6IDUwMDtcbiAgY3Vyc29yOiBkZWZhdWx0O1xuICB0ZXh0LWFsaWduOiBsZWZ0O1xufVxuXG4udWwtY2FwdGlvbiB7XG4gIGZsZXg6IDEgMCBhdXRvO1xuICBtYXJnaW4tdG9wOiA4cHg7XG4gIG1hcmdpbi1ib3R0b206IDE1cHg7XG4gIGZvbnQtc2l6ZTogMTVweDtcbiAgbGluZS1oZWlnaHQ6IDEzMC4zNSU7XG4gIGxldHRlci1zcGFjaW5nOiAwLjAyZW07XG4gIGNvbG9yOiAjNmM2YzZlO1xuICB0ZXh0LWFsaWduOiBsZWZ0O1xufVxuXG4udWwtY2FyZC0tbXVsdGlwbGUge1xuICBtYXJnaW4tdG9wOiAxNXB4O1xufVxuXG4udWwtY2FyZF9fY2hvaWNlcyB7XG4gIG1hcmdpbjogNXB4IDAgMCAwO1xuICBmbGV4OiAxIDA7XG4gIGhlaWdodDogMTAwJTtcbn1cblxuLmNob2ljZS0tbW9iaWxlIHtcbiAgYm9yZGVyOiAycHggc29saWQgI2U2ZTZlNjtcbn1cblxuLmNob2ljZS0tZGVza3RvcCB7XG4gIGJvcmRlcjogMXB4IHNvbGlkICNlNmU2ZTY7XG59XG5cbi5jaG9pY2Uge1xuICBhbGlnbi1pdGVtczogY2VudGVyO1xuICBjb2xvcjogIzI2MjEzNjtcbiAgY3Vyc29yOiBwb2ludGVyO1xuICBkaXNwbGF5OiBmbGV4O1xuICBqdXN0aWZ5LWNvbnRlbnQ6IGZsZXgtc3RhcnQ7XG5cbiAgYm94LXNpemluZzogYm9yZGVyLWJveDtcbiAgYm9yZGVyLXJhZGl1czogM3B4O1xuXG4gIG1hcmdpbi1ib3R0b206IDdweDtcbiAgZm9udC1zaXplOiAxNXB4O1xuICBsaW5lLWhlaWdodDogMjBweDtcbiAgcGFkZGluZzogMTBweCAyMHB4IDEwcHggMTVweDtcbiAgYmFja2dyb3VuZC1jb2xvcjogcmdiYSgwLCAwLCAwLCAwLjAxKTtcbn1cblxuLmNob2ljZS0tZGVza3RvcDpob3ZlciB7XG4gIGJhY2tncm91bmQtY29sb3I6IHJnYmEoMCwgMCwgMCwgMC4wNSk7XG59XG5cbi5jaG9pY2UtLWRlc2t0b3A6YWN0aXZlLFxuLmNob2ljZS0tbW9iaWxlOmFjdGl2ZSB7XG4gIGJhY2tncm91bmQtY29sb3I6IHJnYmEoMCwgMCwgMCwgMC4wNSk7XG59XG5cbi51bC1jYXJkLS10aGFua3Mge1xuICBtYXJnaW4tdG9wOiAxNXB4O1xufVxuXG4udWwtdGhhbmtzLWNoZWNrIHtcbiAgdGV4dC1hbGlnbjogY2VudGVyO1xuICBtYXJnaW4tYm90dG9tOiAyMHB4O1xufVxuXG4udWwtY2FyZC0tdGhhbmtzLWNvbnRlbnQge1xuICBwYWRkaW5nOiAyMHB4IDAgMTBweCAwO1xufVxuXG4udWwtY2FyZC0tdGhhbmtzIC51bC1xdWVzdGlvbiB7XG4gIHBhZGRpbmctdG9wOiAwO1xuICB0ZXh0LWFsaWduOiBjZW50ZXI7XG59XG5cbi51bC1jYXJkLS10aGFua3MgLnVsLWNhcHRpb24ge1xuICBwYWRkaW5nLXRvcDogMDtcbiAgdGV4dC1hbGlnbjogY2VudGVyO1xuICBvdmVyZmxvdy13cmFwOiBicmVhay13b3JkO1xuICBoeXBoZW5zOiBhdXRvO1xuICBoeXBoZW5hdGUtbGltaXQtbGluZXM6IG5vLWxpbWl0O1xufVxuXG4uc2VsZWN0LWNoZWNrYm94IHtcbiAgaGVpZ2h0OiAxNnB4O1xuICB3aWR0aDogMTZweDtcbiAgYm9yZGVyLXJhZGl1czogM3B4O1xuICBib3JkZXI6IDFweCBzb2xpZCAjMzIzMjMyO1xuICBkaXNwbGF5OiBmbGV4O1xuICBib3gtc2l6aW5nOiBib3JkZXItYm94O1xuICBib3gtc2hhZG93OiBpbnNldCAzcHggM3B4IDBweCByZ2JhKDAsIDAsIDAsIDAuMSk7XG4gIGJhY2tncm91bmQtY29sb3I6ICd0cmFuc3BhcmVudCc7XG4gIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gIGp1c3RpZnktY29udGVudDogY2VudGVyO1xufVxuXG4uc2VsZWN0LXJhZGlvIHtcbiAgaGVpZ2h0OiAxNnB4O1xuICB3aWR0aDogMTZweDtcbiAgYm9yZGVyLXJhZGl1czogMTZweDtcbiAgYm9yZGVyOiAxcHggc29saWQgIzMyMzIzMjtcbiAgZGlzcGxheTogZmxleDtcbiAgYm94LXNpemluZzogYm9yZGVyLWJveDtcbiAgYm94LXNoYWRvdzogaW5zZXQgMnB4IDJweCAwcHggcmdiYSgwLCAwLCAwLCAwLjEpO1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAndHJhbnNwYXJlbnQnO1xuICBhbGlnbi1pdGVtczogY2VudGVyO1xuICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjtcbn1cblxuLyogTGluayBzdHVkaWVzIHdpZGUgc2NyZWVuIHZpZXcgKi9cbkBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG1pbi13aWR0aDogNjAwcHgpIHtcbiAgLnVsLWNhcmRfX2NvbnRhaW5lci0tZGVza3RvcCB7XG4gICAgYm94LXNoYWRvdzogdW5zZXQ7XG4gIH1cblxuICAudWwtY2FyZF9fY29udGFpbmVyIHtcbiAgICBib3JkZXItcmFkaXVzOiB1bnNldDtcbiAgICBib3JkZXI6IG5vbmUgIWltcG9ydGFudDtcbiAgfVxufVxuXG4uZmFkZS1pbi10cmFuc2l0aW9uIHtcbiAgYW5pbWF0aW9uOiBmYWRlSW4gNDAwbXMgZWFzZS1pbjtcbiAgLXdlYmtpdC1hbmltYXRpb246IGZhZGVJbiA0MDBtcyBlYXNlLWluO1xuICAtbW96LWFuaW1hdGlvbjogZmFkZUluIDQwMG1zIGVhc2UtaW47XG4gIC1vLWFuaW1hdGlvbjogZmFkZUluIDQwMG1zIGVhc2UtaW47XG4gIC1tcy1hbmltYXRpb246IGZhZGVJbiA0MDBtcyBlYXNlLWluO1xufVxuXG5Aa2V5ZnJhbWVzIGZhZGVJbiB7XG4gIDAlIHtcbiAgICBvcGFjaXR5OiAwO1xuICB9XG4gIDEwMCUge1xuICAgIG9wYWNpdHk6IDE7XG4gIH1cbn1cblxuQC1tb3ota2V5ZnJhbWVzIGZhZGVJbiB7XG4gIDAlIHtcbiAgICBvcGFjaXR5OiAwO1xuICB9XG4gIDEwMCUge1xuICAgIG9wYWNpdHk6IDE7XG4gIH1cbn1cblxuQC13ZWJraXQta2V5ZnJhbWVzIGZhZGVJbiB7XG4gIDAlIHtcbiAgICBvcGFjaXR5OiAwO1xuICB9XG4gIDEwMCUge1xuICAgIG9wYWNpdHk6IDE7XG4gIH1cbn1cblxuQC1vLWtleWZyYW1lcyBmYWRlSW4ge1xuICAwJSB7XG4gICAgb3BhY2l0eTogMDtcbiAgfVxuICAxMDAlIHtcbiAgICBvcGFjaXR5OiAxO1xuICB9XG59XG5cbkAtbXMta2V5ZnJhbWVzIGZhZGVJbiB7XG4gIDAlIHtcbiAgICBvcGFjaXR5OiAwO1xuICB9XG4gIDEwMCUge1xuICAgIG9wYWNpdHk6IDE7XG4gIH1cbn1cbiIsIiJdKSx0LmV4cG9ydHM9ZX0sNDcwNjY6ZnVuY3Rpb24odCxlLG4pe3ZhciByPW4oMTg5ODYpLG89bigxMDY2OSksaT1uKDc3ODgpLGE9big4NjU1OCksYz1uKDYwNjMyKSxzPW4oNDIwMDUpLHU9big3NjQyOCksbD1uKDczNTIzKSxmPW4oNjM1NTMpOyhlPXIoITEpKS5pKG8pLGUuaShpKSxlLmkoYSksZS5pKGMpLGUuaShzKSxlLmkodSksZS5pKGwpLGUuaShmKSxlLnB1c2goW3QuaWQsImh0bWwsXG5ib2R5IHtcbiAgY3Vyc29yOiBkZWZhdWx0O1xuICBmb250LWZhbWlseTogLWFwcGxlLXN5c3RlbSwgQmxpbmtNYWNTeXN0ZW1Gb250LCAnU2Vnb2UgVUknLCBSb2JvdG8sIEhlbHZldGljYSwgQXJpYWwsIHNhbnMtc2VyaWYsICdBcHBsZSBDb2xvciBFbW9qaScsXG4gICAgJ1NlZ29lIFVJIEVtb2ppJywgJ1NlZ29lIFVJIFN5bWJvbCc7XG4gIGhlaWdodDogMTAwJTtcbiAgb3ZlcmZsb3c6IGhpZGRlbjtcbiAgLXdlYmtpdC10YXAtaGlnaGxpZ2h0LWNvbG9yOiB0cmFuc3BhcmVudDtcbiAgLXdlYmtpdC11c2VyLXNlbGVjdDogbm9uZTtcbiAgLXdlYmtpdC10b3VjaC1jYWxsb3V0OiBub25lO1xufVxuXG5iIHtcbiAgZm9udC13ZWlnaHQ6IDUwMDtcbn1cblxuI3VsLWFwcCB7XG4gIG9wYWNpdHk6IDA7XG4gIHdpZHRoOiAxMDAlO1xufVxuXG4jdWwtYXBwLnVsLWFwcC0tb3ZlcmxheSB7XG4gIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgYm90dG9tOiAwO1xuICB0cmFuc2l0aW9uOiBvcGFjaXR5IDAuMXMgZWFzZS1vdXQ7XG59XG5cbiN1bC1hcHAudWwtYXBwLS12aXNpYmxlIHtcbiAgb3BhY2l0eTogMTtcbiAgYm90dG9tOiAwO1xufVxuXG4udWwtYXBwX19jb250YWluZXIge1xuICB3aWR0aDogMTAwJTtcbiAgZGlzcGxheTogZmxleDtcbiAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcbiAgcG9zaXRpb246IHJlbGF0aXZlO1xuICBtYXgtaGVpZ2h0OiAxMDB2aDtcbn1cblxuLnVsLWZvb3RlciB7XG4gIGRpc3BsYXk6IGZsZXg7XG4gIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XG4gIGZsZXgtc2hyaW5rOiAwO1xuICBhbGlnbi1pdGVtczogY2VudGVyO1xuICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjtcbiAgbWFyZ2luLXRvcDogMTBweDtcbn1cblxuLnVsLWZvb3Rlci1idWJibGUge1xuICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XG4gIG1hcmdpbjogMCAzcHg7XG4gIHdpZHRoOiA3cHg7XG4gIGhlaWdodDogN3B4O1xuICBib3JkZXItcmFkaXVzOiAzcHg7XG4gIGJvcmRlcjogMXB4IHNvbGlkIHRyYW5zcGFyZW50O1xufVxuXG4uY2xvc2UtY29udGFpbmVyLS1kZXNrdG9wLFxuLmNsb3NlLWNvbnRhaW5lci0tbW9iaWxlIHtcbiAgaGVpZ2h0OiAyMnB4O1xuICB3aWR0aDogMjJweDtcbiAgYm9yZGVyLXJhZGl1czogMjJweDtcbiAgYmFja2dyb3VuZC1jb2xvcjogI2ZmZmZmZjtcbiAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7XG59XG5cbi5jbG9zZS1jb250YWluZXItLWRlc2t0b3Age1xuICB0b3A6IDI1cHg7XG4gIHJpZ2h0OiAyNXB4O1xufVxuXG4uY2xvc2UtY29udGFpbmVyLS1tb2JpbGUge1xuICB0b3A6IDE1cHg7XG4gIHJpZ2h0OiAxMHB4O1xufVxuXG4uY2xvc2UtY29udGFpbmVyIHtcbiAgYm94LXNpemluZzogYm9yZGVyLWJveDtcbiAgZGlzcGxheTogZmxleDtcbiAgcG9zaXRpb246IGFic29sdXRlO1xufVxuXG4uY2xvc2UtYnRuIHtcbiAgaGVpZ2h0OiAxOHB4O1xuICB3aWR0aDogMThweDtcbiAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7XG4gIGRpc3BsYXk6IGZsZXg7XG4gIGN1cnNvcjogcG9pbnRlcjtcbn1cblxuLnVsLWFwcF9fY29udGFpbmVyIHtcbiAgdHJhbnNpdGlvbjogb3BhY2l0eSAwLjNzIGVhc2Utb3V0O1xufVxuIiwiIl0pLHQuZXhwb3J0cz1lfSw4NjU1ODpmdW5jdGlvbih0LGUsbil7KGU9bigxODk4NikoITEpKS5wdXNoKFt0LmlkLCIvKiBpZGVudGljYWwgdG8gbnBzLmNzcywgb3RoZXIgdGhhbiBjbGFzcyBuYW1lcy4gKi9cbi51bC1jYXJkLS1saWtlcnQge1xuICBtYXJnaW4tdG9wOiAxNXB4O1xufVxuXG4udWwtY2FyZC0tbGlrZXJ0X19udW1iZXJzIHtcbiAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAgYm9yZGVyLXJhZGl1czogNXB4O1xuICBkaXNwbGF5OiBmbGV4O1xuICBmbGV4LWRpcmVjdGlvbjogcm93O1xuICBmbGV4OiAxIDA7XG4gIGp1c3RpZnktY29udGVudDogY2VudGVyO1xuICBtYXJnaW46IDVweCAwIDAgMDtcbn1cblxuLmxpa2VydC1udW1iZXItLW1vYmlsZSB7XG4gIGJvcmRlcjogMnB4IHNvbGlkICNlNmU2ZTY7XG4gIG1hcmdpbi1sZWZ0OiAtMnB4O1xufVxuXG4ubGlrZXJ0LW51bWJlci0tZGVza3RvcCB7XG4gIGJvcmRlcjogMXB4IHNvbGlkICNlNmU2ZTY7XG4gIG1hcmdpbi1sZWZ0OiAtMXB4O1xufVxuXG4ubGlrZXJ0LW51bWJlciB7XG4gIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gIGN1cnNvcjogcG9pbnRlcjtcbiAgZGlzcGxheTogZmxleDtcbiAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7XG4gIGZsZXg6IDEgMDtcblxuICBiYWNrZ3JvdW5kLWNvbG9yOiByZ2JhKDAsIDAsIDAsIDAuMDEpO1xuICBmb250LXNpemU6IDE4cHg7XG4gIGxpbmUtaGVpZ2h0OiAyNHB4O1xuICBoZWlnaHQ6IDY3cHg7XG59XG5cbi5saWtlcnQtbnVtYmVyOmFjdGl2ZSB7XG4gIGJhY2tncm91bmQtY29sb3I6IHJnYmEoMCwgMCwgMCwgMC4wNSk7XG4gIGZvbnQtd2VpZ2h0OiA1MDA7XG59XG5cbi5saWtlcnQtbnVtYmVyLS1kZXNrdG9wOmhvdmVyIHtcbiAgYmFja2dyb3VuZC1jb2xvcjogcmdiYSgwLCAwLCAwLCAwLjA1KTtcbiAgZm9udC13ZWlnaHQ6IDUwMDtcbn1cblxuLmxpa2VydC1udW1iZXItMSB7XG4gIGJvcmRlci10b3AtbGVmdC1yYWRpdXM6IDVweDtcbiAgYm9yZGVyLWJvdHRvbS1sZWZ0LXJhZGl1czogNXB4O1xufVxuXG4ubGlrZXJ0LW51bWJlci01IHtcbiAgYm9yZGVyLXRvcC1yaWdodC1yYWRpdXM6IDVweDtcbiAgYm9yZGVyLWJvdHRvbS1yaWdodC1yYWRpdXM6IDVweDtcbn1cblxuLnVsLWNhcmQtLWxpa2VydF9fbGFiZWxzIHtcbiAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAgY29sb3I6ICMyNjIxMzY7XG4gIGRpc3BsYXk6IGZsZXg7XG4gIGZsZXgtZGlyZWN0aW9uOiByb3c7XG4gIGZsZXg6IDEgMDtcbiAgZm9udC13ZWlnaHQ6IDUwMDtcbiAgZm9udC1zaXplOiAxM3B4O1xuICBsaW5lLWhlaWdodDogMTVweDtcbiAganVzdGlmeS1jb250ZW50OiBzcGFjZS1iZXR3ZWVuO1xuICBtYXJnaW46IDdweCAwIDEwcHggMDtcbn1cblxuLnVsLWNhcmQtLWxpa2VydF9fbGFiZWxzIHNwYW46bGFzdC1jaGlsZCB7XG4gIHRleHQtYWxpZ246IHJpZ2h0O1xufVxuIiwiIl0pLHQuZXhwb3J0cz1lfSw2MDYzMjpmdW5jdGlvbih0LGUsbil7KGU9bigxODk4NikoITEpKS5wdXNoKFt0LmlkLCIuc2VsZWN0LWxhYmVsIHtcbiAgZmxleDogMTtcbiAgb3ZlcmZsb3ctd3JhcDogYW55d2hlcmU7XG4gIGN1cnNvcjogcG9pbnRlcjtcbiAgcGFkZGluZy1sZWZ0OiAxNXB4O1xufVxuIiwiIl0pLHQuZXhwb3J0cz1lfSw0MjAwNTpmdW5jdGlvbih0LGUsbil7KGU9bigxODk4NikoITEpKS5wdXNoKFt0LmlkLCIvKiBpZGVudGljYWwgdG8gbGlrZXJ0LmNzcywgb3RoZXIgdGhhbiBjbGFzcyBuYW1lcy4gKi9cbi51bC1jYXJkLS1ucHMge1xuICBtYXJnaW4tdG9wOiAxNXB4O1xufVxuXG4udWwtY2FyZC0tbnBzX19udW1iZXJzIHtcbiAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAgYm9yZGVyLXJhZGl1czogNXB4O1xuICBkaXNwbGF5OiBmbGV4O1xuICBmbGV4LWRpcmVjdGlvbjogcm93O1xuICBmbGV4OiAxIDA7XG4gIGp1c3RpZnktY29udGVudDogY2VudGVyO1xuICBtYXJnaW46IDVweCAwIDAgMDtcbn1cblxuLm5wcy1udW1iZXItLW1vYmlsZSB7XG4gIGJvcmRlcjogMnB4IHNvbGlkICNlNmU2ZTY7XG4gIG1hcmdpbi1sZWZ0OiAtMnB4O1xufVxuXG4ubnBzLW51bWJlci0tZGVza3RvcCB7XG4gIGJvcmRlcjogMXB4IHNvbGlkICNlNmU2ZTY7XG4gIG1hcmdpbi1sZWZ0OiAtMXB4O1xufVxuXG4ubnBzLW51bWJlciB7XG4gIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gIGN1cnNvcjogcG9pbnRlcjtcbiAgZGlzcGxheTogZmxleDtcbiAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7XG4gIGZsZXg6IDEgMDtcblxuICBiYWNrZ3JvdW5kLWNvbG9yOiByZ2JhKDAsIDAsIDAsIDAuMDEpO1xuICBmb250LXNpemU6IDE4cHg7XG4gIGxpbmUtaGVpZ2h0OiAyNHB4O1xuICBoZWlnaHQ6IDY3cHg7XG59XG5cbi5ucHMtbnVtYmVyOmFjdGl2ZSB7XG4gIGJhY2tncm91bmQtY29sb3I6IHJnYmEoMCwgMCwgMCwgMC4wNSk7XG4gIGZvbnQtd2VpZ2h0OiA1MDA7XG59XG5cbi5ucHMtbnVtYmVyLS1kZXNrdG9wOmhvdmVyIHtcbiAgYmFja2dyb3VuZC1jb2xvcjogcmdiYSgwLCAwLCAwLCAwLjA1KTtcbiAgZm9udC13ZWlnaHQ6IDUwMDtcbn1cblxuLm5wcy1udW1iZXItMCB7XG4gIGJvcmRlci10b3AtbGVmdC1yYWRpdXM6IDVweDtcbiAgYm9yZGVyLWJvdHRvbS1sZWZ0LXJhZGl1czogNXB4O1xufVxuXG4ubnBzLW51bWJlci0xMCB7XG4gIGJvcmRlci10b3AtcmlnaHQtcmFkaXVzOiA1cHg7XG4gIGJvcmRlci1ib3R0b20tcmlnaHQtcmFkaXVzOiA1cHg7XG59XG5cbi51bC1jYXJkLS1ucHNfX2xhYmVscyB7XG4gIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gIGNvbG9yOiAjMjYyMTM2O1xuICBkaXNwbGF5OiBmbGV4O1xuICBmbGV4LWRpcmVjdGlvbjogcm93O1xuICBmbGV4OiAxIDA7XG4gIGZvbnQtd2VpZ2h0OiA1MDA7XG4gIGZvbnQtc2l6ZTogMTNweDtcbiAgbGluZS1oZWlnaHQ6IDE1cHg7XG4gIGp1c3RpZnktY29udGVudDogc3BhY2UtYmV0d2VlbjtcbiAgbWFyZ2luOiA3cHggMCAxMHB4IDA7XG59XG5cbi51bC1jYXJkLS1ucHNfX2xhYmVscyBzcGFuOmxhc3QtY2hpbGQge1xuICB0ZXh0LWFsaWduOiByaWdodDtcbn1cbiIsIiJdKSx0LmV4cG9ydHM9ZX0sMTA2Njk6ZnVuY3Rpb24odCxlLG4peyhlPW4oMTg5ODYpKCExKSkucHVzaChbdC5pZCwiLyoqXG4gKiBtaW5pcmVzZXQuY3NzXG4gKiBodHRwczovL2dpdGh1Yi5jb20vamd0aG1zL21pbmlyZXNldC5jc3NcbiAqL1xuXG5odG1sLFxuYm9keSxcbnAsXG5vbCxcbnVsLFxubGksXG5kbCxcbmR0LFxuZGQsXG5ibG9ja3F1b3RlLFxuZmlndXJlLFxuZmllbGRzZXQsXG5sZWdlbmQsXG50ZXh0YXJlYSxcbnByZSxcbmlmcmFtZSxcbmhyLFxuaDEsXG5oMixcbmgzLFxuaDQsXG5oNSxcbmg2IHtcbiAgbWFyZ2luOiAwO1xuICBwYWRkaW5nOiAwO1xufVxuXG5oMSxcbmgyLFxuaDMsXG5oNCxcbmg1LFxuaDYge1xuICBmb250LXNpemU6IDEwMCU7XG4gIGZvbnQtd2VpZ2h0OiBub3JtYWw7XG59XG5cbnVsIHtcbiAgbGlzdC1zdHlsZTogbm9uZTtcbn1cblxuYnV0dG9uLFxuaW5wdXQsXG5zZWxlY3QsXG50ZXh0YXJlYSB7XG4gIG1hcmdpbjogMDtcbn1cblxuaHRtbCB7XG4gIGJveC1zaXppbmc6IGJvcmRlci1ib3g7XG59XG5cbiosICo6YmVmb3JlLCAqOmFmdGVyIHtcbiAgYm94LXNpemluZzogaW5oZXJpdDtcbn1cbiIsIiJdKSx0LmV4cG9ydHM9ZX0sNzY0Mjg6ZnVuY3Rpb24odCxlLG4peyhlPW4oMTg5ODYpKCExKSkucHVzaChbdC5pZCwiLnVsLWNhcmQtLXRleHQge1xuICBtYXJnaW4tdG9wOiAxNXB4O1xufVxuXG4udWwtY2FyZC10ZXh0IHtcbiAgZmxleDogMSAwIGF1dG87XG4gIG1hcmdpbi10b3A6IDJweDtcbiAgbWFyZ2luLWJvdHRvbTogM3B4O1xuICBhbGlnbi1pdGVtczogY2VudGVyO1xuICBkaXNwbGF5OiBmbGV4O1xuICBmbGV4LXdyYXA6IHdyYXA7XG4gIGp1c3RpZnktY29udGVudDogY2VudGVyO1xuICBwYWRkaW5nOiAwO1xufVxuXG4udWwtY2FyZC10ZXh0X19jb250YWluZXIge1xuICBhbGlnbi1pdGVtczogY2VudGVyO1xuICBib3gtc2l6aW5nOiBib3JkZXItYm94O1xuICBib3JkZXItcmFkaXVzOiAzcHg7XG4gIGRpc3BsYXk6IGZsZXg7XG4gIGp1c3RpZnktY29udGVudDogY2VudGVyO1xuICBtYXJnaW4tYm90dG9tOiAxMnB4O1xuICBmbGV4OiAxIDAgMTAwJTtcbn1cblxuLnVsLWNhcmQtdGV4dF9faW5wdXQtLW1vYmlsZSB7XG4gIGJvcmRlcjogMnB4IHNvbGlkICNlNmU2ZTY7XG4gIG1heC1oZWlnaHQ6IDYzcHg7XG59XG5cbi51bC1jYXJkLXRleHRfX2lucHV0LS1kZXNrdG9wIHtcbiAgYm9yZGVyOiAxcHggc29saWQgI2U2ZTZlNjtcbiAgbWF4LWhlaWdodDogMTUwcHg7XG59XG5cbi51bC1jYXJkLXRleHRfX2lucHV0IHtcbiAgYmFja2dyb3VuZDogcmdiYSgwLCAwLCAwLCAwLjAxKTtcbiAgYm94LXNpemluZzogYm9yZGVyLWJveDtcbiAgY29sb3I6ICMzNDM0NDI7XG4gIGZvbnQtZmFtaWx5OiAtYXBwbGUtc3lzdGVtLCBCbGlua01hY1N5c3RlbUZvbnQsICdTZWdvZSBVSScsIFJvYm90bywgSGVsdmV0aWNhLCBBcmlhbCwgc2Fucy1zZXJpZiwgJ0FwcGxlIENvbG9yIEVtb2ppJyxcbiAgICAnU2Vnb2UgVUkgRW1vamknLCAnU2Vnb2UgVUkgU3ltYm9sJztcbiAgbWluLWhlaWdodDogNjNweDtcbiAgb3ZlcmZsb3c6IGhpZGRlbjtcbiAgcGFkZGluZzogMTJweDtcbiAgcmVzaXplOiBub25lO1xuICB3aWR0aDogMTAwJTtcbiAgYm9yZGVyLXJhZGl1czogM3B4O1xuICBmb250LXNpemU6IDE1cHg7XG4gIGxpbmUtaGVpZ2h0OiAyMHB4O1xufVxuXG4udWwtY2FyZC10ZXh0X19pbnB1dDo6cGxhY2Vob2xkZXIge1xuICBjb2xvcjogcmdiYSgxMDgsIDEwOCwgMTEwLCAwLjUpO1xufVxuXG4udWwtY2FyZC10ZXh0X19pbnB1dDpmb2N1cyB7XG4gIG91dGxpbmU6IG5vbmU7XG4gIGJhY2tncm91bmQ6IHdoaXRlO1xufVxuXG4udWwtY2FyZC10ZXh0X19idXR0b24ge1xuICBib3JkZXItcmFkaXVzOiAzcHg7XG4gIGNvbG9yOiB3aGl0ZTtcbiAgZm9udC1zaXplOiAxNXB4O1xuICBsaW5lLWhlaWdodDogMThweDtcbiAgcGFkZGluZzogMTAuNXB4IDIxcHg7XG4gIGZvbnQtd2VpZ2h0OiA1MDA7XG4gIGJvcmRlcjogbm9uZTtcbiAgY3Vyc29yOiBwb2ludGVyO1xufVxuIiwiIl0pLHQuZXhwb3J0cz1lfSw3MzUyMzpmdW5jdGlvbih0LGUsbil7KGU9bigxODk4NikoITEpKS5wdXNoKFt0LmlkLCIudWwtY2FyZF9fdGV4dC11cmwtcHJvbXB0IHtcbiAgbWFyZ2luLXRvcDogMTVweDtcbn1cblxuLnVsLWNhcmRfX3RleHQtdXJsLWJvZHktY29udGFpbmVyLFxuLnVsLWNhcmRfX3RleHQtdXJsLXByb21wdC1ib2R5IHtcbiAgbWFyZ2luLXRvcDogMTBweDtcbiAgbWFyZ2luLWJvdHRvbTogMTBweDtcbn1cblxuLnVsLWNhcmRfX3RleHQtdXJsLXByb21wdC1ib2R5IHtcbiAgZm9udC1zaXplOiAxNXB4O1xuICBsaW5lLWhlaWdodDogMTMwLjM1JTtcbiAgbGV0dGVyLXNwYWNpbmc6IDAuMDJlbTtcbiAgY29sb3I6ICMzNDM0NDI7XG4gIHRleHQtYWxpZ246IGxlZnQ7XG4gIHdoaXRlLXNwYWNlOiBwcmUtbGluZTtcbn1cblxuLnVsLWNhcmRfX3RleHQtdXJsLXByb21wdC1ib2R5Omxhc3QtY2hpbGQge1xuICBtYXJnaW4tYm90dG9tOiAxNXB4O1xufVxuXG4udWwtY2FyZF9fdGV4dC11cmwtcHJvbXB0LWJ1dHRvbiB7XG4gIG1hcmdpbi1yaWdodDogYXV0bztcbiAgdGV4dC1vdmVyZmxvdzogZWxsaXBzaXM7XG4gIG92ZXJmbG93OiBoaWRkZW47XG4gIHdoaXRlLXNwYWNlOiBub3dyYXA7XG4gIG1heC13aWR0aDogMTAwJTtcbn1cblxuLnVsLWNhcmRfX3RleHQtdXJsLWJvZHktY29udGFpbmVyIHtcbiAgbWluLWhlaWdodDogMmVtO1xufVxuIiwiIl0pLHQuZXhwb3J0cz1lfSw2MzU1MzpmdW5jdGlvbih0LGUsbil7KGU9bigxODk4NikoITEpKS5wdXNoKFt0LmlkLCIudWwtY2FyZC0tdmlkZW8ge1xuICBtYXJnaW4tdG9wOiAxNXB4O1xufVxuXG4jdWwtY2FyZC12b2ljZV9fdmlkZW8ge1xuICBhbGlnbi1pdGVtczogY2VudGVyO1xuICBkaXNwbGF5OiBmbGV4O1xuICBmbGV4LWRpcmVjdGlvbjogY29sdW1uO1xufVxuLnVsLWNhcmQtdGV4dF9fYnV0dG9uLnVsLWJ1dHRvbi1pbmFjdGl2ZSB7XG4gIGJhY2tncm91bmQtY29sb3I6IHdoaXRlICFpbXBvcnRhbnQ7XG4gIGNvbG9yOiAjNWQ2OTZmICFpbXBvcnRhbnQ7XG59XG5cbiN1bC1jYXJkLXZpZGVvX19wbGF5ZXJfcmVjb3JkZXIge1xuICB3aWR0aDogMTAwJTtcbiAgd2lkdGg6IC1tb3otYXZhaWxhYmxlOyAvKiBXZWJLaXQtYmFzZWQgYnJvd3NlcnMgd2lsbCBpZ25vcmUgdGhpcy4gKi9cbiAgd2lkdGg6IC13ZWJraXQtZmlsbC1hdmFpbGFibGU7IC8qIE1vemlsbGEtYmFzZWQgYnJvd3NlcnMgd2lsbCBpZ25vcmUgdGhpcy4gKi9cbiAgd2lkdGg6IGZpbGwtYXZhaWxhYmxlO1xufVxuIiwiIl0pLHQuZXhwb3J0cz1lfSw2MjU4MjpmdW5jdGlvbih0KXt0LmV4cG9ydHM9ZnVuY3Rpb24odCl7aWYoQXJyYXkuaXNBcnJheSh0KSl7Zm9yKHZhciBlPTAsbj1uZXcgQXJyYXkodC5sZW5ndGgpO2U8dC5sZW5ndGg7ZSsrKW5bZV09dFtlXTtyZXR1cm4gbn19fSw0NDYyMTpmdW5jdGlvbih0KXtmdW5jdGlvbiBlKHQsZSxuLHIsbyxpLGEpe3RyeXt2YXIgYz10W2ldKGEpLHM9Yy52YWx1ZX1jYXRjaCh0KXtyZXR1cm4gdm9pZCBuKHQpfWMuZG9uZT9lKHMpOlByb21pc2UucmVzb2x2ZShzKS50aGVuKHIsbyl9dC5leHBvcnRzPWZ1bmN0aW9uKHQpe3JldHVybiBmdW5jdGlvbigpe3ZhciBuPXRoaXMscj1hcmd1bWVudHM7cmV0dXJuIG5ldyBQcm9taXNlKChmdW5jdGlvbihvLGkpe3ZhciBhPXQuYXBwbHkobixyKTtmdW5jdGlvbiBjKHQpe2UoYSxvLGksYyxzLCJuZXh0Iix0KX1mdW5jdGlvbiBzKHQpe2UoYSxvLGksYyxzLCJ0aHJvdyIsdCl9Yyh2b2lkIDApfSkpfX19LDMwNTkzOmZ1bmN0aW9uKHQpe3QuZXhwb3J0cz1mdW5jdGlvbih0LGUpe2lmKCEodCBpbnN0YW5jZW9mIGUpKXRocm93IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCBjYWxsIGEgY2xhc3MgYXMgYSBmdW5jdGlvbiIpfX0sNDQ1MzpmdW5jdGlvbih0KXtmdW5jdGlvbiBlKHQsZSl7Zm9yKHZhciBuPTA7bjxlLmxlbmd0aDtuKyspe3ZhciByPWVbbl07ci5lbnVtZXJhYmxlPXIuZW51bWVyYWJsZXx8ITEsci5jb25maWd1cmFibGU9ITAsInZhbHVlImluIHImJihyLndyaXRhYmxlPSEwKSxPYmplY3QuZGVmaW5lUHJvcGVydHkodCxyLmtleSxyKX19dC5leHBvcnRzPWZ1bmN0aW9uKHQsbixyKXtyZXR1cm4gbiYmZSh0LnByb3RvdHlwZSxuKSxyJiZlKHQsciksdH19LDY0MTU3OmZ1bmN0aW9uKHQpe3QuZXhwb3J0cz1mdW5jdGlvbih0LGUsbil7cmV0dXJuIGUgaW4gdD9PYmplY3QuZGVmaW5lUHJvcGVydHkodCxlLHt2YWx1ZTpuLGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwLHdyaXRhYmxlOiEwfSk6dFtlXT1uLHR9fSw2NjA4MTpmdW5jdGlvbih0KXtmdW5jdGlvbiBlKCl7cmV0dXJuIHQuZXhwb3J0cz1lPU9iamVjdC5hc3NpZ258fGZ1bmN0aW9uKHQpe2Zvcih2YXIgZT0xO2U8YXJndW1lbnRzLmxlbmd0aDtlKyspe3ZhciBuPWFyZ3VtZW50c1tlXTtmb3IodmFyIHIgaW4gbilPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwobixyKSYmKHRbcl09bltyXSl9cmV0dXJuIHR9LGUuYXBwbHkodGhpcyxhcmd1bWVudHMpfXQuZXhwb3J0cz1lfSw5NDI2NjpmdW5jdGlvbih0KXt0LmV4cG9ydHM9ZnVuY3Rpb24odCl7aWYoU3ltYm9sLml0ZXJhdG9yIGluIE9iamVjdCh0KXx8IltvYmplY3QgQXJndW1lbnRzXSI9PT1PYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwodCkpcmV0dXJuIEFycmF5LmZyb20odCl9fSw5NDU2NjpmdW5jdGlvbih0KXt0LmV4cG9ydHM9ZnVuY3Rpb24oKXt0aHJvdyBuZXcgVHlwZUVycm9yKCJJbnZhbGlkIGF0dGVtcHQgdG8gc3ByZWFkIG5vbi1pdGVyYWJsZSBpbnN0YW5jZSIpfX0sOTI4MTY6ZnVuY3Rpb24odCxlLG4pe3ZhciByPW4oNjI1ODIpLG89big5NDI2NiksaT1uKDk0NTY2KTt0LmV4cG9ydHM9ZnVuY3Rpb24odCl7cmV0dXJuIHIodCl8fG8odCl8fGkoKX19LDc2MzkwOmZ1bmN0aW9uKHQpe2Z1bmN0aW9uIGUobil7cmV0dXJuImZ1bmN0aW9uIj09dHlwZW9mIFN5bWJvbCYmInN5bWJvbCI9PXR5cGVvZiBTeW1ib2wuaXRlcmF0b3I/dC5leHBvcnRzPWU9ZnVuY3Rpb24odCl7cmV0dXJuIHR5cGVvZiB0fTp0LmV4cG9ydHM9ZT1mdW5jdGlvbih0KXtyZXR1cm4gdCYmImZ1bmN0aW9uIj09dHlwZW9mIFN5bWJvbCYmdC5jb25zdHJ1Y3Rvcj09PVN5bWJvbCYmdCE9PVN5bWJvbC5wcm90b3R5cGU/InN5bWJvbCI6dHlwZW9mIHR9LGUobil9dC5leHBvcnRzPWV9LDQ0Njc0OmZ1bmN0aW9uKHQsZSxuKXt0LmV4cG9ydHM9big0NjY3OSl9LDk3MzQzOmZ1bmN0aW9uKHQsZSl7dmFyIG4scixvO3I9W3QsZV0sbj1mdW5jdGlvbih0LGUpeyJ1c2Ugc3RyaWN0Ijt2YXIgbixyLG89ImZ1bmN0aW9uIj09dHlwZW9mIE1hcD9uZXcgTWFwOihuPVtdLHI9W10se2hhczpmdW5jdGlvbih0KXtyZXR1cm4gbi5pbmRleE9mKHQpPi0xfSxnZXQ6ZnVuY3Rpb24odCl7cmV0dXJuIHJbbi5pbmRleE9mKHQpXX0sc2V0OmZ1bmN0aW9uKHQsZSl7LTE9PT1uLmluZGV4T2YodCkmJihuLnB1c2godCksci5wdXNoKGUpKX0sZGVsZXRlOmZ1bmN0aW9uKHQpe3ZhciBlPW4uaW5kZXhPZih0KTtlPi0xJiYobi5zcGxpY2UoZSwxKSxyLnNwbGljZShlLDEpKX19KSxpPWZ1bmN0aW9uKHQpe3JldHVybiBuZXcgRXZlbnQodCx7YnViYmxlczohMH0pfTt0cnl7bmV3IEV2ZW50KCJ0ZXN0Iil9Y2F0Y2godCl7aT1mdW5jdGlvbih0KXt2YXIgZT1kb2N1bWVudC5jcmVhdGVFdmVudCgiRXZlbnQiKTtyZXR1cm4gZS5pbml0RXZlbnQodCwhMCwhMSksZX19ZnVuY3Rpb24gYSh0KXtpZih0JiZ0Lm5vZGVOYW1lJiYiVEVYVEFSRUEiPT09dC5ub2RlTmFtZSYmIW8uaGFzKHQpKXt2YXIgZT1udWxsLG49bnVsbCxyPW51bGwsYT1mdW5jdGlvbigpe3QuY2xpZW50V2lkdGghPT1uJiZkKCl9LGM9ZnVuY3Rpb24oZSl7d2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoInJlc2l6ZSIsYSwhMSksdC5yZW1vdmVFdmVudExpc3RlbmVyKCJpbnB1dCIsZCwhMSksdC5yZW1vdmVFdmVudExpc3RlbmVyKCJrZXl1cCIsZCwhMSksdC5yZW1vdmVFdmVudExpc3RlbmVyKCJhdXRvc2l6ZTpkZXN0cm95IixjLCExKSx0LnJlbW92ZUV2ZW50TGlzdGVuZXIoImF1dG9zaXplOnVwZGF0ZSIsZCwhMSksT2JqZWN0LmtleXMoZSkuZm9yRWFjaCgoZnVuY3Rpb24obil7dC5zdHlsZVtuXT1lW25dfSkpLG8uZGVsZXRlKHQpfS5iaW5kKHQse2hlaWdodDp0LnN0eWxlLmhlaWdodCxyZXNpemU6dC5zdHlsZS5yZXNpemUsb3ZlcmZsb3dZOnQuc3R5bGUub3ZlcmZsb3dZLG92ZXJmbG93WDp0LnN0eWxlLm92ZXJmbG93WCx3b3JkV3JhcDp0LnN0eWxlLndvcmRXcmFwfSk7dC5hZGRFdmVudExpc3RlbmVyKCJhdXRvc2l6ZTpkZXN0cm95IixjLCExKSwib25wcm9wZXJ0eWNoYW5nZSJpbiB0JiYib25pbnB1dCJpbiB0JiZ0LmFkZEV2ZW50TGlzdGVuZXIoImtleXVwIixkLCExKSx3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcigicmVzaXplIixhLCExKSx0LmFkZEV2ZW50TGlzdGVuZXIoImlucHV0IixkLCExKSx0LmFkZEV2ZW50TGlzdGVuZXIoImF1dG9zaXplOnVwZGF0ZSIsZCwhMSksdC5zdHlsZS5vdmVyZmxvd1g9ImhpZGRlbiIsdC5zdHlsZS53b3JkV3JhcD0iYnJlYWstd29yZCIsby5zZXQodCx7ZGVzdHJveTpjLHVwZGF0ZTpkfSkscygpfWZ1bmN0aW9uIHMoKXt2YXIgbj13aW5kb3cuZ2V0Q29tcHV0ZWRTdHlsZSh0LG51bGwpOyJ2ZXJ0aWNhbCI9PT1uLnJlc2l6ZT90LnN0eWxlLnJlc2l6ZT0ibm9uZSI6ImJvdGgiPT09bi5yZXNpemUmJih0LnN0eWxlLnJlc2l6ZT0iaG9yaXpvbnRhbCIpLGU9ImNvbnRlbnQtYm94Ij09PW4uYm94U2l6aW5nPy0ocGFyc2VGbG9hdChuLnBhZGRpbmdUb3ApK3BhcnNlRmxvYXQobi5wYWRkaW5nQm90dG9tKSk6cGFyc2VGbG9hdChuLmJvcmRlclRvcFdpZHRoKStwYXJzZUZsb2F0KG4uYm9yZGVyQm90dG9tV2lkdGgpLGlzTmFOKGUpJiYoZT0wKSxkKCl9ZnVuY3Rpb24gdShlKXt2YXIgbj10LnN0eWxlLndpZHRoO3Quc3R5bGUud2lkdGg9IjBweCIsdC5vZmZzZXRXaWR0aCx0LnN0eWxlLndpZHRoPW4sdC5zdHlsZS5vdmVyZmxvd1k9ZX1mdW5jdGlvbiBsKHQpe2Zvcih2YXIgZT1bXTt0JiZ0LnBhcmVudE5vZGUmJnQucGFyZW50Tm9kZSBpbnN0YW5jZW9mIEVsZW1lbnQ7KXQucGFyZW50Tm9kZS5zY3JvbGxUb3AmJmUucHVzaCh7bm9kZTp0LnBhcmVudE5vZGUsc2Nyb2xsVG9wOnQucGFyZW50Tm9kZS5zY3JvbGxUb3B9KSx0PXQucGFyZW50Tm9kZTtyZXR1cm4gZX1mdW5jdGlvbiBmKCl7aWYoMCE9PXQuc2Nyb2xsSGVpZ2h0KXt2YXIgcj1sKHQpLG89ZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50JiZkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuc2Nyb2xsVG9wO3Quc3R5bGUuaGVpZ2h0PSIiLHQuc3R5bGUuaGVpZ2h0PXQuc2Nyb2xsSGVpZ2h0K2UrInB4IixuPXQuY2xpZW50V2lkdGgsci5mb3JFYWNoKChmdW5jdGlvbih0KXt0Lm5vZGUuc2Nyb2xsVG9wPXQuc2Nyb2xsVG9wfSkpLG8mJihkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuc2Nyb2xsVG9wPW8pfX1mdW5jdGlvbiBkKCl7ZigpO3ZhciBlPU1hdGgucm91bmQocGFyc2VGbG9hdCh0LnN0eWxlLmhlaWdodCkpLG49d2luZG93LmdldENvbXB1dGVkU3R5bGUodCxudWxsKSxvPSJjb250ZW50LWJveCI9PT1uLmJveFNpemluZz9NYXRoLnJvdW5kKHBhcnNlRmxvYXQobi5oZWlnaHQpKTp0Lm9mZnNldEhlaWdodDtpZihvPGU/ImhpZGRlbiI9PT1uLm92ZXJmbG93WSYmKHUoInNjcm9sbCIpLGYoKSxvPSJjb250ZW50LWJveCI9PT1uLmJveFNpemluZz9NYXRoLnJvdW5kKHBhcnNlRmxvYXQod2luZG93LmdldENvbXB1dGVkU3R5bGUodCxudWxsKS5oZWlnaHQpKTp0Lm9mZnNldEhlaWdodCk6ImhpZGRlbiIhPT1uLm92ZXJmbG93WSYmKHUoImhpZGRlbiIpLGYoKSxvPSJjb250ZW50LWJveCI9PT1uLmJveFNpemluZz9NYXRoLnJvdW5kKHBhcnNlRmxvYXQod2luZG93LmdldENvbXB1dGVkU3R5bGUodCxudWxsKS5oZWlnaHQpKTp0Lm9mZnNldEhlaWdodCksciE9PW8pe3I9bzt2YXIgYT1pKCJhdXRvc2l6ZTpyZXNpemVkIik7dHJ5e3QuZGlzcGF0Y2hFdmVudChhKX1jYXRjaCh0KXt9fX19ZnVuY3Rpb24gYyh0KXt2YXIgZT1vLmdldCh0KTtlJiZlLmRlc3Ryb3koKX1mdW5jdGlvbiBzKHQpe3ZhciBlPW8uZ2V0KHQpO2UmJmUudXBkYXRlKCl9dmFyIHU9bnVsbDsidW5kZWZpbmVkIj09dHlwZW9mIHdpbmRvd3x8ImZ1bmN0aW9uIiE9dHlwZW9mIHdpbmRvdy5nZXRDb21wdXRlZFN0eWxlPygodT1mdW5jdGlvbih0KXtyZXR1cm4gdH0pLmRlc3Ryb3k9ZnVuY3Rpb24odCl7cmV0dXJuIHR9LHUudXBkYXRlPWZ1bmN0aW9uKHQpe3JldHVybiB0fSk6KCh1PWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHQmJkFycmF5LnByb3RvdHlwZS5mb3JFYWNoLmNhbGwodC5sZW5ndGg/dDpbdF0sKGZ1bmN0aW9uKHQpe3JldHVybiBhKHQsZSl9KSksdH0pLmRlc3Ryb3k9ZnVuY3Rpb24odCl7cmV0dXJuIHQmJkFycmF5LnByb3RvdHlwZS5mb3JFYWNoLmNhbGwodC5sZW5ndGg/dDpbdF0sYyksdH0sdS51cGRhdGU9ZnVuY3Rpb24odCl7cmV0dXJuIHQmJkFycmF5LnByb3RvdHlwZS5mb3JFYWNoLmNhbGwodC5sZW5ndGg/dDpbdF0scyksdH0pLGUuZGVmYXVsdD11LHQuZXhwb3J0cz1lLmRlZmF1bHR9LHZvaWQgMD09PShvPSJmdW5jdGlvbiI9PXR5cGVvZiBuP24uYXBwbHkoZSxyKTpuKXx8KHQuZXhwb3J0cz1vKX0sNDAwNDY6ZnVuY3Rpb24odCxlLG4pe24oNjU2NzkpLG4oNTEwOTApLG4oMjQ3ODUpLG4oODkxNyksbig1NDc4NiksbigxMjgxNiksbig2MTkyNCksbig5ODMwNiksbigxMjAyNSksbigyODMzKSxuKDk2NDUzKSxuKDcwODYzKSxuKDI0ODAyKSxuKDE4MjczKSxuKDQyNDExKSxuKDM3NDgxKSxuKDQ1NTUwKSxuKDU4MTY1KSxuKDUxMTczKSxuKDg3NDMpLG4oNzU4MDQpLG4oNDYxNDYpLG4oMTUwNzcpLG4oNTgzMjkpLG4oNjA1MjUpLG4oNzQ5NTMpLG4oNTQ3ODEpLG4oNTE2Niksbig4OTc1OCksbigxODM3OCksbig5MjUyKSxuKDkzMjcyKSxuKDU2MTU4KSxuKDQxNDU2KSxuKDcyODUxKSxuKDM0NTI5KSxuKDE5Mjc4KSxuKDkxMjA5KSxuKDcyNTYwKSxuKDEwNjMpLG4oOTY0OTgpLG4oMjI0NDIpLG4oNzU4OTQpLG4oNzE2MjIpLG4oNzQ1MzgpLG4oMjEyNyksbig2OTk4OCksbig1NzM4NyksbigzMDgxNyksbig1MjA1NSksbig3MzM2MCksbig0NzUwMiksbigzMzE5NSksbig5MDkxMiksbigyODIwMyksbig3OTIyNyksbig0MzU5MSksbigyMjI3NyksbigyNDEyOSksbig3NDEyMCksbig5NDk2MyksbigyNzM4OCksbig4MDUyMiksbig0NTUyOCksbig4MDExNiksbigyOTExMCksbig4NTU5NCksbig2NzgxMiksbigzMzc5Miksbig4NjIxNCksbig3MDE0Niksbig3MTg0Niksbig1MDA2MyksbigxMDc0Myksbig4MDUxMSksbigxNTM3Myksbig5NzY4OCksbig3NDU2Myksbig2NTAwMyksbig4MTI3Nyksbig0NDAxOSksbigzODIpLG4oMTg4MjMpLG4oMzMzMjIpLG4oMzMwNjUpLG4oMTc0OTQpLG4oODAzNjMpLG4oNDMzOTYpLG4oNjkxODgpLG4oNzQ3OTUpLG4oODIyMDEpLG4oNDE3NzMpLG4oMzA0MDIpLG4oMTgxNzUpLG4oNjY4OTYpLG4oODU3NjcpLG4oODQzNiksbig5MjE5MiksbigxMjE1NSksbigyNjAxNiksbig3NDExNyksbigyODAwMyksbig2Nzk0MSksbig0NDA1MSksbig0OTQ5NSksbig4NzIwOSksbigxODI3NiksbigzNzU0KSxuKDMzNDM3KSxuKDE5NDMzKSxuKDcxODI3KSxuKDI2MDYzKSxuKDk2NyksbigzMzEwMCksbig0MTkyOCksbigxNTg2OSksbig4ODcxNSksbigzNjk5NSksbigxMTIyNCksbig2Mzc2NSksbigxMzA2NCksbigzMjI5MyksbigyMTAzMiksbigzNzkzNiksbig5Mzk5NSksbigxMzM5MyksbigxMTI4MSksbigzODAzNiksbigxMTM4KSxuKDQ2MDc4KSxuKDMwMDgzKSxuKDQ3MzgzKSxuKDcxNTU4KSxuKDk5MjE4KSxuKDk4OTc4KSxuKDgwNjkpLG4oNzAyMDQpLG4oODU3NTgpLG4oMTE3NzMpLG4oMTU3NjMpLG4oNDE2MzIpLG4oMzYyMzMpLG4oNDAwNDUpLG4oMjEzNzYpLG4oODQwNyksbigxNjUwKSxuKDgxMTA0KSxuKDExNjg4KSxuKDE3NjI5KSxuKDQyNDkwKSxuKDk0OTA2KSxuKDc0MDYxKSxuKDU4NjA2KSxuKDQ1MTU3KSxuKDYxMjQ1KSxuKDI5MjczKSxuKDkwNTYwKSxuKDQ1MTU0KSxuKDcwMzczKSxuKDgwNzU3KSxuKDY5ODc5KSxuKDI0NDk4KSxuKDE2OTc4KSxuKDE3MTUyKSxuKDM3OTg3KSxuKDI2ODApLG4oMzgyODApLG4oMTg1NTkpLG4oNTA0ODIpLG4oNzQyMzApLG4oMTg1MDYpLG4oMjAyNDIpLG4oMjgxNTUpLG4oMzM5MDEpLG4oNzY0NDIpLG4oODg2MzYpLG4oODE0NjMpLG4oOTUxNjMpLG4oODM2NzMpLG4oMjM1NjgpLG4oMjcyOTQpLG4oMjQ0NTcpLG4oMzkzMiksbig3NTQ5OSksbig4NzU2NCksbig4NDUwKSxuKDE3NjA1KSxuKDczNTYyKSxuKDExODc4KSxuKDYwOTI5KSxuKDQzOTUxKSxuKDkxMzQ3KSxuKDI5Mjg0KSxuKDYxOTQzKSxuKDI2OTg2KSxuKDEzNjYpLG4oODMzMTApLG4oNDY1OTcpLG4oNzAxMzYpLG4oNjA4NjUpLG4oNjc3MDgpLG4oOTY2MzgpLG4oMzk3MzApLG4oNzQxMTUpLG4oODU2ODYpO3ZhciByPW4oNTYyMzgpO3QuZXhwb3J0cz1yfSw2MDQ5MTpmdW5jdGlvbih0LGUsbil7big0MDA0NiksbigxNTYyNCksbig5MjQwNCk7dmFyIHI9big1NjIzOCk7dC5leHBvcnRzPXJ9LDg2NDcwOmZ1bmN0aW9uKHQpe3QuZXhwb3J0cz1mdW5jdGlvbih0KXtpZigiZnVuY3Rpb24iIT10eXBlb2YgdCl0aHJvdyBUeXBlRXJyb3IoU3RyaW5nKHQpKyIgaXMgbm90IGEgZnVuY3Rpb24iKTtyZXR1cm4gdH19LDc5ODYxOmZ1bmN0aW9uKHQsZSxuKXt2YXIgcj1uKDEwNTkyKTt0LmV4cG9ydHM9ZnVuY3Rpb24odCl7aWYoIXIodCkmJm51bGwhPT10KXRocm93IFR5cGVFcnJvcigiQ2FuJ3Qgc2V0ICIrU3RyaW5nKHQpKyIgYXMgYSBwcm90b3R5cGUiKTtyZXR1cm4gdH19LDc2NTEzOmZ1bmN0aW9uKHQsZSxuKXt2YXIgcj1uKDIzNzI0KSxvPW4oNTA4NjgpLGk9big2Njk3MSksYT1yKCJ1bnNjb3BhYmxlcyIpLGM9QXJyYXkucHJvdG90eXBlO251bGw9PWNbYV0mJmkoYyxhLG8obnVsbCkpLHQuZXhwb3J0cz1mdW5jdGlvbih0KXtjW2FdW3RdPSEwfX0sNTMxNDE6ZnVuY3Rpb24odCxlLG4peyJ1c2Ugc3RyaWN0Ijt2YXIgcj1uKDYwMTQwKS5jaGFyQXQ7dC5leHBvcnRzPWZ1bmN0aW9uKHQsZSxuKXtyZXR1cm4gZSsobj9yKHQsZSkubGVuZ3RoOjEpfX0sNTkzNzk6ZnVuY3Rpb24odCl7dC5leHBvcnRzPWZ1bmN0aW9uKHQsZSxuKXtpZighKHQgaW5zdGFuY2VvZiBlKSl0aHJvdyBUeXBlRXJyb3IoIkluY29ycmVjdCAiKyhuP24rIiAiOiIiKSsiaW52b2NhdGlvbiIpO3JldHVybiB0fX0sODc1Nzk6ZnVuY3Rpb24odCxlLG4pe3ZhciByPW4oMTA1OTIpO3QuZXhwb3J0cz1mdW5jdGlvbih0KXtpZighcih0KSl0aHJvdyBUeXBlRXJyb3IoU3RyaW5nKHQpKyIgaXMgbm90IGFuIG9iamVjdCIpO3JldHVybiB0fX0sNzMwNzQ6ZnVuY3Rpb24odCxlLG4peyJ1c2Ugc3RyaWN0Ijt2YXIgcixvPW4oNjI1NTYpLGk9big4OTU1OCksYT1uKDEwNTkyKSxjPW4oNzYyOTgpLHM9big1OTU5MSksdT1uKDY2OTcxKSxsPW4oOTI5MTMpLGY9bigzNzYyMCkuZixkPW4oNjQ5NjUpLHA9big3MTg0MiksaD1uKDIzNzI0KSx2PW4oNjcyOSksZz1pLkRhdGFWaWV3LHk9ZyYmZy5wcm90b3R5cGUsbT1pLkludDhBcnJheSxiPW0mJm0ucHJvdG90eXBlLHg9aS5VaW50OENsYW1wZWRBcnJheSx3PXgmJngucHJvdG90eXBlLEU9bSYmZChtKSxqPWImJmQoYiksQz1PYmplY3QucHJvdG90eXBlLGs9Qy5pc1Byb3RvdHlwZU9mLFM9aCgidG9TdHJpbmdUYWciKSxPPXYoIlRZUEVEX0FSUkFZX1RBRyIpLEk9ISghaS5BcnJheUJ1ZmZlcnx8IWcpLEE9SSYmISFwJiYiT3BlcmEiIT09cyhpLm9wZXJhKSxUPSExLE09e0ludDhBcnJheToxLFVpbnQ4QXJyYXk6MSxVaW50OENsYW1wZWRBcnJheToxLEludDE2QXJyYXk6MixVaW50MTZBcnJheToyLEludDMyQXJyYXk6NCxVaW50MzJBcnJheTo0LEZsb2F0MzJBcnJheTo0LEZsb2F0NjRBcnJheTo4fSxfPWZ1bmN0aW9uKHQpe3JldHVybiBhKHQpJiZjKE0scyh0KSl9O2ZvcihyIGluIE0paVtyXXx8KEE9ITEpO2lmKCghQXx8ImZ1bmN0aW9uIiE9dHlwZW9mIEV8fEU9PT1GdW5jdGlvbi5wcm90b3R5cGUpJiYoRT1mdW5jdGlvbigpe3Rocm93IFR5cGVFcnJvcigiSW5jb3JyZWN0IGludm9jYXRpb24iKX0sQSkpZm9yKHIgaW4gTSlpW3JdJiZwKGlbcl0sRSk7aWYoKCFBfHwhanx8aj09PUMpJiYoaj1FLnByb3RvdHlwZSxBKSlmb3IociBpbiBNKWlbcl0mJnAoaVtyXS5wcm90b3R5cGUsaik7aWYoQSYmZCh3KSE9PWomJnAodyxqKSxvJiYhYyhqLFMpKWZvcihyIGluIFQ9ITAsZihqLFMse2dldDpmdW5jdGlvbigpe3JldHVybiBhKHRoaXMpP3RoaXNbT106dm9pZCAwfX0pLE0paVtyXSYmdShpW3JdLE8scik7SSYmcCYmZCh5KSE9PUMmJnAoeSxDKSx0LmV4cG9ydHM9e05BVElWRV9BUlJBWV9CVUZGRVI6SSxOQVRJVkVfQVJSQVlfQlVGRkVSX1ZJRVdTOkEsVFlQRURfQVJSQVlfVEFHOlQmJk8sYVR5cGVkQXJyYXk6ZnVuY3Rpb24odCl7aWYoXyh0KSlyZXR1cm4gdDt0aHJvdyBUeXBlRXJyb3IoIlRhcmdldCBpcyBub3QgYSB0eXBlZCBhcnJheSIpfSxhVHlwZWRBcnJheUNvbnN0cnVjdG9yOmZ1bmN0aW9uKHQpe2lmKHApe2lmKGsuY2FsbChFLHQpKXJldHVybiB0fWVsc2UgZm9yKHZhciBlIGluIE0paWYoYyhNLHIpKXt2YXIgbj1pW2VdO2lmKG4mJih0PT09bnx8ay5jYWxsKG4sdCkpKXJldHVybiB0fXRocm93IFR5cGVFcnJvcigiVGFyZ2V0IGlzIG5vdCBhIHR5cGVkIGFycmF5IGNvbnN0cnVjdG9yIil9LGV4cG9ydFR5cGVkQXJyYXlNZXRob2Q6ZnVuY3Rpb24odCxlLG4pe2lmKG8pe2lmKG4pZm9yKHZhciByIGluIE0pe3ZhciBhPWlbcl07YSYmYyhhLnByb3RvdHlwZSx0KSYmZGVsZXRlIGEucHJvdG90eXBlW3RdfWpbdF0mJiFufHxsKGosdCxuP2U6QSYmYlt0XXx8ZSl9fSxleHBvcnRUeXBlZEFycmF5U3RhdGljTWV0aG9kOmZ1bmN0aW9uKHQsZSxuKXt2YXIgcixhO2lmKG8pe2lmKHApe2lmKG4pZm9yKHIgaW4gTSkoYT1pW3JdKSYmYyhhLHQpJiZkZWxldGUgYVt0XTtpZihFW3RdJiYhbilyZXR1cm47dHJ5e3JldHVybiBsKEUsdCxuP2U6QSYmbVt0XXx8ZSl9Y2F0Y2godCl7fX1mb3IociBpbiBNKSEoYT1pW3JdKXx8YVt0XSYmIW58fGwoYSx0LGUpfX0saXNWaWV3OmZ1bmN0aW9uKHQpe3ZhciBlPXModCk7cmV0dXJuIkRhdGFWaWV3Ij09PWV8fGMoTSxlKX0saXNUeXBlZEFycmF5Ol8sVHlwZWRBcnJheTpFLFR5cGVkQXJyYXlQcm90b3R5cGU6an19LDgyODM1OmZ1bmN0aW9uKHQsZSxuKXsidXNlIHN0cmljdCI7dmFyIHI9big4OTU1OCksbz1uKDYyNTU2KSxpPW4oNzMwNzQpLk5BVElWRV9BUlJBWV9CVUZGRVIsYT1uKDY2OTcxKSxjPW4oMTkyNikscz1uKDMyMTg3KSx1PW4oNTkzNzkpLGw9big0MzQxNiksZj1uKDI3ODg0KSxkPW4oODM5MTQpLHA9big5MDcyNSksaD1uKDEzMzM0KS5mLHY9bigzNzYyMCkuZixnPW4oNjU4OTUpLHk9big1MTEyOCksbT1uKDg5ODI3KSxiPW0uZ2V0LHg9bS5zZXQsdz0iQXJyYXlCdWZmZXIiLEU9IkRhdGFWaWV3IixqPSJXcm9uZyBpbmRleCIsQz1yLkFycmF5QnVmZmVyLGs9QyxTPXIuRGF0YVZpZXcsTz1yLlJhbmdlRXJyb3IsST1wLnBhY2ssQT1wLnVucGFjayxUPWZ1bmN0aW9uKHQpe3JldHVyblsyNTUmdF19LE09ZnVuY3Rpb24odCl7cmV0dXJuWzI1NSZ0LHQ+PjgmMjU1XX0sXz1mdW5jdGlvbih0KXtyZXR1cm5bMjU1JnQsdD4+OCYyNTUsdD4+MTYmMjU1LHQ+PjI0JjI1NV19LEw9ZnVuY3Rpb24odCl7cmV0dXJuIHRbM108PDI0fHRbMl08PDE2fHRbMV08PDh8dFswXX0sUj1mdW5jdGlvbih0KXtyZXR1cm4gSSh0LDIzLDQpfSxQPWZ1bmN0aW9uKHQpe3JldHVybiBJKHQsNTIsOCl9LE49ZnVuY3Rpb24odCxlKXt2KHQucHJvdG90eXBlLGUse2dldDpmdW5jdGlvbigpe3JldHVybiBiKHRoaXMpW2VdfX0pfSxEPWZ1bmN0aW9uKHQsZSxuLHIpe3ZhciBvPWQobiksaT1iKHQpO2lmKG8rZT5pLmJ5dGVMZW5ndGgpdGhyb3cgTyhqKTt2YXIgYT1iKGkuYnVmZmVyKS5ieXRlcyxjPW8raS5ieXRlT2Zmc2V0LHM9YS5zbGljZShjLGMrZSk7cmV0dXJuIHI/czpzLnJldmVyc2UoKX0sRj1mdW5jdGlvbih0LGUsbixyLG8saSl7dmFyIGE9ZChuKSxjPWIodCk7aWYoYStlPmMuYnl0ZUxlbmd0aCl0aHJvdyBPKGopO2Zvcih2YXIgcz1iKGMuYnVmZmVyKS5ieXRlcyx1PWErYy5ieXRlT2Zmc2V0LGw9cigrbyksZj0wO2Y8ZTtmKyspc1t1K2ZdPWxbaT9mOmUtZi0xXX07aWYoaSl7aWYoIXMoKGZ1bmN0aW9uKCl7QygxKX0pKXx8IXMoKGZ1bmN0aW9uKCl7bmV3IEMoLTEpfSkpfHxzKChmdW5jdGlvbigpe3JldHVybiBuZXcgQyxuZXcgQygxLjUpLG5ldyBDKE5hTiksQy5uYW1lIT13fSkpKXtmb3IodmFyIFUsQj0oaz1mdW5jdGlvbih0KXtyZXR1cm4gdSh0aGlzLGspLG5ldyBDKGQodCkpfSkucHJvdG90eXBlPUMucHJvdG90eXBlLHo9aChDKSxWPTA7ei5sZW5ndGg+VjspKFU9eltWKytdKWluIGt8fGEoayxVLENbVV0pO0IuY29uc3RydWN0b3I9a312YXIgSD1uZXcgUyhuZXcgaygyKSkscT1TLnByb3RvdHlwZS5zZXRJbnQ4O0guc2V0SW50OCgwLDIxNDc0ODM2NDgpLEguc2V0SW50OCgxLDIxNDc0ODM2NDkpLCFILmdldEludDgoMCkmJkguZ2V0SW50OCgxKXx8YyhTLnByb3RvdHlwZSx7c2V0SW50ODpmdW5jdGlvbih0LGUpe3EuY2FsbCh0aGlzLHQsZTw8MjQ+PjI0KX0sc2V0VWludDg6ZnVuY3Rpb24odCxlKXtxLmNhbGwodGhpcyx0LGU8PDI0Pj4yNCl9fSx7dW5zYWZlOiEwfSl9ZWxzZSBrPWZ1bmN0aW9uKHQpe3UodGhpcyxrLHcpO3ZhciBlPWQodCk7eCh0aGlzLHtieXRlczpnLmNhbGwobmV3IEFycmF5KGUpLDApLGJ5dGVMZW5ndGg6ZX0pLG98fCh0aGlzLmJ5dGVMZW5ndGg9ZSl9LFM9ZnVuY3Rpb24odCxlLG4pe3UodGhpcyxTLEUpLHUodCxrLEUpO3ZhciByPWIodCkuYnl0ZUxlbmd0aCxpPWwoZSk7aWYoaTwwfHxpPnIpdGhyb3cgTygiV3Jvbmcgb2Zmc2V0Iik7aWYoaSsobj12b2lkIDA9PT1uP3ItaTpmKG4pKT5yKXRocm93IE8oIldyb25nIGxlbmd0aCIpO3godGhpcyx7YnVmZmVyOnQsYnl0ZUxlbmd0aDpuLGJ5dGVPZmZzZXQ6aX0pLG98fCh0aGlzLmJ1ZmZlcj10LHRoaXMuYnl0ZUxlbmd0aD1uLHRoaXMuYnl0ZU9mZnNldD1pKX0sbyYmKE4oaywiYnl0ZUxlbmd0aCIpLE4oUywiYnVmZmVyIiksTihTLCJieXRlTGVuZ3RoIiksTihTLCJieXRlT2Zmc2V0IikpLGMoUy5wcm90b3R5cGUse2dldEludDg6ZnVuY3Rpb24odCl7cmV0dXJuIEQodGhpcywxLHQpWzBdPDwyND4+MjR9LGdldFVpbnQ4OmZ1bmN0aW9uKHQpe3JldHVybiBEKHRoaXMsMSx0KVswXX0sZ2V0SW50MTY6ZnVuY3Rpb24odCl7dmFyIGU9RCh0aGlzLDIsdCxhcmd1bWVudHMubGVuZ3RoPjE/YXJndW1lbnRzWzFdOnZvaWQgMCk7cmV0dXJuKGVbMV08PDh8ZVswXSk8PDE2Pj4xNn0sZ2V0VWludDE2OmZ1bmN0aW9uKHQpe3ZhciBlPUQodGhpcywyLHQsYXJndW1lbnRzLmxlbmd0aD4xP2FyZ3VtZW50c1sxXTp2b2lkIDApO3JldHVybiBlWzFdPDw4fGVbMF19LGdldEludDMyOmZ1bmN0aW9uKHQpe3JldHVybiBMKEQodGhpcyw0LHQsYXJndW1lbnRzLmxlbmd0aD4xP2FyZ3VtZW50c1sxXTp2b2lkIDApKX0sZ2V0VWludDMyOmZ1bmN0aW9uKHQpe3JldHVybiBMKEQodGhpcyw0LHQsYXJndW1lbnRzLmxlbmd0aD4xP2FyZ3VtZW50c1sxXTp2b2lkIDApKT4+PjB9LGdldEZsb2F0MzI6ZnVuY3Rpb24odCl7cmV0dXJuIEEoRCh0aGlzLDQsdCxhcmd1bWVudHMubGVuZ3RoPjE/YXJndW1lbnRzWzFdOnZvaWQgMCksMjMpfSxnZXRGbG9hdDY0OmZ1bmN0aW9uKHQpe3JldHVybiBBKEQodGhpcyw4LHQsYXJndW1lbnRzLmxlbmd0aD4xP2FyZ3VtZW50c1sxXTp2b2lkIDApLDUyKX0sc2V0SW50ODpmdW5jdGlvbih0LGUpe0YodGhpcywxLHQsVCxlKX0sc2V0VWludDg6ZnVuY3Rpb24odCxlKXtGKHRoaXMsMSx0LFQsZSl9LHNldEludDE2OmZ1bmN0aW9uKHQsZSl7Rih0aGlzLDIsdCxNLGUsYXJndW1lbnRzLmxlbmd0aD4yP2FyZ3VtZW50c1syXTp2b2lkIDApfSxzZXRVaW50MTY6ZnVuY3Rpb24odCxlKXtGKHRoaXMsMix0LE0sZSxhcmd1bWVudHMubGVuZ3RoPjI/YXJndW1lbnRzWzJdOnZvaWQgMCl9LHNldEludDMyOmZ1bmN0aW9uKHQsZSl7Rih0aGlzLDQsdCxfLGUsYXJndW1lbnRzLmxlbmd0aD4yP2FyZ3VtZW50c1syXTp2b2lkIDApfSxzZXRVaW50MzI6ZnVuY3Rpb24odCxlKXtGKHRoaXMsNCx0LF8sZSxhcmd1bWVudHMubGVuZ3RoPjI/YXJndW1lbnRzWzJdOnZvaWQgMCl9LHNldEZsb2F0MzI6ZnVuY3Rpb24odCxlKXtGKHRoaXMsNCx0LFIsZSxhcmd1bWVudHMubGVuZ3RoPjI/YXJndW1lbnRzWzJdOnZvaWQgMCl9LHNldEZsb2F0NjQ6ZnVuY3Rpb24odCxlKXtGKHRoaXMsOCx0LFAsZSxhcmd1bWVudHMubGVuZ3RoPjI/YXJndW1lbnRzWzJdOnZvaWQgMCl9fSk7eShrLHcpLHkoUyxFKSx0LmV4cG9ydHM9e0FycmF5QnVmZmVyOmssRGF0YVZpZXc6U319LDk5NDMxOmZ1bmN0aW9uKHQsZSxuKXsidXNlIHN0cmljdCI7dmFyIHI9bigxOTIwOSksbz1uKDc2OTc2KSxpPW4oMjc4ODQpLGE9TWF0aC5taW47dC5leHBvcnRzPVtdLmNvcHlXaXRoaW58fGZ1bmN0aW9uKHQsZSl7dmFyIG49cih0aGlzKSxjPWkobi5sZW5ndGgpLHM9byh0LGMpLHU9byhlLGMpLGw9YXJndW1lbnRzLmxlbmd0aD4yP2FyZ3VtZW50c1syXTp2b2lkIDAsZj1hKCh2b2lkIDA9PT1sP2M6byhsLGMpKS11LGMtcyksZD0xO2Zvcih1PHMmJnM8dStmJiYoZD0tMSx1Kz1mLTEscys9Zi0xKTtmLS0gPjA7KXUgaW4gbj9uW3NdPW5bdV06ZGVsZXRlIG5bc10scys9ZCx1Kz1kO3JldHVybiBufX0sNjU4OTU6ZnVuY3Rpb24odCxlLG4peyJ1c2Ugc3RyaWN0Ijt2YXIgcj1uKDE5MjA5KSxvPW4oNzY5NzYpLGk9bigyNzg4NCk7dC5leHBvcnRzPWZ1bmN0aW9uKHQpe2Zvcih2YXIgZT1yKHRoaXMpLG49aShlLmxlbmd0aCksYT1hcmd1bWVudHMubGVuZ3RoLGM9byhhPjE/YXJndW1lbnRzWzFdOnZvaWQgMCxuKSxzPWE+Mj9hcmd1bWVudHNbMl06dm9pZCAwLHU9dm9pZCAwPT09cz9uOm8ocyxuKTt1PmM7KWVbYysrXT10O3JldHVybiBlfX0sMzEzNjg6ZnVuY3Rpb24odCxlLG4peyJ1c2Ugc3RyaWN0Ijt2YXIgcj1uKDMwMDI1KS5mb3JFYWNoLG89bigyMjkwOSk7dC5leHBvcnRzPW8oImZvckVhY2giKT9mdW5jdGlvbih0KXtyZXR1cm4gcih0aGlzLHQsYXJndW1lbnRzLmxlbmd0aD4xP2FyZ3VtZW50c1sxXTp2b2lkIDApfTpbXS5mb3JFYWNofSw4NTE2NjpmdW5jdGlvbih0LGUsbil7InVzZSBzdHJpY3QiO3ZhciByPW4oNDYxMzApLG89bigxOTIwOSksaT1uKDEyMjc4KSxhPW4oNDQ5ODQpLGM9bigyNzg4NCkscz1uKDU4ODEwKSx1PW4oNzM4OTApO3QuZXhwb3J0cz1mdW5jdGlvbih0KXt2YXIgZSxuLGwsZixkLHA9byh0KSxoPSJmdW5jdGlvbiI9PXR5cGVvZiB0aGlzP3RoaXM6QXJyYXksdj1hcmd1bWVudHMubGVuZ3RoLGc9dj4xP2FyZ3VtZW50c1sxXTp2b2lkIDAseT12b2lkIDAhPT1nLG09MCxiPXUocCk7aWYoeSYmKGc9cihnLHY+Mj9hcmd1bWVudHNbMl06dm9pZCAwLDIpKSxudWxsPT1ifHxoPT1BcnJheSYmYShiKSlmb3Iobj1uZXcgaChlPWMocC5sZW5ndGgpKTtlPm07bSsrKXMobixtLHk/ZyhwW21dLG0pOnBbbV0pO2Vsc2UgZm9yKGQ9KGY9Yi5jYWxsKHApKS5uZXh0LG49bmV3IGg7IShsPWQuY2FsbChmKSkuZG9uZTttKyspcyhuLG0seT9pKGYsZyxbbC52YWx1ZSxtXSwhMCk6bC52YWx1ZSk7cmV0dXJuIG4ubGVuZ3RoPW0sbn19LDg1ODAzOmZ1bmN0aW9uKHQsZSxuKXt2YXIgcj1uKDk1NzMpLG89bigyNzg4NCksaT1uKDc2OTc2KSxhPWZ1bmN0aW9uKHQpe3JldHVybiBmdW5jdGlvbihlLG4sYSl7dmFyIGMscz1yKGUpLHU9byhzLmxlbmd0aCksbD1pKGEsdSk7aWYodCYmbiE9bil7Zm9yKDt1Pmw7KWlmKChjPXNbbCsrXSkhPWMpcmV0dXJuITB9ZWxzZSBmb3IoO3U+bDtsKyspaWYoKHR8fGwgaW4gcykmJnNbbF09PT1uKXJldHVybiB0fHxsfHwwO3JldHVybiF0JiYtMX19O3QuZXhwb3J0cz17aW5jbHVkZXM6YSghMCksaW5kZXhPZjphKCExKX19LDMwMDI1OmZ1bmN0aW9uKHQsZSxuKXt2YXIgcj1uKDQ2MTMwKSxvPW4oMjQ5OCksaT1uKDE5MjA5KSxhPW4oMjc4ODQpLGM9big3MDA5KSxzPVtdLnB1c2gsdT1mdW5jdGlvbih0KXt2YXIgZT0xPT10LG49Mj09dCx1PTM9PXQsbD00PT10LGY9Nj09dCxkPTU9PXR8fGY7cmV0dXJuIGZ1bmN0aW9uKHAsaCx2LGcpe2Zvcih2YXIgeSxtLGI9aShwKSx4PW8oYiksdz1yKGgsdiwzKSxFPWEoeC5sZW5ndGgpLGo9MCxDPWd8fGMsaz1lP0MocCxFKTpuP0MocCwwKTp2b2lkIDA7RT5qO2orKylpZigoZHx8aiBpbiB4KSYmKG09dyh5PXhbal0saixiKSx0KSlpZihlKWtbal09bTtlbHNlIGlmKG0pc3dpdGNoKHQpe2Nhc2UgMzpyZXR1cm4hMDtjYXNlIDU6cmV0dXJuIHk7Y2FzZSA2OnJldHVybiBqO2Nhc2UgMjpzLmNhbGwoayx5KX1lbHNlIGlmKGwpcmV0dXJuITE7cmV0dXJuIGY/LTE6dXx8bD9sOmt9fTt0LmV4cG9ydHM9e2ZvckVhY2g6dSgwKSxtYXA6dSgxKSxmaWx0ZXI6dSgyKSxzb21lOnUoMyksZXZlcnk6dSg0KSxmaW5kOnUoNSksZmluZEluZGV4OnUoNil9fSw0OTI0OTpmdW5jdGlvbih0LGUsbil7InVzZSBzdHJpY3QiO3ZhciByPW4oOTU3Myksbz1uKDQzNDE2KSxpPW4oMjc4ODQpLGE9bigyMjkwOSksYz1NYXRoLm1pbixzPVtdLmxhc3RJbmRleE9mLHU9ISFzJiYxL1sxXS5sYXN0SW5kZXhPZigxLC0wKTwwLGw9YSgibGFzdEluZGV4T2YiKTt0LmV4cG9ydHM9dXx8bD9mdW5jdGlvbih0KXtpZih1KXJldHVybiBzLmFwcGx5KHRoaXMsYXJndW1lbnRzKXx8MDt2YXIgZT1yKHRoaXMpLG49aShlLmxlbmd0aCksYT1uLTE7Zm9yKGFyZ3VtZW50cy5sZW5ndGg+MSYmKGE9YyhhLG8oYXJndW1lbnRzWzFdKSkpLGE8MCYmKGE9bithKTthPj0wO2EtLSlpZihhIGluIGUmJmVbYV09PT10KXJldHVybiBhfHwwO3JldHVybi0xfTpzfSw2MTk2MzpmdW5jdGlvbih0LGUsbil7dmFyIHI9bigzMjE4Nyksbz1uKDIzNzI0KSxpPW4oNzkwNzEpLGE9bygic3BlY2llcyIpO3QuZXhwb3J0cz1mdW5jdGlvbih0KXtyZXR1cm4gaT49NTF8fCFyKChmdW5jdGlvbigpe3ZhciBlPVtdO3JldHVybihlLmNvbnN0cnVjdG9yPXt9KVthXT1mdW5jdGlvbigpe3JldHVybntmb286MX19LDEhPT1lW3RdKEJvb2xlYW4pLmZvb30pKX19LDEyMzY2OmZ1bmN0aW9uKHQsZSxuKXt2YXIgcj1uKDg2NDcwKSxvPW4oMTkyMDkpLGk9bigyNDk4KSxhPW4oMjc4ODQpLGM9ZnVuY3Rpb24odCl7cmV0dXJuIGZ1bmN0aW9uKGUsbixjLHMpe3Iobik7dmFyIHU9byhlKSxsPWkodSksZj1hKHUubGVuZ3RoKSxkPXQ/Zi0xOjAscD10Py0xOjE7aWYoYzwyKWZvcig7Oyl7aWYoZCBpbiBsKXtzPWxbZF0sZCs9cDticmVha31pZihkKz1wLHQ/ZDwwOmY8PWQpdGhyb3cgVHlwZUVycm9yKCJSZWR1Y2Ugb2YgZW1wdHkgYXJyYXkgd2l0aCBubyBpbml0aWFsIHZhbHVlIil9Zm9yKDt0P2Q+PTA6Zj5kO2QrPXApZCBpbiBsJiYocz1uKHMsbFtkXSxkLHUpKTtyZXR1cm4gc319O3QuZXhwb3J0cz17bGVmdDpjKCExKSxyaWdodDpjKCEwKX19LDcwMDk6ZnVuY3Rpb24odCxlLG4pe3ZhciByPW4oMTA1OTIpLG89big2MTk5KSxpPW4oMjM3MjQpKCJzcGVjaWVzIik7dC5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7dmFyIG47cmV0dXJuIG8odCkmJigiZnVuY3Rpb24iIT10eXBlb2Yobj10LmNvbnN0cnVjdG9yKXx8biE9PUFycmF5JiYhbyhuLnByb3RvdHlwZSk/cihuKSYmbnVsbD09PShuPW5baV0pJiYobj12b2lkIDApOm49dm9pZCAwKSxuZXcodm9pZCAwPT09bj9BcnJheTpuKSgwPT09ZT8wOmUpfX0sNDU2NjY6ZnVuY3Rpb24odCxlLG4peyJ1c2Ugc3RyaWN0Ijt2YXIgcj1uKDg2NDcwKSxvPW4oODc1NzkpLGk9big3NzAxKSgiUHJvbWlzZSIpLGE9W10ucHVzaCxjPWZ1bmN0aW9uKHQpe3ZhciBlPTA9PXQsbj0xPT10LGM9Mj09dCxzPTM9PXQ7cmV0dXJuIGZ1bmN0aW9uKHQsdSl7byh0KTt2YXIgbD1yKHQubmV4dCksZj1lP1tdOnZvaWQgMDtyZXR1cm4gZXx8cih1KSxuZXcgaSgoZnVuY3Rpb24ocixkKXt2YXIgcD1mdW5jdGlvbigpe3RyeXtpLnJlc29sdmUobyhsLmNhbGwodCkpKS50aGVuKChmdW5jdGlvbih0KXt0cnl7aWYobyh0KS5kb25lKXIoZT9mOiFzJiYoY3x8dm9pZCAwKSk7ZWxzZXt2YXIgbD10LnZhbHVlO2U/KGEuY2FsbChmLGwpLHAoKSk6aS5yZXNvbHZlKHUobCkpLnRoZW4oKGZ1bmN0aW9uKHQpe24/cCgpOmM/dD9wKCk6cighMSk6dD9yKHN8fGwpOnAoKX0pLGQpfX1jYXRjaCh0KXtkKHQpfX0pLGQpfWNhdGNoKHQpe2QodCl9fTtwKCl9KSl9fTt0LmV4cG9ydHM9e3RvQXJyYXk6YygwKSxmb3JFYWNoOmMoMSksZXZlcnk6YygyKSxzb21lOmMoMyksZmluZDpjKDQpfX0sNjM4NDU6ZnVuY3Rpb24odCxlLG4pe3ZhciByLG8saT1uKDg5NTU4KSxhPW4oMzQ3NDEpLGM9big2NDk2NSkscz1uKDc2Mjk4KSx1PW4oNjY5NzEpLGw9bigyMzcyNCksZj1uKDY1NjcyKSxkPWwoImFzeW5jSXRlcmF0b3IiKSxwPWkuQXN5bmNJdGVyYXRvcixoPWEuQXN5bmNJdGVyYXRvclByb3RvdHlwZTtpZighZilpZihoKXI9aDtlbHNlIGlmKCJmdW5jdGlvbiI9PXR5cGVvZiBwKXI9cC5wcm90b3R5cGU7ZWxzZSBpZihhLlVTRV9GVU5DVElPTl9DT05TVFJVQ1RPUnx8aS5VU0VfRlVOQ1RJT05fQ09OU1RSVUNUT1IpdHJ5e289YyhjKGMoRnVuY3Rpb24oInJldHVybiBhc3luYyBmdW5jdGlvbiooKXt9KCkiKSgpKSkpLGMobyk9PT1PYmplY3QucHJvdG90eXBlJiYocj1vKX1jYXRjaCh0KXt9cnx8KHI9e30pLHMocixkKXx8dShyLGQsKGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXN9KSksdC5leHBvcnRzPXJ9LDQ2MTMwOmZ1bmN0aW9uKHQsZSxuKXt2YXIgcj1uKDg2NDcwKTt0LmV4cG9ydHM9ZnVuY3Rpb24odCxlLG4pe2lmKHIodCksdm9pZCAwPT09ZSlyZXR1cm4gdDtzd2l0Y2gobil7Y2FzZSAwOnJldHVybiBmdW5jdGlvbigpe3JldHVybiB0LmNhbGwoZSl9O2Nhc2UgMTpyZXR1cm4gZnVuY3Rpb24obil7cmV0dXJuIHQuY2FsbChlLG4pfTtjYXNlIDI6cmV0dXJuIGZ1bmN0aW9uKG4scil7cmV0dXJuIHQuY2FsbChlLG4scil9O2Nhc2UgMzpyZXR1cm4gZnVuY3Rpb24obixyLG8pe3JldHVybiB0LmNhbGwoZSxuLHIsbyl9fXJldHVybiBmdW5jdGlvbigpe3JldHVybiB0LmFwcGx5KGUsYXJndW1lbnRzKX19fSwxMjI3ODpmdW5jdGlvbih0LGUsbil7dmFyIHI9big4NzU3OSk7dC5leHBvcnRzPWZ1bmN0aW9uKHQsZSxuLG8pe3RyeXtyZXR1cm4gbz9lKHIobilbMF0sblsxXSk6ZShuKX1jYXRjaChlKXt2YXIgaT10LnJldHVybjt0aHJvdyB2b2lkIDAhPT1pJiZyKGkuY2FsbCh0KSksZX19fSw0Nzk2OmZ1bmN0aW9uKHQsZSxuKXt2YXIgcj1uKDIzNzI0KSgiaXRlcmF0b3IiKSxvPSExO3RyeXt2YXIgaT0wLGE9e25leHQ6ZnVuY3Rpb24oKXtyZXR1cm57ZG9uZTohIWkrK319LHJldHVybjpmdW5jdGlvbigpe289ITB9fTthW3JdPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXN9LEFycmF5LmZyb20oYSwoZnVuY3Rpb24oKXt0aHJvdyAyfSkpfWNhdGNoKHQpe310LmV4cG9ydHM9ZnVuY3Rpb24odCxlKXtpZighZSYmIW8pcmV0dXJuITE7dmFyIG49ITE7dHJ5e3ZhciBpPXt9O2lbcl09ZnVuY3Rpb24oKXtyZXR1cm57bmV4dDpmdW5jdGlvbigpe3JldHVybntkb25lOm49ITB9fX19LHQoaSl9Y2F0Y2godCl7fXJldHVybiBufX0sMjQ1OTQ6ZnVuY3Rpb24odCl7dmFyIGU9e30udG9TdHJpbmc7dC5leHBvcnRzPWZ1bmN0aW9uKHQpe3JldHVybiBlLmNhbGwodCkuc2xpY2UoOCwtMSl9fSw1OTU5MTpmdW5jdGlvbih0LGUsbil7dmFyIHI9big5MDYxMyksbz1uKDI0NTk0KSxpPW4oMjM3MjQpKCJ0b1N0cmluZ1RhZyIpLGE9IkFyZ3VtZW50cyI9PW8oZnVuY3Rpb24oKXtyZXR1cm4gYXJndW1lbnRzfSgpKTt0LmV4cG9ydHM9cj9vOmZ1bmN0aW9uKHQpe3ZhciBlLG4scjtyZXR1cm4gdm9pZCAwPT09dD8iVW5kZWZpbmVkIjpudWxsPT09dD8iTnVsbCI6InN0cmluZyI9PXR5cGVvZihuPWZ1bmN0aW9uKHQsZSl7dHJ5e3JldHVybiB0W2VdfWNhdGNoKHQpe319KGU9T2JqZWN0KHQpLGkpKT9uOmE/byhlKToiT2JqZWN0Ij09KHI9byhlKSkmJiJmdW5jdGlvbiI9PXR5cGVvZiBlLmNhbGxlZT8iQXJndW1lbnRzIjpyfX0sOTgxNzk6ZnVuY3Rpb24odCxlLG4peyJ1c2Ugc3RyaWN0Ijt2YXIgcj1uKDg3NTc5KSxvPW4oODY0NzApO3QuZXhwb3J0cz1mdW5jdGlvbigpe2Zvcih2YXIgdD1yKHRoaXMpLGU9byh0LmFkZCksbj0wLGk9YXJndW1lbnRzLmxlbmd0aDtuPGk7bisrKWUuY2FsbCh0LGFyZ3VtZW50c1tuXSk7cmV0dXJuIHR9fSwxNDY2OmZ1bmN0aW9uKHQsZSxuKXsidXNlIHN0cmljdCI7dmFyIHI9big4NzU3OSksbz1uKDg2NDcwKTt0LmV4cG9ydHM9ZnVuY3Rpb24oKXtmb3IodmFyIHQsZT1yKHRoaXMpLG49byhlLmRlbGV0ZSksaT0hMCxhPTAsYz1hcmd1bWVudHMubGVuZ3RoO2E8YzthKyspdD1uLmNhbGwoZSxhcmd1bWVudHNbYV0pLGk9aSYmdDtyZXR1cm4hIWl9fSwxMjkwMTpmdW5jdGlvbih0LGUsbil7InVzZSBzdHJpY3QiO3ZhciByPW4oODY0NzApLG89big0NjEzMCksaT1uKDQxMzM0KTt0LmV4cG9ydHM9ZnVuY3Rpb24odCl7dmFyIGUsbixhLGMscz1hcmd1bWVudHMubGVuZ3RoLHU9cz4xP2FyZ3VtZW50c1sxXTp2b2lkIDA7cmV0dXJuIHIodGhpcyksKGU9dm9pZCAwIT09dSkmJnIodSksbnVsbD09dD9uZXcgdGhpczoobj1bXSxlPyhhPTAsYz1vKHUscz4yP2FyZ3VtZW50c1syXTp2b2lkIDAsMiksaSh0LChmdW5jdGlvbih0KXtuLnB1c2goYyh0LGErKykpfSkpKTppKHQsbi5wdXNoLG4pLG5ldyB0aGlzKG4pKX19LDI1MDI2OmZ1bmN0aW9uKHQpeyJ1c2Ugc3RyaWN0Ijt0LmV4cG9ydHM9ZnVuY3Rpb24oKXtmb3IodmFyIHQ9YXJndW1lbnRzLmxlbmd0aCxlPW5ldyBBcnJheSh0KTt0LS07KWVbdF09YXJndW1lbnRzW3RdO3JldHVybiBuZXcgdGhpcyhlKX19LDY0NTA6ZnVuY3Rpb24odCxlLG4peyJ1c2Ugc3RyaWN0Ijt2YXIgcj1uKDM3NjIwKS5mLG89big1MDg2OCksaT1uKDE5MjYpLGE9big0NjEzMCksYz1uKDU5Mzc5KSxzPW4oNDEzMzQpLHU9big0NjA2MSksbD1uKDY3NTM4KSxmPW4oNjI1NTYpLGQ9big5NjAzKS5mYXN0S2V5LHA9big4OTgyNyksaD1wLnNldCx2PXAuZ2V0dGVyRm9yO3QuZXhwb3J0cz17Z2V0Q29uc3RydWN0b3I6ZnVuY3Rpb24odCxlLG4sdSl7dmFyIGw9dCgoZnVuY3Rpb24odCxyKXtjKHQsbCxlKSxoKHQse3R5cGU6ZSxpbmRleDpvKG51bGwpLGZpcnN0OnZvaWQgMCxsYXN0OnZvaWQgMCxzaXplOjB9KSxmfHwodC5zaXplPTApLG51bGwhPXImJnMocix0W3VdLHQsbil9KSkscD12KGUpLGc9ZnVuY3Rpb24odCxlLG4pe3ZhciByLG8saT1wKHQpLGE9eSh0LGUpO3JldHVybiBhP2EudmFsdWU9bjooaS5sYXN0PWE9e2luZGV4Om89ZChlLCEwKSxrZXk6ZSx2YWx1ZTpuLHByZXZpb3VzOnI9aS5sYXN0LG5leHQ6dm9pZCAwLHJlbW92ZWQ6ITF9LGkuZmlyc3R8fChpLmZpcnN0PWEpLHImJihyLm5leHQ9YSksZj9pLnNpemUrKzp0LnNpemUrKywiRiIhPT1vJiYoaS5pbmRleFtvXT1hKSksdH0seT1mdW5jdGlvbih0LGUpe3ZhciBuLHI9cCh0KSxvPWQoZSk7aWYoIkYiIT09bylyZXR1cm4gci5pbmRleFtvXTtmb3Iobj1yLmZpcnN0O247bj1uLm5leHQpaWYobi5rZXk9PWUpcmV0dXJuIG59O3JldHVybiBpKGwucHJvdG90eXBlLHtjbGVhcjpmdW5jdGlvbigpe2Zvcih2YXIgdD1wKHRoaXMpLGU9dC5pbmRleCxuPXQuZmlyc3Q7bjspbi5yZW1vdmVkPSEwLG4ucHJldmlvdXMmJihuLnByZXZpb3VzPW4ucHJldmlvdXMubmV4dD12b2lkIDApLGRlbGV0ZSBlW24uaW5kZXhdLG49bi5uZXh0O3QuZmlyc3Q9dC5sYXN0PXZvaWQgMCxmP3Quc2l6ZT0wOnRoaXMuc2l6ZT0wfSxkZWxldGU6ZnVuY3Rpb24odCl7dmFyIGU9dGhpcyxuPXAoZSkscj15KGUsdCk7aWYocil7dmFyIG89ci5uZXh0LGk9ci5wcmV2aW91cztkZWxldGUgbi5pbmRleFtyLmluZGV4XSxyLnJlbW92ZWQ9ITAsaSYmKGkubmV4dD1vKSxvJiYoby5wcmV2aW91cz1pKSxuLmZpcnN0PT1yJiYobi5maXJzdD1vKSxuLmxhc3Q9PXImJihuLmxhc3Q9aSksZj9uLnNpemUtLTplLnNpemUtLX1yZXR1cm4hIXJ9LGZvckVhY2g6ZnVuY3Rpb24odCl7Zm9yKHZhciBlLG49cCh0aGlzKSxyPWEodCxhcmd1bWVudHMubGVuZ3RoPjE/YXJndW1lbnRzWzFdOnZvaWQgMCwzKTtlPWU/ZS5uZXh0Om4uZmlyc3Q7KWZvcihyKGUudmFsdWUsZS5rZXksdGhpcyk7ZSYmZS5yZW1vdmVkOyllPWUucHJldmlvdXN9LGhhczpmdW5jdGlvbih0KXtyZXR1cm4hIXkodGhpcyx0KX19KSxpKGwucHJvdG90eXBlLG4/e2dldDpmdW5jdGlvbih0KXt2YXIgZT15KHRoaXMsdCk7cmV0dXJuIGUmJmUudmFsdWV9LHNldDpmdW5jdGlvbih0LGUpe3JldHVybiBnKHRoaXMsMD09PXQ/MDp0LGUpfX06e2FkZDpmdW5jdGlvbih0KXtyZXR1cm4gZyh0aGlzLHQ9MD09PXQ/MDp0LHQpfX0pLGYmJnIobC5wcm90b3R5cGUsInNpemUiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gcCh0aGlzKS5zaXplfX0pLGx9LHNldFN0cm9uZzpmdW5jdGlvbih0LGUsbil7dmFyIHI9ZSsiIEl0ZXJhdG9yIixvPXYoZSksaT12KHIpO3UodCxlLChmdW5jdGlvbih0LGUpe2godGhpcyx7dHlwZTpyLHRhcmdldDp0LHN0YXRlOm8odCksa2luZDplLGxhc3Q6dm9pZCAwfSl9KSwoZnVuY3Rpb24oKXtmb3IodmFyIHQ9aSh0aGlzKSxlPXQua2luZCxuPXQubGFzdDtuJiZuLnJlbW92ZWQ7KW49bi5wcmV2aW91cztyZXR1cm4gdC50YXJnZXQmJih0Lmxhc3Q9bj1uP24ubmV4dDp0LnN0YXRlLmZpcnN0KT8ia2V5cyI9PWU/e3ZhbHVlOm4ua2V5LGRvbmU6ITF9OiJ2YWx1ZXMiPT1lP3t2YWx1ZTpuLnZhbHVlLGRvbmU6ITF9Ont2YWx1ZTpbbi5rZXksbi52YWx1ZV0sZG9uZTohMX06KHQudGFyZ2V0PXZvaWQgMCx7dmFsdWU6dm9pZCAwLGRvbmU6ITB9KX0pLG4/ImVudHJpZXMiOiJ2YWx1ZXMiLCFuLCEwKSxsKGUpfX19LDcxMzAzOmZ1bmN0aW9uKHQsZSxuKXsidXNlIHN0cmljdCI7dmFyIHI9bigxOTI2KSxvPW4oOTYwMykuZ2V0V2Vha0RhdGEsaT1uKDg3NTc5KSxhPW4oMTA1OTIpLGM9big1OTM3OSkscz1uKDQxMzM0KSx1PW4oMzAwMjUpLGw9big3NjI5OCksZj1uKDg5ODI3KSxkPWYuc2V0LHA9Zi5nZXR0ZXJGb3IsaD11LmZpbmQsdj11LmZpbmRJbmRleCxnPTAseT1mdW5jdGlvbih0KXtyZXR1cm4gdC5mcm96ZW58fCh0LmZyb3plbj1uZXcgbSl9LG09ZnVuY3Rpb24oKXt0aGlzLmVudHJpZXM9W119LGI9ZnVuY3Rpb24odCxlKXtyZXR1cm4gaCh0LmVudHJpZXMsKGZ1bmN0aW9uKHQpe3JldHVybiB0WzBdPT09ZX0pKX07bS5wcm90b3R5cGU9e2dldDpmdW5jdGlvbih0KXt2YXIgZT1iKHRoaXMsdCk7aWYoZSlyZXR1cm4gZVsxXX0saGFzOmZ1bmN0aW9uKHQpe3JldHVybiEhYih0aGlzLHQpfSxzZXQ6ZnVuY3Rpb24odCxlKXt2YXIgbj1iKHRoaXMsdCk7bj9uWzFdPWU6dGhpcy5lbnRyaWVzLnB1c2goW3QsZV0pfSxkZWxldGU6ZnVuY3Rpb24odCl7dmFyIGU9dih0aGlzLmVudHJpZXMsKGZ1bmN0aW9uKGUpe3JldHVybiBlWzBdPT09dH0pKTtyZXR1cm5+ZSYmdGhpcy5lbnRyaWVzLnNwbGljZShlLDEpLCEhfmV9fSx0LmV4cG9ydHM9e2dldENvbnN0cnVjdG9yOmZ1bmN0aW9uKHQsZSxuLHUpe3ZhciBmPXQoKGZ1bmN0aW9uKHQscil7Yyh0LGYsZSksZCh0LHt0eXBlOmUsaWQ6ZysrLGZyb3plbjp2b2lkIDB9KSxudWxsIT1yJiZzKHIsdFt1XSx0LG4pfSkpLGg9cChlKSx2PWZ1bmN0aW9uKHQsZSxuKXt2YXIgcj1oKHQpLGE9byhpKGUpLCEwKTtyZXR1cm4hMD09PWE/eShyKS5zZXQoZSxuKTphW3IuaWRdPW4sdH07cmV0dXJuIHIoZi5wcm90b3R5cGUse2RlbGV0ZTpmdW5jdGlvbih0KXt2YXIgZT1oKHRoaXMpO2lmKCFhKHQpKXJldHVybiExO3ZhciBuPW8odCk7cmV0dXJuITA9PT1uP3koZSkuZGVsZXRlKHQpOm4mJmwobixlLmlkKSYmZGVsZXRlIG5bZS5pZF19LGhhczpmdW5jdGlvbih0KXt2YXIgZT1oKHRoaXMpO2lmKCFhKHQpKXJldHVybiExO3ZhciBuPW8odCk7cmV0dXJuITA9PT1uP3koZSkuaGFzKHQpOm4mJmwobixlLmlkKX19KSxyKGYucHJvdG90eXBlLG4/e2dldDpmdW5jdGlvbih0KXt2YXIgZT1oKHRoaXMpO2lmKGEodCkpe3ZhciBuPW8odCk7cmV0dXJuITA9PT1uP3koZSkuZ2V0KHQpOm4/bltlLmlkXTp2b2lkIDB9fSxzZXQ6ZnVuY3Rpb24odCxlKXtyZXR1cm4gdih0aGlzLHQsZSl9fTp7YWRkOmZ1bmN0aW9uKHQpe3JldHVybiB2KHRoaXMsdCwhMCl9fSksZn19fSw4MTk1MTpmdW5jdGlvbih0LGUsbil7InVzZSBzdHJpY3QiO3ZhciByPW4oMTQwNDQpLG89big4OTU1OCksaT1uKDY0NTA0KSxhPW4oOTI5MTMpLGM9big5NjAzKSxzPW4oNDEzMzQpLHU9big1OTM3OSksbD1uKDEwNTkyKSxmPW4oMzIxODcpLGQ9big0Nzk2KSxwPW4oNTExMjgpLGg9bigzMDI3Mik7dC5leHBvcnRzPWZ1bmN0aW9uKHQsZSxuKXt2YXIgdj0tMSE9PXQuaW5kZXhPZigiTWFwIiksZz0tMSE9PXQuaW5kZXhPZigiV2VhayIpLHk9dj8ic2V0IjoiYWRkIixtPW9bdF0sYj1tJiZtLnByb3RvdHlwZSx4PW0sdz17fSxFPWZ1bmN0aW9uKHQpe3ZhciBlPWJbdF07YShiLHQsImFkZCI9PXQ/ZnVuY3Rpb24odCl7cmV0dXJuIGUuY2FsbCh0aGlzLDA9PT10PzA6dCksdGhpc306ImRlbGV0ZSI9PXQ/ZnVuY3Rpb24odCl7cmV0dXJuIShnJiYhbCh0KSkmJmUuY2FsbCh0aGlzLDA9PT10PzA6dCl9OiJnZXQiPT10P2Z1bmN0aW9uKHQpe3JldHVybiBnJiYhbCh0KT92b2lkIDA6ZS5jYWxsKHRoaXMsMD09PXQ/MDp0KX06ImhhcyI9PXQ/ZnVuY3Rpb24odCl7cmV0dXJuIShnJiYhbCh0KSkmJmUuY2FsbCh0aGlzLDA9PT10PzA6dCl9OmZ1bmN0aW9uKHQsbil7cmV0dXJuIGUuY2FsbCh0aGlzLDA9PT10PzA6dCxuKSx0aGlzfSl9O2lmKGkodCwiZnVuY3Rpb24iIT10eXBlb2YgbXx8IShnfHxiLmZvckVhY2gmJiFmKChmdW5jdGlvbigpeyhuZXcgbSkuZW50cmllcygpLm5leHQoKX0pKSkpKXg9bi5nZXRDb25zdHJ1Y3RvcihlLHQsdix5KSxjLlJFUVVJUkVEPSEwO2Vsc2UgaWYoaSh0LCEwKSl7dmFyIGo9bmV3IHgsQz1qW3ldKGc/e306LTAsMSkhPWosaz1mKChmdW5jdGlvbigpe2ouaGFzKDEpfSkpLFM9ZCgoZnVuY3Rpb24odCl7bmV3IG0odCl9KSksTz0hZyYmZigoZnVuY3Rpb24oKXtmb3IodmFyIHQ9bmV3IG0sZT01O2UtLTspdFt5XShlLGUpO3JldHVybiF0LmhhcygtMCl9KSk7U3x8KCh4PWUoKGZ1bmN0aW9uKGUsbil7dShlLHgsdCk7dmFyIHI9aChuZXcgbSxlLHgpO3JldHVybiBudWxsIT1uJiZzKG4sclt5XSxyLHYpLHJ9KSkpLnByb3RvdHlwZT1iLGIuY29uc3RydWN0b3I9eCksKGt8fE8pJiYoRSgiZGVsZXRlIiksRSgiaGFzIiksdiYmRSgiZ2V0IikpLChPfHxDKSYmRSh5KSxnJiZiLmNsZWFyJiZkZWxldGUgYi5jbGVhcn1yZXR1cm4gd1t0XT14LHIoe2dsb2JhbDohMCxmb3JjZWQ6eCE9bX0sdykscCh4LHQpLGd8fG4uc2V0U3Ryb25nKHgsdCx2KSx4fX0sNzQ2ODU6ZnVuY3Rpb24odCxlLG4pe3ZhciByPW4oOTQ5MDYpLG89big1ODYwNiksaT1uKDUwODY4KSxhPW4oMTA1OTIpLGM9ZnVuY3Rpb24oKXt0aGlzLm9iamVjdD1udWxsLHRoaXMuc3ltYm9sPW51bGwsdGhpcy5wcmltaXRpdmVzPW51bGwsdGhpcy5vYmplY3RzQnlJbmRleD1pKG51bGwpfTtjLnByb3RvdHlwZS5nZXQ9ZnVuY3Rpb24odCxlKXtyZXR1cm4gdGhpc1t0XXx8KHRoaXNbdF09ZSgpKX0sYy5wcm90b3R5cGUubmV4dD1mdW5jdGlvbih0LGUsbil7dmFyIGk9bj90aGlzLm9iamVjdHNCeUluZGV4W3RdfHwodGhpcy5vYmplY3RzQnlJbmRleFt0XT1uZXcgbyk6dGhpcy5wcmltaXRpdmVzfHwodGhpcy5wcmltaXRpdmVzPW5ldyByKSxhPWkuZ2V0KGUpO3JldHVybiBhfHxpLnNldChlLGE9bmV3IGMpLGF9O3ZhciBzPW5ldyBjO3QuZXhwb3J0cz1mdW5jdGlvbigpe3ZhciB0LGUsbj1zLHI9YXJndW1lbnRzLmxlbmd0aDtmb3IodD0wO3Q8cjt0KyspYShlPWFyZ3VtZW50c1t0XSkmJihuPW4ubmV4dCh0LGUsITApKTtpZih0aGlzPT09T2JqZWN0JiZuPT09cyl0aHJvdyBUeXBlRXJyb3IoIkNvbXBvc2l0ZSBrZXlzIG11c3QgY29udGFpbiBhIG5vbi1wcmltaXRpdmUgY29tcG9uZW50Iik7Zm9yKHQ9MDt0PHI7dCsrKWEoZT1hcmd1bWVudHNbdF0pfHwobj1uLm5leHQodCxlLCExKSk7cmV0dXJuIG59fSw5OTYyNTpmdW5jdGlvbih0LGUsbil7dmFyIHI9big3NjI5OCksbz1uKDI0NDE1KSxpPW4oOTcyNTcpLGE9bigzNzYyMCk7dC5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7Zm9yKHZhciBuPW8oZSksYz1hLmYscz1pLmYsdT0wO3U8bi5sZW5ndGg7dSsrKXt2YXIgbD1uW3VdO3IodCxsKXx8Yyh0LGwscyhlLGwpKX19fSw5MzkxNTpmdW5jdGlvbih0LGUsbil7dmFyIHI9bigyMzcyNCkoIm1hdGNoIik7dC5leHBvcnRzPWZ1bmN0aW9uKHQpe3ZhciBlPS8uLzt0cnl7Ii8uLyJbdF0oZSl9Y2F0Y2gobil7dHJ5e3JldHVybiBlW3JdPSExLCIvLi8iW3RdKGUpfWNhdGNoKHQpe319cmV0dXJuITF9fSw3MTYwODpmdW5jdGlvbih0LGUsbil7dmFyIHI9bigzMjE4Nyk7dC5leHBvcnRzPSFyKChmdW5jdGlvbigpe2Z1bmN0aW9uIHQoKXt9cmV0dXJuIHQucHJvdG90eXBlLmNvbnN0cnVjdG9yPW51bGwsT2JqZWN0LmdldFByb3RvdHlwZU9mKG5ldyB0KSE9PXQucHJvdG90eXBlfSkpfSwyNzAwNDpmdW5jdGlvbih0LGUsbil7InVzZSBzdHJpY3QiO3ZhciByPW4oNTYyMzgpLG89big4NjQ3MCksaT1uKDg3NTc5KSxhPW4oNTA4NjgpLGM9big2Njk3MSkscz1uKDE5MjYpLHU9bigyMzcyNCksbD1uKDg5ODI3KSxmPW4oNzcwMSkoIlByb21pc2UiKSxkPWwuc2V0LHA9bC5nZXQsaD11KCJ0b1N0cmluZ1RhZyIpLHY9ZnVuY3Rpb24odCl7dmFyIGU9cCh0aGlzKS5pdGVyYXRvcixuPWUucmV0dXJuO3JldHVybiB2b2lkIDA9PT1uP2YucmVzb2x2ZSh7ZG9uZTohMCx2YWx1ZTp0fSk6aShuLmNhbGwoZSx0KSl9LGc9ZnVuY3Rpb24odCl7dmFyIGU9cCh0aGlzKS5pdGVyYXRvcixuPWUudGhyb3c7cmV0dXJuIHZvaWQgMD09PW4/Zi5yZWplY3QodCk6bi5jYWxsKGUsdCl9O3QuZXhwb3J0cz1mdW5jdGlvbih0LGUpe3ZhciBuPWZ1bmN0aW9uKHQpe3QubmV4dD1vKHQuaXRlcmF0b3IubmV4dCksdC5kb25lPSExLGQodGhpcyx0KX07cmV0dXJuIG4ucHJvdG90eXBlPXMoYShyLkFzeW5jSXRlcmF0b3IucHJvdG90eXBlKSx7bmV4dDpmdW5jdGlvbihlKXt2YXIgbj1wKHRoaXMpO2lmKG4uZG9uZSlyZXR1cm4gZi5yZXNvbHZlKHtkb25lOiEwLHZhbHVlOnZvaWQgMH0pO3RyeXtyZXR1cm4gZi5yZXNvbHZlKGkodC5jYWxsKG4sZSxmKSkpfWNhdGNoKHQpe3JldHVybiBmLnJlamVjdCh0KX19LHJldHVybjp2LHRocm93Omd9KSxlfHxjKG4ucHJvdG90eXBlLGgsIkdlbmVyYXRvciIpLG59fSwzMTM1MTpmdW5jdGlvbih0LGUsbil7dmFyIHI9big3MDEzMiksbz0vIi9nO3QuZXhwb3J0cz1mdW5jdGlvbih0LGUsbixpKXt2YXIgYT1TdHJpbmcocih0KSksYz0iPCIrZTtyZXR1cm4iIiE9PW4mJihjKz0iICIrbisnPSInK1N0cmluZyhpKS5yZXBsYWNlKG8sIiZxdW90OyIpKyciJyksYysiPiIrYSsiPC8iK2UrIj4ifX0sNzEyMDE6ZnVuY3Rpb24odCxlLG4peyJ1c2Ugc3RyaWN0Ijt2YXIgcj1uKDY0MTc2KS5JdGVyYXRvclByb3RvdHlwZSxvPW4oNTA4NjgpLGk9bigxNDIwOSksYT1uKDUxMTI4KSxjPW4oMTIzNSkscz1mdW5jdGlvbigpe3JldHVybiB0aGlzfTt0LmV4cG9ydHM9ZnVuY3Rpb24odCxlLG4pe3ZhciB1PWUrIiBJdGVyYXRvciI7cmV0dXJuIHQucHJvdG90eXBlPW8ocix7bmV4dDppKDEsbil9KSxhKHQsdSwhMSwhMCksY1t1XT1zLHR9fSw4ODA3OmZ1bmN0aW9uKHQsZSxuKXsidXNlIHN0cmljdCI7dmFyIHI9big1NjIzOCksbz1uKDg2NDcwKSxpPW4oODc1NzkpLGE9big1MDg2OCksYz1uKDY2OTcxKSxzPW4oMTkyNiksdT1uKDIzNzI0KSxsPW4oODk4MjcpLGY9bC5zZXQsZD1sLmdldCxwPXUoInRvU3RyaW5nVGFnIiksaD1mdW5jdGlvbih0KXt2YXIgZT1kKHRoaXMpLml0ZXJhdG9yLG49ZS5yZXR1cm47cmV0dXJuIHZvaWQgMD09PW4/e2RvbmU6ITAsdmFsdWU6dH06aShuLmNhbGwoZSx0KSl9LHY9ZnVuY3Rpb24odCl7dmFyIGU9ZCh0aGlzKS5pdGVyYXRvcixuPWUudGhyb3c7aWYodm9pZCAwPT09bil0aHJvdyB0O3JldHVybiBuLmNhbGwoZSx0KX07dC5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7dmFyIG49ZnVuY3Rpb24odCl7dC5uZXh0PW8odC5pdGVyYXRvci5uZXh0KSx0LmRvbmU9ITEsZih0aGlzLHQpfTtyZXR1cm4gbi5wcm90b3R5cGU9cyhhKHIuSXRlcmF0b3IucHJvdG90eXBlKSx7bmV4dDpmdW5jdGlvbigpe3ZhciBlPWQodGhpcyksbj1lLmRvbmU/dm9pZCAwOnQuYXBwbHkoZSxhcmd1bWVudHMpO3JldHVybntkb25lOmUuZG9uZSx2YWx1ZTpufX0scmV0dXJuOmgsdGhyb3c6dn0pLGV8fGMobi5wcm90b3R5cGUscCwiR2VuZXJhdG9yIiksbn19LDY2OTcxOmZ1bmN0aW9uKHQsZSxuKXt2YXIgcj1uKDYyNTU2KSxvPW4oMzc2MjApLGk9bigxNDIwOSk7dC5leHBvcnRzPXI/ZnVuY3Rpb24odCxlLG4pe3JldHVybiBvLmYodCxlLGkoMSxuKSl9OmZ1bmN0aW9uKHQsZSxuKXtyZXR1cm4gdFtlXT1uLHR9fSwxNDIwOTpmdW5jdGlvbih0KXt0LmV4cG9ydHM9ZnVuY3Rpb24odCxlKXtyZXR1cm57ZW51bWVyYWJsZTohKDEmdCksY29uZmlndXJhYmxlOiEoMiZ0KSx3cml0YWJsZTohKDQmdCksdmFsdWU6ZX19fSw1ODgxMDpmdW5jdGlvbih0LGUsbil7InVzZSBzdHJpY3QiO3ZhciByPW4oNTM0OTgpLG89bigzNzYyMCksaT1uKDE0MjA5KTt0LmV4cG9ydHM9ZnVuY3Rpb24odCxlLG4pe3ZhciBhPXIoZSk7YSBpbiB0P28uZih0LGEsaSgwLG4pKTp0W2FdPW59fSw3OTE2NzpmdW5jdGlvbih0LGUsbil7InVzZSBzdHJpY3QiO3ZhciByPW4oMzIxODcpLG89bigyNjU3Mykuc3RhcnQsaT1NYXRoLmFicyxhPURhdGUucHJvdG90eXBlLGM9YS5nZXRUaW1lLHM9YS50b0lTT1N0cmluZzt0LmV4cG9ydHM9cigoZnVuY3Rpb24oKXtyZXR1cm4iMDM4NS0wNy0yNVQwNzowNjozOS45OTlaIiE9cy5jYWxsKG5ldyBEYXRlKC01MDAwMDAwMDAwMDAwMSkpfSkpfHwhcigoZnVuY3Rpb24oKXtzLmNhbGwobmV3IERhdGUoTmFOKSl9KSk/ZnVuY3Rpb24oKXtpZighaXNGaW5pdGUoYy5jYWxsKHRoaXMpKSl0aHJvdyBSYW5nZUVycm9yKCJJbnZhbGlkIHRpbWUgdmFsdWUiKTt2YXIgdD10aGlzLGU9dC5nZXRVVENGdWxsWWVhcigpLG49dC5nZXRVVENNaWxsaXNlY29uZHMoKSxyPWU8MD8iLSI6ZT45OTk5PyIrIjoiIjtyZXR1cm4gcitvKGkoZSkscj82OjQsMCkrIi0iK28odC5nZXRVVENNb250aCgpKzEsMiwwKSsiLSIrbyh0LmdldFVUQ0RhdGUoKSwyLDApKyJUIitvKHQuZ2V0VVRDSG91cnMoKSwyLDApKyI6IitvKHQuZ2V0VVRDTWludXRlcygpLDIsMCkrIjoiK28odC5nZXRVVENTZWNvbmRzKCksMiwwKSsiLiIrbyhuLDMsMCkrIloifTpzfSw3Njk3NDpmdW5jdGlvbih0LGUsbil7InVzZSBzdHJpY3QiO3ZhciByPW4oODc1NzkpLG89big1MzQ5OCk7dC5leHBvcnRzPWZ1bmN0aW9uKHQpe2lmKCJzdHJpbmciIT09dCYmIm51bWJlciIhPT10JiYiZGVmYXVsdCIhPT10KXRocm93IFR5cGVFcnJvcigiSW5jb3JyZWN0IGhpbnQiKTtyZXR1cm4gbyhyKHRoaXMpLCJudW1iZXIiIT09dCl9fSw0NjA2MTpmdW5jdGlvbih0LGUsbil7InVzZSBzdHJpY3QiO3ZhciByPW4oMTQwNDQpLG89big3MTIwMSksaT1uKDY0OTY1KSxhPW4oNzE4NDIpLGM9big1MTEyOCkscz1uKDY2OTcxKSx1PW4oOTI5MTMpLGw9bigyMzcyNCksZj1uKDY1NjcyKSxkPW4oMTIzNSkscD1uKDY0MTc2KSxoPXAuSXRlcmF0b3JQcm90b3R5cGUsdj1wLkJVR0dZX1NBRkFSSV9JVEVSQVRPUlMsZz1sKCJpdGVyYXRvciIpLHk9ImtleXMiLG09InZhbHVlcyIsYj0iZW50cmllcyIseD1mdW5jdGlvbigpe3JldHVybiB0aGlzfTt0LmV4cG9ydHM9ZnVuY3Rpb24odCxlLG4sbCxwLHcsRSl7byhuLGUsbCk7dmFyIGosQyxrLFM9ZnVuY3Rpb24odCl7aWYodD09PXAmJk0pcmV0dXJuIE07aWYoIXYmJnQgaW4gQSlyZXR1cm4gQVt0XTtzd2l0Y2godCl7Y2FzZSB5OmNhc2UgbTpjYXNlIGI6cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBuKHRoaXMsdCl9fXJldHVybiBmdW5jdGlvbigpe3JldHVybiBuZXcgbih0aGlzKX19LE89ZSsiIEl0ZXJhdG9yIixJPSExLEE9dC5wcm90b3R5cGUsVD1BW2ddfHxBWyJAQGl0ZXJhdG9yIl18fHAmJkFbcF0sTT0hdiYmVHx8UyhwKSxfPSJBcnJheSI9PWUmJkEuZW50cmllc3x8VDtpZihfJiYoaj1pKF8uY2FsbChuZXcgdCkpLGghPT1PYmplY3QucHJvdG90eXBlJiZqLm5leHQmJihmfHxpKGopPT09aHx8KGE/YShqLGgpOiJmdW5jdGlvbiIhPXR5cGVvZiBqW2ddJiZzKGosZyx4KSksYyhqLE8sITAsITApLGYmJihkW09dPXgpKSkscD09bSYmVCYmVC5uYW1lIT09bSYmKEk9ITAsTT1mdW5jdGlvbigpe3JldHVybiBULmNhbGwodGhpcyl9KSxmJiYhRXx8QVtnXT09PU18fHMoQSxnLE0pLGRbZV09TSxwKWlmKEM9e3ZhbHVlczpTKG0pLGtleXM6dz9NOlMoeSksZW50cmllczpTKGIpfSxFKWZvcihrIGluIEMpKHZ8fEl8fCEoayBpbiBBKSkmJnUoQSxrLENba10pO2Vsc2Ugcih7dGFyZ2V0OmUscHJvdG86ITAsZm9yY2VkOnZ8fEl9LEMpO3JldHVybiBDfX0sOTIyNzU6ZnVuY3Rpb24odCxlLG4pe3ZhciByPW4oNTYyMzgpLG89big3NjI5OCksaT1uKDczOTE2KSxhPW4oMzc2MjApLmY7dC5leHBvcnRzPWZ1bmN0aW9uKHQpe3ZhciBlPXIuU3ltYm9sfHwoci5TeW1ib2w9e30pO28oZSx0KXx8YShlLHQse3ZhbHVlOmkuZih0KX0pfX0sNjI1NTY6ZnVuY3Rpb24odCxlLG4pe3ZhciByPW4oMzIxODcpO3QuZXhwb3J0cz0hcigoZnVuY3Rpb24oKXtyZXR1cm4gNyE9T2JqZWN0LmRlZmluZVByb3BlcnR5KHt9LCJhIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIDd9fSkuYX0pKX0sMTkyMzpmdW5jdGlvbih0LGUsbil7dmFyIHI9big4OTU1OCksbz1uKDEwNTkyKSxpPXIuZG9jdW1lbnQsYT1vKGkpJiZvKGkuY3JlYXRlRWxlbWVudCk7dC5leHBvcnRzPWZ1bmN0aW9uKHQpe3JldHVybiBhP2kuY3JlYXRlRWxlbWVudCh0KTp7fX19LDQ3MDk0OmZ1bmN0aW9uKHQpe3QuZXhwb3J0cz17Q1NTUnVsZUxpc3Q6MCxDU1NTdHlsZURlY2xhcmF0aW9uOjAsQ1NTVmFsdWVMaXN0OjAsQ2xpZW50UmVjdExpc3Q6MCxET01SZWN0TGlzdDowLERPTVN0cmluZ0xpc3Q6MCxET01Ub2tlbkxpc3Q6MSxEYXRhVHJhbnNmZXJJdGVtTGlzdDowLEZpbGVMaXN0OjAsSFRNTEFsbENvbGxlY3Rpb246MCxIVE1MQ29sbGVjdGlvbjowLEhUTUxGb3JtRWxlbWVudDowLEhUTUxTZWxlY3RFbGVtZW50OjAsTWVkaWFMaXN0OjAsTWltZVR5cGVBcnJheTowLE5hbWVkTm9kZU1hcDowLE5vZGVMaXN0OjEsUGFpbnRSZXF1ZXN0TGlzdDowLFBsdWdpbjowLFBsdWdpbkFycmF5OjAsU1ZHTGVuZ3RoTGlzdDowLFNWR051bWJlckxpc3Q6MCxTVkdQYXRoU2VnTGlzdDowLFNWR1BvaW50TGlzdDowLFNWR1N0cmluZ0xpc3Q6MCxTVkdUcmFuc2Zvcm1MaXN0OjAsU291cmNlQnVmZmVyTGlzdDowLFN0eWxlU2hlZXRMaXN0OjAsVGV4dFRyYWNrQ3VlTGlzdDowLFRleHRUcmFja0xpc3Q6MCxUb3VjaExpc3Q6MH19LDU5MTM1OmZ1bmN0aW9uKHQpe3QuZXhwb3J0cz1bImNvbnN0cnVjdG9yIiwiaGFzT3duUHJvcGVydHkiLCJpc1Byb3RvdHlwZU9mIiwicHJvcGVydHlJc0VudW1lcmFibGUiLCJ0b0xvY2FsZVN0cmluZyIsInRvU3RyaW5nIiwidmFsdWVPZiJdfSwxNDA0NDpmdW5jdGlvbih0LGUsbil7dmFyIHI9big4OTU1OCksbz1uKDk3MjU3KS5mLGk9big2Njk3MSksYT1uKDkyOTEzKSxjPW4oOTgyNjkpLHM9big5OTYyNSksdT1uKDY0NTA0KTt0LmV4cG9ydHM9ZnVuY3Rpb24odCxlKXt2YXIgbixsLGYsZCxwLGg9dC50YXJnZXQsdj10Lmdsb2JhbCxnPXQuc3RhdDtpZihuPXY/cjpnP3JbaF18fGMoaCx7fSk6KHJbaF18fHt9KS5wcm90b3R5cGUpZm9yKGwgaW4gZSl7aWYoZD1lW2xdLGY9dC5ub1RhcmdldEdldD8ocD1vKG4sbCkpJiZwLnZhbHVlOm5bbF0sIXUodj9sOmgrKGc/Ii4iOiIjIikrbCx0LmZvcmNlZCkmJnZvaWQgMCE9PWYpe2lmKHR5cGVvZiBkPT10eXBlb2YgZiljb250aW51ZTtzKGQsZil9KHQuc2hhbXx8ZiYmZi5zaGFtKSYmaShkLCJzaGFtIiwhMCksYShuLGwsZCx0KX19fSwzMjE4NzpmdW5jdGlvbih0KXt0LmV4cG9ydHM9ZnVuY3Rpb24odCl7dHJ5e3JldHVybiEhdCgpfWNhdGNoKHQpe3JldHVybiEwfX19LDM1ODYwOmZ1bmN0aW9uKHQsZSxuKXsidXNlIHN0cmljdCI7dmFyIHI9big2Njk3MSksbz1uKDkyOTEzKSxpPW4oMzIxODcpLGE9bigyMzcyNCksYz1uKDM4NTk4KSxzPWEoInNwZWNpZXMiKSx1PSFpKChmdW5jdGlvbigpe3ZhciB0PS8uLztyZXR1cm4gdC5leGVjPWZ1bmN0aW9uKCl7dmFyIHQ9W107cmV0dXJuIHQuZ3JvdXBzPXthOiI3In0sdH0sIjciIT09IiIucmVwbGFjZSh0LCIkPGE+Iil9KSksbD0haSgoZnVuY3Rpb24oKXt2YXIgdD0vKD86KS8sZT10LmV4ZWM7dC5leGVjPWZ1bmN0aW9uKCl7cmV0dXJuIGUuYXBwbHkodGhpcyxhcmd1bWVudHMpfTt2YXIgbj0iYWIiLnNwbGl0KHQpO3JldHVybiAyIT09bi5sZW5ndGh8fCJhIiE9PW5bMF18fCJiIiE9PW5bMV19KSk7dC5leHBvcnRzPWZ1bmN0aW9uKHQsZSxuLGYpe3ZhciBkPWEodCkscD0haSgoZnVuY3Rpb24oKXt2YXIgZT17fTtyZXR1cm4gZVtkXT1mdW5jdGlvbigpe3JldHVybiA3fSw3IT0iIlt0XShlKX0pKSxoPXAmJiFpKChmdW5jdGlvbigpe3ZhciBlPSExLG49L2EvO3JldHVybiJzcGxpdCI9PT10JiYoKG49e30pLmNvbnN0cnVjdG9yPXt9LG4uY29uc3RydWN0b3Jbc109ZnVuY3Rpb24oKXtyZXR1cm4gbn0sbi5mbGFncz0iIixuW2RdPS8uL1tkXSksbi5leGVjPWZ1bmN0aW9uKCl7cmV0dXJuIGU9ITAsbnVsbH0sbltkXSgiIiksIWV9KSk7aWYoIXB8fCFofHwicmVwbGFjZSI9PT10JiYhdXx8InNwbGl0Ij09PXQmJiFsKXt2YXIgdj0vLi9bZF0sZz1uKGQsIiJbdF0sKGZ1bmN0aW9uKHQsZSxuLHIsbyl7cmV0dXJuIGUuZXhlYz09PWM/cCYmIW8/e2RvbmU6ITAsdmFsdWU6di5jYWxsKGUsbixyKX06e2RvbmU6ITAsdmFsdWU6dC5jYWxsKG4sZSxyKX06e2RvbmU6ITF9fSkpLHk9Z1swXSxtPWdbMV07byhTdHJpbmcucHJvdG90eXBlLHQseSksbyhSZWdFeHAucHJvdG90eXBlLGQsMj09ZT9mdW5jdGlvbih0LGUpe3JldHVybiBtLmNhbGwodCx0aGlzLGUpfTpmdW5jdGlvbih0KXtyZXR1cm4gbS5jYWxsKHQsdGhpcyl9KSxmJiZyKFJlZ0V4cC5wcm90b3R5cGVbZF0sInNoYW0iLCEwKX19fSw4MDY2NTpmdW5jdGlvbih0LGUsbil7InVzZSBzdHJpY3QiO3ZhciByPW4oNjE5OSksbz1uKDI3ODg0KSxpPW4oNDYxMzApLGE9ZnVuY3Rpb24odCxlLG4sYyxzLHUsbCxmKXtmb3IodmFyIGQscD1zLGg9MCx2PSEhbCYmaShsLGYsMyk7aDxjOyl7aWYoaCBpbiBuKXtpZihkPXY/dihuW2hdLGgsZSk6bltoXSx1PjAmJnIoZCkpcD1hKHQsZSxkLG8oZC5sZW5ndGgpLHAsdS0xKS0xO2Vsc2V7aWYocD49OTAwNzE5OTI1NDc0MDk5MSl0aHJvdyBUeXBlRXJyb3IoIkV4Y2VlZCB0aGUgYWNjZXB0YWJsZSBhcnJheSBsZW5ndGgiKTt0W3BdPWR9cCsrfWgrK31yZXR1cm4gcH07dC5leHBvcnRzPWF9LDQ3ODEyOmZ1bmN0aW9uKHQsZSxuKXsidXNlIHN0cmljdCI7dmFyIHI9big2NTY3Miksbz1uKDg5NTU4KSxpPW4oMzIxODcpO3QuZXhwb3J0cz1yfHwhaSgoZnVuY3Rpb24oKXt2YXIgdD1NYXRoLnJhbmRvbSgpO19fZGVmaW5lU2V0dGVyX18uY2FsbChudWxsLHQsKGZ1bmN0aW9uKCl7fSkpLGRlbGV0ZSBvW3RdfSkpfSw1MjEyOTpmdW5jdGlvbih0LGUsbil7dmFyIHI9bigzMjE4Nyk7dC5leHBvcnRzPWZ1bmN0aW9uKHQpe3JldHVybiByKChmdW5jdGlvbigpe3ZhciBlPSIiW3RdKCciJyk7cmV0dXJuIGUhPT1lLnRvTG93ZXJDYXNlKCl8fGUuc3BsaXQoJyInKS5sZW5ndGg+M30pKX19LDg0NzU0OmZ1bmN0aW9uKHQsZSxuKXt2YXIgcj1uKDMyMTg3KSxvPW4oNTAwNTUpO3QuZXhwb3J0cz1mdW5jdGlvbih0KXtyZXR1cm4gcigoZnVuY3Rpb24oKXtyZXR1cm4hIW9bdF0oKXx8IuKAi8KF4aCOIiE9IuKAi8KF4aCOIlt0XSgpfHxvW3RdLm5hbWUhPT10fSkpfX0sNzQ1MjA6ZnVuY3Rpb24odCxlLG4pe3ZhciByPW4oMzIxODcpO3QuZXhwb3J0cz0hcigoZnVuY3Rpb24oKXtyZXR1cm4gT2JqZWN0LmlzRXh0ZW5zaWJsZShPYmplY3QucHJldmVudEV4dGVuc2lvbnMoe30pKX0pKX0sNzM3Mzk6ZnVuY3Rpb24odCxlLG4peyJ1c2Ugc3RyaWN0Ijt2YXIgcj1uKDg2NDcwKSxvPW4oMTA1OTIpLGk9W10uc2xpY2UsYT17fSxjPWZ1bmN0aW9uKHQsZSxuKXtpZighKGUgaW4gYSkpe2Zvcih2YXIgcj1bXSxvPTA7bzxlO28rKylyW29dPSJhWyIrbysiXSI7YVtlXT1GdW5jdGlvbigiQyxhIiwicmV0dXJuIG5ldyBDKCIrci5qb2luKCIsIikrIikiKX1yZXR1cm4gYVtlXSh0LG4pfTt0LmV4cG9ydHM9RnVuY3Rpb24uYmluZHx8ZnVuY3Rpb24odCl7dmFyIGU9cih0aGlzKSxuPWkuY2FsbChhcmd1bWVudHMsMSksYT1mdW5jdGlvbigpe3ZhciByPW4uY29uY2F0KGkuY2FsbChhcmd1bWVudHMpKTtyZXR1cm4gdGhpcyBpbnN0YW5jZW9mIGE/YyhlLHIubGVuZ3RoLHIpOmUuYXBwbHkodCxyKX07cmV0dXJuIG8oZS5wcm90b3R5cGUpJiYoYS5wcm90b3R5cGU9ZS5wcm90b3R5cGUpLGF9fSw2NjkyMDpmdW5jdGlvbih0LGUsbil7dmFyIHI9big3Mzg5MCksbz1uKDIzNzI0KSgiYXN5bmNJdGVyYXRvciIpO3QuZXhwb3J0cz1mdW5jdGlvbih0KXt2YXIgZT10W29dO3JldHVybiB2b2lkIDA9PT1lP3IodCk6ZX19LDc3MDE6ZnVuY3Rpb24odCxlLG4pe3ZhciByPW4oNTYyMzgpLG89big4OTU1OCksaT1mdW5jdGlvbih0KXtyZXR1cm4iZnVuY3Rpb24iPT10eXBlb2YgdD90OnZvaWQgMH07dC5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg8Mj9pKHJbdF0pfHxpKG9bdF0pOnJbdF0mJnJbdF1bZV18fG9bdF0mJm9bdF1bZV19fSw3Mzg5MDpmdW5jdGlvbih0LGUsbil7dmFyIHI9big1OTU5MSksbz1uKDEyMzUpLGk9bigyMzcyNCkoIml0ZXJhdG9yIik7dC5leHBvcnRzPWZ1bmN0aW9uKHQpe2lmKG51bGwhPXQpcmV0dXJuIHRbaV18fHRbIkBAaXRlcmF0b3IiXXx8b1tyKHQpXX19LDMxMDc0OmZ1bmN0aW9uKHQsZSxuKXt2YXIgcj1uKDg3NTc5KSxvPW4oNzM4OTApO3QuZXhwb3J0cz1mdW5jdGlvbih0KXt2YXIgZT1vKHQpO2lmKCJmdW5jdGlvbiIhPXR5cGVvZiBlKXRocm93IFR5cGVFcnJvcihTdHJpbmcodCkrIiBpcyBub3QgaXRlcmFibGUiKTtyZXR1cm4gcihlLmNhbGwodCkpfX0sNDE5ODk6ZnVuY3Rpb24odCxlLG4pe3ZhciByPW4oNjU2NzIpLG89bigzMTA3NCk7dC5leHBvcnRzPXI/bzpmdW5jdGlvbih0KXtyZXR1cm4gTWFwLnByb3RvdHlwZS5lbnRyaWVzLmNhbGwodCl9fSw0MTQ3NTpmdW5jdGlvbih0LGUsbil7dmFyIHI9big2NTY3Miksbz1uKDMxMDc0KTt0LmV4cG9ydHM9cj9vOmZ1bmN0aW9uKHQpe3JldHVybiBTZXQucHJvdG90eXBlLnZhbHVlcy5jYWxsKHQpfX0sODk1NTg6ZnVuY3Rpb24odCxlLG4pe3ZhciByPWZ1bmN0aW9uKHQpe3JldHVybiB0JiZ0Lk1hdGg9PU1hdGgmJnR9O3QuZXhwb3J0cz1yKCJvYmplY3QiPT10eXBlb2YgZ2xvYmFsVGhpcyYmZ2xvYmFsVGhpcyl8fHIoIm9iamVjdCI9PXR5cGVvZiB3aW5kb3cmJndpbmRvdyl8fHIoIm9iamVjdCI9PXR5cGVvZiBzZWxmJiZzZWxmKXx8cigib2JqZWN0Ij09dHlwZW9mIG4uZyYmbi5nKXx8RnVuY3Rpb24oInJldHVybiB0aGlzIikoKX0sNzYyOTg6ZnVuY3Rpb24odCl7dmFyIGU9e30uaGFzT3duUHJvcGVydHk7dC5leHBvcnRzPWZ1bmN0aW9uKHQsbil7cmV0dXJuIGUuY2FsbCh0LG4pfX0sMjMwNzA6ZnVuY3Rpb24odCl7dC5leHBvcnRzPXt9fSw4MzYyMDpmdW5jdGlvbih0LGUsbil7dmFyIHI9big4OTU1OCk7dC5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7dmFyIG49ci5jb25zb2xlO24mJm4uZXJyb3ImJigxPT09YXJndW1lbnRzLmxlbmd0aD9uLmVycm9yKHQpOm4uZXJyb3IodCxlKSl9fSw1MTU3MTpmdW5jdGlvbih0LGUsbil7dmFyIHI9big3NzAxKTt0LmV4cG9ydHM9cigiZG9jdW1lbnQiLCJkb2N1bWVudEVsZW1lbnQiKX0sNjI3OTk6ZnVuY3Rpb24odCxlLG4pe3ZhciByPW4oNjI1NTYpLG89bigzMjE4NyksaT1uKDE5MjMpO3QuZXhwb3J0cz0hciYmIW8oKGZ1bmN0aW9uKCl7cmV0dXJuIDchPU9iamVjdC5kZWZpbmVQcm9wZXJ0eShpKCJkaXYiKSwiYSIse2dldDpmdW5jdGlvbigpe3JldHVybiA3fX0pLmF9KSl9LDkwNzI1OmZ1bmN0aW9uKHQpe3ZhciBlPTEvMCxuPU1hdGguYWJzLHI9TWF0aC5wb3csbz1NYXRoLmZsb29yLGk9TWF0aC5sb2csYT1NYXRoLkxOMjt0LmV4cG9ydHM9e3BhY2s6ZnVuY3Rpb24odCxjLHMpe3ZhciB1LGwsZixkPW5ldyBBcnJheShzKSxwPTgqcy1jLTEsaD0oMTw8cCktMSx2PWg+PjEsZz0yMz09PWM/cigyLC0yNCktcigyLC03Nyk6MCx5PXQ8MHx8MD09PXQmJjEvdDwwPzE6MCxtPTA7Zm9yKCh0PW4odCkpIT10fHx0PT09ZT8obD10IT10PzE6MCx1PWgpOih1PW8oaSh0KS9hKSx0KihmPXIoMiwtdSkpPDEmJih1LS0sZio9MiksKHQrPXUrdj49MT9nL2Y6ZypyKDIsMS12KSkqZj49MiYmKHUrKyxmLz0yKSx1K3Y+PWg/KGw9MCx1PWgpOnUrdj49MT8obD0odCpmLTEpKnIoMixjKSx1Kz12KToobD10KnIoMix2LTEpKnIoMixjKSx1PTApKTtjPj04O2RbbSsrXT0yNTUmbCxsLz0yNTYsYy09OCk7Zm9yKHU9dTw8Y3xsLHArPWM7cD4wO2RbbSsrXT0yNTUmdSx1Lz0yNTYscC09OCk7cmV0dXJuIGRbLS1tXXw9MTI4KnksZH0sdW5wYWNrOmZ1bmN0aW9uKHQsbil7dmFyIG8saT10Lmxlbmd0aCxhPTgqaS1uLTEsYz0oMTw8YSktMSxzPWM+PjEsdT1hLTcsbD1pLTEsZj10W2wtLV0sZD0xMjcmZjtmb3IoZj4+PTc7dT4wO2Q9MjU2KmQrdFtsXSxsLS0sdS09OCk7Zm9yKG89ZCYoMTw8LXUpLTEsZD4+PS11LHUrPW47dT4wO289MjU2Km8rdFtsXSxsLS0sdS09OCk7aWYoMD09PWQpZD0xLXM7ZWxzZXtpZihkPT09YylyZXR1cm4gbz9OYU46Zj8tMS8wOmU7bys9cigyLG4pLGQtPXN9cmV0dXJuKGY/LTE6MSkqbypyKDIsZC1uKX19fSwyNDk4OmZ1bmN0aW9uKHQsZSxuKXt2YXIgcj1uKDMyMTg3KSxvPW4oMjQ1OTQpLGk9IiIuc3BsaXQ7dC5leHBvcnRzPXIoKGZ1bmN0aW9uKCl7cmV0dXJuIU9iamVjdCgieiIpLnByb3BlcnR5SXNFbnVtZXJhYmxlKDApfSkpP2Z1bmN0aW9uKHQpe3JldHVybiJTdHJpbmciPT1vKHQpP2kuY2FsbCh0LCIiKTpPYmplY3QodCl9Ok9iamVjdH0sMzAyNzI6ZnVuY3Rpb24odCxlLG4pe3ZhciByPW4oMTA1OTIpLG89big3MTg0Mik7dC5leHBvcnRzPWZ1bmN0aW9uKHQsZSxuKXt2YXIgaSxhO3JldHVybiBvJiYiZnVuY3Rpb24iPT10eXBlb2YoaT1lLmNvbnN0cnVjdG9yKSYmaSE9PW4mJnIoYT1pLnByb3RvdHlwZSkmJmEhPT1uLnByb3RvdHlwZSYmbyh0LGEpLHR9fSw3Njc3MzpmdW5jdGlvbih0LGUsbil7dmFyIHI9bigzNDc0MSksbz1GdW5jdGlvbi50b1N0cmluZzsiZnVuY3Rpb24iIT10eXBlb2Ygci5pbnNwZWN0U291cmNlJiYoci5pbnNwZWN0U291cmNlPWZ1bmN0aW9uKHQpe3JldHVybiBvLmNhbGwodCl9KSx0LmV4cG9ydHM9ci5pbnNwZWN0U291cmNlfSw5NjAzOmZ1bmN0aW9uKHQsZSxuKXt2YXIgcj1uKDIzMDcwKSxvPW4oMTA1OTIpLGk9big3NjI5OCksYT1uKDM3NjIwKS5mLGM9big2NzI5KSxzPW4oNzQ1MjApLHU9YygibWV0YSIpLGw9MCxmPU9iamVjdC5pc0V4dGVuc2libGV8fGZ1bmN0aW9uKCl7cmV0dXJuITB9LGQ9ZnVuY3Rpb24odCl7YSh0LHUse3ZhbHVlOntvYmplY3RJRDoiTyIrICsrbCx3ZWFrRGF0YTp7fX19KX0scD10LmV4cG9ydHM9e1JFUVVJUkVEOiExLGZhc3RLZXk6ZnVuY3Rpb24odCxlKXtpZighbyh0KSlyZXR1cm4ic3ltYm9sIj09dHlwZW9mIHQ/dDooInN0cmluZyI9PXR5cGVvZiB0PyJTIjoiUCIpK3Q7aWYoIWkodCx1KSl7aWYoIWYodCkpcmV0dXJuIkYiO2lmKCFlKXJldHVybiJFIjtkKHQpfXJldHVybiB0W3VdLm9iamVjdElEfSxnZXRXZWFrRGF0YTpmdW5jdGlvbih0LGUpe2lmKCFpKHQsdSkpe2lmKCFmKHQpKXJldHVybiEwO2lmKCFlKXJldHVybiExO2QodCl9cmV0dXJuIHRbdV0ud2Vha0RhdGF9LG9uRnJlZXplOmZ1bmN0aW9uKHQpe3JldHVybiBzJiZwLlJFUVVJUkVEJiZmKHQpJiYhaSh0LHUpJiZkKHQpLHR9fTtyW3VdPSEwfSw4OTgyNzpmdW5jdGlvbih0LGUsbil7dmFyIHIsbyxpLGE9bigxOTU5MSksYz1uKDg5NTU4KSxzPW4oMTA1OTIpLHU9big2Njk3MSksbD1uKDc2Mjk4KSxmPW4oODMxOTcpLGQ9bigyMzA3MCkscD1jLldlYWtNYXA7aWYoYSl7dmFyIGg9bmV3IHAsdj1oLmdldCxnPWguaGFzLHk9aC5zZXQ7cj1mdW5jdGlvbih0LGUpe3JldHVybiB5LmNhbGwoaCx0LGUpLGV9LG89ZnVuY3Rpb24odCl7cmV0dXJuIHYuY2FsbChoLHQpfHx7fX0saT1mdW5jdGlvbih0KXtyZXR1cm4gZy5jYWxsKGgsdCl9fWVsc2V7dmFyIG09Zigic3RhdGUiKTtkW21dPSEwLHI9ZnVuY3Rpb24odCxlKXtyZXR1cm4gdSh0LG0sZSksZX0sbz1mdW5jdGlvbih0KXtyZXR1cm4gbCh0LG0pP3RbbV06e319LGk9ZnVuY3Rpb24odCl7cmV0dXJuIGwodCxtKX19dC5leHBvcnRzPXtzZXQ6cixnZXQ6byxoYXM6aSxlbmZvcmNlOmZ1bmN0aW9uKHQpe3JldHVybiBpKHQpP28odCk6cih0LHt9KX0sZ2V0dGVyRm9yOmZ1bmN0aW9uKHQpe3JldHVybiBmdW5jdGlvbihlKXt2YXIgbjtpZighcyhlKXx8KG49byhlKSkudHlwZSE9PXQpdGhyb3cgVHlwZUVycm9yKCJJbmNvbXBhdGlibGUgcmVjZWl2ZXIsICIrdCsiIHJlcXVpcmVkIik7cmV0dXJuIG59fX19LDQ0OTg0OmZ1bmN0aW9uKHQsZSxuKXt2YXIgcj1uKDIzNzI0KSxvPW4oMTIzNSksaT1yKCJpdGVyYXRvciIpLGE9QXJyYXkucHJvdG90eXBlO3QuZXhwb3J0cz1mdW5jdGlvbih0KXtyZXR1cm4gdm9pZCAwIT09dCYmKG8uQXJyYXk9PT10fHxhW2ldPT09dCl9fSw2MTk5OmZ1bmN0aW9uKHQsZSxuKXt2YXIgcj1uKDI0NTk0KTt0LmV4cG9ydHM9QXJyYXkuaXNBcnJheXx8ZnVuY3Rpb24odCl7cmV0dXJuIkFycmF5Ij09cih0KX19LDY0NTA0OmZ1bmN0aW9uKHQsZSxuKXt2YXIgcj1uKDMyMTg3KSxvPS8jfFwucHJvdG90eXBlXC4vLGk9ZnVuY3Rpb24odCxlKXt2YXIgbj1jW2EodCldO3JldHVybiBuPT11fHxuIT1zJiYoImZ1bmN0aW9uIj09dHlwZW9mIGU/cihlKTohIWUpfSxhPWkubm9ybWFsaXplPWZ1bmN0aW9uKHQpe3JldHVybiBTdHJpbmcodCkucmVwbGFjZShvLCIuIikudG9Mb3dlckNhc2UoKX0sYz1pLmRhdGE9e30scz1pLk5BVElWRT0iTiIsdT1pLlBPTFlGSUxMPSJQIjt0LmV4cG9ydHM9aX0sMzgyNTc6ZnVuY3Rpb24odCxlLG4pe3ZhciByPW4oMTA1OTIpLG89TWF0aC5mbG9vcjt0LmV4cG9ydHM9ZnVuY3Rpb24odCl7cmV0dXJuIXIodCkmJmlzRmluaXRlKHQpJiZvKHQpPT09dH19LDIxMjMxOmZ1bmN0aW9uKHQsZSxuKXt2YXIgcj1uKDM5NDc2KTt0LmV4cG9ydHM9LyhpcGhvbmV8aXBvZHxpcGFkKS4qYXBwbGV3ZWJraXQvaS50ZXN0KHIpfSwxMDU5MjpmdW5jdGlvbih0KXt0LmV4cG9ydHM9ZnVuY3Rpb24odCl7cmV0dXJuIm9iamVjdCI9PXR5cGVvZiB0P251bGwhPT10OiJmdW5jdGlvbiI9PXR5cGVvZiB0fX0sNjU2NzI6ZnVuY3Rpb24odCl7dC5leHBvcnRzPSExfSw0MzIyMzpmdW5jdGlvbih0LGUsbil7dmFyIHI9bigxMDU5Miksbz1uKDI0NTk0KSxpPW4oMjM3MjQpKCJtYXRjaCIpO3QuZXhwb3J0cz1mdW5jdGlvbih0KXt2YXIgZTtyZXR1cm4gcih0KSYmKHZvaWQgMCE9PShlPXRbaV0pPyEhZToiUmVnRXhwIj09byh0KSl9fSw0MTMzNDpmdW5jdGlvbih0LGUsbil7dmFyIHI9big4NzU3OSksbz1uKDQ0OTg0KSxpPW4oMjc4ODQpLGE9big0NjEzMCksYz1uKDczODkwKSxzPW4oMTIyNzgpLHU9ZnVuY3Rpb24odCxlKXt0aGlzLnN0b3BwZWQ9dCx0aGlzLnJlc3VsdD1lfTsodC5leHBvcnRzPWZ1bmN0aW9uKHQsZSxuLGwsZil7dmFyIGQscCxoLHYsZyx5LG0sYj1hKGUsbixsPzI6MSk7aWYoZilkPXQ7ZWxzZXtpZigiZnVuY3Rpb24iIT10eXBlb2YocD1jKHQpKSl0aHJvdyBUeXBlRXJyb3IoIlRhcmdldCBpcyBub3QgaXRlcmFibGUiKTtpZihvKHApKXtmb3IoaD0wLHY9aSh0Lmxlbmd0aCk7dj5oO2grKylpZigoZz1sP2IocihtPXRbaF0pWzBdLG1bMV0pOmIodFtoXSkpJiZnIGluc3RhbmNlb2YgdSlyZXR1cm4gZztyZXR1cm4gbmV3IHUoITEpfWQ9cC5jYWxsKHQpfWZvcih5PWQubmV4dDshKG09eS5jYWxsKGQpKS5kb25lOylpZigib2JqZWN0Ij09dHlwZW9mKGc9cyhkLGIsbS52YWx1ZSxsKSkmJmcmJmcgaW5zdGFuY2VvZiB1KXJldHVybiBnO3JldHVybiBuZXcgdSghMSl9KS5zdG9wPWZ1bmN0aW9uKHQpe3JldHVybiBuZXcgdSghMCx0KX19LDY0MTc2OmZ1bmN0aW9uKHQsZSxuKXsidXNlIHN0cmljdCI7dmFyIHIsbyxpLGE9big2NDk2NSksYz1uKDY2OTcxKSxzPW4oNzYyOTgpLHU9bigyMzcyNCksbD1uKDY1NjcyKSxmPXUoIml0ZXJhdG9yIiksZD0hMTtbXS5rZXlzJiYoIm5leHQiaW4oaT1bXS5rZXlzKCkpPyhvPWEoYShpKSkpIT09T2JqZWN0LnByb3RvdHlwZSYmKHI9byk6ZD0hMCksbnVsbD09ciYmKHI9e30pLGx8fHMocixmKXx8YyhyLGYsKGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXN9KSksdC5leHBvcnRzPXtJdGVyYXRvclByb3RvdHlwZTpyLEJVR0dZX1NBRkFSSV9JVEVSQVRPUlM6ZH19LDEyMzU6ZnVuY3Rpb24odCl7dC5leHBvcnRzPXt9fSw0NzkyNzpmdW5jdGlvbih0LGUsbil7InVzZSBzdHJpY3QiO3ZhciByPW4oODc1NzkpO3QuZXhwb3J0cz1mdW5jdGlvbih0LGUpe3ZhciBuLG89cih0aGlzKSxpPWFyZ3VtZW50cy5sZW5ndGg+Mj9hcmd1bWVudHNbMl06dm9pZCAwO2lmKCJmdW5jdGlvbiIhPXR5cGVvZiBlJiYiZnVuY3Rpb24iIT10eXBlb2YgaSl0aHJvdyBUeXBlRXJyb3IoIkF0IGxlYXN0IG9uZSBjYWxsYmFjayByZXF1aXJlZCIpO3JldHVybiBvLmhhcyh0KT8obj1vLmdldCh0KSwiZnVuY3Rpb24iPT10eXBlb2YgZSYmKG49ZShuKSxvLnNldCh0LG4pKSk6ImZ1bmN0aW9uIj09dHlwZW9mIGkmJihuPWkoKSxvLnNldCh0LG4pKSxufX0sNzI5NzA6ZnVuY3Rpb24odCl7dmFyIGU9TWF0aC5leHBtMSxuPU1hdGguZXhwO3QuZXhwb3J0cz0hZXx8ZSgxMCk+MjIwMjUuNDY1Nzk0ODA2NzE4fHxlKDEwKTwyMjAyNS40NjU3OTQ4MDY3MTh8fC0yZS0xNyE9ZSgtMmUtMTcpP2Z1bmN0aW9uKHQpe3JldHVybiAwPT0odD0rdCk/dDp0Pi0xZS02JiZ0PDFlLTY/dCt0KnQvMjpuKHQpLTF9OmV9LDUzMjUxOmZ1bmN0aW9uKHQsZSxuKXt2YXIgcj1uKDM4Nzg3KSxvPU1hdGguYWJzLGk9TWF0aC5wb3csYT1pKDIsLTUyKSxjPWkoMiwtMjMpLHM9aSgyLDEyNykqKDItYyksdT1pKDIsLTEyNik7dC5leHBvcnRzPU1hdGguZnJvdW5kfHxmdW5jdGlvbih0KXt2YXIgZSxuLGk9byh0KSxsPXIodCk7cmV0dXJuIGk8dT9sKihpL3UvYysxL2EtMS9hKSp1KmM6KG49KGU9KDErYy9hKSppKS0oZS1pKSk+c3x8biE9bj9sKigxLzApOmwqbn19LDIxOTMyOmZ1bmN0aW9uKHQpe3ZhciBlPU1hdGgubG9nO3QuZXhwb3J0cz1NYXRoLmxvZzFwfHxmdW5jdGlvbih0KXtyZXR1cm4odD0rdCk+LTFlLTgmJnQ8MWUtOD90LXQqdC8yOmUoMSt0KX19LDc3NDI6ZnVuY3Rpb24odCl7dC5leHBvcnRzPU1hdGguc2NhbGV8fGZ1bmN0aW9uKHQsZSxuLHIsbyl7cmV0dXJuIDA9PT1hcmd1bWVudHMubGVuZ3RofHx0IT10fHxlIT1lfHxuIT1ufHxyIT1yfHxvIT1vP05hTjp0PT09MS8wfHx0PT09LTEvMD90Oih0LWUpKihvLXIpLyhuLWUpK3J9fSwzODc4NzpmdW5jdGlvbih0KXt0LmV4cG9ydHM9TWF0aC5zaWdufHxmdW5jdGlvbih0KXtyZXR1cm4gMD09KHQ9K3QpfHx0IT10P3Q6dDwwPy0xOjF9fSw2NTU1NTpmdW5jdGlvbih0LGUsbil7dmFyIHIsbyxpLGEsYyxzLHUsbCxmPW4oODk1NTgpLGQ9big5NzI1NykuZixwPW4oMjQ1OTQpLGg9bigyMTc0NCkuc2V0LHY9bigyMTIzMSksZz1mLk11dGF0aW9uT2JzZXJ2ZXJ8fGYuV2ViS2l0TXV0YXRpb25PYnNlcnZlcix5PWYucHJvY2VzcyxtPWYuUHJvbWlzZSxiPSJwcm9jZXNzIj09cCh5KSx4PWQoZiwicXVldWVNaWNyb3Rhc2siKSx3PXgmJngudmFsdWU7d3x8KHI9ZnVuY3Rpb24oKXt2YXIgdCxlO2ZvcihiJiYodD15LmRvbWFpbikmJnQuZXhpdCgpO287KXtlPW8uZm4sbz1vLm5leHQ7dHJ5e2UoKX1jYXRjaCh0KXt0aHJvdyBvP2EoKTppPXZvaWQgMCx0fX1pPXZvaWQgMCx0JiZ0LmVudGVyKCl9LGI/YT1mdW5jdGlvbigpe3kubmV4dFRpY2socil9OmcmJiF2PyhjPSEwLHM9ZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUoIiIpLG5ldyBnKHIpLm9ic2VydmUocyx7Y2hhcmFjdGVyRGF0YTohMH0pLGE9ZnVuY3Rpb24oKXtzLmRhdGE9Yz0hY30pOm0mJm0ucmVzb2x2ZT8odT1tLnJlc29sdmUodm9pZCAwKSxsPXUudGhlbixhPWZ1bmN0aW9uKCl7bC5jYWxsKHUscil9KTphPWZ1bmN0aW9uKCl7aC5jYWxsKGYscil9KSx0LmV4cG9ydHM9d3x8ZnVuY3Rpb24odCl7dmFyIGU9e2ZuOnQsbmV4dDp2b2lkIDB9O2kmJihpLm5leHQ9ZSksb3x8KG89ZSxhKCkpLGk9ZX19LDM5NDU3OmZ1bmN0aW9uKHQsZSxuKXt2YXIgcj1uKDg5NTU4KTt0LmV4cG9ydHM9ci5Qcm9taXNlfSw5MDE0OmZ1bmN0aW9uKHQsZSxuKXt2YXIgcj1uKDMyMTg3KTt0LmV4cG9ydHM9ISFPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzJiYhcigoZnVuY3Rpb24oKXtyZXR1cm4hU3RyaW5nKFN5bWJvbCgpKX0pKX0sNTc1OTc6ZnVuY3Rpb24odCxlLG4pe3ZhciByPW4oMzIxODcpLG89bigyMzcyNCksaT1uKDY1NjcyKSxhPW8oIml0ZXJhdG9yIik7dC5leHBvcnRzPSFyKChmdW5jdGlvbigpe3ZhciB0PW5ldyBVUkwoImI/YT0xJmI9MiZjPTMiLCJodHRwOi8vYSIpLGU9dC5zZWFyY2hQYXJhbXMsbj0iIjtyZXR1cm4gdC5wYXRobmFtZT0iYyUyMGQiLGUuZm9yRWFjaCgoZnVuY3Rpb24odCxyKXtlLmRlbGV0ZSgiYiIpLG4rPXIrdH0pKSxpJiYhdC50b0pTT058fCFlLnNvcnR8fCJodHRwOi8vYS9jJTIwZD9hPTEmYz0zIiE9PXQuaHJlZnx8IjMiIT09ZS5nZXQoImMiKXx8ImE9MSIhPT1TdHJpbmcobmV3IFVSTFNlYXJjaFBhcmFtcygiP2E9MSIpKXx8IWVbYV18fCJhIiE9PW5ldyBVUkwoImh0dHBzOi8vYUBiIikudXNlcm5hbWV8fCJiIiE9PW5ldyBVUkxTZWFyY2hQYXJhbXMobmV3IFVSTFNlYXJjaFBhcmFtcygiYT1iIikpLmdldCgiYSIpfHwieG4tLWUxYXliYyIhPT1uZXcgVVJMKCJodHRwOi8v0YLQtdGB0YIiKS5ob3N0fHwiIyVEMCVCMSIhPT1uZXcgVVJMKCJodHRwOi8vYSPQsSIpLmhhc2h8fCJhMWMzIiE9PW58fCJ4IiE9PW5ldyBVUkwoImh0dHA6Ly94Iix2b2lkIDApLmhvc3R9KSl9LDE5NTkxOmZ1bmN0aW9uKHQsZSxuKXt2YXIgcj1uKDg5NTU4KSxvPW4oNzY3NzMpLGk9ci5XZWFrTWFwO3QuZXhwb3J0cz0iZnVuY3Rpb24iPT10eXBlb2YgaSYmL25hdGl2ZSBjb2RlLy50ZXN0KG8oaSkpfSw4MzA4MzpmdW5jdGlvbih0LGUsbil7InVzZSBzdHJpY3QiO3ZhciByPW4oODY0NzApLG89ZnVuY3Rpb24odCl7dmFyIGUsbjt0aGlzLnByb21pc2U9bmV3IHQoKGZ1bmN0aW9uKHQscil7aWYodm9pZCAwIT09ZXx8dm9pZCAwIT09bil0aHJvdyBUeXBlRXJyb3IoIkJhZCBQcm9taXNlIGNvbnN0cnVjdG9yIik7ZT10LG49cn0pKSx0aGlzLnJlc29sdmU9cihlKSx0aGlzLnJlamVjdD1yKG4pfTt0LmV4cG9ydHMuZj1mdW5jdGlvbih0KXtyZXR1cm4gbmV3IG8odCl9fSw5OTM0NjpmdW5jdGlvbih0LGUsbil7dmFyIHI9big0MzIyMyk7dC5leHBvcnRzPWZ1bmN0aW9uKHQpe2lmKHIodCkpdGhyb3cgVHlwZUVycm9yKCJUaGUgbWV0aG9kIGRvZXNuJ3QgYWNjZXB0IHJlZ3VsYXIgZXhwcmVzc2lvbnMiKTtyZXR1cm4gdH19LDg5NTQyOmZ1bmN0aW9uKHQsZSxuKXt2YXIgcj1uKDg5NTU4KS5pc0Zpbml0ZTt0LmV4cG9ydHM9TnVtYmVyLmlzRmluaXRlfHxmdW5jdGlvbih0KXtyZXR1cm4ibnVtYmVyIj09dHlwZW9mIHQmJnIodCl9fSw3ODY4NTpmdW5jdGlvbih0LGUsbil7InVzZSBzdHJpY3QiO3ZhciByPW4oNjI1NTYpLG89bigzMjE4NyksaT1uKDI1NTA3KSxhPW4oNTY5OTEpLGM9big0MTYyOCkscz1uKDE5MjA5KSx1PW4oMjQ5OCksbD1PYmplY3QuYXNzaWduLGY9T2JqZWN0LmRlZmluZVByb3BlcnR5O3QuZXhwb3J0cz0hbHx8bygoZnVuY3Rpb24oKXtpZihyJiYxIT09bCh7YjoxfSxsKGYoe30sImEiLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe2YodGhpcywiYiIse3ZhbHVlOjMsZW51bWVyYWJsZTohMX0pfX0pLHtiOjJ9KSkuYilyZXR1cm4hMDt2YXIgdD17fSxlPXt9LG49U3ltYm9sKCksbz0iYWJjZGVmZ2hpamtsbW5vcHFyc3QiO3JldHVybiB0W25dPTcsby5zcGxpdCgiIikuZm9yRWFjaCgoZnVuY3Rpb24odCl7ZVt0XT10fSkpLDchPWwoe30sdClbbl18fGkobCh7fSxlKSkuam9pbigiIikhPW99KSk/ZnVuY3Rpb24odCxlKXtmb3IodmFyIG49cyh0KSxvPWFyZ3VtZW50cy5sZW5ndGgsbD0xLGY9YS5mLGQ9Yy5mO28+bDspZm9yKHZhciBwLGg9dShhcmd1bWVudHNbbCsrXSksdj1mP2koaCkuY29uY2F0KGYoaCkpOmkoaCksZz12Lmxlbmd0aCx5PTA7Zz55OylwPXZbeSsrXSxyJiYhZC5jYWxsKGgscCl8fChuW3BdPWhbcF0pO3JldHVybiBufTpsfSw1MDg2ODpmdW5jdGlvbih0LGUsbil7dmFyIHI9big4NzU3OSksbz1uKDg2NDAxKSxpPW4oNTkxMzUpLGE9bigyMzA3MCksYz1uKDUxNTcxKSxzPW4oMTkyMyksdT1uKDgzMTk3KSgiSUVfUFJPVE8iKSxsPWZ1bmN0aW9uKCl7fSxmPWZ1bmN0aW9uKCl7dmFyIHQsZT1zKCJpZnJhbWUiKSxuPWkubGVuZ3RoO2ZvcihlLnN0eWxlLmRpc3BsYXk9Im5vbmUiLGMuYXBwZW5kQ2hpbGQoZSksZS5zcmM9U3RyaW5nKCJqYXZhc2NyaXB0OiIpLCh0PWUuY29udGVudFdpbmRvdy5kb2N1bWVudCkub3BlbigpLHQud3JpdGUoIjxzY3JpcHQ+ZG9jdW1lbnQuRj1PYmplY3Q8XC9zY3JpcHQ+IiksdC5jbG9zZSgpLGY9dC5GO24tLTspZGVsZXRlIGYucHJvdG90eXBlW2lbbl1dO3JldHVybiBmKCl9O3QuZXhwb3J0cz1PYmplY3QuY3JlYXRlfHxmdW5jdGlvbih0LGUpe3ZhciBuO3JldHVybiBudWxsIT09dD8obC5wcm90b3R5cGU9cih0KSxuPW5ldyBsLGwucHJvdG90eXBlPW51bGwsblt1XT10KTpuPWYoKSx2b2lkIDA9PT1lP246byhuLGUpfSxhW3VdPSEwfSw4NjQwMTpmdW5jdGlvbih0LGUsbil7dmFyIHI9big2MjU1Niksbz1uKDM3NjIwKSxpPW4oODc1NzkpLGE9bigyNTUwNyk7dC5leHBvcnRzPXI/T2JqZWN0LmRlZmluZVByb3BlcnRpZXM6ZnVuY3Rpb24odCxlKXtpKHQpO2Zvcih2YXIgbixyPWEoZSksYz1yLmxlbmd0aCxzPTA7Yz5zOylvLmYodCxuPXJbcysrXSxlW25dKTtyZXR1cm4gdH19LDM3NjIwOmZ1bmN0aW9uKHQsZSxuKXt2YXIgcj1uKDYyNTU2KSxvPW4oNjI3OTkpLGk9big4NzU3OSksYT1uKDUzNDk4KSxjPU9iamVjdC5kZWZpbmVQcm9wZXJ0eTtlLmY9cj9jOmZ1bmN0aW9uKHQsZSxuKXtpZihpKHQpLGU9YShlLCEwKSxpKG4pLG8pdHJ5e3JldHVybiBjKHQsZSxuKX1jYXRjaCh0KXt9aWYoImdldCJpbiBufHwic2V0ImluIG4pdGhyb3cgVHlwZUVycm9yKCJBY2Nlc3NvcnMgbm90IHN1cHBvcnRlZCIpO3JldHVybiJ2YWx1ZSJpbiBuJiYodFtlXT1uLnZhbHVlKSx0fX0sOTcyNTc6ZnVuY3Rpb24odCxlLG4pe3ZhciByPW4oNjI1NTYpLG89big0MTYyOCksaT1uKDE0MjA5KSxhPW4oOTU3MyksYz1uKDUzNDk4KSxzPW4oNzYyOTgpLHU9big2Mjc5OSksbD1PYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yO2UuZj1yP2w6ZnVuY3Rpb24odCxlKXtpZih0PWEodCksZT1jKGUsITApLHUpdHJ5e3JldHVybiBsKHQsZSl9Y2F0Y2godCl7fWlmKHModCxlKSlyZXR1cm4gaSghby5mLmNhbGwodCxlKSx0W2VdKX19LDI2OTM3OmZ1bmN0aW9uKHQsZSxuKXt2YXIgcj1uKDk1NzMpLG89bigxMzMzNCkuZixpPXt9LnRvU3RyaW5nLGE9Im9iamVjdCI9PXR5cGVvZiB3aW5kb3cmJndpbmRvdyYmT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXM/T2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMod2luZG93KTpbXTt0LmV4cG9ydHMuZj1mdW5jdGlvbih0KXtyZXR1cm4gYSYmIltvYmplY3QgV2luZG93XSI9PWkuY2FsbCh0KT9mdW5jdGlvbih0KXt0cnl7cmV0dXJuIG8odCl9Y2F0Y2godCl7cmV0dXJuIGEuc2xpY2UoKX19KHQpOm8ocih0KSl9fSwxMzMzNDpmdW5jdGlvbih0LGUsbil7dmFyIHI9big0MTc2KSxvPW4oNTkxMzUpLmNvbmNhdCgibGVuZ3RoIiwicHJvdG90eXBlIik7ZS5mPU9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzfHxmdW5jdGlvbih0KXtyZXR1cm4gcih0LG8pfX0sNTY5OTE6ZnVuY3Rpb24odCxlKXtlLmY9T2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9sc30sNjQ5NjU6ZnVuY3Rpb24odCxlLG4pe3ZhciByPW4oNzYyOTgpLG89bigxOTIwOSksaT1uKDgzMTk3KSxhPW4oNzE2MDgpLGM9aSgiSUVfUFJPVE8iKSxzPU9iamVjdC5wcm90b3R5cGU7dC5leHBvcnRzPWE/T2JqZWN0LmdldFByb3RvdHlwZU9mOmZ1bmN0aW9uKHQpe3JldHVybiB0PW8odCkscih0LGMpP3RbY106ImZ1bmN0aW9uIj09dHlwZW9mIHQuY29uc3RydWN0b3ImJnQgaW5zdGFuY2VvZiB0LmNvbnN0cnVjdG9yP3QuY29uc3RydWN0b3IucHJvdG90eXBlOnQgaW5zdGFuY2VvZiBPYmplY3Q/czpudWxsfX0sODY0MDM6ZnVuY3Rpb24odCxlLG4peyJ1c2Ugc3RyaWN0Ijt2YXIgcj1uKDg5ODI3KSxvPW4oNzEyMDEpLGk9big3NjI5OCksYT1uKDI1NTA3KSxjPW4oMTkyMDkpLHM9Ik9iamVjdCBJdGVyYXRvciIsdT1yLnNldCxsPXIuZ2V0dGVyRm9yKHMpO3QuZXhwb3J0cz1vKChmdW5jdGlvbih0LGUpe3ZhciBuPWModCk7dSh0aGlzLHt0eXBlOnMsbW9kZTplLG9iamVjdDpuLGtleXM6YShuKSxpbmRleDowfSl9KSwiT2JqZWN0IiwoZnVuY3Rpb24oKXtmb3IodmFyIHQ9bCh0aGlzKSxlPXQua2V5czs7KXtpZihudWxsPT09ZXx8dC5pbmRleD49ZS5sZW5ndGgpcmV0dXJuIHQub2JqZWN0PXQua2V5cz1udWxsLHt2YWx1ZTp2b2lkIDAsZG9uZTohMH07dmFyIG49ZVt0LmluZGV4KytdLHI9dC5vYmplY3Q7aWYoaShyLG4pKXtzd2l0Y2godC5tb2RlKXtjYXNlImtleXMiOnJldHVybnt2YWx1ZTpuLGRvbmU6ITF9O2Nhc2UidmFsdWVzIjpyZXR1cm57dmFsdWU6cltuXSxkb25lOiExfX1yZXR1cm57dmFsdWU6W24scltuXV0sZG9uZTohMX19fX0pKX0sNDE3NjpmdW5jdGlvbih0LGUsbil7dmFyIHI9big3NjI5OCksbz1uKDk1NzMpLGk9big4NTgwMykuaW5kZXhPZixhPW4oMjMwNzApO3QuZXhwb3J0cz1mdW5jdGlvbih0LGUpe3ZhciBuLGM9byh0KSxzPTAsdT1bXTtmb3IobiBpbiBjKSFyKGEsbikmJnIoYyxuKSYmdS5wdXNoKG4pO2Zvcig7ZS5sZW5ndGg+czspcihjLG49ZVtzKytdKSYmKH5pKHUsbil8fHUucHVzaChuKSk7cmV0dXJuIHV9fSwyNTUwNzpmdW5jdGlvbih0LGUsbil7dmFyIHI9big0MTc2KSxvPW4oNTkxMzUpO3QuZXhwb3J0cz1PYmplY3Qua2V5c3x8ZnVuY3Rpb24odCl7cmV0dXJuIHIodCxvKX19LDQxNjI4OmZ1bmN0aW9uKHQsZSl7InVzZSBzdHJpY3QiO3ZhciBuPXt9LnByb3BlcnR5SXNFbnVtZXJhYmxlLHI9T2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcixvPXImJiFuLmNhbGwoezE6Mn0sMSk7ZS5mPW8/ZnVuY3Rpb24odCl7dmFyIGU9cih0aGlzLHQpO3JldHVybiEhZSYmZS5lbnVtZXJhYmxlfTpufSw3MTg0MjpmdW5jdGlvbih0LGUsbil7dmFyIHI9big4NzU3OSksbz1uKDc5ODYxKTt0LmV4cG9ydHM9T2JqZWN0LnNldFByb3RvdHlwZU9mfHwoIl9fcHJvdG9fXyJpbnt9P2Z1bmN0aW9uKCl7dmFyIHQsZT0hMSxuPXt9O3RyeXsodD1PYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKE9iamVjdC5wcm90b3R5cGUsIl9fcHJvdG9fXyIpLnNldCkuY2FsbChuLFtdKSxlPW4gaW5zdGFuY2VvZiBBcnJheX1jYXRjaCh0KXt9cmV0dXJuIGZ1bmN0aW9uKG4saSl7cmV0dXJuIHIobiksbyhpKSxlP3QuY2FsbChuLGkpOm4uX19wcm90b19fPWksbn19KCk6dm9pZCAwKX0sMzU2NzpmdW5jdGlvbih0LGUsbil7dmFyIHI9big2MjU1Niksbz1uKDI1NTA3KSxpPW4oOTU3MyksYT1uKDQxNjI4KS5mLGM9ZnVuY3Rpb24odCl7cmV0dXJuIGZ1bmN0aW9uKGUpe2Zvcih2YXIgbixjPWkoZSkscz1vKGMpLHU9cy5sZW5ndGgsbD0wLGY9W107dT5sOyluPXNbbCsrXSxyJiYhYS5jYWxsKGMsbil8fGYucHVzaCh0P1tuLGNbbl1dOmNbbl0pO3JldHVybiBmfX07dC5leHBvcnRzPXtlbnRyaWVzOmMoITApLHZhbHVlczpjKCExKX19LDE5NzU4OmZ1bmN0aW9uKHQsZSxuKXsidXNlIHN0cmljdCI7dmFyIHI9big5MDYxMyksbz1uKDU5NTkxKTt0LmV4cG9ydHM9cj97fS50b1N0cmluZzpmdW5jdGlvbigpe3JldHVybiJbb2JqZWN0ICIrbyh0aGlzKSsiXSJ9fSwyNDQxNTpmdW5jdGlvbih0LGUsbil7dmFyIHI9big3NzAxKSxvPW4oMTMzMzQpLGk9big1Njk5MSksYT1uKDg3NTc5KTt0LmV4cG9ydHM9cigiUmVmbGVjdCIsIm93bktleXMiKXx8ZnVuY3Rpb24odCl7dmFyIGU9by5mKGEodCkpLG49aS5mO3JldHVybiBuP2UuY29uY2F0KG4odCkpOmV9fSwyNDQ5NzpmdW5jdGlvbih0LGUsbil7dmFyIHI9big4OTU1OCksbz1uKDgyMzUwKS50cmltLGk9big1MDA1NSksYT1yLnBhcnNlRmxvYXQsYz0xL2EoaSsiLTAiKSE9LTEvMDt0LmV4cG9ydHM9Yz9mdW5jdGlvbih0KXt2YXIgZT1vKFN0cmluZyh0KSksbj1hKGUpO3JldHVybiAwPT09biYmIi0iPT1lLmNoYXJBdCgwKT8tMDpufTphfSw3ODQ2OmZ1bmN0aW9uKHQsZSxuKXt2YXIgcj1uKDg5NTU4KSxvPW4oODIzNTApLnRyaW0saT1uKDUwMDU1KSxhPXIucGFyc2VJbnQsYz0vXlsrLV0/MFtYeF0vLHM9OCE9PWEoaSsiMDgiKXx8MjIhPT1hKGkrIjB4MTYiKTt0LmV4cG9ydHM9cz9mdW5jdGlvbih0LGUpe3ZhciBuPW8oU3RyaW5nKHQpKTtyZXR1cm4gYShuLGU+Pj4wfHwoYy50ZXN0KG4pPzE2OjEwKSl9OmF9LDU2MjM4OmZ1bmN0aW9uKHQsZSxuKXt2YXIgcj1uKDg5NTU4KTt0LmV4cG9ydHM9cn0sMzExNTpmdW5jdGlvbih0KXt0LmV4cG9ydHM9ZnVuY3Rpb24odCl7dHJ5e3JldHVybntlcnJvcjohMSx2YWx1ZTp0KCl9fWNhdGNoKHQpe3JldHVybntlcnJvcjohMCx2YWx1ZTp0fX19fSw2MzEzNDpmdW5jdGlvbih0LGUsbil7dmFyIHI9big4NzU3OSksbz1uKDEwNTkyKSxpPW4oODMwODMpO3QuZXhwb3J0cz1mdW5jdGlvbih0LGUpe2lmKHIodCksbyhlKSYmZS5jb25zdHJ1Y3Rvcj09PXQpcmV0dXJuIGU7dmFyIG49aS5mKHQpO3JldHVybigwLG4ucmVzb2x2ZSkoZSksbi5wcm9taXNlfX0sNjk5Mjc6ZnVuY3Rpb24odCl7InVzZSBzdHJpY3QiO3ZhciBlPTIxNDc0ODM2NDcsbj0vW15cMC1cdTAwN0VdLyxyPS9bLlx1MzAwMlx1RkYwRVx1RkY2MV0vZyxvPSJPdmVyZmxvdzogaW5wdXQgbmVlZHMgd2lkZXIgaW50ZWdlcnMgdG8gcHJvY2VzcyIsaT1NYXRoLmZsb29yLGE9U3RyaW5nLmZyb21DaGFyQ29kZSxjPWZ1bmN0aW9uKHQpe3JldHVybiB0KzIyKzc1Kih0PDI2KX0scz1mdW5jdGlvbih0LGUsbil7dmFyIHI9MDtmb3IodD1uP2kodC83MDApOnQ+PjEsdCs9aSh0L2UpO3Q+NDU1O3IrPTM2KXQ9aSh0LzM1KTtyZXR1cm4gaShyKzM2KnQvKHQrMzgpKX0sdT1mdW5jdGlvbih0KXt2YXIgbj1bXTt0PWZ1bmN0aW9uKHQpe2Zvcih2YXIgZT1bXSxuPTAscj10Lmxlbmd0aDtuPHI7KXt2YXIgbz10LmNoYXJDb2RlQXQobisrKTtpZihvPj01NTI5NiYmbzw9NTYzMTkmJm48cil7dmFyIGk9dC5jaGFyQ29kZUF0KG4rKyk7NTYzMjA9PSg2NDUxMiZpKT9lLnB1c2goKCgxMDIzJm8pPDwxMCkrKDEwMjMmaSkrNjU1MzYpOihlLnB1c2gobyksbi0tKX1lbHNlIGUucHVzaChvKX1yZXR1cm4gZX0odCk7dmFyIHIsdSxsPXQubGVuZ3RoLGY9MTI4LGQ9MCxwPTcyO2ZvcihyPTA7cjx0Lmxlbmd0aDtyKyspKHU9dFtyXSk8MTI4JiZuLnB1c2goYSh1KSk7dmFyIGg9bi5sZW5ndGgsdj1oO2ZvcihoJiZuLnB1c2goIi0iKTt2PGw7KXt2YXIgZz1lO2ZvcihyPTA7cjx0Lmxlbmd0aDtyKyspKHU9dFtyXSk+PWYmJnU8ZyYmKGc9dSk7dmFyIHk9disxO2lmKGctZj5pKChlLWQpL3kpKXRocm93IFJhbmdlRXJyb3Iobyk7Zm9yKGQrPShnLWYpKnksZj1nLHI9MDtyPHQubGVuZ3RoO3IrKyl7aWYoKHU9dFtyXSk8ZiYmKytkPmUpdGhyb3cgUmFuZ2VFcnJvcihvKTtpZih1PT1mKXtmb3IodmFyIG09ZCxiPTM2OztiKz0zNil7dmFyIHg9Yjw9cD8xOmI+PXArMjY/MjY6Yi1wO2lmKG08eClicmVhazt2YXIgdz1tLXgsRT0zNi14O24ucHVzaChhKGMoeCt3JUUpKSksbT1pKHcvRSl9bi5wdXNoKGEoYyhtKSkpLHA9cyhkLHksdj09aCksZD0wLCsrdn19KytkLCsrZn1yZXR1cm4gbi5qb2luKCIiKX07dC5leHBvcnRzPWZ1bmN0aW9uKHQpe3ZhciBlLG8saT1bXSxhPXQudG9Mb3dlckNhc2UoKS5yZXBsYWNlKHIsIi4iKS5zcGxpdCgiLiIpO2ZvcihlPTA7ZTxhLmxlbmd0aDtlKyspbz1hW2VdLGkucHVzaChuLnRlc3Qobyk/InhuLS0iK3Uobyk6byk7cmV0dXJuIGkuam9pbigiLiIpfX0sMTkyNjpmdW5jdGlvbih0LGUsbil7dmFyIHI9big5MjkxMyk7dC5leHBvcnRzPWZ1bmN0aW9uKHQsZSxuKXtmb3IodmFyIG8gaW4gZSlyKHQsbyxlW29dLG4pO3JldHVybiB0fX0sOTI5MTM6ZnVuY3Rpb24odCxlLG4pe3ZhciByPW4oODk1NTgpLG89big2Njk3MSksaT1uKDc2Mjk4KSxhPW4oOTgyNjkpLGM9big3Njc3Mykscz1uKDg5ODI3KSx1PXMuZ2V0LGw9cy5lbmZvcmNlLGY9U3RyaW5nKFN0cmluZykuc3BsaXQoIlN0cmluZyIpOyh0LmV4cG9ydHM9ZnVuY3Rpb24odCxlLG4sYyl7dmFyIHM9ISFjJiYhIWMudW5zYWZlLHU9ISFjJiYhIWMuZW51bWVyYWJsZSxkPSEhYyYmISFjLm5vVGFyZ2V0R2V0OyJmdW5jdGlvbiI9PXR5cGVvZiBuJiYoInN0cmluZyIhPXR5cGVvZiBlfHxpKG4sIm5hbWUiKXx8byhuLCJuYW1lIixlKSxsKG4pLnNvdXJjZT1mLmpvaW4oInN0cmluZyI9PXR5cGVvZiBlP2U6IiIpKSx0IT09cj8ocz8hZCYmdFtlXSYmKHU9ITApOmRlbGV0ZSB0W2VdLHU/dFtlXT1uOm8odCxlLG4pKTp1P3RbZV09bjphKGUsbil9KShGdW5jdGlvbi5wcm90b3R5cGUsInRvU3RyaW5nIiwoZnVuY3Rpb24oKXtyZXR1cm4iZnVuY3Rpb24iPT10eXBlb2YgdGhpcyYmdSh0aGlzKS5zb3VyY2V8fGModGhpcyl9KSl9LDc3MDIwOmZ1bmN0aW9uKHQsZSxuKXt2YXIgcj1uKDk0OTA2KSxvPW4oNTg2MDYpLGk9big2MjA1NCkoIm1ldGFkYXRhIiksYT1pLnN0b3JlfHwoaS5zdG9yZT1uZXcgbyksYz1mdW5jdGlvbih0LGUsbil7dmFyIG89YS5nZXQodCk7aWYoIW8pe2lmKCFuKXJldHVybjthLnNldCh0LG89bmV3IHIpfXZhciBpPW8uZ2V0KGUpO2lmKCFpKXtpZighbilyZXR1cm47by5zZXQoZSxpPW5ldyByKX1yZXR1cm4gaX07dC5leHBvcnRzPXtzdG9yZTphLGdldE1hcDpjLGhhczpmdW5jdGlvbih0LGUsbil7dmFyIHI9YyhlLG4sITEpO3JldHVybiB2b2lkIDAhPT1yJiZyLmhhcyh0KX0sZ2V0OmZ1bmN0aW9uKHQsZSxuKXt2YXIgcj1jKGUsbiwhMSk7cmV0dXJuIHZvaWQgMD09PXI/dm9pZCAwOnIuZ2V0KHQpfSxzZXQ6ZnVuY3Rpb24odCxlLG4scil7YyhuLHIsITApLnNldCh0LGUpfSxrZXlzOmZ1bmN0aW9uKHQsZSl7dmFyIG49Yyh0LGUsITEpLHI9W107cmV0dXJuIG4mJm4uZm9yRWFjaCgoZnVuY3Rpb24odCxlKXtyLnB1c2goZSl9KSkscn0sdG9LZXk6ZnVuY3Rpb24odCl7cmV0dXJuIHZvaWQgMD09PXR8fCJzeW1ib2wiPT10eXBlb2YgdD90OlN0cmluZyh0KX19fSwzNTQ1NTpmdW5jdGlvbih0LGUsbil7dmFyIHI9bigyNDU5NCksbz1uKDM4NTk4KTt0LmV4cG9ydHM9ZnVuY3Rpb24odCxlKXt2YXIgbj10LmV4ZWM7aWYoImZ1bmN0aW9uIj09dHlwZW9mIG4pe3ZhciBpPW4uY2FsbCh0LGUpO2lmKCJvYmplY3QiIT10eXBlb2YgaSl0aHJvdyBUeXBlRXJyb3IoIlJlZ0V4cCBleGVjIG1ldGhvZCByZXR1cm5lZCBzb21ldGhpbmcgb3RoZXIgdGhhbiBhbiBPYmplY3Qgb3IgbnVsbCIpO3JldHVybiBpfWlmKCJSZWdFeHAiIT09cih0KSl0aHJvdyBUeXBlRXJyb3IoIlJlZ0V4cCNleGVjIGNhbGxlZCBvbiBpbmNvbXBhdGlibGUgcmVjZWl2ZXIiKTtyZXR1cm4gby5jYWxsKHQsZSl9fSwzODU5ODpmdW5jdGlvbih0LGUsbil7InVzZSBzdHJpY3QiO3ZhciByLG8saT1uKDI1NDE5KSxhPVJlZ0V4cC5wcm90b3R5cGUuZXhlYyxjPVN0cmluZy5wcm90b3R5cGUucmVwbGFjZSxzPWEsdT0ocj0vYS8sbz0vYiovZyxhLmNhbGwociwiYSIpLGEuY2FsbChvLCJhIiksMCE9PXIubGFzdEluZGV4fHwwIT09by5sYXN0SW5kZXgpLGw9dm9pZCAwIT09LygpPz8vLmV4ZWMoIiIpWzFdOyh1fHxsKSYmKHM9ZnVuY3Rpb24odCl7dmFyIGUsbixyLG8scz10aGlzO3JldHVybiBsJiYobj1uZXcgUmVnRXhwKCJeIitzLnNvdXJjZSsiJCg/IVxccykiLGkuY2FsbChzKSkpLHUmJihlPXMubGFzdEluZGV4KSxyPWEuY2FsbChzLHQpLHUmJnImJihzLmxhc3RJbmRleD1zLmdsb2JhbD9yLmluZGV4K3JbMF0ubGVuZ3RoOmUpLGwmJnImJnIubGVuZ3RoPjEmJmMuY2FsbChyWzBdLG4sKGZ1bmN0aW9uKCl7Zm9yKG89MTtvPGFyZ3VtZW50cy5sZW5ndGgtMjtvKyspdm9pZCAwPT09YXJndW1lbnRzW29dJiYocltvXT12b2lkIDApfSkpLHJ9KSx0LmV4cG9ydHM9c30sMjU0MTk6ZnVuY3Rpb24odCxlLG4peyJ1c2Ugc3RyaWN0Ijt2YXIgcj1uKDg3NTc5KTt0LmV4cG9ydHM9ZnVuY3Rpb24oKXt2YXIgdD1yKHRoaXMpLGU9IiI7cmV0dXJuIHQuZ2xvYmFsJiYoZSs9ImciKSx0Lmlnbm9yZUNhc2UmJihlKz0iaSIpLHQubXVsdGlsaW5lJiYoZSs9Im0iKSx0LmRvdEFsbCYmKGUrPSJzIiksdC51bmljb2RlJiYoZSs9InUiKSx0LnN0aWNreSYmKGUrPSJ5IiksZX19LDcwMTMyOmZ1bmN0aW9uKHQpe3QuZXhwb3J0cz1mdW5jdGlvbih0KXtpZihudWxsPT10KXRocm93IFR5cGVFcnJvcigiQ2FuJ3QgY2FsbCBtZXRob2Qgb24gIit0KTtyZXR1cm4gdH19LDM4MTg5OmZ1bmN0aW9uKHQpe3QuZXhwb3J0cz1mdW5jdGlvbih0LGUpe3JldHVybiB0PT09ZXx8dCE9dCYmZSE9ZX19LDc2NDgyOmZ1bmN0aW9uKHQpe3QuZXhwb3J0cz1PYmplY3QuaXN8fGZ1bmN0aW9uKHQsZSl7cmV0dXJuIHQ9PT1lPzAhPT10fHwxL3Q9PTEvZTp0IT10JiZlIT1lfX0sOTgyNjk6ZnVuY3Rpb24odCxlLG4pe3ZhciByPW4oODk1NTgpLG89big2Njk3MSk7dC5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7dHJ5e28ocix0LGUpfWNhdGNoKG4pe3JbdF09ZX1yZXR1cm4gZX19LDY3NTM4OmZ1bmN0aW9uKHQsZSxuKXsidXNlIHN0cmljdCI7dmFyIHI9big3NzAxKSxvPW4oMzc2MjApLGk9bigyMzcyNCksYT1uKDYyNTU2KSxjPWkoInNwZWNpZXMiKTt0LmV4cG9ydHM9ZnVuY3Rpb24odCl7dmFyIGU9cih0KSxuPW8uZjthJiZlJiYhZVtjXSYmbihlLGMse2NvbmZpZ3VyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpc319KX19LDUxMTI4OmZ1bmN0aW9uKHQsZSxuKXt2YXIgcj1uKDM3NjIwKS5mLG89big3NjI5OCksaT1uKDIzNzI0KSgidG9TdHJpbmdUYWciKTt0LmV4cG9ydHM9ZnVuY3Rpb24odCxlLG4pe3QmJiFvKHQ9bj90OnQucHJvdG90eXBlLGkpJiZyKHQsaSx7Y29uZmlndXJhYmxlOiEwLHZhbHVlOmV9KX19LDgzMTk3OmZ1bmN0aW9uKHQsZSxuKXt2YXIgcj1uKDYyMDU0KSxvPW4oNjcyOSksaT1yKCJrZXlzIik7dC5leHBvcnRzPWZ1bmN0aW9uKHQpe3JldHVybiBpW3RdfHwoaVt0XT1vKHQpKX19LDM0NzQxOmZ1bmN0aW9uKHQsZSxuKXt2YXIgcj1uKDg5NTU4KSxvPW4oOTgyNjkpLGk9Il9fY29yZS1qc19zaGFyZWRfXyIsYT1yW2ldfHxvKGkse30pO3QuZXhwb3J0cz1hfSw2MjA1NDpmdW5jdGlvbih0LGUsbil7dmFyIHI9big2NTY3Miksbz1uKDM0NzQxKTsodC5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIG9bdF18fChvW3RdPXZvaWQgMCE9PWU/ZTp7fSl9KSgidmVyc2lvbnMiLFtdKS5wdXNoKHt2ZXJzaW9uOiIzLjUuMCIsbW9kZTpyPyJwdXJlIjoiZ2xvYmFsIixjb3B5cmlnaHQ6IsKpIDIwMTkgRGVuaXMgUHVzaGthcmV2ICh6bG9pcm9jay5ydSkifSl9LDIyOTA5OmZ1bmN0aW9uKHQsZSxuKXsidXNlIHN0cmljdCI7dmFyIHI9bigzMjE4Nyk7dC5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7dmFyIG49W11bdF07cmV0dXJuIW58fCFyKChmdW5jdGlvbigpe24uY2FsbChudWxsLGV8fGZ1bmN0aW9uKCl7dGhyb3cgMX0sMSl9KSl9fSwxMzk3OTpmdW5jdGlvbih0LGUsbil7dmFyIHI9big4NzU3OSksbz1uKDg2NDcwKSxpPW4oMjM3MjQpKCJzcGVjaWVzIik7dC5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7dmFyIG4sYT1yKHQpLmNvbnN0cnVjdG9yO3JldHVybiB2b2lkIDA9PT1hfHxudWxsPT0obj1yKGEpW2ldKT9lOm8obil9fSw2MDE0MDpmdW5jdGlvbih0LGUsbil7dmFyIHI9big0MzQxNiksbz1uKDcwMTMyKSxpPWZ1bmN0aW9uKHQpe3JldHVybiBmdW5jdGlvbihlLG4pe3ZhciBpLGEsYz1TdHJpbmcobyhlKSkscz1yKG4pLHU9Yy5sZW5ndGg7cmV0dXJuIHM8MHx8cz49dT90PyIiOnZvaWQgMDooaT1jLmNoYXJDb2RlQXQocykpPDU1Mjk2fHxpPjU2MzE5fHxzKzE9PT11fHwoYT1jLmNoYXJDb2RlQXQocysxKSk8NTYzMjB8fGE+NTczNDM/dD9jLmNoYXJBdChzKTppOnQ/Yy5zbGljZShzLHMrMik6YS01NjMyMCsoaS01NTI5Njw8MTApKzY1NTM2fX07dC5leHBvcnRzPXtjb2RlQXQ6aSghMSksY2hhckF0OmkoITApfX0sMjY1NzM6ZnVuY3Rpb24odCxlLG4pe3ZhciByPW4oMjc4ODQpLG89big2ODI1MyksaT1uKDcwMTMyKSxhPU1hdGguY2VpbCxjPWZ1bmN0aW9uKHQpe3JldHVybiBmdW5jdGlvbihlLG4sYyl7dmFyIHMsdSxsPVN0cmluZyhpKGUpKSxmPWwubGVuZ3RoLGQ9dm9pZCAwPT09Yz8iICI6U3RyaW5nKGMpLHA9cihuKTtyZXR1cm4gcDw9Znx8IiI9PWQ/bDoocz1wLWYsKHU9by5jYWxsKGQsYShzL2QubGVuZ3RoKSkpLmxlbmd0aD5zJiYodT11LnNsaWNlKDAscykpLHQ/bCt1OnUrbCl9fTt0LmV4cG9ydHM9e3N0YXJ0OmMoITEpLGVuZDpjKCEwKX19LDY4MjUzOmZ1bmN0aW9uKHQsZSxuKXsidXNlIHN0cmljdCI7dmFyIHI9big0MzQxNiksbz1uKDcwMTMyKTt0LmV4cG9ydHM9IiIucmVwZWF0fHxmdW5jdGlvbih0KXt2YXIgZT1TdHJpbmcobyh0aGlzKSksbj0iIixpPXIodCk7aWYoaTwwfHxpPT0xLzApdGhyb3cgUmFuZ2VFcnJvcigiV3JvbmcgbnVtYmVyIG9mIHJlcGV0aXRpb25zIik7Zm9yKDtpPjA7KGk+Pj49MSkmJihlKz1lKSkxJmkmJihuKz1lKTtyZXR1cm4gbn19LDgyMzUwOmZ1bmN0aW9uKHQsZSxuKXt2YXIgcj1uKDcwMTMyKSxvPSJbIituKDUwMDU1KSsiXSIsaT1SZWdFeHAoIl4iK28rbysiKiIpLGE9UmVnRXhwKG8rbysiKiQiKSxjPWZ1bmN0aW9uKHQpe3JldHVybiBmdW5jdGlvbihlKXt2YXIgbj1TdHJpbmcocihlKSk7cmV0dXJuIDEmdCYmKG49bi5yZXBsYWNlKGksIiIpKSwyJnQmJihuPW4ucmVwbGFjZShhLCIiKSksbn19O3QuZXhwb3J0cz17c3RhcnQ6YygxKSxlbmQ6YygyKSx0cmltOmMoMyl9fSwyMTc0NDpmdW5jdGlvbih0LGUsbil7dmFyIHIsbyxpLGE9big4OTU1OCksYz1uKDMyMTg3KSxzPW4oMjQ1OTQpLHU9big0NjEzMCksbD1uKDUxNTcxKSxmPW4oMTkyMyksZD1uKDIxMjMxKSxwPWEubG9jYXRpb24saD1hLnNldEltbWVkaWF0ZSx2PWEuY2xlYXJJbW1lZGlhdGUsZz1hLnByb2Nlc3MseT1hLk1lc3NhZ2VDaGFubmVsLG09YS5EaXNwYXRjaCxiPTAseD17fSx3PSJvbnJlYWR5c3RhdGVjaGFuZ2UiLEU9ZnVuY3Rpb24odCl7aWYoeC5oYXNPd25Qcm9wZXJ0eSh0KSl7dmFyIGU9eFt0XTtkZWxldGUgeFt0XSxlKCl9fSxqPWZ1bmN0aW9uKHQpe3JldHVybiBmdW5jdGlvbigpe0UodCl9fSxDPWZ1bmN0aW9uKHQpe0UodC5kYXRhKX0saz1mdW5jdGlvbih0KXthLnBvc3RNZXNzYWdlKHQrIiIscC5wcm90b2NvbCsiLy8iK3AuaG9zdCl9O2gmJnZ8fChoPWZ1bmN0aW9uKHQpe2Zvcih2YXIgZT1bXSxuPTE7YXJndW1lbnRzLmxlbmd0aD5uOyllLnB1c2goYXJndW1lbnRzW24rK10pO3JldHVybiB4WysrYl09ZnVuY3Rpb24oKXsoImZ1bmN0aW9uIj09dHlwZW9mIHQ/dDpGdW5jdGlvbih0KSkuYXBwbHkodm9pZCAwLGUpfSxyKGIpLGJ9LHY9ZnVuY3Rpb24odCl7ZGVsZXRlIHhbdF19LCJwcm9jZXNzIj09cyhnKT9yPWZ1bmN0aW9uKHQpe2cubmV4dFRpY2soaih0KSl9Om0mJm0ubm93P3I9ZnVuY3Rpb24odCl7bS5ub3coaih0KSl9OnkmJiFkPyhpPShvPW5ldyB5KS5wb3J0MixvLnBvcnQxLm9ubWVzc2FnZT1DLHI9dShpLnBvc3RNZXNzYWdlLGksMSkpOiFhLmFkZEV2ZW50TGlzdGVuZXJ8fCJmdW5jdGlvbiIhPXR5cGVvZiBwb3N0TWVzc2FnZXx8YS5pbXBvcnRTY3JpcHRzfHxjKGspP3I9dyBpbiBmKCJzY3JpcHQiKT9mdW5jdGlvbih0KXtsLmFwcGVuZENoaWxkKGYoInNjcmlwdCIpKS5vbnJlYWR5c3RhdGVjaGFuZ2U9ZnVuY3Rpb24oKXtsLnJlbW92ZUNoaWxkKHRoaXMpLEUodCl9fTpmdW5jdGlvbih0KXtzZXRUaW1lb3V0KGoodCksMCl9OihyPWssYS5hZGRFdmVudExpc3RlbmVyKCJtZXNzYWdlIixDLCExKSkpLHQuZXhwb3J0cz17c2V0OmgsY2xlYXI6dn19LDUzOTk3OmZ1bmN0aW9uKHQsZSxuKXt2YXIgcj1uKDI0NTk0KTt0LmV4cG9ydHM9ZnVuY3Rpb24odCl7aWYoIm51bWJlciIhPXR5cGVvZiB0JiYiTnVtYmVyIiE9cih0KSl0aHJvdyBUeXBlRXJyb3IoIkluY29ycmVjdCBpbnZvY2F0aW9uIik7cmV0dXJuK3R9fSw3Njk3NjpmdW5jdGlvbih0LGUsbil7dmFyIHI9big0MzQxNiksbz1NYXRoLm1heCxpPU1hdGgubWluO3QuZXhwb3J0cz1mdW5jdGlvbih0LGUpe3ZhciBuPXIodCk7cmV0dXJuIG48MD9vKG4rZSwwKTppKG4sZSl9fSw4MzkxNDpmdW5jdGlvbih0LGUsbil7dmFyIHI9big0MzQxNiksbz1uKDI3ODg0KTt0LmV4cG9ydHM9ZnVuY3Rpb24odCl7aWYodm9pZCAwPT09dClyZXR1cm4gMDt2YXIgZT1yKHQpLG49byhlKTtpZihlIT09bil0aHJvdyBSYW5nZUVycm9yKCJXcm9uZyBsZW5ndGggb3IgaW5kZXgiKTtyZXR1cm4gbn19LDk1NzM6ZnVuY3Rpb24odCxlLG4pe3ZhciByPW4oMjQ5OCksbz1uKDcwMTMyKTt0LmV4cG9ydHM9ZnVuY3Rpb24odCl7cmV0dXJuIHIobyh0KSl9fSw0MzQxNjpmdW5jdGlvbih0KXt2YXIgZT1NYXRoLmNlaWwsbj1NYXRoLmZsb29yO3QuZXhwb3J0cz1mdW5jdGlvbih0KXtyZXR1cm4gaXNOYU4odD0rdCk/MDoodD4wP246ZSkodCl9fSwyNzg4NDpmdW5jdGlvbih0LGUsbil7dmFyIHI9big0MzQxNiksbz1NYXRoLm1pbjt0LmV4cG9ydHM9ZnVuY3Rpb24odCl7cmV0dXJuIHQ+MD9vKHIodCksOTAwNzE5OTI1NDc0MDk5MSk6MH19LDE5MjA5OmZ1bmN0aW9uKHQsZSxuKXt2YXIgcj1uKDcwMTMyKTt0LmV4cG9ydHM9ZnVuY3Rpb24odCl7cmV0dXJuIE9iamVjdChyKHQpKX19LDYwNTU4OmZ1bmN0aW9uKHQsZSxuKXt2YXIgcj1uKDQ1NjgwKTt0LmV4cG9ydHM9ZnVuY3Rpb24odCxlKXt2YXIgbj1yKHQpO2lmKG4lZSl0aHJvdyBSYW5nZUVycm9yKCJXcm9uZyBvZmZzZXQiKTtyZXR1cm4gbn19LDQ1NjgwOmZ1bmN0aW9uKHQsZSxuKXt2YXIgcj1uKDQzNDE2KTt0LmV4cG9ydHM9ZnVuY3Rpb24odCl7dmFyIGU9cih0KTtpZihlPDApdGhyb3cgUmFuZ2VFcnJvcigiVGhlIGFyZ3VtZW50IGNhbid0IGJlIGxlc3MgdGhhbiAwIik7cmV0dXJuIGV9fSw1MzQ5ODpmdW5jdGlvbih0LGUsbil7dmFyIHI9bigxMDU5Mik7dC5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7aWYoIXIodCkpcmV0dXJuIHQ7dmFyIG4sbztpZihlJiYiZnVuY3Rpb24iPT10eXBlb2Yobj10LnRvU3RyaW5nKSYmIXIobz1uLmNhbGwodCkpKXJldHVybiBvO2lmKCJmdW5jdGlvbiI9PXR5cGVvZihuPXQudmFsdWVPZikmJiFyKG89bi5jYWxsKHQpKSlyZXR1cm4gbztpZighZSYmImZ1bmN0aW9uIj09dHlwZW9mKG49dC50b1N0cmluZykmJiFyKG89bi5jYWxsKHQpKSlyZXR1cm4gbzt0aHJvdyBUeXBlRXJyb3IoIkNhbid0IGNvbnZlcnQgb2JqZWN0IHRvIHByaW1pdGl2ZSB2YWx1ZSIpfX0sOTA2MTM6ZnVuY3Rpb24odCxlLG4pe3ZhciByPXt9O3JbbigyMzcyNCkoInRvU3RyaW5nVGFnIildPSJ6Iix0LmV4cG9ydHM9IltvYmplY3Qgel0iPT09U3RyaW5nKHIpfSw5MzAxNzpmdW5jdGlvbih0LGUsbil7InVzZSBzdHJpY3QiO3ZhciByPW4oMTQwNDQpLG89big4OTU1OCksaT1uKDYyNTU2KSxhPW4oMzU2MjcpLGM9big3MzA3NCkscz1uKDgyODM1KSx1PW4oNTkzNzkpLGw9bigxNDIwOSksZj1uKDY2OTcxKSxkPW4oMjc4ODQpLHA9big4MzkxNCksaD1uKDYwNTU4KSx2PW4oNTM0OTgpLGc9big3NjI5OCkseT1uKDU5NTkxKSxtPW4oMTA1OTIpLGI9big1MDg2OCkseD1uKDcxODQyKSx3PW4oMTMzMzQpLmYsRT1uKDIwNDU1KSxqPW4oMzAwMjUpLmZvckVhY2gsQz1uKDY3NTM4KSxrPW4oMzc2MjApLFM9big5NzI1NyksTz1uKDg5ODI3KSxJPW4oMzAyNzIpLEE9Ty5nZXQsVD1PLnNldCxNPWsuZixfPVMuZixMPU1hdGgucm91bmQsUj1vLlJhbmdlRXJyb3IsUD1zLkFycmF5QnVmZmVyLE49cy5EYXRhVmlldyxEPWMuTkFUSVZFX0FSUkFZX0JVRkZFUl9WSUVXUyxGPWMuVFlQRURfQVJSQVlfVEFHLFU9Yy5UeXBlZEFycmF5LEI9Yy5UeXBlZEFycmF5UHJvdG90eXBlLHo9Yy5hVHlwZWRBcnJheUNvbnN0cnVjdG9yLFY9Yy5pc1R5cGVkQXJyYXksSD0iQllURVNfUEVSX0VMRU1FTlQiLHE9Ildyb25nIGxlbmd0aCIsVz1mdW5jdGlvbih0LGUpe2Zvcih2YXIgbj0wLHI9ZS5sZW5ndGgsbz1uZXcoeih0KSkocik7cj5uOylvW25dPWVbbisrXTtyZXR1cm4gb30sRz1mdW5jdGlvbih0LGUpe00odCxlLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gQSh0aGlzKVtlXX19KX0sWj1mdW5jdGlvbih0KXt2YXIgZTtyZXR1cm4gdCBpbnN0YW5jZW9mIFB8fCJBcnJheUJ1ZmZlciI9PShlPXkodCkpfHwiU2hhcmVkQXJyYXlCdWZmZXIiPT1lfSwkPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIFYodCkmJiJzeW1ib2wiIT10eXBlb2YgZSYmZSBpbiB0JiZTdHJpbmcoK2UpPT1TdHJpbmcoZSl9LFk9ZnVuY3Rpb24odCxlKXtyZXR1cm4gJCh0LGU9dihlLCEwKSk/bCgyLHRbZV0pOl8odCxlKX0sSz1mdW5jdGlvbih0LGUsbil7cmV0dXJuISgkKHQsZT12KGUsITApKSYmbShuKSYmZyhuLCJ2YWx1ZSIpKXx8ZyhuLCJnZXQiKXx8ZyhuLCJzZXQiKXx8bi5jb25maWd1cmFibGV8fGcobiwid3JpdGFibGUiKSYmIW4ud3JpdGFibGV8fGcobiwiZW51bWVyYWJsZSIpJiYhbi5lbnVtZXJhYmxlP00odCxlLG4pOih0W2VdPW4udmFsdWUsdCl9O2k/KER8fChTLmY9WSxrLmY9SyxHKEIsImJ1ZmZlciIpLEcoQiwiYnl0ZU9mZnNldCIpLEcoQiwiYnl0ZUxlbmd0aCIpLEcoQiwibGVuZ3RoIikpLHIoe3RhcmdldDoiT2JqZWN0IixzdGF0OiEwLGZvcmNlZDohRH0se2dldE93blByb3BlcnR5RGVzY3JpcHRvcjpZLGRlZmluZVByb3BlcnR5Okt9KSx0LmV4cG9ydHM9ZnVuY3Rpb24odCxlLG4pe3ZhciBpPXQubWF0Y2goL1xkKyQvKVswXS84LGM9dCsobj8iQ2xhbXBlZCI6IiIpKyJBcnJheSIscz0iZ2V0Iit0LGw9InNldCIrdCx2PW9bY10sZz12LHk9ZyYmZy5wcm90b3R5cGUsaz17fSxTPWZ1bmN0aW9uKHQsZSl7TSh0LGUse2dldDpmdW5jdGlvbigpe3JldHVybiBmdW5jdGlvbih0LGUpe3ZhciBuPUEodCk7cmV0dXJuIG4udmlld1tzXShlKmkrbi5ieXRlT2Zmc2V0LCEwKX0odGhpcyxlKX0sc2V0OmZ1bmN0aW9uKHQpe3JldHVybiBmdW5jdGlvbih0LGUscil7dmFyIG89QSh0KTtuJiYocj0ocj1MKHIpKTwwPzA6cj4yNTU/MjU1OjI1NSZyKSxvLnZpZXdbbF0oZSppK28uYnl0ZU9mZnNldCxyLCEwKX0odGhpcyxlLHQpfSxlbnVtZXJhYmxlOiEwfSl9O0Q/YSYmKGc9ZSgoZnVuY3Rpb24odCxlLG4scil7cmV0dXJuIHUodCxnLGMpLEkobShlKT9aKGUpP3ZvaWQgMCE9PXI/bmV3IHYoZSxoKG4saSkscik6dm9pZCAwIT09bj9uZXcgdihlLGgobixpKSk6bmV3IHYoZSk6VihlKT9XKGcsZSk6RS5jYWxsKGcsZSk6bmV3IHYocChlKSksdCxnKX0pKSx4JiZ4KGcsVSksaih3KHYpLChmdW5jdGlvbih0KXt0IGluIGd8fGYoZyx0LHZbdF0pfSkpLGcucHJvdG90eXBlPXkpOihnPWUoKGZ1bmN0aW9uKHQsZSxuLHIpe3UodCxnLGMpO3ZhciBvLGEscyxsPTAsZj0wO2lmKG0oZSkpe2lmKCFaKGUpKXJldHVybiBWKGUpP1coZyxlKTpFLmNhbGwoZyxlKTtvPWUsZj1oKG4saSk7dmFyIHY9ZS5ieXRlTGVuZ3RoO2lmKHZvaWQgMD09PXIpe2lmKHYlaSl0aHJvdyBSKHEpO2lmKChhPXYtZik8MCl0aHJvdyBSKHEpfWVsc2UgaWYoKGE9ZChyKSppKStmPnYpdGhyb3cgUihxKTtzPWEvaX1lbHNlIHM9cChlKSxvPW5ldyBQKGE9cyppKTtmb3IoVCh0LHtidWZmZXI6byxieXRlT2Zmc2V0OmYsYnl0ZUxlbmd0aDphLGxlbmd0aDpzLHZpZXc6bmV3IE4obyl9KTtsPHM7KVModCxsKyspfSkpLHgmJngoZyxVKSx5PWcucHJvdG90eXBlPWIoQikpLHkuY29uc3RydWN0b3IhPT1nJiZmKHksImNvbnN0cnVjdG9yIixnKSxGJiZmKHksRixjKSxrW2NdPWcscih7Z2xvYmFsOiEwLGZvcmNlZDpnIT12LHNoYW06IUR9LGspLEggaW4gZ3x8ZihnLEgsaSksSCBpbiB5fHxmKHksSCxpKSxDKGMpfSk6dC5leHBvcnRzPWZ1bmN0aW9uKCl7fX0sMjA0NTU6ZnVuY3Rpb24odCxlLG4pe3ZhciByPW4oMTkyMDkpLG89bigyNzg4NCksaT1uKDczODkwKSxhPW4oNDQ5ODQpLGM9big0NjEzMCkscz1uKDczMDc0KS5hVHlwZWRBcnJheUNvbnN0cnVjdG9yO3QuZXhwb3J0cz1mdW5jdGlvbih0KXt2YXIgZSxuLHUsbCxmLGQscD1yKHQpLGg9YXJndW1lbnRzLmxlbmd0aCx2PWg+MT9hcmd1bWVudHNbMV06dm9pZCAwLGc9dm9pZCAwIT09dix5PWkocCk7aWYobnVsbCE9eSYmIWEoeSkpZm9yKGQ9KGY9eS5jYWxsKHApKS5uZXh0LHA9W107IShsPWQuY2FsbChmKSkuZG9uZTspcC5wdXNoKGwudmFsdWUpO2ZvcihnJiZoPjImJih2PWModixhcmd1bWVudHNbMl0sMikpLG49byhwLmxlbmd0aCksdT1uZXcocyh0aGlzKSkobiksZT0wO24+ZTtlKyspdVtlXT1nP3YocFtlXSxlKTpwW2VdO3JldHVybiB1fX0sMzU2Mjc6ZnVuY3Rpb24odCxlLG4pe3ZhciByPW4oODk1NTgpLG89bigzMjE4NyksaT1uKDQ3OTYpLGE9big3MzA3NCkuTkFUSVZFX0FSUkFZX0JVRkZFUl9WSUVXUyxjPXIuQXJyYXlCdWZmZXIscz1yLkludDhBcnJheTt0LmV4cG9ydHM9IWF8fCFvKChmdW5jdGlvbigpe3MoMSl9KSl8fCFvKChmdW5jdGlvbigpe25ldyBzKC0xKX0pKXx8IWkoKGZ1bmN0aW9uKHQpe25ldyBzLG5ldyBzKG51bGwpLG5ldyBzKDEuNSksbmV3IHModCl9KSwhMCl8fG8oKGZ1bmN0aW9uKCl7cmV0dXJuIDEhPT1uZXcgcyhuZXcgYygyKSwxLHZvaWQgMCkubGVuZ3RofSkpfSw2NzI5OmZ1bmN0aW9uKHQpe3ZhciBlPTAsbj1NYXRoLnJhbmRvbSgpO3QuZXhwb3J0cz1mdW5jdGlvbih0KXtyZXR1cm4iU3ltYm9sKCIrU3RyaW5nKHZvaWQgMD09PXQ/IiI6dCkrIilfIisoKytlK24pLnRvU3RyaW5nKDM2KX19LDE2NDEwOmZ1bmN0aW9uKHQsZSxuKXt2YXIgcj1uKDkwMTQpO3QuZXhwb3J0cz1yJiYhU3ltYm9sLnNoYW0mJiJzeW1ib2wiPT10eXBlb2YgU3ltYm9sKCl9LDM5NDc2OmZ1bmN0aW9uKHQsZSxuKXt2YXIgcj1uKDc3MDEpO3QuZXhwb3J0cz1yKCJuYXZpZ2F0b3IiLCJ1c2VyQWdlbnQiKXx8IiJ9LDc5MDcxOmZ1bmN0aW9uKHQsZSxuKXt2YXIgcixvLGk9big4OTU1OCksYT1uKDM5NDc2KSxjPWkucHJvY2VzcyxzPWMmJmMudmVyc2lvbnMsdT1zJiZzLnY4O3U/bz0ocj11LnNwbGl0KCIuIikpWzBdK3JbMV06YSYmKCEocj1hLm1hdGNoKC9FZGdlXC8oXGQrKS8pKXx8clsxXT49NzQpJiYocj1hLm1hdGNoKC9DaHJvbWVcLyhcZCspLykpJiYobz1yWzFdKSx0LmV4cG9ydHM9byYmK299LDQyMTg0OmZ1bmN0aW9uKHQsZSxuKXt2YXIgcj1uKDM5NDc2KTt0LmV4cG9ydHM9L1ZlcnNpb25cLzEwXC5cZCsoXC5cZCspPyggTW9iaWxlXC9cdyspPyBTYWZhcmlcLy8udGVzdChyKX0sMjM3MjQ6ZnVuY3Rpb24odCxlLG4pe3ZhciByPW4oODk1NTgpLG89big2MjA1NCksaT1uKDc2Mjk4KSxhPW4oNjcyOSksYz1uKDkwMTQpLHM9bigxNjQxMCksdT1vKCJ3a3MiKSxsPXIuU3ltYm9sLGY9cz9sOmE7dC5leHBvcnRzPWZ1bmN0aW9uKHQpe3JldHVybiBpKHUsdCl8fChjJiZpKGwsdCk/dVt0XT1sW3RdOnVbdF09ZigiU3ltYm9sLiIrdCkpLHVbdF19fSw1MDA1NTpmdW5jdGlvbih0KXt0LmV4cG9ydHM9Ilx0XG5cdlxmXHIgwqDhmoDigIDigIHigILigIPigITigIXigIbigIfigIjigInigIrigK/igZ/jgIBcdTIwMjhcdTIwMjlcdWZlZmYifSw3MzkxNjpmdW5jdGlvbih0LGUsbil7dmFyIHI9bigyMzcyNCk7ZS5mPXJ9LDYxMjQ1OmZ1bmN0aW9uKHQsZSxuKXsidXNlIHN0cmljdCI7dmFyIHI9bigxNDA0NCksbz1uKDg5NTU4KSxpPW4oODI4MzUpLGE9big2NzUzOCksYz0iQXJyYXlCdWZmZXIiLHM9aS5BcnJheUJ1ZmZlcjtyKHtnbG9iYWw6ITAsZm9yY2VkOm8uQXJyYXlCdWZmZXIhPT1zfSx7QXJyYXlCdWZmZXI6c30pLGEoYyl9LDI5MjczOmZ1bmN0aW9uKHQsZSxuKXt2YXIgcj1uKDE0MDQ0KSxvPW4oNzMwNzQpO3Ioe3RhcmdldDoiQXJyYXlCdWZmZXIiLHN0YXQ6ITAsZm9yY2VkOiFvLk5BVElWRV9BUlJBWV9CVUZGRVJfVklFV1N9LHtpc1ZpZXc6by5pc1ZpZXd9KX0sOTA1NjA6ZnVuY3Rpb24odCxlLG4peyJ1c2Ugc3RyaWN0Ijt2YXIgcj1uKDE0MDQ0KSxvPW4oMzIxODcpLGk9big4MjgzNSksYT1uKDg3NTc5KSxjPW4oNzY5NzYpLHM9bigyNzg4NCksdT1uKDEzOTc5KSxsPWkuQXJyYXlCdWZmZXIsZj1pLkRhdGFWaWV3LGQ9bC5wcm90b3R5cGUuc2xpY2U7cih7dGFyZ2V0OiJBcnJheUJ1ZmZlciIscHJvdG86ITAsdW5zYWZlOiEwLGZvcmNlZDpvKChmdW5jdGlvbigpe3JldHVybiFuZXcgbCgyKS5zbGljZSgxLHZvaWQgMCkuYnl0ZUxlbmd0aH0pKX0se3NsaWNlOmZ1bmN0aW9uKHQsZSl7aWYodm9pZCAwIT09ZCYmdm9pZCAwPT09ZSlyZXR1cm4gZC5jYWxsKGEodGhpcyksdCk7Zm9yKHZhciBuPWEodGhpcykuYnl0ZUxlbmd0aCxyPWModCxuKSxvPWModm9pZCAwPT09ZT9uOmUsbiksaT1uZXcodSh0aGlzLGwpKShzKG8tcikpLHA9bmV3IGYodGhpcyksaD1uZXcgZihpKSx2PTA7cjxvOyloLnNldFVpbnQ4KHYrKyxwLmdldFVpbnQ4KHIrKykpO3JldHVybiBpfX0pfSw1NzM4NzpmdW5jdGlvbih0LGUsbil7InVzZSBzdHJpY3QiO3ZhciByPW4oMTQwNDQpLG89bigzMjE4NyksaT1uKDYxOTkpLGE9bigxMDU5MiksYz1uKDE5MjA5KSxzPW4oMjc4ODQpLHU9big1ODgxMCksbD1uKDcwMDkpLGY9big2MTk2MyksZD1uKDIzNzI0KSxwPW4oNzkwNzEpLGg9ZCgiaXNDb25jYXRTcHJlYWRhYmxlIiksdj05MDA3MTk5MjU0NzQwOTkxLGc9Ik1heGltdW0gYWxsb3dlZCBpbmRleCBleGNlZWRlZCIseT1wPj01MXx8IW8oKGZ1bmN0aW9uKCl7dmFyIHQ9W107cmV0dXJuIHRbaF09ITEsdC5jb25jYXQoKVswXSE9PXR9KSksbT1mKCJjb25jYXQiKSxiPWZ1bmN0aW9uKHQpe2lmKCFhKHQpKXJldHVybiExO3ZhciBlPXRbaF07cmV0dXJuIHZvaWQgMCE9PWU/ISFlOmkodCl9O3Ioe3RhcmdldDoiQXJyYXkiLHByb3RvOiEwLGZvcmNlZDoheXx8IW19LHtjb25jYXQ6ZnVuY3Rpb24odCl7dmFyIGUsbixyLG8saSxhPWModGhpcyksZj1sKGEsMCksZD0wO2ZvcihlPS0xLHI9YXJndW1lbnRzLmxlbmd0aDtlPHI7ZSsrKWlmKGIoaT0tMT09PWU/YTphcmd1bWVudHNbZV0pKXtpZihkKyhvPXMoaS5sZW5ndGgpKT52KXRocm93IFR5cGVFcnJvcihnKTtmb3Iobj0wO248bztuKyssZCsrKW4gaW4gaSYmdShmLGQsaVtuXSl9ZWxzZXtpZihkPj12KXRocm93IFR5cGVFcnJvcihnKTt1KGYsZCsrLGkpfXJldHVybiBmLmxlbmd0aD1kLGZ9fSl9LDMwODE3OmZ1bmN0aW9uKHQsZSxuKXt2YXIgcj1uKDE0MDQ0KSxvPW4oOTk0MzEpLGk9big3NjUxMyk7cih7dGFyZ2V0OiJBcnJheSIscHJvdG86ITB9LHtjb3B5V2l0aGluOm99KSxpKCJjb3B5V2l0aGluIil9LDUyMDU1OmZ1bmN0aW9uKHQsZSxuKXsidXNlIHN0cmljdCI7dmFyIHI9bigxNDA0NCksbz1uKDMwMDI1KS5ldmVyeTtyKHt0YXJnZXQ6IkFycmF5Iixwcm90bzohMCxmb3JjZWQ6bigyMjkwOSkoImV2ZXJ5Iil9LHtldmVyeTpmdW5jdGlvbih0KXtyZXR1cm4gbyh0aGlzLHQsYXJndW1lbnRzLmxlbmd0aD4xP2FyZ3VtZW50c1sxXTp2b2lkIDApfX0pfSw3MzM2MDpmdW5jdGlvbih0LGUsbil7dmFyIHI9bigxNDA0NCksbz1uKDY1ODk1KSxpPW4oNzY1MTMpO3Ioe3RhcmdldDoiQXJyYXkiLHByb3RvOiEwfSx7ZmlsbDpvfSksaSgiZmlsbCIpfSw0NzUwMjpmdW5jdGlvbih0LGUsbil7InVzZSBzdHJpY3QiO3ZhciByPW4oMTQwNDQpLG89bigzMDAyNSkuZmlsdGVyLGk9bigzMjE4NyksYT1uKDYxOTYzKSgiZmlsdGVyIiksYz1hJiYhaSgoZnVuY3Rpb24oKXtbXS5maWx0ZXIuY2FsbCh7bGVuZ3RoOi0xLDA6MX0sKGZ1bmN0aW9uKHQpe3Rocm93IHR9KSl9KSk7cih7dGFyZ2V0OiJBcnJheSIscHJvdG86ITAsZm9yY2VkOiFhfHwhY30se2ZpbHRlcjpmdW5jdGlvbih0KXtyZXR1cm4gbyh0aGlzLHQsYXJndW1lbnRzLmxlbmd0aD4xP2FyZ3VtZW50c1sxXTp2b2lkIDApfX0pfSw5MDkxMjpmdW5jdGlvbih0LGUsbil7InVzZSBzdHJpY3QiO3ZhciByPW4oMTQwNDQpLG89bigzMDAyNSkuZmluZEluZGV4LGk9big3NjUxMyksYT0iZmluZEluZGV4IixjPSEwO2EgaW5bXSYmQXJyYXkoMSkuZmluZEluZGV4KChmdW5jdGlvbigpe2M9ITF9KSkscih7dGFyZ2V0OiJBcnJheSIscHJvdG86ITAsZm9yY2VkOmN9LHtmaW5kSW5kZXg6ZnVuY3Rpb24odCl7cmV0dXJuIG8odGhpcyx0LGFyZ3VtZW50cy5sZW5ndGg+MT9hcmd1bWVudHNbMV06dm9pZCAwKX19KSxpKGEpfSwzMzE5NTpmdW5jdGlvbih0LGUsbil7InVzZSBzdHJpY3QiO3ZhciByPW4oMTQwNDQpLG89bigzMDAyNSkuZmluZCxpPW4oNzY1MTMpLGE9ImZpbmQiLGM9ITA7YSBpbltdJiZBcnJheSgxKS5maW5kKChmdW5jdGlvbigpe2M9ITF9KSkscih7dGFyZ2V0OiJBcnJheSIscHJvdG86ITAsZm9yY2VkOmN9LHtmaW5kOmZ1bmN0aW9uKHQpe3JldHVybiBvKHRoaXMsdCxhcmd1bWVudHMubGVuZ3RoPjE/YXJndW1lbnRzWzFdOnZvaWQgMCl9fSksaShhKX0sNzkyMjc6ZnVuY3Rpb24odCxlLG4peyJ1c2Ugc3RyaWN0Ijt2YXIgcj1uKDE0MDQ0KSxvPW4oODA2NjUpLGk9bigxOTIwOSksYT1uKDI3ODg0KSxjPW4oODY0NzApLHM9big3MDA5KTtyKHt0YXJnZXQ6IkFycmF5Iixwcm90bzohMH0se2ZsYXRNYXA6ZnVuY3Rpb24odCl7dmFyIGUsbj1pKHRoaXMpLHI9YShuLmxlbmd0aCk7cmV0dXJuIGModCksKGU9cyhuLDApKS5sZW5ndGg9byhlLG4sbixyLDAsMSx0LGFyZ3VtZW50cy5sZW5ndGg+MT9hcmd1bWVudHNbMV06dm9pZCAwKSxlfX0pfSwyODIwMzpmdW5jdGlvbih0LGUsbil7InVzZSBzdHJpY3QiO3ZhciByPW4oMTQwNDQpLG89big4MDY2NSksaT1uKDE5MjA5KSxhPW4oMjc4ODQpLGM9big0MzQxNikscz1uKDcwMDkpO3Ioe3RhcmdldDoiQXJyYXkiLHByb3RvOiEwfSx7ZmxhdDpmdW5jdGlvbigpe3ZhciB0PWFyZ3VtZW50cy5sZW5ndGg/YXJndW1lbnRzWzBdOnZvaWQgMCxlPWkodGhpcyksbj1hKGUubGVuZ3RoKSxyPXMoZSwwKTtyZXR1cm4gci5sZW5ndGg9byhyLGUsZSxuLDAsdm9pZCAwPT09dD8xOmModCkpLHJ9fSl9LDQzNTkxOmZ1bmN0aW9uKHQsZSxuKXsidXNlIHN0cmljdCI7dmFyIHI9bigxNDA0NCksbz1uKDMxMzY4KTtyKHt0YXJnZXQ6IkFycmF5Iixwcm90bzohMCxmb3JjZWQ6W10uZm9yRWFjaCE9b30se2ZvckVhY2g6b30pfSw3NDUzODpmdW5jdGlvbih0LGUsbil7dmFyIHI9bigxNDA0NCksbz1uKDg1MTY2KTtyKHt0YXJnZXQ6IkFycmF5IixzdGF0OiEwLGZvcmNlZDohbig0Nzk2KSgoZnVuY3Rpb24odCl7QXJyYXkuZnJvbSh0KX0pKX0se2Zyb206b30pfSwyMjI3NzpmdW5jdGlvbih0LGUsbil7InVzZSBzdHJpY3QiO3ZhciByPW4oMTQwNDQpLG89big4NTgwMykuaW5jbHVkZXMsaT1uKDc2NTEzKTtyKHt0YXJnZXQ6IkFycmF5Iixwcm90bzohMH0se2luY2x1ZGVzOmZ1bmN0aW9uKHQpe3JldHVybiBvKHRoaXMsdCxhcmd1bWVudHMubGVuZ3RoPjE/YXJndW1lbnRzWzFdOnZvaWQgMCl9fSksaSgiaW5jbHVkZXMiKX0sMjQxMjk6ZnVuY3Rpb24odCxlLG4peyJ1c2Ugc3RyaWN0Ijt2YXIgcj1uKDE0MDQ0KSxvPW4oODU4MDMpLmluZGV4T2YsaT1uKDIyOTA5KSxhPVtdLmluZGV4T2YsYz0hIWEmJjEvWzFdLmluZGV4T2YoMSwtMCk8MCxzPWkoImluZGV4T2YiKTtyKHt0YXJnZXQ6IkFycmF5Iixwcm90bzohMCxmb3JjZWQ6Y3x8c30se2luZGV4T2Y6ZnVuY3Rpb24odCl7cmV0dXJuIGM/YS5hcHBseSh0aGlzLGFyZ3VtZW50cyl8fDA6byh0aGlzLHQsYXJndW1lbnRzLmxlbmd0aD4xP2FyZ3VtZW50c1sxXTp2b2lkIDApfX0pfSwyMTI3OmZ1bmN0aW9uKHQsZSxuKXtuKDE0MDQ0KSh7dGFyZ2V0OiJBcnJheSIsc3RhdDohMH0se2lzQXJyYXk6big2MTk5KX0pfSw1MDA2MzpmdW5jdGlvbih0LGUsbil7InVzZSBzdHJpY3QiO3ZhciByPW4oOTU3Myksbz1uKDc2NTEzKSxpPW4oMTIzNSksYT1uKDg5ODI3KSxjPW4oNDYwNjEpLHM9IkFycmF5IEl0ZXJhdG9yIix1PWEuc2V0LGw9YS5nZXR0ZXJGb3Iocyk7dC5leHBvcnRzPWMoQXJyYXksIkFycmF5IiwoZnVuY3Rpb24odCxlKXt1KHRoaXMse3R5cGU6cyx0YXJnZXQ6cih0KSxpbmRleDowLGtpbmQ6ZX0pfSksKGZ1bmN0aW9uKCl7dmFyIHQ9bCh0aGlzKSxlPXQudGFyZ2V0LG49dC5raW5kLHI9dC5pbmRleCsrO3JldHVybiFlfHxyPj1lLmxlbmd0aD8odC50YXJnZXQ9dm9pZCAwLHt2YWx1ZTp2b2lkIDAsZG9uZTohMH0pOiJrZXlzIj09bj97dmFsdWU6cixkb25lOiExfToidmFsdWVzIj09bj97dmFsdWU6ZVtyXSxkb25lOiExfTp7dmFsdWU6W3IsZVtyXV0sZG9uZTohMX19KSwidmFsdWVzIiksaS5Bcmd1bWVudHM9aS5BcnJheSxvKCJrZXlzIiksbygidmFsdWVzIiksbygiZW50cmllcyIpfSw3NDEyMDpmdW5jdGlvbih0LGUsbil7InVzZSBzdHJpY3QiO3ZhciByPW4oMTQwNDQpLG89bigyNDk4KSxpPW4oOTU3MyksYT1uKDIyOTA5KSxjPVtdLmpvaW4scz1vIT1PYmplY3QsdT1hKCJqb2luIiwiLCIpO3Ioe3RhcmdldDoiQXJyYXkiLHByb3RvOiEwLGZvcmNlZDpzfHx1fSx7am9pbjpmdW5jdGlvbih0KXtyZXR1cm4gYy5jYWxsKGkodGhpcyksdm9pZCAwPT09dD8iLCI6dCl9fSl9LDk0OTYzOmZ1bmN0aW9uKHQsZSxuKXt2YXIgcj1uKDE0MDQ0KSxvPW4oNDkyNDkpO3Ioe3RhcmdldDoiQXJyYXkiLHByb3RvOiEwLGZvcmNlZDpvIT09W10ubGFzdEluZGV4T2Z9LHtsYXN0SW5kZXhPZjpvfSl9LDI3Mzg4OmZ1bmN0aW9uKHQsZSxuKXsidXNlIHN0cmljdCI7dmFyIHI9bigxNDA0NCksbz1uKDMwMDI1KS5tYXAsaT1uKDMyMTg3KSxhPW4oNjE5NjMpKCJtYXAiKSxjPWEmJiFpKChmdW5jdGlvbigpe1tdLm1hcC5jYWxsKHtsZW5ndGg6LTEsMDoxfSwoZnVuY3Rpb24odCl7dGhyb3cgdH0pKX0pKTtyKHt0YXJnZXQ6IkFycmF5Iixwcm90bzohMCxmb3JjZWQ6IWF8fCFjfSx7bWFwOmZ1bmN0aW9uKHQpe3JldHVybiBvKHRoaXMsdCxhcmd1bWVudHMubGVuZ3RoPjE/YXJndW1lbnRzWzFdOnZvaWQgMCl9fSl9LDY5OTg4OmZ1bmN0aW9uKHQsZSxuKXsidXNlIHN0cmljdCI7dmFyIHI9bigxNDA0NCksbz1uKDMyMTg3KSxpPW4oNTg4MTApO3Ioe3RhcmdldDoiQXJyYXkiLHN0YXQ6ITAsZm9yY2VkOm8oKGZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCgpe31yZXR1cm4hKEFycmF5Lm9mLmNhbGwodClpbnN0YW5jZW9mIHQpfSkpfSx7b2Y6ZnVuY3Rpb24oKXtmb3IodmFyIHQ9MCxlPWFyZ3VtZW50cy5sZW5ndGgsbj1uZXcoImZ1bmN0aW9uIj09dHlwZW9mIHRoaXM/dGhpczpBcnJheSkoZSk7ZT50OylpKG4sdCxhcmd1bWVudHNbdCsrXSk7cmV0dXJuIG4ubGVuZ3RoPWUsbn19KX0sNDU1Mjg6ZnVuY3Rpb24odCxlLG4peyJ1c2Ugc3RyaWN0Ijt2YXIgcj1uKDE0MDQ0KSxvPW4oMTIzNjYpLnJpZ2h0O3Ioe3RhcmdldDoiQXJyYXkiLHByb3RvOiEwLGZvcmNlZDpuKDIyOTA5KSgicmVkdWNlUmlnaHQiKX0se3JlZHVjZVJpZ2h0OmZ1bmN0aW9uKHQpe3JldHVybiBvKHRoaXMsdCxhcmd1bWVudHMubGVuZ3RoLGFyZ3VtZW50cy5sZW5ndGg+MT9hcmd1bWVudHNbMV06dm9pZCAwKX19KX0sODA1MjI6ZnVuY3Rpb24odCxlLG4peyJ1c2Ugc3RyaWN0Ijt2YXIgcj1uKDE0MDQ0KSxvPW4oMTIzNjYpLmxlZnQ7cih7dGFyZ2V0OiJBcnJheSIscHJvdG86ITAsZm9yY2VkOm4oMjI5MDkpKCJyZWR1Y2UiKX0se3JlZHVjZTpmdW5jdGlvbih0KXtyZXR1cm4gbyh0aGlzLHQsYXJndW1lbnRzLmxlbmd0aCxhcmd1bWVudHMubGVuZ3RoPjE/YXJndW1lbnRzWzFdOnZvaWQgMCl9fSl9LDgwMTE2OmZ1bmN0aW9uKHQsZSxuKXsidXNlIHN0cmljdCI7dmFyIHI9bigxNDA0NCksbz1uKDYxOTkpLGk9W10ucmV2ZXJzZSxhPVsxLDJdO3Ioe3RhcmdldDoiQXJyYXkiLHByb3RvOiEwLGZvcmNlZDpTdHJpbmcoYSk9PT1TdHJpbmcoYS5yZXZlcnNlKCkpfSx7cmV2ZXJzZTpmdW5jdGlvbigpe3JldHVybiBvKHRoaXMpJiYodGhpcy5sZW5ndGg9dGhpcy5sZW5ndGgpLGkuY2FsbCh0aGlzKX19KX0sMjkxMTA6ZnVuY3Rpb24odCxlLG4peyJ1c2Ugc3RyaWN0Ijt2YXIgcj1uKDE0MDQ0KSxvPW4oMTA1OTIpLGk9big2MTk5KSxhPW4oNzY5NzYpLGM9bigyNzg4NCkscz1uKDk1NzMpLHU9big1ODgxMCksbD1uKDYxOTYzKSxmPW4oMjM3MjQpKCJzcGVjaWVzIiksZD1bXS5zbGljZSxwPU1hdGgubWF4O3Ioe3RhcmdldDoiQXJyYXkiLHByb3RvOiEwLGZvcmNlZDohbCgic2xpY2UiKX0se3NsaWNlOmZ1bmN0aW9uKHQsZSl7dmFyIG4scixsLGg9cyh0aGlzKSx2PWMoaC5sZW5ndGgpLGc9YSh0LHYpLHk9YSh2b2lkIDA9PT1lP3Y6ZSx2KTtpZihpKGgpJiYoImZ1bmN0aW9uIiE9dHlwZW9mKG49aC5jb25zdHJ1Y3Rvcil8fG4hPT1BcnJheSYmIWkobi5wcm90b3R5cGUpP28obikmJm51bGw9PT0obj1uW2ZdKSYmKG49dm9pZCAwKTpuPXZvaWQgMCxuPT09QXJyYXl8fHZvaWQgMD09PW4pKXJldHVybiBkLmNhbGwoaCxnLHkpO2ZvcihyPW5ldyh2b2lkIDA9PT1uP0FycmF5Om4pKHAoeS1nLDApKSxsPTA7Zzx5O2crKyxsKyspZyBpbiBoJiZ1KHIsbCxoW2ddKTtyZXR1cm4gci5sZW5ndGg9bCxyfX0pfSw4NTU5NDpmdW5jdGlvbih0LGUsbil7InVzZSBzdHJpY3QiO3ZhciByPW4oMTQwNDQpLG89bigzMDAyNSkuc29tZTtyKHt0YXJnZXQ6IkFycmF5Iixwcm90bzohMCxmb3JjZWQ6bigyMjkwOSkoInNvbWUiKX0se3NvbWU6ZnVuY3Rpb24odCl7cmV0dXJuIG8odGhpcyx0LGFyZ3VtZW50cy5sZW5ndGg+MT9hcmd1bWVudHNbMV06dm9pZCAwKX19KX0sNjc4MTI6ZnVuY3Rpb24odCxlLG4peyJ1c2Ugc3RyaWN0Ijt2YXIgcj1uKDE0MDQ0KSxvPW4oODY0NzApLGk9bigxOTIwOSksYT1uKDMyMTg3KSxjPW4oMjI5MDkpLHM9W10sdT1zLnNvcnQsbD1hKChmdW5jdGlvbigpe3Muc29ydCh2b2lkIDApfSkpLGY9YSgoZnVuY3Rpb24oKXtzLnNvcnQobnVsbCl9KSksZD1jKCJzb3J0Iik7cih7dGFyZ2V0OiJBcnJheSIscHJvdG86ITAsZm9yY2VkOmx8fCFmfHxkfSx7c29ydDpmdW5jdGlvbih0KXtyZXR1cm4gdm9pZCAwPT09dD91LmNhbGwoaSh0aGlzKSk6dS5jYWxsKGkodGhpcyksbyh0KSl9fSl9LDg2MjE0OmZ1bmN0aW9uKHQsZSxuKXtuKDY3NTM4KSgiQXJyYXkiKX0sMzM3OTI6ZnVuY3Rpb24odCxlLG4peyJ1c2Ugc3RyaWN0Ijt2YXIgcj1uKDE0MDQ0KSxvPW4oNzY5NzYpLGk9big0MzQxNiksYT1uKDI3ODg0KSxjPW4oMTkyMDkpLHM9big3MDA5KSx1PW4oNTg4MTApLGw9big2MTk2MyksZj1NYXRoLm1heCxkPU1hdGgubWluLHA9OTAwNzE5OTI1NDc0MDk5MSxoPSJNYXhpbXVtIGFsbG93ZWQgbGVuZ3RoIGV4Y2VlZGVkIjtyKHt0YXJnZXQ6IkFycmF5Iixwcm90bzohMCxmb3JjZWQ6IWwoInNwbGljZSIpfSx7c3BsaWNlOmZ1bmN0aW9uKHQsZSl7dmFyIG4scixsLHYsZyx5LG09Yyh0aGlzKSxiPWEobS5sZW5ndGgpLHg9byh0LGIpLHc9YXJndW1lbnRzLmxlbmd0aDtpZigwPT09dz9uPXI9MDoxPT09dz8obj0wLHI9Yi14KToobj13LTIscj1kKGYoaShlKSwwKSxiLXgpKSxiK24tcj5wKXRocm93IFR5cGVFcnJvcihoKTtmb3IobD1zKG0sciksdj0wO3Y8cjt2KyspKGc9eCt2KWluIG0mJnUobCx2LG1bZ10pO2lmKGwubGVuZ3RoPXIsbjxyKXtmb3Iodj14O3Y8Yi1yO3YrKyl5PXYrbiwoZz12K3IpaW4gbT9tW3ldPW1bZ106ZGVsZXRlIG1beV07Zm9yKHY9Yjt2PmItcituO3YtLSlkZWxldGUgbVt2LTFdfWVsc2UgaWYobj5yKWZvcih2PWItcjt2Png7di0tKXk9dituLTEsKGc9dityLTEpaW4gbT9tW3ldPW1bZ106ZGVsZXRlIG1beV07Zm9yKHY9MDt2PG47disrKW1bdit4XT1hcmd1bWVudHNbdisyXTtyZXR1cm4gbS5sZW5ndGg9Yi1yK24sbH19KX0sNzE4NDY6ZnVuY3Rpb24odCxlLG4pe24oNzY1MTMpKCJmbGF0TWFwIil9LDcwMTQ2OmZ1bmN0aW9uKHQsZSxuKXtuKDc2NTEzKSgiZmxhdCIpfSw0NTE1NDpmdW5jdGlvbih0LGUsbil7dmFyIHI9bigxNDA0NCksbz1uKDgyODM1KTtyKHtnbG9iYWw6ITAsZm9yY2VkOiFuKDczMDc0KS5OQVRJVkVfQVJSQVlfQlVGRkVSfSx7RGF0YVZpZXc6by5EYXRhVmlld30pfSw0MTYzMjpmdW5jdGlvbih0LGUsbil7bigxNDA0NCkoe3RhcmdldDoiRGF0ZSIsc3RhdDohMH0se25vdzpmdW5jdGlvbigpe3JldHVybihuZXcgRGF0ZSkuZ2V0VGltZSgpfX0pfSw0MDA0NTpmdW5jdGlvbih0LGUsbil7dmFyIHI9bigxNDA0NCksbz1uKDc5MTY3KTtyKHt0YXJnZXQ6IkRhdGUiLHByb3RvOiEwLGZvcmNlZDpEYXRlLnByb3RvdHlwZS50b0lTT1N0cmluZyE9PW99LHt0b0lTT1N0cmluZzpvfSl9LDM2MjMzOmZ1bmN0aW9uKHQsZSxuKXsidXNlIHN0cmljdCI7dmFyIHI9bigxNDA0NCksbz1uKDMyMTg3KSxpPW4oMTkyMDkpLGE9big1MzQ5OCk7cih7dGFyZ2V0OiJEYXRlIixwcm90bzohMCxmb3JjZWQ6bygoZnVuY3Rpb24oKXtyZXR1cm4gbnVsbCE9PW5ldyBEYXRlKE5hTikudG9KU09OKCl8fDEhPT1EYXRlLnByb3RvdHlwZS50b0pTT04uY2FsbCh7dG9JU09TdHJpbmc6ZnVuY3Rpb24oKXtyZXR1cm4gMX19KX0pKX0se3RvSlNPTjpmdW5jdGlvbih0KXt2YXIgZT1pKHRoaXMpLG49YShlKTtyZXR1cm4ibnVtYmVyIiE9dHlwZW9mIG58fGlzRmluaXRlKG4pP2UudG9JU09TdHJpbmcoKTpudWxsfX0pfSw4NDA3OmZ1bmN0aW9uKHQsZSxuKXt2YXIgcj1uKDY2OTcxKSxvPW4oNzY5NzQpLGk9bigyMzcyNCkoInRvUHJpbWl0aXZlIiksYT1EYXRlLnByb3RvdHlwZTtpIGluIGF8fHIoYSxpLG8pfSwyMTM3NjpmdW5jdGlvbih0LGUsbil7dmFyIHI9big5MjkxMyksbz1EYXRlLnByb3RvdHlwZSxpPSJJbnZhbGlkIERhdGUiLGE9InRvU3RyaW5nIixjPW8udG9TdHJpbmcscz1vLmdldFRpbWU7bmV3IERhdGUoTmFOKSsiIiE9aSYmcihvLGEsKGZ1bmN0aW9uKCl7dmFyIHQ9cy5jYWxsKHRoaXMpO3JldHVybiB0PT10P2MuY2FsbCh0aGlzKTppfSkpfSw5NjQ5ODpmdW5jdGlvbih0LGUsbil7bigxNDA0NCkoe3RhcmdldDoiRnVuY3Rpb24iLHByb3RvOiEwfSx7YmluZDpuKDczNzM5KX0pfSw3NTg5NDpmdW5jdGlvbih0LGUsbil7InVzZSBzdHJpY3QiO3ZhciByPW4oMTA1OTIpLG89bigzNzYyMCksaT1uKDY0OTY1KSxhPW4oMjM3MjQpKCJoYXNJbnN0YW5jZSIpLGM9RnVuY3Rpb24ucHJvdG90eXBlO2EgaW4gY3x8by5mKGMsYSx7dmFsdWU6ZnVuY3Rpb24odCl7aWYoImZ1bmN0aW9uIiE9dHlwZW9mIHRoaXN8fCFyKHQpKXJldHVybiExO2lmKCFyKHRoaXMucHJvdG90eXBlKSlyZXR1cm4gdCBpbnN0YW5jZW9mIHRoaXM7Zm9yKDt0PWkodCk7KWlmKHRoaXMucHJvdG90eXBlPT09dClyZXR1cm4hMDtyZXR1cm4hMX19KX0sMjI0NDI6ZnVuY3Rpb24odCxlLG4pe3ZhciByPW4oNjI1NTYpLG89bigzNzYyMCkuZixpPUZ1bmN0aW9uLnByb3RvdHlwZSxhPWkudG9TdHJpbmcsYz0vXlxzKmZ1bmN0aW9uIChbXiAoXSopLyxzPSJuYW1lIjtyJiYhKHMgaW4gaSkmJm8oaSxzLHtjb25maWd1cmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7dHJ5e3JldHVybiBhLmNhbGwodGhpcykubWF0Y2goYylbMV19Y2F0Y2godCl7cmV0dXJuIiJ9fX0pfSw3MTYyMjpmdW5jdGlvbih0LGUsbil7bigxNDA0NCkoe2dsb2JhbDohMH0se2dsb2JhbFRoaXM6big4OTU1OCl9KX0sMTY1MDpmdW5jdGlvbih0LGUsbil7dmFyIHI9bigxNDA0NCksbz1uKDc3MDEpLGk9bigzMjE4NyksYT1vKCJKU09OIiwic3RyaW5naWZ5IiksYz0vW1x1RDgwMC1cdURGRkZdL2cscz0vXltcdUQ4MDAtXHVEQkZGXSQvLHU9L15bXHVEQzAwLVx1REZGRl0kLyxsPWZ1bmN0aW9uKHQsZSxuKXt2YXIgcj1uLmNoYXJBdChlLTEpLG89bi5jaGFyQXQoZSsxKTtyZXR1cm4gcy50ZXN0KHQpJiYhdS50ZXN0KG8pfHx1LnRlc3QodCkmJiFzLnRlc3Qocik/IlxcdSIrdC5jaGFyQ29kZUF0KDApLnRvU3RyaW5nKDE2KTp0fSxmPWkoKGZ1bmN0aW9uKCl7cmV0dXJuJyJcXHVkZjA2XFx1ZDgzNCInIT09YSgiXHVkZjA2XHVkODM0Iil8fCciXFx1ZGVhZCInIT09YSgiXHVkZWFkIil9KSk7YSYmcih7dGFyZ2V0OiJKU09OIixzdGF0OiEwLGZvcmNlZDpmfSx7c3RyaW5naWZ5OmZ1bmN0aW9uKHQsZSxuKXt2YXIgcj1hLmFwcGx5KG51bGwsYXJndW1lbnRzKTtyZXR1cm4ic3RyaW5nIj09dHlwZW9mIHI/ci5yZXBsYWNlKGMsbCk6cn19KX0sODExMDQ6ZnVuY3Rpb24odCxlLG4pe3ZhciByPW4oODk1NTgpO24oNTExMjgpKHIuSlNPTiwiSlNPTiIsITApfSw5NDkwNjpmdW5jdGlvbih0LGUsbil7InVzZSBzdHJpY3QiO3ZhciByPW4oODE5NTEpLG89big2NDUwKTt0LmV4cG9ydHM9cigiTWFwIiwoZnVuY3Rpb24odCl7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIHQodGhpcyxhcmd1bWVudHMubGVuZ3RoP2FyZ3VtZW50c1swXTp2b2lkIDApfX0pLG8pfSwyMTAzMjpmdW5jdGlvbih0LGUsbil7dmFyIHI9bigxNDA0NCksbz1uKDIxOTMyKSxpPU1hdGguYWNvc2gsYT1NYXRoLmxvZyxjPU1hdGguc3FydCxzPU1hdGguTE4yO3Ioe3RhcmdldDoiTWF0aCIsc3RhdDohMCxmb3JjZWQ6IWl8fDcxMCE9TWF0aC5mbG9vcihpKE51bWJlci5NQVhfVkFMVUUpKXx8aSgxLzApIT0xLzB9LHthY29zaDpmdW5jdGlvbih0KXtyZXR1cm4odD0rdCk8MT9OYU46dD45NDkwNjI2NS42MjQyNTE1Nj9hKHQpK3M6byh0LTErYyh0LTEpKmModCsxKSl9fSl9LDM3OTM2OmZ1bmN0aW9uKHQsZSxuKXt2YXIgcj1uKDE0MDQ0KSxvPU1hdGguYXNpbmgsaT1NYXRoLmxvZyxhPU1hdGguc3FydDtyKHt0YXJnZXQ6Ik1hdGgiLHN0YXQ6ITAsZm9yY2VkOiEobyYmMS9vKDApPjApfSx7YXNpbmg6ZnVuY3Rpb24gdChlKXtyZXR1cm4gaXNGaW5pdGUoZT0rZSkmJjAhPWU/ZTwwPy10KC1lKTppKGUrYShlKmUrMSkpOmV9fSl9LDkzOTk1OmZ1bmN0aW9uKHQsZSxuKXt2YXIgcj1uKDE0MDQ0KSxvPU1hdGguYXRhbmgsaT1NYXRoLmxvZztyKHt0YXJnZXQ6Ik1hdGgiLHN0YXQ6ITAsZm9yY2VkOiEobyYmMS9vKC0wKTwwKX0se2F0YW5oOmZ1bmN0aW9uKHQpe3JldHVybiAwPT0odD0rdCk/dDppKCgxK3QpLygxLXQpKS8yfX0pfSwxMzM5MzpmdW5jdGlvbih0LGUsbil7dmFyIHI9bigxNDA0NCksbz1uKDM4Nzg3KSxpPU1hdGguYWJzLGE9TWF0aC5wb3c7cih7dGFyZ2V0OiJNYXRoIixzdGF0OiEwfSx7Y2JydDpmdW5jdGlvbih0KXtyZXR1cm4gbyh0PSt0KSphKGkodCksMS8zKX19KX0sMTEyODE6ZnVuY3Rpb24odCxlLG4pe3ZhciByPW4oMTQwNDQpLG89TWF0aC5mbG9vcixpPU1hdGgubG9nLGE9TWF0aC5MT0cyRTtyKHt0YXJnZXQ6Ik1hdGgiLHN0YXQ6ITB9LHtjbHozMjpmdW5jdGlvbih0KXtyZXR1cm4odD4+Pj0wKT8zMS1vKGkodCsuNSkqYSk6MzJ9fSl9LDM4MDM2OmZ1bmN0aW9uKHQsZSxuKXt2YXIgcj1uKDE0MDQ0KSxvPW4oNzI5NzApLGk9TWF0aC5jb3NoLGE9TWF0aC5hYnMsYz1NYXRoLkU7cih7dGFyZ2V0OiJNYXRoIixzdGF0OiEwLGZvcmNlZDohaXx8aSg3MTApPT09MS8wfSx7Y29zaDpmdW5jdGlvbih0KXt2YXIgZT1vKGEodCktMSkrMTtyZXR1cm4oZSsxLyhlKmMqYykpKihjLzIpfX0pfSwxMTM4OmZ1bmN0aW9uKHQsZSxuKXt2YXIgcj1uKDE0MDQ0KSxvPW4oNzI5NzApO3Ioe3RhcmdldDoiTWF0aCIsc3RhdDohMCxmb3JjZWQ6byE9TWF0aC5leHBtMX0se2V4cG0xOm99KX0sNDYwNzg6ZnVuY3Rpb24odCxlLG4pe24oMTQwNDQpKHt0YXJnZXQ6Ik1hdGgiLHN0YXQ6ITB9LHtmcm91bmQ6big1MzI1MSl9KX0sMzAwODM6ZnVuY3Rpb24odCxlLG4pe3ZhciByPW4oMTQwNDQpLG89TWF0aC5oeXBvdCxpPU1hdGguYWJzLGE9TWF0aC5zcXJ0O3Ioe3RhcmdldDoiTWF0aCIsc3RhdDohMCxmb3JjZWQ6ISFvJiZvKDEvMCxOYU4pIT09MS8wfSx7aHlwb3Q6ZnVuY3Rpb24odCxlKXtmb3IodmFyIG4scixvPTAsYz0wLHM9YXJndW1lbnRzLmxlbmd0aCx1PTA7YzxzOyl1PChuPWkoYXJndW1lbnRzW2MrK10pKT8obz1vKihyPXUvbikqcisxLHU9bik6bys9bj4wPyhyPW4vdSkqcjpuO3JldHVybiB1PT09MS8wPzEvMDp1KmEobyl9fSl9LDQ3MzgzOmZ1bmN0aW9uKHQsZSxuKXt2YXIgcj1uKDE0MDQ0KSxvPW4oMzIxODcpLGk9TWF0aC5pbXVsO3Ioe3RhcmdldDoiTWF0aCIsc3RhdDohMCxmb3JjZWQ6bygoZnVuY3Rpb24oKXtyZXR1cm4tNSE9aSg0Mjk0OTY3Mjk1LDUpfHwyIT1pLmxlbmd0aH0pKX0se2ltdWw6ZnVuY3Rpb24odCxlKXt2YXIgbj02NTUzNSxyPSt0LG89K2UsaT1uJnIsYT1uJm87cmV0dXJuIDB8aSphKygobiZyPj4+MTYpKmEraSoobiZvPj4+MTYpPDwxNj4+PjApfX0pfSw3MTU1ODpmdW5jdGlvbih0LGUsbil7dmFyIHI9bigxNDA0NCksbz1NYXRoLmxvZyxpPU1hdGguTE9HMTBFO3Ioe3RhcmdldDoiTWF0aCIsc3RhdDohMH0se2xvZzEwOmZ1bmN0aW9uKHQpe3JldHVybiBvKHQpKml9fSl9LDk5MjE4OmZ1bmN0aW9uKHQsZSxuKXtuKDE0MDQ0KSh7dGFyZ2V0OiJNYXRoIixzdGF0OiEwfSx7bG9nMXA6bigyMTkzMil9KX0sOTg5Nzg6ZnVuY3Rpb24odCxlLG4pe3ZhciByPW4oMTQwNDQpLG89TWF0aC5sb2csaT1NYXRoLkxOMjtyKHt0YXJnZXQ6Ik1hdGgiLHN0YXQ6ITB9LHtsb2cyOmZ1bmN0aW9uKHQpe3JldHVybiBvKHQpL2l9fSl9LDgwNjk6ZnVuY3Rpb24odCxlLG4pe24oMTQwNDQpKHt0YXJnZXQ6Ik1hdGgiLHN0YXQ6ITB9LHtzaWduOm4oMzg3ODcpfSl9LDcwMjA0OmZ1bmN0aW9uKHQsZSxuKXt2YXIgcj1uKDE0MDQ0KSxvPW4oMzIxODcpLGk9big3Mjk3MCksYT1NYXRoLmFicyxjPU1hdGguZXhwLHM9TWF0aC5FO3Ioe3RhcmdldDoiTWF0aCIsc3RhdDohMCxmb3JjZWQ6bygoZnVuY3Rpb24oKXtyZXR1cm4tMmUtMTchPU1hdGguc2luaCgtMmUtMTcpfSkpfSx7c2luaDpmdW5jdGlvbih0KXtyZXR1cm4gYSh0PSt0KTwxPyhpKHQpLWkoLXQpKS8yOihjKHQtMSktYygtdC0xKSkqKHMvMil9fSl9LDg1NzU4OmZ1bmN0aW9uKHQsZSxuKXt2YXIgcj1uKDE0MDQ0KSxvPW4oNzI5NzApLGk9TWF0aC5leHA7cih7dGFyZ2V0OiJNYXRoIixzdGF0OiEwfSx7dGFuaDpmdW5jdGlvbih0KXt2YXIgZT1vKHQ9K3QpLG49bygtdCk7cmV0dXJuIGU9PTEvMD8xOm49PTEvMD8tMTooZS1uKS8oaSh0KStpKC10KSl9fSl9LDExNzczOmZ1bmN0aW9uKHQsZSxuKXtuKDUxMTI4KShNYXRoLCJNYXRoIiwhMCl9LDE1NzYzOmZ1bmN0aW9uKHQsZSxuKXt2YXIgcj1uKDE0MDQ0KSxvPU1hdGguY2VpbCxpPU1hdGguZmxvb3I7cih7dGFyZ2V0OiJNYXRoIixzdGF0OiEwfSx7dHJ1bmM6ZnVuY3Rpb24odCl7cmV0dXJuKHQ+MD9pOm8pKHQpfX0pfSw3MTgyNzpmdW5jdGlvbih0LGUsbil7InVzZSBzdHJpY3QiO3ZhciByPW4oNjI1NTYpLG89big4OTU1OCksaT1uKDY0NTA0KSxhPW4oOTI5MTMpLGM9big3NjI5OCkscz1uKDI0NTk0KSx1PW4oMzAyNzIpLGw9big1MzQ5OCksZj1uKDMyMTg3KSxkPW4oNTA4NjgpLHA9bigxMzMzNCkuZixoPW4oOTcyNTcpLmYsdj1uKDM3NjIwKS5mLGc9big4MjM1MCkudHJpbSx5PSJOdW1iZXIiLG09by5OdW1iZXIsYj1tLnByb3RvdHlwZSx4PXMoZChiKSk9PXksdz1mdW5jdGlvbih0KXt2YXIgZSxuLHIsbyxpLGEsYyxzLHU9bCh0LCExKTtpZigic3RyaW5nIj09dHlwZW9mIHUmJnUubGVuZ3RoPjIpaWYoNDM9PT0oZT0odT1nKHUpKS5jaGFyQ29kZUF0KDApKXx8NDU9PT1lKXtpZig4OD09PShuPXUuY2hhckNvZGVBdCgyKSl8fDEyMD09PW4pcmV0dXJuIE5hTn1lbHNlIGlmKDQ4PT09ZSl7c3dpdGNoKHUuY2hhckNvZGVBdCgxKSl7Y2FzZSA2NjpjYXNlIDk4OnI9MixvPTQ5O2JyZWFrO2Nhc2UgNzk6Y2FzZSAxMTE6cj04LG89NTU7YnJlYWs7ZGVmYXVsdDpyZXR1cm4rdX1mb3IoYT0oaT11LnNsaWNlKDIpKS5sZW5ndGgsYz0wO2M8YTtjKyspaWYoKHM9aS5jaGFyQ29kZUF0KGMpKTw0OHx8cz5vKXJldHVybiBOYU47cmV0dXJuIHBhcnNlSW50KGkscil9cmV0dXJuK3V9O2lmKGkoeSwhbSgiIDBvMSIpfHwhbSgiMGIxIil8fG0oIisweDEiKSkpe2Zvcih2YXIgRSxqPWZ1bmN0aW9uKHQpe3ZhciBlPWFyZ3VtZW50cy5sZW5ndGg8MT8wOnQsbj10aGlzO3JldHVybiBuIGluc3RhbmNlb2YgaiYmKHg/ZigoZnVuY3Rpb24oKXtiLnZhbHVlT2YuY2FsbChuKX0pKTpzKG4pIT15KT91KG5ldyBtKHcoZSkpLG4saik6dyhlKX0sQz1yP3AobSk6Ik1BWF9WQUxVRSxNSU5fVkFMVUUsTmFOLE5FR0FUSVZFX0lORklOSVRZLFBPU0lUSVZFX0lORklOSVRZLEVQU0lMT04saXNGaW5pdGUsaXNJbnRlZ2VyLGlzTmFOLGlzU2FmZUludGVnZXIsTUFYX1NBRkVfSU5URUdFUixNSU5fU0FGRV9JTlRFR0VSLHBhcnNlRmxvYXQscGFyc2VJbnQsaXNJbnRlZ2VyIi5zcGxpdCgiLCIpLGs9MDtDLmxlbmd0aD5rO2srKyljKG0sRT1DW2tdKSYmIWMoaixFKSYmdihqLEUsaChtLEUpKTtqLnByb3RvdHlwZT1iLGIuY29uc3RydWN0b3I9aixhKG8seSxqKX19LDI2MDYzOmZ1bmN0aW9uKHQsZSxuKXtuKDE0MDQ0KSh7dGFyZ2V0OiJOdW1iZXIiLHN0YXQ6ITB9LHtFUFNJTE9OOk1hdGgucG93KDIsLTUyKX0pfSw5Njc6ZnVuY3Rpb24odCxlLG4pe24oMTQwNDQpKHt0YXJnZXQ6Ik51bWJlciIsc3RhdDohMH0se2lzRmluaXRlOm4oODk1NDIpfSl9LDMzMTAwOmZ1bmN0aW9uKHQsZSxuKXtuKDE0MDQ0KSh7dGFyZ2V0OiJOdW1iZXIiLHN0YXQ6ITB9LHtpc0ludGVnZXI6bigzODI1Nyl9KX0sNDE5Mjg6ZnVuY3Rpb24odCxlLG4pe24oMTQwNDQpKHt0YXJnZXQ6Ik51bWJlciIsc3RhdDohMH0se2lzTmFOOmZ1bmN0aW9uKHQpe3JldHVybiB0IT10fX0pfSwxNTg2OTpmdW5jdGlvbih0LGUsbil7dmFyIHI9bigxNDA0NCksbz1uKDM4MjU3KSxpPU1hdGguYWJzO3Ioe3RhcmdldDoiTnVtYmVyIixzdGF0OiEwfSx7aXNTYWZlSW50ZWdlcjpmdW5jdGlvbih0KXtyZXR1cm4gbyh0KSYmaSh0KTw9OTAwNzE5OTI1NDc0MDk5MX19KX0sODg3MTU6ZnVuY3Rpb24odCxlLG4pe24oMTQwNDQpKHt0YXJnZXQ6Ik51bWJlciIsc3RhdDohMH0se01BWF9TQUZFX0lOVEVHRVI6OTAwNzE5OTI1NDc0MDk5MX0pfSwzNjk5NTpmdW5jdGlvbih0LGUsbil7bigxNDA0NCkoe3RhcmdldDoiTnVtYmVyIixzdGF0OiEwfSx7TUlOX1NBRkVfSU5URUdFUjotOTAwNzE5OTI1NDc0MDk5MX0pfSwxMTIyNDpmdW5jdGlvbih0LGUsbil7dmFyIHI9bigxNDA0NCksbz1uKDI0NDk3KTtyKHt0YXJnZXQ6Ik51bWJlciIsc3RhdDohMCxmb3JjZWQ6TnVtYmVyLnBhcnNlRmxvYXQhPW99LHtwYXJzZUZsb2F0Om99KX0sNjM3NjU6ZnVuY3Rpb24odCxlLG4pe3ZhciByPW4oMTQwNDQpLG89big3ODQ2KTtyKHt0YXJnZXQ6Ik51bWJlciIsc3RhdDohMCxmb3JjZWQ6TnVtYmVyLnBhcnNlSW50IT1vfSx7cGFyc2VJbnQ6b30pfSwxMzA2NDpmdW5jdGlvbih0LGUsbil7InVzZSBzdHJpY3QiO3ZhciByPW4oMTQwNDQpLG89big0MzQxNiksaT1uKDUzOTk3KSxhPW4oNjgyNTMpLGM9bigzMjE4Nykscz0xLi50b0ZpeGVkLHU9TWF0aC5mbG9vcixsPWZ1bmN0aW9uKHQsZSxuKXtyZXR1cm4gMD09PWU/bjplJTI9PTE/bCh0LGUtMSxuKnQpOmwodCp0LGUvMixuKX07cih7dGFyZ2V0OiJOdW1iZXIiLHByb3RvOiEwLGZvcmNlZDpzJiYoIjAuMDAwIiE9PThlLTUudG9GaXhlZCgzKXx8IjEiIT09LjkudG9GaXhlZCgwKXx8IjEuMjUiIT09MS4yNTUudG9GaXhlZCgyKXx8IjEwMDAwMDAwMDAwMDAwMDAxMjgiIT09KDB4ZGUwYjZiM2E3NjQwMDgwKS50b0ZpeGVkKDApKXx8IWMoKGZ1bmN0aW9uKCl7cy5jYWxsKHt9KX0pKX0se3RvRml4ZWQ6ZnVuY3Rpb24odCl7dmFyIGUsbixyLGMscz1pKHRoaXMpLGY9byh0KSxkPVswLDAsMCwwLDAsMF0scD0iIixoPSIwIix2PWZ1bmN0aW9uKHQsZSl7Zm9yKHZhciBuPS0xLHI9ZTsrK248Njspcis9dCpkW25dLGRbbl09ciUxZTcscj11KHIvMWU3KX0sZz1mdW5jdGlvbih0KXtmb3IodmFyIGU9NixuPTA7LS1lPj0wOyluKz1kW2VdLGRbZV09dShuL3QpLG49biV0KjFlN30seT1mdW5jdGlvbigpe2Zvcih2YXIgdD02LGU9IiI7LS10Pj0wOylpZigiIiE9PWV8fDA9PT10fHwwIT09ZFt0XSl7dmFyIG49U3RyaW5nKGRbdF0pO2U9IiI9PT1lP246ZSthLmNhbGwoIjAiLDctbi5sZW5ndGgpK259cmV0dXJuIGV9O2lmKGY8MHx8Zj4yMCl0aHJvdyBSYW5nZUVycm9yKCJJbmNvcnJlY3QgZnJhY3Rpb24gZGlnaXRzIik7aWYocyE9cylyZXR1cm4iTmFOIjtpZihzPD0tMWUyMXx8cz49MWUyMSlyZXR1cm4gU3RyaW5nKHMpO2lmKHM8MCYmKHA9Ii0iLHM9LXMpLHM+MWUtMjEpaWYobj0oZT1mdW5jdGlvbih0KXtmb3IodmFyIGU9MCxuPXQ7bj49NDA5NjspZSs9MTIsbi89NDA5Njtmb3IoO24+PTI7KWUrPTEsbi89MjtyZXR1cm4gZX0ocypsKDIsNjksMSkpLTY5KTwwP3MqbCgyLC1lLDEpOnMvbCgyLGUsMSksbio9NDUwMzU5OTYyNzM3MDQ5NiwoZT01Mi1lKT4wKXtmb3IodigwLG4pLHI9ZjtyPj03Oyl2KDFlNywwKSxyLT03O2Zvcih2KGwoMTAsciwxKSwwKSxyPWUtMTtyPj0yMzspZygxPDwyMyksci09MjM7ZygxPDxyKSx2KDEsMSksZygyKSxoPXkoKX1lbHNlIHYoMCxuKSx2KDE8PC1lLDApLGg9eSgpK2EuY2FsbCgiMCIsZik7cmV0dXJuIGg9Zj4wP3ArKChjPWgubGVuZ3RoKTw9Zj8iMC4iK2EuY2FsbCgiMCIsZi1jKStoOmguc2xpY2UoMCxjLWYpKyIuIitoLnNsaWNlKGMtZikpOnAraH19KX0sMzIyOTM6ZnVuY3Rpb24odCxlLG4peyJ1c2Ugc3RyaWN0Ijt2YXIgcj1uKDE0MDQ0KSxvPW4oMzIxODcpLGk9big1Mzk5NyksYT0xLi50b1ByZWNpc2lvbjtyKHt0YXJnZXQ6Ik51bWJlciIscHJvdG86ITAsZm9yY2VkOm8oKGZ1bmN0aW9uKCl7cmV0dXJuIjEiIT09YS5jYWxsKDEsdm9pZCAwKX0pKXx8IW8oKGZ1bmN0aW9uKCl7YS5jYWxsKHt9KX0pKX0se3RvUHJlY2lzaW9uOmZ1bmN0aW9uKHQpe3JldHVybiB2b2lkIDA9PT10P2EuY2FsbChpKHRoaXMpKTphLmNhbGwoaSh0aGlzKSx0KX19KX0sMzc0ODE6ZnVuY3Rpb24odCxlLG4pe3ZhciByPW4oMTQwNDQpLG89big3ODY4NSk7cih7dGFyZ2V0OiJPYmplY3QiLHN0YXQ6ITAsZm9yY2VkOk9iamVjdC5hc3NpZ24hPT1vfSx7YXNzaWduOm99KX0sNDU1NTA6ZnVuY3Rpb24odCxlLG4pe24oMTQwNDQpKHt0YXJnZXQ6Ik9iamVjdCIsc3RhdDohMCxzaGFtOiFuKDYyNTU2KX0se2NyZWF0ZTpuKDUwODY4KX0pfSwxOTI3ODpmdW5jdGlvbih0LGUsbil7InVzZSBzdHJpY3QiO3ZhciByPW4oMTQwNDQpLG89big2MjU1NiksaT1uKDQ3ODEyKSxhPW4oMTkyMDkpLGM9big4NjQ3MCkscz1uKDM3NjIwKTtvJiZyKHt0YXJnZXQ6Ik9iamVjdCIscHJvdG86ITAsZm9yY2VkOml9LHtfX2RlZmluZUdldHRlcl9fOmZ1bmN0aW9uKHQsZSl7cy5mKGEodGhpcyksdCx7Z2V0OmMoZSksZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITB9KX19KX0sNTExNzM6ZnVuY3Rpb24odCxlLG4pe3ZhciByPW4oMTQwNDQpLG89big2MjU1Nik7cih7dGFyZ2V0OiJPYmplY3QiLHN0YXQ6ITAsZm9yY2VkOiFvLHNoYW06IW99LHtkZWZpbmVQcm9wZXJ0aWVzOm4oODY0MDEpfSl9LDU4MTY1OmZ1bmN0aW9uKHQsZSxuKXt2YXIgcj1uKDE0MDQ0KSxvPW4oNjI1NTYpO3Ioe3RhcmdldDoiT2JqZWN0IixzdGF0OiEwLGZvcmNlZDohbyxzaGFtOiFvfSx7ZGVmaW5lUHJvcGVydHk6bigzNzYyMCkuZn0pfSw5MTIwOTpmdW5jdGlvbih0LGUsbil7InVzZSBzdHJpY3QiO3ZhciByPW4oMTQwNDQpLG89big2MjU1NiksaT1uKDQ3ODEyKSxhPW4oMTkyMDkpLGM9big4NjQ3MCkscz1uKDM3NjIwKTtvJiZyKHt0YXJnZXQ6Ik9iamVjdCIscHJvdG86ITAsZm9yY2VkOml9LHtfX2RlZmluZVNldHRlcl9fOmZ1bmN0aW9uKHQsZSl7cy5mKGEodGhpcyksdCx7c2V0OmMoZSksZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITB9KX19KX0sODc0MzpmdW5jdGlvbih0LGUsbil7dmFyIHI9bigxNDA0NCksbz1uKDM1NjcpLmVudHJpZXM7cih7dGFyZ2V0OiJPYmplY3QiLHN0YXQ6ITB9LHtlbnRyaWVzOmZ1bmN0aW9uKHQpe3JldHVybiBvKHQpfX0pfSw3NTgwNDpmdW5jdGlvbih0LGUsbil7dmFyIHI9bigxNDA0NCksbz1uKDc0NTIwKSxpPW4oMzIxODcpLGE9bigxMDU5MiksYz1uKDk2MDMpLm9uRnJlZXplLHM9T2JqZWN0LmZyZWV6ZTtyKHt0YXJnZXQ6Ik9iamVjdCIsc3RhdDohMCxmb3JjZWQ6aSgoZnVuY3Rpb24oKXtzKDEpfSkpLHNoYW06IW99LHtmcmVlemU6ZnVuY3Rpb24odCl7cmV0dXJuIHMmJmEodCk/cyhjKHQpKTp0fX0pfSw0NjE0NjpmdW5jdGlvbih0LGUsbil7dmFyIHI9bigxNDA0NCksbz1uKDQxMzM0KSxpPW4oNTg4MTApO3Ioe3RhcmdldDoiT2JqZWN0IixzdGF0OiEwfSx7ZnJvbUVudHJpZXM6ZnVuY3Rpb24odCl7dmFyIGU9e307cmV0dXJuIG8odCwoZnVuY3Rpb24odCxuKXtpKGUsdCxuKX0pLHZvaWQgMCwhMCksZX19KX0sMTUwNzc6ZnVuY3Rpb24odCxlLG4pe3ZhciByPW4oMTQwNDQpLG89bigzMjE4NyksaT1uKDk1NzMpLGE9big5NzI1NykuZixjPW4oNjI1NTYpLHM9bygoZnVuY3Rpb24oKXthKDEpfSkpO3Ioe3RhcmdldDoiT2JqZWN0IixzdGF0OiEwLGZvcmNlZDohY3x8cyxzaGFtOiFjfSx7Z2V0T3duUHJvcGVydHlEZXNjcmlwdG9yOmZ1bmN0aW9uKHQsZSl7cmV0dXJuIGEoaSh0KSxlKX19KX0sNTgzMjk6ZnVuY3Rpb24odCxlLG4pe3ZhciByPW4oMTQwNDQpLG89big2MjU1NiksaT1uKDI0NDE1KSxhPW4oOTU3MyksYz1uKDk3MjU3KSxzPW4oNTg4MTApO3Ioe3RhcmdldDoiT2JqZWN0IixzdGF0OiEwLHNoYW06IW99LHtnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzOmZ1bmN0aW9uKHQpe2Zvcih2YXIgZSxuLHI9YSh0KSxvPWMuZix1PWkociksbD17fSxmPTA7dS5sZW5ndGg+Zjspdm9pZCAwIT09KG49byhyLGU9dVtmKytdKSkmJnMobCxlLG4pO3JldHVybiBsfX0pfSw2MDUyNTpmdW5jdGlvbih0LGUsbil7dmFyIHI9bigxNDA0NCksbz1uKDMyMTg3KSxpPW4oMjY5MzcpLmY7cih7dGFyZ2V0OiJPYmplY3QiLHN0YXQ6ITAsZm9yY2VkOm8oKGZ1bmN0aW9uKCl7cmV0dXJuIU9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKDEpfSkpfSx7Z2V0T3duUHJvcGVydHlOYW1lczppfSl9LDc0OTUzOmZ1bmN0aW9uKHQsZSxuKXt2YXIgcj1uKDE0MDQ0KSxvPW4oMzIxODcpLGk9bigxOTIwOSksYT1uKDY0OTY1KSxjPW4oNzE2MDgpO3Ioe3RhcmdldDoiT2JqZWN0IixzdGF0OiEwLGZvcmNlZDpvKChmdW5jdGlvbigpe2EoMSl9KSksc2hhbTohY30se2dldFByb3RvdHlwZU9mOmZ1bmN0aW9uKHQpe3JldHVybiBhKGkodCkpfX0pfSw1MTY2OmZ1bmN0aW9uKHQsZSxuKXt2YXIgcj1uKDE0MDQ0KSxvPW4oMzIxODcpLGk9bigxMDU5MiksYT1PYmplY3QuaXNFeHRlbnNpYmxlO3Ioe3RhcmdldDoiT2JqZWN0IixzdGF0OiEwLGZvcmNlZDpvKChmdW5jdGlvbigpe2EoMSl9KSl9LHtpc0V4dGVuc2libGU6ZnVuY3Rpb24odCl7cmV0dXJuISFpKHQpJiYoIWF8fGEodCkpfX0pfSw4OTc1ODpmdW5jdGlvbih0LGUsbil7dmFyIHI9bigxNDA0NCksbz1uKDMyMTg3KSxpPW4oMTA1OTIpLGE9T2JqZWN0LmlzRnJvemVuO3Ioe3RhcmdldDoiT2JqZWN0IixzdGF0OiEwLGZvcmNlZDpvKChmdW5jdGlvbigpe2EoMSl9KSl9LHtpc0Zyb3plbjpmdW5jdGlvbih0KXtyZXR1cm4haSh0KXx8ISFhJiZhKHQpfX0pfSwxODM3ODpmdW5jdGlvbih0LGUsbil7dmFyIHI9bigxNDA0NCksbz1uKDMyMTg3KSxpPW4oMTA1OTIpLGE9T2JqZWN0LmlzU2VhbGVkO3Ioe3RhcmdldDoiT2JqZWN0IixzdGF0OiEwLGZvcmNlZDpvKChmdW5jdGlvbigpe2EoMSl9KSl9LHtpc1NlYWxlZDpmdW5jdGlvbih0KXtyZXR1cm4haSh0KXx8ISFhJiZhKHQpfX0pfSw1NDc4MTpmdW5jdGlvbih0LGUsbil7bigxNDA0NCkoe3RhcmdldDoiT2JqZWN0IixzdGF0OiEwfSx7aXM6big3NjQ4Mil9KX0sOTI1MjpmdW5jdGlvbih0LGUsbil7dmFyIHI9bigxNDA0NCksbz1uKDE5MjA5KSxpPW4oMjU1MDcpO3Ioe3RhcmdldDoiT2JqZWN0IixzdGF0OiEwLGZvcmNlZDpuKDMyMTg3KSgoZnVuY3Rpb24oKXtpKDEpfSkpfSx7a2V5czpmdW5jdGlvbih0KXtyZXR1cm4gaShvKHQpKX19KX0sNzI1NjA6ZnVuY3Rpb24odCxlLG4peyJ1c2Ugc3RyaWN0Ijt2YXIgcj1uKDE0MDQ0KSxvPW4oNjI1NTYpLGk9big0NzgxMiksYT1uKDE5MjA5KSxjPW4oNTM0OTgpLHM9big2NDk2NSksdT1uKDk3MjU3KS5mO28mJnIoe3RhcmdldDoiT2JqZWN0Iixwcm90bzohMCxmb3JjZWQ6aX0se19fbG9va3VwR2V0dGVyX186ZnVuY3Rpb24odCl7dmFyIGUsbj1hKHRoaXMpLHI9Yyh0LCEwKTtkb3tpZihlPXUobixyKSlyZXR1cm4gZS5nZXR9d2hpbGUobj1zKG4pKX19KX0sMTA2MzpmdW5jdGlvbih0LGUsbil7InVzZSBzdHJpY3QiO3ZhciByPW4oMTQwNDQpLG89big2MjU1NiksaT1uKDQ3ODEyKSxhPW4oMTkyMDkpLGM9big1MzQ5OCkscz1uKDY0OTY1KSx1PW4oOTcyNTcpLmY7byYmcih7dGFyZ2V0OiJPYmplY3QiLHByb3RvOiEwLGZvcmNlZDppfSx7X19sb29rdXBTZXR0ZXJfXzpmdW5jdGlvbih0KXt2YXIgZSxuPWEodGhpcykscj1jKHQsITApO2Rve2lmKGU9dShuLHIpKXJldHVybiBlLnNldH13aGlsZShuPXMobikpfX0pfSw5MzI3MjpmdW5jdGlvbih0LGUsbil7dmFyIHI9bigxNDA0NCksbz1uKDEwNTkyKSxpPW4oOTYwMykub25GcmVlemUsYT1uKDc0NTIwKSxjPW4oMzIxODcpLHM9T2JqZWN0LnByZXZlbnRFeHRlbnNpb25zO3Ioe3RhcmdldDoiT2JqZWN0IixzdGF0OiEwLGZvcmNlZDpjKChmdW5jdGlvbigpe3MoMSl9KSksc2hhbTohYX0se3ByZXZlbnRFeHRlbnNpb25zOmZ1bmN0aW9uKHQpe3JldHVybiBzJiZvKHQpP3MoaSh0KSk6dH19KX0sNTYxNTg6ZnVuY3Rpb24odCxlLG4pe3ZhciByPW4oMTQwNDQpLG89bigxMDU5MiksaT1uKDk2MDMpLm9uRnJlZXplLGE9big3NDUyMCksYz1uKDMyMTg3KSxzPU9iamVjdC5zZWFsO3Ioe3RhcmdldDoiT2JqZWN0IixzdGF0OiEwLGZvcmNlZDpjKChmdW5jdGlvbigpe3MoMSl9KSksc2hhbTohYX0se3NlYWw6ZnVuY3Rpb24odCl7cmV0dXJuIHMmJm8odCk/cyhpKHQpKTp0fX0pfSw0MTQ1NjpmdW5jdGlvbih0LGUsbil7bigxNDA0NCkoe3RhcmdldDoiT2JqZWN0IixzdGF0OiEwfSx7c2V0UHJvdG90eXBlT2Y6big3MTg0Mil9KX0sMzQ1Mjk6ZnVuY3Rpb24odCxlLG4pe3ZhciByPW4oOTA2MTMpLG89big5MjkxMyksaT1uKDE5NzU4KTtyfHxvKE9iamVjdC5wcm90b3R5cGUsInRvU3RyaW5nIixpLHt1bnNhZmU6ITB9KX0sNzI4NTE6ZnVuY3Rpb24odCxlLG4pe3ZhciByPW4oMTQwNDQpLG89bigzNTY3KS52YWx1ZXM7cih7dGFyZ2V0OiJPYmplY3QiLHN0YXQ6ITB9LHt2YWx1ZXM6ZnVuY3Rpb24odCl7cmV0dXJuIG8odCl9fSl9LDE5NDMzOmZ1bmN0aW9uKHQsZSxuKXt2YXIgcj1uKDE0MDQ0KSxvPW4oMjQ0OTcpO3Ioe2dsb2JhbDohMCxmb3JjZWQ6cGFyc2VGbG9hdCE9b30se3BhcnNlRmxvYXQ6b30pfSwzMzQzNzpmdW5jdGlvbih0LGUsbil7dmFyIHI9bigxNDA0NCksbz1uKDc4NDYpO3Ioe2dsb2JhbDohMCxmb3JjZWQ6cGFyc2VJbnQhPW99LHtwYXJzZUludDpvfSl9LDE3NjI5OmZ1bmN0aW9uKHQsZSxuKXsidXNlIHN0cmljdCI7dmFyIHI9bigxNDA0NCksbz1uKDg2NDcwKSxpPW4oODMwODMpLGE9bigzMTE1KSxjPW4oNDEzMzQpO3Ioe3RhcmdldDoiUHJvbWlzZSIsc3RhdDohMH0se2FsbFNldHRsZWQ6ZnVuY3Rpb24odCl7dmFyIGU9dGhpcyxuPWkuZihlKSxyPW4ucmVzb2x2ZSxzPW4ucmVqZWN0LHU9YSgoZnVuY3Rpb24oKXt2YXIgbj1vKGUucmVzb2x2ZSksaT1bXSxhPTAscz0xO2ModCwoZnVuY3Rpb24odCl7dmFyIG89YSsrLGM9ITE7aS5wdXNoKHZvaWQgMCkscysrLG4uY2FsbChlLHQpLnRoZW4oKGZ1bmN0aW9uKHQpe2N8fChjPSEwLGlbb109e3N0YXR1czoiZnVsZmlsbGVkIix2YWx1ZTp0fSwtLXN8fHIoaSkpfSksKGZ1bmN0aW9uKHQpe2N8fChjPSEwLGlbb109e3N0YXR1czoicmVqZWN0ZWQiLHJlYXNvbjp0fSwtLXN8fHIoaSkpfSkpfSkpLC0tc3x8cihpKX0pKTtyZXR1cm4gdS5lcnJvciYmcyh1LnZhbHVlKSxuLnByb21pc2V9fSl9LDQyNDkwOmZ1bmN0aW9uKHQsZSxuKXsidXNlIHN0cmljdCI7dmFyIHI9bigxNDA0NCksbz1uKDY1NjcyKSxpPW4oMzk0NTcpLGE9bigzMjE4NyksYz1uKDc3MDEpLHM9bigxMzk3OSksdT1uKDYzMTM0KSxsPW4oOTI5MTMpO3Ioe3RhcmdldDoiUHJvbWlzZSIscHJvdG86ITAscmVhbDohMCxmb3JjZWQ6ISFpJiZhKChmdW5jdGlvbigpe2kucHJvdG90eXBlLmZpbmFsbHkuY2FsbCh7dGhlbjpmdW5jdGlvbigpe319LChmdW5jdGlvbigpe30pKX0pKX0se2ZpbmFsbHk6ZnVuY3Rpb24odCl7dmFyIGU9cyh0aGlzLGMoIlByb21pc2UiKSksbj0iZnVuY3Rpb24iPT10eXBlb2YgdDtyZXR1cm4gdGhpcy50aGVuKG4/ZnVuY3Rpb24obil7cmV0dXJuIHUoZSx0KCkpLnRoZW4oKGZ1bmN0aW9uKCl7cmV0dXJuIG59KSl9OnQsbj9mdW5jdGlvbihuKXtyZXR1cm4gdShlLHQoKSkudGhlbigoZnVuY3Rpb24oKXt0aHJvdyBufSkpfTp0KX19KSxvfHwiZnVuY3Rpb24iIT10eXBlb2YgaXx8aS5wcm90b3R5cGUuZmluYWxseXx8bChpLnByb3RvdHlwZSwiZmluYWxseSIsYygiUHJvbWlzZSIpLnByb3RvdHlwZS5maW5hbGx5KX0sMTE2ODg6ZnVuY3Rpb24odCxlLG4peyJ1c2Ugc3RyaWN0Ijt2YXIgcixvLGksYSxjPW4oMTQwNDQpLHM9big2NTY3MiksdT1uKDg5NTU4KSxsPW4oNzcwMSksZj1uKDM5NDU3KSxkPW4oOTI5MTMpLHA9bigxOTI2KSxoPW4oNTExMjgpLHY9big2NzUzOCksZz1uKDEwNTkyKSx5PW4oODY0NzApLG09big1OTM3OSksYj1uKDI0NTk0KSx4PW4oNzY3NzMpLHc9big0MTMzNCksRT1uKDQ3OTYpLGo9bigxMzk3OSksQz1uKDIxNzQ0KS5zZXQsaz1uKDY1NTU1KSxTPW4oNjMxMzQpLE89big4MzYyMCksST1uKDgzMDgzKSxBPW4oMzExNSksVD1uKDg5ODI3KSxNPW4oNjQ1MDQpLF89bigyMzcyNCksTD1uKDc5MDcxKSxSPV8oInNwZWNpZXMiKSxQPSJQcm9taXNlIixOPVQuZ2V0LEQ9VC5zZXQsRj1ULmdldHRlckZvcihQKSxVPWYsQj11LlR5cGVFcnJvcix6PXUuZG9jdW1lbnQsVj11LnByb2Nlc3MsSD1sKCJmZXRjaCIpLHE9SS5mLFc9cSxHPSJwcm9jZXNzIj09YihWKSxaPSEhKHomJnouY3JlYXRlRXZlbnQmJnUuZGlzcGF0Y2hFdmVudCksJD0idW5oYW5kbGVkcmVqZWN0aW9uIixZPU0oUCwoZnVuY3Rpb24oKXtpZighKHgoVSkhPT1TdHJpbmcoVSkpKXtpZig2Nj09PUwpcmV0dXJuITA7aWYoIUcmJiJmdW5jdGlvbiIhPXR5cGVvZiBQcm9taXNlUmVqZWN0aW9uRXZlbnQpcmV0dXJuITB9aWYocyYmIVUucHJvdG90eXBlLmZpbmFsbHkpcmV0dXJuITA7aWYoTD49NTEmJi9uYXRpdmUgY29kZS8udGVzdChVKSlyZXR1cm4hMTt2YXIgdD1VLnJlc29sdmUoMSksZT1mdW5jdGlvbih0KXt0KChmdW5jdGlvbigpe30pLChmdW5jdGlvbigpe30pKX07cmV0dXJuKHQuY29uc3RydWN0b3I9e30pW1JdPWUsISh0LnRoZW4oKGZ1bmN0aW9uKCl7fSkpaW5zdGFuY2VvZiBlKX0pKSxLPVl8fCFFKChmdW5jdGlvbih0KXtVLmFsbCh0KS5jYXRjaCgoZnVuY3Rpb24oKXt9KSl9KSksSj1mdW5jdGlvbih0KXt2YXIgZTtyZXR1cm4hKCFnKHQpfHwiZnVuY3Rpb24iIT10eXBlb2YoZT10LnRoZW4pKSYmZX0sWD1mdW5jdGlvbih0LGUsbil7aWYoIWUubm90aWZpZWQpe2Uubm90aWZpZWQ9ITA7dmFyIHI9ZS5yZWFjdGlvbnM7aygoZnVuY3Rpb24oKXtmb3IodmFyIG89ZS52YWx1ZSxpPTE9PWUuc3RhdGUsYT0wO3IubGVuZ3RoPmE7KXt2YXIgYyxzLHUsbD1yW2ErK10sZj1pP2wub2s6bC5mYWlsLGQ9bC5yZXNvbHZlLHA9bC5yZWplY3QsaD1sLmRvbWFpbjt0cnl7Zj8oaXx8KDI9PT1lLnJlamVjdGlvbiYmbnQodCxlKSxlLnJlamVjdGlvbj0xKSwhMD09PWY/Yz1vOihoJiZoLmVudGVyKCksYz1mKG8pLGgmJihoLmV4aXQoKSx1PSEwKSksYz09PWwucHJvbWlzZT9wKEIoIlByb21pc2UtY2hhaW4gY3ljbGUiKSk6KHM9SihjKSk/cy5jYWxsKGMsZCxwKTpkKGMpKTpwKG8pfWNhdGNoKHQpe2gmJiF1JiZoLmV4aXQoKSxwKHQpfX1lLnJlYWN0aW9ucz1bXSxlLm5vdGlmaWVkPSExLG4mJiFlLnJlamVjdGlvbiYmdHQodCxlKX0pKX19LFE9ZnVuY3Rpb24odCxlLG4pe3ZhciByLG87Wj8oKHI9ei5jcmVhdGVFdmVudCgiRXZlbnQiKSkucHJvbWlzZT1lLHIucmVhc29uPW4sci5pbml0RXZlbnQodCwhMSwhMCksdS5kaXNwYXRjaEV2ZW50KHIpKTpyPXtwcm9taXNlOmUscmVhc29uOm59LChvPXVbIm9uIit0XSk/byhyKTp0PT09JCYmTygiVW5oYW5kbGVkIHByb21pc2UgcmVqZWN0aW9uIixuKX0sdHQ9ZnVuY3Rpb24odCxlKXtDLmNhbGwodSwoZnVuY3Rpb24oKXt2YXIgbixyPWUudmFsdWU7aWYoZXQoZSkmJihuPUEoKGZ1bmN0aW9uKCl7Rz9WLmVtaXQoInVuaGFuZGxlZFJlamVjdGlvbiIscix0KTpRKCQsdCxyKX0pKSxlLnJlamVjdGlvbj1HfHxldChlKT8yOjEsbi5lcnJvcikpdGhyb3cgbi52YWx1ZX0pKX0sZXQ9ZnVuY3Rpb24odCl7cmV0dXJuIDEhPT10LnJlamVjdGlvbiYmIXQucGFyZW50fSxudD1mdW5jdGlvbih0LGUpe0MuY2FsbCh1LChmdW5jdGlvbigpe0c/Vi5lbWl0KCJyZWplY3Rpb25IYW5kbGVkIix0KTpRKCJyZWplY3Rpb25oYW5kbGVkIix0LGUudmFsdWUpfSkpfSxydD1mdW5jdGlvbih0LGUsbixyKXtyZXR1cm4gZnVuY3Rpb24obyl7dChlLG4sbyxyKX19LG90PWZ1bmN0aW9uKHQsZSxuLHIpe2UuZG9uZXx8KGUuZG9uZT0hMCxyJiYoZT1yKSxlLnZhbHVlPW4sZS5zdGF0ZT0yLFgodCxlLCEwKSl9LGl0PWZ1bmN0aW9uKHQsZSxuLHIpe2lmKCFlLmRvbmUpe2UuZG9uZT0hMCxyJiYoZT1yKTt0cnl7aWYodD09PW4pdGhyb3cgQigiUHJvbWlzZSBjYW4ndCBiZSByZXNvbHZlZCBpdHNlbGYiKTt2YXIgbz1KKG4pO28/aygoZnVuY3Rpb24oKXt2YXIgcj17ZG9uZTohMX07dHJ5e28uY2FsbChuLHJ0KGl0LHQscixlKSxydChvdCx0LHIsZSkpfWNhdGNoKG4pe290KHQscixuLGUpfX0pKTooZS52YWx1ZT1uLGUuc3RhdGU9MSxYKHQsZSwhMSkpfWNhdGNoKG4pe290KHQse2RvbmU6ITF9LG4sZSl9fX07WSYmKFU9ZnVuY3Rpb24odCl7bSh0aGlzLFUsUCkseSh0KSxyLmNhbGwodGhpcyk7dmFyIGU9Tih0aGlzKTt0cnl7dChydChpdCx0aGlzLGUpLHJ0KG90LHRoaXMsZSkpfWNhdGNoKHQpe290KHRoaXMsZSx0KX19LChyPWZ1bmN0aW9uKHQpe0QodGhpcyx7dHlwZTpQLGRvbmU6ITEsbm90aWZpZWQ6ITEscGFyZW50OiExLHJlYWN0aW9uczpbXSxyZWplY3Rpb246ITEsc3RhdGU6MCx2YWx1ZTp2b2lkIDB9KX0pLnByb3RvdHlwZT1wKFUucHJvdG90eXBlLHt0aGVuOmZ1bmN0aW9uKHQsZSl7dmFyIG49Rih0aGlzKSxyPXEoaih0aGlzLFUpKTtyZXR1cm4gci5vaz0iZnVuY3Rpb24iIT10eXBlb2YgdHx8dCxyLmZhaWw9ImZ1bmN0aW9uIj09dHlwZW9mIGUmJmUsci5kb21haW49Rz9WLmRvbWFpbjp2b2lkIDAsbi5wYXJlbnQ9ITAsbi5yZWFjdGlvbnMucHVzaChyKSwwIT1uLnN0YXRlJiZYKHRoaXMsbiwhMSksci5wcm9taXNlfSxjYXRjaDpmdW5jdGlvbih0KXtyZXR1cm4gdGhpcy50aGVuKHZvaWQgMCx0KX19KSxvPWZ1bmN0aW9uKCl7dmFyIHQ9bmV3IHIsZT1OKHQpO3RoaXMucHJvbWlzZT10LHRoaXMucmVzb2x2ZT1ydChpdCx0LGUpLHRoaXMucmVqZWN0PXJ0KG90LHQsZSl9LEkuZj1xPWZ1bmN0aW9uKHQpe3JldHVybiB0PT09VXx8dD09PWk/bmV3IG8odCk6Vyh0KX0sc3x8ImZ1bmN0aW9uIiE9dHlwZW9mIGZ8fChhPWYucHJvdG90eXBlLnRoZW4sZChmLnByb3RvdHlwZSwidGhlbiIsKGZ1bmN0aW9uKHQsZSl7dmFyIG49dGhpcztyZXR1cm4gbmV3IFUoKGZ1bmN0aW9uKHQsZSl7YS5jYWxsKG4sdCxlKX0pKS50aGVuKHQsZSl9KSx7dW5zYWZlOiEwfSksImZ1bmN0aW9uIj09dHlwZW9mIEgmJmMoe2dsb2JhbDohMCxlbnVtZXJhYmxlOiEwLGZvcmNlZDohMH0se2ZldGNoOmZ1bmN0aW9uKHQpe3JldHVybiBTKFUsSC5hcHBseSh1LGFyZ3VtZW50cykpfX0pKSksYyh7Z2xvYmFsOiEwLHdyYXA6ITAsZm9yY2VkOll9LHtQcm9taXNlOlV9KSxoKFUsUCwhMSwhMCksdihQKSxpPWwoUCksYyh7dGFyZ2V0OlAsc3RhdDohMCxmb3JjZWQ6WX0se3JlamVjdDpmdW5jdGlvbih0KXt2YXIgZT1xKHRoaXMpO3JldHVybiBlLnJlamVjdC5jYWxsKHZvaWQgMCx0KSxlLnByb21pc2V9fSksYyh7dGFyZ2V0OlAsc3RhdDohMCxmb3JjZWQ6c3x8WX0se3Jlc29sdmU6ZnVuY3Rpb24odCl7cmV0dXJuIFMocyYmdGhpcz09PWk/VTp0aGlzLHQpfX0pLGMoe3RhcmdldDpQLHN0YXQ6ITAsZm9yY2VkOkt9LHthbGw6ZnVuY3Rpb24odCl7dmFyIGU9dGhpcyxuPXEoZSkscj1uLnJlc29sdmUsbz1uLnJlamVjdCxpPUEoKGZ1bmN0aW9uKCl7dmFyIG49eShlLnJlc29sdmUpLGk9W10sYT0wLGM9MTt3KHQsKGZ1bmN0aW9uKHQpe3ZhciBzPWErKyx1PSExO2kucHVzaCh2b2lkIDApLGMrKyxuLmNhbGwoZSx0KS50aGVuKChmdW5jdGlvbih0KXt1fHwodT0hMCxpW3NdPXQsLS1jfHxyKGkpKX0pLG8pfSkpLC0tY3x8cihpKX0pKTtyZXR1cm4gaS5lcnJvciYmbyhpLnZhbHVlKSxuLnByb21pc2V9LHJhY2U6ZnVuY3Rpb24odCl7dmFyIGU9dGhpcyxuPXEoZSkscj1uLnJlamVjdCxvPUEoKGZ1bmN0aW9uKCl7dmFyIG89eShlLnJlc29sdmUpO3codCwoZnVuY3Rpb24odCl7by5jYWxsKGUsdCkudGhlbihuLnJlc29sdmUscil9KSl9KSk7cmV0dXJuIG8uZXJyb3ImJnIoby52YWx1ZSksbi5wcm9taXNlfX0pfSwyOTI4NDpmdW5jdGlvbih0LGUsbil7dmFyIHI9bigxNDA0NCksbz1uKDc3MDEpLGk9big4NjQ3MCksYT1uKDg3NTc5KSxjPW4oMzIxODcpLHM9bygiUmVmbGVjdCIsImFwcGx5IiksdT1GdW5jdGlvbi5hcHBseTtyKHt0YXJnZXQ6IlJlZmxlY3QiLHN0YXQ6ITAsZm9yY2VkOiFjKChmdW5jdGlvbigpe3MoKGZ1bmN0aW9uKCl7fSkpfSkpfSx7YXBwbHk6ZnVuY3Rpb24odCxlLG4pe3JldHVybiBpKHQpLGEobikscz9zKHQsZSxuKTp1LmNhbGwodCxlLG4pfX0pfSw2MTk0MzpmdW5jdGlvbih0LGUsbil7dmFyIHI9bigxNDA0NCksbz1uKDc3MDEpLGk9big4NjQ3MCksYT1uKDg3NTc5KSxjPW4oMTA1OTIpLHM9big1MDg2OCksdT1uKDczNzM5KSxsPW4oMzIxODcpLGY9bygiUmVmbGVjdCIsImNvbnN0cnVjdCIpLGQ9bCgoZnVuY3Rpb24oKXtmdW5jdGlvbiB0KCl7fXJldHVybiEoZigoZnVuY3Rpb24oKXt9KSxbXSx0KWluc3RhbmNlb2YgdCl9KSkscD0hbCgoZnVuY3Rpb24oKXtmKChmdW5jdGlvbigpe30pKX0pKSxoPWR8fHA7cih7dGFyZ2V0OiJSZWZsZWN0IixzdGF0OiEwLGZvcmNlZDpoLHNoYW06aH0se2NvbnN0cnVjdDpmdW5jdGlvbih0LGUpe2kodCksYShlKTt2YXIgbj1hcmd1bWVudHMubGVuZ3RoPDM/dDppKGFyZ3VtZW50c1syXSk7aWYocCYmIWQpcmV0dXJuIGYodCxlLG4pO2lmKHQ9PW4pe3N3aXRjaChlLmxlbmd0aCl7Y2FzZSAwOnJldHVybiBuZXcgdDtjYXNlIDE6cmV0dXJuIG5ldyB0KGVbMF0pO2Nhc2UgMjpyZXR1cm4gbmV3IHQoZVswXSxlWzFdKTtjYXNlIDM6cmV0dXJuIG5ldyB0KGVbMF0sZVsxXSxlWzJdKTtjYXNlIDQ6cmV0dXJuIG5ldyB0KGVbMF0sZVsxXSxlWzJdLGVbM10pfXZhciByPVtudWxsXTtyZXR1cm4gci5wdXNoLmFwcGx5KHIsZSksbmV3KHUuYXBwbHkodCxyKSl9dmFyIG89bi5wcm90b3R5cGUsbD1zKGMobyk/bzpPYmplY3QucHJvdG90eXBlKSxoPUZ1bmN0aW9uLmFwcGx5LmNhbGwodCxsLGUpO3JldHVybiBjKGgpP2g6bH19KX0sMjY5ODY6ZnVuY3Rpb24odCxlLG4pe3ZhciByPW4oMTQwNDQpLG89big2MjU1NiksaT1uKDg3NTc5KSxhPW4oNTM0OTgpLGM9bigzNzYyMCk7cih7dGFyZ2V0OiJSZWZsZWN0IixzdGF0OiEwLGZvcmNlZDpuKDMyMTg3KSgoZnVuY3Rpb24oKXtSZWZsZWN0LmRlZmluZVByb3BlcnR5KGMuZih7fSwxLHt2YWx1ZToxfSksMSx7dmFsdWU6Mn0pfSkpLHNoYW06IW99LHtkZWZpbmVQcm9wZXJ0eTpmdW5jdGlvbih0LGUsbil7aSh0KTt2YXIgcj1hKGUsITApO2kobik7dHJ5e3JldHVybiBjLmYodCxyLG4pLCEwfWNhdGNoKHQpe3JldHVybiExfX19KX0sMTM2NjpmdW5jdGlvbih0LGUsbil7dmFyIHI9bigxNDA0NCksbz1uKDg3NTc5KSxpPW4oOTcyNTcpLmY7cih7dGFyZ2V0OiJSZWZsZWN0IixzdGF0OiEwfSx7ZGVsZXRlUHJvcGVydHk6ZnVuY3Rpb24odCxlKXt2YXIgbj1pKG8odCksZSk7cmV0dXJuIShuJiYhbi5jb25maWd1cmFibGUpJiZkZWxldGUgdFtlXX19KX0sNDY1OTc6ZnVuY3Rpb24odCxlLG4pe3ZhciByPW4oMTQwNDQpLG89big2MjU1NiksaT1uKDg3NTc5KSxhPW4oOTcyNTcpO3Ioe3RhcmdldDoiUmVmbGVjdCIsc3RhdDohMCxzaGFtOiFvfSx7Z2V0T3duUHJvcGVydHlEZXNjcmlwdG9yOmZ1bmN0aW9uKHQsZSl7cmV0dXJuIGEuZihpKHQpLGUpfX0pfSw3MDEzNjpmdW5jdGlvbih0LGUsbil7dmFyIHI9bigxNDA0NCksbz1uKDg3NTc5KSxpPW4oNjQ5NjUpO3Ioe3RhcmdldDoiUmVmbGVjdCIsc3RhdDohMCxzaGFtOiFuKDcxNjA4KX0se2dldFByb3RvdHlwZU9mOmZ1bmN0aW9uKHQpe3JldHVybiBpKG8odCkpfX0pfSw4MzMxMDpmdW5jdGlvbih0LGUsbil7dmFyIHI9bigxNDA0NCksbz1uKDEwNTkyKSxpPW4oODc1NzkpLGE9big3NjI5OCksYz1uKDk3MjU3KSxzPW4oNjQ5NjUpO3Ioe3RhcmdldDoiUmVmbGVjdCIsc3RhdDohMH0se2dldDpmdW5jdGlvbiB0KGUsbil7dmFyIHIsdSxsPWFyZ3VtZW50cy5sZW5ndGg8Mz9lOmFyZ3VtZW50c1syXTtyZXR1cm4gaShlKT09PWw/ZVtuXToocj1jLmYoZSxuKSk/YShyLCJ2YWx1ZSIpP3IudmFsdWU6dm9pZCAwPT09ci5nZXQ/dm9pZCAwOnIuZ2V0LmNhbGwobCk6byh1PXMoZSkpP3QodSxuLGwpOnZvaWQgMH19KX0sNjA4NjU6ZnVuY3Rpb24odCxlLG4pe24oMTQwNDQpKHt0YXJnZXQ6IlJlZmxlY3QiLHN0YXQ6ITB9LHtoYXM6ZnVuY3Rpb24odCxlKXtyZXR1cm4gZSBpbiB0fX0pfSw2NzcwODpmdW5jdGlvbih0LGUsbil7dmFyIHI9bigxNDA0NCksbz1uKDg3NTc5KSxpPU9iamVjdC5pc0V4dGVuc2libGU7cih7dGFyZ2V0OiJSZWZsZWN0IixzdGF0OiEwfSx7aXNFeHRlbnNpYmxlOmZ1bmN0aW9uKHQpe3JldHVybiBvKHQpLCFpfHxpKHQpfX0pfSw5NjYzODpmdW5jdGlvbih0LGUsbil7bigxNDA0NCkoe3RhcmdldDoiUmVmbGVjdCIsc3RhdDohMH0se293bktleXM6bigyNDQxNSl9KX0sMzk3MzA6ZnVuY3Rpb24odCxlLG4pe3ZhciByPW4oMTQwNDQpLG89big3NzAxKSxpPW4oODc1NzkpO3Ioe3RhcmdldDoiUmVmbGVjdCIsc3RhdDohMCxzaGFtOiFuKDc0NTIwKX0se3ByZXZlbnRFeHRlbnNpb25zOmZ1bmN0aW9uKHQpe2kodCk7dHJ5e3ZhciBlPW8oIk9iamVjdCIsInByZXZlbnRFeHRlbnNpb25zIik7cmV0dXJuIGUmJmUodCksITB9Y2F0Y2godCl7cmV0dXJuITF9fX0pfSw4NTY4NjpmdW5jdGlvbih0LGUsbil7dmFyIHI9bigxNDA0NCksbz1uKDg3NTc5KSxpPW4oNzk4NjEpLGE9big3MTg0Mik7YSYmcih7dGFyZ2V0OiJSZWZsZWN0IixzdGF0OiEwfSx7c2V0UHJvdG90eXBlT2Y6ZnVuY3Rpb24odCxlKXtvKHQpLGkoZSk7dHJ5e3JldHVybiBhKHQsZSksITB9Y2F0Y2godCl7cmV0dXJuITF9fX0pfSw3NDExNTpmdW5jdGlvbih0LGUsbil7dmFyIHI9bigxNDA0NCksbz1uKDg3NTc5KSxpPW4oMTA1OTIpLGE9big3NjI5OCksYz1uKDMyMTg3KSxzPW4oMzc2MjApLHU9big5NzI1NyksbD1uKDY0OTY1KSxmPW4oMTQyMDkpO3Ioe3RhcmdldDoiUmVmbGVjdCIsc3RhdDohMCxmb3JjZWQ6YygoZnVuY3Rpb24oKXt2YXIgdD1zLmYoe30sImEiLHtjb25maWd1cmFibGU6ITB9KTtyZXR1cm4hMSE9PVJlZmxlY3Quc2V0KGwodCksImEiLDEsdCl9KSl9LHtzZXQ6ZnVuY3Rpb24gdChlLG4scil7dmFyIGMsZCxwPWFyZ3VtZW50cy5sZW5ndGg8ND9lOmFyZ3VtZW50c1szXSxoPXUuZihvKGUpLG4pO2lmKCFoKXtpZihpKGQ9bChlKSkpcmV0dXJuIHQoZCxuLHIscCk7aD1mKDApfWlmKGEoaCwidmFsdWUiKSl7aWYoITE9PT1oLndyaXRhYmxlfHwhaShwKSlyZXR1cm4hMTtpZihjPXUuZihwLG4pKXtpZihjLmdldHx8Yy5zZXR8fCExPT09Yy53cml0YWJsZSlyZXR1cm4hMTtjLnZhbHVlPXIscy5mKHAsbixjKX1lbHNlIHMuZihwLG4sZigwLHIpKTtyZXR1cm4hMH1yZXR1cm4gdm9pZCAwIT09aC5zZXQmJihoLnNldC5jYWxsKHAsciksITApfX0pfSw0OTQ5NTpmdW5jdGlvbih0LGUsbil7dmFyIHI9big2MjU1Niksbz1uKDg5NTU4KSxpPW4oNjQ1MDQpLGE9bigzMDI3MiksYz1uKDM3NjIwKS5mLHM9bigxMzMzNCkuZix1PW4oNDMyMjMpLGw9bigyNTQxOSksZj1uKDkyOTEzKSxkPW4oMzIxODcpLHA9big2NzUzOCksaD1uKDIzNzI0KSgibWF0Y2giKSx2PW8uUmVnRXhwLGc9di5wcm90b3R5cGUseT0vYS9nLG09L2EvZyxiPW5ldyB2KHkpIT09eTtpZihyJiZpKCJSZWdFeHAiLCFifHxkKChmdW5jdGlvbigpe3JldHVybiBtW2hdPSExLHYoeSkhPXl8fHYobSk9PW18fCIvYS9pIiE9dih5LCJpIil9KSkpKXtmb3IodmFyIHg9ZnVuY3Rpb24odCxlKXt2YXIgbj10aGlzIGluc3RhbmNlb2YgeCxyPXUodCksbz12b2lkIDA9PT1lO3JldHVybiFuJiZyJiZ0LmNvbnN0cnVjdG9yPT09eCYmbz90OmEoYj9uZXcgdihyJiYhbz90LnNvdXJjZTp0LGUpOnYoKHI9dCBpbnN0YW5jZW9mIHgpP3Quc291cmNlOnQsciYmbz9sLmNhbGwodCk6ZSksbj90aGlzOmcseCl9LHc9ZnVuY3Rpb24odCl7dCBpbiB4fHxjKHgsdCx7Y29uZmlndXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiB2W3RdfSxzZXQ6ZnVuY3Rpb24oZSl7dlt0XT1lfX0pfSxFPXModiksaj0wO0UubGVuZ3RoPmo7KXcoRVtqKytdKTtnLmNvbnN0cnVjdG9yPXgseC5wcm90b3R5cGU9ZyxmKG8sIlJlZ0V4cCIseCl9cCgiUmVnRXhwIil9LDg3MjA5OmZ1bmN0aW9uKHQsZSxuKXsidXNlIHN0cmljdCI7dmFyIHI9bigxNDA0NCksbz1uKDM4NTk4KTtyKHt0YXJnZXQ6IlJlZ0V4cCIscHJvdG86ITAsZm9yY2VkOi8uLy5leGVjIT09b30se2V4ZWM6b30pfSwxODI3NjpmdW5jdGlvbih0LGUsbil7dmFyIHI9big2MjU1Niksbz1uKDM3NjIwKSxpPW4oMjU0MTkpO3ImJiJnIiE9Ly4vZy5mbGFncyYmby5mKFJlZ0V4cC5wcm90b3R5cGUsImZsYWdzIix7Y29uZmlndXJhYmxlOiEwLGdldDppfSl9LDM3NTQ6ZnVuY3Rpb24odCxlLG4peyJ1c2Ugc3RyaWN0Ijt2YXIgcj1uKDkyOTEzKSxvPW4oODc1NzkpLGk9bigzMjE4NyksYT1uKDI1NDE5KSxjPSJ0b1N0cmluZyIscz1SZWdFeHAucHJvdG90eXBlLHU9cy50b1N0cmluZyxsPWkoKGZ1bmN0aW9uKCl7cmV0dXJuIi9hL2IiIT11LmNhbGwoe3NvdXJjZToiYSIsZmxhZ3M6ImIifSl9KSksZj11Lm5hbWUhPWM7KGx8fGYpJiZyKFJlZ0V4cC5wcm90b3R5cGUsYywoZnVuY3Rpb24oKXt2YXIgdD1vKHRoaXMpLGU9U3RyaW5nKHQuc291cmNlKSxuPXQuZmxhZ3M7cmV0dXJuIi8iK2UrIi8iK1N0cmluZyh2b2lkIDA9PT1uJiZ0IGluc3RhbmNlb2YgUmVnRXhwJiYhKCJmbGFncyJpbiBzKT9hLmNhbGwodCk6bil9KSx7dW5zYWZlOiEwfSl9LDc0MDYxOmZ1bmN0aW9uKHQsZSxuKXsidXNlIHN0cmljdCI7dmFyIHI9big4MTk1MSksbz1uKDY0NTApO3QuZXhwb3J0cz1yKCJTZXQiLChmdW5jdGlvbih0KXtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gdCh0aGlzLGFyZ3VtZW50cy5sZW5ndGg/YXJndW1lbnRzWzBdOnZvaWQgMCl9fSksbyl9LDQxNzczOmZ1bmN0aW9uKHQsZSxuKXsidXNlIHN0cmljdCI7dmFyIHI9bigxNDA0NCksbz1uKDMxMzUxKTtyKHt0YXJnZXQ6IlN0cmluZyIscHJvdG86ITAsZm9yY2VkOm4oNTIxMjkpKCJhbmNob3IiKX0se2FuY2hvcjpmdW5jdGlvbih0KXtyZXR1cm4gbyh0aGlzLCJhIiwibmFtZSIsdCl9fSl9LDMwNDAyOmZ1bmN0aW9uKHQsZSxuKXsidXNlIHN0cmljdCI7dmFyIHI9bigxNDA0NCksbz1uKDMxMzUxKTtyKHt0YXJnZXQ6IlN0cmluZyIscHJvdG86ITAsZm9yY2VkOm4oNTIxMjkpKCJiaWciKX0se2JpZzpmdW5jdGlvbigpe3JldHVybiBvKHRoaXMsImJpZyIsIiIsIiIpfX0pfSwxODE3NTpmdW5jdGlvbih0LGUsbil7InVzZSBzdHJpY3QiO3ZhciByPW4oMTQwNDQpLG89bigzMTM1MSk7cih7dGFyZ2V0OiJTdHJpbmciLHByb3RvOiEwLGZvcmNlZDpuKDUyMTI5KSgiYmxpbmsiKX0se2JsaW5rOmZ1bmN0aW9uKCl7cmV0dXJuIG8odGhpcywiYmxpbmsiLCIiLCIiKX19KX0sNjY4OTY6ZnVuY3Rpb24odCxlLG4peyJ1c2Ugc3RyaWN0Ijt2YXIgcj1uKDE0MDQ0KSxvPW4oMzEzNTEpO3Ioe3RhcmdldDoiU3RyaW5nIixwcm90bzohMCxmb3JjZWQ6big1MjEyOSkoImJvbGQiKX0se2JvbGQ6ZnVuY3Rpb24oKXtyZXR1cm4gbyh0aGlzLCJiIiwiIiwiIil9fSl9LDE1MzczOmZ1bmN0aW9uKHQsZSxuKXsidXNlIHN0cmljdCI7dmFyIHI9bigxNDA0NCksbz1uKDYwMTQwKS5jb2RlQXQ7cih7dGFyZ2V0OiJTdHJpbmciLHByb3RvOiEwfSx7Y29kZVBvaW50QXQ6ZnVuY3Rpb24odCl7cmV0dXJuIG8odGhpcyx0KX19KX0sOTc2ODg6ZnVuY3Rpb24odCxlLG4peyJ1c2Ugc3RyaWN0Ijt2YXIgcixvPW4oMTQwNDQpLGk9big5NzI1NykuZixhPW4oMjc4ODQpLGM9big5OTM0Nikscz1uKDcwMTMyKSx1PW4oOTM5MTUpLGw9big2NTY3MiksZj0iIi5lbmRzV2l0aCxkPU1hdGgubWluLHA9dSgiZW5kc1dpdGgiKTtvKHt0YXJnZXQ6IlN0cmluZyIscHJvdG86ITAsZm9yY2VkOiEhKGx8fHB8fChyPWkoU3RyaW5nLnByb3RvdHlwZSwiZW5kc1dpdGgiKSwhcnx8ci53cml0YWJsZSkpJiYhcH0se2VuZHNXaXRoOmZ1bmN0aW9uKHQpe3ZhciBlPVN0cmluZyhzKHRoaXMpKTtjKHQpO3ZhciBuPWFyZ3VtZW50cy5sZW5ndGg+MT9hcmd1bWVudHNbMV06dm9pZCAwLHI9YShlLmxlbmd0aCksbz12b2lkIDA9PT1uP3I6ZChhKG4pLHIpLGk9U3RyaW5nKHQpO3JldHVybiBmP2YuY2FsbChlLGksbyk6ZS5zbGljZShvLWkubGVuZ3RoLG8pPT09aX19KX0sODU3Njc6ZnVuY3Rpb24odCxlLG4peyJ1c2Ugc3RyaWN0Ijt2YXIgcj1uKDE0MDQ0KSxvPW4oMzEzNTEpO3Ioe3RhcmdldDoiU3RyaW5nIixwcm90bzohMCxmb3JjZWQ6big1MjEyOSkoImZpeGVkIil9LHtmaXhlZDpmdW5jdGlvbigpe3JldHVybiBvKHRoaXMsInR0IiwiIiwiIil9fSl9LDg0MzY6ZnVuY3Rpb24odCxlLG4peyJ1c2Ugc3RyaWN0Ijt2YXIgcj1uKDE0MDQ0KSxvPW4oMzEzNTEpO3Ioe3RhcmdldDoiU3RyaW5nIixwcm90bzohMCxmb3JjZWQ6big1MjEyOSkoImZvbnRjb2xvciIpfSx7Zm9udGNvbG9yOmZ1bmN0aW9uKHQpe3JldHVybiBvKHRoaXMsImZvbnQiLCJjb2xvciIsdCl9fSl9LDkyMTkyOmZ1bmN0aW9uKHQsZSxuKXsidXNlIHN0cmljdCI7dmFyIHI9bigxNDA0NCksbz1uKDMxMzUxKTtyKHt0YXJnZXQ6IlN0cmluZyIscHJvdG86ITAsZm9yY2VkOm4oNTIxMjkpKCJmb250c2l6ZSIpfSx7Zm9udHNpemU6ZnVuY3Rpb24odCl7cmV0dXJuIG8odGhpcywiZm9udCIsInNpemUiLHQpfX0pfSwxMDc0MzpmdW5jdGlvbih0LGUsbil7dmFyIHI9bigxNDA0NCksbz1uKDc2OTc2KSxpPVN0cmluZy5mcm9tQ2hhckNvZGUsYT1TdHJpbmcuZnJvbUNvZGVQb2ludDtyKHt0YXJnZXQ6IlN0cmluZyIsc3RhdDohMCxmb3JjZWQ6ISFhJiYxIT1hLmxlbmd0aH0se2Zyb21Db2RlUG9pbnQ6ZnVuY3Rpb24odCl7Zm9yKHZhciBlLG49W10scj1hcmd1bWVudHMubGVuZ3RoLGE9MDtyPmE7KXtpZihlPSthcmd1bWVudHNbYSsrXSxvKGUsMTExNDExMSkhPT1lKXRocm93IFJhbmdlRXJyb3IoZSsiIGlzIG5vdCBhIHZhbGlkIGNvZGUgcG9pbnQiKTtuLnB1c2goZTw2NTUzNj9pKGUpOmkoNTUyOTYrKChlLT02NTUzNik+PjEwKSxlJTEwMjQrNTYzMjApKX1yZXR1cm4gbi5qb2luKCIiKX19KX0sNzQ1NjM6ZnVuY3Rpb24odCxlLG4peyJ1c2Ugc3RyaWN0Ijt2YXIgcj1uKDE0MDQ0KSxvPW4oOTkzNDYpLGk9big3MDEzMik7cih7dGFyZ2V0OiJTdHJpbmciLHByb3RvOiEwLGZvcmNlZDohbig5MzkxNSkoImluY2x1ZGVzIil9LHtpbmNsdWRlczpmdW5jdGlvbih0KXtyZXR1cm4hIX5TdHJpbmcoaSh0aGlzKSkuaW5kZXhPZihvKHQpLGFyZ3VtZW50cy5sZW5ndGg+MT9hcmd1bWVudHNbMV06dm9pZCAwKX19KX0sMTIxNTU6ZnVuY3Rpb24odCxlLG4peyJ1c2Ugc3RyaWN0Ijt2YXIgcj1uKDE0MDQ0KSxvPW4oMzEzNTEpO3Ioe3RhcmdldDoiU3RyaW5nIixwcm90bzohMCxmb3JjZWQ6big1MjEyOSkoIml0YWxpY3MiKX0se2l0YWxpY3M6ZnVuY3Rpb24oKXtyZXR1cm4gbyh0aGlzLCJpIiwiIiwiIil9fSl9LDgyMjAxOmZ1bmN0aW9uKHQsZSxuKXsidXNlIHN0cmljdCI7dmFyIHI9big2MDE0MCkuY2hhckF0LG89big4OTgyNyksaT1uKDQ2MDYxKSxhPSJTdHJpbmcgSXRlcmF0b3IiLGM9by5zZXQscz1vLmdldHRlckZvcihhKTtpKFN0cmluZywiU3RyaW5nIiwoZnVuY3Rpb24odCl7Yyh0aGlzLHt0eXBlOmEsc3RyaW5nOlN0cmluZyh0KSxpbmRleDowfSl9KSwoZnVuY3Rpb24oKXt2YXIgdCxlPXModGhpcyksbj1lLnN0cmluZyxvPWUuaW5kZXg7cmV0dXJuIG8+PW4ubGVuZ3RoP3t2YWx1ZTp2b2lkIDAsZG9uZTohMH06KHQ9cihuLG8pLGUuaW5kZXgrPXQubGVuZ3RoLHt2YWx1ZTp0LGRvbmU6ITF9KX0pKX0sMjYwMTY6ZnVuY3Rpb24odCxlLG4peyJ1c2Ugc3RyaWN0Ijt2YXIgcj1uKDE0MDQ0KSxvPW4oMzEzNTEpO3Ioe3RhcmdldDoiU3RyaW5nIixwcm90bzohMCxmb3JjZWQ6big1MjEyOSkoImxpbmsiKX0se2xpbms6ZnVuY3Rpb24odCl7cmV0dXJuIG8odGhpcywiYSIsImhyZWYiLHQpfX0pfSw4MTI3NzpmdW5jdGlvbih0LGUsbil7InVzZSBzdHJpY3QiO3ZhciByPW4oMTQwNDQpLG89big3MTIwMSksaT1uKDcwMTMyKSxhPW4oMjc4ODQpLGM9big4NjQ3MCkscz1uKDg3NTc5KSx1PW4oMjQ1OTQpLGw9big0MzIyMyksZj1uKDI1NDE5KSxkPW4oNjY5NzEpLHA9bigzMjE4NyksaD1uKDIzNzI0KSx2PW4oMTM5NzkpLGc9big1MzE0MSkseT1uKDg5ODI3KSxtPW4oNjU2NzIpLGI9aCgibWF0Y2hBbGwiKSx4PSJSZWdFeHAgU3RyaW5nIix3PSJSZWdFeHAgU3RyaW5nIEl0ZXJhdG9yIixFPXkuc2V0LGo9eS5nZXR0ZXJGb3IodyksQz1SZWdFeHAucHJvdG90eXBlLGs9Qy5leGVjLFM9IiIubWF0Y2hBbGwsTz0hIVMmJiFwKChmdW5jdGlvbigpeyJhIi5tYXRjaEFsbCgvLi8pfSkpLEk9bygoZnVuY3Rpb24odCxlLG4scil7RSh0aGlzLHt0eXBlOncscmVnZXhwOnQsc3RyaW5nOmUsZ2xvYmFsOm4sdW5pY29kZTpyLGRvbmU6ITF9KX0pLHgsKGZ1bmN0aW9uKCl7dmFyIHQ9aih0aGlzKTtpZih0LmRvbmUpcmV0dXJue3ZhbHVlOnZvaWQgMCxkb25lOiEwfTt2YXIgZT10LnJlZ2V4cCxuPXQuc3RyaW5nLHI9ZnVuY3Rpb24odCxlKXt2YXIgbixyPXQuZXhlYztpZigiZnVuY3Rpb24iPT10eXBlb2Ygcil7aWYoIm9iamVjdCIhPXR5cGVvZihuPXIuY2FsbCh0LGUpKSl0aHJvdyBUeXBlRXJyb3IoIkluY29ycmVjdCBleGVjIHJlc3VsdCIpO3JldHVybiBufXJldHVybiBrLmNhbGwodCxlKX0oZSxuKTtyZXR1cm4gbnVsbD09PXI/e3ZhbHVlOnZvaWQgMCxkb25lOnQuZG9uZT0hMH06dC5nbG9iYWw/KCIiPT1TdHJpbmcoclswXSkmJihlLmxhc3RJbmRleD1nKG4sYShlLmxhc3RJbmRleCksdC51bmljb2RlKSkse3ZhbHVlOnIsZG9uZTohMX0pOih0LmRvbmU9ITAse3ZhbHVlOnIsZG9uZTohMX0pfSkpLEE9ZnVuY3Rpb24odCl7dmFyIGUsbixyLG8saSxjLHU9cyh0aGlzKSxsPVN0cmluZyh0KTtyZXR1cm4gZT12KHUsUmVnRXhwKSx2b2lkIDA9PT0obj11LmZsYWdzKSYmdSBpbnN0YW5jZW9mIFJlZ0V4cCYmISgiZmxhZ3MiaW4gQykmJihuPWYuY2FsbCh1KSkscj12b2lkIDA9PT1uPyIiOlN0cmluZyhuKSxvPW5ldyBlKGU9PT1SZWdFeHA/dS5zb3VyY2U6dSxyKSxpPSEhfnIuaW5kZXhPZigiZyIpLGM9ISF+ci5pbmRleE9mKCJ1Iiksby5sYXN0SW5kZXg9YSh1Lmxhc3RJbmRleCksbmV3IEkobyxsLGksYyl9O3Ioe3RhcmdldDoiU3RyaW5nIixwcm90bzohMCxmb3JjZWQ6T30se21hdGNoQWxsOmZ1bmN0aW9uKHQpe3ZhciBlLG4scixvPWkodGhpcyk7aWYobnVsbCE9dCl7aWYobCh0KSYmIX5TdHJpbmcoaSgiZmxhZ3MiaW4gQz90LmZsYWdzOmYuY2FsbCh0KSkpLmluZGV4T2YoImciKSl0aHJvdyBUeXBlRXJyb3IoImAubWF0Y2hBbGxgIGRvZXMgbm90IGFsbG93IG5vbi1nbG9iYWwgcmVnZXhlcyIpO2lmKE8pcmV0dXJuIFMuYXBwbHkobyxhcmd1bWVudHMpO2lmKHZvaWQgMD09PShuPXRbYl0pJiZtJiYiUmVnRXhwIj09dSh0KSYmKG49QSksbnVsbCE9bilyZXR1cm4gYyhuKS5jYWxsKHQsbyl9ZWxzZSBpZihPKXJldHVybiBTLmFwcGx5KG8sYXJndW1lbnRzKTtyZXR1cm4gZT1TdHJpbmcobykscj1uZXcgUmVnRXhwKHQsImciKSxtP0EuY2FsbChyLGUpOnJbYl0oZSl9fSksbXx8YiBpbiBDfHxkKEMsYixBKX0sNjUwMDM6ZnVuY3Rpb24odCxlLG4peyJ1c2Ugc3RyaWN0Ijt2YXIgcj1uKDM1ODYwKSxvPW4oODc1NzkpLGk9bigyNzg4NCksYT1uKDcwMTMyKSxjPW4oNTMxNDEpLHM9bigzNTQ1NSk7cigibWF0Y2giLDEsKGZ1bmN0aW9uKHQsZSxuKXtyZXR1cm5bZnVuY3Rpb24oZSl7dmFyIG49YSh0aGlzKSxyPW51bGw9PWU/dm9pZCAwOmVbdF07cmV0dXJuIHZvaWQgMCE9PXI/ci5jYWxsKGUsbik6bmV3IFJlZ0V4cChlKVt0XShTdHJpbmcobikpfSxmdW5jdGlvbih0KXt2YXIgcj1uKGUsdCx0aGlzKTtpZihyLmRvbmUpcmV0dXJuIHIudmFsdWU7dmFyIGE9byh0KSx1PVN0cmluZyh0aGlzKTtpZighYS5nbG9iYWwpcmV0dXJuIHMoYSx1KTt2YXIgbD1hLnVuaWNvZGU7YS5sYXN0SW5kZXg9MDtmb3IodmFyIGYsZD1bXSxwPTA7bnVsbCE9PShmPXMoYSx1KSk7KXt2YXIgaD1TdHJpbmcoZlswXSk7ZFtwXT1oLCIiPT09aCYmKGEubGFzdEluZGV4PWModSxpKGEubGFzdEluZGV4KSxsKSkscCsrfXJldHVybiAwPT09cD9udWxsOmR9XX0pKX0sNDQwMTk6ZnVuY3Rpb24odCxlLG4peyJ1c2Ugc3RyaWN0Ijt2YXIgcj1uKDE0MDQ0KSxvPW4oMjY1NzMpLmVuZDtyKHt0YXJnZXQ6IlN0cmluZyIscHJvdG86ITAsZm9yY2VkOm4oNDIxODQpfSx7cGFkRW5kOmZ1bmN0aW9uKHQpe3JldHVybiBvKHRoaXMsdCxhcmd1bWVudHMubGVuZ3RoPjE/YXJndW1lbnRzWzFdOnZvaWQgMCl9fSl9LDM4MjpmdW5jdGlvbih0LGUsbil7InVzZSBzdHJpY3QiO3ZhciByPW4oMTQwNDQpLG89bigyNjU3Mykuc3RhcnQ7cih7dGFyZ2V0OiJTdHJpbmciLHByb3RvOiEwLGZvcmNlZDpuKDQyMTg0KX0se3BhZFN0YXJ0OmZ1bmN0aW9uKHQpe3JldHVybiBvKHRoaXMsdCxhcmd1bWVudHMubGVuZ3RoPjE/YXJndW1lbnRzWzFdOnZvaWQgMCl9fSl9LDgwNTExOmZ1bmN0aW9uKHQsZSxuKXt2YXIgcj1uKDE0MDQ0KSxvPW4oOTU3MyksaT1uKDI3ODg0KTtyKHt0YXJnZXQ6IlN0cmluZyIsc3RhdDohMH0se3JhdzpmdW5jdGlvbih0KXtmb3IodmFyIGU9byh0LnJhdyksbj1pKGUubGVuZ3RoKSxyPWFyZ3VtZW50cy5sZW5ndGgsYT1bXSxjPTA7bj5jOylhLnB1c2goU3RyaW5nKGVbYysrXSkpLGM8ciYmYS5wdXNoKFN0cmluZyhhcmd1bWVudHNbY10pKTtyZXR1cm4gYS5qb2luKCIiKX19KX0sMTg4MjM6ZnVuY3Rpb24odCxlLG4pe24oMTQwNDQpKHt0YXJnZXQ6IlN0cmluZyIscHJvdG86ITB9LHtyZXBlYXQ6big2ODI1Myl9KX0sMzMzMjI6ZnVuY3Rpb24odCxlLG4peyJ1c2Ugc3RyaWN0Ijt2YXIgcj1uKDM1ODYwKSxvPW4oODc1NzkpLGk9bigxOTIwOSksYT1uKDI3ODg0KSxjPW4oNDM0MTYpLHM9big3MDEzMiksdT1uKDUzMTQxKSxsPW4oMzU0NTUpLGY9TWF0aC5tYXgsZD1NYXRoLm1pbixwPU1hdGguZmxvb3IsaD0vXCQoWyQmJ2BdfFxkXGQ/fDxbXj5dKj4pL2csdj0vXCQoWyQmJ2BdfFxkXGQ/KS9nO3IoInJlcGxhY2UiLDIsKGZ1bmN0aW9uKHQsZSxuKXtyZXR1cm5bZnVuY3Rpb24obixyKXt2YXIgbz1zKHRoaXMpLGk9bnVsbD09bj92b2lkIDA6blt0XTtyZXR1cm4gdm9pZCAwIT09aT9pLmNhbGwobixvLHIpOmUuY2FsbChTdHJpbmcobyksbixyKX0sZnVuY3Rpb24odCxpKXt2YXIgcz1uKGUsdCx0aGlzLGkpO2lmKHMuZG9uZSlyZXR1cm4gcy52YWx1ZTt2YXIgcD1vKHQpLGg9U3RyaW5nKHRoaXMpLHY9ImZ1bmN0aW9uIj09dHlwZW9mIGk7dnx8KGk9U3RyaW5nKGkpKTt2YXIgZz1wLmdsb2JhbDtpZihnKXt2YXIgeT1wLnVuaWNvZGU7cC5sYXN0SW5kZXg9MH1mb3IodmFyIG09W107Oyl7dmFyIGI9bChwLGgpO2lmKG51bGw9PT1iKWJyZWFrO2lmKG0ucHVzaChiKSwhZylicmVhazsiIj09PVN0cmluZyhiWzBdKSYmKHAubGFzdEluZGV4PXUoaCxhKHAubGFzdEluZGV4KSx5KSl9Zm9yKHZhciB4LHc9IiIsRT0wLGo9MDtqPG0ubGVuZ3RoO2orKyl7Yj1tW2pdO2Zvcih2YXIgQz1TdHJpbmcoYlswXSksaz1mKGQoYyhiLmluZGV4KSxoLmxlbmd0aCksMCksUz1bXSxPPTE7TzxiLmxlbmd0aDtPKyspUy5wdXNoKHZvaWQgMD09PSh4PWJbT10pP3g6U3RyaW5nKHgpKTt2YXIgST1iLmdyb3VwcztpZih2KXt2YXIgQT1bQ10uY29uY2F0KFMsayxoKTt2b2lkIDAhPT1JJiZBLnB1c2goSSk7dmFyIFQ9U3RyaW5nKGkuYXBwbHkodm9pZCAwLEEpKX1lbHNlIFQ9cihDLGgsayxTLEksaSk7az49RSYmKHcrPWguc2xpY2UoRSxrKStULEU9aytDLmxlbmd0aCl9cmV0dXJuIHcraC5zbGljZShFKX1dO2Z1bmN0aW9uIHIodCxuLHIsbyxhLGMpe3ZhciBzPXIrdC5sZW5ndGgsdT1vLmxlbmd0aCxsPXY7cmV0dXJuIHZvaWQgMCE9PWEmJihhPWkoYSksbD1oKSxlLmNhbGwoYyxsLChmdW5jdGlvbihlLGkpe3ZhciBjO3N3aXRjaChpLmNoYXJBdCgwKSl7Y2FzZSIkIjpyZXR1cm4iJCI7Y2FzZSImIjpyZXR1cm4gdDtjYXNlImAiOnJldHVybiBuLnNsaWNlKDAscik7Y2FzZSInIjpyZXR1cm4gbi5zbGljZShzKTtjYXNlIjwiOmM9YVtpLnNsaWNlKDEsLTEpXTticmVhaztkZWZhdWx0OnZhciBsPStpO2lmKDA9PT1sKXJldHVybiBlO2lmKGw+dSl7dmFyIGY9cChsLzEwKTtyZXR1cm4gMD09PWY/ZTpmPD11P3ZvaWQgMD09PW9bZi0xXT9pLmNoYXJBdCgxKTpvW2YtMV0raS5jaGFyQXQoMSk6ZX1jPW9bbC0xXX1yZXR1cm4gdm9pZCAwPT09Yz8iIjpjfSkpfX0pKX0sMzMwNjU6ZnVuY3Rpb24odCxlLG4peyJ1c2Ugc3RyaWN0Ijt2YXIgcj1uKDM1ODYwKSxvPW4oODc1NzkpLGk9big3MDEzMiksYT1uKDc2NDgyKSxjPW4oMzU0NTUpO3IoInNlYXJjaCIsMSwoZnVuY3Rpb24odCxlLG4pe3JldHVybltmdW5jdGlvbihlKXt2YXIgbj1pKHRoaXMpLHI9bnVsbD09ZT92b2lkIDA6ZVt0XTtyZXR1cm4gdm9pZCAwIT09cj9yLmNhbGwoZSxuKTpuZXcgUmVnRXhwKGUpW3RdKFN0cmluZyhuKSl9LGZ1bmN0aW9uKHQpe3ZhciByPW4oZSx0LHRoaXMpO2lmKHIuZG9uZSlyZXR1cm4gci52YWx1ZTt2YXIgaT1vKHQpLHM9U3RyaW5nKHRoaXMpLHU9aS5sYXN0SW5kZXg7YSh1LDApfHwoaS5sYXN0SW5kZXg9MCk7dmFyIGw9YyhpLHMpO3JldHVybiBhKGkubGFzdEluZGV4LHUpfHwoaS5sYXN0SW5kZXg9dSksbnVsbD09PWw/LTE6bC5pbmRleH1dfSkpfSw3NDExNzpmdW5jdGlvbih0LGUsbil7InVzZSBzdHJpY3QiO3ZhciByPW4oMTQwNDQpLG89bigzMTM1MSk7cih7dGFyZ2V0OiJTdHJpbmciLHByb3RvOiEwLGZvcmNlZDpuKDUyMTI5KSgic21hbGwiKX0se3NtYWxsOmZ1bmN0aW9uKCl7cmV0dXJuIG8odGhpcywic21hbGwiLCIiLCIiKX19KX0sMTc0OTQ6ZnVuY3Rpb24odCxlLG4peyJ1c2Ugc3RyaWN0Ijt2YXIgcj1uKDM1ODYwKSxvPW4oNDMyMjMpLGk9big4NzU3OSksYT1uKDcwMTMyKSxjPW4oMTM5NzkpLHM9big1MzE0MSksdT1uKDI3ODg0KSxsPW4oMzU0NTUpLGY9bigzODU5OCksZD1uKDMyMTg3KSxwPVtdLnB1c2gsaD1NYXRoLm1pbix2PTQyOTQ5NjcyOTUsZz0hZCgoZnVuY3Rpb24oKXtyZXR1cm4hUmVnRXhwKHYsInkiKX0pKTtyKCJzcGxpdCIsMiwoZnVuY3Rpb24odCxlLG4pe3ZhciByO3JldHVybiByPSJjIj09ImFiYmMiLnNwbGl0KC8oYikqLylbMV18fDQhPSJ0ZXN0Ii5zcGxpdCgvKD86KS8sLTEpLmxlbmd0aHx8MiE9ImFiIi5zcGxpdCgvKD86YWIpKi8pLmxlbmd0aHx8NCE9Ii4iLnNwbGl0KC8oLj8pKC4/KS8pLmxlbmd0aHx8Ii4iLnNwbGl0KC8oKSgpLykubGVuZ3RoPjF8fCIiLnNwbGl0KC8uPy8pLmxlbmd0aD9mdW5jdGlvbih0LG4pe3ZhciByPVN0cmluZyhhKHRoaXMpKSxpPXZvaWQgMD09PW4/djpuPj4+MDtpZigwPT09aSlyZXR1cm5bXTtpZih2b2lkIDA9PT10KXJldHVybltyXTtpZighbyh0KSlyZXR1cm4gZS5jYWxsKHIsdCxpKTtmb3IodmFyIGMscyx1LGw9W10sZD0odC5pZ25vcmVDYXNlPyJpIjoiIikrKHQubXVsdGlsaW5lPyJtIjoiIikrKHQudW5pY29kZT8idSI6IiIpKyh0LnN0aWNreT8ieSI6IiIpLGg9MCxnPW5ldyBSZWdFeHAodC5zb3VyY2UsZCsiZyIpOyhjPWYuY2FsbChnLHIpKSYmISgocz1nLmxhc3RJbmRleCk+aCYmKGwucHVzaChyLnNsaWNlKGgsYy5pbmRleCkpLGMubGVuZ3RoPjEmJmMuaW5kZXg8ci5sZW5ndGgmJnAuYXBwbHkobCxjLnNsaWNlKDEpKSx1PWNbMF0ubGVuZ3RoLGg9cyxsLmxlbmd0aD49aSkpOylnLmxhc3RJbmRleD09PWMuaW5kZXgmJmcubGFzdEluZGV4Kys7cmV0dXJuIGg9PT1yLmxlbmd0aD8hdSYmZy50ZXN0KCIiKXx8bC5wdXNoKCIiKTpsLnB1c2goci5zbGljZShoKSksbC5sZW5ndGg+aT9sLnNsaWNlKDAsaSk6bH06IjAiLnNwbGl0KHZvaWQgMCwwKS5sZW5ndGg/ZnVuY3Rpb24odCxuKXtyZXR1cm4gdm9pZCAwPT09dCYmMD09PW4/W106ZS5jYWxsKHRoaXMsdCxuKX06ZSxbZnVuY3Rpb24oZSxuKXt2YXIgbz1hKHRoaXMpLGk9bnVsbD09ZT92b2lkIDA6ZVt0XTtyZXR1cm4gdm9pZCAwIT09aT9pLmNhbGwoZSxvLG4pOnIuY2FsbChTdHJpbmcobyksZSxuKX0sZnVuY3Rpb24odCxvKXt2YXIgYT1uKHIsdCx0aGlzLG8sciE9PWUpO2lmKGEuZG9uZSlyZXR1cm4gYS52YWx1ZTt2YXIgZj1pKHQpLGQ9U3RyaW5nKHRoaXMpLHA9YyhmLFJlZ0V4cCkseT1mLnVuaWNvZGUsbT0oZi5pZ25vcmVDYXNlPyJpIjoiIikrKGYubXVsdGlsaW5lPyJtIjoiIikrKGYudW5pY29kZT8idSI6IiIpKyhnPyJ5IjoiZyIpLGI9bmV3IHAoZz9mOiJeKD86IitmLnNvdXJjZSsiKSIsbSkseD12b2lkIDA9PT1vP3Y6bz4+PjA7aWYoMD09PXgpcmV0dXJuW107aWYoMD09PWQubGVuZ3RoKXJldHVybiBudWxsPT09bChiLGQpP1tkXTpbXTtmb3IodmFyIHc9MCxFPTAsaj1bXTtFPGQubGVuZ3RoOyl7Yi5sYXN0SW5kZXg9Zz9FOjA7dmFyIEMsaz1sKGIsZz9kOmQuc2xpY2UoRSkpO2lmKG51bGw9PT1rfHwoQz1oKHUoYi5sYXN0SW5kZXgrKGc/MDpFKSksZC5sZW5ndGgpKT09PXcpRT1zKGQsRSx5KTtlbHNle2lmKGoucHVzaChkLnNsaWNlKHcsRSkpLGoubGVuZ3RoPT09eClyZXR1cm4gajtmb3IodmFyIFM9MTtTPD1rLmxlbmd0aC0xO1MrKylpZihqLnB1c2goa1tTXSksai5sZW5ndGg9PT14KXJldHVybiBqO0U9dz1DfX1yZXR1cm4gai5wdXNoKGQuc2xpY2UodykpLGp9XX0pLCFnKX0sODAzNjM6ZnVuY3Rpb24odCxlLG4peyJ1c2Ugc3RyaWN0Ijt2YXIgcixvPW4oMTQwNDQpLGk9big5NzI1NykuZixhPW4oMjc4ODQpLGM9big5OTM0Nikscz1uKDcwMTMyKSx1PW4oOTM5MTUpLGw9big2NTY3MiksZj0iIi5zdGFydHNXaXRoLGQ9TWF0aC5taW4scD11KCJzdGFydHNXaXRoIik7byh7dGFyZ2V0OiJTdHJpbmciLHByb3RvOiEwLGZvcmNlZDohIShsfHxwfHwocj1pKFN0cmluZy5wcm90b3R5cGUsInN0YXJ0c1dpdGgiKSwhcnx8ci53cml0YWJsZSkpJiYhcH0se3N0YXJ0c1dpdGg6ZnVuY3Rpb24odCl7dmFyIGU9U3RyaW5nKHModGhpcykpO2ModCk7dmFyIG49YShkKGFyZ3VtZW50cy5sZW5ndGg+MT9hcmd1bWVudHNbMV06dm9pZCAwLGUubGVuZ3RoKSkscj1TdHJpbmcodCk7cmV0dXJuIGY/Zi5jYWxsKGUscixuKTplLnNsaWNlKG4sbityLmxlbmd0aCk9PT1yfX0pfSwyODAwMzpmdW5jdGlvbih0LGUsbil7InVzZSBzdHJpY3QiO3ZhciByPW4oMTQwNDQpLG89bigzMTM1MSk7cih7dGFyZ2V0OiJTdHJpbmciLHByb3RvOiEwLGZvcmNlZDpuKDUyMTI5KSgic3RyaWtlIil9LHtzdHJpa2U6ZnVuY3Rpb24oKXtyZXR1cm4gbyh0aGlzLCJzdHJpa2UiLCIiLCIiKX19KX0sNjc5NDE6ZnVuY3Rpb24odCxlLG4peyJ1c2Ugc3RyaWN0Ijt2YXIgcj1uKDE0MDQ0KSxvPW4oMzEzNTEpO3Ioe3RhcmdldDoiU3RyaW5nIixwcm90bzohMCxmb3JjZWQ6big1MjEyOSkoInN1YiIpfSx7c3ViOmZ1bmN0aW9uKCl7cmV0dXJuIG8odGhpcywic3ViIiwiIiwiIil9fSl9LDQ0MDUxOmZ1bmN0aW9uKHQsZSxuKXsidXNlIHN0cmljdCI7dmFyIHI9bigxNDA0NCksbz1uKDMxMzUxKTtyKHt0YXJnZXQ6IlN0cmluZyIscHJvdG86ITAsZm9yY2VkOm4oNTIxMjkpKCJzdXAiKX0se3N1cDpmdW5jdGlvbigpe3JldHVybiBvKHRoaXMsInN1cCIsIiIsIiIpfX0pfSw3NDc5NTpmdW5jdGlvbih0LGUsbil7InVzZSBzdHJpY3QiO3ZhciByPW4oMTQwNDQpLG89big4MjM1MCkuZW5kLGk9big4NDc1NCkoInRyaW1FbmQiKSxhPWk/ZnVuY3Rpb24oKXtyZXR1cm4gbyh0aGlzKX06IiIudHJpbUVuZDtyKHt0YXJnZXQ6IlN0cmluZyIscHJvdG86ITAsZm9yY2VkOml9LHt0cmltRW5kOmEsdHJpbVJpZ2h0OmF9KX0sNjkxODg6ZnVuY3Rpb24odCxlLG4peyJ1c2Ugc3RyaWN0Ijt2YXIgcj1uKDE0MDQ0KSxvPW4oODIzNTApLnN0YXJ0LGk9big4NDc1NCkoInRyaW1TdGFydCIpLGE9aT9mdW5jdGlvbigpe3JldHVybiBvKHRoaXMpfToiIi50cmltU3RhcnQ7cih7dGFyZ2V0OiJTdHJpbmciLHByb3RvOiEwLGZvcmNlZDppfSx7dHJpbVN0YXJ0OmEsdHJpbUxlZnQ6YX0pfSw0MzM5NjpmdW5jdGlvbih0LGUsbil7InVzZSBzdHJpY3QiO3ZhciByPW4oMTQwNDQpLG89big4MjM1MCkudHJpbTtyKHt0YXJnZXQ6IlN0cmluZyIscHJvdG86ITAsZm9yY2VkOm4oODQ3NTQpKCJ0cmltIil9LHt0cmltOmZ1bmN0aW9uKCl7cmV0dXJuIG8odGhpcyl9fSl9LDUxMDkwOmZ1bmN0aW9uKHQsZSxuKXtuKDkyMjc1KSgiYXN5bmNJdGVyYXRvciIpfSwyNDc4NTpmdW5jdGlvbih0LGUsbil7InVzZSBzdHJpY3QiO3ZhciByPW4oMTQwNDQpLG89big2MjU1NiksaT1uKDg5NTU4KSxhPW4oNzYyOTgpLGM9bigxMDU5Mikscz1uKDM3NjIwKS5mLHU9big5OTYyNSksbD1pLlN5bWJvbDtpZihvJiYiZnVuY3Rpb24iPT10eXBlb2YgbCYmKCEoImRlc2NyaXB0aW9uImluIGwucHJvdG90eXBlKXx8dm9pZCAwIT09bCgpLmRlc2NyaXB0aW9uKSl7dmFyIGY9e30sZD1mdW5jdGlvbigpe3ZhciB0PWFyZ3VtZW50cy5sZW5ndGg8MXx8dm9pZCAwPT09YXJndW1lbnRzWzBdP3ZvaWQgMDpTdHJpbmcoYXJndW1lbnRzWzBdKSxlPXRoaXMgaW5zdGFuY2VvZiBkP25ldyBsKHQpOnZvaWQgMD09PXQ/bCgpOmwodCk7cmV0dXJuIiI9PT10JiYoZltlXT0hMCksZX07dShkLGwpO3ZhciBwPWQucHJvdG90eXBlPWwucHJvdG90eXBlO3AuY29uc3RydWN0b3I9ZDt2YXIgaD1wLnRvU3RyaW5nLHY9IlN5bWJvbCh0ZXN0KSI9PVN0cmluZyhsKCJ0ZXN0IikpLGc9L15TeW1ib2xcKCguKilcKVteKV0rJC87cyhwLCJkZXNjcmlwdGlvbiIse2NvbmZpZ3VyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXt2YXIgdD1jKHRoaXMpP3RoaXMudmFsdWVPZigpOnRoaXMsZT1oLmNhbGwodCk7aWYoYShmLHQpKXJldHVybiIiO3ZhciBuPXY/ZS5zbGljZSg3LC0xKTplLnJlcGxhY2UoZywiJDEiKTtyZXR1cm4iIj09PW4/dm9pZCAwOm59fSkscih7Z2xvYmFsOiEwLGZvcmNlZDohMH0se1N5bWJvbDpkfSl9fSw4OTE3OmZ1bmN0aW9uKHQsZSxuKXtuKDkyMjc1KSgiaGFzSW5zdGFuY2UiKX0sNTQ3ODY6ZnVuY3Rpb24odCxlLG4pe24oOTIyNzUpKCJpc0NvbmNhdFNwcmVhZGFibGUiKX0sMTI4MTY6ZnVuY3Rpb24odCxlLG4pe24oOTIyNzUpKCJpdGVyYXRvciIpfSw2NTY3OTpmdW5jdGlvbih0LGUsbil7InVzZSBzdHJpY3QiO3ZhciByPW4oMTQwNDQpLG89big4OTU1OCksaT1uKDc3MDEpLGE9big2NTY3MiksYz1uKDYyNTU2KSxzPW4oOTAxNCksdT1uKDE2NDEwKSxsPW4oMzIxODcpLGY9big3NjI5OCksZD1uKDYxOTkpLHA9bigxMDU5MiksaD1uKDg3NTc5KSx2PW4oMTkyMDkpLGc9big5NTczKSx5PW4oNTM0OTgpLG09bigxNDIwOSksYj1uKDUwODY4KSx4PW4oMjU1MDcpLHc9bigxMzMzNCksRT1uKDI2OTM3KSxqPW4oNTY5OTEpLEM9big5NzI1Nyksaz1uKDM3NjIwKSxTPW4oNDE2MjgpLE89big2Njk3MSksST1uKDkyOTEzKSxBPW4oNjIwNTQpLFQ9big4MzE5NyksTT1uKDIzMDcwKSxfPW4oNjcyOSksTD1uKDIzNzI0KSxSPW4oNzM5MTYpLFA9big5MjI3NSksTj1uKDUxMTI4KSxEPW4oODk4MjcpLEY9bigzMDAyNSkuZm9yRWFjaCxVPVQoImhpZGRlbiIpLEI9IlN5bWJvbCIsej1MKCJ0b1ByaW1pdGl2ZSIpLFY9RC5zZXQsSD1ELmdldHRlckZvcihCKSxxPU9iamVjdC5wcm90b3R5cGUsVz1vLlN5bWJvbCxHPWkoIkpTT04iLCJzdHJpbmdpZnkiKSxaPUMuZiwkPWsuZixZPUUuZixLPVMuZixKPUEoInN5bWJvbHMiKSxYPUEoIm9wLXN5bWJvbHMiKSxRPUEoInN0cmluZy10by1zeW1ib2wtcmVnaXN0cnkiKSx0dD1BKCJzeW1ib2wtdG8tc3RyaW5nLXJlZ2lzdHJ5IiksZXQ9QSgid2tzIiksbnQ9by5RT2JqZWN0LHJ0PSFudHx8IW50LnByb3RvdHlwZXx8IW50LnByb3RvdHlwZS5maW5kQ2hpbGQsb3Q9YyYmbCgoZnVuY3Rpb24oKXtyZXR1cm4gNyE9YigkKHt9LCJhIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuICQodGhpcywiYSIse3ZhbHVlOjd9KS5hfX0pKS5hfSkpP2Z1bmN0aW9uKHQsZSxuKXt2YXIgcj1aKHEsZSk7ciYmZGVsZXRlIHFbZV0sJCh0LGUsbiksciYmdCE9PXEmJiQocSxlLHIpfTokLGl0PWZ1bmN0aW9uKHQsZSl7dmFyIG49Slt0XT1iKFcucHJvdG90eXBlKTtyZXR1cm4gVihuLHt0eXBlOkIsdGFnOnQsZGVzY3JpcHRpb246ZX0pLGN8fChuLmRlc2NyaXB0aW9uPWUpLG59LGF0PXMmJiJzeW1ib2wiPT10eXBlb2YgVy5pdGVyYXRvcj9mdW5jdGlvbih0KXtyZXR1cm4ic3ltYm9sIj09dHlwZW9mIHR9OmZ1bmN0aW9uKHQpe3JldHVybiBPYmplY3QodClpbnN0YW5jZW9mIFd9LGN0PWZ1bmN0aW9uKHQsZSxuKXt0PT09cSYmY3QoWCxlLG4pLGgodCk7dmFyIHI9eShlLCEwKTtyZXR1cm4gaChuKSxmKEoscik/KG4uZW51bWVyYWJsZT8oZih0LFUpJiZ0W1VdW3JdJiYodFtVXVtyXT0hMSksbj1iKG4se2VudW1lcmFibGU6bSgwLCExKX0pKTooZih0LFUpfHwkKHQsVSxtKDEse30pKSx0W1VdW3JdPSEwKSxvdCh0LHIsbikpOiQodCxyLG4pfSxzdD1mdW5jdGlvbih0LGUpe2godCk7dmFyIG49ZyhlKSxyPXgobikuY29uY2F0KGR0KG4pKTtyZXR1cm4gRihyLChmdW5jdGlvbihlKXtjJiYhdXQuY2FsbChuLGUpfHxjdCh0LGUsbltlXSl9KSksdH0sdXQ9ZnVuY3Rpb24odCl7dmFyIGU9eSh0LCEwKSxuPUsuY2FsbCh0aGlzLGUpO3JldHVybiEodGhpcz09PXEmJmYoSixlKSYmIWYoWCxlKSkmJighKG58fCFmKHRoaXMsZSl8fCFmKEosZSl8fGYodGhpcyxVKSYmdGhpc1tVXVtlXSl8fG4pfSxsdD1mdW5jdGlvbih0LGUpe3ZhciBuPWcodCkscj15KGUsITApO2lmKG4hPT1xfHwhZihKLHIpfHxmKFgscikpe3ZhciBvPVoobixyKTtyZXR1cm4hb3x8IWYoSixyKXx8ZihuLFUpJiZuW1VdW3JdfHwoby5lbnVtZXJhYmxlPSEwKSxvfX0sZnQ9ZnVuY3Rpb24odCl7dmFyIGU9WShnKHQpKSxuPVtdO3JldHVybiBGKGUsKGZ1bmN0aW9uKHQpe2YoSix0KXx8ZihNLHQpfHxuLnB1c2godCl9KSksbn0sZHQ9ZnVuY3Rpb24odCl7dmFyIGU9dD09PXEsbj1ZKGU/WDpnKHQpKSxyPVtdO3JldHVybiBGKG4sKGZ1bmN0aW9uKHQpeyFmKEosdCl8fGUmJiFmKHEsdCl8fHIucHVzaChKW3RdKX0pKSxyfTsoc3x8KFc9ZnVuY3Rpb24oKXtpZih0aGlzIGluc3RhbmNlb2YgVyl0aHJvdyBUeXBlRXJyb3IoIlN5bWJvbCBpcyBub3QgYSBjb25zdHJ1Y3RvciIpO3ZhciB0PWFyZ3VtZW50cy5sZW5ndGgmJnZvaWQgMCE9PWFyZ3VtZW50c1swXT9TdHJpbmcoYXJndW1lbnRzWzBdKTp2b2lkIDAsZT1fKHQpLG49ZnVuY3Rpb24odCl7dGhpcz09PXEmJm4uY2FsbChYLHQpLGYodGhpcyxVKSYmZih0aGlzW1VdLGUpJiYodGhpc1tVXVtlXT0hMSksb3QodGhpcyxlLG0oMSx0KSl9O3JldHVybiBjJiZydCYmb3QocSxlLHtjb25maWd1cmFibGU6ITAsc2V0Om59KSxpdChlLHQpfSxJKFcucHJvdG90eXBlLCJ0b1N0cmluZyIsKGZ1bmN0aW9uKCl7cmV0dXJuIEgodGhpcykudGFnfSkpLFMuZj11dCxrLmY9Y3QsQy5mPWx0LHcuZj1FLmY9ZnQsai5mPWR0LGMmJigkKFcucHJvdG90eXBlLCJkZXNjcmlwdGlvbiIse2NvbmZpZ3VyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gSCh0aGlzKS5kZXNjcmlwdGlvbn19KSxhfHxJKHEsInByb3BlcnR5SXNFbnVtZXJhYmxlIix1dCx7dW5zYWZlOiEwfSkpKSx1fHwoUi5mPWZ1bmN0aW9uKHQpe3JldHVybiBpdChMKHQpLHQpfSkscih7Z2xvYmFsOiEwLHdyYXA6ITAsZm9yY2VkOiFzLHNoYW06IXN9LHtTeW1ib2w6V30pLEYoeChldCksKGZ1bmN0aW9uKHQpe1AodCl9KSkscih7dGFyZ2V0OkIsc3RhdDohMCxmb3JjZWQ6IXN9LHtmb3I6ZnVuY3Rpb24odCl7dmFyIGU9U3RyaW5nKHQpO2lmKGYoUSxlKSlyZXR1cm4gUVtlXTt2YXIgbj1XKGUpO3JldHVybiBRW2VdPW4sdHRbbl09ZSxufSxrZXlGb3I6ZnVuY3Rpb24odCl7aWYoIWF0KHQpKXRocm93IFR5cGVFcnJvcih0KyIgaXMgbm90IGEgc3ltYm9sIik7aWYoZih0dCx0KSlyZXR1cm4gdHRbdF19LHVzZVNldHRlcjpmdW5jdGlvbigpe3J0PSEwfSx1c2VTaW1wbGU6ZnVuY3Rpb24oKXtydD0hMX19KSxyKHt0YXJnZXQ6Ik9iamVjdCIsc3RhdDohMCxmb3JjZWQ6IXMsc2hhbTohY30se2NyZWF0ZTpmdW5jdGlvbih0LGUpe3JldHVybiB2b2lkIDA9PT1lP2IodCk6c3QoYih0KSxlKX0sZGVmaW5lUHJvcGVydHk6Y3QsZGVmaW5lUHJvcGVydGllczpzdCxnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3I6bHR9KSxyKHt0YXJnZXQ6Ik9iamVjdCIsc3RhdDohMCxmb3JjZWQ6IXN9LHtnZXRPd25Qcm9wZXJ0eU5hbWVzOmZ0LGdldE93blByb3BlcnR5U3ltYm9sczpkdH0pLHIoe3RhcmdldDoiT2JqZWN0IixzdGF0OiEwLGZvcmNlZDpsKChmdW5jdGlvbigpe2ouZigxKX0pKX0se2dldE93blByb3BlcnR5U3ltYm9sczpmdW5jdGlvbih0KXtyZXR1cm4gai5mKHYodCkpfX0pLEcpJiZyKHt0YXJnZXQ6IkpTT04iLHN0YXQ6ITAsZm9yY2VkOiFzfHxsKChmdW5jdGlvbigpe3ZhciB0PVcoKTtyZXR1cm4iW251bGxdIiE9RyhbdF0pfHwie30iIT1HKHthOnR9KXx8Int9IiE9RyhPYmplY3QodCkpfSkpfSx7c3RyaW5naWZ5OmZ1bmN0aW9uKHQsZSxuKXtmb3IodmFyIHIsbz1bdF0saT0xO2FyZ3VtZW50cy5sZW5ndGg+aTspby5wdXNoKGFyZ3VtZW50c1tpKytdKTtpZihyPWUsKHAoZSl8fHZvaWQgMCE9PXQpJiYhYXQodCkpcmV0dXJuIGQoZSl8fChlPWZ1bmN0aW9uKHQsZSl7aWYoImZ1bmN0aW9uIj09dHlwZW9mIHImJihlPXIuY2FsbCh0aGlzLHQsZSkpLCFhdChlKSlyZXR1cm4gZX0pLG9bMV09ZSxHLmFwcGx5KG51bGwsbyl9fSk7Vy5wcm90b3R5cGVbel18fE8oVy5wcm90b3R5cGUseixXLnByb3RvdHlwZS52YWx1ZU9mKSxOKFcsQiksTVtVXT0hMH0sOTgzMDY6ZnVuY3Rpb24odCxlLG4pe24oOTIyNzUpKCJtYXRjaEFsbCIpfSw2MTkyNDpmdW5jdGlvbih0LGUsbil7big5MjI3NSkoIm1hdGNoIil9LDEyMDI1OmZ1bmN0aW9uKHQsZSxuKXtuKDkyMjc1KSgicmVwbGFjZSIpfSwyODMzOmZ1bmN0aW9uKHQsZSxuKXtuKDkyMjc1KSgic2VhcmNoIil9LDk2NDUzOmZ1bmN0aW9uKHQsZSxuKXtuKDkyMjc1KSgic3BlY2llcyIpfSw3MDg2MzpmdW5jdGlvbih0LGUsbil7big5MjI3NSkoInNwbGl0Iil9LDI0ODAyOmZ1bmN0aW9uKHQsZSxuKXtuKDkyMjc1KSgidG9QcmltaXRpdmUiKX0sMTgyNzM6ZnVuY3Rpb24odCxlLG4pe24oOTIyNzUpKCJ0b1N0cmluZ1RhZyIpfSw0MjQxMTpmdW5jdGlvbih0LGUsbil7big5MjI3NSkoInVuc2NvcGFibGVzIil9LDc0MjMwOmZ1bmN0aW9uKHQsZSxuKXsidXNlIHN0cmljdCI7dmFyIHI9big3MzA3NCksbz1uKDk5NDMxKSxpPXIuYVR5cGVkQXJyYXk7KDAsci5leHBvcnRUeXBlZEFycmF5TWV0aG9kKSgiY29weVdpdGhpbiIsKGZ1bmN0aW9uKHQsZSl7cmV0dXJuIG8uY2FsbChpKHRoaXMpLHQsZSxhcmd1bWVudHMubGVuZ3RoPjI/YXJndW1lbnRzWzJdOnZvaWQgMCl9KSl9LDE4NTA2OmZ1bmN0aW9uKHQsZSxuKXsidXNlIHN0cmljdCI7dmFyIHI9big3MzA3NCksbz1uKDMwMDI1KS5ldmVyeSxpPXIuYVR5cGVkQXJyYXk7KDAsci5leHBvcnRUeXBlZEFycmF5TWV0aG9kKSgiZXZlcnkiLChmdW5jdGlvbih0KXtyZXR1cm4gbyhpKHRoaXMpLHQsYXJndW1lbnRzLmxlbmd0aD4xP2FyZ3VtZW50c1sxXTp2b2lkIDApfSkpfSwyMDI0MjpmdW5jdGlvbih0LGUsbil7InVzZSBzdHJpY3QiO3ZhciByPW4oNzMwNzQpLG89big2NTg5NSksaT1yLmFUeXBlZEFycmF5OygwLHIuZXhwb3J0VHlwZWRBcnJheU1ldGhvZCkoImZpbGwiLChmdW5jdGlvbih0KXtyZXR1cm4gby5hcHBseShpKHRoaXMpLGFyZ3VtZW50cyl9KSl9LDI4MTU1OmZ1bmN0aW9uKHQsZSxuKXsidXNlIHN0cmljdCI7dmFyIHI9big3MzA3NCksbz1uKDMwMDI1KS5maWx0ZXIsaT1uKDEzOTc5KSxhPXIuYVR5cGVkQXJyYXksYz1yLmFUeXBlZEFycmF5Q29uc3RydWN0b3I7KDAsci5leHBvcnRUeXBlZEFycmF5TWV0aG9kKSgiZmlsdGVyIiwoZnVuY3Rpb24odCl7Zm9yKHZhciBlPW8oYSh0aGlzKSx0LGFyZ3VtZW50cy5sZW5ndGg+MT9hcmd1bWVudHNbMV06dm9pZCAwKSxuPWkodGhpcyx0aGlzLmNvbnN0cnVjdG9yKSxyPTAscz1lLmxlbmd0aCx1PW5ldyhjKG4pKShzKTtzPnI7KXVbcl09ZVtyKytdO3JldHVybiB1fSkpfSw3NjQ0MjpmdW5jdGlvbih0LGUsbil7InVzZSBzdHJpY3QiO3ZhciByPW4oNzMwNzQpLG89bigzMDAyNSkuZmluZEluZGV4LGk9ci5hVHlwZWRBcnJheTsoMCxyLmV4cG9ydFR5cGVkQXJyYXlNZXRob2QpKCJmaW5kSW5kZXgiLChmdW5jdGlvbih0KXtyZXR1cm4gbyhpKHRoaXMpLHQsYXJndW1lbnRzLmxlbmd0aD4xP2FyZ3VtZW50c1sxXTp2b2lkIDApfSkpfSwzMzkwMTpmdW5jdGlvbih0LGUsbil7InVzZSBzdHJpY3QiO3ZhciByPW4oNzMwNzQpLG89bigzMDAyNSkuZmluZCxpPXIuYVR5cGVkQXJyYXk7KDAsci5leHBvcnRUeXBlZEFycmF5TWV0aG9kKSgiZmluZCIsKGZ1bmN0aW9uKHQpe3JldHVybiBvKGkodGhpcyksdCxhcmd1bWVudHMubGVuZ3RoPjE/YXJndW1lbnRzWzFdOnZvaWQgMCl9KSl9LDI2ODA6ZnVuY3Rpb24odCxlLG4pe24oOTMwMTcpKCJGbG9hdDMyIiwoZnVuY3Rpb24odCl7cmV0dXJuIGZ1bmN0aW9uKGUsbixyKXtyZXR1cm4gdCh0aGlzLGUsbixyKX19KSl9LDM4MjgwOmZ1bmN0aW9uKHQsZSxuKXtuKDkzMDE3KSgiRmxvYXQ2NCIsKGZ1bmN0aW9uKHQpe3JldHVybiBmdW5jdGlvbihlLG4scil7cmV0dXJuIHQodGhpcyxlLG4scil9fSkpfSw4ODYzNjpmdW5jdGlvbih0LGUsbil7InVzZSBzdHJpY3QiO3ZhciByPW4oNzMwNzQpLG89bigzMDAyNSkuZm9yRWFjaCxpPXIuYVR5cGVkQXJyYXk7KDAsci5leHBvcnRUeXBlZEFycmF5TWV0aG9kKSgiZm9yRWFjaCIsKGZ1bmN0aW9uKHQpe28oaSh0aGlzKSx0LGFyZ3VtZW50cy5sZW5ndGg+MT9hcmd1bWVudHNbMV06dm9pZCAwKX0pKX0sMTg1NTk6ZnVuY3Rpb24odCxlLG4peyJ1c2Ugc3RyaWN0Ijt2YXIgcj1uKDM1NjI3KTsoMCxuKDczMDc0KS5leHBvcnRUeXBlZEFycmF5U3RhdGljTWV0aG9kKSgiZnJvbSIsbigyMDQ1NSkscil9LDgxNDYzOmZ1bmN0aW9uKHQsZSxuKXsidXNlIHN0cmljdCI7dmFyIHI9big3MzA3NCksbz1uKDg1ODAzKS5pbmNsdWRlcyxpPXIuYVR5cGVkQXJyYXk7KDAsci5leHBvcnRUeXBlZEFycmF5TWV0aG9kKSgiaW5jbHVkZXMiLChmdW5jdGlvbih0KXtyZXR1cm4gbyhpKHRoaXMpLHQsYXJndW1lbnRzLmxlbmd0aD4xP2FyZ3VtZW50c1sxXTp2b2lkIDApfSkpfSw5NTE2MzpmdW5jdGlvbih0LGUsbil7InVzZSBzdHJpY3QiO3ZhciByPW4oNzMwNzQpLG89big4NTgwMykuaW5kZXhPZixpPXIuYVR5cGVkQXJyYXk7KDAsci5leHBvcnRUeXBlZEFycmF5TWV0aG9kKSgiaW5kZXhPZiIsKGZ1bmN0aW9uKHQpe3JldHVybiBvKGkodGhpcyksdCxhcmd1bWVudHMubGVuZ3RoPjE/YXJndW1lbnRzWzFdOnZvaWQgMCl9KSl9LDI0NDk4OmZ1bmN0aW9uKHQsZSxuKXtuKDkzMDE3KSgiSW50MTYiLChmdW5jdGlvbih0KXtyZXR1cm4gZnVuY3Rpb24oZSxuLHIpe3JldHVybiB0KHRoaXMsZSxuLHIpfX0pKX0sMTcxNTI6ZnVuY3Rpb24odCxlLG4pe24oOTMwMTcpKCJJbnQzMiIsKGZ1bmN0aW9uKHQpe3JldHVybiBmdW5jdGlvbihlLG4scil7cmV0dXJuIHQodGhpcyxlLG4scil9fSkpfSw3MDM3MzpmdW5jdGlvbih0LGUsbil7big5MzAxNykoIkludDgiLChmdW5jdGlvbih0KXtyZXR1cm4gZnVuY3Rpb24oZSxuLHIpe3JldHVybiB0KHRoaXMsZSxuLHIpfX0pKX0sODM2NzM6ZnVuY3Rpb24odCxlLG4peyJ1c2Ugc3RyaWN0Ijt2YXIgcj1uKDg5NTU4KSxvPW4oNzMwNzQpLGk9big1MDA2MyksYT1uKDIzNzI0KSgiaXRlcmF0b3IiKSxjPXIuVWludDhBcnJheSxzPWkudmFsdWVzLHU9aS5rZXlzLGw9aS5lbnRyaWVzLGY9by5hVHlwZWRBcnJheSxkPW8uZXhwb3J0VHlwZWRBcnJheU1ldGhvZCxwPWMmJmMucHJvdG90eXBlW2FdLGg9ISFwJiYoInZhbHVlcyI9PXAubmFtZXx8bnVsbD09cC5uYW1lKSx2PWZ1bmN0aW9uKCl7cmV0dXJuIHMuY2FsbChmKHRoaXMpKX07ZCgiZW50cmllcyIsKGZ1bmN0aW9uKCl7cmV0dXJuIGwuY2FsbChmKHRoaXMpKX0pKSxkKCJrZXlzIiwoZnVuY3Rpb24oKXtyZXR1cm4gdS5jYWxsKGYodGhpcykpfSkpLGQoInZhbHVlcyIsdiwhaCksZChhLHYsIWgpfSwyMzU2ODpmdW5jdGlvbih0LGUsbil7InVzZSBzdHJpY3QiO3ZhciByPW4oNzMwNzQpLG89ci5hVHlwZWRBcnJheSxpPXIuZXhwb3J0VHlwZWRBcnJheU1ldGhvZCxhPVtdLmpvaW47aSgiam9pbiIsKGZ1bmN0aW9uKHQpe3JldHVybiBhLmFwcGx5KG8odGhpcyksYXJndW1lbnRzKX0pKX0sMjcyOTQ6ZnVuY3Rpb24odCxlLG4peyJ1c2Ugc3RyaWN0Ijt2YXIgcj1uKDczMDc0KSxvPW4oNDkyNDkpLGk9ci5hVHlwZWRBcnJheTsoMCxyLmV4cG9ydFR5cGVkQXJyYXlNZXRob2QpKCJsYXN0SW5kZXhPZiIsKGZ1bmN0aW9uKHQpe3JldHVybiBvLmFwcGx5KGkodGhpcyksYXJndW1lbnRzKX0pKX0sMjQ0NTc6ZnVuY3Rpb24odCxlLG4peyJ1c2Ugc3RyaWN0Ijt2YXIgcj1uKDczMDc0KSxvPW4oMzAwMjUpLm1hcCxpPW4oMTM5NzkpLGE9ci5hVHlwZWRBcnJheSxjPXIuYVR5cGVkQXJyYXlDb25zdHJ1Y3RvcjsoMCxyLmV4cG9ydFR5cGVkQXJyYXlNZXRob2QpKCJtYXAiLChmdW5jdGlvbih0KXtyZXR1cm4gbyhhKHRoaXMpLHQsYXJndW1lbnRzLmxlbmd0aD4xP2FyZ3VtZW50c1sxXTp2b2lkIDAsKGZ1bmN0aW9uKHQsZSl7cmV0dXJuIG5ldyhjKGkodCx0LmNvbnN0cnVjdG9yKSkpKGUpfSkpfSkpfSw1MDQ4MjpmdW5jdGlvbih0LGUsbil7InVzZSBzdHJpY3QiO3ZhciByPW4oNzMwNzQpLG89bigzNTYyNyksaT1yLmFUeXBlZEFycmF5Q29uc3RydWN0b3I7KDAsci5leHBvcnRUeXBlZEFycmF5U3RhdGljTWV0aG9kKSgib2YiLChmdW5jdGlvbigpe2Zvcih2YXIgdD0wLGU9YXJndW1lbnRzLmxlbmd0aCxuPW5ldyhpKHRoaXMpKShlKTtlPnQ7KW5bdF09YXJndW1lbnRzW3QrK107cmV0dXJuIG59KSxvKX0sNzU0OTk6ZnVuY3Rpb24odCxlLG4peyJ1c2Ugc3RyaWN0Ijt2YXIgcj1uKDczMDc0KSxvPW4oMTIzNjYpLnJpZ2h0LGk9ci5hVHlwZWRBcnJheTsoMCxyLmV4cG9ydFR5cGVkQXJyYXlNZXRob2QpKCJyZWR1Y2VSaWdodCIsKGZ1bmN0aW9uKHQpe3JldHVybiBvKGkodGhpcyksdCxhcmd1bWVudHMubGVuZ3RoLGFyZ3VtZW50cy5sZW5ndGg+MT9hcmd1bWVudHNbMV06dm9pZCAwKX0pKX0sMzkzMjpmdW5jdGlvbih0LGUsbil7InVzZSBzdHJpY3QiO3ZhciByPW4oNzMwNzQpLG89bigxMjM2NikubGVmdCxpPXIuYVR5cGVkQXJyYXk7KDAsci5leHBvcnRUeXBlZEFycmF5TWV0aG9kKSgicmVkdWNlIiwoZnVuY3Rpb24odCl7cmV0dXJuIG8oaSh0aGlzKSx0LGFyZ3VtZW50cy5sZW5ndGgsYXJndW1lbnRzLmxlbmd0aD4xP2FyZ3VtZW50c1sxXTp2b2lkIDApfSkpfSw4NzU2NDpmdW5jdGlvbih0LGUsbil7InVzZSBzdHJpY3QiO3ZhciByPW4oNzMwNzQpLG89ci5hVHlwZWRBcnJheSxpPXIuZXhwb3J0VHlwZWRBcnJheU1ldGhvZCxhPU1hdGguZmxvb3I7aSgicmV2ZXJzZSIsKGZ1bmN0aW9uKCl7Zm9yKHZhciB0LGU9dGhpcyxuPW8oZSkubGVuZ3RoLHI9YShuLzIpLGk9MDtpPHI7KXQ9ZVtpXSxlW2krK109ZVstLW5dLGVbbl09dDtyZXR1cm4gZX0pKX0sODQ1MDpmdW5jdGlvbih0LGUsbil7InVzZSBzdHJpY3QiO3ZhciByPW4oNzMwNzQpLG89bigyNzg4NCksaT1uKDYwNTU4KSxhPW4oMTkyMDkpLGM9bigzMjE4Nykscz1yLmFUeXBlZEFycmF5OygwLHIuZXhwb3J0VHlwZWRBcnJheU1ldGhvZCkoInNldCIsKGZ1bmN0aW9uKHQpe3ModGhpcyk7dmFyIGU9aShhcmd1bWVudHMubGVuZ3RoPjE/YXJndW1lbnRzWzFdOnZvaWQgMCwxKSxuPXRoaXMubGVuZ3RoLHI9YSh0KSxjPW8oci5sZW5ndGgpLHU9MDtpZihjK2U+bil0aHJvdyBSYW5nZUVycm9yKCJXcm9uZyBsZW5ndGgiKTtmb3IoO3U8YzspdGhpc1tlK3VdPXJbdSsrXX0pLGMoKGZ1bmN0aW9uKCl7bmV3IEludDhBcnJheSgxKS5zZXQoe30pfSkpKX0sMTc2MDU6ZnVuY3Rpb24odCxlLG4peyJ1c2Ugc3RyaWN0Ijt2YXIgcj1uKDczMDc0KSxvPW4oMTM5NzkpLGk9bigzMjE4NyksYT1yLmFUeXBlZEFycmF5LGM9ci5hVHlwZWRBcnJheUNvbnN0cnVjdG9yLHM9ci5leHBvcnRUeXBlZEFycmF5TWV0aG9kLHU9W10uc2xpY2U7cygic2xpY2UiLChmdW5jdGlvbih0LGUpe2Zvcih2YXIgbj11LmNhbGwoYSh0aGlzKSx0LGUpLHI9byh0aGlzLHRoaXMuY29uc3RydWN0b3IpLGk9MCxzPW4ubGVuZ3RoLGw9bmV3KGMocikpKHMpO3M+aTspbFtpXT1uW2krK107cmV0dXJuIGx9KSxpKChmdW5jdGlvbigpe25ldyBJbnQ4QXJyYXkoMSkuc2xpY2UoKX0pKSl9LDczNTYyOmZ1bmN0aW9uKHQsZSxuKXsidXNlIHN0cmljdCI7dmFyIHI9big3MzA3NCksbz1uKDMwMDI1KS5zb21lLGk9ci5hVHlwZWRBcnJheTsoMCxyLmV4cG9ydFR5cGVkQXJyYXlNZXRob2QpKCJzb21lIiwoZnVuY3Rpb24odCl7cmV0dXJuIG8oaSh0aGlzKSx0LGFyZ3VtZW50cy5sZW5ndGg+MT9hcmd1bWVudHNbMV06dm9pZCAwKX0pKX0sMTE4Nzg6ZnVuY3Rpb24odCxlLG4peyJ1c2Ugc3RyaWN0Ijt2YXIgcj1uKDczMDc0KSxvPXIuYVR5cGVkQXJyYXksaT1yLmV4cG9ydFR5cGVkQXJyYXlNZXRob2QsYT1bXS5zb3J0O2koInNvcnQiLChmdW5jdGlvbih0KXtyZXR1cm4gYS5jYWxsKG8odGhpcyksdCl9KSl9LDYwOTI5OmZ1bmN0aW9uKHQsZSxuKXsidXNlIHN0cmljdCI7dmFyIHI9big3MzA3NCksbz1uKDI3ODg0KSxpPW4oNzY5NzYpLGE9bigxMzk3OSksYz1yLmFUeXBlZEFycmF5OygwLHIuZXhwb3J0VHlwZWRBcnJheU1ldGhvZCkoInN1YmFycmF5IiwoZnVuY3Rpb24odCxlKXt2YXIgbj1jKHRoaXMpLHI9bi5sZW5ndGgscz1pKHQscik7cmV0dXJuIG5ldyhhKG4sbi5jb25zdHJ1Y3RvcikpKG4uYnVmZmVyLG4uYnl0ZU9mZnNldCtzKm4uQllURVNfUEVSX0VMRU1FTlQsbygodm9pZCAwPT09ZT9yOmkoZSxyKSktcykpfSkpfSw0Mzk1MTpmdW5jdGlvbih0LGUsbil7InVzZSBzdHJpY3QiO3ZhciByPW4oODk1NTgpLG89big3MzA3NCksaT1uKDMyMTg3KSxhPXIuSW50OEFycmF5LGM9by5hVHlwZWRBcnJheSxzPW8uZXhwb3J0VHlwZWRBcnJheU1ldGhvZCx1PVtdLnRvTG9jYWxlU3RyaW5nLGw9W10uc2xpY2UsZj0hIWEmJmkoKGZ1bmN0aW9uKCl7dS5jYWxsKG5ldyBhKDEpKX0pKTtzKCJ0b0xvY2FsZVN0cmluZyIsKGZ1bmN0aW9uKCl7cmV0dXJuIHUuYXBwbHkoZj9sLmNhbGwoYyh0aGlzKSk6Yyh0aGlzKSxhcmd1bWVudHMpfSksaSgoZnVuY3Rpb24oKXtyZXR1cm5bMSwyXS50b0xvY2FsZVN0cmluZygpIT1uZXcgYShbMSwyXSkudG9Mb2NhbGVTdHJpbmcoKX0pKXx8IWkoKGZ1bmN0aW9uKCl7YS5wcm90b3R5cGUudG9Mb2NhbGVTdHJpbmcuY2FsbChbMSwyXSl9KSkpfSw5MTM0NzpmdW5jdGlvbih0LGUsbil7InVzZSBzdHJpY3QiO3ZhciByPW4oNzMwNzQpLmV4cG9ydFR5cGVkQXJyYXlNZXRob2Qsbz1uKDMyMTg3KSxpPW4oODk1NTgpLlVpbnQ4QXJyYXksYT1pJiZpLnByb3RvdHlwZXx8e30sYz1bXS50b1N0cmluZyxzPVtdLmpvaW47bygoZnVuY3Rpb24oKXtjLmNhbGwoe30pfSkpJiYoYz1mdW5jdGlvbigpe3JldHVybiBzLmNhbGwodGhpcyl9KTt2YXIgdT1hLnRvU3RyaW5nIT1jO3IoInRvU3RyaW5nIixjLHUpfSwxNjk3ODpmdW5jdGlvbih0LGUsbil7big5MzAxNykoIlVpbnQxNiIsKGZ1bmN0aW9uKHQpe3JldHVybiBmdW5jdGlvbihlLG4scil7cmV0dXJuIHQodGhpcyxlLG4scil9fSkpfSwzNzk4NzpmdW5jdGlvbih0LGUsbil7big5MzAxNykoIlVpbnQzMiIsKGZ1bmN0aW9uKHQpe3JldHVybiBmdW5jdGlvbihlLG4scil7cmV0dXJuIHQodGhpcyxlLG4scil9fSkpfSw4MDc1NzpmdW5jdGlvbih0LGUsbil7big5MzAxNykoIlVpbnQ4IiwoZnVuY3Rpb24odCl7cmV0dXJuIGZ1bmN0aW9uKGUsbixyKXtyZXR1cm4gdCh0aGlzLGUsbixyKX19KSl9LDY5ODc5OmZ1bmN0aW9uKHQsZSxuKXtuKDkzMDE3KSgiVWludDgiLChmdW5jdGlvbih0KXtyZXR1cm4gZnVuY3Rpb24oZSxuLHIpe3JldHVybiB0KHRoaXMsZSxuLHIpfX0pLCEwKX0sNTg2MDY6ZnVuY3Rpb24odCxlLG4peyJ1c2Ugc3RyaWN0Ijt2YXIgcixvPW4oODk1NTgpLGk9bigxOTI2KSxhPW4oOTYwMyksYz1uKDgxOTUxKSxzPW4oNzEzMDMpLHU9bigxMDU5MiksbD1uKDg5ODI3KS5lbmZvcmNlLGY9bigxOTU5MSksZD0hby5BY3RpdmVYT2JqZWN0JiYiQWN0aXZlWE9iamVjdCJpbiBvLHA9T2JqZWN0LmlzRXh0ZW5zaWJsZSxoPWZ1bmN0aW9uKHQpe3JldHVybiBmdW5jdGlvbigpe3JldHVybiB0KHRoaXMsYXJndW1lbnRzLmxlbmd0aD9hcmd1bWVudHNbMF06dm9pZCAwKX19LHY9dC5leHBvcnRzPWMoIldlYWtNYXAiLGgscyk7aWYoZiYmZCl7cj1zLmdldENvbnN0cnVjdG9yKGgsIldlYWtNYXAiLCEwKSxhLlJFUVVJUkVEPSEwO3ZhciBnPXYucHJvdG90eXBlLHk9Zy5kZWxldGUsbT1nLmhhcyxiPWcuZ2V0LHg9Zy5zZXQ7aShnLHtkZWxldGU6ZnVuY3Rpb24odCl7aWYodSh0KSYmIXAodCkpe3ZhciBlPWwodGhpcyk7cmV0dXJuIGUuZnJvemVufHwoZS5mcm96ZW49bmV3IHIpLHkuY2FsbCh0aGlzLHQpfHxlLmZyb3plbi5kZWxldGUodCl9cmV0dXJuIHkuY2FsbCh0aGlzLHQpfSxoYXM6ZnVuY3Rpb24odCl7aWYodSh0KSYmIXAodCkpe3ZhciBlPWwodGhpcyk7cmV0dXJuIGUuZnJvemVufHwoZS5mcm96ZW49bmV3IHIpLG0uY2FsbCh0aGlzLHQpfHxlLmZyb3plbi5oYXModCl9cmV0dXJuIG0uY2FsbCh0aGlzLHQpfSxnZXQ6ZnVuY3Rpb24odCl7aWYodSh0KSYmIXAodCkpe3ZhciBlPWwodGhpcyk7cmV0dXJuIGUuZnJvemVufHwoZS5mcm96ZW49bmV3IHIpLG0uY2FsbCh0aGlzLHQpP2IuY2FsbCh0aGlzLHQpOmUuZnJvemVuLmdldCh0KX1yZXR1cm4gYi5jYWxsKHRoaXMsdCl9LHNldDpmdW5jdGlvbih0LGUpe2lmKHUodCkmJiFwKHQpKXt2YXIgbj1sKHRoaXMpO24uZnJvemVufHwobi5mcm96ZW49bmV3IHIpLG0uY2FsbCh0aGlzLHQpP3guY2FsbCh0aGlzLHQsZSk6bi5mcm96ZW4uc2V0KHQsZSl9ZWxzZSB4LmNhbGwodGhpcyx0LGUpO3JldHVybiB0aGlzfX0pfX0sNDUxNTc6ZnVuY3Rpb24odCxlLG4peyJ1c2Ugc3RyaWN0IjtuKDgxOTUxKSgiV2Vha1NldCIsKGZ1bmN0aW9uKHQpe3JldHVybiBmdW5jdGlvbigpe3JldHVybiB0KHRoaXMsYXJndW1lbnRzLmxlbmd0aD9hcmd1bWVudHNbMF06dm9pZCAwKX19KSxuKDcxMzAzKSl9LDk2NzUxOmZ1bmN0aW9uKHQsZSxuKXsidXNlIHN0cmljdCI7dmFyIHI9bigxNDA0NCksbz1uKDYyNTU2KSxpPW4oNjQ5NjUpLGE9big3MTg0MiksYz1uKDUwODY4KSxzPW4oMzc2MjApLHU9bigxNDIwOSksbD1uKDQxMzM0KSxmPW4oNjY5NzEpLGQ9big4OTgyNykscD1kLnNldCxoPWQuZ2V0dGVyRm9yKCJBZ2dyZWdhdGVFcnJvciIpLHY9ZnVuY3Rpb24odCxlKXt2YXIgbj10aGlzO2lmKCEobiBpbnN0YW5jZW9mIHYpKXJldHVybiBuZXcgdih0LGUpO2EmJihuPWEobmV3IEVycm9yKGUpLGkobikpKTt2YXIgcj1bXTtyZXR1cm4gbCh0LHIucHVzaCxyKSxvP3Aobix7ZXJyb3JzOnIsdHlwZToiQWdncmVnYXRlRXJyb3IifSk6bi5lcnJvcnM9cix2b2lkIDAhPT1lJiZmKG4sIm1lc3NhZ2UiLFN0cmluZyhlKSksbn07di5wcm90b3R5cGU9YyhFcnJvci5wcm90b3R5cGUse2NvbnN0cnVjdG9yOnUoNSx2KSxtZXNzYWdlOnUoNSwiIiksbmFtZTp1KDUsIkFnZ3JlZ2F0ZUVycm9yIil9KSxvJiZzLmYodi5wcm90b3R5cGUsImVycm9ycyIse2dldDpmdW5jdGlvbigpe3JldHVybiBoKHRoaXMpLmVycm9yc30sY29uZmlndXJhYmxlOiEwfSkscih7Z2xvYmFsOiEwfSx7QWdncmVnYXRlRXJyb3I6dn0pfSwxNDA4NjpmdW5jdGlvbih0LGUsbil7dmFyIHI9bigxNDA0NCksbz1uKDYxOTkpLGk9T2JqZWN0LmlzRnJvemVuLGE9ZnVuY3Rpb24odCxlKXtpZighaXx8IW8odCl8fCFpKHQpKXJldHVybiExO2Zvcih2YXIgbixyPTAsYT10Lmxlbmd0aDtyPGE7KWlmKCEoInN0cmluZyI9PXR5cGVvZihuPXRbcisrXSl8fGUmJnZvaWQgMD09PW4pKXJldHVybiExO3JldHVybiAwIT09YX07cih7dGFyZ2V0OiJBcnJheSIsc3RhdDohMH0se2lzVGVtcGxhdGVPYmplY3Q6ZnVuY3Rpb24odCl7aWYoIWEodCwhMCkpcmV0dXJuITE7dmFyIGU9dC5yYXc7cmV0dXJuIShlLmxlbmd0aCE9PXQubGVuZ3RofHwhYShlLCExKSl9fSl9LDQ5MzA6ZnVuY3Rpb24odCxlLG4peyJ1c2Ugc3RyaWN0Ijt2YXIgcj1uKDYyNTU2KSxvPW4oNzY1MTMpLGk9bigxOTIwOSksYT1uKDI3ODg0KSxjPW4oMzc2MjApLmY7ciYmISgibGFzdEluZGV4ImluW10pJiYoYyhBcnJheS5wcm90b3R5cGUsImxhc3RJbmRleCIse2NvbmZpZ3VyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXt2YXIgdD1pKHRoaXMpLGU9YSh0Lmxlbmd0aCk7cmV0dXJuIDA9PWU/MDplLTF9fSksbygibGFzdEluZGV4IikpfSw2MzY0OmZ1bmN0aW9uKHQsZSxuKXsidXNlIHN0cmljdCI7dmFyIHI9big2MjU1Niksbz1uKDc2NTEzKSxpPW4oMTkyMDkpLGE9bigyNzg4NCksYz1uKDM3NjIwKS5mO3ImJiEoImxhc3RJdGVtImluW10pJiYoYyhBcnJheS5wcm90b3R5cGUsImxhc3RJdGVtIix7Y29uZmlndXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3ZhciB0PWkodGhpcyksZT1hKHQubGVuZ3RoKTtyZXR1cm4gMD09ZT92b2lkIDA6dFtlLTFdfSxzZXQ6ZnVuY3Rpb24odCl7dmFyIGU9aSh0aGlzKSxuPWEoZS5sZW5ndGgpO3JldHVybiBlWzA9PW4/MDpuLTFdPXR9fSksbygibGFzdEl0ZW0iKSl9LDQ3MDA0OmZ1bmN0aW9uKHQsZSxuKXsidXNlIHN0cmljdCI7dmFyIHI9bigxNDA0NCksbz1uKDg3NTc5KSxpPW4oMjcwMDQpKChmdW5jdGlvbih0LGUpe3ZhciBuPXRoaXMscj1uLml0ZXJhdG9yO3JldHVybiBlLnJlc29sdmUobyhuLm5leHQuY2FsbChyLHQpKSkudGhlbigoZnVuY3Rpb24odCl7cmV0dXJuIG8odCkuZG9uZT8obi5kb25lPSEwLHtkb25lOiEwLHZhbHVlOnZvaWQgMH0pOntkb25lOiExLHZhbHVlOltuLmluZGV4KyssdC52YWx1ZV19fSkpfSkpO3Ioe3RhcmdldDoiQXN5bmNJdGVyYXRvciIscHJvdG86ITAscmVhbDohMH0se2FzSW5kZXhlZFBhaXJzOmZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBpKHtpdGVyYXRvcjpvKHRoaXMpLGluZGV4OjB9KX19KX0sNjEyOTg6ZnVuY3Rpb24odCxlLG4peyJ1c2Ugc3RyaWN0Ijt2YXIgcj1uKDE0MDQ0KSxvPW4oNTkzNzkpLGk9big2Njk3MSksYT1uKDc2Mjk4KSxjPW4oMjM3MjQpLHM9big2Mzg0NSksdT1uKDY1NjcyKSxsPWMoInRvU3RyaW5nVGFnIiksZj1mdW5jdGlvbigpe28odGhpcyxmKX07Zi5wcm90b3R5cGU9cyxhKHMsbCl8fGkocyxsLCJBc3luY0l0ZXJhdG9yIiksYShzLCJjb25zdHJ1Y3RvciIpJiZzLmNvbnN0cnVjdG9yIT09T2JqZWN0fHxpKHMsImNvbnN0cnVjdG9yIixmKSxyKHtnbG9iYWw6ITAsZm9yY2VkOnV9LHtBc3luY0l0ZXJhdG9yOmZ9KX0sNjc0NjI6ZnVuY3Rpb24odCxlLG4peyJ1c2Ugc3RyaWN0Ijt2YXIgcj1uKDE0MDQ0KSxvPW4oODc1NzkpLGk9big0NTY4MCksYT1uKDI3MDA0KSgoZnVuY3Rpb24odCxlKXt2YXIgbj10aGlzO3JldHVybiBuZXcgZSgoZnVuY3Rpb24ocixpKXt2YXIgYT1mdW5jdGlvbigpe3RyeXtlLnJlc29sdmUobyhuLm5leHQuY2FsbChuLml0ZXJhdG9yLG4ucmVtYWluaW5nP3ZvaWQgMDp0KSkpLnRoZW4oKGZ1bmN0aW9uKHQpe3RyeXtvKHQpLmRvbmU/KG4uZG9uZT0hMCxyKHtkb25lOiEwLHZhbHVlOnZvaWQgMH0pKTpuLnJlbWFpbmluZz8obi5yZW1haW5pbmctLSxhKCkpOnIoe2RvbmU6ITEsdmFsdWU6dC52YWx1ZX0pfWNhdGNoKHQpe2kodCl9fSksaSl9Y2F0Y2godCl7aSh0KX19O2EoKX0pKX0pKTtyKHt0YXJnZXQ6IkFzeW5jSXRlcmF0b3IiLHByb3RvOiEwLHJlYWw6ITB9LHtkcm9wOmZ1bmN0aW9uKHQpe3JldHVybiBuZXcgYSh7aXRlcmF0b3I6byh0aGlzKSxyZW1haW5pbmc6aSh0KX0pfX0pfSw5MDY3OmZ1bmN0aW9uKHQsZSxuKXsidXNlIHN0cmljdCI7dmFyIHI9bigxNDA0NCksbz1uKDQ1NjY2KS5ldmVyeTtyKHt0YXJnZXQ6IkFzeW5jSXRlcmF0b3IiLHByb3RvOiEwLHJlYWw6ITB9LHtldmVyeTpmdW5jdGlvbih0KXtyZXR1cm4gbyh0aGlzLHQpfX0pfSwyMDEyNDpmdW5jdGlvbih0LGUsbil7InVzZSBzdHJpY3QiO3ZhciByPW4oMTQwNDQpLG89big4NjQ3MCksaT1uKDg3NTc5KSxhPW4oMjcwMDQpKChmdW5jdGlvbih0LGUpe3ZhciBuPXRoaXMscj1uLmZpbHRlcmVyO3JldHVybiBuZXcgZSgoZnVuY3Rpb24obyxhKXt2YXIgYz1mdW5jdGlvbigpe3RyeXtlLnJlc29sdmUoaShuLm5leHQuY2FsbChuLml0ZXJhdG9yLHQpKSkudGhlbigoZnVuY3Rpb24odCl7dHJ5e2lmKGkodCkuZG9uZSluLmRvbmU9ITAsbyh7ZG9uZTohMCx2YWx1ZTp2b2lkIDB9KTtlbHNle3ZhciBzPXQudmFsdWU7ZS5yZXNvbHZlKHIocykpLnRoZW4oKGZ1bmN0aW9uKHQpe3Q/byh7ZG9uZTohMSx2YWx1ZTpzfSk6YygpfSksYSl9fWNhdGNoKHQpe2EodCl9fSksYSl9Y2F0Y2godCl7YSh0KX19O2MoKX0pKX0pKTtyKHt0YXJnZXQ6IkFzeW5jSXRlcmF0b3IiLHByb3RvOiEwLHJlYWw6ITB9LHtmaWx0ZXI6ZnVuY3Rpb24odCl7cmV0dXJuIG5ldyBhKHtpdGVyYXRvcjppKHRoaXMpLGZpbHRlcmVyOm8odCl9KX19KX0sMjEzNzE6ZnVuY3Rpb24odCxlLG4peyJ1c2Ugc3RyaWN0Ijt2YXIgcj1uKDE0MDQ0KSxvPW4oNDU2NjYpLmZpbmQ7cih7dGFyZ2V0OiJBc3luY0l0ZXJhdG9yIixwcm90bzohMCxyZWFsOiEwfSx7ZmluZDpmdW5jdGlvbih0KXtyZXR1cm4gbyh0aGlzLHQpfX0pfSwzODk4NDpmdW5jdGlvbih0LGUsbil7InVzZSBzdHJpY3QiO3ZhciByPW4oMTQwNDQpLG89big4NjQ3MCksaT1uKDg3NTc5KSxhPW4oMjcwMDQpLGM9big2NjkyMCkscz1hKChmdW5jdGlvbih0LGUpe3ZhciBuLHIsYT10aGlzLHM9YS5tYXBwZXI7cmV0dXJuIG5ldyBlKChmdW5jdGlvbih1LGwpe3ZhciBmPWZ1bmN0aW9uKCl7dHJ5e2UucmVzb2x2ZShpKGEubmV4dC5jYWxsKGEuaXRlcmF0b3IsdCkpKS50aGVuKChmdW5jdGlvbih0KXt0cnl7aSh0KS5kb25lPyhhLmRvbmU9ITAsdSh7ZG9uZTohMCx2YWx1ZTp2b2lkIDB9KSk6ZS5yZXNvbHZlKHModC52YWx1ZSkpLnRoZW4oKGZ1bmN0aW9uKHQpe3RyeXtpZih2b2lkIDAhPT0ocj1jKHQpKSlyZXR1cm4gYS5pbm5lckl0ZXJhdG9yPW49aShyLmNhbGwodCkpLGEuaW5uZXJOZXh0PW8obi5uZXh0KSxkKCk7bChUeXBlRXJyb3IoIi5mbGF0TWFwIGNhbGxiYWNrIHNob3VsZCByZXR1cm4gYW4gaXRlcmFibGUgb2JqZWN0IikpfWNhdGNoKHQpe2wodCl9fSksbCl9Y2F0Y2godCl7bCh0KX19KSxsKX1jYXRjaCh0KXtsKHQpfX0sZD1mdW5jdGlvbigpe2lmKG49YS5pbm5lckl0ZXJhdG9yKXRyeXtlLnJlc29sdmUoaShhLmlubmVyTmV4dC5jYWxsKG4pKSkudGhlbigoZnVuY3Rpb24odCl7dHJ5e2kodCkuZG9uZT8oYS5pbm5lckl0ZXJhdG9yPWEuaW5uZXJOZXh0PW51bGwsZigpKTp1KHtkb25lOiExLHZhbHVlOnQudmFsdWV9KX1jYXRjaCh0KXtsKHQpfX0pLGwpfWNhdGNoKHQpe2wodCl9ZWxzZSBmKCl9O2QoKX0pKX0pKTtyKHt0YXJnZXQ6IkFzeW5jSXRlcmF0b3IiLHByb3RvOiEwLHJlYWw6ITB9LHtmbGF0TWFwOmZ1bmN0aW9uKHQpe3JldHVybiBuZXcgcyh7aXRlcmF0b3I6aSh0aGlzKSxtYXBwZXI6byh0KSxpbm5lckl0ZXJhdG9yOm51bGwsaW5uZXJOZXh0Om51bGx9KX19KX0sNjkyMzc6ZnVuY3Rpb24odCxlLG4peyJ1c2Ugc3RyaWN0Ijt2YXIgcj1uKDE0MDQ0KSxvPW4oNDU2NjYpLmZvckVhY2g7cih7dGFyZ2V0OiJBc3luY0l0ZXJhdG9yIixwcm90bzohMCxyZWFsOiEwfSx7Zm9yRWFjaDpmdW5jdGlvbih0KXtyZXR1cm4gbyh0aGlzLHQpfX0pfSwyNjQ5NzpmdW5jdGlvbih0LGUsbil7dmFyIHI9bigxNDA0NCksbz1uKDU2MjM4KSxpPW4oODY0NzApLGE9big4NzU3OSksYz1uKDE5MjA5KSxzPW4oMjcwMDQpLHU9big2NjkyMCksbD1vLkFzeW5jSXRlcmF0b3IsZj1zKChmdW5jdGlvbih0KXtyZXR1cm4gYSh0aGlzLm5leHQuY2FsbCh0aGlzLml0ZXJhdG9yLHQpKX0pLCEwKTtyKHt0YXJnZXQ6IkFzeW5jSXRlcmF0b3IiLHN0YXQ6ITB9LHtmcm9tOmZ1bmN0aW9uKHQpe3ZhciBlLG49Yyh0KSxyPXUobik7aWYobnVsbCE9cil7aWYoKGU9aShyKS5jYWxsKG4pKWluc3RhbmNlb2YgbClyZXR1cm4gZX1lbHNlIGU9bjtyZXR1cm4gbmV3IGYoe2l0ZXJhdG9yOmV9KX19KX0sNTMxNjg6ZnVuY3Rpb24odCxlLG4peyJ1c2Ugc3RyaWN0Ijt2YXIgcj1uKDE0MDQ0KSxvPW4oODY0NzApLGk9big4NzU3OSksYT1uKDI3MDA0KSgoZnVuY3Rpb24odCxlKXt2YXIgbj10aGlzLHI9bi5tYXBwZXI7cmV0dXJuIGUucmVzb2x2ZShpKG4ubmV4dC5jYWxsKG4uaXRlcmF0b3IsdCkpKS50aGVuKChmdW5jdGlvbih0KXtyZXR1cm4gaSh0KS5kb25lPyhuLmRvbmU9ITAse2RvbmU6ITAsdmFsdWU6dm9pZCAwfSk6ZS5yZXNvbHZlKHIodC52YWx1ZSkpLnRoZW4oKGZ1bmN0aW9uKHQpe3JldHVybntkb25lOiExLHZhbHVlOnR9fSkpfSkpfSkpO3Ioe3RhcmdldDoiQXN5bmNJdGVyYXRvciIscHJvdG86ITAscmVhbDohMH0se21hcDpmdW5jdGlvbih0KXtyZXR1cm4gbmV3IGEoe2l0ZXJhdG9yOmkodGhpcyksbWFwcGVyOm8odCl9KX19KX0sNzM5NDk6ZnVuY3Rpb24odCxlLG4peyJ1c2Ugc3RyaWN0Ijt2YXIgcj1uKDE0MDQ0KSxvPW4oODY0NzApLGk9big4NzU3OSksYT1uKDc3MDEpKCJQcm9taXNlIik7cih7dGFyZ2V0OiJBc3luY0l0ZXJhdG9yIixwcm90bzohMCxyZWFsOiEwfSx7cmVkdWNlOmZ1bmN0aW9uKHQpe3ZhciBlPWkodGhpcyksbj1vKGUubmV4dCkscj1hcmd1bWVudHMubGVuZ3RoPDIsYz1yP3ZvaWQgMDphcmd1bWVudHNbMV07cmV0dXJuIG8odCksbmV3IGEoKGZ1bmN0aW9uKG8scyl7dmFyIHU9ZnVuY3Rpb24oKXt0cnl7YS5yZXNvbHZlKGkobi5jYWxsKGUpKSkudGhlbigoZnVuY3Rpb24oZSl7dHJ5e2lmKGkoZSkuZG9uZSlyP3MoVHlwZUVycm9yKCJSZWR1Y2Ugb2YgZW1wdHkgaXRlcmF0b3Igd2l0aCBubyBpbml0aWFsIHZhbHVlIikpOm8oYyk7ZWxzZXt2YXIgbj1lLnZhbHVlO3I/KHI9ITEsYz1uLHUoKSk6YS5yZXNvbHZlKHQoYyxuKSkudGhlbigoZnVuY3Rpb24odCl7Yz10LHUoKX0pLHMpfX1jYXRjaCh0KXtzKHQpfX0pLHMpfWNhdGNoKHQpe3ModCl9fTt1KCl9KSl9fSl9LDg4MjExOmZ1bmN0aW9uKHQsZSxuKXsidXNlIHN0cmljdCI7dmFyIHI9bigxNDA0NCksbz1uKDQ1NjY2KS5zb21lO3Ioe3RhcmdldDoiQXN5bmNJdGVyYXRvciIscHJvdG86ITAscmVhbDohMH0se3NvbWU6ZnVuY3Rpb24odCl7cmV0dXJuIG8odGhpcyx0KX19KX0sNzM3NjE6ZnVuY3Rpb24odCxlLG4peyJ1c2Ugc3RyaWN0Ijt2YXIgcj1uKDE0MDQ0KSxvPW4oODc1NzkpLGk9big0NTY4MCksYT1uKDI3MDA0KSgoZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMucmVtYWluaW5nLS0/dGhpcy5uZXh0LmNhbGwodGhpcy5pdGVyYXRvcix0KToodGhpcy5kb25lPSEwLHtkb25lOiEwLHZhbHVlOnZvaWQgMH0pfSkpO3Ioe3RhcmdldDoiQXN5bmNJdGVyYXRvciIscHJvdG86ITAscmVhbDohMH0se3Rha2U6ZnVuY3Rpb24odCl7cmV0dXJuIG5ldyBhKHtpdGVyYXRvcjpvKHRoaXMpLHJlbWFpbmluZzppKHQpfSl9fSl9LDQyMTk2OmZ1bmN0aW9uKHQsZSxuKXsidXNlIHN0cmljdCI7dmFyIHI9bigxNDA0NCksbz1uKDQ1NjY2KS50b0FycmF5O3Ioe3RhcmdldDoiQXN5bmNJdGVyYXRvciIscHJvdG86ITAscmVhbDohMH0se3RvQXJyYXk6ZnVuY3Rpb24oKXtyZXR1cm4gbyh0aGlzKX19KX0sMzY1NzE6ZnVuY3Rpb24odCxlLG4pe3ZhciByPW4oMTQwNDQpLG89big3NDY4NSksaT1uKDc3MDEpLGE9big1MDg2OCksYz1mdW5jdGlvbigpe3ZhciB0PWkoIk9iamVjdCIsImZyZWV6ZSIpO3JldHVybiB0P3QoYShudWxsKSk6YShudWxsKX07cih7Z2xvYmFsOiEwfSx7Y29tcG9zaXRlS2V5OmZ1bmN0aW9uKCl7cmV0dXJuIG8uYXBwbHkoT2JqZWN0LGFyZ3VtZW50cykuZ2V0KCJvYmplY3QiLGMpfX0pfSw0MzA4NjpmdW5jdGlvbih0LGUsbil7dmFyIHI9bigxNDA0NCksbz1uKDc0Njg1KSxpPW4oNzcwMSk7cih7Z2xvYmFsOiEwfSx7Y29tcG9zaXRlU3ltYm9sOmZ1bmN0aW9uKCl7cmV0dXJuIDE9PT1hcmd1bWVudHMubGVuZ3RoJiYic3RyaW5nIj09dHlwZW9mIGFyZ3VtZW50c1swXT9pKCJTeW1ib2wiKS5mb3IoYXJndW1lbnRzWzBdKTpvLmFwcGx5KG51bGwsYXJndW1lbnRzKS5nZXQoInN5bWJvbCIsaSgiU3ltYm9sIikpfX0pfSw5OTYyODpmdW5jdGlvbih0LGUsbil7big3MTYyMil9LDkyNjAxOmZ1bmN0aW9uKHQsZSxuKXsidXNlIHN0cmljdCI7dmFyIHI9bigxNDA0NCksbz1uKDg3NTc5KSxpPW4oODgwNykoKGZ1bmN0aW9uKHQpe3ZhciBlPW8odGhpcy5uZXh0LmNhbGwodGhpcy5pdGVyYXRvcix0KSk7aWYoISh0aGlzLmRvbmU9ISFlLmRvbmUpKXJldHVyblt0aGlzLmluZGV4KyssZS52YWx1ZV19KSk7cih7dGFyZ2V0OiJJdGVyYXRvciIscHJvdG86ITAscmVhbDohMH0se2FzSW5kZXhlZFBhaXJzOmZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBpKHtpdGVyYXRvcjpvKHRoaXMpLGluZGV4OjB9KX19KX0sNDMzMzI6ZnVuY3Rpb24odCxlLG4peyJ1c2Ugc3RyaWN0Ijt2YXIgcj1uKDE0MDQ0KSxvPW4oODk1NTgpLGk9big1OTM3OSksYT1uKDY2OTcxKSxjPW4oMzIxODcpLHM9big3NjI5OCksdT1uKDIzNzI0KSxsPW4oNjQxNzYpLkl0ZXJhdG9yUHJvdG90eXBlLGY9big2NTY3MiksZD11KCJpdGVyYXRvciIpLHA9dSgidG9TdHJpbmdUYWciKSxoPW8uSXRlcmF0b3Isdj1mfHwiZnVuY3Rpb24iIT10eXBlb2YgaHx8aC5wcm90b3R5cGUhPT1sfHwhYygoZnVuY3Rpb24oKXtoKHt9KX0pKSxnPWZ1bmN0aW9uKCl7aSh0aGlzLGcpfTtmJiZhKGw9e30sZCwoZnVuY3Rpb24oKXtyZXR1cm4gdGhpc30pKSxzKGwscCl8fGEobCxwLCJJdGVyYXRvciIpLCF2JiZzKGwsImNvbnN0cnVjdG9yIikmJmwuY29uc3RydWN0b3IhPT1PYmplY3R8fGEobCwiY29uc3RydWN0b3IiLGcpLGcucHJvdG90eXBlPWwscih7Z2xvYmFsOiEwLGZvcmNlZDp2fSx7SXRlcmF0b3I6Z30pfSwyMDQ3NDpmdW5jdGlvbih0LGUsbil7InVzZSBzdHJpY3QiO3ZhciByPW4oMTQwNDQpLG89big4NzU3OSksaT1uKDQ1NjgwKSxhPW4oODgwNykoKGZ1bmN0aW9uKHQpe2Zvcih2YXIgZSxuPXRoaXMuaXRlcmF0b3Iscj10aGlzLm5leHQ7dGhpcy5yZW1haW5pbmc7KWlmKHRoaXMucmVtYWluaW5nLS0sZT1vKHIuY2FsbChuKSksdGhpcy5kb25lPSEhZS5kb25lKXJldHVybjtpZihlPW8oci5jYWxsKG4sdCkpLCEodGhpcy5kb25lPSEhZS5kb25lKSlyZXR1cm4gZS52YWx1ZX0pKTtyKHt0YXJnZXQ6Ikl0ZXJhdG9yIixwcm90bzohMCxyZWFsOiEwfSx7ZHJvcDpmdW5jdGlvbih0KXtyZXR1cm4gbmV3IGEoe2l0ZXJhdG9yOm8odGhpcykscmVtYWluaW5nOmkodCl9KX19KX0sNTQ1NTY6ZnVuY3Rpb24odCxlLG4peyJ1c2Ugc3RyaWN0Ijt2YXIgcj1uKDE0MDQ0KSxvPW4oNDEzMzQpLGk9big4NjQ3MCksYT1uKDg3NTc5KTtyKHt0YXJnZXQ6Ikl0ZXJhdG9yIixwcm90bzohMCxyZWFsOiEwfSx7ZXZlcnk6ZnVuY3Rpb24odCl7cmV0dXJuIGEodGhpcyksaSh0KSwhbyh0aGlzLChmdW5jdGlvbihlKXtpZighdChlKSlyZXR1cm4gby5zdG9wKCl9KSx2b2lkIDAsITEsITApLnN0b3BwZWR9fSl9LDQwNjM4OmZ1bmN0aW9uKHQsZSxuKXsidXNlIHN0cmljdCI7dmFyIHI9bigxNDA0NCksbz1uKDg2NDcwKSxpPW4oODc1NzkpLGE9big4ODA3KSxjPW4oMTIyNzgpLHM9YSgoZnVuY3Rpb24odCl7Zm9yKHZhciBlLG4scj10aGlzLml0ZXJhdG9yLG89dGhpcy5maWx0ZXJlcixhPXRoaXMubmV4dDs7KXtpZihlPWkoYS5jYWxsKHIsdCkpLHRoaXMuZG9uZT0hIWUuZG9uZSlyZXR1cm47aWYobj1lLnZhbHVlLGMocixvLG4pKXJldHVybiBufX0pKTtyKHt0YXJnZXQ6Ikl0ZXJhdG9yIixwcm90bzohMCxyZWFsOiEwfSx7ZmlsdGVyOmZ1bmN0aW9uKHQpe3JldHVybiBuZXcgcyh7aXRlcmF0b3I6aSh0aGlzKSxmaWx0ZXJlcjpvKHQpfSl9fSl9LDk2NjU5OmZ1bmN0aW9uKHQsZSxuKXsidXNlIHN0cmljdCI7dmFyIHI9bigxNDA0NCksbz1uKDQxMzM0KSxpPW4oODY0NzApLGE9big4NzU3OSk7cih7dGFyZ2V0OiJJdGVyYXRvciIscHJvdG86ITAscmVhbDohMH0se2ZpbmQ6ZnVuY3Rpb24odCl7cmV0dXJuIGEodGhpcyksaSh0KSxvKHRoaXMsKGZ1bmN0aW9uKGUpe2lmKHQoZSkpcmV0dXJuIG8uc3RvcChlKX0pLHZvaWQgMCwhMSwhMCkucmVzdWx0fX0pfSwxNDY4ODpmdW5jdGlvbih0LGUsbil7InVzZSBzdHJpY3QiO3ZhciByPW4oMTQwNDQpLG89big4NjQ3MCksaT1uKDg3NTc5KSxhPW4oNzM4OTApLGM9big4ODA3KSxzPW4oMTIyNzgpLHU9YygoZnVuY3Rpb24odCl7Zm9yKHZhciBlLG4scixjLHU9dGhpcy5pdGVyYXRvcjs7KXtpZihjPXRoaXMuaW5uZXJJdGVyYXRvcil7aWYoIShlPWkodGhpcy5pbm5lck5leHQuY2FsbChjKSkpLmRvbmUpcmV0dXJuIGUudmFsdWU7dGhpcy5pbm5lckl0ZXJhdG9yPXRoaXMuaW5uZXJOZXh0PW51bGx9aWYoZT1pKHRoaXMubmV4dC5jYWxsKHUsdCkpLHRoaXMuZG9uZT0hIWUuZG9uZSlyZXR1cm47aWYobj1zKHUsdGhpcy5tYXBwZXIsZS52YWx1ZSksdm9pZCAwPT09KHI9YShuKSkpdGhyb3cgVHlwZUVycm9yKCIuZmxhdE1hcCBjYWxsYmFjayBzaG91bGQgcmV0dXJuIGFuIGl0ZXJhYmxlIG9iamVjdCIpO3RoaXMuaW5uZXJJdGVyYXRvcj1jPWkoci5jYWxsKG4pKSx0aGlzLmlubmVyTmV4dD1vKGMubmV4dCl9fSkpO3Ioe3RhcmdldDoiSXRlcmF0b3IiLHByb3RvOiEwLHJlYWw6ITB9LHtmbGF0TWFwOmZ1bmN0aW9uKHQpe3JldHVybiBuZXcgdSh7aXRlcmF0b3I6aSh0aGlzKSxtYXBwZXI6byh0KSxpbm5lckl0ZXJhdG9yOm51bGwsaW5uZXJOZXh0Om51bGx9KX19KX0sNzM3ODpmdW5jdGlvbih0LGUsbil7InVzZSBzdHJpY3QiO3ZhciByPW4oMTQwNDQpLG89big0MTMzNCksaT1uKDg3NTc5KTtyKHt0YXJnZXQ6Ikl0ZXJhdG9yIixwcm90bzohMCxyZWFsOiEwfSx7Zm9yRWFjaDpmdW5jdGlvbih0KXtvKGkodGhpcyksdCx2b2lkIDAsITEsITApfX0pfSwyNzQyODpmdW5jdGlvbih0LGUsbil7dmFyIHI9bigxNDA0NCksbz1uKDU2MjM4KSxpPW4oODY0NzApLGE9big4NzU3OSksYz1uKDE5MjA5KSxzPW4oODgwNyksdT1uKDczODkwKSxsPW8uSXRlcmF0b3IsZj1zKChmdW5jdGlvbih0KXt2YXIgZT1hKHRoaXMubmV4dC5jYWxsKHRoaXMuaXRlcmF0b3IsdCkpO2lmKCEodGhpcy5kb25lPSEhZS5kb25lKSlyZXR1cm4gZS52YWx1ZX0pLCEwKTtyKHt0YXJnZXQ6Ikl0ZXJhdG9yIixzdGF0OiEwfSx7ZnJvbTpmdW5jdGlvbih0KXt2YXIgZSxuPWModCkscj11KG4pO2lmKG51bGwhPXIpe2lmKChlPWkocikuY2FsbChuKSlpbnN0YW5jZW9mIGwpcmV0dXJuIGV9ZWxzZSBlPW47cmV0dXJuIG5ldyBmKHtpdGVyYXRvcjplfSl9fSl9LDMzNDM2OmZ1bmN0aW9uKHQsZSxuKXsidXNlIHN0cmljdCI7dmFyIHI9bigxNDA0NCksbz1uKDg2NDcwKSxpPW4oODc1NzkpLGE9big4ODA3KSxjPW4oMTIyNzgpLHM9YSgoZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5pdGVyYXRvcixuPWkodGhpcy5uZXh0LmNhbGwoZSx0KSk7aWYoISh0aGlzLmRvbmU9ISFuLmRvbmUpKXJldHVybiBjKGUsdGhpcy5tYXBwZXIsbi52YWx1ZSl9KSk7cih7dGFyZ2V0OiJJdGVyYXRvciIscHJvdG86ITAscmVhbDohMH0se21hcDpmdW5jdGlvbih0KXtyZXR1cm4gbmV3IHMoe2l0ZXJhdG9yOmkodGhpcyksbWFwcGVyOm8odCl9KX19KX0sODQzODg6ZnVuY3Rpb24odCxlLG4peyJ1c2Ugc3RyaWN0Ijt2YXIgcj1uKDE0MDQ0KSxvPW4oNDEzMzQpLGk9big4NjQ3MCksYT1uKDg3NTc5KTtyKHt0YXJnZXQ6Ikl0ZXJhdG9yIixwcm90bzohMCxyZWFsOiEwfSx7cmVkdWNlOmZ1bmN0aW9uKHQpe2EodGhpcyksaSh0KTt2YXIgZT1hcmd1bWVudHMubGVuZ3RoPDIsbj1lP3ZvaWQgMDphcmd1bWVudHNbMV07aWYobyh0aGlzLChmdW5jdGlvbihyKXtlPyhlPSExLG49cik6bj10KG4scil9KSx2b2lkIDAsITEsITApLGUpdGhyb3cgVHlwZUVycm9yKCJSZWR1Y2Ugb2YgZW1wdHkgaXRlcmF0b3Igd2l0aCBubyBpbml0aWFsIHZhbHVlIik7cmV0dXJuIG59fSl9LDU5NjIzOmZ1bmN0aW9uKHQsZSxuKXsidXNlIHN0cmljdCI7dmFyIHI9bigxNDA0NCksbz1uKDQxMzM0KSxpPW4oODY0NzApLGE9big4NzU3OSk7cih7dGFyZ2V0OiJJdGVyYXRvciIscHJvdG86ITAscmVhbDohMH0se3NvbWU6ZnVuY3Rpb24odCl7cmV0dXJuIGEodGhpcyksaSh0KSxvKHRoaXMsKGZ1bmN0aW9uKGUpe2lmKHQoZSkpcmV0dXJuIG8uc3RvcCgpfSksdm9pZCAwLCExLCEwKS5zdG9wcGVkfX0pfSwzMjg1MzpmdW5jdGlvbih0LGUsbil7InVzZSBzdHJpY3QiO3ZhciByPW4oMTQwNDQpLG89big4NzU3OSksaT1uKDQ1NjgwKSxhPW4oODgwNykoKGZ1bmN0aW9uKHQpe2lmKHRoaXMucmVtYWluaW5nLS0pe3ZhciBlPW8odGhpcy5uZXh0LmNhbGwodGhpcy5pdGVyYXRvcix0KSk7cmV0dXJuKHRoaXMuZG9uZT0hIWUuZG9uZSk/dm9pZCAwOmUudmFsdWV9dGhpcy5kb25lPSEwfSkpO3Ioe3RhcmdldDoiSXRlcmF0b3IiLHByb3RvOiEwLHJlYWw6ITB9LHt0YWtlOmZ1bmN0aW9uKHQpe3JldHVybiBuZXcgYSh7aXRlcmF0b3I6byh0aGlzKSxyZW1haW5pbmc6aSh0KX0pfX0pfSw2NzA3MjpmdW5jdGlvbih0LGUsbil7InVzZSBzdHJpY3QiO3ZhciByPW4oMTQwNDQpLG89big0MTMzNCksaT1uKDg3NTc5KSxhPVtdLnB1c2g7cih7dGFyZ2V0OiJJdGVyYXRvciIscHJvdG86ITAscmVhbDohMH0se3RvQXJyYXk6ZnVuY3Rpb24oKXt2YXIgdD1bXTtyZXR1cm4gbyhpKHRoaXMpLGEsdCwhMSwhMCksdH19KX0sNDg0NDpmdW5jdGlvbih0LGUsbil7InVzZSBzdHJpY3QiO3ZhciByPW4oMTQwNDQpLG89big2NTY3MiksaT1uKDE0NjYpO3Ioe3RhcmdldDoiTWFwIixwcm90bzohMCxyZWFsOiEwLGZvcmNlZDpvfSx7ZGVsZXRlQWxsOmZ1bmN0aW9uKCl7cmV0dXJuIGkuYXBwbHkodGhpcyxhcmd1bWVudHMpfX0pfSwzNTU0OmZ1bmN0aW9uKHQsZSxuKXsidXNlIHN0cmljdCI7dmFyIHI9bigxNDA0NCksbz1uKDY1NjcyKSxpPW4oODc1NzkpLGE9big0NjEzMCksYz1uKDQxOTg5KSxzPW4oNDEzMzQpO3Ioe3RhcmdldDoiTWFwIixwcm90bzohMCxyZWFsOiEwLGZvcmNlZDpvfSx7ZXZlcnk6ZnVuY3Rpb24odCl7dmFyIGU9aSh0aGlzKSxuPWMoZSkscj1hKHQsYXJndW1lbnRzLmxlbmd0aD4xP2FyZ3VtZW50c1sxXTp2b2lkIDAsMyk7cmV0dXJuIXMobiwoZnVuY3Rpb24odCxuKXtpZighcihuLHQsZSkpcmV0dXJuIHMuc3RvcCgpfSksdm9pZCAwLCEwLCEwKS5zdG9wcGVkfX0pfSwxODg0NDpmdW5jdGlvbih0LGUsbil7InVzZSBzdHJpY3QiO3ZhciByPW4oMTQwNDQpLG89big2NTY3MiksaT1uKDc3MDEpLGE9big4NzU3OSksYz1uKDg2NDcwKSxzPW4oNDYxMzApLHU9bigxMzk3OSksbD1uKDQxOTg5KSxmPW4oNDEzMzQpO3Ioe3RhcmdldDoiTWFwIixwcm90bzohMCxyZWFsOiEwLGZvcmNlZDpvfSx7ZmlsdGVyOmZ1bmN0aW9uKHQpe3ZhciBlPWEodGhpcyksbj1sKGUpLHI9cyh0LGFyZ3VtZW50cy5sZW5ndGg+MT9hcmd1bWVudHNbMV06dm9pZCAwLDMpLG89bmV3KHUoZSxpKCJNYXAiKSkpLGQ9YyhvLnNldCk7cmV0dXJuIGYobiwoZnVuY3Rpb24odCxuKXtyKG4sdCxlKSYmZC5jYWxsKG8sdCxuKX0pLHZvaWQgMCwhMCwhMCksb319KX0sNDkwNTA6ZnVuY3Rpb24odCxlLG4peyJ1c2Ugc3RyaWN0Ijt2YXIgcj1uKDE0MDQ0KSxvPW4oNjU2NzIpLGk9big4NzU3OSksYT1uKDQ2MTMwKSxjPW4oNDE5ODkpLHM9big0MTMzNCk7cih7dGFyZ2V0OiJNYXAiLHByb3RvOiEwLHJlYWw6ITAsZm9yY2VkOm99LHtmaW5kS2V5OmZ1bmN0aW9uKHQpe3ZhciBlPWkodGhpcyksbj1jKGUpLHI9YSh0LGFyZ3VtZW50cy5sZW5ndGg+MT9hcmd1bWVudHNbMV06dm9pZCAwLDMpO3JldHVybiBzKG4sKGZ1bmN0aW9uKHQsbil7aWYocihuLHQsZSkpcmV0dXJuIHMuc3RvcCh0KX0pLHZvaWQgMCwhMCwhMCkucmVzdWx0fX0pfSwzNTY1NjpmdW5jdGlvbih0LGUsbil7InVzZSBzdHJpY3QiO3ZhciByPW4oMTQwNDQpLG89big2NTY3MiksaT1uKDg3NTc5KSxhPW4oNDYxMzApLGM9big0MTk4OSkscz1uKDQxMzM0KTtyKHt0YXJnZXQ6Ik1hcCIscHJvdG86ITAscmVhbDohMCxmb3JjZWQ6b30se2ZpbmQ6ZnVuY3Rpb24odCl7dmFyIGU9aSh0aGlzKSxuPWMoZSkscj1hKHQsYXJndW1lbnRzLmxlbmd0aD4xP2FyZ3VtZW50c1sxXTp2b2lkIDAsMyk7cmV0dXJuIHMobiwoZnVuY3Rpb24odCxuKXtpZihyKG4sdCxlKSlyZXR1cm4gcy5zdG9wKG4pfSksdm9pZCAwLCEwLCEwKS5yZXN1bHR9fSl9LDM4NzkyOmZ1bmN0aW9uKHQsZSxuKXtuKDE0MDQ0KSh7dGFyZ2V0OiJNYXAiLHN0YXQ6ITB9LHtmcm9tOm4oMTI5MDEpfSl9LDUzNTEzOmZ1bmN0aW9uKHQsZSxuKXsidXNlIHN0cmljdCI7dmFyIHI9bigxNDA0NCksbz1uKDQxMzM0KSxpPW4oODY0NzApO3Ioe3RhcmdldDoiTWFwIixzdGF0OiEwfSx7Z3JvdXBCeTpmdW5jdGlvbih0LGUpe3ZhciBuPW5ldyB0aGlzO2koZSk7dmFyIHI9aShuLmhhcyksYT1pKG4uZ2V0KSxjPWkobi5zZXQpO3JldHVybiBvKHQsKGZ1bmN0aW9uKHQpe3ZhciBvPWUodCk7ci5jYWxsKG4sbyk/YS5jYWxsKG4sbykucHVzaCh0KTpjLmNhbGwobixvLFt0XSl9KSksbn19KX0sOTM4NDM6ZnVuY3Rpb24odCxlLG4peyJ1c2Ugc3RyaWN0Ijt2YXIgcj1uKDE0MDQ0KSxvPW4oNjU2NzIpLGk9big4NzU3OSksYT1uKDQxOTg5KSxjPW4oMzgxODkpLHM9big0MTMzNCk7cih7dGFyZ2V0OiJNYXAiLHByb3RvOiEwLHJlYWw6ITAsZm9yY2VkOm99LHtpbmNsdWRlczpmdW5jdGlvbih0KXtyZXR1cm4gcyhhKGkodGhpcykpLChmdW5jdGlvbihlLG4pe2lmKGMobix0KSlyZXR1cm4gcy5zdG9wKCl9KSx2b2lkIDAsITAsITApLnN0b3BwZWR9fSl9LDk5MjU1OmZ1bmN0aW9uKHQsZSxuKXsidXNlIHN0cmljdCI7dmFyIHI9bigxNDA0NCksbz1uKDQxMzM0KSxpPW4oODY0NzApO3Ioe3RhcmdldDoiTWFwIixzdGF0OiEwfSx7a2V5Qnk6ZnVuY3Rpb24odCxlKXt2YXIgbj1uZXcgdGhpcztpKGUpO3ZhciByPWkobi5zZXQpO3JldHVybiBvKHQsKGZ1bmN0aW9uKHQpe3IuY2FsbChuLGUodCksdCl9KSksbn19KX0sNjYyMjQ6ZnVuY3Rpb24odCxlLG4peyJ1c2Ugc3RyaWN0Ijt2YXIgcj1uKDE0MDQ0KSxvPW4oNjU2NzIpLGk9big4NzU3OSksYT1uKDQxOTg5KSxjPW4oNDEzMzQpO3Ioe3RhcmdldDoiTWFwIixwcm90bzohMCxyZWFsOiEwLGZvcmNlZDpvfSx7a2V5T2Y6ZnVuY3Rpb24odCl7cmV0dXJuIGMoYShpKHRoaXMpKSwoZnVuY3Rpb24oZSxuKXtpZihuPT09dClyZXR1cm4gYy5zdG9wKGUpfSksdm9pZCAwLCEwLCEwKS5yZXN1bHR9fSl9LDcxNzAwOmZ1bmN0aW9uKHQsZSxuKXsidXNlIHN0cmljdCI7dmFyIHI9bigxNDA0NCksbz1uKDY1NjcyKSxpPW4oNzcwMSksYT1uKDg3NTc5KSxjPW4oODY0NzApLHM9big0NjEzMCksdT1uKDEzOTc5KSxsPW4oNDE5ODkpLGY9big0MTMzNCk7cih7dGFyZ2V0OiJNYXAiLHByb3RvOiEwLHJlYWw6ITAsZm9yY2VkOm99LHttYXBLZXlzOmZ1bmN0aW9uKHQpe3ZhciBlPWEodGhpcyksbj1sKGUpLHI9cyh0LGFyZ3VtZW50cy5sZW5ndGg+MT9hcmd1bWVudHNbMV06dm9pZCAwLDMpLG89bmV3KHUoZSxpKCJNYXAiKSkpLGQ9YyhvLnNldCk7cmV0dXJuIGYobiwoZnVuY3Rpb24odCxuKXtkLmNhbGwobyxyKG4sdCxlKSxuKX0pLHZvaWQgMCwhMCwhMCksb319KX0sNjk1Mjk6ZnVuY3Rpb24odCxlLG4peyJ1c2Ugc3RyaWN0Ijt2YXIgcj1uKDE0MDQ0KSxvPW4oNjU2NzIpLGk9big3NzAxKSxhPW4oODc1NzkpLGM9big4NjQ3MCkscz1uKDQ2MTMwKSx1PW4oMTM5NzkpLGw9big0MTk4OSksZj1uKDQxMzM0KTtyKHt0YXJnZXQ6Ik1hcCIscHJvdG86ITAscmVhbDohMCxmb3JjZWQ6b30se21hcFZhbHVlczpmdW5jdGlvbih0KXt2YXIgZT1hKHRoaXMpLG49bChlKSxyPXModCxhcmd1bWVudHMubGVuZ3RoPjE/YXJndW1lbnRzWzFdOnZvaWQgMCwzKSxvPW5ldyh1KGUsaSgiTWFwIikpKSxkPWMoby5zZXQpO3JldHVybiBmKG4sKGZ1bmN0aW9uKHQsbil7ZC5jYWxsKG8sdCxyKG4sdCxlKSl9KSx2b2lkIDAsITAsITApLG99fSl9LDI3NzM0OmZ1bmN0aW9uKHQsZSxuKXsidXNlIHN0cmljdCI7dmFyIHI9bigxNDA0NCksbz1uKDY1NjcyKSxpPW4oODc1NzkpLGE9big4NjQ3MCksYz1uKDQxMzM0KTtyKHt0YXJnZXQ6Ik1hcCIscHJvdG86ITAscmVhbDohMCxmb3JjZWQ6b30se21lcmdlOmZ1bmN0aW9uKHQpe2Zvcih2YXIgZT1pKHRoaXMpLG49YShlLnNldCkscj0wO3I8YXJndW1lbnRzLmxlbmd0aDspYyhhcmd1bWVudHNbcisrXSxuLGUsITApO3JldHVybiBlfX0pfSwxOTkwOmZ1bmN0aW9uKHQsZSxuKXtuKDE0MDQ0KSh7dGFyZ2V0OiJNYXAiLHN0YXQ6ITB9LHtvZjpuKDI1MDI2KX0pfSw3NzM2OTpmdW5jdGlvbih0LGUsbil7InVzZSBzdHJpY3QiO3ZhciByPW4oMTQwNDQpLG89big2NTY3MiksaT1uKDg3NTc5KSxhPW4oODY0NzApLGM9big0MTk4OSkscz1uKDQxMzM0KTtyKHt0YXJnZXQ6Ik1hcCIscHJvdG86ITAscmVhbDohMCxmb3JjZWQ6b30se3JlZHVjZTpmdW5jdGlvbih0KXt2YXIgZT1pKHRoaXMpLG49YyhlKSxyPWFyZ3VtZW50cy5sZW5ndGg8MixvPXI/dm9pZCAwOmFyZ3VtZW50c1sxXTtpZihhKHQpLHMobiwoZnVuY3Rpb24obixpKXtyPyhyPSExLG89aSk6bz10KG8saSxuLGUpfSksdm9pZCAwLCEwLCEwKSxyKXRocm93IFR5cGVFcnJvcigiUmVkdWNlIG9mIGVtcHR5IG1hcCB3aXRoIG5vIGluaXRpYWwgdmFsdWUiKTtyZXR1cm4gb319KX0sNjk4NDI6ZnVuY3Rpb24odCxlLG4peyJ1c2Ugc3RyaWN0Ijt2YXIgcj1uKDE0MDQ0KSxvPW4oNjU2NzIpLGk9big4NzU3OSksYT1uKDQ2MTMwKSxjPW4oNDE5ODkpLHM9big0MTMzNCk7cih7dGFyZ2V0OiJNYXAiLHByb3RvOiEwLHJlYWw6ITAsZm9yY2VkOm99LHtzb21lOmZ1bmN0aW9uKHQpe3ZhciBlPWkodGhpcyksbj1jKGUpLHI9YSh0LGFyZ3VtZW50cy5sZW5ndGg+MT9hcmd1bWVudHNbMV06dm9pZCAwLDMpO3JldHVybiBzKG4sKGZ1bmN0aW9uKHQsbil7aWYocihuLHQsZSkpcmV0dXJuIHMuc3RvcCgpfSksdm9pZCAwLCEwLCEwKS5zdG9wcGVkfX0pfSw0MzI5MDpmdW5jdGlvbih0LGUsbil7InVzZSBzdHJpY3QiO24oMTQwNDQpKHt0YXJnZXQ6Ik1hcCIscHJvdG86ITAscmVhbDohMCxmb3JjZWQ6big2NTY3Mil9LHt1cGRhdGVPckluc2VydDpuKDQ3OTI3KX0pfSw5NzkyODpmdW5jdGlvbih0LGUsbil7InVzZSBzdHJpY3QiO3ZhciByPW4oMTQwNDQpLG89big2NTY3MiksaT1uKDg3NTc5KSxhPW4oODY0NzApO3Ioe3RhcmdldDoiTWFwIixwcm90bzohMCxyZWFsOiEwLGZvcmNlZDpvfSx7dXBkYXRlOmZ1bmN0aW9uKHQsZSl7dmFyIG49aSh0aGlzKSxyPWFyZ3VtZW50cy5sZW5ndGg7YShlKTt2YXIgbz1uLmhhcyh0KTtpZighbyYmcjwzKXRocm93IFR5cGVFcnJvcigiVXBkYXRpbmcgYWJzZW50IHZhbHVlIik7dmFyIGM9bz9uLmdldCh0KTphKHI+Mj9hcmd1bWVudHNbMl06dm9pZCAwKSh0LG4pO3JldHVybiBuLnNldCh0LGUoYyx0LG4pKSxufX0pfSwxNDY4MjpmdW5jdGlvbih0LGUsbil7InVzZSBzdHJpY3QiO24oMTQwNDQpKHt0YXJnZXQ6Ik1hcCIscHJvdG86ITAscmVhbDohMCxmb3JjZWQ6big2NTY3Mil9LHt1cHNlcnQ6big0NzkyNyl9KX0sNzAyMjU6ZnVuY3Rpb24odCxlLG4pe3ZhciByPW4oMTQwNDQpLG89TWF0aC5taW4saT1NYXRoLm1heDtyKHt0YXJnZXQ6Ik1hdGgiLHN0YXQ6ITB9LHtjbGFtcDpmdW5jdGlvbih0LGUsbil7cmV0dXJuIG8obixpKGUsdCkpfX0pfSwyMzk5OmZ1bmN0aW9uKHQsZSxuKXtuKDE0MDQ0KSh7dGFyZ2V0OiJNYXRoIixzdGF0OiEwfSx7REVHX1BFUl9SQUQ6TWF0aC5QSS8xODB9KX0sMTY4MDk6ZnVuY3Rpb24odCxlLG4pe3ZhciByPW4oMTQwNDQpLG89MTgwL01hdGguUEk7cih7dGFyZ2V0OiJNYXRoIixzdGF0OiEwfSx7ZGVncmVlczpmdW5jdGlvbih0KXtyZXR1cm4gdCpvfX0pfSw2NzE0MTpmdW5jdGlvbih0LGUsbil7dmFyIHI9bigxNDA0NCksbz1uKDc3NDIpLGk9big1MzI1MSk7cih7dGFyZ2V0OiJNYXRoIixzdGF0OiEwfSx7ZnNjYWxlOmZ1bmN0aW9uKHQsZSxuLHIsYSl7cmV0dXJuIGkobyh0LGUsbixyLGEpKX19KX0sMzA2MTM6ZnVuY3Rpb24odCxlLG4pe24oMTQwNDQpKHt0YXJnZXQ6Ik1hdGgiLHN0YXQ6ITB9LHtpYWRkaDpmdW5jdGlvbih0LGUsbixyKXt2YXIgbz10Pj4+MCxpPW4+Pj4wO3JldHVybihlPj4+MCkrKHI+Pj4wKSsoKG8maXwob3xpKSZ+KG8raT4+PjApKT4+PjMxKXwwfX0pfSw0OTc5OmZ1bmN0aW9uKHQsZSxuKXtuKDE0MDQ0KSh7dGFyZ2V0OiJNYXRoIixzdGF0OiEwfSx7aW11bGg6ZnVuY3Rpb24odCxlKXt2YXIgbj02NTUzNSxyPSt0LG89K2UsaT1yJm4sYT1vJm4sYz1yPj4xNixzPW8+PjE2LHU9KGMqYT4+PjApKyhpKmE+Pj4xNik7cmV0dXJuIGMqcysodT4+MTYpKygoaSpzPj4+MCkrKHUmbik+PjE2KX19KX0sNjg0MDY6ZnVuY3Rpb24odCxlLG4pe24oMTQwNDQpKHt0YXJnZXQ6Ik1hdGgiLHN0YXQ6ITB9LHtpc3ViaDpmdW5jdGlvbih0LGUsbixyKXt2YXIgbz10Pj4+MCxpPW4+Pj4wO3JldHVybihlPj4+MCktKHI+Pj4wKS0oKH5vJml8fihvXmkpJm8taT4+PjApPj4+MzEpfDB9fSl9LDkwNzY5OmZ1bmN0aW9uKHQsZSxuKXtuKDE0MDQ0KSh7dGFyZ2V0OiJNYXRoIixzdGF0OiEwfSx7UkFEX1BFUl9ERUc6MTgwL01hdGguUEl9KX0sNTc4OTE6ZnVuY3Rpb24odCxlLG4pe3ZhciByPW4oMTQwNDQpLG89TWF0aC5QSS8xODA7cih7dGFyZ2V0OiJNYXRoIixzdGF0OiEwfSx7cmFkaWFuczpmdW5jdGlvbih0KXtyZXR1cm4gdCpvfX0pfSwxNTcyMjpmdW5jdGlvbih0LGUsbil7bigxNDA0NCkoe3RhcmdldDoiTWF0aCIsc3RhdDohMH0se3NjYWxlOm4oNzc0Mil9KX0sMTc2NTpmdW5jdGlvbih0LGUsbil7dmFyIHI9bigxNDA0NCksbz1uKDg3NTc5KSxpPW4oODk1NDIpLGE9big3MTIwMSksYz1uKDg5ODI3KSxzPSJTZWVkZWQgUmFuZG9tIix1PSJTZWVkZWQgUmFuZG9tIEdlbmVyYXRvciIsbD1jLnNldCxmPWMuZ2V0dGVyRm9yKHUpLGQ9YSgoZnVuY3Rpb24odCl7bCh0aGlzLHt0eXBlOnUsc2VlZDp0JTIxNDc0ODM2NDd9KX0pLHMsKGZ1bmN0aW9uKCl7dmFyIHQ9Zih0aGlzKTtyZXR1cm57dmFsdWU6KDEwNzM3NDE4MjMmKHQuc2VlZD0oMTEwMzUxNTI0NSp0LnNlZWQrMTIzNDUpJTIxNDc0ODM2NDcpKS8xMDczNzQxODIzLGRvbmU6ITF9fSkpO3Ioe3RhcmdldDoiTWF0aCIsc3RhdDohMCxmb3JjZWQ6ITB9LHtzZWVkZWRQUk5HOmZ1bmN0aW9uKHQpe3ZhciBlPW8odCkuc2VlZDtpZighaShlKSl0aHJvdyBUeXBlRXJyb3IoJ01hdGguc2VlZGVkUFJORygpIGFyZ3VtZW50IHNob3VsZCBoYXZlIGEgInNlZWQiIGZpZWxkIHdpdGggYSBmaW5pdGUgdmFsdWUuJyk7cmV0dXJuIG5ldyBkKGUpfX0pfSw3NzkwNzpmdW5jdGlvbih0LGUsbil7bigxNDA0NCkoe3RhcmdldDoiTWF0aCIsc3RhdDohMH0se3NpZ25iaXQ6ZnVuY3Rpb24odCl7cmV0dXJuKHQ9K3QpPT10JiYwPT10PzEvdD09LTEvMDp0PDB9fSl9LDQ0NjQ2OmZ1bmN0aW9uKHQsZSxuKXtuKDE0MDQ0KSh7dGFyZ2V0OiJNYXRoIixzdGF0OiEwfSx7dW11bGg6ZnVuY3Rpb24odCxlKXt2YXIgbj02NTUzNSxyPSt0LG89K2UsaT1yJm4sYT1vJm4sYz1yPj4+MTYscz1vPj4+MTYsdT0oYyphPj4+MCkrKGkqYT4+PjE2KTtyZXR1cm4gYypzKyh1Pj4+MTYpKygoaSpzPj4+MCkrKHUmbik+Pj4xNil9fSl9LDc1NjQ3OmZ1bmN0aW9uKHQsZSxuKXsidXNlIHN0cmljdCI7dmFyIHI9bigxNDA0NCksbz1uKDQzNDE2KSxpPW4oNzg0NiksYT0iSW52YWxpZCBudW1iZXIgcmVwcmVzZW50YXRpb24iLGM9L15bXGRhLXpdKyQvO3Ioe3RhcmdldDoiTnVtYmVyIixzdGF0OiEwfSx7ZnJvbVN0cmluZzpmdW5jdGlvbih0LGUpe3ZhciBuLHIscz0xO2lmKCJzdHJpbmciIT10eXBlb2YgdCl0aHJvdyBUeXBlRXJyb3IoYSk7aWYoIXQubGVuZ3RoKXRocm93IFN5bnRheEVycm9yKGEpO2lmKCItIj09dC5jaGFyQXQoMCkmJihzPS0xLCEodD10LnNsaWNlKDEpKS5sZW5ndGgpKXRocm93IFN5bnRheEVycm9yKGEpO2lmKChuPXZvaWQgMD09PWU/MTA6byhlKSk8Mnx8bj4zNil0aHJvdyBSYW5nZUVycm9yKCJJbnZhbGlkIHJhZGl4Iik7aWYoIWMudGVzdCh0KXx8KHI9aSh0LG4pKS50b1N0cmluZyhuKSE9PXQpdGhyb3cgU3ludGF4RXJyb3IoYSk7cmV0dXJuIHMqcn19KX0sODQzMDk6ZnVuY3Rpb24odCxlLG4peyJ1c2Ugc3RyaWN0Ijt2YXIgcj1uKDE0MDQ0KSxvPW4oODY0MDMpO3Ioe3RhcmdldDoiT2JqZWN0IixzdGF0OiEwfSx7aXRlcmF0ZUVudHJpZXM6ZnVuY3Rpb24odCl7cmV0dXJuIG5ldyBvKHQsImVudHJpZXMiKX19KX0sNzI5NjM6ZnVuY3Rpb24odCxlLG4peyJ1c2Ugc3RyaWN0Ijt2YXIgcj1uKDE0MDQ0KSxvPW4oODY0MDMpO3Ioe3RhcmdldDoiT2JqZWN0IixzdGF0OiEwfSx7aXRlcmF0ZUtleXM6ZnVuY3Rpb24odCl7cmV0dXJuIG5ldyBvKHQsImtleXMiKX19KX0sNTYzNTk6ZnVuY3Rpb24odCxlLG4peyJ1c2Ugc3RyaWN0Ijt2YXIgcj1uKDE0MDQ0KSxvPW4oODY0MDMpO3Ioe3RhcmdldDoiT2JqZWN0IixzdGF0OiEwfSx7aXRlcmF0ZVZhbHVlczpmdW5jdGlvbih0KXtyZXR1cm4gbmV3IG8odCwidmFsdWVzIil9fSl9LDIwMjM0OmZ1bmN0aW9uKHQsZSxuKXsidXNlIHN0cmljdCI7dmFyIHI9bigxNDA0NCksbz1uKDYyNTU2KSxpPW4oNjc1MzgpLGE9big4NjQ3MCksYz1uKDg3NTc5KSxzPW4oMTA1OTIpLHU9big1OTM3OSksbD1uKDM3NjIwKS5mLGY9big2Njk3MSksZD1uKDE5MjYpLHA9bigzMTA3NCksaD1uKDQxMzM0KSx2PW4oODM2MjApLGc9bigyMzcyNCkseT1uKDg5ODI3KSxtPWcoIm9ic2VydmFibGUiKSxiPXkuZ2V0LHg9eS5zZXQsdz1mdW5jdGlvbih0KXtyZXR1cm4gbnVsbD09dD92b2lkIDA6YSh0KX0sRT1mdW5jdGlvbih0KXt2YXIgZT10LmNsZWFudXA7aWYoZSl7dC5jbGVhbnVwPXZvaWQgMDt0cnl7ZSgpfWNhdGNoKHQpe3YodCl9fX0saj1mdW5jdGlvbih0KXtyZXR1cm4gdm9pZCAwPT09dC5vYnNlcnZlcn0sQz1mdW5jdGlvbih0LGUpe2lmKCFvKXt0LmNsb3NlZD0hMDt2YXIgbj1lLnN1YnNjcmlwdGlvbk9ic2VydmVyO24mJihuLmNsb3NlZD0hMCl9ZS5vYnNlcnZlcj12b2lkIDB9LGs9ZnVuY3Rpb24odCxlKXt2YXIgbixyPXgodGhpcyx7Y2xlYW51cDp2b2lkIDAsb2JzZXJ2ZXI6Yyh0KSxzdWJzY3JpcHRpb25PYnNlcnZlcjp2b2lkIDB9KTtvfHwodGhpcy5jbG9zZWQ9ITEpO3RyeXsobj13KHQuc3RhcnQpKSYmbi5jYWxsKHQsdGhpcyl9Y2F0Y2godCl7dih0KX1pZighaihyKSl7dmFyIGk9ci5zdWJzY3JpcHRpb25PYnNlcnZlcj1uZXcgUyh0aGlzKTt0cnl7dmFyIHM9ZShpKSx1PXM7bnVsbCE9cyYmKHIuY2xlYW51cD0iZnVuY3Rpb24iPT10eXBlb2Ygcy51bnN1YnNjcmliZT9mdW5jdGlvbigpe3UudW5zdWJzY3JpYmUoKX06YShzKSl9Y2F0Y2godCl7cmV0dXJuIHZvaWQgaS5lcnJvcih0KX1qKHIpJiZFKHIpfX07ay5wcm90b3R5cGU9ZCh7fSx7dW5zdWJzY3JpYmU6ZnVuY3Rpb24oKXt2YXIgdD1iKHRoaXMpO2oodCl8fChDKHRoaXMsdCksRSh0KSl9fSksbyYmbChrLnByb3RvdHlwZSwiY2xvc2VkIix7Y29uZmlndXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiBqKGIodGhpcykpfX0pO3ZhciBTPWZ1bmN0aW9uKHQpe3godGhpcyx7c3Vic2NyaXB0aW9uOnR9KSxvfHwodGhpcy5jbG9zZWQ9ITEpfTtTLnByb3RvdHlwZT1kKHt9LHtuZXh0OmZ1bmN0aW9uKHQpe3ZhciBlPWIoYih0aGlzKS5zdWJzY3JpcHRpb24pO2lmKCFqKGUpKXt2YXIgbj1lLm9ic2VydmVyO3RyeXt2YXIgcj13KG4ubmV4dCk7ciYmci5jYWxsKG4sdCl9Y2F0Y2godCl7dih0KX19fSxlcnJvcjpmdW5jdGlvbih0KXt2YXIgZT1iKHRoaXMpLnN1YnNjcmlwdGlvbixuPWIoZSk7aWYoIWoobikpe3ZhciByPW4ub2JzZXJ2ZXI7QyhlLG4pO3RyeXt2YXIgbz13KHIuZXJyb3IpO28/by5jYWxsKHIsdCk6dih0KX1jYXRjaCh0KXt2KHQpfUUobil9fSxjb21wbGV0ZTpmdW5jdGlvbigpe3ZhciB0PWIodGhpcykuc3Vic2NyaXB0aW9uLGU9Yih0KTtpZighaihlKSl7dmFyIG49ZS5vYnNlcnZlcjtDKHQsZSk7dHJ5e3ZhciByPXcobi5jb21wbGV0ZSk7ciYmci5jYWxsKG4pfWNhdGNoKHQpe3YodCl9RShlKX19fSksbyYmbChTLnByb3RvdHlwZSwiY2xvc2VkIix7Y29uZmlndXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiBqKGIoYih0aGlzKS5zdWJzY3JpcHRpb24pKX19KTt2YXIgTz1mdW5jdGlvbih0KXt1KHRoaXMsTywiT2JzZXJ2YWJsZSIpLHgodGhpcyx7c3Vic2NyaWJlcjphKHQpfSl9O2QoTy5wcm90b3R5cGUse3N1YnNjcmliZTpmdW5jdGlvbih0KXt2YXIgZT1hcmd1bWVudHMubGVuZ3RoO3JldHVybiBuZXcgaygiZnVuY3Rpb24iPT10eXBlb2YgdD97bmV4dDp0LGVycm9yOmU+MT9hcmd1bWVudHNbMV06dm9pZCAwLGNvbXBsZXRlOmU+Mj9hcmd1bWVudHNbMl06dm9pZCAwfTpzKHQpP3Q6e30sYih0aGlzKS5zdWJzY3JpYmVyKX19KSxkKE8se2Zyb206ZnVuY3Rpb24odCl7dmFyIGU9ImZ1bmN0aW9uIj09dHlwZW9mIHRoaXM/dGhpczpPLG49dyhjKHQpW21dKTtpZihuKXt2YXIgcj1jKG4uY2FsbCh0KSk7cmV0dXJuIHIuY29uc3RydWN0b3I9PT1lP3I6bmV3IGUoKGZ1bmN0aW9uKHQpe3JldHVybiByLnN1YnNjcmliZSh0KX0pKX12YXIgbz1wKHQpO3JldHVybiBuZXcgZSgoZnVuY3Rpb24odCl7aChvLChmdW5jdGlvbihlKXtpZih0Lm5leHQoZSksdC5jbG9zZWQpcmV0dXJuIGguc3RvcCgpfSksdm9pZCAwLCExLCEwKSx0LmNvbXBsZXRlKCl9KSl9LG9mOmZ1bmN0aW9uKCl7Zm9yKHZhciB0PSJmdW5jdGlvbiI9PXR5cGVvZiB0aGlzP3RoaXM6TyxlPWFyZ3VtZW50cy5sZW5ndGgsbj1uZXcgQXJyYXkoZSkscj0wO3I8ZTspbltyXT1hcmd1bWVudHNbcisrXTtyZXR1cm4gbmV3IHQoKGZ1bmN0aW9uKHQpe2Zvcih2YXIgcj0wO3I8ZTtyKyspaWYodC5uZXh0KG5bcl0pLHQuY2xvc2VkKXJldHVybjt0LmNvbXBsZXRlKCl9KSl9fSksZihPLnByb3RvdHlwZSxtLChmdW5jdGlvbigpe3JldHVybiB0aGlzfSkpLHIoe2dsb2JhbDohMH0se09ic2VydmFibGU6T30pLGkoIk9ic2VydmFibGUiKX0sMjc3NTpmdW5jdGlvbih0LGUsbil7bigxNzYyOSl9LDczMjIwOmZ1bmN0aW9uKHQsZSxuKXsidXNlIHN0cmljdCI7dmFyIHI9bigxNDA0NCksbz1uKDg2NDcwKSxpPW4oNzcwMSksYT1uKDgzMDgzKSxjPW4oMzExNSkscz1uKDQxMzM0KSx1PSJObyBvbmUgcHJvbWlzZSByZXNvbHZlZCI7cih7dGFyZ2V0OiJQcm9taXNlIixzdGF0OiEwfSx7YW55OmZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMsbj1hLmYoZSkscj1uLnJlc29sdmUsbD1uLnJlamVjdCxmPWMoKGZ1bmN0aW9uKCl7dmFyIG49byhlLnJlc29sdmUpLGE9W10sYz0wLGY9MSxkPSExO3ModCwoZnVuY3Rpb24odCl7dmFyIG89YysrLHM9ITE7YS5wdXNoKHZvaWQgMCksZisrLG4uY2FsbChlLHQpLnRoZW4oKGZ1bmN0aW9uKHQpe3N8fGR8fChkPSEwLHIodCkpfSksKGZ1bmN0aW9uKHQpe3N8fGR8fChzPSEwLGFbb109dCwtLWZ8fGwobmV3KGkoIkFnZ3JlZ2F0ZUVycm9yIikpKGEsdSkpKX0pKX0pKSwtLWZ8fGwobmV3KGkoIkFnZ3JlZ2F0ZUVycm9yIikpKGEsdSkpfSkpO3JldHVybiBmLmVycm9yJiZsKGYudmFsdWUpLG4ucHJvbWlzZX19KX0sMTEwNzE6ZnVuY3Rpb24odCxlLG4peyJ1c2Ugc3RyaWN0Ijt2YXIgcj1uKDE0MDQ0KSxvPW4oODMwODMpLGk9bigzMTE1KTtyKHt0YXJnZXQ6IlByb21pc2UiLHN0YXQ6ITB9LHt0cnk6ZnVuY3Rpb24odCl7dmFyIGU9by5mKHRoaXMpLG49aSh0KTtyZXR1cm4obi5lcnJvcj9lLnJlamVjdDplLnJlc29sdmUpKG4udmFsdWUpLGUucHJvbWlzZX19KX0sNDk2NDA6ZnVuY3Rpb24odCxlLG4pe3ZhciByPW4oMTQwNDQpLG89big3NzAyMCksaT1uKDg3NTc5KSxhPW8udG9LZXksYz1vLnNldDtyKHt0YXJnZXQ6IlJlZmxlY3QiLHN0YXQ6ITB9LHtkZWZpbmVNZXRhZGF0YTpmdW5jdGlvbih0LGUsbil7dmFyIHI9YXJndW1lbnRzLmxlbmd0aDw0P3ZvaWQgMDphKGFyZ3VtZW50c1szXSk7Yyh0LGUsaShuKSxyKX19KX0sNzQ5NjM6ZnVuY3Rpb24odCxlLG4pe3ZhciByPW4oMTQwNDQpLG89big3NzAyMCksaT1uKDg3NTc5KSxhPW8udG9LZXksYz1vLmdldE1hcCxzPW8uc3RvcmU7cih7dGFyZ2V0OiJSZWZsZWN0IixzdGF0OiEwfSx7ZGVsZXRlTWV0YWRhdGE6ZnVuY3Rpb24odCxlKXt2YXIgbj1hcmd1bWVudHMubGVuZ3RoPDM/dm9pZCAwOmEoYXJndW1lbnRzWzJdKSxyPWMoaShlKSxuLCExKTtpZih2b2lkIDA9PT1yfHwhci5kZWxldGUodCkpcmV0dXJuITE7aWYoci5zaXplKXJldHVybiEwO3ZhciBvPXMuZ2V0KGUpO3JldHVybiBvLmRlbGV0ZShuKSwhIW8uc2l6ZXx8cy5kZWxldGUoZSl9fSl9LDQ5MTU1OmZ1bmN0aW9uKHQsZSxuKXt2YXIgcj1uKDE0MDQ0KSxvPW4oNzQwNjEpLGk9big3NzAyMCksYT1uKDg3NTc5KSxjPW4oNjQ5NjUpLHM9big0MTMzNCksdT1pLmtleXMsbD1pLnRvS2V5LGY9ZnVuY3Rpb24odCxlKXt2YXIgbj11KHQsZSkscj1jKHQpO2lmKG51bGw9PT1yKXJldHVybiBuO3ZhciBpLGEsbD1mKHIsZSk7cmV0dXJuIGwubGVuZ3RoP24ubGVuZ3RoPyhpPW5ldyBvKG4uY29uY2F0KGwpKSxzKGksKGE9W10pLnB1c2gsYSksYSk6bDpufTtyKHt0YXJnZXQ6IlJlZmxlY3QiLHN0YXQ6ITB9LHtnZXRNZXRhZGF0YUtleXM6ZnVuY3Rpb24odCl7dmFyIGU9YXJndW1lbnRzLmxlbmd0aDwyP3ZvaWQgMDpsKGFyZ3VtZW50c1sxXSk7cmV0dXJuIGYoYSh0KSxlKX19KX0sNjk0NTk6ZnVuY3Rpb24odCxlLG4pe3ZhciByPW4oMTQwNDQpLG89big3NzAyMCksaT1uKDg3NTc5KSxhPW4oNjQ5NjUpLGM9by5oYXMscz1vLmdldCx1PW8udG9LZXksbD1mdW5jdGlvbih0LGUsbil7aWYoYyh0LGUsbikpcmV0dXJuIHModCxlLG4pO3ZhciByPWEoZSk7cmV0dXJuIG51bGwhPT1yP2wodCxyLG4pOnZvaWQgMH07cih7dGFyZ2V0OiJSZWZsZWN0IixzdGF0OiEwfSx7Z2V0TWV0YWRhdGE6ZnVuY3Rpb24odCxlKXt2YXIgbj1hcmd1bWVudHMubGVuZ3RoPDM/dm9pZCAwOnUoYXJndW1lbnRzWzJdKTtyZXR1cm4gbCh0LGkoZSksbil9fSl9LDg3NDc0OmZ1bmN0aW9uKHQsZSxuKXt2YXIgcj1uKDE0MDQ0KSxvPW4oNzcwMjApLGk9big4NzU3OSksYT1vLmtleXMsYz1vLnRvS2V5O3Ioe3RhcmdldDoiUmVmbGVjdCIsc3RhdDohMH0se2dldE93bk1ldGFkYXRhS2V5czpmdW5jdGlvbih0KXt2YXIgZT1hcmd1bWVudHMubGVuZ3RoPDI/dm9pZCAwOmMoYXJndW1lbnRzWzFdKTtyZXR1cm4gYShpKHQpLGUpfX0pfSwyNjg5NjpmdW5jdGlvbih0LGUsbil7dmFyIHI9bigxNDA0NCksbz1uKDc3MDIwKSxpPW4oODc1NzkpLGE9by5nZXQsYz1vLnRvS2V5O3Ioe3RhcmdldDoiUmVmbGVjdCIsc3RhdDohMH0se2dldE93bk1ldGFkYXRhOmZ1bmN0aW9uKHQsZSl7dmFyIG49YXJndW1lbnRzLmxlbmd0aDwzP3ZvaWQgMDpjKGFyZ3VtZW50c1syXSk7cmV0dXJuIGEodCxpKGUpLG4pfX0pfSw5NzQzMzpmdW5jdGlvbih0LGUsbil7dmFyIHI9bigxNDA0NCksbz1uKDc3MDIwKSxpPW4oODc1NzkpLGE9big2NDk2NSksYz1vLmhhcyxzPW8udG9LZXksdT1mdW5jdGlvbih0LGUsbil7aWYoYyh0LGUsbikpcmV0dXJuITA7dmFyIHI9YShlKTtyZXR1cm4gbnVsbCE9PXImJnUodCxyLG4pfTtyKHt0YXJnZXQ6IlJlZmxlY3QiLHN0YXQ6ITB9LHtoYXNNZXRhZGF0YTpmdW5jdGlvbih0LGUpe3ZhciBuPWFyZ3VtZW50cy5sZW5ndGg8Mz92b2lkIDA6cyhhcmd1bWVudHNbMl0pO3JldHVybiB1KHQsaShlKSxuKX19KX0sNzEwODpmdW5jdGlvbih0LGUsbil7dmFyIHI9bigxNDA0NCksbz1uKDc3MDIwKSxpPW4oODc1NzkpLGE9by5oYXMsYz1vLnRvS2V5O3Ioe3RhcmdldDoiUmVmbGVjdCIsc3RhdDohMH0se2hhc093bk1ldGFkYXRhOmZ1bmN0aW9uKHQsZSl7dmFyIG49YXJndW1lbnRzLmxlbmd0aDwzP3ZvaWQgMDpjKGFyZ3VtZW50c1syXSk7cmV0dXJuIGEodCxpKGUpLG4pfX0pfSwyMzYzMTpmdW5jdGlvbih0LGUsbil7dmFyIHI9bigxNDA0NCksbz1uKDc3MDIwKSxpPW4oODc1NzkpLGE9by50b0tleSxjPW8uc2V0O3Ioe3RhcmdldDoiUmVmbGVjdCIsc3RhdDohMH0se21ldGFkYXRhOmZ1bmN0aW9uKHQsZSl7cmV0dXJuIGZ1bmN0aW9uKG4scil7Yyh0LGUsaShuKSxhKHIpKX19fSl9LDkzOTpmdW5jdGlvbih0LGUsbil7InVzZSBzdHJpY3QiO3ZhciByPW4oMTQwNDQpLG89big2NTY3MiksaT1uKDk4MTc5KTtyKHt0YXJnZXQ6IlNldCIscHJvdG86ITAscmVhbDohMCxmb3JjZWQ6b30se2FkZEFsbDpmdW5jdGlvbigpe3JldHVybiBpLmFwcGx5KHRoaXMsYXJndW1lbnRzKX19KX0sNjE0Njc6ZnVuY3Rpb24odCxlLG4peyJ1c2Ugc3RyaWN0Ijt2YXIgcj1uKDE0MDQ0KSxvPW4oNjU2NzIpLGk9bigxNDY2KTtyKHt0YXJnZXQ6IlNldCIscHJvdG86ITAscmVhbDohMCxmb3JjZWQ6b30se2RlbGV0ZUFsbDpmdW5jdGlvbigpe3JldHVybiBpLmFwcGx5KHRoaXMsYXJndW1lbnRzKX19KX0sOTgzNTA6ZnVuY3Rpb24odCxlLG4peyJ1c2Ugc3RyaWN0Ijt2YXIgcj1uKDE0MDQ0KSxvPW4oNjU2NzIpLGk9big3NzAxKSxhPW4oODc1NzkpLGM9big4NjQ3MCkscz1uKDEzOTc5KSx1PW4oNDEzMzQpO3Ioe3RhcmdldDoiU2V0Iixwcm90bzohMCxyZWFsOiEwLGZvcmNlZDpvfSx7ZGlmZmVyZW5jZTpmdW5jdGlvbih0KXt2YXIgZT1hKHRoaXMpLG49bmV3KHMoZSxpKCJTZXQiKSkpKGUpLHI9YyhuLmRlbGV0ZSk7cmV0dXJuIHUodCwoZnVuY3Rpb24odCl7ci5jYWxsKG4sdCl9KSksbn19KX0sMTYxMjc6ZnVuY3Rpb24odCxlLG4peyJ1c2Ugc3RyaWN0Ijt2YXIgcj1uKDE0MDQ0KSxvPW4oNjU2NzIpLGk9big4NzU3OSksYT1uKDQ2MTMwKSxjPW4oNDE0NzUpLHM9big0MTMzNCk7cih7dGFyZ2V0OiJTZXQiLHByb3RvOiEwLHJlYWw6ITAsZm9yY2VkOm99LHtldmVyeTpmdW5jdGlvbih0KXt2YXIgZT1pKHRoaXMpLG49YyhlKSxyPWEodCxhcmd1bWVudHMubGVuZ3RoPjE/YXJndW1lbnRzWzFdOnZvaWQgMCwzKTtyZXR1cm4hcyhuLChmdW5jdGlvbih0KXtpZighcih0LHQsZSkpcmV0dXJuIHMuc3RvcCgpfSksdm9pZCAwLCExLCEwKS5zdG9wcGVkfX0pfSw1MzU4OTpmdW5jdGlvbih0LGUsbil7InVzZSBzdHJpY3QiO3ZhciByPW4oMTQwNDQpLG89big2NTY3MiksaT1uKDc3MDEpLGE9big4NzU3OSksYz1uKDg2NDcwKSxzPW4oNDYxMzApLHU9bigxMzk3OSksbD1uKDQxNDc1KSxmPW4oNDEzMzQpO3Ioe3RhcmdldDoiU2V0Iixwcm90bzohMCxyZWFsOiEwLGZvcmNlZDpvfSx7ZmlsdGVyOmZ1bmN0aW9uKHQpe3ZhciBlPWEodGhpcyksbj1sKGUpLHI9cyh0LGFyZ3VtZW50cy5sZW5ndGg+MT9hcmd1bWVudHNbMV06dm9pZCAwLDMpLG89bmV3KHUoZSxpKCJTZXQiKSkpLGQ9YyhvLmFkZCk7cmV0dXJuIGYobiwoZnVuY3Rpb24odCl7cih0LHQsZSkmJmQuY2FsbChvLHQpfSksdm9pZCAwLCExLCEwKSxvfX0pfSw4MTA0MjpmdW5jdGlvbih0LGUsbil7InVzZSBzdHJpY3QiO3ZhciByPW4oMTQwNDQpLG89big2NTY3MiksaT1uKDg3NTc5KSxhPW4oNDYxMzApLGM9big0MTQ3NSkscz1uKDQxMzM0KTtyKHt0YXJnZXQ6IlNldCIscHJvdG86ITAscmVhbDohMCxmb3JjZWQ6b30se2ZpbmQ6ZnVuY3Rpb24odCl7dmFyIGU9aSh0aGlzKSxuPWMoZSkscj1hKHQsYXJndW1lbnRzLmxlbmd0aD4xP2FyZ3VtZW50c1sxXTp2b2lkIDAsMyk7cmV0dXJuIHMobiwoZnVuY3Rpb24odCl7aWYocih0LHQsZSkpcmV0dXJuIHMuc3RvcCh0KX0pLHZvaWQgMCwhMSwhMCkucmVzdWx0fX0pfSw5NzI4NDpmdW5jdGlvbih0LGUsbil7bigxNDA0NCkoe3RhcmdldDoiU2V0IixzdGF0OiEwfSx7ZnJvbTpuKDEyOTAxKX0pfSw0MTcxODpmdW5jdGlvbih0LGUsbil7InVzZSBzdHJpY3QiO3ZhciByPW4oMTQwNDQpLG89big2NTY3MiksaT1uKDc3MDEpLGE9big4NzU3OSksYz1uKDg2NDcwKSxzPW4oMTM5NzkpLHU9big0MTMzNCk7cih7dGFyZ2V0OiJTZXQiLHByb3RvOiEwLHJlYWw6ITAsZm9yY2VkOm99LHtpbnRlcnNlY3Rpb246ZnVuY3Rpb24odCl7dmFyIGU9YSh0aGlzKSxuPW5ldyhzKGUsaSgiU2V0IikpKSxyPWMoZS5oYXMpLG89YyhuLmFkZCk7cmV0dXJuIHUodCwoZnVuY3Rpb24odCl7ci5jYWxsKGUsdCkmJm8uY2FsbChuLHQpfSkpLG59fSl9LDU3MzcxOmZ1bmN0aW9uKHQsZSxuKXsidXNlIHN0cmljdCI7dmFyIHI9bigxNDA0NCksbz1uKDY1NjcyKSxpPW4oODc1NzkpLGE9big4NjQ3MCksYz1uKDQxMzM0KTtyKHt0YXJnZXQ6IlNldCIscHJvdG86ITAscmVhbDohMCxmb3JjZWQ6b30se2lzRGlzam9pbnRGcm9tOmZ1bmN0aW9uKHQpe3ZhciBlPWkodGhpcyksbj1hKGUuaGFzKTtyZXR1cm4hYyh0LChmdW5jdGlvbih0KXtpZighMD09PW4uY2FsbChlLHQpKXJldHVybiBjLnN0b3AoKX0pKS5zdG9wcGVkfX0pfSw4OTIzMDpmdW5jdGlvbih0LGUsbil7InVzZSBzdHJpY3QiO3ZhciByPW4oMTQwNDQpLG89big2NTY3MiksaT1uKDc3MDEpLGE9big4NzU3OSksYz1uKDg2NDcwKSxzPW4oMzEwNzQpLHU9big0MTMzNCk7cih7dGFyZ2V0OiJTZXQiLHByb3RvOiEwLHJlYWw6ITAsZm9yY2VkOm99LHtpc1N1YnNldE9mOmZ1bmN0aW9uKHQpe3ZhciBlPXModGhpcyksbj1hKHQpLHI9bi5oYXM7cmV0dXJuImZ1bmN0aW9uIiE9dHlwZW9mIHImJihuPW5ldyhpKCJTZXQiKSkodCkscj1jKG4uaGFzKSksIXUoZSwoZnVuY3Rpb24odCl7aWYoITE9PT1yLmNhbGwobix0KSlyZXR1cm4gdS5zdG9wKCl9KSx2b2lkIDAsITEsITApLnN0b3BwZWR9fSl9LDMyMzAzOmZ1bmN0aW9uKHQsZSxuKXsidXNlIHN0cmljdCI7dmFyIHI9bigxNDA0NCksbz1uKDY1NjcyKSxpPW4oODc1NzkpLGE9big4NjQ3MCksYz1uKDQxMzM0KTtyKHt0YXJnZXQ6IlNldCIscHJvdG86ITAscmVhbDohMCxmb3JjZWQ6b30se2lzU3VwZXJzZXRPZjpmdW5jdGlvbih0KXt2YXIgZT1pKHRoaXMpLG49YShlLmhhcyk7cmV0dXJuIWModCwoZnVuY3Rpb24odCl7aWYoITE9PT1uLmNhbGwoZSx0KSlyZXR1cm4gYy5zdG9wKCl9KSkuc3RvcHBlZH19KX0sMTY3NTc6ZnVuY3Rpb24odCxlLG4peyJ1c2Ugc3RyaWN0Ijt2YXIgcj1uKDE0MDQ0KSxvPW4oNjU2NzIpLGk9big4NzU3OSksYT1uKDQxNDc1KSxjPW4oNDEzMzQpO3Ioe3RhcmdldDoiU2V0Iixwcm90bzohMCxyZWFsOiEwLGZvcmNlZDpvfSx7am9pbjpmdW5jdGlvbih0KXt2YXIgZT1pKHRoaXMpLG49YShlKSxyPXZvaWQgMD09PXQ/IiwiOlN0cmluZyh0KSxvPVtdO3JldHVybiBjKG4sby5wdXNoLG8sITEsITApLG8uam9pbihyKX19KX0sMTEwNzQ6ZnVuY3Rpb24odCxlLG4peyJ1c2Ugc3RyaWN0Ijt2YXIgcj1uKDE0MDQ0KSxvPW4oNjU2NzIpLGk9big3NzAxKSxhPW4oODc1NzkpLGM9big4NjQ3MCkscz1uKDQ2MTMwKSx1PW4oMTM5NzkpLGw9big0MTQ3NSksZj1uKDQxMzM0KTtyKHt0YXJnZXQ6IlNldCIscHJvdG86ITAscmVhbDohMCxmb3JjZWQ6b30se21hcDpmdW5jdGlvbih0KXt2YXIgZT1hKHRoaXMpLG49bChlKSxyPXModCxhcmd1bWVudHMubGVuZ3RoPjE/YXJndW1lbnRzWzFdOnZvaWQgMCwzKSxvPW5ldyh1KGUsaSgiU2V0IikpKSxkPWMoby5hZGQpO3JldHVybiBmKG4sKGZ1bmN0aW9uKHQpe2QuY2FsbChvLHIodCx0LGUpKX0pLHZvaWQgMCwhMSwhMCksb319KX0sMjQ1OTg6ZnVuY3Rpb24odCxlLG4pe24oMTQwNDQpKHt0YXJnZXQ6IlNldCIsc3RhdDohMH0se29mOm4oMjUwMjYpfSl9LDMzNTM5OmZ1bmN0aW9uKHQsZSxuKXsidXNlIHN0cmljdCI7dmFyIHI9bigxNDA0NCksbz1uKDY1NjcyKSxpPW4oODc1NzkpLGE9big4NjQ3MCksYz1uKDQxNDc1KSxzPW4oNDEzMzQpO3Ioe3RhcmdldDoiU2V0Iixwcm90bzohMCxyZWFsOiEwLGZvcmNlZDpvfSx7cmVkdWNlOmZ1bmN0aW9uKHQpe3ZhciBlPWkodGhpcyksbj1jKGUpLHI9YXJndW1lbnRzLmxlbmd0aDwyLG89cj92b2lkIDA6YXJndW1lbnRzWzFdO2lmKGEodCkscyhuLChmdW5jdGlvbihuKXtyPyhyPSExLG89bik6bz10KG8sbixuLGUpfSksdm9pZCAwLCExLCEwKSxyKXRocm93IFR5cGVFcnJvcigiUmVkdWNlIG9mIGVtcHR5IHNldCB3aXRoIG5vIGluaXRpYWwgdmFsdWUiKTtyZXR1cm4gb319KX0sMjQxMDM6ZnVuY3Rpb24odCxlLG4peyJ1c2Ugc3RyaWN0Ijt2YXIgcj1uKDE0MDQ0KSxvPW4oNjU2NzIpLGk9big4NzU3OSksYT1uKDQ2MTMwKSxjPW4oNDE0NzUpLHM9big0MTMzNCk7cih7dGFyZ2V0OiJTZXQiLHByb3RvOiEwLHJlYWw6ITAsZm9yY2VkOm99LHtzb21lOmZ1bmN0aW9uKHQpe3ZhciBlPWkodGhpcyksbj1jKGUpLHI9YSh0LGFyZ3VtZW50cy5sZW5ndGg+MT9hcmd1bWVudHNbMV06dm9pZCAwLDMpO3JldHVybiBzKG4sKGZ1bmN0aW9uKHQpe2lmKHIodCx0LGUpKXJldHVybiBzLnN0b3AoKX0pLHZvaWQgMCwhMSwhMCkuc3RvcHBlZH19KX0sNjYxODE6ZnVuY3Rpb24odCxlLG4peyJ1c2Ugc3RyaWN0Ijt2YXIgcj1uKDE0MDQ0KSxvPW4oNjU2NzIpLGk9big3NzAxKSxhPW4oODc1NzkpLGM9big4NjQ3MCkscz1uKDEzOTc5KSx1PW4oNDEzMzQpO3Ioe3RhcmdldDoiU2V0Iixwcm90bzohMCxyZWFsOiEwLGZvcmNlZDpvfSx7c3ltbWV0cmljRGlmZmVyZW5jZTpmdW5jdGlvbih0KXt2YXIgZT1hKHRoaXMpLG49bmV3KHMoZSxpKCJTZXQiKSkpKGUpLHI9YyhuLmRlbGV0ZSksbz1jKG4uYWRkKTtyZXR1cm4gdSh0LChmdW5jdGlvbih0KXtyLmNhbGwobix0KXx8by5jYWxsKG4sdCl9KSksbn19KX0sNjI5MTpmdW5jdGlvbih0LGUsbil7InVzZSBzdHJpY3QiO3ZhciByPW4oMTQwNDQpLG89big2NTY3MiksaT1uKDc3MDEpLGE9big4NzU3OSksYz1uKDg2NDcwKSxzPW4oMTM5NzkpLHU9big0MTMzNCk7cih7dGFyZ2V0OiJTZXQiLHByb3RvOiEwLHJlYWw6ITAsZm9yY2VkOm99LHt1bmlvbjpmdW5jdGlvbih0KXt2YXIgZT1hKHRoaXMpLG49bmV3KHMoZSxpKCJTZXQiKSkpKGUpO3JldHVybiB1KHQsYyhuLmFkZCksbiksbn19KX0sNzM0NjA6ZnVuY3Rpb24odCxlLG4peyJ1c2Ugc3RyaWN0Ijt2YXIgcj1uKDE0MDQ0KSxvPW4oNjAxNDApLmNoYXJBdDtyKHt0YXJnZXQ6IlN0cmluZyIscHJvdG86ITB9LHthdDpmdW5jdGlvbih0KXtyZXR1cm4gbyh0aGlzLHQpfX0pfSwzMjA2MjpmdW5jdGlvbih0LGUsbil7InVzZSBzdHJpY3QiO3ZhciByPW4oMTQwNDQpLG89big3MTIwMSksaT1uKDcwMTMyKSxhPW4oODk4MjcpLGM9big2MDE0MCkscz1jLmNvZGVBdCx1PWMuY2hhckF0LGw9IlN0cmluZyBJdGVyYXRvciIsZj1hLnNldCxkPWEuZ2V0dGVyRm9yKGwpLHA9bygoZnVuY3Rpb24odCl7Zih0aGlzLHt0eXBlOmwsc3RyaW5nOnQsaW5kZXg6MH0pfSksIlN0cmluZyIsKGZ1bmN0aW9uKCl7dmFyIHQsZT1kKHRoaXMpLG49ZS5zdHJpbmcscj1lLmluZGV4O3JldHVybiByPj1uLmxlbmd0aD97dmFsdWU6dm9pZCAwLGRvbmU6ITB9Oih0PXUobixyKSxlLmluZGV4Kz10Lmxlbmd0aCx7dmFsdWU6e2NvZGVQb2ludDpzKHQsMCkscG9zaXRpb246cn0sZG9uZTohMX0pfSkpO3Ioe3RhcmdldDoiU3RyaW5nIixwcm90bzohMH0se2NvZGVQb2ludHM6ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IHAoU3RyaW5nKGkodGhpcykpKX19KX0sNzQ1MjU6ZnVuY3Rpb24odCxlLG4pe24oODEyNzcpfSw2NDAyNjpmdW5jdGlvbih0LGUsbil7InVzZSBzdHJpY3QiO3ZhciByPW4oMTQwNDQpLG89big3MDEzMiksaT1uKDQzMjIzKSxhPW4oMjU0MTkpLGM9bigyMzcyNCkscz1uKDY1NjcyKSx1PWMoInJlcGxhY2UiKSxsPVJlZ0V4cC5wcm90b3R5cGU7cih7dGFyZ2V0OiJTdHJpbmciLHByb3RvOiEwfSx7cmVwbGFjZUFsbDpmdW5jdGlvbiB0KGUsbil7dmFyIHIsYyxmLGQscCxoLHYsZyx5PW8odGhpcyk7aWYobnVsbCE9ZSl7aWYoKHI9aShlKSkmJiF+U3RyaW5nKG8oImZsYWdzImluIGw/ZS5mbGFnczphLmNhbGwoZSkpKS5pbmRleE9mKCJnIikpdGhyb3cgVHlwZUVycm9yKCJgLnJlcGxhY2VBbGxgIGRvZXMgbm90IGFsbG93IG5vbi1nbG9iYWwgcmVnZXhlcyIpO2lmKHZvaWQgMCE9PShjPWVbdV0pKXJldHVybiBjLmNhbGwoZSx5LG4pO2lmKHMmJnIpcmV0dXJuIFN0cmluZyh5KS5yZXBsYWNlKGUsbil9aWYoZj1TdHJpbmcoeSksIiI9PT0oZD1TdHJpbmcoZSkpKXJldHVybiB0LmNhbGwoZiwvKD86KS9nLG4pO2lmKHA9Zi5zcGxpdChkKSwiZnVuY3Rpb24iIT10eXBlb2YgbilyZXR1cm4gcC5qb2luKFN0cmluZyhuKSk7Zm9yKHY9KGg9cFswXSkubGVuZ3RoLGc9MTtnPHAubGVuZ3RoO2crKyloKz1TdHJpbmcobihkLHYsZikpLHYrPWQubGVuZ3RoK3BbZ10ubGVuZ3RoLGgrPXBbZ107cmV0dXJuIGh9fSl9LDY5NDI6ZnVuY3Rpb24odCxlLG4pe24oOTIyNzUpKCJhc3luY0Rpc3Bvc2UiKX0sOTQyNDk6ZnVuY3Rpb24odCxlLG4pe24oOTIyNzUpKCJkaXNwb3NlIil9LDUxMzc0OmZ1bmN0aW9uKHQsZSxuKXtuKDkyMjc1KSgib2JzZXJ2YWJsZSIpfSw1Mzc3MjpmdW5jdGlvbih0LGUsbil7big5MjI3NSkoInBhdHRlcm5NYXRjaCIpfSw4NjA3NzpmdW5jdGlvbih0LGUsbil7big5MjI3NSkoInJlcGxhY2VBbGwiKX0sNjQ4MTM6ZnVuY3Rpb24odCxlLG4peyJ1c2Ugc3RyaWN0Ijt2YXIgcj1uKDE0MDQ0KSxvPW4oNjU2NzIpLGk9bigxNDY2KTtyKHt0YXJnZXQ6IldlYWtNYXAiLHByb3RvOiEwLHJlYWw6ITAsZm9yY2VkOm99LHtkZWxldGVBbGw6ZnVuY3Rpb24oKXtyZXR1cm4gaS5hcHBseSh0aGlzLGFyZ3VtZW50cyl9fSl9LDk5OTc5OmZ1bmN0aW9uKHQsZSxuKXtuKDE0MDQ0KSh7dGFyZ2V0OiJXZWFrTWFwIixzdGF0OiEwfSx7ZnJvbTpuKDEyOTAxKX0pfSwxODIwNTpmdW5jdGlvbih0LGUsbil7bigxNDA0NCkoe3RhcmdldDoiV2Vha01hcCIsc3RhdDohMH0se29mOm4oMjUwMjYpfSl9LDg3NTU1OmZ1bmN0aW9uKHQsZSxuKXsidXNlIHN0cmljdCI7bigxNDA0NCkoe3RhcmdldDoiV2Vha01hcCIscHJvdG86ITAscmVhbDohMCxmb3JjZWQ6big2NTY3Mil9LHt1cHNlcnQ6big0NzkyNyl9KX0sNjg5OTk6ZnVuY3Rpb24odCxlLG4peyJ1c2Ugc3RyaWN0Ijt2YXIgcj1uKDE0MDQ0KSxvPW4oNjU2NzIpLGk9big5ODE3OSk7cih7dGFyZ2V0OiJXZWFrU2V0Iixwcm90bzohMCxyZWFsOiEwLGZvcmNlZDpvfSx7YWRkQWxsOmZ1bmN0aW9uKCl7cmV0dXJuIGkuYXBwbHkodGhpcyxhcmd1bWVudHMpfX0pfSw1MzgyNDpmdW5jdGlvbih0LGUsbil7InVzZSBzdHJpY3QiO3ZhciByPW4oMTQwNDQpLG89big2NTY3MiksaT1uKDE0NjYpO3Ioe3RhcmdldDoiV2Vha1NldCIscHJvdG86ITAscmVhbDohMCxmb3JjZWQ6b30se2RlbGV0ZUFsbDpmdW5jdGlvbigpe3JldHVybiBpLmFwcGx5KHRoaXMsYXJndW1lbnRzKX19KX0sODU4OmZ1bmN0aW9uKHQsZSxuKXtuKDE0MDQ0KSh7dGFyZ2V0OiJXZWFrU2V0IixzdGF0OiEwfSx7ZnJvbTpuKDEyOTAxKX0pfSw2NDg5OTpmdW5jdGlvbih0LGUsbil7bigxNDA0NCkoe3RhcmdldDoiV2Vha1NldCIsc3RhdDohMH0se29mOm4oMjUwMjYpfSl9LDY3MDM5OmZ1bmN0aW9uKHQsZSxuKXt2YXIgcj1uKDg5NTU4KSxvPW4oNDcwOTQpLGk9bigzMTM2OCksYT1uKDY2OTcxKTtmb3IodmFyIGMgaW4gbyl7dmFyIHM9cltjXSx1PXMmJnMucHJvdG90eXBlO2lmKHUmJnUuZm9yRWFjaCE9PWkpdHJ5e2EodSwiZm9yRWFjaCIsaSl9Y2F0Y2godCl7dS5mb3JFYWNoPWl9fX0sNzk3OTk6ZnVuY3Rpb24odCxlLG4pe3ZhciByPW4oODk1NTgpLG89big0NzA5NCksaT1uKDUwMDYzKSxhPW4oNjY5NzEpLGM9bigyMzcyNCkscz1jKCJpdGVyYXRvciIpLHU9YygidG9TdHJpbmdUYWciKSxsPWkudmFsdWVzO2Zvcih2YXIgZiBpbiBvKXt2YXIgZD1yW2ZdLHA9ZCYmZC5wcm90b3R5cGU7aWYocCl7aWYocFtzXSE9PWwpdHJ5e2EocCxzLGwpfWNhdGNoKHQpe3Bbc109bH1pZihwW3VdfHxhKHAsdSxmKSxvW2ZdKWZvcih2YXIgaCBpbiBpKWlmKHBbaF0hPT1pW2hdKXRyeXthKHAsaCxpW2hdKX1jYXRjaCh0KXtwW2hdPWlbaF19fX19LDc0MDEwOmZ1bmN0aW9uKHQsZSxuKXt2YXIgcj1uKDE0MDQ0KSxvPW4oODk1NTgpLGk9bigyMTc0NCk7cih7Z2xvYmFsOiEwLGJpbmQ6ITAsZW51bWVyYWJsZTohMCxmb3JjZWQ6IW8uc2V0SW1tZWRpYXRlfHwhby5jbGVhckltbWVkaWF0ZX0se3NldEltbWVkaWF0ZTppLnNldCxjbGVhckltbWVkaWF0ZTppLmNsZWFyfSl9LDY1OTc2OmZ1bmN0aW9uKHQsZSxuKXt2YXIgcj1uKDE0MDQ0KSxvPW4oODk1NTgpLGk9big2NTU1NSksYT1uKDI0NTk0KSxjPW8ucHJvY2VzcyxzPSJwcm9jZXNzIj09YShjKTtyKHtnbG9iYWw6ITAsZW51bWVyYWJsZTohMCxub1RhcmdldEdldDohMH0se3F1ZXVlTWljcm90YXNrOmZ1bmN0aW9uKHQpe3ZhciBlPXMmJmMuZG9tYWluO2koZT9lLmJpbmQodCk6dCl9fSl9LDgxOTk0OmZ1bmN0aW9uKHQsZSxuKXt2YXIgcj1uKDE0MDQ0KSxvPW4oODk1NTgpLGk9bigzOTQ3NiksYT1bXS5zbGljZSxjPWZ1bmN0aW9uKHQpe3JldHVybiBmdW5jdGlvbihlLG4pe3ZhciByPWFyZ3VtZW50cy5sZW5ndGg+MixvPXI/YS5jYWxsKGFyZ3VtZW50cywyKTp2b2lkIDA7cmV0dXJuIHQocj9mdW5jdGlvbigpeygiZnVuY3Rpb24iPT10eXBlb2YgZT9lOkZ1bmN0aW9uKGUpKS5hcHBseSh0aGlzLG8pfTplLG4pfX07cih7Z2xvYmFsOiEwLGJpbmQ6ITAsZm9yY2VkOi9NU0lFIC5cLi8udGVzdChpKX0se3NldFRpbWVvdXQ6YyhvLnNldFRpbWVvdXQpLHNldEludGVydmFsOmMoby5zZXRJbnRlcnZhbCl9KX0sNTU1NzpmdW5jdGlvbih0LGUsbil7InVzZSBzdHJpY3QiO24oNTAwNjMpO3ZhciByPW4oMTQwNDQpLG89big3NzAxKSxpPW4oNTc1OTcpLGE9big5MjkxMyksYz1uKDE5MjYpLHM9big1MTEyOCksdT1uKDcxMjAxKSxsPW4oODk4MjcpLGY9big1OTM3OSksZD1uKDc2Mjk4KSxwPW4oNDYxMzApLGg9big1OTU5MSksdj1uKDg3NTc5KSxnPW4oMTA1OTIpLHk9big1MDg2OCksbT1uKDE0MjA5KSxiPW4oMzEwNzQpLHg9big3Mzg5MCksdz1uKDIzNzI0KSxFPW8oImZldGNoIiksaj1vKCJIZWFkZXJzIiksQz13KCJpdGVyYXRvciIpLGs9IlVSTFNlYXJjaFBhcmFtcyIsUz0iVVJMU2VhcmNoUGFyYW1zSXRlcmF0b3IiLE89bC5zZXQsST1sLmdldHRlckZvcihrKSxBPWwuZ2V0dGVyRm9yKFMpLFQ9L1wrL2csTT1BcnJheSg0KSxfPWZ1bmN0aW9uKHQpe3JldHVybiBNW3QtMV18fChNW3QtMV09UmVnRXhwKCIoKD86JVtcXGRhLWZdezJ9KXsiK3QrIn0pIiwiZ2kiKSl9LEw9ZnVuY3Rpb24odCl7dHJ5e3JldHVybiBkZWNvZGVVUklDb21wb25lbnQodCl9Y2F0Y2goZSl7cmV0dXJuIHR9fSxSPWZ1bmN0aW9uKHQpe3ZhciBlPXQucmVwbGFjZShULCIgIiksbj00O3RyeXtyZXR1cm4gZGVjb2RlVVJJQ29tcG9uZW50KGUpfWNhdGNoKHQpe2Zvcig7bjspZT1lLnJlcGxhY2UoXyhuLS0pLEwpO3JldHVybiBlfX0sUD0vWyEnKCl+XXwlMjAvZyxOPXsiISI6IiUyMSIsIiciOiIlMjciLCIoIjoiJTI4IiwiKSI6IiUyOSIsIn4iOiIlN0UiLCIlMjAiOiIrIn0sRD1mdW5jdGlvbih0KXtyZXR1cm4gTlt0XX0sRj1mdW5jdGlvbih0KXtyZXR1cm4gZW5jb2RlVVJJQ29tcG9uZW50KHQpLnJlcGxhY2UoUCxEKX0sVT1mdW5jdGlvbih0LGUpe2lmKGUpZm9yKHZhciBuLHIsbz1lLnNwbGl0KCImIiksaT0wO2k8by5sZW5ndGg7KShuPW9baSsrXSkubGVuZ3RoJiYocj1uLnNwbGl0KCI9IiksdC5wdXNoKHtrZXk6UihyLnNoaWZ0KCkpLHZhbHVlOlIoci5qb2luKCI9IikpfSkpfSxCPWZ1bmN0aW9uKHQpe3RoaXMuZW50cmllcy5sZW5ndGg9MCxVKHRoaXMuZW50cmllcyx0KX0sej1mdW5jdGlvbih0LGUpe2lmKHQ8ZSl0aHJvdyBUeXBlRXJyb3IoIk5vdCBlbm91Z2ggYXJndW1lbnRzIil9LFY9dSgoZnVuY3Rpb24odCxlKXtPKHRoaXMse3R5cGU6UyxpdGVyYXRvcjpiKEkodCkuZW50cmllcyksa2luZDplfSl9KSwiSXRlcmF0b3IiLChmdW5jdGlvbigpe3ZhciB0PUEodGhpcyksZT10LmtpbmQsbj10Lml0ZXJhdG9yLm5leHQoKSxyPW4udmFsdWU7cmV0dXJuIG4uZG9uZXx8KG4udmFsdWU9ImtleXMiPT09ZT9yLmtleToidmFsdWVzIj09PWU/ci52YWx1ZTpbci5rZXksci52YWx1ZV0pLG59KSksSD1mdW5jdGlvbigpe2YodGhpcyxILGspO3ZhciB0LGUsbixyLG8saSxhLGMscyx1PWFyZ3VtZW50cy5sZW5ndGg+MD9hcmd1bWVudHNbMF06dm9pZCAwLGw9dGhpcyxwPVtdO2lmKE8obCx7dHlwZTprLGVudHJpZXM6cCx1cGRhdGVVUkw6ZnVuY3Rpb24oKXt9LHVwZGF0ZVNlYXJjaFBhcmFtczpCfSksdm9pZCAwIT09dSlpZihnKHUpKWlmKCJmdW5jdGlvbiI9PXR5cGVvZih0PXgodSkpKWZvcihuPShlPXQuY2FsbCh1KSkubmV4dDshKHI9bi5jYWxsKGUpKS5kb25lOyl7aWYoKGE9KGk9KG89Yih2KHIudmFsdWUpKSkubmV4dCkuY2FsbChvKSkuZG9uZXx8KGM9aS5jYWxsKG8pKS5kb25lfHwhaS5jYWxsKG8pLmRvbmUpdGhyb3cgVHlwZUVycm9yKCJFeHBlY3RlZCBzZXF1ZW5jZSB3aXRoIGxlbmd0aCAyIik7cC5wdXNoKHtrZXk6YS52YWx1ZSsiIix2YWx1ZTpjLnZhbHVlKyIifSl9ZWxzZSBmb3IocyBpbiB1KWQodSxzKSYmcC5wdXNoKHtrZXk6cyx2YWx1ZTp1W3NdKyIifSk7ZWxzZSBVKHAsInN0cmluZyI9PXR5cGVvZiB1PyI/Ij09PXUuY2hhckF0KDApP3Uuc2xpY2UoMSk6dTp1KyIiKX0scT1ILnByb3RvdHlwZTtjKHEse2FwcGVuZDpmdW5jdGlvbih0LGUpe3ooYXJndW1lbnRzLmxlbmd0aCwyKTt2YXIgbj1JKHRoaXMpO24uZW50cmllcy5wdXNoKHtrZXk6dCsiIix2YWx1ZTplKyIifSksbi51cGRhdGVVUkwoKX0sZGVsZXRlOmZ1bmN0aW9uKHQpe3ooYXJndW1lbnRzLmxlbmd0aCwxKTtmb3IodmFyIGU9SSh0aGlzKSxuPWUuZW50cmllcyxyPXQrIiIsbz0wO288bi5sZW5ndGg7KW5bb10ua2V5PT09cj9uLnNwbGljZShvLDEpOm8rKztlLnVwZGF0ZVVSTCgpfSxnZXQ6ZnVuY3Rpb24odCl7eihhcmd1bWVudHMubGVuZ3RoLDEpO2Zvcih2YXIgZT1JKHRoaXMpLmVudHJpZXMsbj10KyIiLHI9MDtyPGUubGVuZ3RoO3IrKylpZihlW3JdLmtleT09PW4pcmV0dXJuIGVbcl0udmFsdWU7cmV0dXJuIG51bGx9LGdldEFsbDpmdW5jdGlvbih0KXt6KGFyZ3VtZW50cy5sZW5ndGgsMSk7Zm9yKHZhciBlPUkodGhpcykuZW50cmllcyxuPXQrIiIscj1bXSxvPTA7bzxlLmxlbmd0aDtvKyspZVtvXS5rZXk9PT1uJiZyLnB1c2goZVtvXS52YWx1ZSk7cmV0dXJuIHJ9LGhhczpmdW5jdGlvbih0KXt6KGFyZ3VtZW50cy5sZW5ndGgsMSk7Zm9yKHZhciBlPUkodGhpcykuZW50cmllcyxuPXQrIiIscj0wO3I8ZS5sZW5ndGg7KWlmKGVbcisrXS5rZXk9PT1uKXJldHVybiEwO3JldHVybiExfSxzZXQ6ZnVuY3Rpb24odCxlKXt6KGFyZ3VtZW50cy5sZW5ndGgsMSk7Zm9yKHZhciBuLHI9SSh0aGlzKSxvPXIuZW50cmllcyxpPSExLGE9dCsiIixjPWUrIiIscz0wO3M8by5sZW5ndGg7cysrKShuPW9bc10pLmtleT09PWEmJihpP28uc3BsaWNlKHMtLSwxKTooaT0hMCxuLnZhbHVlPWMpKTtpfHxvLnB1c2goe2tleTphLHZhbHVlOmN9KSxyLnVwZGF0ZVVSTCgpfSxzb3J0OmZ1bmN0aW9uKCl7dmFyIHQsZSxuLHI9SSh0aGlzKSxvPXIuZW50cmllcyxpPW8uc2xpY2UoKTtmb3Ioby5sZW5ndGg9MCxuPTA7bjxpLmxlbmd0aDtuKyspe2Zvcih0PWlbbl0sZT0wO2U8bjtlKyspaWYob1tlXS5rZXk+dC5rZXkpe28uc3BsaWNlKGUsMCx0KTticmVha31lPT09biYmby5wdXNoKHQpfXIudXBkYXRlVVJMKCl9LGZvckVhY2g6ZnVuY3Rpb24odCl7Zm9yKHZhciBlLG49SSh0aGlzKS5lbnRyaWVzLHI9cCh0LGFyZ3VtZW50cy5sZW5ndGg+MT9hcmd1bWVudHNbMV06dm9pZCAwLDMpLG89MDtvPG4ubGVuZ3RoOylyKChlPW5bbysrXSkudmFsdWUsZS5rZXksdGhpcyl9LGtleXM6ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IFYodGhpcywia2V5cyIpfSx2YWx1ZXM6ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IFYodGhpcywidmFsdWVzIil9LGVudHJpZXM6ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IFYodGhpcywiZW50cmllcyIpfX0se2VudW1lcmFibGU6ITB9KSxhKHEsQyxxLmVudHJpZXMpLGEocSwidG9TdHJpbmciLChmdW5jdGlvbigpe2Zvcih2YXIgdCxlPUkodGhpcykuZW50cmllcyxuPVtdLHI9MDtyPGUubGVuZ3RoOyl0PWVbcisrXSxuLnB1c2goRih0LmtleSkrIj0iK0YodC52YWx1ZSkpO3JldHVybiBuLmpvaW4oIiYiKX0pLHtlbnVtZXJhYmxlOiEwfSkscyhILGspLHIoe2dsb2JhbDohMCxmb3JjZWQ6IWl9LHtVUkxTZWFyY2hQYXJhbXM6SH0pLGl8fCJmdW5jdGlvbiIhPXR5cGVvZiBFfHwiZnVuY3Rpb24iIT10eXBlb2Yganx8cih7Z2xvYmFsOiEwLGVudW1lcmFibGU6ITAsZm9yY2VkOiEwfSx7ZmV0Y2g6ZnVuY3Rpb24odCl7dmFyIGUsbixyLG89W3RdO3JldHVybiBhcmd1bWVudHMubGVuZ3RoPjEmJihnKGU9YXJndW1lbnRzWzFdKSYmKG49ZS5ib2R5LGgobik9PT1rJiYoKHI9ZS5oZWFkZXJzP25ldyBqKGUuaGVhZGVycyk6bmV3IGopLmhhcygiY29udGVudC10eXBlIil8fHIuc2V0KCJjb250ZW50LXR5cGUiLCJhcHBsaWNhdGlvbi94LXd3dy1mb3JtLXVybGVuY29kZWQ7Y2hhcnNldD1VVEYtOCIpLGU9eShlLHtib2R5Om0oMCxTdHJpbmcobikpLGhlYWRlcnM6bSgwLHIpfSkpKSxvLnB1c2goZSkpLEUuYXBwbHkodGhpcyxvKX19KSx0LmV4cG9ydHM9e1VSTFNlYXJjaFBhcmFtczpILGdldFN0YXRlOkl9fSwxMzkxMDpmdW5jdGlvbih0LGUsbil7InVzZSBzdHJpY3QiO24oODIyMDEpO3ZhciByLG89bigxNDA0NCksaT1uKDYyNTU2KSxhPW4oNTc1OTcpLGM9big4OTU1OCkscz1uKDg2NDAxKSx1PW4oOTI5MTMpLGw9big1OTM3OSksZj1uKDc2Mjk4KSxkPW4oNzg2ODUpLHA9big4NTE2NiksaD1uKDYwMTQwKS5jb2RlQXQsdj1uKDY5OTI3KSxnPW4oNTExMjgpLHk9big1NTU3KSxtPW4oODk4MjcpLGI9Yy5VUkwseD15LlVSTFNlYXJjaFBhcmFtcyx3PXkuZ2V0U3RhdGUsRT1tLnNldCxqPW0uZ2V0dGVyRm9yKCJVUkwiKSxDPU1hdGguZmxvb3Isaz1NYXRoLnBvdyxTPSJJbnZhbGlkIHNjaGVtZSIsTz0iSW52YWxpZCBob3N0IixJPSJJbnZhbGlkIHBvcnQiLEE9L1tBLVphLXpdLyxUPS9bXGQrXC0uQS1aYS16XS8sTT0vXGQvLF89L14oMHh8MFgpLyxMPS9eWzAtN10rJC8sUj0vXlxkKyQvLFA9L15bXGRBLUZhLWZdKyQvLE49L1tcdTAwMDBcdTAwMDlcdTAwMEFcdTAwMEQgIyUvOj9AW1xcXV0vLEQ9L1tcdTAwMDBcdTAwMDlcdTAwMEFcdTAwMEQgIy86P0BbXFxdXS8sRj0vXltcdTAwMDAtXHUwMDFGIF0rfFtcdTAwMDAtXHUwMDFGIF0rJC9nLFU9L1tcdTAwMDlcdTAwMEFcdTAwMERdL2csQj1mdW5jdGlvbih0LGUpe3ZhciBuLHIsbztpZigiWyI9PWUuY2hhckF0KDApKXtpZigiXSIhPWUuY2hhckF0KGUubGVuZ3RoLTEpKXJldHVybiBPO2lmKCEobj1WKGUuc2xpY2UoMSwtMSkpKSlyZXR1cm4gTzt0Lmhvc3Q9bn1lbHNlIGlmKEsodCkpe2lmKGU9dihlKSxOLnRlc3QoZSkpcmV0dXJuIE87aWYobnVsbD09PShuPXooZSkpKXJldHVybiBPO3QuaG9zdD1ufWVsc2V7aWYoRC50ZXN0KGUpKXJldHVybiBPO2ZvcihuPSIiLHI9cChlKSxvPTA7bzxyLmxlbmd0aDtvKyspbis9JChyW29dLHEpO3QuaG9zdD1ufX0sej1mdW5jdGlvbih0KXt2YXIgZSxuLHIsbyxpLGEsYyxzPXQuc3BsaXQoIi4iKTtpZihzLmxlbmd0aCYmIiI9PXNbcy5sZW5ndGgtMV0mJnMucG9wKCksKGU9cy5sZW5ndGgpPjQpcmV0dXJuIHQ7Zm9yKG49W10scj0wO3I8ZTtyKyspe2lmKCIiPT0obz1zW3JdKSlyZXR1cm4gdDtpZihpPTEwLG8ubGVuZ3RoPjEmJiIwIj09by5jaGFyQXQoMCkmJihpPV8udGVzdChvKT8xNjo4LG89by5zbGljZSg4PT1pPzE6MikpLCIiPT09bylhPTA7ZWxzZXtpZighKDEwPT1pP1I6OD09aT9MOlApLnRlc3QobykpcmV0dXJuIHQ7YT1wYXJzZUludChvLGkpfW4ucHVzaChhKX1mb3Iocj0wO3I8ZTtyKyspaWYoYT1uW3JdLHI9PWUtMSl7aWYoYT49aygyNTYsNS1lKSlyZXR1cm4gbnVsbH1lbHNlIGlmKGE+MjU1KXJldHVybiBudWxsO2ZvcihjPW4ucG9wKCkscj0wO3I8bi5sZW5ndGg7cisrKWMrPW5bcl0qaygyNTYsMy1yKTtyZXR1cm4gY30sVj1mdW5jdGlvbih0KXt2YXIgZSxuLHIsbyxpLGEsYyxzPVswLDAsMCwwLDAsMCwwLDBdLHU9MCxsPW51bGwsZj0wLGQ9ZnVuY3Rpb24oKXtyZXR1cm4gdC5jaGFyQXQoZil9O2lmKCI6Ij09ZCgpKXtpZigiOiIhPXQuY2hhckF0KDEpKXJldHVybjtmKz0yLGw9Kyt1fWZvcig7ZCgpOyl7aWYoOD09dSlyZXR1cm47aWYoIjoiIT1kKCkpe2ZvcihlPW49MDtuPDQmJlAudGVzdChkKCkpOyllPTE2KmUrcGFyc2VJbnQoZCgpLDE2KSxmKyssbisrO2lmKCIuIj09ZCgpKXtpZigwPT1uKXJldHVybjtpZihmLT1uLHU+NilyZXR1cm47Zm9yKHI9MDtkKCk7KXtpZihvPW51bGwscj4wKXtpZighKCIuIj09ZCgpJiZyPDQpKXJldHVybjtmKyt9aWYoIU0udGVzdChkKCkpKXJldHVybjtmb3IoO00udGVzdChkKCkpOyl7aWYoaT1wYXJzZUludChkKCksMTApLG51bGw9PT1vKW89aTtlbHNle2lmKDA9PW8pcmV0dXJuO289MTAqbytpfWlmKG8+MjU1KXJldHVybjtmKyt9c1t1XT0yNTYqc1t1XStvLDIhPSsrciYmNCE9cnx8dSsrfWlmKDQhPXIpcmV0dXJuO2JyZWFrfWlmKCI6Ij09ZCgpKXtpZihmKyssIWQoKSlyZXR1cm59ZWxzZSBpZihkKCkpcmV0dXJuO3NbdSsrXT1lfWVsc2V7aWYobnVsbCE9PWwpcmV0dXJuO2YrKyxsPSsrdX19aWYobnVsbCE9PWwpZm9yKGE9dS1sLHU9NzswIT11JiZhPjA7KWM9c1t1XSxzW3UtLV09c1tsK2EtMV0sc1tsKy0tYV09YztlbHNlIGlmKDghPXUpcmV0dXJuO3JldHVybiBzfSxIPWZ1bmN0aW9uKHQpe3ZhciBlLG4scixvO2lmKCJudW1iZXIiPT10eXBlb2YgdCl7Zm9yKGU9W10sbj0wO248NDtuKyspZS51bnNoaWZ0KHQlMjU2KSx0PUModC8yNTYpO3JldHVybiBlLmpvaW4oIi4iKX1pZigib2JqZWN0Ij09dHlwZW9mIHQpe2ZvcihlPSIiLHI9ZnVuY3Rpb24odCl7Zm9yKHZhciBlPW51bGwsbj0xLHI9bnVsbCxvPTAsaT0wO2k8ODtpKyspMCE9PXRbaV0/KG8+biYmKGU9cixuPW8pLHI9bnVsbCxvPTApOihudWxsPT09ciYmKHI9aSksKytvKTtyZXR1cm4gbz5uJiYoZT1yLG49byksZX0odCksbj0wO248ODtuKyspbyYmMD09PXRbbl18fChvJiYobz0hMSkscj09PW4/KGUrPW4/IjoiOiI6OiIsbz0hMCk6KGUrPXRbbl0udG9TdHJpbmcoMTYpLG48NyYmKGUrPSI6IikpKTtyZXR1cm4iWyIrZSsiXSJ9cmV0dXJuIHR9LHE9e30sVz1kKHt9LHEseyIgIjoxLCciJzoxLCI8IjoxLCI+IjoxLCJgIjoxfSksRz1kKHt9LFcseyIjIjoxLCI/IjoxLCJ7IjoxLCJ9IjoxfSksWj1kKHt9LEcseyIvIjoxLCI6IjoxLCI7IjoxLCI9IjoxLCJAIjoxLCJbIjoxLCJcXCI6MSwiXSI6MSwiXiI6MSwifCI6MX0pLCQ9ZnVuY3Rpb24odCxlKXt2YXIgbj1oKHQsMCk7cmV0dXJuIG4+MzImJm48MTI3JiYhZihlLHQpP3Q6ZW5jb2RlVVJJQ29tcG9uZW50KHQpfSxZPXtmdHA6MjEsZmlsZTpudWxsLGh0dHA6ODAsaHR0cHM6NDQzLHdzOjgwLHdzczo0NDN9LEs9ZnVuY3Rpb24odCl7cmV0dXJuIGYoWSx0LnNjaGVtZSl9LEo9ZnVuY3Rpb24odCl7cmV0dXJuIiIhPXQudXNlcm5hbWV8fCIiIT10LnBhc3N3b3JkfSxYPWZ1bmN0aW9uKHQpe3JldHVybiF0Lmhvc3R8fHQuY2Fubm90QmVBQmFzZVVSTHx8ImZpbGUiPT10LnNjaGVtZX0sUT1mdW5jdGlvbih0LGUpe3ZhciBuO3JldHVybiAyPT10Lmxlbmd0aCYmQS50ZXN0KHQuY2hhckF0KDApKSYmKCI6Ij09KG49dC5jaGFyQXQoMSkpfHwhZSYmInwiPT1uKX0sdHQ9ZnVuY3Rpb24odCl7dmFyIGU7cmV0dXJuIHQubGVuZ3RoPjEmJlEodC5zbGljZSgwLDIpKSYmKDI9PXQubGVuZ3RofHwiLyI9PT0oZT10LmNoYXJBdCgyKSl8fCJcXCI9PT1lfHwiPyI9PT1lfHwiIyI9PT1lKX0sZXQ9ZnVuY3Rpb24odCl7dmFyIGU9dC5wYXRoLG49ZS5sZW5ndGg7IW58fCJmaWxlIj09dC5zY2hlbWUmJjE9PW4mJlEoZVswXSwhMCl8fGUucG9wKCl9LG50PWZ1bmN0aW9uKHQpe3JldHVybiIuIj09PXR8fCIlMmUiPT09dC50b0xvd2VyQ2FzZSgpfSxydD17fSxvdD17fSxpdD17fSxhdD17fSxjdD17fSxzdD17fSx1dD17fSxsdD17fSxmdD17fSxkdD17fSxwdD17fSxodD17fSx2dD17fSxndD17fSx5dD17fSxtdD17fSxidD17fSx4dD17fSx3dD17fSxFdD17fSxqdD17fSxDdD1mdW5jdGlvbih0LGUsbixvKXt2YXIgaSxhLGMscyx1LGw9bnx8cnQsZD0wLGg9IiIsdj0hMSxnPSExLHk9ITE7Zm9yKG58fCh0LnNjaGVtZT0iIix0LnVzZXJuYW1lPSIiLHQucGFzc3dvcmQ9IiIsdC5ob3N0PW51bGwsdC5wb3J0PW51bGwsdC5wYXRoPVtdLHQucXVlcnk9bnVsbCx0LmZyYWdtZW50PW51bGwsdC5jYW5ub3RCZUFCYXNlVVJMPSExLGU9ZS5yZXBsYWNlKEYsIiIpKSxlPWUucmVwbGFjZShVLCIiKSxpPXAoZSk7ZDw9aS5sZW5ndGg7KXtzd2l0Y2goYT1pW2RdLGwpe2Nhc2UgcnQ6aWYoIWF8fCFBLnRlc3QoYSkpe2lmKG4pcmV0dXJuIFM7bD1pdDtjb250aW51ZX1oKz1hLnRvTG93ZXJDYXNlKCksbD1vdDticmVhaztjYXNlIG90OmlmKGEmJihULnRlc3QoYSl8fCIrIj09YXx8Ii0iPT1hfHwiLiI9PWEpKWgrPWEudG9Mb3dlckNhc2UoKTtlbHNle2lmKCI6IiE9YSl7aWYobilyZXR1cm4gUztoPSIiLGw9aXQsZD0wO2NvbnRpbnVlfWlmKG4mJihLKHQpIT1mKFksaCl8fCJmaWxlIj09aCYmKEoodCl8fG51bGwhPT10LnBvcnQpfHwiZmlsZSI9PXQuc2NoZW1lJiYhdC5ob3N0KSlyZXR1cm47aWYodC5zY2hlbWU9aCxuKXJldHVybiB2b2lkKEsodCkmJllbdC5zY2hlbWVdPT10LnBvcnQmJih0LnBvcnQ9bnVsbCkpO2g9IiIsImZpbGUiPT10LnNjaGVtZT9sPWd0OksodCkmJm8mJm8uc2NoZW1lPT10LnNjaGVtZT9sPWF0OksodCk/bD1sdDoiLyI9PWlbZCsxXT8obD1jdCxkKyspOih0LmNhbm5vdEJlQUJhc2VVUkw9ITAsdC5wYXRoLnB1c2goIiIpLGw9d3QpfWJyZWFrO2Nhc2UgaXQ6aWYoIW98fG8uY2Fubm90QmVBQmFzZVVSTCYmIiMiIT1hKXJldHVybiBTO2lmKG8uY2Fubm90QmVBQmFzZVVSTCYmIiMiPT1hKXt0LnNjaGVtZT1vLnNjaGVtZSx0LnBhdGg9by5wYXRoLnNsaWNlKCksdC5xdWVyeT1vLnF1ZXJ5LHQuZnJhZ21lbnQ9IiIsdC5jYW5ub3RCZUFCYXNlVVJMPSEwLGw9anQ7YnJlYWt9bD0iZmlsZSI9PW8uc2NoZW1lP2d0OnN0O2NvbnRpbnVlO2Nhc2UgYXQ6aWYoIi8iIT1hfHwiLyIhPWlbZCsxXSl7bD1zdDtjb250aW51ZX1sPWZ0LGQrKzticmVhaztjYXNlIGN0OmlmKCIvIj09YSl7bD1kdDticmVha31sPXh0O2NvbnRpbnVlO2Nhc2Ugc3Q6aWYodC5zY2hlbWU9by5zY2hlbWUsYT09cil0LnVzZXJuYW1lPW8udXNlcm5hbWUsdC5wYXNzd29yZD1vLnBhc3N3b3JkLHQuaG9zdD1vLmhvc3QsdC5wb3J0PW8ucG9ydCx0LnBhdGg9by5wYXRoLnNsaWNlKCksdC5xdWVyeT1vLnF1ZXJ5O2Vsc2UgaWYoIi8iPT1hfHwiXFwiPT1hJiZLKHQpKWw9dXQ7ZWxzZSBpZigiPyI9PWEpdC51c2VybmFtZT1vLnVzZXJuYW1lLHQucGFzc3dvcmQ9by5wYXNzd29yZCx0Lmhvc3Q9by5ob3N0LHQucG9ydD1vLnBvcnQsdC5wYXRoPW8ucGF0aC5zbGljZSgpLHQucXVlcnk9IiIsbD1FdDtlbHNle2lmKCIjIiE9YSl7dC51c2VybmFtZT1vLnVzZXJuYW1lLHQucGFzc3dvcmQ9by5wYXNzd29yZCx0Lmhvc3Q9by5ob3N0LHQucG9ydD1vLnBvcnQsdC5wYXRoPW8ucGF0aC5zbGljZSgpLHQucGF0aC5wb3AoKSxsPXh0O2NvbnRpbnVlfXQudXNlcm5hbWU9by51c2VybmFtZSx0LnBhc3N3b3JkPW8ucGFzc3dvcmQsdC5ob3N0PW8uaG9zdCx0LnBvcnQ9by5wb3J0LHQucGF0aD1vLnBhdGguc2xpY2UoKSx0LnF1ZXJ5PW8ucXVlcnksdC5mcmFnbWVudD0iIixsPWp0fWJyZWFrO2Nhc2UgdXQ6aWYoIUsodCl8fCIvIiE9YSYmIlxcIiE9YSl7aWYoIi8iIT1hKXt0LnVzZXJuYW1lPW8udXNlcm5hbWUsdC5wYXNzd29yZD1vLnBhc3N3b3JkLHQuaG9zdD1vLmhvc3QsdC5wb3J0PW8ucG9ydCxsPXh0O2NvbnRpbnVlfWw9ZHR9ZWxzZSBsPWZ0O2JyZWFrO2Nhc2UgbHQ6aWYobD1mdCwiLyIhPWF8fCIvIiE9aC5jaGFyQXQoZCsxKSljb250aW51ZTtkKys7YnJlYWs7Y2FzZSBmdDppZigiLyIhPWEmJiJcXCIhPWEpe2w9ZHQ7Y29udGludWV9YnJlYWs7Y2FzZSBkdDppZigiQCI9PWEpe3YmJihoPSIlNDAiK2gpLHY9ITAsYz1wKGgpO2Zvcih2YXIgbT0wO208Yy5sZW5ndGg7bSsrKXt2YXIgYj1jW21dO2lmKCI6IiE9Ynx8eSl7dmFyIHg9JChiLFopO3k/dC5wYXNzd29yZCs9eDp0LnVzZXJuYW1lKz14fWVsc2UgeT0hMH1oPSIifWVsc2UgaWYoYT09cnx8Ii8iPT1hfHwiPyI9PWF8fCIjIj09YXx8IlxcIj09YSYmSyh0KSl7aWYodiYmIiI9PWgpcmV0dXJuIkludmFsaWQgYXV0aG9yaXR5IjtkLT1wKGgpLmxlbmd0aCsxLGg9IiIsbD1wdH1lbHNlIGgrPWE7YnJlYWs7Y2FzZSBwdDpjYXNlIGh0OmlmKG4mJiJmaWxlIj09dC5zY2hlbWUpe2w9bXQ7Y29udGludWV9aWYoIjoiIT1hfHxnKXtpZihhPT1yfHwiLyI9PWF8fCI/Ij09YXx8IiMiPT1hfHwiXFwiPT1hJiZLKHQpKXtpZihLKHQpJiYiIj09aClyZXR1cm4gTztpZihuJiYiIj09aCYmKEoodCl8fG51bGwhPT10LnBvcnQpKXJldHVybjtpZihzPUIodCxoKSlyZXR1cm4gcztpZihoPSIiLGw9YnQsbilyZXR1cm47Y29udGludWV9IlsiPT1hP2c9ITA6Il0iPT1hJiYoZz0hMSksaCs9YX1lbHNle2lmKCIiPT1oKXJldHVybiBPO2lmKHM9Qih0LGgpKXJldHVybiBzO2lmKGg9IiIsbD12dCxuPT1odClyZXR1cm59YnJlYWs7Y2FzZSB2dDppZighTS50ZXN0KGEpKXtpZihhPT1yfHwiLyI9PWF8fCI/Ij09YXx8IiMiPT1hfHwiXFwiPT1hJiZLKHQpfHxuKXtpZigiIiE9aCl7dmFyIHc9cGFyc2VJbnQoaCwxMCk7aWYodz42NTUzNSlyZXR1cm4gSTt0LnBvcnQ9Syh0KSYmdz09PVlbdC5zY2hlbWVdP251bGw6dyxoPSIifWlmKG4pcmV0dXJuO2w9YnQ7Y29udGludWV9cmV0dXJuIEl9aCs9YTticmVhaztjYXNlIGd0OmlmKHQuc2NoZW1lPSJmaWxlIiwiLyI9PWF8fCJcXCI9PWEpbD15dDtlbHNle2lmKCFvfHwiZmlsZSIhPW8uc2NoZW1lKXtsPXh0O2NvbnRpbnVlfWlmKGE9PXIpdC5ob3N0PW8uaG9zdCx0LnBhdGg9by5wYXRoLnNsaWNlKCksdC5xdWVyeT1vLnF1ZXJ5O2Vsc2UgaWYoIj8iPT1hKXQuaG9zdD1vLmhvc3QsdC5wYXRoPW8ucGF0aC5zbGljZSgpLHQucXVlcnk9IiIsbD1FdDtlbHNle2lmKCIjIiE9YSl7dHQoaS5zbGljZShkKS5qb2luKCIiKSl8fCh0Lmhvc3Q9by5ob3N0LHQucGF0aD1vLnBhdGguc2xpY2UoKSxldCh0KSksbD14dDtjb250aW51ZX10Lmhvc3Q9by5ob3N0LHQucGF0aD1vLnBhdGguc2xpY2UoKSx0LnF1ZXJ5PW8ucXVlcnksdC5mcmFnbWVudD0iIixsPWp0fX1icmVhaztjYXNlIHl0OmlmKCIvIj09YXx8IlxcIj09YSl7bD1tdDticmVha31vJiYiZmlsZSI9PW8uc2NoZW1lJiYhdHQoaS5zbGljZShkKS5qb2luKCIiKSkmJihRKG8ucGF0aFswXSwhMCk/dC5wYXRoLnB1c2goby5wYXRoWzBdKTp0Lmhvc3Q9by5ob3N0KSxsPXh0O2NvbnRpbnVlO2Nhc2UgbXQ6aWYoYT09cnx8Ii8iPT1hfHwiXFwiPT1hfHwiPyI9PWF8fCIjIj09YSl7aWYoIW4mJlEoaCkpbD14dDtlbHNlIGlmKCIiPT1oKXtpZih0Lmhvc3Q9IiIsbilyZXR1cm47bD1idH1lbHNle2lmKHM9Qih0LGgpKXJldHVybiBzO2lmKCJsb2NhbGhvc3QiPT10Lmhvc3QmJih0Lmhvc3Q9IiIpLG4pcmV0dXJuO2g9IiIsbD1idH1jb250aW51ZX1oKz1hO2JyZWFrO2Nhc2UgYnQ6aWYoSyh0KSl7aWYobD14dCwiLyIhPWEmJiJcXCIhPWEpY29udGludWV9ZWxzZSBpZihufHwiPyIhPWEpaWYobnx8IiMiIT1hKXtpZihhIT1yJiYobD14dCwiLyIhPWEpKWNvbnRpbnVlfWVsc2UgdC5mcmFnbWVudD0iIixsPWp0O2Vsc2UgdC5xdWVyeT0iIixsPUV0O2JyZWFrO2Nhc2UgeHQ6aWYoYT09cnx8Ii8iPT1hfHwiXFwiPT1hJiZLKHQpfHwhbiYmKCI/Ij09YXx8IiMiPT1hKSl7aWYoIi4uIj09PSh1PSh1PWgpLnRvTG93ZXJDYXNlKCkpfHwiJTJlLiI9PT11fHwiLiUyZSI9PT11fHwiJTJlJTJlIj09PXU/KGV0KHQpLCIvIj09YXx8IlxcIj09YSYmSyh0KXx8dC5wYXRoLnB1c2goIiIpKTpudChoKT8iLyI9PWF8fCJcXCI9PWEmJksodCl8fHQucGF0aC5wdXNoKCIiKTooImZpbGUiPT10LnNjaGVtZSYmIXQucGF0aC5sZW5ndGgmJlEoaCkmJih0Lmhvc3QmJih0Lmhvc3Q9IiIpLGg9aC5jaGFyQXQoMCkrIjoiKSx0LnBhdGgucHVzaChoKSksaD0iIiwiZmlsZSI9PXQuc2NoZW1lJiYoYT09cnx8Ij8iPT1hfHwiIyI9PWEpKWZvcig7dC5wYXRoLmxlbmd0aD4xJiYiIj09PXQucGF0aFswXTspdC5wYXRoLnNoaWZ0KCk7Ij8iPT1hPyh0LnF1ZXJ5PSIiLGw9RXQpOiIjIj09YSYmKHQuZnJhZ21lbnQ9IiIsbD1qdCl9ZWxzZSBoKz0kKGEsRyk7YnJlYWs7Y2FzZSB3dDoiPyI9PWE/KHQucXVlcnk9IiIsbD1FdCk6IiMiPT1hPyh0LmZyYWdtZW50PSIiLGw9anQpOmEhPXImJih0LnBhdGhbMF0rPSQoYSxxKSk7YnJlYWs7Y2FzZSBFdDpufHwiIyIhPWE/YSE9ciYmKCInIj09YSYmSyh0KT90LnF1ZXJ5Kz0iJTI3Ijp0LnF1ZXJ5Kz0iIyI9PWE/IiUyMyI6JChhLHEpKToodC5mcmFnbWVudD0iIixsPWp0KTticmVhaztjYXNlIGp0OmEhPXImJih0LmZyYWdtZW50Kz0kKGEsVykpfWQrK319LGt0PWZ1bmN0aW9uKHQpe3ZhciBlLG4scj1sKHRoaXMsa3QsIlVSTCIpLG89YXJndW1lbnRzLmxlbmd0aD4xP2FyZ3VtZW50c1sxXTp2b2lkIDAsYT1TdHJpbmcodCksYz1FKHIse3R5cGU6IlVSTCJ9KTtpZih2b2lkIDAhPT1vKWlmKG8gaW5zdGFuY2VvZiBrdCllPWoobyk7ZWxzZSBpZihuPUN0KGU9e30sU3RyaW5nKG8pKSl0aHJvdyBUeXBlRXJyb3Iobik7aWYobj1DdChjLGEsbnVsbCxlKSl0aHJvdyBUeXBlRXJyb3Iobik7dmFyIHM9Yy5zZWFyY2hQYXJhbXM9bmV3IHgsdT13KHMpO3UudXBkYXRlU2VhcmNoUGFyYW1zKGMucXVlcnkpLHUudXBkYXRlVVJMPWZ1bmN0aW9uKCl7Yy5xdWVyeT1TdHJpbmcocyl8fG51bGx9LGl8fChyLmhyZWY9T3QuY2FsbChyKSxyLm9yaWdpbj1JdC5jYWxsKHIpLHIucHJvdG9jb2w9QXQuY2FsbChyKSxyLnVzZXJuYW1lPVR0LmNhbGwociksci5wYXNzd29yZD1NdC5jYWxsKHIpLHIuaG9zdD1fdC5jYWxsKHIpLHIuaG9zdG5hbWU9THQuY2FsbChyKSxyLnBvcnQ9UnQuY2FsbChyKSxyLnBhdGhuYW1lPVB0LmNhbGwociksci5zZWFyY2g9TnQuY2FsbChyKSxyLnNlYXJjaFBhcmFtcz1EdC5jYWxsKHIpLHIuaGFzaD1GdC5jYWxsKHIpKX0sU3Q9a3QucHJvdG90eXBlLE90PWZ1bmN0aW9uKCl7dmFyIHQ9aih0aGlzKSxlPXQuc2NoZW1lLG49dC51c2VybmFtZSxyPXQucGFzc3dvcmQsbz10Lmhvc3QsaT10LnBvcnQsYT10LnBhdGgsYz10LnF1ZXJ5LHM9dC5mcmFnbWVudCx1PWUrIjoiO3JldHVybiBudWxsIT09bz8odSs9Ii8vIixKKHQpJiYodSs9bisocj8iOiIrcjoiIikrIkAiKSx1Kz1IKG8pLG51bGwhPT1pJiYodSs9IjoiK2kpKToiZmlsZSI9PWUmJih1Kz0iLy8iKSx1Kz10LmNhbm5vdEJlQUJhc2VVUkw/YVswXTphLmxlbmd0aD8iLyIrYS5qb2luKCIvIik6IiIsbnVsbCE9PWMmJih1Kz0iPyIrYyksbnVsbCE9PXMmJih1Kz0iIyIrcyksdX0sSXQ9ZnVuY3Rpb24oKXt2YXIgdD1qKHRoaXMpLGU9dC5zY2hlbWUsbj10LnBvcnQ7aWYoImJsb2IiPT1lKXRyeXtyZXR1cm4gbmV3IFVSTChlLnBhdGhbMF0pLm9yaWdpbn1jYXRjaCh0KXtyZXR1cm4ibnVsbCJ9cmV0dXJuImZpbGUiIT1lJiZLKHQpP2UrIjovLyIrSCh0Lmhvc3QpKyhudWxsIT09bj8iOiIrbjoiIik6Im51bGwifSxBdD1mdW5jdGlvbigpe3JldHVybiBqKHRoaXMpLnNjaGVtZSsiOiJ9LFR0PWZ1bmN0aW9uKCl7cmV0dXJuIGoodGhpcykudXNlcm5hbWV9LE10PWZ1bmN0aW9uKCl7cmV0dXJuIGoodGhpcykucGFzc3dvcmR9LF90PWZ1bmN0aW9uKCl7dmFyIHQ9aih0aGlzKSxlPXQuaG9zdCxuPXQucG9ydDtyZXR1cm4gbnVsbD09PWU/IiI6bnVsbD09PW4/SChlKTpIKGUpKyI6IitufSxMdD1mdW5jdGlvbigpe3ZhciB0PWoodGhpcykuaG9zdDtyZXR1cm4gbnVsbD09PXQ/IiI6SCh0KX0sUnQ9ZnVuY3Rpb24oKXt2YXIgdD1qKHRoaXMpLnBvcnQ7cmV0dXJuIG51bGw9PT10PyIiOlN0cmluZyh0KX0sUHQ9ZnVuY3Rpb24oKXt2YXIgdD1qKHRoaXMpLGU9dC5wYXRoO3JldHVybiB0LmNhbm5vdEJlQUJhc2VVUkw/ZVswXTplLmxlbmd0aD8iLyIrZS5qb2luKCIvIik6IiJ9LE50PWZ1bmN0aW9uKCl7dmFyIHQ9aih0aGlzKS5xdWVyeTtyZXR1cm4gdD8iPyIrdDoiIn0sRHQ9ZnVuY3Rpb24oKXtyZXR1cm4gaih0aGlzKS5zZWFyY2hQYXJhbXN9LEZ0PWZ1bmN0aW9uKCl7dmFyIHQ9aih0aGlzKS5mcmFnbWVudDtyZXR1cm4gdD8iIyIrdDoiIn0sVXQ9ZnVuY3Rpb24odCxlKXtyZXR1cm57Z2V0OnQsc2V0OmUsY29uZmlndXJhYmxlOiEwLGVudW1lcmFibGU6ITB9fTtpZihpJiZzKFN0LHtocmVmOlV0KE90LChmdW5jdGlvbih0KXt2YXIgZT1qKHRoaXMpLG49U3RyaW5nKHQpLHI9Q3QoZSxuKTtpZihyKXRocm93IFR5cGVFcnJvcihyKTt3KGUuc2VhcmNoUGFyYW1zKS51cGRhdGVTZWFyY2hQYXJhbXMoZS5xdWVyeSl9KSksb3JpZ2luOlV0KEl0KSxwcm90b2NvbDpVdChBdCwoZnVuY3Rpb24odCl7dmFyIGU9aih0aGlzKTtDdChlLFN0cmluZyh0KSsiOiIscnQpfSkpLHVzZXJuYW1lOlV0KFR0LChmdW5jdGlvbih0KXt2YXIgZT1qKHRoaXMpLG49cChTdHJpbmcodCkpO2lmKCFYKGUpKXtlLnVzZXJuYW1lPSIiO2Zvcih2YXIgcj0wO3I8bi5sZW5ndGg7cisrKWUudXNlcm5hbWUrPSQobltyXSxaKX19KSkscGFzc3dvcmQ6VXQoTXQsKGZ1bmN0aW9uKHQpe3ZhciBlPWoodGhpcyksbj1wKFN0cmluZyh0KSk7aWYoIVgoZSkpe2UucGFzc3dvcmQ9IiI7Zm9yKHZhciByPTA7cjxuLmxlbmd0aDtyKyspZS5wYXNzd29yZCs9JChuW3JdLFopfX0pKSxob3N0OlV0KF90LChmdW5jdGlvbih0KXt2YXIgZT1qKHRoaXMpO2UuY2Fubm90QmVBQmFzZVVSTHx8Q3QoZSxTdHJpbmcodCkscHQpfSkpLGhvc3RuYW1lOlV0KEx0LChmdW5jdGlvbih0KXt2YXIgZT1qKHRoaXMpO2UuY2Fubm90QmVBQmFzZVVSTHx8Q3QoZSxTdHJpbmcodCksaHQpfSkpLHBvcnQ6VXQoUnQsKGZ1bmN0aW9uKHQpe3ZhciBlPWoodGhpcyk7WChlKXx8KCIiPT0odD1TdHJpbmcodCkpP2UucG9ydD1udWxsOkN0KGUsdCx2dCkpfSkpLHBhdGhuYW1lOlV0KFB0LChmdW5jdGlvbih0KXt2YXIgZT1qKHRoaXMpO2UuY2Fubm90QmVBQmFzZVVSTHx8KGUucGF0aD1bXSxDdChlLHQrIiIsYnQpKX0pKSxzZWFyY2g6VXQoTnQsKGZ1bmN0aW9uKHQpe3ZhciBlPWoodGhpcyk7IiI9PSh0PVN0cmluZyh0KSk/ZS5xdWVyeT1udWxsOigiPyI9PXQuY2hhckF0KDApJiYodD10LnNsaWNlKDEpKSxlLnF1ZXJ5PSIiLEN0KGUsdCxFdCkpLHcoZS5zZWFyY2hQYXJhbXMpLnVwZGF0ZVNlYXJjaFBhcmFtcyhlLnF1ZXJ5KX0pKSxzZWFyY2hQYXJhbXM6VXQoRHQpLGhhc2g6VXQoRnQsKGZ1bmN0aW9uKHQpe3ZhciBlPWoodGhpcyk7IiIhPSh0PVN0cmluZyh0KSk/KCIjIj09dC5jaGFyQXQoMCkmJih0PXQuc2xpY2UoMSkpLGUuZnJhZ21lbnQ9IiIsQ3QoZSx0LGp0KSk6ZS5mcmFnbWVudD1udWxsfSkpfSksdShTdCwidG9KU09OIiwoZnVuY3Rpb24oKXtyZXR1cm4gT3QuY2FsbCh0aGlzKX0pLHtlbnVtZXJhYmxlOiEwfSksdShTdCwidG9TdHJpbmciLChmdW5jdGlvbigpe3JldHVybiBPdC5jYWxsKHRoaXMpfSkse2VudW1lcmFibGU6ITB9KSxiKXt2YXIgQnQ9Yi5jcmVhdGVPYmplY3RVUkwsenQ9Yi5yZXZva2VPYmplY3RVUkw7QnQmJnUoa3QsImNyZWF0ZU9iamVjdFVSTCIsKGZ1bmN0aW9uKHQpe3JldHVybiBCdC5hcHBseShiLGFyZ3VtZW50cyl9KSksenQmJnUoa3QsInJldm9rZU9iamVjdFVSTCIsKGZ1bmN0aW9uKHQpe3JldHVybiB6dC5hcHBseShiLGFyZ3VtZW50cyl9KSl9ZyhrdCwiVVJMIiksbyh7Z2xvYmFsOiEwLGZvcmNlZDohYSxzaGFtOiFpfSx7VVJMOmt0fSl9LDk4NDpmdW5jdGlvbih0LGUsbil7InVzZSBzdHJpY3QiO24oMTQwNDQpKHt0YXJnZXQ6IlVSTCIscHJvdG86ITAsZW51bWVyYWJsZTohMH0se3RvSlNPTjpmdW5jdGlvbigpe3JldHVybiBVUkwucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwodGhpcyl9fSl9LDM2NDY3OmZ1bmN0aW9uKHQsZSxuKXtuKDE0MDg2KX0sNjY1NTQ6ZnVuY3Rpb24odCxlLG4pe24oNDkzMCksbig2MzY0KX0sOTMyNzA6ZnVuY3Rpb24odCxlLG4pe24oNTM1MTMpLG4oOTkyNTUpLG4oNDg0NCksbigzNTU0KSxuKDE4ODQ0KSxuKDM1NjU2KSxuKDQ5MDUwKSxuKDkzODQzKSxuKDY2MjI0KSxuKDcxNzAwKSxuKDY5NTI5KSxuKDI3NzM0KSxuKDc3MzY5KSxuKDY5ODQyKSxuKDk3OTI4KSxuKDkzOSksbig2MTQ2NyksbigxNjEyNyksbig1MzU4OSksbig4MTA0MiksbigxNjc1NyksbigxMTA3NCksbigzMzUzOSksbigyNDEwMyksbig2NDgxMyksbig2ODk5OSksbig1MzgyNCl9LDg5NzQwOmZ1bmN0aW9uKHQsZSxuKXtuKDM4NzkyKSxuKDE5OTApLG4oOTcyODQpLG4oMjQ1OTgpLG4oOTk5NzkpLG4oMTgyMDUpLG4oODU4KSxuKDY0ODk5KX0sNjgwMDE6ZnVuY3Rpb24odCxlLG4pe24oMzA2MTMpLG4oNjg0MDYpLG4oNDk3OSksbig0NDY0Nil9LDI4Njk5OmZ1bmN0aW9uKHQsZSxuKXtuKDk5NjI4KTt2YXIgcj1uKDg5NTU4KTt0LmV4cG9ydHM9cn0sMTU2MjQ6ZnVuY3Rpb24odCxlLG4pe24oNTczNjApfSw4MTIxMzpmdW5jdGlvbih0LGUsbil7big2MTI5OCksbig0NzAwNCksbig2NzQ2Miksbig5MDY3KSxuKDIwMTI0KSxuKDIxMzcxKSxuKDM4OTg0KSxuKDY5MjM3KSxuKDI2NDk3KSxuKDUzMTY4KSxuKDczOTQ5KSxuKDg4MjExKSxuKDczNzYxKSxuKDQyMTk2KSxuKDQzMzMyKSxuKDkyNjAxKSxuKDIwNDc0KSxuKDU0NTU2KSxuKDQwNjM4KSxuKDk2NjU5KSxuKDE0Njg4KSxuKDczNzgpLG4oMjc0MjgpLG4oMzM0MzYpLG4oODQzODgpLG4oNTk2MjMpLG4oMzI4NTMpLG4oNjcwNzIpfSw2MjY3NzpmdW5jdGlvbih0LGUsbil7bigzNjU3MSksbig0MzA4Nil9LDM3NjEzOmZ1bmN0aW9uKHQsZSxuKXtuKDQzMjkwKSxuKDE0NjgyKSxuKDg3NTU1KX0sMTQ3MTU6ZnVuY3Rpb24odCxlLG4pe24oNzAyMjUpLG4oMjM5OSksbigxNjgwOSksbig2NzE0MSksbig5MDc2OSksbig1Nzg5MSksbigxNTcyMil9LDM2Njg2OmZ1bmN0aW9uKHQsZSxuKXtuKDc3OTA3KX0sNjc3OTM6ZnVuY3Rpb24odCxlLG4pe24oNzU2NDcpfSw5NDc3OmZ1bmN0aW9uKHQsZSxuKXtuKDg0MzA5KSxuKDcyOTYzKSxuKDU2MzU5KX0sNzIzNTQ6ZnVuY3Rpb24odCxlLG4pe24oMjAyMzQpLG4oNTEzNzQpfSw3NDY3OTpmdW5jdGlvbih0LGUsbil7big1Mzc3Mil9LDk0Nzk6ZnVuY3Rpb24odCxlLG4pe24oMjc3NSl9LDg1NjU5OmZ1bmN0aW9uKHQsZSxuKXtuKDk2NzUxKSxuKDczMjIwKX0sNTQ5ODY6ZnVuY3Rpb24odCxlLG4pe24oMTEwNzEpfSwxODgxOmZ1bmN0aW9uKHQsZSxuKXtuKDQ5NjQwKSxuKDc0OTYzKSxuKDY5NDU5KSxuKDQ5MTU1KSxuKDI2ODk2KSxuKDg3NDc0KSxuKDk3NDMzKSxuKDcxMDgpLG4oMjM2MzEpfSw1NzYwMzpmdW5jdGlvbih0LGUsbil7bigxNzY1KX0sODE1NDg6ZnVuY3Rpb24odCxlLG4pe24oOTgzNTApLG4oNDE3MTgpLG4oNTczNzEpLG4oODkyMzApLG4oMzIzMDMpLG4oNjI5MSksbig2NjE4MSl9LDIzMTAyOmZ1bmN0aW9uKHQsZSxuKXtuKDczNDYwKX0sNDQxNTM6ZnVuY3Rpb24odCxlLG4pe24oMzIwNjIpfSw3MzkyOmZ1bmN0aW9uKHQsZSxuKXtuKDc0NTI1KX0sNzc3OTpmdW5jdGlvbih0LGUsbil7big2NDAyNiksbig4NjA3Nyl9LDYwODI2OmZ1bmN0aW9uKHQsZSxuKXtuKDEzOTEwKSxuKDk4NCksbig1NTU3KX0sNTU5MzM6ZnVuY3Rpb24odCxlLG4pe24oNjk0Miksbig5NDI0OSl9LDg3NjAyOmZ1bmN0aW9uKHQsZSxuKXtuKDY4MDAxKSxuKDIzMTAyKSxuKDYwODI2KTt2YXIgcj1uKDk1OTY4KTt0LmV4cG9ydHM9cn0sOTU5Njg6ZnVuY3Rpb24odCxlLG4pe24oNjY1NTQpLG4oOTMyNzApLG4oODk3NDApLG4oNjI2NzcpLG4oMTQ3MTUpLG4oMzY2ODYpLG4oNjc3OTMpLG4oOTQ3Nyksbig3MjM1NCksbig3NDY3OSksbig1NDk4Niksbig1NzYwMyksbig0NDE1Myk7dmFyIHI9big0Nzk3Mik7dC5leHBvcnRzPXJ9LDQ3OTcyOmZ1bmN0aW9uKHQsZSxuKXtuKDM2NDY3KSxuKDgxMjEzKSxuKDM3NjEzKSxuKDgxNTQ4KSxuKDU1OTMzKTt2YXIgcj1uKDU5MDExKTt0LmV4cG9ydHM9cn0sNTkwMTE6ZnVuY3Rpb24odCxlLG4pe24oODU2NTkpLG4oNzc3OSk7dmFyIHI9big2ODY4NSk7dC5leHBvcnRzPXJ9LDY4Njg1OmZ1bmN0aW9uKHQsZSxuKXtuKDI4Njk5KSxuKDk0NzkpLG4oNzM5Mik7dmFyIHI9big1NjIzOCk7dC5leHBvcnRzPXJ9LDU3MzYwOmZ1bmN0aW9uKHQsZSxuKXt2YXIgcj1uKDUzMzM1KTt0LmV4cG9ydHM9cn0sNTMzMzU6ZnVuY3Rpb24odCxlLG4pe24oMTg4MSk7dmFyIHI9big4NzYwMik7dC5leHBvcnRzPXJ9LDkyNDA0OmZ1bmN0aW9uKHQsZSxuKXtuKDY3MDM5KSxuKDc5Nzk5KSxuKDc0MDEwKSxuKDY1OTc2KSxuKDgxOTk0KSxuKDEzOTEwKSxuKDk4NCksbig1NTU3KTt2YXIgcj1uKDU2MjM4KTt0LmV4cG9ydHM9cn0sMTg5ODY6ZnVuY3Rpb24odCl7InVzZSBzdHJpY3QiO3QuZXhwb3J0cz1mdW5jdGlvbih0KXt2YXIgZT1bXTtyZXR1cm4gZS50b1N0cmluZz1mdW5jdGlvbigpe3JldHVybiB0aGlzLm1hcCgoZnVuY3Rpb24oZSl7dmFyIG49ZnVuY3Rpb24odCxlKXt2YXIgbj10WzFdfHwiIixyPXRbM107aWYoIXIpcmV0dXJuIG47aWYoZSYmImZ1bmN0aW9uIj09dHlwZW9mIGJ0b2Epe3ZhciBvPShhPXIsYz1idG9hKHVuZXNjYXBlKGVuY29kZVVSSUNvbXBvbmVudChKU09OLnN0cmluZ2lmeShhKSkpKSxzPSJzb3VyY2VNYXBwaW5nVVJMPWRhdGE6YXBwbGljYXRpb24vanNvbjtjaGFyc2V0PXV0Zi04O2Jhc2U2NCwiLmNvbmNhdChjKSwiLyojICIuY29uY2F0KHMsIiAqLyIpKSxpPXIuc291cmNlcy5tYXAoKGZ1bmN0aW9uKHQpe3JldHVybiIvKiMgc291cmNlVVJMPSIuY29uY2F0KHIuc291cmNlUm9vdCkuY29uY2F0KHQsIiAqLyIpfSkpO3JldHVybltuXS5jb25jYXQoaSkuY29uY2F0KFtvXSkuam9pbigiXG4iKX12YXIgYSxjLHM7cmV0dXJuW25dLmpvaW4oIlxuIil9KGUsdCk7cmV0dXJuIGVbMl0/IkBtZWRpYSAiLmNvbmNhdChlWzJdLCIgeyIpLmNvbmNhdChuLCJ9Iik6bn0pKS5qb2luKCIiKX0sZS5pPWZ1bmN0aW9uKHQsbil7InN0cmluZyI9PXR5cGVvZiB0JiYodD1bW251bGwsdCwiIl1dKTtmb3IodmFyIHI9MDtyPHQubGVuZ3RoO3IrKyl7dmFyIG89W10uY29uY2F0KHRbcl0pO24mJihvWzJdP29bMl09IiIuY29uY2F0KG4sIiBhbmQgIikuY29uY2F0KG9bMl0pOm9bMl09biksZS5wdXNoKG8pfX0sZX19LDQ2Njc5OmZ1bmN0aW9uKHQpe3ZhciBlPWZ1bmN0aW9uKHQpeyJ1c2Ugc3RyaWN0Ijt2YXIgZSxuPU9iamVjdC5wcm90b3R5cGUscj1uLmhhc093blByb3BlcnR5LG89ImZ1bmN0aW9uIj09dHlwZW9mIFN5bWJvbD9TeW1ib2w6e30saT1vLml0ZXJhdG9yfHwiQEBpdGVyYXRvciIsYT1vLmFzeW5jSXRlcmF0b3J8fCJAQGFzeW5jSXRlcmF0b3IiLGM9by50b1N0cmluZ1RhZ3x8IkBAdG9TdHJpbmdUYWciO2Z1bmN0aW9uIHModCxlLG4pe3JldHVybiBPYmplY3QuZGVmaW5lUHJvcGVydHkodCxlLHt2YWx1ZTpuLGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwLHdyaXRhYmxlOiEwfSksdFtlXX10cnl7cyh7fSwiIil9Y2F0Y2godCl7cz1mdW5jdGlvbih0LGUsbil7cmV0dXJuIHRbZV09bn19ZnVuY3Rpb24gdSh0LGUsbixyKXt2YXIgbz1lJiZlLnByb3RvdHlwZSBpbnN0YW5jZW9mIGc/ZTpnLGk9T2JqZWN0LmNyZWF0ZShvLnByb3RvdHlwZSksYT1uZXcgSShyfHxbXSk7cmV0dXJuIGkuX2ludm9rZT1mdW5jdGlvbih0LGUsbil7dmFyIHI9ZjtyZXR1cm4gZnVuY3Rpb24obyxpKXtpZihyPT09cCl0aHJvdyBuZXcgRXJyb3IoIkdlbmVyYXRvciBpcyBhbHJlYWR5IHJ1bm5pbmciKTtpZihyPT09aCl7aWYoInRocm93Ij09PW8pdGhyb3cgaTtyZXR1cm4gVCgpfWZvcihuLm1ldGhvZD1vLG4uYXJnPWk7Oyl7dmFyIGE9bi5kZWxlZ2F0ZTtpZihhKXt2YXIgYz1rKGEsbik7aWYoYyl7aWYoYz09PXYpY29udGludWU7cmV0dXJuIGN9fWlmKCJuZXh0Ij09PW4ubWV0aG9kKW4uc2VudD1uLl9zZW50PW4uYXJnO2Vsc2UgaWYoInRocm93Ij09PW4ubWV0aG9kKXtpZihyPT09Zil0aHJvdyByPWgsbi5hcmc7bi5kaXNwYXRjaEV4Y2VwdGlvbihuLmFyZyl9ZWxzZSJyZXR1cm4iPT09bi5tZXRob2QmJm4uYWJydXB0KCJyZXR1cm4iLG4uYXJnKTtyPXA7dmFyIHM9bCh0LGUsbik7aWYoIm5vcm1hbCI9PT1zLnR5cGUpe2lmKHI9bi5kb25lP2g6ZCxzLmFyZz09PXYpY29udGludWU7cmV0dXJue3ZhbHVlOnMuYXJnLGRvbmU6bi5kb25lfX0idGhyb3ciPT09cy50eXBlJiYocj1oLG4ubWV0aG9kPSJ0aHJvdyIsbi5hcmc9cy5hcmcpfX19KHQsbixhKSxpfWZ1bmN0aW9uIGwodCxlLG4pe3RyeXtyZXR1cm57dHlwZToibm9ybWFsIixhcmc6dC5jYWxsKGUsbil9fWNhdGNoKHQpe3JldHVybnt0eXBlOiJ0aHJvdyIsYXJnOnR9fX10LndyYXA9dTt2YXIgZj0ic3VzcGVuZGVkU3RhcnQiLGQ9InN1c3BlbmRlZFlpZWxkIixwPSJleGVjdXRpbmciLGg9ImNvbXBsZXRlZCIsdj17fTtmdW5jdGlvbiBnKCl7fWZ1bmN0aW9uIHkoKXt9ZnVuY3Rpb24gbSgpe312YXIgYj17fTtzKGIsaSwoZnVuY3Rpb24oKXtyZXR1cm4gdGhpc30pKTt2YXIgeD1PYmplY3QuZ2V0UHJvdG90eXBlT2Ysdz14JiZ4KHgoQShbXSkpKTt3JiZ3IT09biYmci5jYWxsKHcsaSkmJihiPXcpO3ZhciBFPW0ucHJvdG90eXBlPWcucHJvdG90eXBlPU9iamVjdC5jcmVhdGUoYik7ZnVuY3Rpb24gaih0KXtbIm5leHQiLCJ0aHJvdyIsInJldHVybiJdLmZvckVhY2goKGZ1bmN0aW9uKGUpe3ModCxlLChmdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5faW52b2tlKGUsdCl9KSl9KSl9ZnVuY3Rpb24gQyh0LGUpe2Z1bmN0aW9uIG4obyxpLGEsYyl7dmFyIHM9bCh0W29dLHQsaSk7aWYoInRocm93IiE9PXMudHlwZSl7dmFyIHU9cy5hcmcsZj11LnZhbHVlO3JldHVybiBmJiYib2JqZWN0Ij09dHlwZW9mIGYmJnIuY2FsbChmLCJfX2F3YWl0Iik/ZS5yZXNvbHZlKGYuX19hd2FpdCkudGhlbigoZnVuY3Rpb24odCl7bigibmV4dCIsdCxhLGMpfSksKGZ1bmN0aW9uKHQpe24oInRocm93Iix0LGEsYyl9KSk6ZS5yZXNvbHZlKGYpLnRoZW4oKGZ1bmN0aW9uKHQpe3UudmFsdWU9dCxhKHUpfSksKGZ1bmN0aW9uKHQpe3JldHVybiBuKCJ0aHJvdyIsdCxhLGMpfSkpfWMocy5hcmcpfXZhciBvO3RoaXMuX2ludm9rZT1mdW5jdGlvbih0LHIpe2Z1bmN0aW9uIGkoKXtyZXR1cm4gbmV3IGUoKGZ1bmN0aW9uKGUsbyl7bih0LHIsZSxvKX0pKX1yZXR1cm4gbz1vP28udGhlbihpLGkpOmkoKX19ZnVuY3Rpb24gayh0LG4pe3ZhciByPXQuaXRlcmF0b3Jbbi5tZXRob2RdO2lmKHI9PT1lKXtpZihuLmRlbGVnYXRlPW51bGwsInRocm93Ij09PW4ubWV0aG9kKXtpZih0Lml0ZXJhdG9yLnJldHVybiYmKG4ubWV0aG9kPSJyZXR1cm4iLG4uYXJnPWUsayh0LG4pLCJ0aHJvdyI9PT1uLm1ldGhvZCkpcmV0dXJuIHY7bi5tZXRob2Q9InRocm93IixuLmFyZz1uZXcgVHlwZUVycm9yKCJUaGUgaXRlcmF0b3IgZG9lcyBub3QgcHJvdmlkZSBhICd0aHJvdycgbWV0aG9kIil9cmV0dXJuIHZ9dmFyIG89bChyLHQuaXRlcmF0b3Isbi5hcmcpO2lmKCJ0aHJvdyI9PT1vLnR5cGUpcmV0dXJuIG4ubWV0aG9kPSJ0aHJvdyIsbi5hcmc9by5hcmcsbi5kZWxlZ2F0ZT1udWxsLHY7dmFyIGk9by5hcmc7cmV0dXJuIGk/aS5kb25lPyhuW3QucmVzdWx0TmFtZV09aS52YWx1ZSxuLm5leHQ9dC5uZXh0TG9jLCJyZXR1cm4iIT09bi5tZXRob2QmJihuLm1ldGhvZD0ibmV4dCIsbi5hcmc9ZSksbi5kZWxlZ2F0ZT1udWxsLHYpOmk6KG4ubWV0aG9kPSJ0aHJvdyIsbi5hcmc9bmV3IFR5cGVFcnJvcigiaXRlcmF0b3IgcmVzdWx0IGlzIG5vdCBhbiBvYmplY3QiKSxuLmRlbGVnYXRlPW51bGwsdil9ZnVuY3Rpb24gUyh0KXt2YXIgZT17dHJ5TG9jOnRbMF19OzEgaW4gdCYmKGUuY2F0Y2hMb2M9dFsxXSksMiBpbiB0JiYoZS5maW5hbGx5TG9jPXRbMl0sZS5hZnRlckxvYz10WzNdKSx0aGlzLnRyeUVudHJpZXMucHVzaChlKX1mdW5jdGlvbiBPKHQpe3ZhciBlPXQuY29tcGxldGlvbnx8e307ZS50eXBlPSJub3JtYWwiLGRlbGV0ZSBlLmFyZyx0LmNvbXBsZXRpb249ZX1mdW5jdGlvbiBJKHQpe3RoaXMudHJ5RW50cmllcz1be3RyeUxvYzoicm9vdCJ9XSx0LmZvckVhY2goUyx0aGlzKSx0aGlzLnJlc2V0KCEwKX1mdW5jdGlvbiBBKHQpe2lmKHQpe3ZhciBuPXRbaV07aWYobilyZXR1cm4gbi5jYWxsKHQpO2lmKCJmdW5jdGlvbiI9PXR5cGVvZiB0Lm5leHQpcmV0dXJuIHQ7aWYoIWlzTmFOKHQubGVuZ3RoKSl7dmFyIG89LTEsYT1mdW5jdGlvbiBuKCl7Zm9yKDsrK288dC5sZW5ndGg7KWlmKHIuY2FsbCh0LG8pKXJldHVybiBuLnZhbHVlPXRbb10sbi5kb25lPSExLG47cmV0dXJuIG4udmFsdWU9ZSxuLmRvbmU9ITAsbn07cmV0dXJuIGEubmV4dD1hfX1yZXR1cm57bmV4dDpUfX1mdW5jdGlvbiBUKCl7cmV0dXJue3ZhbHVlOmUsZG9uZTohMH19cmV0dXJuIHkucHJvdG90eXBlPW0scyhFLCJjb25zdHJ1Y3RvciIsbSkscyhtLCJjb25zdHJ1Y3RvciIseSkseS5kaXNwbGF5TmFtZT1zKG0sYywiR2VuZXJhdG9yRnVuY3Rpb24iKSx0LmlzR2VuZXJhdG9yRnVuY3Rpb249ZnVuY3Rpb24odCl7dmFyIGU9ImZ1bmN0aW9uIj09dHlwZW9mIHQmJnQuY29uc3RydWN0b3I7cmV0dXJuISFlJiYoZT09PXl8fCJHZW5lcmF0b3JGdW5jdGlvbiI9PT0oZS5kaXNwbGF5TmFtZXx8ZS5uYW1lKSl9LHQubWFyaz1mdW5jdGlvbih0KXtyZXR1cm4gT2JqZWN0LnNldFByb3RvdHlwZU9mP09iamVjdC5zZXRQcm90b3R5cGVPZih0LG0pOih0Ll9fcHJvdG9fXz1tLHModCxjLCJHZW5lcmF0b3JGdW5jdGlvbiIpKSx0LnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKEUpLHR9LHQuYXdyYXA9ZnVuY3Rpb24odCl7cmV0dXJue19fYXdhaXQ6dH19LGooQy5wcm90b3R5cGUpLHMoQy5wcm90b3R5cGUsYSwoZnVuY3Rpb24oKXtyZXR1cm4gdGhpc30pKSx0LkFzeW5jSXRlcmF0b3I9Qyx0LmFzeW5jPWZ1bmN0aW9uKGUsbixyLG8saSl7dm9pZCAwPT09aSYmKGk9UHJvbWlzZSk7dmFyIGE9bmV3IEModShlLG4scixvKSxpKTtyZXR1cm4gdC5pc0dlbmVyYXRvckZ1bmN0aW9uKG4pP2E6YS5uZXh0KCkudGhlbigoZnVuY3Rpb24odCl7cmV0dXJuIHQuZG9uZT90LnZhbHVlOmEubmV4dCgpfSkpfSxqKEUpLHMoRSxjLCJHZW5lcmF0b3IiKSxzKEUsaSwoZnVuY3Rpb24oKXtyZXR1cm4gdGhpc30pKSxzKEUsInRvU3RyaW5nIiwoZnVuY3Rpb24oKXtyZXR1cm4iW29iamVjdCBHZW5lcmF0b3JdIn0pKSx0LmtleXM9ZnVuY3Rpb24odCl7dmFyIGU9W107Zm9yKHZhciBuIGluIHQpZS5wdXNoKG4pO3JldHVybiBlLnJldmVyc2UoKSxmdW5jdGlvbiBuKCl7Zm9yKDtlLmxlbmd0aDspe3ZhciByPWUucG9wKCk7aWYociBpbiB0KXJldHVybiBuLnZhbHVlPXIsbi5kb25lPSExLG59cmV0dXJuIG4uZG9uZT0hMCxufX0sdC52YWx1ZXM9QSxJLnByb3RvdHlwZT17Y29uc3RydWN0b3I6SSxyZXNldDpmdW5jdGlvbih0KXtpZih0aGlzLnByZXY9MCx0aGlzLm5leHQ9MCx0aGlzLnNlbnQ9dGhpcy5fc2VudD1lLHRoaXMuZG9uZT0hMSx0aGlzLmRlbGVnYXRlPW51bGwsdGhpcy5tZXRob2Q9Im5leHQiLHRoaXMuYXJnPWUsdGhpcy50cnlFbnRyaWVzLmZvckVhY2goTyksIXQpZm9yKHZhciBuIGluIHRoaXMpInQiPT09bi5jaGFyQXQoMCkmJnIuY2FsbCh0aGlzLG4pJiYhaXNOYU4oK24uc2xpY2UoMSkpJiYodGhpc1tuXT1lKX0sc3RvcDpmdW5jdGlvbigpe3RoaXMuZG9uZT0hMDt2YXIgdD10aGlzLnRyeUVudHJpZXNbMF0uY29tcGxldGlvbjtpZigidGhyb3ciPT09dC50eXBlKXRocm93IHQuYXJnO3JldHVybiB0aGlzLnJ2YWx9LGRpc3BhdGNoRXhjZXB0aW9uOmZ1bmN0aW9uKHQpe2lmKHRoaXMuZG9uZSl0aHJvdyB0O3ZhciBuPXRoaXM7ZnVuY3Rpb24gbyhyLG8pe3JldHVybiBjLnR5cGU9InRocm93IixjLmFyZz10LG4ubmV4dD1yLG8mJihuLm1ldGhvZD0ibmV4dCIsbi5hcmc9ZSksISFvfWZvcih2YXIgaT10aGlzLnRyeUVudHJpZXMubGVuZ3RoLTE7aT49MDstLWkpe3ZhciBhPXRoaXMudHJ5RW50cmllc1tpXSxjPWEuY29tcGxldGlvbjtpZigicm9vdCI9PT1hLnRyeUxvYylyZXR1cm4gbygiZW5kIik7aWYoYS50cnlMb2M8PXRoaXMucHJldil7dmFyIHM9ci5jYWxsKGEsImNhdGNoTG9jIiksdT1yLmNhbGwoYSwiZmluYWxseUxvYyIpO2lmKHMmJnUpe2lmKHRoaXMucHJldjxhLmNhdGNoTG9jKXJldHVybiBvKGEuY2F0Y2hMb2MsITApO2lmKHRoaXMucHJldjxhLmZpbmFsbHlMb2MpcmV0dXJuIG8oYS5maW5hbGx5TG9jKX1lbHNlIGlmKHMpe2lmKHRoaXMucHJldjxhLmNhdGNoTG9jKXJldHVybiBvKGEuY2F0Y2hMb2MsITApfWVsc2V7aWYoIXUpdGhyb3cgbmV3IEVycm9yKCJ0cnkgc3RhdGVtZW50IHdpdGhvdXQgY2F0Y2ggb3IgZmluYWxseSIpO2lmKHRoaXMucHJldjxhLmZpbmFsbHlMb2MpcmV0dXJuIG8oYS5maW5hbGx5TG9jKX19fX0sYWJydXB0OmZ1bmN0aW9uKHQsZSl7Zm9yKHZhciBuPXRoaXMudHJ5RW50cmllcy5sZW5ndGgtMTtuPj0wOy0tbil7dmFyIG89dGhpcy50cnlFbnRyaWVzW25dO2lmKG8udHJ5TG9jPD10aGlzLnByZXYmJnIuY2FsbChvLCJmaW5hbGx5TG9jIikmJnRoaXMucHJldjxvLmZpbmFsbHlMb2Mpe3ZhciBpPW87YnJlYWt9fWkmJigiYnJlYWsiPT09dHx8ImNvbnRpbnVlIj09PXQpJiZpLnRyeUxvYzw9ZSYmZTw9aS5maW5hbGx5TG9jJiYoaT1udWxsKTt2YXIgYT1pP2kuY29tcGxldGlvbjp7fTtyZXR1cm4gYS50eXBlPXQsYS5hcmc9ZSxpPyh0aGlzLm1ldGhvZD0ibmV4dCIsdGhpcy5uZXh0PWkuZmluYWxseUxvYyx2KTp0aGlzLmNvbXBsZXRlKGEpfSxjb21wbGV0ZTpmdW5jdGlvbih0LGUpe2lmKCJ0aHJvdyI9PT10LnR5cGUpdGhyb3cgdC5hcmc7cmV0dXJuImJyZWFrIj09PXQudHlwZXx8ImNvbnRpbnVlIj09PXQudHlwZT90aGlzLm5leHQ9dC5hcmc6InJldHVybiI9PT10LnR5cGU/KHRoaXMucnZhbD10aGlzLmFyZz10LmFyZyx0aGlzLm1ldGhvZD0icmV0dXJuIix0aGlzLm5leHQ9ImVuZCIpOiJub3JtYWwiPT09dC50eXBlJiZlJiYodGhpcy5uZXh0PWUpLHZ9LGZpbmlzaDpmdW5jdGlvbih0KXtmb3IodmFyIGU9dGhpcy50cnlFbnRyaWVzLmxlbmd0aC0xO2U+PTA7LS1lKXt2YXIgbj10aGlzLnRyeUVudHJpZXNbZV07aWYobi5maW5hbGx5TG9jPT09dClyZXR1cm4gdGhpcy5jb21wbGV0ZShuLmNvbXBsZXRpb24sbi5hZnRlckxvYyksTyhuKSx2fX0sY2F0Y2g6ZnVuY3Rpb24odCl7Zm9yKHZhciBlPXRoaXMudHJ5RW50cmllcy5sZW5ndGgtMTtlPj0wOy0tZSl7dmFyIG49dGhpcy50cnlFbnRyaWVzW2VdO2lmKG4udHJ5TG9jPT09dCl7dmFyIHI9bi5jb21wbGV0aW9uO2lmKCJ0aHJvdyI9PT1yLnR5cGUpe3ZhciBvPXIuYXJnO08obil9cmV0dXJuIG99fXRocm93IG5ldyBFcnJvcigiaWxsZWdhbCBjYXRjaCBhdHRlbXB0Iil9LGRlbGVnYXRlWWllbGQ6ZnVuY3Rpb24odCxuLHIpe3JldHVybiB0aGlzLmRlbGVnYXRlPXtpdGVyYXRvcjpBKHQpLHJlc3VsdE5hbWU6bixuZXh0TG9jOnJ9LCJuZXh0Ij09PXRoaXMubWV0aG9kJiYodGhpcy5hcmc9ZSksdn19LHR9KHQuZXhwb3J0cyk7dHJ5e3JlZ2VuZXJhdG9yUnVudGltZT1lfWNhdGNoKHQpeyJvYmplY3QiPT10eXBlb2YgZ2xvYmFsVGhpcz9nbG9iYWxUaGlzLnJlZ2VuZXJhdG9yUnVudGltZT1lOkZ1bmN0aW9uKCJyIiwicmVnZW5lcmF0b3JSdW50aW1lID0gciIpKGUpfX19LGU9e307ZnVuY3Rpb24gbihyKXt2YXIgbz1lW3JdO2lmKHZvaWQgMCE9PW8pcmV0dXJuIG8uZXhwb3J0czt2YXIgaT1lW3JdPXtpZDpyLGV4cG9ydHM6e319O3JldHVybiB0W3JdLmNhbGwoaS5leHBvcnRzLGksaS5leHBvcnRzLG4pLGkuZXhwb3J0c31uLm49ZnVuY3Rpb24odCl7dmFyIGU9dCYmdC5fX2VzTW9kdWxlP2Z1bmN0aW9uKCl7cmV0dXJuIHQuZGVmYXVsdH06ZnVuY3Rpb24oKXtyZXR1cm4gdH07cmV0dXJuIG4uZChlLHthOmV9KSxlfSxuLmQ9ZnVuY3Rpb24odCxlKXtmb3IodmFyIHIgaW4gZSluLm8oZSxyKSYmIW4ubyh0LHIpJiZPYmplY3QuZGVmaW5lUHJvcGVydHkodCxyLHtlbnVtZXJhYmxlOiEwLGdldDplW3JdfSl9LG4uZz1mdW5jdGlvbigpe2lmKCJvYmplY3QiPT10eXBlb2YgZ2xvYmFsVGhpcylyZXR1cm4gZ2xvYmFsVGhpczt0cnl7cmV0dXJuIHRoaXN8fG5ldyBGdW5jdGlvbigicmV0dXJuIHRoaXMiKSgpfWNhdGNoKHQpe2lmKCJvYmplY3QiPT10eXBlb2Ygd2luZG93KXJldHVybiB3aW5kb3d9fSgpLG4ubz1mdW5jdGlvbih0LGUpe3JldHVybiBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwodCxlKX0sbi5yPWZ1bmN0aW9uKHQpeyJ1bmRlZmluZWQiIT10eXBlb2YgU3ltYm9sJiZTeW1ib2wudG9TdHJpbmdUYWcmJk9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LFN5bWJvbC50b1N0cmluZ1RhZyx7dmFsdWU6Ik1vZHVsZSJ9KSxPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSl9LGZ1bmN0aW9uKCl7InVzZSBzdHJpY3QiO3ZhciB0PXt9O24ucih0KSxuLmQodCx7ZGlzYWJsZTpmdW5jdGlvbigpe3JldHVybiBDdH0sZW5hYmxlOmZ1bmN0aW9uKCl7cmV0dXJuIGp0fX0pO3ZhciBlPW4oNjQxNTcpLHI9bi5uKGUpLG89KG4oNjA0OTEpLG4oNDY2NzkpLCJVUkxTZWFyY2hQYXJhbXMiaW4gc2VsZiksaT0iU3ltYm9sImluIHNlbGYmJiJpdGVyYXRvciJpbiBTeW1ib2wsYT0iRmlsZVJlYWRlciJpbiBzZWxmJiYiQmxvYiJpbiBzZWxmJiZmdW5jdGlvbigpe3RyeXtyZXR1cm4gbmV3IEJsb2IsITB9Y2F0Y2godCl7cmV0dXJuITF9fSgpLGM9IkZvcm1EYXRhImluIHNlbGYscz0iQXJyYXlCdWZmZXIiaW4gc2VsZjtpZihzKXZhciB1PVsiW29iamVjdCBJbnQ4QXJyYXldIiwiW29iamVjdCBVaW50OEFycmF5XSIsIltvYmplY3QgVWludDhDbGFtcGVkQXJyYXldIiwiW29iamVjdCBJbnQxNkFycmF5XSIsIltvYmplY3QgVWludDE2QXJyYXldIiwiW29iamVjdCBJbnQzMkFycmF5XSIsIltvYmplY3QgVWludDMyQXJyYXldIiwiW29iamVjdCBGbG9hdDMyQXJyYXldIiwiW29iamVjdCBGbG9hdDY0QXJyYXldIl0sbD1BcnJheUJ1ZmZlci5pc1ZpZXd8fGZ1bmN0aW9uKHQpe3JldHVybiB0JiZ1LmluZGV4T2YoT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKHQpKT4tMX07ZnVuY3Rpb24gZih0KXtpZigic3RyaW5nIiE9dHlwZW9mIHQmJih0PVN0cmluZyh0KSksL1teYS16MC05XC0jJCUmJyorLl5fYHx+XS9pLnRlc3QodCkpdGhyb3cgbmV3IFR5cGVFcnJvcigiSW52YWxpZCBjaGFyYWN0ZXIgaW4gaGVhZGVyIGZpZWxkIG5hbWUiKTtyZXR1cm4gdC50b0xvd2VyQ2FzZSgpfWZ1bmN0aW9uIGQodCl7cmV0dXJuInN0cmluZyIhPXR5cGVvZiB0JiYodD1TdHJpbmcodCkpLHR9ZnVuY3Rpb24gcCh0KXt2YXIgZT17bmV4dDpmdW5jdGlvbigpe3ZhciBlPXQuc2hpZnQoKTtyZXR1cm57ZG9uZTp2b2lkIDA9PT1lLHZhbHVlOmV9fX07cmV0dXJuIGkmJihlW1N5bWJvbC5pdGVyYXRvcl09ZnVuY3Rpb24oKXtyZXR1cm4gZX0pLGV9ZnVuY3Rpb24gaCh0KXt0aGlzLm1hcD17fSx0IGluc3RhbmNlb2YgaD90LmZvckVhY2goKGZ1bmN0aW9uKHQsZSl7dGhpcy5hcHBlbmQoZSx0KX0pLHRoaXMpOkFycmF5LmlzQXJyYXkodCk/dC5mb3JFYWNoKChmdW5jdGlvbih0KXt0aGlzLmFwcGVuZCh0WzBdLHRbMV0pfSksdGhpcyk6dCYmT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXModCkuZm9yRWFjaCgoZnVuY3Rpb24oZSl7dGhpcy5hcHBlbmQoZSx0W2VdKX0pLHRoaXMpfWZ1bmN0aW9uIHYodCl7aWYodC5ib2R5VXNlZClyZXR1cm4gUHJvbWlzZS5yZWplY3QobmV3IFR5cGVFcnJvcigiQWxyZWFkeSByZWFkIikpO3QuYm9keVVzZWQ9ITB9ZnVuY3Rpb24gZyh0KXtyZXR1cm4gbmV3IFByb21pc2UoKGZ1bmN0aW9uKGUsbil7dC5vbmxvYWQ9ZnVuY3Rpb24oKXtlKHQucmVzdWx0KX0sdC5vbmVycm9yPWZ1bmN0aW9uKCl7bih0LmVycm9yKX19KSl9ZnVuY3Rpb24geSh0KXt2YXIgZT1uZXcgRmlsZVJlYWRlcixuPWcoZSk7cmV0dXJuIGUucmVhZEFzQXJyYXlCdWZmZXIodCksbn1mdW5jdGlvbiBtKHQpe2lmKHQuc2xpY2UpcmV0dXJuIHQuc2xpY2UoMCk7dmFyIGU9bmV3IFVpbnQ4QXJyYXkodC5ieXRlTGVuZ3RoKTtyZXR1cm4gZS5zZXQobmV3IFVpbnQ4QXJyYXkodCkpLGUuYnVmZmVyfWZ1bmN0aW9uIGIoKXtyZXR1cm4gdGhpcy5ib2R5VXNlZD0hMSx0aGlzLl9pbml0Qm9keT1mdW5jdGlvbih0KXt2YXIgZTt0aGlzLl9ib2R5SW5pdD10LHQ/InN0cmluZyI9PXR5cGVvZiB0P3RoaXMuX2JvZHlUZXh0PXQ6YSYmQmxvYi5wcm90b3R5cGUuaXNQcm90b3R5cGVPZih0KT90aGlzLl9ib2R5QmxvYj10OmMmJkZvcm1EYXRhLnByb3RvdHlwZS5pc1Byb3RvdHlwZU9mKHQpP3RoaXMuX2JvZHlGb3JtRGF0YT10Om8mJlVSTFNlYXJjaFBhcmFtcy5wcm90b3R5cGUuaXNQcm90b3R5cGVPZih0KT90aGlzLl9ib2R5VGV4dD10LnRvU3RyaW5nKCk6cyYmYSYmKChlPXQpJiZEYXRhVmlldy5wcm90b3R5cGUuaXNQcm90b3R5cGVPZihlKSk/KHRoaXMuX2JvZHlBcnJheUJ1ZmZlcj1tKHQuYnVmZmVyKSx0aGlzLl9ib2R5SW5pdD1uZXcgQmxvYihbdGhpcy5fYm9keUFycmF5QnVmZmVyXSkpOnMmJihBcnJheUJ1ZmZlci5wcm90b3R5cGUuaXNQcm90b3R5cGVPZih0KXx8bCh0KSk/dGhpcy5fYm9keUFycmF5QnVmZmVyPW0odCk6dGhpcy5fYm9keVRleHQ9dD1PYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwodCk6dGhpcy5fYm9keVRleHQ9IiIsdGhpcy5oZWFkZXJzLmdldCgiY29udGVudC10eXBlIil8fCgic3RyaW5nIj09dHlwZW9mIHQ/dGhpcy5oZWFkZXJzLnNldCgiY29udGVudC10eXBlIiwidGV4dC9wbGFpbjtjaGFyc2V0PVVURi04Iik6dGhpcy5fYm9keUJsb2ImJnRoaXMuX2JvZHlCbG9iLnR5cGU/dGhpcy5oZWFkZXJzLnNldCgiY29udGVudC10eXBlIix0aGlzLl9ib2R5QmxvYi50eXBlKTpvJiZVUkxTZWFyY2hQYXJhbXMucHJvdG90eXBlLmlzUHJvdG90eXBlT2YodCkmJnRoaXMuaGVhZGVycy5zZXQoImNvbnRlbnQtdHlwZSIsImFwcGxpY2F0aW9uL3gtd3d3LWZvcm0tdXJsZW5jb2RlZDtjaGFyc2V0PVVURi04IikpfSxhJiYodGhpcy5ibG9iPWZ1bmN0aW9uKCl7dmFyIHQ9dih0aGlzKTtpZih0KXJldHVybiB0O2lmKHRoaXMuX2JvZHlCbG9iKXJldHVybiBQcm9taXNlLnJlc29sdmUodGhpcy5fYm9keUJsb2IpO2lmKHRoaXMuX2JvZHlBcnJheUJ1ZmZlcilyZXR1cm4gUHJvbWlzZS5yZXNvbHZlKG5ldyBCbG9iKFt0aGlzLl9ib2R5QXJyYXlCdWZmZXJdKSk7aWYodGhpcy5fYm9keUZvcm1EYXRhKXRocm93IG5ldyBFcnJvcigiY291bGQgbm90IHJlYWQgRm9ybURhdGEgYm9keSBhcyBibG9iIik7cmV0dXJuIFByb21pc2UucmVzb2x2ZShuZXcgQmxvYihbdGhpcy5fYm9keVRleHRdKSl9LHRoaXMuYXJyYXlCdWZmZXI9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fYm9keUFycmF5QnVmZmVyP3YodGhpcyl8fFByb21pc2UucmVzb2x2ZSh0aGlzLl9ib2R5QXJyYXlCdWZmZXIpOnRoaXMuYmxvYigpLnRoZW4oeSl9KSx0aGlzLnRleHQ9ZnVuY3Rpb24oKXt2YXIgdCxlLG4scj12KHRoaXMpO2lmKHIpcmV0dXJuIHI7aWYodGhpcy5fYm9keUJsb2IpcmV0dXJuIHQ9dGhpcy5fYm9keUJsb2IsZT1uZXcgRmlsZVJlYWRlcixuPWcoZSksZS5yZWFkQXNUZXh0KHQpLG47aWYodGhpcy5fYm9keUFycmF5QnVmZmVyKXJldHVybiBQcm9taXNlLnJlc29sdmUoZnVuY3Rpb24odCl7Zm9yKHZhciBlPW5ldyBVaW50OEFycmF5KHQpLG49bmV3IEFycmF5KGUubGVuZ3RoKSxyPTA7cjxlLmxlbmd0aDtyKyspbltyXT1TdHJpbmcuZnJvbUNoYXJDb2RlKGVbcl0pO3JldHVybiBuLmpvaW4oIiIpfSh0aGlzLl9ib2R5QXJyYXlCdWZmZXIpKTtpZih0aGlzLl9ib2R5Rm9ybURhdGEpdGhyb3cgbmV3IEVycm9yKCJjb3VsZCBub3QgcmVhZCBGb3JtRGF0YSBib2R5IGFzIHRleHQiKTtyZXR1cm4gUHJvbWlzZS5yZXNvbHZlKHRoaXMuX2JvZHlUZXh0KX0sYyYmKHRoaXMuZm9ybURhdGE9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy50ZXh0KCkudGhlbihFKX0pLHRoaXMuanNvbj1mdW5jdGlvbigpe3JldHVybiB0aGlzLnRleHQoKS50aGVuKEpTT04ucGFyc2UpfSx0aGlzfWgucHJvdG90eXBlLmFwcGVuZD1mdW5jdGlvbih0LGUpe3Q9Zih0KSxlPWQoZSk7dmFyIG49dGhpcy5tYXBbdF07dGhpcy5tYXBbdF09bj9uKyIsICIrZTplfSxoLnByb3RvdHlwZS5kZWxldGU9ZnVuY3Rpb24odCl7ZGVsZXRlIHRoaXMubWFwW2YodCldfSxoLnByb3RvdHlwZS5nZXQ9ZnVuY3Rpb24odCl7cmV0dXJuIHQ9Zih0KSx0aGlzLmhhcyh0KT90aGlzLm1hcFt0XTpudWxsfSxoLnByb3RvdHlwZS5oYXM9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMubWFwLmhhc093blByb3BlcnR5KGYodCkpfSxoLnByb3RvdHlwZS5zZXQ9ZnVuY3Rpb24odCxlKXt0aGlzLm1hcFtmKHQpXT1kKGUpfSxoLnByb3RvdHlwZS5mb3JFYWNoPWZ1bmN0aW9uKHQsZSl7Zm9yKHZhciBuIGluIHRoaXMubWFwKXRoaXMubWFwLmhhc093blByb3BlcnR5KG4pJiZ0LmNhbGwoZSx0aGlzLm1hcFtuXSxuLHRoaXMpfSxoLnByb3RvdHlwZS5rZXlzPWZ1bmN0aW9uKCl7dmFyIHQ9W107cmV0dXJuIHRoaXMuZm9yRWFjaCgoZnVuY3Rpb24oZSxuKXt0LnB1c2gobil9KSkscCh0KX0saC5wcm90b3R5cGUudmFsdWVzPWZ1bmN0aW9uKCl7dmFyIHQ9W107cmV0dXJuIHRoaXMuZm9yRWFjaCgoZnVuY3Rpb24oZSl7dC5wdXNoKGUpfSkpLHAodCl9LGgucHJvdG90eXBlLmVudHJpZXM9ZnVuY3Rpb24oKXt2YXIgdD1bXTtyZXR1cm4gdGhpcy5mb3JFYWNoKChmdW5jdGlvbihlLG4pe3QucHVzaChbbixlXSl9KSkscCh0KX0saSYmKGgucHJvdG90eXBlW1N5bWJvbC5pdGVyYXRvcl09aC5wcm90b3R5cGUuZW50cmllcyk7dmFyIHg9WyJERUxFVEUiLCJHRVQiLCJIRUFEIiwiT1BUSU9OUyIsIlBPU1QiLCJQVVQiXTtmdW5jdGlvbiB3KHQsZSl7dmFyIG4scixvPShlPWV8fHt9KS5ib2R5O2lmKHQgaW5zdGFuY2VvZiB3KXtpZih0LmJvZHlVc2VkKXRocm93IG5ldyBUeXBlRXJyb3IoIkFscmVhZHkgcmVhZCIpO3RoaXMudXJsPXQudXJsLHRoaXMuY3JlZGVudGlhbHM9dC5jcmVkZW50aWFscyxlLmhlYWRlcnN8fCh0aGlzLmhlYWRlcnM9bmV3IGgodC5oZWFkZXJzKSksdGhpcy5tZXRob2Q9dC5tZXRob2QsdGhpcy5tb2RlPXQubW9kZSx0aGlzLnNpZ25hbD10LnNpZ25hbCxvfHxudWxsPT10Ll9ib2R5SW5pdHx8KG89dC5fYm9keUluaXQsdC5ib2R5VXNlZD0hMCl9ZWxzZSB0aGlzLnVybD1TdHJpbmcodCk7aWYodGhpcy5jcmVkZW50aWFscz1lLmNyZWRlbnRpYWxzfHx0aGlzLmNyZWRlbnRpYWxzfHwic2FtZS1vcmlnaW4iLCFlLmhlYWRlcnMmJnRoaXMuaGVhZGVyc3x8KHRoaXMuaGVhZGVycz1uZXcgaChlLmhlYWRlcnMpKSx0aGlzLm1ldGhvZD0obj1lLm1ldGhvZHx8dGhpcy5tZXRob2R8fCJHRVQiLHI9bi50b1VwcGVyQ2FzZSgpLHguaW5kZXhPZihyKT4tMT9yOm4pLHRoaXMubW9kZT1lLm1vZGV8fHRoaXMubW9kZXx8bnVsbCx0aGlzLnNpZ25hbD1lLnNpZ25hbHx8dGhpcy5zaWduYWwsdGhpcy5yZWZlcnJlcj1udWxsLCgiR0VUIj09PXRoaXMubWV0aG9kfHwiSEVBRCI9PT10aGlzLm1ldGhvZCkmJm8pdGhyb3cgbmV3IFR5cGVFcnJvcigiQm9keSBub3QgYWxsb3dlZCBmb3IgR0VUIG9yIEhFQUQgcmVxdWVzdHMiKTt0aGlzLl9pbml0Qm9keShvKX1mdW5jdGlvbiBFKHQpe3ZhciBlPW5ldyBGb3JtRGF0YTtyZXR1cm4gdC50cmltKCkuc3BsaXQoIiYiKS5mb3JFYWNoKChmdW5jdGlvbih0KXtpZih0KXt2YXIgbj10LnNwbGl0KCI9Iikscj1uLnNoaWZ0KCkucmVwbGFjZSgvXCsvZywiICIpLG89bi5qb2luKCI9IikucmVwbGFjZSgvXCsvZywiICIpO2UuYXBwZW5kKGRlY29kZVVSSUNvbXBvbmVudChyKSxkZWNvZGVVUklDb21wb25lbnQobykpfX0pKSxlfWZ1bmN0aW9uIGoodCl7dmFyIGU9bmV3IGg7cmV0dXJuIHQucmVwbGFjZSgvXHI/XG5bXHQgXSsvZywiICIpLnNwbGl0KC9ccj9cbi8pLmZvckVhY2goKGZ1bmN0aW9uKHQpe3ZhciBuPXQuc3BsaXQoIjoiKSxyPW4uc2hpZnQoKS50cmltKCk7aWYocil7dmFyIG89bi5qb2luKCI6IikudHJpbSgpO2UuYXBwZW5kKHIsbyl9fSkpLGV9ZnVuY3Rpb24gQyh0LGUpe2V8fChlPXt9KSx0aGlzLnR5cGU9ImRlZmF1bHQiLHRoaXMuc3RhdHVzPXZvaWQgMD09PWUuc3RhdHVzPzIwMDplLnN0YXR1cyx0aGlzLm9rPXRoaXMuc3RhdHVzPj0yMDAmJnRoaXMuc3RhdHVzPDMwMCx0aGlzLnN0YXR1c1RleHQ9InN0YXR1c1RleHQiaW4gZT9lLnN0YXR1c1RleHQ6Ik9LIix0aGlzLmhlYWRlcnM9bmV3IGgoZS5oZWFkZXJzKSx0aGlzLnVybD1lLnVybHx8IiIsdGhpcy5faW5pdEJvZHkodCl9dy5wcm90b3R5cGUuY2xvbmU9ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IHcodGhpcyx7Ym9keTp0aGlzLl9ib2R5SW5pdH0pfSxiLmNhbGwody5wcm90b3R5cGUpLGIuY2FsbChDLnByb3RvdHlwZSksQy5wcm90b3R5cGUuY2xvbmU9ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IEModGhpcy5fYm9keUluaXQse3N0YXR1czp0aGlzLnN0YXR1cyxzdGF0dXNUZXh0OnRoaXMuc3RhdHVzVGV4dCxoZWFkZXJzOm5ldyBoKHRoaXMuaGVhZGVycyksdXJsOnRoaXMudXJsfSl9LEMuZXJyb3I9ZnVuY3Rpb24oKXt2YXIgdD1uZXcgQyhudWxsLHtzdGF0dXM6MCxzdGF0dXNUZXh0OiIifSk7cmV0dXJuIHQudHlwZT0iZXJyb3IiLHR9O3ZhciBrPVszMDEsMzAyLDMwMywzMDcsMzA4XTtDLnJlZGlyZWN0PWZ1bmN0aW9uKHQsZSl7aWYoLTE9PT1rLmluZGV4T2YoZSkpdGhyb3cgbmV3IFJhbmdlRXJyb3IoIkludmFsaWQgc3RhdHVzIGNvZGUiKTtyZXR1cm4gbmV3IEMobnVsbCx7c3RhdHVzOmUsaGVhZGVyczp7bG9jYXRpb246dH19KX07dmFyIFM9c2VsZi5ET01FeGNlcHRpb247dHJ5e25ldyBTfWNhdGNoKHQpeyhTPWZ1bmN0aW9uKHQsZSl7dGhpcy5tZXNzYWdlPXQsdGhpcy5uYW1lPWU7dmFyIG49RXJyb3IodCk7dGhpcy5zdGFjaz1uLnN0YWNrfSkucHJvdG90eXBlPU9iamVjdC5jcmVhdGUoRXJyb3IucHJvdG90eXBlKSxTLnByb3RvdHlwZS5jb25zdHJ1Y3Rvcj1TfWZ1bmN0aW9uIE8odCxlKXtyZXR1cm4gbmV3IFByb21pc2UoKGZ1bmN0aW9uKG4scil7dmFyIG89bmV3IHcodCxlKTtpZihvLnNpZ25hbCYmby5zaWduYWwuYWJvcnRlZClyZXR1cm4gcihuZXcgUygiQWJvcnRlZCIsIkFib3J0RXJyb3IiKSk7dmFyIGk9bmV3IFhNTEh0dHBSZXF1ZXN0O2Z1bmN0aW9uIGMoKXtpLmFib3J0KCl9aS5vbmxvYWQ9ZnVuY3Rpb24oKXt2YXIgdD17c3RhdHVzOmkuc3RhdHVzLHN0YXR1c1RleHQ6aS5zdGF0dXNUZXh0LGhlYWRlcnM6aihpLmdldEFsbFJlc3BvbnNlSGVhZGVycygpfHwiIil9O3QudXJsPSJyZXNwb25zZVVSTCJpbiBpP2kucmVzcG9uc2VVUkw6dC5oZWFkZXJzLmdldCgiWC1SZXF1ZXN0LVVSTCIpO3ZhciBlPSJyZXNwb25zZSJpbiBpP2kucmVzcG9uc2U6aS5yZXNwb25zZVRleHQ7bihuZXcgQyhlLHQpKX0saS5vbmVycm9yPWZ1bmN0aW9uKCl7cihuZXcgVHlwZUVycm9yKCJOZXR3b3JrIHJlcXVlc3QgZmFpbGVkIikpfSxpLm9udGltZW91dD1mdW5jdGlvbigpe3IobmV3IFR5cGVFcnJvcigiTmV0d29yayByZXF1ZXN0IGZhaWxlZCIpKX0saS5vbmFib3J0PWZ1bmN0aW9uKCl7cihuZXcgUygiQWJvcnRlZCIsIkFib3J0RXJyb3IiKSl9LGkub3BlbihvLm1ldGhvZCxvLnVybCwhMCksImluY2x1ZGUiPT09by5jcmVkZW50aWFscz9pLndpdGhDcmVkZW50aWFscz0hMDoib21pdCI9PT1vLmNyZWRlbnRpYWxzJiYoaS53aXRoQ3JlZGVudGlhbHM9ITEpLCJyZXNwb25zZVR5cGUiaW4gaSYmYSYmKGkucmVzcG9uc2VUeXBlPSJibG9iIiksby5oZWFkZXJzLmZvckVhY2goKGZ1bmN0aW9uKHQsZSl7aS5zZXRSZXF1ZXN0SGVhZGVyKGUsdCl9KSksby5zaWduYWwmJihvLnNpZ25hbC5hZGRFdmVudExpc3RlbmVyKCJhYm9ydCIsYyksaS5vbnJlYWR5c3RhdGVjaGFuZ2U9ZnVuY3Rpb24oKXs0PT09aS5yZWFkeVN0YXRlJiZvLnNpZ25hbC5yZW1vdmVFdmVudExpc3RlbmVyKCJhYm9ydCIsYyl9KSxpLnNlbmQodm9pZCAwPT09by5fYm9keUluaXQ/bnVsbDpvLl9ib2R5SW5pdCl9KSl9ZnVuY3Rpb24gSSh0LGUpe2Zvcih2YXIgbj1bXSxyPVtdLG89YXJndW1lbnRzLmxlbmd0aDtvLS0gPjI7KW4ucHVzaChhcmd1bWVudHNbb10pO2Zvcig7bi5sZW5ndGg7KXt2YXIgaT1uLnBvcCgpO2lmKGkmJmkucG9wKWZvcihvPWkubGVuZ3RoO28tLTspbi5wdXNoKGlbb10pO2Vsc2UgbnVsbCE9aSYmITAhPT1pJiYhMSE9PWkmJnIucHVzaChpKX1yZXR1cm4iZnVuY3Rpb24iPT10eXBlb2YgdD90KGV8fHt9LHIpOntub2RlTmFtZTp0LGF0dHJpYnV0ZXM6ZXx8e30sY2hpbGRyZW46cixrZXk6ZSYmZS5rZXl9fU8ucG9seWZpbGw9ITAsc2VsZi5mZXRjaHx8KHNlbGYuZmV0Y2g9TyxzZWxmLkhlYWRlcnM9aCxzZWxmLlJlcXVlc3Q9dyxzZWxmLlJlc3BvbnNlPUMpO3ZhciBBPW4oNjYwODEpLFQ9bi5uKEEpLE09big5MjgxNiksXz1uLm4oTSksTD1uKDQ0Njc0KSxSPW4ubihMKSxQPW4oNDQ2MjEpLE49bi5uKFApLEQ9QXJyYXkuaXNBcnJheTtmdW5jdGlvbiBGKHQpe3ZhciBlLG4scj10eXBlb2YgdCxvPSIiO2lmKCJzdHJpbmciPT09cnx8Im51bWJlciI9PT1yKXJldHVybiB0fHwiIjtpZihEKHQpJiZ0Lmxlbmd0aD4wKWZvcihlPTAsbj10Lmxlbmd0aDtlPG47ZSsrKSIiIT09KHI9Rih0W2VdKSkmJihvKz0obyYmIiAiKStyKTtlbHNlIGZvcihlIGluIHQpdC5oYXNPd25Qcm9wZXJ0eShlKSYmdFtlXSYmKG8rPShvJiYiICIpK2UpO3JldHVybiBvfXZhciBVPSJ4LXVsLWVudmlyb25tZW50LWlkIixCPSJ4LXVsLWFub255bW91cy1pZCIsej0ieC11bC11c2VyLWlkIixWPSJ4LXVsLXZpc2l0b3ItaWQiLEg9IngtdWwtaW5zdGFsbGF0aW9uLW1ldGhvZCIscT0id2ViLWd0bSIsVz0id2ViLXNlZ21lbnQiLEc9IndlYi1zbmlwcGV0IixaPSJ1bC1jdXN0b20tc3R5bGUiLCQ9InVsLWNhcmRfX2NvbnRhaW5lciIsWT0idWwtY2FyZC0tdmlkZW8iLEs9ImNsb3NlLWNvbnRhaW5lciIsSj0iY2xvc2UtYnRuIixYPSJsaWtlcnQtbnVtYmVyIixRPSJucHMtbnVtYmVyIix0dD0iY2hvaWNlIixldD0ic2VsZWN0LWxhYmVsIixudD0ic2VsZWN0LWNoZWNrYm94IixydD0ic2VsZWN0LXJhZGlvIixvdD0idWwtY2FyZF9fY2hvaWNlcyIsaXQ9InVsLWNhcmQtdGV4dF9faW5wdXQiLGF0PSItLWRlc2t0b3AiLGN0PSItLW1vYmlsZSIsc3Q9InVsLXF1ZXN0aW9uIix1dD0idWwtY2FwdGlvbiIsbHQ9ImZhZGUtaW4tdHJhbnNpdGlvbiIsZnQ9ZnVuY3Rpb24odCxlKXtyZXR1cm5bdCsoZT9jdDphdCksdF19O2Z1bmN0aW9uIGR0KHQsZSl7dmFyIG49InVuZGVmaW5lZCIhPXR5cGVvZiBTeW1ib2wmJnRbU3ltYm9sLml0ZXJhdG9yXXx8dFsiQEBpdGVyYXRvciJdO2lmKCFuKXtpZihBcnJheS5pc0FycmF5KHQpfHwobj1mdW5jdGlvbih0LGUpe2lmKCF0KXJldHVybjtpZigic3RyaW5nIj09dHlwZW9mIHQpcmV0dXJuIHB0KHQsZSk7dmFyIG49T2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKHQpLnNsaWNlKDgsLTEpOyJPYmplY3QiPT09biYmdC5jb25zdHJ1Y3RvciYmKG49dC5jb25zdHJ1Y3Rvci5uYW1lKTtpZigiTWFwIj09PW58fCJTZXQiPT09bilyZXR1cm4gQXJyYXkuZnJvbSh0KTtpZigiQXJndW1lbnRzIj09PW58fC9eKD86VWl8SSludCg/Ojh8MTZ8MzIpKD86Q2xhbXBlZCk/QXJyYXkkLy50ZXN0KG4pKXJldHVybiBwdCh0LGUpfSh0KSl8fGUmJnQmJiJudW1iZXIiPT10eXBlb2YgdC5sZW5ndGgpe24mJih0PW4pO3ZhciByPTAsbz1mdW5jdGlvbigpe307cmV0dXJue3M6byxuOmZ1bmN0aW9uKCl7cmV0dXJuIHI+PXQubGVuZ3RoP3tkb25lOiEwfTp7ZG9uZTohMSx2YWx1ZTp0W3IrK119fSxlOmZ1bmN0aW9uKHQpe3Rocm93IHR9LGY6b319dGhyb3cgbmV3IFR5cGVFcnJvcigiSW52YWxpZCBhdHRlbXB0IHRvIGl0ZXJhdGUgbm9uLWl0ZXJhYmxlIGluc3RhbmNlLlxuSW4gb3JkZXIgdG8gYmUgaXRlcmFibGUsIG5vbi1hcnJheSBvYmplY3RzIG11c3QgaGF2ZSBhIFtTeW1ib2wuaXRlcmF0b3JdKCkgbWV0aG9kLiIpfXZhciBpLGE9ITAsYz0hMTtyZXR1cm57czpmdW5jdGlvbigpe249bi5jYWxsKHQpfSxuOmZ1bmN0aW9uKCl7dmFyIHQ9bi5uZXh0KCk7cmV0dXJuIGE9dC5kb25lLHR9LGU6ZnVuY3Rpb24odCl7Yz0hMCxpPXR9LGY6ZnVuY3Rpb24oKXt0cnl7YXx8bnVsbD09bi5yZXR1cm58fG4ucmV0dXJuKCl9ZmluYWxseXtpZihjKXRocm93IGl9fX19ZnVuY3Rpb24gcHQodCxlKXsobnVsbD09ZXx8ZT50Lmxlbmd0aCkmJihlPXQubGVuZ3RoKTtmb3IodmFyIG49MCxyPW5ldyBBcnJheShlKTtuPGU7bisrKXJbbl09dFtuXTtyZXR1cm4gcn12YXIgaHQ9InVsLWFwcCIsdnQ9ZnVuY3Rpb24odCxlKXt2YXIgbj10LmFwcDtuLnJ1bm5pbmd8fGUuZGVzdHJveShodCk7dmFyIG8saT1uLmRlY2suY2FyZHNbbi5kZWNrLmluZGV4XSxhPWkuQ2FyZCxjPWkucHJvcHMscz1pLnR5cGUsdT1pLm5hbWUsbD1uLmJvcmRlcixmPWZ1bmN0aW9uKCl7dmFyIHQ9TigpKFIoKS5tYXJrKChmdW5jdGlvbiB0KCl7cmV0dXJuIFIoKS53cmFwKChmdW5jdGlvbih0KXtmb3IoOzspc3dpdGNoKHQucHJldj10Lm5leHQpe2Nhc2UgMDpyZXR1cm4gdC5uZXh0PTIsZS5jbG9zZShodCk7Y2FzZSAyOmNhc2UiZW5kIjpyZXR1cm4gdC5zdG9wKCl9fSksdCl9KSkpO3JldHVybiBmdW5jdGlvbigpe3JldHVybiB0LmFwcGx5KHRoaXMsYXJndW1lbnRzKX19KCksZD1uLmRlY2suY2FyZHMscD1uLmRlY2suaW5kZXgsaD1uLmZvbnRGYW1pbHk/e2ZvbnRGYW1pbHk6bi5mb250RmFtaWx5LnJlcGxhY2UoIjsiLCIiKX06e30sdj1uLmVuZENhcmQsZz1mdW5jdGlvbigpe3ZhciB0PU4oKShSKCkubWFyaygoZnVuY3Rpb24gdChuKXtyZXR1cm4gUigpLndyYXAoKGZ1bmN0aW9uKHQpe2Zvcig7Oylzd2l0Y2godC5wcmV2PXQubmV4dCl7Y2FzZSAwOmUuYXBwLm5leHQoe2RhdGE6bixjb21wbGV0ZVN1cnZleTpmdW5jdGlvbigpe2UuZGVzdHJveShodCl9LGVuZENhcmQ6dn0pO2Nhc2UgMTpjYXNlImVuZCI6cmV0dXJuIHQuc3RvcCgpfX0pLHQpfSkpKTtyZXR1cm4gZnVuY3Rpb24oZSl7cmV0dXJuIHQuYXBwbHkodGhpcyxhcmd1bWVudHMpfX0oKSx5PWR0KG4uYW5zd2Vyc3x8W10pO3RyeXt2YXIgbT1mdW5jdGlvbigpe3ZhciB0PW8udmFsdWU7aWYodC5xdWVzdGlvbklkPT09dSl7dmFyIGU7aWYoIm11bHRpcGxlY2hvaWNlIj09PXMpe3ZhciBuPWMub3B0aW9ucy5maW5kKChmdW5jdGlvbihlKXtyZXR1cm4gZS52YWx1ZT09PXQudmFsdWV9KSk7aWYoIW4pcmV0dXJuImJyZWFrIjtlPXIoKSh7fSxuLmlkLG4udmFsdWUpfWVsc2UgZT10LnZhbHVlO3JldHVybiBnKHt2YWx1ZTplfSksImJyZWFrIn19O2Zvcih5LnMoKTshKG89eS5uKCkpLmRvbmU7KXtpZigiYnJlYWsiPT09bSgpKWJyZWFrfX1jYXRjaCh0KXt5LmUodCl9ZmluYWxseXt5LmYoKX1yZXR1cm4gSSgiZGl2Iix7Y2xhc3NOYW1lOiJ1bC1hcHAiLGlkOmh0LG9uY3JlYXRlOmZ1bmN0aW9uKHQpe3JldHVybiBmdW5jdGlvbih0KXt2YXIgcj1bInRyYW5zaXRpb25lbmQiLCJ3ZWJraXRUcmFuc2l0aW9uRW5kIiwibW96VHJhbnNpdGlvbkVuZCJdLG89ITEsaT1mdW5jdGlvbiBuKCl7aWYoIW8mJndpbmRvdy5mcmFtZUVsZW1lbnQpe3ZhciBpPW5ldyBFdmVudCgidWw6ZnJhbWU6cmVuZGVyZWQiKTt3aW5kb3cuZnJhbWVFbGVtZW50LmRpc3BhdGNoRXZlbnQoaSl9bz0hMCxyLmZvckVhY2goKGZ1bmN0aW9uKGUpe3QucmVtb3ZlRXZlbnRMaXN0ZW5lcihlLG4pfSkpLHNldFRpbWVvdXQoKGZ1bmN0aW9uKCl7cmV0dXJuIGUudXBkYXRlKGh0KX0pLDMwMCl9O3IuZm9yRWFjaCgoZnVuY3Rpb24oZSl7dC5hZGRFdmVudExpc3RlbmVyKGUsaSl9KSksbi5jb25maWd1cmVFeGl0T25PdmVybGF5Q2xpY2soKGZ1bmN0aW9uKCl7ZS5jbG9zZShodCl9KSksZS51cGRhdGUoaHQpfSh0KX0sb251cGRhdGU6ZnVuY3Rpb24oKXtyZXR1cm4gZS51cGRhdGUoaHQpfSxzdHlsZTpofSxJKCJkaXYiLHtjbGFzc05hbWU6InVsLWFwcF9fY29udGFpbmVyIn0sSSgiZGl2Iix7Y2xhc3NOYW1lOkYoXygpKGZ0KCQsbi51c2VNb2JpbGVTdHlsaW5nKSkpLHN0eWxlOntib3JkZXJDb2xvcjpsfX0sSShhLFQoKSh7fSxjLHtib3JkZXI6bCxjbGFzc05hbWU6InVsLWNhcmQiLG5leHQ6ZyxlbmRDYXJkOnYsbG9jYWxlOm4ubG9jYWxlLHF1ZXN0aW9uSWQ6dSx1cGRhdGVIZWlnaHQ6ZnVuY3Rpb24oKXtyZXR1cm4gZS51cGRhdGUoaHQpfX0pKSksImVtYWlsIiE9PW4uaGVhZGVyc1sidXNlcmxlYXAtcGxhdGZvcm0iXSYmImxpbmsiIT09bi5oZWFkZXJzWyJ1c2VybGVhcC1wbGF0Zm9ybSJdJiYoIXZ8fHArMSE9PWQubGVuZ3RoKSYmSSgiZGl2Iix7Y2xhc3NOYW1lOkYoZnQoSyxuLnVzZU1vYmlsZVN0eWxpbmcpKX0sSSgiZGl2Iix7Y2xhc3NOYW1lOkosb25jbGljazpmLG9ua2V5cHJlc3M6ZnVuY3Rpb24odCl7MTM9PXQua2V5Q29kZSYmZigpfSxyb2xlOiJidXR0b24iLCJhcmlhLWxhYmVsIjoiQ2xvc2UgYnV0dG9uIix0YWJpbmRleDowfSxJKCJzdmciLHt3aWR0aDoiMThweCIsaGVpZ2h0OiIxOHB4Iix2aWV3Qm94OiIwIDAgMTMgMTMiLGZpbGw6Im5vbmUiLHhtbG5zOiJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyJ9LEkoInBhdGgiLHtkOiJNMi41NDk2NCAxLjc4MzY5TDEuNzgzNjkgMi41NDk2NEw1LjczNDA1IDYuNUwxLjc4MzY5IDEwLjQ1MDRMMi41NDk2NCAxMS4yMTYzTDYuNSA3LjI2NTk1TDEwLjQ1MDQgMTEuMjE2M0wxMS4yMTYzIDEwLjQ1MDRMNy4yNjU5NSA2LjVMMTEuMjE2MyAyLjU0OTY0TDEwLjQ1MDQgMS43ODM2OUw2LjUgNS43MzQwNUwyLjU0OTY0IDEuNzgzNjlaIixmaWxsOiIjMjYyMTM2In0pKSkpKSl9LGd0PW4oNDcwNjYpLHl0PW4ubihndCksbXQ9bigzMDU5MyksYnQ9bi5uKG10KSx4dD1uKDQ0NTMpLHd0PW4ubih4dCksRXQ9ZnVuY3Rpb24oKXt0cnl7cmV0dXJuIHdpbmRvdy5wYXJlbnQuSW50ZXJjb219Y2F0Y2godCl7fX0sanQ9ZnVuY3Rpb24oKXt2YXIgdD1FdCgpO3QmJih0LnVsX3dhc1Zpc2libGUmJnQoInVwZGF0ZSIse2hpZGVfZGVmYXVsdF9sYXVuY2hlcjohMX0pLGRlbGV0ZSB0LnVsX3dhc1Zpc2libGUpfSxDdD1mdW5jdGlvbigpe3ZhciB0PUV0KCk7dCYmKHQudWxfd2FzVmlzaWJsZT0hIWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoImlmcmFtZS5pbnRlcmNvbS1sYXVuY2hlci1mcmFtZSIpLHQudWxfd2FzVmlzaWJsZSYmdCgidXBkYXRlIix7aGlkZV9kZWZhdWx0X2xhdW5jaGVyOiEwfSkpfSxrdD1bdF0sU3Q9ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KCl7YnQoKSh0aGlzLHQpfXJldHVybiB3dCgpKHQsbnVsbCxbe2tleToiZGlzYWJsZSIsdmFsdWU6ZnVuY3Rpb24oKXtrdC5mb3JFYWNoKChmdW5jdGlvbih0KXtyZXR1cm4gdC5kaXNhYmxlKCl9KSl9fSx7a2V5OiJlbmFibGUiLHZhbHVlOmZ1bmN0aW9uKCl7a3QuZm9yRWFjaCgoZnVuY3Rpb24odCl7cmV0dXJuIHQuZW5hYmxlKCl9KSl9fV0pLHR9KCksT3Q9big3NjM5MCksSXQ9bi5uKE90KSxBdD1mdW5jdGlvbigpe3JldHVybiBJKCJzdmciLHt3aWR0aDoiMTAwIixoZWlnaHQ6IjEzIix2aWV3Qm94OiIwIDAgMTAwIDEzIixmaWxsOiJub25lIix4bWxuczoiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciLGFsdDoiUG93ZXJlZCBieSBTcHJpZyJ9LEkoInBhdGgiLHtkOiJNMy4wMzY5IDAuODM5OTgxSDAuMDI0OTAyM1Y4Ljk5OTk4SDEuMzIwOVY2LjUzOTk4SDIuODU2OUM0Ljg5NjkgNi41Mzk5OCA2LjI0MDkgNS4zNzU5OCA2LjI0MDkgMy42MjM5OEM2LjI0MDkgMS45NTU5OCA0Ljk2ODkgMC44Mzk5ODEgMy4wMzY5IDAuODM5OTgxWk0zLjAwMDkgNS4zNTE5OEgxLjMyMDlWMi4wMjc5OEgzLjAwMDlDNC4xNzY5IDIuMDI3OTggNC45Njg5IDIuNjc1OTggNC45Njg5IDMuNjIzOThDNC45Njg5IDQuNjU1OTggNC4xNzY5IDUuMzUxOTggMy4wMDA5IDUuMzUxOThaIixmaWxsOiIjNUQ2OTZGIn0pLEkoInBhdGgiLHtkOiJNOS45MDY1MyAzLjIxNTk4QzguMTU0NTMgMy4yMTU5OCA2LjkwNjUzIDQuNDUxOTggNi45MDY1MyA2LjE3OTk4QzYuOTA2NTMgNy45MDc5OCA4LjE1NDUzIDkuMTQzOTggOS45MDY1MyA5LjE0Mzk4QzExLjY1ODUgOS4xNDM5OCAxMi45MDY1IDcuOTA3OTggMTIuOTA2NSA2LjE3OTk4QzEyLjkwNjUgNC40NTE5OCAxMS42NTg1IDMuMjE1OTggOS45MDY1MyAzLjIxNTk4Wk05LjkwNjUzIDguMDE1OThDOC44ODY1MyA4LjAxNTk4IDguMTU0NTMgNy4yMzU5OCA4LjE1NDUzIDYuMTc5OThDOC4xNTQ1MyA1LjExMTk4IDguODg2NTMgNC4zNDM5OCA5LjkwNjUzIDQuMzQzOThDMTAuOTI2NSA0LjM0Mzk4IDExLjY1ODUgNS4xMTE5OCAxMS42NTg1IDYuMTc5OThDMTEuNjU4NSA3LjIzNTk4IDEwLjkyNjUgOC4wMTU5OCA5LjkwNjUzIDguMDE1OThaIixmaWxsOiIjNUQ2OTZGIn0pLEkoInBhdGgiLHtkOiJNMjAuOTYzMSAzLjM1OTk4TDE5LjczOTEgNy4xMTU5OEwxOC4zOTUxIDMuMzU5OThIMTcuMzI3MUwxNS45ODMxIDcuMTI3OThMMTQuNzU5MSAzLjM1OTk4SDEzLjQxNTFMMTUuNDQzMSA4Ljk5OTk4SDE2LjUzNTFMMTcuODY3MSA1LjA4Nzk4TDE5LjE4NzEgOC45OTk5OEgyMC4yNzkxTDIyLjMwNzEgMy4zNTk5OEgyMC45NjMxWiIsZmlsbDoiIzVENjk2RiJ9KSxJKCJwYXRoIix7ZDoiTTI1LjcyNDYgMy4yMTU5OEMyNC4wMDg2IDMuMjE1OTggMjIuODIwNiA0LjUxMTk4IDIyLjgyMDYgNi4xNzk5OEMyMi44MjA2IDcuODU5OTggMjQuMDIwNiA5LjE0Mzk4IDI1Ljc5NjYgOS4xNDM5OEMyNy4wMjA2IDkuMTQzOTggMjguMDE2NiA4LjU0Mzk4IDI4LjM3NjYgNy41MjM5OEgyNy4wMDg2QzI2Ljc4MDYgNy44ODM5OCAyNi4zNjA2IDguMDUxOTggMjUuODA4NiA4LjA1MTk4QzI0Ljc1MjYgOC4wNTE5OCAyNC4yMTI2IDcuNDAzOTggMjQuMDkyNiA2LjU1MTk4SDI4LjUyMDZDMjguNzYwNiA0LjY0Mzk4IDI3LjU5NjYgMy4yMTU5OCAyNS43MjQ2IDMuMjE1OThaTTI1LjczNjYgNC4yNzE5OEMyNi42MTI2IDQuMjcxOTggMjcuMjEyNiA0Ljc2Mzk4IDI3LjI4NDYgNS42ODc5OEgyNC4xMTY2QzI0LjI2MDYgNC44OTU5OCAyNC44MDA2IDQuMjcxOTggMjUuNzM2NiA0LjI3MTk4WiIsZmlsbDoiIzVENjk2RiJ9KSxJKCJwYXRoIix7ZDoiTTMxLjEyOTcgNC4xMjc5OFYzLjM1OTk4SDI5Ljg4MTdWOC45OTk5OEgzMS4xMjk3VjUuNDQ3OThDMzEuNjMzNyA0Ljc4Nzk4IDMyLjMxNzcgNC40NTE5OCAzMy4yMTc3IDQuNDE1OThWMy4yMzk5OEMzMi4zNTM3IDMuMjM5OTggMzEuNjQ1NyAzLjU2Mzk4IDMxLjEyOTcgNC4xMjc5OFoiLGZpbGw6IiM1RDY5NkYifSksSSgicGF0aCIse2Q6Ik0zNi44MjIyIDMuMjE1OThDMzUuMTA2MiAzLjIxNTk4IDMzLjkxODIgNC41MTE5OCAzMy45MTgyIDYuMTc5OThDMzMuOTE4MiA3Ljg1OTk4IDM1LjExODIgOS4xNDM5OCAzNi44OTQyIDkuMTQzOThDMzguMTE4MiA5LjE0Mzk4IDM5LjExNDIgOC41NDM5OCAzOS40NzQyIDcuNTIzOThIMzguMTA2MkMzNy44NzgyIDcuODgzOTggMzcuNDU4MiA4LjA1MTk4IDM2LjkwNjIgOC4wNTE5OEMzNS44NTAyIDguMDUxOTggMzUuMzEwMiA3LjQwMzk4IDM1LjE5MDIgNi41NTE5OEgzOS42MTgyQzM5Ljg1ODIgNC42NDM5OCAzOC42OTQyIDMuMjE1OTggMzYuODIyMiAzLjIxNTk4Wk0zNi44MzQyIDQuMjcxOThDMzcuNzEwMiA0LjI3MTk4IDM4LjMxMDIgNC43NjM5OCAzOC4zODIyIDUuNjg3OThIMzUuMjE0MkMzNS4zNTgyIDQuODk1OTggMzUuODk4MiA0LjI3MTk4IDM2LjgzNDIgNC4yNzE5OFoiLGZpbGw6IiM1RDY5NkYifSksSSgicGF0aCIse2Q6Ik00NS40ODg2IDAuNDc5OThWMy44MDM5OEM0NS4wMDg2IDMuNDMxOTggNDQuMzk2NiAzLjIxNTk4IDQzLjY3NjYgMy4yMTU5OEM0Mi4wOTI2IDMuMjE1OTggNDAuODIwNiA0LjUzNTk4IDQwLjgyMDYgNi4xNjc5OEM0MC44MjA2IDcuODIzOTggNDIuMDkyNiA5LjE0Mzk4IDQzLjY3NjYgOS4xNDM5OEM0NC4zOTY2IDkuMTQzOTggNDUuMDA4NiA4LjkyNzk4IDQ1LjQ4ODYgOC41NDM5OFY4Ljk5OTk4SDQ2LjcyNDZWMC40Nzk5OEg0NS40ODg2Wk00My44NTY2IDguMDE1OThDNDIuODI0NiA4LjAxNTk4IDQyLjA2ODYgNy4xNzU5OCA0Mi4wNjg2IDYuMTY3OThDNDIuMDY4NiA1LjE3MTk4IDQyLjgyNDYgNC4zNDM5OCA0My44NTY2IDQuMzQzOThDNDQuNDgwNiA0LjM0Mzk4IDQ1LjA2ODYgNC41NTk5OCA0NS40ODg2IDUuMTU5OThWNy4xODc5OEM0NS4wNjg2IDcuNzk5OTggNDQuNDgwNiA4LjAxNTk4IDQzLjg1NjYgOC4wMTU5OFoiLGZpbGw6IiM1RDY5NkYifSksSSgicGF0aCIse2Q6Ik01NC42Nzk3IDMuMjE1OThDNTMuOTU5NyAzLjIxNTk4IDUzLjM0NzcgMy40MzE5OCA1Mi44Nzk3IDMuNzkxOThWMC40Nzk5OEg1MS42MzE3VjguOTk5OThINTIuODc5N1Y4LjU1NTk4QzUzLjM0NzcgOC45Mjc5OCA1My45NTk3IDkuMTQzOTggNTQuNjc5NyA5LjE0Mzk4QzU2LjI2MzcgOS4xNDM5OCA1Ny41NDc3IDcuODIzOTggNTcuNTQ3NyA2LjE2Nzk4QzU3LjU0NzcgNC41MzU5OCA1Ni4yNjM3IDMuMjE1OTggNTQuNjc5NyAzLjIxNTk4Wk01NC40OTk3IDguMDE1OThDNTMuODc1NyA4LjAxNTk4IDUzLjI5OTcgNy43OTk5OCA1Mi44Nzk3IDcuMjExOThWNS4xMzU5OEM1My4yOTk3IDQuNTQ3OTggNTMuODc1NyA0LjM0Mzk4IDU0LjQ5OTcgNC4zNDM5OEM1NS41NDM3IDQuMzQzOTggNTYuMjk5NyA1LjE3MTk4IDU2LjI5OTcgNi4xNjc5OEM1Ni4yOTk3IDcuMTc1OTggNTUuNTQzNyA4LjAxNTk4IDU0LjQ5OTcgOC4wMTU5OFoiLGZpbGw6IiM1RDY5NkYifSksSSgicGF0aCIse2Q6Ik02My4zMzQ3IDMuMzQ3OThMNjEuMzkwNyA3Ljc2Mzk4TDU5LjI2NjcgMy4zNDc5OEg1Ny45MzQ3TDYwLjgxNDcgOS4wODM5OEw1OS42MjY3IDExLjc4NEg2MC45MzQ3TDY0LjY1NDcgMy4zNDc5OEg2My4zMzQ3WiIsZmlsbDoiIzVENjk2RiJ9KSxJKCJwYXRoIix7ZDoiTTcxLjE0NjYgNC4zNDY2MUM2OS44MDkyIDQuMDUwMzggNjkuMTMxIDMuNTMwMDEgNjkuMTMxIDIuODAwNjVDNjkuMTMxIDIuMDQ3MDUgNjkuODU0NiAxLjQ3ODIyIDcwLjgxNDIgMS40NzgyMkM3MS44MDM0IDEuNDc4MjIgNzIuNTQ5NiAyLjEwMzM5IDcyLjU0OTYgMi45MzIxVjIuOTk4MTNINzMuOTE2NVYyLjkzMjFDNzMuOTE2NSAxLjQxNzY0IDcyLjU4ODMgMC4yNzI3MDUgNzAuODI3MSAwLjI3MjcwNUM2OS45Nzg0IDAuMjcyNzA1IDY5LjIwMDkgMC41MzMxOTEgNjguNjM3OSAxLjAwNTdDNjguMzU4NCAxLjIzNjE5IDY4LjEzMzkgMS41MjQ4NyA2Ny45ODA1IDEuODUxMUM2Ny44MjcxIDIuMTc3MzMgNjcuNzQ4NiAyLjUzMzAzIDY3Ljc1MDYgMi44OTI3M0M2Ny43NDUxIDMuMjIyNTUgNjcuODEzNyAzLjU0OTQ5IDY3Ljk1MTUgMy44NDk5NEM2OC4wODk0IDQuMTUwMzggNjguMjkzIDQuNDE2ODYgNjguNTQ3OCA0LjYzMDEyQzY5LjAyMTggNS4wNDI2NiA2OS42OTQ1IDUuMzQ3OTggNzAuNTQ2MyA1LjUzODhDNzEuOTgwNiA1Ljg1NTAyIDcyLjcwNzggNi4zOTI5NiA3Mi43MDc4IDcuMTM2ODZDNzIuNzA3OCA3Ljk0MzE2IDcxLjkxNTYgOC41NTA3NiA3MC44NjgyIDguNTUwNzZDNjkuNzgwNCA4LjU1MDc2IDY4Ljk1OTkgNy44NzUzMSA2OC45NTk5IDYuOTc5OTZWNi45MTM5M0g2Ny41OTE4VjYuOTc5OTZDNjcuNTkxOCA4LjU2MzQ4IDY4Ljk5NDIgOS43NTY4OCA3MC44NTM1IDkuNzU2ODhDNzEuNzQyNiA5Ljc1Njg4IDcyLjU1ODggOS40ODczMSA3My4xNTE4IDguOTk2NjJDNzMuNDQ2IDguNzU4MzEgNzMuNjgyNyA4LjQ1ODEgNzMuODQ0NSA4LjExNzlDNzQuMDA2MyA3Ljc3NzcgNzQuMDg5MSA3LjQwNjExIDc0LjA4NyA3LjAzMDI0Qzc0LjA4NyA1LjY4NTQgNzMuMDk5MSA0Ljc4MjE3IDcxLjE0NjYgNC4zNDY2MVoiLGZpbGw6IiM1RDY5NkYifSksSSgicGF0aCIse2Q6Ik03OC43OTg2IDIuNTA4MDZDNzguMjg3NCAyLjUwMTc1IDc3Ljc4MjMgMi42MTc2IDc3LjMyNjMgMi44NDU3NkM3Ni44NzAzIDMuMDczOTEgNzYuNDc2OCAzLjQwNzU5IDc2LjE3OTUgMy44MTgzN1YyLjY2NzM4SDc0Ljg3ODlWMTIuMDc1Mkg3Ni4xNzk1VjguNDg3MTZDNzYuNDc2OCA4Ljg5NzkgNzYuODcwMyA5LjIzMTUyIDc3LjMyNjMgOS40NTk1N0M3Ny43ODI0IDkuNjg3NjMgNzguMjg3NSA5LjgwMzM1IDc4Ljc5ODYgOS43OTY4N0M4MC44MTY3IDkuNzk2ODcgODIuMzM4MSA4LjIzMDMxIDgyLjMzODEgNi4xNTI0NkM4Mi4zMzgxIDQuMDc0NjIgODAuODE2NyAyLjUwODA2IDc4Ljc5ODYgMi41MDgwNlpNODAuOTgzNSA2LjQyMjY0QzgwLjkzMTYgNi45NjI5IDgwLjY5MjEgNy40Njg3OSA4MC4zMDU2IDcuODU0NEM3OS45MTkgOC4yNDAwMSA3OS40MDkzIDguNDgxNTYgNzguODYzIDguNTM4MDRDNzguMTM2OSA4LjYxMDc0IDc3LjQ2MDUgOC40MDI5NSA3Ni45NTgzIDcuOTU0MDdDNzYuNDU2MSA3LjUwNTE4IDc2LjE3OTUgNi44NjM2NSA3Ni4xNzk1IDYuMTUyNDZDNzYuMTc5NSA0Ljc4NDYgNzcuMjEyMiAzLjc1Mjk1IDc4LjU4MTUgMy43NTI5NUM3OS4yOTA0IDMuNzUyOTUgNzkuOTMwNiA0LjAyMTkxIDgwLjM3NzYgNC41MTAxOEM4MC44Mzg3IDUuMDExMTYgODEuMDU0IDUuNjkwMjUgODAuOTgzNSA2LjQyMjY0WiIsZmlsbDoiIzVENjk2RiJ9KSxJKCJwYXRoIix7ZDoiTTk4LjI5MDggMi42NjkyVjMuODA3NDdDOTcuNjc3NiAyLjk3ODc1IDk2LjczMDIgMi41MDgwNiA5NS42NTgzIDIuNTA4MDZDOTMuNjQ4MiAyLjUwODA2IDkyLjEzMjMgNC4wNDYxNSA5Mi4xMzIzIDYuMDg1ODJDOTIuMTMyMyA4LjEyNTUgOTMuNjQ4MiA5LjY2Mjk5IDk1LjY1ODMgOS42NjI5OUM5Ni43MzQ1IDkuNjYyOTkgOTcuNjgxOSA5LjE5NzE0IDk4LjI5MDggOC4zNzY5MVY4LjU1MTk4Qzk4LjI5MDggOS45Njg5MSA5Ny4zOTA2IDEwLjg4NDMgOTUuOTk3NCAxMC44ODQzQzk1LjA1NjEgMTAuODg0MyA5NC4yNzE4IDEwLjQ3NjYgOTMuODk5NiA5Ljc5Mzg0TDkzLjg4MDYgOS43NTg3SDkyLjUzODlMOTIuNTY5NSA5Ljg0NjU0QzkyLjc5NjEgMTAuNTE0IDkzLjIzOTIgMTEuMDg4OSA5My44MzAzIDExLjQ4MjJDOTQuNDIzMyAxMS44NzIzIDk1LjE3MjYgMTIuMDc4MyA5NS45OTc0IDEyLjA3ODNDOTcuMDU1MiAxMi4wNzgzIDk3Ljk1NTQgMTEuNzQ1MSA5OC42MDE3IDExLjExNTdDOTkuMjQ4MSAxMC40ODYyIDk5LjU5MTUgOS42MDEyIDk5LjU5MTUgOC41Njc3M1YyLjY2OTJIOTguMjkwOFpNOTcuNTYxMSA3Ljg0MkM5Ny4wMDkyIDguMzY0MTggOTYuMjIyNSA4LjU4MzQ4IDk1LjQwMDEgOC40NDI5NEM5NC45MTMyIDguMzU3OTYgOTQuNDY2NCA4LjEyMTg0IDk0LjEyNDUgNy43Njg4OUM5My43ODI3IDcuNDE1OTMgOTMuNTYzNiA2Ljk2NDUyIDkzLjQ5OTIgNi40ODAxOUM5My4zODMzIDUuNjY1NDEgOTMuNjMxIDQuODkzNjQgOTQuMTc4NiA0LjM2NDE4Qzk0LjYzODMgMy45Mjc0MSA5NS4yNTQyIDMuNjg3ODggOTUuODkxOSAzLjY5NzgyQzk2LjA0NjQgMy42OTc5NSA5Ni4yMDA2IDMuNzEwMzEgOTYuMzUzMSAzLjczNDc3Qzk3LjM0NTkgMy44OTM0OSA5OC4xMzE0IDQuNzA0MDMgOTguMjYzMiA1LjcxMDI0Qzk4LjM3NDkgNi41MzgzNSA5OC4xMTc5IDcuMzE0MzYgOTcuNTYxMSA3Ljg0MloiLGZpbGw6IiM1RDY5NkYifSksSSgicGF0aCIse2Q6Ik05MC43MDUgMC4wOTk1OTc1QzkwLjQ2MDIgMC4wNDY3NzMgOTAuMjA0MyAwLjA5MTE5NzEgODkuOTkyNSAwLjIyMzI2OUM4OS43ODA2IDAuMzU1MzQgODkuNjI5OSAwLjU2NDQ1MiA4OS41NzI5IDAuODA1NDA5Qzg5LjUxNTkgMS4wNDYzNyA4OS41NTcxIDEuMjk5ODIgODkuNjg3NyAxLjUxMDk4Qzg5LjgxODMgMS43MjIxNSA5MC4wMjc3IDEuODc0MDcgOTAuMjcwOCAxLjkzMzkxQzkwLjM0MTUgMS45NDk1NCA5MC40MTM2IDEuOTU3NDcgOTAuNDg2IDEuOTU3NTRDOTAuNzIgMS45NTc5IDkwLjk0NTggMS44NzMyNSA5MS4xMjA2IDEuNzE5NzNDOTEuMjk1NSAxLjU2NjIgOTEuNDA3IDEuMzU0NTIgOTEuNDM0MSAxLjEyNUM5MS40NjExIDAuODk1NDcgOTEuNDAxNyAwLjY2NDEzNSA5MS4yNjczIDAuNDc1MDQ2QzkxLjEzMjkgMC4yODU5NTggOTAuOTMyNyAwLjE1MjMyNSA5MC43MDUgMC4wOTk1OTc1VjAuMDk5NTk3NVoiLGZpbGw6IiM1RDY5NkYifSksSSgicGF0aCIse2Q6Ik04OS44MzY2IDguMzkxNDNIODguNzE1Qzg3LjkxNzggOC4zOTE0MyA4Ny40Mzg5IDcuODU1MzEgODcuNDM4OSA2Ljk1NjkzQzg3LjQzODkgNi4wODA5NiA4Ny44NjgxIDUuMDM2NTkgODguNzQzMiAzLjc2NDQ0TDg4Ljc1NDggMy43NDc0OFYzLjM4ODI1TDg1LjAyNzEgMi44NjcyN0M4NS4wMjg0IDIuNzE1NTMgODQuOTg4NiAyLjU2NjIyIDg0LjkxMTggMi40MzQ3OEM4NC44MzUxIDIuMzAzMzUgODQuNzI0MSAyLjE5NDU4IDg0LjU5MDUgMi4xMTk3M0M4NC4yNTYzIDEuOTM4IDgzLjg5MDggMS45MzggODMuNTg3OSAyLjExMzY4QzgzLjQzNjEgMi4yMDIzIDgzLjMxMjIgMi4zMzA3NyA4My4yMyAyLjQ4NDhDODMuMTQ3NyAyLjYzODg0IDgzLjExMDMgMi44MTI0IDgzLjEyMTkgMi45ODYxOEM4My4xMzM2IDMuMTU5OTYgODMuMTkzOCAzLjMyNzE0IDgzLjI5NTggMy40NjkxNEM4My4zOTc5IDMuNjExMTQgODMuNTM3OSAzLjcyMjM4IDgzLjcwMDEgMy43OTA0OUw4Mi41NDA1IDkuNjM3NTNIODMuODI4M0w4NC44OTc3IDQuMDg1NTFMODYuOTExNSA0LjQyMTExQzg2LjM3MDEgNS4zODAwNyA4Ni4wOTUzIDYuMjc0MjEgODYuMDk1MyA3LjA3ODY5Qzg2LjA5NTMgOC41NjM0NyA4Ny4wMDQxIDkuNTM1NzYgODguNDczNCA5LjYyOTY1VjkuNjM3NTNIOTEuMTM0MVYyLjY5MDk5SDg5LjgzNjZWOC4zOTE0M1oiLGZpbGw6IiM1RDY5NkYifSkpfSxUdD1mdW5jdGlvbigpe3JldHVybiBmdW5jdGlvbih0KXt2YXIgZT10LmFwcC5kZWNrLmNhcmRzfHxbXSxuPWUuZmlsdGVyKChmdW5jdGlvbih0KXtyZXR1cm4gdC50eXBlfSkpLHI9dC5hcHAuZGVjay5pbmRleCxvPXQuYXBwLGk9by5zaG93U3VydmV5QnJhbmQsYT1vLm1hcmtldGluZ1VybCxjPW8uc2x1Z05hbWUscz1vLnN1cnZleUlkLHU9ZnVuY3Rpb24oKXtyZXR1cm4gaT9JKCJhIix7c3R5bGU6ImRpc3BsYXk6IGJsb2NrOyBtYXJnaW46IDVweCAwIDEwcHggMCIsaHJlZjoiIi5jb25jYXQoYSwiP3V0bV9zb3VyY2U9c3VydmV5X2JyYW5kaW5nJnV0bV9tZWRpdW09d2Vic2l0ZSZ1dG1fY2FtcGFpZ249IikuY29uY2F0KGMsIiZ1dG1fY29udGVudD0iKS5jb25jYXQocyksdGFyZ2V0OiJfYmxhbmsifSxBdCk6bnVsbH07aWYocisxPT09ZS5sZW5ndGh8fCFufHwxPT09bi5sZW5ndGgpcmV0dXJuIEkoImZvb3RlciIse2NsYXNzTmFtZToidWwtZm9vdGVyIn0sdSk7cmV0dXJuIEkoImZvb3RlciIse2NsYXNzTmFtZToidWwtZm9vdGVyIn0sKGZ1bmN0aW9uKCl7aWYobi5sZW5ndGg+MSYmbi5sZW5ndGg8PTEwKXt2YXIgZT1uLm1hcCgoZnVuY3Rpb24oZSxuKXtyZXR1cm4gSSgic3BhbiIse2NsYXNzTmFtZToidWwtZm9vdGVyLWJ1YmJsZSIsa2V5Om4sc3R5bGU6cj09PW4/e2JhY2tncm91bmRDb2xvcjp0LmFwcC5ib3JkZXJ9Ontib3JkZXJDb2xvcjp0LmFwcC5ib3JkZXJ9fSl9KSk7cmV0dXJuIEkoImRpdiIse3N0eWxlOiJtYXJnaW4tYm90dG9tOiAxMHB4OyJ9LGUpfXJldHVybiBudWxsfSksdSl9fSxNdD1mdW5jdGlvbih0KXtyZXR1cm4gdCYmdC5jYXB0aW9uVGV4dD9JKCJwIix7aWQ6dXQsY2xhc3NOYW1lOnV0fSx0LmNhcHRpb25UZXh0KTpudWxsfSxfdD1mdW5jdGlvbih0LGUpe3JldHVybiBJKCJwIix0P3tpZDpzdCxjbGFzc05hbWU6c3Qscm9sZToiaGVhZGluZyJ9OntpZDpzdCxjbGFzc05hbWU6c3Qsc3R5bGU6Im1hcmdpbi1ib3R0b206IDE1cHgiLHJvbGU6ImhlYWRpbmcifSxlKX0sTHQ9ZnVuY3Rpb24odCl7cmV0dXJuIHQmJnQuYnV0dG9uVGV4dD90LmJ1dHRvblRleHQ6Ik5leHQifSxSdD1mdW5jdGlvbih0KXtyZXR1cm4gdCYmdC5za2lwQnV0dG9uVGV4dD90LnNraXBCdXR0b25UZXh0OiJTa2lwIn0sUHQ9big5NzM0MyksTnQ9bi5uKFB0KTtmdW5jdGlvbiBEdCh0LGUpe2UodCl9dmFyIEZ0PWZ1bmN0aW9uKHQpe3ZhciBlPXQuYm9yZGVyLG49dC5sYWJlbCxyPXQuc2VsZWN0ZWQsbz0odC5pbmRleCx0LmlkKSxpPXQub25TZWxlY3QsYT10LmlzUmFkaW8sYz10LnVzZU1vYmlsZVN0eWxpbmcscz1mdW5jdGlvbih0KXt2YXIgbj1kb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiY2hvaWNlLWRpdi0iLmNvbmNhdChvKSkscj1kb2N1bWVudC5nZXRFbGVtZW50QnlJZCgicmFkaW8tIi5jb25jYXQobykpO24mJihuLnN0eWxlLmJvcmRlckNvbG9yPWUpLHImJihyLnN0eWxlLmJvcmRlcldpZHRoPSI2cHgiLHIuc3R5bGUuYm9yZGVyQ29sb3I9ZSxyLnN0eWxlLmJveFNoYWRvdz0ibm9uZSIpfSx1PWZ1bmN0aW9uKHQpe3ZhciBlPWRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJjaG9pY2UtZGl2LSIuY29uY2F0KG8pKSxuPWRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJyYWRpby0iLmNvbmNhdChvKSk7ZSYmKGUuc3R5bGUuYm9yZGVyQ29sb3I9IiNlNmU2ZTYiKSxuJiYobi5zdHlsZS5ib3JkZXJXaWR0aD0iMXB4IixuLnN0eWxlLmJvcmRlckNvbG9yPSIjMzIzMjMyIixuLnN0eWxlLmJveFNoYWRvdz0iaW5zZXQgM3B4IDNweCAwcHggcmdiYSgwLCAwLCAwLCAwLjEpIil9LGw9ZnVuY3Rpb24odCl7dC5zdG9wUHJvcGFnYXRpb24oKSx1KCksaShvKX0sZj17b25jbGljazpmdW5jdGlvbih0KXtyZXR1cm4gbCh0KX0sb25rZXlwcmVzczpmdW5jdGlvbih0KXtyZXR1cm4gZnVuY3Rpb24odCl7MTMhPXQua2V5Q29kZSYmMzIhPXQua2V5Q29kZXx8bCh0KX0odCl9fTsib250b3VjaHN0YXJ0ImluIGRvY3VtZW50LmRvY3VtZW50RWxlbWVudD8oZi5vbnRvdWNoc3RhcnQ9cyxmLm9udG91Y2hjYW5jZWw9dSxmLm9udG91Y2htb3ZlPXUsZi5vbnRvdWNoZW5kPXUpOihmLm9ubW91c2Vkb3duPXMsZi5vbm1vdXNlbGVhdmU9dSk7dmFyIGQ9YT8icmFkaW8tIi5jb25jYXQobyk6ImNoZWNrYm94LSIuY29uY2F0KG8pO3JldHVybiBJKCJkaXYiLFQoKSh7Y2xhc3NOYW1lOkYoZnQodHQsYykpLGlkOiJjaG9pY2UtZGl2LSIuY29uY2F0KG8pfSxmKSwhYSYmSSgiZGl2Iix7Y2xhc3NOYW1lOm50LGlkOmQsc3R5bGU6cj97YmFja2dyb3VuZENvbG9yOmUsYm9yZGVyQ29sb3I6ZSxib3hTaGFkb3c6Im5vbmUifTp7fSxyb2xlOiJjaGVja2JveCIsImFyaWEtbGFiZWxsZWRieSI6IiIuY29uY2F0KHN0LCIgbGFiZWwtIikuY29uY2F0KG8pLCJhcmlhLWNoZWNrZWQiOnIsdGFiaW5kZXg6MH0sciYmSSgic3ZnIix7d2lkdGg6IjEwIixoZWlnaHQ6IjEwIix2aWV3Qm94OiIwIDAgMTAgMTAiLGZpbGw6Im5vbmUiLHhtbG5zOiJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyJ9LEkoInBhdGgiLHtkOiJNOS4xNTM3NyAxLjMwNzc0TDQuMDc2ODUgOC4yMzA4MkwxLjMwNzYyIDUuMDAwMDUiLHN0cm9rZToid2hpdGUiLCJzdHJva2Utd2lkdGgiOiIyIiwic3Ryb2tlLWxpbmVjYXAiOiJyb3VuZCJ9KSkpLGEmJkkoImRpdiIse2NsYXNzTmFtZTpydCxpZDpkLHJvbGU6InJhZGlvIiwiYXJpYS1sYWJlbGxlZGJ5IjoiIi5jb25jYXQoc3QsIiBsYWJlbC0iKS5jb25jYXQobyksdGFiaW5kZXg6MH0pLEkoImxhYmVsIix7Y2xhc3NOYW1lOkYoZnQoZXQsYykpLGZvcjpkLGlkOiJsYWJlbC0iLmNvbmNhdChvKX0sbikpfTt2YXIgVXQsQnQ9bmV3IFVpbnQ4QXJyYXkoMTYpO2Z1bmN0aW9uIHp0KCl7aWYoIVV0JiYhKFV0PSJ1bmRlZmluZWQiIT10eXBlb2YgY3J5cHRvJiZjcnlwdG8uZ2V0UmFuZG9tVmFsdWVzJiZjcnlwdG8uZ2V0UmFuZG9tVmFsdWVzLmJpbmQoY3J5cHRvKXx8InVuZGVmaW5lZCIhPXR5cGVvZiBtc0NyeXB0byYmImZ1bmN0aW9uIj09dHlwZW9mIG1zQ3J5cHRvLmdldFJhbmRvbVZhbHVlcyYmbXNDcnlwdG8uZ2V0UmFuZG9tVmFsdWVzLmJpbmQobXNDcnlwdG8pKSl0aHJvdyBuZXcgRXJyb3IoImNyeXB0by5nZXRSYW5kb21WYWx1ZXMoKSBub3Qgc3VwcG9ydGVkLiBTZWUgaHR0cHM6Ly9naXRodWIuY29tL3V1aWRqcy91dWlkI2dldHJhbmRvbXZhbHVlcy1ub3Qtc3VwcG9ydGVkIik7cmV0dXJuIFV0KEJ0KX12YXIgVnQ9L14oPzpbMC05YS1mXXs4fS1bMC05YS1mXXs0fS1bMS01XVswLTlhLWZdezN9LVs4OWFiXVswLTlhLWZdezN9LVswLTlhLWZdezEyfXwwMDAwMDAwMC0wMDAwLTAwMDAtMDAwMC0wMDAwMDAwMDAwMDApJC9pO2Zvcih2YXIgSHQ9ZnVuY3Rpb24odCl7cmV0dXJuInN0cmluZyI9PXR5cGVvZiB0JiZWdC50ZXN0KHQpfSxxdD1bXSxXdD0wO1d0PDI1NjsrK1d0KXF0LnB1c2goKFd0KzI1NikudG9TdHJpbmcoMTYpLnN1YnN0cigxKSk7dmFyIEd0PWZ1bmN0aW9uKHQpe3ZhciBlPWFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdP2FyZ3VtZW50c1sxXTowLG49KHF0W3RbZSswXV0rcXRbdFtlKzFdXStxdFt0W2UrMl1dK3F0W3RbZSszXV0rIi0iK3F0W3RbZSs0XV0rcXRbdFtlKzVdXSsiLSIrcXRbdFtlKzZdXStxdFt0W2UrN11dKyItIitxdFt0W2UrOF1dK3F0W3RbZSs5XV0rIi0iK3F0W3RbZSsxMF1dK3F0W3RbZSsxMV1dK3F0W3RbZSsxMl1dK3F0W3RbZSsxM11dK3F0W3RbZSsxNF1dK3F0W3RbZSsxNV1dKS50b0xvd2VyQ2FzZSgpO2lmKCFIdChuKSl0aHJvdyBUeXBlRXJyb3IoIlN0cmluZ2lmaWVkIFVVSUQgaXMgaW52YWxpZCIpO3JldHVybiBufTt2YXIgWnQ9ZnVuY3Rpb24odCxlLG4pe3ZhciByPSh0PXR8fHt9KS5yYW5kb218fCh0LnJuZ3x8enQpKCk7aWYocls2XT0xNSZyWzZdfDY0LHJbOF09NjMmcls4XXwxMjgsZSl7bj1ufHwwO2Zvcih2YXIgbz0wO288MTY7KytvKWVbbitvXT1yW29dO3JldHVybiBlfXJldHVybiBHdChyKX07Y29uc3QgJHQ9Imh0dHBzOi8vY2RuLnNwcmlnLmNvbSIsWXQ9dD0+dCsiLWxvYWRpbmctc3BpbmVyIixLdD0iaGlkZGVuIixKdD0idmlzaWJsZSIsWHQ9InVsLXZpZGVvLXJlY29yZGVyLWNhbWVyYS1vZmYtYnV0dG9uIixRdD0idWwtcmVjb3JkaW5nLWluLXNlc3Npb24iLHRlPVt7dHlwZToibGluayIsY29udGVudDpgJHskdH0vZGVwZW5kZW5jaWVzL3ZpZGVvanMtcmVjb3JkLTQuNS4wLm1pbi5jc3NgfSx7dHlwZToic2NyaXB0Iixjb250ZW50OmAkeyR0fS9kZXBlbmRlbmNpZXMvUmVjb3JkUlRDLTUuNi4yLmpzYH0se3R5cGU6InNjcmlwdCIsY29udGVudDpgJHskdH0vZGVwZW5kZW5jaWVzL2FkYXB0ZXIuOC4wLjAubWluLmpzYH0se3R5cGU6InNjcmlwdCIsY29udGVudDpgJHskdH0vZGVwZW5kZW5jaWVzL3ZpZGVvanMtcmVjb3JkLTQuNS4wLm1pbi5qc2B9LHt0eXBlOiJzY3JpcHQiLGNvbnRlbnQ6YCR7JHR9L3VzZXJsZWFwLXdlYi11cGNodW5rLXYyLjIuMi5qc2B9XSxlZT1be3R5cGU6ImxpbmsiLGNvbnRlbnQ6YCR7JHR9L2RlcGVuZGVuY2llcy92aWRlby1qcy03LjE4LjAubWluLmNzc2B9LHt0eXBlOiJzY3JpcHQiLGNvbnRlbnQ6YCR7JHR9L2RlcGVuZGVuY2llcy92aWRlby1qcy03LjE4LjAubWluLmpzYH0se3R5cGU6InN0eWxlIixjb250ZW50OiIvKiBwcm9ncmVzcyBjb250cm9sIHN0eWxlcyAqL1xuLnZpZGVvLWpzIC52anMtcHJvZ3Jlc3MtY29udHJvbCAudmpzLXByb2dyZXNzLWhvbGRlciB7XG4gIG1hcmdpbjogMCAwcHg7XG59XG5cbi52aWRlby1qcyAudmpzLXByb2dyZXNzLWNvbnRyb2wge1xuICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gIGhlaWdodDogM3B4O1xuICB3aWR0aDogMTAwJTtcbn1cbi8qIHBvc2l0aW9uIGFuZCBhbGlnbiB0aGUgYnV0dG9ucyBhbmQgYnV0dG9uIHRleHRzICovXG4udWwtY29udHJvbC1wYW5lbCB7XG4gIGJvdHRvbTogMDtcbiAgd2lkdGg6IDEwMCU7XG4gIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XG4gIGJhY2tncm91bmQtY29sb3I6IHdoaXRlO1xuICBoZWlnaHQ6IGZpdC1jb250ZW50O1xuICB6LWluZGV4OiAyO1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAjRjhGOEY4O1xufVxuXG4udWwtYnV0dG9ucy1wYW5lbCB7XG4gIGRpc3BsYXk6IGZsZXg7XG4gIGNvbG9yOiBibGFjaztcbiAgaGVpZ2h0OiA1MHB4O1xuICBwYWRkaW5nOiAycHggMTRweCAwO1xufVxuXG4udmlkZW8tanMgLnZqcy12b2x1bWUtcGFuZWwge1xuICBoZWlnaHQ6IDMwcHg7XG4gIHdpZHRoOiA0MHB4O1xufVxuXG4udWwtYnV0dG9ucy1wYW5lbCA+IC52anMtYnV0dG9uIHtcbiAgYmFja2dyb3VuZC1jb2xvcjogcmdiYSgwLCAwLCAwLCAwLjA1KTtcbiAgYm9yZGVyLXJhZGl1czogNTAlO1xuICBoZWlnaHQ6IDNlbTtcbiAgd2lkdGg6IDNlbTtcbiAgbWFyZ2luOiAwIDEwcHg7XG59XG5cbnNwYW4udWwtYnV0dG9uLXRleHQge1xuICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XG4gIHRyYW5zZm9ybTogdHJhbnNsYXRlKDBweCwgMjVweCk7XG4gIC1tb3otdHJhbnNmb3JtOiB0cmFuc2xhdGUoMXB4LCAyNXB4KTtcbn1cblxuI3VsLWNhbWVyYS1idXR0b24ge1xuICB3aGl0ZS1zcGFjZTogbm93cmFwO1xufVxuXG4udWwtaW5hY3RpdmUge1xuICBvcGFjaXR5OiAwLjM7XG4gIGN1cnNvcjogZGVmYXVsdDtcbiAgcG9pbnRlci1ldmVudHM6IG5vbmU7XG59XG5cbi52aWRlby1qcyAudmpzLXZvbHVtZS1jb250cm9sLnZqcy12b2x1bWUtaG9yaXpvbnRhbCB7XG4gIGJhY2tncm91bmQtY29sb3I6ICNmZmY7XG4gIHotaW5kZXg6IDE7XG59XG5cbi52anMtdm9sdW1lLWJhci52anMtc2xpZGVyLWhvcml6b250YWwgLnZqcy12b2x1bWUtbGV2ZWwge1xuICBiYWNrZ3JvdW5kLWNvbG9yOiBibGFjaztcbn1cblxuLnZpZGVvLWpzIC52anMtdm9sdW1lLXBhbmVsLnZqcy12b2x1bWUtcGFuZWwtaG9yaXpvbnRhbC52anMtaG92ZXIsXG4udmlkZW8tanMgLnZqcy12b2x1bWUtcGFuZWwudmpzLXZvbHVtZS1wYW5lbC1ob3Jpem9udGFsLnZqcy1zbGlkZXItYWN0aXZlLFxuLnZpZGVvLWpzIC52anMtdm9sdW1lLXBhbmVsLnZqcy12b2x1bWUtcGFuZWwtaG9yaXpvbnRhbDphY3RpdmUge1xuICB3aWR0aDogNDBweDtcbn1cblxuLnZpZGVvLWpzIC52anMtdm9sdW1lLXBhbmVsIC52anMtdm9sdW1lLWNvbnRyb2wudmpzLXNsaWRlci1hY3RpdmUsXG4udmlkZW8tanMgLnZqcy12b2x1bWUtcGFuZWwgLnZqcy12b2x1bWUtY29udHJvbDphY3RpdmUsXG4udmlkZW8tanMgLnZqcy12b2x1bWUtcGFuZWwudmpzLWhvdmVyIC52anMtbXV0ZS1jb250cm9sIH4gLnZqcy12b2x1bWUtY29udHJvbCxcbi52aWRlby1qcyAudmpzLXZvbHVtZS1wYW5lbC52anMtaG92ZXIgLnZqcy12b2x1bWUtY29udHJvbCxcbi52aWRlby1qcyAudmpzLXZvbHVtZS1wYW5lbDphY3RpdmUgLnZqcy12b2x1bWUtY29udHJvbCxcbi52aWRlby1qcyAudmpzLXZvbHVtZS1wYW5lbDpmb2N1cyAudmpzLXZvbHVtZS1jb250cm9sIHtcbiAgdmlzaWJpbGl0eTogdmlzaWJsZTtcbiAgbGVmdDogNDBweDtcbiAgcG9zaXRpb246IGFic29sdXRlO1xuICB0cmFuc2l0aW9uOiB2aXNpYmlsaXR5IDAuMXMsIG9wYWNpdHkgMC4xcywgaGVpZ2h0IDAuMXMsIHdpZHRoIDAuMXMsIGxlZnQgMHMsIHRvcCAwcztcbn1cblxuLyogcGxheSBidXR0b24gY3VzdG9taXphdGlvbiAqL1xuLnZpZGVvLWpzIC52anMtcGxheS1jb250cm9sIHtcbiAgY29sb3I6IGJsYWNrO1xufVxuXG4udmlkZW8tanMgLnZqcy1wbGF5LWNvbnRyb2wgLnZqcy1pY29uLXBsYWNlaG9sZGVyOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IHVybChcImRhdGE6aW1hZ2Uvc3ZnK3htbCwlM0Nzdmcgd2lkdGg9JzEyJyBoZWlnaHQ9JzEyJyB2aWV3Qm94PScwIDAgMTIgMTInIGZpbGw9J25vbmUnIHhtbG5zPSdodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyclM0UlM0NwYXRoIGQ9J00xMC41MzYzIDYuNDAyMjZMMS45Mzk1OCAxMC43MDA2QzEuNjQwMzcgMTAuODUwMiAxLjI4ODMzIDEwLjYzMjYgMS4yODgzMyAxMC4yOTgxVjEuNzAxNEMxLjI4ODMzIDEuMzY2ODggMS42NDAzNyAxLjE0OTMxIDEuOTM5NTggMS4yOTg5MUwxMC41MzYzIDUuNTk3MjdDMTAuODY4IDUuNzYzMTEgMTAuODY4IDYuMjM2NDIgMTAuNTM2MyA2LjQwMjI2Wicgc3Ryb2tlPSdibGFjaycgc3Ryb2tlLXdpZHRoPScxLjUnIHN0cm9rZS1saW5lY2FwPSdyb3VuZCcvJTNFJTNDL3N2ZyUzRVwiKTtcbn1cblxuLyogcG9zaXRpb24gYW5kIHN0eWxlIHRoZSBjdXJyZW50IHRpbWVyICovXG4udWwtdGltZS1wYW5lbCB7XG4gIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgYm90dG9tOiA4MHB4O1xuICBsZWZ0OiAxMHB4O1xuICBoZWlnaHQ6IDIycHg7XG4gIGNvbG9yOiBibGFjaztcbiAgYm9yZGVyOiAxcHggc29saWQgI2UwZTBlYjtcbiAgYm9yZGVyLXJhZGl1czogMjNweDtcbiAgYmFja2dyb3VuZC1jb2xvcjogd2hpdGU7XG4gIHdpZHRoOiBmaXQtY29udGVudDtcbn1cblxuLnZpZGVvLWpzIC52anMtY3VycmVudC10aW1lLFxuLnZqcy1uby1mbGV4IC52anMtY3VycmVudC10aW1lIHtcbiAgZGlzcGxheTogZmxleDtcbiAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAgdGV4dC1hbGlnbjogY2VudGVyO1xufVxuXG4vKiByZW1vdmUgdGhlIGRvdCBwcm9ncmVzcyBpbmRpY2F0b3IgKi9cbi52aWRlby1qcyAudmpzLXBsYXktcHJvZ3Jlc3M6YmVmb3JlLFxuLnZpZGVvLWpzIC52anMtdm9sdW1lLWxldmVsOmJlZm9yZSxcbi52anMtaWNvbi1jaXJjbGU6YmVmb3JlLFxuLnZqcy1zZWVrLXRvLWxpdmUtY29udHJvbCAudmpzLWljb24tcGxhY2Vob2xkZXI6YmVmb3JlIHtcbiAgY29udGVudDogbm9uZTtcbn1cblxuLnZpZGVvLWpzIC52anMtbXV0ZS1jb250cm9sIC52anMtaWNvbi1wbGFjZWhvbGRlcjpiZWZvcmUge1xuICBjb250ZW50OiB1cmwoXCJkYXRhOmltYWdlL3N2Zyt4bWwsJTNDc3ZnIHdpZHRoPScxOScgaGVpZ2h0PScxNCcgZmlsbD0nbm9uZScgeG1sbnM9J2h0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnJyUzRSUzQ3BhdGggZmlsbC1ydWxlPSdldmVub2RkJyBjbGlwLXJ1bGU9J2V2ZW5vZGQnIGQ9J004LjgyNS4zMjRBLjc1Ljc1IDAgMDE5LjI1IDF2MTEuNjY3YS43NS43NSAwIDAxLTEuMjE5LjU4NWwtMy45Ni0zLjE2OUgxYS43NS43NSAwIDAxLS43NS0uNzV2LTVhLjc1Ljc1IDAgMDEuNzUtLjc1aDMuMDdMOC4wMzEuNDE0YS43NS43NSAwIDAxLjc5NC0uMDl6TTcuNzUgMi41Nkw0LjgwMiA0LjkyYS43NS43NSAwIDAxLS40NjkuMTY0SDEuNzV2My41aDIuNTgzYS43NS43NSAwIDAxLjQ2OS4xNjVsMi45NDggMi4zNThWMi41NnpNMTQuOTExLjQ3YS43NS43NSAwIDAxMS4wNjEgMCA5LjA4NCA5LjA4NCAwIDAxMCAxMi44NDQuNzUuNzUgMCAwMS0xLjA2LTEuMDYgNy41ODQgNy41ODQgMCAwMDAtMTAuNzI0Ljc1Ljc1IDAgMDEwLTEuMDZ6TTExLjk3IDMuNDFhLjc1Ljc1IDAgMDExLjA2IDAgNC45MTcgNC45MTcgMCAwMTAgNi45NTMuNzUuNzUgMCAxMS0xLjA2LTEuMDYgMy40MTcgMy40MTcgMCAwMDAtNC44MzIuNzUuNzUgMCAwMTAtMS4wNnonIGZpbGw9JyUyMzI2MjEzNicvJTNFJTNDL3N2ZyUzRVwiKTtcbn1cblxuLnZpZGVvLWpzIC52anMtbXV0ZS1jb250cm9sLnZqcy12b2wtMCAudmpzLWljb24tcGxhY2Vob2xkZXI6YmVmb3JlIHtcbiAgY29udGVudDogdXJsKFwiZGF0YTppbWFnZS9zdmcreG1sLCUzQ3N2ZyB3aWR0aD0nMTknIGhlaWdodD0nMTQnIGZpbGw9J25vbmUnIHhtbG5zPSdodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyclM0UlM0NwYXRoIGQ9J004LjUgMS4xNjdMNC4zMzMgNC41SDF2NWgzLjMzM0w4LjUgMTIuODMzVjEuMTY3ek0xNy4xNyA0LjVsLTUgNU0xMi4xNyA0LjVsNSA1JyBzdHJva2U9JyUyMzI2MjEzNicgc3Ryb2tlLXdpZHRoPScxLjUnIHN0cm9rZS1saW5lY2FwPSdyb3VuZCcgc3Ryb2tlLWxpbmVqb2luPSdyb3VuZCcvJTNFJTNDL3N2ZyUzRVwiKTtcbn1cblxuLnZpZGVvLWpzIC52anMtbXV0ZS1jb250cm9sLnZqcy12b2wtMSAudmpzLWljb24tcGxhY2Vob2xkZXI6YmVmb3JlIHtcbiAgY29udGVudDogdXJsKFwiZGF0YTppbWFnZS9zdmcreG1sLCUzQ3N2ZyB3aWR0aD0nMTknIGhlaWdodD0nMTQnIHZpZXdCb3g9JzAgMCAxOSAxNCcgZmlsbD0nbm9uZScgeG1sbnM9J2h0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnJyUzRSUzQ3BhdGggZmlsbC1ydWxlPSdldmVub2RkJyBjbGlwLXJ1bGU9J2V2ZW5vZGQnIGQ9J004LjgyNDg5IDAuMzI0MDNDOS4wODQ3NCAwLjQ0ODkyIDkuMjUgMC43MTE3MDMgOS4yNSAxLjAwMDAxVjEyLjY2NjdDOS4yNSAxMi45NTUgOS4wODQ3NCAxMy4yMTc4IDguODI0ODkgMTMuMzQyN0M4LjU2NTA0IDEzLjQ2NzUgOC4yNTY2MSAxMy40MzI0IDguMDMxNDggMTMuMjUyM0w0LjA3MDI1IDEwLjA4MzNIMUMwLjU4NTc4NiAxMC4wODMzIDAuMjUgOS43NDc1NSAwLjI1IDkuMzMzMzRWNC4zMzMzNEMwLjI1IDMuOTE5MTMgMC41ODU3ODYgMy41ODMzNCAxIDMuNTgzMzRINC4wNzAyNUw4LjAzMTQ4IDAuNDE0MzU1QzguMjU2NjEgMC4yMzQyNTMgOC41NjUwNCAwLjE5OTE0IDguODI0ODkgMC4zMjQwM1pNNy43NSAyLjU2MDQ4TDQuODAxODUgNC45MTg5OUM0LjY2ODg3IDUuMDI1MzggNC41MDM2NCA1LjA4MzM0IDQuMzMzMzMgNS4wODMzNEgxLjc1VjguNTgzMzRINC4zMzMzM0M0LjUwMzY0IDguNTgzMzQgNC42Njg4NyA4LjY0MTMgNC44MDE4NSA4Ljc0NzY5TDcuNzUgMTEuMTA2MlYyLjU2MDQ4WicgZmlsbD0nJTIzMjYyMTM2Jy8lM0UlM0Mvc3ZnJTNFJTBBXCIpO1xufVxuXG4udmlkZW8tanMgLnZqcy1tdXRlLWNvbnRyb2wudmpzLXZvbC0yIC52anMtaWNvbi1wbGFjZWhvbGRlcjpiZWZvcmUge1xuICBjb250ZW50OiB1cmwoXCJkYXRhOmltYWdlL3N2Zyt4bWwsJTNDc3ZnIHdpZHRoPScxOScgaGVpZ2h0PScxNCcgdmlld0JveD0nMCAwIDE5IDE0JyBmaWxsPSdub25lJyB4bWxucz0naHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmcnJTNFJTNDcGF0aCBmaWxsLXJ1bGU9J2V2ZW5vZGQnIGNsaXAtcnVsZT0nZXZlbm9kZCcgZD0nTTguODI0ODkgMC4zMjQwM0M5LjA4NDc0IDAuNDQ4OTIgOS4yNSAwLjcxMTcwMyA5LjI1IDEuMDAwMDFWMTIuNjY2N0M5LjI1IDEyLjk1NSA5LjA4NDc0IDEzLjIxNzggOC44MjQ4OSAxMy4zNDI3QzguNTY1MDQgMTMuNDY3NSA4LjI1NjYxIDEzLjQzMjQgOC4wMzE0OCAxMy4yNTIzTDQuMDcwMjUgMTAuMDgzM0gxQzAuNTg1Nzg2IDEwLjA4MzMgMC4yNSA5Ljc0NzU1IDAuMjUgOS4zMzMzNFY0LjMzMzM0QzAuMjUgMy45MTkxMyAwLjU4NTc4NiAzLjU4MzM0IDEgMy41ODMzNEg0LjA3MDI1TDguMDMxNDggMC40MTQzNTVDOC4yNTY2MSAwLjIzNDI1MyA4LjU2NTA0IDAuMTk5MTQgOC44MjQ4OSAwLjMyNDAzWk03Ljc1IDIuNTYwNDhMNC44MDE4NSA0LjkxODk5QzQuNjY4ODcgNS4wMjUzOCA0LjUwMzY0IDUuMDgzMzQgNC4zMzMzMyA1LjA4MzM0SDEuNzVWOC41ODMzNEg0LjMzMzMzQzQuNTAzNjQgOC41ODMzNCA0LjY2ODg3IDguNjQxMyA0LjgwMTg1IDguNzQ3NjlMNy43NSAxMS4xMDYyVjIuNTYwNDhaJyBmaWxsPSclMjMyNjIxMzYnLyUzRSUzQ3BhdGggZmlsbC1ydWxlPSdldmVub2RkJyBjbGlwLXJ1bGU9J2V2ZW5vZGQnIGQ9J00xMS45Njk4IDMuNDExMjRDMTIuMjYyNyAzLjExODM5IDEyLjczNzYgMy4xMTg0NiAxMy4wMzA0IDMuNDExNEMxMy45NTIxIDQuMzMzNDEgMTQuNDY5OSA1LjU4Mzc2IDE0LjQ2OTkgNi44ODc0OEMxNC40Njk5IDguMTkxMjEgMTMuOTUyMSA5LjQ0MTU2IDEzLjAzMDQgMTAuMzYzNkMxMi43Mzc2IDEwLjY1NjUgMTIuMjYyNyAxMC42NTY2IDExLjk2OTggMTAuMzYzN0MxMS42NzY4IDEwLjA3MDkgMTEuNjc2NyA5LjU5NiAxMS45Njk2IDkuMzAzMDdDMTIuNjEwMSA4LjY2MjM1IDEyLjk2OTkgNy43OTM0NiAxMi45Njk5IDYuODg3NDhDMTIuOTY5OSA1Ljk4MTUxIDEyLjYxMDEgNS4xMTI2MiAxMS45Njk2IDQuNDcxOUMxMS42NzY3IDQuMTc4OTYgMTEuNjc2OCAzLjcwNDA5IDExLjk2OTggMy40MTEyNFonIGZpbGw9JyUyMzI2MjEzNicvJTNFJTNDL3N2ZyUzRSUwQVwiKTtcbn1cblxuLnZpZGVvLWpzIC52anMtdm9sdW1lLWNvbnRyb2w6aG92ZXIgLnZqcy1tb3VzZS1kaXNwbGF5IHtcbiAgZGlzcGxheTogbm9uZSAhaW1wb3J0YW50O1xufVxuXG4udmlkZW8tanMgLnZqcy1wbGF5LXByb2dyZXNzIHtcbiAgYmFja2dyb3VuZC1jb2xvcjogYmxhY2s7XG59XG5cbi8qIHBvc2l0aW9uIHZpZGVvIHBsYXllciBpbnNpZGUgdGhlIGNvbnRhaW5lciAqL1xuLnZpZGVvLWpzIC52anMtdGVjaCB7XG4gIHBvc2l0aW9uOiBzdGF0aWM7XG59XG5cbi52aWRlby1qcyAudmpzLXRpbWUtdG9vbHRpcCB7XG4gIHBhZGRpbmc6IDAuMjVlbSAwLjc1ZW07XG4gIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gIGNvbG9yOiAjMzMzO1xuICBiYWNrZ3JvdW5kOiAjRkNGQ0ZEO1xuICBib3JkZXItcmFkaXVzOiA5OXB4O1xuICB0ZXh0LWFsaWduOiBjZW50ZXI7XG4gIGJvcmRlcjogMXB4IHNvbGlkICNFMEUwRUI7XG4gIGRpc3BsYXk6IGZsZXg7XG4gIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gIGp1c3RpZnktY29udGVudDogY2VudGVyO1xuICB0b3A6IC0yNXB4O1xuICBmb250LXNpemU6IDEycHggIWltcG9ydGFudDtcbiAgd2lkdGg6IDUwcHggIWltcG9ydGFudDtcbn1cblxuLnZpZGVvLWpzIC52anMtcGxheS1wcm9ncmVzcy52anMtc2xpZGVyLWJhciAudmpzLXRpbWUtdG9vbHRpcCB7XG4gIHZpc2liaWxpdHk6IGhpZGRlbiAhaW1wb3J0YW50O1xufVxuXG4udmlkZW8tanMgLnZqcy1wcm9ncmVzcy1jb250cm9sIC52anMtbW91c2UtZGlzcGxheSB7XG4gIHotaW5kZXg6IDI7XG59XG5cbi51bC12aWRlby1wbGF5ZXIge1xuICB3aWR0aDogMTAwJTtcbiAgZGlzcGxheTogZmxleDtcbiAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcbiAgaGVpZ2h0OiBhdXRvO1xuICBib3JkZXI6IDFweCBzb2xpZCAjRTZFNkU2O1xuICBiYWNrZ3JvdW5kLWNvbG9yOiB3aGl0ZTtcbiAgYm94LXNpemluZzogYm9yZGVyLWJveDtcbiAgYm9yZGVyLXJhZGl1czogNHB4O1xuICBiYWNrZ3JvdW5kLWNsaXA6IGJvcmRlci1ib3g7XG4gIG92ZXJmbG93OiBoaWRkZW47XG59XG5cbi52aWRlby1qcy52anMtZnVsbHNjcmVlbjpub3QoLnZqcy1pb3MtbmF0aXZlLWZzKSB7XG4gIGJvcmRlcjogbm9uZTtcbn1cblxuI3VsLWNhcmQtdmlkZW9fX3BsYXllcl9yZWNvcmRlci12aWRlby1yZWNvcmRlci52anMtZnVsbHNjcmVlbiB7XG4gIGRpc3BsYXk6IHRhYmxlO1xufVxuXG4udmlkZW8tanMgZGl2LnZqcy1wcm9ncmVzcy1jb250cm9sIHtcbiAgbWFyZ2luLXRvcDogLTNweDtcbn1cblxuLnZpZGVvLWpzIC52anMtcHJvZ3Jlc3MtY29udHJvbCAudmpzLXNsaWRlciB7XG4gIGJhY2tncm91bmQtY29sb3I6ICNCMkJCQkQ7XG59XG5cbi52anMtcmVjb3JkLnZpZGVvLWpzIC52anMtY29udHJvbC52anMtYnV0dG9uLnZqcy1mdWxsc2NyZWVuLWNvbnRyb2wge1xuICBwb3NpdGlvbjpyZWxhdGl2ZTtcbn1cblxuLyogZml4IGEgc3VidGxlIG1pc2FsaWdubWVudCBidWcgb24gY2lyY3VsYXIgcGxheSBjb250cm9sIGJ1dHRvbnMgKi9cbi52aWRlby1qcyAudmpzLXBsYXktY29udHJvbCAudmpzLWljb24tcGxhY2Vob2xkZXIge1xuICB0cmFuc2Zvcm06IHRyYW5zbGF0ZSgxcHgsIDJweCk7XG4gIC1tb3otdHJhbnNmb3JtOiB0cmFuc2xhdGUoMXB4LCA1cHgpO1xufVxuXG4udmlkZW8tanMgLnZqcy1wbGF5LWNvbnRyb2wudmpzLXBsYXlpbmcgPiAudmpzLWljb24tcGxhY2Vob2xkZXIge1xuICB0cmFuc2Zvcm06IHRyYW5zbGF0ZSgwcHgsIDJweCk7XG4gIC1tb3otdHJhbnNmb3JtOiB0cmFuc2xhdGUoMHB4LCA0cHgpO1xufVxuXG4vKiBmaXggb3Bwb3NpdGUgbWlzYWxpZ25tZW50IGJ1ZyBvbiBub25jaXJjdWxhciBidXR0b25zICovXG4udmlkZW8tanMgLnZqcy1tdXRlLWNvbnRyb2wgLnZqcy1pY29uLXBsYWNlaG9sZGVyOmJlZm9yZSB7XG4gIHRyYW5zZm9ybTogdHJhbnNsYXRlWSgtMnB4KTtcbn1cblxuLnZpZGVvLWpzIC52anMtZnVsbHNjcmVlbi1jb250cm9sIC52anMtaWNvbi1wbGFjZWhvbGRlcjpiZWZvcmUge1xuICBjb250ZW50OiB1cmwoXCJkYXRhOmltYWdlL3N2Zyt4bWwsJTNDc3ZnIHdpZHRoPScxNicgaGVpZ2h0PScxNicgdmlld0JveD0nMCAwIDE2IDE2JyBmaWxsPSdub25lJyB4bWxucz0naHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmcnJTNFJTNDcGF0aCBkPSdNOS44MjE0MyAyLjU0MDA0TDEyLjI2MTQgMi41NDAwNEMxMi45MjQyIDIuNTQwMDQgMTMuNDYxNCAzLjA3NzMgMTMuNDYxNCAzLjc0MDA0TDEzLjQ2MTQgNi4xODAwNCcgc3Ryb2tlPSdibGFjaycgc3Ryb2tlLXdpZHRoPScxLjUnIHN0cm9rZS1saW5lY2FwPSdyb3VuZCcgc3Ryb2tlLWxpbmVqb2luPSdyb3VuZCcvJTNFJTNDcGF0aCBkPSdNNi4xNzk1NSAxMy40NkwzLjczOTU1IDEzLjQ2QzMuMDc2ODEgMTMuNDYgMi41Mzk1NSAxMi45MjI3IDIuNTM5NTUgMTIuMjZMMi41Mzk1NSA5LjgxOTk2JyBzdHJva2U9J2JsYWNrJyBzdHJva2Utd2lkdGg9JzEuNScgc3Ryb2tlLWxpbmVjYXA9J3JvdW5kJyBzdHJva2UtbGluZWpvaW49J3JvdW5kJy8lM0UlM0NwYXRoIGQ9J00xMi43NzcyIDMuMjIyNjZMOS4zNjQ3NSA2LjYzNTE2JyBzdHJva2U9J2JsYWNrJyBzdHJva2Utd2lkdGg9JzEuNScgc3Ryb2tlLWxpbmVjYXA9J3JvdW5kJyBzdHJva2UtbGluZWpvaW49J3JvdW5kJy8lM0UlM0NwYXRoIGQ9J002LjI5NDM0IDkuNzA2MDVMMi44ODE4NCAxMy4xMTg2JyBzdHJva2U9J2JsYWNrJyBzdHJva2Utd2lkdGg9JzEuNScgc3Ryb2tlLWxpbmVjYXA9J3JvdW5kJyBzdHJva2UtbGluZWpvaW49J3JvdW5kJy8lM0UlM0Mvc3ZnJTNFXCIpO1xufVxuXG4udmlkZW8tanMudmpzLWZ1bGxzY3JlZW4gLnZqcy1mdWxsc2NyZWVuLWNvbnRyb2wgLnZqcy1pY29uLXBsYWNlaG9sZGVyOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IHVybChcImRhdGE6aW1hZ2Uvc3ZnK3htbCwlM0Nzdmcgd2lkdGg9JzE2JyBoZWlnaHQ9JzE2JyBmaWxsPSdub25lJyB4bWxucz0naHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmcnJTNFJTNDcGF0aCBkPSdNMS41ODMgOS44MTNINS4yNWExIDEgMCAwMTEgMXYzLjY2Nk01LjM3NSAxMC42ODhMMSAxNS4wNjFNMTQuOTE3IDUuODEzSDExLjI1YTEgMSAwIDAxLTEtMVYxLjE0Nk0xNS4wNjMgMWwtNC4zNzYgNC4zNzUnIHN0cm9rZT0nJTIzMjYyMTM2JyBzdHJva2Utd2lkdGg9JzEuNScgc3Ryb2tlLWxpbmVjYXA9J3JvdW5kJyBzdHJva2UtbGluZWpvaW49J3JvdW5kJy8lM0UlM0Mvc3ZnJTNFXCIpO1xufVxuXG4udmlkZW8tanMgLnZqcy1wbGF5LWNvbnRyb2wudmpzLWVuZGVkIC52anMtaWNvbi1wbGFjZWhvbGRlcjpiZWZvcmUsIC52aWRlby1qcyAudmpzLWljb24tcmVwbGF5OmJlZm9yZSB7XG4gIGNvbnRlbnQ6IHVybChcImRhdGE6aW1hZ2Uvc3ZnK3htbCwlM0Nzdmcgd2lkdGg9JzEyJyBoZWlnaHQ9JzEyJyB2aWV3Qm94PScwIDAgMTIgMTInIGZpbGw9J25vbmUnIHhtbG5zPSdodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyclM0UlM0NwYXRoIGQ9J00xMC41MzYzIDYuNDAyMjZMMS45Mzk1OCAxMC43MDA2QzEuNjQwMzcgMTAuODUwMiAxLjI4ODMzIDEwLjYzMjYgMS4yODgzMyAxMC4yOTgxVjEuNzAxNEMxLjI4ODMzIDEuMzY2ODggMS42NDAzNyAxLjE0OTMxIDEuOTM5NTggMS4yOTg5MUwxMC41MzYzIDUuNTk3MjdDMTAuODY4IDUuNzYzMTEgMTAuODY4IDYuMjM2NDIgMTAuNTM2MyA2LjQwMjI2Wicgc3Ryb2tlPSdibGFjaycgc3Ryb2tlLXdpZHRoPScxLjUnIHN0cm9rZS1saW5lY2FwPSdyb3VuZCcvJTNFJTNDL3N2ZyUzRVwiKTtcbn1cblxuLnZpZGVvLWpzIC52anMtcGxheS1jb250cm9sLnZqcy1wbGF5aW5nIC52anMtaWNvbi1wbGFjZWhvbGRlcjpiZWZvcmUsIC52anMtaWNvbi1wYXVzZTpiZWZvcmUge1xuICBjb250ZW50OiB1cmwoXCJkYXRhOmltYWdlL3N2Zyt4bWwsJTNDc3ZnIHdpZHRoPScxNicgaGVpZ2h0PScxNicgdmlld0JveD0nMCAwIDE2IDE2JyBmaWxsPSdub25lJyB4bWxucz0naHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmcnJTNFJTNDcmVjdCB4PSczLjYxODg1JyB5PScyLjA2MDc0JyB3aWR0aD0nMy4xNjE4NScgaGVpZ2h0PScxMS44OCcgcng9JzAuOScgZmlsbD0nYmxhY2snIHN0cm9rZT0nJTIzRURFREVEJyBzdHJva2Utd2lkdGg9JzAuNicgc3Ryb2tlLWxpbmVjYXA9J3JvdW5kJy8lM0UlM0NyZWN0IHg9JzkuMjE3OTcnIHk9JzIuMDYwNzQnIHdpZHRoPSczLjE2MTg1JyBoZWlnaHQ9JzExLjg4JyByeD0nMC45JyBmaWxsPSdibGFjaycgc3Ryb2tlPSclMjNFREVERUQnIHN0cm9rZS13aWR0aD0nMC42JyBzdHJva2UtbGluZWNhcD0ncm91bmQnLyUzRSUzQy9zdmclM0UlMEFcIik7XG4gIHBhZGRpbmc6IDJweDtcbn1cblxuLnZqcy1lcnJvci1kaXNwbGF5IHtcbiAgZGlzcGxheTogbm9uZTtcbn1cblxuLnVsLXZpZGVvLXBsYXllci12aWRlbyB7XG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgdG9wOiAwO1xuICBsZWZ0OiAwO1xuICB3aWR0aDogMTAwJTtcbn1cblxuLnVsLXZpZGVvLWNvbnRhaW5lciB7XG4gIHdpZHRoOiAxMDAlO1xuICBoZWlnaHQ6IGF1dG87XG4gIGxlZnQ6IDBweDtcbiAgdG9wOiAwcHg7XG5cbiAgYmFja2dyb3VuZC1jb2xvcjogI2ZmZmZmZjtcbiAgYm9yZGVyLXJhZGl1czogNHB4O1xuXG4gIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gIGRpc3BsYXk6IGZsZXg7XG4gIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XG5cbiAgLyogSW5zaWRlIEF1dG8gTGF5b3V0ICovXG5cbiAgZmxleDogbm9uZTtcbiAgb3JkZXI6IDA7XG4gIGZsZXgtZ3JvdzogMDtcbiAgbWFyZ2luOiAxMHB4IDBweDtcbiAgcG9zaXRpb246IHJlbGF0aXZlO1xufVxuXG4udmpzLXJlY29yZCBidXR0b24udmpzLWRldmljZS1idXR0b24udmpzLWNvbnRyb2wge1xuICBiYWNrZ3JvdW5kOiByZ2JhKDI1NSwgMjU1LCAyNTUsIDk2KTtcbiAgZm9udC1mYW1pbHk6IC1hcHBsZS1zeXN0ZW0sIEJsaW5rTWFjU3lzdGVtRm9udCwgXCJTZWdvZSBVSVwiLCBSb2JvdG8sIEhlbHZldGljYSwgQXJpYWwsIHNhbnMtc2VyaWYsIFwiQXBwbGUgQ29sb3IgRW1vamlcIiwgXCJTZWdvZSBVSSBFbW9qaVwiLCBcIlNlZ29lIFVJIFN5bWJvbFwiO1xuICB3aWR0aDogMTAwJTtcbiAgaGVpZ2h0OiAxMDAlO1xuICBsZWZ0OiAwO1xuICB0b3A6IDA7XG4gIG1hcmdpbjogMDtcbiAgYm9yZGVyLXJhZGl1czogMDtcbiAgbGluZS1oZWlnaHQ6IDAuNjtcbiAgcGFkZGluZzogMTBweDtcbiAgZGlzcGxheTogZmxleDtcbiAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcbiAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7XG4gIHotaW5kZXg6IDM7XG59XG5cbi52anMtcmVjb3JkIC52anMtZGV2aWNlLWJ1dHRvbi52anMtY29udHJvbDpiZWZvcmUge1xuICBmb250LXNpemU6IDE0cHggIWltcG9ydGFudDtcbiAgY29sb3I6ICMzMzM7XG4gIGNvbnRlbnQ6IFwiWW91ciBicm93c2VyIG5lZWRzIHRvIGFjY2VzcyB5b3VyIGNhbWVyYSBhbmQgbWljcm9waG9uZSBmb3IgdmlkZW8gcmVjb3JkaW5nXCI7XG4gIGxpbmUtaGVpZ2h0OiAxMzUlO1xufVxuXG4udmpzLXJlY29yZCAudmpzLWRldmljZS1idXR0b24udmpzLWNvbnRyb2wucGVybWlzc2lvbi1kZW5pZWQ6YmVmb3JlIHtcbiAgZm9udC1zaXplOiAxNnB4ICFpbXBvcnRhbnQ7XG4gIGNvbG9yOiAjMjYyMTM2O1xuICBjb250ZW50OiBcIlVuYWJsZSB0byBhY2Nlc3MgeW91ciBjYW1lcmEgYW5kIG1pY3JvcGhvbmVcIjtcbn1cblxuLnZqcy1yZWNvcmQgLnZqcy1kZXZpY2UtYnV0dG9uLnZqcy1jb250cm9sOmFmdGVyIHtcbiAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xuICBiYWNrZ3JvdW5kOiAjRjBGMEY1O1xuICBmb250LXNpemU6IDEzcHg7XG4gIGJvcmRlci1yYWRpdXM6IDRweDtcbiAgY29udGVudDogXCJSZXF1ZXN0IFBlcm1pc3Npb25zXCI7XG4gIHBhZGRpbmc6IDFlbSAyZW07XG4gIGNvbG9yOiAjMzMzO1xuICBtYXJnaW4tdG9wOiAyMHB4O1xufVxuXG4udmpzLXJlY29yZCAudmpzLWRldmljZS1idXR0b24udmpzLWNvbnRyb2wucGVybWlzc2lvbi1kZW5pZWQ6YWZ0ZXIge1xuICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XG4gIGJhY2tncm91bmQ6IHdoaXRlO1xuICBmb250LXNpemU6IDEzcHg7XG4gIGNvbnRlbnQ6IFwiUGxlYXNlIGdvIHRvIHlvdXIgYnJvd3NlciBzZXR0aW5ncyBhbmQgdXBkYXRlIHBlcm1pc3Npb25zIHRvIGVuYWJsZSByZWNvcmRpbmdcIjtcbiAgcGFkZGluZzogMWVtO1xuICBjb2xvcjogIzRCNTc1RDtcbiAgbWFyZ2luOiA1cHg7XG4gIGxpbmUtaGVpZ2h0OiAxMzUlO1xuICB0ZXh0LWFsaWduOiBjZW50ZXI7XG59XG5cbi52anMtY29udHJvbC52anMtYnV0dG9uLnVsLXZpZGVvLXJlY29yZGVyLWRlbGV0ZS1idXR0b24sIC52anMtY29udHJvbC52anMtYnV0dG9uLnVsLXZpZGVvLXJlY29yZGVyLXRvZ2dsZS1idXR0b24sIC52anMtY29udHJvbC52anMtYnV0dG9uLnVsLXZpZGVvLXJlY29yZGVyLWNhbWVyYS1vZmYtYnV0dG9uLWF1ZGlvLW9ubHksIC52anMtY29udHJvbC52anMtYnV0dG9uLnVsLXZpZGVvLXJlY29yZGVyLWNhbWVyYS1vZmYtYnV0dG9uIHtcbiAgY3Vyc29yOiBwb2ludGVyO1xufVxuXG4udWwtdmlkZW8tcmVjb3JkZXItZGVsZXRlLWJ1dHRvbiAudmpzLWljb24tcGxhY2Vob2xkZXI6YmVmb3JlIHtcbiAgY29udGVudDogdXJsKFwiZGF0YTppbWFnZS9zdmcreG1sLCUzQ3N2ZyB3aWR0aD0nMTYnIGhlaWdodD0nMTYnIHZpZXdCb3g9JzAgMCAxNiAxNicgZmlsbD0nbm9uZScgeG1sbnM9J2h0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnJyUzRSUzQ3BhdGggZD0nTTkuMjEyMzQgNy4zNzU0OVYxMS4xMTkzTTIuNTM5MzEgNC4yNTU5NUgxMy40NTkzSDIuNTM5MzFaTTUuNTcyMzQgNC4yNTU5NVYzLjAwODMzQzUuNTcyMjIgMi44NDQzMyA1LjYwMzU0IDIuNjgxOTIgNS42NjQ1IDIuNTMwMzhDNS43MjU0NiAyLjM3ODg0IDUuODE0ODggMi4yNDExNSA1LjkyNzYyIDIuMTI1MTlDNi4wNDAzNyAyLjAwOTIyIDYuMTc0MjQgMS45MTcyNiA2LjMyMTU4IDEuODU0NTZDNi40Njg5MiAxLjc5MTg1IDYuNjI2ODMgMS43NTk2NCA2Ljc4NjI4IDEuNzU5NzdIOS4yMTIzNEM5LjM3MTc5IDEuNzU5NjQgOS41Mjk3IDEuNzkxODUgOS42NzcwMyAxLjg1NDU2QzkuODI0MzcgMS45MTcyNiA5Ljk1ODI0IDIuMDA5MjIgMTAuMDcxIDIuMTI1MTlDMTAuMTgzNyAyLjI0MTE1IDEwLjI3MzIgMi4zNzg4NCAxMC4zMzQxIDIuNTMwMzhDMTAuMzk1MSAyLjY4MTkyIDEwLjQyNjQgMi44NDQzMyAxMC40MjYzIDMuMDA4MzNWNC4yNTU5NUg1LjU3MjM0Wk0xMi4yNDYzIDQuMjU1OTVWMTIuOTkxMkMxMi4yNDYzIDEzLjMyMjMgMTIuMTE4NCAxMy42Mzk5IDExLjg5MDcgMTMuODc0MUMxMS42NjMxIDE0LjEwODIgMTEuMzU0MyAxNC4yMzk4IDExLjAzMjMgMTQuMjM5OEg0Ljk2NjI4QzQuNjQ0MzIgMTQuMjM5OCA0LjMzNTU1IDE0LjEwODIgNC4xMDc4OSAxMy44NzQxQzMuODgwMjMgMTMuNjM5OSAzLjc1MjM0IDEzLjMyMjMgMy43NTIzNCAxMi45OTEyVjQuMjU1OTVIMTIuMjQ2M1pNNi43ODYyOCA3LjM3NTQ5VjExLjExOTNWNy4zNzU0OVonIHN0cm9rZT0nYmxhY2snIHN0cm9rZS13aWR0aD0nMS41JyBzdHJva2UtbGluZWNhcD0ncm91bmQnIHN0cm9rZS1saW5lam9pbj0ncm91bmQnLyUzRSUzQy9zdmclM0UlMEFcIik7XG59XG5cbi51bC12aWRlby1yZWNvcmRlci10b2dnbGUtYnV0dG9uIC52anMtaWNvbi1wbGFjZWhvbGRlcjpiZWZvcmUge1xuICBjb250ZW50OiB1cmwoXCJkYXRhOmltYWdlL3N2Zyt4bWwsJTNDc3ZnIHdpZHRoPScxNicgaGVpZ2h0PScxNicgdmlld0JveD0nMCAwIDE2IDE2JyBmaWxsPSdub25lJyB4bWxucz0naHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmcnJTNFJTNDcGF0aCBkPSdNOCAwQzEyLjQxODMgMCAxNiAzLjU4MTcyIDE2IDhDMTYgMTIuNDE4MyAxMi40MTgzIDE2IDggMTZDMy41ODE3MiAxNiAwIDEyLjQxODMgMCA4QzAgMy41ODE3MiAzLjU4MTcyIDAgOCAwWicgZmlsbD0nJTIzRDE1MTUzJy8lM0UlM0Mvc3ZnJTNFXCIpO1xufVxuXG4udWwtdmlkZW8tcmVjb3JkZXItdG9nZ2xlLWJ1dHRvbi51bC1yZWNvcmRpbmctaW4tc2Vzc2lvbiAudmpzLWljb24tcGxhY2Vob2xkZXI6YmVmb3JlIHtcbiAgY29udGVudDogdXJsKFwiZGF0YTppbWFnZS9zdmcreG1sLCUzQ3N2ZyB3aWR0aD0nMTInIGhlaWdodD0nMTInIHZpZXdCb3g9JzAgMCAxMiAxMicgZmlsbD0nbm9uZScgeG1sbnM9J2h0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnJyUzRSUzQ3BhdGggZD0nTTEyIDEwTDEyIDJDMTIgMC44OTU0MyAxMS4xMDQ2IC00Ljg1Mzk2ZS0wNyAxMCAtNC4zNzExNGUtMDdMMiAtOC43NDIyOGUtMDhDMC44OTU0MyAtMy45MTQwNWUtMDggLTQuODUzOTZlLTA3IDAuODk1NDMxIC00LjM3MTE0ZS0wNyAyTC04Ljc0MjI4ZS0wOCAxMEMtMy45MTQwNWUtMDggMTEuMTA0NiAwLjg5NTQzMSAxMiAyIDEyTDEwIDEyQzExLjEwNDYgMTIgMTIgMTEuMTA0NiAxMiAxMFonIGZpbGw9JyUyM0QxNTE1MycvJTNFJTNDL3N2ZyUzRSUwQVwiKTtcbn1cblxuLnVsLXZpZGVvLXJlY29yZGVyLWRlbGV0ZS1idXR0b24gLnZqcy1pY29uLXBsYWNlaG9sZGVyLCAudWwtdmlkZW8tcmVjb3JkZXItdG9nZ2xlLWJ1dHRvbiAudmpzLWljb24tcGxhY2Vob2xkZXIge1xuICB0cmFuc2Zvcm06IHRyYW5zbGF0ZSgwcHgsIDdweCk7XG4gIC1tb3otdHJhbnNmb3JtOiB0cmFuc2xhdGUoMHB4LCA1cHgpO1xufVxuXG4udWwtcmVjb3JkaW5nLWluLXNlc3Npb24udWwtdmlkZW8tcmVjb3JkZXItdG9nZ2xlLWJ1dHRvbiAudmpzLWljb24tcGxhY2Vob2xkZXIge1xuICB0cmFuc2Zvcm06IHRyYW5zbGF0ZSgwcHgsIDVweCk7XG59XG5cbi51bC12aWRlby1yZWNvcmRlci1jYW1lcmEtb2ZmLWJ1dHRvbiAudmpzLWljb24tcGxhY2Vob2xkZXIge1xuICB0cmFuc2Zvcm06IHRyYW5zbGF0ZSgxcHgsIDdweCk7XG4gIC1tb3otdHJhbnNmb3JtOiB0cmFuc2xhdGUoMXB4LCA2cHgpO1xufVxuXG4udWwtdmlkZW8tcmVjb3JkZXItY2FtZXJhLW9mZi1idXR0b24tYXVkaW8tb25seSAudmpzLWljb24tcGxhY2Vob2xkZXIge1xuICB0cmFuc2Zvcm06IHNjYWxlKDAuNzUpIHRyYW5zbGF0ZSgxcHgsIDhweCk7XG4gIC1tb3otdHJhbnNmb3JtOiBzY2FsZSgwLjc1KSB0cmFuc2xhdGUoMXB4LCA4cHgpO1xufVxuXG4vKiBmaXggYSBzdWJ0bGUgbWlzYWxpZ25tZW50IGJ1ZyBmb3IgZnVsbCBzY3JlZW4gYnV0dG9ucyAqL1xuLnZqcy1mdWxsc2NyZWVuIC51bC1yZWNvcmRpbmctaW4tc2Vzc2lvbiAudmpzLWljb24tcGxhY2Vob2xkZXIge1xuICB0cmFuc2Zvcm06IHRyYW5zbGF0ZSgwcHgsIDZweCk7XG4gIC1tb3otdHJhbnNmb3JtOiB0cmFuc2xhdGUoMHB4LCA2cHgpO1xufVxuXG4udWwtdmlkZW8tcmVjb3JkZXItY2FtZXJhLW9mZi1idXR0b24gLnZqcy1pY29uLXBsYWNlaG9sZGVyOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IHVybChcImRhdGE6aW1hZ2Uvc3ZnK3htbCwlM0Nzdmcgd2lkdGg9JzE2JyBoZWlnaHQ9JzE2JyB2aWV3Qm94PScwIDAgMTYgMTYnIGZpbGw9J25vbmUnIHhtbG5zPSdodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyclM0UlM0NnIGNsaXAtcGF0aD0ndXJsKCUyM2NsaXAwXzI2NDVfNDY1NCknJTNFJTNDcGF0aCBkPSdNMTUuMTQ5MSA0Ljc1TDEwLjU5OTEgOEwxNS4xNDkxIDExLjI1VjQuNzVaJyBzdHJva2U9J2JsYWNrJyBzdHJva2Utd2lkdGg9JzEuNScgc3Ryb2tlLWxpbmVjYXA9J3JvdW5kJyBzdHJva2UtbGluZWpvaW49J3JvdW5kJy8lM0UlM0NwYXRoIGQ9J005LjI5OTEyIDMuNDUwMkgyLjE0OTEyQzEuNDMxMTUgMy40NTAyIDAuODQ5MTIxIDQuMDMyMjMgMC44NDkxMjEgNC43NTAyVjExLjI1MDJDMC44NDkxMjEgMTEuOTY4MiAxLjQzMTE1IDEyLjU1MDIgMi4xNDkxMiAxMi41NTAySDkuMjk5MTJDMTAuMDE3MSAxMi41NTAyIDEwLjU5OTEgMTEuOTY4MiAxMC41OTkxIDExLjI1MDJWNC43NTAyQzEwLjU5OTEgNC4wMzIyMyAxMC4wMTcxIDMuNDUwMiA5LjI5OTEyIDMuNDUwMlonIHN0cm9rZT0nYmxhY2snIHN0cm9rZS13aWR0aD0nMS41JyBzdHJva2UtbGluZWNhcD0ncm91bmQnIHN0cm9rZS1saW5lam9pbj0ncm91bmQnLyUzRSUzQy9nJTNFJTNDZGVmcyUzRSUzQ2NsaXBQYXRoIGlkPSdjbGlwMF8yNjQ1XzQ2NTQnJTNFJTNDcmVjdCB3aWR0aD0nMTUuNicgaGVpZ2h0PScxNS42JyBmaWxsPSd3aGl0ZScgdHJhbnNmb3JtPSd0cmFuc2xhdGUoMC4xOTk5NTEgMC4yMDAxOTUpJy8lM0UlM0MvY2xpcFBhdGglM0UlM0MvZGVmcyUzRSUzQy9zdmclM0VcIik7XG59XG5cbi51bC12aWRlby1yZWNvcmRlci1jYW1lcmEtb2ZmLWJ1dHRvbi1hdWRpby1vbmx5IC52anMtaWNvbi1wbGFjZWhvbGRlcjpiZWZvcmUge1xuICBjb250ZW50OiB1cmwoXCJkYXRhOmltYWdlL3N2Zyt4bWwsJTNDc3ZnIHdpZHRoPScyMicgaGVpZ2h0PScxNScgZmlsbD0nbm9uZScgeG1sbnM9J2h0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnJyUzRSUzQ3BhdGggZmlsbC1ydWxlPSdldmVub2RkJyBjbGlwLXJ1bGU9J2V2ZW5vZGQnIGQ9J00uNzUgM0EyLjc1IDIuNzUgMCAwMTMuNS4yNWg5LjA4MUEyLjc1IDIuNzUgMCAwMTE1LjMzMSAzdjlhMi43NSAyLjc1IDAgMDEtMi43NSAyLjc1SDMuNUEyLjc1IDIuNzUgMCAwMS43NSAxMlYzek0zLjUgMS43NWMtLjY5IDAtMS4yNS41Ni0xLjI1IDEuMjV2OWMwIC42OS41NiAxLjI1IDEuMjUgMS4yNWg5LjA4MWMuNjkgMCAxLjI1LS41NiAxLjI1LTEuMjVWM2MwLS42OS0uNTYtMS4yNS0xLjI1LTEuMjVIMy41eicgZmlsbD0nJTIzMjYyMTM2Jy8lM0UlM0NwYXRoIGZpbGwtcnVsZT0nZXZlbm9kZCcgY2xpcC1ydWxlPSdldmVub2RkJyBkPSdNMTQuNTMgMi4wM2wtMTIgMTItMS4wNi0xLjA2IDEyLTEyIDEuMDYgMS4wNnpNMjAuODcgMS41MjVhLjc1Ljc1IDAgMDEuMzguNjUydjEwLjU4OGEuNzUuNzUgMCAwMS0xLjEzNC42NDRsLTUuOTItMy41M2EuNzUuNzUgMCAwMS0uMzY1LS42NDN2LTMuNTNhLjc1Ljc1IDAgMDEuMzY2LS42NDRsNS45MTktMy41M2EuNzUuNzUgMCAwMS43NTQtLjAwN3ptLTUuNTM5IDQuNjA3VjguODFsNC40MTkgMi42MzVWMy40OTdsLTQuNDE5IDIuNjM1eicgZmlsbD0nJTIzMjYyMTM2Jy8lM0UlM0Mvc3ZnJTNFXCIpO1xufVxuXG4udWwtdXBsb2FkLXByb2dyZXNzLWxhYmVsIHtcbiAgcGFkZGluZzogMC4xNWVtIDAuNzVlbTtcbiAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAgZm9udC1zaXplOiAxMnB4O1xuICBjb2xvcjogIzMzMztcbiAgYmFja2dyb3VuZDogI0ZDRkNGRDtcbiAgYm9yZGVyLXJhZGl1czogOTlweDtcbiAgdGV4dC1hbGlnbjogY2VudGVyO1xuICBib3JkZXI6IDFweCBzb2xpZCAjRTBFMEVCO1xuICBkaXNwbGF5OiBmbGV4O1xuICBhbGlnbi1pdGVtczogY2VudGVyO1xuICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjtcbiAgcG9zaXRpb246IGFic29sdXRlO1xuICBib3R0b206IDc1cHg7XG4gIGxlZnQ6IGNhbGMoNTAlIC0gNjVweCk7XG4gIHdpZHRoOiAxMzBweDtcbiAgei1pbmRleDogNTtcbn1cblxuLnVsLXVwbG9hZC1wcm9ncmVzcy1sYWJlbF9fdGltZSB7XG4gIGRpc3BsYXk6IGlubGluZS1mbGV4O1xuICBtYXJnaW4tbGVmdDogMC44ZW07XG4gIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG59XG5cbi51bC11cGxvYWQtcHJvZ3Jlc3MtbGFiZWxfX3RpbWU6YmVmb3JlIHtcbiAgY29udGVudDogXCJcIjtcbiAgZGlzcGxheTogaW5saW5lLWZsZXg7XG4gIHdpZHRoOiAxcHg7XG4gIGhlaWdodDogMTJweDtcbiAgYmFja2dyb3VuZC1jb2xvcjogI0UwRTBFQjtcbiAgbWFyZ2luLXJpZ2h0OiAwLjhlbTtcbn1cblxuQGtleWZyYW1lcyBncm93IHtcbiAgMCUge1xuICAgIHRyYW5zZm9ybTogc2NhbGUoMSk7XG4gICAgYmFja2dyb3VuZC1jb2xvcjogI0VFRUNGQztcbiAgfVxuICA1MCUgIHtcbiAgICB0cmFuc2Zvcm06IHNjYWxlKDEuMik7XG4gICAgYmFja2dyb3VuZC1jb2xvcjogI0UxREZGNDtcbiAgfVxuICAxMDAlIHtcbiAgICB0cmFuc2Zvcm06IHNjYWxlKDEpO1xuICAgIGJhY2tncm91bmQtY29sb3I6ICNFRUVDRkM7XG4gIH1cbn1cblxuLnVsLWF1ZGlvLXJlY29yZGVyLXBsYWNlaG9sZGVyOmJlZm9yZSB7XG4gIHdpZHRoOiA4MHB4O1xuICBoZWlnaHQ6IDgwcHg7XG4gIGJvcmRlci1yYWRpdXM6IDEyMHB4O1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAjRUVFQ0ZDO1xuICBjb250ZW50OiBcIlwiO1xuICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gIGxlZnQ6IGNhbGMoNTAlIC0gNDBweCk7XG4gIHRvcDogY2FsYyg1MCUgLSA0MHB4KTtcbiAgYW5pbWF0aW9uOiA2cyBpbmZpbml0ZSBncm93O1xuICB0cmFuc2Zvcm0tb3JpZ2luOiA1MCUgNjAlO1xufVxuXG4udWwtYXVkaW8tcmVjb3JkZXItcGxhY2Vob2xkZXI6YWZ0ZXIge1xuICBjb250ZW50OiB1cmwoXCJkYXRhOmltYWdlL3N2Zyt4bWwsJTNDc3ZnIHdpZHRoPSc5OCcgaGVpZ2h0PSc5OCcgZmlsbD0nbm9uZScgeG1sbnM9J2h0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnJyUzRSUzQ21hc2sgaWQ9J2EnIG1hc2tVbml0cz0ndXNlclNwYWNlT25Vc2UnIHg9JzAnIHk9JzAnIHdpZHRoPSc5OCcgaGVpZ2h0PSc5OCclM0UlM0NjaXJjbGUgY3g9JzQ5JyBjeT0nNDknIHI9JzQ5JyBmaWxsPSclMjNFREVDRjgnLyUzRSUzQy9tYXNrJTNFJTNDZyBtYXNrPSd1cmwoJTIzYSknJTNFJTNDY2lyY2xlIGN4PSc0OScgY3k9JzQ5JyByPSc1MCcgZmlsbD0nJTIzNjQ1Q0MyJy8lM0UlM0NwYXRoIGZpbGwtcnVsZT0nZXZlbm9kZCcgY2xpcC1ydWxlPSdldmVub2RkJyBkPSdNMTEuNDIyIDgxLjgxMmM1LjQwNS0xNS41NDcgMjAuMTg3LTI2LjcwNiAzNy41NzYtMjYuNzA2IDE3LjM5IDAgMzIuMTcyIDExLjE1OSAzNy41NzcgMjYuNzA3LTkuMTY0IDEwLjQzLTIyLjYwMSAxNy4wMTMtMzcuNTc2IDE3LjAxMy0xNC45NzYgMC0yOC40MTQtNi41ODMtMzcuNTc3LTE3LjAxNHonIGZpbGw9JyUyM2ZmZicgZmlsbC1vcGFjaXR5PScuNicvJTNFJTNDY2lyY2xlIGN4PSc0OScgY3k9JzI5JyByPScxNycgZmlsbD0nJTIzZmZmJyBmaWxsLW9wYWNpdHk9Jy43Jy8lM0UlM0MvZyUzRSUzQy9zdmclM0VcIik7XG4gIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgbGVmdDogNTAlO1xuICB0b3A6IDUwJTtcbiAgdHJhbnNmb3JtOiB0cmFuc2xhdGUoLTUwJSwgLTUwJSk7XG4gIHRyYW5zZm9ybTogdHJhbnNsYXRlKC01MCUsIC01MCUpIHNjYWxlKDAuNik7XG59XG5cbi51bC1hdWRpby1yZWNvcmRlci1wbGFjZWhvbGRlciB7XG4gIG1pbi1oZWlnaHQ6IDE1MHB4O1xuICB3aWR0aDogMTAwJTtcbiAgYmFja2dyb3VuZC1jb2xvcjogI2ZjZmNmZDtcbiAgZGlzcGxheTogYmxvY2s7XG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcbn1cblxuLnZqcy1mdWxsc2NyZWVuIC51bC1hdWRpby1yZWNvcmRlci1wbGFjZWhvbGRlciB7XG4gIHZlcnRpY2FsLWFsaWduOiBtaWRkbGU7XG4gIGRpc3BsYXk6IHRhYmxlLWNlbGw7XG59XG5cbkBrZXlmcmFtZXMgZ3JvdyB7XG4gIDAlIHtcbiAgICB0cmFuc2Zvcm06IHNjYWxlKDEpO1xuICAgIGJhY2tncm91bmQtY29sb3I6ICNFRUVDRkM7XG4gIH1cbiAgNTAlICB7XG4gICAgdHJhbnNmb3JtOiBzY2FsZSgxLjIpO1xuICAgIGJhY2tncm91bmQtY29sb3I6ICNFMURGRjQ7XG4gIH1cbiAgMTAwJSB7XG4gICAgdHJhbnNmb3JtOiBzY2FsZSgxKTtcbiAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjRUVFQ0ZDO1xuICB9XG59XG5cbi52anMtZnVsbHNjcmVlbiAudWwtY29udHJvbC1wYW5lbCB7XG4gIGhlaWdodDogODBweDtcbiAgcG9zaXRpb246IGFic29sdXRlO1xuICBib3R0b206IDA7XG4gIGxlZnQ6IDA7XG4gIHdpZHRoOiAxMDAlO1xuICBtYXgtd2lkdGg6IDEwMCU7XG4gIGJhY2tncm91bmQtY29sb3I6ICNGOEY4Rjg7XG59XG5cbi51bC1idXR0b25zLXBhbmVsIHtcbiAgbWFyZ2luOiAxMHB4O1xuICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjtcbn1cblxuLnZqcy1wbGF5YmFjay1yYXRlIC52anMtcGxheWJhY2stcmF0ZS12YWx1ZSB7XG4gIGZvbnQtc2l6ZTogMTJweDtcbiAgdHJhbnNmb3JtOiB0cmFuc2xhdGUoMCwgM3B4KTtcbn1cblxuLnZqcy1wbGF5YmFjay1yYXRlIC52anMtbWVudSB7XG4gIHRyYW5zZm9ybTogdHJhbnNsYXRlKC02cHgsIDEycHgpO1xuICBwb3NpdGlvbjogdW5zZXQ7XG59XG5cbi52anMtbWVudS1idXR0b24tcG9wdXAgLnZqcy1tZW51IC52anMtbWVudS1jb250ZW50IHtcbiAgYmFja2dyb3VuZC1jb2xvcjogd2hpdGU7XG4gIGJvcmRlcjogMXB4IHNvbGlkIHJnYmEoMCwgMCwgMCwgMC4xKTtcbiAgYm94LXNpemluZzogYm9yZGVyLWJveDtcbiAgYm9yZGVyLXJhZGl1czogNHB4O1xufVxuXG4udmpzLW1lbnUtYnV0dG9uLXBvcHVwIC52anMtbWVudSB7XG4gIG1hcmdpbi1ib3R0b206IHVuc2V0O1xufVxuXG4udmpzLW1lbnUgbGkge1xuICBmb250LXNpemU6IDEycHg7XG4gIHBhZGRpbmc6IDVweCAwO1xufVxuXG4udmpzLW1lbnUgbGkudmpzLXNlbGVjdGVkIHtcbiAgY29sb3I6IGxpZ2h0Z3JheTtcbn1cblxuLnZqcy1tZW51IGxpLnZqcy1tZW51LWl0ZW06aG92ZXIge1xuICBiYWNrZ3JvdW5kLWNvbG9yOiByZ2JhKDAsIDAsIDAsIDAuMDUpO1xufVxuXG4udmpzLWZ1bGxzY3JlZW4gLnVsLWJ1dHRvbnMtcGFuZWwge1xuICB0b3A6IGNhbGMoNTAlIC0gMzBweCk7XG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcbn1cblxuLnZqcy1mdWxsc2NyZWVuIC52anMtcmVjb3JkLWluZGljYXRvci52anMtY29udHJvbCB7XG4gIGJvdHRvbTogOTBweCAhaW1wb3J0YW50O1xufVxuXG4udmpzLXJlY29yZC52aWRlby1qcyBkaXYudmpzLWNvbnRyb2wudmpzLXJlY29yZC1pbmRpY2F0b3Ige1xuICBwYWRkaW5nOiAwLjNlbSAwLjc1ZW0gMC4xNWVtIDE1cHg7XG4gIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gIGZvbnQtc2l6ZTogMTJweDtcbiAgY29sb3I6ICMzMzM7XG4gIGJhY2tncm91bmQ6ICNGQ0ZDRkQ7XG4gIGJvcmRlci1yYWRpdXM6IDk5cHg7XG4gIHRleHQtYWxpZ246IGNlbnRlcjtcbiAgYm9yZGVyOiAxcHggc29saWQgI0UwRTBFQjtcbiAgZGlzcGxheTogZmxleDtcbiAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7XG4gIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgYm90dG9tOiA3NXB4O1xuICB0b3A6IGF1dG87XG4gIGxlZnQ6IGNhbGMoNTAlIC0gMjFweCk7XG4gIHdpZHRoOiA0M3B4O1xuICBoZWlnaHQ6IDE2cHg7XG4gIHotaW5kZXg6IDQ7XG59XG5cbi52anMtcmVjb3JkLnZpZGVvLWpzIGRpdi52anMtY29udHJvbC52anMtcmVjb3JkLWluZGljYXRvcjphZnRlciB7XG4gIGNvbnRlbnQ6IFwiXCI7XG4gIGJhY2tncm91bmQtY29sb3I6ICNFQjU3NTc7XG4gIHdpZHRoOiA2cHg7XG4gIGhlaWdodDogNnB4O1xuICBib3JkZXItcmFkaXVzOiA4cHg7XG4gIGFuaW1hdGlvbjogbm9uZTtcbiAgdG9wOiA0cHg7XG4gIGxlZnQ6IDVweDtcbn1cblxuLnZqcy1yZWNvcmQudmlkZW8tanMgZGl2LnZqcy1jb250cm9sLnZqcy1yZWNvcmQtaW5kaWNhdG9yOmJlZm9yZSB7XG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgZm9udC1zaXplOiA5cHg7XG4gIGFuaW1hdGlvbjogbm9uZTtcbiAgb3BhY2l0eTogMTtcbiAgY29sb3I6ICMzMzM7XG4gIHRvcDogYXV0bztcbiAgbGVmdDogYXV0bztcbn1cblxuLnVsLXZpZGVvLXBsYXllci1sb2FkaW5nIHtcbiAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xuICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gIHdpZHRoOiA2cmVtO1xuICBoZWlnaHQ6IDZyZW07XG5cbn1cbi51bC12aWRlby1wbGF5ZXItbG9hZGluZyBkaXYge1xuICBib3gtc2l6aW5nOiBib3JkZXItYm94O1xuICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gIGRpc3BsYXk6IGJsb2NrO1xuICB3aWR0aDogODAlO1xuICBoZWlnaHQ6IDgwJTtcbiAgbWFyZ2luOiA1cHg7XG4gIGJvcmRlcjogNXB4IHNvbGlkICM2NjY7XG4gIGJvcmRlci1yYWRpdXM6IDUwJTtcbiAgYW5pbWF0aW9uOiBsZHMtcmluZyAxLjJzIGN1YmljLWJlemllcigwLjUsIDAsIDAuNSwgMSkgaW5maW5pdGU7XG4gIGJvcmRlci1jb2xvcjogIzY2NiB0cmFuc3BhcmVudCB0cmFuc3BhcmVudCB0cmFuc3BhcmVudDtcbn1cblxuLmZpcnN0IHtcbiAgYW5pbWF0aW9uLWRlbGF5OiAtMC40NXM7XG59XG4uc2Vjb25kIHtcbiAgYW5pbWF0aW9uLWRlbGF5OiAtMC4zcztcbn1cbi50aGlyZCB7XG4gIGFuaW1hdGlvbi1kZWxheTogLTAuMTVzO1xufVxuXG5Aa2V5ZnJhbWVzIGxkcy1yaW5nIHtcbiAgMCUge1xuICAgIHRyYW5zZm9ybTogcm90YXRlKDBkZWcpO1xuICB9XG4gIDEwMCUge1xuICAgIHRyYW5zZm9ybTogcm90YXRlKDM2MGRlZyk7XG4gIH1cbn1cblxuLnVsLXZpZGVvLWJ0biB7XG4gIHdpZHRoOiAxMDAlO1xuICBib3JkZXI6IDFweCBzb2xpZCAjRTZFNkU2O1xuICBib3JkZXItcmFkaXVzOiA0cHg7XG4gIGJhY2tncm91bmQtY29sb3I6IHJnYmEoMCwgMCwgMCwgMC4wMik7XG4gIHBhZGRpbmc6IDhweDtcbiAgZm9udC13ZWlnaHQ6IDUwMDtcbiAgZm9udC1zaXplOiAxNXB4O1xufVxuXG4udWwtcmVjb3JkLXJlc3BvbnNlLWJ0bjpiZWZvcmUsIC51bC1yZWNvcmQtcmVzcG9uc2UtYnRuOmFmdGVyLCAudWwtYmFjay1xdWVzdGlvbi1idG46YmVmb3JlLCAudWwtYmFjay1xdWVzdGlvbi1idG46YWZ0ZXIge1xuICBtYXJnaW46IDAgNXB4O1xuICB2ZXJ0aWNhbC1hbGlnbjogbWlkZGxlO1xufVxuXG4udWwtcmVjb3JkLXJlc3BvbnNlLWJ0bjpiZWZvcmUge1xuICBjb250ZW50OiB1cmwoXCJkYXRhOmltYWdlL3N2Zyt4bWwsJTNDc3ZnIHdpZHRoPScxNicgaGVpZ2h0PScxNicgdmlld0JveD0nMCAwIDE2IDE2JyBmaWxsPSdub25lJyB4bWxucz0naHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmcnJTNFJTNDZyBjbGlwLXBhdGg9J3VybCglMjNjbGlwMF8yNjQ1XzQ2NTQpJyUzRSUzQ3BhdGggZD0nTTE1LjE0OTEgNC43NUwxMC41OTkxIDhMMTUuMTQ5MSAxMS4yNVY0Ljc1Wicgc3Ryb2tlPSdibGFjaycgc3Ryb2tlLXdpZHRoPScxLjUnIHN0cm9rZS1saW5lY2FwPSdyb3VuZCcgc3Ryb2tlLWxpbmVqb2luPSdyb3VuZCcvJTNFJTNDcGF0aCBkPSdNOS4yOTkxMiAzLjQ1MDJIMi4xNDkxMkMxLjQzMTE1IDMuNDUwMiAwLjg0OTEyMSA0LjAzMjIzIDAuODQ5MTIxIDQuNzUwMlYxMS4yNTAyQzAuODQ5MTIxIDExLjk2ODIgMS40MzExNSAxMi41NTAyIDIuMTQ5MTIgMTIuNTUwMkg5LjI5OTEyQzEwLjAxNzEgMTIuNTUwMiAxMC41OTkxIDExLjk2ODIgMTAuNTk5MSAxMS4yNTAyVjQuNzUwMkMxMC41OTkxIDQuMDMyMjMgMTAuMDE3MSAzLjQ1MDIgOS4yOTkxMiAzLjQ1MDJaJyBzdHJva2U9J2JsYWNrJyBzdHJva2Utd2lkdGg9JzEuNScgc3Ryb2tlLWxpbmVjYXA9J3JvdW5kJyBzdHJva2UtbGluZWpvaW49J3JvdW5kJy8lM0UlM0MvZyUzRSUzQ2RlZnMlM0UlM0NjbGlwUGF0aCBpZD0nY2xpcDBfMjY0NV80NjU0JyUzRSUzQ3JlY3Qgd2lkdGg9JzE1LjYnIGhlaWdodD0nMTUuNicgZmlsbD0nd2hpdGUnIHRyYW5zZm9ybT0ndHJhbnNsYXRlKDAuMTk5OTUxIDAuMjAwMTk1KScvJTNFJTNDL2NsaXBQYXRoJTNFJTNDL2RlZnMlM0UlM0Mvc3ZnJTNFXCIpO1xuICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XG4gIHRyYW5zZm9ybTogdHJhbnNsYXRlKDBweCwgMnB4KTtcbn1cblxuLnVsLXJlY29yZC1yZXNwb25zZS1idG46YWZ0ZXIge1xuICBjb250ZW50OiAnUmVjb3JkIHlvdXIgUmVzcG9uc2UnO1xufVxuXG4udWwtYmFjay1xdWVzdGlvbi1idG46YmVmb3JlIHtcbiAgY29udGVudDogdXJsKFwiZGF0YTppbWFnZS9zdmcreG1sLCUzQ3N2ZyB3aWR0aD0nMTUnIGhlaWdodD0nMTYnIHZpZXdCb3g9JzAgMCAxNSAxNicgZmlsbD0nbm9uZScgeG1sbnM9J2h0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnJyUzRSUzQ3BhdGggZD0nTTEzLjg3NTcgOC4yMjM2MUwxLjExMTggMTQuNjA1NkMwLjk0NTU3OCAxNC42ODg3IDAuNzUgMTQuNTY3OCAwLjc1IDE0LjM4MlYxLjYxODAzQzAuNzUgMS40MzIxOSAwLjk0NTU3OSAxLjMxMTMxIDEuMTExOCAxLjM5NDQzTDEzLjg3NTcgNy43NzYzOUMxNC4wNiA3Ljg2ODUyIDE0LjA2IDguMTMxNDggMTMuODc1NyA4LjIyMzYxWicgc3Ryb2tlPSdibGFjaycgc3Ryb2tlLXdpZHRoPScxLjUnIHN0cm9rZS1saW5lY2FwPSdyb3VuZCcvJTNFJTNDL3N2ZyUzRVwiKTtcbiAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xuICB0cmFuc2Zvcm06IHNjYWxlKDAuODUpIHRyYW5zbGF0ZSgwLCAxcHgpO1xuICAtbW96LXRyYW5zZm9ybTogc2NhbGUoMC44NSkgdHJhbnNsYXRlKDAsIDJweCk7XG59XG5cbi51bC1iYWNrLXF1ZXN0aW9uLWJ0bjphZnRlciB7XG4gIGNvbnRlbnQ6ICdCYWNrIHRvIFF1ZXN0aW9uJztcbn1cblxuLmhpZGRlbiB7XG4gIGRpc3BsYXk6IG5vbmUgIWltcG9ydGFudDtcbiAgb3BhY2l0eTogMDtcbiAgdmlzaWJpbGl0eTogaGlkZGVuO1xufVxuXG4udmlzaWJsZSB7XG4gIHZpc2liaWxpdHk6IHZpc2libGU7XG4gIG9wYWNpdHk6IDE7XG4gIGFuaW1hdGlvbjogZmFkZSAwLjNzO1xufVxuXG5Aa2V5ZnJhbWVzIGZhZGUge1xuICAwJSB7XG4gICAgICBvcGFjaXR5OiAwO1xuICB9XG5cbiAgMTAwJSB7XG4gICAgICBvcGFjaXR5OiAxO1xuICB9XG59XG5cbiN1bC1yZWNvcmRpbmctY291bnRkb3duLXNjcmVlbiB7XG4gIHdpZHRoOiAxMDAlO1xuICBoZWlnaHQ6IDEwMCU7XG4gIGNvbG9yOiBibGFjaztcbiAgYmFja2dyb3VuZC1jb2xvcjogcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjgpO1xuICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gIHRleHQtYWxpZ246IGNlbnRlcjtcbiAgZm9udC1zaXplOiAxNXB4O1xuICB6LWluZGV4OiAxO1xuICBkaXNwbGF5OiB0YWJsZTtcbn1cblxuLnVsLWNvdW50ZG93bi10ZXh0IHtcbiAgdmVydGljYWwtYWxpZ246IG1pZGRsZTtcbiAgZGlzcGxheTogdGFibGUtY2VsbDtcbiAgdHJhbnNmb3JtOiB0cmFuc2xhdGUoMCwgLTI1cHgpO1xufVxuXG4udmpzLWZ1bGxzY3JlZW4gPiAjdWwtcmVjb3JkaW5nLWNvdW50ZG93bi1zY3JlZW4ge1xuICBmb250LXNpemU6IDI1cHg7XG4gIHRyYW5zZm9ybTogdW5zZXQ7XG59XG5cbi52anMtY29udHJvbCAudmpzLWljb24tcGxhY2Vob2xkZXI6YmVmb3JlIHtcbiAgZGlzcGxheTogZmxleDtcbiAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7XG59XG5cbiN1bC1TcGVlZCB7XG4gIHRyYW5zZm9ybTogdHJhbnNsYXRlKDAsIDM1cHgpO1xufVxuXG4udmpzLXBvc3RlciB7XG4gIGJhY2tncm91bmQtcG9zaXRpb246IHVuc2V0O1xufVxuIn1dLG5lPSItdmlkZW8tcGxheWVyIixyZT0iLXZpZGVvLXJlY29yZGVyIjtsZXQgb2UsaWU7Y29uc3QgYWU9YXN5bmModCxlLG4scixvLGkpPT57Y29uc3QgYT1kb2N1bWVudC5kb2N1bWVudEVsZW1lbnQsYz17c2NyZWVuV2lkdGg6d2luZG93LnNjcmVlbi53aWR0aCxzY3JlZW5IZWlnaHQ6d2luZG93LnNjcmVlbi5oZWlnaHQsY2xpZW50V2lkdGg6YS5jbGllbnRXaWR0aCxjbGllbnRIZWlnaHQ6YS5jbGllbnRIZWlnaHQsbG9jYXRpb246d2luZG93LmxvY2F0aW9uLmhyZWYsbGFuZ3VhZ2U6bmF2aWdhdG9yLmxhbmd1YWdlfSxzPXthY3Rpb246ZSxlcnI6e21lc3NhZ2U6dC5tZXNzYWdlLHN0YWNrOnQuc3RhY2t9LG1ldGE6Yyx2aWQ6byxlbnZJZDppfTsoYXdhaXQgZmV0Y2goYCR7bn0vc2RrLzEvZXJyb3JzYCx7bWV0aG9kOiJQT1NUIixjYWNoZToibm8tY2FjaGUiLGhlYWRlcnM6ey4uLnIsInVzZXJsZWFwLXBsYXRmb3JtIjoidmlkZW9fcmVjb3JkZXIiLCJ4LXVsLWVycm9yIjp3aW5kb3cuYnRvYShgdXNlcmxlYXAtJHtEYXRlLm5vdygpfS1lcnJvcmApfSxib2R5OkpTT04uc3RyaW5naWZ5KHMpfSkpLm9rfHxjb25zb2xlLndhcm4oIltVc2VyTGVhcF0gKEVSUi00NDQpIEZhaWxlZCB0byByZXBvcnQgZXJyb3IgdG8gQVBJIix0KX0sY2U9KHQsZSxuKT0+e2lmKDA9PT1lLmxlbmd0aClyZXR1cm4gbiYmbigpO1Byb21pc2UuYWxsKGUucmVkdWNlKCgoZSxuKT0+KGUucHVzaCgoKHQse3R5cGU6ZSxjb250ZW50Om59KT0+bmV3IFByb21pc2UoKGZ1bmN0aW9uKHIsbyl7bGV0IGk7InNjcmlwdCI9PT1lPyhpPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInNjcmlwdCIpLGkuc3JjPW4pOiJsaW5rIj09PWU/KGk9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgibGluayIpLGkucmVsPSJzdHlsZXNoZWV0IixpLmhyZWY9bixpLnR5cGU9InRleHQvY3NzIik6KGk9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgic3R5bGUiKSxpLmlubmVySFRNTD1uKSxpLm9ubG9hZD1mdW5jdGlvbigpe3Iobil9LGkub25lcnJvcj1mdW5jdGlvbigpe28obil9LGkuYXN5bmM9ITEsaS5pZD1idG9hKG4pLHQuYXBwZW5kQ2hpbGQoaSl9KSkpKHQsbikpLGUpKSxbXSkpLnRoZW4oKCgpPT57biYmbigpfSkpLmNhdGNoKChmdW5jdGlvbih0KXtjb25zb2xlLmxvZyh0KyIgZmFpbGVkIHRvIGxvYWQiKX0pKX0sc2U9KHQsZSxuKT0+e2lmKCJzdGFydCI9PT1lJiYodC5zdHlsZS52aXNpYmlsaXR5PSJ2aXNpYmxlIiksIm5vbmUiPT09ZSl0LnN0eWxlLnZpc2liaWxpdHk9S3Q7ZWxzZSBpZigic3VjY2VzcyI9PT1lKXQuc3R5bGUudmlzaWJpbGl0eT1LdCx0LmlubmVySFRNTD0iVXBsb2FkIHN1Y2NlZWRlZCEiO2Vsc2V7Y29uc3QgZT1NYXRoLnJvdW5kKHBhcnNlRmxvYXQobikpO3QuaW5uZXJIVE1MPWBVcGxvYWRpbmcgPHNwYW4gY2xhc3M9InVsLXVwbG9hZC1wcm9ncmVzcy1sYWJlbF9fdGltZSI+JHtlfSU8L3NwYW4+YCx0LnN0eWxlLmJhY2tncm91bmQ9YGxpbmVhci1ncmFkaWVudCh0byByaWdodCwgI0UwRTBFQiAwJSwgI0UwRTBFQiAke2V9JSwgI0ZDRkNGRCAke2V9JSwgI0ZDRkNGRCAxMDAlKWB9fSx1ZT0odCxlKT0+e2NvbnN0IG49bmV3KHdpbmRvdy52aWRlb2pzLmdldENvbXBvbmVudCgiQ29tcG9uZW50IikpKHQpO3JldHVybiBuLmFkZENsYXNzKCJ1bC1idXR0b25zLXBhbmVsIiksZS5tYXAoKHQ9PntuLmFkZENoaWxkKHQpfSkpLGxlKG4pLG59LGxlPXQ9Pnt0LmNoaWxkcmVuKCkuZm9yRWFjaCgodD0+e2lmKGplW3QubmFtZV9dKXtjb25zdCBlPWZlKGplW3QubmFtZV9dLGB1bC0ke2plW3QubmFtZV9dfWApO3QuZWxfLmFwcGVuZENoaWxkKGUpfX0pKX0sZmU9KHQsZT0iIik9Pntjb25zdCBuPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInNwYW4iKTtyZXR1cm4gbi5jbGFzc05hbWU9InVsLWJ1dHRvbi10ZXh0IixuLmlubmVySFRNTD10LG4uaWQ9ZSxufSxkZT0odCxlLG4scixvPSExKT0+e3QuYWRkQ2xhc3MoInVsLXZpZGVvLXBsYXllciIpO2NvbnN0IGk9bmV3KHdpbmRvdy52aWRlb2pzLmdldENvbXBvbmVudCgiQ29tcG9uZW50IikpKHQpO2kuYWRkQ2xhc3MoInVsLWNvbnRyb2wtcGFuZWwiKSx0LnByb2dyZXNzQmFyPWkuYWRkQ2hpbGQoIlByb2dyZXNzQ29udHJvbCIpLG4mJnQuc3JjKG4pLHQuYXVkaW9QbGF5ZXJQbGFjZWhvbGRlcj1uZXcod2luZG93LnZpZGVvanMuZ2V0Q29tcG9uZW50KCJDb21wb25lbnQiKSkodCksdC5hdWRpb1BsYXllclBsYWNlaG9sZGVyLmFkZENsYXNzKCJ1bC1hdWRpby1yZWNvcmRlci1wbGFjZWhvbGRlciIpO2NvbnN0IGE9biYmbi5zcmM/d2Uobi5zcmMpOm51bGw7IW58fCFvJiZhPyh0LmF1ZGlvUGxheWVyUGxhY2Vob2xkZXIuaGlkZSgpLGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGAke3QuaWQoKX1faHRtbDVfYXBpYCkuc3R5bGUuaGVpZ2h0PSIxMDAlIixhJiZ0LnBvc3RlcihhKSk6KHQuY2hpbGRyZW4oKVswXS5jbGFzc0xpc3QuYWRkKCJ2anMtaGlkZGVuIiksZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoYCR7dC5pZCgpfV9odG1sNV9hcGlgKS5zdHlsZS5oZWlnaHQ9IjBweCIpLHQub24oInBsYXkiLCgoKT0+e298fCFufHxhfHx5ZSh0LCExKX0pKSx0LmFkZENoaWxkKHQuYXVkaW9QbGF5ZXJQbGFjZWhvbGRlcix7fSwxKSxpLmFkZENoaWxkKGUpLHQuYWRkQ2hpbGQoaSksciYmcih0KX0scGU9KHQsZSxuLHIsbyxpLGEsYz0hMSk9PntpZT1EYXRlLm5vdygpO2NvbnN0IHM9d2luZG93LnZpZGVvanMsdT1zKGUse2NvbnRyb2xzOiExLGJpZ1BsYXlCdXR0b246ITEsZmx1aWQ6ITEsd2lkdGg6MTI4MCxoZWlnaHQ6NzIwLHBsYXlzaW5saW5lOiEwLHBsdWdpbnM6e3JlY29yZDp7YXVkaW86ITAsdmlkZW86e21hbmRhdG9yeTp7bWluV2lkdGg6MTI4MCxtaW5IZWlnaHQ6NzIwfX0sZnJhbWVXaWR0aDoxMjgwLGZyYW1lSGVpZ2h0OjcyMCxtYXhMZW5ndGg6NjAwLGF1dG9NdXRlRGV2aWNlOiEwfX19KTt1LnBheWxvYWQ9bjtjb25zdCBsPXQ9Pntjb25zdCBlPVh0LG49WHQrIi1hdWRpby1vbmx5IjtzZSh1LnVwbG9hZFByb2dyZXNzTGFiZWwsIm5vbmUiKSxvZSYmb2Uuc3RhcnRUaW1lPj1pZSYmb2UuYWJvcnQoKTtjb25zdCByPWRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJ1bC1jYW1lcmEtYnV0dG9uIik7dD8odS5jaGlsZHJlbigpWzBdLmNsYXNzTGlzdC5hZGQoInZqcy1oaWRkZW4iKSxoLnJlbW92ZUNsYXNzKGUpLGguYWRkQ2xhc3Mobiksci5pbm5lckhUTUw9amUuVHVybk9uQ2FtZXJhLHUuYXVkaW9QbGF5ZXJQbGFjZWhvbGRlci5yZW1vdmVDbGFzcygidmpzLWhpZGRlbiIpLHdpbmRvdy5uYXZpZ2F0b3IubWVkaWFEZXZpY2VzLmdldFVzZXJNZWRpYSh7dmlkZW86ITAsYXVkaW86ITB9KS50aGVuKCh0PT57dS5yZWNvcmQoKS5vbkRldmljZVJlYWR5KHQpLHQuZ2V0VmlkZW9UcmFja3MoKS5mb3JFYWNoKCh0PT57dC5zdG9wKCl9KSl9KSkuY2F0Y2godS5yZWNvcmQoKS5vbkRldmljZUVycm9yLmJpbmQodS5yZWNvcmQoKSkpKToodS5jaGlsZHJlbigpWzBdLmNsYXNzTGlzdC5yZW1vdmUoInZqcy1oaWRkZW4iKSx1LnJlY29yZCgpLmdldERldmljZSgpLGgucmVtb3ZlQ2xhc3MobiksaC5hZGRDbGFzcyhlKSxyLmlubmVySFRNTD1qZS5UdXJuT2ZmQ2FtZXJhLHUuYXVkaW9QbGF5ZXJQbGFjZWhvbGRlci5hZGRDbGFzcygidmpzLWhpZGRlbiIpKX0sZj1uZXcocy5nZXRDb21wb25lbnQoIkJ1dHRvbiIpKSh1LHtjbGlja0hhbmRsZXI6KCk9PntmLmhhc0NsYXNzKEt0KXx8KGwodS5jYW1lcmFPZmYpLG8oRWUuREVMRVRFLHt9KSxoLnJlbW92ZUNsYXNzKEt0KSxmLmFkZENsYXNzKEt0KSl9fSk7Zi5hZGRDbGFzcygidWwtdmlkZW8tcmVjb3JkZXItZGVsZXRlLWJ1dHRvbiIpLGYuZWxfLmFwcGVuZENoaWxkKGZlKGplLkRlbGV0ZUJ1dHRvbiwidWwtZGVsZXRlLWJ1dHRvbiIpKTtjb25zdCBkPWRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGUpLHA9KCk9PntkLmNsYXNzTGlzdC5jb250YWlucygidmpzLWZ1bGxzY3JlZW4iKSYmdS5jYW1lcmFPZmY/ZC5zdHlsZS5kaXNwbGF5PSJ0YWJsZSI6ZC5zdHlsZS5kaXNwbGF5PSJmbGV4In07cCgpO2NvbnN0IGg9bmV3KHMuZ2V0Q29tcG9uZW50KCJCdXR0b24iKSkodSx7Y2xpY2tIYW5kbGVyOigpPT57dS5yZWNvcmQoKS5pc1JlY29yZGluZygpfHwodS5jYW1lcmFPZmY9IXUuY2FtZXJhT2ZmLGwodS5jYW1lcmFPZmYpLCFmLmhhc0NsYXNzKEt0KSYmZi5hZGRDbGFzcyhLdCksbyhFZS5ERUxFVEUse30pLHAoKSl9fSk7aC5hZGRDbGFzcyhYdCksaC5lbF8uYXBwZW5kQ2hpbGQoZmUoamUuVHVybk9mZkNhbWVyYSwidWwtY2FtZXJhLWJ1dHRvbiIpKTtjb25zdCB2PW5ldyhzLmdldENvbXBvbmVudCgiQnV0dG9uIikpKHUse2NsaWNrSGFuZGxlcjooKT0+e2NvbnN0IHQ9ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoInVsLXJlY29yZGVyLXRvZ2dsZSIpO2lmKHUucmVjb3JkKCkuaXNSZWNvcmRpbmcoKSl1LnJlY29yZCgpLnN0b3AoKSx0JiYodC5pbm5lckhUTUw9amUuUmVjb3JkQnV0dG9uKSx2LnJlbW92ZUNsYXNzKFF0KSxmLnJlbW92ZUNsYXNzKEt0KTtlbHNle2NvbnN0IGU9ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoInVsLXJlY29yZGluZy1jb3VudGRvd24tc2NyZWVuIik7aWYoZSllLnJlbW92ZSgpLHQmJih0LmlubmVySFRNTD1qZS5SZWNvcmRCdXR0b24pLGwodS5jYW1lcmFPZmYpLG8oRWUuREVMRVRFLHt9KSxoLnJlbW92ZUNsYXNzKEt0KSxmLmFkZENsYXNzKEt0KSx2LnJlbW92ZUNsYXNzKFF0KSxtLnNob3coKTtlbHNle3YuYWRkQ2xhc3MoUXQpLG0uaGlkZSgpLGguYWRkQ2xhc3MoS3QpLGYuYWRkQ2xhc3MoS3QpLHQmJih0LmlubmVySFRNTD1qZS5TdG9wQnV0dG9uKTtjb25zdCBlPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpO2UuaWQ9InVsLXJlY29yZGluZy1jb3VudGRvd24tc2NyZWVuIixkLmluc2VydEJlZm9yZShlLGQuY2hpbGRyZW5bMV0pLGUuc3R5bGUuaGVpZ2h0PWAke2Qub2Zmc2V0SGVpZ2h0fXB4YCxoZSh1LDMpfX19fSk7di5hZGRDbGFzcygidWwtdmlkZW8tcmVjb3JkZXItdG9nZ2xlLWJ1dHRvbiIpLHYuZWxfLmFwcGVuZENoaWxkKGZlKGplLlJlY29yZEJ1dHRvbiwidWwtcmVjb3JkZXItdG9nZ2xlIikpO2NvbnN0IGc9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgicCIpO2cuc3R5bGUudmlzaWJpbGl0eT0iaGlkZGVuIixnLmNsYXNzTmFtZT0idWwtdXBsb2FkLXByb2dyZXNzLWxhYmVsIix0LmFwcGVuZENoaWxkKGcpLHUudXBsb2FkUHJvZ3Jlc3NMYWJlbD1nO2NvbnN0IHk9dWUodSxbZixoLCJQbGF5VG9nZ2xlIix2LCJGdWxsc2NyZWVuVG9nZ2xlIl0pLG09eS5jaGlsZHJlbigpLmZpbmQoKHQ9PiJGdWxsc2NyZWVuVG9nZ2xlIj09PXQubmFtZV8pKTttLmhhc0NsYXNzKCJ2anMtZGlzYWJsZWQiKSYmbS5oaWRlKCk7Y29uc3QgYj15LmNoaWxkcmVuKCkuZmluZCgodD0+IlBsYXlUb2dnbGUiPT09dC5uYW1lXykpO2IuaGlkZSgpLGkmJmguYWRkQ2xhc3MoS3QpLCFpJiZmLmFkZENsYXNzKEt0KSxkZSh1LHksaSwhMSxjKSx1Lm9uKCJzdG9wUmVjb3JkIiwoKCk9Pnt2LmhpZGUoKSxiLnNob3coKSxtLnNob3coKSxmLnJlbW92ZUNsYXNzKEt0KX0pKSx1Lm9uKCJkZXZpY2VSZWFkeSIsKCgpPT57di5zaG93KCksYi5oaWRlKCksZi5hZGRDbGFzcyhLdCl9KSksKCh0LGUsbixyLG8pPT57dC5vbigiZGV2aWNlRXJyb3IiLChmdW5jdGlvbigpe2NvbnNvbGUubG9nKCJkZXZpY2UgZXJyb3I6Iix0LmRldmljZUVycm9yQ29kZSksIlBlcm1pc3Npb24gZGVuaWVkIj09PXQuZGV2aWNlRXJyb3JDb2RlLm1lc3NhZ2U/KHQuZGV2aWNlQnV0dG9uLmFkZENsYXNzKCJwZXJtaXNzaW9uLWRlbmllZCIpLG4mJm4oRWUuRVJST1Ise3R5cGU6RWUuUEVSTUlTU0lPTl9ERU5JRUR9KSk6KG4mJm4oRWUuRVJST1Ise3R5cGU6RWUuT1RIRVJ9KSxhZShuZXcgRXJyb3IodC5kZXZpY2VFcnJvckNvZGUubWVzc2FnZSksInJlY29yZGVyRGV2aWNlRXJyb3IiLGUsbyx0LnBheWxvYWQudmlzaXRvcklkLHQucGF5bG9hZC5lbnZJZCkpfSkpLHQub24oImVycm9yIiwoZnVuY3Rpb24obixyKXthZShyfHx0LmVycm9yKCksInJlY29yZGVyRXJyb3IiLGUsbyx0LnBheWxvYWQudmlzaXRvcklkLHQucGF5bG9hZC5lbnZJZCl9KSksdC5vbigic3RhcnRSZWNvcmQiLChmdW5jdGlvbihlLG4pe3IodC51cGxvYWRQcm9ncmVzc0xhYmVsLCJub25lIil9KSksdC5vbigiZmluaXNoUmVjb3JkIiwoYXN5bmMgZnVuY3Rpb24oKXtyKHQudXBsb2FkUHJvZ3Jlc3NMYWJlbCwic3RhcnQiLDApO2NvbnN0e3N1cnZleUlkOmkscXVlc3Rpb25JZDphLHJlc3BvbnNlR3JvdXBVaWQ6Yyx2aXNpdG9ySWQ6cyxlbnZJZDp1fT10LnBheWxvYWQ7aWYoIWkpe2NvbnN0IHQ9ImludGVybmFsIGVycm9yOiBtaXNzaW5nIGZpZWxkcyBpbiBwYXlsb2FkIjtyZXR1cm4gbiYmbihFZS5FUlJPUix7dHlwZTpFZS5PVEhFUn0pLGFlKG5ldyBFcnJvcih0KSwiZmluaXNoUmVjb3JkIixlLG8scyx1KSxudWxsfXQucmVjb3JkKCkuc3RvcERldmljZSgpO2NvbnN0IGw9dC5jYW1lcmFPZmY/RWUuTUVESUFfVFlQRV9BVURJTzpFZS5NRURJQV9UWVBFX1ZJREVPLGY9WnQoKTtjb25zb2xlLmxvZygid3RmIik7Y29uc3QgZD17c3VydmV5SWQ6aSx1cGRhdGVkQXQ6KG5ldyBEYXRlKS50b0lTT1N0cmluZygpLG1lZGlhVHlwZTpsLG1lZGlhUmVjb3JkaW5nVWlkOmZ9O2NvbnNvbGUubG9nKGQpLGEmJihkLnF1ZXN0aW9uSWQ9YSksYyYmKGQucmVzcG9uc2VHcm91cFVpZD1jKSxzJiYoZC52aXNpdG9ySWQ9cyk7Y29uc3QgcD1hd2FpdChhc3luYygpPT57Y29uc3Qgcj1hd2FpdCBmZXRjaChgJHtlfS8yL2Vudmlyb25tZW50cy9pbnRlZ3JhdGlvbnMvdXBsb2FkYCx7bWV0aG9kOiJQT1NUIixjYWNoZToibm8tY2FjaGUiLGhlYWRlcnM6eyJDb250ZW50LVR5cGUiOiJhcHBsaWNhdGlvbi9qc29uIn0sYm9keTpKU09OLnN0cmluZ2lmeShkKX0pO2lmKHIub2spe2NvbnN0IHQ9YXdhaXQgci5qc29uKCk7cmV0dXJuIG4mJm4oRWUuVVBMT0FEX1NUQVJURUQse1tFZS5VUExPQURfSURdOnQudXBsb2FkLmlkLFtFZS5NRURJQV9UWVBFXTpsLFtFZS5NRURJQV9SRUNPUkRJTkdfVUlEXTpmfSksdC51cGxvYWQudXJsfXJldHVybiBuJiZuKEVlLkVSUk9SLHt0eXBlOkVlLk9USEVSLHJlc3BvbnNlOnJ9KSxhZShuZXcgRXJyb3IoImZhaWxlZCB0byBnZXQgdXBsb2FkIHJlc3BvbnNlIHdpdGggdXJsIiksImZpbmlzaFJlY29yZCIsZSxvLHQucGF5bG9hZC52aXNpdG9ySWQsdC5wYXlsb2FkLmVudklkKSxudWxsfSkoKTtwJiYob2U9d2luZG93LlVwQ2h1bmsuY3JlYXRlVXBsb2FkKHtlbmRwb2ludDpwLGZpbGU6bmV3IEZpbGUoW3QucmVjb3JkZWREYXRhXSxgcmVjb3JkaW5nICR7bH0gJHtEYXRlLm5vdygpfWApLGNodW5rU2l6ZTo1MTIwfSksb2Uuc3RhcnRUaW1lPURhdGUubm93KCksb2Uub24oImVycm9yIiwobj0+e3IodC51cGxvYWRQcm9ncmVzc0xhYmVsLCJub25lIiksYWUobiwiZmluaXNoUmVjb3JkIixlLG8sdC5wYXlsb2FkLnZpc2l0b3JJZCx0LnBheWxvYWQuZW52SWQpfSkpLG9lLm9uKCJwcm9ncmVzcyIsKGU9PntyKHQudXBsb2FkUHJvZ3Jlc3NMYWJlbCwicHJvZ3Jlc3MiLGUuZGV0YWlsKX0pKSxvZS5vbigic3VjY2VzcyIsKCgpPT57cih0LnVwbG9hZFByb2dyZXNzTGFiZWwsInN1Y2Nlc3MiKSxuJiZuKEVlLlVQTE9BRF9GSU5JU0hFRCl9KSkpfSkpfSkodSxyLG8sc2UsYSksaSYmKHUuZGV2aWNlQnV0dG9uJiZ1LmRldmljZUJ1dHRvbi5oaWRlKCksdS5zcmMoaSksYi5zaG93KCksdi5oaWRlKCksZi5yZW1vdmVDbGFzcyhLdCkpO2NvbnN0IHg9W3tuYW1lOiJtaWNyb3Bob25lIn1dOyF1LmNhbWVyYU9mZiYmeC5wdXNoKHtuYW1lOiJjYW1lcmEifSksUHJvbWlzZS5hbGwoeC5tYXAoKHQ9Pm5hdmlnYXRvci5wZXJtaXNzaW9ucy5xdWVyeSh0KSkpKS50aGVuKCh0PT57dC5yZWR1Y2UoKCh0LGUpPT50JiJncmFudGVkIj09PWUuc3RhdGUpLCEwKSYmdSYmKHUuZGV2aWNlQnV0dG9uJiZ1LmRldmljZUJ1dHRvbi5oaWRlKCksIWkmJnUucmVjb3JkKCkuZ2V0RGV2aWNlKCkpfSkpLmNhdGNoKCh0PT57fSkpfSxoZT0odCxlPTMpPT57Y29uc3Qgbj1kb2N1bWVudC5nZXRFbGVtZW50QnlJZCgidWwtcmVjb3JkaW5nLWNvdW50ZG93bi1zY3JlZW4iKTtuJiYwPT09ZT8obi5yZW1vdmUoKSx0LnJlY29yZCgpLnN0YXJ0KCkpOm4mJihuLmlubmVySFRNTD1gPHNwYW4gY2xhc3M9J3VsLWNvdW50ZG93bi10ZXh0Jz5SZWNvcmRpbmcgaW4uLi4gJHtlfTwvc3Bhbj5gLHNldFRpbWVvdXQoKCgpPT57aGUodCxlLTEpfSksMWUzKSl9LHZlPXQ9Pntjb25zdCBlPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpO3JldHVybiBlLmNsYXNzTmFtZT0idWwtdmlkZW8tY29udGFpbmVyIixlLmFwcGVuZENoaWxkKCh0PT57Y29uc3QgZT1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKTtyZXR1cm4gZS5jbGFzc05hbWU9InVsLXZpZGVvLXBsYXllci1sb2FkaW5nIixlLmlkPVl0KHQpLFsiZmlyc3QiLCJzZWNvbmQiLCJ0aGlyZCIsImZvdXJ0aCJdLm1hcCgodD0+e2NvbnN0IG49ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2Iik7bi5jbGFzc05hbWU9dCxlLmFwcGVuZENoaWxkKG4pfSkpLGV9KSh0KSksZX0sZ2U9KHQsZSk9Pntjb25zdCBuPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInZpZGVvIik7bi5pZD10LG4uY2xhc3NOYW1lPSJ2aWRlby1qcyB2anMtZGVmYXVsdC1za2luIHVsLXZpZGVvLXBsYXllci12aWRlbyI7Y29uc3Qgcj1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJwIik7ci5jbGFzc05hbWU9InZqcy1uby1qcyIsci5pbm5lckhUTUw9IlRvIHZpZXcgdGhpcyB2aWRlbyBwbGVhc2UgZW5hYmxlIEphdmFTY3JpcHQsIGFuZCBjb25zaWRlciB1cGdyYWRpbmcgdG8gYSB3ZWIgYnJvd3NlciB0aGF0Ijtjb25zdCBvPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImEiKTtyZXR1cm4gby5ocmVmPSJodHRwczovL3ZpZGVvanMuY29tL2h0bWw1LXZpZGVvLXN1cHBvcnQvIixvLnRhcmdldD0iX2JsYW5rIixvLmlubmVySFRNTD0ic3VwcG9ydHMgSFRNTDUgdmlkZW8iLHIuYXBwZW5kQ2hpbGQobyksbi5hcHBlbmRDaGlsZChyKSxlLmFwcGVuZENoaWxkKG4pLGV9LHllPSh0LGUpPT57ZT8odC5jaGlsZHJlbigpWzBdLmNsYXNzTGlzdC5hZGQoInZqcy1oaWRkZW4iKSx0LmF1ZGlvUGxheWVyUGxhY2Vob2xkZXIuc2hvdygpLGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGAke3QuaWQoKX1faHRtbDVfYXBpYCkuc3R5bGUuaGVpZ2h0PSIwcHgiKToodC5jaGlsZHJlbigpWzBdLmNsYXNzTGlzdC5yZW1vdmUoInZqcy1oaWRkZW4iKSx0LmF1ZGlvUGxheWVyUGxhY2Vob2xkZXIuaGlkZSgpLGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGAke3QuaWQoKX1faHRtbDVfYXBpYCkuc3R5bGUuaGVpZ2h0PSIxMDAlIil9LG1lPXQ9Pntjb25zdCBlPXdpbmRvdy52aWRlb2pzLG49dCtyZTtpZihlKXt0cnl7aWYoIWUobikucmVjb3JkKCkuc3RyZWFtKXJldHVybn1jYXRjaCh0KXtyZXR1cm59ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQobikmJmUobikucmVjb3JkKCkuc3RvcCgpLGUobikucmVjb3JkKCkuc3RvcERldmljZSgpfX0sYmU9dD0+e3dpbmRvdy52aWRlb2pzKHQrbmUpLnBhdXNlKCl9LHhlPSh0LGUsbixyKT0+e3dpbmRvdy52aWRlb2pzKHQrbmUpO2NvbnN0IG89d2luZG93LnZpZGVvanModCtyZSk7KCh0LGUsbik9Pntjb25zdCByPXdpbmRvdy52aWRlb2pzKHQrbmUpOyFyLnBhdXNlZCgpJiZyLnBhdXNlKCksci5zcmMoe3NyYzplLHR5cGU6ImFwcGxpY2F0aW9uL3gtbXBlZ1VSTCJ9KSxyLmN1cnJlbnRUaW1lKDApLHllKHIsbik7Y29uc3Qgbz13ZShlKTshbiYmZSYmKG8/ci5wb3N0ZXIobyk6eWUociwhMCkpLHIub24oInBsYXkiLCgoKT0+e258fCFlfHxvfHx5ZShyLCExKX0pKX0pKHQsZSxyKSxvLnJlY29yZCgpLnJlc2V0U3RhdGUoKSxvLnJlY29yZCgpLmdldERldmljZSgpO2lmKGRvY3VtZW50LmdldEVsZW1lbnRzQnlDbGFzc05hbWUoInVsLXZpZGVvLXJlY29yZGVyLWRlbGV0ZS1idXR0b24iKVswXS5jbGFzc0xpc3QuYWRkKEt0KSxvLmNhbWVyYU9mZil7ZG9jdW1lbnQuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSgidWwtdmlkZW8tcmVjb3JkZXItY2FtZXJhLW9mZi1idXR0b24tYXVkaW8tb25seSIpWzBdLmNsYXNzTGlzdC5yZW1vdmUoS3QpLHdpbmRvdy5uYXZpZ2F0b3IubWVkaWFEZXZpY2VzLmdldFVzZXJNZWRpYSh7dmlkZW86ITAsYXVkaW86ITB9KS50aGVuKCh0PT57by5yZWNvcmQoKS5vbkRldmljZVJlYWR5KHQpLHQuZ2V0VmlkZW9UcmFja3MoKS5mb3JFYWNoKCh0PT57dC5zdG9wKCl9KSl9KSkuY2F0Y2goby5yZWNvcmQoKS5vbkRldmljZUVycm9yLmJpbmQoby5yZWNvcmQoKSkpfWVsc2V7ZG9jdW1lbnQuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSgidWwtdmlkZW8tcmVjb3JkZXItY2FtZXJhLW9mZi1idXR0b24iKVswXS5jbGFzc0xpc3QucmVtb3ZlKEt0KX1vLnBheWxvYWQ9bixzZShvLnVwbG9hZFByb2dyZXNzTGFiZWwsIm5vbmUiKSxpZT1EYXRlLm5vdygpfSx3ZT10PT57Y29uc3QgZT10Lm1hdGNoKC9odHRwczpcL1wvc3RyZWFtLm11eC5jb21cLyguKikvKSxuPWU/ZVsxXTpudWxsO3JldHVybiBuP2BodHRwczovL2ltYWdlLm11eC5jb20vJHtufS90aHVtYm5haWwuanBnP3RpbWU9MGA6bnVsbH0sRWU9e1VQTE9BRF9TVEFSVEVEOiJ1cGxvYWQuc3RhcnRlZCIsVVBMT0FEX0ZJTklTSEVEOiJ1cGxvYWQuZmluaXNoZWQiLERFTEVURToiZGVsZXRlIixFUlJPUjoiZXJyb3IiLE1FRElBX1RZUEU6Im1lZGlhLnR5cGUiLFBFUk1JU1NJT05fREVOSUVEOiJwZXJtaXNzaW9uX2RlbmllZCIsT1RIRVI6Im90aGVyIixVUExPQURfSUQ6InVwbG9hZC5pZCIsTUVESUFfUkVDT1JESU5HX1VJRDoibWVkaWEucmVjb3JkaW5nLnVpZCIsTUVESUFfVFlQRV9WSURFTzoidmlkZW8iLE1FRElBX1RZUEVfQVVESU86ImF1ZGlvIn0samU9e1BsYXliYWNrUmF0ZU1lbnVCdXR0b246IlNwZWVkIixQbGF5VG9nZ2xlOiJQbGF5IixGdWxsc2NyZWVuVG9nZ2xlOiJFeHBhbmQiLFR1cm5PbkNhbWVyYToiVHVybiBvbiIsVHVybk9mZkNhbWVyYToiVHVybiBvZmYiLERlbGV0ZUJ1dHRvbjoiRGVsZXRlIixSZWNvcmRCdXR0b246IlJlY29yZCIsU3RvcEJ1dHRvbjoiU3RvcCIsUGF1c2VCdXR0b246IlBhdXNlIn07ZnVuY3Rpb24gQ2UodCxlKXt2YXIgbj1PYmplY3Qua2V5cyh0KTtpZihPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKXt2YXIgcj1PYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHQpO2UmJihyPXIuZmlsdGVyKChmdW5jdGlvbihlKXtyZXR1cm4gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcih0LGUpLmVudW1lcmFibGV9KSkpLG4ucHVzaC5hcHBseShuLHIpfXJldHVybiBufXZhciBrZT0idWwtYnV0dG9uLWluYWN0aXZlIjtmdW5jdGlvbiBTZSh0LGUpe2UodCl9dmFyIE9lPXtlcTpmdW5jdGlvbih0LGUpe3JldHVybiB0PT1lfSxuZXE6ZnVuY3Rpb24odCxlKXtyZXR1cm4hdGhpcy5lcSh0LGUpfSxndDpmdW5jdGlvbih0LGUpe3JldHVybiB0PmV9LGd0ZTpmdW5jdGlvbih0LGUpe3JldHVybiB0Pj1lfSxsdDpmdW5jdGlvbih0LGUpe3JldHVybiB0PGV9LGx0ZTpmdW5jdGlvbih0LGUpe3JldHVybiB0PD1lfSxsaXN0X2V4YWN0OmZ1bmN0aW9uKHQsZSl7cmV0dXJuISghQXJyYXkuaXNBcnJheSh0KXx8IUFycmF5LmlzQXJyYXkoZSkpJiZ0LnNsaWNlKCkuc29ydCgpLmpvaW4oIiwiKT09PWUuc2xpY2UoKS5zb3J0KCkuam9pbigiLCIpfSxsaXN0X2FsbDpmdW5jdGlvbih0LGUpe3JldHVybiEoIUFycmF5LmlzQXJyYXkodCl8fCFBcnJheS5pc0FycmF5KGUpKSYmIWUuc29tZSgoZnVuY3Rpb24oZSl7cmV0dXJuLTE9PT10LmluZGV4T2YoZSl9KSl9LGxpc3RfYWxvOmZ1bmN0aW9uKHQsZSl7cmV0dXJuISghQXJyYXkuaXNBcnJheSh0KXx8IUFycmF5LmlzQXJyYXkoZSkpJiZlLnNvbWUoKGZ1bmN0aW9uKGUpe3JldHVybi0xIT10LmluZGV4T2YoZSl9KSl9fTt2YXIgSWU9ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KGUpe3ZhciBuPXRoaXM7YnQoKSh0aGlzLHQpLHRoaXMucHJvbWlzZT1uZXcgUHJvbWlzZSgoZnVuY3Rpb24odCxyKXtuLnBheWxvYWQ9ZSxuLnJlamVjdD1yLG4ucmVzb2x2ZT10fSkpfXJldHVybiB3dCgpKHQsW3trZXk6InJlc29sdmVSZXF1ZXN0Iix2YWx1ZTpmdW5jdGlvbih0KXt0aGlzLnJlc29sdmUodCl9fV0pLHR9KCksQWU9big5MzEzMCksVGU9QWUuZGVsYXksTWU9QWUuTkVUV09SS19DT05GSUcsX2U9ITEsTGU9IiIsUmU9ITEsUGU9W107ZnVuY3Rpb24gTmUodCl7cmV0dXJuIHQuX2NvbmZpZyYmdC5fY29uZmlnLmluc3RhbGxhdGlvbk1ldGhvZD90Ll9jb25maWcuaW5zdGFsbGF0aW9uTWV0aG9kOnQuX2d0bT9xOnQuX3NlZ21lbnQ/VzpHfWZ1bmN0aW9uIERlKHQpe19lPSEwLExlPXR9ZnVuY3Rpb24gRmUoKXt2YXIgdD1hcmd1bWVudHMubGVuZ3RoPjAmJnZvaWQgMCE9PWFyZ3VtZW50c1swXT9hcmd1bWVudHNbMF06e30sZT17IkNvbnRlbnQtVHlwZSI6ImFwcGxpY2F0aW9uL2pzb24iLCJ1c2VybGVhcC1wbGF0Zm9ybSI6IndlYiIsIngtdWwtc2RrLXZlcnNpb24iOiIyLjE0LjMifTtpZih0LmVudklkJiYoZVtVXT10LmVudklkKSx0LnRva2VuJiYoZS5BdXRob3JpemF0aW9uPSJCZWFyZXIgIit0LnRva2VuKSx0LnVzZXJJZCYmKGVbel09dC51c2VySWQpLHQudmlzaXRvcklkJiYoZVtWXT10LnZpc2l0b3JJZCksdC5wYXJ0bmVyQW5vbnltb3VzSWQmJihlW0JdPXQucGFydG5lckFub255bW91c0lkKSx0Lm1vYmlsZUhlYWRlcnNKU09OKXt2YXIgbj1KU09OLnBhcnNlKHQubW9iaWxlSGVhZGVyc0pTT04pO09iamVjdC5hc3NpZ24oZSxuKX1yZXR1cm4gZVtIXT1OZSh0KSx0LmxvY2FsZSYmKGVbImFjY2VwdC1sYW5ndWFnZSJdPXQubG9jYWxlKSxlfWZ1bmN0aW9uIFVlKHQsZSxuKXtyZXR1cm4gQmUuYXBwbHkodGhpcyxhcmd1bWVudHMpfWZ1bmN0aW9uIEJlKCl7cmV0dXJuKEJlPU4oKShSKCkubWFyaygoZnVuY3Rpb24gdChlLG4scil7dmFyIG87cmV0dXJuIFIoKS53cmFwKChmdW5jdGlvbih0KXtmb3IoOzspc3dpdGNoKHQucHJldj10Lm5leHQpe2Nhc2UgMDppZighZSl7dC5uZXh0PTQ7YnJlYWt9cmV0dXJuIHQuYWJydXB0KCJyZXR1cm4iLHtzdGF0dXM6NDI5fSk7Y2FzZSA0OnJldHVybiBvPW5ldyBJZShyKSxQZS5wdXNoKG8pLHQuYWJydXB0KCJyZXR1cm4iLG8ucHJvbWlzZSk7Y2FzZSA3OmNhc2UiZW5kIjpyZXR1cm4gdC5zdG9wKCl9fSksdCl9KSkpKS5hcHBseSh0aGlzLGFyZ3VtZW50cyl9ZnVuY3Rpb24gemUodCxlKXtyZXR1cm4gVmUuYXBwbHkodGhpcyxhcmd1bWVudHMpfWZ1bmN0aW9uIFZlKCl7cmV0dXJuIFZlPU4oKShSKCkubWFyaygoZnVuY3Rpb24gdChlLG4pe3ZhciByLG8saSxhLGMscyx1LGwsZixkPWFyZ3VtZW50cztyZXR1cm4gUigpLndyYXAoKGZ1bmN0aW9uKHQpe2Zvcig7Oylzd2l0Y2godC5wcmV2PXQubmV4dCl7Y2FzZSAwOmlmKHI9ZC5sZW5ndGg+MiYmdm9pZCAwIT09ZFsyXT9kWzJdOjAsbz1kLmxlbmd0aD4zJiZ2b2lkIDAhPT1kWzNdJiZkWzNdLGk9ZC5sZW5ndGg+NCYmdm9pZCAwIT09ZFs0XSYmZFs0XSxhPXt1cmw6ZSxvcHRpb25zOm4sYXR0ZW1wdDpyLHNob3VsZERyb3BPblJhdGVMaW1pdDpvfSwhUmV8fGkpe3QubmV4dD02O2JyZWFrfXJldHVybiB0LmFicnVwdCgicmV0dXJuIixVZShvLGksYSkpO2Nhc2UgNjppZihjPXtvazohMSxyZXBvcnRFcnJvcjohMX0sIV9lKXt0Lm5leHQ9MTA7YnJlYWt9cmV0dXJuIGNvbnNvbGUubG9nKCJVc2VyTGVhcCAtICIuY29uY2F0KExlKSksdC5hYnJ1cHQoInJldHVybiIsYyk7Y2FzZSAxMDpyZXR1cm4gdC5wcmV2PTEwLG4uaGVhZGVycz1PYmplY3QuYXNzaWduKEZlKCksbi5oZWFkZXJzKSx0Lm5leHQ9MTQsZmV0Y2goZSxuKTtjYXNlIDE0OmlmKDQyOSE9PShzPXQuc2VudCkuc3RhdHVzKXt0Lm5leHQ9MjQ7YnJlYWt9aWYoISghUmUmJiFvfHxpKSl7dC5uZXh0PTIzO2JyZWFrfXJldHVybiBSZT0hMCx1PXMuaGVhZGVycy5oYXMoInJhdGVsaW1pdC1yZXNldCIpP051bWJlcihzLmhlYWRlcnMuZ2V0KCJyYXRlbGltaXQtcmVzZXQiKSk6TWUuUkFURUxJTUlUX1JFU0VUX0RFRkFVTFQsdC5hYnJ1cHQoInJldHVybiIsVGUoMWUzKnUpLnRoZW4oTigpKFIoKS5tYXJrKChmdW5jdGlvbiB0KCl7cmV0dXJuIFIoKS53cmFwKChmdW5jdGlvbih0KXtmb3IoOzspc3dpdGNoKHQucHJldj10Lm5leHQpe2Nhc2UgMDpyZXR1cm4gdC5hYnJ1cHQoInJldHVybiIsemUoZSxuLDAsbywhMCkpO2Nhc2UgMTpjYXNlImVuZCI6cmV0dXJuIHQuc3RvcCgpfX0pLHQpfSkpKSkpO2Nhc2UgMjM6cmV0dXJuIHQuYWJydXB0KCJyZXR1cm4iLFVlKG8sITEsYSkpO2Nhc2UgMjQ6aWYoUmU9ITEsUGUubGVuZ3RoJiYoUGUubWFwKChmdW5jdGlvbih0KXt2YXIgZT10LnBheWxvYWQ7emUoZS51cmwsZS5vcHRpb25zLGUuYXR0ZW1wdCxlLnNob3VsZERyb3BPblJhdGVMaW1pdCkudGhlbigoZnVuY3Rpb24oZSl7dC5yZXNvbHZlUmVxdWVzdChlKX0pKX0pKSxQZT1bXSksIXMub2spe3QubmV4dD00MTticmVha31pZigyNDkhPT1zLnN0YXR1cyl7dC5uZXh0PTMwO2JyZWFrfXJldHVybiBEZSgpLHQuYWJydXB0KCJyZXR1cm4iLGMpO2Nhc2UgMzA6cmV0dXJuIHQubmV4dD0zMixzLnRleHQoKTtjYXNlIDMyOnJldHVybiBsPXQuc2VudCx0LnByZXY9MzMsbCYmIk9LIiE9PWwmJihzLmpzb249SlNPTi5wYXJzZShsKSksdC5hYnJ1cHQoInJldHVybiIscyk7Y2FzZSAzODpyZXR1cm4gdC5wcmV2PTM4LHQudDA9dC5jYXRjaCgzMyksdC5hYnJ1cHQoInJldHVybiIse29rOiExLHJlcG9ydEVycm9yOiEwLGVycm9yOm5ldyBFcnJvcigiZmFpbGVkIHBhcnNpbmcgcmVzcG9uc2UganNvbiBmb3IgIi5jb25jYXQoZSwiIC0gIikuY29uY2F0KGwpKX0pO2Nhc2UgNDE6cmV0dXJuIHQuYWJydXB0KCJyZXR1cm4iLHMpO2Nhc2UgNDQ6aWYodC5wcmV2PTQ0LHQudDE9dC5jYXRjaCgxMCksISgoZj1yKzEpPjIpKXt0Lm5leHQ9NDk7YnJlYWt9cmV0dXJuIHQuYWJydXB0KCJyZXR1cm4iLHtvazohMSxyZXBvcnRFcnJvcjohMSxlcnJvcjp0LnQxfSk7Y2FzZSA0OTpyZXR1cm4gdC5hYnJ1cHQoInJldHVybiIsVGUoMWUzKmYpLnRoZW4oKGZ1bmN0aW9uKCl7cmV0dXJuIHplKGUsbixmKX0pKSk7Y2FzZSA1MDpjYXNlImVuZCI6cmV0dXJuIHQuc3RvcCgpfX0pLHQsbnVsbCxbWzEwLDQ0XSxbMzMsMzhdXSl9KSkpLFZlLmFwcGx5KHRoaXMsYXJndW1lbnRzKX1mdW5jdGlvbiBIZSh0LGUpe3ZhciBuPU9iamVjdC5rZXlzKHQpO2lmKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpe3ZhciByPU9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHModCk7ZSYmKHI9ci5maWx0ZXIoKGZ1bmN0aW9uKGUpe3JldHVybiBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHQsZSkuZW51bWVyYWJsZX0pKSksbi5wdXNoLmFwcGx5KG4scil9cmV0dXJuIG59ZnVuY3Rpb24gcWUodCl7Zm9yKHZhciBlPTE7ZTxhcmd1bWVudHMubGVuZ3RoO2UrKyl7dmFyIG49bnVsbCE9YXJndW1lbnRzW2VdP2FyZ3VtZW50c1tlXTp7fTtlJTI/SGUoT2JqZWN0KG4pLCEwKS5mb3JFYWNoKChmdW5jdGlvbihlKXtyKCkodCxlLG5bZV0pfSkpOk9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzP09iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKHQsT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcnMobikpOkhlKE9iamVjdChuKSkuZm9yRWFjaCgoZnVuY3Rpb24oZSl7T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsZSxPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKG4sZSkpfSkpfXJldHVybiB0fWZ1bmN0aW9uIFdlKHQsZSxuKXtyZXR1cm4gR2UuYXBwbHkodGhpcyxhcmd1bWVudHMpfWZ1bmN0aW9uIEdlKCl7cmV0dXJuIEdlPU4oKShSKCkubWFyaygoZnVuY3Rpb24gdChlLG4scil7dmFyIG8saSxhLGMscyx1LGwsZjtyZXR1cm4gUigpLndyYXAoKGZ1bmN0aW9uKHQpe2Zvcig7Oylzd2l0Y2godC5wcmV2PXQubmV4dCl7Y2FzZSAwOnJldHVybiBvPWUubW9kZSxpPWUudXNlcklkLGE9ZS5lbnZJZCxjPWUuYXBpVVJMLHM9ZS5oZWFkZXJzLHU9d2luZG93LmRvY3VtZW50LmRvY3VtZW50RWxlbWVudCxsPXttb2RlOm8sc2NyZWVuV2lkdGg6d2luZG93LnNjcmVlbi53aWR0aCxzY3JlZW5IZWlnaHQ6d2luZG93LnNjcmVlbi5oZWlnaHQsY2xpZW50V2lkdGg6dS5jbGllbnRXaWR0aCxjbGllbnRIZWlnaHQ6dS5jbGllbnRIZWlnaHQsbG9jYXRpb246d2luZG93LmxvY2F0aW9uLmhyZWYsbGFuZ3VhZ2U6d2luZG93Lm5hdmlnYXRvci5sYW5ndWFnZX0sZj17YWN0aW9uOm4sZXJyOnttZXNzYWdlOnIubWVzc2FnZSxzdGFjazpyLnN0YWNrfSxtZXRhOmwsdmlkOmksZW52SWQ6YX0sdC5uZXh0PTYsemUoIiIuY29uY2F0KGMsIi9zZGsvMS9lcnJvcnMiKSx7bWV0aG9kOiJQT1NUIixoZWFkZXJzOk9iamVjdC5hc3NpZ24oeyJ4LXVsLWVycm9yIjp3aW5kb3cuYnRvYSgidXNlcmxlYXAtIi5jb25jYXQoRGF0ZS5ub3coKSwiLWVycm9yIikpfSxzKSxib2R5OkpTT04uc3RyaW5naWZ5KGYpfSk7Y2FzZSA2OnQuc2VudC5va3x8Y29uc29sZS53YXJuKCJbVXNlckxlYXBdIChFUlItNDQ0KSBGYWlsZWQgdG8gcmVwb3J0IGVycm9yIHRvIEFQSSIscik7Y2FzZSA4OmNhc2UiZW5kIjpyZXR1cm4gdC5zdG9wKCl9fSksdCl9KSkpLEdlLmFwcGx5KHRoaXMsYXJndW1lbnRzKX12YXIgWmU9ZnVuY3Rpb24odCl7cmV0dXJuIDA9PT10LnVzZXJJZHx8dC5tZXRhJiYidGVzdCI9PT10Lm1ldGEubW9kZXx8dC5pc1ByZXZpZXd9LCRlPXtzdXJ2ZXlJZDpudWxsLHJ1bm5pbmc6ITEsZnJhbWU6bnVsbCxlbnZJZDpudWxsLHVzZXJJZDpudWxsLG1ldGE6e30sYm9yZGVyOm51bGwsZm9udEZhbWlseTpudWxsLGZvbnRGYW1pbHlVUkw6bnVsbCx0aW1lb3V0Om51bGwsaW50ZXJ2YWw6bnVsbCxtb2RlOm51bGwsZGVjazp7aW5kZXg6MCxjYXJkczpbXX0sY29udGV4dDp7fSxzZW5kaW5nOiExLGNhcmRzOntvcGVuOmZ1bmN0aW9uKHQpe3ZhciBlPXQuY2xhc3NOYW1lLG49dC5tZXNzYWdlLHI9dC5wcm9wZXJ0aWVzLG89KHQubG9jYWxlLHQubmV4dCksaT10LnF1ZXN0aW9uSWQ7cmV0dXJuIGZ1bmN0aW9uKHQsYSl7dmFyIGM9dC5hcHAscz1jLnVzZU1vYmlsZVN0eWxpbmcsdT1jLmJvcmRlcixsPUYoW2UsInVsLWNhcmQtLXRleHQiLGx0XSksZj1NdChyKSxkPXImJnIub3BlblRleHRQbGFjZWhvbGRlcj9yLm9wZW5UZXh0UGxhY2Vob2xkZXI6bnVsbDtyZXR1cm4gSSgiZm9ybSIse2lkOiJ0ZXh0LWZvcm0iLGNsYXNzTmFtZTpsLG9uc3VibWl0OmZ1bmN0aW9uKHQpe3JldHVybiBEdCh0LG8pfSxrZXk6aX0sX3QoZixuKSxmLEkoImRpdiIse2NsYXNzTmFtZToidWwtY2FyZC10ZXh0In0sSSgiZGl2Iix7Y2xhc3NOYW1lOiJ1bC1jYXJkLXRleHRfX2NvbnRhaW5lciJ9LEkoInRleHRhcmVhIix7ImRhdGEtZ3JhbW0iOiJmYWxzZSIsbWF4bGVuZ3RoOiI1MDAwIixjbGFzc05hbWU6RihmdChpdCxzKSksbmFtZToidGV4dCIscGxhY2Vob2xkZXI6ZCwiYXJpYS1wbGFjZWhvbGRlciI6ZCwiYXJpYS1tdWx0aWxpbmUiOiJ0cnVlIix2YWx1ZTp0Lm9wZW5UZXh0LnZhbHVlLG9uY3JlYXRlOk50KCksb25pbnB1dDpmdW5jdGlvbih0KXt0LnByZXZlbnREZWZhdWx0KCksdC5zdG9wUHJvcGFnYXRpb24oKSxhLm9wZW5UZXh0Lm9uVGV4dENoYW5nZSh0LnRhcmdldC52YWx1ZSl9LG9uZm9jdXM6ZnVuY3Rpb24odCl7dC50YXJnZXQuc3R5bGUuYm9yZGVyQ29sb3I9dX0sb25ibHVyOmZ1bmN0aW9uKHQpe3QudGFyZ2V0LnN0eWxlLmJvcmRlckNvbG9yPSIjZTZlNmU2In0sdGFiaW5kZXg6MCwiYXJpYS1sYWJlbGxlZGJ5IjpzdCxjb250ZW50ZWRpdGFibGU6InRydWUiLHJvbGU6InRleHRib3giLCJhcmlhLWxhYmVsIjpkfSkpLEkoImJ1dHRvbiIse2lkOiJ1bC1jYXJkLXRleHRfX2J1dHRvbiIsY2xhc3NOYW1lOiJ1bC1jYXJkLXRleHRfX2J1dHRvbiIsc3R5bGU6e2JhY2tncm91bmRDb2xvcjp1fSxvbmNsaWNrOmZ1bmN0aW9uKGUpeyhlLnByZXZlbnREZWZhdWx0KCksZS5zdG9wUHJvcGFnYXRpb24oKSxkb2N1bWVudC5mb3Jtc1sidGV4dC1mb3JtIl0pJiYoRHQodC5vcGVuVGV4dC52YWx1ZS50cmltKCksbyksdC5vcGVuVGV4dC52YWx1ZT0iIil9LHJvbGU6ImJ1dHRvbiIsImFyaWEtbGFiZWxsZWRieSI6IiIuY29uY2F0KHN0LCIgdWwtY2FyZC10ZXh0X19idXR0b24iKX0sTHQocikpKSxJKFR0LG51bGwpKX19LHRleHR1cmxwcm9tcHQ6ZnVuY3Rpb24odCl7dmFyIGU9dC5jbGFzc05hbWUsbj10Lm1lc3NhZ2Uscj10LnByb3BlcnRpZXMsbz0odC5sb2NhbGUsdC5uZXh0KSxpPXQucXVlc3Rpb25JZDtyZXR1cm4gZnVuY3Rpb24odCxhKXt2YXIgYz1GKFtlLCJ1bC1jYXJkX190ZXh0LXVybC1wcm9tcHQiLGx0XSkscz10LmFwcC5ib3JkZXI7cmV0dXJuIEkoImRpdiIse2NsYXNzTmFtZTpjLGtleTppfSxJKCJwIix7aWQ6c3QsY2xhc3NOYW1lOiJ1bC1xdWVzdGlvbiJ9LG4pLEkoImRpdiIse2lkOiJ1bC1jYXJkX190ZXh0LXVybC1ib2R5LWNvbnRhaW5lciIsY2xhc3NOYW1lOiJ1bC1jYXJkX190ZXh0LXVybC1ib2R5LWNvbnRhaW5lciJ9LChyJiZyLmJvZHk/ci5ib2R5LnNwbGl0KC9cblxzKlxuL2cpOltdKS5tYXAoKGZ1bmN0aW9uKHQpe3JldHVybiBJKCJwIix7Y2xhc3NOYW1lOiJ1bC1jYXJkX190ZXh0LXVybC1wcm9tcHQtYm9keSJ9LHQpfSkpKSxJKCJhIix7aWQ6InVsLWNhcmQtdGV4dF9fYnV0dG9uIixjbGFzc05hbWU6InVsLWNhcmQtdGV4dF9fYnV0dG9uIHVsLWNhcmRfX3RleHQtdXJsLXByb21wdC1idXR0b24iLHN0eWxlOntiYWNrZ3JvdW5kQ29sb3I6cywibWFyZ2luLXJpZ2h0IjoiYXV0byIsInRleHQtb3ZlcmZsb3ciOiJlbGxpcHNpcyIsdGV4dERlY29yYXRpb246Im5vbmUiLG92ZXJmbG93OiJ2aXNpYmxlIn0sb25jbGljazpmdW5jdGlvbih0KXtvKCl9LG9ua2V5cHJlc3M6ZnVuY3Rpb24odCl7MTMhPXQua2V5Q29kZSYmMzIhPXQua2V5Q29kZXx8bygpfSxocmVmOnImJnIuYnV0dG9uVXJsLHRhcmdldDoiX2JsYW5rIixyb2xlOiJidXR0b24iLHRhYmluZGV4OjAsImFyaWEtbGFiZWxsZWRieSI6IiIuY29uY2F0KHN0LCIgdWwtY2FyZC10ZXh0X19idXR0b24iKSwiYXJpYS1kZXNjcmliZWRieSI6InVsLWNhcmRfX3RleHQtdXJsLWJvZHktY29udGFpbmVyIn0sciYmci5idXR0b25UZXh0P3IuYnV0dG9uVGV4dDoiTmV4dCIpLEkoVHQsbnVsbCkpfX0sbXVsdGlwbGVjaG9pY2U6ZnVuY3Rpb24odCl7dmFyIGU9dC5jbGFzc05hbWUsbj10LmJvcmRlcixvPXQubWVzc2FnZSxpPXQucHJvcGVydGllcyxhPSh0LmxvY2FsZSx0Lm9wdGlvbnMpLGM9dm9pZCAwPT09YT9bXTphLHM9dC5uZXh0LHU9dC5xdWVzdGlvbklkO3JldHVybiBmdW5jdGlvbih0LGEpe3ZhciBsPXQuYXBwLnVzZU1vYmlsZVN0eWxpbmcsZj1GKFtlLCJ1bC1jYXJkLS1tdWx0aXBsZSIsbHRdKTtmdW5jdGlvbiBkKHQsZSl7cyh7dmFsdWU6cigpKHt9LHQsZSl9KX12YXIgcD1jLm1hcCgoZnVuY3Rpb24odCxlKXt2YXIgcj10LmlkLG89dC5sYWJlbCxpPXQudmFsdWU7cmV0dXJuIEkoRnQse2JvcmRlcjpuLGluZGV4OmUsbGFiZWw6byx0YWJpbmRleDplKzEsb25TZWxlY3Q6ZC5iaW5kKG51bGwscixpKSxpZDpyLGlzUmFkaW86ITAsdXNlTW9iaWxlU3R5bGluZzpsfSl9KSksaD1NdChpKTtyZXR1cm4gSSgiZGl2Iix7Y2xhc3NOYW1lOmYsa2V5OnV9LF90KGgsbyksaCxJKCJkaXYiLHtjbGFzc05hbWU6RihmdChvdCxsKSkscm9sZToicmFkaW9ncm91cCIsImFyaWEtbGFiZWxlZGJ5IjpzdH0scCksSShUdCxudWxsKSl9fSxtdWx0aXBsZXNlbGVjdDpmdW5jdGlvbih0KXt2YXIgZT10LmNsYXNzTmFtZSxuPXQuYm9yZGVyLHI9dC5tZXNzYWdlLG89dC5wcm9wZXJ0aWVzLGk9KHQubG9jYWxlLHQub3B0aW9ucyksYT12b2lkIDA9PT1pP1tdOmksYz0odC5pc0xhc3QsdC5uZXh0KSxzPXQucXVlc3Rpb25JZDtyZXR1cm4gZnVuY3Rpb24odCxpKXt2YXIgdT1GKFtlLCJ1bC1jYXJkLS1tdWx0aXBsZSIsbHRdKSxsPXQubXVsdGlwbGVzZWxlY3Quc2VsZWN0ZWRPcHRpb25zLGY9aS5tdWx0aXBsZXNlbGVjdCxkPWYuaW5pdCxwPWYucmVzZXQsaD1mLnVwZGF0ZVNlbGVjdGVkLHY9dC5hcHAudXNlTW9iaWxlU3R5bGluZyxnPWZ1bmN0aW9uKGUpe2UucHJldmVudERlZmF1bHQoKSxlLnN0b3BQcm9wYWdhdGlvbigpLGZ1bmN0aW9uKHQsZSl7ZSh7dmFsdWU6dH0pfSh0Lm11bHRpcGxlc2VsZWN0LnNlbGVjdGVkT3B0aW9ucyxjKSxwKCl9LHk9YS5tYXAoKGZ1bmN0aW9uKHQsZSl7dmFyIHI9dC5pZCxvPXQubGFiZWw7dC52YWx1ZTtyZXR1cm4gSShGdCx7Ym9yZGVyOm4saW5kZXg6ZSxsYWJlbDpvLG9uU2VsZWN0Omgsc2VsZWN0ZWQ6bFtyXSxpZDpyLGlzUmFkaW86ITEsdXNlTW9iaWxlU3R5bGluZzp2fSl9KSksbT1NdChvKTtyZXR1cm4gSSgiZm9ybSIse2lkOiJ0ZXh0LWZvcm0iLGNsYXNzTmFtZTp1LG9uc3VibWl0Omcsb25jcmVhdGU6ZnVuY3Rpb24odCl7cmV0dXJuIGU9e30sYS5mb3JFYWNoKChmdW5jdGlvbih0KXtlW3QuaWRdPSExfSkpLHZvaWQgZChlKTt2YXIgZX0sa2V5OnN9LF90KG0sciksbSxJKCJkaXYiLHtjbGFzc05hbWU6RihmdChvdCx2KSkscm9sZToicmFkaW9ncm91cCJ9LHkpLEkoImRpdiIse2NsYXNzTmFtZToidWwtY2FyZC10ZXh0In0sSSgiYnV0dG9uIix7aWQ6InVsLWNhcmQtdGV4dF9fYnV0dG9uIixjbGFzc05hbWU6InVsLWNhcmQtdGV4dF9fYnV0dG9uIixzdHlsZTp7YmFja2dyb3VuZENvbG9yOm59LG9uY2xpY2s6Zyxyb2xlOiJidXR0b24iLCJhcmlhLWxhYmVsbGVkYnkiOiIiLmNvbmNhdChzdCwiIHVsLWNhcmQtdGV4dF9fYnV0dG9uIil9LEx0KG8pKSksSShUdCxudWxsKSl9fSxsaWtlcnQ6ZnVuY3Rpb24odCl7dmFyIGU9dC5ib3JkZXIsbj10LmNsYXNzTmFtZSxyPSh0LmxvY2FsZSx0LmxhYmVscyksbz10Lm1lc3NhZ2UsaT10LnByb3BlcnRpZXMsYT10Lm5leHQsYz10LnF1ZXN0aW9uSWQ7cmV0dXJuIGZ1bmN0aW9uKHQscyl7dmFyIHU9dC5hcHAsbD11LnVzZU1vYmlsZVN0eWxpbmcsZj11LmRlY2suaW5kZXgsZD1GKFtuLCJ1bC1jYXJkLS1saWtlcnQiLGx0XSkscD1yJiZyLmxlZnQsaD1yJiZyLnJpZ2h0LHY9XygpKEFycmF5KDUpKS5tYXAoKGZ1bmN0aW9uKHQsbil7dmFyIHI9bisxLG89Im9wdGlvbi0iLmNvbmNhdChyKSxpPWZ1bmN0aW9uKHQpe3QudGFyZ2V0LnN0eWxlLnpJbmRleD0yLHQudGFyZ2V0LnN0eWxlLmJvcmRlckNvbG9yPWV9LGM9ZnVuY3Rpb24odCl7dC50YXJnZXQuc3R5bGUuekluZGV4PSJhdXRvIix0LnRhcmdldC5zdHlsZS5ib3JkZXJDb2xvcj0iI2U2ZTZlNiJ9LHM9e29uY2xpY2s6ZnVuY3Rpb24oKXtyZXR1cm4gYShyKX0sb25rZXlwcmVzczpmdW5jdGlvbih0KXtyZXR1cm4gZnVuY3Rpb24odCl7MTMhPXQua2V5Q29kZSYmMzIhPXQua2V5Q29kZXx8YShyKX0odCl9fTtyZXR1cm4ib250b3VjaHN0YXJ0ImluIGRvY3VtZW50LmRvY3VtZW50RWxlbWVudD8ocy5vbnRvdWNoc3RhcnQ9aSxzLm9udG91Y2hjYW5jZWw9YyxzLm9udG91Y2htb3ZlPWMscy5vbnRvdWNoZW5kPWMpOihzLm9ubW91c2Vkb3duPWkscy5vbm1vdXNlbGVhdmU9YyksSSgiZGl2IixUKCkoe2lkOm8sY2xhc3NOYW1lOkYoW10uY29uY2F0KF8oKShmdChYLGwpKSxfKCkoZnQoIiIuY29uY2F0KFgsIi0iKS5jb25jYXQociksbCkpKSl9LHMseyJhcmlhLWxhYmVsbGVkYnkiOiIiLmNvbmNhdChzdCwiICIpLmNvbmNhdChvKSxyb2xlOiJ0ZXh0Ym94Iix0YWJpbmRleDowLCJhcmlhLWRlc2NyaWJlZGJ5Ijp1dH0pLHIpfSkpLGc9TXQoaSk7cmV0dXJuIEkoImZvcm0iLHtjbGFzc05hbWU6ZCxrZXk6Y30sX3QoZyxvKSxnLGYlMj09MCYmSSgiZGl2IixudWxsKSxJKCJkaXYiLHtjbGFzc05hbWU6InVsLWNhcmQtLWxpa2VydF9fbnVtYmVycyJ9LHYpLEkoImRpdiIse2NsYXNzTmFtZToidWwtY2FyZC0tbGlrZXJ0X19sYWJlbHMifSxJKCJzcGFuIixudWxsLHApLEkoInNwYW4iLG51bGwsaCkpLEkoVHQsbnVsbCkpfX0sdGhhbmtzOmZ1bmN0aW9uKHQpe3ZhciBlPXQuZW5kQ2FyZCxuPXQuYm9yZGVyLHI9dC5jbGFzc05hbWUsbz0odC5sb2NhbGUsdC5xdWVzdGlvbklkKTtyZXR1cm4gZnVuY3Rpb24odCxpKXt2YXIgYT1GKFtyLCJ1bC1jYXJkLS10aGFua3MiLGx0XSksYz1lJiZlLnN1YmhlYWRlcj9JKCJwIix7Y2xhc3NOYW1lOiJ1bC1jYXB0aW9uIn0sZS5zdWJoZWFkZXIpOm51bGwscz1lJiZlLmhlYWRsaW5lP2UuaGVhZGxpbmU6bnVsbDtyZXR1cm4gSSgiZGl2Iix7Y2xhc3NOYW1lOmEsa2V5Om99LEkoImRpdiIse29uY3JlYXRlOmZ1bmN0aW9uKCl7cmV0dXJuIGkuYXBwLmNvbXBsZXRlKCl9fSxJKCJkaXYiLHtjbGFzc05hbWU6InVsLWNhcmQtLXRoYW5rcy1jb250ZW50In0sSSgiZGl2Iix7Y2xhc3NOYW1lOiJ1bC10aGFua3MtY2hlY2sifSxJKCJzdmciLHt3aWR0aDoiODEiLGhlaWdodDoiOTkiLHZpZXdCb3g6IjAgMCA4MSA5OSIsZmlsbDoibm9uZSIseG1sbnM6Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiwiYXJpYS1sYWJlbGxlZGJ5IjoidGl0bGUifSxJKCJwYXRoIix7ImZpbGwtcnVsZSI6ImV2ZW5vZGQiLCJjbGlwLXJ1bGUiOiJldmVub2RkIixkOiJNNDAuNSA3N0M2MC45MzQ1IDc3IDc3LjUgNjAuNDM0NSA3Ny41IDQwQzc3LjUgMTkuNTY1NSA2MC45MzQ1IDMgNDAuNSAzQzIwLjA2NTUgMyAzLjUgMTkuNTY1NSAzLjUgNDBDMy41IDYwLjQzNDUgMjAuMDY1NSA3NyA0MC41IDc3Wk04MC41IDQwQzgwLjUgNjIuMDkxNCA2Mi41OTE0IDgwIDQwLjUgODBDMTguNDA4NiA4MCAwLjUgNjIuMDkxNCAwLjUgNDBDMC41IDE3LjkwODYgMTguNDA4NiAwIDQwLjUgMEM2Mi41OTE0IDAgODAuNSAxNy45MDg2IDgwLjUgNDBaIixmaWxsOm59KSxJKCJwYXRoIix7ImZpbGwtcnVsZSI6ImV2ZW5vZGQiLCJjbGlwLXJ1bGUiOiJldmVub2RkIixkOiJNNTUuMDI1IDIyLjkwNDZDNTUuNjI5OSAyMy40NzA1IDU1LjY2MTYgMjQuNDE5OCA1NS4wOTU2IDI1LjAyNDdDNTQuODcyNCAyNS4yNjM0IDU0LjYxMDkgMjUuNTI4NSA1NC4zMTU3IDI1LjgyNzdDNTIuMjU0NyAyNy45MTY4IDQ4LjU1NDkgMzEuNjY3IDQ0LjgxMzUgMzkuNjY1OEM0My4yODE4IDQyLjk0MDYgNDIuMDg2NCA0NS44Mzg2IDQxLjA4MjMgNDguMjcyOUM0MC42NTM5IDQ5LjMxMTYgNDAuMjYwMyA1MC4yNjU5IDM5Ljg5MDIgNTEuMTI5QzM5LjI4NyA1Mi41MzU5IDM4LjcyNDggNTMuNzUwOCAzOC4xNzQ0IDU0LjYyNUMzNy44OTk3IDU1LjA2MTMgMzcuNTgwNiA1NS40OTA1IDM3LjIwMTcgNTUuODI0NUMzNi44MjAxIDU2LjE2MDcgMzYuMjYxMyA1Ni41IDM1LjU0NTcgNTYuNUMzNC42NzQyIDU2LjUgMzQuMDg5MiA1NS45NjkyIDMzLjc3NzQgNTUuNjA4M0MzMy40NTAyIDU1LjIyOTYgMzMuMTc1MiA1NC43NTExIDMyLjkzOTYgNTQuMzAxQzMyLjczMDUgNTMuOTAxMyAzMi41MDg4IDUzLjQzNjcgMzIuMjc5NyA1Mi45NTY1QzMyLjI0MjkgNTIuODc5NCAzMi4yMDU5IDUyLjgwMTkgMzIuMTY4OCA1Mi43MjQzQzMxLjg5NDIgNTIuMTQ5OSAzMS41OTU5IDUxLjUzNCAzMS4yNTM3IDUwLjg4NjhDMjkuODg4NiA0OC4zMDUgMjcuODUzOSA0NS4yODc4IDI0LjIzNDMgNDMuMTM4MkMyMy41MjIgNDIuNzE1MiAyMy4yODc1IDQxLjc5NDkgMjMuNzEwNSA0MS4wODI2QzI0LjEzMzUgNDAuMzcwMyAyNS4wNTM5IDQwLjEzNTggMjUuNzY2MiA0MC41NTg4QzMwLjA1NTYgNDMuMTA2MiAzMi40MTQ5IDQ2LjY2NDcgMzMuOTA1OCA0OS40ODQ1QzM0LjI3NzYgNTAuMTg3NiAzNC41OTczIDUwLjg0ODcgMzQuODc1MyA1MS40MzAyQzM0LjkxNDcgNTEuNTEyNCAzNC45NTI5IDUxLjU5MjYgMzQuOTkwMiA1MS42NzA3QzM1LjIyMjIgNTIuMTU2NyAzNS40MTY0IDUyLjU2MzcgMzUuNTk3OCA1Mi45MTAyQzM1LjYxNTEgNTIuOTQzNCAzNS42MzIxIDUyLjk3NTQgMzUuNjQ4NSA1My4wMDYxQzM2LjA1NjUgNTIuMzUzMSAzNi41MzQxIDUxLjM0MzQgMzcuMTMzIDQ5Ljk0NjhDMzcuNDc4MSA0OS4xNDE4IDM3Ljg1NzIgNDguMjIyOSAzOC4yNzYxIDQ3LjIwNzRDMzkuMjg4NiA0NC43NTMyIDQwLjUzMzkgNDEuNzM0NyA0Mi4wOTYxIDM4LjM5NDhDNDYuMDU5MSAyOS45MjIxIDUwLjA2NDEgMjUuODY0OCA1Mi4xNTM1IDIzLjc0ODJDNTIuNDQyMyAyMy40NTU2IDUyLjY5NDQgMjMuMjAwMiA1Mi45MDQ4IDIyLjk3NTNDNTMuNDcwOCAyMi4zNzAzIDU0LjQyIDIyLjMzODcgNTUuMDI1IDIyLjkwNDZaTTM1LjE5OTQgNTMuNTg5MkMzNS4xOTk0IDUzLjU4OTIgMzUuMiA1My41ODg4IDM1LjIwMTIgNTMuNTg3OUMzNS4yIDUzLjU4ODkgMzUuMTk5NCA1My41ODkzIDM1LjE5OTQgNTMuNTg5MlpNMzYuMDY2NiA1My42NjgyQzM2LjA3MzIgNTMuNjc0IDM2LjA3NjUgNTMuNjc3NSAzNi4wNzY1IDUzLjY3NzdDMzYuMDc2NSA1My42NzggMzYuMDczMiA1My42NzUxIDM2LjA2NjYgNTMuNjY4MloiLGZpbGw6bn0pLEkoInBhdGgiLHtkOiJNNjkuNSA5N0M2OS41IDk4LjEwNDYgNTYuMjkyNCA5OSA0MCA5OUMyMy43MDc2IDk5IDEwLjUgOTguMTA0NiAxMC41IDk3QzEwLjUgOTUuODk1NCAyMy43MDc2IDk1IDQwIDk1QzU2LjI5MjQgOTUgNjkuNSA5NS44OTU0IDY5LjUgOTdaIixmaWxsOiJibGFjayIsImZpbGwtb3BhY2l0eSI6IjAuMiJ9KSkpLEkoInAiLHtjbGFzc05hbWU6c3QsaWQ6c3R9LHMpLGMpLEkoVHQsbnVsbCkpKX19LG5wczpmdW5jdGlvbih0KXt2YXIgZT10LmJvcmRlcixuPXQuY2xhc3NOYW1lLHI9KHQubG9jYWxlLHQubGFiZWxzKSxvPXQubWVzc2FnZSxpPXQucHJvcGVydGllcyxhPXQubmV4dCxjPXQucXVlc3Rpb25JZDtyZXR1cm4gZnVuY3Rpb24odCxzKXt2YXIgdT10LmFwcCxsPXUudXNlTW9iaWxlU3R5bGluZyxmPXUuZGVjay5pbmRleCxkPUYoW24sInVsLWNhcmQtLW5wcyIsbHRdKSxwPXImJnIubGVmdCxoPXImJnIucmlnaHQsdj1fKCkoQXJyYXkoMTEpKS5tYXAoKGZ1bmN0aW9uKHQsbil7dmFyIHI9bixvPSJvcHRpb24tIi5jb25jYXQociksaT1mdW5jdGlvbih0KXt0LnRhcmdldC5zdHlsZS56SW5kZXg9Mix0LnRhcmdldC5zdHlsZS5ib3JkZXJDb2xvcj1lfSxjPWZ1bmN0aW9uKHQpe3QudGFyZ2V0LnN0eWxlLnpJbmRleD0iYXV0byIsdC50YXJnZXQuc3R5bGUuYm9yZGVyQ29sb3I9IiNlNmU2ZTYifSxzPXtvbmNsaWNrOmZ1bmN0aW9uKCl7cmV0dXJuIGEocil9LG9ua2V5cHJlc3M6ZnVuY3Rpb24odCl7cmV0dXJuIGZ1bmN0aW9uKHQpezEzIT10LmtleUNvZGUmJjMyIT10LmtleUNvZGV8fGEocil9KHQpfX07cmV0dXJuIm9udG91Y2hzdGFydCJpbiBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQ/KHMub250b3VjaHN0YXJ0PWkscy5vbnRvdWNoY2FuY2VsPWMscy5vbnRvdWNobW92ZT1jLHMub250b3VjaGVuZD1jKToocy5vbm1vdXNlZG93bj1pLHMub25tb3VzZWxlYXZlPWMpLEkoImRpdiIsVCgpKHtjbGFzc05hbWU6RihbXS5jb25jYXQoXygpKGZ0KFEsbCkpLF8oKShmdCgiIi5jb25jYXQoUSwiLSIpLmNvbmNhdChyKSxsKSkpKX0scyx7ImFyaWEtbGFiZWxsZWRieSI6IiIuY29uY2F0KHN0LCIgIikuY29uY2F0KG8pLHJvbGU6InJhZGlvIix0YWJpbmRleDowLGlkOm99KSxyKX0pKSxnPU10KGkpO3JldHVybiBJKCJmb3JtIix7Y2xhc3NOYW1lOmQsa2V5OmN9LF90KGcsbyksZyxmJTI9PTAmJkkoImRpdiIsbnVsbCksSSgiZGl2Iix7Y2xhc3NOYW1lOiJ1bC1jYXJkLS1ucHNfX251bWJlcnMifSx2KSxJKCJkaXYiLHtjbGFzc05hbWU6InVsLWNhcmQtLW5wc19fbGFiZWxzIn0sSSgic3BhbiIsbnVsbCxwKSxJKCJzcGFuIixudWxsLGgpKSxJKFR0LG51bGwpKX19LHZpZGVvdm9pY2U6ZnVuY3Rpb24odCl7dmFyIGU9dC5jbGFzc05hbWUsbj10Lm1lc3NhZ2Usbz10LnByb3BlcnRpZXMsaT10Lm5leHQsYT10LnF1ZXN0aW9uSWQsYz10LnVwZGF0ZUhlaWdodDtyZXR1cm4gZnVuY3Rpb24odCxzKXt2YXIgdT1GKFtlLFldKSxsPSJ1bC1jYXJkLXZpZGVvX19wbGF5ZXJfcmVjb3JkZXIiLGY9InVsLWNhcmQtdmlkZW9fX25leHRfYnV0dG9uIixkPSJ1bC12aWRlby1pbnRlcnZpZXctZm9ybSIscD0idWwtcXVlc3Rpb24tcGxheWVyLWNvbnRhaW5lciIsaD0idWwtcmVjb3JkZXItcGxheWVyLWNvbnRhaW5lciIsdj1vJiZvLnZpZGVvVXJsLGc9dC5hcHAseT1nLnN1cnZleUlkLG09Zy5yZXNwb25zZUdyb3VwVWlkLGI9Zy5hcGlVUkwseD1nLnVzZXJJZCx3PWcuYm9yZGVyLEU9Zy5lbnZJZCxqPWcuaGVhZGVycztpZih0LmNhcmREYXRhfHwodC5jYXJkRGF0YT17fSksdC5jYXJkRGF0YS51cGxvYWRJZD12b2lkIDAsdC5jYXJkRGF0YS5idXR0b25UZXh0PUx0KG8pLHQuY2FyZERhdGEuc2tpcEJ1dHRvblRleHQ9UnQobyksZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQobCkpe3hlKGwsdix7c3VydmV5SWQ6eSxyZXNwb25zZUdyb3VwVWlkOm0scXVlc3Rpb25JZDphLHZpc2l0b3JJZDp4fSxvLm1lZGlhVHlwZT09PUVlLk1FRElBX1RZUEVfQVVESU8pO3ZhciBDPWRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGYpO0MuaW5uZXJUZXh0PXQuY2FyZERhdGEuc2tpcEJ1dHRvblRleHQsQy5jbGFzc0xpc3QuYWRkKGtlKX12YXIgaz1mdW5jdGlvbihlLG4pe3ZhciByPWRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGYpO2U9PT1FZS5VUExPQURfU1RBUlRFRD8odC5jYXJkRGF0YS51cGxvYWRJZD1uW0VlLlVQTE9BRF9JRF0sci5pbm5lclRleHQ9dC5jYXJkRGF0YS5idXR0b25UZXh0LHIuY2xhc3NMaXN0LnJlbW92ZShrZSksT2JqZWN0LmFzc2lnbihyLnN0eWxlLHtiYWNrZ3JvdW5kQ29sb3I6d30pKTplPT09RWUuREVMRVRFJiYodC5jYXJkRGF0YS51cGxvYWRJZD1udWxsLHIuY2xhc3NMaXN0LmFkZChrZSksci5pbm5lclRleHQ9dC5jYXJkRGF0YS5za2lwQnV0dG9uVGV4dCxPYmplY3QuYXNzaWduKHIuc3R5bGUse2JhY2tncm91bmRDb2xvcjoiIn0pKX0sUz1mdW5jdGlvbih0LGUpe3ZhciBuPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImJ1dHRvbiIpO3JldHVybiBuLmNsYXNzTmFtZT0iIi5jb25jYXQoInVsLXZpZGVvLWJ0biIsIiAiKS5jb25jYXQodCksbi5hZGRFdmVudExpc3RlbmVyKCJjbGljayIsKGZ1bmN0aW9uKHQpe3QucHJldmVudERlZmF1bHQoKSx0LnN0b3BQcm9wYWdhdGlvbigpLGZ1bmN0aW9uKCl7dmFyIHQ9IShhcmd1bWVudHMubGVuZ3RoPjAmJnZvaWQgMCE9PWFyZ3VtZW50c1swXSl8fGFyZ3VtZW50c1swXSxlPWRvY3VtZW50LmdldEVsZW1lbnRCeUlkKHApLG49ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoaCk7dD8oZS5jbGFzc0xpc3QucmVtb3ZlKEt0KSxlLmNsYXNzTGlzdC5hZGQoSnQpLG4uY2xhc3NMaXN0LmFkZChLdCksbi5jbGFzc0xpc3QucmVtb3ZlKEp0KSk6KGJlKGwpLGUuY2xhc3NMaXN0LmFkZChLdCksZS5jbGFzc0xpc3QucmVtb3ZlKEp0KSxuLmNsYXNzTGlzdC5yZW1vdmUoS3QpLG4uY2xhc3NMaXN0LmFkZChKdCkpfShlKX0pKSxufSxPPWZ1bmN0aW9uKCl7dmFyIHQ9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2Iik7dC5pZD0idWwtcXVlc3Rpb24tcGxheWVyLWNvbnRhaW5lciIsdC5jbGFzc05hbWU9InVsLXZpZGVvLWNvbnRhaW5lciAiLmNvbmNhdChKdCksdC5hcHBlbmRDaGlsZCgoKHQsZSxuLHI9ITEsbz0iaHR0cHM6Ly9hcGkuc3ByaWcuY29tIik9Pntjb25zdCBpPXQrbmUsYT12ZShpKTtyZXR1cm4gZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigic2VjdXJpdHlwb2xpY3l2aW9sYXRpb24iLCh0PT57YWUobmV3IEVycm9yKGBWb2ljZSAmIFZpZGVvIGZlYXR1cmUgdmlvbGF0ZXMgJHt0LnZpb2xhdGVkRGlyZWN0aXZlfSB3ZWIgcGFnZSBDU1AgcG9saWNpZXMgZm9yIHRoZSBxdWVzdGlvbiBwbGF5ZXIuYCksInBsYXllckRldmljZUVycm9yIixvLHt9KX0pKSxjZShhLGVlLCgoKT0+e2RvY3VtZW50LmdldEVsZW1lbnRCeUlkKFl0KGkpKS5yZW1vdmUoKSxnZShpLGEpO2NvbnN0IHQ9d2luZG93LnZpZGVvanMoaSx7cGxheXNpbmxpbmU6ITAscGxheWJhY2tSYXRlczpbLjUsMSwxLjUsMl19KSxvPXVlKHQsWyJQbGF5YmFja1JhdGVNZW51QnV0dG9uIiwiUGxheVRvZ2dsZSIsIkZ1bGxzY3JlZW5Ub2dnbGUiXSksYz1vLmNoaWxkcmVuKCkuZmluZCgodD0+IkZ1bGxzY3JlZW5Ub2dnbGUiPT09dC5uYW1lXykpO2MuaGFzQ2xhc3MoInZqcy1kaXNhYmxlZCIpJiZjLmhpZGUoKSxkZSh0LG8sZSxuLHIpfSkpLGF9KShsLHtzcmM6dix0eXBlOiJhcHBsaWNhdGlvbi94LW1wZWdVUkwifSx2b2lkIDAsby5tZWRpYVR5cGU9PT1FZS5NRURJQV9UWVBFX0FVRElPLGIpKTt2YXIgZT1TKCJ1bC1yZWNvcmQtcmVzcG9uc2UtYnRuIiwhMSk7cmV0dXJuIHQuYXBwZW5kQ2hpbGQoZSksdH0sQT1mdW5jdGlvbigpe3ZhciB0PWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpO3QuaWQ9InVsLXJlY29yZGVyLXBsYXllci1jb250YWluZXIiLHQuY2xhc3NOYW1lPSJ1bC12aWRlby1jb250YWluZXIgIi5jb25jYXQoS3QpO3ZhciBlPVMoInVsLWJhY2stcXVlc3Rpb24tYnRuIiwhMCk7cmV0dXJuIHQuYXBwZW5kQ2hpbGQoZSksdC5hcHBlbmRDaGlsZCgoKHQsZT17fSxuPSJodHRwczovL2FwaS51c2VybGVhcC5jb20iLHIsbyxpLGE9ITEpPT57Y29uc3QgYz10K3JlLHM9dmUoYyk7cmV0dXJuIGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoInNlY3VyaXR5cG9saWN5dmlvbGF0aW9uIiwodD0+e2NvbnN0IGU9d2luZG93LnZpZGVvanMoYyk7YWUobmV3IEVycm9yKGBWb2ljZSAmIFZpZGVvIGZlYXR1cmUgdmlvbGF0ZXMgJHt0LnZpb2xhdGVkRGlyZWN0aXZlfSB3ZWIgcGFnZSBDU1AgcG9saWNpZXMgZm9yIHRoZSByZWNvcmRlciBwbGF5ZXIuYCksInJlY29yZGVyRGV2aWNlRXJyb3IiLG4saSxlLnBheWxvYWQudmlzaXRvcklkLGUucGF5bG9hZC5lbnZJZCl9KSksY2UocyxlZS5jb25jYXQodGUpLCgoKT0+e2dlKGMscyksZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoWXQoYykpLnJlbW92ZSgpLHBlKHMsYyxlLG4scixvLGksYSl9KSksc30pKGwse3N1cnZleUlkOnkscmVzcG9uc2VHcm91cFVpZDptLHF1ZXN0aW9uSWQ6YSx2aXNpdG9ySWQ6eCxlbnZJZDpFfSxiLGssITEsZnVuY3Rpb24odCl7Zm9yKHZhciBlPTE7ZTxhcmd1bWVudHMubGVuZ3RoO2UrKyl7dmFyIG49bnVsbCE9YXJndW1lbnRzW2VdP2FyZ3VtZW50c1tlXTp7fTtlJTI/Q2UoT2JqZWN0KG4pLCEwKS5mb3JFYWNoKChmdW5jdGlvbihlKXtyKCkodCxlLG5bZV0pfSkpOk9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzP09iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKHQsT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcnMobikpOkNlKE9iamVjdChuKSkuZm9yRWFjaCgoZnVuY3Rpb24oZSl7T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsZSxPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKG4sZSkpfSkpfXJldHVybiB0fSh7fSxqLHsieC11bC12aWRlby1yZWNvcmRlci1vcmlnaW4iOiJzZGsifSksby5tZWRpYVR5cGU9PT1FZS5NRURJQV9UWVBFX0FVRElPKSksdH0sVD1NdChvKTtyZXR1cm4gSSgiZGl2Iix7Y2xhc3NOYW1lOmx0LGtleTphfSxJKCJmb3JtIix7aWQ6ZCxjbGFzc05hbWU6dSxvbmNyZWF0ZTpmdW5jdGlvbigpe3ZhciB0PW5ldyBSZXNpemVPYnNlcnZlcigoZnVuY3Rpb24odCl7cmV0dXJuIGMoKX0pKSxlPWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoIi4iLmNvbmNhdChZKSk7dC5vYnNlcnZlKGUpfSxvbnN1Ym1pdDpmdW5jdGlvbih0KXtyZXR1cm4gU2UodCxpKX19LF90KFQsbiksVCxJKCJkaXYiLHtpZDoidWwtY2FyZC12b2ljZV9fdmlkZW8ifSxJKCJkaXYiLHtpZDpsLG9uY3JlYXRlOmZ1bmN0aW9uKCl7dmFyIHQ9ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQobCk7cmV0dXJuIHQuYXBwZW5kQ2hpbGQoTygpKSx0LmFwcGVuZENoaWxkKEEoKSksdH19KSxJKCJidXR0b24iLHtpZDpmLGNsYXNzTmFtZToidWwtY2FyZC10ZXh0X19idXR0b24gIi5jb25jYXQoa2UpLG9uY2xpY2s6ZnVuY3Rpb24oZSl7aWYoZS5wcmV2ZW50RGVmYXVsdCgpLGUuc3RvcFByb3BhZ2F0aW9uKCksbWUobCksZG9jdW1lbnQuZm9ybXNbZF0pe3QuY2FyZERhdGEudXBsb2FkSWQ/U2Uoe30saSk6U2Uoe2RlbGV0ZWRBdDpEYXRlLm5vdygpfSxpKTt2YXIgbj1kb2N1bWVudC5nZXRFbGVtZW50QnlJZChwKTtkb2N1bWVudC5nZXRFbGVtZW50QnlJZChoKS5jbGFzc0xpc3QuYWRkKEt0KSxuLmNsYXNzTGlzdC5yZW1vdmUoS3QpfX0scm9sZToiYnV0dG9uIn0sUnQobykpKSxJKFR0LG51bGwpKSl9fX0sbG9jYWxlOiJlbiIsYXBpVVJMOiJodHRwczovL2FwaS51c2VybGVhcC5jb20iLHNob3dTdXJ2ZXlCcmFuZDohMCxtYXJrZXRpbmdVcmw6Imh0dHBzOi8vdXNlcmxlYXAuY29tIixzbHVnTmFtZTpudWxsLHJlc3BvbnNlR3JvdXBVaWQ6bnVsbCxoZWFkZXJzOnt9LGlzUHJldmlldzohMSxhbnN3ZXJzOltdLGN1c3RvbU1ldGFkYXRhOnt9fSxZZT17aW5pdDpmdW5jdGlvbih0KXt2YXIgZT10LnN1cnZleUlkLG49dC5mcmFtZSxyPXQuY2FyZHMsbz10LmVudklkLGk9dC51c2VySWQsYT10Lm1ldGEsYz10LmJvcmRlcixzPXQuZm9udEZhbWlseSx1PXQuZm9udEZhbWlseVVSTCxsPXQubW9kZSxmPXQuY29udGV4dCxkPXQubG9jYWxlLHA9dC5hcGlVUkwsaD10LnNob3dTdXJ2ZXlCcmFuZCx2PXQubWFya2V0aW5nVXJsLGc9dC5zbHVnTmFtZSx5PXQucmVzcG9uc2VHcm91cFVpZCxtPXQuaGVhZGVycyxiPXQuZW5kQ2FyZCx4PXQuY29uZmlndXJlRXhpdE9uT3ZlcmxheUNsaWNrLHc9dC5pc1ByZXZpZXcsRT10LmFuc3dlcnMsaj10LmN1c3RvbU1ldGFkYXRhLEM9dC5leHBlcmltZW50RmxhZ3Msaz10LnVzZU1vYmlsZVN0eWxpbmcsUz10LmV2ZW50RW1pdHRlcjtyZXR1cm4gZnVuY3Rpb24odCxPKXtyZXR1cm4gcWUoe30sTy5hZGREZWNrKHtkZWNrOnIsaGFzRW5kQ2FyZDpifSkse3N1cnZleUlkOmUscnVubmluZzohMCxmcmFtZTpuLGVudklkOm8sdXNlcklkOmksbWV0YTphLGJvcmRlcjpjLGZvbnRGYW1pbHk6cyxmb250RmFtaWx5VVJMOnUsdGltZW91dDoxLG1vZGU6bCxjb250ZXh0OmYsbG9jYWxlOmQsYXBpVVJMOnAsc2hvd1N1cnZleUJyYW5kOmgsbWFya2V0aW5nVXJsOnYsc2x1Z05hbWU6ZyxyZXNwb25zZUdyb3VwVWlkOnksaGVhZGVyczptLGVuZENhcmQ6Yixjb25maWd1cmVFeGl0T25PdmVybGF5Q2xpY2s6eCxpc1ByZXZpZXc6dyxhbnN3ZXJzOkUsY3VzdG9tTWV0YWRhdGE6aixleHBlcmltZW50RmxhZ3M6Qyx1c2VNb2JpbGVTdHlsaW5nOmssZXZlbnRFbWl0dGVyOlN9KX19LGFkZERlY2s6ZnVuY3Rpb24odCl7dmFyIGU9dC5kZWNrLG49dC5oYXNFbmRDYXJkO3JldHVybiBmdW5jdGlvbih0KXt2YXIgcj1lLm1hcCgoZnVuY3Rpb24oZSl7cmV0dXJuIHFlKHt9LGUse0NhcmQ6dC5jYXJkc1tlLnR5cGVdfSl9KSk7cmV0dXJuIG4mJnIucHVzaCh7Q2FyZDp0LmNhcmRzLnRoYW5rc30pLHtkZWNrOntpbmRleDowLGNhcmRzOnJ9fX19LGNvbXBsZXRlOmZ1bmN0aW9uKCl7cmV0dXJuIGZ1bmN0aW9uKHQsZSl7cmV0dXJue2ludGVydmFsOnNldEludGVydmFsKGUuZGVkdWN0LDFlMyl9fX0sc2VlbjpmdW5jdGlvbigpe3JldHVybiBmdW5jdGlvbih0LGUpe1plKHQpfHxlLnRyYWNrSGlzdG9yeSh7ZXZlbnQ6InNlZW4iLGlzTmV3OiEwfSl9fSxjbG9zZTpmdW5jdGlvbigpe3JldHVybiBmdW5jdGlvbih0LGUpe2lmKCFaZSh0KSlyZXR1cm4gZS50cmFja0hpc3Rvcnkoe2V2ZW50OiJjbG9zZWQifSl9fSxzdWJtaXQ6ZnVuY3Rpb24odCl7dmFyIGU9dC5yZXNwb25zZSxuPXQucmVzcG9uc2VHcm91cFVpZCxyPXQuY29tcGxldGVkQXQ7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIHQ9TigpKFIoKS5tYXJrKChmdW5jdGlvbiB0KG8pe3ZhciBpLGE7cmV0dXJuIFIoKS53cmFwKChmdW5jdGlvbih0KXtmb3IoOzspc3dpdGNoKHQucHJldj10Lm5leHQpe2Nhc2UgMDppZihuJiYhWmUobykpe3QubmV4dD0yO2JyZWFrfXJldHVybiB0LmFicnVwdCgicmV0dXJuIik7Y2FzZSAyOnJldHVybiBpPXtyZXNwb25zZUdyb3VwVWlkOm4sbWV0YTpvLm1ldGEsY3VzdG9tTWV0YWRhdGE6by5jdXN0b21NZXRhZGF0YSxyZXNwb25zZXM6W2VdLGNvbXBsZXRlZEF0OnJ9LHQubmV4dD01LHplKCIiLmNvbmNhdChvLmFwaVVSTCwiL3Nkay8xL2Vudmlyb25tZW50cy8iKS5jb25jYXQoby5lbnZJZCwiL3Zpc2l0b3JzLyIpLmNvbmNhdChvLnVzZXJJZCwiL3Jlc3BvbnNlcy9zdWJtaXQiKSx7Ym9keTpKU09OLnN0cmluZ2lmeShpKSxoZWFkZXJzOm8uaGVhZGVycyxtZXRob2Q6IlBPU1QifSk7Y2FzZSA1OmlmKGE9dC5zZW50LGRvY3VtZW50LmFjdGl2ZUVsZW1lbnQuYmx1cigpLGEub2spe3QubmV4dD0xMzticmVha31pZighYS5yZXBvcnRFcnJvcil7dC5uZXh0PTEyO2JyZWFrfXJldHVybiBjb25zb2xlLndhcm4oIltVc2VyTGVhcF0gKEVSUi00MjcpIEZhaWxlZCB0byBzdWJtaXQgcmVzcG9uc2UiLGEuZXJyb3IpLHQubmV4dD0xMixXZShvLCJzdWJtaXRSZXNwb25zZSIsYS5lcnJvcik7Y2FzZSAxMjpyZXR1cm4gdC5hYnJ1cHQoInJldHVybiIpO2Nhc2UgMTM6Y2FzZSJlbmQiOnJldHVybiB0LnN0b3AoKX19KSx0KX0pKSk7cmV0dXJuIGZ1bmN0aW9uKGUpe3JldHVybiB0LmFwcGx5KHRoaXMsYXJndW1lbnRzKX19KCl9LGRlZHVjdDpmdW5jdGlvbigpe3JldHVybiBmdW5jdGlvbih0KXt2YXIgZT10LnRpbWVvdXQtMTtyZXR1cm4gZTw9MD8oY2xlYXJJbnRlcnZhbCh0LmludGVydmFsKSxTdC5lbmFibGUoKSx7cnVubmluZzohMSxpbnRlcnZhbDpudWxsLHRpbWVvdXQ6ZX0pOnt0aW1lb3V0OmV9fX0sbmV4dDpmdW5jdGlvbih0KXtyZXR1cm4gZnVuY3Rpb24oZSxuKXt2YXIgcj1EYXRlLm5vdygpLG89ZS5kZWNrLGk9by5jYXJkcyxhPW8uaW5kZXgsYz1pW2FdLHM9Yy5uYW1lLHU9Yy50eXBlLGw9ZS5yZXNwb25zZUdyb3VwVWlkLGY9Im9iamVjdCI9PT1JdCgpKHQuZGF0YSk/dC5kYXRhOnt2YWx1ZTp0LmRhdGF9LGQ9Zi52YWx1ZTtpW2FdLnZhbHVlPWQsZi5xdWVzdGlvbklkPXMsZi5hbnN3ZXJlZEF0PXI7dmFyIHA9e3Jlc3BvbnNlOmYscmVzcG9uc2VHcm91cFVpZDpsLHR5cGU6dX0saD0ibXVsdGlwbGVjaG9pY2UiPT09dT9PYmplY3QudmFsdWVzKGQpLmZpbmQoKGZ1bmN0aW9uKHQpe3JldHVybiExIT09dH0pKTpkLHY9InZpZGVvdm9pY2UiIT09dXx8IWYuZGVsZXRlZEF0OyJtdWx0aXBsZXNlbGVjdCI9PT11JiYoaD1pW2FdLnByb3BzLm9wdGlvbnMucmVkdWNlKChmdW5jdGlvbih0LGUpe3JldHVybiBkW2UuaWRdJiZ0LnB1c2goZS52YWx1ZSksdH0pLFtdKSk7dmFyIGc9ZnVuY3Rpb24odCxlLG4scil7dmFyIG89IShhcmd1bWVudHMubGVuZ3RoPjQmJnZvaWQgMCE9PWFyZ3VtZW50c1s0XSl8fGFyZ3VtZW50c1s0XTtpZihlPj10Lmxlbmd0aHx8ZTwwKXJldHVybiBudWxsO2Zvcih2YXIgaT10W2VdJiZ0W2VdLnByb3BzJiZ0W2VdLnByb3BzLnJvdXRpbmdPcHRpb25zfHxbXSxhPU1hdGgubWluKGUrMSx0Lmxlbmd0aC0xKSxjPW51bGwscz0wO3M8aS5sZW5ndGg7cysrKXt2YXIgdT1pW3NdLGw9dS5jb21wYXJhdG9yLGY9dS50YXJnZXQsZD11LnZhbHVlO2lmKCJhbnN3ZXJlZCI9PT1sJiZvKXtjPXBhcnNlSW50KGYsMTApO2JyZWFrfWlmKE9lW2xdJiZPZVtsXShuLGQpKXtjPXBhcnNlSW50KGYsMTApO2JyZWFrfX1yZXR1cm4gbnVsbD09PWMmJmU9PT10Lmxlbmd0aC0xP251bGw6LTE9PT1jP3I/dC5sZW5ndGgtMTpudWxsOm51bGw9PT1jP2E6Y30oaSxhLGgsISF0LmVuZENhcmQsdik7aWYobnVsbD09PWcpcmV0dXJuIHAuY29tcGxldGVkQXQ9cixuLnN1Ym1pdChwKSx2b2lkIHQuY29tcGxldGVTdXJ2ZXkoKTtpW2ddLkNhcmQ9PT1lLmNhcmRzLnRoYW5rcyYmKHAuY29tcGxldGVkQXQ9cik7dmFyIHk9bi5zdWJtaXQocCk7cmV0dXJuIGlbZ10uQ2FyZCE9ZS5jYXJkcy50aGFua3MmJnkuZmluYWxseSgoZnVuY3Rpb24oKXtuLnRyYWNrSGlzdG9yeSh7ZXZlbnQ6InNlZW4iLGluZGV4Omd9KX0pKSx7ZGVjazp7Y2FyZHM6aSxpbmRleDpnfX19fSx0cmFja0hpc3Rvcnk6ZnVuY3Rpb24odCl7dmFyIGU9dC5ldmVudCxuPXQuaW5kZXgscj10LmlzTmV3LG89dm9pZCAwIT09ciYmcjtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgdD1OKCkoUigpLm1hcmsoKGZ1bmN0aW9uIHQocil7dmFyIGksYSxjLHMsdSxsO3JldHVybiBSKCkud3JhcCgoZnVuY3Rpb24odCl7Zm9yKDs7KXN3aXRjaCh0LnByZXY9dC5uZXh0KXtjYXNlIDA6aWYoIVplKHIpKXt0Lm5leHQ9MjticmVha31yZXR1cm4gdC5hYnJ1cHQoInJldHVybiIpO2Nhc2UgMjpyZXR1cm4gaT1yLmRlY2ssYT1pLmNhcmRzLGM9aS5pbmRleCxzPXZvaWQgMCE9PW4/YVtuXTphW2NdLHU9e3NpZDpyLnN1cnZleUlkLHFpZDpzLm5hbWUsYWN0aW9uOmUsdmlkOnIudXNlcklkLGVpZDpyLmVudklkLGlzTmV3Om8scmVzcG9uc2VHcm91cFVpZDpyLnJlc3BvbnNlR3JvdXBVaWR9LHQubmV4dD03LHplKCIiLmNvbmNhdChyLmFwaVVSTCwiL3Nkay8xL3Zpc2l0b3JzLyIpLmNvbmNhdChyLnVzZXJJZCwiL3N1cnZleXMvIikuY29uY2F0KHIuc3VydmV5SWQsIi9oaXN0b3J5Iikse2JvZHk6SlNPTi5zdHJpbmdpZnkodSksaGVhZGVyczpyLmhlYWRlcnMsbWV0aG9kOiJQT1NUIn0pO2Nhc2UgNzppZigobD10LnNlbnQpLm9rKXt0Lm5leHQ9MTM7YnJlYWt9aWYoIWwucmVwb3J0RXJyb3Ipe3QubmV4dD0xMzticmVha31yZXR1cm4gY29uc29sZS53YXJuKCJbVXNlckxlYXBdIChFUlItNDI4KSBGYWlsZWQgdG8gdHJhY2sgc3VydmV5IGV2ZW50IixsLmVycm9yKSx0Lm5leHQ9MTMsV2UociwidHJhY2tIaXN0b3J5IixsLmVycm9yKTtjYXNlIDEzOmNhc2UiZW5kIjpyZXR1cm4gdC5zdG9wKCl9fSksdCl9KSkpO3JldHVybiBmdW5jdGlvbihlKXtyZXR1cm4gdC5hcHBseSh0aGlzLGFyZ3VtZW50cyl9fSgpfX07ZnVuY3Rpb24gS2UodCxlKXt2YXIgbj1PYmplY3Qua2V5cyh0KTtpZihPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKXt2YXIgcj1PYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHQpO2UmJihyPXIuZmlsdGVyKChmdW5jdGlvbihlKXtyZXR1cm4gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcih0LGUpLmVudW1lcmFibGV9KSkpLG4ucHVzaC5hcHBseShuLHIpfXJldHVybiBufWZ1bmN0aW9uIEplKHQpe2Zvcih2YXIgZT0xO2U8YXJndW1lbnRzLmxlbmd0aDtlKyspe3ZhciBuPW51bGwhPWFyZ3VtZW50c1tlXT9hcmd1bWVudHNbZV06e307ZSUyP0tlKE9iamVjdChuKSwhMCkuZm9yRWFjaCgoZnVuY3Rpb24oZSl7cigpKHQsZSxuW2VdKX0pKTpPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycz9PYmplY3QuZGVmaW5lUHJvcGVydGllcyh0LE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzKG4pKTpLZShPYmplY3QobikpLmZvckVhY2goKGZ1bmN0aW9uKGUpe09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LGUsT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihuLGUpKX0pKX1yZXR1cm4gdH12YXIgWGU9e2luaXQ6ZnVuY3Rpb24odCl7cmV0dXJuIGZ1bmN0aW9uKGUpe3JldHVybiBKZSh7fSxlLHtzZWxlY3RlZE9wdGlvbnM6dH0pfX0scmVzZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gZnVuY3Rpb24odCl7cmV0dXJuIEplKHt9LHQse3NlbGVjdGVkT3B0aW9uczp7fX0pfX0sdXBkYXRlU2VsZWN0ZWQ6ZnVuY3Rpb24odCl7cmV0dXJuIGZ1bmN0aW9uKGUpe2lmKG51bGwhPXQpe3ZhciBuPU9iamVjdC5hc3NpZ24oZS5zZWxlY3RlZE9wdGlvbnMpO3JldHVybiBuW3RdPSFuW3RdLEplKHt9LGUse3NlbGVjdGVkT3B0aW9uczpufSl9fX19O2Z1bmN0aW9uIFFlKHQsZSl7dmFyIG49T2JqZWN0LmtleXModCk7aWYoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyl7dmFyIHI9T2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyh0KTtlJiYocj1yLmZpbHRlcigoZnVuY3Rpb24oZSl7cmV0dXJuIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IodCxlKS5lbnVtZXJhYmxlfSkpKSxuLnB1c2guYXBwbHkobixyKX1yZXR1cm4gbn12YXIgdG49e29uVGV4dENoYW5nZTpmdW5jdGlvbih0KXtyZXR1cm4gZnVuY3Rpb24oZSl7cmV0dXJuIGZ1bmN0aW9uKHQpe2Zvcih2YXIgZT0xO2U8YXJndW1lbnRzLmxlbmd0aDtlKyspe3ZhciBuPW51bGwhPWFyZ3VtZW50c1tlXT9hcmd1bWVudHNbZV06e307ZSUyP1FlKE9iamVjdChuKSwhMCkuZm9yRWFjaCgoZnVuY3Rpb24oZSl7cigpKHQsZSxuW2VdKX0pKTpPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycz9PYmplY3QuZGVmaW5lUHJvcGVydGllcyh0LE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzKG4pKTpRZShPYmplY3QobikpLmZvckVhY2goKGZ1bmN0aW9uKGUpe09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LGUsT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihuLGUpKX0pKX1yZXR1cm4gdH0oe30sZSx7dmFsdWU6dH0pfX19LGVuPSJzdXJ2ZXkuYXBwZWFyZWQiLG5uPSJzdXJ2ZXkuZmFkaW5nT3V0Iixybj0ic3VydmV5LndpbGxDbG9zZSIsb249e1ZFUklGWV9WSUVXX1ZFUlNJT046InZlcmlmeS52aWV3LnZlcnNpb24ifSxhbj17VklFV19WRVJTSU9OOiJ2aWV3LnZlcnNpb24ifSxjbj0iY2xvc2UuY2xpY2siLHNuPSJzdXJ2ZXkuY29tcGxldGVkIjtmdW5jdGlvbiB1bih0KXtyZXR1cm4id2ViIiE9PXRbInVzZXJsZWFwLXBsYXRmb3JtIl19ZnVuY3Rpb24gbG4odCxlKXt2YXIgbj1PYmplY3Qua2V5cyh0KTtpZihPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKXt2YXIgcj1PYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHQpO2UmJihyPXIuZmlsdGVyKChmdW5jdGlvbihlKXtyZXR1cm4gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcih0LGUpLmVudW1lcmFibGV9KSkpLG4ucHVzaC5hcHBseShuLHIpfXJldHVybiBufXZhciBmbj17aW5pdDpmdW5jdGlvbih0KXt2YXIgZT10LmZyYW1lLG49dC5jYXJkcyxyPXQuc3VydmV5SWQsbz10LmVudklkLGk9dC51c2VySWQsYT10Lm1ldGEsYz10LmJvcmRlcixzPXQuZm9udEZhbWlseSx1PXQuZm9udEZhbWlseVVSTCxsPXQuY29udGV4dCxmPXQubG9jYWxlLGQ9dC5hcGlVUkwscD10LnNob3dTdXJ2ZXlCcmFuZCxoPXQubWFya2V0aW5nVXJsLHY9dC5zbHVnTmFtZSxnPXQucmVzcG9uc2VHcm91cFVpZCx5PXQuaGVhZGVycyxtPXQuZW5kQ2FyZCxiPXQuY29uZmlndXJlRXhpdE9uT3ZlcmxheUNsaWNrLHg9dC5pc1ByZXZpZXcsdz10LmFuc3dlcnMsRT10LmN1c3RvbU1ldGFkYXRhLGo9dC5leHBlcmltZW50RmxhZ3MsQz10LnVzZU1vYmlsZVN0eWxpbmcsaz10Lm1vYmlsZVBsYXRmb3JtLFM9dC5ldmVudEVtaXR0ZXI7cmV0dXJuIGZ1bmN0aW9uKHQsTyl7dmFyIEk9dW4oeSk/d2luZG93LmRvY3VtZW50OndpbmRvdy5wYXJlbnQuZG9jdW1lbnQ7Ty5hcHAuaW5pdCh7ZnJhbWU6SS5nZXRFbGVtZW50QnlJZChlKSxzdXJ2ZXlJZDpyLGNhcmRzOm4sZW52SWQ6byx1c2VySWQ6aSxtZXRhOmEsYm9yZGVyOmMsZm9udEZhbWlseTpzLGZvbnRGYW1pbHlVUkw6dSxjb250ZXh0OmwsbG9jYWxlOmYsYXBpVVJMOmQsc2hvd1N1cnZleUJyYW5kOnAsbWFya2V0aW5nVXJsOmgsc2x1Z05hbWU6dixyZXNwb25zZUdyb3VwVWlkOmcsaGVhZGVyczp5LGVuZENhcmQ6bSxjb25maWd1cmVFeGl0T25PdmVybGF5Q2xpY2s6Yixpc1ByZXZpZXc6eCxhbnN3ZXJzOncsY3VzdG9tTWV0YWRhdGE6RSxleHBlcmltZW50RmxhZ3M6aix1c2VNb2JpbGVTdHlsaW5nOkMsbW9iaWxlUGxhdGZvcm06ayxldmVudEVtaXR0ZXI6U30pLE8uYXBwLnNlZW4oKX19LHVwZGF0ZTpmdW5jdGlvbih0KXtyZXR1cm4gZnVuY3Rpb24oZSl7dmFyIG49ZS5hcHAscj1kb2N1bWVudC5nZXRFbGVtZW50QnlJZCh0KS5jbGFzc0xpc3Q7bi5ydW5uaW5nJiYhci5jb250YWlucygidWwtYXBwLS12aXNpYmxlIikmJih1bihuLmhlYWRlcnMpP3IuYWRkKCJ1bC1hcHAtLXZpc2libGUiKTooci5hZGQoInVsLWFwcC0tb3ZlcmxheSIpLHNldFRpbWVvdXQoKGZ1bmN0aW9uKCl7ci5hZGQoInVsLWFwcC0tdmlzaWJsZSIpfSksMTAwKSksbi5ldmVudEVtaXR0ZXImJm4uZXZlbnRFbWl0dGVyLmVtaXQoZW4pKSx1bihuLmhlYWRlcnMpfHxuLmZyYW1lLnNldEhlaWdodChmdW5jdGlvbih0KXt2YXIgZT10LnF1ZXJ5U2VsZWN0b3IoIi4iLmNvbmNhdCgkKSk7cmV0dXJuKGU/ZS5zY3JvbGxIZWlnaHQ6NjAwKSsoZSYmZS5wYXJlbnRFbGVtZW50P2UucGFyZW50RWxlbWVudC5jbGllbnRIZWlnaHQtZS5jbGllbnRIZWlnaHQ6MCl9KGRvY3VtZW50KSl9fSxmYWRlb3V0OmZ1bmN0aW9uKHQpe3JldHVybiBmdW5jdGlvbigpe3ZhciBlPU4oKShSKCkubWFyaygoZnVuY3Rpb24gZShuKXt2YXIgcixvO3JldHVybiBSKCkud3JhcCgoZnVuY3Rpb24oZSl7Zm9yKDs7KXN3aXRjaChlLnByZXY9ZS5uZXh0KXtjYXNlIDA6aWYocj1uLmFwcCxvPXIuZXZlbnRFbWl0dGVyLCF1bihyLmhlYWRlcnMpKXtlLm5leHQ9NDticmVha31yZXR1cm4gZS5hYnJ1cHQoInJldHVybiIpO2Nhc2UgNDpyZXR1cm4gby5lbWl0KG5uKSxlLmFicnVwdCgicmV0dXJuIixuZXcgUHJvbWlzZSgoZnVuY3Rpb24oZSl7dmFyIG49ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQodCk7bi5hZGRFdmVudExpc3RlbmVyKCJ0cmFuc2l0aW9uZW5kIiwoZnVuY3Rpb24odCl7Im9wYWNpdHkiPT09dC5wcm9wZXJ0eU5hbWUmJmUoKX0pKSxuLmNsYXNzTGlzdC5yZW1vdmUoInVsLWFwcC0tdmlzaWJsZSIpfSkpKTtjYXNlIDY6Y2FzZSJlbmQiOnJldHVybiBlLnN0b3AoKX19KSxlKX0pKSk7cmV0dXJuIGZ1bmN0aW9uKHQpe3JldHVybiBlLmFwcGx5KHRoaXMsYXJndW1lbnRzKX19KCl9LHJlbW92ZTpmdW5jdGlvbih0KXt2YXIgZT10LmluaXRpYXRvcjtyZXR1cm4gZnVuY3Rpb24odCl7dmFyIG49dC5hcHAscj1uLmZyYW1lLG89bi5ldmVudEVtaXR0ZXI7WyJpb3MiLCJhbmRyb2lkIl0uaW5jbHVkZXMobi5oZWFkZXJzWyJ1c2VybGVhcC1wbGF0Zm9ybSJdKSYmby5lbWl0KHJuLHtpbml0aWF0b3I6ZX0pLHVuKG4uaGVhZGVycyl8fChvLmVtaXQocm4se2luaXRpYXRvcjplfSksci5yZW1vdmUoKSl9fSxjbG9zZTpmdW5jdGlvbih0KXtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgZT1OKCkoUigpLm1hcmsoKGZ1bmN0aW9uIGUobixyKXtyZXR1cm4gUigpLndyYXAoKGZ1bmN0aW9uKGUpe2Zvcig7Oylzd2l0Y2goZS5wcmV2PWUubmV4dCl7Y2FzZSAwOnJldHVybiBlLm5leHQ9MixyLmZhZGVvdXQodCk7Y2FzZSAyOnJldHVybiBlLm5leHQ9NCxyLmFwcC5jbG9zZSgpO2Nhc2UgNDpTdC5lbmFibGUoKSxyLnJlbW92ZSh7aW5pdGlhdG9yOmNufSk7Y2FzZSA2OmNhc2UiZW5kIjpyZXR1cm4gZS5zdG9wKCl9fSksZSl9KSkpO3JldHVybiBmdW5jdGlvbih0LG4pe3JldHVybiBlLmFwcGx5KHRoaXMsYXJndW1lbnRzKX19KCl9LGRlc3Ryb3k6ZnVuY3Rpb24odCl7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIGU9TigpKFIoKS5tYXJrKChmdW5jdGlvbiBlKG4scil7cmV0dXJuIFIoKS53cmFwKChmdW5jdGlvbihlKXtmb3IoOzspc3dpdGNoKGUucHJldj1lLm5leHQpe2Nhc2UgMDpyZXR1cm4gZS5uZXh0PTIsci5mYWRlb3V0KHQpO2Nhc2UgMjpTdC5lbmFibGUoKSxyLnJlbW92ZSh7aW5pdGlhdG9yOnNufSk7Y2FzZSA0OmNhc2UiZW5kIjpyZXR1cm4gZS5zdG9wKCl9fSksZSl9KSkpO3JldHVybiBmdW5jdGlvbih0LG4pe3JldHVybiBlLmFwcGx5KHRoaXMsYXJndW1lbnRzKX19KCl9fSxkbj1mdW5jdGlvbih0KXtmb3IodmFyIGU9MTtlPGFyZ3VtZW50cy5sZW5ndGg7ZSsrKXt2YXIgbj1udWxsIT1hcmd1bWVudHNbZV0/YXJndW1lbnRzW2VdOnt9O2UlMj9sbihPYmplY3QobiksITApLmZvckVhY2goKGZ1bmN0aW9uKGUpe3IoKSh0LGUsbltlXSl9KSk6T2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcnM/T2JqZWN0LmRlZmluZVByb3BlcnRpZXModCxPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycyhuKSk6bG4oT2JqZWN0KG4pKS5mb3JFYWNoKChmdW5jdGlvbihlKXtPYmplY3QuZGVmaW5lUHJvcGVydHkodCxlLE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IobixlKSl9KSl9cmV0dXJuIHR9KHthcHA6WWUsbXVsdGlwbGVzZWxlY3Q6WGUsb3BlblRleHQ6dG59LGZuKSxwbj17YXBwOiRlLG11bHRpcGxlc2VsZWN0OntzZWxlY3RlZE9wdGlvbnM6e319LG9wZW5UZXh0Ont2YWx1ZToiIn19O3ZhciBobj13aW5kb3cuX19jZmcsdm49aG4uZnJhbWUsZ249aG4uZW52SWQseW49aG4uc3VydmV5SWQsbW49aG4udXNlcklkLGJuPWhuLmNhcmRzLHhuPWhuLm1vZGUsd249aG4uYm9yZGVyLEVuPXZvaWQgMD09PXduPyIjNjY2NGY3Ijp3bixqbj1obi5jb250ZXh0LENuPWhuLmxvY2FsZSxrbj1obi5mb250RmFtaWx5LFNuPWhuLmZvbnRGYW1pbHlVUkwsT249aG4uYXBpVVJMLEluPWhuLnNob3dTdXJ2ZXlCcmFuZCxBbj1obi5tYXJrZXRpbmdVcmwsVG49aG4uc2x1Z05hbWUsTW49aG4ucmVzcG9uc2VHcm91cFVpZCxfbj1obi5oZWFkZXJzLExuPWhuLmVuZENhcmQsUm49aG4uY3VzdG9tU3R5bGVzLFBuPWhuLmNvbmZpZ3VyZUV4aXRPbk92ZXJsYXlDbGljayxObj1obi5pc1ByZXZpZXcsRG49aG4uYW5zd2VycyxGbj1obi5jdXN0b21NZXRhZGF0YSxVbj1obi5leHBlcmltZW50RmxhZ3MsQm49aG4udXNlTW9iaWxlU3R5bGluZyx6bj1obi5tb2JpbGVQbGF0Zm9ybSxWbj1obi5ldmVudEVtaXR0ZXIsSG49ZG9jdW1lbnQuaGVhZCxxbj1Wbnx8dm4uZXZlbnRFbWl0dGVyO3FuJiZxbi5lbWl0KG9uLlZFUklGWV9WSUVXX1ZFUlNJT04scigpKHt9LGFuLlZJRVdfVkVSU0lPTiwiMi4xNC4zIikpO3ZhciBXbj1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJzdHlsZSIpO2lmKFduLnR5cGU9InRleHQvY3NzIixXbi5hcHBlbmRDaGlsZChkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZSh5dCgpKSksSG4uYXBwZW5kQ2hpbGQoV24pLFJuJiZmdW5jdGlvbih0LGUpe3ZhciBuPXQuY3JlYXRlRWxlbWVudCgic3R5bGUiKTtuLnR5cGU9InRleHQvY3NzIixuLnRleHRDb250ZW50PWUsbi5pZD1aLHQuaGVhZC5hcHBlbmRDaGlsZChuKX0oZG9jdW1lbnQsUm4pLGtuJiZTbiYmcGFyZW50KXt2YXIgR249ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgibGluayIpO0duLnJlbD0ic3R5bGVzaGVldCIsR24uaHJlZj1TbixIbi5hcHBlbmRDaGlsZChHbil9dmFyIFpuPWZ1bmN0aW9uKHQsZSxuLHIpe3ZhciBvLGk9W10ubWFwLGE9ciYmci5jaGlsZHJlblswXXx8bnVsbCxjPWEmJmZ1bmN0aW9uIHQoZSl7cmV0dXJue25vZGVOYW1lOmUubm9kZU5hbWUudG9Mb3dlckNhc2UoKSxhdHRyaWJ1dGVzOnt9LGNoaWxkcmVuOmkuY2FsbChlLmNoaWxkTm9kZXMsKGZ1bmN0aW9uKGUpe3JldHVybiAzPT09ZS5ub2RlVHlwZT9lLm5vZGVWYWx1ZTp0KGUpfSkpfX0oYSkscz1bXSx1PSEwLGw9dih0KSxmPWZ1bmN0aW9uIHQoZSxuLHIpe2Zvcih2YXIgbyBpbiByKSJmdW5jdGlvbiI9PXR5cGVvZiByW29dP2Z1bmN0aW9uKHQsbyl7clt0XT1mdW5jdGlvbih0KXt2YXIgaT1vKHQpO3JldHVybiJmdW5jdGlvbiI9PXR5cGVvZiBpJiYoaT1pKHkoZSxsKSxyKSksaSYmaSE9PShuPXkoZSxsKSkmJiFpLnRoZW4mJmgobD1nKGUsdihuLGkpLGwpKSxpfX0obyxyW29dKTp0KGUuY29uY2F0KG8pLG5bb109dihuW29dKSxyW29dPXYocltvXSkpO3JldHVybiByfShbXSxsLHYoZSkpO3JldHVybiBoKCksZjtmdW5jdGlvbiBkKHQpe3JldHVybiJmdW5jdGlvbiI9PXR5cGVvZiB0P2QodChsLGYpKTpudWxsIT10P3Q6IiJ9ZnVuY3Rpb24gcCgpe289IW87dmFyIHQ9ZChuKTtmb3IociYmIW8mJihhPUMocixhLGMsYz10KSksdT0hMTtzLmxlbmd0aDspcy5wb3AoKSgpfWZ1bmN0aW9uIGgoKXtvfHwobz0hMCxzZXRUaW1lb3V0KHApKX1mdW5jdGlvbiB2KHQsZSl7dmFyIG49e307Zm9yKHZhciByIGluIHQpbltyXT10W3JdO2Zvcih2YXIgciBpbiBlKW5bcl09ZVtyXTtyZXR1cm4gbn1mdW5jdGlvbiBnKHQsZSxuKXt2YXIgcj17fTtyZXR1cm4gdC5sZW5ndGg/KHJbdFswXV09dC5sZW5ndGg+MT9nKHQuc2xpY2UoMSksZSxuW3RbMF1dKTplLHYobixyKSk6ZX1mdW5jdGlvbiB5KHQsZSl7Zm9yKHZhciBuPTA7bjx0Lmxlbmd0aDspZT1lW3RbbisrXV07cmV0dXJuIGV9ZnVuY3Rpb24gbSh0KXtyZXR1cm4gdD90LmtleTpudWxsfWZ1bmN0aW9uIGIodCl7cmV0dXJuIHQuY3VycmVudFRhcmdldC5ldmVudHNbdC50eXBlXSh0KX1mdW5jdGlvbiB4KHQsZSxuLHIsbyl7aWYoImtleSI9PT1lKTtlbHNlIGlmKCJzdHlsZSI9PT1lKWlmKCJzdHJpbmciPT10eXBlb2Ygbil0LnN0eWxlLmNzc1RleHQ9bjtlbHNlIGZvcih2YXIgaSBpbiJzdHJpbmciPT10eXBlb2YgciYmKHI9dC5zdHlsZS5jc3NUZXh0PSIiKSx2KHIsbikpe3ZhciBhPW51bGw9PW58fG51bGw9PW5baV0/IiI6bltpXTsiLSI9PT1pWzBdP3Quc3R5bGUuc2V0UHJvcGVydHkoaSxhKTp0LnN0eWxlW2ldPWF9ZWxzZSJvIj09PWVbMF0mJiJuIj09PWVbMV0/KGU9ZS5zbGljZSgyKSx0LmV2ZW50cz9yfHwocj10LmV2ZW50c1tlXSk6dC5ldmVudHM9e30sdC5ldmVudHNbZV09bixuP3J8fHQuYWRkRXZlbnRMaXN0ZW5lcihlLGIpOnQucmVtb3ZlRXZlbnRMaXN0ZW5lcihlLGIpKTplIGluIHQmJiJsaXN0IiE9PWUmJiJ0eXBlIiE9PWUmJiJkcmFnZ2FibGUiIT09ZSYmInNwZWxsY2hlY2siIT09ZSYmInRyYW5zbGF0ZSIhPT1lJiYhbz90W2VdPW51bGw9PW4/IiI6bjpudWxsIT1uJiYhMSE9PW4mJnQuc2V0QXR0cmlidXRlKGUsbiksbnVsbCE9biYmITEhPT1ufHx0LnJlbW92ZUF0dHJpYnV0ZShlKX1mdW5jdGlvbiB3KHQsZSl7dmFyIG49InN0cmluZyI9PXR5cGVvZiB0fHwibnVtYmVyIj09dHlwZW9mIHQ/ZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUodCk6KGU9ZXx8InN2ZyI9PT10Lm5vZGVOYW1lKT9kb2N1bWVudC5jcmVhdGVFbGVtZW50TlMoImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIix0Lm5vZGVOYW1lKTpkb2N1bWVudC5jcmVhdGVFbGVtZW50KHQubm9kZU5hbWUpLHI9dC5hdHRyaWJ1dGVzO2lmKHIpe3Iub25jcmVhdGUmJnMucHVzaCgoZnVuY3Rpb24oKXtyLm9uY3JlYXRlKG4pfSkpO2Zvcih2YXIgbz0wO288dC5jaGlsZHJlbi5sZW5ndGg7bysrKW4uYXBwZW5kQ2hpbGQodyh0LmNoaWxkcmVuW29dPWQodC5jaGlsZHJlbltvXSksZSkpO2Zvcih2YXIgaSBpbiByKXgobixpLHJbaV0sbnVsbCxlKX1yZXR1cm4gbn1mdW5jdGlvbiBFKHQsZSl7dmFyIG49ZS5hdHRyaWJ1dGVzO2lmKG4pe2Zvcih2YXIgcj0wO3I8ZS5jaGlsZHJlbi5sZW5ndGg7cisrKUUodC5jaGlsZE5vZGVzW3JdLGUuY2hpbGRyZW5bcl0pO24ub25kZXN0cm95JiZuLm9uZGVzdHJveSh0KX1yZXR1cm4gdH1mdW5jdGlvbiBqKHQsZSxuKXtmdW5jdGlvbiByKCl7dC5yZW1vdmVDaGlsZChFKGUsbikpfXZhciBvPW4uYXR0cmlidXRlcyYmbi5hdHRyaWJ1dGVzLm9ucmVtb3ZlO28/byhlLHIpOnIoKX1mdW5jdGlvbiBDKHQsZSxuLHIsbyl7aWYocj09PW4pO2Vsc2UgaWYobnVsbD09bnx8bi5ub2RlTmFtZSE9PXIubm9kZU5hbWUpe3ZhciBpPXcocixvKTt0Lmluc2VydEJlZm9yZShpLGUpLG51bGwhPW4mJmoodCxlLG4pLGU9aX1lbHNlIGlmKG51bGw9PW4ubm9kZU5hbWUpZS5ub2RlVmFsdWU9cjtlbHNleyFmdW5jdGlvbih0LGUsbixyKXtmb3IodmFyIG8gaW4gdihlLG4pKW5bb10hPT0oInZhbHVlIj09PW98fCJjaGVja2VkIj09PW8/dFtvXTplW29dKSYmeCh0LG8sbltvXSxlW29dLHIpO3ZhciBpPXU/bi5vbmNyZWF0ZTpuLm9udXBkYXRlO2kmJnMucHVzaCgoZnVuY3Rpb24oKXtpKHQsZSl9KSl9KGUsbi5hdHRyaWJ1dGVzLHIuYXR0cmlidXRlcyxvPW98fCJzdmciPT09ci5ub2RlTmFtZSk7Zm9yKHZhciBhPXt9LGM9e30sbD1bXSxmPW4uY2hpbGRyZW4scD1yLmNoaWxkcmVuLGg9MDtoPGYubGVuZ3RoO2grKyl7bFtoXT1lLmNoaWxkTm9kZXNbaF0sbnVsbCE9KHk9bShmW2hdKSkmJihhW3ldPVtsW2hdLGZbaF1dKX1oPTA7Zm9yKHZhciBnPTA7ZzxwLmxlbmd0aDspe3ZhciB5PW0oZltoXSksYj1tKHBbZ109ZChwW2ddKSk7aWYoY1t5XSloKys7ZWxzZSBpZihudWxsPT1ifHxiIT09bShmW2grMV0pKWlmKG51bGw9PWJ8fHUpbnVsbD09eSYmKEMoZSxsW2hdLGZbaF0scFtnXSxvKSxnKyspLGgrKztlbHNle3ZhciBFPWFbYl18fFtdO3k9PT1iPyhDKGUsRVswXSxFWzFdLHBbZ10sbyksaCsrKTpFWzBdP0MoZSxlLmluc2VydEJlZm9yZShFWzBdLGxbaF0pLEVbMV0scFtnXSxvKTpDKGUsbFtoXSxudWxsLHBbZ10sbyksY1tiXT1wW2ddLGcrK31lbHNlIG51bGw9PXkmJmooZSxsW2hdLGZbaF0pLGgrK31mb3IoO2g8Zi5sZW5ndGg7KW51bGw9PW0oZltoXSkmJmooZSxsW2hdLGZbaF0pLGgrKztmb3IodmFyIGggaW4gYSljW2hdfHxqKGUsYVtoXVswXSxhW2hdWzFdKX1yZXR1cm4gZX19KHBuLGRuLHZ0LHVuKF9uKT93aW5kb3cuZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQodm4pOmRvY3VtZW50LmJvZHkpO1puLmluaXQoe3N1cnZleUlkOnluLGZyYW1lOnZuLGVudklkOmduLHVzZXJJZDptbixjYXJkczpibixtb2RlOnhuLG1ldGE6ZnVuY3Rpb24odCl7dmFyIGU9dC5kaXJlY3RFbWJlZCxuPXQubW9kZSxyPXZvaWQgMD09PW4/bnVsbDpuLG89ZT93aW5kb3c6d2luZG93LnBhcmVudCxpPW8uZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50O3JldHVybnttb2RlOnIsc3c6by5zY3JlZW4ud2lkdGgsc2g6by5zY3JlZW4uaGVpZ2h0LGN3OmkuY2xpZW50V2lkdGgsY2g6aS5jbGllbnRIZWlnaHQscDpvLmxvY2F0aW9uLmhyZWYsbDpvLm5hdmlnYXRvci5sYW5ndWFnZX19KHttb2RlOnhuLGRpcmVjdEVtYmVkOnVuKF9uKX0pLGJvcmRlcjpFbixmb250RmFtaWx5OmtuLGNvbnRleHQ6am4sbG9jYWxlOkNuLGFwaVVSTDpPbixzaG93U3VydmV5QnJhbmQ6SW4sbWFya2V0aW5nVXJsOkFuLHNsdWdOYW1lOlRuLHJlc3BvbnNlR3JvdXBVaWQ6TW4saGVhZGVyczpfbixlbmRDYXJkOkxuLGNvbmZpZ3VyZUV4aXRPbk92ZXJsYXlDbGljazpQbixpc1ByZXZpZXc6Tm4sYW5zd2VyczpEbixjdXN0b21NZXRhZGF0YTpGbixleHBlcmltZW50RmxhZ3M6VW4sdXNlTW9iaWxlU3R5bGluZzpCbixtb2JpbGVQbGF0Zm9ybTp6bixldmVudEVtaXR0ZXI6Vm59KX0oKX0oKTs=';
|