-
Notifications
You must be signed in to change notification settings - Fork 0
/
BlueFNP.vex
1 lines (1 loc) · 20.5 KB
/
BlueFNP.vex
1
./___ThIsisATemPoRaRyFiLE___.json 000644 000765 000024 0000045753 13452215426 020212 0 ustar 00Kevin 000000 000000 13452215426 13452215426 {"title":"BlueFNP","description":"Use this template for all competition code.","version":"0.0.1","icon":"USER000x.bmp","competition":true,"files":{"robot-config.h":"dXNpbmcgbmFtZXNwYWNlIHZleDsKdmV4OjpicmFpbiBCcmFpbjsKdmV4Ojptb3RvciBMZWZ0QmFja0RyaXZlICh2ZXg6OlBPUlQxLCB2ZXg6OmdlYXJTZXR0aW5nOjpyYXRpbzE4XzEsZmFsc2UpOwp2ZXg6Om1vdG9yIExlZnRGcm9udERyaXZlICh2ZXg6OlBPUlQyLCB2ZXg6OmdlYXJTZXR0aW5nOjpyYXRpbzE4XzEsdHJ1ZSk7CnZleDo6bW90b3IgRmx5ICh2ZXg6OlBPUlQzLCB2ZXg6OmdlYXJTZXR0aW5nOjpyYXRpbzE4XzEsZmFsc2UpOwp2ZXg6Om1vdG9yIEludGFrZSAodmV4OjpQT1JUNSwgdmV4OjpnZWFyU2V0dGluZzo6cmF0aW8xOF8xLGZhbHNlKTsKdmV4Ojptb3RvciBGZWVkZXIgKHZleDo6UE9SVDYsIHZleDo6Z2VhclNldHRpbmc6OnJhdGlvMThfMSxmYWxzZSk7CnZleDo6bW90b3IgUmlnaHRGcm9udERyaXZlICh2ZXg6OlBPUlQ3LCB2ZXg6OmdlYXJTZXR0aW5nOjpyYXRpbzE4XzEsZmFsc2UpOwp2ZXg6Om1vdG9yIFJpZ2h0QmFja0RyaXZlICh2ZXg6OlBPUlQ4LCB2ZXg6OmdlYXJTZXR0aW5nOjpyYXRpbzE4XzEsdHJ1ZSk7CnZleDo6bW90b3IgU2VjcmV0V2VhcG9uICh2ZXg6OlBPUlQ5LCB2ZXg6OmdlYXJTZXR0aW5nOjpyYXRpbzE4XzEsdHJ1ZSk7CnZleDo6Y29udHJvbGxlciBDb250cm9sbGVyMTsKdmV4Ojpjb21wZXRpdGlvbiBDb21wZXRpdGlvbjs=","main.cpp":"LyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwovKiAgICAgICAgICAgICAgICAgICAgICAgICAgICBBbGV4ICBLbGF0c2t5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi8qICAgICAgICBSYW5uZXkgU2Nob29sICAtICAzODE1TSAgLSAgU3BpdGZpcmUgKEJsaXR6IEFsbGlhbmNlKSAgICAgICAgKi8KLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwovKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCgojaW5jbHVkZSA8cm9ib3QtY29uZmlnLmg+CnVzaW5nIG5hbWVzcGFjZSB2ZXg7CiNpbmNsdWRlIDxtYXRoLmg+CiNpbmNsdWRlIDxzdGRsaWIuaD4KdXNpbmcgbmFtZXNwYWNlIHN0ZDsKdmV4OjpsaW5lIGxpbmUxKEJyYWluLlRocmVlV2lyZVBvcnQuQSk7CnZleDo6bGluZSBsaW5lMihCcmFpbi5UaHJlZVdpcmVQb3J0LkIpOwoKdm9pZCBwcmVfYXV0b24oIHZvaWQgKSB7ICAKICAgIAp9CgoKdm9pZCBmb3J3YXJkKGludCB4LGludCB2KXsKICAgIFJpZ2h0RnJvbnREcml2ZS5zdGFydFJvdGF0ZUZvcih4LHJvdGF0aW9uVW5pdHM6OmRlZyx2LHZlbG9jaXR5VW5pdHM6OnBjdCk7CiAgICBSaWdodEJhY2tEcml2ZS5zdGFydFJvdGF0ZUZvcih4LHJvdGF0aW9uVW5pdHM6OmRlZyx2LHZlbG9jaXR5VW5pdHM6OnBjdCk7CiAgICBMZWZ0RnJvbnREcml2ZS5zdGFydFJvdGF0ZUZvcih4LHJvdGF0aW9uVW5pdHM6OmRlZyx2LHZlbG9jaXR5VW5pdHM6OnBjdCk7CiAgICBMZWZ0QmFja0RyaXZlLnN0YXJ0Um90YXRlRm9yKHgscm90YXRpb25Vbml0czo6ZGVnLHYsdmVsb2NpdHlVbml0czo6cGN0KTsKfQp2b2lkIGJhY2t3YXJkKGludCB4LGludCB2KXsKICAgIFJpZ2h0RnJvbnREcml2ZS5zdGFydFJvdGF0ZUZvcigteCxyb3RhdGlvblVuaXRzOjpkZWcsdix2ZWxvY2l0eVVuaXRzOjpwY3QpOwogICAgUmlnaHRCYWNrRHJpdmUuc3RhcnRSb3RhdGVGb3IoLXgscm90YXRpb25Vbml0czo6ZGVnLHYsdmVsb2NpdHlVbml0czo6cGN0KTsKICAgIExlZnRGcm9udERyaXZlLnN0YXJ0Um90YXRlRm9yKC14LHJvdGF0aW9uVW5pdHM6OmRlZyx2LHZlbG9jaXR5VW5pdHM6OnBjdCk7CiAgICBMZWZ0QmFja0RyaXZlLnN0YXJ0Um90YXRlRm9yKC14LHJvdGF0aW9uVW5pdHM6OmRlZyx2LHZlbG9jaXR5VW5pdHM6OnBjdCk7Cn0Kdm9pZCB0dXJuUmlnaHQoaW50IHgsaW50IHYpewogICAgUmlnaHRGcm9udERyaXZlLnN0YXJ0Um90YXRlRm9yKC14LHJvdGF0aW9uVW5pdHM6OmRlZyx2LHZlbG9jaXR5VW5pdHM6OnBjdCk7CiAgICBSaWdodEJhY2tEcml2ZS5zdGFydFJvdGF0ZUZvcigteCxyb3RhdGlvblVuaXRzOjpkZWcsdix2ZWxvY2l0eVVuaXRzOjpwY3QpOwogICAgTGVmdEZyb250RHJpdmUuc3RhcnRSb3RhdGVGb3IoeCxyb3RhdGlvblVuaXRzOjpkZWcsdix2ZWxvY2l0eVVuaXRzOjpwY3QpOwogICAgTGVmdEJhY2tEcml2ZS5zdGFydFJvdGF0ZUZvcih4LHJvdGF0aW9uVW5pdHM6OmRlZyx2LHZlbG9jaXR5VW5pdHM6OnBjdCk7Cn0Kdm9pZCB0dXJuTGVmdChpbnQgeCxpbnQgdil7CiAgICBSaWdodEZyb250RHJpdmUuc3RhcnRSb3RhdGVGb3IoeCxyb3RhdGlvblVuaXRzOjpkZWcsNjUsdmVsb2NpdHlVbml0czo6cGN0KTsKICAgIFJpZ2h0QmFja0RyaXZlLnN0YXJ0Um90YXRlRm9yKHgscm90YXRpb25Vbml0czo6ZGVnLDY1LHZlbG9jaXR5VW5pdHM6OnBjdCk7CiAgICBMZWZ0RnJvbnREcml2ZS5zdGFydFJvdGF0ZUZvcigteCxyb3RhdGlvblVuaXRzOjpkZWcsNjUsdmVsb2NpdHlVbml0czo6cGN0KTsKICAgIExlZnRCYWNrRHJpdmUuc3RhcnRSb3RhdGVGb3IoLXgscm90YXRpb25Vbml0czo6ZGVnLDY1LHZlbG9jaXR5VW5pdHM6OnBjdCk7Cn0KCgoKCgoKdm9pZCBhdXRvbm9tb3VzKCB2b2lkICkgewogICAKICAgIAogICAgCiAgICAKICAgIAogICAgSW50YWtlLnNldE1heFRvcnF1ZSgxMDAscGVyY2VudFVuaXRzOjpwY3QpOyAKICAgIAogICAgRmx5LnNwaW4oZGlyZWN0aW9uVHlwZTo6cmV2LDEwMCx2ZWxvY2l0eVVuaXRzOjpwY3QpOwogICAgSW50YWtlLnNwaW4oZGlyZWN0aW9uVHlwZTo6ZndkLDEwMCx2ZWxvY2l0eVVuaXRzOjpwY3QpOwogICAgZm9yd2FyZCgxMDAwLDY1KTsKICAgIHRhc2s6OnNsZWVwKDIyMDApOwogICAgYmFja3dhcmQoMTAxNSw2NSk7CiAgICB0YXNrOjpzbGVlcCgxNzAwKTsKICAgIHR1cm5SaWdodCgyOTYsNjUpOwogICAgdGFzazo6c2xlZXAoMTEwMCk7CiAgICBGZWVkZXIucm90YXRlRm9yKDIwMCxyb3RhdGlvblVuaXRzOjpkZWcsMTAwLHZlbG9jaXR5VW5pdHM6OnBjdCk7CiAgICBmb3J3YXJkKDkwMCw5MCk7CiAgICB0YXNrOjpzbGVlcCg2MDApOwogICAgRmVlZGVyLnJvdGF0ZUZvcig1MDAscm90YXRpb25Vbml0czo6ZGVnLDEwMCx2ZWxvY2l0eVVuaXRzOjpwY3QpOwogICAgTGVmdEZyb250RHJpdmUuc3RhcnRSb3RhdGVGb3IoMTUwLHJvdGF0aW9uVW5pdHM6OmRlZyw5MCx2ZWxvY2l0eVVuaXRzOjpwY3QpOwogICAgTGVmdEJhY2tEcml2ZS5zdGFydFJvdGF0ZUZvcigxNTAscm90YXRpb25Vbml0czo6ZGVnLDkwLHZlbG9jaXR5VW5pdHM6OnBjdCk7CiAgICB0YXNrOjpzbGVlcCg1MDApOwogICAgZm9yd2FyZCgxMDAsOTApOwogICAgU2VjcmV0V2VhcG9uLnJvdGF0ZUZvcig4NTAscm90YXRpb25Vbml0czo6ZGVnLDEwMCx2ZWxvY2l0eVVuaXRzOjpwY3QpOwogICAgTGVmdEZyb250RHJpdmUuc3RhcnRSb3RhdGVGb3IoLTEzNSxyb3RhdGlvblVuaXRzOjpkZWcsOTAsdmVsb2NpdHlVbml0czo6cGN0KTsKICAgIExlZnRCYWNrRHJpdmUuc3RhcnRSb3RhdGVGb3IoLTEzNSxyb3RhdGlvblVuaXRzOjpkZWcsOTAsdmVsb2NpdHlVbml0czo6cGN0KTsKICAgIHRhc2s6OnNsZWVwKDYwMCk7CiAgICBTZWNyZXRXZWFwb24uc3RhcnRSb3RhdGVGb3IoLTg1MCxyb3RhdGlvblVuaXRzOjpkZWcsMTAwLHZlbG9jaXR5VW5pdHM6OnBjdCk7CiAgICBiYWNrd2FyZCg5MDAsNjApOwogICAgdGFzazo6c2xlZXAoMTQwMCk7CiAgICB0dXJuTGVmdCgxODAsNjUpOwogICAgdGFzazo6c2xlZXAoMTQwMCk7CiAgICBJbnRha2Uuc3BpbihkaXJlY3Rpb25UeXBlOjpyZXYsMTAwLHZlbG9jaXR5VW5pdHM6OnBjdCk7CiAgICBmb3J3YXJkKDU4MCw2NSk7CiAgICBGZWVkZXIuc3BpbihkaXJlY3Rpb25UeXBlOjpmd2QsMTAwLHZlbG9jaXR5VW5pdHM6OnBjdCk7CiAgIAp9CgoKLy9VU0VSQ09OVFJPTAp2b2lkIHVzZXJjb250cm9sKCB2b2lkICkgewogIC8vIFVzZXIgY29udHJvbCBjb2RlIGhlcmUsIGluc2lkZSB0aGUgbG9vcAogIHdoaWxlICgxKXsKICAgIFJpZ2h0RnJvbnREcml2ZS5zZXRNYXhUb3JxdWUoMTAwLHBlcmNlbnRVbml0czo6cGN0KTsKICAgIFJpZ2h0QmFja0RyaXZlLnNldE1heFRvcnF1ZSgxMDAscGVyY2VudFVuaXRzOjpwY3QpOyAKICAgIExlZnRGcm9udERyaXZlLnNldE1heFRvcnF1ZSgxMDAscGVyY2VudFVuaXRzOjpwY3QpOyAKICAgIExlZnRCYWNrRHJpdmUuc2V0TWF4VG9ycXVlKDEwMCxwZXJjZW50VW5pdHM6OnBjdCk7CiAgICBGbHkuc2V0TWF4VG9ycXVlKDEwMCxwZXJjZW50VW5pdHM6OnBjdCk7IAogICAgICBTZWNyZXRXZWFwb24uc2V0TWF4VG9ycXVlKDEwMCxwZXJjZW50VW5pdHM6OnBjdCk7IAogICAgIAogICAgLy9DaGFuZ2UgU2Vuc2l0aXZpdHkgb2YgQ29udHJvbGxlciwgQXhpczEKICAgIGludCB2YWx1ZTE9MDsKICAgIGludCB2YWx1ZTM9MDsKICAgICAgCiAgICBpZihDb250cm9sbGVyMS5BeGlzMS52YWx1ZSgpPjAmJkNvbnRyb2xsZXIxLkF4aXMxLnZhbHVlKCk8PTEwMCl7CiAgICAgICAgdmFsdWUxPUNvbnRyb2xsZXIxLkF4aXMxLnZhbHVlKCkvMjsKICAgIH0KICAgIGVsc2UgaWYoQ29udHJvbGxlcjEuQXhpczEudmFsdWUoKT4xMDApewogICAgICAgIHZhbHVlMT1wb3coQ29udHJvbGxlcjEuQXhpczEudmFsdWUoKSwyKS8yMDA7CiAgICB9CiAgICBpZihDb250cm9sbGVyMS5BeGlzMS52YWx1ZSgpPDAmJkNvbnRyb2xsZXIxLkF4aXMxLnZhbHVlKCk+PS0xMDApewogICAgICAgIHZhbHVlMT1Db250cm9sbGVyMS5BeGlzMS52YWx1ZSgpLzI7CiAgICB9CiAgICBlbHNlIGlmKENvbnRyb2xsZXIxLkF4aXMxLnZhbHVlKCk8LTEwMCl7CiAgICAgICAgdmFsdWUxPS1wb3coQ29udHJvbGxlcjEuQXhpczEudmFsdWUoKSwyKS8yMDA7CiAgICB9IAogICAgICAKICAgIC8vVmFsdWUgMyBVbmNoYW5nZWQKICAgIHZhbHVlMz0oQ29udHJvbGxlcjEuQXhpczMudmFsdWUoKSk7IAogICAgTGVmdEZyb250RHJpdmUuc3Bpbih2ZXg6OmRpcmVjdGlvblR5cGU6OmZ3ZCwodmFsdWUxK3ZhbHVlMyksdmV4Ojp2ZWxvY2l0eVVuaXRzOjpwY3QpOwogICAgTGVmdEJhY2tEcml2ZS5zcGluKHZleDo6ZGlyZWN0aW9uVHlwZTo6ZndkLCh2YWx1ZTErdmFsdWUzKSx2ZXg6OnZlbG9jaXR5VW5pdHM6OnBjdCk7IAogICAgUmlnaHRGcm9udERyaXZlLnNwaW4odmV4OjpkaXJlY3Rpb25UeXBlOjpyZXYsKHZhbHVlMS12YWx1ZTMpLHZleDo6dmVsb2NpdHlVbml0czo6cGN0KTsgCiAgICBSaWdodEJhY2tEcml2ZS5zcGluKHZleDo6ZGlyZWN0aW9uVHlwZTo6cmV2LCh2YWx1ZTEtdmFsdWUzKSx2ZXg6OnZlbG9jaXR5VW5pdHM6OnBjdCk7CiAgICAKICAgIAogICAgaWYoQ29udHJvbGxlcjEuQnV0dG9uUjIucHJlc3NpbmcoKSkKICAgIHsKICAgICAgICBJbnRha2Uuc3BpbihkaXJlY3Rpb25UeXBlOjpmd2QsMjAwLHZlbG9jaXR5VW5pdHM6OnJwbSk7CiAgICB9CiAgICBlbHNlIGlmKENvbnRyb2xsZXIxLkJ1dHRvblIxLnByZXNzaW5nKCkpCiAgICB7CiAgICAgICAgSW50YWtlLnNwaW4oZGlyZWN0aW9uVHlwZTo6cmV2LDIwMCx2ZWxvY2l0eVVuaXRzOjpycG0pOwogICAgfQogICAgZWxzZQogICAgewogICAgICBJbnRha2Uuc3RvcChicmFrZVR5cGU6OmNvYXN0KTsKICAgICAgIAogICAgfQogICAgICAKICAgIAogICAgLyoKICAgIGlmKENvbnRyb2xsZXIxLkJ1dHRvbkwxLnByZXNzaW5nKCkpCiAgICB7CiAgICAgICAgSW50YWtlLnNwaW4oZGlyZWN0aW9uVHlwZTo6ZndkLDIwMCx2ZWxvY2l0eVVuaXRzOjpycG0pOwogICAgICAgIEZlZWRlci5yb3RhdGVGb3IoMjAwLHJvdGF0aW9uVW5pdHM6OmRlZywxMDAsdmVsb2NpdHlVbml0czo6cGN0KTsKICAgICAgICBTZWNyZXRXZWFwb24uc3BpbihkaXJlY3Rpb25UeXBlOjpyZXYsMjAwLHZlbG9jaXR5VW5pdHM6OnJwbSk7CiAgICAgICAgdGFzazo6c2xlZXAoMTAwKTsKICAgICAgICBGZWVkZXIuc3BpbihkaXJlY3Rpb25UeXBlOjpmd2QsMjAwLHZlbG9jaXR5VW5pdHM6OnJwbSk7CiAgICAgICAgdGFzazo6c2xlZXAoMzAwKTsKICAgICAgICBTZWNyZXRXZWFwb24uc3RvcChicmFrZVR5cGU6OmhvbGQpOwogICAgICAgIEludGFrZS5zdG9wKGJyYWtlVHlwZTo6Y29hc3QpOwogICAgICAgIEZlZWRlci5zdG9wKGJyYWtlVHlwZTo6Y29hc3QpOwogICAgICAgIHRhc2s6OnNsZWVwKDMwMCk7CiAgICAgICAgU2VjcmV0V2VhcG9uLnJvdGF0ZUZvcigtMTUscm90YXRpb25Vbml0czo6ZGVnLDEwMCx2ZWxvY2l0eVVuaXRzOjpwY3QpOwogICAgfSAgCiAgICAqLwogICAgICAKICAgICAgCiAgICAgIGlmKENvbnRyb2xsZXIxLkJ1dHRvbkwxLnByZXNzaW5nKCkpCiAgICB7CiAgICAgICAgRmVlZGVyLnN0YXJ0Um90YXRlRm9yKDIwMCxyb3RhdGlvblVuaXRzOjpkZWcsMTAwLHZlbG9jaXR5VW5pdHM6OnBjdCk7CiAgICAgICAgSW50YWtlLnN0YXJ0Um90YXRlRm9yKDEwMCxyb3RhdGlvblVuaXRzOjpkZWcsMTAwLHZlbG9jaXR5VW5pdHM6OnBjdCk7CiAgICAgICAgICB0YXNrOjpzbGVlcCgyMDApOwogICAgICAgICAgUmlnaHRGcm9udERyaXZlLnNwaW4oZGlyZWN0aW9uVHlwZTo6ZndkLDIwMCx2ZWxvY2l0eVVuaXRzOjpycG0pOwogICAgICAgICAgUmlnaHRCYWNrRHJpdmUuc3BpbihkaXJlY3Rpb25UeXBlOjpmd2QsMjAwLHZlbG9jaXR5VW5pdHM6OnJwbSk7CiAgICAgICAgICBMZWZ0RnJvbnREcml2ZS5zcGluKGRpcmVjdGlvblR5cGU6OmZ3ZCwyMDAsdmVsb2NpdHlVbml0czo6cnBtKTsKICAgICAgICAgIExlZnRCYWNrRHJpdmUuc3BpbihkaXJlY3Rpb25UeXBlOjpmd2QsMjAwLHZlbG9jaXR5VW5pdHM6OnJwbSk7CiAgICAgICAgICBTZWNyZXRXZWFwb24uc3BpbihkaXJlY3Rpb25UeXBlOjpyZXYsMTAwLHZlbG9jaXR5VW5pdHM6OnJwbSk7CiAgICAgICAgdGFzazo6c2xlZXAoMTAwKTsKICAgICAgICBGZWVkZXIuc3BpbihkaXJlY3Rpb25UeXBlOjpmd2QsMjAwLHZlbG9jaXR5VW5pdHM6OnJwbSk7CiAgICAgICAgSW50YWtlLnNwaW4oZGlyZWN0aW9uVHlwZTo6ZndkLDIwMCx2ZWxvY2l0eVVuaXRzOjpycG0pOwogICAgICAgIFNlY3JldFdlYXBvbi5zcGluKGRpcmVjdGlvblR5cGU6OnJldiwxMDAsdmVsb2NpdHlVbml0czo6cnBtKTsKICAgICAgICB0YXNrOjpzbGVlcCgzMDApOyAKICAgIH0gCiAgICAgIAogICAvL0ZlZWRlciAgCiAgICBpZihDb250cm9sbGVyMS5CdXR0b25MMi5wcmVzc2luZygpKQogICAgewogICAgICAgIEludGFrZS5zdGFydFJvdGF0ZUZvcigyMDAwLHJvdGF0aW9uVW5pdHM6OmRlZywxMDAsdmVsb2NpdHlVbml0czo6cGN0KTsKICAgICAgICBGZWVkZXIucm90YXRlRm9yKDIwMCxyb3RhdGlvblVuaXRzOjpkZWcsMTAwLHZlbG9jaXR5VW5pdHM6OnBjdCk7CgogICAgfQogICAgZWxzZQogICAgewogICAgICAgIEZlZWRlci5zdG9wKGJyYWtlVHlwZTo6Y29hc3QpOwogICAgfQogICAgICAKICAgIC8vU1cgIAogICAgaWYoQ29udHJvbGxlcjEuQnV0dG9uQS5wcmVzc2luZygpKQogICAgewogICAgICAgIFNlY3JldFdlYXBvbi5zcGluKGRpcmVjdGlvblR5cGU6OmZ3ZCwxNzAsdmVsb2NpdHlVbml0czo6cnBtKTsKICAgIH0KICAgIGVsc2UgaWYoQ29udHJvbGxlcjEuQnV0dG9uWS5wcmVzc2luZygpKQogICAgewogICAgICAgIFNlY3JldFdlYXBvbi5zcGluKGRpcmVjdGlvblR5cGU6OnJldiwxNzAsdmVsb2NpdHlVbml0czo6cnBtKTsKICAgIH0KICAgIGVsc2UKICAgIHsKICAgICAgIFNlY3JldFdlYXBvbi5zdG9wKGJyYWtlVHlwZTo6Y29hc3QpOwogICAgfSAgCiAgICAgIGlmKENvbnRyb2xsZXIxLkJ1dHRvbkIucHJlc3NpbmcoKSkKICAgIHsKICAgICAgICBGZWVkZXIuc3BpbihkaXJlY3Rpb25UeXBlOjpyZXYsMjAwLHZlbG9jaXR5VW5pdHM6OnJwbSk7CiAgICB9CiAgICAKICAgIC8vRmx5CiAgICBpZihDb250cm9sbGVyMS5CdXR0b25VcC5wcmVzc2luZygpKQogICAgewogICAgICAgIEZseS5zcGluKGRpcmVjdGlvblR5cGU6OnJldiwyMDAsdmVsb2NpdHlVbml0czo6cnBtKTsKICAgIH0KICAgIGVsc2UgaWYoQ29udHJvbGxlcjEuQnV0dG9uRG93bi5wcmVzc2luZygpKQogICAgeyAKICAgICAgICAgRmx5LnN0b3AoYnJha2VUeXBlOjpjb2FzdCk7CiAgICB9CiAgICBlbHNlCiAgICB7CiAgICAgICAKICAgIH0KICAgIAogICAKICAgICAgCiAgICAgIAogICAgdmV4Ojp0YXNrOjpzbGVlcCgyMCk7CiAgfQp9CiAgIAoKCgoKCi8vU1RBUlQgUElECmludCBzZ24oZG91YmxlIHZhbCkKewogICAgcmV0dXJuIHZhbCA+IDAgPyAxIDogLTE7Cn0Kdm9pZCB0dXJuVG8oZG91YmxlIGRlZ3JlZXMsIGRvdWJsZSBzcGVlZCA9IDYwKQp7CiAgICBkZWdyZWVzICo9IDk2LjAvOTAuMDsKICAgIGRvdWJsZSBQID0gMCwga3AgPS43OwogICAgZG91YmxlIEkgPSAwLCBraSA9IDAuMDA0OwogICAgZG91YmxlIEQgPSAwLCBrZCA9IDAuMDM7CiAgICBkb3VibGUgZXJyb3IgPSAxMDA7IAogICAgZG91YmxlIGxhc3RFcnJvciA9IDEwMDsKICAgIGRvdWJsZSBtb3RvclBvd2VyID0gMDsKICAgIGludCBpVGhyZXNoID0gMjU7CiAgICB3aGlsZSh0cnVlKQogICAgewogICAgICAgIGxhc3RFcnJvciA9IGVycm9yOwogICAgICAgIC8vZXJyb3IgPSBkZWdyZWVzIC0gR3lybzEudmFsdWUocm90YXRpb25Vbml0czo6ZGVnKTsKCiAgICAgICAgaWYgKGFicyhlcnJvcikgPiAxODApCiAgICAgICAgICAgIGVycm9yID0gIHNnbihlcnJvcikgKiAoMzYwIC0gYWJzKGVycm9yKSk7CgogICAgICAgIFAgPSBlcnJvciAqIGtwOwogICAgICAgIEQgPSBrZCAqIChlcnJvciAtIGxhc3RFcnJvcik7CgogICAgICAgIGlmIChhYnMoZXJyb3IpIDwgaVRocmVzaCkKICAgICAgICAgICAgSSArPSBlcnJvciAqIGtpOwoKICAgICAgICBpZiAoYWJzKEkpID4gMTUpCiAgICAgICAgICBJID0gMTUgKiBzZ24oZXJyb3IpOwoKICAgICAgICBtb3RvclBvd2VyID0gUCArIEkgKyBEOwoKICAgICAgICBpZihhYnMoZXJyb3IpIDw9IDAuMSAmJiBhYnMobGFzdEVycm9yKSA8PSAuMSkgYnJlYWs7IC8vIEJyZWFrIHN0YXRlbWVudAoKICAgICAgICBpZihhYnMobW90b3JQb3dlcikgPiBhYnMoc3BlZWQpKQogICAgICAgICAgICBtb3RvclBvd2VyID0gc3BlZWQgKiBzZ24obW90b3JQb3dlcik7CgogICAgICAgIExlZnRCYWNrRHJpdmUuc3BpbihkaXJlY3Rpb25UeXBlOjpmd2QsIG1vdG9yUG93ZXIsIHZlbG9jaXR5VW5pdHM6OnBjdCk7CiAgICAgICAgUmlnaHRCYWNrRHJpdmUuc3BpbihkaXJlY3Rpb25UeXBlOjpmd2QsIC1tb3RvclBvd2VyLCB2ZWxvY2l0eVVuaXRzOjpwY3QpOwogICAgICAgIFJpZ2h0RnJvbnREcml2ZS5zcGluKGRpcmVjdGlvblR5cGU6OmZ3ZCwgLW1vdG9yUG93ZXIsIHZlbG9jaXR5VW5pdHM6OnBjdCk7CiAgICAgICAgTGVmdEZyb250RHJpdmUuc3BpbihkaXJlY3Rpb25UeXBlOjpmd2QsIG1vdG9yUG93ZXIsIHZlbG9jaXR5VW5pdHM6OnBjdCk7CgogICAgICAgIHRhc2s6OnNsZWVwKDEwKTsKICAgIH0KICAgIExlZnRCYWNrRHJpdmUuc3RvcChicmFrZVR5cGU6OmJyYWtlKTsKICAgIFJpZ2h0QmFja0RyaXZlLnN0b3AoYnJha2VUeXBlOjpicmFrZSk7CiAgICBSaWdodEZyb250RHJpdmUuc3RvcChicmFrZVR5cGU6OmJyYWtlKTsKICAgIExlZnRGcm9udERyaXZlLnN0b3AoYnJha2VUeXBlOjpicmFrZSk7CiAgICB0YXNrOjpzbGVlcCg1MCk7IC8vIFNsZWVwIGhlcmUgc28gd2UgZG8gbm90IGhhdmUgdG8gaW4gdGhlIGF1dG9ub21vdXMgZnVuY3Rpb24KfQoKZG91YmxlIHN0YmxDb25zdCA9IC43OwoKZG91YmxlIHJhbXBVcChkb3VibGUgZGVsdGFWLCBpbnQgY3ljbGVzLCBpbnQgdGltZVNsaWNlLCBkb3VibGUgYW5nbGUgPSAwKQp7CiAgICBkb3VibGUgY3VyclZlbCA9IFJpZ2h0RnJvbnREcml2ZS52ZWxvY2l0eSh2ZWxvY2l0eVVuaXRzOjpwY3QpOwogICAgUmlnaHRGcm9udERyaXZlLnJlc2V0Um90YXRpb24oKTsKICAgIAogICAgLy8gR3lybyBTdGFiaWxpemF0aW9uIHZhcmlhYmxlcwogICAgZG91YmxlIGxlZnRBZGp1c3RQd3IgPSAwOwogICAgZG91YmxlIGluaXQgPSBhbmdsZTsKICAgIAogICAgZm9yIChpbnQgaSA9IDA7IGkgPCBjeWNsZXM7IGkrKykKICAgIHsKICAgICAgICBjdXJyVmVsICs9IGRlbHRhVi9jeWNsZXM7CiAgICAKICAgICAgICAvL2xlZnRBZGp1c3RQd3IgPSBzdGJsQ29uc3QgKiAoR3lybzEudmFsdWUocm90YXRpb25Vbml0czo6ZGVnKSAtIGluaXQpOyAvLyBUcmFja2luZyBkaWZmZXJlbmNlIGluIGd5cm8gdmFsdWUKCiAgICAgICAgLy8gU2V0dGluZyBtb3RvciBwb3dlcnMKICAgICAgICBMZWZ0QmFja0RyaXZlLnNwaW4oZGlyZWN0aW9uVHlwZTo6ZndkLCBjdXJyVmVsIC0gbGVmdEFkanVzdFB3ciwgdmVsb2NpdHlVbml0czo6cGN0KTsKICAgICAgICBSaWdodEJhY2tEcml2ZS5zcGluKGRpcmVjdGlvblR5cGU6OmZ3ZCwgY3VyclZlbCwgdmVsb2NpdHlVbml0czo6cGN0KTsKICAgICAgICBSaWdodEZyb250RHJpdmUuc3BpbihkaXJlY3Rpb25UeXBlOjpmd2QsIGN1cnJWZWwsIHZlbG9jaXR5VW5pdHM6OnBjdCk7CiAgICAgICAgTGVmdEZyb250RHJpdmUuc3BpbihkaXJlY3Rpb25UeXBlOjpmd2QsIGN1cnJWZWwgLSBsZWZ0QWRqdXN0UHdyLCB2ZWxvY2l0eVVuaXRzOjpwY3QpOwoKICAgICAgICB0YXNrOjpzbGVlcCh0aW1lU2xpY2UpOwogICAgfQoKICAgIHJldHVybiBSaWdodEZyb250RHJpdmUucm90YXRpb24ocm90YXRpb25Vbml0czo6cmV2KTsKfQoKdm9pZCBkcml2ZShkb3VibGUgaW5jaGVzLCBkb3VibGUgc3BlZWQsIGludCBjeWNsZXMgPSAxNSwgaW50IHRpbWVTbGljZSA9IDUwLCBkb3VibGUgaGVhZGluZyA9IC0xMjEsIGJvb2wgdHVybiA9IHRydWUpCnsKICAgIC8vIENvbnZlcnRpbmcgaW5jaGVzIHRvIG1vdG9yIHJvdGF0aW9ucwogICAgZG91YmxlIGluaXQgPSAwOwogICAgLy9pZihoZWFkaW5nICE9IC0xMjEpIGluaXQgPSBoZWFkaW5nOwogICAgZG91YmxlIHJvdHMgPSBpbmNoZXMgLyAoNCAqIDMuMTQxNSk7CiAgICByb3RzIC09IHJhbXBVcChzcGVlZCwgY3ljbGVzLCB0aW1lU2xpY2UsIGluaXQpOyAvLyBTdWJ0cmFjdGluZyByYW1waW5nIGRpc3RhbmNlIGZyb20gdG90YWwKCiAgICAvLyBQSUQgVmFyaWFibGVzCiAgICBkb3VibGUgUCA9IDAsIGtwID0gMTUwOyAvLzc1CiAgICBkb3VibGUgSSA9IDAsIGtpID0gLjk1OwogICAgZG91YmxlIEQgPSAwLCBrZCA9IDI1MDsgLy8yMzAKICAgIGRvdWJsZSBlcnJvciA9IDAsIGxFcnJvciA9IDA7CiAgICBkb3VibGUgaVRocmVzaCA9IC41OwogICAgZG91YmxlIG1vdG9yUG93ZXIgPSAwOwoKICAgIC8vIEd5cm8gU3RhYmlsaXphdGlvbiB2YXJpYWJsZXMKICAgIGRvdWJsZSBsZWZ0QWRqdXN0UHdyID0gMDsKCiAgICAvLyBSZXNldCByb3RhdGlvbnMgYmVmb3JlIFBJRCBsb29wCiAgICBSaWdodEZyb250RHJpdmUucmVzZXRSb3RhdGlvbigpOwoKICAgIC8vIFJlc2V0IEJyYWluIFRpbWVyIEJlZm9yZSBQSUQgTG9vcAogICAgQnJhaW4ucmVzZXRUaW1lcigpOwogICAgLy9pbnQgdGhlb3JldGljYWxUaW1lID0gYWJzKHJvdHMgLyAoc3BlZWQgKiAyKSAvIDYwKTsKCiAgICAvLyBQSUQgTG9vcAogICAgd2hpbGUgKGFicyhSaWdodEZyb250RHJpdmUucm90YXRpb24ocm90YXRpb25Vbml0czo6cmV2KSkgPCBhYnMocm90cykvKiAmJiBCcmFpbi50aW1lcih0aW1lVW5pdHM6Om1zZWMpIDwgdGhlb3JldGljYWxUaW1lICsgMTAwMCovKQogICAgewogICAgICAgIC8vIFNldHRpbmcgUElEIFZhcmlhYmxlcwogICAgICAgIGVycm9yID0gcm90cyAtIChSaWdodEZyb250RHJpdmUucm90YXRpb24ocm90YXRpb25Vbml0czo6cmV2KSk7CiAgICAgICAgUCA9IGVycm9yICoga3A7CiAgICAgICAgRCA9IChlcnJvciAtIGxFcnJvcikgKiBrZDsKCiAgICAgICAgaWYgKGFicyhlcnJvcikgPCBpVGhyZXNoKQogICAgICAgICAgICBJICs9IGVycm9yICoga2k7CiAgICAgICAgZWxzZQogICAgICAgICAgICBJID0gMDsKCiAgICAgICAgbW90b3JQb3dlciA9IGFicyhQKSArIGFicyhJKSAtIGFicyhEKTsgLy8gTWFudWFsbHkgc2V0dGluZyBtb3RvciBwb3dlcgoKICAgICAgICBpZiAoYWJzKG1vdG9yUG93ZXIpID4gYWJzKHNwZWVkKSkgLy8gTGltaXRpbmcgbW90b3IgcG93ZXIgdG8gdG9wIHNwZWVkCiAgICAgICAgICAgIG1vdG9yUG93ZXIgPSBhYnMoc3BlZWQpOwoKICAgICAgICBpZihzcGVlZCA8IDApIC8vIEluIGNhc2Ugb2YgZ29pbmcgYmFja3dhcmRzCiAgICAgICAgICAgIG1vdG9yUG93ZXIgKj0gLTE7CgogICAgICAgIC8vbGVmdEFkanVzdFB3ciA9IHN0YmxDb25zdCAqIChHeXJvMS52YWx1ZShyb3RhdGlvblVuaXRzOjpkZWcpIC0gaW5pdCk7IC8vIFRyYWNraW5nIGRpZmZlcmVuY2UgaW4gZ3lybyB2YWx1ZQoKICAgICAgICAvLyBTZXR0aW5nIG1vdG9yIHBvd2VycwogICAgICAgIExlZnRCYWNrRHJpdmUuc3BpbihkaXJlY3Rpb25UeXBlOjpmd2QsIG1vdG9yUG93ZXIgLSBsZWZ0QWRqdXN0UHdyLCB2ZWxvY2l0eVVuaXRzOjpwY3QpOwogICAgICAgIFJpZ2h0QmFja0RyaXZlLnNwaW4oZGlyZWN0aW9uVHlwZTo6ZndkLCBtb3RvclBvd2VyLCB2ZWxvY2l0eVVuaXRzOjpwY3QpOwogICAgICAgIFJpZ2h0RnJvbnREcml2ZS5zcGluKGRpcmVjdGlvblR5cGU6OmZ3ZCwgbW90b3JQb3dlciwgdmVsb2NpdHlVbml0czo6cGN0KTsKICAgICAgICBMZWZ0RnJvbnREcml2ZS5zcGluKGRpcmVjdGlvblR5cGU6OmZ3ZCwgbW90b3JQb3dlciAtIGxlZnRBZGp1c3RQd3IsIHZlbG9jaXR5VW5pdHM6OnBjdCk7CgogICAgICAgIHRhc2s6OnNsZWVwKDUwKTsKICAgICAgICBsRXJyb3IgPSBlcnJvcjsKICAgIH0KCiAgICAvLyBTdG9wcGluZyBtb3RvcnMgYWZ0ZXIgbG9vcCBlbmRzCiAgICBMZWZ0QmFja0RyaXZlLnN0b3AoYnJha2VUeXBlOjpicmFrZSk7CiAgICBSaWdodEJhY2tEcml2ZS5zdG9wKGJyYWtlVHlwZTo6YnJha2UpOwogICAgUmlnaHRGcm9udERyaXZlLnN0b3AoYnJha2VUeXBlOjpicmFrZSk7CiAgICBMZWZ0RnJvbnREcml2ZS5zdG9wKGJyYWtlVHlwZTo6YnJha2UpOwogICAgLyppZih0dXJuKQogICAgICAgIHR1cm5Ubyhpbml0KTsKICAgICAgICAqLwogICAgLy8gU2xlZXAgaGVyZSBzbyB3ZSBkbyBub3QgaGF2ZSB0byBpbiB0aGUgYXV0b25vbW91cyBmdW5jdGlvbgogICAgaWYgKGFicyhpbmNoZXMpID49IDE2KQogICAgICAgIHRhc2s6OnNsZWVwKDEwMCk7CiAgICBlbHNlCiAgICAgICAgdGFzazo6c2xlZXAoNTApOwp9Ci8vRU5EIFBJRAoKCgoKCmludCBtYWluKCkgewogICAgcHJlX2F1dG9uKCk7CiAgICBDb21wZXRpdGlvbi5hdXRvbm9tb3VzKCBhdXRvbm9tb3VzICk7CiAgICBDb21wZXRpdGlvbi5kcml2ZXJjb250cm9sKCB1c2VyY29udHJvbCApOwogICAgICAgICAgICAgICAgICAgICAKICAgIHdoaWxlKDEpIHsKICAgICAgdmV4Ojp0YXNrOjpzbGVlcCgxMDApOy8vU2xlZXAgdGhlIHRhc2sgZm9yIGEgc2hvcnQgYW1vdW50IG9mIHRpbWUgdG8gcHJldmVudCB3YXN0ZWQgcmVzb3VyY2VzLgogICAgfSAgICAKICAgICAgIAp9"},"device":{"slot":5,"type":"vexV5"},"language":{"name":"vc++"},"components":[{"name":"RightFrontDrive","class":"vex::motor","port":"7","left":251,"top":318,"type":"motor","data":{"gears":200,"reversed":false}},{"name":"RightBackDrive","class":"vex::motor","port":"8","left":251,"top":486,"type":"motor","data":{"gears":200,"reversed":true}},{"name":"LeftFrontDrive","class":"vex::motor","port":"2","left":64,"top":476,"type":"motor","data":{"gears":200,"reversed":true}},{"name":"Controller1","class":"vex::controller","left":463,"top":192,"type":"controller"},{"name":"Fly","class":"vex::motor","port":"3","left":368,"top":0,"type":"motor","data":{"gears":200,"reversed":false}},{"name":"Feeder","class":"vex::motor","port":"6","left":553,"top":0,"type":"motor","data":{"gears":200,"reversed":false}},{"name":"Intake","class":"vex::motor","port":"5","left":642,"top":467,"type":"motor","data":{"gears":200,"reversed":false}},{"name":"LeftBackDrive","class":"vex::motor","port":"1","left":62,"top":311,"type":"motor","data":{"gears":200,"reversed":false}},{"name":"SecretWeapon","class":"vex::motor","port":"9","left":663,"top":124,"type":"motor","data":{"gears":200,"reversed":true}}]}