Files
odoo-addons/addons/cetmix_tower_git/models/cx_tower_git_repo.py

1 line
17 KiB
Python

IyBDb3B5cmlnaHQgKEMpIDIwMjQgQ2V0bWl4IE/DnAojIExpY2Vuc2UgQUdQTC0zLjAgb3IgbGF0ZXIgKGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9hZ3BsKS4KCmltcG9ydCBnaXR1cmxwYXJzZQoKZnJvbSBvZG9vIGltcG9ydCBfLCBhcGksIGZpZWxkcywgbW9kZWxzCmZyb20gb2Rvby5leGNlcHRpb25zIGltcG9ydCBWYWxpZGF0aW9uRXJyb3IKZnJvbSBvZG9vLnRvb2xzIGltcG9ydCBvcm1jYWNoZQoKCmNsYXNzIEN4VG93ZXJHaXRSZXBvKG1vZGVscy5Nb2RlbCk6CiAgICAiIiIKICAgIEdpdCBSZXBvc2l0b3J5LgogICAgUmVwcmVzZW50cyBhIGdpdCByZXBvc2l0b3J5IHdpdGggaXRzIG1ldGFkYXRhIGFuZCBjb25maWd1cmF0aW9uLgogICAgIiIiCgogICAgX25hbWUgPSAiY3gudG93ZXIuZ2l0LnJlcG8iCiAgICBfaW5oZXJpdCA9IFsKICAgICAgICAiY3gudG93ZXIucmVmZXJlbmNlLm1peGluIiwKICAgICAgICAiY3gudG93ZXIueWFtbC5taXhpbiIsCiAgICBdCiAgICBfZGVzY3JpcHRpb24gPSAiQ2V0bWl4IFRvd2VyIEdpdCBSZXBvc2l0b3J5IgogICAgX29yZGVyID0gIm5hbWUiCiAgICBfcmVjX25hbWVzX3NlYXJjaCA9IFsicmVwbyIsICJob3N0IiwgIm93bmVyX2lkIl0KCiAgICBhY3RpdmUgPSBmaWVsZHMuQm9vbGVhbihkZWZhdWx0PVRydWUsIGhlbHA9IkluZGljYXRlcyBpZiB0aGUgcmVwb3NpdG9yeSBpcyBhY3RpdmUiKQogICAgbmFtZSA9IGZpZWxkcy5DaGFyKAogICAgICAgIGNvbXB1dGU9Il9jb21wdXRlX25hbWUiLCBzdG9yZT1UcnVlLCByZXF1aXJlZD1GYWxzZSwgaW5kZXg9InRyaWdyYW0iCiAgICApCiAgICByZWZlcmVuY2UgPSBmaWVsZHMuQ2hhcigKICAgICAgICBpbmRleD1UcnVlLAogICAgICAgIGNvbXB1dGU9Il9jb21wdXRlX25hbWUiLAogICAgICAgIHJlcXVpcmVkPUZhbHNlLAogICAgICAgIHN0b3JlPVRydWUsCiAgICApCiAgICByZXBvID0gZmllbGRzLkNoYXIoCiAgICAgICAgc3RyaW5nPSJSZXBvc2l0b3J5IE5hbWUiLAogICAgICAgIHJlYWRvbmx5PVRydWUsCiAgICAgICAgaGVscD0iUmVwb3NpdG9yeSBuYW1lIChlLmcuLCAnY2V0bWl4LXRvd2VyJywgJ29kb28nKSIsCiAgICApCiAgICB1cmwgPSBmaWVsZHMuQ2hhcigKICAgICAgICBzdHJpbmc9IkdlbmVyaWMgVVJMIiwKICAgICAgICBoZWxwPSJEaXNwbGF5ZWQgaW4gJ2h0dHBzJyBmb3JtYXQsIGJ1dCBjYW4gYmUgZW50ZXJlZCBpbiBhbnkgZm9ybWF0IiwKICAgICAgICBjb21wdXRlPSJfY29tcHV0ZV91cmwiLAogICAgICAgIGludmVyc2U9Il9pbnZlcnNlX3VybCIsCiAgICAgICAgcmVxdWlyZWQ9VHJ1ZSwKICAgICAgICBjb21wdXRlX3N1ZG89VHJ1ZSwKICAgICkKICAgIHVybF9zc2ggPSBmaWVsZHMuQ2hhcigKICAgICAgICBzdHJpbmc9IlNTSCBVUkwiLAogICAgICAgIGhlbHA9IlNTSCBVUkwgb2YgdGhlIHJlcG9zaXRvcnkiLAogICAgICAgIGNvbXB1dGU9Il9jb21wdXRlX3VybCIsCiAgICAgICAgY29tcHV0ZV9zdWRvPVRydWUsCiAgICApCiAgICB1cmxfZ2l0ID0gZmllbGRzLkNoYXIoCiAgICAgICAgc3RyaW5nPSJHSVQgVVJMIiwKICAgICAgICBoZWxwPSJHSVQgVVJMIG9mIHRoZSByZXBvc2l0b3J5IiwKICAgICAgICBjb21wdXRlPSJfY29tcHV0ZV91cmwiLAogICAgICAgIGNvbXB1dGVfc3Vkbz1UcnVlLAogICAgKQogICAgaXNfcHJpdmF0ZSA9IGZpZWxkcy5Cb29sZWFuKAogICAgICAgIHN0cmluZz0iUHJpdmF0ZSIsIGRlZmF1bHQ9RmFsc2UsIGhlbHA9IkluZGljYXRlcyBpZiB0aGUgcmVwb3NpdG9yeSBpcyBwcml2YXRlIgogICAgKQogICAgcHJvdmlkZXIgPSBmaWVsZHMuU2VsZWN0aW9uKAogICAgICAgIHNlbGVjdGlvbj0iX3NlbGVjdGlvbl9wcm92aWRlciIsCiAgICAgICAgcmVxdWlyZWQ9VHJ1ZSwKICAgICAgICBkZWZhdWx0PSJvdGhlciIsCiAgICAgICAgaGVscD0iUmVwb3NpdG9yeSBwcm92aWRlciB0byBkZXRlcm1pbmUgcHJvdmlkZXItYmFzZWQgYmVoYXZpb3VyIiwKICAgICkKICAgIGhvc3QgPSBmaWVsZHMuQ2hhcigKICAgICAgICByZWFkb25seT1UcnVlLAogICAgICAgIGluZGV4PVRydWUsCiAgICAgICAgaGVscD0iUmVwb3NpdG9yeSBob3N0IChlLmcuLCAnZ2l0aHViLmNvbScsICdnaXRsYWIuY29tJykiLAogICAgKQogICAgb3duZXJfaWQgPSBmaWVsZHMuTWFueTJvbmUoCiAgICAgICAgY29tb2RlbF9uYW1lPSJjeC50b3dlci5naXQucmVwby5vd25lciIsCiAgICAgICAgcmVhZG9ubHk9VHJ1ZSwKICAgICAgICBoZWxwPSJSZXBvc2l0b3J5IG93bmVyIChlLmcuLCAnY2V0bWl4JyBvciAnT0NBJykiLAogICAgKQogICAgc2VjcmV0X2lkID0gZmllbGRzLk1hbnkyb25lKAogICAgICAgIGNvbW9kZWxfbmFtZT0iY3gudG93ZXIua2V5IiwKICAgICAgICBzdHJpbmc9IlNlY3JldCIsCiAgICAgICAgZG9tYWluPSJbKCdrZXlfdHlwZScsICc9JywgJ3MnKV0iLAogICAgICAgIGhlbHA9IkN1c3RvbSBzZWNyZXQgdXNlZCBmb3IgdGhpcyByZXBvc2l0b3J5IiwKICAgICkKICAgIHJlbW90ZV9pZHMgPSBmaWVsZHMuT25lMm1hbnkoCiAgICAgICAgY29tb2RlbF9uYW1lPSJjeC50b3dlci5naXQucmVtb3RlIiwKICAgICAgICBpbnZlcnNlX25hbWU9InJlcG9faWQiLAogICAgICAgIGhlbHA9IlJlbW90ZXMgdGhhdCB1c2UgdGhpcyByZXBvc2l0b3J5IiwKICAgICkKICAgIGdpdF9wcm9qZWN0X2lkcyA9IGZpZWxkcy5NYW55Mm1hbnkoCiAgICAgICAgY29tb2RlbF9uYW1lPSJjeC50b3dlci5naXQucHJvamVjdCIsCiAgICAgICAgcmVsYXRpb249ImN4X3Rvd2VyX2dpdF9yZXBvX3Byb2plY3RfcmVsIiwKICAgICAgICBjb2x1bW4xPSJyZXBvX2lkIiwKICAgICAgICBjb2x1bW4yPSJwcm9qZWN0X2lkIiwKICAgICAgICBjb21wdXRlPSJfY29tcHV0ZV9naXRfcHJvamVjdF9pZHMiLAogICAgICAgIHN0b3JlPVRydWUsCiAgICAgICAgaGVscD0iUHJvamVjdHMgdGhpcyByZXBvc2l0b3J5IGlzIHVzZWQgaW4iLAogICAgKQogICAgcmVtb3RlX2NvdW50ID0gZmllbGRzLkludGVnZXIoCiAgICAgICAgY29tcHV0ZT0iX2NvbXB1dGVfcmVtb3RlX2NvdW50IiwKICAgICAgICBoZWxwPSJOdW1iZXIgb2YgcmVtb3RlcyB0aGlzIHJlcG9zaXRvcnkgaXMgdXNlZCBpbiIsCiAgICApCiAgICBnaXRfcHJvamVjdF9jb3VudCA9IGZpZWxkcy5JbnRlZ2VyKAogICAgICAgIGNvbXB1dGU9Il9jb21wdXRlX2dpdF9wcm9qZWN0X2NvdW50IiwKICAgICAgICBoZWxwPSJOdW1iZXIgb2YgcHJvamVjdHMgdGhpcyByZXBvc2l0b3J5IGlzIHVzZWQgaW4iLAogICAgKQoKICAgIF9zcWxfY29uc3RyYWludHMgPSBbCiAgICAgICAgKAogICAgICAgICAgICAidW5pcXVlX3JlcG9faG9zdF9vd25lciIsCiAgICAgICAgICAgICJ1bmlxdWUocmVwbywgaG9zdCwgb3duZXJfaWQpIiwKICAgICAgICAgICAgIkEgcmVwb3NpdG9yeSB3aXRoIHRoZSBzYW1lIG5hbWUsIGhvc3QsIGFuZCBvd25lciBhbHJlYWR5IGV4aXN0cy4iLAogICAgICAgICksCiAgICBdCgogICAgIyAtLSBTZWxlY3Rpb24KICAgIGRlZiBfc2VsZWN0aW9uX3Byb3ZpZGVyKHNlbGYpOgogICAgICAgICIiIkF2YWlsYWJsZSByZXBvc2l0b3J5IHByb3ZpZGVycy4KCiAgICAgICAgUmV0dXJuczoKICAgICAgICAgICAgTGlzdCBvZiB0dXBsZXM6IGF2YWlsYWJsZSBvcHRpb25zLgogICAgICAgICIiIgogICAgICAgIHJldHVybiBbCiAgICAgICAgICAgICgiZ2l0aHViIiwgIkdpdEh1YiIpLAogICAgICAgICAgICAoImdpdGxhYiIsICJHaXRMYWIiKSwKICAgICAgICAgICAgKCJiaXRidWNrZXQiLCAiQml0YnVja2V0IiksCiAgICAgICAgICAgICgiYXNzZW1ibGEiLCAiQXNzZW1ibGEiKSwKICAgICAgICAgICAgKCJvdGhlciIsICJPdGhlciIpLAogICAgICAgIF0KCiAgICAjIC0tIENvbXB1dGVzCiAgICBAYXBpLmRlcGVuZHMoImhvc3QiLCAib3duZXJfaWQiLCAicmVwbyIpCiAgICBkZWYgX2NvbXB1dGVfbmFtZShzZWxmKToKICAgICAgICAiIiIKICAgICAgICBDb21wdXRlIG5hbWUgaW4gZm9ybWF0OiBob3N0L293bmVyL25hbWUuCiAgICAgICAgQ29tcHV0ZSByZWZlcmVuY2UgYmFzZWQgb24gbmFtZS4KICAgICAgICAiIiIKICAgICAgICBmb3IgcmVwbyBpbiBzZWxmOgogICAgICAgICAgICBpZiByZXBvLmhvc3QgYW5kIHJlcG8ub3duZXJfaWQgYW5kIHJlcG8ucmVwbzoKICAgICAgICAgICAgICAgIG5hbWUgPSBmIntyZXBvLmhvc3R9L3tyZXBvLm93bmVyX2lkLm5hbWV9L3tyZXBvLnJlcG99IgogICAgICAgICAgICAgICAgcmVmZXJlbmNlID0gcmVwby5fZ2VuZXJhdGVfb3JfZml4X3JlZmVyZW5jZShuYW1lKQogICAgICAgICAgICAgICAgcmVwby51cGRhdGUoCiAgICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICAibmFtZSI6IG5hbWUsCiAgICAgICAgICAgICAgICAgICAgICAgICJyZWZlcmVuY2UiOiByZWZlcmVuY2UsCiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICBlbHNlOgogICAgICAgICAgICAgICAgcmVwby51cGRhdGUoCiAgICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICAibmFtZSI6IEZhbHNlLAogICAgICAgICAgICAgICAgICAgICAgICAicmVmZXJlbmNlIjogRmFsc2UsCiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgKQoKICAgIEBhcGkuZGVwZW5kcygicmVtb3RlX2lkcyIsICJyZW1vdGVfaWRzLmdpdF9wcm9qZWN0X2lkIikKICAgIGRlZiBfY29tcHV0ZV9naXRfcHJvamVjdF9pZHMoc2VsZik6CiAgICAgICAgIiIiQ29tcHV0ZSBwcm9qZWN0cyB0aGlzIHJlcG9zaXRvcnkgaXMgdXNlZCBpbi4iIiIKICAgICAgICBmb3IgcmVwbyBpbiBzZWxmOgogICAgICAgICAgICBwcm9qZWN0cyA9IHJlcG8ucmVtb3RlX2lkcy5tYXBwZWQoImdpdF9wcm9qZWN0X2lkIikKICAgICAgICAgICAgcmVwby5naXRfcHJvamVjdF9pZHMgPSBbKDYsIDAsIHByb2plY3RzLmlkcyldCgogICAgQGFwaS5kZXBlbmRzKCJyZW1vdGVfaWRzIikKICAgIGRlZiBfY29tcHV0ZV9yZW1vdGVfY291bnQoc2VsZik6CiAgICAgICAgIiIiQ29tcHV0ZSByZW1vdGUgY291bnQgZmllbGQuIiIiCiAgICAgICAgZm9yIHJlcG8gaW4gc2VsZjoKICAgICAgICAgICAgcmVwby5yZW1vdGVfY291bnQgPSBsZW4ocmVwby5yZW1vdGVfaWRzKQoKICAgIEBhcGkuZGVwZW5kcygiZ2l0X3Byb2plY3RfaWRzIikKICAgIGRlZiBfY29tcHV0ZV9naXRfcHJvamVjdF9jb3VudChzZWxmKToKICAgICAgICAiIiJDb21wdXRlIHByb2plY3QgY291bnQgZmllbGQuIiIiCiAgICAgICAgZm9yIHJlcG8gaW4gc2VsZjoKICAgICAgICAgICAgcmVwby5naXRfcHJvamVjdF9jb3VudCA9IGxlbihyZXBvLmdpdF9wcm9qZWN0X2lkcykKCiAgICBAYXBpLmRlcGVuZHMoInJlcG8iLCAiaG9zdCIsICJvd25lcl9pZCIpCiAgICBkZWYgX2NvbXB1dGVfdXJsKHNlbGYpOgogICAgICAgICIiIkNvbXB1dGUgVVJMIGZyb20gcmVwb3NpdG9yeSBwcm9wZXJ0aWVzLiIiIgogICAgICAgIGZvciByZXBvIGluIHNlbGY6CiAgICAgICAgICAgIGlmIHJlcG8ucmVwbyBhbmQgcmVwby5ob3N0IGFuZCByZXBvLm93bmVyX2lkOgogICAgICAgICAgICAgICAgaHR0cHNfdXJsID0gZiJodHRwczovL3tyZXBvLmhvc3R9L3tyZXBvLm93bmVyX2lkLm5hbWV9L3tyZXBvLnJlcG99LmdpdCIKICAgICAgICAgICAgZWxpZiByZXBvLnJlcG8gYW5kIHJlcG8uaG9zdDoKICAgICAgICAgICAgICAgIGh0dHBzX3VybCA9IGYiaHR0cHM6Ly97cmVwby5ob3N0fS97cmVwby5yZXBvfS5naXQiCiAgICAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICAgICBodHRwc191cmwgPSAiIgogICAgICAgICAgICBpZiBodHRwc191cmw6CiAgICAgICAgICAgICAgICB0cnk6CiAgICAgICAgICAgICAgICAgICAgcGFyc2VkX3VybHMgPSBnaXR1cmxwYXJzZS5wYXJzZShodHRwc191cmwpLnVybHMKICAgICAgICAgICAgICAgICAgICB1cmxzID0gewogICAgICAgICAgICAgICAgICAgICAgICAidXJsIjogaHR0cHNfdXJsLAogICAgICAgICAgICAgICAgICAgICAgICAidXJsX3NzaCI6IHBhcnNlZF91cmxzWyJzc2giXSwKICAgICAgICAgICAgICAgICAgICAgICAgInVybF9naXQiOiBwYXJzZWRfdXJsc1siZ2l0Il0sCiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgZXhjZXB0IEV4Y2VwdGlvbiBhcyBlOiAgIyBub3FhOiBGODQxIGNhdGNoIGFsbCBlcnJvcnMKICAgICAgICAgICAgICAgICAgICB1cmxzID0gewogICAgICAgICAgICAgICAgICAgICAgICAidXJsIjogIiIsCiAgICAgICAgICAgICAgICAgICAgICAgICJ1cmxfc3NoIjogIiIsCiAgICAgICAgICAgICAgICAgICAgICAgICJ1cmxfZ2l0IjogIiIsCiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICBlbHNlOgogICAgICAgICAgICAgICAgdXJscyA9IHsKICAgICAgICAgICAgICAgICAgICAidXJsIjogIiIsCiAgICAgICAgICAgICAgICAgICAgInVybF9zc2giOiAiIiwKICAgICAgICAgICAgICAgICAgICAidXJsX2dpdCI6ICIiLAogICAgICAgICAgICAgICAgfQogICAgICAgICAgICByZXBvLnVwZGF0ZSh1cmxzKQoKICAgIGRlZiBfaW52ZXJzZV91cmwoc2VsZik6CiAgICAgICAgIiIiUGFyc2UgVVJMIHRvIHVwZGF0ZSByZXBvc2l0b3J5IHByb3BlcnRpZXMuIiIiCiAgICAgICAgZm9yIHJlcG8gaW4gc2VsZjoKICAgICAgICAgICAgaWYgbm90IHJlcG8udXJsOgogICAgICAgICAgICAgICAgY29udGludWUKICAgICAgICAgICAgIyBQYXJzZSBVUkwKICAgICAgICAgICAgcGFyc2VkX3VybF9kaWN0ID0gc2VsZi5fcGFyc2VfdXJsKHJlcG8udXJsKQogICAgICAgICAgICAjIFVwZGF0ZSByZXBvc2l0b3J5IHByb3BlcnRpZXMKICAgICAgICAgICAgcmVwby51cGRhdGUocGFyc2VkX3VybF9kaWN0KQoKICAgIGRlZiBhY3Rpb25fdmlld19yZW1vdGVzKHNlbGYpOgogICAgICAgICIiIk9wZW4gcmVtb3RlcyBsaXN0IHZpZXcuIiIiCiAgICAgICAgc2VsZi5lbnN1cmVfb25lKCkKICAgICAgICBhY3Rpb24gPSBzZWxmLmVudlsiaXIuYWN0aW9ucy5hY3Rpb25zIl0uX2Zvcl94bWxfaWQoCiAgICAgICAgICAgICJjZXRtaXhfdG93ZXJfZ2l0LmFjdGlvbl9jeF90b3dlcl9naXRfcmVtb3RlIgogICAgICAgICkKICAgICAgICBhY3Rpb24udXBkYXRlKAogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAiZG9tYWluIjogWygicmVwb19pZCIsICI9Iiwgc2VsZi5pZCldLAogICAgICAgICAgICAgICAgImNvbnRleHQiOiB7ImRlZmF1bHRfcmVwb19pZCI6IHNlbGYuaWR9LAogICAgICAgICAgICB9CiAgICAgICAgKQogICAgICAgIHJldHVybiBhY3Rpb24KCiAgICBkZWYgYWN0aW9uX3ZpZXdfcHJvamVjdHMoc2VsZik6CiAgICAgICAgIiIiT3BlbiBwcm9qZWN0cyBsaXN0IHZpZXcuIiIiCiAgICAgICAgc2VsZi5lbnN1cmVfb25lKCkKICAgICAgICBhY3Rpb24gPSBzZWxmLmVudlsiaXIuYWN0aW9ucy5hY3Rpb25zIl0uX2Zvcl94bWxfaWQoCiAgICAgICAgICAgICJjZXRtaXhfdG93ZXJfZ2l0LmN4X3Rvd2VyX2dpdF9wcm9qZWN0X2FjdGlvbiIKICAgICAgICApCiAgICAgICAgYWN0aW9uLnVwZGF0ZSgKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgImRvbWFpbiI6IFsoInJlcG9faWRzIiwgImluIiwgc2VsZi5pZCldLAogICAgICAgICAgICAgICAgImNvbnRleHQiOiB7ImRlZmF1bHRfcmVwb19pZHMiOiBbKDQsIHNlbGYuaWQpXX0sCiAgICAgICAgICAgIH0KICAgICAgICApCiAgICAgICAgcmV0dXJuIGFjdGlvbgoKICAgIEBhcGkubW9kZWxfY3JlYXRlX211bHRpCiAgICBkZWYgY3JlYXRlKHNlbGYsIHZhbHNfbGlzdCk6CiAgICAgICAgIiIiQ3JlYXRlIG11bHRpcGxlIHJlcG9zaXRvcmllcy4iIiIKICAgICAgICAjIENoZWNrIGlmIGFueSBvZiB0aGUgcmVwb3NpdG9yaWVzIGFscmVhZHkgZXhpc3QKICAgICAgICAjIFRoaXMgaXMgbmVlZGVkIHRvIGFsbG93IGNyZWF0aW5nIHJlcG9zaXRvcmllcyB1c2luZyBqdXN0IGFuIFVSTC4KICAgICAgICAjIEVnIHdoZW4gaW1wb3J0aW5nIHJlcG9zaXRvcmllcyBmcm9tIGEgWUFNTCBmaWxlLgogICAgICAgIHJlcyA9IHNlbGYuYnJvd3NlKCkKICAgICAgICBleGlzdGluZ19yZXBvX2lkcyA9IFtdCiAgICAgICAgdmFsc19saXN0X3RvX2NyZWF0ZSA9IFtdCiAgICAgICAgZm9yIHZhbHMgaW4gdmFsc19saXN0OgogICAgICAgICAgICB1cmwgPSB2YWxzLmdldCgidXJsIikKICAgICAgICAgICAgaWYgdXJsOgogICAgICAgICAgICAgICAgIyBUcnkgdG8gZ2V0IHJlcG9zaXRvcnkgYnkgVVJMCiAgICAgICAgICAgICAgICByZXBvX2lkID0gc2VsZi5fZ2V0X3JlcG9faWRfYnlfdXJsKAogICAgICAgICAgICAgICAgICAgIHVybD11cmwsIGNyZWF0ZT1GYWxzZSwgcmFpc2VfaWZfaW52YWxpZD1GYWxzZQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgaWYgcmVwb19pZDoKICAgICAgICAgICAgICAgICAgICBleGlzdGluZ19yZXBvX2lkcy5hcHBlbmQocmVwb19pZCkKICAgICAgICAgICAgICAgICAgICBjb250aW51ZQogICAgICAgICAgICAgICAgIyBQYXJzZSBVUkwgYW5kIHVwZGF0ZSB2YWxzCiAgICAgICAgICAgICAgICBwYXJzZWRfdXJsX2RpY3QgPSBzZWxmLl9wYXJzZV91cmwodXJsPXVybCwgcmFpc2VfaWZfaW52YWxpZD1UcnVlKQogICAgICAgICAgICAgICAgdmFscy51cGRhdGUocGFyc2VkX3VybF9kaWN0KQogICAgICAgICAgICAjIE90aGVyd2lzZSwgYWRkIHRvIGNyZWF0ZSBsaXN0CiAgICAgICAgICAgIHZhbHNfbGlzdF90b19jcmVhdGUuYXBwZW5kKHZhbHMpCiAgICAgICAgIyBDb21wb3NlIHRoZSByZXN1bHQKICAgICAgICBpZiB2YWxzX2xpc3RfdG9fY3JlYXRlOgogICAgICAgICAgICByZXMgfD0gc3VwZXIoKS5jcmVhdGUodmFsc19saXN0X3RvX2NyZWF0ZSkKICAgICAgICBpZiBleGlzdGluZ19yZXBvX2lkczoKICAgICAgICAgICAgcmVzIHw9IHNlbGYuYnJvd3NlKGV4aXN0aW5nX3JlcG9faWRzKQogICAgICAgIHNlbGYuY2xlYXJfY2FjaGVzKCkKICAgICAgICByZXR1cm4gcmVzCgogICAgZGVmIHdyaXRlKHNlbGYsIHZhbHMpOgogICAgICAgICIiIldyaXRlIHJlcG9zaXRvcmllcy4iIiIKICAgICAgICByZXMgPSBzdXBlcigpLndyaXRlKHZhbHMpCiAgICAgICAgc2VsZi5jbGVhcl9jYWNoZXMoKQogICAgICAgIHJldHVybiByZXMKCiAgICBkZWYgdW5saW5rKHNlbGYpOgogICAgICAgICIiIlVubGluayByZXBvc2l0b3JpZXMuIiIiCiAgICAgICAgcmVzID0gc3VwZXIoKS51bmxpbmsoKQogICAgICAgIHNlbGYuY2xlYXJfY2FjaGVzKCkKICAgICAgICByZXR1cm4gcmVzCgogICAgQGFwaS5tb2RlbAogICAgZGVmIG5hbWVfY3JlYXRlKHNlbGYsIG5hbWUpOgogICAgICAgICIiIgogICAgICAgIENyZWF0ZSBhIG5ldyByZXBvc2l0b3J5IGZyb20gYSBVUkwuCiAgICAgICAgIiIiCiAgICAgICAgcmVwb19pZCA9IHNlbGYuX2dldF9yZXBvX2lkX2J5X3VybCh1cmw9bmFtZSwgY3JlYXRlPVRydWUsIHJhaXNlX2lmX2ludmFsaWQ9VHJ1ZSkKICAgICAgICByZXBvID0gc2VsZi5icm93c2UocmVwb19pZCkKCiAgICAgICAgcmV0dXJuIHJlcG9faWQsIHJlcG8uZGlzcGxheV9uYW1lCgogICAgQG9ybWNhY2hlKCJzZWxmLmVudi51aWQiLCAic2VsZi5lbnYuc3UiLCAidXJsIikKICAgIGRlZiBfZ2V0X3JlcG9faWRfYnlfdXJsKHNlbGYsIHVybCwgY3JlYXRlPUZhbHNlLCByYWlzZV9pZl9pbnZhbGlkPUZhbHNlKToKICAgICAgICAiIiJHZXQgcmVwb3NpdG9yeSBpZCBieSBVUkwuCgogICAgICAgIEFyZ3M6CiAgICAgICAgICAgIHVybCAoQ2hhcik6IFVSTCB0byBnZXQgcmVwb3NpdG9yeSBpZAogICAgICAgICAgICBjcmVhdGUgKEJvb2wsIG9wdGlvbmFsKTogQ3JlYXRlIHJlcG9zaXRvcnkgaWYgbm90IGZvdW5kLgogICAgICAgICAgICAgICAgRGVmYXVsdCBpcyBGYWxzZS4KICAgICAgICAgICAgcmFpc2VfaWZfaW52YWxpZCAoQm9vbCwgb3B0aW9uYWwpOiBSYWlzZSBWYWxpZGF0aW9uRXJyb3IKICAgICAgICAgICAgICAgIGlmIHRoZSBVUkwgaXMgbm90IHZhbGlkLiBEZWZhdWx0IGlzIEZhbHNlLgoKICAgICAgICBSZXR1cm5zOgogICAgICAgICAgICBpbnQ6IFJlcG9zaXRvcnkgSUQKICAgICAgICAgICAgb3IgRmFsc2UgaWYgdGhlIFVSTCBpcyBub3QgdmFsaWQgYW5kIHJhaXNlX2lmX2ludmFsaWQgaXMgRmFsc2UKCiAgICAgICAgUmFpc2VzOgogICAgICAgICAgICBWYWxpZGF0aW9uRXJyb3I6IElmIHRoZSBVUkwgaXMgbm90IHZhbGlkIGFuZCByYWlzZV9pZl9pbnZhbGlkIGlzIFRydWUKICAgICAgICAiIiIKICAgICAgICAjIFBhcnNlIFVSTAogICAgICAgIHBhcnNlZF91cmxfZGljdCA9IHNlbGYuX3BhcnNlX3VybCh1cmwsIHJhaXNlX2lmX2ludmFsaWQ9cmFpc2VfaWZfaW52YWxpZCkKICAgICAgICBpZiBub3QgcGFyc2VkX3VybF9kaWN0OgogICAgICAgICAgICByZXR1cm4gRmFsc2UKCiAgICAgICAgIyBDaGVjayBpZiByZXBvc2l0b3J5IGFscmVhZHkgZXhpc3RzIGFuZCB1c2UgaXQKICAgICAgICByZXBvID0gc2VsZi5zZWFyY2goCiAgICAgICAgICAgIFsKICAgICAgICAgICAgICAgICgicmVwbyIsICI9IiwgcGFyc2VkX3VybF9kaWN0WyJyZXBvIl0pLAogICAgICAgICAgICAgICAgKCJob3N0IiwgIj0iLCBwYXJzZWRfdXJsX2RpY3RbImhvc3QiXSksCiAgICAgICAgICAgICAgICAoIm93bmVyX2lkIiwgIj0iLCBwYXJzZWRfdXJsX2RpY3RbIm93bmVyX2lkIl0pLAogICAgICAgICAgICBdLAogICAgICAgICAgICBsaW1pdD0xLAogICAgICAgICkKCiAgICAgICAgIyBPdGhlcndpc2UsIGNyZWF0ZSBhIG5ldyBvbmUKICAgICAgICBpZiBub3QgcmVwbyBhbmQgY3JlYXRlOgogICAgICAgICAgICByZXBvID0gc2VsZi5jcmVhdGUocGFyc2VkX3VybF9kaWN0KQoKICAgICAgICByZXR1cm4gcmVwby5pZCBpZiByZXBvIGVsc2UgRmFsc2UKCiAgICBkZWYgX3BhcnNlX3VybChzZWxmLCB1cmwsIHJhaXNlX2lmX2ludmFsaWQ9VHJ1ZSk6CiAgICAgICAgIiIiUGFyc2UgVVJMIHRvIGdldCBuYW1lLCBob3N0IGFuZCBvd25lci4KCiAgICAgICAgQXJnczoKICAgICAgICAgICAgdXJsIChDaGFyKTogVVJMIHRvIHBhcnNlCgogICAgICAgIFJhaXNlczoKICAgICAgICAgICAgVmFsaWRhdGlvbkVycm9yOiBJZiB0aGUgVVJMIGlzIG5vdCB2YWxpZAoKICAgICAgICBSZXR1cm5zOgogICAgICAgICAgICBEaWN0OiBEaWN0aW9uYXJ5IHdpdGggbmFtZSwgaG9zdCBhbmQgb3duZXIKICAgICAgICAgICAgb3IgZW1wdHkgZGljdCBpZiB0aGUgVVJMIGlzIG5vdCB2YWxpZCBhbmQgcmFpc2VfaWZfaW52YWxpZCBpcyBGYWxzZQogICAgICAgICIiIgoKICAgICAgICAjIFZhbGlkYXRlIFVSTAogICAgICAgIGlmIG5vdCBnaXR1cmxwYXJzZS52YWxpZGF0ZSh1cmwpOgogICAgICAgICAgICBpZiByYWlzZV9pZl9pbnZhbGlkOgogICAgICAgICAgICAgICAgcmFpc2UgVmFsaWRhdGlvbkVycm9yKF8oIk5vdCBhIHZhbGlkIHJlcG9zaXRvcnkgVVJMISIpKQogICAgICAgICAgICByZXR1cm4ge30KCiAgICAgICAgIyBQYXJzZSBVUkwKICAgICAgICBwYXJzZWRfdXJsID0gZ2l0dXJscGFyc2UucGFyc2UodXJsKQoKICAgICAgICAjIEdldCBvciBjcmVhdGUgb3duZXIKICAgICAgICBvd25lcl9pZCA9IHNlbGYuZW52WyJjeC50b3dlci5naXQucmVwby5vd25lciJdLl9nZXRfb3duZXJfaWRfYnlfbmFtZSgKICAgICAgICAgICAgbmFtZT1wYXJzZWRfdXJsLm93bmVyLAogICAgICAgICAgICBjcmVhdGU9VHJ1ZSwKICAgICAgICApCgogICAgICAgICMgR2V0IHByb3ZpZGVyIGJhc2VkIG9uIGhvc3QKICAgICAgICBwcm92aWRlciA9IHNlbGYuX2dldF9wcm92aWRlcihwYXJzZWRfdXJsKQoKICAgICAgICByZXR1cm4gewogICAgICAgICAgICAicmVwbyI6IHBhcnNlZF91cmwucmVwbywKICAgICAgICAgICAgImhvc3QiOiBwYXJzZWRfdXJsLmhvc3QsCiAgICAgICAgICAgICJvd25lcl9pZCI6IG93bmVyX2lkLAogICAgICAgICAgICAicHJvdmlkZXIiOiBwcm92aWRlciwKICAgICAgICB9CgogICAgZGVmIF9nZXRfcHJvdmlkZXIoc2VsZiwgcGFyc2VkX3VybCk6CiAgICAgICAgIiIiR2V0IHByb3ZpZGVyLgoKICAgICAgICBBcmdzOgogICAgICAgICAgICBwYXJzZWRfdXJsIChHaXRVcmxQYXJzZWQpOiBQYXJzZWQgVVJMIG9iamVjdAoKICAgICAgICBSZXR1cm5zOgogICAgICAgICAgICBzdHI6IFByb3ZpZGVyIG5hbWUKICAgICAgICAiIiIKICAgICAgICBwcm92aWRlciA9ICJvdGhlciIKICAgICAgICBpZiBwYXJzZWRfdXJsLmFzc2VtYmxhOgogICAgICAgICAgICBwcm92aWRlciA9ICJhc3NlbWJsYSIKICAgICAgICBlbGlmIHBhcnNlZF91cmwuYml0YnVja2V0IG9yICJiaXRidWNrZXQiIGluIHBhcnNlZF91cmwuaG9zdDoKICAgICAgICAgICAgcHJvdmlkZXIgPSAiYml0YnVja2V0IgogICAgICAgIGVsaWYgcGFyc2VkX3VybC5naXRsYWI6CiAgICAgICAgICAgIHByb3ZpZGVyID0gImdpdGxhYiIKICAgICAgICBlbGlmIHBhcnNlZF91cmwuZ2l0aHViOgogICAgICAgICAgICBwcm92aWRlciA9ICJnaXRodWIiCgogICAgICAgIHJldHVybiBwcm92aWRlcgoKICAgICMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgICAjIFlBTUwgbWl4aW4gbWV0aG9kcwogICAgIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAgIGRlZiBfZ2V0X2ZpZWxkc19mb3JfeWFtbChzZWxmKToKICAgICAgICByZXMgPSBzdXBlcigpLl9nZXRfZmllbGRzX2Zvcl95YW1sKCkKICAgICAgICByZXMgKz0gWwogICAgICAgICAgICAidXJsIiwKICAgICAgICAgICAgImlzX3ByaXZhdGUiLAogICAgICAgICAgICAic2VjcmV0X2lkIiwKICAgICAgICBdCiAgICAgICAgcmV0dXJuIHJlcwo=