diff --git a/addons/cetmix_tower_server/tests/test_server_jet_action_command.py b/addons/cetmix_tower_server/tests/test_server_jet_action_command.py new file mode 100644 index 0000000..ea52e0e --- /dev/null +++ b/addons/cetmix_tower_server/tests/test_server_jet_action_command.py @@ -0,0 +1 @@ +IyBDb3B5cmlnaHQgKEMpIDIwMjQgQ2V0bWl4IE/DnAojIExpY2Vuc2UgQUdQTC0zLjAgb3IgbGF0ZXIgKGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9hZ3BsKS4KCmZyb20gdW5pdHRlc3QubW9jayBpbXBvcnQgcGF0Y2gKCmZyb20gb2RvbyBpbXBvcnQgXwpmcm9tIG9kb28uZXhjZXB0aW9ucyBpbXBvcnQgVmFsaWRhdGlvbkVycm9yCgpmcm9tIG9kb28uYWRkb25zLmNldG1peF90b3dlcl9zZXJ2ZXIubW9kZWxzLmNvbnN0YW50cyBpbXBvcnQgKAogICAgR0VORVJBTF9FUlJPUiwKICAgIEpFVF9OT1RfRk9VTkQsCiAgICBKRVRfVEVNUExBVEVfTk9UX0ZPVU5ELAopCgpmcm9tIC5jb21tb25famV0cyBpbXBvcnQgVGVzdFRvd2VySmV0c0NvbW1vbgoKCmNsYXNzIFRlc3RUb3dlclNlcnZlckpldEFjdGlvbkNvbW1hbmQoVGVzdFRvd2VySmV0c0NvbW1vbik6ICAjIHB5bGludDogZGlzYWJsZT1wcm90ZWN0ZWQtYWNjZXNzCiAgICAiIiJUZXN0cyBmb3IgY3gudG93ZXIuc2VydmVyLl9jb21tYW5kX3J1bm5lcl9qZXRfYWN0aW9uLiIiIgoKICAgIGRlZiBfY3JlYXRlX2pldF9hY3Rpb25fY29tbWFuZChzZWxmLCBqZXRfdGVtcGxhdGUsIGpldF9hY3Rpb24pOgogICAgICAgICIiIkNyZWF0ZSBhIGNvbW1hbmQgdGhhdCB0cmlnZ2VycyBhIGpldCBhY3Rpb24gZm9yIHRoZSBnaXZlbiB0ZW1wbGF0ZS4iIiIKICAgICAgICByZXR1cm4gc2VsZi5Db21tYW5kLmNyZWF0ZSgKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgIm5hbWUiOiAiVGVzdCBqZXQgYWN0aW9uIGNvbW1hbmQiLAogICAgICAgICAgICAgICAgImFjdGlvbiI6ICJqZXRfYWN0aW9uIiwKICAgICAgICAgICAgICAgICJqZXRfdGVtcGxhdGVfaWQiOiBqZXRfdGVtcGxhdGUuaWQsCiAgICAgICAgICAgICAgICAiamV0X2FjdGlvbl9pZCI6IGpldF9hY3Rpb24uaWQsCiAgICAgICAgICAgIH0KICAgICAgICApCgogICAgZGVmIF9jcmVhdGVfamV0X2FjdGlvbl9sb2coc2VsZiwgamV0LCBjb21tYW5kKToKICAgICAgICAiIiJDcmVhdGUgYSBjb21tYW5kIGxvZyBib3VuZCB0byBhIGpldCBhbmQgY29tbWFuZC4iIiIKICAgICAgICByZXR1cm4gc2VsZi5Db21tYW5kTG9nLmNyZWF0ZSgKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgInNlcnZlcl9pZCI6IGpldC5zZXJ2ZXJfaWQuaWQsCiAgICAgICAgICAgICAgICAiY29tbWFuZF9pZCI6IGNvbW1hbmQuaWQsCiAgICAgICAgICAgICAgICAiamV0X2lkIjogamV0LmlkLAogICAgICAgICAgICB9CiAgICAgICAgKQoKICAgIGRlZiB0ZXN0X2NvbW1hbmRfcnVubmVyX2pldF9hY3Rpb25fcmVxdWlyZXNfbG9nX3JlY29yZChzZWxmKToKICAgICAgICAiIiJDYWxsaW5nIHdpdGhvdXQgYSBsb2cgcmVjb3JkIG11c3QgcmFpc2UgVmFsaWRhdGlvbkVycm9yLiIiIgogICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoVmFsaWRhdGlvbkVycm9yKToKICAgICAgICAgICAgc2VsZi5zZXJ2ZXJfdGVzdF8xLl9jb21tYW5kX3J1bm5lcl9qZXRfYWN0aW9uKEZhbHNlKQoKICAgIGRlZiB0ZXN0X2NvbW1hbmRfcnVubmVyX2pldF9hY3Rpb25fbWlzc2luZ19qZXRfYWN0aW9uKHNlbGYpOgogICAgICAgICIiIk1pc3NpbmcgY29tbWFuZCBqZXRfYWN0aW9uX2lkIGZpbmlzaGVzIHdpdGggR0VORVJBTF9FUlJPUi4iIiIKICAgICAgICBjb21tYW5kID0gc2VsZi5fY3JlYXRlX2pldF9hY3Rpb25fY29tbWFuZCgKICAgICAgICAgICAgc2VsZi5qZXRfdGVtcGxhdGVfdGVzdCwKICAgICAgICAgICAgc2VsZi5hY3Rpb25fc3RvcHBlZF90b19ydW5uaW5nLAogICAgICAgICkKICAgICAgICBjb21tYW5kLndyaXRlKHsiamV0X2FjdGlvbl9pZCI6IEZhbHNlfSkKICAgICAgICBsb2cgPSBzZWxmLl9jcmVhdGVfamV0X2FjdGlvbl9sb2coc2VsZi5qZXRfdGVzdCwgY29tbWFuZCkKCiAgICAgICAgcmVzdWx0ID0gc2VsZi5zZXJ2ZXJfdGVzdF8xLl9jb21tYW5kX3J1bm5lcl9qZXRfYWN0aW9uKGxvZykKCiAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXN1bHRbInN0YXR1cyJdLCBHRU5FUkFMX0VSUk9SKQogICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVzdWx0WyJyZXNwb25zZSJdLCBOb25lKQogICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVzdWx0WyJlcnJvciJdLCBfKCJKZXQgYWN0aW9uIGlzIG5vdCBmb3VuZC4iKSkKICAgICAgICBsb2cuaW52YWxpZGF0ZV9yZWNvcmRzZXQoKQogICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobG9nLmNvbW1hbmRfc3RhdHVzLCBHRU5FUkFMX0VSUk9SKQoKICAgIGRlZiB0ZXN0X2NvbW1hbmRfcnVubmVyX2pldF9hY3Rpb25fbWlzc2luZ19qZXQoc2VsZik6CiAgICAgICAgIiIiTWlzc2luZyBqZXQgb24gdGhlIGxvZyBmaW5pc2hlcyB3aXRoIEpFVF9OT1RfRk9VTkQuIiIiCiAgICAgICAgY29tbWFuZCA9IHNlbGYuX2NyZWF0ZV9qZXRfYWN0aW9uX2NvbW1hbmQoCiAgICAgICAgICAgIHNlbGYuamV0X3RlbXBsYXRlX3Rlc3QsCiAgICAgICAgICAgIHNlbGYuYWN0aW9uX3N0b3BwZWRfdG9fcnVubmluZywKICAgICAgICApCiAgICAgICAgbG9nID0gc2VsZi5Db21tYW5kTG9nLmNyZWF0ZSgKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgInNlcnZlcl9pZCI6IHNlbGYuc2VydmVyX3Rlc3RfMS5pZCwKICAgICAgICAgICAgICAgICJjb21tYW5kX2lkIjogY29tbWFuZC5pZCwKICAgICAgICAgICAgICAgICJqZXRfaWQiOiBGYWxzZSwKICAgICAgICAgICAgfQogICAgICAgICkKCiAgICAgICAgcmVzdWx0ID0gc2VsZi5zZXJ2ZXJfdGVzdF8xLl9jb21tYW5kX3J1bm5lcl9qZXRfYWN0aW9uKGxvZykKCiAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXN1bHRbInN0YXR1cyJdLCBKRVRfTk9UX0ZPVU5EKQogICAgICAgIHNlbGYuYXNzZXJ0SXNOb3ROb25lKHJlc3VsdFsiZXJyb3IiXSkKCiAgICBkZWYgdGVzdF9jb21tYW5kX3J1bm5lcl9qZXRfYWN0aW9uX21pc3NpbmdfamV0X3RlbXBsYXRlKHNlbGYpOgogICAgICAgICIiIgogICAgICAgIE1pc3NpbmcgamV0X3RlbXBsYXRlX2lkIG9uIHRoZSBjb21tYW5kIGZpbmlzaGVzIHdpdGgKICAgICAgICBKRVRfVEVNUExBVEVfTk9UX0ZPVU5ELgogICAgICAgICIiIgogICAgICAgIGNvbW1hbmQgPSBzZWxmLl9jcmVhdGVfamV0X2FjdGlvbl9jb21tYW5kKAogICAgICAgICAgICBzZWxmLmpldF90ZW1wbGF0ZV90ZXN0LAogICAgICAgICAgICBzZWxmLmFjdGlvbl9zdG9wcGVkX3RvX3J1bm5pbmcsCiAgICAgICAgKQogICAgICAgIGNvbW1hbmQud3JpdGUoeyJqZXRfdGVtcGxhdGVfaWQiOiBGYWxzZX0pCiAgICAgICAgbG9nID0gc2VsZi5fY3JlYXRlX2pldF9hY3Rpb25fbG9nKHNlbGYuamV0X3Rlc3QsIGNvbW1hbmQpCgogICAgICAgIHJlc3VsdCA9IHNlbGYuc2VydmVyX3Rlc3RfMS5fY29tbWFuZF9ydW5uZXJfamV0X2FjdGlvbihsb2cpCgogICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVzdWx0WyJzdGF0dXMiXSwgSkVUX1RFTVBMQVRFX05PVF9GT1VORCkKICAgICAgICBzZWxmLmFzc2VydElzTm90Tm9uZShyZXN1bHRbImVycm9yIl0pCgogICAgQHBhdGNoKAogICAgICAgICJvZG9vLmFkZG9ucy5jZXRtaXhfdG93ZXJfc2VydmVyLm1vZGVscy5jeF90b3dlcl9qZXQuQ3hUb3dlckpldC5fdHJpZ2dlcl9hY3Rpb24iLAogICAgICAgIGF1dG9zcGVjPVRydWUsCiAgICApCiAgICBkZWYgdGVzdF9jb21tYW5kX3J1bm5lcl9qZXRfYWN0aW9uX3N1Y2Nlc3NfYWdncmVnYXRlc19yZXNwb25zZShzZWxmLCBtb2NrX3RyaWdnZXIpOgogICAgICAgIG1vY2tfdHJpZ2dlci5yZXR1cm5fdmFsdWUgPSB7InN0YXR1cyI6IDAsICJlcnJvciI6IE5vbmV9CiAgICAgICAgY29tbWFuZCA9IHNlbGYuX2NyZWF0ZV9qZXRfYWN0aW9uX2NvbW1hbmQoCiAgICAgICAgICAgIHNlbGYuamV0X3RlbXBsYXRlX3Rlc3QsCiAgICAgICAgICAgIHNlbGYuYWN0aW9uX3N0b3BwZWRfdG9fcnVubmluZywKICAgICAgICApCiAgICAgICAgbG9nID0gc2VsZi5fY3JlYXRlX2pldF9hY3Rpb25fbG9nKHNlbGYuamV0X3Rlc3QsIGNvbW1hbmQpCgogICAgICAgIHJlc3VsdCA9IHNlbGYuc2VydmVyX3Rlc3RfMS5fY29tbWFuZF9ydW5uZXJfamV0X2FjdGlvbihsb2cpCgogICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVzdWx0WyJzdGF0dXMiXSwgMCkKICAgICAgICBzZWxmLmFzc2VydElzTm9uZShyZXN1bHRbImVycm9yIl0pCiAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHJlc3VsdFsicmVzcG9uc2UiXSkKICAgICAgICBzZWxmLmFzc2VydEluKCJBY3Rpb24gdHJpZ2dlcmVkIGZvciIsIHJlc3VsdFsicmVzcG9uc2UiXSkKICAgICAgICBzZWxmLmFzc2VydEluKHNlbGYuamV0X3Rlc3QucmVmZXJlbmNlLCByZXN1bHRbInJlc3BvbnNlIl0pCiAgICAgICAgbW9ja190cmlnZ2VyLmFzc2VydF9jYWxsZWRfb25jZSgpCiAgICAgICAgbG9nLmludmFsaWRhdGVfcmVjb3Jkc2V0KCkKICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxvZy5jb21tYW5kX3N0YXR1cywgMCkKICAgICAgICBzZWxmLmFzc2VydEluKCJBY3Rpb24gdHJpZ2dlcmVkIGZvciIsIGxvZy5jb21tYW5kX3Jlc3BvbnNlKQogICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UobG9nLmNvbW1hbmRfZXJyb3IpCgogICAgQHBhdGNoKAogICAgICAgICJvZG9vLmFkZG9ucy5jZXRtaXhfdG93ZXJfc2VydmVyLm1vZGVscy5jeF90b3dlcl9qZXQuQ3hUb3dlckpldC5fdHJpZ2dlcl9hY3Rpb24iLAogICAgICAgIGF1dG9zcGVjPVRydWUsCiAgICApCiAgICBkZWYgdGVzdF9jb21tYW5kX3J1bm5lcl9qZXRfYWN0aW9uX2ZhaWx1cmVfc2luZ2xlX2pldF9lcnJvcl9tZXNzYWdlKAogICAgICAgIHNlbGYsIG1vY2tfdHJpZ2dlcgogICAgKToKICAgICAgICBtb2NrX3RyaWdnZXIucmV0dXJuX3ZhbHVlID0geyJzdGF0dXMiOiAxLCAiZXJyb3IiOiAiTm8gYWN0aW9uIGZvdW5kIn0KICAgICAgICBjb21tYW5kID0gc2VsZi5fY3JlYXRlX2pldF9hY3Rpb25fY29tbWFuZCgKICAgICAgICAgICAgc2VsZi5qZXRfdGVtcGxhdGVfdGVzdCwKICAgICAgICAgICAgc2VsZi5hY3Rpb25fc3RvcHBlZF90b19ydW5uaW5nLAogICAgICAgICkKICAgICAgICBsb2cgPSBzZWxmLl9jcmVhdGVfamV0X2FjdGlvbl9sb2coc2VsZi5qZXRfdGVzdCwgY29tbWFuZCkKCiAgICAgICAgcmVzdWx0ID0gc2VsZi5zZXJ2ZXJfdGVzdF8xLl9jb21tYW5kX3J1bm5lcl9qZXRfYWN0aW9uKGxvZykKCiAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXN1bHRbInN0YXR1cyJdLCBHRU5FUkFMX0VSUk9SKQogICAgICAgIHNlbGYuYXNzZXJ0SXNOb25lKHJlc3VsdFsicmVzcG9uc2UiXSkKICAgICAgICBzZWxmLmFzc2VydFRydWUocmVzdWx0WyJlcnJvciJdKQogICAgICAgIGxpbmVzID0gcmVzdWx0WyJlcnJvciJdLnNwbGl0KCJcbiIpCiAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4obGluZXMpLCAyKQogICAgICAgIHNlbGYuYXNzZXJ0SW4oIkFjdGlvbiB0cmlnZ2VyZWQgZm9yIiwgbGluZXNbMF0pCiAgICAgICAgc2VsZi5hc3NlcnRJbihzZWxmLmpldF90ZXN0LnJlZmVyZW5jZSwgbGluZXNbMV0pCiAgICAgICAgc2VsZi5hc3NlcnRJbigiTm8gYWN0aW9uIGZvdW5kIiwgbGluZXNbMV0pCgogICAgQHBhdGNoKAogICAgICAgICJvZG9vLmFkZG9ucy5jZXRtaXhfdG93ZXJfc2VydmVyLm1vZGVscy5jeF90b3dlcl9qZXQuQ3hUb3dlckpldC5fdHJpZ2dlcl9hY3Rpb24iLAogICAgICAgIGF1dG9zcGVjPVRydWUsCiAgICApCiAgICBkZWYgdGVzdF9jb21tYW5kX3J1bm5lcl9qZXRfYWN0aW9uX2ZhaWx1cmVfc3RhdHVzX3dpdGhvdXRfZXJyb3JfdGV4dCgKICAgICAgICBzZWxmLCBtb2NrX3RyaWdnZXIKICAgICk6CiAgICAgICAgbW9ja190cmlnZ2VyLnJldHVybl92YWx1ZSA9IHsic3RhdHVzIjogOTksICJlcnJvciI6IE5vbmV9CiAgICAgICAgY29tbWFuZCA9IHNlbGYuX2NyZWF0ZV9qZXRfYWN0aW9uX2NvbW1hbmQoCiAgICAgICAgICAgIHNlbGYuamV0X3RlbXBsYXRlX3Rlc3QsCiAgICAgICAgICAgIHNlbGYuYWN0aW9uX3N0b3BwZWRfdG9fcnVubmluZywKICAgICAgICApCiAgICAgICAgbG9nID0gc2VsZi5fY3JlYXRlX2pldF9hY3Rpb25fbG9nKHNlbGYuamV0X3Rlc3QsIGNvbW1hbmQpCgogICAgICAgIHJlc3VsdCA9IHNlbGYuc2VydmVyX3Rlc3RfMS5fY29tbWFuZF9ydW5uZXJfamV0X2FjdGlvbihsb2cpCgogICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVzdWx0WyJzdGF0dXMiXSwgR0VORVJBTF9FUlJPUikKICAgICAgICBzZWxmLmFzc2VydEluKHNlbGYuamV0X3Rlc3QucmVmZXJlbmNlLCByZXN1bHRbImVycm9yIl0pCiAgICAgICAgc2VsZi5hc3NlcnRJbigiOTkiLCByZXN1bHRbImVycm9yIl0pCgogICAgQHBhdGNoKAogICAgICAgICJvZG9vLmFkZG9ucy5jZXRtaXhfdG93ZXJfc2VydmVyLm1vZGVscy5jeF90b3dlcl9qZXQuQ3hUb3dlckpldC5fdHJpZ2dlcl9hY3Rpb24iLAogICAgICAgIGF1dG9zcGVjPVRydWUsCiAgICApCiAgICBkZWYgdGVzdF9jb21tYW5kX3J1bm5lcl9qZXRfYWN0aW9uX2ZhaWx1cmVfbXVsdGlwbGVfamV0cyhzZWxmLCBtb2NrX3RyaWdnZXIpOgogICAgICAgIGpldF9iID0gc2VsZi5fY3JlYXRlX2pldCgKICAgICAgICAgICAgbmFtZT0iU2Vjb25kIEpldCIsCiAgICAgICAgICAgIHJlZmVyZW5jZT0iamV0X3NlY29uZCIsCiAgICAgICAgICAgIHRlbXBsYXRlPXNlbGYuamV0X3RlbXBsYXRlX3Rlc3QsCiAgICAgICAgICAgIHNlcnZlcj1zZWxmLnNlcnZlcl90ZXN0XzEsCiAgICAgICAgKQoKICAgICAgICBkZWYgc2lkZV9lZmZlY3QoamV0X3NlbGYsICpfYXJncywgKipfa3dhcmdzKToKICAgICAgICAgICAgamV0X3NlbGYuZW5zdXJlX29uZSgpCiAgICAgICAgICAgIGlmIGpldF9zZWxmLmlkID09IHNlbGYuamV0X3Rlc3QuaWQ6CiAgICAgICAgICAgICAgICByZXR1cm4geyJzdGF0dXMiOiAxLCAiZXJyb3IiOiAiTm8gYWN0aW9uIGZvdW5kIn0KICAgICAgICAgICAgcmV0dXJuIHsic3RhdHVzIjogMiwgImVycm9yIjogIkpldCBpcyBidXN5In0KCiAgICAgICAgbW9ja190cmlnZ2VyLnNpZGVfZWZmZWN0ID0gc2lkZV9lZmZlY3QKCiAgICAgICAgY29tbWFuZCA9IHNlbGYuX2NyZWF0ZV9qZXRfYWN0aW9uX2NvbW1hbmQoCiAgICAgICAgICAgIHNlbGYuamV0X3RlbXBsYXRlX3Rlc3QsCiAgICAgICAgICAgIHNlbGYuYWN0aW9uX3N0b3BwZWRfdG9fcnVubmluZywKICAgICAgICApCiAgICAgICAgbG9nID0gc2VsZi5fY3JlYXRlX2pldF9hY3Rpb25fbG9nKHNlbGYuamV0X3dvb2NvbW1lcmNlLCBjb21tYW5kKQoKICAgICAgICB3aXRoIHBhdGNoKAogICAgICAgICAgICAib2Rvby5hZGRvbnMuY2V0bWl4X3Rvd2VyX3NlcnZlci5tb2RlbHMuY3hfdG93ZXJfamV0LkN4VG93ZXJKZXQuX2dldF9kZXBlbmRlbnRfamV0c19ieV90ZW1wbGF0ZSIsCiAgICAgICAgICAgIGF1dG9zcGVjPVRydWUsCiAgICAgICAgICAgIHJldHVybl92YWx1ZT1zZWxmLmpldF90ZXN0IHwgamV0X2IsCiAgICAgICAgKToKICAgICAgICAgICAgcmVzdWx0ID0gc2VsZi5zZXJ2ZXJfdGVzdF8xLl9jb21tYW5kX3J1bm5lcl9qZXRfYWN0aW9uKGxvZykKCiAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXN1bHRbInN0YXR1cyJdLCBHRU5FUkFMX0VSUk9SKQogICAgICAgIGxpbmVzID0gcmVzdWx0WyJlcnJvciJdLnNwbGl0KCJcbiIpCiAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4obGluZXMpLCAyKQogICAgICAgIHNlbGYuYXNzZXJ0SW4oIkFjdGlvbiB0cmlnZ2VyZWQgZm9yIiwgbGluZXNbMF0pCiAgICAgICAgc2VsZi5hc3NlcnRJbihzZWxmLmpldF90ZXN0LnJlZmVyZW5jZSwgbGluZXNbMF0pCiAgICAgICAgc2VsZi5hc3NlcnRJbihqZXRfYi5yZWZlcmVuY2UsIGxpbmVzWzBdKQogICAgICAgIGFnZyA9IGxpbmVzWzFdCiAgICAgICAgc2VsZi5hc3NlcnRJbihmIntzZWxmLmpldF90ZXN0LnJlZmVyZW5jZX06IE5vIGFjdGlvbiBmb3VuZCIsIGFnZykKICAgICAgICBzZWxmLmFzc2VydEluKGYie2pldF9iLnJlZmVyZW5jZX06IEpldCBpcyBidXN5IiwgYWdnKQoKICAgIEBwYXRjaCgKICAgICAgICAib2Rvby5hZGRvbnMuY2V0bWl4X3Rvd2VyX3NlcnZlci5tb2RlbHMuY3hfdG93ZXJfamV0LkN4VG93ZXJKZXQuX2dldF9kZXBlbmRlbnRfamV0c19ieV90ZW1wbGF0ZSIsCiAgICAgICAgYXV0b3NwZWM9VHJ1ZSwKICAgICkKICAgIGRlZiB0ZXN0X2NvbW1hbmRfcnVubmVyX2pldF9hY3Rpb25fbm9fZGVwZW5kZW50X2pldHMoc2VsZiwgbW9ja19kZXBzKToKICAgICAgICBtb2NrX2RlcHMucmV0dXJuX3ZhbHVlID0gc2VsZi5KZXQuYnJvd3NlKCkKICAgICAgICBjb21tYW5kID0gc2VsZi5fY3JlYXRlX2pldF9hY3Rpb25fY29tbWFuZCgKICAgICAgICAgICAgc2VsZi5qZXRfdGVtcGxhdGVfdGVzdCwKICAgICAgICAgICAgc2VsZi5hY3Rpb25fc3RvcHBlZF90b19ydW5uaW5nLAogICAgICAgICkKICAgICAgICBsb2cgPSBzZWxmLl9jcmVhdGVfamV0X2FjdGlvbl9sb2coc2VsZi5qZXRfd29vY29tbWVyY2UsIGNvbW1hbmQpCgogICAgICAgIHJlc3VsdCA9IHNlbGYuc2VydmVyX3Rlc3RfMS5fY29tbWFuZF9ydW5uZXJfamV0X2FjdGlvbihsb2cpCgogICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVzdWx0WyJzdGF0dXMiXSwgMCkKICAgICAgICBzZWxmLmFzc2VydElzTm9uZShyZXN1bHRbImVycm9yIl0pCiAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHJlc3VsdFsicmVzcG9uc2UiXSkKICAgICAgICBzZWxmLmFzc2VydEluKHNlbGYuamV0X3dvb2NvbW1lcmNlLm5hbWUsIHJlc3VsdFsicmVzcG9uc2UiXSkKICAgICAgICBzZWxmLmFzc2VydEluKHNlbGYuamV0X3RlbXBsYXRlX3Rlc3QubmFtZSwgcmVzdWx0WyJyZXNwb25zZSJdKQo= \ No newline at end of file