{"js":"PCFET0NUWVBFIGh0bWw+CjxodG1sIGxhbmc9ImVuIj4KPGhlYWQ+CiAgICA8bWV0YSBjaGFyc2V0PSJVVEYtOCI+CiAgICA8bWV0YSBuYW1lPSJ2aWV3cG9ydCIgY29udGVudD0id2lkdGg9ZGV2aWNlLXdpZHRoLCBpbml0aWFsLXNjYWxlPTEuMCI+CiAgICA8dGl0bGU+R29Wb2FpY2UgQWkgTG9nb3M8L3RpdGxlPgogICAgPHN0eWxlPgogICAgICAgIGJvZHkgewogICAgICAgICAgICBtYXJnaW46IDA7CiAgICAgICAgICAgIHBhZGRpbmc6IDIwcHg7CiAgICAgICAgICAgIGZvbnQtZmFtaWx5OiAtYXBwbGUtc3lzdGVtLCBCbGlua01hY1N5c3RlbUZvbnQsICdTZWdvZSBVSScsIHNhbnMtc2VyaWY7CiAgICAgICAgICAgIGJhY2tncm91bmQ6ICNmNWY1ZjU7CiAgICAgICAgfQogICAgICAgIC5jb250YWluZXIgewogICAgICAgICAgICBtYXgtd2lkdGg6IDE0MDBweDsKICAgICAgICAgICAgbWFyZ2luOiAwIGF1dG87CiAgICAgICAgfQogICAgICAgIGgxIHsKICAgICAgICAgICAgdGV4dC1hbGlnbjogY2VudGVyOwogICAgICAgICAgICBjb2xvcjogIzMzMzsKICAgICAgICAgICAgbWFyZ2luLWJvdHRvbTogNDBweDsKICAgICAgICB9CiAgICAgICAgLmxvZ28tZ3JpZCB7CiAgICAgICAgICAgIGRpc3BsYXk6IGdyaWQ7CiAgICAgICAgICAgIGdyaWQtdGVtcGxhdGUtY29sdW1uczogcmVwZWF0KGF1dG8tZml0LCBtaW5tYXgoNDAwcHgsIDFmcikpOwogICAgICAgICAgICBnYXA6IDMwcHg7CiAgICAgICAgICAgIG1hcmdpbi1ib3R0b206IDQwcHg7CiAgICAgICAgfQogICAgICAgIC5sb2dvLWNhcmQgewogICAgICAgICAgICBiYWNrZ3JvdW5kOiB3aGl0ZTsKICAgICAgICAgICAgYm9yZGVyLXJhZGl1czogMTJweDsKICAgICAgICAgICAgcGFkZGluZzogMjBweDsKICAgICAgICAgICAgYm94LXNoYWRvdzogMCA0cHggNnB4IHJnYmEoMCwwLDAsMC4xKTsKICAgICAgICB9CiAgICAgICAgLmxvZ28tdGl0bGUgewogICAgICAgICAgICBmb250LXdlaWdodDogNjAwOwogICAgICAgICAgICBtYXJnaW4tYm90dG9tOiAxNXB4OwogICAgICAgICAgICBjb2xvcjogIzMzMzsKICAgICAgICAgICAgZm9udC1zaXplOiAxOHB4OwogICAgICAgIH0KICAgICAgICAubG9nby1wcmV2aWV3IHsKICAgICAgICAgICAgd2lkdGg6IDEwMCU7CiAgICAgICAgICAgIGJvcmRlcjogMXB4IHNvbGlkICNlMGUwZTA7CiAgICAgICAgICAgIGJvcmRlci1yYWRpdXM6IDhweDsKICAgICAgICAgICAgbWFyZ2luLWJvdHRvbTogMTVweDsKICAgICAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICAgICAgICAgICAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7CiAgICAgICAgICAgIHBhZGRpbmc6IDMwcHg7CiAgICAgICAgICAgIGJveC1zaXppbmc6IGJvcmRlci1ib3g7CiAgICAgICAgfQogICAgICAgIC53aGl0ZS1iZyB7IGJhY2tncm91bmQ6IHdoaXRlOyB9CiAgICAgICAgLmJsYWNrLWJnIHsgYmFja2dyb3VuZDogIzAwMDsgfQogICAgICAgIC50cmFuc3BhcmVudC1iZyB7IAogICAgICAgICAgICBiYWNrZ3JvdW5kOiAKICAgICAgICAgICAgICAgIGxpbmVhci1ncmFkaWVudCg0NWRlZywgI2UwZTBlMCAyNSUsIHRyYW5zcGFyZW50IDI1JSksCiAgICAgICAgICAgICAgICBsaW5lYXItZ3JhZGllbnQoLTQ1ZGVnLCAjZTBlMGUwIDI1JSwgdHJhbnNwYXJlbnQgMjUlKSwKICAgICAgICAgICAgICAgIGxpbmVhci1ncmFkaWVudCg0NWRlZywgdHJhbnNwYXJlbnQgNzUlLCAjZTBlMGUwIDc1JSksCiAgICAgICAgICAgICAgICBsaW5lYXItZ3JhZGllbnQoLTQ1ZGVnLCB0cmFuc3BhcmVudCA3NSUsICNlMGUwZTAgNzUlKTsKICAgICAgICAgICAgYmFja2dyb3VuZC1zaXplOiAyMHB4IDIwcHg7CiAgICAgICAgICAgIGJhY2tncm91bmQtcG9zaXRpb246IDAgMCwgMCAxMHB4LCAxMHB4IC0xMHB4LCAtMTBweCAwcHg7CiAgICAgICAgfQogICAgICAgIGNhbnZhcyB7CiAgICAgICAgICAgIG1heC13aWR0aDogMTAwJTsKICAgICAgICAgICAgaGVpZ2h0OiBhdXRvOwogICAgICAgIH0KICAgICAgICAuZG93bmxvYWQtYnRuIHsKICAgICAgICAgICAgd2lkdGg6IDEwMCU7CiAgICAgICAgICAgIHBhZGRpbmc6IDEycHg7CiAgICAgICAgICAgIGJhY2tncm91bmQ6ICMwMDY2ZmY7CiAgICAgICAgICAgIGNvbG9yOiB3aGl0ZTsKICAgICAgICAgICAgYm9yZGVyOiBub25lOwogICAgICAgICAgICBib3JkZXItcmFkaXVzOiA2cHg7CiAgICAgICAgICAgIGZvbnQtc2l6ZTogMTRweDsKICAgICAgICAgICAgZm9udC13ZWlnaHQ6IDYwMDsKICAgICAgICAgICAgY3Vyc29yOiBwb2ludGVyOwogICAgICAgICAgICB0cmFuc2l0aW9uOiBiYWNrZ3JvdW5kIDAuM3M7CiAgICAgICAgfQogICAgICAgIC5kb3dubG9hZC1idG46aG92ZXIgewogICAgICAgICAgICBiYWNrZ3JvdW5kOiAjMDA1MmNjOwogICAgICAgIH0KICAgICAgICAuY29sb3ItaW5mbyB7CiAgICAgICAgICAgIHRleHQtYWxpZ246IGNlbnRlcjsKICAgICAgICAgICAgbWFyZ2luLXRvcDogNDBweDsKICAgICAgICAgICAgcGFkZGluZzogMjBweDsKICAgICAgICAgICAgYmFja2dyb3VuZDogd2hpdGU7CiAgICAgICAgICAgIGJvcmRlci1yYWRpdXM6IDEycHg7CiAgICAgICAgICAgIGJveC1zaGFkb3c6IDAgNHB4IDZweCByZ2JhKDAsMCwwLDAuMSk7CiAgICAgICAgfQogICAgICAgIC5jb2xvci1zd2F0Y2hlcyB7CiAgICAgICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAgICAgIGp1c3RpZnktY29udGVudDogY2VudGVyOwogICAgICAgICAgICBnYXA6IDMwcHg7CiAgICAgICAgICAgIG1hcmdpbi10b3A6IDIwcHg7CiAgICAgICAgfQogICAgICAgIC5zd2F0Y2ggewogICAgICAgICAgICB0ZXh0LWFsaWduOiBjZW50ZXI7CiAgICAgICAgfQogICAgICAgIC5zd2F0Y2gtY29sb3IgewogICAgICAgICAgICB3aWR0aDogODBweDsKICAgICAgICAgICAgaGVpZ2h0OiA4MHB4OwogICAgICAgICAgICBib3JkZXItcmFkaXVzOiA4cHg7CiAgICAgICAgICAgIG1hcmdpbjogMCBhdXRvIDEwcHg7CiAgICAgICAgICAgIGJveC1zaGFkb3c6IDAgMnB4IDRweCByZ2JhKDAsMCwwLDAuMik7CiAgICAgICAgfQogICAgICAgIC5zd2F0Y2gtbmFtZSB7CiAgICAgICAgICAgIGZvbnQtd2VpZ2h0OiA2MDA7CiAgICAgICAgICAgIG1hcmdpbi1ib3R0b206IDVweDsKICAgICAgICB9CiAgICAgICAgLnN3YXRjaC1oZXggewogICAgICAgICAgICBmb250LWZhbWlseTogbW9ub3NwYWNlOwogICAgICAgICAgICBjb2xvcjogIzY2NjsKICAgICAgICB9CiAgICA8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgogICAgPGRpdiBjbGFzcz0iY29udGFpbmVyIj4KICAgICAgICA8aDE+R29Wb2FpY2UgQWkgTG9nbyBEZXNpZ25zPC9oMT4KICAgICAgICAKICAgICAgICA8IS0tIFZlcnNpb24gMSAtLT4KICAgICAgICA8ZGl2IGNsYXNzPSJsb2dvLWdyaWQiPgogICAgICAgICAgICA8ZGl2IGNsYXNzPSJsb2dvLWNhcmQiPgogICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0ibG9nby10aXRsZSI+VmVyc2lvbiAxIC0gV2hpdGUgQmFja2dyb3VuZDwvZGl2PgogICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0ibG9nby1wcmV2aWV3IHdoaXRlLWJnIj4KICAgICAgICAgICAgICAgICAgICA8Y2FudmFzIGlkPSJ2MS13aGl0ZSI+PC9jYW52YXM+CiAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgIDxidXR0b24gY2xhc3M9ImRvd25sb2FkLWJ0biIgb25jbGljaz0iZG93bmxvYWQoJ3YxLXdoaXRlJywgJ0dvVm9haWNlX0FpX1YxX1doaXRlLnBuZycpIj5Eb3dubG9hZCBQTkc8L2J1dHRvbj4KICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgIDxkaXYgY2xhc3M9ImxvZ28tY2FyZCI+CiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJsb2dvLXRpdGxlIj5WZXJzaW9uIDEgLSBCbGFjayBCYWNrZ3JvdW5kPC9kaXY+CiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJsb2dvLXByZXZpZXcgYmxhY2stYmciPgogICAgICAgICAgICAgICAgICAgIDxjYW52YXMgaWQ9InYxLWJsYWNrIj48L2NhbnZhcz4KICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz0iZG93bmxvYWQtYnRuIiBvbmNsaWNrPSJkb3dubG9hZCgndjEtYmxhY2snLCAnR29Wb2FpY2VfQWlfVjFfQmxhY2sucG5nJykiPkRvd25sb2FkIFBORzwvYnV0dG9uPgogICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgPGRpdiBjbGFzcz0ibG9nby1jYXJkIj4KICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImxvZ28tdGl0bGUiPlZlcnNpb24gMSAtIFRyYW5zcGFyZW50PC9kaXY+CiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJsb2dvLXByZXZpZXcgdHJhbnNwYXJlbnQtYmciPgogICAgICAgICAgICAgICAgICAgIDxjYW52YXMgaWQ9InYxLXRyYW5zcGFyZW50Ij48L2NhbnZhcz4KICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz0iZG93bmxvYWQtYnRuIiBvbmNsaWNrPSJkb3dubG9hZCgndjEtdHJhbnNwYXJlbnQnLCAnR29Wb2FpY2VfQWlfVjFfVHJhbnNwYXJlbnQucG5nJykiPkRvd25sb2FkIFBORzwvYnV0dG9uPgogICAgICAgICAgICA8L2Rpdj4KICAgICAgICA8L2Rpdj4KCiAgICAgICAgPCEtLSBWZXJzaW9uIDIgLS0+CiAgICAgICAgPGRpdiBjbGFzcz0ibG9nby1ncmlkIj4KICAgICAgICAgICAgPGRpdiBjbGFzcz0ibG9nby1jYXJkIj4KICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImxvZ28tdGl0bGUiPlZlcnNpb24gMiAtIFdoaXRlIEJhY2tncm91bmQ8L2Rpdj4KICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImxvZ28tcHJldmlldyB3aGl0ZS1iZyI+CiAgICAgICAgICAgICAgICAgICAgPGNhbnZhcyBpZD0idjItd2hpdGUiPjwvY2FudmFzPgogICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICA8YnV0dG9uIGNsYXNzPSJkb3dubG9hZC1idG4iIG9uY2xpY2s9ImRvd25sb2FkKCd2Mi13aGl0ZScsICdHb1ZvYWljZV9BaV9WMl9XaGl0ZS5wbmcnKSI+RG93bmxvYWQgUE5HPC9idXR0b24+CiAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICA8ZGl2IGNsYXNzPSJsb2dvLWNhcmQiPgogICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0ibG9nby10aXRsZSI+VmVyc2lvbiAyIC0gQmxhY2sgQmFja2dyb3VuZDwvZGl2PgogICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0ibG9nby1wcmV2aWV3IGJsYWNrLWJnIj4KICAgICAgICAgICAgICAgICAgICA8Y2FudmFzIGlkPSJ2Mi1ibGFjayI+PC9jYW52YXM+CiAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgIDxidXR0b24gY2xhc3M9ImRvd25sb2FkLWJ0biIgb25jbGljaz0iZG93bmxvYWQoJ3YyLWJsYWNrJywgJ0dvVm9haWNlX0FpX1YyX0JsYWNrLnBuZycpIj5Eb3dubG9hZCBQTkc8L2J1dHRvbj4KICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgIDxkaXYgY2xhc3M9ImxvZ28tY2FyZCI+CiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJsb2dvLXRpdGxlIj5WZXJzaW9uIDIgLSBUcmFuc3BhcmVudDwvZGl2PgogICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0ibG9nby1wcmV2aWV3IHRyYW5zcGFyZW50LWJnIj4KICAgICAgICAgICAgICAgICAgICA8Y2FudmFzIGlkPSJ2Mi10cmFuc3BhcmVudCI+PC9jYW52YXM+CiAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgIDxidXR0b24gY2xhc3M9ImRvd25sb2FkLWJ0biIgb25jbGljaz0iZG93bmxvYWQoJ3YyLXRyYW5zcGFyZW50JywgJ0dvVm9haWNlX0FpX1YyX1RyYW5zcGFyZW50LnBuZycpIj5Eb3dubG9hZCBQTkc8L2J1dHRvbj4KICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgPC9kaXY+CgogICAgICAgIDwhLS0gVmVyc2lvbiAzIC0tPgogICAgICAgIDxkaXYgY2xhc3M9ImxvZ28tZ3JpZCI+CiAgICAgICAgICAgIDxkaXYgY2xhc3M9ImxvZ28tY2FyZCI+CiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJsb2dvLXRpdGxlIj5WZXJzaW9uIDMgLSBXaGl0ZSBCYWNrZ3JvdW5kPC9kaXY+CiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJsb2dvLXByZXZpZXcgd2hpdGUtYmciPgogICAgICAgICAgICAgICAgICAgIDxjYW52YXMgaWQ9InYzLXdoaXRlIj48L2NhbnZhcz4KICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz0iZG93bmxvYWQtYnRuIiBvbmNsaWNrPSJkb3dubG9hZCgndjMtd2hpdGUnLCAnR29Wb2FpY2VfQWlfVjNfV2hpdGUucG5nJykiPkRvd25sb2FkIFBORzwvYnV0dG9uPgogICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgPGRpdiBjbGFzcz0ibG9nby1jYXJkIj4KICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImxvZ28tdGl0bGUiPlZlcnNpb24gMyAtIEJsYWNrIEJhY2tncm91bmQ8L2Rpdj4KICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImxvZ28tcHJldmlldyBibGFjay1iZyI+CiAgICAgICAgICAgICAgICAgICAgPGNhbnZhcyBpZD0idjMtYmxhY2siPjwvY2FudmFzPgogICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICA8YnV0dG9uIGNsYXNzPSJkb3dubG9hZC1idG4iIG9uY2xpY2s9ImRvd25sb2FkKCd2My1ibGFjaycsICdHb1ZvYWljZV9BaV9WM19CbGFjay5wbmcnKSI+RG93bmxvYWQgUE5HPC9idXR0b24+CiAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICA8ZGl2IGNsYXNzPSJsb2dvLWNhcmQiPgogICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0ibG9nby10aXRsZSI+VmVyc2lvbiAzIC0gVHJhbnNwYXJlbnQ8L2Rpdj4KICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImxvZ28tcHJldmlldyB0cmFuc3BhcmVudC1iZyI+CiAgICAgICAgICAgICAgICAgICAgPGNhbnZhcyBpZD0idjMtdHJhbnNwYXJlbnQiPjwvY2FudmFzPgogICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICA8YnV0dG9uIGNsYXNzPSJkb3dubG9hZC1idG4iIG9uY2xpY2s9ImRvd25sb2FkKCd2My10cmFuc3BhcmVudCcsICdHb1ZvYWljZV9BaV9WM19UcmFuc3BhcmVudC5wbmcnKSI+RG93bmxvYWQgUE5HPC9idXR0b24+CiAgICAgICAgICAgIDwvZGl2PgogICAgICAgIDwvZGl2PgoKICAgICAgICA8ZGl2IGNsYXNzPSJjb2xvci1pbmZvIj4KICAgICAgICAgICAgPGgyPkJyYW5kIENvbG9yczwvaDI+CiAgICAgICAgICAgIDxkaXYgY2xhc3M9ImNvbG9yLXN3YXRjaGVzIj4KICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InN3YXRjaCI+CiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0ic3dhdGNoLWNvbG9yIiBzdHlsZT0iYmFja2dyb3VuZDogIzAwNjZGRjsiPjwvZGl2PgogICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InN3YXRjaC1uYW1lIj5FbGVjdHJpYyBCbHVlPC9kaXY+CiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0ic3dhdGNoLWhleCI+IzAwNjZGRjwvZGl2PgogICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJzd2F0Y2giPgogICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InN3YXRjaC1jb2xvciIgc3R5bGU9ImJhY2tncm91bmQ6ICMwMEQ5RkY7Ij48L2Rpdj4KICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJzd2F0Y2gtbmFtZSI+VmlicmFudCBDeWFuPC9kaXY+CiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0ic3dhdGNoLWhleCI+IzAwRDlGRjwvZGl2PgogICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgIDwvZGl2PgogICAgICAgIDwvZGl2PgogICAgPC9kaXY+CgogICAgPHNjcmlwdD4KICAgICAgICBjb25zdCBXSURUSCA9IDI0MDA7CiAgICAgICAgY29uc3QgSEVJR0hUID0gODQwOwogICAgICAgIAogICAgICAgIC8vIFZlcnNpb24gMTogTW9kZXJuIGdlb21ldHJpYyB3aXRoIHNvdW5kd2F2ZSBpY29uCiAgICAgICAgZnVuY3Rpb24gZHJhd1ZlcnNpb24xKGNhbnZhc0lkLCBiZ0NvbG9yLCB0ZXh0Q29sb3IpIHsKICAgICAgICAgICAgY29uc3QgY2FudmFzID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoY2FudmFzSWQpOwogICAgICAgICAgICBjYW52YXMud2lkdGggPSBXSURUSDsKICAgICAgICAgICAgY2FudmFzLmhlaWdodCA9IEhFSUdIVDsKICAgICAgICAgICAgY29uc3QgY3R4ID0gY2FudmFzLmdldENvbnRleHQoJzJkJyk7CiAgICAgICAgICAgIAogICAgICAgICAgICBpZiAoYmdDb2xvciAhPT0gJ3RyYW5zcGFyZW50JykgewogICAgICAgICAgICAgICAgY3R4LmZpbGxTdHlsZSA9IGJnQ29sb3I7CiAgICAgICAgICAgICAgICBjdHguZmlsbFJlY3QoMCwgMCwgV0lEVEgsIEhFSUdIVCk7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgCiAgICAgICAgICAgIGNvbnN0IGNlbnRlclkgPSBIRUlHSFQgLyAyOwogICAgICAgICAgICBjb25zdCBpY29uU2l6ZSA9IDI4MDsKICAgICAgICAgICAgY29uc3QgaWNvblggPSAzMDA7CiAgICAgICAgICAgIAogICAgICAgICAgICAvLyBEcmF3IHNvdW5kd2F2ZSBpY29uCiAgICAgICAgICAgIGNvbnN0IGJhcnMgPSBbMC40LCAwLjgsIDEsIDAuNiwgMC45LCAwLjcsIDEsIDAuNV07CiAgICAgICAgICAgIGNvbnN0IGJhcldpZHRoID0gMjg7CiAgICAgICAgICAgIGNvbnN0IGJhckdhcCA9IDEyOwogICAgICAgICAgICBjb25zdCB0b3RhbFdpZHRoID0gYmFycy5sZW5ndGggKiAoYmFyV2lkdGggKyBiYXJHYXApIC0gYmFyR2FwOwogICAgICAgICAgICAKICAgICAgICAgICAgYmFycy5mb3JFYWNoKChoZWlnaHQsIGkpID0+IHsKICAgICAgICAgICAgICAgIGNvbnN0IHggPSBpY29uWCAtIHRvdGFsV2lkdGggLyAyICsgaSAqIChiYXJXaWR0aCArIGJhckdhcCk7CiAgICAgICAgICAgICAgICBjb25zdCBoID0gaWNvblNpemUgKiBoZWlnaHQ7CiAgICAgICAgICAgICAgICBjb25zdCBncmFkaWVudCA9IGN0eC5jcmVhdGVMaW5lYXJHcmFkaWVudCh4LCBjZW50ZXJZIC0gaC8yLCB4LCBjZW50ZXJZICsgaC8yKTsKICAgICAgICAgICAgICAgIGdyYWRpZW50LmFkZENvbG9yU3RvcCgwLCAnIzAwNjZGRicpOwogICAgICAgICAgICAgICAgZ3JhZGllbnQuYWRkQ29sb3JTdG9wKDEsICcjMDBEOUZGJyk7CiAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgIGN0eC5maWxsU3R5bGUgPSBncmFkaWVudDsKICAgICAgICAgICAgICAgIGN0eC5iZWdpblBhdGgoKTsKICAgICAgICAgICAgICAgIGN0eC5yb3VuZFJlY3QoeCwgY2VudGVyWSAtIGgvMiwgYmFyV2lkdGgsIGgsIDgpOwogICAgICAgICAgICAgICAgY3R4LmZpbGwoKTsKICAgICAgICAgICAgfSk7CiAgICAgICAgICAgIAogICAgICAgICAgICAvLyBUZXh0CiAgICAgICAgICAgIGNvbnN0IHRleHRYID0gaWNvblggKyB0b3RhbFdpZHRoIC8gMiArIDEyMDsKICAgICAgICAgICAgY3R4LmZvbnQgPSAnYm9sZCAxODBweCAtYXBwbGUtc3lzdGVtLCBCbGlua01hY1N5c3RlbUZvbnQsICJTZWdvZSBVSSIsIEFyaWFsLCBzYW5zLXNlcmlmJzsKICAgICAgICAgICAgCiAgICAgICAgICAgIC8vICJHbyIKICAgICAgICAgICAgY3R4LmZpbGxTdHlsZSA9IHRleHRDb2xvcjsKICAgICAgICAgICAgY3R4LmZpbGxUZXh0KCdHbycsIHRleHRYLCBjZW50ZXJZICsgNjApOwogICAgICAgICAgICBjb25zdCBnb1dpZHRoID0gY3R4Lm1lYXN1cmVUZXh0KCdHbycpLndpZHRoOwogICAgICAgICAgICAKICAgICAgICAgICAgLy8gIlZvIgogICAgICAgICAgICBjdHguZmlsbFRleHQoJ1ZvJywgdGV4dFggKyBnb1dpZHRoLCBjZW50ZXJZICsgNjApOwogICAgICAgICAgICBjb25zdCB2b1dpZHRoID0gY3R4Lm1lYXN1cmVUZXh0KCdWbycpLndpZHRoOwogICAgICAgICAgICAKICAgICAgICAgICAgLy8gIkFJIiBpbiBncmFkaWVudAogICAgICAgICAgICBjb25zdCBncmFkaWVudDIgPSBjdHguY3JlYXRlTGluZWFyR3JhZGllbnQodGV4dFggKyBnb1dpZHRoICsgdm9XaWR0aCwgY2VudGVyWSAtIDYwLCB0ZXh0WCArIGdvV2lkdGggKyB2b1dpZHRoICsgMjAwLCBjZW50ZXJZICsgNjApOwogICAgICAgICAgICBncmFkaWVudDIuYWRkQ29sb3JTdG9wKDAsICcjMDA2NkZGJyk7CiAgICAgICAgICAgIGdyYWRpZW50Mi5hZGRDb2xvclN0b3AoMSwgJyMwMEQ5RkYnKTsKICAgICAgICAgICAgY3R4LmZpbGxTdHlsZSA9IGdyYWRpZW50MjsKICAgICAgICAgICAgY3R4LmZpbGxUZXh0KCdBSScsIHRleHRYICsgZ29XaWR0aCArIHZvV2lkdGgsIGNlbnRlclkgKyA2MCk7CiAgICAgICAgICAgIGNvbnN0IGFpV2lkdGggPSBjdHgubWVhc3VyZVRleHQoJ0FJJykud2lkdGg7CiAgICAgICAgICAgIAogICAgICAgICAgICAvLyAiY2UiCiAgICAgICAgICAgIGN0eC5maWxsU3R5bGUgPSB0ZXh0Q29sb3I7CiAgICAgICAgICAgIGN0eC5maWxsVGV4dCgnY2UnLCB0ZXh0WCArIGdvV2lkdGggKyB2b1dpZHRoICsgYWlXaWR0aCwgY2VudGVyWSArIDYwKTsKICAgICAgICAgICAgY29uc3QgY2VXaWR0aCA9IGN0eC5tZWFzdXJlVGV4dCgnY2UnKS53aWR0aDsKICAgICAgICAgICAgCiAgICAgICAgICAgIC8vICJBaSIKICAgICAgICAgICAgY3R4LmZvbnQgPSAnYm9sZCAxNDBweCAtYXBwbGUtc3lzdGVtLCBCbGlua01hY1N5c3RlbUZvbnQsICJTZWdvZSBVSSIsIEFyaWFsLCBzYW5zLXNlcmlmJzsKICAgICAgICAgICAgY3R4LmZpbGxUZXh0KCdBaScsIHRleHRYICsgZ29XaWR0aCArIHZvV2lkdGggKyBhaVdpZHRoICsgY2VXaWR0aCArIDQwLCBjZW50ZXJZICsgNTApOwogICAgICAgICAgICAKICAgICAgICAgICAgLy8gVGFnbGluZQogICAgICAgICAgICBjdHguZm9udCA9ICc1MnB4IC1hcHBsZS1zeXN0ZW0sIEJsaW5rTWFjU3lzdGVtRm9udCwgIlNlZ29lIFVJIiwgQXJpYWwsIHNhbnMtc2VyaWYnOwogICAgICAgICAgICBjdHguZmlsbFN0eWxlID0gdGV4dENvbG9yID09PSAnI0ZGRkZGRicgPyAncmdiYSgyNTUsMjU1LDI1NSwwLjcpJyA6ICdyZ2JhKDAsMCwwLDAuNiknOwogICAgICAgICAgICBjdHguZmlsbFRleHQoJ1RoZXJlIGlzIEFJIGluIHRoZSB2b2ljZScsIHRleHRYLCBjZW50ZXJZICsgMTUwKTsKICAgICAgICB9CiAgICAgICAgCiAgICAgICAgLy8gVmVyc2lvbiAyOiBQaG9uZSBpY29uIHdpdGggdm9pY2Ugd2F2ZXMKICAgICAgICBmdW5jdGlvbiBkcmF3VmVyc2lvbjIoY2FudmFzSWQsIGJnQ29sb3IsIHRleHRDb2xvcikgewogICAgICAgICAgICBjb25zdCBjYW52YXMgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChjYW52YXNJZCk7CiAgICAgICAgICAgIGNhbnZhcy53aWR0aCA9IFdJRFRIOwogICAgICAgICAgICBjYW52YXMuaGVpZ2h0ID0gSEVJR0hUOwogICAgICAgICAgICBjb25zdCBjdHggPSBjYW52YXMuZ2V0Q29udGV4dCgnMmQnKTsKICAgICAgICAgICAgCiAgICAgICAgICAgIGlmIChiZ0NvbG9yICE9PSAndHJhbnNwYXJlbnQnKSB7CiAgICAgICAgICAgICAgICBjdHguZmlsbFN0eWxlID0gYmdDb2xvcjsKICAgICAgICAgICAgICAgIGN0eC5maWxsUmVjdCgwLCAwLCBXSURUSCwgSEVJR0hUKTsKICAgICAgICAgICAgfQogICAgICAgICAgICAKICAgICAgICAgICAgY29uc3QgY2VudGVyWSA9IEhFSUdIVCAvIDI7CiAgICAgICAgICAgIGNvbnN0IGljb25YID0gMzIwOwogICAgICAgICAgICAKICAgICAgICAgICAgLy8gRHJhdyBwaG9uZSB3aXRoIHZvaWNlIHdhdmVzCiAgICAgICAgICAgIGNvbnN0IHBob25lVyA9IDE0MDsKICAgICAgICAgICAgY29uc3QgcGhvbmVIID0gMjIwOwogICAgICAgICAgICBjb25zdCBwaG9uZVggPSBpY29uWCAtIHBob25lVyAvIDI7CiAgICAgICAgICAgIGNvbnN0IHBob25lWSA9IGNlbnRlclkgLSBwaG9uZUggLyAyOwogICAgICAgICAgICAKICAgICAgICAgICAgLy8gUGhvbmUgYm9keSBncmFkaWVudAogICAgICAgICAgICBjb25zdCBncmFkaWVudCA9IGN0eC5jcmVhdGVMaW5lYXJHcmFkaWVudChwaG9uZVgsIHBob25lWSwgcGhvbmVYLCBwaG9uZVkgKyBwaG9uZUgpOwogICAgICAgICAgICBncmFkaWVudC5hZGRDb2xvclN0b3AoMCwgJyMwMDY2RkYnKTsKICAgICAgICAgICAgZ3JhZGllbnQuYWRkQ29sb3JTdG9wKDEsICcjMDBEOUZGJyk7CiAgICAgICAgICAgIAogICAgICAgICAgICBjdHguZmlsbFN0eWxlID0gZ3JhZGllbnQ7CiAgICAgICAgICAgIGN0eC5iZWdpblBhdGgoKTsKICAgICAgICAgICAgY3R4LnJvdW5kUmVjdChwaG9uZVgsIHBob25lWSwgcGhvbmVXLCBwaG9uZUgsIDIwKTsKICAgICAgICAgICAgY3R4LmZpbGwoKTsKICAgICAgICAgICAgCiAgICAgICAgICAgIC8vIFBob25lIHNjcmVlbgogICAgICAgICAgICBjdHguZmlsbFN0eWxlID0gYmdDb2xvciA9PT0gJyMwMDAwMDAnID8gJ3JnYmEoMCwwLDAsMC4zKScgOiAncmdiYSgyNTUsMjU1LDI1NSwwLjIpJzsKICAgICAgICAgICAgY3R4LmJlZ2luUGF0aCgpOwogICAgICAgICAgICBjdHgucm91bmRSZWN0KHBob25lWCArIDE1LCBwaG9uZVkgKyAyNSwgcGhvbmVXIC0gMzAsIHBob25lSCAtIDcwLCAxMik7CiAgICAgICAgICAgIGN0eC5maWxsKCk7CiAgICAgICAgICAgIAogICAgICAgICAgICAvLyBWb2ljZSB3YXZlcwogICAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IDM7IGkrKykgewogICAgICAgICAgICAgICAgY3R4LnN0cm9rZVN0eWxlID0gaSA9PT0gMCA/ICcjMDBEOUZGJyA6IChpID09PSAxID8gJyMwMDg4RkYnIDogJyMwMDY2RkYnKTsKICAgICAgICAgICAgICAgIGN0eC5saW5lV2lkdGggPSAxMjsKICAgICAgICAgICAgICAgIGN0eC5nbG9iYWxBbHBoYSA9IDAuNiAtIGkgKiAwLjE1OwogICAgICAgICAgICAgICAgY3R4LmJlZ2luUGF0aCgpOwogICAgICAgICAgICAgICAgY3R4LmFyYyhpY29uWCwgY2VudGVyWSwgMTgwICsgaSAqIDcwLCAtTWF0aC5QSSAqIDAuMjUsIE1hdGguUEkgKiAwLjI1KTsKICAgICAgICAgICAgICAgIGN0eC5zdHJva2UoKTsKICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgY3R4LmJlZ2luUGF0aCgpOwogICAgICAgICAgICAgICAgY3R4LmFyYyhpY29uWCwgY2VudGVyWSwgMTgwICsgaSAqIDcwLCBNYXRoLlBJICogMC43NSwgTWF0aC5QSSAqIDEuMjUpOwogICAgICAgICAgICAgICAgY3R4LnN0cm9rZSgpOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGN0eC5nbG9iYWxBbHBoYSA9IDE7CiAgICAgICAgICAgIAogICAgICAgICAgICAvLyBUZXh0CiAgICAgICAgICAgIGNvbnN0IHRleHRYID0gaWNvblggKyAyNjA7CiAgICAgICAgICAgIGN0eC5mb250ID0gJ2JvbGQgMTgwcHggLWFwcGxlLXN5c3RlbSwgQmxpbmtNYWNTeXN0ZW1Gb250LCAiU2Vnb2UgVUkiLCBBcmlhbCwgc2Fucy1zZXJpZic7CiAgICAgICAgICAgIAogICAgICAgICAgICBjdHguZmlsbFN0eWxlID0gdGV4dENvbG9yOwogICAgICAgICAgICBjdHguZmlsbFRleHQoJ0dvJywgdGV4dFgsIGNlbnRlclkgKyA2MCk7CiAgICAgICAgICAgIGNvbnN0IGdvV2lkdGggPSBjdHgubWVhc3VyZVRleHQoJ0dvJykud2lkdGg7CiAgICAgICAgICAgIAogICAgICAgICAgICBjdHguZmlsbFRleHQoJ1ZvJywgdGV4dFggKyBnb1dpZHRoLCBjZW50ZXJZICsgNjApOwogICAgICAgICAgICBjb25zdCB2b1dpZHRoID0gY3R4Lm1lYXN1cmVUZXh0KCdWbycpLndpZHRoOwogICAgICAgICAgICAKICAgICAgICAgICAgY29uc3QgZ3JhZGllbnQyID0gY3R4LmNyZWF0ZUxpbmVhckdyYWRpZW50KHRleHRYICsgZ29XaWR0aCArIHZvV2lkdGgsIGNlbnRlclkgLSA2MCwgdGV4dFggKyBnb1dpZHRoICsgdm9XaWR0aCArIDIwMCwgY2VudGVyWSArIDYwKTsKICAgICAgICAgICAgZ3JhZGllbnQyLmFkZENvbG9yU3RvcCgwLCAnIzAwNjZGRicpOwogICAgICAgICAgICBncmFkaWVudDIuYWRkQ29sb3JTdG9wKDEsICcjMDBEOUZGJyk7CiAgICAgICAgICAgIGN0eC5maWxsU3R5bGUgPSBncmFkaWVudDI7CiAgICAgICAgICAgIGN0eC5maWxsVGV4dCgnQUknLCB0ZXh0WCArIGdvV2lkdGggKyB2b1dpZHRoLCBjZW50ZXJZICsgNjApOwogICAgICAgICAgICBjb25zdCBhaVdpZHRoID0gY3R4Lm1lYXN1cmVUZXh0KCdBSScpLndpZHRoOwogICAgICAgICAgICAKICAgICAgICAgICAgY3R4LmZpbGxTdHlsZSA9IHRleHRDb2xvcjsKICAgICAgICAgICAgY3R4LmZpbGxUZXh0KCdjZScsIHRleHRYICsgZ29XaWR0aCArIHZvV2lkdGggKyBhaVdpZHRoLCBjZW50ZXJZICsgNjApOwogICAgICAgICAgICBjb25zdCBjZVdpZHRoID0gY3R4Lm1lYXN1cmVUZXh0KCdjZScpLndpZHRoOwogICAgICAgICAgICAKICAgICAgICAgICAgY3R4LmZvbnQgPSAnYm9sZCAxNDBweCAtYXBwbGUtc3lzdGVtLCBCbGlua01hY1N5c3RlbUZvbnQsICJTZWdvZSBVSSIsIEFyaWFsLCBzYW5zLXNlcmlmJzsKICAgICAgICAgICAgY3R4LmZpbGxUZXh0KCdBaScsIHRleHRYICsgZ29XaWR0aCArIHZvV2lkdGggKyBhaVdpZHRoICsgY2VXaWR0aCArIDQwLCBjZW50ZXJZICsgNTApOwogICAgICAgICAgICAKICAgICAgICAgICAgY3R4LmZvbnQgPSAnNTJweCAtYXBwbGUtc3lzdGVtLCBCbGlua01hY1N5c3RlbUZvbnQsICJTZWdvZSBVSSIsIEFyaWFsLCBzYW5zLXNlcmlmJzsKICAgICAgICAgICAgY3R4LmZpbGxTdHlsZSA9IHRleHRDb2xvciA9PT0gJyNGRkZGRkYnID8gJ3JnYmEoMjU1LDI1NSwyNTUsMC43KScgOiAncmdiYSgwLDAsMCwwLjYpJzsKICAgICAgICAgICAgY3R4LmZpbGxUZXh0KCdUaGVyZSBpcyBBSSBpbiB0aGUgdm9pY2UnLCB0ZXh0WCwgY2VudGVyWSArIDE1MCk7CiAgICAgICAgfQogICAgICAgIAogICAgICAgIC8vIFZlcnNpb24gMzogQWJzdHJhY3QgQUkgYnJhaW4vdm9pY2UgaWNvbgogICAgICAgIGZ1bmN0aW9uIGRyYXdWZXJzaW9uMyhjYW52YXNJZCwgYmdDb2xvciwgdGV4dENvbG9yKSB7CiAgICAgICAgICAgIGNvbnN0IGNhbnZhcyA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGNhbnZhc0lkKTsKICAgICAgICAgICAgY2FudmFzLndpZHRoID0gV0lEVEg7CiAgICAgICAgICAgIGNhbnZhcy5oZWlnaHQgPSBIRUlHSFQ7CiAgICAgICAgICAgIGNvbnN0IGN0eCA9IGNhbnZhcy5nZXRDb250ZXh0KCcyZCcpOwogICAgICAgICAgICAKICAgICAgICAgICAgaWYgKGJnQ29sb3IgIT09ICd0cmFuc3BhcmVudCcpIHsKICAgICAgICAgICAgICAgIGN0eC5maWxsU3R5bGUgPSBiZ0NvbG9yOwogICAgICAgICAgICAgICAgY3R4LmZpbGxSZWN0KDAsIDAsIFdJRFRILCBIRUlHSFQpOwogICAgICAgICAgICB9CiAgICAgICAgICAgIAogICAgICAgICAgICBjb25zdCBjZW50ZXJZID0gSEVJR0hUIC8gMjsKICAgICAgICAgICAgY29uc3QgaWNvblggPSAzMDA7CiAgICAgICAgICAgIAogICAgICAgICAgICAvLyBEcmF3IGNpcmN1bGFyIEFJIG5ldHdvcmsKICAgICAgICAgICAgY29uc3QgcmFkaXVzID0gMTMwOwogICAgICAgICAgICAKICAgICAgICAgICAgLy8gT3V0ZXIgY2lyY2xlCiAgICAgICAgICAgIGNvbnN0IGdyYWRpZW50ID0gY3R4LmNyZWF0ZVJhZGlhbEdyYWRpZW50KGljb25YLCBjZW50ZXJZLCAwLCBpY29uWCwgY2VudGVyWSwgcmFkaXVzKTsKICAgICAgICAgICAgZ3JhZGllbnQuYWRkQ29sb3JTdG9wKDAsICcjMDBEOUZGJyk7CiAgICAgICAgICAgIGdyYWRpZW50LmFkZENvbG9yU3RvcCgxLCAnIzAwNjZGRicpOwogICAgICAgICAgICAKICAgICAgICAgICAgY3R4LnN0cm9rZVN0eWxlID0gZ3JhZGllbnQ7CiAgICAgICAgICAgIGN0eC5saW5lV2lkdGggPSAxNjsKICAgICAgICAgICAgY3R4LmJlZ2luUGF0aCgpOwogICAgICAgICAgICBjdHguYXJjKGljb25YLCBjZW50ZXJZLCByYWRpdXMsIDAsIE1hdGguUEkgKiAyKTsKICAgICAgICAgICAgY3R4LnN0cm9rZSgpOwogICAgICAgICAgICAKICAgICAgICAgICAgLy8gSW5uZXIgbmV0d29yayBub2RlcwogICAgICAgICAgICBjb25zdCBub2RlcyA9IFsKICAgICAgICAgICAgICAgIHthbmdsZTogMCwgcjogMH0sCiAgICAgICAgICAgICAgICB7YW5nbGU6IDAsIHI6IDcwfSwKICAgICAgICAgICAgICAgIHthbmdsZTogTWF0aC5QSSAqIDAuNCwgcjogNzB9LAogICAgICAgICAgICAgICAge2FuZ2xlOiBNYXRoLlBJICogMC44LCByOiA3MH0sCiAgICAgICAgICAgICAgICB7YW5nbGU6IE1hdGguUEkgKiAxLjIsIHI6IDcwfSwKICAgICAgICAgICAgICAgIHthbmdsZTogTWF0aC5QSSAqIDEuNiwgcjogNzB9CiAgICAgICAgICAgIF07CiAgICAgICAgICAgIAogICAgICAgICAgICAvLyBEcmF3IGNvbm5lY3Rpb25zCiAgICAgICAgICAgIGN0eC5zdHJva2VTdHlsZSA9ICcjMDA4OEZGJzsKICAgICAgICAgICAgY3R4LmxpbmVXaWR0aCA9IDY7CiAgICAgICAgICAgIGN0eC5nbG9iYWxBbHBoYSA9IDAuNDsKICAgICAgICAgICAgZm9yIChsZXQgaSA9IDE7IGkgPCBub2Rlcy5sZW5ndGg7IGkrKykgewogICAgICAgICAgICAgICAgY29uc3QgeDEgPSBpY29uWCArIE1hdGguY29zKG5vZGVzWzBdLmFuZ2xlKSAqIG5vZGVzWzBdLnI7CiAgICAgICAgICAgICAgICBjb25zdCB5MSA9IGNlbnRlclkgKyBNYXRoLnNpbihub2Rlc1swXS5hbmdsZSkgKiBub2Rlc1swXS5yOwogICAgICAgICAgICAgICAgY29uc3QgeDIgPSBpY29uWCArIE1hdGguY29zKG5vZGVzW2ldLmFuZ2xlKSAqIG5vZGVzW2ldLnI7CiAgICAgICAgICAgICAgICBjb25zdCB5MiA9IGNlbnRlclkgKyBNYXRoLnNpbihub2Rlc1tpXS5hbmdsZSkgKiBub2Rlc1tpXS5yOwogICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICBjdHguYmVnaW5QYXRoKCk7CiAgICAgICAgICAgICAgICBjdHgubW92ZVRvKHgxLCB5MSk7CiAgICAgICAgICAgICAgICBjdHgubGluZVRvKHgyLCB5Mik7CiAgICAgICAgICAgICAgICBjdHguc3Ryb2tlKCk7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgY3R4Lmdsb2JhbEFscGhhID0gMTsKICAgICAgICAgICAgCiAgICAgICAgICAgIC8vIERyYXcgbm9kZXMKICAgICAgICAgICAgbm9kZXMuZm9yRWFjaCgobm9kZSwgaSkgPT4gewogICAgICAgICAgICAgICAgY29uc3QgeCA9IGljb25YICsgTWF0aC5jb3Mobm9kZS5hbmdsZSkgKiBub2RlLnI7CiAgICAgICAgICAgICAgICBjb25zdCB5ID0gY2VudGVyWSArIE1hdGguc2luKG5vZGUuYW5nbGUpICogbm9kZS5yOwogICAgICAgICAgICAgICAgY29uc3Qgbm9kZVJhZGl1cyA9IGkgPT09IDAgPyAyOCA6IDE4OwogICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICBjb25zdCBub2RlR3JhZGllbnQgPSBjdHguY3JlYXRlUmFkaWFsR3JhZGllbnQoeCwgeSwgMCwgeCwgeSwgbm9kZVJhZGl1cyk7CiAgICAgICAgICAgICAgICBub2RlR3JhZGllbnQuYWRkQ29sb3JTdG9wKDAsICcjMDBEOUZGJyk7CiAgICAgICAgICAgICAgICBub2RlR3JhZGllbnQuYWRkQ29sb3JTdG9wKDEsICcjMDA2NkZGJyk7CiAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgIGN0eC5maWxsU3R5bGUgPSBub2RlR3JhZGllbnQ7CiAgICAgICAgICAgICAgICBjdHguYmVnaW5QYXRoKCk7CiAgICAgICAgICAgICAgICBjdHguYXJjKHgsIHksIG5vZGVSYWRpdXMsIDAsIE1hdGguUEkgKiAyKTsKICAgICAgICAgICAgICAgIGN0eC5maWxsKCk7CiAgICAgICAgICAgIH0pOwogICAgICAgICAgICAKICAgICAgICAgICAgLy8gVGV4dAogICAgICAgICAgICBjb25zdCB0ZXh0WCA9IGljb25YICsgMjMwOwogICAgICAgICAgICBjdHguZm9udCA9ICdib2xkIDE4MHB4IC1hcHBsZS1zeXN0ZW0sIEJsaW5rTWFjU3lzdGVtRm9udCwgIlNlZ29lIFVJIiwgQXJpYWwsIHNhbnMtc2VyaWYnOwogICAgICAgICAgICAKICAgICAgICAgICAgY3R4LmZpbGxTdHlsZSA9IHRleHRDb2xvcjsKICAgICAgICAgICAgY3R4LmZpbGxUZXh0KCdHbycsIHRleHRYLCBjZW50ZXJZICsgNjApOwogICAgICAgICAgICBjb25zdCBnb1dpZHRoID0gY3R4Lm1lYXN1cmVUZXh0KCdHbycpLndpZHRoOwogICAgICAgICAgICAKICAgICAgICAgICAgY3R4LmZpbGxUZXh0KCdWbycsIHRleHRYICsgZ29XaWR0aCwgY2VudGVyWSArIDYwKTsKICAgICAgICAgICAgY29uc3Qgdm9XaWR0aCA9IGN0eC5tZWFzdXJlVGV4dCgnVm8nKS53aWR0aDsKICAgICAgICAgICAgCiAgICAgICAgICAgIGNvbnN0IGdyYWRpZW50MiA9IGN0eC5jcmVhdGVMaW5lYXJHcmFkaWVudCh0ZXh0WCArIGdvV2lkdGggKyB2b1dpZHRoLCBjZW50ZXJZIC0gNjAsIHRleHRYICsgZ29XaWR0aCArIHZvV2lkdGggKyAyMDAsIGNlbnRlclkgKyA2MCk7CiAgICAgICAgICAgIGdyYWRpZW50Mi5hZGRDb2xvclN0b3AoMCwgJyMwMDY2RkYnKTsKICAgICAgICAgICAgZ3JhZGllbnQyLmFkZENvbG9yU3RvcCgxLCAnIzAwRDlGRicpOwogICAgICAgICAgICBjdHguZmlsbFN0eWxlID0gZ3JhZGllbnQyOwogICAgICAgICAgICBjdHguZmlsbFRleHQoJ0FJJywgdGV4dFggKyBnb1dpZHRoICsgdm9XaWR0aCwgY2VudGVyWSArIDYwKTsKICAgICAgICAgICAgY29uc3QgYWlXaWR0aCA9IGN0eC5tZWFzdXJlVGV4dCgnQUknKS53aWR0aDsKICAgICAgICAgICAgCiAgICAgICAgICAgIGN0eC5maWxsU3R5bGUgPSB0ZXh0Q29sb3I7CiAgICAgICAgICAgIGN0eC5maWxsVGV4dCgnY2UnLCB0ZXh0WCArIGdvV2lkdGggKyB2b1dpZHRoICsgYWlXaWR0aCwgY2VudGVyWSArIDYwKTsKICAgICAgICAgICAgY29uc3QgY2VXaWR0aCA9IGN0eC5tZWFzdXJlVGV4dCgnY2UnKS53aWR0aDsKICAgICAgICAgICAgCiAgICAgICAgICAgIGN0eC5mb250ID0gJ2JvbGQgMTQwcHggLWFwcGxlLXN5c3RlbSwgQmxpbmtNYWNTeXN0ZW1Gb250LCAiU2Vnb2UgVUkiLCBBcmlhbCwgc2Fucy1zZXJpZic7CiAgICAgICAgICAgIGN0eC5maWxsVGV4dCgnQWknLCB0ZXh0WCArIGdvV2lkdGggKyB2b1dpZHRoICsgYWlXaWR0aCArIGNlV2lkdGggKyA0MCwgY2VudGVyWSArIDUwKTsKICAgICAgICAgICAgCiAgICAgICAgICAgIGN0eC5mb250ID0gJzUycHggLWFwcGxlLXN5c3RlbSwgQmxpbmtNYWNTeXN0ZW1Gb250LCAiU2Vnb2UgVUkiLCBBcmlhbCwgc2Fucy1zZXJpZic7CiAgICAgICAgICAgIGN0eC5maWxsU3R5bGUgPSB0ZXh0Q29sb3IgPT09ICcjRkZGRkZGJyA/ICdyZ2JhKDI1NSwyNTUsMjU1LDAuNyknIDogJ3JnYmEoMCwwLDAsMC42KSc7CiAgICAgICAgICAgIGN0eC5maWxsVGV4dCgnVGhlcmUgaXMgQUkgaW4gdGhlIHZvaWNlJywgdGV4dFgsIGNlbnRlclkgKyAxNTApOwogICAgICAgIH0KICAgICAgICAKICAgICAgICAvLyBEcmF3IGFsbCB2ZXJzaW9ucwogICAgICAgIGRyYXdWZXJzaW9uMSgndjEtd2hpdGUnLCAnI0ZGRkZGRicsICcjMDAwMDAwJyk7CiAgICAgICAgZHJhd1ZlcnNpb24xKCd2MS1ibGFjaycsICcjMDAwMDAwJywgJyNGRkZGRkYnKTsKICAgICAgICBkcmF3VmVyc2lvbjEoJ3YxLXRyYW5zcGFyZW50JywgJ3RyYW5zcGFyZW50JywgJyMwMDAwMDAnKTsKICAgICAgICAKICAgICAgICBkcmF3VmVyc2lvbjIoJ3YyLXdoaXRlJywgJyNGRkZGRkYnLCAnIzAwMDAwMCcpOwogICAgICAgIGRyYXdWZXJzaW9uMigndjItYmxhY2snLCAnIzAwMDAwMCcsICcjRkZGRkZGJyk7CiAgICAgICAgZHJhd1ZlcnNpb24yKCd2Mi10cmFuc3BhcmVudCcsICd0cmFuc3BhcmVudCcsICcjMDAwMDAwJyk7CiAgICAgICAgCiAgICAgICAgZHJhd1ZlcnNpb24zKCd2My13aGl0ZScsICcjRkZGRkZGJywgJyMwMDAwMDAnKTsKICAgICAgICBkcmF3VmVyc2lvbjMoJ3YzLWJsYWNrJywgJyMwMDAwMDAnLCAnI0ZGRkZGRicpOwogICAgICAgIGRyYXdWZXJzaW9uMygndjMtdHJhbnNwYXJlbnQnLCAndHJhbnNwYXJlbnQnLCAnIzAwMDAwMCcpOwogICAgICAgIAogICAgICAgIC8vIERvd25sb2FkIGZ1bmN0aW9uCiAgICAgICAgZnVuY3Rpb24gZG93bmxvYWQoY2FudmFzSWQsIGZpbGVuYW1lKSB7CiAgICAgICAgICAgIGNvbnN0IGNhbnZhcyA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGNhbnZhc0lkKTsKICAgICAgICAgICAgY29uc3QgbGluayA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2EnKTsKICAgICAgICAgICAgbGluay5kb3dubG9hZCA9IGZpbGVuYW1lOwogICAgICAgICAgICBsaW5rLmhyZWYgPSBjYW52YXMudG9EYXRhVVJMKCdpbWFnZS9wbmcnKTsKICAgICAgICAgICAgbGluay5jbGljaygpOwogICAgICAgIH0KICAgIDwvc2NyaXB0Pgo8L2JvZHk+CjwvaHRtbD4=","embed":""}
GoVoaice Ai Logo Designs
Version 1 - White Background
Version 1 - Black Background
Version 1 - Transparent
Version 2 - White Background
Version 2 - Black Background
Version 2 - Transparent
Version 3 - White Background
Version 3 - Black Background
Version 3 - Transparent
Brand Colors
Electric Blue
#0066FF
Vibrant Cyan
#00D9FF
{"js":"PCFET0NUWVBFIGh0bWw+CjxodG1sIGxhbmc9ImVuIj4KPGhlYWQ+CiAgICA8bWV0YSBjaGFyc2V0PSJVVEYtOCI+CiAgICA8bWV0YSBuYW1lPSJ2aWV3cG9ydCIgY29udGVudD0id2lkdGg9ZGV2aWNlLXdpZHRoLCBpbml0aWFsLXNjYWxlPTEuMCI+CiAgICA8dGl0bGU+R29Wb2FpY2UgQWkgTG9nb3M8L3RpdGxlPgogICAgPHN0eWxlPgogICAgICAgIGJvZHkgewogICAgICAgICAgICBtYXJnaW46IDA7CiAgICAgICAgICAgIHBhZGRpbmc6IDIwcHg7CiAgICAgICAgICAgIGZvbnQtZmFtaWx5OiAtYXBwbGUtc3lzdGVtLCBCbGlua01hY1N5c3RlbUZvbnQsICdTZWdvZSBVSScsIHNhbnMtc2VyaWY7CiAgICAgICAgICAgIGJhY2tncm91bmQ6ICNmNWY1ZjU7CiAgICAgICAgfQogICAgICAgIC5jb250YWluZXIgewogICAgICAgICAgICBtYXgtd2lkdGg6IDE0MDBweDsKICAgICAgICAgICAgbWFyZ2luOiAwIGF1dG87CiAgICAgICAgfQogICAgICAgIGgxIHsKICAgICAgICAgICAgdGV4dC1hbGlnbjogY2VudGVyOwogICAgICAgICAgICBjb2xvcjogIzMzMzsKICAgICAgICAgICAgbWFyZ2luLWJvdHRvbTogNDBweDsKICAgICAgICB9CiAgICAgICAgLmxvZ28tZ3JpZCB7CiAgICAgICAgICAgIGRpc3BsYXk6IGdyaWQ7CiAgICAgICAgICAgIGdyaWQtdGVtcGxhdGUtY29sdW1uczogcmVwZWF0KGF1dG8tZml0LCBtaW5tYXgoNDAwcHgsIDFmcikpOwogICAgICAgICAgICBnYXA6IDMwcHg7CiAgICAgICAgICAgIG1hcmdpbi1ib3R0b206IDQwcHg7CiAgICAgICAgfQogICAgICAgIC5sb2dvLWNhcmQgewogICAgICAgICAgICBiYWNrZ3JvdW5kOiB3aGl0ZTsKICAgICAgICAgICAgYm9yZGVyLXJhZGl1czogMTJweDsKICAgICAgICAgICAgcGFkZGluZzogMjBweDsKICAgICAgICAgICAgYm94LXNoYWRvdzogMCA0cHggNnB4IHJnYmEoMCwwLDAsMC4xKTsKICAgICAgICB9CiAgICAgICAgLmxvZ28tdGl0bGUgewogICAgICAgICAgICBmb250LXdlaWdodDogNjAwOwogICAgICAgICAgICBtYXJnaW4tYm90dG9tOiAxNXB4OwogICAgICAgICAgICBjb2xvcjogIzMzMzsKICAgICAgICAgICAgZm9udC1zaXplOiAxOHB4OwogICAgICAgIH0KICAgICAgICAubG9nby1wcmV2aWV3IHsKICAgICAgICAgICAgd2lkdGg6IDEwMCU7CiAgICAgICAgICAgIGJvcmRlcjogMXB4IHNvbGlkICNlMGUwZTA7CiAgICAgICAgICAgIGJvcmRlci1yYWRpdXM6IDhweDsKICAgICAgICAgICAgbWFyZ2luLWJvdHRvbTogMTVweDsKICAgICAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICAgICAgICAgICAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7CiAgICAgICAgICAgIHBhZGRpbmc6IDMwcHg7CiAgICAgICAgICAgIGJveC1zaXppbmc6IGJvcmRlci1ib3g7CiAgICAgICAgfQogICAgICAgIC53aGl0ZS1iZyB7IGJhY2tncm91bmQ6IHdoaXRlOyB9CiAgICAgICAgLmJsYWNrLWJnIHsgYmFja2dyb3VuZDogIzAwMDsgfQogICAgICAgIC50cmFuc3BhcmVudC1iZyB7IAogICAgICAgICAgICBiYWNrZ3JvdW5kOiAKICAgICAgICAgICAgICAgIGxpbmVhci1ncmFkaWVudCg0NWRlZywgI2UwZTBlMCAyNSUsIHRyYW5zcGFyZW50IDI1JSksCiAgICAgICAgICAgICAgICBsaW5lYXItZ3JhZGllbnQoLTQ1ZGVnLCAjZTBlMGUwIDI1JSwgdHJhbnNwYXJlbnQgMjUlKSwKICAgICAgICAgICAgICAgIGxpbmVhci1ncmFkaWVudCg0NWRlZywgdHJhbnNwYXJlbnQgNzUlLCAjZTBlMGUwIDc1JSksCiAgICAgICAgICAgICAgICBsaW5lYXItZ3JhZGllbnQoLTQ1ZGVnLCB0cmFuc3BhcmVudCA3NSUsICNlMGUwZTAgNzUlKTsKICAgICAgICAgICAgYmFja2dyb3VuZC1zaXplOiAyMHB4IDIwcHg7CiAgICAgICAgICAgIGJhY2tncm91bmQtcG9zaXRpb246IDAgMCwgMCAxMHB4LCAxMHB4IC0xMHB4LCAtMTBweCAwcHg7CiAgICAgICAgfQogICAgICAgIGNhbnZhcyB7CiAgICAgICAgICAgIG1heC13aWR0aDogMTAwJTsKICAgICAgICAgICAgaGVpZ2h0OiBhdXRvOwogICAgICAgIH0KICAgICAgICAuZG93bmxvYWQtYnRuIHsKICAgICAgICAgICAgd2lkdGg6IDEwMCU7CiAgICAgICAgICAgIHBhZGRpbmc6IDEycHg7CiAgICAgICAgICAgIGJhY2tncm91bmQ6ICMwMDY2ZmY7CiAgICAgICAgICAgIGNvbG9yOiB3aGl0ZTsKICAgICAgICAgICAgYm9yZGVyOiBub25lOwogICAgICAgICAgICBib3JkZXItcmFkaXVzOiA2cHg7CiAgICAgICAgICAgIGZvbnQtc2l6ZTogMTRweDsKICAgICAgICAgICAgZm9udC13ZWlnaHQ6IDYwMDsKICAgICAgICAgICAgY3Vyc29yOiBwb2ludGVyOwogICAgICAgICAgICB0cmFuc2l0aW9uOiBiYWNrZ3JvdW5kIDAuM3M7CiAgICAgICAgfQogICAgICAgIC5kb3dubG9hZC1idG46aG92ZXIgewogICAgICAgICAgICBiYWNrZ3JvdW5kOiAjMDA1MmNjOwogICAgICAgIH0KICAgICAgICAuY29sb3ItaW5mbyB7CiAgICAgICAgICAgIHRleHQtYWxpZ246IGNlbnRlcjsKICAgICAgICAgICAgbWFyZ2luLXRvcDogNDBweDsKICAgICAgICAgICAgcGFkZGluZzogMjBweDsKICAgICAgICAgICAgYmFja2dyb3VuZDogd2hpdGU7CiAgICAgICAgICAgIGJvcmRlci1yYWRpdXM6IDEycHg7CiAgICAgICAgICAgIGJveC1zaGFkb3c6IDAgNHB4IDZweCByZ2JhKDAsMCwwLDAuMSk7CiAgICAgICAgfQogICAgICAgIC5jb2xvci1zd2F0Y2hlcyB7CiAgICAgICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAgICAgIGp1c3RpZnktY29udGVudDogY2VudGVyOwogICAgICAgICAgICBnYXA6IDMwcHg7CiAgICAgICAgICAgIG1hcmdpbi10b3A6IDIwcHg7CiAgICAgICAgfQogICAgICAgIC5zd2F0Y2ggewogICAgICAgICAgICB0ZXh0LWFsaWduOiBjZW50ZXI7CiAgICAgICAgfQogICAgICAgIC5zd2F0Y2gtY29sb3IgewogICAgICAgICAgICB3aWR0aDogODBweDsKICAgICAgICAgICAgaGVpZ2h0OiA4MHB4OwogICAgICAgICAgICBib3JkZXItcmFkaXVzOiA4cHg7CiAgICAgICAgICAgIG1hcmdpbjogMCBhdXRvIDEwcHg7CiAgICAgICAgICAgIGJveC1zaGFkb3c6IDAgMnB4IDRweCByZ2JhKDAsMCwwLDAuMik7CiAgICAgICAgfQogICAgICAgIC5zd2F0Y2gtbmFtZSB7CiAgICAgICAgICAgIGZvbnQtd2VpZ2h0OiA2MDA7CiAgICAgICAgICAgIG1hcmdpbi1ib3R0b206IDVweDsKICAgICAgICB9CiAgICAgICAgLnN3YXRjaC1oZXggewogICAgICAgICAgICBmb250LWZhbWlseTogbW9ub3NwYWNlOwogICAgICAgICAgICBjb2xvcjogIzY2NjsKICAgICAgICB9CiAgICA8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgogICAgPGRpdiBjbGFzcz0iY29udGFpbmVyIj4KICAgICAgICA8aDE+R29Wb2FpY2UgQWkgTG9nbyBEZXNpZ25zPC9oMT4KICAgICAgICAKICAgICAgICA8IS0tIFZlcnNpb24gNCAtLT4KICAgICAgICA8ZGl2IGNsYXNzPSJsb2dvLWdyaWQiPgogICAgICAgICAgICA8ZGl2IGNsYXNzPSJsb2dvLWNhcmQiPgogICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0ibG9nby10aXRsZSI+VmVyc2lvbiA0IC0gV2hpdGUgQmFja2dyb3VuZDwvZGl2PgogICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0ibG9nby1wcmV2aWV3IHdoaXRlLWJnIj4KICAgICAgICAgICAgICAgICAgICA8Y2FudmFzIGlkPSJ2NC13aGl0ZSI+PC9jYW52YXM+CiAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgIDxidXR0b24gY2xhc3M9ImRvd25sb2FkLWJ0biIgb25jbGljaz0iZG93bmxvYWQoJ3Y0LXdoaXRlJywgJ0dvVm9haWNlX0FpX1Y0X1doaXRlLnBuZycpIj5Eb3dubG9hZCBQTkc8L2J1dHRvbj4KICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgIDxkaXYgY2xhc3M9ImxvZ28tY2FyZCI+CiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJsb2dvLXRpdGxlIj5WZXJzaW9uIDQgLSBCbGFjayBCYWNrZ3JvdW5kPC9kaXY+CiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJsb2dvLXByZXZpZXcgYmxhY2stYmciPgogICAgICAgICAgICAgICAgICAgIDxjYW52YXMgaWQ9InY0LWJsYWNrIj48L2NhbnZhcz4KICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz0iZG93bmxvYWQtYnRuIiBvbmNsaWNrPSJkb3dubG9hZCgndjQtYmxhY2snLCAnR29Wb2FpY2VfQWlfVjRfQmxhY2sucG5nJykiPkRvd25sb2FkIFBORzwvYnV0dG9uPgogICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgPGRpdiBjbGFzcz0ibG9nby1jYXJkIj4KICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImxvZ28tdGl0bGUiPlZlcnNpb24gNCAtIFRyYW5zcGFyZW50PC9kaXY+CiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJsb2dvLXByZXZpZXcgdHJhbnNwYXJlbnQtYmciPgogICAgICAgICAgICAgICAgICAgIDxjYW52YXMgaWQ9InY0LXRyYW5zcGFyZW50Ij48L2NhbnZhcz4KICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz0iZG93bmxvYWQtYnRuIiBvbmNsaWNrPSJkb3dubG9hZCgndjQtdHJhbnNwYXJlbnQnLCAnR29Wb2FpY2VfQWlfVjRfVHJhbnNwYXJlbnQucG5nJykiPkRvd25sb2FkIFBORzwvYnV0dG9uPgogICAgICAgICAgICA8L2Rpdj4KICAgICAgICA8L2Rpdj4KCiAgICAgICAgPCEtLSBWZXJzaW9uIDUgLS0+CiAgICAgICAgPGRpdiBjbGFzcz0ibG9nby1ncmlkIj4KICAgICAgICAgICAgPGRpdiBjbGFzcz0ibG9nby1jYXJkIj4KICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImxvZ28tdGl0bGUiPlZlcnNpb24gNSAtIFdoaXRlIEJhY2tncm91bmQ8L2Rpdj4KICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImxvZ28tcHJldmlldyB3aGl0ZS1iZyI+CiAgICAgICAgICAgICAgICAgICAgPGNhbnZhcyBpZD0idjUtd2hpdGUiPjwvY2FudmFzPgogICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICA8YnV0dG9uIGNsYXNzPSJkb3dubG9hZC1idG4iIG9uY2xpY2s9ImRvd25sb2FkKCd2NS13aGl0ZScsICdHb1ZvYWljZV9BaV9WNV9XaGl0ZS5wbmcnKSI+RG93bmxvYWQgUE5HPC9idXR0b24+CiAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICA8ZGl2IGNsYXNzPSJsb2dvLWNhcmQiPgogICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0ibG9nby10aXRsZSI+VmVyc2lvbiA1IC0gQmxhY2sgQmFja2dyb3VuZDwvZGl2PgogICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0ibG9nby1wcmV2aWV3IGJsYWNrLWJnIj4KICAgICAgICAgICAgICAgICAgICA8Y2FudmFzIGlkPSJ2NS1ibGFjayI+PC9jYW52YXM+CiAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgIDxidXR0b24gY2xhc3M9ImRvd25sb2FkLWJ0biIgb25jbGljaz0iZG93bmxvYWQoJ3Y1LWJsYWNrJywgJ0dvVm9haWNlX0FpX1Y1X0JsYWNrLnBuZycpIj5Eb3dubG9hZCBQTkc8L2J1dHRvbj4KICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgIDxkaXYgY2xhc3M9ImxvZ28tY2FyZCI+CiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJsb2dvLXRpdGxlIj5WZXJzaW9uIDUgLSBUcmFuc3BhcmVudDwvZGl2PgogICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0ibG9nby1wcmV2aWV3IHRyYW5zcGFyZW50LWJnIj4KICAgICAgICAgICAgICAgICAgICA8Y2FudmFzIGlkPSJ2NS10cmFuc3BhcmVudCI+PC9jYW52YXM+CiAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgIDxidXR0b24gY2xhc3M9ImRvd25sb2FkLWJ0biIgb25jbGljaz0iZG93bmxvYWQoJ3Y1LXRyYW5zcGFyZW50JywgJ0dvVm9haWNlX0FpX1Y1X1RyYW5zcGFyZW50LnBuZycpIj5Eb3dubG9hZCBQTkc8L2J1dHRvbj4KICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgPC9kaXY+CgogICAgICAgIDwhLS0gVmVyc2lvbiA2IC0tPgogICAgICAgIDxkaXYgY2xhc3M9ImxvZ28tZ3JpZCI+CiAgICAgICAgICAgIDxkaXYgY2xhc3M9ImxvZ28tY2FyZCI+CiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJsb2dvLXRpdGxlIj5WZXJzaW9uIDYgLSBXaGl0ZSBCYWNrZ3JvdW5kPC9kaXY+CiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJsb2dvLXByZXZpZXcgd2hpdGUtYmciPgogICAgICAgICAgICAgICAgICAgIDxjYW52YXMgaWQ9InY2LXdoaXRlIj48L2NhbnZhcz4KICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz0iZG93bmxvYWQtYnRuIiBvbmNsaWNrPSJkb3dubG9hZCgndjYtd2hpdGUnLCAnR29Wb2FpY2VfQWlfVjZfV2hpdGUucG5nJykiPkRvd25sb2FkIFBORzwvYnV0dG9uPgogICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgPGRpdiBjbGFzcz0ibG9nby1jYXJkIj4KICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImxvZ28tdGl0bGUiPlZlcnNpb24gNiAtIEJsYWNrIEJhY2tncm91bmQ8L2Rpdj4KICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImxvZ28tcHJldmlldyBibGFjay1iZyI+CiAgICAgICAgICAgICAgICAgICAgPGNhbnZhcyBpZD0idjYtYmxhY2siPjwvY2FudmFzPgogICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICA8YnV0dG9uIGNsYXNzPSJkb3dubG9hZC1idG4iIG9uY2xpY2s9ImRvd25sb2FkKCd2Ni1ibGFjaycsICdHb1ZvYWljZV9BaV9WNl9CbGFjay5wbmcnKSI+RG93bmxvYWQgUE5HPC9idXR0b24+CiAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICA8ZGl2IGNsYXNzPSJsb2dvLWNhcmQiPgogICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0ibG9nby10aXRsZSI+VmVyc2lvbiA2IC0gVHJhbnNwYXJlbnQ8L2Rpdj4KICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImxvZ28tcHJldmlldyB0cmFuc3BhcmVudC1iZyI+CiAgICAgICAgICAgICAgICAgICAgPGNhbnZhcyBpZD0idjYtdHJhbnNwYXJlbnQiPjwvY2FudmFzPgogICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICA8YnV0dG9uIGNsYXNzPSJkb3dubG9hZC1idG4iIG9uY2xpY2s9ImRvd25sb2FkKCd2Ni10cmFuc3BhcmVudCcsICdHb1ZvYWljZV9BaV9WNl9UcmFuc3BhcmVudC5wbmcnKSI+RG93bmxvYWQgUE5HPC9idXR0b24+CiAgICAgICAgICAgIDwvZGl2PgogICAgICAgIDwvZGl2PgoKICAgICAgICA8ZGl2IGNsYXNzPSJjb2xvci1pbmZvIj4KICAgICAgICAgICAgPGgyPkJyYW5kIENvbG9yczwvaDI+CiAgICAgICAgICAgIDxkaXYgY2xhc3M9ImNvbG9yLXN3YXRjaGVzIj4KICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InN3YXRjaCI+CiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0ic3dhdGNoLWNvbG9yIiBzdHlsZT0iYmFja2dyb3VuZDogIzAwNjZGRjsiPjwvZGl2PgogICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InN3YXRjaC1uYW1lIj5FbGVjdHJpYyBCbHVlPC9kaXY+CiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0ic3dhdGNoLWhleCI+IzAwNjZGRjwvZGl2PgogICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJzd2F0Y2giPgogICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InN3YXRjaC1jb2xvciIgc3R5bGU9ImJhY2tncm91bmQ6ICMwMEQ5RkY7Ij48L2Rpdj4KICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJzd2F0Y2gtbmFtZSI+VmlicmFudCBDeWFuPC9kaXY+CiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0ic3dhdGNoLWhleCI+IzAwRDlGRjwvZGl2PgogICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgIDwvZGl2PgogICAgICAgIDwvZGl2PgogICAgPC9kaXY+CgogICAgPHNjcmlwdD4KICAgICAgICBjb25zdCBXSURUSCA9IDI0MDA7CiAgICAgICAgY29uc3QgSEVJR0hUID0gODQwOwogICAgICAgIAogICAgICAgIC8vIFZlcnNpb24gNDogV2F2ZWZvcm0gd2l0aCBtaWNyb3Bob25lIGljb24KICAgICAgICBmdW5jdGlvbiBkcmF3VmVyc2lvbjQoY2FudmFzSWQsIGJnQ29sb3IsIHRleHRDb2xvcikgewogICAgICAgICAgICBjb25zdCBjYW52YXMgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChjYW52YXNJZCk7CiAgICAgICAgICAgIGNhbnZhcy53aWR0aCA9IFdJRFRIOwogICAgICAgICAgICBjYW52YXMuaGVpZ2h0ID0gSEVJR0hUOwogICAgICAgICAgICBjb25zdCBjdHggPSBjYW52YXMuZ2V0Q29udGV4dCgnMmQnKTsKICAgICAgICAgICAgCiAgICAgICAgICAgIGlmIChiZ0NvbG9yICE9PSAndHJhbnNwYXJlbnQnKSB7CiAgICAgICAgICAgICAgICBjdHguZmlsbFN0eWxlID0gYmdDb2xvcjsKICAgICAgICAgICAgICAgIGN0eC5maWxsUmVjdCgwLCAwLCBXSURUSCwgSEVJR0hUKTsKICAgICAgICAgICAgfQogICAgICAgICAgICAKICAgICAgICAgICAgY29uc3QgY2VudGVyWSA9IEhFSUdIVCAvIDI7CiAgICAgICAgICAgIGNvbnN0IGljb25YID0gMzAwOwogICAgICAgICAgICAKICAgICAgICAgICAgLy8gRHJhdyBjaXJjdWxhciB3YXZlZm9ybSBwYXR0ZXJuCiAgICAgICAgICAgIGNvbnN0IGNpcmNsZVJhZGl1cyA9IDE0MDsKICAgICAgICAgICAgY29uc3Qgd2F2ZUNvdW50ID0gMjQ7CiAgICAgICAgICAgIAogICAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHdhdmVDb3VudDsgaSsrKSB7CiAgICAgICAgICAgICAgICBjb25zdCBhbmdsZSA9IChNYXRoLlBJICogMiAqIGkpIC8gd2F2ZUNvdW50OwogICAgICAgICAgICAgICAgY29uc3Qgd2F2ZUhlaWdodCA9IDMwICsgTWF0aC5zaW4oaSAqIDAuOCkgKiAyNTsKICAgICAgICAgICAgICAgIGNvbnN0IHN0YXJ0UmFkaXVzID0gY2lyY2xlUmFkaXVzIC0gd2F2ZUhlaWdodCAvIDI7CiAgICAgICAgICAgICAgICBjb25zdCBlbmRSYWRpdXMgPSBjaXJjbGVSYWRpdXMgKyB3YXZlSGVpZ2h0IC8gMjsKICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgY29uc3QgeDEgPSBpY29uWCArIE1hdGguY29zKGFuZ2xlKSAqIHN0YXJ0UmFkaXVzOwogICAgICAgICAgICAgICAgY29uc3QgeTEgPSBjZW50ZXJZICsgTWF0aC5zaW4oYW5nbGUpICogc3RhcnRSYWRpdXM7CiAgICAgICAgICAgICAgICBjb25zdCB4MiA9IGljb25YICsgTWF0aC5jb3MoYW5nbGUpICogZW5kUmFkaXVzOwogICAgICAgICAgICAgICAgY29uc3QgeTIgPSBjZW50ZXJZICsgTWF0aC5zaW4oYW5nbGUpICogZW5kUmFkaXVzOwogICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICBjb25zdCBncmFkaWVudCA9IGN0eC5jcmVhdGVMaW5lYXJHcmFkaWVudCh4MSwgeTEsIHgyLCB5Mik7CiAgICAgICAgICAgICAgICBncmFkaWVudC5hZGRDb2xvclN0b3AoMCwgJyMwMDY2RkYnKTsKICAgICAgICAgICAgICAgIGdyYWRpZW50LmFkZENvbG9yU3RvcCgxLCAnIzAwRDlGRicpOwogICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICBjdHguc3Ryb2tlU3R5bGUgPSBncmFkaWVudDsKICAgICAgICAgICAgICAgIGN0eC5saW5lV2lkdGggPSAxNDsKICAgICAgICAgICAgICAgIGN0eC5saW5lQ2FwID0gJ3JvdW5kJzsKICAgICAgICAgICAgICAgIGN0eC5iZWdpblBhdGgoKTsKICAgICAgICAgICAgICAgIGN0eC5tb3ZlVG8oeDEsIHkxKTsKICAgICAgICAgICAgICAgIGN0eC5saW5lVG8oeDIsIHkyKTsKICAgICAgICAgICAgICAgIGN0eC5zdHJva2UoKTsKICAgICAgICAgICAgfQogICAgICAgICAgICAKICAgICAgICAgICAgLy8gQ2VudGVyIG1pY3JvcGhvbmUKICAgICAgICAgICAgY29uc3QgbWljVyA9IDUwOwogICAgICAgICAgICBjb25zdCBtaWNIID0gNzA7CiAgICAgICAgICAgIGNvbnN0IG1pY1ggPSBpY29uWCAtIG1pY1cgLyAyOwogICAgICAgICAgICBjb25zdCBtaWNZID0gY2VudGVyWSAtIG1pY0ggLyAyIC0gMTA7CiAgICAgICAgICAgIAogICAgICAgICAgICBjb25zdCBtaWNHcmFkaWVudCA9IGN0eC5jcmVhdGVMaW5lYXJHcmFkaWVudChtaWNYLCBtaWNZLCBtaWNYLCBtaWNZICsgbWljSCk7CiAgICAgICAgICAgIG1pY0dyYWRpZW50LmFkZENvbG9yU3RvcCgwLCAnIzAwRDlGRicpOwogICAgICAgICAgICBtaWNHcmFkaWVudC5hZGRDb2xvclN0b3AoMSwgJyMwMDY2RkYnKTsKICAgICAgICAgICAgCiAgICAgICAgICAgIGN0eC5maWxsU3R5bGUgPSBtaWNHcmFkaWVudDsKICAgICAgICAgICAgY3R4LmJlZ2luUGF0aCgpOwogICAgICAgICAgICBjdHgucm91bmRSZWN0KG1pY1gsIG1pY1ksIG1pY1csIG1pY0gsIDI1KTsKICAgICAgICAgICAgY3R4LmZpbGwoKTsKICAgICAgICAgICAgCiAgICAgICAgICAgIC8vIE1pYyBzdGFuZAogICAgICAgICAgICBjdHguc3Ryb2tlU3R5bGUgPSAnIzAwNjZGRic7CiAgICAgICAgICAgIGN0eC5saW5lV2lkdGggPSAxMDsKICAgICAgICAgICAgY3R4LmxpbmVDYXAgPSAncm91bmQnOwogICAgICAgICAgICBjdHguYmVnaW5QYXRoKCk7CiAgICAgICAgICAgIGN0eC5tb3ZlVG8oaWNvblgsIG1pY1kgKyBtaWNIKTsKICAgICAgICAgICAgY3R4LmxpbmVUbyhpY29uWCwgbWljWSArIG1pY0ggKyAyNSk7CiAgICAgICAgICAgIGN0eC5zdHJva2UoKTsKICAgICAgICAgICAgCiAgICAgICAgICAgIGN0eC5iZWdpblBhdGgoKTsKICAgICAgICAgICAgY3R4Lm1vdmVUbyhpY29uWCAtIDIwLCBtaWNZICsgbWljSCArIDI1KTsKICAgICAgICAgICAgY3R4LmxpbmVUbyhpY29uWCArIDIwLCBtaWNZICsgbWljSCArIDI1KTsKICAgICAgICAgICAgY3R4LnN0cm9rZSgpOwogICAgICAgICAgICAKICAgICAgICAgICAgLy8gVGV4dAogICAgICAgICAgICBjb25zdCB0ZXh0WCA9IGljb25YICsgMjQwOwogICAgICAgICAgICBjdHguZm9udCA9ICdib2xkIDE4MHB4IC1hcHBsZS1zeXN0ZW0sIEJsaW5rTWFjU3lzdGVtRm9udCwgIlNlZ29lIFVJIiwgQXJpYWwsIHNhbnMtc2VyaWYnOwogICAgICAgICAgICAKICAgICAgICAgICAgY3R4LmZpbGxTdHlsZSA9IHRleHRDb2xvcjsKICAgICAgICAgICAgY3R4LmZpbGxUZXh0KCdHbycsIHRleHRYLCBjZW50ZXJZICsgNjApOwogICAgICAgICAgICBjb25zdCBnb1dpZHRoID0gY3R4Lm1lYXN1cmVUZXh0KCdHbycpLndpZHRoOwogICAgICAgICAgICAKICAgICAgICAgICAgY3R4LmZpbGxUZXh0KCdWbycsIHRleHRYICsgZ29XaWR0aCwgY2VudGVyWSArIDYwKTsKICAgICAgICAgICAgY29uc3Qgdm9XaWR0aCA9IGN0eC5tZWFzdXJlVGV4dCgnVm8nKS53aWR0aDsKICAgICAgICAgICAgCiAgICAgICAgICAgIGNvbnN0IGdyYWRpZW50MiA9IGN0eC5jcmVhdGVMaW5lYXJHcmFkaWVudCh0ZXh0WCArIGdvV2lkdGggKyB2b1dpZHRoLCBjZW50ZXJZIC0gNjAsIHRleHRYICsgZ29XaWR0aCArIHZvV2lkdGggKyAyMDAsIGNlbnRlclkgKyA2MCk7CiAgICAgICAgICAgIGdyYWRpZW50Mi5hZGRDb2xvclN0b3AoMCwgJyMwMDY2RkYnKTsKICAgICAgICAgICAgZ3JhZGllbnQyLmFkZENvbG9yU3RvcCgxLCAnIzAwRDlGRicpOwogICAgICAgICAgICBjdHguZmlsbFN0eWxlID0gZ3JhZGllbnQyOwogICAgICAgICAgICBjdHguZmlsbFRleHQoJ0FJJywgdGV4dFggKyBnb1dpZHRoICsgdm9XaWR0aCwgY2VudGVyWSArIDYwKTsKICAgICAgICAgICAgY29uc3QgYWlXaWR0aCA9IGN0eC5tZWFzdXJlVGV4dCgnQUknKS53aWR0aDsKICAgICAgICAgICAgCiAgICAgICAgICAgIGN0eC5maWxsU3R5bGUgPSB0ZXh0Q29sb3I7CiAgICAgICAgICAgIGN0eC5maWxsVGV4dCgnY2UnLCB0ZXh0WCArIGdvV2lkdGggKyB2b1dpZHRoICsgYWlXaWR0aCwgY2VudGVyWSArIDYwKTsKICAgICAgICAgICAgY29uc3QgY2VXaWR0aCA9IGN0eC5tZWFzdXJlVGV4dCgnY2UnKS53aWR0aDsKICAgICAgICAgICAgCiAgICAgICAgICAgIGN0eC5mb250ID0gJ2JvbGQgMTQwcHggLWFwcGxlLXN5c3RlbSwgQmxpbmtNYWNTeXN0ZW1Gb250LCAiU2Vnb2UgVUkiLCBBcmlhbCwgc2Fucy1zZXJpZic7CiAgICAgICAgICAgIGN0eC5maWxsVGV4dCgnQWknLCB0ZXh0WCArIGdvV2lkdGggKyB2b1dpZHRoICsgYWlXaWR0aCArIGNlV2lkdGggKyA0MCwgY2VudGVyWSArIDUwKTsKICAgICAgICAgICAgCiAgICAgICAgICAgIGN0eC5mb250ID0gJzUycHggLWFwcGxlLXN5c3RlbSwgQmxpbmtNYWNTeXN0ZW1Gb250LCAiU2Vnb2UgVUkiLCBBcmlhbCwgc2Fucy1zZXJpZic7CiAgICAgICAgICAgIGN0eC5maWxsU3R5bGUgPSB0ZXh0Q29sb3IgPT09ICcjRkZGRkZGJyA/ICdyZ2JhKDI1NSwyNTUsMjU1LDAuNyknIDogJ3JnYmEoMCwwLDAsMC42KSc7CiAgICAgICAgICAgIGN0eC5maWxsVGV4dCgnVGhlIEFJIGlzIGluIHRoZSB2b2ljZScsIHRleHRYLCBjZW50ZXJZICsgMTUwKTsKICAgICAgICB9CiAgICAgICAgCiAgICAgICAgLy8gVmVyc2lvbiA1OiBTcGVlY2ggYnViYmxlIHdpdGggQUkgY2hpcAogICAgICAgIGZ1bmN0aW9uIGRyYXdWZXJzaW9uNShjYW52YXNJZCwgYmdDb2xvciwgdGV4dENvbG9yKSB7CiAgICAgICAgICAgIGNvbnN0IGNhbnZhcyA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGNhbnZhc0lkKTsKICAgICAgICAgICAgY2FudmFzLndpZHRoID0gV0lEVEg7CiAgICAgICAgICAgIGNhbnZhcy5oZWlnaHQgPSBIRUlHSFQ7CiAgICAgICAgICAgIGNvbnN0IGN0eCA9IGNhbnZhcy5nZXRDb250ZXh0KCcyZCcpOwogICAgICAgICAgICAKICAgICAgICAgICAgaWYgKGJnQ29sb3IgIT09ICd0cmFuc3BhcmVudCcpIHsKICAgICAgICAgICAgICAgIGN0eC5maWxsU3R5bGUgPSBiZ0NvbG9yOwogICAgICAgICAgICAgICAgY3R4LmZpbGxSZWN0KDAsIDAsIFdJRFRILCBIRUlHSFQpOwogICAgICAgICAgICB9CiAgICAgICAgICAgIAogICAgICAgICAgICBjb25zdCBjZW50ZXJZID0gSEVJR0hUIC8gMjsKICAgICAgICAgICAgY29uc3QgaWNvblggPSAzMDA7CiAgICAgICAgICAgIAogICAgICAgICAgICAvLyBEcmF3IHNwZWVjaCBidWJibGUKICAgICAgICAgICAgY29uc3QgYnViYmxlVyA9IDIyMDsKICAgICAgICAgICAgY29uc3QgYnViYmxlSCA9IDE4MDsKICAgICAgICAgICAgY29uc3QgYnViYmxlWCA9IGljb25YIC0gYnViYmxlVyAvIDI7CiAgICAgICAgICAgIGNvbnN0IGJ1YmJsZVkgPSBjZW50ZXJZIC0gYnViYmxlSCAvIDIgLSAyMDsKICAgICAgICAgICAgCiAgICAgICAgICAgIGNvbnN0IGJ1YmJsZUdyYWRpZW50ID0gY3R4LmNyZWF0ZUxpbmVhckdyYWRpZW50KGJ1YmJsZVgsIGJ1YmJsZVksIGJ1YmJsZVggKyBidWJibGVXLCBidWJibGVZICsgYnViYmxlSCk7CiAgICAgICAgICAgIGJ1YmJsZUdyYWRpZW50LmFkZENvbG9yU3RvcCgwLCAnIzAwNjZGRicpOwogICAgICAgICAgICBidWJibGVHcmFkaWVudC5hZGRDb2xvclN0b3AoMSwgJyMwMEQ5RkYnKTsKICAgICAgICAgICAgCiAgICAgICAgICAgIGN0eC5maWxsU3R5bGUgPSBidWJibGVHcmFkaWVudDsKICAgICAgICAgICAgY3R4LmJlZ2luUGF0aCgpOwogICAgICAgICAgICBjdHgucm91bmRSZWN0KGJ1YmJsZVgsIGJ1YmJsZVksIGJ1YmJsZVcsIGJ1YmJsZUgsIDMwKTsKICAgICAgICAgICAgY3R4LmZpbGwoKTsKICAgICAgICAgICAgCiAgICAgICAgICAgIC8vIFNwZWVjaCBidWJibGUgdGFpbAogICAgICAgICAgICBjdHguYmVnaW5QYXRoKCk7CiAgICAgICAgICAgIGN0eC5tb3ZlVG8oaWNvblggLSAzMCwgYnViYmxlWSArIGJ1YmJsZUgpOwogICAgICAgICAgICBjdHgubGluZVRvKGljb25YIC0gNTAsIGJ1YmJsZVkgKyBidWJibGVIICsgNDApOwogICAgICAgICAgICBjdHgubGluZVRvKGljb25YICsgMTAsIGJ1YmJsZVkgKyBidWJibGVIKTsKICAgICAgICAgICAgY3R4LmNsb3NlUGF0aCgpOwogICAgICAgICAgICBjdHguZmlsbCgpOwogICAgICAgICAgICAKICAgICAgICAgICAgLy8gQUkgY2hpcCBpbnNpZGUgYnViYmxlCiAgICAgICAgICAgIGNvbnN0IGNoaXBTaXplID0gODA7CiAgICAgICAgICAgIGNvbnN0IGNoaXBYID0gaWNvblggLSBjaGlwU2l6ZSAvIDI7CiAgICAgICAgICAgIGNvbnN0IGNoaXBZID0gY2VudGVyWSAtIGNoaXBTaXplIC8gMiAtIDIwOwogICAgICAgICAgICAKICAgICAgICAgICAgY3R4LmZpbGxTdHlsZSA9IGJnQ29sb3IgPT09ICcjMDAwMDAwJyA/ICdyZ2JhKDAsMCwwLDAuMyknIDogJ3JnYmEoMjU1LDI1NSwyNTUsMC4zKSc7CiAgICAgICAgICAgIGN0eC5iZWdpblBhdGgoKTsKICAgICAgICAgICAgY3R4LnJvdW5kUmVjdChjaGlwWCwgY2hpcFksIGNoaXBTaXplLCBjaGlwU2l6ZSwgOCk7CiAgICAgICAgICAgIGN0eC5maWxsKCk7CiAgICAgICAgICAgIAogICAgICAgICAgICAvLyBDaGlwIGRldGFpbHMKICAgICAgICAgICAgY3R4LnN0cm9rZVN0eWxlID0gYmdDb2xvciA9PT0gJyMwMDAwMDAnID8gJ3JnYmEoMCwwLDAsMC41KScgOiAncmdiYSgyNTUsMjU1LDI1NSwwLjUpJzsKICAgICAgICAgICAgY3R4LmxpbmVXaWR0aCA9IDM7CiAgICAgICAgICAgIAogICAgICAgICAgICAvLyBIb3Jpem9udGFsIGxpbmVzCiAgICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgMzsgaSsrKSB7CiAgICAgICAgICAgICAgICBjb25zdCB5ID0gY2hpcFkgKyAyMCArIGkgKiAyMDsKICAgICAgICAgICAgICAgIGN0eC5iZWdpblBhdGgoKTsKICAgICAgICAgICAgICAgIGN0eC5tb3ZlVG8oY2hpcFggKyAxNSwgeSk7CiAgICAgICAgICAgICAgICBjdHgubGluZVRvKGNoaXBYICsgY2hpcFNpemUgLSAxNSwgeSk7CiAgICAgICAgICAgICAgICBjdHguc3Ryb2tlKCk7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgCiAgICAgICAgICAgIC8vIENoaXAgcGlucwogICAgICAgICAgICBjdHgubGluZVdpZHRoID0gNDsKICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCA0OyBpKyspIHsKICAgICAgICAgICAgICAgIGNvbnN0IHkgPSBjaGlwWSArIDE1ICsgaSAqIDIwOwogICAgICAgICAgICAgICAgLy8gTGVmdCBwaW5zCiAgICAgICAgICAgICAgICBjdHguYmVnaW5QYXRoKCk7CiAgICAgICAgICAgICAgICBjdHgubW92ZVRvKGNoaXBYIC0gMTAsIHkpOwogICAgICAgICAgICAgICAgY3R4LmxpbmVUbyhjaGlwWCwgeSk7CiAgICAgICAgICAgICAgICBjdHguc3Ryb2tlKCk7CiAgICAgICAgICAgICAgICAvLyBSaWdodCBwaW5zCiAgICAgICAgICAgICAgICBjdHguYmVnaW5QYXRoKCk7CiAgICAgICAgICAgICAgICBjdHgubW92ZVRvKGNoaXBYICsgY2hpcFNpemUsIHkpOwogICAgICAgICAgICAgICAgY3R4LmxpbmVUbyhjaGlwWCArIGNoaXBTaXplICsgMTAsIHkpOwogICAgICAgICAgICAgICAgY3R4LnN0cm9rZSgpOwogICAgICAgICAgICB9CiAgICAgICAgICAgIAogICAgICAgICAgICAvLyBUZXh0CiAgICAgICAgICAgIGNvbnN0IHRleHRYID0gaWNvblggKyAyMzA7CiAgICAgICAgICAgIGN0eC5mb250ID0gJ2JvbGQgMTgwcHggLWFwcGxlLXN5c3RlbSwgQmxpbmtNYWNTeXN0ZW1Gb250LCAiU2Vnb2UgVUkiLCBBcmlhbCwgc2Fucy1zZXJpZic7CiAgICAgICAgICAgIAogICAgICAgICAgICBjdHguZmlsbFN0eWxlID0gdGV4dENvbG9yOwogICAgICAgICAgICBjdHguZmlsbFRleHQoJ0dvJywgdGV4dFgsIGNlbnRlclkgKyA2MCk7CiAgICAgICAgICAgIGNvbnN0IGdvV2lkdGggPSBjdHgubWVhc3VyZVRleHQoJ0dvJykud2lkdGg7CiAgICAgICAgICAgIAogICAgICAgICAgICBjdHguZmlsbFRleHQoJ1ZvJywgdGV4dFggKyBnb1dpZHRoLCBjZW50ZXJZICsgNjApOwogICAgICAgICAgICBjb25zdCB2b1dpZHRoID0gY3R4Lm1lYXN1cmVUZXh0KCdWbycpLndpZHRoOwogICAgICAgICAgICAKICAgICAgICAgICAgY29uc3QgZ3JhZGllbnQyID0gY3R4LmNyZWF0ZUxpbmVhckdyYWRpZW50KHRleHRYICsgZ29XaWR0aCArIHZvV2lkdGgsIGNlbnRlclkgLSA2MCwgdGV4dFggKyBnb1dpZHRoICsgdm9XaWR0aCArIDIwMCwgY2VudGVyWSArIDYwKTsKICAgICAgICAgICAgZ3JhZGllbnQyLmFkZENvbG9yU3RvcCgwLCAnIzAwNjZGRicpOwogICAgICAgICAgICBncmFkaWVudDIuYWRkQ29sb3JTdG9wKDEsICcjMDBEOUZGJyk7CiAgICAgICAgICAgIGN0eC5maWxsU3R5bGUgPSBncmFkaWVudDI7CiAgICAgICAgICAgIGN0eC5maWxsVGV4dCgnQUknLCB0ZXh0WCArIGdvV2lkdGggKyB2b1dpZHRoLCBjZW50ZXJZICsgNjApOwogICAgICAgICAgICBjb25zdCBhaVdpZHRoID0gY3R4Lm1lYXN1cmVUZXh0KCdBSScpLndpZHRoOwogICAgICAgICAgICAKICAgICAgICAgICAgY3R4LmZpbGxTdHlsZSA9IHRleHRDb2xvcjsKICAgICAgICAgICAgY3R4LmZpbGxUZXh0KCdjZScsIHRleHRYICsgZ29XaWR0aCArIHZvV2lkdGggKyBhaVdpZHRoLCBjZW50ZXJZICsgNjApOwogICAgICAgICAgICBjb25zdCBjZVdpZHRoID0gY3R4Lm1lYXN1cmVUZXh0KCdjZScpLndpZHRoOwogICAgICAgICAgICAKICAgICAgICAgICAgY3R4LmZvbnQgPSAnYm9sZCAxNDBweCAtYXBwbGUtc3lzdGVtLCBCbGlua01hY1N5c3RlbUZvbnQsICJTZWdvZSBVSSIsIEFyaWFsLCBzYW5zLXNlcmlmJzsKICAgICAgICAgICAgY3R4LmZpbGxUZXh0KCdBaScsIHRleHRYICsgZ29XaWR0aCArIHZvV2lkdGggKyBhaVdpZHRoICsgY2VXaWR0aCArIDQwLCBjZW50ZXJZICsgNTApOwogICAgICAgICAgICAKICAgICAgICAgICAgY3R4LmZvbnQgPSAnNTJweCAtYXBwbGUtc3lzdGVtLCBCbGlua01hY1N5c3RlbUZvbnQsICJTZWdvZSBVSSIsIEFyaWFsLCBzYW5zLXNlcmlmJzsKICAgICAgICAgICAgY3R4LmZpbGxTdHlsZSA9IHRleHRDb2xvciA9PT0gJyNGRkZGRkYnID8gJ3JnYmEoMjU1LDI1NSwyNTUsMC43KScgOiAncmdiYSgwLDAsMCwwLjYpJzsKICAgICAgICAgICAgY3R4LmZpbGxUZXh0KCdUaGUgQUkgaXMgaW4gdGhlIHZvaWNlJywgdGV4dFgsIGNlbnRlclkgKyAxNTApOwogICAgICAgIH0KICAgICAgICAKICAgICAgICAvLyBWZXJzaW9uIDY6IEhleGFnb25hbCB0ZWNoIHBhdHRlcm4KICAgICAgICBmdW5jdGlvbiBkcmF3VmVyc2lvbjYoY2FudmFzSWQsIGJnQ29sb3IsIHRleHRDb2xvcikgewogICAgICAgICAgICBjb25zdCBjYW52YXMgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChjYW52YXNJZCk7CiAgICAgICAgICAgIGNhbnZhcy53aWR0aCA9IFdJRFRIOwogICAgICAgICAgICBjYW52YXMuaGVpZ2h0ID0gSEVJR0hUOwogICAgICAgICAgICBjb25zdCBjdHggPSBjYW52YXMuZ2V0Q29udGV4dCgnMmQnKTsKICAgICAgICAgICAgCiAgICAgICAgICAgIGlmIChiZ0NvbG9yICE9PSAndHJhbnNwYXJlbnQnKSB7CiAgICAgICAgICAgICAgICBjdHguZmlsbFN0eWxlID0gYmdDb2xvcjsKICAgICAgICAgICAgICAgIGN0eC5maWxsUmVjdCgwLCAwLCBXSURUSCwgSEVJR0hUKTsKICAgICAgICAgICAgfQogICAgICAgICAgICAKICAgICAgICAgICAgY29uc3QgY2VudGVyWSA9IEhFSUdIVCAvIDI7CiAgICAgICAgICAgIGNvbnN0IGljb25YID0gMzAwOwogICAgICAgICAgICAKICAgICAgICAgICAgLy8gRHJhdyBoZXhhZ29uYWwgcGF0dGVybgogICAgICAgICAgICBjb25zdCBoZXhTaXplID0gNDU7CiAgICAgICAgICAgIGNvbnN0IGhleGFnb25zID0gWwogICAgICAgICAgICAgICAge3g6IDAsIHk6IDAsIHNjYWxlOiAxLjJ9LAogICAgICAgICAgICAgICAge3g6IC04MCwgeTogMCwgc2NhbGU6IDAuOH0sCiAgICAgICAgICAgICAgICB7eDogODAsIHk6IDAsIHNjYWxlOiAwLjh9LAogICAgICAgICAgICAgICAge3g6IC00MCwgeTogLTcwLCBzY2FsZTogMC44fSwKICAgICAgICAgICAgICAgIHt4OiA0MCwgeTogLTcwLCBzY2FsZTogMC44fSwKICAgICAgICAgICAgICAgIHt4OiAtNDAsIHk6IDcwLCBzY2FsZTogMC44fSwKICAgICAgICAgICAgICAgIHt4OiA0MCwgeTogNzAsIHNjYWxlOiAwLjh9CiAgICAgICAgICAgIF07CiAgICAgICAgICAgIAogICAgICAgICAgICBmdW5jdGlvbiBkcmF3SGV4YWdvbih4LCB5LCBzaXplLCBmaWxsU3R5bGUpIHsKICAgICAgICAgICAgICAgIGN0eC5iZWdpblBhdGgoKTsKICAgICAgICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgNjsgaSsrKSB7CiAgICAgICAgICAgICAgICAgICAgY29uc3QgYW5nbGUgPSAoTWF0aC5QSSAvIDMpICogaTsKICAgICAgICAgICAgICAgICAgICBjb25zdCBweCA9IHggKyBzaXplICogTWF0aC5jb3MoYW5nbGUpOwogICAgICAgICAgICAgICAgICAgIGNvbnN0IHB5ID0geSArIHNpemUgKiBNYXRoLnNpbihhbmdsZSk7CiAgICAgICAgICAgICAgICAgICAgaWYgKGkgPT09IDApIGN0eC5tb3ZlVG8ocHgsIHB5KTsKICAgICAgICAgICAgICAgICAgICBlbHNlIGN0eC5saW5lVG8ocHgsIHB5KTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIGN0eC5jbG9zZVBhdGgoKTsKICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgaWYgKGZpbGxTdHlsZSkgewogICAgICAgICAgICAgICAgICAgIGN0eC5maWxsU3R5bGUgPSBmaWxsU3R5bGU7CiAgICAgICAgICAgICAgICAgICAgY3R4LmZpbGwoKTsKICAgICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgY3R4LnN0cm9rZSgpOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgICAgIAogICAgICAgICAgICBoZXhhZ29ucy5mb3JFYWNoKChoZXgsIGkpID0+IHsKICAgICAgICAgICAgICAgIGNvbnN0IHggPSBpY29uWCArIGhleC54OwogICAgICAgICAgICAgICAgY29uc3QgeSA9IGNlbnRlclkgKyBoZXgueTsKICAgICAgICAgICAgICAgIGNvbnN0IHNpemUgPSBoZXhTaXplICogaGV4LnNjYWxlOwogICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICBpZiAoaSA9PT0gMCkgewogICAgICAgICAgICAgICAgICAgIC8vIENlbnRlciBoZXhhZ29uIC0gZmlsbGVkCiAgICAgICAgICAgICAgICAgICAgY29uc3QgZ3JhZGllbnQgPSBjdHguY3JlYXRlUmFkaWFsR3JhZGllbnQoeCwgeSwgMCwgeCwgeSwgc2l6ZSk7CiAgICAgICAgICAgICAgICAgICAgZ3JhZGllbnQuYWRkQ29sb3JTdG9wKDAsICcjMDBEOUZGJyk7CiAgICAgICAgICAgICAgICAgICAgZ3JhZGllbnQuYWRkQ29sb3JTdG9wKDEsICcjMDA2NkZGJyk7CiAgICAgICAgICAgICAgICAgICAgZHJhd0hleGFnb24oeCwgeSwgc2l6ZSwgZ3JhZGllbnQpOwogICAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAvLyBPdXRlciBoZXhhZ29ucyAtIHN0cm9rZWQKICAgICAgICAgICAgICAgICAgICBjb25zdCBzdHJva2VHcmFkaWVudCA9IGN0eC5jcmVhdGVMaW5lYXJHcmFkaWVudCh4IC0gc2l6ZSwgeSAtIHNpemUsIHggKyBzaXplLCB5ICsgc2l6ZSk7CiAgICAgICAgICAgICAgICAgICAgc3Ryb2tlR3JhZGllbnQuYWRkQ29sb3JTdG9wKDAsICcjMDA2NkZGJyk7CiAgICAgICAgICAgICAgICAgICAgc3Ryb2tlR3JhZGllbnQuYWRkQ29sb3JTdG9wKDEsICcjMDBEOUZGJyk7CiAgICAgICAgICAgICAgICAgICAgY3R4LnN0cm9rZVN0eWxlID0gc3Ryb2tlR3JhZGllbnQ7CiAgICAgICAgICAgICAgICAgICAgY3R4LmxpbmVXaWR0aCA9IDEyOwogICAgICAgICAgICAgICAgICAgIGRyYXdIZXhhZ29uKHgsIHksIHNpemUsIG51bGwpOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9KTsKICAgICAgICAgICAgCiAgICAgICAgICAgIC8vIENvbm5lY3Rpb24gbGluZXMKICAgICAgICAgICAgY3R4LnN0cm9rZVN0eWxlID0gJyMwMDg4RkYnOwogICAgICAgICAgICBjdHgubGluZVdpZHRoID0gNjsKICAgICAgICAgICAgY3R4Lmdsb2JhbEFscGhhID0gMC40OwogICAgICAgICAgICAKICAgICAgICAgICAgY29uc3QgY29ubmVjdGlvbnMgPSBbCiAgICAgICAgICAgICAgICBbMCwgMV0sIFswLCAyXSwgWzAsIDNdLCBbMCwgNF0sIFswLCA1XSwgWzAsIDZdCiAgICAgICAgICAgIF07CiAgICAgICAgICAgIAogICAgICAgICAgICBjb25uZWN0aW9ucy5mb3JFYWNoKChbYSwgYl0pID0+IHsKICAgICAgICAgICAgICAgIGNvbnN0IHgxID0gaWNvblggKyBoZXhhZ29uc1thXS54OwogICAgICAgICAgICAgICAgY29uc3QgeTEgPSBjZW50ZXJZICsgaGV4YWdvbnNbYV0ueTsKICAgICAgICAgICAgICAgIGNvbnN0IHgyID0gaWNvblggKyBoZXhhZ29uc1tiXS54OwogICAgICAgICAgICAgICAgY29uc3QgeTIgPSBjZW50ZXJZICsgaGV4YWdvbnNbYl0ueTsKICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgY3R4LmJlZ2luUGF0aCgpOwogICAgICAgICAgICAgICAgY3R4Lm1vdmVUbyh4MSwgeTEpOwogICAgICAgICAgICAgICAgY3R4LmxpbmVUbyh4MiwgeTIpOwogICAgICAgICAgICAgICAgY3R4LnN0cm9rZSgpOwogICAgICAgICAgICB9KTsKICAgICAgICAgICAgY3R4Lmdsb2JhbEFscGhhID0gMTsKICAgICAgICAgICAgCiAgICAgICAgICAgIC8vIFRleHQKICAgICAgICAgICAgY29uc3QgdGV4dFggPSBpY29uWCArIDIyMDsKICAgICAgICAgICAgY3R4LmZvbnQgPSAnYm9sZCAxODBweCAtYXBwbGUtc3lzdGVtLCBCbGlua01hY1N5c3RlbUZvbnQsICJTZWdvZSBVSSIsIEFyaWFsLCBzYW5zLXNlcmlmJzsKICAgICAgICAgICAgCiAgICAgICAgICAgIGN0eC5maWxsU3R5bGUgPSB0ZXh0Q29sb3I7CiAgICAgICAgICAgIGN0eC5maWxsVGV4dCgnR28nLCB0ZXh0WCwgY2VudGVyWSArIDYwKTsKICAgICAgICAgICAgY29uc3QgZ29XaWR0aCA9IGN0eC5tZWFzdXJlVGV4dCgnR28nKS53aWR0aDsKICAgICAgICAgICAgCiAgICAgICAgICAgIGN0eC5maWxsVGV4dCgnVm8nLCB0ZXh0WCArIGdvV2lkdGgsIGNlbnRlclkgKyA2MCk7CiAgICAgICAgICAgIGNvbnN0IHZvV2lkdGggPSBjdHgubWVhc3VyZVRleHQoJ1ZvJykud2lkdGg7CiAgICAgICAgICAgIAogICAgICAgICAgICBjb25zdCBncmFkaWVudDIgPSBjdHguY3JlYXRlTGluZWFyR3JhZGllbnQodGV4dFggKyBnb1dpZHRoICsgdm9XaWR0aCwgY2VudGVyWSAtIDYwLCB0ZXh0WCArIGdvV2lkdGggKyB2b1dpZHRoICsgMjAwLCBjZW50ZXJZICsgNjApOwogICAgICAgICAgICBncmFkaWVudDIuYWRkQ29sb3JTdG9wKDAsICcjMDA2NkZGJyk7CiAgICAgICAgICAgIGdyYWRpZW50Mi5hZGRDb2xvclN0b3AoMSwgJyMwMEQ5RkYnKTsKICAgICAgICAgICAgY3R4LmZpbGxTdHlsZSA9IGdyYWRpZW50MjsKICAgICAgICAgICAgY3R4LmZpbGxUZXh0KCdBSScsIHRleHRYICsgZ29XaWR0aCArIHZvV2lkdGgsIGNlbnRlclkgKyA2MCk7CiAgICAgICAgICAgIGNvbnN0IGFpV2lkdGggPSBjdHgubWVhc3VyZVRleHQoJ0FJJykud2lkdGg7CiAgICAgICAgICAgIAogICAgICAgICAgICBjdHguZmlsbFN0eWxlID0gdGV4dENvbG9yOwogICAgICAgICAgICBjdHguZmlsbFRleHQoJ2NlJywgdGV4dFggKyBnb1dpZHRoICsgdm9XaWR0aCArIGFpV2lkdGgsIGNlbnRlclkgKyA2MCk7CiAgICAgICAgICAgIGNvbnN0IGNlV2lkdGggPSBjdHgubWVhc3VyZVRleHQoJ2NlJykud2lkdGg7CiAgICAgICAgICAgIAogICAgICAgICAgICBjdHguZm9udCA9ICdib2xkIDE0MHB4IC1hcHBsZS1zeXN0ZW0sIEJsaW5rTWFjU3lzdGVtRm9udCwgIlNlZ29lIFVJIiwgQXJpYWwsIHNhbnMtc2VyaWYnOwogICAgICAgICAgICBjdHguZmlsbFRleHQoJ0FpJywgdGV4dFggKyBnb1dpZHRoICsgdm9XaWR0aCArIGFpV2lkdGggKyBjZVdpZHRoICsgNDAsIGNlbnRlclkgKyA1MCk7CiAgICAgICAgICAgIAogICAgICAgICAgICBjdHguZm9udCA9ICc1MnB4IC1hcHBsZS1zeXN0ZW0sIEJsaW5rTWFjU3lzdGVtRm9udCwgIlNlZ29lIFVJIiwgQXJpYWwsIHNhbnMtc2VyaWYnOwogICAgICAgICAgICBjdHguZmlsbFN0eWxlID0gdGV4dENvbG9yID09PSAnI0ZGRkZGRicgPyAncmdiYSgyNTUsMjU1LDI1NSwwLjcpJyA6ICdyZ2JhKDAsMCwwLDAuNiknOwogICAgICAgICAgICBjdHguZmlsbFRleHQoJ1RoZSBBSSBpcyBpbiB0aGUgdm9pY2UnLCB0ZXh0WCwgY2VudGVyWSArIDE1MCk7CiAgICAgICAgfQogICAgICAgIAogICAgICAgIC8vIERyYXcgYWxsIHZlcnNpb25zCiAgICAgICAgZHJhd1ZlcnNpb240KCd2NC13aGl0ZScsICcjRkZGRkZGJywgJyMwMDAwMDAnKTsKICAgICAgICBkcmF3VmVyc2lvbjQoJ3Y0LWJsYWNrJywgJyMwMDAwMDAnLCAnI0ZGRkZGRicpOwogICAgICAgIGRyYXdWZXJzaW9uNCgndjQtdHJhbnNwYXJlbnQnLCAndHJhbnNwYXJlbnQnLCAnIzAwMDAwMCcpOwogICAgICAgIAogICAgICAgIGRyYXdWZXJzaW9uNSgndjUtd2hpdGUnLCAnI0ZGRkZGRicsICcjMDAwMDAwJyk7CiAgICAgICAgZHJhd1ZlcnNpb241KCd2NS1ibGFjaycsICcjMDAwMDAwJywgJyNGRkZGRkYnKTsKICAgICAgICBkcmF3VmVyc2lvbjUoJ3Y1LXRyYW5zcGFyZW50JywgJ3RyYW5zcGFyZW50JywgJyMwMDAwMDAnKTsKICAgICAgICAKICAgICAgICBkcmF3VmVyc2lvbjYoJ3Y2LXdoaXRlJywgJyNGRkZGRkYnLCAnIzAwMDAwMCcpOwogICAgICAgIGRyYXdWZXJzaW9uNigndjYtYmxhY2snLCAnIzAwMDAwMCcsICcjRkZGRkZGJyk7CiAgICAgICAgZHJhd1ZlcnNpb242KCd2Ni10cmFuc3BhcmVudCcsICd0cmFuc3BhcmVudCcsICcjMDAwMDAwJyk7CiAgICAgICAgCiAgICAgICAgLy8gRG93bmxvYWQgZnVuY3Rpb24KICAgICAgICBmdW5jdGlvbiBkb3dubG9hZChjYW52YXNJZCwgZmlsZW5hbWUpIHsKICAgICAgICAgICAgY29uc3QgY2FudmFzID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoY2FudmFzSWQpOwogICAgICAgICAgICBjb25zdCBsaW5rID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnYScpOwogICAgICAgICAgICBsaW5rLmRvd25sb2FkID0gZmlsZW5hbWU7CiAgICAgICAgICAgIGxpbmsuaHJlZiA9IGNhbnZhcy50b0RhdGFVUkwoJ2ltYWdlL3BuZycpOwogICAgICAgICAgICBsaW5rLmNsaWNrKCk7CiAgICAgICAgfQogICAgPC9zY3JpcHQ+CjwvYm9keT4KPC9odG1sPg==","embed":""}
GoVoaice Ai Logo Designs
Version 4 - White Background
Version 4 - Black Background
Version 4 - Transparent
Version 5 - White Background
Version 5 - Black Background
Version 5 - Transparent
Version 6 - White Background
Version 6 - Black Background
Version 6 - Transparent
Brand Colors
Electric Blue
#0066FF
Vibrant Cyan
#00D9FF
{"js":"PCFET0NUWVBFIGh0bWw+CjxodG1sIGxhbmc9ImVuIj4KPGhlYWQ+CiAgICA8bWV0YSBjaGFyc2V0PSJVVEYtOCI+CiAgICA8bWV0YSBuYW1lPSJ2aWV3cG9ydCIgY29udGVudD0id2lkdGg9ZGV2aWNlLXdpZHRoLCBpbml0aWFsLXNjYWxlPTEuMCI+CiAgICA8dGl0bGU+R29Wb2FpY2UgQWkgTG9nb3M8L3RpdGxlPgogICAgPGxpbmsgcmVsPSJwcmVjb25uZWN0IiBocmVmPSJodHRwczovL2ZvbnRzLmdvb2dsZWFwaXMuY29tIj4KICAgIDxsaW5rIHJlbD0icHJlY29ubmVjdCIgaHJlZj0iaHR0cHM6Ly9mb250cy5nc3RhdGljLmNvbSIgY3Jvc3NvcmlnaW4+CiAgICA8bGluayBocmVmPSJodHRwczovL2ZvbnRzLmdvb2dsZWFwaXMuY29tL2NzczI/ZmFtaWx5PU9yYml0cm9uOndnaHRANzAwOzkwMCZkaXNwbGF5PXN3YXAiIHJlbD0ic3R5bGVzaGVldCI+CiAgICA8c3R5bGU+CiAgICAgICAgYm9keSB7CiAgICAgICAgICAgIG1hcmdpbjogMDsKICAgICAgICAgICAgcGFkZGluZzogMjBweDsKICAgICAgICAgICAgZm9udC1mYW1pbHk6IC1hcHBsZS1zeXN0ZW0sIEJsaW5rTWFjU3lzdGVtRm9udCwgJ1NlZ29lIFVJJywgc2Fucy1zZXJpZjsKICAgICAgICAgICAgYmFja2dyb3VuZDogI2Y1ZjVmNTsKICAgICAgICB9CiAgICAgICAgLmNvbnRhaW5lciB7CiAgICAgICAgICAgIG1heC13aWR0aDogMTQwMHB4OwogICAgICAgICAgICBtYXJnaW46IDAgYXV0bzsKICAgICAgICB9CiAgICAgICAgaDEgewogICAgICAgICAgICB0ZXh0LWFsaWduOiBjZW50ZXI7CiAgICAgICAgICAgIGNvbG9yOiAjMzMzOwogICAgICAgICAgICBtYXJnaW4tYm90dG9tOiA0MHB4OwogICAgICAgIH0KICAgICAgICAubG9nby1ncmlkIHsKICAgICAgICAgICAgZGlzcGxheTogZ3JpZDsKICAgICAgICAgICAgZ3JpZC10ZW1wbGF0ZS1jb2x1bW5zOiByZXBlYXQoYXV0by1maXQsIG1pbm1heCg0MDBweCwgMWZyKSk7CiAgICAgICAgICAgIGdhcDogMzBweDsKICAgICAgICAgICAgbWFyZ2luLWJvdHRvbTogNDBweDsKICAgICAgICB9CiAgICAgICAgLmxvZ28tY2FyZCB7CiAgICAgICAgICAgIGJhY2tncm91bmQ6IHdoaXRlOwogICAgICAgICAgICBib3JkZXItcmFkaXVzOiAxMnB4OwogICAgICAgICAgICBwYWRkaW5nOiAyMHB4OwogICAgICAgICAgICBib3gtc2hhZG93OiAwIDRweCA2cHggcmdiYSgwLDAsMCwwLjEpOwogICAgICAgIH0KICAgICAgICAubG9nby10aXRsZSB7CiAgICAgICAgICAgIGZvbnQtd2VpZ2h0OiA2MDA7CiAgICAgICAgICAgIG1hcmdpbi1ib3R0b206IDE1cHg7CiAgICAgICAgICAgIGNvbG9yOiAjMzMzOwogICAgICAgICAgICBmb250LXNpemU6IDE4cHg7CiAgICAgICAgfQogICAgICAgIC5sb2dvLXByZXZpZXcgewogICAgICAgICAgICB3aWR0aDogMTAwJTsKICAgICAgICAgICAgYm9yZGVyOiAxcHggc29saWQgI2UwZTBlMDsKICAgICAgICAgICAgYm9yZGVyLXJhZGl1czogOHB4OwogICAgICAgICAgICBtYXJnaW4tYm90dG9tOiAxNXB4OwogICAgICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgICAgICBhbGlnbi1pdGVtczogY2VudGVyOwogICAgICAgICAgICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjsKICAgICAgICAgICAgcGFkZGluZzogMzBweDsKICAgICAgICAgICAgYm94LXNpemluZzogYm9yZGVyLWJveDsKICAgICAgICB9CiAgICAgICAgLndoaXRlLWJnIHsgYmFja2dyb3VuZDogd2hpdGU7IH0KICAgICAgICAuYmxhY2stYmcgeyBiYWNrZ3JvdW5kOiAjMDAwOyB9CiAgICAgICAgLnRyYW5zcGFyZW50LWJnIHsgCiAgICAgICAgICAgIGJhY2tncm91bmQ6IAogICAgICAgICAgICAgICAgbGluZWFyLWdyYWRpZW50KDQ1ZGVnLCAjZTBlMGUwIDI1JSwgdHJhbnNwYXJlbnQgMjUlKSwKICAgICAgICAgICAgICAgIGxpbmVhci1ncmFkaWVudCgtNDVkZWcsICNlMGUwZTAgMjUlLCB0cmFuc3BhcmVudCAyNSUpLAogICAgICAgICAgICAgICAgbGluZWFyLWdyYWRpZW50KDQ1ZGVnLCB0cmFuc3BhcmVudCA3NSUsICNlMGUwZTAgNzUlKSwKICAgICAgICAgICAgICAgIGxpbmVhci1ncmFkaWVudCgtNDVkZWcsIHRyYW5zcGFyZW50IDc1JSwgI2UwZTBlMCA3NSUpOwogICAgICAgICAgICBiYWNrZ3JvdW5kLXNpemU6IDIwcHggMjBweDsKICAgICAgICAgICAgYmFja2dyb3VuZC1wb3NpdGlvbjogMCAwLCAwIDEwcHgsIDEwcHggLTEwcHgsIC0xMHB4IDBweDsKICAgICAgICB9CiAgICAgICAgY2FudmFzIHsKICAgICAgICAgICAgbWF4LXdpZHRoOiAxMDAlOwogICAgICAgICAgICBoZWlnaHQ6IGF1dG87CiAgICAgICAgfQogICAgICAgIC5kb3dubG9hZC1idG4gewogICAgICAgICAgICB3aWR0aDogMTAwJTsKICAgICAgICAgICAgcGFkZGluZzogMTJweDsKICAgICAgICAgICAgYmFja2dyb3VuZDogIzdDM0FFRDsKICAgICAgICAgICAgY29sb3I6IHdoaXRlOwogICAgICAgICAgICBib3JkZXI6IG5vbmU7CiAgICAgICAgICAgIGJvcmRlci1yYWRpdXM6IDZweDsKICAgICAgICAgICAgZm9udC1zaXplOiAxNHB4OwogICAgICAgICAgICBmb250LXdlaWdodDogNjAwOwogICAgICAgICAgICBjdXJzb3I6IHBvaW50ZXI7CiAgICAgICAgICAgIHRyYW5zaXRpb246IGJhY2tncm91bmQgMC4zczsKICAgICAgICB9CiAgICAgICAgLmRvd25sb2FkLWJ0bjpob3ZlciB7CiAgICAgICAgICAgIGJhY2tncm91bmQ6ICM2RDI4RDk7CiAgICAgICAgfQogICAgICAgIC5jb2xvci1pbmZvIHsKICAgICAgICAgICAgdGV4dC1hbGlnbjogY2VudGVyOwogICAgICAgICAgICBtYXJnaW4tdG9wOiA0MHB4OwogICAgICAgICAgICBwYWRkaW5nOiAyMHB4OwogICAgICAgICAgICBiYWNrZ3JvdW5kOiB3aGl0ZTsKICAgICAgICAgICAgYm9yZGVyLXJhZGl1czogMTJweDsKICAgICAgICAgICAgYm94LXNoYWRvdzogMCA0cHggNnB4IHJnYmEoMCwwLDAsMC4xKTsKICAgICAgICB9CiAgICAgICAgLmNvbG9yLXN3YXRjaGVzIHsKICAgICAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICAgICAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7CiAgICAgICAgICAgIGdhcDogMzBweDsKICAgICAgICAgICAgbWFyZ2luLXRvcDogMjBweDsKICAgICAgICB9CiAgICAgICAgLnN3YXRjaCB7CiAgICAgICAgICAgIHRleHQtYWxpZ246IGNlbnRlcjsKICAgICAgICB9CiAgICAgICAgLnN3YXRjaC1jb2xvciB7CiAgICAgICAgICAgIHdpZHRoOiA4MHB4OwogICAgICAgICAgICBoZWlnaHQ6IDgwcHg7CiAgICAgICAgICAgIGJvcmRlci1yYWRpdXM6IDhweDsKICAgICAgICAgICAgbWFyZ2luOiAwIGF1dG8gMTBweDsKICAgICAgICAgICAgYm94LXNoYWRvdzogMCAycHggNHB4IHJnYmEoMCwwLDAsMC4yKTsKICAgICAgICB9CiAgICAgICAgLnN3YXRjaC1uYW1lIHsKICAgICAgICAgICAgZm9udC13ZWlnaHQ6IDYwMDsKICAgICAgICAgICAgbWFyZ2luLWJvdHRvbTogNXB4OwogICAgICAgIH0KICAgICAgICAuc3dhdGNoLWhleCB7CiAgICAgICAgICAgIGZvbnQtZmFtaWx5OiBtb25vc3BhY2U7CiAgICAgICAgICAgIGNvbG9yOiAjNjY2OwogICAgICAgIH0KICAgIDwvc3R5bGU+CjwvaGVhZD4KPGJvZHk+CiAgICA8ZGl2IGNsYXNzPSJjb250YWluZXIiPgogICAgICAgIDxoMT5Hb1ZvYWljZSBBaSBMb2dvIERlc2lnbnMgLSBQdXJwbGUgJiBNYWdlbnRhIFNjaGVtZTwvaDE+CiAgICAgICAgCiAgICAgICAgPCEtLSBWZXJzaW9uIDcgLS0+CiAgICAgICAgPGRpdiBjbGFzcz0ibG9nby1ncmlkIj4KICAgICAgICAgICAgPGRpdiBjbGFzcz0ibG9nby1jYXJkIj4KICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImxvZ28tdGl0bGUiPlZlcnNpb24gNyAtIFdoaXRlIEJhY2tncm91bmQ8L2Rpdj4KICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImxvZ28tcHJldmlldyB3aGl0ZS1iZyI+CiAgICAgICAgICAgICAgICAgICAgPGNhbnZhcyBpZD0idjctd2hpdGUiPjwvY2FudmFzPgogICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICA8YnV0dG9uIGNsYXNzPSJkb3dubG9hZC1idG4iIG9uY2xpY2s9ImRvd25sb2FkKCd2Ny13aGl0ZScsICdHb1ZvYWljZV9BaV9WN19XaGl0ZS5wbmcnKSI+RG93bmxvYWQgUE5HPC9idXR0b24+CiAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICA8ZGl2IGNsYXNzPSJsb2dvLWNhcmQiPgogICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0ibG9nby10aXRsZSI+VmVyc2lvbiA3IC0gQmxhY2sgQmFja2dyb3VuZDwvZGl2PgogICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0ibG9nby1wcmV2aWV3IGJsYWNrLWJnIj4KICAgICAgICAgICAgICAgICAgICA8Y2FudmFzIGlkPSJ2Ny1ibGFjayI+PC9jYW52YXM+CiAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgIDxidXR0b24gY2xhc3M9ImRvd25sb2FkLWJ0biIgb25jbGljaz0iZG93bmxvYWQoJ3Y3LWJsYWNrJywgJ0dvVm9haWNlX0FpX1Y3X0JsYWNrLnBuZycpIj5Eb3dubG9hZCBQTkc8L2J1dHRvbj4KICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgIDxkaXYgY2xhc3M9ImxvZ28tY2FyZCI+CiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJsb2dvLXRpdGxlIj5WZXJzaW9uIDcgLSBUcmFuc3BhcmVudDwvZGl2PgogICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0ibG9nby1wcmV2aWV3IHRyYW5zcGFyZW50LWJnIj4KICAgICAgICAgICAgICAgICAgICA8Y2FudmFzIGlkPSJ2Ny10cmFuc3BhcmVudCI+PC9jYW52YXM+CiAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgIDxidXR0b24gY2xhc3M9ImRvd25sb2FkLWJ0biIgb25jbGljaz0iZG93bmxvYWQoJ3Y3LXRyYW5zcGFyZW50JywgJ0dvVm9haWNlX0FpX1Y3X1RyYW5zcGFyZW50LnBuZycpIj5Eb3dubG9hZCBQTkc8L2J1dHRvbj4KICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgPC9kaXY+CgogICAgICAgIDwhLS0gVmVyc2lvbiA4IC0tPgogICAgICAgIDxkaXYgY2xhc3M9ImxvZ28tZ3JpZCI+CiAgICAgICAgICAgIDxkaXYgY2xhc3M9ImxvZ28tY2FyZCI+CiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJsb2dvLXRpdGxlIj5WZXJzaW9uIDggLSBXaGl0ZSBCYWNrZ3JvdW5kPC9kaXY+CiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJsb2dvLXByZXZpZXcgd2hpdGUtYmciPgogICAgICAgICAgICAgICAgICAgIDxjYW52YXMgaWQ9InY4LXdoaXRlIj48L2NhbnZhcz4KICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz0iZG93bmxvYWQtYnRuIiBvbmNsaWNrPSJkb3dubG9hZCgndjgtd2hpdGUnLCAnR29Wb2FpY2VfQWlfVjhfV2hpdGUucG5nJykiPkRvd25sb2FkIFBORzwvYnV0dG9uPgogICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgPGRpdiBjbGFzcz0ibG9nby1jYXJkIj4KICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImxvZ28tdGl0bGUiPlZlcnNpb24gOCAtIEJsYWNrIEJhY2tncm91bmQ8L2Rpdj4KICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImxvZ28tcHJldmlldyBibGFjay1iZyI+CiAgICAgICAgICAgICAgICAgICAgPGNhbnZhcyBpZD0idjgtYmxhY2siPjwvY2FudmFzPgogICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICA8YnV0dG9uIGNsYXNzPSJkb3dubG9hZC1idG4iIG9uY2xpY2s9ImRvd25sb2FkKCd2OC1ibGFjaycsICdHb1ZvYWljZV9BaV9WOF9CbGFjay5wbmcnKSI+RG93bmxvYWQgUE5HPC9idXR0b24+CiAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICA8ZGl2IGNsYXNzPSJsb2dvLWNhcmQiPgogICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0ibG9nby10aXRsZSI+VmVyc2lvbiA4IC0gVHJhbnNwYXJlbnQ8L2Rpdj4KICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImxvZ28tcHJldmlldyB0cmFuc3BhcmVudC1iZyI+CiAgICAgICAgICAgICAgICAgICAgPGNhbnZhcyBpZD0idjgtdHJhbnNwYXJlbnQiPjwvY2FudmFzPgogICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICA8YnV0dG9uIGNsYXNzPSJkb3dubG9hZC1idG4iIG9uY2xpY2s9ImRvd25sb2FkKCd2OC10cmFuc3BhcmVudCcsICdHb1ZvYWljZV9BaV9WOF9UcmFuc3BhcmVudC5wbmcnKSI+RG93bmxvYWQgUE5HPC9idXR0b24+CiAgICAgICAgICAgIDwvZGl2PgogICAgICAgIDwvZGl2PgoKICAgICAgICA8IS0tIFZlcnNpb24gOSAtLT4KICAgICAgICA8ZGl2IGNsYXNzPSJsb2dvLWdyaWQiPgogICAgICAgICAgICA8ZGl2IGNsYXNzPSJsb2dvLWNhcmQiPgogICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0ibG9nby10aXRsZSI+VmVyc2lvbiA5IC0gV2hpdGUgQmFja2dyb3VuZDwvZGl2PgogICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0ibG9nby1wcmV2aWV3IHdoaXRlLWJnIj4KICAgICAgICAgICAgICAgICAgICA8Y2FudmFzIGlkPSJ2OS13aGl0ZSI+PC9jYW52YXM+CiAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgIDxidXR0b24gY2xhc3M9ImRvd25sb2FkLWJ0biIgb25jbGljaz0iZG93bmxvYWQoJ3Y5LXdoaXRlJywgJ0dvVm9haWNlX0FpX1Y5X1doaXRlLnBuZycpIj5Eb3dubG9hZCBQTkc8L2J1dHRvbj4KICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgIDxkaXYgY2xhc3M9ImxvZ28tY2FyZCI+CiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJsb2dvLXRpdGxlIj5WZXJzaW9uIDkgLSBCbGFjayBCYWNrZ3JvdW5kPC9kaXY+CiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJsb2dvLXByZXZpZXcgYmxhY2stYmciPgogICAgICAgICAgICAgICAgICAgIDxjYW52YXMgaWQ9InY5LWJsYWNrIj48L2NhbnZhcz4KICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz0iZG93bmxvYWQtYnRuIiBvbmNsaWNrPSJkb3dubG9hZCgndjktYmxhY2snLCAnR29Wb2FpY2VfQWlfVjlfQmxhY2sucG5nJykiPkRvd25sb2FkIFBORzwvYnV0dG9uPgogICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgPGRpdiBjbGFzcz0ibG9nby1jYXJkIj4KICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImxvZ28tdGl0bGUiPlZlcnNpb24gOSAtIFRyYW5zcGFyZW50PC9kaXY+CiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJsb2dvLXByZXZpZXcgdHJhbnNwYXJlbnQtYmciPgogICAgICAgICAgICAgICAgICAgIDxjYW52YXMgaWQ9InY5LXRyYW5zcGFyZW50Ij48L2NhbnZhcz4KICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz0iZG93bmxvYWQtYnRuIiBvbmNsaWNrPSJkb3dubG9hZCgndjktdHJhbnNwYXJlbnQnLCAnR29Wb2FpY2VfQWlfVjlfVHJhbnNwYXJlbnQucG5nJykiPkRvd25sb2FkIFBORzwvYnV0dG9uPgogICAgICAgICAgICA8L2Rpdj4KICAgICAgICA8L2Rpdj4KCiAgICAgICAgPGRpdiBjbGFzcz0iY29sb3ItaW5mbyI+CiAgICAgICAgICAgIDxoMj5OZXcgQnJhbmQgQ29sb3JzPC9oMj4KICAgICAgICAgICAgPGRpdiBjbGFzcz0iY29sb3Itc3dhdGNoZXMiPgogICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0ic3dhdGNoIj4KICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJzd2F0Y2gtY29sb3IiIHN0eWxlPSJiYWNrZ3JvdW5kOiAjN0MzQUVEOyI+PC9kaXY+CiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0ic3dhdGNoLW5hbWUiPlZpYnJhbnQgUHVycGxlPC9kaXY+CiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0ic3dhdGNoLWhleCI+IzdDM0FFRDwvZGl2PgogICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJzd2F0Y2giPgogICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InN3YXRjaC1jb2xvciIgc3R5bGU9ImJhY2tncm91bmQ6ICNFQzQ4OTk7Ij48L2Rpdj4KICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJzd2F0Y2gtbmFtZSI+RWxlY3RyaWMgTWFnZW50YTwvZGl2PgogICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InN3YXRjaC1oZXgiPiNFQzQ4OTk8L2Rpdj4KICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICA8L2Rpdj4KICAgICAgICA8L2Rpdj4KICAgIDwvZGl2PgoKICAgIDxzY3JpcHQ+CiAgICAgICAgY29uc3QgV0lEVEggPSAyNDAwOwogICAgICAgIGNvbnN0IEhFSUdIVCA9IDg0MDsKICAgICAgICAKICAgICAgICAvLyBWZXJzaW9uIDc6IERpZ2l0YWwgcHVsc2Ugd2F2ZXMKICAgICAgICBmdW5jdGlvbiBkcmF3VmVyc2lvbjcoY2FudmFzSWQsIGJnQ29sb3IsIHRleHRDb2xvcikgewogICAgICAgICAgICBjb25zdCBjYW52YXMgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChjYW52YXNJZCk7CiAgICAgICAgICAgIGNhbnZhcy53aWR0aCA9IFdJRFRIOwogICAgICAgICAgICBjYW52YXMuaGVpZ2h0ID0gSEVJR0hUOwogICAgICAgICAgICBjb25zdCBjdHggPSBjYW52YXMuZ2V0Q29udGV4dCgnMmQnKTsKICAgICAgICAgICAgCiAgICAgICAgICAgIGlmIChiZ0NvbG9yICE9PSAndHJhbnNwYXJlbnQnKSB7CiAgICAgICAgICAgICAgICBjdHguZmlsbFN0eWxlID0gYmdDb2xvcjsKICAgICAgICAgICAgICAgIGN0eC5maWxsUmVjdCgwLCAwLCBXSURUSCwgSEVJR0hUKTsKICAgICAgICAgICAgfQogICAgICAgICAgICAKICAgICAgICAgICAgY29uc3QgY2VudGVyWSA9IEhFSUdIVCAvIDI7CiAgICAgICAgICAgIGNvbnN0IGljb25YID0gMzIwOwogICAgICAgICAgICAKICAgICAgICAgICAgLy8gRHJhdyBkaWdpdGFsIHB1bHNlIHZpc3VhbGl6YXRpb24KICAgICAgICAgICAgY29uc3Qgd2F2ZVBvaW50cyA9IDQwOwogICAgICAgICAgICBjb25zdCB3YXZlV2lkdGggPSAyODA7CiAgICAgICAgICAgIGNvbnN0IHdhdmVIZWlnaHQgPSAxNjA7CiAgICAgICAgICAgIAogICAgICAgICAgICAvLyBHZW5lcmF0ZSB3YXZlIGRhdGEKICAgICAgICAgICAgY29uc3Qgd2F2ZTEgPSBbXTsKICAgICAgICAgICAgY29uc3Qgd2F2ZTIgPSBbXTsKICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCB3YXZlUG9pbnRzOyBpKyspIHsKICAgICAgICAgICAgICAgIGNvbnN0IHggPSAoaSAvICh3YXZlUG9pbnRzIC0gMSkpICogd2F2ZVdpZHRoIC0gd2F2ZVdpZHRoIC8gMjsKICAgICAgICAgICAgICAgIGNvbnN0IHQgPSBpIC8gd2F2ZVBvaW50czsKICAgICAgICAgICAgICAgIHdhdmUxLnB1c2goewogICAgICAgICAgICAgICAgICAgIHg6IGljb25YICsgeCwKICAgICAgICAgICAgICAgICAgICB5OiBjZW50ZXJZICsgTWF0aC5zaW4odCAqIE1hdGguUEkgKiA0KSAqIHdhdmVIZWlnaHQgKiAwLjQKICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgICAgd2F2ZTIucHVzaCh7CiAgICAgICAgICAgICAgICAgICAgeDogaWNvblggKyB4LAogICAgICAgICAgICAgICAgICAgIHk6IGNlbnRlclkgKyBNYXRoLnNpbih0ICogTWF0aC5QSSAqIDMgKyAxKSAqIHdhdmVIZWlnaHQgKiAwLjMKICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICB9CiAgICAgICAgICAgIAogICAgICAgICAgICAvLyBEcmF3IHdhdmVzCiAgICAgICAgICAgIGN0eC5saW5lV2lkdGggPSAxNDsKICAgICAgICAgICAgY3R4LmxpbmVDYXAgPSAncm91bmQnOwogICAgICAgICAgICBjdHgubGluZUpvaW4gPSAncm91bmQnOwogICAgICAgICAgICAKICAgICAgICAgICAgLy8gRmlyc3Qgd2F2ZSAtIHB1cnBsZQogICAgICAgICAgICBjb25zdCBncmFkaWVudDEgPSBjdHguY3JlYXRlTGluZWFyR3JhZGllbnQoaWNvblggLSB3YXZlV2lkdGgvMiwgY2VudGVyWSwgaWNvblggKyB3YXZlV2lkdGgvMiwgY2VudGVyWSk7CiAgICAgICAgICAgIGdyYWRpZW50MS5hZGRDb2xvclN0b3AoMCwgJyM3QzNBRUQnKTsKICAgICAgICAgICAgZ3JhZGllbnQxLmFkZENvbG9yU3RvcCgxLCAnI0VDNDg5OScpOwogICAgICAgICAgICBjdHguc3Ryb2tlU3R5bGUgPSBncmFkaWVudDE7CiAgICAgICAgICAgIGN0eC5iZWdpblBhdGgoKTsKICAgICAgICAgICAgd2F2ZTEuZm9yRWFjaCgocCwgaSkgPT4gewogICAgICAgICAgICAgICAgaWYgKGkgPT09IDApIGN0eC5tb3ZlVG8ocC54LCBwLnkpOwogICAgICAgICAgICAgICAgZWxzZSBjdHgubGluZVRvKHAueCwgcC55KTsKICAgICAgICAgICAgfSk7CiAgICAgICAgICAgIGN0eC5zdHJva2UoKTsKICAgICAgICAgICAgCiAgICAgICAgICAgIC8vIFNlY29uZCB3YXZlIC0gbWFnZW50YQogICAgICAgICAgICBjdHguZ2xvYmFsQWxwaGEgPSAwLjY7CiAgICAgICAgICAgIGNvbnN0IGdyYWRpZW50MiA9IGN0eC5jcmVhdGVMaW5lYXJHcmFkaWVudChpY29uWCAtIHdhdmVXaWR0aC8yLCBjZW50ZXJZLCBpY29uWCArIHdhdmVXaWR0aC8yLCBjZW50ZXJZKTsKICAgICAgICAgICAgZ3JhZGllbnQyLmFkZENvbG9yU3RvcCgwLCAnI0VDNDg5OScpOwogICAgICAgICAgICBncmFkaWVudDIuYWRkQ29sb3JTdG9wKDEsICcjN0MzQUVEJyk7CiAgICAgICAgICAgIGN0eC5zdHJva2VTdHlsZSA9IGdyYWRpZW50MjsKICAgICAgICAgICAgY3R4LmJlZ2luUGF0aCgpOwogICAgICAgICAgICB3YXZlMi5mb3JFYWNoKChwLCBpKSA9PiB7CiAgICAgICAgICAgICAgICBpZiAoaSA9PT0gMCkgY3R4Lm1vdmVUbyhwLngsIHAueSk7CiAgICAgICAgICAgICAgICBlbHNlIGN0eC5saW5lVG8ocC54LCBwLnkpOwogICAgICAgICAgICB9KTsKICAgICAgICAgICAgY3R4LnN0cm9rZSgpOwogICAgICAgICAgICBjdHguZ2xvYmFsQWxwaGEgPSAxOwogICAgICAgICAgICAKICAgICAgICAgICAgLy8gQ2VudGVyIHBvaW50IGdsb3cKICAgICAgICAgICAgY29uc3QgZ2xvd0dyYWRpZW50ID0gY3R4LmNyZWF0ZVJhZGlhbEdyYWRpZW50KGljb25YLCBjZW50ZXJZLCAwLCBpY29uWCwgY2VudGVyWSwgNDApOwogICAgICAgICAgICBnbG93R3JhZGllbnQuYWRkQ29sb3JTdG9wKDAsICcjRUM0ODk5Jyk7CiAgICAgICAgICAgIGdsb3dHcmFkaWVudC5hZGRDb2xvclN0b3AoMSwgJ3JnYmEoMjM2LCA3MiwgMTUzLCAwKScpOwogICAgICAgICAgICBjdHguZmlsbFN0eWxlID0gZ2xvd0dyYWRpZW50OwogICAgICAgICAgICBjdHguYmVnaW5QYXRoKCk7CiAgICAgICAgICAgIGN0eC5hcmMoaWNvblgsIGNlbnRlclksIDQwLCAwLCBNYXRoLlBJICogMik7CiAgICAgICAgICAgIGN0eC5maWxsKCk7CiAgICAgICAgICAgIAogICAgICAgICAgICBjdHguZmlsbFN0eWxlID0gJyNFQzQ4OTknOwogICAgICAgICAgICBjdHguYmVnaW5QYXRoKCk7CiAgICAgICAgICAgIGN0eC5hcmMoaWNvblgsIGNlbnRlclksIDE4LCAwLCBNYXRoLlBJICogMik7CiAgICAgICAgICAgIGN0eC5maWxsKCk7CiAgICAgICAgICAgIAogICAgICAgICAgICAvLyBUZXh0CiAgICAgICAgICAgIGNvbnN0IHRleHRYID0gaWNvblggKyAyMzA7CiAgICAgICAgICAgIGN0eC5mb250ID0gJ2JvbGQgMTgwcHggIk9yYml0cm9uIiwgIlJhamRoYW5pIiwgIkV4byAyIiwgbW9ub3NwYWNlLCBzYW5zLXNlcmlmJzsKICAgICAgICAgICAgCiAgICAgICAgICAgIGN0eC5maWxsU3R5bGUgPSB0ZXh0Q29sb3I7CiAgICAgICAgICAgIGN0eC5maWxsVGV4dCgnR28nLCB0ZXh0WCwgY2VudGVyWSArIDYwKTsKICAgICAgICAgICAgY29uc3QgZ29XaWR0aCA9IGN0eC5tZWFzdXJlVGV4dCgnR28nKS53aWR0aDsKICAgICAgICAgICAgCiAgICAgICAgICAgIGN0eC5maWxsVGV4dCgnVm8nLCB0ZXh0WCArIGdvV2lkdGgsIGNlbnRlclkgKyA2MCk7CiAgICAgICAgICAgIGNvbnN0IHZvV2lkdGggPSBjdHgubWVhc3VyZVRleHQoJ1ZvJykud2lkdGg7CiAgICAgICAgICAgIAogICAgICAgICAgICBjb25zdCB0ZXh0R3JhZGllbnQgPSBjdHguY3JlYXRlTGluZWFyR3JhZGllbnQodGV4dFggKyBnb1dpZHRoICsgdm9XaWR0aCwgY2VudGVyWSAtIDYwLCB0ZXh0WCArIGdvV2lkdGggKyB2b1dpZHRoICsgMjAwLCBjZW50ZXJZICsgNjApOwogICAgICAgICAgICB0ZXh0R3JhZGllbnQuYWRkQ29sb3JTdG9wKDAsICcjN0MzQUVEJyk7CiAgICAgICAgICAgIHRleHRHcmFkaWVudC5hZGRDb2xvclN0b3AoMSwgJyNFQzQ4OTknKTsKICAgICAgICAgICAgY3R4LmZpbGxTdHlsZSA9IHRleHRHcmFkaWVudDsKICAgICAgICAgICAgY3R4LmZpbGxUZXh0KCdBSScsIHRleHRYICsgZ29XaWR0aCArIHZvV2lkdGgsIGNlbnRlclkgKyA2MCk7CiAgICAgICAgICAgIGNvbnN0IGFpV2lkdGggPSBjdHgubWVhc3VyZVRleHQoJ0FJJykud2lkdGg7CiAgICAgICAgICAgIAogICAgICAgICAgICBjdHguZmlsbFN0eWxlID0gdGV4dENvbG9yOwogICAgICAgICAgICBjdHguZmlsbFRleHQoJ2NlJywgdGV4dFggKyBnb1dpZHRoICsgdm9XaWR0aCArIGFpV2lkdGgsIGNlbnRlclkgKyA2MCk7CiAgICAgICAgICAgIGNvbnN0IGNlV2lkdGggPSBjdHgubWVhc3VyZVRleHQoJ2NlJykud2lkdGg7CiAgICAgICAgICAgIAogICAgICAgICAgICBjdHguZm9udCA9ICdib2xkIDE0MHB4ICJPcmJpdHJvbiIsICJSYWpkaGFuaSIsICJFeG8gMiIsIG1vbm9zcGFjZSwgc2Fucy1zZXJpZic7CiAgICAgICAgICAgIGN0eC5maWxsVGV4dCgnQWknLCB0ZXh0WCArIGdvV2lkdGggKyB2b1dpZHRoICsgYWlXaWR0aCArIGNlV2lkdGggKyA0MCwgY2VudGVyWSArIDUwKTsKICAgICAgICAgICAgCiAgICAgICAgICAgIGN0eC5mb250ID0gJzUycHggIk9yYml0cm9uIiwgIlJhamRoYW5pIiwgIkV4byAyIiwgbW9ub3NwYWNlLCBzYW5zLXNlcmlmJzsKICAgICAgICAgICAgY3R4LmZpbGxTdHlsZSA9IHRleHRDb2xvciA9PT0gJyNGRkZGRkYnID8gJ3JnYmEoMjU1LDI1NSwyNTUsMC43KScgOiAncmdiYSgwLDAsMCwwLjYpJzsKICAgICAgICAgICAgY3R4LmZpbGxUZXh0KCdUaGUgQUkgaXMgaW4gdGhlIHZvaWNlJywgdGV4dFgsIGNlbnRlclkgKyAxNTApOwogICAgICAgIH0KICAgICAgICAKICAgICAgICAvLyBWZXJzaW9uIDg6IE9yYml0aW5nIHBhcnRpY2xlcy9kYXRhIHN0cmVhbXMKICAgICAgICBmdW5jdGlvbiBkcmF3VmVyc2lvbjgoY2FudmFzSWQsIGJnQ29sb3IsIHRleHRDb2xvcikgewogICAgICAgICAgICBjb25zdCBjYW52YXMgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChjYW52YXNJZCk7CiAgICAgICAgICAgIGNhbnZhcy53aWR0aCA9IFdJRFRIOwogICAgICAgICAgICBjYW52YXMuaGVpZ2h0ID0gSEVJR0hUOwogICAgICAgICAgICBjb25zdCBjdHggPSBjYW52YXMuZ2V0Q29udGV4dCgnMmQnKTsKICAgICAgICAgICAgCiAgICAgICAgICAgIGlmIChiZ0NvbG9yICE9PSAndHJhbnNwYXJlbnQnKSB7CiAgICAgICAgICAgICAgICBjdHguZmlsbFN0eWxlID0gYmdDb2xvcjsKICAgICAgICAgICAgICAgIGN0eC5maWxsUmVjdCgwLCAwLCBXSURUSCwgSEVJR0hUKTsKICAgICAgICAgICAgfQogICAgICAgICAgICAKICAgICAgICAgICAgY29uc3QgY2VudGVyWSA9IEhFSUdIVCAvIDI7CiAgICAgICAgICAgIGNvbnN0IGljb25YID0gMzAwOwogICAgICAgICAgICAKICAgICAgICAgICAgLy8gRHJhdyBvcmJpdGFsIHJpbmdzIHdpdGggcGFydGljbGVzCiAgICAgICAgICAgIGNvbnN0IG9yYml0cyA9IFsKICAgICAgICAgICAgICAgIHtyYWRpdXM6IDEwMCwgcGFydGljbGVzOiA4LCBzcGVlZDogMH0sCiAgICAgICAgICAgICAgICB7cmFkaXVzOiAxNDAsIHBhcnRpY2xlczogMTIsIHNwZWVkOiAwLjN9LAogICAgICAgICAgICAgICAge3JhZGl1czogMTgwLCBwYXJ0aWNsZXM6IDE2LCBzcGVlZDogMC42fQogICAgICAgICAgICBdOwogICAgICAgICAgICAKICAgICAgICAgICAgLy8gRHJhdyBvcmJpdGFsIHBhdGhzCiAgICAgICAgICAgIGN0eC5saW5lV2lkdGggPSAzOwogICAgICAgICAgICBjdHguZ2xvYmFsQWxwaGEgPSAwLjM7CiAgICAgICAgICAgIG9yYml0cy5mb3JFYWNoKG9yYml0ID0+IHsKICAgICAgICAgICAgICAgIGNvbnN0IGdyYWRpZW50ID0gY3R4LmNyZWF0ZUxpbmVhckdyYWRpZW50KGljb25YIC0gb3JiaXQucmFkaXVzLCBjZW50ZXJZLCBpY29uWCArIG9yYml0LnJhZGl1cywgY2VudGVyWSk7CiAgICAgICAgICAgICAgICBncmFkaWVudC5hZGRDb2xvclN0b3AoMCwgJyM3QzNBRUQnKTsKICAgICAgICAgICAgICAgIGdyYWRpZW50LmFkZENvbG9yU3RvcCgxLCAnI0VDNDg5OScpOwogICAgICAgICAgICAgICAgY3R4LnN0cm9rZVN0eWxlID0gZ3JhZGllbnQ7CiAgICAgICAgICAgICAgICBjdHguYmVnaW5QYXRoKCk7CiAgICAgICAgICAgICAgICBjdHguYXJjKGljb25YLCBjZW50ZXJZLCBvcmJpdC5yYWRpdXMsIDAsIE1hdGguUEkgKiAyKTsKICAgICAgICAgICAgICAgIGN0eC5zdHJva2UoKTsKICAgICAgICAgICAgfSk7CiAgICAgICAgICAgIGN0eC5nbG9iYWxBbHBoYSA9IDE7CiAgICAgICAgICAgIAogICAgICAgICAgICAvLyBEcmF3IHBhcnRpY2xlcyBvbiBvcmJpdHMKICAgICAgICAgICAgb3JiaXRzLmZvckVhY2goKG9yYml0LCBvcmJpdElkeCkgPT4gewogICAgICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBvcmJpdC5wYXJ0aWNsZXM7IGkrKykgewogICAgICAgICAgICAgICAgICAgIGNvbnN0IGFuZ2xlID0gKE1hdGguUEkgKiAyICogaSAvIG9yYml0LnBhcnRpY2xlcykgKyBvcmJpdC5zcGVlZDsKICAgICAgICAgICAgICAgICAgICBjb25zdCB4ID0gaWNvblggKyBNYXRoLmNvcyhhbmdsZSkgKiBvcmJpdC5yYWRpdXM7CiAgICAgICAgICAgICAgICAgICAgY29uc3QgeSA9IGNlbnRlclkgKyBNYXRoLnNpbihhbmdsZSkgKiBvcmJpdC5yYWRpdXM7CiAgICAgICAgICAgICAgICAgICAgY29uc3Qgc2l6ZSA9IDggLSBvcmJpdElkeCAqIDI7CiAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgY29uc3QgcGFydGljbGVHcmFkaWVudCA9IGN0eC5jcmVhdGVSYWRpYWxHcmFkaWVudCh4LCB5LCAwLCB4LCB5LCBzaXplICogMik7CiAgICAgICAgICAgICAgICAgICAgcGFydGljbGVHcmFkaWVudC5hZGRDb2xvclN0b3AoMCwgb3JiaXRJZHggJSAyID09PSAwID8gJyNFQzQ4OTknIDogJyM3QzNBRUQnKTsKICAgICAgICAgICAgICAgICAgICBwYXJ0aWNsZUdyYWRpZW50LmFkZENvbG9yU3RvcCgxLCAncmdiYSgyMzYsIDcyLCAxNTMsIDApJyk7CiAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgY3R4LmZpbGxTdHlsZSA9IHBhcnRpY2xlR3JhZGllbnQ7CiAgICAgICAgICAgICAgICAgICAgY3R4LmJlZ2luUGF0aCgpOwogICAgICAgICAgICAgICAgICAgIGN0eC5hcmMoeCwgeSwgc2l6ZSAqIDIsIDAsIE1hdGguUEkgKiAyKTsKICAgICAgICAgICAgICAgICAgICBjdHguZmlsbCgpOwogICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgIGN0eC5maWxsU3R5bGUgPSBvcmJpdElkeCAlIDIgPT09IDAgPyAnI0VDNDg5OScgOiAnIzdDM0FFRCc7CiAgICAgICAgICAgICAgICAgICAgY3R4LmJlZ2luUGF0aCgpOwogICAgICAgICAgICAgICAgICAgIGN0eC5hcmMoeCwgeSwgc2l6ZSwgMCwgTWF0aC5QSSAqIDIpOwogICAgICAgICAgICAgICAgICAgIGN0eC5maWxsKCk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0pOwogICAgICAgICAgICAKICAgICAgICAgICAgLy8gQ2VudGVyIGNvcmUKICAgICAgICAgICAgY29uc3QgY29yZUdyYWRpZW50ID0gY3R4LmNyZWF0ZVJhZGlhbEdyYWRpZW50KGljb25YLCBjZW50ZXJZLCAwLCBpY29uWCwgY2VudGVyWSwgNTApOwogICAgICAgICAgICBjb3JlR3JhZGllbnQuYWRkQ29sb3JTdG9wKDAsICcjRUM0ODk5Jyk7CiAgICAgICAgICAgIGNvcmVHcmFkaWVudC5hZGRDb2xvclN0b3AoMC41LCAnIzdDM0FFRCcpOwogICAgICAgICAgICBjb3JlR3JhZGllbnQuYWRkQ29sb3JTdG9wKDEsICdyZ2JhKDEyNCwgNTgsIDIzNywgMCknKTsKICAgICAgICAgICAgCiAgICAgICAgICAgIGN0eC5maWxsU3R5bGUgPSBjb3JlR3JhZGllbnQ7CiAgICAgICAgICAgIGN0eC5iZWdpblBhdGgoKTsKICAgICAgICAgICAgY3R4LmFyYyhpY29uWCwgY2VudGVyWSwgNTAsIDAsIE1hdGguUEkgKiAyKTsKICAgICAgICAgICAgY3R4LmZpbGwoKTsKICAgICAgICAgICAgCiAgICAgICAgICAgIGNvbnN0IGlubmVyR3JhZGllbnQgPSBjdHguY3JlYXRlUmFkaWFsR3JhZGllbnQoaWNvblgsIGNlbnRlclksIDAsIGljb25YLCBjZW50ZXJZLCAyNSk7CiAgICAgICAgICAgIGlubmVyR3JhZGllbnQuYWRkQ29sb3JTdG9wKDAsICcjRkZGRkZGJyk7CiAgICAgICAgICAgIGlubmVyR3JhZGllbnQuYWRkQ29sb3JTdG9wKDEsICcjRUM0ODk5Jyk7CiAgICAgICAgICAgIGN0eC5maWxsU3R5bGUgPSBpbm5lckdyYWRpZW50OwogICAgICAgICAgICBjdHguYmVnaW5QYXRoKCk7CiAgICAgICAgICAgIGN0eC5hcmMoaWNvblgsIGNlbnRlclksIDI1LCAwLCBNYXRoLlBJICogMik7CiAgICAgICAgICAgIGN0eC5maWxsKCk7CiAgICAgICAgICAgIAogICAgICAgICAgICAvLyBUZXh0CiAgICAgICAgICAgIGNvbnN0IHRleHRYID0gaWNvblggKyAyNjA7CiAgICAgICAgICAgIGN0eC5mb250ID0gJ2JvbGQgMTgwcHggIk9yYml0cm9uIiwgIlJhamRoYW5pIiwgIkV4byAyIiwgbW9ub3NwYWNlLCBzYW5zLXNlcmlmJzsKICAgICAgICAgICAgCiAgICAgICAgICAgIGN0eC5maWxsU3R5bGUgPSB0ZXh0Q29sb3I7CiAgICAgICAgICAgIGN0eC5maWxsVGV4dCgnR28nLCB0ZXh0WCwgY2VudGVyWSArIDYwKTsKICAgICAgICAgICAgY29uc3QgZ29XaWR0aCA9IGN0eC5tZWFzdXJlVGV4dCgnR28nKS53aWR0aDsKICAgICAgICAgICAgCiAgICAgICAgICAgIGN0eC5maWxsVGV4dCgnVm8nLCB0ZXh0WCArIGdvV2lkdGgsIGNlbnRlclkgKyA2MCk7CiAgICAgICAgICAgIGNvbnN0IHZvV2lkdGggPSBjdHgubWVhc3VyZVRleHQoJ1ZvJykud2lkdGg7CiAgICAgICAgICAgIAogICAgICAgICAgICBjb25zdCB0ZXh0R3JhZGllbnQgPSBjdHguY3JlYXRlTGluZWFyR3JhZGllbnQodGV4dFggKyBnb1dpZHRoICsgdm9XaWR0aCwgY2VudGVyWSAtIDYwLCB0ZXh0WCArIGdvV2lkdGggKyB2b1dpZHRoICsgMjAwLCBjZW50ZXJZICsgNjApOwogICAgICAgICAgICB0ZXh0R3JhZGllbnQuYWRkQ29sb3JTdG9wKDAsICcjN0MzQUVEJyk7CiAgICAgICAgICAgIHRleHRHcmFkaWVudC5hZGRDb2xvclN0b3AoMSwgJyNFQzQ4OTknKTsKICAgICAgICAgICAgY3R4LmZpbGxTdHlsZSA9IHRleHRHcmFkaWVudDsKICAgICAgICAgICAgY3R4LmZpbGxUZXh0KCdBSScsIHRleHRYICsgZ29XaWR0aCArIHZvV2lkdGgsIGNlbnRlclkgKyA2MCk7CiAgICAgICAgICAgIGNvbnN0IGFpV2lkdGggPSBjdHgubWVhc3VyZVRleHQoJ0FJJykud2lkdGg7CiAgICAgICAgICAgIAogICAgICAgICAgICBjdHguZmlsbFN0eWxlID0gdGV4dENvbG9yOwogICAgICAgICAgICBjdHguZmlsbFRleHQoJ2NlJywgdGV4dFggKyBnb1dpZHRoICsgdm9XaWR0aCArIGFpV2lkdGgsIGNlbnRlclkgKyA2MCk7CiAgICAgICAgICAgIGNvbnN0IGNlV2lkdGggPSBjdHgubWVhc3VyZVRleHQoJ2NlJykud2lkdGg7CiAgICAgICAgICAgIAogICAgICAgICAgICBjdHguZm9udCA9ICdib2xkIDE0MHB4ICJPcmJpdHJvbiIsICJSYWpkaGFuaSIsICJFeG8gMiIsIG1vbm9zcGFjZSwgc2Fucy1zZXJpZic7CiAgICAgICAgICAgIGN0eC5maWxsVGV4dCgnQWknLCB0ZXh0WCArIGdvV2lkdGggKyB2b1dpZHRoICsgYWlXaWR0aCArIGNlV2lkdGggKyA0MCwgY2VudGVyWSArIDUwKTsKICAgICAgICAgICAgCiAgICAgICAgICAgIGN0eC5mb250ID0gJzUycHggIk9yYml0cm9uIiwgIlJhamRoYW5pIiwgIkV4byAyIiwgbW9ub3NwYWNlLCBzYW5zLXNlcmlmJzsKICAgICAgICAgICAgY3R4LmZpbGxTdHlsZSA9IHRleHRDb2xvciA9PT0gJyNGRkZGRkYnID8gJ3JnYmEoMjU1LDI1NSwyNTUsMC43KScgOiAncmdiYSgwLDAsMCwwLjYpJzsKICAgICAgICAgICAgY3R4LmZpbGxUZXh0KCdUaGUgQUkgaXMgaW4gdGhlIHZvaWNlJywgdGV4dFgsIGNlbnRlclkgKyAxNTApOwogICAgICAgIH0KICAgICAgICAKICAgICAgICAvLyBWZXJzaW9uIDk6IEZyZXF1ZW5jeSBzcGVjdHJ1bSBhbmFseXplcgogICAgICAgIGZ1bmN0aW9uIGRyYXdWZXJzaW9uOShjYW52YXNJZCwgYmdDb2xvciwgdGV4dENvbG9yKSB7CiAgICAgICAgICAgIGNvbnN0IGNhbnZhcyA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGNhbnZhc0lkKTsKICAgICAgICAgICAgY2FudmFzLndpZHRoID0gV0lEVEg7CiAgICAgICAgICAgIGNhbnZhcy5oZWlnaHQgPSBIRUlHSFQ7CiAgICAgICAgICAgIGNvbnN0IGN0eCA9IGNhbnZhcy5nZXRDb250ZXh0KCcyZCcpOwogICAgICAgICAgICAKICAgICAgICAgICAgaWYgKGJnQ29sb3IgIT09ICd0cmFuc3BhcmVudCcpIHsKICAgICAgICAgICAgICAgIGN0eC5maWxsU3R5bGUgPSBiZ0NvbG9yOwogICAgICAgICAgICAgICAgY3R4LmZpbGxSZWN0KDAsIDAsIFdJRFRILCBIRUlHSFQpOwogICAgICAgICAgICB9CiAgICAgICAgICAgIAogICAgICAgICAgICBjb25zdCBjZW50ZXJZID0gSEVJR0hUIC8gMjsKICAgICAgICAgICAgY29uc3QgaWNvblggPSAzMDA7CiAgICAgICAgICAgIAogICAgICAgICAgICAvLyBEcmF3IHNwZWN0cnVtIGFuYWx5emVyIGJhcnMKICAgICAgICAgICAgY29uc3QgYmFycyA9IDMyOwogICAgICAgICAgICBjb25zdCBiYXJXaWR0aCA9IDEyOwogICAgICAgICAgICBjb25zdCBiYXJHYXAgPSA2OwogICAgICAgICAgICBjb25zdCBtYXhIZWlnaHQgPSAyMDA7CiAgICAgICAgICAgIGNvbnN0IHRvdGFsV2lkdGggPSBiYXJzICogKGJhcldpZHRoICsgYmFyR2FwKSAtIGJhckdhcDsKICAgICAgICAgICAgY29uc3Qgc3RhcnRYID0gaWNvblggLSB0b3RhbFdpZHRoIC8gMjsKICAgICAgICAgICAgCiAgICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgYmFyczsgaSsrKSB7CiAgICAgICAgICAgICAgICBjb25zdCB4ID0gc3RhcnRYICsgaSAqIChiYXJXaWR0aCArIGJhckdhcCk7CiAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgIC8vIENyZWF0ZSB2YXJ5aW5nIGhlaWdodHMgZm9yIHZpc3VhbCBpbnRlcmVzdAogICAgICAgICAgICAgICAgY29uc3QgY2VudGVyRGlzdCA9IE1hdGguYWJzKGkgLSBiYXJzIC8gMikgLyAoYmFycyAvIDIpOwogICAgICAgICAgICAgICAgY29uc3QgaGVpZ2h0RmFjdG9yID0gMC4zICsgKDEgLSBjZW50ZXJEaXN0KSAqIDAuNzsKICAgICAgICAgICAgICAgIGNvbnN0IHdhdmVIZWlnaHQgPSBoZWlnaHRGYWN0b3IgKyBNYXRoLnNpbihpICogMC41KSAqIDAuMzsKICAgICAgICAgICAgICAgIGNvbnN0IGggPSBtYXhIZWlnaHQgKiB3YXZlSGVpZ2h0OwogICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAvLyBHcmFkaWVudCBmb3IgZWFjaCBiYXIKICAgICAgICAgICAgICAgIGNvbnN0IGJhckdyYWRpZW50ID0gY3R4LmNyZWF0ZUxpbmVhckdyYWRpZW50KHgsIGNlbnRlclkgLSBoLzIsIHgsIGNlbnRlclkgKyBoLzIpOwogICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICBpZiAoaSA8IGJhcnMgLyAyKSB7CiAgICAgICAgICAgICAgICAgICAgYmFyR3JhZGllbnQuYWRkQ29sb3JTdG9wKDAsICcjN0MzQUVEJyk7CiAgICAgICAgICAgICAgICAgICAgYmFyR3JhZGllbnQuYWRkQ29sb3JTdG9wKDEsICcjRUM0ODk5Jyk7CiAgICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgICAgIGJhckdyYWRpZW50LmFkZENvbG9yU3RvcCgwLCAnI0VDNDg5OScpOwogICAgICAgICAgICAgICAgICAgIGJhckdyYWRpZW50LmFkZENvbG9yU3RvcCgxLCAnIzdDM0FFRCcpOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICBjdHguZmlsbFN0eWxlID0gYmFyR3JhZGllbnQ7CiAgICAgICAgICAgICAgICBjdHguYmVnaW5QYXRoKCk7CiAgICAgICAgICAgICAgICBjdHgucm91bmRSZWN0KHgsIGNlbnRlclkgLSBoLzIsIGJhcldpZHRoLCBoLCA0KTsKICAgICAgICAgICAgICAgIGN0eC5maWxsKCk7CiAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgIC8vIEFkZCBnbG93IGVmZmVjdCBvbiB0YWxsZXN0IGJhcnMKICAgICAgICAgICAgICAgIGlmICh3YXZlSGVpZ2h0ID4gMC44KSB7CiAgICAgICAgICAgICAgICAgICAgY3R4Lmdsb2JhbEFscGhhID0gMC41OwogICAgICAgICAgICAgICAgICAgIGN0eC5zaGFkb3dDb2xvciA9IGkgPCBiYXJzIC8gMiA/ICcjN0MzQUVEJyA6ICcjRUM0ODk5JzsKICAgICAgICAgICAgICAgICAgICBjdHguc2hhZG93Qmx1ciA9IDIwOwogICAgICAgICAgICAgICAgICAgIGN0eC5maWxsKCk7CiAgICAgICAgICAgICAgICAgICAgY3R4LnNoYWRvd0JsdXIgPSAwOwogICAgICAgICAgICAgICAgICAgIGN0eC5nbG9iYWxBbHBoYSA9IDE7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICAgICAgCiAgICAgICAgICAgIC8vIEFkZCBlcXVhbGl6ZXIgbGluZQogICAgICAgICAgICBjdHguc3Ryb2tlU3R5bGUgPSB0ZXh0Q29sb3IgPT09ICcjRkZGRkZGJyA/ICdyZ2JhKDI1NSwyNTUsMjU1LDAuMyknIDogJ3JnYmEoMCwwLDAsMC4zKSc7CiAgICAgICAgICAgIGN0eC5saW5lV2lkdGggPSAyOwogICAgICAgICAgICBjdHguYmVnaW5QYXRoKCk7CiAgICAgICAgICAgIGN0eC5tb3ZlVG8oc3RhcnRYLCBjZW50ZXJZKTsKICAgICAgICAgICAgY3R4LmxpbmVUbyhzdGFydFggKyB0b3RhbFdpZHRoLCBjZW50ZXJZKTsKICAgICAgICAgICAgY3R4LnN0cm9rZSgpOwogICAgICAgICAgICAKICAgICAgICAgICAgLy8gVGV4dAogICAgICAgICAgICBjb25zdCB0ZXh0WCA9IGljb25YICsgdG90YWxXaWR0aCAvIDIgKyAxMjA7CiAgICAgICAgICAgIGN0eC5mb250ID0gJ2JvbGQgMTgwcHggIk9yYml0cm9uIiwgIlJhamRoYW5pIiwgIkV4byAyIiwgbW9ub3NwYWNlLCBzYW5zLXNlcmlmJzsKICAgICAgICAgICAgCiAgICAgICAgICAgIGN0eC5maWxsU3R5bGUgPSB0ZXh0Q29sb3I7CiAgICAgICAgICAgIGN0eC5maWxsVGV4dCgnR28nLCB0ZXh0WCwgY2VudGVyWSArIDYwKTsKICAgICAgICAgICAgY29uc3QgZ29XaWR0aCA9IGN0eC5tZWFzdXJlVGV4dCgnR28nKS53aWR0aDsKICAgICAgICAgICAgCiAgICAgICAgICAgIGN0eC5maWxsVGV4dCgnVm8nLCB0ZXh0WCArIGdvV2lkdGgsIGNlbnRlclkgKyA2MCk7CiAgICAgICAgICAgIGNvbnN0IHZvV2lkdGggPSBjdHgubWVhc3VyZVRleHQoJ1ZvJykud2lkdGg7CiAgICAgICAgICAgIAogICAgICAgICAgICBjb25zdCB0ZXh0R3JhZGllbnQgPSBjdHguY3JlYXRlTGluZWFyR3JhZGllbnQodGV4dFggKyBnb1dpZHRoICsgdm9XaWR0aCwgY2VudGVyWSAtIDYwLCB0ZXh0WCArIGdvV2lkdGggKyB2b1dpZHRoICsgMjAwLCBjZW50ZXJZICsgNjApOwogICAgICAgICAgICB0ZXh0R3JhZGllbnQuYWRkQ29sb3JTdG9wKDAsICcjN0MzQUVEJyk7CiAgICAgICAgICAgIHRleHRHcmFkaWVudC5hZGRDb2xvclN0b3AoMSwgJyNFQzQ4OTknKTsKICAgICAgICAgICAgY3R4LmZpbGxTdHlsZSA9IHRleHRHcmFkaWVudDsKICAgICAgICAgICAgY3R4LmZpbGxUZXh0KCdBSScsIHRleHRYICsgZ29XaWR0aCArIHZvV2lkdGgsIGNlbnRlclkgKyA2MCk7CiAgICAgICAgICAgIGNvbnN0IGFpV2lkdGggPSBjdHgubWVhc3VyZVRleHQoJ0FJJykud2lkdGg7CiAgICAgICAgICAgIAogICAgICAgICAgICBjdHguZmlsbFN0eWxlID0gdGV4dENvbG9yOwogICAgICAgICAgICBjdHguZmlsbFRleHQoJ2NlJywgdGV4dFggKyBnb1dpZHRoICsgdm9XaWR0aCArIGFpV2lkdGgsIGNlbnRlclkgKyA2MCk7CiAgICAgICAgICAgIGNvbnN0IGNlV2lkdGggPSBjdHgubWVhc3VyZVRleHQoJ2NlJykud2lkdGg7CiAgICAgICAgICAgIAogICAgICAgICAgICBjdHguZm9udCA9ICdib2xkIDE0MHB4ICJPcmJpdHJvbiIsICJSYWpkaGFuaSIsICJFeG8gMiIsIG1vbm9zcGFjZSwgc2Fucy1zZXJpZic7CiAgICAgICAgICAgIGN0eC5maWxsVGV4dCgnQWknLCB0ZXh0WCArIGdvV2lkdGggKyB2b1dpZHRoICsgYWlXaWR0aCArIGNlV2lkdGggKyA0MCwgY2VudGVyWSArIDUwKTsKICAgICAgICAgICAgCiAgICAgICAgICAgIGN0eC5mb250ID0gJzUycHggIk9yYml0cm9uIiwgIlJhamRoYW5pIiwgIkV4byAyIiwgbW9ub3NwYWNlLCBzYW5zLXNlcmlmJzsKICAgICAgICAgICAgY3R4LmZpbGxTdHlsZSA9IHRleHRDb2xvciA9PT0gJyNGRkZGRkYnID8gJ3JnYmEoMjU1LDI1NSwyNTUsMC43KScgOiAncmdiYSgwLDAsMCwwLjYpJzsKICAgICAgICAgICAgY3R4LmZpbGxUZXh0KCdUaGUgQUkgaXMgaW4gdGhlIHZvaWNlJywgdGV4dFgsIGNlbnRlclkgKyAxNTApOwogICAgICAgIH0KICAgICAgICAKICAgICAgICAvLyBEcmF3IGFsbCB2ZXJzaW9ucwogICAgICAgIGRyYXdWZXJzaW9uNygndjctd2hpdGUnLCAnI0ZGRkZGRicsICcjMDAwMDAwJyk7CiAgICAgICAgZHJhd1ZlcnNpb243KCd2Ny1ibGFjaycsICcjMDAwMDAwJywgJyNGRkZGRkYnKTsKICAgICAgICBkcmF3VmVyc2lvbjcoJ3Y3LXRyYW5zcGFyZW50JywgJ3RyYW5zcGFyZW50JywgJyMwMDAwMDAnKTsKICAgICAgICAKICAgICAgICBkcmF3VmVyc2lvbjgoJ3Y4LXdoaXRlJywgJyNGRkZGRkYnLCAnIzAwMDAwMCcpOwogICAgICAgIGRyYXdWZXJzaW9uOCgndjgtYmxhY2snLCAnIzAwMDAwMCcsICcjRkZGRkZGJyk7CiAgICAgICAgZHJhd1ZlcnNpb244KCd2OC10cmFuc3BhcmVudCcsICd0cmFuc3BhcmVudCcsICcjMDAwMDAwJyk7CiAgICAgICAgCiAgICAgICAgZHJhd1ZlcnNpb245KCd2OS13aGl0ZScsICcjRkZGRkZGJywgJyMwMDAwMDAnKTsKICAgICAgICBkcmF3VmVyc2lvbjkoJ3Y5LWJsYWNrJywgJyMwMDAwMDAnLCAnI0ZGRkZGRicpOwogICAgICAgIGRyYXdWZXJzaW9uOSgndjktdHJhbnNwYXJlbnQnLCAndHJhbnNwYXJlbnQnLCAnIzAwMDAwMCcpOwogICAgICAgIAogICAgICAgIC8vIERvd25sb2FkIGZ1bmN0aW9uCiAgICAgICAgZnVuY3Rpb24gZG93bmxvYWQoY2FudmFzSWQsIGZpbGVuYW1lKSB7CiAgICAgICAgICAgIGNvbnN0IGNhbnZhcyA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGNhbnZhc0lkKTsKICAgICAgICAgICAgY29uc3QgbGluayA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2EnKTsKICAgICAgICAgICAgbGluay5kb3dubG9hZCA9IGZpbGVuYW1lOwogICAgICAgICAgICBsaW5rLmhyZWYgPSBjYW52YXMudG9EYXRhVVJMKCdpbWFnZS9wbmcnKTsKICAgICAgICAgICAgbGluay5jbGljaygpOwogICAgICAgIH0KICAgIDwvc2NyaXB0Pgo8L2JvZHk+CjwvaHRtbD4=","embed":""}
GoVoaice Ai Logo Designs - Purple & Magenta Scheme
Version 7 - White Background
Version 7 - Black Background
Version 7 - Transparent
Version 8 - White Background
Version 8 - Black Background
Version 8 - Transparent
Version 9 - White Background
Version 9 - Black Background
Version 9 - Transparent
New Brand Colors
Vibrant Purple
#7C3AED
Electric Magenta
#EC4899