分身AI.com × 自分を知るワーク(Session 3)
Session 3: 強み・弱み (Strengths & Blindspots)
ここでは、得意と詰まりポイントを可視化します。正解はありません。思い当たる範囲で、気楽に答えてください。
全10問 / 所要時間: 約10-15分
Q1 / 10
10%
なぜそう思う?(任意)
スキップしました。後からいつでも答え直せます
折り返し地点です
あと5問で強みと盲点が可視化されます。
ここまでの回答はすべて自動保存されています。
Session 3 完了!
0
回答数
0
スキップ数
全体進捗(全48問)
0%
委任できる領域が見えました。次回は伝え方の癖を整えます。
このブラウザに自動保存済みです。次回は同じ端末から続きを再開できます。
CiAgICAoZnVuY3Rpb24gKCkgewogICAgICB2YXIgcWZzU2NyaXB0ID0gZG9jdW1lbnQuY3VycmVudFNjcmlwdDsKICAgICAgdmFyIHFmc0NvbnRhaW5lciA9IHFmc1NjcmlwdCA/IHFmc1NjcmlwdC5jbG9zZXN0KCcucWYtc291bC1jb250YWluZXInKSA6IG51bGw7CiAgICAgIGlmICghcWZzQ29udGFpbmVyKSB7CiAgICAgICAgcmV0dXJuOwogICAgICB9CgogICAgICB2YXIgdXJsUGFyYW1zID0gbmV3IFVSTFNlYXJjaFBhcmFtcyh3aW5kb3cubG9jYXRpb24uc2VhcmNoKTsKCiAgICAgIGZ1bmN0aW9uIHFmT25lKHNlbGVjdG9yKSB7CiAgICAgICAgcmV0dXJuIHFmc0NvbnRhaW5lci5xdWVyeVNlbGVjdG9yKHNlbGVjdG9yKTsKICAgICAgfQoKICAgICAgZnVuY3Rpb24gcWZBbGwoc2VsZWN0b3IpIHsKICAgICAgICByZXR1cm4gcWZzQ29udGFpbmVyLnF1ZXJ5U2VsZWN0b3JBbGwoc2VsZWN0b3IpOwogICAgICB9CgogICAgICAvKiAtLSBRdWVzdGlvbnMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwoKICAgICAgdmFyIFNFU1NJT05fTlVNQkVSID0gMzsKCiAgICAgIHZhciBRRl9TT1VMX1FVRVNUSU9OUyA9IFsKICAgICAgICB7IGlkOiAnQzEnLCB0eXBlOiAnc2hvcnRfdGV4dCcsIHF1ZXN0aW9uOiAn5ZGo44KK44GL44KJ44CM44GT44KM5omL5Lyd44Gj44Gm44CN44Go5pyA44KC6aC844G+44KM44KL44GT44Go44Gv5L2V44Gn44GZ44GL77yfJywgcGxhY2Vob2xkZXI6ICfkvos6IOizh+aWmeaVtOeQhuOAgeipseOBruaVtOeQhuOAgeS6pOa4ieOAgeS8geeUuy4uLicsIGJiU2VjdGlvbjogJ0NSQUZUJywgYmJGaWVsZDogJ+WkieaFi+eahOOBquOBk+OBoOOCj+OCiicgfSwKICAgICAgICB7IGlkOiAnQzInLCB0eXBlOiAnc2hvcnRfdGV4dCcsIHF1ZXN0aW9uOiAn5LuW44Gu5Lq644KI44KK6YCf44GP44O744GG44G+44GP44Gn44GN44KL5L2c5qWt44Gv5L2V44Gn44GZ44GL77yfJywgcGxhY2Vob2xkZXI6ICfkvos6IOODh+OCtuOCpOODs+OAgeaWh+eroOS9nOaIkOOAgeaVsOWApOWIhuaekC4uLicsIGJiU2VjdGlvbjogJ0NSQUZUJywgYmJGaWVsZDogJ+WkieaFi+eahOOBquOBk+OBoOOCj+OCiicgfSwKICAgICAgICB7IGlkOiAnQzMnLCB0eXBlOiAnc2hvcnRfdGV4dCcsIHF1ZXN0aW9uOiAn44GE44Gk44KC5YWI5bu244Gw44GX44GX44GM44Gh44Gq44K/44K544Kv44Gv5L2V44Gn44GZ44GL77yfJywgcGxhY2Vob2xkZXI6ICfkvos6IOe1jOeQhuWHpueQhuOAgeWWtualrembu+ipseOAgeabuOmhnuS9nOaIkC4uLicsIGJiU2VjdGlvbjogJ0NSQUZUJywgYmJGaWVsZDogJ+mdnuWKueeOh+OBquOBk+OBoOOCj+OCiicgfSwKICAgICAgICB7IGlkOiAnQzQnLCB0eXBlOiAnc2NhbGUnLCBxdWVzdGlvbjogJ+iLpuaJi+OBp+OCguS6i+alreS4iuOBr+W/heimgeOBoOOBqOaEn+OBmOOCi+alreWLmeOBruiyoOaLheaEn+OCkumBuOOCk+OBp+OBj+OBoOOBleOBhOOAgicsIHNjYWxlTGFiZWxzOiBbJ+iyoOaLheWwjycsICfjgoTjgoTosqDmi4UnLCAn5pmu6YCaJywgJ+OBi+OBquOCiuiyoOaLhScsICflvLfjgYTosqDmi4UnXSwgYmJTZWN0aW9uOiAnQ1JBRlQnLCBiYkZpZWxkOiAn6Z2e5Yq5546H44Gq44GT44Gg44KP44KKJyB9LAogICAgICAgIHsgaWQ6ICdDNScsIHR5cGU6ICdjaG9pY2UnLCBxdWVzdGlvbjogJ+WFqOalreWLmeOCkuWnlOS7u+OBp+OBjeOCi+OBquOCieOAgeacgOWIneOBq+aJi+aUvuOBl+OBn+OBhOOBruOBr+OBqeOCjOOBp+OBmeOBi++8nycsIG9wdGlvbnM6IFsn5LqL5YuZ44O757WM55CGJywgJ+WWtualreODu+mbhuWuoicsICfliLbkvZzlrp/li5njga7kuIDpg6gnLCAn5pel56iL6Kq/5pW044O76YCj57WhJ10sIGJiU2VjdGlvbjogJ0NSQUZUJywgYmJGaWVsZDogJ+mdnuWKueeOh+OBquOBk+OBoOOCj+OCiicgfSwKICAgICAgICB7IGlkOiAnQzYnLCB0eXBlOiAnc2hvcnRfdGV4dCcsIHF1ZXN0aW9uOiAn6YCG44Gr44CM44GT44GT44Gv6Ieq5YiG44GM5o+h44KK44Gf44GE44CN44Go5oCd44GG6aCY5Z+f44Gv5L2V44Gn44GZ44GL77yfJywgcGxhY2Vob2xkZXI6ICfkvos6IOS8geeUu+OAgeWTgeizquODgeOCp+ODg+OCr+OAgemhp+WuouWvvuW/nC4uLicsIGJiU2VjdGlvbjogJ0NSQUZUK1NUUkFURUdZJywgYmJGaWVsZDogJ+ODhOODvOODqyvni6zoh6rjga7lvLfjgb8nIH0sCiAgICAgICAgeyBpZDogJ0M3JywgdHlwZTogJ2Nob2ljZScsIHF1ZXN0aW9uOiAn5pyA44KC5oiQ5p6c44GM5Ye644KL44GC44Gq44Gf44Gu5YON44GN5pa544Gr6L+R44GE44Gu44Gv77yfJywgb3B0aW9uczogWyfjgb7jgajjgb7jgaPjgZ/pm4bkuK3mmYLplpPlnosnLCAn55+t5pmC6ZaT6auY6aC75bqm5Z6LJywgJ+WvvuipseOBl+OBquOBjOOCiemAsuOCgeOCi+WeiycsICfmnJ/pmZDnm7TliY3jgrnjg5Hjg7zjg4jlnosnXSwgYmJTZWN0aW9uOiAnQ1JBRlQrU1RSQVRFR1knLCBiYkZpZWxkOiAn44OE44O844OrK+eLrOiHquOBruW8t+OBvycgfSwKICAgICAgICB7IGlkOiAnQzgnLCB0eXBlOiAnbG9uZ190ZXh0JywgcXVlc3Rpb246ICfjgYLjgarjgZ/jgYznubDjgorov5TjgZfjgoTjgorjgYzjgaHjgarlpLHmlZfjg5Hjgr/jg7zjg7Pjga/kvZXjgafjgZnjgYvvvJ8nLCBwbGFjZWhvbGRlcjogJ+OBqeOCk+OBqueKtuazgeOBp+OAgeOBqeOCk+OBquWkseaVl+OCkue5sOOCiui/lOOBl+OBvuOBmeOBiy4uLicsIGJiU2VjdGlvbjogJ0NSQUZUK1NUUkFURUdZJywgYmJGaWVsZDogJ+ODhOODvOODqyvni6zoh6rjga7lvLfjgb8nIH0sCiAgICAgICAgeyBpZDogJ0M5JywgdHlwZTogJ2Nob2ljZScsIHF1ZXN0aW9uOiAn5Yqp44GR44KS5rGC44KB44KL44Gu44GM6YGF44KM44KL5Li744Gq55CG55Sx44Gv44Gp44KM44Gn44GZ44GL77yfJywgb3B0aW9uczogWyfoqqzmmI7jgZnjgovmlrnjgYzmiYvplpMnLCAn5ZOB6LOq44GM5LiN5a6JJywgJ+i/t+aDkeOCkuOBi+OBkeOBn+OBj+OBquOBhCcsICfoh6rliIbjgafjgoTjgovmlrnjgYzml6njgYQnXSwgYmJTZWN0aW9uOiAnQ1JBRlQrU1RSQVRFR1knLCBiYkZpZWxkOiAn44OE44O844OrK+eLrOiHquOBruW8t+OBvycgfSwKICAgICAgICB7IGlkOiAnQzEwJywgdHlwZTogJ3Nob3J0X3RleHQnLCBxdWVzdGlvbjogJ+WIhui6q0FJ44Gr5pyA5Yid44Gr5Lu744Gb44Gf44GE5LuV5LqL44KSMeOBpOaMmeOBkuOBpuOBj+OBoOOBleOBhOOAgicsIHBsYWNlaG9sZGVyOiAn5L6LOiDjg6Hjg7zjg6vov5Tkv6Hjga7kuIvmm7jjgY3jgIHorbDkuovpjLLkvZzmiJDjgIFTTlPmipXnqL8uLi4nLCBiYlNlY3Rpb246ICdDUkFGVCtTVFJBVEVHWScsIGJiRmllbGQ6ICfjg4Tjg7zjg6sr54us6Ieq44Gu5by344G/JyB9CiAgICAgIF07CgogICAgICB2YXIgR1JPV1RIX1NUQUdFUyA9IFsKICAgICAgICB7IG1pbjogMCwgbWF4OiAxOSwgbmFtZTogJ+OBn+OBvuOBlCcsIGVtb2ppOiAnXHVEODNFXHVERDVBJyB9LAogICAgICAgIHsgbWluOiAyMCwgbWF4OiAzOSwgbmFtZTogJ+OBsuOBs+WJsuOCjCcsIGVtb2ppOiAnXHVEODNEXHVEQzIzJyB9LAogICAgICAgIHsgbWluOiA0MCwgbWF4OiA1OSwgbmFtZTogJ+OBteWMlicsIGVtb2ppOiAnXHVEODNEXHVEQzI1JyB9LAogICAgICAgIHsgbWluOiA2MCwgbWF4OiA3OSwgbmFtZTogJ+OCiOOBoeOCiOOBoeWIhui6q0FJJywgZW1vamk6ICdcdUQ4M0VcdUREMTYnIH0sCiAgICAgICAgeyBtaW46IDgwLCBtYXg6IDEwMCwgbmFtZTogJ+ebuOajkuODouODvOODiScsIGVtb2ppOiAnXHVEODNFXHVEREJFJyB9CiAgICAgIF07CgogICAgICB2YXIgU0hBTExPV19QQVRURVJOUyA9IFsKICAgICAgICAv44Kz44Of44Ol44OL44Kx44O844K344On44Oz6IO95YqbLywKICAgICAgICAv44Gq44KT44Gn44KC44Gn44GN44KLLywKICAgICAgICAv6Ium5omL44Gv44Gq44GELywKICAgICAgICAv5pmu6YCa44GrLywKICAgICAgICAv54m544Gr44Gq44GELywKICAgICAgICAv44Gq44KT44Go44Gq44GPLywKICAgICAgICAv44GE44KN44GE44KNLywKICAgICAgICAv5YWo6YOoLwogICAgICBdOwoKICAgICAgdmFyIEZJVkVfU0VOU0VfSElOVCA9ICfjgZ3jga7kvZzmpa3jgpLjgZfjgabjgYTjgovmmYLjgIHjgYLjgarjgZ/jga7miYvjga/kvZXjgpLjgZfjgabjgYTjgb7jgZnjgYvvvJ/nlLvpnaLjgavjga/kvZXjgYzmmKDjgaPjgabjgYTjgb7jgZnjgYvvvJ8nOwoKICAgICAgLyogLS0gRE9NIHJlZnMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KCiAgICAgIHZhciBxZnNTY3JlZW5zID0gewogICAgICAgIHdlbGNvbWU6IHFmT25lKCdbZGF0YS1xZi1zb3VsLXNjcmVlbj0id2VsY29tZSJdJyksCiAgICAgICAgcXVpejogcWZPbmUoJ1tkYXRhLXFmLXNvdWwtc2NyZWVuPSJxdWl6Il0nKSwKICAgICAgICBtaWRwb2ludDogcWZPbmUoJ1tkYXRhLXFmLXNvdWwtc2NyZWVuPSJtaWRwb2ludCJdJyksCiAgICAgICAgY29tcGxldGU6IHFmT25lKCdbZGF0YS1xZi1zb3VsLXNjcmVlbj0iY29tcGxldGUiXScpCiAgICAgIH07CgogICAgICB2YXIgcWZzVUkgPSB7CiAgICAgICAgc3RhcnRCdXR0b246IHFmT25lKCdbZGF0YS1xZi1zb3VsLWFjdGlvbj0ic3RhcnQiXScpLAogICAgICAgIGNvdW50ZXI6IHFmT25lKCdbZGF0YS1xZi1zb3VsLWNvdW50ZXJdJyksCiAgICAgICAgcGVyY2VudDogcWZPbmUoJ1tkYXRhLXFmLXNvdWwtcGVyY2VudF0nKSwKICAgICAgICBwcm9ncmVzc0JhcjogcWZPbmUoJ1tkYXRhLXFmLXNvdWwtcHJvZ3Jlc3NdJyksCiAgICAgICAgcXVlc3Rpb25Cb3g6IHFmT25lKCdbZGF0YS1xZi1zb3VsLXF1ZXN0aW9uLWJveF0nKSwKICAgICAgICBxdWVzdGlvbkxhYmVsOiBxZk9uZSgnW2RhdGEtcWYtc291bC1xdWVzdGlvbi1sYWJlbF0nKSwKICAgICAgICBxdWVzdGlvblRleHQ6IHFmT25lKCdbZGF0YS1xZi1zb3VsLXF1ZXN0aW9uLXRleHRdJyksCiAgICAgICAgaW5wdXRBcmVhOiBxZk9uZSgnW2RhdGEtcWYtc291bC1pbnB1dC1hcmVhXScpLAogICAgICAgIHJlamVjdGlvbjogcWZPbmUoJ1tkYXRhLXFmLXNvdWwtcmVqZWN0aW9uXScpLAogICAgICAgIHJlamVjdGlvbk1zZzogcWZPbmUoJ1tkYXRhLXFmLXNvdWwtcmVqZWN0aW9uLW1zZ10nKSwKICAgICAgICByZWplY3Rpb25IaW50OiBxZk9uZSgnW2RhdGEtcWYtc291bC1oaW50XScpLAogICAgICAgIGZvbGxvd3VwOiBxZk9uZSgnW2RhdGEtcWYtc291bC1mb2xsb3d1cF0nKSwKICAgICAgICBmb2xsb3d1cElucHV0OiBxZk9uZSgnW2RhdGEtcWYtc291bC1mb2xsb3d1cC1pbnB1dF0nKSwKICAgICAgICBuZXh0QnRuOiBxZk9uZSgnW2RhdGEtcWYtc291bC1hY3Rpb249Im5leHQiXScpLAogICAgICAgIHNraXBCdG46IHFmT25lKCdbZGF0YS1xZi1zb3VsLWFjdGlvbj0ic2tpcCJdJyksCiAgICAgICAgc2tpcE1zZzogcWZPbmUoJ1tkYXRhLXFmLXNvdWwtc2tpcC1tc2ddJyksCiAgICAgICAgY29udGludWVCdG46IHFmT25lKCdbZGF0YS1xZi1zb3VsLWFjdGlvbj0iY29udGludWUiXScpLAogICAgICAgIGVuZEJ0bjogcWZPbmUoJ1tkYXRhLXFmLXNvdWwtYWN0aW9uPSJlbmQiXScpLAogICAgICAgIHNhdmVDb25maXJtOiBxZk9uZSgnW2RhdGEtcWYtc291bC1zYXZlLWNvbmZpcm1dJyksCiAgICAgICAgZ3Jvd3RoQmFkZ2U6IHFmT25lKCdbZGF0YS1xZi1zb3VsLWdyb3d0aC1iYWRnZV0nKSwKICAgICAgICBncm93dGhFbW9qaTogcWZPbmUoJ1tkYXRhLXFmLXNvdWwtZ3Jvd3RoLWVtb2ppXScpLAogICAgICAgIGdyb3d0aE5hbWU6IHFmT25lKCdbZGF0YS1xZi1zb3VsLWdyb3d0aC1uYW1lXScpLAogICAgICAgIG1pZEVtb2ppOiBxZk9uZSgnW2RhdGEtcWYtc291bC1taWQtZW1vamldJyksCiAgICAgICAgbWlkR3Jvd3RoRW1vamk6IHFmT25lKCdbZGF0YS1xZi1zb3VsLW1pZC1ncm93dGgtZW1vamldJyksCiAgICAgICAgbWlkR3Jvd3RoTmFtZTogcWZPbmUoJ1tkYXRhLXFmLXNvdWwtbWlkLWdyb3d0aC1uYW1lXScpLAogICAgICAgIGNvbXBsZXRlRW1vamk6IHFmT25lKCdbZGF0YS1xZi1zb3VsLWNvbXBsZXRlLWVtb2ppXScpLAogICAgICAgIGNvbXBsZXRlR3Jvd3RoRW1vamk6IHFmT25lKCdbZGF0YS1xZi1zb3VsLWNvbXBsZXRlLWdyb3d0aC1lbW9qaV0nKSwKICAgICAgICBjb21wbGV0ZUdyb3d0aE5hbWU6IHFmT25lKCdbZGF0YS1xZi1zb3VsLWNvbXBsZXRlLWdyb3d0aC1uYW1lXScpLAogICAgICAgIHN0YXRBbnN3ZXJlZDogcWZPbmUoJ1tkYXRhLXFmLXNvdWwtc3RhdC1hbnN3ZXJlZF0nKSwKICAgICAgICBzdGF0U2tpcHBlZDogcWZPbmUoJ1tkYXRhLXFmLXNvdWwtc3RhdC1za2lwcGVkXScpLAogICAgICAgIG92ZXJhbGxQZXJjZW50OiBxZk9uZSgnW2RhdGEtcWYtc291bC1vdmVyYWxsLXBlcmNlbnRdJyksCiAgICAgICAgb3ZlcmFsbEJhcjogcWZPbmUoJ1tkYXRhLXFmLXNvdWwtb3ZlcmFsbC1iYXJdJyksCiAgICAgICAgY29tcGxldGVNc2c6IHFmT25lKCdbZGF0YS1xZi1zb3VsLWNvbXBsZXRlLW1zZ10nKSwKICAgICAgICByZW1haW5pbmdNc2c6IHFmT25lKCdbZGF0YS1xZi1zb3VsLXJlbWFpbmluZy1tc2ddJykKICAgICAgfTsKCiAgICAgIC8qIC0tIFN0YXRlICYgU3RvcmFnZSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCgogICAgICB2YXIgVE9UQUxfUVVFU1RJT05TID0gNDg7CiAgICAgIHZhciBTRVNTSU9OX1FVRVNUSU9OUyA9IDEwOwogICAgICB2YXIgdXNlcklkID0gdXJsUGFyYW1zLmdldCgndWlkJykgfHwgJyc7CiAgICAgIGlmICghdXNlcklkKSB7IHRyeSB7IHVzZXJJZCA9IGxvY2FsU3RvcmFnZS5nZXRJdGVtKCdxZlNvdWxXb3JrOmN1cnJlbnRVc2VyJykgfHwgJyc7IH0gY2F0Y2goaWcpIHt9IH0KICAgICAgaWYgKCF1c2VySWQpIHsKICAgICAgICB1c2VySWQgPSAndV8nICsgTWF0aC5yYW5kb20oKS50b1N0cmluZygzNikuc2xpY2UoMiwgMTApICsgRGF0ZS5ub3coKS50b1N0cmluZygzNik7CiAgICAgIH0KICAgICAgdHJ5IHsgbG9jYWxTdG9yYWdlLnNldEl0ZW0oJ3FmU291bFdvcms6Y3VycmVudFVzZXInLCB1c2VySWQpOyB9IGNhdGNoKGlnKSB7fQoKICAgICAgdmFyIFNUT1JBR0VfS0VZID0gJ3FmU291bFdvcms6djE6JyArIHVzZXJJZDsKCiAgICAgIGZ1bmN0aW9uIGxvYWRTdG9yYWdlKCkgewogICAgICAgIHRyeSB7CiAgICAgICAgICB2YXIgcmF3ID0gbG9jYWxTdG9yYWdlLmdldEl0ZW0oU1RPUkFHRV9LRVkpOwogICAgICAgICAgaWYgKHJhdykgewogICAgICAgICAgICByZXR1cm4gSlNPTi5wYXJzZShyYXcpOwogICAgICAgICAgfQogICAgICAgIH0gY2F0Y2ggKGUpIHsKICAgICAgICAgIC8qIGlnbm9yZSAqLwogICAgICAgIH0KICAgICAgICByZXR1cm4gbnVsbDsKICAgICAgfQoKICAgICAgZnVuY3Rpb24gY3JlYXRlRGVmYXVsdFN0b3JhZ2UoKSB7CiAgICAgICAgdmFyIGF4aXNTY29yZXMgPSB7fTsKICAgICAgICB2YXIgYXhpc0tleXMgPSBbJ2hvbGQnLCAnZGVsZWcnLCAnYWknLCAnYmxpbmQnXTsKICAgICAgICB2YXIgaTsKICAgICAgICBmb3IgKGkgPSAwOyBpIDwgYXhpc0tleXMubGVuZ3RoOyBpICs9IDEpIHsKICAgICAgICAgIHZhciB2ID0gdXJsUGFyYW1zLmdldChheGlzS2V5c1tpXSk7CiAgICAgICAgICBpZiAodikgewogICAgICAgICAgICBheGlzU2NvcmVzW2F4aXNLZXlzW2ldXSA9IHBhcnNlSW50KHYsIDEwKSB8fCAwOwogICAgICAgICAgfQogICAgICAgIH0KCiAgICAgICAgcmV0dXJuIHsKICAgICAgICAgIHZlcnNpb246ICcxLjAuMCcsCiAgICAgICAgICB1c2VySWQ6IHVzZXJJZCwKICAgICAgICAgIHF1aXpUeXBlOiB1cmxQYXJhbXMuZ2V0KCd0eXBlJykgfHwgJ3Vua25vd24nLAogICAgICAgICAgYXhpc1Njb3JlczogYXhpc1Njb3JlcywKICAgICAgICAgIHByb2dyZXNzOiB7CiAgICAgICAgICAgIGN1cnJlbnRTZXNzaW9uOiBTRVNTSU9OX05VTUJFUiwKICAgICAgICAgICAgY29tcGxldGVkU2Vzc2lvbnM6IFtdLAogICAgICAgICAgICBhbnN3ZXJlZENvdW50OiAwLAogICAgICAgICAgICB0b3RhbENvdW50OiBUT1RBTF9RVUVTVElPTlMKICAgICAgICAgIH0sCiAgICAgICAgICBhbnN3ZXJzOiB7fQogICAgICAgIH07CiAgICAgIH0KCiAgICAgIGZ1bmN0aW9uIHNhdmVTdG9yYWdlKGRhdGEpIHsKICAgICAgICB0cnkgewogICAgICAgICAgbG9jYWxTdG9yYWdlLnNldEl0ZW0oU1RPUkFHRV9LRVksIEpTT04uc3RyaW5naWZ5KGRhdGEpKTsKICAgICAgICB9IGNhdGNoIChlKSB7CiAgICAgICAgICAvKiBpZ25vcmUgKi8KICAgICAgICB9CiAgICAgIH0KCiAgICAgIHZhciBzdG9yYWdlRGF0YSA9IGxvYWRTdG9yYWdlKCkgfHwgY3JlYXRlRGVmYXVsdFN0b3JhZ2UoKTsKCiAgICAgIC8qIC0tIEdyb3d0aCBTdGFnZSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCgogICAgICBmdW5jdGlvbiBnZXRHcm93dGhTdGFnZShhbnN3ZXJlZENvdW50KSB7CiAgICAgICAgdmFyIHBjdCA9IE1hdGgucm91bmQoKGFuc3dlcmVkQ291bnQgLyBUT1RBTF9RVUVTVElPTlMpICogMTAwKTsKICAgICAgICB2YXIgaTsKICAgICAgICBmb3IgKGkgPSAwOyBpIDwgR1JPV1RIX1NUQUdFUy5sZW5ndGg7IGkgKz0gMSkgewogICAgICAgICAgaWYgKHBjdCA+PSBHUk9XVEhfU1RBR0VTW2ldLm1pbiAmJiBwY3QgPD0gR1JPV1RIX1NUQUdFU1tpXS5tYXgpIHsKICAgICAgICAgICAgcmV0dXJuIEdST1dUSF9TVEFHRVNbaV07CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIHJldHVybiBHUk9XVEhfU1RBR0VTWzBdOwogICAgICB9CgogICAgICBmdW5jdGlvbiB1cGRhdGVHcm93dGhEaXNwbGF5KCkgewogICAgICAgIHZhciBzdGFnZSA9IGdldEdyb3d0aFN0YWdlKHN0b3JhZ2VEYXRhLnByb2dyZXNzLmFuc3dlcmVkQ291bnQpOwogICAgICAgIGlmIChxZnNVSS5ncm93dGhFbW9qaSkgewogICAgICAgICAgcWZzVUkuZ3Jvd3RoRW1vamkudGV4dENvbnRlbnQgPSBzdGFnZS5lbW9qaTsKICAgICAgICB9CiAgICAgICAgaWYgKHFmc1VJLmdyb3d0aE5hbWUpIHsKICAgICAgICAgIHFmc1VJLmdyb3d0aE5hbWUudGV4dENvbnRlbnQgPSBzdGFnZS5uYW1lOwogICAgICAgIH0KICAgICAgfQoKICAgICAgLyogLS0gUXVpeiBTdGF0ZSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KCiAgICAgIHZhciBxZnNTdGF0ZSA9IHsKICAgICAgICBpbmRleDogMCwKICAgICAgICByZWplY3Rpb25Db3VudDogMCwKICAgICAgICBzZWxlY3RlZENob2ljZTogbnVsbCwKICAgICAgICBzZWxlY3RlZFNjYWxlOiBudWxsLAogICAgICAgIHNob3dpbmdNaWRwb2ludDogZmFsc2UKICAgICAgfTsKCiAgICAgIC8qIC0tIFNjcmVlbiBOYXZpZ2F0aW9uIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCgogICAgICBmdW5jdGlvbiBxZnNTaG93U2NyZWVuKG5hbWUpIHsKICAgICAgICB2YXIga2V5cyA9IE9iamVjdC5rZXlzKHFmc1NjcmVlbnMpOwogICAgICAgIHZhciBpOwogICAgICAgIGZvciAoaSA9IDA7IGkgPCBrZXlzLmxlbmd0aDsgaSArPSAxKSB7CiAgICAgICAgICBxZnNTY3JlZW5zW2tleXNbaV1dLmNsYXNzTGlzdC5yZW1vdmUoJ3FmLXNvdWwtYWN0aXZlJyk7CiAgICAgICAgfQogICAgICAgIHFmc1NjcmVlbnNbbmFtZV0uY2xhc3NMaXN0LmFkZCgncWYtc291bC1hY3RpdmUnKTsKICAgICAgfQoKICAgICAgLyogLS0gU2hhbGxvdyBEZXRlY3Rpb24gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KCiAgICAgIGZ1bmN0aW9uIGlzU2hhbGxvdyh0ZXh0KSB7CiAgICAgICAgaWYgKCF0ZXh0IHx8IHRleHQubGVuZ3RoIDwgMjApIHsKICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgIH0KICAgICAgICB2YXIgaTsKICAgICAgICBmb3IgKGkgPSAwOyBpIDwgU0hBTExPV19QQVRURVJOUy5sZW5ndGg7IGkgKz0gMSkgewogICAgICAgICAgaWYgKFNIQUxMT1dfUEFUVEVSTlNbaV0udGVzdCh0ZXh0KSkgewogICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICB9CgogICAgICAvKiAtLSBQcm9ncmVzcyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwoKICAgICAgZnVuY3Rpb24gdXBkYXRlUHJvZ3Jlc3MoKSB7CiAgICAgICAgdmFyIGN1cnJlbnQgPSBxZnNTdGF0ZS5pbmRleCArIDE7CiAgICAgICAgdmFyIHBjdCA9IE1hdGgucm91bmQoKGN1cnJlbnQgLyBTRVNTSU9OX1FVRVNUSU9OUykgKiAxMDApOwogICAgICAgIHFmc1VJLmNvdW50ZXIudGV4dENvbnRlbnQgPSAnUScgKyBjdXJyZW50ICsgJyAvICcgKyBTRVNTSU9OX1FVRVNUSU9OUzsKICAgICAgICBxZnNVSS5wZXJjZW50LnRleHRDb250ZW50ID0gcGN0ICsgJyUnOwogICAgICAgIHFmc1VJLnByb2dyZXNzQmFyLnN0eWxlLndpZHRoID0gcGN0ICsgJyUnOwogICAgICB9CgogICAgICAvKiAtLSBSZW5kZXIgUXVlc3Rpb24gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwoKICAgICAgZnVuY3Rpb24gcmVuZGVyUXVlc3Rpb24oKSB7CiAgICAgICAgdmFyIGl0ZW0gPSBRRl9TT1VMX1FVRVNUSU9OU1txZnNTdGF0ZS5pbmRleF07CiAgICAgICAgcWZzU3RhdGUucmVqZWN0aW9uQ291bnQgPSAwOwogICAgICAgIHFmc1N0YXRlLnNlbGVjdGVkQ2hvaWNlID0gbnVsbDsKICAgICAgICBxZnNTdGF0ZS5zZWxlY3RlZFNjYWxlID0gbnVsbDsKCiAgICAgICAgdXBkYXRlUHJvZ3Jlc3MoKTsKCiAgICAgICAgcWZzVUkucXVlc3Rpb25MYWJlbC50ZXh0Q29udGVudCA9IGl0ZW0uYmJTZWN0aW9uICsgJyA+ICcgKyBpdGVtLmJiRmllbGQ7CiAgICAgICAgcWZzVUkucXVlc3Rpb25UZXh0LnRleHRDb250ZW50ID0gaXRlbS5xdWVzdGlvbjsKICAgICAgICBxZnNVSS5pbnB1dEFyZWEuaW5uZXJIVE1MID0gJyc7CiAgICAgICAgcWZzVUkucmVqZWN0aW9uLmNsYXNzTGlzdC5yZW1vdmUoJ3FmLXNvdWwtcmVqZWN0aW9uLXZpc2libGUnKTsKICAgICAgICBxZnNVSS5yZWplY3Rpb25Nc2cudGV4dENvbnRlbnQgPSAnJzsKICAgICAgICBxZnNVSS5yZWplY3Rpb25IaW50LnRleHRDb250ZW50ID0gJyc7CiAgICAgICAgcWZzVUkuZm9sbG93dXBJbnB1dC52YWx1ZSA9ICcnOwogICAgICAgIHFmc1VJLnNraXBCdG4uc3R5bGUuZGlzcGxheSA9ICdub25lJzsKICAgICAgICBxZnNVSS5za2lwTXNnLnN0eWxlLmRpc3BsYXkgPSAnbm9uZSc7CiAgICAgICAgcWZzVUkubmV4dEJ0bi5zdHlsZS5kaXNwbGF5ID0gJyc7CgogICAgICAgIC8qIFJlc3RvcmUgZXhpc3RpbmcgYW5zd2VyIGlmIGFueSAqLwogICAgICAgIHZhciBleGlzdGluZyA9IHN0b3JhZ2VEYXRhLmFuc3dlcnNbaXRlbS5pZF07CgogICAgICAgIGlmIChpdGVtLnR5cGUgPT09ICdzY2FsZScpIHsKICAgICAgICAgIHFmc1VJLmZvbGxvd3VwLnN0eWxlLmRpc3BsYXkgPSAnJzsKICAgICAgICAgIHZhciB3cmFwID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7CiAgICAgICAgICB3cmFwLmNsYXNzTmFtZSA9ICdxZi1zb3VsLXNjYWxlLXdyYXAnOwogICAgICAgICAgdmFyIHNpOwogICAgICAgICAgZm9yIChzaSA9IDA7IHNpIDwgaXRlbS5zY2FsZUxhYmVscy5sZW5ndGg7IHNpICs9IDEpIHsKICAgICAgICAgICAgKGZ1bmN0aW9uIChsYWJlbCwgbnVtKSB7CiAgICAgICAgICAgICAgdmFyIGJ0biA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2J1dHRvbicpOwogICAgICAgICAgICAgIGJ0bi50eXBlID0gJ2J1dHRvbic7CiAgICAgICAgICAgICAgYnRuLmNsYXNzTmFtZSA9ICdxZi1zb3VsLXNjYWxlLWJ0bic7CiAgICAgICAgICAgICAgdmFyIG51bVNwYW4gPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdzcGFuJyk7CiAgICAgICAgICAgICAgbnVtU3Bhbi5jbGFzc05hbWUgPSAncWYtc291bC1zY2FsZS1udW0nOwogICAgICAgICAgICAgIG51bVNwYW4udGV4dENvbnRlbnQgPSBudW07CiAgICAgICAgICAgICAgYnRuLmFwcGVuZENoaWxkKG51bVNwYW4pOwogICAgICAgICAgICAgIGJ0bi5hcHBlbmRDaGlsZChkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZShsYWJlbCkpOwogICAgICAgICAgICAgIGlmIChleGlzdGluZyAmJiBleGlzdGluZy52YWx1ZSA9PT0gbnVtKSB7CiAgICAgICAgICAgICAgICBidG4uY2xhc3NMaXN0LmFkZCgncWYtc291bC1zY2FsZS1zZWxlY3RlZCcpOwogICAgICAgICAgICAgICAgcWZzU3RhdGUuc2VsZWN0ZWRTY2FsZSA9IG51bTsKICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgYnRuLmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgZnVuY3Rpb24gKCkgewogICAgICAgICAgICAgICAgdmFyIGFsbFNjYWxlID0gd3JhcC5xdWVyeVNlbGVjdG9yQWxsKCcucWYtc291bC1zY2FsZS1idG4nKTsKICAgICAgICAgICAgICAgIHZhciBzajsKICAgICAgICAgICAgICAgIGZvciAoc2ogPSAwOyBzaiA8IGFsbFNjYWxlLmxlbmd0aDsgc2ogKz0gMSkgewogICAgICAgICAgICAgICAgICBhbGxTY2FsZVtzal0uY2xhc3NMaXN0LnJlbW92ZSgncWYtc291bC1zY2FsZS1zZWxlY3RlZCcpOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgYnRuLmNsYXNzTGlzdC5hZGQoJ3FmLXNvdWwtc2NhbGUtc2VsZWN0ZWQnKTsKICAgICAgICAgICAgICAgIHFmc1N0YXRlLnNlbGVjdGVkU2NhbGUgPSBudW07CiAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICAgd3JhcC5hcHBlbmRDaGlsZChidG4pOwogICAgICAgICAgICB9KShpdGVtLnNjYWxlTGFiZWxzW3NpXSwgc2kgKyAxKTsKICAgICAgICAgIH0KICAgICAgICAgIHFmc1VJLmlucHV0QXJlYS5hcHBlbmRDaGlsZCh3cmFwKTsKICAgICAgICAgIGlmIChleGlzdGluZyAmJiBleGlzdGluZy53aHkpIHsKICAgICAgICAgICAgcWZzVUkuZm9sbG93dXBJbnB1dC52YWx1ZSA9IGV4aXN0aW5nLndoeTsKICAgICAgICAgIH0KICAgICAgICAgIHJldHVybjsKICAgICAgICB9CgogICAgICAgIGlmIChpdGVtLnR5cGUgPT09ICdjaG9pY2UnKSB7CiAgICAgICAgICBxZnNVSS5mb2xsb3d1cC5zdHlsZS5kaXNwbGF5ID0gJyc7CiAgICAgICAgICB2YXIgaTsKICAgICAgICAgIGZvciAoaSA9IDA7IGkgPCBpdGVtLm9wdGlvbnMubGVuZ3RoOyBpICs9IDEpIHsKICAgICAgICAgICAgKGZ1bmN0aW9uIChvcHRpb25UZXh0LCBpZHgpIHsKICAgICAgICAgICAgICB2YXIgYnRuID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnYnV0dG9uJyk7CiAgICAgICAgICAgICAgYnRuLnR5cGUgPSAnYnV0dG9uJzsKICAgICAgICAgICAgICBidG4uY2xhc3NOYW1lID0gJ3FmLXNvdWwtYnRuIHFmLXNvdWwtYnRuLW9wdGlvbic7CiAgICAgICAgICAgICAgYnRuLnRleHRDb250ZW50ID0gb3B0aW9uVGV4dDsKICAgICAgICAgICAgICBpZiAoZXhpc3RpbmcgJiYgZXhpc3RpbmcudmFsdWUgPT09IG9wdGlvblRleHQpIHsKICAgICAgICAgICAgICAgIGJ0bi5jbGFzc0xpc3QuYWRkKCdxZi1zb3VsLWJ0bi1vcHRpb24tc2VsZWN0ZWQnKTsKICAgICAgICAgICAgICAgIHFmc1N0YXRlLnNlbGVjdGVkQ2hvaWNlID0gb3B0aW9uVGV4dDsKICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgYnRuLmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgZnVuY3Rpb24gKCkgewogICAgICAgICAgICAgICAgdmFyIGFsbE9wdHMgPSBxZnNVSS5pbnB1dEFyZWEucXVlcnlTZWxlY3RvckFsbCgnLnFmLXNvdWwtYnRuLW9wdGlvbicpOwogICAgICAgICAgICAgICAgdmFyIGo7CiAgICAgICAgICAgICAgICBmb3IgKGogPSAwOyBqIDwgYWxsT3B0cy5sZW5ndGg7IGogKz0gMSkgewogICAgICAgICAgICAgICAgICBhbGxPcHRzW2pdLmNsYXNzTGlzdC5yZW1vdmUoJ3FmLXNvdWwtYnRuLW9wdGlvbi1zZWxlY3RlZCcpOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgYnRuLmNsYXNzTGlzdC5hZGQoJ3FmLXNvdWwtYnRuLW9wdGlvbi1zZWxlY3RlZCcpOwogICAgICAgICAgICAgICAgcWZzU3RhdGUuc2VsZWN0ZWRDaG9pY2UgPSBvcHRpb25UZXh0OwogICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgIHFmc1VJLmlucHV0QXJlYS5hcHBlbmRDaGlsZChidG4pOwogICAgICAgICAgICB9KShpdGVtLm9wdGlvbnNbaV0sIGkpOwogICAgICAgICAgfQogICAgICAgICAgaWYgKGV4aXN0aW5nICYmIGV4aXN0aW5nLndoeSkgewogICAgICAgICAgICBxZnNVSS5mb2xsb3d1cElucHV0LnZhbHVlID0gZXhpc3Rpbmcud2h5OwogICAgICAgICAgfQogICAgICAgICAgcmV0dXJuOwogICAgICAgIH0KCiAgICAgICAgLyogc2hvcnRfdGV4dCBvciBsb25nX3RleHQgKi8KICAgICAgICBxZnNVSS5mb2xsb3d1cC5zdHlsZS5kaXNwbGF5ID0gJyc7CiAgICAgICAgdmFyIG1heExlbiA9IGl0ZW0udHlwZSA9PT0gJ3Nob3J0X3RleHQnID8gMTYwIDogMTAwMDsKCiAgICAgICAgaWYgKGl0ZW0udHlwZSA9PT0gJ3Nob3J0X3RleHQnKSB7CiAgICAgICAgICB2YXIgaW5wID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnaW5wdXQnKTsKICAgICAgICAgIGlucC50eXBlID0gJ3RleHQnOwogICAgICAgICAgaW5wLmNsYXNzTmFtZSA9ICdxZi1zb3VsLWlucHV0JzsKICAgICAgICAgIGlucC5wbGFjZWhvbGRlciA9IGl0ZW0ucGxhY2Vob2xkZXIgfHwgJyc7CiAgICAgICAgICBpbnAubWF4TGVuZ3RoID0gbWF4TGVuOwogICAgICAgICAgaW5wLnNldEF0dHJpYnV0ZSgnZGF0YS1xZi1zb3VsLW1haW4taW5wdXQnLCAnJyk7CiAgICAgICAgICBpZiAoZXhpc3RpbmcgJiYgZXhpc3RpbmcudmFsdWUpIHsKICAgICAgICAgICAgaW5wLnZhbHVlID0gZXhpc3RpbmcudmFsdWU7CiAgICAgICAgICB9CiAgICAgICAgICBxZnNVSS5pbnB1dEFyZWEuYXBwZW5kQ2hpbGQoaW5wKTsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgdmFyIHRhID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGV4dGFyZWEnKTsKICAgICAgICAgIHRhLmNsYXNzTmFtZSA9ICdxZi1zb3VsLXRleHRhcmVhJzsKICAgICAgICAgIHRhLnBsYWNlaG9sZGVyID0gaXRlbS5wbGFjZWhvbGRlciB8fCAnJzsKICAgICAgICAgIHRhLm1heExlbmd0aCA9IG1heExlbjsKICAgICAgICAgIHRhLnNldEF0dHJpYnV0ZSgnZGF0YS1xZi1zb3VsLW1haW4taW5wdXQnLCAnJyk7CiAgICAgICAgICBpZiAoZXhpc3RpbmcgJiYgZXhpc3RpbmcudmFsdWUpIHsKICAgICAgICAgICAgdGEudmFsdWUgPSBleGlzdGluZy52YWx1ZTsKICAgICAgICAgIH0KICAgICAgICAgIHFmc1VJLmlucHV0QXJlYS5hcHBlbmRDaGlsZCh0YSk7CgogICAgICAgICAgdmFyIGNjID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7CiAgICAgICAgICBjYy5jbGFzc05hbWUgPSAncWYtc291bC1jaGFyLWNvdW50JzsKICAgICAgICAgIGNjLnNldEF0dHJpYnV0ZSgnZGF0YS1xZi1zb3VsLWNoYXItY291bnQnLCAnJyk7CiAgICAgICAgICBjYy50ZXh0Q29udGVudCA9IChleGlzdGluZyAmJiBleGlzdGluZy52YWx1ZSA/IGV4aXN0aW5nLnZhbHVlLmxlbmd0aCA6IDApICsgJyAvICcgKyBtYXhMZW47CiAgICAgICAgICBxZnNVSS5pbnB1dEFyZWEuYXBwZW5kQ2hpbGQoY2MpOwoKICAgICAgICAgIHRhLmFkZEV2ZW50TGlzdGVuZXIoJ2lucHV0JywgZnVuY3Rpb24gKCkgewogICAgICAgICAgICB2YXIgbGVuID0gdGEudmFsdWUubGVuZ3RoOwogICAgICAgICAgICBjYy50ZXh0Q29udGVudCA9IGxlbiArICcgLyAnICsgbWF4TGVuOwogICAgICAgICAgICBpZiAobGVuID4gbWF4TGVuICogMC45KSB7CiAgICAgICAgICAgICAgY2MuY2xhc3NMaXN0LmFkZCgncWYtc291bC1jaGFyLXdhcm4nKTsKICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICBjYy5jbGFzc0xpc3QucmVtb3ZlKCdxZi1zb3VsLWNoYXItd2FybicpOwogICAgICAgICAgICB9CiAgICAgICAgICB9KTsKICAgICAgICB9CgogICAgICAgIGlmIChleGlzdGluZyAmJiBleGlzdGluZy53aHkpIHsKICAgICAgICAgIHFmc1VJLmZvbGxvd3VwSW5wdXQudmFsdWUgPSBleGlzdGluZy53aHk7CiAgICAgICAgfQoKICAgICAgICAvKiBSZXN0b3JlIHJlamVjdGlvbiBzdGF0ZSAqLwogICAgICAgIGlmIChleGlzdGluZyAmJiBleGlzdGluZy5yZWplY3Rpb25Db3VudCkgewogICAgICAgICAgcWZzU3RhdGUucmVqZWN0aW9uQ291bnQgPSBleGlzdGluZy5yZWplY3Rpb25Db3VudDsKICAgICAgICAgIGlmIChxZnNTdGF0ZS5yZWplY3Rpb25Db3VudCA+PSAyKSB7CiAgICAgICAgICAgIHFmc1VJLnNraXBCdG4uc3R5bGUuZGlzcGxheSA9ICcnOwogICAgICAgICAgfQogICAgICAgIH0KICAgICAgfQoKICAgICAgLyogLS0gQW5zd2VyIExvZ2ljIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KCiAgICAgIGZ1bmN0aW9uIGdldEN1cnJlbnRWYWx1ZSgpIHsKICAgICAgICB2YXIgaXRlbSA9IFFGX1NPVUxfUVVFU1RJT05TW3Fmc1N0YXRlLmluZGV4XTsKICAgICAgICBpZiAoaXRlbS50eXBlID09PSAnY2hvaWNlJykgewogICAgICAgICAgcmV0dXJuIHFmc1N0YXRlLnNlbGVjdGVkQ2hvaWNlIHx8ICcnOwogICAgICAgIH0KICAgICAgICBpZiAoaXRlbS50eXBlID09PSAnc2NhbGUnKSB7CiAgICAgICAgICByZXR1cm4gcWZzU3RhdGUuc2VsZWN0ZWRTY2FsZSB8fCAnJzsKICAgICAgICB9CiAgICAgICAgdmFyIG1haW5JbnB1dCA9IHFmT25lKCdbZGF0YS1xZi1zb3VsLW1haW4taW5wdXRdJyk7CiAgICAgICAgcmV0dXJuIG1haW5JbnB1dCA/IG1haW5JbnB1dC52YWx1ZS50cmltKCkgOiAnJzsKICAgICAgfQoKICAgICAgZnVuY3Rpb24gc2F2ZUFuc3dlcih2YWx1ZSwgc2tpcHBlZCkgewogICAgICAgIHZhciBpdGVtID0gUUZfU09VTF9RVUVTVElPTlNbcWZzU3RhdGUuaW5kZXhdOwogICAgICAgIHZhciB3aHlWYWwgPSBxZnNVSS5mb2xsb3d1cElucHV0LnZhbHVlLnRyaW0oKTsKCiAgICAgICAgc3RvcmFnZURhdGEuYW5zd2Vyc1tpdGVtLmlkXSA9IHsKICAgICAgICAgIHR5cGU6IGl0ZW0udHlwZSwKICAgICAgICAgIHZhbHVlOiB2YWx1ZSwKICAgICAgICAgIHdoeTogd2h5VmFsLAogICAgICAgICAgc2tpcHBlZDogISFza2lwcGVkLAogICAgICAgICAgcmVqZWN0aW9uQ291bnQ6IHFmc1N0YXRlLnJlamVjdGlvbkNvdW50LAogICAgICAgICAgdXBkYXRlZEF0OiBuZXcgRGF0ZSgpLnRvSVNPU3RyaW5nKCkKICAgICAgICB9OwoKICAgICAgICAvKiBSZWNvdW50IGFuc3dlcmVkICovCiAgICAgICAgdmFyIGNvdW50ID0gMDsKICAgICAgICB2YXIga2V5cyA9IE9iamVjdC5rZXlzKHN0b3JhZ2VEYXRhLmFuc3dlcnMpOwogICAgICAgIHZhciBpOwogICAgICAgIGZvciAoaSA9IDA7IGkgPCBrZXlzLmxlbmd0aDsgaSArPSAxKSB7CiAgICAgICAgICBpZiAoIXN0b3JhZ2VEYXRhLmFuc3dlcnNba2V5c1tpXV0uc2tpcHBlZCkgewogICAgICAgICAgICBjb3VudCArPSAxOwogICAgICAgICAgfQogICAgICAgIH0KICAgICAgICBzdG9yYWdlRGF0YS5wcm9ncmVzcy5hbnN3ZXJlZENvdW50ID0gY291bnQ7CgogICAgICAgIHNhdmVTdG9yYWdlKHN0b3JhZ2VEYXRhKTsKICAgICAgfQoKICAgICAgZnVuY3Rpb24gaGFuZGxlTmV4dCgpIHsKICAgICAgICB2YXIgaXRlbSA9IFFGX1NPVUxfUVVFU1RJT05TW3Fmc1N0YXRlLmluZGV4XTsKICAgICAgICB2YXIgdmFsdWUgPSBnZXRDdXJyZW50VmFsdWUoKTsKCiAgICAgICAgLyogQ2hvaWNlOiBtdXN0IHNlbGVjdCAqLwogICAgICAgIGlmIChpdGVtLnR5cGUgPT09ICdjaG9pY2UnICYmICF2YWx1ZSkgewogICAgICAgICAgcmV0dXJuOwogICAgICAgIH0KCiAgICAgICAgLyogU2NhbGU6IG11c3Qgc2VsZWN0ICovCiAgICAgICAgaWYgKGl0ZW0udHlwZSA9PT0gJ3NjYWxlJyAmJiAhdmFsdWUpIHsKICAgICAgICAgIHJldHVybjsKICAgICAgICB9CgogICAgICAgIC8qIFRleHQ6IHNoYWxsb3cgZGV0ZWN0aW9uICovCiAgICAgICAgaWYgKGl0ZW0udHlwZSAhPT0gJ2Nob2ljZScgJiYgaXRlbS50eXBlICE9PSAnc2NhbGUnKSB7CiAgICAgICAgICBpZiAoaXNTaGFsbG93KHZhbHVlKSAmJiBxZnNTdGF0ZS5yZWplY3Rpb25Db3VudCA8IDIpIHsKICAgICAgICAgICAgcWZzU3RhdGUucmVqZWN0aW9uQ291bnQgKz0gMTsKICAgICAgICAgICAgcWZzVUkucmVqZWN0aW9uLmNsYXNzTGlzdC5hZGQoJ3FmLXNvdWwtcmVqZWN0aW9uLXZpc2libGUnKTsKCiAgICAgICAgICAgIGlmIChxZnNTdGF0ZS5yZWplY3Rpb25Db3VudCA9PT0gMSkgewogICAgICAgICAgICAgIHFmc1VJLnJlamVjdGlvbk1zZy50ZXh0Q29udGVudCA9ICfjgoLjgYblsJHjgZflhbfkvZPnmoTjgavmlZnjgYjjgabjgY/jgaDjgZXjgYTjgILmg4Xmma/jgYzmta7jgYvjgbbjgojjgYbjgarlm57nrZTjgYzjgIHjgYLjgarjgZ/jga7liIbouqtBSeOCkuW8t+OBj+OBl+OBvuOBmSBcdUQ4M0RcdURDQUEnOwogICAgICAgICAgICAgIHFmc1VJLnJlamVjdGlvbkhpbnQudGV4dENvbnRlbnQgPSBGSVZFX1NFTlNFX0hJTlQ7CiAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgcWZzVUkucmVqZWN0aW9uTXNnLnRleHRDb250ZW50ID0gJ+OBk+OBk+OBr+Wkp+S6i+OBquODneOCpOODs+ODiOOBp+OBmeOAguOBp+OCguOAgeS7iuOBmeOBkOetlOOBiOOBjOWHuuOBquOBj+OBpuOCguWkp+S4iOWkq+OAguW+jOOBp+aIu+OBo+OBpuOBj+OCi+OBk+OBqOOCguOBp+OBjeOBvuOBmSc7CiAgICAgICAgICAgICAgcWZzVUkucmVqZWN0aW9uSGludC50ZXh0Q29udGVudCA9ICcnOwogICAgICAgICAgICAgIHFmc1VJLnNraXBCdG4uc3R5bGUuZGlzcGxheSA9ICcnOwogICAgICAgICAgICB9CiAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgIH0KICAgICAgICB9CgogICAgICAgIHNhdmVBbnN3ZXIodmFsdWUsIGZhbHNlKTsKICAgICAgICBhZHZhbmNlUXVlc3Rpb24oKTsKICAgICAgfQoKICAgICAgZnVuY3Rpb24gaGFuZGxlU2tpcCgpIHsKICAgICAgICBzYXZlQW5zd2VyKCcnLCB0cnVlKTsKICAgICAgICBxZnNVSS5za2lwTXNnLnN0eWxlLmRpc3BsYXkgPSAnYmxvY2snOwogICAgICAgIHNldFRpbWVvdXQoZnVuY3Rpb24gKCkgewogICAgICAgICAgcWZzVUkuc2tpcE1zZy5zdHlsZS5kaXNwbGF5ID0gJ25vbmUnOwogICAgICAgICAgYWR2YW5jZVF1ZXN0aW9uKCk7CiAgICAgICAgfSwgMTIwMCk7CiAgICAgIH0KCiAgICAgIGZ1bmN0aW9uIGFkdmFuY2VRdWVzdGlvbigpIHsKICAgICAgICBxZnNTdGF0ZS5pbmRleCArPSAxOwoKICAgICAgICAvKiBNaWRwb2ludCBhZnRlciBRNSAoaW5kZXggNSkgKi8KICAgICAgICBpZiAocWZzU3RhdGUuaW5kZXggPT09IDUgJiYgIXFmc1N0YXRlLnNob3dpbmdNaWRwb2ludCkgewogICAgICAgICAgcWZzU3RhdGUuc2hvd2luZ01pZHBvaW50ID0gdHJ1ZTsKICAgICAgICAgIHNob3dNaWRwb2ludCgpOwogICAgICAgICAgcmV0dXJuOwogICAgICAgIH0KCiAgICAgICAgaWYgKHFmc1N0YXRlLmluZGV4ID49IFNFU1NJT05fUVVFU1RJT05TKSB7CiAgICAgICAgICBzaG93Q29tcGxldGUoKTsKICAgICAgICAgIHJldHVybjsKICAgICAgICB9CgogICAgICAgIGxlYXZlQW5kUmVuZGVyKCk7CiAgICAgIH0KCiAgICAgIGZ1bmN0aW9uIGxlYXZlQW5kUmVuZGVyKCkgewogICAgICAgIHFmc1VJLnF1ZXN0aW9uQm94LmNsYXNzTGlzdC5hZGQoJ3FmLXNvdWwtbGVhdmluZycpOwogICAgICAgIHNldFRpbWVvdXQoZnVuY3Rpb24gKCkgewogICAgICAgICAgcWZzVUkucXVlc3Rpb25Cb3guY2xhc3NMaXN0LnJlbW92ZSgncWYtc291bC1sZWF2aW5nJyk7CiAgICAgICAgICByZW5kZXJRdWVzdGlvbigpOwogICAgICAgIH0sIDI0MCk7CiAgICAgIH0KCiAgICAgIC8qIC0tIE1pZHBvaW50IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCgogICAgICBmdW5jdGlvbiBzaG93TWlkcG9pbnQoKSB7CiAgICAgICAgdmFyIHN0YWdlID0gZ2V0R3Jvd3RoU3RhZ2Uoc3RvcmFnZURhdGEucHJvZ3Jlc3MuYW5zd2VyZWRDb3VudCk7CiAgICAgICAgcWZzVUkubWlkRW1vamkudGV4dENvbnRlbnQgPSBzdGFnZS5lbW9qaTsKICAgICAgICBxZnNVSS5taWRHcm93dGhFbW9qaS50ZXh0Q29udGVudCA9IHN0YWdlLmVtb2ppOwogICAgICAgIHFmc1VJLm1pZEdyb3d0aE5hbWUudGV4dENvbnRlbnQgPSBzdGFnZS5uYW1lOwogICAgICAgIHFmc1Nob3dTY3JlZW4oJ21pZHBvaW50Jyk7CiAgICAgIH0KCiAgICAgIC8qIC0tIENvbXBsZXRlIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCgogICAgICBmdW5jdGlvbiBzaG93Q29tcGxldGUoKSB7CiAgICAgICAgLyogTWFyayBzZXNzaW9uIGNvbXBsZXRlZCAqLwogICAgICAgIGlmIChzdG9yYWdlRGF0YS5wcm9ncmVzcy5jb21wbGV0ZWRTZXNzaW9ucy5pbmRleE9mKFNFU1NJT05fTlVNQkVSKSA9PT0gLTEpIHsKICAgICAgICAgIHN0b3JhZ2VEYXRhLnByb2dyZXNzLmNvbXBsZXRlZFNlc3Npb25zLnB1c2goU0VTU0lPTl9OVU1CRVIpOwogICAgICAgIH0KICAgICAgICBzYXZlU3RvcmFnZShzdG9yYWdlRGF0YSk7CgogICAgICAgIHZhciBzdGFnZSA9IGdldEdyb3d0aFN0YWdlKHN0b3JhZ2VEYXRhLnByb2dyZXNzLmFuc3dlcmVkQ291bnQpOwogICAgICAgIHFmc1VJLmNvbXBsZXRlRW1vamkudGV4dENvbnRlbnQgPSBzdGFnZS5lbW9qaTsKICAgICAgICBxZnNVSS5jb21wbGV0ZUdyb3d0aEVtb2ppLnRleHRDb250ZW50ID0gc3RhZ2UuZW1vamk7CiAgICAgICAgcWZzVUkuY29tcGxldGVHcm93dGhOYW1lLnRleHRDb250ZW50ID0gc3RhZ2UubmFtZTsKCiAgICAgICAgLyogU3RhdHMgKi8KICAgICAgICB2YXIgYW5zd2VyZWQgPSAwOwogICAgICAgIHZhciBza2lwcGVkID0gMDsKICAgICAgICB2YXIga2V5cyA9IE9iamVjdC5rZXlzKHN0b3JhZ2VEYXRhLmFuc3dlcnMpOwogICAgICAgIHZhciBpOwogICAgICAgIGZvciAoaSA9IDA7IGkgPCBrZXlzLmxlbmd0aDsgaSArPSAxKSB7CiAgICAgICAgICBpZiAoa2V5c1tpXS5jaGFyQXQoMCkgPT09ICdDJykgewogICAgICAgICAgICBpZiAoc3RvcmFnZURhdGEuYW5zd2Vyc1trZXlzW2ldXS5za2lwcGVkKSB7CiAgICAgICAgICAgICAgc2tpcHBlZCArPSAxOwogICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgIGFuc3dlcmVkICs9IDE7CiAgICAgICAgICAgIH0KICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgcWZzVUkuc3RhdEFuc3dlcmVkLnRleHRDb250ZW50ID0gYW5zd2VyZWQ7CiAgICAgICAgcWZzVUkuc3RhdFNraXBwZWQudGV4dENvbnRlbnQgPSBza2lwcGVkOwoKICAgICAgICAvKiBPdmVyYWxsIHByb2dyZXNzICovCiAgICAgICAgdmFyIG92ZXJhbGxQY3QgPSBNYXRoLnJvdW5kKChzdG9yYWdlRGF0YS5wcm9ncmVzcy5hbnN3ZXJlZENvdW50IC8gVE9UQUxfUVVFU1RJT05TKSAqIDEwMCk7CiAgICAgICAgcWZzVUkub3ZlcmFsbFBlcmNlbnQudGV4dENvbnRlbnQgPSBvdmVyYWxsUGN0ICsgJyUnOwogICAgICAgIHNldFRpbWVvdXQoZnVuY3Rpb24gKCkgewogICAgICAgICAgcWZzVUkub3ZlcmFsbEJhci5zdHlsZS53aWR0aCA9IG92ZXJhbGxQY3QgKyAnJSc7CiAgICAgICAgfSwgMTAwKTsKCiAgICAgICAgLyogTWVzc2FnZXMgKi8KICAgICAgICBxZnNVSS5jb21wbGV0ZU1zZy50ZXh0Q29udGVudCA9ICflp5Tku7vjgafjgY3jgovpoJjln5/jgYzopovjgYjjgb7jgZfjgZ/jgILmrKHlm57jga/kvJ3jgYjmlrnjga7nmZbjgpLmlbTjgYjjgb7jgZnjgIInOwogICAgICAgIHZhciByZW1haW5pbmcgPSBUT1RBTF9RVUVTVElPTlMgLSBzdG9yYWdlRGF0YS5wcm9ncmVzcy5hbnN3ZXJlZENvdW50OwogICAgICAgIHFmc1VJLnJlbWFpbmluZ01zZy50ZXh0Q29udGVudCA9ICfjgYLjgagnICsgcmVtYWluaW5nICsgJ+WVj+OBp+OAgeWIhui6q0FJ44GM5Lu744Gb44Gp44GT44KN44KS55CG6Kej44GX44G+44GZ44CCJzsKCiAgICAgICAgcWZzU2hvd1NjcmVlbignY29tcGxldGUnKTsKICAgICAgfQoKICAgICAgLyogLS0gRmluZCBGaXJzdCBVbmFuc3dlcmVkIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KCiAgICAgIGZ1bmN0aW9uIGZpbmRGaXJzdFVuYW5zd2VyZWQoKSB7CiAgICAgICAgdmFyIGk7CiAgICAgICAgZm9yIChpID0gMDsgaSA8IFFGX1NPVUxfUVVFU1RJT05TLmxlbmd0aDsgaSArPSAxKSB7CiAgICAgICAgICB2YXIgcWlkID0gUUZfU09VTF9RVUVTVElPTlNbaV0uaWQ7CiAgICAgICAgICBpZiAoIXN0b3JhZ2VEYXRhLmFuc3dlcnNbcWlkXSkgewogICAgICAgICAgICByZXR1cm4gaTsKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgcmV0dXJuIC0xOwogICAgICB9CgogICAgICAvKiAtLSBJbml0aWFsaXphdGlvbiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwoKICAgICAgdXBkYXRlR3Jvd3RoRGlzcGxheSgpOwoKICAgICAgLyogQ2hlY2sgaWYgc2Vzc2lvbiBhbHJlYWR5IGNvbXBsZXRlZCAqLwogICAgICB2YXIgYWxsQW5zd2VyZWQgPSB0cnVlOwogICAgICB2YXIgazsKICAgICAgZm9yIChrID0gMDsgayA8IFFGX1NPVUxfUVVFU1RJT05TLmxlbmd0aDsgayArPSAxKSB7CiAgICAgICAgaWYgKCFzdG9yYWdlRGF0YS5hbnN3ZXJzW1FGX1NPVUxfUVVFU1RJT05TW2tdLmlkXSkgewogICAgICAgICAgYWxsQW5zd2VyZWQgPSBmYWxzZTsKICAgICAgICAgIGJyZWFrOwogICAgICAgIH0KICAgICAgfQoKICAgICAgaWYgKGFsbEFuc3dlcmVkICYmIHN0b3JhZ2VEYXRhLnByb2dyZXNzLmNvbXBsZXRlZFNlc3Npb25zLmluZGV4T2YoU0VTU0lPTl9OVU1CRVIpICE9PSAtMSkgewogICAgICAgIC8qIEFscmVhZHkgY29tcGxldGVkIC0gc2hvdyBjb21wbGV0ZSBzY3JlZW4gKi8KICAgICAgICBzZXRUaW1lb3V0KGZ1bmN0aW9uICgpIHsKICAgICAgICAgIHNob3dDb21wbGV0ZSgpOwogICAgICAgIH0sIDEwMCk7CiAgICAgIH0KCiAgICAgIC8qIC0tIEV2ZW50IExpc3RlbmVycyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCgogICAgICBxZnNVSS5zdGFydEJ1dHRvbi5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsIGZ1bmN0aW9uICgpIHsKICAgICAgICB2YXIgcmVzdW1lSW5kZXggPSBmaW5kRmlyc3RVbmFuc3dlcmVkKCk7CiAgICAgICAgaWYgKHJlc3VtZUluZGV4ID09PSAtMSkgewogICAgICAgICAgLyogQWxsIGFuc3dlcmVkICovCiAgICAgICAgICBxZnNTdGF0ZS5pbmRleCA9IDA7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgIHFmc1N0YXRlLmluZGV4ID0gcmVzdW1lSW5kZXg7CiAgICAgICAgICAvKiBJZiBwYXN0IG1pZHBvaW50LCBtYXJrIGFzIHNob3duICovCiAgICAgICAgICBpZiAocWZzU3RhdGUuaW5kZXggPj0gNSkgewogICAgICAgICAgICBxZnNTdGF0ZS5zaG93aW5nTWlkcG9pbnQgPSB0cnVlOwogICAgICAgICAgfQogICAgICAgIH0KICAgICAgICBxZnNTaG93U2NyZWVuKCdxdWl6Jyk7CiAgICAgICAgcmVuZGVyUXVlc3Rpb24oKTsKICAgICAgfSk7CgogICAgICBxZnNVSS5uZXh0QnRuLmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgZnVuY3Rpb24gKCkgewogICAgICAgIGhhbmRsZU5leHQoKTsKICAgICAgfSk7CgogICAgICBxZnNVSS5za2lwQnRuLmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgZnVuY3Rpb24gKCkgewogICAgICAgIGhhbmRsZVNraXAoKTsKICAgICAgfSk7CgogICAgICBxZnNVSS5jb250aW51ZUJ0bi5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsIGZ1bmN0aW9uICgpIHsKICAgICAgICBxZnNTaG93U2NyZWVuKCdxdWl6Jyk7CiAgICAgICAgcmVuZGVyUXVlc3Rpb24oKTsKICAgICAgfSk7CgogICAgICBxZnNVSS5lbmRCdG4uYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCBmdW5jdGlvbiAoKSB7CiAgICAgICAgcWZzVUkuc2F2ZUNvbmZpcm0uc3R5bGUuZGlzcGxheSA9ICdibG9jayc7CiAgICAgIH0pOwoKICAgICAgdmFyIG5leHRTZXNzaW9uQnRuID0gcWZPbmUoJ1tkYXRhLXFmLXNvdWwtYWN0aW9uPSJuZXh0LXNlc3Npb24iXScpOwogICAgICBpZiAobmV4dFNlc3Npb25CdG4pIHsKICAgICAgICBuZXh0U2Vzc2lvbkJ0bi5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsIGZ1bmN0aW9uIChlKSB7CiAgICAgICAgICBlLnByZXZlbnREZWZhdWx0KCk7CiAgICAgICAgICB3aW5kb3cubG9jYXRpb24uaHJlZiA9ICcvc291bC1zZXNzaW9uNC8/dWlkPScgKyBlbmNvZGVVUklDb21wb25lbnQoc3RvcmFnZURhdGEudXNlcklkKTsKICAgICAgICB9KTsKICAgICAgfQogICAgfSkoKTsKICA=
