@sprig-technologies/sprig-browser 2.14.5 → 2.14.6

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.
@@ -1 +1 @@
1
- export const encodedViewJs = 'LyohIEZvciBsaWNlbnNlIGluZm9ybWF0aW9uIHBsZWFzZSBzZWUgdXNlcmxlYXAtd2ViLXZpZXctc2RrLXYyLjE0LjUuanMuTElDRU5TRS50eHQgKi8KIWZ1bmN0aW9uKCl7dmFyIHQ9ezc3ODg6ZnVuY3Rpb24odCxlLG4peyhlPW4oMTg5ODYpKCExKSkucHVzaChbdC5pZCwiLnVsLWNhcmQge1xuICBmbGV4OiAxIDEgYXV0bztcbiAgYm9yZGVyLXJhZGl1czogMnB4O1xuICBkaXNwbGF5OiBmbGV4O1xuICBmbGV4LWRpcmVjdGlvbjogY29sdW1uO1xuICBmb250LXNpemU6IDE3cHg7XG4gIGxpbmUtaGVpZ2h0OiAxOXB4O1xuICB0ZXh0LWFsaWduOiBsZWZ0O1xufVxuXG4udWwtY2FyZF9fY29udGFpbmVyLS1kZXNrdG9wIHtcbiAgbWFyZ2luOiAxNXB4O1xuICBib3JkZXI6IDJweCBzb2xpZCAjZmZmO1xuICBib3gtc2hhZG93OiAwcHggMHB4IDE1cHggcmdiYSgwLCAwLCAwLCAwLjE1KTtcbn1cblxuLnVsLWNhcmRfX2NvbnRhaW5lci0tbW9iaWxlIHtcbiAgYm9yZGVyLXdpZHRoOiAwO1xuICBib3gtc2hhZG93OiAwcHggMHB4IDVweCByZ2JhKDAsIDAsIDAsIDAuMjUpO1xuICBtYXJnaW4tdG9wOiA1cHg7XG59XG5cbi51bC1jYXJkX19jb250YWluZXIge1xuICBwYWRkaW5nOiAyMHB4IDIwcHggNXB4IDIwcHg7XG4gIGZsZXg6IDEgMSBhdXRvO1xuICBiYWNrZ3JvdW5kOiAjZmZmZmZmO1xuICBkaXNwbGF5OiBmbGV4O1xuICBmbGV4LWRpcmVjdGlvbjogY29sdW1uO1xuICBmb250LXNpemU6IDE3cHg7XG4gIGxpbmUtaGVpZ2h0OiAyM3B4O1xuICB0ZXh0LWFsaWduOiBjZW50ZXI7XG4gIG92ZXJmbG93OiBhdXRvO1xuICBib3JkZXItcmFkaXVzOiA2cHg7XG59XG5cbi51bC1xdWVzdGlvbiB7XG4gIGZsZXg6IDEgMCBhdXRvO1xuICBjb2xvcjogIzM0MzQ0MjtcbiAgZGlzcGxheTogYmxvY2s7XG4gIGZvbnQtc2l6ZTogMjBweDtcbiAgbGluZS1oZWlnaHQ6IDEyNSU7XG4gIGZvbnQtd2VpZ2h0OiA1MDA7XG4gIGN1cnNvcjogZGVmYXVsdDtcbiAgdGV4dC1hbGlnbjogbGVmdDtcbn1cblxuLnVsLWNhcHRpb24ge1xuICBmbGV4OiAxIDAgYXV0bztcbiAgbWFyZ2luLXRvcDogOHB4O1xuICBtYXJnaW4tYm90dG9tOiAxNXB4O1xuICBmb250LXNpemU6IDE1cHg7XG4gIGxpbmUtaGVpZ2h0OiAxMzAuMzUlO1xuICBsZXR0ZXItc3BhY2luZzogMC4wMmVtO1xuICBjb2xvcjogIzZjNmM2ZTtcbiAgdGV4dC1hbGlnbjogbGVmdDtcbn1cblxuLnVsLWNhcmQtLW11bHRpcGxlIHtcbiAgbWFyZ2luLXRvcDogMTVweDtcbn1cblxuLnVsLWNhcmRfX2Nob2ljZXMge1xuICBtYXJnaW46IDVweCAwIDAgMDtcbiAgZmxleDogMSAwO1xuICBoZWlnaHQ6IDEwMCU7XG59XG5cbi5jaG9pY2UtLW1vYmlsZSB7XG4gIGJvcmRlcjogMnB4IHNvbGlkICNlNmU2ZTY7XG59XG5cbi5jaG9pY2UtLWRlc2t0b3Age1xuICBib3JkZXI6IDFweCBzb2xpZCAjZTZlNmU2O1xufVxuXG4uY2hvaWNlIHtcbiAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAgY29sb3I6ICMyNjIxMzY7XG4gIGN1cnNvcjogcG9pbnRlcjtcbiAgZGlzcGxheTogZmxleDtcbiAganVzdGlmeS1jb250ZW50OiBmbGV4LXN0YXJ0O1xuXG4gIGJveC1zaXppbmc6IGJvcmRlci1ib3g7XG4gIGJvcmRlci1yYWRpdXM6IDNweDtcblxuICBtYXJnaW4tYm90dG9tOiA3cHg7XG4gIGZvbnQtc2l6ZTogMTVweDtcbiAgbGluZS1oZWlnaHQ6IDIwcHg7XG4gIHBhZGRpbmc6IDEwcHggMjBweCAxMHB4IDE1cHg7XG4gIGJhY2tncm91bmQtY29sb3I6IHJnYmEoMCwgMCwgMCwgMC4wMSk7XG59XG5cbi5jaG9pY2UtLWRlc2t0b3A6aG92ZXIge1xuICBiYWNrZ3JvdW5kLWNvbG9yOiByZ2JhKDAsIDAsIDAsIDAuMDUpO1xufVxuXG4uY2hvaWNlLS1kZXNrdG9wOmFjdGl2ZSxcbi5jaG9pY2UtLW1vYmlsZTphY3RpdmUge1xuICBiYWNrZ3JvdW5kLWNvbG9yOiByZ2JhKDAsIDAsIDAsIDAuMDUpO1xufVxuXG4udWwtY2FyZC0tdGhhbmtzIHtcbiAgbWFyZ2luLXRvcDogMTVweDtcbn1cblxuLnVsLXRoYW5rcy1jaGVjayB7XG4gIHRleHQtYWxpZ246IGNlbnRlcjtcbiAgbWFyZ2luLWJvdHRvbTogMjBweDtcbn1cblxuLnVsLWNhcmQtLXRoYW5rcy1jb250ZW50IHtcbiAgcGFkZGluZzogMjBweCAwIDEwcHggMDtcbn1cblxuLnVsLWNhcmQtLXRoYW5rcyAudWwtcXVlc3Rpb24ge1xuICBwYWRkaW5nLXRvcDogMDtcbiAgdGV4dC1hbGlnbjogY2VudGVyO1xufVxuXG4udWwtY2FyZC0tdGhhbmtzIC51bC1jYXB0aW9uIHtcbiAgcGFkZGluZy10b3A6IDA7XG4gIHRleHQtYWxpZ246IGNlbnRlcjtcbiAgb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDtcbiAgaHlwaGVuczogYXV0bztcbiAgaHlwaGVuYXRlLWxpbWl0LWxpbmVzOiBuby1saW1pdDtcbn1cblxuLnNlbGVjdC1jaGVja2JveCB7XG4gIGhlaWdodDogMTZweDtcbiAgd2lkdGg6IDE2cHg7XG4gIGJvcmRlci1yYWRpdXM6IDNweDtcbiAgYm9yZGVyOiAxcHggc29saWQgIzMyMzIzMjtcbiAgZGlzcGxheTogZmxleDtcbiAgYm94LXNpemluZzogYm9yZGVyLWJveDtcbiAgYm94LXNoYWRvdzogaW5zZXQgM3B4IDNweCAwcHggcmdiYSgwLCAwLCAwLCAwLjEpO1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAndHJhbnNwYXJlbnQnO1xuICBhbGlnbi1pdGVtczogY2VudGVyO1xuICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjtcbn1cblxuLnNlbGVjdC1yYWRpbyB7XG4gIGhlaWdodDogMTZweDtcbiAgd2lkdGg6IDE2cHg7XG4gIGJvcmRlci1yYWRpdXM6IDE2cHg7XG4gIGJvcmRlcjogMXB4IHNvbGlkICMzMjMyMzI7XG4gIGRpc3BsYXk6IGZsZXg7XG4gIGJveC1zaXppbmc6IGJvcmRlci1ib3g7XG4gIGJveC1zaGFkb3c6IGluc2V0IDJweCAycHggMHB4IHJnYmEoMCwgMCwgMCwgMC4xKTtcbiAgYmFja2dyb3VuZC1jb2xvcjogJ3RyYW5zcGFyZW50JztcbiAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7XG59XG5cbi8qIExpbmsgc3R1ZGllcyB3aWRlIHNjcmVlbiB2aWV3ICovXG5AbWVkaWEgb25seSBzY3JlZW4gYW5kIChtaW4td2lkdGg6IDYwMHB4KSB7XG4gIC51bC1jYXJkX19jb250YWluZXItLWRlc2t0b3Age1xuICAgIGJveC1zaGFkb3c6IHVuc2V0O1xuICB9XG5cbiAgLnVsLWNhcmRfX2NvbnRhaW5lciB7XG4gICAgYm9yZGVyLXJhZGl1czogdW5zZXQ7XG4gICAgYm9yZGVyOiBub25lICFpbXBvcnRhbnQ7XG4gIH1cbn1cblxuLmZhZGUtaW4tdHJhbnNpdGlvbiB7XG4gIGFuaW1hdGlvbjogZmFkZUluIDQwMG1zIGVhc2UtaW47XG4gIC13ZWJraXQtYW5pbWF0aW9uOiBmYWRlSW4gNDAwbXMgZWFzZS1pbjtcbiAgLW1vei1hbmltYXRpb246IGZhZGVJbiA0MDBtcyBlYXNlLWluO1xuICAtby1hbmltYXRpb246IGZhZGVJbiA0MDBtcyBlYXNlLWluO1xuICAtbXMtYW5pbWF0aW9uOiBmYWRlSW4gNDAwbXMgZWFzZS1pbjtcbn1cblxuQGtleWZyYW1lcyBmYWRlSW4ge1xuICAwJSB7XG4gICAgb3BhY2l0eTogMDtcbiAgfVxuICAxMDAlIHtcbiAgICBvcGFjaXR5OiAxO1xuICB9XG59XG5cbkAtbW96LWtleWZyYW1lcyBmYWRlSW4ge1xuICAwJSB7XG4gICAgb3BhY2l0eTogMDtcbiAgfVxuICAxMDAlIHtcbiAgICBvcGFjaXR5OiAxO1xuICB9XG59XG5cbkAtd2Via2l0LWtleWZyYW1lcyBmYWRlSW4ge1xuICAwJSB7XG4gICAgb3BhY2l0eTogMDtcbiAgfVxuICAxMDAlIHtcbiAgICBvcGFjaXR5OiAxO1xuICB9XG59XG5cbkAtby1rZXlmcmFtZXMgZmFkZUluIHtcbiAgMCUge1xuICAgIG9wYWNpdHk6IDA7XG4gIH1cbiAgMTAwJSB7XG4gICAgb3BhY2l0eTogMTtcbiAgfVxufVxuXG5ALW1zLWtleWZyYW1lcyBmYWRlSW4ge1xuICAwJSB7XG4gICAgb3BhY2l0eTogMDtcbiAgfVxuICAxMDAlIHtcbiAgICBvcGFjaXR5OiAxO1xuICB9XG59XG4iLCIiXSksdC5leHBvcnRzPWV9LDQ3MDY2OmZ1bmN0aW9uKHQsZSxuKXt2YXIgcj1uKDE4OTg2KSxvPW4oMTA2NjkpLGk9big3Nzg4KSxhPW4oODY1NTgpLGM9big2MDYzMikscz1uKDQyMDA1KSx1PW4oNzY0MjgpLGw9big3MzUyMyksZj1uKDYzNTUzKTsoZT1yKCExKSkuaShvKSxlLmkoaSksZS5pKGEpLGUuaShjKSxlLmkocyksZS5pKHUpLGUuaShsKSxlLmkoZiksZS5wdXNoKFt0LmlkLCJodG1sLFxuYm9keSB7XG4gIGN1cnNvcjogZGVmYXVsdDtcbiAgZm9udC1mYW1pbHk6IC1hcHBsZS1zeXN0ZW0sIEJsaW5rTWFjU3lzdGVtRm9udCwgJ1NlZ29lIFVJJywgUm9ib3RvLCBIZWx2ZXRpY2EsIEFyaWFsLCBzYW5zLXNlcmlmLCAnQXBwbGUgQ29sb3IgRW1vamknLFxuICAgICdTZWdvZSBVSSBFbW9qaScsICdTZWdvZSBVSSBTeW1ib2wnO1xuICBoZWlnaHQ6IDEwMCU7XG4gIG92ZXJmbG93OiBoaWRkZW47XG4gIC13ZWJraXQtdGFwLWhpZ2hsaWdodC1jb2xvcjogdHJhbnNwYXJlbnQ7XG4gIC13ZWJraXQtdXNlci1zZWxlY3Q6IG5vbmU7XG4gIC13ZWJraXQtdG91Y2gtY2FsbG91dDogbm9uZTtcbn1cblxuYiB7XG4gIGZvbnQtd2VpZ2h0OiA1MDA7XG59XG5cbiN1bC1hcHAge1xuICBvcGFjaXR5OiAwO1xuICB3aWR0aDogMTAwJTtcbn1cblxuI3VsLWFwcC51bC1hcHAtLW92ZXJsYXkge1xuICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gIGJvdHRvbTogMDtcbiAgdHJhbnNpdGlvbjogb3BhY2l0eSAwLjFzIGVhc2Utb3V0O1xufVxuXG4jdWwtYXBwLnVsLWFwcC0tdmlzaWJsZSB7XG4gIG9wYWNpdHk6IDE7XG4gIGJvdHRvbTogMDtcbn1cblxuLnVsLWFwcF9fY29udGFpbmVyIHtcbiAgd2lkdGg6IDEwMCU7XG4gIGRpc3BsYXk6IGZsZXg7XG4gIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgbWF4LWhlaWdodDogMTAwdmg7XG59XG5cbi51bC1mb290ZXIge1xuICBkaXNwbGF5OiBmbGV4O1xuICBmbGV4LWRpcmVjdGlvbjogY29sdW1uO1xuICBmbGV4LXNocmluazogMDtcbiAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7XG4gIG1hcmdpbi10b3A6IDEwcHg7XG59XG5cbi51bC1mb290ZXItYnViYmxlIHtcbiAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xuICBtYXJnaW46IDAgM3B4O1xuICB3aWR0aDogN3B4O1xuICBoZWlnaHQ6IDdweDtcbiAgYm9yZGVyLXJhZGl1czogM3B4O1xuICBib3JkZXI6IDFweCBzb2xpZCB0cmFuc3BhcmVudDtcbn1cblxuLmNsb3NlLWNvbnRhaW5lci0tZGVza3RvcCxcbi5jbG9zZS1jb250YWluZXItLW1vYmlsZSB7XG4gIGhlaWdodDogMjJweDtcbiAgd2lkdGg6IDIycHg7XG4gIGJvcmRlci1yYWRpdXM6IDIycHg7XG4gIGJhY2tncm91bmQtY29sb3I6ICNmZmZmZmY7XG4gIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gIGp1c3RpZnktY29udGVudDogY2VudGVyO1xufVxuXG4uY2xvc2UtY29udGFpbmVyLS1kZXNrdG9wIHtcbiAgdG9wOiAyNXB4O1xuICByaWdodDogMjVweDtcbn1cblxuLmNsb3NlLWNvbnRhaW5lci0tbW9iaWxlIHtcbiAgdG9wOiAxNXB4O1xuICByaWdodDogMTBweDtcbn1cblxuLmNsb3NlLWNvbnRhaW5lciB7XG4gIGJveC1zaXppbmc6IGJvcmRlci1ib3g7XG4gIGRpc3BsYXk6IGZsZXg7XG4gIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbn1cblxuLmNsb3NlLWJ0biB7XG4gIGhlaWdodDogMThweDtcbiAgd2lkdGg6IDE4cHg7XG4gIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gIGp1c3RpZnktY29udGVudDogY2VudGVyO1xuICBkaXNwbGF5OiBmbGV4O1xuICBjdXJzb3I6IHBvaW50ZXI7XG59XG5cbi51bC1hcHBfX2NvbnRhaW5lciB7XG4gIHRyYW5zaXRpb246IG9wYWNpdHkgMC4zcyBlYXNlLW91dDtcbn1cbiIsIiJdKSx0LmV4cG9ydHM9ZX0sODY1NTg6ZnVuY3Rpb24odCxlLG4peyhlPW4oMTg5ODYpKCExKSkucHVzaChbdC5pZCwiLyogaWRlbnRpY2FsIHRvIG5wcy5jc3MsIG90aGVyIHRoYW4gY2xhc3MgbmFtZXMuICovXG4udWwtY2FyZC0tbGlrZXJ0IHtcbiAgbWFyZ2luLXRvcDogMTVweDtcbn1cblxuLnVsLWNhcmQtLWxpa2VydF9fbnVtYmVycyB7XG4gIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gIGJvcmRlci1yYWRpdXM6IDVweDtcbiAgZGlzcGxheTogZmxleDtcbiAgZmxleC1kaXJlY3Rpb246IHJvdztcbiAgZmxleDogMSAwO1xuICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjtcbiAgbWFyZ2luOiA1cHggMCAwIDA7XG59XG5cbi5saWtlcnQtbnVtYmVyLS1tb2JpbGUge1xuICBib3JkZXI6IDJweCBzb2xpZCAjZTZlNmU2O1xuICBtYXJnaW4tbGVmdDogLTJweDtcbn1cblxuLmxpa2VydC1udW1iZXItLWRlc2t0b3Age1xuICBib3JkZXI6IDFweCBzb2xpZCAjZTZlNmU2O1xuICBtYXJnaW4tbGVmdDogLTFweDtcbn1cblxuLmxpa2VydC1udW1iZXIge1xuICBhbGlnbi1pdGVtczogY2VudGVyO1xuICBjdXJzb3I6IHBvaW50ZXI7XG4gIGRpc3BsYXk6IGZsZXg7XG4gIGp1c3RpZnktY29udGVudDogY2VudGVyO1xuICBmbGV4OiAxIDA7XG5cbiAgYmFja2dyb3VuZC1jb2xvcjogcmdiYSgwLCAwLCAwLCAwLjAxKTtcbiAgZm9udC1zaXplOiAxOHB4O1xuICBsaW5lLWhlaWdodDogMjRweDtcbiAgaGVpZ2h0OiA2N3B4O1xufVxuXG4ubGlrZXJ0LW51bWJlcjphY3RpdmUge1xuICBiYWNrZ3JvdW5kLWNvbG9yOiByZ2JhKDAsIDAsIDAsIDAuMDUpO1xuICBmb250LXdlaWdodDogNTAwO1xufVxuXG4ubGlrZXJ0LW51bWJlci0tZGVza3RvcDpob3ZlciB7XG4gIGJhY2tncm91bmQtY29sb3I6IHJnYmEoMCwgMCwgMCwgMC4wNSk7XG4gIGZvbnQtd2VpZ2h0OiA1MDA7XG59XG5cbi5saWtlcnQtbnVtYmVyLTEge1xuICBib3JkZXItdG9wLWxlZnQtcmFkaXVzOiA1cHg7XG4gIGJvcmRlci1ib3R0b20tbGVmdC1yYWRpdXM6IDVweDtcbn1cblxuLmxpa2VydC1udW1iZXItNSB7XG4gIGJvcmRlci10b3AtcmlnaHQtcmFkaXVzOiA1cHg7XG4gIGJvcmRlci1ib3R0b20tcmlnaHQtcmFkaXVzOiA1cHg7XG59XG5cbi51bC1jYXJkLS1saWtlcnRfX2xhYmVscyB7XG4gIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gIGNvbG9yOiAjMjYyMTM2O1xuICBkaXNwbGF5OiBmbGV4O1xuICBmbGV4LWRpcmVjdGlvbjogcm93O1xuICBmbGV4OiAxIDA7XG4gIGZvbnQtd2VpZ2h0OiA1MDA7XG4gIGZvbnQtc2l6ZTogMTNweDtcbiAgbGluZS1oZWlnaHQ6IDE1cHg7XG4gIGp1c3RpZnktY29udGVudDogc3BhY2UtYmV0d2VlbjtcbiAgbWFyZ2luOiA3cHggMCAxMHB4IDA7XG59XG5cbi51bC1jYXJkLS1saWtlcnRfX2xhYmVscyBzcGFuOmxhc3QtY2hpbGQge1xuICB0ZXh0LWFsaWduOiByaWdodDtcbn1cbiIsIiJdKSx0LmV4cG9ydHM9ZX0sNjA2MzI6ZnVuY3Rpb24odCxlLG4peyhlPW4oMTg5ODYpKCExKSkucHVzaChbdC5pZCwiLnNlbGVjdC1sYWJlbCB7XG4gIGZsZXg6IDE7XG4gIG92ZXJmbG93LXdyYXA6IGFueXdoZXJlO1xuICBjdXJzb3I6IHBvaW50ZXI7XG4gIHBhZGRpbmctbGVmdDogMTVweDtcbn1cbiIsIiJdKSx0LmV4cG9ydHM9ZX0sNDIwMDU6ZnVuY3Rpb24odCxlLG4peyhlPW4oMTg5ODYpKCExKSkucHVzaChbdC5pZCwiLyogaWRlbnRpY2FsIHRvIGxpa2VydC5jc3MsIG90aGVyIHRoYW4gY2xhc3MgbmFtZXMuICovXG4udWwtY2FyZC0tbnBzIHtcbiAgbWFyZ2luLXRvcDogMTVweDtcbn1cblxuLnVsLWNhcmQtLW5wc19fbnVtYmVycyB7XG4gIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gIGJvcmRlci1yYWRpdXM6IDVweDtcbiAgZGlzcGxheTogZmxleDtcbiAgZmxleC1kaXJlY3Rpb246IHJvdztcbiAgZmxleDogMSAwO1xuICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjtcbiAgbWFyZ2luOiA1cHggMCAwIDA7XG59XG5cbi5ucHMtbnVtYmVyLS1tb2JpbGUge1xuICBib3JkZXI6IDJweCBzb2xpZCAjZTZlNmU2O1xuICBtYXJnaW4tbGVmdDogLTJweDtcbn1cblxuLm5wcy1udW1iZXItLWRlc2t0b3Age1xuICBib3JkZXI6IDFweCBzb2xpZCAjZTZlNmU2O1xuICBtYXJnaW4tbGVmdDogLTFweDtcbn1cblxuLm5wcy1udW1iZXIge1xuICBhbGlnbi1pdGVtczogY2VudGVyO1xuICBjdXJzb3I6IHBvaW50ZXI7XG4gIGRpc3BsYXk6IGZsZXg7XG4gIGp1c3RpZnktY29udGVudDogY2VudGVyO1xuICBmbGV4OiAxIDA7XG5cbiAgYmFja2dyb3VuZC1jb2xvcjogcmdiYSgwLCAwLCAwLCAwLjAxKTtcbiAgZm9udC1zaXplOiAxOHB4O1xuICBsaW5lLWhlaWdodDogMjRweDtcbiAgaGVpZ2h0OiA2N3B4O1xufVxuXG4ubnBzLW51bWJlcjphY3RpdmUge1xuICBiYWNrZ3JvdW5kLWNvbG9yOiByZ2JhKDAsIDAsIDAsIDAuMDUpO1xuICBmb250LXdlaWdodDogNTAwO1xufVxuXG4ubnBzLW51bWJlci0tZGVza3RvcDpob3ZlciB7XG4gIGJhY2tncm91bmQtY29sb3I6IHJnYmEoMCwgMCwgMCwgMC4wNSk7XG4gIGZvbnQtd2VpZ2h0OiA1MDA7XG59XG5cbi5ucHMtbnVtYmVyLTAge1xuICBib3JkZXItdG9wLWxlZnQtcmFkaXVzOiA1cHg7XG4gIGJvcmRlci1ib3R0b20tbGVmdC1yYWRpdXM6IDVweDtcbn1cblxuLm5wcy1udW1iZXItMTAge1xuICBib3JkZXItdG9wLXJpZ2h0LXJhZGl1czogNXB4O1xuICBib3JkZXItYm90dG9tLXJpZ2h0LXJhZGl1czogNXB4O1xufVxuXG4udWwtY2FyZC0tbnBzX19sYWJlbHMge1xuICBhbGlnbi1pdGVtczogY2VudGVyO1xuICBjb2xvcjogIzI2MjEzNjtcbiAgZGlzcGxheTogZmxleDtcbiAgZmxleC1kaXJlY3Rpb246IHJvdztcbiAgZmxleDogMSAwO1xuICBmb250LXdlaWdodDogNTAwO1xuICBmb250LXNpemU6IDEzcHg7XG4gIGxpbmUtaGVpZ2h0OiAxNXB4O1xuICBqdXN0aWZ5LWNvbnRlbnQ6IHNwYWNlLWJldHdlZW47XG4gIG1hcmdpbjogN3B4IDAgMTBweCAwO1xufVxuXG4udWwtY2FyZC0tbnBzX19sYWJlbHMgc3BhbjpsYXN0LWNoaWxkIHtcbiAgdGV4dC1hbGlnbjogcmlnaHQ7XG59XG4iLCIiXSksdC5leHBvcnRzPWV9LDEwNjY5OmZ1bmN0aW9uKHQsZSxuKXsoZT1uKDE4OTg2KSghMSkpLnB1c2goW3QuaWQsIi8qKlxuICogbWluaXJlc2V0LmNzc1xuICogaHR0cHM6Ly9naXRodWIuY29tL2pndGhtcy9taW5pcmVzZXQuY3NzXG4gKi9cblxuaHRtbCxcbmJvZHksXG5wLFxub2wsXG51bCxcbmxpLFxuZGwsXG5kdCxcbmRkLFxuYmxvY2txdW90ZSxcbmZpZ3VyZSxcbmZpZWxkc2V0LFxubGVnZW5kLFxudGV4dGFyZWEsXG5wcmUsXG5pZnJhbWUsXG5ocixcbmgxLFxuaDIsXG5oMyxcbmg0LFxuaDUsXG5oNiB7XG4gIG1hcmdpbjogMDtcbiAgcGFkZGluZzogMDtcbn1cblxuaDEsXG5oMixcbmgzLFxuaDQsXG5oNSxcbmg2IHtcbiAgZm9udC1zaXplOiAxMDAlO1xuICBmb250LXdlaWdodDogbm9ybWFsO1xufVxuXG51bCB7XG4gIGxpc3Qtc3R5bGU6IG5vbmU7XG59XG5cbmJ1dHRvbixcbmlucHV0LFxuc2VsZWN0LFxudGV4dGFyZWEge1xuICBtYXJnaW46IDA7XG59XG5cbmh0bWwge1xuICBib3gtc2l6aW5nOiBib3JkZXItYm94O1xufVxuXG4qLCAqOmJlZm9yZSwgKjphZnRlciB7XG4gIGJveC1zaXppbmc6IGluaGVyaXQ7XG59XG4iLCIiXSksdC5leHBvcnRzPWV9LDc2NDI4OmZ1bmN0aW9uKHQsZSxuKXsoZT1uKDE4OTg2KSghMSkpLnB1c2goW3QuaWQsIi51bC1jYXJkLS10ZXh0IHtcbiAgbWFyZ2luLXRvcDogMTVweDtcbn1cblxuLnVsLWNhcmQtdGV4dCB7XG4gIGZsZXg6IDEgMCBhdXRvO1xuICBtYXJnaW4tdG9wOiAycHg7XG4gIG1hcmdpbi1ib3R0b206IDNweDtcbiAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAgZGlzcGxheTogZmxleDtcbiAgZmxleC13cmFwOiB3cmFwO1xuICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjtcbiAgcGFkZGluZzogMDtcbn1cblxuLnVsLWNhcmQtdGV4dF9fY29udGFpbmVyIHtcbiAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAgYm94LXNpemluZzogYm9yZGVyLWJveDtcbiAgYm9yZGVyLXJhZGl1czogM3B4O1xuICBkaXNwbGF5OiBmbGV4O1xuICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjtcbiAgbWFyZ2luLWJvdHRvbTogMTJweDtcbiAgZmxleDogMSAwIDEwMCU7XG59XG5cbi51bC1jYXJkLXRleHRfX2lucHV0LS1tb2JpbGUge1xuICBib3JkZXI6IDJweCBzb2xpZCAjZTZlNmU2O1xuICBtYXgtaGVpZ2h0OiA2M3B4O1xufVxuXG4udWwtY2FyZC10ZXh0X19pbnB1dC0tZGVza3RvcCB7XG4gIGJvcmRlcjogMXB4IHNvbGlkICNlNmU2ZTY7XG4gIG1heC1oZWlnaHQ6IDE1MHB4O1xufVxuXG4udWwtY2FyZC10ZXh0X19pbnB1dCB7XG4gIGJhY2tncm91bmQ6IHJnYmEoMCwgMCwgMCwgMC4wMSk7XG4gIGJveC1zaXppbmc6IGJvcmRlci1ib3g7XG4gIGNvbG9yOiAjMzQzNDQyO1xuICBmb250LWZhbWlseTogLWFwcGxlLXN5c3RlbSwgQmxpbmtNYWNTeXN0ZW1Gb250LCAnU2Vnb2UgVUknLCBSb2JvdG8sIEhlbHZldGljYSwgQXJpYWwsIHNhbnMtc2VyaWYsICdBcHBsZSBDb2xvciBFbW9qaScsXG4gICAgJ1NlZ29lIFVJIEVtb2ppJywgJ1NlZ29lIFVJIFN5bWJvbCc7XG4gIG1pbi1oZWlnaHQ6IDYzcHg7XG4gIG92ZXJmbG93OiBoaWRkZW47XG4gIHBhZGRpbmc6IDEycHg7XG4gIHJlc2l6ZTogbm9uZTtcbiAgd2lkdGg6IDEwMCU7XG4gIGJvcmRlci1yYWRpdXM6IDNweDtcbiAgZm9udC1zaXplOiAxNXB4O1xuICBsaW5lLWhlaWdodDogMjBweDtcbn1cblxuLnVsLWNhcmQtdGV4dF9faW5wdXQ6OnBsYWNlaG9sZGVyIHtcbiAgY29sb3I6IHJnYmEoMTA4LCAxMDgsIDExMCwgMC41KTtcbn1cblxuLnVsLWNhcmQtdGV4dF9faW5wdXQ6Zm9jdXMge1xuICBvdXRsaW5lOiBub25lO1xuICBiYWNrZ3JvdW5kOiB3aGl0ZTtcbn1cblxuLnVsLWNhcmQtdGV4dF9fYnV0dG9uIHtcbiAgYm9yZGVyLXJhZGl1czogM3B4O1xuICBjb2xvcjogd2hpdGU7XG4gIGZvbnQtc2l6ZTogMTVweDtcbiAgbGluZS1oZWlnaHQ6IDE4cHg7XG4gIHBhZGRpbmc6IDEwLjVweCAyMXB4O1xuICBmb250LXdlaWdodDogNTAwO1xuICBib3JkZXI6IG5vbmU7XG4gIGN1cnNvcjogcG9pbnRlcjtcbn1cbiIsIiJdKSx0LmV4cG9ydHM9ZX0sNzM1MjM6ZnVuY3Rpb24odCxlLG4peyhlPW4oMTg5ODYpKCExKSkucHVzaChbdC5pZCwiLnVsLWNhcmRfX3RleHQtdXJsLXByb21wdCB7XG4gIG1hcmdpbi10b3A6IDE1cHg7XG59XG5cbi51bC1jYXJkX190ZXh0LXVybC1ib2R5LWNvbnRhaW5lcixcbi51bC1jYXJkX190ZXh0LXVybC1wcm9tcHQtYm9keSB7XG4gIG1hcmdpbi10b3A6IDEwcHg7XG4gIG1hcmdpbi1ib3R0b206IDEwcHg7XG59XG5cbi51bC1jYXJkX190ZXh0LXVybC1wcm9tcHQtYm9keSB7XG4gIGZvbnQtc2l6ZTogMTVweDtcbiAgbGluZS1oZWlnaHQ6IDEzMC4zNSU7XG4gIGxldHRlci1zcGFjaW5nOiAwLjAyZW07XG4gIGNvbG9yOiAjMzQzNDQyO1xuICB0ZXh0LWFsaWduOiBsZWZ0O1xuICB3aGl0ZS1zcGFjZTogcHJlLWxpbmU7XG59XG5cbi51bC1jYXJkX190ZXh0LXVybC1wcm9tcHQtYm9keTpsYXN0LWNoaWxkIHtcbiAgbWFyZ2luLWJvdHRvbTogMTVweDtcbn1cblxuLnVsLWNhcmRfX3RleHQtdXJsLXByb21wdC1idXR0b24ge1xuICBtYXJnaW4tcmlnaHQ6IGF1dG87XG4gIHRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzO1xuICBvdmVyZmxvdzogaGlkZGVuO1xuICB3aGl0ZS1zcGFjZTogbm93cmFwO1xuICBtYXgtd2lkdGg6IDEwMCU7XG59XG5cbi51bC1jYXJkX190ZXh0LXVybC1ib2R5LWNvbnRhaW5lciB7XG4gIG1pbi1oZWlnaHQ6IDJlbTtcbn1cbiIsIiJdKSx0LmV4cG9ydHM9ZX0sNjM1NTM6ZnVuY3Rpb24odCxlLG4peyhlPW4oMTg5ODYpKCExKSkucHVzaChbdC5pZCwiLnVsLWNhcmQtLXZpZGVvIHtcbiAgbWFyZ2luLXRvcDogMTVweDtcbn1cblxuI3VsLWNhcmQtdm9pY2VfX3ZpZGVvIHtcbiAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAgZGlzcGxheTogZmxleDtcbiAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcbn1cbi51bC1jYXJkLXRleHRfX2J1dHRvbi51bC1idXR0b24taW5hY3RpdmUge1xuICBiYWNrZ3JvdW5kLWNvbG9yOiB3aGl0ZSAhaW1wb3J0YW50O1xuICBjb2xvcjogIzVkNjk2ZiAhaW1wb3J0YW50O1xufVxuXG4jdWwtY2FyZC12aWRlb19fcGxheWVyX3JlY29yZGVyIHtcbiAgd2lkdGg6IDEwMCU7XG4gIHdpZHRoOiAtbW96LWF2YWlsYWJsZTsgLyogV2ViS2l0LWJhc2VkIGJyb3dzZXJzIHdpbGwgaWdub3JlIHRoaXMuICovXG4gIHdpZHRoOiAtd2Via2l0LWZpbGwtYXZhaWxhYmxlOyAvKiBNb3ppbGxhLWJhc2VkIGJyb3dzZXJzIHdpbGwgaWdub3JlIHRoaXMuICovXG4gIHdpZHRoOiBmaWxsLWF2YWlsYWJsZTtcbn1cbiIsIiJdKSx0LmV4cG9ydHM9ZX0sNjI1ODI6ZnVuY3Rpb24odCl7dC5leHBvcnRzPWZ1bmN0aW9uKHQpe2lmKEFycmF5LmlzQXJyYXkodCkpe2Zvcih2YXIgZT0wLG49bmV3IEFycmF5KHQubGVuZ3RoKTtlPHQubGVuZ3RoO2UrKyluW2VdPXRbZV07cmV0dXJuIG59fX0sNDQ2MjE6ZnVuY3Rpb24odCl7ZnVuY3Rpb24gZSh0LGUsbixyLG8saSxhKXt0cnl7dmFyIGM9dFtpXShhKSxzPWMudmFsdWV9Y2F0Y2godCl7cmV0dXJuIHZvaWQgbih0KX1jLmRvbmU/ZShzKTpQcm9taXNlLnJlc29sdmUocykudGhlbihyLG8pfXQuZXhwb3J0cz1mdW5jdGlvbih0KXtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgbj10aGlzLHI9YXJndW1lbnRzO3JldHVybiBuZXcgUHJvbWlzZSgoZnVuY3Rpb24obyxpKXt2YXIgYT10LmFwcGx5KG4scik7ZnVuY3Rpb24gYyh0KXtlKGEsbyxpLGMscywibmV4dCIsdCl9ZnVuY3Rpb24gcyh0KXtlKGEsbyxpLGMscywidGhyb3ciLHQpfWModm9pZCAwKX0pKX19fSwzMDU5MzpmdW5jdGlvbih0KXt0LmV4cG9ydHM9ZnVuY3Rpb24odCxlKXtpZighKHQgaW5zdGFuY2VvZiBlKSl0aHJvdyBuZXcgVHlwZUVycm9yKCJDYW5ub3QgY2FsbCBhIGNsYXNzIGFzIGEgZnVuY3Rpb24iKX19LDQ0NTM6ZnVuY3Rpb24odCl7ZnVuY3Rpb24gZSh0LGUpe2Zvcih2YXIgbj0wO248ZS5sZW5ndGg7bisrKXt2YXIgcj1lW25dO3IuZW51bWVyYWJsZT1yLmVudW1lcmFibGV8fCExLHIuY29uZmlndXJhYmxlPSEwLCJ2YWx1ZSJpbiByJiYoci53cml0YWJsZT0hMCksT2JqZWN0LmRlZmluZVByb3BlcnR5KHQsci5rZXkscil9fXQuZXhwb3J0cz1mdW5jdGlvbih0LG4scil7cmV0dXJuIG4mJmUodC5wcm90b3R5cGUsbiksciYmZSh0LHIpLHR9fSw2NDE1NzpmdW5jdGlvbih0KXt0LmV4cG9ydHM9ZnVuY3Rpb24odCxlLG4pe3JldHVybiBlIGluIHQ/T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsZSx7dmFsdWU6bixlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMH0pOnRbZV09bix0fX0sNjYwODE6ZnVuY3Rpb24odCl7ZnVuY3Rpb24gZSgpe3JldHVybiB0LmV4cG9ydHM9ZT1PYmplY3QuYXNzaWdufHxmdW5jdGlvbih0KXtmb3IodmFyIGU9MTtlPGFyZ3VtZW50cy5sZW5ndGg7ZSsrKXt2YXIgbj1hcmd1bWVudHNbZV07Zm9yKHZhciByIGluIG4pT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKG4scikmJih0W3JdPW5bcl0pfXJldHVybiB0fSxlLmFwcGx5KHRoaXMsYXJndW1lbnRzKX10LmV4cG9ydHM9ZX0sOTQyNjY6ZnVuY3Rpb24odCl7dC5leHBvcnRzPWZ1bmN0aW9uKHQpe2lmKFN5bWJvbC5pdGVyYXRvciBpbiBPYmplY3QodCl8fCJbb2JqZWN0IEFyZ3VtZW50c10iPT09T2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKHQpKXJldHVybiBBcnJheS5mcm9tKHQpfX0sOTQ1NjY6ZnVuY3Rpb24odCl7dC5leHBvcnRzPWZ1bmN0aW9uKCl7dGhyb3cgbmV3IFR5cGVFcnJvcigiSW52YWxpZCBhdHRlbXB0IHRvIHNwcmVhZCBub24taXRlcmFibGUgaW5zdGFuY2UiKX19LDkyODE2OmZ1bmN0aW9uKHQsZSxuKXt2YXIgcj1uKDYyNTgyKSxvPW4oOTQyNjYpLGk9big5NDU2Nik7dC5leHBvcnRzPWZ1bmN0aW9uKHQpe3JldHVybiByKHQpfHxvKHQpfHxpKCl9fSw3NjM5MDpmdW5jdGlvbih0KXtmdW5jdGlvbiBlKG4pe3JldHVybiJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJiJzeW1ib2wiPT10eXBlb2YgU3ltYm9sLml0ZXJhdG9yP3QuZXhwb3J0cz1lPWZ1bmN0aW9uKHQpe3JldHVybiB0eXBlb2YgdH06dC5leHBvcnRzPWU9ZnVuY3Rpb24odCl7cmV0dXJuIHQmJiJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJnQuY29uc3RydWN0b3I9PT1TeW1ib2wmJnQhPT1TeW1ib2wucHJvdG90eXBlPyJzeW1ib2wiOnR5cGVvZiB0fSxlKG4pfXQuZXhwb3J0cz1lfSw0NDY3NDpmdW5jdGlvbih0LGUsbil7dC5leHBvcnRzPW4oNDY2NzkpfSw5NzM0MzpmdW5jdGlvbih0LGUpe3ZhciBuLHIsbztyPVt0LGVdLG49ZnVuY3Rpb24odCxlKXsidXNlIHN0cmljdCI7dmFyIG4scixvPSJmdW5jdGlvbiI9PXR5cGVvZiBNYXA/bmV3IE1hcDoobj1bXSxyPVtdLHtoYXM6ZnVuY3Rpb24odCl7cmV0dXJuIG4uaW5kZXhPZih0KT4tMX0sZ2V0OmZ1bmN0aW9uKHQpe3JldHVybiByW24uaW5kZXhPZih0KV19LHNldDpmdW5jdGlvbih0LGUpey0xPT09bi5pbmRleE9mKHQpJiYobi5wdXNoKHQpLHIucHVzaChlKSl9LGRlbGV0ZTpmdW5jdGlvbih0KXt2YXIgZT1uLmluZGV4T2YodCk7ZT4tMSYmKG4uc3BsaWNlKGUsMSksci5zcGxpY2UoZSwxKSl9fSksaT1mdW5jdGlvbih0KXtyZXR1cm4gbmV3IEV2ZW50KHQse2J1YmJsZXM6ITB9KX07dHJ5e25ldyBFdmVudCgidGVzdCIpfWNhdGNoKHQpe2k9ZnVuY3Rpb24odCl7dmFyIGU9ZG9jdW1lbnQuY3JlYXRlRXZlbnQoIkV2ZW50Iik7cmV0dXJuIGUuaW5pdEV2ZW50KHQsITAsITEpLGV9fWZ1bmN0aW9uIGEodCl7aWYodCYmdC5ub2RlTmFtZSYmIlRFWFRBUkVBIj09PXQubm9kZU5hbWUmJiFvLmhhcyh0KSl7dmFyIGU9bnVsbCxuPW51bGwscj1udWxsLGE9ZnVuY3Rpb24oKXt0LmNsaWVudFdpZHRoIT09biYmZCgpfSxjPWZ1bmN0aW9uKGUpe3dpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKCJyZXNpemUiLGEsITEpLHQucmVtb3ZlRXZlbnRMaXN0ZW5lcigiaW5wdXQiLGQsITEpLHQucmVtb3ZlRXZlbnRMaXN0ZW5lcigia2V5dXAiLGQsITEpLHQucmVtb3ZlRXZlbnRMaXN0ZW5lcigiYXV0b3NpemU6ZGVzdHJveSIsYywhMSksdC5yZW1vdmVFdmVudExpc3RlbmVyKCJhdXRvc2l6ZTp1cGRhdGUiLGQsITEpLE9iamVjdC5rZXlzKGUpLmZvckVhY2goKGZ1bmN0aW9uKG4pe3Quc3R5bGVbbl09ZVtuXX0pKSxvLmRlbGV0ZSh0KX0uYmluZCh0LHtoZWlnaHQ6dC5zdHlsZS5oZWlnaHQscmVzaXplOnQuc3R5bGUucmVzaXplLG92ZXJmbG93WTp0LnN0eWxlLm92ZXJmbG93WSxvdmVyZmxvd1g6dC5zdHlsZS5vdmVyZmxvd1gsd29yZFdyYXA6dC5zdHlsZS53b3JkV3JhcH0pO3QuYWRkRXZlbnRMaXN0ZW5lcigiYXV0b3NpemU6ZGVzdHJveSIsYywhMSksIm9ucHJvcGVydHljaGFuZ2UiaW4gdCYmIm9uaW5wdXQiaW4gdCYmdC5hZGRFdmVudExpc3RlbmVyKCJrZXl1cCIsZCwhMSksd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoInJlc2l6ZSIsYSwhMSksdC5hZGRFdmVudExpc3RlbmVyKCJpbnB1dCIsZCwhMSksdC5hZGRFdmVudExpc3RlbmVyKCJhdXRvc2l6ZTp1cGRhdGUiLGQsITEpLHQuc3R5bGUub3ZlcmZsb3dYPSJoaWRkZW4iLHQuc3R5bGUud29yZFdyYXA9ImJyZWFrLXdvcmQiLG8uc2V0KHQse2Rlc3Ryb3k6Yyx1cGRhdGU6ZH0pLHMoKX1mdW5jdGlvbiBzKCl7dmFyIG49d2luZG93LmdldENvbXB1dGVkU3R5bGUodCxudWxsKTsidmVydGljYWwiPT09bi5yZXNpemU/dC5zdHlsZS5yZXNpemU9Im5vbmUiOiJib3RoIj09PW4ucmVzaXplJiYodC5zdHlsZS5yZXNpemU9Imhvcml6b250YWwiKSxlPSJjb250ZW50LWJveCI9PT1uLmJveFNpemluZz8tKHBhcnNlRmxvYXQobi5wYWRkaW5nVG9wKStwYXJzZUZsb2F0KG4ucGFkZGluZ0JvdHRvbSkpOnBhcnNlRmxvYXQobi5ib3JkZXJUb3BXaWR0aCkrcGFyc2VGbG9hdChuLmJvcmRlckJvdHRvbVdpZHRoKSxpc05hTihlKSYmKGU9MCksZCgpfWZ1bmN0aW9uIHUoZSl7dmFyIG49dC5zdHlsZS53aWR0aDt0LnN0eWxlLndpZHRoPSIwcHgiLHQub2Zmc2V0V2lkdGgsdC5zdHlsZS53aWR0aD1uLHQuc3R5bGUub3ZlcmZsb3dZPWV9ZnVuY3Rpb24gbCh0KXtmb3IodmFyIGU9W107dCYmdC5wYXJlbnROb2RlJiZ0LnBhcmVudE5vZGUgaW5zdGFuY2VvZiBFbGVtZW50Oyl0LnBhcmVudE5vZGUuc2Nyb2xsVG9wJiZlLnB1c2goe25vZGU6dC5wYXJlbnROb2RlLHNjcm9sbFRvcDp0LnBhcmVudE5vZGUuc2Nyb2xsVG9wfSksdD10LnBhcmVudE5vZGU7cmV0dXJuIGV9ZnVuY3Rpb24gZigpe2lmKDAhPT10LnNjcm9sbEhlaWdodCl7dmFyIHI9bCh0KSxvPWRvY3VtZW50LmRvY3VtZW50RWxlbWVudCYmZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LnNjcm9sbFRvcDt0LnN0eWxlLmhlaWdodD0iIix0LnN0eWxlLmhlaWdodD10LnNjcm9sbEhlaWdodCtlKyJweCIsbj10LmNsaWVudFdpZHRoLHIuZm9yRWFjaCgoZnVuY3Rpb24odCl7dC5ub2RlLnNjcm9sbFRvcD10LnNjcm9sbFRvcH0pKSxvJiYoZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LnNjcm9sbFRvcD1vKX19ZnVuY3Rpb24gZCgpe2YoKTt2YXIgZT1NYXRoLnJvdW5kKHBhcnNlRmxvYXQodC5zdHlsZS5oZWlnaHQpKSxuPXdpbmRvdy5nZXRDb21wdXRlZFN0eWxlKHQsbnVsbCksbz0iY29udGVudC1ib3giPT09bi5ib3hTaXppbmc/TWF0aC5yb3VuZChwYXJzZUZsb2F0KG4uaGVpZ2h0KSk6dC5vZmZzZXRIZWlnaHQ7aWYobzxlPyJoaWRkZW4iPT09bi5vdmVyZmxvd1kmJih1KCJzY3JvbGwiKSxmKCksbz0iY29udGVudC1ib3giPT09bi5ib3hTaXppbmc/TWF0aC5yb3VuZChwYXJzZUZsb2F0KHdpbmRvdy5nZXRDb21wdXRlZFN0eWxlKHQsbnVsbCkuaGVpZ2h0KSk6dC5vZmZzZXRIZWlnaHQpOiJoaWRkZW4iIT09bi5vdmVyZmxvd1kmJih1KCJoaWRkZW4iKSxmKCksbz0iY29udGVudC1ib3giPT09bi5ib3hTaXppbmc/TWF0aC5yb3VuZChwYXJzZUZsb2F0KHdpbmRvdy5nZXRDb21wdXRlZFN0eWxlKHQsbnVsbCkuaGVpZ2h0KSk6dC5vZmZzZXRIZWlnaHQpLHIhPT1vKXtyPW87dmFyIGE9aSgiYXV0b3NpemU6cmVzaXplZCIpO3RyeXt0LmRpc3BhdGNoRXZlbnQoYSl9Y2F0Y2godCl7fX19fWZ1bmN0aW9uIGModCl7dmFyIGU9by5nZXQodCk7ZSYmZS5kZXN0cm95KCl9ZnVuY3Rpb24gcyh0KXt2YXIgZT1vLmdldCh0KTtlJiZlLnVwZGF0ZSgpfXZhciB1PW51bGw7InVuZGVmaW5lZCI9PXR5cGVvZiB3aW5kb3d8fCJmdW5jdGlvbiIhPXR5cGVvZiB3aW5kb3cuZ2V0Q29tcHV0ZWRTdHlsZT8oKHU9ZnVuY3Rpb24odCl7cmV0dXJuIHR9KS5kZXN0cm95PWZ1bmN0aW9uKHQpe3JldHVybiB0fSx1LnVwZGF0ZT1mdW5jdGlvbih0KXtyZXR1cm4gdH0pOigodT1mdW5jdGlvbih0LGUpe3JldHVybiB0JiZBcnJheS5wcm90b3R5cGUuZm9yRWFjaC5jYWxsKHQubGVuZ3RoP3Q6W3RdLChmdW5jdGlvbih0KXtyZXR1cm4gYSh0LGUpfSkpLHR9KS5kZXN0cm95PWZ1bmN0aW9uKHQpe3JldHVybiB0JiZBcnJheS5wcm90b3R5cGUuZm9yRWFjaC5jYWxsKHQubGVuZ3RoP3Q6W3RdLGMpLHR9LHUudXBkYXRlPWZ1bmN0aW9uKHQpe3JldHVybiB0JiZBcnJheS5wcm90b3R5cGUuZm9yRWFjaC5jYWxsKHQubGVuZ3RoP3Q6W3RdLHMpLHR9KSxlLmRlZmF1bHQ9dSx0LmV4cG9ydHM9ZS5kZWZhdWx0fSx2b2lkIDA9PT0obz0iZnVuY3Rpb24iPT10eXBlb2Ygbj9uLmFwcGx5KGUscik6bil8fCh0LmV4cG9ydHM9byl9LDQwMDQ2OmZ1bmN0aW9uKHQsZSxuKXtuKDY1Njc5KSxuKDUxMDkwKSxuKDI0Nzg1KSxuKDg5MTcpLG4oNTQ3ODYpLG4oMTI4MTYpLG4oNjE5MjQpLG4oOTgzMDYpLG4oMTIwMjUpLG4oMjgzMyksbig5NjQ1Myksbig3MDg2MyksbigyNDgwMiksbigxODI3Myksbig0MjQxMSksbigzNzQ4MSksbig0NTU1MCksbig1ODE2NSksbig1MTE3Myksbig4NzQzKSxuKDc1ODA0KSxuKDQ2MTQ2KSxuKDE1MDc3KSxuKDU4MzI5KSxuKDYwNTI1KSxuKDc0OTUzKSxuKDU0NzgxKSxuKDUxNjYpLG4oODk3NTgpLG4oMTgzNzgpLG4oOTI1Miksbig5MzI3Miksbig1NjE1OCksbig0MTQ1Niksbig3Mjg1MSksbigzNDUyOSksbigxOTI3OCksbig5MTIwOSksbig3MjU2MCksbigxMDYzKSxuKDk2NDk4KSxuKDIyNDQyKSxuKDc1ODk0KSxuKDcxNjIyKSxuKDc0NTM4KSxuKDIxMjcpLG4oNjk5ODgpLG4oNTczODcpLG4oMzA4MTcpLG4oNTIwNTUpLG4oNzMzNjApLG4oNDc1MDIpLG4oMzMxOTUpLG4oOTA5MTIpLG4oMjgyMDMpLG4oNzkyMjcpLG4oNDM1OTEpLG4oMjIyNzcpLG4oMjQxMjkpLG4oNzQxMjApLG4oOTQ5NjMpLG4oMjczODgpLG4oODA1MjIpLG4oNDU1MjgpLG4oODAxMTYpLG4oMjkxMTApLG4oODU1OTQpLG4oNjc4MTIpLG4oMzM3OTIpLG4oODYyMTQpLG4oNzAxNDYpLG4oNzE4NDYpLG4oNTAwNjMpLG4oMTA3NDMpLG4oODA1MTEpLG4oMTUzNzMpLG4oOTc2ODgpLG4oNzQ1NjMpLG4oNjUwMDMpLG4oODEyNzcpLG4oNDQwMTkpLG4oMzgyKSxuKDE4ODIzKSxuKDMzMzIyKSxuKDMzMDY1KSxuKDE3NDk0KSxuKDgwMzYzKSxuKDQzMzk2KSxuKDY5MTg4KSxuKDc0Nzk1KSxuKDgyMjAxKSxuKDQxNzczKSxuKDMwNDAyKSxuKDE4MTc1KSxuKDY2ODk2KSxuKDg1NzY3KSxuKDg0MzYpLG4oOTIxOTIpLG4oMTIxNTUpLG4oMjYwMTYpLG4oNzQxMTcpLG4oMjgwMDMpLG4oNjc5NDEpLG4oNDQwNTEpLG4oNDk0OTUpLG4oODcyMDkpLG4oMTgyNzYpLG4oMzc1NCksbigzMzQzNyksbigxOTQzMyksbig3MTgyNyksbigyNjA2Myksbig5NjcpLG4oMzMxMDApLG4oNDE5MjgpLG4oMTU4NjkpLG4oODg3MTUpLG4oMzY5OTUpLG4oMTEyMjQpLG4oNjM3NjUpLG4oMTMwNjQpLG4oMzIyOTMpLG4oMjEwMzIpLG4oMzc5MzYpLG4oOTM5OTUpLG4oMTMzOTMpLG4oMTEyODEpLG4oMzgwMzYpLG4oMTEzOCksbig0NjA3OCksbigzMDA4Myksbig0NzM4Myksbig3MTU1OCksbig5OTIxOCksbig5ODk3OCksbig4MDY5KSxuKDcwMjA0KSxuKDg1NzU4KSxuKDExNzczKSxuKDE1NzYzKSxuKDQxNjMyKSxuKDM2MjMzKSxuKDQwMDQ1KSxuKDIxMzc2KSxuKDg0MDcpLG4oMTY1MCksbig4MTEwNCksbigxMTY4OCksbigxNzYyOSksbig0MjQ5MCksbig5NDkwNiksbig3NDA2MSksbig1ODYwNiksbig0NTE1Nyksbig2MTI0NSksbigyOTI3Myksbig5MDU2MCksbig0NTE1NCksbig3MDM3Myksbig4MDc1Nyksbig2OTg3OSksbigyNDQ5OCksbigxNjk3OCksbigxNzE1MiksbigzNzk4NyksbigyNjgwKSxuKDM4MjgwKSxuKDE4NTU5KSxuKDUwNDgyKSxuKDc0MjMwKSxuKDE4NTA2KSxuKDIwMjQyKSxuKDI4MTU1KSxuKDMzOTAxKSxuKDc2NDQyKSxuKDg4NjM2KSxuKDgxNDYzKSxuKDk1MTYzKSxuKDgzNjczKSxuKDIzNTY4KSxuKDI3Mjk0KSxuKDI0NDU3KSxuKDM5MzIpLG4oNzU0OTkpLG4oODc1NjQpLG4oODQ1MCksbigxNzYwNSksbig3MzU2MiksbigxMTg3OCksbig2MDkyOSksbig0Mzk1MSksbig5MTM0NyksbigyOTI4NCksbig2MTk0MyksbigyNjk4NiksbigxMzY2KSxuKDgzMzEwKSxuKDQ2NTk3KSxuKDcwMTM2KSxuKDYwODY1KSxuKDY3NzA4KSxuKDk2NjM4KSxuKDM5NzMwKSxuKDc0MTE1KSxuKDg1Njg2KTt2YXIgcj1uKDU2MjM4KTt0LmV4cG9ydHM9cn0sNjA0OTE6ZnVuY3Rpb24odCxlLG4pe24oNDAwNDYpLG4oMTU2MjQpLG4oOTI0MDQpO3ZhciByPW4oNTYyMzgpO3QuZXhwb3J0cz1yfSw4NjQ3MDpmdW5jdGlvbih0KXt0LmV4cG9ydHM9ZnVuY3Rpb24odCl7aWYoImZ1bmN0aW9uIiE9dHlwZW9mIHQpdGhyb3cgVHlwZUVycm9yKFN0cmluZyh0KSsiIGlzIG5vdCBhIGZ1bmN0aW9uIik7cmV0dXJuIHR9fSw3OTg2MTpmdW5jdGlvbih0LGUsbil7dmFyIHI9bigxMDU5Mik7dC5leHBvcnRzPWZ1bmN0aW9uKHQpe2lmKCFyKHQpJiZudWxsIT09dCl0aHJvdyBUeXBlRXJyb3IoIkNhbid0IHNldCAiK1N0cmluZyh0KSsiIGFzIGEgcHJvdG90eXBlIik7cmV0dXJuIHR9fSw3NjUxMzpmdW5jdGlvbih0LGUsbil7dmFyIHI9bigyMzcyNCksbz1uKDUwODY4KSxpPW4oNjY5NzEpLGE9cigidW5zY29wYWJsZXMiKSxjPUFycmF5LnByb3RvdHlwZTtudWxsPT1jW2FdJiZpKGMsYSxvKG51bGwpKSx0LmV4cG9ydHM9ZnVuY3Rpb24odCl7Y1thXVt0XT0hMH19LDUzMTQxOmZ1bmN0aW9uKHQsZSxuKXsidXNlIHN0cmljdCI7dmFyIHI9big2MDE0MCkuY2hhckF0O3QuZXhwb3J0cz1mdW5jdGlvbih0LGUsbil7cmV0dXJuIGUrKG4/cih0LGUpLmxlbmd0aDoxKX19LDU5Mzc5OmZ1bmN0aW9uKHQpe3QuZXhwb3J0cz1mdW5jdGlvbih0LGUsbil7aWYoISh0IGluc3RhbmNlb2YgZSkpdGhyb3cgVHlwZUVycm9yKCJJbmNvcnJlY3QgIisobj9uKyIgIjoiIikrImludm9jYXRpb24iKTtyZXR1cm4gdH19LDg3NTc5OmZ1bmN0aW9uKHQsZSxuKXt2YXIgcj1uKDEwNTkyKTt0LmV4cG9ydHM9ZnVuY3Rpb24odCl7aWYoIXIodCkpdGhyb3cgVHlwZUVycm9yKFN0cmluZyh0KSsiIGlzIG5vdCBhbiBvYmplY3QiKTtyZXR1cm4gdH19LDczMDc0OmZ1bmN0aW9uKHQsZSxuKXsidXNlIHN0cmljdCI7dmFyIHIsbz1uKDYyNTU2KSxpPW4oODk1NTgpLGE9bigxMDU5MiksYz1uKDc2Mjk4KSxzPW4oNTk1OTEpLHU9big2Njk3MSksbD1uKDkyOTEzKSxmPW4oMzc2MjApLmYsZD1uKDY0OTY1KSxwPW4oNzE4NDIpLGg9bigyMzcyNCksdj1uKDY3MjkpLGc9aS5EYXRhVmlldyx5PWcmJmcucHJvdG90eXBlLG09aS5JbnQ4QXJyYXksYj1tJiZtLnByb3RvdHlwZSx4PWkuVWludDhDbGFtcGVkQXJyYXksdz14JiZ4LnByb3RvdHlwZSxFPW0mJmQobSksaj1iJiZkKGIpLEM9T2JqZWN0LnByb3RvdHlwZSxrPUMuaXNQcm90b3R5cGVPZixTPWgoInRvU3RyaW5nVGFnIiksTz12KCJUWVBFRF9BUlJBWV9UQUciKSxBPSEoIWkuQXJyYXlCdWZmZXJ8fCFnKSxJPUEmJiEhcCYmIk9wZXJhIiE9PXMoaS5vcGVyYSksTT0hMSxUPXtJbnQ4QXJyYXk6MSxVaW50OEFycmF5OjEsVWludDhDbGFtcGVkQXJyYXk6MSxJbnQxNkFycmF5OjIsVWludDE2QXJyYXk6MixJbnQzMkFycmF5OjQsVWludDMyQXJyYXk6NCxGbG9hdDMyQXJyYXk6NCxGbG9hdDY0QXJyYXk6OH0sXz1mdW5jdGlvbih0KXtyZXR1cm4gYSh0KSYmYyhULHModCkpfTtmb3IociBpbiBUKWlbcl18fChJPSExKTtpZigoIUl8fCJmdW5jdGlvbiIhPXR5cGVvZiBFfHxFPT09RnVuY3Rpb24ucHJvdG90eXBlKSYmKEU9ZnVuY3Rpb24oKXt0aHJvdyBUeXBlRXJyb3IoIkluY29ycmVjdCBpbnZvY2F0aW9uIil9LEkpKWZvcihyIGluIFQpaVtyXSYmcChpW3JdLEUpO2lmKCghSXx8IWp8fGo9PT1DKSYmKGo9RS5wcm90b3R5cGUsSSkpZm9yKHIgaW4gVClpW3JdJiZwKGlbcl0ucHJvdG90eXBlLGopO2lmKEkmJmQodykhPT1qJiZwKHcsaiksbyYmIWMoaixTKSlmb3IociBpbiBNPSEwLGYoaixTLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gYSh0aGlzKT90aGlzW09dOnZvaWQgMH19KSxUKWlbcl0mJnUoaVtyXSxPLHIpO0EmJnAmJmQoeSkhPT1DJiZwKHksQyksdC5leHBvcnRzPXtOQVRJVkVfQVJSQVlfQlVGRkVSOkEsTkFUSVZFX0FSUkFZX0JVRkZFUl9WSUVXUzpJLFRZUEVEX0FSUkFZX1RBRzpNJiZPLGFUeXBlZEFycmF5OmZ1bmN0aW9uKHQpe2lmKF8odCkpcmV0dXJuIHQ7dGhyb3cgVHlwZUVycm9yKCJUYXJnZXQgaXMgbm90IGEgdHlwZWQgYXJyYXkiKX0sYVR5cGVkQXJyYXlDb25zdHJ1Y3RvcjpmdW5jdGlvbih0KXtpZihwKXtpZihrLmNhbGwoRSx0KSlyZXR1cm4gdH1lbHNlIGZvcih2YXIgZSBpbiBUKWlmKGMoVCxyKSl7dmFyIG49aVtlXTtpZihuJiYodD09PW58fGsuY2FsbChuLHQpKSlyZXR1cm4gdH10aHJvdyBUeXBlRXJyb3IoIlRhcmdldCBpcyBub3QgYSB0eXBlZCBhcnJheSBjb25zdHJ1Y3RvciIpfSxleHBvcnRUeXBlZEFycmF5TWV0aG9kOmZ1bmN0aW9uKHQsZSxuKXtpZihvKXtpZihuKWZvcih2YXIgciBpbiBUKXt2YXIgYT1pW3JdO2EmJmMoYS5wcm90b3R5cGUsdCkmJmRlbGV0ZSBhLnByb3RvdHlwZVt0XX1qW3RdJiYhbnx8bChqLHQsbj9lOkkmJmJbdF18fGUpfX0sZXhwb3J0VHlwZWRBcnJheVN0YXRpY01ldGhvZDpmdW5jdGlvbih0LGUsbil7dmFyIHIsYTtpZihvKXtpZihwKXtpZihuKWZvcihyIGluIFQpKGE9aVtyXSkmJmMoYSx0KSYmZGVsZXRlIGFbdF07aWYoRVt0XSYmIW4pcmV0dXJuO3RyeXtyZXR1cm4gbChFLHQsbj9lOkkmJm1bdF18fGUpfWNhdGNoKHQpe319Zm9yKHIgaW4gVCkhKGE9aVtyXSl8fGFbdF0mJiFufHxsKGEsdCxlKX19LGlzVmlldzpmdW5jdGlvbih0KXt2YXIgZT1zKHQpO3JldHVybiJEYXRhVmlldyI9PT1lfHxjKFQsZSl9LGlzVHlwZWRBcnJheTpfLFR5cGVkQXJyYXk6RSxUeXBlZEFycmF5UHJvdG90eXBlOmp9fSw4MjgzNTpmdW5jdGlvbih0LGUsbil7InVzZSBzdHJpY3QiO3ZhciByPW4oODk1NTgpLG89big2MjU1NiksaT1uKDczMDc0KS5OQVRJVkVfQVJSQVlfQlVGRkVSLGE9big2Njk3MSksYz1uKDE5MjYpLHM9bigzMjE4NyksdT1uKDU5Mzc5KSxsPW4oNDM0MTYpLGY9bigyNzg4NCksZD1uKDgzOTE0KSxwPW4oOTA3MjUpLGg9bigxMzMzNCkuZix2PW4oMzc2MjApLmYsZz1uKDY1ODk1KSx5PW4oNTExMjgpLG09big4OTgyNyksYj1tLmdldCx4PW0uc2V0LHc9IkFycmF5QnVmZmVyIixFPSJEYXRhVmlldyIsaj0iV3JvbmcgaW5kZXgiLEM9ci5BcnJheUJ1ZmZlcixrPUMsUz1yLkRhdGFWaWV3LE89ci5SYW5nZUVycm9yLEE9cC5wYWNrLEk9cC51bnBhY2ssTT1mdW5jdGlvbih0KXtyZXR1cm5bMjU1JnRdfSxUPWZ1bmN0aW9uKHQpe3JldHVyblsyNTUmdCx0Pj44JjI1NV19LF89ZnVuY3Rpb24odCl7cmV0dXJuWzI1NSZ0LHQ+PjgmMjU1LHQ+PjE2JjI1NSx0Pj4yNCYyNTVdfSxMPWZ1bmN0aW9uKHQpe3JldHVybiB0WzNdPDwyNHx0WzJdPDwxNnx0WzFdPDw4fHRbMF19LFI9ZnVuY3Rpb24odCl7cmV0dXJuIEEodCwyMyw0KX0sUD1mdW5jdGlvbih0KXtyZXR1cm4gQSh0LDUyLDgpfSxOPWZ1bmN0aW9uKHQsZSl7dih0LnByb3RvdHlwZSxlLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gYih0aGlzKVtlXX19KX0sRD1mdW5jdGlvbih0LGUsbixyKXt2YXIgbz1kKG4pLGk9Yih0KTtpZihvK2U+aS5ieXRlTGVuZ3RoKXRocm93IE8oaik7dmFyIGE9YihpLmJ1ZmZlcikuYnl0ZXMsYz1vK2kuYnl0ZU9mZnNldCxzPWEuc2xpY2UoYyxjK2UpO3JldHVybiByP3M6cy5yZXZlcnNlKCl9LEY9ZnVuY3Rpb24odCxlLG4scixvLGkpe3ZhciBhPWQobiksYz1iKHQpO2lmKGErZT5jLmJ5dGVMZW5ndGgpdGhyb3cgTyhqKTtmb3IodmFyIHM9YihjLmJ1ZmZlcikuYnl0ZXMsdT1hK2MuYnl0ZU9mZnNldCxsPXIoK28pLGY9MDtmPGU7ZisrKXNbdStmXT1sW2k/ZjplLWYtMV19O2lmKGkpe2lmKCFzKChmdW5jdGlvbigpe0MoMSl9KSl8fCFzKChmdW5jdGlvbigpe25ldyBDKC0xKX0pKXx8cygoZnVuY3Rpb24oKXtyZXR1cm4gbmV3IEMsbmV3IEMoMS41KSxuZXcgQyhOYU4pLEMubmFtZSE9d30pKSl7Zm9yKHZhciBVLEI9KGs9ZnVuY3Rpb24odCl7cmV0dXJuIHUodGhpcyxrKSxuZXcgQyhkKHQpKX0pLnByb3RvdHlwZT1DLnByb3RvdHlwZSx6PWgoQyksVj0wO3oubGVuZ3RoPlY7KShVPXpbVisrXSlpbiBrfHxhKGssVSxDW1VdKTtCLmNvbnN0cnVjdG9yPWt9dmFyIEg9bmV3IFMobmV3IGsoMikpLHE9Uy5wcm90b3R5cGUuc2V0SW50ODtILnNldEludDgoMCwyMTQ3NDgzNjQ4KSxILnNldEludDgoMSwyMTQ3NDgzNjQ5KSwhSC5nZXRJbnQ4KDApJiZILmdldEludDgoMSl8fGMoUy5wcm90b3R5cGUse3NldEludDg6ZnVuY3Rpb24odCxlKXtxLmNhbGwodGhpcyx0LGU8PDI0Pj4yNCl9LHNldFVpbnQ4OmZ1bmN0aW9uKHQsZSl7cS5jYWxsKHRoaXMsdCxlPDwyND4+MjQpfX0se3Vuc2FmZTohMH0pfWVsc2Ugaz1mdW5jdGlvbih0KXt1KHRoaXMsayx3KTt2YXIgZT1kKHQpO3godGhpcyx7Ynl0ZXM6Zy5jYWxsKG5ldyBBcnJheShlKSwwKSxieXRlTGVuZ3RoOmV9KSxvfHwodGhpcy5ieXRlTGVuZ3RoPWUpfSxTPWZ1bmN0aW9uKHQsZSxuKXt1KHRoaXMsUyxFKSx1KHQsayxFKTt2YXIgcj1iKHQpLmJ5dGVMZW5ndGgsaT1sKGUpO2lmKGk8MHx8aT5yKXRocm93IE8oIldyb25nIG9mZnNldCIpO2lmKGkrKG49dm9pZCAwPT09bj9yLWk6ZihuKSk+cil0aHJvdyBPKCJXcm9uZyBsZW5ndGgiKTt4KHRoaXMse2J1ZmZlcjp0LGJ5dGVMZW5ndGg6bixieXRlT2Zmc2V0Oml9KSxvfHwodGhpcy5idWZmZXI9dCx0aGlzLmJ5dGVMZW5ndGg9bix0aGlzLmJ5dGVPZmZzZXQ9aSl9LG8mJihOKGssImJ5dGVMZW5ndGgiKSxOKFMsImJ1ZmZlciIpLE4oUywiYnl0ZUxlbmd0aCIpLE4oUywiYnl0ZU9mZnNldCIpKSxjKFMucHJvdG90eXBlLHtnZXRJbnQ4OmZ1bmN0aW9uKHQpe3JldHVybiBEKHRoaXMsMSx0KVswXTw8MjQ+PjI0fSxnZXRVaW50ODpmdW5jdGlvbih0KXtyZXR1cm4gRCh0aGlzLDEsdClbMF19LGdldEludDE2OmZ1bmN0aW9uKHQpe3ZhciBlPUQodGhpcywyLHQsYXJndW1lbnRzLmxlbmd0aD4xP2FyZ3VtZW50c1sxXTp2b2lkIDApO3JldHVybihlWzFdPDw4fGVbMF0pPDwxNj4+MTZ9LGdldFVpbnQxNjpmdW5jdGlvbih0KXt2YXIgZT1EKHRoaXMsMix0LGFyZ3VtZW50cy5sZW5ndGg+MT9hcmd1bWVudHNbMV06dm9pZCAwKTtyZXR1cm4gZVsxXTw8OHxlWzBdfSxnZXRJbnQzMjpmdW5jdGlvbih0KXtyZXR1cm4gTChEKHRoaXMsNCx0LGFyZ3VtZW50cy5sZW5ndGg+MT9hcmd1bWVudHNbMV06dm9pZCAwKSl9LGdldFVpbnQzMjpmdW5jdGlvbih0KXtyZXR1cm4gTChEKHRoaXMsNCx0LGFyZ3VtZW50cy5sZW5ndGg+MT9hcmd1bWVudHNbMV06dm9pZCAwKSk+Pj4wfSxnZXRGbG9hdDMyOmZ1bmN0aW9uKHQpe3JldHVybiBJKEQodGhpcyw0LHQsYXJndW1lbnRzLmxlbmd0aD4xP2FyZ3VtZW50c1sxXTp2b2lkIDApLDIzKX0sZ2V0RmxvYXQ2NDpmdW5jdGlvbih0KXtyZXR1cm4gSShEKHRoaXMsOCx0LGFyZ3VtZW50cy5sZW5ndGg+MT9hcmd1bWVudHNbMV06dm9pZCAwKSw1Mil9LHNldEludDg6ZnVuY3Rpb24odCxlKXtGKHRoaXMsMSx0LE0sZSl9LHNldFVpbnQ4OmZ1bmN0aW9uKHQsZSl7Rih0aGlzLDEsdCxNLGUpfSxzZXRJbnQxNjpmdW5jdGlvbih0LGUpe0YodGhpcywyLHQsVCxlLGFyZ3VtZW50cy5sZW5ndGg+Mj9hcmd1bWVudHNbMl06dm9pZCAwKX0sc2V0VWludDE2OmZ1bmN0aW9uKHQsZSl7Rih0aGlzLDIsdCxULGUsYXJndW1lbnRzLmxlbmd0aD4yP2FyZ3VtZW50c1syXTp2b2lkIDApfSxzZXRJbnQzMjpmdW5jdGlvbih0LGUpe0YodGhpcyw0LHQsXyxlLGFyZ3VtZW50cy5sZW5ndGg+Mj9hcmd1bWVudHNbMl06dm9pZCAwKX0sc2V0VWludDMyOmZ1bmN0aW9uKHQsZSl7Rih0aGlzLDQsdCxfLGUsYXJndW1lbnRzLmxlbmd0aD4yP2FyZ3VtZW50c1syXTp2b2lkIDApfSxzZXRGbG9hdDMyOmZ1bmN0aW9uKHQsZSl7Rih0aGlzLDQsdCxSLGUsYXJndW1lbnRzLmxlbmd0aD4yP2FyZ3VtZW50c1syXTp2b2lkIDApfSxzZXRGbG9hdDY0OmZ1bmN0aW9uKHQsZSl7Rih0aGlzLDgsdCxQLGUsYXJndW1lbnRzLmxlbmd0aD4yP2FyZ3VtZW50c1syXTp2b2lkIDApfX0pO3koayx3KSx5KFMsRSksdC5leHBvcnRzPXtBcnJheUJ1ZmZlcjprLERhdGFWaWV3OlN9fSw5OTQzMTpmdW5jdGlvbih0LGUsbil7InVzZSBzdHJpY3QiO3ZhciByPW4oMTkyMDkpLG89big3Njk3NiksaT1uKDI3ODg0KSxhPU1hdGgubWluO3QuZXhwb3J0cz1bXS5jb3B5V2l0aGlufHxmdW5jdGlvbih0LGUpe3ZhciBuPXIodGhpcyksYz1pKG4ubGVuZ3RoKSxzPW8odCxjKSx1PW8oZSxjKSxsPWFyZ3VtZW50cy5sZW5ndGg+Mj9hcmd1bWVudHNbMl06dm9pZCAwLGY9YSgodm9pZCAwPT09bD9jOm8obCxjKSktdSxjLXMpLGQ9MTtmb3IodTxzJiZzPHUrZiYmKGQ9LTEsdSs9Zi0xLHMrPWYtMSk7Zi0tID4wOyl1IGluIG4/bltzXT1uW3VdOmRlbGV0ZSBuW3NdLHMrPWQsdSs9ZDtyZXR1cm4gbn19LDY1ODk1OmZ1bmN0aW9uKHQsZSxuKXsidXNlIHN0cmljdCI7dmFyIHI9bigxOTIwOSksbz1uKDc2OTc2KSxpPW4oMjc4ODQpO3QuZXhwb3J0cz1mdW5jdGlvbih0KXtmb3IodmFyIGU9cih0aGlzKSxuPWkoZS5sZW5ndGgpLGE9YXJndW1lbnRzLmxlbmd0aCxjPW8oYT4xP2FyZ3VtZW50c1sxXTp2b2lkIDAsbikscz1hPjI/YXJndW1lbnRzWzJdOnZvaWQgMCx1PXZvaWQgMD09PXM/bjpvKHMsbik7dT5jOyllW2MrK109dDtyZXR1cm4gZX19LDMxMzY4OmZ1bmN0aW9uKHQsZSxuKXsidXNlIHN0cmljdCI7dmFyIHI9bigzMDAyNSkuZm9yRWFjaCxvPW4oMjI5MDkpO3QuZXhwb3J0cz1vKCJmb3JFYWNoIik/ZnVuY3Rpb24odCl7cmV0dXJuIHIodGhpcyx0LGFyZ3VtZW50cy5sZW5ndGg+MT9hcmd1bWVudHNbMV06dm9pZCAwKX06W10uZm9yRWFjaH0sODUxNjY6ZnVuY3Rpb24odCxlLG4peyJ1c2Ugc3RyaWN0Ijt2YXIgcj1uKDQ2MTMwKSxvPW4oMTkyMDkpLGk9bigxMjI3OCksYT1uKDQ0OTg0KSxjPW4oMjc4ODQpLHM9big1ODgxMCksdT1uKDczODkwKTt0LmV4cG9ydHM9ZnVuY3Rpb24odCl7dmFyIGUsbixsLGYsZCxwPW8odCksaD0iZnVuY3Rpb24iPT10eXBlb2YgdGhpcz90aGlzOkFycmF5LHY9YXJndW1lbnRzLmxlbmd0aCxnPXY+MT9hcmd1bWVudHNbMV06dm9pZCAwLHk9dm9pZCAwIT09ZyxtPTAsYj11KHApO2lmKHkmJihnPXIoZyx2PjI/YXJndW1lbnRzWzJdOnZvaWQgMCwyKSksbnVsbD09Ynx8aD09QXJyYXkmJmEoYikpZm9yKG49bmV3IGgoZT1jKHAubGVuZ3RoKSk7ZT5tO20rKylzKG4sbSx5P2cocFttXSxtKTpwW21dKTtlbHNlIGZvcihkPShmPWIuY2FsbChwKSkubmV4dCxuPW5ldyBoOyEobD1kLmNhbGwoZikpLmRvbmU7bSsrKXMobixtLHk/aShmLGcsW2wudmFsdWUsbV0sITApOmwudmFsdWUpO3JldHVybiBuLmxlbmd0aD1tLG59fSw4NTgwMzpmdW5jdGlvbih0LGUsbil7dmFyIHI9big5NTczKSxvPW4oMjc4ODQpLGk9big3Njk3NiksYT1mdW5jdGlvbih0KXtyZXR1cm4gZnVuY3Rpb24oZSxuLGEpe3ZhciBjLHM9cihlKSx1PW8ocy5sZW5ndGgpLGw9aShhLHUpO2lmKHQmJm4hPW4pe2Zvcig7dT5sOylpZigoYz1zW2wrK10pIT1jKXJldHVybiEwfWVsc2UgZm9yKDt1Pmw7bCsrKWlmKCh0fHxsIGluIHMpJiZzW2xdPT09bilyZXR1cm4gdHx8bHx8MDtyZXR1cm4hdCYmLTF9fTt0LmV4cG9ydHM9e2luY2x1ZGVzOmEoITApLGluZGV4T2Y6YSghMSl9fSwzMDAyNTpmdW5jdGlvbih0LGUsbil7dmFyIHI9big0NjEzMCksbz1uKDI0OTgpLGk9bigxOTIwOSksYT1uKDI3ODg0KSxjPW4oNzAwOSkscz1bXS5wdXNoLHU9ZnVuY3Rpb24odCl7dmFyIGU9MT09dCxuPTI9PXQsdT0zPT10LGw9ND09dCxmPTY9PXQsZD01PT10fHxmO3JldHVybiBmdW5jdGlvbihwLGgsdixnKXtmb3IodmFyIHksbSxiPWkocCkseD1vKGIpLHc9cihoLHYsMyksRT1hKHgubGVuZ3RoKSxqPTAsQz1nfHxjLGs9ZT9DKHAsRSk6bj9DKHAsMCk6dm9pZCAwO0U+ajtqKyspaWYoKGR8fGogaW4geCkmJihtPXcoeT14W2pdLGosYiksdCkpaWYoZSlrW2pdPW07ZWxzZSBpZihtKXN3aXRjaCh0KXtjYXNlIDM6cmV0dXJuITA7Y2FzZSA1OnJldHVybiB5O2Nhc2UgNjpyZXR1cm4gajtjYXNlIDI6cy5jYWxsKGsseSl9ZWxzZSBpZihsKXJldHVybiExO3JldHVybiBmPy0xOnV8fGw/bDprfX07dC5leHBvcnRzPXtmb3JFYWNoOnUoMCksbWFwOnUoMSksZmlsdGVyOnUoMiksc29tZTp1KDMpLGV2ZXJ5OnUoNCksZmluZDp1KDUpLGZpbmRJbmRleDp1KDYpfX0sNDkyNDk6ZnVuY3Rpb24odCxlLG4peyJ1c2Ugc3RyaWN0Ijt2YXIgcj1uKDk1NzMpLG89big0MzQxNiksaT1uKDI3ODg0KSxhPW4oMjI5MDkpLGM9TWF0aC5taW4scz1bXS5sYXN0SW5kZXhPZix1PSEhcyYmMS9bMV0ubGFzdEluZGV4T2YoMSwtMCk8MCxsPWEoImxhc3RJbmRleE9mIik7dC5leHBvcnRzPXV8fGw/ZnVuY3Rpb24odCl7aWYodSlyZXR1cm4gcy5hcHBseSh0aGlzLGFyZ3VtZW50cyl8fDA7dmFyIGU9cih0aGlzKSxuPWkoZS5sZW5ndGgpLGE9bi0xO2Zvcihhcmd1bWVudHMubGVuZ3RoPjEmJihhPWMoYSxvKGFyZ3VtZW50c1sxXSkpKSxhPDAmJihhPW4rYSk7YT49MDthLS0paWYoYSBpbiBlJiZlW2FdPT09dClyZXR1cm4gYXx8MDtyZXR1cm4tMX06c30sNjE5NjM6ZnVuY3Rpb24odCxlLG4pe3ZhciByPW4oMzIxODcpLG89bigyMzcyNCksaT1uKDc5MDcxKSxhPW8oInNwZWNpZXMiKTt0LmV4cG9ydHM9ZnVuY3Rpb24odCl7cmV0dXJuIGk+PTUxfHwhcigoZnVuY3Rpb24oKXt2YXIgZT1bXTtyZXR1cm4oZS5jb25zdHJ1Y3Rvcj17fSlbYV09ZnVuY3Rpb24oKXtyZXR1cm57Zm9vOjF9fSwxIT09ZVt0XShCb29sZWFuKS5mb299KSl9fSwxMjM2NjpmdW5jdGlvbih0LGUsbil7dmFyIHI9big4NjQ3MCksbz1uKDE5MjA5KSxpPW4oMjQ5OCksYT1uKDI3ODg0KSxjPWZ1bmN0aW9uKHQpe3JldHVybiBmdW5jdGlvbihlLG4sYyxzKXtyKG4pO3ZhciB1PW8oZSksbD1pKHUpLGY9YSh1Lmxlbmd0aCksZD10P2YtMTowLHA9dD8tMToxO2lmKGM8Milmb3IoOzspe2lmKGQgaW4gbCl7cz1sW2RdLGQrPXA7YnJlYWt9aWYoZCs9cCx0P2Q8MDpmPD1kKXRocm93IFR5cGVFcnJvcigiUmVkdWNlIG9mIGVtcHR5IGFycmF5IHdpdGggbm8gaW5pdGlhbCB2YWx1ZSIpfWZvcig7dD9kPj0wOmY+ZDtkKz1wKWQgaW4gbCYmKHM9bihzLGxbZF0sZCx1KSk7cmV0dXJuIHN9fTt0LmV4cG9ydHM9e2xlZnQ6YyghMSkscmlnaHQ6YyghMCl9fSw3MDA5OmZ1bmN0aW9uKHQsZSxuKXt2YXIgcj1uKDEwNTkyKSxvPW4oNjE5OSksaT1uKDIzNzI0KSgic3BlY2llcyIpO3QuZXhwb3J0cz1mdW5jdGlvbih0LGUpe3ZhciBuO3JldHVybiBvKHQpJiYoImZ1bmN0aW9uIiE9dHlwZW9mKG49dC5jb25zdHJ1Y3Rvcil8fG4hPT1BcnJheSYmIW8obi5wcm90b3R5cGUpP3IobikmJm51bGw9PT0obj1uW2ldKSYmKG49dm9pZCAwKTpuPXZvaWQgMCksbmV3KHZvaWQgMD09PW4/QXJyYXk6bikoMD09PWU/MDplKX19LDQ1NjY2OmZ1bmN0aW9uKHQsZSxuKXsidXNlIHN0cmljdCI7dmFyIHI9big4NjQ3MCksbz1uKDg3NTc5KSxpPW4oNzcwMSkoIlByb21pc2UiKSxhPVtdLnB1c2gsYz1mdW5jdGlvbih0KXt2YXIgZT0wPT10LG49MT09dCxjPTI9PXQscz0zPT10O3JldHVybiBmdW5jdGlvbih0LHUpe28odCk7dmFyIGw9cih0Lm5leHQpLGY9ZT9bXTp2b2lkIDA7cmV0dXJuIGV8fHIodSksbmV3IGkoKGZ1bmN0aW9uKHIsZCl7dmFyIHA9ZnVuY3Rpb24oKXt0cnl7aS5yZXNvbHZlKG8obC5jYWxsKHQpKSkudGhlbigoZnVuY3Rpb24odCl7dHJ5e2lmKG8odCkuZG9uZSlyKGU/ZjohcyYmKGN8fHZvaWQgMCkpO2Vsc2V7dmFyIGw9dC52YWx1ZTtlPyhhLmNhbGwoZixsKSxwKCkpOmkucmVzb2x2ZSh1KGwpKS50aGVuKChmdW5jdGlvbih0KXtuP3AoKTpjP3Q/cCgpOnIoITEpOnQ/cihzfHxsKTpwKCl9KSxkKX19Y2F0Y2godCl7ZCh0KX19KSxkKX1jYXRjaCh0KXtkKHQpfX07cCgpfSkpfX07dC5leHBvcnRzPXt0b0FycmF5OmMoMCksZm9yRWFjaDpjKDEpLGV2ZXJ5OmMoMiksc29tZTpjKDMpLGZpbmQ6Yyg0KX19LDYzODQ1OmZ1bmN0aW9uKHQsZSxuKXt2YXIgcixvLGk9big4OTU1OCksYT1uKDM0NzQxKSxjPW4oNjQ5NjUpLHM9big3NjI5OCksdT1uKDY2OTcxKSxsPW4oMjM3MjQpLGY9big2NTY3MiksZD1sKCJhc3luY0l0ZXJhdG9yIikscD1pLkFzeW5jSXRlcmF0b3IsaD1hLkFzeW5jSXRlcmF0b3JQcm90b3R5cGU7aWYoIWYpaWYoaClyPWg7ZWxzZSBpZigiZnVuY3Rpb24iPT10eXBlb2YgcClyPXAucHJvdG90eXBlO2Vsc2UgaWYoYS5VU0VfRlVOQ1RJT05fQ09OU1RSVUNUT1J8fGkuVVNFX0ZVTkNUSU9OX0NPTlNUUlVDVE9SKXRyeXtvPWMoYyhjKEZ1bmN0aW9uKCJyZXR1cm4gYXN5bmMgZnVuY3Rpb24qKCl7fSgpIikoKSkpKSxjKG8pPT09T2JqZWN0LnByb3RvdHlwZSYmKHI9byl9Y2F0Y2godCl7fXJ8fChyPXt9KSxzKHIsZCl8fHUocixkLChmdW5jdGlvbigpe3JldHVybiB0aGlzfSkpLHQuZXhwb3J0cz1yfSw0NjEzMDpmdW5jdGlvbih0LGUsbil7dmFyIHI9big4NjQ3MCk7dC5leHBvcnRzPWZ1bmN0aW9uKHQsZSxuKXtpZihyKHQpLHZvaWQgMD09PWUpcmV0dXJuIHQ7c3dpdGNoKG4pe2Nhc2UgMDpyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gdC5jYWxsKGUpfTtjYXNlIDE6cmV0dXJuIGZ1bmN0aW9uKG4pe3JldHVybiB0LmNhbGwoZSxuKX07Y2FzZSAyOnJldHVybiBmdW5jdGlvbihuLHIpe3JldHVybiB0LmNhbGwoZSxuLHIpfTtjYXNlIDM6cmV0dXJuIGZ1bmN0aW9uKG4scixvKXtyZXR1cm4gdC5jYWxsKGUsbixyLG8pfX1yZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gdC5hcHBseShlLGFyZ3VtZW50cyl9fX0sMTIyNzg6ZnVuY3Rpb24odCxlLG4pe3ZhciByPW4oODc1NzkpO3QuZXhwb3J0cz1mdW5jdGlvbih0LGUsbixvKXt0cnl7cmV0dXJuIG8/ZShyKG4pWzBdLG5bMV0pOmUobil9Y2F0Y2goZSl7dmFyIGk9dC5yZXR1cm47dGhyb3cgdm9pZCAwIT09aSYmcihpLmNhbGwodCkpLGV9fX0sNDc5NjpmdW5jdGlvbih0LGUsbil7dmFyIHI9bigyMzcyNCkoIml0ZXJhdG9yIiksbz0hMTt0cnl7dmFyIGk9MCxhPXtuZXh0OmZ1bmN0aW9uKCl7cmV0dXJue2RvbmU6ISFpKyt9fSxyZXR1cm46ZnVuY3Rpb24oKXtvPSEwfX07YVtyXT1mdW5jdGlvbigpe3JldHVybiB0aGlzfSxBcnJheS5mcm9tKGEsKGZ1bmN0aW9uKCl7dGhyb3cgMn0pKX1jYXRjaCh0KXt9dC5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7aWYoIWUmJiFvKXJldHVybiExO3ZhciBuPSExO3RyeXt2YXIgaT17fTtpW3JdPWZ1bmN0aW9uKCl7cmV0dXJue25leHQ6ZnVuY3Rpb24oKXtyZXR1cm57ZG9uZTpuPSEwfX19fSx0KGkpfWNhdGNoKHQpe31yZXR1cm4gbn19LDI0NTk0OmZ1bmN0aW9uKHQpe3ZhciBlPXt9LnRvU3RyaW5nO3QuZXhwb3J0cz1mdW5jdGlvbih0KXtyZXR1cm4gZS5jYWxsKHQpLnNsaWNlKDgsLTEpfX0sNTk1OTE6ZnVuY3Rpb24odCxlLG4pe3ZhciByPW4oOTA2MTMpLG89bigyNDU5NCksaT1uKDIzNzI0KSgidG9TdHJpbmdUYWciKSxhPSJBcmd1bWVudHMiPT1vKGZ1bmN0aW9uKCl7cmV0dXJuIGFyZ3VtZW50c30oKSk7dC5leHBvcnRzPXI/bzpmdW5jdGlvbih0KXt2YXIgZSxuLHI7cmV0dXJuIHZvaWQgMD09PXQ/IlVuZGVmaW5lZCI6bnVsbD09PXQ/Ik51bGwiOiJzdHJpbmciPT10eXBlb2Yobj1mdW5jdGlvbih0LGUpe3RyeXtyZXR1cm4gdFtlXX1jYXRjaCh0KXt9fShlPU9iamVjdCh0KSxpKSk/bjphP28oZSk6Ik9iamVjdCI9PShyPW8oZSkpJiYiZnVuY3Rpb24iPT10eXBlb2YgZS5jYWxsZWU/IkFyZ3VtZW50cyI6cn19LDk4MTc5OmZ1bmN0aW9uKHQsZSxuKXsidXNlIHN0cmljdCI7dmFyIHI9big4NzU3OSksbz1uKDg2NDcwKTt0LmV4cG9ydHM9ZnVuY3Rpb24oKXtmb3IodmFyIHQ9cih0aGlzKSxlPW8odC5hZGQpLG49MCxpPWFyZ3VtZW50cy5sZW5ndGg7bjxpO24rKyllLmNhbGwodCxhcmd1bWVudHNbbl0pO3JldHVybiB0fX0sMTQ2NjpmdW5jdGlvbih0LGUsbil7InVzZSBzdHJpY3QiO3ZhciByPW4oODc1NzkpLG89big4NjQ3MCk7dC5leHBvcnRzPWZ1bmN0aW9uKCl7Zm9yKHZhciB0LGU9cih0aGlzKSxuPW8oZS5kZWxldGUpLGk9ITAsYT0wLGM9YXJndW1lbnRzLmxlbmd0aDthPGM7YSsrKXQ9bi5jYWxsKGUsYXJndW1lbnRzW2FdKSxpPWkmJnQ7cmV0dXJuISFpfX0sMTI5MDE6ZnVuY3Rpb24odCxlLG4peyJ1c2Ugc3RyaWN0Ijt2YXIgcj1uKDg2NDcwKSxvPW4oNDYxMzApLGk9big0MTMzNCk7dC5leHBvcnRzPWZ1bmN0aW9uKHQpe3ZhciBlLG4sYSxjLHM9YXJndW1lbnRzLmxlbmd0aCx1PXM+MT9hcmd1bWVudHNbMV06dm9pZCAwO3JldHVybiByKHRoaXMpLChlPXZvaWQgMCE9PXUpJiZyKHUpLG51bGw9PXQ/bmV3IHRoaXM6KG49W10sZT8oYT0wLGM9byh1LHM+Mj9hcmd1bWVudHNbMl06dm9pZCAwLDIpLGkodCwoZnVuY3Rpb24odCl7bi5wdXNoKGModCxhKyspKX0pKSk6aSh0LG4ucHVzaCxuKSxuZXcgdGhpcyhuKSl9fSwyNTAyNjpmdW5jdGlvbih0KXsidXNlIHN0cmljdCI7dC5leHBvcnRzPWZ1bmN0aW9uKCl7Zm9yKHZhciB0PWFyZ3VtZW50cy5sZW5ndGgsZT1uZXcgQXJyYXkodCk7dC0tOyllW3RdPWFyZ3VtZW50c1t0XTtyZXR1cm4gbmV3IHRoaXMoZSl9fSw2NDUwOmZ1bmN0aW9uKHQsZSxuKXsidXNlIHN0cmljdCI7dmFyIHI9bigzNzYyMCkuZixvPW4oNTA4NjgpLGk9bigxOTI2KSxhPW4oNDYxMzApLGM9big1OTM3OSkscz1uKDQxMzM0KSx1PW4oNDYwNjEpLGw9big2NzUzOCksZj1uKDYyNTU2KSxkPW4oOTYwMykuZmFzdEtleSxwPW4oODk4MjcpLGg9cC5zZXQsdj1wLmdldHRlckZvcjt0LmV4cG9ydHM9e2dldENvbnN0cnVjdG9yOmZ1bmN0aW9uKHQsZSxuLHUpe3ZhciBsPXQoKGZ1bmN0aW9uKHQscil7Yyh0LGwsZSksaCh0LHt0eXBlOmUsaW5kZXg6byhudWxsKSxmaXJzdDp2b2lkIDAsbGFzdDp2b2lkIDAsc2l6ZTowfSksZnx8KHQuc2l6ZT0wKSxudWxsIT1yJiZzKHIsdFt1XSx0LG4pfSkpLHA9dihlKSxnPWZ1bmN0aW9uKHQsZSxuKXt2YXIgcixvLGk9cCh0KSxhPXkodCxlKTtyZXR1cm4gYT9hLnZhbHVlPW46KGkubGFzdD1hPXtpbmRleDpvPWQoZSwhMCksa2V5OmUsdmFsdWU6bixwcmV2aW91czpyPWkubGFzdCxuZXh0OnZvaWQgMCxyZW1vdmVkOiExfSxpLmZpcnN0fHwoaS5maXJzdD1hKSxyJiYoci5uZXh0PWEpLGY/aS5zaXplKys6dC5zaXplKyssIkYiIT09byYmKGkuaW5kZXhbb109YSkpLHR9LHk9ZnVuY3Rpb24odCxlKXt2YXIgbixyPXAodCksbz1kKGUpO2lmKCJGIiE9PW8pcmV0dXJuIHIuaW5kZXhbb107Zm9yKG49ci5maXJzdDtuO249bi5uZXh0KWlmKG4ua2V5PT1lKXJldHVybiBufTtyZXR1cm4gaShsLnByb3RvdHlwZSx7Y2xlYXI6ZnVuY3Rpb24oKXtmb3IodmFyIHQ9cCh0aGlzKSxlPXQuaW5kZXgsbj10LmZpcnN0O247KW4ucmVtb3ZlZD0hMCxuLnByZXZpb3VzJiYobi5wcmV2aW91cz1uLnByZXZpb3VzLm5leHQ9dm9pZCAwKSxkZWxldGUgZVtuLmluZGV4XSxuPW4ubmV4dDt0LmZpcnN0PXQubGFzdD12b2lkIDAsZj90LnNpemU9MDp0aGlzLnNpemU9MH0sZGVsZXRlOmZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMsbj1wKGUpLHI9eShlLHQpO2lmKHIpe3ZhciBvPXIubmV4dCxpPXIucHJldmlvdXM7ZGVsZXRlIG4uaW5kZXhbci5pbmRleF0sci5yZW1vdmVkPSEwLGkmJihpLm5leHQ9byksbyYmKG8ucHJldmlvdXM9aSksbi5maXJzdD09ciYmKG4uZmlyc3Q9byksbi5sYXN0PT1yJiYobi5sYXN0PWkpLGY/bi5zaXplLS06ZS5zaXplLS19cmV0dXJuISFyfSxmb3JFYWNoOmZ1bmN0aW9uKHQpe2Zvcih2YXIgZSxuPXAodGhpcykscj1hKHQsYXJndW1lbnRzLmxlbmd0aD4xP2FyZ3VtZW50c1sxXTp2b2lkIDAsMyk7ZT1lP2UubmV4dDpuLmZpcnN0Oylmb3IocihlLnZhbHVlLGUua2V5LHRoaXMpO2UmJmUucmVtb3ZlZDspZT1lLnByZXZpb3VzfSxoYXM6ZnVuY3Rpb24odCl7cmV0dXJuISF5KHRoaXMsdCl9fSksaShsLnByb3RvdHlwZSxuP3tnZXQ6ZnVuY3Rpb24odCl7dmFyIGU9eSh0aGlzLHQpO3JldHVybiBlJiZlLnZhbHVlfSxzZXQ6ZnVuY3Rpb24odCxlKXtyZXR1cm4gZyh0aGlzLDA9PT10PzA6dCxlKX19OnthZGQ6ZnVuY3Rpb24odCl7cmV0dXJuIGcodGhpcyx0PTA9PT10PzA6dCx0KX19KSxmJiZyKGwucHJvdG90eXBlLCJzaXplIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHAodGhpcykuc2l6ZX19KSxsfSxzZXRTdHJvbmc6ZnVuY3Rpb24odCxlLG4pe3ZhciByPWUrIiBJdGVyYXRvciIsbz12KGUpLGk9dihyKTt1KHQsZSwoZnVuY3Rpb24odCxlKXtoKHRoaXMse3R5cGU6cix0YXJnZXQ6dCxzdGF0ZTpvKHQpLGtpbmQ6ZSxsYXN0OnZvaWQgMH0pfSksKGZ1bmN0aW9uKCl7Zm9yKHZhciB0PWkodGhpcyksZT10LmtpbmQsbj10Lmxhc3Q7biYmbi5yZW1vdmVkOyluPW4ucHJldmlvdXM7cmV0dXJuIHQudGFyZ2V0JiYodC5sYXN0PW49bj9uLm5leHQ6dC5zdGF0ZS5maXJzdCk/ImtleXMiPT1lP3t2YWx1ZTpuLmtleSxkb25lOiExfToidmFsdWVzIj09ZT97dmFsdWU6bi52YWx1ZSxkb25lOiExfTp7dmFsdWU6W24ua2V5LG4udmFsdWVdLGRvbmU6ITF9Oih0LnRhcmdldD12b2lkIDAse3ZhbHVlOnZvaWQgMCxkb25lOiEwfSl9KSxuPyJlbnRyaWVzIjoidmFsdWVzIiwhbiwhMCksbChlKX19fSw3MTMwMzpmdW5jdGlvbih0LGUsbil7InVzZSBzdHJpY3QiO3ZhciByPW4oMTkyNiksbz1uKDk2MDMpLmdldFdlYWtEYXRhLGk9big4NzU3OSksYT1uKDEwNTkyKSxjPW4oNTkzNzkpLHM9big0MTMzNCksdT1uKDMwMDI1KSxsPW4oNzYyOTgpLGY9big4OTgyNyksZD1mLnNldCxwPWYuZ2V0dGVyRm9yLGg9dS5maW5kLHY9dS5maW5kSW5kZXgsZz0wLHk9ZnVuY3Rpb24odCl7cmV0dXJuIHQuZnJvemVufHwodC5mcm96ZW49bmV3IG0pfSxtPWZ1bmN0aW9uKCl7dGhpcy5lbnRyaWVzPVtdfSxiPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIGgodC5lbnRyaWVzLChmdW5jdGlvbih0KXtyZXR1cm4gdFswXT09PWV9KSl9O20ucHJvdG90eXBlPXtnZXQ6ZnVuY3Rpb24odCl7dmFyIGU9Yih0aGlzLHQpO2lmKGUpcmV0dXJuIGVbMV19LGhhczpmdW5jdGlvbih0KXtyZXR1cm4hIWIodGhpcyx0KX0sc2V0OmZ1bmN0aW9uKHQsZSl7dmFyIG49Yih0aGlzLHQpO24/blsxXT1lOnRoaXMuZW50cmllcy5wdXNoKFt0LGVdKX0sZGVsZXRlOmZ1bmN0aW9uKHQpe3ZhciBlPXYodGhpcy5lbnRyaWVzLChmdW5jdGlvbihlKXtyZXR1cm4gZVswXT09PXR9KSk7cmV0dXJufmUmJnRoaXMuZW50cmllcy5zcGxpY2UoZSwxKSwhIX5lfX0sdC5leHBvcnRzPXtnZXRDb25zdHJ1Y3RvcjpmdW5jdGlvbih0LGUsbix1KXt2YXIgZj10KChmdW5jdGlvbih0LHIpe2ModCxmLGUpLGQodCx7dHlwZTplLGlkOmcrKyxmcm96ZW46dm9pZCAwfSksbnVsbCE9ciYmcyhyLHRbdV0sdCxuKX0pKSxoPXAoZSksdj1mdW5jdGlvbih0LGUsbil7dmFyIHI9aCh0KSxhPW8oaShlKSwhMCk7cmV0dXJuITA9PT1hP3kocikuc2V0KGUsbik6YVtyLmlkXT1uLHR9O3JldHVybiByKGYucHJvdG90eXBlLHtkZWxldGU6ZnVuY3Rpb24odCl7dmFyIGU9aCh0aGlzKTtpZighYSh0KSlyZXR1cm4hMTt2YXIgbj1vKHQpO3JldHVybiEwPT09bj95KGUpLmRlbGV0ZSh0KTpuJiZsKG4sZS5pZCkmJmRlbGV0ZSBuW2UuaWRdfSxoYXM6ZnVuY3Rpb24odCl7dmFyIGU9aCh0aGlzKTtpZighYSh0KSlyZXR1cm4hMTt2YXIgbj1vKHQpO3JldHVybiEwPT09bj95KGUpLmhhcyh0KTpuJiZsKG4sZS5pZCl9fSkscihmLnByb3RvdHlwZSxuP3tnZXQ6ZnVuY3Rpb24odCl7dmFyIGU9aCh0aGlzKTtpZihhKHQpKXt2YXIgbj1vKHQpO3JldHVybiEwPT09bj95KGUpLmdldCh0KTpuP25bZS5pZF06dm9pZCAwfX0sc2V0OmZ1bmN0aW9uKHQsZSl7cmV0dXJuIHYodGhpcyx0LGUpfX06e2FkZDpmdW5jdGlvbih0KXtyZXR1cm4gdih0aGlzLHQsITApfX0pLGZ9fX0sODE5NTE6ZnVuY3Rpb24odCxlLG4peyJ1c2Ugc3RyaWN0Ijt2YXIgcj1uKDE0MDQ0KSxvPW4oODk1NTgpLGk9big2NDUwNCksYT1uKDkyOTEzKSxjPW4oOTYwMykscz1uKDQxMzM0KSx1PW4oNTkzNzkpLGw9bigxMDU5MiksZj1uKDMyMTg3KSxkPW4oNDc5NikscD1uKDUxMTI4KSxoPW4oMzAyNzIpO3QuZXhwb3J0cz1mdW5jdGlvbih0LGUsbil7dmFyIHY9LTEhPT10LmluZGV4T2YoIk1hcCIpLGc9LTEhPT10LmluZGV4T2YoIldlYWsiKSx5PXY/InNldCI6ImFkZCIsbT1vW3RdLGI9bSYmbS5wcm90b3R5cGUseD1tLHc9e30sRT1mdW5jdGlvbih0KXt2YXIgZT1iW3RdO2EoYix0LCJhZGQiPT10P2Z1bmN0aW9uKHQpe3JldHVybiBlLmNhbGwodGhpcywwPT09dD8wOnQpLHRoaXN9OiJkZWxldGUiPT10P2Z1bmN0aW9uKHQpe3JldHVybiEoZyYmIWwodCkpJiZlLmNhbGwodGhpcywwPT09dD8wOnQpfToiZ2V0Ij09dD9mdW5jdGlvbih0KXtyZXR1cm4gZyYmIWwodCk/dm9pZCAwOmUuY2FsbCh0aGlzLDA9PT10PzA6dCl9OiJoYXMiPT10P2Z1bmN0aW9uKHQpe3JldHVybiEoZyYmIWwodCkpJiZlLmNhbGwodGhpcywwPT09dD8wOnQpfTpmdW5jdGlvbih0LG4pe3JldHVybiBlLmNhbGwodGhpcywwPT09dD8wOnQsbiksdGhpc30pfTtpZihpKHQsImZ1bmN0aW9uIiE9dHlwZW9mIG18fCEoZ3x8Yi5mb3JFYWNoJiYhZigoZnVuY3Rpb24oKXsobmV3IG0pLmVudHJpZXMoKS5uZXh0KCl9KSkpKSl4PW4uZ2V0Q29uc3RydWN0b3IoZSx0LHYseSksYy5SRVFVSVJFRD0hMDtlbHNlIGlmKGkodCwhMCkpe3ZhciBqPW5ldyB4LEM9alt5XShnP3t9Oi0wLDEpIT1qLGs9ZigoZnVuY3Rpb24oKXtqLmhhcygxKX0pKSxTPWQoKGZ1bmN0aW9uKHQpe25ldyBtKHQpfSkpLE89IWcmJmYoKGZ1bmN0aW9uKCl7Zm9yKHZhciB0PW5ldyBtLGU9NTtlLS07KXRbeV0oZSxlKTtyZXR1cm4hdC5oYXMoLTApfSkpO1N8fCgoeD1lKChmdW5jdGlvbihlLG4pe3UoZSx4LHQpO3ZhciByPWgobmV3IG0sZSx4KTtyZXR1cm4gbnVsbCE9biYmcyhuLHJbeV0scix2KSxyfSkpKS5wcm90b3R5cGU9YixiLmNvbnN0cnVjdG9yPXgpLChrfHxPKSYmKEUoImRlbGV0ZSIpLEUoImhhcyIpLHYmJkUoImdldCIpKSwoT3x8QykmJkUoeSksZyYmYi5jbGVhciYmZGVsZXRlIGIuY2xlYXJ9cmV0dXJuIHdbdF09eCxyKHtnbG9iYWw6ITAsZm9yY2VkOnghPW19LHcpLHAoeCx0KSxnfHxuLnNldFN0cm9uZyh4LHQsdikseH19LDc0Njg1OmZ1bmN0aW9uKHQsZSxuKXt2YXIgcj1uKDk0OTA2KSxvPW4oNTg2MDYpLGk9big1MDg2OCksYT1uKDEwNTkyKSxjPWZ1bmN0aW9uKCl7dGhpcy5vYmplY3Q9bnVsbCx0aGlzLnN5bWJvbD1udWxsLHRoaXMucHJpbWl0aXZlcz1udWxsLHRoaXMub2JqZWN0c0J5SW5kZXg9aShudWxsKX07Yy5wcm90b3R5cGUuZ2V0PWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHRoaXNbdF18fCh0aGlzW3RdPWUoKSl9LGMucHJvdG90eXBlLm5leHQ9ZnVuY3Rpb24odCxlLG4pe3ZhciBpPW4/dGhpcy5vYmplY3RzQnlJbmRleFt0XXx8KHRoaXMub2JqZWN0c0J5SW5kZXhbdF09bmV3IG8pOnRoaXMucHJpbWl0aXZlc3x8KHRoaXMucHJpbWl0aXZlcz1uZXcgciksYT1pLmdldChlKTtyZXR1cm4gYXx8aS5zZXQoZSxhPW5ldyBjKSxhfTt2YXIgcz1uZXcgYzt0LmV4cG9ydHM9ZnVuY3Rpb24oKXt2YXIgdCxlLG49cyxyPWFyZ3VtZW50cy5sZW5ndGg7Zm9yKHQ9MDt0PHI7dCsrKWEoZT1hcmd1bWVudHNbdF0pJiYobj1uLm5leHQodCxlLCEwKSk7aWYodGhpcz09PU9iamVjdCYmbj09PXMpdGhyb3cgVHlwZUVycm9yKCJDb21wb3NpdGUga2V5cyBtdXN0IGNvbnRhaW4gYSBub24tcHJpbWl0aXZlIGNvbXBvbmVudCIpO2Zvcih0PTA7dDxyO3QrKylhKGU9YXJndW1lbnRzW3RdKXx8KG49bi5uZXh0KHQsZSwhMSkpO3JldHVybiBufX0sOTk2MjU6ZnVuY3Rpb24odCxlLG4pe3ZhciByPW4oNzYyOTgpLG89bigyNDQxNSksaT1uKDk3MjU3KSxhPW4oMzc2MjApO3QuZXhwb3J0cz1mdW5jdGlvbih0LGUpe2Zvcih2YXIgbj1vKGUpLGM9YS5mLHM9aS5mLHU9MDt1PG4ubGVuZ3RoO3UrKyl7dmFyIGw9blt1XTtyKHQsbCl8fGModCxsLHMoZSxsKSl9fX0sOTM5MTU6ZnVuY3Rpb24odCxlLG4pe3ZhciByPW4oMjM3MjQpKCJtYXRjaCIpO3QuZXhwb3J0cz1mdW5jdGlvbih0KXt2YXIgZT0vLi87dHJ5eyIvLi8iW3RdKGUpfWNhdGNoKG4pe3RyeXtyZXR1cm4gZVtyXT0hMSwiLy4vIlt0XShlKX1jYXRjaCh0KXt9fXJldHVybiExfX0sNzE2MDg6ZnVuY3Rpb24odCxlLG4pe3ZhciByPW4oMzIxODcpO3QuZXhwb3J0cz0hcigoZnVuY3Rpb24oKXtmdW5jdGlvbiB0KCl7fXJldHVybiB0LnByb3RvdHlwZS5jb25zdHJ1Y3Rvcj1udWxsLE9iamVjdC5nZXRQcm90b3R5cGVPZihuZXcgdCkhPT10LnByb3RvdHlwZX0pKX0sMjcwMDQ6ZnVuY3Rpb24odCxlLG4peyJ1c2Ugc3RyaWN0Ijt2YXIgcj1uKDU2MjM4KSxvPW4oODY0NzApLGk9big4NzU3OSksYT1uKDUwODY4KSxjPW4oNjY5NzEpLHM9bigxOTI2KSx1PW4oMjM3MjQpLGw9big4OTgyNyksZj1uKDc3MDEpKCJQcm9taXNlIiksZD1sLnNldCxwPWwuZ2V0LGg9dSgidG9TdHJpbmdUYWciKSx2PWZ1bmN0aW9uKHQpe3ZhciBlPXAodGhpcykuaXRlcmF0b3Isbj1lLnJldHVybjtyZXR1cm4gdm9pZCAwPT09bj9mLnJlc29sdmUoe2RvbmU6ITAsdmFsdWU6dH0pOmkobi5jYWxsKGUsdCkpfSxnPWZ1bmN0aW9uKHQpe3ZhciBlPXAodGhpcykuaXRlcmF0b3Isbj1lLnRocm93O3JldHVybiB2b2lkIDA9PT1uP2YucmVqZWN0KHQpOm4uY2FsbChlLHQpfTt0LmV4cG9ydHM9ZnVuY3Rpb24odCxlKXt2YXIgbj1mdW5jdGlvbih0KXt0Lm5leHQ9byh0Lml0ZXJhdG9yLm5leHQpLHQuZG9uZT0hMSxkKHRoaXMsdCl9O3JldHVybiBuLnByb3RvdHlwZT1zKGEoci5Bc3luY0l0ZXJhdG9yLnByb3RvdHlwZSkse25leHQ6ZnVuY3Rpb24oZSl7dmFyIG49cCh0aGlzKTtpZihuLmRvbmUpcmV0dXJuIGYucmVzb2x2ZSh7ZG9uZTohMCx2YWx1ZTp2b2lkIDB9KTt0cnl7cmV0dXJuIGYucmVzb2x2ZShpKHQuY2FsbChuLGUsZikpKX1jYXRjaCh0KXtyZXR1cm4gZi5yZWplY3QodCl9fSxyZXR1cm46dix0aHJvdzpnfSksZXx8YyhuLnByb3RvdHlwZSxoLCJHZW5lcmF0b3IiKSxufX0sMzEzNTE6ZnVuY3Rpb24odCxlLG4pe3ZhciByPW4oNzAxMzIpLG89LyIvZzt0LmV4cG9ydHM9ZnVuY3Rpb24odCxlLG4saSl7dmFyIGE9U3RyaW5nKHIodCkpLGM9IjwiK2U7cmV0dXJuIiIhPT1uJiYoYys9IiAiK24rJz0iJytTdHJpbmcoaSkucmVwbGFjZShvLCImcXVvdDsiKSsnIicpLGMrIj4iK2ErIjwvIitlKyI+In19LDcxMjAxOmZ1bmN0aW9uKHQsZSxuKXsidXNlIHN0cmljdCI7dmFyIHI9big2NDE3NikuSXRlcmF0b3JQcm90b3R5cGUsbz1uKDUwODY4KSxpPW4oMTQyMDkpLGE9big1MTEyOCksYz1uKDEyMzUpLHM9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpc307dC5leHBvcnRzPWZ1bmN0aW9uKHQsZSxuKXt2YXIgdT1lKyIgSXRlcmF0b3IiO3JldHVybiB0LnByb3RvdHlwZT1vKHIse25leHQ6aSgxLG4pfSksYSh0LHUsITEsITApLGNbdV09cyx0fX0sODgwNzpmdW5jdGlvbih0LGUsbil7InVzZSBzdHJpY3QiO3ZhciByPW4oNTYyMzgpLG89big4NjQ3MCksaT1uKDg3NTc5KSxhPW4oNTA4NjgpLGM9big2Njk3MSkscz1uKDE5MjYpLHU9bigyMzcyNCksbD1uKDg5ODI3KSxmPWwuc2V0LGQ9bC5nZXQscD11KCJ0b1N0cmluZ1RhZyIpLGg9ZnVuY3Rpb24odCl7dmFyIGU9ZCh0aGlzKS5pdGVyYXRvcixuPWUucmV0dXJuO3JldHVybiB2b2lkIDA9PT1uP3tkb25lOiEwLHZhbHVlOnR9Omkobi5jYWxsKGUsdCkpfSx2PWZ1bmN0aW9uKHQpe3ZhciBlPWQodGhpcykuaXRlcmF0b3Isbj1lLnRocm93O2lmKHZvaWQgMD09PW4pdGhyb3cgdDtyZXR1cm4gbi5jYWxsKGUsdCl9O3QuZXhwb3J0cz1mdW5jdGlvbih0LGUpe3ZhciBuPWZ1bmN0aW9uKHQpe3QubmV4dD1vKHQuaXRlcmF0b3IubmV4dCksdC5kb25lPSExLGYodGhpcyx0KX07cmV0dXJuIG4ucHJvdG90eXBlPXMoYShyLkl0ZXJhdG9yLnByb3RvdHlwZSkse25leHQ6ZnVuY3Rpb24oKXt2YXIgZT1kKHRoaXMpLG49ZS5kb25lP3ZvaWQgMDp0LmFwcGx5KGUsYXJndW1lbnRzKTtyZXR1cm57ZG9uZTplLmRvbmUsdmFsdWU6bn19LHJldHVybjpoLHRocm93OnZ9KSxlfHxjKG4ucHJvdG90eXBlLHAsIkdlbmVyYXRvciIpLG59fSw2Njk3MTpmdW5jdGlvbih0LGUsbil7dmFyIHI9big2MjU1Niksbz1uKDM3NjIwKSxpPW4oMTQyMDkpO3QuZXhwb3J0cz1yP2Z1bmN0aW9uKHQsZSxuKXtyZXR1cm4gby5mKHQsZSxpKDEsbikpfTpmdW5jdGlvbih0LGUsbil7cmV0dXJuIHRbZV09bix0fX0sMTQyMDk6ZnVuY3Rpb24odCl7dC5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7cmV0dXJue2VudW1lcmFibGU6ISgxJnQpLGNvbmZpZ3VyYWJsZTohKDImdCksd3JpdGFibGU6ISg0JnQpLHZhbHVlOmV9fX0sNTg4MTA6ZnVuY3Rpb24odCxlLG4peyJ1c2Ugc3RyaWN0Ijt2YXIgcj1uKDUzNDk4KSxvPW4oMzc2MjApLGk9bigxNDIwOSk7dC5leHBvcnRzPWZ1bmN0aW9uKHQsZSxuKXt2YXIgYT1yKGUpO2EgaW4gdD9vLmYodCxhLGkoMCxuKSk6dFthXT1ufX0sNzkxNjc6ZnVuY3Rpb24odCxlLG4peyJ1c2Ugc3RyaWN0Ijt2YXIgcj1uKDMyMTg3KSxvPW4oMjY1NzMpLnN0YXJ0LGk9TWF0aC5hYnMsYT1EYXRlLnByb3RvdHlwZSxjPWEuZ2V0VGltZSxzPWEudG9JU09TdHJpbmc7dC5leHBvcnRzPXIoKGZ1bmN0aW9uKCl7cmV0dXJuIjAzODUtMDctMjVUMDc6MDY6MzkuOTk5WiIhPXMuY2FsbChuZXcgRGF0ZSgtNTAwMDAwMDAwMDAwMDEpKX0pKXx8IXIoKGZ1bmN0aW9uKCl7cy5jYWxsKG5ldyBEYXRlKE5hTikpfSkpP2Z1bmN0aW9uKCl7aWYoIWlzRmluaXRlKGMuY2FsbCh0aGlzKSkpdGhyb3cgUmFuZ2VFcnJvcigiSW52YWxpZCB0aW1lIHZhbHVlIik7dmFyIHQ9dGhpcyxlPXQuZ2V0VVRDRnVsbFllYXIoKSxuPXQuZ2V0VVRDTWlsbGlzZWNvbmRzKCkscj1lPDA/Ii0iOmU+OTk5OT8iKyI6IiI7cmV0dXJuIHIrbyhpKGUpLHI/Njo0LDApKyItIitvKHQuZ2V0VVRDTW9udGgoKSsxLDIsMCkrIi0iK28odC5nZXRVVENEYXRlKCksMiwwKSsiVCIrbyh0LmdldFVUQ0hvdXJzKCksMiwwKSsiOiIrbyh0LmdldFVUQ01pbnV0ZXMoKSwyLDApKyI6IitvKHQuZ2V0VVRDU2Vjb25kcygpLDIsMCkrIi4iK28obiwzLDApKyJaIn06c30sNzY5NzQ6ZnVuY3Rpb24odCxlLG4peyJ1c2Ugc3RyaWN0Ijt2YXIgcj1uKDg3NTc5KSxvPW4oNTM0OTgpO3QuZXhwb3J0cz1mdW5jdGlvbih0KXtpZigic3RyaW5nIiE9PXQmJiJudW1iZXIiIT09dCYmImRlZmF1bHQiIT09dCl0aHJvdyBUeXBlRXJyb3IoIkluY29ycmVjdCBoaW50Iik7cmV0dXJuIG8ocih0aGlzKSwibnVtYmVyIiE9PXQpfX0sNDYwNjE6ZnVuY3Rpb24odCxlLG4peyJ1c2Ugc3RyaWN0Ijt2YXIgcj1uKDE0MDQ0KSxvPW4oNzEyMDEpLGk9big2NDk2NSksYT1uKDcxODQyKSxjPW4oNTExMjgpLHM9big2Njk3MSksdT1uKDkyOTEzKSxsPW4oMjM3MjQpLGY9big2NTY3MiksZD1uKDEyMzUpLHA9big2NDE3NiksaD1wLkl0ZXJhdG9yUHJvdG90eXBlLHY9cC5CVUdHWV9TQUZBUklfSVRFUkFUT1JTLGc9bCgiaXRlcmF0b3IiKSx5PSJrZXlzIixtPSJ2YWx1ZXMiLGI9ImVudHJpZXMiLHg9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpc307dC5leHBvcnRzPWZ1bmN0aW9uKHQsZSxuLGwscCx3LEUpe28obixlLGwpO3ZhciBqLEMsayxTPWZ1bmN0aW9uKHQpe2lmKHQ9PT1wJiZUKXJldHVybiBUO2lmKCF2JiZ0IGluIEkpcmV0dXJuIElbdF07c3dpdGNoKHQpe2Nhc2UgeTpjYXNlIG06Y2FzZSBiOnJldHVybiBmdW5jdGlvbigpe3JldHVybiBuZXcgbih0aGlzLHQpfX1yZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gbmV3IG4odGhpcyl9fSxPPWUrIiBJdGVyYXRvciIsQT0hMSxJPXQucHJvdG90eXBlLE09SVtnXXx8SVsiQEBpdGVyYXRvciJdfHxwJiZJW3BdLFQ9IXYmJk18fFMocCksXz0iQXJyYXkiPT1lJiZJLmVudHJpZXN8fE07aWYoXyYmKGo9aShfLmNhbGwobmV3IHQpKSxoIT09T2JqZWN0LnByb3RvdHlwZSYmai5uZXh0JiYoZnx8aShqKT09PWh8fChhP2EoaixoKToiZnVuY3Rpb24iIT10eXBlb2YgaltnXSYmcyhqLGcseCkpLGMoaixPLCEwLCEwKSxmJiYoZFtPXT14KSkpLHA9PW0mJk0mJk0ubmFtZSE9PW0mJihBPSEwLFQ9ZnVuY3Rpb24oKXtyZXR1cm4gTS5jYWxsKHRoaXMpfSksZiYmIUV8fElbZ109PT1UfHxzKEksZyxUKSxkW2VdPVQscClpZihDPXt2YWx1ZXM6UyhtKSxrZXlzOnc/VDpTKHkpLGVudHJpZXM6UyhiKX0sRSlmb3IoayBpbiBDKSh2fHxBfHwhKGsgaW4gSSkpJiZ1KEksayxDW2tdKTtlbHNlIHIoe3RhcmdldDplLHByb3RvOiEwLGZvcmNlZDp2fHxBfSxDKTtyZXR1cm4gQ319LDkyMjc1OmZ1bmN0aW9uKHQsZSxuKXt2YXIgcj1uKDU2MjM4KSxvPW4oNzYyOTgpLGk9big3MzkxNiksYT1uKDM3NjIwKS5mO3QuZXhwb3J0cz1mdW5jdGlvbih0KXt2YXIgZT1yLlN5bWJvbHx8KHIuU3ltYm9sPXt9KTtvKGUsdCl8fGEoZSx0LHt2YWx1ZTppLmYodCl9KX19LDYyNTU2OmZ1bmN0aW9uKHQsZSxuKXt2YXIgcj1uKDMyMTg3KTt0LmV4cG9ydHM9IXIoKGZ1bmN0aW9uKCl7cmV0dXJuIDchPU9iamVjdC5kZWZpbmVQcm9wZXJ0eSh7fSwiYSIse2dldDpmdW5jdGlvbigpe3JldHVybiA3fX0pLmF9KSl9LDE5MjM6ZnVuY3Rpb24odCxlLG4pe3ZhciByPW4oODk1NTgpLG89bigxMDU5MiksaT1yLmRvY3VtZW50LGE9byhpKSYmbyhpLmNyZWF0ZUVsZW1lbnQpO3QuZXhwb3J0cz1mdW5jdGlvbih0KXtyZXR1cm4gYT9pLmNyZWF0ZUVsZW1lbnQodCk6e319fSw0NzA5NDpmdW5jdGlvbih0KXt0LmV4cG9ydHM9e0NTU1J1bGVMaXN0OjAsQ1NTU3R5bGVEZWNsYXJhdGlvbjowLENTU1ZhbHVlTGlzdDowLENsaWVudFJlY3RMaXN0OjAsRE9NUmVjdExpc3Q6MCxET01TdHJpbmdMaXN0OjAsRE9NVG9rZW5MaXN0OjEsRGF0YVRyYW5zZmVySXRlbUxpc3Q6MCxGaWxlTGlzdDowLEhUTUxBbGxDb2xsZWN0aW9uOjAsSFRNTENvbGxlY3Rpb246MCxIVE1MRm9ybUVsZW1lbnQ6MCxIVE1MU2VsZWN0RWxlbWVudDowLE1lZGlhTGlzdDowLE1pbWVUeXBlQXJyYXk6MCxOYW1lZE5vZGVNYXA6MCxOb2RlTGlzdDoxLFBhaW50UmVxdWVzdExpc3Q6MCxQbHVnaW46MCxQbHVnaW5BcnJheTowLFNWR0xlbmd0aExpc3Q6MCxTVkdOdW1iZXJMaXN0OjAsU1ZHUGF0aFNlZ0xpc3Q6MCxTVkdQb2ludExpc3Q6MCxTVkdTdHJpbmdMaXN0OjAsU1ZHVHJhbnNmb3JtTGlzdDowLFNvdXJjZUJ1ZmZlckxpc3Q6MCxTdHlsZVNoZWV0TGlzdDowLFRleHRUcmFja0N1ZUxpc3Q6MCxUZXh0VHJhY2tMaXN0OjAsVG91Y2hMaXN0OjB9fSw1OTEzNTpmdW5jdGlvbih0KXt0LmV4cG9ydHM9WyJjb25zdHJ1Y3RvciIsImhhc093blByb3BlcnR5IiwiaXNQcm90b3R5cGVPZiIsInByb3BlcnR5SXNFbnVtZXJhYmxlIiwidG9Mb2NhbGVTdHJpbmciLCJ0b1N0cmluZyIsInZhbHVlT2YiXX0sMTQwNDQ6ZnVuY3Rpb24odCxlLG4pe3ZhciByPW4oODk1NTgpLG89big5NzI1NykuZixpPW4oNjY5NzEpLGE9big5MjkxMyksYz1uKDk4MjY5KSxzPW4oOTk2MjUpLHU9big2NDUwNCk7dC5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7dmFyIG4sbCxmLGQscCxoPXQudGFyZ2V0LHY9dC5nbG9iYWwsZz10LnN0YXQ7aWYobj12P3I6Zz9yW2hdfHxjKGgse30pOihyW2hdfHx7fSkucHJvdG90eXBlKWZvcihsIGluIGUpe2lmKGQ9ZVtsXSxmPXQubm9UYXJnZXRHZXQ/KHA9byhuLGwpKSYmcC52YWx1ZTpuW2xdLCF1KHY/bDpoKyhnPyIuIjoiIyIpK2wsdC5mb3JjZWQpJiZ2b2lkIDAhPT1mKXtpZih0eXBlb2YgZD09dHlwZW9mIGYpY29udGludWU7cyhkLGYpfSh0LnNoYW18fGYmJmYuc2hhbSkmJmkoZCwic2hhbSIsITApLGEobixsLGQsdCl9fX0sMzIxODc6ZnVuY3Rpb24odCl7dC5leHBvcnRzPWZ1bmN0aW9uKHQpe3RyeXtyZXR1cm4hIXQoKX1jYXRjaCh0KXtyZXR1cm4hMH19fSwzNTg2MDpmdW5jdGlvbih0LGUsbil7InVzZSBzdHJpY3QiO3ZhciByPW4oNjY5NzEpLG89big5MjkxMyksaT1uKDMyMTg3KSxhPW4oMjM3MjQpLGM9bigzODU5OCkscz1hKCJzcGVjaWVzIiksdT0haSgoZnVuY3Rpb24oKXt2YXIgdD0vLi87cmV0dXJuIHQuZXhlYz1mdW5jdGlvbigpe3ZhciB0PVtdO3JldHVybiB0Lmdyb3Vwcz17YToiNyJ9LHR9LCI3IiE9PSIiLnJlcGxhY2UodCwiJDxhPiIpfSkpLGw9IWkoKGZ1bmN0aW9uKCl7dmFyIHQ9Lyg/OikvLGU9dC5leGVjO3QuZXhlYz1mdW5jdGlvbigpe3JldHVybiBlLmFwcGx5KHRoaXMsYXJndW1lbnRzKX07dmFyIG49ImFiIi5zcGxpdCh0KTtyZXR1cm4gMiE9PW4ubGVuZ3RofHwiYSIhPT1uWzBdfHwiYiIhPT1uWzFdfSkpO3QuZXhwb3J0cz1mdW5jdGlvbih0LGUsbixmKXt2YXIgZD1hKHQpLHA9IWkoKGZ1bmN0aW9uKCl7dmFyIGU9e307cmV0dXJuIGVbZF09ZnVuY3Rpb24oKXtyZXR1cm4gN30sNyE9IiJbdF0oZSl9KSksaD1wJiYhaSgoZnVuY3Rpb24oKXt2YXIgZT0hMSxuPS9hLztyZXR1cm4ic3BsaXQiPT09dCYmKChuPXt9KS5jb25zdHJ1Y3Rvcj17fSxuLmNvbnN0cnVjdG9yW3NdPWZ1bmN0aW9uKCl7cmV0dXJuIG59LG4uZmxhZ3M9IiIsbltkXT0vLi9bZF0pLG4uZXhlYz1mdW5jdGlvbigpe3JldHVybiBlPSEwLG51bGx9LG5bZF0oIiIpLCFlfSkpO2lmKCFwfHwhaHx8InJlcGxhY2UiPT09dCYmIXV8fCJzcGxpdCI9PT10JiYhbCl7dmFyIHY9Ly4vW2RdLGc9bihkLCIiW3RdLChmdW5jdGlvbih0LGUsbixyLG8pe3JldHVybiBlLmV4ZWM9PT1jP3AmJiFvP3tkb25lOiEwLHZhbHVlOnYuY2FsbChlLG4scil9Ontkb25lOiEwLHZhbHVlOnQuY2FsbChuLGUscil9Ontkb25lOiExfX0pKSx5PWdbMF0sbT1nWzFdO28oU3RyaW5nLnByb3RvdHlwZSx0LHkpLG8oUmVnRXhwLnByb3RvdHlwZSxkLDI9PWU/ZnVuY3Rpb24odCxlKXtyZXR1cm4gbS5jYWxsKHQsdGhpcyxlKX06ZnVuY3Rpb24odCl7cmV0dXJuIG0uY2FsbCh0LHRoaXMpfSksZiYmcihSZWdFeHAucHJvdG90eXBlW2RdLCJzaGFtIiwhMCl9fX0sODA2NjU6ZnVuY3Rpb24odCxlLG4peyJ1c2Ugc3RyaWN0Ijt2YXIgcj1uKDYxOTkpLG89bigyNzg4NCksaT1uKDQ2MTMwKSxhPWZ1bmN0aW9uKHQsZSxuLGMscyx1LGwsZil7Zm9yKHZhciBkLHA9cyxoPTAsdj0hIWwmJmkobCxmLDMpO2g8Yzspe2lmKGggaW4gbil7aWYoZD12P3YobltoXSxoLGUpOm5baF0sdT4wJiZyKGQpKXA9YSh0LGUsZCxvKGQubGVuZ3RoKSxwLHUtMSktMTtlbHNle2lmKHA+PTkwMDcxOTkyNTQ3NDA5OTEpdGhyb3cgVHlwZUVycm9yKCJFeGNlZWQgdGhlIGFjY2VwdGFibGUgYXJyYXkgbGVuZ3RoIik7dFtwXT1kfXArK31oKyt9cmV0dXJuIHB9O3QuZXhwb3J0cz1hfSw0NzgxMjpmdW5jdGlvbih0LGUsbil7InVzZSBzdHJpY3QiO3ZhciByPW4oNjU2NzIpLG89big4OTU1OCksaT1uKDMyMTg3KTt0LmV4cG9ydHM9cnx8IWkoKGZ1bmN0aW9uKCl7dmFyIHQ9TWF0aC5yYW5kb20oKTtfX2RlZmluZVNldHRlcl9fLmNhbGwobnVsbCx0LChmdW5jdGlvbigpe30pKSxkZWxldGUgb1t0XX0pKX0sNTIxMjk6ZnVuY3Rpb24odCxlLG4pe3ZhciByPW4oMzIxODcpO3QuZXhwb3J0cz1mdW5jdGlvbih0KXtyZXR1cm4gcigoZnVuY3Rpb24oKXt2YXIgZT0iIlt0XSgnIicpO3JldHVybiBlIT09ZS50b0xvd2VyQ2FzZSgpfHxlLnNwbGl0KCciJykubGVuZ3RoPjN9KSl9fSw4NDc1NDpmdW5jdGlvbih0LGUsbil7dmFyIHI9bigzMjE4Nyksbz1uKDUwMDU1KTt0LmV4cG9ydHM9ZnVuY3Rpb24odCl7cmV0dXJuIHIoKGZ1bmN0aW9uKCl7cmV0dXJuISFvW3RdKCl8fCLigIvCheGgjiIhPSLigIvCheGgjiJbdF0oKXx8b1t0XS5uYW1lIT09dH0pKX19LDc0NTIwOmZ1bmN0aW9uKHQsZSxuKXt2YXIgcj1uKDMyMTg3KTt0LmV4cG9ydHM9IXIoKGZ1bmN0aW9uKCl7cmV0dXJuIE9iamVjdC5pc0V4dGVuc2libGUoT2JqZWN0LnByZXZlbnRFeHRlbnNpb25zKHt9KSl9KSl9LDczNzM5OmZ1bmN0aW9uKHQsZSxuKXsidXNlIHN0cmljdCI7dmFyIHI9big4NjQ3MCksbz1uKDEwNTkyKSxpPVtdLnNsaWNlLGE9e30sYz1mdW5jdGlvbih0LGUsbil7aWYoIShlIGluIGEpKXtmb3IodmFyIHI9W10sbz0wO288ZTtvKyspcltvXT0iYVsiK28rIl0iO2FbZV09RnVuY3Rpb24oIkMsYSIsInJldHVybiBuZXcgQygiK3Iuam9pbigiLCIpKyIpIil9cmV0dXJuIGFbZV0odCxuKX07dC5leHBvcnRzPUZ1bmN0aW9uLmJpbmR8fGZ1bmN0aW9uKHQpe3ZhciBlPXIodGhpcyksbj1pLmNhbGwoYXJndW1lbnRzLDEpLGE9ZnVuY3Rpb24oKXt2YXIgcj1uLmNvbmNhdChpLmNhbGwoYXJndW1lbnRzKSk7cmV0dXJuIHRoaXMgaW5zdGFuY2VvZiBhP2MoZSxyLmxlbmd0aCxyKTplLmFwcGx5KHQscil9O3JldHVybiBvKGUucHJvdG90eXBlKSYmKGEucHJvdG90eXBlPWUucHJvdG90eXBlKSxhfX0sNjY5MjA6ZnVuY3Rpb24odCxlLG4pe3ZhciByPW4oNzM4OTApLG89bigyMzcyNCkoImFzeW5jSXRlcmF0b3IiKTt0LmV4cG9ydHM9ZnVuY3Rpb24odCl7dmFyIGU9dFtvXTtyZXR1cm4gdm9pZCAwPT09ZT9yKHQpOmV9fSw3NzAxOmZ1bmN0aW9uKHQsZSxuKXt2YXIgcj1uKDU2MjM4KSxvPW4oODk1NTgpLGk9ZnVuY3Rpb24odCl7cmV0dXJuImZ1bmN0aW9uIj09dHlwZW9mIHQ/dDp2b2lkIDB9O3QuZXhwb3J0cz1mdW5jdGlvbih0LGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPDI/aShyW3RdKXx8aShvW3RdKTpyW3RdJiZyW3RdW2VdfHxvW3RdJiZvW3RdW2VdfX0sNzM4OTA6ZnVuY3Rpb24odCxlLG4pe3ZhciByPW4oNTk1OTEpLG89bigxMjM1KSxpPW4oMjM3MjQpKCJpdGVyYXRvciIpO3QuZXhwb3J0cz1mdW5jdGlvbih0KXtpZihudWxsIT10KXJldHVybiB0W2ldfHx0WyJAQGl0ZXJhdG9yIl18fG9bcih0KV19fSwzMTA3NDpmdW5jdGlvbih0LGUsbil7dmFyIHI9big4NzU3OSksbz1uKDczODkwKTt0LmV4cG9ydHM9ZnVuY3Rpb24odCl7dmFyIGU9byh0KTtpZigiZnVuY3Rpb24iIT10eXBlb2YgZSl0aHJvdyBUeXBlRXJyb3IoU3RyaW5nKHQpKyIgaXMgbm90IGl0ZXJhYmxlIik7cmV0dXJuIHIoZS5jYWxsKHQpKX19LDQxOTg5OmZ1bmN0aW9uKHQsZSxuKXt2YXIgcj1uKDY1NjcyKSxvPW4oMzEwNzQpO3QuZXhwb3J0cz1yP286ZnVuY3Rpb24odCl7cmV0dXJuIE1hcC5wcm90b3R5cGUuZW50cmllcy5jYWxsKHQpfX0sNDE0NzU6ZnVuY3Rpb24odCxlLG4pe3ZhciByPW4oNjU2NzIpLG89bigzMTA3NCk7dC5leHBvcnRzPXI/bzpmdW5jdGlvbih0KXtyZXR1cm4gU2V0LnByb3RvdHlwZS52YWx1ZXMuY2FsbCh0KX19LDg5NTU4OmZ1bmN0aW9uKHQsZSxuKXt2YXIgcj1mdW5jdGlvbih0KXtyZXR1cm4gdCYmdC5NYXRoPT1NYXRoJiZ0fTt0LmV4cG9ydHM9cigib2JqZWN0Ij09dHlwZW9mIGdsb2JhbFRoaXMmJmdsb2JhbFRoaXMpfHxyKCJvYmplY3QiPT10eXBlb2Ygd2luZG93JiZ3aW5kb3cpfHxyKCJvYmplY3QiPT10eXBlb2Ygc2VsZiYmc2VsZil8fHIoIm9iamVjdCI9PXR5cGVvZiBuLmcmJm4uZyl8fEZ1bmN0aW9uKCJyZXR1cm4gdGhpcyIpKCl9LDc2Mjk4OmZ1bmN0aW9uKHQpe3ZhciBlPXt9Lmhhc093blByb3BlcnR5O3QuZXhwb3J0cz1mdW5jdGlvbih0LG4pe3JldHVybiBlLmNhbGwodCxuKX19LDIzMDcwOmZ1bmN0aW9uKHQpe3QuZXhwb3J0cz17fX0sODM2MjA6ZnVuY3Rpb24odCxlLG4pe3ZhciByPW4oODk1NTgpO3QuZXhwb3J0cz1mdW5jdGlvbih0LGUpe3ZhciBuPXIuY29uc29sZTtuJiZuLmVycm9yJiYoMT09PWFyZ3VtZW50cy5sZW5ndGg/bi5lcnJvcih0KTpuLmVycm9yKHQsZSkpfX0sNTE1NzE6ZnVuY3Rpb24odCxlLG4pe3ZhciByPW4oNzcwMSk7dC5leHBvcnRzPXIoImRvY3VtZW50IiwiZG9jdW1lbnRFbGVtZW50Iil9LDYyNzk5OmZ1bmN0aW9uKHQsZSxuKXt2YXIgcj1uKDYyNTU2KSxvPW4oMzIxODcpLGk9bigxOTIzKTt0LmV4cG9ydHM9IXImJiFvKChmdW5jdGlvbigpe3JldHVybiA3IT1PYmplY3QuZGVmaW5lUHJvcGVydHkoaSgiZGl2IiksImEiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gN319KS5hfSkpfSw5MDcyNTpmdW5jdGlvbih0KXt2YXIgZT0xLzAsbj1NYXRoLmFicyxyPU1hdGgucG93LG89TWF0aC5mbG9vcixpPU1hdGgubG9nLGE9TWF0aC5MTjI7dC5leHBvcnRzPXtwYWNrOmZ1bmN0aW9uKHQsYyxzKXt2YXIgdSxsLGYsZD1uZXcgQXJyYXkocykscD04KnMtYy0xLGg9KDE8PHApLTEsdj1oPj4xLGc9MjM9PT1jP3IoMiwtMjQpLXIoMiwtNzcpOjAseT10PDB8fDA9PT10JiYxL3Q8MD8xOjAsbT0wO2ZvcigodD1uKHQpKSE9dHx8dD09PWU/KGw9dCE9dD8xOjAsdT1oKToodT1vKGkodCkvYSksdCooZj1yKDIsLXUpKTwxJiYodS0tLGYqPTIpLCh0Kz11K3Y+PTE/Zy9mOmcqcigyLDEtdikpKmY+PTImJih1KyssZi89MiksdSt2Pj1oPyhsPTAsdT1oKTp1K3Y+PTE/KGw9KHQqZi0xKSpyKDIsYyksdSs9dik6KGw9dCpyKDIsdi0xKSpyKDIsYyksdT0wKSk7Yz49ODtkW20rK109MjU1JmwsbC89MjU2LGMtPTgpO2Zvcih1PXU8PGN8bCxwKz1jO3A+MDtkW20rK109MjU1JnUsdS89MjU2LHAtPTgpO3JldHVybiBkWy0tbV18PTEyOCp5LGR9LHVucGFjazpmdW5jdGlvbih0LG4pe3ZhciBvLGk9dC5sZW5ndGgsYT04Kmktbi0xLGM9KDE8PGEpLTEscz1jPj4xLHU9YS03LGw9aS0xLGY9dFtsLS1dLGQ9MTI3JmY7Zm9yKGY+Pj03O3U+MDtkPTI1NipkK3RbbF0sbC0tLHUtPTgpO2ZvcihvPWQmKDE8PC11KS0xLGQ+Pj0tdSx1Kz1uO3U+MDtvPTI1NipvK3RbbF0sbC0tLHUtPTgpO2lmKDA9PT1kKWQ9MS1zO2Vsc2V7aWYoZD09PWMpcmV0dXJuIG8/TmFOOmY/LTEvMDplO28rPXIoMixuKSxkLT1zfXJldHVybihmPy0xOjEpKm8qcigyLGQtbil9fX0sMjQ5ODpmdW5jdGlvbih0LGUsbil7dmFyIHI9bigzMjE4Nyksbz1uKDI0NTk0KSxpPSIiLnNwbGl0O3QuZXhwb3J0cz1yKChmdW5jdGlvbigpe3JldHVybiFPYmplY3QoInoiKS5wcm9wZXJ0eUlzRW51bWVyYWJsZSgwKX0pKT9mdW5jdGlvbih0KXtyZXR1cm4iU3RyaW5nIj09byh0KT9pLmNhbGwodCwiIik6T2JqZWN0KHQpfTpPYmplY3R9LDMwMjcyOmZ1bmN0aW9uKHQsZSxuKXt2YXIgcj1uKDEwNTkyKSxvPW4oNzE4NDIpO3QuZXhwb3J0cz1mdW5jdGlvbih0LGUsbil7dmFyIGksYTtyZXR1cm4gbyYmImZ1bmN0aW9uIj09dHlwZW9mKGk9ZS5jb25zdHJ1Y3RvcikmJmkhPT1uJiZyKGE9aS5wcm90b3R5cGUpJiZhIT09bi5wcm90b3R5cGUmJm8odCxhKSx0fX0sNzY3NzM6ZnVuY3Rpb24odCxlLG4pe3ZhciByPW4oMzQ3NDEpLG89RnVuY3Rpb24udG9TdHJpbmc7ImZ1bmN0aW9uIiE9dHlwZW9mIHIuaW5zcGVjdFNvdXJjZSYmKHIuaW5zcGVjdFNvdXJjZT1mdW5jdGlvbih0KXtyZXR1cm4gby5jYWxsKHQpfSksdC5leHBvcnRzPXIuaW5zcGVjdFNvdXJjZX0sOTYwMzpmdW5jdGlvbih0LGUsbil7dmFyIHI9bigyMzA3MCksbz1uKDEwNTkyKSxpPW4oNzYyOTgpLGE9bigzNzYyMCkuZixjPW4oNjcyOSkscz1uKDc0NTIwKSx1PWMoIm1ldGEiKSxsPTAsZj1PYmplY3QuaXNFeHRlbnNpYmxlfHxmdW5jdGlvbigpe3JldHVybiEwfSxkPWZ1bmN0aW9uKHQpe2EodCx1LHt2YWx1ZTp7b2JqZWN0SUQ6Ik8iKyArK2wsd2Vha0RhdGE6e319fSl9LHA9dC5leHBvcnRzPXtSRVFVSVJFRDohMSxmYXN0S2V5OmZ1bmN0aW9uKHQsZSl7aWYoIW8odCkpcmV0dXJuInN5bWJvbCI9PXR5cGVvZiB0P3Q6KCJzdHJpbmciPT10eXBlb2YgdD8iUyI6IlAiKSt0O2lmKCFpKHQsdSkpe2lmKCFmKHQpKXJldHVybiJGIjtpZighZSlyZXR1cm4iRSI7ZCh0KX1yZXR1cm4gdFt1XS5vYmplY3RJRH0sZ2V0V2Vha0RhdGE6ZnVuY3Rpb24odCxlKXtpZighaSh0LHUpKXtpZighZih0KSlyZXR1cm4hMDtpZighZSlyZXR1cm4hMTtkKHQpfXJldHVybiB0W3VdLndlYWtEYXRhfSxvbkZyZWV6ZTpmdW5jdGlvbih0KXtyZXR1cm4gcyYmcC5SRVFVSVJFRCYmZih0KSYmIWkodCx1KSYmZCh0KSx0fX07clt1XT0hMH0sODk4Mjc6ZnVuY3Rpb24odCxlLG4pe3ZhciByLG8saSxhPW4oMTk1OTEpLGM9big4OTU1OCkscz1uKDEwNTkyKSx1PW4oNjY5NzEpLGw9big3NjI5OCksZj1uKDgzMTk3KSxkPW4oMjMwNzApLHA9Yy5XZWFrTWFwO2lmKGEpe3ZhciBoPW5ldyBwLHY9aC5nZXQsZz1oLmhhcyx5PWguc2V0O3I9ZnVuY3Rpb24odCxlKXtyZXR1cm4geS5jYWxsKGgsdCxlKSxlfSxvPWZ1bmN0aW9uKHQpe3JldHVybiB2LmNhbGwoaCx0KXx8e319LGk9ZnVuY3Rpb24odCl7cmV0dXJuIGcuY2FsbChoLHQpfX1lbHNle3ZhciBtPWYoInN0YXRlIik7ZFttXT0hMCxyPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHUodCxtLGUpLGV9LG89ZnVuY3Rpb24odCl7cmV0dXJuIGwodCxtKT90W21dOnt9fSxpPWZ1bmN0aW9uKHQpe3JldHVybiBsKHQsbSl9fXQuZXhwb3J0cz17c2V0OnIsZ2V0Om8saGFzOmksZW5mb3JjZTpmdW5jdGlvbih0KXtyZXR1cm4gaSh0KT9vKHQpOnIodCx7fSl9LGdldHRlckZvcjpmdW5jdGlvbih0KXtyZXR1cm4gZnVuY3Rpb24oZSl7dmFyIG47aWYoIXMoZSl8fChuPW8oZSkpLnR5cGUhPT10KXRocm93IFR5cGVFcnJvcigiSW5jb21wYXRpYmxlIHJlY2VpdmVyLCAiK3QrIiByZXF1aXJlZCIpO3JldHVybiBufX19fSw0NDk4NDpmdW5jdGlvbih0LGUsbil7dmFyIHI9bigyMzcyNCksbz1uKDEyMzUpLGk9cigiaXRlcmF0b3IiKSxhPUFycmF5LnByb3RvdHlwZTt0LmV4cG9ydHM9ZnVuY3Rpb24odCl7cmV0dXJuIHZvaWQgMCE9PXQmJihvLkFycmF5PT09dHx8YVtpXT09PXQpfX0sNjE5OTpmdW5jdGlvbih0LGUsbil7dmFyIHI9bigyNDU5NCk7dC5leHBvcnRzPUFycmF5LmlzQXJyYXl8fGZ1bmN0aW9uKHQpe3JldHVybiJBcnJheSI9PXIodCl9fSw2NDUwNDpmdW5jdGlvbih0LGUsbil7dmFyIHI9bigzMjE4Nyksbz0vI3xcLnByb3RvdHlwZVwuLyxpPWZ1bmN0aW9uKHQsZSl7dmFyIG49Y1thKHQpXTtyZXR1cm4gbj09dXx8biE9cyYmKCJmdW5jdGlvbiI9PXR5cGVvZiBlP3IoZSk6ISFlKX0sYT1pLm5vcm1hbGl6ZT1mdW5jdGlvbih0KXtyZXR1cm4gU3RyaW5nKHQpLnJlcGxhY2UobywiLiIpLnRvTG93ZXJDYXNlKCl9LGM9aS5kYXRhPXt9LHM9aS5OQVRJVkU9Ik4iLHU9aS5QT0xZRklMTD0iUCI7dC5leHBvcnRzPWl9LDM4MjU3OmZ1bmN0aW9uKHQsZSxuKXt2YXIgcj1uKDEwNTkyKSxvPU1hdGguZmxvb3I7dC5leHBvcnRzPWZ1bmN0aW9uKHQpe3JldHVybiFyKHQpJiZpc0Zpbml0ZSh0KSYmbyh0KT09PXR9fSwyMTIzMTpmdW5jdGlvbih0LGUsbil7dmFyIHI9bigzOTQ3Nik7dC5leHBvcnRzPS8oaXBob25lfGlwb2R8aXBhZCkuKmFwcGxld2Via2l0L2kudGVzdChyKX0sMTA1OTI6ZnVuY3Rpb24odCl7dC5leHBvcnRzPWZ1bmN0aW9uKHQpe3JldHVybiJvYmplY3QiPT10eXBlb2YgdD9udWxsIT09dDoiZnVuY3Rpb24iPT10eXBlb2YgdH19LDY1NjcyOmZ1bmN0aW9uKHQpe3QuZXhwb3J0cz0hMX0sNDMyMjM6ZnVuY3Rpb24odCxlLG4pe3ZhciByPW4oMTA1OTIpLG89bigyNDU5NCksaT1uKDIzNzI0KSgibWF0Y2giKTt0LmV4cG9ydHM9ZnVuY3Rpb24odCl7dmFyIGU7cmV0dXJuIHIodCkmJih2b2lkIDAhPT0oZT10W2ldKT8hIWU6IlJlZ0V4cCI9PW8odCkpfX0sNDEzMzQ6ZnVuY3Rpb24odCxlLG4pe3ZhciByPW4oODc1NzkpLG89big0NDk4NCksaT1uKDI3ODg0KSxhPW4oNDYxMzApLGM9big3Mzg5MCkscz1uKDEyMjc4KSx1PWZ1bmN0aW9uKHQsZSl7dGhpcy5zdG9wcGVkPXQsdGhpcy5yZXN1bHQ9ZX07KHQuZXhwb3J0cz1mdW5jdGlvbih0LGUsbixsLGYpe3ZhciBkLHAsaCx2LGcseSxtLGI9YShlLG4sbD8yOjEpO2lmKGYpZD10O2Vsc2V7aWYoImZ1bmN0aW9uIiE9dHlwZW9mKHA9Yyh0KSkpdGhyb3cgVHlwZUVycm9yKCJUYXJnZXQgaXMgbm90IGl0ZXJhYmxlIik7aWYobyhwKSl7Zm9yKGg9MCx2PWkodC5sZW5ndGgpO3Y+aDtoKyspaWYoKGc9bD9iKHIobT10W2hdKVswXSxtWzFdKTpiKHRbaF0pKSYmZyBpbnN0YW5jZW9mIHUpcmV0dXJuIGc7cmV0dXJuIG5ldyB1KCExKX1kPXAuY2FsbCh0KX1mb3IoeT1kLm5leHQ7IShtPXkuY2FsbChkKSkuZG9uZTspaWYoIm9iamVjdCI9PXR5cGVvZihnPXMoZCxiLG0udmFsdWUsbCkpJiZnJiZnIGluc3RhbmNlb2YgdSlyZXR1cm4gZztyZXR1cm4gbmV3IHUoITEpfSkuc3RvcD1mdW5jdGlvbih0KXtyZXR1cm4gbmV3IHUoITAsdCl9fSw2NDE3NjpmdW5jdGlvbih0LGUsbil7InVzZSBzdHJpY3QiO3ZhciByLG8saSxhPW4oNjQ5NjUpLGM9big2Njk3MSkscz1uKDc2Mjk4KSx1PW4oMjM3MjQpLGw9big2NTY3MiksZj11KCJpdGVyYXRvciIpLGQ9ITE7W10ua2V5cyYmKCJuZXh0ImluKGk9W10ua2V5cygpKT8obz1hKGEoaSkpKSE9PU9iamVjdC5wcm90b3R5cGUmJihyPW8pOmQ9ITApLG51bGw9PXImJihyPXt9KSxsfHxzKHIsZil8fGMocixmLChmdW5jdGlvbigpe3JldHVybiB0aGlzfSkpLHQuZXhwb3J0cz17SXRlcmF0b3JQcm90b3R5cGU6cixCVUdHWV9TQUZBUklfSVRFUkFUT1JTOmR9fSwxMjM1OmZ1bmN0aW9uKHQpe3QuZXhwb3J0cz17fX0sNDc5Mjc6ZnVuY3Rpb24odCxlLG4peyJ1c2Ugc3RyaWN0Ijt2YXIgcj1uKDg3NTc5KTt0LmV4cG9ydHM9ZnVuY3Rpb24odCxlKXt2YXIgbixvPXIodGhpcyksaT1hcmd1bWVudHMubGVuZ3RoPjI/YXJndW1lbnRzWzJdOnZvaWQgMDtpZigiZnVuY3Rpb24iIT10eXBlb2YgZSYmImZ1bmN0aW9uIiE9dHlwZW9mIGkpdGhyb3cgVHlwZUVycm9yKCJBdCBsZWFzdCBvbmUgY2FsbGJhY2sgcmVxdWlyZWQiKTtyZXR1cm4gby5oYXModCk/KG49by5nZXQodCksImZ1bmN0aW9uIj09dHlwZW9mIGUmJihuPWUobiksby5zZXQodCxuKSkpOiJmdW5jdGlvbiI9PXR5cGVvZiBpJiYobj1pKCksby5zZXQodCxuKSksbn19LDcyOTcwOmZ1bmN0aW9uKHQpe3ZhciBlPU1hdGguZXhwbTEsbj1NYXRoLmV4cDt0LmV4cG9ydHM9IWV8fGUoMTApPjIyMDI1LjQ2NTc5NDgwNjcxOHx8ZSgxMCk8MjIwMjUuNDY1Nzk0ODA2NzE4fHwtMmUtMTchPWUoLTJlLTE3KT9mdW5jdGlvbih0KXtyZXR1cm4gMD09KHQ9K3QpP3Q6dD4tMWUtNiYmdDwxZS02P3QrdCp0LzI6bih0KS0xfTplfSw1MzI1MTpmdW5jdGlvbih0LGUsbil7dmFyIHI9bigzODc4Nyksbz1NYXRoLmFicyxpPU1hdGgucG93LGE9aSgyLC01MiksYz1pKDIsLTIzKSxzPWkoMiwxMjcpKigyLWMpLHU9aSgyLC0xMjYpO3QuZXhwb3J0cz1NYXRoLmZyb3VuZHx8ZnVuY3Rpb24odCl7dmFyIGUsbixpPW8odCksbD1yKHQpO3JldHVybiBpPHU/bCooaS91L2MrMS9hLTEvYSkqdSpjOihuPShlPSgxK2MvYSkqaSktKGUtaSkpPnN8fG4hPW4/bCooMS8wKTpsKm59fSwyMTkzMjpmdW5jdGlvbih0KXt2YXIgZT1NYXRoLmxvZzt0LmV4cG9ydHM9TWF0aC5sb2cxcHx8ZnVuY3Rpb24odCl7cmV0dXJuKHQ9K3QpPi0xZS04JiZ0PDFlLTg/dC10KnQvMjplKDErdCl9fSw3NzQyOmZ1bmN0aW9uKHQpe3QuZXhwb3J0cz1NYXRoLnNjYWxlfHxmdW5jdGlvbih0LGUsbixyLG8pe3JldHVybiAwPT09YXJndW1lbnRzLmxlbmd0aHx8dCE9dHx8ZSE9ZXx8biE9bnx8ciE9cnx8byE9bz9OYU46dD09PTEvMHx8dD09PS0xLzA/dDoodC1lKSooby1yKS8obi1lKStyfX0sMzg3ODc6ZnVuY3Rpb24odCl7dC5leHBvcnRzPU1hdGguc2lnbnx8ZnVuY3Rpb24odCl7cmV0dXJuIDA9PSh0PSt0KXx8dCE9dD90OnQ8MD8tMToxfX0sNjU1NTU6ZnVuY3Rpb24odCxlLG4pe3ZhciByLG8saSxhLGMscyx1LGwsZj1uKDg5NTU4KSxkPW4oOTcyNTcpLmYscD1uKDI0NTk0KSxoPW4oMjE3NDQpLnNldCx2PW4oMjEyMzEpLGc9Zi5NdXRhdGlvbk9ic2VydmVyfHxmLldlYktpdE11dGF0aW9uT2JzZXJ2ZXIseT1mLnByb2Nlc3MsbT1mLlByb21pc2UsYj0icHJvY2VzcyI9PXAoeSkseD1kKGYsInF1ZXVlTWljcm90YXNrIiksdz14JiZ4LnZhbHVlO3d8fChyPWZ1bmN0aW9uKCl7dmFyIHQsZTtmb3IoYiYmKHQ9eS5kb21haW4pJiZ0LmV4aXQoKTtvOyl7ZT1vLmZuLG89by5uZXh0O3RyeXtlKCl9Y2F0Y2godCl7dGhyb3cgbz9hKCk6aT12b2lkIDAsdH19aT12b2lkIDAsdCYmdC5lbnRlcigpfSxiP2E9ZnVuY3Rpb24oKXt5Lm5leHRUaWNrKHIpfTpnJiYhdj8oYz0hMCxzPWRvY3VtZW50LmNyZWF0ZVRleHROb2RlKCIiKSxuZXcgZyhyKS5vYnNlcnZlKHMse2NoYXJhY3RlckRhdGE6ITB9KSxhPWZ1bmN0aW9uKCl7cy5kYXRhPWM9IWN9KTptJiZtLnJlc29sdmU/KHU9bS5yZXNvbHZlKHZvaWQgMCksbD11LnRoZW4sYT1mdW5jdGlvbigpe2wuY2FsbCh1LHIpfSk6YT1mdW5jdGlvbigpe2guY2FsbChmLHIpfSksdC5leHBvcnRzPXd8fGZ1bmN0aW9uKHQpe3ZhciBlPXtmbjp0LG5leHQ6dm9pZCAwfTtpJiYoaS5uZXh0PWUpLG98fChvPWUsYSgpKSxpPWV9fSwzOTQ1NzpmdW5jdGlvbih0LGUsbil7dmFyIHI9big4OTU1OCk7dC5leHBvcnRzPXIuUHJvbWlzZX0sOTAxNDpmdW5jdGlvbih0LGUsbil7dmFyIHI9bigzMjE4Nyk7dC5leHBvcnRzPSEhT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyYmIXIoKGZ1bmN0aW9uKCl7cmV0dXJuIVN0cmluZyhTeW1ib2woKSl9KSl9LDU3NTk3OmZ1bmN0aW9uKHQsZSxuKXt2YXIgcj1uKDMyMTg3KSxvPW4oMjM3MjQpLGk9big2NTY3MiksYT1vKCJpdGVyYXRvciIpO3QuZXhwb3J0cz0hcigoZnVuY3Rpb24oKXt2YXIgdD1uZXcgVVJMKCJiP2E9MSZiPTImYz0zIiwiaHR0cDovL2EiKSxlPXQuc2VhcmNoUGFyYW1zLG49IiI7cmV0dXJuIHQucGF0aG5hbWU9ImMlMjBkIixlLmZvckVhY2goKGZ1bmN0aW9uKHQscil7ZS5kZWxldGUoImIiKSxuKz1yK3R9KSksaSYmIXQudG9KU09OfHwhZS5zb3J0fHwiaHR0cDovL2EvYyUyMGQ/YT0xJmM9MyIhPT10LmhyZWZ8fCIzIiE9PWUuZ2V0KCJjIil8fCJhPTEiIT09U3RyaW5nKG5ldyBVUkxTZWFyY2hQYXJhbXMoIj9hPTEiKSl8fCFlW2FdfHwiYSIhPT1uZXcgVVJMKCJodHRwczovL2FAYiIpLnVzZXJuYW1lfHwiYiIhPT1uZXcgVVJMU2VhcmNoUGFyYW1zKG5ldyBVUkxTZWFyY2hQYXJhbXMoImE9YiIpKS5nZXQoImEiKXx8InhuLS1lMWF5YmMiIT09bmV3IFVSTCgiaHR0cDovL9GC0LXRgdGCIikuaG9zdHx8IiMlRDAlQjEiIT09bmV3IFVSTCgiaHR0cDovL2Ej0LEiKS5oYXNofHwiYTFjMyIhPT1ufHwieCIhPT1uZXcgVVJMKCJodHRwOi8veCIsdm9pZCAwKS5ob3N0fSkpfSwxOTU5MTpmdW5jdGlvbih0LGUsbil7dmFyIHI9big4OTU1OCksbz1uKDc2NzczKSxpPXIuV2Vha01hcDt0LmV4cG9ydHM9ImZ1bmN0aW9uIj09dHlwZW9mIGkmJi9uYXRpdmUgY29kZS8udGVzdChvKGkpKX0sODMwODM6ZnVuY3Rpb24odCxlLG4peyJ1c2Ugc3RyaWN0Ijt2YXIgcj1uKDg2NDcwKSxvPWZ1bmN0aW9uKHQpe3ZhciBlLG47dGhpcy5wcm9taXNlPW5ldyB0KChmdW5jdGlvbih0LHIpe2lmKHZvaWQgMCE9PWV8fHZvaWQgMCE9PW4pdGhyb3cgVHlwZUVycm9yKCJCYWQgUHJvbWlzZSBjb25zdHJ1Y3RvciIpO2U9dCxuPXJ9KSksdGhpcy5yZXNvbHZlPXIoZSksdGhpcy5yZWplY3Q9cihuKX07dC5leHBvcnRzLmY9ZnVuY3Rpb24odCl7cmV0dXJuIG5ldyBvKHQpfX0sOTkzNDY6ZnVuY3Rpb24odCxlLG4pe3ZhciByPW4oNDMyMjMpO3QuZXhwb3J0cz1mdW5jdGlvbih0KXtpZihyKHQpKXRocm93IFR5cGVFcnJvcigiVGhlIG1ldGhvZCBkb2Vzbid0IGFjY2VwdCByZWd1bGFyIGV4cHJlc3Npb25zIik7cmV0dXJuIHR9fSw4OTU0MjpmdW5jdGlvbih0LGUsbil7dmFyIHI9big4OTU1OCkuaXNGaW5pdGU7dC5leHBvcnRzPU51bWJlci5pc0Zpbml0ZXx8ZnVuY3Rpb24odCl7cmV0dXJuIm51bWJlciI9PXR5cGVvZiB0JiZyKHQpfX0sNzg2ODU6ZnVuY3Rpb24odCxlLG4peyJ1c2Ugc3RyaWN0Ijt2YXIgcj1uKDYyNTU2KSxvPW4oMzIxODcpLGk9bigyNTUwNyksYT1uKDU2OTkxKSxjPW4oNDE2MjgpLHM9bigxOTIwOSksdT1uKDI0OTgpLGw9T2JqZWN0LmFzc2lnbixmPU9iamVjdC5kZWZpbmVQcm9wZXJ0eTt0LmV4cG9ydHM9IWx8fG8oKGZ1bmN0aW9uKCl7aWYociYmMSE9PWwoe2I6MX0sbChmKHt9LCJhIix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtmKHRoaXMsImIiLHt2YWx1ZTozLGVudW1lcmFibGU6ITF9KX19KSx7YjoyfSkpLmIpcmV0dXJuITA7dmFyIHQ9e30sZT17fSxuPVN5bWJvbCgpLG89ImFiY2RlZmdoaWprbG1ub3BxcnN0IjtyZXR1cm4gdFtuXT03LG8uc3BsaXQoIiIpLmZvckVhY2goKGZ1bmN0aW9uKHQpe2VbdF09dH0pKSw3IT1sKHt9LHQpW25dfHxpKGwoe30sZSkpLmpvaW4oIiIpIT1vfSkpP2Z1bmN0aW9uKHQsZSl7Zm9yKHZhciBuPXModCksbz1hcmd1bWVudHMubGVuZ3RoLGw9MSxmPWEuZixkPWMuZjtvPmw7KWZvcih2YXIgcCxoPXUoYXJndW1lbnRzW2wrK10pLHY9Zj9pKGgpLmNvbmNhdChmKGgpKTppKGgpLGc9di5sZW5ndGgseT0wO2c+eTspcD12W3krK10sciYmIWQuY2FsbChoLHApfHwobltwXT1oW3BdKTtyZXR1cm4gbn06bH0sNTA4Njg6ZnVuY3Rpb24odCxlLG4pe3ZhciByPW4oODc1NzkpLG89big4NjQwMSksaT1uKDU5MTM1KSxhPW4oMjMwNzApLGM9big1MTU3MSkscz1uKDE5MjMpLHU9big4MzE5NykoIklFX1BST1RPIiksbD1mdW5jdGlvbigpe30sZj1mdW5jdGlvbigpe3ZhciB0LGU9cygiaWZyYW1lIiksbj1pLmxlbmd0aDtmb3IoZS5zdHlsZS5kaXNwbGF5PSJub25lIixjLmFwcGVuZENoaWxkKGUpLGUuc3JjPVN0cmluZygiamF2YXNjcmlwdDoiKSwodD1lLmNvbnRlbnRXaW5kb3cuZG9jdW1lbnQpLm9wZW4oKSx0LndyaXRlKCI8c2NyaXB0PmRvY3VtZW50LkY9T2JqZWN0PFwvc2NyaXB0PiIpLHQuY2xvc2UoKSxmPXQuRjtuLS07KWRlbGV0ZSBmLnByb3RvdHlwZVtpW25dXTtyZXR1cm4gZigpfTt0LmV4cG9ydHM9T2JqZWN0LmNyZWF0ZXx8ZnVuY3Rpb24odCxlKXt2YXIgbjtyZXR1cm4gbnVsbCE9PXQ/KGwucHJvdG90eXBlPXIodCksbj1uZXcgbCxsLnByb3RvdHlwZT1udWxsLG5bdV09dCk6bj1mKCksdm9pZCAwPT09ZT9uOm8obixlKX0sYVt1XT0hMH0sODY0MDE6ZnVuY3Rpb24odCxlLG4pe3ZhciByPW4oNjI1NTYpLG89bigzNzYyMCksaT1uKDg3NTc5KSxhPW4oMjU1MDcpO3QuZXhwb3J0cz1yP09iamVjdC5kZWZpbmVQcm9wZXJ0aWVzOmZ1bmN0aW9uKHQsZSl7aSh0KTtmb3IodmFyIG4scj1hKGUpLGM9ci5sZW5ndGgscz0wO2M+czspby5mKHQsbj1yW3MrK10sZVtuXSk7cmV0dXJuIHR9fSwzNzYyMDpmdW5jdGlvbih0LGUsbil7dmFyIHI9big2MjU1Niksbz1uKDYyNzk5KSxpPW4oODc1NzkpLGE9big1MzQ5OCksYz1PYmplY3QuZGVmaW5lUHJvcGVydHk7ZS5mPXI/YzpmdW5jdGlvbih0LGUsbil7aWYoaSh0KSxlPWEoZSwhMCksaShuKSxvKXRyeXtyZXR1cm4gYyh0LGUsbil9Y2F0Y2godCl7fWlmKCJnZXQiaW4gbnx8InNldCJpbiBuKXRocm93IFR5cGVFcnJvcigiQWNjZXNzb3JzIG5vdCBzdXBwb3J0ZWQiKTtyZXR1cm4idmFsdWUiaW4gbiYmKHRbZV09bi52YWx1ZSksdH19LDk3MjU3OmZ1bmN0aW9uKHQsZSxuKXt2YXIgcj1uKDYyNTU2KSxvPW4oNDE2MjgpLGk9bigxNDIwOSksYT1uKDk1NzMpLGM9big1MzQ5OCkscz1uKDc2Mjk4KSx1PW4oNjI3OTkpLGw9T2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcjtlLmY9cj9sOmZ1bmN0aW9uKHQsZSl7aWYodD1hKHQpLGU9YyhlLCEwKSx1KXRyeXtyZXR1cm4gbCh0LGUpfWNhdGNoKHQpe31pZihzKHQsZSkpcmV0dXJuIGkoIW8uZi5jYWxsKHQsZSksdFtlXSl9fSwyNjkzNzpmdW5jdGlvbih0LGUsbil7dmFyIHI9big5NTczKSxvPW4oMTMzMzQpLmYsaT17fS50b1N0cmluZyxhPSJvYmplY3QiPT10eXBlb2Ygd2luZG93JiZ3aW5kb3cmJk9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzP09iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKHdpbmRvdyk6W107dC5leHBvcnRzLmY9ZnVuY3Rpb24odCl7cmV0dXJuIGEmJiJbb2JqZWN0IFdpbmRvd10iPT1pLmNhbGwodCk/ZnVuY3Rpb24odCl7dHJ5e3JldHVybiBvKHQpfWNhdGNoKHQpe3JldHVybiBhLnNsaWNlKCl9fSh0KTpvKHIodCkpfX0sMTMzMzQ6ZnVuY3Rpb24odCxlLG4pe3ZhciByPW4oNDE3Niksbz1uKDU5MTM1KS5jb25jYXQoImxlbmd0aCIsInByb3RvdHlwZSIpO2UuZj1PYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lc3x8ZnVuY3Rpb24odCl7cmV0dXJuIHIodCxvKX19LDU2OTkxOmZ1bmN0aW9uKHQsZSl7ZS5mPU9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHN9LDY0OTY1OmZ1bmN0aW9uKHQsZSxuKXt2YXIgcj1uKDc2Mjk4KSxvPW4oMTkyMDkpLGk9big4MzE5NyksYT1uKDcxNjA4KSxjPWkoIklFX1BST1RPIikscz1PYmplY3QucHJvdG90eXBlO3QuZXhwb3J0cz1hP09iamVjdC5nZXRQcm90b3R5cGVPZjpmdW5jdGlvbih0KXtyZXR1cm4gdD1vKHQpLHIodCxjKT90W2NdOiJmdW5jdGlvbiI9PXR5cGVvZiB0LmNvbnN0cnVjdG9yJiZ0IGluc3RhbmNlb2YgdC5jb25zdHJ1Y3Rvcj90LmNvbnN0cnVjdG9yLnByb3RvdHlwZTp0IGluc3RhbmNlb2YgT2JqZWN0P3M6bnVsbH19LDg2NDAzOmZ1bmN0aW9uKHQsZSxuKXsidXNlIHN0cmljdCI7dmFyIHI9big4OTgyNyksbz1uKDcxMjAxKSxpPW4oNzYyOTgpLGE9bigyNTUwNyksYz1uKDE5MjA5KSxzPSJPYmplY3QgSXRlcmF0b3IiLHU9ci5zZXQsbD1yLmdldHRlckZvcihzKTt0LmV4cG9ydHM9bygoZnVuY3Rpb24odCxlKXt2YXIgbj1jKHQpO3UodGhpcyx7dHlwZTpzLG1vZGU6ZSxvYmplY3Q6bixrZXlzOmEobiksaW5kZXg6MH0pfSksIk9iamVjdCIsKGZ1bmN0aW9uKCl7Zm9yKHZhciB0PWwodGhpcyksZT10LmtleXM7Oyl7aWYobnVsbD09PWV8fHQuaW5kZXg+PWUubGVuZ3RoKXJldHVybiB0Lm9iamVjdD10LmtleXM9bnVsbCx7dmFsdWU6dm9pZCAwLGRvbmU6ITB9O3ZhciBuPWVbdC5pbmRleCsrXSxyPXQub2JqZWN0O2lmKGkocixuKSl7c3dpdGNoKHQubW9kZSl7Y2FzZSJrZXlzIjpyZXR1cm57dmFsdWU6bixkb25lOiExfTtjYXNlInZhbHVlcyI6cmV0dXJue3ZhbHVlOnJbbl0sZG9uZTohMX19cmV0dXJue3ZhbHVlOltuLHJbbl1dLGRvbmU6ITF9fX19KSl9LDQxNzY6ZnVuY3Rpb24odCxlLG4pe3ZhciByPW4oNzYyOTgpLG89big5NTczKSxpPW4oODU4MDMpLmluZGV4T2YsYT1uKDIzMDcwKTt0LmV4cG9ydHM9ZnVuY3Rpb24odCxlKXt2YXIgbixjPW8odCkscz0wLHU9W107Zm9yKG4gaW4gYykhcihhLG4pJiZyKGMsbikmJnUucHVzaChuKTtmb3IoO2UubGVuZ3RoPnM7KXIoYyxuPWVbcysrXSkmJih+aSh1LG4pfHx1LnB1c2gobikpO3JldHVybiB1fX0sMjU1MDc6ZnVuY3Rpb24odCxlLG4pe3ZhciByPW4oNDE3Niksbz1uKDU5MTM1KTt0LmV4cG9ydHM9T2JqZWN0LmtleXN8fGZ1bmN0aW9uKHQpe3JldHVybiByKHQsbyl9fSw0MTYyODpmdW5jdGlvbih0LGUpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj17fS5wcm9wZXJ0eUlzRW51bWVyYWJsZSxyPU9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3Isbz1yJiYhbi5jYWxsKHsxOjJ9LDEpO2UuZj1vP2Z1bmN0aW9uKHQpe3ZhciBlPXIodGhpcyx0KTtyZXR1cm4hIWUmJmUuZW51bWVyYWJsZX06bn0sNzE4NDI6ZnVuY3Rpb24odCxlLG4pe3ZhciByPW4oODc1NzkpLG89big3OTg2MSk7dC5leHBvcnRzPU9iamVjdC5zZXRQcm90b3R5cGVPZnx8KCJfX3Byb3RvX18iaW57fT9mdW5jdGlvbigpe3ZhciB0LGU9ITEsbj17fTt0cnl7KHQ9T2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihPYmplY3QucHJvdG90eXBlLCJfX3Byb3RvX18iKS5zZXQpLmNhbGwobixbXSksZT1uIGluc3RhbmNlb2YgQXJyYXl9Y2F0Y2godCl7fXJldHVybiBmdW5jdGlvbihuLGkpe3JldHVybiByKG4pLG8oaSksZT90LmNhbGwobixpKTpuLl9fcHJvdG9fXz1pLG59fSgpOnZvaWQgMCl9LDM1Njc6ZnVuY3Rpb24odCxlLG4pe3ZhciByPW4oNjI1NTYpLG89bigyNTUwNyksaT1uKDk1NzMpLGE9big0MTYyOCkuZixjPWZ1bmN0aW9uKHQpe3JldHVybiBmdW5jdGlvbihlKXtmb3IodmFyIG4sYz1pKGUpLHM9byhjKSx1PXMubGVuZ3RoLGw9MCxmPVtdO3U+bDspbj1zW2wrK10sciYmIWEuY2FsbChjLG4pfHxmLnB1c2godD9bbixjW25dXTpjW25dKTtyZXR1cm4gZn19O3QuZXhwb3J0cz17ZW50cmllczpjKCEwKSx2YWx1ZXM6YyghMSl9fSwxOTc1ODpmdW5jdGlvbih0LGUsbil7InVzZSBzdHJpY3QiO3ZhciByPW4oOTA2MTMpLG89big1OTU5MSk7dC5leHBvcnRzPXI/e30udG9TdHJpbmc6ZnVuY3Rpb24oKXtyZXR1cm4iW29iamVjdCAiK28odGhpcykrIl0ifX0sMjQ0MTU6ZnVuY3Rpb24odCxlLG4pe3ZhciByPW4oNzcwMSksbz1uKDEzMzM0KSxpPW4oNTY5OTEpLGE9big4NzU3OSk7dC5leHBvcnRzPXIoIlJlZmxlY3QiLCJvd25LZXlzIil8fGZ1bmN0aW9uKHQpe3ZhciBlPW8uZihhKHQpKSxuPWkuZjtyZXR1cm4gbj9lLmNvbmNhdChuKHQpKTplfX0sMjQ0OTc6ZnVuY3Rpb24odCxlLG4pe3ZhciByPW4oODk1NTgpLG89big4MjM1MCkudHJpbSxpPW4oNTAwNTUpLGE9ci5wYXJzZUZsb2F0LGM9MS9hKGkrIi0wIikhPS0xLzA7dC5leHBvcnRzPWM/ZnVuY3Rpb24odCl7dmFyIGU9byhTdHJpbmcodCkpLG49YShlKTtyZXR1cm4gMD09PW4mJiItIj09ZS5jaGFyQXQoMCk/LTA6bn06YX0sNzg0NjpmdW5jdGlvbih0LGUsbil7dmFyIHI9big4OTU1OCksbz1uKDgyMzUwKS50cmltLGk9big1MDA1NSksYT1yLnBhcnNlSW50LGM9L15bKy1dPzBbWHhdLyxzPTghPT1hKGkrIjA4Iil8fDIyIT09YShpKyIweDE2Iik7dC5leHBvcnRzPXM/ZnVuY3Rpb24odCxlKXt2YXIgbj1vKFN0cmluZyh0KSk7cmV0dXJuIGEobixlPj4+MHx8KGMudGVzdChuKT8xNjoxMCkpfTphfSw1NjIzODpmdW5jdGlvbih0LGUsbil7dmFyIHI9big4OTU1OCk7dC5leHBvcnRzPXJ9LDMxMTU6ZnVuY3Rpb24odCl7dC5leHBvcnRzPWZ1bmN0aW9uKHQpe3RyeXtyZXR1cm57ZXJyb3I6ITEsdmFsdWU6dCgpfX1jYXRjaCh0KXtyZXR1cm57ZXJyb3I6ITAsdmFsdWU6dH19fX0sNjMxMzQ6ZnVuY3Rpb24odCxlLG4pe3ZhciByPW4oODc1NzkpLG89bigxMDU5MiksaT1uKDgzMDgzKTt0LmV4cG9ydHM9ZnVuY3Rpb24odCxlKXtpZihyKHQpLG8oZSkmJmUuY29uc3RydWN0b3I9PT10KXJldHVybiBlO3ZhciBuPWkuZih0KTtyZXR1cm4oMCxuLnJlc29sdmUpKGUpLG4ucHJvbWlzZX19LDY5OTI3OmZ1bmN0aW9uKHQpeyJ1c2Ugc3RyaWN0Ijt2YXIgZT0yMTQ3NDgzNjQ3LG49L1teXDAtXHUwMDdFXS8scj0vWy5cdTMwMDJcdUZGMEVcdUZGNjFdL2csbz0iT3ZlcmZsb3c6IGlucHV0IG5lZWRzIHdpZGVyIGludGVnZXJzIHRvIHByb2Nlc3MiLGk9TWF0aC5mbG9vcixhPVN0cmluZy5mcm9tQ2hhckNvZGUsYz1mdW5jdGlvbih0KXtyZXR1cm4gdCsyMis3NSoodDwyNil9LHM9ZnVuY3Rpb24odCxlLG4pe3ZhciByPTA7Zm9yKHQ9bj9pKHQvNzAwKTp0Pj4xLHQrPWkodC9lKTt0PjQ1NTtyKz0zNil0PWkodC8zNSk7cmV0dXJuIGkociszNip0Lyh0KzM4KSl9LHU9ZnVuY3Rpb24odCl7dmFyIG49W107dD1mdW5jdGlvbih0KXtmb3IodmFyIGU9W10sbj0wLHI9dC5sZW5ndGg7bjxyOyl7dmFyIG89dC5jaGFyQ29kZUF0KG4rKyk7aWYobz49NTUyOTYmJm88PTU2MzE5JiZuPHIpe3ZhciBpPXQuY2hhckNvZGVBdChuKyspOzU2MzIwPT0oNjQ1MTImaSk/ZS5wdXNoKCgoMTAyMyZvKTw8MTApKygxMDIzJmkpKzY1NTM2KTooZS5wdXNoKG8pLG4tLSl9ZWxzZSBlLnB1c2gobyl9cmV0dXJuIGV9KHQpO3ZhciByLHUsbD10Lmxlbmd0aCxmPTEyOCxkPTAscD03Mjtmb3Iocj0wO3I8dC5sZW5ndGg7cisrKSh1PXRbcl0pPDEyOCYmbi5wdXNoKGEodSkpO3ZhciBoPW4ubGVuZ3RoLHY9aDtmb3IoaCYmbi5wdXNoKCItIik7djxsOyl7dmFyIGc9ZTtmb3Iocj0wO3I8dC5sZW5ndGg7cisrKSh1PXRbcl0pPj1mJiZ1PGcmJihnPXUpO3ZhciB5PXYrMTtpZihnLWY+aSgoZS1kKS95KSl0aHJvdyBSYW5nZUVycm9yKG8pO2ZvcihkKz0oZy1mKSp5LGY9ZyxyPTA7cjx0Lmxlbmd0aDtyKyspe2lmKCh1PXRbcl0pPGYmJisrZD5lKXRocm93IFJhbmdlRXJyb3Iobyk7aWYodT09Zil7Zm9yKHZhciBtPWQsYj0zNjs7Yis9MzYpe3ZhciB4PWI8PXA/MTpiPj1wKzI2PzI2OmItcDtpZihtPHgpYnJlYWs7dmFyIHc9bS14LEU9MzYteDtuLnB1c2goYShjKHgrdyVFKSkpLG09aSh3L0UpfW4ucHVzaChhKGMobSkpKSxwPXMoZCx5LHY9PWgpLGQ9MCwrK3Z9fSsrZCwrK2Z9cmV0dXJuIG4uam9pbigiIil9O3QuZXhwb3J0cz1mdW5jdGlvbih0KXt2YXIgZSxvLGk9W10sYT10LnRvTG93ZXJDYXNlKCkucmVwbGFjZShyLCIuIikuc3BsaXQoIi4iKTtmb3IoZT0wO2U8YS5sZW5ndGg7ZSsrKW89YVtlXSxpLnB1c2gobi50ZXN0KG8pPyJ4bi0tIit1KG8pOm8pO3JldHVybiBpLmpvaW4oIi4iKX19LDE5MjY6ZnVuY3Rpb24odCxlLG4pe3ZhciByPW4oOTI5MTMpO3QuZXhwb3J0cz1mdW5jdGlvbih0LGUsbil7Zm9yKHZhciBvIGluIGUpcih0LG8sZVtvXSxuKTtyZXR1cm4gdH19LDkyOTEzOmZ1bmN0aW9uKHQsZSxuKXt2YXIgcj1uKDg5NTU4KSxvPW4oNjY5NzEpLGk9big3NjI5OCksYT1uKDk4MjY5KSxjPW4oNzY3NzMpLHM9big4OTgyNyksdT1zLmdldCxsPXMuZW5mb3JjZSxmPVN0cmluZyhTdHJpbmcpLnNwbGl0KCJTdHJpbmciKTsodC5leHBvcnRzPWZ1bmN0aW9uKHQsZSxuLGMpe3ZhciBzPSEhYyYmISFjLnVuc2FmZSx1PSEhYyYmISFjLmVudW1lcmFibGUsZD0hIWMmJiEhYy5ub1RhcmdldEdldDsiZnVuY3Rpb24iPT10eXBlb2YgbiYmKCJzdHJpbmciIT10eXBlb2YgZXx8aShuLCJuYW1lIil8fG8obiwibmFtZSIsZSksbChuKS5zb3VyY2U9Zi5qb2luKCJzdHJpbmciPT10eXBlb2YgZT9lOiIiKSksdCE9PXI/KHM/IWQmJnRbZV0mJih1PSEwKTpkZWxldGUgdFtlXSx1P3RbZV09bjpvKHQsZSxuKSk6dT90W2VdPW46YShlLG4pfSkoRnVuY3Rpb24ucHJvdG90eXBlLCJ0b1N0cmluZyIsKGZ1bmN0aW9uKCl7cmV0dXJuImZ1bmN0aW9uIj09dHlwZW9mIHRoaXMmJnUodGhpcykuc291cmNlfHxjKHRoaXMpfSkpfSw3NzAyMDpmdW5jdGlvbih0LGUsbil7dmFyIHI9big5NDkwNiksbz1uKDU4NjA2KSxpPW4oNjIwNTQpKCJtZXRhZGF0YSIpLGE9aS5zdG9yZXx8KGkuc3RvcmU9bmV3IG8pLGM9ZnVuY3Rpb24odCxlLG4pe3ZhciBvPWEuZ2V0KHQpO2lmKCFvKXtpZighbilyZXR1cm47YS5zZXQodCxvPW5ldyByKX12YXIgaT1vLmdldChlKTtpZighaSl7aWYoIW4pcmV0dXJuO28uc2V0KGUsaT1uZXcgcil9cmV0dXJuIGl9O3QuZXhwb3J0cz17c3RvcmU6YSxnZXRNYXA6YyxoYXM6ZnVuY3Rpb24odCxlLG4pe3ZhciByPWMoZSxuLCExKTtyZXR1cm4gdm9pZCAwIT09ciYmci5oYXModCl9LGdldDpmdW5jdGlvbih0LGUsbil7dmFyIHI9YyhlLG4sITEpO3JldHVybiB2b2lkIDA9PT1yP3ZvaWQgMDpyLmdldCh0KX0sc2V0OmZ1bmN0aW9uKHQsZSxuLHIpe2MobixyLCEwKS5zZXQodCxlKX0sa2V5czpmdW5jdGlvbih0LGUpe3ZhciBuPWModCxlLCExKSxyPVtdO3JldHVybiBuJiZuLmZvckVhY2goKGZ1bmN0aW9uKHQsZSl7ci5wdXNoKGUpfSkpLHJ9LHRvS2V5OmZ1bmN0aW9uKHQpe3JldHVybiB2b2lkIDA9PT10fHwic3ltYm9sIj09dHlwZW9mIHQ/dDpTdHJpbmcodCl9fX0sMzU0NTU6ZnVuY3Rpb24odCxlLG4pe3ZhciByPW4oMjQ1OTQpLG89bigzODU5OCk7dC5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7dmFyIG49dC5leGVjO2lmKCJmdW5jdGlvbiI9PXR5cGVvZiBuKXt2YXIgaT1uLmNhbGwodCxlKTtpZigib2JqZWN0IiE9dHlwZW9mIGkpdGhyb3cgVHlwZUVycm9yKCJSZWdFeHAgZXhlYyBtZXRob2QgcmV0dXJuZWQgc29tZXRoaW5nIG90aGVyIHRoYW4gYW4gT2JqZWN0IG9yIG51bGwiKTtyZXR1cm4gaX1pZigiUmVnRXhwIiE9PXIodCkpdGhyb3cgVHlwZUVycm9yKCJSZWdFeHAjZXhlYyBjYWxsZWQgb24gaW5jb21wYXRpYmxlIHJlY2VpdmVyIik7cmV0dXJuIG8uY2FsbCh0LGUpfX0sMzg1OTg6ZnVuY3Rpb24odCxlLG4peyJ1c2Ugc3RyaWN0Ijt2YXIgcixvLGk9bigyNTQxOSksYT1SZWdFeHAucHJvdG90eXBlLmV4ZWMsYz1TdHJpbmcucHJvdG90eXBlLnJlcGxhY2Uscz1hLHU9KHI9L2EvLG89L2IqL2csYS5jYWxsKHIsImEiKSxhLmNhbGwobywiYSIpLDAhPT1yLmxhc3RJbmRleHx8MCE9PW8ubGFzdEluZGV4KSxsPXZvaWQgMCE9PS8oKT8/Ly5leGVjKCIiKVsxXTsodXx8bCkmJihzPWZ1bmN0aW9uKHQpe3ZhciBlLG4scixvLHM9dGhpcztyZXR1cm4gbCYmKG49bmV3IFJlZ0V4cCgiXiIrcy5zb3VyY2UrIiQoPyFcXHMpIixpLmNhbGwocykpKSx1JiYoZT1zLmxhc3RJbmRleCkscj1hLmNhbGwocyx0KSx1JiZyJiYocy5sYXN0SW5kZXg9cy5nbG9iYWw/ci5pbmRleCtyWzBdLmxlbmd0aDplKSxsJiZyJiZyLmxlbmd0aD4xJiZjLmNhbGwoclswXSxuLChmdW5jdGlvbigpe2ZvcihvPTE7bzxhcmd1bWVudHMubGVuZ3RoLTI7bysrKXZvaWQgMD09PWFyZ3VtZW50c1tvXSYmKHJbb109dm9pZCAwKX0pKSxyfSksdC5leHBvcnRzPXN9LDI1NDE5OmZ1bmN0aW9uKHQsZSxuKXsidXNlIHN0cmljdCI7dmFyIHI9big4NzU3OSk7dC5leHBvcnRzPWZ1bmN0aW9uKCl7dmFyIHQ9cih0aGlzKSxlPSIiO3JldHVybiB0Lmdsb2JhbCYmKGUrPSJnIiksdC5pZ25vcmVDYXNlJiYoZSs9ImkiKSx0Lm11bHRpbGluZSYmKGUrPSJtIiksdC5kb3RBbGwmJihlKz0icyIpLHQudW5pY29kZSYmKGUrPSJ1IiksdC5zdGlja3kmJihlKz0ieSIpLGV9fSw3MDEzMjpmdW5jdGlvbih0KXt0LmV4cG9ydHM9ZnVuY3Rpb24odCl7aWYobnVsbD09dCl0aHJvdyBUeXBlRXJyb3IoIkNhbid0IGNhbGwgbWV0aG9kIG9uICIrdCk7cmV0dXJuIHR9fSwzODE4OTpmdW5jdGlvbih0KXt0LmV4cG9ydHM9ZnVuY3Rpb24odCxlKXtyZXR1cm4gdD09PWV8fHQhPXQmJmUhPWV9fSw3NjQ4MjpmdW5jdGlvbih0KXt0LmV4cG9ydHM9T2JqZWN0LmlzfHxmdW5jdGlvbih0LGUpe3JldHVybiB0PT09ZT8wIT09dHx8MS90PT0xL2U6dCE9dCYmZSE9ZX19LDk4MjY5OmZ1bmN0aW9uKHQsZSxuKXt2YXIgcj1uKDg5NTU4KSxvPW4oNjY5NzEpO3QuZXhwb3J0cz1mdW5jdGlvbih0LGUpe3RyeXtvKHIsdCxlKX1jYXRjaChuKXtyW3RdPWV9cmV0dXJuIGV9fSw2NzUzODpmdW5jdGlvbih0LGUsbil7InVzZSBzdHJpY3QiO3ZhciByPW4oNzcwMSksbz1uKDM3NjIwKSxpPW4oMjM3MjQpLGE9big2MjU1NiksYz1pKCJzcGVjaWVzIik7dC5leHBvcnRzPWZ1bmN0aW9uKHQpe3ZhciBlPXIodCksbj1vLmY7YSYmZSYmIWVbY10mJm4oZSxjLHtjb25maWd1cmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXN9fSl9fSw1MTEyODpmdW5jdGlvbih0LGUsbil7dmFyIHI9bigzNzYyMCkuZixvPW4oNzYyOTgpLGk9bigyMzcyNCkoInRvU3RyaW5nVGFnIik7dC5leHBvcnRzPWZ1bmN0aW9uKHQsZSxuKXt0JiYhbyh0PW4/dDp0LnByb3RvdHlwZSxpKSYmcih0LGkse2NvbmZpZ3VyYWJsZTohMCx2YWx1ZTplfSl9fSw4MzE5NzpmdW5jdGlvbih0LGUsbil7dmFyIHI9big2MjA1NCksbz1uKDY3MjkpLGk9cigia2V5cyIpO3QuZXhwb3J0cz1mdW5jdGlvbih0KXtyZXR1cm4gaVt0XXx8KGlbdF09byh0KSl9fSwzNDc0MTpmdW5jdGlvbih0LGUsbil7dmFyIHI9big4OTU1OCksbz1uKDk4MjY5KSxpPSJfX2NvcmUtanNfc2hhcmVkX18iLGE9cltpXXx8byhpLHt9KTt0LmV4cG9ydHM9YX0sNjIwNTQ6ZnVuY3Rpb24odCxlLG4pe3ZhciByPW4oNjU2NzIpLG89bigzNDc0MSk7KHQuZXhwb3J0cz1mdW5jdGlvbih0LGUpe3JldHVybiBvW3RdfHwob1t0XT12b2lkIDAhPT1lP2U6e30pfSkoInZlcnNpb25zIixbXSkucHVzaCh7dmVyc2lvbjoiMy41LjAiLG1vZGU6cj8icHVyZSI6Imdsb2JhbCIsY29weXJpZ2h0OiLCqSAyMDE5IERlbmlzIFB1c2hrYXJldiAoemxvaXJvY2sucnUpIn0pfSwyMjkwOTpmdW5jdGlvbih0LGUsbil7InVzZSBzdHJpY3QiO3ZhciByPW4oMzIxODcpO3QuZXhwb3J0cz1mdW5jdGlvbih0LGUpe3ZhciBuPVtdW3RdO3JldHVybiFufHwhcigoZnVuY3Rpb24oKXtuLmNhbGwobnVsbCxlfHxmdW5jdGlvbigpe3Rocm93IDF9LDEpfSkpfX0sMTM5Nzk6ZnVuY3Rpb24odCxlLG4pe3ZhciByPW4oODc1NzkpLG89big4NjQ3MCksaT1uKDIzNzI0KSgic3BlY2llcyIpO3QuZXhwb3J0cz1mdW5jdGlvbih0LGUpe3ZhciBuLGE9cih0KS5jb25zdHJ1Y3RvcjtyZXR1cm4gdm9pZCAwPT09YXx8bnVsbD09KG49cihhKVtpXSk/ZTpvKG4pfX0sNjAxNDA6ZnVuY3Rpb24odCxlLG4pe3ZhciByPW4oNDM0MTYpLG89big3MDEzMiksaT1mdW5jdGlvbih0KXtyZXR1cm4gZnVuY3Rpb24oZSxuKXt2YXIgaSxhLGM9U3RyaW5nKG8oZSkpLHM9cihuKSx1PWMubGVuZ3RoO3JldHVybiBzPDB8fHM+PXU/dD8iIjp2b2lkIDA6KGk9Yy5jaGFyQ29kZUF0KHMpKTw1NTI5Nnx8aT41NjMxOXx8cysxPT09dXx8KGE9Yy5jaGFyQ29kZUF0KHMrMSkpPDU2MzIwfHxhPjU3MzQzP3Q/Yy5jaGFyQXQocyk6aTp0P2Muc2xpY2UocyxzKzIpOmEtNTYzMjArKGktNTUyOTY8PDEwKSs2NTUzNn19O3QuZXhwb3J0cz17Y29kZUF0OmkoITEpLGNoYXJBdDppKCEwKX19LDI2NTczOmZ1bmN0aW9uKHQsZSxuKXt2YXIgcj1uKDI3ODg0KSxvPW4oNjgyNTMpLGk9big3MDEzMiksYT1NYXRoLmNlaWwsYz1mdW5jdGlvbih0KXtyZXR1cm4gZnVuY3Rpb24oZSxuLGMpe3ZhciBzLHUsbD1TdHJpbmcoaShlKSksZj1sLmxlbmd0aCxkPXZvaWQgMD09PWM/IiAiOlN0cmluZyhjKSxwPXIobik7cmV0dXJuIHA8PWZ8fCIiPT1kP2w6KHM9cC1mLCh1PW8uY2FsbChkLGEocy9kLmxlbmd0aCkpKS5sZW5ndGg+cyYmKHU9dS5zbGljZSgwLHMpKSx0P2wrdTp1K2wpfX07dC5leHBvcnRzPXtzdGFydDpjKCExKSxlbmQ6YyghMCl9fSw2ODI1MzpmdW5jdGlvbih0LGUsbil7InVzZSBzdHJpY3QiO3ZhciByPW4oNDM0MTYpLG89big3MDEzMik7dC5leHBvcnRzPSIiLnJlcGVhdHx8ZnVuY3Rpb24odCl7dmFyIGU9U3RyaW5nKG8odGhpcykpLG49IiIsaT1yKHQpO2lmKGk8MHx8aT09MS8wKXRocm93IFJhbmdlRXJyb3IoIldyb25nIG51bWJlciBvZiByZXBldGl0aW9ucyIpO2Zvcig7aT4wOyhpPj4+PTEpJiYoZSs9ZSkpMSZpJiYobis9ZSk7cmV0dXJuIG59fSw4MjM1MDpmdW5jdGlvbih0LGUsbil7dmFyIHI9big3MDEzMiksbz0iWyIrbig1MDA1NSkrIl0iLGk9UmVnRXhwKCJeIitvK28rIioiKSxhPVJlZ0V4cChvK28rIiokIiksYz1mdW5jdGlvbih0KXtyZXR1cm4gZnVuY3Rpb24oZSl7dmFyIG49U3RyaW5nKHIoZSkpO3JldHVybiAxJnQmJihuPW4ucmVwbGFjZShpLCIiKSksMiZ0JiYobj1uLnJlcGxhY2UoYSwiIikpLG59fTt0LmV4cG9ydHM9e3N0YXJ0OmMoMSksZW5kOmMoMiksdHJpbTpjKDMpfX0sMjE3NDQ6ZnVuY3Rpb24odCxlLG4pe3ZhciByLG8saSxhPW4oODk1NTgpLGM9bigzMjE4Nykscz1uKDI0NTk0KSx1PW4oNDYxMzApLGw9big1MTU3MSksZj1uKDE5MjMpLGQ9bigyMTIzMSkscD1hLmxvY2F0aW9uLGg9YS5zZXRJbW1lZGlhdGUsdj1hLmNsZWFySW1tZWRpYXRlLGc9YS5wcm9jZXNzLHk9YS5NZXNzYWdlQ2hhbm5lbCxtPWEuRGlzcGF0Y2gsYj0wLHg9e30sdz0ib25yZWFkeXN0YXRlY2hhbmdlIixFPWZ1bmN0aW9uKHQpe2lmKHguaGFzT3duUHJvcGVydHkodCkpe3ZhciBlPXhbdF07ZGVsZXRlIHhbdF0sZSgpfX0saj1mdW5jdGlvbih0KXtyZXR1cm4gZnVuY3Rpb24oKXtFKHQpfX0sQz1mdW5jdGlvbih0KXtFKHQuZGF0YSl9LGs9ZnVuY3Rpb24odCl7YS5wb3N0TWVzc2FnZSh0KyIiLHAucHJvdG9jb2wrIi8vIitwLmhvc3QpfTtoJiZ2fHwoaD1mdW5jdGlvbih0KXtmb3IodmFyIGU9W10sbj0xO2FyZ3VtZW50cy5sZW5ndGg+bjspZS5wdXNoKGFyZ3VtZW50c1tuKytdKTtyZXR1cm4geFsrK2JdPWZ1bmN0aW9uKCl7KCJmdW5jdGlvbiI9PXR5cGVvZiB0P3Q6RnVuY3Rpb24odCkpLmFwcGx5KHZvaWQgMCxlKX0scihiKSxifSx2PWZ1bmN0aW9uKHQpe2RlbGV0ZSB4W3RdfSwicHJvY2VzcyI9PXMoZyk/cj1mdW5jdGlvbih0KXtnLm5leHRUaWNrKGoodCkpfTptJiZtLm5vdz9yPWZ1bmN0aW9uKHQpe20ubm93KGoodCkpfTp5JiYhZD8oaT0obz1uZXcgeSkucG9ydDIsby5wb3J0MS5vbm1lc3NhZ2U9QyxyPXUoaS5wb3N0TWVzc2FnZSxpLDEpKTohYS5hZGRFdmVudExpc3RlbmVyfHwiZnVuY3Rpb24iIT10eXBlb2YgcG9zdE1lc3NhZ2V8fGEuaW1wb3J0U2NyaXB0c3x8YyhrKT9yPXcgaW4gZigic2NyaXB0Iik/ZnVuY3Rpb24odCl7bC5hcHBlbmRDaGlsZChmKCJzY3JpcHQiKSkub25yZWFkeXN0YXRlY2hhbmdlPWZ1bmN0aW9uKCl7bC5yZW1vdmVDaGlsZCh0aGlzKSxFKHQpfX06ZnVuY3Rpb24odCl7c2V0VGltZW91dChqKHQpLDApfToocj1rLGEuYWRkRXZlbnRMaXN0ZW5lcigibWVzc2FnZSIsQywhMSkpKSx0LmV4cG9ydHM9e3NldDpoLGNsZWFyOnZ9fSw1Mzk5NzpmdW5jdGlvbih0LGUsbil7dmFyIHI9bigyNDU5NCk7dC5leHBvcnRzPWZ1bmN0aW9uKHQpe2lmKCJudW1iZXIiIT10eXBlb2YgdCYmIk51bWJlciIhPXIodCkpdGhyb3cgVHlwZUVycm9yKCJJbmNvcnJlY3QgaW52b2NhdGlvbiIpO3JldHVybit0fX0sNzY5NzY6ZnVuY3Rpb24odCxlLG4pe3ZhciByPW4oNDM0MTYpLG89TWF0aC5tYXgsaT1NYXRoLm1pbjt0LmV4cG9ydHM9ZnVuY3Rpb24odCxlKXt2YXIgbj1yKHQpO3JldHVybiBuPDA/byhuK2UsMCk6aShuLGUpfX0sODM5MTQ6ZnVuY3Rpb24odCxlLG4pe3ZhciByPW4oNDM0MTYpLG89bigyNzg4NCk7dC5leHBvcnRzPWZ1bmN0aW9uKHQpe2lmKHZvaWQgMD09PXQpcmV0dXJuIDA7dmFyIGU9cih0KSxuPW8oZSk7aWYoZSE9PW4pdGhyb3cgUmFuZ2VFcnJvcigiV3JvbmcgbGVuZ3RoIG9yIGluZGV4Iik7cmV0dXJuIG59fSw5NTczOmZ1bmN0aW9uKHQsZSxuKXt2YXIgcj1uKDI0OTgpLG89big3MDEzMik7dC5leHBvcnRzPWZ1bmN0aW9uKHQpe3JldHVybiByKG8odCkpfX0sNDM0MTY6ZnVuY3Rpb24odCl7dmFyIGU9TWF0aC5jZWlsLG49TWF0aC5mbG9vcjt0LmV4cG9ydHM9ZnVuY3Rpb24odCl7cmV0dXJuIGlzTmFOKHQ9K3QpPzA6KHQ+MD9uOmUpKHQpfX0sMjc4ODQ6ZnVuY3Rpb24odCxlLG4pe3ZhciByPW4oNDM0MTYpLG89TWF0aC5taW47dC5leHBvcnRzPWZ1bmN0aW9uKHQpe3JldHVybiB0PjA/byhyKHQpLDkwMDcxOTkyNTQ3NDA5OTEpOjB9fSwxOTIwOTpmdW5jdGlvbih0LGUsbil7dmFyIHI9big3MDEzMik7dC5leHBvcnRzPWZ1bmN0aW9uKHQpe3JldHVybiBPYmplY3Qocih0KSl9fSw2MDU1ODpmdW5jdGlvbih0LGUsbil7dmFyIHI9big0NTY4MCk7dC5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7dmFyIG49cih0KTtpZihuJWUpdGhyb3cgUmFuZ2VFcnJvcigiV3Jvbmcgb2Zmc2V0Iik7cmV0dXJuIG59fSw0NTY4MDpmdW5jdGlvbih0LGUsbil7dmFyIHI9big0MzQxNik7dC5leHBvcnRzPWZ1bmN0aW9uKHQpe3ZhciBlPXIodCk7aWYoZTwwKXRocm93IFJhbmdlRXJyb3IoIlRoZSBhcmd1bWVudCBjYW4ndCBiZSBsZXNzIHRoYW4gMCIpO3JldHVybiBlfX0sNTM0OTg6ZnVuY3Rpb24odCxlLG4pe3ZhciByPW4oMTA1OTIpO3QuZXhwb3J0cz1mdW5jdGlvbih0LGUpe2lmKCFyKHQpKXJldHVybiB0O3ZhciBuLG87aWYoZSYmImZ1bmN0aW9uIj09dHlwZW9mKG49dC50b1N0cmluZykmJiFyKG89bi5jYWxsKHQpKSlyZXR1cm4gbztpZigiZnVuY3Rpb24iPT10eXBlb2Yobj10LnZhbHVlT2YpJiYhcihvPW4uY2FsbCh0KSkpcmV0dXJuIG87aWYoIWUmJiJmdW5jdGlvbiI9PXR5cGVvZihuPXQudG9TdHJpbmcpJiYhcihvPW4uY2FsbCh0KSkpcmV0dXJuIG87dGhyb3cgVHlwZUVycm9yKCJDYW4ndCBjb252ZXJ0IG9iamVjdCB0byBwcmltaXRpdmUgdmFsdWUiKX19LDkwNjEzOmZ1bmN0aW9uKHQsZSxuKXt2YXIgcj17fTtyW24oMjM3MjQpKCJ0b1N0cmluZ1RhZyIpXT0ieiIsdC5leHBvcnRzPSJbb2JqZWN0IHpdIj09PVN0cmluZyhyKX0sOTMwMTc6ZnVuY3Rpb24odCxlLG4peyJ1c2Ugc3RyaWN0Ijt2YXIgcj1uKDE0MDQ0KSxvPW4oODk1NTgpLGk9big2MjU1NiksYT1uKDM1NjI3KSxjPW4oNzMwNzQpLHM9big4MjgzNSksdT1uKDU5Mzc5KSxsPW4oMTQyMDkpLGY9big2Njk3MSksZD1uKDI3ODg0KSxwPW4oODM5MTQpLGg9big2MDU1OCksdj1uKDUzNDk4KSxnPW4oNzYyOTgpLHk9big1OTU5MSksbT1uKDEwNTkyKSxiPW4oNTA4NjgpLHg9big3MTg0Miksdz1uKDEzMzM0KS5mLEU9bigyMDQ1NSksaj1uKDMwMDI1KS5mb3JFYWNoLEM9big2NzUzOCksaz1uKDM3NjIwKSxTPW4oOTcyNTcpLE89big4OTgyNyksQT1uKDMwMjcyKSxJPU8uZ2V0LE09Ty5zZXQsVD1rLmYsXz1TLmYsTD1NYXRoLnJvdW5kLFI9by5SYW5nZUVycm9yLFA9cy5BcnJheUJ1ZmZlcixOPXMuRGF0YVZpZXcsRD1jLk5BVElWRV9BUlJBWV9CVUZGRVJfVklFV1MsRj1jLlRZUEVEX0FSUkFZX1RBRyxVPWMuVHlwZWRBcnJheSxCPWMuVHlwZWRBcnJheVByb3RvdHlwZSx6PWMuYVR5cGVkQXJyYXlDb25zdHJ1Y3RvcixWPWMuaXNUeXBlZEFycmF5LEg9IkJZVEVTX1BFUl9FTEVNRU5UIixxPSJXcm9uZyBsZW5ndGgiLFc9ZnVuY3Rpb24odCxlKXtmb3IodmFyIG49MCxyPWUubGVuZ3RoLG89bmV3KHoodCkpKHIpO3I+bjspb1tuXT1lW24rK107cmV0dXJuIG99LEc9ZnVuY3Rpb24odCxlKXtUKHQsZSx7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIEkodGhpcylbZV19fSl9LFo9ZnVuY3Rpb24odCl7dmFyIGU7cmV0dXJuIHQgaW5zdGFuY2VvZiBQfHwiQXJyYXlCdWZmZXIiPT0oZT15KHQpKXx8IlNoYXJlZEFycmF5QnVmZmVyIj09ZX0sJD1mdW5jdGlvbih0LGUpe3JldHVybiBWKHQpJiYic3ltYm9sIiE9dHlwZW9mIGUmJmUgaW4gdCYmU3RyaW5nKCtlKT09U3RyaW5nKGUpfSxZPWZ1bmN0aW9uKHQsZSl7cmV0dXJuICQodCxlPXYoZSwhMCkpP2woMix0W2VdKTpfKHQsZSl9LEo9ZnVuY3Rpb24odCxlLG4pe3JldHVybiEoJCh0LGU9dihlLCEwKSkmJm0obikmJmcobiwidmFsdWUiKSl8fGcobiwiZ2V0Iil8fGcobiwic2V0Iil8fG4uY29uZmlndXJhYmxlfHxnKG4sIndyaXRhYmxlIikmJiFuLndyaXRhYmxlfHxnKG4sImVudW1lcmFibGUiKSYmIW4uZW51bWVyYWJsZT9UKHQsZSxuKToodFtlXT1uLnZhbHVlLHQpfTtpPyhEfHwoUy5mPVksay5mPUosRyhCLCJidWZmZXIiKSxHKEIsImJ5dGVPZmZzZXQiKSxHKEIsImJ5dGVMZW5ndGgiKSxHKEIsImxlbmd0aCIpKSxyKHt0YXJnZXQ6Ik9iamVjdCIsc3RhdDohMCxmb3JjZWQ6IUR9LHtnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3I6WSxkZWZpbmVQcm9wZXJ0eTpKfSksdC5leHBvcnRzPWZ1bmN0aW9uKHQsZSxuKXt2YXIgaT10Lm1hdGNoKC9cZCskLylbMF0vOCxjPXQrKG4/IkNsYW1wZWQiOiIiKSsiQXJyYXkiLHM9ImdldCIrdCxsPSJzZXQiK3Qsdj1vW2NdLGc9dix5PWcmJmcucHJvdG90eXBlLGs9e30sUz1mdW5jdGlvbih0LGUpe1QodCxlLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gZnVuY3Rpb24odCxlKXt2YXIgbj1JKHQpO3JldHVybiBuLnZpZXdbc10oZSppK24uYnl0ZU9mZnNldCwhMCl9KHRoaXMsZSl9LHNldDpmdW5jdGlvbih0KXtyZXR1cm4gZnVuY3Rpb24odCxlLHIpe3ZhciBvPUkodCk7biYmKHI9KHI9TChyKSk8MD8wOnI+MjU1PzI1NToyNTUmciksby52aWV3W2xdKGUqaStvLmJ5dGVPZmZzZXQsciwhMCl9KHRoaXMsZSx0KX0sZW51bWVyYWJsZTohMH0pfTtEP2EmJihnPWUoKGZ1bmN0aW9uKHQsZSxuLHIpe3JldHVybiB1KHQsZyxjKSxBKG0oZSk/WihlKT92b2lkIDAhPT1yP25ldyB2KGUsaChuLGkpLHIpOnZvaWQgMCE9PW4/bmV3IHYoZSxoKG4saSkpOm5ldyB2KGUpOlYoZSk/VyhnLGUpOkUuY2FsbChnLGUpOm5ldyB2KHAoZSkpLHQsZyl9KSkseCYmeChnLFUpLGoodyh2KSwoZnVuY3Rpb24odCl7dCBpbiBnfHxmKGcsdCx2W3RdKX0pKSxnLnByb3RvdHlwZT15KTooZz1lKChmdW5jdGlvbih0LGUsbixyKXt1KHQsZyxjKTt2YXIgbyxhLHMsbD0wLGY9MDtpZihtKGUpKXtpZighWihlKSlyZXR1cm4gVihlKT9XKGcsZSk6RS5jYWxsKGcsZSk7bz1lLGY9aChuLGkpO3ZhciB2PWUuYnl0ZUxlbmd0aDtpZih2b2lkIDA9PT1yKXtpZih2JWkpdGhyb3cgUihxKTtpZigoYT12LWYpPDApdGhyb3cgUihxKX1lbHNlIGlmKChhPWQocikqaSkrZj52KXRocm93IFIocSk7cz1hL2l9ZWxzZSBzPXAoZSksbz1uZXcgUChhPXMqaSk7Zm9yKE0odCx7YnVmZmVyOm8sYnl0ZU9mZnNldDpmLGJ5dGVMZW5ndGg6YSxsZW5ndGg6cyx2aWV3Om5ldyBOKG8pfSk7bDxzOylTKHQsbCsrKX0pKSx4JiZ4KGcsVSkseT1nLnByb3RvdHlwZT1iKEIpKSx5LmNvbnN0cnVjdG9yIT09ZyYmZih5LCJjb25zdHJ1Y3RvciIsZyksRiYmZih5LEYsYyksa1tjXT1nLHIoe2dsb2JhbDohMCxmb3JjZWQ6ZyE9dixzaGFtOiFEfSxrKSxIIGluIGd8fGYoZyxILGkpLEggaW4geXx8Zih5LEgsaSksQyhjKX0pOnQuZXhwb3J0cz1mdW5jdGlvbigpe319LDIwNDU1OmZ1bmN0aW9uKHQsZSxuKXt2YXIgcj1uKDE5MjA5KSxvPW4oMjc4ODQpLGk9big3Mzg5MCksYT1uKDQ0OTg0KSxjPW4oNDYxMzApLHM9big3MzA3NCkuYVR5cGVkQXJyYXlDb25zdHJ1Y3Rvcjt0LmV4cG9ydHM9ZnVuY3Rpb24odCl7dmFyIGUsbix1LGwsZixkLHA9cih0KSxoPWFyZ3VtZW50cy5sZW5ndGgsdj1oPjE/YXJndW1lbnRzWzFdOnZvaWQgMCxnPXZvaWQgMCE9PXYseT1pKHApO2lmKG51bGwhPXkmJiFhKHkpKWZvcihkPShmPXkuY2FsbChwKSkubmV4dCxwPVtdOyEobD1kLmNhbGwoZikpLmRvbmU7KXAucHVzaChsLnZhbHVlKTtmb3IoZyYmaD4yJiYodj1jKHYsYXJndW1lbnRzWzJdLDIpKSxuPW8ocC5sZW5ndGgpLHU9bmV3KHModGhpcykpKG4pLGU9MDtuPmU7ZSsrKXVbZV09Zz92KHBbZV0sZSk6cFtlXTtyZXR1cm4gdX19LDM1NjI3OmZ1bmN0aW9uKHQsZSxuKXt2YXIgcj1uKDg5NTU4KSxvPW4oMzIxODcpLGk9big0Nzk2KSxhPW4oNzMwNzQpLk5BVElWRV9BUlJBWV9CVUZGRVJfVklFV1MsYz1yLkFycmF5QnVmZmVyLHM9ci5JbnQ4QXJyYXk7dC5leHBvcnRzPSFhfHwhbygoZnVuY3Rpb24oKXtzKDEpfSkpfHwhbygoZnVuY3Rpb24oKXtuZXcgcygtMSl9KSl8fCFpKChmdW5jdGlvbih0KXtuZXcgcyxuZXcgcyhudWxsKSxuZXcgcygxLjUpLG5ldyBzKHQpfSksITApfHxvKChmdW5jdGlvbigpe3JldHVybiAxIT09bmV3IHMobmV3IGMoMiksMSx2b2lkIDApLmxlbmd0aH0pKX0sNjcyOTpmdW5jdGlvbih0KXt2YXIgZT0wLG49TWF0aC5yYW5kb20oKTt0LmV4cG9ydHM9ZnVuY3Rpb24odCl7cmV0dXJuIlN5bWJvbCgiK1N0cmluZyh2b2lkIDA9PT10PyIiOnQpKyIpXyIrKCsrZStuKS50b1N0cmluZygzNil9fSwxNjQxMDpmdW5jdGlvbih0LGUsbil7dmFyIHI9big5MDE0KTt0LmV4cG9ydHM9ciYmIVN5bWJvbC5zaGFtJiYic3ltYm9sIj09dHlwZW9mIFN5bWJvbCgpfSwzOTQ3NjpmdW5jdGlvbih0LGUsbil7dmFyIHI9big3NzAxKTt0LmV4cG9ydHM9cigibmF2aWdhdG9yIiwidXNlckFnZW50Iil8fCIifSw3OTA3MTpmdW5jdGlvbih0LGUsbil7dmFyIHIsbyxpPW4oODk1NTgpLGE9bigzOTQ3NiksYz1pLnByb2Nlc3Mscz1jJiZjLnZlcnNpb25zLHU9cyYmcy52ODt1P289KHI9dS5zcGxpdCgiLiIpKVswXStyWzFdOmEmJighKHI9YS5tYXRjaCgvRWRnZVwvKFxkKykvKSl8fHJbMV0+PTc0KSYmKHI9YS5tYXRjaCgvQ2hyb21lXC8oXGQrKS8pKSYmKG89clsxXSksdC5leHBvcnRzPW8mJitvfSw0MjE4NDpmdW5jdGlvbih0LGUsbil7dmFyIHI9bigzOTQ3Nik7dC5leHBvcnRzPS9WZXJzaW9uXC8xMFwuXGQrKFwuXGQrKT8oIE1vYmlsZVwvXHcrKT8gU2FmYXJpXC8vLnRlc3Qocil9LDIzNzI0OmZ1bmN0aW9uKHQsZSxuKXt2YXIgcj1uKDg5NTU4KSxvPW4oNjIwNTQpLGk9big3NjI5OCksYT1uKDY3MjkpLGM9big5MDE0KSxzPW4oMTY0MTApLHU9bygid2tzIiksbD1yLlN5bWJvbCxmPXM/bDphO3QuZXhwb3J0cz1mdW5jdGlvbih0KXtyZXR1cm4gaSh1LHQpfHwoYyYmaShsLHQpP3VbdF09bFt0XTp1W3RdPWYoIlN5bWJvbC4iK3QpKSx1W3RdfX0sNTAwNTU6ZnVuY3Rpb24odCl7dC5leHBvcnRzPSJcdFxuXHZcZlxyIMKg4ZqA4oCA4oCB4oCC4oCD4oCE4oCF4oCG4oCH4oCI4oCJ4oCK4oCv4oGf44CAXHUyMDI4XHUyMDI5XHVmZWZmIn0sNzM5MTY6ZnVuY3Rpb24odCxlLG4pe3ZhciByPW4oMjM3MjQpO2UuZj1yfSw2MTI0NTpmdW5jdGlvbih0LGUsbil7InVzZSBzdHJpY3QiO3ZhciByPW4oMTQwNDQpLG89big4OTU1OCksaT1uKDgyODM1KSxhPW4oNjc1MzgpLGM9IkFycmF5QnVmZmVyIixzPWkuQXJyYXlCdWZmZXI7cih7Z2xvYmFsOiEwLGZvcmNlZDpvLkFycmF5QnVmZmVyIT09c30se0FycmF5QnVmZmVyOnN9KSxhKGMpfSwyOTI3MzpmdW5jdGlvbih0LGUsbil7dmFyIHI9bigxNDA0NCksbz1uKDczMDc0KTtyKHt0YXJnZXQ6IkFycmF5QnVmZmVyIixzdGF0OiEwLGZvcmNlZDohby5OQVRJVkVfQVJSQVlfQlVGRkVSX1ZJRVdTfSx7aXNWaWV3Om8uaXNWaWV3fSl9LDkwNTYwOmZ1bmN0aW9uKHQsZSxuKXsidXNlIHN0cmljdCI7dmFyIHI9bigxNDA0NCksbz1uKDMyMTg3KSxpPW4oODI4MzUpLGE9big4NzU3OSksYz1uKDc2OTc2KSxzPW4oMjc4ODQpLHU9bigxMzk3OSksbD1pLkFycmF5QnVmZmVyLGY9aS5EYXRhVmlldyxkPWwucHJvdG90eXBlLnNsaWNlO3Ioe3RhcmdldDoiQXJyYXlCdWZmZXIiLHByb3RvOiEwLHVuc2FmZTohMCxmb3JjZWQ6bygoZnVuY3Rpb24oKXtyZXR1cm4hbmV3IGwoMikuc2xpY2UoMSx2b2lkIDApLmJ5dGVMZW5ndGh9KSl9LHtzbGljZTpmdW5jdGlvbih0LGUpe2lmKHZvaWQgMCE9PWQmJnZvaWQgMD09PWUpcmV0dXJuIGQuY2FsbChhKHRoaXMpLHQpO2Zvcih2YXIgbj1hKHRoaXMpLmJ5dGVMZW5ndGgscj1jKHQsbiksbz1jKHZvaWQgMD09PWU/bjplLG4pLGk9bmV3KHUodGhpcyxsKSkocyhvLXIpKSxwPW5ldyBmKHRoaXMpLGg9bmV3IGYoaSksdj0wO3I8bzspaC5zZXRVaW50OCh2KysscC5nZXRVaW50OChyKyspKTtyZXR1cm4gaX19KX0sNTczODc6ZnVuY3Rpb24odCxlLG4peyJ1c2Ugc3RyaWN0Ijt2YXIgcj1uKDE0MDQ0KSxvPW4oMzIxODcpLGk9big2MTk5KSxhPW4oMTA1OTIpLGM9bigxOTIwOSkscz1uKDI3ODg0KSx1PW4oNTg4MTApLGw9big3MDA5KSxmPW4oNjE5NjMpLGQ9bigyMzcyNCkscD1uKDc5MDcxKSxoPWQoImlzQ29uY2F0U3ByZWFkYWJsZSIpLHY9OTAwNzE5OTI1NDc0MDk5MSxnPSJNYXhpbXVtIGFsbG93ZWQgaW5kZXggZXhjZWVkZWQiLHk9cD49NTF8fCFvKChmdW5jdGlvbigpe3ZhciB0PVtdO3JldHVybiB0W2hdPSExLHQuY29uY2F0KClbMF0hPT10fSkpLG09ZigiY29uY2F0IiksYj1mdW5jdGlvbih0KXtpZighYSh0KSlyZXR1cm4hMTt2YXIgZT10W2hdO3JldHVybiB2b2lkIDAhPT1lPyEhZTppKHQpfTtyKHt0YXJnZXQ6IkFycmF5Iixwcm90bzohMCxmb3JjZWQ6IXl8fCFtfSx7Y29uY2F0OmZ1bmN0aW9uKHQpe3ZhciBlLG4scixvLGksYT1jKHRoaXMpLGY9bChhLDApLGQ9MDtmb3IoZT0tMSxyPWFyZ3VtZW50cy5sZW5ndGg7ZTxyO2UrKylpZihiKGk9LTE9PT1lP2E6YXJndW1lbnRzW2VdKSl7aWYoZCsobz1zKGkubGVuZ3RoKSk+dil0aHJvdyBUeXBlRXJyb3IoZyk7Zm9yKG49MDtuPG87bisrLGQrKyluIGluIGkmJnUoZixkLGlbbl0pfWVsc2V7aWYoZD49dil0aHJvdyBUeXBlRXJyb3IoZyk7dShmLGQrKyxpKX1yZXR1cm4gZi5sZW5ndGg9ZCxmfX0pfSwzMDgxNzpmdW5jdGlvbih0LGUsbil7dmFyIHI9bigxNDA0NCksbz1uKDk5NDMxKSxpPW4oNzY1MTMpO3Ioe3RhcmdldDoiQXJyYXkiLHByb3RvOiEwfSx7Y29weVdpdGhpbjpvfSksaSgiY29weVdpdGhpbiIpfSw1MjA1NTpmdW5jdGlvbih0LGUsbil7InVzZSBzdHJpY3QiO3ZhciByPW4oMTQwNDQpLG89bigzMDAyNSkuZXZlcnk7cih7dGFyZ2V0OiJBcnJheSIscHJvdG86ITAsZm9yY2VkOm4oMjI5MDkpKCJldmVyeSIpfSx7ZXZlcnk6ZnVuY3Rpb24odCl7cmV0dXJuIG8odGhpcyx0LGFyZ3VtZW50cy5sZW5ndGg+MT9hcmd1bWVudHNbMV06dm9pZCAwKX19KX0sNzMzNjA6ZnVuY3Rpb24odCxlLG4pe3ZhciByPW4oMTQwNDQpLG89big2NTg5NSksaT1uKDc2NTEzKTtyKHt0YXJnZXQ6IkFycmF5Iixwcm90bzohMH0se2ZpbGw6b30pLGkoImZpbGwiKX0sNDc1MDI6ZnVuY3Rpb24odCxlLG4peyJ1c2Ugc3RyaWN0Ijt2YXIgcj1uKDE0MDQ0KSxvPW4oMzAwMjUpLmZpbHRlcixpPW4oMzIxODcpLGE9big2MTk2MykoImZpbHRlciIpLGM9YSYmIWkoKGZ1bmN0aW9uKCl7W10uZmlsdGVyLmNhbGwoe2xlbmd0aDotMSwwOjF9LChmdW5jdGlvbih0KXt0aHJvdyB0fSkpfSkpO3Ioe3RhcmdldDoiQXJyYXkiLHByb3RvOiEwLGZvcmNlZDohYXx8IWN9LHtmaWx0ZXI6ZnVuY3Rpb24odCl7cmV0dXJuIG8odGhpcyx0LGFyZ3VtZW50cy5sZW5ndGg+MT9hcmd1bWVudHNbMV06dm9pZCAwKX19KX0sOTA5MTI6ZnVuY3Rpb24odCxlLG4peyJ1c2Ugc3RyaWN0Ijt2YXIgcj1uKDE0MDQ0KSxvPW4oMzAwMjUpLmZpbmRJbmRleCxpPW4oNzY1MTMpLGE9ImZpbmRJbmRleCIsYz0hMDthIGluW10mJkFycmF5KDEpLmZpbmRJbmRleCgoZnVuY3Rpb24oKXtjPSExfSkpLHIoe3RhcmdldDoiQXJyYXkiLHByb3RvOiEwLGZvcmNlZDpjfSx7ZmluZEluZGV4OmZ1bmN0aW9uKHQpe3JldHVybiBvKHRoaXMsdCxhcmd1bWVudHMubGVuZ3RoPjE/YXJndW1lbnRzWzFdOnZvaWQgMCl9fSksaShhKX0sMzMxOTU6ZnVuY3Rpb24odCxlLG4peyJ1c2Ugc3RyaWN0Ijt2YXIgcj1uKDE0MDQ0KSxvPW4oMzAwMjUpLmZpbmQsaT1uKDc2NTEzKSxhPSJmaW5kIixjPSEwO2EgaW5bXSYmQXJyYXkoMSkuZmluZCgoZnVuY3Rpb24oKXtjPSExfSkpLHIoe3RhcmdldDoiQXJyYXkiLHByb3RvOiEwLGZvcmNlZDpjfSx7ZmluZDpmdW5jdGlvbih0KXtyZXR1cm4gbyh0aGlzLHQsYXJndW1lbnRzLmxlbmd0aD4xP2FyZ3VtZW50c1sxXTp2b2lkIDApfX0pLGkoYSl9LDc5MjI3OmZ1bmN0aW9uKHQsZSxuKXsidXNlIHN0cmljdCI7dmFyIHI9bigxNDA0NCksbz1uKDgwNjY1KSxpPW4oMTkyMDkpLGE9bigyNzg4NCksYz1uKDg2NDcwKSxzPW4oNzAwOSk7cih7dGFyZ2V0OiJBcnJheSIscHJvdG86ITB9LHtmbGF0TWFwOmZ1bmN0aW9uKHQpe3ZhciBlLG49aSh0aGlzKSxyPWEobi5sZW5ndGgpO3JldHVybiBjKHQpLChlPXMobiwwKSkubGVuZ3RoPW8oZSxuLG4sciwwLDEsdCxhcmd1bWVudHMubGVuZ3RoPjE/YXJndW1lbnRzWzFdOnZvaWQgMCksZX19KX0sMjgyMDM6ZnVuY3Rpb24odCxlLG4peyJ1c2Ugc3RyaWN0Ijt2YXIgcj1uKDE0MDQ0KSxvPW4oODA2NjUpLGk9bigxOTIwOSksYT1uKDI3ODg0KSxjPW4oNDM0MTYpLHM9big3MDA5KTtyKHt0YXJnZXQ6IkFycmF5Iixwcm90bzohMH0se2ZsYXQ6ZnVuY3Rpb24oKXt2YXIgdD1hcmd1bWVudHMubGVuZ3RoP2FyZ3VtZW50c1swXTp2b2lkIDAsZT1pKHRoaXMpLG49YShlLmxlbmd0aCkscj1zKGUsMCk7cmV0dXJuIHIubGVuZ3RoPW8ocixlLGUsbiwwLHZvaWQgMD09PXQ/MTpjKHQpKSxyfX0pfSw0MzU5MTpmdW5jdGlvbih0LGUsbil7InVzZSBzdHJpY3QiO3ZhciByPW4oMTQwNDQpLG89bigzMTM2OCk7cih7dGFyZ2V0OiJBcnJheSIscHJvdG86ITAsZm9yY2VkOltdLmZvckVhY2ghPW99LHtmb3JFYWNoOm99KX0sNzQ1Mzg6ZnVuY3Rpb24odCxlLG4pe3ZhciByPW4oMTQwNDQpLG89big4NTE2Nik7cih7dGFyZ2V0OiJBcnJheSIsc3RhdDohMCxmb3JjZWQ6IW4oNDc5NikoKGZ1bmN0aW9uKHQpe0FycmF5LmZyb20odCl9KSl9LHtmcm9tOm99KX0sMjIyNzc6ZnVuY3Rpb24odCxlLG4peyJ1c2Ugc3RyaWN0Ijt2YXIgcj1uKDE0MDQ0KSxvPW4oODU4MDMpLmluY2x1ZGVzLGk9big3NjUxMyk7cih7dGFyZ2V0OiJBcnJheSIscHJvdG86ITB9LHtpbmNsdWRlczpmdW5jdGlvbih0KXtyZXR1cm4gbyh0aGlzLHQsYXJndW1lbnRzLmxlbmd0aD4xP2FyZ3VtZW50c1sxXTp2b2lkIDApfX0pLGkoImluY2x1ZGVzIil9LDI0MTI5OmZ1bmN0aW9uKHQsZSxuKXsidXNlIHN0cmljdCI7dmFyIHI9bigxNDA0NCksbz1uKDg1ODAzKS5pbmRleE9mLGk9bigyMjkwOSksYT1bXS5pbmRleE9mLGM9ISFhJiYxL1sxXS5pbmRleE9mKDEsLTApPDAscz1pKCJpbmRleE9mIik7cih7dGFyZ2V0OiJBcnJheSIscHJvdG86ITAsZm9yY2VkOmN8fHN9LHtpbmRleE9mOmZ1bmN0aW9uKHQpe3JldHVybiBjP2EuYXBwbHkodGhpcyxhcmd1bWVudHMpfHwwOm8odGhpcyx0LGFyZ3VtZW50cy5sZW5ndGg+MT9hcmd1bWVudHNbMV06dm9pZCAwKX19KX0sMjEyNzpmdW5jdGlvbih0LGUsbil7bigxNDA0NCkoe3RhcmdldDoiQXJyYXkiLHN0YXQ6ITB9LHtpc0FycmF5Om4oNjE5OSl9KX0sNTAwNjM6ZnVuY3Rpb24odCxlLG4peyJ1c2Ugc3RyaWN0Ijt2YXIgcj1uKDk1NzMpLG89big3NjUxMyksaT1uKDEyMzUpLGE9big4OTgyNyksYz1uKDQ2MDYxKSxzPSJBcnJheSBJdGVyYXRvciIsdT1hLnNldCxsPWEuZ2V0dGVyRm9yKHMpO3QuZXhwb3J0cz1jKEFycmF5LCJBcnJheSIsKGZ1bmN0aW9uKHQsZSl7dSh0aGlzLHt0eXBlOnMsdGFyZ2V0OnIodCksaW5kZXg6MCxraW5kOmV9KX0pLChmdW5jdGlvbigpe3ZhciB0PWwodGhpcyksZT10LnRhcmdldCxuPXQua2luZCxyPXQuaW5kZXgrKztyZXR1cm4hZXx8cj49ZS5sZW5ndGg/KHQudGFyZ2V0PXZvaWQgMCx7dmFsdWU6dm9pZCAwLGRvbmU6ITB9KToia2V5cyI9PW4/e3ZhbHVlOnIsZG9uZTohMX06InZhbHVlcyI9PW4/e3ZhbHVlOmVbcl0sZG9uZTohMX06e3ZhbHVlOltyLGVbcl1dLGRvbmU6ITF9fSksInZhbHVlcyIpLGkuQXJndW1lbnRzPWkuQXJyYXksbygia2V5cyIpLG8oInZhbHVlcyIpLG8oImVudHJpZXMiKX0sNzQxMjA6ZnVuY3Rpb24odCxlLG4peyJ1c2Ugc3RyaWN0Ijt2YXIgcj1uKDE0MDQ0KSxvPW4oMjQ5OCksaT1uKDk1NzMpLGE9bigyMjkwOSksYz1bXS5qb2luLHM9byE9T2JqZWN0LHU9YSgiam9pbiIsIiwiKTtyKHt0YXJnZXQ6IkFycmF5Iixwcm90bzohMCxmb3JjZWQ6c3x8dX0se2pvaW46ZnVuY3Rpb24odCl7cmV0dXJuIGMuY2FsbChpKHRoaXMpLHZvaWQgMD09PXQ/IiwiOnQpfX0pfSw5NDk2MzpmdW5jdGlvbih0LGUsbil7dmFyIHI9bigxNDA0NCksbz1uKDQ5MjQ5KTtyKHt0YXJnZXQ6IkFycmF5Iixwcm90bzohMCxmb3JjZWQ6byE9PVtdLmxhc3RJbmRleE9mfSx7bGFzdEluZGV4T2Y6b30pfSwyNzM4ODpmdW5jdGlvbih0LGUsbil7InVzZSBzdHJpY3QiO3ZhciByPW4oMTQwNDQpLG89bigzMDAyNSkubWFwLGk9bigzMjE4NyksYT1uKDYxOTYzKSgibWFwIiksYz1hJiYhaSgoZnVuY3Rpb24oKXtbXS5tYXAuY2FsbCh7bGVuZ3RoOi0xLDA6MX0sKGZ1bmN0aW9uKHQpe3Rocm93IHR9KSl9KSk7cih7dGFyZ2V0OiJBcnJheSIscHJvdG86ITAsZm9yY2VkOiFhfHwhY30se21hcDpmdW5jdGlvbih0KXtyZXR1cm4gbyh0aGlzLHQsYXJndW1lbnRzLmxlbmd0aD4xP2FyZ3VtZW50c1sxXTp2b2lkIDApfX0pfSw2OTk4ODpmdW5jdGlvbih0LGUsbil7InVzZSBzdHJpY3QiO3ZhciByPW4oMTQwNDQpLG89bigzMjE4NyksaT1uKDU4ODEwKTtyKHt0YXJnZXQ6IkFycmF5IixzdGF0OiEwLGZvcmNlZDpvKChmdW5jdGlvbigpe2Z1bmN0aW9uIHQoKXt9cmV0dXJuIShBcnJheS5vZi5jYWxsKHQpaW5zdGFuY2VvZiB0KX0pKX0se29mOmZ1bmN0aW9uKCl7Zm9yKHZhciB0PTAsZT1hcmd1bWVudHMubGVuZ3RoLG49bmV3KCJmdW5jdGlvbiI9PXR5cGVvZiB0aGlzP3RoaXM6QXJyYXkpKGUpO2U+dDspaShuLHQsYXJndW1lbnRzW3QrK10pO3JldHVybiBuLmxlbmd0aD1lLG59fSl9LDQ1NTI4OmZ1bmN0aW9uKHQsZSxuKXsidXNlIHN0cmljdCI7dmFyIHI9bigxNDA0NCksbz1uKDEyMzY2KS5yaWdodDtyKHt0YXJnZXQ6IkFycmF5Iixwcm90bzohMCxmb3JjZWQ6bigyMjkwOSkoInJlZHVjZVJpZ2h0Iil9LHtyZWR1Y2VSaWdodDpmdW5jdGlvbih0KXtyZXR1cm4gbyh0aGlzLHQsYXJndW1lbnRzLmxlbmd0aCxhcmd1bWVudHMubGVuZ3RoPjE/YXJndW1lbnRzWzFdOnZvaWQgMCl9fSl9LDgwNTIyOmZ1bmN0aW9uKHQsZSxuKXsidXNlIHN0cmljdCI7dmFyIHI9bigxNDA0NCksbz1uKDEyMzY2KS5sZWZ0O3Ioe3RhcmdldDoiQXJyYXkiLHByb3RvOiEwLGZvcmNlZDpuKDIyOTA5KSgicmVkdWNlIil9LHtyZWR1Y2U6ZnVuY3Rpb24odCl7cmV0dXJuIG8odGhpcyx0LGFyZ3VtZW50cy5sZW5ndGgsYXJndW1lbnRzLmxlbmd0aD4xP2FyZ3VtZW50c1sxXTp2b2lkIDApfX0pfSw4MDExNjpmdW5jdGlvbih0LGUsbil7InVzZSBzdHJpY3QiO3ZhciByPW4oMTQwNDQpLG89big2MTk5KSxpPVtdLnJldmVyc2UsYT1bMSwyXTtyKHt0YXJnZXQ6IkFycmF5Iixwcm90bzohMCxmb3JjZWQ6U3RyaW5nKGEpPT09U3RyaW5nKGEucmV2ZXJzZSgpKX0se3JldmVyc2U6ZnVuY3Rpb24oKXtyZXR1cm4gbyh0aGlzKSYmKHRoaXMubGVuZ3RoPXRoaXMubGVuZ3RoKSxpLmNhbGwodGhpcyl9fSl9LDI5MTEwOmZ1bmN0aW9uKHQsZSxuKXsidXNlIHN0cmljdCI7dmFyIHI9bigxNDA0NCksbz1uKDEwNTkyKSxpPW4oNjE5OSksYT1uKDc2OTc2KSxjPW4oMjc4ODQpLHM9big5NTczKSx1PW4oNTg4MTApLGw9big2MTk2MyksZj1uKDIzNzI0KSgic3BlY2llcyIpLGQ9W10uc2xpY2UscD1NYXRoLm1heDtyKHt0YXJnZXQ6IkFycmF5Iixwcm90bzohMCxmb3JjZWQ6IWwoInNsaWNlIil9LHtzbGljZTpmdW5jdGlvbih0LGUpe3ZhciBuLHIsbCxoPXModGhpcyksdj1jKGgubGVuZ3RoKSxnPWEodCx2KSx5PWEodm9pZCAwPT09ZT92OmUsdik7aWYoaShoKSYmKCJmdW5jdGlvbiIhPXR5cGVvZihuPWguY29uc3RydWN0b3IpfHxuIT09QXJyYXkmJiFpKG4ucHJvdG90eXBlKT9vKG4pJiZudWxsPT09KG49bltmXSkmJihuPXZvaWQgMCk6bj12b2lkIDAsbj09PUFycmF5fHx2b2lkIDA9PT1uKSlyZXR1cm4gZC5jYWxsKGgsZyx5KTtmb3Iocj1uZXcodm9pZCAwPT09bj9BcnJheTpuKShwKHktZywwKSksbD0wO2c8eTtnKyssbCsrKWcgaW4gaCYmdShyLGwsaFtnXSk7cmV0dXJuIHIubGVuZ3RoPWwscn19KX0sODU1OTQ6ZnVuY3Rpb24odCxlLG4peyJ1c2Ugc3RyaWN0Ijt2YXIgcj1uKDE0MDQ0KSxvPW4oMzAwMjUpLnNvbWU7cih7dGFyZ2V0OiJBcnJheSIscHJvdG86ITAsZm9yY2VkOm4oMjI5MDkpKCJzb21lIil9LHtzb21lOmZ1bmN0aW9uKHQpe3JldHVybiBvKHRoaXMsdCxhcmd1bWVudHMubGVuZ3RoPjE/YXJndW1lbnRzWzFdOnZvaWQgMCl9fSl9LDY3ODEyOmZ1bmN0aW9uKHQsZSxuKXsidXNlIHN0cmljdCI7dmFyIHI9bigxNDA0NCksbz1uKDg2NDcwKSxpPW4oMTkyMDkpLGE9bigzMjE4NyksYz1uKDIyOTA5KSxzPVtdLHU9cy5zb3J0LGw9YSgoZnVuY3Rpb24oKXtzLnNvcnQodm9pZCAwKX0pKSxmPWEoKGZ1bmN0aW9uKCl7cy5zb3J0KG51bGwpfSkpLGQ9Yygic29ydCIpO3Ioe3RhcmdldDoiQXJyYXkiLHByb3RvOiEwLGZvcmNlZDpsfHwhZnx8ZH0se3NvcnQ6ZnVuY3Rpb24odCl7cmV0dXJuIHZvaWQgMD09PXQ/dS5jYWxsKGkodGhpcykpOnUuY2FsbChpKHRoaXMpLG8odCkpfX0pfSw4NjIxNDpmdW5jdGlvbih0LGUsbil7big2NzUzOCkoIkFycmF5Iil9LDMzNzkyOmZ1bmN0aW9uKHQsZSxuKXsidXNlIHN0cmljdCI7dmFyIHI9bigxNDA0NCksbz1uKDc2OTc2KSxpPW4oNDM0MTYpLGE9bigyNzg4NCksYz1uKDE5MjA5KSxzPW4oNzAwOSksdT1uKDU4ODEwKSxsPW4oNjE5NjMpLGY9TWF0aC5tYXgsZD1NYXRoLm1pbixwPTkwMDcxOTkyNTQ3NDA5OTEsaD0iTWF4aW11bSBhbGxvd2VkIGxlbmd0aCBleGNlZWRlZCI7cih7dGFyZ2V0OiJBcnJheSIscHJvdG86ITAsZm9yY2VkOiFsKCJzcGxpY2UiKX0se3NwbGljZTpmdW5jdGlvbih0LGUpe3ZhciBuLHIsbCx2LGcseSxtPWModGhpcyksYj1hKG0ubGVuZ3RoKSx4PW8odCxiKSx3PWFyZ3VtZW50cy5sZW5ndGg7aWYoMD09PXc/bj1yPTA6MT09PXc/KG49MCxyPWIteCk6KG49dy0yLHI9ZChmKGkoZSksMCksYi14KSksYituLXI+cCl0aHJvdyBUeXBlRXJyb3IoaCk7Zm9yKGw9cyhtLHIpLHY9MDt2PHI7disrKShnPXgrdilpbiBtJiZ1KGwsdixtW2ddKTtpZihsLmxlbmd0aD1yLG48cil7Zm9yKHY9eDt2PGItcjt2KyspeT12K24sKGc9dityKWluIG0/bVt5XT1tW2ddOmRlbGV0ZSBtW3ldO2Zvcih2PWI7dj5iLXIrbjt2LS0pZGVsZXRlIG1bdi0xXX1lbHNlIGlmKG4+cilmb3Iodj1iLXI7dj54O3YtLSl5PXYrbi0xLChnPXYrci0xKWluIG0/bVt5XT1tW2ddOmRlbGV0ZSBtW3ldO2Zvcih2PTA7djxuO3YrKyltW3YreF09YXJndW1lbnRzW3YrMl07cmV0dXJuIG0ubGVuZ3RoPWItcituLGx9fSl9LDcxODQ2OmZ1bmN0aW9uKHQsZSxuKXtuKDc2NTEzKSgiZmxhdE1hcCIpfSw3MDE0NjpmdW5jdGlvbih0LGUsbil7big3NjUxMykoImZsYXQiKX0sNDUxNTQ6ZnVuY3Rpb24odCxlLG4pe3ZhciByPW4oMTQwNDQpLG89big4MjgzNSk7cih7Z2xvYmFsOiEwLGZvcmNlZDohbig3MzA3NCkuTkFUSVZFX0FSUkFZX0JVRkZFUn0se0RhdGFWaWV3Om8uRGF0YVZpZXd9KX0sNDE2MzI6ZnVuY3Rpb24odCxlLG4pe24oMTQwNDQpKHt0YXJnZXQ6IkRhdGUiLHN0YXQ6ITB9LHtub3c6ZnVuY3Rpb24oKXtyZXR1cm4obmV3IERhdGUpLmdldFRpbWUoKX19KX0sNDAwNDU6ZnVuY3Rpb24odCxlLG4pe3ZhciByPW4oMTQwNDQpLG89big3OTE2Nyk7cih7dGFyZ2V0OiJEYXRlIixwcm90bzohMCxmb3JjZWQ6RGF0ZS5wcm90b3R5cGUudG9JU09TdHJpbmchPT1vfSx7dG9JU09TdHJpbmc6b30pfSwzNjIzMzpmdW5jdGlvbih0LGUsbil7InVzZSBzdHJpY3QiO3ZhciByPW4oMTQwNDQpLG89bigzMjE4NyksaT1uKDE5MjA5KSxhPW4oNTM0OTgpO3Ioe3RhcmdldDoiRGF0ZSIscHJvdG86ITAsZm9yY2VkOm8oKGZ1bmN0aW9uKCl7cmV0dXJuIG51bGwhPT1uZXcgRGF0ZShOYU4pLnRvSlNPTigpfHwxIT09RGF0ZS5wcm90b3R5cGUudG9KU09OLmNhbGwoe3RvSVNPU3RyaW5nOmZ1bmN0aW9uKCl7cmV0dXJuIDF9fSl9KSl9LHt0b0pTT046ZnVuY3Rpb24odCl7dmFyIGU9aSh0aGlzKSxuPWEoZSk7cmV0dXJuIm51bWJlciIhPXR5cGVvZiBufHxpc0Zpbml0ZShuKT9lLnRvSVNPU3RyaW5nKCk6bnVsbH19KX0sODQwNzpmdW5jdGlvbih0LGUsbil7dmFyIHI9big2Njk3MSksbz1uKDc2OTc0KSxpPW4oMjM3MjQpKCJ0b1ByaW1pdGl2ZSIpLGE9RGF0ZS5wcm90b3R5cGU7aSBpbiBhfHxyKGEsaSxvKX0sMjEzNzY6ZnVuY3Rpb24odCxlLG4pe3ZhciByPW4oOTI5MTMpLG89RGF0ZS5wcm90b3R5cGUsaT0iSW52YWxpZCBEYXRlIixhPSJ0b1N0cmluZyIsYz1vLnRvU3RyaW5nLHM9by5nZXRUaW1lO25ldyBEYXRlKE5hTikrIiIhPWkmJnIobyxhLChmdW5jdGlvbigpe3ZhciB0PXMuY2FsbCh0aGlzKTtyZXR1cm4gdD09dD9jLmNhbGwodGhpcyk6aX0pKX0sOTY0OTg6ZnVuY3Rpb24odCxlLG4pe24oMTQwNDQpKHt0YXJnZXQ6IkZ1bmN0aW9uIixwcm90bzohMH0se2JpbmQ6big3MzczOSl9KX0sNzU4OTQ6ZnVuY3Rpb24odCxlLG4peyJ1c2Ugc3RyaWN0Ijt2YXIgcj1uKDEwNTkyKSxvPW4oMzc2MjApLGk9big2NDk2NSksYT1uKDIzNzI0KSgiaGFzSW5zdGFuY2UiKSxjPUZ1bmN0aW9uLnByb3RvdHlwZTthIGluIGN8fG8uZihjLGEse3ZhbHVlOmZ1bmN0aW9uKHQpe2lmKCJmdW5jdGlvbiIhPXR5cGVvZiB0aGlzfHwhcih0KSlyZXR1cm4hMTtpZighcih0aGlzLnByb3RvdHlwZSkpcmV0dXJuIHQgaW5zdGFuY2VvZiB0aGlzO2Zvcig7dD1pKHQpOylpZih0aGlzLnByb3RvdHlwZT09PXQpcmV0dXJuITA7cmV0dXJuITF9fSl9LDIyNDQyOmZ1bmN0aW9uKHQsZSxuKXt2YXIgcj1uKDYyNTU2KSxvPW4oMzc2MjApLmYsaT1GdW5jdGlvbi5wcm90b3R5cGUsYT1pLnRvU3RyaW5nLGM9L15ccypmdW5jdGlvbiAoW14gKF0qKS8scz0ibmFtZSI7ciYmIShzIGluIGkpJiZvKGkscyx7Y29uZmlndXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3RyeXtyZXR1cm4gYS5jYWxsKHRoaXMpLm1hdGNoKGMpWzFdfWNhdGNoKHQpe3JldHVybiIifX19KX0sNzE2MjI6ZnVuY3Rpb24odCxlLG4pe24oMTQwNDQpKHtnbG9iYWw6ITB9LHtnbG9iYWxUaGlzOm4oODk1NTgpfSl9LDE2NTA6ZnVuY3Rpb24odCxlLG4pe3ZhciByPW4oMTQwNDQpLG89big3NzAxKSxpPW4oMzIxODcpLGE9bygiSlNPTiIsInN0cmluZ2lmeSIpLGM9L1tcdUQ4MDAtXHVERkZGXS9nLHM9L15bXHVEODAwLVx1REJGRl0kLyx1PS9eW1x1REMwMC1cdURGRkZdJC8sbD1mdW5jdGlvbih0LGUsbil7dmFyIHI9bi5jaGFyQXQoZS0xKSxvPW4uY2hhckF0KGUrMSk7cmV0dXJuIHMudGVzdCh0KSYmIXUudGVzdChvKXx8dS50ZXN0KHQpJiYhcy50ZXN0KHIpPyJcXHUiK3QuY2hhckNvZGVBdCgwKS50b1N0cmluZygxNik6dH0sZj1pKChmdW5jdGlvbigpe3JldHVybiciXFx1ZGYwNlxcdWQ4MzQiJyE9PWEoIlx1ZGYwNlx1ZDgzNCIpfHwnIlxcdWRlYWQiJyE9PWEoIlx1ZGVhZCIpfSkpO2EmJnIoe3RhcmdldDoiSlNPTiIsc3RhdDohMCxmb3JjZWQ6Zn0se3N0cmluZ2lmeTpmdW5jdGlvbih0LGUsbil7dmFyIHI9YS5hcHBseShudWxsLGFyZ3VtZW50cyk7cmV0dXJuInN0cmluZyI9PXR5cGVvZiByP3IucmVwbGFjZShjLGwpOnJ9fSl9LDgxMTA0OmZ1bmN0aW9uKHQsZSxuKXt2YXIgcj1uKDg5NTU4KTtuKDUxMTI4KShyLkpTT04sIkpTT04iLCEwKX0sOTQ5MDY6ZnVuY3Rpb24odCxlLG4peyJ1c2Ugc3RyaWN0Ijt2YXIgcj1uKDgxOTUxKSxvPW4oNjQ1MCk7dC5leHBvcnRzPXIoIk1hcCIsKGZ1bmN0aW9uKHQpe3JldHVybiBmdW5jdGlvbigpe3JldHVybiB0KHRoaXMsYXJndW1lbnRzLmxlbmd0aD9hcmd1bWVudHNbMF06dm9pZCAwKX19KSxvKX0sMjEwMzI6ZnVuY3Rpb24odCxlLG4pe3ZhciByPW4oMTQwNDQpLG89bigyMTkzMiksaT1NYXRoLmFjb3NoLGE9TWF0aC5sb2csYz1NYXRoLnNxcnQscz1NYXRoLkxOMjtyKHt0YXJnZXQ6Ik1hdGgiLHN0YXQ6ITAsZm9yY2VkOiFpfHw3MTAhPU1hdGguZmxvb3IoaShOdW1iZXIuTUFYX1ZBTFVFKSl8fGkoMS8wKSE9MS8wfSx7YWNvc2g6ZnVuY3Rpb24odCl7cmV0dXJuKHQ9K3QpPDE/TmFOOnQ+OTQ5MDYyNjUuNjI0MjUxNTY/YSh0KStzOm8odC0xK2ModC0xKSpjKHQrMSkpfX0pfSwzNzkzNjpmdW5jdGlvbih0LGUsbil7dmFyIHI9bigxNDA0NCksbz1NYXRoLmFzaW5oLGk9TWF0aC5sb2csYT1NYXRoLnNxcnQ7cih7dGFyZ2V0OiJNYXRoIixzdGF0OiEwLGZvcmNlZDohKG8mJjEvbygwKT4wKX0se2FzaW5oOmZ1bmN0aW9uIHQoZSl7cmV0dXJuIGlzRmluaXRlKGU9K2UpJiYwIT1lP2U8MD8tdCgtZSk6aShlK2EoZSplKzEpKTplfX0pfSw5Mzk5NTpmdW5jdGlvbih0LGUsbil7dmFyIHI9bigxNDA0NCksbz1NYXRoLmF0YW5oLGk9TWF0aC5sb2c7cih7dGFyZ2V0OiJNYXRoIixzdGF0OiEwLGZvcmNlZDohKG8mJjEvbygtMCk8MCl9LHthdGFuaDpmdW5jdGlvbih0KXtyZXR1cm4gMD09KHQ9K3QpP3Q6aSgoMSt0KS8oMS10KSkvMn19KX0sMTMzOTM6ZnVuY3Rpb24odCxlLG4pe3ZhciByPW4oMTQwNDQpLG89bigzODc4NyksaT1NYXRoLmFicyxhPU1hdGgucG93O3Ioe3RhcmdldDoiTWF0aCIsc3RhdDohMH0se2NicnQ6ZnVuY3Rpb24odCl7cmV0dXJuIG8odD0rdCkqYShpKHQpLDEvMyl9fSl9LDExMjgxOmZ1bmN0aW9uKHQsZSxuKXt2YXIgcj1uKDE0MDQ0KSxvPU1hdGguZmxvb3IsaT1NYXRoLmxvZyxhPU1hdGguTE9HMkU7cih7dGFyZ2V0OiJNYXRoIixzdGF0OiEwfSx7Y2x6MzI6ZnVuY3Rpb24odCl7cmV0dXJuKHQ+Pj49MCk/MzEtbyhpKHQrLjUpKmEpOjMyfX0pfSwzODAzNjpmdW5jdGlvbih0LGUsbil7dmFyIHI9bigxNDA0NCksbz1uKDcyOTcwKSxpPU1hdGguY29zaCxhPU1hdGguYWJzLGM9TWF0aC5FO3Ioe3RhcmdldDoiTWF0aCIsc3RhdDohMCxmb3JjZWQ6IWl8fGkoNzEwKT09PTEvMH0se2Nvc2g6ZnVuY3Rpb24odCl7dmFyIGU9byhhKHQpLTEpKzE7cmV0dXJuKGUrMS8oZSpjKmMpKSooYy8yKX19KX0sMTEzODpmdW5jdGlvbih0LGUsbil7dmFyIHI9bigxNDA0NCksbz1uKDcyOTcwKTtyKHt0YXJnZXQ6Ik1hdGgiLHN0YXQ6ITAsZm9yY2VkOm8hPU1hdGguZXhwbTF9LHtleHBtMTpvfSl9LDQ2MDc4OmZ1bmN0aW9uKHQsZSxuKXtuKDE0MDQ0KSh7dGFyZ2V0OiJNYXRoIixzdGF0OiEwfSx7ZnJvdW5kOm4oNTMyNTEpfSl9LDMwMDgzOmZ1bmN0aW9uKHQsZSxuKXt2YXIgcj1uKDE0MDQ0KSxvPU1hdGguaHlwb3QsaT1NYXRoLmFicyxhPU1hdGguc3FydDtyKHt0YXJnZXQ6Ik1hdGgiLHN0YXQ6ITAsZm9yY2VkOiEhbyYmbygxLzAsTmFOKSE9PTEvMH0se2h5cG90OmZ1bmN0aW9uKHQsZSl7Zm9yKHZhciBuLHIsbz0wLGM9MCxzPWFyZ3VtZW50cy5sZW5ndGgsdT0wO2M8czspdTwobj1pKGFyZ3VtZW50c1tjKytdKSk/KG89byoocj11L24pKnIrMSx1PW4pOm8rPW4+MD8ocj1uL3UpKnI6bjtyZXR1cm4gdT09PTEvMD8xLzA6dSphKG8pfX0pfSw0NzM4MzpmdW5jdGlvbih0LGUsbil7dmFyIHI9bigxNDA0NCksbz1uKDMyMTg3KSxpPU1hdGguaW11bDtyKHt0YXJnZXQ6Ik1hdGgiLHN0YXQ6ITAsZm9yY2VkOm8oKGZ1bmN0aW9uKCl7cmV0dXJuLTUhPWkoNDI5NDk2NzI5NSw1KXx8MiE9aS5sZW5ndGh9KSl9LHtpbXVsOmZ1bmN0aW9uKHQsZSl7dmFyIG49NjU1MzUscj0rdCxvPStlLGk9biZyLGE9biZvO3JldHVybiAwfGkqYSsoKG4mcj4+PjE2KSphK2kqKG4mbz4+PjE2KTw8MTY+Pj4wKX19KX0sNzE1NTg6ZnVuY3Rpb24odCxlLG4pe3ZhciByPW4oMTQwNDQpLG89TWF0aC5sb2csaT1NYXRoLkxPRzEwRTtyKHt0YXJnZXQ6Ik1hdGgiLHN0YXQ6ITB9LHtsb2cxMDpmdW5jdGlvbih0KXtyZXR1cm4gbyh0KSppfX0pfSw5OTIxODpmdW5jdGlvbih0LGUsbil7bigxNDA0NCkoe3RhcmdldDoiTWF0aCIsc3RhdDohMH0se2xvZzFwOm4oMjE5MzIpfSl9LDk4OTc4OmZ1bmN0aW9uKHQsZSxuKXt2YXIgcj1uKDE0MDQ0KSxvPU1hdGgubG9nLGk9TWF0aC5MTjI7cih7dGFyZ2V0OiJNYXRoIixzdGF0OiEwfSx7bG9nMjpmdW5jdGlvbih0KXtyZXR1cm4gbyh0KS9pfX0pfSw4MDY5OmZ1bmN0aW9uKHQsZSxuKXtuKDE0MDQ0KSh7dGFyZ2V0OiJNYXRoIixzdGF0OiEwfSx7c2lnbjpuKDM4Nzg3KX0pfSw3MDIwNDpmdW5jdGlvbih0LGUsbil7dmFyIHI9bigxNDA0NCksbz1uKDMyMTg3KSxpPW4oNzI5NzApLGE9TWF0aC5hYnMsYz1NYXRoLmV4cCxzPU1hdGguRTtyKHt0YXJnZXQ6Ik1hdGgiLHN0YXQ6ITAsZm9yY2VkOm8oKGZ1bmN0aW9uKCl7cmV0dXJuLTJlLTE3IT1NYXRoLnNpbmgoLTJlLTE3KX0pKX0se3Npbmg6ZnVuY3Rpb24odCl7cmV0dXJuIGEodD0rdCk8MT8oaSh0KS1pKC10KSkvMjooYyh0LTEpLWMoLXQtMSkpKihzLzIpfX0pfSw4NTc1ODpmdW5jdGlvbih0LGUsbil7dmFyIHI9bigxNDA0NCksbz1uKDcyOTcwKSxpPU1hdGguZXhwO3Ioe3RhcmdldDoiTWF0aCIsc3RhdDohMH0se3Rhbmg6ZnVuY3Rpb24odCl7dmFyIGU9byh0PSt0KSxuPW8oLXQpO3JldHVybiBlPT0xLzA/MTpuPT0xLzA/LTE6KGUtbikvKGkodCkraSgtdCkpfX0pfSwxMTc3MzpmdW5jdGlvbih0LGUsbil7big1MTEyOCkoTWF0aCwiTWF0aCIsITApfSwxNTc2MzpmdW5jdGlvbih0LGUsbil7dmFyIHI9bigxNDA0NCksbz1NYXRoLmNlaWwsaT1NYXRoLmZsb29yO3Ioe3RhcmdldDoiTWF0aCIsc3RhdDohMH0se3RydW5jOmZ1bmN0aW9uKHQpe3JldHVybih0PjA/aTpvKSh0KX19KX0sNzE4Mjc6ZnVuY3Rpb24odCxlLG4peyJ1c2Ugc3RyaWN0Ijt2YXIgcj1uKDYyNTU2KSxvPW4oODk1NTgpLGk9big2NDUwNCksYT1uKDkyOTEzKSxjPW4oNzYyOTgpLHM9bigyNDU5NCksdT1uKDMwMjcyKSxsPW4oNTM0OTgpLGY9bigzMjE4NyksZD1uKDUwODY4KSxwPW4oMTMzMzQpLmYsaD1uKDk3MjU3KS5mLHY9bigzNzYyMCkuZixnPW4oODIzNTApLnRyaW0seT0iTnVtYmVyIixtPW8uTnVtYmVyLGI9bS5wcm90b3R5cGUseD1zKGQoYikpPT15LHc9ZnVuY3Rpb24odCl7dmFyIGUsbixyLG8saSxhLGMscyx1PWwodCwhMSk7aWYoInN0cmluZyI9PXR5cGVvZiB1JiZ1Lmxlbmd0aD4yKWlmKDQzPT09KGU9KHU9Zyh1KSkuY2hhckNvZGVBdCgwKSl8fDQ1PT09ZSl7aWYoODg9PT0obj11LmNoYXJDb2RlQXQoMikpfHwxMjA9PT1uKXJldHVybiBOYU59ZWxzZSBpZig0OD09PWUpe3N3aXRjaCh1LmNoYXJDb2RlQXQoMSkpe2Nhc2UgNjY6Y2FzZSA5ODpyPTIsbz00OTticmVhaztjYXNlIDc5OmNhc2UgMTExOnI9OCxvPTU1O2JyZWFrO2RlZmF1bHQ6cmV0dXJuK3V9Zm9yKGE9KGk9dS5zbGljZSgyKSkubGVuZ3RoLGM9MDtjPGE7YysrKWlmKChzPWkuY2hhckNvZGVBdChjKSk8NDh8fHM+bylyZXR1cm4gTmFOO3JldHVybiBwYXJzZUludChpLHIpfXJldHVybit1fTtpZihpKHksIW0oIiAwbzEiKXx8IW0oIjBiMSIpfHxtKCIrMHgxIikpKXtmb3IodmFyIEUsaj1mdW5jdGlvbih0KXt2YXIgZT1hcmd1bWVudHMubGVuZ3RoPDE/MDp0LG49dGhpcztyZXR1cm4gbiBpbnN0YW5jZW9mIGomJih4P2YoKGZ1bmN0aW9uKCl7Yi52YWx1ZU9mLmNhbGwobil9KSk6cyhuKSE9eSk/dShuZXcgbSh3KGUpKSxuLGopOncoZSl9LEM9cj9wKG0pOiJNQVhfVkFMVUUsTUlOX1ZBTFVFLE5hTixORUdBVElWRV9JTkZJTklUWSxQT1NJVElWRV9JTkZJTklUWSxFUFNJTE9OLGlzRmluaXRlLGlzSW50ZWdlcixpc05hTixpc1NhZmVJbnRlZ2VyLE1BWF9TQUZFX0lOVEVHRVIsTUlOX1NBRkVfSU5URUdFUixwYXJzZUZsb2F0LHBhcnNlSW50LGlzSW50ZWdlciIuc3BsaXQoIiwiKSxrPTA7Qy5sZW5ndGg+aztrKyspYyhtLEU9Q1trXSkmJiFjKGosRSkmJnYoaixFLGgobSxFKSk7ai5wcm90b3R5cGU9YixiLmNvbnN0cnVjdG9yPWosYShvLHksail9fSwyNjA2MzpmdW5jdGlvbih0LGUsbil7bigxNDA0NCkoe3RhcmdldDoiTnVtYmVyIixzdGF0OiEwfSx7RVBTSUxPTjpNYXRoLnBvdygyLC01Mil9KX0sOTY3OmZ1bmN0aW9uKHQsZSxuKXtuKDE0MDQ0KSh7dGFyZ2V0OiJOdW1iZXIiLHN0YXQ6ITB9LHtpc0Zpbml0ZTpuKDg5NTQyKX0pfSwzMzEwMDpmdW5jdGlvbih0LGUsbil7bigxNDA0NCkoe3RhcmdldDoiTnVtYmVyIixzdGF0OiEwfSx7aXNJbnRlZ2VyOm4oMzgyNTcpfSl9LDQxOTI4OmZ1bmN0aW9uKHQsZSxuKXtuKDE0MDQ0KSh7dGFyZ2V0OiJOdW1iZXIiLHN0YXQ6ITB9LHtpc05hTjpmdW5jdGlvbih0KXtyZXR1cm4gdCE9dH19KX0sMTU4Njk6ZnVuY3Rpb24odCxlLG4pe3ZhciByPW4oMTQwNDQpLG89bigzODI1NyksaT1NYXRoLmFicztyKHt0YXJnZXQ6Ik51bWJlciIsc3RhdDohMH0se2lzU2FmZUludGVnZXI6ZnVuY3Rpb24odCl7cmV0dXJuIG8odCkmJmkodCk8PTkwMDcxOTkyNTQ3NDA5OTF9fSl9LDg4NzE1OmZ1bmN0aW9uKHQsZSxuKXtuKDE0MDQ0KSh7dGFyZ2V0OiJOdW1iZXIiLHN0YXQ6ITB9LHtNQVhfU0FGRV9JTlRFR0VSOjkwMDcxOTkyNTQ3NDA5OTF9KX0sMzY5OTU6ZnVuY3Rpb24odCxlLG4pe24oMTQwNDQpKHt0YXJnZXQ6Ik51bWJlciIsc3RhdDohMH0se01JTl9TQUZFX0lOVEVHRVI6LTkwMDcxOTkyNTQ3NDA5OTF9KX0sMTEyMjQ6ZnVuY3Rpb24odCxlLG4pe3ZhciByPW4oMTQwNDQpLG89bigyNDQ5Nyk7cih7dGFyZ2V0OiJOdW1iZXIiLHN0YXQ6ITAsZm9yY2VkOk51bWJlci5wYXJzZUZsb2F0IT1vfSx7cGFyc2VGbG9hdDpvfSl9LDYzNzY1OmZ1bmN0aW9uKHQsZSxuKXt2YXIgcj1uKDE0MDQ0KSxvPW4oNzg0Nik7cih7dGFyZ2V0OiJOdW1iZXIiLHN0YXQ6ITAsZm9yY2VkOk51bWJlci5wYXJzZUludCE9b30se3BhcnNlSW50Om99KX0sMTMwNjQ6ZnVuY3Rpb24odCxlLG4peyJ1c2Ugc3RyaWN0Ijt2YXIgcj1uKDE0MDQ0KSxvPW4oNDM0MTYpLGk9big1Mzk5NyksYT1uKDY4MjUzKSxjPW4oMzIxODcpLHM9MS4udG9GaXhlZCx1PU1hdGguZmxvb3IsbD1mdW5jdGlvbih0LGUsbil7cmV0dXJuIDA9PT1lP246ZSUyPT0xP2wodCxlLTEsbip0KTpsKHQqdCxlLzIsbil9O3Ioe3RhcmdldDoiTnVtYmVyIixwcm90bzohMCxmb3JjZWQ6cyYmKCIwLjAwMCIhPT04ZS01LnRvRml4ZWQoMyl8fCIxIiE9PS45LnRvRml4ZWQoMCl8fCIxLjI1IiE9PTEuMjU1LnRvRml4ZWQoMil8fCIxMDAwMDAwMDAwMDAwMDAwMTI4IiE9PSgweGRlMGI2YjNhNzY0MDA4MCkudG9GaXhlZCgwKSl8fCFjKChmdW5jdGlvbigpe3MuY2FsbCh7fSl9KSl9LHt0b0ZpeGVkOmZ1bmN0aW9uKHQpe3ZhciBlLG4scixjLHM9aSh0aGlzKSxmPW8odCksZD1bMCwwLDAsMCwwLDBdLHA9IiIsaD0iMCIsdj1mdW5jdGlvbih0LGUpe2Zvcih2YXIgbj0tMSxyPWU7KytuPDY7KXIrPXQqZFtuXSxkW25dPXIlMWU3LHI9dShyLzFlNyl9LGc9ZnVuY3Rpb24odCl7Zm9yKHZhciBlPTYsbj0wOy0tZT49MDspbis9ZFtlXSxkW2VdPXUobi90KSxuPW4ldCoxZTd9LHk9ZnVuY3Rpb24oKXtmb3IodmFyIHQ9NixlPSIiOy0tdD49MDspaWYoIiIhPT1lfHwwPT09dHx8MCE9PWRbdF0pe3ZhciBuPVN0cmluZyhkW3RdKTtlPSIiPT09ZT9uOmUrYS5jYWxsKCIwIiw3LW4ubGVuZ3RoKStufXJldHVybiBlfTtpZihmPDB8fGY+MjApdGhyb3cgUmFuZ2VFcnJvcigiSW5jb3JyZWN0IGZyYWN0aW9uIGRpZ2l0cyIpO2lmKHMhPXMpcmV0dXJuIk5hTiI7aWYoczw9LTFlMjF8fHM+PTFlMjEpcmV0dXJuIFN0cmluZyhzKTtpZihzPDAmJihwPSItIixzPS1zKSxzPjFlLTIxKWlmKG49KGU9ZnVuY3Rpb24odCl7Zm9yKHZhciBlPTAsbj10O24+PTQwOTY7KWUrPTEyLG4vPTQwOTY7Zm9yKDtuPj0yOyllKz0xLG4vPTI7cmV0dXJuIGV9KHMqbCgyLDY5LDEpKS02OSk8MD9zKmwoMiwtZSwxKTpzL2woMixlLDEpLG4qPTQ1MDM1OTk2MjczNzA0OTYsKGU9NTItZSk+MCl7Zm9yKHYoMCxuKSxyPWY7cj49NzspdigxZTcsMCksci09Nztmb3IodihsKDEwLHIsMSksMCkscj1lLTE7cj49MjM7KWcoMTw8MjMpLHItPTIzO2coMTw8ciksdigxLDEpLGcoMiksaD15KCl9ZWxzZSB2KDAsbiksdigxPDwtZSwwKSxoPXkoKSthLmNhbGwoIjAiLGYpO3JldHVybiBoPWY+MD9wKygoYz1oLmxlbmd0aCk8PWY/IjAuIithLmNhbGwoIjAiLGYtYykraDpoLnNsaWNlKDAsYy1mKSsiLiIraC5zbGljZShjLWYpKTpwK2h9fSl9LDMyMjkzOmZ1bmN0aW9uKHQsZSxuKXsidXNlIHN0cmljdCI7dmFyIHI9bigxNDA0NCksbz1uKDMyMTg3KSxpPW4oNTM5OTcpLGE9MS4udG9QcmVjaXNpb247cih7dGFyZ2V0OiJOdW1iZXIiLHByb3RvOiEwLGZvcmNlZDpvKChmdW5jdGlvbigpe3JldHVybiIxIiE9PWEuY2FsbCgxLHZvaWQgMCl9KSl8fCFvKChmdW5jdGlvbigpe2EuY2FsbCh7fSl9KSl9LHt0b1ByZWNpc2lvbjpmdW5jdGlvbih0KXtyZXR1cm4gdm9pZCAwPT09dD9hLmNhbGwoaSh0aGlzKSk6YS5jYWxsKGkodGhpcyksdCl9fSl9LDM3NDgxOmZ1bmN0aW9uKHQsZSxuKXt2YXIgcj1uKDE0MDQ0KSxvPW4oNzg2ODUpO3Ioe3RhcmdldDoiT2JqZWN0IixzdGF0OiEwLGZvcmNlZDpPYmplY3QuYXNzaWduIT09b30se2Fzc2lnbjpvfSl9LDQ1NTUwOmZ1bmN0aW9uKHQsZSxuKXtuKDE0MDQ0KSh7dGFyZ2V0OiJPYmplY3QiLHN0YXQ6ITAsc2hhbTohbig2MjU1Nil9LHtjcmVhdGU6big1MDg2OCl9KX0sMTkyNzg6ZnVuY3Rpb24odCxlLG4peyJ1c2Ugc3RyaWN0Ijt2YXIgcj1uKDE0MDQ0KSxvPW4oNjI1NTYpLGk9big0NzgxMiksYT1uKDE5MjA5KSxjPW4oODY0NzApLHM9bigzNzYyMCk7byYmcih7dGFyZ2V0OiJPYmplY3QiLHByb3RvOiEwLGZvcmNlZDppfSx7X19kZWZpbmVHZXR0ZXJfXzpmdW5jdGlvbih0LGUpe3MuZihhKHRoaXMpLHQse2dldDpjKGUpLGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwfSl9fSl9LDUxMTczOmZ1bmN0aW9uKHQsZSxuKXt2YXIgcj1uKDE0MDQ0KSxvPW4oNjI1NTYpO3Ioe3RhcmdldDoiT2JqZWN0IixzdGF0OiEwLGZvcmNlZDohbyxzaGFtOiFvfSx7ZGVmaW5lUHJvcGVydGllczpuKDg2NDAxKX0pfSw1ODE2NTpmdW5jdGlvbih0LGUsbil7dmFyIHI9bigxNDA0NCksbz1uKDYyNTU2KTtyKHt0YXJnZXQ6Ik9iamVjdCIsc3RhdDohMCxmb3JjZWQ6IW8sc2hhbTohb30se2RlZmluZVByb3BlcnR5Om4oMzc2MjApLmZ9KX0sOTEyMDk6ZnVuY3Rpb24odCxlLG4peyJ1c2Ugc3RyaWN0Ijt2YXIgcj1uKDE0MDQ0KSxvPW4oNjI1NTYpLGk9big0NzgxMiksYT1uKDE5MjA5KSxjPW4oODY0NzApLHM9bigzNzYyMCk7byYmcih7dGFyZ2V0OiJPYmplY3QiLHByb3RvOiEwLGZvcmNlZDppfSx7X19kZWZpbmVTZXR0ZXJfXzpmdW5jdGlvbih0LGUpe3MuZihhKHRoaXMpLHQse3NldDpjKGUpLGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwfSl9fSl9LDg3NDM6ZnVuY3Rpb24odCxlLG4pe3ZhciByPW4oMTQwNDQpLG89bigzNTY3KS5lbnRyaWVzO3Ioe3RhcmdldDoiT2JqZWN0IixzdGF0OiEwfSx7ZW50cmllczpmdW5jdGlvbih0KXtyZXR1cm4gbyh0KX19KX0sNzU4MDQ6ZnVuY3Rpb24odCxlLG4pe3ZhciByPW4oMTQwNDQpLG89big3NDUyMCksaT1uKDMyMTg3KSxhPW4oMTA1OTIpLGM9big5NjAzKS5vbkZyZWV6ZSxzPU9iamVjdC5mcmVlemU7cih7dGFyZ2V0OiJPYmplY3QiLHN0YXQ6ITAsZm9yY2VkOmkoKGZ1bmN0aW9uKCl7cygxKX0pKSxzaGFtOiFvfSx7ZnJlZXplOmZ1bmN0aW9uKHQpe3JldHVybiBzJiZhKHQpP3MoYyh0KSk6dH19KX0sNDYxNDY6ZnVuY3Rpb24odCxlLG4pe3ZhciByPW4oMTQwNDQpLG89big0MTMzNCksaT1uKDU4ODEwKTtyKHt0YXJnZXQ6Ik9iamVjdCIsc3RhdDohMH0se2Zyb21FbnRyaWVzOmZ1bmN0aW9uKHQpe3ZhciBlPXt9O3JldHVybiBvKHQsKGZ1bmN0aW9uKHQsbil7aShlLHQsbil9KSx2b2lkIDAsITApLGV9fSl9LDE1MDc3OmZ1bmN0aW9uKHQsZSxuKXt2YXIgcj1uKDE0MDQ0KSxvPW4oMzIxODcpLGk9big5NTczKSxhPW4oOTcyNTcpLmYsYz1uKDYyNTU2KSxzPW8oKGZ1bmN0aW9uKCl7YSgxKX0pKTtyKHt0YXJnZXQ6Ik9iamVjdCIsc3RhdDohMCxmb3JjZWQ6IWN8fHMsc2hhbTohY30se2dldE93blByb3BlcnR5RGVzY3JpcHRvcjpmdW5jdGlvbih0LGUpe3JldHVybiBhKGkodCksZSl9fSl9LDU4MzI5OmZ1bmN0aW9uKHQsZSxuKXt2YXIgcj1uKDE0MDQ0KSxvPW4oNjI1NTYpLGk9bigyNDQxNSksYT1uKDk1NzMpLGM9big5NzI1Nykscz1uKDU4ODEwKTtyKHt0YXJnZXQ6Ik9iamVjdCIsc3RhdDohMCxzaGFtOiFvfSx7Z2V0T3duUHJvcGVydHlEZXNjcmlwdG9yczpmdW5jdGlvbih0KXtmb3IodmFyIGUsbixyPWEodCksbz1jLmYsdT1pKHIpLGw9e30sZj0wO3UubGVuZ3RoPmY7KXZvaWQgMCE9PShuPW8ocixlPXVbZisrXSkpJiZzKGwsZSxuKTtyZXR1cm4gbH19KX0sNjA1MjU6ZnVuY3Rpb24odCxlLG4pe3ZhciByPW4oMTQwNDQpLG89bigzMjE4NyksaT1uKDI2OTM3KS5mO3Ioe3RhcmdldDoiT2JqZWN0IixzdGF0OiEwLGZvcmNlZDpvKChmdW5jdGlvbigpe3JldHVybiFPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcygxKX0pKX0se2dldE93blByb3BlcnR5TmFtZXM6aX0pfSw3NDk1MzpmdW5jdGlvbih0LGUsbil7dmFyIHI9bigxNDA0NCksbz1uKDMyMTg3KSxpPW4oMTkyMDkpLGE9big2NDk2NSksYz1uKDcxNjA4KTtyKHt0YXJnZXQ6Ik9iamVjdCIsc3RhdDohMCxmb3JjZWQ6bygoZnVuY3Rpb24oKXthKDEpfSkpLHNoYW06IWN9LHtnZXRQcm90b3R5cGVPZjpmdW5jdGlvbih0KXtyZXR1cm4gYShpKHQpKX19KX0sNTE2NjpmdW5jdGlvbih0LGUsbil7dmFyIHI9bigxNDA0NCksbz1uKDMyMTg3KSxpPW4oMTA1OTIpLGE9T2JqZWN0LmlzRXh0ZW5zaWJsZTtyKHt0YXJnZXQ6Ik9iamVjdCIsc3RhdDohMCxmb3JjZWQ6bygoZnVuY3Rpb24oKXthKDEpfSkpfSx7aXNFeHRlbnNpYmxlOmZ1bmN0aW9uKHQpe3JldHVybiEhaSh0KSYmKCFhfHxhKHQpKX19KX0sODk3NTg6ZnVuY3Rpb24odCxlLG4pe3ZhciByPW4oMTQwNDQpLG89bigzMjE4NyksaT1uKDEwNTkyKSxhPU9iamVjdC5pc0Zyb3plbjtyKHt0YXJnZXQ6Ik9iamVjdCIsc3RhdDohMCxmb3JjZWQ6bygoZnVuY3Rpb24oKXthKDEpfSkpfSx7aXNGcm96ZW46ZnVuY3Rpb24odCl7cmV0dXJuIWkodCl8fCEhYSYmYSh0KX19KX0sMTgzNzg6ZnVuY3Rpb24odCxlLG4pe3ZhciByPW4oMTQwNDQpLG89bigzMjE4NyksaT1uKDEwNTkyKSxhPU9iamVjdC5pc1NlYWxlZDtyKHt0YXJnZXQ6Ik9iamVjdCIsc3RhdDohMCxmb3JjZWQ6bygoZnVuY3Rpb24oKXthKDEpfSkpfSx7aXNTZWFsZWQ6ZnVuY3Rpb24odCl7cmV0dXJuIWkodCl8fCEhYSYmYSh0KX19KX0sNTQ3ODE6ZnVuY3Rpb24odCxlLG4pe24oMTQwNDQpKHt0YXJnZXQ6Ik9iamVjdCIsc3RhdDohMH0se2lzOm4oNzY0ODIpfSl9LDkyNTI6ZnVuY3Rpb24odCxlLG4pe3ZhciByPW4oMTQwNDQpLG89bigxOTIwOSksaT1uKDI1NTA3KTtyKHt0YXJnZXQ6Ik9iamVjdCIsc3RhdDohMCxmb3JjZWQ6bigzMjE4NykoKGZ1bmN0aW9uKCl7aSgxKX0pKX0se2tleXM6ZnVuY3Rpb24odCl7cmV0dXJuIGkobyh0KSl9fSl9LDcyNTYwOmZ1bmN0aW9uKHQsZSxuKXsidXNlIHN0cmljdCI7dmFyIHI9bigxNDA0NCksbz1uKDYyNTU2KSxpPW4oNDc4MTIpLGE9bigxOTIwOSksYz1uKDUzNDk4KSxzPW4oNjQ5NjUpLHU9big5NzI1NykuZjtvJiZyKHt0YXJnZXQ6Ik9iamVjdCIscHJvdG86ITAsZm9yY2VkOml9LHtfX2xvb2t1cEdldHRlcl9fOmZ1bmN0aW9uKHQpe3ZhciBlLG49YSh0aGlzKSxyPWModCwhMCk7ZG97aWYoZT11KG4scikpcmV0dXJuIGUuZ2V0fXdoaWxlKG49cyhuKSl9fSl9LDEwNjM6ZnVuY3Rpb24odCxlLG4peyJ1c2Ugc3RyaWN0Ijt2YXIgcj1uKDE0MDQ0KSxvPW4oNjI1NTYpLGk9big0NzgxMiksYT1uKDE5MjA5KSxjPW4oNTM0OTgpLHM9big2NDk2NSksdT1uKDk3MjU3KS5mO28mJnIoe3RhcmdldDoiT2JqZWN0Iixwcm90bzohMCxmb3JjZWQ6aX0se19fbG9va3VwU2V0dGVyX186ZnVuY3Rpb24odCl7dmFyIGUsbj1hKHRoaXMpLHI9Yyh0LCEwKTtkb3tpZihlPXUobixyKSlyZXR1cm4gZS5zZXR9d2hpbGUobj1zKG4pKX19KX0sOTMyNzI6ZnVuY3Rpb24odCxlLG4pe3ZhciByPW4oMTQwNDQpLG89bigxMDU5MiksaT1uKDk2MDMpLm9uRnJlZXplLGE9big3NDUyMCksYz1uKDMyMTg3KSxzPU9iamVjdC5wcmV2ZW50RXh0ZW5zaW9ucztyKHt0YXJnZXQ6Ik9iamVjdCIsc3RhdDohMCxmb3JjZWQ6YygoZnVuY3Rpb24oKXtzKDEpfSkpLHNoYW06IWF9LHtwcmV2ZW50RXh0ZW5zaW9uczpmdW5jdGlvbih0KXtyZXR1cm4gcyYmbyh0KT9zKGkodCkpOnR9fSl9LDU2MTU4OmZ1bmN0aW9uKHQsZSxuKXt2YXIgcj1uKDE0MDQ0KSxvPW4oMTA1OTIpLGk9big5NjAzKS5vbkZyZWV6ZSxhPW4oNzQ1MjApLGM9bigzMjE4Nykscz1PYmplY3Quc2VhbDtyKHt0YXJnZXQ6Ik9iamVjdCIsc3RhdDohMCxmb3JjZWQ6YygoZnVuY3Rpb24oKXtzKDEpfSkpLHNoYW06IWF9LHtzZWFsOmZ1bmN0aW9uKHQpe3JldHVybiBzJiZvKHQpP3MoaSh0KSk6dH19KX0sNDE0NTY6ZnVuY3Rpb24odCxlLG4pe24oMTQwNDQpKHt0YXJnZXQ6Ik9iamVjdCIsc3RhdDohMH0se3NldFByb3RvdHlwZU9mOm4oNzE4NDIpfSl9LDM0NTI5OmZ1bmN0aW9uKHQsZSxuKXt2YXIgcj1uKDkwNjEzKSxvPW4oOTI5MTMpLGk9bigxOTc1OCk7cnx8byhPYmplY3QucHJvdG90eXBlLCJ0b1N0cmluZyIsaSx7dW5zYWZlOiEwfSl9LDcyODUxOmZ1bmN0aW9uKHQsZSxuKXt2YXIgcj1uKDE0MDQ0KSxvPW4oMzU2NykudmFsdWVzO3Ioe3RhcmdldDoiT2JqZWN0IixzdGF0OiEwfSx7dmFsdWVzOmZ1bmN0aW9uKHQpe3JldHVybiBvKHQpfX0pfSwxOTQzMzpmdW5jdGlvbih0LGUsbil7dmFyIHI9bigxNDA0NCksbz1uKDI0NDk3KTtyKHtnbG9iYWw6ITAsZm9yY2VkOnBhcnNlRmxvYXQhPW99LHtwYXJzZUZsb2F0Om99KX0sMzM0Mzc6ZnVuY3Rpb24odCxlLG4pe3ZhciByPW4oMTQwNDQpLG89big3ODQ2KTtyKHtnbG9iYWw6ITAsZm9yY2VkOnBhcnNlSW50IT1vfSx7cGFyc2VJbnQ6b30pfSwxNzYyOTpmdW5jdGlvbih0LGUsbil7InVzZSBzdHJpY3QiO3ZhciByPW4oMTQwNDQpLG89big4NjQ3MCksaT1uKDgzMDgzKSxhPW4oMzExNSksYz1uKDQxMzM0KTtyKHt0YXJnZXQ6IlByb21pc2UiLHN0YXQ6ITB9LHthbGxTZXR0bGVkOmZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMsbj1pLmYoZSkscj1uLnJlc29sdmUscz1uLnJlamVjdCx1PWEoKGZ1bmN0aW9uKCl7dmFyIG49byhlLnJlc29sdmUpLGk9W10sYT0wLHM9MTtjKHQsKGZ1bmN0aW9uKHQpe3ZhciBvPWErKyxjPSExO2kucHVzaCh2b2lkIDApLHMrKyxuLmNhbGwoZSx0KS50aGVuKChmdW5jdGlvbih0KXtjfHwoYz0hMCxpW29dPXtzdGF0dXM6ImZ1bGZpbGxlZCIsdmFsdWU6dH0sLS1zfHxyKGkpKX0pLChmdW5jdGlvbih0KXtjfHwoYz0hMCxpW29dPXtzdGF0dXM6InJlamVjdGVkIixyZWFzb246dH0sLS1zfHxyKGkpKX0pKX0pKSwtLXN8fHIoaSl9KSk7cmV0dXJuIHUuZXJyb3ImJnModS52YWx1ZSksbi5wcm9taXNlfX0pfSw0MjQ5MDpmdW5jdGlvbih0LGUsbil7InVzZSBzdHJpY3QiO3ZhciByPW4oMTQwNDQpLG89big2NTY3MiksaT1uKDM5NDU3KSxhPW4oMzIxODcpLGM9big3NzAxKSxzPW4oMTM5NzkpLHU9big2MzEzNCksbD1uKDkyOTEzKTtyKHt0YXJnZXQ6IlByb21pc2UiLHByb3RvOiEwLHJlYWw6ITAsZm9yY2VkOiEhaSYmYSgoZnVuY3Rpb24oKXtpLnByb3RvdHlwZS5maW5hbGx5LmNhbGwoe3RoZW46ZnVuY3Rpb24oKXt9fSwoZnVuY3Rpb24oKXt9KSl9KSl9LHtmaW5hbGx5OmZ1bmN0aW9uKHQpe3ZhciBlPXModGhpcyxjKCJQcm9taXNlIikpLG49ImZ1bmN0aW9uIj09dHlwZW9mIHQ7cmV0dXJuIHRoaXMudGhlbihuP2Z1bmN0aW9uKG4pe3JldHVybiB1KGUsdCgpKS50aGVuKChmdW5jdGlvbigpe3JldHVybiBufSkpfTp0LG4/ZnVuY3Rpb24obil7cmV0dXJuIHUoZSx0KCkpLnRoZW4oKGZ1bmN0aW9uKCl7dGhyb3cgbn0pKX06dCl9fSksb3x8ImZ1bmN0aW9uIiE9dHlwZW9mIGl8fGkucHJvdG90eXBlLmZpbmFsbHl8fGwoaS5wcm90b3R5cGUsImZpbmFsbHkiLGMoIlByb21pc2UiKS5wcm90b3R5cGUuZmluYWxseSl9LDExNjg4OmZ1bmN0aW9uKHQsZSxuKXsidXNlIHN0cmljdCI7dmFyIHIsbyxpLGEsYz1uKDE0MDQ0KSxzPW4oNjU2NzIpLHU9big4OTU1OCksbD1uKDc3MDEpLGY9bigzOTQ1NyksZD1uKDkyOTEzKSxwPW4oMTkyNiksaD1uKDUxMTI4KSx2PW4oNjc1MzgpLGc9bigxMDU5MikseT1uKDg2NDcwKSxtPW4oNTkzNzkpLGI9bigyNDU5NCkseD1uKDc2NzczKSx3PW4oNDEzMzQpLEU9big0Nzk2KSxqPW4oMTM5NzkpLEM9bigyMTc0NCkuc2V0LGs9big2NTU1NSksUz1uKDYzMTM0KSxPPW4oODM2MjApLEE9big4MzA4MyksST1uKDMxMTUpLE09big4OTgyNyksVD1uKDY0NTA0KSxfPW4oMjM3MjQpLEw9big3OTA3MSksUj1fKCJzcGVjaWVzIiksUD0iUHJvbWlzZSIsTj1NLmdldCxEPU0uc2V0LEY9TS5nZXR0ZXJGb3IoUCksVT1mLEI9dS5UeXBlRXJyb3Isej11LmRvY3VtZW50LFY9dS5wcm9jZXNzLEg9bCgiZmV0Y2giKSxxPUEuZixXPXEsRz0icHJvY2VzcyI9PWIoViksWj0hISh6JiZ6LmNyZWF0ZUV2ZW50JiZ1LmRpc3BhdGNoRXZlbnQpLCQ9InVuaGFuZGxlZHJlamVjdGlvbiIsWT1UKFAsKGZ1bmN0aW9uKCl7aWYoISh4KFUpIT09U3RyaW5nKFUpKSl7aWYoNjY9PT1MKXJldHVybiEwO2lmKCFHJiYiZnVuY3Rpb24iIT10eXBlb2YgUHJvbWlzZVJlamVjdGlvbkV2ZW50KXJldHVybiEwfWlmKHMmJiFVLnByb3RvdHlwZS5maW5hbGx5KXJldHVybiEwO2lmKEw+PTUxJiYvbmF0aXZlIGNvZGUvLnRlc3QoVSkpcmV0dXJuITE7dmFyIHQ9VS5yZXNvbHZlKDEpLGU9ZnVuY3Rpb24odCl7dCgoZnVuY3Rpb24oKXt9KSwoZnVuY3Rpb24oKXt9KSl9O3JldHVybih0LmNvbnN0cnVjdG9yPXt9KVtSXT1lLCEodC50aGVuKChmdW5jdGlvbigpe30pKWluc3RhbmNlb2YgZSl9KSksSj1ZfHwhRSgoZnVuY3Rpb24odCl7VS5hbGwodCkuY2F0Y2goKGZ1bmN0aW9uKCl7fSkpfSkpLEs9ZnVuY3Rpb24odCl7dmFyIGU7cmV0dXJuISghZyh0KXx8ImZ1bmN0aW9uIiE9dHlwZW9mKGU9dC50aGVuKSkmJmV9LFg9ZnVuY3Rpb24odCxlLG4pe2lmKCFlLm5vdGlmaWVkKXtlLm5vdGlmaWVkPSEwO3ZhciByPWUucmVhY3Rpb25zO2soKGZ1bmN0aW9uKCl7Zm9yKHZhciBvPWUudmFsdWUsaT0xPT1lLnN0YXRlLGE9MDtyLmxlbmd0aD5hOyl7dmFyIGMscyx1LGw9clthKytdLGY9aT9sLm9rOmwuZmFpbCxkPWwucmVzb2x2ZSxwPWwucmVqZWN0LGg9bC5kb21haW47dHJ5e2Y/KGl8fCgyPT09ZS5yZWplY3Rpb24mJm50KHQsZSksZS5yZWplY3Rpb249MSksITA9PT1mP2M9bzooaCYmaC5lbnRlcigpLGM9ZihvKSxoJiYoaC5leGl0KCksdT0hMCkpLGM9PT1sLnByb21pc2U/cChCKCJQcm9taXNlLWNoYWluIGN5Y2xlIikpOihzPUsoYykpP3MuY2FsbChjLGQscCk6ZChjKSk6cChvKX1jYXRjaCh0KXtoJiYhdSYmaC5leGl0KCkscCh0KX19ZS5yZWFjdGlvbnM9W10sZS5ub3RpZmllZD0hMSxuJiYhZS5yZWplY3Rpb24mJnR0KHQsZSl9KSl9fSxRPWZ1bmN0aW9uKHQsZSxuKXt2YXIgcixvO1o/KChyPXouY3JlYXRlRXZlbnQoIkV2ZW50IikpLnByb21pc2U9ZSxyLnJlYXNvbj1uLHIuaW5pdEV2ZW50KHQsITEsITApLHUuZGlzcGF0Y2hFdmVudChyKSk6cj17cHJvbWlzZTplLHJlYXNvbjpufSwobz11WyJvbiIrdF0pP28ocik6dD09PSQmJk8oIlVuaGFuZGxlZCBwcm9taXNlIHJlamVjdGlvbiIsbil9LHR0PWZ1bmN0aW9uKHQsZSl7Qy5jYWxsKHUsKGZ1bmN0aW9uKCl7dmFyIG4scj1lLnZhbHVlO2lmKGV0KGUpJiYobj1JKChmdW5jdGlvbigpe0c/Vi5lbWl0KCJ1bmhhbmRsZWRSZWplY3Rpb24iLHIsdCk6USgkLHQscil9KSksZS5yZWplY3Rpb249R3x8ZXQoZSk/MjoxLG4uZXJyb3IpKXRocm93IG4udmFsdWV9KSl9LGV0PWZ1bmN0aW9uKHQpe3JldHVybiAxIT09dC5yZWplY3Rpb24mJiF0LnBhcmVudH0sbnQ9ZnVuY3Rpb24odCxlKXtDLmNhbGwodSwoZnVuY3Rpb24oKXtHP1YuZW1pdCgicmVqZWN0aW9uSGFuZGxlZCIsdCk6USgicmVqZWN0aW9uaGFuZGxlZCIsdCxlLnZhbHVlKX0pKX0scnQ9ZnVuY3Rpb24odCxlLG4scil7cmV0dXJuIGZ1bmN0aW9uKG8pe3QoZSxuLG8scil9fSxvdD1mdW5jdGlvbih0LGUsbixyKXtlLmRvbmV8fChlLmRvbmU9ITAsciYmKGU9ciksZS52YWx1ZT1uLGUuc3RhdGU9MixYKHQsZSwhMCkpfSxpdD1mdW5jdGlvbih0LGUsbixyKXtpZighZS5kb25lKXtlLmRvbmU9ITAsciYmKGU9cik7dHJ5e2lmKHQ9PT1uKXRocm93IEIoIlByb21pc2UgY2FuJ3QgYmUgcmVzb2x2ZWQgaXRzZWxmIik7dmFyIG89SyhuKTtvP2soKGZ1bmN0aW9uKCl7dmFyIHI9e2RvbmU6ITF9O3RyeXtvLmNhbGwobixydChpdCx0LHIsZSkscnQob3QsdCxyLGUpKX1jYXRjaChuKXtvdCh0LHIsbixlKX19KSk6KGUudmFsdWU9bixlLnN0YXRlPTEsWCh0LGUsITEpKX1jYXRjaChuKXtvdCh0LHtkb25lOiExfSxuLGUpfX19O1kmJihVPWZ1bmN0aW9uKHQpe20odGhpcyxVLFApLHkodCksci5jYWxsKHRoaXMpO3ZhciBlPU4odGhpcyk7dHJ5e3QocnQoaXQsdGhpcyxlKSxydChvdCx0aGlzLGUpKX1jYXRjaCh0KXtvdCh0aGlzLGUsdCl9fSwocj1mdW5jdGlvbih0KXtEKHRoaXMse3R5cGU6UCxkb25lOiExLG5vdGlmaWVkOiExLHBhcmVudDohMSxyZWFjdGlvbnM6W10scmVqZWN0aW9uOiExLHN0YXRlOjAsdmFsdWU6dm9pZCAwfSl9KS5wcm90b3R5cGU9cChVLnByb3RvdHlwZSx7dGhlbjpmdW5jdGlvbih0LGUpe3ZhciBuPUYodGhpcykscj1xKGoodGhpcyxVKSk7cmV0dXJuIHIub2s9ImZ1bmN0aW9uIiE9dHlwZW9mIHR8fHQsci5mYWlsPSJmdW5jdGlvbiI9PXR5cGVvZiBlJiZlLHIuZG9tYWluPUc/Vi5kb21haW46dm9pZCAwLG4ucGFyZW50PSEwLG4ucmVhY3Rpb25zLnB1c2gociksMCE9bi5zdGF0ZSYmWCh0aGlzLG4sITEpLHIucHJvbWlzZX0sY2F0Y2g6ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMudGhlbih2b2lkIDAsdCl9fSksbz1mdW5jdGlvbigpe3ZhciB0PW5ldyByLGU9Tih0KTt0aGlzLnByb21pc2U9dCx0aGlzLnJlc29sdmU9cnQoaXQsdCxlKSx0aGlzLnJlamVjdD1ydChvdCx0LGUpfSxBLmY9cT1mdW5jdGlvbih0KXtyZXR1cm4gdD09PVV8fHQ9PT1pP25ldyBvKHQpOlcodCl9LHN8fCJmdW5jdGlvbiIhPXR5cGVvZiBmfHwoYT1mLnByb3RvdHlwZS50aGVuLGQoZi5wcm90b3R5cGUsInRoZW4iLChmdW5jdGlvbih0LGUpe3ZhciBuPXRoaXM7cmV0dXJuIG5ldyBVKChmdW5jdGlvbih0LGUpe2EuY2FsbChuLHQsZSl9KSkudGhlbih0LGUpfSkse3Vuc2FmZTohMH0pLCJmdW5jdGlvbiI9PXR5cGVvZiBIJiZjKHtnbG9iYWw6ITAsZW51bWVyYWJsZTohMCxmb3JjZWQ6ITB9LHtmZXRjaDpmdW5jdGlvbih0KXtyZXR1cm4gUyhVLEguYXBwbHkodSxhcmd1bWVudHMpKX19KSkpLGMoe2dsb2JhbDohMCx3cmFwOiEwLGZvcmNlZDpZfSx7UHJvbWlzZTpVfSksaChVLFAsITEsITApLHYoUCksaT1sKFApLGMoe3RhcmdldDpQLHN0YXQ6ITAsZm9yY2VkOll9LHtyZWplY3Q6ZnVuY3Rpb24odCl7dmFyIGU9cSh0aGlzKTtyZXR1cm4gZS5yZWplY3QuY2FsbCh2b2lkIDAsdCksZS5wcm9taXNlfX0pLGMoe3RhcmdldDpQLHN0YXQ6ITAsZm9yY2VkOnN8fFl9LHtyZXNvbHZlOmZ1bmN0aW9uKHQpe3JldHVybiBTKHMmJnRoaXM9PT1pP1U6dGhpcyx0KX19KSxjKHt0YXJnZXQ6UCxzdGF0OiEwLGZvcmNlZDpKfSx7YWxsOmZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMsbj1xKGUpLHI9bi5yZXNvbHZlLG89bi5yZWplY3QsaT1JKChmdW5jdGlvbigpe3ZhciBuPXkoZS5yZXNvbHZlKSxpPVtdLGE9MCxjPTE7dyh0LChmdW5jdGlvbih0KXt2YXIgcz1hKyssdT0hMTtpLnB1c2godm9pZCAwKSxjKyssbi5jYWxsKGUsdCkudGhlbigoZnVuY3Rpb24odCl7dXx8KHU9ITAsaVtzXT10LC0tY3x8cihpKSl9KSxvKX0pKSwtLWN8fHIoaSl9KSk7cmV0dXJuIGkuZXJyb3ImJm8oaS52YWx1ZSksbi5wcm9taXNlfSxyYWNlOmZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMsbj1xKGUpLHI9bi5yZWplY3Qsbz1JKChmdW5jdGlvbigpe3ZhciBvPXkoZS5yZXNvbHZlKTt3KHQsKGZ1bmN0aW9uKHQpe28uY2FsbChlLHQpLnRoZW4obi5yZXNvbHZlLHIpfSkpfSkpO3JldHVybiBvLmVycm9yJiZyKG8udmFsdWUpLG4ucHJvbWlzZX19KX0sMjkyODQ6ZnVuY3Rpb24odCxlLG4pe3ZhciByPW4oMTQwNDQpLG89big3NzAxKSxpPW4oODY0NzApLGE9big4NzU3OSksYz1uKDMyMTg3KSxzPW8oIlJlZmxlY3QiLCJhcHBseSIpLHU9RnVuY3Rpb24uYXBwbHk7cih7dGFyZ2V0OiJSZWZsZWN0IixzdGF0OiEwLGZvcmNlZDohYygoZnVuY3Rpb24oKXtzKChmdW5jdGlvbigpe30pKX0pKX0se2FwcGx5OmZ1bmN0aW9uKHQsZSxuKXtyZXR1cm4gaSh0KSxhKG4pLHM/cyh0LGUsbik6dS5jYWxsKHQsZSxuKX19KX0sNjE5NDM6ZnVuY3Rpb24odCxlLG4pe3ZhciByPW4oMTQwNDQpLG89big3NzAxKSxpPW4oODY0NzApLGE9big4NzU3OSksYz1uKDEwNTkyKSxzPW4oNTA4NjgpLHU9big3MzczOSksbD1uKDMyMTg3KSxmPW8oIlJlZmxlY3QiLCJjb25zdHJ1Y3QiKSxkPWwoKGZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCgpe31yZXR1cm4hKGYoKGZ1bmN0aW9uKCl7fSksW10sdClpbnN0YW5jZW9mIHQpfSkpLHA9IWwoKGZ1bmN0aW9uKCl7ZigoZnVuY3Rpb24oKXt9KSl9KSksaD1kfHxwO3Ioe3RhcmdldDoiUmVmbGVjdCIsc3RhdDohMCxmb3JjZWQ6aCxzaGFtOmh9LHtjb25zdHJ1Y3Q6ZnVuY3Rpb24odCxlKXtpKHQpLGEoZSk7dmFyIG49YXJndW1lbnRzLmxlbmd0aDwzP3Q6aShhcmd1bWVudHNbMl0pO2lmKHAmJiFkKXJldHVybiBmKHQsZSxuKTtpZih0PT1uKXtzd2l0Y2goZS5sZW5ndGgpe2Nhc2UgMDpyZXR1cm4gbmV3IHQ7Y2FzZSAxOnJldHVybiBuZXcgdChlWzBdKTtjYXNlIDI6cmV0dXJuIG5ldyB0KGVbMF0sZVsxXSk7Y2FzZSAzOnJldHVybiBuZXcgdChlWzBdLGVbMV0sZVsyXSk7Y2FzZSA0OnJldHVybiBuZXcgdChlWzBdLGVbMV0sZVsyXSxlWzNdKX12YXIgcj1bbnVsbF07cmV0dXJuIHIucHVzaC5hcHBseShyLGUpLG5ldyh1LmFwcGx5KHQscikpfXZhciBvPW4ucHJvdG90eXBlLGw9cyhjKG8pP286T2JqZWN0LnByb3RvdHlwZSksaD1GdW5jdGlvbi5hcHBseS5jYWxsKHQsbCxlKTtyZXR1cm4gYyhoKT9oOmx9fSl9LDI2OTg2OmZ1bmN0aW9uKHQsZSxuKXt2YXIgcj1uKDE0MDQ0KSxvPW4oNjI1NTYpLGk9big4NzU3OSksYT1uKDUzNDk4KSxjPW4oMzc2MjApO3Ioe3RhcmdldDoiUmVmbGVjdCIsc3RhdDohMCxmb3JjZWQ6bigzMjE4NykoKGZ1bmN0aW9uKCl7UmVmbGVjdC5kZWZpbmVQcm9wZXJ0eShjLmYoe30sMSx7dmFsdWU6MX0pLDEse3ZhbHVlOjJ9KX0pKSxzaGFtOiFvfSx7ZGVmaW5lUHJvcGVydHk6ZnVuY3Rpb24odCxlLG4pe2kodCk7dmFyIHI9YShlLCEwKTtpKG4pO3RyeXtyZXR1cm4gYy5mKHQscixuKSwhMH1jYXRjaCh0KXtyZXR1cm4hMX19fSl9LDEzNjY6ZnVuY3Rpb24odCxlLG4pe3ZhciByPW4oMTQwNDQpLG89big4NzU3OSksaT1uKDk3MjU3KS5mO3Ioe3RhcmdldDoiUmVmbGVjdCIsc3RhdDohMH0se2RlbGV0ZVByb3BlcnR5OmZ1bmN0aW9uKHQsZSl7dmFyIG49aShvKHQpLGUpO3JldHVybiEobiYmIW4uY29uZmlndXJhYmxlKSYmZGVsZXRlIHRbZV19fSl9LDQ2NTk3OmZ1bmN0aW9uKHQsZSxuKXt2YXIgcj1uKDE0MDQ0KSxvPW4oNjI1NTYpLGk9big4NzU3OSksYT1uKDk3MjU3KTtyKHt0YXJnZXQ6IlJlZmxlY3QiLHN0YXQ6ITAsc2hhbTohb30se2dldE93blByb3BlcnR5RGVzY3JpcHRvcjpmdW5jdGlvbih0LGUpe3JldHVybiBhLmYoaSh0KSxlKX19KX0sNzAxMzY6ZnVuY3Rpb24odCxlLG4pe3ZhciByPW4oMTQwNDQpLG89big4NzU3OSksaT1uKDY0OTY1KTtyKHt0YXJnZXQ6IlJlZmxlY3QiLHN0YXQ6ITAsc2hhbTohbig3MTYwOCl9LHtnZXRQcm90b3R5cGVPZjpmdW5jdGlvbih0KXtyZXR1cm4gaShvKHQpKX19KX0sODMzMTA6ZnVuY3Rpb24odCxlLG4pe3ZhciByPW4oMTQwNDQpLG89bigxMDU5MiksaT1uKDg3NTc5KSxhPW4oNzYyOTgpLGM9big5NzI1Nykscz1uKDY0OTY1KTtyKHt0YXJnZXQ6IlJlZmxlY3QiLHN0YXQ6ITB9LHtnZXQ6ZnVuY3Rpb24gdChlLG4pe3ZhciByLHUsbD1hcmd1bWVudHMubGVuZ3RoPDM/ZTphcmd1bWVudHNbMl07cmV0dXJuIGkoZSk9PT1sP2Vbbl06KHI9Yy5mKGUsbikpP2EociwidmFsdWUiKT9yLnZhbHVlOnZvaWQgMD09PXIuZ2V0P3ZvaWQgMDpyLmdldC5jYWxsKGwpOm8odT1zKGUpKT90KHUsbixsKTp2b2lkIDB9fSl9LDYwODY1OmZ1bmN0aW9uKHQsZSxuKXtuKDE0MDQ0KSh7dGFyZ2V0OiJSZWZsZWN0IixzdGF0OiEwfSx7aGFzOmZ1bmN0aW9uKHQsZSl7cmV0dXJuIGUgaW4gdH19KX0sNjc3MDg6ZnVuY3Rpb24odCxlLG4pe3ZhciByPW4oMTQwNDQpLG89big4NzU3OSksaT1PYmplY3QuaXNFeHRlbnNpYmxlO3Ioe3RhcmdldDoiUmVmbGVjdCIsc3RhdDohMH0se2lzRXh0ZW5zaWJsZTpmdW5jdGlvbih0KXtyZXR1cm4gbyh0KSwhaXx8aSh0KX19KX0sOTY2Mzg6ZnVuY3Rpb24odCxlLG4pe24oMTQwNDQpKHt0YXJnZXQ6IlJlZmxlY3QiLHN0YXQ6ITB9LHtvd25LZXlzOm4oMjQ0MTUpfSl9LDM5NzMwOmZ1bmN0aW9uKHQsZSxuKXt2YXIgcj1uKDE0MDQ0KSxvPW4oNzcwMSksaT1uKDg3NTc5KTtyKHt0YXJnZXQ6IlJlZmxlY3QiLHN0YXQ6ITAsc2hhbTohbig3NDUyMCl9LHtwcmV2ZW50RXh0ZW5zaW9uczpmdW5jdGlvbih0KXtpKHQpO3RyeXt2YXIgZT1vKCJPYmplY3QiLCJwcmV2ZW50RXh0ZW5zaW9ucyIpO3JldHVybiBlJiZlKHQpLCEwfWNhdGNoKHQpe3JldHVybiExfX19KX0sODU2ODY6ZnVuY3Rpb24odCxlLG4pe3ZhciByPW4oMTQwNDQpLG89big4NzU3OSksaT1uKDc5ODYxKSxhPW4oNzE4NDIpO2EmJnIoe3RhcmdldDoiUmVmbGVjdCIsc3RhdDohMH0se3NldFByb3RvdHlwZU9mOmZ1bmN0aW9uKHQsZSl7byh0KSxpKGUpO3RyeXtyZXR1cm4gYSh0LGUpLCEwfWNhdGNoKHQpe3JldHVybiExfX19KX0sNzQxMTU6ZnVuY3Rpb24odCxlLG4pe3ZhciByPW4oMTQwNDQpLG89big4NzU3OSksaT1uKDEwNTkyKSxhPW4oNzYyOTgpLGM9bigzMjE4Nykscz1uKDM3NjIwKSx1PW4oOTcyNTcpLGw9big2NDk2NSksZj1uKDE0MjA5KTtyKHt0YXJnZXQ6IlJlZmxlY3QiLHN0YXQ6ITAsZm9yY2VkOmMoKGZ1bmN0aW9uKCl7dmFyIHQ9cy5mKHt9LCJhIix7Y29uZmlndXJhYmxlOiEwfSk7cmV0dXJuITEhPT1SZWZsZWN0LnNldChsKHQpLCJhIiwxLHQpfSkpfSx7c2V0OmZ1bmN0aW9uIHQoZSxuLHIpe3ZhciBjLGQscD1hcmd1bWVudHMubGVuZ3RoPDQ/ZTphcmd1bWVudHNbM10saD11LmYobyhlKSxuKTtpZighaCl7aWYoaShkPWwoZSkpKXJldHVybiB0KGQsbixyLHApO2g9ZigwKX1pZihhKGgsInZhbHVlIikpe2lmKCExPT09aC53cml0YWJsZXx8IWkocCkpcmV0dXJuITE7aWYoYz11LmYocCxuKSl7aWYoYy5nZXR8fGMuc2V0fHwhMT09PWMud3JpdGFibGUpcmV0dXJuITE7Yy52YWx1ZT1yLHMuZihwLG4sYyl9ZWxzZSBzLmYocCxuLGYoMCxyKSk7cmV0dXJuITB9cmV0dXJuIHZvaWQgMCE9PWguc2V0JiYoaC5zZXQuY2FsbChwLHIpLCEwKX19KX0sNDk0OTU6ZnVuY3Rpb24odCxlLG4pe3ZhciByPW4oNjI1NTYpLG89big4OTU1OCksaT1uKDY0NTA0KSxhPW4oMzAyNzIpLGM9bigzNzYyMCkuZixzPW4oMTMzMzQpLmYsdT1uKDQzMjIzKSxsPW4oMjU0MTkpLGY9big5MjkxMyksZD1uKDMyMTg3KSxwPW4oNjc1MzgpLGg9bigyMzcyNCkoIm1hdGNoIiksdj1vLlJlZ0V4cCxnPXYucHJvdG90eXBlLHk9L2EvZyxtPS9hL2csYj1uZXcgdih5KSE9PXk7aWYociYmaSgiUmVnRXhwIiwhYnx8ZCgoZnVuY3Rpb24oKXtyZXR1cm4gbVtoXT0hMSx2KHkpIT15fHx2KG0pPT1tfHwiL2EvaSIhPXYoeSwiaSIpfSkpKSl7Zm9yKHZhciB4PWZ1bmN0aW9uKHQsZSl7dmFyIG49dGhpcyBpbnN0YW5jZW9mIHgscj11KHQpLG89dm9pZCAwPT09ZTtyZXR1cm4hbiYmciYmdC5jb25zdHJ1Y3Rvcj09PXgmJm8/dDphKGI/bmV3IHYociYmIW8/dC5zb3VyY2U6dCxlKTp2KChyPXQgaW5zdGFuY2VvZiB4KT90LnNvdXJjZTp0LHImJm8/bC5jYWxsKHQpOmUpLG4/dGhpczpnLHgpfSx3PWZ1bmN0aW9uKHQpe3QgaW4geHx8Yyh4LHQse2NvbmZpZ3VyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdlt0XX0sc2V0OmZ1bmN0aW9uKGUpe3ZbdF09ZX19KX0sRT1zKHYpLGo9MDtFLmxlbmd0aD5qOyl3KEVbaisrXSk7Zy5jb25zdHJ1Y3Rvcj14LHgucHJvdG90eXBlPWcsZihvLCJSZWdFeHAiLHgpfXAoIlJlZ0V4cCIpfSw4NzIwOTpmdW5jdGlvbih0LGUsbil7InVzZSBzdHJpY3QiO3ZhciByPW4oMTQwNDQpLG89bigzODU5OCk7cih7dGFyZ2V0OiJSZWdFeHAiLHByb3RvOiEwLGZvcmNlZDovLi8uZXhlYyE9PW99LHtleGVjOm99KX0sMTgyNzY6ZnVuY3Rpb24odCxlLG4pe3ZhciByPW4oNjI1NTYpLG89bigzNzYyMCksaT1uKDI1NDE5KTtyJiYiZyIhPS8uL2cuZmxhZ3MmJm8uZihSZWdFeHAucHJvdG90eXBlLCJmbGFncyIse2NvbmZpZ3VyYWJsZTohMCxnZXQ6aX0pfSwzNzU0OmZ1bmN0aW9uKHQsZSxuKXsidXNlIHN0cmljdCI7dmFyIHI9big5MjkxMyksbz1uKDg3NTc5KSxpPW4oMzIxODcpLGE9bigyNTQxOSksYz0idG9TdHJpbmciLHM9UmVnRXhwLnByb3RvdHlwZSx1PXMudG9TdHJpbmcsbD1pKChmdW5jdGlvbigpe3JldHVybiIvYS9iIiE9dS5jYWxsKHtzb3VyY2U6ImEiLGZsYWdzOiJiIn0pfSkpLGY9dS5uYW1lIT1jOyhsfHxmKSYmcihSZWdFeHAucHJvdG90eXBlLGMsKGZ1bmN0aW9uKCl7dmFyIHQ9byh0aGlzKSxlPVN0cmluZyh0LnNvdXJjZSksbj10LmZsYWdzO3JldHVybiIvIitlKyIvIitTdHJpbmcodm9pZCAwPT09biYmdCBpbnN0YW5jZW9mIFJlZ0V4cCYmISgiZmxhZ3MiaW4gcyk/YS5jYWxsKHQpOm4pfSkse3Vuc2FmZTohMH0pfSw3NDA2MTpmdW5jdGlvbih0LGUsbil7InVzZSBzdHJpY3QiO3ZhciByPW4oODE5NTEpLG89big2NDUwKTt0LmV4cG9ydHM9cigiU2V0IiwoZnVuY3Rpb24odCl7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIHQodGhpcyxhcmd1bWVudHMubGVuZ3RoP2FyZ3VtZW50c1swXTp2b2lkIDApfX0pLG8pfSw0MTc3MzpmdW5jdGlvbih0LGUsbil7InVzZSBzdHJpY3QiO3ZhciByPW4oMTQwNDQpLG89bigzMTM1MSk7cih7dGFyZ2V0OiJTdHJpbmciLHByb3RvOiEwLGZvcmNlZDpuKDUyMTI5KSgiYW5jaG9yIil9LHthbmNob3I6ZnVuY3Rpb24odCl7cmV0dXJuIG8odGhpcywiYSIsIm5hbWUiLHQpfX0pfSwzMDQwMjpmdW5jdGlvbih0LGUsbil7InVzZSBzdHJpY3QiO3ZhciByPW4oMTQwNDQpLG89bigzMTM1MSk7cih7dGFyZ2V0OiJTdHJpbmciLHByb3RvOiEwLGZvcmNlZDpuKDUyMTI5KSgiYmlnIil9LHtiaWc6ZnVuY3Rpb24oKXtyZXR1cm4gbyh0aGlzLCJiaWciLCIiLCIiKX19KX0sMTgxNzU6ZnVuY3Rpb24odCxlLG4peyJ1c2Ugc3RyaWN0Ijt2YXIgcj1uKDE0MDQ0KSxvPW4oMzEzNTEpO3Ioe3RhcmdldDoiU3RyaW5nIixwcm90bzohMCxmb3JjZWQ6big1MjEyOSkoImJsaW5rIil9LHtibGluazpmdW5jdGlvbigpe3JldHVybiBvKHRoaXMsImJsaW5rIiwiIiwiIil9fSl9LDY2ODk2OmZ1bmN0aW9uKHQsZSxuKXsidXNlIHN0cmljdCI7dmFyIHI9bigxNDA0NCksbz1uKDMxMzUxKTtyKHt0YXJnZXQ6IlN0cmluZyIscHJvdG86ITAsZm9yY2VkOm4oNTIxMjkpKCJib2xkIil9LHtib2xkOmZ1bmN0aW9uKCl7cmV0dXJuIG8odGhpcywiYiIsIiIsIiIpfX0pfSwxNTM3MzpmdW5jdGlvbih0LGUsbil7InVzZSBzdHJpY3QiO3ZhciByPW4oMTQwNDQpLG89big2MDE0MCkuY29kZUF0O3Ioe3RhcmdldDoiU3RyaW5nIixwcm90bzohMH0se2NvZGVQb2ludEF0OmZ1bmN0aW9uKHQpe3JldHVybiBvKHRoaXMsdCl9fSl9LDk3Njg4OmZ1bmN0aW9uKHQsZSxuKXsidXNlIHN0cmljdCI7dmFyIHIsbz1uKDE0MDQ0KSxpPW4oOTcyNTcpLmYsYT1uKDI3ODg0KSxjPW4oOTkzNDYpLHM9big3MDEzMiksdT1uKDkzOTE1KSxsPW4oNjU2NzIpLGY9IiIuZW5kc1dpdGgsZD1NYXRoLm1pbixwPXUoImVuZHNXaXRoIik7byh7dGFyZ2V0OiJTdHJpbmciLHByb3RvOiEwLGZvcmNlZDohIShsfHxwfHwocj1pKFN0cmluZy5wcm90b3R5cGUsImVuZHNXaXRoIiksIXJ8fHIud3JpdGFibGUpKSYmIXB9LHtlbmRzV2l0aDpmdW5jdGlvbih0KXt2YXIgZT1TdHJpbmcocyh0aGlzKSk7Yyh0KTt2YXIgbj1hcmd1bWVudHMubGVuZ3RoPjE/YXJndW1lbnRzWzFdOnZvaWQgMCxyPWEoZS5sZW5ndGgpLG89dm9pZCAwPT09bj9yOmQoYShuKSxyKSxpPVN0cmluZyh0KTtyZXR1cm4gZj9mLmNhbGwoZSxpLG8pOmUuc2xpY2Uoby1pLmxlbmd0aCxvKT09PWl9fSl9LDg1NzY3OmZ1bmN0aW9uKHQsZSxuKXsidXNlIHN0cmljdCI7dmFyIHI9bigxNDA0NCksbz1uKDMxMzUxKTtyKHt0YXJnZXQ6IlN0cmluZyIscHJvdG86ITAsZm9yY2VkOm4oNTIxMjkpKCJmaXhlZCIpfSx7Zml4ZWQ6ZnVuY3Rpb24oKXtyZXR1cm4gbyh0aGlzLCJ0dCIsIiIsIiIpfX0pfSw4NDM2OmZ1bmN0aW9uKHQsZSxuKXsidXNlIHN0cmljdCI7dmFyIHI9bigxNDA0NCksbz1uKDMxMzUxKTtyKHt0YXJnZXQ6IlN0cmluZyIscHJvdG86ITAsZm9yY2VkOm4oNTIxMjkpKCJmb250Y29sb3IiKX0se2ZvbnRjb2xvcjpmdW5jdGlvbih0KXtyZXR1cm4gbyh0aGlzLCJmb250IiwiY29sb3IiLHQpfX0pfSw5MjE5MjpmdW5jdGlvbih0LGUsbil7InVzZSBzdHJpY3QiO3ZhciByPW4oMTQwNDQpLG89bigzMTM1MSk7cih7dGFyZ2V0OiJTdHJpbmciLHByb3RvOiEwLGZvcmNlZDpuKDUyMTI5KSgiZm9udHNpemUiKX0se2ZvbnRzaXplOmZ1bmN0aW9uKHQpe3JldHVybiBvKHRoaXMsImZvbnQiLCJzaXplIix0KX19KX0sMTA3NDM6ZnVuY3Rpb24odCxlLG4pe3ZhciByPW4oMTQwNDQpLG89big3Njk3NiksaT1TdHJpbmcuZnJvbUNoYXJDb2RlLGE9U3RyaW5nLmZyb21Db2RlUG9pbnQ7cih7dGFyZ2V0OiJTdHJpbmciLHN0YXQ6ITAsZm9yY2VkOiEhYSYmMSE9YS5sZW5ndGh9LHtmcm9tQ29kZVBvaW50OmZ1bmN0aW9uKHQpe2Zvcih2YXIgZSxuPVtdLHI9YXJndW1lbnRzLmxlbmd0aCxhPTA7cj5hOyl7aWYoZT0rYXJndW1lbnRzW2ErK10sbyhlLDExMTQxMTEpIT09ZSl0aHJvdyBSYW5nZUVycm9yKGUrIiBpcyBub3QgYSB2YWxpZCBjb2RlIHBvaW50Iik7bi5wdXNoKGU8NjU1MzY/aShlKTppKDU1Mjk2KygoZS09NjU1MzYpPj4xMCksZSUxMDI0KzU2MzIwKSl9cmV0dXJuIG4uam9pbigiIil9fSl9LDc0NTYzOmZ1bmN0aW9uKHQsZSxuKXsidXNlIHN0cmljdCI7dmFyIHI9bigxNDA0NCksbz1uKDk5MzQ2KSxpPW4oNzAxMzIpO3Ioe3RhcmdldDoiU3RyaW5nIixwcm90bzohMCxmb3JjZWQ6IW4oOTM5MTUpKCJpbmNsdWRlcyIpfSx7aW5jbHVkZXM6ZnVuY3Rpb24odCl7cmV0dXJuISF+U3RyaW5nKGkodGhpcykpLmluZGV4T2Yobyh0KSxhcmd1bWVudHMubGVuZ3RoPjE/YXJndW1lbnRzWzFdOnZvaWQgMCl9fSl9LDEyMTU1OmZ1bmN0aW9uKHQsZSxuKXsidXNlIHN0cmljdCI7dmFyIHI9bigxNDA0NCksbz1uKDMxMzUxKTtyKHt0YXJnZXQ6IlN0cmluZyIscHJvdG86ITAsZm9yY2VkOm4oNTIxMjkpKCJpdGFsaWNzIil9LHtpdGFsaWNzOmZ1bmN0aW9uKCl7cmV0dXJuIG8odGhpcywiaSIsIiIsIiIpfX0pfSw4MjIwMTpmdW5jdGlvbih0LGUsbil7InVzZSBzdHJpY3QiO3ZhciByPW4oNjAxNDApLmNoYXJBdCxvPW4oODk4MjcpLGk9big0NjA2MSksYT0iU3RyaW5nIEl0ZXJhdG9yIixjPW8uc2V0LHM9by5nZXR0ZXJGb3IoYSk7aShTdHJpbmcsIlN0cmluZyIsKGZ1bmN0aW9uKHQpe2ModGhpcyx7dHlwZTphLHN0cmluZzpTdHJpbmcodCksaW5kZXg6MH0pfSksKGZ1bmN0aW9uKCl7dmFyIHQsZT1zKHRoaXMpLG49ZS5zdHJpbmcsbz1lLmluZGV4O3JldHVybiBvPj1uLmxlbmd0aD97dmFsdWU6dm9pZCAwLGRvbmU6ITB9Oih0PXIobixvKSxlLmluZGV4Kz10Lmxlbmd0aCx7dmFsdWU6dCxkb25lOiExfSl9KSl9LDI2MDE2OmZ1bmN0aW9uKHQsZSxuKXsidXNlIHN0cmljdCI7dmFyIHI9bigxNDA0NCksbz1uKDMxMzUxKTtyKHt0YXJnZXQ6IlN0cmluZyIscHJvdG86ITAsZm9yY2VkOm4oNTIxMjkpKCJsaW5rIil9LHtsaW5rOmZ1bmN0aW9uKHQpe3JldHVybiBvKHRoaXMsImEiLCJocmVmIix0KX19KX0sODEyNzc6ZnVuY3Rpb24odCxlLG4peyJ1c2Ugc3RyaWN0Ijt2YXIgcj1uKDE0MDQ0KSxvPW4oNzEyMDEpLGk9big3MDEzMiksYT1uKDI3ODg0KSxjPW4oODY0NzApLHM9big4NzU3OSksdT1uKDI0NTk0KSxsPW4oNDMyMjMpLGY9bigyNTQxOSksZD1uKDY2OTcxKSxwPW4oMzIxODcpLGg9bigyMzcyNCksdj1uKDEzOTc5KSxnPW4oNTMxNDEpLHk9big4OTgyNyksbT1uKDY1NjcyKSxiPWgoIm1hdGNoQWxsIikseD0iUmVnRXhwIFN0cmluZyIsdz0iUmVnRXhwIFN0cmluZyBJdGVyYXRvciIsRT15LnNldCxqPXkuZ2V0dGVyRm9yKHcpLEM9UmVnRXhwLnByb3RvdHlwZSxrPUMuZXhlYyxTPSIiLm1hdGNoQWxsLE89ISFTJiYhcCgoZnVuY3Rpb24oKXsiYSIubWF0Y2hBbGwoLy4vKX0pKSxBPW8oKGZ1bmN0aW9uKHQsZSxuLHIpe0UodGhpcyx7dHlwZTp3LHJlZ2V4cDp0LHN0cmluZzplLGdsb2JhbDpuLHVuaWNvZGU6cixkb25lOiExfSl9KSx4LChmdW5jdGlvbigpe3ZhciB0PWoodGhpcyk7aWYodC5kb25lKXJldHVybnt2YWx1ZTp2b2lkIDAsZG9uZTohMH07dmFyIGU9dC5yZWdleHAsbj10LnN0cmluZyxyPWZ1bmN0aW9uKHQsZSl7dmFyIG4scj10LmV4ZWM7aWYoImZ1bmN0aW9uIj09dHlwZW9mIHIpe2lmKCJvYmplY3QiIT10eXBlb2Yobj1yLmNhbGwodCxlKSkpdGhyb3cgVHlwZUVycm9yKCJJbmNvcnJlY3QgZXhlYyByZXN1bHQiKTtyZXR1cm4gbn1yZXR1cm4gay5jYWxsKHQsZSl9KGUsbik7cmV0dXJuIG51bGw9PT1yP3t2YWx1ZTp2b2lkIDAsZG9uZTp0LmRvbmU9ITB9OnQuZ2xvYmFsPygiIj09U3RyaW5nKHJbMF0pJiYoZS5sYXN0SW5kZXg9ZyhuLGEoZS5sYXN0SW5kZXgpLHQudW5pY29kZSkpLHt2YWx1ZTpyLGRvbmU6ITF9KToodC5kb25lPSEwLHt2YWx1ZTpyLGRvbmU6ITF9KX0pKSxJPWZ1bmN0aW9uKHQpe3ZhciBlLG4scixvLGksYyx1PXModGhpcyksbD1TdHJpbmcodCk7cmV0dXJuIGU9dih1LFJlZ0V4cCksdm9pZCAwPT09KG49dS5mbGFncykmJnUgaW5zdGFuY2VvZiBSZWdFeHAmJiEoImZsYWdzImluIEMpJiYobj1mLmNhbGwodSkpLHI9dm9pZCAwPT09bj8iIjpTdHJpbmcobiksbz1uZXcgZShlPT09UmVnRXhwP3Uuc291cmNlOnUsciksaT0hIX5yLmluZGV4T2YoImciKSxjPSEhfnIuaW5kZXhPZigidSIpLG8ubGFzdEluZGV4PWEodS5sYXN0SW5kZXgpLG5ldyBBKG8sbCxpLGMpfTtyKHt0YXJnZXQ6IlN0cmluZyIscHJvdG86ITAsZm9yY2VkOk99LHttYXRjaEFsbDpmdW5jdGlvbih0KXt2YXIgZSxuLHIsbz1pKHRoaXMpO2lmKG51bGwhPXQpe2lmKGwodCkmJiF+U3RyaW5nKGkoImZsYWdzImluIEM/dC5mbGFnczpmLmNhbGwodCkpKS5pbmRleE9mKCJnIikpdGhyb3cgVHlwZUVycm9yKCJgLm1hdGNoQWxsYCBkb2VzIG5vdCBhbGxvdyBub24tZ2xvYmFsIHJlZ2V4ZXMiKTtpZihPKXJldHVybiBTLmFwcGx5KG8sYXJndW1lbnRzKTtpZih2b2lkIDA9PT0obj10W2JdKSYmbSYmIlJlZ0V4cCI9PXUodCkmJihuPUkpLG51bGwhPW4pcmV0dXJuIGMobikuY2FsbCh0LG8pfWVsc2UgaWYoTylyZXR1cm4gUy5hcHBseShvLGFyZ3VtZW50cyk7cmV0dXJuIGU9U3RyaW5nKG8pLHI9bmV3IFJlZ0V4cCh0LCJnIiksbT9JLmNhbGwocixlKTpyW2JdKGUpfX0pLG18fGIgaW4gQ3x8ZChDLGIsSSl9LDY1MDAzOmZ1bmN0aW9uKHQsZSxuKXsidXNlIHN0cmljdCI7dmFyIHI9bigzNTg2MCksbz1uKDg3NTc5KSxpPW4oMjc4ODQpLGE9big3MDEzMiksYz1uKDUzMTQxKSxzPW4oMzU0NTUpO3IoIm1hdGNoIiwxLChmdW5jdGlvbih0LGUsbil7cmV0dXJuW2Z1bmN0aW9uKGUpe3ZhciBuPWEodGhpcykscj1udWxsPT1lP3ZvaWQgMDplW3RdO3JldHVybiB2b2lkIDAhPT1yP3IuY2FsbChlLG4pOm5ldyBSZWdFeHAoZSlbdF0oU3RyaW5nKG4pKX0sZnVuY3Rpb24odCl7dmFyIHI9bihlLHQsdGhpcyk7aWYoci5kb25lKXJldHVybiByLnZhbHVlO3ZhciBhPW8odCksdT1TdHJpbmcodGhpcyk7aWYoIWEuZ2xvYmFsKXJldHVybiBzKGEsdSk7dmFyIGw9YS51bmljb2RlO2EubGFzdEluZGV4PTA7Zm9yKHZhciBmLGQ9W10scD0wO251bGwhPT0oZj1zKGEsdSkpOyl7dmFyIGg9U3RyaW5nKGZbMF0pO2RbcF09aCwiIj09PWgmJihhLmxhc3RJbmRleD1jKHUsaShhLmxhc3RJbmRleCksbCkpLHArK31yZXR1cm4gMD09PXA/bnVsbDpkfV19KSl9LDQ0MDE5OmZ1bmN0aW9uKHQsZSxuKXsidXNlIHN0cmljdCI7dmFyIHI9bigxNDA0NCksbz1uKDI2NTczKS5lbmQ7cih7dGFyZ2V0OiJTdHJpbmciLHByb3RvOiEwLGZvcmNlZDpuKDQyMTg0KX0se3BhZEVuZDpmdW5jdGlvbih0KXtyZXR1cm4gbyh0aGlzLHQsYXJndW1lbnRzLmxlbmd0aD4xP2FyZ3VtZW50c1sxXTp2b2lkIDApfX0pfSwzODI6ZnVuY3Rpb24odCxlLG4peyJ1c2Ugc3RyaWN0Ijt2YXIgcj1uKDE0MDQ0KSxvPW4oMjY1NzMpLnN0YXJ0O3Ioe3RhcmdldDoiU3RyaW5nIixwcm90bzohMCxmb3JjZWQ6big0MjE4NCl9LHtwYWRTdGFydDpmdW5jdGlvbih0KXtyZXR1cm4gbyh0aGlzLHQsYXJndW1lbnRzLmxlbmd0aD4xP2FyZ3VtZW50c1sxXTp2b2lkIDApfX0pfSw4MDUxMTpmdW5jdGlvbih0LGUsbil7dmFyIHI9bigxNDA0NCksbz1uKDk1NzMpLGk9bigyNzg4NCk7cih7dGFyZ2V0OiJTdHJpbmciLHN0YXQ6ITB9LHtyYXc6ZnVuY3Rpb24odCl7Zm9yKHZhciBlPW8odC5yYXcpLG49aShlLmxlbmd0aCkscj1hcmd1bWVudHMubGVuZ3RoLGE9W10sYz0wO24+YzspYS5wdXNoKFN0cmluZyhlW2MrK10pKSxjPHImJmEucHVzaChTdHJpbmcoYXJndW1lbnRzW2NdKSk7cmV0dXJuIGEuam9pbigiIil9fSl9LDE4ODIzOmZ1bmN0aW9uKHQsZSxuKXtuKDE0MDQ0KSh7dGFyZ2V0OiJTdHJpbmciLHByb3RvOiEwfSx7cmVwZWF0Om4oNjgyNTMpfSl9LDMzMzIyOmZ1bmN0aW9uKHQsZSxuKXsidXNlIHN0cmljdCI7dmFyIHI9bigzNTg2MCksbz1uKDg3NTc5KSxpPW4oMTkyMDkpLGE9bigyNzg4NCksYz1uKDQzNDE2KSxzPW4oNzAxMzIpLHU9big1MzE0MSksbD1uKDM1NDU1KSxmPU1hdGgubWF4LGQ9TWF0aC5taW4scD1NYXRoLmZsb29yLGg9L1wkKFskJidgXXxcZFxkP3w8W14+XSo+KS9nLHY9L1wkKFskJidgXXxcZFxkPykvZztyKCJyZXBsYWNlIiwyLChmdW5jdGlvbih0LGUsbil7cmV0dXJuW2Z1bmN0aW9uKG4scil7dmFyIG89cyh0aGlzKSxpPW51bGw9PW4/dm9pZCAwOm5bdF07cmV0dXJuIHZvaWQgMCE9PWk/aS5jYWxsKG4sbyxyKTplLmNhbGwoU3RyaW5nKG8pLG4scil9LGZ1bmN0aW9uKHQsaSl7dmFyIHM9bihlLHQsdGhpcyxpKTtpZihzLmRvbmUpcmV0dXJuIHMudmFsdWU7dmFyIHA9byh0KSxoPVN0cmluZyh0aGlzKSx2PSJmdW5jdGlvbiI9PXR5cGVvZiBpO3Z8fChpPVN0cmluZyhpKSk7dmFyIGc9cC5nbG9iYWw7aWYoZyl7dmFyIHk9cC51bmljb2RlO3AubGFzdEluZGV4PTB9Zm9yKHZhciBtPVtdOzspe3ZhciBiPWwocCxoKTtpZihudWxsPT09YilicmVhaztpZihtLnB1c2goYiksIWcpYnJlYWs7IiI9PT1TdHJpbmcoYlswXSkmJihwLmxhc3RJbmRleD11KGgsYShwLmxhc3RJbmRleCkseSkpfWZvcih2YXIgeCx3PSIiLEU9MCxqPTA7ajxtLmxlbmd0aDtqKyspe2I9bVtqXTtmb3IodmFyIEM9U3RyaW5nKGJbMF0pLGs9ZihkKGMoYi5pbmRleCksaC5sZW5ndGgpLDApLFM9W10sTz0xO088Yi5sZW5ndGg7TysrKVMucHVzaCh2b2lkIDA9PT0oeD1iW09dKT94OlN0cmluZyh4KSk7dmFyIEE9Yi5ncm91cHM7aWYodil7dmFyIEk9W0NdLmNvbmNhdChTLGssaCk7dm9pZCAwIT09QSYmSS5wdXNoKEEpO3ZhciBNPVN0cmluZyhpLmFwcGx5KHZvaWQgMCxJKSl9ZWxzZSBNPXIoQyxoLGssUyxBLGkpO2s+PUUmJih3Kz1oLnNsaWNlKEUsaykrTSxFPWsrQy5sZW5ndGgpfXJldHVybiB3K2guc2xpY2UoRSl9XTtmdW5jdGlvbiByKHQsbixyLG8sYSxjKXt2YXIgcz1yK3QubGVuZ3RoLHU9by5sZW5ndGgsbD12O3JldHVybiB2b2lkIDAhPT1hJiYoYT1pKGEpLGw9aCksZS5jYWxsKGMsbCwoZnVuY3Rpb24oZSxpKXt2YXIgYztzd2l0Y2goaS5jaGFyQXQoMCkpe2Nhc2UiJCI6cmV0dXJuIiQiO2Nhc2UiJiI6cmV0dXJuIHQ7Y2FzZSJgIjpyZXR1cm4gbi5zbGljZSgwLHIpO2Nhc2UiJyI6cmV0dXJuIG4uc2xpY2Uocyk7Y2FzZSI8IjpjPWFbaS5zbGljZSgxLC0xKV07YnJlYWs7ZGVmYXVsdDp2YXIgbD0raTtpZigwPT09bClyZXR1cm4gZTtpZihsPnUpe3ZhciBmPXAobC8xMCk7cmV0dXJuIDA9PT1mP2U6Zjw9dT92b2lkIDA9PT1vW2YtMV0/aS5jaGFyQXQoMSk6b1tmLTFdK2kuY2hhckF0KDEpOmV9Yz1vW2wtMV19cmV0dXJuIHZvaWQgMD09PWM/IiI6Y30pKX19KSl9LDMzMDY1OmZ1bmN0aW9uKHQsZSxuKXsidXNlIHN0cmljdCI7dmFyIHI9bigzNTg2MCksbz1uKDg3NTc5KSxpPW4oNzAxMzIpLGE9big3NjQ4MiksYz1uKDM1NDU1KTtyKCJzZWFyY2giLDEsKGZ1bmN0aW9uKHQsZSxuKXtyZXR1cm5bZnVuY3Rpb24oZSl7dmFyIG49aSh0aGlzKSxyPW51bGw9PWU/dm9pZCAwOmVbdF07cmV0dXJuIHZvaWQgMCE9PXI/ci5jYWxsKGUsbik6bmV3IFJlZ0V4cChlKVt0XShTdHJpbmcobikpfSxmdW5jdGlvbih0KXt2YXIgcj1uKGUsdCx0aGlzKTtpZihyLmRvbmUpcmV0dXJuIHIudmFsdWU7dmFyIGk9byh0KSxzPVN0cmluZyh0aGlzKSx1PWkubGFzdEluZGV4O2EodSwwKXx8KGkubGFzdEluZGV4PTApO3ZhciBsPWMoaSxzKTtyZXR1cm4gYShpLmxhc3RJbmRleCx1KXx8KGkubGFzdEluZGV4PXUpLG51bGw9PT1sPy0xOmwuaW5kZXh9XX0pKX0sNzQxMTc6ZnVuY3Rpb24odCxlLG4peyJ1c2Ugc3RyaWN0Ijt2YXIgcj1uKDE0MDQ0KSxvPW4oMzEzNTEpO3Ioe3RhcmdldDoiU3RyaW5nIixwcm90bzohMCxmb3JjZWQ6big1MjEyOSkoInNtYWxsIil9LHtzbWFsbDpmdW5jdGlvbigpe3JldHVybiBvKHRoaXMsInNtYWxsIiwiIiwiIil9fSl9LDE3NDk0OmZ1bmN0aW9uKHQsZSxuKXsidXNlIHN0cmljdCI7dmFyIHI9bigzNTg2MCksbz1uKDQzMjIzKSxpPW4oODc1NzkpLGE9big3MDEzMiksYz1uKDEzOTc5KSxzPW4oNTMxNDEpLHU9bigyNzg4NCksbD1uKDM1NDU1KSxmPW4oMzg1OTgpLGQ9bigzMjE4NykscD1bXS5wdXNoLGg9TWF0aC5taW4sdj00Mjk0OTY3Mjk1LGc9IWQoKGZ1bmN0aW9uKCl7cmV0dXJuIVJlZ0V4cCh2LCJ5Iil9KSk7cigic3BsaXQiLDIsKGZ1bmN0aW9uKHQsZSxuKXt2YXIgcjtyZXR1cm4gcj0iYyI9PSJhYmJjIi5zcGxpdCgvKGIpKi8pWzFdfHw0IT0idGVzdCIuc3BsaXQoLyg/OikvLC0xKS5sZW5ndGh8fDIhPSJhYiIuc3BsaXQoLyg/OmFiKSovKS5sZW5ndGh8fDQhPSIuIi5zcGxpdCgvKC4/KSguPykvKS5sZW5ndGh8fCIuIi5zcGxpdCgvKCkoKS8pLmxlbmd0aD4xfHwiIi5zcGxpdCgvLj8vKS5sZW5ndGg/ZnVuY3Rpb24odCxuKXt2YXIgcj1TdHJpbmcoYSh0aGlzKSksaT12b2lkIDA9PT1uP3Y6bj4+PjA7aWYoMD09PWkpcmV0dXJuW107aWYodm9pZCAwPT09dClyZXR1cm5bcl07aWYoIW8odCkpcmV0dXJuIGUuY2FsbChyLHQsaSk7Zm9yKHZhciBjLHMsdSxsPVtdLGQ9KHQuaWdub3JlQ2FzZT8iaSI6IiIpKyh0Lm11bHRpbGluZT8ibSI6IiIpKyh0LnVuaWNvZGU/InUiOiIiKSsodC5zdGlja3k/InkiOiIiKSxoPTAsZz1uZXcgUmVnRXhwKHQuc291cmNlLGQrImciKTsoYz1mLmNhbGwoZyxyKSkmJiEoKHM9Zy5sYXN0SW5kZXgpPmgmJihsLnB1c2goci5zbGljZShoLGMuaW5kZXgpKSxjLmxlbmd0aD4xJiZjLmluZGV4PHIubGVuZ3RoJiZwLmFwcGx5KGwsYy5zbGljZSgxKSksdT1jWzBdLmxlbmd0aCxoPXMsbC5sZW5ndGg+PWkpKTspZy5sYXN0SW5kZXg9PT1jLmluZGV4JiZnLmxhc3RJbmRleCsrO3JldHVybiBoPT09ci5sZW5ndGg/IXUmJmcudGVzdCgiIil8fGwucHVzaCgiIik6bC5wdXNoKHIuc2xpY2UoaCkpLGwubGVuZ3RoPmk/bC5zbGljZSgwLGkpOmx9OiIwIi5zcGxpdCh2b2lkIDAsMCkubGVuZ3RoP2Z1bmN0aW9uKHQsbil7cmV0dXJuIHZvaWQgMD09PXQmJjA9PT1uP1tdOmUuY2FsbCh0aGlzLHQsbil9OmUsW2Z1bmN0aW9uKGUsbil7dmFyIG89YSh0aGlzKSxpPW51bGw9PWU/dm9pZCAwOmVbdF07cmV0dXJuIHZvaWQgMCE9PWk/aS5jYWxsKGUsbyxuKTpyLmNhbGwoU3RyaW5nKG8pLGUsbil9LGZ1bmN0aW9uKHQsbyl7dmFyIGE9bihyLHQsdGhpcyxvLHIhPT1lKTtpZihhLmRvbmUpcmV0dXJuIGEudmFsdWU7dmFyIGY9aSh0KSxkPVN0cmluZyh0aGlzKSxwPWMoZixSZWdFeHApLHk9Zi51bmljb2RlLG09KGYuaWdub3JlQ2FzZT8iaSI6IiIpKyhmLm11bHRpbGluZT8ibSI6IiIpKyhmLnVuaWNvZGU/InUiOiIiKSsoZz8ieSI6ImciKSxiPW5ldyBwKGc/ZjoiXig/OiIrZi5zb3VyY2UrIikiLG0pLHg9dm9pZCAwPT09bz92Om8+Pj4wO2lmKDA9PT14KXJldHVybltdO2lmKDA9PT1kLmxlbmd0aClyZXR1cm4gbnVsbD09PWwoYixkKT9bZF06W107Zm9yKHZhciB3PTAsRT0wLGo9W107RTxkLmxlbmd0aDspe2IubGFzdEluZGV4PWc/RTowO3ZhciBDLGs9bChiLGc/ZDpkLnNsaWNlKEUpKTtpZihudWxsPT09a3x8KEM9aCh1KGIubGFzdEluZGV4KyhnPzA6RSkpLGQubGVuZ3RoKSk9PT13KUU9cyhkLEUseSk7ZWxzZXtpZihqLnB1c2goZC5zbGljZSh3LEUpKSxqLmxlbmd0aD09PXgpcmV0dXJuIGo7Zm9yKHZhciBTPTE7Uzw9ay5sZW5ndGgtMTtTKyspaWYoai5wdXNoKGtbU10pLGoubGVuZ3RoPT09eClyZXR1cm4gajtFPXc9Q319cmV0dXJuIGoucHVzaChkLnNsaWNlKHcpKSxqfV19KSwhZyl9LDgwMzYzOmZ1bmN0aW9uKHQsZSxuKXsidXNlIHN0cmljdCI7dmFyIHIsbz1uKDE0MDQ0KSxpPW4oOTcyNTcpLmYsYT1uKDI3ODg0KSxjPW4oOTkzNDYpLHM9big3MDEzMiksdT1uKDkzOTE1KSxsPW4oNjU2NzIpLGY9IiIuc3RhcnRzV2l0aCxkPU1hdGgubWluLHA9dSgic3RhcnRzV2l0aCIpO28oe3RhcmdldDoiU3RyaW5nIixwcm90bzohMCxmb3JjZWQ6ISEobHx8cHx8KHI9aShTdHJpbmcucHJvdG90eXBlLCJzdGFydHNXaXRoIiksIXJ8fHIud3JpdGFibGUpKSYmIXB9LHtzdGFydHNXaXRoOmZ1bmN0aW9uKHQpe3ZhciBlPVN0cmluZyhzKHRoaXMpKTtjKHQpO3ZhciBuPWEoZChhcmd1bWVudHMubGVuZ3RoPjE/YXJndW1lbnRzWzFdOnZvaWQgMCxlLmxlbmd0aCkpLHI9U3RyaW5nKHQpO3JldHVybiBmP2YuY2FsbChlLHIsbik6ZS5zbGljZShuLG4rci5sZW5ndGgpPT09cn19KX0sMjgwMDM6ZnVuY3Rpb24odCxlLG4peyJ1c2Ugc3RyaWN0Ijt2YXIgcj1uKDE0MDQ0KSxvPW4oMzEzNTEpO3Ioe3RhcmdldDoiU3RyaW5nIixwcm90bzohMCxmb3JjZWQ6big1MjEyOSkoInN0cmlrZSIpfSx7c3RyaWtlOmZ1bmN0aW9uKCl7cmV0dXJuIG8odGhpcywic3RyaWtlIiwiIiwiIil9fSl9LDY3OTQxOmZ1bmN0aW9uKHQsZSxuKXsidXNlIHN0cmljdCI7dmFyIHI9bigxNDA0NCksbz1uKDMxMzUxKTtyKHt0YXJnZXQ6IlN0cmluZyIscHJvdG86ITAsZm9yY2VkOm4oNTIxMjkpKCJzdWIiKX0se3N1YjpmdW5jdGlvbigpe3JldHVybiBvKHRoaXMsInN1YiIsIiIsIiIpfX0pfSw0NDA1MTpmdW5jdGlvbih0LGUsbil7InVzZSBzdHJpY3QiO3ZhciByPW4oMTQwNDQpLG89bigzMTM1MSk7cih7dGFyZ2V0OiJTdHJpbmciLHByb3RvOiEwLGZvcmNlZDpuKDUyMTI5KSgic3VwIil9LHtzdXA6ZnVuY3Rpb24oKXtyZXR1cm4gbyh0aGlzLCJzdXAiLCIiLCIiKX19KX0sNzQ3OTU6ZnVuY3Rpb24odCxlLG4peyJ1c2Ugc3RyaWN0Ijt2YXIgcj1uKDE0MDQ0KSxvPW4oODIzNTApLmVuZCxpPW4oODQ3NTQpKCJ0cmltRW5kIiksYT1pP2Z1bmN0aW9uKCl7cmV0dXJuIG8odGhpcyl9OiIiLnRyaW1FbmQ7cih7dGFyZ2V0OiJTdHJpbmciLHByb3RvOiEwLGZvcmNlZDppfSx7dHJpbUVuZDphLHRyaW1SaWdodDphfSl9LDY5MTg4OmZ1bmN0aW9uKHQsZSxuKXsidXNlIHN0cmljdCI7dmFyIHI9bigxNDA0NCksbz1uKDgyMzUwKS5zdGFydCxpPW4oODQ3NTQpKCJ0cmltU3RhcnQiKSxhPWk/ZnVuY3Rpb24oKXtyZXR1cm4gbyh0aGlzKX06IiIudHJpbVN0YXJ0O3Ioe3RhcmdldDoiU3RyaW5nIixwcm90bzohMCxmb3JjZWQ6aX0se3RyaW1TdGFydDphLHRyaW1MZWZ0OmF9KX0sNDMzOTY6ZnVuY3Rpb24odCxlLG4peyJ1c2Ugc3RyaWN0Ijt2YXIgcj1uKDE0MDQ0KSxvPW4oODIzNTApLnRyaW07cih7dGFyZ2V0OiJTdHJpbmciLHByb3RvOiEwLGZvcmNlZDpuKDg0NzU0KSgidHJpbSIpfSx7dHJpbTpmdW5jdGlvbigpe3JldHVybiBvKHRoaXMpfX0pfSw1MTA5MDpmdW5jdGlvbih0LGUsbil7big5MjI3NSkoImFzeW5jSXRlcmF0b3IiKX0sMjQ3ODU6ZnVuY3Rpb24odCxlLG4peyJ1c2Ugc3RyaWN0Ijt2YXIgcj1uKDE0MDQ0KSxvPW4oNjI1NTYpLGk9big4OTU1OCksYT1uKDc2Mjk4KSxjPW4oMTA1OTIpLHM9bigzNzYyMCkuZix1PW4oOTk2MjUpLGw9aS5TeW1ib2w7aWYobyYmImZ1bmN0aW9uIj09dHlwZW9mIGwmJighKCJkZXNjcmlwdGlvbiJpbiBsLnByb3RvdHlwZSl8fHZvaWQgMCE9PWwoKS5kZXNjcmlwdGlvbikpe3ZhciBmPXt9LGQ9ZnVuY3Rpb24oKXt2YXIgdD1hcmd1bWVudHMubGVuZ3RoPDF8fHZvaWQgMD09PWFyZ3VtZW50c1swXT92b2lkIDA6U3RyaW5nKGFyZ3VtZW50c1swXSksZT10aGlzIGluc3RhbmNlb2YgZD9uZXcgbCh0KTp2b2lkIDA9PT10P2woKTpsKHQpO3JldHVybiIiPT09dCYmKGZbZV09ITApLGV9O3UoZCxsKTt2YXIgcD1kLnByb3RvdHlwZT1sLnByb3RvdHlwZTtwLmNvbnN0cnVjdG9yPWQ7dmFyIGg9cC50b1N0cmluZyx2PSJTeW1ib2wodGVzdCkiPT1TdHJpbmcobCgidGVzdCIpKSxnPS9eU3ltYm9sXCgoLiopXClbXildKyQvO3MocCwiZGVzY3JpcHRpb24iLHtjb25maWd1cmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7dmFyIHQ9Yyh0aGlzKT90aGlzLnZhbHVlT2YoKTp0aGlzLGU9aC5jYWxsKHQpO2lmKGEoZix0KSlyZXR1cm4iIjt2YXIgbj12P2Uuc2xpY2UoNywtMSk6ZS5yZXBsYWNlKGcsIiQxIik7cmV0dXJuIiI9PT1uP3ZvaWQgMDpufX0pLHIoe2dsb2JhbDohMCxmb3JjZWQ6ITB9LHtTeW1ib2w6ZH0pfX0sODkxNzpmdW5jdGlvbih0LGUsbil7big5MjI3NSkoImhhc0luc3RhbmNlIil9LDU0Nzg2OmZ1bmN0aW9uKHQsZSxuKXtuKDkyMjc1KSgiaXNDb25jYXRTcHJlYWRhYmxlIil9LDEyODE2OmZ1bmN0aW9uKHQsZSxuKXtuKDkyMjc1KSgiaXRlcmF0b3IiKX0sNjU2Nzk6ZnVuY3Rpb24odCxlLG4peyJ1c2Ugc3RyaWN0Ijt2YXIgcj1uKDE0MDQ0KSxvPW4oODk1NTgpLGk9big3NzAxKSxhPW4oNjU2NzIpLGM9big2MjU1Nikscz1uKDkwMTQpLHU9bigxNjQxMCksbD1uKDMyMTg3KSxmPW4oNzYyOTgpLGQ9big2MTk5KSxwPW4oMTA1OTIpLGg9big4NzU3OSksdj1uKDE5MjA5KSxnPW4oOTU3MykseT1uKDUzNDk4KSxtPW4oMTQyMDkpLGI9big1MDg2OCkseD1uKDI1NTA3KSx3PW4oMTMzMzQpLEU9bigyNjkzNyksaj1uKDU2OTkxKSxDPW4oOTcyNTcpLGs9bigzNzYyMCksUz1uKDQxNjI4KSxPPW4oNjY5NzEpLEE9big5MjkxMyksST1uKDYyMDU0KSxNPW4oODMxOTcpLFQ9bigyMzA3MCksXz1uKDY3MjkpLEw9bigyMzcyNCksUj1uKDczOTE2KSxQPW4oOTIyNzUpLE49big1MTEyOCksRD1uKDg5ODI3KSxGPW4oMzAwMjUpLmZvckVhY2gsVT1NKCJoaWRkZW4iKSxCPSJTeW1ib2wiLHo9TCgidG9QcmltaXRpdmUiKSxWPUQuc2V0LEg9RC5nZXR0ZXJGb3IoQikscT1PYmplY3QucHJvdG90eXBlLFc9by5TeW1ib2wsRz1pKCJKU09OIiwic3RyaW5naWZ5IiksWj1DLmYsJD1rLmYsWT1FLmYsSj1TLmYsSz1JKCJzeW1ib2xzIiksWD1JKCJvcC1zeW1ib2xzIiksUT1JKCJzdHJpbmctdG8tc3ltYm9sLXJlZ2lzdHJ5IiksdHQ9SSgic3ltYm9sLXRvLXN0cmluZy1yZWdpc3RyeSIpLGV0PUkoIndrcyIpLG50PW8uUU9iamVjdCxydD0hbnR8fCFudC5wcm90b3R5cGV8fCFudC5wcm90b3R5cGUuZmluZENoaWxkLG90PWMmJmwoKGZ1bmN0aW9uKCl7cmV0dXJuIDchPWIoJCh7fSwiYSIse2dldDpmdW5jdGlvbigpe3JldHVybiAkKHRoaXMsImEiLHt2YWx1ZTo3fSkuYX19KSkuYX0pKT9mdW5jdGlvbih0LGUsbil7dmFyIHI9WihxLGUpO3ImJmRlbGV0ZSBxW2VdLCQodCxlLG4pLHImJnQhPT1xJiYkKHEsZSxyKX06JCxpdD1mdW5jdGlvbih0LGUpe3ZhciBuPUtbdF09YihXLnByb3RvdHlwZSk7cmV0dXJuIFYobix7dHlwZTpCLHRhZzp0LGRlc2NyaXB0aW9uOmV9KSxjfHwobi5kZXNjcmlwdGlvbj1lKSxufSxhdD1zJiYic3ltYm9sIj09dHlwZW9mIFcuaXRlcmF0b3I/ZnVuY3Rpb24odCl7cmV0dXJuInN5bWJvbCI9PXR5cGVvZiB0fTpmdW5jdGlvbih0KXtyZXR1cm4gT2JqZWN0KHQpaW5zdGFuY2VvZiBXfSxjdD1mdW5jdGlvbih0LGUsbil7dD09PXEmJmN0KFgsZSxuKSxoKHQpO3ZhciByPXkoZSwhMCk7cmV0dXJuIGgobiksZihLLHIpPyhuLmVudW1lcmFibGU/KGYodCxVKSYmdFtVXVtyXSYmKHRbVV1bcl09ITEpLG49YihuLHtlbnVtZXJhYmxlOm0oMCwhMSl9KSk6KGYodCxVKXx8JCh0LFUsbSgxLHt9KSksdFtVXVtyXT0hMCksb3QodCxyLG4pKTokKHQscixuKX0sc3Q9ZnVuY3Rpb24odCxlKXtoKHQpO3ZhciBuPWcoZSkscj14KG4pLmNvbmNhdChkdChuKSk7cmV0dXJuIEYociwoZnVuY3Rpb24oZSl7YyYmIXV0LmNhbGwobixlKXx8Y3QodCxlLG5bZV0pfSkpLHR9LHV0PWZ1bmN0aW9uKHQpe3ZhciBlPXkodCwhMCksbj1KLmNhbGwodGhpcyxlKTtyZXR1cm4hKHRoaXM9PT1xJiZmKEssZSkmJiFmKFgsZSkpJiYoIShufHwhZih0aGlzLGUpfHwhZihLLGUpfHxmKHRoaXMsVSkmJnRoaXNbVV1bZV0pfHxuKX0sbHQ9ZnVuY3Rpb24odCxlKXt2YXIgbj1nKHQpLHI9eShlLCEwKTtpZihuIT09cXx8IWYoSyxyKXx8ZihYLHIpKXt2YXIgbz1aKG4scik7cmV0dXJuIW98fCFmKEsscil8fGYobixVKSYmbltVXVtyXXx8KG8uZW51bWVyYWJsZT0hMCksb319LGZ0PWZ1bmN0aW9uKHQpe3ZhciBlPVkoZyh0KSksbj1bXTtyZXR1cm4gRihlLChmdW5jdGlvbih0KXtmKEssdCl8fGYoVCx0KXx8bi5wdXNoKHQpfSkpLG59LGR0PWZ1bmN0aW9uKHQpe3ZhciBlPXQ9PT1xLG49WShlP1g6Zyh0KSkscj1bXTtyZXR1cm4gRihuLChmdW5jdGlvbih0KXshZihLLHQpfHxlJiYhZihxLHQpfHxyLnB1c2goS1t0XSl9KSkscn07KHN8fChXPWZ1bmN0aW9uKCl7aWYodGhpcyBpbnN0YW5jZW9mIFcpdGhyb3cgVHlwZUVycm9yKCJTeW1ib2wgaXMgbm90IGEgY29uc3RydWN0b3IiKTt2YXIgdD1hcmd1bWVudHMubGVuZ3RoJiZ2b2lkIDAhPT1hcmd1bWVudHNbMF0/U3RyaW5nKGFyZ3VtZW50c1swXSk6dm9pZCAwLGU9Xyh0KSxuPWZ1bmN0aW9uKHQpe3RoaXM9PT1xJiZuLmNhbGwoWCx0KSxmKHRoaXMsVSkmJmYodGhpc1tVXSxlKSYmKHRoaXNbVV1bZV09ITEpLG90KHRoaXMsZSxtKDEsdCkpfTtyZXR1cm4gYyYmcnQmJm90KHEsZSx7Y29uZmlndXJhYmxlOiEwLHNldDpufSksaXQoZSx0KX0sQShXLnByb3RvdHlwZSwidG9TdHJpbmciLChmdW5jdGlvbigpe3JldHVybiBIKHRoaXMpLnRhZ30pKSxTLmY9dXQsay5mPWN0LEMuZj1sdCx3LmY9RS5mPWZ0LGouZj1kdCxjJiYoJChXLnByb3RvdHlwZSwiZGVzY3JpcHRpb24iLHtjb25maWd1cmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIEgodGhpcykuZGVzY3JpcHRpb259fSksYXx8QShxLCJwcm9wZXJ0eUlzRW51bWVyYWJsZSIsdXQse3Vuc2FmZTohMH0pKSksdXx8KFIuZj1mdW5jdGlvbih0KXtyZXR1cm4gaXQoTCh0KSx0KX0pLHIoe2dsb2JhbDohMCx3cmFwOiEwLGZvcmNlZDohcyxzaGFtOiFzfSx7U3ltYm9sOld9KSxGKHgoZXQpLChmdW5jdGlvbih0KXtQKHQpfSkpLHIoe3RhcmdldDpCLHN0YXQ6ITAsZm9yY2VkOiFzfSx7Zm9yOmZ1bmN0aW9uKHQpe3ZhciBlPVN0cmluZyh0KTtpZihmKFEsZSkpcmV0dXJuIFFbZV07dmFyIG49VyhlKTtyZXR1cm4gUVtlXT1uLHR0W25dPWUsbn0sa2V5Rm9yOmZ1bmN0aW9uKHQpe2lmKCFhdCh0KSl0aHJvdyBUeXBlRXJyb3IodCsiIGlzIG5vdCBhIHN5bWJvbCIpO2lmKGYodHQsdCkpcmV0dXJuIHR0W3RdfSx1c2VTZXR0ZXI6ZnVuY3Rpb24oKXtydD0hMH0sdXNlU2ltcGxlOmZ1bmN0aW9uKCl7cnQ9ITF9fSkscih7dGFyZ2V0OiJPYmplY3QiLHN0YXQ6ITAsZm9yY2VkOiFzLHNoYW06IWN9LHtjcmVhdGU6ZnVuY3Rpb24odCxlKXtyZXR1cm4gdm9pZCAwPT09ZT9iKHQpOnN0KGIodCksZSl9LGRlZmluZVByb3BlcnR5OmN0LGRlZmluZVByb3BlcnRpZXM6c3QsZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yOmx0fSkscih7dGFyZ2V0OiJPYmplY3QiLHN0YXQ6ITAsZm9yY2VkOiFzfSx7Z2V0T3duUHJvcGVydHlOYW1lczpmdCxnZXRPd25Qcm9wZXJ0eVN5bWJvbHM6ZHR9KSxyKHt0YXJnZXQ6Ik9iamVjdCIsc3RhdDohMCxmb3JjZWQ6bCgoZnVuY3Rpb24oKXtqLmYoMSl9KSl9LHtnZXRPd25Qcm9wZXJ0eVN5bWJvbHM6ZnVuY3Rpb24odCl7cmV0dXJuIGouZih2KHQpKX19KSxHKSYmcih7dGFyZ2V0OiJKU09OIixzdGF0OiEwLGZvcmNlZDohc3x8bCgoZnVuY3Rpb24oKXt2YXIgdD1XKCk7cmV0dXJuIltudWxsXSIhPUcoW3RdKXx8Int9IiE9Ryh7YTp0fSl8fCJ7fSIhPUcoT2JqZWN0KHQpKX0pKX0se3N0cmluZ2lmeTpmdW5jdGlvbih0LGUsbil7Zm9yKHZhciByLG89W3RdLGk9MTthcmd1bWVudHMubGVuZ3RoPmk7KW8ucHVzaChhcmd1bWVudHNbaSsrXSk7aWYocj1lLChwKGUpfHx2b2lkIDAhPT10KSYmIWF0KHQpKXJldHVybiBkKGUpfHwoZT1mdW5jdGlvbih0LGUpe2lmKCJmdW5jdGlvbiI9PXR5cGVvZiByJiYoZT1yLmNhbGwodGhpcyx0LGUpKSwhYXQoZSkpcmV0dXJuIGV9KSxvWzFdPWUsRy5hcHBseShudWxsLG8pfX0pO1cucHJvdG90eXBlW3pdfHxPKFcucHJvdG90eXBlLHosVy5wcm90b3R5cGUudmFsdWVPZiksTihXLEIpLFRbVV09ITB9LDk4MzA2OmZ1bmN0aW9uKHQsZSxuKXtuKDkyMjc1KSgibWF0Y2hBbGwiKX0sNjE5MjQ6ZnVuY3Rpb24odCxlLG4pe24oOTIyNzUpKCJtYXRjaCIpfSwxMjAyNTpmdW5jdGlvbih0LGUsbil7big5MjI3NSkoInJlcGxhY2UiKX0sMjgzMzpmdW5jdGlvbih0LGUsbil7big5MjI3NSkoInNlYXJjaCIpfSw5NjQ1MzpmdW5jdGlvbih0LGUsbil7big5MjI3NSkoInNwZWNpZXMiKX0sNzA4NjM6ZnVuY3Rpb24odCxlLG4pe24oOTIyNzUpKCJzcGxpdCIpfSwyNDgwMjpmdW5jdGlvbih0LGUsbil7big5MjI3NSkoInRvUHJpbWl0aXZlIil9LDE4MjczOmZ1bmN0aW9uKHQsZSxuKXtuKDkyMjc1KSgidG9TdHJpbmdUYWciKX0sNDI0MTE6ZnVuY3Rpb24odCxlLG4pe24oOTIyNzUpKCJ1bnNjb3BhYmxlcyIpfSw3NDIzMDpmdW5jdGlvbih0LGUsbil7InVzZSBzdHJpY3QiO3ZhciByPW4oNzMwNzQpLG89big5OTQzMSksaT1yLmFUeXBlZEFycmF5OygwLHIuZXhwb3J0VHlwZWRBcnJheU1ldGhvZCkoImNvcHlXaXRoaW4iLChmdW5jdGlvbih0LGUpe3JldHVybiBvLmNhbGwoaSh0aGlzKSx0LGUsYXJndW1lbnRzLmxlbmd0aD4yP2FyZ3VtZW50c1syXTp2b2lkIDApfSkpfSwxODUwNjpmdW5jdGlvbih0LGUsbil7InVzZSBzdHJpY3QiO3ZhciByPW4oNzMwNzQpLG89bigzMDAyNSkuZXZlcnksaT1yLmFUeXBlZEFycmF5OygwLHIuZXhwb3J0VHlwZWRBcnJheU1ldGhvZCkoImV2ZXJ5IiwoZnVuY3Rpb24odCl7cmV0dXJuIG8oaSh0aGlzKSx0LGFyZ3VtZW50cy5sZW5ndGg+MT9hcmd1bWVudHNbMV06dm9pZCAwKX0pKX0sMjAyNDI6ZnVuY3Rpb24odCxlLG4peyJ1c2Ugc3RyaWN0Ijt2YXIgcj1uKDczMDc0KSxvPW4oNjU4OTUpLGk9ci5hVHlwZWRBcnJheTsoMCxyLmV4cG9ydFR5cGVkQXJyYXlNZXRob2QpKCJmaWxsIiwoZnVuY3Rpb24odCl7cmV0dXJuIG8uYXBwbHkoaSh0aGlzKSxhcmd1bWVudHMpfSkpfSwyODE1NTpmdW5jdGlvbih0LGUsbil7InVzZSBzdHJpY3QiO3ZhciByPW4oNzMwNzQpLG89bigzMDAyNSkuZmlsdGVyLGk9bigxMzk3OSksYT1yLmFUeXBlZEFycmF5LGM9ci5hVHlwZWRBcnJheUNvbnN0cnVjdG9yOygwLHIuZXhwb3J0VHlwZWRBcnJheU1ldGhvZCkoImZpbHRlciIsKGZ1bmN0aW9uKHQpe2Zvcih2YXIgZT1vKGEodGhpcyksdCxhcmd1bWVudHMubGVuZ3RoPjE/YXJndW1lbnRzWzFdOnZvaWQgMCksbj1pKHRoaXMsdGhpcy5jb25zdHJ1Y3Rvcikscj0wLHM9ZS5sZW5ndGgsdT1uZXcoYyhuKSkocyk7cz5yOyl1W3JdPWVbcisrXTtyZXR1cm4gdX0pKX0sNzY0NDI6ZnVuY3Rpb24odCxlLG4peyJ1c2Ugc3RyaWN0Ijt2YXIgcj1uKDczMDc0KSxvPW4oMzAwMjUpLmZpbmRJbmRleCxpPXIuYVR5cGVkQXJyYXk7KDAsci5leHBvcnRUeXBlZEFycmF5TWV0aG9kKSgiZmluZEluZGV4IiwoZnVuY3Rpb24odCl7cmV0dXJuIG8oaSh0aGlzKSx0LGFyZ3VtZW50cy5sZW5ndGg+MT9hcmd1bWVudHNbMV06dm9pZCAwKX0pKX0sMzM5MDE6ZnVuY3Rpb24odCxlLG4peyJ1c2Ugc3RyaWN0Ijt2YXIgcj1uKDczMDc0KSxvPW4oMzAwMjUpLmZpbmQsaT1yLmFUeXBlZEFycmF5OygwLHIuZXhwb3J0VHlwZWRBcnJheU1ldGhvZCkoImZpbmQiLChmdW5jdGlvbih0KXtyZXR1cm4gbyhpKHRoaXMpLHQsYXJndW1lbnRzLmxlbmd0aD4xP2FyZ3VtZW50c1sxXTp2b2lkIDApfSkpfSwyNjgwOmZ1bmN0aW9uKHQsZSxuKXtuKDkzMDE3KSgiRmxvYXQzMiIsKGZ1bmN0aW9uKHQpe3JldHVybiBmdW5jdGlvbihlLG4scil7cmV0dXJuIHQodGhpcyxlLG4scil9fSkpfSwzODI4MDpmdW5jdGlvbih0LGUsbil7big5MzAxNykoIkZsb2F0NjQiLChmdW5jdGlvbih0KXtyZXR1cm4gZnVuY3Rpb24oZSxuLHIpe3JldHVybiB0KHRoaXMsZSxuLHIpfX0pKX0sODg2MzY6ZnVuY3Rpb24odCxlLG4peyJ1c2Ugc3RyaWN0Ijt2YXIgcj1uKDczMDc0KSxvPW4oMzAwMjUpLmZvckVhY2gsaT1yLmFUeXBlZEFycmF5OygwLHIuZXhwb3J0VHlwZWRBcnJheU1ldGhvZCkoImZvckVhY2giLChmdW5jdGlvbih0KXtvKGkodGhpcyksdCxhcmd1bWVudHMubGVuZ3RoPjE/YXJndW1lbnRzWzFdOnZvaWQgMCl9KSl9LDE4NTU5OmZ1bmN0aW9uKHQsZSxuKXsidXNlIHN0cmljdCI7dmFyIHI9bigzNTYyNyk7KDAsbig3MzA3NCkuZXhwb3J0VHlwZWRBcnJheVN0YXRpY01ldGhvZCkoImZyb20iLG4oMjA0NTUpLHIpfSw4MTQ2MzpmdW5jdGlvbih0LGUsbil7InVzZSBzdHJpY3QiO3ZhciByPW4oNzMwNzQpLG89big4NTgwMykuaW5jbHVkZXMsaT1yLmFUeXBlZEFycmF5OygwLHIuZXhwb3J0VHlwZWRBcnJheU1ldGhvZCkoImluY2x1ZGVzIiwoZnVuY3Rpb24odCl7cmV0dXJuIG8oaSh0aGlzKSx0LGFyZ3VtZW50cy5sZW5ndGg+MT9hcmd1bWVudHNbMV06dm9pZCAwKX0pKX0sOTUxNjM6ZnVuY3Rpb24odCxlLG4peyJ1c2Ugc3RyaWN0Ijt2YXIgcj1uKDczMDc0KSxvPW4oODU4MDMpLmluZGV4T2YsaT1yLmFUeXBlZEFycmF5OygwLHIuZXhwb3J0VHlwZWRBcnJheU1ldGhvZCkoImluZGV4T2YiLChmdW5jdGlvbih0KXtyZXR1cm4gbyhpKHRoaXMpLHQsYXJndW1lbnRzLmxlbmd0aD4xP2FyZ3VtZW50c1sxXTp2b2lkIDApfSkpfSwyNDQ5ODpmdW5jdGlvbih0LGUsbil7big5MzAxNykoIkludDE2IiwoZnVuY3Rpb24odCl7cmV0dXJuIGZ1bmN0aW9uKGUsbixyKXtyZXR1cm4gdCh0aGlzLGUsbixyKX19KSl9LDE3MTUyOmZ1bmN0aW9uKHQsZSxuKXtuKDkzMDE3KSgiSW50MzIiLChmdW5jdGlvbih0KXtyZXR1cm4gZnVuY3Rpb24oZSxuLHIpe3JldHVybiB0KHRoaXMsZSxuLHIpfX0pKX0sNzAzNzM6ZnVuY3Rpb24odCxlLG4pe24oOTMwMTcpKCJJbnQ4IiwoZnVuY3Rpb24odCl7cmV0dXJuIGZ1bmN0aW9uKGUsbixyKXtyZXR1cm4gdCh0aGlzLGUsbixyKX19KSl9LDgzNjczOmZ1bmN0aW9uKHQsZSxuKXsidXNlIHN0cmljdCI7dmFyIHI9big4OTU1OCksbz1uKDczMDc0KSxpPW4oNTAwNjMpLGE9bigyMzcyNCkoIml0ZXJhdG9yIiksYz1yLlVpbnQ4QXJyYXkscz1pLnZhbHVlcyx1PWkua2V5cyxsPWkuZW50cmllcyxmPW8uYVR5cGVkQXJyYXksZD1vLmV4cG9ydFR5cGVkQXJyYXlNZXRob2QscD1jJiZjLnByb3RvdHlwZVthXSxoPSEhcCYmKCJ2YWx1ZXMiPT1wLm5hbWV8fG51bGw9PXAubmFtZSksdj1mdW5jdGlvbigpe3JldHVybiBzLmNhbGwoZih0aGlzKSl9O2QoImVudHJpZXMiLChmdW5jdGlvbigpe3JldHVybiBsLmNhbGwoZih0aGlzKSl9KSksZCgia2V5cyIsKGZ1bmN0aW9uKCl7cmV0dXJuIHUuY2FsbChmKHRoaXMpKX0pKSxkKCJ2YWx1ZXMiLHYsIWgpLGQoYSx2LCFoKX0sMjM1Njg6ZnVuY3Rpb24odCxlLG4peyJ1c2Ugc3RyaWN0Ijt2YXIgcj1uKDczMDc0KSxvPXIuYVR5cGVkQXJyYXksaT1yLmV4cG9ydFR5cGVkQXJyYXlNZXRob2QsYT1bXS5qb2luO2koImpvaW4iLChmdW5jdGlvbih0KXtyZXR1cm4gYS5hcHBseShvKHRoaXMpLGFyZ3VtZW50cyl9KSl9LDI3Mjk0OmZ1bmN0aW9uKHQsZSxuKXsidXNlIHN0cmljdCI7dmFyIHI9big3MzA3NCksbz1uKDQ5MjQ5KSxpPXIuYVR5cGVkQXJyYXk7KDAsci5leHBvcnRUeXBlZEFycmF5TWV0aG9kKSgibGFzdEluZGV4T2YiLChmdW5jdGlvbih0KXtyZXR1cm4gby5hcHBseShpKHRoaXMpLGFyZ3VtZW50cyl9KSl9LDI0NDU3OmZ1bmN0aW9uKHQsZSxuKXsidXNlIHN0cmljdCI7dmFyIHI9big3MzA3NCksbz1uKDMwMDI1KS5tYXAsaT1uKDEzOTc5KSxhPXIuYVR5cGVkQXJyYXksYz1yLmFUeXBlZEFycmF5Q29uc3RydWN0b3I7KDAsci5leHBvcnRUeXBlZEFycmF5TWV0aG9kKSgibWFwIiwoZnVuY3Rpb24odCl7cmV0dXJuIG8oYSh0aGlzKSx0LGFyZ3VtZW50cy5sZW5ndGg+MT9hcmd1bWVudHNbMV06dm9pZCAwLChmdW5jdGlvbih0LGUpe3JldHVybiBuZXcoYyhpKHQsdC5jb25zdHJ1Y3RvcikpKShlKX0pKX0pKX0sNTA0ODI6ZnVuY3Rpb24odCxlLG4peyJ1c2Ugc3RyaWN0Ijt2YXIgcj1uKDczMDc0KSxvPW4oMzU2MjcpLGk9ci5hVHlwZWRBcnJheUNvbnN0cnVjdG9yOygwLHIuZXhwb3J0VHlwZWRBcnJheVN0YXRpY01ldGhvZCkoIm9mIiwoZnVuY3Rpb24oKXtmb3IodmFyIHQ9MCxlPWFyZ3VtZW50cy5sZW5ndGgsbj1uZXcoaSh0aGlzKSkoZSk7ZT50OyluW3RdPWFyZ3VtZW50c1t0KytdO3JldHVybiBufSksbyl9LDc1NDk5OmZ1bmN0aW9uKHQsZSxuKXsidXNlIHN0cmljdCI7dmFyIHI9big3MzA3NCksbz1uKDEyMzY2KS5yaWdodCxpPXIuYVR5cGVkQXJyYXk7KDAsci5leHBvcnRUeXBlZEFycmF5TWV0aG9kKSgicmVkdWNlUmlnaHQiLChmdW5jdGlvbih0KXtyZXR1cm4gbyhpKHRoaXMpLHQsYXJndW1lbnRzLmxlbmd0aCxhcmd1bWVudHMubGVuZ3RoPjE/YXJndW1lbnRzWzFdOnZvaWQgMCl9KSl9LDM5MzI6ZnVuY3Rpb24odCxlLG4peyJ1c2Ugc3RyaWN0Ijt2YXIgcj1uKDczMDc0KSxvPW4oMTIzNjYpLmxlZnQsaT1yLmFUeXBlZEFycmF5OygwLHIuZXhwb3J0VHlwZWRBcnJheU1ldGhvZCkoInJlZHVjZSIsKGZ1bmN0aW9uKHQpe3JldHVybiBvKGkodGhpcyksdCxhcmd1bWVudHMubGVuZ3RoLGFyZ3VtZW50cy5sZW5ndGg+MT9hcmd1bWVudHNbMV06dm9pZCAwKX0pKX0sODc1NjQ6ZnVuY3Rpb24odCxlLG4peyJ1c2Ugc3RyaWN0Ijt2YXIgcj1uKDczMDc0KSxvPXIuYVR5cGVkQXJyYXksaT1yLmV4cG9ydFR5cGVkQXJyYXlNZXRob2QsYT1NYXRoLmZsb29yO2koInJldmVyc2UiLChmdW5jdGlvbigpe2Zvcih2YXIgdCxlPXRoaXMsbj1vKGUpLmxlbmd0aCxyPWEobi8yKSxpPTA7aTxyOyl0PWVbaV0sZVtpKytdPWVbLS1uXSxlW25dPXQ7cmV0dXJuIGV9KSl9LDg0NTA6ZnVuY3Rpb24odCxlLG4peyJ1c2Ugc3RyaWN0Ijt2YXIgcj1uKDczMDc0KSxvPW4oMjc4ODQpLGk9big2MDU1OCksYT1uKDE5MjA5KSxjPW4oMzIxODcpLHM9ci5hVHlwZWRBcnJheTsoMCxyLmV4cG9ydFR5cGVkQXJyYXlNZXRob2QpKCJzZXQiLChmdW5jdGlvbih0KXtzKHRoaXMpO3ZhciBlPWkoYXJndW1lbnRzLmxlbmd0aD4xP2FyZ3VtZW50c1sxXTp2b2lkIDAsMSksbj10aGlzLmxlbmd0aCxyPWEodCksYz1vKHIubGVuZ3RoKSx1PTA7aWYoYytlPm4pdGhyb3cgUmFuZ2VFcnJvcigiV3JvbmcgbGVuZ3RoIik7Zm9yKDt1PGM7KXRoaXNbZSt1XT1yW3UrK119KSxjKChmdW5jdGlvbigpe25ldyBJbnQ4QXJyYXkoMSkuc2V0KHt9KX0pKSl9LDE3NjA1OmZ1bmN0aW9uKHQsZSxuKXsidXNlIHN0cmljdCI7dmFyIHI9big3MzA3NCksbz1uKDEzOTc5KSxpPW4oMzIxODcpLGE9ci5hVHlwZWRBcnJheSxjPXIuYVR5cGVkQXJyYXlDb25zdHJ1Y3RvcixzPXIuZXhwb3J0VHlwZWRBcnJheU1ldGhvZCx1PVtdLnNsaWNlO3MoInNsaWNlIiwoZnVuY3Rpb24odCxlKXtmb3IodmFyIG49dS5jYWxsKGEodGhpcyksdCxlKSxyPW8odGhpcyx0aGlzLmNvbnN0cnVjdG9yKSxpPTAscz1uLmxlbmd0aCxsPW5ldyhjKHIpKShzKTtzPmk7KWxbaV09bltpKytdO3JldHVybiBsfSksaSgoZnVuY3Rpb24oKXtuZXcgSW50OEFycmF5KDEpLnNsaWNlKCl9KSkpfSw3MzU2MjpmdW5jdGlvbih0LGUsbil7InVzZSBzdHJpY3QiO3ZhciByPW4oNzMwNzQpLG89bigzMDAyNSkuc29tZSxpPXIuYVR5cGVkQXJyYXk7KDAsci5leHBvcnRUeXBlZEFycmF5TWV0aG9kKSgic29tZSIsKGZ1bmN0aW9uKHQpe3JldHVybiBvKGkodGhpcyksdCxhcmd1bWVudHMubGVuZ3RoPjE/YXJndW1lbnRzWzFdOnZvaWQgMCl9KSl9LDExODc4OmZ1bmN0aW9uKHQsZSxuKXsidXNlIHN0cmljdCI7dmFyIHI9big3MzA3NCksbz1yLmFUeXBlZEFycmF5LGk9ci5leHBvcnRUeXBlZEFycmF5TWV0aG9kLGE9W10uc29ydDtpKCJzb3J0IiwoZnVuY3Rpb24odCl7cmV0dXJuIGEuY2FsbChvKHRoaXMpLHQpfSkpfSw2MDkyOTpmdW5jdGlvbih0LGUsbil7InVzZSBzdHJpY3QiO3ZhciByPW4oNzMwNzQpLG89bigyNzg4NCksaT1uKDc2OTc2KSxhPW4oMTM5NzkpLGM9ci5hVHlwZWRBcnJheTsoMCxyLmV4cG9ydFR5cGVkQXJyYXlNZXRob2QpKCJzdWJhcnJheSIsKGZ1bmN0aW9uKHQsZSl7dmFyIG49Yyh0aGlzKSxyPW4ubGVuZ3RoLHM9aSh0LHIpO3JldHVybiBuZXcoYShuLG4uY29uc3RydWN0b3IpKShuLmJ1ZmZlcixuLmJ5dGVPZmZzZXQrcypuLkJZVEVTX1BFUl9FTEVNRU5ULG8oKHZvaWQgMD09PWU/cjppKGUscikpLXMpKX0pKX0sNDM5NTE6ZnVuY3Rpb24odCxlLG4peyJ1c2Ugc3RyaWN0Ijt2YXIgcj1uKDg5NTU4KSxvPW4oNzMwNzQpLGk9bigzMjE4NyksYT1yLkludDhBcnJheSxjPW8uYVR5cGVkQXJyYXkscz1vLmV4cG9ydFR5cGVkQXJyYXlNZXRob2QsdT1bXS50b0xvY2FsZVN0cmluZyxsPVtdLnNsaWNlLGY9ISFhJiZpKChmdW5jdGlvbigpe3UuY2FsbChuZXcgYSgxKSl9KSk7cygidG9Mb2NhbGVTdHJpbmciLChmdW5jdGlvbigpe3JldHVybiB1LmFwcGx5KGY/bC5jYWxsKGModGhpcykpOmModGhpcyksYXJndW1lbnRzKX0pLGkoKGZ1bmN0aW9uKCl7cmV0dXJuWzEsMl0udG9Mb2NhbGVTdHJpbmcoKSE9bmV3IGEoWzEsMl0pLnRvTG9jYWxlU3RyaW5nKCl9KSl8fCFpKChmdW5jdGlvbigpe2EucHJvdG90eXBlLnRvTG9jYWxlU3RyaW5nLmNhbGwoWzEsMl0pfSkpKX0sOTEzNDc6ZnVuY3Rpb24odCxlLG4peyJ1c2Ugc3RyaWN0Ijt2YXIgcj1uKDczMDc0KS5leHBvcnRUeXBlZEFycmF5TWV0aG9kLG89bigzMjE4NyksaT1uKDg5NTU4KS5VaW50OEFycmF5LGE9aSYmaS5wcm90b3R5cGV8fHt9LGM9W10udG9TdHJpbmcscz1bXS5qb2luO28oKGZ1bmN0aW9uKCl7Yy5jYWxsKHt9KX0pKSYmKGM9ZnVuY3Rpb24oKXtyZXR1cm4gcy5jYWxsKHRoaXMpfSk7dmFyIHU9YS50b1N0cmluZyE9YztyKCJ0b1N0cmluZyIsYyx1KX0sMTY5Nzg6ZnVuY3Rpb24odCxlLG4pe24oOTMwMTcpKCJVaW50MTYiLChmdW5jdGlvbih0KXtyZXR1cm4gZnVuY3Rpb24oZSxuLHIpe3JldHVybiB0KHRoaXMsZSxuLHIpfX0pKX0sMzc5ODc6ZnVuY3Rpb24odCxlLG4pe24oOTMwMTcpKCJVaW50MzIiLChmdW5jdGlvbih0KXtyZXR1cm4gZnVuY3Rpb24oZSxuLHIpe3JldHVybiB0KHRoaXMsZSxuLHIpfX0pKX0sODA3NTc6ZnVuY3Rpb24odCxlLG4pe24oOTMwMTcpKCJVaW50OCIsKGZ1bmN0aW9uKHQpe3JldHVybiBmdW5jdGlvbihlLG4scil7cmV0dXJuIHQodGhpcyxlLG4scil9fSkpfSw2OTg3OTpmdW5jdGlvbih0LGUsbil7big5MzAxNykoIlVpbnQ4IiwoZnVuY3Rpb24odCl7cmV0dXJuIGZ1bmN0aW9uKGUsbixyKXtyZXR1cm4gdCh0aGlzLGUsbixyKX19KSwhMCl9LDU4NjA2OmZ1bmN0aW9uKHQsZSxuKXsidXNlIHN0cmljdCI7dmFyIHIsbz1uKDg5NTU4KSxpPW4oMTkyNiksYT1uKDk2MDMpLGM9big4MTk1MSkscz1uKDcxMzAzKSx1PW4oMTA1OTIpLGw9big4OTgyNykuZW5mb3JjZSxmPW4oMTk1OTEpLGQ9IW8uQWN0aXZlWE9iamVjdCYmIkFjdGl2ZVhPYmplY3QiaW4gbyxwPU9iamVjdC5pc0V4dGVuc2libGUsaD1mdW5jdGlvbih0KXtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gdCh0aGlzLGFyZ3VtZW50cy5sZW5ndGg/YXJndW1lbnRzWzBdOnZvaWQgMCl9fSx2PXQuZXhwb3J0cz1jKCJXZWFrTWFwIixoLHMpO2lmKGYmJmQpe3I9cy5nZXRDb25zdHJ1Y3RvcihoLCJXZWFrTWFwIiwhMCksYS5SRVFVSVJFRD0hMDt2YXIgZz12LnByb3RvdHlwZSx5PWcuZGVsZXRlLG09Zy5oYXMsYj1nLmdldCx4PWcuc2V0O2koZyx7ZGVsZXRlOmZ1bmN0aW9uKHQpe2lmKHUodCkmJiFwKHQpKXt2YXIgZT1sKHRoaXMpO3JldHVybiBlLmZyb3plbnx8KGUuZnJvemVuPW5ldyByKSx5LmNhbGwodGhpcyx0KXx8ZS5mcm96ZW4uZGVsZXRlKHQpfXJldHVybiB5LmNhbGwodGhpcyx0KX0saGFzOmZ1bmN0aW9uKHQpe2lmKHUodCkmJiFwKHQpKXt2YXIgZT1sKHRoaXMpO3JldHVybiBlLmZyb3plbnx8KGUuZnJvemVuPW5ldyByKSxtLmNhbGwodGhpcyx0KXx8ZS5mcm96ZW4uaGFzKHQpfXJldHVybiBtLmNhbGwodGhpcyx0KX0sZ2V0OmZ1bmN0aW9uKHQpe2lmKHUodCkmJiFwKHQpKXt2YXIgZT1sKHRoaXMpO3JldHVybiBlLmZyb3plbnx8KGUuZnJvemVuPW5ldyByKSxtLmNhbGwodGhpcyx0KT9iLmNhbGwodGhpcyx0KTplLmZyb3plbi5nZXQodCl9cmV0dXJuIGIuY2FsbCh0aGlzLHQpfSxzZXQ6ZnVuY3Rpb24odCxlKXtpZih1KHQpJiYhcCh0KSl7dmFyIG49bCh0aGlzKTtuLmZyb3plbnx8KG4uZnJvemVuPW5ldyByKSxtLmNhbGwodGhpcyx0KT94LmNhbGwodGhpcyx0LGUpOm4uZnJvemVuLnNldCh0LGUpfWVsc2UgeC5jYWxsKHRoaXMsdCxlKTtyZXR1cm4gdGhpc319KX19LDQ1MTU3OmZ1bmN0aW9uKHQsZSxuKXsidXNlIHN0cmljdCI7big4MTk1MSkoIldlYWtTZXQiLChmdW5jdGlvbih0KXtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gdCh0aGlzLGFyZ3VtZW50cy5sZW5ndGg/YXJndW1lbnRzWzBdOnZvaWQgMCl9fSksbig3MTMwMykpfSw5Njc1MTpmdW5jdGlvbih0LGUsbil7InVzZSBzdHJpY3QiO3ZhciByPW4oMTQwNDQpLG89big2MjU1NiksaT1uKDY0OTY1KSxhPW4oNzE4NDIpLGM9big1MDg2OCkscz1uKDM3NjIwKSx1PW4oMTQyMDkpLGw9big0MTMzNCksZj1uKDY2OTcxKSxkPW4oODk4MjcpLHA9ZC5zZXQsaD1kLmdldHRlckZvcigiQWdncmVnYXRlRXJyb3IiKSx2PWZ1bmN0aW9uKHQsZSl7dmFyIG49dGhpcztpZighKG4gaW5zdGFuY2VvZiB2KSlyZXR1cm4gbmV3IHYodCxlKTthJiYobj1hKG5ldyBFcnJvcihlKSxpKG4pKSk7dmFyIHI9W107cmV0dXJuIGwodCxyLnB1c2gsciksbz9wKG4se2Vycm9yczpyLHR5cGU6IkFnZ3JlZ2F0ZUVycm9yIn0pOm4uZXJyb3JzPXIsdm9pZCAwIT09ZSYmZihuLCJtZXNzYWdlIixTdHJpbmcoZSkpLG59O3YucHJvdG90eXBlPWMoRXJyb3IucHJvdG90eXBlLHtjb25zdHJ1Y3Rvcjp1KDUsdiksbWVzc2FnZTp1KDUsIiIpLG5hbWU6dSg1LCJBZ2dyZWdhdGVFcnJvciIpfSksbyYmcy5mKHYucHJvdG90eXBlLCJlcnJvcnMiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gaCh0aGlzKS5lcnJvcnN9LGNvbmZpZ3VyYWJsZTohMH0pLHIoe2dsb2JhbDohMH0se0FnZ3JlZ2F0ZUVycm9yOnZ9KX0sMTQwODY6ZnVuY3Rpb24odCxlLG4pe3ZhciByPW4oMTQwNDQpLG89big2MTk5KSxpPU9iamVjdC5pc0Zyb3plbixhPWZ1bmN0aW9uKHQsZSl7aWYoIWl8fCFvKHQpfHwhaSh0KSlyZXR1cm4hMTtmb3IodmFyIG4scj0wLGE9dC5sZW5ndGg7cjxhOylpZighKCJzdHJpbmciPT10eXBlb2Yobj10W3IrK10pfHxlJiZ2b2lkIDA9PT1uKSlyZXR1cm4hMTtyZXR1cm4gMCE9PWF9O3Ioe3RhcmdldDoiQXJyYXkiLHN0YXQ6ITB9LHtpc1RlbXBsYXRlT2JqZWN0OmZ1bmN0aW9uKHQpe2lmKCFhKHQsITApKXJldHVybiExO3ZhciBlPXQucmF3O3JldHVybiEoZS5sZW5ndGghPT10Lmxlbmd0aHx8IWEoZSwhMSkpfX0pfSw0OTMwOmZ1bmN0aW9uKHQsZSxuKXsidXNlIHN0cmljdCI7dmFyIHI9big2MjU1Niksbz1uKDc2NTEzKSxpPW4oMTkyMDkpLGE9bigyNzg4NCksYz1uKDM3NjIwKS5mO3ImJiEoImxhc3RJbmRleCJpbltdKSYmKGMoQXJyYXkucHJvdG90eXBlLCJsYXN0SW5kZXgiLHtjb25maWd1cmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7dmFyIHQ9aSh0aGlzKSxlPWEodC5sZW5ndGgpO3JldHVybiAwPT1lPzA6ZS0xfX0pLG8oImxhc3RJbmRleCIpKX0sNjM2NDpmdW5jdGlvbih0LGUsbil7InVzZSBzdHJpY3QiO3ZhciByPW4oNjI1NTYpLG89big3NjUxMyksaT1uKDE5MjA5KSxhPW4oMjc4ODQpLGM9bigzNzYyMCkuZjtyJiYhKCJsYXN0SXRlbSJpbltdKSYmKGMoQXJyYXkucHJvdG90eXBlLCJsYXN0SXRlbSIse2NvbmZpZ3VyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXt2YXIgdD1pKHRoaXMpLGU9YSh0Lmxlbmd0aCk7cmV0dXJuIDA9PWU/dm9pZCAwOnRbZS0xXX0sc2V0OmZ1bmN0aW9uKHQpe3ZhciBlPWkodGhpcyksbj1hKGUubGVuZ3RoKTtyZXR1cm4gZVswPT1uPzA6bi0xXT10fX0pLG8oImxhc3RJdGVtIikpfSw0NzAwNDpmdW5jdGlvbih0LGUsbil7InVzZSBzdHJpY3QiO3ZhciByPW4oMTQwNDQpLG89big4NzU3OSksaT1uKDI3MDA0KSgoZnVuY3Rpb24odCxlKXt2YXIgbj10aGlzLHI9bi5pdGVyYXRvcjtyZXR1cm4gZS5yZXNvbHZlKG8obi5uZXh0LmNhbGwocix0KSkpLnRoZW4oKGZ1bmN0aW9uKHQpe3JldHVybiBvKHQpLmRvbmU/KG4uZG9uZT0hMCx7ZG9uZTohMCx2YWx1ZTp2b2lkIDB9KTp7ZG9uZTohMSx2YWx1ZTpbbi5pbmRleCsrLHQudmFsdWVdfX0pKX0pKTtyKHt0YXJnZXQ6IkFzeW5jSXRlcmF0b3IiLHByb3RvOiEwLHJlYWw6ITB9LHthc0luZGV4ZWRQYWlyczpmdW5jdGlvbigpe3JldHVybiBuZXcgaSh7aXRlcmF0b3I6byh0aGlzKSxpbmRleDowfSl9fSl9LDYxMjk4OmZ1bmN0aW9uKHQsZSxuKXsidXNlIHN0cmljdCI7dmFyIHI9bigxNDA0NCksbz1uKDU5Mzc5KSxpPW4oNjY5NzEpLGE9big3NjI5OCksYz1uKDIzNzI0KSxzPW4oNjM4NDUpLHU9big2NTY3MiksbD1jKCJ0b1N0cmluZ1RhZyIpLGY9ZnVuY3Rpb24oKXtvKHRoaXMsZil9O2YucHJvdG90eXBlPXMsYShzLGwpfHxpKHMsbCwiQXN5bmNJdGVyYXRvciIpLGEocywiY29uc3RydWN0b3IiKSYmcy5jb25zdHJ1Y3RvciE9PU9iamVjdHx8aShzLCJjb25zdHJ1Y3RvciIsZikscih7Z2xvYmFsOiEwLGZvcmNlZDp1fSx7QXN5bmNJdGVyYXRvcjpmfSl9LDY3NDYyOmZ1bmN0aW9uKHQsZSxuKXsidXNlIHN0cmljdCI7dmFyIHI9bigxNDA0NCksbz1uKDg3NTc5KSxpPW4oNDU2ODApLGE9bigyNzAwNCkoKGZ1bmN0aW9uKHQsZSl7dmFyIG49dGhpcztyZXR1cm4gbmV3IGUoKGZ1bmN0aW9uKHIsaSl7dmFyIGE9ZnVuY3Rpb24oKXt0cnl7ZS5yZXNvbHZlKG8obi5uZXh0LmNhbGwobi5pdGVyYXRvcixuLnJlbWFpbmluZz92b2lkIDA6dCkpKS50aGVuKChmdW5jdGlvbih0KXt0cnl7byh0KS5kb25lPyhuLmRvbmU9ITAscih7ZG9uZTohMCx2YWx1ZTp2b2lkIDB9KSk6bi5yZW1haW5pbmc/KG4ucmVtYWluaW5nLS0sYSgpKTpyKHtkb25lOiExLHZhbHVlOnQudmFsdWV9KX1jYXRjaCh0KXtpKHQpfX0pLGkpfWNhdGNoKHQpe2kodCl9fTthKCl9KSl9KSk7cih7dGFyZ2V0OiJBc3luY0l0ZXJhdG9yIixwcm90bzohMCxyZWFsOiEwfSx7ZHJvcDpmdW5jdGlvbih0KXtyZXR1cm4gbmV3IGEoe2l0ZXJhdG9yOm8odGhpcykscmVtYWluaW5nOmkodCl9KX19KX0sOTA2NzpmdW5jdGlvbih0LGUsbil7InVzZSBzdHJpY3QiO3ZhciByPW4oMTQwNDQpLG89big0NTY2NikuZXZlcnk7cih7dGFyZ2V0OiJBc3luY0l0ZXJhdG9yIixwcm90bzohMCxyZWFsOiEwfSx7ZXZlcnk6ZnVuY3Rpb24odCl7cmV0dXJuIG8odGhpcyx0KX19KX0sMjAxMjQ6ZnVuY3Rpb24odCxlLG4peyJ1c2Ugc3RyaWN0Ijt2YXIgcj1uKDE0MDQ0KSxvPW4oODY0NzApLGk9big4NzU3OSksYT1uKDI3MDA0KSgoZnVuY3Rpb24odCxlKXt2YXIgbj10aGlzLHI9bi5maWx0ZXJlcjtyZXR1cm4gbmV3IGUoKGZ1bmN0aW9uKG8sYSl7dmFyIGM9ZnVuY3Rpb24oKXt0cnl7ZS5yZXNvbHZlKGkobi5uZXh0LmNhbGwobi5pdGVyYXRvcix0KSkpLnRoZW4oKGZ1bmN0aW9uKHQpe3RyeXtpZihpKHQpLmRvbmUpbi5kb25lPSEwLG8oe2RvbmU6ITAsdmFsdWU6dm9pZCAwfSk7ZWxzZXt2YXIgcz10LnZhbHVlO2UucmVzb2x2ZShyKHMpKS50aGVuKChmdW5jdGlvbih0KXt0P28oe2RvbmU6ITEsdmFsdWU6c30pOmMoKX0pLGEpfX1jYXRjaCh0KXthKHQpfX0pLGEpfWNhdGNoKHQpe2EodCl9fTtjKCl9KSl9KSk7cih7dGFyZ2V0OiJBc3luY0l0ZXJhdG9yIixwcm90bzohMCxyZWFsOiEwfSx7ZmlsdGVyOmZ1bmN0aW9uKHQpe3JldHVybiBuZXcgYSh7aXRlcmF0b3I6aSh0aGlzKSxmaWx0ZXJlcjpvKHQpfSl9fSl9LDIxMzcxOmZ1bmN0aW9uKHQsZSxuKXsidXNlIHN0cmljdCI7dmFyIHI9bigxNDA0NCksbz1uKDQ1NjY2KS5maW5kO3Ioe3RhcmdldDoiQXN5bmNJdGVyYXRvciIscHJvdG86ITAscmVhbDohMH0se2ZpbmQ6ZnVuY3Rpb24odCl7cmV0dXJuIG8odGhpcyx0KX19KX0sMzg5ODQ6ZnVuY3Rpb24odCxlLG4peyJ1c2Ugc3RyaWN0Ijt2YXIgcj1uKDE0MDQ0KSxvPW4oODY0NzApLGk9big4NzU3OSksYT1uKDI3MDA0KSxjPW4oNjY5MjApLHM9YSgoZnVuY3Rpb24odCxlKXt2YXIgbixyLGE9dGhpcyxzPWEubWFwcGVyO3JldHVybiBuZXcgZSgoZnVuY3Rpb24odSxsKXt2YXIgZj1mdW5jdGlvbigpe3RyeXtlLnJlc29sdmUoaShhLm5leHQuY2FsbChhLml0ZXJhdG9yLHQpKSkudGhlbigoZnVuY3Rpb24odCl7dHJ5e2kodCkuZG9uZT8oYS5kb25lPSEwLHUoe2RvbmU6ITAsdmFsdWU6dm9pZCAwfSkpOmUucmVzb2x2ZShzKHQudmFsdWUpKS50aGVuKChmdW5jdGlvbih0KXt0cnl7aWYodm9pZCAwIT09KHI9Yyh0KSkpcmV0dXJuIGEuaW5uZXJJdGVyYXRvcj1uPWkoci5jYWxsKHQpKSxhLmlubmVyTmV4dD1vKG4ubmV4dCksZCgpO2woVHlwZUVycm9yKCIuZmxhdE1hcCBjYWxsYmFjayBzaG91bGQgcmV0dXJuIGFuIGl0ZXJhYmxlIG9iamVjdCIpKX1jYXRjaCh0KXtsKHQpfX0pLGwpfWNhdGNoKHQpe2wodCl9fSksbCl9Y2F0Y2godCl7bCh0KX19LGQ9ZnVuY3Rpb24oKXtpZihuPWEuaW5uZXJJdGVyYXRvcil0cnl7ZS5yZXNvbHZlKGkoYS5pbm5lck5leHQuY2FsbChuKSkpLnRoZW4oKGZ1bmN0aW9uKHQpe3RyeXtpKHQpLmRvbmU/KGEuaW5uZXJJdGVyYXRvcj1hLmlubmVyTmV4dD1udWxsLGYoKSk6dSh7ZG9uZTohMSx2YWx1ZTp0LnZhbHVlfSl9Y2F0Y2godCl7bCh0KX19KSxsKX1jYXRjaCh0KXtsKHQpfWVsc2UgZigpfTtkKCl9KSl9KSk7cih7dGFyZ2V0OiJBc3luY0l0ZXJhdG9yIixwcm90bzohMCxyZWFsOiEwfSx7ZmxhdE1hcDpmdW5jdGlvbih0KXtyZXR1cm4gbmV3IHMoe2l0ZXJhdG9yOmkodGhpcyksbWFwcGVyOm8odCksaW5uZXJJdGVyYXRvcjpudWxsLGlubmVyTmV4dDpudWxsfSl9fSl9LDY5MjM3OmZ1bmN0aW9uKHQsZSxuKXsidXNlIHN0cmljdCI7dmFyIHI9bigxNDA0NCksbz1uKDQ1NjY2KS5mb3JFYWNoO3Ioe3RhcmdldDoiQXN5bmNJdGVyYXRvciIscHJvdG86ITAscmVhbDohMH0se2ZvckVhY2g6ZnVuY3Rpb24odCl7cmV0dXJuIG8odGhpcyx0KX19KX0sMjY0OTc6ZnVuY3Rpb24odCxlLG4pe3ZhciByPW4oMTQwNDQpLG89big1NjIzOCksaT1uKDg2NDcwKSxhPW4oODc1NzkpLGM9bigxOTIwOSkscz1uKDI3MDA0KSx1PW4oNjY5MjApLGw9by5Bc3luY0l0ZXJhdG9yLGY9cygoZnVuY3Rpb24odCl7cmV0dXJuIGEodGhpcy5uZXh0LmNhbGwodGhpcy5pdGVyYXRvcix0KSl9KSwhMCk7cih7dGFyZ2V0OiJBc3luY0l0ZXJhdG9yIixzdGF0OiEwfSx7ZnJvbTpmdW5jdGlvbih0KXt2YXIgZSxuPWModCkscj11KG4pO2lmKG51bGwhPXIpe2lmKChlPWkocikuY2FsbChuKSlpbnN0YW5jZW9mIGwpcmV0dXJuIGV9ZWxzZSBlPW47cmV0dXJuIG5ldyBmKHtpdGVyYXRvcjplfSl9fSl9LDUzMTY4OmZ1bmN0aW9uKHQsZSxuKXsidXNlIHN0cmljdCI7dmFyIHI9bigxNDA0NCksbz1uKDg2NDcwKSxpPW4oODc1NzkpLGE9bigyNzAwNCkoKGZ1bmN0aW9uKHQsZSl7dmFyIG49dGhpcyxyPW4ubWFwcGVyO3JldHVybiBlLnJlc29sdmUoaShuLm5leHQuY2FsbChuLml0ZXJhdG9yLHQpKSkudGhlbigoZnVuY3Rpb24odCl7cmV0dXJuIGkodCkuZG9uZT8obi5kb25lPSEwLHtkb25lOiEwLHZhbHVlOnZvaWQgMH0pOmUucmVzb2x2ZShyKHQudmFsdWUpKS50aGVuKChmdW5jdGlvbih0KXtyZXR1cm57ZG9uZTohMSx2YWx1ZTp0fX0pKX0pKX0pKTtyKHt0YXJnZXQ6IkFzeW5jSXRlcmF0b3IiLHByb3RvOiEwLHJlYWw6ITB9LHttYXA6ZnVuY3Rpb24odCl7cmV0dXJuIG5ldyBhKHtpdGVyYXRvcjppKHRoaXMpLG1hcHBlcjpvKHQpfSl9fSl9LDczOTQ5OmZ1bmN0aW9uKHQsZSxuKXsidXNlIHN0cmljdCI7dmFyIHI9bigxNDA0NCksbz1uKDg2NDcwKSxpPW4oODc1NzkpLGE9big3NzAxKSgiUHJvbWlzZSIpO3Ioe3RhcmdldDoiQXN5bmNJdGVyYXRvciIscHJvdG86ITAscmVhbDohMH0se3JlZHVjZTpmdW5jdGlvbih0KXt2YXIgZT1pKHRoaXMpLG49byhlLm5leHQpLHI9YXJndW1lbnRzLmxlbmd0aDwyLGM9cj92b2lkIDA6YXJndW1lbnRzWzFdO3JldHVybiBvKHQpLG5ldyBhKChmdW5jdGlvbihvLHMpe3ZhciB1PWZ1bmN0aW9uKCl7dHJ5e2EucmVzb2x2ZShpKG4uY2FsbChlKSkpLnRoZW4oKGZ1bmN0aW9uKGUpe3RyeXtpZihpKGUpLmRvbmUpcj9zKFR5cGVFcnJvcigiUmVkdWNlIG9mIGVtcHR5IGl0ZXJhdG9yIHdpdGggbm8gaW5pdGlhbCB2YWx1ZSIpKTpvKGMpO2Vsc2V7dmFyIG49ZS52YWx1ZTtyPyhyPSExLGM9bix1KCkpOmEucmVzb2x2ZSh0KGMsbikpLnRoZW4oKGZ1bmN0aW9uKHQpe2M9dCx1KCl9KSxzKX19Y2F0Y2godCl7cyh0KX19KSxzKX1jYXRjaCh0KXtzKHQpfX07dSgpfSkpfX0pfSw4ODIxMTpmdW5jdGlvbih0LGUsbil7InVzZSBzdHJpY3QiO3ZhciByPW4oMTQwNDQpLG89big0NTY2Nikuc29tZTtyKHt0YXJnZXQ6IkFzeW5jSXRlcmF0b3IiLHByb3RvOiEwLHJlYWw6ITB9LHtzb21lOmZ1bmN0aW9uKHQpe3JldHVybiBvKHRoaXMsdCl9fSl9LDczNzYxOmZ1bmN0aW9uKHQsZSxuKXsidXNlIHN0cmljdCI7dmFyIHI9bigxNDA0NCksbz1uKDg3NTc5KSxpPW4oNDU2ODApLGE9bigyNzAwNCkoKGZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLnJlbWFpbmluZy0tP3RoaXMubmV4dC5jYWxsKHRoaXMuaXRlcmF0b3IsdCk6KHRoaXMuZG9uZT0hMCx7ZG9uZTohMCx2YWx1ZTp2b2lkIDB9KX0pKTtyKHt0YXJnZXQ6IkFzeW5jSXRlcmF0b3IiLHByb3RvOiEwLHJlYWw6ITB9LHt0YWtlOmZ1bmN0aW9uKHQpe3JldHVybiBuZXcgYSh7aXRlcmF0b3I6byh0aGlzKSxyZW1haW5pbmc6aSh0KX0pfX0pfSw0MjE5NjpmdW5jdGlvbih0LGUsbil7InVzZSBzdHJpY3QiO3ZhciByPW4oMTQwNDQpLG89big0NTY2NikudG9BcnJheTtyKHt0YXJnZXQ6IkFzeW5jSXRlcmF0b3IiLHByb3RvOiEwLHJlYWw6ITB9LHt0b0FycmF5OmZ1bmN0aW9uKCl7cmV0dXJuIG8odGhpcyl9fSl9LDM2NTcxOmZ1bmN0aW9uKHQsZSxuKXt2YXIgcj1uKDE0MDQ0KSxvPW4oNzQ2ODUpLGk9big3NzAxKSxhPW4oNTA4NjgpLGM9ZnVuY3Rpb24oKXt2YXIgdD1pKCJPYmplY3QiLCJmcmVlemUiKTtyZXR1cm4gdD90KGEobnVsbCkpOmEobnVsbCl9O3Ioe2dsb2JhbDohMH0se2NvbXBvc2l0ZUtleTpmdW5jdGlvbigpe3JldHVybiBvLmFwcGx5KE9iamVjdCxhcmd1bWVudHMpLmdldCgib2JqZWN0IixjKX19KX0sNDMwODY6ZnVuY3Rpb24odCxlLG4pe3ZhciByPW4oMTQwNDQpLG89big3NDY4NSksaT1uKDc3MDEpO3Ioe2dsb2JhbDohMH0se2NvbXBvc2l0ZVN5bWJvbDpmdW5jdGlvbigpe3JldHVybiAxPT09YXJndW1lbnRzLmxlbmd0aCYmInN0cmluZyI9PXR5cGVvZiBhcmd1bWVudHNbMF0/aSgiU3ltYm9sIikuZm9yKGFyZ3VtZW50c1swXSk6by5hcHBseShudWxsLGFyZ3VtZW50cykuZ2V0KCJzeW1ib2wiLGkoIlN5bWJvbCIpKX19KX0sOTk2Mjg6ZnVuY3Rpb24odCxlLG4pe24oNzE2MjIpfSw5MjYwMTpmdW5jdGlvbih0LGUsbil7InVzZSBzdHJpY3QiO3ZhciByPW4oMTQwNDQpLG89big4NzU3OSksaT1uKDg4MDcpKChmdW5jdGlvbih0KXt2YXIgZT1vKHRoaXMubmV4dC5jYWxsKHRoaXMuaXRlcmF0b3IsdCkpO2lmKCEodGhpcy5kb25lPSEhZS5kb25lKSlyZXR1cm5bdGhpcy5pbmRleCsrLGUudmFsdWVdfSkpO3Ioe3RhcmdldDoiSXRlcmF0b3IiLHByb3RvOiEwLHJlYWw6ITB9LHthc0luZGV4ZWRQYWlyczpmdW5jdGlvbigpe3JldHVybiBuZXcgaSh7aXRlcmF0b3I6byh0aGlzKSxpbmRleDowfSl9fSl9LDQzMzMyOmZ1bmN0aW9uKHQsZSxuKXsidXNlIHN0cmljdCI7dmFyIHI9bigxNDA0NCksbz1uKDg5NTU4KSxpPW4oNTkzNzkpLGE9big2Njk3MSksYz1uKDMyMTg3KSxzPW4oNzYyOTgpLHU9bigyMzcyNCksbD1uKDY0MTc2KS5JdGVyYXRvclByb3RvdHlwZSxmPW4oNjU2NzIpLGQ9dSgiaXRlcmF0b3IiKSxwPXUoInRvU3RyaW5nVGFnIiksaD1vLkl0ZXJhdG9yLHY9Znx8ImZ1bmN0aW9uIiE9dHlwZW9mIGh8fGgucHJvdG90eXBlIT09bHx8IWMoKGZ1bmN0aW9uKCl7aCh7fSl9KSksZz1mdW5jdGlvbigpe2kodGhpcyxnKX07ZiYmYShsPXt9LGQsKGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXN9KSkscyhsLHApfHxhKGwscCwiSXRlcmF0b3IiKSwhdiYmcyhsLCJjb25zdHJ1Y3RvciIpJiZsLmNvbnN0cnVjdG9yIT09T2JqZWN0fHxhKGwsImNvbnN0cnVjdG9yIixnKSxnLnByb3RvdHlwZT1sLHIoe2dsb2JhbDohMCxmb3JjZWQ6dn0se0l0ZXJhdG9yOmd9KX0sMjA0NzQ6ZnVuY3Rpb24odCxlLG4peyJ1c2Ugc3RyaWN0Ijt2YXIgcj1uKDE0MDQ0KSxvPW4oODc1NzkpLGk9big0NTY4MCksYT1uKDg4MDcpKChmdW5jdGlvbih0KXtmb3IodmFyIGUsbj10aGlzLml0ZXJhdG9yLHI9dGhpcy5uZXh0O3RoaXMucmVtYWluaW5nOylpZih0aGlzLnJlbWFpbmluZy0tLGU9byhyLmNhbGwobikpLHRoaXMuZG9uZT0hIWUuZG9uZSlyZXR1cm47aWYoZT1vKHIuY2FsbChuLHQpKSwhKHRoaXMuZG9uZT0hIWUuZG9uZSkpcmV0dXJuIGUudmFsdWV9KSk7cih7dGFyZ2V0OiJJdGVyYXRvciIscHJvdG86ITAscmVhbDohMH0se2Ryb3A6ZnVuY3Rpb24odCl7cmV0dXJuIG5ldyBhKHtpdGVyYXRvcjpvKHRoaXMpLHJlbWFpbmluZzppKHQpfSl9fSl9LDU0NTU2OmZ1bmN0aW9uKHQsZSxuKXsidXNlIHN0cmljdCI7dmFyIHI9bigxNDA0NCksbz1uKDQxMzM0KSxpPW4oODY0NzApLGE9big4NzU3OSk7cih7dGFyZ2V0OiJJdGVyYXRvciIscHJvdG86ITAscmVhbDohMH0se2V2ZXJ5OmZ1bmN0aW9uKHQpe3JldHVybiBhKHRoaXMpLGkodCksIW8odGhpcywoZnVuY3Rpb24oZSl7aWYoIXQoZSkpcmV0dXJuIG8uc3RvcCgpfSksdm9pZCAwLCExLCEwKS5zdG9wcGVkfX0pfSw0MDYzODpmdW5jdGlvbih0LGUsbil7InVzZSBzdHJpY3QiO3ZhciByPW4oMTQwNDQpLG89big4NjQ3MCksaT1uKDg3NTc5KSxhPW4oODgwNyksYz1uKDEyMjc4KSxzPWEoKGZ1bmN0aW9uKHQpe2Zvcih2YXIgZSxuLHI9dGhpcy5pdGVyYXRvcixvPXRoaXMuZmlsdGVyZXIsYT10aGlzLm5leHQ7Oyl7aWYoZT1pKGEuY2FsbChyLHQpKSx0aGlzLmRvbmU9ISFlLmRvbmUpcmV0dXJuO2lmKG49ZS52YWx1ZSxjKHIsbyxuKSlyZXR1cm4gbn19KSk7cih7dGFyZ2V0OiJJdGVyYXRvciIscHJvdG86ITAscmVhbDohMH0se2ZpbHRlcjpmdW5jdGlvbih0KXtyZXR1cm4gbmV3IHMoe2l0ZXJhdG9yOmkodGhpcyksZmlsdGVyZXI6byh0KX0pfX0pfSw5NjY1OTpmdW5jdGlvbih0LGUsbil7InVzZSBzdHJpY3QiO3ZhciByPW4oMTQwNDQpLG89big0MTMzNCksaT1uKDg2NDcwKSxhPW4oODc1NzkpO3Ioe3RhcmdldDoiSXRlcmF0b3IiLHByb3RvOiEwLHJlYWw6ITB9LHtmaW5kOmZ1bmN0aW9uKHQpe3JldHVybiBhKHRoaXMpLGkodCksbyh0aGlzLChmdW5jdGlvbihlKXtpZih0KGUpKXJldHVybiBvLnN0b3AoZSl9KSx2b2lkIDAsITEsITApLnJlc3VsdH19KX0sMTQ2ODg6ZnVuY3Rpb24odCxlLG4peyJ1c2Ugc3RyaWN0Ijt2YXIgcj1uKDE0MDQ0KSxvPW4oODY0NzApLGk9big4NzU3OSksYT1uKDczODkwKSxjPW4oODgwNykscz1uKDEyMjc4KSx1PWMoKGZ1bmN0aW9uKHQpe2Zvcih2YXIgZSxuLHIsYyx1PXRoaXMuaXRlcmF0b3I7Oyl7aWYoYz10aGlzLmlubmVySXRlcmF0b3Ipe2lmKCEoZT1pKHRoaXMuaW5uZXJOZXh0LmNhbGwoYykpKS5kb25lKXJldHVybiBlLnZhbHVlO3RoaXMuaW5uZXJJdGVyYXRvcj10aGlzLmlubmVyTmV4dD1udWxsfWlmKGU9aSh0aGlzLm5leHQuY2FsbCh1LHQpKSx0aGlzLmRvbmU9ISFlLmRvbmUpcmV0dXJuO2lmKG49cyh1LHRoaXMubWFwcGVyLGUudmFsdWUpLHZvaWQgMD09PShyPWEobikpKXRocm93IFR5cGVFcnJvcigiLmZsYXRNYXAgY2FsbGJhY2sgc2hvdWxkIHJldHVybiBhbiBpdGVyYWJsZSBvYmplY3QiKTt0aGlzLmlubmVySXRlcmF0b3I9Yz1pKHIuY2FsbChuKSksdGhpcy5pbm5lck5leHQ9byhjLm5leHQpfX0pKTtyKHt0YXJnZXQ6Ikl0ZXJhdG9yIixwcm90bzohMCxyZWFsOiEwfSx7ZmxhdE1hcDpmdW5jdGlvbih0KXtyZXR1cm4gbmV3IHUoe2l0ZXJhdG9yOmkodGhpcyksbWFwcGVyOm8odCksaW5uZXJJdGVyYXRvcjpudWxsLGlubmVyTmV4dDpudWxsfSl9fSl9LDczNzg6ZnVuY3Rpb24odCxlLG4peyJ1c2Ugc3RyaWN0Ijt2YXIgcj1uKDE0MDQ0KSxvPW4oNDEzMzQpLGk9big4NzU3OSk7cih7dGFyZ2V0OiJJdGVyYXRvciIscHJvdG86ITAscmVhbDohMH0se2ZvckVhY2g6ZnVuY3Rpb24odCl7byhpKHRoaXMpLHQsdm9pZCAwLCExLCEwKX19KX0sMjc0Mjg6ZnVuY3Rpb24odCxlLG4pe3ZhciByPW4oMTQwNDQpLG89big1NjIzOCksaT1uKDg2NDcwKSxhPW4oODc1NzkpLGM9bigxOTIwOSkscz1uKDg4MDcpLHU9big3Mzg5MCksbD1vLkl0ZXJhdG9yLGY9cygoZnVuY3Rpb24odCl7dmFyIGU9YSh0aGlzLm5leHQuY2FsbCh0aGlzLml0ZXJhdG9yLHQpKTtpZighKHRoaXMuZG9uZT0hIWUuZG9uZSkpcmV0dXJuIGUudmFsdWV9KSwhMCk7cih7dGFyZ2V0OiJJdGVyYXRvciIsc3RhdDohMH0se2Zyb206ZnVuY3Rpb24odCl7dmFyIGUsbj1jKHQpLHI9dShuKTtpZihudWxsIT1yKXtpZigoZT1pKHIpLmNhbGwobikpaW5zdGFuY2VvZiBsKXJldHVybiBlfWVsc2UgZT1uO3JldHVybiBuZXcgZih7aXRlcmF0b3I6ZX0pfX0pfSwzMzQzNjpmdW5jdGlvbih0LGUsbil7InVzZSBzdHJpY3QiO3ZhciByPW4oMTQwNDQpLG89big4NjQ3MCksaT1uKDg3NTc5KSxhPW4oODgwNyksYz1uKDEyMjc4KSxzPWEoKGZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMuaXRlcmF0b3Isbj1pKHRoaXMubmV4dC5jYWxsKGUsdCkpO2lmKCEodGhpcy5kb25lPSEhbi5kb25lKSlyZXR1cm4gYyhlLHRoaXMubWFwcGVyLG4udmFsdWUpfSkpO3Ioe3RhcmdldDoiSXRlcmF0b3IiLHByb3RvOiEwLHJlYWw6ITB9LHttYXA6ZnVuY3Rpb24odCl7cmV0dXJuIG5ldyBzKHtpdGVyYXRvcjppKHRoaXMpLG1hcHBlcjpvKHQpfSl9fSl9LDg0Mzg4OmZ1bmN0aW9uKHQsZSxuKXsidXNlIHN0cmljdCI7dmFyIHI9bigxNDA0NCksbz1uKDQxMzM0KSxpPW4oODY0NzApLGE9big4NzU3OSk7cih7dGFyZ2V0OiJJdGVyYXRvciIscHJvdG86ITAscmVhbDohMH0se3JlZHVjZTpmdW5jdGlvbih0KXthKHRoaXMpLGkodCk7dmFyIGU9YXJndW1lbnRzLmxlbmd0aDwyLG49ZT92b2lkIDA6YXJndW1lbnRzWzFdO2lmKG8odGhpcywoZnVuY3Rpb24ocil7ZT8oZT0hMSxuPXIpOm49dChuLHIpfSksdm9pZCAwLCExLCEwKSxlKXRocm93IFR5cGVFcnJvcigiUmVkdWNlIG9mIGVtcHR5IGl0ZXJhdG9yIHdpdGggbm8gaW5pdGlhbCB2YWx1ZSIpO3JldHVybiBufX0pfSw1OTYyMzpmdW5jdGlvbih0LGUsbil7InVzZSBzdHJpY3QiO3ZhciByPW4oMTQwNDQpLG89big0MTMzNCksaT1uKDg2NDcwKSxhPW4oODc1NzkpO3Ioe3RhcmdldDoiSXRlcmF0b3IiLHByb3RvOiEwLHJlYWw6ITB9LHtzb21lOmZ1bmN0aW9uKHQpe3JldHVybiBhKHRoaXMpLGkodCksbyh0aGlzLChmdW5jdGlvbihlKXtpZih0KGUpKXJldHVybiBvLnN0b3AoKX0pLHZvaWQgMCwhMSwhMCkuc3RvcHBlZH19KX0sMzI4NTM6ZnVuY3Rpb24odCxlLG4peyJ1c2Ugc3RyaWN0Ijt2YXIgcj1uKDE0MDQ0KSxvPW4oODc1NzkpLGk9big0NTY4MCksYT1uKDg4MDcpKChmdW5jdGlvbih0KXtpZih0aGlzLnJlbWFpbmluZy0tKXt2YXIgZT1vKHRoaXMubmV4dC5jYWxsKHRoaXMuaXRlcmF0b3IsdCkpO3JldHVybih0aGlzLmRvbmU9ISFlLmRvbmUpP3ZvaWQgMDplLnZhbHVlfXRoaXMuZG9uZT0hMH0pKTtyKHt0YXJnZXQ6Ikl0ZXJhdG9yIixwcm90bzohMCxyZWFsOiEwfSx7dGFrZTpmdW5jdGlvbih0KXtyZXR1cm4gbmV3IGEoe2l0ZXJhdG9yOm8odGhpcykscmVtYWluaW5nOmkodCl9KX19KX0sNjcwNzI6ZnVuY3Rpb24odCxlLG4peyJ1c2Ugc3RyaWN0Ijt2YXIgcj1uKDE0MDQ0KSxvPW4oNDEzMzQpLGk9big4NzU3OSksYT1bXS5wdXNoO3Ioe3RhcmdldDoiSXRlcmF0b3IiLHByb3RvOiEwLHJlYWw6ITB9LHt0b0FycmF5OmZ1bmN0aW9uKCl7dmFyIHQ9W107cmV0dXJuIG8oaSh0aGlzKSxhLHQsITEsITApLHR9fSl9LDQ4NDQ6ZnVuY3Rpb24odCxlLG4peyJ1c2Ugc3RyaWN0Ijt2YXIgcj1uKDE0MDQ0KSxvPW4oNjU2NzIpLGk9bigxNDY2KTtyKHt0YXJnZXQ6Ik1hcCIscHJvdG86ITAscmVhbDohMCxmb3JjZWQ6b30se2RlbGV0ZUFsbDpmdW5jdGlvbigpe3JldHVybiBpLmFwcGx5KHRoaXMsYXJndW1lbnRzKX19KX0sMzU1NDpmdW5jdGlvbih0LGUsbil7InVzZSBzdHJpY3QiO3ZhciByPW4oMTQwNDQpLG89big2NTY3MiksaT1uKDg3NTc5KSxhPW4oNDYxMzApLGM9big0MTk4OSkscz1uKDQxMzM0KTtyKHt0YXJnZXQ6Ik1hcCIscHJvdG86ITAscmVhbDohMCxmb3JjZWQ6b30se2V2ZXJ5OmZ1bmN0aW9uKHQpe3ZhciBlPWkodGhpcyksbj1jKGUpLHI9YSh0LGFyZ3VtZW50cy5sZW5ndGg+MT9hcmd1bWVudHNbMV06dm9pZCAwLDMpO3JldHVybiFzKG4sKGZ1bmN0aW9uKHQsbil7aWYoIXIobix0LGUpKXJldHVybiBzLnN0b3AoKX0pLHZvaWQgMCwhMCwhMCkuc3RvcHBlZH19KX0sMTg4NDQ6ZnVuY3Rpb24odCxlLG4peyJ1c2Ugc3RyaWN0Ijt2YXIgcj1uKDE0MDQ0KSxvPW4oNjU2NzIpLGk9big3NzAxKSxhPW4oODc1NzkpLGM9big4NjQ3MCkscz1uKDQ2MTMwKSx1PW4oMTM5NzkpLGw9big0MTk4OSksZj1uKDQxMzM0KTtyKHt0YXJnZXQ6Ik1hcCIscHJvdG86ITAscmVhbDohMCxmb3JjZWQ6b30se2ZpbHRlcjpmdW5jdGlvbih0KXt2YXIgZT1hKHRoaXMpLG49bChlKSxyPXModCxhcmd1bWVudHMubGVuZ3RoPjE/YXJndW1lbnRzWzFdOnZvaWQgMCwzKSxvPW5ldyh1KGUsaSgiTWFwIikpKSxkPWMoby5zZXQpO3JldHVybiBmKG4sKGZ1bmN0aW9uKHQsbil7cihuLHQsZSkmJmQuY2FsbChvLHQsbil9KSx2b2lkIDAsITAsITApLG99fSl9LDQ5MDUwOmZ1bmN0aW9uKHQsZSxuKXsidXNlIHN0cmljdCI7dmFyIHI9bigxNDA0NCksbz1uKDY1NjcyKSxpPW4oODc1NzkpLGE9big0NjEzMCksYz1uKDQxOTg5KSxzPW4oNDEzMzQpO3Ioe3RhcmdldDoiTWFwIixwcm90bzohMCxyZWFsOiEwLGZvcmNlZDpvfSx7ZmluZEtleTpmdW5jdGlvbih0KXt2YXIgZT1pKHRoaXMpLG49YyhlKSxyPWEodCxhcmd1bWVudHMubGVuZ3RoPjE/YXJndW1lbnRzWzFdOnZvaWQgMCwzKTtyZXR1cm4gcyhuLChmdW5jdGlvbih0LG4pe2lmKHIobix0LGUpKXJldHVybiBzLnN0b3AodCl9KSx2b2lkIDAsITAsITApLnJlc3VsdH19KX0sMzU2NTY6ZnVuY3Rpb24odCxlLG4peyJ1c2Ugc3RyaWN0Ijt2YXIgcj1uKDE0MDQ0KSxvPW4oNjU2NzIpLGk9big4NzU3OSksYT1uKDQ2MTMwKSxjPW4oNDE5ODkpLHM9big0MTMzNCk7cih7dGFyZ2V0OiJNYXAiLHByb3RvOiEwLHJlYWw6ITAsZm9yY2VkOm99LHtmaW5kOmZ1bmN0aW9uKHQpe3ZhciBlPWkodGhpcyksbj1jKGUpLHI9YSh0LGFyZ3VtZW50cy5sZW5ndGg+MT9hcmd1bWVudHNbMV06dm9pZCAwLDMpO3JldHVybiBzKG4sKGZ1bmN0aW9uKHQsbil7aWYocihuLHQsZSkpcmV0dXJuIHMuc3RvcChuKX0pLHZvaWQgMCwhMCwhMCkucmVzdWx0fX0pfSwzODc5MjpmdW5jdGlvbih0LGUsbil7bigxNDA0NCkoe3RhcmdldDoiTWFwIixzdGF0OiEwfSx7ZnJvbTpuKDEyOTAxKX0pfSw1MzUxMzpmdW5jdGlvbih0LGUsbil7InVzZSBzdHJpY3QiO3ZhciByPW4oMTQwNDQpLG89big0MTMzNCksaT1uKDg2NDcwKTtyKHt0YXJnZXQ6Ik1hcCIsc3RhdDohMH0se2dyb3VwQnk6ZnVuY3Rpb24odCxlKXt2YXIgbj1uZXcgdGhpcztpKGUpO3ZhciByPWkobi5oYXMpLGE9aShuLmdldCksYz1pKG4uc2V0KTtyZXR1cm4gbyh0LChmdW5jdGlvbih0KXt2YXIgbz1lKHQpO3IuY2FsbChuLG8pP2EuY2FsbChuLG8pLnB1c2godCk6Yy5jYWxsKG4sbyxbdF0pfSkpLG59fSl9LDkzODQzOmZ1bmN0aW9uKHQsZSxuKXsidXNlIHN0cmljdCI7dmFyIHI9bigxNDA0NCksbz1uKDY1NjcyKSxpPW4oODc1NzkpLGE9big0MTk4OSksYz1uKDM4MTg5KSxzPW4oNDEzMzQpO3Ioe3RhcmdldDoiTWFwIixwcm90bzohMCxyZWFsOiEwLGZvcmNlZDpvfSx7aW5jbHVkZXM6ZnVuY3Rpb24odCl7cmV0dXJuIHMoYShpKHRoaXMpKSwoZnVuY3Rpb24oZSxuKXtpZihjKG4sdCkpcmV0dXJuIHMuc3RvcCgpfSksdm9pZCAwLCEwLCEwKS5zdG9wcGVkfX0pfSw5OTI1NTpmdW5jdGlvbih0LGUsbil7InVzZSBzdHJpY3QiO3ZhciByPW4oMTQwNDQpLG89big0MTMzNCksaT1uKDg2NDcwKTtyKHt0YXJnZXQ6Ik1hcCIsc3RhdDohMH0se2tleUJ5OmZ1bmN0aW9uKHQsZSl7dmFyIG49bmV3IHRoaXM7aShlKTt2YXIgcj1pKG4uc2V0KTtyZXR1cm4gbyh0LChmdW5jdGlvbih0KXtyLmNhbGwobixlKHQpLHQpfSkpLG59fSl9LDY2MjI0OmZ1bmN0aW9uKHQsZSxuKXsidXNlIHN0cmljdCI7dmFyIHI9bigxNDA0NCksbz1uKDY1NjcyKSxpPW4oODc1NzkpLGE9big0MTk4OSksYz1uKDQxMzM0KTtyKHt0YXJnZXQ6Ik1hcCIscHJvdG86ITAscmVhbDohMCxmb3JjZWQ6b30se2tleU9mOmZ1bmN0aW9uKHQpe3JldHVybiBjKGEoaSh0aGlzKSksKGZ1bmN0aW9uKGUsbil7aWYobj09PXQpcmV0dXJuIGMuc3RvcChlKX0pLHZvaWQgMCwhMCwhMCkucmVzdWx0fX0pfSw3MTcwMDpmdW5jdGlvbih0LGUsbil7InVzZSBzdHJpY3QiO3ZhciByPW4oMTQwNDQpLG89big2NTY3MiksaT1uKDc3MDEpLGE9big4NzU3OSksYz1uKDg2NDcwKSxzPW4oNDYxMzApLHU9bigxMzk3OSksbD1uKDQxOTg5KSxmPW4oNDEzMzQpO3Ioe3RhcmdldDoiTWFwIixwcm90bzohMCxyZWFsOiEwLGZvcmNlZDpvfSx7bWFwS2V5czpmdW5jdGlvbih0KXt2YXIgZT1hKHRoaXMpLG49bChlKSxyPXModCxhcmd1bWVudHMubGVuZ3RoPjE/YXJndW1lbnRzWzFdOnZvaWQgMCwzKSxvPW5ldyh1KGUsaSgiTWFwIikpKSxkPWMoby5zZXQpO3JldHVybiBmKG4sKGZ1bmN0aW9uKHQsbil7ZC5jYWxsKG8scihuLHQsZSksbil9KSx2b2lkIDAsITAsITApLG99fSl9LDY5NTI5OmZ1bmN0aW9uKHQsZSxuKXsidXNlIHN0cmljdCI7dmFyIHI9bigxNDA0NCksbz1uKDY1NjcyKSxpPW4oNzcwMSksYT1uKDg3NTc5KSxjPW4oODY0NzApLHM9big0NjEzMCksdT1uKDEzOTc5KSxsPW4oNDE5ODkpLGY9big0MTMzNCk7cih7dGFyZ2V0OiJNYXAiLHByb3RvOiEwLHJlYWw6ITAsZm9yY2VkOm99LHttYXBWYWx1ZXM6ZnVuY3Rpb24odCl7dmFyIGU9YSh0aGlzKSxuPWwoZSkscj1zKHQsYXJndW1lbnRzLmxlbmd0aD4xP2FyZ3VtZW50c1sxXTp2b2lkIDAsMyksbz1uZXcodShlLGkoIk1hcCIpKSksZD1jKG8uc2V0KTtyZXR1cm4gZihuLChmdW5jdGlvbih0LG4pe2QuY2FsbChvLHQscihuLHQsZSkpfSksdm9pZCAwLCEwLCEwKSxvfX0pfSwyNzczNDpmdW5jdGlvbih0LGUsbil7InVzZSBzdHJpY3QiO3ZhciByPW4oMTQwNDQpLG89big2NTY3MiksaT1uKDg3NTc5KSxhPW4oODY0NzApLGM9big0MTMzNCk7cih7dGFyZ2V0OiJNYXAiLHByb3RvOiEwLHJlYWw6ITAsZm9yY2VkOm99LHttZXJnZTpmdW5jdGlvbih0KXtmb3IodmFyIGU9aSh0aGlzKSxuPWEoZS5zZXQpLHI9MDtyPGFyZ3VtZW50cy5sZW5ndGg7KWMoYXJndW1lbnRzW3IrK10sbixlLCEwKTtyZXR1cm4gZX19KX0sMTk5MDpmdW5jdGlvbih0LGUsbil7bigxNDA0NCkoe3RhcmdldDoiTWFwIixzdGF0OiEwfSx7b2Y6bigyNTAyNil9KX0sNzczNjk6ZnVuY3Rpb24odCxlLG4peyJ1c2Ugc3RyaWN0Ijt2YXIgcj1uKDE0MDQ0KSxvPW4oNjU2NzIpLGk9big4NzU3OSksYT1uKDg2NDcwKSxjPW4oNDE5ODkpLHM9big0MTMzNCk7cih7dGFyZ2V0OiJNYXAiLHByb3RvOiEwLHJlYWw6ITAsZm9yY2VkOm99LHtyZWR1Y2U6ZnVuY3Rpb24odCl7dmFyIGU9aSh0aGlzKSxuPWMoZSkscj1hcmd1bWVudHMubGVuZ3RoPDIsbz1yP3ZvaWQgMDphcmd1bWVudHNbMV07aWYoYSh0KSxzKG4sKGZ1bmN0aW9uKG4saSl7cj8ocj0hMSxvPWkpOm89dChvLGksbixlKX0pLHZvaWQgMCwhMCwhMCkscil0aHJvdyBUeXBlRXJyb3IoIlJlZHVjZSBvZiBlbXB0eSBtYXAgd2l0aCBubyBpbml0aWFsIHZhbHVlIik7cmV0dXJuIG99fSl9LDY5ODQyOmZ1bmN0aW9uKHQsZSxuKXsidXNlIHN0cmljdCI7dmFyIHI9bigxNDA0NCksbz1uKDY1NjcyKSxpPW4oODc1NzkpLGE9big0NjEzMCksYz1uKDQxOTg5KSxzPW4oNDEzMzQpO3Ioe3RhcmdldDoiTWFwIixwcm90bzohMCxyZWFsOiEwLGZvcmNlZDpvfSx7c29tZTpmdW5jdGlvbih0KXt2YXIgZT1pKHRoaXMpLG49YyhlKSxyPWEodCxhcmd1bWVudHMubGVuZ3RoPjE/YXJndW1lbnRzWzFdOnZvaWQgMCwzKTtyZXR1cm4gcyhuLChmdW5jdGlvbih0LG4pe2lmKHIobix0LGUpKXJldHVybiBzLnN0b3AoKX0pLHZvaWQgMCwhMCwhMCkuc3RvcHBlZH19KX0sNDMyOTA6ZnVuY3Rpb24odCxlLG4peyJ1c2Ugc3RyaWN0IjtuKDE0MDQ0KSh7dGFyZ2V0OiJNYXAiLHByb3RvOiEwLHJlYWw6ITAsZm9yY2VkOm4oNjU2NzIpfSx7dXBkYXRlT3JJbnNlcnQ6big0NzkyNyl9KX0sOTc5Mjg6ZnVuY3Rpb24odCxlLG4peyJ1c2Ugc3RyaWN0Ijt2YXIgcj1uKDE0MDQ0KSxvPW4oNjU2NzIpLGk9big4NzU3OSksYT1uKDg2NDcwKTtyKHt0YXJnZXQ6Ik1hcCIscHJvdG86ITAscmVhbDohMCxmb3JjZWQ6b30se3VwZGF0ZTpmdW5jdGlvbih0LGUpe3ZhciBuPWkodGhpcykscj1hcmd1bWVudHMubGVuZ3RoO2EoZSk7dmFyIG89bi5oYXModCk7aWYoIW8mJnI8Myl0aHJvdyBUeXBlRXJyb3IoIlVwZGF0aW5nIGFic2VudCB2YWx1ZSIpO3ZhciBjPW8/bi5nZXQodCk6YShyPjI/YXJndW1lbnRzWzJdOnZvaWQgMCkodCxuKTtyZXR1cm4gbi5zZXQodCxlKGMsdCxuKSksbn19KX0sMTQ2ODI6ZnVuY3Rpb24odCxlLG4peyJ1c2Ugc3RyaWN0IjtuKDE0MDQ0KSh7dGFyZ2V0OiJNYXAiLHByb3RvOiEwLHJlYWw6ITAsZm9yY2VkOm4oNjU2NzIpfSx7dXBzZXJ0Om4oNDc5MjcpfSl9LDcwMjI1OmZ1bmN0aW9uKHQsZSxuKXt2YXIgcj1uKDE0MDQ0KSxvPU1hdGgubWluLGk9TWF0aC5tYXg7cih7dGFyZ2V0OiJNYXRoIixzdGF0OiEwfSx7Y2xhbXA6ZnVuY3Rpb24odCxlLG4pe3JldHVybiBvKG4saShlLHQpKX19KX0sMjM5OTpmdW5jdGlvbih0LGUsbil7bigxNDA0NCkoe3RhcmdldDoiTWF0aCIsc3RhdDohMH0se0RFR19QRVJfUkFEOk1hdGguUEkvMTgwfSl9LDE2ODA5OmZ1bmN0aW9uKHQsZSxuKXt2YXIgcj1uKDE0MDQ0KSxvPTE4MC9NYXRoLlBJO3Ioe3RhcmdldDoiTWF0aCIsc3RhdDohMH0se2RlZ3JlZXM6ZnVuY3Rpb24odCl7cmV0dXJuIHQqb319KX0sNjcxNDE6ZnVuY3Rpb24odCxlLG4pe3ZhciByPW4oMTQwNDQpLG89big3NzQyKSxpPW4oNTMyNTEpO3Ioe3RhcmdldDoiTWF0aCIsc3RhdDohMH0se2ZzY2FsZTpmdW5jdGlvbih0LGUsbixyLGEpe3JldHVybiBpKG8odCxlLG4scixhKSl9fSl9LDMwNjEzOmZ1bmN0aW9uKHQsZSxuKXtuKDE0MDQ0KSh7dGFyZ2V0OiJNYXRoIixzdGF0OiEwfSx7aWFkZGg6ZnVuY3Rpb24odCxlLG4scil7dmFyIG89dD4+PjAsaT1uPj4+MDtyZXR1cm4oZT4+PjApKyhyPj4+MCkrKChvJml8KG98aSkmfihvK2k+Pj4wKSk+Pj4zMSl8MH19KX0sNDk3OTpmdW5jdGlvbih0LGUsbil7bigxNDA0NCkoe3RhcmdldDoiTWF0aCIsc3RhdDohMH0se2ltdWxoOmZ1bmN0aW9uKHQsZSl7dmFyIG49NjU1MzUscj0rdCxvPStlLGk9ciZuLGE9byZuLGM9cj4+MTYscz1vPj4xNix1PShjKmE+Pj4wKSsoaSphPj4+MTYpO3JldHVybiBjKnMrKHU+PjE2KSsoKGkqcz4+PjApKyh1Jm4pPj4xNil9fSl9LDY4NDA2OmZ1bmN0aW9uKHQsZSxuKXtuKDE0MDQ0KSh7dGFyZ2V0OiJNYXRoIixzdGF0OiEwfSx7aXN1Ymg6ZnVuY3Rpb24odCxlLG4scil7dmFyIG89dD4+PjAsaT1uPj4+MDtyZXR1cm4oZT4+PjApLShyPj4+MCktKCh+byZpfH4ob15pKSZvLWk+Pj4wKT4+PjMxKXwwfX0pfSw5MDc2OTpmdW5jdGlvbih0LGUsbil7bigxNDA0NCkoe3RhcmdldDoiTWF0aCIsc3RhdDohMH0se1JBRF9QRVJfREVHOjE4MC9NYXRoLlBJfSl9LDU3ODkxOmZ1bmN0aW9uKHQsZSxuKXt2YXIgcj1uKDE0MDQ0KSxvPU1hdGguUEkvMTgwO3Ioe3RhcmdldDoiTWF0aCIsc3RhdDohMH0se3JhZGlhbnM6ZnVuY3Rpb24odCl7cmV0dXJuIHQqb319KX0sMTU3MjI6ZnVuY3Rpb24odCxlLG4pe24oMTQwNDQpKHt0YXJnZXQ6Ik1hdGgiLHN0YXQ6ITB9LHtzY2FsZTpuKDc3NDIpfSl9LDE3NjU6ZnVuY3Rpb24odCxlLG4pe3ZhciByPW4oMTQwNDQpLG89big4NzU3OSksaT1uKDg5NTQyKSxhPW4oNzEyMDEpLGM9big4OTgyNykscz0iU2VlZGVkIFJhbmRvbSIsdT0iU2VlZGVkIFJhbmRvbSBHZW5lcmF0b3IiLGw9Yy5zZXQsZj1jLmdldHRlckZvcih1KSxkPWEoKGZ1bmN0aW9uKHQpe2wodGhpcyx7dHlwZTp1LHNlZWQ6dCUyMTQ3NDgzNjQ3fSl9KSxzLChmdW5jdGlvbigpe3ZhciB0PWYodGhpcyk7cmV0dXJue3ZhbHVlOigxMDczNzQxODIzJih0LnNlZWQ9KDExMDM1MTUyNDUqdC5zZWVkKzEyMzQ1KSUyMTQ3NDgzNjQ3KSkvMTA3Mzc0MTgyMyxkb25lOiExfX0pKTtyKHt0YXJnZXQ6Ik1hdGgiLHN0YXQ6ITAsZm9yY2VkOiEwfSx7c2VlZGVkUFJORzpmdW5jdGlvbih0KXt2YXIgZT1vKHQpLnNlZWQ7aWYoIWkoZSkpdGhyb3cgVHlwZUVycm9yKCdNYXRoLnNlZWRlZFBSTkcoKSBhcmd1bWVudCBzaG91bGQgaGF2ZSBhICJzZWVkIiBmaWVsZCB3aXRoIGEgZmluaXRlIHZhbHVlLicpO3JldHVybiBuZXcgZChlKX19KX0sNzc5MDc6ZnVuY3Rpb24odCxlLG4pe24oMTQwNDQpKHt0YXJnZXQ6Ik1hdGgiLHN0YXQ6ITB9LHtzaWduYml0OmZ1bmN0aW9uKHQpe3JldHVybih0PSt0KT09dCYmMD09dD8xL3Q9PS0xLzA6dDwwfX0pfSw0NDY0NjpmdW5jdGlvbih0LGUsbil7bigxNDA0NCkoe3RhcmdldDoiTWF0aCIsc3RhdDohMH0se3VtdWxoOmZ1bmN0aW9uKHQsZSl7dmFyIG49NjU1MzUscj0rdCxvPStlLGk9ciZuLGE9byZuLGM9cj4+PjE2LHM9bz4+PjE2LHU9KGMqYT4+PjApKyhpKmE+Pj4xNik7cmV0dXJuIGMqcysodT4+PjE2KSsoKGkqcz4+PjApKyh1Jm4pPj4+MTYpfX0pfSw3NTY0NzpmdW5jdGlvbih0LGUsbil7InVzZSBzdHJpY3QiO3ZhciByPW4oMTQwNDQpLG89big0MzQxNiksaT1uKDc4NDYpLGE9IkludmFsaWQgbnVtYmVyIHJlcHJlc2VudGF0aW9uIixjPS9eW1xkYS16XSskLztyKHt0YXJnZXQ6Ik51bWJlciIsc3RhdDohMH0se2Zyb21TdHJpbmc6ZnVuY3Rpb24odCxlKXt2YXIgbixyLHM9MTtpZigic3RyaW5nIiE9dHlwZW9mIHQpdGhyb3cgVHlwZUVycm9yKGEpO2lmKCF0Lmxlbmd0aCl0aHJvdyBTeW50YXhFcnJvcihhKTtpZigiLSI9PXQuY2hhckF0KDApJiYocz0tMSwhKHQ9dC5zbGljZSgxKSkubGVuZ3RoKSl0aHJvdyBTeW50YXhFcnJvcihhKTtpZigobj12b2lkIDA9PT1lPzEwOm8oZSkpPDJ8fG4+MzYpdGhyb3cgUmFuZ2VFcnJvcigiSW52YWxpZCByYWRpeCIpO2lmKCFjLnRlc3QodCl8fChyPWkodCxuKSkudG9TdHJpbmcobikhPT10KXRocm93IFN5bnRheEVycm9yKGEpO3JldHVybiBzKnJ9fSl9LDg0MzA5OmZ1bmN0aW9uKHQsZSxuKXsidXNlIHN0cmljdCI7dmFyIHI9bigxNDA0NCksbz1uKDg2NDAzKTtyKHt0YXJnZXQ6Ik9iamVjdCIsc3RhdDohMH0se2l0ZXJhdGVFbnRyaWVzOmZ1bmN0aW9uKHQpe3JldHVybiBuZXcgbyh0LCJlbnRyaWVzIil9fSl9LDcyOTYzOmZ1bmN0aW9uKHQsZSxuKXsidXNlIHN0cmljdCI7dmFyIHI9bigxNDA0NCksbz1uKDg2NDAzKTtyKHt0YXJnZXQ6Ik9iamVjdCIsc3RhdDohMH0se2l0ZXJhdGVLZXlzOmZ1bmN0aW9uKHQpe3JldHVybiBuZXcgbyh0LCJrZXlzIil9fSl9LDU2MzU5OmZ1bmN0aW9uKHQsZSxuKXsidXNlIHN0cmljdCI7dmFyIHI9bigxNDA0NCksbz1uKDg2NDAzKTtyKHt0YXJnZXQ6Ik9iamVjdCIsc3RhdDohMH0se2l0ZXJhdGVWYWx1ZXM6ZnVuY3Rpb24odCl7cmV0dXJuIG5ldyBvKHQsInZhbHVlcyIpfX0pfSwyMDIzNDpmdW5jdGlvbih0LGUsbil7InVzZSBzdHJpY3QiO3ZhciByPW4oMTQwNDQpLG89big2MjU1NiksaT1uKDY3NTM4KSxhPW4oODY0NzApLGM9big4NzU3OSkscz1uKDEwNTkyKSx1PW4oNTkzNzkpLGw9bigzNzYyMCkuZixmPW4oNjY5NzEpLGQ9bigxOTI2KSxwPW4oMzEwNzQpLGg9big0MTMzNCksdj1uKDgzNjIwKSxnPW4oMjM3MjQpLHk9big4OTgyNyksbT1nKCJvYnNlcnZhYmxlIiksYj15LmdldCx4PXkuc2V0LHc9ZnVuY3Rpb24odCl7cmV0dXJuIG51bGw9PXQ/dm9pZCAwOmEodCl9LEU9ZnVuY3Rpb24odCl7dmFyIGU9dC5jbGVhbnVwO2lmKGUpe3QuY2xlYW51cD12b2lkIDA7dHJ5e2UoKX1jYXRjaCh0KXt2KHQpfX19LGo9ZnVuY3Rpb24odCl7cmV0dXJuIHZvaWQgMD09PXQub2JzZXJ2ZXJ9LEM9ZnVuY3Rpb24odCxlKXtpZighbyl7dC5jbG9zZWQ9ITA7dmFyIG49ZS5zdWJzY3JpcHRpb25PYnNlcnZlcjtuJiYobi5jbG9zZWQ9ITApfWUub2JzZXJ2ZXI9dm9pZCAwfSxrPWZ1bmN0aW9uKHQsZSl7dmFyIG4scj14KHRoaXMse2NsZWFudXA6dm9pZCAwLG9ic2VydmVyOmModCksc3Vic2NyaXB0aW9uT2JzZXJ2ZXI6dm9pZCAwfSk7b3x8KHRoaXMuY2xvc2VkPSExKTt0cnl7KG49dyh0LnN0YXJ0KSkmJm4uY2FsbCh0LHRoaXMpfWNhdGNoKHQpe3YodCl9aWYoIWoocikpe3ZhciBpPXIuc3Vic2NyaXB0aW9uT2JzZXJ2ZXI9bmV3IFModGhpcyk7dHJ5e3ZhciBzPWUoaSksdT1zO251bGwhPXMmJihyLmNsZWFudXA9ImZ1bmN0aW9uIj09dHlwZW9mIHMudW5zdWJzY3JpYmU/ZnVuY3Rpb24oKXt1LnVuc3Vic2NyaWJlKCl9OmEocykpfWNhdGNoKHQpe3JldHVybiB2b2lkIGkuZXJyb3IodCl9aihyKSYmRShyKX19O2sucHJvdG90eXBlPWQoe30se3Vuc3Vic2NyaWJlOmZ1bmN0aW9uKCl7dmFyIHQ9Yih0aGlzKTtqKHQpfHwoQyh0aGlzLHQpLEUodCkpfX0pLG8mJmwoay5wcm90b3R5cGUsImNsb3NlZCIse2NvbmZpZ3VyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gaihiKHRoaXMpKX19KTt2YXIgUz1mdW5jdGlvbih0KXt4KHRoaXMse3N1YnNjcmlwdGlvbjp0fSksb3x8KHRoaXMuY2xvc2VkPSExKX07Uy5wcm90b3R5cGU9ZCh7fSx7bmV4dDpmdW5jdGlvbih0KXt2YXIgZT1iKGIodGhpcykuc3Vic2NyaXB0aW9uKTtpZighaihlKSl7dmFyIG49ZS5vYnNlcnZlcjt0cnl7dmFyIHI9dyhuLm5leHQpO3ImJnIuY2FsbChuLHQpfWNhdGNoKHQpe3YodCl9fX0sZXJyb3I6ZnVuY3Rpb24odCl7dmFyIGU9Yih0aGlzKS5zdWJzY3JpcHRpb24sbj1iKGUpO2lmKCFqKG4pKXt2YXIgcj1uLm9ic2VydmVyO0MoZSxuKTt0cnl7dmFyIG89dyhyLmVycm9yKTtvP28uY2FsbChyLHQpOnYodCl9Y2F0Y2godCl7dih0KX1FKG4pfX0sY29tcGxldGU6ZnVuY3Rpb24oKXt2YXIgdD1iKHRoaXMpLnN1YnNjcmlwdGlvbixlPWIodCk7aWYoIWooZSkpe3ZhciBuPWUub2JzZXJ2ZXI7Qyh0LGUpO3RyeXt2YXIgcj13KG4uY29tcGxldGUpO3ImJnIuY2FsbChuKX1jYXRjaCh0KXt2KHQpfUUoZSl9fX0pLG8mJmwoUy5wcm90b3R5cGUsImNsb3NlZCIse2NvbmZpZ3VyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gaihiKGIodGhpcykuc3Vic2NyaXB0aW9uKSl9fSk7dmFyIE89ZnVuY3Rpb24odCl7dSh0aGlzLE8sIk9ic2VydmFibGUiKSx4KHRoaXMse3N1YnNjcmliZXI6YSh0KX0pfTtkKE8ucHJvdG90eXBlLHtzdWJzY3JpYmU6ZnVuY3Rpb24odCl7dmFyIGU9YXJndW1lbnRzLmxlbmd0aDtyZXR1cm4gbmV3IGsoImZ1bmN0aW9uIj09dHlwZW9mIHQ/e25leHQ6dCxlcnJvcjplPjE/YXJndW1lbnRzWzFdOnZvaWQgMCxjb21wbGV0ZTplPjI/YXJndW1lbnRzWzJdOnZvaWQgMH06cyh0KT90Ont9LGIodGhpcykuc3Vic2NyaWJlcil9fSksZChPLHtmcm9tOmZ1bmN0aW9uKHQpe3ZhciBlPSJmdW5jdGlvbiI9PXR5cGVvZiB0aGlzP3RoaXM6TyxuPXcoYyh0KVttXSk7aWYobil7dmFyIHI9YyhuLmNhbGwodCkpO3JldHVybiByLmNvbnN0cnVjdG9yPT09ZT9yOm5ldyBlKChmdW5jdGlvbih0KXtyZXR1cm4gci5zdWJzY3JpYmUodCl9KSl9dmFyIG89cCh0KTtyZXR1cm4gbmV3IGUoKGZ1bmN0aW9uKHQpe2gobywoZnVuY3Rpb24oZSl7aWYodC5uZXh0KGUpLHQuY2xvc2VkKXJldHVybiBoLnN0b3AoKX0pLHZvaWQgMCwhMSwhMCksdC5jb21wbGV0ZSgpfSkpfSxvZjpmdW5jdGlvbigpe2Zvcih2YXIgdD0iZnVuY3Rpb24iPT10eXBlb2YgdGhpcz90aGlzOk8sZT1hcmd1bWVudHMubGVuZ3RoLG49bmV3IEFycmF5KGUpLHI9MDtyPGU7KW5bcl09YXJndW1lbnRzW3IrK107cmV0dXJuIG5ldyB0KChmdW5jdGlvbih0KXtmb3IodmFyIHI9MDtyPGU7cisrKWlmKHQubmV4dChuW3JdKSx0LmNsb3NlZClyZXR1cm47dC5jb21wbGV0ZSgpfSkpfX0pLGYoTy5wcm90b3R5cGUsbSwoZnVuY3Rpb24oKXtyZXR1cm4gdGhpc30pKSxyKHtnbG9iYWw6ITB9LHtPYnNlcnZhYmxlOk99KSxpKCJPYnNlcnZhYmxlIil9LDI3NzU6ZnVuY3Rpb24odCxlLG4pe24oMTc2MjkpfSw3MzIyMDpmdW5jdGlvbih0LGUsbil7InVzZSBzdHJpY3QiO3ZhciByPW4oMTQwNDQpLG89big4NjQ3MCksaT1uKDc3MDEpLGE9big4MzA4MyksYz1uKDMxMTUpLHM9big0MTMzNCksdT0iTm8gb25lIHByb21pc2UgcmVzb2x2ZWQiO3Ioe3RhcmdldDoiUHJvbWlzZSIsc3RhdDohMH0se2FueTpmdW5jdGlvbih0KXt2YXIgZT10aGlzLG49YS5mKGUpLHI9bi5yZXNvbHZlLGw9bi5yZWplY3QsZj1jKChmdW5jdGlvbigpe3ZhciBuPW8oZS5yZXNvbHZlKSxhPVtdLGM9MCxmPTEsZD0hMTtzKHQsKGZ1bmN0aW9uKHQpe3ZhciBvPWMrKyxzPSExO2EucHVzaCh2b2lkIDApLGYrKyxuLmNhbGwoZSx0KS50aGVuKChmdW5jdGlvbih0KXtzfHxkfHwoZD0hMCxyKHQpKX0pLChmdW5jdGlvbih0KXtzfHxkfHwocz0hMCxhW29dPXQsLS1mfHxsKG5ldyhpKCJBZ2dyZWdhdGVFcnJvciIpKShhLHUpKSl9KSl9KSksLS1mfHxsKG5ldyhpKCJBZ2dyZWdhdGVFcnJvciIpKShhLHUpKX0pKTtyZXR1cm4gZi5lcnJvciYmbChmLnZhbHVlKSxuLnByb21pc2V9fSl9LDExMDcxOmZ1bmN0aW9uKHQsZSxuKXsidXNlIHN0cmljdCI7dmFyIHI9bigxNDA0NCksbz1uKDgzMDgzKSxpPW4oMzExNSk7cih7dGFyZ2V0OiJQcm9taXNlIixzdGF0OiEwfSx7dHJ5OmZ1bmN0aW9uKHQpe3ZhciBlPW8uZih0aGlzKSxuPWkodCk7cmV0dXJuKG4uZXJyb3I/ZS5yZWplY3Q6ZS5yZXNvbHZlKShuLnZhbHVlKSxlLnByb21pc2V9fSl9LDQ5NjQwOmZ1bmN0aW9uKHQsZSxuKXt2YXIgcj1uKDE0MDQ0KSxvPW4oNzcwMjApLGk9big4NzU3OSksYT1vLnRvS2V5LGM9by5zZXQ7cih7dGFyZ2V0OiJSZWZsZWN0IixzdGF0OiEwfSx7ZGVmaW5lTWV0YWRhdGE6ZnVuY3Rpb24odCxlLG4pe3ZhciByPWFyZ3VtZW50cy5sZW5ndGg8ND92b2lkIDA6YShhcmd1bWVudHNbM10pO2ModCxlLGkobikscil9fSl9LDc0OTYzOmZ1bmN0aW9uKHQsZSxuKXt2YXIgcj1uKDE0MDQ0KSxvPW4oNzcwMjApLGk9big4NzU3OSksYT1vLnRvS2V5LGM9by5nZXRNYXAscz1vLnN0b3JlO3Ioe3RhcmdldDoiUmVmbGVjdCIsc3RhdDohMH0se2RlbGV0ZU1ldGFkYXRhOmZ1bmN0aW9uKHQsZSl7dmFyIG49YXJndW1lbnRzLmxlbmd0aDwzP3ZvaWQgMDphKGFyZ3VtZW50c1syXSkscj1jKGkoZSksbiwhMSk7aWYodm9pZCAwPT09cnx8IXIuZGVsZXRlKHQpKXJldHVybiExO2lmKHIuc2l6ZSlyZXR1cm4hMDt2YXIgbz1zLmdldChlKTtyZXR1cm4gby5kZWxldGUobiksISFvLnNpemV8fHMuZGVsZXRlKGUpfX0pfSw0OTE1NTpmdW5jdGlvbih0LGUsbil7dmFyIHI9bigxNDA0NCksbz1uKDc0MDYxKSxpPW4oNzcwMjApLGE9big4NzU3OSksYz1uKDY0OTY1KSxzPW4oNDEzMzQpLHU9aS5rZXlzLGw9aS50b0tleSxmPWZ1bmN0aW9uKHQsZSl7dmFyIG49dSh0LGUpLHI9Yyh0KTtpZihudWxsPT09cilyZXR1cm4gbjt2YXIgaSxhLGw9ZihyLGUpO3JldHVybiBsLmxlbmd0aD9uLmxlbmd0aD8oaT1uZXcgbyhuLmNvbmNhdChsKSkscyhpLChhPVtdKS5wdXNoLGEpLGEpOmw6bn07cih7dGFyZ2V0OiJSZWZsZWN0IixzdGF0OiEwfSx7Z2V0TWV0YWRhdGFLZXlzOmZ1bmN0aW9uKHQpe3ZhciBlPWFyZ3VtZW50cy5sZW5ndGg8Mj92b2lkIDA6bChhcmd1bWVudHNbMV0pO3JldHVybiBmKGEodCksZSl9fSl9LDY5NDU5OmZ1bmN0aW9uKHQsZSxuKXt2YXIgcj1uKDE0MDQ0KSxvPW4oNzcwMjApLGk9big4NzU3OSksYT1uKDY0OTY1KSxjPW8uaGFzLHM9by5nZXQsdT1vLnRvS2V5LGw9ZnVuY3Rpb24odCxlLG4pe2lmKGModCxlLG4pKXJldHVybiBzKHQsZSxuKTt2YXIgcj1hKGUpO3JldHVybiBudWxsIT09cj9sKHQscixuKTp2b2lkIDB9O3Ioe3RhcmdldDoiUmVmbGVjdCIsc3RhdDohMH0se2dldE1ldGFkYXRhOmZ1bmN0aW9uKHQsZSl7dmFyIG49YXJndW1lbnRzLmxlbmd0aDwzP3ZvaWQgMDp1KGFyZ3VtZW50c1syXSk7cmV0dXJuIGwodCxpKGUpLG4pfX0pfSw4NzQ3NDpmdW5jdGlvbih0LGUsbil7dmFyIHI9bigxNDA0NCksbz1uKDc3MDIwKSxpPW4oODc1NzkpLGE9by5rZXlzLGM9by50b0tleTtyKHt0YXJnZXQ6IlJlZmxlY3QiLHN0YXQ6ITB9LHtnZXRPd25NZXRhZGF0YUtleXM6ZnVuY3Rpb24odCl7dmFyIGU9YXJndW1lbnRzLmxlbmd0aDwyP3ZvaWQgMDpjKGFyZ3VtZW50c1sxXSk7cmV0dXJuIGEoaSh0KSxlKX19KX0sMjY4OTY6ZnVuY3Rpb24odCxlLG4pe3ZhciByPW4oMTQwNDQpLG89big3NzAyMCksaT1uKDg3NTc5KSxhPW8uZ2V0LGM9by50b0tleTtyKHt0YXJnZXQ6IlJlZmxlY3QiLHN0YXQ6ITB9LHtnZXRPd25NZXRhZGF0YTpmdW5jdGlvbih0LGUpe3ZhciBuPWFyZ3VtZW50cy5sZW5ndGg8Mz92b2lkIDA6Yyhhcmd1bWVudHNbMl0pO3JldHVybiBhKHQsaShlKSxuKX19KX0sOTc0MzM6ZnVuY3Rpb24odCxlLG4pe3ZhciByPW4oMTQwNDQpLG89big3NzAyMCksaT1uKDg3NTc5KSxhPW4oNjQ5NjUpLGM9by5oYXMscz1vLnRvS2V5LHU9ZnVuY3Rpb24odCxlLG4pe2lmKGModCxlLG4pKXJldHVybiEwO3ZhciByPWEoZSk7cmV0dXJuIG51bGwhPT1yJiZ1KHQscixuKX07cih7dGFyZ2V0OiJSZWZsZWN0IixzdGF0OiEwfSx7aGFzTWV0YWRhdGE6ZnVuY3Rpb24odCxlKXt2YXIgbj1hcmd1bWVudHMubGVuZ3RoPDM/dm9pZCAwOnMoYXJndW1lbnRzWzJdKTtyZXR1cm4gdSh0LGkoZSksbil9fSl9LDcxMDg6ZnVuY3Rpb24odCxlLG4pe3ZhciByPW4oMTQwNDQpLG89big3NzAyMCksaT1uKDg3NTc5KSxhPW8uaGFzLGM9by50b0tleTtyKHt0YXJnZXQ6IlJlZmxlY3QiLHN0YXQ6ITB9LHtoYXNPd25NZXRhZGF0YTpmdW5jdGlvbih0LGUpe3ZhciBuPWFyZ3VtZW50cy5sZW5ndGg8Mz92b2lkIDA6Yyhhcmd1bWVudHNbMl0pO3JldHVybiBhKHQsaShlKSxuKX19KX0sMjM2MzE6ZnVuY3Rpb24odCxlLG4pe3ZhciByPW4oMTQwNDQpLG89big3NzAyMCksaT1uKDg3NTc5KSxhPW8udG9LZXksYz1vLnNldDtyKHt0YXJnZXQ6IlJlZmxlY3QiLHN0YXQ6ITB9LHttZXRhZGF0YTpmdW5jdGlvbih0LGUpe3JldHVybiBmdW5jdGlvbihuLHIpe2ModCxlLGkobiksYShyKSl9fX0pfSw5Mzk6ZnVuY3Rpb24odCxlLG4peyJ1c2Ugc3RyaWN0Ijt2YXIgcj1uKDE0MDQ0KSxvPW4oNjU2NzIpLGk9big5ODE3OSk7cih7dGFyZ2V0OiJTZXQiLHByb3RvOiEwLHJlYWw6ITAsZm9yY2VkOm99LHthZGRBbGw6ZnVuY3Rpb24oKXtyZXR1cm4gaS5hcHBseSh0aGlzLGFyZ3VtZW50cyl9fSl9LDYxNDY3OmZ1bmN0aW9uKHQsZSxuKXsidXNlIHN0cmljdCI7dmFyIHI9bigxNDA0NCksbz1uKDY1NjcyKSxpPW4oMTQ2Nik7cih7dGFyZ2V0OiJTZXQiLHByb3RvOiEwLHJlYWw6ITAsZm9yY2VkOm99LHtkZWxldGVBbGw6ZnVuY3Rpb24oKXtyZXR1cm4gaS5hcHBseSh0aGlzLGFyZ3VtZW50cyl9fSl9LDk4MzUwOmZ1bmN0aW9uKHQsZSxuKXsidXNlIHN0cmljdCI7dmFyIHI9bigxNDA0NCksbz1uKDY1NjcyKSxpPW4oNzcwMSksYT1uKDg3NTc5KSxjPW4oODY0NzApLHM9bigxMzk3OSksdT1uKDQxMzM0KTtyKHt0YXJnZXQ6IlNldCIscHJvdG86ITAscmVhbDohMCxmb3JjZWQ6b30se2RpZmZlcmVuY2U6ZnVuY3Rpb24odCl7dmFyIGU9YSh0aGlzKSxuPW5ldyhzKGUsaSgiU2V0IikpKShlKSxyPWMobi5kZWxldGUpO3JldHVybiB1KHQsKGZ1bmN0aW9uKHQpe3IuY2FsbChuLHQpfSkpLG59fSl9LDE2MTI3OmZ1bmN0aW9uKHQsZSxuKXsidXNlIHN0cmljdCI7dmFyIHI9bigxNDA0NCksbz1uKDY1NjcyKSxpPW4oODc1NzkpLGE9big0NjEzMCksYz1uKDQxNDc1KSxzPW4oNDEzMzQpO3Ioe3RhcmdldDoiU2V0Iixwcm90bzohMCxyZWFsOiEwLGZvcmNlZDpvfSx7ZXZlcnk6ZnVuY3Rpb24odCl7dmFyIGU9aSh0aGlzKSxuPWMoZSkscj1hKHQsYXJndW1lbnRzLmxlbmd0aD4xP2FyZ3VtZW50c1sxXTp2b2lkIDAsMyk7cmV0dXJuIXMobiwoZnVuY3Rpb24odCl7aWYoIXIodCx0LGUpKXJldHVybiBzLnN0b3AoKX0pLHZvaWQgMCwhMSwhMCkuc3RvcHBlZH19KX0sNTM1ODk6ZnVuY3Rpb24odCxlLG4peyJ1c2Ugc3RyaWN0Ijt2YXIgcj1uKDE0MDQ0KSxvPW4oNjU2NzIpLGk9big3NzAxKSxhPW4oODc1NzkpLGM9big4NjQ3MCkscz1uKDQ2MTMwKSx1PW4oMTM5NzkpLGw9big0MTQ3NSksZj1uKDQxMzM0KTtyKHt0YXJnZXQ6IlNldCIscHJvdG86ITAscmVhbDohMCxmb3JjZWQ6b30se2ZpbHRlcjpmdW5jdGlvbih0KXt2YXIgZT1hKHRoaXMpLG49bChlKSxyPXModCxhcmd1bWVudHMubGVuZ3RoPjE/YXJndW1lbnRzWzFdOnZvaWQgMCwzKSxvPW5ldyh1KGUsaSgiU2V0IikpKSxkPWMoby5hZGQpO3JldHVybiBmKG4sKGZ1bmN0aW9uKHQpe3IodCx0LGUpJiZkLmNhbGwobyx0KX0pLHZvaWQgMCwhMSwhMCksb319KX0sODEwNDI6ZnVuY3Rpb24odCxlLG4peyJ1c2Ugc3RyaWN0Ijt2YXIgcj1uKDE0MDQ0KSxvPW4oNjU2NzIpLGk9big4NzU3OSksYT1uKDQ2MTMwKSxjPW4oNDE0NzUpLHM9big0MTMzNCk7cih7dGFyZ2V0OiJTZXQiLHByb3RvOiEwLHJlYWw6ITAsZm9yY2VkOm99LHtmaW5kOmZ1bmN0aW9uKHQpe3ZhciBlPWkodGhpcyksbj1jKGUpLHI9YSh0LGFyZ3VtZW50cy5sZW5ndGg+MT9hcmd1bWVudHNbMV06dm9pZCAwLDMpO3JldHVybiBzKG4sKGZ1bmN0aW9uKHQpe2lmKHIodCx0LGUpKXJldHVybiBzLnN0b3AodCl9KSx2b2lkIDAsITEsITApLnJlc3VsdH19KX0sOTcyODQ6ZnVuY3Rpb24odCxlLG4pe24oMTQwNDQpKHt0YXJnZXQ6IlNldCIsc3RhdDohMH0se2Zyb206bigxMjkwMSl9KX0sNDE3MTg6ZnVuY3Rpb24odCxlLG4peyJ1c2Ugc3RyaWN0Ijt2YXIgcj1uKDE0MDQ0KSxvPW4oNjU2NzIpLGk9big3NzAxKSxhPW4oODc1NzkpLGM9big4NjQ3MCkscz1uKDEzOTc5KSx1PW4oNDEzMzQpO3Ioe3RhcmdldDoiU2V0Iixwcm90bzohMCxyZWFsOiEwLGZvcmNlZDpvfSx7aW50ZXJzZWN0aW9uOmZ1bmN0aW9uKHQpe3ZhciBlPWEodGhpcyksbj1uZXcocyhlLGkoIlNldCIpKSkscj1jKGUuaGFzKSxvPWMobi5hZGQpO3JldHVybiB1KHQsKGZ1bmN0aW9uKHQpe3IuY2FsbChlLHQpJiZvLmNhbGwobix0KX0pKSxufX0pfSw1NzM3MTpmdW5jdGlvbih0LGUsbil7InVzZSBzdHJpY3QiO3ZhciByPW4oMTQwNDQpLG89big2NTY3MiksaT1uKDg3NTc5KSxhPW4oODY0NzApLGM9big0MTMzNCk7cih7dGFyZ2V0OiJTZXQiLHByb3RvOiEwLHJlYWw6ITAsZm9yY2VkOm99LHtpc0Rpc2pvaW50RnJvbTpmdW5jdGlvbih0KXt2YXIgZT1pKHRoaXMpLG49YShlLmhhcyk7cmV0dXJuIWModCwoZnVuY3Rpb24odCl7aWYoITA9PT1uLmNhbGwoZSx0KSlyZXR1cm4gYy5zdG9wKCl9KSkuc3RvcHBlZH19KX0sODkyMzA6ZnVuY3Rpb24odCxlLG4peyJ1c2Ugc3RyaWN0Ijt2YXIgcj1uKDE0MDQ0KSxvPW4oNjU2NzIpLGk9big3NzAxKSxhPW4oODc1NzkpLGM9big4NjQ3MCkscz1uKDMxMDc0KSx1PW4oNDEzMzQpO3Ioe3RhcmdldDoiU2V0Iixwcm90bzohMCxyZWFsOiEwLGZvcmNlZDpvfSx7aXNTdWJzZXRPZjpmdW5jdGlvbih0KXt2YXIgZT1zKHRoaXMpLG49YSh0KSxyPW4uaGFzO3JldHVybiJmdW5jdGlvbiIhPXR5cGVvZiByJiYobj1uZXcoaSgiU2V0IikpKHQpLHI9YyhuLmhhcykpLCF1KGUsKGZ1bmN0aW9uKHQpe2lmKCExPT09ci5jYWxsKG4sdCkpcmV0dXJuIHUuc3RvcCgpfSksdm9pZCAwLCExLCEwKS5zdG9wcGVkfX0pfSwzMjMwMzpmdW5jdGlvbih0LGUsbil7InVzZSBzdHJpY3QiO3ZhciByPW4oMTQwNDQpLG89big2NTY3MiksaT1uKDg3NTc5KSxhPW4oODY0NzApLGM9big0MTMzNCk7cih7dGFyZ2V0OiJTZXQiLHByb3RvOiEwLHJlYWw6ITAsZm9yY2VkOm99LHtpc1N1cGVyc2V0T2Y6ZnVuY3Rpb24odCl7dmFyIGU9aSh0aGlzKSxuPWEoZS5oYXMpO3JldHVybiFjKHQsKGZ1bmN0aW9uKHQpe2lmKCExPT09bi5jYWxsKGUsdCkpcmV0dXJuIGMuc3RvcCgpfSkpLnN0b3BwZWR9fSl9LDE2NzU3OmZ1bmN0aW9uKHQsZSxuKXsidXNlIHN0cmljdCI7dmFyIHI9bigxNDA0NCksbz1uKDY1NjcyKSxpPW4oODc1NzkpLGE9big0MTQ3NSksYz1uKDQxMzM0KTtyKHt0YXJnZXQ6IlNldCIscHJvdG86ITAscmVhbDohMCxmb3JjZWQ6b30se2pvaW46ZnVuY3Rpb24odCl7dmFyIGU9aSh0aGlzKSxuPWEoZSkscj12b2lkIDA9PT10PyIsIjpTdHJpbmcodCksbz1bXTtyZXR1cm4gYyhuLG8ucHVzaCxvLCExLCEwKSxvLmpvaW4ocil9fSl9LDExMDc0OmZ1bmN0aW9uKHQsZSxuKXsidXNlIHN0cmljdCI7dmFyIHI9bigxNDA0NCksbz1uKDY1NjcyKSxpPW4oNzcwMSksYT1uKDg3NTc5KSxjPW4oODY0NzApLHM9big0NjEzMCksdT1uKDEzOTc5KSxsPW4oNDE0NzUpLGY9big0MTMzNCk7cih7dGFyZ2V0OiJTZXQiLHByb3RvOiEwLHJlYWw6ITAsZm9yY2VkOm99LHttYXA6ZnVuY3Rpb24odCl7dmFyIGU9YSh0aGlzKSxuPWwoZSkscj1zKHQsYXJndW1lbnRzLmxlbmd0aD4xP2FyZ3VtZW50c1sxXTp2b2lkIDAsMyksbz1uZXcodShlLGkoIlNldCIpKSksZD1jKG8uYWRkKTtyZXR1cm4gZihuLChmdW5jdGlvbih0KXtkLmNhbGwobyxyKHQsdCxlKSl9KSx2b2lkIDAsITEsITApLG99fSl9LDI0NTk4OmZ1bmN0aW9uKHQsZSxuKXtuKDE0MDQ0KSh7dGFyZ2V0OiJTZXQiLHN0YXQ6ITB9LHtvZjpuKDI1MDI2KX0pfSwzMzUzOTpmdW5jdGlvbih0LGUsbil7InVzZSBzdHJpY3QiO3ZhciByPW4oMTQwNDQpLG89big2NTY3MiksaT1uKDg3NTc5KSxhPW4oODY0NzApLGM9big0MTQ3NSkscz1uKDQxMzM0KTtyKHt0YXJnZXQ6IlNldCIscHJvdG86ITAscmVhbDohMCxmb3JjZWQ6b30se3JlZHVjZTpmdW5jdGlvbih0KXt2YXIgZT1pKHRoaXMpLG49YyhlKSxyPWFyZ3VtZW50cy5sZW5ndGg8MixvPXI/dm9pZCAwOmFyZ3VtZW50c1sxXTtpZihhKHQpLHMobiwoZnVuY3Rpb24obil7cj8ocj0hMSxvPW4pOm89dChvLG4sbixlKX0pLHZvaWQgMCwhMSwhMCkscil0aHJvdyBUeXBlRXJyb3IoIlJlZHVjZSBvZiBlbXB0eSBzZXQgd2l0aCBubyBpbml0aWFsIHZhbHVlIik7cmV0dXJuIG99fSl9LDI0MTAzOmZ1bmN0aW9uKHQsZSxuKXsidXNlIHN0cmljdCI7dmFyIHI9bigxNDA0NCksbz1uKDY1NjcyKSxpPW4oODc1NzkpLGE9big0NjEzMCksYz1uKDQxNDc1KSxzPW4oNDEzMzQpO3Ioe3RhcmdldDoiU2V0Iixwcm90bzohMCxyZWFsOiEwLGZvcmNlZDpvfSx7c29tZTpmdW5jdGlvbih0KXt2YXIgZT1pKHRoaXMpLG49YyhlKSxyPWEodCxhcmd1bWVudHMubGVuZ3RoPjE/YXJndW1lbnRzWzFdOnZvaWQgMCwzKTtyZXR1cm4gcyhuLChmdW5jdGlvbih0KXtpZihyKHQsdCxlKSlyZXR1cm4gcy5zdG9wKCl9KSx2b2lkIDAsITEsITApLnN0b3BwZWR9fSl9LDY2MTgxOmZ1bmN0aW9uKHQsZSxuKXsidXNlIHN0cmljdCI7dmFyIHI9bigxNDA0NCksbz1uKDY1NjcyKSxpPW4oNzcwMSksYT1uKDg3NTc5KSxjPW4oODY0NzApLHM9bigxMzk3OSksdT1uKDQxMzM0KTtyKHt0YXJnZXQ6IlNldCIscHJvdG86ITAscmVhbDohMCxmb3JjZWQ6b30se3N5bW1ldHJpY0RpZmZlcmVuY2U6ZnVuY3Rpb24odCl7dmFyIGU9YSh0aGlzKSxuPW5ldyhzKGUsaSgiU2V0IikpKShlKSxyPWMobi5kZWxldGUpLG89YyhuLmFkZCk7cmV0dXJuIHUodCwoZnVuY3Rpb24odCl7ci5jYWxsKG4sdCl8fG8uY2FsbChuLHQpfSkpLG59fSl9LDYyOTE6ZnVuY3Rpb24odCxlLG4peyJ1c2Ugc3RyaWN0Ijt2YXIgcj1uKDE0MDQ0KSxvPW4oNjU2NzIpLGk9big3NzAxKSxhPW4oODc1NzkpLGM9big4NjQ3MCkscz1uKDEzOTc5KSx1PW4oNDEzMzQpO3Ioe3RhcmdldDoiU2V0Iixwcm90bzohMCxyZWFsOiEwLGZvcmNlZDpvfSx7dW5pb246ZnVuY3Rpb24odCl7dmFyIGU9YSh0aGlzKSxuPW5ldyhzKGUsaSgiU2V0IikpKShlKTtyZXR1cm4gdSh0LGMobi5hZGQpLG4pLG59fSl9LDczNDYwOmZ1bmN0aW9uKHQsZSxuKXsidXNlIHN0cmljdCI7dmFyIHI9bigxNDA0NCksbz1uKDYwMTQwKS5jaGFyQXQ7cih7dGFyZ2V0OiJTdHJpbmciLHByb3RvOiEwfSx7YXQ6ZnVuY3Rpb24odCl7cmV0dXJuIG8odGhpcyx0KX19KX0sMzIwNjI6ZnVuY3Rpb24odCxlLG4peyJ1c2Ugc3RyaWN0Ijt2YXIgcj1uKDE0MDQ0KSxvPW4oNzEyMDEpLGk9big3MDEzMiksYT1uKDg5ODI3KSxjPW4oNjAxNDApLHM9Yy5jb2RlQXQsdT1jLmNoYXJBdCxsPSJTdHJpbmcgSXRlcmF0b3IiLGY9YS5zZXQsZD1hLmdldHRlckZvcihsKSxwPW8oKGZ1bmN0aW9uKHQpe2YodGhpcyx7dHlwZTpsLHN0cmluZzp0LGluZGV4OjB9KX0pLCJTdHJpbmciLChmdW5jdGlvbigpe3ZhciB0LGU9ZCh0aGlzKSxuPWUuc3RyaW5nLHI9ZS5pbmRleDtyZXR1cm4gcj49bi5sZW5ndGg/e3ZhbHVlOnZvaWQgMCxkb25lOiEwfToodD11KG4sciksZS5pbmRleCs9dC5sZW5ndGgse3ZhbHVlOntjb2RlUG9pbnQ6cyh0LDApLHBvc2l0aW9uOnJ9LGRvbmU6ITF9KX0pKTtyKHt0YXJnZXQ6IlN0cmluZyIscHJvdG86ITB9LHtjb2RlUG9pbnRzOmZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBwKFN0cmluZyhpKHRoaXMpKSl9fSl9LDc0NTI1OmZ1bmN0aW9uKHQsZSxuKXtuKDgxMjc3KX0sNjQwMjY6ZnVuY3Rpb24odCxlLG4peyJ1c2Ugc3RyaWN0Ijt2YXIgcj1uKDE0MDQ0KSxvPW4oNzAxMzIpLGk9big0MzIyMyksYT1uKDI1NDE5KSxjPW4oMjM3MjQpLHM9big2NTY3MiksdT1jKCJyZXBsYWNlIiksbD1SZWdFeHAucHJvdG90eXBlO3Ioe3RhcmdldDoiU3RyaW5nIixwcm90bzohMH0se3JlcGxhY2VBbGw6ZnVuY3Rpb24gdChlLG4pe3ZhciByLGMsZixkLHAsaCx2LGcseT1vKHRoaXMpO2lmKG51bGwhPWUpe2lmKChyPWkoZSkpJiYhflN0cmluZyhvKCJmbGFncyJpbiBsP2UuZmxhZ3M6YS5jYWxsKGUpKSkuaW5kZXhPZigiZyIpKXRocm93IFR5cGVFcnJvcigiYC5yZXBsYWNlQWxsYCBkb2VzIG5vdCBhbGxvdyBub24tZ2xvYmFsIHJlZ2V4ZXMiKTtpZih2b2lkIDAhPT0oYz1lW3VdKSlyZXR1cm4gYy5jYWxsKGUseSxuKTtpZihzJiZyKXJldHVybiBTdHJpbmcoeSkucmVwbGFjZShlLG4pfWlmKGY9U3RyaW5nKHkpLCIiPT09KGQ9U3RyaW5nKGUpKSlyZXR1cm4gdC5jYWxsKGYsLyg/OikvZyxuKTtpZihwPWYuc3BsaXQoZCksImZ1bmN0aW9uIiE9dHlwZW9mIG4pcmV0dXJuIHAuam9pbihTdHJpbmcobikpO2Zvcih2PShoPXBbMF0pLmxlbmd0aCxnPTE7ZzxwLmxlbmd0aDtnKyspaCs9U3RyaW5nKG4oZCx2LGYpKSx2Kz1kLmxlbmd0aCtwW2ddLmxlbmd0aCxoKz1wW2ddO3JldHVybiBofX0pfSw2OTQyOmZ1bmN0aW9uKHQsZSxuKXtuKDkyMjc1KSgiYXN5bmNEaXNwb3NlIil9LDk0MjQ5OmZ1bmN0aW9uKHQsZSxuKXtuKDkyMjc1KSgiZGlzcG9zZSIpfSw1MTM3NDpmdW5jdGlvbih0LGUsbil7big5MjI3NSkoIm9ic2VydmFibGUiKX0sNTM3NzI6ZnVuY3Rpb24odCxlLG4pe24oOTIyNzUpKCJwYXR0ZXJuTWF0Y2giKX0sODYwNzc6ZnVuY3Rpb24odCxlLG4pe24oOTIyNzUpKCJyZXBsYWNlQWxsIil9LDY0ODEzOmZ1bmN0aW9uKHQsZSxuKXsidXNlIHN0cmljdCI7dmFyIHI9bigxNDA0NCksbz1uKDY1NjcyKSxpPW4oMTQ2Nik7cih7dGFyZ2V0OiJXZWFrTWFwIixwcm90bzohMCxyZWFsOiEwLGZvcmNlZDpvfSx7ZGVsZXRlQWxsOmZ1bmN0aW9uKCl7cmV0dXJuIGkuYXBwbHkodGhpcyxhcmd1bWVudHMpfX0pfSw5OTk3OTpmdW5jdGlvbih0LGUsbil7bigxNDA0NCkoe3RhcmdldDoiV2Vha01hcCIsc3RhdDohMH0se2Zyb206bigxMjkwMSl9KX0sMTgyMDU6ZnVuY3Rpb24odCxlLG4pe24oMTQwNDQpKHt0YXJnZXQ6IldlYWtNYXAiLHN0YXQ6ITB9LHtvZjpuKDI1MDI2KX0pfSw4NzU1NTpmdW5jdGlvbih0LGUsbil7InVzZSBzdHJpY3QiO24oMTQwNDQpKHt0YXJnZXQ6IldlYWtNYXAiLHByb3RvOiEwLHJlYWw6ITAsZm9yY2VkOm4oNjU2NzIpfSx7dXBzZXJ0Om4oNDc5MjcpfSl9LDY4OTk5OmZ1bmN0aW9uKHQsZSxuKXsidXNlIHN0cmljdCI7dmFyIHI9bigxNDA0NCksbz1uKDY1NjcyKSxpPW4oOTgxNzkpO3Ioe3RhcmdldDoiV2Vha1NldCIscHJvdG86ITAscmVhbDohMCxmb3JjZWQ6b30se2FkZEFsbDpmdW5jdGlvbigpe3JldHVybiBpLmFwcGx5KHRoaXMsYXJndW1lbnRzKX19KX0sNTM4MjQ6ZnVuY3Rpb24odCxlLG4peyJ1c2Ugc3RyaWN0Ijt2YXIgcj1uKDE0MDQ0KSxvPW4oNjU2NzIpLGk9bigxNDY2KTtyKHt0YXJnZXQ6IldlYWtTZXQiLHByb3RvOiEwLHJlYWw6ITAsZm9yY2VkOm99LHtkZWxldGVBbGw6ZnVuY3Rpb24oKXtyZXR1cm4gaS5hcHBseSh0aGlzLGFyZ3VtZW50cyl9fSl9LDg1ODpmdW5jdGlvbih0LGUsbil7bigxNDA0NCkoe3RhcmdldDoiV2Vha1NldCIsc3RhdDohMH0se2Zyb206bigxMjkwMSl9KX0sNjQ4OTk6ZnVuY3Rpb24odCxlLG4pe24oMTQwNDQpKHt0YXJnZXQ6IldlYWtTZXQiLHN0YXQ6ITB9LHtvZjpuKDI1MDI2KX0pfSw2NzAzOTpmdW5jdGlvbih0LGUsbil7dmFyIHI9big4OTU1OCksbz1uKDQ3MDk0KSxpPW4oMzEzNjgpLGE9big2Njk3MSk7Zm9yKHZhciBjIGluIG8pe3ZhciBzPXJbY10sdT1zJiZzLnByb3RvdHlwZTtpZih1JiZ1LmZvckVhY2ghPT1pKXRyeXthKHUsImZvckVhY2giLGkpfWNhdGNoKHQpe3UuZm9yRWFjaD1pfX19LDc5Nzk5OmZ1bmN0aW9uKHQsZSxuKXt2YXIgcj1uKDg5NTU4KSxvPW4oNDcwOTQpLGk9big1MDA2MyksYT1uKDY2OTcxKSxjPW4oMjM3MjQpLHM9YygiaXRlcmF0b3IiKSx1PWMoInRvU3RyaW5nVGFnIiksbD1pLnZhbHVlcztmb3IodmFyIGYgaW4gbyl7dmFyIGQ9cltmXSxwPWQmJmQucHJvdG90eXBlO2lmKHApe2lmKHBbc10hPT1sKXRyeXthKHAscyxsKX1jYXRjaCh0KXtwW3NdPWx9aWYocFt1XXx8YShwLHUsZiksb1tmXSlmb3IodmFyIGggaW4gaSlpZihwW2hdIT09aVtoXSl0cnl7YShwLGgsaVtoXSl9Y2F0Y2godCl7cFtoXT1pW2hdfX19fSw3NDAxMDpmdW5jdGlvbih0LGUsbil7dmFyIHI9bigxNDA0NCksbz1uKDg5NTU4KSxpPW4oMjE3NDQpO3Ioe2dsb2JhbDohMCxiaW5kOiEwLGVudW1lcmFibGU6ITAsZm9yY2VkOiFvLnNldEltbWVkaWF0ZXx8IW8uY2xlYXJJbW1lZGlhdGV9LHtzZXRJbW1lZGlhdGU6aS5zZXQsY2xlYXJJbW1lZGlhdGU6aS5jbGVhcn0pfSw2NTk3NjpmdW5jdGlvbih0LGUsbil7dmFyIHI9bigxNDA0NCksbz1uKDg5NTU4KSxpPW4oNjU1NTUpLGE9bigyNDU5NCksYz1vLnByb2Nlc3Mscz0icHJvY2VzcyI9PWEoYyk7cih7Z2xvYmFsOiEwLGVudW1lcmFibGU6ITAsbm9UYXJnZXRHZXQ6ITB9LHtxdWV1ZU1pY3JvdGFzazpmdW5jdGlvbih0KXt2YXIgZT1zJiZjLmRvbWFpbjtpKGU/ZS5iaW5kKHQpOnQpfX0pfSw4MTk5NDpmdW5jdGlvbih0LGUsbil7dmFyIHI9bigxNDA0NCksbz1uKDg5NTU4KSxpPW4oMzk0NzYpLGE9W10uc2xpY2UsYz1mdW5jdGlvbih0KXtyZXR1cm4gZnVuY3Rpb24oZSxuKXt2YXIgcj1hcmd1bWVudHMubGVuZ3RoPjIsbz1yP2EuY2FsbChhcmd1bWVudHMsMik6dm9pZCAwO3JldHVybiB0KHI/ZnVuY3Rpb24oKXsoImZ1bmN0aW9uIj09dHlwZW9mIGU/ZTpGdW5jdGlvbihlKSkuYXBwbHkodGhpcyxvKX06ZSxuKX19O3Ioe2dsb2JhbDohMCxiaW5kOiEwLGZvcmNlZDovTVNJRSAuXC4vLnRlc3QoaSl9LHtzZXRUaW1lb3V0OmMoby5zZXRUaW1lb3V0KSxzZXRJbnRlcnZhbDpjKG8uc2V0SW50ZXJ2YWwpfSl9LDU1NTc6ZnVuY3Rpb24odCxlLG4peyJ1c2Ugc3RyaWN0IjtuKDUwMDYzKTt2YXIgcj1uKDE0MDQ0KSxvPW4oNzcwMSksaT1uKDU3NTk3KSxhPW4oOTI5MTMpLGM9bigxOTI2KSxzPW4oNTExMjgpLHU9big3MTIwMSksbD1uKDg5ODI3KSxmPW4oNTkzNzkpLGQ9big3NjI5OCkscD1uKDQ2MTMwKSxoPW4oNTk1OTEpLHY9big4NzU3OSksZz1uKDEwNTkyKSx5PW4oNTA4NjgpLG09bigxNDIwOSksYj1uKDMxMDc0KSx4PW4oNzM4OTApLHc9bigyMzcyNCksRT1vKCJmZXRjaCIpLGo9bygiSGVhZGVycyIpLEM9dygiaXRlcmF0b3IiKSxrPSJVUkxTZWFyY2hQYXJhbXMiLFM9IlVSTFNlYXJjaFBhcmFtc0l0ZXJhdG9yIixPPWwuc2V0LEE9bC5nZXR0ZXJGb3IoayksST1sLmdldHRlckZvcihTKSxNPS9cKy9nLFQ9QXJyYXkoNCksXz1mdW5jdGlvbih0KXtyZXR1cm4gVFt0LTFdfHwoVFt0LTFdPVJlZ0V4cCgiKCg/OiVbXFxkYS1mXXsyfSl7Iit0KyJ9KSIsImdpIikpfSxMPWZ1bmN0aW9uKHQpe3RyeXtyZXR1cm4gZGVjb2RlVVJJQ29tcG9uZW50KHQpfWNhdGNoKGUpe3JldHVybiB0fX0sUj1mdW5jdGlvbih0KXt2YXIgZT10LnJlcGxhY2UoTSwiICIpLG49NDt0cnl7cmV0dXJuIGRlY29kZVVSSUNvbXBvbmVudChlKX1jYXRjaCh0KXtmb3IoO247KWU9ZS5yZXBsYWNlKF8obi0tKSxMKTtyZXR1cm4gZX19LFA9L1shJygpfl18JTIwL2csTj17IiEiOiIlMjEiLCInIjoiJTI3IiwiKCI6IiUyOCIsIikiOiIlMjkiLCJ+IjoiJTdFIiwiJTIwIjoiKyJ9LEQ9ZnVuY3Rpb24odCl7cmV0dXJuIE5bdF19LEY9ZnVuY3Rpb24odCl7cmV0dXJuIGVuY29kZVVSSUNvbXBvbmVudCh0KS5yZXBsYWNlKFAsRCl9LFU9ZnVuY3Rpb24odCxlKXtpZihlKWZvcih2YXIgbixyLG89ZS5zcGxpdCgiJiIpLGk9MDtpPG8ubGVuZ3RoOykobj1vW2krK10pLmxlbmd0aCYmKHI9bi5zcGxpdCgiPSIpLHQucHVzaCh7a2V5OlIoci5zaGlmdCgpKSx2YWx1ZTpSKHIuam9pbigiPSIpKX0pKX0sQj1mdW5jdGlvbih0KXt0aGlzLmVudHJpZXMubGVuZ3RoPTAsVSh0aGlzLmVudHJpZXMsdCl9LHo9ZnVuY3Rpb24odCxlKXtpZih0PGUpdGhyb3cgVHlwZUVycm9yKCJOb3QgZW5vdWdoIGFyZ3VtZW50cyIpfSxWPXUoKGZ1bmN0aW9uKHQsZSl7Tyh0aGlzLHt0eXBlOlMsaXRlcmF0b3I6YihBKHQpLmVudHJpZXMpLGtpbmQ6ZX0pfSksIkl0ZXJhdG9yIiwoZnVuY3Rpb24oKXt2YXIgdD1JKHRoaXMpLGU9dC5raW5kLG49dC5pdGVyYXRvci5uZXh0KCkscj1uLnZhbHVlO3JldHVybiBuLmRvbmV8fChuLnZhbHVlPSJrZXlzIj09PWU/ci5rZXk6InZhbHVlcyI9PT1lP3IudmFsdWU6W3Iua2V5LHIudmFsdWVdKSxufSkpLEg9ZnVuY3Rpb24oKXtmKHRoaXMsSCxrKTt2YXIgdCxlLG4scixvLGksYSxjLHMsdT1hcmd1bWVudHMubGVuZ3RoPjA/YXJndW1lbnRzWzBdOnZvaWQgMCxsPXRoaXMscD1bXTtpZihPKGwse3R5cGU6ayxlbnRyaWVzOnAsdXBkYXRlVVJMOmZ1bmN0aW9uKCl7fSx1cGRhdGVTZWFyY2hQYXJhbXM6Qn0pLHZvaWQgMCE9PXUpaWYoZyh1KSlpZigiZnVuY3Rpb24iPT10eXBlb2YodD14KHUpKSlmb3Iobj0oZT10LmNhbGwodSkpLm5leHQ7IShyPW4uY2FsbChlKSkuZG9uZTspe2lmKChhPShpPShvPWIodihyLnZhbHVlKSkpLm5leHQpLmNhbGwobykpLmRvbmV8fChjPWkuY2FsbChvKSkuZG9uZXx8IWkuY2FsbChvKS5kb25lKXRocm93IFR5cGVFcnJvcigiRXhwZWN0ZWQgc2VxdWVuY2Ugd2l0aCBsZW5ndGggMiIpO3AucHVzaCh7a2V5OmEudmFsdWUrIiIsdmFsdWU6Yy52YWx1ZSsiIn0pfWVsc2UgZm9yKHMgaW4gdSlkKHUscykmJnAucHVzaCh7a2V5OnMsdmFsdWU6dVtzXSsiIn0pO2Vsc2UgVShwLCJzdHJpbmciPT10eXBlb2YgdT8iPyI9PT11LmNoYXJBdCgwKT91LnNsaWNlKDEpOnU6dSsiIil9LHE9SC5wcm90b3R5cGU7YyhxLHthcHBlbmQ6ZnVuY3Rpb24odCxlKXt6KGFyZ3VtZW50cy5sZW5ndGgsMik7dmFyIG49QSh0aGlzKTtuLmVudHJpZXMucHVzaCh7a2V5OnQrIiIsdmFsdWU6ZSsiIn0pLG4udXBkYXRlVVJMKCl9LGRlbGV0ZTpmdW5jdGlvbih0KXt6KGFyZ3VtZW50cy5sZW5ndGgsMSk7Zm9yKHZhciBlPUEodGhpcyksbj1lLmVudHJpZXMscj10KyIiLG89MDtvPG4ubGVuZ3RoOyluW29dLmtleT09PXI/bi5zcGxpY2UobywxKTpvKys7ZS51cGRhdGVVUkwoKX0sZ2V0OmZ1bmN0aW9uKHQpe3ooYXJndW1lbnRzLmxlbmd0aCwxKTtmb3IodmFyIGU9QSh0aGlzKS5lbnRyaWVzLG49dCsiIixyPTA7cjxlLmxlbmd0aDtyKyspaWYoZVtyXS5rZXk9PT1uKXJldHVybiBlW3JdLnZhbHVlO3JldHVybiBudWxsfSxnZXRBbGw6ZnVuY3Rpb24odCl7eihhcmd1bWVudHMubGVuZ3RoLDEpO2Zvcih2YXIgZT1BKHRoaXMpLmVudHJpZXMsbj10KyIiLHI9W10sbz0wO288ZS5sZW5ndGg7bysrKWVbb10ua2V5PT09biYmci5wdXNoKGVbb10udmFsdWUpO3JldHVybiByfSxoYXM6ZnVuY3Rpb24odCl7eihhcmd1bWVudHMubGVuZ3RoLDEpO2Zvcih2YXIgZT1BKHRoaXMpLmVudHJpZXMsbj10KyIiLHI9MDtyPGUubGVuZ3RoOylpZihlW3IrK10ua2V5PT09bilyZXR1cm4hMDtyZXR1cm4hMX0sc2V0OmZ1bmN0aW9uKHQsZSl7eihhcmd1bWVudHMubGVuZ3RoLDEpO2Zvcih2YXIgbixyPUEodGhpcyksbz1yLmVudHJpZXMsaT0hMSxhPXQrIiIsYz1lKyIiLHM9MDtzPG8ubGVuZ3RoO3MrKykobj1vW3NdKS5rZXk9PT1hJiYoaT9vLnNwbGljZShzLS0sMSk6KGk9ITAsbi52YWx1ZT1jKSk7aXx8by5wdXNoKHtrZXk6YSx2YWx1ZTpjfSksci51cGRhdGVVUkwoKX0sc29ydDpmdW5jdGlvbigpe3ZhciB0LGUsbixyPUEodGhpcyksbz1yLmVudHJpZXMsaT1vLnNsaWNlKCk7Zm9yKG8ubGVuZ3RoPTAsbj0wO248aS5sZW5ndGg7bisrKXtmb3IodD1pW25dLGU9MDtlPG47ZSsrKWlmKG9bZV0ua2V5PnQua2V5KXtvLnNwbGljZShlLDAsdCk7YnJlYWt9ZT09PW4mJm8ucHVzaCh0KX1yLnVwZGF0ZVVSTCgpfSxmb3JFYWNoOmZ1bmN0aW9uKHQpe2Zvcih2YXIgZSxuPUEodGhpcykuZW50cmllcyxyPXAodCxhcmd1bWVudHMubGVuZ3RoPjE/YXJndW1lbnRzWzFdOnZvaWQgMCwzKSxvPTA7bzxuLmxlbmd0aDspcigoZT1uW28rK10pLnZhbHVlLGUua2V5LHRoaXMpfSxrZXlzOmZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBWKHRoaXMsImtleXMiKX0sdmFsdWVzOmZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBWKHRoaXMsInZhbHVlcyIpfSxlbnRyaWVzOmZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBWKHRoaXMsImVudHJpZXMiKX19LHtlbnVtZXJhYmxlOiEwfSksYShxLEMscS5lbnRyaWVzKSxhKHEsInRvU3RyaW5nIiwoZnVuY3Rpb24oKXtmb3IodmFyIHQsZT1BKHRoaXMpLmVudHJpZXMsbj1bXSxyPTA7cjxlLmxlbmd0aDspdD1lW3IrK10sbi5wdXNoKEYodC5rZXkpKyI9IitGKHQudmFsdWUpKTtyZXR1cm4gbi5qb2luKCImIil9KSx7ZW51bWVyYWJsZTohMH0pLHMoSCxrKSxyKHtnbG9iYWw6ITAsZm9yY2VkOiFpfSx7VVJMU2VhcmNoUGFyYW1zOkh9KSxpfHwiZnVuY3Rpb24iIT10eXBlb2YgRXx8ImZ1bmN0aW9uIiE9dHlwZW9mIGp8fHIoe2dsb2JhbDohMCxlbnVtZXJhYmxlOiEwLGZvcmNlZDohMH0se2ZldGNoOmZ1bmN0aW9uKHQpe3ZhciBlLG4scixvPVt0XTtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD4xJiYoZyhlPWFyZ3VtZW50c1sxXSkmJihuPWUuYm9keSxoKG4pPT09ayYmKChyPWUuaGVhZGVycz9uZXcgaihlLmhlYWRlcnMpOm5ldyBqKS5oYXMoImNvbnRlbnQtdHlwZSIpfHxyLnNldCgiY29udGVudC10eXBlIiwiYXBwbGljYXRpb24veC13d3ctZm9ybS11cmxlbmNvZGVkO2NoYXJzZXQ9VVRGLTgiKSxlPXkoZSx7Ym9keTptKDAsU3RyaW5nKG4pKSxoZWFkZXJzOm0oMCxyKX0pKSksby5wdXNoKGUpKSxFLmFwcGx5KHRoaXMsbyl9fSksdC5leHBvcnRzPXtVUkxTZWFyY2hQYXJhbXM6SCxnZXRTdGF0ZTpBfX0sMTM5MTA6ZnVuY3Rpb24odCxlLG4peyJ1c2Ugc3RyaWN0IjtuKDgyMjAxKTt2YXIgcixvPW4oMTQwNDQpLGk9big2MjU1NiksYT1uKDU3NTk3KSxjPW4oODk1NTgpLHM9big4NjQwMSksdT1uKDkyOTEzKSxsPW4oNTkzNzkpLGY9big3NjI5OCksZD1uKDc4Njg1KSxwPW4oODUxNjYpLGg9big2MDE0MCkuY29kZUF0LHY9big2OTkyNyksZz1uKDUxMTI4KSx5PW4oNTU1NyksbT1uKDg5ODI3KSxiPWMuVVJMLHg9eS5VUkxTZWFyY2hQYXJhbXMsdz15LmdldFN0YXRlLEU9bS5zZXQsaj1tLmdldHRlckZvcigiVVJMIiksQz1NYXRoLmZsb29yLGs9TWF0aC5wb3csUz0iSW52YWxpZCBzY2hlbWUiLE89IkludmFsaWQgaG9zdCIsQT0iSW52YWxpZCBwb3J0IixJPS9bQS1aYS16XS8sTT0vW1xkK1wtLkEtWmEtel0vLFQ9L1xkLyxfPS9eKDB4fDBYKS8sTD0vXlswLTddKyQvLFI9L15cZCskLyxQPS9eW1xkQS1GYS1mXSskLyxOPS9bXHUwMDAwXHUwMDA5XHUwMDBBXHUwMDBEICMlLzo/QFtcXF1dLyxEPS9bXHUwMDAwXHUwMDA5XHUwMDBBXHUwMDBEICMvOj9AW1xcXV0vLEY9L15bXHUwMDAwLVx1MDAxRiBdK3xbXHUwMDAwLVx1MDAxRiBdKyQvZyxVPS9bXHUwMDA5XHUwMDBBXHUwMDBEXS9nLEI9ZnVuY3Rpb24odCxlKXt2YXIgbixyLG87aWYoIlsiPT1lLmNoYXJBdCgwKSl7aWYoIl0iIT1lLmNoYXJBdChlLmxlbmd0aC0xKSlyZXR1cm4gTztpZighKG49VihlLnNsaWNlKDEsLTEpKSkpcmV0dXJuIE87dC5ob3N0PW59ZWxzZSBpZihKKHQpKXtpZihlPXYoZSksTi50ZXN0KGUpKXJldHVybiBPO2lmKG51bGw9PT0obj16KGUpKSlyZXR1cm4gTzt0Lmhvc3Q9bn1lbHNle2lmKEQudGVzdChlKSlyZXR1cm4gTztmb3Iobj0iIixyPXAoZSksbz0wO288ci5sZW5ndGg7bysrKW4rPSQocltvXSxxKTt0Lmhvc3Q9bn19LHo9ZnVuY3Rpb24odCl7dmFyIGUsbixyLG8saSxhLGMscz10LnNwbGl0KCIuIik7aWYocy5sZW5ndGgmJiIiPT1zW3MubGVuZ3RoLTFdJiZzLnBvcCgpLChlPXMubGVuZ3RoKT40KXJldHVybiB0O2ZvcihuPVtdLHI9MDtyPGU7cisrKXtpZigiIj09KG89c1tyXSkpcmV0dXJuIHQ7aWYoaT0xMCxvLmxlbmd0aD4xJiYiMCI9PW8uY2hhckF0KDApJiYoaT1fLnRlc3Qobyk/MTY6OCxvPW8uc2xpY2UoOD09aT8xOjIpKSwiIj09PW8pYT0wO2Vsc2V7aWYoISgxMD09aT9SOjg9PWk/TDpQKS50ZXN0KG8pKXJldHVybiB0O2E9cGFyc2VJbnQobyxpKX1uLnB1c2goYSl9Zm9yKHI9MDtyPGU7cisrKWlmKGE9bltyXSxyPT1lLTEpe2lmKGE+PWsoMjU2LDUtZSkpcmV0dXJuIG51bGx9ZWxzZSBpZihhPjI1NSlyZXR1cm4gbnVsbDtmb3IoYz1uLnBvcCgpLHI9MDtyPG4ubGVuZ3RoO3IrKyljKz1uW3JdKmsoMjU2LDMtcik7cmV0dXJuIGN9LFY9ZnVuY3Rpb24odCl7dmFyIGUsbixyLG8saSxhLGMscz1bMCwwLDAsMCwwLDAsMCwwXSx1PTAsbD1udWxsLGY9MCxkPWZ1bmN0aW9uKCl7cmV0dXJuIHQuY2hhckF0KGYpfTtpZigiOiI9PWQoKSl7aWYoIjoiIT10LmNoYXJBdCgxKSlyZXR1cm47Zis9MixsPSsrdX1mb3IoO2QoKTspe2lmKDg9PXUpcmV0dXJuO2lmKCI6IiE9ZCgpKXtmb3IoZT1uPTA7bjw0JiZQLnRlc3QoZCgpKTspZT0xNiplK3BhcnNlSW50KGQoKSwxNiksZisrLG4rKztpZigiLiI9PWQoKSl7aWYoMD09bilyZXR1cm47aWYoZi09bix1PjYpcmV0dXJuO2ZvcihyPTA7ZCgpOyl7aWYobz1udWxsLHI+MCl7aWYoISgiLiI9PWQoKSYmcjw0KSlyZXR1cm47ZisrfWlmKCFULnRlc3QoZCgpKSlyZXR1cm47Zm9yKDtULnRlc3QoZCgpKTspe2lmKGk9cGFyc2VJbnQoZCgpLDEwKSxudWxsPT09bylvPWk7ZWxzZXtpZigwPT1vKXJldHVybjtvPTEwKm8raX1pZihvPjI1NSlyZXR1cm47ZisrfXNbdV09MjU2KnNbdV0rbywyIT0rK3ImJjQhPXJ8fHUrK31pZig0IT1yKXJldHVybjticmVha31pZigiOiI9PWQoKSl7aWYoZisrLCFkKCkpcmV0dXJufWVsc2UgaWYoZCgpKXJldHVybjtzW3UrK109ZX1lbHNle2lmKG51bGwhPT1sKXJldHVybjtmKyssbD0rK3V9fWlmKG51bGwhPT1sKWZvcihhPXUtbCx1PTc7MCE9dSYmYT4wOyljPXNbdV0sc1t1LS1dPXNbbCthLTFdLHNbbCstLWFdPWM7ZWxzZSBpZig4IT11KXJldHVybjtyZXR1cm4gc30sSD1mdW5jdGlvbih0KXt2YXIgZSxuLHIsbztpZigibnVtYmVyIj09dHlwZW9mIHQpe2ZvcihlPVtdLG49MDtuPDQ7bisrKWUudW5zaGlmdCh0JTI1NiksdD1DKHQvMjU2KTtyZXR1cm4gZS5qb2luKCIuIil9aWYoIm9iamVjdCI9PXR5cGVvZiB0KXtmb3IoZT0iIixyPWZ1bmN0aW9uKHQpe2Zvcih2YXIgZT1udWxsLG49MSxyPW51bGwsbz0wLGk9MDtpPDg7aSsrKTAhPT10W2ldPyhvPm4mJihlPXIsbj1vKSxyPW51bGwsbz0wKToobnVsbD09PXImJihyPWkpLCsrbyk7cmV0dXJuIG8+biYmKGU9cixuPW8pLGV9KHQpLG49MDtuPDg7bisrKW8mJjA9PT10W25dfHwobyYmKG89ITEpLHI9PT1uPyhlKz1uPyI6IjoiOjoiLG89ITApOihlKz10W25dLnRvU3RyaW5nKDE2KSxuPDcmJihlKz0iOiIpKSk7cmV0dXJuIlsiK2UrIl0ifXJldHVybiB0fSxxPXt9LFc9ZCh7fSxxLHsiICI6MSwnIic6MSwiPCI6MSwiPiI6MSwiYCI6MX0pLEc9ZCh7fSxXLHsiIyI6MSwiPyI6MSwieyI6MSwifSI6MX0pLFo9ZCh7fSxHLHsiLyI6MSwiOiI6MSwiOyI6MSwiPSI6MSwiQCI6MSwiWyI6MSwiXFwiOjEsIl0iOjEsIl4iOjEsInwiOjF9KSwkPWZ1bmN0aW9uKHQsZSl7dmFyIG49aCh0LDApO3JldHVybiBuPjMyJiZuPDEyNyYmIWYoZSx0KT90OmVuY29kZVVSSUNvbXBvbmVudCh0KX0sWT17ZnRwOjIxLGZpbGU6bnVsbCxodHRwOjgwLGh0dHBzOjQ0Myx3czo4MCx3c3M6NDQzfSxKPWZ1bmN0aW9uKHQpe3JldHVybiBmKFksdC5zY2hlbWUpfSxLPWZ1bmN0aW9uKHQpe3JldHVybiIiIT10LnVzZXJuYW1lfHwiIiE9dC5wYXNzd29yZH0sWD1mdW5jdGlvbih0KXtyZXR1cm4hdC5ob3N0fHx0LmNhbm5vdEJlQUJhc2VVUkx8fCJmaWxlIj09dC5zY2hlbWV9LFE9ZnVuY3Rpb24odCxlKXt2YXIgbjtyZXR1cm4gMj09dC5sZW5ndGgmJkkudGVzdCh0LmNoYXJBdCgwKSkmJigiOiI9PShuPXQuY2hhckF0KDEpKXx8IWUmJiJ8Ij09bil9LHR0PWZ1bmN0aW9uKHQpe3ZhciBlO3JldHVybiB0Lmxlbmd0aD4xJiZRKHQuc2xpY2UoMCwyKSkmJigyPT10Lmxlbmd0aHx8Ii8iPT09KGU9dC5jaGFyQXQoMikpfHwiXFwiPT09ZXx8Ij8iPT09ZXx8IiMiPT09ZSl9LGV0PWZ1bmN0aW9uKHQpe3ZhciBlPXQucGF0aCxuPWUubGVuZ3RoOyFufHwiZmlsZSI9PXQuc2NoZW1lJiYxPT1uJiZRKGVbMF0sITApfHxlLnBvcCgpfSxudD1mdW5jdGlvbih0KXtyZXR1cm4iLiI9PT10fHwiJTJlIj09PXQudG9Mb3dlckNhc2UoKX0scnQ9e30sb3Q9e30saXQ9e30sYXQ9e30sY3Q9e30sc3Q9e30sdXQ9e30sbHQ9e30sZnQ9e30sZHQ9e30scHQ9e30saHQ9e30sdnQ9e30sZ3Q9e30seXQ9e30sbXQ9e30sYnQ9e30seHQ9e30sd3Q9e30sRXQ9e30sanQ9e30sQ3Q9ZnVuY3Rpb24odCxlLG4sbyl7dmFyIGksYSxjLHMsdSxsPW58fHJ0LGQ9MCxoPSIiLHY9ITEsZz0hMSx5PSExO2ZvcihufHwodC5zY2hlbWU9IiIsdC51c2VybmFtZT0iIix0LnBhc3N3b3JkPSIiLHQuaG9zdD1udWxsLHQucG9ydD1udWxsLHQucGF0aD1bXSx0LnF1ZXJ5PW51bGwsdC5mcmFnbWVudD1udWxsLHQuY2Fubm90QmVBQmFzZVVSTD0hMSxlPWUucmVwbGFjZShGLCIiKSksZT1lLnJlcGxhY2UoVSwiIiksaT1wKGUpO2Q8PWkubGVuZ3RoOyl7c3dpdGNoKGE9aVtkXSxsKXtjYXNlIHJ0OmlmKCFhfHwhSS50ZXN0KGEpKXtpZihuKXJldHVybiBTO2w9aXQ7Y29udGludWV9aCs9YS50b0xvd2VyQ2FzZSgpLGw9b3Q7YnJlYWs7Y2FzZSBvdDppZihhJiYoTS50ZXN0KGEpfHwiKyI9PWF8fCItIj09YXx8Ii4iPT1hKSloKz1hLnRvTG93ZXJDYXNlKCk7ZWxzZXtpZigiOiIhPWEpe2lmKG4pcmV0dXJuIFM7aD0iIixsPWl0LGQ9MDtjb250aW51ZX1pZihuJiYoSih0KSE9ZihZLGgpfHwiZmlsZSI9PWgmJihLKHQpfHxudWxsIT09dC5wb3J0KXx8ImZpbGUiPT10LnNjaGVtZSYmIXQuaG9zdCkpcmV0dXJuO2lmKHQuc2NoZW1lPWgsbilyZXR1cm4gdm9pZChKKHQpJiZZW3Quc2NoZW1lXT09dC5wb3J0JiYodC5wb3J0PW51bGwpKTtoPSIiLCJmaWxlIj09dC5zY2hlbWU/bD1ndDpKKHQpJiZvJiZvLnNjaGVtZT09dC5zY2hlbWU/bD1hdDpKKHQpP2w9bHQ6Ii8iPT1pW2QrMV0/KGw9Y3QsZCsrKToodC5jYW5ub3RCZUFCYXNlVVJMPSEwLHQucGF0aC5wdXNoKCIiKSxsPXd0KX1icmVhaztjYXNlIGl0OmlmKCFvfHxvLmNhbm5vdEJlQUJhc2VVUkwmJiIjIiE9YSlyZXR1cm4gUztpZihvLmNhbm5vdEJlQUJhc2VVUkwmJiIjIj09YSl7dC5zY2hlbWU9by5zY2hlbWUsdC5wYXRoPW8ucGF0aC5zbGljZSgpLHQucXVlcnk9by5xdWVyeSx0LmZyYWdtZW50PSIiLHQuY2Fubm90QmVBQmFzZVVSTD0hMCxsPWp0O2JyZWFrfWw9ImZpbGUiPT1vLnNjaGVtZT9ndDpzdDtjb250aW51ZTtjYXNlIGF0OmlmKCIvIiE9YXx8Ii8iIT1pW2QrMV0pe2w9c3Q7Y29udGludWV9bD1mdCxkKys7YnJlYWs7Y2FzZSBjdDppZigiLyI9PWEpe2w9ZHQ7YnJlYWt9bD14dDtjb250aW51ZTtjYXNlIHN0OmlmKHQuc2NoZW1lPW8uc2NoZW1lLGE9PXIpdC51c2VybmFtZT1vLnVzZXJuYW1lLHQucGFzc3dvcmQ9by5wYXNzd29yZCx0Lmhvc3Q9by5ob3N0LHQucG9ydD1vLnBvcnQsdC5wYXRoPW8ucGF0aC5zbGljZSgpLHQucXVlcnk9by5xdWVyeTtlbHNlIGlmKCIvIj09YXx8IlxcIj09YSYmSih0KSlsPXV0O2Vsc2UgaWYoIj8iPT1hKXQudXNlcm5hbWU9by51c2VybmFtZSx0LnBhc3N3b3JkPW8ucGFzc3dvcmQsdC5ob3N0PW8uaG9zdCx0LnBvcnQ9by5wb3J0LHQucGF0aD1vLnBhdGguc2xpY2UoKSx0LnF1ZXJ5PSIiLGw9RXQ7ZWxzZXtpZigiIyIhPWEpe3QudXNlcm5hbWU9by51c2VybmFtZSx0LnBhc3N3b3JkPW8ucGFzc3dvcmQsdC5ob3N0PW8uaG9zdCx0LnBvcnQ9by5wb3J0LHQucGF0aD1vLnBhdGguc2xpY2UoKSx0LnBhdGgucG9wKCksbD14dDtjb250aW51ZX10LnVzZXJuYW1lPW8udXNlcm5hbWUsdC5wYXNzd29yZD1vLnBhc3N3b3JkLHQuaG9zdD1vLmhvc3QsdC5wb3J0PW8ucG9ydCx0LnBhdGg9by5wYXRoLnNsaWNlKCksdC5xdWVyeT1vLnF1ZXJ5LHQuZnJhZ21lbnQ9IiIsbD1qdH1icmVhaztjYXNlIHV0OmlmKCFKKHQpfHwiLyIhPWEmJiJcXCIhPWEpe2lmKCIvIiE9YSl7dC51c2VybmFtZT1vLnVzZXJuYW1lLHQucGFzc3dvcmQ9by5wYXNzd29yZCx0Lmhvc3Q9by5ob3N0LHQucG9ydD1vLnBvcnQsbD14dDtjb250aW51ZX1sPWR0fWVsc2UgbD1mdDticmVhaztjYXNlIGx0OmlmKGw9ZnQsIi8iIT1hfHwiLyIhPWguY2hhckF0KGQrMSkpY29udGludWU7ZCsrO2JyZWFrO2Nhc2UgZnQ6aWYoIi8iIT1hJiYiXFwiIT1hKXtsPWR0O2NvbnRpbnVlfWJyZWFrO2Nhc2UgZHQ6aWYoIkAiPT1hKXt2JiYoaD0iJTQwIitoKSx2PSEwLGM9cChoKTtmb3IodmFyIG09MDttPGMubGVuZ3RoO20rKyl7dmFyIGI9Y1ttXTtpZigiOiIhPWJ8fHkpe3ZhciB4PSQoYixaKTt5P3QucGFzc3dvcmQrPXg6dC51c2VybmFtZSs9eH1lbHNlIHk9ITB9aD0iIn1lbHNlIGlmKGE9PXJ8fCIvIj09YXx8Ij8iPT1hfHwiIyI9PWF8fCJcXCI9PWEmJkoodCkpe2lmKHYmJiIiPT1oKXJldHVybiJJbnZhbGlkIGF1dGhvcml0eSI7ZC09cChoKS5sZW5ndGgrMSxoPSIiLGw9cHR9ZWxzZSBoKz1hO2JyZWFrO2Nhc2UgcHQ6Y2FzZSBodDppZihuJiYiZmlsZSI9PXQuc2NoZW1lKXtsPW10O2NvbnRpbnVlfWlmKCI6IiE9YXx8Zyl7aWYoYT09cnx8Ii8iPT1hfHwiPyI9PWF8fCIjIj09YXx8IlxcIj09YSYmSih0KSl7aWYoSih0KSYmIiI9PWgpcmV0dXJuIE87aWYobiYmIiI9PWgmJihLKHQpfHxudWxsIT09dC5wb3J0KSlyZXR1cm47aWYocz1CKHQsaCkpcmV0dXJuIHM7aWYoaD0iIixsPWJ0LG4pcmV0dXJuO2NvbnRpbnVlfSJbIj09YT9nPSEwOiJdIj09YSYmKGc9ITEpLGgrPWF9ZWxzZXtpZigiIj09aClyZXR1cm4gTztpZihzPUIodCxoKSlyZXR1cm4gcztpZihoPSIiLGw9dnQsbj09aHQpcmV0dXJufWJyZWFrO2Nhc2UgdnQ6aWYoIVQudGVzdChhKSl7aWYoYT09cnx8Ii8iPT1hfHwiPyI9PWF8fCIjIj09YXx8IlxcIj09YSYmSih0KXx8bil7aWYoIiIhPWgpe3ZhciB3PXBhcnNlSW50KGgsMTApO2lmKHc+NjU1MzUpcmV0dXJuIEE7dC5wb3J0PUoodCkmJnc9PT1ZW3Quc2NoZW1lXT9udWxsOncsaD0iIn1pZihuKXJldHVybjtsPWJ0O2NvbnRpbnVlfXJldHVybiBBfWgrPWE7YnJlYWs7Y2FzZSBndDppZih0LnNjaGVtZT0iZmlsZSIsIi8iPT1hfHwiXFwiPT1hKWw9eXQ7ZWxzZXtpZighb3x8ImZpbGUiIT1vLnNjaGVtZSl7bD14dDtjb250aW51ZX1pZihhPT1yKXQuaG9zdD1vLmhvc3QsdC5wYXRoPW8ucGF0aC5zbGljZSgpLHQucXVlcnk9by5xdWVyeTtlbHNlIGlmKCI/Ij09YSl0Lmhvc3Q9by5ob3N0LHQucGF0aD1vLnBhdGguc2xpY2UoKSx0LnF1ZXJ5PSIiLGw9RXQ7ZWxzZXtpZigiIyIhPWEpe3R0KGkuc2xpY2UoZCkuam9pbigiIikpfHwodC5ob3N0PW8uaG9zdCx0LnBhdGg9by5wYXRoLnNsaWNlKCksZXQodCkpLGw9eHQ7Y29udGludWV9dC5ob3N0PW8uaG9zdCx0LnBhdGg9by5wYXRoLnNsaWNlKCksdC5xdWVyeT1vLnF1ZXJ5LHQuZnJhZ21lbnQ9IiIsbD1qdH19YnJlYWs7Y2FzZSB5dDppZigiLyI9PWF8fCJcXCI9PWEpe2w9bXQ7YnJlYWt9byYmImZpbGUiPT1vLnNjaGVtZSYmIXR0KGkuc2xpY2UoZCkuam9pbigiIikpJiYoUShvLnBhdGhbMF0sITApP3QucGF0aC5wdXNoKG8ucGF0aFswXSk6dC5ob3N0PW8uaG9zdCksbD14dDtjb250aW51ZTtjYXNlIG10OmlmKGE9PXJ8fCIvIj09YXx8IlxcIj09YXx8Ij8iPT1hfHwiIyI9PWEpe2lmKCFuJiZRKGgpKWw9eHQ7ZWxzZSBpZigiIj09aCl7aWYodC5ob3N0PSIiLG4pcmV0dXJuO2w9YnR9ZWxzZXtpZihzPUIodCxoKSlyZXR1cm4gcztpZigibG9jYWxob3N0Ij09dC5ob3N0JiYodC5ob3N0PSIiKSxuKXJldHVybjtoPSIiLGw9YnR9Y29udGludWV9aCs9YTticmVhaztjYXNlIGJ0OmlmKEoodCkpe2lmKGw9eHQsIi8iIT1hJiYiXFwiIT1hKWNvbnRpbnVlfWVsc2UgaWYobnx8Ij8iIT1hKWlmKG58fCIjIiE9YSl7aWYoYSE9ciYmKGw9eHQsIi8iIT1hKSljb250aW51ZX1lbHNlIHQuZnJhZ21lbnQ9IiIsbD1qdDtlbHNlIHQucXVlcnk9IiIsbD1FdDticmVhaztjYXNlIHh0OmlmKGE9PXJ8fCIvIj09YXx8IlxcIj09YSYmSih0KXx8IW4mJigiPyI9PWF8fCIjIj09YSkpe2lmKCIuLiI9PT0odT0odT1oKS50b0xvd2VyQ2FzZSgpKXx8IiUyZS4iPT09dXx8Ii4lMmUiPT09dXx8IiUyZSUyZSI9PT11PyhldCh0KSwiLyI9PWF8fCJcXCI9PWEmJkoodCl8fHQucGF0aC5wdXNoKCIiKSk6bnQoaCk/Ii8iPT1hfHwiXFwiPT1hJiZKKHQpfHx0LnBhdGgucHVzaCgiIik6KCJmaWxlIj09dC5zY2hlbWUmJiF0LnBhdGgubGVuZ3RoJiZRKGgpJiYodC5ob3N0JiYodC5ob3N0PSIiKSxoPWguY2hhckF0KDApKyI6IiksdC5wYXRoLnB1c2goaCkpLGg9IiIsImZpbGUiPT10LnNjaGVtZSYmKGE9PXJ8fCI/Ij09YXx8IiMiPT1hKSlmb3IoO3QucGF0aC5sZW5ndGg+MSYmIiI9PT10LnBhdGhbMF07KXQucGF0aC5zaGlmdCgpOyI/Ij09YT8odC5xdWVyeT0iIixsPUV0KToiIyI9PWEmJih0LmZyYWdtZW50PSIiLGw9anQpfWVsc2UgaCs9JChhLEcpO2JyZWFrO2Nhc2Ugd3Q6Ij8iPT1hPyh0LnF1ZXJ5PSIiLGw9RXQpOiIjIj09YT8odC5mcmFnbWVudD0iIixsPWp0KTphIT1yJiYodC5wYXRoWzBdKz0kKGEscSkpO2JyZWFrO2Nhc2UgRXQ6bnx8IiMiIT1hP2EhPXImJigiJyI9PWEmJkoodCk/dC5xdWVyeSs9IiUyNyI6dC5xdWVyeSs9IiMiPT1hPyIlMjMiOiQoYSxxKSk6KHQuZnJhZ21lbnQ9IiIsbD1qdCk7YnJlYWs7Y2FzZSBqdDphIT1yJiYodC5mcmFnbWVudCs9JChhLFcpKX1kKyt9fSxrdD1mdW5jdGlvbih0KXt2YXIgZSxuLHI9bCh0aGlzLGt0LCJVUkwiKSxvPWFyZ3VtZW50cy5sZW5ndGg+MT9hcmd1bWVudHNbMV06dm9pZCAwLGE9U3RyaW5nKHQpLGM9RShyLHt0eXBlOiJVUkwifSk7aWYodm9pZCAwIT09bylpZihvIGluc3RhbmNlb2Yga3QpZT1qKG8pO2Vsc2UgaWYobj1DdChlPXt9LFN0cmluZyhvKSkpdGhyb3cgVHlwZUVycm9yKG4pO2lmKG49Q3QoYyxhLG51bGwsZSkpdGhyb3cgVHlwZUVycm9yKG4pO3ZhciBzPWMuc2VhcmNoUGFyYW1zPW5ldyB4LHU9dyhzKTt1LnVwZGF0ZVNlYXJjaFBhcmFtcyhjLnF1ZXJ5KSx1LnVwZGF0ZVVSTD1mdW5jdGlvbigpe2MucXVlcnk9U3RyaW5nKHMpfHxudWxsfSxpfHwoci5ocmVmPU90LmNhbGwociksci5vcmlnaW49QXQuY2FsbChyKSxyLnByb3RvY29sPUl0LmNhbGwociksci51c2VybmFtZT1NdC5jYWxsKHIpLHIucGFzc3dvcmQ9VHQuY2FsbChyKSxyLmhvc3Q9X3QuY2FsbChyKSxyLmhvc3RuYW1lPUx0LmNhbGwociksci5wb3J0PVJ0LmNhbGwociksci5wYXRobmFtZT1QdC5jYWxsKHIpLHIuc2VhcmNoPU50LmNhbGwociksci5zZWFyY2hQYXJhbXM9RHQuY2FsbChyKSxyLmhhc2g9RnQuY2FsbChyKSl9LFN0PWt0LnByb3RvdHlwZSxPdD1mdW5jdGlvbigpe3ZhciB0PWoodGhpcyksZT10LnNjaGVtZSxuPXQudXNlcm5hbWUscj10LnBhc3N3b3JkLG89dC5ob3N0LGk9dC5wb3J0LGE9dC5wYXRoLGM9dC5xdWVyeSxzPXQuZnJhZ21lbnQsdT1lKyI6IjtyZXR1cm4gbnVsbCE9PW8/KHUrPSIvLyIsSyh0KSYmKHUrPW4rKHI/IjoiK3I6IiIpKyJAIiksdSs9SChvKSxudWxsIT09aSYmKHUrPSI6IitpKSk6ImZpbGUiPT1lJiYodSs9Ii8vIiksdSs9dC5jYW5ub3RCZUFCYXNlVVJMP2FbMF06YS5sZW5ndGg/Ii8iK2Euam9pbigiLyIpOiIiLG51bGwhPT1jJiYodSs9Ij8iK2MpLG51bGwhPT1zJiYodSs9IiMiK3MpLHV9LEF0PWZ1bmN0aW9uKCl7dmFyIHQ9aih0aGlzKSxlPXQuc2NoZW1lLG49dC5wb3J0O2lmKCJibG9iIj09ZSl0cnl7cmV0dXJuIG5ldyBVUkwoZS5wYXRoWzBdKS5vcmlnaW59Y2F0Y2godCl7cmV0dXJuIm51bGwifXJldHVybiJmaWxlIiE9ZSYmSih0KT9lKyI6Ly8iK0godC5ob3N0KSsobnVsbCE9PW4/IjoiK246IiIpOiJudWxsIn0sSXQ9ZnVuY3Rpb24oKXtyZXR1cm4gaih0aGlzKS5zY2hlbWUrIjoifSxNdD1mdW5jdGlvbigpe3JldHVybiBqKHRoaXMpLnVzZXJuYW1lfSxUdD1mdW5jdGlvbigpe3JldHVybiBqKHRoaXMpLnBhc3N3b3JkfSxfdD1mdW5jdGlvbigpe3ZhciB0PWoodGhpcyksZT10Lmhvc3Qsbj10LnBvcnQ7cmV0dXJuIG51bGw9PT1lPyIiOm51bGw9PT1uP0goZSk6SChlKSsiOiIrbn0sTHQ9ZnVuY3Rpb24oKXt2YXIgdD1qKHRoaXMpLmhvc3Q7cmV0dXJuIG51bGw9PT10PyIiOkgodCl9LFJ0PWZ1bmN0aW9uKCl7dmFyIHQ9aih0aGlzKS5wb3J0O3JldHVybiBudWxsPT09dD8iIjpTdHJpbmcodCl9LFB0PWZ1bmN0aW9uKCl7dmFyIHQ9aih0aGlzKSxlPXQucGF0aDtyZXR1cm4gdC5jYW5ub3RCZUFCYXNlVVJMP2VbMF06ZS5sZW5ndGg/Ii8iK2Uuam9pbigiLyIpOiIifSxOdD1mdW5jdGlvbigpe3ZhciB0PWoodGhpcykucXVlcnk7cmV0dXJuIHQ/Ij8iK3Q6IiJ9LER0PWZ1bmN0aW9uKCl7cmV0dXJuIGoodGhpcykuc2VhcmNoUGFyYW1zfSxGdD1mdW5jdGlvbigpe3ZhciB0PWoodGhpcykuZnJhZ21lbnQ7cmV0dXJuIHQ/IiMiK3Q6IiJ9LFV0PWZ1bmN0aW9uKHQsZSl7cmV0dXJue2dldDp0LHNldDplLGNvbmZpZ3VyYWJsZTohMCxlbnVtZXJhYmxlOiEwfX07aWYoaSYmcyhTdCx7aHJlZjpVdChPdCwoZnVuY3Rpb24odCl7dmFyIGU9aih0aGlzKSxuPVN0cmluZyh0KSxyPUN0KGUsbik7aWYocil0aHJvdyBUeXBlRXJyb3Iocik7dyhlLnNlYXJjaFBhcmFtcykudXBkYXRlU2VhcmNoUGFyYW1zKGUucXVlcnkpfSkpLG9yaWdpbjpVdChBdCkscHJvdG9jb2w6VXQoSXQsKGZ1bmN0aW9uKHQpe3ZhciBlPWoodGhpcyk7Q3QoZSxTdHJpbmcodCkrIjoiLHJ0KX0pKSx1c2VybmFtZTpVdChNdCwoZnVuY3Rpb24odCl7dmFyIGU9aih0aGlzKSxuPXAoU3RyaW5nKHQpKTtpZighWChlKSl7ZS51c2VybmFtZT0iIjtmb3IodmFyIHI9MDtyPG4ubGVuZ3RoO3IrKyllLnVzZXJuYW1lKz0kKG5bcl0sWil9fSkpLHBhc3N3b3JkOlV0KFR0LChmdW5jdGlvbih0KXt2YXIgZT1qKHRoaXMpLG49cChTdHJpbmcodCkpO2lmKCFYKGUpKXtlLnBhc3N3b3JkPSIiO2Zvcih2YXIgcj0wO3I8bi5sZW5ndGg7cisrKWUucGFzc3dvcmQrPSQobltyXSxaKX19KSksaG9zdDpVdChfdCwoZnVuY3Rpb24odCl7dmFyIGU9aih0aGlzKTtlLmNhbm5vdEJlQUJhc2VVUkx8fEN0KGUsU3RyaW5nKHQpLHB0KX0pKSxob3N0bmFtZTpVdChMdCwoZnVuY3Rpb24odCl7dmFyIGU9aih0aGlzKTtlLmNhbm5vdEJlQUJhc2VVUkx8fEN0KGUsU3RyaW5nKHQpLGh0KX0pKSxwb3J0OlV0KFJ0LChmdW5jdGlvbih0KXt2YXIgZT1qKHRoaXMpO1goZSl8fCgiIj09KHQ9U3RyaW5nKHQpKT9lLnBvcnQ9bnVsbDpDdChlLHQsdnQpKX0pKSxwYXRobmFtZTpVdChQdCwoZnVuY3Rpb24odCl7dmFyIGU9aih0aGlzKTtlLmNhbm5vdEJlQUJhc2VVUkx8fChlLnBhdGg9W10sQ3QoZSx0KyIiLGJ0KSl9KSksc2VhcmNoOlV0KE50LChmdW5jdGlvbih0KXt2YXIgZT1qKHRoaXMpOyIiPT0odD1TdHJpbmcodCkpP2UucXVlcnk9bnVsbDooIj8iPT10LmNoYXJBdCgwKSYmKHQ9dC5zbGljZSgxKSksZS5xdWVyeT0iIixDdChlLHQsRXQpKSx3KGUuc2VhcmNoUGFyYW1zKS51cGRhdGVTZWFyY2hQYXJhbXMoZS5xdWVyeSl9KSksc2VhcmNoUGFyYW1zOlV0KER0KSxoYXNoOlV0KEZ0LChmdW5jdGlvbih0KXt2YXIgZT1qKHRoaXMpOyIiIT0odD1TdHJpbmcodCkpPygiIyI9PXQuY2hhckF0KDApJiYodD10LnNsaWNlKDEpKSxlLmZyYWdtZW50PSIiLEN0KGUsdCxqdCkpOmUuZnJhZ21lbnQ9bnVsbH0pKX0pLHUoU3QsInRvSlNPTiIsKGZ1bmN0aW9uKCl7cmV0dXJuIE90LmNhbGwodGhpcyl9KSx7ZW51bWVyYWJsZTohMH0pLHUoU3QsInRvU3RyaW5nIiwoZnVuY3Rpb24oKXtyZXR1cm4gT3QuY2FsbCh0aGlzKX0pLHtlbnVtZXJhYmxlOiEwfSksYil7dmFyIEJ0PWIuY3JlYXRlT2JqZWN0VVJMLHp0PWIucmV2b2tlT2JqZWN0VVJMO0J0JiZ1KGt0LCJjcmVhdGVPYmplY3RVUkwiLChmdW5jdGlvbih0KXtyZXR1cm4gQnQuYXBwbHkoYixhcmd1bWVudHMpfSkpLHp0JiZ1KGt0LCJyZXZva2VPYmplY3RVUkwiLChmdW5jdGlvbih0KXtyZXR1cm4genQuYXBwbHkoYixhcmd1bWVudHMpfSkpfWcoa3QsIlVSTCIpLG8oe2dsb2JhbDohMCxmb3JjZWQ6IWEsc2hhbTohaX0se1VSTDprdH0pfSw5ODQ6ZnVuY3Rpb24odCxlLG4peyJ1c2Ugc3RyaWN0IjtuKDE0MDQ0KSh7dGFyZ2V0OiJVUkwiLHByb3RvOiEwLGVudW1lcmFibGU6ITB9LHt0b0pTT046ZnVuY3Rpb24oKXtyZXR1cm4gVVJMLnByb3RvdHlwZS50b1N0cmluZy5jYWxsKHRoaXMpfX0pfSwzNjQ2NzpmdW5jdGlvbih0LGUsbil7bigxNDA4Nil9LDY2NTU0OmZ1bmN0aW9uKHQsZSxuKXtuKDQ5MzApLG4oNjM2NCl9LDkzMjcwOmZ1bmN0aW9uKHQsZSxuKXtuKDUzNTEzKSxuKDk5MjU1KSxuKDQ4NDQpLG4oMzU1NCksbigxODg0NCksbigzNTY1Niksbig0OTA1MCksbig5Mzg0Myksbig2NjIyNCksbig3MTcwMCksbig2OTUyOSksbigyNzczNCksbig3NzM2OSksbig2OTg0Miksbig5NzkyOCksbig5MzkpLG4oNjE0NjcpLG4oMTYxMjcpLG4oNTM1ODkpLG4oODEwNDIpLG4oMTY3NTcpLG4oMTEwNzQpLG4oMzM1MzkpLG4oMjQxMDMpLG4oNjQ4MTMpLG4oNjg5OTkpLG4oNTM4MjQpfSw4OTc0MDpmdW5jdGlvbih0LGUsbil7bigzODc5MiksbigxOTkwKSxuKDk3Mjg0KSxuKDI0NTk4KSxuKDk5OTc5KSxuKDE4MjA1KSxuKDg1OCksbig2NDg5OSl9LDY4MDAxOmZ1bmN0aW9uKHQsZSxuKXtuKDMwNjEzKSxuKDY4NDA2KSxuKDQ5NzkpLG4oNDQ2NDYpfSwyODY5OTpmdW5jdGlvbih0LGUsbil7big5OTYyOCk7dmFyIHI9big4OTU1OCk7dC5leHBvcnRzPXJ9LDE1NjI0OmZ1bmN0aW9uKHQsZSxuKXtuKDU3MzYwKX0sODEyMTM6ZnVuY3Rpb24odCxlLG4pe24oNjEyOTgpLG4oNDcwMDQpLG4oNjc0NjIpLG4oOTA2NyksbigyMDEyNCksbigyMTM3MSksbigzODk4NCksbig2OTIzNyksbigyNjQ5Nyksbig1MzE2OCksbig3Mzk0OSksbig4ODIxMSksbig3Mzc2MSksbig0MjE5Niksbig0MzMzMiksbig5MjYwMSksbigyMDQ3NCksbig1NDU1Niksbig0MDYzOCksbig5NjY1OSksbigxNDY4OCksbig3Mzc4KSxuKDI3NDI4KSxuKDMzNDM2KSxuKDg0Mzg4KSxuKDU5NjIzKSxuKDMyODUzKSxuKDY3MDcyKX0sNjI2Nzc6ZnVuY3Rpb24odCxlLG4pe24oMzY1NzEpLG4oNDMwODYpfSwzNzYxMzpmdW5jdGlvbih0LGUsbil7big0MzI5MCksbigxNDY4Miksbig4NzU1NSl9LDE0NzE1OmZ1bmN0aW9uKHQsZSxuKXtuKDcwMjI1KSxuKDIzOTkpLG4oMTY4MDkpLG4oNjcxNDEpLG4oOTA3NjkpLG4oNTc4OTEpLG4oMTU3MjIpfSwzNjY4NjpmdW5jdGlvbih0LGUsbil7big3NzkwNyl9LDY3NzkzOmZ1bmN0aW9uKHQsZSxuKXtuKDc1NjQ3KX0sOTQ3NzpmdW5jdGlvbih0LGUsbil7big4NDMwOSksbig3Mjk2Myksbig1NjM1OSl9LDcyMzU0OmZ1bmN0aW9uKHQsZSxuKXtuKDIwMjM0KSxuKDUxMzc0KX0sNzQ2Nzk6ZnVuY3Rpb24odCxlLG4pe24oNTM3NzIpfSw5NDc5OmZ1bmN0aW9uKHQsZSxuKXtuKDI3NzUpfSw4NTY1OTpmdW5jdGlvbih0LGUsbil7big5Njc1MSksbig3MzIyMCl9LDU0OTg2OmZ1bmN0aW9uKHQsZSxuKXtuKDExMDcxKX0sMTg4MTpmdW5jdGlvbih0LGUsbil7big0OTY0MCksbig3NDk2Myksbig2OTQ1OSksbig0OTE1NSksbigyNjg5Niksbig4NzQ3NCksbig5NzQzMyksbig3MTA4KSxuKDIzNjMxKX0sNTc2MDM6ZnVuY3Rpb24odCxlLG4pe24oMTc2NSl9LDgxNTQ4OmZ1bmN0aW9uKHQsZSxuKXtuKDk4MzUwKSxuKDQxNzE4KSxuKDU3MzcxKSxuKDg5MjMwKSxuKDMyMzAzKSxuKDYyOTEpLG4oNjYxODEpfSwyMzEwMjpmdW5jdGlvbih0LGUsbil7big3MzQ2MCl9LDQ0MTUzOmZ1bmN0aW9uKHQsZSxuKXtuKDMyMDYyKX0sNzM5MjpmdW5jdGlvbih0LGUsbil7big3NDUyNSl9LDc3Nzk6ZnVuY3Rpb24odCxlLG4pe24oNjQwMjYpLG4oODYwNzcpfSw2MDgyNjpmdW5jdGlvbih0LGUsbil7bigxMzkxMCksbig5ODQpLG4oNTU1Nyl9LDU1OTMzOmZ1bmN0aW9uKHQsZSxuKXtuKDY5NDIpLG4oOTQyNDkpfSw4NzYwMjpmdW5jdGlvbih0LGUsbil7big2ODAwMSksbigyMzEwMiksbig2MDgyNik7dmFyIHI9big5NTk2OCk7dC5leHBvcnRzPXJ9LDk1OTY4OmZ1bmN0aW9uKHQsZSxuKXtuKDY2NTU0KSxuKDkzMjcwKSxuKDg5NzQwKSxuKDYyNjc3KSxuKDE0NzE1KSxuKDM2Njg2KSxuKDY3NzkzKSxuKDk0NzcpLG4oNzIzNTQpLG4oNzQ2NzkpLG4oNTQ5ODYpLG4oNTc2MDMpLG4oNDQxNTMpO3ZhciByPW4oNDc5NzIpO3QuZXhwb3J0cz1yfSw0Nzk3MjpmdW5jdGlvbih0LGUsbil7bigzNjQ2Nyksbig4MTIxMyksbigzNzYxMyksbig4MTU0OCksbig1NTkzMyk7dmFyIHI9big1OTAxMSk7dC5leHBvcnRzPXJ9LDU5MDExOmZ1bmN0aW9uKHQsZSxuKXtuKDg1NjU5KSxuKDc3NzkpO3ZhciByPW4oNjg2ODUpO3QuZXhwb3J0cz1yfSw2ODY4NTpmdW5jdGlvbih0LGUsbil7bigyODY5OSksbig5NDc5KSxuKDczOTIpO3ZhciByPW4oNTYyMzgpO3QuZXhwb3J0cz1yfSw1NzM2MDpmdW5jdGlvbih0LGUsbil7dmFyIHI9big1MzMzNSk7dC5leHBvcnRzPXJ9LDUzMzM1OmZ1bmN0aW9uKHQsZSxuKXtuKDE4ODEpO3ZhciByPW4oODc2MDIpO3QuZXhwb3J0cz1yfSw5MjQwNDpmdW5jdGlvbih0LGUsbil7big2NzAzOSksbig3OTc5OSksbig3NDAxMCksbig2NTk3Niksbig4MTk5NCksbigxMzkxMCksbig5ODQpLG4oNTU1Nyk7dmFyIHI9big1NjIzOCk7dC5leHBvcnRzPXJ9LDE4OTg2OmZ1bmN0aW9uKHQpeyJ1c2Ugc3RyaWN0Ijt0LmV4cG9ydHM9ZnVuY3Rpb24odCl7dmFyIGU9W107cmV0dXJuIGUudG9TdHJpbmc9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5tYXAoKGZ1bmN0aW9uKGUpe3ZhciBuPWZ1bmN0aW9uKHQsZSl7dmFyIG49dFsxXXx8IiIscj10WzNdO2lmKCFyKXJldHVybiBuO2lmKGUmJiJmdW5jdGlvbiI9PXR5cGVvZiBidG9hKXt2YXIgbz0oYT1yLGM9YnRvYSh1bmVzY2FwZShlbmNvZGVVUklDb21wb25lbnQoSlNPTi5zdHJpbmdpZnkoYSkpKSkscz0ic291cmNlTWFwcGluZ1VSTD1kYXRhOmFwcGxpY2F0aW9uL2pzb247Y2hhcnNldD11dGYtODtiYXNlNjQsIi5jb25jYXQoYyksIi8qIyAiLmNvbmNhdChzLCIgKi8iKSksaT1yLnNvdXJjZXMubWFwKChmdW5jdGlvbih0KXtyZXR1cm4iLyojIHNvdXJjZVVSTD0iLmNvbmNhdChyLnNvdXJjZVJvb3QpLmNvbmNhdCh0LCIgKi8iKX0pKTtyZXR1cm5bbl0uY29uY2F0KGkpLmNvbmNhdChbb10pLmpvaW4oIlxuIil9dmFyIGEsYyxzO3JldHVybltuXS5qb2luKCJcbiIpfShlLHQpO3JldHVybiBlWzJdPyJAbWVkaWEgIi5jb25jYXQoZVsyXSwiIHsiKS5jb25jYXQobiwifSIpOm59KSkuam9pbigiIil9LGUuaT1mdW5jdGlvbih0LG4peyJzdHJpbmciPT10eXBlb2YgdCYmKHQ9W1tudWxsLHQsIiJdXSk7Zm9yKHZhciByPTA7cjx0Lmxlbmd0aDtyKyspe3ZhciBvPVtdLmNvbmNhdCh0W3JdKTtuJiYob1syXT9vWzJdPSIiLmNvbmNhdChuLCIgYW5kICIpLmNvbmNhdChvWzJdKTpvWzJdPW4pLGUucHVzaChvKX19LGV9fSw0NjY3OTpmdW5jdGlvbih0KXt2YXIgZT1mdW5jdGlvbih0KXsidXNlIHN0cmljdCI7dmFyIGUsbj1PYmplY3QucHJvdG90eXBlLHI9bi5oYXNPd25Qcm9wZXJ0eSxvPSJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2w/U3ltYm9sOnt9LGk9by5pdGVyYXRvcnx8IkBAaXRlcmF0b3IiLGE9by5hc3luY0l0ZXJhdG9yfHwiQEBhc3luY0l0ZXJhdG9yIixjPW8udG9TdHJpbmdUYWd8fCJAQHRvU3RyaW5nVGFnIjtmdW5jdGlvbiBzKHQsZSxuKXtyZXR1cm4gT2JqZWN0LmRlZmluZVByb3BlcnR5KHQsZSx7dmFsdWU6bixlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMH0pLHRbZV19dHJ5e3Moe30sIiIpfWNhdGNoKHQpe3M9ZnVuY3Rpb24odCxlLG4pe3JldHVybiB0W2VdPW59fWZ1bmN0aW9uIHUodCxlLG4scil7dmFyIG89ZSYmZS5wcm90b3R5cGUgaW5zdGFuY2VvZiBnP2U6ZyxpPU9iamVjdC5jcmVhdGUoby5wcm90b3R5cGUpLGE9bmV3IEEocnx8W10pO3JldHVybiBpLl9pbnZva2U9ZnVuY3Rpb24odCxlLG4pe3ZhciByPWY7cmV0dXJuIGZ1bmN0aW9uKG8saSl7aWYocj09PXApdGhyb3cgbmV3IEVycm9yKCJHZW5lcmF0b3IgaXMgYWxyZWFkeSBydW5uaW5nIik7aWYocj09PWgpe2lmKCJ0aHJvdyI9PT1vKXRocm93IGk7cmV0dXJuIE0oKX1mb3Iobi5tZXRob2Q9byxuLmFyZz1pOzspe3ZhciBhPW4uZGVsZWdhdGU7aWYoYSl7dmFyIGM9ayhhLG4pO2lmKGMpe2lmKGM9PT12KWNvbnRpbnVlO3JldHVybiBjfX1pZigibmV4dCI9PT1uLm1ldGhvZCluLnNlbnQ9bi5fc2VudD1uLmFyZztlbHNlIGlmKCJ0aHJvdyI9PT1uLm1ldGhvZCl7aWYocj09PWYpdGhyb3cgcj1oLG4uYXJnO24uZGlzcGF0Y2hFeGNlcHRpb24obi5hcmcpfWVsc2UicmV0dXJuIj09PW4ubWV0aG9kJiZuLmFicnVwdCgicmV0dXJuIixuLmFyZyk7cj1wO3ZhciBzPWwodCxlLG4pO2lmKCJub3JtYWwiPT09cy50eXBlKXtpZihyPW4uZG9uZT9oOmQscy5hcmc9PT12KWNvbnRpbnVlO3JldHVybnt2YWx1ZTpzLmFyZyxkb25lOm4uZG9uZX19InRocm93Ij09PXMudHlwZSYmKHI9aCxuLm1ldGhvZD0idGhyb3ciLG4uYXJnPXMuYXJnKX19fSh0LG4sYSksaX1mdW5jdGlvbiBsKHQsZSxuKXt0cnl7cmV0dXJue3R5cGU6Im5vcm1hbCIsYXJnOnQuY2FsbChlLG4pfX1jYXRjaCh0KXtyZXR1cm57dHlwZToidGhyb3ciLGFyZzp0fX19dC53cmFwPXU7dmFyIGY9InN1c3BlbmRlZFN0YXJ0IixkPSJzdXNwZW5kZWRZaWVsZCIscD0iZXhlY3V0aW5nIixoPSJjb21wbGV0ZWQiLHY9e307ZnVuY3Rpb24gZygpe31mdW5jdGlvbiB5KCl7fWZ1bmN0aW9uIG0oKXt9dmFyIGI9e307cyhiLGksKGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXN9KSk7dmFyIHg9T2JqZWN0LmdldFByb3RvdHlwZU9mLHc9eCYmeCh4KEkoW10pKSk7dyYmdyE9PW4mJnIuY2FsbCh3LGkpJiYoYj13KTt2YXIgRT1tLnByb3RvdHlwZT1nLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKGIpO2Z1bmN0aW9uIGoodCl7WyJuZXh0IiwidGhyb3ciLCJyZXR1cm4iXS5mb3JFYWNoKChmdW5jdGlvbihlKXtzKHQsZSwoZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuX2ludm9rZShlLHQpfSkpfSkpfWZ1bmN0aW9uIEModCxlKXtmdW5jdGlvbiBuKG8saSxhLGMpe3ZhciBzPWwodFtvXSx0LGkpO2lmKCJ0aHJvdyIhPT1zLnR5cGUpe3ZhciB1PXMuYXJnLGY9dS52YWx1ZTtyZXR1cm4gZiYmIm9iamVjdCI9PXR5cGVvZiBmJiZyLmNhbGwoZiwiX19hd2FpdCIpP2UucmVzb2x2ZShmLl9fYXdhaXQpLnRoZW4oKGZ1bmN0aW9uKHQpe24oIm5leHQiLHQsYSxjKX0pLChmdW5jdGlvbih0KXtuKCJ0aHJvdyIsdCxhLGMpfSkpOmUucmVzb2x2ZShmKS50aGVuKChmdW5jdGlvbih0KXt1LnZhbHVlPXQsYSh1KX0pLChmdW5jdGlvbih0KXtyZXR1cm4gbigidGhyb3ciLHQsYSxjKX0pKX1jKHMuYXJnKX12YXIgbzt0aGlzLl9pbnZva2U9ZnVuY3Rpb24odCxyKXtmdW5jdGlvbiBpKCl7cmV0dXJuIG5ldyBlKChmdW5jdGlvbihlLG8pe24odCxyLGUsbyl9KSl9cmV0dXJuIG89bz9vLnRoZW4oaSxpKTppKCl9fWZ1bmN0aW9uIGsodCxuKXt2YXIgcj10Lml0ZXJhdG9yW24ubWV0aG9kXTtpZihyPT09ZSl7aWYobi5kZWxlZ2F0ZT1udWxsLCJ0aHJvdyI9PT1uLm1ldGhvZCl7aWYodC5pdGVyYXRvci5yZXR1cm4mJihuLm1ldGhvZD0icmV0dXJuIixuLmFyZz1lLGsodCxuKSwidGhyb3ciPT09bi5tZXRob2QpKXJldHVybiB2O24ubWV0aG9kPSJ0aHJvdyIsbi5hcmc9bmV3IFR5cGVFcnJvcigiVGhlIGl0ZXJhdG9yIGRvZXMgbm90IHByb3ZpZGUgYSAndGhyb3cnIG1ldGhvZCIpfXJldHVybiB2fXZhciBvPWwocix0Lml0ZXJhdG9yLG4uYXJnKTtpZigidGhyb3ciPT09by50eXBlKXJldHVybiBuLm1ldGhvZD0idGhyb3ciLG4uYXJnPW8uYXJnLG4uZGVsZWdhdGU9bnVsbCx2O3ZhciBpPW8uYXJnO3JldHVybiBpP2kuZG9uZT8oblt0LnJlc3VsdE5hbWVdPWkudmFsdWUsbi5uZXh0PXQubmV4dExvYywicmV0dXJuIiE9PW4ubWV0aG9kJiYobi5tZXRob2Q9Im5leHQiLG4uYXJnPWUpLG4uZGVsZWdhdGU9bnVsbCx2KTppOihuLm1ldGhvZD0idGhyb3ciLG4uYXJnPW5ldyBUeXBlRXJyb3IoIml0ZXJhdG9yIHJlc3VsdCBpcyBub3QgYW4gb2JqZWN0Iiksbi5kZWxlZ2F0ZT1udWxsLHYpfWZ1bmN0aW9uIFModCl7dmFyIGU9e3RyeUxvYzp0WzBdfTsxIGluIHQmJihlLmNhdGNoTG9jPXRbMV0pLDIgaW4gdCYmKGUuZmluYWxseUxvYz10WzJdLGUuYWZ0ZXJMb2M9dFszXSksdGhpcy50cnlFbnRyaWVzLnB1c2goZSl9ZnVuY3Rpb24gTyh0KXt2YXIgZT10LmNvbXBsZXRpb258fHt9O2UudHlwZT0ibm9ybWFsIixkZWxldGUgZS5hcmcsdC5jb21wbGV0aW9uPWV9ZnVuY3Rpb24gQSh0KXt0aGlzLnRyeUVudHJpZXM9W3t0cnlMb2M6InJvb3QifV0sdC5mb3JFYWNoKFMsdGhpcyksdGhpcy5yZXNldCghMCl9ZnVuY3Rpb24gSSh0KXtpZih0KXt2YXIgbj10W2ldO2lmKG4pcmV0dXJuIG4uY2FsbCh0KTtpZigiZnVuY3Rpb24iPT10eXBlb2YgdC5uZXh0KXJldHVybiB0O2lmKCFpc05hTih0Lmxlbmd0aCkpe3ZhciBvPS0xLGE9ZnVuY3Rpb24gbigpe2Zvcig7KytvPHQubGVuZ3RoOylpZihyLmNhbGwodCxvKSlyZXR1cm4gbi52YWx1ZT10W29dLG4uZG9uZT0hMSxuO3JldHVybiBuLnZhbHVlPWUsbi5kb25lPSEwLG59O3JldHVybiBhLm5leHQ9YX19cmV0dXJue25leHQ6TX19ZnVuY3Rpb24gTSgpe3JldHVybnt2YWx1ZTplLGRvbmU6ITB9fXJldHVybiB5LnByb3RvdHlwZT1tLHMoRSwiY29uc3RydWN0b3IiLG0pLHMobSwiY29uc3RydWN0b3IiLHkpLHkuZGlzcGxheU5hbWU9cyhtLGMsIkdlbmVyYXRvckZ1bmN0aW9uIiksdC5pc0dlbmVyYXRvckZ1bmN0aW9uPWZ1bmN0aW9uKHQpe3ZhciBlPSJmdW5jdGlvbiI9PXR5cGVvZiB0JiZ0LmNvbnN0cnVjdG9yO3JldHVybiEhZSYmKGU9PT15fHwiR2VuZXJhdG9yRnVuY3Rpb24iPT09KGUuZGlzcGxheU5hbWV8fGUubmFtZSkpfSx0Lm1hcms9ZnVuY3Rpb24odCl7cmV0dXJuIE9iamVjdC5zZXRQcm90b3R5cGVPZj9PYmplY3Quc2V0UHJvdG90eXBlT2YodCxtKToodC5fX3Byb3RvX189bSxzKHQsYywiR2VuZXJhdG9yRnVuY3Rpb24iKSksdC5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZShFKSx0fSx0LmF3cmFwPWZ1bmN0aW9uKHQpe3JldHVybntfX2F3YWl0OnR9fSxqKEMucHJvdG90eXBlKSxzKEMucHJvdG90eXBlLGEsKGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXN9KSksdC5Bc3luY0l0ZXJhdG9yPUMsdC5hc3luYz1mdW5jdGlvbihlLG4scixvLGkpe3ZvaWQgMD09PWkmJihpPVByb21pc2UpO3ZhciBhPW5ldyBDKHUoZSxuLHIsbyksaSk7cmV0dXJuIHQuaXNHZW5lcmF0b3JGdW5jdGlvbihuKT9hOmEubmV4dCgpLnRoZW4oKGZ1bmN0aW9uKHQpe3JldHVybiB0LmRvbmU/dC52YWx1ZTphLm5leHQoKX0pKX0saihFKSxzKEUsYywiR2VuZXJhdG9yIikscyhFLGksKGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXN9KSkscyhFLCJ0b1N0cmluZyIsKGZ1bmN0aW9uKCl7cmV0dXJuIltvYmplY3QgR2VuZXJhdG9yXSJ9KSksdC5rZXlzPWZ1bmN0aW9uKHQpe3ZhciBlPVtdO2Zvcih2YXIgbiBpbiB0KWUucHVzaChuKTtyZXR1cm4gZS5yZXZlcnNlKCksZnVuY3Rpb24gbigpe2Zvcig7ZS5sZW5ndGg7KXt2YXIgcj1lLnBvcCgpO2lmKHIgaW4gdClyZXR1cm4gbi52YWx1ZT1yLG4uZG9uZT0hMSxufXJldHVybiBuLmRvbmU9ITAsbn19LHQudmFsdWVzPUksQS5wcm90b3R5cGU9e2NvbnN0cnVjdG9yOkEscmVzZXQ6ZnVuY3Rpb24odCl7aWYodGhpcy5wcmV2PTAsdGhpcy5uZXh0PTAsdGhpcy5zZW50PXRoaXMuX3NlbnQ9ZSx0aGlzLmRvbmU9ITEsdGhpcy5kZWxlZ2F0ZT1udWxsLHRoaXMubWV0aG9kPSJuZXh0Iix0aGlzLmFyZz1lLHRoaXMudHJ5RW50cmllcy5mb3JFYWNoKE8pLCF0KWZvcih2YXIgbiBpbiB0aGlzKSJ0Ij09PW4uY2hhckF0KDApJiZyLmNhbGwodGhpcyxuKSYmIWlzTmFOKCtuLnNsaWNlKDEpKSYmKHRoaXNbbl09ZSl9LHN0b3A6ZnVuY3Rpb24oKXt0aGlzLmRvbmU9ITA7dmFyIHQ9dGhpcy50cnlFbnRyaWVzWzBdLmNvbXBsZXRpb247aWYoInRocm93Ij09PXQudHlwZSl0aHJvdyB0LmFyZztyZXR1cm4gdGhpcy5ydmFsfSxkaXNwYXRjaEV4Y2VwdGlvbjpmdW5jdGlvbih0KXtpZih0aGlzLmRvbmUpdGhyb3cgdDt2YXIgbj10aGlzO2Z1bmN0aW9uIG8ocixvKXtyZXR1cm4gYy50eXBlPSJ0aHJvdyIsYy5hcmc9dCxuLm5leHQ9cixvJiYobi5tZXRob2Q9Im5leHQiLG4uYXJnPWUpLCEhb31mb3IodmFyIGk9dGhpcy50cnlFbnRyaWVzLmxlbmd0aC0xO2k+PTA7LS1pKXt2YXIgYT10aGlzLnRyeUVudHJpZXNbaV0sYz1hLmNvbXBsZXRpb247aWYoInJvb3QiPT09YS50cnlMb2MpcmV0dXJuIG8oImVuZCIpO2lmKGEudHJ5TG9jPD10aGlzLnByZXYpe3ZhciBzPXIuY2FsbChhLCJjYXRjaExvYyIpLHU9ci5jYWxsKGEsImZpbmFsbHlMb2MiKTtpZihzJiZ1KXtpZih0aGlzLnByZXY8YS5jYXRjaExvYylyZXR1cm4gbyhhLmNhdGNoTG9jLCEwKTtpZih0aGlzLnByZXY8YS5maW5hbGx5TG9jKXJldHVybiBvKGEuZmluYWxseUxvYyl9ZWxzZSBpZihzKXtpZih0aGlzLnByZXY8YS5jYXRjaExvYylyZXR1cm4gbyhhLmNhdGNoTG9jLCEwKX1lbHNle2lmKCF1KXRocm93IG5ldyBFcnJvcigidHJ5IHN0YXRlbWVudCB3aXRob3V0IGNhdGNoIG9yIGZpbmFsbHkiKTtpZih0aGlzLnByZXY8YS5maW5hbGx5TG9jKXJldHVybiBvKGEuZmluYWxseUxvYyl9fX19LGFicnVwdDpmdW5jdGlvbih0LGUpe2Zvcih2YXIgbj10aGlzLnRyeUVudHJpZXMubGVuZ3RoLTE7bj49MDstLW4pe3ZhciBvPXRoaXMudHJ5RW50cmllc1tuXTtpZihvLnRyeUxvYzw9dGhpcy5wcmV2JiZyLmNhbGwobywiZmluYWxseUxvYyIpJiZ0aGlzLnByZXY8by5maW5hbGx5TG9jKXt2YXIgaT1vO2JyZWFrfX1pJiYoImJyZWFrIj09PXR8fCJjb250aW51ZSI9PT10KSYmaS50cnlMb2M8PWUmJmU8PWkuZmluYWxseUxvYyYmKGk9bnVsbCk7dmFyIGE9aT9pLmNvbXBsZXRpb246e307cmV0dXJuIGEudHlwZT10LGEuYXJnPWUsaT8odGhpcy5tZXRob2Q9Im5leHQiLHRoaXMubmV4dD1pLmZpbmFsbHlMb2Msdik6dGhpcy5jb21wbGV0ZShhKX0sY29tcGxldGU6ZnVuY3Rpb24odCxlKXtpZigidGhyb3ciPT09dC50eXBlKXRocm93IHQuYXJnO3JldHVybiJicmVhayI9PT10LnR5cGV8fCJjb250aW51ZSI9PT10LnR5cGU/dGhpcy5uZXh0PXQuYXJnOiJyZXR1cm4iPT09dC50eXBlPyh0aGlzLnJ2YWw9dGhpcy5hcmc9dC5hcmcsdGhpcy5tZXRob2Q9InJldHVybiIsdGhpcy5uZXh0PSJlbmQiKToibm9ybWFsIj09PXQudHlwZSYmZSYmKHRoaXMubmV4dD1lKSx2fSxmaW5pc2g6ZnVuY3Rpb24odCl7Zm9yKHZhciBlPXRoaXMudHJ5RW50cmllcy5sZW5ndGgtMTtlPj0wOy0tZSl7dmFyIG49dGhpcy50cnlFbnRyaWVzW2VdO2lmKG4uZmluYWxseUxvYz09PXQpcmV0dXJuIHRoaXMuY29tcGxldGUobi5jb21wbGV0aW9uLG4uYWZ0ZXJMb2MpLE8obiksdn19LGNhdGNoOmZ1bmN0aW9uKHQpe2Zvcih2YXIgZT10aGlzLnRyeUVudHJpZXMubGVuZ3RoLTE7ZT49MDstLWUpe3ZhciBuPXRoaXMudHJ5RW50cmllc1tlXTtpZihuLnRyeUxvYz09PXQpe3ZhciByPW4uY29tcGxldGlvbjtpZigidGhyb3ciPT09ci50eXBlKXt2YXIgbz1yLmFyZztPKG4pfXJldHVybiBvfX10aHJvdyBuZXcgRXJyb3IoImlsbGVnYWwgY2F0Y2ggYXR0ZW1wdCIpfSxkZWxlZ2F0ZVlpZWxkOmZ1bmN0aW9uKHQsbixyKXtyZXR1cm4gdGhpcy5kZWxlZ2F0ZT17aXRlcmF0b3I6SSh0KSxyZXN1bHROYW1lOm4sbmV4dExvYzpyfSwibmV4dCI9PT10aGlzLm1ldGhvZCYmKHRoaXMuYXJnPWUpLHZ9fSx0fSh0LmV4cG9ydHMpO3RyeXtyZWdlbmVyYXRvclJ1bnRpbWU9ZX1jYXRjaCh0KXsib2JqZWN0Ij09dHlwZW9mIGdsb2JhbFRoaXM/Z2xvYmFsVGhpcy5yZWdlbmVyYXRvclJ1bnRpbWU9ZTpGdW5jdGlvbigiciIsInJlZ2VuZXJhdG9yUnVudGltZSA9IHIiKShlKX19fSxlPXt9O2Z1bmN0aW9uIG4ocil7dmFyIG89ZVtyXTtpZih2b2lkIDAhPT1vKXJldHVybiBvLmV4cG9ydHM7dmFyIGk9ZVtyXT17aWQ6cixleHBvcnRzOnt9fTtyZXR1cm4gdFtyXS5jYWxsKGkuZXhwb3J0cyxpLGkuZXhwb3J0cyxuKSxpLmV4cG9ydHN9bi5uPWZ1bmN0aW9uKHQpe3ZhciBlPXQmJnQuX19lc01vZHVsZT9mdW5jdGlvbigpe3JldHVybiB0LmRlZmF1bHR9OmZ1bmN0aW9uKCl7cmV0dXJuIHR9O3JldHVybiBuLmQoZSx7YTplfSksZX0sbi5kPWZ1bmN0aW9uKHQsZSl7Zm9yKHZhciByIGluIGUpbi5vKGUscikmJiFuLm8odCxyKSYmT2JqZWN0LmRlZmluZVByb3BlcnR5KHQscix7ZW51bWVyYWJsZTohMCxnZXQ6ZVtyXX0pfSxuLmc9ZnVuY3Rpb24oKXtpZigib2JqZWN0Ij09dHlwZW9mIGdsb2JhbFRoaXMpcmV0dXJuIGdsb2JhbFRoaXM7dHJ5e3JldHVybiB0aGlzfHxuZXcgRnVuY3Rpb24oInJldHVybiB0aGlzIikoKX1jYXRjaCh0KXtpZigib2JqZWN0Ij09dHlwZW9mIHdpbmRvdylyZXR1cm4gd2luZG93fX0oKSxuLm89ZnVuY3Rpb24odCxlKXtyZXR1cm4gT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHQsZSl9LG4ucj1mdW5jdGlvbih0KXsidW5kZWZpbmVkIiE9dHlwZW9mIFN5bWJvbCYmU3ltYm9sLnRvU3RyaW5nVGFnJiZPYmplY3QuZGVmaW5lUHJvcGVydHkodCxTeW1ib2wudG9TdHJpbmdUYWcse3ZhbHVlOiJNb2R1bGUifSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pfSxmdW5jdGlvbigpeyJ1c2Ugc3RyaWN0Ijt2YXIgdD17fTtuLnIodCksbi5kKHQse2Rpc2FibGU6ZnVuY3Rpb24oKXtyZXR1cm4gQ3R9LGVuYWJsZTpmdW5jdGlvbigpe3JldHVybiBqdH19KTt2YXIgZT1uKDY0MTU3KSxyPW4ubihlKSxvPShuKDYwNDkxKSxuKDQ2Njc5KSwiVVJMU2VhcmNoUGFyYW1zImluIHNlbGYpLGk9IlN5bWJvbCJpbiBzZWxmJiYiaXRlcmF0b3IiaW4gU3ltYm9sLGE9IkZpbGVSZWFkZXIiaW4gc2VsZiYmIkJsb2IiaW4gc2VsZiYmZnVuY3Rpb24oKXt0cnl7cmV0dXJuIG5ldyBCbG9iLCEwfWNhdGNoKHQpe3JldHVybiExfX0oKSxjPSJGb3JtRGF0YSJpbiBzZWxmLHM9IkFycmF5QnVmZmVyImluIHNlbGY7aWYocyl2YXIgdT1bIltvYmplY3QgSW50OEFycmF5XSIsIltvYmplY3QgVWludDhBcnJheV0iLCJbb2JqZWN0IFVpbnQ4Q2xhbXBlZEFycmF5XSIsIltvYmplY3QgSW50MTZBcnJheV0iLCJbb2JqZWN0IFVpbnQxNkFycmF5XSIsIltvYmplY3QgSW50MzJBcnJheV0iLCJbb2JqZWN0IFVpbnQzMkFycmF5XSIsIltvYmplY3QgRmxvYXQzMkFycmF5XSIsIltvYmplY3QgRmxvYXQ2NEFycmF5XSJdLGw9QXJyYXlCdWZmZXIuaXNWaWV3fHxmdW5jdGlvbih0KXtyZXR1cm4gdCYmdS5pbmRleE9mKE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbCh0KSk+LTF9O2Z1bmN0aW9uIGYodCl7aWYoInN0cmluZyIhPXR5cGVvZiB0JiYodD1TdHJpbmcodCkpLC9bXmEtejAtOVwtIyQlJicqKy5eX2B8fl0vaS50ZXN0KHQpKXRocm93IG5ldyBUeXBlRXJyb3IoIkludmFsaWQgY2hhcmFjdGVyIGluIGhlYWRlciBmaWVsZCBuYW1lIik7cmV0dXJuIHQudG9Mb3dlckNhc2UoKX1mdW5jdGlvbiBkKHQpe3JldHVybiJzdHJpbmciIT10eXBlb2YgdCYmKHQ9U3RyaW5nKHQpKSx0fWZ1bmN0aW9uIHAodCl7dmFyIGU9e25leHQ6ZnVuY3Rpb24oKXt2YXIgZT10LnNoaWZ0KCk7cmV0dXJue2RvbmU6dm9pZCAwPT09ZSx2YWx1ZTplfX19O3JldHVybiBpJiYoZVtTeW1ib2wuaXRlcmF0b3JdPWZ1bmN0aW9uKCl7cmV0dXJuIGV9KSxlfWZ1bmN0aW9uIGgodCl7dGhpcy5tYXA9e30sdCBpbnN0YW5jZW9mIGg/dC5mb3JFYWNoKChmdW5jdGlvbih0LGUpe3RoaXMuYXBwZW5kKGUsdCl9KSx0aGlzKTpBcnJheS5pc0FycmF5KHQpP3QuZm9yRWFjaCgoZnVuY3Rpb24odCl7dGhpcy5hcHBlbmQodFswXSx0WzFdKX0pLHRoaXMpOnQmJk9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKHQpLmZvckVhY2goKGZ1bmN0aW9uKGUpe3RoaXMuYXBwZW5kKGUsdFtlXSl9KSx0aGlzKX1mdW5jdGlvbiB2KHQpe2lmKHQuYm9keVVzZWQpcmV0dXJuIFByb21pc2UucmVqZWN0KG5ldyBUeXBlRXJyb3IoIkFscmVhZHkgcmVhZCIpKTt0LmJvZHlVc2VkPSEwfWZ1bmN0aW9uIGcodCl7cmV0dXJuIG5ldyBQcm9taXNlKChmdW5jdGlvbihlLG4pe3Qub25sb2FkPWZ1bmN0aW9uKCl7ZSh0LnJlc3VsdCl9LHQub25lcnJvcj1mdW5jdGlvbigpe24odC5lcnJvcil9fSkpfWZ1bmN0aW9uIHkodCl7dmFyIGU9bmV3IEZpbGVSZWFkZXIsbj1nKGUpO3JldHVybiBlLnJlYWRBc0FycmF5QnVmZmVyKHQpLG59ZnVuY3Rpb24gbSh0KXtpZih0LnNsaWNlKXJldHVybiB0LnNsaWNlKDApO3ZhciBlPW5ldyBVaW50OEFycmF5KHQuYnl0ZUxlbmd0aCk7cmV0dXJuIGUuc2V0KG5ldyBVaW50OEFycmF5KHQpKSxlLmJ1ZmZlcn1mdW5jdGlvbiBiKCl7cmV0dXJuIHRoaXMuYm9keVVzZWQ9ITEsdGhpcy5faW5pdEJvZHk9ZnVuY3Rpb24odCl7dmFyIGU7dGhpcy5fYm9keUluaXQ9dCx0PyJzdHJpbmciPT10eXBlb2YgdD90aGlzLl9ib2R5VGV4dD10OmEmJkJsb2IucHJvdG90eXBlLmlzUHJvdG90eXBlT2YodCk/dGhpcy5fYm9keUJsb2I9dDpjJiZGb3JtRGF0YS5wcm90b3R5cGUuaXNQcm90b3R5cGVPZih0KT90aGlzLl9ib2R5Rm9ybURhdGE9dDpvJiZVUkxTZWFyY2hQYXJhbXMucHJvdG90eXBlLmlzUHJvdG90eXBlT2YodCk/dGhpcy5fYm9keVRleHQ9dC50b1N0cmluZygpOnMmJmEmJigoZT10KSYmRGF0YVZpZXcucHJvdG90eXBlLmlzUHJvdG90eXBlT2YoZSkpPyh0aGlzLl9ib2R5QXJyYXlCdWZmZXI9bSh0LmJ1ZmZlciksdGhpcy5fYm9keUluaXQ9bmV3IEJsb2IoW3RoaXMuX2JvZHlBcnJheUJ1ZmZlcl0pKTpzJiYoQXJyYXlCdWZmZXIucHJvdG90eXBlLmlzUHJvdG90eXBlT2YodCl8fGwodCkpP3RoaXMuX2JvZHlBcnJheUJ1ZmZlcj1tKHQpOnRoaXMuX2JvZHlUZXh0PXQ9T2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKHQpOnRoaXMuX2JvZHlUZXh0PSIiLHRoaXMuaGVhZGVycy5nZXQoImNvbnRlbnQtdHlwZSIpfHwoInN0cmluZyI9PXR5cGVvZiB0P3RoaXMuaGVhZGVycy5zZXQoImNvbnRlbnQtdHlwZSIsInRleHQvcGxhaW47Y2hhcnNldD1VVEYtOCIpOnRoaXMuX2JvZHlCbG9iJiZ0aGlzLl9ib2R5QmxvYi50eXBlP3RoaXMuaGVhZGVycy5zZXQoImNvbnRlbnQtdHlwZSIsdGhpcy5fYm9keUJsb2IudHlwZSk6byYmVVJMU2VhcmNoUGFyYW1zLnByb3RvdHlwZS5pc1Byb3RvdHlwZU9mKHQpJiZ0aGlzLmhlYWRlcnMuc2V0KCJjb250ZW50LXR5cGUiLCJhcHBsaWNhdGlvbi94LXd3dy1mb3JtLXVybGVuY29kZWQ7Y2hhcnNldD1VVEYtOCIpKX0sYSYmKHRoaXMuYmxvYj1mdW5jdGlvbigpe3ZhciB0PXYodGhpcyk7aWYodClyZXR1cm4gdDtpZih0aGlzLl9ib2R5QmxvYilyZXR1cm4gUHJvbWlzZS5yZXNvbHZlKHRoaXMuX2JvZHlCbG9iKTtpZih0aGlzLl9ib2R5QXJyYXlCdWZmZXIpcmV0dXJuIFByb21pc2UucmVzb2x2ZShuZXcgQmxvYihbdGhpcy5fYm9keUFycmF5QnVmZmVyXSkpO2lmKHRoaXMuX2JvZHlGb3JtRGF0YSl0aHJvdyBuZXcgRXJyb3IoImNvdWxkIG5vdCByZWFkIEZvcm1EYXRhIGJvZHkgYXMgYmxvYiIpO3JldHVybiBQcm9taXNlLnJlc29sdmUobmV3IEJsb2IoW3RoaXMuX2JvZHlUZXh0XSkpfSx0aGlzLmFycmF5QnVmZmVyPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2JvZHlBcnJheUJ1ZmZlcj92KHRoaXMpfHxQcm9taXNlLnJlc29sdmUodGhpcy5fYm9keUFycmF5QnVmZmVyKTp0aGlzLmJsb2IoKS50aGVuKHkpfSksdGhpcy50ZXh0PWZ1bmN0aW9uKCl7dmFyIHQsZSxuLHI9dih0aGlzKTtpZihyKXJldHVybiByO2lmKHRoaXMuX2JvZHlCbG9iKXJldHVybiB0PXRoaXMuX2JvZHlCbG9iLGU9bmV3IEZpbGVSZWFkZXIsbj1nKGUpLGUucmVhZEFzVGV4dCh0KSxuO2lmKHRoaXMuX2JvZHlBcnJheUJ1ZmZlcilyZXR1cm4gUHJvbWlzZS5yZXNvbHZlKGZ1bmN0aW9uKHQpe2Zvcih2YXIgZT1uZXcgVWludDhBcnJheSh0KSxuPW5ldyBBcnJheShlLmxlbmd0aCkscj0wO3I8ZS5sZW5ndGg7cisrKW5bcl09U3RyaW5nLmZyb21DaGFyQ29kZShlW3JdKTtyZXR1cm4gbi5qb2luKCIiKX0odGhpcy5fYm9keUFycmF5QnVmZmVyKSk7aWYodGhpcy5fYm9keUZvcm1EYXRhKXRocm93IG5ldyBFcnJvcigiY291bGQgbm90IHJlYWQgRm9ybURhdGEgYm9keSBhcyB0ZXh0Iik7cmV0dXJuIFByb21pc2UucmVzb2x2ZSh0aGlzLl9ib2R5VGV4dCl9LGMmJih0aGlzLmZvcm1EYXRhPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMudGV4dCgpLnRoZW4oRSl9KSx0aGlzLmpzb249ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy50ZXh0KCkudGhlbihKU09OLnBhcnNlKX0sdGhpc31oLnByb3RvdHlwZS5hcHBlbmQ9ZnVuY3Rpb24odCxlKXt0PWYodCksZT1kKGUpO3ZhciBuPXRoaXMubWFwW3RdO3RoaXMubWFwW3RdPW4/bisiLCAiK2U6ZX0saC5wcm90b3R5cGUuZGVsZXRlPWZ1bmN0aW9uKHQpe2RlbGV0ZSB0aGlzLm1hcFtmKHQpXX0saC5wcm90b3R5cGUuZ2V0PWZ1bmN0aW9uKHQpe3JldHVybiB0PWYodCksdGhpcy5oYXModCk/dGhpcy5tYXBbdF06bnVsbH0saC5wcm90b3R5cGUuaGFzPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLm1hcC5oYXNPd25Qcm9wZXJ0eShmKHQpKX0saC5wcm90b3R5cGUuc2V0PWZ1bmN0aW9uKHQsZSl7dGhpcy5tYXBbZih0KV09ZChlKX0saC5wcm90b3R5cGUuZm9yRWFjaD1mdW5jdGlvbih0LGUpe2Zvcih2YXIgbiBpbiB0aGlzLm1hcCl0aGlzLm1hcC5oYXNPd25Qcm9wZXJ0eShuKSYmdC5jYWxsKGUsdGhpcy5tYXBbbl0sbix0aGlzKX0saC5wcm90b3R5cGUua2V5cz1mdW5jdGlvbigpe3ZhciB0PVtdO3JldHVybiB0aGlzLmZvckVhY2goKGZ1bmN0aW9uKGUsbil7dC5wdXNoKG4pfSkpLHAodCl9LGgucHJvdG90eXBlLnZhbHVlcz1mdW5jdGlvbigpe3ZhciB0PVtdO3JldHVybiB0aGlzLmZvckVhY2goKGZ1bmN0aW9uKGUpe3QucHVzaChlKX0pKSxwKHQpfSxoLnByb3RvdHlwZS5lbnRyaWVzPWZ1bmN0aW9uKCl7dmFyIHQ9W107cmV0dXJuIHRoaXMuZm9yRWFjaCgoZnVuY3Rpb24oZSxuKXt0LnB1c2goW24sZV0pfSkpLHAodCl9LGkmJihoLnByb3RvdHlwZVtTeW1ib2wuaXRlcmF0b3JdPWgucHJvdG90eXBlLmVudHJpZXMpO3ZhciB4PVsiREVMRVRFIiwiR0VUIiwiSEVBRCIsIk9QVElPTlMiLCJQT1NUIiwiUFVUIl07ZnVuY3Rpb24gdyh0LGUpe3ZhciBuLHIsbz0oZT1lfHx7fSkuYm9keTtpZih0IGluc3RhbmNlb2Ygdyl7aWYodC5ib2R5VXNlZCl0aHJvdyBuZXcgVHlwZUVycm9yKCJBbHJlYWR5IHJlYWQiKTt0aGlzLnVybD10LnVybCx0aGlzLmNyZWRlbnRpYWxzPXQuY3JlZGVudGlhbHMsZS5oZWFkZXJzfHwodGhpcy5oZWFkZXJzPW5ldyBoKHQuaGVhZGVycykpLHRoaXMubWV0aG9kPXQubWV0aG9kLHRoaXMubW9kZT10Lm1vZGUsdGhpcy5zaWduYWw9dC5zaWduYWwsb3x8bnVsbD09dC5fYm9keUluaXR8fChvPXQuX2JvZHlJbml0LHQuYm9keVVzZWQ9ITApfWVsc2UgdGhpcy51cmw9U3RyaW5nKHQpO2lmKHRoaXMuY3JlZGVudGlhbHM9ZS5jcmVkZW50aWFsc3x8dGhpcy5jcmVkZW50aWFsc3x8InNhbWUtb3JpZ2luIiwhZS5oZWFkZXJzJiZ0aGlzLmhlYWRlcnN8fCh0aGlzLmhlYWRlcnM9bmV3IGgoZS5oZWFkZXJzKSksdGhpcy5tZXRob2Q9KG49ZS5tZXRob2R8fHRoaXMubWV0aG9kfHwiR0VUIixyPW4udG9VcHBlckNhc2UoKSx4LmluZGV4T2Yocik+LTE/cjpuKSx0aGlzLm1vZGU9ZS5tb2RlfHx0aGlzLm1vZGV8fG51bGwsdGhpcy5zaWduYWw9ZS5zaWduYWx8fHRoaXMuc2lnbmFsLHRoaXMucmVmZXJyZXI9bnVsbCwoIkdFVCI9PT10aGlzLm1ldGhvZHx8IkhFQUQiPT09dGhpcy5tZXRob2QpJiZvKXRocm93IG5ldyBUeXBlRXJyb3IoIkJvZHkgbm90IGFsbG93ZWQgZm9yIEdFVCBvciBIRUFEIHJlcXVlc3RzIik7dGhpcy5faW5pdEJvZHkobyl9ZnVuY3Rpb24gRSh0KXt2YXIgZT1uZXcgRm9ybURhdGE7cmV0dXJuIHQudHJpbSgpLnNwbGl0KCImIikuZm9yRWFjaCgoZnVuY3Rpb24odCl7aWYodCl7dmFyIG49dC5zcGxpdCgiPSIpLHI9bi5zaGlmdCgpLnJlcGxhY2UoL1wrL2csIiAiKSxvPW4uam9pbigiPSIpLnJlcGxhY2UoL1wrL2csIiAiKTtlLmFwcGVuZChkZWNvZGVVUklDb21wb25lbnQociksZGVjb2RlVVJJQ29tcG9uZW50KG8pKX19KSksZX1mdW5jdGlvbiBqKHQpe3ZhciBlPW5ldyBoO3JldHVybiB0LnJlcGxhY2UoL1xyP1xuW1x0IF0rL2csIiAiKS5zcGxpdCgvXHI/XG4vKS5mb3JFYWNoKChmdW5jdGlvbih0KXt2YXIgbj10LnNwbGl0KCI6Iikscj1uLnNoaWZ0KCkudHJpbSgpO2lmKHIpe3ZhciBvPW4uam9pbigiOiIpLnRyaW0oKTtlLmFwcGVuZChyLG8pfX0pKSxlfWZ1bmN0aW9uIEModCxlKXtlfHwoZT17fSksdGhpcy50eXBlPSJkZWZhdWx0Iix0aGlzLnN0YXR1cz12b2lkIDA9PT1lLnN0YXR1cz8yMDA6ZS5zdGF0dXMsdGhpcy5vaz10aGlzLnN0YXR1cz49MjAwJiZ0aGlzLnN0YXR1czwzMDAsdGhpcy5zdGF0dXNUZXh0PSJzdGF0dXNUZXh0ImluIGU/ZS5zdGF0dXNUZXh0OiJPSyIsdGhpcy5oZWFkZXJzPW5ldyBoKGUuaGVhZGVycyksdGhpcy51cmw9ZS51cmx8fCIiLHRoaXMuX2luaXRCb2R5KHQpfXcucHJvdG90eXBlLmNsb25lPWZ1bmN0aW9uKCl7cmV0dXJuIG5ldyB3KHRoaXMse2JvZHk6dGhpcy5fYm9keUluaXR9KX0sYi5jYWxsKHcucHJvdG90eXBlKSxiLmNhbGwoQy5wcm90b3R5cGUpLEMucHJvdG90eXBlLmNsb25lPWZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBDKHRoaXMuX2JvZHlJbml0LHtzdGF0dXM6dGhpcy5zdGF0dXMsc3RhdHVzVGV4dDp0aGlzLnN0YXR1c1RleHQsaGVhZGVyczpuZXcgaCh0aGlzLmhlYWRlcnMpLHVybDp0aGlzLnVybH0pfSxDLmVycm9yPWZ1bmN0aW9uKCl7dmFyIHQ9bmV3IEMobnVsbCx7c3RhdHVzOjAsc3RhdHVzVGV4dDoiIn0pO3JldHVybiB0LnR5cGU9ImVycm9yIix0fTt2YXIgaz1bMzAxLDMwMiwzMDMsMzA3LDMwOF07Qy5yZWRpcmVjdD1mdW5jdGlvbih0LGUpe2lmKC0xPT09ay5pbmRleE9mKGUpKXRocm93IG5ldyBSYW5nZUVycm9yKCJJbnZhbGlkIHN0YXR1cyBjb2RlIik7cmV0dXJuIG5ldyBDKG51bGwse3N0YXR1czplLGhlYWRlcnM6e2xvY2F0aW9uOnR9fSl9O3ZhciBTPXNlbGYuRE9NRXhjZXB0aW9uO3RyeXtuZXcgU31jYXRjaCh0KXsoUz1mdW5jdGlvbih0LGUpe3RoaXMubWVzc2FnZT10LHRoaXMubmFtZT1lO3ZhciBuPUVycm9yKHQpO3RoaXMuc3RhY2s9bi5zdGFja30pLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKEVycm9yLnByb3RvdHlwZSksUy5wcm90b3R5cGUuY29uc3RydWN0b3I9U31mdW5jdGlvbiBPKHQsZSl7cmV0dXJuIG5ldyBQcm9taXNlKChmdW5jdGlvbihuLHIpe3ZhciBvPW5ldyB3KHQsZSk7aWYoby5zaWduYWwmJm8uc2lnbmFsLmFib3J0ZWQpcmV0dXJuIHIobmV3IFMoIkFib3J0ZWQiLCJBYm9ydEVycm9yIikpO3ZhciBpPW5ldyBYTUxIdHRwUmVxdWVzdDtmdW5jdGlvbiBjKCl7aS5hYm9ydCgpfWkub25sb2FkPWZ1bmN0aW9uKCl7dmFyIHQ9e3N0YXR1czppLnN0YXR1cyxzdGF0dXNUZXh0Omkuc3RhdHVzVGV4dCxoZWFkZXJzOmooaS5nZXRBbGxSZXNwb25zZUhlYWRlcnMoKXx8IiIpfTt0LnVybD0icmVzcG9uc2VVUkwiaW4gaT9pLnJlc3BvbnNlVVJMOnQuaGVhZGVycy5nZXQoIlgtUmVxdWVzdC1VUkwiKTt2YXIgZT0icmVzcG9uc2UiaW4gaT9pLnJlc3BvbnNlOmkucmVzcG9uc2VUZXh0O24obmV3IEMoZSx0KSl9LGkub25lcnJvcj1mdW5jdGlvbigpe3IobmV3IFR5cGVFcnJvcigiTmV0d29yayByZXF1ZXN0IGZhaWxlZCIpKX0saS5vbnRpbWVvdXQ9ZnVuY3Rpb24oKXtyKG5ldyBUeXBlRXJyb3IoIk5ldHdvcmsgcmVxdWVzdCBmYWlsZWQiKSl9LGkub25hYm9ydD1mdW5jdGlvbigpe3IobmV3IFMoIkFib3J0ZWQiLCJBYm9ydEVycm9yIikpfSxpLm9wZW4oby5tZXRob2Qsby51cmwsITApLCJpbmNsdWRlIj09PW8uY3JlZGVudGlhbHM/aS53aXRoQ3JlZGVudGlhbHM9ITA6Im9taXQiPT09by5jcmVkZW50aWFscyYmKGkud2l0aENyZWRlbnRpYWxzPSExKSwicmVzcG9uc2VUeXBlImluIGkmJmEmJihpLnJlc3BvbnNlVHlwZT0iYmxvYiIpLG8uaGVhZGVycy5mb3JFYWNoKChmdW5jdGlvbih0LGUpe2kuc2V0UmVxdWVzdEhlYWRlcihlLHQpfSkpLG8uc2lnbmFsJiYoby5zaWduYWwuYWRkRXZlbnRMaXN0ZW5lcigiYWJvcnQiLGMpLGkub25yZWFkeXN0YXRlY2hhbmdlPWZ1bmN0aW9uKCl7ND09PWkucmVhZHlTdGF0ZSYmby5zaWduYWwucmVtb3ZlRXZlbnRMaXN0ZW5lcigiYWJvcnQiLGMpfSksaS5zZW5kKHZvaWQgMD09PW8uX2JvZHlJbml0P251bGw6by5fYm9keUluaXQpfSkpfWZ1bmN0aW9uIEEodCxlKXtmb3IodmFyIG49W10scj1bXSxvPWFyZ3VtZW50cy5sZW5ndGg7by0tID4yOyluLnB1c2goYXJndW1lbnRzW29dKTtmb3IoO24ubGVuZ3RoOyl7dmFyIGk9bi5wb3AoKTtpZihpJiZpLnBvcClmb3Iobz1pLmxlbmd0aDtvLS07KW4ucHVzaChpW29dKTtlbHNlIG51bGwhPWkmJiEwIT09aSYmITEhPT1pJiZyLnB1c2goaSl9cmV0dXJuImZ1bmN0aW9uIj09dHlwZW9mIHQ/dChlfHx7fSxyKTp7bm9kZU5hbWU6dCxhdHRyaWJ1dGVzOmV8fHt9LGNoaWxkcmVuOnIsa2V5OmUmJmUua2V5fX1PLnBvbHlmaWxsPSEwLHNlbGYuZmV0Y2h8fChzZWxmLmZldGNoPU8sc2VsZi5IZWFkZXJzPWgsc2VsZi5SZXF1ZXN0PXcsc2VsZi5SZXNwb25zZT1DKTt2YXIgST1uKDY2MDgxKSxNPW4ubihJKSxUPW4oOTI4MTYpLF89bi5uKFQpLEw9big0NDY3NCksUj1uLm4oTCksUD1uKDQ0NjIxKSxOPW4ubihQKSxEPUFycmF5LmlzQXJyYXk7ZnVuY3Rpb24gRih0KXt2YXIgZSxuLHI9dHlwZW9mIHQsbz0iIjtpZigic3RyaW5nIj09PXJ8fCJudW1iZXIiPT09cilyZXR1cm4gdHx8IiI7aWYoRCh0KSYmdC5sZW5ndGg+MClmb3IoZT0wLG49dC5sZW5ndGg7ZTxuO2UrKykiIiE9PShyPUYodFtlXSkpJiYobys9KG8mJiIgIikrcik7ZWxzZSBmb3IoZSBpbiB0KXQuaGFzT3duUHJvcGVydHkoZSkmJnRbZV0mJihvKz0obyYmIiAiKStlKTtyZXR1cm4gb312YXIgVT0ieC11bC1lbnZpcm9ubWVudC1pZCIsQj0ieC11bC1hbm9ueW1vdXMtaWQiLHo9IngtdWwtdXNlci1pZCIsVj0ieC11bC12aXNpdG9yLWlkIixIPSJ4LXVsLWluc3RhbGxhdGlvbi1tZXRob2QiLHE9IndlYi1ndG0iLFc9IndlYi1zZWdtZW50IixHPSJ3ZWItc25pcHBldCIsWj0idWwtY3VzdG9tLXN0eWxlIiwkPSJ1bC1jYXJkX19jb250YWluZXIiLFk9InVsLWNhcmQtLXZpZGVvIixKPSJjbG9zZS1jb250YWluZXIiLEs9ImNsb3NlLWJ0biIsWD0ibGlrZXJ0LW51bWJlciIsUT0ibnBzLW51bWJlciIsdHQ9ImNob2ljZSIsZXQ9InNlbGVjdC1sYWJlbCIsbnQ9InNlbGVjdC1jaGVja2JveCIscnQ9InNlbGVjdC1yYWRpbyIsb3Q9InVsLWNhcmRfX2Nob2ljZXMiLGl0PSJ1bC1jYXJkLXRleHRfX2lucHV0IixhdD0iLS1kZXNrdG9wIixjdD0iLS1tb2JpbGUiLHN0PSJ1bC1xdWVzdGlvbiIsdXQ9InVsLWNhcHRpb24iLGx0PSJmYWRlLWluLXRyYW5zaXRpb24iLGZ0PWZ1bmN0aW9uKHQsZSl7cmV0dXJuW3QrKGU/Y3Q6YXQpLHRdfTtmdW5jdGlvbiBkdCh0LGUpe3ZhciBuPSJ1bmRlZmluZWQiIT10eXBlb2YgU3ltYm9sJiZ0W1N5bWJvbC5pdGVyYXRvcl18fHRbIkBAaXRlcmF0b3IiXTtpZighbil7aWYoQXJyYXkuaXNBcnJheSh0KXx8KG49ZnVuY3Rpb24odCxlKXtpZighdClyZXR1cm47aWYoInN0cmluZyI9PXR5cGVvZiB0KXJldHVybiBwdCh0LGUpO3ZhciBuPU9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbCh0KS5zbGljZSg4LC0xKTsiT2JqZWN0Ij09PW4mJnQuY29uc3RydWN0b3ImJihuPXQuY29uc3RydWN0b3IubmFtZSk7aWYoIk1hcCI9PT1ufHwiU2V0Ij09PW4pcmV0dXJuIEFycmF5LmZyb20odCk7aWYoIkFyZ3VtZW50cyI9PT1ufHwvXig/OlVpfEkpbnQoPzo4fDE2fDMyKSg/OkNsYW1wZWQpP0FycmF5JC8udGVzdChuKSlyZXR1cm4gcHQodCxlKX0odCkpfHxlJiZ0JiYibnVtYmVyIj09dHlwZW9mIHQubGVuZ3RoKXtuJiYodD1uKTt2YXIgcj0wLG89ZnVuY3Rpb24oKXt9O3JldHVybntzOm8sbjpmdW5jdGlvbigpe3JldHVybiByPj10Lmxlbmd0aD97ZG9uZTohMH06e2RvbmU6ITEsdmFsdWU6dFtyKytdfX0sZTpmdW5jdGlvbih0KXt0aHJvdyB0fSxmOm99fXRocm93IG5ldyBUeXBlRXJyb3IoIkludmFsaWQgYXR0ZW1wdCB0byBpdGVyYXRlIG5vbi1pdGVyYWJsZSBpbnN0YW5jZS5cbkluIG9yZGVyIHRvIGJlIGl0ZXJhYmxlLCBub24tYXJyYXkgb2JqZWN0cyBtdXN0IGhhdmUgYSBbU3ltYm9sLml0ZXJhdG9yXSgpIG1ldGhvZC4iKX12YXIgaSxhPSEwLGM9ITE7cmV0dXJue3M6ZnVuY3Rpb24oKXtuPW4uY2FsbCh0KX0sbjpmdW5jdGlvbigpe3ZhciB0PW4ubmV4dCgpO3JldHVybiBhPXQuZG9uZSx0fSxlOmZ1bmN0aW9uKHQpe2M9ITAsaT10fSxmOmZ1bmN0aW9uKCl7dHJ5e2F8fG51bGw9PW4ucmV0dXJufHxuLnJldHVybigpfWZpbmFsbHl7aWYoYyl0aHJvdyBpfX19fWZ1bmN0aW9uIHB0KHQsZSl7KG51bGw9PWV8fGU+dC5sZW5ndGgpJiYoZT10Lmxlbmd0aCk7Zm9yKHZhciBuPTAscj1uZXcgQXJyYXkoZSk7bjxlO24rKylyW25dPXRbbl07cmV0dXJuIHJ9dmFyIGh0PSJ1bC1hcHAiLHZ0PWZ1bmN0aW9uKHQsZSl7dmFyIG49dC5hcHA7bi5ydW5uaW5nfHxlLmRlc3Ryb3koaHQpO3ZhciBvLGk9bi5kZWNrLmNhcmRzW24uZGVjay5pbmRleF0sYT1pLkNhcmQsYz1pLnByb3BzLHM9aS50eXBlLHU9aS5uYW1lLGw9bi5ib3JkZXIsZj1mdW5jdGlvbigpe3ZhciB0PU4oKShSKCkubWFyaygoZnVuY3Rpb24gdCgpe3JldHVybiBSKCkud3JhcCgoZnVuY3Rpb24odCl7Zm9yKDs7KXN3aXRjaCh0LnByZXY9dC5uZXh0KXtjYXNlIDA6cmV0dXJuIHQubmV4dD0yLGUuY2xvc2UoaHQpO2Nhc2UgMjpjYXNlImVuZCI6cmV0dXJuIHQuc3RvcCgpfX0pLHQpfSkpKTtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gdC5hcHBseSh0aGlzLGFyZ3VtZW50cyl9fSgpLGQ9bi5kZWNrLmNhcmRzLHA9bi5kZWNrLmluZGV4LGg9bi5mb250RmFtaWx5P3tmb250RmFtaWx5Om4uZm9udEZhbWlseS5yZXBsYWNlKCI7IiwiIil9Ont9LHY9bi5lbmRDYXJkLGc9ZnVuY3Rpb24oKXt2YXIgdD1OKCkoUigpLm1hcmsoKGZ1bmN0aW9uIHQobil7cmV0dXJuIFIoKS53cmFwKChmdW5jdGlvbih0KXtmb3IoOzspc3dpdGNoKHQucHJldj10Lm5leHQpe2Nhc2UgMDplLmFwcC5uZXh0KHtkYXRhOm4sY29tcGxldGVTdXJ2ZXk6ZnVuY3Rpb24oKXtlLmRlc3Ryb3koaHQpfSxlbmRDYXJkOnZ9KTtjYXNlIDE6Y2FzZSJlbmQiOnJldHVybiB0LnN0b3AoKX19KSx0KX0pKSk7cmV0dXJuIGZ1bmN0aW9uKGUpe3JldHVybiB0LmFwcGx5KHRoaXMsYXJndW1lbnRzKX19KCkseT1kdChuLmFuc3dlcnN8fFtdKTt0cnl7dmFyIG09ZnVuY3Rpb24oKXt2YXIgdD1vLnZhbHVlO2lmKHQucXVlc3Rpb25JZD09PXUpe3ZhciBlO2lmKCJtdWx0aXBsZWNob2ljZSI9PT1zKXt2YXIgbj1jLm9wdGlvbnMuZmluZCgoZnVuY3Rpb24oZSl7cmV0dXJuIGUudmFsdWU9PT10LnZhbHVlfSkpO2lmKCFuKXJldHVybiJicmVhayI7ZT1yKCkoe30sbi5pZCxuLnZhbHVlKX1lbHNlIGU9dC52YWx1ZTtyZXR1cm4gZyh7dmFsdWU6ZX0pLCJicmVhayJ9fTtmb3IoeS5zKCk7IShvPXkubigpKS5kb25lOyl7aWYoImJyZWFrIj09PW0oKSlicmVha319Y2F0Y2godCl7eS5lKHQpfWZpbmFsbHl7eS5mKCl9cmV0dXJuIEEoImRpdiIse2NsYXNzTmFtZToidWwtYXBwIixpZDpodCxvbmNyZWF0ZTpmdW5jdGlvbih0KXtyZXR1cm4gZnVuY3Rpb24odCl7dmFyIHI9WyJ0cmFuc2l0aW9uZW5kIiwid2Via2l0VHJhbnNpdGlvbkVuZCIsIm1velRyYW5zaXRpb25FbmQiXSxvPSExLGk9ZnVuY3Rpb24gbigpe2lmKCFvJiZ3aW5kb3cuZnJhbWVFbGVtZW50KXt2YXIgaT1uZXcgRXZlbnQoInVsOmZyYW1lOnJlbmRlcmVkIik7d2luZG93LmZyYW1lRWxlbWVudC5kaXNwYXRjaEV2ZW50KGkpfW89ITAsci5mb3JFYWNoKChmdW5jdGlvbihlKXt0LnJlbW92ZUV2ZW50TGlzdGVuZXIoZSxuKX0pKSxzZXRUaW1lb3V0KChmdW5jdGlvbigpe3JldHVybiBlLnVwZGF0ZShodCl9KSwzMDApfTtyLmZvckVhY2goKGZ1bmN0aW9uKGUpe3QuYWRkRXZlbnRMaXN0ZW5lcihlLGkpfSkpLG4uY29uZmlndXJlRXhpdE9uT3ZlcmxheUNsaWNrKChmdW5jdGlvbigpe2UuY2xvc2UoaHQpfSkpLGUudXBkYXRlKGh0KX0odCl9LG9udXBkYXRlOmZ1bmN0aW9uKCl7cmV0dXJuIGUudXBkYXRlKGh0KX0sc3R5bGU6aH0sQSgiZGl2Iix7Y2xhc3NOYW1lOiJ1bC1hcHBfX2NvbnRhaW5lciJ9LEEoImRpdiIse2NsYXNzTmFtZTpGKF8oKShmdCgkLG4udXNlTW9iaWxlU3R5bGluZykpKSxzdHlsZTp7Ym9yZGVyQ29sb3I6bH19LEEoYSxNKCkoe30sYyx7Ym9yZGVyOmwsY2xhc3NOYW1lOiJ1bC1jYXJkIixuZXh0OmcsZW5kQ2FyZDp2LGxvY2FsZTpuLmxvY2FsZSxxdWVzdGlvbklkOnUsdXBkYXRlSGVpZ2h0OmZ1bmN0aW9uKCl7cmV0dXJuIGUudXBkYXRlKGh0KX19KSkpLCJlbWFpbCIhPT1uLmhlYWRlcnNbInVzZXJsZWFwLXBsYXRmb3JtIl0mJiJsaW5rIiE9PW4uaGVhZGVyc1sidXNlcmxlYXAtcGxhdGZvcm0iXSYmKCF2fHxwKzEhPT1kLmxlbmd0aCkmJkEoImRpdiIse2NsYXNzTmFtZTpGKGZ0KEosbi51c2VNb2JpbGVTdHlsaW5nKSl9LEEoImRpdiIse2NsYXNzTmFtZTpLLG9uY2xpY2s6ZixvbmtleXByZXNzOmZ1bmN0aW9uKHQpezEzPT10LmtleUNvZGUmJmYoKX0scm9sZToiYnV0dG9uIiwiYXJpYS1sYWJlbCI6IkNsb3NlIGJ1dHRvbiIsdGFiaW5kZXg6MH0sQSgic3ZnIix7d2lkdGg6IjE4cHgiLGhlaWdodDoiMThweCIsdmlld0JveDoiMCAwIDEzIDEzIixmaWxsOiJub25lIix4bWxuczoiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmcifSxBKCJwYXRoIix7ZDoiTTIuNTQ5NjQgMS43ODM2OUwxLjc4MzY5IDIuNTQ5NjRMNS43MzQwNSA2LjVMMS43ODM2OSAxMC40NTA0TDIuNTQ5NjQgMTEuMjE2M0w2LjUgNy4yNjU5NUwxMC40NTA0IDExLjIxNjNMMTEuMjE2MyAxMC40NTA0TDcuMjY1OTUgNi41TDExLjIxNjMgMi41NDk2NEwxMC40NTA0IDEuNzgzNjlMNi41IDUuNzM0MDVMMi41NDk2NCAxLjc4MzY5WiIsZmlsbDoiIzI2MjEzNiJ9KSkpKSkpfSxndD1uKDQ3MDY2KSx5dD1uLm4oZ3QpLG10PW4oMzA1OTMpLGJ0PW4ubihtdCkseHQ9big0NDUzKSx3dD1uLm4oeHQpLEV0PWZ1bmN0aW9uKCl7dHJ5e3JldHVybiB3aW5kb3cucGFyZW50LkludGVyY29tfWNhdGNoKHQpe319LGp0PWZ1bmN0aW9uKCl7dmFyIHQ9RXQoKTt0JiYodC51bF93YXNWaXNpYmxlJiZ0KCJ1cGRhdGUiLHtoaWRlX2RlZmF1bHRfbGF1bmNoZXI6ITF9KSxkZWxldGUgdC51bF93YXNWaXNpYmxlKX0sQ3Q9ZnVuY3Rpb24oKXt2YXIgdD1FdCgpO3QmJih0LnVsX3dhc1Zpc2libGU9ISFkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCJpZnJhbWUuaW50ZXJjb20tbGF1bmNoZXItZnJhbWUiKSx0LnVsX3dhc1Zpc2libGUmJnQoInVwZGF0ZSIse2hpZGVfZGVmYXVsdF9sYXVuY2hlcjohMH0pKX0sa3Q9W3RdLFN0PWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCgpe2J0KCkodGhpcyx0KX1yZXR1cm4gd3QoKSh0LG51bGwsW3trZXk6ImRpc2FibGUiLHZhbHVlOmZ1bmN0aW9uKCl7a3QuZm9yRWFjaCgoZnVuY3Rpb24odCl7cmV0dXJuIHQuZGlzYWJsZSgpfSkpfX0se2tleToiZW5hYmxlIix2YWx1ZTpmdW5jdGlvbigpe2t0LmZvckVhY2goKGZ1bmN0aW9uKHQpe3JldHVybiB0LmVuYWJsZSgpfSkpfX1dKSx0fSgpLE90PW4oNzYzOTApLEF0PW4ubihPdCksSXQ9ZnVuY3Rpb24oKXtyZXR1cm4gQSgic3ZnIix7d2lkdGg6IjEwMCIsaGVpZ2h0OiIxMyIsdmlld0JveDoiMCAwIDEwMCAxMyIsZmlsbDoibm9uZSIseG1sbnM6Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIixhbHQ6IlBvd2VyZWQgYnkgU3ByaWcifSxBKCJwYXRoIix7ZDoiTTMuMDM2OSAwLjgzOTk4MUgwLjAyNDkwMjNWOC45OTk5OEgxLjMyMDlWNi41Mzk5OEgyLjg1NjlDNC44OTY5IDYuNTM5OTggNi4yNDA5IDUuMzc1OTggNi4yNDA5IDMuNjIzOThDNi4yNDA5IDEuOTU1OTggNC45Njg5IDAuODM5OTgxIDMuMDM2OSAwLjgzOTk4MVpNMy4wMDA5IDUuMzUxOThIMS4zMjA5VjIuMDI3OThIMy4wMDA5QzQuMTc2OSAyLjAyNzk4IDQuOTY4OSAyLjY3NTk4IDQuOTY4OSAzLjYyMzk4QzQuOTY4OSA0LjY1NTk4IDQuMTc2OSA1LjM1MTk4IDMuMDAwOSA1LjM1MTk4WiIsZmlsbDoiIzVENjk2RiJ9KSxBKCJwYXRoIix7ZDoiTTkuOTA2NTMgMy4yMTU5OEM4LjE1NDUzIDMuMjE1OTggNi45MDY1MyA0LjQ1MTk4IDYuOTA2NTMgNi4xNzk5OEM2LjkwNjUzIDcuOTA3OTggOC4xNTQ1MyA5LjE0Mzk4IDkuOTA2NTMgOS4xNDM5OEMxMS42NTg1IDkuMTQzOTggMTIuOTA2NSA3LjkwNzk4IDEyLjkwNjUgNi4xNzk5OEMxMi45MDY1IDQuNDUxOTggMTEuNjU4NSAzLjIxNTk4IDkuOTA2NTMgMy4yMTU5OFpNOS45MDY1MyA4LjAxNTk4QzguODg2NTMgOC4wMTU5OCA4LjE1NDUzIDcuMjM1OTggOC4xNTQ1MyA2LjE3OTk4QzguMTU0NTMgNS4xMTE5OCA4Ljg4NjUzIDQuMzQzOTggOS45MDY1MyA0LjM0Mzk4QzEwLjkyNjUgNC4zNDM5OCAxMS42NTg1IDUuMTExOTggMTEuNjU4NSA2LjE3OTk4QzExLjY1ODUgNy4yMzU5OCAxMC45MjY1IDguMDE1OTggOS45MDY1MyA4LjAxNTk4WiIsZmlsbDoiIzVENjk2RiJ9KSxBKCJwYXRoIix7ZDoiTTIwLjk2MzEgMy4zNTk5OEwxOS43MzkxIDcuMTE1OThMMTguMzk1MSAzLjM1OTk4SDE3LjMyNzFMMTUuOTgzMSA3LjEyNzk4TDE0Ljc1OTEgMy4zNTk5OEgxMy40MTUxTDE1LjQ0MzEgOC45OTk5OEgxNi41MzUxTDE3Ljg2NzEgNS4wODc5OEwxOS4xODcxIDguOTk5OThIMjAuMjc5MUwyMi4zMDcxIDMuMzU5OThIMjAuOTYzMVoiLGZpbGw6IiM1RDY5NkYifSksQSgicGF0aCIse2Q6Ik0yNS43MjQ2IDMuMjE1OThDMjQuMDA4NiAzLjIxNTk4IDIyLjgyMDYgNC41MTE5OCAyMi44MjA2IDYuMTc5OThDMjIuODIwNiA3Ljg1OTk4IDI0LjAyMDYgOS4xNDM5OCAyNS43OTY2IDkuMTQzOThDMjcuMDIwNiA5LjE0Mzk4IDI4LjAxNjYgOC41NDM5OCAyOC4zNzY2IDcuNTIzOThIMjcuMDA4NkMyNi43ODA2IDcuODgzOTggMjYuMzYwNiA4LjA1MTk4IDI1LjgwODYgOC4wNTE5OEMyNC43NTI2IDguMDUxOTggMjQuMjEyNiA3LjQwMzk4IDI0LjA5MjYgNi41NTE5OEgyOC41MjA2QzI4Ljc2MDYgNC42NDM5OCAyNy41OTY2IDMuMjE1OTggMjUuNzI0NiAzLjIxNTk4Wk0yNS43MzY2IDQuMjcxOThDMjYuNjEyNiA0LjI3MTk4IDI3LjIxMjYgNC43NjM5OCAyNy4yODQ2IDUuNjg3OThIMjQuMTE2NkMyNC4yNjA2IDQuODk1OTggMjQuODAwNiA0LjI3MTk4IDI1LjczNjYgNC4yNzE5OFoiLGZpbGw6IiM1RDY5NkYifSksQSgicGF0aCIse2Q6Ik0zMS4xMjk3IDQuMTI3OThWMy4zNTk5OEgyOS44ODE3VjguOTk5OThIMzEuMTI5N1Y1LjQ0Nzk4QzMxLjYzMzcgNC43ODc5OCAzMi4zMTc3IDQuNDUxOTggMzMuMjE3NyA0LjQxNTk4VjMuMjM5OThDMzIuMzUzNyAzLjIzOTk4IDMxLjY0NTcgMy41NjM5OCAzMS4xMjk3IDQuMTI3OThaIixmaWxsOiIjNUQ2OTZGIn0pLEEoInBhdGgiLHtkOiJNMzYuODIyMiAzLjIxNTk4QzM1LjEwNjIgMy4yMTU5OCAzMy45MTgyIDQuNTExOTggMzMuOTE4MiA2LjE3OTk4QzMzLjkxODIgNy44NTk5OCAzNS4xMTgyIDkuMTQzOTggMzYuODk0MiA5LjE0Mzk4QzM4LjExODIgOS4xNDM5OCAzOS4xMTQyIDguNTQzOTggMzkuNDc0MiA3LjUyMzk4SDM4LjEwNjJDMzcuODc4MiA3Ljg4Mzk4IDM3LjQ1ODIgOC4wNTE5OCAzNi45MDYyIDguMDUxOThDMzUuODUwMiA4LjA1MTk4IDM1LjMxMDIgNy40MDM5OCAzNS4xOTAyIDYuNTUxOThIMzkuNjE4MkMzOS44NTgyIDQuNjQzOTggMzguNjk0MiAzLjIxNTk4IDM2LjgyMjIgMy4yMTU5OFpNMzYuODM0MiA0LjI3MTk4QzM3LjcxMDIgNC4yNzE5OCAzOC4zMTAyIDQuNzYzOTggMzguMzgyMiA1LjY4Nzk4SDM1LjIxNDJDMzUuMzU4MiA0Ljg5NTk4IDM1Ljg5ODIgNC4yNzE5OCAzNi44MzQyIDQuMjcxOThaIixmaWxsOiIjNUQ2OTZGIn0pLEEoInBhdGgiLHtkOiJNNDUuNDg4NiAwLjQ3OTk4VjMuODAzOThDNDUuMDA4NiAzLjQzMTk4IDQ0LjM5NjYgMy4yMTU5OCA0My42NzY2IDMuMjE1OThDNDIuMDkyNiAzLjIxNTk4IDQwLjgyMDYgNC41MzU5OCA0MC44MjA2IDYuMTY3OThDNDAuODIwNiA3LjgyMzk4IDQyLjA5MjYgOS4xNDM5OCA0My42NzY2IDkuMTQzOThDNDQuMzk2NiA5LjE0Mzk4IDQ1LjAwODYgOC45Mjc5OCA0NS40ODg2IDguNTQzOThWOC45OTk5OEg0Ni43MjQ2VjAuNDc5OThINDUuNDg4NlpNNDMuODU2NiA4LjAxNTk4QzQyLjgyNDYgOC4wMTU5OCA0Mi4wNjg2IDcuMTc1OTggNDIuMDY4NiA2LjE2Nzk4QzQyLjA2ODYgNS4xNzE5OCA0Mi44MjQ2IDQuMzQzOTggNDMuODU2NiA0LjM0Mzk4QzQ0LjQ4MDYgNC4zNDM5OCA0NS4wNjg2IDQuNTU5OTggNDUuNDg4NiA1LjE1OTk4VjcuMTg3OThDNDUuMDY4NiA3Ljc5OTk4IDQ0LjQ4MDYgOC4wMTU5OCA0My44NTY2IDguMDE1OThaIixmaWxsOiIjNUQ2OTZGIn0pLEEoInBhdGgiLHtkOiJNNTQuNjc5NyAzLjIxNTk4QzUzLjk1OTcgMy4yMTU5OCA1My4zNDc3IDMuNDMxOTggNTIuODc5NyAzLjc5MTk4VjAuNDc5OThINTEuNjMxN1Y4Ljk5OTk4SDUyLjg3OTdWOC41NTU5OEM1My4zNDc3IDguOTI3OTggNTMuOTU5NyA5LjE0Mzk4IDU0LjY3OTcgOS4xNDM5OEM1Ni4yNjM3IDkuMTQzOTggNTcuNTQ3NyA3LjgyMzk4IDU3LjU0NzcgNi4xNjc5OEM1Ny41NDc3IDQuNTM1OTggNTYuMjYzNyAzLjIxNTk4IDU0LjY3OTcgMy4yMTU5OFpNNTQuNDk5NyA4LjAxNTk4QzUzLjg3NTcgOC4wMTU5OCA1My4yOTk3IDcuNzk5OTggNTIuODc5NyA3LjIxMTk4VjUuMTM1OThDNTMuMjk5NyA0LjU0Nzk4IDUzLjg3NTcgNC4zNDM5OCA1NC40OTk3IDQuMzQzOThDNTUuNTQzNyA0LjM0Mzk4IDU2LjI5OTcgNS4xNzE5OCA1Ni4yOTk3IDYuMTY3OThDNTYuMjk5NyA3LjE3NTk4IDU1LjU0MzcgOC4wMTU5OCA1NC40OTk3IDguMDE1OThaIixmaWxsOiIjNUQ2OTZGIn0pLEEoInBhdGgiLHtkOiJNNjMuMzM0NyAzLjM0Nzk4TDYxLjM5MDcgNy43NjM5OEw1OS4yNjY3IDMuMzQ3OThINTcuOTM0N0w2MC44MTQ3IDkuMDgzOThMNTkuNjI2NyAxMS43ODRINjAuOTM0N0w2NC42NTQ3IDMuMzQ3OThINjMuMzM0N1oiLGZpbGw6IiM1RDY5NkYifSksQSgicGF0aCIse2Q6Ik03MS4xNDY2IDQuMzQ2NjFDNjkuODA5MiA0LjA1MDM4IDY5LjEzMSAzLjUzMDAxIDY5LjEzMSAyLjgwMDY1QzY5LjEzMSAyLjA0NzA1IDY5Ljg1NDYgMS40NzgyMiA3MC44MTQyIDEuNDc4MjJDNzEuODAzNCAxLjQ3ODIyIDcyLjU0OTYgMi4xMDMzOSA3Mi41NDk2IDIuOTMyMVYyLjk5ODEzSDczLjkxNjVWMi45MzIxQzczLjkxNjUgMS40MTc2NCA3Mi41ODgzIDAuMjcyNzA1IDcwLjgyNzEgMC4yNzI3MDVDNjkuOTc4NCAwLjI3MjcwNSA2OS4yMDA5IDAuNTMzMTkxIDY4LjYzNzkgMS4wMDU3QzY4LjM1ODQgMS4yMzYxOSA2OC4xMzM5IDEuNTI0ODcgNjcuOTgwNSAxLjg1MTFDNjcuODI3MSAyLjE3NzMzIDY3Ljc0ODYgMi41MzMwMyA2Ny43NTA2IDIuODkyNzNDNjcuNzQ1MSAzLjIyMjU1IDY3LjgxMzcgMy41NDk0OSA2Ny45NTE1IDMuODQ5OTRDNjguMDg5NCA0LjE1MDM4IDY4LjI5MyA0LjQxNjg2IDY4LjU0NzggNC42MzAxMkM2OS4wMjE4IDUuMDQyNjYgNjkuNjk0NSA1LjM0Nzk4IDcwLjU0NjMgNS41Mzg4QzcxLjk4MDYgNS44NTUwMiA3Mi43MDc4IDYuMzkyOTYgNzIuNzA3OCA3LjEzNjg2QzcyLjcwNzggNy45NDMxNiA3MS45MTU2IDguNTUwNzYgNzAuODY4MiA4LjU1MDc2QzY5Ljc4MDQgOC41NTA3NiA2OC45NTk5IDcuODc1MzEgNjguOTU5OSA2Ljk3OTk2VjYuOTEzOTNINjcuNTkxOFY2Ljk3OTk2QzY3LjU5MTggOC41NjM0OCA2OC45OTQyIDkuNzU2ODggNzAuODUzNSA5Ljc1Njg4QzcxLjc0MjYgOS43NTY4OCA3Mi41NTg4IDkuNDg3MzEgNzMuMTUxOCA4Ljk5NjYyQzczLjQ0NiA4Ljc1ODMxIDczLjY4MjcgOC40NTgxIDczLjg0NDUgOC4xMTc5Qzc0LjAwNjMgNy43Nzc3IDc0LjA4OTEgNy40MDYxMSA3NC4wODcgNy4wMzAyNEM3NC4wODcgNS42ODU0IDczLjA5OTEgNC43ODIxNyA3MS4xNDY2IDQuMzQ2NjFaIixmaWxsOiIjNUQ2OTZGIn0pLEEoInBhdGgiLHtkOiJNNzguNzk4NiAyLjUwODA2Qzc4LjI4NzQgMi41MDE3NSA3Ny43ODIzIDIuNjE3NiA3Ny4zMjYzIDIuODQ1NzZDNzYuODcwMyAzLjA3MzkxIDc2LjQ3NjggMy40MDc1OSA3Ni4xNzk1IDMuODE4MzdWMi42NjczOEg3NC44Nzg5VjEyLjA3NTJINzYuMTc5NVY4LjQ4NzE2Qzc2LjQ3NjggOC44OTc5IDc2Ljg3MDMgOS4yMzE1MiA3Ny4zMjYzIDkuNDU5NTdDNzcuNzgyNCA5LjY4NzYzIDc4LjI4NzUgOS44MDMzNSA3OC43OTg2IDkuNzk2ODdDODAuODE2NyA5Ljc5Njg3IDgyLjMzODEgOC4yMzAzMSA4Mi4zMzgxIDYuMTUyNDZDODIuMzM4MSA0LjA3NDYyIDgwLjgxNjcgMi41MDgwNiA3OC43OTg2IDIuNTA4MDZaTTgwLjk4MzUgNi40MjI2NEM4MC45MzE2IDYuOTYyOSA4MC42OTIxIDcuNDY4NzkgODAuMzA1NiA3Ljg1NDRDNzkuOTE5IDguMjQwMDEgNzkuNDA5MyA4LjQ4MTU2IDc4Ljg2MyA4LjUzODA0Qzc4LjEzNjkgOC42MTA3NCA3Ny40NjA1IDguNDAyOTUgNzYuOTU4MyA3Ljk1NDA3Qzc2LjQ1NjEgNy41MDUxOCA3Ni4xNzk1IDYuODYzNjUgNzYuMTc5NSA2LjE1MjQ2Qzc2LjE3OTUgNC43ODQ2IDc3LjIxMjIgMy43NTI5NSA3OC41ODE1IDMuNzUyOTVDNzkuMjkwNCAzLjc1Mjk1IDc5LjkzMDYgNC4wMjE5MSA4MC4zNzc2IDQuNTEwMThDODAuODM4NyA1LjAxMTE2IDgxLjA1NCA1LjY5MDI1IDgwLjk4MzUgNi40MjI2NFoiLGZpbGw6IiM1RDY5NkYifSksQSgicGF0aCIse2Q6Ik05OC4yOTA4IDIuNjY5MlYzLjgwNzQ3Qzk3LjY3NzYgMi45Nzg3NSA5Ni43MzAyIDIuNTA4MDYgOTUuNjU4MyAyLjUwODA2QzkzLjY0ODIgMi41MDgwNiA5Mi4xMzIzIDQuMDQ2MTUgOTIuMTMyMyA2LjA4NTgyQzkyLjEzMjMgOC4xMjU1IDkzLjY0ODIgOS42NjI5OSA5NS42NTgzIDkuNjYyOTlDOTYuNzM0NSA5LjY2Mjk5IDk3LjY4MTkgOS4xOTcxNCA5OC4yOTA4IDguMzc2OTFWOC41NTE5OEM5OC4yOTA4IDkuOTY4OTEgOTcuMzkwNiAxMC44ODQzIDk1Ljk5NzQgMTAuODg0M0M5NS4wNTYxIDEwLjg4NDMgOTQuMjcxOCAxMC40NzY2IDkzLjg5OTYgOS43OTM4NEw5My44ODA2IDkuNzU4N0g5Mi41Mzg5TDkyLjU2OTUgOS44NDY1NEM5Mi43OTYxIDEwLjUxNCA5My4yMzkyIDExLjA4ODkgOTMuODMwMyAxMS40ODIyQzk0LjQyMzMgMTEuODcyMyA5NS4xNzI2IDEyLjA3ODMgOTUuOTk3NCAxMi4wNzgzQzk3LjA1NTIgMTIuMDc4MyA5Ny45NTU0IDExLjc0NTEgOTguNjAxNyAxMS4xMTU3Qzk5LjI0ODEgMTAuNDg2MiA5OS41OTE1IDkuNjAxMiA5OS41OTE1IDguNTY3NzNWMi42NjkySDk4LjI5MDhaTTk3LjU2MTEgNy44NDJDOTcuMDA5MiA4LjM2NDE4IDk2LjIyMjUgOC41ODM0OCA5NS40MDAxIDguNDQyOTRDOTQuOTEzMiA4LjM1Nzk2IDk0LjQ2NjQgOC4xMjE4NCA5NC4xMjQ1IDcuNzY4ODlDOTMuNzgyNyA3LjQxNTkzIDkzLjU2MzYgNi45NjQ1MiA5My40OTkyIDYuNDgwMTlDOTMuMzgzMyA1LjY2NTQxIDkzLjYzMSA0Ljg5MzY0IDk0LjE3ODYgNC4zNjQxOEM5NC42MzgzIDMuOTI3NDEgOTUuMjU0MiAzLjY4Nzg4IDk1Ljg5MTkgMy42OTc4MkM5Ni4wNDY0IDMuNjk3OTUgOTYuMjAwNiAzLjcxMDMxIDk2LjM1MzEgMy43MzQ3N0M5Ny4zNDU5IDMuODkzNDkgOTguMTMxNCA0LjcwNDAzIDk4LjI2MzIgNS43MTAyNEM5OC4zNzQ5IDYuNTM4MzUgOTguMTE3OSA3LjMxNDM2IDk3LjU2MTEgNy44NDJaIixmaWxsOiIjNUQ2OTZGIn0pLEEoInBhdGgiLHtkOiJNOTAuNzA1IDAuMDk5NTk3NUM5MC40NjAyIDAuMDQ2NzczIDkwLjIwNDMgMC4wOTExOTcxIDg5Ljk5MjUgMC4yMjMyNjlDODkuNzgwNiAwLjM1NTM0IDg5LjYyOTkgMC41NjQ0NTIgODkuNTcyOSAwLjgwNTQwOUM4OS41MTU5IDEuMDQ2MzcgODkuNTU3MSAxLjI5OTgyIDg5LjY4NzcgMS41MTA5OEM4OS44MTgzIDEuNzIyMTUgOTAuMDI3NyAxLjg3NDA3IDkwLjI3MDggMS45MzM5MUM5MC4zNDE1IDEuOTQ5NTQgOTAuNDEzNiAxLjk1NzQ3IDkwLjQ4NiAxLjk1NzU0QzkwLjcyIDEuOTU3OSA5MC45NDU4IDEuODczMjUgOTEuMTIwNiAxLjcxOTczQzkxLjI5NTUgMS41NjYyIDkxLjQwNyAxLjM1NDUyIDkxLjQzNDEgMS4xMjVDOTEuNDYxMSAwLjg5NTQ3IDkxLjQwMTcgMC42NjQxMzUgOTEuMjY3MyAwLjQ3NTA0NkM5MS4xMzI5IDAuMjg1OTU4IDkwLjkzMjcgMC4xNTIzMjUgOTAuNzA1IDAuMDk5NTk3NVYwLjA5OTU5NzVaIixmaWxsOiIjNUQ2OTZGIn0pLEEoInBhdGgiLHtkOiJNODkuODM2NiA4LjM5MTQzSDg4LjcxNUM4Ny45MTc4IDguMzkxNDMgODcuNDM4OSA3Ljg1NTMxIDg3LjQzODkgNi45NTY5M0M4Ny40Mzg5IDYuMDgwOTYgODcuODY4MSA1LjAzNjU5IDg4Ljc0MzIgMy43NjQ0NEw4OC43NTQ4IDMuNzQ3NDhWMy4zODgyNUw4NS4wMjcxIDIuODY3MjdDODUuMDI4NCAyLjcxNTUzIDg0Ljk4ODYgMi41NjYyMiA4NC45MTE4IDIuNDM0NzhDODQuODM1MSAyLjMwMzM1IDg0LjcyNDEgMi4xOTQ1OCA4NC41OTA1IDIuMTE5NzNDODQuMjU2MyAxLjkzOCA4My44OTA4IDEuOTM4IDgzLjU4NzkgMi4xMTM2OEM4My40MzYxIDIuMjAyMyA4My4zMTIyIDIuMzMwNzcgODMuMjMgMi40ODQ4QzgzLjE0NzcgMi42Mzg4NCA4My4xMTAzIDIuODEyNCA4My4xMjE5IDIuOTg2MThDODMuMTMzNiAzLjE1OTk2IDgzLjE5MzggMy4zMjcxNCA4My4yOTU4IDMuNDY5MTRDODMuMzk3OSAzLjYxMTE0IDgzLjUzNzkgMy43MjIzOCA4My43MDAxIDMuNzkwNDlMODIuNTQwNSA5LjYzNzUzSDgzLjgyODNMODQuODk3NyA0LjA4NTUxTDg2LjkxMTUgNC40MjExMUM4Ni4zNzAxIDUuMzgwMDcgODYuMDk1MyA2LjI3NDIxIDg2LjA5NTMgNy4wNzg2OUM4Ni4wOTUzIDguNTYzNDcgODcuMDA0MSA5LjUzNTc2IDg4LjQ3MzQgOS42Mjk2NVY5LjYzNzUzSDkxLjEzNDFWMi42OTA5OUg4OS44MzY2VjguMzkxNDNaIixmaWxsOiIjNUQ2OTZGIn0pKX0sTXQ9ZnVuY3Rpb24oKXtyZXR1cm4gZnVuY3Rpb24odCl7dmFyIGU9dC5hcHAuZGVjay5jYXJkc3x8W10sbj1lLmZpbHRlcigoZnVuY3Rpb24odCl7cmV0dXJuIHQudHlwZX0pKSxyPXQuYXBwLmRlY2suaW5kZXgsbz10LmFwcCxpPW8uc2hvd1N1cnZleUJyYW5kLGE9by5tYXJrZXRpbmdVcmwsYz1vLnNsdWdOYW1lLHM9by5zdXJ2ZXlJZCx1PWZ1bmN0aW9uKCl7cmV0dXJuIGk/QSgiYSIse3N0eWxlOiJkaXNwbGF5OiBibG9jazsgbWFyZ2luOiA1cHggMCAxMHB4IDAiLGhyZWY6IiIuY29uY2F0KGEsIj91dG1fc291cmNlPXN1cnZleV9icmFuZGluZyZ1dG1fbWVkaXVtPXdlYnNpdGUmdXRtX2NhbXBhaWduPSIpLmNvbmNhdChjLCImdXRtX2NvbnRlbnQ9IikuY29uY2F0KHMpLHRhcmdldDoiX2JsYW5rIn0sSXQpOm51bGx9O2lmKHIrMT09PWUubGVuZ3RofHwhbnx8MT09PW4ubGVuZ3RoKXJldHVybiBBKCJmb290ZXIiLHtjbGFzc05hbWU6InVsLWZvb3RlciJ9LHUpO3JldHVybiBBKCJmb290ZXIiLHtjbGFzc05hbWU6InVsLWZvb3RlciJ9LChmdW5jdGlvbigpe2lmKG4ubGVuZ3RoPjEmJm4ubGVuZ3RoPD0xMCl7dmFyIGU9bi5tYXAoKGZ1bmN0aW9uKGUsbil7cmV0dXJuIEEoInNwYW4iLHtjbGFzc05hbWU6InVsLWZvb3Rlci1idWJibGUiLGtleTpuLHN0eWxlOnI9PT1uP3tiYWNrZ3JvdW5kQ29sb3I6dC5hcHAuYm9yZGVyfTp7Ym9yZGVyQ29sb3I6dC5hcHAuYm9yZGVyfX0pfSkpO3JldHVybiBBKCJkaXYiLHtzdHlsZToibWFyZ2luLWJvdHRvbTogMTBweDsifSxlKX1yZXR1cm4gbnVsbH0pLHUpfX0sVHQ9ZnVuY3Rpb24odCl7cmV0dXJuIHQmJnQuY2FwdGlvblRleHQ/QSgicCIse2lkOnV0LGNsYXNzTmFtZTp1dH0sdC5jYXB0aW9uVGV4dCk6bnVsbH0sX3Q9ZnVuY3Rpb24odCxlKXtyZXR1cm4gQSgicCIsdD97aWQ6c3QsY2xhc3NOYW1lOnN0LHJvbGU6ImhlYWRpbmcifTp7aWQ6c3QsY2xhc3NOYW1lOnN0LHN0eWxlOiJtYXJnaW4tYm90dG9tOiAxNXB4Iixyb2xlOiJoZWFkaW5nIn0sZSl9LEx0PWZ1bmN0aW9uKHQpe3JldHVybiB0JiZ0LmJ1dHRvblRleHQ/dC5idXR0b25UZXh0OiJOZXh0In0sUnQ9ZnVuY3Rpb24odCl7cmV0dXJuIHQmJnQuc2tpcEJ1dHRvblRleHQ/dC5za2lwQnV0dG9uVGV4dDoiU2tpcCJ9LFB0PW4oOTczNDMpLE50PW4ubihQdCk7ZnVuY3Rpb24gRHQodCxlKXtlKHQpfXZhciBGdD1mdW5jdGlvbih0KXt2YXIgZT10LmJvcmRlcixuPXQubGFiZWwscj10LnNlbGVjdGVkLG89KHQuaW5kZXgsdC5pZCksaT10Lm9uU2VsZWN0LGE9dC5pc1JhZGlvLGM9dC51c2VNb2JpbGVTdHlsaW5nLHM9ZnVuY3Rpb24odCl7dmFyIG49ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImNob2ljZS1kaXYtIi5jb25jYXQobykpLHI9ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoInJhZGlvLSIuY29uY2F0KG8pKTtuJiYobi5zdHlsZS5ib3JkZXJDb2xvcj1lKSxyJiYoci5zdHlsZS5ib3JkZXJXaWR0aD0iNnB4IixyLnN0eWxlLmJvcmRlckNvbG9yPWUsci5zdHlsZS5ib3hTaGFkb3c9Im5vbmUiKX0sdT1mdW5jdGlvbih0KXt2YXIgZT1kb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiY2hvaWNlLWRpdi0iLmNvbmNhdChvKSksbj1kb2N1bWVudC5nZXRFbGVtZW50QnlJZCgicmFkaW8tIi5jb25jYXQobykpO2UmJihlLnN0eWxlLmJvcmRlckNvbG9yPSIjZTZlNmU2IiksbiYmKG4uc3R5bGUuYm9yZGVyV2lkdGg9IjFweCIsbi5zdHlsZS5ib3JkZXJDb2xvcj0iIzMyMzIzMiIsbi5zdHlsZS5ib3hTaGFkb3c9Imluc2V0IDNweCAzcHggMHB4IHJnYmEoMCwgMCwgMCwgMC4xKSIpfSxsPWZ1bmN0aW9uKHQpe3Quc3RvcFByb3BhZ2F0aW9uKCksdSgpLGkobyl9LGY9e29uY2xpY2s6ZnVuY3Rpb24odCl7cmV0dXJuIGwodCl9LG9ua2V5cHJlc3M6ZnVuY3Rpb24odCl7cmV0dXJuIGZ1bmN0aW9uKHQpezEzIT10LmtleUNvZGUmJjMyIT10LmtleUNvZGV8fGwodCl9KHQpfX07Im9udG91Y2hzdGFydCJpbiBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQ/KGYub250b3VjaHN0YXJ0PXMsZi5vbnRvdWNoY2FuY2VsPXUsZi5vbnRvdWNobW92ZT11LGYub250b3VjaGVuZD11KTooZi5vbm1vdXNlZG93bj1zLGYub25tb3VzZWxlYXZlPXUpO3ZhciBkPWE/InJhZGlvLSIuY29uY2F0KG8pOiJjaGVja2JveC0iLmNvbmNhdChvKTtyZXR1cm4gQSgiZGl2IixNKCkoe2NsYXNzTmFtZTpGKGZ0KHR0LGMpKSxpZDoiY2hvaWNlLWRpdi0iLmNvbmNhdChvKX0sZiksIWEmJkEoImRpdiIse2NsYXNzTmFtZTpudCxpZDpkLHN0eWxlOnI/e2JhY2tncm91bmRDb2xvcjplLGJvcmRlckNvbG9yOmUsYm94U2hhZG93OiJub25lIn06e30scm9sZToiY2hlY2tib3giLCJhcmlhLWxhYmVsbGVkYnkiOiIiLmNvbmNhdChzdCwiIGxhYmVsLSIpLmNvbmNhdChvKSwiYXJpYS1jaGVja2VkIjpyLHRhYmluZGV4OjB9LHImJkEoInN2ZyIse3dpZHRoOiIxMCIsaGVpZ2h0OiIxMCIsdmlld0JveDoiMCAwIDEwIDEwIixmaWxsOiJub25lIix4bWxuczoiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmcifSxBKCJwYXRoIix7ZDoiTTkuMTUzNzcgMS4zMDc3NEw0LjA3Njg1IDguMjMwODJMMS4zMDc2MiA1LjAwMDA1IixzdHJva2U6IndoaXRlIiwic3Ryb2tlLXdpZHRoIjoiMiIsInN0cm9rZS1saW5lY2FwIjoicm91bmQifSkpKSxhJiZBKCJkaXYiLHtjbGFzc05hbWU6cnQsaWQ6ZCxyb2xlOiJyYWRpbyIsImFyaWEtbGFiZWxsZWRieSI6IiIuY29uY2F0KHN0LCIgbGFiZWwtIikuY29uY2F0KG8pLHRhYmluZGV4OjB9KSxBKCJsYWJlbCIse2NsYXNzTmFtZTpGKGZ0KGV0LGMpKSxmb3I6ZCxpZDoibGFiZWwtIi5jb25jYXQobyl9LG4pKX07dmFyIFV0LEJ0PW5ldyBVaW50OEFycmF5KDE2KTtmdW5jdGlvbiB6dCgpe2lmKCFVdCYmIShVdD0idW5kZWZpbmVkIiE9dHlwZW9mIGNyeXB0byYmY3J5cHRvLmdldFJhbmRvbVZhbHVlcyYmY3J5cHRvLmdldFJhbmRvbVZhbHVlcy5iaW5kKGNyeXB0byl8fCJ1bmRlZmluZWQiIT10eXBlb2YgbXNDcnlwdG8mJiJmdW5jdGlvbiI9PXR5cGVvZiBtc0NyeXB0by5nZXRSYW5kb21WYWx1ZXMmJm1zQ3J5cHRvLmdldFJhbmRvbVZhbHVlcy5iaW5kKG1zQ3J5cHRvKSkpdGhyb3cgbmV3IEVycm9yKCJjcnlwdG8uZ2V0UmFuZG9tVmFsdWVzKCkgbm90IHN1cHBvcnRlZC4gU2VlIGh0dHBzOi8vZ2l0aHViLmNvbS91dWlkanMvdXVpZCNnZXRyYW5kb212YWx1ZXMtbm90LXN1cHBvcnRlZCIpO3JldHVybiBVdChCdCl9dmFyIFZ0PS9eKD86WzAtOWEtZl17OH0tWzAtOWEtZl17NH0tWzEtNV1bMC05YS1mXXszfS1bODlhYl1bMC05YS1mXXszfS1bMC05YS1mXXsxMn18MDAwMDAwMDAtMDAwMC0wMDAwLTAwMDAtMDAwMDAwMDAwMDAwKSQvaTtmb3IodmFyIEh0PWZ1bmN0aW9uKHQpe3JldHVybiJzdHJpbmciPT10eXBlb2YgdCYmVnQudGVzdCh0KX0scXQ9W10sV3Q9MDtXdDwyNTY7KytXdClxdC5wdXNoKChXdCsyNTYpLnRvU3RyaW5nKDE2KS5zdWJzdHIoMSkpO3ZhciBHdD1mdW5jdGlvbih0KXt2YXIgZT1hcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXT9hcmd1bWVudHNbMV06MCxuPShxdFt0W2UrMF1dK3F0W3RbZSsxXV0rcXRbdFtlKzJdXStxdFt0W2UrM11dKyItIitxdFt0W2UrNF1dK3F0W3RbZSs1XV0rIi0iK3F0W3RbZSs2XV0rcXRbdFtlKzddXSsiLSIrcXRbdFtlKzhdXStxdFt0W2UrOV1dKyItIitxdFt0W2UrMTBdXStxdFt0W2UrMTFdXStxdFt0W2UrMTJdXStxdFt0W2UrMTNdXStxdFt0W2UrMTRdXStxdFt0W2UrMTVdXSkudG9Mb3dlckNhc2UoKTtpZighSHQobikpdGhyb3cgVHlwZUVycm9yKCJTdHJpbmdpZmllZCBVVUlEIGlzIGludmFsaWQiKTtyZXR1cm4gbn07dmFyIFp0PWZ1bmN0aW9uKHQsZSxuKXt2YXIgcj0odD10fHx7fSkucmFuZG9tfHwodC5ybmd8fHp0KSgpO2lmKHJbNl09MTUmcls2XXw2NCxyWzhdPTYzJnJbOF18MTI4LGUpe249bnx8MDtmb3IodmFyIG89MDtvPDE2OysrbyllW24rb109cltvXTtyZXR1cm4gZX1yZXR1cm4gR3Qocil9O2NvbnN0ICR0PSJodHRwczovL2Nkbi5zcHJpZy5jb20iLFl0PXQ9PnQrIi1sb2FkaW5nLXNwaW5lciIsSnQ9ImhpZGRlbiIsS3Q9InZpc2libGUiLFh0PSJ1bC12aWRlby1yZWNvcmRlci1jYW1lcmEtb2ZmLWJ1dHRvbiIsUXQ9InVsLXJlY29yZGluZy1pbi1zZXNzaW9uIix0ZT1be3R5cGU6ImxpbmsiLGNvbnRlbnQ6YCR7JHR9L2RlcGVuZGVuY2llcy92aWRlb2pzLXJlY29yZC00LjUuMC5taW4uY3NzYH0se3R5cGU6InNjcmlwdCIsY29udGVudDpgJHskdH0vZGVwZW5kZW5jaWVzL1JlY29yZFJUQy01LjYuMi5qc2B9LHt0eXBlOiJzY3JpcHQiLGNvbnRlbnQ6YCR7JHR9L2RlcGVuZGVuY2llcy9hZGFwdGVyLjguMC4wLm1pbi5qc2B9LHt0eXBlOiJzY3JpcHQiLGNvbnRlbnQ6YCR7JHR9L2RlcGVuZGVuY2llcy92aWRlb2pzLXJlY29yZC00LjUuMC5taW4uanNgfSx7dHlwZToic2NyaXB0Iixjb250ZW50OmAkeyR0fS91c2VybGVhcC13ZWItdXBjaHVuay12Mi4yLjIuanNgfV0sZWU9W3t0eXBlOiJsaW5rIixjb250ZW50OmAkeyR0fS9kZXBlbmRlbmNpZXMvdmlkZW8tanMtNy4xOC4wLm1pbi5jc3NgfSx7dHlwZToic2NyaXB0Iixjb250ZW50OmAkeyR0fS9kZXBlbmRlbmNpZXMvdmlkZW8tanMtNy4xOC4wLm1pbi5qc2B9LHt0eXBlOiJzdHlsZSIsY29udGVudDoiLyogcHJvZ3Jlc3MgY29udHJvbCBzdHlsZXMgKi9cbi52aWRlby1qcyAudmpzLXByb2dyZXNzLWNvbnRyb2wgLnZqcy1wcm9ncmVzcy1ob2xkZXIge1xuICBtYXJnaW46IDAgMHB4O1xufVxuXG4udmlkZW8tanMgLnZqcy1wcm9ncmVzcy1jb250cm9sIHtcbiAgcG9zaXRpb246IGFic29sdXRlO1xuICBoZWlnaHQ6IDNweDtcbiAgd2lkdGg6IDEwMCU7XG59XG4vKiBwb3NpdGlvbiBhbmQgYWxpZ24gdGhlIGJ1dHRvbnMgYW5kIGJ1dHRvbiB0ZXh0cyAqL1xuLnVsLWNvbnRyb2wtcGFuZWwge1xuICBib3R0b206IDA7XG4gIHdpZHRoOiAxMDAlO1xuICBmbGV4LWRpcmVjdGlvbjogY29sdW1uO1xuICBiYWNrZ3JvdW5kLWNvbG9yOiB3aGl0ZTtcbiAgaGVpZ2h0OiBmaXQtY29udGVudDtcbiAgei1pbmRleDogMjtcbiAgYmFja2dyb3VuZC1jb2xvcjogI0Y4RjhGODtcbn1cblxuLnVsLWJ1dHRvbnMtcGFuZWwge1xuICBkaXNwbGF5OiBmbGV4O1xuICBjb2xvcjogYmxhY2s7XG4gIGhlaWdodDogNTBweDtcbiAgcGFkZGluZzogMnB4IDE0cHggMDtcbn1cblxuLnZpZGVvLWpzIC52anMtdm9sdW1lLXBhbmVsIHtcbiAgaGVpZ2h0OiAzMHB4O1xuICB3aWR0aDogNDBweDtcbn1cblxuLnVsLWJ1dHRvbnMtcGFuZWwgPiAudmpzLWJ1dHRvbiB7XG4gIGJhY2tncm91bmQtY29sb3I6IHJnYmEoMCwgMCwgMCwgMC4wNSk7XG4gIGJvcmRlci1yYWRpdXM6IDUwJTtcbiAgaGVpZ2h0OiAzZW07XG4gIHdpZHRoOiAzZW07XG4gIG1hcmdpbjogMCAxMHB4O1xufVxuXG5zcGFuLnVsLWJ1dHRvbi10ZXh0IHtcbiAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xuICB0cmFuc2Zvcm06IHRyYW5zbGF0ZSgwcHgsIDI1cHgpO1xuICAtbW96LXRyYW5zZm9ybTogdHJhbnNsYXRlKDFweCwgMjVweCk7XG59XG5cbiN1bC1jYW1lcmEtYnV0dG9uIHtcbiAgd2hpdGUtc3BhY2U6IG5vd3JhcDtcbn1cblxuLnVsLWluYWN0aXZlIHtcbiAgb3BhY2l0eTogMC4zO1xuICBjdXJzb3I6IGRlZmF1bHQ7XG4gIHBvaW50ZXItZXZlbnRzOiBub25lO1xufVxuXG4udmlkZW8tanMgLnZqcy12b2x1bWUtY29udHJvbC52anMtdm9sdW1lLWhvcml6b250YWwge1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAjZmZmO1xuICB6LWluZGV4OiAxO1xufVxuXG4udmpzLXZvbHVtZS1iYXIudmpzLXNsaWRlci1ob3Jpem9udGFsIC52anMtdm9sdW1lLWxldmVsIHtcbiAgYmFja2dyb3VuZC1jb2xvcjogYmxhY2s7XG59XG5cbi52aWRlby1qcyAudmpzLXZvbHVtZS1wYW5lbC52anMtdm9sdW1lLXBhbmVsLWhvcml6b250YWwudmpzLWhvdmVyLFxuLnZpZGVvLWpzIC52anMtdm9sdW1lLXBhbmVsLnZqcy12b2x1bWUtcGFuZWwtaG9yaXpvbnRhbC52anMtc2xpZGVyLWFjdGl2ZSxcbi52aWRlby1qcyAudmpzLXZvbHVtZS1wYW5lbC52anMtdm9sdW1lLXBhbmVsLWhvcml6b250YWw6YWN0aXZlIHtcbiAgd2lkdGg6IDQwcHg7XG59XG5cbi52aWRlby1qcyAudmpzLXZvbHVtZS1wYW5lbCAudmpzLXZvbHVtZS1jb250cm9sLnZqcy1zbGlkZXItYWN0aXZlLFxuLnZpZGVvLWpzIC52anMtdm9sdW1lLXBhbmVsIC52anMtdm9sdW1lLWNvbnRyb2w6YWN0aXZlLFxuLnZpZGVvLWpzIC52anMtdm9sdW1lLXBhbmVsLnZqcy1ob3ZlciAudmpzLW11dGUtY29udHJvbCB+IC52anMtdm9sdW1lLWNvbnRyb2wsXG4udmlkZW8tanMgLnZqcy12b2x1bWUtcGFuZWwudmpzLWhvdmVyIC52anMtdm9sdW1lLWNvbnRyb2wsXG4udmlkZW8tanMgLnZqcy12b2x1bWUtcGFuZWw6YWN0aXZlIC52anMtdm9sdW1lLWNvbnRyb2wsXG4udmlkZW8tanMgLnZqcy12b2x1bWUtcGFuZWw6Zm9jdXMgLnZqcy12b2x1bWUtY29udHJvbCB7XG4gIHZpc2liaWxpdHk6IHZpc2libGU7XG4gIGxlZnQ6IDQwcHg7XG4gIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgdHJhbnNpdGlvbjogdmlzaWJpbGl0eSAwLjFzLCBvcGFjaXR5IDAuMXMsIGhlaWdodCAwLjFzLCB3aWR0aCAwLjFzLCBsZWZ0IDBzLCB0b3AgMHM7XG59XG5cbi8qIHBsYXkgYnV0dG9uIGN1c3RvbWl6YXRpb24gKi9cbi52aWRlby1qcyAudmpzLXBsYXktY29udHJvbCB7XG4gIGNvbG9yOiBibGFjaztcbn1cblxuLnZpZGVvLWpzIC52anMtcGxheS1jb250cm9sIC52anMtaWNvbi1wbGFjZWhvbGRlcjpiZWZvcmUge1xuICBjb250ZW50OiB1cmwoXCJkYXRhOmltYWdlL3N2Zyt4bWwsJTNDc3ZnIHdpZHRoPScxMicgaGVpZ2h0PScxMicgdmlld0JveD0nMCAwIDEyIDEyJyBmaWxsPSdub25lJyB4bWxucz0naHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmcnJTNFJTNDcGF0aCBkPSdNMTAuNTM2MyA2LjQwMjI2TDEuOTM5NTggMTAuNzAwNkMxLjY0MDM3IDEwLjg1MDIgMS4yODgzMyAxMC42MzI2IDEuMjg4MzMgMTAuMjk4MVYxLjcwMTRDMS4yODgzMyAxLjM2Njg4IDEuNjQwMzcgMS4xNDkzMSAxLjkzOTU4IDEuMjk4OTFMMTAuNTM2MyA1LjU5NzI3QzEwLjg2OCA1Ljc2MzExIDEwLjg2OCA2LjIzNjQyIDEwLjUzNjMgNi40MDIyNlonIHN0cm9rZT0nYmxhY2snIHN0cm9rZS13aWR0aD0nMS41JyBzdHJva2UtbGluZWNhcD0ncm91bmQnLyUzRSUzQy9zdmclM0VcIik7XG59XG5cbi8qIHBvc2l0aW9uIGFuZCBzdHlsZSB0aGUgY3VycmVudCB0aW1lciAqL1xuLnVsLXRpbWUtcGFuZWwge1xuICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gIGJvdHRvbTogODBweDtcbiAgbGVmdDogMTBweDtcbiAgaGVpZ2h0OiAyMnB4O1xuICBjb2xvcjogYmxhY2s7XG4gIGJvcmRlcjogMXB4IHNvbGlkICNlMGUwZWI7XG4gIGJvcmRlci1yYWRpdXM6IDIzcHg7XG4gIGJhY2tncm91bmQtY29sb3I6IHdoaXRlO1xuICB3aWR0aDogZml0LWNvbnRlbnQ7XG59XG5cbi52aWRlby1qcyAudmpzLWN1cnJlbnQtdGltZSxcbi52anMtbm8tZmxleCAudmpzLWN1cnJlbnQtdGltZSB7XG4gIGRpc3BsYXk6IGZsZXg7XG4gIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gIHRleHQtYWxpZ246IGNlbnRlcjtcbn1cblxuLyogcmVtb3ZlIHRoZSBkb3QgcHJvZ3Jlc3MgaW5kaWNhdG9yICovXG4udmlkZW8tanMgLnZqcy1wbGF5LXByb2dyZXNzOmJlZm9yZSxcbi52aWRlby1qcyAudmpzLXZvbHVtZS1sZXZlbDpiZWZvcmUsXG4udmpzLWljb24tY2lyY2xlOmJlZm9yZSxcbi52anMtc2Vlay10by1saXZlLWNvbnRyb2wgLnZqcy1pY29uLXBsYWNlaG9sZGVyOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IG5vbmU7XG59XG5cbi52aWRlby1qcyAudmpzLW11dGUtY29udHJvbCAudmpzLWljb24tcGxhY2Vob2xkZXI6YmVmb3JlIHtcbiAgY29udGVudDogdXJsKFwiZGF0YTppbWFnZS9zdmcreG1sLCUzQ3N2ZyB3aWR0aD0nMTknIGhlaWdodD0nMTQnIGZpbGw9J25vbmUnIHhtbG5zPSdodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyclM0UlM0NwYXRoIGZpbGwtcnVsZT0nZXZlbm9kZCcgY2xpcC1ydWxlPSdldmVub2RkJyBkPSdNOC44MjUuMzI0QS43NS43NSAwIDAxOS4yNSAxdjExLjY2N2EuNzUuNzUgMCAwMS0xLjIxOS41ODVsLTMuOTYtMy4xNjlIMWEuNzUuNzUgMCAwMS0uNzUtLjc1di01YS43NS43NSAwIDAxLjc1LS43NWgzLjA3TDguMDMxLjQxNGEuNzUuNzUgMCAwMS43OTQtLjA5ek03Ljc1IDIuNTZMNC44MDIgNC45MmEuNzUuNzUgMCAwMS0uNDY5LjE2NEgxLjc1djMuNWgyLjU4M2EuNzUuNzUgMCAwMS40NjkuMTY1bDIuOTQ4IDIuMzU4VjIuNTZ6TTE0LjkxMS40N2EuNzUuNzUgMCAwMTEuMDYxIDAgOS4wODQgOS4wODQgMCAwMTAgMTIuODQ0Ljc1Ljc1IDAgMDEtMS4wNi0xLjA2IDcuNTg0IDcuNTg0IDAgMDAwLTEwLjcyNC43NS43NSAwIDAxMC0xLjA2ek0xMS45NyAzLjQxYS43NS43NSAwIDAxMS4wNiAwIDQuOTE3IDQuOTE3IDAgMDEwIDYuOTUzLjc1Ljc1IDAgMTEtMS4wNi0xLjA2IDMuNDE3IDMuNDE3IDAgMDAwLTQuODMyLjc1Ljc1IDAgMDEwLTEuMDZ6JyBmaWxsPSclMjMyNjIxMzYnLyUzRSUzQy9zdmclM0VcIik7XG59XG5cbi52aWRlby1qcyAudmpzLW11dGUtY29udHJvbC52anMtdm9sLTAgLnZqcy1pY29uLXBsYWNlaG9sZGVyOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IHVybChcImRhdGE6aW1hZ2Uvc3ZnK3htbCwlM0Nzdmcgd2lkdGg9JzE5JyBoZWlnaHQ9JzE0JyBmaWxsPSdub25lJyB4bWxucz0naHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmcnJTNFJTNDcGF0aCBkPSdNOC41IDEuMTY3TDQuMzMzIDQuNUgxdjVoMy4zMzNMOC41IDEyLjgzM1YxLjE2N3pNMTcuMTcgNC41bC01IDVNMTIuMTcgNC41bDUgNScgc3Ryb2tlPSclMjMyNjIxMzYnIHN0cm9rZS13aWR0aD0nMS41JyBzdHJva2UtbGluZWNhcD0ncm91bmQnIHN0cm9rZS1saW5lam9pbj0ncm91bmQnLyUzRSUzQy9zdmclM0VcIik7XG59XG5cbi52aWRlby1qcyAudmpzLW11dGUtY29udHJvbC52anMtdm9sLTEgLnZqcy1pY29uLXBsYWNlaG9sZGVyOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IHVybChcImRhdGE6aW1hZ2Uvc3ZnK3htbCwlM0Nzdmcgd2lkdGg9JzE5JyBoZWlnaHQ9JzE0JyB2aWV3Qm94PScwIDAgMTkgMTQnIGZpbGw9J25vbmUnIHhtbG5zPSdodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyclM0UlM0NwYXRoIGZpbGwtcnVsZT0nZXZlbm9kZCcgY2xpcC1ydWxlPSdldmVub2RkJyBkPSdNOC44MjQ4OSAwLjMyNDAzQzkuMDg0NzQgMC40NDg5MiA5LjI1IDAuNzExNzAzIDkuMjUgMS4wMDAwMVYxMi42NjY3QzkuMjUgMTIuOTU1IDkuMDg0NzQgMTMuMjE3OCA4LjgyNDg5IDEzLjM0MjdDOC41NjUwNCAxMy40Njc1IDguMjU2NjEgMTMuNDMyNCA4LjAzMTQ4IDEzLjI1MjNMNC4wNzAyNSAxMC4wODMzSDFDMC41ODU3ODYgMTAuMDgzMyAwLjI1IDkuNzQ3NTUgMC4yNSA5LjMzMzM0VjQuMzMzMzRDMC4yNSAzLjkxOTEzIDAuNTg1Nzg2IDMuNTgzMzQgMSAzLjU4MzM0SDQuMDcwMjVMOC4wMzE0OCAwLjQxNDM1NUM4LjI1NjYxIDAuMjM0MjUzIDguNTY1MDQgMC4xOTkxNCA4LjgyNDg5IDAuMzI0MDNaTTcuNzUgMi41NjA0OEw0LjgwMTg1IDQuOTE4OTlDNC42Njg4NyA1LjAyNTM4IDQuNTAzNjQgNS4wODMzNCA0LjMzMzMzIDUuMDgzMzRIMS43NVY4LjU4MzM0SDQuMzMzMzNDNC41MDM2NCA4LjU4MzM0IDQuNjY4ODcgOC42NDEzIDQuODAxODUgOC43NDc2OUw3Ljc1IDExLjEwNjJWMi41NjA0OFonIGZpbGw9JyUyMzI2MjEzNicvJTNFJTNDL3N2ZyUzRSUwQVwiKTtcbn1cblxuLnZpZGVvLWpzIC52anMtbXV0ZS1jb250cm9sLnZqcy12b2wtMiAudmpzLWljb24tcGxhY2Vob2xkZXI6YmVmb3JlIHtcbiAgY29udGVudDogdXJsKFwiZGF0YTppbWFnZS9zdmcreG1sLCUzQ3N2ZyB3aWR0aD0nMTknIGhlaWdodD0nMTQnIHZpZXdCb3g9JzAgMCAxOSAxNCcgZmlsbD0nbm9uZScgeG1sbnM9J2h0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnJyUzRSUzQ3BhdGggZmlsbC1ydWxlPSdldmVub2RkJyBjbGlwLXJ1bGU9J2V2ZW5vZGQnIGQ9J004LjgyNDg5IDAuMzI0MDNDOS4wODQ3NCAwLjQ0ODkyIDkuMjUgMC43MTE3MDMgOS4yNSAxLjAwMDAxVjEyLjY2NjdDOS4yNSAxMi45NTUgOS4wODQ3NCAxMy4yMTc4IDguODI0ODkgMTMuMzQyN0M4LjU2NTA0IDEzLjQ2NzUgOC4yNTY2MSAxMy40MzI0IDguMDMxNDggMTMuMjUyM0w0LjA3MDI1IDEwLjA4MzNIMUMwLjU4NTc4NiAxMC4wODMzIDAuMjUgOS43NDc1NSAwLjI1IDkuMzMzMzRWNC4zMzMzNEMwLjI1IDMuOTE5MTMgMC41ODU3ODYgMy41ODMzNCAxIDMuNTgzMzRINC4wNzAyNUw4LjAzMTQ4IDAuNDE0MzU1QzguMjU2NjEgMC4yMzQyNTMgOC41NjUwNCAwLjE5OTE0IDguODI0ODkgMC4zMjQwM1pNNy43NSAyLjU2MDQ4TDQuODAxODUgNC45MTg5OUM0LjY2ODg3IDUuMDI1MzggNC41MDM2NCA1LjA4MzM0IDQuMzMzMzMgNS4wODMzNEgxLjc1VjguNTgzMzRINC4zMzMzM0M0LjUwMzY0IDguNTgzMzQgNC42Njg4NyA4LjY0MTMgNC44MDE4NSA4Ljc0NzY5TDcuNzUgMTEuMTA2MlYyLjU2MDQ4WicgZmlsbD0nJTIzMjYyMTM2Jy8lM0UlM0NwYXRoIGZpbGwtcnVsZT0nZXZlbm9kZCcgY2xpcC1ydWxlPSdldmVub2RkJyBkPSdNMTEuOTY5OCAzLjQxMTI0QzEyLjI2MjcgMy4xMTgzOSAxMi43Mzc2IDMuMTE4NDYgMTMuMDMwNCAzLjQxMTRDMTMuOTUyMSA0LjMzMzQxIDE0LjQ2OTkgNS41ODM3NiAxNC40Njk5IDYuODg3NDhDMTQuNDY5OSA4LjE5MTIxIDEzLjk1MjEgOS40NDE1NiAxMy4wMzA0IDEwLjM2MzZDMTIuNzM3NiAxMC42NTY1IDEyLjI2MjcgMTAuNjU2NiAxMS45Njk4IDEwLjM2MzdDMTEuNjc2OCAxMC4wNzA5IDExLjY3NjcgOS41OTYgMTEuOTY5NiA5LjMwMzA3QzEyLjYxMDEgOC42NjIzNSAxMi45Njk5IDcuNzkzNDYgMTIuOTY5OSA2Ljg4NzQ4QzEyLjk2OTkgNS45ODE1MSAxMi42MTAxIDUuMTEyNjIgMTEuOTY5NiA0LjQ3MTlDMTEuNjc2NyA0LjE3ODk2IDExLjY3NjggMy43MDQwOSAxMS45Njk4IDMuNDExMjRaJyBmaWxsPSclMjMyNjIxMzYnLyUzRSUzQy9zdmclM0UlMEFcIik7XG59XG5cbi52aWRlby1qcyAudmpzLXZvbHVtZS1jb250cm9sOmhvdmVyIC52anMtbW91c2UtZGlzcGxheSB7XG4gIGRpc3BsYXk6IG5vbmUgIWltcG9ydGFudDtcbn1cblxuLnZpZGVvLWpzIC52anMtcGxheS1wcm9ncmVzcyB7XG4gIGJhY2tncm91bmQtY29sb3I6IGJsYWNrO1xufVxuXG4vKiBwb3NpdGlvbiB2aWRlbyBwbGF5ZXIgaW5zaWRlIHRoZSBjb250YWluZXIgKi9cbi52aWRlby1qcyAudmpzLXRlY2gge1xuICBwb3NpdGlvbjogc3RhdGljO1xufVxuXG4udmlkZW8tanMgLnZqcy10aW1lLXRvb2x0aXAge1xuICBwYWRkaW5nOiAwLjI1ZW0gMC43NWVtO1xuICBhbGlnbi1pdGVtczogY2VudGVyO1xuICBjb2xvcjogIzMzMztcbiAgYmFja2dyb3VuZDogI0ZDRkNGRDtcbiAgYm9yZGVyLXJhZGl1czogOTlweDtcbiAgdGV4dC1hbGlnbjogY2VudGVyO1xuICBib3JkZXI6IDFweCBzb2xpZCAjRTBFMEVCO1xuICBkaXNwbGF5OiBmbGV4O1xuICBhbGlnbi1pdGVtczogY2VudGVyO1xuICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjtcbiAgdG9wOiAtMjVweDtcbiAgZm9udC1zaXplOiAxMnB4ICFpbXBvcnRhbnQ7XG4gIHdpZHRoOiA1MHB4ICFpbXBvcnRhbnQ7XG59XG5cbi52aWRlby1qcyAudmpzLXBsYXktcHJvZ3Jlc3MudmpzLXNsaWRlci1iYXIgLnZqcy10aW1lLXRvb2x0aXAge1xuICB2aXNpYmlsaXR5OiBoaWRkZW4gIWltcG9ydGFudDtcbn1cblxuLnZpZGVvLWpzIC52anMtcHJvZ3Jlc3MtY29udHJvbCAudmpzLW1vdXNlLWRpc3BsYXkge1xuICB6LWluZGV4OiAyO1xufVxuXG4udWwtdmlkZW8tcGxheWVyIHtcbiAgd2lkdGg6IDEwMCU7XG4gIGRpc3BsYXk6IGZsZXg7XG4gIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XG4gIGhlaWdodDogYXV0bztcbiAgYm9yZGVyOiAxcHggc29saWQgI0U2RTZFNjtcbiAgYmFja2dyb3VuZC1jb2xvcjogd2hpdGU7XG4gIGJveC1zaXppbmc6IGJvcmRlci1ib3g7XG4gIGJvcmRlci1yYWRpdXM6IDRweDtcbiAgYmFja2dyb3VuZC1jbGlwOiBib3JkZXItYm94O1xuICBvdmVyZmxvdzogaGlkZGVuO1xufVxuXG4udmlkZW8tanMudmpzLWZ1bGxzY3JlZW46bm90KC52anMtaW9zLW5hdGl2ZS1mcykge1xuICBib3JkZXI6IG5vbmU7XG59XG5cbiN1bC1jYXJkLXZpZGVvX19wbGF5ZXJfcmVjb3JkZXItdmlkZW8tcmVjb3JkZXIudmpzLWZ1bGxzY3JlZW4ge1xuICBkaXNwbGF5OiB0YWJsZTtcbn1cblxuLnZpZGVvLWpzIGRpdi52anMtcHJvZ3Jlc3MtY29udHJvbCB7XG4gIG1hcmdpbi10b3A6IC0zcHg7XG59XG5cbi52aWRlby1qcyAudmpzLXByb2dyZXNzLWNvbnRyb2wgLnZqcy1zbGlkZXIge1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAjQjJCQkJEO1xufVxuXG4udmpzLXJlY29yZC52aWRlby1qcyAudmpzLWNvbnRyb2wudmpzLWJ1dHRvbi52anMtZnVsbHNjcmVlbi1jb250cm9sIHtcbiAgcG9zaXRpb246cmVsYXRpdmU7XG59XG5cbi8qIGZpeCBhIHN1YnRsZSBtaXNhbGlnbm1lbnQgYnVnIG9uIGNpcmN1bGFyIHBsYXkgY29udHJvbCBidXR0b25zICovXG4udmlkZW8tanMgLnZqcy1wbGF5LWNvbnRyb2wgLnZqcy1pY29uLXBsYWNlaG9sZGVyIHtcbiAgdHJhbnNmb3JtOiB0cmFuc2xhdGUoMXB4LCAycHgpO1xuICAtbW96LXRyYW5zZm9ybTogdHJhbnNsYXRlKDFweCwgNXB4KTtcbn1cblxuLnZpZGVvLWpzIC52anMtcGxheS1jb250cm9sLnZqcy1wbGF5aW5nID4gLnZqcy1pY29uLXBsYWNlaG9sZGVyIHtcbiAgdHJhbnNmb3JtOiB0cmFuc2xhdGUoMHB4LCAycHgpO1xuICAtbW96LXRyYW5zZm9ybTogdHJhbnNsYXRlKDBweCwgNHB4KTtcbn1cblxuLyogZml4IG9wcG9zaXRlIG1pc2FsaWdubWVudCBidWcgb24gbm9uY2lyY3VsYXIgYnV0dG9ucyAqL1xuLnZpZGVvLWpzIC52anMtbXV0ZS1jb250cm9sIC52anMtaWNvbi1wbGFjZWhvbGRlcjpiZWZvcmUge1xuICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVkoLTJweCk7XG59XG5cbi52aWRlby1qcyAudmpzLWZ1bGxzY3JlZW4tY29udHJvbCAudmpzLWljb24tcGxhY2Vob2xkZXI6YmVmb3JlIHtcbiAgY29udGVudDogdXJsKFwiZGF0YTppbWFnZS9zdmcreG1sLCUzQ3N2ZyB3aWR0aD0nMTYnIGhlaWdodD0nMTYnIHZpZXdCb3g9JzAgMCAxNiAxNicgZmlsbD0nbm9uZScgeG1sbnM9J2h0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnJyUzRSUzQ3BhdGggZD0nTTkuODIxNDMgMi41NDAwNEwxMi4yNjE0IDIuNTQwMDRDMTIuOTI0MiAyLjU0MDA0IDEzLjQ2MTQgMy4wNzczIDEzLjQ2MTQgMy43NDAwNEwxMy40NjE0IDYuMTgwMDQnIHN0cm9rZT0nYmxhY2snIHN0cm9rZS13aWR0aD0nMS41JyBzdHJva2UtbGluZWNhcD0ncm91bmQnIHN0cm9rZS1saW5lam9pbj0ncm91bmQnLyUzRSUzQ3BhdGggZD0nTTYuMTc5NTUgMTMuNDZMMy43Mzk1NSAxMy40NkMzLjA3NjgxIDEzLjQ2IDIuNTM5NTUgMTIuOTIyNyAyLjUzOTU1IDEyLjI2TDIuNTM5NTUgOS44MTk5Nicgc3Ryb2tlPSdibGFjaycgc3Ryb2tlLXdpZHRoPScxLjUnIHN0cm9rZS1saW5lY2FwPSdyb3VuZCcgc3Ryb2tlLWxpbmVqb2luPSdyb3VuZCcvJTNFJTNDcGF0aCBkPSdNMTIuNzc3MiAzLjIyMjY2TDkuMzY0NzUgNi42MzUxNicgc3Ryb2tlPSdibGFjaycgc3Ryb2tlLXdpZHRoPScxLjUnIHN0cm9rZS1saW5lY2FwPSdyb3VuZCcgc3Ryb2tlLWxpbmVqb2luPSdyb3VuZCcvJTNFJTNDcGF0aCBkPSdNNi4yOTQzNCA5LjcwNjA1TDIuODgxODQgMTMuMTE4Nicgc3Ryb2tlPSdibGFjaycgc3Ryb2tlLXdpZHRoPScxLjUnIHN0cm9rZS1saW5lY2FwPSdyb3VuZCcgc3Ryb2tlLWxpbmVqb2luPSdyb3VuZCcvJTNFJTNDL3N2ZyUzRVwiKTtcbn1cblxuLnZpZGVvLWpzLnZqcy1mdWxsc2NyZWVuIC52anMtZnVsbHNjcmVlbi1jb250cm9sIC52anMtaWNvbi1wbGFjZWhvbGRlcjpiZWZvcmUge1xuICBjb250ZW50OiB1cmwoXCJkYXRhOmltYWdlL3N2Zyt4bWwsJTNDc3ZnIHdpZHRoPScxNicgaGVpZ2h0PScxNicgZmlsbD0nbm9uZScgeG1sbnM9J2h0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnJyUzRSUzQ3BhdGggZD0nTTEuNTgzIDkuODEzSDUuMjVhMSAxIDAgMDExIDF2My42NjZNNS4zNzUgMTAuNjg4TDEgMTUuMDYxTTE0LjkxNyA1LjgxM0gxMS4yNWExIDEgMCAwMS0xLTFWMS4xNDZNMTUuMDYzIDFsLTQuMzc2IDQuMzc1JyBzdHJva2U9JyUyMzI2MjEzNicgc3Ryb2tlLXdpZHRoPScxLjUnIHN0cm9rZS1saW5lY2FwPSdyb3VuZCcgc3Ryb2tlLWxpbmVqb2luPSdyb3VuZCcvJTNFJTNDL3N2ZyUzRVwiKTtcbn1cblxuLnZpZGVvLWpzIC52anMtcGxheS1jb250cm9sLnZqcy1lbmRlZCAudmpzLWljb24tcGxhY2Vob2xkZXI6YmVmb3JlLCAudmlkZW8tanMgLnZqcy1pY29uLXJlcGxheTpiZWZvcmUge1xuICBjb250ZW50OiB1cmwoXCJkYXRhOmltYWdlL3N2Zyt4bWwsJTNDc3ZnIHdpZHRoPScxMicgaGVpZ2h0PScxMicgdmlld0JveD0nMCAwIDEyIDEyJyBmaWxsPSdub25lJyB4bWxucz0naHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmcnJTNFJTNDcGF0aCBkPSdNMTAuNTM2MyA2LjQwMjI2TDEuOTM5NTggMTAuNzAwNkMxLjY0MDM3IDEwLjg1MDIgMS4yODgzMyAxMC42MzI2IDEuMjg4MzMgMTAuMjk4MVYxLjcwMTRDMS4yODgzMyAxLjM2Njg4IDEuNjQwMzcgMS4xNDkzMSAxLjkzOTU4IDEuMjk4OTFMMTAuNTM2MyA1LjU5NzI3QzEwLjg2OCA1Ljc2MzExIDEwLjg2OCA2LjIzNjQyIDEwLjUzNjMgNi40MDIyNlonIHN0cm9rZT0nYmxhY2snIHN0cm9rZS13aWR0aD0nMS41JyBzdHJva2UtbGluZWNhcD0ncm91bmQnLyUzRSUzQy9zdmclM0VcIik7XG59XG5cbi52aWRlby1qcyAudmpzLXBsYXktY29udHJvbC52anMtcGxheWluZyAudmpzLWljb24tcGxhY2Vob2xkZXI6YmVmb3JlLCAudmpzLWljb24tcGF1c2U6YmVmb3JlIHtcbiAgY29udGVudDogdXJsKFwiZGF0YTppbWFnZS9zdmcreG1sLCUzQ3N2ZyB3aWR0aD0nMTYnIGhlaWdodD0nMTYnIHZpZXdCb3g9JzAgMCAxNiAxNicgZmlsbD0nbm9uZScgeG1sbnM9J2h0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnJyUzRSUzQ3JlY3QgeD0nMy42MTg4NScgeT0nMi4wNjA3NCcgd2lkdGg9JzMuMTYxODUnIGhlaWdodD0nMTEuODgnIHJ4PScwLjknIGZpbGw9J2JsYWNrJyBzdHJva2U9JyUyM0VERURFRCcgc3Ryb2tlLXdpZHRoPScwLjYnIHN0cm9rZS1saW5lY2FwPSdyb3VuZCcvJTNFJTNDcmVjdCB4PSc5LjIxNzk3JyB5PScyLjA2MDc0JyB3aWR0aD0nMy4xNjE4NScgaGVpZ2h0PScxMS44OCcgcng9JzAuOScgZmlsbD0nYmxhY2snIHN0cm9rZT0nJTIzRURFREVEJyBzdHJva2Utd2lkdGg9JzAuNicgc3Ryb2tlLWxpbmVjYXA9J3JvdW5kJy8lM0UlM0Mvc3ZnJTNFJTBBXCIpO1xuICBwYWRkaW5nOiAycHg7XG59XG5cbi52anMtZXJyb3ItZGlzcGxheSB7XG4gIGRpc3BsYXk6IG5vbmU7XG59XG5cbi51bC12aWRlby1wbGF5ZXItdmlkZW8ge1xuICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gIHRvcDogMDtcbiAgbGVmdDogMDtcbiAgd2lkdGg6IDEwMCU7XG59XG5cbi51bC12aWRlby1jb250YWluZXIge1xuICB3aWR0aDogMTAwJTtcbiAgaGVpZ2h0OiBhdXRvO1xuICBsZWZ0OiAwcHg7XG4gIHRvcDogMHB4O1xuXG4gIGJhY2tncm91bmQtY29sb3I6ICNmZmZmZmY7XG4gIGJvcmRlci1yYWRpdXM6IDRweDtcblxuICBhbGlnbi1pdGVtczogY2VudGVyO1xuICBkaXNwbGF5OiBmbGV4O1xuICBmbGV4LWRpcmVjdGlvbjogY29sdW1uO1xuXG4gIC8qIEluc2lkZSBBdXRvIExheW91dCAqL1xuXG4gIGZsZXg6IG5vbmU7XG4gIG9yZGVyOiAwO1xuICBmbGV4LWdyb3c6IDA7XG4gIG1hcmdpbjogMTBweCAwcHg7XG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcbn1cblxuLnZqcy1yZWNvcmQgYnV0dG9uLnZqcy1kZXZpY2UtYnV0dG9uLnZqcy1jb250cm9sIHtcbiAgYmFja2dyb3VuZDogcmdiYSgyNTUsIDI1NSwgMjU1LCA5Nik7XG4gIGZvbnQtZmFtaWx5OiAtYXBwbGUtc3lzdGVtLCBCbGlua01hY1N5c3RlbUZvbnQsIFwiU2Vnb2UgVUlcIiwgUm9ib3RvLCBIZWx2ZXRpY2EsIEFyaWFsLCBzYW5zLXNlcmlmLCBcIkFwcGxlIENvbG9yIEVtb2ppXCIsIFwiU2Vnb2UgVUkgRW1vamlcIiwgXCJTZWdvZSBVSSBTeW1ib2xcIjtcbiAgd2lkdGg6IDEwMCU7XG4gIGhlaWdodDogMTAwJTtcbiAgbGVmdDogMDtcbiAgdG9wOiAwO1xuICBtYXJnaW46IDA7XG4gIGJvcmRlci1yYWRpdXM6IDA7XG4gIGxpbmUtaGVpZ2h0OiAwLjY7XG4gIHBhZGRpbmc6IDEwcHg7XG4gIGRpc3BsYXk6IGZsZXg7XG4gIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XG4gIGp1c3RpZnktY29udGVudDogY2VudGVyO1xuICB6LWluZGV4OiAzO1xufVxuXG4udmpzLXJlY29yZCAudmpzLWRldmljZS1idXR0b24udmpzLWNvbnRyb2w6YmVmb3JlIHtcbiAgZm9udC1zaXplOiAxNHB4ICFpbXBvcnRhbnQ7XG4gIGNvbG9yOiAjMzMzO1xuICBjb250ZW50OiBcIllvdXIgYnJvd3NlciBuZWVkcyB0byBhY2Nlc3MgeW91ciBjYW1lcmEgYW5kIG1pY3JvcGhvbmUgZm9yIHZpZGVvIHJlY29yZGluZ1wiO1xuICBsaW5lLWhlaWdodDogMTM1JTtcbn1cblxuLnZqcy1yZWNvcmQgLnZqcy1kZXZpY2UtYnV0dG9uLnZqcy1jb250cm9sLnBlcm1pc3Npb24tZGVuaWVkOmJlZm9yZSB7XG4gIGZvbnQtc2l6ZTogMTZweCAhaW1wb3J0YW50O1xuICBjb2xvcjogIzI2MjEzNjtcbiAgY29udGVudDogXCJVbmFibGUgdG8gYWNjZXNzIHlvdXIgY2FtZXJhIGFuZCBtaWNyb3Bob25lXCI7XG59XG5cbi52anMtcmVjb3JkIC52anMtZGV2aWNlLWJ1dHRvbi52anMtY29udHJvbDphZnRlciB7XG4gIGRpc3BsYXk6IGlubGluZS1ibG9jaztcbiAgYmFja2dyb3VuZDogI0YwRjBGNTtcbiAgZm9udC1zaXplOiAxM3B4O1xuICBib3JkZXItcmFkaXVzOiA0cHg7XG4gIGNvbnRlbnQ6IFwiUmVxdWVzdCBQZXJtaXNzaW9uc1wiO1xuICBwYWRkaW5nOiAxZW0gMmVtO1xuICBjb2xvcjogIzMzMztcbiAgbWFyZ2luLXRvcDogMjBweDtcbn1cblxuLnZqcy1yZWNvcmQgLnZqcy1kZXZpY2UtYnV0dG9uLnZqcy1jb250cm9sLnBlcm1pc3Npb24tZGVuaWVkOmFmdGVyIHtcbiAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xuICBiYWNrZ3JvdW5kOiB3aGl0ZTtcbiAgZm9udC1zaXplOiAxM3B4O1xuICBjb250ZW50OiBcIlBsZWFzZSBnbyB0byB5b3VyIGJyb3dzZXIgc2V0dGluZ3MgYW5kIHVwZGF0ZSBwZXJtaXNzaW9ucyB0byBlbmFibGUgcmVjb3JkaW5nXCI7XG4gIHBhZGRpbmc6IDFlbTtcbiAgY29sb3I6ICM0QjU3NUQ7XG4gIG1hcmdpbjogNXB4O1xuICBsaW5lLWhlaWdodDogMTM1JTtcbiAgdGV4dC1hbGlnbjogY2VudGVyO1xufVxuXG4udmpzLWNvbnRyb2wudmpzLWJ1dHRvbi51bC12aWRlby1yZWNvcmRlci1kZWxldGUtYnV0dG9uLCAudmpzLWNvbnRyb2wudmpzLWJ1dHRvbi51bC12aWRlby1yZWNvcmRlci10b2dnbGUtYnV0dG9uLCAudmpzLWNvbnRyb2wudmpzLWJ1dHRvbi51bC12aWRlby1yZWNvcmRlci1jYW1lcmEtb2ZmLWJ1dHRvbi1hdWRpby1vbmx5LCAudmpzLWNvbnRyb2wudmpzLWJ1dHRvbi51bC12aWRlby1yZWNvcmRlci1jYW1lcmEtb2ZmLWJ1dHRvbiB7XG4gIGN1cnNvcjogcG9pbnRlcjtcbn1cblxuLnVsLXZpZGVvLXJlY29yZGVyLWRlbGV0ZS1idXR0b24gLnZqcy1pY29uLXBsYWNlaG9sZGVyOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IHVybChcImRhdGE6aW1hZ2Uvc3ZnK3htbCwlM0Nzdmcgd2lkdGg9JzE2JyBoZWlnaHQ9JzE2JyB2aWV3Qm94PScwIDAgMTYgMTYnIGZpbGw9J25vbmUnIHhtbG5zPSdodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyclM0UlM0NwYXRoIGQ9J005LjIxMjM0IDcuMzc1NDlWMTEuMTE5M00yLjUzOTMxIDQuMjU1OTVIMTMuNDU5M0gyLjUzOTMxWk01LjU3MjM0IDQuMjU1OTVWMy4wMDgzM0M1LjU3MjIyIDIuODQ0MzMgNS42MDM1NCAyLjY4MTkyIDUuNjY0NSAyLjUzMDM4QzUuNzI1NDYgMi4zNzg4NCA1LjgxNDg4IDIuMjQxMTUgNS45Mjc2MiAyLjEyNTE5QzYuMDQwMzcgMi4wMDkyMiA2LjE3NDI0IDEuOTE3MjYgNi4zMjE1OCAxLjg1NDU2QzYuNDY4OTIgMS43OTE4NSA2LjYyNjgzIDEuNzU5NjQgNi43ODYyOCAxLjc1OTc3SDkuMjEyMzRDOS4zNzE3OSAxLjc1OTY0IDkuNTI5NyAxLjc5MTg1IDkuNjc3MDMgMS44NTQ1NkM5LjgyNDM3IDEuOTE3MjYgOS45NTgyNCAyLjAwOTIyIDEwLjA3MSAyLjEyNTE5QzEwLjE4MzcgMi4yNDExNSAxMC4yNzMyIDIuMzc4ODQgMTAuMzM0MSAyLjUzMDM4QzEwLjM5NTEgMi42ODE5MiAxMC40MjY0IDIuODQ0MzMgMTAuNDI2MyAzLjAwODMzVjQuMjU1OTVINS41NzIzNFpNMTIuMjQ2MyA0LjI1NTk1VjEyLjk5MTJDMTIuMjQ2MyAxMy4zMjIzIDEyLjExODQgMTMuNjM5OSAxMS44OTA3IDEzLjg3NDFDMTEuNjYzMSAxNC4xMDgyIDExLjM1NDMgMTQuMjM5OCAxMS4wMzIzIDE0LjIzOThINC45NjYyOEM0LjY0NDMyIDE0LjIzOTggNC4zMzU1NSAxNC4xMDgyIDQuMTA3ODkgMTMuODc0MUMzLjg4MDIzIDEzLjYzOTkgMy43NTIzNCAxMy4zMjIzIDMuNzUyMzQgMTIuOTkxMlY0LjI1NTk1SDEyLjI0NjNaTTYuNzg2MjggNy4zNzU0OVYxMS4xMTkzVjcuMzc1NDlaJyBzdHJva2U9J2JsYWNrJyBzdHJva2Utd2lkdGg9JzEuNScgc3Ryb2tlLWxpbmVjYXA9J3JvdW5kJyBzdHJva2UtbGluZWpvaW49J3JvdW5kJy8lM0UlM0Mvc3ZnJTNFJTBBXCIpO1xufVxuXG4udWwtdmlkZW8tcmVjb3JkZXItdG9nZ2xlLWJ1dHRvbiAudmpzLWljb24tcGxhY2Vob2xkZXI6YmVmb3JlIHtcbiAgY29udGVudDogdXJsKFwiZGF0YTppbWFnZS9zdmcreG1sLCUzQ3N2ZyB3aWR0aD0nMTYnIGhlaWdodD0nMTYnIHZpZXdCb3g9JzAgMCAxNiAxNicgZmlsbD0nbm9uZScgeG1sbnM9J2h0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnJyUzRSUzQ3BhdGggZD0nTTggMEMxMi40MTgzIDAgMTYgMy41ODE3MiAxNiA4QzE2IDEyLjQxODMgMTIuNDE4MyAxNiA4IDE2QzMuNTgxNzIgMTYgMCAxMi40MTgzIDAgOEMwIDMuNTgxNzIgMy41ODE3MiAwIDggMFonIGZpbGw9JyUyM0QxNTE1MycvJTNFJTNDL3N2ZyUzRVwiKTtcbn1cblxuLnVsLXZpZGVvLXJlY29yZGVyLXRvZ2dsZS1idXR0b24udWwtcmVjb3JkaW5nLWluLXNlc3Npb24gLnZqcy1pY29uLXBsYWNlaG9sZGVyOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IHVybChcImRhdGE6aW1hZ2Uvc3ZnK3htbCwlM0Nzdmcgd2lkdGg9JzEyJyBoZWlnaHQ9JzEyJyB2aWV3Qm94PScwIDAgMTIgMTInIGZpbGw9J25vbmUnIHhtbG5zPSdodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyclM0UlM0NwYXRoIGQ9J00xMiAxMEwxMiAyQzEyIDAuODk1NDMgMTEuMTA0NiAtNC44NTM5NmUtMDcgMTAgLTQuMzcxMTRlLTA3TDIgLTguNzQyMjhlLTA4QzAuODk1NDMgLTMuOTE0MDVlLTA4IC00Ljg1Mzk2ZS0wNyAwLjg5NTQzMSAtNC4zNzExNGUtMDcgMkwtOC43NDIyOGUtMDggMTBDLTMuOTE0MDVlLTA4IDExLjEwNDYgMC44OTU0MzEgMTIgMiAxMkwxMCAxMkMxMS4xMDQ2IDEyIDEyIDExLjEwNDYgMTIgMTBaJyBmaWxsPSclMjNEMTUxNTMnLyUzRSUzQy9zdmclM0UlMEFcIik7XG59XG5cbi51bC12aWRlby1yZWNvcmRlci1kZWxldGUtYnV0dG9uIC52anMtaWNvbi1wbGFjZWhvbGRlciwgLnVsLXZpZGVvLXJlY29yZGVyLXRvZ2dsZS1idXR0b24gLnZqcy1pY29uLXBsYWNlaG9sZGVyIHtcbiAgdHJhbnNmb3JtOiB0cmFuc2xhdGUoMHB4LCA3cHgpO1xuICAtbW96LXRyYW5zZm9ybTogdHJhbnNsYXRlKDBweCwgNXB4KTtcbn1cblxuLnVsLXJlY29yZGluZy1pbi1zZXNzaW9uLnVsLXZpZGVvLXJlY29yZGVyLXRvZ2dsZS1idXR0b24gLnZqcy1pY29uLXBsYWNlaG9sZGVyIHtcbiAgdHJhbnNmb3JtOiB0cmFuc2xhdGUoMHB4LCA1cHgpO1xufVxuXG4udWwtdmlkZW8tcmVjb3JkZXItY2FtZXJhLW9mZi1idXR0b24gLnZqcy1pY29uLXBsYWNlaG9sZGVyIHtcbiAgdHJhbnNmb3JtOiB0cmFuc2xhdGUoMXB4LCA3cHgpO1xuICAtbW96LXRyYW5zZm9ybTogdHJhbnNsYXRlKDFweCwgNnB4KTtcbn1cblxuLnVsLXZpZGVvLXJlY29yZGVyLWNhbWVyYS1vZmYtYnV0dG9uLWF1ZGlvLW9ubHkgLnZqcy1pY29uLXBsYWNlaG9sZGVyIHtcbiAgdHJhbnNmb3JtOiBzY2FsZSgwLjc1KSB0cmFuc2xhdGUoMXB4LCA4cHgpO1xuICAtbW96LXRyYW5zZm9ybTogc2NhbGUoMC43NSkgdHJhbnNsYXRlKDFweCwgOHB4KTtcbn1cblxuLyogZml4IGEgc3VidGxlIG1pc2FsaWdubWVudCBidWcgZm9yIGZ1bGwgc2NyZWVuIGJ1dHRvbnMgKi9cbi52anMtZnVsbHNjcmVlbiAudWwtcmVjb3JkaW5nLWluLXNlc3Npb24gLnZqcy1pY29uLXBsYWNlaG9sZGVyIHtcbiAgdHJhbnNmb3JtOiB0cmFuc2xhdGUoMHB4LCA2cHgpO1xuICAtbW96LXRyYW5zZm9ybTogdHJhbnNsYXRlKDBweCwgNnB4KTtcbn1cblxuLnVsLXZpZGVvLXJlY29yZGVyLWNhbWVyYS1vZmYtYnV0dG9uIC52anMtaWNvbi1wbGFjZWhvbGRlcjpiZWZvcmUge1xuICBjb250ZW50OiB1cmwoXCJkYXRhOmltYWdlL3N2Zyt4bWwsJTNDc3ZnIHdpZHRoPScxNicgaGVpZ2h0PScxNicgdmlld0JveD0nMCAwIDE2IDE2JyBmaWxsPSdub25lJyB4bWxucz0naHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmcnJTNFJTNDZyBjbGlwLXBhdGg9J3VybCglMjNjbGlwMF8yNjQ1XzQ2NTQpJyUzRSUzQ3BhdGggZD0nTTE1LjE0OTEgNC43NUwxMC41OTkxIDhMMTUuMTQ5MSAxMS4yNVY0Ljc1Wicgc3Ryb2tlPSdibGFjaycgc3Ryb2tlLXdpZHRoPScxLjUnIHN0cm9rZS1saW5lY2FwPSdyb3VuZCcgc3Ryb2tlLWxpbmVqb2luPSdyb3VuZCcvJTNFJTNDcGF0aCBkPSdNOS4yOTkxMiAzLjQ1MDJIMi4xNDkxMkMxLjQzMTE1IDMuNDUwMiAwLjg0OTEyMSA0LjAzMjIzIDAuODQ5MTIxIDQuNzUwMlYxMS4yNTAyQzAuODQ5MTIxIDExLjk2ODIgMS40MzExNSAxMi41NTAyIDIuMTQ5MTIgMTIuNTUwMkg5LjI5OTEyQzEwLjAxNzEgMTIuNTUwMiAxMC41OTkxIDExLjk2ODIgMTAuNTk5MSAxMS4yNTAyVjQuNzUwMkMxMC41OTkxIDQuMDMyMjMgMTAuMDE3MSAzLjQ1MDIgOS4yOTkxMiAzLjQ1MDJaJyBzdHJva2U9J2JsYWNrJyBzdHJva2Utd2lkdGg9JzEuNScgc3Ryb2tlLWxpbmVjYXA9J3JvdW5kJyBzdHJva2UtbGluZWpvaW49J3JvdW5kJy8lM0UlM0MvZyUzRSUzQ2RlZnMlM0UlM0NjbGlwUGF0aCBpZD0nY2xpcDBfMjY0NV80NjU0JyUzRSUzQ3JlY3Qgd2lkdGg9JzE1LjYnIGhlaWdodD0nMTUuNicgZmlsbD0nd2hpdGUnIHRyYW5zZm9ybT0ndHJhbnNsYXRlKDAuMTk5OTUxIDAuMjAwMTk1KScvJTNFJTNDL2NsaXBQYXRoJTNFJTNDL2RlZnMlM0UlM0Mvc3ZnJTNFXCIpO1xufVxuXG4udWwtdmlkZW8tcmVjb3JkZXItY2FtZXJhLW9mZi1idXR0b24tYXVkaW8tb25seSAudmpzLWljb24tcGxhY2Vob2xkZXI6YmVmb3JlIHtcbiAgY29udGVudDogdXJsKFwiZGF0YTppbWFnZS9zdmcreG1sLCUzQ3N2ZyB3aWR0aD0nMjInIGhlaWdodD0nMTUnIGZpbGw9J25vbmUnIHhtbG5zPSdodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyclM0UlM0NwYXRoIGZpbGwtcnVsZT0nZXZlbm9kZCcgY2xpcC1ydWxlPSdldmVub2RkJyBkPSdNLjc1IDNBMi43NSAyLjc1IDAgMDEzLjUuMjVoOS4wODFBMi43NSAyLjc1IDAgMDExNS4zMzEgM3Y5YTIuNzUgMi43NSAwIDAxLTIuNzUgMi43NUgzLjVBMi43NSAyLjc1IDAgMDEuNzUgMTJWM3pNMy41IDEuNzVjLS42OSAwLTEuMjUuNTYtMS4yNSAxLjI1djljMCAuNjkuNTYgMS4yNSAxLjI1IDEuMjVoOS4wODFjLjY5IDAgMS4yNS0uNTYgMS4yNS0xLjI1VjNjMC0uNjktLjU2LTEuMjUtMS4yNS0xLjI1SDMuNXonIGZpbGw9JyUyMzI2MjEzNicvJTNFJTNDcGF0aCBmaWxsLXJ1bGU9J2V2ZW5vZGQnIGNsaXAtcnVsZT0nZXZlbm9kZCcgZD0nTTE0LjUzIDIuMDNsLTEyIDEyLTEuMDYtMS4wNiAxMi0xMiAxLjA2IDEuMDZ6TTIwLjg3IDEuNTI1YS43NS43NSAwIDAxLjM4LjY1MnYxMC41ODhhLjc1Ljc1IDAgMDEtMS4xMzQuNjQ0bC01LjkyLTMuNTNhLjc1Ljc1IDAgMDEtLjM2NS0uNjQzdi0zLjUzYS43NS43NSAwIDAxLjM2Ni0uNjQ0bDUuOTE5LTMuNTNhLjc1Ljc1IDAgMDEuNzU0LS4wMDd6bS01LjUzOSA0LjYwN1Y4LjgxbDQuNDE5IDIuNjM1VjMuNDk3bC00LjQxOSAyLjYzNXonIGZpbGw9JyUyMzI2MjEzNicvJTNFJTNDL3N2ZyUzRVwiKTtcbn1cblxuLnVsLXVwbG9hZC1wcm9ncmVzcy1sYWJlbCB7XG4gIHBhZGRpbmc6IDAuMTVlbSAwLjc1ZW07XG4gIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gIGZvbnQtc2l6ZTogMTJweDtcbiAgY29sb3I6ICMzMzM7XG4gIGJhY2tncm91bmQ6ICNGQ0ZDRkQ7XG4gIGJvcmRlci1yYWRpdXM6IDk5cHg7XG4gIHRleHQtYWxpZ246IGNlbnRlcjtcbiAgYm9yZGVyOiAxcHggc29saWQgI0UwRTBFQjtcbiAgZGlzcGxheTogZmxleDtcbiAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7XG4gIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgYm90dG9tOiA3NXB4O1xuICBsZWZ0OiBjYWxjKDUwJSAtIDY1cHgpO1xuICB3aWR0aDogMTMwcHg7XG4gIHotaW5kZXg6IDU7XG59XG5cbi51bC11cGxvYWQtcHJvZ3Jlc3MtbGFiZWxfX3RpbWUge1xuICBkaXNwbGF5OiBpbmxpbmUtZmxleDtcbiAgbWFyZ2luLWxlZnQ6IDAuOGVtO1xuICBhbGlnbi1pdGVtczogY2VudGVyO1xufVxuXG4udWwtdXBsb2FkLXByb2dyZXNzLWxhYmVsX190aW1lOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXCI7XG4gIGRpc3BsYXk6IGlubGluZS1mbGV4O1xuICB3aWR0aDogMXB4O1xuICBoZWlnaHQ6IDEycHg7XG4gIGJhY2tncm91bmQtY29sb3I6ICNFMEUwRUI7XG4gIG1hcmdpbi1yaWdodDogMC44ZW07XG59XG5cbkBrZXlmcmFtZXMgZ3JvdyB7XG4gIDAlIHtcbiAgICB0cmFuc2Zvcm06IHNjYWxlKDEpO1xuICAgIGJhY2tncm91bmQtY29sb3I6ICNFRUVDRkM7XG4gIH1cbiAgNTAlICB7XG4gICAgdHJhbnNmb3JtOiBzY2FsZSgxLjIpO1xuICAgIGJhY2tncm91bmQtY29sb3I6ICNFMURGRjQ7XG4gIH1cbiAgMTAwJSB7XG4gICAgdHJhbnNmb3JtOiBzY2FsZSgxKTtcbiAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjRUVFQ0ZDO1xuICB9XG59XG5cbi51bC1hdWRpby1yZWNvcmRlci1wbGFjZWhvbGRlcjpiZWZvcmUge1xuICB3aWR0aDogODBweDtcbiAgaGVpZ2h0OiA4MHB4O1xuICBib3JkZXItcmFkaXVzOiAxMjBweDtcbiAgYmFja2dyb3VuZC1jb2xvcjogI0VFRUNGQztcbiAgY29udGVudDogXCJcIjtcbiAgcG9zaXRpb246IGFic29sdXRlO1xuICBsZWZ0OiBjYWxjKDUwJSAtIDQwcHgpO1xuICB0b3A6IGNhbGMoNTAlIC0gNDBweCk7XG4gIGFuaW1hdGlvbjogNnMgaW5maW5pdGUgZ3JvdztcbiAgdHJhbnNmb3JtLW9yaWdpbjogNTAlIDYwJTtcbn1cblxuLnVsLWF1ZGlvLXJlY29yZGVyLXBsYWNlaG9sZGVyOmFmdGVyIHtcbiAgY29udGVudDogdXJsKFwiZGF0YTppbWFnZS9zdmcreG1sLCUzQ3N2ZyB3aWR0aD0nOTgnIGhlaWdodD0nOTgnIGZpbGw9J25vbmUnIHhtbG5zPSdodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyclM0UlM0NtYXNrIGlkPSdhJyBtYXNrVW5pdHM9J3VzZXJTcGFjZU9uVXNlJyB4PScwJyB5PScwJyB3aWR0aD0nOTgnIGhlaWdodD0nOTgnJTNFJTNDY2lyY2xlIGN4PSc0OScgY3k9JzQ5JyByPSc0OScgZmlsbD0nJTIzRURFQ0Y4Jy8lM0UlM0MvbWFzayUzRSUzQ2cgbWFzaz0ndXJsKCUyM2EpJyUzRSUzQ2NpcmNsZSBjeD0nNDknIGN5PSc0OScgcj0nNTAnIGZpbGw9JyUyMzY0NUNDMicvJTNFJTNDcGF0aCBmaWxsLXJ1bGU9J2V2ZW5vZGQnIGNsaXAtcnVsZT0nZXZlbm9kZCcgZD0nTTExLjQyMiA4MS44MTJjNS40MDUtMTUuNTQ3IDIwLjE4Ny0yNi43MDYgMzcuNTc2LTI2LjcwNiAxNy4zOSAwIDMyLjE3MiAxMS4xNTkgMzcuNTc3IDI2LjcwNy05LjE2NCAxMC40My0yMi42MDEgMTcuMDEzLTM3LjU3NiAxNy4wMTMtMTQuOTc2IDAtMjguNDE0LTYuNTgzLTM3LjU3Ny0xNy4wMTR6JyBmaWxsPSclMjNmZmYnIGZpbGwtb3BhY2l0eT0nLjYnLyUzRSUzQ2NpcmNsZSBjeD0nNDknIGN5PScyOScgcj0nMTcnIGZpbGw9JyUyM2ZmZicgZmlsbC1vcGFjaXR5PScuNycvJTNFJTNDL2clM0UlM0Mvc3ZnJTNFXCIpO1xuICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gIGxlZnQ6IDUwJTtcbiAgdG9wOiA1MCU7XG4gIHRyYW5zZm9ybTogdHJhbnNsYXRlKC01MCUsIC01MCUpO1xuICB0cmFuc2Zvcm06IHRyYW5zbGF0ZSgtNTAlLCAtNTAlKSBzY2FsZSgwLjYpO1xufVxuXG4udWwtYXVkaW8tcmVjb3JkZXItcGxhY2Vob2xkZXIge1xuICBtaW4taGVpZ2h0OiAxNTBweDtcbiAgd2lkdGg6IDEwMCU7XG4gIGJhY2tncm91bmQtY29sb3I6ICNmY2ZjZmQ7XG4gIGRpc3BsYXk6IGJsb2NrO1xuICBwb3NpdGlvbjogcmVsYXRpdmU7XG59XG5cbi52anMtZnVsbHNjcmVlbiAudWwtYXVkaW8tcmVjb3JkZXItcGxhY2Vob2xkZXIge1xuICB2ZXJ0aWNhbC1hbGlnbjogbWlkZGxlO1xuICBkaXNwbGF5OiB0YWJsZS1jZWxsO1xufVxuXG5Aa2V5ZnJhbWVzIGdyb3cge1xuICAwJSB7XG4gICAgdHJhbnNmb3JtOiBzY2FsZSgxKTtcbiAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjRUVFQ0ZDO1xuICB9XG4gIDUwJSAge1xuICAgIHRyYW5zZm9ybTogc2NhbGUoMS4yKTtcbiAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjRTFERkY0O1xuICB9XG4gIDEwMCUge1xuICAgIHRyYW5zZm9ybTogc2NhbGUoMSk7XG4gICAgYmFja2dyb3VuZC1jb2xvcjogI0VFRUNGQztcbiAgfVxufVxuXG4udmpzLWZ1bGxzY3JlZW4gLnVsLWNvbnRyb2wtcGFuZWwge1xuICBoZWlnaHQ6IDgwcHg7XG4gIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgYm90dG9tOiAwO1xuICBsZWZ0OiAwO1xuICB3aWR0aDogMTAwJTtcbiAgbWF4LXdpZHRoOiAxMDAlO1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAjRjhGOEY4O1xufVxuXG4udWwtYnV0dG9ucy1wYW5lbCB7XG4gIG1hcmdpbjogMTBweDtcbiAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7XG59XG5cbi52anMtcGxheWJhY2stcmF0ZSAudmpzLXBsYXliYWNrLXJhdGUtdmFsdWUge1xuICBmb250LXNpemU6IDEycHg7XG4gIHRyYW5zZm9ybTogdHJhbnNsYXRlKDAsIDNweCk7XG59XG5cbi52anMtcGxheWJhY2stcmF0ZSAudmpzLW1lbnUge1xuICB0cmFuc2Zvcm06IHRyYW5zbGF0ZSgtNnB4LCAxMnB4KTtcbiAgcG9zaXRpb246IHVuc2V0O1xufVxuXG4udmpzLW1lbnUtYnV0dG9uLXBvcHVwIC52anMtbWVudSAudmpzLW1lbnUtY29udGVudCB7XG4gIGJhY2tncm91bmQtY29sb3I6IHdoaXRlO1xuICBib3JkZXI6IDFweCBzb2xpZCByZ2JhKDAsIDAsIDAsIDAuMSk7XG4gIGJveC1zaXppbmc6IGJvcmRlci1ib3g7XG4gIGJvcmRlci1yYWRpdXM6IDRweDtcbn1cblxuLnZqcy1tZW51LWJ1dHRvbi1wb3B1cCAudmpzLW1lbnUge1xuICBtYXJnaW4tYm90dG9tOiB1bnNldDtcbn1cblxuLnZqcy1tZW51IGxpIHtcbiAgZm9udC1zaXplOiAxMnB4O1xuICBwYWRkaW5nOiA1cHggMDtcbn1cblxuLnZqcy1tZW51IGxpLnZqcy1zZWxlY3RlZCB7XG4gIGNvbG9yOiBsaWdodGdyYXk7XG59XG5cbi52anMtbWVudSBsaS52anMtbWVudS1pdGVtOmhvdmVyIHtcbiAgYmFja2dyb3VuZC1jb2xvcjogcmdiYSgwLCAwLCAwLCAwLjA1KTtcbn1cblxuLnZqcy1mdWxsc2NyZWVuIC51bC1idXR0b25zLXBhbmVsIHtcbiAgdG9wOiBjYWxjKDUwJSAtIDMwcHgpO1xuICBwb3NpdGlvbjogcmVsYXRpdmU7XG59XG5cbi52anMtZnVsbHNjcmVlbiAudmpzLXJlY29yZC1pbmRpY2F0b3IudmpzLWNvbnRyb2wge1xuICBib3R0b206IDkwcHggIWltcG9ydGFudDtcbn1cblxuLnZqcy1yZWNvcmQudmlkZW8tanMgZGl2LnZqcy1jb250cm9sLnZqcy1yZWNvcmQtaW5kaWNhdG9yIHtcbiAgcGFkZGluZzogMC4zZW0gMC43NWVtIDAuMTVlbSAxNXB4O1xuICBhbGlnbi1pdGVtczogY2VudGVyO1xuICBmb250LXNpemU6IDEycHg7XG4gIGNvbG9yOiAjMzMzO1xuICBiYWNrZ3JvdW5kOiAjRkNGQ0ZEO1xuICBib3JkZXItcmFkaXVzOiA5OXB4O1xuICB0ZXh0LWFsaWduOiBjZW50ZXI7XG4gIGJvcmRlcjogMXB4IHNvbGlkICNFMEUwRUI7XG4gIGRpc3BsYXk6IGZsZXg7XG4gIGp1c3RpZnktY29udGVudDogY2VudGVyO1xuICBhbGlnbi1pdGVtczogY2VudGVyO1xuICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gIGJvdHRvbTogNzVweDtcbiAgdG9wOiBhdXRvO1xuICBsZWZ0OiBjYWxjKDUwJSAtIDIxcHgpO1xuICB3aWR0aDogNDNweDtcbiAgaGVpZ2h0OiAxNnB4O1xuICB6LWluZGV4OiA0O1xufVxuXG4udmpzLXJlY29yZC52aWRlby1qcyBkaXYudmpzLWNvbnRyb2wudmpzLXJlY29yZC1pbmRpY2F0b3I6YWZ0ZXIge1xuICBjb250ZW50OiBcIlwiO1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAjRUI1NzU3O1xuICB3aWR0aDogNnB4O1xuICBoZWlnaHQ6IDZweDtcbiAgYm9yZGVyLXJhZGl1czogOHB4O1xuICBhbmltYXRpb246IG5vbmU7XG4gIHRvcDogNHB4O1xuICBsZWZ0OiA1cHg7XG59XG5cbi52anMtcmVjb3JkLnZpZGVvLWpzIGRpdi52anMtY29udHJvbC52anMtcmVjb3JkLWluZGljYXRvcjpiZWZvcmUge1xuICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gIGZvbnQtc2l6ZTogOXB4O1xuICBhbmltYXRpb246IG5vbmU7XG4gIG9wYWNpdHk6IDE7XG4gIGNvbG9yOiAjMzMzO1xuICB0b3A6IGF1dG87XG4gIGxlZnQ6IGF1dG87XG59XG5cbi51bC12aWRlby1wbGF5ZXItbG9hZGluZyB7XG4gIGRpc3BsYXk6IGlubGluZS1ibG9jaztcbiAgcG9zaXRpb246IHJlbGF0aXZlO1xuICB3aWR0aDogNnJlbTtcbiAgaGVpZ2h0OiA2cmVtO1xuXG59XG4udWwtdmlkZW8tcGxheWVyLWxvYWRpbmcgZGl2IHtcbiAgYm94LXNpemluZzogYm9yZGVyLWJveDtcbiAgcG9zaXRpb246IGFic29sdXRlO1xuICBkaXNwbGF5OiBibG9jaztcbiAgd2lkdGg6IDgwJTtcbiAgaGVpZ2h0OiA4MCU7XG4gIG1hcmdpbjogNXB4O1xuICBib3JkZXI6IDVweCBzb2xpZCAjNjY2O1xuICBib3JkZXItcmFkaXVzOiA1MCU7XG4gIGFuaW1hdGlvbjogbGRzLXJpbmcgMS4ycyBjdWJpYy1iZXppZXIoMC41LCAwLCAwLjUsIDEpIGluZmluaXRlO1xuICBib3JkZXItY29sb3I6ICM2NjYgdHJhbnNwYXJlbnQgdHJhbnNwYXJlbnQgdHJhbnNwYXJlbnQ7XG59XG5cbi5maXJzdCB7XG4gIGFuaW1hdGlvbi1kZWxheTogLTAuNDVzO1xufVxuLnNlY29uZCB7XG4gIGFuaW1hdGlvbi1kZWxheTogLTAuM3M7XG59XG4udGhpcmQge1xuICBhbmltYXRpb24tZGVsYXk6IC0wLjE1cztcbn1cblxuQGtleWZyYW1lcyBsZHMtcmluZyB7XG4gIDAlIHtcbiAgICB0cmFuc2Zvcm06IHJvdGF0ZSgwZGVnKTtcbiAgfVxuICAxMDAlIHtcbiAgICB0cmFuc2Zvcm06IHJvdGF0ZSgzNjBkZWcpO1xuICB9XG59XG5cbi51bC12aWRlby1idG4ge1xuICB3aWR0aDogMTAwJTtcbiAgYm9yZGVyOiAxcHggc29saWQgI0U2RTZFNjtcbiAgYm9yZGVyLXJhZGl1czogNHB4O1xuICBiYWNrZ3JvdW5kLWNvbG9yOiByZ2JhKDAsIDAsIDAsIDAuMDIpO1xuICBwYWRkaW5nOiA4cHg7XG4gIGZvbnQtd2VpZ2h0OiA1MDA7XG4gIGZvbnQtc2l6ZTogMTVweDtcbn1cblxuLnVsLXJlY29yZC1yZXNwb25zZS1idG46YmVmb3JlLCAudWwtcmVjb3JkLXJlc3BvbnNlLWJ0bjphZnRlciwgLnVsLWJhY2stcXVlc3Rpb24tYnRuOmJlZm9yZSwgLnVsLWJhY2stcXVlc3Rpb24tYnRuOmFmdGVyIHtcbiAgbWFyZ2luOiAwIDVweDtcbiAgdmVydGljYWwtYWxpZ246IG1pZGRsZTtcbn1cblxuLnVsLXJlY29yZC1yZXNwb25zZS1idG46YmVmb3JlIHtcbiAgY29udGVudDogdXJsKFwiZGF0YTppbWFnZS9zdmcreG1sLCUzQ3N2ZyB3aWR0aD0nMTYnIGhlaWdodD0nMTYnIHZpZXdCb3g9JzAgMCAxNiAxNicgZmlsbD0nbm9uZScgeG1sbnM9J2h0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnJyUzRSUzQ2cgY2xpcC1wYXRoPSd1cmwoJTIzY2xpcDBfMjY0NV80NjU0KSclM0UlM0NwYXRoIGQ9J00xNS4xNDkxIDQuNzVMMTAuNTk5MSA4TDE1LjE0OTEgMTEuMjVWNC43NVonIHN0cm9rZT0nYmxhY2snIHN0cm9rZS13aWR0aD0nMS41JyBzdHJva2UtbGluZWNhcD0ncm91bmQnIHN0cm9rZS1saW5lam9pbj0ncm91bmQnLyUzRSUzQ3BhdGggZD0nTTkuMjk5MTIgMy40NTAySDIuMTQ5MTJDMS40MzExNSAzLjQ1MDIgMC44NDkxMjEgNC4wMzIyMyAwLjg0OTEyMSA0Ljc1MDJWMTEuMjUwMkMwLjg0OTEyMSAxMS45NjgyIDEuNDMxMTUgMTIuNTUwMiAyLjE0OTEyIDEyLjU1MDJIOS4yOTkxMkMxMC4wMTcxIDEyLjU1MDIgMTAuNTk5MSAxMS45NjgyIDEwLjU5OTEgMTEuMjUwMlY0Ljc1MDJDMTAuNTk5MSA0LjAzMjIzIDEwLjAxNzEgMy40NTAyIDkuMjk5MTIgMy40NTAyWicgc3Ryb2tlPSdibGFjaycgc3Ryb2tlLXdpZHRoPScxLjUnIHN0cm9rZS1saW5lY2FwPSdyb3VuZCcgc3Ryb2tlLWxpbmVqb2luPSdyb3VuZCcvJTNFJTNDL2clM0UlM0NkZWZzJTNFJTNDY2xpcFBhdGggaWQ9J2NsaXAwXzI2NDVfNDY1NCclM0UlM0NyZWN0IHdpZHRoPScxNS42JyBoZWlnaHQ9JzE1LjYnIGZpbGw9J3doaXRlJyB0cmFuc2Zvcm09J3RyYW5zbGF0ZSgwLjE5OTk1MSAwLjIwMDE5NSknLyUzRSUzQy9jbGlwUGF0aCUzRSUzQy9kZWZzJTNFJTNDL3N2ZyUzRVwiKTtcbiAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xuICB0cmFuc2Zvcm06IHRyYW5zbGF0ZSgwcHgsIDJweCk7XG59XG5cbi51bC1yZWNvcmQtcmVzcG9uc2UtYnRuOmFmdGVyIHtcbiAgY29udGVudDogJ1JlY29yZCB5b3VyIFJlc3BvbnNlJztcbn1cblxuLnVsLWJhY2stcXVlc3Rpb24tYnRuOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IHVybChcImRhdGE6aW1hZ2Uvc3ZnK3htbCwlM0Nzdmcgd2lkdGg9JzE1JyBoZWlnaHQ9JzE2JyB2aWV3Qm94PScwIDAgMTUgMTYnIGZpbGw9J25vbmUnIHhtbG5zPSdodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyclM0UlM0NwYXRoIGQ9J00xMy44NzU3IDguMjIzNjFMMS4xMTE4IDE0LjYwNTZDMC45NDU1NzggMTQuNjg4NyAwLjc1IDE0LjU2NzggMC43NSAxNC4zODJWMS42MTgwM0MwLjc1IDEuNDMyMTkgMC45NDU1NzkgMS4zMTEzMSAxLjExMTggMS4zOTQ0M0wxMy44NzU3IDcuNzc2MzlDMTQuMDYgNy44Njg1MiAxNC4wNiA4LjEzMTQ4IDEzLjg3NTcgOC4yMjM2MVonIHN0cm9rZT0nYmxhY2snIHN0cm9rZS13aWR0aD0nMS41JyBzdHJva2UtbGluZWNhcD0ncm91bmQnLyUzRSUzQy9zdmclM0VcIik7XG4gIGRpc3BsYXk6IGlubGluZS1ibG9jaztcbiAgdHJhbnNmb3JtOiBzY2FsZSgwLjg1KSB0cmFuc2xhdGUoMCwgMXB4KTtcbiAgLW1vei10cmFuc2Zvcm06IHNjYWxlKDAuODUpIHRyYW5zbGF0ZSgwLCAycHgpO1xufVxuXG4udWwtYmFjay1xdWVzdGlvbi1idG46YWZ0ZXIge1xuICBjb250ZW50OiAnQmFjayB0byBRdWVzdGlvbic7XG59XG5cbi5oaWRkZW4ge1xuICBkaXNwbGF5OiBub25lICFpbXBvcnRhbnQ7XG4gIG9wYWNpdHk6IDA7XG4gIHZpc2liaWxpdHk6IGhpZGRlbjtcbn1cblxuLnZpc2libGUge1xuICB2aXNpYmlsaXR5OiB2aXNpYmxlO1xuICBvcGFjaXR5OiAxO1xuICBhbmltYXRpb246IGZhZGUgMC4zcztcbn1cblxuQGtleWZyYW1lcyBmYWRlIHtcbiAgMCUge1xuICAgICAgb3BhY2l0eTogMDtcbiAgfVxuXG4gIDEwMCUge1xuICAgICAgb3BhY2l0eTogMTtcbiAgfVxufVxuXG4jdWwtcmVjb3JkaW5nLWNvdW50ZG93bi1zY3JlZW4ge1xuICB3aWR0aDogMTAwJTtcbiAgaGVpZ2h0OiAxMDAlO1xuICBjb2xvcjogYmxhY2s7XG4gIGJhY2tncm91bmQtY29sb3I6IHJnYmEoMjU1LCAyNTUsIDI1NSwgMC44KTtcbiAgcG9zaXRpb246IGFic29sdXRlO1xuICB0ZXh0LWFsaWduOiBjZW50ZXI7XG4gIGZvbnQtc2l6ZTogMTVweDtcbiAgei1pbmRleDogMTtcbiAgZGlzcGxheTogdGFibGU7XG59XG5cbi51bC1jb3VudGRvd24tdGV4dCB7XG4gIHZlcnRpY2FsLWFsaWduOiBtaWRkbGU7XG4gIGRpc3BsYXk6IHRhYmxlLWNlbGw7XG4gIHRyYW5zZm9ybTogdHJhbnNsYXRlKDAsIC0yNXB4KTtcbn1cblxuLnZqcy1mdWxsc2NyZWVuID4gI3VsLXJlY29yZGluZy1jb3VudGRvd24tc2NyZWVuIHtcbiAgZm9udC1zaXplOiAyNXB4O1xuICB0cmFuc2Zvcm06IHVuc2V0O1xufVxuXG4udmpzLWNvbnRyb2wgLnZqcy1pY29uLXBsYWNlaG9sZGVyOmJlZm9yZSB7XG4gIGRpc3BsYXk6IGZsZXg7XG4gIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gIGp1c3RpZnktY29udGVudDogY2VudGVyO1xufVxuXG4jdWwtU3BlZWQge1xuICB0cmFuc2Zvcm06IHRyYW5zbGF0ZSgwLCAzNXB4KTtcbn1cblxuLnZqcy1wb3N0ZXIge1xuICBiYWNrZ3JvdW5kLXBvc2l0aW9uOiB1bnNldDtcbn1cbiJ9XSxuZT0iLXZpZGVvLXBsYXllciIscmU9Ii12aWRlby1yZWNvcmRlciI7bGV0IG9lLGllO2NvbnN0IGFlPWFzeW5jKHQsZSxuLHIsbyxpKT0+e2NvbnN0IGE9ZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LGM9e3NjcmVlbldpZHRoOndpbmRvdy5zY3JlZW4ud2lkdGgsc2NyZWVuSGVpZ2h0OndpbmRvdy5zY3JlZW4uaGVpZ2h0LGNsaWVudFdpZHRoOmEuY2xpZW50V2lkdGgsY2xpZW50SGVpZ2h0OmEuY2xpZW50SGVpZ2h0LGxvY2F0aW9uOndpbmRvdy5sb2NhdGlvbi5ocmVmLGxhbmd1YWdlOm5hdmlnYXRvci5sYW5ndWFnZX0scz17YWN0aW9uOmUsZXJyOnttZXNzYWdlOnQubWVzc2FnZSxzdGFjazp0LnN0YWNrfSxtZXRhOmMsdmlkOm8sZW52SWQ6aX07KGF3YWl0IGZldGNoKGAke259L3Nkay8xL2Vycm9yc2Ase21ldGhvZDoiUE9TVCIsY2FjaGU6Im5vLWNhY2hlIixoZWFkZXJzOnsuLi5yLCJ1c2VybGVhcC1wbGF0Zm9ybSI6InZpZGVvX3JlY29yZGVyIiwieC11bC1lcnJvciI6d2luZG93LmJ0b2EoYHVzZXJsZWFwLSR7RGF0ZS5ub3coKX0tZXJyb3JgKX0sYm9keTpKU09OLnN0cmluZ2lmeShzKX0pKS5va3x8Y29uc29sZS53YXJuKCJbVXNlckxlYXBdIChFUlItNDQ0KSBGYWlsZWQgdG8gcmVwb3J0IGVycm9yIHRvIEFQSSIsdCl9LGNlPSh0LGUsbik9PntpZigwPT09ZS5sZW5ndGgpcmV0dXJuIG4mJm4oKTtQcm9taXNlLmFsbChlLnJlZHVjZSgoKGUsbik9PihlLnB1c2goKCh0LHt0eXBlOmUsY29udGVudDpufSk9Pm5ldyBQcm9taXNlKChmdW5jdGlvbihyLG8pe2xldCBpOyJzY3JpcHQiPT09ZT8oaT1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJzY3JpcHQiKSxpLnNyYz1uKToibGluayI9PT1lPyhpPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImxpbmsiKSxpLnJlbD0ic3R5bGVzaGVldCIsaS5ocmVmPW4saS50eXBlPSJ0ZXh0L2NzcyIpOihpPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInN0eWxlIiksaS5pbm5lckhUTUw9biksaS5vbmxvYWQ9ZnVuY3Rpb24oKXtyKG4pfSxpLm9uZXJyb3I9ZnVuY3Rpb24oKXtvKG4pfSxpLmFzeW5jPSExLGkuaWQ9YnRvYShuKSx0LmFwcGVuZENoaWxkKGkpfSkpKSh0LG4pKSxlKSksW10pKS50aGVuKCgoKT0+e24mJm4oKX0pKS5jYXRjaCgoZnVuY3Rpb24odCl7Y29uc29sZS5sb2codCsiIGZhaWxlZCB0byBsb2FkIil9KSl9LHNlPSh0LGUsbik9PntpZigic3RhcnQiPT09ZSYmKHQuc3R5bGUudmlzaWJpbGl0eT0idmlzaWJsZSIpLCJub25lIj09PWUpdC5zdHlsZS52aXNpYmlsaXR5PUp0O2Vsc2UgaWYoInN1Y2Nlc3MiPT09ZSl0LnN0eWxlLnZpc2liaWxpdHk9SnQsdC5pbm5lckhUTUw9IlVwbG9hZCBzdWNjZWVkZWQhIjtlbHNle2NvbnN0IGU9TWF0aC5yb3VuZChwYXJzZUZsb2F0KG4pKTt0LmlubmVySFRNTD1gVXBsb2FkaW5nIDxzcGFuIGNsYXNzPSJ1bC11cGxvYWQtcHJvZ3Jlc3MtbGFiZWxfX3RpbWUiPiR7ZX0lPC9zcGFuPmAsdC5zdHlsZS5iYWNrZ3JvdW5kPWBsaW5lYXItZ3JhZGllbnQodG8gcmlnaHQsICNFMEUwRUIgMCUsICNFMEUwRUIgJHtlfSUsICNGQ0ZDRkQgJHtlfSUsICNGQ0ZDRkQgMTAwJSlgfX0sdWU9KHQsZSk9Pntjb25zdCBuPW5ldyh3aW5kb3cudmlkZW9qcy5nZXRDb21wb25lbnQoIkNvbXBvbmVudCIpKSh0KTtyZXR1cm4gbi5hZGRDbGFzcygidWwtYnV0dG9ucy1wYW5lbCIpLGUubWFwKCh0PT57bi5hZGRDaGlsZCh0KX0pKSxsZShuKSxufSxsZT10PT57dC5jaGlsZHJlbigpLmZvckVhY2goKHQ9PntpZihqZVt0Lm5hbWVfXSl7Y29uc3QgZT1mZShqZVt0Lm5hbWVfXSxgdWwtJHtqZVt0Lm5hbWVfXX1gKTt0LmVsXy5hcHBlbmRDaGlsZChlKX19KSl9LGZlPSh0LGU9IiIpPT57Y29uc3Qgbj1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJzcGFuIik7cmV0dXJuIG4uY2xhc3NOYW1lPSJ1bC1idXR0b24tdGV4dCIsbi5pbm5lckhUTUw9dCxuLmlkPWUsbn0sZGU9KHQsZSxuLHIsbz0hMSk9Pnt0LmFkZENsYXNzKCJ1bC12aWRlby1wbGF5ZXIiKTtjb25zdCBpPW5ldyh3aW5kb3cudmlkZW9qcy5nZXRDb21wb25lbnQoIkNvbXBvbmVudCIpKSh0KTtpLmFkZENsYXNzKCJ1bC1jb250cm9sLXBhbmVsIiksdC5wcm9ncmVzc0Jhcj1pLmFkZENoaWxkKCJQcm9ncmVzc0NvbnRyb2wiKSxuJiZ0LnNyYyhuKSx0LmF1ZGlvUGxheWVyUGxhY2Vob2xkZXI9bmV3KHdpbmRvdy52aWRlb2pzLmdldENvbXBvbmVudCgiQ29tcG9uZW50IikpKHQpLHQuYXVkaW9QbGF5ZXJQbGFjZWhvbGRlci5hZGRDbGFzcygidWwtYXVkaW8tcmVjb3JkZXItcGxhY2Vob2xkZXIiKTtjb25zdCBhPW4mJm4uc3JjP3dlKG4uc3JjKTpudWxsOyFufHwhbyYmYT8odC5hdWRpb1BsYXllclBsYWNlaG9sZGVyLmhpZGUoKSxkb2N1bWVudC5nZXRFbGVtZW50QnlJZChgJHt0LmlkKCl9X2h0bWw1X2FwaWApLnN0eWxlLmhlaWdodD0iMTAwJSIsYSYmdC5wb3N0ZXIoYSkpOih0LmNoaWxkcmVuKClbMF0uY2xhc3NMaXN0LmFkZCgidmpzLWhpZGRlbiIpLGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGAke3QuaWQoKX1faHRtbDVfYXBpYCkuc3R5bGUuaGVpZ2h0PSIwcHgiKSx0Lm9uKCJwbGF5IiwoKCk9PntvfHwhbnx8YXx8eWUodCwhMSl9KSksdC5hZGRDaGlsZCh0LmF1ZGlvUGxheWVyUGxhY2Vob2xkZXIse30sMSksaS5hZGRDaGlsZChlKSx0LmFkZENoaWxkKGkpLHImJnIodCl9LHBlPSh0LGUsbixyLG8saSxhLGM9ITEpPT57aWU9RGF0ZS5ub3coKTtjb25zdCBzPXdpbmRvdy52aWRlb2pzLHU9cyhlLHtjb250cm9sczohMSxiaWdQbGF5QnV0dG9uOiExLGZsdWlkOiExLHdpZHRoOjEyODAsaGVpZ2h0OjcyMCxwbGF5c2lubGluZTohMCxwbHVnaW5zOntyZWNvcmQ6e2F1ZGlvOiEwLHZpZGVvOnttYW5kYXRvcnk6e21pbldpZHRoOjEyODAsbWluSGVpZ2h0OjcyMH19LGZyYW1lV2lkdGg6MTI4MCxmcmFtZUhlaWdodDo3MjAsbWF4TGVuZ3RoOjYwMCxhdXRvTXV0ZURldmljZTohMH19fSk7dS5wYXlsb2FkPW47Y29uc3QgbD10PT57Y29uc3QgZT1YdCxuPVh0KyItYXVkaW8tb25seSI7c2UodS51cGxvYWRQcm9ncmVzc0xhYmVsLCJub25lIiksb2UmJm9lLnN0YXJ0VGltZT49aWUmJm9lLmFib3J0KCk7Y29uc3Qgcj1kb2N1bWVudC5nZXRFbGVtZW50QnlJZCgidWwtY2FtZXJhLWJ1dHRvbiIpO3Q/KHUuY2hpbGRyZW4oKVswXS5jbGFzc0xpc3QuYWRkKCJ2anMtaGlkZGVuIiksaC5yZW1vdmVDbGFzcyhlKSxoLmFkZENsYXNzKG4pLHIuaW5uZXJIVE1MPWplLlR1cm5PbkNhbWVyYSx1LmF1ZGlvUGxheWVyUGxhY2Vob2xkZXIucmVtb3ZlQ2xhc3MoInZqcy1oaWRkZW4iKSx3aW5kb3cubmF2aWdhdG9yLm1lZGlhRGV2aWNlcy5nZXRVc2VyTWVkaWEoe3ZpZGVvOiEwLGF1ZGlvOiEwfSkudGhlbigodD0+e3UucmVjb3JkKCkub25EZXZpY2VSZWFkeSh0KSx0LmdldFZpZGVvVHJhY2tzKCkuZm9yRWFjaCgodD0+e3Quc3RvcCgpfSkpfSkpLmNhdGNoKHUucmVjb3JkKCkub25EZXZpY2VFcnJvci5iaW5kKHUucmVjb3JkKCkpKSk6KHUuY2hpbGRyZW4oKVswXS5jbGFzc0xpc3QucmVtb3ZlKCJ2anMtaGlkZGVuIiksdS5yZWNvcmQoKS5nZXREZXZpY2UoKSxoLnJlbW92ZUNsYXNzKG4pLGguYWRkQ2xhc3MoZSksci5pbm5lckhUTUw9amUuVHVybk9mZkNhbWVyYSx1LmF1ZGlvUGxheWVyUGxhY2Vob2xkZXIuYWRkQ2xhc3MoInZqcy1oaWRkZW4iKSl9LGY9bmV3KHMuZ2V0Q29tcG9uZW50KCJCdXR0b24iKSkodSx7Y2xpY2tIYW5kbGVyOigpPT57Zi5oYXNDbGFzcyhKdCl8fChsKHUuY2FtZXJhT2ZmKSxvKEVlLkRFTEVURSx7fSksaC5yZW1vdmVDbGFzcyhKdCksZi5hZGRDbGFzcyhKdCkpfX0pO2YuYWRkQ2xhc3MoInVsLXZpZGVvLXJlY29yZGVyLWRlbGV0ZS1idXR0b24iKSxmLmVsXy5hcHBlbmRDaGlsZChmZShqZS5EZWxldGVCdXR0b24sInVsLWRlbGV0ZS1idXR0b24iKSk7Y29uc3QgZD1kb2N1bWVudC5nZXRFbGVtZW50QnlJZChlKSxwPSgpPT57ZC5jbGFzc0xpc3QuY29udGFpbnMoInZqcy1mdWxsc2NyZWVuIikmJnUuY2FtZXJhT2ZmP2Quc3R5bGUuZGlzcGxheT0idGFibGUiOmQuc3R5bGUuZGlzcGxheT0iZmxleCJ9O3AoKTtjb25zdCBoPW5ldyhzLmdldENvbXBvbmVudCgiQnV0dG9uIikpKHUse2NsaWNrSGFuZGxlcjooKT0+e3UucmVjb3JkKCkuaXNSZWNvcmRpbmcoKXx8KHUuY2FtZXJhT2ZmPSF1LmNhbWVyYU9mZixsKHUuY2FtZXJhT2ZmKSwhZi5oYXNDbGFzcyhKdCkmJmYuYWRkQ2xhc3MoSnQpLG8oRWUuREVMRVRFLHt9KSxwKCkpfX0pO2guYWRkQ2xhc3MoWHQpLGguZWxfLmFwcGVuZENoaWxkKGZlKGplLlR1cm5PZmZDYW1lcmEsInVsLWNhbWVyYS1idXR0b24iKSk7Y29uc3Qgdj1uZXcocy5nZXRDb21wb25lbnQoIkJ1dHRvbiIpKSh1LHtjbGlja0hhbmRsZXI6KCk9Pntjb25zdCB0PWRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJ1bC1yZWNvcmRlci10b2dnbGUiKTtpZih1LnJlY29yZCgpLmlzUmVjb3JkaW5nKCkpdS5yZWNvcmQoKS5zdG9wKCksdCYmKHQuaW5uZXJIVE1MPWplLlJlY29yZEJ1dHRvbiksdi5yZW1vdmVDbGFzcyhRdCksZi5yZW1vdmVDbGFzcyhKdCk7ZWxzZXtjb25zdCBlPWRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJ1bC1yZWNvcmRpbmctY291bnRkb3duLXNjcmVlbiIpO2lmKGUpZS5yZW1vdmUoKSx0JiYodC5pbm5lckhUTUw9amUuUmVjb3JkQnV0dG9uKSxsKHUuY2FtZXJhT2ZmKSxvKEVlLkRFTEVURSx7fSksaC5yZW1vdmVDbGFzcyhKdCksZi5hZGRDbGFzcyhKdCksdi5yZW1vdmVDbGFzcyhRdCksbS5zaG93KCk7ZWxzZXt2LmFkZENsYXNzKFF0KSxtLmhpZGUoKSxoLmFkZENsYXNzKEp0KSxmLmFkZENsYXNzKEp0KSx0JiYodC5pbm5lckhUTUw9amUuU3RvcEJ1dHRvbik7Y29uc3QgZT1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKTtlLmlkPSJ1bC1yZWNvcmRpbmctY291bnRkb3duLXNjcmVlbiIsZC5pbnNlcnRCZWZvcmUoZSxkLmNoaWxkcmVuWzFdKSxlLnN0eWxlLmhlaWdodD1gJHtkLm9mZnNldEhlaWdodH1weGAsaGUodSwzKX19fX0pO3YuYWRkQ2xhc3MoInVsLXZpZGVvLXJlY29yZGVyLXRvZ2dsZS1idXR0b24iKSx2LmVsXy5hcHBlbmRDaGlsZChmZShqZS5SZWNvcmRCdXR0b24sInVsLXJlY29yZGVyLXRvZ2dsZSIpKTtjb25zdCBnPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInAiKTtnLnN0eWxlLnZpc2liaWxpdHk9ImhpZGRlbiIsZy5jbGFzc05hbWU9InVsLXVwbG9hZC1wcm9ncmVzcy1sYWJlbCIsdC5hcHBlbmRDaGlsZChnKSx1LnVwbG9hZFByb2dyZXNzTGFiZWw9Zztjb25zdCB5PXVlKHUsW2YsaCwiUGxheVRvZ2dsZSIsdiwiRnVsbHNjcmVlblRvZ2dsZSJdKSxtPXkuY2hpbGRyZW4oKS5maW5kKCh0PT4iRnVsbHNjcmVlblRvZ2dsZSI9PT10Lm5hbWVfKSk7bS5oYXNDbGFzcygidmpzLWRpc2FibGVkIikmJm0uaGlkZSgpO2NvbnN0IGI9eS5jaGlsZHJlbigpLmZpbmQoKHQ9PiJQbGF5VG9nZ2xlIj09PXQubmFtZV8pKTtiLmhpZGUoKSxpJiZoLmFkZENsYXNzKEp0KSwhaSYmZi5hZGRDbGFzcyhKdCksZGUodSx5LGksITEsYyksdS5vbigic3RvcFJlY29yZCIsKCgpPT57di5oaWRlKCksYi5zaG93KCksbS5zaG93KCksZi5yZW1vdmVDbGFzcyhKdCl9KSksdS5vbigiZGV2aWNlUmVhZHkiLCgoKT0+e3Yuc2hvdygpLGIuaGlkZSgpLGYuYWRkQ2xhc3MoSnQpfSkpLCgodCxlLG4scixvKT0+e3Qub24oImRldmljZUVycm9yIiwoZnVuY3Rpb24oKXtjb25zb2xlLmxvZygiZGV2aWNlIGVycm9yOiIsdC5kZXZpY2VFcnJvckNvZGUpLCJQZXJtaXNzaW9uIGRlbmllZCI9PT10LmRldmljZUVycm9yQ29kZS5tZXNzYWdlPyh0LmRldmljZUJ1dHRvbi5hZGRDbGFzcygicGVybWlzc2lvbi1kZW5pZWQiKSxuJiZuKEVlLkVSUk9SLHt0eXBlOkVlLlBFUk1JU1NJT05fREVOSUVEfSkpOihuJiZuKEVlLkVSUk9SLHt0eXBlOkVlLk9USEVSfSksYWUobmV3IEVycm9yKHQuZGV2aWNlRXJyb3JDb2RlLm1lc3NhZ2UpLCJyZWNvcmRlckRldmljZUVycm9yIixlLG8sdC5wYXlsb2FkLnZpc2l0b3JJZCx0LnBheWxvYWQuZW52SWQpKX0pKSx0Lm9uKCJlcnJvciIsKGZ1bmN0aW9uKG4scil7YWUocnx8dC5lcnJvcigpLCJyZWNvcmRlckVycm9yIixlLG8sdC5wYXlsb2FkLnZpc2l0b3JJZCx0LnBheWxvYWQuZW52SWQpfSkpLHQub24oInN0YXJ0UmVjb3JkIiwoZnVuY3Rpb24oZSxuKXtyKHQudXBsb2FkUHJvZ3Jlc3NMYWJlbCwibm9uZSIpfSkpLHQub24oImZpbmlzaFJlY29yZCIsKGFzeW5jIGZ1bmN0aW9uKCl7cih0LnVwbG9hZFByb2dyZXNzTGFiZWwsInN0YXJ0IiwwKTtjb25zdHtzdXJ2ZXlJZDppLHF1ZXN0aW9uSWQ6YSxyZXNwb25zZUdyb3VwVWlkOmMsdmlzaXRvcklkOnMsZW52SWQ6dX09dC5wYXlsb2FkO2lmKCFpKXtjb25zdCB0PSJpbnRlcm5hbCBlcnJvcjogbWlzc2luZyBmaWVsZHMgaW4gcGF5bG9hZCI7cmV0dXJuIG4mJm4oRWUuRVJST1Ise3R5cGU6RWUuT1RIRVJ9KSxhZShuZXcgRXJyb3IodCksImZpbmlzaFJlY29yZCIsZSxvLHMsdSksbnVsbH10LnJlY29yZCgpLnN0b3BEZXZpY2UoKTtjb25zdCBsPXQuY2FtZXJhT2ZmP0VlLk1FRElBX1RZUEVfQVVESU86RWUuTUVESUFfVFlQRV9WSURFTyxmPVp0KCk7Y29uc29sZS5sb2coInd0ZiIpO2NvbnN0IGQ9e3N1cnZleUlkOmksdXBkYXRlZEF0OihuZXcgRGF0ZSkudG9JU09TdHJpbmcoKSxtZWRpYVR5cGU6bCxtZWRpYVJlY29yZGluZ1VpZDpmfTtjb25zb2xlLmxvZyhkKSxhJiYoZC5xdWVzdGlvbklkPWEpLGMmJihkLnJlc3BvbnNlR3JvdXBVaWQ9YykscyYmKGQudmlzaXRvcklkPXMpO2NvbnN0IHA9YXdhaXQoYXN5bmMoKT0+e2NvbnN0IHI9YXdhaXQgZmV0Y2goYCR7ZX0vMi9lbnZpcm9ubWVudHMvaW50ZWdyYXRpb25zL3VwbG9hZGAse21ldGhvZDoiUE9TVCIsY2FjaGU6Im5vLWNhY2hlIixoZWFkZXJzOnsiQ29udGVudC1UeXBlIjoiYXBwbGljYXRpb24vanNvbiJ9LGJvZHk6SlNPTi5zdHJpbmdpZnkoZCl9KTtpZihyLm9rKXtjb25zdCB0PWF3YWl0IHIuanNvbigpO3JldHVybiBuJiZuKEVlLlVQTE9BRF9TVEFSVEVELHtbRWUuVVBMT0FEX0lEXTp0LnVwbG9hZC5pZCxbRWUuTUVESUFfVFlQRV06bCxbRWUuTUVESUFfUkVDT1JESU5HX1VJRF06Zn0pLHQudXBsb2FkLnVybH1yZXR1cm4gbiYmbihFZS5FUlJPUix7dHlwZTpFZS5PVEhFUixyZXNwb25zZTpyfSksYWUobmV3IEVycm9yKCJmYWlsZWQgdG8gZ2V0IHVwbG9hZCByZXNwb25zZSB3aXRoIHVybCIpLCJmaW5pc2hSZWNvcmQiLGUsbyx0LnBheWxvYWQudmlzaXRvcklkLHQucGF5bG9hZC5lbnZJZCksbnVsbH0pKCk7cCYmKG9lPXdpbmRvdy5VcENodW5rLmNyZWF0ZVVwbG9hZCh7ZW5kcG9pbnQ6cCxmaWxlOm5ldyBGaWxlKFt0LnJlY29yZGVkRGF0YV0sYHJlY29yZGluZyAke2x9ICR7RGF0ZS5ub3coKX1gKSxjaHVua1NpemU6NTEyMH0pLG9lLnN0YXJ0VGltZT1EYXRlLm5vdygpLG9lLm9uKCJlcnJvciIsKG49PntyKHQudXBsb2FkUHJvZ3Jlc3NMYWJlbCwibm9uZSIpLGFlKG4sImZpbmlzaFJlY29yZCIsZSxvLHQucGF5bG9hZC52aXNpdG9ySWQsdC5wYXlsb2FkLmVudklkKX0pKSxvZS5vbigicHJvZ3Jlc3MiLChlPT57cih0LnVwbG9hZFByb2dyZXNzTGFiZWwsInByb2dyZXNzIixlLmRldGFpbCl9KSksb2Uub24oInN1Y2Nlc3MiLCgoKT0+e3IodC51cGxvYWRQcm9ncmVzc0xhYmVsLCJzdWNjZXNzIiksbiYmbihFZS5VUExPQURfRklOSVNIRUQpfSkpKX0pKX0pKHUscixvLHNlLGEpLGkmJih1LmRldmljZUJ1dHRvbiYmdS5kZXZpY2VCdXR0b24uaGlkZSgpLHUuc3JjKGkpLGIuc2hvdygpLHYuaGlkZSgpLGYucmVtb3ZlQ2xhc3MoSnQpKTtjb25zdCB4PVt7bmFtZToibWljcm9waG9uZSJ9XTshdS5jYW1lcmFPZmYmJngucHVzaCh7bmFtZToiY2FtZXJhIn0pLFByb21pc2UuYWxsKHgubWFwKCh0PT5uYXZpZ2F0b3IucGVybWlzc2lvbnMucXVlcnkodCkpKSkudGhlbigodD0+e3QucmVkdWNlKCgodCxlKT0+dCYiZ3JhbnRlZCI9PT1lLnN0YXRlKSwhMCkmJnUmJih1LmRldmljZUJ1dHRvbiYmdS5kZXZpY2VCdXR0b24uaGlkZSgpLCFpJiZ1LnJlY29yZCgpLmdldERldmljZSgpKX0pKS5jYXRjaCgodD0+e30pKX0saGU9KHQsZT0zKT0+e2NvbnN0IG49ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoInVsLXJlY29yZGluZy1jb3VudGRvd24tc2NyZWVuIik7biYmMD09PWU/KG4ucmVtb3ZlKCksdC5yZWNvcmQoKS5zdGFydCgpKTpuJiYobi5pbm5lckhUTUw9YDxzcGFuIGNsYXNzPSd1bC1jb3VudGRvd24tdGV4dCc+UmVjb3JkaW5nIGluLi4uICR7ZX08L3NwYW4+YCxzZXRUaW1lb3V0KCgoKT0+e2hlKHQsZS0xKX0pLDFlMykpfSx2ZT10PT57Y29uc3QgZT1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKTtyZXR1cm4gZS5jbGFzc05hbWU9InVsLXZpZGVvLWNvbnRhaW5lciIsZS5hcHBlbmRDaGlsZCgodD0+e2NvbnN0IGU9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2Iik7cmV0dXJuIGUuY2xhc3NOYW1lPSJ1bC12aWRlby1wbGF5ZXItbG9hZGluZyIsZS5pZD1ZdCh0KSxbImZpcnN0Iiwic2Vjb25kIiwidGhpcmQiLCJmb3VydGgiXS5tYXAoKHQ9Pntjb25zdCBuPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpO24uY2xhc3NOYW1lPXQsZS5hcHBlbmRDaGlsZChuKX0pKSxlfSkodCkpLGV9LGdlPSh0LGUpPT57Y29uc3Qgbj1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJ2aWRlbyIpO24uaWQ9dCxuLmNsYXNzTmFtZT0idmlkZW8tanMgdmpzLWRlZmF1bHQtc2tpbiB1bC12aWRlby1wbGF5ZXItdmlkZW8iO2NvbnN0IHI9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgicCIpO3IuY2xhc3NOYW1lPSJ2anMtbm8tanMiLHIuaW5uZXJIVE1MPSJUbyB2aWV3IHRoaXMgdmlkZW8gcGxlYXNlIGVuYWJsZSBKYXZhU2NyaXB0LCBhbmQgY29uc2lkZXIgdXBncmFkaW5nIHRvIGEgd2ViIGJyb3dzZXIgdGhhdCI7Y29uc3Qgbz1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJhIik7cmV0dXJuIG8uaHJlZj0iaHR0cHM6Ly92aWRlb2pzLmNvbS9odG1sNS12aWRlby1zdXBwb3J0LyIsby50YXJnZXQ9Il9ibGFuayIsby5pbm5lckhUTUw9InN1cHBvcnRzIEhUTUw1IHZpZGVvIixyLmFwcGVuZENoaWxkKG8pLG4uYXBwZW5kQ2hpbGQociksZS5hcHBlbmRDaGlsZChuKSxlfSx5ZT0odCxlKT0+e2U/KHQuY2hpbGRyZW4oKVswXS5jbGFzc0xpc3QuYWRkKCJ2anMtaGlkZGVuIiksdC5hdWRpb1BsYXllclBsYWNlaG9sZGVyLnNob3coKSxkb2N1bWVudC5nZXRFbGVtZW50QnlJZChgJHt0LmlkKCl9X2h0bWw1X2FwaWApLnN0eWxlLmhlaWdodD0iMHB4Iik6KHQuY2hpbGRyZW4oKVswXS5jbGFzc0xpc3QucmVtb3ZlKCJ2anMtaGlkZGVuIiksdC5hdWRpb1BsYXllclBsYWNlaG9sZGVyLmhpZGUoKSxkb2N1bWVudC5nZXRFbGVtZW50QnlJZChgJHt0LmlkKCl9X2h0bWw1X2FwaWApLnN0eWxlLmhlaWdodD0iMTAwJSIpfSxtZT10PT57Y29uc3QgZT13aW5kb3cudmlkZW9qcyxuPXQrcmU7aWYoZSl7dHJ5e2lmKCFlKG4pLnJlY29yZCgpLnN0cmVhbSlyZXR1cm59Y2F0Y2godCl7cmV0dXJufWRvY3VtZW50LmdldEVsZW1lbnRCeUlkKG4pJiZlKG4pLnJlY29yZCgpLnN0b3AoKSxlKG4pLnJlY29yZCgpLnN0b3BEZXZpY2UoKX19LGJlPXQ9Pnt3aW5kb3cudmlkZW9qcyh0K25lKS5wYXVzZSgpfSx4ZT0odCxlLG4scik9Pnt3aW5kb3cudmlkZW9qcyh0K25lKTtjb25zdCBvPXdpbmRvdy52aWRlb2pzKHQrcmUpOygodCxlLG4pPT57Y29uc3Qgcj13aW5kb3cudmlkZW9qcyh0K25lKTshci5wYXVzZWQoKSYmci5wYXVzZSgpLHIuc3JjKHtzcmM6ZSx0eXBlOiJhcHBsaWNhdGlvbi94LW1wZWdVUkwifSksci5jdXJyZW50VGltZSgwKSx5ZShyLG4pO2NvbnN0IG89d2UoZSk7IW4mJmUmJihvP3IucG9zdGVyKG8pOnllKHIsITApKSxyLm9uKCJwbGF5IiwoKCk9PntufHwhZXx8b3x8eWUociwhMSl9KSl9KSh0LGUsciksby5yZWNvcmQoKS5yZXNldFN0YXRlKCksby5yZWNvcmQoKS5nZXREZXZpY2UoKTtpZihkb2N1bWVudC5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKCJ1bC12aWRlby1yZWNvcmRlci1kZWxldGUtYnV0dG9uIilbMF0uY2xhc3NMaXN0LmFkZChKdCksby5jYW1lcmFPZmYpe2RvY3VtZW50LmdldEVsZW1lbnRzQnlDbGFzc05hbWUoInVsLXZpZGVvLXJlY29yZGVyLWNhbWVyYS1vZmYtYnV0dG9uLWF1ZGlvLW9ubHkiKVswXS5jbGFzc0xpc3QucmVtb3ZlKEp0KSx3aW5kb3cubmF2aWdhdG9yLm1lZGlhRGV2aWNlcy5nZXRVc2VyTWVkaWEoe3ZpZGVvOiEwLGF1ZGlvOiEwfSkudGhlbigodD0+e28ucmVjb3JkKCkub25EZXZpY2VSZWFkeSh0KSx0LmdldFZpZGVvVHJhY2tzKCkuZm9yRWFjaCgodD0+e3Quc3RvcCgpfSkpfSkpLmNhdGNoKG8ucmVjb3JkKCkub25EZXZpY2VFcnJvci5iaW5kKG8ucmVjb3JkKCkpKX1lbHNle2RvY3VtZW50LmdldEVsZW1lbnRzQnlDbGFzc05hbWUoInVsLXZpZGVvLXJlY29yZGVyLWNhbWVyYS1vZmYtYnV0dG9uIilbMF0uY2xhc3NMaXN0LnJlbW92ZShKdCl9by5wYXlsb2FkPW4sc2Uoby51cGxvYWRQcm9ncmVzc0xhYmVsLCJub25lIiksaWU9RGF0ZS5ub3coKX0sd2U9dD0+e2NvbnN0IGU9dC5tYXRjaCgvaHR0cHM6XC9cL3N0cmVhbS5tdXguY29tXC8oLiopLyksbj1lP2VbMV06bnVsbDtyZXR1cm4gbj9gaHR0cHM6Ly9pbWFnZS5tdXguY29tLyR7bn0vdGh1bWJuYWlsLmpwZz90aW1lPTBgOm51bGx9LEVlPXtVUExPQURfU1RBUlRFRDoidXBsb2FkLnN0YXJ0ZWQiLFVQTE9BRF9GSU5JU0hFRDoidXBsb2FkLmZpbmlzaGVkIixERUxFVEU6ImRlbGV0ZSIsRVJST1I6ImVycm9yIixNRURJQV9UWVBFOiJtZWRpYS50eXBlIixQRVJNSVNTSU9OX0RFTklFRDoicGVybWlzc2lvbl9kZW5pZWQiLE9USEVSOiJvdGhlciIsVVBMT0FEX0lEOiJ1cGxvYWQuaWQiLE1FRElBX1JFQ09SRElOR19VSUQ6Im1lZGlhLnJlY29yZGluZy51aWQiLE1FRElBX1RZUEVfVklERU86InZpZGVvIixNRURJQV9UWVBFX0FVRElPOiJhdWRpbyJ9LGplPXtQbGF5YmFja1JhdGVNZW51QnV0dG9uOiJTcGVlZCIsUGxheVRvZ2dsZToiUGxheSIsRnVsbHNjcmVlblRvZ2dsZToiRXhwYW5kIixUdXJuT25DYW1lcmE6IlR1cm4gb24iLFR1cm5PZmZDYW1lcmE6IlR1cm4gb2ZmIixEZWxldGVCdXR0b246IkRlbGV0ZSIsUmVjb3JkQnV0dG9uOiJSZWNvcmQiLFN0b3BCdXR0b246IlN0b3AiLFBhdXNlQnV0dG9uOiJQYXVzZSJ9O2Z1bmN0aW9uIENlKHQsZSl7dmFyIG49T2JqZWN0LmtleXModCk7aWYoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyl7dmFyIHI9T2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyh0KTtlJiYocj1yLmZpbHRlcigoZnVuY3Rpb24oZSl7cmV0dXJuIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IodCxlKS5lbnVtZXJhYmxlfSkpKSxuLnB1c2guYXBwbHkobixyKX1yZXR1cm4gbn12YXIga2U9InVsLWJ1dHRvbi1pbmFjdGl2ZSI7ZnVuY3Rpb24gU2UodCxlKXtlKHQpfXZhciBPZT17ZXE6ZnVuY3Rpb24odCxlKXtyZXR1cm4gdD09ZX0sbmVxOmZ1bmN0aW9uKHQsZSl7cmV0dXJuIXRoaXMuZXEodCxlKX0sZ3Q6ZnVuY3Rpb24odCxlKXtyZXR1cm4gdD5lfSxndGU6ZnVuY3Rpb24odCxlKXtyZXR1cm4gdD49ZX0sbHQ6ZnVuY3Rpb24odCxlKXtyZXR1cm4gdDxlfSxsdGU6ZnVuY3Rpb24odCxlKXtyZXR1cm4gdDw9ZX0sbGlzdF9leGFjdDpmdW5jdGlvbih0LGUpe3JldHVybiEoIUFycmF5LmlzQXJyYXkodCl8fCFBcnJheS5pc0FycmF5KGUpKSYmdC5zbGljZSgpLnNvcnQoKS5qb2luKCIsIik9PT1lLnNsaWNlKCkuc29ydCgpLmpvaW4oIiwiKX0sbGlzdF9hbGw6ZnVuY3Rpb24odCxlKXtyZXR1cm4hKCFBcnJheS5pc0FycmF5KHQpfHwhQXJyYXkuaXNBcnJheShlKSkmJiFlLnNvbWUoKGZ1bmN0aW9uKGUpe3JldHVybi0xPT09dC5pbmRleE9mKGUpfSkpfSxsaXN0X2FsbzpmdW5jdGlvbih0LGUpe3JldHVybiEoIUFycmF5LmlzQXJyYXkodCl8fCFBcnJheS5pc0FycmF5KGUpKSYmZS5zb21lKChmdW5jdGlvbihlKXtyZXR1cm4tMSE9dC5pbmRleE9mKGUpfSkpfX07dmFyIEFlPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdChlKXt2YXIgbj10aGlzO2J0KCkodGhpcyx0KSx0aGlzLnByb21pc2U9bmV3IFByb21pc2UoKGZ1bmN0aW9uKHQscil7bi5wYXlsb2FkPWUsbi5yZWplY3Q9cixuLnJlc29sdmU9dH0pKX1yZXR1cm4gd3QoKSh0LFt7a2V5OiJyZXNvbHZlUmVxdWVzdCIsdmFsdWU6ZnVuY3Rpb24odCl7dGhpcy5yZXNvbHZlKHQpfX1dKSx0fSgpO2Z1bmN0aW9uIEllKHQsZSl7cmV0dXJuIG5ldyBQcm9taXNlKChmdW5jdGlvbihuKXtzZXRUaW1lb3V0KG4uYmluZChudWxsLGUpLHQpfSkpfXZhciBNZT0xMCxUZT0hMSxfZT0iIixMZT0hMSxSZT1bXTtmdW5jdGlvbiBQZSh0KXtyZXR1cm4gdC5fY29uZmlnJiZ0Ll9jb25maWcuaW5zdGFsbGF0aW9uTWV0aG9kP3QuX2NvbmZpZy5pbnN0YWxsYXRpb25NZXRob2Q6dC5fZ3RtP3E6dC5fc2VnbWVudD9XOkd9ZnVuY3Rpb24gTmUodCl7VGU9ITAsX2U9dH1mdW5jdGlvbiBEZSgpe3ZhciB0PWFyZ3VtZW50cy5sZW5ndGg+MCYmdm9pZCAwIT09YXJndW1lbnRzWzBdP2FyZ3VtZW50c1swXTp7fSxlPXsiQ29udGVudC1UeXBlIjoiYXBwbGljYXRpb24vanNvbiIsInVzZXJsZWFwLXBsYXRmb3JtIjoid2ViIiwieC11bC1zZGstdmVyc2lvbiI6IjIuMTQuNSJ9O2lmKHQuZW52SWQmJihlW1VdPXQuZW52SWQpLHQudG9rZW4mJihlLkF1dGhvcml6YXRpb249IkJlYXJlciAiK3QudG9rZW4pLHQudXNlcklkJiYoZVt6XT10LnVzZXJJZCksdC52aXNpdG9ySWQmJihlW1ZdPXQudmlzaXRvcklkKSx0LnBhcnRuZXJBbm9ueW1vdXNJZCYmKGVbQl09dC5wYXJ0bmVyQW5vbnltb3VzSWQpLHQubW9iaWxlSGVhZGVyc0pTT04pe3ZhciBuPUpTT04ucGFyc2UodC5tb2JpbGVIZWFkZXJzSlNPTik7T2JqZWN0LmFzc2lnbihlLG4pfXJldHVybiBlW0hdPVBlKHQpLHQubG9jYWxlJiYoZVsiYWNjZXB0LWxhbmd1YWdlIl09dC5sb2NhbGUpLGV9ZnVuY3Rpb24gRmUodCxlLG4pe3JldHVybiBVZS5hcHBseSh0aGlzLGFyZ3VtZW50cyl9ZnVuY3Rpb24gVWUoKXtyZXR1cm4oVWU9TigpKFIoKS5tYXJrKChmdW5jdGlvbiB0KGUsbixyKXt2YXIgbztyZXR1cm4gUigpLndyYXAoKGZ1bmN0aW9uKHQpe2Zvcig7Oylzd2l0Y2godC5wcmV2PXQubmV4dCl7Y2FzZSAwOmlmKCFlKXt0Lm5leHQ9NDticmVha31yZXR1cm4gdC5hYnJ1cHQoInJldHVybiIse3N0YXR1czo0Mjl9KTtjYXNlIDQ6cmV0dXJuIG89bmV3IEFlKHIpLFJlLnB1c2gobyksdC5hYnJ1cHQoInJldHVybiIsby5wcm9taXNlKTtjYXNlIDc6Y2FzZSJlbmQiOnJldHVybiB0LnN0b3AoKX19KSx0KX0pKSkpLmFwcGx5KHRoaXMsYXJndW1lbnRzKX1mdW5jdGlvbiBCZSh0LGUpe3JldHVybiB6ZS5hcHBseSh0aGlzLGFyZ3VtZW50cyl9ZnVuY3Rpb24gemUoKXtyZXR1cm4gemU9TigpKFIoKS5tYXJrKChmdW5jdGlvbiB0KGUsbil7dmFyIHIsbyxpLGEsYyxzLHUsbCxmLGQ9YXJndW1lbnRzO3JldHVybiBSKCkud3JhcCgoZnVuY3Rpb24odCl7Zm9yKDs7KXN3aXRjaCh0LnByZXY9dC5uZXh0KXtjYXNlIDA6aWYocj1kLmxlbmd0aD4yJiZ2b2lkIDAhPT1kWzJdP2RbMl06MCxvPWQubGVuZ3RoPjMmJnZvaWQgMCE9PWRbM10mJmRbM10saT1kLmxlbmd0aD40JiZ2b2lkIDAhPT1kWzRdJiZkWzRdLGE9e3VybDplLG9wdGlvbnM6bixhdHRlbXB0OnIsc2hvdWxkRHJvcE9uUmF0ZUxpbWl0Om99LCFMZXx8aSl7dC5uZXh0PTY7YnJlYWt9cmV0dXJuIHQuYWJydXB0KCJyZXR1cm4iLEZlKG8saSxhKSk7Y2FzZSA2OmlmKGM9e29rOiExLHJlcG9ydEVycm9yOiExfSwhVGUpe3QubmV4dD0xMDticmVha31yZXR1cm4gY29uc29sZS5sb2coIlVzZXJMZWFwIC0gIi5jb25jYXQoX2UpKSx0LmFicnVwdCgicmV0dXJuIixjKTtjYXNlIDEwOnJldHVybiB0LnByZXY9MTAsbi5oZWFkZXJzPU9iamVjdC5hc3NpZ24oRGUoKSxuLmhlYWRlcnMpLHQubmV4dD0xNCxmZXRjaChlLG4pO2Nhc2UgMTQ6aWYoNDI5IT09KHM9dC5zZW50KS5zdGF0dXMpe3QubmV4dD0yNDticmVha31pZighKCFMZSYmIW98fGkpKXt0Lm5leHQ9MjM7YnJlYWt9cmV0dXJuIExlPSEwLHU9cy5oZWFkZXJzLmhhcygicmF0ZWxpbWl0LXJlc2V0Iik/TnVtYmVyKHMuaGVhZGVycy5nZXQoInJhdGVsaW1pdC1yZXNldCIpKTpNZSx0LmFicnVwdCgicmV0dXJuIixJZSgxZTMqdSkudGhlbihOKCkoUigpLm1hcmsoKGZ1bmN0aW9uIHQoKXtyZXR1cm4gUigpLndyYXAoKGZ1bmN0aW9uKHQpe2Zvcig7Oylzd2l0Y2godC5wcmV2PXQubmV4dCl7Y2FzZSAwOnJldHVybiB0LmFicnVwdCgicmV0dXJuIixCZShlLG4sMCxvLCEwKSk7Y2FzZSAxOmNhc2UiZW5kIjpyZXR1cm4gdC5zdG9wKCl9fSksdCl9KSkpKSk7Y2FzZSAyMzpyZXR1cm4gdC5hYnJ1cHQoInJldHVybiIsRmUobywhMSxhKSk7Y2FzZSAyNDppZihMZT0hMSxSZS5sZW5ndGgmJihSZS5tYXAoKGZ1bmN0aW9uKHQpe3ZhciBlPXQucGF5bG9hZDtCZShlLnVybCxlLm9wdGlvbnMsZS5hdHRlbXB0LGUuc2hvdWxkRHJvcE9uUmF0ZUxpbWl0KS50aGVuKChmdW5jdGlvbihlKXt0LnJlc29sdmVSZXF1ZXN0KGUpfSkpfSkpLFJlPVtdKSwhcy5vayl7dC5uZXh0PTQxO2JyZWFrfWlmKDI0OSE9PXMuc3RhdHVzKXt0Lm5leHQ9MzA7YnJlYWt9cmV0dXJuIE5lKCksdC5hYnJ1cHQoInJldHVybiIsYyk7Y2FzZSAzMDpyZXR1cm4gdC5uZXh0PTMyLHMudGV4dCgpO2Nhc2UgMzI6cmV0dXJuIGw9dC5zZW50LHQucHJldj0zMyxsJiYiT0siIT09bCYmKHMuanNvbj1KU09OLnBhcnNlKGwpKSx0LmFicnVwdCgicmV0dXJuIixzKTtjYXNlIDM4OnJldHVybiB0LnByZXY9MzgsdC50MD10LmNhdGNoKDMzKSx0LmFicnVwdCgicmV0dXJuIix7b2s6ITEscmVwb3J0RXJyb3I6ITAsZXJyb3I6bmV3IEVycm9yKCJmYWlsZWQgcGFyc2luZyByZXNwb25zZSBqc29uIGZvciAiLmNvbmNhdChlLCIgLSAiKS5jb25jYXQobCkpfSk7Y2FzZSA0MTpyZXR1cm4gdC5hYnJ1cHQoInJldHVybiIscyk7Y2FzZSA0NDppZih0LnByZXY9NDQsdC50MT10LmNhdGNoKDEwKSwhKChmPXIrMSk+Mikpe3QubmV4dD00OTticmVha31yZXR1cm4gdC5hYnJ1cHQoInJldHVybiIse29rOiExLHJlcG9ydEVycm9yOiExLGVycm9yOnQudDF9KTtjYXNlIDQ5OnJldHVybiB0LmFicnVwdCgicmV0dXJuIixJZSgxZTMqZikudGhlbigoZnVuY3Rpb24oKXtyZXR1cm4gQmUoZSxuLGYpfSkpKTtjYXNlIDUwOmNhc2UiZW5kIjpyZXR1cm4gdC5zdG9wKCl9fSksdCxudWxsLFtbMTAsNDRdLFszMywzOF1dKX0pKSksemUuYXBwbHkodGhpcyxhcmd1bWVudHMpfWZ1bmN0aW9uIFZlKHQsZSl7dmFyIG49T2JqZWN0LmtleXModCk7aWYoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyl7dmFyIHI9T2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyh0KTtlJiYocj1yLmZpbHRlcigoZnVuY3Rpb24oZSl7cmV0dXJuIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IodCxlKS5lbnVtZXJhYmxlfSkpKSxuLnB1c2guYXBwbHkobixyKX1yZXR1cm4gbn1mdW5jdGlvbiBIZSh0KXtmb3IodmFyIGU9MTtlPGFyZ3VtZW50cy5sZW5ndGg7ZSsrKXt2YXIgbj1udWxsIT1hcmd1bWVudHNbZV0/YXJndW1lbnRzW2VdOnt9O2UlMj9WZShPYmplY3QobiksITApLmZvckVhY2goKGZ1bmN0aW9uKGUpe3IoKSh0LGUsbltlXSl9KSk6T2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcnM/T2JqZWN0LmRlZmluZVByb3BlcnRpZXModCxPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycyhuKSk6VmUoT2JqZWN0KG4pKS5mb3JFYWNoKChmdW5jdGlvbihlKXtPYmplY3QuZGVmaW5lUHJvcGVydHkodCxlLE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IobixlKSl9KSl9cmV0dXJuIHR9ZnVuY3Rpb24gcWUodCxlLG4pe3JldHVybiBXZS5hcHBseSh0aGlzLGFyZ3VtZW50cyl9ZnVuY3Rpb24gV2UoKXtyZXR1cm4gV2U9TigpKFIoKS5tYXJrKChmdW5jdGlvbiB0KGUsbixyKXt2YXIgbyxpLGEsYyxzLHUsbCxmO3JldHVybiBSKCkud3JhcCgoZnVuY3Rpb24odCl7Zm9yKDs7KXN3aXRjaCh0LnByZXY9dC5uZXh0KXtjYXNlIDA6cmV0dXJuIG89ZS5tb2RlLGk9ZS51c2VySWQsYT1lLmVudklkLGM9ZS5hcGlVUkwscz1lLmhlYWRlcnMsdT13aW5kb3cuZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LGw9e21vZGU6byxzY3JlZW5XaWR0aDp3aW5kb3cuc2NyZWVuLndpZHRoLHNjcmVlbkhlaWdodDp3aW5kb3cuc2NyZWVuLmhlaWdodCxjbGllbnRXaWR0aDp1LmNsaWVudFdpZHRoLGNsaWVudEhlaWdodDp1LmNsaWVudEhlaWdodCxsb2NhdGlvbjp3aW5kb3cubG9jYXRpb24uaHJlZixsYW5ndWFnZTp3aW5kb3cubmF2aWdhdG9yLmxhbmd1YWdlfSxmPXthY3Rpb246bixlcnI6e21lc3NhZ2U6ci5tZXNzYWdlLHN0YWNrOnIuc3RhY2t9LG1ldGE6bCx2aWQ6aSxlbnZJZDphfSx0Lm5leHQ9NixCZSgiIi5jb25jYXQoYywiL3Nkay8xL2Vycm9ycyIpLHttZXRob2Q6IlBPU1QiLGhlYWRlcnM6T2JqZWN0LmFzc2lnbih7IngtdWwtZXJyb3IiOndpbmRvdy5idG9hKCJ1c2VybGVhcC0iLmNvbmNhdChEYXRlLm5vdygpLCItZXJyb3IiKSl9LHMpLGJvZHk6SlNPTi5zdHJpbmdpZnkoZil9KTtjYXNlIDY6dC5zZW50Lm9rfHxjb25zb2xlLndhcm4oIltVc2VyTGVhcF0gKEVSUi00NDQpIEZhaWxlZCB0byByZXBvcnQgZXJyb3IgdG8gQVBJIixyKTtjYXNlIDg6Y2FzZSJlbmQiOnJldHVybiB0LnN0b3AoKX19KSx0KX0pKSksV2UuYXBwbHkodGhpcyxhcmd1bWVudHMpfXZhciBHZT1mdW5jdGlvbih0KXtyZXR1cm4gMD09PXQudXNlcklkfHx0Lm1ldGEmJiJ0ZXN0Ij09PXQubWV0YS5tb2RlfHx0LmlzUHJldmlld30sWmU9e3N1cnZleUlkOm51bGwscnVubmluZzohMSxmcmFtZTpudWxsLGVudklkOm51bGwsdXNlcklkOm51bGwsbWV0YTp7fSxib3JkZXI6bnVsbCxmb250RmFtaWx5Om51bGwsZm9udEZhbWlseVVSTDpudWxsLHRpbWVvdXQ6bnVsbCxpbnRlcnZhbDpudWxsLG1vZGU6bnVsbCxkZWNrOntpbmRleDowLGNhcmRzOltdfSxjb250ZXh0Ont9LHNlbmRpbmc6ITEsY2FyZHM6e29wZW46ZnVuY3Rpb24odCl7dmFyIGU9dC5jbGFzc05hbWUsbj10Lm1lc3NhZ2Uscj10LnByb3BlcnRpZXMsbz0odC5sb2NhbGUsdC5uZXh0KSxpPXQucXVlc3Rpb25JZDtyZXR1cm4gZnVuY3Rpb24odCxhKXt2YXIgYz10LmFwcCxzPWMudXNlTW9iaWxlU3R5bGluZyx1PWMuYm9yZGVyLGw9RihbZSwidWwtY2FyZC0tdGV4dCIsbHRdKSxmPVR0KHIpLGQ9ciYmci5vcGVuVGV4dFBsYWNlaG9sZGVyP3Iub3BlblRleHRQbGFjZWhvbGRlcjpudWxsO3JldHVybiBBKCJmb3JtIix7aWQ6InRleHQtZm9ybSIsY2xhc3NOYW1lOmwsb25zdWJtaXQ6ZnVuY3Rpb24odCl7cmV0dXJuIER0KHQsbyl9LGtleTppfSxfdChmLG4pLGYsQSgiZGl2Iix7Y2xhc3NOYW1lOiJ1bC1jYXJkLXRleHQifSxBKCJkaXYiLHtjbGFzc05hbWU6InVsLWNhcmQtdGV4dF9fY29udGFpbmVyIn0sQSgidGV4dGFyZWEiLHsiZGF0YS1ncmFtbSI6ImZhbHNlIixtYXhsZW5ndGg6IjUwMDAiLGNsYXNzTmFtZTpGKGZ0KGl0LHMpKSxuYW1lOiJ0ZXh0IixwbGFjZWhvbGRlcjpkLCJhcmlhLXBsYWNlaG9sZGVyIjpkLCJhcmlhLW11bHRpbGluZSI6InRydWUiLHZhbHVlOnQub3BlblRleHQudmFsdWUsb25jcmVhdGU6TnQoKSxvbmlucHV0OmZ1bmN0aW9uKHQpe3QucHJldmVudERlZmF1bHQoKSx0LnN0b3BQcm9wYWdhdGlvbigpLGEub3BlblRleHQub25UZXh0Q2hhbmdlKHQudGFyZ2V0LnZhbHVlKX0sb25mb2N1czpmdW5jdGlvbih0KXt0LnRhcmdldC5zdHlsZS5ib3JkZXJDb2xvcj11fSxvbmJsdXI6ZnVuY3Rpb24odCl7dC50YXJnZXQuc3R5bGUuYm9yZGVyQ29sb3I9IiNlNmU2ZTYifSx0YWJpbmRleDowLCJhcmlhLWxhYmVsbGVkYnkiOnN0LGNvbnRlbnRlZGl0YWJsZToidHJ1ZSIscm9sZToidGV4dGJveCIsImFyaWEtbGFiZWwiOmR9KSksQSgiYnV0dG9uIix7aWQ6InVsLWNhcmQtdGV4dF9fYnV0dG9uIixjbGFzc05hbWU6InVsLWNhcmQtdGV4dF9fYnV0dG9uIixzdHlsZTp7YmFja2dyb3VuZENvbG9yOnV9LG9uY2xpY2s6ZnVuY3Rpb24oZSl7KGUucHJldmVudERlZmF1bHQoKSxlLnN0b3BQcm9wYWdhdGlvbigpLGRvY3VtZW50LmZvcm1zWyJ0ZXh0LWZvcm0iXSkmJihEdCh0Lm9wZW5UZXh0LnZhbHVlLnRyaW0oKSxvKSx0Lm9wZW5UZXh0LnZhbHVlPSIiKX0scm9sZToiYnV0dG9uIiwiYXJpYS1sYWJlbGxlZGJ5IjoiIi5jb25jYXQoc3QsIiB1bC1jYXJkLXRleHRfX2J1dHRvbiIpfSxMdChyKSkpLEEoTXQsbnVsbCkpfX0sdGV4dHVybHByb21wdDpmdW5jdGlvbih0KXt2YXIgZT10LmNsYXNzTmFtZSxuPXQubWVzc2FnZSxyPXQucHJvcGVydGllcyxvPSh0LmxvY2FsZSx0Lm5leHQpLGk9dC5xdWVzdGlvbklkO3JldHVybiBmdW5jdGlvbih0LGEpe3ZhciBjPUYoW2UsInVsLWNhcmRfX3RleHQtdXJsLXByb21wdCIsbHRdKSxzPXQuYXBwLmJvcmRlcjtyZXR1cm4gQSgiZGl2Iix7Y2xhc3NOYW1lOmMsa2V5Oml9LEEoInAiLHtpZDpzdCxjbGFzc05hbWU6InVsLXF1ZXN0aW9uIn0sbiksQSgiZGl2Iix7aWQ6InVsLWNhcmRfX3RleHQtdXJsLWJvZHktY29udGFpbmVyIixjbGFzc05hbWU6InVsLWNhcmRfX3RleHQtdXJsLWJvZHktY29udGFpbmVyIn0sKHImJnIuYm9keT9yLmJvZHkuc3BsaXQoL1xuXHMqXG4vZyk6W10pLm1hcCgoZnVuY3Rpb24odCl7cmV0dXJuIEEoInAiLHtjbGFzc05hbWU6InVsLWNhcmRfX3RleHQtdXJsLXByb21wdC1ib2R5In0sdCl9KSkpLEEoImEiLHtpZDoidWwtY2FyZC10ZXh0X19idXR0b24iLGNsYXNzTmFtZToidWwtY2FyZC10ZXh0X19idXR0b24gdWwtY2FyZF9fdGV4dC11cmwtcHJvbXB0LWJ1dHRvbiIsc3R5bGU6e2JhY2tncm91bmRDb2xvcjpzLCJtYXJnaW4tcmlnaHQiOiJhdXRvIiwidGV4dC1vdmVyZmxvdyI6ImVsbGlwc2lzIix0ZXh0RGVjb3JhdGlvbjoibm9uZSIsb3ZlcmZsb3c6InZpc2libGUifSxvbmNsaWNrOmZ1bmN0aW9uKHQpe28oKX0sb25rZXlwcmVzczpmdW5jdGlvbih0KXsxMyE9dC5rZXlDb2RlJiYzMiE9dC5rZXlDb2RlfHxvKCl9LGhyZWY6ciYmci5idXR0b25VcmwsdGFyZ2V0OiJfYmxhbmsiLHJvbGU6ImJ1dHRvbiIsdGFiaW5kZXg6MCwiYXJpYS1sYWJlbGxlZGJ5IjoiIi5jb25jYXQoc3QsIiB1bC1jYXJkLXRleHRfX2J1dHRvbiIpLCJhcmlhLWRlc2NyaWJlZGJ5IjoidWwtY2FyZF9fdGV4dC11cmwtYm9keS1jb250YWluZXIifSxyJiZyLmJ1dHRvblRleHQ/ci5idXR0b25UZXh0OiJOZXh0IiksQShNdCxudWxsKSl9fSxtdWx0aXBsZWNob2ljZTpmdW5jdGlvbih0KXt2YXIgZT10LmNsYXNzTmFtZSxuPXQuYm9yZGVyLG89dC5tZXNzYWdlLGk9dC5wcm9wZXJ0aWVzLGE9KHQubG9jYWxlLHQub3B0aW9ucyksYz12b2lkIDA9PT1hP1tdOmEscz10Lm5leHQsdT10LnF1ZXN0aW9uSWQ7cmV0dXJuIGZ1bmN0aW9uKHQsYSl7dmFyIGw9dC5hcHAudXNlTW9iaWxlU3R5bGluZyxmPUYoW2UsInVsLWNhcmQtLW11bHRpcGxlIixsdF0pO2Z1bmN0aW9uIGQodCxlKXtzKHt2YWx1ZTpyKCkoe30sdCxlKX0pfXZhciBwPWMubWFwKChmdW5jdGlvbih0LGUpe3ZhciByPXQuaWQsbz10LmxhYmVsLGk9dC52YWx1ZTtyZXR1cm4gQShGdCx7Ym9yZGVyOm4saW5kZXg6ZSxsYWJlbDpvLHRhYmluZGV4OmUrMSxvblNlbGVjdDpkLmJpbmQobnVsbCxyLGkpLGlkOnIsaXNSYWRpbzohMCx1c2VNb2JpbGVTdHlsaW5nOmx9KX0pKSxoPVR0KGkpO3JldHVybiBBKCJkaXYiLHtjbGFzc05hbWU6ZixrZXk6dX0sX3QoaCxvKSxoLEEoImRpdiIse2NsYXNzTmFtZTpGKGZ0KG90LGwpKSxyb2xlOiJyYWRpb2dyb3VwIiwiYXJpYS1sYWJlbGVkYnkiOnN0fSxwKSxBKE10LG51bGwpKX19LG11bHRpcGxlc2VsZWN0OmZ1bmN0aW9uKHQpe3ZhciBlPXQuY2xhc3NOYW1lLG49dC5ib3JkZXIscj10Lm1lc3NhZ2Usbz10LnByb3BlcnRpZXMsaT0odC5sb2NhbGUsdC5vcHRpb25zKSxhPXZvaWQgMD09PWk/W106aSxjPSh0LmlzTGFzdCx0Lm5leHQpLHM9dC5xdWVzdGlvbklkO3JldHVybiBmdW5jdGlvbih0LGkpe3ZhciB1PUYoW2UsInVsLWNhcmQtLW11bHRpcGxlIixsdF0pLGw9dC5tdWx0aXBsZXNlbGVjdC5zZWxlY3RlZE9wdGlvbnMsZj1pLm11bHRpcGxlc2VsZWN0LGQ9Zi5pbml0LHA9Zi5yZXNldCxoPWYudXBkYXRlU2VsZWN0ZWQsdj10LmFwcC51c2VNb2JpbGVTdHlsaW5nLGc9ZnVuY3Rpb24oZSl7ZS5wcmV2ZW50RGVmYXVsdCgpLGUuc3RvcFByb3BhZ2F0aW9uKCksZnVuY3Rpb24odCxlKXtlKHt2YWx1ZTp0fSl9KHQubXVsdGlwbGVzZWxlY3Quc2VsZWN0ZWRPcHRpb25zLGMpLHAoKX0seT1hLm1hcCgoZnVuY3Rpb24odCxlKXt2YXIgcj10LmlkLG89dC5sYWJlbDt0LnZhbHVlO3JldHVybiBBKEZ0LHtib3JkZXI6bixpbmRleDplLGxhYmVsOm8sb25TZWxlY3Q6aCxzZWxlY3RlZDpsW3JdLGlkOnIsaXNSYWRpbzohMSx1c2VNb2JpbGVTdHlsaW5nOnZ9KX0pKSxtPVR0KG8pO3JldHVybiBBKCJmb3JtIix7aWQ6InRleHQtZm9ybSIsY2xhc3NOYW1lOnUsb25zdWJtaXQ6ZyxvbmNyZWF0ZTpmdW5jdGlvbih0KXtyZXR1cm4gZT17fSxhLmZvckVhY2goKGZ1bmN0aW9uKHQpe2VbdC5pZF09ITF9KSksdm9pZCBkKGUpO3ZhciBlfSxrZXk6c30sX3QobSxyKSxtLEEoImRpdiIse2NsYXNzTmFtZTpGKGZ0KG90LHYpKSxyb2xlOiJyYWRpb2dyb3VwIn0seSksQSgiZGl2Iix7Y2xhc3NOYW1lOiJ1bC1jYXJkLXRleHQifSxBKCJidXR0b24iLHtpZDoidWwtY2FyZC10ZXh0X19idXR0b24iLGNsYXNzTmFtZToidWwtY2FyZC10ZXh0X19idXR0b24iLHN0eWxlOntiYWNrZ3JvdW5kQ29sb3I6bn0sb25jbGljazpnLHJvbGU6ImJ1dHRvbiIsImFyaWEtbGFiZWxsZWRieSI6IiIuY29uY2F0KHN0LCIgdWwtY2FyZC10ZXh0X19idXR0b24iKX0sTHQobykpKSxBKE10LG51bGwpKX19LGxpa2VydDpmdW5jdGlvbih0KXt2YXIgZT10LmJvcmRlcixuPXQuY2xhc3NOYW1lLHI9KHQubG9jYWxlLHQubGFiZWxzKSxvPXQubWVzc2FnZSxpPXQucHJvcGVydGllcyxhPXQubmV4dCxjPXQucXVlc3Rpb25JZDtyZXR1cm4gZnVuY3Rpb24odCxzKXt2YXIgdT10LmFwcCxsPXUudXNlTW9iaWxlU3R5bGluZyxmPXUuZGVjay5pbmRleCxkPUYoW24sInVsLWNhcmQtLWxpa2VydCIsbHRdKSxwPXImJnIubGVmdCxoPXImJnIucmlnaHQsdj1fKCkoQXJyYXkoNSkpLm1hcCgoZnVuY3Rpb24odCxuKXt2YXIgcj1uKzEsbz0ib3B0aW9uLSIuY29uY2F0KHIpLGk9ZnVuY3Rpb24odCl7dC50YXJnZXQuc3R5bGUuekluZGV4PTIsdC50YXJnZXQuc3R5bGUuYm9yZGVyQ29sb3I9ZX0sYz1mdW5jdGlvbih0KXt0LnRhcmdldC5zdHlsZS56SW5kZXg9ImF1dG8iLHQudGFyZ2V0LnN0eWxlLmJvcmRlckNvbG9yPSIjZTZlNmU2In0scz17b25jbGljazpmdW5jdGlvbigpe3JldHVybiBhKHIpfSxvbmtleXByZXNzOmZ1bmN0aW9uKHQpe3JldHVybiBmdW5jdGlvbih0KXsxMyE9dC5rZXlDb2RlJiYzMiE9dC5rZXlDb2RlfHxhKHIpfSh0KX19O3JldHVybiJvbnRvdWNoc3RhcnQiaW4gZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50PyhzLm9udG91Y2hzdGFydD1pLHMub250b3VjaGNhbmNlbD1jLHMub250b3VjaG1vdmU9YyxzLm9udG91Y2hlbmQ9Yyk6KHMub25tb3VzZWRvd249aSxzLm9ubW91c2VsZWF2ZT1jKSxBKCJkaXYiLE0oKSh7aWQ6byxjbGFzc05hbWU6RihbXS5jb25jYXQoXygpKGZ0KFgsbCkpLF8oKShmdCgiIi5jb25jYXQoWCwiLSIpLmNvbmNhdChyKSxsKSkpKX0scyx7ImFyaWEtbGFiZWxsZWRieSI6IiIuY29uY2F0KHN0LCIgIikuY29uY2F0KG8pLHJvbGU6InRleHRib3giLHRhYmluZGV4OjAsImFyaWEtZGVzY3JpYmVkYnkiOnV0fSkscil9KSksZz1UdChpKTtyZXR1cm4gQSgiZm9ybSIse2NsYXNzTmFtZTpkLGtleTpjfSxfdChnLG8pLGcsZiUyPT0wJiZBKCJkaXYiLG51bGwpLEEoImRpdiIse2NsYXNzTmFtZToidWwtY2FyZC0tbGlrZXJ0X19udW1iZXJzIn0sdiksQSgiZGl2Iix7Y2xhc3NOYW1lOiJ1bC1jYXJkLS1saWtlcnRfX2xhYmVscyJ9LEEoInNwYW4iLG51bGwscCksQSgic3BhbiIsbnVsbCxoKSksQShNdCxudWxsKSl9fSx0aGFua3M6ZnVuY3Rpb24odCl7dmFyIGU9dC5lbmRDYXJkLG49dC5ib3JkZXIscj10LmNsYXNzTmFtZSxvPSh0LmxvY2FsZSx0LnF1ZXN0aW9uSWQpO3JldHVybiBmdW5jdGlvbih0LGkpe3ZhciBhPUYoW3IsInVsLWNhcmQtLXRoYW5rcyIsbHRdKSxjPWUmJmUuc3ViaGVhZGVyP0EoInAiLHtjbGFzc05hbWU6InVsLWNhcHRpb24ifSxlLnN1YmhlYWRlcik6bnVsbCxzPWUmJmUuaGVhZGxpbmU/ZS5oZWFkbGluZTpudWxsO3JldHVybiBBKCJkaXYiLHtjbGFzc05hbWU6YSxrZXk6b30sQSgiZGl2Iix7b25jcmVhdGU6ZnVuY3Rpb24oKXtyZXR1cm4gaS5hcHAuY29tcGxldGUoKX19LEEoImRpdiIse2NsYXNzTmFtZToidWwtY2FyZC0tdGhhbmtzLWNvbnRlbnQifSxBKCJkaXYiLHtjbGFzc05hbWU6InVsLXRoYW5rcy1jaGVjayJ9LEEoInN2ZyIse3dpZHRoOiI4MSIsaGVpZ2h0OiI5OSIsdmlld0JveDoiMCAwIDgxIDk5IixmaWxsOiJub25lIix4bWxuczoiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciLCJhcmlhLWxhYmVsbGVkYnkiOiJ0aXRsZSJ9LEEoInBhdGgiLHsiZmlsbC1ydWxlIjoiZXZlbm9kZCIsImNsaXAtcnVsZSI6ImV2ZW5vZGQiLGQ6Ik00MC41IDc3QzYwLjkzNDUgNzcgNzcuNSA2MC40MzQ1IDc3LjUgNDBDNzcuNSAxOS41NjU1IDYwLjkzNDUgMyA0MC41IDNDMjAuMDY1NSAzIDMuNSAxOS41NjU1IDMuNSA0MEMzLjUgNjAuNDM0NSAyMC4wNjU1IDc3IDQwLjUgNzdaTTgwLjUgNDBDODAuNSA2Mi4wOTE0IDYyLjU5MTQgODAgNDAuNSA4MEMxOC40MDg2IDgwIDAuNSA2Mi4wOTE0IDAuNSA0MEMwLjUgMTcuOTA4NiAxOC40MDg2IDAgNDAuNSAwQzYyLjU5MTQgMCA4MC41IDE3LjkwODYgODAuNSA0MFoiLGZpbGw6bn0pLEEoInBhdGgiLHsiZmlsbC1ydWxlIjoiZXZlbm9kZCIsImNsaXAtcnVsZSI6ImV2ZW5vZGQiLGQ6Ik01NS4wMjUgMjIuOTA0NkM1NS42Mjk5IDIzLjQ3MDUgNTUuNjYxNiAyNC40MTk4IDU1LjA5NTYgMjUuMDI0N0M1NC44NzI0IDI1LjI2MzQgNTQuNjEwOSAyNS41Mjg1IDU0LjMxNTcgMjUuODI3N0M1Mi4yNTQ3IDI3LjkxNjggNDguNTU0OSAzMS42NjcgNDQuODEzNSAzOS42NjU4QzQzLjI4MTggNDIuOTQwNiA0Mi4wODY0IDQ1LjgzODYgNDEuMDgyMyA0OC4yNzI5QzQwLjY1MzkgNDkuMzExNiA0MC4yNjAzIDUwLjI2NTkgMzkuODkwMiA1MS4xMjlDMzkuMjg3IDUyLjUzNTkgMzguNzI0OCA1My43NTA4IDM4LjE3NDQgNTQuNjI1QzM3Ljg5OTcgNTUuMDYxMyAzNy41ODA2IDU1LjQ5MDUgMzcuMjAxNyA1NS44MjQ1QzM2LjgyMDEgNTYuMTYwNyAzNi4yNjEzIDU2LjUgMzUuNTQ1NyA1Ni41QzM0LjY3NDIgNTYuNSAzNC4wODkyIDU1Ljk2OTIgMzMuNzc3NCA1NS42MDgzQzMzLjQ1MDIgNTUuMjI5NiAzMy4xNzUyIDU0Ljc1MTEgMzIuOTM5NiA1NC4zMDFDMzIuNzMwNSA1My45MDEzIDMyLjUwODggNTMuNDM2NyAzMi4yNzk3IDUyLjk1NjVDMzIuMjQyOSA1Mi44Nzk0IDMyLjIwNTkgNTIuODAxOSAzMi4xNjg4IDUyLjcyNDNDMzEuODk0MiA1Mi4xNDk5IDMxLjU5NTkgNTEuNTM0IDMxLjI1MzcgNTAuODg2OEMyOS44ODg2IDQ4LjMwNSAyNy44NTM5IDQ1LjI4NzggMjQuMjM0MyA0My4xMzgyQzIzLjUyMiA0Mi43MTUyIDIzLjI4NzUgNDEuNzk0OSAyMy43MTA1IDQxLjA4MjZDMjQuMTMzNSA0MC4zNzAzIDI1LjA1MzkgNDAuMTM1OCAyNS43NjYyIDQwLjU1ODhDMzAuMDU1NiA0My4xMDYyIDMyLjQxNDkgNDYuNjY0NyAzMy45MDU4IDQ5LjQ4NDVDMzQuMjc3NiA1MC4xODc2IDM0LjU5NzMgNTAuODQ4NyAzNC44NzUzIDUxLjQzMDJDMzQuOTE0NyA1MS41MTI0IDM0Ljk1MjkgNTEuNTkyNiAzNC45OTAyIDUxLjY3MDdDMzUuMjIyMiA1Mi4xNTY3IDM1LjQxNjQgNTIuNTYzNyAzNS41OTc4IDUyLjkxMDJDMzUuNjE1MSA1Mi45NDM0IDM1LjYzMjEgNTIuOTc1NCAzNS42NDg1IDUzLjAwNjFDMzYuMDU2NSA1Mi4zNTMxIDM2LjUzNDEgNTEuMzQzNCAzNy4xMzMgNDkuOTQ2OEMzNy40NzgxIDQ5LjE0MTggMzcuODU3MiA0OC4yMjI5IDM4LjI3NjEgNDcuMjA3NEMzOS4yODg2IDQ0Ljc1MzIgNDAuNTMzOSA0MS43MzQ3IDQyLjA5NjEgMzguMzk0OEM0Ni4wNTkxIDI5LjkyMjEgNTAuMDY0MSAyNS44NjQ4IDUyLjE1MzUgMjMuNzQ4MkM1Mi40NDIzIDIzLjQ1NTYgNTIuNjk0NCAyMy4yMDAyIDUyLjkwNDggMjIuOTc1M0M1My40NzA4IDIyLjM3MDMgNTQuNDIgMjIuMzM4NyA1NS4wMjUgMjIuOTA0NlpNMzUuMTk5NCA1My41ODkyQzM1LjE5OTQgNTMuNTg5MiAzNS4yIDUzLjU4ODggMzUuMjAxMiA1My41ODc5QzM1LjIgNTMuNTg4OSAzNS4xOTk0IDUzLjU4OTMgMzUuMTk5NCA1My41ODkyWk0zNi4wNjY2IDUzLjY2ODJDMzYuMDczMiA1My42NzQgMzYuMDc2NSA1My42Nzc1IDM2LjA3NjUgNTMuNjc3N0MzNi4wNzY1IDUzLjY3OCAzNi4wNzMyIDUzLjY3NTEgMzYuMDY2NiA1My42NjgyWiIsZmlsbDpufSksQSgicGF0aCIse2Q6Ik02OS41IDk3QzY5LjUgOTguMTA0NiA1Ni4yOTI0IDk5IDQwIDk5QzIzLjcwNzYgOTkgMTAuNSA5OC4xMDQ2IDEwLjUgOTdDMTAuNSA5NS44OTU0IDIzLjcwNzYgOTUgNDAgOTVDNTYuMjkyNCA5NSA2OS41IDk1Ljg5NTQgNjkuNSA5N1oiLGZpbGw6ImJsYWNrIiwiZmlsbC1vcGFjaXR5IjoiMC4yIn0pKSksQSgicCIse2NsYXNzTmFtZTpzdCxpZDpzdH0scyksYyksQShNdCxudWxsKSkpfX0sbnBzOmZ1bmN0aW9uKHQpe3ZhciBlPXQuYm9yZGVyLG49dC5jbGFzc05hbWUscj0odC5sb2NhbGUsdC5sYWJlbHMpLG89dC5tZXNzYWdlLGk9dC5wcm9wZXJ0aWVzLGE9dC5uZXh0LGM9dC5xdWVzdGlvbklkO3JldHVybiBmdW5jdGlvbih0LHMpe3ZhciB1PXQuYXBwLGw9dS51c2VNb2JpbGVTdHlsaW5nLGY9dS5kZWNrLmluZGV4LGQ9RihbbiwidWwtY2FyZC0tbnBzIixsdF0pLHA9ciYmci5sZWZ0LGg9ciYmci5yaWdodCx2PV8oKShBcnJheSgxMSkpLm1hcCgoZnVuY3Rpb24odCxuKXt2YXIgcj1uLG89Im9wdGlvbi0iLmNvbmNhdChyKSxpPWZ1bmN0aW9uKHQpe3QudGFyZ2V0LnN0eWxlLnpJbmRleD0yLHQudGFyZ2V0LnN0eWxlLmJvcmRlckNvbG9yPWV9LGM9ZnVuY3Rpb24odCl7dC50YXJnZXQuc3R5bGUuekluZGV4PSJhdXRvIix0LnRhcmdldC5zdHlsZS5ib3JkZXJDb2xvcj0iI2U2ZTZlNiJ9LHM9e29uY2xpY2s6ZnVuY3Rpb24oKXtyZXR1cm4gYShyKX0sb25rZXlwcmVzczpmdW5jdGlvbih0KXtyZXR1cm4gZnVuY3Rpb24odCl7MTMhPXQua2V5Q29kZSYmMzIhPXQua2V5Q29kZXx8YShyKX0odCl9fTtyZXR1cm4ib250b3VjaHN0YXJ0ImluIGRvY3VtZW50LmRvY3VtZW50RWxlbWVudD8ocy5vbnRvdWNoc3RhcnQ9aSxzLm9udG91Y2hjYW5jZWw9YyxzLm9udG91Y2htb3ZlPWMscy5vbnRvdWNoZW5kPWMpOihzLm9ubW91c2Vkb3duPWkscy5vbm1vdXNlbGVhdmU9YyksQSgiZGl2IixNKCkoe2NsYXNzTmFtZTpGKFtdLmNvbmNhdChfKCkoZnQoUSxsKSksXygpKGZ0KCIiLmNvbmNhdChRLCItIikuY29uY2F0KHIpLGwpKSkpfSxzLHsiYXJpYS1sYWJlbGxlZGJ5IjoiIi5jb25jYXQoc3QsIiAiKS5jb25jYXQobykscm9sZToicmFkaW8iLHRhYmluZGV4OjAsaWQ6b30pLHIpfSkpLGc9VHQoaSk7cmV0dXJuIEEoImZvcm0iLHtjbGFzc05hbWU6ZCxrZXk6Y30sX3QoZyxvKSxnLGYlMj09MCYmQSgiZGl2IixudWxsKSxBKCJkaXYiLHtjbGFzc05hbWU6InVsLWNhcmQtLW5wc19fbnVtYmVycyJ9LHYpLEEoImRpdiIse2NsYXNzTmFtZToidWwtY2FyZC0tbnBzX19sYWJlbHMifSxBKCJzcGFuIixudWxsLHApLEEoInNwYW4iLG51bGwsaCkpLEEoTXQsbnVsbCkpfX0sdmlkZW92b2ljZTpmdW5jdGlvbih0KXt2YXIgZT10LmNsYXNzTmFtZSxuPXQubWVzc2FnZSxvPXQucHJvcGVydGllcyxpPXQubmV4dCxhPXQucXVlc3Rpb25JZCxjPXQudXBkYXRlSGVpZ2h0O3JldHVybiBmdW5jdGlvbih0LHMpe3ZhciB1PUYoW2UsWV0pLGw9InVsLWNhcmQtdmlkZW9fX3BsYXllcl9yZWNvcmRlciIsZj0idWwtY2FyZC12aWRlb19fbmV4dF9idXR0b24iLGQ9InVsLXZpZGVvLWludGVydmlldy1mb3JtIixwPSJ1bC1xdWVzdGlvbi1wbGF5ZXItY29udGFpbmVyIixoPSJ1bC1yZWNvcmRlci1wbGF5ZXItY29udGFpbmVyIix2PW8mJm8udmlkZW9VcmwsZz10LmFwcCx5PWcuc3VydmV5SWQsbT1nLnJlc3BvbnNlR3JvdXBVaWQsYj1nLmFwaVVSTCx4PWcudXNlcklkLHc9Zy5ib3JkZXIsRT1nLmVudklkLGo9Zy5oZWFkZXJzO2lmKHQuY2FyZERhdGF8fCh0LmNhcmREYXRhPXt9KSx0LmNhcmREYXRhLnVwbG9hZElkPXZvaWQgMCx0LmNhcmREYXRhLmJ1dHRvblRleHQ9THQobyksdC5jYXJkRGF0YS5za2lwQnV0dG9uVGV4dD1SdChvKSxkb2N1bWVudC5nZXRFbGVtZW50QnlJZChsKSl7eGUobCx2LHtzdXJ2ZXlJZDp5LHJlc3BvbnNlR3JvdXBVaWQ6bSxxdWVzdGlvbklkOmEsdmlzaXRvcklkOnh9LG8ubWVkaWFUeXBlPT09RWUuTUVESUFfVFlQRV9BVURJTyk7dmFyIEM9ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoZik7Qy5pbm5lclRleHQ9dC5jYXJkRGF0YS5za2lwQnV0dG9uVGV4dCxDLmNsYXNzTGlzdC5hZGQoa2UpfXZhciBrPWZ1bmN0aW9uKGUsbil7dmFyIHI9ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoZik7ZT09PUVlLlVQTE9BRF9TVEFSVEVEPyh0LmNhcmREYXRhLnVwbG9hZElkPW5bRWUuVVBMT0FEX0lEXSxyLmlubmVyVGV4dD10LmNhcmREYXRhLmJ1dHRvblRleHQsci5jbGFzc0xpc3QucmVtb3ZlKGtlKSxPYmplY3QuYXNzaWduKHIuc3R5bGUse2JhY2tncm91bmRDb2xvcjp3fSkpOmU9PT1FZS5ERUxFVEUmJih0LmNhcmREYXRhLnVwbG9hZElkPW51bGwsci5jbGFzc0xpc3QuYWRkKGtlKSxyLmlubmVyVGV4dD10LmNhcmREYXRhLnNraXBCdXR0b25UZXh0LE9iamVjdC5hc3NpZ24oci5zdHlsZSx7YmFja2dyb3VuZENvbG9yOiIifSkpfSxTPWZ1bmN0aW9uKHQsZSl7dmFyIG49ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiYnV0dG9uIik7cmV0dXJuIG4uY2xhc3NOYW1lPSIiLmNvbmNhdCgidWwtdmlkZW8tYnRuIiwiICIpLmNvbmNhdCh0KSxuLmFkZEV2ZW50TGlzdGVuZXIoImNsaWNrIiwoZnVuY3Rpb24odCl7dC5wcmV2ZW50RGVmYXVsdCgpLHQuc3RvcFByb3BhZ2F0aW9uKCksZnVuY3Rpb24oKXt2YXIgdD0hKGFyZ3VtZW50cy5sZW5ndGg+MCYmdm9pZCAwIT09YXJndW1lbnRzWzBdKXx8YXJndW1lbnRzWzBdLGU9ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQocCksbj1kb2N1bWVudC5nZXRFbGVtZW50QnlJZChoKTt0PyhlLmNsYXNzTGlzdC5yZW1vdmUoSnQpLGUuY2xhc3NMaXN0LmFkZChLdCksbi5jbGFzc0xpc3QuYWRkKEp0KSxuLmNsYXNzTGlzdC5yZW1vdmUoS3QpKTooYmUobCksZS5jbGFzc0xpc3QuYWRkKEp0KSxlLmNsYXNzTGlzdC5yZW1vdmUoS3QpLG4uY2xhc3NMaXN0LnJlbW92ZShKdCksbi5jbGFzc0xpc3QuYWRkKEt0KSl9KGUpfSkpLG59LE89ZnVuY3Rpb24oKXt2YXIgdD1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKTt0LmlkPSJ1bC1xdWVzdGlvbi1wbGF5ZXItY29udGFpbmVyIix0LmNsYXNzTmFtZT0idWwtdmlkZW8tY29udGFpbmVyICIuY29uY2F0KEt0KSx0LmFwcGVuZENoaWxkKCgodCxlLG4scj0hMSxvPSJodHRwczovL2FwaS5zcHJpZy5jb20iKT0+e2NvbnN0IGk9dCtuZSxhPXZlKGkpO3JldHVybiBkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCJzZWN1cml0eXBvbGljeXZpb2xhdGlvbiIsKHQ9PnthZShuZXcgRXJyb3IoYFZvaWNlICYgVmlkZW8gZmVhdHVyZSB2aW9sYXRlcyAke3QudmlvbGF0ZWREaXJlY3RpdmV9IHdlYiBwYWdlIENTUCBwb2xpY2llcyBmb3IgdGhlIHF1ZXN0aW9uIHBsYXllci5gKSwicGxheWVyRGV2aWNlRXJyb3IiLG8se30pfSkpLGNlKGEsZWUsKCgpPT57ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoWXQoaSkpLnJlbW92ZSgpLGdlKGksYSk7Y29uc3QgdD13aW5kb3cudmlkZW9qcyhpLHtwbGF5c2lubGluZTohMCxwbGF5YmFja1JhdGVzOlsuNSwxLDEuNSwyXX0pLG89dWUodCxbIlBsYXliYWNrUmF0ZU1lbnVCdXR0b24iLCJQbGF5VG9nZ2xlIiwiRnVsbHNjcmVlblRvZ2dsZSJdKSxjPW8uY2hpbGRyZW4oKS5maW5kKCh0PT4iRnVsbHNjcmVlblRvZ2dsZSI9PT10Lm5hbWVfKSk7Yy5oYXNDbGFzcygidmpzLWRpc2FibGVkIikmJmMuaGlkZSgpLGRlKHQsbyxlLG4scil9KSksYX0pKGwse3NyYzp2LHR5cGU6ImFwcGxpY2F0aW9uL3gtbXBlZ1VSTCJ9LHZvaWQgMCxvLm1lZGlhVHlwZT09PUVlLk1FRElBX1RZUEVfQVVESU8sYikpO3ZhciBlPVMoInVsLXJlY29yZC1yZXNwb25zZS1idG4iLCExKTtyZXR1cm4gdC5hcHBlbmRDaGlsZChlKSx0fSxJPWZ1bmN0aW9uKCl7dmFyIHQ9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2Iik7dC5pZD0idWwtcmVjb3JkZXItcGxheWVyLWNvbnRhaW5lciIsdC5jbGFzc05hbWU9InVsLXZpZGVvLWNvbnRhaW5lciAiLmNvbmNhdChKdCk7dmFyIGU9UygidWwtYmFjay1xdWVzdGlvbi1idG4iLCEwKTtyZXR1cm4gdC5hcHBlbmRDaGlsZChlKSx0LmFwcGVuZENoaWxkKCgodCxlPXt9LG49Imh0dHBzOi8vYXBpLnVzZXJsZWFwLmNvbSIscixvLGksYT0hMSk9Pntjb25zdCBjPXQrcmUscz12ZShjKTtyZXR1cm4gZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigic2VjdXJpdHlwb2xpY3l2aW9sYXRpb24iLCh0PT57Y29uc3QgZT13aW5kb3cudmlkZW9qcyhjKTthZShuZXcgRXJyb3IoYFZvaWNlICYgVmlkZW8gZmVhdHVyZSB2aW9sYXRlcyAke3QudmlvbGF0ZWREaXJlY3RpdmV9IHdlYiBwYWdlIENTUCBwb2xpY2llcyBmb3IgdGhlIHJlY29yZGVyIHBsYXllci5gKSwicmVjb3JkZXJEZXZpY2VFcnJvciIsbixpLGUucGF5bG9hZC52aXNpdG9ySWQsZS5wYXlsb2FkLmVudklkKX0pKSxjZShzLGVlLmNvbmNhdCh0ZSksKCgpPT57Z2UoYyxzKSxkb2N1bWVudC5nZXRFbGVtZW50QnlJZChZdChjKSkucmVtb3ZlKCkscGUocyxjLGUsbixyLG8saSxhKX0pKSxzfSkobCx7c3VydmV5SWQ6eSxyZXNwb25zZUdyb3VwVWlkOm0scXVlc3Rpb25JZDphLHZpc2l0b3JJZDp4LGVudklkOkV9LGIsaywhMSxmdW5jdGlvbih0KXtmb3IodmFyIGU9MTtlPGFyZ3VtZW50cy5sZW5ndGg7ZSsrKXt2YXIgbj1udWxsIT1hcmd1bWVudHNbZV0/YXJndW1lbnRzW2VdOnt9O2UlMj9DZShPYmplY3QobiksITApLmZvckVhY2goKGZ1bmN0aW9uKGUpe3IoKSh0LGUsbltlXSl9KSk6T2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcnM/T2JqZWN0LmRlZmluZVByb3BlcnRpZXModCxPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycyhuKSk6Q2UoT2JqZWN0KG4pKS5mb3JFYWNoKChmdW5jdGlvbihlKXtPYmplY3QuZGVmaW5lUHJvcGVydHkodCxlLE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IobixlKSl9KSl9cmV0dXJuIHR9KHt9LGoseyJ4LXVsLXZpZGVvLXJlY29yZGVyLW9yaWdpbiI6InNkayJ9KSxvLm1lZGlhVHlwZT09PUVlLk1FRElBX1RZUEVfQVVESU8pKSx0fSxNPVR0KG8pO3JldHVybiBBKCJkaXYiLHtjbGFzc05hbWU6bHQsa2V5OmF9LEEoImZvcm0iLHtpZDpkLGNsYXNzTmFtZTp1LG9uY3JlYXRlOmZ1bmN0aW9uKCl7dmFyIHQ9bmV3IFJlc2l6ZU9ic2VydmVyKChmdW5jdGlvbih0KXtyZXR1cm4gYygpfSkpLGU9ZG9jdW1lbnQucXVlcnlTZWxlY3RvcigiLiIuY29uY2F0KFkpKTt0Lm9ic2VydmUoZSl9LG9uc3VibWl0OmZ1bmN0aW9uKHQpe3JldHVybiBTZSh0LGkpfX0sX3QoTSxuKSxNLEEoImRpdiIse2lkOiJ1bC1jYXJkLXZvaWNlX192aWRlbyJ9LEEoImRpdiIse2lkOmwsb25jcmVhdGU6ZnVuY3Rpb24oKXt2YXIgdD1kb2N1bWVudC5nZXRFbGVtZW50QnlJZChsKTtyZXR1cm4gdC5hcHBlbmRDaGlsZChPKCkpLHQuYXBwZW5kQ2hpbGQoSSgpKSx0fX0pLEEoImJ1dHRvbiIse2lkOmYsY2xhc3NOYW1lOiJ1bC1jYXJkLXRleHRfX2J1dHRvbiAiLmNvbmNhdChrZSksb25jbGljazpmdW5jdGlvbihlKXtpZihlLnByZXZlbnREZWZhdWx0KCksZS5zdG9wUHJvcGFnYXRpb24oKSxtZShsKSxkb2N1bWVudC5mb3Jtc1tkXSl7dC5jYXJkRGF0YS51cGxvYWRJZD9TZSh7fSxpKTpTZSh7ZGVsZXRlZEF0OkRhdGUubm93KCl9LGkpO3ZhciBuPWRvY3VtZW50LmdldEVsZW1lbnRCeUlkKHApO2RvY3VtZW50LmdldEVsZW1lbnRCeUlkKGgpLmNsYXNzTGlzdC5hZGQoSnQpLG4uY2xhc3NMaXN0LnJlbW92ZShKdCl9fSxyb2xlOiJidXR0b24ifSxSdChvKSkpLEEoTXQsbnVsbCkpKX19fSxsb2NhbGU6ImVuIixhcGlVUkw6Imh0dHBzOi8vYXBpLnVzZXJsZWFwLmNvbSIsc2hvd1N1cnZleUJyYW5kOiEwLG1hcmtldGluZ1VybDoiaHR0cHM6Ly91c2VybGVhcC5jb20iLHNsdWdOYW1lOm51bGwscmVzcG9uc2VHcm91cFVpZDpudWxsLGhlYWRlcnM6e30saXNQcmV2aWV3OiExLGFuc3dlcnM6W10sY3VzdG9tTWV0YWRhdGE6e319LCRlPXtpbml0OmZ1bmN0aW9uKHQpe3ZhciBlPXQuc3VydmV5SWQsbj10LmZyYW1lLHI9dC5jYXJkcyxvPXQuZW52SWQsaT10LnVzZXJJZCxhPXQubWV0YSxjPXQuYm9yZGVyLHM9dC5mb250RmFtaWx5LHU9dC5mb250RmFtaWx5VVJMLGw9dC5tb2RlLGY9dC5jb250ZXh0LGQ9dC5sb2NhbGUscD10LmFwaVVSTCxoPXQuc2hvd1N1cnZleUJyYW5kLHY9dC5tYXJrZXRpbmdVcmwsZz10LnNsdWdOYW1lLHk9dC5yZXNwb25zZUdyb3VwVWlkLG09dC5oZWFkZXJzLGI9dC5lbmRDYXJkLHg9dC5jb25maWd1cmVFeGl0T25PdmVybGF5Q2xpY2ssdz10LmlzUHJldmlldyxFPXQuYW5zd2VycyxqPXQuY3VzdG9tTWV0YWRhdGEsQz10LmV4cGVyaW1lbnRGbGFncyxrPXQudXNlTW9iaWxlU3R5bGluZyxTPXQuZXZlbnRFbWl0dGVyO3JldHVybiBmdW5jdGlvbih0LE8pe3JldHVybiBIZSh7fSxPLmFkZERlY2soe2RlY2s6cixoYXNFbmRDYXJkOmJ9KSx7c3VydmV5SWQ6ZSxydW5uaW5nOiEwLGZyYW1lOm4sZW52SWQ6byx1c2VySWQ6aSxtZXRhOmEsYm9yZGVyOmMsZm9udEZhbWlseTpzLGZvbnRGYW1pbHlVUkw6dSx0aW1lb3V0OjEsbW9kZTpsLGNvbnRleHQ6Zixsb2NhbGU6ZCxhcGlVUkw6cCxzaG93U3VydmV5QnJhbmQ6aCxtYXJrZXRpbmdVcmw6dixzbHVnTmFtZTpnLHJlc3BvbnNlR3JvdXBVaWQ6eSxoZWFkZXJzOm0sZW5kQ2FyZDpiLGNvbmZpZ3VyZUV4aXRPbk92ZXJsYXlDbGljazp4LGlzUHJldmlldzp3LGFuc3dlcnM6RSxjdXN0b21NZXRhZGF0YTpqLGV4cGVyaW1lbnRGbGFnczpDLHVzZU1vYmlsZVN0eWxpbmc6ayxldmVudEVtaXR0ZXI6U30pfX0sYWRkRGVjazpmdW5jdGlvbih0KXt2YXIgZT10LmRlY2ssbj10Lmhhc0VuZENhcmQ7cmV0dXJuIGZ1bmN0aW9uKHQpe3ZhciByPWUubWFwKChmdW5jdGlvbihlKXtyZXR1cm4gSGUoe30sZSx7Q2FyZDp0LmNhcmRzW2UudHlwZV19KX0pKTtyZXR1cm4gbiYmci5wdXNoKHtDYXJkOnQuY2FyZHMudGhhbmtzfSkse2RlY2s6e2luZGV4OjAsY2FyZHM6cn19fX0sY29tcGxldGU6ZnVuY3Rpb24oKXtyZXR1cm4gZnVuY3Rpb24odCxlKXtyZXR1cm57aW50ZXJ2YWw6c2V0SW50ZXJ2YWwoZS5kZWR1Y3QsMWUzKX19fSxzZWVuOmZ1bmN0aW9uKCl7cmV0dXJuIGZ1bmN0aW9uKHQsZSl7R2UodCl8fGUudHJhY2tIaXN0b3J5KHtldmVudDoic2VlbiIsaXNOZXc6ITB9KX19LGNsb3NlOmZ1bmN0aW9uKCl7cmV0dXJuIGZ1bmN0aW9uKHQsZSl7aWYoIUdlKHQpKXJldHVybiBlLnRyYWNrSGlzdG9yeSh7ZXZlbnQ6ImNsb3NlZCJ9KX19LHN1Ym1pdDpmdW5jdGlvbih0KXt2YXIgZT10LnJlc3BvbnNlLG49dC5yZXNwb25zZUdyb3VwVWlkLHI9dC5jb21wbGV0ZWRBdDtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgdD1OKCkoUigpLm1hcmsoKGZ1bmN0aW9uIHQobyl7dmFyIGksYTtyZXR1cm4gUigpLndyYXAoKGZ1bmN0aW9uKHQpe2Zvcig7Oylzd2l0Y2godC5wcmV2PXQubmV4dCl7Y2FzZSAwOmlmKG4mJiFHZShvKSl7dC5uZXh0PTI7YnJlYWt9cmV0dXJuIHQuYWJydXB0KCJyZXR1cm4iKTtjYXNlIDI6cmV0dXJuIGk9e3Jlc3BvbnNlR3JvdXBVaWQ6bixtZXRhOm8ubWV0YSxjdXN0b21NZXRhZGF0YTpvLmN1c3RvbU1ldGFkYXRhLHJlc3BvbnNlczpbZV0sY29tcGxldGVkQXQ6cn0sdC5uZXh0PTUsQmUoIiIuY29uY2F0KG8uYXBpVVJMLCIvc2RrLzEvZW52aXJvbm1lbnRzLyIpLmNvbmNhdChvLmVudklkLCIvdmlzaXRvcnMvIikuY29uY2F0KG8udXNlcklkLCIvcmVzcG9uc2VzL3N1Ym1pdCIpLHtib2R5OkpTT04uc3RyaW5naWZ5KGkpLGhlYWRlcnM6by5oZWFkZXJzLG1ldGhvZDoiUE9TVCJ9KTtjYXNlIDU6aWYoYT10LnNlbnQsZG9jdW1lbnQuYWN0aXZlRWxlbWVudC5ibHVyKCksYS5vayl7dC5uZXh0PTEzO2JyZWFrfWlmKCFhLnJlcG9ydEVycm9yKXt0Lm5leHQ9MTI7YnJlYWt9cmV0dXJuIGNvbnNvbGUud2FybigiW1VzZXJMZWFwXSAoRVJSLTQyNykgRmFpbGVkIHRvIHN1Ym1pdCByZXNwb25zZSIsYS5lcnJvciksdC5uZXh0PTEyLHFlKG8sInN1Ym1pdFJlc3BvbnNlIixhLmVycm9yKTtjYXNlIDEyOnJldHVybiB0LmFicnVwdCgicmV0dXJuIik7Y2FzZSAxMzpjYXNlImVuZCI6cmV0dXJuIHQuc3RvcCgpfX0pLHQpfSkpKTtyZXR1cm4gZnVuY3Rpb24oZSl7cmV0dXJuIHQuYXBwbHkodGhpcyxhcmd1bWVudHMpfX0oKX0sZGVkdWN0OmZ1bmN0aW9uKCl7cmV0dXJuIGZ1bmN0aW9uKHQpe3ZhciBlPXQudGltZW91dC0xO3JldHVybiBlPD0wPyhjbGVhckludGVydmFsKHQuaW50ZXJ2YWwpLFN0LmVuYWJsZSgpLHtydW5uaW5nOiExLGludGVydmFsOm51bGwsdGltZW91dDplfSk6e3RpbWVvdXQ6ZX19fSxuZXh0OmZ1bmN0aW9uKHQpe3JldHVybiBmdW5jdGlvbihlLG4pe3ZhciByPURhdGUubm93KCksbz1lLmRlY2ssaT1vLmNhcmRzLGE9by5pbmRleCxjPWlbYV0scz1jLm5hbWUsdT1jLnR5cGUsbD1lLnJlc3BvbnNlR3JvdXBVaWQsZj0ib2JqZWN0Ij09PUF0KCkodC5kYXRhKT90LmRhdGE6e3ZhbHVlOnQuZGF0YX0sZD1mLnZhbHVlO2lbYV0udmFsdWU9ZCxmLnF1ZXN0aW9uSWQ9cyxmLmFuc3dlcmVkQXQ9cjt2YXIgcD17cmVzcG9uc2U6ZixyZXNwb25zZUdyb3VwVWlkOmwsdHlwZTp1fSxoPSJtdWx0aXBsZWNob2ljZSI9PT11P09iamVjdC52YWx1ZXMoZCkuZmluZCgoZnVuY3Rpb24odCl7cmV0dXJuITEhPT10fSkpOmQsdj0idmlkZW92b2ljZSIhPT11fHwhZi5kZWxldGVkQXQ7Im11bHRpcGxlc2VsZWN0Ij09PXUmJihoPWlbYV0ucHJvcHMub3B0aW9ucy5yZWR1Y2UoKGZ1bmN0aW9uKHQsZSl7cmV0dXJuIGRbZS5pZF0mJnQucHVzaChlLnZhbHVlKSx0fSksW10pKTt2YXIgZz1mdW5jdGlvbih0LGUsbixyKXt2YXIgbz0hKGFyZ3VtZW50cy5sZW5ndGg+NCYmdm9pZCAwIT09YXJndW1lbnRzWzRdKXx8YXJndW1lbnRzWzRdO2lmKGU+PXQubGVuZ3RofHxlPDApcmV0dXJuIG51bGw7Zm9yKHZhciBpPXRbZV0mJnRbZV0ucHJvcHMmJnRbZV0ucHJvcHMucm91dGluZ09wdGlvbnN8fFtdLGE9TWF0aC5taW4oZSsxLHQubGVuZ3RoLTEpLGM9bnVsbCxzPTA7czxpLmxlbmd0aDtzKyspe3ZhciB1PWlbc10sbD11LmNvbXBhcmF0b3IsZj11LnRhcmdldCxkPXUudmFsdWU7aWYoImFuc3dlcmVkIj09PWwmJm8pe2M9cGFyc2VJbnQoZiwxMCk7YnJlYWt9aWYoT2VbbF0mJk9lW2xdKG4sZCkpe2M9cGFyc2VJbnQoZiwxMCk7YnJlYWt9fXJldHVybiBudWxsPT09YyYmZT09PXQubGVuZ3RoLTE/bnVsbDotMT09PWM/cj90Lmxlbmd0aC0xOm51bGw6bnVsbD09PWM/YTpjfShpLGEsaCwhIXQuZW5kQ2FyZCx2KTtpZihudWxsPT09ZylyZXR1cm4gcC5jb21wbGV0ZWRBdD1yLG4uc3VibWl0KHApLHZvaWQgdC5jb21wbGV0ZVN1cnZleSgpO2lbZ10uQ2FyZD09PWUuY2FyZHMudGhhbmtzJiYocC5jb21wbGV0ZWRBdD1yKTt2YXIgeT1uLnN1Ym1pdChwKTtyZXR1cm4gaVtnXS5DYXJkIT1lLmNhcmRzLnRoYW5rcyYmeS5maW5hbGx5KChmdW5jdGlvbigpe24udHJhY2tIaXN0b3J5KHtldmVudDoic2VlbiIsaW5kZXg6Z30pfSkpLHtkZWNrOntjYXJkczppLGluZGV4Omd9fX19LHRyYWNrSGlzdG9yeTpmdW5jdGlvbih0KXt2YXIgZT10LmV2ZW50LG49dC5pbmRleCxyPXQuaXNOZXcsbz12b2lkIDAhPT1yJiZyO3JldHVybiBmdW5jdGlvbigpe3ZhciB0PU4oKShSKCkubWFyaygoZnVuY3Rpb24gdChyKXt2YXIgaSxhLGMscyx1LGw7cmV0dXJuIFIoKS53cmFwKChmdW5jdGlvbih0KXtmb3IoOzspc3dpdGNoKHQucHJldj10Lm5leHQpe2Nhc2UgMDppZighR2Uocikpe3QubmV4dD0yO2JyZWFrfXJldHVybiB0LmFicnVwdCgicmV0dXJuIik7Y2FzZSAyOnJldHVybiBpPXIuZGVjayxhPWkuY2FyZHMsYz1pLmluZGV4LHM9dm9pZCAwIT09bj9hW25dOmFbY10sdT17c2lkOnIuc3VydmV5SWQscWlkOnMubmFtZSxhY3Rpb246ZSx2aWQ6ci51c2VySWQsZWlkOnIuZW52SWQsaXNOZXc6byxyZXNwb25zZUdyb3VwVWlkOnIucmVzcG9uc2VHcm91cFVpZH0sdC5uZXh0PTcsQmUoIiIuY29uY2F0KHIuYXBpVVJMLCIvc2RrLzEvdmlzaXRvcnMvIikuY29uY2F0KHIudXNlcklkLCIvc3VydmV5cy8iKS5jb25jYXQoci5zdXJ2ZXlJZCwiL2hpc3RvcnkiKSx7Ym9keTpKU09OLnN0cmluZ2lmeSh1KSxoZWFkZXJzOnIuaGVhZGVycyxtZXRob2Q6IlBPU1QifSk7Y2FzZSA3OmlmKChsPXQuc2VudCkub2spe3QubmV4dD0xMzticmVha31pZighbC5yZXBvcnRFcnJvcil7dC5uZXh0PTEzO2JyZWFrfXJldHVybiBjb25zb2xlLndhcm4oIltVc2VyTGVhcF0gKEVSUi00MjgpIEZhaWxlZCB0byB0cmFjayBzdXJ2ZXkgZXZlbnQiLGwuZXJyb3IpLHQubmV4dD0xMyxxZShyLCJ0cmFja0hpc3RvcnkiLGwuZXJyb3IpO2Nhc2UgMTM6Y2FzZSJlbmQiOnJldHVybiB0LnN0b3AoKX19KSx0KX0pKSk7cmV0dXJuIGZ1bmN0aW9uKGUpe3JldHVybiB0LmFwcGx5KHRoaXMsYXJndW1lbnRzKX19KCl9fTtmdW5jdGlvbiBZZSh0LGUpe3ZhciBuPU9iamVjdC5rZXlzKHQpO2lmKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpe3ZhciByPU9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHModCk7ZSYmKHI9ci5maWx0ZXIoKGZ1bmN0aW9uKGUpe3JldHVybiBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHQsZSkuZW51bWVyYWJsZX0pKSksbi5wdXNoLmFwcGx5KG4scil9cmV0dXJuIG59ZnVuY3Rpb24gSmUodCl7Zm9yKHZhciBlPTE7ZTxhcmd1bWVudHMubGVuZ3RoO2UrKyl7dmFyIG49bnVsbCE9YXJndW1lbnRzW2VdP2FyZ3VtZW50c1tlXTp7fTtlJTI/WWUoT2JqZWN0KG4pLCEwKS5mb3JFYWNoKChmdW5jdGlvbihlKXtyKCkodCxlLG5bZV0pfSkpOk9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzP09iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKHQsT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcnMobikpOlllKE9iamVjdChuKSkuZm9yRWFjaCgoZnVuY3Rpb24oZSl7T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsZSxPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKG4sZSkpfSkpfXJldHVybiB0fXZhciBLZT17aW5pdDpmdW5jdGlvbih0KXtyZXR1cm4gZnVuY3Rpb24oZSl7cmV0dXJuIEplKHt9LGUse3NlbGVjdGVkT3B0aW9uczp0fSl9fSxyZXNldDpmdW5jdGlvbigpe3JldHVybiBmdW5jdGlvbih0KXtyZXR1cm4gSmUoe30sdCx7c2VsZWN0ZWRPcHRpb25zOnt9fSl9fSx1cGRhdGVTZWxlY3RlZDpmdW5jdGlvbih0KXtyZXR1cm4gZnVuY3Rpb24oZSl7aWYobnVsbCE9dCl7dmFyIG49T2JqZWN0LmFzc2lnbihlLnNlbGVjdGVkT3B0aW9ucyk7cmV0dXJuIG5bdF09IW5bdF0sSmUoe30sZSx7c2VsZWN0ZWRPcHRpb25zOm59KX19fX07ZnVuY3Rpb24gWGUodCxlKXt2YXIgbj1PYmplY3Qua2V5cyh0KTtpZihPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKXt2YXIgcj1PYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHQpO2UmJihyPXIuZmlsdGVyKChmdW5jdGlvbihlKXtyZXR1cm4gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcih0LGUpLmVudW1lcmFibGV9KSkpLG4ucHVzaC5hcHBseShuLHIpfXJldHVybiBufXZhciBRZT17b25UZXh0Q2hhbmdlOmZ1bmN0aW9uKHQpe3JldHVybiBmdW5jdGlvbihlKXtyZXR1cm4gZnVuY3Rpb24odCl7Zm9yKHZhciBlPTE7ZTxhcmd1bWVudHMubGVuZ3RoO2UrKyl7dmFyIG49bnVsbCE9YXJndW1lbnRzW2VdP2FyZ3VtZW50c1tlXTp7fTtlJTI/WGUoT2JqZWN0KG4pLCEwKS5mb3JFYWNoKChmdW5jdGlvbihlKXtyKCkodCxlLG5bZV0pfSkpOk9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzP09iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKHQsT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcnMobikpOlhlKE9iamVjdChuKSkuZm9yRWFjaCgoZnVuY3Rpb24oZSl7T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsZSxPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKG4sZSkpfSkpfXJldHVybiB0fSh7fSxlLHt2YWx1ZTp0fSl9fX0sdG49InN1cnZleS5hcHBlYXJlZCIsZW49InN1cnZleS5mYWRpbmdPdXQiLG5uPSJzdXJ2ZXkud2lsbENsb3NlIixybj17VkVSSUZZX1ZJRVdfVkVSU0lPTjoidmVyaWZ5LnZpZXcudmVyc2lvbiJ9LG9uPXtWSUVXX1ZFUlNJT046InZpZXcudmVyc2lvbiJ9LGFuPSJjbG9zZS5jbGljayIsY249InN1cnZleS5jb21wbGV0ZWQiO2Z1bmN0aW9uIHNuKHQpe3JldHVybiJ3ZWIiIT09dFsidXNlcmxlYXAtcGxhdGZvcm0iXX1mdW5jdGlvbiB1bih0LGUpe3ZhciBuPU9iamVjdC5rZXlzKHQpO2lmKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpe3ZhciByPU9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHModCk7ZSYmKHI9ci5maWx0ZXIoKGZ1bmN0aW9uKGUpe3JldHVybiBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHQsZSkuZW51bWVyYWJsZX0pKSksbi5wdXNoLmFwcGx5KG4scil9cmV0dXJuIG59dmFyIGxuPXtpbml0OmZ1bmN0aW9uKHQpe3ZhciBlPXQuZnJhbWUsbj10LmNhcmRzLHI9dC5zdXJ2ZXlJZCxvPXQuZW52SWQsaT10LnVzZXJJZCxhPXQubWV0YSxjPXQuYm9yZGVyLHM9dC5mb250RmFtaWx5LHU9dC5mb250RmFtaWx5VVJMLGw9dC5jb250ZXh0LGY9dC5sb2NhbGUsZD10LmFwaVVSTCxwPXQuc2hvd1N1cnZleUJyYW5kLGg9dC5tYXJrZXRpbmdVcmwsdj10LnNsdWdOYW1lLGc9dC5yZXNwb25zZUdyb3VwVWlkLHk9dC5oZWFkZXJzLG09dC5lbmRDYXJkLGI9dC5jb25maWd1cmVFeGl0T25PdmVybGF5Q2xpY2sseD10LmlzUHJldmlldyx3PXQuYW5zd2VycyxFPXQuY3VzdG9tTWV0YWRhdGEsaj10LmV4cGVyaW1lbnRGbGFncyxDPXQudXNlTW9iaWxlU3R5bGluZyxrPXQubW9iaWxlUGxhdGZvcm0sUz10LmV2ZW50RW1pdHRlcjtyZXR1cm4gZnVuY3Rpb24odCxPKXt2YXIgQT1zbih5KT93aW5kb3cuZG9jdW1lbnQ6d2luZG93LnBhcmVudC5kb2N1bWVudDtPLmFwcC5pbml0KHtmcmFtZTpBLmdldEVsZW1lbnRCeUlkKGUpLHN1cnZleUlkOnIsY2FyZHM6bixlbnZJZDpvLHVzZXJJZDppLG1ldGE6YSxib3JkZXI6Yyxmb250RmFtaWx5OnMsZm9udEZhbWlseVVSTDp1LGNvbnRleHQ6bCxsb2NhbGU6ZixhcGlVUkw6ZCxzaG93U3VydmV5QnJhbmQ6cCxtYXJrZXRpbmdVcmw6aCxzbHVnTmFtZTp2LHJlc3BvbnNlR3JvdXBVaWQ6ZyxoZWFkZXJzOnksZW5kQ2FyZDptLGNvbmZpZ3VyZUV4aXRPbk92ZXJsYXlDbGljazpiLGlzUHJldmlldzp4LGFuc3dlcnM6dyxjdXN0b21NZXRhZGF0YTpFLGV4cGVyaW1lbnRGbGFnczpqLHVzZU1vYmlsZVN0eWxpbmc6Qyxtb2JpbGVQbGF0Zm9ybTprLGV2ZW50RW1pdHRlcjpTfSksTy5hcHAuc2VlbigpfX0sdXBkYXRlOmZ1bmN0aW9uKHQpe3JldHVybiBmdW5jdGlvbihlKXt2YXIgbj1lLmFwcCxyPWRvY3VtZW50LmdldEVsZW1lbnRCeUlkKHQpLmNsYXNzTGlzdDtuLnJ1bm5pbmcmJiFyLmNvbnRhaW5zKCJ1bC1hcHAtLXZpc2libGUiKSYmKHNuKG4uaGVhZGVycyk/ci5hZGQoInVsLWFwcC0tdmlzaWJsZSIpOihyLmFkZCgidWwtYXBwLS1vdmVybGF5Iiksc2V0VGltZW91dCgoZnVuY3Rpb24oKXtyLmFkZCgidWwtYXBwLS12aXNpYmxlIil9KSwxMDApKSxuLmV2ZW50RW1pdHRlciYmbi5ldmVudEVtaXR0ZXIuZW1pdCh0bikpLHNuKG4uaGVhZGVycyl8fG4uZnJhbWUuc2V0SGVpZ2h0KGZ1bmN0aW9uKHQpe3ZhciBlPXQucXVlcnlTZWxlY3RvcigiLiIuY29uY2F0KCQpKTtyZXR1cm4oZT9lLnNjcm9sbEhlaWdodDo2MDApKyhlJiZlLnBhcmVudEVsZW1lbnQ/ZS5wYXJlbnRFbGVtZW50LmNsaWVudEhlaWdodC1lLmNsaWVudEhlaWdodDowKX0oZG9jdW1lbnQpKX19LGZhZGVvdXQ6ZnVuY3Rpb24odCl7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIGU9TigpKFIoKS5tYXJrKChmdW5jdGlvbiBlKG4pe3ZhciByLG87cmV0dXJuIFIoKS53cmFwKChmdW5jdGlvbihlKXtmb3IoOzspc3dpdGNoKGUucHJldj1lLm5leHQpe2Nhc2UgMDppZihyPW4uYXBwLG89ci5ldmVudEVtaXR0ZXIsIXNuKHIuaGVhZGVycykpe2UubmV4dD00O2JyZWFrfXJldHVybiBlLmFicnVwdCgicmV0dXJuIik7Y2FzZSA0OnJldHVybiBvLmVtaXQoZW4pLGUuYWJydXB0KCJyZXR1cm4iLG5ldyBQcm9taXNlKChmdW5jdGlvbihlKXt2YXIgbj1kb2N1bWVudC5nZXRFbGVtZW50QnlJZCh0KTtuLmFkZEV2ZW50TGlzdGVuZXIoInRyYW5zaXRpb25lbmQiLChmdW5jdGlvbih0KXsib3BhY2l0eSI9PT10LnByb3BlcnR5TmFtZSYmZSgpfSkpLG4uY2xhc3NMaXN0LnJlbW92ZSgidWwtYXBwLS12aXNpYmxlIil9KSkpO2Nhc2UgNjpjYXNlImVuZCI6cmV0dXJuIGUuc3RvcCgpfX0pLGUpfSkpKTtyZXR1cm4gZnVuY3Rpb24odCl7cmV0dXJuIGUuYXBwbHkodGhpcyxhcmd1bWVudHMpfX0oKX0scmVtb3ZlOmZ1bmN0aW9uKHQpe3ZhciBlPXQuaW5pdGlhdG9yO3JldHVybiBmdW5jdGlvbih0KXt2YXIgbj10LmFwcCxyPW4uZnJhbWUsbz1uLmV2ZW50RW1pdHRlcjtbImlvcyIsImFuZHJvaWQiXS5pbmNsdWRlcyhuLmhlYWRlcnNbInVzZXJsZWFwLXBsYXRmb3JtIl0pJiZvLmVtaXQobm4se2luaXRpYXRvcjplfSksc24obi5oZWFkZXJzKXx8KG8uZW1pdChubix7aW5pdGlhdG9yOmV9KSxyLnJlbW92ZSgpKX19LGNsb3NlOmZ1bmN0aW9uKHQpe3JldHVybiBmdW5jdGlvbigpe3ZhciBlPU4oKShSKCkubWFyaygoZnVuY3Rpb24gZShuLHIpe3JldHVybiBSKCkud3JhcCgoZnVuY3Rpb24oZSl7Zm9yKDs7KXN3aXRjaChlLnByZXY9ZS5uZXh0KXtjYXNlIDA6cmV0dXJuIGUubmV4dD0yLHIuZmFkZW91dCh0KTtjYXNlIDI6cmV0dXJuIGUubmV4dD00LHIuYXBwLmNsb3NlKCk7Y2FzZSA0OlN0LmVuYWJsZSgpLHIucmVtb3ZlKHtpbml0aWF0b3I6YW59KTtjYXNlIDY6Y2FzZSJlbmQiOnJldHVybiBlLnN0b3AoKX19KSxlKX0pKSk7cmV0dXJuIGZ1bmN0aW9uKHQsbil7cmV0dXJuIGUuYXBwbHkodGhpcyxhcmd1bWVudHMpfX0oKX0sZGVzdHJveTpmdW5jdGlvbih0KXtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgZT1OKCkoUigpLm1hcmsoKGZ1bmN0aW9uIGUobixyKXtyZXR1cm4gUigpLndyYXAoKGZ1bmN0aW9uKGUpe2Zvcig7Oylzd2l0Y2goZS5wcmV2PWUubmV4dCl7Y2FzZSAwOnJldHVybiBlLm5leHQ9MixyLmZhZGVvdXQodCk7Y2FzZSAyOlN0LmVuYWJsZSgpLHIucmVtb3ZlKHtpbml0aWF0b3I6Y259KTtjYXNlIDQ6Y2FzZSJlbmQiOnJldHVybiBlLnN0b3AoKX19KSxlKX0pKSk7cmV0dXJuIGZ1bmN0aW9uKHQsbil7cmV0dXJuIGUuYXBwbHkodGhpcyxhcmd1bWVudHMpfX0oKX19LGZuPWZ1bmN0aW9uKHQpe2Zvcih2YXIgZT0xO2U8YXJndW1lbnRzLmxlbmd0aDtlKyspe3ZhciBuPW51bGwhPWFyZ3VtZW50c1tlXT9hcmd1bWVudHNbZV06e307ZSUyP3VuKE9iamVjdChuKSwhMCkuZm9yRWFjaCgoZnVuY3Rpb24oZSl7cigpKHQsZSxuW2VdKX0pKTpPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycz9PYmplY3QuZGVmaW5lUHJvcGVydGllcyh0LE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzKG4pKTp1bihPYmplY3QobikpLmZvckVhY2goKGZ1bmN0aW9uKGUpe09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LGUsT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihuLGUpKX0pKX1yZXR1cm4gdH0oe2FwcDokZSxtdWx0aXBsZXNlbGVjdDpLZSxvcGVuVGV4dDpRZX0sbG4pLGRuPXthcHA6WmUsbXVsdGlwbGVzZWxlY3Q6e3NlbGVjdGVkT3B0aW9uczp7fX0sb3BlblRleHQ6e3ZhbHVlOiIifX07dmFyIHBuPXdpbmRvdy5fX2NmZyxobj1wbi5mcmFtZSx2bj1wbi5lbnZJZCxnbj1wbi5zdXJ2ZXlJZCx5bj1wbi51c2VySWQsbW49cG4uY2FyZHMsYm49cG4ubW9kZSx4bj1wbi5ib3JkZXIsd249dm9pZCAwPT09eG4/IiM2NjY0ZjciOnhuLEVuPXBuLmNvbnRleHQsam49cG4ubG9jYWxlLENuPXBuLmZvbnRGYW1pbHksa249cG4uZm9udEZhbWlseVVSTCxTbj1wbi5hcGlVUkwsT249cG4uc2hvd1N1cnZleUJyYW5kLEFuPXBuLm1hcmtldGluZ1VybCxJbj1wbi5zbHVnTmFtZSxNbj1wbi5yZXNwb25zZUdyb3VwVWlkLFRuPXBuLmhlYWRlcnMsX249cG4uZW5kQ2FyZCxMbj1wbi5jdXN0b21TdHlsZXMsUm49cG4uY29uZmlndXJlRXhpdE9uT3ZlcmxheUNsaWNrLFBuPXBuLmlzUHJldmlldyxObj1wbi5hbnN3ZXJzLERuPXBuLmN1c3RvbU1ldGFkYXRhLEZuPXBuLmV4cGVyaW1lbnRGbGFncyxVbj1wbi51c2VNb2JpbGVTdHlsaW5nLEJuPXBuLm1vYmlsZVBsYXRmb3JtLHpuPXBuLmV2ZW50RW1pdHRlcixWbj1kb2N1bWVudC5oZWFkLEhuPXpufHxobi5ldmVudEVtaXR0ZXI7SG4mJkhuLmVtaXQocm4uVkVSSUZZX1ZJRVdfVkVSU0lPTixyKCkoe30sb24uVklFV19WRVJTSU9OLCIyLjE0LjUiKSk7dmFyIHFuPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInN0eWxlIik7aWYocW4udHlwZT0idGV4dC9jc3MiLHFuLmFwcGVuZENoaWxkKGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKHl0KCkpKSxWbi5hcHBlbmRDaGlsZChxbiksTG4mJmZ1bmN0aW9uKHQsZSl7dmFyIG49dC5jcmVhdGVFbGVtZW50KCJzdHlsZSIpO24udHlwZT0idGV4dC9jc3MiLG4udGV4dENvbnRlbnQ9ZSxuLmlkPVosdC5oZWFkLmFwcGVuZENoaWxkKG4pfShkb2N1bWVudCxMbiksQ24mJmtuJiZwYXJlbnQpe3ZhciBXbj1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJsaW5rIik7V24ucmVsPSJzdHlsZXNoZWV0IixXbi5ocmVmPWtuLFZuLmFwcGVuZENoaWxkKFduKX12YXIgR249ZnVuY3Rpb24odCxlLG4scil7dmFyIG8saT1bXS5tYXAsYT1yJiZyLmNoaWxkcmVuWzBdfHxudWxsLGM9YSYmZnVuY3Rpb24gdChlKXtyZXR1cm57bm9kZU5hbWU6ZS5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpLGF0dHJpYnV0ZXM6e30sY2hpbGRyZW46aS5jYWxsKGUuY2hpbGROb2RlcywoZnVuY3Rpb24oZSl7cmV0dXJuIDM9PT1lLm5vZGVUeXBlP2Uubm9kZVZhbHVlOnQoZSl9KSl9fShhKSxzPVtdLHU9ITAsbD12KHQpLGY9ZnVuY3Rpb24gdChlLG4scil7Zm9yKHZhciBvIGluIHIpImZ1bmN0aW9uIj09dHlwZW9mIHJbb10/ZnVuY3Rpb24odCxvKXtyW3RdPWZ1bmN0aW9uKHQpe3ZhciBpPW8odCk7cmV0dXJuImZ1bmN0aW9uIj09dHlwZW9mIGkmJihpPWkoeShlLGwpLHIpKSxpJiZpIT09KG49eShlLGwpKSYmIWkudGhlbiYmaChsPWcoZSx2KG4saSksbCkpLGl9fShvLHJbb10pOnQoZS5jb25jYXQobyksbltvXT12KG5bb10pLHJbb109dihyW29dKSk7cmV0dXJuIHJ9KFtdLGwsdihlKSk7cmV0dXJuIGgoKSxmO2Z1bmN0aW9uIGQodCl7cmV0dXJuImZ1bmN0aW9uIj09dHlwZW9mIHQ/ZCh0KGwsZikpOm51bGwhPXQ/dDoiIn1mdW5jdGlvbiBwKCl7bz0hbzt2YXIgdD1kKG4pO2ZvcihyJiYhbyYmKGE9QyhyLGEsYyxjPXQpKSx1PSExO3MubGVuZ3RoOylzLnBvcCgpKCl9ZnVuY3Rpb24gaCgpe298fChvPSEwLHNldFRpbWVvdXQocCkpfWZ1bmN0aW9uIHYodCxlKXt2YXIgbj17fTtmb3IodmFyIHIgaW4gdCluW3JdPXRbcl07Zm9yKHZhciByIGluIGUpbltyXT1lW3JdO3JldHVybiBufWZ1bmN0aW9uIGcodCxlLG4pe3ZhciByPXt9O3JldHVybiB0Lmxlbmd0aD8oclt0WzBdXT10Lmxlbmd0aD4xP2codC5zbGljZSgxKSxlLG5bdFswXV0pOmUsdihuLHIpKTplfWZ1bmN0aW9uIHkodCxlKXtmb3IodmFyIG49MDtuPHQubGVuZ3RoOyllPWVbdFtuKytdXTtyZXR1cm4gZX1mdW5jdGlvbiBtKHQpe3JldHVybiB0P3Qua2V5Om51bGx9ZnVuY3Rpb24gYih0KXtyZXR1cm4gdC5jdXJyZW50VGFyZ2V0LmV2ZW50c1t0LnR5cGVdKHQpfWZ1bmN0aW9uIHgodCxlLG4scixvKXtpZigia2V5Ij09PWUpO2Vsc2UgaWYoInN0eWxlIj09PWUpaWYoInN0cmluZyI9PXR5cGVvZiBuKXQuc3R5bGUuY3NzVGV4dD1uO2Vsc2UgZm9yKHZhciBpIGluInN0cmluZyI9PXR5cGVvZiByJiYocj10LnN0eWxlLmNzc1RleHQ9IiIpLHYocixuKSl7dmFyIGE9bnVsbD09bnx8bnVsbD09bltpXT8iIjpuW2ldOyItIj09PWlbMF0/dC5zdHlsZS5zZXRQcm9wZXJ0eShpLGEpOnQuc3R5bGVbaV09YX1lbHNlIm8iPT09ZVswXSYmIm4iPT09ZVsxXT8oZT1lLnNsaWNlKDIpLHQuZXZlbnRzP3J8fChyPXQuZXZlbnRzW2VdKTp0LmV2ZW50cz17fSx0LmV2ZW50c1tlXT1uLG4/cnx8dC5hZGRFdmVudExpc3RlbmVyKGUsYik6dC5yZW1vdmVFdmVudExpc3RlbmVyKGUsYikpOmUgaW4gdCYmImxpc3QiIT09ZSYmInR5cGUiIT09ZSYmImRyYWdnYWJsZSIhPT1lJiYic3BlbGxjaGVjayIhPT1lJiYidHJhbnNsYXRlIiE9PWUmJiFvP3RbZV09bnVsbD09bj8iIjpuOm51bGwhPW4mJiExIT09biYmdC5zZXRBdHRyaWJ1dGUoZSxuKSxudWxsIT1uJiYhMSE9PW58fHQucmVtb3ZlQXR0cmlidXRlKGUpfWZ1bmN0aW9uIHcodCxlKXt2YXIgbj0ic3RyaW5nIj09dHlwZW9mIHR8fCJudW1iZXIiPT10eXBlb2YgdD9kb2N1bWVudC5jcmVhdGVUZXh0Tm9kZSh0KTooZT1lfHwic3ZnIj09PXQubm9kZU5hbWUpP2RvY3VtZW50LmNyZWF0ZUVsZW1lbnROUygiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciLHQubm9kZU5hbWUpOmRvY3VtZW50LmNyZWF0ZUVsZW1lbnQodC5ub2RlTmFtZSkscj10LmF0dHJpYnV0ZXM7aWYocil7ci5vbmNyZWF0ZSYmcy5wdXNoKChmdW5jdGlvbigpe3Iub25jcmVhdGUobil9KSk7Zm9yKHZhciBvPTA7bzx0LmNoaWxkcmVuLmxlbmd0aDtvKyspbi5hcHBlbmRDaGlsZCh3KHQuY2hpbGRyZW5bb109ZCh0LmNoaWxkcmVuW29dKSxlKSk7Zm9yKHZhciBpIGluIHIpeChuLGkscltpXSxudWxsLGUpfXJldHVybiBufWZ1bmN0aW9uIEUodCxlKXt2YXIgbj1lLmF0dHJpYnV0ZXM7aWYobil7Zm9yKHZhciByPTA7cjxlLmNoaWxkcmVuLmxlbmd0aDtyKyspRSh0LmNoaWxkTm9kZXNbcl0sZS5jaGlsZHJlbltyXSk7bi5vbmRlc3Ryb3kmJm4ub25kZXN0cm95KHQpfXJldHVybiB0fWZ1bmN0aW9uIGoodCxlLG4pe2Z1bmN0aW9uIHIoKXt0LnJlbW92ZUNoaWxkKEUoZSxuKSl9dmFyIG89bi5hdHRyaWJ1dGVzJiZuLmF0dHJpYnV0ZXMub25yZW1vdmU7bz9vKGUscik6cigpfWZ1bmN0aW9uIEModCxlLG4scixvKXtpZihyPT09bik7ZWxzZSBpZihudWxsPT1ufHxuLm5vZGVOYW1lIT09ci5ub2RlTmFtZSl7dmFyIGk9dyhyLG8pO3QuaW5zZXJ0QmVmb3JlKGksZSksbnVsbCE9biYmaih0LGUsbiksZT1pfWVsc2UgaWYobnVsbD09bi5ub2RlTmFtZSllLm5vZGVWYWx1ZT1yO2Vsc2V7IWZ1bmN0aW9uKHQsZSxuLHIpe2Zvcih2YXIgbyBpbiB2KGUsbikpbltvXSE9PSgidmFsdWUiPT09b3x8ImNoZWNrZWQiPT09bz90W29dOmVbb10pJiZ4KHQsbyxuW29dLGVbb10scik7dmFyIGk9dT9uLm9uY3JlYXRlOm4ub251cGRhdGU7aSYmcy5wdXNoKChmdW5jdGlvbigpe2kodCxlKX0pKX0oZSxuLmF0dHJpYnV0ZXMsci5hdHRyaWJ1dGVzLG89b3x8InN2ZyI9PT1yLm5vZGVOYW1lKTtmb3IodmFyIGE9e30sYz17fSxsPVtdLGY9bi5jaGlsZHJlbixwPXIuY2hpbGRyZW4saD0wO2g8Zi5sZW5ndGg7aCsrKXtsW2hdPWUuY2hpbGROb2Rlc1toXSxudWxsIT0oeT1tKGZbaF0pKSYmKGFbeV09W2xbaF0sZltoXV0pfWg9MDtmb3IodmFyIGc9MDtnPHAubGVuZ3RoOyl7dmFyIHk9bShmW2hdKSxiPW0ocFtnXT1kKHBbZ10pKTtpZihjW3ldKWgrKztlbHNlIGlmKG51bGw9PWJ8fGIhPT1tKGZbaCsxXSkpaWYobnVsbD09Ynx8dSludWxsPT15JiYoQyhlLGxbaF0sZltoXSxwW2ddLG8pLGcrKyksaCsrO2Vsc2V7dmFyIEU9YVtiXXx8W107eT09PWI/KEMoZSxFWzBdLEVbMV0scFtnXSxvKSxoKyspOkVbMF0/QyhlLGUuaW5zZXJ0QmVmb3JlKEVbMF0sbFtoXSksRVsxXSxwW2ddLG8pOkMoZSxsW2hdLG51bGwscFtnXSxvKSxjW2JdPXBbZ10sZysrfWVsc2UgbnVsbD09eSYmaihlLGxbaF0sZltoXSksaCsrfWZvcig7aDxmLmxlbmd0aDspbnVsbD09bShmW2hdKSYmaihlLGxbaF0sZltoXSksaCsrO2Zvcih2YXIgaCBpbiBhKWNbaF18fGooZSxhW2hdWzBdLGFbaF1bMV0pfXJldHVybiBlfX0oZG4sZm4sdnQsc24oVG4pP3dpbmRvdy5kb2N1bWVudC5nZXRFbGVtZW50QnlJZChobik6ZG9jdW1lbnQuYm9keSk7R24uaW5pdCh7c3VydmV5SWQ6Z24sZnJhbWU6aG4sZW52SWQ6dm4sdXNlcklkOnluLGNhcmRzOm1uLG1vZGU6Ym4sbWV0YTpmdW5jdGlvbih0KXt2YXIgZT10LmRpcmVjdEVtYmVkLG49dC5tb2RlLHI9dm9pZCAwPT09bj9udWxsOm4sbz1lP3dpbmRvdzp3aW5kb3cucGFyZW50LGk9by5kb2N1bWVudC5kb2N1bWVudEVsZW1lbnQ7cmV0dXJue21vZGU6cixzdzpvLnNjcmVlbi53aWR0aCxzaDpvLnNjcmVlbi5oZWlnaHQsY3c6aS5jbGllbnRXaWR0aCxjaDppLmNsaWVudEhlaWdodCxwOm8ubG9jYXRpb24uaHJlZixsOm8ubmF2aWdhdG9yLmxhbmd1YWdlfX0oe21vZGU6Ym4sZGlyZWN0RW1iZWQ6c24oVG4pfSksYm9yZGVyOnduLGZvbnRGYW1pbHk6Q24sY29udGV4dDpFbixsb2NhbGU6am4sYXBpVVJMOlNuLHNob3dTdXJ2ZXlCcmFuZDpPbixtYXJrZXRpbmdVcmw6QW4sc2x1Z05hbWU6SW4scmVzcG9uc2VHcm91cFVpZDpNbixoZWFkZXJzOlRuLGVuZENhcmQ6X24sY29uZmlndXJlRXhpdE9uT3ZlcmxheUNsaWNrOlJuLGlzUHJldmlldzpQbixhbnN3ZXJzOk5uLGN1c3RvbU1ldGFkYXRhOkRuLGV4cGVyaW1lbnRGbGFnczpGbix1c2VNb2JpbGVTdHlsaW5nOlVuLG1vYmlsZVBsYXRmb3JtOkJuLGV2ZW50RW1pdHRlcjp6bn0pfSgpfSgpOw==';
1
+ export const encodedViewJs = 'LyohIEZvciBsaWNlbnNlIGluZm9ybWF0aW9uIHBsZWFzZSBzZWUgdXNlcmxlYXAtd2ViLXZpZXctc2RrLXYyLjE0LjYuanMuTElDRU5TRS50eHQgKi8KIWZ1bmN0aW9uKCl7dmFyIHQ9ezc3ODg6ZnVuY3Rpb24odCxlLG4peyhlPW4oMTg5ODYpKCExKSkucHVzaChbdC5pZCwiLnVsLWNhcmQge1xuICBmbGV4OiAxIDEgYXV0bztcbiAgYm9yZGVyLXJhZGl1czogMnB4O1xuICBkaXNwbGF5OiBmbGV4O1xuICBmbGV4LWRpcmVjdGlvbjogY29sdW1uO1xuICBmb250LXNpemU6IDE3cHg7XG4gIGxpbmUtaGVpZ2h0OiAxOXB4O1xuICB0ZXh0LWFsaWduOiBsZWZ0O1xufVxuXG4udWwtY2FyZF9fY29udGFpbmVyLS1kZXNrdG9wIHtcbiAgbWFyZ2luOiAxNXB4O1xuICBib3JkZXI6IDJweCBzb2xpZCAjZmZmO1xuICBib3gtc2hhZG93OiAwcHggMHB4IDE1cHggcmdiYSgwLCAwLCAwLCAwLjE1KTtcbn1cblxuLnVsLWNhcmRfX2NvbnRhaW5lci0tbW9iaWxlIHtcbiAgYm9yZGVyLXdpZHRoOiAwO1xuICBib3gtc2hhZG93OiAwcHggMHB4IDVweCByZ2JhKDAsIDAsIDAsIDAuMjUpO1xuICBtYXJnaW4tdG9wOiA1cHg7XG59XG5cbi51bC1jYXJkX19jb250YWluZXIge1xuICBwYWRkaW5nOiAyMHB4IDIwcHggNXB4IDIwcHg7XG4gIGZsZXg6IDEgMSBhdXRvO1xuICBiYWNrZ3JvdW5kOiAjZmZmZmZmO1xuICBkaXNwbGF5OiBmbGV4O1xuICBmbGV4LWRpcmVjdGlvbjogY29sdW1uO1xuICBmb250LXNpemU6IDE3cHg7XG4gIGxpbmUtaGVpZ2h0OiAyM3B4O1xuICB0ZXh0LWFsaWduOiBjZW50ZXI7XG4gIG92ZXJmbG93OiBhdXRvO1xuICBib3JkZXItcmFkaXVzOiA2cHg7XG59XG5cbi51bC1xdWVzdGlvbiB7XG4gIGZsZXg6IDEgMCBhdXRvO1xuICBjb2xvcjogIzM0MzQ0MjtcbiAgZGlzcGxheTogYmxvY2s7XG4gIGZvbnQtc2l6ZTogMjBweDtcbiAgbGluZS1oZWlnaHQ6IDEyNSU7XG4gIGZvbnQtd2VpZ2h0OiA1MDA7XG4gIGN1cnNvcjogZGVmYXVsdDtcbiAgdGV4dC1hbGlnbjogbGVmdDtcbn1cblxuLnVsLWNhcHRpb24ge1xuICBmbGV4OiAxIDAgYXV0bztcbiAgbWFyZ2luLXRvcDogOHB4O1xuICBtYXJnaW4tYm90dG9tOiAxNXB4O1xuICBmb250LXNpemU6IDE1cHg7XG4gIGxpbmUtaGVpZ2h0OiAxMzAuMzUlO1xuICBsZXR0ZXItc3BhY2luZzogMC4wMmVtO1xuICBjb2xvcjogIzZjNmM2ZTtcbiAgdGV4dC1hbGlnbjogbGVmdDtcbn1cblxuLnVsLWNhcmQtLW11bHRpcGxlIHtcbiAgbWFyZ2luLXRvcDogMTVweDtcbn1cblxuLnVsLWNhcmRfX2Nob2ljZXMge1xuICBtYXJnaW46IDVweCAwIDAgMDtcbiAgZmxleDogMSAwO1xuICBoZWlnaHQ6IDEwMCU7XG59XG5cbi5jaG9pY2UtLW1vYmlsZSB7XG4gIGJvcmRlcjogMnB4IHNvbGlkICNlNmU2ZTY7XG59XG5cbi5jaG9pY2UtLWRlc2t0b3Age1xuICBib3JkZXI6IDFweCBzb2xpZCAjZTZlNmU2O1xufVxuXG4uY2hvaWNlIHtcbiAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAgY29sb3I6ICMyNjIxMzY7XG4gIGN1cnNvcjogcG9pbnRlcjtcbiAgZGlzcGxheTogZmxleDtcbiAganVzdGlmeS1jb250ZW50OiBmbGV4LXN0YXJ0O1xuXG4gIGJveC1zaXppbmc6IGJvcmRlci1ib3g7XG4gIGJvcmRlci1yYWRpdXM6IDNweDtcblxuICBtYXJnaW4tYm90dG9tOiA3cHg7XG4gIGZvbnQtc2l6ZTogMTVweDtcbiAgbGluZS1oZWlnaHQ6IDIwcHg7XG4gIHBhZGRpbmc6IDEwcHggMjBweCAxMHB4IDE1cHg7XG4gIGJhY2tncm91bmQtY29sb3I6IHJnYmEoMCwgMCwgMCwgMC4wMSk7XG59XG5cbi5jaG9pY2UtLWRlc2t0b3A6aG92ZXIge1xuICBiYWNrZ3JvdW5kLWNvbG9yOiByZ2JhKDAsIDAsIDAsIDAuMDUpO1xufVxuXG4uY2hvaWNlLS1kZXNrdG9wOmFjdGl2ZSxcbi5jaG9pY2UtLW1vYmlsZTphY3RpdmUge1xuICBiYWNrZ3JvdW5kLWNvbG9yOiByZ2JhKDAsIDAsIDAsIDAuMDUpO1xufVxuXG4udWwtY2FyZC0tdGhhbmtzIHtcbiAgbWFyZ2luLXRvcDogMTVweDtcbn1cblxuLnVsLXRoYW5rcy1jaGVjayB7XG4gIHRleHQtYWxpZ246IGNlbnRlcjtcbiAgbWFyZ2luLWJvdHRvbTogMjBweDtcbn1cblxuLnVsLWNhcmQtLXRoYW5rcy1jb250ZW50IHtcbiAgcGFkZGluZzogMjBweCAwIDEwcHggMDtcbn1cblxuLnVsLWNhcmQtLXRoYW5rcyAudWwtcXVlc3Rpb24ge1xuICBwYWRkaW5nLXRvcDogMDtcbiAgdGV4dC1hbGlnbjogY2VudGVyO1xufVxuXG4udWwtY2FyZC0tdGhhbmtzIC51bC1jYXB0aW9uIHtcbiAgcGFkZGluZy10b3A6IDA7XG4gIHRleHQtYWxpZ246IGNlbnRlcjtcbiAgb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDtcbiAgaHlwaGVuczogYXV0bztcbiAgaHlwaGVuYXRlLWxpbWl0LWxpbmVzOiBuby1saW1pdDtcbn1cblxuLnNlbGVjdC1jaGVja2JveCB7XG4gIGhlaWdodDogMTZweDtcbiAgd2lkdGg6IDE2cHg7XG4gIGJvcmRlci1yYWRpdXM6IDNweDtcbiAgYm9yZGVyOiAxcHggc29saWQgIzMyMzIzMjtcbiAgZGlzcGxheTogZmxleDtcbiAgYm94LXNpemluZzogYm9yZGVyLWJveDtcbiAgYm94LXNoYWRvdzogaW5zZXQgM3B4IDNweCAwcHggcmdiYSgwLCAwLCAwLCAwLjEpO1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAndHJhbnNwYXJlbnQnO1xuICBhbGlnbi1pdGVtczogY2VudGVyO1xuICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjtcbn1cblxuLnNlbGVjdC1yYWRpbyB7XG4gIGhlaWdodDogMTZweDtcbiAgd2lkdGg6IDE2cHg7XG4gIGJvcmRlci1yYWRpdXM6IDE2cHg7XG4gIGJvcmRlcjogMXB4IHNvbGlkICMzMjMyMzI7XG4gIGRpc3BsYXk6IGZsZXg7XG4gIGJveC1zaXppbmc6IGJvcmRlci1ib3g7XG4gIGJveC1zaGFkb3c6IGluc2V0IDJweCAycHggMHB4IHJnYmEoMCwgMCwgMCwgMC4xKTtcbiAgYmFja2dyb3VuZC1jb2xvcjogJ3RyYW5zcGFyZW50JztcbiAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7XG59XG5cbi8qIExpbmsgc3R1ZGllcyB3aWRlIHNjcmVlbiB2aWV3ICovXG5AbWVkaWEgb25seSBzY3JlZW4gYW5kIChtaW4td2lkdGg6IDYwMHB4KSB7XG4gIC51bC1jYXJkX19jb250YWluZXItLWRlc2t0b3Age1xuICAgIGJveC1zaGFkb3c6IHVuc2V0O1xuICB9XG5cbiAgLnVsLWNhcmRfX2NvbnRhaW5lciB7XG4gICAgYm9yZGVyLXJhZGl1czogdW5zZXQ7XG4gICAgYm9yZGVyOiBub25lICFpbXBvcnRhbnQ7XG4gIH1cbn1cblxuLmZhZGUtaW4tdHJhbnNpdGlvbiB7XG4gIGFuaW1hdGlvbjogZmFkZUluIDQwMG1zIGVhc2UtaW47XG4gIC13ZWJraXQtYW5pbWF0aW9uOiBmYWRlSW4gNDAwbXMgZWFzZS1pbjtcbiAgLW1vei1hbmltYXRpb246IGZhZGVJbiA0MDBtcyBlYXNlLWluO1xuICAtby1hbmltYXRpb246IGZhZGVJbiA0MDBtcyBlYXNlLWluO1xuICAtbXMtYW5pbWF0aW9uOiBmYWRlSW4gNDAwbXMgZWFzZS1pbjtcbn1cblxuQGtleWZyYW1lcyBmYWRlSW4ge1xuICAwJSB7XG4gICAgb3BhY2l0eTogMDtcbiAgfVxuICAxMDAlIHtcbiAgICBvcGFjaXR5OiAxO1xuICB9XG59XG5cbkAtbW96LWtleWZyYW1lcyBmYWRlSW4ge1xuICAwJSB7XG4gICAgb3BhY2l0eTogMDtcbiAgfVxuICAxMDAlIHtcbiAgICBvcGFjaXR5OiAxO1xuICB9XG59XG5cbkAtd2Via2l0LWtleWZyYW1lcyBmYWRlSW4ge1xuICAwJSB7XG4gICAgb3BhY2l0eTogMDtcbiAgfVxuICAxMDAlIHtcbiAgICBvcGFjaXR5OiAxO1xuICB9XG59XG5cbkAtby1rZXlmcmFtZXMgZmFkZUluIHtcbiAgMCUge1xuICAgIG9wYWNpdHk6IDA7XG4gIH1cbiAgMTAwJSB7XG4gICAgb3BhY2l0eTogMTtcbiAgfVxufVxuXG5ALW1zLWtleWZyYW1lcyBmYWRlSW4ge1xuICAwJSB7XG4gICAgb3BhY2l0eTogMDtcbiAgfVxuICAxMDAlIHtcbiAgICBvcGFjaXR5OiAxO1xuICB9XG59XG4iLCIiXSksdC5leHBvcnRzPWV9LDQ3MDY2OmZ1bmN0aW9uKHQsZSxuKXt2YXIgcj1uKDE4OTg2KSxvPW4oMTA2NjkpLGk9big3Nzg4KSxhPW4oODY1NTgpLGM9big2MDYzMikscz1uKDQyMDA1KSx1PW4oNzY0MjgpLGw9big3MzUyMyksZj1uKDYzNTUzKTsoZT1yKCExKSkuaShvKSxlLmkoaSksZS5pKGEpLGUuaShjKSxlLmkocyksZS5pKHUpLGUuaShsKSxlLmkoZiksZS5wdXNoKFt0LmlkLCJodG1sLFxuYm9keSB7XG4gIGN1cnNvcjogZGVmYXVsdDtcbiAgZm9udC1mYW1pbHk6IC1hcHBsZS1zeXN0ZW0sIEJsaW5rTWFjU3lzdGVtRm9udCwgJ1NlZ29lIFVJJywgUm9ib3RvLCBIZWx2ZXRpY2EsIEFyaWFsLCBzYW5zLXNlcmlmLCAnQXBwbGUgQ29sb3IgRW1vamknLFxuICAgICdTZWdvZSBVSSBFbW9qaScsICdTZWdvZSBVSSBTeW1ib2wnO1xuICBoZWlnaHQ6IDEwMCU7XG4gIG92ZXJmbG93OiBoaWRkZW47XG4gIC13ZWJraXQtdGFwLWhpZ2hsaWdodC1jb2xvcjogdHJhbnNwYXJlbnQ7XG4gIC13ZWJraXQtdXNlci1zZWxlY3Q6IG5vbmU7XG4gIC13ZWJraXQtdG91Y2gtY2FsbG91dDogbm9uZTtcbn1cblxuYiB7XG4gIGZvbnQtd2VpZ2h0OiA1MDA7XG59XG5cbiN1bC1hcHAge1xuICBvcGFjaXR5OiAwO1xuICB3aWR0aDogMTAwJTtcbn1cblxuI3VsLWFwcC51bC1hcHAtLW92ZXJsYXkge1xuICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gIGJvdHRvbTogMDtcbiAgdHJhbnNpdGlvbjogb3BhY2l0eSAwLjFzIGVhc2Utb3V0O1xufVxuXG4jdWwtYXBwLnVsLWFwcC0tdmlzaWJsZSB7XG4gIG9wYWNpdHk6IDE7XG4gIGJvdHRvbTogMDtcbn1cblxuLnVsLWFwcF9fY29udGFpbmVyIHtcbiAgd2lkdGg6IDEwMCU7XG4gIGRpc3BsYXk6IGZsZXg7XG4gIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgbWF4LWhlaWdodDogMTAwdmg7XG59XG5cbi51bC1mb290ZXIge1xuICBkaXNwbGF5OiBmbGV4O1xuICBmbGV4LWRpcmVjdGlvbjogY29sdW1uO1xuICBmbGV4LXNocmluazogMDtcbiAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7XG4gIG1hcmdpbi10b3A6IDEwcHg7XG59XG5cbi51bC1mb290ZXItYnViYmxlIHtcbiAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xuICBtYXJnaW46IDAgM3B4O1xuICB3aWR0aDogN3B4O1xuICBoZWlnaHQ6IDdweDtcbiAgYm9yZGVyLXJhZGl1czogM3B4O1xuICBib3JkZXI6IDFweCBzb2xpZCB0cmFuc3BhcmVudDtcbn1cblxuLmNsb3NlLWNvbnRhaW5lci0tZGVza3RvcCxcbi5jbG9zZS1jb250YWluZXItLW1vYmlsZSB7XG4gIGhlaWdodDogMjJweDtcbiAgd2lkdGg6IDIycHg7XG4gIGJvcmRlci1yYWRpdXM6IDIycHg7XG4gIGJhY2tncm91bmQtY29sb3I6ICNmZmZmZmY7XG4gIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gIGp1c3RpZnktY29udGVudDogY2VudGVyO1xufVxuXG4uY2xvc2UtY29udGFpbmVyLS1kZXNrdG9wIHtcbiAgdG9wOiAyNXB4O1xuICByaWdodDogMjVweDtcbn1cblxuLmNsb3NlLWNvbnRhaW5lci0tbW9iaWxlIHtcbiAgdG9wOiAxNXB4O1xuICByaWdodDogMTBweDtcbn1cblxuLmNsb3NlLWNvbnRhaW5lciB7XG4gIGJveC1zaXppbmc6IGJvcmRlci1ib3g7XG4gIGRpc3BsYXk6IGZsZXg7XG4gIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbn1cblxuLmNsb3NlLWJ0biB7XG4gIGhlaWdodDogMThweDtcbiAgd2lkdGg6IDE4cHg7XG4gIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gIGp1c3RpZnktY29udGVudDogY2VudGVyO1xuICBkaXNwbGF5OiBmbGV4O1xuICBjdXJzb3I6IHBvaW50ZXI7XG59XG5cbi51bC1hcHBfX2NvbnRhaW5lciB7XG4gIHRyYW5zaXRpb246IG9wYWNpdHkgMC4zcyBlYXNlLW91dDtcbn1cbiIsIiJdKSx0LmV4cG9ydHM9ZX0sODY1NTg6ZnVuY3Rpb24odCxlLG4peyhlPW4oMTg5ODYpKCExKSkucHVzaChbdC5pZCwiLyogaWRlbnRpY2FsIHRvIG5wcy5jc3MsIG90aGVyIHRoYW4gY2xhc3MgbmFtZXMuICovXG4udWwtY2FyZC0tbGlrZXJ0IHtcbiAgbWFyZ2luLXRvcDogMTVweDtcbn1cblxuLnVsLWNhcmQtLWxpa2VydF9fbnVtYmVycyB7XG4gIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gIGJvcmRlci1yYWRpdXM6IDVweDtcbiAgZGlzcGxheTogZmxleDtcbiAgZmxleC1kaXJlY3Rpb246IHJvdztcbiAgZmxleDogMSAwO1xuICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjtcbiAgbWFyZ2luOiA1cHggMCAwIDA7XG59XG5cbi5saWtlcnQtbnVtYmVyLS1tb2JpbGUge1xuICBib3JkZXI6IDJweCBzb2xpZCAjZTZlNmU2O1xuICBtYXJnaW4tbGVmdDogLTJweDtcbn1cblxuLmxpa2VydC1udW1iZXItLWRlc2t0b3Age1xuICBib3JkZXI6IDFweCBzb2xpZCAjZTZlNmU2O1xuICBtYXJnaW4tbGVmdDogLTFweDtcbn1cblxuLmxpa2VydC1udW1iZXIge1xuICBhbGlnbi1pdGVtczogY2VudGVyO1xuICBjdXJzb3I6IHBvaW50ZXI7XG4gIGRpc3BsYXk6IGZsZXg7XG4gIGp1c3RpZnktY29udGVudDogY2VudGVyO1xuICBmbGV4OiAxIDA7XG5cbiAgYmFja2dyb3VuZC1jb2xvcjogcmdiYSgwLCAwLCAwLCAwLjAxKTtcbiAgZm9udC1zaXplOiAxOHB4O1xuICBsaW5lLWhlaWdodDogMjRweDtcbiAgaGVpZ2h0OiA2N3B4O1xufVxuXG4ubGlrZXJ0LW51bWJlcjphY3RpdmUge1xuICBiYWNrZ3JvdW5kLWNvbG9yOiByZ2JhKDAsIDAsIDAsIDAuMDUpO1xuICBmb250LXdlaWdodDogNTAwO1xufVxuXG4ubGlrZXJ0LW51bWJlci0tZGVza3RvcDpob3ZlciB7XG4gIGJhY2tncm91bmQtY29sb3I6IHJnYmEoMCwgMCwgMCwgMC4wNSk7XG4gIGZvbnQtd2VpZ2h0OiA1MDA7XG59XG5cbi5saWtlcnQtbnVtYmVyLTEge1xuICBib3JkZXItdG9wLWxlZnQtcmFkaXVzOiA1cHg7XG4gIGJvcmRlci1ib3R0b20tbGVmdC1yYWRpdXM6IDVweDtcbn1cblxuLmxpa2VydC1udW1iZXItNSB7XG4gIGJvcmRlci10b3AtcmlnaHQtcmFkaXVzOiA1cHg7XG4gIGJvcmRlci1ib3R0b20tcmlnaHQtcmFkaXVzOiA1cHg7XG59XG5cbi51bC1jYXJkLS1saWtlcnRfX2xhYmVscyB7XG4gIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gIGNvbG9yOiAjMjYyMTM2O1xuICBkaXNwbGF5OiBmbGV4O1xuICBmbGV4LWRpcmVjdGlvbjogcm93O1xuICBmbGV4OiAxIDA7XG4gIGZvbnQtd2VpZ2h0OiA1MDA7XG4gIGZvbnQtc2l6ZTogMTNweDtcbiAgbGluZS1oZWlnaHQ6IDE1cHg7XG4gIGp1c3RpZnktY29udGVudDogc3BhY2UtYmV0d2VlbjtcbiAgbWFyZ2luOiA3cHggMCAxMHB4IDA7XG59XG5cbi51bC1jYXJkLS1saWtlcnRfX2xhYmVscyBzcGFuOmxhc3QtY2hpbGQge1xuICB0ZXh0LWFsaWduOiByaWdodDtcbn1cbiIsIiJdKSx0LmV4cG9ydHM9ZX0sNjA2MzI6ZnVuY3Rpb24odCxlLG4peyhlPW4oMTg5ODYpKCExKSkucHVzaChbdC5pZCwiLnNlbGVjdC1sYWJlbCB7XG4gIGZsZXg6IDE7XG4gIG92ZXJmbG93LXdyYXA6IGFueXdoZXJlO1xuICBjdXJzb3I6IHBvaW50ZXI7XG4gIHBhZGRpbmctbGVmdDogMTVweDtcbn1cbiIsIiJdKSx0LmV4cG9ydHM9ZX0sNDIwMDU6ZnVuY3Rpb24odCxlLG4peyhlPW4oMTg5ODYpKCExKSkucHVzaChbdC5pZCwiLyogaWRlbnRpY2FsIHRvIGxpa2VydC5jc3MsIG90aGVyIHRoYW4gY2xhc3MgbmFtZXMuICovXG4udWwtY2FyZC0tbnBzIHtcbiAgbWFyZ2luLXRvcDogMTVweDtcbn1cblxuLnVsLWNhcmQtLW5wc19fbnVtYmVycyB7XG4gIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gIGJvcmRlci1yYWRpdXM6IDVweDtcbiAgZGlzcGxheTogZmxleDtcbiAgZmxleC1kaXJlY3Rpb246IHJvdztcbiAgZmxleDogMSAwO1xuICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjtcbiAgbWFyZ2luOiA1cHggMCAwIDA7XG59XG5cbi5ucHMtbnVtYmVyLS1tb2JpbGUge1xuICBib3JkZXI6IDJweCBzb2xpZCAjZTZlNmU2O1xuICBtYXJnaW4tbGVmdDogLTJweDtcbn1cblxuLm5wcy1udW1iZXItLWRlc2t0b3Age1xuICBib3JkZXI6IDFweCBzb2xpZCAjZTZlNmU2O1xuICBtYXJnaW4tbGVmdDogLTFweDtcbn1cblxuLm5wcy1udW1iZXIge1xuICBhbGlnbi1pdGVtczogY2VudGVyO1xuICBjdXJzb3I6IHBvaW50ZXI7XG4gIGRpc3BsYXk6IGZsZXg7XG4gIGp1c3RpZnktY29udGVudDogY2VudGVyO1xuICBmbGV4OiAxIDA7XG5cbiAgYmFja2dyb3VuZC1jb2xvcjogcmdiYSgwLCAwLCAwLCAwLjAxKTtcbiAgZm9udC1zaXplOiAxOHB4O1xuICBsaW5lLWhlaWdodDogMjRweDtcbiAgaGVpZ2h0OiA2N3B4O1xufVxuXG4ubnBzLW51bWJlcjphY3RpdmUge1xuICBiYWNrZ3JvdW5kLWNvbG9yOiByZ2JhKDAsIDAsIDAsIDAuMDUpO1xuICBmb250LXdlaWdodDogNTAwO1xufVxuXG4ubnBzLW51bWJlci0tZGVza3RvcDpob3ZlciB7XG4gIGJhY2tncm91bmQtY29sb3I6IHJnYmEoMCwgMCwgMCwgMC4wNSk7XG4gIGZvbnQtd2VpZ2h0OiA1MDA7XG59XG5cbi5ucHMtbnVtYmVyLTAge1xuICBib3JkZXItdG9wLWxlZnQtcmFkaXVzOiA1cHg7XG4gIGJvcmRlci1ib3R0b20tbGVmdC1yYWRpdXM6IDVweDtcbn1cblxuLm5wcy1udW1iZXItMTAge1xuICBib3JkZXItdG9wLXJpZ2h0LXJhZGl1czogNXB4O1xuICBib3JkZXItYm90dG9tLXJpZ2h0LXJhZGl1czogNXB4O1xufVxuXG4udWwtY2FyZC0tbnBzX19sYWJlbHMge1xuICBhbGlnbi1pdGVtczogY2VudGVyO1xuICBjb2xvcjogIzI2MjEzNjtcbiAgZGlzcGxheTogZmxleDtcbiAgZmxleC1kaXJlY3Rpb246IHJvdztcbiAgZmxleDogMSAwO1xuICBmb250LXdlaWdodDogNTAwO1xuICBmb250LXNpemU6IDEzcHg7XG4gIGxpbmUtaGVpZ2h0OiAxNXB4O1xuICBqdXN0aWZ5LWNvbnRlbnQ6IHNwYWNlLWJldHdlZW47XG4gIG1hcmdpbjogN3B4IDAgMTBweCAwO1xufVxuXG4udWwtY2FyZC0tbnBzX19sYWJlbHMgc3BhbjpsYXN0LWNoaWxkIHtcbiAgdGV4dC1hbGlnbjogcmlnaHQ7XG59XG4iLCIiXSksdC5leHBvcnRzPWV9LDEwNjY5OmZ1bmN0aW9uKHQsZSxuKXsoZT1uKDE4OTg2KSghMSkpLnB1c2goW3QuaWQsIi8qKlxuICogbWluaXJlc2V0LmNzc1xuICogaHR0cHM6Ly9naXRodWIuY29tL2pndGhtcy9taW5pcmVzZXQuY3NzXG4gKi9cblxuaHRtbCxcbmJvZHksXG5wLFxub2wsXG51bCxcbmxpLFxuZGwsXG5kdCxcbmRkLFxuYmxvY2txdW90ZSxcbmZpZ3VyZSxcbmZpZWxkc2V0LFxubGVnZW5kLFxudGV4dGFyZWEsXG5wcmUsXG5pZnJhbWUsXG5ocixcbmgxLFxuaDIsXG5oMyxcbmg0LFxuaDUsXG5oNiB7XG4gIG1hcmdpbjogMDtcbiAgcGFkZGluZzogMDtcbn1cblxuaDEsXG5oMixcbmgzLFxuaDQsXG5oNSxcbmg2IHtcbiAgZm9udC1zaXplOiAxMDAlO1xuICBmb250LXdlaWdodDogbm9ybWFsO1xufVxuXG51bCB7XG4gIGxpc3Qtc3R5bGU6IG5vbmU7XG59XG5cbmJ1dHRvbixcbmlucHV0LFxuc2VsZWN0LFxudGV4dGFyZWEge1xuICBtYXJnaW46IDA7XG59XG5cbmh0bWwge1xuICBib3gtc2l6aW5nOiBib3JkZXItYm94O1xufVxuXG4qLCAqOmJlZm9yZSwgKjphZnRlciB7XG4gIGJveC1zaXppbmc6IGluaGVyaXQ7XG59XG4iLCIiXSksdC5leHBvcnRzPWV9LDc2NDI4OmZ1bmN0aW9uKHQsZSxuKXsoZT1uKDE4OTg2KSghMSkpLnB1c2goW3QuaWQsIi51bC1jYXJkLS10ZXh0IHtcbiAgbWFyZ2luLXRvcDogMTVweDtcbn1cblxuLnVsLWNhcmQtdGV4dCB7XG4gIGZsZXg6IDEgMCBhdXRvO1xuICBtYXJnaW4tdG9wOiAycHg7XG4gIG1hcmdpbi1ib3R0b206IDNweDtcbiAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAgZGlzcGxheTogZmxleDtcbiAgZmxleC13cmFwOiB3cmFwO1xuICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjtcbiAgcGFkZGluZzogMDtcbn1cblxuLnVsLWNhcmQtdGV4dF9fY29udGFpbmVyIHtcbiAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAgYm94LXNpemluZzogYm9yZGVyLWJveDtcbiAgYm9yZGVyLXJhZGl1czogM3B4O1xuICBkaXNwbGF5OiBmbGV4O1xuICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjtcbiAgbWFyZ2luLWJvdHRvbTogMTJweDtcbiAgZmxleDogMSAwIDEwMCU7XG59XG5cbi51bC1jYXJkLXRleHRfX2lucHV0LS1tb2JpbGUge1xuICBib3JkZXI6IDJweCBzb2xpZCAjZTZlNmU2O1xuICBtYXgtaGVpZ2h0OiA2M3B4O1xufVxuXG4udWwtY2FyZC10ZXh0X19pbnB1dC0tZGVza3RvcCB7XG4gIGJvcmRlcjogMXB4IHNvbGlkICNlNmU2ZTY7XG4gIG1heC1oZWlnaHQ6IDE1MHB4O1xufVxuXG4udWwtY2FyZC10ZXh0X19pbnB1dCB7XG4gIGJhY2tncm91bmQ6IHJnYmEoMCwgMCwgMCwgMC4wMSk7XG4gIGJveC1zaXppbmc6IGJvcmRlci1ib3g7XG4gIGNvbG9yOiAjMzQzNDQyO1xuICBmb250LWZhbWlseTogLWFwcGxlLXN5c3RlbSwgQmxpbmtNYWNTeXN0ZW1Gb250LCAnU2Vnb2UgVUknLCBSb2JvdG8sIEhlbHZldGljYSwgQXJpYWwsIHNhbnMtc2VyaWYsICdBcHBsZSBDb2xvciBFbW9qaScsXG4gICAgJ1NlZ29lIFVJIEVtb2ppJywgJ1NlZ29lIFVJIFN5bWJvbCc7XG4gIG1pbi1oZWlnaHQ6IDYzcHg7XG4gIG92ZXJmbG93OiBoaWRkZW47XG4gIHBhZGRpbmc6IDEycHg7XG4gIHJlc2l6ZTogbm9uZTtcbiAgd2lkdGg6IDEwMCU7XG4gIGJvcmRlci1yYWRpdXM6IDNweDtcbiAgZm9udC1zaXplOiAxNXB4O1xuICBsaW5lLWhlaWdodDogMjBweDtcbn1cblxuLnVsLWNhcmQtdGV4dF9faW5wdXQ6OnBsYWNlaG9sZGVyIHtcbiAgY29sb3I6IHJnYmEoMTA4LCAxMDgsIDExMCwgMC41KTtcbn1cblxuLnVsLWNhcmQtdGV4dF9faW5wdXQ6Zm9jdXMge1xuICBvdXRsaW5lOiBub25lO1xuICBiYWNrZ3JvdW5kOiB3aGl0ZTtcbn1cblxuLnVsLWNhcmQtdGV4dF9fYnV0dG9uIHtcbiAgYm9yZGVyLXJhZGl1czogM3B4O1xuICBjb2xvcjogd2hpdGU7XG4gIGZvbnQtc2l6ZTogMTVweDtcbiAgbGluZS1oZWlnaHQ6IDE4cHg7XG4gIHBhZGRpbmc6IDEwLjVweCAyMXB4O1xuICBmb250LXdlaWdodDogNTAwO1xuICBib3JkZXI6IG5vbmU7XG4gIGN1cnNvcjogcG9pbnRlcjtcbn1cbiIsIiJdKSx0LmV4cG9ydHM9ZX0sNzM1MjM6ZnVuY3Rpb24odCxlLG4peyhlPW4oMTg5ODYpKCExKSkucHVzaChbdC5pZCwiLnVsLWNhcmRfX3RleHQtdXJsLXByb21wdCB7XG4gIG1hcmdpbi10b3A6IDE1cHg7XG59XG5cbi51bC1jYXJkX190ZXh0LXVybC1ib2R5LWNvbnRhaW5lcixcbi51bC1jYXJkX190ZXh0LXVybC1wcm9tcHQtYm9keSB7XG4gIG1hcmdpbi10b3A6IDEwcHg7XG4gIG1hcmdpbi1ib3R0b206IDEwcHg7XG59XG5cbi51bC1jYXJkX190ZXh0LXVybC1wcm9tcHQtYm9keSB7XG4gIGZvbnQtc2l6ZTogMTVweDtcbiAgbGluZS1oZWlnaHQ6IDEzMC4zNSU7XG4gIGxldHRlci1zcGFjaW5nOiAwLjAyZW07XG4gIGNvbG9yOiAjMzQzNDQyO1xuICB0ZXh0LWFsaWduOiBsZWZ0O1xuICB3aGl0ZS1zcGFjZTogcHJlLWxpbmU7XG59XG5cbi51bC1jYXJkX190ZXh0LXVybC1wcm9tcHQtYm9keTpsYXN0LWNoaWxkIHtcbiAgbWFyZ2luLWJvdHRvbTogMTVweDtcbn1cblxuLnVsLWNhcmRfX3RleHQtdXJsLXByb21wdC1idXR0b24ge1xuICBtYXJnaW4tcmlnaHQ6IGF1dG87XG4gIHRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzO1xuICBvdmVyZmxvdzogaGlkZGVuO1xuICB3aGl0ZS1zcGFjZTogbm93cmFwO1xuICBtYXgtd2lkdGg6IDEwMCU7XG59XG5cbi51bC1jYXJkX190ZXh0LXVybC1ib2R5LWNvbnRhaW5lciB7XG4gIG1pbi1oZWlnaHQ6IDJlbTtcbn1cbiIsIiJdKSx0LmV4cG9ydHM9ZX0sNjM1NTM6ZnVuY3Rpb24odCxlLG4peyhlPW4oMTg5ODYpKCExKSkucHVzaChbdC5pZCwiLnVsLWNhcmQtLXZpZGVvIHtcbiAgbWFyZ2luLXRvcDogMTVweDtcbn1cblxuI3VsLWNhcmQtdm9pY2VfX3ZpZGVvIHtcbiAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAgZGlzcGxheTogZmxleDtcbiAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcbn1cbi51bC1jYXJkLXRleHRfX2J1dHRvbi51bC1idXR0b24taW5hY3RpdmUge1xuICBiYWNrZ3JvdW5kLWNvbG9yOiB3aGl0ZSAhaW1wb3J0YW50O1xuICBjb2xvcjogIzVkNjk2ZiAhaW1wb3J0YW50O1xufVxuXG4jdWwtY2FyZC12aWRlb19fcGxheWVyX3JlY29yZGVyIHtcbiAgd2lkdGg6IDEwMCU7XG4gIHdpZHRoOiAtbW96LWF2YWlsYWJsZTsgLyogV2ViS2l0LWJhc2VkIGJyb3dzZXJzIHdpbGwgaWdub3JlIHRoaXMuICovXG4gIHdpZHRoOiAtd2Via2l0LWZpbGwtYXZhaWxhYmxlOyAvKiBNb3ppbGxhLWJhc2VkIGJyb3dzZXJzIHdpbGwgaWdub3JlIHRoaXMuICovXG4gIHdpZHRoOiBmaWxsLWF2YWlsYWJsZTtcbn1cbiIsIiJdKSx0LmV4cG9ydHM9ZX0sNjI1ODI6ZnVuY3Rpb24odCl7dC5leHBvcnRzPWZ1bmN0aW9uKHQpe2lmKEFycmF5LmlzQXJyYXkodCkpe2Zvcih2YXIgZT0wLG49bmV3IEFycmF5KHQubGVuZ3RoKTtlPHQubGVuZ3RoO2UrKyluW2VdPXRbZV07cmV0dXJuIG59fX0sNDQ2MjE6ZnVuY3Rpb24odCl7ZnVuY3Rpb24gZSh0LGUsbixyLG8saSxhKXt0cnl7dmFyIGM9dFtpXShhKSxzPWMudmFsdWV9Y2F0Y2godCl7cmV0dXJuIHZvaWQgbih0KX1jLmRvbmU/ZShzKTpQcm9taXNlLnJlc29sdmUocykudGhlbihyLG8pfXQuZXhwb3J0cz1mdW5jdGlvbih0KXtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgbj10aGlzLHI9YXJndW1lbnRzO3JldHVybiBuZXcgUHJvbWlzZSgoZnVuY3Rpb24obyxpKXt2YXIgYT10LmFwcGx5KG4scik7ZnVuY3Rpb24gYyh0KXtlKGEsbyxpLGMscywibmV4dCIsdCl9ZnVuY3Rpb24gcyh0KXtlKGEsbyxpLGMscywidGhyb3ciLHQpfWModm9pZCAwKX0pKX19fSwzMDU5MzpmdW5jdGlvbih0KXt0LmV4cG9ydHM9ZnVuY3Rpb24odCxlKXtpZighKHQgaW5zdGFuY2VvZiBlKSl0aHJvdyBuZXcgVHlwZUVycm9yKCJDYW5ub3QgY2FsbCBhIGNsYXNzIGFzIGEgZnVuY3Rpb24iKX19LDQ0NTM6ZnVuY3Rpb24odCl7ZnVuY3Rpb24gZSh0LGUpe2Zvcih2YXIgbj0wO248ZS5sZW5ndGg7bisrKXt2YXIgcj1lW25dO3IuZW51bWVyYWJsZT1yLmVudW1lcmFibGV8fCExLHIuY29uZmlndXJhYmxlPSEwLCJ2YWx1ZSJpbiByJiYoci53cml0YWJsZT0hMCksT2JqZWN0LmRlZmluZVByb3BlcnR5KHQsci5rZXkscil9fXQuZXhwb3J0cz1mdW5jdGlvbih0LG4scil7cmV0dXJuIG4mJmUodC5wcm90b3R5cGUsbiksciYmZSh0LHIpLHR9fSw2NDE1NzpmdW5jdGlvbih0KXt0LmV4cG9ydHM9ZnVuY3Rpb24odCxlLG4pe3JldHVybiBlIGluIHQ/T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsZSx7dmFsdWU6bixlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMH0pOnRbZV09bix0fX0sNjYwODE6ZnVuY3Rpb24odCl7ZnVuY3Rpb24gZSgpe3JldHVybiB0LmV4cG9ydHM9ZT1PYmplY3QuYXNzaWdufHxmdW5jdGlvbih0KXtmb3IodmFyIGU9MTtlPGFyZ3VtZW50cy5sZW5ndGg7ZSsrKXt2YXIgbj1hcmd1bWVudHNbZV07Zm9yKHZhciByIGluIG4pT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKG4scikmJih0W3JdPW5bcl0pfXJldHVybiB0fSxlLmFwcGx5KHRoaXMsYXJndW1lbnRzKX10LmV4cG9ydHM9ZX0sOTQyNjY6ZnVuY3Rpb24odCl7dC5leHBvcnRzPWZ1bmN0aW9uKHQpe2lmKFN5bWJvbC5pdGVyYXRvciBpbiBPYmplY3QodCl8fCJbb2JqZWN0IEFyZ3VtZW50c10iPT09T2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKHQpKXJldHVybiBBcnJheS5mcm9tKHQpfX0sOTQ1NjY6ZnVuY3Rpb24odCl7dC5leHBvcnRzPWZ1bmN0aW9uKCl7dGhyb3cgbmV3IFR5cGVFcnJvcigiSW52YWxpZCBhdHRlbXB0IHRvIHNwcmVhZCBub24taXRlcmFibGUgaW5zdGFuY2UiKX19LDkyODE2OmZ1bmN0aW9uKHQsZSxuKXt2YXIgcj1uKDYyNTgyKSxvPW4oOTQyNjYpLGk9big5NDU2Nik7dC5leHBvcnRzPWZ1bmN0aW9uKHQpe3JldHVybiByKHQpfHxvKHQpfHxpKCl9fSw3NjM5MDpmdW5jdGlvbih0KXtmdW5jdGlvbiBlKG4pe3JldHVybiJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJiJzeW1ib2wiPT10eXBlb2YgU3ltYm9sLml0ZXJhdG9yP3QuZXhwb3J0cz1lPWZ1bmN0aW9uKHQpe3JldHVybiB0eXBlb2YgdH06dC5leHBvcnRzPWU9ZnVuY3Rpb24odCl7cmV0dXJuIHQmJiJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJnQuY29uc3RydWN0b3I9PT1TeW1ib2wmJnQhPT1TeW1ib2wucHJvdG90eXBlPyJzeW1ib2wiOnR5cGVvZiB0fSxlKG4pfXQuZXhwb3J0cz1lfSw0NDY3NDpmdW5jdGlvbih0LGUsbil7dC5leHBvcnRzPW4oNDY2NzkpfSw5NzM0MzpmdW5jdGlvbih0LGUpe3ZhciBuLHIsbztyPVt0LGVdLG49ZnVuY3Rpb24odCxlKXsidXNlIHN0cmljdCI7dmFyIG4scixvPSJmdW5jdGlvbiI9PXR5cGVvZiBNYXA/bmV3IE1hcDoobj1bXSxyPVtdLHtoYXM6ZnVuY3Rpb24odCl7cmV0dXJuIG4uaW5kZXhPZih0KT4tMX0sZ2V0OmZ1bmN0aW9uKHQpe3JldHVybiByW24uaW5kZXhPZih0KV19LHNldDpmdW5jdGlvbih0LGUpey0xPT09bi5pbmRleE9mKHQpJiYobi5wdXNoKHQpLHIucHVzaChlKSl9LGRlbGV0ZTpmdW5jdGlvbih0KXt2YXIgZT1uLmluZGV4T2YodCk7ZT4tMSYmKG4uc3BsaWNlKGUsMSksci5zcGxpY2UoZSwxKSl9fSksaT1mdW5jdGlvbih0KXtyZXR1cm4gbmV3IEV2ZW50KHQse2J1YmJsZXM6ITB9KX07dHJ5e25ldyBFdmVudCgidGVzdCIpfWNhdGNoKHQpe2k9ZnVuY3Rpb24odCl7dmFyIGU9ZG9jdW1lbnQuY3JlYXRlRXZlbnQoIkV2ZW50Iik7cmV0dXJuIGUuaW5pdEV2ZW50KHQsITAsITEpLGV9fWZ1bmN0aW9uIGEodCl7aWYodCYmdC5ub2RlTmFtZSYmIlRFWFRBUkVBIj09PXQubm9kZU5hbWUmJiFvLmhhcyh0KSl7dmFyIGU9bnVsbCxuPW51bGwscj1udWxsLGE9ZnVuY3Rpb24oKXt0LmNsaWVudFdpZHRoIT09biYmZCgpfSxjPWZ1bmN0aW9uKGUpe3dpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKCJyZXNpemUiLGEsITEpLHQucmVtb3ZlRXZlbnRMaXN0ZW5lcigiaW5wdXQiLGQsITEpLHQucmVtb3ZlRXZlbnRMaXN0ZW5lcigia2V5dXAiLGQsITEpLHQucmVtb3ZlRXZlbnRMaXN0ZW5lcigiYXV0b3NpemU6ZGVzdHJveSIsYywhMSksdC5yZW1vdmVFdmVudExpc3RlbmVyKCJhdXRvc2l6ZTp1cGRhdGUiLGQsITEpLE9iamVjdC5rZXlzKGUpLmZvckVhY2goKGZ1bmN0aW9uKG4pe3Quc3R5bGVbbl09ZVtuXX0pKSxvLmRlbGV0ZSh0KX0uYmluZCh0LHtoZWlnaHQ6dC5zdHlsZS5oZWlnaHQscmVzaXplOnQuc3R5bGUucmVzaXplLG92ZXJmbG93WTp0LnN0eWxlLm92ZXJmbG93WSxvdmVyZmxvd1g6dC5zdHlsZS5vdmVyZmxvd1gsd29yZFdyYXA6dC5zdHlsZS53b3JkV3JhcH0pO3QuYWRkRXZlbnRMaXN0ZW5lcigiYXV0b3NpemU6ZGVzdHJveSIsYywhMSksIm9ucHJvcGVydHljaGFuZ2UiaW4gdCYmIm9uaW5wdXQiaW4gdCYmdC5hZGRFdmVudExpc3RlbmVyKCJrZXl1cCIsZCwhMSksd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoInJlc2l6ZSIsYSwhMSksdC5hZGRFdmVudExpc3RlbmVyKCJpbnB1dCIsZCwhMSksdC5hZGRFdmVudExpc3RlbmVyKCJhdXRvc2l6ZTp1cGRhdGUiLGQsITEpLHQuc3R5bGUub3ZlcmZsb3dYPSJoaWRkZW4iLHQuc3R5bGUud29yZFdyYXA9ImJyZWFrLXdvcmQiLG8uc2V0KHQse2Rlc3Ryb3k6Yyx1cGRhdGU6ZH0pLHMoKX1mdW5jdGlvbiBzKCl7dmFyIG49d2luZG93LmdldENvbXB1dGVkU3R5bGUodCxudWxsKTsidmVydGljYWwiPT09bi5yZXNpemU/dC5zdHlsZS5yZXNpemU9Im5vbmUiOiJib3RoIj09PW4ucmVzaXplJiYodC5zdHlsZS5yZXNpemU9Imhvcml6b250YWwiKSxlPSJjb250ZW50LWJveCI9PT1uLmJveFNpemluZz8tKHBhcnNlRmxvYXQobi5wYWRkaW5nVG9wKStwYXJzZUZsb2F0KG4ucGFkZGluZ0JvdHRvbSkpOnBhcnNlRmxvYXQobi5ib3JkZXJUb3BXaWR0aCkrcGFyc2VGbG9hdChuLmJvcmRlckJvdHRvbVdpZHRoKSxpc05hTihlKSYmKGU9MCksZCgpfWZ1bmN0aW9uIHUoZSl7dmFyIG49dC5zdHlsZS53aWR0aDt0LnN0eWxlLndpZHRoPSIwcHgiLHQub2Zmc2V0V2lkdGgsdC5zdHlsZS53aWR0aD1uLHQuc3R5bGUub3ZlcmZsb3dZPWV9ZnVuY3Rpb24gbCh0KXtmb3IodmFyIGU9W107dCYmdC5wYXJlbnROb2RlJiZ0LnBhcmVudE5vZGUgaW5zdGFuY2VvZiBFbGVtZW50Oyl0LnBhcmVudE5vZGUuc2Nyb2xsVG9wJiZlLnB1c2goe25vZGU6dC5wYXJlbnROb2RlLHNjcm9sbFRvcDp0LnBhcmVudE5vZGUuc2Nyb2xsVG9wfSksdD10LnBhcmVudE5vZGU7cmV0dXJuIGV9ZnVuY3Rpb24gZigpe2lmKDAhPT10LnNjcm9sbEhlaWdodCl7dmFyIHI9bCh0KSxvPWRvY3VtZW50LmRvY3VtZW50RWxlbWVudCYmZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LnNjcm9sbFRvcDt0LnN0eWxlLmhlaWdodD0iIix0LnN0eWxlLmhlaWdodD10LnNjcm9sbEhlaWdodCtlKyJweCIsbj10LmNsaWVudFdpZHRoLHIuZm9yRWFjaCgoZnVuY3Rpb24odCl7dC5ub2RlLnNjcm9sbFRvcD10LnNjcm9sbFRvcH0pKSxvJiYoZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LnNjcm9sbFRvcD1vKX19ZnVuY3Rpb24gZCgpe2YoKTt2YXIgZT1NYXRoLnJvdW5kKHBhcnNlRmxvYXQodC5zdHlsZS5oZWlnaHQpKSxuPXdpbmRvdy5nZXRDb21wdXRlZFN0eWxlKHQsbnVsbCksbz0iY29udGVudC1ib3giPT09bi5ib3hTaXppbmc/TWF0aC5yb3VuZChwYXJzZUZsb2F0KG4uaGVpZ2h0KSk6dC5vZmZzZXRIZWlnaHQ7aWYobzxlPyJoaWRkZW4iPT09bi5vdmVyZmxvd1kmJih1KCJzY3JvbGwiKSxmKCksbz0iY29udGVudC1ib3giPT09bi5ib3hTaXppbmc/TWF0aC5yb3VuZChwYXJzZUZsb2F0KHdpbmRvdy5nZXRDb21wdXRlZFN0eWxlKHQsbnVsbCkuaGVpZ2h0KSk6dC5vZmZzZXRIZWlnaHQpOiJoaWRkZW4iIT09bi5vdmVyZmxvd1kmJih1KCJoaWRkZW4iKSxmKCksbz0iY29udGVudC1ib3giPT09bi5ib3hTaXppbmc/TWF0aC5yb3VuZChwYXJzZUZsb2F0KHdpbmRvdy5nZXRDb21wdXRlZFN0eWxlKHQsbnVsbCkuaGVpZ2h0KSk6dC5vZmZzZXRIZWlnaHQpLHIhPT1vKXtyPW87dmFyIGE9aSgiYXV0b3NpemU6cmVzaXplZCIpO3RyeXt0LmRpc3BhdGNoRXZlbnQoYSl9Y2F0Y2godCl7fX19fWZ1bmN0aW9uIGModCl7dmFyIGU9by5nZXQodCk7ZSYmZS5kZXN0cm95KCl9ZnVuY3Rpb24gcyh0KXt2YXIgZT1vLmdldCh0KTtlJiZlLnVwZGF0ZSgpfXZhciB1PW51bGw7InVuZGVmaW5lZCI9PXR5cGVvZiB3aW5kb3d8fCJmdW5jdGlvbiIhPXR5cGVvZiB3aW5kb3cuZ2V0Q29tcHV0ZWRTdHlsZT8oKHU9ZnVuY3Rpb24odCl7cmV0dXJuIHR9KS5kZXN0cm95PWZ1bmN0aW9uKHQpe3JldHVybiB0fSx1LnVwZGF0ZT1mdW5jdGlvbih0KXtyZXR1cm4gdH0pOigodT1mdW5jdGlvbih0LGUpe3JldHVybiB0JiZBcnJheS5wcm90b3R5cGUuZm9yRWFjaC5jYWxsKHQubGVuZ3RoP3Q6W3RdLChmdW5jdGlvbih0KXtyZXR1cm4gYSh0LGUpfSkpLHR9KS5kZXN0cm95PWZ1bmN0aW9uKHQpe3JldHVybiB0JiZBcnJheS5wcm90b3R5cGUuZm9yRWFjaC5jYWxsKHQubGVuZ3RoP3Q6W3RdLGMpLHR9LHUudXBkYXRlPWZ1bmN0aW9uKHQpe3JldHVybiB0JiZBcnJheS5wcm90b3R5cGUuZm9yRWFjaC5jYWxsKHQubGVuZ3RoP3Q6W3RdLHMpLHR9KSxlLmRlZmF1bHQ9dSx0LmV4cG9ydHM9ZS5kZWZhdWx0fSx2b2lkIDA9PT0obz0iZnVuY3Rpb24iPT10eXBlb2Ygbj9uLmFwcGx5KGUscik6bil8fCh0LmV4cG9ydHM9byl9LDQwMDQ2OmZ1bmN0aW9uKHQsZSxuKXtuKDY1Njc5KSxuKDUxMDkwKSxuKDI0Nzg1KSxuKDg5MTcpLG4oNTQ3ODYpLG4oMTI4MTYpLG4oNjE5MjQpLG4oOTgzMDYpLG4oMTIwMjUpLG4oMjgzMyksbig5NjQ1Myksbig3MDg2MyksbigyNDgwMiksbigxODI3Myksbig0MjQxMSksbigzNzQ4MSksbig0NTU1MCksbig1ODE2NSksbig1MTE3Myksbig4NzQzKSxuKDc1ODA0KSxuKDQ2MTQ2KSxuKDE1MDc3KSxuKDU4MzI5KSxuKDYwNTI1KSxuKDc0OTUzKSxuKDU0NzgxKSxuKDUxNjYpLG4oODk3NTgpLG4oMTgzNzgpLG4oOTI1Miksbig5MzI3Miksbig1NjE1OCksbig0MTQ1Niksbig3Mjg1MSksbigzNDUyOSksbigxOTI3OCksbig5MTIwOSksbig3MjU2MCksbigxMDYzKSxuKDk2NDk4KSxuKDIyNDQyKSxuKDc1ODk0KSxuKDcxNjIyKSxuKDc0NTM4KSxuKDIxMjcpLG4oNjk5ODgpLG4oNTczODcpLG4oMzA4MTcpLG4oNTIwNTUpLG4oNzMzNjApLG4oNDc1MDIpLG4oMzMxOTUpLG4oOTA5MTIpLG4oMjgyMDMpLG4oNzkyMjcpLG4oNDM1OTEpLG4oMjIyNzcpLG4oMjQxMjkpLG4oNzQxMjApLG4oOTQ5NjMpLG4oMjczODgpLG4oODA1MjIpLG4oNDU1MjgpLG4oODAxMTYpLG4oMjkxMTApLG4oODU1OTQpLG4oNjc4MTIpLG4oMzM3OTIpLG4oODYyMTQpLG4oNzAxNDYpLG4oNzE4NDYpLG4oNTAwNjMpLG4oMTA3NDMpLG4oODA1MTEpLG4oMTUzNzMpLG4oOTc2ODgpLG4oNzQ1NjMpLG4oNjUwMDMpLG4oODEyNzcpLG4oNDQwMTkpLG4oMzgyKSxuKDE4ODIzKSxuKDMzMzIyKSxuKDMzMDY1KSxuKDE3NDk0KSxuKDgwMzYzKSxuKDQzMzk2KSxuKDY5MTg4KSxuKDc0Nzk1KSxuKDgyMjAxKSxuKDQxNzczKSxuKDMwNDAyKSxuKDE4MTc1KSxuKDY2ODk2KSxuKDg1NzY3KSxuKDg0MzYpLG4oOTIxOTIpLG4oMTIxNTUpLG4oMjYwMTYpLG4oNzQxMTcpLG4oMjgwMDMpLG4oNjc5NDEpLG4oNDQwNTEpLG4oNDk0OTUpLG4oODcyMDkpLG4oMTgyNzYpLG4oMzc1NCksbigzMzQzNyksbigxOTQzMyksbig3MTgyNyksbigyNjA2Myksbig5NjcpLG4oMzMxMDApLG4oNDE5MjgpLG4oMTU4NjkpLG4oODg3MTUpLG4oMzY5OTUpLG4oMTEyMjQpLG4oNjM3NjUpLG4oMTMwNjQpLG4oMzIyOTMpLG4oMjEwMzIpLG4oMzc5MzYpLG4oOTM5OTUpLG4oMTMzOTMpLG4oMTEyODEpLG4oMzgwMzYpLG4oMTEzOCksbig0NjA3OCksbigzMDA4Myksbig0NzM4Myksbig3MTU1OCksbig5OTIxOCksbig5ODk3OCksbig4MDY5KSxuKDcwMjA0KSxuKDg1NzU4KSxuKDExNzczKSxuKDE1NzYzKSxuKDQxNjMyKSxuKDM2MjMzKSxuKDQwMDQ1KSxuKDIxMzc2KSxuKDg0MDcpLG4oMTY1MCksbig4MTEwNCksbigxMTY4OCksbigxNzYyOSksbig0MjQ5MCksbig5NDkwNiksbig3NDA2MSksbig1ODYwNiksbig0NTE1Nyksbig2MTI0NSksbigyOTI3Myksbig5MDU2MCksbig0NTE1NCksbig3MDM3Myksbig4MDc1Nyksbig2OTg3OSksbigyNDQ5OCksbigxNjk3OCksbigxNzE1MiksbigzNzk4NyksbigyNjgwKSxuKDM4MjgwKSxuKDE4NTU5KSxuKDUwNDgyKSxuKDc0MjMwKSxuKDE4NTA2KSxuKDIwMjQyKSxuKDI4MTU1KSxuKDMzOTAxKSxuKDc2NDQyKSxuKDg4NjM2KSxuKDgxNDYzKSxuKDk1MTYzKSxuKDgzNjczKSxuKDIzNTY4KSxuKDI3Mjk0KSxuKDI0NDU3KSxuKDM5MzIpLG4oNzU0OTkpLG4oODc1NjQpLG4oODQ1MCksbigxNzYwNSksbig3MzU2MiksbigxMTg3OCksbig2MDkyOSksbig0Mzk1MSksbig5MTM0NyksbigyOTI4NCksbig2MTk0MyksbigyNjk4NiksbigxMzY2KSxuKDgzMzEwKSxuKDQ2NTk3KSxuKDcwMTM2KSxuKDYwODY1KSxuKDY3NzA4KSxuKDk2NjM4KSxuKDM5NzMwKSxuKDc0MTE1KSxuKDg1Njg2KTt2YXIgcj1uKDU2MjM4KTt0LmV4cG9ydHM9cn0sNjA0OTE6ZnVuY3Rpb24odCxlLG4pe24oNDAwNDYpLG4oMTU2MjQpLG4oOTI0MDQpO3ZhciByPW4oNTYyMzgpO3QuZXhwb3J0cz1yfSw4NjQ3MDpmdW5jdGlvbih0KXt0LmV4cG9ydHM9ZnVuY3Rpb24odCl7aWYoImZ1bmN0aW9uIiE9dHlwZW9mIHQpdGhyb3cgVHlwZUVycm9yKFN0cmluZyh0KSsiIGlzIG5vdCBhIGZ1bmN0aW9uIik7cmV0dXJuIHR9fSw3OTg2MTpmdW5jdGlvbih0LGUsbil7dmFyIHI9bigxMDU5Mik7dC5leHBvcnRzPWZ1bmN0aW9uKHQpe2lmKCFyKHQpJiZudWxsIT09dCl0aHJvdyBUeXBlRXJyb3IoIkNhbid0IHNldCAiK1N0cmluZyh0KSsiIGFzIGEgcHJvdG90eXBlIik7cmV0dXJuIHR9fSw3NjUxMzpmdW5jdGlvbih0LGUsbil7dmFyIHI9bigyMzcyNCksbz1uKDUwODY4KSxpPW4oNjY5NzEpLGE9cigidW5zY29wYWJsZXMiKSxjPUFycmF5LnByb3RvdHlwZTtudWxsPT1jW2FdJiZpKGMsYSxvKG51bGwpKSx0LmV4cG9ydHM9ZnVuY3Rpb24odCl7Y1thXVt0XT0hMH19LDUzMTQxOmZ1bmN0aW9uKHQsZSxuKXsidXNlIHN0cmljdCI7dmFyIHI9big2MDE0MCkuY2hhckF0O3QuZXhwb3J0cz1mdW5jdGlvbih0LGUsbil7cmV0dXJuIGUrKG4/cih0LGUpLmxlbmd0aDoxKX19LDU5Mzc5OmZ1bmN0aW9uKHQpe3QuZXhwb3J0cz1mdW5jdGlvbih0LGUsbil7aWYoISh0IGluc3RhbmNlb2YgZSkpdGhyb3cgVHlwZUVycm9yKCJJbmNvcnJlY3QgIisobj9uKyIgIjoiIikrImludm9jYXRpb24iKTtyZXR1cm4gdH19LDg3NTc5OmZ1bmN0aW9uKHQsZSxuKXt2YXIgcj1uKDEwNTkyKTt0LmV4cG9ydHM9ZnVuY3Rpb24odCl7aWYoIXIodCkpdGhyb3cgVHlwZUVycm9yKFN0cmluZyh0KSsiIGlzIG5vdCBhbiBvYmplY3QiKTtyZXR1cm4gdH19LDczMDc0OmZ1bmN0aW9uKHQsZSxuKXsidXNlIHN0cmljdCI7dmFyIHIsbz1uKDYyNTU2KSxpPW4oODk1NTgpLGE9bigxMDU5MiksYz1uKDc2Mjk4KSxzPW4oNTk1OTEpLHU9big2Njk3MSksbD1uKDkyOTEzKSxmPW4oMzc2MjApLmYsZD1uKDY0OTY1KSxwPW4oNzE4NDIpLGg9bigyMzcyNCksdj1uKDY3MjkpLGc9aS5EYXRhVmlldyx5PWcmJmcucHJvdG90eXBlLG09aS5JbnQ4QXJyYXksYj1tJiZtLnByb3RvdHlwZSx4PWkuVWludDhDbGFtcGVkQXJyYXksdz14JiZ4LnByb3RvdHlwZSxFPW0mJmQobSksaj1iJiZkKGIpLEM9T2JqZWN0LnByb3RvdHlwZSxrPUMuaXNQcm90b3R5cGVPZixTPWgoInRvU3RyaW5nVGFnIiksTz12KCJUWVBFRF9BUlJBWV9UQUciKSxJPSEoIWkuQXJyYXlCdWZmZXJ8fCFnKSxBPUkmJiEhcCYmIk9wZXJhIiE9PXMoaS5vcGVyYSksTT0hMSxfPXtJbnQ4QXJyYXk6MSxVaW50OEFycmF5OjEsVWludDhDbGFtcGVkQXJyYXk6MSxJbnQxNkFycmF5OjIsVWludDE2QXJyYXk6MixJbnQzMkFycmF5OjQsVWludDMyQXJyYXk6NCxGbG9hdDMyQXJyYXk6NCxGbG9hdDY0QXJyYXk6OH0sVD1mdW5jdGlvbih0KXtyZXR1cm4gYSh0KSYmYyhfLHModCkpfTtmb3IociBpbiBfKWlbcl18fChBPSExKTtpZigoIUF8fCJmdW5jdGlvbiIhPXR5cGVvZiBFfHxFPT09RnVuY3Rpb24ucHJvdG90eXBlKSYmKEU9ZnVuY3Rpb24oKXt0aHJvdyBUeXBlRXJyb3IoIkluY29ycmVjdCBpbnZvY2F0aW9uIil9LEEpKWZvcihyIGluIF8paVtyXSYmcChpW3JdLEUpO2lmKCghQXx8IWp8fGo9PT1DKSYmKGo9RS5wcm90b3R5cGUsQSkpZm9yKHIgaW4gXylpW3JdJiZwKGlbcl0ucHJvdG90eXBlLGopO2lmKEEmJmQodykhPT1qJiZwKHcsaiksbyYmIWMoaixTKSlmb3IociBpbiBNPSEwLGYoaixTLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gYSh0aGlzKT90aGlzW09dOnZvaWQgMH19KSxfKWlbcl0mJnUoaVtyXSxPLHIpO0kmJnAmJmQoeSkhPT1DJiZwKHksQyksdC5leHBvcnRzPXtOQVRJVkVfQVJSQVlfQlVGRkVSOkksTkFUSVZFX0FSUkFZX0JVRkZFUl9WSUVXUzpBLFRZUEVEX0FSUkFZX1RBRzpNJiZPLGFUeXBlZEFycmF5OmZ1bmN0aW9uKHQpe2lmKFQodCkpcmV0dXJuIHQ7dGhyb3cgVHlwZUVycm9yKCJUYXJnZXQgaXMgbm90IGEgdHlwZWQgYXJyYXkiKX0sYVR5cGVkQXJyYXlDb25zdHJ1Y3RvcjpmdW5jdGlvbih0KXtpZihwKXtpZihrLmNhbGwoRSx0KSlyZXR1cm4gdH1lbHNlIGZvcih2YXIgZSBpbiBfKWlmKGMoXyxyKSl7dmFyIG49aVtlXTtpZihuJiYodD09PW58fGsuY2FsbChuLHQpKSlyZXR1cm4gdH10aHJvdyBUeXBlRXJyb3IoIlRhcmdldCBpcyBub3QgYSB0eXBlZCBhcnJheSBjb25zdHJ1Y3RvciIpfSxleHBvcnRUeXBlZEFycmF5TWV0aG9kOmZ1bmN0aW9uKHQsZSxuKXtpZihvKXtpZihuKWZvcih2YXIgciBpbiBfKXt2YXIgYT1pW3JdO2EmJmMoYS5wcm90b3R5cGUsdCkmJmRlbGV0ZSBhLnByb3RvdHlwZVt0XX1qW3RdJiYhbnx8bChqLHQsbj9lOkEmJmJbdF18fGUpfX0sZXhwb3J0VHlwZWRBcnJheVN0YXRpY01ldGhvZDpmdW5jdGlvbih0LGUsbil7dmFyIHIsYTtpZihvKXtpZihwKXtpZihuKWZvcihyIGluIF8pKGE9aVtyXSkmJmMoYSx0KSYmZGVsZXRlIGFbdF07aWYoRVt0XSYmIW4pcmV0dXJuO3RyeXtyZXR1cm4gbChFLHQsbj9lOkEmJm1bdF18fGUpfWNhdGNoKHQpe319Zm9yKHIgaW4gXykhKGE9aVtyXSl8fGFbdF0mJiFufHxsKGEsdCxlKX19LGlzVmlldzpmdW5jdGlvbih0KXt2YXIgZT1zKHQpO3JldHVybiJEYXRhVmlldyI9PT1lfHxjKF8sZSl9LGlzVHlwZWRBcnJheTpULFR5cGVkQXJyYXk6RSxUeXBlZEFycmF5UHJvdG90eXBlOmp9fSw4MjgzNTpmdW5jdGlvbih0LGUsbil7InVzZSBzdHJpY3QiO3ZhciByPW4oODk1NTgpLG89big2MjU1NiksaT1uKDczMDc0KS5OQVRJVkVfQVJSQVlfQlVGRkVSLGE9big2Njk3MSksYz1uKDE5MjYpLHM9bigzMjE4NyksdT1uKDU5Mzc5KSxsPW4oNDM0MTYpLGY9bigyNzg4NCksZD1uKDgzOTE0KSxwPW4oOTA3MjUpLGg9bigxMzMzNCkuZix2PW4oMzc2MjApLmYsZz1uKDY1ODk1KSx5PW4oNTExMjgpLG09big4OTgyNyksYj1tLmdldCx4PW0uc2V0LHc9IkFycmF5QnVmZmVyIixFPSJEYXRhVmlldyIsaj0iV3JvbmcgaW5kZXgiLEM9ci5BcnJheUJ1ZmZlcixrPUMsUz1yLkRhdGFWaWV3LE89ci5SYW5nZUVycm9yLEk9cC5wYWNrLEE9cC51bnBhY2ssTT1mdW5jdGlvbih0KXtyZXR1cm5bMjU1JnRdfSxfPWZ1bmN0aW9uKHQpe3JldHVyblsyNTUmdCx0Pj44JjI1NV19LFQ9ZnVuY3Rpb24odCl7cmV0dXJuWzI1NSZ0LHQ+PjgmMjU1LHQ+PjE2JjI1NSx0Pj4yNCYyNTVdfSxSPWZ1bmN0aW9uKHQpe3JldHVybiB0WzNdPDwyNHx0WzJdPDwxNnx0WzFdPDw4fHRbMF19LEw9ZnVuY3Rpb24odCl7cmV0dXJuIEkodCwyMyw0KX0sUD1mdW5jdGlvbih0KXtyZXR1cm4gSSh0LDUyLDgpfSxOPWZ1bmN0aW9uKHQsZSl7dih0LnByb3RvdHlwZSxlLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gYih0aGlzKVtlXX19KX0sRD1mdW5jdGlvbih0LGUsbixyKXt2YXIgbz1kKG4pLGk9Yih0KTtpZihvK2U+aS5ieXRlTGVuZ3RoKXRocm93IE8oaik7dmFyIGE9YihpLmJ1ZmZlcikuYnl0ZXMsYz1vK2kuYnl0ZU9mZnNldCxzPWEuc2xpY2UoYyxjK2UpO3JldHVybiByP3M6cy5yZXZlcnNlKCl9LEY9ZnVuY3Rpb24odCxlLG4scixvLGkpe3ZhciBhPWQobiksYz1iKHQpO2lmKGErZT5jLmJ5dGVMZW5ndGgpdGhyb3cgTyhqKTtmb3IodmFyIHM9YihjLmJ1ZmZlcikuYnl0ZXMsdT1hK2MuYnl0ZU9mZnNldCxsPXIoK28pLGY9MDtmPGU7ZisrKXNbdStmXT1sW2k/ZjplLWYtMV19O2lmKGkpe2lmKCFzKChmdW5jdGlvbigpe0MoMSl9KSl8fCFzKChmdW5jdGlvbigpe25ldyBDKC0xKX0pKXx8cygoZnVuY3Rpb24oKXtyZXR1cm4gbmV3IEMsbmV3IEMoMS41KSxuZXcgQyhOYU4pLEMubmFtZSE9d30pKSl7Zm9yKHZhciBVLEI9KGs9ZnVuY3Rpb24odCl7cmV0dXJuIHUodGhpcyxrKSxuZXcgQyhkKHQpKX0pLnByb3RvdHlwZT1DLnByb3RvdHlwZSx6PWgoQyksVj0wO3oubGVuZ3RoPlY7KShVPXpbVisrXSlpbiBrfHxhKGssVSxDW1VdKTtCLmNvbnN0cnVjdG9yPWt9dmFyIEg9bmV3IFMobmV3IGsoMikpLHE9Uy5wcm90b3R5cGUuc2V0SW50ODtILnNldEludDgoMCwyMTQ3NDgzNjQ4KSxILnNldEludDgoMSwyMTQ3NDgzNjQ5KSwhSC5nZXRJbnQ4KDApJiZILmdldEludDgoMSl8fGMoUy5wcm90b3R5cGUse3NldEludDg6ZnVuY3Rpb24odCxlKXtxLmNhbGwodGhpcyx0LGU8PDI0Pj4yNCl9LHNldFVpbnQ4OmZ1bmN0aW9uKHQsZSl7cS5jYWxsKHRoaXMsdCxlPDwyND4+MjQpfX0se3Vuc2FmZTohMH0pfWVsc2Ugaz1mdW5jdGlvbih0KXt1KHRoaXMsayx3KTt2YXIgZT1kKHQpO3godGhpcyx7Ynl0ZXM6Zy5jYWxsKG5ldyBBcnJheShlKSwwKSxieXRlTGVuZ3RoOmV9KSxvfHwodGhpcy5ieXRlTGVuZ3RoPWUpfSxTPWZ1bmN0aW9uKHQsZSxuKXt1KHRoaXMsUyxFKSx1KHQsayxFKTt2YXIgcj1iKHQpLmJ5dGVMZW5ndGgsaT1sKGUpO2lmKGk8MHx8aT5yKXRocm93IE8oIldyb25nIG9mZnNldCIpO2lmKGkrKG49dm9pZCAwPT09bj9yLWk6ZihuKSk+cil0aHJvdyBPKCJXcm9uZyBsZW5ndGgiKTt4KHRoaXMse2J1ZmZlcjp0LGJ5dGVMZW5ndGg6bixieXRlT2Zmc2V0Oml9KSxvfHwodGhpcy5idWZmZXI9dCx0aGlzLmJ5dGVMZW5ndGg9bix0aGlzLmJ5dGVPZmZzZXQ9aSl9LG8mJihOKGssImJ5dGVMZW5ndGgiKSxOKFMsImJ1ZmZlciIpLE4oUywiYnl0ZUxlbmd0aCIpLE4oUywiYnl0ZU9mZnNldCIpKSxjKFMucHJvdG90eXBlLHtnZXRJbnQ4OmZ1bmN0aW9uKHQpe3JldHVybiBEKHRoaXMsMSx0KVswXTw8MjQ+PjI0fSxnZXRVaW50ODpmdW5jdGlvbih0KXtyZXR1cm4gRCh0aGlzLDEsdClbMF19LGdldEludDE2OmZ1bmN0aW9uKHQpe3ZhciBlPUQodGhpcywyLHQsYXJndW1lbnRzLmxlbmd0aD4xP2FyZ3VtZW50c1sxXTp2b2lkIDApO3JldHVybihlWzFdPDw4fGVbMF0pPDwxNj4+MTZ9LGdldFVpbnQxNjpmdW5jdGlvbih0KXt2YXIgZT1EKHRoaXMsMix0LGFyZ3VtZW50cy5sZW5ndGg+MT9hcmd1bWVudHNbMV06dm9pZCAwKTtyZXR1cm4gZVsxXTw8OHxlWzBdfSxnZXRJbnQzMjpmdW5jdGlvbih0KXtyZXR1cm4gUihEKHRoaXMsNCx0LGFyZ3VtZW50cy5sZW5ndGg+MT9hcmd1bWVudHNbMV06dm9pZCAwKSl9LGdldFVpbnQzMjpmdW5jdGlvbih0KXtyZXR1cm4gUihEKHRoaXMsNCx0LGFyZ3VtZW50cy5sZW5ndGg+MT9hcmd1bWVudHNbMV06dm9pZCAwKSk+Pj4wfSxnZXRGbG9hdDMyOmZ1bmN0aW9uKHQpe3JldHVybiBBKEQodGhpcyw0LHQsYXJndW1lbnRzLmxlbmd0aD4xP2FyZ3VtZW50c1sxXTp2b2lkIDApLDIzKX0sZ2V0RmxvYXQ2NDpmdW5jdGlvbih0KXtyZXR1cm4gQShEKHRoaXMsOCx0LGFyZ3VtZW50cy5sZW5ndGg+MT9hcmd1bWVudHNbMV06dm9pZCAwKSw1Mil9LHNldEludDg6ZnVuY3Rpb24odCxlKXtGKHRoaXMsMSx0LE0sZSl9LHNldFVpbnQ4OmZ1bmN0aW9uKHQsZSl7Rih0aGlzLDEsdCxNLGUpfSxzZXRJbnQxNjpmdW5jdGlvbih0LGUpe0YodGhpcywyLHQsXyxlLGFyZ3VtZW50cy5sZW5ndGg+Mj9hcmd1bWVudHNbMl06dm9pZCAwKX0sc2V0VWludDE2OmZ1bmN0aW9uKHQsZSl7Rih0aGlzLDIsdCxfLGUsYXJndW1lbnRzLmxlbmd0aD4yP2FyZ3VtZW50c1syXTp2b2lkIDApfSxzZXRJbnQzMjpmdW5jdGlvbih0LGUpe0YodGhpcyw0LHQsVCxlLGFyZ3VtZW50cy5sZW5ndGg+Mj9hcmd1bWVudHNbMl06dm9pZCAwKX0sc2V0VWludDMyOmZ1bmN0aW9uKHQsZSl7Rih0aGlzLDQsdCxULGUsYXJndW1lbnRzLmxlbmd0aD4yP2FyZ3VtZW50c1syXTp2b2lkIDApfSxzZXRGbG9hdDMyOmZ1bmN0aW9uKHQsZSl7Rih0aGlzLDQsdCxMLGUsYXJndW1lbnRzLmxlbmd0aD4yP2FyZ3VtZW50c1syXTp2b2lkIDApfSxzZXRGbG9hdDY0OmZ1bmN0aW9uKHQsZSl7Rih0aGlzLDgsdCxQLGUsYXJndW1lbnRzLmxlbmd0aD4yP2FyZ3VtZW50c1syXTp2b2lkIDApfX0pO3koayx3KSx5KFMsRSksdC5leHBvcnRzPXtBcnJheUJ1ZmZlcjprLERhdGFWaWV3OlN9fSw5OTQzMTpmdW5jdGlvbih0LGUsbil7InVzZSBzdHJpY3QiO3ZhciByPW4oMTkyMDkpLG89big3Njk3NiksaT1uKDI3ODg0KSxhPU1hdGgubWluO3QuZXhwb3J0cz1bXS5jb3B5V2l0aGlufHxmdW5jdGlvbih0LGUpe3ZhciBuPXIodGhpcyksYz1pKG4ubGVuZ3RoKSxzPW8odCxjKSx1PW8oZSxjKSxsPWFyZ3VtZW50cy5sZW5ndGg+Mj9hcmd1bWVudHNbMl06dm9pZCAwLGY9YSgodm9pZCAwPT09bD9jOm8obCxjKSktdSxjLXMpLGQ9MTtmb3IodTxzJiZzPHUrZiYmKGQ9LTEsdSs9Zi0xLHMrPWYtMSk7Zi0tID4wOyl1IGluIG4/bltzXT1uW3VdOmRlbGV0ZSBuW3NdLHMrPWQsdSs9ZDtyZXR1cm4gbn19LDY1ODk1OmZ1bmN0aW9uKHQsZSxuKXsidXNlIHN0cmljdCI7dmFyIHI9bigxOTIwOSksbz1uKDc2OTc2KSxpPW4oMjc4ODQpO3QuZXhwb3J0cz1mdW5jdGlvbih0KXtmb3IodmFyIGU9cih0aGlzKSxuPWkoZS5sZW5ndGgpLGE9YXJndW1lbnRzLmxlbmd0aCxjPW8oYT4xP2FyZ3VtZW50c1sxXTp2b2lkIDAsbikscz1hPjI/YXJndW1lbnRzWzJdOnZvaWQgMCx1PXZvaWQgMD09PXM/bjpvKHMsbik7dT5jOyllW2MrK109dDtyZXR1cm4gZX19LDMxMzY4OmZ1bmN0aW9uKHQsZSxuKXsidXNlIHN0cmljdCI7dmFyIHI9bigzMDAyNSkuZm9yRWFjaCxvPW4oMjI5MDkpO3QuZXhwb3J0cz1vKCJmb3JFYWNoIik/ZnVuY3Rpb24odCl7cmV0dXJuIHIodGhpcyx0LGFyZ3VtZW50cy5sZW5ndGg+MT9hcmd1bWVudHNbMV06dm9pZCAwKX06W10uZm9yRWFjaH0sODUxNjY6ZnVuY3Rpb24odCxlLG4peyJ1c2Ugc3RyaWN0Ijt2YXIgcj1uKDQ2MTMwKSxvPW4oMTkyMDkpLGk9bigxMjI3OCksYT1uKDQ0OTg0KSxjPW4oMjc4ODQpLHM9big1ODgxMCksdT1uKDczODkwKTt0LmV4cG9ydHM9ZnVuY3Rpb24odCl7dmFyIGUsbixsLGYsZCxwPW8odCksaD0iZnVuY3Rpb24iPT10eXBlb2YgdGhpcz90aGlzOkFycmF5LHY9YXJndW1lbnRzLmxlbmd0aCxnPXY+MT9hcmd1bWVudHNbMV06dm9pZCAwLHk9dm9pZCAwIT09ZyxtPTAsYj11KHApO2lmKHkmJihnPXIoZyx2PjI/YXJndW1lbnRzWzJdOnZvaWQgMCwyKSksbnVsbD09Ynx8aD09QXJyYXkmJmEoYikpZm9yKG49bmV3IGgoZT1jKHAubGVuZ3RoKSk7ZT5tO20rKylzKG4sbSx5P2cocFttXSxtKTpwW21dKTtlbHNlIGZvcihkPShmPWIuY2FsbChwKSkubmV4dCxuPW5ldyBoOyEobD1kLmNhbGwoZikpLmRvbmU7bSsrKXMobixtLHk/aShmLGcsW2wudmFsdWUsbV0sITApOmwudmFsdWUpO3JldHVybiBuLmxlbmd0aD1tLG59fSw4NTgwMzpmdW5jdGlvbih0LGUsbil7dmFyIHI9big5NTczKSxvPW4oMjc4ODQpLGk9big3Njk3NiksYT1mdW5jdGlvbih0KXtyZXR1cm4gZnVuY3Rpb24oZSxuLGEpe3ZhciBjLHM9cihlKSx1PW8ocy5sZW5ndGgpLGw9aShhLHUpO2lmKHQmJm4hPW4pe2Zvcig7dT5sOylpZigoYz1zW2wrK10pIT1jKXJldHVybiEwfWVsc2UgZm9yKDt1Pmw7bCsrKWlmKCh0fHxsIGluIHMpJiZzW2xdPT09bilyZXR1cm4gdHx8bHx8MDtyZXR1cm4hdCYmLTF9fTt0LmV4cG9ydHM9e2luY2x1ZGVzOmEoITApLGluZGV4T2Y6YSghMSl9fSwzMDAyNTpmdW5jdGlvbih0LGUsbil7dmFyIHI9big0NjEzMCksbz1uKDI0OTgpLGk9bigxOTIwOSksYT1uKDI3ODg0KSxjPW4oNzAwOSkscz1bXS5wdXNoLHU9ZnVuY3Rpb24odCl7dmFyIGU9MT09dCxuPTI9PXQsdT0zPT10LGw9ND09dCxmPTY9PXQsZD01PT10fHxmO3JldHVybiBmdW5jdGlvbihwLGgsdixnKXtmb3IodmFyIHksbSxiPWkocCkseD1vKGIpLHc9cihoLHYsMyksRT1hKHgubGVuZ3RoKSxqPTAsQz1nfHxjLGs9ZT9DKHAsRSk6bj9DKHAsMCk6dm9pZCAwO0U+ajtqKyspaWYoKGR8fGogaW4geCkmJihtPXcoeT14W2pdLGosYiksdCkpaWYoZSlrW2pdPW07ZWxzZSBpZihtKXN3aXRjaCh0KXtjYXNlIDM6cmV0dXJuITA7Y2FzZSA1OnJldHVybiB5O2Nhc2UgNjpyZXR1cm4gajtjYXNlIDI6cy5jYWxsKGsseSl9ZWxzZSBpZihsKXJldHVybiExO3JldHVybiBmPy0xOnV8fGw/bDprfX07dC5leHBvcnRzPXtmb3JFYWNoOnUoMCksbWFwOnUoMSksZmlsdGVyOnUoMiksc29tZTp1KDMpLGV2ZXJ5OnUoNCksZmluZDp1KDUpLGZpbmRJbmRleDp1KDYpfX0sNDkyNDk6ZnVuY3Rpb24odCxlLG4peyJ1c2Ugc3RyaWN0Ijt2YXIgcj1uKDk1NzMpLG89big0MzQxNiksaT1uKDI3ODg0KSxhPW4oMjI5MDkpLGM9TWF0aC5taW4scz1bXS5sYXN0SW5kZXhPZix1PSEhcyYmMS9bMV0ubGFzdEluZGV4T2YoMSwtMCk8MCxsPWEoImxhc3RJbmRleE9mIik7dC5leHBvcnRzPXV8fGw/ZnVuY3Rpb24odCl7aWYodSlyZXR1cm4gcy5hcHBseSh0aGlzLGFyZ3VtZW50cyl8fDA7dmFyIGU9cih0aGlzKSxuPWkoZS5sZW5ndGgpLGE9bi0xO2Zvcihhcmd1bWVudHMubGVuZ3RoPjEmJihhPWMoYSxvKGFyZ3VtZW50c1sxXSkpKSxhPDAmJihhPW4rYSk7YT49MDthLS0paWYoYSBpbiBlJiZlW2FdPT09dClyZXR1cm4gYXx8MDtyZXR1cm4tMX06c30sNjE5NjM6ZnVuY3Rpb24odCxlLG4pe3ZhciByPW4oMzIxODcpLG89bigyMzcyNCksaT1uKDc5MDcxKSxhPW8oInNwZWNpZXMiKTt0LmV4cG9ydHM9ZnVuY3Rpb24odCl7cmV0dXJuIGk+PTUxfHwhcigoZnVuY3Rpb24oKXt2YXIgZT1bXTtyZXR1cm4oZS5jb25zdHJ1Y3Rvcj17fSlbYV09ZnVuY3Rpb24oKXtyZXR1cm57Zm9vOjF9fSwxIT09ZVt0XShCb29sZWFuKS5mb299KSl9fSwxMjM2NjpmdW5jdGlvbih0LGUsbil7dmFyIHI9big4NjQ3MCksbz1uKDE5MjA5KSxpPW4oMjQ5OCksYT1uKDI3ODg0KSxjPWZ1bmN0aW9uKHQpe3JldHVybiBmdW5jdGlvbihlLG4sYyxzKXtyKG4pO3ZhciB1PW8oZSksbD1pKHUpLGY9YSh1Lmxlbmd0aCksZD10P2YtMTowLHA9dD8tMToxO2lmKGM8Milmb3IoOzspe2lmKGQgaW4gbCl7cz1sW2RdLGQrPXA7YnJlYWt9aWYoZCs9cCx0P2Q8MDpmPD1kKXRocm93IFR5cGVFcnJvcigiUmVkdWNlIG9mIGVtcHR5IGFycmF5IHdpdGggbm8gaW5pdGlhbCB2YWx1ZSIpfWZvcig7dD9kPj0wOmY+ZDtkKz1wKWQgaW4gbCYmKHM9bihzLGxbZF0sZCx1KSk7cmV0dXJuIHN9fTt0LmV4cG9ydHM9e2xlZnQ6YyghMSkscmlnaHQ6YyghMCl9fSw3MDA5OmZ1bmN0aW9uKHQsZSxuKXt2YXIgcj1uKDEwNTkyKSxvPW4oNjE5OSksaT1uKDIzNzI0KSgic3BlY2llcyIpO3QuZXhwb3J0cz1mdW5jdGlvbih0LGUpe3ZhciBuO3JldHVybiBvKHQpJiYoImZ1bmN0aW9uIiE9dHlwZW9mKG49dC5jb25zdHJ1Y3Rvcil8fG4hPT1BcnJheSYmIW8obi5wcm90b3R5cGUpP3IobikmJm51bGw9PT0obj1uW2ldKSYmKG49dm9pZCAwKTpuPXZvaWQgMCksbmV3KHZvaWQgMD09PW4/QXJyYXk6bikoMD09PWU/MDplKX19LDQ1NjY2OmZ1bmN0aW9uKHQsZSxuKXsidXNlIHN0cmljdCI7dmFyIHI9big4NjQ3MCksbz1uKDg3NTc5KSxpPW4oNzcwMSkoIlByb21pc2UiKSxhPVtdLnB1c2gsYz1mdW5jdGlvbih0KXt2YXIgZT0wPT10LG49MT09dCxjPTI9PXQscz0zPT10O3JldHVybiBmdW5jdGlvbih0LHUpe28odCk7dmFyIGw9cih0Lm5leHQpLGY9ZT9bXTp2b2lkIDA7cmV0dXJuIGV8fHIodSksbmV3IGkoKGZ1bmN0aW9uKHIsZCl7dmFyIHA9ZnVuY3Rpb24oKXt0cnl7aS5yZXNvbHZlKG8obC5jYWxsKHQpKSkudGhlbigoZnVuY3Rpb24odCl7dHJ5e2lmKG8odCkuZG9uZSlyKGU/ZjohcyYmKGN8fHZvaWQgMCkpO2Vsc2V7dmFyIGw9dC52YWx1ZTtlPyhhLmNhbGwoZixsKSxwKCkpOmkucmVzb2x2ZSh1KGwpKS50aGVuKChmdW5jdGlvbih0KXtuP3AoKTpjP3Q/cCgpOnIoITEpOnQ/cihzfHxsKTpwKCl9KSxkKX19Y2F0Y2godCl7ZCh0KX19KSxkKX1jYXRjaCh0KXtkKHQpfX07cCgpfSkpfX07dC5leHBvcnRzPXt0b0FycmF5OmMoMCksZm9yRWFjaDpjKDEpLGV2ZXJ5OmMoMiksc29tZTpjKDMpLGZpbmQ6Yyg0KX19LDYzODQ1OmZ1bmN0aW9uKHQsZSxuKXt2YXIgcixvLGk9big4OTU1OCksYT1uKDM0NzQxKSxjPW4oNjQ5NjUpLHM9big3NjI5OCksdT1uKDY2OTcxKSxsPW4oMjM3MjQpLGY9big2NTY3MiksZD1sKCJhc3luY0l0ZXJhdG9yIikscD1pLkFzeW5jSXRlcmF0b3IsaD1hLkFzeW5jSXRlcmF0b3JQcm90b3R5cGU7aWYoIWYpaWYoaClyPWg7ZWxzZSBpZigiZnVuY3Rpb24iPT10eXBlb2YgcClyPXAucHJvdG90eXBlO2Vsc2UgaWYoYS5VU0VfRlVOQ1RJT05fQ09OU1RSVUNUT1J8fGkuVVNFX0ZVTkNUSU9OX0NPTlNUUlVDVE9SKXRyeXtvPWMoYyhjKEZ1bmN0aW9uKCJyZXR1cm4gYXN5bmMgZnVuY3Rpb24qKCl7fSgpIikoKSkpKSxjKG8pPT09T2JqZWN0LnByb3RvdHlwZSYmKHI9byl9Y2F0Y2godCl7fXJ8fChyPXt9KSxzKHIsZCl8fHUocixkLChmdW5jdGlvbigpe3JldHVybiB0aGlzfSkpLHQuZXhwb3J0cz1yfSw0NjEzMDpmdW5jdGlvbih0LGUsbil7dmFyIHI9big4NjQ3MCk7dC5leHBvcnRzPWZ1bmN0aW9uKHQsZSxuKXtpZihyKHQpLHZvaWQgMD09PWUpcmV0dXJuIHQ7c3dpdGNoKG4pe2Nhc2UgMDpyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gdC5jYWxsKGUpfTtjYXNlIDE6cmV0dXJuIGZ1bmN0aW9uKG4pe3JldHVybiB0LmNhbGwoZSxuKX07Y2FzZSAyOnJldHVybiBmdW5jdGlvbihuLHIpe3JldHVybiB0LmNhbGwoZSxuLHIpfTtjYXNlIDM6cmV0dXJuIGZ1bmN0aW9uKG4scixvKXtyZXR1cm4gdC5jYWxsKGUsbixyLG8pfX1yZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gdC5hcHBseShlLGFyZ3VtZW50cyl9fX0sMTIyNzg6ZnVuY3Rpb24odCxlLG4pe3ZhciByPW4oODc1NzkpO3QuZXhwb3J0cz1mdW5jdGlvbih0LGUsbixvKXt0cnl7cmV0dXJuIG8/ZShyKG4pWzBdLG5bMV0pOmUobil9Y2F0Y2goZSl7dmFyIGk9dC5yZXR1cm47dGhyb3cgdm9pZCAwIT09aSYmcihpLmNhbGwodCkpLGV9fX0sNDc5NjpmdW5jdGlvbih0LGUsbil7dmFyIHI9bigyMzcyNCkoIml0ZXJhdG9yIiksbz0hMTt0cnl7dmFyIGk9MCxhPXtuZXh0OmZ1bmN0aW9uKCl7cmV0dXJue2RvbmU6ISFpKyt9fSxyZXR1cm46ZnVuY3Rpb24oKXtvPSEwfX07YVtyXT1mdW5jdGlvbigpe3JldHVybiB0aGlzfSxBcnJheS5mcm9tKGEsKGZ1bmN0aW9uKCl7dGhyb3cgMn0pKX1jYXRjaCh0KXt9dC5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7aWYoIWUmJiFvKXJldHVybiExO3ZhciBuPSExO3RyeXt2YXIgaT17fTtpW3JdPWZ1bmN0aW9uKCl7cmV0dXJue25leHQ6ZnVuY3Rpb24oKXtyZXR1cm57ZG9uZTpuPSEwfX19fSx0KGkpfWNhdGNoKHQpe31yZXR1cm4gbn19LDI0NTk0OmZ1bmN0aW9uKHQpe3ZhciBlPXt9LnRvU3RyaW5nO3QuZXhwb3J0cz1mdW5jdGlvbih0KXtyZXR1cm4gZS5jYWxsKHQpLnNsaWNlKDgsLTEpfX0sNTk1OTE6ZnVuY3Rpb24odCxlLG4pe3ZhciByPW4oOTA2MTMpLG89bigyNDU5NCksaT1uKDIzNzI0KSgidG9TdHJpbmdUYWciKSxhPSJBcmd1bWVudHMiPT1vKGZ1bmN0aW9uKCl7cmV0dXJuIGFyZ3VtZW50c30oKSk7dC5leHBvcnRzPXI/bzpmdW5jdGlvbih0KXt2YXIgZSxuLHI7cmV0dXJuIHZvaWQgMD09PXQ/IlVuZGVmaW5lZCI6bnVsbD09PXQ/Ik51bGwiOiJzdHJpbmciPT10eXBlb2Yobj1mdW5jdGlvbih0LGUpe3RyeXtyZXR1cm4gdFtlXX1jYXRjaCh0KXt9fShlPU9iamVjdCh0KSxpKSk/bjphP28oZSk6Ik9iamVjdCI9PShyPW8oZSkpJiYiZnVuY3Rpb24iPT10eXBlb2YgZS5jYWxsZWU/IkFyZ3VtZW50cyI6cn19LDk4MTc5OmZ1bmN0aW9uKHQsZSxuKXsidXNlIHN0cmljdCI7dmFyIHI9big4NzU3OSksbz1uKDg2NDcwKTt0LmV4cG9ydHM9ZnVuY3Rpb24oKXtmb3IodmFyIHQ9cih0aGlzKSxlPW8odC5hZGQpLG49MCxpPWFyZ3VtZW50cy5sZW5ndGg7bjxpO24rKyllLmNhbGwodCxhcmd1bWVudHNbbl0pO3JldHVybiB0fX0sMTQ2NjpmdW5jdGlvbih0LGUsbil7InVzZSBzdHJpY3QiO3ZhciByPW4oODc1NzkpLG89big4NjQ3MCk7dC5leHBvcnRzPWZ1bmN0aW9uKCl7Zm9yKHZhciB0LGU9cih0aGlzKSxuPW8oZS5kZWxldGUpLGk9ITAsYT0wLGM9YXJndW1lbnRzLmxlbmd0aDthPGM7YSsrKXQ9bi5jYWxsKGUsYXJndW1lbnRzW2FdKSxpPWkmJnQ7cmV0dXJuISFpfX0sMTI5MDE6ZnVuY3Rpb24odCxlLG4peyJ1c2Ugc3RyaWN0Ijt2YXIgcj1uKDg2NDcwKSxvPW4oNDYxMzApLGk9big0MTMzNCk7dC5leHBvcnRzPWZ1bmN0aW9uKHQpe3ZhciBlLG4sYSxjLHM9YXJndW1lbnRzLmxlbmd0aCx1PXM+MT9hcmd1bWVudHNbMV06dm9pZCAwO3JldHVybiByKHRoaXMpLChlPXZvaWQgMCE9PXUpJiZyKHUpLG51bGw9PXQ/bmV3IHRoaXM6KG49W10sZT8oYT0wLGM9byh1LHM+Mj9hcmd1bWVudHNbMl06dm9pZCAwLDIpLGkodCwoZnVuY3Rpb24odCl7bi5wdXNoKGModCxhKyspKX0pKSk6aSh0LG4ucHVzaCxuKSxuZXcgdGhpcyhuKSl9fSwyNTAyNjpmdW5jdGlvbih0KXsidXNlIHN0cmljdCI7dC5leHBvcnRzPWZ1bmN0aW9uKCl7Zm9yKHZhciB0PWFyZ3VtZW50cy5sZW5ndGgsZT1uZXcgQXJyYXkodCk7dC0tOyllW3RdPWFyZ3VtZW50c1t0XTtyZXR1cm4gbmV3IHRoaXMoZSl9fSw2NDUwOmZ1bmN0aW9uKHQsZSxuKXsidXNlIHN0cmljdCI7dmFyIHI9bigzNzYyMCkuZixvPW4oNTA4NjgpLGk9bigxOTI2KSxhPW4oNDYxMzApLGM9big1OTM3OSkscz1uKDQxMzM0KSx1PW4oNDYwNjEpLGw9big2NzUzOCksZj1uKDYyNTU2KSxkPW4oOTYwMykuZmFzdEtleSxwPW4oODk4MjcpLGg9cC5zZXQsdj1wLmdldHRlckZvcjt0LmV4cG9ydHM9e2dldENvbnN0cnVjdG9yOmZ1bmN0aW9uKHQsZSxuLHUpe3ZhciBsPXQoKGZ1bmN0aW9uKHQscil7Yyh0LGwsZSksaCh0LHt0eXBlOmUsaW5kZXg6byhudWxsKSxmaXJzdDp2b2lkIDAsbGFzdDp2b2lkIDAsc2l6ZTowfSksZnx8KHQuc2l6ZT0wKSxudWxsIT1yJiZzKHIsdFt1XSx0LG4pfSkpLHA9dihlKSxnPWZ1bmN0aW9uKHQsZSxuKXt2YXIgcixvLGk9cCh0KSxhPXkodCxlKTtyZXR1cm4gYT9hLnZhbHVlPW46KGkubGFzdD1hPXtpbmRleDpvPWQoZSwhMCksa2V5OmUsdmFsdWU6bixwcmV2aW91czpyPWkubGFzdCxuZXh0OnZvaWQgMCxyZW1vdmVkOiExfSxpLmZpcnN0fHwoaS5maXJzdD1hKSxyJiYoci5uZXh0PWEpLGY/aS5zaXplKys6dC5zaXplKyssIkYiIT09byYmKGkuaW5kZXhbb109YSkpLHR9LHk9ZnVuY3Rpb24odCxlKXt2YXIgbixyPXAodCksbz1kKGUpO2lmKCJGIiE9PW8pcmV0dXJuIHIuaW5kZXhbb107Zm9yKG49ci5maXJzdDtuO249bi5uZXh0KWlmKG4ua2V5PT1lKXJldHVybiBufTtyZXR1cm4gaShsLnByb3RvdHlwZSx7Y2xlYXI6ZnVuY3Rpb24oKXtmb3IodmFyIHQ9cCh0aGlzKSxlPXQuaW5kZXgsbj10LmZpcnN0O247KW4ucmVtb3ZlZD0hMCxuLnByZXZpb3VzJiYobi5wcmV2aW91cz1uLnByZXZpb3VzLm5leHQ9dm9pZCAwKSxkZWxldGUgZVtuLmluZGV4XSxuPW4ubmV4dDt0LmZpcnN0PXQubGFzdD12b2lkIDAsZj90LnNpemU9MDp0aGlzLnNpemU9MH0sZGVsZXRlOmZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMsbj1wKGUpLHI9eShlLHQpO2lmKHIpe3ZhciBvPXIubmV4dCxpPXIucHJldmlvdXM7ZGVsZXRlIG4uaW5kZXhbci5pbmRleF0sci5yZW1vdmVkPSEwLGkmJihpLm5leHQ9byksbyYmKG8ucHJldmlvdXM9aSksbi5maXJzdD09ciYmKG4uZmlyc3Q9byksbi5sYXN0PT1yJiYobi5sYXN0PWkpLGY/bi5zaXplLS06ZS5zaXplLS19cmV0dXJuISFyfSxmb3JFYWNoOmZ1bmN0aW9uKHQpe2Zvcih2YXIgZSxuPXAodGhpcykscj1hKHQsYXJndW1lbnRzLmxlbmd0aD4xP2FyZ3VtZW50c1sxXTp2b2lkIDAsMyk7ZT1lP2UubmV4dDpuLmZpcnN0Oylmb3IocihlLnZhbHVlLGUua2V5LHRoaXMpO2UmJmUucmVtb3ZlZDspZT1lLnByZXZpb3VzfSxoYXM6ZnVuY3Rpb24odCl7cmV0dXJuISF5KHRoaXMsdCl9fSksaShsLnByb3RvdHlwZSxuP3tnZXQ6ZnVuY3Rpb24odCl7dmFyIGU9eSh0aGlzLHQpO3JldHVybiBlJiZlLnZhbHVlfSxzZXQ6ZnVuY3Rpb24odCxlKXtyZXR1cm4gZyh0aGlzLDA9PT10PzA6dCxlKX19OnthZGQ6ZnVuY3Rpb24odCl7cmV0dXJuIGcodGhpcyx0PTA9PT10PzA6dCx0KX19KSxmJiZyKGwucHJvdG90eXBlLCJzaXplIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHAodGhpcykuc2l6ZX19KSxsfSxzZXRTdHJvbmc6ZnVuY3Rpb24odCxlLG4pe3ZhciByPWUrIiBJdGVyYXRvciIsbz12KGUpLGk9dihyKTt1KHQsZSwoZnVuY3Rpb24odCxlKXtoKHRoaXMse3R5cGU6cix0YXJnZXQ6dCxzdGF0ZTpvKHQpLGtpbmQ6ZSxsYXN0OnZvaWQgMH0pfSksKGZ1bmN0aW9uKCl7Zm9yKHZhciB0PWkodGhpcyksZT10LmtpbmQsbj10Lmxhc3Q7biYmbi5yZW1vdmVkOyluPW4ucHJldmlvdXM7cmV0dXJuIHQudGFyZ2V0JiYodC5sYXN0PW49bj9uLm5leHQ6dC5zdGF0ZS5maXJzdCk/ImtleXMiPT1lP3t2YWx1ZTpuLmtleSxkb25lOiExfToidmFsdWVzIj09ZT97dmFsdWU6bi52YWx1ZSxkb25lOiExfTp7dmFsdWU6W24ua2V5LG4udmFsdWVdLGRvbmU6ITF9Oih0LnRhcmdldD12b2lkIDAse3ZhbHVlOnZvaWQgMCxkb25lOiEwfSl9KSxuPyJlbnRyaWVzIjoidmFsdWVzIiwhbiwhMCksbChlKX19fSw3MTMwMzpmdW5jdGlvbih0LGUsbil7InVzZSBzdHJpY3QiO3ZhciByPW4oMTkyNiksbz1uKDk2MDMpLmdldFdlYWtEYXRhLGk9big4NzU3OSksYT1uKDEwNTkyKSxjPW4oNTkzNzkpLHM9big0MTMzNCksdT1uKDMwMDI1KSxsPW4oNzYyOTgpLGY9big4OTgyNyksZD1mLnNldCxwPWYuZ2V0dGVyRm9yLGg9dS5maW5kLHY9dS5maW5kSW5kZXgsZz0wLHk9ZnVuY3Rpb24odCl7cmV0dXJuIHQuZnJvemVufHwodC5mcm96ZW49bmV3IG0pfSxtPWZ1bmN0aW9uKCl7dGhpcy5lbnRyaWVzPVtdfSxiPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIGgodC5lbnRyaWVzLChmdW5jdGlvbih0KXtyZXR1cm4gdFswXT09PWV9KSl9O20ucHJvdG90eXBlPXtnZXQ6ZnVuY3Rpb24odCl7dmFyIGU9Yih0aGlzLHQpO2lmKGUpcmV0dXJuIGVbMV19LGhhczpmdW5jdGlvbih0KXtyZXR1cm4hIWIodGhpcyx0KX0sc2V0OmZ1bmN0aW9uKHQsZSl7dmFyIG49Yih0aGlzLHQpO24/blsxXT1lOnRoaXMuZW50cmllcy5wdXNoKFt0LGVdKX0sZGVsZXRlOmZ1bmN0aW9uKHQpe3ZhciBlPXYodGhpcy5lbnRyaWVzLChmdW5jdGlvbihlKXtyZXR1cm4gZVswXT09PXR9KSk7cmV0dXJufmUmJnRoaXMuZW50cmllcy5zcGxpY2UoZSwxKSwhIX5lfX0sdC5leHBvcnRzPXtnZXRDb25zdHJ1Y3RvcjpmdW5jdGlvbih0LGUsbix1KXt2YXIgZj10KChmdW5jdGlvbih0LHIpe2ModCxmLGUpLGQodCx7dHlwZTplLGlkOmcrKyxmcm96ZW46dm9pZCAwfSksbnVsbCE9ciYmcyhyLHRbdV0sdCxuKX0pKSxoPXAoZSksdj1mdW5jdGlvbih0LGUsbil7dmFyIHI9aCh0KSxhPW8oaShlKSwhMCk7cmV0dXJuITA9PT1hP3kocikuc2V0KGUsbik6YVtyLmlkXT1uLHR9O3JldHVybiByKGYucHJvdG90eXBlLHtkZWxldGU6ZnVuY3Rpb24odCl7dmFyIGU9aCh0aGlzKTtpZighYSh0KSlyZXR1cm4hMTt2YXIgbj1vKHQpO3JldHVybiEwPT09bj95KGUpLmRlbGV0ZSh0KTpuJiZsKG4sZS5pZCkmJmRlbGV0ZSBuW2UuaWRdfSxoYXM6ZnVuY3Rpb24odCl7dmFyIGU9aCh0aGlzKTtpZighYSh0KSlyZXR1cm4hMTt2YXIgbj1vKHQpO3JldHVybiEwPT09bj95KGUpLmhhcyh0KTpuJiZsKG4sZS5pZCl9fSkscihmLnByb3RvdHlwZSxuP3tnZXQ6ZnVuY3Rpb24odCl7dmFyIGU9aCh0aGlzKTtpZihhKHQpKXt2YXIgbj1vKHQpO3JldHVybiEwPT09bj95KGUpLmdldCh0KTpuP25bZS5pZF06dm9pZCAwfX0sc2V0OmZ1bmN0aW9uKHQsZSl7cmV0dXJuIHYodGhpcyx0LGUpfX06e2FkZDpmdW5jdGlvbih0KXtyZXR1cm4gdih0aGlzLHQsITApfX0pLGZ9fX0sODE5NTE6ZnVuY3Rpb24odCxlLG4peyJ1c2Ugc3RyaWN0Ijt2YXIgcj1uKDE0MDQ0KSxvPW4oODk1NTgpLGk9big2NDUwNCksYT1uKDkyOTEzKSxjPW4oOTYwMykscz1uKDQxMzM0KSx1PW4oNTkzNzkpLGw9bigxMDU5MiksZj1uKDMyMTg3KSxkPW4oNDc5NikscD1uKDUxMTI4KSxoPW4oMzAyNzIpO3QuZXhwb3J0cz1mdW5jdGlvbih0LGUsbil7dmFyIHY9LTEhPT10LmluZGV4T2YoIk1hcCIpLGc9LTEhPT10LmluZGV4T2YoIldlYWsiKSx5PXY/InNldCI6ImFkZCIsbT1vW3RdLGI9bSYmbS5wcm90b3R5cGUseD1tLHc9e30sRT1mdW5jdGlvbih0KXt2YXIgZT1iW3RdO2EoYix0LCJhZGQiPT10P2Z1bmN0aW9uKHQpe3JldHVybiBlLmNhbGwodGhpcywwPT09dD8wOnQpLHRoaXN9OiJkZWxldGUiPT10P2Z1bmN0aW9uKHQpe3JldHVybiEoZyYmIWwodCkpJiZlLmNhbGwodGhpcywwPT09dD8wOnQpfToiZ2V0Ij09dD9mdW5jdGlvbih0KXtyZXR1cm4gZyYmIWwodCk/dm9pZCAwOmUuY2FsbCh0aGlzLDA9PT10PzA6dCl9OiJoYXMiPT10P2Z1bmN0aW9uKHQpe3JldHVybiEoZyYmIWwodCkpJiZlLmNhbGwodGhpcywwPT09dD8wOnQpfTpmdW5jdGlvbih0LG4pe3JldHVybiBlLmNhbGwodGhpcywwPT09dD8wOnQsbiksdGhpc30pfTtpZihpKHQsImZ1bmN0aW9uIiE9dHlwZW9mIG18fCEoZ3x8Yi5mb3JFYWNoJiYhZigoZnVuY3Rpb24oKXsobmV3IG0pLmVudHJpZXMoKS5uZXh0KCl9KSkpKSl4PW4uZ2V0Q29uc3RydWN0b3IoZSx0LHYseSksYy5SRVFVSVJFRD0hMDtlbHNlIGlmKGkodCwhMCkpe3ZhciBqPW5ldyB4LEM9alt5XShnP3t9Oi0wLDEpIT1qLGs9ZigoZnVuY3Rpb24oKXtqLmhhcygxKX0pKSxTPWQoKGZ1bmN0aW9uKHQpe25ldyBtKHQpfSkpLE89IWcmJmYoKGZ1bmN0aW9uKCl7Zm9yKHZhciB0PW5ldyBtLGU9NTtlLS07KXRbeV0oZSxlKTtyZXR1cm4hdC5oYXMoLTApfSkpO1N8fCgoeD1lKChmdW5jdGlvbihlLG4pe3UoZSx4LHQpO3ZhciByPWgobmV3IG0sZSx4KTtyZXR1cm4gbnVsbCE9biYmcyhuLHJbeV0scix2KSxyfSkpKS5wcm90b3R5cGU9YixiLmNvbnN0cnVjdG9yPXgpLChrfHxPKSYmKEUoImRlbGV0ZSIpLEUoImhhcyIpLHYmJkUoImdldCIpKSwoT3x8QykmJkUoeSksZyYmYi5jbGVhciYmZGVsZXRlIGIuY2xlYXJ9cmV0dXJuIHdbdF09eCxyKHtnbG9iYWw6ITAsZm9yY2VkOnghPW19LHcpLHAoeCx0KSxnfHxuLnNldFN0cm9uZyh4LHQsdikseH19LDc0Njg1OmZ1bmN0aW9uKHQsZSxuKXt2YXIgcj1uKDk0OTA2KSxvPW4oNTg2MDYpLGk9big1MDg2OCksYT1uKDEwNTkyKSxjPWZ1bmN0aW9uKCl7dGhpcy5vYmplY3Q9bnVsbCx0aGlzLnN5bWJvbD1udWxsLHRoaXMucHJpbWl0aXZlcz1udWxsLHRoaXMub2JqZWN0c0J5SW5kZXg9aShudWxsKX07Yy5wcm90b3R5cGUuZ2V0PWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHRoaXNbdF18fCh0aGlzW3RdPWUoKSl9LGMucHJvdG90eXBlLm5leHQ9ZnVuY3Rpb24odCxlLG4pe3ZhciBpPW4/dGhpcy5vYmplY3RzQnlJbmRleFt0XXx8KHRoaXMub2JqZWN0c0J5SW5kZXhbdF09bmV3IG8pOnRoaXMucHJpbWl0aXZlc3x8KHRoaXMucHJpbWl0aXZlcz1uZXcgciksYT1pLmdldChlKTtyZXR1cm4gYXx8aS5zZXQoZSxhPW5ldyBjKSxhfTt2YXIgcz1uZXcgYzt0LmV4cG9ydHM9ZnVuY3Rpb24oKXt2YXIgdCxlLG49cyxyPWFyZ3VtZW50cy5sZW5ndGg7Zm9yKHQ9MDt0PHI7dCsrKWEoZT1hcmd1bWVudHNbdF0pJiYobj1uLm5leHQodCxlLCEwKSk7aWYodGhpcz09PU9iamVjdCYmbj09PXMpdGhyb3cgVHlwZUVycm9yKCJDb21wb3NpdGUga2V5cyBtdXN0IGNvbnRhaW4gYSBub24tcHJpbWl0aXZlIGNvbXBvbmVudCIpO2Zvcih0PTA7dDxyO3QrKylhKGU9YXJndW1lbnRzW3RdKXx8KG49bi5uZXh0KHQsZSwhMSkpO3JldHVybiBufX0sOTk2MjU6ZnVuY3Rpb24odCxlLG4pe3ZhciByPW4oNzYyOTgpLG89bigyNDQxNSksaT1uKDk3MjU3KSxhPW4oMzc2MjApO3QuZXhwb3J0cz1mdW5jdGlvbih0LGUpe2Zvcih2YXIgbj1vKGUpLGM9YS5mLHM9aS5mLHU9MDt1PG4ubGVuZ3RoO3UrKyl7dmFyIGw9blt1XTtyKHQsbCl8fGModCxsLHMoZSxsKSl9fX0sOTM5MTU6ZnVuY3Rpb24odCxlLG4pe3ZhciByPW4oMjM3MjQpKCJtYXRjaCIpO3QuZXhwb3J0cz1mdW5jdGlvbih0KXt2YXIgZT0vLi87dHJ5eyIvLi8iW3RdKGUpfWNhdGNoKG4pe3RyeXtyZXR1cm4gZVtyXT0hMSwiLy4vIlt0XShlKX1jYXRjaCh0KXt9fXJldHVybiExfX0sNzE2MDg6ZnVuY3Rpb24odCxlLG4pe3ZhciByPW4oMzIxODcpO3QuZXhwb3J0cz0hcigoZnVuY3Rpb24oKXtmdW5jdGlvbiB0KCl7fXJldHVybiB0LnByb3RvdHlwZS5jb25zdHJ1Y3Rvcj1udWxsLE9iamVjdC5nZXRQcm90b3R5cGVPZihuZXcgdCkhPT10LnByb3RvdHlwZX0pKX0sMjcwMDQ6ZnVuY3Rpb24odCxlLG4peyJ1c2Ugc3RyaWN0Ijt2YXIgcj1uKDU2MjM4KSxvPW4oODY0NzApLGk9big4NzU3OSksYT1uKDUwODY4KSxjPW4oNjY5NzEpLHM9bigxOTI2KSx1PW4oMjM3MjQpLGw9big4OTgyNyksZj1uKDc3MDEpKCJQcm9taXNlIiksZD1sLnNldCxwPWwuZ2V0LGg9dSgidG9TdHJpbmdUYWciKSx2PWZ1bmN0aW9uKHQpe3ZhciBlPXAodGhpcykuaXRlcmF0b3Isbj1lLnJldHVybjtyZXR1cm4gdm9pZCAwPT09bj9mLnJlc29sdmUoe2RvbmU6ITAsdmFsdWU6dH0pOmkobi5jYWxsKGUsdCkpfSxnPWZ1bmN0aW9uKHQpe3ZhciBlPXAodGhpcykuaXRlcmF0b3Isbj1lLnRocm93O3JldHVybiB2b2lkIDA9PT1uP2YucmVqZWN0KHQpOm4uY2FsbChlLHQpfTt0LmV4cG9ydHM9ZnVuY3Rpb24odCxlKXt2YXIgbj1mdW5jdGlvbih0KXt0Lm5leHQ9byh0Lml0ZXJhdG9yLm5leHQpLHQuZG9uZT0hMSxkKHRoaXMsdCl9O3JldHVybiBuLnByb3RvdHlwZT1zKGEoci5Bc3luY0l0ZXJhdG9yLnByb3RvdHlwZSkse25leHQ6ZnVuY3Rpb24oZSl7dmFyIG49cCh0aGlzKTtpZihuLmRvbmUpcmV0dXJuIGYucmVzb2x2ZSh7ZG9uZTohMCx2YWx1ZTp2b2lkIDB9KTt0cnl7cmV0dXJuIGYucmVzb2x2ZShpKHQuY2FsbChuLGUsZikpKX1jYXRjaCh0KXtyZXR1cm4gZi5yZWplY3QodCl9fSxyZXR1cm46dix0aHJvdzpnfSksZXx8YyhuLnByb3RvdHlwZSxoLCJHZW5lcmF0b3IiKSxufX0sMzEzNTE6ZnVuY3Rpb24odCxlLG4pe3ZhciByPW4oNzAxMzIpLG89LyIvZzt0LmV4cG9ydHM9ZnVuY3Rpb24odCxlLG4saSl7dmFyIGE9U3RyaW5nKHIodCkpLGM9IjwiK2U7cmV0dXJuIiIhPT1uJiYoYys9IiAiK24rJz0iJytTdHJpbmcoaSkucmVwbGFjZShvLCImcXVvdDsiKSsnIicpLGMrIj4iK2ErIjwvIitlKyI+In19LDcxMjAxOmZ1bmN0aW9uKHQsZSxuKXsidXNlIHN0cmljdCI7dmFyIHI9big2NDE3NikuSXRlcmF0b3JQcm90b3R5cGUsbz1uKDUwODY4KSxpPW4oMTQyMDkpLGE9big1MTEyOCksYz1uKDEyMzUpLHM9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpc307dC5leHBvcnRzPWZ1bmN0aW9uKHQsZSxuKXt2YXIgdT1lKyIgSXRlcmF0b3IiO3JldHVybiB0LnByb3RvdHlwZT1vKHIse25leHQ6aSgxLG4pfSksYSh0LHUsITEsITApLGNbdV09cyx0fX0sODgwNzpmdW5jdGlvbih0LGUsbil7InVzZSBzdHJpY3QiO3ZhciByPW4oNTYyMzgpLG89big4NjQ3MCksaT1uKDg3NTc5KSxhPW4oNTA4NjgpLGM9big2Njk3MSkscz1uKDE5MjYpLHU9bigyMzcyNCksbD1uKDg5ODI3KSxmPWwuc2V0LGQ9bC5nZXQscD11KCJ0b1N0cmluZ1RhZyIpLGg9ZnVuY3Rpb24odCl7dmFyIGU9ZCh0aGlzKS5pdGVyYXRvcixuPWUucmV0dXJuO3JldHVybiB2b2lkIDA9PT1uP3tkb25lOiEwLHZhbHVlOnR9Omkobi5jYWxsKGUsdCkpfSx2PWZ1bmN0aW9uKHQpe3ZhciBlPWQodGhpcykuaXRlcmF0b3Isbj1lLnRocm93O2lmKHZvaWQgMD09PW4pdGhyb3cgdDtyZXR1cm4gbi5jYWxsKGUsdCl9O3QuZXhwb3J0cz1mdW5jdGlvbih0LGUpe3ZhciBuPWZ1bmN0aW9uKHQpe3QubmV4dD1vKHQuaXRlcmF0b3IubmV4dCksdC5kb25lPSExLGYodGhpcyx0KX07cmV0dXJuIG4ucHJvdG90eXBlPXMoYShyLkl0ZXJhdG9yLnByb3RvdHlwZSkse25leHQ6ZnVuY3Rpb24oKXt2YXIgZT1kKHRoaXMpLG49ZS5kb25lP3ZvaWQgMDp0LmFwcGx5KGUsYXJndW1lbnRzKTtyZXR1cm57ZG9uZTplLmRvbmUsdmFsdWU6bn19LHJldHVybjpoLHRocm93OnZ9KSxlfHxjKG4ucHJvdG90eXBlLHAsIkdlbmVyYXRvciIpLG59fSw2Njk3MTpmdW5jdGlvbih0LGUsbil7dmFyIHI9big2MjU1Niksbz1uKDM3NjIwKSxpPW4oMTQyMDkpO3QuZXhwb3J0cz1yP2Z1bmN0aW9uKHQsZSxuKXtyZXR1cm4gby5mKHQsZSxpKDEsbikpfTpmdW5jdGlvbih0LGUsbil7cmV0dXJuIHRbZV09bix0fX0sMTQyMDk6ZnVuY3Rpb24odCl7dC5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7cmV0dXJue2VudW1lcmFibGU6ISgxJnQpLGNvbmZpZ3VyYWJsZTohKDImdCksd3JpdGFibGU6ISg0JnQpLHZhbHVlOmV9fX0sNTg4MTA6ZnVuY3Rpb24odCxlLG4peyJ1c2Ugc3RyaWN0Ijt2YXIgcj1uKDUzNDk4KSxvPW4oMzc2MjApLGk9bigxNDIwOSk7dC5leHBvcnRzPWZ1bmN0aW9uKHQsZSxuKXt2YXIgYT1yKGUpO2EgaW4gdD9vLmYodCxhLGkoMCxuKSk6dFthXT1ufX0sNzkxNjc6ZnVuY3Rpb24odCxlLG4peyJ1c2Ugc3RyaWN0Ijt2YXIgcj1uKDMyMTg3KSxvPW4oMjY1NzMpLnN0YXJ0LGk9TWF0aC5hYnMsYT1EYXRlLnByb3RvdHlwZSxjPWEuZ2V0VGltZSxzPWEudG9JU09TdHJpbmc7dC5leHBvcnRzPXIoKGZ1bmN0aW9uKCl7cmV0dXJuIjAzODUtMDctMjVUMDc6MDY6MzkuOTk5WiIhPXMuY2FsbChuZXcgRGF0ZSgtNTAwMDAwMDAwMDAwMDEpKX0pKXx8IXIoKGZ1bmN0aW9uKCl7cy5jYWxsKG5ldyBEYXRlKE5hTikpfSkpP2Z1bmN0aW9uKCl7aWYoIWlzRmluaXRlKGMuY2FsbCh0aGlzKSkpdGhyb3cgUmFuZ2VFcnJvcigiSW52YWxpZCB0aW1lIHZhbHVlIik7dmFyIHQ9dGhpcyxlPXQuZ2V0VVRDRnVsbFllYXIoKSxuPXQuZ2V0VVRDTWlsbGlzZWNvbmRzKCkscj1lPDA/Ii0iOmU+OTk5OT8iKyI6IiI7cmV0dXJuIHIrbyhpKGUpLHI/Njo0LDApKyItIitvKHQuZ2V0VVRDTW9udGgoKSsxLDIsMCkrIi0iK28odC5nZXRVVENEYXRlKCksMiwwKSsiVCIrbyh0LmdldFVUQ0hvdXJzKCksMiwwKSsiOiIrbyh0LmdldFVUQ01pbnV0ZXMoKSwyLDApKyI6IitvKHQuZ2V0VVRDU2Vjb25kcygpLDIsMCkrIi4iK28obiwzLDApKyJaIn06c30sNzY5NzQ6ZnVuY3Rpb24odCxlLG4peyJ1c2Ugc3RyaWN0Ijt2YXIgcj1uKDg3NTc5KSxvPW4oNTM0OTgpO3QuZXhwb3J0cz1mdW5jdGlvbih0KXtpZigic3RyaW5nIiE9PXQmJiJudW1iZXIiIT09dCYmImRlZmF1bHQiIT09dCl0aHJvdyBUeXBlRXJyb3IoIkluY29ycmVjdCBoaW50Iik7cmV0dXJuIG8ocih0aGlzKSwibnVtYmVyIiE9PXQpfX0sNDYwNjE6ZnVuY3Rpb24odCxlLG4peyJ1c2Ugc3RyaWN0Ijt2YXIgcj1uKDE0MDQ0KSxvPW4oNzEyMDEpLGk9big2NDk2NSksYT1uKDcxODQyKSxjPW4oNTExMjgpLHM9big2Njk3MSksdT1uKDkyOTEzKSxsPW4oMjM3MjQpLGY9big2NTY3MiksZD1uKDEyMzUpLHA9big2NDE3NiksaD1wLkl0ZXJhdG9yUHJvdG90eXBlLHY9cC5CVUdHWV9TQUZBUklfSVRFUkFUT1JTLGc9bCgiaXRlcmF0b3IiKSx5PSJrZXlzIixtPSJ2YWx1ZXMiLGI9ImVudHJpZXMiLHg9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpc307dC5leHBvcnRzPWZ1bmN0aW9uKHQsZSxuLGwscCx3LEUpe28obixlLGwpO3ZhciBqLEMsayxTPWZ1bmN0aW9uKHQpe2lmKHQ9PT1wJiZfKXJldHVybiBfO2lmKCF2JiZ0IGluIEEpcmV0dXJuIEFbdF07c3dpdGNoKHQpe2Nhc2UgeTpjYXNlIG06Y2FzZSBiOnJldHVybiBmdW5jdGlvbigpe3JldHVybiBuZXcgbih0aGlzLHQpfX1yZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gbmV3IG4odGhpcyl9fSxPPWUrIiBJdGVyYXRvciIsST0hMSxBPXQucHJvdG90eXBlLE09QVtnXXx8QVsiQEBpdGVyYXRvciJdfHxwJiZBW3BdLF89IXYmJk18fFMocCksVD0iQXJyYXkiPT1lJiZBLmVudHJpZXN8fE07aWYoVCYmKGo9aShULmNhbGwobmV3IHQpKSxoIT09T2JqZWN0LnByb3RvdHlwZSYmai5uZXh0JiYoZnx8aShqKT09PWh8fChhP2EoaixoKToiZnVuY3Rpb24iIT10eXBlb2YgaltnXSYmcyhqLGcseCkpLGMoaixPLCEwLCEwKSxmJiYoZFtPXT14KSkpLHA9PW0mJk0mJk0ubmFtZSE9PW0mJihJPSEwLF89ZnVuY3Rpb24oKXtyZXR1cm4gTS5jYWxsKHRoaXMpfSksZiYmIUV8fEFbZ109PT1ffHxzKEEsZyxfKSxkW2VdPV8scClpZihDPXt2YWx1ZXM6UyhtKSxrZXlzOnc/XzpTKHkpLGVudHJpZXM6UyhiKX0sRSlmb3IoayBpbiBDKSh2fHxJfHwhKGsgaW4gQSkpJiZ1KEEsayxDW2tdKTtlbHNlIHIoe3RhcmdldDplLHByb3RvOiEwLGZvcmNlZDp2fHxJfSxDKTtyZXR1cm4gQ319LDkyMjc1OmZ1bmN0aW9uKHQsZSxuKXt2YXIgcj1uKDU2MjM4KSxvPW4oNzYyOTgpLGk9big3MzkxNiksYT1uKDM3NjIwKS5mO3QuZXhwb3J0cz1mdW5jdGlvbih0KXt2YXIgZT1yLlN5bWJvbHx8KHIuU3ltYm9sPXt9KTtvKGUsdCl8fGEoZSx0LHt2YWx1ZTppLmYodCl9KX19LDYyNTU2OmZ1bmN0aW9uKHQsZSxuKXt2YXIgcj1uKDMyMTg3KTt0LmV4cG9ydHM9IXIoKGZ1bmN0aW9uKCl7cmV0dXJuIDchPU9iamVjdC5kZWZpbmVQcm9wZXJ0eSh7fSwiYSIse2dldDpmdW5jdGlvbigpe3JldHVybiA3fX0pLmF9KSl9LDE5MjM6ZnVuY3Rpb24odCxlLG4pe3ZhciByPW4oODk1NTgpLG89bigxMDU5MiksaT1yLmRvY3VtZW50LGE9byhpKSYmbyhpLmNyZWF0ZUVsZW1lbnQpO3QuZXhwb3J0cz1mdW5jdGlvbih0KXtyZXR1cm4gYT9pLmNyZWF0ZUVsZW1lbnQodCk6e319fSw0NzA5NDpmdW5jdGlvbih0KXt0LmV4cG9ydHM9e0NTU1J1bGVMaXN0OjAsQ1NTU3R5bGVEZWNsYXJhdGlvbjowLENTU1ZhbHVlTGlzdDowLENsaWVudFJlY3RMaXN0OjAsRE9NUmVjdExpc3Q6MCxET01TdHJpbmdMaXN0OjAsRE9NVG9rZW5MaXN0OjEsRGF0YVRyYW5zZmVySXRlbUxpc3Q6MCxGaWxlTGlzdDowLEhUTUxBbGxDb2xsZWN0aW9uOjAsSFRNTENvbGxlY3Rpb246MCxIVE1MRm9ybUVsZW1lbnQ6MCxIVE1MU2VsZWN0RWxlbWVudDowLE1lZGlhTGlzdDowLE1pbWVUeXBlQXJyYXk6MCxOYW1lZE5vZGVNYXA6MCxOb2RlTGlzdDoxLFBhaW50UmVxdWVzdExpc3Q6MCxQbHVnaW46MCxQbHVnaW5BcnJheTowLFNWR0xlbmd0aExpc3Q6MCxTVkdOdW1iZXJMaXN0OjAsU1ZHUGF0aFNlZ0xpc3Q6MCxTVkdQb2ludExpc3Q6MCxTVkdTdHJpbmdMaXN0OjAsU1ZHVHJhbnNmb3JtTGlzdDowLFNvdXJjZUJ1ZmZlckxpc3Q6MCxTdHlsZVNoZWV0TGlzdDowLFRleHRUcmFja0N1ZUxpc3Q6MCxUZXh0VHJhY2tMaXN0OjAsVG91Y2hMaXN0OjB9fSw1OTEzNTpmdW5jdGlvbih0KXt0LmV4cG9ydHM9WyJjb25zdHJ1Y3RvciIsImhhc093blByb3BlcnR5IiwiaXNQcm90b3R5cGVPZiIsInByb3BlcnR5SXNFbnVtZXJhYmxlIiwidG9Mb2NhbGVTdHJpbmciLCJ0b1N0cmluZyIsInZhbHVlT2YiXX0sMTQwNDQ6ZnVuY3Rpb24odCxlLG4pe3ZhciByPW4oODk1NTgpLG89big5NzI1NykuZixpPW4oNjY5NzEpLGE9big5MjkxMyksYz1uKDk4MjY5KSxzPW4oOTk2MjUpLHU9big2NDUwNCk7dC5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7dmFyIG4sbCxmLGQscCxoPXQudGFyZ2V0LHY9dC5nbG9iYWwsZz10LnN0YXQ7aWYobj12P3I6Zz9yW2hdfHxjKGgse30pOihyW2hdfHx7fSkucHJvdG90eXBlKWZvcihsIGluIGUpe2lmKGQ9ZVtsXSxmPXQubm9UYXJnZXRHZXQ/KHA9byhuLGwpKSYmcC52YWx1ZTpuW2xdLCF1KHY/bDpoKyhnPyIuIjoiIyIpK2wsdC5mb3JjZWQpJiZ2b2lkIDAhPT1mKXtpZih0eXBlb2YgZD09dHlwZW9mIGYpY29udGludWU7cyhkLGYpfSh0LnNoYW18fGYmJmYuc2hhbSkmJmkoZCwic2hhbSIsITApLGEobixsLGQsdCl9fX0sMzIxODc6ZnVuY3Rpb24odCl7dC5leHBvcnRzPWZ1bmN0aW9uKHQpe3RyeXtyZXR1cm4hIXQoKX1jYXRjaCh0KXtyZXR1cm4hMH19fSwzNTg2MDpmdW5jdGlvbih0LGUsbil7InVzZSBzdHJpY3QiO3ZhciByPW4oNjY5NzEpLG89big5MjkxMyksaT1uKDMyMTg3KSxhPW4oMjM3MjQpLGM9bigzODU5OCkscz1hKCJzcGVjaWVzIiksdT0haSgoZnVuY3Rpb24oKXt2YXIgdD0vLi87cmV0dXJuIHQuZXhlYz1mdW5jdGlvbigpe3ZhciB0PVtdO3JldHVybiB0Lmdyb3Vwcz17YToiNyJ9LHR9LCI3IiE9PSIiLnJlcGxhY2UodCwiJDxhPiIpfSkpLGw9IWkoKGZ1bmN0aW9uKCl7dmFyIHQ9Lyg/OikvLGU9dC5leGVjO3QuZXhlYz1mdW5jdGlvbigpe3JldHVybiBlLmFwcGx5KHRoaXMsYXJndW1lbnRzKX07dmFyIG49ImFiIi5zcGxpdCh0KTtyZXR1cm4gMiE9PW4ubGVuZ3RofHwiYSIhPT1uWzBdfHwiYiIhPT1uWzFdfSkpO3QuZXhwb3J0cz1mdW5jdGlvbih0LGUsbixmKXt2YXIgZD1hKHQpLHA9IWkoKGZ1bmN0aW9uKCl7dmFyIGU9e307cmV0dXJuIGVbZF09ZnVuY3Rpb24oKXtyZXR1cm4gN30sNyE9IiJbdF0oZSl9KSksaD1wJiYhaSgoZnVuY3Rpb24oKXt2YXIgZT0hMSxuPS9hLztyZXR1cm4ic3BsaXQiPT09dCYmKChuPXt9KS5jb25zdHJ1Y3Rvcj17fSxuLmNvbnN0cnVjdG9yW3NdPWZ1bmN0aW9uKCl7cmV0dXJuIG59LG4uZmxhZ3M9IiIsbltkXT0vLi9bZF0pLG4uZXhlYz1mdW5jdGlvbigpe3JldHVybiBlPSEwLG51bGx9LG5bZF0oIiIpLCFlfSkpO2lmKCFwfHwhaHx8InJlcGxhY2UiPT09dCYmIXV8fCJzcGxpdCI9PT10JiYhbCl7dmFyIHY9Ly4vW2RdLGc9bihkLCIiW3RdLChmdW5jdGlvbih0LGUsbixyLG8pe3JldHVybiBlLmV4ZWM9PT1jP3AmJiFvP3tkb25lOiEwLHZhbHVlOnYuY2FsbChlLG4scil9Ontkb25lOiEwLHZhbHVlOnQuY2FsbChuLGUscil9Ontkb25lOiExfX0pKSx5PWdbMF0sbT1nWzFdO28oU3RyaW5nLnByb3RvdHlwZSx0LHkpLG8oUmVnRXhwLnByb3RvdHlwZSxkLDI9PWU/ZnVuY3Rpb24odCxlKXtyZXR1cm4gbS5jYWxsKHQsdGhpcyxlKX06ZnVuY3Rpb24odCl7cmV0dXJuIG0uY2FsbCh0LHRoaXMpfSksZiYmcihSZWdFeHAucHJvdG90eXBlW2RdLCJzaGFtIiwhMCl9fX0sODA2NjU6ZnVuY3Rpb24odCxlLG4peyJ1c2Ugc3RyaWN0Ijt2YXIgcj1uKDYxOTkpLG89bigyNzg4NCksaT1uKDQ2MTMwKSxhPWZ1bmN0aW9uKHQsZSxuLGMscyx1LGwsZil7Zm9yKHZhciBkLHA9cyxoPTAsdj0hIWwmJmkobCxmLDMpO2g8Yzspe2lmKGggaW4gbil7aWYoZD12P3YobltoXSxoLGUpOm5baF0sdT4wJiZyKGQpKXA9YSh0LGUsZCxvKGQubGVuZ3RoKSxwLHUtMSktMTtlbHNle2lmKHA+PTkwMDcxOTkyNTQ3NDA5OTEpdGhyb3cgVHlwZUVycm9yKCJFeGNlZWQgdGhlIGFjY2VwdGFibGUgYXJyYXkgbGVuZ3RoIik7dFtwXT1kfXArK31oKyt9cmV0dXJuIHB9O3QuZXhwb3J0cz1hfSw0NzgxMjpmdW5jdGlvbih0LGUsbil7InVzZSBzdHJpY3QiO3ZhciByPW4oNjU2NzIpLG89big4OTU1OCksaT1uKDMyMTg3KTt0LmV4cG9ydHM9cnx8IWkoKGZ1bmN0aW9uKCl7dmFyIHQ9TWF0aC5yYW5kb20oKTtfX2RlZmluZVNldHRlcl9fLmNhbGwobnVsbCx0LChmdW5jdGlvbigpe30pKSxkZWxldGUgb1t0XX0pKX0sNTIxMjk6ZnVuY3Rpb24odCxlLG4pe3ZhciByPW4oMzIxODcpO3QuZXhwb3J0cz1mdW5jdGlvbih0KXtyZXR1cm4gcigoZnVuY3Rpb24oKXt2YXIgZT0iIlt0XSgnIicpO3JldHVybiBlIT09ZS50b0xvd2VyQ2FzZSgpfHxlLnNwbGl0KCciJykubGVuZ3RoPjN9KSl9fSw4NDc1NDpmdW5jdGlvbih0LGUsbil7dmFyIHI9bigzMjE4Nyksbz1uKDUwMDU1KTt0LmV4cG9ydHM9ZnVuY3Rpb24odCl7cmV0dXJuIHIoKGZ1bmN0aW9uKCl7cmV0dXJuISFvW3RdKCl8fCLigIvCheGgjiIhPSLigIvCheGgjiJbdF0oKXx8b1t0XS5uYW1lIT09dH0pKX19LDc0NTIwOmZ1bmN0aW9uKHQsZSxuKXt2YXIgcj1uKDMyMTg3KTt0LmV4cG9ydHM9IXIoKGZ1bmN0aW9uKCl7cmV0dXJuIE9iamVjdC5pc0V4dGVuc2libGUoT2JqZWN0LnByZXZlbnRFeHRlbnNpb25zKHt9KSl9KSl9LDczNzM5OmZ1bmN0aW9uKHQsZSxuKXsidXNlIHN0cmljdCI7dmFyIHI9big4NjQ3MCksbz1uKDEwNTkyKSxpPVtdLnNsaWNlLGE9e30sYz1mdW5jdGlvbih0LGUsbil7aWYoIShlIGluIGEpKXtmb3IodmFyIHI9W10sbz0wO288ZTtvKyspcltvXT0iYVsiK28rIl0iO2FbZV09RnVuY3Rpb24oIkMsYSIsInJldHVybiBuZXcgQygiK3Iuam9pbigiLCIpKyIpIil9cmV0dXJuIGFbZV0odCxuKX07dC5leHBvcnRzPUZ1bmN0aW9uLmJpbmR8fGZ1bmN0aW9uKHQpe3ZhciBlPXIodGhpcyksbj1pLmNhbGwoYXJndW1lbnRzLDEpLGE9ZnVuY3Rpb24oKXt2YXIgcj1uLmNvbmNhdChpLmNhbGwoYXJndW1lbnRzKSk7cmV0dXJuIHRoaXMgaW5zdGFuY2VvZiBhP2MoZSxyLmxlbmd0aCxyKTplLmFwcGx5KHQscil9O3JldHVybiBvKGUucHJvdG90eXBlKSYmKGEucHJvdG90eXBlPWUucHJvdG90eXBlKSxhfX0sNjY5MjA6ZnVuY3Rpb24odCxlLG4pe3ZhciByPW4oNzM4OTApLG89bigyMzcyNCkoImFzeW5jSXRlcmF0b3IiKTt0LmV4cG9ydHM9ZnVuY3Rpb24odCl7dmFyIGU9dFtvXTtyZXR1cm4gdm9pZCAwPT09ZT9yKHQpOmV9fSw3NzAxOmZ1bmN0aW9uKHQsZSxuKXt2YXIgcj1uKDU2MjM4KSxvPW4oODk1NTgpLGk9ZnVuY3Rpb24odCl7cmV0dXJuImZ1bmN0aW9uIj09dHlwZW9mIHQ/dDp2b2lkIDB9O3QuZXhwb3J0cz1mdW5jdGlvbih0LGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPDI/aShyW3RdKXx8aShvW3RdKTpyW3RdJiZyW3RdW2VdfHxvW3RdJiZvW3RdW2VdfX0sNzM4OTA6ZnVuY3Rpb24odCxlLG4pe3ZhciByPW4oNTk1OTEpLG89bigxMjM1KSxpPW4oMjM3MjQpKCJpdGVyYXRvciIpO3QuZXhwb3J0cz1mdW5jdGlvbih0KXtpZihudWxsIT10KXJldHVybiB0W2ldfHx0WyJAQGl0ZXJhdG9yIl18fG9bcih0KV19fSwzMTA3NDpmdW5jdGlvbih0LGUsbil7dmFyIHI9big4NzU3OSksbz1uKDczODkwKTt0LmV4cG9ydHM9ZnVuY3Rpb24odCl7dmFyIGU9byh0KTtpZigiZnVuY3Rpb24iIT10eXBlb2YgZSl0aHJvdyBUeXBlRXJyb3IoU3RyaW5nKHQpKyIgaXMgbm90IGl0ZXJhYmxlIik7cmV0dXJuIHIoZS5jYWxsKHQpKX19LDQxOTg5OmZ1bmN0aW9uKHQsZSxuKXt2YXIgcj1uKDY1NjcyKSxvPW4oMzEwNzQpO3QuZXhwb3J0cz1yP286ZnVuY3Rpb24odCl7cmV0dXJuIE1hcC5wcm90b3R5cGUuZW50cmllcy5jYWxsKHQpfX0sNDE0NzU6ZnVuY3Rpb24odCxlLG4pe3ZhciByPW4oNjU2NzIpLG89bigzMTA3NCk7dC5leHBvcnRzPXI/bzpmdW5jdGlvbih0KXtyZXR1cm4gU2V0LnByb3RvdHlwZS52YWx1ZXMuY2FsbCh0KX19LDg5NTU4OmZ1bmN0aW9uKHQsZSxuKXt2YXIgcj1mdW5jdGlvbih0KXtyZXR1cm4gdCYmdC5NYXRoPT1NYXRoJiZ0fTt0LmV4cG9ydHM9cigib2JqZWN0Ij09dHlwZW9mIGdsb2JhbFRoaXMmJmdsb2JhbFRoaXMpfHxyKCJvYmplY3QiPT10eXBlb2Ygd2luZG93JiZ3aW5kb3cpfHxyKCJvYmplY3QiPT10eXBlb2Ygc2VsZiYmc2VsZil8fHIoIm9iamVjdCI9PXR5cGVvZiBuLmcmJm4uZyl8fEZ1bmN0aW9uKCJyZXR1cm4gdGhpcyIpKCl9LDc2Mjk4OmZ1bmN0aW9uKHQpe3ZhciBlPXt9Lmhhc093blByb3BlcnR5O3QuZXhwb3J0cz1mdW5jdGlvbih0LG4pe3JldHVybiBlLmNhbGwodCxuKX19LDIzMDcwOmZ1bmN0aW9uKHQpe3QuZXhwb3J0cz17fX0sODM2MjA6ZnVuY3Rpb24odCxlLG4pe3ZhciByPW4oODk1NTgpO3QuZXhwb3J0cz1mdW5jdGlvbih0LGUpe3ZhciBuPXIuY29uc29sZTtuJiZuLmVycm9yJiYoMT09PWFyZ3VtZW50cy5sZW5ndGg/bi5lcnJvcih0KTpuLmVycm9yKHQsZSkpfX0sNTE1NzE6ZnVuY3Rpb24odCxlLG4pe3ZhciByPW4oNzcwMSk7dC5leHBvcnRzPXIoImRvY3VtZW50IiwiZG9jdW1lbnRFbGVtZW50Iil9LDYyNzk5OmZ1bmN0aW9uKHQsZSxuKXt2YXIgcj1uKDYyNTU2KSxvPW4oMzIxODcpLGk9bigxOTIzKTt0LmV4cG9ydHM9IXImJiFvKChmdW5jdGlvbigpe3JldHVybiA3IT1PYmplY3QuZGVmaW5lUHJvcGVydHkoaSgiZGl2IiksImEiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gN319KS5hfSkpfSw5MDcyNTpmdW5jdGlvbih0KXt2YXIgZT0xLzAsbj1NYXRoLmFicyxyPU1hdGgucG93LG89TWF0aC5mbG9vcixpPU1hdGgubG9nLGE9TWF0aC5MTjI7dC5leHBvcnRzPXtwYWNrOmZ1bmN0aW9uKHQsYyxzKXt2YXIgdSxsLGYsZD1uZXcgQXJyYXkocykscD04KnMtYy0xLGg9KDE8PHApLTEsdj1oPj4xLGc9MjM9PT1jP3IoMiwtMjQpLXIoMiwtNzcpOjAseT10PDB8fDA9PT10JiYxL3Q8MD8xOjAsbT0wO2ZvcigodD1uKHQpKSE9dHx8dD09PWU/KGw9dCE9dD8xOjAsdT1oKToodT1vKGkodCkvYSksdCooZj1yKDIsLXUpKTwxJiYodS0tLGYqPTIpLCh0Kz11K3Y+PTE/Zy9mOmcqcigyLDEtdikpKmY+PTImJih1KyssZi89MiksdSt2Pj1oPyhsPTAsdT1oKTp1K3Y+PTE/KGw9KHQqZi0xKSpyKDIsYyksdSs9dik6KGw9dCpyKDIsdi0xKSpyKDIsYyksdT0wKSk7Yz49ODtkW20rK109MjU1JmwsbC89MjU2LGMtPTgpO2Zvcih1PXU8PGN8bCxwKz1jO3A+MDtkW20rK109MjU1JnUsdS89MjU2LHAtPTgpO3JldHVybiBkWy0tbV18PTEyOCp5LGR9LHVucGFjazpmdW5jdGlvbih0LG4pe3ZhciBvLGk9dC5sZW5ndGgsYT04Kmktbi0xLGM9KDE8PGEpLTEscz1jPj4xLHU9YS03LGw9aS0xLGY9dFtsLS1dLGQ9MTI3JmY7Zm9yKGY+Pj03O3U+MDtkPTI1NipkK3RbbF0sbC0tLHUtPTgpO2ZvcihvPWQmKDE8PC11KS0xLGQ+Pj0tdSx1Kz1uO3U+MDtvPTI1NipvK3RbbF0sbC0tLHUtPTgpO2lmKDA9PT1kKWQ9MS1zO2Vsc2V7aWYoZD09PWMpcmV0dXJuIG8/TmFOOmY/LTEvMDplO28rPXIoMixuKSxkLT1zfXJldHVybihmPy0xOjEpKm8qcigyLGQtbil9fX0sMjQ5ODpmdW5jdGlvbih0LGUsbil7dmFyIHI9bigzMjE4Nyksbz1uKDI0NTk0KSxpPSIiLnNwbGl0O3QuZXhwb3J0cz1yKChmdW5jdGlvbigpe3JldHVybiFPYmplY3QoInoiKS5wcm9wZXJ0eUlzRW51bWVyYWJsZSgwKX0pKT9mdW5jdGlvbih0KXtyZXR1cm4iU3RyaW5nIj09byh0KT9pLmNhbGwodCwiIik6T2JqZWN0KHQpfTpPYmplY3R9LDMwMjcyOmZ1bmN0aW9uKHQsZSxuKXt2YXIgcj1uKDEwNTkyKSxvPW4oNzE4NDIpO3QuZXhwb3J0cz1mdW5jdGlvbih0LGUsbil7dmFyIGksYTtyZXR1cm4gbyYmImZ1bmN0aW9uIj09dHlwZW9mKGk9ZS5jb25zdHJ1Y3RvcikmJmkhPT1uJiZyKGE9aS5wcm90b3R5cGUpJiZhIT09bi5wcm90b3R5cGUmJm8odCxhKSx0fX0sNzY3NzM6ZnVuY3Rpb24odCxlLG4pe3ZhciByPW4oMzQ3NDEpLG89RnVuY3Rpb24udG9TdHJpbmc7ImZ1bmN0aW9uIiE9dHlwZW9mIHIuaW5zcGVjdFNvdXJjZSYmKHIuaW5zcGVjdFNvdXJjZT1mdW5jdGlvbih0KXtyZXR1cm4gby5jYWxsKHQpfSksdC5leHBvcnRzPXIuaW5zcGVjdFNvdXJjZX0sOTYwMzpmdW5jdGlvbih0LGUsbil7dmFyIHI9bigyMzA3MCksbz1uKDEwNTkyKSxpPW4oNzYyOTgpLGE9bigzNzYyMCkuZixjPW4oNjcyOSkscz1uKDc0NTIwKSx1PWMoIm1ldGEiKSxsPTAsZj1PYmplY3QuaXNFeHRlbnNpYmxlfHxmdW5jdGlvbigpe3JldHVybiEwfSxkPWZ1bmN0aW9uKHQpe2EodCx1LHt2YWx1ZTp7b2JqZWN0SUQ6Ik8iKyArK2wsd2Vha0RhdGE6e319fSl9LHA9dC5leHBvcnRzPXtSRVFVSVJFRDohMSxmYXN0S2V5OmZ1bmN0aW9uKHQsZSl7aWYoIW8odCkpcmV0dXJuInN5bWJvbCI9PXR5cGVvZiB0P3Q6KCJzdHJpbmciPT10eXBlb2YgdD8iUyI6IlAiKSt0O2lmKCFpKHQsdSkpe2lmKCFmKHQpKXJldHVybiJGIjtpZighZSlyZXR1cm4iRSI7ZCh0KX1yZXR1cm4gdFt1XS5vYmplY3RJRH0sZ2V0V2Vha0RhdGE6ZnVuY3Rpb24odCxlKXtpZighaSh0LHUpKXtpZighZih0KSlyZXR1cm4hMDtpZighZSlyZXR1cm4hMTtkKHQpfXJldHVybiB0W3VdLndlYWtEYXRhfSxvbkZyZWV6ZTpmdW5jdGlvbih0KXtyZXR1cm4gcyYmcC5SRVFVSVJFRCYmZih0KSYmIWkodCx1KSYmZCh0KSx0fX07clt1XT0hMH0sODk4Mjc6ZnVuY3Rpb24odCxlLG4pe3ZhciByLG8saSxhPW4oMTk1OTEpLGM9big4OTU1OCkscz1uKDEwNTkyKSx1PW4oNjY5NzEpLGw9big3NjI5OCksZj1uKDgzMTk3KSxkPW4oMjMwNzApLHA9Yy5XZWFrTWFwO2lmKGEpe3ZhciBoPW5ldyBwLHY9aC5nZXQsZz1oLmhhcyx5PWguc2V0O3I9ZnVuY3Rpb24odCxlKXtyZXR1cm4geS5jYWxsKGgsdCxlKSxlfSxvPWZ1bmN0aW9uKHQpe3JldHVybiB2LmNhbGwoaCx0KXx8e319LGk9ZnVuY3Rpb24odCl7cmV0dXJuIGcuY2FsbChoLHQpfX1lbHNle3ZhciBtPWYoInN0YXRlIik7ZFttXT0hMCxyPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHUodCxtLGUpLGV9LG89ZnVuY3Rpb24odCl7cmV0dXJuIGwodCxtKT90W21dOnt9fSxpPWZ1bmN0aW9uKHQpe3JldHVybiBsKHQsbSl9fXQuZXhwb3J0cz17c2V0OnIsZ2V0Om8saGFzOmksZW5mb3JjZTpmdW5jdGlvbih0KXtyZXR1cm4gaSh0KT9vKHQpOnIodCx7fSl9LGdldHRlckZvcjpmdW5jdGlvbih0KXtyZXR1cm4gZnVuY3Rpb24oZSl7dmFyIG47aWYoIXMoZSl8fChuPW8oZSkpLnR5cGUhPT10KXRocm93IFR5cGVFcnJvcigiSW5jb21wYXRpYmxlIHJlY2VpdmVyLCAiK3QrIiByZXF1aXJlZCIpO3JldHVybiBufX19fSw0NDk4NDpmdW5jdGlvbih0LGUsbil7dmFyIHI9bigyMzcyNCksbz1uKDEyMzUpLGk9cigiaXRlcmF0b3IiKSxhPUFycmF5LnByb3RvdHlwZTt0LmV4cG9ydHM9ZnVuY3Rpb24odCl7cmV0dXJuIHZvaWQgMCE9PXQmJihvLkFycmF5PT09dHx8YVtpXT09PXQpfX0sNjE5OTpmdW5jdGlvbih0LGUsbil7dmFyIHI9bigyNDU5NCk7dC5leHBvcnRzPUFycmF5LmlzQXJyYXl8fGZ1bmN0aW9uKHQpe3JldHVybiJBcnJheSI9PXIodCl9fSw2NDUwNDpmdW5jdGlvbih0LGUsbil7dmFyIHI9bigzMjE4Nyksbz0vI3xcLnByb3RvdHlwZVwuLyxpPWZ1bmN0aW9uKHQsZSl7dmFyIG49Y1thKHQpXTtyZXR1cm4gbj09dXx8biE9cyYmKCJmdW5jdGlvbiI9PXR5cGVvZiBlP3IoZSk6ISFlKX0sYT1pLm5vcm1hbGl6ZT1mdW5jdGlvbih0KXtyZXR1cm4gU3RyaW5nKHQpLnJlcGxhY2UobywiLiIpLnRvTG93ZXJDYXNlKCl9LGM9aS5kYXRhPXt9LHM9aS5OQVRJVkU9Ik4iLHU9aS5QT0xZRklMTD0iUCI7dC5leHBvcnRzPWl9LDM4MjU3OmZ1bmN0aW9uKHQsZSxuKXt2YXIgcj1uKDEwNTkyKSxvPU1hdGguZmxvb3I7dC5leHBvcnRzPWZ1bmN0aW9uKHQpe3JldHVybiFyKHQpJiZpc0Zpbml0ZSh0KSYmbyh0KT09PXR9fSwyMTIzMTpmdW5jdGlvbih0LGUsbil7dmFyIHI9bigzOTQ3Nik7dC5leHBvcnRzPS8oaXBob25lfGlwb2R8aXBhZCkuKmFwcGxld2Via2l0L2kudGVzdChyKX0sMTA1OTI6ZnVuY3Rpb24odCl7dC5leHBvcnRzPWZ1bmN0aW9uKHQpe3JldHVybiJvYmplY3QiPT10eXBlb2YgdD9udWxsIT09dDoiZnVuY3Rpb24iPT10eXBlb2YgdH19LDY1NjcyOmZ1bmN0aW9uKHQpe3QuZXhwb3J0cz0hMX0sNDMyMjM6ZnVuY3Rpb24odCxlLG4pe3ZhciByPW4oMTA1OTIpLG89bigyNDU5NCksaT1uKDIzNzI0KSgibWF0Y2giKTt0LmV4cG9ydHM9ZnVuY3Rpb24odCl7dmFyIGU7cmV0dXJuIHIodCkmJih2b2lkIDAhPT0oZT10W2ldKT8hIWU6IlJlZ0V4cCI9PW8odCkpfX0sNDEzMzQ6ZnVuY3Rpb24odCxlLG4pe3ZhciByPW4oODc1NzkpLG89big0NDk4NCksaT1uKDI3ODg0KSxhPW4oNDYxMzApLGM9big3Mzg5MCkscz1uKDEyMjc4KSx1PWZ1bmN0aW9uKHQsZSl7dGhpcy5zdG9wcGVkPXQsdGhpcy5yZXN1bHQ9ZX07KHQuZXhwb3J0cz1mdW5jdGlvbih0LGUsbixsLGYpe3ZhciBkLHAsaCx2LGcseSxtLGI9YShlLG4sbD8yOjEpO2lmKGYpZD10O2Vsc2V7aWYoImZ1bmN0aW9uIiE9dHlwZW9mKHA9Yyh0KSkpdGhyb3cgVHlwZUVycm9yKCJUYXJnZXQgaXMgbm90IGl0ZXJhYmxlIik7aWYobyhwKSl7Zm9yKGg9MCx2PWkodC5sZW5ndGgpO3Y+aDtoKyspaWYoKGc9bD9iKHIobT10W2hdKVswXSxtWzFdKTpiKHRbaF0pKSYmZyBpbnN0YW5jZW9mIHUpcmV0dXJuIGc7cmV0dXJuIG5ldyB1KCExKX1kPXAuY2FsbCh0KX1mb3IoeT1kLm5leHQ7IShtPXkuY2FsbChkKSkuZG9uZTspaWYoIm9iamVjdCI9PXR5cGVvZihnPXMoZCxiLG0udmFsdWUsbCkpJiZnJiZnIGluc3RhbmNlb2YgdSlyZXR1cm4gZztyZXR1cm4gbmV3IHUoITEpfSkuc3RvcD1mdW5jdGlvbih0KXtyZXR1cm4gbmV3IHUoITAsdCl9fSw2NDE3NjpmdW5jdGlvbih0LGUsbil7InVzZSBzdHJpY3QiO3ZhciByLG8saSxhPW4oNjQ5NjUpLGM9big2Njk3MSkscz1uKDc2Mjk4KSx1PW4oMjM3MjQpLGw9big2NTY3MiksZj11KCJpdGVyYXRvciIpLGQ9ITE7W10ua2V5cyYmKCJuZXh0ImluKGk9W10ua2V5cygpKT8obz1hKGEoaSkpKSE9PU9iamVjdC5wcm90b3R5cGUmJihyPW8pOmQ9ITApLG51bGw9PXImJihyPXt9KSxsfHxzKHIsZil8fGMocixmLChmdW5jdGlvbigpe3JldHVybiB0aGlzfSkpLHQuZXhwb3J0cz17SXRlcmF0b3JQcm90b3R5cGU6cixCVUdHWV9TQUZBUklfSVRFUkFUT1JTOmR9fSwxMjM1OmZ1bmN0aW9uKHQpe3QuZXhwb3J0cz17fX0sNDc5Mjc6ZnVuY3Rpb24odCxlLG4peyJ1c2Ugc3RyaWN0Ijt2YXIgcj1uKDg3NTc5KTt0LmV4cG9ydHM9ZnVuY3Rpb24odCxlKXt2YXIgbixvPXIodGhpcyksaT1hcmd1bWVudHMubGVuZ3RoPjI/YXJndW1lbnRzWzJdOnZvaWQgMDtpZigiZnVuY3Rpb24iIT10eXBlb2YgZSYmImZ1bmN0aW9uIiE9dHlwZW9mIGkpdGhyb3cgVHlwZUVycm9yKCJBdCBsZWFzdCBvbmUgY2FsbGJhY2sgcmVxdWlyZWQiKTtyZXR1cm4gby5oYXModCk/KG49by5nZXQodCksImZ1bmN0aW9uIj09dHlwZW9mIGUmJihuPWUobiksby5zZXQodCxuKSkpOiJmdW5jdGlvbiI9PXR5cGVvZiBpJiYobj1pKCksby5zZXQodCxuKSksbn19LDcyOTcwOmZ1bmN0aW9uKHQpe3ZhciBlPU1hdGguZXhwbTEsbj1NYXRoLmV4cDt0LmV4cG9ydHM9IWV8fGUoMTApPjIyMDI1LjQ2NTc5NDgwNjcxOHx8ZSgxMCk8MjIwMjUuNDY1Nzk0ODA2NzE4fHwtMmUtMTchPWUoLTJlLTE3KT9mdW5jdGlvbih0KXtyZXR1cm4gMD09KHQ9K3QpP3Q6dD4tMWUtNiYmdDwxZS02P3QrdCp0LzI6bih0KS0xfTplfSw1MzI1MTpmdW5jdGlvbih0LGUsbil7dmFyIHI9bigzODc4Nyksbz1NYXRoLmFicyxpPU1hdGgucG93LGE9aSgyLC01MiksYz1pKDIsLTIzKSxzPWkoMiwxMjcpKigyLWMpLHU9aSgyLC0xMjYpO3QuZXhwb3J0cz1NYXRoLmZyb3VuZHx8ZnVuY3Rpb24odCl7dmFyIGUsbixpPW8odCksbD1yKHQpO3JldHVybiBpPHU/bCooaS91L2MrMS9hLTEvYSkqdSpjOihuPShlPSgxK2MvYSkqaSktKGUtaSkpPnN8fG4hPW4/bCooMS8wKTpsKm59fSwyMTkzMjpmdW5jdGlvbih0KXt2YXIgZT1NYXRoLmxvZzt0LmV4cG9ydHM9TWF0aC5sb2cxcHx8ZnVuY3Rpb24odCl7cmV0dXJuKHQ9K3QpPi0xZS04JiZ0PDFlLTg/dC10KnQvMjplKDErdCl9fSw3NzQyOmZ1bmN0aW9uKHQpe3QuZXhwb3J0cz1NYXRoLnNjYWxlfHxmdW5jdGlvbih0LGUsbixyLG8pe3JldHVybiAwPT09YXJndW1lbnRzLmxlbmd0aHx8dCE9dHx8ZSE9ZXx8biE9bnx8ciE9cnx8byE9bz9OYU46dD09PTEvMHx8dD09PS0xLzA/dDoodC1lKSooby1yKS8obi1lKStyfX0sMzg3ODc6ZnVuY3Rpb24odCl7dC5leHBvcnRzPU1hdGguc2lnbnx8ZnVuY3Rpb24odCl7cmV0dXJuIDA9PSh0PSt0KXx8dCE9dD90OnQ8MD8tMToxfX0sNjU1NTU6ZnVuY3Rpb24odCxlLG4pe3ZhciByLG8saSxhLGMscyx1LGwsZj1uKDg5NTU4KSxkPW4oOTcyNTcpLmYscD1uKDI0NTk0KSxoPW4oMjE3NDQpLnNldCx2PW4oMjEyMzEpLGc9Zi5NdXRhdGlvbk9ic2VydmVyfHxmLldlYktpdE11dGF0aW9uT2JzZXJ2ZXIseT1mLnByb2Nlc3MsbT1mLlByb21pc2UsYj0icHJvY2VzcyI9PXAoeSkseD1kKGYsInF1ZXVlTWljcm90YXNrIiksdz14JiZ4LnZhbHVlO3d8fChyPWZ1bmN0aW9uKCl7dmFyIHQsZTtmb3IoYiYmKHQ9eS5kb21haW4pJiZ0LmV4aXQoKTtvOyl7ZT1vLmZuLG89by5uZXh0O3RyeXtlKCl9Y2F0Y2godCl7dGhyb3cgbz9hKCk6aT12b2lkIDAsdH19aT12b2lkIDAsdCYmdC5lbnRlcigpfSxiP2E9ZnVuY3Rpb24oKXt5Lm5leHRUaWNrKHIpfTpnJiYhdj8oYz0hMCxzPWRvY3VtZW50LmNyZWF0ZVRleHROb2RlKCIiKSxuZXcgZyhyKS5vYnNlcnZlKHMse2NoYXJhY3RlckRhdGE6ITB9KSxhPWZ1bmN0aW9uKCl7cy5kYXRhPWM9IWN9KTptJiZtLnJlc29sdmU/KHU9bS5yZXNvbHZlKHZvaWQgMCksbD11LnRoZW4sYT1mdW5jdGlvbigpe2wuY2FsbCh1LHIpfSk6YT1mdW5jdGlvbigpe2guY2FsbChmLHIpfSksdC5leHBvcnRzPXd8fGZ1bmN0aW9uKHQpe3ZhciBlPXtmbjp0LG5leHQ6dm9pZCAwfTtpJiYoaS5uZXh0PWUpLG98fChvPWUsYSgpKSxpPWV9fSwzOTQ1NzpmdW5jdGlvbih0LGUsbil7dmFyIHI9big4OTU1OCk7dC5leHBvcnRzPXIuUHJvbWlzZX0sOTAxNDpmdW5jdGlvbih0LGUsbil7dmFyIHI9bigzMjE4Nyk7dC5leHBvcnRzPSEhT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyYmIXIoKGZ1bmN0aW9uKCl7cmV0dXJuIVN0cmluZyhTeW1ib2woKSl9KSl9LDU3NTk3OmZ1bmN0aW9uKHQsZSxuKXt2YXIgcj1uKDMyMTg3KSxvPW4oMjM3MjQpLGk9big2NTY3MiksYT1vKCJpdGVyYXRvciIpO3QuZXhwb3J0cz0hcigoZnVuY3Rpb24oKXt2YXIgdD1uZXcgVVJMKCJiP2E9MSZiPTImYz0zIiwiaHR0cDovL2EiKSxlPXQuc2VhcmNoUGFyYW1zLG49IiI7cmV0dXJuIHQucGF0aG5hbWU9ImMlMjBkIixlLmZvckVhY2goKGZ1bmN0aW9uKHQscil7ZS5kZWxldGUoImIiKSxuKz1yK3R9KSksaSYmIXQudG9KU09OfHwhZS5zb3J0fHwiaHR0cDovL2EvYyUyMGQ/YT0xJmM9MyIhPT10LmhyZWZ8fCIzIiE9PWUuZ2V0KCJjIil8fCJhPTEiIT09U3RyaW5nKG5ldyBVUkxTZWFyY2hQYXJhbXMoIj9hPTEiKSl8fCFlW2FdfHwiYSIhPT1uZXcgVVJMKCJodHRwczovL2FAYiIpLnVzZXJuYW1lfHwiYiIhPT1uZXcgVVJMU2VhcmNoUGFyYW1zKG5ldyBVUkxTZWFyY2hQYXJhbXMoImE9YiIpKS5nZXQoImEiKXx8InhuLS1lMWF5YmMiIT09bmV3IFVSTCgiaHR0cDovL9GC0LXRgdGCIikuaG9zdHx8IiMlRDAlQjEiIT09bmV3IFVSTCgiaHR0cDovL2Ej0LEiKS5oYXNofHwiYTFjMyIhPT1ufHwieCIhPT1uZXcgVVJMKCJodHRwOi8veCIsdm9pZCAwKS5ob3N0fSkpfSwxOTU5MTpmdW5jdGlvbih0LGUsbil7dmFyIHI9big4OTU1OCksbz1uKDc2NzczKSxpPXIuV2Vha01hcDt0LmV4cG9ydHM9ImZ1bmN0aW9uIj09dHlwZW9mIGkmJi9uYXRpdmUgY29kZS8udGVzdChvKGkpKX0sODMwODM6ZnVuY3Rpb24odCxlLG4peyJ1c2Ugc3RyaWN0Ijt2YXIgcj1uKDg2NDcwKSxvPWZ1bmN0aW9uKHQpe3ZhciBlLG47dGhpcy5wcm9taXNlPW5ldyB0KChmdW5jdGlvbih0LHIpe2lmKHZvaWQgMCE9PWV8fHZvaWQgMCE9PW4pdGhyb3cgVHlwZUVycm9yKCJCYWQgUHJvbWlzZSBjb25zdHJ1Y3RvciIpO2U9dCxuPXJ9KSksdGhpcy5yZXNvbHZlPXIoZSksdGhpcy5yZWplY3Q9cihuKX07dC5leHBvcnRzLmY9ZnVuY3Rpb24odCl7cmV0dXJuIG5ldyBvKHQpfX0sOTkzNDY6ZnVuY3Rpb24odCxlLG4pe3ZhciByPW4oNDMyMjMpO3QuZXhwb3J0cz1mdW5jdGlvbih0KXtpZihyKHQpKXRocm93IFR5cGVFcnJvcigiVGhlIG1ldGhvZCBkb2Vzbid0IGFjY2VwdCByZWd1bGFyIGV4cHJlc3Npb25zIik7cmV0dXJuIHR9fSw4OTU0MjpmdW5jdGlvbih0LGUsbil7dmFyIHI9big4OTU1OCkuaXNGaW5pdGU7dC5leHBvcnRzPU51bWJlci5pc0Zpbml0ZXx8ZnVuY3Rpb24odCl7cmV0dXJuIm51bWJlciI9PXR5cGVvZiB0JiZyKHQpfX0sNzg2ODU6ZnVuY3Rpb24odCxlLG4peyJ1c2Ugc3RyaWN0Ijt2YXIgcj1uKDYyNTU2KSxvPW4oMzIxODcpLGk9bigyNTUwNyksYT1uKDU2OTkxKSxjPW4oNDE2MjgpLHM9bigxOTIwOSksdT1uKDI0OTgpLGw9T2JqZWN0LmFzc2lnbixmPU9iamVjdC5kZWZpbmVQcm9wZXJ0eTt0LmV4cG9ydHM9IWx8fG8oKGZ1bmN0aW9uKCl7aWYociYmMSE9PWwoe2I6MX0sbChmKHt9LCJhIix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtmKHRoaXMsImIiLHt2YWx1ZTozLGVudW1lcmFibGU6ITF9KX19KSx7YjoyfSkpLmIpcmV0dXJuITA7dmFyIHQ9e30sZT17fSxuPVN5bWJvbCgpLG89ImFiY2RlZmdoaWprbG1ub3BxcnN0IjtyZXR1cm4gdFtuXT03LG8uc3BsaXQoIiIpLmZvckVhY2goKGZ1bmN0aW9uKHQpe2VbdF09dH0pKSw3IT1sKHt9LHQpW25dfHxpKGwoe30sZSkpLmpvaW4oIiIpIT1vfSkpP2Z1bmN0aW9uKHQsZSl7Zm9yKHZhciBuPXModCksbz1hcmd1bWVudHMubGVuZ3RoLGw9MSxmPWEuZixkPWMuZjtvPmw7KWZvcih2YXIgcCxoPXUoYXJndW1lbnRzW2wrK10pLHY9Zj9pKGgpLmNvbmNhdChmKGgpKTppKGgpLGc9di5sZW5ndGgseT0wO2c+eTspcD12W3krK10sciYmIWQuY2FsbChoLHApfHwobltwXT1oW3BdKTtyZXR1cm4gbn06bH0sNTA4Njg6ZnVuY3Rpb24odCxlLG4pe3ZhciByPW4oODc1NzkpLG89big4NjQwMSksaT1uKDU5MTM1KSxhPW4oMjMwNzApLGM9big1MTU3MSkscz1uKDE5MjMpLHU9big4MzE5NykoIklFX1BST1RPIiksbD1mdW5jdGlvbigpe30sZj1mdW5jdGlvbigpe3ZhciB0LGU9cygiaWZyYW1lIiksbj1pLmxlbmd0aDtmb3IoZS5zdHlsZS5kaXNwbGF5PSJub25lIixjLmFwcGVuZENoaWxkKGUpLGUuc3JjPVN0cmluZygiamF2YXNjcmlwdDoiKSwodD1lLmNvbnRlbnRXaW5kb3cuZG9jdW1lbnQpLm9wZW4oKSx0LndyaXRlKCI8c2NyaXB0PmRvY3VtZW50LkY9T2JqZWN0PFwvc2NyaXB0PiIpLHQuY2xvc2UoKSxmPXQuRjtuLS07KWRlbGV0ZSBmLnByb3RvdHlwZVtpW25dXTtyZXR1cm4gZigpfTt0LmV4cG9ydHM9T2JqZWN0LmNyZWF0ZXx8ZnVuY3Rpb24odCxlKXt2YXIgbjtyZXR1cm4gbnVsbCE9PXQ/KGwucHJvdG90eXBlPXIodCksbj1uZXcgbCxsLnByb3RvdHlwZT1udWxsLG5bdV09dCk6bj1mKCksdm9pZCAwPT09ZT9uOm8obixlKX0sYVt1XT0hMH0sODY0MDE6ZnVuY3Rpb24odCxlLG4pe3ZhciByPW4oNjI1NTYpLG89bigzNzYyMCksaT1uKDg3NTc5KSxhPW4oMjU1MDcpO3QuZXhwb3J0cz1yP09iamVjdC5kZWZpbmVQcm9wZXJ0aWVzOmZ1bmN0aW9uKHQsZSl7aSh0KTtmb3IodmFyIG4scj1hKGUpLGM9ci5sZW5ndGgscz0wO2M+czspby5mKHQsbj1yW3MrK10sZVtuXSk7cmV0dXJuIHR9fSwzNzYyMDpmdW5jdGlvbih0LGUsbil7dmFyIHI9big2MjU1Niksbz1uKDYyNzk5KSxpPW4oODc1NzkpLGE9big1MzQ5OCksYz1PYmplY3QuZGVmaW5lUHJvcGVydHk7ZS5mPXI/YzpmdW5jdGlvbih0LGUsbil7aWYoaSh0KSxlPWEoZSwhMCksaShuKSxvKXRyeXtyZXR1cm4gYyh0LGUsbil9Y2F0Y2godCl7fWlmKCJnZXQiaW4gbnx8InNldCJpbiBuKXRocm93IFR5cGVFcnJvcigiQWNjZXNzb3JzIG5vdCBzdXBwb3J0ZWQiKTtyZXR1cm4idmFsdWUiaW4gbiYmKHRbZV09bi52YWx1ZSksdH19LDk3MjU3OmZ1bmN0aW9uKHQsZSxuKXt2YXIgcj1uKDYyNTU2KSxvPW4oNDE2MjgpLGk9bigxNDIwOSksYT1uKDk1NzMpLGM9big1MzQ5OCkscz1uKDc2Mjk4KSx1PW4oNjI3OTkpLGw9T2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcjtlLmY9cj9sOmZ1bmN0aW9uKHQsZSl7aWYodD1hKHQpLGU9YyhlLCEwKSx1KXRyeXtyZXR1cm4gbCh0LGUpfWNhdGNoKHQpe31pZihzKHQsZSkpcmV0dXJuIGkoIW8uZi5jYWxsKHQsZSksdFtlXSl9fSwyNjkzNzpmdW5jdGlvbih0LGUsbil7dmFyIHI9big5NTczKSxvPW4oMTMzMzQpLmYsaT17fS50b1N0cmluZyxhPSJvYmplY3QiPT10eXBlb2Ygd2luZG93JiZ3aW5kb3cmJk9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzP09iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKHdpbmRvdyk6W107dC5leHBvcnRzLmY9ZnVuY3Rpb24odCl7cmV0dXJuIGEmJiJbb2JqZWN0IFdpbmRvd10iPT1pLmNhbGwodCk/ZnVuY3Rpb24odCl7dHJ5e3JldHVybiBvKHQpfWNhdGNoKHQpe3JldHVybiBhLnNsaWNlKCl9fSh0KTpvKHIodCkpfX0sMTMzMzQ6ZnVuY3Rpb24odCxlLG4pe3ZhciByPW4oNDE3Niksbz1uKDU5MTM1KS5jb25jYXQoImxlbmd0aCIsInByb3RvdHlwZSIpO2UuZj1PYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lc3x8ZnVuY3Rpb24odCl7cmV0dXJuIHIodCxvKX19LDU2OTkxOmZ1bmN0aW9uKHQsZSl7ZS5mPU9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHN9LDY0OTY1OmZ1bmN0aW9uKHQsZSxuKXt2YXIgcj1uKDc2Mjk4KSxvPW4oMTkyMDkpLGk9big4MzE5NyksYT1uKDcxNjA4KSxjPWkoIklFX1BST1RPIikscz1PYmplY3QucHJvdG90eXBlO3QuZXhwb3J0cz1hP09iamVjdC5nZXRQcm90b3R5cGVPZjpmdW5jdGlvbih0KXtyZXR1cm4gdD1vKHQpLHIodCxjKT90W2NdOiJmdW5jdGlvbiI9PXR5cGVvZiB0LmNvbnN0cnVjdG9yJiZ0IGluc3RhbmNlb2YgdC5jb25zdHJ1Y3Rvcj90LmNvbnN0cnVjdG9yLnByb3RvdHlwZTp0IGluc3RhbmNlb2YgT2JqZWN0P3M6bnVsbH19LDg2NDAzOmZ1bmN0aW9uKHQsZSxuKXsidXNlIHN0cmljdCI7dmFyIHI9big4OTgyNyksbz1uKDcxMjAxKSxpPW4oNzYyOTgpLGE9bigyNTUwNyksYz1uKDE5MjA5KSxzPSJPYmplY3QgSXRlcmF0b3IiLHU9ci5zZXQsbD1yLmdldHRlckZvcihzKTt0LmV4cG9ydHM9bygoZnVuY3Rpb24odCxlKXt2YXIgbj1jKHQpO3UodGhpcyx7dHlwZTpzLG1vZGU6ZSxvYmplY3Q6bixrZXlzOmEobiksaW5kZXg6MH0pfSksIk9iamVjdCIsKGZ1bmN0aW9uKCl7Zm9yKHZhciB0PWwodGhpcyksZT10LmtleXM7Oyl7aWYobnVsbD09PWV8fHQuaW5kZXg+PWUubGVuZ3RoKXJldHVybiB0Lm9iamVjdD10LmtleXM9bnVsbCx7dmFsdWU6dm9pZCAwLGRvbmU6ITB9O3ZhciBuPWVbdC5pbmRleCsrXSxyPXQub2JqZWN0O2lmKGkocixuKSl7c3dpdGNoKHQubW9kZSl7Y2FzZSJrZXlzIjpyZXR1cm57dmFsdWU6bixkb25lOiExfTtjYXNlInZhbHVlcyI6cmV0dXJue3ZhbHVlOnJbbl0sZG9uZTohMX19cmV0dXJue3ZhbHVlOltuLHJbbl1dLGRvbmU6ITF9fX19KSl9LDQxNzY6ZnVuY3Rpb24odCxlLG4pe3ZhciByPW4oNzYyOTgpLG89big5NTczKSxpPW4oODU4MDMpLmluZGV4T2YsYT1uKDIzMDcwKTt0LmV4cG9ydHM9ZnVuY3Rpb24odCxlKXt2YXIgbixjPW8odCkscz0wLHU9W107Zm9yKG4gaW4gYykhcihhLG4pJiZyKGMsbikmJnUucHVzaChuKTtmb3IoO2UubGVuZ3RoPnM7KXIoYyxuPWVbcysrXSkmJih+aSh1LG4pfHx1LnB1c2gobikpO3JldHVybiB1fX0sMjU1MDc6ZnVuY3Rpb24odCxlLG4pe3ZhciByPW4oNDE3Niksbz1uKDU5MTM1KTt0LmV4cG9ydHM9T2JqZWN0LmtleXN8fGZ1bmN0aW9uKHQpe3JldHVybiByKHQsbyl9fSw0MTYyODpmdW5jdGlvbih0LGUpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj17fS5wcm9wZXJ0eUlzRW51bWVyYWJsZSxyPU9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3Isbz1yJiYhbi5jYWxsKHsxOjJ9LDEpO2UuZj1vP2Z1bmN0aW9uKHQpe3ZhciBlPXIodGhpcyx0KTtyZXR1cm4hIWUmJmUuZW51bWVyYWJsZX06bn0sNzE4NDI6ZnVuY3Rpb24odCxlLG4pe3ZhciByPW4oODc1NzkpLG89big3OTg2MSk7dC5leHBvcnRzPU9iamVjdC5zZXRQcm90b3R5cGVPZnx8KCJfX3Byb3RvX18iaW57fT9mdW5jdGlvbigpe3ZhciB0LGU9ITEsbj17fTt0cnl7KHQ9T2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihPYmplY3QucHJvdG90eXBlLCJfX3Byb3RvX18iKS5zZXQpLmNhbGwobixbXSksZT1uIGluc3RhbmNlb2YgQXJyYXl9Y2F0Y2godCl7fXJldHVybiBmdW5jdGlvbihuLGkpe3JldHVybiByKG4pLG8oaSksZT90LmNhbGwobixpKTpuLl9fcHJvdG9fXz1pLG59fSgpOnZvaWQgMCl9LDM1Njc6ZnVuY3Rpb24odCxlLG4pe3ZhciByPW4oNjI1NTYpLG89bigyNTUwNyksaT1uKDk1NzMpLGE9big0MTYyOCkuZixjPWZ1bmN0aW9uKHQpe3JldHVybiBmdW5jdGlvbihlKXtmb3IodmFyIG4sYz1pKGUpLHM9byhjKSx1PXMubGVuZ3RoLGw9MCxmPVtdO3U+bDspbj1zW2wrK10sciYmIWEuY2FsbChjLG4pfHxmLnB1c2godD9bbixjW25dXTpjW25dKTtyZXR1cm4gZn19O3QuZXhwb3J0cz17ZW50cmllczpjKCEwKSx2YWx1ZXM6YyghMSl9fSwxOTc1ODpmdW5jdGlvbih0LGUsbil7InVzZSBzdHJpY3QiO3ZhciByPW4oOTA2MTMpLG89big1OTU5MSk7dC5leHBvcnRzPXI/e30udG9TdHJpbmc6ZnVuY3Rpb24oKXtyZXR1cm4iW29iamVjdCAiK28odGhpcykrIl0ifX0sMjQ0MTU6ZnVuY3Rpb24odCxlLG4pe3ZhciByPW4oNzcwMSksbz1uKDEzMzM0KSxpPW4oNTY5OTEpLGE9big4NzU3OSk7dC5leHBvcnRzPXIoIlJlZmxlY3QiLCJvd25LZXlzIil8fGZ1bmN0aW9uKHQpe3ZhciBlPW8uZihhKHQpKSxuPWkuZjtyZXR1cm4gbj9lLmNvbmNhdChuKHQpKTplfX0sMjQ0OTc6ZnVuY3Rpb24odCxlLG4pe3ZhciByPW4oODk1NTgpLG89big4MjM1MCkudHJpbSxpPW4oNTAwNTUpLGE9ci5wYXJzZUZsb2F0LGM9MS9hKGkrIi0wIikhPS0xLzA7dC5leHBvcnRzPWM/ZnVuY3Rpb24odCl7dmFyIGU9byhTdHJpbmcodCkpLG49YShlKTtyZXR1cm4gMD09PW4mJiItIj09ZS5jaGFyQXQoMCk/LTA6bn06YX0sNzg0NjpmdW5jdGlvbih0LGUsbil7dmFyIHI9big4OTU1OCksbz1uKDgyMzUwKS50cmltLGk9big1MDA1NSksYT1yLnBhcnNlSW50LGM9L15bKy1dPzBbWHhdLyxzPTghPT1hKGkrIjA4Iil8fDIyIT09YShpKyIweDE2Iik7dC5leHBvcnRzPXM/ZnVuY3Rpb24odCxlKXt2YXIgbj1vKFN0cmluZyh0KSk7cmV0dXJuIGEobixlPj4+MHx8KGMudGVzdChuKT8xNjoxMCkpfTphfSw1NjIzODpmdW5jdGlvbih0LGUsbil7dmFyIHI9big4OTU1OCk7dC5leHBvcnRzPXJ9LDMxMTU6ZnVuY3Rpb24odCl7dC5leHBvcnRzPWZ1bmN0aW9uKHQpe3RyeXtyZXR1cm57ZXJyb3I6ITEsdmFsdWU6dCgpfX1jYXRjaCh0KXtyZXR1cm57ZXJyb3I6ITAsdmFsdWU6dH19fX0sNjMxMzQ6ZnVuY3Rpb24odCxlLG4pe3ZhciByPW4oODc1NzkpLG89bigxMDU5MiksaT1uKDgzMDgzKTt0LmV4cG9ydHM9ZnVuY3Rpb24odCxlKXtpZihyKHQpLG8oZSkmJmUuY29uc3RydWN0b3I9PT10KXJldHVybiBlO3ZhciBuPWkuZih0KTtyZXR1cm4oMCxuLnJlc29sdmUpKGUpLG4ucHJvbWlzZX19LDY5OTI3OmZ1bmN0aW9uKHQpeyJ1c2Ugc3RyaWN0Ijt2YXIgZT0yMTQ3NDgzNjQ3LG49L1teXDAtXHUwMDdFXS8scj0vWy5cdTMwMDJcdUZGMEVcdUZGNjFdL2csbz0iT3ZlcmZsb3c6IGlucHV0IG5lZWRzIHdpZGVyIGludGVnZXJzIHRvIHByb2Nlc3MiLGk9TWF0aC5mbG9vcixhPVN0cmluZy5mcm9tQ2hhckNvZGUsYz1mdW5jdGlvbih0KXtyZXR1cm4gdCsyMis3NSoodDwyNil9LHM9ZnVuY3Rpb24odCxlLG4pe3ZhciByPTA7Zm9yKHQ9bj9pKHQvNzAwKTp0Pj4xLHQrPWkodC9lKTt0PjQ1NTtyKz0zNil0PWkodC8zNSk7cmV0dXJuIGkociszNip0Lyh0KzM4KSl9LHU9ZnVuY3Rpb24odCl7dmFyIG49W107dD1mdW5jdGlvbih0KXtmb3IodmFyIGU9W10sbj0wLHI9dC5sZW5ndGg7bjxyOyl7dmFyIG89dC5jaGFyQ29kZUF0KG4rKyk7aWYobz49NTUyOTYmJm88PTU2MzE5JiZuPHIpe3ZhciBpPXQuY2hhckNvZGVBdChuKyspOzU2MzIwPT0oNjQ1MTImaSk/ZS5wdXNoKCgoMTAyMyZvKTw8MTApKygxMDIzJmkpKzY1NTM2KTooZS5wdXNoKG8pLG4tLSl9ZWxzZSBlLnB1c2gobyl9cmV0dXJuIGV9KHQpO3ZhciByLHUsbD10Lmxlbmd0aCxmPTEyOCxkPTAscD03Mjtmb3Iocj0wO3I8dC5sZW5ndGg7cisrKSh1PXRbcl0pPDEyOCYmbi5wdXNoKGEodSkpO3ZhciBoPW4ubGVuZ3RoLHY9aDtmb3IoaCYmbi5wdXNoKCItIik7djxsOyl7dmFyIGc9ZTtmb3Iocj0wO3I8dC5sZW5ndGg7cisrKSh1PXRbcl0pPj1mJiZ1PGcmJihnPXUpO3ZhciB5PXYrMTtpZihnLWY+aSgoZS1kKS95KSl0aHJvdyBSYW5nZUVycm9yKG8pO2ZvcihkKz0oZy1mKSp5LGY9ZyxyPTA7cjx0Lmxlbmd0aDtyKyspe2lmKCh1PXRbcl0pPGYmJisrZD5lKXRocm93IFJhbmdlRXJyb3Iobyk7aWYodT09Zil7Zm9yKHZhciBtPWQsYj0zNjs7Yis9MzYpe3ZhciB4PWI8PXA/MTpiPj1wKzI2PzI2OmItcDtpZihtPHgpYnJlYWs7dmFyIHc9bS14LEU9MzYteDtuLnB1c2goYShjKHgrdyVFKSkpLG09aSh3L0UpfW4ucHVzaChhKGMobSkpKSxwPXMoZCx5LHY9PWgpLGQ9MCwrK3Z9fSsrZCwrK2Z9cmV0dXJuIG4uam9pbigiIil9O3QuZXhwb3J0cz1mdW5jdGlvbih0KXt2YXIgZSxvLGk9W10sYT10LnRvTG93ZXJDYXNlKCkucmVwbGFjZShyLCIuIikuc3BsaXQoIi4iKTtmb3IoZT0wO2U8YS5sZW5ndGg7ZSsrKW89YVtlXSxpLnB1c2gobi50ZXN0KG8pPyJ4bi0tIit1KG8pOm8pO3JldHVybiBpLmpvaW4oIi4iKX19LDE5MjY6ZnVuY3Rpb24odCxlLG4pe3ZhciByPW4oOTI5MTMpO3QuZXhwb3J0cz1mdW5jdGlvbih0LGUsbil7Zm9yKHZhciBvIGluIGUpcih0LG8sZVtvXSxuKTtyZXR1cm4gdH19LDkyOTEzOmZ1bmN0aW9uKHQsZSxuKXt2YXIgcj1uKDg5NTU4KSxvPW4oNjY5NzEpLGk9big3NjI5OCksYT1uKDk4MjY5KSxjPW4oNzY3NzMpLHM9big4OTgyNyksdT1zLmdldCxsPXMuZW5mb3JjZSxmPVN0cmluZyhTdHJpbmcpLnNwbGl0KCJTdHJpbmciKTsodC5leHBvcnRzPWZ1bmN0aW9uKHQsZSxuLGMpe3ZhciBzPSEhYyYmISFjLnVuc2FmZSx1PSEhYyYmISFjLmVudW1lcmFibGUsZD0hIWMmJiEhYy5ub1RhcmdldEdldDsiZnVuY3Rpb24iPT10eXBlb2YgbiYmKCJzdHJpbmciIT10eXBlb2YgZXx8aShuLCJuYW1lIil8fG8obiwibmFtZSIsZSksbChuKS5zb3VyY2U9Zi5qb2luKCJzdHJpbmciPT10eXBlb2YgZT9lOiIiKSksdCE9PXI/KHM/IWQmJnRbZV0mJih1PSEwKTpkZWxldGUgdFtlXSx1P3RbZV09bjpvKHQsZSxuKSk6dT90W2VdPW46YShlLG4pfSkoRnVuY3Rpb24ucHJvdG90eXBlLCJ0b1N0cmluZyIsKGZ1bmN0aW9uKCl7cmV0dXJuImZ1bmN0aW9uIj09dHlwZW9mIHRoaXMmJnUodGhpcykuc291cmNlfHxjKHRoaXMpfSkpfSw3NzAyMDpmdW5jdGlvbih0LGUsbil7dmFyIHI9big5NDkwNiksbz1uKDU4NjA2KSxpPW4oNjIwNTQpKCJtZXRhZGF0YSIpLGE9aS5zdG9yZXx8KGkuc3RvcmU9bmV3IG8pLGM9ZnVuY3Rpb24odCxlLG4pe3ZhciBvPWEuZ2V0KHQpO2lmKCFvKXtpZighbilyZXR1cm47YS5zZXQodCxvPW5ldyByKX12YXIgaT1vLmdldChlKTtpZighaSl7aWYoIW4pcmV0dXJuO28uc2V0KGUsaT1uZXcgcil9cmV0dXJuIGl9O3QuZXhwb3J0cz17c3RvcmU6YSxnZXRNYXA6YyxoYXM6ZnVuY3Rpb24odCxlLG4pe3ZhciByPWMoZSxuLCExKTtyZXR1cm4gdm9pZCAwIT09ciYmci5oYXModCl9LGdldDpmdW5jdGlvbih0LGUsbil7dmFyIHI9YyhlLG4sITEpO3JldHVybiB2b2lkIDA9PT1yP3ZvaWQgMDpyLmdldCh0KX0sc2V0OmZ1bmN0aW9uKHQsZSxuLHIpe2MobixyLCEwKS5zZXQodCxlKX0sa2V5czpmdW5jdGlvbih0LGUpe3ZhciBuPWModCxlLCExKSxyPVtdO3JldHVybiBuJiZuLmZvckVhY2goKGZ1bmN0aW9uKHQsZSl7ci5wdXNoKGUpfSkpLHJ9LHRvS2V5OmZ1bmN0aW9uKHQpe3JldHVybiB2b2lkIDA9PT10fHwic3ltYm9sIj09dHlwZW9mIHQ/dDpTdHJpbmcodCl9fX0sMzU0NTU6ZnVuY3Rpb24odCxlLG4pe3ZhciByPW4oMjQ1OTQpLG89bigzODU5OCk7dC5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7dmFyIG49dC5leGVjO2lmKCJmdW5jdGlvbiI9PXR5cGVvZiBuKXt2YXIgaT1uLmNhbGwodCxlKTtpZigib2JqZWN0IiE9dHlwZW9mIGkpdGhyb3cgVHlwZUVycm9yKCJSZWdFeHAgZXhlYyBtZXRob2QgcmV0dXJuZWQgc29tZXRoaW5nIG90aGVyIHRoYW4gYW4gT2JqZWN0IG9yIG51bGwiKTtyZXR1cm4gaX1pZigiUmVnRXhwIiE9PXIodCkpdGhyb3cgVHlwZUVycm9yKCJSZWdFeHAjZXhlYyBjYWxsZWQgb24gaW5jb21wYXRpYmxlIHJlY2VpdmVyIik7cmV0dXJuIG8uY2FsbCh0LGUpfX0sMzg1OTg6ZnVuY3Rpb24odCxlLG4peyJ1c2Ugc3RyaWN0Ijt2YXIgcixvLGk9bigyNTQxOSksYT1SZWdFeHAucHJvdG90eXBlLmV4ZWMsYz1TdHJpbmcucHJvdG90eXBlLnJlcGxhY2Uscz1hLHU9KHI9L2EvLG89L2IqL2csYS5jYWxsKHIsImEiKSxhLmNhbGwobywiYSIpLDAhPT1yLmxhc3RJbmRleHx8MCE9PW8ubGFzdEluZGV4KSxsPXZvaWQgMCE9PS8oKT8/Ly5leGVjKCIiKVsxXTsodXx8bCkmJihzPWZ1bmN0aW9uKHQpe3ZhciBlLG4scixvLHM9dGhpcztyZXR1cm4gbCYmKG49bmV3IFJlZ0V4cCgiXiIrcy5zb3VyY2UrIiQoPyFcXHMpIixpLmNhbGwocykpKSx1JiYoZT1zLmxhc3RJbmRleCkscj1hLmNhbGwocyx0KSx1JiZyJiYocy5sYXN0SW5kZXg9cy5nbG9iYWw/ci5pbmRleCtyWzBdLmxlbmd0aDplKSxsJiZyJiZyLmxlbmd0aD4xJiZjLmNhbGwoclswXSxuLChmdW5jdGlvbigpe2ZvcihvPTE7bzxhcmd1bWVudHMubGVuZ3RoLTI7bysrKXZvaWQgMD09PWFyZ3VtZW50c1tvXSYmKHJbb109dm9pZCAwKX0pKSxyfSksdC5leHBvcnRzPXN9LDI1NDE5OmZ1bmN0aW9uKHQsZSxuKXsidXNlIHN0cmljdCI7dmFyIHI9big4NzU3OSk7dC5leHBvcnRzPWZ1bmN0aW9uKCl7dmFyIHQ9cih0aGlzKSxlPSIiO3JldHVybiB0Lmdsb2JhbCYmKGUrPSJnIiksdC5pZ25vcmVDYXNlJiYoZSs9ImkiKSx0Lm11bHRpbGluZSYmKGUrPSJtIiksdC5kb3RBbGwmJihlKz0icyIpLHQudW5pY29kZSYmKGUrPSJ1IiksdC5zdGlja3kmJihlKz0ieSIpLGV9fSw3MDEzMjpmdW5jdGlvbih0KXt0LmV4cG9ydHM9ZnVuY3Rpb24odCl7aWYobnVsbD09dCl0aHJvdyBUeXBlRXJyb3IoIkNhbid0IGNhbGwgbWV0aG9kIG9uICIrdCk7cmV0dXJuIHR9fSwzODE4OTpmdW5jdGlvbih0KXt0LmV4cG9ydHM9ZnVuY3Rpb24odCxlKXtyZXR1cm4gdD09PWV8fHQhPXQmJmUhPWV9fSw3NjQ4MjpmdW5jdGlvbih0KXt0LmV4cG9ydHM9T2JqZWN0LmlzfHxmdW5jdGlvbih0LGUpe3JldHVybiB0PT09ZT8wIT09dHx8MS90PT0xL2U6dCE9dCYmZSE9ZX19LDk4MjY5OmZ1bmN0aW9uKHQsZSxuKXt2YXIgcj1uKDg5NTU4KSxvPW4oNjY5NzEpO3QuZXhwb3J0cz1mdW5jdGlvbih0LGUpe3RyeXtvKHIsdCxlKX1jYXRjaChuKXtyW3RdPWV9cmV0dXJuIGV9fSw2NzUzODpmdW5jdGlvbih0LGUsbil7InVzZSBzdHJpY3QiO3ZhciByPW4oNzcwMSksbz1uKDM3NjIwKSxpPW4oMjM3MjQpLGE9big2MjU1NiksYz1pKCJzcGVjaWVzIik7dC5leHBvcnRzPWZ1bmN0aW9uKHQpe3ZhciBlPXIodCksbj1vLmY7YSYmZSYmIWVbY10mJm4oZSxjLHtjb25maWd1cmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXN9fSl9fSw1MTEyODpmdW5jdGlvbih0LGUsbil7dmFyIHI9bigzNzYyMCkuZixvPW4oNzYyOTgpLGk9bigyMzcyNCkoInRvU3RyaW5nVGFnIik7dC5leHBvcnRzPWZ1bmN0aW9uKHQsZSxuKXt0JiYhbyh0PW4/dDp0LnByb3RvdHlwZSxpKSYmcih0LGkse2NvbmZpZ3VyYWJsZTohMCx2YWx1ZTplfSl9fSw4MzE5NzpmdW5jdGlvbih0LGUsbil7dmFyIHI9big2MjA1NCksbz1uKDY3MjkpLGk9cigia2V5cyIpO3QuZXhwb3J0cz1mdW5jdGlvbih0KXtyZXR1cm4gaVt0XXx8KGlbdF09byh0KSl9fSwzNDc0MTpmdW5jdGlvbih0LGUsbil7dmFyIHI9big4OTU1OCksbz1uKDk4MjY5KSxpPSJfX2NvcmUtanNfc2hhcmVkX18iLGE9cltpXXx8byhpLHt9KTt0LmV4cG9ydHM9YX0sNjIwNTQ6ZnVuY3Rpb24odCxlLG4pe3ZhciByPW4oNjU2NzIpLG89bigzNDc0MSk7KHQuZXhwb3J0cz1mdW5jdGlvbih0LGUpe3JldHVybiBvW3RdfHwob1t0XT12b2lkIDAhPT1lP2U6e30pfSkoInZlcnNpb25zIixbXSkucHVzaCh7dmVyc2lvbjoiMy41LjAiLG1vZGU6cj8icHVyZSI6Imdsb2JhbCIsY29weXJpZ2h0OiLCqSAyMDE5IERlbmlzIFB1c2hrYXJldiAoemxvaXJvY2sucnUpIn0pfSwyMjkwOTpmdW5jdGlvbih0LGUsbil7InVzZSBzdHJpY3QiO3ZhciByPW4oMzIxODcpO3QuZXhwb3J0cz1mdW5jdGlvbih0LGUpe3ZhciBuPVtdW3RdO3JldHVybiFufHwhcigoZnVuY3Rpb24oKXtuLmNhbGwobnVsbCxlfHxmdW5jdGlvbigpe3Rocm93IDF9LDEpfSkpfX0sMTM5Nzk6ZnVuY3Rpb24odCxlLG4pe3ZhciByPW4oODc1NzkpLG89big4NjQ3MCksaT1uKDIzNzI0KSgic3BlY2llcyIpO3QuZXhwb3J0cz1mdW5jdGlvbih0LGUpe3ZhciBuLGE9cih0KS5jb25zdHJ1Y3RvcjtyZXR1cm4gdm9pZCAwPT09YXx8bnVsbD09KG49cihhKVtpXSk/ZTpvKG4pfX0sNjAxNDA6ZnVuY3Rpb24odCxlLG4pe3ZhciByPW4oNDM0MTYpLG89big3MDEzMiksaT1mdW5jdGlvbih0KXtyZXR1cm4gZnVuY3Rpb24oZSxuKXt2YXIgaSxhLGM9U3RyaW5nKG8oZSkpLHM9cihuKSx1PWMubGVuZ3RoO3JldHVybiBzPDB8fHM+PXU/dD8iIjp2b2lkIDA6KGk9Yy5jaGFyQ29kZUF0KHMpKTw1NTI5Nnx8aT41NjMxOXx8cysxPT09dXx8KGE9Yy5jaGFyQ29kZUF0KHMrMSkpPDU2MzIwfHxhPjU3MzQzP3Q/Yy5jaGFyQXQocyk6aTp0P2Muc2xpY2UocyxzKzIpOmEtNTYzMjArKGktNTUyOTY8PDEwKSs2NTUzNn19O3QuZXhwb3J0cz17Y29kZUF0OmkoITEpLGNoYXJBdDppKCEwKX19LDI2NTczOmZ1bmN0aW9uKHQsZSxuKXt2YXIgcj1uKDI3ODg0KSxvPW4oNjgyNTMpLGk9big3MDEzMiksYT1NYXRoLmNlaWwsYz1mdW5jdGlvbih0KXtyZXR1cm4gZnVuY3Rpb24oZSxuLGMpe3ZhciBzLHUsbD1TdHJpbmcoaShlKSksZj1sLmxlbmd0aCxkPXZvaWQgMD09PWM/IiAiOlN0cmluZyhjKSxwPXIobik7cmV0dXJuIHA8PWZ8fCIiPT1kP2w6KHM9cC1mLCh1PW8uY2FsbChkLGEocy9kLmxlbmd0aCkpKS5sZW5ndGg+cyYmKHU9dS5zbGljZSgwLHMpKSx0P2wrdTp1K2wpfX07dC5leHBvcnRzPXtzdGFydDpjKCExKSxlbmQ6YyghMCl9fSw2ODI1MzpmdW5jdGlvbih0LGUsbil7InVzZSBzdHJpY3QiO3ZhciByPW4oNDM0MTYpLG89big3MDEzMik7dC5leHBvcnRzPSIiLnJlcGVhdHx8ZnVuY3Rpb24odCl7dmFyIGU9U3RyaW5nKG8odGhpcykpLG49IiIsaT1yKHQpO2lmKGk8MHx8aT09MS8wKXRocm93IFJhbmdlRXJyb3IoIldyb25nIG51bWJlciBvZiByZXBldGl0aW9ucyIpO2Zvcig7aT4wOyhpPj4+PTEpJiYoZSs9ZSkpMSZpJiYobis9ZSk7cmV0dXJuIG59fSw4MjM1MDpmdW5jdGlvbih0LGUsbil7dmFyIHI9big3MDEzMiksbz0iWyIrbig1MDA1NSkrIl0iLGk9UmVnRXhwKCJeIitvK28rIioiKSxhPVJlZ0V4cChvK28rIiokIiksYz1mdW5jdGlvbih0KXtyZXR1cm4gZnVuY3Rpb24oZSl7dmFyIG49U3RyaW5nKHIoZSkpO3JldHVybiAxJnQmJihuPW4ucmVwbGFjZShpLCIiKSksMiZ0JiYobj1uLnJlcGxhY2UoYSwiIikpLG59fTt0LmV4cG9ydHM9e3N0YXJ0OmMoMSksZW5kOmMoMiksdHJpbTpjKDMpfX0sMjE3NDQ6ZnVuY3Rpb24odCxlLG4pe3ZhciByLG8saSxhPW4oODk1NTgpLGM9bigzMjE4Nykscz1uKDI0NTk0KSx1PW4oNDYxMzApLGw9big1MTU3MSksZj1uKDE5MjMpLGQ9bigyMTIzMSkscD1hLmxvY2F0aW9uLGg9YS5zZXRJbW1lZGlhdGUsdj1hLmNsZWFySW1tZWRpYXRlLGc9YS5wcm9jZXNzLHk9YS5NZXNzYWdlQ2hhbm5lbCxtPWEuRGlzcGF0Y2gsYj0wLHg9e30sdz0ib25yZWFkeXN0YXRlY2hhbmdlIixFPWZ1bmN0aW9uKHQpe2lmKHguaGFzT3duUHJvcGVydHkodCkpe3ZhciBlPXhbdF07ZGVsZXRlIHhbdF0sZSgpfX0saj1mdW5jdGlvbih0KXtyZXR1cm4gZnVuY3Rpb24oKXtFKHQpfX0sQz1mdW5jdGlvbih0KXtFKHQuZGF0YSl9LGs9ZnVuY3Rpb24odCl7YS5wb3N0TWVzc2FnZSh0KyIiLHAucHJvdG9jb2wrIi8vIitwLmhvc3QpfTtoJiZ2fHwoaD1mdW5jdGlvbih0KXtmb3IodmFyIGU9W10sbj0xO2FyZ3VtZW50cy5sZW5ndGg+bjspZS5wdXNoKGFyZ3VtZW50c1tuKytdKTtyZXR1cm4geFsrK2JdPWZ1bmN0aW9uKCl7KCJmdW5jdGlvbiI9PXR5cGVvZiB0P3Q6RnVuY3Rpb24odCkpLmFwcGx5KHZvaWQgMCxlKX0scihiKSxifSx2PWZ1bmN0aW9uKHQpe2RlbGV0ZSB4W3RdfSwicHJvY2VzcyI9PXMoZyk/cj1mdW5jdGlvbih0KXtnLm5leHRUaWNrKGoodCkpfTptJiZtLm5vdz9yPWZ1bmN0aW9uKHQpe20ubm93KGoodCkpfTp5JiYhZD8oaT0obz1uZXcgeSkucG9ydDIsby5wb3J0MS5vbm1lc3NhZ2U9QyxyPXUoaS5wb3N0TWVzc2FnZSxpLDEpKTohYS5hZGRFdmVudExpc3RlbmVyfHwiZnVuY3Rpb24iIT10eXBlb2YgcG9zdE1lc3NhZ2V8fGEuaW1wb3J0U2NyaXB0c3x8YyhrKT9yPXcgaW4gZigic2NyaXB0Iik/ZnVuY3Rpb24odCl7bC5hcHBlbmRDaGlsZChmKCJzY3JpcHQiKSkub25yZWFkeXN0YXRlY2hhbmdlPWZ1bmN0aW9uKCl7bC5yZW1vdmVDaGlsZCh0aGlzKSxFKHQpfX06ZnVuY3Rpb24odCl7c2V0VGltZW91dChqKHQpLDApfToocj1rLGEuYWRkRXZlbnRMaXN0ZW5lcigibWVzc2FnZSIsQywhMSkpKSx0LmV4cG9ydHM9e3NldDpoLGNsZWFyOnZ9fSw1Mzk5NzpmdW5jdGlvbih0LGUsbil7dmFyIHI9bigyNDU5NCk7dC5leHBvcnRzPWZ1bmN0aW9uKHQpe2lmKCJudW1iZXIiIT10eXBlb2YgdCYmIk51bWJlciIhPXIodCkpdGhyb3cgVHlwZUVycm9yKCJJbmNvcnJlY3QgaW52b2NhdGlvbiIpO3JldHVybit0fX0sNzY5NzY6ZnVuY3Rpb24odCxlLG4pe3ZhciByPW4oNDM0MTYpLG89TWF0aC5tYXgsaT1NYXRoLm1pbjt0LmV4cG9ydHM9ZnVuY3Rpb24odCxlKXt2YXIgbj1yKHQpO3JldHVybiBuPDA/byhuK2UsMCk6aShuLGUpfX0sODM5MTQ6ZnVuY3Rpb24odCxlLG4pe3ZhciByPW4oNDM0MTYpLG89bigyNzg4NCk7dC5leHBvcnRzPWZ1bmN0aW9uKHQpe2lmKHZvaWQgMD09PXQpcmV0dXJuIDA7dmFyIGU9cih0KSxuPW8oZSk7aWYoZSE9PW4pdGhyb3cgUmFuZ2VFcnJvcigiV3JvbmcgbGVuZ3RoIG9yIGluZGV4Iik7cmV0dXJuIG59fSw5NTczOmZ1bmN0aW9uKHQsZSxuKXt2YXIgcj1uKDI0OTgpLG89big3MDEzMik7dC5leHBvcnRzPWZ1bmN0aW9uKHQpe3JldHVybiByKG8odCkpfX0sNDM0MTY6ZnVuY3Rpb24odCl7dmFyIGU9TWF0aC5jZWlsLG49TWF0aC5mbG9vcjt0LmV4cG9ydHM9ZnVuY3Rpb24odCl7cmV0dXJuIGlzTmFOKHQ9K3QpPzA6KHQ+MD9uOmUpKHQpfX0sMjc4ODQ6ZnVuY3Rpb24odCxlLG4pe3ZhciByPW4oNDM0MTYpLG89TWF0aC5taW47dC5leHBvcnRzPWZ1bmN0aW9uKHQpe3JldHVybiB0PjA/byhyKHQpLDkwMDcxOTkyNTQ3NDA5OTEpOjB9fSwxOTIwOTpmdW5jdGlvbih0LGUsbil7dmFyIHI9big3MDEzMik7dC5leHBvcnRzPWZ1bmN0aW9uKHQpe3JldHVybiBPYmplY3Qocih0KSl9fSw2MDU1ODpmdW5jdGlvbih0LGUsbil7dmFyIHI9big0NTY4MCk7dC5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7dmFyIG49cih0KTtpZihuJWUpdGhyb3cgUmFuZ2VFcnJvcigiV3Jvbmcgb2Zmc2V0Iik7cmV0dXJuIG59fSw0NTY4MDpmdW5jdGlvbih0LGUsbil7dmFyIHI9big0MzQxNik7dC5leHBvcnRzPWZ1bmN0aW9uKHQpe3ZhciBlPXIodCk7aWYoZTwwKXRocm93IFJhbmdlRXJyb3IoIlRoZSBhcmd1bWVudCBjYW4ndCBiZSBsZXNzIHRoYW4gMCIpO3JldHVybiBlfX0sNTM0OTg6ZnVuY3Rpb24odCxlLG4pe3ZhciByPW4oMTA1OTIpO3QuZXhwb3J0cz1mdW5jdGlvbih0LGUpe2lmKCFyKHQpKXJldHVybiB0O3ZhciBuLG87aWYoZSYmImZ1bmN0aW9uIj09dHlwZW9mKG49dC50b1N0cmluZykmJiFyKG89bi5jYWxsKHQpKSlyZXR1cm4gbztpZigiZnVuY3Rpb24iPT10eXBlb2Yobj10LnZhbHVlT2YpJiYhcihvPW4uY2FsbCh0KSkpcmV0dXJuIG87aWYoIWUmJiJmdW5jdGlvbiI9PXR5cGVvZihuPXQudG9TdHJpbmcpJiYhcihvPW4uY2FsbCh0KSkpcmV0dXJuIG87dGhyb3cgVHlwZUVycm9yKCJDYW4ndCBjb252ZXJ0IG9iamVjdCB0byBwcmltaXRpdmUgdmFsdWUiKX19LDkwNjEzOmZ1bmN0aW9uKHQsZSxuKXt2YXIgcj17fTtyW24oMjM3MjQpKCJ0b1N0cmluZ1RhZyIpXT0ieiIsdC5leHBvcnRzPSJbb2JqZWN0IHpdIj09PVN0cmluZyhyKX0sOTMwMTc6ZnVuY3Rpb24odCxlLG4peyJ1c2Ugc3RyaWN0Ijt2YXIgcj1uKDE0MDQ0KSxvPW4oODk1NTgpLGk9big2MjU1NiksYT1uKDM1NjI3KSxjPW4oNzMwNzQpLHM9big4MjgzNSksdT1uKDU5Mzc5KSxsPW4oMTQyMDkpLGY9big2Njk3MSksZD1uKDI3ODg0KSxwPW4oODM5MTQpLGg9big2MDU1OCksdj1uKDUzNDk4KSxnPW4oNzYyOTgpLHk9big1OTU5MSksbT1uKDEwNTkyKSxiPW4oNTA4NjgpLHg9big3MTg0Miksdz1uKDEzMzM0KS5mLEU9bigyMDQ1NSksaj1uKDMwMDI1KS5mb3JFYWNoLEM9big2NzUzOCksaz1uKDM3NjIwKSxTPW4oOTcyNTcpLE89big4OTgyNyksST1uKDMwMjcyKSxBPU8uZ2V0LE09Ty5zZXQsXz1rLmYsVD1TLmYsUj1NYXRoLnJvdW5kLEw9by5SYW5nZUVycm9yLFA9cy5BcnJheUJ1ZmZlcixOPXMuRGF0YVZpZXcsRD1jLk5BVElWRV9BUlJBWV9CVUZGRVJfVklFV1MsRj1jLlRZUEVEX0FSUkFZX1RBRyxVPWMuVHlwZWRBcnJheSxCPWMuVHlwZWRBcnJheVByb3RvdHlwZSx6PWMuYVR5cGVkQXJyYXlDb25zdHJ1Y3RvcixWPWMuaXNUeXBlZEFycmF5LEg9IkJZVEVTX1BFUl9FTEVNRU5UIixxPSJXcm9uZyBsZW5ndGgiLFc9ZnVuY3Rpb24odCxlKXtmb3IodmFyIG49MCxyPWUubGVuZ3RoLG89bmV3KHoodCkpKHIpO3I+bjspb1tuXT1lW24rK107cmV0dXJuIG99LEc9ZnVuY3Rpb24odCxlKXtfKHQsZSx7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIEEodGhpcylbZV19fSl9LFo9ZnVuY3Rpb24odCl7dmFyIGU7cmV0dXJuIHQgaW5zdGFuY2VvZiBQfHwiQXJyYXlCdWZmZXIiPT0oZT15KHQpKXx8IlNoYXJlZEFycmF5QnVmZmVyIj09ZX0sJD1mdW5jdGlvbih0LGUpe3JldHVybiBWKHQpJiYic3ltYm9sIiE9dHlwZW9mIGUmJmUgaW4gdCYmU3RyaW5nKCtlKT09U3RyaW5nKGUpfSxZPWZ1bmN0aW9uKHQsZSl7cmV0dXJuICQodCxlPXYoZSwhMCkpP2woMix0W2VdKTpUKHQsZSl9LEo9ZnVuY3Rpb24odCxlLG4pe3JldHVybiEoJCh0LGU9dihlLCEwKSkmJm0obikmJmcobiwidmFsdWUiKSl8fGcobiwiZ2V0Iil8fGcobiwic2V0Iil8fG4uY29uZmlndXJhYmxlfHxnKG4sIndyaXRhYmxlIikmJiFuLndyaXRhYmxlfHxnKG4sImVudW1lcmFibGUiKSYmIW4uZW51bWVyYWJsZT9fKHQsZSxuKToodFtlXT1uLnZhbHVlLHQpfTtpPyhEfHwoUy5mPVksay5mPUosRyhCLCJidWZmZXIiKSxHKEIsImJ5dGVPZmZzZXQiKSxHKEIsImJ5dGVMZW5ndGgiKSxHKEIsImxlbmd0aCIpKSxyKHt0YXJnZXQ6Ik9iamVjdCIsc3RhdDohMCxmb3JjZWQ6IUR9LHtnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3I6WSxkZWZpbmVQcm9wZXJ0eTpKfSksdC5leHBvcnRzPWZ1bmN0aW9uKHQsZSxuKXt2YXIgaT10Lm1hdGNoKC9cZCskLylbMF0vOCxjPXQrKG4/IkNsYW1wZWQiOiIiKSsiQXJyYXkiLHM9ImdldCIrdCxsPSJzZXQiK3Qsdj1vW2NdLGc9dix5PWcmJmcucHJvdG90eXBlLGs9e30sUz1mdW5jdGlvbih0LGUpe18odCxlLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gZnVuY3Rpb24odCxlKXt2YXIgbj1BKHQpO3JldHVybiBuLnZpZXdbc10oZSppK24uYnl0ZU9mZnNldCwhMCl9KHRoaXMsZSl9LHNldDpmdW5jdGlvbih0KXtyZXR1cm4gZnVuY3Rpb24odCxlLHIpe3ZhciBvPUEodCk7biYmKHI9KHI9UihyKSk8MD8wOnI+MjU1PzI1NToyNTUmciksby52aWV3W2xdKGUqaStvLmJ5dGVPZmZzZXQsciwhMCl9KHRoaXMsZSx0KX0sZW51bWVyYWJsZTohMH0pfTtEP2EmJihnPWUoKGZ1bmN0aW9uKHQsZSxuLHIpe3JldHVybiB1KHQsZyxjKSxJKG0oZSk/WihlKT92b2lkIDAhPT1yP25ldyB2KGUsaChuLGkpLHIpOnZvaWQgMCE9PW4/bmV3IHYoZSxoKG4saSkpOm5ldyB2KGUpOlYoZSk/VyhnLGUpOkUuY2FsbChnLGUpOm5ldyB2KHAoZSkpLHQsZyl9KSkseCYmeChnLFUpLGoodyh2KSwoZnVuY3Rpb24odCl7dCBpbiBnfHxmKGcsdCx2W3RdKX0pKSxnLnByb3RvdHlwZT15KTooZz1lKChmdW5jdGlvbih0LGUsbixyKXt1KHQsZyxjKTt2YXIgbyxhLHMsbD0wLGY9MDtpZihtKGUpKXtpZighWihlKSlyZXR1cm4gVihlKT9XKGcsZSk6RS5jYWxsKGcsZSk7bz1lLGY9aChuLGkpO3ZhciB2PWUuYnl0ZUxlbmd0aDtpZih2b2lkIDA9PT1yKXtpZih2JWkpdGhyb3cgTChxKTtpZigoYT12LWYpPDApdGhyb3cgTChxKX1lbHNlIGlmKChhPWQocikqaSkrZj52KXRocm93IEwocSk7cz1hL2l9ZWxzZSBzPXAoZSksbz1uZXcgUChhPXMqaSk7Zm9yKE0odCx7YnVmZmVyOm8sYnl0ZU9mZnNldDpmLGJ5dGVMZW5ndGg6YSxsZW5ndGg6cyx2aWV3Om5ldyBOKG8pfSk7bDxzOylTKHQsbCsrKX0pKSx4JiZ4KGcsVSkseT1nLnByb3RvdHlwZT1iKEIpKSx5LmNvbnN0cnVjdG9yIT09ZyYmZih5LCJjb25zdHJ1Y3RvciIsZyksRiYmZih5LEYsYyksa1tjXT1nLHIoe2dsb2JhbDohMCxmb3JjZWQ6ZyE9dixzaGFtOiFEfSxrKSxIIGluIGd8fGYoZyxILGkpLEggaW4geXx8Zih5LEgsaSksQyhjKX0pOnQuZXhwb3J0cz1mdW5jdGlvbigpe319LDIwNDU1OmZ1bmN0aW9uKHQsZSxuKXt2YXIgcj1uKDE5MjA5KSxvPW4oMjc4ODQpLGk9big3Mzg5MCksYT1uKDQ0OTg0KSxjPW4oNDYxMzApLHM9big3MzA3NCkuYVR5cGVkQXJyYXlDb25zdHJ1Y3Rvcjt0LmV4cG9ydHM9ZnVuY3Rpb24odCl7dmFyIGUsbix1LGwsZixkLHA9cih0KSxoPWFyZ3VtZW50cy5sZW5ndGgsdj1oPjE/YXJndW1lbnRzWzFdOnZvaWQgMCxnPXZvaWQgMCE9PXYseT1pKHApO2lmKG51bGwhPXkmJiFhKHkpKWZvcihkPShmPXkuY2FsbChwKSkubmV4dCxwPVtdOyEobD1kLmNhbGwoZikpLmRvbmU7KXAucHVzaChsLnZhbHVlKTtmb3IoZyYmaD4yJiYodj1jKHYsYXJndW1lbnRzWzJdLDIpKSxuPW8ocC5sZW5ndGgpLHU9bmV3KHModGhpcykpKG4pLGU9MDtuPmU7ZSsrKXVbZV09Zz92KHBbZV0sZSk6cFtlXTtyZXR1cm4gdX19LDM1NjI3OmZ1bmN0aW9uKHQsZSxuKXt2YXIgcj1uKDg5NTU4KSxvPW4oMzIxODcpLGk9big0Nzk2KSxhPW4oNzMwNzQpLk5BVElWRV9BUlJBWV9CVUZGRVJfVklFV1MsYz1yLkFycmF5QnVmZmVyLHM9ci5JbnQ4QXJyYXk7dC5leHBvcnRzPSFhfHwhbygoZnVuY3Rpb24oKXtzKDEpfSkpfHwhbygoZnVuY3Rpb24oKXtuZXcgcygtMSl9KSl8fCFpKChmdW5jdGlvbih0KXtuZXcgcyxuZXcgcyhudWxsKSxuZXcgcygxLjUpLG5ldyBzKHQpfSksITApfHxvKChmdW5jdGlvbigpe3JldHVybiAxIT09bmV3IHMobmV3IGMoMiksMSx2b2lkIDApLmxlbmd0aH0pKX0sNjcyOTpmdW5jdGlvbih0KXt2YXIgZT0wLG49TWF0aC5yYW5kb20oKTt0LmV4cG9ydHM9ZnVuY3Rpb24odCl7cmV0dXJuIlN5bWJvbCgiK1N0cmluZyh2b2lkIDA9PT10PyIiOnQpKyIpXyIrKCsrZStuKS50b1N0cmluZygzNil9fSwxNjQxMDpmdW5jdGlvbih0LGUsbil7dmFyIHI9big5MDE0KTt0LmV4cG9ydHM9ciYmIVN5bWJvbC5zaGFtJiYic3ltYm9sIj09dHlwZW9mIFN5bWJvbCgpfSwzOTQ3NjpmdW5jdGlvbih0LGUsbil7dmFyIHI9big3NzAxKTt0LmV4cG9ydHM9cigibmF2aWdhdG9yIiwidXNlckFnZW50Iil8fCIifSw3OTA3MTpmdW5jdGlvbih0LGUsbil7dmFyIHIsbyxpPW4oODk1NTgpLGE9bigzOTQ3NiksYz1pLnByb2Nlc3Mscz1jJiZjLnZlcnNpb25zLHU9cyYmcy52ODt1P289KHI9dS5zcGxpdCgiLiIpKVswXStyWzFdOmEmJighKHI9YS5tYXRjaCgvRWRnZVwvKFxkKykvKSl8fHJbMV0+PTc0KSYmKHI9YS5tYXRjaCgvQ2hyb21lXC8oXGQrKS8pKSYmKG89clsxXSksdC5leHBvcnRzPW8mJitvfSw0MjE4NDpmdW5jdGlvbih0LGUsbil7dmFyIHI9bigzOTQ3Nik7dC5leHBvcnRzPS9WZXJzaW9uXC8xMFwuXGQrKFwuXGQrKT8oIE1vYmlsZVwvXHcrKT8gU2FmYXJpXC8vLnRlc3Qocil9LDIzNzI0OmZ1bmN0aW9uKHQsZSxuKXt2YXIgcj1uKDg5NTU4KSxvPW4oNjIwNTQpLGk9big3NjI5OCksYT1uKDY3MjkpLGM9big5MDE0KSxzPW4oMTY0MTApLHU9bygid2tzIiksbD1yLlN5bWJvbCxmPXM/bDphO3QuZXhwb3J0cz1mdW5jdGlvbih0KXtyZXR1cm4gaSh1LHQpfHwoYyYmaShsLHQpP3VbdF09bFt0XTp1W3RdPWYoIlN5bWJvbC4iK3QpKSx1W3RdfX0sNTAwNTU6ZnVuY3Rpb24odCl7dC5leHBvcnRzPSJcdFxuXHZcZlxyIMKg4ZqA4oCA4oCB4oCC4oCD4oCE4oCF4oCG4oCH4oCI4oCJ4oCK4oCv4oGf44CAXHUyMDI4XHUyMDI5XHVmZWZmIn0sNzM5MTY6ZnVuY3Rpb24odCxlLG4pe3ZhciByPW4oMjM3MjQpO2UuZj1yfSw2MTI0NTpmdW5jdGlvbih0LGUsbil7InVzZSBzdHJpY3QiO3ZhciByPW4oMTQwNDQpLG89big4OTU1OCksaT1uKDgyODM1KSxhPW4oNjc1MzgpLGM9IkFycmF5QnVmZmVyIixzPWkuQXJyYXlCdWZmZXI7cih7Z2xvYmFsOiEwLGZvcmNlZDpvLkFycmF5QnVmZmVyIT09c30se0FycmF5QnVmZmVyOnN9KSxhKGMpfSwyOTI3MzpmdW5jdGlvbih0LGUsbil7dmFyIHI9bigxNDA0NCksbz1uKDczMDc0KTtyKHt0YXJnZXQ6IkFycmF5QnVmZmVyIixzdGF0OiEwLGZvcmNlZDohby5OQVRJVkVfQVJSQVlfQlVGRkVSX1ZJRVdTfSx7aXNWaWV3Om8uaXNWaWV3fSl9LDkwNTYwOmZ1bmN0aW9uKHQsZSxuKXsidXNlIHN0cmljdCI7dmFyIHI9bigxNDA0NCksbz1uKDMyMTg3KSxpPW4oODI4MzUpLGE9big4NzU3OSksYz1uKDc2OTc2KSxzPW4oMjc4ODQpLHU9bigxMzk3OSksbD1pLkFycmF5QnVmZmVyLGY9aS5EYXRhVmlldyxkPWwucHJvdG90eXBlLnNsaWNlO3Ioe3RhcmdldDoiQXJyYXlCdWZmZXIiLHByb3RvOiEwLHVuc2FmZTohMCxmb3JjZWQ6bygoZnVuY3Rpb24oKXtyZXR1cm4hbmV3IGwoMikuc2xpY2UoMSx2b2lkIDApLmJ5dGVMZW5ndGh9KSl9LHtzbGljZTpmdW5jdGlvbih0LGUpe2lmKHZvaWQgMCE9PWQmJnZvaWQgMD09PWUpcmV0dXJuIGQuY2FsbChhKHRoaXMpLHQpO2Zvcih2YXIgbj1hKHRoaXMpLmJ5dGVMZW5ndGgscj1jKHQsbiksbz1jKHZvaWQgMD09PWU/bjplLG4pLGk9bmV3KHUodGhpcyxsKSkocyhvLXIpKSxwPW5ldyBmKHRoaXMpLGg9bmV3IGYoaSksdj0wO3I8bzspaC5zZXRVaW50OCh2KysscC5nZXRVaW50OChyKyspKTtyZXR1cm4gaX19KX0sNTczODc6ZnVuY3Rpb24odCxlLG4peyJ1c2Ugc3RyaWN0Ijt2YXIgcj1uKDE0MDQ0KSxvPW4oMzIxODcpLGk9big2MTk5KSxhPW4oMTA1OTIpLGM9bigxOTIwOSkscz1uKDI3ODg0KSx1PW4oNTg4MTApLGw9big3MDA5KSxmPW4oNjE5NjMpLGQ9bigyMzcyNCkscD1uKDc5MDcxKSxoPWQoImlzQ29uY2F0U3ByZWFkYWJsZSIpLHY9OTAwNzE5OTI1NDc0MDk5MSxnPSJNYXhpbXVtIGFsbG93ZWQgaW5kZXggZXhjZWVkZWQiLHk9cD49NTF8fCFvKChmdW5jdGlvbigpe3ZhciB0PVtdO3JldHVybiB0W2hdPSExLHQuY29uY2F0KClbMF0hPT10fSkpLG09ZigiY29uY2F0IiksYj1mdW5jdGlvbih0KXtpZighYSh0KSlyZXR1cm4hMTt2YXIgZT10W2hdO3JldHVybiB2b2lkIDAhPT1lPyEhZTppKHQpfTtyKHt0YXJnZXQ6IkFycmF5Iixwcm90bzohMCxmb3JjZWQ6IXl8fCFtfSx7Y29uY2F0OmZ1bmN0aW9uKHQpe3ZhciBlLG4scixvLGksYT1jKHRoaXMpLGY9bChhLDApLGQ9MDtmb3IoZT0tMSxyPWFyZ3VtZW50cy5sZW5ndGg7ZTxyO2UrKylpZihiKGk9LTE9PT1lP2E6YXJndW1lbnRzW2VdKSl7aWYoZCsobz1zKGkubGVuZ3RoKSk+dil0aHJvdyBUeXBlRXJyb3IoZyk7Zm9yKG49MDtuPG87bisrLGQrKyluIGluIGkmJnUoZixkLGlbbl0pfWVsc2V7aWYoZD49dil0aHJvdyBUeXBlRXJyb3IoZyk7dShmLGQrKyxpKX1yZXR1cm4gZi5sZW5ndGg9ZCxmfX0pfSwzMDgxNzpmdW5jdGlvbih0LGUsbil7dmFyIHI9bigxNDA0NCksbz1uKDk5NDMxKSxpPW4oNzY1MTMpO3Ioe3RhcmdldDoiQXJyYXkiLHByb3RvOiEwfSx7Y29weVdpdGhpbjpvfSksaSgiY29weVdpdGhpbiIpfSw1MjA1NTpmdW5jdGlvbih0LGUsbil7InVzZSBzdHJpY3QiO3ZhciByPW4oMTQwNDQpLG89bigzMDAyNSkuZXZlcnk7cih7dGFyZ2V0OiJBcnJheSIscHJvdG86ITAsZm9yY2VkOm4oMjI5MDkpKCJldmVyeSIpfSx7ZXZlcnk6ZnVuY3Rpb24odCl7cmV0dXJuIG8odGhpcyx0LGFyZ3VtZW50cy5sZW5ndGg+MT9hcmd1bWVudHNbMV06dm9pZCAwKX19KX0sNzMzNjA6ZnVuY3Rpb24odCxlLG4pe3ZhciByPW4oMTQwNDQpLG89big2NTg5NSksaT1uKDc2NTEzKTtyKHt0YXJnZXQ6IkFycmF5Iixwcm90bzohMH0se2ZpbGw6b30pLGkoImZpbGwiKX0sNDc1MDI6ZnVuY3Rpb24odCxlLG4peyJ1c2Ugc3RyaWN0Ijt2YXIgcj1uKDE0MDQ0KSxvPW4oMzAwMjUpLmZpbHRlcixpPW4oMzIxODcpLGE9big2MTk2MykoImZpbHRlciIpLGM9YSYmIWkoKGZ1bmN0aW9uKCl7W10uZmlsdGVyLmNhbGwoe2xlbmd0aDotMSwwOjF9LChmdW5jdGlvbih0KXt0aHJvdyB0fSkpfSkpO3Ioe3RhcmdldDoiQXJyYXkiLHByb3RvOiEwLGZvcmNlZDohYXx8IWN9LHtmaWx0ZXI6ZnVuY3Rpb24odCl7cmV0dXJuIG8odGhpcyx0LGFyZ3VtZW50cy5sZW5ndGg+MT9hcmd1bWVudHNbMV06dm9pZCAwKX19KX0sOTA5MTI6ZnVuY3Rpb24odCxlLG4peyJ1c2Ugc3RyaWN0Ijt2YXIgcj1uKDE0MDQ0KSxvPW4oMzAwMjUpLmZpbmRJbmRleCxpPW4oNzY1MTMpLGE9ImZpbmRJbmRleCIsYz0hMDthIGluW10mJkFycmF5KDEpLmZpbmRJbmRleCgoZnVuY3Rpb24oKXtjPSExfSkpLHIoe3RhcmdldDoiQXJyYXkiLHByb3RvOiEwLGZvcmNlZDpjfSx7ZmluZEluZGV4OmZ1bmN0aW9uKHQpe3JldHVybiBvKHRoaXMsdCxhcmd1bWVudHMubGVuZ3RoPjE/YXJndW1lbnRzWzFdOnZvaWQgMCl9fSksaShhKX0sMzMxOTU6ZnVuY3Rpb24odCxlLG4peyJ1c2Ugc3RyaWN0Ijt2YXIgcj1uKDE0MDQ0KSxvPW4oMzAwMjUpLmZpbmQsaT1uKDc2NTEzKSxhPSJmaW5kIixjPSEwO2EgaW5bXSYmQXJyYXkoMSkuZmluZCgoZnVuY3Rpb24oKXtjPSExfSkpLHIoe3RhcmdldDoiQXJyYXkiLHByb3RvOiEwLGZvcmNlZDpjfSx7ZmluZDpmdW5jdGlvbih0KXtyZXR1cm4gbyh0aGlzLHQsYXJndW1lbnRzLmxlbmd0aD4xP2FyZ3VtZW50c1sxXTp2b2lkIDApfX0pLGkoYSl9LDc5MjI3OmZ1bmN0aW9uKHQsZSxuKXsidXNlIHN0cmljdCI7dmFyIHI9bigxNDA0NCksbz1uKDgwNjY1KSxpPW4oMTkyMDkpLGE9bigyNzg4NCksYz1uKDg2NDcwKSxzPW4oNzAwOSk7cih7dGFyZ2V0OiJBcnJheSIscHJvdG86ITB9LHtmbGF0TWFwOmZ1bmN0aW9uKHQpe3ZhciBlLG49aSh0aGlzKSxyPWEobi5sZW5ndGgpO3JldHVybiBjKHQpLChlPXMobiwwKSkubGVuZ3RoPW8oZSxuLG4sciwwLDEsdCxhcmd1bWVudHMubGVuZ3RoPjE/YXJndW1lbnRzWzFdOnZvaWQgMCksZX19KX0sMjgyMDM6ZnVuY3Rpb24odCxlLG4peyJ1c2Ugc3RyaWN0Ijt2YXIgcj1uKDE0MDQ0KSxvPW4oODA2NjUpLGk9bigxOTIwOSksYT1uKDI3ODg0KSxjPW4oNDM0MTYpLHM9big3MDA5KTtyKHt0YXJnZXQ6IkFycmF5Iixwcm90bzohMH0se2ZsYXQ6ZnVuY3Rpb24oKXt2YXIgdD1hcmd1bWVudHMubGVuZ3RoP2FyZ3VtZW50c1swXTp2b2lkIDAsZT1pKHRoaXMpLG49YShlLmxlbmd0aCkscj1zKGUsMCk7cmV0dXJuIHIubGVuZ3RoPW8ocixlLGUsbiwwLHZvaWQgMD09PXQ/MTpjKHQpKSxyfX0pfSw0MzU5MTpmdW5jdGlvbih0LGUsbil7InVzZSBzdHJpY3QiO3ZhciByPW4oMTQwNDQpLG89bigzMTM2OCk7cih7dGFyZ2V0OiJBcnJheSIscHJvdG86ITAsZm9yY2VkOltdLmZvckVhY2ghPW99LHtmb3JFYWNoOm99KX0sNzQ1Mzg6ZnVuY3Rpb24odCxlLG4pe3ZhciByPW4oMTQwNDQpLG89big4NTE2Nik7cih7dGFyZ2V0OiJBcnJheSIsc3RhdDohMCxmb3JjZWQ6IW4oNDc5NikoKGZ1bmN0aW9uKHQpe0FycmF5LmZyb20odCl9KSl9LHtmcm9tOm99KX0sMjIyNzc6ZnVuY3Rpb24odCxlLG4peyJ1c2Ugc3RyaWN0Ijt2YXIgcj1uKDE0MDQ0KSxvPW4oODU4MDMpLmluY2x1ZGVzLGk9big3NjUxMyk7cih7dGFyZ2V0OiJBcnJheSIscHJvdG86ITB9LHtpbmNsdWRlczpmdW5jdGlvbih0KXtyZXR1cm4gbyh0aGlzLHQsYXJndW1lbnRzLmxlbmd0aD4xP2FyZ3VtZW50c1sxXTp2b2lkIDApfX0pLGkoImluY2x1ZGVzIil9LDI0MTI5OmZ1bmN0aW9uKHQsZSxuKXsidXNlIHN0cmljdCI7dmFyIHI9bigxNDA0NCksbz1uKDg1ODAzKS5pbmRleE9mLGk9bigyMjkwOSksYT1bXS5pbmRleE9mLGM9ISFhJiYxL1sxXS5pbmRleE9mKDEsLTApPDAscz1pKCJpbmRleE9mIik7cih7dGFyZ2V0OiJBcnJheSIscHJvdG86ITAsZm9yY2VkOmN8fHN9LHtpbmRleE9mOmZ1bmN0aW9uKHQpe3JldHVybiBjP2EuYXBwbHkodGhpcyxhcmd1bWVudHMpfHwwOm8odGhpcyx0LGFyZ3VtZW50cy5sZW5ndGg+MT9hcmd1bWVudHNbMV06dm9pZCAwKX19KX0sMjEyNzpmdW5jdGlvbih0LGUsbil7bigxNDA0NCkoe3RhcmdldDoiQXJyYXkiLHN0YXQ6ITB9LHtpc0FycmF5Om4oNjE5OSl9KX0sNTAwNjM6ZnVuY3Rpb24odCxlLG4peyJ1c2Ugc3RyaWN0Ijt2YXIgcj1uKDk1NzMpLG89big3NjUxMyksaT1uKDEyMzUpLGE9big4OTgyNyksYz1uKDQ2MDYxKSxzPSJBcnJheSBJdGVyYXRvciIsdT1hLnNldCxsPWEuZ2V0dGVyRm9yKHMpO3QuZXhwb3J0cz1jKEFycmF5LCJBcnJheSIsKGZ1bmN0aW9uKHQsZSl7dSh0aGlzLHt0eXBlOnMsdGFyZ2V0OnIodCksaW5kZXg6MCxraW5kOmV9KX0pLChmdW5jdGlvbigpe3ZhciB0PWwodGhpcyksZT10LnRhcmdldCxuPXQua2luZCxyPXQuaW5kZXgrKztyZXR1cm4hZXx8cj49ZS5sZW5ndGg/KHQudGFyZ2V0PXZvaWQgMCx7dmFsdWU6dm9pZCAwLGRvbmU6ITB9KToia2V5cyI9PW4/e3ZhbHVlOnIsZG9uZTohMX06InZhbHVlcyI9PW4/e3ZhbHVlOmVbcl0sZG9uZTohMX06e3ZhbHVlOltyLGVbcl1dLGRvbmU6ITF9fSksInZhbHVlcyIpLGkuQXJndW1lbnRzPWkuQXJyYXksbygia2V5cyIpLG8oInZhbHVlcyIpLG8oImVudHJpZXMiKX0sNzQxMjA6ZnVuY3Rpb24odCxlLG4peyJ1c2Ugc3RyaWN0Ijt2YXIgcj1uKDE0MDQ0KSxvPW4oMjQ5OCksaT1uKDk1NzMpLGE9bigyMjkwOSksYz1bXS5qb2luLHM9byE9T2JqZWN0LHU9YSgiam9pbiIsIiwiKTtyKHt0YXJnZXQ6IkFycmF5Iixwcm90bzohMCxmb3JjZWQ6c3x8dX0se2pvaW46ZnVuY3Rpb24odCl7cmV0dXJuIGMuY2FsbChpKHRoaXMpLHZvaWQgMD09PXQ/IiwiOnQpfX0pfSw5NDk2MzpmdW5jdGlvbih0LGUsbil7dmFyIHI9bigxNDA0NCksbz1uKDQ5MjQ5KTtyKHt0YXJnZXQ6IkFycmF5Iixwcm90bzohMCxmb3JjZWQ6byE9PVtdLmxhc3RJbmRleE9mfSx7bGFzdEluZGV4T2Y6b30pfSwyNzM4ODpmdW5jdGlvbih0LGUsbil7InVzZSBzdHJpY3QiO3ZhciByPW4oMTQwNDQpLG89bigzMDAyNSkubWFwLGk9bigzMjE4NyksYT1uKDYxOTYzKSgibWFwIiksYz1hJiYhaSgoZnVuY3Rpb24oKXtbXS5tYXAuY2FsbCh7bGVuZ3RoOi0xLDA6MX0sKGZ1bmN0aW9uKHQpe3Rocm93IHR9KSl9KSk7cih7dGFyZ2V0OiJBcnJheSIscHJvdG86ITAsZm9yY2VkOiFhfHwhY30se21hcDpmdW5jdGlvbih0KXtyZXR1cm4gbyh0aGlzLHQsYXJndW1lbnRzLmxlbmd0aD4xP2FyZ3VtZW50c1sxXTp2b2lkIDApfX0pfSw2OTk4ODpmdW5jdGlvbih0LGUsbil7InVzZSBzdHJpY3QiO3ZhciByPW4oMTQwNDQpLG89bigzMjE4NyksaT1uKDU4ODEwKTtyKHt0YXJnZXQ6IkFycmF5IixzdGF0OiEwLGZvcmNlZDpvKChmdW5jdGlvbigpe2Z1bmN0aW9uIHQoKXt9cmV0dXJuIShBcnJheS5vZi5jYWxsKHQpaW5zdGFuY2VvZiB0KX0pKX0se29mOmZ1bmN0aW9uKCl7Zm9yKHZhciB0PTAsZT1hcmd1bWVudHMubGVuZ3RoLG49bmV3KCJmdW5jdGlvbiI9PXR5cGVvZiB0aGlzP3RoaXM6QXJyYXkpKGUpO2U+dDspaShuLHQsYXJndW1lbnRzW3QrK10pO3JldHVybiBuLmxlbmd0aD1lLG59fSl9LDQ1NTI4OmZ1bmN0aW9uKHQsZSxuKXsidXNlIHN0cmljdCI7dmFyIHI9bigxNDA0NCksbz1uKDEyMzY2KS5yaWdodDtyKHt0YXJnZXQ6IkFycmF5Iixwcm90bzohMCxmb3JjZWQ6bigyMjkwOSkoInJlZHVjZVJpZ2h0Iil9LHtyZWR1Y2VSaWdodDpmdW5jdGlvbih0KXtyZXR1cm4gbyh0aGlzLHQsYXJndW1lbnRzLmxlbmd0aCxhcmd1bWVudHMubGVuZ3RoPjE/YXJndW1lbnRzWzFdOnZvaWQgMCl9fSl9LDgwNTIyOmZ1bmN0aW9uKHQsZSxuKXsidXNlIHN0cmljdCI7dmFyIHI9bigxNDA0NCksbz1uKDEyMzY2KS5sZWZ0O3Ioe3RhcmdldDoiQXJyYXkiLHByb3RvOiEwLGZvcmNlZDpuKDIyOTA5KSgicmVkdWNlIil9LHtyZWR1Y2U6ZnVuY3Rpb24odCl7cmV0dXJuIG8odGhpcyx0LGFyZ3VtZW50cy5sZW5ndGgsYXJndW1lbnRzLmxlbmd0aD4xP2FyZ3VtZW50c1sxXTp2b2lkIDApfX0pfSw4MDExNjpmdW5jdGlvbih0LGUsbil7InVzZSBzdHJpY3QiO3ZhciByPW4oMTQwNDQpLG89big2MTk5KSxpPVtdLnJldmVyc2UsYT1bMSwyXTtyKHt0YXJnZXQ6IkFycmF5Iixwcm90bzohMCxmb3JjZWQ6U3RyaW5nKGEpPT09U3RyaW5nKGEucmV2ZXJzZSgpKX0se3JldmVyc2U6ZnVuY3Rpb24oKXtyZXR1cm4gbyh0aGlzKSYmKHRoaXMubGVuZ3RoPXRoaXMubGVuZ3RoKSxpLmNhbGwodGhpcyl9fSl9LDI5MTEwOmZ1bmN0aW9uKHQsZSxuKXsidXNlIHN0cmljdCI7dmFyIHI9bigxNDA0NCksbz1uKDEwNTkyKSxpPW4oNjE5OSksYT1uKDc2OTc2KSxjPW4oMjc4ODQpLHM9big5NTczKSx1PW4oNTg4MTApLGw9big2MTk2MyksZj1uKDIzNzI0KSgic3BlY2llcyIpLGQ9W10uc2xpY2UscD1NYXRoLm1heDtyKHt0YXJnZXQ6IkFycmF5Iixwcm90bzohMCxmb3JjZWQ6IWwoInNsaWNlIil9LHtzbGljZTpmdW5jdGlvbih0LGUpe3ZhciBuLHIsbCxoPXModGhpcyksdj1jKGgubGVuZ3RoKSxnPWEodCx2KSx5PWEodm9pZCAwPT09ZT92OmUsdik7aWYoaShoKSYmKCJmdW5jdGlvbiIhPXR5cGVvZihuPWguY29uc3RydWN0b3IpfHxuIT09QXJyYXkmJiFpKG4ucHJvdG90eXBlKT9vKG4pJiZudWxsPT09KG49bltmXSkmJihuPXZvaWQgMCk6bj12b2lkIDAsbj09PUFycmF5fHx2b2lkIDA9PT1uKSlyZXR1cm4gZC5jYWxsKGgsZyx5KTtmb3Iocj1uZXcodm9pZCAwPT09bj9BcnJheTpuKShwKHktZywwKSksbD0wO2c8eTtnKyssbCsrKWcgaW4gaCYmdShyLGwsaFtnXSk7cmV0dXJuIHIubGVuZ3RoPWwscn19KX0sODU1OTQ6ZnVuY3Rpb24odCxlLG4peyJ1c2Ugc3RyaWN0Ijt2YXIgcj1uKDE0MDQ0KSxvPW4oMzAwMjUpLnNvbWU7cih7dGFyZ2V0OiJBcnJheSIscHJvdG86ITAsZm9yY2VkOm4oMjI5MDkpKCJzb21lIil9LHtzb21lOmZ1bmN0aW9uKHQpe3JldHVybiBvKHRoaXMsdCxhcmd1bWVudHMubGVuZ3RoPjE/YXJndW1lbnRzWzFdOnZvaWQgMCl9fSl9LDY3ODEyOmZ1bmN0aW9uKHQsZSxuKXsidXNlIHN0cmljdCI7dmFyIHI9bigxNDA0NCksbz1uKDg2NDcwKSxpPW4oMTkyMDkpLGE9bigzMjE4NyksYz1uKDIyOTA5KSxzPVtdLHU9cy5zb3J0LGw9YSgoZnVuY3Rpb24oKXtzLnNvcnQodm9pZCAwKX0pKSxmPWEoKGZ1bmN0aW9uKCl7cy5zb3J0KG51bGwpfSkpLGQ9Yygic29ydCIpO3Ioe3RhcmdldDoiQXJyYXkiLHByb3RvOiEwLGZvcmNlZDpsfHwhZnx8ZH0se3NvcnQ6ZnVuY3Rpb24odCl7cmV0dXJuIHZvaWQgMD09PXQ/dS5jYWxsKGkodGhpcykpOnUuY2FsbChpKHRoaXMpLG8odCkpfX0pfSw4NjIxNDpmdW5jdGlvbih0LGUsbil7big2NzUzOCkoIkFycmF5Iil9LDMzNzkyOmZ1bmN0aW9uKHQsZSxuKXsidXNlIHN0cmljdCI7dmFyIHI9bigxNDA0NCksbz1uKDc2OTc2KSxpPW4oNDM0MTYpLGE9bigyNzg4NCksYz1uKDE5MjA5KSxzPW4oNzAwOSksdT1uKDU4ODEwKSxsPW4oNjE5NjMpLGY9TWF0aC5tYXgsZD1NYXRoLm1pbixwPTkwMDcxOTkyNTQ3NDA5OTEsaD0iTWF4aW11bSBhbGxvd2VkIGxlbmd0aCBleGNlZWRlZCI7cih7dGFyZ2V0OiJBcnJheSIscHJvdG86ITAsZm9yY2VkOiFsKCJzcGxpY2UiKX0se3NwbGljZTpmdW5jdGlvbih0LGUpe3ZhciBuLHIsbCx2LGcseSxtPWModGhpcyksYj1hKG0ubGVuZ3RoKSx4PW8odCxiKSx3PWFyZ3VtZW50cy5sZW5ndGg7aWYoMD09PXc/bj1yPTA6MT09PXc/KG49MCxyPWIteCk6KG49dy0yLHI9ZChmKGkoZSksMCksYi14KSksYituLXI+cCl0aHJvdyBUeXBlRXJyb3IoaCk7Zm9yKGw9cyhtLHIpLHY9MDt2PHI7disrKShnPXgrdilpbiBtJiZ1KGwsdixtW2ddKTtpZihsLmxlbmd0aD1yLG48cil7Zm9yKHY9eDt2PGItcjt2KyspeT12K24sKGc9dityKWluIG0/bVt5XT1tW2ddOmRlbGV0ZSBtW3ldO2Zvcih2PWI7dj5iLXIrbjt2LS0pZGVsZXRlIG1bdi0xXX1lbHNlIGlmKG4+cilmb3Iodj1iLXI7dj54O3YtLSl5PXYrbi0xLChnPXYrci0xKWluIG0/bVt5XT1tW2ddOmRlbGV0ZSBtW3ldO2Zvcih2PTA7djxuO3YrKyltW3YreF09YXJndW1lbnRzW3YrMl07cmV0dXJuIG0ubGVuZ3RoPWItcituLGx9fSl9LDcxODQ2OmZ1bmN0aW9uKHQsZSxuKXtuKDc2NTEzKSgiZmxhdE1hcCIpfSw3MDE0NjpmdW5jdGlvbih0LGUsbil7big3NjUxMykoImZsYXQiKX0sNDUxNTQ6ZnVuY3Rpb24odCxlLG4pe3ZhciByPW4oMTQwNDQpLG89big4MjgzNSk7cih7Z2xvYmFsOiEwLGZvcmNlZDohbig3MzA3NCkuTkFUSVZFX0FSUkFZX0JVRkZFUn0se0RhdGFWaWV3Om8uRGF0YVZpZXd9KX0sNDE2MzI6ZnVuY3Rpb24odCxlLG4pe24oMTQwNDQpKHt0YXJnZXQ6IkRhdGUiLHN0YXQ6ITB9LHtub3c6ZnVuY3Rpb24oKXtyZXR1cm4obmV3IERhdGUpLmdldFRpbWUoKX19KX0sNDAwNDU6ZnVuY3Rpb24odCxlLG4pe3ZhciByPW4oMTQwNDQpLG89big3OTE2Nyk7cih7dGFyZ2V0OiJEYXRlIixwcm90bzohMCxmb3JjZWQ6RGF0ZS5wcm90b3R5cGUudG9JU09TdHJpbmchPT1vfSx7dG9JU09TdHJpbmc6b30pfSwzNjIzMzpmdW5jdGlvbih0LGUsbil7InVzZSBzdHJpY3QiO3ZhciByPW4oMTQwNDQpLG89bigzMjE4NyksaT1uKDE5MjA5KSxhPW4oNTM0OTgpO3Ioe3RhcmdldDoiRGF0ZSIscHJvdG86ITAsZm9yY2VkOm8oKGZ1bmN0aW9uKCl7cmV0dXJuIG51bGwhPT1uZXcgRGF0ZShOYU4pLnRvSlNPTigpfHwxIT09RGF0ZS5wcm90b3R5cGUudG9KU09OLmNhbGwoe3RvSVNPU3RyaW5nOmZ1bmN0aW9uKCl7cmV0dXJuIDF9fSl9KSl9LHt0b0pTT046ZnVuY3Rpb24odCl7dmFyIGU9aSh0aGlzKSxuPWEoZSk7cmV0dXJuIm51bWJlciIhPXR5cGVvZiBufHxpc0Zpbml0ZShuKT9lLnRvSVNPU3RyaW5nKCk6bnVsbH19KX0sODQwNzpmdW5jdGlvbih0LGUsbil7dmFyIHI9big2Njk3MSksbz1uKDc2OTc0KSxpPW4oMjM3MjQpKCJ0b1ByaW1pdGl2ZSIpLGE9RGF0ZS5wcm90b3R5cGU7aSBpbiBhfHxyKGEsaSxvKX0sMjEzNzY6ZnVuY3Rpb24odCxlLG4pe3ZhciByPW4oOTI5MTMpLG89RGF0ZS5wcm90b3R5cGUsaT0iSW52YWxpZCBEYXRlIixhPSJ0b1N0cmluZyIsYz1vLnRvU3RyaW5nLHM9by5nZXRUaW1lO25ldyBEYXRlKE5hTikrIiIhPWkmJnIobyxhLChmdW5jdGlvbigpe3ZhciB0PXMuY2FsbCh0aGlzKTtyZXR1cm4gdD09dD9jLmNhbGwodGhpcyk6aX0pKX0sOTY0OTg6ZnVuY3Rpb24odCxlLG4pe24oMTQwNDQpKHt0YXJnZXQ6IkZ1bmN0aW9uIixwcm90bzohMH0se2JpbmQ6big3MzczOSl9KX0sNzU4OTQ6ZnVuY3Rpb24odCxlLG4peyJ1c2Ugc3RyaWN0Ijt2YXIgcj1uKDEwNTkyKSxvPW4oMzc2MjApLGk9big2NDk2NSksYT1uKDIzNzI0KSgiaGFzSW5zdGFuY2UiKSxjPUZ1bmN0aW9uLnByb3RvdHlwZTthIGluIGN8fG8uZihjLGEse3ZhbHVlOmZ1bmN0aW9uKHQpe2lmKCJmdW5jdGlvbiIhPXR5cGVvZiB0aGlzfHwhcih0KSlyZXR1cm4hMTtpZighcih0aGlzLnByb3RvdHlwZSkpcmV0dXJuIHQgaW5zdGFuY2VvZiB0aGlzO2Zvcig7dD1pKHQpOylpZih0aGlzLnByb3RvdHlwZT09PXQpcmV0dXJuITA7cmV0dXJuITF9fSl9LDIyNDQyOmZ1bmN0aW9uKHQsZSxuKXt2YXIgcj1uKDYyNTU2KSxvPW4oMzc2MjApLmYsaT1GdW5jdGlvbi5wcm90b3R5cGUsYT1pLnRvU3RyaW5nLGM9L15ccypmdW5jdGlvbiAoW14gKF0qKS8scz0ibmFtZSI7ciYmIShzIGluIGkpJiZvKGkscyx7Y29uZmlndXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3RyeXtyZXR1cm4gYS5jYWxsKHRoaXMpLm1hdGNoKGMpWzFdfWNhdGNoKHQpe3JldHVybiIifX19KX0sNzE2MjI6ZnVuY3Rpb24odCxlLG4pe24oMTQwNDQpKHtnbG9iYWw6ITB9LHtnbG9iYWxUaGlzOm4oODk1NTgpfSl9LDE2NTA6ZnVuY3Rpb24odCxlLG4pe3ZhciByPW4oMTQwNDQpLG89big3NzAxKSxpPW4oMzIxODcpLGE9bygiSlNPTiIsInN0cmluZ2lmeSIpLGM9L1tcdUQ4MDAtXHVERkZGXS9nLHM9L15bXHVEODAwLVx1REJGRl0kLyx1PS9eW1x1REMwMC1cdURGRkZdJC8sbD1mdW5jdGlvbih0LGUsbil7dmFyIHI9bi5jaGFyQXQoZS0xKSxvPW4uY2hhckF0KGUrMSk7cmV0dXJuIHMudGVzdCh0KSYmIXUudGVzdChvKXx8dS50ZXN0KHQpJiYhcy50ZXN0KHIpPyJcXHUiK3QuY2hhckNvZGVBdCgwKS50b1N0cmluZygxNik6dH0sZj1pKChmdW5jdGlvbigpe3JldHVybiciXFx1ZGYwNlxcdWQ4MzQiJyE9PWEoIlx1ZGYwNlx1ZDgzNCIpfHwnIlxcdWRlYWQiJyE9PWEoIlx1ZGVhZCIpfSkpO2EmJnIoe3RhcmdldDoiSlNPTiIsc3RhdDohMCxmb3JjZWQ6Zn0se3N0cmluZ2lmeTpmdW5jdGlvbih0LGUsbil7dmFyIHI9YS5hcHBseShudWxsLGFyZ3VtZW50cyk7cmV0dXJuInN0cmluZyI9PXR5cGVvZiByP3IucmVwbGFjZShjLGwpOnJ9fSl9LDgxMTA0OmZ1bmN0aW9uKHQsZSxuKXt2YXIgcj1uKDg5NTU4KTtuKDUxMTI4KShyLkpTT04sIkpTT04iLCEwKX0sOTQ5MDY6ZnVuY3Rpb24odCxlLG4peyJ1c2Ugc3RyaWN0Ijt2YXIgcj1uKDgxOTUxKSxvPW4oNjQ1MCk7dC5leHBvcnRzPXIoIk1hcCIsKGZ1bmN0aW9uKHQpe3JldHVybiBmdW5jdGlvbigpe3JldHVybiB0KHRoaXMsYXJndW1lbnRzLmxlbmd0aD9hcmd1bWVudHNbMF06dm9pZCAwKX19KSxvKX0sMjEwMzI6ZnVuY3Rpb24odCxlLG4pe3ZhciByPW4oMTQwNDQpLG89bigyMTkzMiksaT1NYXRoLmFjb3NoLGE9TWF0aC5sb2csYz1NYXRoLnNxcnQscz1NYXRoLkxOMjtyKHt0YXJnZXQ6Ik1hdGgiLHN0YXQ6ITAsZm9yY2VkOiFpfHw3MTAhPU1hdGguZmxvb3IoaShOdW1iZXIuTUFYX1ZBTFVFKSl8fGkoMS8wKSE9MS8wfSx7YWNvc2g6ZnVuY3Rpb24odCl7cmV0dXJuKHQ9K3QpPDE/TmFOOnQ+OTQ5MDYyNjUuNjI0MjUxNTY/YSh0KStzOm8odC0xK2ModC0xKSpjKHQrMSkpfX0pfSwzNzkzNjpmdW5jdGlvbih0LGUsbil7dmFyIHI9bigxNDA0NCksbz1NYXRoLmFzaW5oLGk9TWF0aC5sb2csYT1NYXRoLnNxcnQ7cih7dGFyZ2V0OiJNYXRoIixzdGF0OiEwLGZvcmNlZDohKG8mJjEvbygwKT4wKX0se2FzaW5oOmZ1bmN0aW9uIHQoZSl7cmV0dXJuIGlzRmluaXRlKGU9K2UpJiYwIT1lP2U8MD8tdCgtZSk6aShlK2EoZSplKzEpKTplfX0pfSw5Mzk5NTpmdW5jdGlvbih0LGUsbil7dmFyIHI9bigxNDA0NCksbz1NYXRoLmF0YW5oLGk9TWF0aC5sb2c7cih7dGFyZ2V0OiJNYXRoIixzdGF0OiEwLGZvcmNlZDohKG8mJjEvbygtMCk8MCl9LHthdGFuaDpmdW5jdGlvbih0KXtyZXR1cm4gMD09KHQ9K3QpP3Q6aSgoMSt0KS8oMS10KSkvMn19KX0sMTMzOTM6ZnVuY3Rpb24odCxlLG4pe3ZhciByPW4oMTQwNDQpLG89bigzODc4NyksaT1NYXRoLmFicyxhPU1hdGgucG93O3Ioe3RhcmdldDoiTWF0aCIsc3RhdDohMH0se2NicnQ6ZnVuY3Rpb24odCl7cmV0dXJuIG8odD0rdCkqYShpKHQpLDEvMyl9fSl9LDExMjgxOmZ1bmN0aW9uKHQsZSxuKXt2YXIgcj1uKDE0MDQ0KSxvPU1hdGguZmxvb3IsaT1NYXRoLmxvZyxhPU1hdGguTE9HMkU7cih7dGFyZ2V0OiJNYXRoIixzdGF0OiEwfSx7Y2x6MzI6ZnVuY3Rpb24odCl7cmV0dXJuKHQ+Pj49MCk/MzEtbyhpKHQrLjUpKmEpOjMyfX0pfSwzODAzNjpmdW5jdGlvbih0LGUsbil7dmFyIHI9bigxNDA0NCksbz1uKDcyOTcwKSxpPU1hdGguY29zaCxhPU1hdGguYWJzLGM9TWF0aC5FO3Ioe3RhcmdldDoiTWF0aCIsc3RhdDohMCxmb3JjZWQ6IWl8fGkoNzEwKT09PTEvMH0se2Nvc2g6ZnVuY3Rpb24odCl7dmFyIGU9byhhKHQpLTEpKzE7cmV0dXJuKGUrMS8oZSpjKmMpKSooYy8yKX19KX0sMTEzODpmdW5jdGlvbih0LGUsbil7dmFyIHI9bigxNDA0NCksbz1uKDcyOTcwKTtyKHt0YXJnZXQ6Ik1hdGgiLHN0YXQ6ITAsZm9yY2VkOm8hPU1hdGguZXhwbTF9LHtleHBtMTpvfSl9LDQ2MDc4OmZ1bmN0aW9uKHQsZSxuKXtuKDE0MDQ0KSh7dGFyZ2V0OiJNYXRoIixzdGF0OiEwfSx7ZnJvdW5kOm4oNTMyNTEpfSl9LDMwMDgzOmZ1bmN0aW9uKHQsZSxuKXt2YXIgcj1uKDE0MDQ0KSxvPU1hdGguaHlwb3QsaT1NYXRoLmFicyxhPU1hdGguc3FydDtyKHt0YXJnZXQ6Ik1hdGgiLHN0YXQ6ITAsZm9yY2VkOiEhbyYmbygxLzAsTmFOKSE9PTEvMH0se2h5cG90OmZ1bmN0aW9uKHQsZSl7Zm9yKHZhciBuLHIsbz0wLGM9MCxzPWFyZ3VtZW50cy5sZW5ndGgsdT0wO2M8czspdTwobj1pKGFyZ3VtZW50c1tjKytdKSk/KG89byoocj11L24pKnIrMSx1PW4pOm8rPW4+MD8ocj1uL3UpKnI6bjtyZXR1cm4gdT09PTEvMD8xLzA6dSphKG8pfX0pfSw0NzM4MzpmdW5jdGlvbih0LGUsbil7dmFyIHI9bigxNDA0NCksbz1uKDMyMTg3KSxpPU1hdGguaW11bDtyKHt0YXJnZXQ6Ik1hdGgiLHN0YXQ6ITAsZm9yY2VkOm8oKGZ1bmN0aW9uKCl7cmV0dXJuLTUhPWkoNDI5NDk2NzI5NSw1KXx8MiE9aS5sZW5ndGh9KSl9LHtpbXVsOmZ1bmN0aW9uKHQsZSl7dmFyIG49NjU1MzUscj0rdCxvPStlLGk9biZyLGE9biZvO3JldHVybiAwfGkqYSsoKG4mcj4+PjE2KSphK2kqKG4mbz4+PjE2KTw8MTY+Pj4wKX19KX0sNzE1NTg6ZnVuY3Rpb24odCxlLG4pe3ZhciByPW4oMTQwNDQpLG89TWF0aC5sb2csaT1NYXRoLkxPRzEwRTtyKHt0YXJnZXQ6Ik1hdGgiLHN0YXQ6ITB9LHtsb2cxMDpmdW5jdGlvbih0KXtyZXR1cm4gbyh0KSppfX0pfSw5OTIxODpmdW5jdGlvbih0LGUsbil7bigxNDA0NCkoe3RhcmdldDoiTWF0aCIsc3RhdDohMH0se2xvZzFwOm4oMjE5MzIpfSl9LDk4OTc4OmZ1bmN0aW9uKHQsZSxuKXt2YXIgcj1uKDE0MDQ0KSxvPU1hdGgubG9nLGk9TWF0aC5MTjI7cih7dGFyZ2V0OiJNYXRoIixzdGF0OiEwfSx7bG9nMjpmdW5jdGlvbih0KXtyZXR1cm4gbyh0KS9pfX0pfSw4MDY5OmZ1bmN0aW9uKHQsZSxuKXtuKDE0MDQ0KSh7dGFyZ2V0OiJNYXRoIixzdGF0OiEwfSx7c2lnbjpuKDM4Nzg3KX0pfSw3MDIwNDpmdW5jdGlvbih0LGUsbil7dmFyIHI9bigxNDA0NCksbz1uKDMyMTg3KSxpPW4oNzI5NzApLGE9TWF0aC5hYnMsYz1NYXRoLmV4cCxzPU1hdGguRTtyKHt0YXJnZXQ6Ik1hdGgiLHN0YXQ6ITAsZm9yY2VkOm8oKGZ1bmN0aW9uKCl7cmV0dXJuLTJlLTE3IT1NYXRoLnNpbmgoLTJlLTE3KX0pKX0se3Npbmg6ZnVuY3Rpb24odCl7cmV0dXJuIGEodD0rdCk8MT8oaSh0KS1pKC10KSkvMjooYyh0LTEpLWMoLXQtMSkpKihzLzIpfX0pfSw4NTc1ODpmdW5jdGlvbih0LGUsbil7dmFyIHI9bigxNDA0NCksbz1uKDcyOTcwKSxpPU1hdGguZXhwO3Ioe3RhcmdldDoiTWF0aCIsc3RhdDohMH0se3Rhbmg6ZnVuY3Rpb24odCl7dmFyIGU9byh0PSt0KSxuPW8oLXQpO3JldHVybiBlPT0xLzA/MTpuPT0xLzA/LTE6KGUtbikvKGkodCkraSgtdCkpfX0pfSwxMTc3MzpmdW5jdGlvbih0LGUsbil7big1MTEyOCkoTWF0aCwiTWF0aCIsITApfSwxNTc2MzpmdW5jdGlvbih0LGUsbil7dmFyIHI9bigxNDA0NCksbz1NYXRoLmNlaWwsaT1NYXRoLmZsb29yO3Ioe3RhcmdldDoiTWF0aCIsc3RhdDohMH0se3RydW5jOmZ1bmN0aW9uKHQpe3JldHVybih0PjA/aTpvKSh0KX19KX0sNzE4Mjc6ZnVuY3Rpb24odCxlLG4peyJ1c2Ugc3RyaWN0Ijt2YXIgcj1uKDYyNTU2KSxvPW4oODk1NTgpLGk9big2NDUwNCksYT1uKDkyOTEzKSxjPW4oNzYyOTgpLHM9bigyNDU5NCksdT1uKDMwMjcyKSxsPW4oNTM0OTgpLGY9bigzMjE4NyksZD1uKDUwODY4KSxwPW4oMTMzMzQpLmYsaD1uKDk3MjU3KS5mLHY9bigzNzYyMCkuZixnPW4oODIzNTApLnRyaW0seT0iTnVtYmVyIixtPW8uTnVtYmVyLGI9bS5wcm90b3R5cGUseD1zKGQoYikpPT15LHc9ZnVuY3Rpb24odCl7dmFyIGUsbixyLG8saSxhLGMscyx1PWwodCwhMSk7aWYoInN0cmluZyI9PXR5cGVvZiB1JiZ1Lmxlbmd0aD4yKWlmKDQzPT09KGU9KHU9Zyh1KSkuY2hhckNvZGVBdCgwKSl8fDQ1PT09ZSl7aWYoODg9PT0obj11LmNoYXJDb2RlQXQoMikpfHwxMjA9PT1uKXJldHVybiBOYU59ZWxzZSBpZig0OD09PWUpe3N3aXRjaCh1LmNoYXJDb2RlQXQoMSkpe2Nhc2UgNjY6Y2FzZSA5ODpyPTIsbz00OTticmVhaztjYXNlIDc5OmNhc2UgMTExOnI9OCxvPTU1O2JyZWFrO2RlZmF1bHQ6cmV0dXJuK3V9Zm9yKGE9KGk9dS5zbGljZSgyKSkubGVuZ3RoLGM9MDtjPGE7YysrKWlmKChzPWkuY2hhckNvZGVBdChjKSk8NDh8fHM+bylyZXR1cm4gTmFOO3JldHVybiBwYXJzZUludChpLHIpfXJldHVybit1fTtpZihpKHksIW0oIiAwbzEiKXx8IW0oIjBiMSIpfHxtKCIrMHgxIikpKXtmb3IodmFyIEUsaj1mdW5jdGlvbih0KXt2YXIgZT1hcmd1bWVudHMubGVuZ3RoPDE/MDp0LG49dGhpcztyZXR1cm4gbiBpbnN0YW5jZW9mIGomJih4P2YoKGZ1bmN0aW9uKCl7Yi52YWx1ZU9mLmNhbGwobil9KSk6cyhuKSE9eSk/dShuZXcgbSh3KGUpKSxuLGopOncoZSl9LEM9cj9wKG0pOiJNQVhfVkFMVUUsTUlOX1ZBTFVFLE5hTixORUdBVElWRV9JTkZJTklUWSxQT1NJVElWRV9JTkZJTklUWSxFUFNJTE9OLGlzRmluaXRlLGlzSW50ZWdlcixpc05hTixpc1NhZmVJbnRlZ2VyLE1BWF9TQUZFX0lOVEVHRVIsTUlOX1NBRkVfSU5URUdFUixwYXJzZUZsb2F0LHBhcnNlSW50LGlzSW50ZWdlciIuc3BsaXQoIiwiKSxrPTA7Qy5sZW5ndGg+aztrKyspYyhtLEU9Q1trXSkmJiFjKGosRSkmJnYoaixFLGgobSxFKSk7ai5wcm90b3R5cGU9YixiLmNvbnN0cnVjdG9yPWosYShvLHksail9fSwyNjA2MzpmdW5jdGlvbih0LGUsbil7bigxNDA0NCkoe3RhcmdldDoiTnVtYmVyIixzdGF0OiEwfSx7RVBTSUxPTjpNYXRoLnBvdygyLC01Mil9KX0sOTY3OmZ1bmN0aW9uKHQsZSxuKXtuKDE0MDQ0KSh7dGFyZ2V0OiJOdW1iZXIiLHN0YXQ6ITB9LHtpc0Zpbml0ZTpuKDg5NTQyKX0pfSwzMzEwMDpmdW5jdGlvbih0LGUsbil7bigxNDA0NCkoe3RhcmdldDoiTnVtYmVyIixzdGF0OiEwfSx7aXNJbnRlZ2VyOm4oMzgyNTcpfSl9LDQxOTI4OmZ1bmN0aW9uKHQsZSxuKXtuKDE0MDQ0KSh7dGFyZ2V0OiJOdW1iZXIiLHN0YXQ6ITB9LHtpc05hTjpmdW5jdGlvbih0KXtyZXR1cm4gdCE9dH19KX0sMTU4Njk6ZnVuY3Rpb24odCxlLG4pe3ZhciByPW4oMTQwNDQpLG89bigzODI1NyksaT1NYXRoLmFicztyKHt0YXJnZXQ6Ik51bWJlciIsc3RhdDohMH0se2lzU2FmZUludGVnZXI6ZnVuY3Rpb24odCl7cmV0dXJuIG8odCkmJmkodCk8PTkwMDcxOTkyNTQ3NDA5OTF9fSl9LDg4NzE1OmZ1bmN0aW9uKHQsZSxuKXtuKDE0MDQ0KSh7dGFyZ2V0OiJOdW1iZXIiLHN0YXQ6ITB9LHtNQVhfU0FGRV9JTlRFR0VSOjkwMDcxOTkyNTQ3NDA5OTF9KX0sMzY5OTU6ZnVuY3Rpb24odCxlLG4pe24oMTQwNDQpKHt0YXJnZXQ6Ik51bWJlciIsc3RhdDohMH0se01JTl9TQUZFX0lOVEVHRVI6LTkwMDcxOTkyNTQ3NDA5OTF9KX0sMTEyMjQ6ZnVuY3Rpb24odCxlLG4pe3ZhciByPW4oMTQwNDQpLG89bigyNDQ5Nyk7cih7dGFyZ2V0OiJOdW1iZXIiLHN0YXQ6ITAsZm9yY2VkOk51bWJlci5wYXJzZUZsb2F0IT1vfSx7cGFyc2VGbG9hdDpvfSl9LDYzNzY1OmZ1bmN0aW9uKHQsZSxuKXt2YXIgcj1uKDE0MDQ0KSxvPW4oNzg0Nik7cih7dGFyZ2V0OiJOdW1iZXIiLHN0YXQ6ITAsZm9yY2VkOk51bWJlci5wYXJzZUludCE9b30se3BhcnNlSW50Om99KX0sMTMwNjQ6ZnVuY3Rpb24odCxlLG4peyJ1c2Ugc3RyaWN0Ijt2YXIgcj1uKDE0MDQ0KSxvPW4oNDM0MTYpLGk9big1Mzk5NyksYT1uKDY4MjUzKSxjPW4oMzIxODcpLHM9MS4udG9GaXhlZCx1PU1hdGguZmxvb3IsbD1mdW5jdGlvbih0LGUsbil7cmV0dXJuIDA9PT1lP246ZSUyPT0xP2wodCxlLTEsbip0KTpsKHQqdCxlLzIsbil9O3Ioe3RhcmdldDoiTnVtYmVyIixwcm90bzohMCxmb3JjZWQ6cyYmKCIwLjAwMCIhPT04ZS01LnRvRml4ZWQoMyl8fCIxIiE9PS45LnRvRml4ZWQoMCl8fCIxLjI1IiE9PTEuMjU1LnRvRml4ZWQoMil8fCIxMDAwMDAwMDAwMDAwMDAwMTI4IiE9PSgweGRlMGI2YjNhNzY0MDA4MCkudG9GaXhlZCgwKSl8fCFjKChmdW5jdGlvbigpe3MuY2FsbCh7fSl9KSl9LHt0b0ZpeGVkOmZ1bmN0aW9uKHQpe3ZhciBlLG4scixjLHM9aSh0aGlzKSxmPW8odCksZD1bMCwwLDAsMCwwLDBdLHA9IiIsaD0iMCIsdj1mdW5jdGlvbih0LGUpe2Zvcih2YXIgbj0tMSxyPWU7KytuPDY7KXIrPXQqZFtuXSxkW25dPXIlMWU3LHI9dShyLzFlNyl9LGc9ZnVuY3Rpb24odCl7Zm9yKHZhciBlPTYsbj0wOy0tZT49MDspbis9ZFtlXSxkW2VdPXUobi90KSxuPW4ldCoxZTd9LHk9ZnVuY3Rpb24oKXtmb3IodmFyIHQ9NixlPSIiOy0tdD49MDspaWYoIiIhPT1lfHwwPT09dHx8MCE9PWRbdF0pe3ZhciBuPVN0cmluZyhkW3RdKTtlPSIiPT09ZT9uOmUrYS5jYWxsKCIwIiw3LW4ubGVuZ3RoKStufXJldHVybiBlfTtpZihmPDB8fGY+MjApdGhyb3cgUmFuZ2VFcnJvcigiSW5jb3JyZWN0IGZyYWN0aW9uIGRpZ2l0cyIpO2lmKHMhPXMpcmV0dXJuIk5hTiI7aWYoczw9LTFlMjF8fHM+PTFlMjEpcmV0dXJuIFN0cmluZyhzKTtpZihzPDAmJihwPSItIixzPS1zKSxzPjFlLTIxKWlmKG49KGU9ZnVuY3Rpb24odCl7Zm9yKHZhciBlPTAsbj10O24+PTQwOTY7KWUrPTEyLG4vPTQwOTY7Zm9yKDtuPj0yOyllKz0xLG4vPTI7cmV0dXJuIGV9KHMqbCgyLDY5LDEpKS02OSk8MD9zKmwoMiwtZSwxKTpzL2woMixlLDEpLG4qPTQ1MDM1OTk2MjczNzA0OTYsKGU9NTItZSk+MCl7Zm9yKHYoMCxuKSxyPWY7cj49NzspdigxZTcsMCksci09Nztmb3IodihsKDEwLHIsMSksMCkscj1lLTE7cj49MjM7KWcoMTw8MjMpLHItPTIzO2coMTw8ciksdigxLDEpLGcoMiksaD15KCl9ZWxzZSB2KDAsbiksdigxPDwtZSwwKSxoPXkoKSthLmNhbGwoIjAiLGYpO3JldHVybiBoPWY+MD9wKygoYz1oLmxlbmd0aCk8PWY/IjAuIithLmNhbGwoIjAiLGYtYykraDpoLnNsaWNlKDAsYy1mKSsiLiIraC5zbGljZShjLWYpKTpwK2h9fSl9LDMyMjkzOmZ1bmN0aW9uKHQsZSxuKXsidXNlIHN0cmljdCI7dmFyIHI9bigxNDA0NCksbz1uKDMyMTg3KSxpPW4oNTM5OTcpLGE9MS4udG9QcmVjaXNpb247cih7dGFyZ2V0OiJOdW1iZXIiLHByb3RvOiEwLGZvcmNlZDpvKChmdW5jdGlvbigpe3JldHVybiIxIiE9PWEuY2FsbCgxLHZvaWQgMCl9KSl8fCFvKChmdW5jdGlvbigpe2EuY2FsbCh7fSl9KSl9LHt0b1ByZWNpc2lvbjpmdW5jdGlvbih0KXtyZXR1cm4gdm9pZCAwPT09dD9hLmNhbGwoaSh0aGlzKSk6YS5jYWxsKGkodGhpcyksdCl9fSl9LDM3NDgxOmZ1bmN0aW9uKHQsZSxuKXt2YXIgcj1uKDE0MDQ0KSxvPW4oNzg2ODUpO3Ioe3RhcmdldDoiT2JqZWN0IixzdGF0OiEwLGZvcmNlZDpPYmplY3QuYXNzaWduIT09b30se2Fzc2lnbjpvfSl9LDQ1NTUwOmZ1bmN0aW9uKHQsZSxuKXtuKDE0MDQ0KSh7dGFyZ2V0OiJPYmplY3QiLHN0YXQ6ITAsc2hhbTohbig2MjU1Nil9LHtjcmVhdGU6big1MDg2OCl9KX0sMTkyNzg6ZnVuY3Rpb24odCxlLG4peyJ1c2Ugc3RyaWN0Ijt2YXIgcj1uKDE0MDQ0KSxvPW4oNjI1NTYpLGk9big0NzgxMiksYT1uKDE5MjA5KSxjPW4oODY0NzApLHM9bigzNzYyMCk7byYmcih7dGFyZ2V0OiJPYmplY3QiLHByb3RvOiEwLGZvcmNlZDppfSx7X19kZWZpbmVHZXR0ZXJfXzpmdW5jdGlvbih0LGUpe3MuZihhKHRoaXMpLHQse2dldDpjKGUpLGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwfSl9fSl9LDUxMTczOmZ1bmN0aW9uKHQsZSxuKXt2YXIgcj1uKDE0MDQ0KSxvPW4oNjI1NTYpO3Ioe3RhcmdldDoiT2JqZWN0IixzdGF0OiEwLGZvcmNlZDohbyxzaGFtOiFvfSx7ZGVmaW5lUHJvcGVydGllczpuKDg2NDAxKX0pfSw1ODE2NTpmdW5jdGlvbih0LGUsbil7dmFyIHI9bigxNDA0NCksbz1uKDYyNTU2KTtyKHt0YXJnZXQ6Ik9iamVjdCIsc3RhdDohMCxmb3JjZWQ6IW8sc2hhbTohb30se2RlZmluZVByb3BlcnR5Om4oMzc2MjApLmZ9KX0sOTEyMDk6ZnVuY3Rpb24odCxlLG4peyJ1c2Ugc3RyaWN0Ijt2YXIgcj1uKDE0MDQ0KSxvPW4oNjI1NTYpLGk9big0NzgxMiksYT1uKDE5MjA5KSxjPW4oODY0NzApLHM9bigzNzYyMCk7byYmcih7dGFyZ2V0OiJPYmplY3QiLHByb3RvOiEwLGZvcmNlZDppfSx7X19kZWZpbmVTZXR0ZXJfXzpmdW5jdGlvbih0LGUpe3MuZihhKHRoaXMpLHQse3NldDpjKGUpLGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwfSl9fSl9LDg3NDM6ZnVuY3Rpb24odCxlLG4pe3ZhciByPW4oMTQwNDQpLG89bigzNTY3KS5lbnRyaWVzO3Ioe3RhcmdldDoiT2JqZWN0IixzdGF0OiEwfSx7ZW50cmllczpmdW5jdGlvbih0KXtyZXR1cm4gbyh0KX19KX0sNzU4MDQ6ZnVuY3Rpb24odCxlLG4pe3ZhciByPW4oMTQwNDQpLG89big3NDUyMCksaT1uKDMyMTg3KSxhPW4oMTA1OTIpLGM9big5NjAzKS5vbkZyZWV6ZSxzPU9iamVjdC5mcmVlemU7cih7dGFyZ2V0OiJPYmplY3QiLHN0YXQ6ITAsZm9yY2VkOmkoKGZ1bmN0aW9uKCl7cygxKX0pKSxzaGFtOiFvfSx7ZnJlZXplOmZ1bmN0aW9uKHQpe3JldHVybiBzJiZhKHQpP3MoYyh0KSk6dH19KX0sNDYxNDY6ZnVuY3Rpb24odCxlLG4pe3ZhciByPW4oMTQwNDQpLG89big0MTMzNCksaT1uKDU4ODEwKTtyKHt0YXJnZXQ6Ik9iamVjdCIsc3RhdDohMH0se2Zyb21FbnRyaWVzOmZ1bmN0aW9uKHQpe3ZhciBlPXt9O3JldHVybiBvKHQsKGZ1bmN0aW9uKHQsbil7aShlLHQsbil9KSx2b2lkIDAsITApLGV9fSl9LDE1MDc3OmZ1bmN0aW9uKHQsZSxuKXt2YXIgcj1uKDE0MDQ0KSxvPW4oMzIxODcpLGk9big5NTczKSxhPW4oOTcyNTcpLmYsYz1uKDYyNTU2KSxzPW8oKGZ1bmN0aW9uKCl7YSgxKX0pKTtyKHt0YXJnZXQ6Ik9iamVjdCIsc3RhdDohMCxmb3JjZWQ6IWN8fHMsc2hhbTohY30se2dldE93blByb3BlcnR5RGVzY3JpcHRvcjpmdW5jdGlvbih0LGUpe3JldHVybiBhKGkodCksZSl9fSl9LDU4MzI5OmZ1bmN0aW9uKHQsZSxuKXt2YXIgcj1uKDE0MDQ0KSxvPW4oNjI1NTYpLGk9bigyNDQxNSksYT1uKDk1NzMpLGM9big5NzI1Nykscz1uKDU4ODEwKTtyKHt0YXJnZXQ6Ik9iamVjdCIsc3RhdDohMCxzaGFtOiFvfSx7Z2V0T3duUHJvcGVydHlEZXNjcmlwdG9yczpmdW5jdGlvbih0KXtmb3IodmFyIGUsbixyPWEodCksbz1jLmYsdT1pKHIpLGw9e30sZj0wO3UubGVuZ3RoPmY7KXZvaWQgMCE9PShuPW8ocixlPXVbZisrXSkpJiZzKGwsZSxuKTtyZXR1cm4gbH19KX0sNjA1MjU6ZnVuY3Rpb24odCxlLG4pe3ZhciByPW4oMTQwNDQpLG89bigzMjE4NyksaT1uKDI2OTM3KS5mO3Ioe3RhcmdldDoiT2JqZWN0IixzdGF0OiEwLGZvcmNlZDpvKChmdW5jdGlvbigpe3JldHVybiFPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcygxKX0pKX0se2dldE93blByb3BlcnR5TmFtZXM6aX0pfSw3NDk1MzpmdW5jdGlvbih0LGUsbil7dmFyIHI9bigxNDA0NCksbz1uKDMyMTg3KSxpPW4oMTkyMDkpLGE9big2NDk2NSksYz1uKDcxNjA4KTtyKHt0YXJnZXQ6Ik9iamVjdCIsc3RhdDohMCxmb3JjZWQ6bygoZnVuY3Rpb24oKXthKDEpfSkpLHNoYW06IWN9LHtnZXRQcm90b3R5cGVPZjpmdW5jdGlvbih0KXtyZXR1cm4gYShpKHQpKX19KX0sNTE2NjpmdW5jdGlvbih0LGUsbil7dmFyIHI9bigxNDA0NCksbz1uKDMyMTg3KSxpPW4oMTA1OTIpLGE9T2JqZWN0LmlzRXh0ZW5zaWJsZTtyKHt0YXJnZXQ6Ik9iamVjdCIsc3RhdDohMCxmb3JjZWQ6bygoZnVuY3Rpb24oKXthKDEpfSkpfSx7aXNFeHRlbnNpYmxlOmZ1bmN0aW9uKHQpe3JldHVybiEhaSh0KSYmKCFhfHxhKHQpKX19KX0sODk3NTg6ZnVuY3Rpb24odCxlLG4pe3ZhciByPW4oMTQwNDQpLG89bigzMjE4NyksaT1uKDEwNTkyKSxhPU9iamVjdC5pc0Zyb3plbjtyKHt0YXJnZXQ6Ik9iamVjdCIsc3RhdDohMCxmb3JjZWQ6bygoZnVuY3Rpb24oKXthKDEpfSkpfSx7aXNGcm96ZW46ZnVuY3Rpb24odCl7cmV0dXJuIWkodCl8fCEhYSYmYSh0KX19KX0sMTgzNzg6ZnVuY3Rpb24odCxlLG4pe3ZhciByPW4oMTQwNDQpLG89bigzMjE4NyksaT1uKDEwNTkyKSxhPU9iamVjdC5pc1NlYWxlZDtyKHt0YXJnZXQ6Ik9iamVjdCIsc3RhdDohMCxmb3JjZWQ6bygoZnVuY3Rpb24oKXthKDEpfSkpfSx7aXNTZWFsZWQ6ZnVuY3Rpb24odCl7cmV0dXJuIWkodCl8fCEhYSYmYSh0KX19KX0sNTQ3ODE6ZnVuY3Rpb24odCxlLG4pe24oMTQwNDQpKHt0YXJnZXQ6Ik9iamVjdCIsc3RhdDohMH0se2lzOm4oNzY0ODIpfSl9LDkyNTI6ZnVuY3Rpb24odCxlLG4pe3ZhciByPW4oMTQwNDQpLG89bigxOTIwOSksaT1uKDI1NTA3KTtyKHt0YXJnZXQ6Ik9iamVjdCIsc3RhdDohMCxmb3JjZWQ6bigzMjE4NykoKGZ1bmN0aW9uKCl7aSgxKX0pKX0se2tleXM6ZnVuY3Rpb24odCl7cmV0dXJuIGkobyh0KSl9fSl9LDcyNTYwOmZ1bmN0aW9uKHQsZSxuKXsidXNlIHN0cmljdCI7dmFyIHI9bigxNDA0NCksbz1uKDYyNTU2KSxpPW4oNDc4MTIpLGE9bigxOTIwOSksYz1uKDUzNDk4KSxzPW4oNjQ5NjUpLHU9big5NzI1NykuZjtvJiZyKHt0YXJnZXQ6Ik9iamVjdCIscHJvdG86ITAsZm9yY2VkOml9LHtfX2xvb2t1cEdldHRlcl9fOmZ1bmN0aW9uKHQpe3ZhciBlLG49YSh0aGlzKSxyPWModCwhMCk7ZG97aWYoZT11KG4scikpcmV0dXJuIGUuZ2V0fXdoaWxlKG49cyhuKSl9fSl9LDEwNjM6ZnVuY3Rpb24odCxlLG4peyJ1c2Ugc3RyaWN0Ijt2YXIgcj1uKDE0MDQ0KSxvPW4oNjI1NTYpLGk9big0NzgxMiksYT1uKDE5MjA5KSxjPW4oNTM0OTgpLHM9big2NDk2NSksdT1uKDk3MjU3KS5mO28mJnIoe3RhcmdldDoiT2JqZWN0Iixwcm90bzohMCxmb3JjZWQ6aX0se19fbG9va3VwU2V0dGVyX186ZnVuY3Rpb24odCl7dmFyIGUsbj1hKHRoaXMpLHI9Yyh0LCEwKTtkb3tpZihlPXUobixyKSlyZXR1cm4gZS5zZXR9d2hpbGUobj1zKG4pKX19KX0sOTMyNzI6ZnVuY3Rpb24odCxlLG4pe3ZhciByPW4oMTQwNDQpLG89bigxMDU5MiksaT1uKDk2MDMpLm9uRnJlZXplLGE9big3NDUyMCksYz1uKDMyMTg3KSxzPU9iamVjdC5wcmV2ZW50RXh0ZW5zaW9ucztyKHt0YXJnZXQ6Ik9iamVjdCIsc3RhdDohMCxmb3JjZWQ6YygoZnVuY3Rpb24oKXtzKDEpfSkpLHNoYW06IWF9LHtwcmV2ZW50RXh0ZW5zaW9uczpmdW5jdGlvbih0KXtyZXR1cm4gcyYmbyh0KT9zKGkodCkpOnR9fSl9LDU2MTU4OmZ1bmN0aW9uKHQsZSxuKXt2YXIgcj1uKDE0MDQ0KSxvPW4oMTA1OTIpLGk9big5NjAzKS5vbkZyZWV6ZSxhPW4oNzQ1MjApLGM9bigzMjE4Nykscz1PYmplY3Quc2VhbDtyKHt0YXJnZXQ6Ik9iamVjdCIsc3RhdDohMCxmb3JjZWQ6YygoZnVuY3Rpb24oKXtzKDEpfSkpLHNoYW06IWF9LHtzZWFsOmZ1bmN0aW9uKHQpe3JldHVybiBzJiZvKHQpP3MoaSh0KSk6dH19KX0sNDE0NTY6ZnVuY3Rpb24odCxlLG4pe24oMTQwNDQpKHt0YXJnZXQ6Ik9iamVjdCIsc3RhdDohMH0se3NldFByb3RvdHlwZU9mOm4oNzE4NDIpfSl9LDM0NTI5OmZ1bmN0aW9uKHQsZSxuKXt2YXIgcj1uKDkwNjEzKSxvPW4oOTI5MTMpLGk9bigxOTc1OCk7cnx8byhPYmplY3QucHJvdG90eXBlLCJ0b1N0cmluZyIsaSx7dW5zYWZlOiEwfSl9LDcyODUxOmZ1bmN0aW9uKHQsZSxuKXt2YXIgcj1uKDE0MDQ0KSxvPW4oMzU2NykudmFsdWVzO3Ioe3RhcmdldDoiT2JqZWN0IixzdGF0OiEwfSx7dmFsdWVzOmZ1bmN0aW9uKHQpe3JldHVybiBvKHQpfX0pfSwxOTQzMzpmdW5jdGlvbih0LGUsbil7dmFyIHI9bigxNDA0NCksbz1uKDI0NDk3KTtyKHtnbG9iYWw6ITAsZm9yY2VkOnBhcnNlRmxvYXQhPW99LHtwYXJzZUZsb2F0Om99KX0sMzM0Mzc6ZnVuY3Rpb24odCxlLG4pe3ZhciByPW4oMTQwNDQpLG89big3ODQ2KTtyKHtnbG9iYWw6ITAsZm9yY2VkOnBhcnNlSW50IT1vfSx7cGFyc2VJbnQ6b30pfSwxNzYyOTpmdW5jdGlvbih0LGUsbil7InVzZSBzdHJpY3QiO3ZhciByPW4oMTQwNDQpLG89big4NjQ3MCksaT1uKDgzMDgzKSxhPW4oMzExNSksYz1uKDQxMzM0KTtyKHt0YXJnZXQ6IlByb21pc2UiLHN0YXQ6ITB9LHthbGxTZXR0bGVkOmZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMsbj1pLmYoZSkscj1uLnJlc29sdmUscz1uLnJlamVjdCx1PWEoKGZ1bmN0aW9uKCl7dmFyIG49byhlLnJlc29sdmUpLGk9W10sYT0wLHM9MTtjKHQsKGZ1bmN0aW9uKHQpe3ZhciBvPWErKyxjPSExO2kucHVzaCh2b2lkIDApLHMrKyxuLmNhbGwoZSx0KS50aGVuKChmdW5jdGlvbih0KXtjfHwoYz0hMCxpW29dPXtzdGF0dXM6ImZ1bGZpbGxlZCIsdmFsdWU6dH0sLS1zfHxyKGkpKX0pLChmdW5jdGlvbih0KXtjfHwoYz0hMCxpW29dPXtzdGF0dXM6InJlamVjdGVkIixyZWFzb246dH0sLS1zfHxyKGkpKX0pKX0pKSwtLXN8fHIoaSl9KSk7cmV0dXJuIHUuZXJyb3ImJnModS52YWx1ZSksbi5wcm9taXNlfX0pfSw0MjQ5MDpmdW5jdGlvbih0LGUsbil7InVzZSBzdHJpY3QiO3ZhciByPW4oMTQwNDQpLG89big2NTY3MiksaT1uKDM5NDU3KSxhPW4oMzIxODcpLGM9big3NzAxKSxzPW4oMTM5NzkpLHU9big2MzEzNCksbD1uKDkyOTEzKTtyKHt0YXJnZXQ6IlByb21pc2UiLHByb3RvOiEwLHJlYWw6ITAsZm9yY2VkOiEhaSYmYSgoZnVuY3Rpb24oKXtpLnByb3RvdHlwZS5maW5hbGx5LmNhbGwoe3RoZW46ZnVuY3Rpb24oKXt9fSwoZnVuY3Rpb24oKXt9KSl9KSl9LHtmaW5hbGx5OmZ1bmN0aW9uKHQpe3ZhciBlPXModGhpcyxjKCJQcm9taXNlIikpLG49ImZ1bmN0aW9uIj09dHlwZW9mIHQ7cmV0dXJuIHRoaXMudGhlbihuP2Z1bmN0aW9uKG4pe3JldHVybiB1KGUsdCgpKS50aGVuKChmdW5jdGlvbigpe3JldHVybiBufSkpfTp0LG4/ZnVuY3Rpb24obil7cmV0dXJuIHUoZSx0KCkpLnRoZW4oKGZ1bmN0aW9uKCl7dGhyb3cgbn0pKX06dCl9fSksb3x8ImZ1bmN0aW9uIiE9dHlwZW9mIGl8fGkucHJvdG90eXBlLmZpbmFsbHl8fGwoaS5wcm90b3R5cGUsImZpbmFsbHkiLGMoIlByb21pc2UiKS5wcm90b3R5cGUuZmluYWxseSl9LDExNjg4OmZ1bmN0aW9uKHQsZSxuKXsidXNlIHN0cmljdCI7dmFyIHIsbyxpLGEsYz1uKDE0MDQ0KSxzPW4oNjU2NzIpLHU9big4OTU1OCksbD1uKDc3MDEpLGY9bigzOTQ1NyksZD1uKDkyOTEzKSxwPW4oMTkyNiksaD1uKDUxMTI4KSx2PW4oNjc1MzgpLGc9bigxMDU5MikseT1uKDg2NDcwKSxtPW4oNTkzNzkpLGI9bigyNDU5NCkseD1uKDc2NzczKSx3PW4oNDEzMzQpLEU9big0Nzk2KSxqPW4oMTM5NzkpLEM9bigyMTc0NCkuc2V0LGs9big2NTU1NSksUz1uKDYzMTM0KSxPPW4oODM2MjApLEk9big4MzA4MyksQT1uKDMxMTUpLE09big4OTgyNyksXz1uKDY0NTA0KSxUPW4oMjM3MjQpLFI9big3OTA3MSksTD1UKCJzcGVjaWVzIiksUD0iUHJvbWlzZSIsTj1NLmdldCxEPU0uc2V0LEY9TS5nZXR0ZXJGb3IoUCksVT1mLEI9dS5UeXBlRXJyb3Isej11LmRvY3VtZW50LFY9dS5wcm9jZXNzLEg9bCgiZmV0Y2giKSxxPUkuZixXPXEsRz0icHJvY2VzcyI9PWIoViksWj0hISh6JiZ6LmNyZWF0ZUV2ZW50JiZ1LmRpc3BhdGNoRXZlbnQpLCQ9InVuaGFuZGxlZHJlamVjdGlvbiIsWT1fKFAsKGZ1bmN0aW9uKCl7aWYoISh4KFUpIT09U3RyaW5nKFUpKSl7aWYoNjY9PT1SKXJldHVybiEwO2lmKCFHJiYiZnVuY3Rpb24iIT10eXBlb2YgUHJvbWlzZVJlamVjdGlvbkV2ZW50KXJldHVybiEwfWlmKHMmJiFVLnByb3RvdHlwZS5maW5hbGx5KXJldHVybiEwO2lmKFI+PTUxJiYvbmF0aXZlIGNvZGUvLnRlc3QoVSkpcmV0dXJuITE7dmFyIHQ9VS5yZXNvbHZlKDEpLGU9ZnVuY3Rpb24odCl7dCgoZnVuY3Rpb24oKXt9KSwoZnVuY3Rpb24oKXt9KSl9O3JldHVybih0LmNvbnN0cnVjdG9yPXt9KVtMXT1lLCEodC50aGVuKChmdW5jdGlvbigpe30pKWluc3RhbmNlb2YgZSl9KSksSj1ZfHwhRSgoZnVuY3Rpb24odCl7VS5hbGwodCkuY2F0Y2goKGZ1bmN0aW9uKCl7fSkpfSkpLEs9ZnVuY3Rpb24odCl7dmFyIGU7cmV0dXJuISghZyh0KXx8ImZ1bmN0aW9uIiE9dHlwZW9mKGU9dC50aGVuKSkmJmV9LFg9ZnVuY3Rpb24odCxlLG4pe2lmKCFlLm5vdGlmaWVkKXtlLm5vdGlmaWVkPSEwO3ZhciByPWUucmVhY3Rpb25zO2soKGZ1bmN0aW9uKCl7Zm9yKHZhciBvPWUudmFsdWUsaT0xPT1lLnN0YXRlLGE9MDtyLmxlbmd0aD5hOyl7dmFyIGMscyx1LGw9clthKytdLGY9aT9sLm9rOmwuZmFpbCxkPWwucmVzb2x2ZSxwPWwucmVqZWN0LGg9bC5kb21haW47dHJ5e2Y/KGl8fCgyPT09ZS5yZWplY3Rpb24mJm50KHQsZSksZS5yZWplY3Rpb249MSksITA9PT1mP2M9bzooaCYmaC5lbnRlcigpLGM9ZihvKSxoJiYoaC5leGl0KCksdT0hMCkpLGM9PT1sLnByb21pc2U/cChCKCJQcm9taXNlLWNoYWluIGN5Y2xlIikpOihzPUsoYykpP3MuY2FsbChjLGQscCk6ZChjKSk6cChvKX1jYXRjaCh0KXtoJiYhdSYmaC5leGl0KCkscCh0KX19ZS5yZWFjdGlvbnM9W10sZS5ub3RpZmllZD0hMSxuJiYhZS5yZWplY3Rpb24mJnR0KHQsZSl9KSl9fSxRPWZ1bmN0aW9uKHQsZSxuKXt2YXIgcixvO1o/KChyPXouY3JlYXRlRXZlbnQoIkV2ZW50IikpLnByb21pc2U9ZSxyLnJlYXNvbj1uLHIuaW5pdEV2ZW50KHQsITEsITApLHUuZGlzcGF0Y2hFdmVudChyKSk6cj17cHJvbWlzZTplLHJlYXNvbjpufSwobz11WyJvbiIrdF0pP28ocik6dD09PSQmJk8oIlVuaGFuZGxlZCBwcm9taXNlIHJlamVjdGlvbiIsbil9LHR0PWZ1bmN0aW9uKHQsZSl7Qy5jYWxsKHUsKGZ1bmN0aW9uKCl7dmFyIG4scj1lLnZhbHVlO2lmKGV0KGUpJiYobj1BKChmdW5jdGlvbigpe0c/Vi5lbWl0KCJ1bmhhbmRsZWRSZWplY3Rpb24iLHIsdCk6USgkLHQscil9KSksZS5yZWplY3Rpb249R3x8ZXQoZSk/MjoxLG4uZXJyb3IpKXRocm93IG4udmFsdWV9KSl9LGV0PWZ1bmN0aW9uKHQpe3JldHVybiAxIT09dC5yZWplY3Rpb24mJiF0LnBhcmVudH0sbnQ9ZnVuY3Rpb24odCxlKXtDLmNhbGwodSwoZnVuY3Rpb24oKXtHP1YuZW1pdCgicmVqZWN0aW9uSGFuZGxlZCIsdCk6USgicmVqZWN0aW9uaGFuZGxlZCIsdCxlLnZhbHVlKX0pKX0scnQ9ZnVuY3Rpb24odCxlLG4scil7cmV0dXJuIGZ1bmN0aW9uKG8pe3QoZSxuLG8scil9fSxvdD1mdW5jdGlvbih0LGUsbixyKXtlLmRvbmV8fChlLmRvbmU9ITAsciYmKGU9ciksZS52YWx1ZT1uLGUuc3RhdGU9MixYKHQsZSwhMCkpfSxpdD1mdW5jdGlvbih0LGUsbixyKXtpZighZS5kb25lKXtlLmRvbmU9ITAsciYmKGU9cik7dHJ5e2lmKHQ9PT1uKXRocm93IEIoIlByb21pc2UgY2FuJ3QgYmUgcmVzb2x2ZWQgaXRzZWxmIik7dmFyIG89SyhuKTtvP2soKGZ1bmN0aW9uKCl7dmFyIHI9e2RvbmU6ITF9O3RyeXtvLmNhbGwobixydChpdCx0LHIsZSkscnQob3QsdCxyLGUpKX1jYXRjaChuKXtvdCh0LHIsbixlKX19KSk6KGUudmFsdWU9bixlLnN0YXRlPTEsWCh0LGUsITEpKX1jYXRjaChuKXtvdCh0LHtkb25lOiExfSxuLGUpfX19O1kmJihVPWZ1bmN0aW9uKHQpe20odGhpcyxVLFApLHkodCksci5jYWxsKHRoaXMpO3ZhciBlPU4odGhpcyk7dHJ5e3QocnQoaXQsdGhpcyxlKSxydChvdCx0aGlzLGUpKX1jYXRjaCh0KXtvdCh0aGlzLGUsdCl9fSwocj1mdW5jdGlvbih0KXtEKHRoaXMse3R5cGU6UCxkb25lOiExLG5vdGlmaWVkOiExLHBhcmVudDohMSxyZWFjdGlvbnM6W10scmVqZWN0aW9uOiExLHN0YXRlOjAsdmFsdWU6dm9pZCAwfSl9KS5wcm90b3R5cGU9cChVLnByb3RvdHlwZSx7dGhlbjpmdW5jdGlvbih0LGUpe3ZhciBuPUYodGhpcykscj1xKGoodGhpcyxVKSk7cmV0dXJuIHIub2s9ImZ1bmN0aW9uIiE9dHlwZW9mIHR8fHQsci5mYWlsPSJmdW5jdGlvbiI9PXR5cGVvZiBlJiZlLHIuZG9tYWluPUc/Vi5kb21haW46dm9pZCAwLG4ucGFyZW50PSEwLG4ucmVhY3Rpb25zLnB1c2gociksMCE9bi5zdGF0ZSYmWCh0aGlzLG4sITEpLHIucHJvbWlzZX0sY2F0Y2g6ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMudGhlbih2b2lkIDAsdCl9fSksbz1mdW5jdGlvbigpe3ZhciB0PW5ldyByLGU9Tih0KTt0aGlzLnByb21pc2U9dCx0aGlzLnJlc29sdmU9cnQoaXQsdCxlKSx0aGlzLnJlamVjdD1ydChvdCx0LGUpfSxJLmY9cT1mdW5jdGlvbih0KXtyZXR1cm4gdD09PVV8fHQ9PT1pP25ldyBvKHQpOlcodCl9LHN8fCJmdW5jdGlvbiIhPXR5cGVvZiBmfHwoYT1mLnByb3RvdHlwZS50aGVuLGQoZi5wcm90b3R5cGUsInRoZW4iLChmdW5jdGlvbih0LGUpe3ZhciBuPXRoaXM7cmV0dXJuIG5ldyBVKChmdW5jdGlvbih0LGUpe2EuY2FsbChuLHQsZSl9KSkudGhlbih0LGUpfSkse3Vuc2FmZTohMH0pLCJmdW5jdGlvbiI9PXR5cGVvZiBIJiZjKHtnbG9iYWw6ITAsZW51bWVyYWJsZTohMCxmb3JjZWQ6ITB9LHtmZXRjaDpmdW5jdGlvbih0KXtyZXR1cm4gUyhVLEguYXBwbHkodSxhcmd1bWVudHMpKX19KSkpLGMoe2dsb2JhbDohMCx3cmFwOiEwLGZvcmNlZDpZfSx7UHJvbWlzZTpVfSksaChVLFAsITEsITApLHYoUCksaT1sKFApLGMoe3RhcmdldDpQLHN0YXQ6ITAsZm9yY2VkOll9LHtyZWplY3Q6ZnVuY3Rpb24odCl7dmFyIGU9cSh0aGlzKTtyZXR1cm4gZS5yZWplY3QuY2FsbCh2b2lkIDAsdCksZS5wcm9taXNlfX0pLGMoe3RhcmdldDpQLHN0YXQ6ITAsZm9yY2VkOnN8fFl9LHtyZXNvbHZlOmZ1bmN0aW9uKHQpe3JldHVybiBTKHMmJnRoaXM9PT1pP1U6dGhpcyx0KX19KSxjKHt0YXJnZXQ6UCxzdGF0OiEwLGZvcmNlZDpKfSx7YWxsOmZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMsbj1xKGUpLHI9bi5yZXNvbHZlLG89bi5yZWplY3QsaT1BKChmdW5jdGlvbigpe3ZhciBuPXkoZS5yZXNvbHZlKSxpPVtdLGE9MCxjPTE7dyh0LChmdW5jdGlvbih0KXt2YXIgcz1hKyssdT0hMTtpLnB1c2godm9pZCAwKSxjKyssbi5jYWxsKGUsdCkudGhlbigoZnVuY3Rpb24odCl7dXx8KHU9ITAsaVtzXT10LC0tY3x8cihpKSl9KSxvKX0pKSwtLWN8fHIoaSl9KSk7cmV0dXJuIGkuZXJyb3ImJm8oaS52YWx1ZSksbi5wcm9taXNlfSxyYWNlOmZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMsbj1xKGUpLHI9bi5yZWplY3Qsbz1BKChmdW5jdGlvbigpe3ZhciBvPXkoZS5yZXNvbHZlKTt3KHQsKGZ1bmN0aW9uKHQpe28uY2FsbChlLHQpLnRoZW4obi5yZXNvbHZlLHIpfSkpfSkpO3JldHVybiBvLmVycm9yJiZyKG8udmFsdWUpLG4ucHJvbWlzZX19KX0sMjkyODQ6ZnVuY3Rpb24odCxlLG4pe3ZhciByPW4oMTQwNDQpLG89big3NzAxKSxpPW4oODY0NzApLGE9big4NzU3OSksYz1uKDMyMTg3KSxzPW8oIlJlZmxlY3QiLCJhcHBseSIpLHU9RnVuY3Rpb24uYXBwbHk7cih7dGFyZ2V0OiJSZWZsZWN0IixzdGF0OiEwLGZvcmNlZDohYygoZnVuY3Rpb24oKXtzKChmdW5jdGlvbigpe30pKX0pKX0se2FwcGx5OmZ1bmN0aW9uKHQsZSxuKXtyZXR1cm4gaSh0KSxhKG4pLHM/cyh0LGUsbik6dS5jYWxsKHQsZSxuKX19KX0sNjE5NDM6ZnVuY3Rpb24odCxlLG4pe3ZhciByPW4oMTQwNDQpLG89big3NzAxKSxpPW4oODY0NzApLGE9big4NzU3OSksYz1uKDEwNTkyKSxzPW4oNTA4NjgpLHU9big3MzczOSksbD1uKDMyMTg3KSxmPW8oIlJlZmxlY3QiLCJjb25zdHJ1Y3QiKSxkPWwoKGZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCgpe31yZXR1cm4hKGYoKGZ1bmN0aW9uKCl7fSksW10sdClpbnN0YW5jZW9mIHQpfSkpLHA9IWwoKGZ1bmN0aW9uKCl7ZigoZnVuY3Rpb24oKXt9KSl9KSksaD1kfHxwO3Ioe3RhcmdldDoiUmVmbGVjdCIsc3RhdDohMCxmb3JjZWQ6aCxzaGFtOmh9LHtjb25zdHJ1Y3Q6ZnVuY3Rpb24odCxlKXtpKHQpLGEoZSk7dmFyIG49YXJndW1lbnRzLmxlbmd0aDwzP3Q6aShhcmd1bWVudHNbMl0pO2lmKHAmJiFkKXJldHVybiBmKHQsZSxuKTtpZih0PT1uKXtzd2l0Y2goZS5sZW5ndGgpe2Nhc2UgMDpyZXR1cm4gbmV3IHQ7Y2FzZSAxOnJldHVybiBuZXcgdChlWzBdKTtjYXNlIDI6cmV0dXJuIG5ldyB0KGVbMF0sZVsxXSk7Y2FzZSAzOnJldHVybiBuZXcgdChlWzBdLGVbMV0sZVsyXSk7Y2FzZSA0OnJldHVybiBuZXcgdChlWzBdLGVbMV0sZVsyXSxlWzNdKX12YXIgcj1bbnVsbF07cmV0dXJuIHIucHVzaC5hcHBseShyLGUpLG5ldyh1LmFwcGx5KHQscikpfXZhciBvPW4ucHJvdG90eXBlLGw9cyhjKG8pP286T2JqZWN0LnByb3RvdHlwZSksaD1GdW5jdGlvbi5hcHBseS5jYWxsKHQsbCxlKTtyZXR1cm4gYyhoKT9oOmx9fSl9LDI2OTg2OmZ1bmN0aW9uKHQsZSxuKXt2YXIgcj1uKDE0MDQ0KSxvPW4oNjI1NTYpLGk9big4NzU3OSksYT1uKDUzNDk4KSxjPW4oMzc2MjApO3Ioe3RhcmdldDoiUmVmbGVjdCIsc3RhdDohMCxmb3JjZWQ6bigzMjE4NykoKGZ1bmN0aW9uKCl7UmVmbGVjdC5kZWZpbmVQcm9wZXJ0eShjLmYoe30sMSx7dmFsdWU6MX0pLDEse3ZhbHVlOjJ9KX0pKSxzaGFtOiFvfSx7ZGVmaW5lUHJvcGVydHk6ZnVuY3Rpb24odCxlLG4pe2kodCk7dmFyIHI9YShlLCEwKTtpKG4pO3RyeXtyZXR1cm4gYy5mKHQscixuKSwhMH1jYXRjaCh0KXtyZXR1cm4hMX19fSl9LDEzNjY6ZnVuY3Rpb24odCxlLG4pe3ZhciByPW4oMTQwNDQpLG89big4NzU3OSksaT1uKDk3MjU3KS5mO3Ioe3RhcmdldDoiUmVmbGVjdCIsc3RhdDohMH0se2RlbGV0ZVByb3BlcnR5OmZ1bmN0aW9uKHQsZSl7dmFyIG49aShvKHQpLGUpO3JldHVybiEobiYmIW4uY29uZmlndXJhYmxlKSYmZGVsZXRlIHRbZV19fSl9LDQ2NTk3OmZ1bmN0aW9uKHQsZSxuKXt2YXIgcj1uKDE0MDQ0KSxvPW4oNjI1NTYpLGk9big4NzU3OSksYT1uKDk3MjU3KTtyKHt0YXJnZXQ6IlJlZmxlY3QiLHN0YXQ6ITAsc2hhbTohb30se2dldE93blByb3BlcnR5RGVzY3JpcHRvcjpmdW5jdGlvbih0LGUpe3JldHVybiBhLmYoaSh0KSxlKX19KX0sNzAxMzY6ZnVuY3Rpb24odCxlLG4pe3ZhciByPW4oMTQwNDQpLG89big4NzU3OSksaT1uKDY0OTY1KTtyKHt0YXJnZXQ6IlJlZmxlY3QiLHN0YXQ6ITAsc2hhbTohbig3MTYwOCl9LHtnZXRQcm90b3R5cGVPZjpmdW5jdGlvbih0KXtyZXR1cm4gaShvKHQpKX19KX0sODMzMTA6ZnVuY3Rpb24odCxlLG4pe3ZhciByPW4oMTQwNDQpLG89bigxMDU5MiksaT1uKDg3NTc5KSxhPW4oNzYyOTgpLGM9big5NzI1Nykscz1uKDY0OTY1KTtyKHt0YXJnZXQ6IlJlZmxlY3QiLHN0YXQ6ITB9LHtnZXQ6ZnVuY3Rpb24gdChlLG4pe3ZhciByLHUsbD1hcmd1bWVudHMubGVuZ3RoPDM/ZTphcmd1bWVudHNbMl07cmV0dXJuIGkoZSk9PT1sP2Vbbl06KHI9Yy5mKGUsbikpP2EociwidmFsdWUiKT9yLnZhbHVlOnZvaWQgMD09PXIuZ2V0P3ZvaWQgMDpyLmdldC5jYWxsKGwpOm8odT1zKGUpKT90KHUsbixsKTp2b2lkIDB9fSl9LDYwODY1OmZ1bmN0aW9uKHQsZSxuKXtuKDE0MDQ0KSh7dGFyZ2V0OiJSZWZsZWN0IixzdGF0OiEwfSx7aGFzOmZ1bmN0aW9uKHQsZSl7cmV0dXJuIGUgaW4gdH19KX0sNjc3MDg6ZnVuY3Rpb24odCxlLG4pe3ZhciByPW4oMTQwNDQpLG89big4NzU3OSksaT1PYmplY3QuaXNFeHRlbnNpYmxlO3Ioe3RhcmdldDoiUmVmbGVjdCIsc3RhdDohMH0se2lzRXh0ZW5zaWJsZTpmdW5jdGlvbih0KXtyZXR1cm4gbyh0KSwhaXx8aSh0KX19KX0sOTY2Mzg6ZnVuY3Rpb24odCxlLG4pe24oMTQwNDQpKHt0YXJnZXQ6IlJlZmxlY3QiLHN0YXQ6ITB9LHtvd25LZXlzOm4oMjQ0MTUpfSl9LDM5NzMwOmZ1bmN0aW9uKHQsZSxuKXt2YXIgcj1uKDE0MDQ0KSxvPW4oNzcwMSksaT1uKDg3NTc5KTtyKHt0YXJnZXQ6IlJlZmxlY3QiLHN0YXQ6ITAsc2hhbTohbig3NDUyMCl9LHtwcmV2ZW50RXh0ZW5zaW9uczpmdW5jdGlvbih0KXtpKHQpO3RyeXt2YXIgZT1vKCJPYmplY3QiLCJwcmV2ZW50RXh0ZW5zaW9ucyIpO3JldHVybiBlJiZlKHQpLCEwfWNhdGNoKHQpe3JldHVybiExfX19KX0sODU2ODY6ZnVuY3Rpb24odCxlLG4pe3ZhciByPW4oMTQwNDQpLG89big4NzU3OSksaT1uKDc5ODYxKSxhPW4oNzE4NDIpO2EmJnIoe3RhcmdldDoiUmVmbGVjdCIsc3RhdDohMH0se3NldFByb3RvdHlwZU9mOmZ1bmN0aW9uKHQsZSl7byh0KSxpKGUpO3RyeXtyZXR1cm4gYSh0LGUpLCEwfWNhdGNoKHQpe3JldHVybiExfX19KX0sNzQxMTU6ZnVuY3Rpb24odCxlLG4pe3ZhciByPW4oMTQwNDQpLG89big4NzU3OSksaT1uKDEwNTkyKSxhPW4oNzYyOTgpLGM9bigzMjE4Nykscz1uKDM3NjIwKSx1PW4oOTcyNTcpLGw9big2NDk2NSksZj1uKDE0MjA5KTtyKHt0YXJnZXQ6IlJlZmxlY3QiLHN0YXQ6ITAsZm9yY2VkOmMoKGZ1bmN0aW9uKCl7dmFyIHQ9cy5mKHt9LCJhIix7Y29uZmlndXJhYmxlOiEwfSk7cmV0dXJuITEhPT1SZWZsZWN0LnNldChsKHQpLCJhIiwxLHQpfSkpfSx7c2V0OmZ1bmN0aW9uIHQoZSxuLHIpe3ZhciBjLGQscD1hcmd1bWVudHMubGVuZ3RoPDQ/ZTphcmd1bWVudHNbM10saD11LmYobyhlKSxuKTtpZighaCl7aWYoaShkPWwoZSkpKXJldHVybiB0KGQsbixyLHApO2g9ZigwKX1pZihhKGgsInZhbHVlIikpe2lmKCExPT09aC53cml0YWJsZXx8IWkocCkpcmV0dXJuITE7aWYoYz11LmYocCxuKSl7aWYoYy5nZXR8fGMuc2V0fHwhMT09PWMud3JpdGFibGUpcmV0dXJuITE7Yy52YWx1ZT1yLHMuZihwLG4sYyl9ZWxzZSBzLmYocCxuLGYoMCxyKSk7cmV0dXJuITB9cmV0dXJuIHZvaWQgMCE9PWguc2V0JiYoaC5zZXQuY2FsbChwLHIpLCEwKX19KX0sNDk0OTU6ZnVuY3Rpb24odCxlLG4pe3ZhciByPW4oNjI1NTYpLG89big4OTU1OCksaT1uKDY0NTA0KSxhPW4oMzAyNzIpLGM9bigzNzYyMCkuZixzPW4oMTMzMzQpLmYsdT1uKDQzMjIzKSxsPW4oMjU0MTkpLGY9big5MjkxMyksZD1uKDMyMTg3KSxwPW4oNjc1MzgpLGg9bigyMzcyNCkoIm1hdGNoIiksdj1vLlJlZ0V4cCxnPXYucHJvdG90eXBlLHk9L2EvZyxtPS9hL2csYj1uZXcgdih5KSE9PXk7aWYociYmaSgiUmVnRXhwIiwhYnx8ZCgoZnVuY3Rpb24oKXtyZXR1cm4gbVtoXT0hMSx2KHkpIT15fHx2KG0pPT1tfHwiL2EvaSIhPXYoeSwiaSIpfSkpKSl7Zm9yKHZhciB4PWZ1bmN0aW9uKHQsZSl7dmFyIG49dGhpcyBpbnN0YW5jZW9mIHgscj11KHQpLG89dm9pZCAwPT09ZTtyZXR1cm4hbiYmciYmdC5jb25zdHJ1Y3Rvcj09PXgmJm8/dDphKGI/bmV3IHYociYmIW8/dC5zb3VyY2U6dCxlKTp2KChyPXQgaW5zdGFuY2VvZiB4KT90LnNvdXJjZTp0LHImJm8/bC5jYWxsKHQpOmUpLG4/dGhpczpnLHgpfSx3PWZ1bmN0aW9uKHQpe3QgaW4geHx8Yyh4LHQse2NvbmZpZ3VyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdlt0XX0sc2V0OmZ1bmN0aW9uKGUpe3ZbdF09ZX19KX0sRT1zKHYpLGo9MDtFLmxlbmd0aD5qOyl3KEVbaisrXSk7Zy5jb25zdHJ1Y3Rvcj14LHgucHJvdG90eXBlPWcsZihvLCJSZWdFeHAiLHgpfXAoIlJlZ0V4cCIpfSw4NzIwOTpmdW5jdGlvbih0LGUsbil7InVzZSBzdHJpY3QiO3ZhciByPW4oMTQwNDQpLG89bigzODU5OCk7cih7dGFyZ2V0OiJSZWdFeHAiLHByb3RvOiEwLGZvcmNlZDovLi8uZXhlYyE9PW99LHtleGVjOm99KX0sMTgyNzY6ZnVuY3Rpb24odCxlLG4pe3ZhciByPW4oNjI1NTYpLG89bigzNzYyMCksaT1uKDI1NDE5KTtyJiYiZyIhPS8uL2cuZmxhZ3MmJm8uZihSZWdFeHAucHJvdG90eXBlLCJmbGFncyIse2NvbmZpZ3VyYWJsZTohMCxnZXQ6aX0pfSwzNzU0OmZ1bmN0aW9uKHQsZSxuKXsidXNlIHN0cmljdCI7dmFyIHI9big5MjkxMyksbz1uKDg3NTc5KSxpPW4oMzIxODcpLGE9bigyNTQxOSksYz0idG9TdHJpbmciLHM9UmVnRXhwLnByb3RvdHlwZSx1PXMudG9TdHJpbmcsbD1pKChmdW5jdGlvbigpe3JldHVybiIvYS9iIiE9dS5jYWxsKHtzb3VyY2U6ImEiLGZsYWdzOiJiIn0pfSkpLGY9dS5uYW1lIT1jOyhsfHxmKSYmcihSZWdFeHAucHJvdG90eXBlLGMsKGZ1bmN0aW9uKCl7dmFyIHQ9byh0aGlzKSxlPVN0cmluZyh0LnNvdXJjZSksbj10LmZsYWdzO3JldHVybiIvIitlKyIvIitTdHJpbmcodm9pZCAwPT09biYmdCBpbnN0YW5jZW9mIFJlZ0V4cCYmISgiZmxhZ3MiaW4gcyk/YS5jYWxsKHQpOm4pfSkse3Vuc2FmZTohMH0pfSw3NDA2MTpmdW5jdGlvbih0LGUsbil7InVzZSBzdHJpY3QiO3ZhciByPW4oODE5NTEpLG89big2NDUwKTt0LmV4cG9ydHM9cigiU2V0IiwoZnVuY3Rpb24odCl7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIHQodGhpcyxhcmd1bWVudHMubGVuZ3RoP2FyZ3VtZW50c1swXTp2b2lkIDApfX0pLG8pfSw0MTc3MzpmdW5jdGlvbih0LGUsbil7InVzZSBzdHJpY3QiO3ZhciByPW4oMTQwNDQpLG89bigzMTM1MSk7cih7dGFyZ2V0OiJTdHJpbmciLHByb3RvOiEwLGZvcmNlZDpuKDUyMTI5KSgiYW5jaG9yIil9LHthbmNob3I6ZnVuY3Rpb24odCl7cmV0dXJuIG8odGhpcywiYSIsIm5hbWUiLHQpfX0pfSwzMDQwMjpmdW5jdGlvbih0LGUsbil7InVzZSBzdHJpY3QiO3ZhciByPW4oMTQwNDQpLG89bigzMTM1MSk7cih7dGFyZ2V0OiJTdHJpbmciLHByb3RvOiEwLGZvcmNlZDpuKDUyMTI5KSgiYmlnIil9LHtiaWc6ZnVuY3Rpb24oKXtyZXR1cm4gbyh0aGlzLCJiaWciLCIiLCIiKX19KX0sMTgxNzU6ZnVuY3Rpb24odCxlLG4peyJ1c2Ugc3RyaWN0Ijt2YXIgcj1uKDE0MDQ0KSxvPW4oMzEzNTEpO3Ioe3RhcmdldDoiU3RyaW5nIixwcm90bzohMCxmb3JjZWQ6big1MjEyOSkoImJsaW5rIil9LHtibGluazpmdW5jdGlvbigpe3JldHVybiBvKHRoaXMsImJsaW5rIiwiIiwiIil9fSl9LDY2ODk2OmZ1bmN0aW9uKHQsZSxuKXsidXNlIHN0cmljdCI7dmFyIHI9bigxNDA0NCksbz1uKDMxMzUxKTtyKHt0YXJnZXQ6IlN0cmluZyIscHJvdG86ITAsZm9yY2VkOm4oNTIxMjkpKCJib2xkIil9LHtib2xkOmZ1bmN0aW9uKCl7cmV0dXJuIG8odGhpcywiYiIsIiIsIiIpfX0pfSwxNTM3MzpmdW5jdGlvbih0LGUsbil7InVzZSBzdHJpY3QiO3ZhciByPW4oMTQwNDQpLG89big2MDE0MCkuY29kZUF0O3Ioe3RhcmdldDoiU3RyaW5nIixwcm90bzohMH0se2NvZGVQb2ludEF0OmZ1bmN0aW9uKHQpe3JldHVybiBvKHRoaXMsdCl9fSl9LDk3Njg4OmZ1bmN0aW9uKHQsZSxuKXsidXNlIHN0cmljdCI7dmFyIHIsbz1uKDE0MDQ0KSxpPW4oOTcyNTcpLmYsYT1uKDI3ODg0KSxjPW4oOTkzNDYpLHM9big3MDEzMiksdT1uKDkzOTE1KSxsPW4oNjU2NzIpLGY9IiIuZW5kc1dpdGgsZD1NYXRoLm1pbixwPXUoImVuZHNXaXRoIik7byh7dGFyZ2V0OiJTdHJpbmciLHByb3RvOiEwLGZvcmNlZDohIShsfHxwfHwocj1pKFN0cmluZy5wcm90b3R5cGUsImVuZHNXaXRoIiksIXJ8fHIud3JpdGFibGUpKSYmIXB9LHtlbmRzV2l0aDpmdW5jdGlvbih0KXt2YXIgZT1TdHJpbmcocyh0aGlzKSk7Yyh0KTt2YXIgbj1hcmd1bWVudHMubGVuZ3RoPjE/YXJndW1lbnRzWzFdOnZvaWQgMCxyPWEoZS5sZW5ndGgpLG89dm9pZCAwPT09bj9yOmQoYShuKSxyKSxpPVN0cmluZyh0KTtyZXR1cm4gZj9mLmNhbGwoZSxpLG8pOmUuc2xpY2Uoby1pLmxlbmd0aCxvKT09PWl9fSl9LDg1NzY3OmZ1bmN0aW9uKHQsZSxuKXsidXNlIHN0cmljdCI7dmFyIHI9bigxNDA0NCksbz1uKDMxMzUxKTtyKHt0YXJnZXQ6IlN0cmluZyIscHJvdG86ITAsZm9yY2VkOm4oNTIxMjkpKCJmaXhlZCIpfSx7Zml4ZWQ6ZnVuY3Rpb24oKXtyZXR1cm4gbyh0aGlzLCJ0dCIsIiIsIiIpfX0pfSw4NDM2OmZ1bmN0aW9uKHQsZSxuKXsidXNlIHN0cmljdCI7dmFyIHI9bigxNDA0NCksbz1uKDMxMzUxKTtyKHt0YXJnZXQ6IlN0cmluZyIscHJvdG86ITAsZm9yY2VkOm4oNTIxMjkpKCJmb250Y29sb3IiKX0se2ZvbnRjb2xvcjpmdW5jdGlvbih0KXtyZXR1cm4gbyh0aGlzLCJmb250IiwiY29sb3IiLHQpfX0pfSw5MjE5MjpmdW5jdGlvbih0LGUsbil7InVzZSBzdHJpY3QiO3ZhciByPW4oMTQwNDQpLG89bigzMTM1MSk7cih7dGFyZ2V0OiJTdHJpbmciLHByb3RvOiEwLGZvcmNlZDpuKDUyMTI5KSgiZm9udHNpemUiKX0se2ZvbnRzaXplOmZ1bmN0aW9uKHQpe3JldHVybiBvKHRoaXMsImZvbnQiLCJzaXplIix0KX19KX0sMTA3NDM6ZnVuY3Rpb24odCxlLG4pe3ZhciByPW4oMTQwNDQpLG89big3Njk3NiksaT1TdHJpbmcuZnJvbUNoYXJDb2RlLGE9U3RyaW5nLmZyb21Db2RlUG9pbnQ7cih7dGFyZ2V0OiJTdHJpbmciLHN0YXQ6ITAsZm9yY2VkOiEhYSYmMSE9YS5sZW5ndGh9LHtmcm9tQ29kZVBvaW50OmZ1bmN0aW9uKHQpe2Zvcih2YXIgZSxuPVtdLHI9YXJndW1lbnRzLmxlbmd0aCxhPTA7cj5hOyl7aWYoZT0rYXJndW1lbnRzW2ErK10sbyhlLDExMTQxMTEpIT09ZSl0aHJvdyBSYW5nZUVycm9yKGUrIiBpcyBub3QgYSB2YWxpZCBjb2RlIHBvaW50Iik7bi5wdXNoKGU8NjU1MzY/aShlKTppKDU1Mjk2KygoZS09NjU1MzYpPj4xMCksZSUxMDI0KzU2MzIwKSl9cmV0dXJuIG4uam9pbigiIil9fSl9LDc0NTYzOmZ1bmN0aW9uKHQsZSxuKXsidXNlIHN0cmljdCI7dmFyIHI9bigxNDA0NCksbz1uKDk5MzQ2KSxpPW4oNzAxMzIpO3Ioe3RhcmdldDoiU3RyaW5nIixwcm90bzohMCxmb3JjZWQ6IW4oOTM5MTUpKCJpbmNsdWRlcyIpfSx7aW5jbHVkZXM6ZnVuY3Rpb24odCl7cmV0dXJuISF+U3RyaW5nKGkodGhpcykpLmluZGV4T2Yobyh0KSxhcmd1bWVudHMubGVuZ3RoPjE/YXJndW1lbnRzWzFdOnZvaWQgMCl9fSl9LDEyMTU1OmZ1bmN0aW9uKHQsZSxuKXsidXNlIHN0cmljdCI7dmFyIHI9bigxNDA0NCksbz1uKDMxMzUxKTtyKHt0YXJnZXQ6IlN0cmluZyIscHJvdG86ITAsZm9yY2VkOm4oNTIxMjkpKCJpdGFsaWNzIil9LHtpdGFsaWNzOmZ1bmN0aW9uKCl7cmV0dXJuIG8odGhpcywiaSIsIiIsIiIpfX0pfSw4MjIwMTpmdW5jdGlvbih0LGUsbil7InVzZSBzdHJpY3QiO3ZhciByPW4oNjAxNDApLmNoYXJBdCxvPW4oODk4MjcpLGk9big0NjA2MSksYT0iU3RyaW5nIEl0ZXJhdG9yIixjPW8uc2V0LHM9by5nZXR0ZXJGb3IoYSk7aShTdHJpbmcsIlN0cmluZyIsKGZ1bmN0aW9uKHQpe2ModGhpcyx7dHlwZTphLHN0cmluZzpTdHJpbmcodCksaW5kZXg6MH0pfSksKGZ1bmN0aW9uKCl7dmFyIHQsZT1zKHRoaXMpLG49ZS5zdHJpbmcsbz1lLmluZGV4O3JldHVybiBvPj1uLmxlbmd0aD97dmFsdWU6dm9pZCAwLGRvbmU6ITB9Oih0PXIobixvKSxlLmluZGV4Kz10Lmxlbmd0aCx7dmFsdWU6dCxkb25lOiExfSl9KSl9LDI2MDE2OmZ1bmN0aW9uKHQsZSxuKXsidXNlIHN0cmljdCI7dmFyIHI9bigxNDA0NCksbz1uKDMxMzUxKTtyKHt0YXJnZXQ6IlN0cmluZyIscHJvdG86ITAsZm9yY2VkOm4oNTIxMjkpKCJsaW5rIil9LHtsaW5rOmZ1bmN0aW9uKHQpe3JldHVybiBvKHRoaXMsImEiLCJocmVmIix0KX19KX0sODEyNzc6ZnVuY3Rpb24odCxlLG4peyJ1c2Ugc3RyaWN0Ijt2YXIgcj1uKDE0MDQ0KSxvPW4oNzEyMDEpLGk9big3MDEzMiksYT1uKDI3ODg0KSxjPW4oODY0NzApLHM9big4NzU3OSksdT1uKDI0NTk0KSxsPW4oNDMyMjMpLGY9bigyNTQxOSksZD1uKDY2OTcxKSxwPW4oMzIxODcpLGg9bigyMzcyNCksdj1uKDEzOTc5KSxnPW4oNTMxNDEpLHk9big4OTgyNyksbT1uKDY1NjcyKSxiPWgoIm1hdGNoQWxsIikseD0iUmVnRXhwIFN0cmluZyIsdz0iUmVnRXhwIFN0cmluZyBJdGVyYXRvciIsRT15LnNldCxqPXkuZ2V0dGVyRm9yKHcpLEM9UmVnRXhwLnByb3RvdHlwZSxrPUMuZXhlYyxTPSIiLm1hdGNoQWxsLE89ISFTJiYhcCgoZnVuY3Rpb24oKXsiYSIubWF0Y2hBbGwoLy4vKX0pKSxJPW8oKGZ1bmN0aW9uKHQsZSxuLHIpe0UodGhpcyx7dHlwZTp3LHJlZ2V4cDp0LHN0cmluZzplLGdsb2JhbDpuLHVuaWNvZGU6cixkb25lOiExfSl9KSx4LChmdW5jdGlvbigpe3ZhciB0PWoodGhpcyk7aWYodC5kb25lKXJldHVybnt2YWx1ZTp2b2lkIDAsZG9uZTohMH07dmFyIGU9dC5yZWdleHAsbj10LnN0cmluZyxyPWZ1bmN0aW9uKHQsZSl7dmFyIG4scj10LmV4ZWM7aWYoImZ1bmN0aW9uIj09dHlwZW9mIHIpe2lmKCJvYmplY3QiIT10eXBlb2Yobj1yLmNhbGwodCxlKSkpdGhyb3cgVHlwZUVycm9yKCJJbmNvcnJlY3QgZXhlYyByZXN1bHQiKTtyZXR1cm4gbn1yZXR1cm4gay5jYWxsKHQsZSl9KGUsbik7cmV0dXJuIG51bGw9PT1yP3t2YWx1ZTp2b2lkIDAsZG9uZTp0LmRvbmU9ITB9OnQuZ2xvYmFsPygiIj09U3RyaW5nKHJbMF0pJiYoZS5sYXN0SW5kZXg9ZyhuLGEoZS5sYXN0SW5kZXgpLHQudW5pY29kZSkpLHt2YWx1ZTpyLGRvbmU6ITF9KToodC5kb25lPSEwLHt2YWx1ZTpyLGRvbmU6ITF9KX0pKSxBPWZ1bmN0aW9uKHQpe3ZhciBlLG4scixvLGksYyx1PXModGhpcyksbD1TdHJpbmcodCk7cmV0dXJuIGU9dih1LFJlZ0V4cCksdm9pZCAwPT09KG49dS5mbGFncykmJnUgaW5zdGFuY2VvZiBSZWdFeHAmJiEoImZsYWdzImluIEMpJiYobj1mLmNhbGwodSkpLHI9dm9pZCAwPT09bj8iIjpTdHJpbmcobiksbz1uZXcgZShlPT09UmVnRXhwP3Uuc291cmNlOnUsciksaT0hIX5yLmluZGV4T2YoImciKSxjPSEhfnIuaW5kZXhPZigidSIpLG8ubGFzdEluZGV4PWEodS5sYXN0SW5kZXgpLG5ldyBJKG8sbCxpLGMpfTtyKHt0YXJnZXQ6IlN0cmluZyIscHJvdG86ITAsZm9yY2VkOk99LHttYXRjaEFsbDpmdW5jdGlvbih0KXt2YXIgZSxuLHIsbz1pKHRoaXMpO2lmKG51bGwhPXQpe2lmKGwodCkmJiF+U3RyaW5nKGkoImZsYWdzImluIEM/dC5mbGFnczpmLmNhbGwodCkpKS5pbmRleE9mKCJnIikpdGhyb3cgVHlwZUVycm9yKCJgLm1hdGNoQWxsYCBkb2VzIG5vdCBhbGxvdyBub24tZ2xvYmFsIHJlZ2V4ZXMiKTtpZihPKXJldHVybiBTLmFwcGx5KG8sYXJndW1lbnRzKTtpZih2b2lkIDA9PT0obj10W2JdKSYmbSYmIlJlZ0V4cCI9PXUodCkmJihuPUEpLG51bGwhPW4pcmV0dXJuIGMobikuY2FsbCh0LG8pfWVsc2UgaWYoTylyZXR1cm4gUy5hcHBseShvLGFyZ3VtZW50cyk7cmV0dXJuIGU9U3RyaW5nKG8pLHI9bmV3IFJlZ0V4cCh0LCJnIiksbT9BLmNhbGwocixlKTpyW2JdKGUpfX0pLG18fGIgaW4gQ3x8ZChDLGIsQSl9LDY1MDAzOmZ1bmN0aW9uKHQsZSxuKXsidXNlIHN0cmljdCI7dmFyIHI9bigzNTg2MCksbz1uKDg3NTc5KSxpPW4oMjc4ODQpLGE9big3MDEzMiksYz1uKDUzMTQxKSxzPW4oMzU0NTUpO3IoIm1hdGNoIiwxLChmdW5jdGlvbih0LGUsbil7cmV0dXJuW2Z1bmN0aW9uKGUpe3ZhciBuPWEodGhpcykscj1udWxsPT1lP3ZvaWQgMDplW3RdO3JldHVybiB2b2lkIDAhPT1yP3IuY2FsbChlLG4pOm5ldyBSZWdFeHAoZSlbdF0oU3RyaW5nKG4pKX0sZnVuY3Rpb24odCl7dmFyIHI9bihlLHQsdGhpcyk7aWYoci5kb25lKXJldHVybiByLnZhbHVlO3ZhciBhPW8odCksdT1TdHJpbmcodGhpcyk7aWYoIWEuZ2xvYmFsKXJldHVybiBzKGEsdSk7dmFyIGw9YS51bmljb2RlO2EubGFzdEluZGV4PTA7Zm9yKHZhciBmLGQ9W10scD0wO251bGwhPT0oZj1zKGEsdSkpOyl7dmFyIGg9U3RyaW5nKGZbMF0pO2RbcF09aCwiIj09PWgmJihhLmxhc3RJbmRleD1jKHUsaShhLmxhc3RJbmRleCksbCkpLHArK31yZXR1cm4gMD09PXA/bnVsbDpkfV19KSl9LDQ0MDE5OmZ1bmN0aW9uKHQsZSxuKXsidXNlIHN0cmljdCI7dmFyIHI9bigxNDA0NCksbz1uKDI2NTczKS5lbmQ7cih7dGFyZ2V0OiJTdHJpbmciLHByb3RvOiEwLGZvcmNlZDpuKDQyMTg0KX0se3BhZEVuZDpmdW5jdGlvbih0KXtyZXR1cm4gbyh0aGlzLHQsYXJndW1lbnRzLmxlbmd0aD4xP2FyZ3VtZW50c1sxXTp2b2lkIDApfX0pfSwzODI6ZnVuY3Rpb24odCxlLG4peyJ1c2Ugc3RyaWN0Ijt2YXIgcj1uKDE0MDQ0KSxvPW4oMjY1NzMpLnN0YXJ0O3Ioe3RhcmdldDoiU3RyaW5nIixwcm90bzohMCxmb3JjZWQ6big0MjE4NCl9LHtwYWRTdGFydDpmdW5jdGlvbih0KXtyZXR1cm4gbyh0aGlzLHQsYXJndW1lbnRzLmxlbmd0aD4xP2FyZ3VtZW50c1sxXTp2b2lkIDApfX0pfSw4MDUxMTpmdW5jdGlvbih0LGUsbil7dmFyIHI9bigxNDA0NCksbz1uKDk1NzMpLGk9bigyNzg4NCk7cih7dGFyZ2V0OiJTdHJpbmciLHN0YXQ6ITB9LHtyYXc6ZnVuY3Rpb24odCl7Zm9yKHZhciBlPW8odC5yYXcpLG49aShlLmxlbmd0aCkscj1hcmd1bWVudHMubGVuZ3RoLGE9W10sYz0wO24+YzspYS5wdXNoKFN0cmluZyhlW2MrK10pKSxjPHImJmEucHVzaChTdHJpbmcoYXJndW1lbnRzW2NdKSk7cmV0dXJuIGEuam9pbigiIil9fSl9LDE4ODIzOmZ1bmN0aW9uKHQsZSxuKXtuKDE0MDQ0KSh7dGFyZ2V0OiJTdHJpbmciLHByb3RvOiEwfSx7cmVwZWF0Om4oNjgyNTMpfSl9LDMzMzIyOmZ1bmN0aW9uKHQsZSxuKXsidXNlIHN0cmljdCI7dmFyIHI9bigzNTg2MCksbz1uKDg3NTc5KSxpPW4oMTkyMDkpLGE9bigyNzg4NCksYz1uKDQzNDE2KSxzPW4oNzAxMzIpLHU9big1MzE0MSksbD1uKDM1NDU1KSxmPU1hdGgubWF4LGQ9TWF0aC5taW4scD1NYXRoLmZsb29yLGg9L1wkKFskJidgXXxcZFxkP3w8W14+XSo+KS9nLHY9L1wkKFskJidgXXxcZFxkPykvZztyKCJyZXBsYWNlIiwyLChmdW5jdGlvbih0LGUsbil7cmV0dXJuW2Z1bmN0aW9uKG4scil7dmFyIG89cyh0aGlzKSxpPW51bGw9PW4/dm9pZCAwOm5bdF07cmV0dXJuIHZvaWQgMCE9PWk/aS5jYWxsKG4sbyxyKTplLmNhbGwoU3RyaW5nKG8pLG4scil9LGZ1bmN0aW9uKHQsaSl7dmFyIHM9bihlLHQsdGhpcyxpKTtpZihzLmRvbmUpcmV0dXJuIHMudmFsdWU7dmFyIHA9byh0KSxoPVN0cmluZyh0aGlzKSx2PSJmdW5jdGlvbiI9PXR5cGVvZiBpO3Z8fChpPVN0cmluZyhpKSk7dmFyIGc9cC5nbG9iYWw7aWYoZyl7dmFyIHk9cC51bmljb2RlO3AubGFzdEluZGV4PTB9Zm9yKHZhciBtPVtdOzspe3ZhciBiPWwocCxoKTtpZihudWxsPT09YilicmVhaztpZihtLnB1c2goYiksIWcpYnJlYWs7IiI9PT1TdHJpbmcoYlswXSkmJihwLmxhc3RJbmRleD11KGgsYShwLmxhc3RJbmRleCkseSkpfWZvcih2YXIgeCx3PSIiLEU9MCxqPTA7ajxtLmxlbmd0aDtqKyspe2I9bVtqXTtmb3IodmFyIEM9U3RyaW5nKGJbMF0pLGs9ZihkKGMoYi5pbmRleCksaC5sZW5ndGgpLDApLFM9W10sTz0xO088Yi5sZW5ndGg7TysrKVMucHVzaCh2b2lkIDA9PT0oeD1iW09dKT94OlN0cmluZyh4KSk7dmFyIEk9Yi5ncm91cHM7aWYodil7dmFyIEE9W0NdLmNvbmNhdChTLGssaCk7dm9pZCAwIT09SSYmQS5wdXNoKEkpO3ZhciBNPVN0cmluZyhpLmFwcGx5KHZvaWQgMCxBKSl9ZWxzZSBNPXIoQyxoLGssUyxJLGkpO2s+PUUmJih3Kz1oLnNsaWNlKEUsaykrTSxFPWsrQy5sZW5ndGgpfXJldHVybiB3K2guc2xpY2UoRSl9XTtmdW5jdGlvbiByKHQsbixyLG8sYSxjKXt2YXIgcz1yK3QubGVuZ3RoLHU9by5sZW5ndGgsbD12O3JldHVybiB2b2lkIDAhPT1hJiYoYT1pKGEpLGw9aCksZS5jYWxsKGMsbCwoZnVuY3Rpb24oZSxpKXt2YXIgYztzd2l0Y2goaS5jaGFyQXQoMCkpe2Nhc2UiJCI6cmV0dXJuIiQiO2Nhc2UiJiI6cmV0dXJuIHQ7Y2FzZSJgIjpyZXR1cm4gbi5zbGljZSgwLHIpO2Nhc2UiJyI6cmV0dXJuIG4uc2xpY2Uocyk7Y2FzZSI8IjpjPWFbaS5zbGljZSgxLC0xKV07YnJlYWs7ZGVmYXVsdDp2YXIgbD0raTtpZigwPT09bClyZXR1cm4gZTtpZihsPnUpe3ZhciBmPXAobC8xMCk7cmV0dXJuIDA9PT1mP2U6Zjw9dT92b2lkIDA9PT1vW2YtMV0/aS5jaGFyQXQoMSk6b1tmLTFdK2kuY2hhckF0KDEpOmV9Yz1vW2wtMV19cmV0dXJuIHZvaWQgMD09PWM/IiI6Y30pKX19KSl9LDMzMDY1OmZ1bmN0aW9uKHQsZSxuKXsidXNlIHN0cmljdCI7dmFyIHI9bigzNTg2MCksbz1uKDg3NTc5KSxpPW4oNzAxMzIpLGE9big3NjQ4MiksYz1uKDM1NDU1KTtyKCJzZWFyY2giLDEsKGZ1bmN0aW9uKHQsZSxuKXtyZXR1cm5bZnVuY3Rpb24oZSl7dmFyIG49aSh0aGlzKSxyPW51bGw9PWU/dm9pZCAwOmVbdF07cmV0dXJuIHZvaWQgMCE9PXI/ci5jYWxsKGUsbik6bmV3IFJlZ0V4cChlKVt0XShTdHJpbmcobikpfSxmdW5jdGlvbih0KXt2YXIgcj1uKGUsdCx0aGlzKTtpZihyLmRvbmUpcmV0dXJuIHIudmFsdWU7dmFyIGk9byh0KSxzPVN0cmluZyh0aGlzKSx1PWkubGFzdEluZGV4O2EodSwwKXx8KGkubGFzdEluZGV4PTApO3ZhciBsPWMoaSxzKTtyZXR1cm4gYShpLmxhc3RJbmRleCx1KXx8KGkubGFzdEluZGV4PXUpLG51bGw9PT1sPy0xOmwuaW5kZXh9XX0pKX0sNzQxMTc6ZnVuY3Rpb24odCxlLG4peyJ1c2Ugc3RyaWN0Ijt2YXIgcj1uKDE0MDQ0KSxvPW4oMzEzNTEpO3Ioe3RhcmdldDoiU3RyaW5nIixwcm90bzohMCxmb3JjZWQ6big1MjEyOSkoInNtYWxsIil9LHtzbWFsbDpmdW5jdGlvbigpe3JldHVybiBvKHRoaXMsInNtYWxsIiwiIiwiIil9fSl9LDE3NDk0OmZ1bmN0aW9uKHQsZSxuKXsidXNlIHN0cmljdCI7dmFyIHI9bigzNTg2MCksbz1uKDQzMjIzKSxpPW4oODc1NzkpLGE9big3MDEzMiksYz1uKDEzOTc5KSxzPW4oNTMxNDEpLHU9bigyNzg4NCksbD1uKDM1NDU1KSxmPW4oMzg1OTgpLGQ9bigzMjE4NykscD1bXS5wdXNoLGg9TWF0aC5taW4sdj00Mjk0OTY3Mjk1LGc9IWQoKGZ1bmN0aW9uKCl7cmV0dXJuIVJlZ0V4cCh2LCJ5Iil9KSk7cigic3BsaXQiLDIsKGZ1bmN0aW9uKHQsZSxuKXt2YXIgcjtyZXR1cm4gcj0iYyI9PSJhYmJjIi5zcGxpdCgvKGIpKi8pWzFdfHw0IT0idGVzdCIuc3BsaXQoLyg/OikvLC0xKS5sZW5ndGh8fDIhPSJhYiIuc3BsaXQoLyg/OmFiKSovKS5sZW5ndGh8fDQhPSIuIi5zcGxpdCgvKC4/KSguPykvKS5sZW5ndGh8fCIuIi5zcGxpdCgvKCkoKS8pLmxlbmd0aD4xfHwiIi5zcGxpdCgvLj8vKS5sZW5ndGg/ZnVuY3Rpb24odCxuKXt2YXIgcj1TdHJpbmcoYSh0aGlzKSksaT12b2lkIDA9PT1uP3Y6bj4+PjA7aWYoMD09PWkpcmV0dXJuW107aWYodm9pZCAwPT09dClyZXR1cm5bcl07aWYoIW8odCkpcmV0dXJuIGUuY2FsbChyLHQsaSk7Zm9yKHZhciBjLHMsdSxsPVtdLGQ9KHQuaWdub3JlQ2FzZT8iaSI6IiIpKyh0Lm11bHRpbGluZT8ibSI6IiIpKyh0LnVuaWNvZGU/InUiOiIiKSsodC5zdGlja3k/InkiOiIiKSxoPTAsZz1uZXcgUmVnRXhwKHQuc291cmNlLGQrImciKTsoYz1mLmNhbGwoZyxyKSkmJiEoKHM9Zy5sYXN0SW5kZXgpPmgmJihsLnB1c2goci5zbGljZShoLGMuaW5kZXgpKSxjLmxlbmd0aD4xJiZjLmluZGV4PHIubGVuZ3RoJiZwLmFwcGx5KGwsYy5zbGljZSgxKSksdT1jWzBdLmxlbmd0aCxoPXMsbC5sZW5ndGg+PWkpKTspZy5sYXN0SW5kZXg9PT1jLmluZGV4JiZnLmxhc3RJbmRleCsrO3JldHVybiBoPT09ci5sZW5ndGg/IXUmJmcudGVzdCgiIil8fGwucHVzaCgiIik6bC5wdXNoKHIuc2xpY2UoaCkpLGwubGVuZ3RoPmk/bC5zbGljZSgwLGkpOmx9OiIwIi5zcGxpdCh2b2lkIDAsMCkubGVuZ3RoP2Z1bmN0aW9uKHQsbil7cmV0dXJuIHZvaWQgMD09PXQmJjA9PT1uP1tdOmUuY2FsbCh0aGlzLHQsbil9OmUsW2Z1bmN0aW9uKGUsbil7dmFyIG89YSh0aGlzKSxpPW51bGw9PWU/dm9pZCAwOmVbdF07cmV0dXJuIHZvaWQgMCE9PWk/aS5jYWxsKGUsbyxuKTpyLmNhbGwoU3RyaW5nKG8pLGUsbil9LGZ1bmN0aW9uKHQsbyl7dmFyIGE9bihyLHQsdGhpcyxvLHIhPT1lKTtpZihhLmRvbmUpcmV0dXJuIGEudmFsdWU7dmFyIGY9aSh0KSxkPVN0cmluZyh0aGlzKSxwPWMoZixSZWdFeHApLHk9Zi51bmljb2RlLG09KGYuaWdub3JlQ2FzZT8iaSI6IiIpKyhmLm11bHRpbGluZT8ibSI6IiIpKyhmLnVuaWNvZGU/InUiOiIiKSsoZz8ieSI6ImciKSxiPW5ldyBwKGc/ZjoiXig/OiIrZi5zb3VyY2UrIikiLG0pLHg9dm9pZCAwPT09bz92Om8+Pj4wO2lmKDA9PT14KXJldHVybltdO2lmKDA9PT1kLmxlbmd0aClyZXR1cm4gbnVsbD09PWwoYixkKT9bZF06W107Zm9yKHZhciB3PTAsRT0wLGo9W107RTxkLmxlbmd0aDspe2IubGFzdEluZGV4PWc/RTowO3ZhciBDLGs9bChiLGc/ZDpkLnNsaWNlKEUpKTtpZihudWxsPT09a3x8KEM9aCh1KGIubGFzdEluZGV4KyhnPzA6RSkpLGQubGVuZ3RoKSk9PT13KUU9cyhkLEUseSk7ZWxzZXtpZihqLnB1c2goZC5zbGljZSh3LEUpKSxqLmxlbmd0aD09PXgpcmV0dXJuIGo7Zm9yKHZhciBTPTE7Uzw9ay5sZW5ndGgtMTtTKyspaWYoai5wdXNoKGtbU10pLGoubGVuZ3RoPT09eClyZXR1cm4gajtFPXc9Q319cmV0dXJuIGoucHVzaChkLnNsaWNlKHcpKSxqfV19KSwhZyl9LDgwMzYzOmZ1bmN0aW9uKHQsZSxuKXsidXNlIHN0cmljdCI7dmFyIHIsbz1uKDE0MDQ0KSxpPW4oOTcyNTcpLmYsYT1uKDI3ODg0KSxjPW4oOTkzNDYpLHM9big3MDEzMiksdT1uKDkzOTE1KSxsPW4oNjU2NzIpLGY9IiIuc3RhcnRzV2l0aCxkPU1hdGgubWluLHA9dSgic3RhcnRzV2l0aCIpO28oe3RhcmdldDoiU3RyaW5nIixwcm90bzohMCxmb3JjZWQ6ISEobHx8cHx8KHI9aShTdHJpbmcucHJvdG90eXBlLCJzdGFydHNXaXRoIiksIXJ8fHIud3JpdGFibGUpKSYmIXB9LHtzdGFydHNXaXRoOmZ1bmN0aW9uKHQpe3ZhciBlPVN0cmluZyhzKHRoaXMpKTtjKHQpO3ZhciBuPWEoZChhcmd1bWVudHMubGVuZ3RoPjE/YXJndW1lbnRzWzFdOnZvaWQgMCxlLmxlbmd0aCkpLHI9U3RyaW5nKHQpO3JldHVybiBmP2YuY2FsbChlLHIsbik6ZS5zbGljZShuLG4rci5sZW5ndGgpPT09cn19KX0sMjgwMDM6ZnVuY3Rpb24odCxlLG4peyJ1c2Ugc3RyaWN0Ijt2YXIgcj1uKDE0MDQ0KSxvPW4oMzEzNTEpO3Ioe3RhcmdldDoiU3RyaW5nIixwcm90bzohMCxmb3JjZWQ6big1MjEyOSkoInN0cmlrZSIpfSx7c3RyaWtlOmZ1bmN0aW9uKCl7cmV0dXJuIG8odGhpcywic3RyaWtlIiwiIiwiIil9fSl9LDY3OTQxOmZ1bmN0aW9uKHQsZSxuKXsidXNlIHN0cmljdCI7dmFyIHI9bigxNDA0NCksbz1uKDMxMzUxKTtyKHt0YXJnZXQ6IlN0cmluZyIscHJvdG86ITAsZm9yY2VkOm4oNTIxMjkpKCJzdWIiKX0se3N1YjpmdW5jdGlvbigpe3JldHVybiBvKHRoaXMsInN1YiIsIiIsIiIpfX0pfSw0NDA1MTpmdW5jdGlvbih0LGUsbil7InVzZSBzdHJpY3QiO3ZhciByPW4oMTQwNDQpLG89bigzMTM1MSk7cih7dGFyZ2V0OiJTdHJpbmciLHByb3RvOiEwLGZvcmNlZDpuKDUyMTI5KSgic3VwIil9LHtzdXA6ZnVuY3Rpb24oKXtyZXR1cm4gbyh0aGlzLCJzdXAiLCIiLCIiKX19KX0sNzQ3OTU6ZnVuY3Rpb24odCxlLG4peyJ1c2Ugc3RyaWN0Ijt2YXIgcj1uKDE0MDQ0KSxvPW4oODIzNTApLmVuZCxpPW4oODQ3NTQpKCJ0cmltRW5kIiksYT1pP2Z1bmN0aW9uKCl7cmV0dXJuIG8odGhpcyl9OiIiLnRyaW1FbmQ7cih7dGFyZ2V0OiJTdHJpbmciLHByb3RvOiEwLGZvcmNlZDppfSx7dHJpbUVuZDphLHRyaW1SaWdodDphfSl9LDY5MTg4OmZ1bmN0aW9uKHQsZSxuKXsidXNlIHN0cmljdCI7dmFyIHI9bigxNDA0NCksbz1uKDgyMzUwKS5zdGFydCxpPW4oODQ3NTQpKCJ0cmltU3RhcnQiKSxhPWk/ZnVuY3Rpb24oKXtyZXR1cm4gbyh0aGlzKX06IiIudHJpbVN0YXJ0O3Ioe3RhcmdldDoiU3RyaW5nIixwcm90bzohMCxmb3JjZWQ6aX0se3RyaW1TdGFydDphLHRyaW1MZWZ0OmF9KX0sNDMzOTY6ZnVuY3Rpb24odCxlLG4peyJ1c2Ugc3RyaWN0Ijt2YXIgcj1uKDE0MDQ0KSxvPW4oODIzNTApLnRyaW07cih7dGFyZ2V0OiJTdHJpbmciLHByb3RvOiEwLGZvcmNlZDpuKDg0NzU0KSgidHJpbSIpfSx7dHJpbTpmdW5jdGlvbigpe3JldHVybiBvKHRoaXMpfX0pfSw1MTA5MDpmdW5jdGlvbih0LGUsbil7big5MjI3NSkoImFzeW5jSXRlcmF0b3IiKX0sMjQ3ODU6ZnVuY3Rpb24odCxlLG4peyJ1c2Ugc3RyaWN0Ijt2YXIgcj1uKDE0MDQ0KSxvPW4oNjI1NTYpLGk9big4OTU1OCksYT1uKDc2Mjk4KSxjPW4oMTA1OTIpLHM9bigzNzYyMCkuZix1PW4oOTk2MjUpLGw9aS5TeW1ib2w7aWYobyYmImZ1bmN0aW9uIj09dHlwZW9mIGwmJighKCJkZXNjcmlwdGlvbiJpbiBsLnByb3RvdHlwZSl8fHZvaWQgMCE9PWwoKS5kZXNjcmlwdGlvbikpe3ZhciBmPXt9LGQ9ZnVuY3Rpb24oKXt2YXIgdD1hcmd1bWVudHMubGVuZ3RoPDF8fHZvaWQgMD09PWFyZ3VtZW50c1swXT92b2lkIDA6U3RyaW5nKGFyZ3VtZW50c1swXSksZT10aGlzIGluc3RhbmNlb2YgZD9uZXcgbCh0KTp2b2lkIDA9PT10P2woKTpsKHQpO3JldHVybiIiPT09dCYmKGZbZV09ITApLGV9O3UoZCxsKTt2YXIgcD1kLnByb3RvdHlwZT1sLnByb3RvdHlwZTtwLmNvbnN0cnVjdG9yPWQ7dmFyIGg9cC50b1N0cmluZyx2PSJTeW1ib2wodGVzdCkiPT1TdHJpbmcobCgidGVzdCIpKSxnPS9eU3ltYm9sXCgoLiopXClbXildKyQvO3MocCwiZGVzY3JpcHRpb24iLHtjb25maWd1cmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7dmFyIHQ9Yyh0aGlzKT90aGlzLnZhbHVlT2YoKTp0aGlzLGU9aC5jYWxsKHQpO2lmKGEoZix0KSlyZXR1cm4iIjt2YXIgbj12P2Uuc2xpY2UoNywtMSk6ZS5yZXBsYWNlKGcsIiQxIik7cmV0dXJuIiI9PT1uP3ZvaWQgMDpufX0pLHIoe2dsb2JhbDohMCxmb3JjZWQ6ITB9LHtTeW1ib2w6ZH0pfX0sODkxNzpmdW5jdGlvbih0LGUsbil7big5MjI3NSkoImhhc0luc3RhbmNlIil9LDU0Nzg2OmZ1bmN0aW9uKHQsZSxuKXtuKDkyMjc1KSgiaXNDb25jYXRTcHJlYWRhYmxlIil9LDEyODE2OmZ1bmN0aW9uKHQsZSxuKXtuKDkyMjc1KSgiaXRlcmF0b3IiKX0sNjU2Nzk6ZnVuY3Rpb24odCxlLG4peyJ1c2Ugc3RyaWN0Ijt2YXIgcj1uKDE0MDQ0KSxvPW4oODk1NTgpLGk9big3NzAxKSxhPW4oNjU2NzIpLGM9big2MjU1Nikscz1uKDkwMTQpLHU9bigxNjQxMCksbD1uKDMyMTg3KSxmPW4oNzYyOTgpLGQ9big2MTk5KSxwPW4oMTA1OTIpLGg9big4NzU3OSksdj1uKDE5MjA5KSxnPW4oOTU3MykseT1uKDUzNDk4KSxtPW4oMTQyMDkpLGI9big1MDg2OCkseD1uKDI1NTA3KSx3PW4oMTMzMzQpLEU9bigyNjkzNyksaj1uKDU2OTkxKSxDPW4oOTcyNTcpLGs9bigzNzYyMCksUz1uKDQxNjI4KSxPPW4oNjY5NzEpLEk9big5MjkxMyksQT1uKDYyMDU0KSxNPW4oODMxOTcpLF89bigyMzA3MCksVD1uKDY3MjkpLFI9bigyMzcyNCksTD1uKDczOTE2KSxQPW4oOTIyNzUpLE49big1MTEyOCksRD1uKDg5ODI3KSxGPW4oMzAwMjUpLmZvckVhY2gsVT1NKCJoaWRkZW4iKSxCPSJTeW1ib2wiLHo9UigidG9QcmltaXRpdmUiKSxWPUQuc2V0LEg9RC5nZXR0ZXJGb3IoQikscT1PYmplY3QucHJvdG90eXBlLFc9by5TeW1ib2wsRz1pKCJKU09OIiwic3RyaW5naWZ5IiksWj1DLmYsJD1rLmYsWT1FLmYsSj1TLmYsSz1BKCJzeW1ib2xzIiksWD1BKCJvcC1zeW1ib2xzIiksUT1BKCJzdHJpbmctdG8tc3ltYm9sLXJlZ2lzdHJ5IiksdHQ9QSgic3ltYm9sLXRvLXN0cmluZy1yZWdpc3RyeSIpLGV0PUEoIndrcyIpLG50PW8uUU9iamVjdCxydD0hbnR8fCFudC5wcm90b3R5cGV8fCFudC5wcm90b3R5cGUuZmluZENoaWxkLG90PWMmJmwoKGZ1bmN0aW9uKCl7cmV0dXJuIDchPWIoJCh7fSwiYSIse2dldDpmdW5jdGlvbigpe3JldHVybiAkKHRoaXMsImEiLHt2YWx1ZTo3fSkuYX19KSkuYX0pKT9mdW5jdGlvbih0LGUsbil7dmFyIHI9WihxLGUpO3ImJmRlbGV0ZSBxW2VdLCQodCxlLG4pLHImJnQhPT1xJiYkKHEsZSxyKX06JCxpdD1mdW5jdGlvbih0LGUpe3ZhciBuPUtbdF09YihXLnByb3RvdHlwZSk7cmV0dXJuIFYobix7dHlwZTpCLHRhZzp0LGRlc2NyaXB0aW9uOmV9KSxjfHwobi5kZXNjcmlwdGlvbj1lKSxufSxhdD1zJiYic3ltYm9sIj09dHlwZW9mIFcuaXRlcmF0b3I/ZnVuY3Rpb24odCl7cmV0dXJuInN5bWJvbCI9PXR5cGVvZiB0fTpmdW5jdGlvbih0KXtyZXR1cm4gT2JqZWN0KHQpaW5zdGFuY2VvZiBXfSxjdD1mdW5jdGlvbih0LGUsbil7dD09PXEmJmN0KFgsZSxuKSxoKHQpO3ZhciByPXkoZSwhMCk7cmV0dXJuIGgobiksZihLLHIpPyhuLmVudW1lcmFibGU/KGYodCxVKSYmdFtVXVtyXSYmKHRbVV1bcl09ITEpLG49YihuLHtlbnVtZXJhYmxlOm0oMCwhMSl9KSk6KGYodCxVKXx8JCh0LFUsbSgxLHt9KSksdFtVXVtyXT0hMCksb3QodCxyLG4pKTokKHQscixuKX0sc3Q9ZnVuY3Rpb24odCxlKXtoKHQpO3ZhciBuPWcoZSkscj14KG4pLmNvbmNhdChkdChuKSk7cmV0dXJuIEYociwoZnVuY3Rpb24oZSl7YyYmIXV0LmNhbGwobixlKXx8Y3QodCxlLG5bZV0pfSkpLHR9LHV0PWZ1bmN0aW9uKHQpe3ZhciBlPXkodCwhMCksbj1KLmNhbGwodGhpcyxlKTtyZXR1cm4hKHRoaXM9PT1xJiZmKEssZSkmJiFmKFgsZSkpJiYoIShufHwhZih0aGlzLGUpfHwhZihLLGUpfHxmKHRoaXMsVSkmJnRoaXNbVV1bZV0pfHxuKX0sbHQ9ZnVuY3Rpb24odCxlKXt2YXIgbj1nKHQpLHI9eShlLCEwKTtpZihuIT09cXx8IWYoSyxyKXx8ZihYLHIpKXt2YXIgbz1aKG4scik7cmV0dXJuIW98fCFmKEsscil8fGYobixVKSYmbltVXVtyXXx8KG8uZW51bWVyYWJsZT0hMCksb319LGZ0PWZ1bmN0aW9uKHQpe3ZhciBlPVkoZyh0KSksbj1bXTtyZXR1cm4gRihlLChmdW5jdGlvbih0KXtmKEssdCl8fGYoXyx0KXx8bi5wdXNoKHQpfSkpLG59LGR0PWZ1bmN0aW9uKHQpe3ZhciBlPXQ9PT1xLG49WShlP1g6Zyh0KSkscj1bXTtyZXR1cm4gRihuLChmdW5jdGlvbih0KXshZihLLHQpfHxlJiYhZihxLHQpfHxyLnB1c2goS1t0XSl9KSkscn07KHN8fChXPWZ1bmN0aW9uKCl7aWYodGhpcyBpbnN0YW5jZW9mIFcpdGhyb3cgVHlwZUVycm9yKCJTeW1ib2wgaXMgbm90IGEgY29uc3RydWN0b3IiKTt2YXIgdD1hcmd1bWVudHMubGVuZ3RoJiZ2b2lkIDAhPT1hcmd1bWVudHNbMF0/U3RyaW5nKGFyZ3VtZW50c1swXSk6dm9pZCAwLGU9VCh0KSxuPWZ1bmN0aW9uKHQpe3RoaXM9PT1xJiZuLmNhbGwoWCx0KSxmKHRoaXMsVSkmJmYodGhpc1tVXSxlKSYmKHRoaXNbVV1bZV09ITEpLG90KHRoaXMsZSxtKDEsdCkpfTtyZXR1cm4gYyYmcnQmJm90KHEsZSx7Y29uZmlndXJhYmxlOiEwLHNldDpufSksaXQoZSx0KX0sSShXLnByb3RvdHlwZSwidG9TdHJpbmciLChmdW5jdGlvbigpe3JldHVybiBIKHRoaXMpLnRhZ30pKSxTLmY9dXQsay5mPWN0LEMuZj1sdCx3LmY9RS5mPWZ0LGouZj1kdCxjJiYoJChXLnByb3RvdHlwZSwiZGVzY3JpcHRpb24iLHtjb25maWd1cmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIEgodGhpcykuZGVzY3JpcHRpb259fSksYXx8SShxLCJwcm9wZXJ0eUlzRW51bWVyYWJsZSIsdXQse3Vuc2FmZTohMH0pKSksdXx8KEwuZj1mdW5jdGlvbih0KXtyZXR1cm4gaXQoUih0KSx0KX0pLHIoe2dsb2JhbDohMCx3cmFwOiEwLGZvcmNlZDohcyxzaGFtOiFzfSx7U3ltYm9sOld9KSxGKHgoZXQpLChmdW5jdGlvbih0KXtQKHQpfSkpLHIoe3RhcmdldDpCLHN0YXQ6ITAsZm9yY2VkOiFzfSx7Zm9yOmZ1bmN0aW9uKHQpe3ZhciBlPVN0cmluZyh0KTtpZihmKFEsZSkpcmV0dXJuIFFbZV07dmFyIG49VyhlKTtyZXR1cm4gUVtlXT1uLHR0W25dPWUsbn0sa2V5Rm9yOmZ1bmN0aW9uKHQpe2lmKCFhdCh0KSl0aHJvdyBUeXBlRXJyb3IodCsiIGlzIG5vdCBhIHN5bWJvbCIpO2lmKGYodHQsdCkpcmV0dXJuIHR0W3RdfSx1c2VTZXR0ZXI6ZnVuY3Rpb24oKXtydD0hMH0sdXNlU2ltcGxlOmZ1bmN0aW9uKCl7cnQ9ITF9fSkscih7dGFyZ2V0OiJPYmplY3QiLHN0YXQ6ITAsZm9yY2VkOiFzLHNoYW06IWN9LHtjcmVhdGU6ZnVuY3Rpb24odCxlKXtyZXR1cm4gdm9pZCAwPT09ZT9iKHQpOnN0KGIodCksZSl9LGRlZmluZVByb3BlcnR5OmN0LGRlZmluZVByb3BlcnRpZXM6c3QsZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yOmx0fSkscih7dGFyZ2V0OiJPYmplY3QiLHN0YXQ6ITAsZm9yY2VkOiFzfSx7Z2V0T3duUHJvcGVydHlOYW1lczpmdCxnZXRPd25Qcm9wZXJ0eVN5bWJvbHM6ZHR9KSxyKHt0YXJnZXQ6Ik9iamVjdCIsc3RhdDohMCxmb3JjZWQ6bCgoZnVuY3Rpb24oKXtqLmYoMSl9KSl9LHtnZXRPd25Qcm9wZXJ0eVN5bWJvbHM6ZnVuY3Rpb24odCl7cmV0dXJuIGouZih2KHQpKX19KSxHKSYmcih7dGFyZ2V0OiJKU09OIixzdGF0OiEwLGZvcmNlZDohc3x8bCgoZnVuY3Rpb24oKXt2YXIgdD1XKCk7cmV0dXJuIltudWxsXSIhPUcoW3RdKXx8Int9IiE9Ryh7YTp0fSl8fCJ7fSIhPUcoT2JqZWN0KHQpKX0pKX0se3N0cmluZ2lmeTpmdW5jdGlvbih0LGUsbil7Zm9yKHZhciByLG89W3RdLGk9MTthcmd1bWVudHMubGVuZ3RoPmk7KW8ucHVzaChhcmd1bWVudHNbaSsrXSk7aWYocj1lLChwKGUpfHx2b2lkIDAhPT10KSYmIWF0KHQpKXJldHVybiBkKGUpfHwoZT1mdW5jdGlvbih0LGUpe2lmKCJmdW5jdGlvbiI9PXR5cGVvZiByJiYoZT1yLmNhbGwodGhpcyx0LGUpKSwhYXQoZSkpcmV0dXJuIGV9KSxvWzFdPWUsRy5hcHBseShudWxsLG8pfX0pO1cucHJvdG90eXBlW3pdfHxPKFcucHJvdG90eXBlLHosVy5wcm90b3R5cGUudmFsdWVPZiksTihXLEIpLF9bVV09ITB9LDk4MzA2OmZ1bmN0aW9uKHQsZSxuKXtuKDkyMjc1KSgibWF0Y2hBbGwiKX0sNjE5MjQ6ZnVuY3Rpb24odCxlLG4pe24oOTIyNzUpKCJtYXRjaCIpfSwxMjAyNTpmdW5jdGlvbih0LGUsbil7big5MjI3NSkoInJlcGxhY2UiKX0sMjgzMzpmdW5jdGlvbih0LGUsbil7big5MjI3NSkoInNlYXJjaCIpfSw5NjQ1MzpmdW5jdGlvbih0LGUsbil7big5MjI3NSkoInNwZWNpZXMiKX0sNzA4NjM6ZnVuY3Rpb24odCxlLG4pe24oOTIyNzUpKCJzcGxpdCIpfSwyNDgwMjpmdW5jdGlvbih0LGUsbil7big5MjI3NSkoInRvUHJpbWl0aXZlIil9LDE4MjczOmZ1bmN0aW9uKHQsZSxuKXtuKDkyMjc1KSgidG9TdHJpbmdUYWciKX0sNDI0MTE6ZnVuY3Rpb24odCxlLG4pe24oOTIyNzUpKCJ1bnNjb3BhYmxlcyIpfSw3NDIzMDpmdW5jdGlvbih0LGUsbil7InVzZSBzdHJpY3QiO3ZhciByPW4oNzMwNzQpLG89big5OTQzMSksaT1yLmFUeXBlZEFycmF5OygwLHIuZXhwb3J0VHlwZWRBcnJheU1ldGhvZCkoImNvcHlXaXRoaW4iLChmdW5jdGlvbih0LGUpe3JldHVybiBvLmNhbGwoaSh0aGlzKSx0LGUsYXJndW1lbnRzLmxlbmd0aD4yP2FyZ3VtZW50c1syXTp2b2lkIDApfSkpfSwxODUwNjpmdW5jdGlvbih0LGUsbil7InVzZSBzdHJpY3QiO3ZhciByPW4oNzMwNzQpLG89bigzMDAyNSkuZXZlcnksaT1yLmFUeXBlZEFycmF5OygwLHIuZXhwb3J0VHlwZWRBcnJheU1ldGhvZCkoImV2ZXJ5IiwoZnVuY3Rpb24odCl7cmV0dXJuIG8oaSh0aGlzKSx0LGFyZ3VtZW50cy5sZW5ndGg+MT9hcmd1bWVudHNbMV06dm9pZCAwKX0pKX0sMjAyNDI6ZnVuY3Rpb24odCxlLG4peyJ1c2Ugc3RyaWN0Ijt2YXIgcj1uKDczMDc0KSxvPW4oNjU4OTUpLGk9ci5hVHlwZWRBcnJheTsoMCxyLmV4cG9ydFR5cGVkQXJyYXlNZXRob2QpKCJmaWxsIiwoZnVuY3Rpb24odCl7cmV0dXJuIG8uYXBwbHkoaSh0aGlzKSxhcmd1bWVudHMpfSkpfSwyODE1NTpmdW5jdGlvbih0LGUsbil7InVzZSBzdHJpY3QiO3ZhciByPW4oNzMwNzQpLG89bigzMDAyNSkuZmlsdGVyLGk9bigxMzk3OSksYT1yLmFUeXBlZEFycmF5LGM9ci5hVHlwZWRBcnJheUNvbnN0cnVjdG9yOygwLHIuZXhwb3J0VHlwZWRBcnJheU1ldGhvZCkoImZpbHRlciIsKGZ1bmN0aW9uKHQpe2Zvcih2YXIgZT1vKGEodGhpcyksdCxhcmd1bWVudHMubGVuZ3RoPjE/YXJndW1lbnRzWzFdOnZvaWQgMCksbj1pKHRoaXMsdGhpcy5jb25zdHJ1Y3Rvcikscj0wLHM9ZS5sZW5ndGgsdT1uZXcoYyhuKSkocyk7cz5yOyl1W3JdPWVbcisrXTtyZXR1cm4gdX0pKX0sNzY0NDI6ZnVuY3Rpb24odCxlLG4peyJ1c2Ugc3RyaWN0Ijt2YXIgcj1uKDczMDc0KSxvPW4oMzAwMjUpLmZpbmRJbmRleCxpPXIuYVR5cGVkQXJyYXk7KDAsci5leHBvcnRUeXBlZEFycmF5TWV0aG9kKSgiZmluZEluZGV4IiwoZnVuY3Rpb24odCl7cmV0dXJuIG8oaSh0aGlzKSx0LGFyZ3VtZW50cy5sZW5ndGg+MT9hcmd1bWVudHNbMV06dm9pZCAwKX0pKX0sMzM5MDE6ZnVuY3Rpb24odCxlLG4peyJ1c2Ugc3RyaWN0Ijt2YXIgcj1uKDczMDc0KSxvPW4oMzAwMjUpLmZpbmQsaT1yLmFUeXBlZEFycmF5OygwLHIuZXhwb3J0VHlwZWRBcnJheU1ldGhvZCkoImZpbmQiLChmdW5jdGlvbih0KXtyZXR1cm4gbyhpKHRoaXMpLHQsYXJndW1lbnRzLmxlbmd0aD4xP2FyZ3VtZW50c1sxXTp2b2lkIDApfSkpfSwyNjgwOmZ1bmN0aW9uKHQsZSxuKXtuKDkzMDE3KSgiRmxvYXQzMiIsKGZ1bmN0aW9uKHQpe3JldHVybiBmdW5jdGlvbihlLG4scil7cmV0dXJuIHQodGhpcyxlLG4scil9fSkpfSwzODI4MDpmdW5jdGlvbih0LGUsbil7big5MzAxNykoIkZsb2F0NjQiLChmdW5jdGlvbih0KXtyZXR1cm4gZnVuY3Rpb24oZSxuLHIpe3JldHVybiB0KHRoaXMsZSxuLHIpfX0pKX0sODg2MzY6ZnVuY3Rpb24odCxlLG4peyJ1c2Ugc3RyaWN0Ijt2YXIgcj1uKDczMDc0KSxvPW4oMzAwMjUpLmZvckVhY2gsaT1yLmFUeXBlZEFycmF5OygwLHIuZXhwb3J0VHlwZWRBcnJheU1ldGhvZCkoImZvckVhY2giLChmdW5jdGlvbih0KXtvKGkodGhpcyksdCxhcmd1bWVudHMubGVuZ3RoPjE/YXJndW1lbnRzWzFdOnZvaWQgMCl9KSl9LDE4NTU5OmZ1bmN0aW9uKHQsZSxuKXsidXNlIHN0cmljdCI7dmFyIHI9bigzNTYyNyk7KDAsbig3MzA3NCkuZXhwb3J0VHlwZWRBcnJheVN0YXRpY01ldGhvZCkoImZyb20iLG4oMjA0NTUpLHIpfSw4MTQ2MzpmdW5jdGlvbih0LGUsbil7InVzZSBzdHJpY3QiO3ZhciByPW4oNzMwNzQpLG89big4NTgwMykuaW5jbHVkZXMsaT1yLmFUeXBlZEFycmF5OygwLHIuZXhwb3J0VHlwZWRBcnJheU1ldGhvZCkoImluY2x1ZGVzIiwoZnVuY3Rpb24odCl7cmV0dXJuIG8oaSh0aGlzKSx0LGFyZ3VtZW50cy5sZW5ndGg+MT9hcmd1bWVudHNbMV06dm9pZCAwKX0pKX0sOTUxNjM6ZnVuY3Rpb24odCxlLG4peyJ1c2Ugc3RyaWN0Ijt2YXIgcj1uKDczMDc0KSxvPW4oODU4MDMpLmluZGV4T2YsaT1yLmFUeXBlZEFycmF5OygwLHIuZXhwb3J0VHlwZWRBcnJheU1ldGhvZCkoImluZGV4T2YiLChmdW5jdGlvbih0KXtyZXR1cm4gbyhpKHRoaXMpLHQsYXJndW1lbnRzLmxlbmd0aD4xP2FyZ3VtZW50c1sxXTp2b2lkIDApfSkpfSwyNDQ5ODpmdW5jdGlvbih0LGUsbil7big5MzAxNykoIkludDE2IiwoZnVuY3Rpb24odCl7cmV0dXJuIGZ1bmN0aW9uKGUsbixyKXtyZXR1cm4gdCh0aGlzLGUsbixyKX19KSl9LDE3MTUyOmZ1bmN0aW9uKHQsZSxuKXtuKDkzMDE3KSgiSW50MzIiLChmdW5jdGlvbih0KXtyZXR1cm4gZnVuY3Rpb24oZSxuLHIpe3JldHVybiB0KHRoaXMsZSxuLHIpfX0pKX0sNzAzNzM6ZnVuY3Rpb24odCxlLG4pe24oOTMwMTcpKCJJbnQ4IiwoZnVuY3Rpb24odCl7cmV0dXJuIGZ1bmN0aW9uKGUsbixyKXtyZXR1cm4gdCh0aGlzLGUsbixyKX19KSl9LDgzNjczOmZ1bmN0aW9uKHQsZSxuKXsidXNlIHN0cmljdCI7dmFyIHI9big4OTU1OCksbz1uKDczMDc0KSxpPW4oNTAwNjMpLGE9bigyMzcyNCkoIml0ZXJhdG9yIiksYz1yLlVpbnQ4QXJyYXkscz1pLnZhbHVlcyx1PWkua2V5cyxsPWkuZW50cmllcyxmPW8uYVR5cGVkQXJyYXksZD1vLmV4cG9ydFR5cGVkQXJyYXlNZXRob2QscD1jJiZjLnByb3RvdHlwZVthXSxoPSEhcCYmKCJ2YWx1ZXMiPT1wLm5hbWV8fG51bGw9PXAubmFtZSksdj1mdW5jdGlvbigpe3JldHVybiBzLmNhbGwoZih0aGlzKSl9O2QoImVudHJpZXMiLChmdW5jdGlvbigpe3JldHVybiBsLmNhbGwoZih0aGlzKSl9KSksZCgia2V5cyIsKGZ1bmN0aW9uKCl7cmV0dXJuIHUuY2FsbChmKHRoaXMpKX0pKSxkKCJ2YWx1ZXMiLHYsIWgpLGQoYSx2LCFoKX0sMjM1Njg6ZnVuY3Rpb24odCxlLG4peyJ1c2Ugc3RyaWN0Ijt2YXIgcj1uKDczMDc0KSxvPXIuYVR5cGVkQXJyYXksaT1yLmV4cG9ydFR5cGVkQXJyYXlNZXRob2QsYT1bXS5qb2luO2koImpvaW4iLChmdW5jdGlvbih0KXtyZXR1cm4gYS5hcHBseShvKHRoaXMpLGFyZ3VtZW50cyl9KSl9LDI3Mjk0OmZ1bmN0aW9uKHQsZSxuKXsidXNlIHN0cmljdCI7dmFyIHI9big3MzA3NCksbz1uKDQ5MjQ5KSxpPXIuYVR5cGVkQXJyYXk7KDAsci5leHBvcnRUeXBlZEFycmF5TWV0aG9kKSgibGFzdEluZGV4T2YiLChmdW5jdGlvbih0KXtyZXR1cm4gby5hcHBseShpKHRoaXMpLGFyZ3VtZW50cyl9KSl9LDI0NDU3OmZ1bmN0aW9uKHQsZSxuKXsidXNlIHN0cmljdCI7dmFyIHI9big3MzA3NCksbz1uKDMwMDI1KS5tYXAsaT1uKDEzOTc5KSxhPXIuYVR5cGVkQXJyYXksYz1yLmFUeXBlZEFycmF5Q29uc3RydWN0b3I7KDAsci5leHBvcnRUeXBlZEFycmF5TWV0aG9kKSgibWFwIiwoZnVuY3Rpb24odCl7cmV0dXJuIG8oYSh0aGlzKSx0LGFyZ3VtZW50cy5sZW5ndGg+MT9hcmd1bWVudHNbMV06dm9pZCAwLChmdW5jdGlvbih0LGUpe3JldHVybiBuZXcoYyhpKHQsdC5jb25zdHJ1Y3RvcikpKShlKX0pKX0pKX0sNTA0ODI6ZnVuY3Rpb24odCxlLG4peyJ1c2Ugc3RyaWN0Ijt2YXIgcj1uKDczMDc0KSxvPW4oMzU2MjcpLGk9ci5hVHlwZWRBcnJheUNvbnN0cnVjdG9yOygwLHIuZXhwb3J0VHlwZWRBcnJheVN0YXRpY01ldGhvZCkoIm9mIiwoZnVuY3Rpb24oKXtmb3IodmFyIHQ9MCxlPWFyZ3VtZW50cy5sZW5ndGgsbj1uZXcoaSh0aGlzKSkoZSk7ZT50OyluW3RdPWFyZ3VtZW50c1t0KytdO3JldHVybiBufSksbyl9LDc1NDk5OmZ1bmN0aW9uKHQsZSxuKXsidXNlIHN0cmljdCI7dmFyIHI9big3MzA3NCksbz1uKDEyMzY2KS5yaWdodCxpPXIuYVR5cGVkQXJyYXk7KDAsci5leHBvcnRUeXBlZEFycmF5TWV0aG9kKSgicmVkdWNlUmlnaHQiLChmdW5jdGlvbih0KXtyZXR1cm4gbyhpKHRoaXMpLHQsYXJndW1lbnRzLmxlbmd0aCxhcmd1bWVudHMubGVuZ3RoPjE/YXJndW1lbnRzWzFdOnZvaWQgMCl9KSl9LDM5MzI6ZnVuY3Rpb24odCxlLG4peyJ1c2Ugc3RyaWN0Ijt2YXIgcj1uKDczMDc0KSxvPW4oMTIzNjYpLmxlZnQsaT1yLmFUeXBlZEFycmF5OygwLHIuZXhwb3J0VHlwZWRBcnJheU1ldGhvZCkoInJlZHVjZSIsKGZ1bmN0aW9uKHQpe3JldHVybiBvKGkodGhpcyksdCxhcmd1bWVudHMubGVuZ3RoLGFyZ3VtZW50cy5sZW5ndGg+MT9hcmd1bWVudHNbMV06dm9pZCAwKX0pKX0sODc1NjQ6ZnVuY3Rpb24odCxlLG4peyJ1c2Ugc3RyaWN0Ijt2YXIgcj1uKDczMDc0KSxvPXIuYVR5cGVkQXJyYXksaT1yLmV4cG9ydFR5cGVkQXJyYXlNZXRob2QsYT1NYXRoLmZsb29yO2koInJldmVyc2UiLChmdW5jdGlvbigpe2Zvcih2YXIgdCxlPXRoaXMsbj1vKGUpLmxlbmd0aCxyPWEobi8yKSxpPTA7aTxyOyl0PWVbaV0sZVtpKytdPWVbLS1uXSxlW25dPXQ7cmV0dXJuIGV9KSl9LDg0NTA6ZnVuY3Rpb24odCxlLG4peyJ1c2Ugc3RyaWN0Ijt2YXIgcj1uKDczMDc0KSxvPW4oMjc4ODQpLGk9big2MDU1OCksYT1uKDE5MjA5KSxjPW4oMzIxODcpLHM9ci5hVHlwZWRBcnJheTsoMCxyLmV4cG9ydFR5cGVkQXJyYXlNZXRob2QpKCJzZXQiLChmdW5jdGlvbih0KXtzKHRoaXMpO3ZhciBlPWkoYXJndW1lbnRzLmxlbmd0aD4xP2FyZ3VtZW50c1sxXTp2b2lkIDAsMSksbj10aGlzLmxlbmd0aCxyPWEodCksYz1vKHIubGVuZ3RoKSx1PTA7aWYoYytlPm4pdGhyb3cgUmFuZ2VFcnJvcigiV3JvbmcgbGVuZ3RoIik7Zm9yKDt1PGM7KXRoaXNbZSt1XT1yW3UrK119KSxjKChmdW5jdGlvbigpe25ldyBJbnQ4QXJyYXkoMSkuc2V0KHt9KX0pKSl9LDE3NjA1OmZ1bmN0aW9uKHQsZSxuKXsidXNlIHN0cmljdCI7dmFyIHI9big3MzA3NCksbz1uKDEzOTc5KSxpPW4oMzIxODcpLGE9ci5hVHlwZWRBcnJheSxjPXIuYVR5cGVkQXJyYXlDb25zdHJ1Y3RvcixzPXIuZXhwb3J0VHlwZWRBcnJheU1ldGhvZCx1PVtdLnNsaWNlO3MoInNsaWNlIiwoZnVuY3Rpb24odCxlKXtmb3IodmFyIG49dS5jYWxsKGEodGhpcyksdCxlKSxyPW8odGhpcyx0aGlzLmNvbnN0cnVjdG9yKSxpPTAscz1uLmxlbmd0aCxsPW5ldyhjKHIpKShzKTtzPmk7KWxbaV09bltpKytdO3JldHVybiBsfSksaSgoZnVuY3Rpb24oKXtuZXcgSW50OEFycmF5KDEpLnNsaWNlKCl9KSkpfSw3MzU2MjpmdW5jdGlvbih0LGUsbil7InVzZSBzdHJpY3QiO3ZhciByPW4oNzMwNzQpLG89bigzMDAyNSkuc29tZSxpPXIuYVR5cGVkQXJyYXk7KDAsci5leHBvcnRUeXBlZEFycmF5TWV0aG9kKSgic29tZSIsKGZ1bmN0aW9uKHQpe3JldHVybiBvKGkodGhpcyksdCxhcmd1bWVudHMubGVuZ3RoPjE/YXJndW1lbnRzWzFdOnZvaWQgMCl9KSl9LDExODc4OmZ1bmN0aW9uKHQsZSxuKXsidXNlIHN0cmljdCI7dmFyIHI9big3MzA3NCksbz1yLmFUeXBlZEFycmF5LGk9ci5leHBvcnRUeXBlZEFycmF5TWV0aG9kLGE9W10uc29ydDtpKCJzb3J0IiwoZnVuY3Rpb24odCl7cmV0dXJuIGEuY2FsbChvKHRoaXMpLHQpfSkpfSw2MDkyOTpmdW5jdGlvbih0LGUsbil7InVzZSBzdHJpY3QiO3ZhciByPW4oNzMwNzQpLG89bigyNzg4NCksaT1uKDc2OTc2KSxhPW4oMTM5NzkpLGM9ci5hVHlwZWRBcnJheTsoMCxyLmV4cG9ydFR5cGVkQXJyYXlNZXRob2QpKCJzdWJhcnJheSIsKGZ1bmN0aW9uKHQsZSl7dmFyIG49Yyh0aGlzKSxyPW4ubGVuZ3RoLHM9aSh0LHIpO3JldHVybiBuZXcoYShuLG4uY29uc3RydWN0b3IpKShuLmJ1ZmZlcixuLmJ5dGVPZmZzZXQrcypuLkJZVEVTX1BFUl9FTEVNRU5ULG8oKHZvaWQgMD09PWU/cjppKGUscikpLXMpKX0pKX0sNDM5NTE6ZnVuY3Rpb24odCxlLG4peyJ1c2Ugc3RyaWN0Ijt2YXIgcj1uKDg5NTU4KSxvPW4oNzMwNzQpLGk9bigzMjE4NyksYT1yLkludDhBcnJheSxjPW8uYVR5cGVkQXJyYXkscz1vLmV4cG9ydFR5cGVkQXJyYXlNZXRob2QsdT1bXS50b0xvY2FsZVN0cmluZyxsPVtdLnNsaWNlLGY9ISFhJiZpKChmdW5jdGlvbigpe3UuY2FsbChuZXcgYSgxKSl9KSk7cygidG9Mb2NhbGVTdHJpbmciLChmdW5jdGlvbigpe3JldHVybiB1LmFwcGx5KGY/bC5jYWxsKGModGhpcykpOmModGhpcyksYXJndW1lbnRzKX0pLGkoKGZ1bmN0aW9uKCl7cmV0dXJuWzEsMl0udG9Mb2NhbGVTdHJpbmcoKSE9bmV3IGEoWzEsMl0pLnRvTG9jYWxlU3RyaW5nKCl9KSl8fCFpKChmdW5jdGlvbigpe2EucHJvdG90eXBlLnRvTG9jYWxlU3RyaW5nLmNhbGwoWzEsMl0pfSkpKX0sOTEzNDc6ZnVuY3Rpb24odCxlLG4peyJ1c2Ugc3RyaWN0Ijt2YXIgcj1uKDczMDc0KS5leHBvcnRUeXBlZEFycmF5TWV0aG9kLG89bigzMjE4NyksaT1uKDg5NTU4KS5VaW50OEFycmF5LGE9aSYmaS5wcm90b3R5cGV8fHt9LGM9W10udG9TdHJpbmcscz1bXS5qb2luO28oKGZ1bmN0aW9uKCl7Yy5jYWxsKHt9KX0pKSYmKGM9ZnVuY3Rpb24oKXtyZXR1cm4gcy5jYWxsKHRoaXMpfSk7dmFyIHU9YS50b1N0cmluZyE9YztyKCJ0b1N0cmluZyIsYyx1KX0sMTY5Nzg6ZnVuY3Rpb24odCxlLG4pe24oOTMwMTcpKCJVaW50MTYiLChmdW5jdGlvbih0KXtyZXR1cm4gZnVuY3Rpb24oZSxuLHIpe3JldHVybiB0KHRoaXMsZSxuLHIpfX0pKX0sMzc5ODc6ZnVuY3Rpb24odCxlLG4pe24oOTMwMTcpKCJVaW50MzIiLChmdW5jdGlvbih0KXtyZXR1cm4gZnVuY3Rpb24oZSxuLHIpe3JldHVybiB0KHRoaXMsZSxuLHIpfX0pKX0sODA3NTc6ZnVuY3Rpb24odCxlLG4pe24oOTMwMTcpKCJVaW50OCIsKGZ1bmN0aW9uKHQpe3JldHVybiBmdW5jdGlvbihlLG4scil7cmV0dXJuIHQodGhpcyxlLG4scil9fSkpfSw2OTg3OTpmdW5jdGlvbih0LGUsbil7big5MzAxNykoIlVpbnQ4IiwoZnVuY3Rpb24odCl7cmV0dXJuIGZ1bmN0aW9uKGUsbixyKXtyZXR1cm4gdCh0aGlzLGUsbixyKX19KSwhMCl9LDU4NjA2OmZ1bmN0aW9uKHQsZSxuKXsidXNlIHN0cmljdCI7dmFyIHIsbz1uKDg5NTU4KSxpPW4oMTkyNiksYT1uKDk2MDMpLGM9big4MTk1MSkscz1uKDcxMzAzKSx1PW4oMTA1OTIpLGw9big4OTgyNykuZW5mb3JjZSxmPW4oMTk1OTEpLGQ9IW8uQWN0aXZlWE9iamVjdCYmIkFjdGl2ZVhPYmplY3QiaW4gbyxwPU9iamVjdC5pc0V4dGVuc2libGUsaD1mdW5jdGlvbih0KXtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gdCh0aGlzLGFyZ3VtZW50cy5sZW5ndGg/YXJndW1lbnRzWzBdOnZvaWQgMCl9fSx2PXQuZXhwb3J0cz1jKCJXZWFrTWFwIixoLHMpO2lmKGYmJmQpe3I9cy5nZXRDb25zdHJ1Y3RvcihoLCJXZWFrTWFwIiwhMCksYS5SRVFVSVJFRD0hMDt2YXIgZz12LnByb3RvdHlwZSx5PWcuZGVsZXRlLG09Zy5oYXMsYj1nLmdldCx4PWcuc2V0O2koZyx7ZGVsZXRlOmZ1bmN0aW9uKHQpe2lmKHUodCkmJiFwKHQpKXt2YXIgZT1sKHRoaXMpO3JldHVybiBlLmZyb3plbnx8KGUuZnJvemVuPW5ldyByKSx5LmNhbGwodGhpcyx0KXx8ZS5mcm96ZW4uZGVsZXRlKHQpfXJldHVybiB5LmNhbGwodGhpcyx0KX0saGFzOmZ1bmN0aW9uKHQpe2lmKHUodCkmJiFwKHQpKXt2YXIgZT1sKHRoaXMpO3JldHVybiBlLmZyb3plbnx8KGUuZnJvemVuPW5ldyByKSxtLmNhbGwodGhpcyx0KXx8ZS5mcm96ZW4uaGFzKHQpfXJldHVybiBtLmNhbGwodGhpcyx0KX0sZ2V0OmZ1bmN0aW9uKHQpe2lmKHUodCkmJiFwKHQpKXt2YXIgZT1sKHRoaXMpO3JldHVybiBlLmZyb3plbnx8KGUuZnJvemVuPW5ldyByKSxtLmNhbGwodGhpcyx0KT9iLmNhbGwodGhpcyx0KTplLmZyb3plbi5nZXQodCl9cmV0dXJuIGIuY2FsbCh0aGlzLHQpfSxzZXQ6ZnVuY3Rpb24odCxlKXtpZih1KHQpJiYhcCh0KSl7dmFyIG49bCh0aGlzKTtuLmZyb3plbnx8KG4uZnJvemVuPW5ldyByKSxtLmNhbGwodGhpcyx0KT94LmNhbGwodGhpcyx0LGUpOm4uZnJvemVuLnNldCh0LGUpfWVsc2UgeC5jYWxsKHRoaXMsdCxlKTtyZXR1cm4gdGhpc319KX19LDQ1MTU3OmZ1bmN0aW9uKHQsZSxuKXsidXNlIHN0cmljdCI7big4MTk1MSkoIldlYWtTZXQiLChmdW5jdGlvbih0KXtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gdCh0aGlzLGFyZ3VtZW50cy5sZW5ndGg/YXJndW1lbnRzWzBdOnZvaWQgMCl9fSksbig3MTMwMykpfSw5Njc1MTpmdW5jdGlvbih0LGUsbil7InVzZSBzdHJpY3QiO3ZhciByPW4oMTQwNDQpLG89big2MjU1NiksaT1uKDY0OTY1KSxhPW4oNzE4NDIpLGM9big1MDg2OCkscz1uKDM3NjIwKSx1PW4oMTQyMDkpLGw9big0MTMzNCksZj1uKDY2OTcxKSxkPW4oODk4MjcpLHA9ZC5zZXQsaD1kLmdldHRlckZvcigiQWdncmVnYXRlRXJyb3IiKSx2PWZ1bmN0aW9uKHQsZSl7dmFyIG49dGhpcztpZighKG4gaW5zdGFuY2VvZiB2KSlyZXR1cm4gbmV3IHYodCxlKTthJiYobj1hKG5ldyBFcnJvcihlKSxpKG4pKSk7dmFyIHI9W107cmV0dXJuIGwodCxyLnB1c2gsciksbz9wKG4se2Vycm9yczpyLHR5cGU6IkFnZ3JlZ2F0ZUVycm9yIn0pOm4uZXJyb3JzPXIsdm9pZCAwIT09ZSYmZihuLCJtZXNzYWdlIixTdHJpbmcoZSkpLG59O3YucHJvdG90eXBlPWMoRXJyb3IucHJvdG90eXBlLHtjb25zdHJ1Y3Rvcjp1KDUsdiksbWVzc2FnZTp1KDUsIiIpLG5hbWU6dSg1LCJBZ2dyZWdhdGVFcnJvciIpfSksbyYmcy5mKHYucHJvdG90eXBlLCJlcnJvcnMiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gaCh0aGlzKS5lcnJvcnN9LGNvbmZpZ3VyYWJsZTohMH0pLHIoe2dsb2JhbDohMH0se0FnZ3JlZ2F0ZUVycm9yOnZ9KX0sMTQwODY6ZnVuY3Rpb24odCxlLG4pe3ZhciByPW4oMTQwNDQpLG89big2MTk5KSxpPU9iamVjdC5pc0Zyb3plbixhPWZ1bmN0aW9uKHQsZSl7aWYoIWl8fCFvKHQpfHwhaSh0KSlyZXR1cm4hMTtmb3IodmFyIG4scj0wLGE9dC5sZW5ndGg7cjxhOylpZighKCJzdHJpbmciPT10eXBlb2Yobj10W3IrK10pfHxlJiZ2b2lkIDA9PT1uKSlyZXR1cm4hMTtyZXR1cm4gMCE9PWF9O3Ioe3RhcmdldDoiQXJyYXkiLHN0YXQ6ITB9LHtpc1RlbXBsYXRlT2JqZWN0OmZ1bmN0aW9uKHQpe2lmKCFhKHQsITApKXJldHVybiExO3ZhciBlPXQucmF3O3JldHVybiEoZS5sZW5ndGghPT10Lmxlbmd0aHx8IWEoZSwhMSkpfX0pfSw0OTMwOmZ1bmN0aW9uKHQsZSxuKXsidXNlIHN0cmljdCI7dmFyIHI9big2MjU1Niksbz1uKDc2NTEzKSxpPW4oMTkyMDkpLGE9bigyNzg4NCksYz1uKDM3NjIwKS5mO3ImJiEoImxhc3RJbmRleCJpbltdKSYmKGMoQXJyYXkucHJvdG90eXBlLCJsYXN0SW5kZXgiLHtjb25maWd1cmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7dmFyIHQ9aSh0aGlzKSxlPWEodC5sZW5ndGgpO3JldHVybiAwPT1lPzA6ZS0xfX0pLG8oImxhc3RJbmRleCIpKX0sNjM2NDpmdW5jdGlvbih0LGUsbil7InVzZSBzdHJpY3QiO3ZhciByPW4oNjI1NTYpLG89big3NjUxMyksaT1uKDE5MjA5KSxhPW4oMjc4ODQpLGM9bigzNzYyMCkuZjtyJiYhKCJsYXN0SXRlbSJpbltdKSYmKGMoQXJyYXkucHJvdG90eXBlLCJsYXN0SXRlbSIse2NvbmZpZ3VyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXt2YXIgdD1pKHRoaXMpLGU9YSh0Lmxlbmd0aCk7cmV0dXJuIDA9PWU/dm9pZCAwOnRbZS0xXX0sc2V0OmZ1bmN0aW9uKHQpe3ZhciBlPWkodGhpcyksbj1hKGUubGVuZ3RoKTtyZXR1cm4gZVswPT1uPzA6bi0xXT10fX0pLG8oImxhc3RJdGVtIikpfSw0NzAwNDpmdW5jdGlvbih0LGUsbil7InVzZSBzdHJpY3QiO3ZhciByPW4oMTQwNDQpLG89big4NzU3OSksaT1uKDI3MDA0KSgoZnVuY3Rpb24odCxlKXt2YXIgbj10aGlzLHI9bi5pdGVyYXRvcjtyZXR1cm4gZS5yZXNvbHZlKG8obi5uZXh0LmNhbGwocix0KSkpLnRoZW4oKGZ1bmN0aW9uKHQpe3JldHVybiBvKHQpLmRvbmU/KG4uZG9uZT0hMCx7ZG9uZTohMCx2YWx1ZTp2b2lkIDB9KTp7ZG9uZTohMSx2YWx1ZTpbbi5pbmRleCsrLHQudmFsdWVdfX0pKX0pKTtyKHt0YXJnZXQ6IkFzeW5jSXRlcmF0b3IiLHByb3RvOiEwLHJlYWw6ITB9LHthc0luZGV4ZWRQYWlyczpmdW5jdGlvbigpe3JldHVybiBuZXcgaSh7aXRlcmF0b3I6byh0aGlzKSxpbmRleDowfSl9fSl9LDYxMjk4OmZ1bmN0aW9uKHQsZSxuKXsidXNlIHN0cmljdCI7dmFyIHI9bigxNDA0NCksbz1uKDU5Mzc5KSxpPW4oNjY5NzEpLGE9big3NjI5OCksYz1uKDIzNzI0KSxzPW4oNjM4NDUpLHU9big2NTY3MiksbD1jKCJ0b1N0cmluZ1RhZyIpLGY9ZnVuY3Rpb24oKXtvKHRoaXMsZil9O2YucHJvdG90eXBlPXMsYShzLGwpfHxpKHMsbCwiQXN5bmNJdGVyYXRvciIpLGEocywiY29uc3RydWN0b3IiKSYmcy5jb25zdHJ1Y3RvciE9PU9iamVjdHx8aShzLCJjb25zdHJ1Y3RvciIsZikscih7Z2xvYmFsOiEwLGZvcmNlZDp1fSx7QXN5bmNJdGVyYXRvcjpmfSl9LDY3NDYyOmZ1bmN0aW9uKHQsZSxuKXsidXNlIHN0cmljdCI7dmFyIHI9bigxNDA0NCksbz1uKDg3NTc5KSxpPW4oNDU2ODApLGE9bigyNzAwNCkoKGZ1bmN0aW9uKHQsZSl7dmFyIG49dGhpcztyZXR1cm4gbmV3IGUoKGZ1bmN0aW9uKHIsaSl7dmFyIGE9ZnVuY3Rpb24oKXt0cnl7ZS5yZXNvbHZlKG8obi5uZXh0LmNhbGwobi5pdGVyYXRvcixuLnJlbWFpbmluZz92b2lkIDA6dCkpKS50aGVuKChmdW5jdGlvbih0KXt0cnl7byh0KS5kb25lPyhuLmRvbmU9ITAscih7ZG9uZTohMCx2YWx1ZTp2b2lkIDB9KSk6bi5yZW1haW5pbmc/KG4ucmVtYWluaW5nLS0sYSgpKTpyKHtkb25lOiExLHZhbHVlOnQudmFsdWV9KX1jYXRjaCh0KXtpKHQpfX0pLGkpfWNhdGNoKHQpe2kodCl9fTthKCl9KSl9KSk7cih7dGFyZ2V0OiJBc3luY0l0ZXJhdG9yIixwcm90bzohMCxyZWFsOiEwfSx7ZHJvcDpmdW5jdGlvbih0KXtyZXR1cm4gbmV3IGEoe2l0ZXJhdG9yOm8odGhpcykscmVtYWluaW5nOmkodCl9KX19KX0sOTA2NzpmdW5jdGlvbih0LGUsbil7InVzZSBzdHJpY3QiO3ZhciByPW4oMTQwNDQpLG89big0NTY2NikuZXZlcnk7cih7dGFyZ2V0OiJBc3luY0l0ZXJhdG9yIixwcm90bzohMCxyZWFsOiEwfSx7ZXZlcnk6ZnVuY3Rpb24odCl7cmV0dXJuIG8odGhpcyx0KX19KX0sMjAxMjQ6ZnVuY3Rpb24odCxlLG4peyJ1c2Ugc3RyaWN0Ijt2YXIgcj1uKDE0MDQ0KSxvPW4oODY0NzApLGk9big4NzU3OSksYT1uKDI3MDA0KSgoZnVuY3Rpb24odCxlKXt2YXIgbj10aGlzLHI9bi5maWx0ZXJlcjtyZXR1cm4gbmV3IGUoKGZ1bmN0aW9uKG8sYSl7dmFyIGM9ZnVuY3Rpb24oKXt0cnl7ZS5yZXNvbHZlKGkobi5uZXh0LmNhbGwobi5pdGVyYXRvcix0KSkpLnRoZW4oKGZ1bmN0aW9uKHQpe3RyeXtpZihpKHQpLmRvbmUpbi5kb25lPSEwLG8oe2RvbmU6ITAsdmFsdWU6dm9pZCAwfSk7ZWxzZXt2YXIgcz10LnZhbHVlO2UucmVzb2x2ZShyKHMpKS50aGVuKChmdW5jdGlvbih0KXt0P28oe2RvbmU6ITEsdmFsdWU6c30pOmMoKX0pLGEpfX1jYXRjaCh0KXthKHQpfX0pLGEpfWNhdGNoKHQpe2EodCl9fTtjKCl9KSl9KSk7cih7dGFyZ2V0OiJBc3luY0l0ZXJhdG9yIixwcm90bzohMCxyZWFsOiEwfSx7ZmlsdGVyOmZ1bmN0aW9uKHQpe3JldHVybiBuZXcgYSh7aXRlcmF0b3I6aSh0aGlzKSxmaWx0ZXJlcjpvKHQpfSl9fSl9LDIxMzcxOmZ1bmN0aW9uKHQsZSxuKXsidXNlIHN0cmljdCI7dmFyIHI9bigxNDA0NCksbz1uKDQ1NjY2KS5maW5kO3Ioe3RhcmdldDoiQXN5bmNJdGVyYXRvciIscHJvdG86ITAscmVhbDohMH0se2ZpbmQ6ZnVuY3Rpb24odCl7cmV0dXJuIG8odGhpcyx0KX19KX0sMzg5ODQ6ZnVuY3Rpb24odCxlLG4peyJ1c2Ugc3RyaWN0Ijt2YXIgcj1uKDE0MDQ0KSxvPW4oODY0NzApLGk9big4NzU3OSksYT1uKDI3MDA0KSxjPW4oNjY5MjApLHM9YSgoZnVuY3Rpb24odCxlKXt2YXIgbixyLGE9dGhpcyxzPWEubWFwcGVyO3JldHVybiBuZXcgZSgoZnVuY3Rpb24odSxsKXt2YXIgZj1mdW5jdGlvbigpe3RyeXtlLnJlc29sdmUoaShhLm5leHQuY2FsbChhLml0ZXJhdG9yLHQpKSkudGhlbigoZnVuY3Rpb24odCl7dHJ5e2kodCkuZG9uZT8oYS5kb25lPSEwLHUoe2RvbmU6ITAsdmFsdWU6dm9pZCAwfSkpOmUucmVzb2x2ZShzKHQudmFsdWUpKS50aGVuKChmdW5jdGlvbih0KXt0cnl7aWYodm9pZCAwIT09KHI9Yyh0KSkpcmV0dXJuIGEuaW5uZXJJdGVyYXRvcj1uPWkoci5jYWxsKHQpKSxhLmlubmVyTmV4dD1vKG4ubmV4dCksZCgpO2woVHlwZUVycm9yKCIuZmxhdE1hcCBjYWxsYmFjayBzaG91bGQgcmV0dXJuIGFuIGl0ZXJhYmxlIG9iamVjdCIpKX1jYXRjaCh0KXtsKHQpfX0pLGwpfWNhdGNoKHQpe2wodCl9fSksbCl9Y2F0Y2godCl7bCh0KX19LGQ9ZnVuY3Rpb24oKXtpZihuPWEuaW5uZXJJdGVyYXRvcil0cnl7ZS5yZXNvbHZlKGkoYS5pbm5lck5leHQuY2FsbChuKSkpLnRoZW4oKGZ1bmN0aW9uKHQpe3RyeXtpKHQpLmRvbmU/KGEuaW5uZXJJdGVyYXRvcj1hLmlubmVyTmV4dD1udWxsLGYoKSk6dSh7ZG9uZTohMSx2YWx1ZTp0LnZhbHVlfSl9Y2F0Y2godCl7bCh0KX19KSxsKX1jYXRjaCh0KXtsKHQpfWVsc2UgZigpfTtkKCl9KSl9KSk7cih7dGFyZ2V0OiJBc3luY0l0ZXJhdG9yIixwcm90bzohMCxyZWFsOiEwfSx7ZmxhdE1hcDpmdW5jdGlvbih0KXtyZXR1cm4gbmV3IHMoe2l0ZXJhdG9yOmkodGhpcyksbWFwcGVyOm8odCksaW5uZXJJdGVyYXRvcjpudWxsLGlubmVyTmV4dDpudWxsfSl9fSl9LDY5MjM3OmZ1bmN0aW9uKHQsZSxuKXsidXNlIHN0cmljdCI7dmFyIHI9bigxNDA0NCksbz1uKDQ1NjY2KS5mb3JFYWNoO3Ioe3RhcmdldDoiQXN5bmNJdGVyYXRvciIscHJvdG86ITAscmVhbDohMH0se2ZvckVhY2g6ZnVuY3Rpb24odCl7cmV0dXJuIG8odGhpcyx0KX19KX0sMjY0OTc6ZnVuY3Rpb24odCxlLG4pe3ZhciByPW4oMTQwNDQpLG89big1NjIzOCksaT1uKDg2NDcwKSxhPW4oODc1NzkpLGM9bigxOTIwOSkscz1uKDI3MDA0KSx1PW4oNjY5MjApLGw9by5Bc3luY0l0ZXJhdG9yLGY9cygoZnVuY3Rpb24odCl7cmV0dXJuIGEodGhpcy5uZXh0LmNhbGwodGhpcy5pdGVyYXRvcix0KSl9KSwhMCk7cih7dGFyZ2V0OiJBc3luY0l0ZXJhdG9yIixzdGF0OiEwfSx7ZnJvbTpmdW5jdGlvbih0KXt2YXIgZSxuPWModCkscj11KG4pO2lmKG51bGwhPXIpe2lmKChlPWkocikuY2FsbChuKSlpbnN0YW5jZW9mIGwpcmV0dXJuIGV9ZWxzZSBlPW47cmV0dXJuIG5ldyBmKHtpdGVyYXRvcjplfSl9fSl9LDUzMTY4OmZ1bmN0aW9uKHQsZSxuKXsidXNlIHN0cmljdCI7dmFyIHI9bigxNDA0NCksbz1uKDg2NDcwKSxpPW4oODc1NzkpLGE9bigyNzAwNCkoKGZ1bmN0aW9uKHQsZSl7dmFyIG49dGhpcyxyPW4ubWFwcGVyO3JldHVybiBlLnJlc29sdmUoaShuLm5leHQuY2FsbChuLml0ZXJhdG9yLHQpKSkudGhlbigoZnVuY3Rpb24odCl7cmV0dXJuIGkodCkuZG9uZT8obi5kb25lPSEwLHtkb25lOiEwLHZhbHVlOnZvaWQgMH0pOmUucmVzb2x2ZShyKHQudmFsdWUpKS50aGVuKChmdW5jdGlvbih0KXtyZXR1cm57ZG9uZTohMSx2YWx1ZTp0fX0pKX0pKX0pKTtyKHt0YXJnZXQ6IkFzeW5jSXRlcmF0b3IiLHByb3RvOiEwLHJlYWw6ITB9LHttYXA6ZnVuY3Rpb24odCl7cmV0dXJuIG5ldyBhKHtpdGVyYXRvcjppKHRoaXMpLG1hcHBlcjpvKHQpfSl9fSl9LDczOTQ5OmZ1bmN0aW9uKHQsZSxuKXsidXNlIHN0cmljdCI7dmFyIHI9bigxNDA0NCksbz1uKDg2NDcwKSxpPW4oODc1NzkpLGE9big3NzAxKSgiUHJvbWlzZSIpO3Ioe3RhcmdldDoiQXN5bmNJdGVyYXRvciIscHJvdG86ITAscmVhbDohMH0se3JlZHVjZTpmdW5jdGlvbih0KXt2YXIgZT1pKHRoaXMpLG49byhlLm5leHQpLHI9YXJndW1lbnRzLmxlbmd0aDwyLGM9cj92b2lkIDA6YXJndW1lbnRzWzFdO3JldHVybiBvKHQpLG5ldyBhKChmdW5jdGlvbihvLHMpe3ZhciB1PWZ1bmN0aW9uKCl7dHJ5e2EucmVzb2x2ZShpKG4uY2FsbChlKSkpLnRoZW4oKGZ1bmN0aW9uKGUpe3RyeXtpZihpKGUpLmRvbmUpcj9zKFR5cGVFcnJvcigiUmVkdWNlIG9mIGVtcHR5IGl0ZXJhdG9yIHdpdGggbm8gaW5pdGlhbCB2YWx1ZSIpKTpvKGMpO2Vsc2V7dmFyIG49ZS52YWx1ZTtyPyhyPSExLGM9bix1KCkpOmEucmVzb2x2ZSh0KGMsbikpLnRoZW4oKGZ1bmN0aW9uKHQpe2M9dCx1KCl9KSxzKX19Y2F0Y2godCl7cyh0KX19KSxzKX1jYXRjaCh0KXtzKHQpfX07dSgpfSkpfX0pfSw4ODIxMTpmdW5jdGlvbih0LGUsbil7InVzZSBzdHJpY3QiO3ZhciByPW4oMTQwNDQpLG89big0NTY2Nikuc29tZTtyKHt0YXJnZXQ6IkFzeW5jSXRlcmF0b3IiLHByb3RvOiEwLHJlYWw6ITB9LHtzb21lOmZ1bmN0aW9uKHQpe3JldHVybiBvKHRoaXMsdCl9fSl9LDczNzYxOmZ1bmN0aW9uKHQsZSxuKXsidXNlIHN0cmljdCI7dmFyIHI9bigxNDA0NCksbz1uKDg3NTc5KSxpPW4oNDU2ODApLGE9bigyNzAwNCkoKGZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLnJlbWFpbmluZy0tP3RoaXMubmV4dC5jYWxsKHRoaXMuaXRlcmF0b3IsdCk6KHRoaXMuZG9uZT0hMCx7ZG9uZTohMCx2YWx1ZTp2b2lkIDB9KX0pKTtyKHt0YXJnZXQ6IkFzeW5jSXRlcmF0b3IiLHByb3RvOiEwLHJlYWw6ITB9LHt0YWtlOmZ1bmN0aW9uKHQpe3JldHVybiBuZXcgYSh7aXRlcmF0b3I6byh0aGlzKSxyZW1haW5pbmc6aSh0KX0pfX0pfSw0MjE5NjpmdW5jdGlvbih0LGUsbil7InVzZSBzdHJpY3QiO3ZhciByPW4oMTQwNDQpLG89big0NTY2NikudG9BcnJheTtyKHt0YXJnZXQ6IkFzeW5jSXRlcmF0b3IiLHByb3RvOiEwLHJlYWw6ITB9LHt0b0FycmF5OmZ1bmN0aW9uKCl7cmV0dXJuIG8odGhpcyl9fSl9LDM2NTcxOmZ1bmN0aW9uKHQsZSxuKXt2YXIgcj1uKDE0MDQ0KSxvPW4oNzQ2ODUpLGk9big3NzAxKSxhPW4oNTA4NjgpLGM9ZnVuY3Rpb24oKXt2YXIgdD1pKCJPYmplY3QiLCJmcmVlemUiKTtyZXR1cm4gdD90KGEobnVsbCkpOmEobnVsbCl9O3Ioe2dsb2JhbDohMH0se2NvbXBvc2l0ZUtleTpmdW5jdGlvbigpe3JldHVybiBvLmFwcGx5KE9iamVjdCxhcmd1bWVudHMpLmdldCgib2JqZWN0IixjKX19KX0sNDMwODY6ZnVuY3Rpb24odCxlLG4pe3ZhciByPW4oMTQwNDQpLG89big3NDY4NSksaT1uKDc3MDEpO3Ioe2dsb2JhbDohMH0se2NvbXBvc2l0ZVN5bWJvbDpmdW5jdGlvbigpe3JldHVybiAxPT09YXJndW1lbnRzLmxlbmd0aCYmInN0cmluZyI9PXR5cGVvZiBhcmd1bWVudHNbMF0/aSgiU3ltYm9sIikuZm9yKGFyZ3VtZW50c1swXSk6by5hcHBseShudWxsLGFyZ3VtZW50cykuZ2V0KCJzeW1ib2wiLGkoIlN5bWJvbCIpKX19KX0sOTk2Mjg6ZnVuY3Rpb24odCxlLG4pe24oNzE2MjIpfSw5MjYwMTpmdW5jdGlvbih0LGUsbil7InVzZSBzdHJpY3QiO3ZhciByPW4oMTQwNDQpLG89big4NzU3OSksaT1uKDg4MDcpKChmdW5jdGlvbih0KXt2YXIgZT1vKHRoaXMubmV4dC5jYWxsKHRoaXMuaXRlcmF0b3IsdCkpO2lmKCEodGhpcy5kb25lPSEhZS5kb25lKSlyZXR1cm5bdGhpcy5pbmRleCsrLGUudmFsdWVdfSkpO3Ioe3RhcmdldDoiSXRlcmF0b3IiLHByb3RvOiEwLHJlYWw6ITB9LHthc0luZGV4ZWRQYWlyczpmdW5jdGlvbigpe3JldHVybiBuZXcgaSh7aXRlcmF0b3I6byh0aGlzKSxpbmRleDowfSl9fSl9LDQzMzMyOmZ1bmN0aW9uKHQsZSxuKXsidXNlIHN0cmljdCI7dmFyIHI9bigxNDA0NCksbz1uKDg5NTU4KSxpPW4oNTkzNzkpLGE9big2Njk3MSksYz1uKDMyMTg3KSxzPW4oNzYyOTgpLHU9bigyMzcyNCksbD1uKDY0MTc2KS5JdGVyYXRvclByb3RvdHlwZSxmPW4oNjU2NzIpLGQ9dSgiaXRlcmF0b3IiKSxwPXUoInRvU3RyaW5nVGFnIiksaD1vLkl0ZXJhdG9yLHY9Znx8ImZ1bmN0aW9uIiE9dHlwZW9mIGh8fGgucHJvdG90eXBlIT09bHx8IWMoKGZ1bmN0aW9uKCl7aCh7fSl9KSksZz1mdW5jdGlvbigpe2kodGhpcyxnKX07ZiYmYShsPXt9LGQsKGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXN9KSkscyhsLHApfHxhKGwscCwiSXRlcmF0b3IiKSwhdiYmcyhsLCJjb25zdHJ1Y3RvciIpJiZsLmNvbnN0cnVjdG9yIT09T2JqZWN0fHxhKGwsImNvbnN0cnVjdG9yIixnKSxnLnByb3RvdHlwZT1sLHIoe2dsb2JhbDohMCxmb3JjZWQ6dn0se0l0ZXJhdG9yOmd9KX0sMjA0NzQ6ZnVuY3Rpb24odCxlLG4peyJ1c2Ugc3RyaWN0Ijt2YXIgcj1uKDE0MDQ0KSxvPW4oODc1NzkpLGk9big0NTY4MCksYT1uKDg4MDcpKChmdW5jdGlvbih0KXtmb3IodmFyIGUsbj10aGlzLml0ZXJhdG9yLHI9dGhpcy5uZXh0O3RoaXMucmVtYWluaW5nOylpZih0aGlzLnJlbWFpbmluZy0tLGU9byhyLmNhbGwobikpLHRoaXMuZG9uZT0hIWUuZG9uZSlyZXR1cm47aWYoZT1vKHIuY2FsbChuLHQpKSwhKHRoaXMuZG9uZT0hIWUuZG9uZSkpcmV0dXJuIGUudmFsdWV9KSk7cih7dGFyZ2V0OiJJdGVyYXRvciIscHJvdG86ITAscmVhbDohMH0se2Ryb3A6ZnVuY3Rpb24odCl7cmV0dXJuIG5ldyBhKHtpdGVyYXRvcjpvKHRoaXMpLHJlbWFpbmluZzppKHQpfSl9fSl9LDU0NTU2OmZ1bmN0aW9uKHQsZSxuKXsidXNlIHN0cmljdCI7dmFyIHI9bigxNDA0NCksbz1uKDQxMzM0KSxpPW4oODY0NzApLGE9big4NzU3OSk7cih7dGFyZ2V0OiJJdGVyYXRvciIscHJvdG86ITAscmVhbDohMH0se2V2ZXJ5OmZ1bmN0aW9uKHQpe3JldHVybiBhKHRoaXMpLGkodCksIW8odGhpcywoZnVuY3Rpb24oZSl7aWYoIXQoZSkpcmV0dXJuIG8uc3RvcCgpfSksdm9pZCAwLCExLCEwKS5zdG9wcGVkfX0pfSw0MDYzODpmdW5jdGlvbih0LGUsbil7InVzZSBzdHJpY3QiO3ZhciByPW4oMTQwNDQpLG89big4NjQ3MCksaT1uKDg3NTc5KSxhPW4oODgwNyksYz1uKDEyMjc4KSxzPWEoKGZ1bmN0aW9uKHQpe2Zvcih2YXIgZSxuLHI9dGhpcy5pdGVyYXRvcixvPXRoaXMuZmlsdGVyZXIsYT10aGlzLm5leHQ7Oyl7aWYoZT1pKGEuY2FsbChyLHQpKSx0aGlzLmRvbmU9ISFlLmRvbmUpcmV0dXJuO2lmKG49ZS52YWx1ZSxjKHIsbyxuKSlyZXR1cm4gbn19KSk7cih7dGFyZ2V0OiJJdGVyYXRvciIscHJvdG86ITAscmVhbDohMH0se2ZpbHRlcjpmdW5jdGlvbih0KXtyZXR1cm4gbmV3IHMoe2l0ZXJhdG9yOmkodGhpcyksZmlsdGVyZXI6byh0KX0pfX0pfSw5NjY1OTpmdW5jdGlvbih0LGUsbil7InVzZSBzdHJpY3QiO3ZhciByPW4oMTQwNDQpLG89big0MTMzNCksaT1uKDg2NDcwKSxhPW4oODc1NzkpO3Ioe3RhcmdldDoiSXRlcmF0b3IiLHByb3RvOiEwLHJlYWw6ITB9LHtmaW5kOmZ1bmN0aW9uKHQpe3JldHVybiBhKHRoaXMpLGkodCksbyh0aGlzLChmdW5jdGlvbihlKXtpZih0KGUpKXJldHVybiBvLnN0b3AoZSl9KSx2b2lkIDAsITEsITApLnJlc3VsdH19KX0sMTQ2ODg6ZnVuY3Rpb24odCxlLG4peyJ1c2Ugc3RyaWN0Ijt2YXIgcj1uKDE0MDQ0KSxvPW4oODY0NzApLGk9big4NzU3OSksYT1uKDczODkwKSxjPW4oODgwNykscz1uKDEyMjc4KSx1PWMoKGZ1bmN0aW9uKHQpe2Zvcih2YXIgZSxuLHIsYyx1PXRoaXMuaXRlcmF0b3I7Oyl7aWYoYz10aGlzLmlubmVySXRlcmF0b3Ipe2lmKCEoZT1pKHRoaXMuaW5uZXJOZXh0LmNhbGwoYykpKS5kb25lKXJldHVybiBlLnZhbHVlO3RoaXMuaW5uZXJJdGVyYXRvcj10aGlzLmlubmVyTmV4dD1udWxsfWlmKGU9aSh0aGlzLm5leHQuY2FsbCh1LHQpKSx0aGlzLmRvbmU9ISFlLmRvbmUpcmV0dXJuO2lmKG49cyh1LHRoaXMubWFwcGVyLGUudmFsdWUpLHZvaWQgMD09PShyPWEobikpKXRocm93IFR5cGVFcnJvcigiLmZsYXRNYXAgY2FsbGJhY2sgc2hvdWxkIHJldHVybiBhbiBpdGVyYWJsZSBvYmplY3QiKTt0aGlzLmlubmVySXRlcmF0b3I9Yz1pKHIuY2FsbChuKSksdGhpcy5pbm5lck5leHQ9byhjLm5leHQpfX0pKTtyKHt0YXJnZXQ6Ikl0ZXJhdG9yIixwcm90bzohMCxyZWFsOiEwfSx7ZmxhdE1hcDpmdW5jdGlvbih0KXtyZXR1cm4gbmV3IHUoe2l0ZXJhdG9yOmkodGhpcyksbWFwcGVyOm8odCksaW5uZXJJdGVyYXRvcjpudWxsLGlubmVyTmV4dDpudWxsfSl9fSl9LDczNzg6ZnVuY3Rpb24odCxlLG4peyJ1c2Ugc3RyaWN0Ijt2YXIgcj1uKDE0MDQ0KSxvPW4oNDEzMzQpLGk9big4NzU3OSk7cih7dGFyZ2V0OiJJdGVyYXRvciIscHJvdG86ITAscmVhbDohMH0se2ZvckVhY2g6ZnVuY3Rpb24odCl7byhpKHRoaXMpLHQsdm9pZCAwLCExLCEwKX19KX0sMjc0Mjg6ZnVuY3Rpb24odCxlLG4pe3ZhciByPW4oMTQwNDQpLG89big1NjIzOCksaT1uKDg2NDcwKSxhPW4oODc1NzkpLGM9bigxOTIwOSkscz1uKDg4MDcpLHU9big3Mzg5MCksbD1vLkl0ZXJhdG9yLGY9cygoZnVuY3Rpb24odCl7dmFyIGU9YSh0aGlzLm5leHQuY2FsbCh0aGlzLml0ZXJhdG9yLHQpKTtpZighKHRoaXMuZG9uZT0hIWUuZG9uZSkpcmV0dXJuIGUudmFsdWV9KSwhMCk7cih7dGFyZ2V0OiJJdGVyYXRvciIsc3RhdDohMH0se2Zyb206ZnVuY3Rpb24odCl7dmFyIGUsbj1jKHQpLHI9dShuKTtpZihudWxsIT1yKXtpZigoZT1pKHIpLmNhbGwobikpaW5zdGFuY2VvZiBsKXJldHVybiBlfWVsc2UgZT1uO3JldHVybiBuZXcgZih7aXRlcmF0b3I6ZX0pfX0pfSwzMzQzNjpmdW5jdGlvbih0LGUsbil7InVzZSBzdHJpY3QiO3ZhciByPW4oMTQwNDQpLG89big4NjQ3MCksaT1uKDg3NTc5KSxhPW4oODgwNyksYz1uKDEyMjc4KSxzPWEoKGZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMuaXRlcmF0b3Isbj1pKHRoaXMubmV4dC5jYWxsKGUsdCkpO2lmKCEodGhpcy5kb25lPSEhbi5kb25lKSlyZXR1cm4gYyhlLHRoaXMubWFwcGVyLG4udmFsdWUpfSkpO3Ioe3RhcmdldDoiSXRlcmF0b3IiLHByb3RvOiEwLHJlYWw6ITB9LHttYXA6ZnVuY3Rpb24odCl7cmV0dXJuIG5ldyBzKHtpdGVyYXRvcjppKHRoaXMpLG1hcHBlcjpvKHQpfSl9fSl9LDg0Mzg4OmZ1bmN0aW9uKHQsZSxuKXsidXNlIHN0cmljdCI7dmFyIHI9bigxNDA0NCksbz1uKDQxMzM0KSxpPW4oODY0NzApLGE9big4NzU3OSk7cih7dGFyZ2V0OiJJdGVyYXRvciIscHJvdG86ITAscmVhbDohMH0se3JlZHVjZTpmdW5jdGlvbih0KXthKHRoaXMpLGkodCk7dmFyIGU9YXJndW1lbnRzLmxlbmd0aDwyLG49ZT92b2lkIDA6YXJndW1lbnRzWzFdO2lmKG8odGhpcywoZnVuY3Rpb24ocil7ZT8oZT0hMSxuPXIpOm49dChuLHIpfSksdm9pZCAwLCExLCEwKSxlKXRocm93IFR5cGVFcnJvcigiUmVkdWNlIG9mIGVtcHR5IGl0ZXJhdG9yIHdpdGggbm8gaW5pdGlhbCB2YWx1ZSIpO3JldHVybiBufX0pfSw1OTYyMzpmdW5jdGlvbih0LGUsbil7InVzZSBzdHJpY3QiO3ZhciByPW4oMTQwNDQpLG89big0MTMzNCksaT1uKDg2NDcwKSxhPW4oODc1NzkpO3Ioe3RhcmdldDoiSXRlcmF0b3IiLHByb3RvOiEwLHJlYWw6ITB9LHtzb21lOmZ1bmN0aW9uKHQpe3JldHVybiBhKHRoaXMpLGkodCksbyh0aGlzLChmdW5jdGlvbihlKXtpZih0KGUpKXJldHVybiBvLnN0b3AoKX0pLHZvaWQgMCwhMSwhMCkuc3RvcHBlZH19KX0sMzI4NTM6ZnVuY3Rpb24odCxlLG4peyJ1c2Ugc3RyaWN0Ijt2YXIgcj1uKDE0MDQ0KSxvPW4oODc1NzkpLGk9big0NTY4MCksYT1uKDg4MDcpKChmdW5jdGlvbih0KXtpZih0aGlzLnJlbWFpbmluZy0tKXt2YXIgZT1vKHRoaXMubmV4dC5jYWxsKHRoaXMuaXRlcmF0b3IsdCkpO3JldHVybih0aGlzLmRvbmU9ISFlLmRvbmUpP3ZvaWQgMDplLnZhbHVlfXRoaXMuZG9uZT0hMH0pKTtyKHt0YXJnZXQ6Ikl0ZXJhdG9yIixwcm90bzohMCxyZWFsOiEwfSx7dGFrZTpmdW5jdGlvbih0KXtyZXR1cm4gbmV3IGEoe2l0ZXJhdG9yOm8odGhpcykscmVtYWluaW5nOmkodCl9KX19KX0sNjcwNzI6ZnVuY3Rpb24odCxlLG4peyJ1c2Ugc3RyaWN0Ijt2YXIgcj1uKDE0MDQ0KSxvPW4oNDEzMzQpLGk9big4NzU3OSksYT1bXS5wdXNoO3Ioe3RhcmdldDoiSXRlcmF0b3IiLHByb3RvOiEwLHJlYWw6ITB9LHt0b0FycmF5OmZ1bmN0aW9uKCl7dmFyIHQ9W107cmV0dXJuIG8oaSh0aGlzKSxhLHQsITEsITApLHR9fSl9LDQ4NDQ6ZnVuY3Rpb24odCxlLG4peyJ1c2Ugc3RyaWN0Ijt2YXIgcj1uKDE0MDQ0KSxvPW4oNjU2NzIpLGk9bigxNDY2KTtyKHt0YXJnZXQ6Ik1hcCIscHJvdG86ITAscmVhbDohMCxmb3JjZWQ6b30se2RlbGV0ZUFsbDpmdW5jdGlvbigpe3JldHVybiBpLmFwcGx5KHRoaXMsYXJndW1lbnRzKX19KX0sMzU1NDpmdW5jdGlvbih0LGUsbil7InVzZSBzdHJpY3QiO3ZhciByPW4oMTQwNDQpLG89big2NTY3MiksaT1uKDg3NTc5KSxhPW4oNDYxMzApLGM9big0MTk4OSkscz1uKDQxMzM0KTtyKHt0YXJnZXQ6Ik1hcCIscHJvdG86ITAscmVhbDohMCxmb3JjZWQ6b30se2V2ZXJ5OmZ1bmN0aW9uKHQpe3ZhciBlPWkodGhpcyksbj1jKGUpLHI9YSh0LGFyZ3VtZW50cy5sZW5ndGg+MT9hcmd1bWVudHNbMV06dm9pZCAwLDMpO3JldHVybiFzKG4sKGZ1bmN0aW9uKHQsbil7aWYoIXIobix0LGUpKXJldHVybiBzLnN0b3AoKX0pLHZvaWQgMCwhMCwhMCkuc3RvcHBlZH19KX0sMTg4NDQ6ZnVuY3Rpb24odCxlLG4peyJ1c2Ugc3RyaWN0Ijt2YXIgcj1uKDE0MDQ0KSxvPW4oNjU2NzIpLGk9big3NzAxKSxhPW4oODc1NzkpLGM9big4NjQ3MCkscz1uKDQ2MTMwKSx1PW4oMTM5NzkpLGw9big0MTk4OSksZj1uKDQxMzM0KTtyKHt0YXJnZXQ6Ik1hcCIscHJvdG86ITAscmVhbDohMCxmb3JjZWQ6b30se2ZpbHRlcjpmdW5jdGlvbih0KXt2YXIgZT1hKHRoaXMpLG49bChlKSxyPXModCxhcmd1bWVudHMubGVuZ3RoPjE/YXJndW1lbnRzWzFdOnZvaWQgMCwzKSxvPW5ldyh1KGUsaSgiTWFwIikpKSxkPWMoby5zZXQpO3JldHVybiBmKG4sKGZ1bmN0aW9uKHQsbil7cihuLHQsZSkmJmQuY2FsbChvLHQsbil9KSx2b2lkIDAsITAsITApLG99fSl9LDQ5MDUwOmZ1bmN0aW9uKHQsZSxuKXsidXNlIHN0cmljdCI7dmFyIHI9bigxNDA0NCksbz1uKDY1NjcyKSxpPW4oODc1NzkpLGE9big0NjEzMCksYz1uKDQxOTg5KSxzPW4oNDEzMzQpO3Ioe3RhcmdldDoiTWFwIixwcm90bzohMCxyZWFsOiEwLGZvcmNlZDpvfSx7ZmluZEtleTpmdW5jdGlvbih0KXt2YXIgZT1pKHRoaXMpLG49YyhlKSxyPWEodCxhcmd1bWVudHMubGVuZ3RoPjE/YXJndW1lbnRzWzFdOnZvaWQgMCwzKTtyZXR1cm4gcyhuLChmdW5jdGlvbih0LG4pe2lmKHIobix0LGUpKXJldHVybiBzLnN0b3AodCl9KSx2b2lkIDAsITAsITApLnJlc3VsdH19KX0sMzU2NTY6ZnVuY3Rpb24odCxlLG4peyJ1c2Ugc3RyaWN0Ijt2YXIgcj1uKDE0MDQ0KSxvPW4oNjU2NzIpLGk9big4NzU3OSksYT1uKDQ2MTMwKSxjPW4oNDE5ODkpLHM9big0MTMzNCk7cih7dGFyZ2V0OiJNYXAiLHByb3RvOiEwLHJlYWw6ITAsZm9yY2VkOm99LHtmaW5kOmZ1bmN0aW9uKHQpe3ZhciBlPWkodGhpcyksbj1jKGUpLHI9YSh0LGFyZ3VtZW50cy5sZW5ndGg+MT9hcmd1bWVudHNbMV06dm9pZCAwLDMpO3JldHVybiBzKG4sKGZ1bmN0aW9uKHQsbil7aWYocihuLHQsZSkpcmV0dXJuIHMuc3RvcChuKX0pLHZvaWQgMCwhMCwhMCkucmVzdWx0fX0pfSwzODc5MjpmdW5jdGlvbih0LGUsbil7bigxNDA0NCkoe3RhcmdldDoiTWFwIixzdGF0OiEwfSx7ZnJvbTpuKDEyOTAxKX0pfSw1MzUxMzpmdW5jdGlvbih0LGUsbil7InVzZSBzdHJpY3QiO3ZhciByPW4oMTQwNDQpLG89big0MTMzNCksaT1uKDg2NDcwKTtyKHt0YXJnZXQ6Ik1hcCIsc3RhdDohMH0se2dyb3VwQnk6ZnVuY3Rpb24odCxlKXt2YXIgbj1uZXcgdGhpcztpKGUpO3ZhciByPWkobi5oYXMpLGE9aShuLmdldCksYz1pKG4uc2V0KTtyZXR1cm4gbyh0LChmdW5jdGlvbih0KXt2YXIgbz1lKHQpO3IuY2FsbChuLG8pP2EuY2FsbChuLG8pLnB1c2godCk6Yy5jYWxsKG4sbyxbdF0pfSkpLG59fSl9LDkzODQzOmZ1bmN0aW9uKHQsZSxuKXsidXNlIHN0cmljdCI7dmFyIHI9bigxNDA0NCksbz1uKDY1NjcyKSxpPW4oODc1NzkpLGE9big0MTk4OSksYz1uKDM4MTg5KSxzPW4oNDEzMzQpO3Ioe3RhcmdldDoiTWFwIixwcm90bzohMCxyZWFsOiEwLGZvcmNlZDpvfSx7aW5jbHVkZXM6ZnVuY3Rpb24odCl7cmV0dXJuIHMoYShpKHRoaXMpKSwoZnVuY3Rpb24oZSxuKXtpZihjKG4sdCkpcmV0dXJuIHMuc3RvcCgpfSksdm9pZCAwLCEwLCEwKS5zdG9wcGVkfX0pfSw5OTI1NTpmdW5jdGlvbih0LGUsbil7InVzZSBzdHJpY3QiO3ZhciByPW4oMTQwNDQpLG89big0MTMzNCksaT1uKDg2NDcwKTtyKHt0YXJnZXQ6Ik1hcCIsc3RhdDohMH0se2tleUJ5OmZ1bmN0aW9uKHQsZSl7dmFyIG49bmV3IHRoaXM7aShlKTt2YXIgcj1pKG4uc2V0KTtyZXR1cm4gbyh0LChmdW5jdGlvbih0KXtyLmNhbGwobixlKHQpLHQpfSkpLG59fSl9LDY2MjI0OmZ1bmN0aW9uKHQsZSxuKXsidXNlIHN0cmljdCI7dmFyIHI9bigxNDA0NCksbz1uKDY1NjcyKSxpPW4oODc1NzkpLGE9big0MTk4OSksYz1uKDQxMzM0KTtyKHt0YXJnZXQ6Ik1hcCIscHJvdG86ITAscmVhbDohMCxmb3JjZWQ6b30se2tleU9mOmZ1bmN0aW9uKHQpe3JldHVybiBjKGEoaSh0aGlzKSksKGZ1bmN0aW9uKGUsbil7aWYobj09PXQpcmV0dXJuIGMuc3RvcChlKX0pLHZvaWQgMCwhMCwhMCkucmVzdWx0fX0pfSw3MTcwMDpmdW5jdGlvbih0LGUsbil7InVzZSBzdHJpY3QiO3ZhciByPW4oMTQwNDQpLG89big2NTY3MiksaT1uKDc3MDEpLGE9big4NzU3OSksYz1uKDg2NDcwKSxzPW4oNDYxMzApLHU9bigxMzk3OSksbD1uKDQxOTg5KSxmPW4oNDEzMzQpO3Ioe3RhcmdldDoiTWFwIixwcm90bzohMCxyZWFsOiEwLGZvcmNlZDpvfSx7bWFwS2V5czpmdW5jdGlvbih0KXt2YXIgZT1hKHRoaXMpLG49bChlKSxyPXModCxhcmd1bWVudHMubGVuZ3RoPjE/YXJndW1lbnRzWzFdOnZvaWQgMCwzKSxvPW5ldyh1KGUsaSgiTWFwIikpKSxkPWMoby5zZXQpO3JldHVybiBmKG4sKGZ1bmN0aW9uKHQsbil7ZC5jYWxsKG8scihuLHQsZSksbil9KSx2b2lkIDAsITAsITApLG99fSl9LDY5NTI5OmZ1bmN0aW9uKHQsZSxuKXsidXNlIHN0cmljdCI7dmFyIHI9bigxNDA0NCksbz1uKDY1NjcyKSxpPW4oNzcwMSksYT1uKDg3NTc5KSxjPW4oODY0NzApLHM9big0NjEzMCksdT1uKDEzOTc5KSxsPW4oNDE5ODkpLGY9big0MTMzNCk7cih7dGFyZ2V0OiJNYXAiLHByb3RvOiEwLHJlYWw6ITAsZm9yY2VkOm99LHttYXBWYWx1ZXM6ZnVuY3Rpb24odCl7dmFyIGU9YSh0aGlzKSxuPWwoZSkscj1zKHQsYXJndW1lbnRzLmxlbmd0aD4xP2FyZ3VtZW50c1sxXTp2b2lkIDAsMyksbz1uZXcodShlLGkoIk1hcCIpKSksZD1jKG8uc2V0KTtyZXR1cm4gZihuLChmdW5jdGlvbih0LG4pe2QuY2FsbChvLHQscihuLHQsZSkpfSksdm9pZCAwLCEwLCEwKSxvfX0pfSwyNzczNDpmdW5jdGlvbih0LGUsbil7InVzZSBzdHJpY3QiO3ZhciByPW4oMTQwNDQpLG89big2NTY3MiksaT1uKDg3NTc5KSxhPW4oODY0NzApLGM9big0MTMzNCk7cih7dGFyZ2V0OiJNYXAiLHByb3RvOiEwLHJlYWw6ITAsZm9yY2VkOm99LHttZXJnZTpmdW5jdGlvbih0KXtmb3IodmFyIGU9aSh0aGlzKSxuPWEoZS5zZXQpLHI9MDtyPGFyZ3VtZW50cy5sZW5ndGg7KWMoYXJndW1lbnRzW3IrK10sbixlLCEwKTtyZXR1cm4gZX19KX0sMTk5MDpmdW5jdGlvbih0LGUsbil7bigxNDA0NCkoe3RhcmdldDoiTWFwIixzdGF0OiEwfSx7b2Y6bigyNTAyNil9KX0sNzczNjk6ZnVuY3Rpb24odCxlLG4peyJ1c2Ugc3RyaWN0Ijt2YXIgcj1uKDE0MDQ0KSxvPW4oNjU2NzIpLGk9big4NzU3OSksYT1uKDg2NDcwKSxjPW4oNDE5ODkpLHM9big0MTMzNCk7cih7dGFyZ2V0OiJNYXAiLHByb3RvOiEwLHJlYWw6ITAsZm9yY2VkOm99LHtyZWR1Y2U6ZnVuY3Rpb24odCl7dmFyIGU9aSh0aGlzKSxuPWMoZSkscj1hcmd1bWVudHMubGVuZ3RoPDIsbz1yP3ZvaWQgMDphcmd1bWVudHNbMV07aWYoYSh0KSxzKG4sKGZ1bmN0aW9uKG4saSl7cj8ocj0hMSxvPWkpOm89dChvLGksbixlKX0pLHZvaWQgMCwhMCwhMCkscil0aHJvdyBUeXBlRXJyb3IoIlJlZHVjZSBvZiBlbXB0eSBtYXAgd2l0aCBubyBpbml0aWFsIHZhbHVlIik7cmV0dXJuIG99fSl9LDY5ODQyOmZ1bmN0aW9uKHQsZSxuKXsidXNlIHN0cmljdCI7dmFyIHI9bigxNDA0NCksbz1uKDY1NjcyKSxpPW4oODc1NzkpLGE9big0NjEzMCksYz1uKDQxOTg5KSxzPW4oNDEzMzQpO3Ioe3RhcmdldDoiTWFwIixwcm90bzohMCxyZWFsOiEwLGZvcmNlZDpvfSx7c29tZTpmdW5jdGlvbih0KXt2YXIgZT1pKHRoaXMpLG49YyhlKSxyPWEodCxhcmd1bWVudHMubGVuZ3RoPjE/YXJndW1lbnRzWzFdOnZvaWQgMCwzKTtyZXR1cm4gcyhuLChmdW5jdGlvbih0LG4pe2lmKHIobix0LGUpKXJldHVybiBzLnN0b3AoKX0pLHZvaWQgMCwhMCwhMCkuc3RvcHBlZH19KX0sNDMyOTA6ZnVuY3Rpb24odCxlLG4peyJ1c2Ugc3RyaWN0IjtuKDE0MDQ0KSh7dGFyZ2V0OiJNYXAiLHByb3RvOiEwLHJlYWw6ITAsZm9yY2VkOm4oNjU2NzIpfSx7dXBkYXRlT3JJbnNlcnQ6big0NzkyNyl9KX0sOTc5Mjg6ZnVuY3Rpb24odCxlLG4peyJ1c2Ugc3RyaWN0Ijt2YXIgcj1uKDE0MDQ0KSxvPW4oNjU2NzIpLGk9big4NzU3OSksYT1uKDg2NDcwKTtyKHt0YXJnZXQ6Ik1hcCIscHJvdG86ITAscmVhbDohMCxmb3JjZWQ6b30se3VwZGF0ZTpmdW5jdGlvbih0LGUpe3ZhciBuPWkodGhpcykscj1hcmd1bWVudHMubGVuZ3RoO2EoZSk7dmFyIG89bi5oYXModCk7aWYoIW8mJnI8Myl0aHJvdyBUeXBlRXJyb3IoIlVwZGF0aW5nIGFic2VudCB2YWx1ZSIpO3ZhciBjPW8/bi5nZXQodCk6YShyPjI/YXJndW1lbnRzWzJdOnZvaWQgMCkodCxuKTtyZXR1cm4gbi5zZXQodCxlKGMsdCxuKSksbn19KX0sMTQ2ODI6ZnVuY3Rpb24odCxlLG4peyJ1c2Ugc3RyaWN0IjtuKDE0MDQ0KSh7dGFyZ2V0OiJNYXAiLHByb3RvOiEwLHJlYWw6ITAsZm9yY2VkOm4oNjU2NzIpfSx7dXBzZXJ0Om4oNDc5MjcpfSl9LDcwMjI1OmZ1bmN0aW9uKHQsZSxuKXt2YXIgcj1uKDE0MDQ0KSxvPU1hdGgubWluLGk9TWF0aC5tYXg7cih7dGFyZ2V0OiJNYXRoIixzdGF0OiEwfSx7Y2xhbXA6ZnVuY3Rpb24odCxlLG4pe3JldHVybiBvKG4saShlLHQpKX19KX0sMjM5OTpmdW5jdGlvbih0LGUsbil7bigxNDA0NCkoe3RhcmdldDoiTWF0aCIsc3RhdDohMH0se0RFR19QRVJfUkFEOk1hdGguUEkvMTgwfSl9LDE2ODA5OmZ1bmN0aW9uKHQsZSxuKXt2YXIgcj1uKDE0MDQ0KSxvPTE4MC9NYXRoLlBJO3Ioe3RhcmdldDoiTWF0aCIsc3RhdDohMH0se2RlZ3JlZXM6ZnVuY3Rpb24odCl7cmV0dXJuIHQqb319KX0sNjcxNDE6ZnVuY3Rpb24odCxlLG4pe3ZhciByPW4oMTQwNDQpLG89big3NzQyKSxpPW4oNTMyNTEpO3Ioe3RhcmdldDoiTWF0aCIsc3RhdDohMH0se2ZzY2FsZTpmdW5jdGlvbih0LGUsbixyLGEpe3JldHVybiBpKG8odCxlLG4scixhKSl9fSl9LDMwNjEzOmZ1bmN0aW9uKHQsZSxuKXtuKDE0MDQ0KSh7dGFyZ2V0OiJNYXRoIixzdGF0OiEwfSx7aWFkZGg6ZnVuY3Rpb24odCxlLG4scil7dmFyIG89dD4+PjAsaT1uPj4+MDtyZXR1cm4oZT4+PjApKyhyPj4+MCkrKChvJml8KG98aSkmfihvK2k+Pj4wKSk+Pj4zMSl8MH19KX0sNDk3OTpmdW5jdGlvbih0LGUsbil7bigxNDA0NCkoe3RhcmdldDoiTWF0aCIsc3RhdDohMH0se2ltdWxoOmZ1bmN0aW9uKHQsZSl7dmFyIG49NjU1MzUscj0rdCxvPStlLGk9ciZuLGE9byZuLGM9cj4+MTYscz1vPj4xNix1PShjKmE+Pj4wKSsoaSphPj4+MTYpO3JldHVybiBjKnMrKHU+PjE2KSsoKGkqcz4+PjApKyh1Jm4pPj4xNil9fSl9LDY4NDA2OmZ1bmN0aW9uKHQsZSxuKXtuKDE0MDQ0KSh7dGFyZ2V0OiJNYXRoIixzdGF0OiEwfSx7aXN1Ymg6ZnVuY3Rpb24odCxlLG4scil7dmFyIG89dD4+PjAsaT1uPj4+MDtyZXR1cm4oZT4+PjApLShyPj4+MCktKCh+byZpfH4ob15pKSZvLWk+Pj4wKT4+PjMxKXwwfX0pfSw5MDc2OTpmdW5jdGlvbih0LGUsbil7bigxNDA0NCkoe3RhcmdldDoiTWF0aCIsc3RhdDohMH0se1JBRF9QRVJfREVHOjE4MC9NYXRoLlBJfSl9LDU3ODkxOmZ1bmN0aW9uKHQsZSxuKXt2YXIgcj1uKDE0MDQ0KSxvPU1hdGguUEkvMTgwO3Ioe3RhcmdldDoiTWF0aCIsc3RhdDohMH0se3JhZGlhbnM6ZnVuY3Rpb24odCl7cmV0dXJuIHQqb319KX0sMTU3MjI6ZnVuY3Rpb24odCxlLG4pe24oMTQwNDQpKHt0YXJnZXQ6Ik1hdGgiLHN0YXQ6ITB9LHtzY2FsZTpuKDc3NDIpfSl9LDE3NjU6ZnVuY3Rpb24odCxlLG4pe3ZhciByPW4oMTQwNDQpLG89big4NzU3OSksaT1uKDg5NTQyKSxhPW4oNzEyMDEpLGM9big4OTgyNykscz0iU2VlZGVkIFJhbmRvbSIsdT0iU2VlZGVkIFJhbmRvbSBHZW5lcmF0b3IiLGw9Yy5zZXQsZj1jLmdldHRlckZvcih1KSxkPWEoKGZ1bmN0aW9uKHQpe2wodGhpcyx7dHlwZTp1LHNlZWQ6dCUyMTQ3NDgzNjQ3fSl9KSxzLChmdW5jdGlvbigpe3ZhciB0PWYodGhpcyk7cmV0dXJue3ZhbHVlOigxMDczNzQxODIzJih0LnNlZWQ9KDExMDM1MTUyNDUqdC5zZWVkKzEyMzQ1KSUyMTQ3NDgzNjQ3KSkvMTA3Mzc0MTgyMyxkb25lOiExfX0pKTtyKHt0YXJnZXQ6Ik1hdGgiLHN0YXQ6ITAsZm9yY2VkOiEwfSx7c2VlZGVkUFJORzpmdW5jdGlvbih0KXt2YXIgZT1vKHQpLnNlZWQ7aWYoIWkoZSkpdGhyb3cgVHlwZUVycm9yKCdNYXRoLnNlZWRlZFBSTkcoKSBhcmd1bWVudCBzaG91bGQgaGF2ZSBhICJzZWVkIiBmaWVsZCB3aXRoIGEgZmluaXRlIHZhbHVlLicpO3JldHVybiBuZXcgZChlKX19KX0sNzc5MDc6ZnVuY3Rpb24odCxlLG4pe24oMTQwNDQpKHt0YXJnZXQ6Ik1hdGgiLHN0YXQ6ITB9LHtzaWduYml0OmZ1bmN0aW9uKHQpe3JldHVybih0PSt0KT09dCYmMD09dD8xL3Q9PS0xLzA6dDwwfX0pfSw0NDY0NjpmdW5jdGlvbih0LGUsbil7bigxNDA0NCkoe3RhcmdldDoiTWF0aCIsc3RhdDohMH0se3VtdWxoOmZ1bmN0aW9uKHQsZSl7dmFyIG49NjU1MzUscj0rdCxvPStlLGk9ciZuLGE9byZuLGM9cj4+PjE2LHM9bz4+PjE2LHU9KGMqYT4+PjApKyhpKmE+Pj4xNik7cmV0dXJuIGMqcysodT4+PjE2KSsoKGkqcz4+PjApKyh1Jm4pPj4+MTYpfX0pfSw3NTY0NzpmdW5jdGlvbih0LGUsbil7InVzZSBzdHJpY3QiO3ZhciByPW4oMTQwNDQpLG89big0MzQxNiksaT1uKDc4NDYpLGE9IkludmFsaWQgbnVtYmVyIHJlcHJlc2VudGF0aW9uIixjPS9eW1xkYS16XSskLztyKHt0YXJnZXQ6Ik51bWJlciIsc3RhdDohMH0se2Zyb21TdHJpbmc6ZnVuY3Rpb24odCxlKXt2YXIgbixyLHM9MTtpZigic3RyaW5nIiE9dHlwZW9mIHQpdGhyb3cgVHlwZUVycm9yKGEpO2lmKCF0Lmxlbmd0aCl0aHJvdyBTeW50YXhFcnJvcihhKTtpZigiLSI9PXQuY2hhckF0KDApJiYocz0tMSwhKHQ9dC5zbGljZSgxKSkubGVuZ3RoKSl0aHJvdyBTeW50YXhFcnJvcihhKTtpZigobj12b2lkIDA9PT1lPzEwOm8oZSkpPDJ8fG4+MzYpdGhyb3cgUmFuZ2VFcnJvcigiSW52YWxpZCByYWRpeCIpO2lmKCFjLnRlc3QodCl8fChyPWkodCxuKSkudG9TdHJpbmcobikhPT10KXRocm93IFN5bnRheEVycm9yKGEpO3JldHVybiBzKnJ9fSl9LDg0MzA5OmZ1bmN0aW9uKHQsZSxuKXsidXNlIHN0cmljdCI7dmFyIHI9bigxNDA0NCksbz1uKDg2NDAzKTtyKHt0YXJnZXQ6Ik9iamVjdCIsc3RhdDohMH0se2l0ZXJhdGVFbnRyaWVzOmZ1bmN0aW9uKHQpe3JldHVybiBuZXcgbyh0LCJlbnRyaWVzIil9fSl9LDcyOTYzOmZ1bmN0aW9uKHQsZSxuKXsidXNlIHN0cmljdCI7dmFyIHI9bigxNDA0NCksbz1uKDg2NDAzKTtyKHt0YXJnZXQ6Ik9iamVjdCIsc3RhdDohMH0se2l0ZXJhdGVLZXlzOmZ1bmN0aW9uKHQpe3JldHVybiBuZXcgbyh0LCJrZXlzIil9fSl9LDU2MzU5OmZ1bmN0aW9uKHQsZSxuKXsidXNlIHN0cmljdCI7dmFyIHI9bigxNDA0NCksbz1uKDg2NDAzKTtyKHt0YXJnZXQ6Ik9iamVjdCIsc3RhdDohMH0se2l0ZXJhdGVWYWx1ZXM6ZnVuY3Rpb24odCl7cmV0dXJuIG5ldyBvKHQsInZhbHVlcyIpfX0pfSwyMDIzNDpmdW5jdGlvbih0LGUsbil7InVzZSBzdHJpY3QiO3ZhciByPW4oMTQwNDQpLG89big2MjU1NiksaT1uKDY3NTM4KSxhPW4oODY0NzApLGM9big4NzU3OSkscz1uKDEwNTkyKSx1PW4oNTkzNzkpLGw9bigzNzYyMCkuZixmPW4oNjY5NzEpLGQ9bigxOTI2KSxwPW4oMzEwNzQpLGg9big0MTMzNCksdj1uKDgzNjIwKSxnPW4oMjM3MjQpLHk9big4OTgyNyksbT1nKCJvYnNlcnZhYmxlIiksYj15LmdldCx4PXkuc2V0LHc9ZnVuY3Rpb24odCl7cmV0dXJuIG51bGw9PXQ/dm9pZCAwOmEodCl9LEU9ZnVuY3Rpb24odCl7dmFyIGU9dC5jbGVhbnVwO2lmKGUpe3QuY2xlYW51cD12b2lkIDA7dHJ5e2UoKX1jYXRjaCh0KXt2KHQpfX19LGo9ZnVuY3Rpb24odCl7cmV0dXJuIHZvaWQgMD09PXQub2JzZXJ2ZXJ9LEM9ZnVuY3Rpb24odCxlKXtpZighbyl7dC5jbG9zZWQ9ITA7dmFyIG49ZS5zdWJzY3JpcHRpb25PYnNlcnZlcjtuJiYobi5jbG9zZWQ9ITApfWUub2JzZXJ2ZXI9dm9pZCAwfSxrPWZ1bmN0aW9uKHQsZSl7dmFyIG4scj14KHRoaXMse2NsZWFudXA6dm9pZCAwLG9ic2VydmVyOmModCksc3Vic2NyaXB0aW9uT2JzZXJ2ZXI6dm9pZCAwfSk7b3x8KHRoaXMuY2xvc2VkPSExKTt0cnl7KG49dyh0LnN0YXJ0KSkmJm4uY2FsbCh0LHRoaXMpfWNhdGNoKHQpe3YodCl9aWYoIWoocikpe3ZhciBpPXIuc3Vic2NyaXB0aW9uT2JzZXJ2ZXI9bmV3IFModGhpcyk7dHJ5e3ZhciBzPWUoaSksdT1zO251bGwhPXMmJihyLmNsZWFudXA9ImZ1bmN0aW9uIj09dHlwZW9mIHMudW5zdWJzY3JpYmU/ZnVuY3Rpb24oKXt1LnVuc3Vic2NyaWJlKCl9OmEocykpfWNhdGNoKHQpe3JldHVybiB2b2lkIGkuZXJyb3IodCl9aihyKSYmRShyKX19O2sucHJvdG90eXBlPWQoe30se3Vuc3Vic2NyaWJlOmZ1bmN0aW9uKCl7dmFyIHQ9Yih0aGlzKTtqKHQpfHwoQyh0aGlzLHQpLEUodCkpfX0pLG8mJmwoay5wcm90b3R5cGUsImNsb3NlZCIse2NvbmZpZ3VyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gaihiKHRoaXMpKX19KTt2YXIgUz1mdW5jdGlvbih0KXt4KHRoaXMse3N1YnNjcmlwdGlvbjp0fSksb3x8KHRoaXMuY2xvc2VkPSExKX07Uy5wcm90b3R5cGU9ZCh7fSx7bmV4dDpmdW5jdGlvbih0KXt2YXIgZT1iKGIodGhpcykuc3Vic2NyaXB0aW9uKTtpZighaihlKSl7dmFyIG49ZS5vYnNlcnZlcjt0cnl7dmFyIHI9dyhuLm5leHQpO3ImJnIuY2FsbChuLHQpfWNhdGNoKHQpe3YodCl9fX0sZXJyb3I6ZnVuY3Rpb24odCl7dmFyIGU9Yih0aGlzKS5zdWJzY3JpcHRpb24sbj1iKGUpO2lmKCFqKG4pKXt2YXIgcj1uLm9ic2VydmVyO0MoZSxuKTt0cnl7dmFyIG89dyhyLmVycm9yKTtvP28uY2FsbChyLHQpOnYodCl9Y2F0Y2godCl7dih0KX1FKG4pfX0sY29tcGxldGU6ZnVuY3Rpb24oKXt2YXIgdD1iKHRoaXMpLnN1YnNjcmlwdGlvbixlPWIodCk7aWYoIWooZSkpe3ZhciBuPWUub2JzZXJ2ZXI7Qyh0LGUpO3RyeXt2YXIgcj13KG4uY29tcGxldGUpO3ImJnIuY2FsbChuKX1jYXRjaCh0KXt2KHQpfUUoZSl9fX0pLG8mJmwoUy5wcm90b3R5cGUsImNsb3NlZCIse2NvbmZpZ3VyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gaihiKGIodGhpcykuc3Vic2NyaXB0aW9uKSl9fSk7dmFyIE89ZnVuY3Rpb24odCl7dSh0aGlzLE8sIk9ic2VydmFibGUiKSx4KHRoaXMse3N1YnNjcmliZXI6YSh0KX0pfTtkKE8ucHJvdG90eXBlLHtzdWJzY3JpYmU6ZnVuY3Rpb24odCl7dmFyIGU9YXJndW1lbnRzLmxlbmd0aDtyZXR1cm4gbmV3IGsoImZ1bmN0aW9uIj09dHlwZW9mIHQ/e25leHQ6dCxlcnJvcjplPjE/YXJndW1lbnRzWzFdOnZvaWQgMCxjb21wbGV0ZTplPjI/YXJndW1lbnRzWzJdOnZvaWQgMH06cyh0KT90Ont9LGIodGhpcykuc3Vic2NyaWJlcil9fSksZChPLHtmcm9tOmZ1bmN0aW9uKHQpe3ZhciBlPSJmdW5jdGlvbiI9PXR5cGVvZiB0aGlzP3RoaXM6TyxuPXcoYyh0KVttXSk7aWYobil7dmFyIHI9YyhuLmNhbGwodCkpO3JldHVybiByLmNvbnN0cnVjdG9yPT09ZT9yOm5ldyBlKChmdW5jdGlvbih0KXtyZXR1cm4gci5zdWJzY3JpYmUodCl9KSl9dmFyIG89cCh0KTtyZXR1cm4gbmV3IGUoKGZ1bmN0aW9uKHQpe2gobywoZnVuY3Rpb24oZSl7aWYodC5uZXh0KGUpLHQuY2xvc2VkKXJldHVybiBoLnN0b3AoKX0pLHZvaWQgMCwhMSwhMCksdC5jb21wbGV0ZSgpfSkpfSxvZjpmdW5jdGlvbigpe2Zvcih2YXIgdD0iZnVuY3Rpb24iPT10eXBlb2YgdGhpcz90aGlzOk8sZT1hcmd1bWVudHMubGVuZ3RoLG49bmV3IEFycmF5KGUpLHI9MDtyPGU7KW5bcl09YXJndW1lbnRzW3IrK107cmV0dXJuIG5ldyB0KChmdW5jdGlvbih0KXtmb3IodmFyIHI9MDtyPGU7cisrKWlmKHQubmV4dChuW3JdKSx0LmNsb3NlZClyZXR1cm47dC5jb21wbGV0ZSgpfSkpfX0pLGYoTy5wcm90b3R5cGUsbSwoZnVuY3Rpb24oKXtyZXR1cm4gdGhpc30pKSxyKHtnbG9iYWw6ITB9LHtPYnNlcnZhYmxlOk99KSxpKCJPYnNlcnZhYmxlIil9LDI3NzU6ZnVuY3Rpb24odCxlLG4pe24oMTc2MjkpfSw3MzIyMDpmdW5jdGlvbih0LGUsbil7InVzZSBzdHJpY3QiO3ZhciByPW4oMTQwNDQpLG89big4NjQ3MCksaT1uKDc3MDEpLGE9big4MzA4MyksYz1uKDMxMTUpLHM9big0MTMzNCksdT0iTm8gb25lIHByb21pc2UgcmVzb2x2ZWQiO3Ioe3RhcmdldDoiUHJvbWlzZSIsc3RhdDohMH0se2FueTpmdW5jdGlvbih0KXt2YXIgZT10aGlzLG49YS5mKGUpLHI9bi5yZXNvbHZlLGw9bi5yZWplY3QsZj1jKChmdW5jdGlvbigpe3ZhciBuPW8oZS5yZXNvbHZlKSxhPVtdLGM9MCxmPTEsZD0hMTtzKHQsKGZ1bmN0aW9uKHQpe3ZhciBvPWMrKyxzPSExO2EucHVzaCh2b2lkIDApLGYrKyxuLmNhbGwoZSx0KS50aGVuKChmdW5jdGlvbih0KXtzfHxkfHwoZD0hMCxyKHQpKX0pLChmdW5jdGlvbih0KXtzfHxkfHwocz0hMCxhW29dPXQsLS1mfHxsKG5ldyhpKCJBZ2dyZWdhdGVFcnJvciIpKShhLHUpKSl9KSl9KSksLS1mfHxsKG5ldyhpKCJBZ2dyZWdhdGVFcnJvciIpKShhLHUpKX0pKTtyZXR1cm4gZi5lcnJvciYmbChmLnZhbHVlKSxuLnByb21pc2V9fSl9LDExMDcxOmZ1bmN0aW9uKHQsZSxuKXsidXNlIHN0cmljdCI7dmFyIHI9bigxNDA0NCksbz1uKDgzMDgzKSxpPW4oMzExNSk7cih7dGFyZ2V0OiJQcm9taXNlIixzdGF0OiEwfSx7dHJ5OmZ1bmN0aW9uKHQpe3ZhciBlPW8uZih0aGlzKSxuPWkodCk7cmV0dXJuKG4uZXJyb3I/ZS5yZWplY3Q6ZS5yZXNvbHZlKShuLnZhbHVlKSxlLnByb21pc2V9fSl9LDQ5NjQwOmZ1bmN0aW9uKHQsZSxuKXt2YXIgcj1uKDE0MDQ0KSxvPW4oNzcwMjApLGk9big4NzU3OSksYT1vLnRvS2V5LGM9by5zZXQ7cih7dGFyZ2V0OiJSZWZsZWN0IixzdGF0OiEwfSx7ZGVmaW5lTWV0YWRhdGE6ZnVuY3Rpb24odCxlLG4pe3ZhciByPWFyZ3VtZW50cy5sZW5ndGg8ND92b2lkIDA6YShhcmd1bWVudHNbM10pO2ModCxlLGkobikscil9fSl9LDc0OTYzOmZ1bmN0aW9uKHQsZSxuKXt2YXIgcj1uKDE0MDQ0KSxvPW4oNzcwMjApLGk9big4NzU3OSksYT1vLnRvS2V5LGM9by5nZXRNYXAscz1vLnN0b3JlO3Ioe3RhcmdldDoiUmVmbGVjdCIsc3RhdDohMH0se2RlbGV0ZU1ldGFkYXRhOmZ1bmN0aW9uKHQsZSl7dmFyIG49YXJndW1lbnRzLmxlbmd0aDwzP3ZvaWQgMDphKGFyZ3VtZW50c1syXSkscj1jKGkoZSksbiwhMSk7aWYodm9pZCAwPT09cnx8IXIuZGVsZXRlKHQpKXJldHVybiExO2lmKHIuc2l6ZSlyZXR1cm4hMDt2YXIgbz1zLmdldChlKTtyZXR1cm4gby5kZWxldGUobiksISFvLnNpemV8fHMuZGVsZXRlKGUpfX0pfSw0OTE1NTpmdW5jdGlvbih0LGUsbil7dmFyIHI9bigxNDA0NCksbz1uKDc0MDYxKSxpPW4oNzcwMjApLGE9big4NzU3OSksYz1uKDY0OTY1KSxzPW4oNDEzMzQpLHU9aS5rZXlzLGw9aS50b0tleSxmPWZ1bmN0aW9uKHQsZSl7dmFyIG49dSh0LGUpLHI9Yyh0KTtpZihudWxsPT09cilyZXR1cm4gbjt2YXIgaSxhLGw9ZihyLGUpO3JldHVybiBsLmxlbmd0aD9uLmxlbmd0aD8oaT1uZXcgbyhuLmNvbmNhdChsKSkscyhpLChhPVtdKS5wdXNoLGEpLGEpOmw6bn07cih7dGFyZ2V0OiJSZWZsZWN0IixzdGF0OiEwfSx7Z2V0TWV0YWRhdGFLZXlzOmZ1bmN0aW9uKHQpe3ZhciBlPWFyZ3VtZW50cy5sZW5ndGg8Mj92b2lkIDA6bChhcmd1bWVudHNbMV0pO3JldHVybiBmKGEodCksZSl9fSl9LDY5NDU5OmZ1bmN0aW9uKHQsZSxuKXt2YXIgcj1uKDE0MDQ0KSxvPW4oNzcwMjApLGk9big4NzU3OSksYT1uKDY0OTY1KSxjPW8uaGFzLHM9by5nZXQsdT1vLnRvS2V5LGw9ZnVuY3Rpb24odCxlLG4pe2lmKGModCxlLG4pKXJldHVybiBzKHQsZSxuKTt2YXIgcj1hKGUpO3JldHVybiBudWxsIT09cj9sKHQscixuKTp2b2lkIDB9O3Ioe3RhcmdldDoiUmVmbGVjdCIsc3RhdDohMH0se2dldE1ldGFkYXRhOmZ1bmN0aW9uKHQsZSl7dmFyIG49YXJndW1lbnRzLmxlbmd0aDwzP3ZvaWQgMDp1KGFyZ3VtZW50c1syXSk7cmV0dXJuIGwodCxpKGUpLG4pfX0pfSw4NzQ3NDpmdW5jdGlvbih0LGUsbil7dmFyIHI9bigxNDA0NCksbz1uKDc3MDIwKSxpPW4oODc1NzkpLGE9by5rZXlzLGM9by50b0tleTtyKHt0YXJnZXQ6IlJlZmxlY3QiLHN0YXQ6ITB9LHtnZXRPd25NZXRhZGF0YUtleXM6ZnVuY3Rpb24odCl7dmFyIGU9YXJndW1lbnRzLmxlbmd0aDwyP3ZvaWQgMDpjKGFyZ3VtZW50c1sxXSk7cmV0dXJuIGEoaSh0KSxlKX19KX0sMjY4OTY6ZnVuY3Rpb24odCxlLG4pe3ZhciByPW4oMTQwNDQpLG89big3NzAyMCksaT1uKDg3NTc5KSxhPW8uZ2V0LGM9by50b0tleTtyKHt0YXJnZXQ6IlJlZmxlY3QiLHN0YXQ6ITB9LHtnZXRPd25NZXRhZGF0YTpmdW5jdGlvbih0LGUpe3ZhciBuPWFyZ3VtZW50cy5sZW5ndGg8Mz92b2lkIDA6Yyhhcmd1bWVudHNbMl0pO3JldHVybiBhKHQsaShlKSxuKX19KX0sOTc0MzM6ZnVuY3Rpb24odCxlLG4pe3ZhciByPW4oMTQwNDQpLG89big3NzAyMCksaT1uKDg3NTc5KSxhPW4oNjQ5NjUpLGM9by5oYXMscz1vLnRvS2V5LHU9ZnVuY3Rpb24odCxlLG4pe2lmKGModCxlLG4pKXJldHVybiEwO3ZhciByPWEoZSk7cmV0dXJuIG51bGwhPT1yJiZ1KHQscixuKX07cih7dGFyZ2V0OiJSZWZsZWN0IixzdGF0OiEwfSx7aGFzTWV0YWRhdGE6ZnVuY3Rpb24odCxlKXt2YXIgbj1hcmd1bWVudHMubGVuZ3RoPDM/dm9pZCAwOnMoYXJndW1lbnRzWzJdKTtyZXR1cm4gdSh0LGkoZSksbil9fSl9LDcxMDg6ZnVuY3Rpb24odCxlLG4pe3ZhciByPW4oMTQwNDQpLG89big3NzAyMCksaT1uKDg3NTc5KSxhPW8uaGFzLGM9by50b0tleTtyKHt0YXJnZXQ6IlJlZmxlY3QiLHN0YXQ6ITB9LHtoYXNPd25NZXRhZGF0YTpmdW5jdGlvbih0LGUpe3ZhciBuPWFyZ3VtZW50cy5sZW5ndGg8Mz92b2lkIDA6Yyhhcmd1bWVudHNbMl0pO3JldHVybiBhKHQsaShlKSxuKX19KX0sMjM2MzE6ZnVuY3Rpb24odCxlLG4pe3ZhciByPW4oMTQwNDQpLG89big3NzAyMCksaT1uKDg3NTc5KSxhPW8udG9LZXksYz1vLnNldDtyKHt0YXJnZXQ6IlJlZmxlY3QiLHN0YXQ6ITB9LHttZXRhZGF0YTpmdW5jdGlvbih0LGUpe3JldHVybiBmdW5jdGlvbihuLHIpe2ModCxlLGkobiksYShyKSl9fX0pfSw5Mzk6ZnVuY3Rpb24odCxlLG4peyJ1c2Ugc3RyaWN0Ijt2YXIgcj1uKDE0MDQ0KSxvPW4oNjU2NzIpLGk9big5ODE3OSk7cih7dGFyZ2V0OiJTZXQiLHByb3RvOiEwLHJlYWw6ITAsZm9yY2VkOm99LHthZGRBbGw6ZnVuY3Rpb24oKXtyZXR1cm4gaS5hcHBseSh0aGlzLGFyZ3VtZW50cyl9fSl9LDYxNDY3OmZ1bmN0aW9uKHQsZSxuKXsidXNlIHN0cmljdCI7dmFyIHI9bigxNDA0NCksbz1uKDY1NjcyKSxpPW4oMTQ2Nik7cih7dGFyZ2V0OiJTZXQiLHByb3RvOiEwLHJlYWw6ITAsZm9yY2VkOm99LHtkZWxldGVBbGw6ZnVuY3Rpb24oKXtyZXR1cm4gaS5hcHBseSh0aGlzLGFyZ3VtZW50cyl9fSl9LDk4MzUwOmZ1bmN0aW9uKHQsZSxuKXsidXNlIHN0cmljdCI7dmFyIHI9bigxNDA0NCksbz1uKDY1NjcyKSxpPW4oNzcwMSksYT1uKDg3NTc5KSxjPW4oODY0NzApLHM9bigxMzk3OSksdT1uKDQxMzM0KTtyKHt0YXJnZXQ6IlNldCIscHJvdG86ITAscmVhbDohMCxmb3JjZWQ6b30se2RpZmZlcmVuY2U6ZnVuY3Rpb24odCl7dmFyIGU9YSh0aGlzKSxuPW5ldyhzKGUsaSgiU2V0IikpKShlKSxyPWMobi5kZWxldGUpO3JldHVybiB1KHQsKGZ1bmN0aW9uKHQpe3IuY2FsbChuLHQpfSkpLG59fSl9LDE2MTI3OmZ1bmN0aW9uKHQsZSxuKXsidXNlIHN0cmljdCI7dmFyIHI9bigxNDA0NCksbz1uKDY1NjcyKSxpPW4oODc1NzkpLGE9big0NjEzMCksYz1uKDQxNDc1KSxzPW4oNDEzMzQpO3Ioe3RhcmdldDoiU2V0Iixwcm90bzohMCxyZWFsOiEwLGZvcmNlZDpvfSx7ZXZlcnk6ZnVuY3Rpb24odCl7dmFyIGU9aSh0aGlzKSxuPWMoZSkscj1hKHQsYXJndW1lbnRzLmxlbmd0aD4xP2FyZ3VtZW50c1sxXTp2b2lkIDAsMyk7cmV0dXJuIXMobiwoZnVuY3Rpb24odCl7aWYoIXIodCx0LGUpKXJldHVybiBzLnN0b3AoKX0pLHZvaWQgMCwhMSwhMCkuc3RvcHBlZH19KX0sNTM1ODk6ZnVuY3Rpb24odCxlLG4peyJ1c2Ugc3RyaWN0Ijt2YXIgcj1uKDE0MDQ0KSxvPW4oNjU2NzIpLGk9big3NzAxKSxhPW4oODc1NzkpLGM9big4NjQ3MCkscz1uKDQ2MTMwKSx1PW4oMTM5NzkpLGw9big0MTQ3NSksZj1uKDQxMzM0KTtyKHt0YXJnZXQ6IlNldCIscHJvdG86ITAscmVhbDohMCxmb3JjZWQ6b30se2ZpbHRlcjpmdW5jdGlvbih0KXt2YXIgZT1hKHRoaXMpLG49bChlKSxyPXModCxhcmd1bWVudHMubGVuZ3RoPjE/YXJndW1lbnRzWzFdOnZvaWQgMCwzKSxvPW5ldyh1KGUsaSgiU2V0IikpKSxkPWMoby5hZGQpO3JldHVybiBmKG4sKGZ1bmN0aW9uKHQpe3IodCx0LGUpJiZkLmNhbGwobyx0KX0pLHZvaWQgMCwhMSwhMCksb319KX0sODEwNDI6ZnVuY3Rpb24odCxlLG4peyJ1c2Ugc3RyaWN0Ijt2YXIgcj1uKDE0MDQ0KSxvPW4oNjU2NzIpLGk9big4NzU3OSksYT1uKDQ2MTMwKSxjPW4oNDE0NzUpLHM9big0MTMzNCk7cih7dGFyZ2V0OiJTZXQiLHByb3RvOiEwLHJlYWw6ITAsZm9yY2VkOm99LHtmaW5kOmZ1bmN0aW9uKHQpe3ZhciBlPWkodGhpcyksbj1jKGUpLHI9YSh0LGFyZ3VtZW50cy5sZW5ndGg+MT9hcmd1bWVudHNbMV06dm9pZCAwLDMpO3JldHVybiBzKG4sKGZ1bmN0aW9uKHQpe2lmKHIodCx0LGUpKXJldHVybiBzLnN0b3AodCl9KSx2b2lkIDAsITEsITApLnJlc3VsdH19KX0sOTcyODQ6ZnVuY3Rpb24odCxlLG4pe24oMTQwNDQpKHt0YXJnZXQ6IlNldCIsc3RhdDohMH0se2Zyb206bigxMjkwMSl9KX0sNDE3MTg6ZnVuY3Rpb24odCxlLG4peyJ1c2Ugc3RyaWN0Ijt2YXIgcj1uKDE0MDQ0KSxvPW4oNjU2NzIpLGk9big3NzAxKSxhPW4oODc1NzkpLGM9big4NjQ3MCkscz1uKDEzOTc5KSx1PW4oNDEzMzQpO3Ioe3RhcmdldDoiU2V0Iixwcm90bzohMCxyZWFsOiEwLGZvcmNlZDpvfSx7aW50ZXJzZWN0aW9uOmZ1bmN0aW9uKHQpe3ZhciBlPWEodGhpcyksbj1uZXcocyhlLGkoIlNldCIpKSkscj1jKGUuaGFzKSxvPWMobi5hZGQpO3JldHVybiB1KHQsKGZ1bmN0aW9uKHQpe3IuY2FsbChlLHQpJiZvLmNhbGwobix0KX0pKSxufX0pfSw1NzM3MTpmdW5jdGlvbih0LGUsbil7InVzZSBzdHJpY3QiO3ZhciByPW4oMTQwNDQpLG89big2NTY3MiksaT1uKDg3NTc5KSxhPW4oODY0NzApLGM9big0MTMzNCk7cih7dGFyZ2V0OiJTZXQiLHByb3RvOiEwLHJlYWw6ITAsZm9yY2VkOm99LHtpc0Rpc2pvaW50RnJvbTpmdW5jdGlvbih0KXt2YXIgZT1pKHRoaXMpLG49YShlLmhhcyk7cmV0dXJuIWModCwoZnVuY3Rpb24odCl7aWYoITA9PT1uLmNhbGwoZSx0KSlyZXR1cm4gYy5zdG9wKCl9KSkuc3RvcHBlZH19KX0sODkyMzA6ZnVuY3Rpb24odCxlLG4peyJ1c2Ugc3RyaWN0Ijt2YXIgcj1uKDE0MDQ0KSxvPW4oNjU2NzIpLGk9big3NzAxKSxhPW4oODc1NzkpLGM9big4NjQ3MCkscz1uKDMxMDc0KSx1PW4oNDEzMzQpO3Ioe3RhcmdldDoiU2V0Iixwcm90bzohMCxyZWFsOiEwLGZvcmNlZDpvfSx7aXNTdWJzZXRPZjpmdW5jdGlvbih0KXt2YXIgZT1zKHRoaXMpLG49YSh0KSxyPW4uaGFzO3JldHVybiJmdW5jdGlvbiIhPXR5cGVvZiByJiYobj1uZXcoaSgiU2V0IikpKHQpLHI9YyhuLmhhcykpLCF1KGUsKGZ1bmN0aW9uKHQpe2lmKCExPT09ci5jYWxsKG4sdCkpcmV0dXJuIHUuc3RvcCgpfSksdm9pZCAwLCExLCEwKS5zdG9wcGVkfX0pfSwzMjMwMzpmdW5jdGlvbih0LGUsbil7InVzZSBzdHJpY3QiO3ZhciByPW4oMTQwNDQpLG89big2NTY3MiksaT1uKDg3NTc5KSxhPW4oODY0NzApLGM9big0MTMzNCk7cih7dGFyZ2V0OiJTZXQiLHByb3RvOiEwLHJlYWw6ITAsZm9yY2VkOm99LHtpc1N1cGVyc2V0T2Y6ZnVuY3Rpb24odCl7dmFyIGU9aSh0aGlzKSxuPWEoZS5oYXMpO3JldHVybiFjKHQsKGZ1bmN0aW9uKHQpe2lmKCExPT09bi5jYWxsKGUsdCkpcmV0dXJuIGMuc3RvcCgpfSkpLnN0b3BwZWR9fSl9LDE2NzU3OmZ1bmN0aW9uKHQsZSxuKXsidXNlIHN0cmljdCI7dmFyIHI9bigxNDA0NCksbz1uKDY1NjcyKSxpPW4oODc1NzkpLGE9big0MTQ3NSksYz1uKDQxMzM0KTtyKHt0YXJnZXQ6IlNldCIscHJvdG86ITAscmVhbDohMCxmb3JjZWQ6b30se2pvaW46ZnVuY3Rpb24odCl7dmFyIGU9aSh0aGlzKSxuPWEoZSkscj12b2lkIDA9PT10PyIsIjpTdHJpbmcodCksbz1bXTtyZXR1cm4gYyhuLG8ucHVzaCxvLCExLCEwKSxvLmpvaW4ocil9fSl9LDExMDc0OmZ1bmN0aW9uKHQsZSxuKXsidXNlIHN0cmljdCI7dmFyIHI9bigxNDA0NCksbz1uKDY1NjcyKSxpPW4oNzcwMSksYT1uKDg3NTc5KSxjPW4oODY0NzApLHM9big0NjEzMCksdT1uKDEzOTc5KSxsPW4oNDE0NzUpLGY9big0MTMzNCk7cih7dGFyZ2V0OiJTZXQiLHByb3RvOiEwLHJlYWw6ITAsZm9yY2VkOm99LHttYXA6ZnVuY3Rpb24odCl7dmFyIGU9YSh0aGlzKSxuPWwoZSkscj1zKHQsYXJndW1lbnRzLmxlbmd0aD4xP2FyZ3VtZW50c1sxXTp2b2lkIDAsMyksbz1uZXcodShlLGkoIlNldCIpKSksZD1jKG8uYWRkKTtyZXR1cm4gZihuLChmdW5jdGlvbih0KXtkLmNhbGwobyxyKHQsdCxlKSl9KSx2b2lkIDAsITEsITApLG99fSl9LDI0NTk4OmZ1bmN0aW9uKHQsZSxuKXtuKDE0MDQ0KSh7dGFyZ2V0OiJTZXQiLHN0YXQ6ITB9LHtvZjpuKDI1MDI2KX0pfSwzMzUzOTpmdW5jdGlvbih0LGUsbil7InVzZSBzdHJpY3QiO3ZhciByPW4oMTQwNDQpLG89big2NTY3MiksaT1uKDg3NTc5KSxhPW4oODY0NzApLGM9big0MTQ3NSkscz1uKDQxMzM0KTtyKHt0YXJnZXQ6IlNldCIscHJvdG86ITAscmVhbDohMCxmb3JjZWQ6b30se3JlZHVjZTpmdW5jdGlvbih0KXt2YXIgZT1pKHRoaXMpLG49YyhlKSxyPWFyZ3VtZW50cy5sZW5ndGg8MixvPXI/dm9pZCAwOmFyZ3VtZW50c1sxXTtpZihhKHQpLHMobiwoZnVuY3Rpb24obil7cj8ocj0hMSxvPW4pOm89dChvLG4sbixlKX0pLHZvaWQgMCwhMSwhMCkscil0aHJvdyBUeXBlRXJyb3IoIlJlZHVjZSBvZiBlbXB0eSBzZXQgd2l0aCBubyBpbml0aWFsIHZhbHVlIik7cmV0dXJuIG99fSl9LDI0MTAzOmZ1bmN0aW9uKHQsZSxuKXsidXNlIHN0cmljdCI7dmFyIHI9bigxNDA0NCksbz1uKDY1NjcyKSxpPW4oODc1NzkpLGE9big0NjEzMCksYz1uKDQxNDc1KSxzPW4oNDEzMzQpO3Ioe3RhcmdldDoiU2V0Iixwcm90bzohMCxyZWFsOiEwLGZvcmNlZDpvfSx7c29tZTpmdW5jdGlvbih0KXt2YXIgZT1pKHRoaXMpLG49YyhlKSxyPWEodCxhcmd1bWVudHMubGVuZ3RoPjE/YXJndW1lbnRzWzFdOnZvaWQgMCwzKTtyZXR1cm4gcyhuLChmdW5jdGlvbih0KXtpZihyKHQsdCxlKSlyZXR1cm4gcy5zdG9wKCl9KSx2b2lkIDAsITEsITApLnN0b3BwZWR9fSl9LDY2MTgxOmZ1bmN0aW9uKHQsZSxuKXsidXNlIHN0cmljdCI7dmFyIHI9bigxNDA0NCksbz1uKDY1NjcyKSxpPW4oNzcwMSksYT1uKDg3NTc5KSxjPW4oODY0NzApLHM9bigxMzk3OSksdT1uKDQxMzM0KTtyKHt0YXJnZXQ6IlNldCIscHJvdG86ITAscmVhbDohMCxmb3JjZWQ6b30se3N5bW1ldHJpY0RpZmZlcmVuY2U6ZnVuY3Rpb24odCl7dmFyIGU9YSh0aGlzKSxuPW5ldyhzKGUsaSgiU2V0IikpKShlKSxyPWMobi5kZWxldGUpLG89YyhuLmFkZCk7cmV0dXJuIHUodCwoZnVuY3Rpb24odCl7ci5jYWxsKG4sdCl8fG8uY2FsbChuLHQpfSkpLG59fSl9LDYyOTE6ZnVuY3Rpb24odCxlLG4peyJ1c2Ugc3RyaWN0Ijt2YXIgcj1uKDE0MDQ0KSxvPW4oNjU2NzIpLGk9big3NzAxKSxhPW4oODc1NzkpLGM9big4NjQ3MCkscz1uKDEzOTc5KSx1PW4oNDEzMzQpO3Ioe3RhcmdldDoiU2V0Iixwcm90bzohMCxyZWFsOiEwLGZvcmNlZDpvfSx7dW5pb246ZnVuY3Rpb24odCl7dmFyIGU9YSh0aGlzKSxuPW5ldyhzKGUsaSgiU2V0IikpKShlKTtyZXR1cm4gdSh0LGMobi5hZGQpLG4pLG59fSl9LDczNDYwOmZ1bmN0aW9uKHQsZSxuKXsidXNlIHN0cmljdCI7dmFyIHI9bigxNDA0NCksbz1uKDYwMTQwKS5jaGFyQXQ7cih7dGFyZ2V0OiJTdHJpbmciLHByb3RvOiEwfSx7YXQ6ZnVuY3Rpb24odCl7cmV0dXJuIG8odGhpcyx0KX19KX0sMzIwNjI6ZnVuY3Rpb24odCxlLG4peyJ1c2Ugc3RyaWN0Ijt2YXIgcj1uKDE0MDQ0KSxvPW4oNzEyMDEpLGk9big3MDEzMiksYT1uKDg5ODI3KSxjPW4oNjAxNDApLHM9Yy5jb2RlQXQsdT1jLmNoYXJBdCxsPSJTdHJpbmcgSXRlcmF0b3IiLGY9YS5zZXQsZD1hLmdldHRlckZvcihsKSxwPW8oKGZ1bmN0aW9uKHQpe2YodGhpcyx7dHlwZTpsLHN0cmluZzp0LGluZGV4OjB9KX0pLCJTdHJpbmciLChmdW5jdGlvbigpe3ZhciB0LGU9ZCh0aGlzKSxuPWUuc3RyaW5nLHI9ZS5pbmRleDtyZXR1cm4gcj49bi5sZW5ndGg/e3ZhbHVlOnZvaWQgMCxkb25lOiEwfToodD11KG4sciksZS5pbmRleCs9dC5sZW5ndGgse3ZhbHVlOntjb2RlUG9pbnQ6cyh0LDApLHBvc2l0aW9uOnJ9LGRvbmU6ITF9KX0pKTtyKHt0YXJnZXQ6IlN0cmluZyIscHJvdG86ITB9LHtjb2RlUG9pbnRzOmZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBwKFN0cmluZyhpKHRoaXMpKSl9fSl9LDc0NTI1OmZ1bmN0aW9uKHQsZSxuKXtuKDgxMjc3KX0sNjQwMjY6ZnVuY3Rpb24odCxlLG4peyJ1c2Ugc3RyaWN0Ijt2YXIgcj1uKDE0MDQ0KSxvPW4oNzAxMzIpLGk9big0MzIyMyksYT1uKDI1NDE5KSxjPW4oMjM3MjQpLHM9big2NTY3MiksdT1jKCJyZXBsYWNlIiksbD1SZWdFeHAucHJvdG90eXBlO3Ioe3RhcmdldDoiU3RyaW5nIixwcm90bzohMH0se3JlcGxhY2VBbGw6ZnVuY3Rpb24gdChlLG4pe3ZhciByLGMsZixkLHAsaCx2LGcseT1vKHRoaXMpO2lmKG51bGwhPWUpe2lmKChyPWkoZSkpJiYhflN0cmluZyhvKCJmbGFncyJpbiBsP2UuZmxhZ3M6YS5jYWxsKGUpKSkuaW5kZXhPZigiZyIpKXRocm93IFR5cGVFcnJvcigiYC5yZXBsYWNlQWxsYCBkb2VzIG5vdCBhbGxvdyBub24tZ2xvYmFsIHJlZ2V4ZXMiKTtpZih2b2lkIDAhPT0oYz1lW3VdKSlyZXR1cm4gYy5jYWxsKGUseSxuKTtpZihzJiZyKXJldHVybiBTdHJpbmcoeSkucmVwbGFjZShlLG4pfWlmKGY9U3RyaW5nKHkpLCIiPT09KGQ9U3RyaW5nKGUpKSlyZXR1cm4gdC5jYWxsKGYsLyg/OikvZyxuKTtpZihwPWYuc3BsaXQoZCksImZ1bmN0aW9uIiE9dHlwZW9mIG4pcmV0dXJuIHAuam9pbihTdHJpbmcobikpO2Zvcih2PShoPXBbMF0pLmxlbmd0aCxnPTE7ZzxwLmxlbmd0aDtnKyspaCs9U3RyaW5nKG4oZCx2LGYpKSx2Kz1kLmxlbmd0aCtwW2ddLmxlbmd0aCxoKz1wW2ddO3JldHVybiBofX0pfSw2OTQyOmZ1bmN0aW9uKHQsZSxuKXtuKDkyMjc1KSgiYXN5bmNEaXNwb3NlIil9LDk0MjQ5OmZ1bmN0aW9uKHQsZSxuKXtuKDkyMjc1KSgiZGlzcG9zZSIpfSw1MTM3NDpmdW5jdGlvbih0LGUsbil7big5MjI3NSkoIm9ic2VydmFibGUiKX0sNTM3NzI6ZnVuY3Rpb24odCxlLG4pe24oOTIyNzUpKCJwYXR0ZXJuTWF0Y2giKX0sODYwNzc6ZnVuY3Rpb24odCxlLG4pe24oOTIyNzUpKCJyZXBsYWNlQWxsIil9LDY0ODEzOmZ1bmN0aW9uKHQsZSxuKXsidXNlIHN0cmljdCI7dmFyIHI9bigxNDA0NCksbz1uKDY1NjcyKSxpPW4oMTQ2Nik7cih7dGFyZ2V0OiJXZWFrTWFwIixwcm90bzohMCxyZWFsOiEwLGZvcmNlZDpvfSx7ZGVsZXRlQWxsOmZ1bmN0aW9uKCl7cmV0dXJuIGkuYXBwbHkodGhpcyxhcmd1bWVudHMpfX0pfSw5OTk3OTpmdW5jdGlvbih0LGUsbil7bigxNDA0NCkoe3RhcmdldDoiV2Vha01hcCIsc3RhdDohMH0se2Zyb206bigxMjkwMSl9KX0sMTgyMDU6ZnVuY3Rpb24odCxlLG4pe24oMTQwNDQpKHt0YXJnZXQ6IldlYWtNYXAiLHN0YXQ6ITB9LHtvZjpuKDI1MDI2KX0pfSw4NzU1NTpmdW5jdGlvbih0LGUsbil7InVzZSBzdHJpY3QiO24oMTQwNDQpKHt0YXJnZXQ6IldlYWtNYXAiLHByb3RvOiEwLHJlYWw6ITAsZm9yY2VkOm4oNjU2NzIpfSx7dXBzZXJ0Om4oNDc5MjcpfSl9LDY4OTk5OmZ1bmN0aW9uKHQsZSxuKXsidXNlIHN0cmljdCI7dmFyIHI9bigxNDA0NCksbz1uKDY1NjcyKSxpPW4oOTgxNzkpO3Ioe3RhcmdldDoiV2Vha1NldCIscHJvdG86ITAscmVhbDohMCxmb3JjZWQ6b30se2FkZEFsbDpmdW5jdGlvbigpe3JldHVybiBpLmFwcGx5KHRoaXMsYXJndW1lbnRzKX19KX0sNTM4MjQ6ZnVuY3Rpb24odCxlLG4peyJ1c2Ugc3RyaWN0Ijt2YXIgcj1uKDE0MDQ0KSxvPW4oNjU2NzIpLGk9bigxNDY2KTtyKHt0YXJnZXQ6IldlYWtTZXQiLHByb3RvOiEwLHJlYWw6ITAsZm9yY2VkOm99LHtkZWxldGVBbGw6ZnVuY3Rpb24oKXtyZXR1cm4gaS5hcHBseSh0aGlzLGFyZ3VtZW50cyl9fSl9LDg1ODpmdW5jdGlvbih0LGUsbil7bigxNDA0NCkoe3RhcmdldDoiV2Vha1NldCIsc3RhdDohMH0se2Zyb206bigxMjkwMSl9KX0sNjQ4OTk6ZnVuY3Rpb24odCxlLG4pe24oMTQwNDQpKHt0YXJnZXQ6IldlYWtTZXQiLHN0YXQ6ITB9LHtvZjpuKDI1MDI2KX0pfSw2NzAzOTpmdW5jdGlvbih0LGUsbil7dmFyIHI9big4OTU1OCksbz1uKDQ3MDk0KSxpPW4oMzEzNjgpLGE9big2Njk3MSk7Zm9yKHZhciBjIGluIG8pe3ZhciBzPXJbY10sdT1zJiZzLnByb3RvdHlwZTtpZih1JiZ1LmZvckVhY2ghPT1pKXRyeXthKHUsImZvckVhY2giLGkpfWNhdGNoKHQpe3UuZm9yRWFjaD1pfX19LDc5Nzk5OmZ1bmN0aW9uKHQsZSxuKXt2YXIgcj1uKDg5NTU4KSxvPW4oNDcwOTQpLGk9big1MDA2MyksYT1uKDY2OTcxKSxjPW4oMjM3MjQpLHM9YygiaXRlcmF0b3IiKSx1PWMoInRvU3RyaW5nVGFnIiksbD1pLnZhbHVlcztmb3IodmFyIGYgaW4gbyl7dmFyIGQ9cltmXSxwPWQmJmQucHJvdG90eXBlO2lmKHApe2lmKHBbc10hPT1sKXRyeXthKHAscyxsKX1jYXRjaCh0KXtwW3NdPWx9aWYocFt1XXx8YShwLHUsZiksb1tmXSlmb3IodmFyIGggaW4gaSlpZihwW2hdIT09aVtoXSl0cnl7YShwLGgsaVtoXSl9Y2F0Y2godCl7cFtoXT1pW2hdfX19fSw3NDAxMDpmdW5jdGlvbih0LGUsbil7dmFyIHI9bigxNDA0NCksbz1uKDg5NTU4KSxpPW4oMjE3NDQpO3Ioe2dsb2JhbDohMCxiaW5kOiEwLGVudW1lcmFibGU6ITAsZm9yY2VkOiFvLnNldEltbWVkaWF0ZXx8IW8uY2xlYXJJbW1lZGlhdGV9LHtzZXRJbW1lZGlhdGU6aS5zZXQsY2xlYXJJbW1lZGlhdGU6aS5jbGVhcn0pfSw2NTk3NjpmdW5jdGlvbih0LGUsbil7dmFyIHI9bigxNDA0NCksbz1uKDg5NTU4KSxpPW4oNjU1NTUpLGE9bigyNDU5NCksYz1vLnByb2Nlc3Mscz0icHJvY2VzcyI9PWEoYyk7cih7Z2xvYmFsOiEwLGVudW1lcmFibGU6ITAsbm9UYXJnZXRHZXQ6ITB9LHtxdWV1ZU1pY3JvdGFzazpmdW5jdGlvbih0KXt2YXIgZT1zJiZjLmRvbWFpbjtpKGU/ZS5iaW5kKHQpOnQpfX0pfSw4MTk5NDpmdW5jdGlvbih0LGUsbil7dmFyIHI9bigxNDA0NCksbz1uKDg5NTU4KSxpPW4oMzk0NzYpLGE9W10uc2xpY2UsYz1mdW5jdGlvbih0KXtyZXR1cm4gZnVuY3Rpb24oZSxuKXt2YXIgcj1hcmd1bWVudHMubGVuZ3RoPjIsbz1yP2EuY2FsbChhcmd1bWVudHMsMik6dm9pZCAwO3JldHVybiB0KHI/ZnVuY3Rpb24oKXsoImZ1bmN0aW9uIj09dHlwZW9mIGU/ZTpGdW5jdGlvbihlKSkuYXBwbHkodGhpcyxvKX06ZSxuKX19O3Ioe2dsb2JhbDohMCxiaW5kOiEwLGZvcmNlZDovTVNJRSAuXC4vLnRlc3QoaSl9LHtzZXRUaW1lb3V0OmMoby5zZXRUaW1lb3V0KSxzZXRJbnRlcnZhbDpjKG8uc2V0SW50ZXJ2YWwpfSl9LDU1NTc6ZnVuY3Rpb24odCxlLG4peyJ1c2Ugc3RyaWN0IjtuKDUwMDYzKTt2YXIgcj1uKDE0MDQ0KSxvPW4oNzcwMSksaT1uKDU3NTk3KSxhPW4oOTI5MTMpLGM9bigxOTI2KSxzPW4oNTExMjgpLHU9big3MTIwMSksbD1uKDg5ODI3KSxmPW4oNTkzNzkpLGQ9big3NjI5OCkscD1uKDQ2MTMwKSxoPW4oNTk1OTEpLHY9big4NzU3OSksZz1uKDEwNTkyKSx5PW4oNTA4NjgpLG09bigxNDIwOSksYj1uKDMxMDc0KSx4PW4oNzM4OTApLHc9bigyMzcyNCksRT1vKCJmZXRjaCIpLGo9bygiSGVhZGVycyIpLEM9dygiaXRlcmF0b3IiKSxrPSJVUkxTZWFyY2hQYXJhbXMiLFM9IlVSTFNlYXJjaFBhcmFtc0l0ZXJhdG9yIixPPWwuc2V0LEk9bC5nZXR0ZXJGb3IoayksQT1sLmdldHRlckZvcihTKSxNPS9cKy9nLF89QXJyYXkoNCksVD1mdW5jdGlvbih0KXtyZXR1cm4gX1t0LTFdfHwoX1t0LTFdPVJlZ0V4cCgiKCg/OiVbXFxkYS1mXXsyfSl7Iit0KyJ9KSIsImdpIikpfSxSPWZ1bmN0aW9uKHQpe3RyeXtyZXR1cm4gZGVjb2RlVVJJQ29tcG9uZW50KHQpfWNhdGNoKGUpe3JldHVybiB0fX0sTD1mdW5jdGlvbih0KXt2YXIgZT10LnJlcGxhY2UoTSwiICIpLG49NDt0cnl7cmV0dXJuIGRlY29kZVVSSUNvbXBvbmVudChlKX1jYXRjaCh0KXtmb3IoO247KWU9ZS5yZXBsYWNlKFQobi0tKSxSKTtyZXR1cm4gZX19LFA9L1shJygpfl18JTIwL2csTj17IiEiOiIlMjEiLCInIjoiJTI3IiwiKCI6IiUyOCIsIikiOiIlMjkiLCJ+IjoiJTdFIiwiJTIwIjoiKyJ9LEQ9ZnVuY3Rpb24odCl7cmV0dXJuIE5bdF19LEY9ZnVuY3Rpb24odCl7cmV0dXJuIGVuY29kZVVSSUNvbXBvbmVudCh0KS5yZXBsYWNlKFAsRCl9LFU9ZnVuY3Rpb24odCxlKXtpZihlKWZvcih2YXIgbixyLG89ZS5zcGxpdCgiJiIpLGk9MDtpPG8ubGVuZ3RoOykobj1vW2krK10pLmxlbmd0aCYmKHI9bi5zcGxpdCgiPSIpLHQucHVzaCh7a2V5Okwoci5zaGlmdCgpKSx2YWx1ZTpMKHIuam9pbigiPSIpKX0pKX0sQj1mdW5jdGlvbih0KXt0aGlzLmVudHJpZXMubGVuZ3RoPTAsVSh0aGlzLmVudHJpZXMsdCl9LHo9ZnVuY3Rpb24odCxlKXtpZih0PGUpdGhyb3cgVHlwZUVycm9yKCJOb3QgZW5vdWdoIGFyZ3VtZW50cyIpfSxWPXUoKGZ1bmN0aW9uKHQsZSl7Tyh0aGlzLHt0eXBlOlMsaXRlcmF0b3I6YihJKHQpLmVudHJpZXMpLGtpbmQ6ZX0pfSksIkl0ZXJhdG9yIiwoZnVuY3Rpb24oKXt2YXIgdD1BKHRoaXMpLGU9dC5raW5kLG49dC5pdGVyYXRvci5uZXh0KCkscj1uLnZhbHVlO3JldHVybiBuLmRvbmV8fChuLnZhbHVlPSJrZXlzIj09PWU/ci5rZXk6InZhbHVlcyI9PT1lP3IudmFsdWU6W3Iua2V5LHIudmFsdWVdKSxufSkpLEg9ZnVuY3Rpb24oKXtmKHRoaXMsSCxrKTt2YXIgdCxlLG4scixvLGksYSxjLHMsdT1hcmd1bWVudHMubGVuZ3RoPjA/YXJndW1lbnRzWzBdOnZvaWQgMCxsPXRoaXMscD1bXTtpZihPKGwse3R5cGU6ayxlbnRyaWVzOnAsdXBkYXRlVVJMOmZ1bmN0aW9uKCl7fSx1cGRhdGVTZWFyY2hQYXJhbXM6Qn0pLHZvaWQgMCE9PXUpaWYoZyh1KSlpZigiZnVuY3Rpb24iPT10eXBlb2YodD14KHUpKSlmb3Iobj0oZT10LmNhbGwodSkpLm5leHQ7IShyPW4uY2FsbChlKSkuZG9uZTspe2lmKChhPShpPShvPWIodihyLnZhbHVlKSkpLm5leHQpLmNhbGwobykpLmRvbmV8fChjPWkuY2FsbChvKSkuZG9uZXx8IWkuY2FsbChvKS5kb25lKXRocm93IFR5cGVFcnJvcigiRXhwZWN0ZWQgc2VxdWVuY2Ugd2l0aCBsZW5ndGggMiIpO3AucHVzaCh7a2V5OmEudmFsdWUrIiIsdmFsdWU6Yy52YWx1ZSsiIn0pfWVsc2UgZm9yKHMgaW4gdSlkKHUscykmJnAucHVzaCh7a2V5OnMsdmFsdWU6dVtzXSsiIn0pO2Vsc2UgVShwLCJzdHJpbmciPT10eXBlb2YgdT8iPyI9PT11LmNoYXJBdCgwKT91LnNsaWNlKDEpOnU6dSsiIil9LHE9SC5wcm90b3R5cGU7YyhxLHthcHBlbmQ6ZnVuY3Rpb24odCxlKXt6KGFyZ3VtZW50cy5sZW5ndGgsMik7dmFyIG49SSh0aGlzKTtuLmVudHJpZXMucHVzaCh7a2V5OnQrIiIsdmFsdWU6ZSsiIn0pLG4udXBkYXRlVVJMKCl9LGRlbGV0ZTpmdW5jdGlvbih0KXt6KGFyZ3VtZW50cy5sZW5ndGgsMSk7Zm9yKHZhciBlPUkodGhpcyksbj1lLmVudHJpZXMscj10KyIiLG89MDtvPG4ubGVuZ3RoOyluW29dLmtleT09PXI/bi5zcGxpY2UobywxKTpvKys7ZS51cGRhdGVVUkwoKX0sZ2V0OmZ1bmN0aW9uKHQpe3ooYXJndW1lbnRzLmxlbmd0aCwxKTtmb3IodmFyIGU9SSh0aGlzKS5lbnRyaWVzLG49dCsiIixyPTA7cjxlLmxlbmd0aDtyKyspaWYoZVtyXS5rZXk9PT1uKXJldHVybiBlW3JdLnZhbHVlO3JldHVybiBudWxsfSxnZXRBbGw6ZnVuY3Rpb24odCl7eihhcmd1bWVudHMubGVuZ3RoLDEpO2Zvcih2YXIgZT1JKHRoaXMpLmVudHJpZXMsbj10KyIiLHI9W10sbz0wO288ZS5sZW5ndGg7bysrKWVbb10ua2V5PT09biYmci5wdXNoKGVbb10udmFsdWUpO3JldHVybiByfSxoYXM6ZnVuY3Rpb24odCl7eihhcmd1bWVudHMubGVuZ3RoLDEpO2Zvcih2YXIgZT1JKHRoaXMpLmVudHJpZXMsbj10KyIiLHI9MDtyPGUubGVuZ3RoOylpZihlW3IrK10ua2V5PT09bilyZXR1cm4hMDtyZXR1cm4hMX0sc2V0OmZ1bmN0aW9uKHQsZSl7eihhcmd1bWVudHMubGVuZ3RoLDEpO2Zvcih2YXIgbixyPUkodGhpcyksbz1yLmVudHJpZXMsaT0hMSxhPXQrIiIsYz1lKyIiLHM9MDtzPG8ubGVuZ3RoO3MrKykobj1vW3NdKS5rZXk9PT1hJiYoaT9vLnNwbGljZShzLS0sMSk6KGk9ITAsbi52YWx1ZT1jKSk7aXx8by5wdXNoKHtrZXk6YSx2YWx1ZTpjfSksci51cGRhdGVVUkwoKX0sc29ydDpmdW5jdGlvbigpe3ZhciB0LGUsbixyPUkodGhpcyksbz1yLmVudHJpZXMsaT1vLnNsaWNlKCk7Zm9yKG8ubGVuZ3RoPTAsbj0wO248aS5sZW5ndGg7bisrKXtmb3IodD1pW25dLGU9MDtlPG47ZSsrKWlmKG9bZV0ua2V5PnQua2V5KXtvLnNwbGljZShlLDAsdCk7YnJlYWt9ZT09PW4mJm8ucHVzaCh0KX1yLnVwZGF0ZVVSTCgpfSxmb3JFYWNoOmZ1bmN0aW9uKHQpe2Zvcih2YXIgZSxuPUkodGhpcykuZW50cmllcyxyPXAodCxhcmd1bWVudHMubGVuZ3RoPjE/YXJndW1lbnRzWzFdOnZvaWQgMCwzKSxvPTA7bzxuLmxlbmd0aDspcigoZT1uW28rK10pLnZhbHVlLGUua2V5LHRoaXMpfSxrZXlzOmZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBWKHRoaXMsImtleXMiKX0sdmFsdWVzOmZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBWKHRoaXMsInZhbHVlcyIpfSxlbnRyaWVzOmZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBWKHRoaXMsImVudHJpZXMiKX19LHtlbnVtZXJhYmxlOiEwfSksYShxLEMscS5lbnRyaWVzKSxhKHEsInRvU3RyaW5nIiwoZnVuY3Rpb24oKXtmb3IodmFyIHQsZT1JKHRoaXMpLmVudHJpZXMsbj1bXSxyPTA7cjxlLmxlbmd0aDspdD1lW3IrK10sbi5wdXNoKEYodC5rZXkpKyI9IitGKHQudmFsdWUpKTtyZXR1cm4gbi5qb2luKCImIil9KSx7ZW51bWVyYWJsZTohMH0pLHMoSCxrKSxyKHtnbG9iYWw6ITAsZm9yY2VkOiFpfSx7VVJMU2VhcmNoUGFyYW1zOkh9KSxpfHwiZnVuY3Rpb24iIT10eXBlb2YgRXx8ImZ1bmN0aW9uIiE9dHlwZW9mIGp8fHIoe2dsb2JhbDohMCxlbnVtZXJhYmxlOiEwLGZvcmNlZDohMH0se2ZldGNoOmZ1bmN0aW9uKHQpe3ZhciBlLG4scixvPVt0XTtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD4xJiYoZyhlPWFyZ3VtZW50c1sxXSkmJihuPWUuYm9keSxoKG4pPT09ayYmKChyPWUuaGVhZGVycz9uZXcgaihlLmhlYWRlcnMpOm5ldyBqKS5oYXMoImNvbnRlbnQtdHlwZSIpfHxyLnNldCgiY29udGVudC10eXBlIiwiYXBwbGljYXRpb24veC13d3ctZm9ybS11cmxlbmNvZGVkO2NoYXJzZXQ9VVRGLTgiKSxlPXkoZSx7Ym9keTptKDAsU3RyaW5nKG4pKSxoZWFkZXJzOm0oMCxyKX0pKSksby5wdXNoKGUpKSxFLmFwcGx5KHRoaXMsbyl9fSksdC5leHBvcnRzPXtVUkxTZWFyY2hQYXJhbXM6SCxnZXRTdGF0ZTpJfX0sMTM5MTA6ZnVuY3Rpb24odCxlLG4peyJ1c2Ugc3RyaWN0IjtuKDgyMjAxKTt2YXIgcixvPW4oMTQwNDQpLGk9big2MjU1NiksYT1uKDU3NTk3KSxjPW4oODk1NTgpLHM9big4NjQwMSksdT1uKDkyOTEzKSxsPW4oNTkzNzkpLGY9big3NjI5OCksZD1uKDc4Njg1KSxwPW4oODUxNjYpLGg9big2MDE0MCkuY29kZUF0LHY9big2OTkyNyksZz1uKDUxMTI4KSx5PW4oNTU1NyksbT1uKDg5ODI3KSxiPWMuVVJMLHg9eS5VUkxTZWFyY2hQYXJhbXMsdz15LmdldFN0YXRlLEU9bS5zZXQsaj1tLmdldHRlckZvcigiVVJMIiksQz1NYXRoLmZsb29yLGs9TWF0aC5wb3csUz0iSW52YWxpZCBzY2hlbWUiLE89IkludmFsaWQgaG9zdCIsST0iSW52YWxpZCBwb3J0IixBPS9bQS1aYS16XS8sTT0vW1xkK1wtLkEtWmEtel0vLF89L1xkLyxUPS9eKDB4fDBYKS8sUj0vXlswLTddKyQvLEw9L15cZCskLyxQPS9eW1xkQS1GYS1mXSskLyxOPS9bXHUwMDAwXHUwMDA5XHUwMDBBXHUwMDBEICMlLzo/QFtcXF1dLyxEPS9bXHUwMDAwXHUwMDA5XHUwMDBBXHUwMDBEICMvOj9AW1xcXV0vLEY9L15bXHUwMDAwLVx1MDAxRiBdK3xbXHUwMDAwLVx1MDAxRiBdKyQvZyxVPS9bXHUwMDA5XHUwMDBBXHUwMDBEXS9nLEI9ZnVuY3Rpb24odCxlKXt2YXIgbixyLG87aWYoIlsiPT1lLmNoYXJBdCgwKSl7aWYoIl0iIT1lLmNoYXJBdChlLmxlbmd0aC0xKSlyZXR1cm4gTztpZighKG49VihlLnNsaWNlKDEsLTEpKSkpcmV0dXJuIE87dC5ob3N0PW59ZWxzZSBpZihKKHQpKXtpZihlPXYoZSksTi50ZXN0KGUpKXJldHVybiBPO2lmKG51bGw9PT0obj16KGUpKSlyZXR1cm4gTzt0Lmhvc3Q9bn1lbHNle2lmKEQudGVzdChlKSlyZXR1cm4gTztmb3Iobj0iIixyPXAoZSksbz0wO288ci5sZW5ndGg7bysrKW4rPSQocltvXSxxKTt0Lmhvc3Q9bn19LHo9ZnVuY3Rpb24odCl7dmFyIGUsbixyLG8saSxhLGMscz10LnNwbGl0KCIuIik7aWYocy5sZW5ndGgmJiIiPT1zW3MubGVuZ3RoLTFdJiZzLnBvcCgpLChlPXMubGVuZ3RoKT40KXJldHVybiB0O2ZvcihuPVtdLHI9MDtyPGU7cisrKXtpZigiIj09KG89c1tyXSkpcmV0dXJuIHQ7aWYoaT0xMCxvLmxlbmd0aD4xJiYiMCI9PW8uY2hhckF0KDApJiYoaT1ULnRlc3Qobyk/MTY6OCxvPW8uc2xpY2UoOD09aT8xOjIpKSwiIj09PW8pYT0wO2Vsc2V7aWYoISgxMD09aT9MOjg9PWk/UjpQKS50ZXN0KG8pKXJldHVybiB0O2E9cGFyc2VJbnQobyxpKX1uLnB1c2goYSl9Zm9yKHI9MDtyPGU7cisrKWlmKGE9bltyXSxyPT1lLTEpe2lmKGE+PWsoMjU2LDUtZSkpcmV0dXJuIG51bGx9ZWxzZSBpZihhPjI1NSlyZXR1cm4gbnVsbDtmb3IoYz1uLnBvcCgpLHI9MDtyPG4ubGVuZ3RoO3IrKyljKz1uW3JdKmsoMjU2LDMtcik7cmV0dXJuIGN9LFY9ZnVuY3Rpb24odCl7dmFyIGUsbixyLG8saSxhLGMscz1bMCwwLDAsMCwwLDAsMCwwXSx1PTAsbD1udWxsLGY9MCxkPWZ1bmN0aW9uKCl7cmV0dXJuIHQuY2hhckF0KGYpfTtpZigiOiI9PWQoKSl7aWYoIjoiIT10LmNoYXJBdCgxKSlyZXR1cm47Zis9MixsPSsrdX1mb3IoO2QoKTspe2lmKDg9PXUpcmV0dXJuO2lmKCI6IiE9ZCgpKXtmb3IoZT1uPTA7bjw0JiZQLnRlc3QoZCgpKTspZT0xNiplK3BhcnNlSW50KGQoKSwxNiksZisrLG4rKztpZigiLiI9PWQoKSl7aWYoMD09bilyZXR1cm47aWYoZi09bix1PjYpcmV0dXJuO2ZvcihyPTA7ZCgpOyl7aWYobz1udWxsLHI+MCl7aWYoISgiLiI9PWQoKSYmcjw0KSlyZXR1cm47ZisrfWlmKCFfLnRlc3QoZCgpKSlyZXR1cm47Zm9yKDtfLnRlc3QoZCgpKTspe2lmKGk9cGFyc2VJbnQoZCgpLDEwKSxudWxsPT09bylvPWk7ZWxzZXtpZigwPT1vKXJldHVybjtvPTEwKm8raX1pZihvPjI1NSlyZXR1cm47ZisrfXNbdV09MjU2KnNbdV0rbywyIT0rK3ImJjQhPXJ8fHUrK31pZig0IT1yKXJldHVybjticmVha31pZigiOiI9PWQoKSl7aWYoZisrLCFkKCkpcmV0dXJufWVsc2UgaWYoZCgpKXJldHVybjtzW3UrK109ZX1lbHNle2lmKG51bGwhPT1sKXJldHVybjtmKyssbD0rK3V9fWlmKG51bGwhPT1sKWZvcihhPXUtbCx1PTc7MCE9dSYmYT4wOyljPXNbdV0sc1t1LS1dPXNbbCthLTFdLHNbbCstLWFdPWM7ZWxzZSBpZig4IT11KXJldHVybjtyZXR1cm4gc30sSD1mdW5jdGlvbih0KXt2YXIgZSxuLHIsbztpZigibnVtYmVyIj09dHlwZW9mIHQpe2ZvcihlPVtdLG49MDtuPDQ7bisrKWUudW5zaGlmdCh0JTI1NiksdD1DKHQvMjU2KTtyZXR1cm4gZS5qb2luKCIuIil9aWYoIm9iamVjdCI9PXR5cGVvZiB0KXtmb3IoZT0iIixyPWZ1bmN0aW9uKHQpe2Zvcih2YXIgZT1udWxsLG49MSxyPW51bGwsbz0wLGk9MDtpPDg7aSsrKTAhPT10W2ldPyhvPm4mJihlPXIsbj1vKSxyPW51bGwsbz0wKToobnVsbD09PXImJihyPWkpLCsrbyk7cmV0dXJuIG8+biYmKGU9cixuPW8pLGV9KHQpLG49MDtuPDg7bisrKW8mJjA9PT10W25dfHwobyYmKG89ITEpLHI9PT1uPyhlKz1uPyI6IjoiOjoiLG89ITApOihlKz10W25dLnRvU3RyaW5nKDE2KSxuPDcmJihlKz0iOiIpKSk7cmV0dXJuIlsiK2UrIl0ifXJldHVybiB0fSxxPXt9LFc9ZCh7fSxxLHsiICI6MSwnIic6MSwiPCI6MSwiPiI6MSwiYCI6MX0pLEc9ZCh7fSxXLHsiIyI6MSwiPyI6MSwieyI6MSwifSI6MX0pLFo9ZCh7fSxHLHsiLyI6MSwiOiI6MSwiOyI6MSwiPSI6MSwiQCI6MSwiWyI6MSwiXFwiOjEsIl0iOjEsIl4iOjEsInwiOjF9KSwkPWZ1bmN0aW9uKHQsZSl7dmFyIG49aCh0LDApO3JldHVybiBuPjMyJiZuPDEyNyYmIWYoZSx0KT90OmVuY29kZVVSSUNvbXBvbmVudCh0KX0sWT17ZnRwOjIxLGZpbGU6bnVsbCxodHRwOjgwLGh0dHBzOjQ0Myx3czo4MCx3c3M6NDQzfSxKPWZ1bmN0aW9uKHQpe3JldHVybiBmKFksdC5zY2hlbWUpfSxLPWZ1bmN0aW9uKHQpe3JldHVybiIiIT10LnVzZXJuYW1lfHwiIiE9dC5wYXNzd29yZH0sWD1mdW5jdGlvbih0KXtyZXR1cm4hdC5ob3N0fHx0LmNhbm5vdEJlQUJhc2VVUkx8fCJmaWxlIj09dC5zY2hlbWV9LFE9ZnVuY3Rpb24odCxlKXt2YXIgbjtyZXR1cm4gMj09dC5sZW5ndGgmJkEudGVzdCh0LmNoYXJBdCgwKSkmJigiOiI9PShuPXQuY2hhckF0KDEpKXx8IWUmJiJ8Ij09bil9LHR0PWZ1bmN0aW9uKHQpe3ZhciBlO3JldHVybiB0Lmxlbmd0aD4xJiZRKHQuc2xpY2UoMCwyKSkmJigyPT10Lmxlbmd0aHx8Ii8iPT09KGU9dC5jaGFyQXQoMikpfHwiXFwiPT09ZXx8Ij8iPT09ZXx8IiMiPT09ZSl9LGV0PWZ1bmN0aW9uKHQpe3ZhciBlPXQucGF0aCxuPWUubGVuZ3RoOyFufHwiZmlsZSI9PXQuc2NoZW1lJiYxPT1uJiZRKGVbMF0sITApfHxlLnBvcCgpfSxudD1mdW5jdGlvbih0KXtyZXR1cm4iLiI9PT10fHwiJTJlIj09PXQudG9Mb3dlckNhc2UoKX0scnQ9e30sb3Q9e30saXQ9e30sYXQ9e30sY3Q9e30sc3Q9e30sdXQ9e30sbHQ9e30sZnQ9e30sZHQ9e30scHQ9e30saHQ9e30sdnQ9e30sZ3Q9e30seXQ9e30sbXQ9e30sYnQ9e30seHQ9e30sd3Q9e30sRXQ9e30sanQ9e30sQ3Q9ZnVuY3Rpb24odCxlLG4sbyl7dmFyIGksYSxjLHMsdSxsPW58fHJ0LGQ9MCxoPSIiLHY9ITEsZz0hMSx5PSExO2ZvcihufHwodC5zY2hlbWU9IiIsdC51c2VybmFtZT0iIix0LnBhc3N3b3JkPSIiLHQuaG9zdD1udWxsLHQucG9ydD1udWxsLHQucGF0aD1bXSx0LnF1ZXJ5PW51bGwsdC5mcmFnbWVudD1udWxsLHQuY2Fubm90QmVBQmFzZVVSTD0hMSxlPWUucmVwbGFjZShGLCIiKSksZT1lLnJlcGxhY2UoVSwiIiksaT1wKGUpO2Q8PWkubGVuZ3RoOyl7c3dpdGNoKGE9aVtkXSxsKXtjYXNlIHJ0OmlmKCFhfHwhQS50ZXN0KGEpKXtpZihuKXJldHVybiBTO2w9aXQ7Y29udGludWV9aCs9YS50b0xvd2VyQ2FzZSgpLGw9b3Q7YnJlYWs7Y2FzZSBvdDppZihhJiYoTS50ZXN0KGEpfHwiKyI9PWF8fCItIj09YXx8Ii4iPT1hKSloKz1hLnRvTG93ZXJDYXNlKCk7ZWxzZXtpZigiOiIhPWEpe2lmKG4pcmV0dXJuIFM7aD0iIixsPWl0LGQ9MDtjb250aW51ZX1pZihuJiYoSih0KSE9ZihZLGgpfHwiZmlsZSI9PWgmJihLKHQpfHxudWxsIT09dC5wb3J0KXx8ImZpbGUiPT10LnNjaGVtZSYmIXQuaG9zdCkpcmV0dXJuO2lmKHQuc2NoZW1lPWgsbilyZXR1cm4gdm9pZChKKHQpJiZZW3Quc2NoZW1lXT09dC5wb3J0JiYodC5wb3J0PW51bGwpKTtoPSIiLCJmaWxlIj09dC5zY2hlbWU/bD1ndDpKKHQpJiZvJiZvLnNjaGVtZT09dC5zY2hlbWU/bD1hdDpKKHQpP2w9bHQ6Ii8iPT1pW2QrMV0/KGw9Y3QsZCsrKToodC5jYW5ub3RCZUFCYXNlVVJMPSEwLHQucGF0aC5wdXNoKCIiKSxsPXd0KX1icmVhaztjYXNlIGl0OmlmKCFvfHxvLmNhbm5vdEJlQUJhc2VVUkwmJiIjIiE9YSlyZXR1cm4gUztpZihvLmNhbm5vdEJlQUJhc2VVUkwmJiIjIj09YSl7dC5zY2hlbWU9by5zY2hlbWUsdC5wYXRoPW8ucGF0aC5zbGljZSgpLHQucXVlcnk9by5xdWVyeSx0LmZyYWdtZW50PSIiLHQuY2Fubm90QmVBQmFzZVVSTD0hMCxsPWp0O2JyZWFrfWw9ImZpbGUiPT1vLnNjaGVtZT9ndDpzdDtjb250aW51ZTtjYXNlIGF0OmlmKCIvIiE9YXx8Ii8iIT1pW2QrMV0pe2w9c3Q7Y29udGludWV9bD1mdCxkKys7YnJlYWs7Y2FzZSBjdDppZigiLyI9PWEpe2w9ZHQ7YnJlYWt9bD14dDtjb250aW51ZTtjYXNlIHN0OmlmKHQuc2NoZW1lPW8uc2NoZW1lLGE9PXIpdC51c2VybmFtZT1vLnVzZXJuYW1lLHQucGFzc3dvcmQ9by5wYXNzd29yZCx0Lmhvc3Q9by5ob3N0LHQucG9ydD1vLnBvcnQsdC5wYXRoPW8ucGF0aC5zbGljZSgpLHQucXVlcnk9by5xdWVyeTtlbHNlIGlmKCIvIj09YXx8IlxcIj09YSYmSih0KSlsPXV0O2Vsc2UgaWYoIj8iPT1hKXQudXNlcm5hbWU9by51c2VybmFtZSx0LnBhc3N3b3JkPW8ucGFzc3dvcmQsdC5ob3N0PW8uaG9zdCx0LnBvcnQ9by5wb3J0LHQucGF0aD1vLnBhdGguc2xpY2UoKSx0LnF1ZXJ5PSIiLGw9RXQ7ZWxzZXtpZigiIyIhPWEpe3QudXNlcm5hbWU9by51c2VybmFtZSx0LnBhc3N3b3JkPW8ucGFzc3dvcmQsdC5ob3N0PW8uaG9zdCx0LnBvcnQ9by5wb3J0LHQucGF0aD1vLnBhdGguc2xpY2UoKSx0LnBhdGgucG9wKCksbD14dDtjb250aW51ZX10LnVzZXJuYW1lPW8udXNlcm5hbWUsdC5wYXNzd29yZD1vLnBhc3N3b3JkLHQuaG9zdD1vLmhvc3QsdC5wb3J0PW8ucG9ydCx0LnBhdGg9by5wYXRoLnNsaWNlKCksdC5xdWVyeT1vLnF1ZXJ5LHQuZnJhZ21lbnQ9IiIsbD1qdH1icmVhaztjYXNlIHV0OmlmKCFKKHQpfHwiLyIhPWEmJiJcXCIhPWEpe2lmKCIvIiE9YSl7dC51c2VybmFtZT1vLnVzZXJuYW1lLHQucGFzc3dvcmQ9by5wYXNzd29yZCx0Lmhvc3Q9by5ob3N0LHQucG9ydD1vLnBvcnQsbD14dDtjb250aW51ZX1sPWR0fWVsc2UgbD1mdDticmVhaztjYXNlIGx0OmlmKGw9ZnQsIi8iIT1hfHwiLyIhPWguY2hhckF0KGQrMSkpY29udGludWU7ZCsrO2JyZWFrO2Nhc2UgZnQ6aWYoIi8iIT1hJiYiXFwiIT1hKXtsPWR0O2NvbnRpbnVlfWJyZWFrO2Nhc2UgZHQ6aWYoIkAiPT1hKXt2JiYoaD0iJTQwIitoKSx2PSEwLGM9cChoKTtmb3IodmFyIG09MDttPGMubGVuZ3RoO20rKyl7dmFyIGI9Y1ttXTtpZigiOiIhPWJ8fHkpe3ZhciB4PSQoYixaKTt5P3QucGFzc3dvcmQrPXg6dC51c2VybmFtZSs9eH1lbHNlIHk9ITB9aD0iIn1lbHNlIGlmKGE9PXJ8fCIvIj09YXx8Ij8iPT1hfHwiIyI9PWF8fCJcXCI9PWEmJkoodCkpe2lmKHYmJiIiPT1oKXJldHVybiJJbnZhbGlkIGF1dGhvcml0eSI7ZC09cChoKS5sZW5ndGgrMSxoPSIiLGw9cHR9ZWxzZSBoKz1hO2JyZWFrO2Nhc2UgcHQ6Y2FzZSBodDppZihuJiYiZmlsZSI9PXQuc2NoZW1lKXtsPW10O2NvbnRpbnVlfWlmKCI6IiE9YXx8Zyl7aWYoYT09cnx8Ii8iPT1hfHwiPyI9PWF8fCIjIj09YXx8IlxcIj09YSYmSih0KSl7aWYoSih0KSYmIiI9PWgpcmV0dXJuIE87aWYobiYmIiI9PWgmJihLKHQpfHxudWxsIT09dC5wb3J0KSlyZXR1cm47aWYocz1CKHQsaCkpcmV0dXJuIHM7aWYoaD0iIixsPWJ0LG4pcmV0dXJuO2NvbnRpbnVlfSJbIj09YT9nPSEwOiJdIj09YSYmKGc9ITEpLGgrPWF9ZWxzZXtpZigiIj09aClyZXR1cm4gTztpZihzPUIodCxoKSlyZXR1cm4gcztpZihoPSIiLGw9dnQsbj09aHQpcmV0dXJufWJyZWFrO2Nhc2UgdnQ6aWYoIV8udGVzdChhKSl7aWYoYT09cnx8Ii8iPT1hfHwiPyI9PWF8fCIjIj09YXx8IlxcIj09YSYmSih0KXx8bil7aWYoIiIhPWgpe3ZhciB3PXBhcnNlSW50KGgsMTApO2lmKHc+NjU1MzUpcmV0dXJuIEk7dC5wb3J0PUoodCkmJnc9PT1ZW3Quc2NoZW1lXT9udWxsOncsaD0iIn1pZihuKXJldHVybjtsPWJ0O2NvbnRpbnVlfXJldHVybiBJfWgrPWE7YnJlYWs7Y2FzZSBndDppZih0LnNjaGVtZT0iZmlsZSIsIi8iPT1hfHwiXFwiPT1hKWw9eXQ7ZWxzZXtpZighb3x8ImZpbGUiIT1vLnNjaGVtZSl7bD14dDtjb250aW51ZX1pZihhPT1yKXQuaG9zdD1vLmhvc3QsdC5wYXRoPW8ucGF0aC5zbGljZSgpLHQucXVlcnk9by5xdWVyeTtlbHNlIGlmKCI/Ij09YSl0Lmhvc3Q9by5ob3N0LHQucGF0aD1vLnBhdGguc2xpY2UoKSx0LnF1ZXJ5PSIiLGw9RXQ7ZWxzZXtpZigiIyIhPWEpe3R0KGkuc2xpY2UoZCkuam9pbigiIikpfHwodC5ob3N0PW8uaG9zdCx0LnBhdGg9by5wYXRoLnNsaWNlKCksZXQodCkpLGw9eHQ7Y29udGludWV9dC5ob3N0PW8uaG9zdCx0LnBhdGg9by5wYXRoLnNsaWNlKCksdC5xdWVyeT1vLnF1ZXJ5LHQuZnJhZ21lbnQ9IiIsbD1qdH19YnJlYWs7Y2FzZSB5dDppZigiLyI9PWF8fCJcXCI9PWEpe2w9bXQ7YnJlYWt9byYmImZpbGUiPT1vLnNjaGVtZSYmIXR0KGkuc2xpY2UoZCkuam9pbigiIikpJiYoUShvLnBhdGhbMF0sITApP3QucGF0aC5wdXNoKG8ucGF0aFswXSk6dC5ob3N0PW8uaG9zdCksbD14dDtjb250aW51ZTtjYXNlIG10OmlmKGE9PXJ8fCIvIj09YXx8IlxcIj09YXx8Ij8iPT1hfHwiIyI9PWEpe2lmKCFuJiZRKGgpKWw9eHQ7ZWxzZSBpZigiIj09aCl7aWYodC5ob3N0PSIiLG4pcmV0dXJuO2w9YnR9ZWxzZXtpZihzPUIodCxoKSlyZXR1cm4gcztpZigibG9jYWxob3N0Ij09dC5ob3N0JiYodC5ob3N0PSIiKSxuKXJldHVybjtoPSIiLGw9YnR9Y29udGludWV9aCs9YTticmVhaztjYXNlIGJ0OmlmKEoodCkpe2lmKGw9eHQsIi8iIT1hJiYiXFwiIT1hKWNvbnRpbnVlfWVsc2UgaWYobnx8Ij8iIT1hKWlmKG58fCIjIiE9YSl7aWYoYSE9ciYmKGw9eHQsIi8iIT1hKSljb250aW51ZX1lbHNlIHQuZnJhZ21lbnQ9IiIsbD1qdDtlbHNlIHQucXVlcnk9IiIsbD1FdDticmVhaztjYXNlIHh0OmlmKGE9PXJ8fCIvIj09YXx8IlxcIj09YSYmSih0KXx8IW4mJigiPyI9PWF8fCIjIj09YSkpe2lmKCIuLiI9PT0odT0odT1oKS50b0xvd2VyQ2FzZSgpKXx8IiUyZS4iPT09dXx8Ii4lMmUiPT09dXx8IiUyZSUyZSI9PT11PyhldCh0KSwiLyI9PWF8fCJcXCI9PWEmJkoodCl8fHQucGF0aC5wdXNoKCIiKSk6bnQoaCk/Ii8iPT1hfHwiXFwiPT1hJiZKKHQpfHx0LnBhdGgucHVzaCgiIik6KCJmaWxlIj09dC5zY2hlbWUmJiF0LnBhdGgubGVuZ3RoJiZRKGgpJiYodC5ob3N0JiYodC5ob3N0PSIiKSxoPWguY2hhckF0KDApKyI6IiksdC5wYXRoLnB1c2goaCkpLGg9IiIsImZpbGUiPT10LnNjaGVtZSYmKGE9PXJ8fCI/Ij09YXx8IiMiPT1hKSlmb3IoO3QucGF0aC5sZW5ndGg+MSYmIiI9PT10LnBhdGhbMF07KXQucGF0aC5zaGlmdCgpOyI/Ij09YT8odC5xdWVyeT0iIixsPUV0KToiIyI9PWEmJih0LmZyYWdtZW50PSIiLGw9anQpfWVsc2UgaCs9JChhLEcpO2JyZWFrO2Nhc2Ugd3Q6Ij8iPT1hPyh0LnF1ZXJ5PSIiLGw9RXQpOiIjIj09YT8odC5mcmFnbWVudD0iIixsPWp0KTphIT1yJiYodC5wYXRoWzBdKz0kKGEscSkpO2JyZWFrO2Nhc2UgRXQ6bnx8IiMiIT1hP2EhPXImJigiJyI9PWEmJkoodCk/dC5xdWVyeSs9IiUyNyI6dC5xdWVyeSs9IiMiPT1hPyIlMjMiOiQoYSxxKSk6KHQuZnJhZ21lbnQ9IiIsbD1qdCk7YnJlYWs7Y2FzZSBqdDphIT1yJiYodC5mcmFnbWVudCs9JChhLFcpKX1kKyt9fSxrdD1mdW5jdGlvbih0KXt2YXIgZSxuLHI9bCh0aGlzLGt0LCJVUkwiKSxvPWFyZ3VtZW50cy5sZW5ndGg+MT9hcmd1bWVudHNbMV06dm9pZCAwLGE9U3RyaW5nKHQpLGM9RShyLHt0eXBlOiJVUkwifSk7aWYodm9pZCAwIT09bylpZihvIGluc3RhbmNlb2Yga3QpZT1qKG8pO2Vsc2UgaWYobj1DdChlPXt9LFN0cmluZyhvKSkpdGhyb3cgVHlwZUVycm9yKG4pO2lmKG49Q3QoYyxhLG51bGwsZSkpdGhyb3cgVHlwZUVycm9yKG4pO3ZhciBzPWMuc2VhcmNoUGFyYW1zPW5ldyB4LHU9dyhzKTt1LnVwZGF0ZVNlYXJjaFBhcmFtcyhjLnF1ZXJ5KSx1LnVwZGF0ZVVSTD1mdW5jdGlvbigpe2MucXVlcnk9U3RyaW5nKHMpfHxudWxsfSxpfHwoci5ocmVmPU90LmNhbGwociksci5vcmlnaW49SXQuY2FsbChyKSxyLnByb3RvY29sPUF0LmNhbGwociksci51c2VybmFtZT1NdC5jYWxsKHIpLHIucGFzc3dvcmQ9X3QuY2FsbChyKSxyLmhvc3Q9VHQuY2FsbChyKSxyLmhvc3RuYW1lPVJ0LmNhbGwociksci5wb3J0PUx0LmNhbGwociksci5wYXRobmFtZT1QdC5jYWxsKHIpLHIuc2VhcmNoPU50LmNhbGwociksci5zZWFyY2hQYXJhbXM9RHQuY2FsbChyKSxyLmhhc2g9RnQuY2FsbChyKSl9LFN0PWt0LnByb3RvdHlwZSxPdD1mdW5jdGlvbigpe3ZhciB0PWoodGhpcyksZT10LnNjaGVtZSxuPXQudXNlcm5hbWUscj10LnBhc3N3b3JkLG89dC5ob3N0LGk9dC5wb3J0LGE9dC5wYXRoLGM9dC5xdWVyeSxzPXQuZnJhZ21lbnQsdT1lKyI6IjtyZXR1cm4gbnVsbCE9PW8/KHUrPSIvLyIsSyh0KSYmKHUrPW4rKHI/IjoiK3I6IiIpKyJAIiksdSs9SChvKSxudWxsIT09aSYmKHUrPSI6IitpKSk6ImZpbGUiPT1lJiYodSs9Ii8vIiksdSs9dC5jYW5ub3RCZUFCYXNlVVJMP2FbMF06YS5sZW5ndGg/Ii8iK2Euam9pbigiLyIpOiIiLG51bGwhPT1jJiYodSs9Ij8iK2MpLG51bGwhPT1zJiYodSs9IiMiK3MpLHV9LEl0PWZ1bmN0aW9uKCl7dmFyIHQ9aih0aGlzKSxlPXQuc2NoZW1lLG49dC5wb3J0O2lmKCJibG9iIj09ZSl0cnl7cmV0dXJuIG5ldyBVUkwoZS5wYXRoWzBdKS5vcmlnaW59Y2F0Y2godCl7cmV0dXJuIm51bGwifXJldHVybiJmaWxlIiE9ZSYmSih0KT9lKyI6Ly8iK0godC5ob3N0KSsobnVsbCE9PW4/IjoiK246IiIpOiJudWxsIn0sQXQ9ZnVuY3Rpb24oKXtyZXR1cm4gaih0aGlzKS5zY2hlbWUrIjoifSxNdD1mdW5jdGlvbigpe3JldHVybiBqKHRoaXMpLnVzZXJuYW1lfSxfdD1mdW5jdGlvbigpe3JldHVybiBqKHRoaXMpLnBhc3N3b3JkfSxUdD1mdW5jdGlvbigpe3ZhciB0PWoodGhpcyksZT10Lmhvc3Qsbj10LnBvcnQ7cmV0dXJuIG51bGw9PT1lPyIiOm51bGw9PT1uP0goZSk6SChlKSsiOiIrbn0sUnQ9ZnVuY3Rpb24oKXt2YXIgdD1qKHRoaXMpLmhvc3Q7cmV0dXJuIG51bGw9PT10PyIiOkgodCl9LEx0PWZ1bmN0aW9uKCl7dmFyIHQ9aih0aGlzKS5wb3J0O3JldHVybiBudWxsPT09dD8iIjpTdHJpbmcodCl9LFB0PWZ1bmN0aW9uKCl7dmFyIHQ9aih0aGlzKSxlPXQucGF0aDtyZXR1cm4gdC5jYW5ub3RCZUFCYXNlVVJMP2VbMF06ZS5sZW5ndGg/Ii8iK2Uuam9pbigiLyIpOiIifSxOdD1mdW5jdGlvbigpe3ZhciB0PWoodGhpcykucXVlcnk7cmV0dXJuIHQ/Ij8iK3Q6IiJ9LER0PWZ1bmN0aW9uKCl7cmV0dXJuIGoodGhpcykuc2VhcmNoUGFyYW1zfSxGdD1mdW5jdGlvbigpe3ZhciB0PWoodGhpcykuZnJhZ21lbnQ7cmV0dXJuIHQ/IiMiK3Q6IiJ9LFV0PWZ1bmN0aW9uKHQsZSl7cmV0dXJue2dldDp0LHNldDplLGNvbmZpZ3VyYWJsZTohMCxlbnVtZXJhYmxlOiEwfX07aWYoaSYmcyhTdCx7aHJlZjpVdChPdCwoZnVuY3Rpb24odCl7dmFyIGU9aih0aGlzKSxuPVN0cmluZyh0KSxyPUN0KGUsbik7aWYocil0aHJvdyBUeXBlRXJyb3Iocik7dyhlLnNlYXJjaFBhcmFtcykudXBkYXRlU2VhcmNoUGFyYW1zKGUucXVlcnkpfSkpLG9yaWdpbjpVdChJdCkscHJvdG9jb2w6VXQoQXQsKGZ1bmN0aW9uKHQpe3ZhciBlPWoodGhpcyk7Q3QoZSxTdHJpbmcodCkrIjoiLHJ0KX0pKSx1c2VybmFtZTpVdChNdCwoZnVuY3Rpb24odCl7dmFyIGU9aih0aGlzKSxuPXAoU3RyaW5nKHQpKTtpZighWChlKSl7ZS51c2VybmFtZT0iIjtmb3IodmFyIHI9MDtyPG4ubGVuZ3RoO3IrKyllLnVzZXJuYW1lKz0kKG5bcl0sWil9fSkpLHBhc3N3b3JkOlV0KF90LChmdW5jdGlvbih0KXt2YXIgZT1qKHRoaXMpLG49cChTdHJpbmcodCkpO2lmKCFYKGUpKXtlLnBhc3N3b3JkPSIiO2Zvcih2YXIgcj0wO3I8bi5sZW5ndGg7cisrKWUucGFzc3dvcmQrPSQobltyXSxaKX19KSksaG9zdDpVdChUdCwoZnVuY3Rpb24odCl7dmFyIGU9aih0aGlzKTtlLmNhbm5vdEJlQUJhc2VVUkx8fEN0KGUsU3RyaW5nKHQpLHB0KX0pKSxob3N0bmFtZTpVdChSdCwoZnVuY3Rpb24odCl7dmFyIGU9aih0aGlzKTtlLmNhbm5vdEJlQUJhc2VVUkx8fEN0KGUsU3RyaW5nKHQpLGh0KX0pKSxwb3J0OlV0KEx0LChmdW5jdGlvbih0KXt2YXIgZT1qKHRoaXMpO1goZSl8fCgiIj09KHQ9U3RyaW5nKHQpKT9lLnBvcnQ9bnVsbDpDdChlLHQsdnQpKX0pKSxwYXRobmFtZTpVdChQdCwoZnVuY3Rpb24odCl7dmFyIGU9aih0aGlzKTtlLmNhbm5vdEJlQUJhc2VVUkx8fChlLnBhdGg9W10sQ3QoZSx0KyIiLGJ0KSl9KSksc2VhcmNoOlV0KE50LChmdW5jdGlvbih0KXt2YXIgZT1qKHRoaXMpOyIiPT0odD1TdHJpbmcodCkpP2UucXVlcnk9bnVsbDooIj8iPT10LmNoYXJBdCgwKSYmKHQ9dC5zbGljZSgxKSksZS5xdWVyeT0iIixDdChlLHQsRXQpKSx3KGUuc2VhcmNoUGFyYW1zKS51cGRhdGVTZWFyY2hQYXJhbXMoZS5xdWVyeSl9KSksc2VhcmNoUGFyYW1zOlV0KER0KSxoYXNoOlV0KEZ0LChmdW5jdGlvbih0KXt2YXIgZT1qKHRoaXMpOyIiIT0odD1TdHJpbmcodCkpPygiIyI9PXQuY2hhckF0KDApJiYodD10LnNsaWNlKDEpKSxlLmZyYWdtZW50PSIiLEN0KGUsdCxqdCkpOmUuZnJhZ21lbnQ9bnVsbH0pKX0pLHUoU3QsInRvSlNPTiIsKGZ1bmN0aW9uKCl7cmV0dXJuIE90LmNhbGwodGhpcyl9KSx7ZW51bWVyYWJsZTohMH0pLHUoU3QsInRvU3RyaW5nIiwoZnVuY3Rpb24oKXtyZXR1cm4gT3QuY2FsbCh0aGlzKX0pLHtlbnVtZXJhYmxlOiEwfSksYil7dmFyIEJ0PWIuY3JlYXRlT2JqZWN0VVJMLHp0PWIucmV2b2tlT2JqZWN0VVJMO0J0JiZ1KGt0LCJjcmVhdGVPYmplY3RVUkwiLChmdW5jdGlvbih0KXtyZXR1cm4gQnQuYXBwbHkoYixhcmd1bWVudHMpfSkpLHp0JiZ1KGt0LCJyZXZva2VPYmplY3RVUkwiLChmdW5jdGlvbih0KXtyZXR1cm4genQuYXBwbHkoYixhcmd1bWVudHMpfSkpfWcoa3QsIlVSTCIpLG8oe2dsb2JhbDohMCxmb3JjZWQ6IWEsc2hhbTohaX0se1VSTDprdH0pfSw5ODQ6ZnVuY3Rpb24odCxlLG4peyJ1c2Ugc3RyaWN0IjtuKDE0MDQ0KSh7dGFyZ2V0OiJVUkwiLHByb3RvOiEwLGVudW1lcmFibGU6ITB9LHt0b0pTT046ZnVuY3Rpb24oKXtyZXR1cm4gVVJMLnByb3RvdHlwZS50b1N0cmluZy5jYWxsKHRoaXMpfX0pfSwzNjQ2NzpmdW5jdGlvbih0LGUsbil7bigxNDA4Nil9LDY2NTU0OmZ1bmN0aW9uKHQsZSxuKXtuKDQ5MzApLG4oNjM2NCl9LDkzMjcwOmZ1bmN0aW9uKHQsZSxuKXtuKDUzNTEzKSxuKDk5MjU1KSxuKDQ4NDQpLG4oMzU1NCksbigxODg0NCksbigzNTY1Niksbig0OTA1MCksbig5Mzg0Myksbig2NjIyNCksbig3MTcwMCksbig2OTUyOSksbigyNzczNCksbig3NzM2OSksbig2OTg0Miksbig5NzkyOCksbig5MzkpLG4oNjE0NjcpLG4oMTYxMjcpLG4oNTM1ODkpLG4oODEwNDIpLG4oMTY3NTcpLG4oMTEwNzQpLG4oMzM1MzkpLG4oMjQxMDMpLG4oNjQ4MTMpLG4oNjg5OTkpLG4oNTM4MjQpfSw4OTc0MDpmdW5jdGlvbih0LGUsbil7bigzODc5MiksbigxOTkwKSxuKDk3Mjg0KSxuKDI0NTk4KSxuKDk5OTc5KSxuKDE4MjA1KSxuKDg1OCksbig2NDg5OSl9LDY4MDAxOmZ1bmN0aW9uKHQsZSxuKXtuKDMwNjEzKSxuKDY4NDA2KSxuKDQ5NzkpLG4oNDQ2NDYpfSwyODY5OTpmdW5jdGlvbih0LGUsbil7big5OTYyOCk7dmFyIHI9big4OTU1OCk7dC5leHBvcnRzPXJ9LDE1NjI0OmZ1bmN0aW9uKHQsZSxuKXtuKDU3MzYwKX0sODEyMTM6ZnVuY3Rpb24odCxlLG4pe24oNjEyOTgpLG4oNDcwMDQpLG4oNjc0NjIpLG4oOTA2NyksbigyMDEyNCksbigyMTM3MSksbigzODk4NCksbig2OTIzNyksbigyNjQ5Nyksbig1MzE2OCksbig3Mzk0OSksbig4ODIxMSksbig3Mzc2MSksbig0MjE5Niksbig0MzMzMiksbig5MjYwMSksbigyMDQ3NCksbig1NDU1Niksbig0MDYzOCksbig5NjY1OSksbigxNDY4OCksbig3Mzc4KSxuKDI3NDI4KSxuKDMzNDM2KSxuKDg0Mzg4KSxuKDU5NjIzKSxuKDMyODUzKSxuKDY3MDcyKX0sNjI2Nzc6ZnVuY3Rpb24odCxlLG4pe24oMzY1NzEpLG4oNDMwODYpfSwzNzYxMzpmdW5jdGlvbih0LGUsbil7big0MzI5MCksbigxNDY4Miksbig4NzU1NSl9LDE0NzE1OmZ1bmN0aW9uKHQsZSxuKXtuKDcwMjI1KSxuKDIzOTkpLG4oMTY4MDkpLG4oNjcxNDEpLG4oOTA3NjkpLG4oNTc4OTEpLG4oMTU3MjIpfSwzNjY4NjpmdW5jdGlvbih0LGUsbil7big3NzkwNyl9LDY3NzkzOmZ1bmN0aW9uKHQsZSxuKXtuKDc1NjQ3KX0sOTQ3NzpmdW5jdGlvbih0LGUsbil7big4NDMwOSksbig3Mjk2Myksbig1NjM1OSl9LDcyMzU0OmZ1bmN0aW9uKHQsZSxuKXtuKDIwMjM0KSxuKDUxMzc0KX0sNzQ2Nzk6ZnVuY3Rpb24odCxlLG4pe24oNTM3NzIpfSw5NDc5OmZ1bmN0aW9uKHQsZSxuKXtuKDI3NzUpfSw4NTY1OTpmdW5jdGlvbih0LGUsbil7big5Njc1MSksbig3MzIyMCl9LDU0OTg2OmZ1bmN0aW9uKHQsZSxuKXtuKDExMDcxKX0sMTg4MTpmdW5jdGlvbih0LGUsbil7big0OTY0MCksbig3NDk2Myksbig2OTQ1OSksbig0OTE1NSksbigyNjg5Niksbig4NzQ3NCksbig5NzQzMyksbig3MTA4KSxuKDIzNjMxKX0sNTc2MDM6ZnVuY3Rpb24odCxlLG4pe24oMTc2NSl9LDgxNTQ4OmZ1bmN0aW9uKHQsZSxuKXtuKDk4MzUwKSxuKDQxNzE4KSxuKDU3MzcxKSxuKDg5MjMwKSxuKDMyMzAzKSxuKDYyOTEpLG4oNjYxODEpfSwyMzEwMjpmdW5jdGlvbih0LGUsbil7big3MzQ2MCl9LDQ0MTUzOmZ1bmN0aW9uKHQsZSxuKXtuKDMyMDYyKX0sNzM5MjpmdW5jdGlvbih0LGUsbil7big3NDUyNSl9LDc3Nzk6ZnVuY3Rpb24odCxlLG4pe24oNjQwMjYpLG4oODYwNzcpfSw2MDgyNjpmdW5jdGlvbih0LGUsbil7bigxMzkxMCksbig5ODQpLG4oNTU1Nyl9LDU1OTMzOmZ1bmN0aW9uKHQsZSxuKXtuKDY5NDIpLG4oOTQyNDkpfSw4NzYwMjpmdW5jdGlvbih0LGUsbil7big2ODAwMSksbigyMzEwMiksbig2MDgyNik7dmFyIHI9big5NTk2OCk7dC5leHBvcnRzPXJ9LDk1OTY4OmZ1bmN0aW9uKHQsZSxuKXtuKDY2NTU0KSxuKDkzMjcwKSxuKDg5NzQwKSxuKDYyNjc3KSxuKDE0NzE1KSxuKDM2Njg2KSxuKDY3NzkzKSxuKDk0NzcpLG4oNzIzNTQpLG4oNzQ2NzkpLG4oNTQ5ODYpLG4oNTc2MDMpLG4oNDQxNTMpO3ZhciByPW4oNDc5NzIpO3QuZXhwb3J0cz1yfSw0Nzk3MjpmdW5jdGlvbih0LGUsbil7bigzNjQ2Nyksbig4MTIxMyksbigzNzYxMyksbig4MTU0OCksbig1NTkzMyk7dmFyIHI9big1OTAxMSk7dC5leHBvcnRzPXJ9LDU5MDExOmZ1bmN0aW9uKHQsZSxuKXtuKDg1NjU5KSxuKDc3NzkpO3ZhciByPW4oNjg2ODUpO3QuZXhwb3J0cz1yfSw2ODY4NTpmdW5jdGlvbih0LGUsbil7bigyODY5OSksbig5NDc5KSxuKDczOTIpO3ZhciByPW4oNTYyMzgpO3QuZXhwb3J0cz1yfSw1NzM2MDpmdW5jdGlvbih0LGUsbil7dmFyIHI9big1MzMzNSk7dC5leHBvcnRzPXJ9LDUzMzM1OmZ1bmN0aW9uKHQsZSxuKXtuKDE4ODEpO3ZhciByPW4oODc2MDIpO3QuZXhwb3J0cz1yfSw5MjQwNDpmdW5jdGlvbih0LGUsbil7big2NzAzOSksbig3OTc5OSksbig3NDAxMCksbig2NTk3Niksbig4MTk5NCksbigxMzkxMCksbig5ODQpLG4oNTU1Nyk7dmFyIHI9big1NjIzOCk7dC5leHBvcnRzPXJ9LDE4OTg2OmZ1bmN0aW9uKHQpeyJ1c2Ugc3RyaWN0Ijt0LmV4cG9ydHM9ZnVuY3Rpb24odCl7dmFyIGU9W107cmV0dXJuIGUudG9TdHJpbmc9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5tYXAoKGZ1bmN0aW9uKGUpe3ZhciBuPWZ1bmN0aW9uKHQsZSl7dmFyIG49dFsxXXx8IiIscj10WzNdO2lmKCFyKXJldHVybiBuO2lmKGUmJiJmdW5jdGlvbiI9PXR5cGVvZiBidG9hKXt2YXIgbz0oYT1yLGM9YnRvYSh1bmVzY2FwZShlbmNvZGVVUklDb21wb25lbnQoSlNPTi5zdHJpbmdpZnkoYSkpKSkscz0ic291cmNlTWFwcGluZ1VSTD1kYXRhOmFwcGxpY2F0aW9uL2pzb247Y2hhcnNldD11dGYtODtiYXNlNjQsIi5jb25jYXQoYyksIi8qIyAiLmNvbmNhdChzLCIgKi8iKSksaT1yLnNvdXJjZXMubWFwKChmdW5jdGlvbih0KXtyZXR1cm4iLyojIHNvdXJjZVVSTD0iLmNvbmNhdChyLnNvdXJjZVJvb3QpLmNvbmNhdCh0LCIgKi8iKX0pKTtyZXR1cm5bbl0uY29uY2F0KGkpLmNvbmNhdChbb10pLmpvaW4oIlxuIil9dmFyIGEsYyxzO3JldHVybltuXS5qb2luKCJcbiIpfShlLHQpO3JldHVybiBlWzJdPyJAbWVkaWEgIi5jb25jYXQoZVsyXSwiIHsiKS5jb25jYXQobiwifSIpOm59KSkuam9pbigiIil9LGUuaT1mdW5jdGlvbih0LG4peyJzdHJpbmciPT10eXBlb2YgdCYmKHQ9W1tudWxsLHQsIiJdXSk7Zm9yKHZhciByPTA7cjx0Lmxlbmd0aDtyKyspe3ZhciBvPVtdLmNvbmNhdCh0W3JdKTtuJiYob1syXT9vWzJdPSIiLmNvbmNhdChuLCIgYW5kICIpLmNvbmNhdChvWzJdKTpvWzJdPW4pLGUucHVzaChvKX19LGV9fSw0NjY3OTpmdW5jdGlvbih0KXt2YXIgZT1mdW5jdGlvbih0KXsidXNlIHN0cmljdCI7dmFyIGUsbj1PYmplY3QucHJvdG90eXBlLHI9bi5oYXNPd25Qcm9wZXJ0eSxvPSJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2w/U3ltYm9sOnt9LGk9by5pdGVyYXRvcnx8IkBAaXRlcmF0b3IiLGE9by5hc3luY0l0ZXJhdG9yfHwiQEBhc3luY0l0ZXJhdG9yIixjPW8udG9TdHJpbmdUYWd8fCJAQHRvU3RyaW5nVGFnIjtmdW5jdGlvbiBzKHQsZSxuKXtyZXR1cm4gT2JqZWN0LmRlZmluZVByb3BlcnR5KHQsZSx7dmFsdWU6bixlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMH0pLHRbZV19dHJ5e3Moe30sIiIpfWNhdGNoKHQpe3M9ZnVuY3Rpb24odCxlLG4pe3JldHVybiB0W2VdPW59fWZ1bmN0aW9uIHUodCxlLG4scil7dmFyIG89ZSYmZS5wcm90b3R5cGUgaW5zdGFuY2VvZiBnP2U6ZyxpPU9iamVjdC5jcmVhdGUoby5wcm90b3R5cGUpLGE9bmV3IEkocnx8W10pO3JldHVybiBpLl9pbnZva2U9ZnVuY3Rpb24odCxlLG4pe3ZhciByPWY7cmV0dXJuIGZ1bmN0aW9uKG8saSl7aWYocj09PXApdGhyb3cgbmV3IEVycm9yKCJHZW5lcmF0b3IgaXMgYWxyZWFkeSBydW5uaW5nIik7aWYocj09PWgpe2lmKCJ0aHJvdyI9PT1vKXRocm93IGk7cmV0dXJuIE0oKX1mb3Iobi5tZXRob2Q9byxuLmFyZz1pOzspe3ZhciBhPW4uZGVsZWdhdGU7aWYoYSl7dmFyIGM9ayhhLG4pO2lmKGMpe2lmKGM9PT12KWNvbnRpbnVlO3JldHVybiBjfX1pZigibmV4dCI9PT1uLm1ldGhvZCluLnNlbnQ9bi5fc2VudD1uLmFyZztlbHNlIGlmKCJ0aHJvdyI9PT1uLm1ldGhvZCl7aWYocj09PWYpdGhyb3cgcj1oLG4uYXJnO24uZGlzcGF0Y2hFeGNlcHRpb24obi5hcmcpfWVsc2UicmV0dXJuIj09PW4ubWV0aG9kJiZuLmFicnVwdCgicmV0dXJuIixuLmFyZyk7cj1wO3ZhciBzPWwodCxlLG4pO2lmKCJub3JtYWwiPT09cy50eXBlKXtpZihyPW4uZG9uZT9oOmQscy5hcmc9PT12KWNvbnRpbnVlO3JldHVybnt2YWx1ZTpzLmFyZyxkb25lOm4uZG9uZX19InRocm93Ij09PXMudHlwZSYmKHI9aCxuLm1ldGhvZD0idGhyb3ciLG4uYXJnPXMuYXJnKX19fSh0LG4sYSksaX1mdW5jdGlvbiBsKHQsZSxuKXt0cnl7cmV0dXJue3R5cGU6Im5vcm1hbCIsYXJnOnQuY2FsbChlLG4pfX1jYXRjaCh0KXtyZXR1cm57dHlwZToidGhyb3ciLGFyZzp0fX19dC53cmFwPXU7dmFyIGY9InN1c3BlbmRlZFN0YXJ0IixkPSJzdXNwZW5kZWRZaWVsZCIscD0iZXhlY3V0aW5nIixoPSJjb21wbGV0ZWQiLHY9e307ZnVuY3Rpb24gZygpe31mdW5jdGlvbiB5KCl7fWZ1bmN0aW9uIG0oKXt9dmFyIGI9e307cyhiLGksKGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXN9KSk7dmFyIHg9T2JqZWN0LmdldFByb3RvdHlwZU9mLHc9eCYmeCh4KEEoW10pKSk7dyYmdyE9PW4mJnIuY2FsbCh3LGkpJiYoYj13KTt2YXIgRT1tLnByb3RvdHlwZT1nLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKGIpO2Z1bmN0aW9uIGoodCl7WyJuZXh0IiwidGhyb3ciLCJyZXR1cm4iXS5mb3JFYWNoKChmdW5jdGlvbihlKXtzKHQsZSwoZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuX2ludm9rZShlLHQpfSkpfSkpfWZ1bmN0aW9uIEModCxlKXtmdW5jdGlvbiBuKG8saSxhLGMpe3ZhciBzPWwodFtvXSx0LGkpO2lmKCJ0aHJvdyIhPT1zLnR5cGUpe3ZhciB1PXMuYXJnLGY9dS52YWx1ZTtyZXR1cm4gZiYmIm9iamVjdCI9PXR5cGVvZiBmJiZyLmNhbGwoZiwiX19hd2FpdCIpP2UucmVzb2x2ZShmLl9fYXdhaXQpLnRoZW4oKGZ1bmN0aW9uKHQpe24oIm5leHQiLHQsYSxjKX0pLChmdW5jdGlvbih0KXtuKCJ0aHJvdyIsdCxhLGMpfSkpOmUucmVzb2x2ZShmKS50aGVuKChmdW5jdGlvbih0KXt1LnZhbHVlPXQsYSh1KX0pLChmdW5jdGlvbih0KXtyZXR1cm4gbigidGhyb3ciLHQsYSxjKX0pKX1jKHMuYXJnKX12YXIgbzt0aGlzLl9pbnZva2U9ZnVuY3Rpb24odCxyKXtmdW5jdGlvbiBpKCl7cmV0dXJuIG5ldyBlKChmdW5jdGlvbihlLG8pe24odCxyLGUsbyl9KSl9cmV0dXJuIG89bz9vLnRoZW4oaSxpKTppKCl9fWZ1bmN0aW9uIGsodCxuKXt2YXIgcj10Lml0ZXJhdG9yW24ubWV0aG9kXTtpZihyPT09ZSl7aWYobi5kZWxlZ2F0ZT1udWxsLCJ0aHJvdyI9PT1uLm1ldGhvZCl7aWYodC5pdGVyYXRvci5yZXR1cm4mJihuLm1ldGhvZD0icmV0dXJuIixuLmFyZz1lLGsodCxuKSwidGhyb3ciPT09bi5tZXRob2QpKXJldHVybiB2O24ubWV0aG9kPSJ0aHJvdyIsbi5hcmc9bmV3IFR5cGVFcnJvcigiVGhlIGl0ZXJhdG9yIGRvZXMgbm90IHByb3ZpZGUgYSAndGhyb3cnIG1ldGhvZCIpfXJldHVybiB2fXZhciBvPWwocix0Lml0ZXJhdG9yLG4uYXJnKTtpZigidGhyb3ciPT09by50eXBlKXJldHVybiBuLm1ldGhvZD0idGhyb3ciLG4uYXJnPW8uYXJnLG4uZGVsZWdhdGU9bnVsbCx2O3ZhciBpPW8uYXJnO3JldHVybiBpP2kuZG9uZT8oblt0LnJlc3VsdE5hbWVdPWkudmFsdWUsbi5uZXh0PXQubmV4dExvYywicmV0dXJuIiE9PW4ubWV0aG9kJiYobi5tZXRob2Q9Im5leHQiLG4uYXJnPWUpLG4uZGVsZWdhdGU9bnVsbCx2KTppOihuLm1ldGhvZD0idGhyb3ciLG4uYXJnPW5ldyBUeXBlRXJyb3IoIml0ZXJhdG9yIHJlc3VsdCBpcyBub3QgYW4gb2JqZWN0Iiksbi5kZWxlZ2F0ZT1udWxsLHYpfWZ1bmN0aW9uIFModCl7dmFyIGU9e3RyeUxvYzp0WzBdfTsxIGluIHQmJihlLmNhdGNoTG9jPXRbMV0pLDIgaW4gdCYmKGUuZmluYWxseUxvYz10WzJdLGUuYWZ0ZXJMb2M9dFszXSksdGhpcy50cnlFbnRyaWVzLnB1c2goZSl9ZnVuY3Rpb24gTyh0KXt2YXIgZT10LmNvbXBsZXRpb258fHt9O2UudHlwZT0ibm9ybWFsIixkZWxldGUgZS5hcmcsdC5jb21wbGV0aW9uPWV9ZnVuY3Rpb24gSSh0KXt0aGlzLnRyeUVudHJpZXM9W3t0cnlMb2M6InJvb3QifV0sdC5mb3JFYWNoKFMsdGhpcyksdGhpcy5yZXNldCghMCl9ZnVuY3Rpb24gQSh0KXtpZih0KXt2YXIgbj10W2ldO2lmKG4pcmV0dXJuIG4uY2FsbCh0KTtpZigiZnVuY3Rpb24iPT10eXBlb2YgdC5uZXh0KXJldHVybiB0O2lmKCFpc05hTih0Lmxlbmd0aCkpe3ZhciBvPS0xLGE9ZnVuY3Rpb24gbigpe2Zvcig7KytvPHQubGVuZ3RoOylpZihyLmNhbGwodCxvKSlyZXR1cm4gbi52YWx1ZT10W29dLG4uZG9uZT0hMSxuO3JldHVybiBuLnZhbHVlPWUsbi5kb25lPSEwLG59O3JldHVybiBhLm5leHQ9YX19cmV0dXJue25leHQ6TX19ZnVuY3Rpb24gTSgpe3JldHVybnt2YWx1ZTplLGRvbmU6ITB9fXJldHVybiB5LnByb3RvdHlwZT1tLHMoRSwiY29uc3RydWN0b3IiLG0pLHMobSwiY29uc3RydWN0b3IiLHkpLHkuZGlzcGxheU5hbWU9cyhtLGMsIkdlbmVyYXRvckZ1bmN0aW9uIiksdC5pc0dlbmVyYXRvckZ1bmN0aW9uPWZ1bmN0aW9uKHQpe3ZhciBlPSJmdW5jdGlvbiI9PXR5cGVvZiB0JiZ0LmNvbnN0cnVjdG9yO3JldHVybiEhZSYmKGU9PT15fHwiR2VuZXJhdG9yRnVuY3Rpb24iPT09KGUuZGlzcGxheU5hbWV8fGUubmFtZSkpfSx0Lm1hcms9ZnVuY3Rpb24odCl7cmV0dXJuIE9iamVjdC5zZXRQcm90b3R5cGVPZj9PYmplY3Quc2V0UHJvdG90eXBlT2YodCxtKToodC5fX3Byb3RvX189bSxzKHQsYywiR2VuZXJhdG9yRnVuY3Rpb24iKSksdC5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZShFKSx0fSx0LmF3cmFwPWZ1bmN0aW9uKHQpe3JldHVybntfX2F3YWl0OnR9fSxqKEMucHJvdG90eXBlKSxzKEMucHJvdG90eXBlLGEsKGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXN9KSksdC5Bc3luY0l0ZXJhdG9yPUMsdC5hc3luYz1mdW5jdGlvbihlLG4scixvLGkpe3ZvaWQgMD09PWkmJihpPVByb21pc2UpO3ZhciBhPW5ldyBDKHUoZSxuLHIsbyksaSk7cmV0dXJuIHQuaXNHZW5lcmF0b3JGdW5jdGlvbihuKT9hOmEubmV4dCgpLnRoZW4oKGZ1bmN0aW9uKHQpe3JldHVybiB0LmRvbmU/dC52YWx1ZTphLm5leHQoKX0pKX0saihFKSxzKEUsYywiR2VuZXJhdG9yIikscyhFLGksKGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXN9KSkscyhFLCJ0b1N0cmluZyIsKGZ1bmN0aW9uKCl7cmV0dXJuIltvYmplY3QgR2VuZXJhdG9yXSJ9KSksdC5rZXlzPWZ1bmN0aW9uKHQpe3ZhciBlPVtdO2Zvcih2YXIgbiBpbiB0KWUucHVzaChuKTtyZXR1cm4gZS5yZXZlcnNlKCksZnVuY3Rpb24gbigpe2Zvcig7ZS5sZW5ndGg7KXt2YXIgcj1lLnBvcCgpO2lmKHIgaW4gdClyZXR1cm4gbi52YWx1ZT1yLG4uZG9uZT0hMSxufXJldHVybiBuLmRvbmU9ITAsbn19LHQudmFsdWVzPUEsSS5wcm90b3R5cGU9e2NvbnN0cnVjdG9yOkkscmVzZXQ6ZnVuY3Rpb24odCl7aWYodGhpcy5wcmV2PTAsdGhpcy5uZXh0PTAsdGhpcy5zZW50PXRoaXMuX3NlbnQ9ZSx0aGlzLmRvbmU9ITEsdGhpcy5kZWxlZ2F0ZT1udWxsLHRoaXMubWV0aG9kPSJuZXh0Iix0aGlzLmFyZz1lLHRoaXMudHJ5RW50cmllcy5mb3JFYWNoKE8pLCF0KWZvcih2YXIgbiBpbiB0aGlzKSJ0Ij09PW4uY2hhckF0KDApJiZyLmNhbGwodGhpcyxuKSYmIWlzTmFOKCtuLnNsaWNlKDEpKSYmKHRoaXNbbl09ZSl9LHN0b3A6ZnVuY3Rpb24oKXt0aGlzLmRvbmU9ITA7dmFyIHQ9dGhpcy50cnlFbnRyaWVzWzBdLmNvbXBsZXRpb247aWYoInRocm93Ij09PXQudHlwZSl0aHJvdyB0LmFyZztyZXR1cm4gdGhpcy5ydmFsfSxkaXNwYXRjaEV4Y2VwdGlvbjpmdW5jdGlvbih0KXtpZih0aGlzLmRvbmUpdGhyb3cgdDt2YXIgbj10aGlzO2Z1bmN0aW9uIG8ocixvKXtyZXR1cm4gYy50eXBlPSJ0aHJvdyIsYy5hcmc9dCxuLm5leHQ9cixvJiYobi5tZXRob2Q9Im5leHQiLG4uYXJnPWUpLCEhb31mb3IodmFyIGk9dGhpcy50cnlFbnRyaWVzLmxlbmd0aC0xO2k+PTA7LS1pKXt2YXIgYT10aGlzLnRyeUVudHJpZXNbaV0sYz1hLmNvbXBsZXRpb247aWYoInJvb3QiPT09YS50cnlMb2MpcmV0dXJuIG8oImVuZCIpO2lmKGEudHJ5TG9jPD10aGlzLnByZXYpe3ZhciBzPXIuY2FsbChhLCJjYXRjaExvYyIpLHU9ci5jYWxsKGEsImZpbmFsbHlMb2MiKTtpZihzJiZ1KXtpZih0aGlzLnByZXY8YS5jYXRjaExvYylyZXR1cm4gbyhhLmNhdGNoTG9jLCEwKTtpZih0aGlzLnByZXY8YS5maW5hbGx5TG9jKXJldHVybiBvKGEuZmluYWxseUxvYyl9ZWxzZSBpZihzKXtpZih0aGlzLnByZXY8YS5jYXRjaExvYylyZXR1cm4gbyhhLmNhdGNoTG9jLCEwKX1lbHNle2lmKCF1KXRocm93IG5ldyBFcnJvcigidHJ5IHN0YXRlbWVudCB3aXRob3V0IGNhdGNoIG9yIGZpbmFsbHkiKTtpZih0aGlzLnByZXY8YS5maW5hbGx5TG9jKXJldHVybiBvKGEuZmluYWxseUxvYyl9fX19LGFicnVwdDpmdW5jdGlvbih0LGUpe2Zvcih2YXIgbj10aGlzLnRyeUVudHJpZXMubGVuZ3RoLTE7bj49MDstLW4pe3ZhciBvPXRoaXMudHJ5RW50cmllc1tuXTtpZihvLnRyeUxvYzw9dGhpcy5wcmV2JiZyLmNhbGwobywiZmluYWxseUxvYyIpJiZ0aGlzLnByZXY8by5maW5hbGx5TG9jKXt2YXIgaT1vO2JyZWFrfX1pJiYoImJyZWFrIj09PXR8fCJjb250aW51ZSI9PT10KSYmaS50cnlMb2M8PWUmJmU8PWkuZmluYWxseUxvYyYmKGk9bnVsbCk7dmFyIGE9aT9pLmNvbXBsZXRpb246e307cmV0dXJuIGEudHlwZT10LGEuYXJnPWUsaT8odGhpcy5tZXRob2Q9Im5leHQiLHRoaXMubmV4dD1pLmZpbmFsbHlMb2Msdik6dGhpcy5jb21wbGV0ZShhKX0sY29tcGxldGU6ZnVuY3Rpb24odCxlKXtpZigidGhyb3ciPT09dC50eXBlKXRocm93IHQuYXJnO3JldHVybiJicmVhayI9PT10LnR5cGV8fCJjb250aW51ZSI9PT10LnR5cGU/dGhpcy5uZXh0PXQuYXJnOiJyZXR1cm4iPT09dC50eXBlPyh0aGlzLnJ2YWw9dGhpcy5hcmc9dC5hcmcsdGhpcy5tZXRob2Q9InJldHVybiIsdGhpcy5uZXh0PSJlbmQiKToibm9ybWFsIj09PXQudHlwZSYmZSYmKHRoaXMubmV4dD1lKSx2fSxmaW5pc2g6ZnVuY3Rpb24odCl7Zm9yKHZhciBlPXRoaXMudHJ5RW50cmllcy5sZW5ndGgtMTtlPj0wOy0tZSl7dmFyIG49dGhpcy50cnlFbnRyaWVzW2VdO2lmKG4uZmluYWxseUxvYz09PXQpcmV0dXJuIHRoaXMuY29tcGxldGUobi5jb21wbGV0aW9uLG4uYWZ0ZXJMb2MpLE8obiksdn19LGNhdGNoOmZ1bmN0aW9uKHQpe2Zvcih2YXIgZT10aGlzLnRyeUVudHJpZXMubGVuZ3RoLTE7ZT49MDstLWUpe3ZhciBuPXRoaXMudHJ5RW50cmllc1tlXTtpZihuLnRyeUxvYz09PXQpe3ZhciByPW4uY29tcGxldGlvbjtpZigidGhyb3ciPT09ci50eXBlKXt2YXIgbz1yLmFyZztPKG4pfXJldHVybiBvfX10aHJvdyBuZXcgRXJyb3IoImlsbGVnYWwgY2F0Y2ggYXR0ZW1wdCIpfSxkZWxlZ2F0ZVlpZWxkOmZ1bmN0aW9uKHQsbixyKXtyZXR1cm4gdGhpcy5kZWxlZ2F0ZT17aXRlcmF0b3I6QSh0KSxyZXN1bHROYW1lOm4sbmV4dExvYzpyfSwibmV4dCI9PT10aGlzLm1ldGhvZCYmKHRoaXMuYXJnPWUpLHZ9fSx0fSh0LmV4cG9ydHMpO3RyeXtyZWdlbmVyYXRvclJ1bnRpbWU9ZX1jYXRjaCh0KXsib2JqZWN0Ij09dHlwZW9mIGdsb2JhbFRoaXM/Z2xvYmFsVGhpcy5yZWdlbmVyYXRvclJ1bnRpbWU9ZTpGdW5jdGlvbigiciIsInJlZ2VuZXJhdG9yUnVudGltZSA9IHIiKShlKX19fSxlPXt9O2Z1bmN0aW9uIG4ocil7dmFyIG89ZVtyXTtpZih2b2lkIDAhPT1vKXJldHVybiBvLmV4cG9ydHM7dmFyIGk9ZVtyXT17aWQ6cixleHBvcnRzOnt9fTtyZXR1cm4gdFtyXS5jYWxsKGkuZXhwb3J0cyxpLGkuZXhwb3J0cyxuKSxpLmV4cG9ydHN9bi5uPWZ1bmN0aW9uKHQpe3ZhciBlPXQmJnQuX19lc01vZHVsZT9mdW5jdGlvbigpe3JldHVybiB0LmRlZmF1bHR9OmZ1bmN0aW9uKCl7cmV0dXJuIHR9O3JldHVybiBuLmQoZSx7YTplfSksZX0sbi5kPWZ1bmN0aW9uKHQsZSl7Zm9yKHZhciByIGluIGUpbi5vKGUscikmJiFuLm8odCxyKSYmT2JqZWN0LmRlZmluZVByb3BlcnR5KHQscix7ZW51bWVyYWJsZTohMCxnZXQ6ZVtyXX0pfSxuLmc9ZnVuY3Rpb24oKXtpZigib2JqZWN0Ij09dHlwZW9mIGdsb2JhbFRoaXMpcmV0dXJuIGdsb2JhbFRoaXM7dHJ5e3JldHVybiB0aGlzfHxuZXcgRnVuY3Rpb24oInJldHVybiB0aGlzIikoKX1jYXRjaCh0KXtpZigib2JqZWN0Ij09dHlwZW9mIHdpbmRvdylyZXR1cm4gd2luZG93fX0oKSxuLm89ZnVuY3Rpb24odCxlKXtyZXR1cm4gT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHQsZSl9LG4ucj1mdW5jdGlvbih0KXsidW5kZWZpbmVkIiE9dHlwZW9mIFN5bWJvbCYmU3ltYm9sLnRvU3RyaW5nVGFnJiZPYmplY3QuZGVmaW5lUHJvcGVydHkodCxTeW1ib2wudG9TdHJpbmdUYWcse3ZhbHVlOiJNb2R1bGUifSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pfSxmdW5jdGlvbigpeyJ1c2Ugc3RyaWN0Ijt2YXIgdD17fTtuLnIodCksbi5kKHQse2Rpc2FibGU6ZnVuY3Rpb24oKXtyZXR1cm4gQ3R9LGVuYWJsZTpmdW5jdGlvbigpe3JldHVybiBqdH19KTt2YXIgZT1uKDY0MTU3KSxyPW4ubihlKSxvPShuKDYwNDkxKSxuKDQ2Njc5KSwiVVJMU2VhcmNoUGFyYW1zImluIHNlbGYpLGk9IlN5bWJvbCJpbiBzZWxmJiYiaXRlcmF0b3IiaW4gU3ltYm9sLGE9IkZpbGVSZWFkZXIiaW4gc2VsZiYmIkJsb2IiaW4gc2VsZiYmZnVuY3Rpb24oKXt0cnl7cmV0dXJuIG5ldyBCbG9iLCEwfWNhdGNoKHQpe3JldHVybiExfX0oKSxjPSJGb3JtRGF0YSJpbiBzZWxmLHM9IkFycmF5QnVmZmVyImluIHNlbGY7aWYocyl2YXIgdT1bIltvYmplY3QgSW50OEFycmF5XSIsIltvYmplY3QgVWludDhBcnJheV0iLCJbb2JqZWN0IFVpbnQ4Q2xhbXBlZEFycmF5XSIsIltvYmplY3QgSW50MTZBcnJheV0iLCJbb2JqZWN0IFVpbnQxNkFycmF5XSIsIltvYmplY3QgSW50MzJBcnJheV0iLCJbb2JqZWN0IFVpbnQzMkFycmF5XSIsIltvYmplY3QgRmxvYXQzMkFycmF5XSIsIltvYmplY3QgRmxvYXQ2NEFycmF5XSJdLGw9QXJyYXlCdWZmZXIuaXNWaWV3fHxmdW5jdGlvbih0KXtyZXR1cm4gdCYmdS5pbmRleE9mKE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbCh0KSk+LTF9O2Z1bmN0aW9uIGYodCl7aWYoInN0cmluZyIhPXR5cGVvZiB0JiYodD1TdHJpbmcodCkpLC9bXmEtejAtOVwtIyQlJicqKy5eX2B8fl0vaS50ZXN0KHQpKXRocm93IG5ldyBUeXBlRXJyb3IoIkludmFsaWQgY2hhcmFjdGVyIGluIGhlYWRlciBmaWVsZCBuYW1lIik7cmV0dXJuIHQudG9Mb3dlckNhc2UoKX1mdW5jdGlvbiBkKHQpe3JldHVybiJzdHJpbmciIT10eXBlb2YgdCYmKHQ9U3RyaW5nKHQpKSx0fWZ1bmN0aW9uIHAodCl7dmFyIGU9e25leHQ6ZnVuY3Rpb24oKXt2YXIgZT10LnNoaWZ0KCk7cmV0dXJue2RvbmU6dm9pZCAwPT09ZSx2YWx1ZTplfX19O3JldHVybiBpJiYoZVtTeW1ib2wuaXRlcmF0b3JdPWZ1bmN0aW9uKCl7cmV0dXJuIGV9KSxlfWZ1bmN0aW9uIGgodCl7dGhpcy5tYXA9e30sdCBpbnN0YW5jZW9mIGg/dC5mb3JFYWNoKChmdW5jdGlvbih0LGUpe3RoaXMuYXBwZW5kKGUsdCl9KSx0aGlzKTpBcnJheS5pc0FycmF5KHQpP3QuZm9yRWFjaCgoZnVuY3Rpb24odCl7dGhpcy5hcHBlbmQodFswXSx0WzFdKX0pLHRoaXMpOnQmJk9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKHQpLmZvckVhY2goKGZ1bmN0aW9uKGUpe3RoaXMuYXBwZW5kKGUsdFtlXSl9KSx0aGlzKX1mdW5jdGlvbiB2KHQpe2lmKHQuYm9keVVzZWQpcmV0dXJuIFByb21pc2UucmVqZWN0KG5ldyBUeXBlRXJyb3IoIkFscmVhZHkgcmVhZCIpKTt0LmJvZHlVc2VkPSEwfWZ1bmN0aW9uIGcodCl7cmV0dXJuIG5ldyBQcm9taXNlKChmdW5jdGlvbihlLG4pe3Qub25sb2FkPWZ1bmN0aW9uKCl7ZSh0LnJlc3VsdCl9LHQub25lcnJvcj1mdW5jdGlvbigpe24odC5lcnJvcil9fSkpfWZ1bmN0aW9uIHkodCl7dmFyIGU9bmV3IEZpbGVSZWFkZXIsbj1nKGUpO3JldHVybiBlLnJlYWRBc0FycmF5QnVmZmVyKHQpLG59ZnVuY3Rpb24gbSh0KXtpZih0LnNsaWNlKXJldHVybiB0LnNsaWNlKDApO3ZhciBlPW5ldyBVaW50OEFycmF5KHQuYnl0ZUxlbmd0aCk7cmV0dXJuIGUuc2V0KG5ldyBVaW50OEFycmF5KHQpKSxlLmJ1ZmZlcn1mdW5jdGlvbiBiKCl7cmV0dXJuIHRoaXMuYm9keVVzZWQ9ITEsdGhpcy5faW5pdEJvZHk9ZnVuY3Rpb24odCl7dmFyIGU7dGhpcy5fYm9keUluaXQ9dCx0PyJzdHJpbmciPT10eXBlb2YgdD90aGlzLl9ib2R5VGV4dD10OmEmJkJsb2IucHJvdG90eXBlLmlzUHJvdG90eXBlT2YodCk/dGhpcy5fYm9keUJsb2I9dDpjJiZGb3JtRGF0YS5wcm90b3R5cGUuaXNQcm90b3R5cGVPZih0KT90aGlzLl9ib2R5Rm9ybURhdGE9dDpvJiZVUkxTZWFyY2hQYXJhbXMucHJvdG90eXBlLmlzUHJvdG90eXBlT2YodCk/dGhpcy5fYm9keVRleHQ9dC50b1N0cmluZygpOnMmJmEmJigoZT10KSYmRGF0YVZpZXcucHJvdG90eXBlLmlzUHJvdG90eXBlT2YoZSkpPyh0aGlzLl9ib2R5QXJyYXlCdWZmZXI9bSh0LmJ1ZmZlciksdGhpcy5fYm9keUluaXQ9bmV3IEJsb2IoW3RoaXMuX2JvZHlBcnJheUJ1ZmZlcl0pKTpzJiYoQXJyYXlCdWZmZXIucHJvdG90eXBlLmlzUHJvdG90eXBlT2YodCl8fGwodCkpP3RoaXMuX2JvZHlBcnJheUJ1ZmZlcj1tKHQpOnRoaXMuX2JvZHlUZXh0PXQ9T2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKHQpOnRoaXMuX2JvZHlUZXh0PSIiLHRoaXMuaGVhZGVycy5nZXQoImNvbnRlbnQtdHlwZSIpfHwoInN0cmluZyI9PXR5cGVvZiB0P3RoaXMuaGVhZGVycy5zZXQoImNvbnRlbnQtdHlwZSIsInRleHQvcGxhaW47Y2hhcnNldD1VVEYtOCIpOnRoaXMuX2JvZHlCbG9iJiZ0aGlzLl9ib2R5QmxvYi50eXBlP3RoaXMuaGVhZGVycy5zZXQoImNvbnRlbnQtdHlwZSIsdGhpcy5fYm9keUJsb2IudHlwZSk6byYmVVJMU2VhcmNoUGFyYW1zLnByb3RvdHlwZS5pc1Byb3RvdHlwZU9mKHQpJiZ0aGlzLmhlYWRlcnMuc2V0KCJjb250ZW50LXR5cGUiLCJhcHBsaWNhdGlvbi94LXd3dy1mb3JtLXVybGVuY29kZWQ7Y2hhcnNldD1VVEYtOCIpKX0sYSYmKHRoaXMuYmxvYj1mdW5jdGlvbigpe3ZhciB0PXYodGhpcyk7aWYodClyZXR1cm4gdDtpZih0aGlzLl9ib2R5QmxvYilyZXR1cm4gUHJvbWlzZS5yZXNvbHZlKHRoaXMuX2JvZHlCbG9iKTtpZih0aGlzLl9ib2R5QXJyYXlCdWZmZXIpcmV0dXJuIFByb21pc2UucmVzb2x2ZShuZXcgQmxvYihbdGhpcy5fYm9keUFycmF5QnVmZmVyXSkpO2lmKHRoaXMuX2JvZHlGb3JtRGF0YSl0aHJvdyBuZXcgRXJyb3IoImNvdWxkIG5vdCByZWFkIEZvcm1EYXRhIGJvZHkgYXMgYmxvYiIpO3JldHVybiBQcm9taXNlLnJlc29sdmUobmV3IEJsb2IoW3RoaXMuX2JvZHlUZXh0XSkpfSx0aGlzLmFycmF5QnVmZmVyPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2JvZHlBcnJheUJ1ZmZlcj92KHRoaXMpfHxQcm9taXNlLnJlc29sdmUodGhpcy5fYm9keUFycmF5QnVmZmVyKTp0aGlzLmJsb2IoKS50aGVuKHkpfSksdGhpcy50ZXh0PWZ1bmN0aW9uKCl7dmFyIHQsZSxuLHI9dih0aGlzKTtpZihyKXJldHVybiByO2lmKHRoaXMuX2JvZHlCbG9iKXJldHVybiB0PXRoaXMuX2JvZHlCbG9iLGU9bmV3IEZpbGVSZWFkZXIsbj1nKGUpLGUucmVhZEFzVGV4dCh0KSxuO2lmKHRoaXMuX2JvZHlBcnJheUJ1ZmZlcilyZXR1cm4gUHJvbWlzZS5yZXNvbHZlKGZ1bmN0aW9uKHQpe2Zvcih2YXIgZT1uZXcgVWludDhBcnJheSh0KSxuPW5ldyBBcnJheShlLmxlbmd0aCkscj0wO3I8ZS5sZW5ndGg7cisrKW5bcl09U3RyaW5nLmZyb21DaGFyQ29kZShlW3JdKTtyZXR1cm4gbi5qb2luKCIiKX0odGhpcy5fYm9keUFycmF5QnVmZmVyKSk7aWYodGhpcy5fYm9keUZvcm1EYXRhKXRocm93IG5ldyBFcnJvcigiY291bGQgbm90IHJlYWQgRm9ybURhdGEgYm9keSBhcyB0ZXh0Iik7cmV0dXJuIFByb21pc2UucmVzb2x2ZSh0aGlzLl9ib2R5VGV4dCl9LGMmJih0aGlzLmZvcm1EYXRhPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMudGV4dCgpLnRoZW4oRSl9KSx0aGlzLmpzb249ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy50ZXh0KCkudGhlbihKU09OLnBhcnNlKX0sdGhpc31oLnByb3RvdHlwZS5hcHBlbmQ9ZnVuY3Rpb24odCxlKXt0PWYodCksZT1kKGUpO3ZhciBuPXRoaXMubWFwW3RdO3RoaXMubWFwW3RdPW4/bisiLCAiK2U6ZX0saC5wcm90b3R5cGUuZGVsZXRlPWZ1bmN0aW9uKHQpe2RlbGV0ZSB0aGlzLm1hcFtmKHQpXX0saC5wcm90b3R5cGUuZ2V0PWZ1bmN0aW9uKHQpe3JldHVybiB0PWYodCksdGhpcy5oYXModCk/dGhpcy5tYXBbdF06bnVsbH0saC5wcm90b3R5cGUuaGFzPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLm1hcC5oYXNPd25Qcm9wZXJ0eShmKHQpKX0saC5wcm90b3R5cGUuc2V0PWZ1bmN0aW9uKHQsZSl7dGhpcy5tYXBbZih0KV09ZChlKX0saC5wcm90b3R5cGUuZm9yRWFjaD1mdW5jdGlvbih0LGUpe2Zvcih2YXIgbiBpbiB0aGlzLm1hcCl0aGlzLm1hcC5oYXNPd25Qcm9wZXJ0eShuKSYmdC5jYWxsKGUsdGhpcy5tYXBbbl0sbix0aGlzKX0saC5wcm90b3R5cGUua2V5cz1mdW5jdGlvbigpe3ZhciB0PVtdO3JldHVybiB0aGlzLmZvckVhY2goKGZ1bmN0aW9uKGUsbil7dC5wdXNoKG4pfSkpLHAodCl9LGgucHJvdG90eXBlLnZhbHVlcz1mdW5jdGlvbigpe3ZhciB0PVtdO3JldHVybiB0aGlzLmZvckVhY2goKGZ1bmN0aW9uKGUpe3QucHVzaChlKX0pKSxwKHQpfSxoLnByb3RvdHlwZS5lbnRyaWVzPWZ1bmN0aW9uKCl7dmFyIHQ9W107cmV0dXJuIHRoaXMuZm9yRWFjaCgoZnVuY3Rpb24oZSxuKXt0LnB1c2goW24sZV0pfSkpLHAodCl9LGkmJihoLnByb3RvdHlwZVtTeW1ib2wuaXRlcmF0b3JdPWgucHJvdG90eXBlLmVudHJpZXMpO3ZhciB4PVsiREVMRVRFIiwiR0VUIiwiSEVBRCIsIk9QVElPTlMiLCJQT1NUIiwiUFVUIl07ZnVuY3Rpb24gdyh0LGUpe3ZhciBuLHIsbz0oZT1lfHx7fSkuYm9keTtpZih0IGluc3RhbmNlb2Ygdyl7aWYodC5ib2R5VXNlZCl0aHJvdyBuZXcgVHlwZUVycm9yKCJBbHJlYWR5IHJlYWQiKTt0aGlzLnVybD10LnVybCx0aGlzLmNyZWRlbnRpYWxzPXQuY3JlZGVudGlhbHMsZS5oZWFkZXJzfHwodGhpcy5oZWFkZXJzPW5ldyBoKHQuaGVhZGVycykpLHRoaXMubWV0aG9kPXQubWV0aG9kLHRoaXMubW9kZT10Lm1vZGUsdGhpcy5zaWduYWw9dC5zaWduYWwsb3x8bnVsbD09dC5fYm9keUluaXR8fChvPXQuX2JvZHlJbml0LHQuYm9keVVzZWQ9ITApfWVsc2UgdGhpcy51cmw9U3RyaW5nKHQpO2lmKHRoaXMuY3JlZGVudGlhbHM9ZS5jcmVkZW50aWFsc3x8dGhpcy5jcmVkZW50aWFsc3x8InNhbWUtb3JpZ2luIiwhZS5oZWFkZXJzJiZ0aGlzLmhlYWRlcnN8fCh0aGlzLmhlYWRlcnM9bmV3IGgoZS5oZWFkZXJzKSksdGhpcy5tZXRob2Q9KG49ZS5tZXRob2R8fHRoaXMubWV0aG9kfHwiR0VUIixyPW4udG9VcHBlckNhc2UoKSx4LmluZGV4T2Yocik+LTE/cjpuKSx0aGlzLm1vZGU9ZS5tb2RlfHx0aGlzLm1vZGV8fG51bGwsdGhpcy5zaWduYWw9ZS5zaWduYWx8fHRoaXMuc2lnbmFsLHRoaXMucmVmZXJyZXI9bnVsbCwoIkdFVCI9PT10aGlzLm1ldGhvZHx8IkhFQUQiPT09dGhpcy5tZXRob2QpJiZvKXRocm93IG5ldyBUeXBlRXJyb3IoIkJvZHkgbm90IGFsbG93ZWQgZm9yIEdFVCBvciBIRUFEIHJlcXVlc3RzIik7dGhpcy5faW5pdEJvZHkobyl9ZnVuY3Rpb24gRSh0KXt2YXIgZT1uZXcgRm9ybURhdGE7cmV0dXJuIHQudHJpbSgpLnNwbGl0KCImIikuZm9yRWFjaCgoZnVuY3Rpb24odCl7aWYodCl7dmFyIG49dC5zcGxpdCgiPSIpLHI9bi5zaGlmdCgpLnJlcGxhY2UoL1wrL2csIiAiKSxvPW4uam9pbigiPSIpLnJlcGxhY2UoL1wrL2csIiAiKTtlLmFwcGVuZChkZWNvZGVVUklDb21wb25lbnQociksZGVjb2RlVVJJQ29tcG9uZW50KG8pKX19KSksZX1mdW5jdGlvbiBqKHQpe3ZhciBlPW5ldyBoO3JldHVybiB0LnJlcGxhY2UoL1xyP1xuW1x0IF0rL2csIiAiKS5zcGxpdCgvXHI/XG4vKS5mb3JFYWNoKChmdW5jdGlvbih0KXt2YXIgbj10LnNwbGl0KCI6Iikscj1uLnNoaWZ0KCkudHJpbSgpO2lmKHIpe3ZhciBvPW4uam9pbigiOiIpLnRyaW0oKTtlLmFwcGVuZChyLG8pfX0pKSxlfWZ1bmN0aW9uIEModCxlKXtlfHwoZT17fSksdGhpcy50eXBlPSJkZWZhdWx0Iix0aGlzLnN0YXR1cz12b2lkIDA9PT1lLnN0YXR1cz8yMDA6ZS5zdGF0dXMsdGhpcy5vaz10aGlzLnN0YXR1cz49MjAwJiZ0aGlzLnN0YXR1czwzMDAsdGhpcy5zdGF0dXNUZXh0PSJzdGF0dXNUZXh0ImluIGU/ZS5zdGF0dXNUZXh0OiJPSyIsdGhpcy5oZWFkZXJzPW5ldyBoKGUuaGVhZGVycyksdGhpcy51cmw9ZS51cmx8fCIiLHRoaXMuX2luaXRCb2R5KHQpfXcucHJvdG90eXBlLmNsb25lPWZ1bmN0aW9uKCl7cmV0dXJuIG5ldyB3KHRoaXMse2JvZHk6dGhpcy5fYm9keUluaXR9KX0sYi5jYWxsKHcucHJvdG90eXBlKSxiLmNhbGwoQy5wcm90b3R5cGUpLEMucHJvdG90eXBlLmNsb25lPWZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBDKHRoaXMuX2JvZHlJbml0LHtzdGF0dXM6dGhpcy5zdGF0dXMsc3RhdHVzVGV4dDp0aGlzLnN0YXR1c1RleHQsaGVhZGVyczpuZXcgaCh0aGlzLmhlYWRlcnMpLHVybDp0aGlzLnVybH0pfSxDLmVycm9yPWZ1bmN0aW9uKCl7dmFyIHQ9bmV3IEMobnVsbCx7c3RhdHVzOjAsc3RhdHVzVGV4dDoiIn0pO3JldHVybiB0LnR5cGU9ImVycm9yIix0fTt2YXIgaz1bMzAxLDMwMiwzMDMsMzA3LDMwOF07Qy5yZWRpcmVjdD1mdW5jdGlvbih0LGUpe2lmKC0xPT09ay5pbmRleE9mKGUpKXRocm93IG5ldyBSYW5nZUVycm9yKCJJbnZhbGlkIHN0YXR1cyBjb2RlIik7cmV0dXJuIG5ldyBDKG51bGwse3N0YXR1czplLGhlYWRlcnM6e2xvY2F0aW9uOnR9fSl9O3ZhciBTPXNlbGYuRE9NRXhjZXB0aW9uO3RyeXtuZXcgU31jYXRjaCh0KXsoUz1mdW5jdGlvbih0LGUpe3RoaXMubWVzc2FnZT10LHRoaXMubmFtZT1lO3ZhciBuPUVycm9yKHQpO3RoaXMuc3RhY2s9bi5zdGFja30pLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKEVycm9yLnByb3RvdHlwZSksUy5wcm90b3R5cGUuY29uc3RydWN0b3I9U31mdW5jdGlvbiBPKHQsZSl7cmV0dXJuIG5ldyBQcm9taXNlKChmdW5jdGlvbihuLHIpe3ZhciBvPW5ldyB3KHQsZSk7aWYoby5zaWduYWwmJm8uc2lnbmFsLmFib3J0ZWQpcmV0dXJuIHIobmV3IFMoIkFib3J0ZWQiLCJBYm9ydEVycm9yIikpO3ZhciBpPW5ldyBYTUxIdHRwUmVxdWVzdDtmdW5jdGlvbiBjKCl7aS5hYm9ydCgpfWkub25sb2FkPWZ1bmN0aW9uKCl7dmFyIHQ9e3N0YXR1czppLnN0YXR1cyxzdGF0dXNUZXh0Omkuc3RhdHVzVGV4dCxoZWFkZXJzOmooaS5nZXRBbGxSZXNwb25zZUhlYWRlcnMoKXx8IiIpfTt0LnVybD0icmVzcG9uc2VVUkwiaW4gaT9pLnJlc3BvbnNlVVJMOnQuaGVhZGVycy5nZXQoIlgtUmVxdWVzdC1VUkwiKTt2YXIgZT0icmVzcG9uc2UiaW4gaT9pLnJlc3BvbnNlOmkucmVzcG9uc2VUZXh0O24obmV3IEMoZSx0KSl9LGkub25lcnJvcj1mdW5jdGlvbigpe3IobmV3IFR5cGVFcnJvcigiTmV0d29yayByZXF1ZXN0IGZhaWxlZCIpKX0saS5vbnRpbWVvdXQ9ZnVuY3Rpb24oKXtyKG5ldyBUeXBlRXJyb3IoIk5ldHdvcmsgcmVxdWVzdCBmYWlsZWQiKSl9LGkub25hYm9ydD1mdW5jdGlvbigpe3IobmV3IFMoIkFib3J0ZWQiLCJBYm9ydEVycm9yIikpfSxpLm9wZW4oby5tZXRob2Qsby51cmwsITApLCJpbmNsdWRlIj09PW8uY3JlZGVudGlhbHM/aS53aXRoQ3JlZGVudGlhbHM9ITA6Im9taXQiPT09by5jcmVkZW50aWFscyYmKGkud2l0aENyZWRlbnRpYWxzPSExKSwicmVzcG9uc2VUeXBlImluIGkmJmEmJihpLnJlc3BvbnNlVHlwZT0iYmxvYiIpLG8uaGVhZGVycy5mb3JFYWNoKChmdW5jdGlvbih0LGUpe2kuc2V0UmVxdWVzdEhlYWRlcihlLHQpfSkpLG8uc2lnbmFsJiYoby5zaWduYWwuYWRkRXZlbnRMaXN0ZW5lcigiYWJvcnQiLGMpLGkub25yZWFkeXN0YXRlY2hhbmdlPWZ1bmN0aW9uKCl7ND09PWkucmVhZHlTdGF0ZSYmby5zaWduYWwucmVtb3ZlRXZlbnRMaXN0ZW5lcigiYWJvcnQiLGMpfSksaS5zZW5kKHZvaWQgMD09PW8uX2JvZHlJbml0P251bGw6by5fYm9keUluaXQpfSkpfWZ1bmN0aW9uIEkodCxlKXtmb3IodmFyIG49W10scj1bXSxvPWFyZ3VtZW50cy5sZW5ndGg7by0tID4yOyluLnB1c2goYXJndW1lbnRzW29dKTtmb3IoO24ubGVuZ3RoOyl7dmFyIGk9bi5wb3AoKTtpZihpJiZpLnBvcClmb3Iobz1pLmxlbmd0aDtvLS07KW4ucHVzaChpW29dKTtlbHNlIG51bGwhPWkmJiEwIT09aSYmITEhPT1pJiZyLnB1c2goaSl9cmV0dXJuImZ1bmN0aW9uIj09dHlwZW9mIHQ/dChlfHx7fSxyKTp7bm9kZU5hbWU6dCxhdHRyaWJ1dGVzOmV8fHt9LGNoaWxkcmVuOnIsa2V5OmUmJmUua2V5fX1PLnBvbHlmaWxsPSEwLHNlbGYuZmV0Y2h8fChzZWxmLmZldGNoPU8sc2VsZi5IZWFkZXJzPWgsc2VsZi5SZXF1ZXN0PXcsc2VsZi5SZXNwb25zZT1DKTt2YXIgQT1uKDY2MDgxKSxNPW4ubihBKSxfPW4oOTI4MTYpLFQ9bi5uKF8pLFI9big0NDY3NCksTD1uLm4oUiksUD1uKDQ0NjIxKSxOPW4ubihQKSxEPUFycmF5LmlzQXJyYXk7ZnVuY3Rpb24gRih0KXt2YXIgZSxuLHI9dHlwZW9mIHQsbz0iIjtpZigic3RyaW5nIj09PXJ8fCJudW1iZXIiPT09cilyZXR1cm4gdHx8IiI7aWYoRCh0KSYmdC5sZW5ndGg+MClmb3IoZT0wLG49dC5sZW5ndGg7ZTxuO2UrKykiIiE9PShyPUYodFtlXSkpJiYobys9KG8mJiIgIikrcik7ZWxzZSBmb3IoZSBpbiB0KXQuaGFzT3duUHJvcGVydHkoZSkmJnRbZV0mJihvKz0obyYmIiAiKStlKTtyZXR1cm4gb312YXIgVT0ieC11bC1lbnZpcm9ubWVudC1pZCIsQj0ieC11bC1hbm9ueW1vdXMtaWQiLHo9IngtdWwtdXNlci1pZCIsVj0ieC11bC12aXNpdG9yLWlkIixIPSJ4LXVsLWluc3RhbGxhdGlvbi1tZXRob2QiLHE9IndlYi1ndG0iLFc9IndlYi1zZWdtZW50IixHPSJ3ZWItc25pcHBldCIsWj0idWwtY3VzdG9tLXN0eWxlIiwkPSJ1bC1jYXJkX19jb250YWluZXIiLFk9InVsLWNhcmQtLXZpZGVvIixKPSJjbG9zZS1jb250YWluZXIiLEs9ImNsb3NlLWJ0biIsWD0ibGlrZXJ0LW51bWJlciIsUT0ibnBzLW51bWJlciIsdHQ9ImNob2ljZSIsZXQ9InNlbGVjdC1sYWJlbCIsbnQ9InNlbGVjdC1jaGVja2JveCIscnQ9InNlbGVjdC1yYWRpbyIsb3Q9InVsLWNhcmRfX2Nob2ljZXMiLGl0PSJ1bC1jYXJkLXRleHRfX2lucHV0IixhdD0iLS1kZXNrdG9wIixjdD0iLS1tb2JpbGUiLHN0PSJ1bC1xdWVzdGlvbiIsdXQ9InVsLWNhcHRpb24iLGx0PSJmYWRlLWluLXRyYW5zaXRpb24iLGZ0PWZ1bmN0aW9uKHQsZSl7cmV0dXJuW3QrKGU/Y3Q6YXQpLHRdfTtmdW5jdGlvbiBkdCh0LGUpe3ZhciBuPSJ1bmRlZmluZWQiIT10eXBlb2YgU3ltYm9sJiZ0W1N5bWJvbC5pdGVyYXRvcl18fHRbIkBAaXRlcmF0b3IiXTtpZighbil7aWYoQXJyYXkuaXNBcnJheSh0KXx8KG49ZnVuY3Rpb24odCxlKXtpZighdClyZXR1cm47aWYoInN0cmluZyI9PXR5cGVvZiB0KXJldHVybiBwdCh0LGUpO3ZhciBuPU9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbCh0KS5zbGljZSg4LC0xKTsiT2JqZWN0Ij09PW4mJnQuY29uc3RydWN0b3ImJihuPXQuY29uc3RydWN0b3IubmFtZSk7aWYoIk1hcCI9PT1ufHwiU2V0Ij09PW4pcmV0dXJuIEFycmF5LmZyb20odCk7aWYoIkFyZ3VtZW50cyI9PT1ufHwvXig/OlVpfEkpbnQoPzo4fDE2fDMyKSg/OkNsYW1wZWQpP0FycmF5JC8udGVzdChuKSlyZXR1cm4gcHQodCxlKX0odCkpfHxlJiZ0JiYibnVtYmVyIj09dHlwZW9mIHQubGVuZ3RoKXtuJiYodD1uKTt2YXIgcj0wLG89ZnVuY3Rpb24oKXt9O3JldHVybntzOm8sbjpmdW5jdGlvbigpe3JldHVybiByPj10Lmxlbmd0aD97ZG9uZTohMH06e2RvbmU6ITEsdmFsdWU6dFtyKytdfX0sZTpmdW5jdGlvbih0KXt0aHJvdyB0fSxmOm99fXRocm93IG5ldyBUeXBlRXJyb3IoIkludmFsaWQgYXR0ZW1wdCB0byBpdGVyYXRlIG5vbi1pdGVyYWJsZSBpbnN0YW5jZS5cbkluIG9yZGVyIHRvIGJlIGl0ZXJhYmxlLCBub24tYXJyYXkgb2JqZWN0cyBtdXN0IGhhdmUgYSBbU3ltYm9sLml0ZXJhdG9yXSgpIG1ldGhvZC4iKX12YXIgaSxhPSEwLGM9ITE7cmV0dXJue3M6ZnVuY3Rpb24oKXtuPW4uY2FsbCh0KX0sbjpmdW5jdGlvbigpe3ZhciB0PW4ubmV4dCgpO3JldHVybiBhPXQuZG9uZSx0fSxlOmZ1bmN0aW9uKHQpe2M9ITAsaT10fSxmOmZ1bmN0aW9uKCl7dHJ5e2F8fG51bGw9PW4ucmV0dXJufHxuLnJldHVybigpfWZpbmFsbHl7aWYoYyl0aHJvdyBpfX19fWZ1bmN0aW9uIHB0KHQsZSl7KG51bGw9PWV8fGU+dC5sZW5ndGgpJiYoZT10Lmxlbmd0aCk7Zm9yKHZhciBuPTAscj1uZXcgQXJyYXkoZSk7bjxlO24rKylyW25dPXRbbl07cmV0dXJuIHJ9dmFyIGh0PSJ1bC1hcHAiLHZ0PWZ1bmN0aW9uKHQsZSl7dmFyIG49dC5hcHA7bi5ydW5uaW5nfHxlLmRlc3Ryb3koaHQpO3ZhciBvLGk9bi5kZWNrLmNhcmRzW24uZGVjay5pbmRleF0sYT1pLkNhcmQsYz1pLnByb3BzLHM9aS50eXBlLHU9aS5uYW1lLGw9bi5ib3JkZXIsZj1mdW5jdGlvbigpe3ZhciB0PU4oKShMKCkubWFyaygoZnVuY3Rpb24gdCgpe3JldHVybiBMKCkud3JhcCgoZnVuY3Rpb24odCl7Zm9yKDs7KXN3aXRjaCh0LnByZXY9dC5uZXh0KXtjYXNlIDA6cmV0dXJuIHQubmV4dD0yLGUuY2xvc2UoaHQpO2Nhc2UgMjpjYXNlImVuZCI6cmV0dXJuIHQuc3RvcCgpfX0pLHQpfSkpKTtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gdC5hcHBseSh0aGlzLGFyZ3VtZW50cyl9fSgpLGQ9bi5kZWNrLmNhcmRzLHA9bi5kZWNrLmluZGV4LGg9bi5mb250RmFtaWx5P3tmb250RmFtaWx5Om4uZm9udEZhbWlseS5yZXBsYWNlKCI7IiwiIil9Ont9LHY9bi5lbmRDYXJkLGc9ZnVuY3Rpb24oKXt2YXIgdD1OKCkoTCgpLm1hcmsoKGZ1bmN0aW9uIHQobil7cmV0dXJuIEwoKS53cmFwKChmdW5jdGlvbih0KXtmb3IoOzspc3dpdGNoKHQucHJldj10Lm5leHQpe2Nhc2UgMDplLmFwcC5uZXh0KHtkYXRhOm4sY29tcGxldGVTdXJ2ZXk6ZnVuY3Rpb24oKXtlLmRlc3Ryb3koaHQpfSxlbmRDYXJkOnZ9KTtjYXNlIDE6Y2FzZSJlbmQiOnJldHVybiB0LnN0b3AoKX19KSx0KX0pKSk7cmV0dXJuIGZ1bmN0aW9uKGUpe3JldHVybiB0LmFwcGx5KHRoaXMsYXJndW1lbnRzKX19KCkseT1kdChuLmFuc3dlcnN8fFtdKTt0cnl7dmFyIG09ZnVuY3Rpb24oKXt2YXIgdD1vLnZhbHVlO2lmKHQucXVlc3Rpb25JZD09PXUpe3ZhciBlO2lmKCJtdWx0aXBsZWNob2ljZSI9PT1zKXt2YXIgbj1jLm9wdGlvbnMuZmluZCgoZnVuY3Rpb24oZSl7cmV0dXJuIGUudmFsdWU9PT10LnZhbHVlfSkpO2lmKCFuKXJldHVybiJicmVhayI7ZT1yKCkoe30sbi5pZCxuLnZhbHVlKX1lbHNlIGU9dC52YWx1ZTtyZXR1cm4gZyh7dmFsdWU6ZX0pLCJicmVhayJ9fTtmb3IoeS5zKCk7IShvPXkubigpKS5kb25lOyl7aWYoImJyZWFrIj09PW0oKSlicmVha319Y2F0Y2godCl7eS5lKHQpfWZpbmFsbHl7eS5mKCl9cmV0dXJuIEkoImRpdiIse2NsYXNzTmFtZToidWwtYXBwIixpZDpodCxvbmNyZWF0ZTpmdW5jdGlvbih0KXtyZXR1cm4gZnVuY3Rpb24odCl7dmFyIHI9WyJ0cmFuc2l0aW9uZW5kIiwid2Via2l0VHJhbnNpdGlvbkVuZCIsIm1velRyYW5zaXRpb25FbmQiXSxvPSExLGk9ZnVuY3Rpb24gbigpe2lmKCFvJiZ3aW5kb3cuZnJhbWVFbGVtZW50KXt2YXIgaT1uZXcgRXZlbnQoInVsOmZyYW1lOnJlbmRlcmVkIik7d2luZG93LmZyYW1lRWxlbWVudC5kaXNwYXRjaEV2ZW50KGkpfW89ITAsci5mb3JFYWNoKChmdW5jdGlvbihlKXt0LnJlbW92ZUV2ZW50TGlzdGVuZXIoZSxuKX0pKSxzZXRUaW1lb3V0KChmdW5jdGlvbigpe3JldHVybiBlLnVwZGF0ZShodCl9KSwzMDApfTtyLmZvckVhY2goKGZ1bmN0aW9uKGUpe3QuYWRkRXZlbnRMaXN0ZW5lcihlLGkpfSkpLG4uY29uZmlndXJlRXhpdE9uT3ZlcmxheUNsaWNrKChmdW5jdGlvbigpe2UuY2xvc2UoaHQpfSkpLGUudXBkYXRlKGh0KX0odCl9LG9udXBkYXRlOmZ1bmN0aW9uKCl7cmV0dXJuIGUudXBkYXRlKGh0KX0sc3R5bGU6aH0sSSgiZGl2Iix7Y2xhc3NOYW1lOiJ1bC1hcHBfX2NvbnRhaW5lciJ9LEkoImRpdiIse2NsYXNzTmFtZTpGKFQoKShmdCgkLG4udXNlTW9iaWxlU3R5bGluZykpKSxzdHlsZTp7Ym9yZGVyQ29sb3I6bH19LEkoYSxNKCkoe30sYyx7Ym9yZGVyOmwsY2xhc3NOYW1lOiJ1bC1jYXJkIixuZXh0OmcsZW5kQ2FyZDp2LGxvY2FsZTpuLmxvY2FsZSxxdWVzdGlvbklkOnUsdXBkYXRlSGVpZ2h0OmZ1bmN0aW9uKCl7cmV0dXJuIGUudXBkYXRlKGh0KX19KSkpLCJlbWFpbCIhPT1uLmhlYWRlcnNbInVzZXJsZWFwLXBsYXRmb3JtIl0mJiJsaW5rIiE9PW4uaGVhZGVyc1sidXNlcmxlYXAtcGxhdGZvcm0iXSYmKCF2fHxwKzEhPT1kLmxlbmd0aCkmJkkoImRpdiIse2NsYXNzTmFtZTpGKGZ0KEosbi51c2VNb2JpbGVTdHlsaW5nKSl9LEkoImRpdiIse2NsYXNzTmFtZTpLLG9uY2xpY2s6ZixvbmtleXByZXNzOmZ1bmN0aW9uKHQpezEzPT10LmtleUNvZGUmJmYoKX0scm9sZToiYnV0dG9uIiwiYXJpYS1sYWJlbCI6IkNsb3NlIGJ1dHRvbiIsdGFiaW5kZXg6MH0sSSgic3ZnIix7d2lkdGg6IjE4cHgiLGhlaWdodDoiMThweCIsdmlld0JveDoiMCAwIDEzIDEzIixmaWxsOiJub25lIix4bWxuczoiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmcifSxJKCJwYXRoIix7ZDoiTTIuNTQ5NjQgMS43ODM2OUwxLjc4MzY5IDIuNTQ5NjRMNS43MzQwNSA2LjVMMS43ODM2OSAxMC40NTA0TDIuNTQ5NjQgMTEuMjE2M0w2LjUgNy4yNjU5NUwxMC40NTA0IDExLjIxNjNMMTEuMjE2MyAxMC40NTA0TDcuMjY1OTUgNi41TDExLjIxNjMgMi41NDk2NEwxMC40NTA0IDEuNzgzNjlMNi41IDUuNzM0MDVMMi41NDk2NCAxLjc4MzY5WiIsZmlsbDoiIzI2MjEzNiJ9KSkpKSkpfSxndD1uKDQ3MDY2KSx5dD1uLm4oZ3QpLG10PW4oMzA1OTMpLGJ0PW4ubihtdCkseHQ9big0NDUzKSx3dD1uLm4oeHQpLEV0PWZ1bmN0aW9uKCl7dHJ5e3JldHVybiB3aW5kb3cucGFyZW50LkludGVyY29tfWNhdGNoKHQpe319LGp0PWZ1bmN0aW9uKCl7dmFyIHQ9RXQoKTt0JiYodC51bF93YXNWaXNpYmxlJiZ0KCJ1cGRhdGUiLHtoaWRlX2RlZmF1bHRfbGF1bmNoZXI6ITF9KSxkZWxldGUgdC51bF93YXNWaXNpYmxlKX0sQ3Q9ZnVuY3Rpb24oKXt2YXIgdD1FdCgpO3QmJih0LnVsX3dhc1Zpc2libGU9ISFkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCJpZnJhbWUuaW50ZXJjb20tbGF1bmNoZXItZnJhbWUiKSx0LnVsX3dhc1Zpc2libGUmJnQoInVwZGF0ZSIse2hpZGVfZGVmYXVsdF9sYXVuY2hlcjohMH0pKX0sa3Q9W3RdLFN0PWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCgpe2J0KCkodGhpcyx0KX1yZXR1cm4gd3QoKSh0LG51bGwsW3trZXk6ImRpc2FibGUiLHZhbHVlOmZ1bmN0aW9uKCl7a3QuZm9yRWFjaCgoZnVuY3Rpb24odCl7cmV0dXJuIHQuZGlzYWJsZSgpfSkpfX0se2tleToiZW5hYmxlIix2YWx1ZTpmdW5jdGlvbigpe2t0LmZvckVhY2goKGZ1bmN0aW9uKHQpe3JldHVybiB0LmVuYWJsZSgpfSkpfX1dKSx0fSgpLE90PW4oNzYzOTApLEl0PW4ubihPdCksQXQ9ZnVuY3Rpb24oKXtyZXR1cm4gSSgic3ZnIix7d2lkdGg6IjEwMCIsaGVpZ2h0OiIxMyIsdmlld0JveDoiMCAwIDEwMCAxMyIsZmlsbDoibm9uZSIseG1sbnM6Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIixhbHQ6IlBvd2VyZWQgYnkgU3ByaWcifSxJKCJwYXRoIix7ZDoiTTMuMDM2OSAwLjgzOTk4MUgwLjAyNDkwMjNWOC45OTk5OEgxLjMyMDlWNi41Mzk5OEgyLjg1NjlDNC44OTY5IDYuNTM5OTggNi4yNDA5IDUuMzc1OTggNi4yNDA5IDMuNjIzOThDNi4yNDA5IDEuOTU1OTggNC45Njg5IDAuODM5OTgxIDMuMDM2OSAwLjgzOTk4MVpNMy4wMDA5IDUuMzUxOThIMS4zMjA5VjIuMDI3OThIMy4wMDA5QzQuMTc2OSAyLjAyNzk4IDQuOTY4OSAyLjY3NTk4IDQuOTY4OSAzLjYyMzk4QzQuOTY4OSA0LjY1NTk4IDQuMTc2OSA1LjM1MTk4IDMuMDAwOSA1LjM1MTk4WiIsZmlsbDoiIzVENjk2RiJ9KSxJKCJwYXRoIix7ZDoiTTkuOTA2NTMgMy4yMTU5OEM4LjE1NDUzIDMuMjE1OTggNi45MDY1MyA0LjQ1MTk4IDYuOTA2NTMgNi4xNzk5OEM2LjkwNjUzIDcuOTA3OTggOC4xNTQ1MyA5LjE0Mzk4IDkuOTA2NTMgOS4xNDM5OEMxMS42NTg1IDkuMTQzOTggMTIuOTA2NSA3LjkwNzk4IDEyLjkwNjUgNi4xNzk5OEMxMi45MDY1IDQuNDUxOTggMTEuNjU4NSAzLjIxNTk4IDkuOTA2NTMgMy4yMTU5OFpNOS45MDY1MyA4LjAxNTk4QzguODg2NTMgOC4wMTU5OCA4LjE1NDUzIDcuMjM1OTggOC4xNTQ1MyA2LjE3OTk4QzguMTU0NTMgNS4xMTE5OCA4Ljg4NjUzIDQuMzQzOTggOS45MDY1MyA0LjM0Mzk4QzEwLjkyNjUgNC4zNDM5OCAxMS42NTg1IDUuMTExOTggMTEuNjU4NSA2LjE3OTk4QzExLjY1ODUgNy4yMzU5OCAxMC45MjY1IDguMDE1OTggOS45MDY1MyA4LjAxNTk4WiIsZmlsbDoiIzVENjk2RiJ9KSxJKCJwYXRoIix7ZDoiTTIwLjk2MzEgMy4zNTk5OEwxOS43MzkxIDcuMTE1OThMMTguMzk1MSAzLjM1OTk4SDE3LjMyNzFMMTUuOTgzMSA3LjEyNzk4TDE0Ljc1OTEgMy4zNTk5OEgxMy40MTUxTDE1LjQ0MzEgOC45OTk5OEgxNi41MzUxTDE3Ljg2NzEgNS4wODc5OEwxOS4xODcxIDguOTk5OThIMjAuMjc5MUwyMi4zMDcxIDMuMzU5OThIMjAuOTYzMVoiLGZpbGw6IiM1RDY5NkYifSksSSgicGF0aCIse2Q6Ik0yNS43MjQ2IDMuMjE1OThDMjQuMDA4NiAzLjIxNTk4IDIyLjgyMDYgNC41MTE5OCAyMi44MjA2IDYuMTc5OThDMjIuODIwNiA3Ljg1OTk4IDI0LjAyMDYgOS4xNDM5OCAyNS43OTY2IDkuMTQzOThDMjcuMDIwNiA5LjE0Mzk4IDI4LjAxNjYgOC41NDM5OCAyOC4zNzY2IDcuNTIzOThIMjcuMDA4NkMyNi43ODA2IDcuODgzOTggMjYuMzYwNiA4LjA1MTk4IDI1LjgwODYgOC4wNTE5OEMyNC43NTI2IDguMDUxOTggMjQuMjEyNiA3LjQwMzk4IDI0LjA5MjYgNi41NTE5OEgyOC41MjA2QzI4Ljc2MDYgNC42NDM5OCAyNy41OTY2IDMuMjE1OTggMjUuNzI0NiAzLjIxNTk4Wk0yNS43MzY2IDQuMjcxOThDMjYuNjEyNiA0LjI3MTk4IDI3LjIxMjYgNC43NjM5OCAyNy4yODQ2IDUuNjg3OThIMjQuMTE2NkMyNC4yNjA2IDQuODk1OTggMjQuODAwNiA0LjI3MTk4IDI1LjczNjYgNC4yNzE5OFoiLGZpbGw6IiM1RDY5NkYifSksSSgicGF0aCIse2Q6Ik0zMS4xMjk3IDQuMTI3OThWMy4zNTk5OEgyOS44ODE3VjguOTk5OThIMzEuMTI5N1Y1LjQ0Nzk4QzMxLjYzMzcgNC43ODc5OCAzMi4zMTc3IDQuNDUxOTggMzMuMjE3NyA0LjQxNTk4VjMuMjM5OThDMzIuMzUzNyAzLjIzOTk4IDMxLjY0NTcgMy41NjM5OCAzMS4xMjk3IDQuMTI3OThaIixmaWxsOiIjNUQ2OTZGIn0pLEkoInBhdGgiLHtkOiJNMzYuODIyMiAzLjIxNTk4QzM1LjEwNjIgMy4yMTU5OCAzMy45MTgyIDQuNTExOTggMzMuOTE4MiA2LjE3OTk4QzMzLjkxODIgNy44NTk5OCAzNS4xMTgyIDkuMTQzOTggMzYuODk0MiA5LjE0Mzk4QzM4LjExODIgOS4xNDM5OCAzOS4xMTQyIDguNTQzOTggMzkuNDc0MiA3LjUyMzk4SDM4LjEwNjJDMzcuODc4MiA3Ljg4Mzk4IDM3LjQ1ODIgOC4wNTE5OCAzNi45MDYyIDguMDUxOThDMzUuODUwMiA4LjA1MTk4IDM1LjMxMDIgNy40MDM5OCAzNS4xOTAyIDYuNTUxOThIMzkuNjE4MkMzOS44NTgyIDQuNjQzOTggMzguNjk0MiAzLjIxNTk4IDM2LjgyMjIgMy4yMTU5OFpNMzYuODM0MiA0LjI3MTk4QzM3LjcxMDIgNC4yNzE5OCAzOC4zMTAyIDQuNzYzOTggMzguMzgyMiA1LjY4Nzk4SDM1LjIxNDJDMzUuMzU4MiA0Ljg5NTk4IDM1Ljg5ODIgNC4yNzE5OCAzNi44MzQyIDQuMjcxOThaIixmaWxsOiIjNUQ2OTZGIn0pLEkoInBhdGgiLHtkOiJNNDUuNDg4NiAwLjQ3OTk4VjMuODAzOThDNDUuMDA4NiAzLjQzMTk4IDQ0LjM5NjYgMy4yMTU5OCA0My42NzY2IDMuMjE1OThDNDIuMDkyNiAzLjIxNTk4IDQwLjgyMDYgNC41MzU5OCA0MC44MjA2IDYuMTY3OThDNDAuODIwNiA3LjgyMzk4IDQyLjA5MjYgOS4xNDM5OCA0My42NzY2IDkuMTQzOThDNDQuMzk2NiA5LjE0Mzk4IDQ1LjAwODYgOC45Mjc5OCA0NS40ODg2IDguNTQzOThWOC45OTk5OEg0Ni43MjQ2VjAuNDc5OThINDUuNDg4NlpNNDMuODU2NiA4LjAxNTk4QzQyLjgyNDYgOC4wMTU5OCA0Mi4wNjg2IDcuMTc1OTggNDIuMDY4NiA2LjE2Nzk4QzQyLjA2ODYgNS4xNzE5OCA0Mi44MjQ2IDQuMzQzOTggNDMuODU2NiA0LjM0Mzk4QzQ0LjQ4MDYgNC4zNDM5OCA0NS4wNjg2IDQuNTU5OTggNDUuNDg4NiA1LjE1OTk4VjcuMTg3OThDNDUuMDY4NiA3Ljc5OTk4IDQ0LjQ4MDYgOC4wMTU5OCA0My44NTY2IDguMDE1OThaIixmaWxsOiIjNUQ2OTZGIn0pLEkoInBhdGgiLHtkOiJNNTQuNjc5NyAzLjIxNTk4QzUzLjk1OTcgMy4yMTU5OCA1My4zNDc3IDMuNDMxOTggNTIuODc5NyAzLjc5MTk4VjAuNDc5OThINTEuNjMxN1Y4Ljk5OTk4SDUyLjg3OTdWOC41NTU5OEM1My4zNDc3IDguOTI3OTggNTMuOTU5NyA5LjE0Mzk4IDU0LjY3OTcgOS4xNDM5OEM1Ni4yNjM3IDkuMTQzOTggNTcuNTQ3NyA3LjgyMzk4IDU3LjU0NzcgNi4xNjc5OEM1Ny41NDc3IDQuNTM1OTggNTYuMjYzNyAzLjIxNTk4IDU0LjY3OTcgMy4yMTU5OFpNNTQuNDk5NyA4LjAxNTk4QzUzLjg3NTcgOC4wMTU5OCA1My4yOTk3IDcuNzk5OTggNTIuODc5NyA3LjIxMTk4VjUuMTM1OThDNTMuMjk5NyA0LjU0Nzk4IDUzLjg3NTcgNC4zNDM5OCA1NC40OTk3IDQuMzQzOThDNTUuNTQzNyA0LjM0Mzk4IDU2LjI5OTcgNS4xNzE5OCA1Ni4yOTk3IDYuMTY3OThDNTYuMjk5NyA3LjE3NTk4IDU1LjU0MzcgOC4wMTU5OCA1NC40OTk3IDguMDE1OThaIixmaWxsOiIjNUQ2OTZGIn0pLEkoInBhdGgiLHtkOiJNNjMuMzM0NyAzLjM0Nzk4TDYxLjM5MDcgNy43NjM5OEw1OS4yNjY3IDMuMzQ3OThINTcuOTM0N0w2MC44MTQ3IDkuMDgzOThMNTkuNjI2NyAxMS43ODRINjAuOTM0N0w2NC42NTQ3IDMuMzQ3OThINjMuMzM0N1oiLGZpbGw6IiM1RDY5NkYifSksSSgicGF0aCIse2Q6Ik03MS4xNDY2IDQuMzQ2NjFDNjkuODA5MiA0LjA1MDM4IDY5LjEzMSAzLjUzMDAxIDY5LjEzMSAyLjgwMDY1QzY5LjEzMSAyLjA0NzA1IDY5Ljg1NDYgMS40NzgyMiA3MC44MTQyIDEuNDc4MjJDNzEuODAzNCAxLjQ3ODIyIDcyLjU0OTYgMi4xMDMzOSA3Mi41NDk2IDIuOTMyMVYyLjk5ODEzSDczLjkxNjVWMi45MzIxQzczLjkxNjUgMS40MTc2NCA3Mi41ODgzIDAuMjcyNzA1IDcwLjgyNzEgMC4yNzI3MDVDNjkuOTc4NCAwLjI3MjcwNSA2OS4yMDA5IDAuNTMzMTkxIDY4LjYzNzkgMS4wMDU3QzY4LjM1ODQgMS4yMzYxOSA2OC4xMzM5IDEuNTI0ODcgNjcuOTgwNSAxLjg1MTFDNjcuODI3MSAyLjE3NzMzIDY3Ljc0ODYgMi41MzMwMyA2Ny43NTA2IDIuODkyNzNDNjcuNzQ1MSAzLjIyMjU1IDY3LjgxMzcgMy41NDk0OSA2Ny45NTE1IDMuODQ5OTRDNjguMDg5NCA0LjE1MDM4IDY4LjI5MyA0LjQxNjg2IDY4LjU0NzggNC42MzAxMkM2OS4wMjE4IDUuMDQyNjYgNjkuNjk0NSA1LjM0Nzk4IDcwLjU0NjMgNS41Mzg4QzcxLjk4MDYgNS44NTUwMiA3Mi43MDc4IDYuMzkyOTYgNzIuNzA3OCA3LjEzNjg2QzcyLjcwNzggNy45NDMxNiA3MS45MTU2IDguNTUwNzYgNzAuODY4MiA4LjU1MDc2QzY5Ljc4MDQgOC41NTA3NiA2OC45NTk5IDcuODc1MzEgNjguOTU5OSA2Ljk3OTk2VjYuOTEzOTNINjcuNTkxOFY2Ljk3OTk2QzY3LjU5MTggOC41NjM0OCA2OC45OTQyIDkuNzU2ODggNzAuODUzNSA5Ljc1Njg4QzcxLjc0MjYgOS43NTY4OCA3Mi41NTg4IDkuNDg3MzEgNzMuMTUxOCA4Ljk5NjYyQzczLjQ0NiA4Ljc1ODMxIDczLjY4MjcgOC40NTgxIDczLjg0NDUgOC4xMTc5Qzc0LjAwNjMgNy43Nzc3IDc0LjA4OTEgNy40MDYxMSA3NC4wODcgNy4wMzAyNEM3NC4wODcgNS42ODU0IDczLjA5OTEgNC43ODIxNyA3MS4xNDY2IDQuMzQ2NjFaIixmaWxsOiIjNUQ2OTZGIn0pLEkoInBhdGgiLHtkOiJNNzguNzk4NiAyLjUwODA2Qzc4LjI4NzQgMi41MDE3NSA3Ny43ODIzIDIuNjE3NiA3Ny4zMjYzIDIuODQ1NzZDNzYuODcwMyAzLjA3MzkxIDc2LjQ3NjggMy40MDc1OSA3Ni4xNzk1IDMuODE4MzdWMi42NjczOEg3NC44Nzg5VjEyLjA3NTJINzYuMTc5NVY4LjQ4NzE2Qzc2LjQ3NjggOC44OTc5IDc2Ljg3MDMgOS4yMzE1MiA3Ny4zMjYzIDkuNDU5NTdDNzcuNzgyNCA5LjY4NzYzIDc4LjI4NzUgOS44MDMzNSA3OC43OTg2IDkuNzk2ODdDODAuODE2NyA5Ljc5Njg3IDgyLjMzODEgOC4yMzAzMSA4Mi4zMzgxIDYuMTUyNDZDODIuMzM4MSA0LjA3NDYyIDgwLjgxNjcgMi41MDgwNiA3OC43OTg2IDIuNTA4MDZaTTgwLjk4MzUgNi40MjI2NEM4MC45MzE2IDYuOTYyOSA4MC42OTIxIDcuNDY4NzkgODAuMzA1NiA3Ljg1NDRDNzkuOTE5IDguMjQwMDEgNzkuNDA5MyA4LjQ4MTU2IDc4Ljg2MyA4LjUzODA0Qzc4LjEzNjkgOC42MTA3NCA3Ny40NjA1IDguNDAyOTUgNzYuOTU4MyA3Ljk1NDA3Qzc2LjQ1NjEgNy41MDUxOCA3Ni4xNzk1IDYuODYzNjUgNzYuMTc5NSA2LjE1MjQ2Qzc2LjE3OTUgNC43ODQ2IDc3LjIxMjIgMy43NTI5NSA3OC41ODE1IDMuNzUyOTVDNzkuMjkwNCAzLjc1Mjk1IDc5LjkzMDYgNC4wMjE5MSA4MC4zNzc2IDQuNTEwMThDODAuODM4NyA1LjAxMTE2IDgxLjA1NCA1LjY5MDI1IDgwLjk4MzUgNi40MjI2NFoiLGZpbGw6IiM1RDY5NkYifSksSSgicGF0aCIse2Q6Ik05OC4yOTA4IDIuNjY5MlYzLjgwNzQ3Qzk3LjY3NzYgMi45Nzg3NSA5Ni43MzAyIDIuNTA4MDYgOTUuNjU4MyAyLjUwODA2QzkzLjY0ODIgMi41MDgwNiA5Mi4xMzIzIDQuMDQ2MTUgOTIuMTMyMyA2LjA4NTgyQzkyLjEzMjMgOC4xMjU1IDkzLjY0ODIgOS42NjI5OSA5NS42NTgzIDkuNjYyOTlDOTYuNzM0NSA5LjY2Mjk5IDk3LjY4MTkgOS4xOTcxNCA5OC4yOTA4IDguMzc2OTFWOC41NTE5OEM5OC4yOTA4IDkuOTY4OTEgOTcuMzkwNiAxMC44ODQzIDk1Ljk5NzQgMTAuODg0M0M5NS4wNTYxIDEwLjg4NDMgOTQuMjcxOCAxMC40NzY2IDkzLjg5OTYgOS43OTM4NEw5My44ODA2IDkuNzU4N0g5Mi41Mzg5TDkyLjU2OTUgOS44NDY1NEM5Mi43OTYxIDEwLjUxNCA5My4yMzkyIDExLjA4ODkgOTMuODMwMyAxMS40ODIyQzk0LjQyMzMgMTEuODcyMyA5NS4xNzI2IDEyLjA3ODMgOTUuOTk3NCAxMi4wNzgzQzk3LjA1NTIgMTIuMDc4MyA5Ny45NTU0IDExLjc0NTEgOTguNjAxNyAxMS4xMTU3Qzk5LjI0ODEgMTAuNDg2MiA5OS41OTE1IDkuNjAxMiA5OS41OTE1IDguNTY3NzNWMi42NjkySDk4LjI5MDhaTTk3LjU2MTEgNy44NDJDOTcuMDA5MiA4LjM2NDE4IDk2LjIyMjUgOC41ODM0OCA5NS40MDAxIDguNDQyOTRDOTQuOTEzMiA4LjM1Nzk2IDk0LjQ2NjQgOC4xMjE4NCA5NC4xMjQ1IDcuNzY4ODlDOTMuNzgyNyA3LjQxNTkzIDkzLjU2MzYgNi45NjQ1MiA5My40OTkyIDYuNDgwMTlDOTMuMzgzMyA1LjY2NTQxIDkzLjYzMSA0Ljg5MzY0IDk0LjE3ODYgNC4zNjQxOEM5NC42MzgzIDMuOTI3NDEgOTUuMjU0MiAzLjY4Nzg4IDk1Ljg5MTkgMy42OTc4MkM5Ni4wNDY0IDMuNjk3OTUgOTYuMjAwNiAzLjcxMDMxIDk2LjM1MzEgMy43MzQ3N0M5Ny4zNDU5IDMuODkzNDkgOTguMTMxNCA0LjcwNDAzIDk4LjI2MzIgNS43MTAyNEM5OC4zNzQ5IDYuNTM4MzUgOTguMTE3OSA3LjMxNDM2IDk3LjU2MTEgNy44NDJaIixmaWxsOiIjNUQ2OTZGIn0pLEkoInBhdGgiLHtkOiJNOTAuNzA1IDAuMDk5NTk3NUM5MC40NjAyIDAuMDQ2NzczIDkwLjIwNDMgMC4wOTExOTcxIDg5Ljk5MjUgMC4yMjMyNjlDODkuNzgwNiAwLjM1NTM0IDg5LjYyOTkgMC41NjQ0NTIgODkuNTcyOSAwLjgwNTQwOUM4OS41MTU5IDEuMDQ2MzcgODkuNTU3MSAxLjI5OTgyIDg5LjY4NzcgMS41MTA5OEM4OS44MTgzIDEuNzIyMTUgOTAuMDI3NyAxLjg3NDA3IDkwLjI3MDggMS45MzM5MUM5MC4zNDE1IDEuOTQ5NTQgOTAuNDEzNiAxLjk1NzQ3IDkwLjQ4NiAxLjk1NzU0QzkwLjcyIDEuOTU3OSA5MC45NDU4IDEuODczMjUgOTEuMTIwNiAxLjcxOTczQzkxLjI5NTUgMS41NjYyIDkxLjQwNyAxLjM1NDUyIDkxLjQzNDEgMS4xMjVDOTEuNDYxMSAwLjg5NTQ3IDkxLjQwMTcgMC42NjQxMzUgOTEuMjY3MyAwLjQ3NTA0NkM5MS4xMzI5IDAuMjg1OTU4IDkwLjkzMjcgMC4xNTIzMjUgOTAuNzA1IDAuMDk5NTk3NVYwLjA5OTU5NzVaIixmaWxsOiIjNUQ2OTZGIn0pLEkoInBhdGgiLHtkOiJNODkuODM2NiA4LjM5MTQzSDg4LjcxNUM4Ny45MTc4IDguMzkxNDMgODcuNDM4OSA3Ljg1NTMxIDg3LjQzODkgNi45NTY5M0M4Ny40Mzg5IDYuMDgwOTYgODcuODY4MSA1LjAzNjU5IDg4Ljc0MzIgMy43NjQ0NEw4OC43NTQ4IDMuNzQ3NDhWMy4zODgyNUw4NS4wMjcxIDIuODY3MjdDODUuMDI4NCAyLjcxNTUzIDg0Ljk4ODYgMi41NjYyMiA4NC45MTE4IDIuNDM0NzhDODQuODM1MSAyLjMwMzM1IDg0LjcyNDEgMi4xOTQ1OCA4NC41OTA1IDIuMTE5NzNDODQuMjU2MyAxLjkzOCA4My44OTA4IDEuOTM4IDgzLjU4NzkgMi4xMTM2OEM4My40MzYxIDIuMjAyMyA4My4zMTIyIDIuMzMwNzcgODMuMjMgMi40ODQ4QzgzLjE0NzcgMi42Mzg4NCA4My4xMTAzIDIuODEyNCA4My4xMjE5IDIuOTg2MThDODMuMTMzNiAzLjE1OTk2IDgzLjE5MzggMy4zMjcxNCA4My4yOTU4IDMuNDY5MTRDODMuMzk3OSAzLjYxMTE0IDgzLjUzNzkgMy43MjIzOCA4My43MDAxIDMuNzkwNDlMODIuNTQwNSA5LjYzNzUzSDgzLjgyODNMODQuODk3NyA0LjA4NTUxTDg2LjkxMTUgNC40MjExMUM4Ni4zNzAxIDUuMzgwMDcgODYuMDk1MyA2LjI3NDIxIDg2LjA5NTMgNy4wNzg2OUM4Ni4wOTUzIDguNTYzNDcgODcuMDA0MSA5LjUzNTc2IDg4LjQ3MzQgOS42Mjk2NVY5LjYzNzUzSDkxLjEzNDFWMi42OTA5OUg4OS44MzY2VjguMzkxNDNaIixmaWxsOiIjNUQ2OTZGIn0pKX0sTXQ9ZnVuY3Rpb24oKXtyZXR1cm4gZnVuY3Rpb24odCl7dmFyIGU9dC5hcHAuZGVjay5jYXJkc3x8W10sbj1lLmZpbHRlcigoZnVuY3Rpb24odCl7cmV0dXJuIHQudHlwZX0pKSxyPXQuYXBwLmRlY2suaW5kZXgsbz10LmFwcCxpPW8uc2hvd1N1cnZleUJyYW5kLGE9by5tYXJrZXRpbmdVcmwsYz1vLnNsdWdOYW1lLHM9by5zdXJ2ZXlJZCx1PWZ1bmN0aW9uKCl7cmV0dXJuIGk/SSgiYSIse3N0eWxlOiJkaXNwbGF5OiBibG9jazsgbWFyZ2luOiA1cHggMCAxMHB4IDAiLGhyZWY6IiIuY29uY2F0KGEsIj91dG1fc291cmNlPXN1cnZleV9icmFuZGluZyZ1dG1fbWVkaXVtPXdlYnNpdGUmdXRtX2NhbXBhaWduPSIpLmNvbmNhdChjLCImdXRtX2NvbnRlbnQ9IikuY29uY2F0KHMpLHRhcmdldDoiX2JsYW5rIn0sQXQpOm51bGx9O2lmKHIrMT09PWUubGVuZ3RofHwhbnx8MT09PW4ubGVuZ3RoKXJldHVybiBJKCJmb290ZXIiLHtjbGFzc05hbWU6InVsLWZvb3RlciJ9LHUpO3JldHVybiBJKCJmb290ZXIiLHtjbGFzc05hbWU6InVsLWZvb3RlciJ9LChmdW5jdGlvbigpe2lmKG4ubGVuZ3RoPjEmJm4ubGVuZ3RoPD0xMCl7dmFyIGU9bi5tYXAoKGZ1bmN0aW9uKGUsbil7cmV0dXJuIEkoInNwYW4iLHtjbGFzc05hbWU6InVsLWZvb3Rlci1idWJibGUiLGtleTpuLHN0eWxlOnI9PT1uP3tiYWNrZ3JvdW5kQ29sb3I6dC5hcHAuYm9yZGVyfTp7Ym9yZGVyQ29sb3I6dC5hcHAuYm9yZGVyfX0pfSkpO3JldHVybiBJKCJkaXYiLHtzdHlsZToibWFyZ2luLWJvdHRvbTogMTBweDsifSxlKX1yZXR1cm4gbnVsbH0pLHUpfX0sX3Q9ZnVuY3Rpb24odCl7cmV0dXJuIHQmJnQuY2FwdGlvblRleHQ/SSgicCIse2lkOnV0LGNsYXNzTmFtZTp1dH0sdC5jYXB0aW9uVGV4dCk6bnVsbH0sVHQ9ZnVuY3Rpb24odCxlKXtyZXR1cm4gSSgicCIsdD97aWQ6c3QsY2xhc3NOYW1lOnN0LHJvbGU6ImhlYWRpbmcifTp7aWQ6c3QsY2xhc3NOYW1lOnN0LHN0eWxlOiJtYXJnaW4tYm90dG9tOiAxNXB4Iixyb2xlOiJoZWFkaW5nIn0sZSl9LFJ0PWZ1bmN0aW9uKHQpe3JldHVybiB0JiZ0LmJ1dHRvblRleHQ/dC5idXR0b25UZXh0OiJOZXh0In0sTHQ9ZnVuY3Rpb24odCl7cmV0dXJuIHQmJnQuc2tpcEJ1dHRvblRleHQ/dC5za2lwQnV0dG9uVGV4dDoiU2tpcCJ9LFB0PW4oOTczNDMpLE50PW4ubihQdCk7ZnVuY3Rpb24gRHQodCxlKXtlKHQpfXZhciBGdD1mdW5jdGlvbih0KXt2YXIgZT10LmJvcmRlcixuPXQubGFiZWwscj10LnNlbGVjdGVkLG89KHQuaW5kZXgsdC5pZCksaT10Lm9uU2VsZWN0LGE9dC5pc1JhZGlvLGM9dC51c2VNb2JpbGVTdHlsaW5nLHM9ZnVuY3Rpb24odCl7dmFyIG49ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImNob2ljZS1kaXYtIi5jb25jYXQobykpLHI9ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoInJhZGlvLSIuY29uY2F0KG8pKTtuJiYobi5zdHlsZS5ib3JkZXJDb2xvcj1lKSxyJiYoci5zdHlsZS5ib3JkZXJXaWR0aD0iNnB4IixyLnN0eWxlLmJvcmRlckNvbG9yPWUsci5zdHlsZS5ib3hTaGFkb3c9Im5vbmUiKX0sdT1mdW5jdGlvbih0KXt2YXIgZT1kb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiY2hvaWNlLWRpdi0iLmNvbmNhdChvKSksbj1kb2N1bWVudC5nZXRFbGVtZW50QnlJZCgicmFkaW8tIi5jb25jYXQobykpO2UmJihlLnN0eWxlLmJvcmRlckNvbG9yPSIjZTZlNmU2IiksbiYmKG4uc3R5bGUuYm9yZGVyV2lkdGg9IjFweCIsbi5zdHlsZS5ib3JkZXJDb2xvcj0iIzMyMzIzMiIsbi5zdHlsZS5ib3hTaGFkb3c9Imluc2V0IDNweCAzcHggMHB4IHJnYmEoMCwgMCwgMCwgMC4xKSIpfSxsPWZ1bmN0aW9uKHQpe3Quc3RvcFByb3BhZ2F0aW9uKCksdSgpLGkobyl9LGY9e29uY2xpY2s6ZnVuY3Rpb24odCl7cmV0dXJuIGwodCl9LG9ua2V5cHJlc3M6ZnVuY3Rpb24odCl7cmV0dXJuIGZ1bmN0aW9uKHQpezEzIT10LmtleUNvZGUmJjMyIT10LmtleUNvZGV8fGwodCl9KHQpfX07Im9udG91Y2hzdGFydCJpbiBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQ/KGYub250b3VjaHN0YXJ0PXMsZi5vbnRvdWNoY2FuY2VsPXUsZi5vbnRvdWNobW92ZT11LGYub250b3VjaGVuZD11KTooZi5vbm1vdXNlZG93bj1zLGYub25tb3VzZWxlYXZlPXUpO3ZhciBkPWE/InJhZGlvLSIuY29uY2F0KG8pOiJjaGVja2JveC0iLmNvbmNhdChvKTtyZXR1cm4gSSgiZGl2IixNKCkoe2NsYXNzTmFtZTpGKGZ0KHR0LGMpKSxpZDoiY2hvaWNlLWRpdi0iLmNvbmNhdChvKX0sZiksIWEmJkkoImRpdiIse2NsYXNzTmFtZTpudCxpZDpkLHN0eWxlOnI/e2JhY2tncm91bmRDb2xvcjplLGJvcmRlckNvbG9yOmUsYm94U2hhZG93OiJub25lIn06e30scm9sZToiY2hlY2tib3giLCJhcmlhLWxhYmVsbGVkYnkiOiIiLmNvbmNhdChzdCwiIGxhYmVsLSIpLmNvbmNhdChvKSwiYXJpYS1jaGVja2VkIjpyLHRhYmluZGV4OjB9LHImJkkoInN2ZyIse3dpZHRoOiIxMCIsaGVpZ2h0OiIxMCIsdmlld0JveDoiMCAwIDEwIDEwIixmaWxsOiJub25lIix4bWxuczoiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmcifSxJKCJwYXRoIix7ZDoiTTkuMTUzNzcgMS4zMDc3NEw0LjA3Njg1IDguMjMwODJMMS4zMDc2MiA1LjAwMDA1IixzdHJva2U6IndoaXRlIiwic3Ryb2tlLXdpZHRoIjoiMiIsInN0cm9rZS1saW5lY2FwIjoicm91bmQifSkpKSxhJiZJKCJkaXYiLHtjbGFzc05hbWU6cnQsaWQ6ZCxyb2xlOiJyYWRpbyIsImFyaWEtbGFiZWxsZWRieSI6IiIuY29uY2F0KHN0LCIgbGFiZWwtIikuY29uY2F0KG8pLHRhYmluZGV4OjB9KSxJKCJsYWJlbCIse2NsYXNzTmFtZTpGKGZ0KGV0LGMpKSxmb3I6ZCxpZDoibGFiZWwtIi5jb25jYXQobyl9LG4pKX07dmFyIFV0LEJ0PW5ldyBVaW50OEFycmF5KDE2KTtmdW5jdGlvbiB6dCgpe2lmKCFVdCYmIShVdD0idW5kZWZpbmVkIiE9dHlwZW9mIGNyeXB0byYmY3J5cHRvLmdldFJhbmRvbVZhbHVlcyYmY3J5cHRvLmdldFJhbmRvbVZhbHVlcy5iaW5kKGNyeXB0byl8fCJ1bmRlZmluZWQiIT10eXBlb2YgbXNDcnlwdG8mJiJmdW5jdGlvbiI9PXR5cGVvZiBtc0NyeXB0by5nZXRSYW5kb21WYWx1ZXMmJm1zQ3J5cHRvLmdldFJhbmRvbVZhbHVlcy5iaW5kKG1zQ3J5cHRvKSkpdGhyb3cgbmV3IEVycm9yKCJjcnlwdG8uZ2V0UmFuZG9tVmFsdWVzKCkgbm90IHN1cHBvcnRlZC4gU2VlIGh0dHBzOi8vZ2l0aHViLmNvbS91dWlkanMvdXVpZCNnZXRyYW5kb212YWx1ZXMtbm90LXN1cHBvcnRlZCIpO3JldHVybiBVdChCdCl9dmFyIFZ0PS9eKD86WzAtOWEtZl17OH0tWzAtOWEtZl17NH0tWzEtNV1bMC05YS1mXXszfS1bODlhYl1bMC05YS1mXXszfS1bMC05YS1mXXsxMn18MDAwMDAwMDAtMDAwMC0wMDAwLTAwMDAtMDAwMDAwMDAwMDAwKSQvaTtmb3IodmFyIEh0PWZ1bmN0aW9uKHQpe3JldHVybiJzdHJpbmciPT10eXBlb2YgdCYmVnQudGVzdCh0KX0scXQ9W10sV3Q9MDtXdDwyNTY7KytXdClxdC5wdXNoKChXdCsyNTYpLnRvU3RyaW5nKDE2KS5zdWJzdHIoMSkpO3ZhciBHdD1mdW5jdGlvbih0KXt2YXIgZT1hcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXT9hcmd1bWVudHNbMV06MCxuPShxdFt0W2UrMF1dK3F0W3RbZSsxXV0rcXRbdFtlKzJdXStxdFt0W2UrM11dKyItIitxdFt0W2UrNF1dK3F0W3RbZSs1XV0rIi0iK3F0W3RbZSs2XV0rcXRbdFtlKzddXSsiLSIrcXRbdFtlKzhdXStxdFt0W2UrOV1dKyItIitxdFt0W2UrMTBdXStxdFt0W2UrMTFdXStxdFt0W2UrMTJdXStxdFt0W2UrMTNdXStxdFt0W2UrMTRdXStxdFt0W2UrMTVdXSkudG9Mb3dlckNhc2UoKTtpZighSHQobikpdGhyb3cgVHlwZUVycm9yKCJTdHJpbmdpZmllZCBVVUlEIGlzIGludmFsaWQiKTtyZXR1cm4gbn07dmFyIFp0PWZ1bmN0aW9uKHQsZSxuKXt2YXIgcj0odD10fHx7fSkucmFuZG9tfHwodC5ybmd8fHp0KSgpO2lmKHJbNl09MTUmcls2XXw2NCxyWzhdPTYzJnJbOF18MTI4LGUpe249bnx8MDtmb3IodmFyIG89MDtvPDE2OysrbyllW24rb109cltvXTtyZXR1cm4gZX1yZXR1cm4gR3Qocil9O2NvbnN0ICR0PSJodHRwczovL2Nkbi5zcHJpZy5jb20iLFl0PXQ9PnQrIi1sb2FkaW5nLXNwaW5lciIsSnQ9ImhpZGRlbiIsS3Q9InZpc2libGUiLFh0PSJ1bC12aWRlby1yZWNvcmRlci1jYW1lcmEtb2ZmLWJ1dHRvbiIsUXQ9InVsLXJlY29yZGluZy1pbi1zZXNzaW9uIix0ZT1be3R5cGU6ImxpbmsiLGNvbnRlbnQ6YCR7JHR9L2RlcGVuZGVuY2llcy92aWRlb2pzLXJlY29yZC00LjUuMC5taW4uY3NzYH0se3R5cGU6InNjcmlwdCIsY29udGVudDpgJHskdH0vZGVwZW5kZW5jaWVzL1JlY29yZFJUQy01LjYuMi5qc2B9LHt0eXBlOiJzY3JpcHQiLGNvbnRlbnQ6YCR7JHR9L2RlcGVuZGVuY2llcy9hZGFwdGVyLjguMC4wLm1pbi5qc2B9LHt0eXBlOiJzY3JpcHQiLGNvbnRlbnQ6YCR7JHR9L2RlcGVuZGVuY2llcy92aWRlb2pzLXJlY29yZC00LjUuMC5taW4uanNgfSx7dHlwZToic2NyaXB0Iixjb250ZW50OmAkeyR0fS91c2VybGVhcC13ZWItdXBjaHVuay12Mi4yLjIuanNgfV0sZWU9W3t0eXBlOiJsaW5rIixjb250ZW50OmAkeyR0fS9kZXBlbmRlbmNpZXMvdmlkZW8tanMtNy4xOC4wLm1pbi5jc3NgfSx7dHlwZToic2NyaXB0Iixjb250ZW50OmAkeyR0fS9kZXBlbmRlbmNpZXMvdmlkZW8tanMtNy4xOC4wLm1pbi5qc2B9LHt0eXBlOiJzdHlsZSIsY29udGVudDoiLyogcHJvZ3Jlc3MgY29udHJvbCBzdHlsZXMgKi9cbi52aWRlby1qcyAudmpzLXByb2dyZXNzLWNvbnRyb2wgLnZqcy1wcm9ncmVzcy1ob2xkZXIge1xuICBtYXJnaW46IDAgMHB4O1xufVxuXG4udmlkZW8tanMgLnZqcy1wcm9ncmVzcy1jb250cm9sIHtcbiAgcG9zaXRpb246IGFic29sdXRlO1xuICBoZWlnaHQ6IDNweDtcbiAgd2lkdGg6IDEwMCU7XG59XG4vKiBwb3NpdGlvbiBhbmQgYWxpZ24gdGhlIGJ1dHRvbnMgYW5kIGJ1dHRvbiB0ZXh0cyAqL1xuLnVsLWNvbnRyb2wtcGFuZWwge1xuICBib3R0b206IDA7XG4gIHdpZHRoOiAxMDAlO1xuICBmbGV4LWRpcmVjdGlvbjogY29sdW1uO1xuICBiYWNrZ3JvdW5kLWNvbG9yOiB3aGl0ZTtcbiAgaGVpZ2h0OiBmaXQtY29udGVudDtcbiAgei1pbmRleDogMjtcbiAgYmFja2dyb3VuZC1jb2xvcjogI0Y4RjhGODtcbn1cblxuLnVsLWJ1dHRvbnMtcGFuZWwge1xuICBkaXNwbGF5OiBmbGV4O1xuICBjb2xvcjogYmxhY2s7XG4gIGhlaWdodDogNTBweDtcbiAgcGFkZGluZzogMnB4IDE0cHggMDtcbn1cblxuLnZpZGVvLWpzIC52anMtdm9sdW1lLXBhbmVsIHtcbiAgaGVpZ2h0OiAzMHB4O1xuICB3aWR0aDogNDBweDtcbn1cblxuLnVsLWJ1dHRvbnMtcGFuZWwgPiAudmpzLWJ1dHRvbiB7XG4gIGJhY2tncm91bmQtY29sb3I6IHJnYmEoMCwgMCwgMCwgMC4wNSk7XG4gIGJvcmRlci1yYWRpdXM6IDUwJTtcbiAgaGVpZ2h0OiAzZW07XG4gIHdpZHRoOiAzZW07XG4gIG1hcmdpbjogMCAxMHB4O1xufVxuXG5zcGFuLnVsLWJ1dHRvbi10ZXh0IHtcbiAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xuICB0cmFuc2Zvcm06IHRyYW5zbGF0ZSgwcHgsIDI1cHgpO1xuICAtbW96LXRyYW5zZm9ybTogdHJhbnNsYXRlKDFweCwgMjVweCk7XG59XG5cbiN1bC1jYW1lcmEtYnV0dG9uIHtcbiAgd2hpdGUtc3BhY2U6IG5vd3JhcDtcbn1cblxuLnVsLWluYWN0aXZlIHtcbiAgb3BhY2l0eTogMC4zO1xuICBjdXJzb3I6IGRlZmF1bHQ7XG4gIHBvaW50ZXItZXZlbnRzOiBub25lO1xufVxuXG4udmlkZW8tanMgLnZqcy12b2x1bWUtY29udHJvbC52anMtdm9sdW1lLWhvcml6b250YWwge1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAjZmZmO1xuICB6LWluZGV4OiAxO1xufVxuXG4udmpzLXZvbHVtZS1iYXIudmpzLXNsaWRlci1ob3Jpem9udGFsIC52anMtdm9sdW1lLWxldmVsIHtcbiAgYmFja2dyb3VuZC1jb2xvcjogYmxhY2s7XG59XG5cbi52aWRlby1qcyAudmpzLXZvbHVtZS1wYW5lbC52anMtdm9sdW1lLXBhbmVsLWhvcml6b250YWwudmpzLWhvdmVyLFxuLnZpZGVvLWpzIC52anMtdm9sdW1lLXBhbmVsLnZqcy12b2x1bWUtcGFuZWwtaG9yaXpvbnRhbC52anMtc2xpZGVyLWFjdGl2ZSxcbi52aWRlby1qcyAudmpzLXZvbHVtZS1wYW5lbC52anMtdm9sdW1lLXBhbmVsLWhvcml6b250YWw6YWN0aXZlIHtcbiAgd2lkdGg6IDQwcHg7XG59XG5cbi52aWRlby1qcyAudmpzLXZvbHVtZS1wYW5lbCAudmpzLXZvbHVtZS1jb250cm9sLnZqcy1zbGlkZXItYWN0aXZlLFxuLnZpZGVvLWpzIC52anMtdm9sdW1lLXBhbmVsIC52anMtdm9sdW1lLWNvbnRyb2w6YWN0aXZlLFxuLnZpZGVvLWpzIC52anMtdm9sdW1lLXBhbmVsLnZqcy1ob3ZlciAudmpzLW11dGUtY29udHJvbCB+IC52anMtdm9sdW1lLWNvbnRyb2wsXG4udmlkZW8tanMgLnZqcy12b2x1bWUtcGFuZWwudmpzLWhvdmVyIC52anMtdm9sdW1lLWNvbnRyb2wsXG4udmlkZW8tanMgLnZqcy12b2x1bWUtcGFuZWw6YWN0aXZlIC52anMtdm9sdW1lLWNvbnRyb2wsXG4udmlkZW8tanMgLnZqcy12b2x1bWUtcGFuZWw6Zm9jdXMgLnZqcy12b2x1bWUtY29udHJvbCB7XG4gIHZpc2liaWxpdHk6IHZpc2libGU7XG4gIGxlZnQ6IDQwcHg7XG4gIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgdHJhbnNpdGlvbjogdmlzaWJpbGl0eSAwLjFzLCBvcGFjaXR5IDAuMXMsIGhlaWdodCAwLjFzLCB3aWR0aCAwLjFzLCBsZWZ0IDBzLCB0b3AgMHM7XG59XG5cbi8qIHBsYXkgYnV0dG9uIGN1c3RvbWl6YXRpb24gKi9cbi52aWRlby1qcyAudmpzLXBsYXktY29udHJvbCB7XG4gIGNvbG9yOiBibGFjaztcbn1cblxuLnZpZGVvLWpzIC52anMtcGxheS1jb250cm9sIC52anMtaWNvbi1wbGFjZWhvbGRlcjpiZWZvcmUge1xuICBjb250ZW50OiB1cmwoXCJkYXRhOmltYWdlL3N2Zyt4bWwsJTNDc3ZnIHdpZHRoPScxMicgaGVpZ2h0PScxMicgdmlld0JveD0nMCAwIDEyIDEyJyBmaWxsPSdub25lJyB4bWxucz0naHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmcnJTNFJTNDcGF0aCBkPSdNMTAuNTM2MyA2LjQwMjI2TDEuOTM5NTggMTAuNzAwNkMxLjY0MDM3IDEwLjg1MDIgMS4yODgzMyAxMC42MzI2IDEuMjg4MzMgMTAuMjk4MVYxLjcwMTRDMS4yODgzMyAxLjM2Njg4IDEuNjQwMzcgMS4xNDkzMSAxLjkzOTU4IDEuMjk4OTFMMTAuNTM2MyA1LjU5NzI3QzEwLjg2OCA1Ljc2MzExIDEwLjg2OCA2LjIzNjQyIDEwLjUzNjMgNi40MDIyNlonIHN0cm9rZT0nYmxhY2snIHN0cm9rZS13aWR0aD0nMS41JyBzdHJva2UtbGluZWNhcD0ncm91bmQnLyUzRSUzQy9zdmclM0VcIik7XG59XG5cbi8qIHBvc2l0aW9uIGFuZCBzdHlsZSB0aGUgY3VycmVudCB0aW1lciAqL1xuLnVsLXRpbWUtcGFuZWwge1xuICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gIGJvdHRvbTogODBweDtcbiAgbGVmdDogMTBweDtcbiAgaGVpZ2h0OiAyMnB4O1xuICBjb2xvcjogYmxhY2s7XG4gIGJvcmRlcjogMXB4IHNvbGlkICNlMGUwZWI7XG4gIGJvcmRlci1yYWRpdXM6IDIzcHg7XG4gIGJhY2tncm91bmQtY29sb3I6IHdoaXRlO1xuICB3aWR0aDogZml0LWNvbnRlbnQ7XG59XG5cbi52aWRlby1qcyAudmpzLWN1cnJlbnQtdGltZSxcbi52anMtbm8tZmxleCAudmpzLWN1cnJlbnQtdGltZSB7XG4gIGRpc3BsYXk6IGZsZXg7XG4gIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gIHRleHQtYWxpZ246IGNlbnRlcjtcbn1cblxuLyogcmVtb3ZlIHRoZSBkb3QgcHJvZ3Jlc3MgaW5kaWNhdG9yICovXG4udmlkZW8tanMgLnZqcy1wbGF5LXByb2dyZXNzOmJlZm9yZSxcbi52aWRlby1qcyAudmpzLXZvbHVtZS1sZXZlbDpiZWZvcmUsXG4udmpzLWljb24tY2lyY2xlOmJlZm9yZSxcbi52anMtc2Vlay10by1saXZlLWNvbnRyb2wgLnZqcy1pY29uLXBsYWNlaG9sZGVyOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IG5vbmU7XG59XG5cbi52aWRlby1qcyAudmpzLW11dGUtY29udHJvbCAudmpzLWljb24tcGxhY2Vob2xkZXI6YmVmb3JlIHtcbiAgY29udGVudDogdXJsKFwiZGF0YTppbWFnZS9zdmcreG1sLCUzQ3N2ZyB3aWR0aD0nMTknIGhlaWdodD0nMTQnIGZpbGw9J25vbmUnIHhtbG5zPSdodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyclM0UlM0NwYXRoIGZpbGwtcnVsZT0nZXZlbm9kZCcgY2xpcC1ydWxlPSdldmVub2RkJyBkPSdNOC44MjUuMzI0QS43NS43NSAwIDAxOS4yNSAxdjExLjY2N2EuNzUuNzUgMCAwMS0xLjIxOS41ODVsLTMuOTYtMy4xNjlIMWEuNzUuNzUgMCAwMS0uNzUtLjc1di01YS43NS43NSAwIDAxLjc1LS43NWgzLjA3TDguMDMxLjQxNGEuNzUuNzUgMCAwMS43OTQtLjA5ek03Ljc1IDIuNTZMNC44MDIgNC45MmEuNzUuNzUgMCAwMS0uNDY5LjE2NEgxLjc1djMuNWgyLjU4M2EuNzUuNzUgMCAwMS40NjkuMTY1bDIuOTQ4IDIuMzU4VjIuNTZ6TTE0LjkxMS40N2EuNzUuNzUgMCAwMTEuMDYxIDAgOS4wODQgOS4wODQgMCAwMTAgMTIuODQ0Ljc1Ljc1IDAgMDEtMS4wNi0xLjA2IDcuNTg0IDcuNTg0IDAgMDAwLTEwLjcyNC43NS43NSAwIDAxMC0xLjA2ek0xMS45NyAzLjQxYS43NS43NSAwIDAxMS4wNiAwIDQuOTE3IDQuOTE3IDAgMDEwIDYuOTUzLjc1Ljc1IDAgMTEtMS4wNi0xLjA2IDMuNDE3IDMuNDE3IDAgMDAwLTQuODMyLjc1Ljc1IDAgMDEwLTEuMDZ6JyBmaWxsPSclMjMyNjIxMzYnLyUzRSUzQy9zdmclM0VcIik7XG59XG5cbi52aWRlby1qcyAudmpzLW11dGUtY29udHJvbC52anMtdm9sLTAgLnZqcy1pY29uLXBsYWNlaG9sZGVyOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IHVybChcImRhdGE6aW1hZ2Uvc3ZnK3htbCwlM0Nzdmcgd2lkdGg9JzE5JyBoZWlnaHQ9JzE0JyBmaWxsPSdub25lJyB4bWxucz0naHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmcnJTNFJTNDcGF0aCBkPSdNOC41IDEuMTY3TDQuMzMzIDQuNUgxdjVoMy4zMzNMOC41IDEyLjgzM1YxLjE2N3pNMTcuMTcgNC41bC01IDVNMTIuMTcgNC41bDUgNScgc3Ryb2tlPSclMjMyNjIxMzYnIHN0cm9rZS13aWR0aD0nMS41JyBzdHJva2UtbGluZWNhcD0ncm91bmQnIHN0cm9rZS1saW5lam9pbj0ncm91bmQnLyUzRSUzQy9zdmclM0VcIik7XG59XG5cbi52aWRlby1qcyAudmpzLW11dGUtY29udHJvbC52anMtdm9sLTEgLnZqcy1pY29uLXBsYWNlaG9sZGVyOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IHVybChcImRhdGE6aW1hZ2Uvc3ZnK3htbCwlM0Nzdmcgd2lkdGg9JzE5JyBoZWlnaHQ9JzE0JyB2aWV3Qm94PScwIDAgMTkgMTQnIGZpbGw9J25vbmUnIHhtbG5zPSdodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyclM0UlM0NwYXRoIGZpbGwtcnVsZT0nZXZlbm9kZCcgY2xpcC1ydWxlPSdldmVub2RkJyBkPSdNOC44MjQ4OSAwLjMyNDAzQzkuMDg0NzQgMC40NDg5MiA5LjI1IDAuNzExNzAzIDkuMjUgMS4wMDAwMVYxMi42NjY3QzkuMjUgMTIuOTU1IDkuMDg0NzQgMTMuMjE3OCA4LjgyNDg5IDEzLjM0MjdDOC41NjUwNCAxMy40Njc1IDguMjU2NjEgMTMuNDMyNCA4LjAzMTQ4IDEzLjI1MjNMNC4wNzAyNSAxMC4wODMzSDFDMC41ODU3ODYgMTAuMDgzMyAwLjI1IDkuNzQ3NTUgMC4yNSA5LjMzMzM0VjQuMzMzMzRDMC4yNSAzLjkxOTEzIDAuNTg1Nzg2IDMuNTgzMzQgMSAzLjU4MzM0SDQuMDcwMjVMOC4wMzE0OCAwLjQxNDM1NUM4LjI1NjYxIDAuMjM0MjUzIDguNTY1MDQgMC4xOTkxNCA4LjgyNDg5IDAuMzI0MDNaTTcuNzUgMi41NjA0OEw0LjgwMTg1IDQuOTE4OTlDNC42Njg4NyA1LjAyNTM4IDQuNTAzNjQgNS4wODMzNCA0LjMzMzMzIDUuMDgzMzRIMS43NVY4LjU4MzM0SDQuMzMzMzNDNC41MDM2NCA4LjU4MzM0IDQuNjY4ODcgOC42NDEzIDQuODAxODUgOC43NDc2OUw3Ljc1IDExLjEwNjJWMi41NjA0OFonIGZpbGw9JyUyMzI2MjEzNicvJTNFJTNDL3N2ZyUzRSUwQVwiKTtcbn1cblxuLnZpZGVvLWpzIC52anMtbXV0ZS1jb250cm9sLnZqcy12b2wtMiAudmpzLWljb24tcGxhY2Vob2xkZXI6YmVmb3JlIHtcbiAgY29udGVudDogdXJsKFwiZGF0YTppbWFnZS9zdmcreG1sLCUzQ3N2ZyB3aWR0aD0nMTknIGhlaWdodD0nMTQnIHZpZXdCb3g9JzAgMCAxOSAxNCcgZmlsbD0nbm9uZScgeG1sbnM9J2h0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnJyUzRSUzQ3BhdGggZmlsbC1ydWxlPSdldmVub2RkJyBjbGlwLXJ1bGU9J2V2ZW5vZGQnIGQ9J004LjgyNDg5IDAuMzI0MDNDOS4wODQ3NCAwLjQ0ODkyIDkuMjUgMC43MTE3MDMgOS4yNSAxLjAwMDAxVjEyLjY2NjdDOS4yNSAxMi45NTUgOS4wODQ3NCAxMy4yMTc4IDguODI0ODkgMTMuMzQyN0M4LjU2NTA0IDEzLjQ2NzUgOC4yNTY2MSAxMy40MzI0IDguMDMxNDggMTMuMjUyM0w0LjA3MDI1IDEwLjA4MzNIMUMwLjU4NTc4NiAxMC4wODMzIDAuMjUgOS43NDc1NSAwLjI1IDkuMzMzMzRWNC4zMzMzNEMwLjI1IDMuOTE5MTMgMC41ODU3ODYgMy41ODMzNCAxIDMuNTgzMzRINC4wNzAyNUw4LjAzMTQ4IDAuNDE0MzU1QzguMjU2NjEgMC4yMzQyNTMgOC41NjUwNCAwLjE5OTE0IDguODI0ODkgMC4zMjQwM1pNNy43NSAyLjU2MDQ4TDQuODAxODUgNC45MTg5OUM0LjY2ODg3IDUuMDI1MzggNC41MDM2NCA1LjA4MzM0IDQuMzMzMzMgNS4wODMzNEgxLjc1VjguNTgzMzRINC4zMzMzM0M0LjUwMzY0IDguNTgzMzQgNC42Njg4NyA4LjY0MTMgNC44MDE4NSA4Ljc0NzY5TDcuNzUgMTEuMTA2MlYyLjU2MDQ4WicgZmlsbD0nJTIzMjYyMTM2Jy8lM0UlM0NwYXRoIGZpbGwtcnVsZT0nZXZlbm9kZCcgY2xpcC1ydWxlPSdldmVub2RkJyBkPSdNMTEuOTY5OCAzLjQxMTI0QzEyLjI2MjcgMy4xMTgzOSAxMi43Mzc2IDMuMTE4NDYgMTMuMDMwNCAzLjQxMTRDMTMuOTUyMSA0LjMzMzQxIDE0LjQ2OTkgNS41ODM3NiAxNC40Njk5IDYuODg3NDhDMTQuNDY5OSA4LjE5MTIxIDEzLjk1MjEgOS40NDE1NiAxMy4wMzA0IDEwLjM2MzZDMTIuNzM3NiAxMC42NTY1IDEyLjI2MjcgMTAuNjU2NiAxMS45Njk4IDEwLjM2MzdDMTEuNjc2OCAxMC4wNzA5IDExLjY3NjcgOS41OTYgMTEuOTY5NiA5LjMwMzA3QzEyLjYxMDEgOC42NjIzNSAxMi45Njk5IDcuNzkzNDYgMTIuOTY5OSA2Ljg4NzQ4QzEyLjk2OTkgNS45ODE1MSAxMi42MTAxIDUuMTEyNjIgMTEuOTY5NiA0LjQ3MTlDMTEuNjc2NyA0LjE3ODk2IDExLjY3NjggMy43MDQwOSAxMS45Njk4IDMuNDExMjRaJyBmaWxsPSclMjMyNjIxMzYnLyUzRSUzQy9zdmclM0UlMEFcIik7XG59XG5cbi52aWRlby1qcyAudmpzLXZvbHVtZS1jb250cm9sOmhvdmVyIC52anMtbW91c2UtZGlzcGxheSB7XG4gIGRpc3BsYXk6IG5vbmUgIWltcG9ydGFudDtcbn1cblxuLnZpZGVvLWpzIC52anMtcGxheS1wcm9ncmVzcyB7XG4gIGJhY2tncm91bmQtY29sb3I6IGJsYWNrO1xufVxuXG4vKiBwb3NpdGlvbiB2aWRlbyBwbGF5ZXIgaW5zaWRlIHRoZSBjb250YWluZXIgKi9cbi52aWRlby1qcyAudmpzLXRlY2gge1xuICBwb3NpdGlvbjogc3RhdGljO1xufVxuXG4udmlkZW8tanMgLnZqcy10aW1lLXRvb2x0aXAge1xuICBwYWRkaW5nOiAwLjI1ZW0gMC43NWVtO1xuICBhbGlnbi1pdGVtczogY2VudGVyO1xuICBjb2xvcjogIzMzMztcbiAgYmFja2dyb3VuZDogI0ZDRkNGRDtcbiAgYm9yZGVyLXJhZGl1czogOTlweDtcbiAgdGV4dC1hbGlnbjogY2VudGVyO1xuICBib3JkZXI6IDFweCBzb2xpZCAjRTBFMEVCO1xuICBkaXNwbGF5OiBmbGV4O1xuICBhbGlnbi1pdGVtczogY2VudGVyO1xuICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjtcbiAgdG9wOiAtMjVweDtcbiAgZm9udC1zaXplOiAxMnB4ICFpbXBvcnRhbnQ7XG4gIHdpZHRoOiA1MHB4ICFpbXBvcnRhbnQ7XG59XG5cbi52aWRlby1qcyAudmpzLXBsYXktcHJvZ3Jlc3MudmpzLXNsaWRlci1iYXIgLnZqcy10aW1lLXRvb2x0aXAge1xuICB2aXNpYmlsaXR5OiBoaWRkZW4gIWltcG9ydGFudDtcbn1cblxuLnZpZGVvLWpzIC52anMtcHJvZ3Jlc3MtY29udHJvbCAudmpzLW1vdXNlLWRpc3BsYXkge1xuICB6LWluZGV4OiAyO1xufVxuXG4udWwtdmlkZW8tcGxheWVyIHtcbiAgd2lkdGg6IDEwMCU7XG4gIGRpc3BsYXk6IGZsZXg7XG4gIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XG4gIGhlaWdodDogYXV0bztcbiAgYm9yZGVyOiAxcHggc29saWQgI0U2RTZFNjtcbiAgYmFja2dyb3VuZC1jb2xvcjogd2hpdGU7XG4gIGJveC1zaXppbmc6IGJvcmRlci1ib3g7XG4gIGJvcmRlci1yYWRpdXM6IDRweDtcbiAgYmFja2dyb3VuZC1jbGlwOiBib3JkZXItYm94O1xuICBvdmVyZmxvdzogaGlkZGVuO1xufVxuXG4udmlkZW8tanMudmpzLWZ1bGxzY3JlZW46bm90KC52anMtaW9zLW5hdGl2ZS1mcykge1xuICBib3JkZXI6IG5vbmU7XG59XG5cbiN1bC1jYXJkLXZpZGVvX19wbGF5ZXJfcmVjb3JkZXItdmlkZW8tcmVjb3JkZXIudmpzLWZ1bGxzY3JlZW4ge1xuICBkaXNwbGF5OiB0YWJsZTtcbn1cblxuLnZpZGVvLWpzIGRpdi52anMtcHJvZ3Jlc3MtY29udHJvbCB7XG4gIG1hcmdpbi10b3A6IC0zcHg7XG59XG5cbi52aWRlby1qcyAudmpzLXByb2dyZXNzLWNvbnRyb2wgLnZqcy1zbGlkZXIge1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAjQjJCQkJEO1xufVxuXG4udmpzLXJlY29yZC52aWRlby1qcyAudmpzLWNvbnRyb2wudmpzLWJ1dHRvbi52anMtZnVsbHNjcmVlbi1jb250cm9sIHtcbiAgcG9zaXRpb246cmVsYXRpdmU7XG59XG5cbi8qIGZpeCBhIHN1YnRsZSBtaXNhbGlnbm1lbnQgYnVnIG9uIGNpcmN1bGFyIHBsYXkgY29udHJvbCBidXR0b25zICovXG4udmlkZW8tanMgLnZqcy1wbGF5LWNvbnRyb2wgLnZqcy1pY29uLXBsYWNlaG9sZGVyIHtcbiAgdHJhbnNmb3JtOiB0cmFuc2xhdGUoMXB4LCAycHgpO1xuICAtbW96LXRyYW5zZm9ybTogdHJhbnNsYXRlKDFweCwgNXB4KTtcbn1cblxuLnZpZGVvLWpzIC52anMtcGxheS1jb250cm9sLnZqcy1wbGF5aW5nID4gLnZqcy1pY29uLXBsYWNlaG9sZGVyIHtcbiAgdHJhbnNmb3JtOiB0cmFuc2xhdGUoMHB4LCAycHgpO1xuICAtbW96LXRyYW5zZm9ybTogdHJhbnNsYXRlKDBweCwgNHB4KTtcbn1cblxuLyogZml4IG9wcG9zaXRlIG1pc2FsaWdubWVudCBidWcgb24gbm9uY2lyY3VsYXIgYnV0dG9ucyAqL1xuLnZpZGVvLWpzIC52anMtbXV0ZS1jb250cm9sIC52anMtaWNvbi1wbGFjZWhvbGRlcjpiZWZvcmUge1xuICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVkoLTJweCk7XG59XG5cbi52aWRlby1qcyAudmpzLWZ1bGxzY3JlZW4tY29udHJvbCAudmpzLWljb24tcGxhY2Vob2xkZXI6YmVmb3JlIHtcbiAgY29udGVudDogdXJsKFwiZGF0YTppbWFnZS9zdmcreG1sLCUzQ3N2ZyB3aWR0aD0nMTYnIGhlaWdodD0nMTYnIHZpZXdCb3g9JzAgMCAxNiAxNicgZmlsbD0nbm9uZScgeG1sbnM9J2h0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnJyUzRSUzQ3BhdGggZD0nTTkuODIxNDMgMi41NDAwNEwxMi4yNjE0IDIuNTQwMDRDMTIuOTI0MiAyLjU0MDA0IDEzLjQ2MTQgMy4wNzczIDEzLjQ2MTQgMy43NDAwNEwxMy40NjE0IDYuMTgwMDQnIHN0cm9rZT0nYmxhY2snIHN0cm9rZS13aWR0aD0nMS41JyBzdHJva2UtbGluZWNhcD0ncm91bmQnIHN0cm9rZS1saW5lam9pbj0ncm91bmQnLyUzRSUzQ3BhdGggZD0nTTYuMTc5NTUgMTMuNDZMMy43Mzk1NSAxMy40NkMzLjA3NjgxIDEzLjQ2IDIuNTM5NTUgMTIuOTIyNyAyLjUzOTU1IDEyLjI2TDIuNTM5NTUgOS44MTk5Nicgc3Ryb2tlPSdibGFjaycgc3Ryb2tlLXdpZHRoPScxLjUnIHN0cm9rZS1saW5lY2FwPSdyb3VuZCcgc3Ryb2tlLWxpbmVqb2luPSdyb3VuZCcvJTNFJTNDcGF0aCBkPSdNMTIuNzc3MiAzLjIyMjY2TDkuMzY0NzUgNi42MzUxNicgc3Ryb2tlPSdibGFjaycgc3Ryb2tlLXdpZHRoPScxLjUnIHN0cm9rZS1saW5lY2FwPSdyb3VuZCcgc3Ryb2tlLWxpbmVqb2luPSdyb3VuZCcvJTNFJTNDcGF0aCBkPSdNNi4yOTQzNCA5LjcwNjA1TDIuODgxODQgMTMuMTE4Nicgc3Ryb2tlPSdibGFjaycgc3Ryb2tlLXdpZHRoPScxLjUnIHN0cm9rZS1saW5lY2FwPSdyb3VuZCcgc3Ryb2tlLWxpbmVqb2luPSdyb3VuZCcvJTNFJTNDL3N2ZyUzRVwiKTtcbn1cblxuLnZpZGVvLWpzLnZqcy1mdWxsc2NyZWVuIC52anMtZnVsbHNjcmVlbi1jb250cm9sIC52anMtaWNvbi1wbGFjZWhvbGRlcjpiZWZvcmUge1xuICBjb250ZW50OiB1cmwoXCJkYXRhOmltYWdlL3N2Zyt4bWwsJTNDc3ZnIHdpZHRoPScxNicgaGVpZ2h0PScxNicgZmlsbD0nbm9uZScgeG1sbnM9J2h0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnJyUzRSUzQ3BhdGggZD0nTTEuNTgzIDkuODEzSDUuMjVhMSAxIDAgMDExIDF2My42NjZNNS4zNzUgMTAuNjg4TDEgMTUuMDYxTTE0LjkxNyA1LjgxM0gxMS4yNWExIDEgMCAwMS0xLTFWMS4xNDZNMTUuMDYzIDFsLTQuMzc2IDQuMzc1JyBzdHJva2U9JyUyMzI2MjEzNicgc3Ryb2tlLXdpZHRoPScxLjUnIHN0cm9rZS1saW5lY2FwPSdyb3VuZCcgc3Ryb2tlLWxpbmVqb2luPSdyb3VuZCcvJTNFJTNDL3N2ZyUzRVwiKTtcbn1cblxuLnZpZGVvLWpzIC52anMtcGxheS1jb250cm9sLnZqcy1lbmRlZCAudmpzLWljb24tcGxhY2Vob2xkZXI6YmVmb3JlLCAudmlkZW8tanMgLnZqcy1pY29uLXJlcGxheTpiZWZvcmUge1xuICBjb250ZW50OiB1cmwoXCJkYXRhOmltYWdlL3N2Zyt4bWwsJTNDc3ZnIHdpZHRoPScxMicgaGVpZ2h0PScxMicgdmlld0JveD0nMCAwIDEyIDEyJyBmaWxsPSdub25lJyB4bWxucz0naHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmcnJTNFJTNDcGF0aCBkPSdNMTAuNTM2MyA2LjQwMjI2TDEuOTM5NTggMTAuNzAwNkMxLjY0MDM3IDEwLjg1MDIgMS4yODgzMyAxMC42MzI2IDEuMjg4MzMgMTAuMjk4MVYxLjcwMTRDMS4yODgzMyAxLjM2Njg4IDEuNjQwMzcgMS4xNDkzMSAxLjkzOTU4IDEuMjk4OTFMMTAuNTM2MyA1LjU5NzI3QzEwLjg2OCA1Ljc2MzExIDEwLjg2OCA2LjIzNjQyIDEwLjUzNjMgNi40MDIyNlonIHN0cm9rZT0nYmxhY2snIHN0cm9rZS13aWR0aD0nMS41JyBzdHJva2UtbGluZWNhcD0ncm91bmQnLyUzRSUzQy9zdmclM0VcIik7XG59XG5cbi52aWRlby1qcyAudmpzLXBsYXktY29udHJvbC52anMtcGxheWluZyAudmpzLWljb24tcGxhY2Vob2xkZXI6YmVmb3JlLCAudmpzLWljb24tcGF1c2U6YmVmb3JlIHtcbiAgY29udGVudDogdXJsKFwiZGF0YTppbWFnZS9zdmcreG1sLCUzQ3N2ZyB3aWR0aD0nMTYnIGhlaWdodD0nMTYnIHZpZXdCb3g9JzAgMCAxNiAxNicgZmlsbD0nbm9uZScgeG1sbnM9J2h0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnJyUzRSUzQ3JlY3QgeD0nMy42MTg4NScgeT0nMi4wNjA3NCcgd2lkdGg9JzMuMTYxODUnIGhlaWdodD0nMTEuODgnIHJ4PScwLjknIGZpbGw9J2JsYWNrJyBzdHJva2U9JyUyM0VERURFRCcgc3Ryb2tlLXdpZHRoPScwLjYnIHN0cm9rZS1saW5lY2FwPSdyb3VuZCcvJTNFJTNDcmVjdCB4PSc5LjIxNzk3JyB5PScyLjA2MDc0JyB3aWR0aD0nMy4xNjE4NScgaGVpZ2h0PScxMS44OCcgcng9JzAuOScgZmlsbD0nYmxhY2snIHN0cm9rZT0nJTIzRURFREVEJyBzdHJva2Utd2lkdGg9JzAuNicgc3Ryb2tlLWxpbmVjYXA9J3JvdW5kJy8lM0UlM0Mvc3ZnJTNFJTBBXCIpO1xuICBwYWRkaW5nOiAycHg7XG59XG5cbi52anMtZXJyb3ItZGlzcGxheSB7XG4gIGRpc3BsYXk6IG5vbmU7XG59XG5cbi51bC12aWRlby1wbGF5ZXItdmlkZW8ge1xuICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gIHRvcDogMDtcbiAgbGVmdDogMDtcbiAgd2lkdGg6IDEwMCU7XG59XG5cbi51bC12aWRlby1jb250YWluZXIge1xuICB3aWR0aDogMTAwJTtcbiAgaGVpZ2h0OiBhdXRvO1xuICBsZWZ0OiAwcHg7XG4gIHRvcDogMHB4O1xuXG4gIGJhY2tncm91bmQtY29sb3I6ICNmZmZmZmY7XG4gIGJvcmRlci1yYWRpdXM6IDRweDtcblxuICBhbGlnbi1pdGVtczogY2VudGVyO1xuICBkaXNwbGF5OiBmbGV4O1xuICBmbGV4LWRpcmVjdGlvbjogY29sdW1uO1xuXG4gIC8qIEluc2lkZSBBdXRvIExheW91dCAqL1xuXG4gIGZsZXg6IG5vbmU7XG4gIG9yZGVyOiAwO1xuICBmbGV4LWdyb3c6IDA7XG4gIG1hcmdpbjogMTBweCAwcHg7XG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcbn1cblxuLnZqcy1yZWNvcmQgYnV0dG9uLnZqcy1kZXZpY2UtYnV0dG9uLnZqcy1jb250cm9sIHtcbiAgYmFja2dyb3VuZDogcmdiYSgyNTUsIDI1NSwgMjU1LCA5Nik7XG4gIGZvbnQtZmFtaWx5OiAtYXBwbGUtc3lzdGVtLCBCbGlua01hY1N5c3RlbUZvbnQsIFwiU2Vnb2UgVUlcIiwgUm9ib3RvLCBIZWx2ZXRpY2EsIEFyaWFsLCBzYW5zLXNlcmlmLCBcIkFwcGxlIENvbG9yIEVtb2ppXCIsIFwiU2Vnb2UgVUkgRW1vamlcIiwgXCJTZWdvZSBVSSBTeW1ib2xcIjtcbiAgd2lkdGg6IDEwMCU7XG4gIGhlaWdodDogMTAwJTtcbiAgbGVmdDogMDtcbiAgdG9wOiAwO1xuICBtYXJnaW46IDA7XG4gIGJvcmRlci1yYWRpdXM6IDA7XG4gIGxpbmUtaGVpZ2h0OiAwLjY7XG4gIHBhZGRpbmc6IDEwcHg7XG4gIGRpc3BsYXk6IGZsZXg7XG4gIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XG4gIGp1c3RpZnktY29udGVudDogY2VudGVyO1xuICB6LWluZGV4OiAzO1xufVxuXG4udmpzLXJlY29yZCAudmpzLWRldmljZS1idXR0b24udmpzLWNvbnRyb2w6YmVmb3JlIHtcbiAgZm9udC1zaXplOiAxNHB4ICFpbXBvcnRhbnQ7XG4gIGNvbG9yOiAjMzMzO1xuICBjb250ZW50OiBcIllvdXIgYnJvd3NlciBuZWVkcyB0byBhY2Nlc3MgeW91ciBjYW1lcmEgYW5kIG1pY3JvcGhvbmUgZm9yIHZpZGVvIHJlY29yZGluZ1wiO1xuICBsaW5lLWhlaWdodDogMTM1JTtcbn1cblxuLnZqcy1yZWNvcmQgLnZqcy1kZXZpY2UtYnV0dG9uLnZqcy1jb250cm9sLnBlcm1pc3Npb24tZGVuaWVkOmJlZm9yZSB7XG4gIGZvbnQtc2l6ZTogMTZweCAhaW1wb3J0YW50O1xuICBjb2xvcjogIzI2MjEzNjtcbiAgY29udGVudDogXCJVbmFibGUgdG8gYWNjZXNzIHlvdXIgY2FtZXJhIGFuZCBtaWNyb3Bob25lXCI7XG59XG5cbi52anMtcmVjb3JkIC52anMtZGV2aWNlLWJ1dHRvbi52anMtY29udHJvbDphZnRlciB7XG4gIGRpc3BsYXk6IGlubGluZS1ibG9jaztcbiAgYmFja2dyb3VuZDogI0YwRjBGNTtcbiAgZm9udC1zaXplOiAxM3B4O1xuICBib3JkZXItcmFkaXVzOiA0cHg7XG4gIGNvbnRlbnQ6IFwiUmVxdWVzdCBQZXJtaXNzaW9uc1wiO1xuICBwYWRkaW5nOiAxZW0gMmVtO1xuICBjb2xvcjogIzMzMztcbiAgbWFyZ2luLXRvcDogMjBweDtcbn1cblxuLnZqcy1yZWNvcmQgLnZqcy1kZXZpY2UtYnV0dG9uLnZqcy1jb250cm9sLnBlcm1pc3Npb24tZGVuaWVkOmFmdGVyIHtcbiAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xuICBiYWNrZ3JvdW5kOiB3aGl0ZTtcbiAgZm9udC1zaXplOiAxM3B4O1xuICBjb250ZW50OiBcIlBsZWFzZSBnbyB0byB5b3VyIGJyb3dzZXIgc2V0dGluZ3MgYW5kIHVwZGF0ZSBwZXJtaXNzaW9ucyB0byBlbmFibGUgcmVjb3JkaW5nXCI7XG4gIHBhZGRpbmc6IDFlbTtcbiAgY29sb3I6ICM0QjU3NUQ7XG4gIG1hcmdpbjogNXB4O1xuICBsaW5lLWhlaWdodDogMTM1JTtcbiAgdGV4dC1hbGlnbjogY2VudGVyO1xufVxuXG4udmpzLWNvbnRyb2wudmpzLWJ1dHRvbi51bC12aWRlby1yZWNvcmRlci1kZWxldGUtYnV0dG9uLCAudmpzLWNvbnRyb2wudmpzLWJ1dHRvbi51bC12aWRlby1yZWNvcmRlci10b2dnbGUtYnV0dG9uLCAudmpzLWNvbnRyb2wudmpzLWJ1dHRvbi51bC12aWRlby1yZWNvcmRlci1jYW1lcmEtb2ZmLWJ1dHRvbi1hdWRpby1vbmx5LCAudmpzLWNvbnRyb2wudmpzLWJ1dHRvbi51bC12aWRlby1yZWNvcmRlci1jYW1lcmEtb2ZmLWJ1dHRvbiB7XG4gIGN1cnNvcjogcG9pbnRlcjtcbn1cblxuLnVsLXZpZGVvLXJlY29yZGVyLWRlbGV0ZS1idXR0b24gLnZqcy1pY29uLXBsYWNlaG9sZGVyOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IHVybChcImRhdGE6aW1hZ2Uvc3ZnK3htbCwlM0Nzdmcgd2lkdGg9JzE2JyBoZWlnaHQ9JzE2JyB2aWV3Qm94PScwIDAgMTYgMTYnIGZpbGw9J25vbmUnIHhtbG5zPSdodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyclM0UlM0NwYXRoIGQ9J005LjIxMjM0IDcuMzc1NDlWMTEuMTE5M00yLjUzOTMxIDQuMjU1OTVIMTMuNDU5M0gyLjUzOTMxWk01LjU3MjM0IDQuMjU1OTVWMy4wMDgzM0M1LjU3MjIyIDIuODQ0MzMgNS42MDM1NCAyLjY4MTkyIDUuNjY0NSAyLjUzMDM4QzUuNzI1NDYgMi4zNzg4NCA1LjgxNDg4IDIuMjQxMTUgNS45Mjc2MiAyLjEyNTE5QzYuMDQwMzcgMi4wMDkyMiA2LjE3NDI0IDEuOTE3MjYgNi4zMjE1OCAxLjg1NDU2QzYuNDY4OTIgMS43OTE4NSA2LjYyNjgzIDEuNzU5NjQgNi43ODYyOCAxLjc1OTc3SDkuMjEyMzRDOS4zNzE3OSAxLjc1OTY0IDkuNTI5NyAxLjc5MTg1IDkuNjc3MDMgMS44NTQ1NkM5LjgyNDM3IDEuOTE3MjYgOS45NTgyNCAyLjAwOTIyIDEwLjA3MSAyLjEyNTE5QzEwLjE4MzcgMi4yNDExNSAxMC4yNzMyIDIuMzc4ODQgMTAuMzM0MSAyLjUzMDM4QzEwLjM5NTEgMi42ODE5MiAxMC40MjY0IDIuODQ0MzMgMTAuNDI2MyAzLjAwODMzVjQuMjU1OTVINS41NzIzNFpNMTIuMjQ2MyA0LjI1NTk1VjEyLjk5MTJDMTIuMjQ2MyAxMy4zMjIzIDEyLjExODQgMTMuNjM5OSAxMS44OTA3IDEzLjg3NDFDMTEuNjYzMSAxNC4xMDgyIDExLjM1NDMgMTQuMjM5OCAxMS4wMzIzIDE0LjIzOThINC45NjYyOEM0LjY0NDMyIDE0LjIzOTggNC4zMzU1NSAxNC4xMDgyIDQuMTA3ODkgMTMuODc0MUMzLjg4MDIzIDEzLjYzOTkgMy43NTIzNCAxMy4zMjIzIDMuNzUyMzQgMTIuOTkxMlY0LjI1NTk1SDEyLjI0NjNaTTYuNzg2MjggNy4zNzU0OVYxMS4xMTkzVjcuMzc1NDlaJyBzdHJva2U9J2JsYWNrJyBzdHJva2Utd2lkdGg9JzEuNScgc3Ryb2tlLWxpbmVjYXA9J3JvdW5kJyBzdHJva2UtbGluZWpvaW49J3JvdW5kJy8lM0UlM0Mvc3ZnJTNFJTBBXCIpO1xufVxuXG4udWwtdmlkZW8tcmVjb3JkZXItdG9nZ2xlLWJ1dHRvbiAudmpzLWljb24tcGxhY2Vob2xkZXI6YmVmb3JlIHtcbiAgY29udGVudDogdXJsKFwiZGF0YTppbWFnZS9zdmcreG1sLCUzQ3N2ZyB3aWR0aD0nMTYnIGhlaWdodD0nMTYnIHZpZXdCb3g9JzAgMCAxNiAxNicgZmlsbD0nbm9uZScgeG1sbnM9J2h0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnJyUzRSUzQ3BhdGggZD0nTTggMEMxMi40MTgzIDAgMTYgMy41ODE3MiAxNiA4QzE2IDEyLjQxODMgMTIuNDE4MyAxNiA4IDE2QzMuNTgxNzIgMTYgMCAxMi40MTgzIDAgOEMwIDMuNTgxNzIgMy41ODE3MiAwIDggMFonIGZpbGw9JyUyM0QxNTE1MycvJTNFJTNDL3N2ZyUzRVwiKTtcbn1cblxuLnVsLXZpZGVvLXJlY29yZGVyLXRvZ2dsZS1idXR0b24udWwtcmVjb3JkaW5nLWluLXNlc3Npb24gLnZqcy1pY29uLXBsYWNlaG9sZGVyOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IHVybChcImRhdGE6aW1hZ2Uvc3ZnK3htbCwlM0Nzdmcgd2lkdGg9JzEyJyBoZWlnaHQ9JzEyJyB2aWV3Qm94PScwIDAgMTIgMTInIGZpbGw9J25vbmUnIHhtbG5zPSdodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyclM0UlM0NwYXRoIGQ9J00xMiAxMEwxMiAyQzEyIDAuODk1NDMgMTEuMTA0NiAtNC44NTM5NmUtMDcgMTAgLTQuMzcxMTRlLTA3TDIgLTguNzQyMjhlLTA4QzAuODk1NDMgLTMuOTE0MDVlLTA4IC00Ljg1Mzk2ZS0wNyAwLjg5NTQzMSAtNC4zNzExNGUtMDcgMkwtOC43NDIyOGUtMDggMTBDLTMuOTE0MDVlLTA4IDExLjEwNDYgMC44OTU0MzEgMTIgMiAxMkwxMCAxMkMxMS4xMDQ2IDEyIDEyIDExLjEwNDYgMTIgMTBaJyBmaWxsPSclMjNEMTUxNTMnLyUzRSUzQy9zdmclM0UlMEFcIik7XG59XG5cbi51bC12aWRlby1yZWNvcmRlci1kZWxldGUtYnV0dG9uIC52anMtaWNvbi1wbGFjZWhvbGRlciwgLnVsLXZpZGVvLXJlY29yZGVyLXRvZ2dsZS1idXR0b24gLnZqcy1pY29uLXBsYWNlaG9sZGVyIHtcbiAgdHJhbnNmb3JtOiB0cmFuc2xhdGUoMHB4LCA3cHgpO1xuICAtbW96LXRyYW5zZm9ybTogdHJhbnNsYXRlKDBweCwgNXB4KTtcbn1cblxuLnVsLXJlY29yZGluZy1pbi1zZXNzaW9uLnVsLXZpZGVvLXJlY29yZGVyLXRvZ2dsZS1idXR0b24gLnZqcy1pY29uLXBsYWNlaG9sZGVyIHtcbiAgdHJhbnNmb3JtOiB0cmFuc2xhdGUoMHB4LCA1cHgpO1xufVxuXG4udWwtdmlkZW8tcmVjb3JkZXItY2FtZXJhLW9mZi1idXR0b24gLnZqcy1pY29uLXBsYWNlaG9sZGVyIHtcbiAgdHJhbnNmb3JtOiB0cmFuc2xhdGUoMXB4LCA3cHgpO1xuICAtbW96LXRyYW5zZm9ybTogdHJhbnNsYXRlKDFweCwgNnB4KTtcbn1cblxuLnVsLXZpZGVvLXJlY29yZGVyLWNhbWVyYS1vZmYtYnV0dG9uLWF1ZGlvLW9ubHkgLnZqcy1pY29uLXBsYWNlaG9sZGVyIHtcbiAgdHJhbnNmb3JtOiBzY2FsZSgwLjc1KSB0cmFuc2xhdGUoMXB4LCA4cHgpO1xuICAtbW96LXRyYW5zZm9ybTogc2NhbGUoMC43NSkgdHJhbnNsYXRlKDFweCwgOHB4KTtcbn1cblxuLyogZml4IGEgc3VidGxlIG1pc2FsaWdubWVudCBidWcgZm9yIGZ1bGwgc2NyZWVuIGJ1dHRvbnMgKi9cbi52anMtZnVsbHNjcmVlbiAudWwtcmVjb3JkaW5nLWluLXNlc3Npb24gLnZqcy1pY29uLXBsYWNlaG9sZGVyIHtcbiAgdHJhbnNmb3JtOiB0cmFuc2xhdGUoMHB4LCA2cHgpO1xuICAtbW96LXRyYW5zZm9ybTogdHJhbnNsYXRlKDBweCwgNnB4KTtcbn1cblxuLnVsLXZpZGVvLXJlY29yZGVyLWNhbWVyYS1vZmYtYnV0dG9uIC52anMtaWNvbi1wbGFjZWhvbGRlcjpiZWZvcmUge1xuICBjb250ZW50OiB1cmwoXCJkYXRhOmltYWdlL3N2Zyt4bWwsJTNDc3ZnIHdpZHRoPScxNicgaGVpZ2h0PScxNicgdmlld0JveD0nMCAwIDE2IDE2JyBmaWxsPSdub25lJyB4bWxucz0naHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmcnJTNFJTNDZyBjbGlwLXBhdGg9J3VybCglMjNjbGlwMF8yNjQ1XzQ2NTQpJyUzRSUzQ3BhdGggZD0nTTE1LjE0OTEgNC43NUwxMC41OTkxIDhMMTUuMTQ5MSAxMS4yNVY0Ljc1Wicgc3Ryb2tlPSdibGFjaycgc3Ryb2tlLXdpZHRoPScxLjUnIHN0cm9rZS1saW5lY2FwPSdyb3VuZCcgc3Ryb2tlLWxpbmVqb2luPSdyb3VuZCcvJTNFJTNDcGF0aCBkPSdNOS4yOTkxMiAzLjQ1MDJIMi4xNDkxMkMxLjQzMTE1IDMuNDUwMiAwLjg0OTEyMSA0LjAzMjIzIDAuODQ5MTIxIDQuNzUwMlYxMS4yNTAyQzAuODQ5MTIxIDExLjk2ODIgMS40MzExNSAxMi41NTAyIDIuMTQ5MTIgMTIuNTUwMkg5LjI5OTEyQzEwLjAxNzEgMTIuNTUwMiAxMC41OTkxIDExLjk2ODIgMTAuNTk5MSAxMS4yNTAyVjQuNzUwMkMxMC41OTkxIDQuMDMyMjMgMTAuMDE3MSAzLjQ1MDIgOS4yOTkxMiAzLjQ1MDJaJyBzdHJva2U9J2JsYWNrJyBzdHJva2Utd2lkdGg9JzEuNScgc3Ryb2tlLWxpbmVjYXA9J3JvdW5kJyBzdHJva2UtbGluZWpvaW49J3JvdW5kJy8lM0UlM0MvZyUzRSUzQ2RlZnMlM0UlM0NjbGlwUGF0aCBpZD0nY2xpcDBfMjY0NV80NjU0JyUzRSUzQ3JlY3Qgd2lkdGg9JzE1LjYnIGhlaWdodD0nMTUuNicgZmlsbD0nd2hpdGUnIHRyYW5zZm9ybT0ndHJhbnNsYXRlKDAuMTk5OTUxIDAuMjAwMTk1KScvJTNFJTNDL2NsaXBQYXRoJTNFJTNDL2RlZnMlM0UlM0Mvc3ZnJTNFXCIpO1xufVxuXG4udWwtdmlkZW8tcmVjb3JkZXItY2FtZXJhLW9mZi1idXR0b24tYXVkaW8tb25seSAudmpzLWljb24tcGxhY2Vob2xkZXI6YmVmb3JlIHtcbiAgY29udGVudDogdXJsKFwiZGF0YTppbWFnZS9zdmcreG1sLCUzQ3N2ZyB3aWR0aD0nMjInIGhlaWdodD0nMTUnIGZpbGw9J25vbmUnIHhtbG5zPSdodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyclM0UlM0NwYXRoIGZpbGwtcnVsZT0nZXZlbm9kZCcgY2xpcC1ydWxlPSdldmVub2RkJyBkPSdNLjc1IDNBMi43NSAyLjc1IDAgMDEzLjUuMjVoOS4wODFBMi43NSAyLjc1IDAgMDExNS4zMzEgM3Y5YTIuNzUgMi43NSAwIDAxLTIuNzUgMi43NUgzLjVBMi43NSAyLjc1IDAgMDEuNzUgMTJWM3pNMy41IDEuNzVjLS42OSAwLTEuMjUuNTYtMS4yNSAxLjI1djljMCAuNjkuNTYgMS4yNSAxLjI1IDEuMjVoOS4wODFjLjY5IDAgMS4yNS0uNTYgMS4yNS0xLjI1VjNjMC0uNjktLjU2LTEuMjUtMS4yNS0xLjI1SDMuNXonIGZpbGw9JyUyMzI2MjEzNicvJTNFJTNDcGF0aCBmaWxsLXJ1bGU9J2V2ZW5vZGQnIGNsaXAtcnVsZT0nZXZlbm9kZCcgZD0nTTE0LjUzIDIuMDNsLTEyIDEyLTEuMDYtMS4wNiAxMi0xMiAxLjA2IDEuMDZ6TTIwLjg3IDEuNTI1YS43NS43NSAwIDAxLjM4LjY1MnYxMC41ODhhLjc1Ljc1IDAgMDEtMS4xMzQuNjQ0bC01LjkyLTMuNTNhLjc1Ljc1IDAgMDEtLjM2NS0uNjQzdi0zLjUzYS43NS43NSAwIDAxLjM2Ni0uNjQ0bDUuOTE5LTMuNTNhLjc1Ljc1IDAgMDEuNzU0LS4wMDd6bS01LjUzOSA0LjYwN1Y4LjgxbDQuNDE5IDIuNjM1VjMuNDk3bC00LjQxOSAyLjYzNXonIGZpbGw9JyUyMzI2MjEzNicvJTNFJTNDL3N2ZyUzRVwiKTtcbn1cblxuLnVsLXVwbG9hZC1wcm9ncmVzcy1sYWJlbCB7XG4gIHBhZGRpbmc6IDAuMTVlbSAwLjc1ZW07XG4gIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gIGZvbnQtc2l6ZTogMTJweDtcbiAgY29sb3I6ICMzMzM7XG4gIGJhY2tncm91bmQ6ICNGQ0ZDRkQ7XG4gIGJvcmRlci1yYWRpdXM6IDk5cHg7XG4gIHRleHQtYWxpZ246IGNlbnRlcjtcbiAgYm9yZGVyOiAxcHggc29saWQgI0UwRTBFQjtcbiAgZGlzcGxheTogZmxleDtcbiAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7XG4gIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgYm90dG9tOiA3NXB4O1xuICBsZWZ0OiBjYWxjKDUwJSAtIDY1cHgpO1xuICB3aWR0aDogMTMwcHg7XG4gIHotaW5kZXg6IDU7XG59XG5cbi51bC11cGxvYWQtcHJvZ3Jlc3MtbGFiZWxfX3RpbWUge1xuICBkaXNwbGF5OiBpbmxpbmUtZmxleDtcbiAgbWFyZ2luLWxlZnQ6IDAuOGVtO1xuICBhbGlnbi1pdGVtczogY2VudGVyO1xufVxuXG4udWwtdXBsb2FkLXByb2dyZXNzLWxhYmVsX190aW1lOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXCI7XG4gIGRpc3BsYXk6IGlubGluZS1mbGV4O1xuICB3aWR0aDogMXB4O1xuICBoZWlnaHQ6IDEycHg7XG4gIGJhY2tncm91bmQtY29sb3I6ICNFMEUwRUI7XG4gIG1hcmdpbi1yaWdodDogMC44ZW07XG59XG5cbkBrZXlmcmFtZXMgZ3JvdyB7XG4gIDAlIHtcbiAgICB0cmFuc2Zvcm06IHNjYWxlKDEpO1xuICAgIGJhY2tncm91bmQtY29sb3I6ICNFRUVDRkM7XG4gIH1cbiAgNTAlICB7XG4gICAgdHJhbnNmb3JtOiBzY2FsZSgxLjIpO1xuICAgIGJhY2tncm91bmQtY29sb3I6ICNFMURGRjQ7XG4gIH1cbiAgMTAwJSB7XG4gICAgdHJhbnNmb3JtOiBzY2FsZSgxKTtcbiAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjRUVFQ0ZDO1xuICB9XG59XG5cbi51bC1hdWRpby1yZWNvcmRlci1wbGFjZWhvbGRlcjpiZWZvcmUge1xuICB3aWR0aDogODBweDtcbiAgaGVpZ2h0OiA4MHB4O1xuICBib3JkZXItcmFkaXVzOiAxMjBweDtcbiAgYmFja2dyb3VuZC1jb2xvcjogI0VFRUNGQztcbiAgY29udGVudDogXCJcIjtcbiAgcG9zaXRpb246IGFic29sdXRlO1xuICBsZWZ0OiBjYWxjKDUwJSAtIDQwcHgpO1xuICB0b3A6IGNhbGMoNTAlIC0gNDBweCk7XG4gIGFuaW1hdGlvbjogNnMgaW5maW5pdGUgZ3JvdztcbiAgdHJhbnNmb3JtLW9yaWdpbjogNTAlIDYwJTtcbn1cblxuLnVsLWF1ZGlvLXJlY29yZGVyLXBsYWNlaG9sZGVyOmFmdGVyIHtcbiAgY29udGVudDogdXJsKFwiZGF0YTppbWFnZS9zdmcreG1sLCUzQ3N2ZyB3aWR0aD0nOTgnIGhlaWdodD0nOTgnIGZpbGw9J25vbmUnIHhtbG5zPSdodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyclM0UlM0NtYXNrIGlkPSdhJyBtYXNrVW5pdHM9J3VzZXJTcGFjZU9uVXNlJyB4PScwJyB5PScwJyB3aWR0aD0nOTgnIGhlaWdodD0nOTgnJTNFJTNDY2lyY2xlIGN4PSc0OScgY3k9JzQ5JyByPSc0OScgZmlsbD0nJTIzRURFQ0Y4Jy8lM0UlM0MvbWFzayUzRSUzQ2cgbWFzaz0ndXJsKCUyM2EpJyUzRSUzQ2NpcmNsZSBjeD0nNDknIGN5PSc0OScgcj0nNTAnIGZpbGw9JyUyMzY0NUNDMicvJTNFJTNDcGF0aCBmaWxsLXJ1bGU9J2V2ZW5vZGQnIGNsaXAtcnVsZT0nZXZlbm9kZCcgZD0nTTExLjQyMiA4MS44MTJjNS40MDUtMTUuNTQ3IDIwLjE4Ny0yNi43MDYgMzcuNTc2LTI2LjcwNiAxNy4zOSAwIDMyLjE3MiAxMS4xNTkgMzcuNTc3IDI2LjcwNy05LjE2NCAxMC40My0yMi42MDEgMTcuMDEzLTM3LjU3NiAxNy4wMTMtMTQuOTc2IDAtMjguNDE0LTYuNTgzLTM3LjU3Ny0xNy4wMTR6JyBmaWxsPSclMjNmZmYnIGZpbGwtb3BhY2l0eT0nLjYnLyUzRSUzQ2NpcmNsZSBjeD0nNDknIGN5PScyOScgcj0nMTcnIGZpbGw9JyUyM2ZmZicgZmlsbC1vcGFjaXR5PScuNycvJTNFJTNDL2clM0UlM0Mvc3ZnJTNFXCIpO1xuICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gIGxlZnQ6IDUwJTtcbiAgdG9wOiA1MCU7XG4gIHRyYW5zZm9ybTogdHJhbnNsYXRlKC01MCUsIC01MCUpO1xuICB0cmFuc2Zvcm06IHRyYW5zbGF0ZSgtNTAlLCAtNTAlKSBzY2FsZSgwLjYpO1xufVxuXG4udWwtYXVkaW8tcmVjb3JkZXItcGxhY2Vob2xkZXIge1xuICBtaW4taGVpZ2h0OiAxNTBweDtcbiAgd2lkdGg6IDEwMCU7XG4gIGJhY2tncm91bmQtY29sb3I6ICNmY2ZjZmQ7XG4gIGRpc3BsYXk6IGJsb2NrO1xuICBwb3NpdGlvbjogcmVsYXRpdmU7XG59XG5cbi52anMtZnVsbHNjcmVlbiAudWwtYXVkaW8tcmVjb3JkZXItcGxhY2Vob2xkZXIge1xuICB2ZXJ0aWNhbC1hbGlnbjogbWlkZGxlO1xuICBkaXNwbGF5OiB0YWJsZS1jZWxsO1xufVxuXG5Aa2V5ZnJhbWVzIGdyb3cge1xuICAwJSB7XG4gICAgdHJhbnNmb3JtOiBzY2FsZSgxKTtcbiAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjRUVFQ0ZDO1xuICB9XG4gIDUwJSAge1xuICAgIHRyYW5zZm9ybTogc2NhbGUoMS4yKTtcbiAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjRTFERkY0O1xuICB9XG4gIDEwMCUge1xuICAgIHRyYW5zZm9ybTogc2NhbGUoMSk7XG4gICAgYmFja2dyb3VuZC1jb2xvcjogI0VFRUNGQztcbiAgfVxufVxuXG4udmpzLWZ1bGxzY3JlZW4gLnVsLWNvbnRyb2wtcGFuZWwge1xuICBoZWlnaHQ6IDgwcHg7XG4gIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgYm90dG9tOiAwO1xuICBsZWZ0OiAwO1xuICB3aWR0aDogMTAwJTtcbiAgbWF4LXdpZHRoOiAxMDAlO1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAjRjhGOEY4O1xufVxuXG4udWwtYnV0dG9ucy1wYW5lbCB7XG4gIG1hcmdpbjogMTBweDtcbiAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7XG59XG5cbi52anMtcGxheWJhY2stcmF0ZSAudmpzLXBsYXliYWNrLXJhdGUtdmFsdWUge1xuICBmb250LXNpemU6IDEycHg7XG4gIHRyYW5zZm9ybTogdHJhbnNsYXRlKDAsIDNweCk7XG59XG5cbi52anMtcGxheWJhY2stcmF0ZSAudmpzLW1lbnUge1xuICB0cmFuc2Zvcm06IHRyYW5zbGF0ZSgtNnB4LCAxMnB4KTtcbiAgcG9zaXRpb246IHVuc2V0O1xufVxuXG4udmpzLW1lbnUtYnV0dG9uLXBvcHVwIC52anMtbWVudSAudmpzLW1lbnUtY29udGVudCB7XG4gIGJhY2tncm91bmQtY29sb3I6IHdoaXRlO1xuICBib3JkZXI6IDFweCBzb2xpZCByZ2JhKDAsIDAsIDAsIDAuMSk7XG4gIGJveC1zaXppbmc6IGJvcmRlci1ib3g7XG4gIGJvcmRlci1yYWRpdXM6IDRweDtcbn1cblxuLnZqcy1tZW51LWJ1dHRvbi1wb3B1cCAudmpzLW1lbnUge1xuICBtYXJnaW4tYm90dG9tOiB1bnNldDtcbn1cblxuLnZqcy1tZW51IGxpIHtcbiAgZm9udC1zaXplOiAxMnB4O1xuICBwYWRkaW5nOiA1cHggMDtcbn1cblxuLnZqcy1tZW51IGxpLnZqcy1zZWxlY3RlZCB7XG4gIGNvbG9yOiBsaWdodGdyYXk7XG59XG5cbi52anMtbWVudSBsaS52anMtbWVudS1pdGVtOmhvdmVyIHtcbiAgYmFja2dyb3VuZC1jb2xvcjogcmdiYSgwLCAwLCAwLCAwLjA1KTtcbn1cblxuLnZqcy1mdWxsc2NyZWVuIC51bC1idXR0b25zLXBhbmVsIHtcbiAgdG9wOiBjYWxjKDUwJSAtIDMwcHgpO1xuICBwb3NpdGlvbjogcmVsYXRpdmU7XG59XG5cbi52anMtZnVsbHNjcmVlbiAudmpzLXJlY29yZC1pbmRpY2F0b3IudmpzLWNvbnRyb2wge1xuICBib3R0b206IDkwcHggIWltcG9ydGFudDtcbn1cblxuLnZqcy1yZWNvcmQudmlkZW8tanMgZGl2LnZqcy1jb250cm9sLnZqcy1yZWNvcmQtaW5kaWNhdG9yIHtcbiAgcGFkZGluZzogMC4zZW0gMC43NWVtIDAuMTVlbSAxNXB4O1xuICBhbGlnbi1pdGVtczogY2VudGVyO1xuICBmb250LXNpemU6IDEycHg7XG4gIGNvbG9yOiAjMzMzO1xuICBiYWNrZ3JvdW5kOiAjRkNGQ0ZEO1xuICBib3JkZXItcmFkaXVzOiA5OXB4O1xuICB0ZXh0LWFsaWduOiBjZW50ZXI7XG4gIGJvcmRlcjogMXB4IHNvbGlkICNFMEUwRUI7XG4gIGRpc3BsYXk6IGZsZXg7XG4gIGp1c3RpZnktY29udGVudDogY2VudGVyO1xuICBhbGlnbi1pdGVtczogY2VudGVyO1xuICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gIGJvdHRvbTogNzVweDtcbiAgdG9wOiBhdXRvO1xuICBsZWZ0OiBjYWxjKDUwJSAtIDIxcHgpO1xuICB3aWR0aDogNDNweDtcbiAgaGVpZ2h0OiAxNnB4O1xuICB6LWluZGV4OiA0O1xufVxuXG4udmpzLXJlY29yZC52aWRlby1qcyBkaXYudmpzLWNvbnRyb2wudmpzLXJlY29yZC1pbmRpY2F0b3I6YWZ0ZXIge1xuICBjb250ZW50OiBcIlwiO1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAjRUI1NzU3O1xuICB3aWR0aDogNnB4O1xuICBoZWlnaHQ6IDZweDtcbiAgYm9yZGVyLXJhZGl1czogOHB4O1xuICBhbmltYXRpb246IG5vbmU7XG4gIHRvcDogNHB4O1xuICBsZWZ0OiA1cHg7XG59XG5cbi52anMtcmVjb3JkLnZpZGVvLWpzIGRpdi52anMtY29udHJvbC52anMtcmVjb3JkLWluZGljYXRvcjpiZWZvcmUge1xuICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gIGZvbnQtc2l6ZTogOXB4O1xuICBhbmltYXRpb246IG5vbmU7XG4gIG9wYWNpdHk6IDE7XG4gIGNvbG9yOiAjMzMzO1xuICB0b3A6IGF1dG87XG4gIGxlZnQ6IGF1dG87XG59XG5cbi51bC12aWRlby1wbGF5ZXItbG9hZGluZyB7XG4gIGRpc3BsYXk6IGlubGluZS1ibG9jaztcbiAgcG9zaXRpb246IHJlbGF0aXZlO1xuICB3aWR0aDogNnJlbTtcbiAgaGVpZ2h0OiA2cmVtO1xuXG59XG4udWwtdmlkZW8tcGxheWVyLWxvYWRpbmcgZGl2IHtcbiAgYm94LXNpemluZzogYm9yZGVyLWJveDtcbiAgcG9zaXRpb246IGFic29sdXRlO1xuICBkaXNwbGF5OiBibG9jaztcbiAgd2lkdGg6IDgwJTtcbiAgaGVpZ2h0OiA4MCU7XG4gIG1hcmdpbjogNXB4O1xuICBib3JkZXI6IDVweCBzb2xpZCAjNjY2O1xuICBib3JkZXItcmFkaXVzOiA1MCU7XG4gIGFuaW1hdGlvbjogbGRzLXJpbmcgMS4ycyBjdWJpYy1iZXppZXIoMC41LCAwLCAwLjUsIDEpIGluZmluaXRlO1xuICBib3JkZXItY29sb3I6ICM2NjYgdHJhbnNwYXJlbnQgdHJhbnNwYXJlbnQgdHJhbnNwYXJlbnQ7XG59XG5cbi5maXJzdCB7XG4gIGFuaW1hdGlvbi1kZWxheTogLTAuNDVzO1xufVxuLnNlY29uZCB7XG4gIGFuaW1hdGlvbi1kZWxheTogLTAuM3M7XG59XG4udGhpcmQge1xuICBhbmltYXRpb24tZGVsYXk6IC0wLjE1cztcbn1cblxuQGtleWZyYW1lcyBsZHMtcmluZyB7XG4gIDAlIHtcbiAgICB0cmFuc2Zvcm06IHJvdGF0ZSgwZGVnKTtcbiAgfVxuICAxMDAlIHtcbiAgICB0cmFuc2Zvcm06IHJvdGF0ZSgzNjBkZWcpO1xuICB9XG59XG5cbi51bC12aWRlby1idG4ge1xuICB3aWR0aDogMTAwJTtcbiAgYm9yZGVyOiAxcHggc29saWQgI0U2RTZFNjtcbiAgYm9yZGVyLXJhZGl1czogNHB4O1xuICBiYWNrZ3JvdW5kLWNvbG9yOiByZ2JhKDAsIDAsIDAsIDAuMDIpO1xuICBwYWRkaW5nOiA4cHg7XG4gIGZvbnQtd2VpZ2h0OiA1MDA7XG4gIGZvbnQtc2l6ZTogMTVweDtcbn1cblxuLnVsLXJlY29yZC1yZXNwb25zZS1idG46YmVmb3JlLCAudWwtcmVjb3JkLXJlc3BvbnNlLWJ0bjphZnRlciwgLnVsLWJhY2stcXVlc3Rpb24tYnRuOmJlZm9yZSwgLnVsLWJhY2stcXVlc3Rpb24tYnRuOmFmdGVyIHtcbiAgbWFyZ2luOiAwIDVweDtcbiAgdmVydGljYWwtYWxpZ246IG1pZGRsZTtcbn1cblxuLnVsLXJlY29yZC1yZXNwb25zZS1idG46YmVmb3JlIHtcbiAgY29udGVudDogdXJsKFwiZGF0YTppbWFnZS9zdmcreG1sLCUzQ3N2ZyB3aWR0aD0nMTYnIGhlaWdodD0nMTYnIHZpZXdCb3g9JzAgMCAxNiAxNicgZmlsbD0nbm9uZScgeG1sbnM9J2h0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnJyUzRSUzQ2cgY2xpcC1wYXRoPSd1cmwoJTIzY2xpcDBfMjY0NV80NjU0KSclM0UlM0NwYXRoIGQ9J00xNS4xNDkxIDQuNzVMMTAuNTk5MSA4TDE1LjE0OTEgMTEuMjVWNC43NVonIHN0cm9rZT0nYmxhY2snIHN0cm9rZS13aWR0aD0nMS41JyBzdHJva2UtbGluZWNhcD0ncm91bmQnIHN0cm9rZS1saW5lam9pbj0ncm91bmQnLyUzRSUzQ3BhdGggZD0nTTkuMjk5MTIgMy40NTAySDIuMTQ5MTJDMS40MzExNSAzLjQ1MDIgMC44NDkxMjEgNC4wMzIyMyAwLjg0OTEyMSA0Ljc1MDJWMTEuMjUwMkMwLjg0OTEyMSAxMS45NjgyIDEuNDMxMTUgMTIuNTUwMiAyLjE0OTEyIDEyLjU1MDJIOS4yOTkxMkMxMC4wMTcxIDEyLjU1MDIgMTAuNTk5MSAxMS45NjgyIDEwLjU5OTEgMTEuMjUwMlY0Ljc1MDJDMTAuNTk5MSA0LjAzMjIzIDEwLjAxNzEgMy40NTAyIDkuMjk5MTIgMy40NTAyWicgc3Ryb2tlPSdibGFjaycgc3Ryb2tlLXdpZHRoPScxLjUnIHN0cm9rZS1saW5lY2FwPSdyb3VuZCcgc3Ryb2tlLWxpbmVqb2luPSdyb3VuZCcvJTNFJTNDL2clM0UlM0NkZWZzJTNFJTNDY2xpcFBhdGggaWQ9J2NsaXAwXzI2NDVfNDY1NCclM0UlM0NyZWN0IHdpZHRoPScxNS42JyBoZWlnaHQ9JzE1LjYnIGZpbGw9J3doaXRlJyB0cmFuc2Zvcm09J3RyYW5zbGF0ZSgwLjE5OTk1MSAwLjIwMDE5NSknLyUzRSUzQy9jbGlwUGF0aCUzRSUzQy9kZWZzJTNFJTNDL3N2ZyUzRVwiKTtcbiAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xuICB0cmFuc2Zvcm06IHRyYW5zbGF0ZSgwcHgsIDJweCk7XG59XG5cbi51bC1yZWNvcmQtcmVzcG9uc2UtYnRuOmFmdGVyIHtcbiAgY29udGVudDogJ1JlY29yZCB5b3VyIFJlc3BvbnNlJztcbn1cblxuLnVsLWJhY2stcXVlc3Rpb24tYnRuOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IHVybChcImRhdGE6aW1hZ2Uvc3ZnK3htbCwlM0Nzdmcgd2lkdGg9JzE1JyBoZWlnaHQ9JzE2JyB2aWV3Qm94PScwIDAgMTUgMTYnIGZpbGw9J25vbmUnIHhtbG5zPSdodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyclM0UlM0NwYXRoIGQ9J00xMy44NzU3IDguMjIzNjFMMS4xMTE4IDE0LjYwNTZDMC45NDU1NzggMTQuNjg4NyAwLjc1IDE0LjU2NzggMC43NSAxNC4zODJWMS42MTgwM0MwLjc1IDEuNDMyMTkgMC45NDU1NzkgMS4zMTEzMSAxLjExMTggMS4zOTQ0M0wxMy44NzU3IDcuNzc2MzlDMTQuMDYgNy44Njg1MiAxNC4wNiA4LjEzMTQ4IDEzLjg3NTcgOC4yMjM2MVonIHN0cm9rZT0nYmxhY2snIHN0cm9rZS13aWR0aD0nMS41JyBzdHJva2UtbGluZWNhcD0ncm91bmQnLyUzRSUzQy9zdmclM0VcIik7XG4gIGRpc3BsYXk6IGlubGluZS1ibG9jaztcbiAgdHJhbnNmb3JtOiBzY2FsZSgwLjg1KSB0cmFuc2xhdGUoMCwgMXB4KTtcbiAgLW1vei10cmFuc2Zvcm06IHNjYWxlKDAuODUpIHRyYW5zbGF0ZSgwLCAycHgpO1xufVxuXG4udWwtYmFjay1xdWVzdGlvbi1idG46YWZ0ZXIge1xuICBjb250ZW50OiAnQmFjayB0byBRdWVzdGlvbic7XG59XG5cbi5oaWRkZW4ge1xuICBkaXNwbGF5OiBub25lICFpbXBvcnRhbnQ7XG4gIG9wYWNpdHk6IDA7XG4gIHZpc2liaWxpdHk6IGhpZGRlbjtcbn1cblxuLnZpc2libGUge1xuICB2aXNpYmlsaXR5OiB2aXNpYmxlO1xuICBvcGFjaXR5OiAxO1xuICBhbmltYXRpb246IGZhZGUgMC4zcztcbn1cblxuQGtleWZyYW1lcyBmYWRlIHtcbiAgMCUge1xuICAgICAgb3BhY2l0eTogMDtcbiAgfVxuXG4gIDEwMCUge1xuICAgICAgb3BhY2l0eTogMTtcbiAgfVxufVxuXG4jdWwtcmVjb3JkaW5nLWNvdW50ZG93bi1zY3JlZW4ge1xuICB3aWR0aDogMTAwJTtcbiAgaGVpZ2h0OiAxMDAlO1xuICBjb2xvcjogYmxhY2s7XG4gIGJhY2tncm91bmQtY29sb3I6IHJnYmEoMjU1LCAyNTUsIDI1NSwgMC44KTtcbiAgcG9zaXRpb246IGFic29sdXRlO1xuICB0ZXh0LWFsaWduOiBjZW50ZXI7XG4gIGZvbnQtc2l6ZTogMTVweDtcbiAgei1pbmRleDogMTtcbiAgZGlzcGxheTogdGFibGU7XG59XG5cbi51bC1jb3VudGRvd24tdGV4dCB7XG4gIHZlcnRpY2FsLWFsaWduOiBtaWRkbGU7XG4gIGRpc3BsYXk6IHRhYmxlLWNlbGw7XG4gIHRyYW5zZm9ybTogdHJhbnNsYXRlKDAsIC0yNXB4KTtcbn1cblxuLnZqcy1mdWxsc2NyZWVuID4gI3VsLXJlY29yZGluZy1jb3VudGRvd24tc2NyZWVuIHtcbiAgZm9udC1zaXplOiAyNXB4O1xuICB0cmFuc2Zvcm06IHVuc2V0O1xufVxuXG4udmpzLWNvbnRyb2wgLnZqcy1pY29uLXBsYWNlaG9sZGVyOmJlZm9yZSB7XG4gIGRpc3BsYXk6IGZsZXg7XG4gIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gIGp1c3RpZnktY29udGVudDogY2VudGVyO1xufVxuXG4jdWwtU3BlZWQge1xuICB0cmFuc2Zvcm06IHRyYW5zbGF0ZSgwLCAzNXB4KTtcbn1cblxuLnZqcy1wb3N0ZXIge1xuICBiYWNrZ3JvdW5kLXBvc2l0aW9uOiB1bnNldDtcbn1cbiJ9XSxuZT0iLXZpZGVvLXBsYXllciIscmU9Ii12aWRlby1yZWNvcmRlciI7bGV0IG9lLGllO2NvbnN0IGFlPWFzeW5jKHQsZSxuLHIsbyxpKT0+e2NvbnN0IGE9ZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LGM9e3NjcmVlbldpZHRoOndpbmRvdy5zY3JlZW4ud2lkdGgsc2NyZWVuSGVpZ2h0OndpbmRvdy5zY3JlZW4uaGVpZ2h0LGNsaWVudFdpZHRoOmEuY2xpZW50V2lkdGgsY2xpZW50SGVpZ2h0OmEuY2xpZW50SGVpZ2h0LGxvY2F0aW9uOndpbmRvdy5sb2NhdGlvbi5ocmVmLGxhbmd1YWdlOm5hdmlnYXRvci5sYW5ndWFnZX0scz17YWN0aW9uOmUsZXJyOnttZXNzYWdlOnQubWVzc2FnZSxzdGFjazp0LnN0YWNrfSxtZXRhOmMsdmlkOm8sZW52SWQ6aX07KGF3YWl0IGZldGNoKGAke259L3Nkay8xL2Vycm9yc2Ase21ldGhvZDoiUE9TVCIsY2FjaGU6Im5vLWNhY2hlIixoZWFkZXJzOnsuLi5yLCJ1c2VybGVhcC1wbGF0Zm9ybSI6InZpZGVvX3JlY29yZGVyIiwieC11bC1lcnJvciI6d2luZG93LmJ0b2EoYHVzZXJsZWFwLSR7RGF0ZS5ub3coKX0tZXJyb3JgKX0sYm9keTpKU09OLnN0cmluZ2lmeShzKX0pKS5va3x8Y29uc29sZS53YXJuKCJbVXNlckxlYXBdIChFUlItNDQ0KSBGYWlsZWQgdG8gcmVwb3J0IGVycm9yIHRvIEFQSSIsdCl9LGNlPSh0LGUsbik9PntpZigwPT09ZS5sZW5ndGgpcmV0dXJuIG4mJm4oKTtQcm9taXNlLmFsbChlLnJlZHVjZSgoKGUsbik9PihlLnB1c2goKCh0LHt0eXBlOmUsY29udGVudDpufSk9Pm5ldyBQcm9taXNlKChmdW5jdGlvbihyLG8pe2xldCBpOyJzY3JpcHQiPT09ZT8oaT1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJzY3JpcHQiKSxpLnNyYz1uKToibGluayI9PT1lPyhpPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImxpbmsiKSxpLnJlbD0ic3R5bGVzaGVldCIsaS5ocmVmPW4saS50eXBlPSJ0ZXh0L2NzcyIpOihpPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInN0eWxlIiksaS5pbm5lckhUTUw9biksaS5vbmxvYWQ9ZnVuY3Rpb24oKXtyKG4pfSxpLm9uZXJyb3I9ZnVuY3Rpb24oKXtvKG4pfSxpLmFzeW5jPSExLGkuaWQ9YnRvYShuKSx0LmFwcGVuZENoaWxkKGkpfSkpKSh0LG4pKSxlKSksW10pKS50aGVuKCgoKT0+e24mJm4oKX0pKS5jYXRjaCgoZnVuY3Rpb24odCl7Y29uc29sZS5sb2codCsiIGZhaWxlZCB0byBsb2FkIil9KSl9LHNlPSh0LGUsbik9PntpZigic3RhcnQiPT09ZSYmKHQuc3R5bGUudmlzaWJpbGl0eT0idmlzaWJsZSIpLCJub25lIj09PWUpdC5zdHlsZS52aXNpYmlsaXR5PUp0O2Vsc2UgaWYoInN1Y2Nlc3MiPT09ZSl0LnN0eWxlLnZpc2liaWxpdHk9SnQsdC5pbm5lckhUTUw9IlVwbG9hZCBzdWNjZWVkZWQhIjtlbHNle2NvbnN0IGU9TWF0aC5yb3VuZChwYXJzZUZsb2F0KG4pKTt0LmlubmVySFRNTD1gVXBsb2FkaW5nIDxzcGFuIGNsYXNzPSJ1bC11cGxvYWQtcHJvZ3Jlc3MtbGFiZWxfX3RpbWUiPiR7ZX0lPC9zcGFuPmAsdC5zdHlsZS5iYWNrZ3JvdW5kPWBsaW5lYXItZ3JhZGllbnQodG8gcmlnaHQsICNFMEUwRUIgMCUsICNFMEUwRUIgJHtlfSUsICNGQ0ZDRkQgJHtlfSUsICNGQ0ZDRkQgMTAwJSlgfX0sdWU9KHQsZSk9Pntjb25zdCBuPW5ldyh3aW5kb3cudmlkZW9qcy5nZXRDb21wb25lbnQoIkNvbXBvbmVudCIpKSh0KTtyZXR1cm4gbi5hZGRDbGFzcygidWwtYnV0dG9ucy1wYW5lbCIpLGUubWFwKCh0PT57bi5hZGRDaGlsZCh0KX0pKSxsZShuKSxufSxsZT10PT57dC5jaGlsZHJlbigpLmZvckVhY2goKHQ9PntpZihqZVt0Lm5hbWVfXSl7Y29uc3QgZT1mZShqZVt0Lm5hbWVfXSxgdWwtJHtqZVt0Lm5hbWVfXX1gKTt0LmVsXy5hcHBlbmRDaGlsZChlKX19KSl9LGZlPSh0LGU9IiIpPT57Y29uc3Qgbj1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJzcGFuIik7cmV0dXJuIG4uY2xhc3NOYW1lPSJ1bC1idXR0b24tdGV4dCIsbi5pbm5lckhUTUw9dCxuLmlkPWUsbn0sZGU9KHQsZSxuLHIsbz0hMSk9Pnt0LmFkZENsYXNzKCJ1bC12aWRlby1wbGF5ZXIiKTtjb25zdCBpPW5ldyh3aW5kb3cudmlkZW9qcy5nZXRDb21wb25lbnQoIkNvbXBvbmVudCIpKSh0KTtpLmFkZENsYXNzKCJ1bC1jb250cm9sLXBhbmVsIiksdC5wcm9ncmVzc0Jhcj1pLmFkZENoaWxkKCJQcm9ncmVzc0NvbnRyb2wiKSxuJiZ0LnNyYyhuKSx0LmF1ZGlvUGxheWVyUGxhY2Vob2xkZXI9bmV3KHdpbmRvdy52aWRlb2pzLmdldENvbXBvbmVudCgiQ29tcG9uZW50IikpKHQpLHQuYXVkaW9QbGF5ZXJQbGFjZWhvbGRlci5hZGRDbGFzcygidWwtYXVkaW8tcmVjb3JkZXItcGxhY2Vob2xkZXIiKTtjb25zdCBhPW4mJm4uc3JjP3dlKG4uc3JjKTpudWxsOyFufHwhbyYmYT8odC5hdWRpb1BsYXllclBsYWNlaG9sZGVyLmhpZGUoKSxkb2N1bWVudC5nZXRFbGVtZW50QnlJZChgJHt0LmlkKCl9X2h0bWw1X2FwaWApLnN0eWxlLmhlaWdodD0iMTAwJSIsYSYmdC5wb3N0ZXIoYSkpOih0LmNoaWxkcmVuKClbMF0uY2xhc3NMaXN0LmFkZCgidmpzLWhpZGRlbiIpLGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGAke3QuaWQoKX1faHRtbDVfYXBpYCkuc3R5bGUuaGVpZ2h0PSIwcHgiKSx0Lm9uKCJwbGF5IiwoKCk9PntvfHwhbnx8YXx8eWUodCwhMSl9KSksdC5hZGRDaGlsZCh0LmF1ZGlvUGxheWVyUGxhY2Vob2xkZXIse30sMSksaS5hZGRDaGlsZChlKSx0LmFkZENoaWxkKGkpLHImJnIodCl9LHBlPSh0LGUsbixyLG8saSxhLGM9ITEpPT57aWU9RGF0ZS5ub3coKTtjb25zdCBzPXdpbmRvdy52aWRlb2pzLHU9cyhlLHtjb250cm9sczohMSxiaWdQbGF5QnV0dG9uOiExLGZsdWlkOiExLHdpZHRoOjEyODAsaGVpZ2h0OjcyMCxwbGF5c2lubGluZTohMCxwbHVnaW5zOntyZWNvcmQ6e2F1ZGlvOiEwLHZpZGVvOnttYW5kYXRvcnk6e21pbldpZHRoOjEyODAsbWluSGVpZ2h0OjcyMH19LGZyYW1lV2lkdGg6MTI4MCxmcmFtZUhlaWdodDo3MjAsbWF4TGVuZ3RoOjYwMCxhdXRvTXV0ZURldmljZTohMH19fSk7dS5wYXlsb2FkPW47Y29uc3QgbD10PT57Y29uc3QgZT1YdCxuPVh0KyItYXVkaW8tb25seSI7c2UodS51cGxvYWRQcm9ncmVzc0xhYmVsLCJub25lIiksb2UmJm9lLnN0YXJ0VGltZT49aWUmJm9lLmFib3J0KCk7Y29uc3Qgcj1kb2N1bWVudC5nZXRFbGVtZW50QnlJZCgidWwtY2FtZXJhLWJ1dHRvbiIpO3Q/KHUuY2hpbGRyZW4oKVswXS5jbGFzc0xpc3QuYWRkKCJ2anMtaGlkZGVuIiksaC5yZW1vdmVDbGFzcyhlKSxoLmFkZENsYXNzKG4pLHIuaW5uZXJIVE1MPWplLlR1cm5PbkNhbWVyYSx1LmF1ZGlvUGxheWVyUGxhY2Vob2xkZXIucmVtb3ZlQ2xhc3MoInZqcy1oaWRkZW4iKSx3aW5kb3cubmF2aWdhdG9yLm1lZGlhRGV2aWNlcy5nZXRVc2VyTWVkaWEoe3ZpZGVvOiEwLGF1ZGlvOiEwfSkudGhlbigodD0+e3UucmVjb3JkKCkub25EZXZpY2VSZWFkeSh0KSx0LmdldFZpZGVvVHJhY2tzKCkuZm9yRWFjaCgodD0+e3Quc3RvcCgpfSkpfSkpLmNhdGNoKHUucmVjb3JkKCkub25EZXZpY2VFcnJvci5iaW5kKHUucmVjb3JkKCkpKSk6KHUuY2hpbGRyZW4oKVswXS5jbGFzc0xpc3QucmVtb3ZlKCJ2anMtaGlkZGVuIiksdS5yZWNvcmQoKS5nZXREZXZpY2UoKSxoLnJlbW92ZUNsYXNzKG4pLGguYWRkQ2xhc3MoZSksci5pbm5lckhUTUw9amUuVHVybk9mZkNhbWVyYSx1LmF1ZGlvUGxheWVyUGxhY2Vob2xkZXIuYWRkQ2xhc3MoInZqcy1oaWRkZW4iKSl9LGY9bmV3KHMuZ2V0Q29tcG9uZW50KCJCdXR0b24iKSkodSx7Y2xpY2tIYW5kbGVyOigpPT57Zi5oYXNDbGFzcyhKdCl8fChsKHUuY2FtZXJhT2ZmKSxvKEVlLkRFTEVURSx7fSksaC5yZW1vdmVDbGFzcyhKdCksZi5hZGRDbGFzcyhKdCkpfX0pO2YuYWRkQ2xhc3MoInVsLXZpZGVvLXJlY29yZGVyLWRlbGV0ZS1idXR0b24iKSxmLmVsXy5hcHBlbmRDaGlsZChmZShqZS5EZWxldGVCdXR0b24sInVsLWRlbGV0ZS1idXR0b24iKSk7Y29uc3QgZD1kb2N1bWVudC5nZXRFbGVtZW50QnlJZChlKSxwPSgpPT57ZC5jbGFzc0xpc3QuY29udGFpbnMoInZqcy1mdWxsc2NyZWVuIikmJnUuY2FtZXJhT2ZmP2Quc3R5bGUuZGlzcGxheT0idGFibGUiOmQuc3R5bGUuZGlzcGxheT0iZmxleCJ9O3AoKTtjb25zdCBoPW5ldyhzLmdldENvbXBvbmVudCgiQnV0dG9uIikpKHUse2NsaWNrSGFuZGxlcjooKT0+e3UucmVjb3JkKCkuaXNSZWNvcmRpbmcoKXx8KHUuY2FtZXJhT2ZmPSF1LmNhbWVyYU9mZixsKHUuY2FtZXJhT2ZmKSwhZi5oYXNDbGFzcyhKdCkmJmYuYWRkQ2xhc3MoSnQpLG8oRWUuREVMRVRFLHt9KSxwKCkpfX0pO2guYWRkQ2xhc3MoWHQpLGguZWxfLmFwcGVuZENoaWxkKGZlKGplLlR1cm5PZmZDYW1lcmEsInVsLWNhbWVyYS1idXR0b24iKSk7Y29uc3Qgdj1uZXcocy5nZXRDb21wb25lbnQoIkJ1dHRvbiIpKSh1LHtjbGlja0hhbmRsZXI6KCk9Pntjb25zdCB0PWRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJ1bC1yZWNvcmRlci10b2dnbGUiKTtpZih1LnJlY29yZCgpLmlzUmVjb3JkaW5nKCkpdS5yZWNvcmQoKS5zdG9wKCksdCYmKHQuaW5uZXJIVE1MPWplLlJlY29yZEJ1dHRvbiksdi5yZW1vdmVDbGFzcyhRdCksZi5yZW1vdmVDbGFzcyhKdCk7ZWxzZXtjb25zdCBlPWRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJ1bC1yZWNvcmRpbmctY291bnRkb3duLXNjcmVlbiIpO2lmKGUpZS5yZW1vdmUoKSx0JiYodC5pbm5lckhUTUw9amUuUmVjb3JkQnV0dG9uKSxsKHUuY2FtZXJhT2ZmKSxvKEVlLkRFTEVURSx7fSksaC5yZW1vdmVDbGFzcyhKdCksZi5hZGRDbGFzcyhKdCksdi5yZW1vdmVDbGFzcyhRdCksbS5zaG93KCk7ZWxzZXt2LmFkZENsYXNzKFF0KSxtLmhpZGUoKSxoLmFkZENsYXNzKEp0KSxmLmFkZENsYXNzKEp0KSx0JiYodC5pbm5lckhUTUw9amUuU3RvcEJ1dHRvbik7Y29uc3QgZT1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKTtlLmlkPSJ1bC1yZWNvcmRpbmctY291bnRkb3duLXNjcmVlbiIsZC5pbnNlcnRCZWZvcmUoZSxkLmNoaWxkcmVuWzFdKSxlLnN0eWxlLmhlaWdodD1gJHtkLm9mZnNldEhlaWdodH1weGAsaGUodSwzKX19fX0pO3YuYWRkQ2xhc3MoInVsLXZpZGVvLXJlY29yZGVyLXRvZ2dsZS1idXR0b24iKSx2LmVsXy5hcHBlbmRDaGlsZChmZShqZS5SZWNvcmRCdXR0b24sInVsLXJlY29yZGVyLXRvZ2dsZSIpKTtjb25zdCBnPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInAiKTtnLnN0eWxlLnZpc2liaWxpdHk9ImhpZGRlbiIsZy5jbGFzc05hbWU9InVsLXVwbG9hZC1wcm9ncmVzcy1sYWJlbCIsdC5hcHBlbmRDaGlsZChnKSx1LnVwbG9hZFByb2dyZXNzTGFiZWw9Zztjb25zdCB5PXVlKHUsW2YsaCwiUGxheVRvZ2dsZSIsdiwiRnVsbHNjcmVlblRvZ2dsZSJdKSxtPXkuY2hpbGRyZW4oKS5maW5kKCh0PT4iRnVsbHNjcmVlblRvZ2dsZSI9PT10Lm5hbWVfKSk7bS5oYXNDbGFzcygidmpzLWRpc2FibGVkIikmJm0uaGlkZSgpO2NvbnN0IGI9eS5jaGlsZHJlbigpLmZpbmQoKHQ9PiJQbGF5VG9nZ2xlIj09PXQubmFtZV8pKTtiLmhpZGUoKSxpJiZoLmFkZENsYXNzKEp0KSwhaSYmZi5hZGRDbGFzcyhKdCksZGUodSx5LGksITEsYyksdS5vbigic3RvcFJlY29yZCIsKCgpPT57di5oaWRlKCksYi5zaG93KCksbS5zaG93KCksZi5yZW1vdmVDbGFzcyhKdCl9KSksdS5vbigiZGV2aWNlUmVhZHkiLCgoKT0+e3Yuc2hvdygpLGIuaGlkZSgpLGYuYWRkQ2xhc3MoSnQpfSkpLCgodCxlLG4scixvKT0+e3Qub24oImRldmljZUVycm9yIiwoZnVuY3Rpb24oKXtjb25zb2xlLmxvZygiZGV2aWNlIGVycm9yOiIsdC5kZXZpY2VFcnJvckNvZGUpLCJQZXJtaXNzaW9uIGRlbmllZCI9PT10LmRldmljZUVycm9yQ29kZS5tZXNzYWdlPyh0LmRldmljZUJ1dHRvbi5hZGRDbGFzcygicGVybWlzc2lvbi1kZW5pZWQiKSxuJiZuKEVlLkVSUk9SLHt0eXBlOkVlLlBFUk1JU1NJT05fREVOSUVEfSkpOihuJiZuKEVlLkVSUk9SLHt0eXBlOkVlLk9USEVSfSksYWUobmV3IEVycm9yKHQuZGV2aWNlRXJyb3JDb2RlLm1lc3NhZ2UpLCJyZWNvcmRlckRldmljZUVycm9yIixlLG8sdC5wYXlsb2FkLnZpc2l0b3JJZCx0LnBheWxvYWQuZW52SWQpKX0pKSx0Lm9uKCJlcnJvciIsKGZ1bmN0aW9uKG4scil7YWUocnx8dC5lcnJvcigpLCJyZWNvcmRlckVycm9yIixlLG8sdC5wYXlsb2FkLnZpc2l0b3JJZCx0LnBheWxvYWQuZW52SWQpfSkpLHQub24oInN0YXJ0UmVjb3JkIiwoZnVuY3Rpb24oZSxuKXtyKHQudXBsb2FkUHJvZ3Jlc3NMYWJlbCwibm9uZSIpfSkpLHQub24oImZpbmlzaFJlY29yZCIsKGFzeW5jIGZ1bmN0aW9uKCl7cih0LnVwbG9hZFByb2dyZXNzTGFiZWwsInN0YXJ0IiwwKTtjb25zdHtzdXJ2ZXlJZDppLHF1ZXN0aW9uSWQ6YSxyZXNwb25zZUdyb3VwVWlkOmMsdmlzaXRvcklkOnMsZW52SWQ6dX09dC5wYXlsb2FkO2lmKCFpKXtjb25zdCB0PSJpbnRlcm5hbCBlcnJvcjogbWlzc2luZyBmaWVsZHMgaW4gcGF5bG9hZCI7cmV0dXJuIG4mJm4oRWUuRVJST1Ise3R5cGU6RWUuT1RIRVJ9KSxhZShuZXcgRXJyb3IodCksImZpbmlzaFJlY29yZCIsZSxvLHMsdSksbnVsbH10LnJlY29yZCgpLnN0b3BEZXZpY2UoKTtjb25zdCBsPXQuY2FtZXJhT2ZmP0VlLk1FRElBX1RZUEVfQVVESU86RWUuTUVESUFfVFlQRV9WSURFTyxmPVp0KCk7Y29uc29sZS5sb2coInd0ZiIpO2NvbnN0IGQ9e3N1cnZleUlkOmksdXBkYXRlZEF0OihuZXcgRGF0ZSkudG9JU09TdHJpbmcoKSxtZWRpYVR5cGU6bCxtZWRpYVJlY29yZGluZ1VpZDpmfTtjb25zb2xlLmxvZyhkKSxhJiYoZC5xdWVzdGlvbklkPWEpLGMmJihkLnJlc3BvbnNlR3JvdXBVaWQ9YykscyYmKGQudmlzaXRvcklkPXMpO2NvbnN0IHA9YXdhaXQoYXN5bmMoKT0+e2NvbnN0IHI9YXdhaXQgZmV0Y2goYCR7ZX0vMi9lbnZpcm9ubWVudHMvaW50ZWdyYXRpb25zL3VwbG9hZGAse21ldGhvZDoiUE9TVCIsY2FjaGU6Im5vLWNhY2hlIixoZWFkZXJzOnsiQ29udGVudC1UeXBlIjoiYXBwbGljYXRpb24vanNvbiJ9LGJvZHk6SlNPTi5zdHJpbmdpZnkoZCl9KTtpZihyLm9rKXtjb25zdCB0PWF3YWl0IHIuanNvbigpO3JldHVybiBuJiZuKEVlLlVQTE9BRF9TVEFSVEVELHtbRWUuVVBMT0FEX0lEXTp0LnVwbG9hZC5pZCxbRWUuTUVESUFfVFlQRV06bCxbRWUuTUVESUFfUkVDT1JESU5HX1VJRF06Zn0pLHQudXBsb2FkLnVybH1yZXR1cm4gbiYmbihFZS5FUlJPUix7dHlwZTpFZS5PVEhFUixyZXNwb25zZTpyfSksYWUobmV3IEVycm9yKCJmYWlsZWQgdG8gZ2V0IHVwbG9hZCByZXNwb25zZSB3aXRoIHVybCIpLCJmaW5pc2hSZWNvcmQiLGUsbyx0LnBheWxvYWQudmlzaXRvcklkLHQucGF5bG9hZC5lbnZJZCksbnVsbH0pKCk7cCYmKG9lPXdpbmRvdy5VcENodW5rLmNyZWF0ZVVwbG9hZCh7ZW5kcG9pbnQ6cCxmaWxlOm5ldyBGaWxlKFt0LnJlY29yZGVkRGF0YV0sYHJlY29yZGluZyAke2x9ICR7RGF0ZS5ub3coKX1gKSxjaHVua1NpemU6NTEyMH0pLG9lLnN0YXJ0VGltZT1EYXRlLm5vdygpLG9lLm9uKCJlcnJvciIsKG49PntyKHQudXBsb2FkUHJvZ3Jlc3NMYWJlbCwibm9uZSIpLGFlKG4sImZpbmlzaFJlY29yZCIsZSxvLHQucGF5bG9hZC52aXNpdG9ySWQsdC5wYXlsb2FkLmVudklkKX0pKSxvZS5vbigicHJvZ3Jlc3MiLChlPT57cih0LnVwbG9hZFByb2dyZXNzTGFiZWwsInByb2dyZXNzIixlLmRldGFpbCl9KSksb2Uub24oInN1Y2Nlc3MiLCgoKT0+e3IodC51cGxvYWRQcm9ncmVzc0xhYmVsLCJzdWNjZXNzIiksbiYmbihFZS5VUExPQURfRklOSVNIRUQpfSkpKX0pKX0pKHUscixvLHNlLGEpLGkmJih1LmRldmljZUJ1dHRvbiYmdS5kZXZpY2VCdXR0b24uaGlkZSgpLHUuc3JjKGkpLGIuc2hvdygpLHYuaGlkZSgpLGYucmVtb3ZlQ2xhc3MoSnQpKTtjb25zdCB4PVt7bmFtZToibWljcm9waG9uZSJ9XTshdS5jYW1lcmFPZmYmJngucHVzaCh7bmFtZToiY2FtZXJhIn0pLFByb21pc2UuYWxsKHgubWFwKCh0PT5uYXZpZ2F0b3IucGVybWlzc2lvbnMucXVlcnkodCkpKSkudGhlbigodD0+e3QucmVkdWNlKCgodCxlKT0+dCYiZ3JhbnRlZCI9PT1lLnN0YXRlKSwhMCkmJnUmJih1LmRldmljZUJ1dHRvbiYmdS5kZXZpY2VCdXR0b24uaGlkZSgpLCFpJiZ1LnJlY29yZCgpLmdldERldmljZSgpKX0pKS5jYXRjaCgodD0+e30pKX0saGU9KHQsZT0zKT0+e2NvbnN0IG49ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoInVsLXJlY29yZGluZy1jb3VudGRvd24tc2NyZWVuIik7biYmMD09PWU/KG4ucmVtb3ZlKCksdC5yZWNvcmQoKS5zdGFydCgpKTpuJiYobi5pbm5lckhUTUw9YDxzcGFuIGNsYXNzPSd1bC1jb3VudGRvd24tdGV4dCc+UmVjb3JkaW5nIGluLi4uICR7ZX08L3NwYW4+YCxzZXRUaW1lb3V0KCgoKT0+e2hlKHQsZS0xKX0pLDFlMykpfSx2ZT10PT57Y29uc3QgZT1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKTtyZXR1cm4gZS5jbGFzc05hbWU9InVsLXZpZGVvLWNvbnRhaW5lciIsZS5hcHBlbmRDaGlsZCgodD0+e2NvbnN0IGU9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2Iik7cmV0dXJuIGUuY2xhc3NOYW1lPSJ1bC12aWRlby1wbGF5ZXItbG9hZGluZyIsZS5pZD1ZdCh0KSxbImZpcnN0Iiwic2Vjb25kIiwidGhpcmQiLCJmb3VydGgiXS5tYXAoKHQ9Pntjb25zdCBuPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpO24uY2xhc3NOYW1lPXQsZS5hcHBlbmRDaGlsZChuKX0pKSxlfSkodCkpLGV9LGdlPSh0LGUpPT57Y29uc3Qgbj1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJ2aWRlbyIpO24uaWQ9dCxuLmNsYXNzTmFtZT0idmlkZW8tanMgdmpzLWRlZmF1bHQtc2tpbiB1bC12aWRlby1wbGF5ZXItdmlkZW8iO2NvbnN0IHI9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgicCIpO3IuY2xhc3NOYW1lPSJ2anMtbm8tanMiLHIuaW5uZXJIVE1MPSJUbyB2aWV3IHRoaXMgdmlkZW8gcGxlYXNlIGVuYWJsZSBKYXZhU2NyaXB0LCBhbmQgY29uc2lkZXIgdXBncmFkaW5nIHRvIGEgd2ViIGJyb3dzZXIgdGhhdCI7Y29uc3Qgbz1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJhIik7cmV0dXJuIG8uaHJlZj0iaHR0cHM6Ly92aWRlb2pzLmNvbS9odG1sNS12aWRlby1zdXBwb3J0LyIsby50YXJnZXQ9Il9ibGFuayIsby5pbm5lckhUTUw9InN1cHBvcnRzIEhUTUw1IHZpZGVvIixyLmFwcGVuZENoaWxkKG8pLG4uYXBwZW5kQ2hpbGQociksZS5hcHBlbmRDaGlsZChuKSxlfSx5ZT0odCxlKT0+e2U/KHQuY2hpbGRyZW4oKVswXS5jbGFzc0xpc3QuYWRkKCJ2anMtaGlkZGVuIiksdC5hdWRpb1BsYXllclBsYWNlaG9sZGVyLnNob3coKSxkb2N1bWVudC5nZXRFbGVtZW50QnlJZChgJHt0LmlkKCl9X2h0bWw1X2FwaWApLnN0eWxlLmhlaWdodD0iMHB4Iik6KHQuY2hpbGRyZW4oKVswXS5jbGFzc0xpc3QucmVtb3ZlKCJ2anMtaGlkZGVuIiksdC5hdWRpb1BsYXllclBsYWNlaG9sZGVyLmhpZGUoKSxkb2N1bWVudC5nZXRFbGVtZW50QnlJZChgJHt0LmlkKCl9X2h0bWw1X2FwaWApLnN0eWxlLmhlaWdodD0iMTAwJSIpfSxtZT10PT57Y29uc3QgZT13aW5kb3cudmlkZW9qcyxuPXQrcmU7aWYoZSl7dHJ5e2lmKCFlKG4pLnJlY29yZCgpLnN0cmVhbSlyZXR1cm59Y2F0Y2godCl7cmV0dXJufWRvY3VtZW50LmdldEVsZW1lbnRCeUlkKG4pJiZlKG4pLnJlY29yZCgpLnN0b3AoKSxlKG4pLnJlY29yZCgpLnN0b3BEZXZpY2UoKX19LGJlPXQ9Pnt3aW5kb3cudmlkZW9qcyh0K25lKS5wYXVzZSgpfSx4ZT0odCxlLG4scik9Pnt3aW5kb3cudmlkZW9qcyh0K25lKTtjb25zdCBvPXdpbmRvdy52aWRlb2pzKHQrcmUpOygodCxlLG4pPT57Y29uc3Qgcj13aW5kb3cudmlkZW9qcyh0K25lKTshci5wYXVzZWQoKSYmci5wYXVzZSgpLHIuc3JjKHtzcmM6ZSx0eXBlOiJhcHBsaWNhdGlvbi94LW1wZWdVUkwifSksci5jdXJyZW50VGltZSgwKSx5ZShyLG4pO2NvbnN0IG89d2UoZSk7IW4mJmUmJihvP3IucG9zdGVyKG8pOnllKHIsITApKSxyLm9uKCJwbGF5IiwoKCk9PntufHwhZXx8b3x8eWUociwhMSl9KSl9KSh0LGUsciksby5yZWNvcmQoKS5yZXNldFN0YXRlKCksby5yZWNvcmQoKS5nZXREZXZpY2UoKTtpZihkb2N1bWVudC5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKCJ1bC12aWRlby1yZWNvcmRlci1kZWxldGUtYnV0dG9uIilbMF0uY2xhc3NMaXN0LmFkZChKdCksby5jYW1lcmFPZmYpe2RvY3VtZW50LmdldEVsZW1lbnRzQnlDbGFzc05hbWUoInVsLXZpZGVvLXJlY29yZGVyLWNhbWVyYS1vZmYtYnV0dG9uLWF1ZGlvLW9ubHkiKVswXS5jbGFzc0xpc3QucmVtb3ZlKEp0KSx3aW5kb3cubmF2aWdhdG9yLm1lZGlhRGV2aWNlcy5nZXRVc2VyTWVkaWEoe3ZpZGVvOiEwLGF1ZGlvOiEwfSkudGhlbigodD0+e28ucmVjb3JkKCkub25EZXZpY2VSZWFkeSh0KSx0LmdldFZpZGVvVHJhY2tzKCkuZm9yRWFjaCgodD0+e3Quc3RvcCgpfSkpfSkpLmNhdGNoKG8ucmVjb3JkKCkub25EZXZpY2VFcnJvci5iaW5kKG8ucmVjb3JkKCkpKX1lbHNle2RvY3VtZW50LmdldEVsZW1lbnRzQnlDbGFzc05hbWUoInVsLXZpZGVvLXJlY29yZGVyLWNhbWVyYS1vZmYtYnV0dG9uIilbMF0uY2xhc3NMaXN0LnJlbW92ZShKdCl9by5wYXlsb2FkPW4sc2Uoby51cGxvYWRQcm9ncmVzc0xhYmVsLCJub25lIiksaWU9RGF0ZS5ub3coKX0sd2U9dD0+e2NvbnN0IGU9dC5tYXRjaCgvaHR0cHM6XC9cL3N0cmVhbS5tdXguY29tXC8oLiopLyksbj1lP2VbMV06bnVsbDtyZXR1cm4gbj9gaHR0cHM6Ly9pbWFnZS5tdXguY29tLyR7bn0vdGh1bWJuYWlsLmpwZz90aW1lPTBgOm51bGx9LEVlPXtVUExPQURfU1RBUlRFRDoidXBsb2FkLnN0YXJ0ZWQiLFVQTE9BRF9GSU5JU0hFRDoidXBsb2FkLmZpbmlzaGVkIixERUxFVEU6ImRlbGV0ZSIsRVJST1I6ImVycm9yIixNRURJQV9UWVBFOiJtZWRpYS50eXBlIixQRVJNSVNTSU9OX0RFTklFRDoicGVybWlzc2lvbl9kZW5pZWQiLE9USEVSOiJvdGhlciIsVVBMT0FEX0lEOiJ1cGxvYWQuaWQiLE1FRElBX1JFQ09SRElOR19VSUQ6Im1lZGlhLnJlY29yZGluZy51aWQiLE1FRElBX1RZUEVfVklERU86InZpZGVvIixNRURJQV9UWVBFX0FVRElPOiJhdWRpbyJ9LGplPXtQbGF5YmFja1JhdGVNZW51QnV0dG9uOiJTcGVlZCIsUGxheVRvZ2dsZToiUGxheSIsRnVsbHNjcmVlblRvZ2dsZToiRXhwYW5kIixUdXJuT25DYW1lcmE6IlR1cm4gb24iLFR1cm5PZmZDYW1lcmE6IlR1cm4gb2ZmIixEZWxldGVCdXR0b246IkRlbGV0ZSIsUmVjb3JkQnV0dG9uOiJSZWNvcmQiLFN0b3BCdXR0b246IlN0b3AiLFBhdXNlQnV0dG9uOiJQYXVzZSJ9O2Z1bmN0aW9uIENlKHQsZSl7dmFyIG49T2JqZWN0LmtleXModCk7aWYoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyl7dmFyIHI9T2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyh0KTtlJiYocj1yLmZpbHRlcigoZnVuY3Rpb24oZSl7cmV0dXJuIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IodCxlKS5lbnVtZXJhYmxlfSkpKSxuLnB1c2guYXBwbHkobixyKX1yZXR1cm4gbn12YXIga2U9InVsLWJ1dHRvbi1pbmFjdGl2ZSI7ZnVuY3Rpb24gU2UodCxlKXtlKHQpfXZhciBPZT17ZXE6ZnVuY3Rpb24odCxlKXtyZXR1cm4gdD09ZX0sbmVxOmZ1bmN0aW9uKHQsZSl7cmV0dXJuIXRoaXMuZXEodCxlKX0sZ3Q6ZnVuY3Rpb24odCxlKXtyZXR1cm4gdD5lfSxndGU6ZnVuY3Rpb24odCxlKXtyZXR1cm4gdD49ZX0sbHQ6ZnVuY3Rpb24odCxlKXtyZXR1cm4gdDxlfSxsdGU6ZnVuY3Rpb24odCxlKXtyZXR1cm4gdDw9ZX0sbGlzdF9leGFjdDpmdW5jdGlvbih0LGUpe3JldHVybiEoIUFycmF5LmlzQXJyYXkodCl8fCFBcnJheS5pc0FycmF5KGUpKSYmdC5zbGljZSgpLnNvcnQoKS5qb2luKCIsIik9PT1lLnNsaWNlKCkuc29ydCgpLmpvaW4oIiwiKX0sbGlzdF9hbGw6ZnVuY3Rpb24odCxlKXtyZXR1cm4hKCFBcnJheS5pc0FycmF5KHQpfHwhQXJyYXkuaXNBcnJheShlKSkmJiFlLnNvbWUoKGZ1bmN0aW9uKGUpe3JldHVybi0xPT09dC5pbmRleE9mKGUpfSkpfSxsaXN0X2FsbzpmdW5jdGlvbih0LGUpe3JldHVybiEoIUFycmF5LmlzQXJyYXkodCl8fCFBcnJheS5pc0FycmF5KGUpKSYmZS5zb21lKChmdW5jdGlvbihlKXtyZXR1cm4tMSE9dC5pbmRleE9mKGUpfSkpfX07dmFyIEllPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdChlKXt2YXIgbj10aGlzO2J0KCkodGhpcyx0KSx0aGlzLnByb21pc2U9bmV3IFByb21pc2UoKGZ1bmN0aW9uKHQscil7bi5wYXlsb2FkPWUsbi5yZWplY3Q9cixuLnJlc29sdmU9dH0pKX1yZXR1cm4gd3QoKSh0LFt7a2V5OiJyZXNvbHZlUmVxdWVzdCIsdmFsdWU6ZnVuY3Rpb24odCl7dGhpcy5yZXNvbHZlKHQpfX1dKSx0fSgpO2Z1bmN0aW9uIEFlKHQsZSl7cmV0dXJuIG5ldyBQcm9taXNlKChmdW5jdGlvbihuKXtzZXRUaW1lb3V0KG4uYmluZChudWxsLGUpLHQpfSkpfXZhciBNZT0xMCxfZT0hMSxUZT0iIixSZT0hMSxMZT1bXTtmdW5jdGlvbiBQZSh0KXtyZXR1cm4gdC5fY29uZmlnJiZ0Ll9jb25maWcuaW5zdGFsbGF0aW9uTWV0aG9kP3QuX2NvbmZpZy5pbnN0YWxsYXRpb25NZXRob2Q6dC5fZ3RtP3E6dC5fc2VnbWVudD9XOkd9ZnVuY3Rpb24gTmUodCl7X2U9ITAsVGU9dH1mdW5jdGlvbiBEZSgpe3ZhciB0PWFyZ3VtZW50cy5sZW5ndGg+MCYmdm9pZCAwIT09YXJndW1lbnRzWzBdP2FyZ3VtZW50c1swXTp7fSxlPXsiQ29udGVudC1UeXBlIjoiYXBwbGljYXRpb24vanNvbiIsInVzZXJsZWFwLXBsYXRmb3JtIjoid2ViIiwieC11bC1zZGstdmVyc2lvbiI6IjIuMTQuNiJ9O2lmKHQuZW52SWQmJihlW1VdPXQuZW52SWQpLHQudG9rZW4mJihlLkF1dGhvcml6YXRpb249IkJlYXJlciAiK3QudG9rZW4pLHQudXNlcklkJiYoZVt6XT10LnVzZXJJZCksdC52aXNpdG9ySWQmJihlW1ZdPXQudmlzaXRvcklkKSx0LnBhcnRuZXJBbm9ueW1vdXNJZCYmKGVbQl09dC5wYXJ0bmVyQW5vbnltb3VzSWQpLHQubW9iaWxlSGVhZGVyc0pTT04pe3ZhciBuPUpTT04ucGFyc2UodC5tb2JpbGVIZWFkZXJzSlNPTik7T2JqZWN0LmFzc2lnbihlLG4pfXJldHVybiBlW0hdPVBlKHQpLHQubG9jYWxlJiYoZVsiYWNjZXB0LWxhbmd1YWdlIl09dC5sb2NhbGUpLGV9ZnVuY3Rpb24gRmUodCxlLG4pe3JldHVybiBVZS5hcHBseSh0aGlzLGFyZ3VtZW50cyl9ZnVuY3Rpb24gVWUoKXtyZXR1cm4oVWU9TigpKEwoKS5tYXJrKChmdW5jdGlvbiB0KGUsbixyKXt2YXIgbztyZXR1cm4gTCgpLndyYXAoKGZ1bmN0aW9uKHQpe2Zvcig7Oylzd2l0Y2godC5wcmV2PXQubmV4dCl7Y2FzZSAwOmlmKCFlKXt0Lm5leHQ9NDticmVha31yZXR1cm4gdC5hYnJ1cHQoInJldHVybiIse3N0YXR1czo0Mjl9KTtjYXNlIDQ6cmV0dXJuIG89bmV3IEllKHIpLExlLnB1c2gobyksdC5hYnJ1cHQoInJldHVybiIsby5wcm9taXNlKTtjYXNlIDc6Y2FzZSJlbmQiOnJldHVybiB0LnN0b3AoKX19KSx0KX0pKSkpLmFwcGx5KHRoaXMsYXJndW1lbnRzKX1mdW5jdGlvbiBCZSh0LGUpe3JldHVybiB6ZS5hcHBseSh0aGlzLGFyZ3VtZW50cyl9ZnVuY3Rpb24gemUoKXtyZXR1cm4gemU9TigpKEwoKS5tYXJrKChmdW5jdGlvbiB0KGUsbil7dmFyIHIsbyxpLGEsYyxzLHUsbCxmLGQ9YXJndW1lbnRzO3JldHVybiBMKCkud3JhcCgoZnVuY3Rpb24odCl7Zm9yKDs7KXN3aXRjaCh0LnByZXY9dC5uZXh0KXtjYXNlIDA6aWYocj1kLmxlbmd0aD4yJiZ2b2lkIDAhPT1kWzJdP2RbMl06MCxvPWQubGVuZ3RoPjMmJnZvaWQgMCE9PWRbM10mJmRbM10saT1kLmxlbmd0aD40JiZ2b2lkIDAhPT1kWzRdJiZkWzRdLGE9e3VybDplLG9wdGlvbnM6bixhdHRlbXB0OnIsc2hvdWxkRHJvcE9uUmF0ZUxpbWl0Om99LCFSZXx8aSl7dC5uZXh0PTY7YnJlYWt9cmV0dXJuIHQuYWJydXB0KCJyZXR1cm4iLEZlKG8saSxhKSk7Y2FzZSA2OmlmKGM9e29rOiExLHJlcG9ydEVycm9yOiExfSwhX2Upe3QubmV4dD0xMDticmVha31yZXR1cm4gY29uc29sZS5sb2coIlVzZXJMZWFwIC0gIi5jb25jYXQoVGUpKSx0LmFicnVwdCgicmV0dXJuIixjKTtjYXNlIDEwOnJldHVybiB0LnByZXY9MTAsbi5oZWFkZXJzPU9iamVjdC5hc3NpZ24oRGUoKSxuLmhlYWRlcnMpLHQubmV4dD0xNCxmZXRjaChlLG4pO2Nhc2UgMTQ6aWYoNDI5IT09KHM9dC5zZW50KS5zdGF0dXMpe3QubmV4dD0yNDticmVha31pZighKCFSZSYmIW98fGkpKXt0Lm5leHQ9MjM7YnJlYWt9cmV0dXJuIFJlPSEwLHU9cy5oZWFkZXJzLmhhcygicmF0ZWxpbWl0LXJlc2V0Iik/TnVtYmVyKHMuaGVhZGVycy5nZXQoInJhdGVsaW1pdC1yZXNldCIpKTpNZSx0LmFicnVwdCgicmV0dXJuIixBZSgxZTMqdSkudGhlbihOKCkoTCgpLm1hcmsoKGZ1bmN0aW9uIHQoKXtyZXR1cm4gTCgpLndyYXAoKGZ1bmN0aW9uKHQpe2Zvcig7Oylzd2l0Y2godC5wcmV2PXQubmV4dCl7Y2FzZSAwOnJldHVybiB0LmFicnVwdCgicmV0dXJuIixCZShlLG4sMCxvLCEwKSk7Y2FzZSAxOmNhc2UiZW5kIjpyZXR1cm4gdC5zdG9wKCl9fSksdCl9KSkpKSk7Y2FzZSAyMzpyZXR1cm4gdC5hYnJ1cHQoInJldHVybiIsRmUobywhMSxhKSk7Y2FzZSAyNDppZihSZT0hMSxMZS5sZW5ndGgmJihMZS5tYXAoKGZ1bmN0aW9uKHQpe3ZhciBlPXQucGF5bG9hZDtCZShlLnVybCxlLm9wdGlvbnMsZS5hdHRlbXB0LGUuc2hvdWxkRHJvcE9uUmF0ZUxpbWl0KS50aGVuKChmdW5jdGlvbihlKXt0LnJlc29sdmVSZXF1ZXN0KGUpfSkpfSkpLExlPVtdKSwhcy5vayl7dC5uZXh0PTQxO2JyZWFrfWlmKDI0OSE9PXMuc3RhdHVzKXt0Lm5leHQ9MzA7YnJlYWt9cmV0dXJuIE5lKCksdC5hYnJ1cHQoInJldHVybiIsYyk7Y2FzZSAzMDpyZXR1cm4gdC5uZXh0PTMyLHMudGV4dCgpO2Nhc2UgMzI6cmV0dXJuIGw9dC5zZW50LHQucHJldj0zMyxsJiYiT0siIT09bCYmKHMuanNvbj1KU09OLnBhcnNlKGwpKSx0LmFicnVwdCgicmV0dXJuIixzKTtjYXNlIDM4OnJldHVybiB0LnByZXY9MzgsdC50MD10LmNhdGNoKDMzKSx0LmFicnVwdCgicmV0dXJuIix7b2s6ITEscmVwb3J0RXJyb3I6ITAsZXJyb3I6bmV3IEVycm9yKCJmYWlsZWQgcGFyc2luZyByZXNwb25zZSBqc29uIGZvciAiLmNvbmNhdChlLCIgLSAiKS5jb25jYXQobCkpfSk7Y2FzZSA0MTpyZXR1cm4gdC5hYnJ1cHQoInJldHVybiIscyk7Y2FzZSA0NDppZih0LnByZXY9NDQsdC50MT10LmNhdGNoKDEwKSwhKChmPXIrMSk+Mikpe3QubmV4dD00OTticmVha31yZXR1cm4gdC5hYnJ1cHQoInJldHVybiIse29rOiExLHJlcG9ydEVycm9yOiExLGVycm9yOnQudDF9KTtjYXNlIDQ5OnJldHVybiB0LmFicnVwdCgicmV0dXJuIixBZSgxZTMqZikudGhlbigoZnVuY3Rpb24oKXtyZXR1cm4gQmUoZSxuLGYpfSkpKTtjYXNlIDUwOmNhc2UiZW5kIjpyZXR1cm4gdC5zdG9wKCl9fSksdCxudWxsLFtbMTAsNDRdLFszMywzOF1dKX0pKSksemUuYXBwbHkodGhpcyxhcmd1bWVudHMpfWZ1bmN0aW9uIFZlKHQsZSl7dmFyIG49T2JqZWN0LmtleXModCk7aWYoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyl7dmFyIHI9T2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyh0KTtlJiYocj1yLmZpbHRlcigoZnVuY3Rpb24oZSl7cmV0dXJuIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IodCxlKS5lbnVtZXJhYmxlfSkpKSxuLnB1c2guYXBwbHkobixyKX1yZXR1cm4gbn1mdW5jdGlvbiBIZSh0KXtmb3IodmFyIGU9MTtlPGFyZ3VtZW50cy5sZW5ndGg7ZSsrKXt2YXIgbj1udWxsIT1hcmd1bWVudHNbZV0/YXJndW1lbnRzW2VdOnt9O2UlMj9WZShPYmplY3QobiksITApLmZvckVhY2goKGZ1bmN0aW9uKGUpe3IoKSh0LGUsbltlXSl9KSk6T2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcnM/T2JqZWN0LmRlZmluZVByb3BlcnRpZXModCxPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycyhuKSk6VmUoT2JqZWN0KG4pKS5mb3JFYWNoKChmdW5jdGlvbihlKXtPYmplY3QuZGVmaW5lUHJvcGVydHkodCxlLE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IobixlKSl9KSl9cmV0dXJuIHR9ZnVuY3Rpb24gcWUodCxlLG4pe3JldHVybiBXZS5hcHBseSh0aGlzLGFyZ3VtZW50cyl9ZnVuY3Rpb24gV2UoKXtyZXR1cm4gV2U9TigpKEwoKS5tYXJrKChmdW5jdGlvbiB0KGUsbixyKXt2YXIgbyxpLGEsYyxzLHUsbCxmO3JldHVybiBMKCkud3JhcCgoZnVuY3Rpb24odCl7Zm9yKDs7KXN3aXRjaCh0LnByZXY9dC5uZXh0KXtjYXNlIDA6cmV0dXJuIG89ZS5tb2RlLGk9ZS51c2VySWQsYT1lLmVudklkLGM9ZS5hcGlVUkwscz1lLmhlYWRlcnMsdT13aW5kb3cuZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LGw9e21vZGU6byxzY3JlZW5XaWR0aDp3aW5kb3cuc2NyZWVuLndpZHRoLHNjcmVlbkhlaWdodDp3aW5kb3cuc2NyZWVuLmhlaWdodCxjbGllbnRXaWR0aDp1LmNsaWVudFdpZHRoLGNsaWVudEhlaWdodDp1LmNsaWVudEhlaWdodCxsb2NhdGlvbjp3aW5kb3cubG9jYXRpb24uaHJlZixsYW5ndWFnZTp3aW5kb3cubmF2aWdhdG9yLmxhbmd1YWdlfSxmPXthY3Rpb246bixlcnI6e21lc3NhZ2U6ci5tZXNzYWdlLHN0YWNrOnIuc3RhY2t9LG1ldGE6bCx2aWQ6aSxlbnZJZDphfSx0Lm5leHQ9NixCZSgiIi5jb25jYXQoYywiL3Nkay8xL2Vycm9ycyIpLHttZXRob2Q6IlBPU1QiLGhlYWRlcnM6T2JqZWN0LmFzc2lnbih7IngtdWwtZXJyb3IiOndpbmRvdy5idG9hKCJ1c2VybGVhcC0iLmNvbmNhdChEYXRlLm5vdygpLCItZXJyb3IiKSl9LHMpLGJvZHk6SlNPTi5zdHJpbmdpZnkoZil9KTtjYXNlIDY6dC5zZW50Lm9rfHxjb25zb2xlLndhcm4oIltVc2VyTGVhcF0gKEVSUi00NDQpIEZhaWxlZCB0byByZXBvcnQgZXJyb3IgdG8gQVBJIixyKTtjYXNlIDg6Y2FzZSJlbmQiOnJldHVybiB0LnN0b3AoKX19KSx0KX0pKSksV2UuYXBwbHkodGhpcyxhcmd1bWVudHMpfXZhciBHZT1mdW5jdGlvbih0KXtyZXR1cm4gMD09PXQudXNlcklkfHx0Lm1ldGEmJiJ0ZXN0Ij09PXQubWV0YS5tb2RlfHx0LmlzUHJldmlld30sWmU9e3N1cnZleUlkOm51bGwscnVubmluZzohMSxmcmFtZTpudWxsLGVudklkOm51bGwsdXNlcklkOm51bGwsbWV0YTp7fSxib3JkZXI6bnVsbCxmb250RmFtaWx5Om51bGwsZm9udEZhbWlseVVSTDpudWxsLHRpbWVvdXQ6bnVsbCxpbnRlcnZhbDpudWxsLG1vZGU6bnVsbCxkZWNrOntpbmRleDowLGNhcmRzOltdfSxjb250ZXh0Ont9LHNlbmRpbmc6ITEsY2FyZHM6e29wZW46ZnVuY3Rpb24odCl7dmFyIGU9dC5jbGFzc05hbWUsbj10Lm1lc3NhZ2Uscj10LnByb3BlcnRpZXMsbz0odC5sb2NhbGUsdC5uZXh0KSxpPXQucXVlc3Rpb25JZDtyZXR1cm4gZnVuY3Rpb24odCxhKXt2YXIgYz10LmFwcCxzPWMudXNlTW9iaWxlU3R5bGluZyx1PWMuYm9yZGVyLGw9RihbZSwidWwtY2FyZC0tdGV4dCIsbHRdKSxmPV90KHIpLGQ9ciYmci5vcGVuVGV4dFBsYWNlaG9sZGVyP3Iub3BlblRleHRQbGFjZWhvbGRlcjpudWxsO3JldHVybiBJKCJmb3JtIix7aWQ6InRleHQtZm9ybSIsY2xhc3NOYW1lOmwsb25zdWJtaXQ6ZnVuY3Rpb24odCl7cmV0dXJuIER0KHQsbyl9LGtleTppfSxUdChmLG4pLGYsSSgiZGl2Iix7Y2xhc3NOYW1lOiJ1bC1jYXJkLXRleHQifSxJKCJkaXYiLHtjbGFzc05hbWU6InVsLWNhcmQtdGV4dF9fY29udGFpbmVyIn0sSSgidGV4dGFyZWEiLHsiZGF0YS1ncmFtbSI6ImZhbHNlIixtYXhsZW5ndGg6IjUwMDAiLGNsYXNzTmFtZTpGKGZ0KGl0LHMpKSxuYW1lOiJ0ZXh0IixwbGFjZWhvbGRlcjpkLCJhcmlhLXBsYWNlaG9sZGVyIjpkLCJhcmlhLW11bHRpbGluZSI6InRydWUiLHZhbHVlOnQub3BlblRleHQudmFsdWUsb25jcmVhdGU6TnQoKSxvbmlucHV0OmZ1bmN0aW9uKHQpe3QucHJldmVudERlZmF1bHQoKSx0LnN0b3BQcm9wYWdhdGlvbigpLGEub3BlblRleHQub25UZXh0Q2hhbmdlKHQudGFyZ2V0LnZhbHVlKX0sb25mb2N1czpmdW5jdGlvbih0KXt0LnRhcmdldC5zdHlsZS5ib3JkZXJDb2xvcj11fSxvbmJsdXI6ZnVuY3Rpb24odCl7dC50YXJnZXQuc3R5bGUuYm9yZGVyQ29sb3I9IiNlNmU2ZTYifSx0YWJpbmRleDowLCJhcmlhLWxhYmVsbGVkYnkiOnN0LGNvbnRlbnRlZGl0YWJsZToidHJ1ZSIscm9sZToidGV4dGJveCIsImFyaWEtbGFiZWwiOmR9KSksSSgiYnV0dG9uIix7aWQ6InVsLWNhcmQtdGV4dF9fYnV0dG9uIixjbGFzc05hbWU6InVsLWNhcmQtdGV4dF9fYnV0dG9uIixzdHlsZTp7YmFja2dyb3VuZENvbG9yOnV9LG9uY2xpY2s6ZnVuY3Rpb24oZSl7KGUucHJldmVudERlZmF1bHQoKSxlLnN0b3BQcm9wYWdhdGlvbigpLGRvY3VtZW50LmZvcm1zWyJ0ZXh0LWZvcm0iXSkmJihEdCh0Lm9wZW5UZXh0LnZhbHVlLnRyaW0oKSxvKSx0Lm9wZW5UZXh0LnZhbHVlPSIiKX0scm9sZToiYnV0dG9uIiwiYXJpYS1sYWJlbGxlZGJ5IjoiIi5jb25jYXQoc3QsIiB1bC1jYXJkLXRleHRfX2J1dHRvbiIpfSxSdChyKSkpLEkoTXQsbnVsbCkpfX0sdGV4dHVybHByb21wdDpmdW5jdGlvbih0KXt2YXIgZT10LmNsYXNzTmFtZSxuPXQubWVzc2FnZSxyPXQucHJvcGVydGllcyxvPSh0LmxvY2FsZSx0Lm5leHQpLGk9dC5xdWVzdGlvbklkO3JldHVybiBmdW5jdGlvbih0LGEpe3ZhciBjPUYoW2UsInVsLWNhcmRfX3RleHQtdXJsLXByb21wdCIsbHRdKSxzPXQuYXBwLmJvcmRlcjtyZXR1cm4gSSgiZGl2Iix7Y2xhc3NOYW1lOmMsa2V5Oml9LEkoInAiLHtpZDpzdCxjbGFzc05hbWU6InVsLXF1ZXN0aW9uIn0sbiksSSgiZGl2Iix7aWQ6InVsLWNhcmRfX3RleHQtdXJsLWJvZHktY29udGFpbmVyIixjbGFzc05hbWU6InVsLWNhcmRfX3RleHQtdXJsLWJvZHktY29udGFpbmVyIn0sKHImJnIuYm9keT9yLmJvZHkuc3BsaXQoL1xuXHMqXG4vZyk6W10pLm1hcCgoZnVuY3Rpb24odCl7cmV0dXJuIEkoInAiLHtjbGFzc05hbWU6InVsLWNhcmRfX3RleHQtdXJsLXByb21wdC1ib2R5In0sdCl9KSkpLEkoImEiLHtpZDoidWwtY2FyZC10ZXh0X19idXR0b24iLGNsYXNzTmFtZToidWwtY2FyZC10ZXh0X19idXR0b24gdWwtY2FyZF9fdGV4dC11cmwtcHJvbXB0LWJ1dHRvbiIsc3R5bGU6e2JhY2tncm91bmRDb2xvcjpzLCJtYXJnaW4tcmlnaHQiOiJhdXRvIiwidGV4dC1vdmVyZmxvdyI6ImVsbGlwc2lzIix0ZXh0RGVjb3JhdGlvbjoibm9uZSIsb3ZlcmZsb3c6InZpc2libGUifSxvbmNsaWNrOmZ1bmN0aW9uKHQpe28oKX0sb25rZXlwcmVzczpmdW5jdGlvbih0KXsxMyE9dC5rZXlDb2RlJiYzMiE9dC5rZXlDb2RlfHxvKCl9LGhyZWY6ciYmci5idXR0b25VcmwsdGFyZ2V0OiJfYmxhbmsiLHJvbGU6ImJ1dHRvbiIsdGFiaW5kZXg6MCwiYXJpYS1sYWJlbGxlZGJ5IjoiIi5jb25jYXQoc3QsIiB1bC1jYXJkLXRleHRfX2J1dHRvbiIpLCJhcmlhLWRlc2NyaWJlZGJ5IjoidWwtY2FyZF9fdGV4dC11cmwtYm9keS1jb250YWluZXIifSxyJiZyLmJ1dHRvblRleHQ/ci5idXR0b25UZXh0OiJOZXh0IiksSShNdCxudWxsKSl9fSxtdWx0aXBsZWNob2ljZTpmdW5jdGlvbih0KXt2YXIgZT10LmNsYXNzTmFtZSxuPXQuYm9yZGVyLG89dC5tZXNzYWdlLGk9dC5wcm9wZXJ0aWVzLGE9KHQubG9jYWxlLHQub3B0aW9ucyksYz12b2lkIDA9PT1hP1tdOmEscz10Lm5leHQsdT10LnF1ZXN0aW9uSWQ7cmV0dXJuIGZ1bmN0aW9uKHQsYSl7dmFyIGw9dC5hcHAudXNlTW9iaWxlU3R5bGluZyxmPUYoW2UsInVsLWNhcmQtLW11bHRpcGxlIixsdF0pO2Z1bmN0aW9uIGQodCxlKXtzKHt2YWx1ZTpyKCkoe30sdCxlKX0pfXZhciBwPWMubWFwKChmdW5jdGlvbih0LGUpe3ZhciByPXQuaWQsbz10LmxhYmVsLGk9dC52YWx1ZTtyZXR1cm4gSShGdCx7Ym9yZGVyOm4saW5kZXg6ZSxsYWJlbDpvLHRhYmluZGV4OmUrMSxvblNlbGVjdDpkLmJpbmQobnVsbCxyLGkpLGlkOnIsaXNSYWRpbzohMCx1c2VNb2JpbGVTdHlsaW5nOmx9KX0pKSxoPV90KGkpO3JldHVybiBJKCJkaXYiLHtjbGFzc05hbWU6ZixrZXk6dX0sVHQoaCxvKSxoLEkoImRpdiIse2NsYXNzTmFtZTpGKGZ0KG90LGwpKSxyb2xlOiJyYWRpb2dyb3VwIiwiYXJpYS1sYWJlbGVkYnkiOnN0fSxwKSxJKE10LG51bGwpKX19LG11bHRpcGxlc2VsZWN0OmZ1bmN0aW9uKHQpe3ZhciBlPXQuY2xhc3NOYW1lLG49dC5ib3JkZXIscj10Lm1lc3NhZ2Usbz10LnByb3BlcnRpZXMsaT0odC5sb2NhbGUsdC5vcHRpb25zKSxhPXZvaWQgMD09PWk/W106aSxjPSh0LmlzTGFzdCx0Lm5leHQpLHM9dC5xdWVzdGlvbklkO3JldHVybiBmdW5jdGlvbih0LGkpe3ZhciB1PUYoW2UsInVsLWNhcmQtLW11bHRpcGxlIixsdF0pLGw9dC5tdWx0aXBsZXNlbGVjdC5zZWxlY3RlZE9wdGlvbnMsZj1pLm11bHRpcGxlc2VsZWN0LGQ9Zi5pbml0LHA9Zi5yZXNldCxoPWYudXBkYXRlU2VsZWN0ZWQsdj10LmFwcC51c2VNb2JpbGVTdHlsaW5nLGc9ZnVuY3Rpb24oZSl7ZS5wcmV2ZW50RGVmYXVsdCgpLGUuc3RvcFByb3BhZ2F0aW9uKCksZnVuY3Rpb24odCxlKXtlKHt2YWx1ZTp0fSl9KHQubXVsdGlwbGVzZWxlY3Quc2VsZWN0ZWRPcHRpb25zLGMpLHAoKX0seT1hLm1hcCgoZnVuY3Rpb24odCxlKXt2YXIgcj10LmlkLG89dC5sYWJlbDt0LnZhbHVlO3JldHVybiBJKEZ0LHtib3JkZXI6bixpbmRleDplLGxhYmVsOm8sb25TZWxlY3Q6aCxzZWxlY3RlZDpsW3JdLGlkOnIsaXNSYWRpbzohMSx1c2VNb2JpbGVTdHlsaW5nOnZ9KX0pKSxtPV90KG8pO3JldHVybiBJKCJmb3JtIix7aWQ6InRleHQtZm9ybSIsY2xhc3NOYW1lOnUsb25zdWJtaXQ6ZyxvbmNyZWF0ZTpmdW5jdGlvbih0KXtyZXR1cm4gZT17fSxhLmZvckVhY2goKGZ1bmN0aW9uKHQpe2VbdC5pZF09ITF9KSksdm9pZCBkKGUpO3ZhciBlfSxrZXk6c30sVHQobSxyKSxtLEkoImRpdiIse2NsYXNzTmFtZTpGKGZ0KG90LHYpKSxyb2xlOiJyYWRpb2dyb3VwIn0seSksSSgiZGl2Iix7Y2xhc3NOYW1lOiJ1bC1jYXJkLXRleHQifSxJKCJidXR0b24iLHtpZDoidWwtY2FyZC10ZXh0X19idXR0b24iLGNsYXNzTmFtZToidWwtY2FyZC10ZXh0X19idXR0b24iLHN0eWxlOntiYWNrZ3JvdW5kQ29sb3I6bn0sb25jbGljazpnLHJvbGU6ImJ1dHRvbiIsImFyaWEtbGFiZWxsZWRieSI6IiIuY29uY2F0KHN0LCIgdWwtY2FyZC10ZXh0X19idXR0b24iKX0sUnQobykpKSxJKE10LG51bGwpKX19LGxpa2VydDpmdW5jdGlvbih0KXt2YXIgZT10LmJvcmRlcixuPXQuY2xhc3NOYW1lLHI9KHQubG9jYWxlLHQubGFiZWxzKSxvPXQubWVzc2FnZSxpPXQucHJvcGVydGllcyxhPXQubmV4dCxjPXQucXVlc3Rpb25JZDtyZXR1cm4gZnVuY3Rpb24odCxzKXt2YXIgdT10LmFwcCxsPXUudXNlTW9iaWxlU3R5bGluZyxmPXUuZGVjay5pbmRleCxkPUYoW24sInVsLWNhcmQtLWxpa2VydCIsbHRdKSxwPXImJnIubGVmdCxoPXImJnIucmlnaHQsdj1UKCkoQXJyYXkoNSkpLm1hcCgoZnVuY3Rpb24odCxuKXt2YXIgcj1uKzEsbz0ib3B0aW9uLSIuY29uY2F0KHIpLGk9ZnVuY3Rpb24odCl7dC50YXJnZXQuc3R5bGUuekluZGV4PTIsdC50YXJnZXQuc3R5bGUuYm9yZGVyQ29sb3I9ZX0sYz1mdW5jdGlvbih0KXt0LnRhcmdldC5zdHlsZS56SW5kZXg9ImF1dG8iLHQudGFyZ2V0LnN0eWxlLmJvcmRlckNvbG9yPSIjZTZlNmU2In0scz17b25jbGljazpmdW5jdGlvbigpe3JldHVybiBhKHIpfSxvbmtleXByZXNzOmZ1bmN0aW9uKHQpe3JldHVybiBmdW5jdGlvbih0KXsxMyE9dC5rZXlDb2RlJiYzMiE9dC5rZXlDb2RlfHxhKHIpfSh0KX19O3JldHVybiJvbnRvdWNoc3RhcnQiaW4gZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50PyhzLm9udG91Y2hzdGFydD1pLHMub250b3VjaGNhbmNlbD1jLHMub250b3VjaG1vdmU9YyxzLm9udG91Y2hlbmQ9Yyk6KHMub25tb3VzZWRvd249aSxzLm9ubW91c2VsZWF2ZT1jKSxJKCJkaXYiLE0oKSh7aWQ6byxjbGFzc05hbWU6RihbXS5jb25jYXQoVCgpKGZ0KFgsbCkpLFQoKShmdCgiIi5jb25jYXQoWCwiLSIpLmNvbmNhdChyKSxsKSkpKX0scyx7ImFyaWEtbGFiZWxsZWRieSI6IiIuY29uY2F0KHN0LCIgIikuY29uY2F0KG8pLHJvbGU6InRleHRib3giLHRhYmluZGV4OjAsImFyaWEtZGVzY3JpYmVkYnkiOnV0fSkscil9KSksZz1fdChpKTtyZXR1cm4gSSgiZm9ybSIse2NsYXNzTmFtZTpkLGtleTpjfSxUdChnLG8pLGcsZiUyPT0wJiZJKCJkaXYiLG51bGwpLEkoImRpdiIse2NsYXNzTmFtZToidWwtY2FyZC0tbGlrZXJ0X19udW1iZXJzIn0sdiksSSgiZGl2Iix7Y2xhc3NOYW1lOiJ1bC1jYXJkLS1saWtlcnRfX2xhYmVscyJ9LEkoInNwYW4iLG51bGwscCksSSgic3BhbiIsbnVsbCxoKSksSShNdCxudWxsKSl9fSx0aGFua3M6ZnVuY3Rpb24odCl7dmFyIGU9dC5lbmRDYXJkLG49dC5ib3JkZXIscj10LmNsYXNzTmFtZSxvPSh0LmxvY2FsZSx0LnF1ZXN0aW9uSWQpO3JldHVybiBmdW5jdGlvbih0LGkpe3ZhciBhPUYoW3IsInVsLWNhcmQtLXRoYW5rcyIsbHRdKSxjPWUmJmUuc3ViaGVhZGVyP0koInAiLHtjbGFzc05hbWU6InVsLWNhcHRpb24ifSxlLnN1YmhlYWRlcik6bnVsbCxzPWUmJmUuaGVhZGxpbmU/ZS5oZWFkbGluZTpudWxsO3JldHVybiBJKCJkaXYiLHtjbGFzc05hbWU6YSxrZXk6b30sSSgiZGl2Iix7b25jcmVhdGU6ZnVuY3Rpb24oKXtyZXR1cm4gaS5hcHAuY29tcGxldGUoKX19LEkoImRpdiIse2NsYXNzTmFtZToidWwtY2FyZC0tdGhhbmtzLWNvbnRlbnQifSxJKCJkaXYiLHtjbGFzc05hbWU6InVsLXRoYW5rcy1jaGVjayJ9LEkoInN2ZyIse3dpZHRoOiI4MSIsaGVpZ2h0OiI5OSIsdmlld0JveDoiMCAwIDgxIDk5IixmaWxsOiJub25lIix4bWxuczoiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciLCJhcmlhLWxhYmVsbGVkYnkiOiJ0aXRsZSJ9LEkoInBhdGgiLHsiZmlsbC1ydWxlIjoiZXZlbm9kZCIsImNsaXAtcnVsZSI6ImV2ZW5vZGQiLGQ6Ik00MC41IDc3QzYwLjkzNDUgNzcgNzcuNSA2MC40MzQ1IDc3LjUgNDBDNzcuNSAxOS41NjU1IDYwLjkzNDUgMyA0MC41IDNDMjAuMDY1NSAzIDMuNSAxOS41NjU1IDMuNSA0MEMzLjUgNjAuNDM0NSAyMC4wNjU1IDc3IDQwLjUgNzdaTTgwLjUgNDBDODAuNSA2Mi4wOTE0IDYyLjU5MTQgODAgNDAuNSA4MEMxOC40MDg2IDgwIDAuNSA2Mi4wOTE0IDAuNSA0MEMwLjUgMTcuOTA4NiAxOC40MDg2IDAgNDAuNSAwQzYyLjU5MTQgMCA4MC41IDE3LjkwODYgODAuNSA0MFoiLGZpbGw6bn0pLEkoInBhdGgiLHsiZmlsbC1ydWxlIjoiZXZlbm9kZCIsImNsaXAtcnVsZSI6ImV2ZW5vZGQiLGQ6Ik01NS4wMjUgMjIuOTA0NkM1NS42Mjk5IDIzLjQ3MDUgNTUuNjYxNiAyNC40MTk4IDU1LjA5NTYgMjUuMDI0N0M1NC44NzI0IDI1LjI2MzQgNTQuNjEwOSAyNS41Mjg1IDU0LjMxNTcgMjUuODI3N0M1Mi4yNTQ3IDI3LjkxNjggNDguNTU0OSAzMS42NjcgNDQuODEzNSAzOS42NjU4QzQzLjI4MTggNDIuOTQwNiA0Mi4wODY0IDQ1LjgzODYgNDEuMDgyMyA0OC4yNzI5QzQwLjY1MzkgNDkuMzExNiA0MC4yNjAzIDUwLjI2NTkgMzkuODkwMiA1MS4xMjlDMzkuMjg3IDUyLjUzNTkgMzguNzI0OCA1My43NTA4IDM4LjE3NDQgNTQuNjI1QzM3Ljg5OTcgNTUuMDYxMyAzNy41ODA2IDU1LjQ5MDUgMzcuMjAxNyA1NS44MjQ1QzM2LjgyMDEgNTYuMTYwNyAzNi4yNjEzIDU2LjUgMzUuNTQ1NyA1Ni41QzM0LjY3NDIgNTYuNSAzNC4wODkyIDU1Ljk2OTIgMzMuNzc3NCA1NS42MDgzQzMzLjQ1MDIgNTUuMjI5NiAzMy4xNzUyIDU0Ljc1MTEgMzIuOTM5NiA1NC4zMDFDMzIuNzMwNSA1My45MDEzIDMyLjUwODggNTMuNDM2NyAzMi4yNzk3IDUyLjk1NjVDMzIuMjQyOSA1Mi44Nzk0IDMyLjIwNTkgNTIuODAxOSAzMi4xNjg4IDUyLjcyNDNDMzEuODk0MiA1Mi4xNDk5IDMxLjU5NTkgNTEuNTM0IDMxLjI1MzcgNTAuODg2OEMyOS44ODg2IDQ4LjMwNSAyNy44NTM5IDQ1LjI4NzggMjQuMjM0MyA0My4xMzgyQzIzLjUyMiA0Mi43MTUyIDIzLjI4NzUgNDEuNzk0OSAyMy43MTA1IDQxLjA4MjZDMjQuMTMzNSA0MC4zNzAzIDI1LjA1MzkgNDAuMTM1OCAyNS43NjYyIDQwLjU1ODhDMzAuMDU1NiA0My4xMDYyIDMyLjQxNDkgNDYuNjY0NyAzMy45MDU4IDQ5LjQ4NDVDMzQuMjc3NiA1MC4xODc2IDM0LjU5NzMgNTAuODQ4NyAzNC44NzUzIDUxLjQzMDJDMzQuOTE0NyA1MS41MTI0IDM0Ljk1MjkgNTEuNTkyNiAzNC45OTAyIDUxLjY3MDdDMzUuMjIyMiA1Mi4xNTY3IDM1LjQxNjQgNTIuNTYzNyAzNS41OTc4IDUyLjkxMDJDMzUuNjE1MSA1Mi45NDM0IDM1LjYzMjEgNTIuOTc1NCAzNS42NDg1IDUzLjAwNjFDMzYuMDU2NSA1Mi4zNTMxIDM2LjUzNDEgNTEuMzQzNCAzNy4xMzMgNDkuOTQ2OEMzNy40NzgxIDQ5LjE0MTggMzcuODU3MiA0OC4yMjI5IDM4LjI3NjEgNDcuMjA3NEMzOS4yODg2IDQ0Ljc1MzIgNDAuNTMzOSA0MS43MzQ3IDQyLjA5NjEgMzguMzk0OEM0Ni4wNTkxIDI5LjkyMjEgNTAuMDY0MSAyNS44NjQ4IDUyLjE1MzUgMjMuNzQ4MkM1Mi40NDIzIDIzLjQ1NTYgNTIuNjk0NCAyMy4yMDAyIDUyLjkwNDggMjIuOTc1M0M1My40NzA4IDIyLjM3MDMgNTQuNDIgMjIuMzM4NyA1NS4wMjUgMjIuOTA0NlpNMzUuMTk5NCA1My41ODkyQzM1LjE5OTQgNTMuNTg5MiAzNS4yIDUzLjU4ODggMzUuMjAxMiA1My41ODc5QzM1LjIgNTMuNTg4OSAzNS4xOTk0IDUzLjU4OTMgMzUuMTk5NCA1My41ODkyWk0zNi4wNjY2IDUzLjY2ODJDMzYuMDczMiA1My42NzQgMzYuMDc2NSA1My42Nzc1IDM2LjA3NjUgNTMuNjc3N0MzNi4wNzY1IDUzLjY3OCAzNi4wNzMyIDUzLjY3NTEgMzYuMDY2NiA1My42NjgyWiIsZmlsbDpufSksSSgicGF0aCIse2Q6Ik02OS41IDk3QzY5LjUgOTguMTA0NiA1Ni4yOTI0IDk5IDQwIDk5QzIzLjcwNzYgOTkgMTAuNSA5OC4xMDQ2IDEwLjUgOTdDMTAuNSA5NS44OTU0IDIzLjcwNzYgOTUgNDAgOTVDNTYuMjkyNCA5NSA2OS41IDk1Ljg5NTQgNjkuNSA5N1oiLGZpbGw6ImJsYWNrIiwiZmlsbC1vcGFjaXR5IjoiMC4yIn0pKSksSSgicCIse2NsYXNzTmFtZTpzdCxpZDpzdH0scyksYyksSShNdCxudWxsKSkpfX0sbnBzOmZ1bmN0aW9uKHQpe3ZhciBlPXQuYm9yZGVyLG49dC5jbGFzc05hbWUscj0odC5sb2NhbGUsdC5sYWJlbHMpLG89dC5tZXNzYWdlLGk9dC5wcm9wZXJ0aWVzLGE9dC5uZXh0LGM9dC5xdWVzdGlvbklkO3JldHVybiBmdW5jdGlvbih0LHMpe3ZhciB1PXQuYXBwLGw9dS51c2VNb2JpbGVTdHlsaW5nLGY9dS5kZWNrLmluZGV4LGQ9RihbbiwidWwtY2FyZC0tbnBzIixsdF0pLHA9ciYmci5sZWZ0LGg9ciYmci5yaWdodCx2PVQoKShBcnJheSgxMSkpLm1hcCgoZnVuY3Rpb24odCxuKXt2YXIgcj1uLG89Im9wdGlvbi0iLmNvbmNhdChyKSxpPWZ1bmN0aW9uKHQpe3QudGFyZ2V0LnN0eWxlLnpJbmRleD0yLHQudGFyZ2V0LnN0eWxlLmJvcmRlckNvbG9yPWV9LGM9ZnVuY3Rpb24odCl7dC50YXJnZXQuc3R5bGUuekluZGV4PSJhdXRvIix0LnRhcmdldC5zdHlsZS5ib3JkZXJDb2xvcj0iI2U2ZTZlNiJ9LHM9e29uY2xpY2s6ZnVuY3Rpb24oKXtyZXR1cm4gYShyKX0sb25rZXlwcmVzczpmdW5jdGlvbih0KXtyZXR1cm4gZnVuY3Rpb24odCl7MTMhPXQua2V5Q29kZSYmMzIhPXQua2V5Q29kZXx8YShyKX0odCl9fTtyZXR1cm4ib250b3VjaHN0YXJ0ImluIGRvY3VtZW50LmRvY3VtZW50RWxlbWVudD8ocy5vbnRvdWNoc3RhcnQ9aSxzLm9udG91Y2hjYW5jZWw9YyxzLm9udG91Y2htb3ZlPWMscy5vbnRvdWNoZW5kPWMpOihzLm9ubW91c2Vkb3duPWkscy5vbm1vdXNlbGVhdmU9YyksSSgiZGl2IixNKCkoe2NsYXNzTmFtZTpGKFtdLmNvbmNhdChUKCkoZnQoUSxsKSksVCgpKGZ0KCIiLmNvbmNhdChRLCItIikuY29uY2F0KHIpLGwpKSkpfSxzLHsiYXJpYS1sYWJlbGxlZGJ5IjoiIi5jb25jYXQoc3QsIiAiKS5jb25jYXQobykscm9sZToicmFkaW8iLHRhYmluZGV4OjAsaWQ6b30pLHIpfSkpLGc9X3QoaSk7cmV0dXJuIEkoImZvcm0iLHtjbGFzc05hbWU6ZCxrZXk6Y30sVHQoZyxvKSxnLGYlMj09MCYmSSgiZGl2IixudWxsKSxJKCJkaXYiLHtjbGFzc05hbWU6InVsLWNhcmQtLW5wc19fbnVtYmVycyJ9LHYpLEkoImRpdiIse2NsYXNzTmFtZToidWwtY2FyZC0tbnBzX19sYWJlbHMifSxJKCJzcGFuIixudWxsLHApLEkoInNwYW4iLG51bGwsaCkpLEkoTXQsbnVsbCkpfX0sdmlkZW92b2ljZTpmdW5jdGlvbih0KXt2YXIgZT10LmNsYXNzTmFtZSxuPXQubWVzc2FnZSxvPXQucHJvcGVydGllcyxpPXQubmV4dCxhPXQucXVlc3Rpb25JZCxjPXQudXBkYXRlSGVpZ2h0O3JldHVybiBmdW5jdGlvbih0LHMpe3ZhciB1PUYoW2UsWV0pLGw9InVsLWNhcmQtdmlkZW9fX3BsYXllcl9yZWNvcmRlciIsZj0idWwtY2FyZC12aWRlb19fbmV4dF9idXR0b24iLGQ9InVsLXZpZGVvLWludGVydmlldy1mb3JtIixwPSJ1bC1xdWVzdGlvbi1wbGF5ZXItY29udGFpbmVyIixoPSJ1bC1yZWNvcmRlci1wbGF5ZXItY29udGFpbmVyIix2PW8mJm8udmlkZW9VcmwsZz10LmFwcCx5PWcuc3VydmV5SWQsbT1nLnJlc3BvbnNlR3JvdXBVaWQsYj1nLmFwaVVSTCx4PWcudXNlcklkLHc9Zy5ib3JkZXIsRT1nLmVudklkLGo9Zy5oZWFkZXJzO2lmKHQuY2FyZERhdGF8fCh0LmNhcmREYXRhPXt9KSx0LmNhcmREYXRhLnVwbG9hZElkPXZvaWQgMCx0LmNhcmREYXRhLm1lZGlhUmVjb3JkaW5nVWlkPXZvaWQgMCx0LmNhcmREYXRhLmJ1dHRvblRleHQ9UnQobyksdC5jYXJkRGF0YS5za2lwQnV0dG9uVGV4dD1MdChvKSxkb2N1bWVudC5nZXRFbGVtZW50QnlJZChsKSl7eGUobCx2LHtzdXJ2ZXlJZDp5LHJlc3BvbnNlR3JvdXBVaWQ6bSxxdWVzdGlvbklkOmEsdmlzaXRvcklkOnh9LG8ubWVkaWFUeXBlPT09RWUuTUVESUFfVFlQRV9BVURJTyk7dmFyIEM9ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoZik7Qy5pbm5lclRleHQ9dC5jYXJkRGF0YS5za2lwQnV0dG9uVGV4dCxDLmNsYXNzTGlzdC5hZGQoa2UpfXZhciBrPWZ1bmN0aW9uKGUsbil7dmFyIHI9ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoZik7ZT09PUVlLlVQTE9BRF9TVEFSVEVEPyh0LmNhcmREYXRhLnVwbG9hZElkPW5bRWUuVVBMT0FEX0lEXSx0LmNhcmREYXRhLm1lZGlhUmVjb3JkaW5nVWlkPW5bRWUuTUVESUFfUkVDT1JESU5HX1VJRF0sci5pbm5lclRleHQ9dC5jYXJkRGF0YS5idXR0b25UZXh0LHIuY2xhc3NMaXN0LnJlbW92ZShrZSksT2JqZWN0LmFzc2lnbihyLnN0eWxlLHtiYWNrZ3JvdW5kQ29sb3I6d30pKTplPT09RWUuREVMRVRFJiYodC5jYXJkRGF0YS51cGxvYWRJZD1udWxsLHQuY2FyZERhdGEubWVkaWFSZWNvcmRpbmdVaWQ9bnVsbCxyLmNsYXNzTGlzdC5hZGQoa2UpLHIuaW5uZXJUZXh0PXQuY2FyZERhdGEuc2tpcEJ1dHRvblRleHQsT2JqZWN0LmFzc2lnbihyLnN0eWxlLHtiYWNrZ3JvdW5kQ29sb3I6IiJ9KSl9LFM9ZnVuY3Rpb24odCxlKXt2YXIgbj1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJidXR0b24iKTtyZXR1cm4gbi5jbGFzc05hbWU9IiIuY29uY2F0KCJ1bC12aWRlby1idG4iLCIgIikuY29uY2F0KHQpLG4uYWRkRXZlbnRMaXN0ZW5lcigiY2xpY2siLChmdW5jdGlvbih0KXt0LnByZXZlbnREZWZhdWx0KCksdC5zdG9wUHJvcGFnYXRpb24oKSxmdW5jdGlvbigpe3ZhciB0PSEoYXJndW1lbnRzLmxlbmd0aD4wJiZ2b2lkIDAhPT1hcmd1bWVudHNbMF0pfHxhcmd1bWVudHNbMF0sZT1kb2N1bWVudC5nZXRFbGVtZW50QnlJZChwKSxuPWRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGgpO3Q/KGUuY2xhc3NMaXN0LnJlbW92ZShKdCksZS5jbGFzc0xpc3QuYWRkKEt0KSxuLmNsYXNzTGlzdC5hZGQoSnQpLG4uY2xhc3NMaXN0LnJlbW92ZShLdCkpOihiZShsKSxlLmNsYXNzTGlzdC5hZGQoSnQpLGUuY2xhc3NMaXN0LnJlbW92ZShLdCksbi5jbGFzc0xpc3QucmVtb3ZlKEp0KSxuLmNsYXNzTGlzdC5hZGQoS3QpKX0oZSl9KSksbn0sTz1mdW5jdGlvbigpe3ZhciB0PWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpO3QuaWQ9InVsLXF1ZXN0aW9uLXBsYXllci1jb250YWluZXIiLHQuY2xhc3NOYW1lPSJ1bC12aWRlby1jb250YWluZXIgIi5jb25jYXQoS3QpLHQuYXBwZW5kQ2hpbGQoKCh0LGUsbixyPSExLG89Imh0dHBzOi8vYXBpLnNwcmlnLmNvbSIpPT57Y29uc3QgaT10K25lLGE9dmUoaSk7cmV0dXJuIGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoInNlY3VyaXR5cG9saWN5dmlvbGF0aW9uIiwodD0+e2FlKG5ldyBFcnJvcihgVm9pY2UgJiBWaWRlbyBmZWF0dXJlIHZpb2xhdGVzICR7dC52aW9sYXRlZERpcmVjdGl2ZX0gd2ViIHBhZ2UgQ1NQIHBvbGljaWVzIGZvciB0aGUgcXVlc3Rpb24gcGxheWVyLmApLCJwbGF5ZXJEZXZpY2VFcnJvciIsbyx7fSl9KSksY2UoYSxlZSwoKCk9Pntkb2N1bWVudC5nZXRFbGVtZW50QnlJZChZdChpKSkucmVtb3ZlKCksZ2UoaSxhKTtjb25zdCB0PXdpbmRvdy52aWRlb2pzKGkse3BsYXlzaW5saW5lOiEwLHBsYXliYWNrUmF0ZXM6Wy41LDEsMS41LDJdfSksbz11ZSh0LFsiUGxheWJhY2tSYXRlTWVudUJ1dHRvbiIsIlBsYXlUb2dnbGUiLCJGdWxsc2NyZWVuVG9nZ2xlIl0pLGM9by5jaGlsZHJlbigpLmZpbmQoKHQ9PiJGdWxsc2NyZWVuVG9nZ2xlIj09PXQubmFtZV8pKTtjLmhhc0NsYXNzKCJ2anMtZGlzYWJsZWQiKSYmYy5oaWRlKCksZGUodCxvLGUsbixyKX0pKSxhfSkobCx7c3JjOnYsdHlwZToiYXBwbGljYXRpb24veC1tcGVnVVJMIn0sdm9pZCAwLG8ubWVkaWFUeXBlPT09RWUuTUVESUFfVFlQRV9BVURJTyxiKSk7dmFyIGU9UygidWwtcmVjb3JkLXJlc3BvbnNlLWJ0biIsITEpO3JldHVybiB0LmFwcGVuZENoaWxkKGUpLHR9LEE9ZnVuY3Rpb24oKXt2YXIgdD1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKTt0LmlkPSJ1bC1yZWNvcmRlci1wbGF5ZXItY29udGFpbmVyIix0LmNsYXNzTmFtZT0idWwtdmlkZW8tY29udGFpbmVyICIuY29uY2F0KEp0KTt2YXIgZT1TKCJ1bC1iYWNrLXF1ZXN0aW9uLWJ0biIsITApO3JldHVybiB0LmFwcGVuZENoaWxkKGUpLHQuYXBwZW5kQ2hpbGQoKCh0LGU9e30sbj0iaHR0cHM6Ly9hcGkudXNlcmxlYXAuY29tIixyLG8saSxhPSExKT0+e2NvbnN0IGM9dCtyZSxzPXZlKGMpO3JldHVybiBkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCJzZWN1cml0eXBvbGljeXZpb2xhdGlvbiIsKHQ9Pntjb25zdCBlPXdpbmRvdy52aWRlb2pzKGMpO2FlKG5ldyBFcnJvcihgVm9pY2UgJiBWaWRlbyBmZWF0dXJlIHZpb2xhdGVzICR7dC52aW9sYXRlZERpcmVjdGl2ZX0gd2ViIHBhZ2UgQ1NQIHBvbGljaWVzIGZvciB0aGUgcmVjb3JkZXIgcGxheWVyLmApLCJyZWNvcmRlckRldmljZUVycm9yIixuLGksZS5wYXlsb2FkLnZpc2l0b3JJZCxlLnBheWxvYWQuZW52SWQpfSkpLGNlKHMsZWUuY29uY2F0KHRlKSwoKCk9PntnZShjLHMpLGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKFl0KGMpKS5yZW1vdmUoKSxwZShzLGMsZSxuLHIsbyxpLGEpfSkpLHN9KShsLHtzdXJ2ZXlJZDp5LHJlc3BvbnNlR3JvdXBVaWQ6bSxxdWVzdGlvbklkOmEsdmlzaXRvcklkOngsZW52SWQ6RX0sYixrLCExLGZ1bmN0aW9uKHQpe2Zvcih2YXIgZT0xO2U8YXJndW1lbnRzLmxlbmd0aDtlKyspe3ZhciBuPW51bGwhPWFyZ3VtZW50c1tlXT9hcmd1bWVudHNbZV06e307ZSUyP0NlKE9iamVjdChuKSwhMCkuZm9yRWFjaCgoZnVuY3Rpb24oZSl7cigpKHQsZSxuW2VdKX0pKTpPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycz9PYmplY3QuZGVmaW5lUHJvcGVydGllcyh0LE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzKG4pKTpDZShPYmplY3QobikpLmZvckVhY2goKGZ1bmN0aW9uKGUpe09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LGUsT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihuLGUpKX0pKX1yZXR1cm4gdH0oe30saix7IngtdWwtdmlkZW8tcmVjb3JkZXItb3JpZ2luIjoic2RrIn0pLG8ubWVkaWFUeXBlPT09RWUuTUVESUFfVFlQRV9BVURJTykpLHR9LE09X3Qobyk7cmV0dXJuIEkoImRpdiIse2NsYXNzTmFtZTpsdCxrZXk6YX0sSSgiZm9ybSIse2lkOmQsY2xhc3NOYW1lOnUsb25jcmVhdGU6ZnVuY3Rpb24oKXt2YXIgdD1uZXcgUmVzaXplT2JzZXJ2ZXIoKGZ1bmN0aW9uKHQpe3JldHVybiBjKCl9KSksZT1kb2N1bWVudC5xdWVyeVNlbGVjdG9yKCIuIi5jb25jYXQoWSkpO3Qub2JzZXJ2ZShlKX0sb25zdWJtaXQ6ZnVuY3Rpb24odCl7cmV0dXJuIFNlKHQsaSl9fSxUdChNLG4pLE0sSSgiZGl2Iix7aWQ6InVsLWNhcmQtdm9pY2VfX3ZpZGVvIn0sSSgiZGl2Iix7aWQ6bCxvbmNyZWF0ZTpmdW5jdGlvbigpe3ZhciB0PWRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGwpO3JldHVybiB0LmFwcGVuZENoaWxkKE8oKSksdC5hcHBlbmRDaGlsZChBKCkpLHR9fSksSSgiYnV0dG9uIix7aWQ6ZixjbGFzc05hbWU6InVsLWNhcmQtdGV4dF9fYnV0dG9uICIuY29uY2F0KGtlKSxvbmNsaWNrOmZ1bmN0aW9uKGUpe2lmKGUucHJldmVudERlZmF1bHQoKSxlLnN0b3BQcm9wYWdhdGlvbigpLG1lKGwpLGRvY3VtZW50LmZvcm1zW2RdKXt0LmNhcmREYXRhLnVwbG9hZElkP1NlKHttZWRpYVJlY29yZGluZ1VpZDp0LmNhcmREYXRhLm1lZGlhUmVjb3JkaW5nVWlkfSxpKTpTZSh7ZGVsZXRlZEF0OkRhdGUubm93KCl9LGkpO3ZhciBuPWRvY3VtZW50LmdldEVsZW1lbnRCeUlkKHApO2RvY3VtZW50LmdldEVsZW1lbnRCeUlkKGgpLmNsYXNzTGlzdC5hZGQoSnQpLG4uY2xhc3NMaXN0LnJlbW92ZShKdCl9fSxyb2xlOiJidXR0b24ifSxMdChvKSkpLEkoTXQsbnVsbCkpKX19fSxsb2NhbGU6ImVuIixhcGlVUkw6Imh0dHBzOi8vYXBpLnVzZXJsZWFwLmNvbSIsc2hvd1N1cnZleUJyYW5kOiEwLG1hcmtldGluZ1VybDoiaHR0cHM6Ly91c2VybGVhcC5jb20iLHNsdWdOYW1lOm51bGwscmVzcG9uc2VHcm91cFVpZDpudWxsLGhlYWRlcnM6e30saXNQcmV2aWV3OiExLGFuc3dlcnM6W10sY3VzdG9tTWV0YWRhdGE6e319LCRlPXtpbml0OmZ1bmN0aW9uKHQpe3ZhciBlPXQuc3VydmV5SWQsbj10LmZyYW1lLHI9dC5jYXJkcyxvPXQuZW52SWQsaT10LnVzZXJJZCxhPXQubWV0YSxjPXQuYm9yZGVyLHM9dC5mb250RmFtaWx5LHU9dC5mb250RmFtaWx5VVJMLGw9dC5tb2RlLGY9dC5jb250ZXh0LGQ9dC5sb2NhbGUscD10LmFwaVVSTCxoPXQuc2hvd1N1cnZleUJyYW5kLHY9dC5tYXJrZXRpbmdVcmwsZz10LnNsdWdOYW1lLHk9dC5yZXNwb25zZUdyb3VwVWlkLG09dC5oZWFkZXJzLGI9dC5lbmRDYXJkLHg9dC5jb25maWd1cmVFeGl0T25PdmVybGF5Q2xpY2ssdz10LmlzUHJldmlldyxFPXQuYW5zd2VycyxqPXQuY3VzdG9tTWV0YWRhdGEsQz10LmV4cGVyaW1lbnRGbGFncyxrPXQudXNlTW9iaWxlU3R5bGluZyxTPXQuZXZlbnRFbWl0dGVyO3JldHVybiBmdW5jdGlvbih0LE8pe3JldHVybiBIZSh7fSxPLmFkZERlY2soe2RlY2s6cixoYXNFbmRDYXJkOmJ9KSx7c3VydmV5SWQ6ZSxydW5uaW5nOiEwLGZyYW1lOm4sZW52SWQ6byx1c2VySWQ6aSxtZXRhOmEsYm9yZGVyOmMsZm9udEZhbWlseTpzLGZvbnRGYW1pbHlVUkw6dSx0aW1lb3V0OjEsbW9kZTpsLGNvbnRleHQ6Zixsb2NhbGU6ZCxhcGlVUkw6cCxzaG93U3VydmV5QnJhbmQ6aCxtYXJrZXRpbmdVcmw6dixzbHVnTmFtZTpnLHJlc3BvbnNlR3JvdXBVaWQ6eSxoZWFkZXJzOm0sZW5kQ2FyZDpiLGNvbmZpZ3VyZUV4aXRPbk92ZXJsYXlDbGljazp4LGlzUHJldmlldzp3LGFuc3dlcnM6RSxjdXN0b21NZXRhZGF0YTpqLGV4cGVyaW1lbnRGbGFnczpDLHVzZU1vYmlsZVN0eWxpbmc6ayxldmVudEVtaXR0ZXI6U30pfX0sYWRkRGVjazpmdW5jdGlvbih0KXt2YXIgZT10LmRlY2ssbj10Lmhhc0VuZENhcmQ7cmV0dXJuIGZ1bmN0aW9uKHQpe3ZhciByPWUubWFwKChmdW5jdGlvbihlKXtyZXR1cm4gSGUoe30sZSx7Q2FyZDp0LmNhcmRzW2UudHlwZV19KX0pKTtyZXR1cm4gbiYmci5wdXNoKHtDYXJkOnQuY2FyZHMudGhhbmtzfSkse2RlY2s6e2luZGV4OjAsY2FyZHM6cn19fX0sY29tcGxldGU6ZnVuY3Rpb24oKXtyZXR1cm4gZnVuY3Rpb24odCxlKXtyZXR1cm57aW50ZXJ2YWw6c2V0SW50ZXJ2YWwoZS5kZWR1Y3QsMWUzKX19fSxzZWVuOmZ1bmN0aW9uKCl7cmV0dXJuIGZ1bmN0aW9uKHQsZSl7R2UodCl8fGUudHJhY2tIaXN0b3J5KHtldmVudDoic2VlbiIsaXNOZXc6ITB9KX19LGNsb3NlOmZ1bmN0aW9uKCl7cmV0dXJuIGZ1bmN0aW9uKHQsZSl7aWYoIUdlKHQpKXJldHVybiBlLnRyYWNrSGlzdG9yeSh7ZXZlbnQ6ImNsb3NlZCJ9KX19LHN1Ym1pdDpmdW5jdGlvbih0KXt2YXIgZT10LnJlc3BvbnNlLG49dC5yZXNwb25zZUdyb3VwVWlkLHI9dC5jb21wbGV0ZWRBdDtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgdD1OKCkoTCgpLm1hcmsoKGZ1bmN0aW9uIHQobyl7dmFyIGksYTtyZXR1cm4gTCgpLndyYXAoKGZ1bmN0aW9uKHQpe2Zvcig7Oylzd2l0Y2godC5wcmV2PXQubmV4dCl7Y2FzZSAwOmlmKG4mJiFHZShvKSl7dC5uZXh0PTI7YnJlYWt9cmV0dXJuIHQuYWJydXB0KCJyZXR1cm4iKTtjYXNlIDI6cmV0dXJuIGk9e3Jlc3BvbnNlR3JvdXBVaWQ6bixtZXRhOm8ubWV0YSxjdXN0b21NZXRhZGF0YTpvLmN1c3RvbU1ldGFkYXRhLHJlc3BvbnNlczpbZV0sY29tcGxldGVkQXQ6cn0sdC5uZXh0PTUsQmUoIiIuY29uY2F0KG8uYXBpVVJMLCIvc2RrLzEvZW52aXJvbm1lbnRzLyIpLmNvbmNhdChvLmVudklkLCIvdmlzaXRvcnMvIikuY29uY2F0KG8udXNlcklkLCIvcmVzcG9uc2VzL3N1Ym1pdCIpLHtib2R5OkpTT04uc3RyaW5naWZ5KGkpLGhlYWRlcnM6by5oZWFkZXJzLG1ldGhvZDoiUE9TVCJ9KTtjYXNlIDU6aWYoYT10LnNlbnQsZG9jdW1lbnQuYWN0aXZlRWxlbWVudC5ibHVyKCksYS5vayl7dC5uZXh0PTEzO2JyZWFrfWlmKCFhLnJlcG9ydEVycm9yKXt0Lm5leHQ9MTI7YnJlYWt9cmV0dXJuIGNvbnNvbGUud2FybigiW1VzZXJMZWFwXSAoRVJSLTQyNykgRmFpbGVkIHRvIHN1Ym1pdCByZXNwb25zZSIsYS5lcnJvciksdC5uZXh0PTEyLHFlKG8sInN1Ym1pdFJlc3BvbnNlIixhLmVycm9yKTtjYXNlIDEyOnJldHVybiB0LmFicnVwdCgicmV0dXJuIik7Y2FzZSAxMzpjYXNlImVuZCI6cmV0dXJuIHQuc3RvcCgpfX0pLHQpfSkpKTtyZXR1cm4gZnVuY3Rpb24oZSl7cmV0dXJuIHQuYXBwbHkodGhpcyxhcmd1bWVudHMpfX0oKX0sZGVkdWN0OmZ1bmN0aW9uKCl7cmV0dXJuIGZ1bmN0aW9uKHQpe3ZhciBlPXQudGltZW91dC0xO3JldHVybiBlPD0wPyhjbGVhckludGVydmFsKHQuaW50ZXJ2YWwpLFN0LmVuYWJsZSgpLHtydW5uaW5nOiExLGludGVydmFsOm51bGwsdGltZW91dDplfSk6e3RpbWVvdXQ6ZX19fSxuZXh0OmZ1bmN0aW9uKHQpe3JldHVybiBmdW5jdGlvbihlLG4pe3ZhciByPURhdGUubm93KCksbz1lLmRlY2ssaT1vLmNhcmRzLGE9by5pbmRleCxjPWlbYV0scz1jLm5hbWUsdT1jLnR5cGUsbD1lLnJlc3BvbnNlR3JvdXBVaWQsZj0ib2JqZWN0Ij09PUl0KCkodC5kYXRhKT90LmRhdGE6e3ZhbHVlOnQuZGF0YX0sZD1mLnZhbHVlO2lbYV0udmFsdWU9ZCxmLnF1ZXN0aW9uSWQ9cyxmLmFuc3dlcmVkQXQ9cjt2YXIgcD17cmVzcG9uc2U6ZixyZXNwb25zZUdyb3VwVWlkOmwsdHlwZTp1fSxoPSJtdWx0aXBsZWNob2ljZSI9PT11P09iamVjdC52YWx1ZXMoZCkuZmluZCgoZnVuY3Rpb24odCl7cmV0dXJuITEhPT10fSkpOmQsdj0idmlkZW92b2ljZSIhPT11fHwhZi5kZWxldGVkQXQ7Im11bHRpcGxlc2VsZWN0Ij09PXUmJihoPWlbYV0ucHJvcHMub3B0aW9ucy5yZWR1Y2UoKGZ1bmN0aW9uKHQsZSl7cmV0dXJuIGRbZS5pZF0mJnQucHVzaChlLnZhbHVlKSx0fSksW10pKTt2YXIgZz1mdW5jdGlvbih0LGUsbixyKXt2YXIgbz0hKGFyZ3VtZW50cy5sZW5ndGg+NCYmdm9pZCAwIT09YXJndW1lbnRzWzRdKXx8YXJndW1lbnRzWzRdO2lmKGU+PXQubGVuZ3RofHxlPDApcmV0dXJuIG51bGw7Zm9yKHZhciBpPXRbZV0mJnRbZV0ucHJvcHMmJnRbZV0ucHJvcHMucm91dGluZ09wdGlvbnN8fFtdLGE9TWF0aC5taW4oZSsxLHQubGVuZ3RoLTEpLGM9bnVsbCxzPTA7czxpLmxlbmd0aDtzKyspe3ZhciB1PWlbc10sbD11LmNvbXBhcmF0b3IsZj11LnRhcmdldCxkPXUudmFsdWU7aWYoImFuc3dlcmVkIj09PWwmJm8pe2M9cGFyc2VJbnQoZiwxMCk7YnJlYWt9aWYoT2VbbF0mJk9lW2xdKG4sZCkpe2M9cGFyc2VJbnQoZiwxMCk7YnJlYWt9fXJldHVybiBudWxsPT09YyYmZT09PXQubGVuZ3RoLTE/bnVsbDotMT09PWM/cj90Lmxlbmd0aC0xOm51bGw6bnVsbD09PWM/YTpjfShpLGEsaCwhIXQuZW5kQ2FyZCx2KTtpZihudWxsPT09ZylyZXR1cm4gcC5jb21wbGV0ZWRBdD1yLG4uc3VibWl0KHApLHZvaWQgdC5jb21wbGV0ZVN1cnZleSgpO2lbZ10uQ2FyZD09PWUuY2FyZHMudGhhbmtzJiYocC5jb21wbGV0ZWRBdD1yKTt2YXIgeT1uLnN1Ym1pdChwKTtyZXR1cm4gaVtnXS5DYXJkIT1lLmNhcmRzLnRoYW5rcyYmeS5maW5hbGx5KChmdW5jdGlvbigpe24udHJhY2tIaXN0b3J5KHtldmVudDoic2VlbiIsaW5kZXg6Z30pfSkpLHtkZWNrOntjYXJkczppLGluZGV4Omd9fX19LHRyYWNrSGlzdG9yeTpmdW5jdGlvbih0KXt2YXIgZT10LmV2ZW50LG49dC5pbmRleCxyPXQuaXNOZXcsbz12b2lkIDAhPT1yJiZyO3JldHVybiBmdW5jdGlvbigpe3ZhciB0PU4oKShMKCkubWFyaygoZnVuY3Rpb24gdChyKXt2YXIgaSxhLGMscyx1LGw7cmV0dXJuIEwoKS53cmFwKChmdW5jdGlvbih0KXtmb3IoOzspc3dpdGNoKHQucHJldj10Lm5leHQpe2Nhc2UgMDppZighR2Uocikpe3QubmV4dD0yO2JyZWFrfXJldHVybiB0LmFicnVwdCgicmV0dXJuIik7Y2FzZSAyOnJldHVybiBpPXIuZGVjayxhPWkuY2FyZHMsYz1pLmluZGV4LHM9dm9pZCAwIT09bj9hW25dOmFbY10sdT17c2lkOnIuc3VydmV5SWQscWlkOnMubmFtZSxhY3Rpb246ZSx2aWQ6ci51c2VySWQsZWlkOnIuZW52SWQsaXNOZXc6byxyZXNwb25zZUdyb3VwVWlkOnIucmVzcG9uc2VHcm91cFVpZH0sdC5uZXh0PTcsQmUoIiIuY29uY2F0KHIuYXBpVVJMLCIvc2RrLzEvdmlzaXRvcnMvIikuY29uY2F0KHIudXNlcklkLCIvc3VydmV5cy8iKS5jb25jYXQoci5zdXJ2ZXlJZCwiL2hpc3RvcnkiKSx7Ym9keTpKU09OLnN0cmluZ2lmeSh1KSxoZWFkZXJzOnIuaGVhZGVycyxtZXRob2Q6IlBPU1QifSk7Y2FzZSA3OmlmKChsPXQuc2VudCkub2spe3QubmV4dD0xMzticmVha31pZighbC5yZXBvcnRFcnJvcil7dC5uZXh0PTEzO2JyZWFrfXJldHVybiBjb25zb2xlLndhcm4oIltVc2VyTGVhcF0gKEVSUi00MjgpIEZhaWxlZCB0byB0cmFjayBzdXJ2ZXkgZXZlbnQiLGwuZXJyb3IpLHQubmV4dD0xMyxxZShyLCJ0cmFja0hpc3RvcnkiLGwuZXJyb3IpO2Nhc2UgMTM6Y2FzZSJlbmQiOnJldHVybiB0LnN0b3AoKX19KSx0KX0pKSk7cmV0dXJuIGZ1bmN0aW9uKGUpe3JldHVybiB0LmFwcGx5KHRoaXMsYXJndW1lbnRzKX19KCl9fTtmdW5jdGlvbiBZZSh0LGUpe3ZhciBuPU9iamVjdC5rZXlzKHQpO2lmKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpe3ZhciByPU9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHModCk7ZSYmKHI9ci5maWx0ZXIoKGZ1bmN0aW9uKGUpe3JldHVybiBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHQsZSkuZW51bWVyYWJsZX0pKSksbi5wdXNoLmFwcGx5KG4scil9cmV0dXJuIG59ZnVuY3Rpb24gSmUodCl7Zm9yKHZhciBlPTE7ZTxhcmd1bWVudHMubGVuZ3RoO2UrKyl7dmFyIG49bnVsbCE9YXJndW1lbnRzW2VdP2FyZ3VtZW50c1tlXTp7fTtlJTI/WWUoT2JqZWN0KG4pLCEwKS5mb3JFYWNoKChmdW5jdGlvbihlKXtyKCkodCxlLG5bZV0pfSkpOk9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzP09iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKHQsT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcnMobikpOlllKE9iamVjdChuKSkuZm9yRWFjaCgoZnVuY3Rpb24oZSl7T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsZSxPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKG4sZSkpfSkpfXJldHVybiB0fXZhciBLZT17aW5pdDpmdW5jdGlvbih0KXtyZXR1cm4gZnVuY3Rpb24oZSl7cmV0dXJuIEplKHt9LGUse3NlbGVjdGVkT3B0aW9uczp0fSl9fSxyZXNldDpmdW5jdGlvbigpe3JldHVybiBmdW5jdGlvbih0KXtyZXR1cm4gSmUoe30sdCx7c2VsZWN0ZWRPcHRpb25zOnt9fSl9fSx1cGRhdGVTZWxlY3RlZDpmdW5jdGlvbih0KXtyZXR1cm4gZnVuY3Rpb24oZSl7aWYobnVsbCE9dCl7dmFyIG49T2JqZWN0LmFzc2lnbihlLnNlbGVjdGVkT3B0aW9ucyk7cmV0dXJuIG5bdF09IW5bdF0sSmUoe30sZSx7c2VsZWN0ZWRPcHRpb25zOm59KX19fX07ZnVuY3Rpb24gWGUodCxlKXt2YXIgbj1PYmplY3Qua2V5cyh0KTtpZihPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKXt2YXIgcj1PYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHQpO2UmJihyPXIuZmlsdGVyKChmdW5jdGlvbihlKXtyZXR1cm4gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcih0LGUpLmVudW1lcmFibGV9KSkpLG4ucHVzaC5hcHBseShuLHIpfXJldHVybiBufXZhciBRZT17b25UZXh0Q2hhbmdlOmZ1bmN0aW9uKHQpe3JldHVybiBmdW5jdGlvbihlKXtyZXR1cm4gZnVuY3Rpb24odCl7Zm9yKHZhciBlPTE7ZTxhcmd1bWVudHMubGVuZ3RoO2UrKyl7dmFyIG49bnVsbCE9YXJndW1lbnRzW2VdP2FyZ3VtZW50c1tlXTp7fTtlJTI/WGUoT2JqZWN0KG4pLCEwKS5mb3JFYWNoKChmdW5jdGlvbihlKXtyKCkodCxlLG5bZV0pfSkpOk9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzP09iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKHQsT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcnMobikpOlhlKE9iamVjdChuKSkuZm9yRWFjaCgoZnVuY3Rpb24oZSl7T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsZSxPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKG4sZSkpfSkpfXJldHVybiB0fSh7fSxlLHt2YWx1ZTp0fSl9fX0sdG49InN1cnZleS5hcHBlYXJlZCIsZW49InN1cnZleS5mYWRpbmdPdXQiLG5uPSJzdXJ2ZXkud2lsbENsb3NlIixybj17VkVSSUZZX1ZJRVdfVkVSU0lPTjoidmVyaWZ5LnZpZXcudmVyc2lvbiJ9LG9uPXtWSUVXX1ZFUlNJT046InZpZXcudmVyc2lvbiJ9LGFuPSJjbG9zZS5jbGljayIsY249InN1cnZleS5jb21wbGV0ZWQiO2Z1bmN0aW9uIHNuKHQpe3JldHVybiJ3ZWIiIT09dFsidXNlcmxlYXAtcGxhdGZvcm0iXX1mdW5jdGlvbiB1bih0LGUpe3ZhciBuPU9iamVjdC5rZXlzKHQpO2lmKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpe3ZhciByPU9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHModCk7ZSYmKHI9ci5maWx0ZXIoKGZ1bmN0aW9uKGUpe3JldHVybiBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHQsZSkuZW51bWVyYWJsZX0pKSksbi5wdXNoLmFwcGx5KG4scil9cmV0dXJuIG59dmFyIGxuPXtpbml0OmZ1bmN0aW9uKHQpe3ZhciBlPXQuZnJhbWUsbj10LmNhcmRzLHI9dC5zdXJ2ZXlJZCxvPXQuZW52SWQsaT10LnVzZXJJZCxhPXQubWV0YSxjPXQuYm9yZGVyLHM9dC5mb250RmFtaWx5LHU9dC5mb250RmFtaWx5VVJMLGw9dC5jb250ZXh0LGY9dC5sb2NhbGUsZD10LmFwaVVSTCxwPXQuc2hvd1N1cnZleUJyYW5kLGg9dC5tYXJrZXRpbmdVcmwsdj10LnNsdWdOYW1lLGc9dC5yZXNwb25zZUdyb3VwVWlkLHk9dC5oZWFkZXJzLG09dC5lbmRDYXJkLGI9dC5jb25maWd1cmVFeGl0T25PdmVybGF5Q2xpY2sseD10LmlzUHJldmlldyx3PXQuYW5zd2VycyxFPXQuY3VzdG9tTWV0YWRhdGEsaj10LmV4cGVyaW1lbnRGbGFncyxDPXQudXNlTW9iaWxlU3R5bGluZyxrPXQubW9iaWxlUGxhdGZvcm0sUz10LmV2ZW50RW1pdHRlcjtyZXR1cm4gZnVuY3Rpb24odCxPKXt2YXIgST1zbih5KT93aW5kb3cuZG9jdW1lbnQ6d2luZG93LnBhcmVudC5kb2N1bWVudDtPLmFwcC5pbml0KHtmcmFtZTpJLmdldEVsZW1lbnRCeUlkKGUpLHN1cnZleUlkOnIsY2FyZHM6bixlbnZJZDpvLHVzZXJJZDppLG1ldGE6YSxib3JkZXI6Yyxmb250RmFtaWx5OnMsZm9udEZhbWlseVVSTDp1LGNvbnRleHQ6bCxsb2NhbGU6ZixhcGlVUkw6ZCxzaG93U3VydmV5QnJhbmQ6cCxtYXJrZXRpbmdVcmw6aCxzbHVnTmFtZTp2LHJlc3BvbnNlR3JvdXBVaWQ6ZyxoZWFkZXJzOnksZW5kQ2FyZDptLGNvbmZpZ3VyZUV4aXRPbk92ZXJsYXlDbGljazpiLGlzUHJldmlldzp4LGFuc3dlcnM6dyxjdXN0b21NZXRhZGF0YTpFLGV4cGVyaW1lbnRGbGFnczpqLHVzZU1vYmlsZVN0eWxpbmc6Qyxtb2JpbGVQbGF0Zm9ybTprLGV2ZW50RW1pdHRlcjpTfSksTy5hcHAuc2VlbigpfX0sdXBkYXRlOmZ1bmN0aW9uKHQpe3JldHVybiBmdW5jdGlvbihlKXt2YXIgbj1lLmFwcCxyPWRvY3VtZW50LmdldEVsZW1lbnRCeUlkKHQpLmNsYXNzTGlzdDtuLnJ1bm5pbmcmJiFyLmNvbnRhaW5zKCJ1bC1hcHAtLXZpc2libGUiKSYmKHNuKG4uaGVhZGVycyk/ci5hZGQoInVsLWFwcC0tdmlzaWJsZSIpOihyLmFkZCgidWwtYXBwLS1vdmVybGF5Iiksc2V0VGltZW91dCgoZnVuY3Rpb24oKXtyLmFkZCgidWwtYXBwLS12aXNpYmxlIil9KSwxMDApKSxuLmV2ZW50RW1pdHRlciYmbi5ldmVudEVtaXR0ZXIuZW1pdCh0bikpLHNuKG4uaGVhZGVycyl8fG4uZnJhbWUuc2V0SGVpZ2h0KGZ1bmN0aW9uKHQpe3ZhciBlPXQucXVlcnlTZWxlY3RvcigiLiIuY29uY2F0KCQpKTtyZXR1cm4oZT9lLnNjcm9sbEhlaWdodDo2MDApKyhlJiZlLnBhcmVudEVsZW1lbnQ/ZS5wYXJlbnRFbGVtZW50LmNsaWVudEhlaWdodC1lLmNsaWVudEhlaWdodDowKX0oZG9jdW1lbnQpKX19LGZhZGVvdXQ6ZnVuY3Rpb24odCl7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIGU9TigpKEwoKS5tYXJrKChmdW5jdGlvbiBlKG4pe3ZhciByLG87cmV0dXJuIEwoKS53cmFwKChmdW5jdGlvbihlKXtmb3IoOzspc3dpdGNoKGUucHJldj1lLm5leHQpe2Nhc2UgMDppZihyPW4uYXBwLG89ci5ldmVudEVtaXR0ZXIsIXNuKHIuaGVhZGVycykpe2UubmV4dD00O2JyZWFrfXJldHVybiBlLmFicnVwdCgicmV0dXJuIik7Y2FzZSA0OnJldHVybiBvLmVtaXQoZW4pLGUuYWJydXB0KCJyZXR1cm4iLG5ldyBQcm9taXNlKChmdW5jdGlvbihlKXt2YXIgbj1kb2N1bWVudC5nZXRFbGVtZW50QnlJZCh0KTtuLmFkZEV2ZW50TGlzdGVuZXIoInRyYW5zaXRpb25lbmQiLChmdW5jdGlvbih0KXsib3BhY2l0eSI9PT10LnByb3BlcnR5TmFtZSYmZSgpfSkpLG4uY2xhc3NMaXN0LnJlbW92ZSgidWwtYXBwLS12aXNpYmxlIil9KSkpO2Nhc2UgNjpjYXNlImVuZCI6cmV0dXJuIGUuc3RvcCgpfX0pLGUpfSkpKTtyZXR1cm4gZnVuY3Rpb24odCl7cmV0dXJuIGUuYXBwbHkodGhpcyxhcmd1bWVudHMpfX0oKX0scmVtb3ZlOmZ1bmN0aW9uKHQpe3ZhciBlPXQuaW5pdGlhdG9yO3JldHVybiBmdW5jdGlvbih0KXt2YXIgbj10LmFwcCxyPW4uZnJhbWUsbz1uLmV2ZW50RW1pdHRlcjtbImlvcyIsImFuZHJvaWQiXS5pbmNsdWRlcyhuLmhlYWRlcnNbInVzZXJsZWFwLXBsYXRmb3JtIl0pJiZvLmVtaXQobm4se2luaXRpYXRvcjplfSksc24obi5oZWFkZXJzKXx8KG8uZW1pdChubix7aW5pdGlhdG9yOmV9KSxyLnJlbW92ZSgpKX19LGNsb3NlOmZ1bmN0aW9uKHQpe3JldHVybiBmdW5jdGlvbigpe3ZhciBlPU4oKShMKCkubWFyaygoZnVuY3Rpb24gZShuLHIpe3JldHVybiBMKCkud3JhcCgoZnVuY3Rpb24oZSl7Zm9yKDs7KXN3aXRjaChlLnByZXY9ZS5uZXh0KXtjYXNlIDA6cmV0dXJuIGUubmV4dD0yLHIuZmFkZW91dCh0KTtjYXNlIDI6cmV0dXJuIGUubmV4dD00LHIuYXBwLmNsb3NlKCk7Y2FzZSA0OlN0LmVuYWJsZSgpLHIucmVtb3ZlKHtpbml0aWF0b3I6YW59KTtjYXNlIDY6Y2FzZSJlbmQiOnJldHVybiBlLnN0b3AoKX19KSxlKX0pKSk7cmV0dXJuIGZ1bmN0aW9uKHQsbil7cmV0dXJuIGUuYXBwbHkodGhpcyxhcmd1bWVudHMpfX0oKX0sZGVzdHJveTpmdW5jdGlvbih0KXtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgZT1OKCkoTCgpLm1hcmsoKGZ1bmN0aW9uIGUobixyKXtyZXR1cm4gTCgpLndyYXAoKGZ1bmN0aW9uKGUpe2Zvcig7Oylzd2l0Y2goZS5wcmV2PWUubmV4dCl7Y2FzZSAwOnJldHVybiBlLm5leHQ9MixyLmZhZGVvdXQodCk7Y2FzZSAyOlN0LmVuYWJsZSgpLHIucmVtb3ZlKHtpbml0aWF0b3I6Y259KTtjYXNlIDQ6Y2FzZSJlbmQiOnJldHVybiBlLnN0b3AoKX19KSxlKX0pKSk7cmV0dXJuIGZ1bmN0aW9uKHQsbil7cmV0dXJuIGUuYXBwbHkodGhpcyxhcmd1bWVudHMpfX0oKX19LGZuPWZ1bmN0aW9uKHQpe2Zvcih2YXIgZT0xO2U8YXJndW1lbnRzLmxlbmd0aDtlKyspe3ZhciBuPW51bGwhPWFyZ3VtZW50c1tlXT9hcmd1bWVudHNbZV06e307ZSUyP3VuKE9iamVjdChuKSwhMCkuZm9yRWFjaCgoZnVuY3Rpb24oZSl7cigpKHQsZSxuW2VdKX0pKTpPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycz9PYmplY3QuZGVmaW5lUHJvcGVydGllcyh0LE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzKG4pKTp1bihPYmplY3QobikpLmZvckVhY2goKGZ1bmN0aW9uKGUpe09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LGUsT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihuLGUpKX0pKX1yZXR1cm4gdH0oe2FwcDokZSxtdWx0aXBsZXNlbGVjdDpLZSxvcGVuVGV4dDpRZX0sbG4pLGRuPXthcHA6WmUsbXVsdGlwbGVzZWxlY3Q6e3NlbGVjdGVkT3B0aW9uczp7fX0sb3BlblRleHQ6e3ZhbHVlOiIifX07dmFyIHBuPXdpbmRvdy5fX2NmZyxobj1wbi5mcmFtZSx2bj1wbi5lbnZJZCxnbj1wbi5zdXJ2ZXlJZCx5bj1wbi51c2VySWQsbW49cG4uY2FyZHMsYm49cG4ubW9kZSx4bj1wbi5ib3JkZXIsd249dm9pZCAwPT09eG4/IiM2NjY0ZjciOnhuLEVuPXBuLmNvbnRleHQsam49cG4ubG9jYWxlLENuPXBuLmZvbnRGYW1pbHksa249cG4uZm9udEZhbWlseVVSTCxTbj1wbi5hcGlVUkwsT249cG4uc2hvd1N1cnZleUJyYW5kLEluPXBuLm1hcmtldGluZ1VybCxBbj1wbi5zbHVnTmFtZSxNbj1wbi5yZXNwb25zZUdyb3VwVWlkLF9uPXBuLmhlYWRlcnMsVG49cG4uZW5kQ2FyZCxSbj1wbi5jdXN0b21TdHlsZXMsTG49cG4uY29uZmlndXJlRXhpdE9uT3ZlcmxheUNsaWNrLFBuPXBuLmlzUHJldmlldyxObj1wbi5hbnN3ZXJzLERuPXBuLmN1c3RvbU1ldGFkYXRhLEZuPXBuLmV4cGVyaW1lbnRGbGFncyxVbj1wbi51c2VNb2JpbGVTdHlsaW5nLEJuPXBuLm1vYmlsZVBsYXRmb3JtLHpuPXBuLmV2ZW50RW1pdHRlcixWbj1kb2N1bWVudC5oZWFkLEhuPXpufHxobi5ldmVudEVtaXR0ZXI7SG4mJkhuLmVtaXQocm4uVkVSSUZZX1ZJRVdfVkVSU0lPTixyKCkoe30sb24uVklFV19WRVJTSU9OLCIyLjE0LjYiKSk7dmFyIHFuPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInN0eWxlIik7aWYocW4udHlwZT0idGV4dC9jc3MiLHFuLmFwcGVuZENoaWxkKGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKHl0KCkpKSxWbi5hcHBlbmRDaGlsZChxbiksUm4mJmZ1bmN0aW9uKHQsZSl7dmFyIG49dC5jcmVhdGVFbGVtZW50KCJzdHlsZSIpO24udHlwZT0idGV4dC9jc3MiLG4udGV4dENvbnRlbnQ9ZSxuLmlkPVosdC5oZWFkLmFwcGVuZENoaWxkKG4pfShkb2N1bWVudCxSbiksQ24mJmtuJiZwYXJlbnQpe3ZhciBXbj1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJsaW5rIik7V24ucmVsPSJzdHlsZXNoZWV0IixXbi5ocmVmPWtuLFZuLmFwcGVuZENoaWxkKFduKX12YXIgR249ZnVuY3Rpb24odCxlLG4scil7dmFyIG8saT1bXS5tYXAsYT1yJiZyLmNoaWxkcmVuWzBdfHxudWxsLGM9YSYmZnVuY3Rpb24gdChlKXtyZXR1cm57bm9kZU5hbWU6ZS5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpLGF0dHJpYnV0ZXM6e30sY2hpbGRyZW46aS5jYWxsKGUuY2hpbGROb2RlcywoZnVuY3Rpb24oZSl7cmV0dXJuIDM9PT1lLm5vZGVUeXBlP2Uubm9kZVZhbHVlOnQoZSl9KSl9fShhKSxzPVtdLHU9ITAsbD12KHQpLGY9ZnVuY3Rpb24gdChlLG4scil7Zm9yKHZhciBvIGluIHIpImZ1bmN0aW9uIj09dHlwZW9mIHJbb10/ZnVuY3Rpb24odCxvKXtyW3RdPWZ1bmN0aW9uKHQpe3ZhciBpPW8odCk7cmV0dXJuImZ1bmN0aW9uIj09dHlwZW9mIGkmJihpPWkoeShlLGwpLHIpKSxpJiZpIT09KG49eShlLGwpKSYmIWkudGhlbiYmaChsPWcoZSx2KG4saSksbCkpLGl9fShvLHJbb10pOnQoZS5jb25jYXQobyksbltvXT12KG5bb10pLHJbb109dihyW29dKSk7cmV0dXJuIHJ9KFtdLGwsdihlKSk7cmV0dXJuIGgoKSxmO2Z1bmN0aW9uIGQodCl7cmV0dXJuImZ1bmN0aW9uIj09dHlwZW9mIHQ/ZCh0KGwsZikpOm51bGwhPXQ/dDoiIn1mdW5jdGlvbiBwKCl7bz0hbzt2YXIgdD1kKG4pO2ZvcihyJiYhbyYmKGE9QyhyLGEsYyxjPXQpKSx1PSExO3MubGVuZ3RoOylzLnBvcCgpKCl9ZnVuY3Rpb24gaCgpe298fChvPSEwLHNldFRpbWVvdXQocCkpfWZ1bmN0aW9uIHYodCxlKXt2YXIgbj17fTtmb3IodmFyIHIgaW4gdCluW3JdPXRbcl07Zm9yKHZhciByIGluIGUpbltyXT1lW3JdO3JldHVybiBufWZ1bmN0aW9uIGcodCxlLG4pe3ZhciByPXt9O3JldHVybiB0Lmxlbmd0aD8oclt0WzBdXT10Lmxlbmd0aD4xP2codC5zbGljZSgxKSxlLG5bdFswXV0pOmUsdihuLHIpKTplfWZ1bmN0aW9uIHkodCxlKXtmb3IodmFyIG49MDtuPHQubGVuZ3RoOyllPWVbdFtuKytdXTtyZXR1cm4gZX1mdW5jdGlvbiBtKHQpe3JldHVybiB0P3Qua2V5Om51bGx9ZnVuY3Rpb24gYih0KXtyZXR1cm4gdC5jdXJyZW50VGFyZ2V0LmV2ZW50c1t0LnR5cGVdKHQpfWZ1bmN0aW9uIHgodCxlLG4scixvKXtpZigia2V5Ij09PWUpO2Vsc2UgaWYoInN0eWxlIj09PWUpaWYoInN0cmluZyI9PXR5cGVvZiBuKXQuc3R5bGUuY3NzVGV4dD1uO2Vsc2UgZm9yKHZhciBpIGluInN0cmluZyI9PXR5cGVvZiByJiYocj10LnN0eWxlLmNzc1RleHQ9IiIpLHYocixuKSl7dmFyIGE9bnVsbD09bnx8bnVsbD09bltpXT8iIjpuW2ldOyItIj09PWlbMF0/dC5zdHlsZS5zZXRQcm9wZXJ0eShpLGEpOnQuc3R5bGVbaV09YX1lbHNlIm8iPT09ZVswXSYmIm4iPT09ZVsxXT8oZT1lLnNsaWNlKDIpLHQuZXZlbnRzP3J8fChyPXQuZXZlbnRzW2VdKTp0LmV2ZW50cz17fSx0LmV2ZW50c1tlXT1uLG4/cnx8dC5hZGRFdmVudExpc3RlbmVyKGUsYik6dC5yZW1vdmVFdmVudExpc3RlbmVyKGUsYikpOmUgaW4gdCYmImxpc3QiIT09ZSYmInR5cGUiIT09ZSYmImRyYWdnYWJsZSIhPT1lJiYic3BlbGxjaGVjayIhPT1lJiYidHJhbnNsYXRlIiE9PWUmJiFvP3RbZV09bnVsbD09bj8iIjpuOm51bGwhPW4mJiExIT09biYmdC5zZXRBdHRyaWJ1dGUoZSxuKSxudWxsIT1uJiYhMSE9PW58fHQucmVtb3ZlQXR0cmlidXRlKGUpfWZ1bmN0aW9uIHcodCxlKXt2YXIgbj0ic3RyaW5nIj09dHlwZW9mIHR8fCJudW1iZXIiPT10eXBlb2YgdD9kb2N1bWVudC5jcmVhdGVUZXh0Tm9kZSh0KTooZT1lfHwic3ZnIj09PXQubm9kZU5hbWUpP2RvY3VtZW50LmNyZWF0ZUVsZW1lbnROUygiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciLHQubm9kZU5hbWUpOmRvY3VtZW50LmNyZWF0ZUVsZW1lbnQodC5ub2RlTmFtZSkscj10LmF0dHJpYnV0ZXM7aWYocil7ci5vbmNyZWF0ZSYmcy5wdXNoKChmdW5jdGlvbigpe3Iub25jcmVhdGUobil9KSk7Zm9yKHZhciBvPTA7bzx0LmNoaWxkcmVuLmxlbmd0aDtvKyspbi5hcHBlbmRDaGlsZCh3KHQuY2hpbGRyZW5bb109ZCh0LmNoaWxkcmVuW29dKSxlKSk7Zm9yKHZhciBpIGluIHIpeChuLGkscltpXSxudWxsLGUpfXJldHVybiBufWZ1bmN0aW9uIEUodCxlKXt2YXIgbj1lLmF0dHJpYnV0ZXM7aWYobil7Zm9yKHZhciByPTA7cjxlLmNoaWxkcmVuLmxlbmd0aDtyKyspRSh0LmNoaWxkTm9kZXNbcl0sZS5jaGlsZHJlbltyXSk7bi5vbmRlc3Ryb3kmJm4ub25kZXN0cm95KHQpfXJldHVybiB0fWZ1bmN0aW9uIGoodCxlLG4pe2Z1bmN0aW9uIHIoKXt0LnJlbW92ZUNoaWxkKEUoZSxuKSl9dmFyIG89bi5hdHRyaWJ1dGVzJiZuLmF0dHJpYnV0ZXMub25yZW1vdmU7bz9vKGUscik6cigpfWZ1bmN0aW9uIEModCxlLG4scixvKXtpZihyPT09bik7ZWxzZSBpZihudWxsPT1ufHxuLm5vZGVOYW1lIT09ci5ub2RlTmFtZSl7dmFyIGk9dyhyLG8pO3QuaW5zZXJ0QmVmb3JlKGksZSksbnVsbCE9biYmaih0LGUsbiksZT1pfWVsc2UgaWYobnVsbD09bi5ub2RlTmFtZSllLm5vZGVWYWx1ZT1yO2Vsc2V7IWZ1bmN0aW9uKHQsZSxuLHIpe2Zvcih2YXIgbyBpbiB2KGUsbikpbltvXSE9PSgidmFsdWUiPT09b3x8ImNoZWNrZWQiPT09bz90W29dOmVbb10pJiZ4KHQsbyxuW29dLGVbb10scik7dmFyIGk9dT9uLm9uY3JlYXRlOm4ub251cGRhdGU7aSYmcy5wdXNoKChmdW5jdGlvbigpe2kodCxlKX0pKX0oZSxuLmF0dHJpYnV0ZXMsci5hdHRyaWJ1dGVzLG89b3x8InN2ZyI9PT1yLm5vZGVOYW1lKTtmb3IodmFyIGE9e30sYz17fSxsPVtdLGY9bi5jaGlsZHJlbixwPXIuY2hpbGRyZW4saD0wO2g8Zi5sZW5ndGg7aCsrKXtsW2hdPWUuY2hpbGROb2Rlc1toXSxudWxsIT0oeT1tKGZbaF0pKSYmKGFbeV09W2xbaF0sZltoXV0pfWg9MDtmb3IodmFyIGc9MDtnPHAubGVuZ3RoOyl7dmFyIHk9bShmW2hdKSxiPW0ocFtnXT1kKHBbZ10pKTtpZihjW3ldKWgrKztlbHNlIGlmKG51bGw9PWJ8fGIhPT1tKGZbaCsxXSkpaWYobnVsbD09Ynx8dSludWxsPT15JiYoQyhlLGxbaF0sZltoXSxwW2ddLG8pLGcrKyksaCsrO2Vsc2V7dmFyIEU9YVtiXXx8W107eT09PWI/KEMoZSxFWzBdLEVbMV0scFtnXSxvKSxoKyspOkVbMF0/QyhlLGUuaW5zZXJ0QmVmb3JlKEVbMF0sbFtoXSksRVsxXSxwW2ddLG8pOkMoZSxsW2hdLG51bGwscFtnXSxvKSxjW2JdPXBbZ10sZysrfWVsc2UgbnVsbD09eSYmaihlLGxbaF0sZltoXSksaCsrfWZvcig7aDxmLmxlbmd0aDspbnVsbD09bShmW2hdKSYmaihlLGxbaF0sZltoXSksaCsrO2Zvcih2YXIgaCBpbiBhKWNbaF18fGooZSxhW2hdWzBdLGFbaF1bMV0pfXJldHVybiBlfX0oZG4sZm4sdnQsc24oX24pP3dpbmRvdy5kb2N1bWVudC5nZXRFbGVtZW50QnlJZChobik6ZG9jdW1lbnQuYm9keSk7R24uaW5pdCh7c3VydmV5SWQ6Z24sZnJhbWU6aG4sZW52SWQ6dm4sdXNlcklkOnluLGNhcmRzOm1uLG1vZGU6Ym4sbWV0YTpmdW5jdGlvbih0KXt2YXIgZT10LmRpcmVjdEVtYmVkLG49dC5tb2RlLHI9dm9pZCAwPT09bj9udWxsOm4sbz1lP3dpbmRvdzp3aW5kb3cucGFyZW50LGk9by5kb2N1bWVudC5kb2N1bWVudEVsZW1lbnQ7cmV0dXJue21vZGU6cixzdzpvLnNjcmVlbi53aWR0aCxzaDpvLnNjcmVlbi5oZWlnaHQsY3c6aS5jbGllbnRXaWR0aCxjaDppLmNsaWVudEhlaWdodCxwOm8ubG9jYXRpb24uaHJlZixsOm8ubmF2aWdhdG9yLmxhbmd1YWdlfX0oe21vZGU6Ym4sZGlyZWN0RW1iZWQ6c24oX24pfSksYm9yZGVyOnduLGZvbnRGYW1pbHk6Q24sY29udGV4dDpFbixsb2NhbGU6am4sYXBpVVJMOlNuLHNob3dTdXJ2ZXlCcmFuZDpPbixtYXJrZXRpbmdVcmw6SW4sc2x1Z05hbWU6QW4scmVzcG9uc2VHcm91cFVpZDpNbixoZWFkZXJzOl9uLGVuZENhcmQ6VG4sY29uZmlndXJlRXhpdE9uT3ZlcmxheUNsaWNrOkxuLGlzUHJldmlldzpQbixhbnN3ZXJzOk5uLGN1c3RvbU1ldGFkYXRhOkRuLGV4cGVyaW1lbnRGbGFnczpGbix1c2VNb2JpbGVTdHlsaW5nOlVuLG1vYmlsZVBsYXRmb3JtOkJuLGV2ZW50RW1pdHRlcjp6bn0pfSgpfSgpOw==';