[
  {
    "uri": "features/untrusted_partitions.feature",
    "id": "untrusted-partitions",
    "keyword": "Feature",
    "name": "Untrusted partitions",
    "description": "  As a Tails user\n  I don't want to touch other media than the one Tails runs from",
    "line": 2,
    "tags": [
      {
        "name": "@product",
        "line": 1
      }
    ],
    "elements": [
      {
        "id": "untrusted-partitions;tails-ignores-a-swap-volume-and-another-tails-that-are-on-an-internal-hard-drive",
        "keyword": "Scenario",
        "name": "Tails ignores a swap volume and another Tails that are on an internal hard drive",
        "description": "",
        "line": 6,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:270"
            },
            "result": {
              "status": "passed",
              "duration": 24365
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:277"
            },
            "result": {
              "status": "passed",
              "duration": 22993869
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "a computer",
            "line": 7,
            "match": {
              "location": "features/step_definitions/common_steps.rb:98"
            },
            "result": {
              "status": "passed",
              "duration": 366381757
            }
          },
          {
            "keyword": "And ",
            "name": "I temporarily create a 100 MiB disk named \"swap\"",
            "line": 8,
            "match": {
              "location": "features/step_definitions/common_steps.rb:111"
            },
            "result": {
              "status": "passed",
              "duration": 60004786
            }
          },
          {
            "keyword": "And ",
            "name": "I create a gpt swap partition on disk \"swap\"",
            "line": 9,
            "match": {
              "location": "features/step_definitions/untrusted_partitions.rb:1"
            },
            "result": {
              "status": "passed",
              "duration": 5876812258
            }
          },
          {
            "keyword": "And ",
            "name": "I plug SATA drive \"swap\"",
            "line": 10,
            "match": {
              "location": "features/step_definitions/common_steps.rb:123"
            },
            "result": {
              "status": "passed",
              "duration": 1019108711
            }
          },
          {
            "keyword": "And ",
            "name": "I temporarily create a 7200 MiB disk named \"live_hd\"",
            "line": 11,
            "match": {
              "location": "features/step_definitions/common_steps.rb:111"
            },
            "result": {
              "status": "passed",
              "duration": 9417576
            }
          },
          {
            "keyword": "And ",
            "name": "I write the Tails USB image to disk \"live_hd\"",
            "line": 12,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1766"
            },
            "result": {
              "status": "passed",
              "duration": 13798860158
            }
          },
          {
            "keyword": "And ",
            "name": "I plug SATA drive \"live_hd\"",
            "line": 13,
            "match": {
              "location": "features/step_definitions/common_steps.rb:123"
            },
            "result": {
              "status": "passed",
              "duration": 1027686407
            }
          },
          {
            "keyword": "When ",
            "name": "I start Tails with network unplugged and I login",
            "line": 14,
            "match": {
              "location": "features/step_definitions/common_steps.rb:211"
            },
            "result": {
              "status": "passed",
              "duration": 52083139528
            }
          },
          {
            "keyword": "Then ",
            "name": "a \"swap\" partition was detected by Tails on drive \"swap\"",
            "line": 15,
            "match": {
              "location": "features/step_definitions/untrusted_partitions.rb:5"
            },
            "result": {
              "status": "passed",
              "duration": 70432348
            }
          },
          {
            "keyword": "And ",
            "name": "drive \"live_hd\" is detected by Tails",
            "line": 16,
            "match": {
              "location": "features/step_definitions/common_steps.rb:129"
            },
            "result": {
              "status": "passed",
              "duration": 58609169
            }
          },
          {
            "keyword": "But ",
            "name": "Tails has no disk swap enabled",
            "line": 17,
            "match": {
              "location": "features/step_definitions/untrusted_partitions.rb:13"
            },
            "result": {
              "status": "passed",
              "duration": 49563265
            }
          },
          {
            "keyword": "And ",
            "name": "drive \"live_hd\" is not mounted",
            "line": 18,
            "match": {
              "location": "features/step_definitions/untrusted_partitions.rb:32"
            },
            "result": {
              "status": "passed",
              "duration": 39567294
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:335"
            },
            "result": {
              "status": "passed",
              "duration": 713786415
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:104"
            },
            "result": {
              "status": "passed",
              "duration": 119844677
            }
          }
        ]
      },
      {
        "id": "untrusted-partitions;the-welcome-screen-ignores-persistent-storage-stored-on-a-non-removable-usb-drive",
        "keyword": "Scenario",
        "name": "The Welcome Screen ignores Persistent Storage stored on a non-removable USB drive",
        "description": "",
        "line": 20,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:270"
            },
            "result": {
              "status": "passed",
              "duration": 15069
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:277"
            },
            "result": {
              "status": "passed",
              "duration": 2033198
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "a computer",
            "line": 21,
            "match": {
              "location": "features/step_definitions/common_steps.rb:98"
            },
            "result": {
              "status": "passed",
              "duration": 65611903
            }
          },
          {
            "keyword": "And ",
            "name": "I temporarily create a 100 MiB disk named \"fake_TailsData\"",
            "line": 22,
            "match": {
              "location": "features/step_definitions/common_steps.rb:111"
            },
            "result": {
              "status": "passed",
              "duration": 7983171
            }
          },
          {
            "keyword": "And ",
            "name": "I create a gpt partition labeled \"TailsData\" with an ext4 filesystem encrypted with password \"asdf\" on disk \"fake_TailsData\"",
            "line": 23,
            "match": {
              "location": "features/step_definitions/untrusted_partitions.rb:23"
            },
            "result": {
              "status": "passed",
              "duration": 18183291395
            }
          },
          {
            "keyword": "And ",
            "name": "I plug non-removable USB drive \"fake_TailsData\"",
            "line": 24,
            "match": {
              "location": "features/step_definitions/common_steps.rb:123"
            },
            "result": {
              "status": "passed",
              "duration": 1018400422
            }
          },
          {
            "keyword": "When ",
            "name": "I start the computer",
            "line": 25,
            "match": {
              "location": "features/step_definitions/common_steps.rb:202"
            },
            "result": {
              "status": "passed",
              "duration": 712449243
            }
          },
          {
            "keyword": "And ",
            "name": "the computer boots Tails",
            "line": 26,
            "match": {
              "location": "features/step_definitions/common_steps.rb:402"
            },
            "result": {
              "status": "passed",
              "duration": 34141659202
            }
          },
          {
            "keyword": "Then ",
            "name": "drive \"fake_TailsData\" is detected by Tails",
            "line": 27,
            "match": {
              "location": "features/step_definitions/common_steps.rb:129"
            },
            "result": {
              "status": "passed",
              "duration": 348826924
            }
          },
          {
            "keyword": "And ",
            "name": "Tails Greeter has not detected a persistence partition",
            "line": 28,
            "match": {
              "location": "features/step_definitions/untrusted_partitions.rb:38"
            },
            "result": {
              "status": "passed",
              "duration": 12823313843
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:335"
            },
            "result": {
              "status": "passed",
              "duration": 1244233203
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:104"
            },
            "result": {
              "status": "passed",
              "duration": 7058222
            }
          }
        ]
      },
      {
        "id": "untrusted-partitions;the-welcome-screen-ignores-persistent-storage-stored-on-an-internal-hard-drive",
        "keyword": "Scenario",
        "name": "The Welcome Screen ignores Persistent Storage stored on an internal hard drive",
        "description": "",
        "line": 30,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:270"
            },
            "result": {
              "status": "passed",
              "duration": 15169
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:277"
            },
            "result": {
              "status": "passed",
              "duration": 1306560
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "a computer",
            "line": 31,
            "match": {
              "location": "features/step_definitions/common_steps.rb:98"
            },
            "result": {
              "status": "passed",
              "duration": 53537520
            }
          },
          {
            "keyword": "And ",
            "name": "I temporarily create a 100 MiB disk named \"fake_TailsData\"",
            "line": 32,
            "match": {
              "location": "features/step_definitions/common_steps.rb:111"
            },
            "result": {
              "status": "passed",
              "duration": 8004275
            }
          },
          {
            "keyword": "And ",
            "name": "I create a gpt partition labeled \"TailsData\" with an ext4 filesystem encrypted with password \"asdf\" on disk \"fake_TailsData\"",
            "line": 33,
            "match": {
              "location": "features/step_definitions/untrusted_partitions.rb:23"
            },
            "result": {
              "status": "passed",
              "duration": 18212724893
            }
          },
          {
            "keyword": "And ",
            "name": "I plug SATA drive \"fake_TailsData\"",
            "line": 34,
            "match": {
              "location": "features/step_definitions/common_steps.rb:123"
            },
            "result": {
              "status": "passed",
              "duration": 1017335507
            }
          },
          {
            "keyword": "When ",
            "name": "I start the computer",
            "line": 35,
            "match": {
              "location": "features/step_definitions/common_steps.rb:202"
            },
            "result": {
              "status": "passed",
              "duration": 755768584
            }
          },
          {
            "keyword": "And ",
            "name": "the computer boots Tails",
            "line": 36,
            "match": {
              "location": "features/step_definitions/common_steps.rb:402"
            },
            "result": {
              "status": "passed",
              "duration": 36145317292
            }
          },
          {
            "keyword": "Then ",
            "name": "drive \"fake_TailsData\" is detected by Tails",
            "line": 37,
            "match": {
              "location": "features/step_definitions/common_steps.rb:129"
            },
            "result": {
              "status": "passed",
              "duration": 350133437
            }
          },
          {
            "keyword": "And ",
            "name": "Tails Greeter has not detected a persistence partition",
            "line": 38,
            "match": {
              "location": "features/step_definitions/untrusted_partitions.rb:38"
            },
            "result": {
              "status": "passed",
              "duration": 12529677678
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:335"
            },
            "result": {
              "status": "passed",
              "duration": 980514356
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:104"
            },
            "result": {
              "status": "passed",
              "duration": 9438124
            }
          }
        ]
      },
      {
        "id": "untrusted-partitions;booting-tails-does-not-automount-untrusted-partitions",
        "keyword": "Scenario",
        "name": "Booting Tails does not automount untrusted partitions",
        "description": "",
        "line": 40,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:270"
            },
            "result": {
              "status": "passed",
              "duration": 23304
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:277"
            },
            "result": {
              "status": "passed",
              "duration": 6818794
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "a computer",
            "line": 41,
            "match": {
              "location": "features/step_definitions/common_steps.rb:98"
            },
            "result": {
              "status": "passed",
              "duration": 62889312
            }
          },
          {
            "keyword": "And ",
            "name": "I temporarily create a 100 MiB disk named \"gpt_ext2\"",
            "line": 42,
            "match": {
              "location": "features/step_definitions/common_steps.rb:111"
            },
            "result": {
              "status": "passed",
              "duration": 9682131
            }
          },
          {
            "keyword": "And ",
            "name": "I create a gpt partition with an ext2 filesystem on disk \"gpt_ext2\"",
            "line": 43,
            "match": {
              "location": "features/step_definitions/untrusted_partitions.rb:23"
            },
            "result": {
              "status": "passed",
              "duration": 2749689690
            }
          },
          {
            "keyword": "And ",
            "name": "I plug SATA drive \"gpt_ext2\"",
            "line": 44,
            "match": {
              "location": "features/step_definitions/common_steps.rb:123"
            },
            "result": {
              "status": "passed",
              "duration": 1017904508
            }
          },
          {
            "keyword": "And ",
            "name": "I temporarily create a 100 MiB disk named \"msdos_fat32\"",
            "line": 45,
            "match": {
              "location": "features/step_definitions/common_steps.rb:111"
            },
            "result": {
              "status": "passed",
              "duration": 35098032
            }
          },
          {
            "keyword": "And ",
            "name": "I create an msdos partition with a vfat filesystem on disk \"msdos_fat32\"",
            "line": 46,
            "match": {
              "location": "features/step_definitions/untrusted_partitions.rb:23"
            },
            "result": {
              "status": "passed",
              "duration": 2879415305
            }
          },
          {
            "keyword": "And ",
            "name": "I plug SATA drive \"msdos_fat32\"",
            "line": 47,
            "match": {
              "location": "features/step_definitions/common_steps.rb:123"
            },
            "result": {
              "status": "passed",
              "duration": 1024584465
            }
          },
          {
            "keyword": "And ",
            "name": "I start Tails from DVD with network unplugged and I login",
            "line": 48,
            "match": {
              "location": "features/step_definitions/common_steps.rb:211"
            },
            "result": {
              "status": "passed",
              "duration": 51952201176
            }
          },
          {
            "keyword": "Then ",
            "name": "drive \"gpt_ext2\" is detected by Tails",
            "line": 49,
            "match": {
              "location": "features/step_definitions/common_steps.rb:129"
            },
            "result": {
              "status": "passed",
              "duration": 97824161
            }
          },
          {
            "keyword": "And ",
            "name": "drive \"gpt_ext2\" is not mounted",
            "line": 50,
            "match": {
              "location": "features/step_definitions/untrusted_partitions.rb:32"
            },
            "result": {
              "status": "passed",
              "duration": 77332232
            }
          },
          {
            "keyword": "And ",
            "name": "drive \"msdos_fat32\" is detected by Tails",
            "line": 51,
            "match": {
              "location": "features/step_definitions/common_steps.rb:129"
            },
            "result": {
              "status": "passed",
              "duration": 69310995
            }
          },
          {
            "keyword": "And ",
            "name": "drive \"msdos_fat32\" is not mounted",
            "line": 52,
            "match": {
              "location": "features/step_definitions/untrusted_partitions.rb:32"
            },
            "result": {
              "status": "passed",
              "duration": 62341929
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:335"
            },
            "result": {
              "status": "passed",
              "duration": 749473893
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:104"
            },
            "result": {
              "status": "passed",
              "duration": 6634930
            }
          }
        ]
      }
    ]
  },
  {
    "uri": "features/root_access_control.feature",
    "id": "root-access-control-enforcement",
    "keyword": "Feature",
    "name": "Root access control enforcement",
    "description": "  As a Tails user, I can perform administrative tasks only by using\n  the password I have optionally set up in the Welcome Screen",
    "line": 2,
    "tags": [
      {
        "name": "@product",
        "line": 1
      }
    ],
    "elements": [
      {
        "id": "root-access-control-enforcement;i-can-perform-administrative-tasks-if-i-have-set-up-an-administration-password-in-the-welcome-screen",
        "keyword": "Scenario",
        "name": "I can perform administrative tasks if I have set up an administration password in the Welcome Screen",
        "description": "",
        "line": 6,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:270"
            },
            "result": {
              "status": "passed",
              "duration": 18154
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:277"
            },
            "result": {
              "status": "passed",
              "duration": 2041898
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails from DVD without network and logged in with an administration password",
            "line": 7,
            "match": {
              "location": "features/step_definitions/snapshots.rb:172"
            },
            "result": {
              "status": "passed",
              "duration": 87147793643
            }
          },
          {
            "keyword": "And ",
            "name": "running a command as root with pkexec requires PolicyKit administrator privileges",
            "line": 8,
            "match": {
              "location": "features/step_definitions/root_access_control.rb:36"
            },
            "result": {
              "status": "passed",
              "duration": 108736061
            }
          },
          {
            "keyword": "Then ",
            "name": "I can run a command as root with sudo",
            "line": 9,
            "match": {
              "location": "features/step_definitions/root_access_control.rb:1"
            },
            "result": {
              "status": "passed",
              "duration": 105968544
            }
          },
          {
            "keyword": "Then ",
            "name": "I can run a command as root with pkexec",
            "line": 10,
            "match": {
              "location": "features/step_definitions/root_access_control.rb:48"
            },
            "result": {
              "status": "passed",
              "duration": 6414461576
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:335"
            },
            "result": {
              "status": "passed",
              "duration": 1068388028
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:104"
            },
            "result": {
              "status": "passed",
              "duration": 5176415
            }
          }
        ]
      },
      {
        "id": "root-access-control-enforcement;i-cannot-perform-administrative-tasks-unless-i-have-set-up-an-administration-password-in-the-welcome-screen",
        "keyword": "Scenario",
        "name": "I cannot perform administrative tasks unless I have set up an administration password in the Welcome Screen",
        "description": "",
        "line": 12,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:270"
            },
            "result": {
              "status": "passed",
              "duration": 12002
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:277"
            },
            "result": {
              "status": "passed",
              "duration": 1210699
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails from DVD without network and logged in",
            "line": 13,
            "match": {
              "location": "features/step_definitions/snapshots.rb:172"
            },
            "result": {
              "status": "passed",
              "duration": 36289871307
            }
          },
          {
            "keyword": "And ",
            "name": "running a command as root with pkexec requires PolicyKit administrator privileges",
            "line": 14,
            "match": {
              "location": "features/step_definitions/root_access_control.rb:36"
            },
            "result": {
              "status": "passed",
              "duration": 114591710
            }
          },
          {
            "keyword": "Then ",
            "name": "I cannot run a command as root with sudo and the standard passwords",
            "line": 15,
            "match": {
              "location": "features/step_definitions/root_access_control.rb:8"
            },
            "result": {
              "status": "passed",
              "duration": 224892285
            }
          },
          {
            "keyword": "And ",
            "name": "I cannot run a command as root with pkexec and the standard passwords",
            "line": 16,
            "match": {
              "location": "features/step_definitions/root_access_control.rb:56"
            },
            "result": {
              "status": "passed",
              "duration": 17288592717
            }
          },
          {
            "keyword": "Then ",
            "name": "I cannot login as root using su with the standard passwords",
            "line": 17,
            "match": {
              "location": "features/step_definitions/root_access_control.rb:18"
            },
            "result": {
              "status": "passed",
              "duration": 29800649615
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:335"
            },
            "result": {
              "status": "passed",
              "duration": 670002143
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:104"
            },
            "result": {
              "status": "passed",
              "duration": 29024
            }
          }
        ]
      }
    ]
  },
  {
    "uri": "features/time_syncing.feature",
    "id": "time-syncing",
    "keyword": "Feature",
    "name": "Time syncing",
    "description": "  As a Tails user\n  I want Tor to work properly\n  And for that I need a reasonably accurate system clock",
    "line": 2,
    "tags": [
      {
        "name": "@product",
        "line": 1
      },
      {
        "name": "@check_tor_leaks",
        "line": 1
      }
    ],
    "elements": [
      {
        "id": "time-syncing;clock-with-host's-time",
        "keyword": "Scenario",
        "name": "Clock with host's time",
        "description": "",
        "line": 7,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          },
          {
            "name": "@check_tor_leaks",
            "line": 1
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:270"
            },
            "result": {
              "status": "passed",
              "duration": 19116
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:277"
            },
            "result": {
              "status": "passed",
              "duration": 2898774
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:523"
            },
            "result": {
              "status": "passed",
              "duration": 3491105
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails from DVD without network and logged in",
            "line": 8,
            "match": {
              "location": "features/step_definitions/snapshots.rb:172"
            },
            "result": {
              "status": "passed",
              "duration": 7070307112
            }
          },
          {
            "keyword": "When ",
            "name": "the network is plugged",
            "line": 9,
            "match": {
              "location": "features/step_definitions/common_steps.rb:137"
            },
            "result": {
              "status": "passed",
              "duration": 20498441
            }
          },
          {
            "keyword": "And ",
            "name": "I successfully configure Tor",
            "line": 10,
            "match": {
              "location": "features/step_definitions/common_steps.rb:675"
            },
            "result": {
              "status": "passed",
              "duration": 13066102064
            }
          },
          {
            "keyword": "Then ",
            "name": "the system clock is less than 5 minutes incorrect",
            "line": 11,
            "match": {
              "location": "features/step_definitions/time_syncing.rb:87"
            },
            "result": {
              "status": "passed",
              "duration": 40278292
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:531"
            },
            "result": {
              "status": "passed",
              "duration": 201547631
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:335"
            },
            "result": {
              "status": "passed",
              "duration": 1006388634
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:104"
            },
            "result": {
              "status": "passed",
              "duration": 100459
            }
          }
        ]
      },
      {
        "id": "time-syncing;clock-with-host's-time-while-using-bridges",
        "keyword": "Scenario",
        "name": "Clock with host's time while using bridges",
        "description": "",
        "line": 13,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          },
          {
            "name": "@check_tor_leaks",
            "line": 1
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:270"
            },
            "result": {
              "status": "passed",
              "duration": 17133
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:277"
            },
            "result": {
              "status": "passed",
              "duration": 2701664
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:523"
            },
            "result": {
              "status": "passed",
              "duration": 3312370
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails from DVD without network and logged in",
            "line": 14,
            "match": {
              "location": "features/step_definitions/snapshots.rb:172"
            },
            "result": {
              "status": "passed",
              "duration": 6796008073
            }
          },
          {
            "keyword": "When ",
            "name": "the network is plugged",
            "line": 15,
            "match": {
              "location": "features/step_definitions/common_steps.rb:137"
            },
            "result": {
              "status": "passed",
              "duration": 16560289
            }
          },
          {
            "keyword": "And ",
            "name": "the Tor Connection Assistant autostarts",
            "line": 16,
            "match": {
              "location": "features/step_definitions/tor.rb:370"
            },
            "result": {
              "status": "passed",
              "duration": 1856211642
            }
          },
          {
            "keyword": "And ",
            "name": "I configure some normal bridges in the Tor Connection Assistant",
            "line": 17,
            "match": {
              "location": "features/step_definitions/tor.rb:616"
            },
            "result": {
              "status": "passed",
              "duration": 11930783313
            }
          },
          {
            "keyword": "And ",
            "name": "I wait until Tor is ready",
            "line": 18,
            "match": {
              "location": "features/step_definitions/common_steps.rb:705"
            },
            "result": {
              "status": "passed",
              "duration": 1328791440
            }
          },
          {
            "keyword": "Then ",
            "name": "the system clock is less than 5 minutes incorrect",
            "line": 19,
            "match": {
              "location": "features/step_definitions/time_syncing.rb:87"
            },
            "result": {
              "status": "passed",
              "duration": 44352970
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:531"
            },
            "result": {
              "status": "passed",
              "duration": 235779706
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:335"
            },
            "result": {
              "status": "passed",
              "duration": 1261141684
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:104"
            },
            "result": {
              "status": "passed",
              "duration": 82264
            }
          }
        ]
      },
      {
        "id": "time-syncing;clock-is-one-day-in-the-future-while-using-obfs4-bridges",
        "keyword": "Scenario",
        "name": "Clock is one day in the future while using obfs4 bridges",
        "description": "",
        "line": 21,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          },
          {
            "name": "@check_tor_leaks",
            "line": 1
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:270"
            },
            "result": {
              "status": "passed",
              "duration": 12653
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:277"
            },
            "result": {
              "status": "passed",
              "duration": 1849136
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:523"
            },
            "result": {
              "status": "passed",
              "duration": 1445309
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails from DVD without network and logged in",
            "line": 22,
            "match": {
              "location": "features/step_definitions/snapshots.rb:172"
            },
            "result": {
              "status": "passed",
              "duration": 6771109484
            }
          },
          {
            "keyword": "When ",
            "name": "I bump the system time with \"+1 day\"",
            "line": 23,
            "match": {
              "location": "features/step_definitions/time_syncing.rb:20"
            },
            "result": {
              "status": "passed",
              "duration": 154950796
            }
          },
          {
            "keyword": "And ",
            "name": "I capture all network traffic",
            "line": 24,
            "match": {
              "location": "features/step_definitions/common_steps.rb:185"
            },
            "result": {
              "status": "passed",
              "duration": 1586154
            }
          },
          {
            "keyword": "And ",
            "name": "the network is plugged",
            "line": 25,
            "match": {
              "location": "features/step_definitions/common_steps.rb:137"
            },
            "result": {
              "status": "passed",
              "duration": 15711306
            }
          },
          {
            "keyword": "And ",
            "name": "the Tor Connection Assistant autostarts",
            "line": 26,
            "match": {
              "location": "features/step_definitions/tor.rb:370"
            },
            "result": {
              "status": "passed",
              "duration": 1856179531
            }
          },
          {
            "keyword": "And ",
            "name": "I configure some obfs4 bridges in the Tor Connection Assistant in easy mode",
            "line": 27,
            "match": {
              "location": "features/step_definitions/tor.rb:616"
            },
            "result": {
              "status": "passed",
              "duration": 12166117424
            }
          },
          {
            "keyword": "And ",
            "name": "I wait until Tor is ready",
            "line": 28,
            "match": {
              "location": "features/step_definitions/common_steps.rb:705"
            },
            "result": {
              "status": "passed",
              "duration": 1380544509
            }
          },
          {
            "keyword": "Then ",
            "name": "the system clock is less than 5 minutes incorrect",
            "line": 29,
            "match": {
              "location": "features/step_definitions/time_syncing.rb:87"
            },
            "result": {
              "status": "passed",
              "duration": 41764529
            }
          },
          {
            "keyword": "And ",
            "name": "all Internet traffic has only flowed through the configured bridges or connectivity check service",
            "line": 30,
            "output": [
              "Warning: these queries were allowed but not needed: [\"fedoraproject.org.\"]"
            ],
            "match": {
              "location": "features/step_definitions/tor.rb:1020"
            },
            "result": {
              "status": "passed",
              "duration": 232142152
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:531"
            },
            "result": {
              "status": "passed",
              "duration": 156365791
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:335"
            },
            "result": {
              "status": "passed",
              "duration": 1036448539
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:104"
            },
            "result": {
              "status": "passed",
              "duration": 40567875
            }
          }
        ]
      },
      {
        "id": "time-syncing;the-system-time-is-not-synced-to-the-hardware-clock",
        "keyword": "Scenario",
        "name": "The system time is not synced to the hardware clock",
        "description": "",
        "line": 33,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          },
          {
            "name": "@check_tor_leaks",
            "line": 1
          },
          {
            "name": "@not_release_blocker",
            "line": 32
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:270"
            },
            "result": {
              "status": "passed",
              "duration": 14768
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:277"
            },
            "result": {
              "status": "passed",
              "duration": 2147356
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:523"
            },
            "result": {
              "status": "passed",
              "duration": 4404096
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails from DVD without network and logged in",
            "line": 34,
            "match": {
              "location": "features/step_definitions/snapshots.rb:172"
            },
            "result": {
              "status": "passed",
              "duration": 6580019141
            }
          },
          {
            "keyword": "When ",
            "name": "I bump the system time with \"-15 days\"",
            "line": 35,
            "match": {
              "location": "features/step_definitions/time_syncing.rb:20"
            },
            "result": {
              "status": "passed",
              "duration": 238601473
            }
          },
          {
            "keyword": "And ",
            "name": "I warm reboot the computer",
            "line": 36,
            "match": {
              "location": "features/step_definitions/common_steps.rb:933"
            },
            "result": {
              "status": "passed",
              "duration": 28652677
            }
          },
          {
            "keyword": "And ",
            "name": "the computer reboots Tails",
            "line": 37,
            "match": {
              "location": "features/step_definitions/common_steps.rb:402"
            },
            "result": {
              "status": "passed",
              "duration": 51050179026
            }
          },
          {
            "keyword": "Then ",
            "name": "Tails' hardware clock is close to the host system's time",
            "line": 38,
            "match": {
              "location": "features/step_definitions/time_syncing.rb:149"
            },
            "result": {
              "status": "passed",
              "duration": 497786957
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:531"
            },
            "result": {
              "status": "passed",
              "duration": 66345812
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:335"
            },
            "result": {
              "status": "passed",
              "duration": 744029132
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:104"
            },
            "result": {
              "status": "passed",
              "duration": 48821728
            }
          }
        ]
      },
      {
        "id": "time-syncing;anti-test:-changes-to-the-hardware-clock-are-kept-when-rebooting",
        "keyword": "Scenario",
        "name": "Anti-test: Changes to the hardware clock are kept when rebooting",
        "description": "",
        "line": 41,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          },
          {
            "name": "@check_tor_leaks",
            "line": 1
          },
          {
            "name": "@not_release_blocker",
            "line": 40
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:270"
            },
            "result": {
              "status": "passed",
              "duration": 16952
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:277"
            },
            "result": {
              "status": "passed",
              "duration": 1556248
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:523"
            },
            "result": {
              "status": "passed",
              "duration": 1346404
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails from DVD without network and logged in",
            "line": 42,
            "match": {
              "location": "features/step_definitions/snapshots.rb:172"
            },
            "result": {
              "status": "passed",
              "duration": 6720852662
            }
          },
          {
            "keyword": "When ",
            "name": "I bump the hardware clock's time with \"-15 days\"",
            "line": 43,
            "match": {
              "location": "features/step_definitions/time_syncing.rb:20"
            },
            "result": {
              "status": "passed",
              "duration": 1414105185
            }
          },
          {
            "keyword": "And ",
            "name": "I warm reboot the computer",
            "line": 44,
            "match": {
              "location": "features/step_definitions/common_steps.rb:933"
            },
            "result": {
              "status": "passed",
              "duration": 5228276
            }
          },
          {
            "keyword": "And ",
            "name": "the computer reboots Tails",
            "line": 45,
            "match": {
              "location": "features/step_definitions/common_steps.rb:402"
            },
            "result": {
              "status": "passed",
              "duration": 56208283062
            }
          },
          {
            "keyword": "Then ",
            "name": "the hardware clock is still off by \"-15 days\"",
            "line": 46,
            "match": {
              "location": "features/step_definitions/time_syncing.rb:157"
            },
            "result": {
              "status": "passed",
              "duration": 789828927
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:531"
            },
            "result": {
              "status": "passed",
              "duration": 81559865
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:335"
            },
            "result": {
              "status": "passed",
              "duration": 568125359
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:104"
            },
            "result": {
              "status": "passed",
              "duration": 32515889
            }
          }
        ]
      },
      {
        "id": "time-syncing;the-clock-is-set-to-the-source-date-when-the-hardware-clock-is-way-in-the-past",
        "keyword": "Scenario",
        "name": "The clock is set to the source date when the hardware clock is way in the past",
        "description": "",
        "line": 48,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          },
          {
            "name": "@check_tor_leaks",
            "line": 1
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:270"
            },
            "result": {
              "status": "passed",
              "duration": 26620
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:277"
            },
            "result": {
              "status": "passed",
              "duration": 2586919
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:523"
            },
            "result": {
              "status": "passed",
              "duration": 2470291
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "a computer",
            "line": 49,
            "match": {
              "location": "features/step_definitions/common_steps.rb:98"
            },
            "result": {
              "status": "passed",
              "duration": 80187861
            }
          },
          {
            "keyword": "And ",
            "name": "the hardware clock is set to \"01 Jan 2000 12:34:56\"",
            "line": 50,
            "match": {
              "location": "features/step_definitions/common_steps.rb:173"
            },
            "result": {
              "status": "passed",
              "duration": 9246506
            }
          },
          {
            "keyword": "And ",
            "name": "I start the computer",
            "line": 51,
            "match": {
              "location": "features/step_definitions/common_steps.rb:202"
            },
            "result": {
              "status": "passed",
              "duration": 752316367
            }
          },
          {
            "keyword": "And ",
            "name": "the computer boots Tails",
            "line": 52,
            "match": {
              "location": "features/step_definitions/common_steps.rb:402"
            },
            "result": {
              "status": "passed",
              "duration": 34506994234
            }
          },
          {
            "keyword": "Then ",
            "name": "the system clock is just past Tails' source date",
            "line": 53,
            "match": {
              "location": "features/step_definitions/time_syncing.rb:116"
            },
            "result": {
              "status": "passed",
              "duration": 362314119
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:531"
            },
            "result": {
              "status": "passed",
              "duration": 86346117
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:335"
            },
            "result": {
              "status": "passed",
              "duration": 937401943
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:104"
            },
            "result": {
              "status": "passed",
              "duration": 7855617
            }
          }
        ]
      },
      {
        "id": "time-syncing;on-a-clock-with-host's-time,-tor-connection-works-even-if-time-sync-fails",
        "keyword": "Scenario",
        "name": "On a clock with host's time, Tor Connection works even if time sync fails",
        "description": "",
        "line": 55,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          },
          {
            "name": "@check_tor_leaks",
            "line": 1
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:270"
            },
            "result": {
              "status": "passed",
              "duration": 29846
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:277"
            },
            "result": {
              "status": "passed",
              "duration": 3819821
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:523"
            },
            "result": {
              "status": "passed",
              "duration": 2973736
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails from DVD without network and logged in",
            "line": 56,
            "match": {
              "location": "features/step_definitions/snapshots.rb:172"
            },
            "result": {
              "status": "passed",
              "duration": 6706783244
            }
          },
          {
            "keyword": "And ",
            "name": "I make sure time sync before Tor connects times out",
            "line": 57,
            "match": {
              "location": "features/step_definitions/time_syncing.rb:54"
            },
            "result": {
              "status": "passed",
              "duration": 1094919118
            }
          },
          {
            "keyword": "When ",
            "name": "the network is plugged",
            "line": 58,
            "match": {
              "location": "features/step_definitions/common_steps.rb:137"
            },
            "result": {
              "status": "passed",
              "duration": 13879751
            }
          },
          {
            "keyword": "And ",
            "name": "I successfully configure Tor",
            "line": 59,
            "match": {
              "location": "features/step_definitions/common_steps.rb:675"
            },
            "result": {
              "status": "passed",
              "duration": 19192200477
            }
          },
          {
            "keyword": "Then ",
            "name": "the system clock is less than 5 minutes incorrect",
            "line": 60,
            "match": {
              "location": "features/step_definitions/time_syncing.rb:87"
            },
            "result": {
              "status": "passed",
              "duration": 57282460
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:531"
            },
            "result": {
              "status": "passed",
              "duration": 185891510
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:335"
            },
            "result": {
              "status": "passed",
              "duration": 1111217621
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:104"
            },
            "result": {
              "status": "passed",
              "duration": 988784
            }
          }
        ]
      },
      {
        "id": "time-syncing;i-can-manually-recover-from-time-sync-failure-when-connecting-automatically-to-obfs4-bridges-with-a-clock-east-of-utc",
        "keyword": "Scenario",
        "name": "I can manually recover from time sync failure when connecting automatically to obfs4 bridges with a clock East of UTC",
        "description": "",
        "line": 62,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          },
          {
            "name": "@check_tor_leaks",
            "line": 1
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:270"
            },
            "result": {
              "status": "passed",
              "duration": 17833
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:277"
            },
            "result": {
              "status": "passed",
              "duration": 2943107
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:523"
            },
            "result": {
              "status": "passed",
              "duration": 3681982
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails from DVD without network and logged in",
            "line": 63,
            "match": {
              "location": "features/step_definitions/snapshots.rb:172"
            },
            "result": {
              "status": "passed",
              "duration": 6804571900
            }
          },
          {
            "keyword": "When ",
            "name": "I bump the system time with \"+8 hours +15 minutes\"",
            "line": 64,
            "match": {
              "location": "features/step_definitions/time_syncing.rb:20"
            },
            "result": {
              "status": "passed",
              "duration": 183938448
            }
          },
          {
            "keyword": "And ",
            "name": "all notifications have disappeared",
            "line": 65,
            "match": {
              "location": "features/step_definitions/common_steps.rb:762"
            },
            "result": {
              "status": "passed",
              "duration": 3542937692
            }
          },
          {
            "keyword": "And ",
            "name": "I capture all network traffic",
            "line": 66,
            "match": {
              "location": "features/step_definitions/common_steps.rb:185"
            },
            "result": {
              "status": "passed",
              "duration": 3006256
            }
          },
          {
            "keyword": "And ",
            "name": "I make sure time sync before Tor connects fails",
            "line": 67,
            "match": {
              "location": "features/step_definitions/time_syncing.rb:54"
            },
            "result": {
              "status": "passed",
              "duration": 60949395
            }
          },
          {
            "keyword": "And ",
            "name": "the network is plugged",
            "line": 68,
            "match": {
              "location": "features/step_definitions/common_steps.rb:137"
            },
            "result": {
              "status": "passed",
              "duration": 14054498
            }
          },
          {
            "keyword": "And ",
            "name": "the Tor Connection Assistant autostarts",
            "line": 69,
            "match": {
              "location": "features/step_definitions/tor.rb:370"
            },
            "result": {
              "status": "passed",
              "duration": 2210708357
            }
          },
          {
            "keyword": "When ",
            "name": "I configure the default bridges in the Tor Connection Assistant in easy mode without connecting",
            "line": 70,
            "match": {
              "location": "features/step_definitions/tor.rb:616"
            },
            "result": {
              "status": "passed",
              "duration": 4585001322
            }
          },
          {
            "keyword": "And ",
            "name": "I click \"Connect to Tor\"",
            "line": 71,
            "match": {
              "location": "features/step_definitions/tor.rb:922"
            },
            "result": {
              "status": "passed",
              "duration": 1196625508
            }
          },
          {
            "keyword": "And ",
            "name": "the Tor Connection Assistant fails to connect to Tor",
            "line": 72,
            "match": {
              "location": "features/step_definitions/tor.rb:423"
            },
            "result": {
              "status": "passed",
              "duration": 14742689037
            }
          },
          {
            "keyword": "Then ",
            "name": "I set the time zone in Tor Connection to \"Asia/Shanghai\"",
            "line": 74,
            "comments": [
              {
                "value": "# The \"Fix Clock\" button allows users to recover from this bug",
                "line": 73
              }
            ],
            "match": {
              "location": "features/step_definitions/tor.rb:931"
            },
            "result": {
              "status": "passed",
              "duration": 15177991425
            }
          },
          {
            "keyword": "Then ",
            "name": "the system clock is less than 20 minutes incorrect",
            "line": 75,
            "match": {
              "location": "features/step_definitions/time_syncing.rb:87"
            },
            "result": {
              "status": "passed",
              "duration": 440982551
            }
          },
          {
            "keyword": "When ",
            "name": "I click \"Connect to Tor\"",
            "line": 76,
            "match": {
              "location": "features/step_definitions/tor.rb:922"
            },
            "result": {
              "status": "passed",
              "duration": 1138796383
            }
          },
          {
            "keyword": "Then ",
            "name": "I wait until Tor is ready",
            "line": 77,
            "match": {
              "location": "features/step_definitions/common_steps.rb:705"
            },
            "result": {
              "status": "passed",
              "duration": 5091484294
            }
          },
          {
            "keyword": "And ",
            "name": "all Internet traffic has only flowed through the default bridges or fake connectivity check service",
            "line": 78,
            "match": {
              "location": "features/step_definitions/tor.rb:1020"
            },
            "result": {
              "status": "passed",
              "duration": 285180161
            }
          },
          {
            "keyword": "And ",
            "name": "the system clock is less than 5 minutes incorrect",
            "line": 80,
            "comments": [
              {
                "value": "# check that htpdate has done its job",
                "line": 79
              }
            ],
            "match": {
              "location": "features/step_definitions/time_syncing.rb:87"
            },
            "result": {
              "status": "passed",
              "duration": 40351058
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:531"
            },
            "result": {
              "status": "passed",
              "duration": 218293149
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:335"
            },
            "result": {
              "status": "passed",
              "duration": 1025684721
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:104"
            },
            "result": {
              "status": "passed",
              "duration": 39558200
            }
          }
        ]
      },
      {
        "id": "time-syncing;i-can-connect-to-obfs4-bridges-having-a-clock-east-of-utc-while-hiding-that-i-am-using-tor",
        "keyword": "Scenario",
        "name": "I can connect to obfs4 bridges having a clock East of UTC while hiding that I am using Tor",
        "description": "",
        "line": 82,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          },
          {
            "name": "@check_tor_leaks",
            "line": 1
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:270"
            },
            "result": {
              "status": "passed",
              "duration": 16321
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:277"
            },
            "result": {
              "status": "passed",
              "duration": 2115779
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:523"
            },
            "result": {
              "status": "passed",
              "duration": 1282485
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails from DVD without network and logged in",
            "line": 83,
            "match": {
              "location": "features/step_definitions/snapshots.rb:172"
            },
            "result": {
              "status": "passed",
              "duration": 6629354513
            }
          },
          {
            "keyword": "When ",
            "name": "I bump the system time with \"+8 hours +15 minutes\"",
            "line": 84,
            "match": {
              "location": "features/step_definitions/time_syncing.rb:20"
            },
            "result": {
              "status": "passed",
              "duration": 260693102
            }
          },
          {
            "keyword": "And ",
            "name": "all notifications have disappeared",
            "line": 85,
            "match": {
              "location": "features/step_definitions/common_steps.rb:762"
            },
            "result": {
              "status": "passed",
              "duration": 3716819929
            }
          },
          {
            "keyword": "And ",
            "name": "I capture all network traffic",
            "line": 86,
            "match": {
              "location": "features/step_definitions/common_steps.rb:185"
            },
            "result": {
              "status": "passed",
              "duration": 3284247
            }
          },
          {
            "keyword": "And ",
            "name": "the network is plugged",
            "line": 87,
            "match": {
              "location": "features/step_definitions/common_steps.rb:137"
            },
            "result": {
              "status": "passed",
              "duration": 20353047
            }
          },
          {
            "keyword": "And ",
            "name": "the Tor Connection Assistant autostarts",
            "line": 88,
            "match": {
              "location": "features/step_definitions/tor.rb:370"
            },
            "result": {
              "status": "passed",
              "duration": 2199006178
            }
          },
          {
            "keyword": "And ",
            "name": "I configure some obfs4 bridges in the Tor Connection Assistant in hide mode without connecting",
            "line": 90,
            "comments": [
              {
                "value": "# Anti-test: Users east of UTC can't connect to obfs4 bridges",
                "line": 89
              }
            ],
            "match": {
              "location": "features/step_definitions/tor.rb:616"
            },
            "result": {
              "status": "passed",
              "duration": 4213578962
            }
          },
          {
            "keyword": "And ",
            "name": "I click \"Connect to Tor\"",
            "line": 91,
            "match": {
              "location": "features/step_definitions/tor.rb:922"
            },
            "result": {
              "status": "passed",
              "duration": 1271517598
            }
          },
          {
            "keyword": "Then ",
            "name": "the Tor Connection Assistant reports that it failed to connect",
            "line": 92,
            "match": {
              "location": "features/step_definitions/tor.rb:875"
            },
            "result": {
              "status": "passed",
              "duration": 11573791527
            }
          },
          {
            "keyword": "When ",
            "name": "I set the time zone in Tor Connection to \"Asia/Shanghai\"",
            "line": 94,
            "comments": [
              {
                "value": "# The \"Fix Clock\" button allows users to recover from this bug",
                "line": 93
              }
            ],
            "match": {
              "location": "features/step_definitions/tor.rb:931"
            },
            "result": {
              "status": "passed",
              "duration": 14684129685
            }
          },
          {
            "keyword": "Then ",
            "name": "the system clock is less than 20 minutes incorrect",
            "line": 95,
            "match": {
              "location": "features/step_definitions/time_syncing.rb:87"
            },
            "result": {
              "status": "passed",
              "duration": 596610634
            }
          },
          {
            "keyword": "And ",
            "name": "the displayed clock is less than 20 minutes incorrect in \"+08:00\"",
            "line": 97,
            "comments": [
              {
                "value": "# \"Asia/Shanghai\" is UTC+08:00 all year long (no DST)",
                "line": 96
              }
            ],
            "match": {
              "location": "features/step_definitions/time_syncing.rb:105"
            },
            "result": {
              "status": "passed",
              "duration": 277045250
            }
          },
          {
            "keyword": "When ",
            "name": "I click \"Connect to Tor\"",
            "line": 98,
            "match": {
              "location": "features/step_definitions/tor.rb:922"
            },
            "result": {
              "status": "passed",
              "duration": 1181718221
            }
          },
          {
            "keyword": "Then ",
            "name": "I wait until Tor is ready",
            "line": 99,
            "match": {
              "location": "features/step_definitions/common_steps.rb:705"
            },
            "result": {
              "status": "passed",
              "duration": 6156960678
            }
          },
          {
            "keyword": "And ",
            "name": "all Internet traffic has only flowed through the configured bridges",
            "line": 100,
            "match": {
              "location": "features/step_definitions/tor.rb:1020"
            },
            "result": {
              "status": "passed",
              "duration": 296188808
            }
          },
          {
            "keyword": "And ",
            "name": "the system clock is less than 5 minutes incorrect",
            "line": 102,
            "comments": [
              {
                "value": "# check that htpdate has done its job",
                "line": 101
              }
            ],
            "match": {
              "location": "features/step_definitions/time_syncing.rb:87"
            },
            "result": {
              "status": "passed",
              "duration": 51045056
            }
          },
          {
            "keyword": "And ",
            "name": "the displayed clock is less than 5 minutes incorrect in \"+08:00\"",
            "line": 103,
            "match": {
              "location": "features/step_definitions/time_syncing.rb:105"
            },
            "result": {
              "status": "passed",
              "duration": 271428128
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:531"
            },
            "result": {
              "status": "passed",
              "duration": 201643081
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:335"
            },
            "result": {
              "status": "passed",
              "duration": 635832004
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:104"
            },
            "result": {
              "status": "passed",
              "duration": 48610062
            }
          }
        ]
      },
      {
        "id": "time-syncing;time-sync-before-tor-connects-sets-the-same-headers-as-the-networkmanager-connectivity-check",
        "keyword": "Scenario",
        "name": "Time sync before Tor connects sets the same headers as the NetworkManager connectivity check",
        "description": "",
        "line": 105,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          },
          {
            "name": "@check_tor_leaks",
            "line": 1
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:270"
            },
            "result": {
              "status": "passed",
              "duration": 9016
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:277"
            },
            "result": {
              "status": "passed",
              "duration": 5248821
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:523"
            },
            "result": {
              "status": "passed",
              "duration": 2320811
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails from DVD without network and logged in",
            "line": 106,
            "match": {
              "location": "features/step_definitions/snapshots.rb:172"
            },
            "result": {
              "status": "passed",
              "duration": 6608737302
            }
          },
          {
            "keyword": "And ",
            "name": "I make sure time sync before Tor connects uses a fake connectivity check service",
            "line": 107,
            "match": {
              "location": "features/step_definitions/time_syncing.rb:54"
            },
            "result": {
              "status": "passed",
              "duration": 1100912560
            }
          },
          {
            "keyword": "And ",
            "name": "the network is plugged",
            "line": 108,
            "match": {
              "location": "features/step_definitions/common_steps.rb:137"
            },
            "result": {
              "status": "passed",
              "duration": 37889674
            }
          },
          {
            "keyword": "And ",
            "name": "Tor is ready",
            "line": 109,
            "match": {
              "location": "features/step_definitions/common_steps.rb:650"
            },
            "result": {
              "status": "passed",
              "duration": 8727027640
            }
          },
          {
            "keyword": "Then ",
            "name": "the fake connectivity check service has received a new HTTP request",
            "line": 110,
            "match": {
              "location": "features/step_definitions/time_syncing.rb:207"
            },
            "result": {
              "status": "passed",
              "duration": 277610
            }
          },
          {
            "keyword": "When ",
            "name": "I make NetworkManager perform a connectivity check",
            "line": 111,
            "match": {
              "location": "features/step_definitions/time_syncing.rb:172"
            },
            "result": {
              "status": "passed",
              "duration": 431246055
            }
          },
          {
            "keyword": "Then ",
            "name": "the fake connectivity check service has received a new HTTP request",
            "line": 112,
            "match": {
              "location": "features/step_definitions/time_syncing.rb:207"
            },
            "result": {
              "status": "passed",
              "duration": 159930
            }
          },
          {
            "keyword": "And ",
            "name": "the HTTP requests received by the fake connectivity check service are identical",
            "line": 113,
            "match": {
              "location": "features/step_definitions/time_syncing.rb:225"
            },
            "result": {
              "status": "passed",
              "duration": 2613299
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:531"
            },
            "result": {
              "status": "passed",
              "duration": 226446749
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:335"
            },
            "result": {
              "status": "passed",
              "duration": 717983376
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:104"
            },
            "result": {
              "status": "passed",
              "duration": 916579
            }
          }
        ]
      }
    ]
  },
  {
    "uri": "features/tor_bridges.feature",
    "id": "using-tor-bridges-and-pluggable-transports",
    "keyword": "Feature",
    "name": "Using Tor bridges and pluggable transports",
    "description": "  As a Tails user\n  I want to circumvent censorship of Tor by using Tor bridges and pluggable transports\n  And avoid connecting directly to the Tor Network",
    "line": 2,
    "tags": [
      {
        "name": "@product",
        "line": 1
      }
    ],
    "elements": [
      {
        "keyword": "Background",
        "name": "",
        "description": "",
        "line": 7,
        "type": "background",
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:270"
            },
            "result": {
              "status": "passed",
              "duration": 14787
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:277"
            },
            "result": {
              "status": "passed",
              "duration": 2074088
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails from DVD without network and logged in",
            "line": 8,
            "match": {
              "location": "features/step_definitions/snapshots.rb:172"
            },
            "result": {
              "status": "passed",
              "duration": 6569391775
            }
          },
          {
            "keyword": "And ",
            "name": "I capture all network traffic",
            "line": 9,
            "match": {
              "location": "features/step_definitions/common_steps.rb:185"
            },
            "result": {
              "status": "passed",
              "duration": 3962583
            }
          },
          {
            "keyword": "When ",
            "name": "the network is plugged",
            "line": 10,
            "match": {
              "location": "features/step_definitions/common_steps.rb:137"
            },
            "result": {
              "status": "passed",
              "duration": 24734339
            }
          },
          {
            "keyword": "Then ",
            "name": "the Tor Connection Assistant autostarts",
            "line": 11,
            "match": {
              "location": "features/step_definitions/tor.rb:370"
            },
            "result": {
              "status": "passed",
              "duration": 2490699761
            }
          }
        ]
      },
      {
        "id": "using-tor-bridges-and-pluggable-transports;using-normal-bridges",
        "keyword": "Scenario",
        "name": "Using normal bridges",
        "description": "",
        "line": 13,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          }
        ],
        "steps": [
          {
            "keyword": "When ",
            "name": "I configure some normal bridges in the Tor Connection Assistant",
            "line": 14,
            "match": {
              "location": "features/step_definitions/tor.rb:616"
            },
            "result": {
              "status": "passed",
              "duration": 11571436977
            }
          },
          {
            "keyword": "Then ",
            "name": "I wait until Tor is ready",
            "line": 15,
            "match": {
              "location": "features/step_definitions/common_steps.rb:705"
            },
            "result": {
              "status": "passed",
              "duration": 975378887
            }
          },
          {
            "keyword": "And ",
            "name": "tca.conf includes the configured bridges",
            "line": 16,
            "match": {
              "location": "features/step_definitions/tor.rb:1161"
            },
            "result": {
              "status": "passed",
              "duration": 6629658
            }
          },
          {
            "keyword": "And ",
            "name": "available upgrades have been checked",
            "line": 17,
            "match": {
              "location": "features/step_definitions/common_steps.rb:758"
            },
            "result": {
              "status": "passed",
              "duration": 2136519751
            }
          },
          {
            "keyword": "And ",
            "name": "all Internet traffic has only flowed through the configured bridges or connectivity check service",
            "line": 18,
            "output": [
              "Warning: these queries were allowed but not needed: [\"fedoraproject.org.\"]"
            ],
            "match": {
              "location": "features/step_definitions/tor.rb:1020"
            },
            "result": {
              "status": "passed",
              "duration": 260031843
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:335"
            },
            "result": {
              "status": "passed",
              "duration": 676078296
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:104"
            },
            "result": {
              "status": "passed",
              "duration": 41503408
            }
          }
        ]
      },
      {
        "keyword": "Background",
        "name": "",
        "description": "",
        "line": 7,
        "type": "background",
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:270"
            },
            "result": {
              "status": "passed",
              "duration": 9177
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:277"
            },
            "result": {
              "status": "passed",
              "duration": 2617667
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails from DVD without network and logged in",
            "line": 8,
            "match": {
              "location": "features/step_definitions/snapshots.rb:172"
            },
            "result": {
              "status": "passed",
              "duration": 6829541575
            }
          },
          {
            "keyword": "And ",
            "name": "I capture all network traffic",
            "line": 9,
            "match": {
              "location": "features/step_definitions/common_steps.rb:185"
            },
            "result": {
              "status": "passed",
              "duration": 1871859
            }
          },
          {
            "keyword": "When ",
            "name": "the network is plugged",
            "line": 10,
            "match": {
              "location": "features/step_definitions/common_steps.rb:137"
            },
            "result": {
              "status": "passed",
              "duration": 48452436
            }
          },
          {
            "keyword": "Then ",
            "name": "the Tor Connection Assistant autostarts",
            "line": 11,
            "match": {
              "location": "features/step_definitions/tor.rb:370"
            },
            "result": {
              "status": "passed",
              "duration": 1803728452
            }
          }
        ]
      },
      {
        "id": "using-tor-bridges-and-pluggable-transports;using-obfs4-pluggable-transports",
        "keyword": "Scenario",
        "name": "Using obfs4 pluggable transports",
        "description": "",
        "line": 20,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          }
        ],
        "steps": [
          {
            "keyword": "When ",
            "name": "I configure some obfs4 bridges in the Tor Connection Assistant in hide mode",
            "line": 21,
            "match": {
              "location": "features/step_definitions/tor.rb:616"
            },
            "result": {
              "status": "passed",
              "duration": 10968078376
            }
          },
          {
            "keyword": "Then ",
            "name": "I wait until Tor is ready",
            "line": 22,
            "match": {
              "location": "features/step_definitions/common_steps.rb:705"
            },
            "result": {
              "status": "passed",
              "duration": 1187138978
            }
          },
          {
            "keyword": "And ",
            "name": "tca.conf includes the configured bridges",
            "line": 23,
            "match": {
              "location": "features/step_definitions/tor.rb:1161"
            },
            "result": {
              "status": "passed",
              "duration": 8597630
            }
          },
          {
            "keyword": "And ",
            "name": "available upgrades have been checked",
            "line": 24,
            "match": {
              "location": "features/step_definitions/common_steps.rb:758"
            },
            "result": {
              "status": "passed",
              "duration": 2183186953
            }
          },
          {
            "keyword": "And ",
            "name": "all Internet traffic has only flowed through the configured bridges",
            "line": 25,
            "match": {
              "location": "features/step_definitions/tor.rb:1020"
            },
            "result": {
              "status": "passed",
              "duration": 303746315
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:335"
            },
            "result": {
              "status": "passed",
              "duration": 871142186
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:104"
            },
            "result": {
              "status": "passed",
              "duration": 44075991
            }
          }
        ]
      },
      {
        "keyword": "Background",
        "name": "",
        "description": "",
        "line": 7,
        "type": "background",
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:270"
            },
            "result": {
              "status": "passed",
              "duration": 13575
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:277"
            },
            "result": {
              "status": "passed",
              "duration": 1790636
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails from DVD without network and logged in",
            "line": 8,
            "match": {
              "location": "features/step_definitions/snapshots.rb:172"
            },
            "result": {
              "status": "passed",
              "duration": 6921918333
            }
          },
          {
            "keyword": "And ",
            "name": "I capture all network traffic",
            "line": 9,
            "match": {
              "location": "features/step_definitions/common_steps.rb:185"
            },
            "result": {
              "status": "passed",
              "duration": 2346419
            }
          },
          {
            "keyword": "When ",
            "name": "the network is plugged",
            "line": 10,
            "match": {
              "location": "features/step_definitions/common_steps.rb:137"
            },
            "result": {
              "status": "passed",
              "duration": 20622362
            }
          },
          {
            "keyword": "Then ",
            "name": "the Tor Connection Assistant autostarts",
            "line": 11,
            "match": {
              "location": "features/step_definitions/tor.rb:370"
            },
            "result": {
              "status": "passed",
              "duration": 2430179070
            }
          }
        ]
      },
      {
        "id": "using-tor-bridges-and-pluggable-transports;using-obfs4-pluggable-transports-from-a-qr-code",
        "keyword": "Scenario",
        "name": "Using obfs4 pluggable transports from a QR code",
        "description": "",
        "line": 27,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          }
        ],
        "steps": [
          {
            "keyword": "When ",
            "name": "I configure some obfs4 bridges from a QR code in the Tor Connection Assistant in hide mode",
            "line": 28,
            "match": {
              "location": "features/step_definitions/tor.rb:616"
            },
            "result": {
              "status": "passed",
              "duration": 27656673531
            }
          },
          {
            "keyword": "Then ",
            "name": "I wait until Tor is ready",
            "line": 29,
            "match": {
              "location": "features/step_definitions/common_steps.rb:705"
            },
            "result": {
              "status": "passed",
              "duration": 1317758254
            }
          },
          {
            "keyword": "And ",
            "name": "tca.conf includes the configured bridges",
            "line": 30,
            "match": {
              "location": "features/step_definitions/tor.rb:1161"
            },
            "result": {
              "status": "passed",
              "duration": 6039654
            }
          },
          {
            "keyword": "And ",
            "name": "available upgrades have been checked",
            "line": 31,
            "match": {
              "location": "features/step_definitions/common_steps.rb:758"
            },
            "result": {
              "status": "passed",
              "duration": 2162381580
            }
          },
          {
            "keyword": "And ",
            "name": "all Internet traffic has only flowed through the configured bridges",
            "line": 32,
            "match": {
              "location": "features/step_definitions/tor.rb:1020"
            },
            "result": {
              "status": "passed",
              "duration": 539909722
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:335"
            },
            "result": {
              "status": "passed",
              "duration": 847487717
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:104"
            },
            "result": {
              "status": "passed",
              "duration": 55722805
            }
          }
        ]
      },
      {
        "keyword": "Background",
        "name": "",
        "description": "",
        "line": 7,
        "type": "background",
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:270"
            },
            "result": {
              "status": "passed",
              "duration": 14718
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:277"
            },
            "result": {
              "status": "passed",
              "duration": 1944155
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails from DVD without network and logged in",
            "line": 8,
            "match": {
              "location": "features/step_definitions/snapshots.rb:172"
            },
            "result": {
              "status": "passed",
              "duration": 6981665649
            }
          },
          {
            "keyword": "And ",
            "name": "I capture all network traffic",
            "line": 9,
            "match": {
              "location": "features/step_definitions/common_steps.rb:185"
            },
            "result": {
              "status": "passed",
              "duration": 3172948
            }
          },
          {
            "keyword": "When ",
            "name": "the network is plugged",
            "line": 10,
            "match": {
              "location": "features/step_definitions/common_steps.rb:137"
            },
            "result": {
              "status": "passed",
              "duration": 17354234
            }
          },
          {
            "keyword": "Then ",
            "name": "the Tor Connection Assistant autostarts",
            "line": 11,
            "match": {
              "location": "features/step_definitions/tor.rb:370"
            },
            "result": {
              "status": "passed",
              "duration": 2453286586
            }
          }
        ]
      },
      {
        "id": "using-tor-bridges-and-pluggable-transports;default-tor-bridges",
        "keyword": "Scenario",
        "name": "Default Tor bridges",
        "description": "",
        "line": 35,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          },
          {
            "name": "@supports_real_tor",
            "line": 34
          }
        ],
        "steps": [
          {
            "keyword": "When ",
            "name": "I configure the default bridges in the Tor Connection Assistant",
            "line": 36,
            "match": {
              "location": "features/step_definitions/tor.rb:616"
            },
            "result": {
              "status": "passed",
              "duration": 11505652976
            }
          },
          {
            "keyword": "Then ",
            "name": "I wait until Tor is ready",
            "line": 37,
            "match": {
              "location": "features/step_definitions/common_steps.rb:705"
            },
            "result": {
              "status": "passed",
              "duration": 1475966912
            }
          },
          {
            "keyword": "And ",
            "name": "Tor is configured to use the default bridges",
            "line": 38,
            "match": {
              "location": "features/step_definitions/tor.rb:1120"
            },
            "result": {
              "status": "passed",
              "duration": 369757955
            }
          },
          {
            "keyword": "And ",
            "name": "tca.conf includes no bridge",
            "line": 39,
            "match": {
              "location": "features/step_definitions/tor.rb:1157"
            },
            "result": {
              "status": "passed",
              "duration": 6725508
            }
          },
          {
            "keyword": "And ",
            "name": "available upgrades have been checked",
            "line": 40,
            "match": {
              "location": "features/step_definitions/common_steps.rb:758"
            },
            "result": {
              "status": "passed",
              "duration": 2140046277
            }
          },
          {
            "keyword": "And ",
            "name": "Tor is configured to use the default bridges",
            "line": 41,
            "match": {
              "location": "features/step_definitions/tor.rb:1120"
            },
            "result": {
              "status": "passed",
              "duration": 341301095
            }
          },
          {
            "keyword": "And ",
            "name": "all Internet traffic has only flowed through the default bridges or connectivity check service",
            "line": 42,
            "output": [
              "Warning: these queries were allowed but not needed: [\"fedoraproject.org.\"]"
            ],
            "match": {
              "location": "features/step_definitions/tor.rb:1020"
            },
            "result": {
              "status": "passed",
              "duration": 366797063
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:335"
            },
            "result": {
              "status": "passed",
              "duration": 550182561
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:104"
            },
            "result": {
              "status": "passed",
              "duration": 44439231
            }
          }
        ]
      },
      {
        "keyword": "Background",
        "name": "",
        "description": "",
        "line": 7,
        "type": "background",
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:270"
            },
            "result": {
              "status": "passed",
              "duration": 19787
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:277"
            },
            "result": {
              "status": "passed",
              "duration": 3656615
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails from DVD without network and logged in",
            "line": 8,
            "match": {
              "location": "features/step_definitions/snapshots.rb:172"
            },
            "result": {
              "status": "passed",
              "duration": 6786208555
            }
          },
          {
            "keyword": "And ",
            "name": "I capture all network traffic",
            "line": 9,
            "match": {
              "location": "features/step_definitions/common_steps.rb:185"
            },
            "result": {
              "status": "passed",
              "duration": 3560225
            }
          },
          {
            "keyword": "When ",
            "name": "the network is plugged",
            "line": 10,
            "match": {
              "location": "features/step_definitions/common_steps.rb:137"
            },
            "result": {
              "status": "passed",
              "duration": 25985165
            }
          },
          {
            "keyword": "Then ",
            "name": "the Tor Connection Assistant autostarts",
            "line": 11,
            "match": {
              "location": "features/step_definitions/tor.rb:370"
            },
            "result": {
              "status": "passed",
              "duration": 2501114756
            }
          }
        ]
      },
      {
        "id": "using-tor-bridges-and-pluggable-transports;fall-back-to-default-bridges-if-failing-to-connect-directly-to-the-tor-network",
        "keyword": "Scenario",
        "name": "Fall back to default bridges if failing to connect directly to the Tor network",
        "description": "",
        "line": 44,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "the Tor network is blocked",
            "line": 45,
            "match": {
              "location": "features/step_definitions/tor.rb:1081"
            },
            "result": {
              "status": "passed",
              "duration": 1113881116
            }
          },
          {
            "keyword": "When ",
            "name": "I configure a direct connection in the Tor Connection Assistant",
            "line": 46,
            "match": {
              "location": "features/step_definitions/tor.rb:513"
            },
            "result": {
              "status": "passed",
              "duration": 19470138917
            }
          },
          {
            "keyword": "Then ",
            "name": "I wait until Tor is ready",
            "line": 47,
            "match": {
              "location": "features/step_definitions/common_steps.rb:705"
            },
            "result": {
              "status": "passed",
              "duration": 1318052235
            }
          },
          {
            "keyword": "And ",
            "name": "tca.conf includes no bridge",
            "line": 48,
            "match": {
              "location": "features/step_definitions/tor.rb:1157"
            },
            "result": {
              "status": "passed",
              "duration": 5681480
            }
          },
          {
            "keyword": "And ",
            "name": "available upgrades have been checked",
            "line": 49,
            "match": {
              "location": "features/step_definitions/common_steps.rb:758"
            },
            "result": {
              "status": "passed",
              "duration": 2212869988
            }
          },
          {
            "keyword": "And ",
            "name": "Tor is configured to use the default bridges",
            "line": 50,
            "match": {
              "location": "features/step_definitions/tor.rb:1120"
            },
            "result": {
              "status": "passed",
              "duration": 432572918
            }
          },
          {
            "keyword": "And ",
            "name": "all Internet traffic has only flowed through the default bridges or connectivity check service",
            "line": 51,
            "output": [
              "Warning: these queries were allowed but not needed: [\"fedoraproject.org.\"]"
            ],
            "match": {
              "location": "features/step_definitions/tor.rb:1020"
            },
            "result": {
              "status": "passed",
              "duration": 339692943
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:335"
            },
            "result": {
              "status": "passed",
              "duration": 1206335959
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:104"
            },
            "result": {
              "status": "passed",
              "duration": 37712021
            }
          }
        ]
      },
      {
        "keyword": "Background",
        "name": "",
        "description": "",
        "line": 7,
        "type": "background",
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:270"
            },
            "result": {
              "status": "passed",
              "duration": 17383
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:277"
            },
            "result": {
              "status": "passed",
              "duration": 2445123
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails from DVD without network and logged in",
            "line": 8,
            "match": {
              "location": "features/step_definitions/snapshots.rb:172"
            },
            "result": {
              "status": "passed",
              "duration": 6841561269
            }
          },
          {
            "keyword": "And ",
            "name": "I capture all network traffic",
            "line": 9,
            "match": {
              "location": "features/step_definitions/common_steps.rb:185"
            },
            "result": {
              "status": "passed",
              "duration": 2131755
            }
          },
          {
            "keyword": "When ",
            "name": "the network is plugged",
            "line": 10,
            "match": {
              "location": "features/step_definitions/common_steps.rb:137"
            },
            "result": {
              "status": "passed",
              "duration": 21694041
            }
          },
          {
            "keyword": "Then ",
            "name": "the Tor Connection Assistant autostarts",
            "line": 11,
            "match": {
              "location": "features/step_definitions/tor.rb:370"
            },
            "result": {
              "status": "passed",
              "duration": 1844091031
            }
          }
        ]
      },
      {
        "id": "using-tor-bridges-and-pluggable-transports;tca-can-reconnect-after-a-connection-failure",
        "keyword": "Scenario",
        "name": "TCA can reconnect after a connection failure",
        "description": "",
        "line": 53,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "the Tor network and default bridges are blocked",
            "line": 54,
            "match": {
              "location": "features/step_definitions/tor.rb:1081"
            },
            "result": {
              "status": "passed",
              "duration": 1445474034
            }
          },
          {
            "keyword": "When ",
            "name": "I unsuccessfully configure a direct connection in the Tor Connection Assistant",
            "line": 55,
            "match": {
              "location": "features/step_definitions/tor.rb:750"
            },
            "result": {
              "status": "passed",
              "duration": 31828821828
            }
          },
          {
            "keyword": "Then ",
            "name": "the Tor Connection Assistant reports that it failed to connect",
            "line": 56,
            "match": {
              "location": "features/step_definitions/tor.rb:875"
            },
            "result": {
              "status": "passed",
              "duration": 108790464
            }
          },
          {
            "keyword": "And ",
            "name": "tca.conf is empty",
            "line": 57,
            "match": {
              "location": "features/step_definitions/tor.rb:1149"
            },
            "result": {
              "status": "passed",
              "duration": 528867751
            }
          },
          {
            "keyword": "Given ",
            "name": "the Tor network and default bridges are unblocked",
            "line": 58,
            "match": {
              "location": "features/step_definitions/tor.rb:1081"
            },
            "result": {
              "status": "passed",
              "duration": 1115281606
            }
          },
          {
            "keyword": "When ",
            "name": "I retry connecting to Tor",
            "line": 59,
            "match": {
              "location": "features/step_definitions/tor.rb:922"
            },
            "result": {
              "status": "passed",
              "duration": 1195456443
            }
          },
          {
            "keyword": "Then ",
            "name": "I wait until Tor is ready",
            "line": 60,
            "match": {
              "location": "features/step_definitions/common_steps.rb:705"
            },
            "result": {
              "status": "passed",
              "duration": 4944846636
            }
          },
          {
            "keyword": "And ",
            "name": "tca.conf includes no bridge",
            "line": 61,
            "match": {
              "location": "features/step_definitions/tor.rb:1157"
            },
            "result": {
              "status": "passed",
              "duration": 6147761
            }
          },
          {
            "keyword": "And ",
            "name": "available upgrades have been checked",
            "line": 62,
            "match": {
              "location": "features/step_definitions/common_steps.rb:758"
            },
            "result": {
              "status": "passed",
              "duration": 2138855246
            }
          },
          {
            "keyword": "And ",
            "name": "all Internet traffic has only flowed through Tor or connectivity check service",
            "line": 63,
            "output": [
              "Warning: these queries were allowed but not needed: [\"fedoraproject.org.\"]"
            ],
            "match": {
              "location": "features/step_definitions/tor.rb:1020"
            },
            "result": {
              "status": "passed",
              "duration": 396740343
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:335"
            },
            "result": {
              "status": "passed",
              "duration": 906853631
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:104"
            },
            "result": {
              "status": "passed",
              "duration": 40887410
            }
          }
        ]
      },
      {
        "keyword": "Background",
        "name": "",
        "description": "",
        "line": 7,
        "type": "background",
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:270"
            },
            "result": {
              "status": "passed",
              "duration": 15148
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:277"
            },
            "result": {
              "status": "passed",
              "duration": 2001071
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails from DVD without network and logged in",
            "line": 8,
            "match": {
              "location": "features/step_definitions/snapshots.rb:172"
            },
            "result": {
              "status": "passed",
              "duration": 6750214821
            }
          },
          {
            "keyword": "And ",
            "name": "I capture all network traffic",
            "line": 9,
            "match": {
              "location": "features/step_definitions/common_steps.rb:185"
            },
            "result": {
              "status": "passed",
              "duration": 2262711
            }
          },
          {
            "keyword": "When ",
            "name": "the network is plugged",
            "line": 10,
            "match": {
              "location": "features/step_definitions/common_steps.rb:137"
            },
            "result": {
              "status": "passed",
              "duration": 20618835
            }
          },
          {
            "keyword": "Then ",
            "name": "the Tor Connection Assistant autostarts",
            "line": 11,
            "match": {
              "location": "features/step_definitions/tor.rb:370"
            },
            "result": {
              "status": "passed",
              "duration": 2421590658
            }
          }
        ]
      },
      {
        "id": "using-tor-bridges-and-pluggable-transports;normal-bridges-are-not-allowed-in-\"hide\"-mode",
        "keyword": "Scenario",
        "name": "Normal bridges are not allowed in \"Hide\" mode",
        "description": "",
        "line": 66,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          },
          {
            "name": "@supports_real_tor",
            "line": 65
          }
        ],
        "steps": [
          {
            "keyword": "When ",
            "name": "I try to configure some normal bridges in the Tor Connection Assistant in hide mode",
            "line": 67,
            "match": {
              "location": "features/step_definitions/tor.rb:762"
            },
            "result": {
              "status": "passed",
              "duration": 4058645418
            }
          },
          {
            "keyword": "Then ",
            "name": "the Tor Connection Assistant complains that normal bridges are not allowed",
            "line": 68,
            "match": {
              "location": "features/step_definitions/tor.rb:900"
            },
            "result": {
              "status": "passed",
              "duration": 250061618
            }
          },
          {
            "keyword": "And ",
            "name": "I cannot click the \"Connect to Tor\" button",
            "line": 69,
            "match": {
              "location": "features/step_definitions/tor.rb:926"
            },
            "result": {
              "status": "passed",
              "duration": 228251930
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:335"
            },
            "result": {
              "status": "passed",
              "duration": 1047535502
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:104"
            },
            "result": {
              "status": "passed",
              "duration": 50173221
            }
          }
        ]
      },
      {
        "keyword": "Background",
        "name": "",
        "description": "",
        "line": 7,
        "type": "background",
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:270"
            },
            "result": {
              "status": "passed",
              "duration": 16210
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:277"
            },
            "result": {
              "status": "passed",
              "duration": 1825443
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails from DVD without network and logged in",
            "line": 8,
            "match": {
              "location": "features/step_definitions/snapshots.rb:172"
            },
            "result": {
              "status": "passed",
              "duration": 6625824822
            }
          },
          {
            "keyword": "And ",
            "name": "I capture all network traffic",
            "line": 9,
            "match": {
              "location": "features/step_definitions/common_steps.rb:185"
            },
            "result": {
              "status": "passed",
              "duration": 2883286
            }
          },
          {
            "keyword": "When ",
            "name": "the network is plugged",
            "line": 10,
            "match": {
              "location": "features/step_definitions/common_steps.rb:137"
            },
            "result": {
              "status": "passed",
              "duration": 26570624
            }
          },
          {
            "keyword": "Then ",
            "name": "the Tor Connection Assistant autostarts",
            "line": 11,
            "match": {
              "location": "features/step_definitions/tor.rb:370"
            },
            "result": {
              "status": "passed",
              "duration": 2677089757
            }
          }
        ]
      },
      {
        "id": "using-tor-bridges-and-pluggable-transports;the-same-tor-configuration-is-applied-when-the-network-is-reconnected",
        "keyword": "Scenario",
        "name": "The same Tor configuration is applied when the network is reconnected",
        "description": "",
        "line": 71,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I configure a direct connection in the Tor Connection Assistant",
            "line": 72,
            "match": {
              "location": "features/step_definitions/tor.rb:513"
            },
            "result": {
              "status": "passed",
              "duration": 6082203450
            }
          },
          {
            "keyword": "And ",
            "name": "I wait until Tor is ready",
            "line": 73,
            "match": {
              "location": "features/step_definitions/common_steps.rb:705"
            },
            "result": {
              "status": "passed",
              "duration": 1887473284
            }
          },
          {
            "keyword": "When ",
            "name": "I disconnect the network through GNOME",
            "line": 74,
            "match": {
              "location": "features/step_definitions/common_steps.rb:155"
            },
            "result": {
              "status": "passed",
              "duration": 10420810967
            }
          },
          {
            "keyword": "And ",
            "name": "I connect the network through GNOME",
            "line": 75,
            "match": {
              "location": "features/step_definitions/common_steps.rb:155"
            },
            "result": {
              "status": "passed",
              "duration": 10651203186
            }
          },
          {
            "keyword": "Then ",
            "name": "the Tor Connection Assistant autostarts",
            "line": 76,
            "match": {
              "location": "features/step_definitions/tor.rb:370"
            },
            "result": {
              "status": "passed",
              "duration": 72866629
            }
          },
          {
            "keyword": "And ",
            "name": "the Tor Connection Assistant connects to Tor",
            "line": 77,
            "match": {
              "location": "features/step_definitions/tor.rb:391"
            },
            "result": {
              "status": "passed",
              "duration": 212047341
            }
          },
          {
            "keyword": "And ",
            "name": "I wait until Tor is ready",
            "line": 78,
            "match": {
              "location": "features/step_definitions/common_steps.rb:705"
            },
            "result": {
              "status": "passed",
              "duration": 1065843064
            }
          },
          {
            "keyword": "And ",
            "name": "Tor is using the same configuration as before",
            "line": 79,
            "match": {
              "location": "features/step_definitions/tor.rb:1139"
            },
            "result": {
              "status": "passed",
              "duration": 65433
            }
          },
          {
            "keyword": "And ",
            "name": "available upgrades have been checked",
            "line": 80,
            "match": {
              "location": "features/step_definitions/common_steps.rb:758"
            },
            "result": {
              "status": "passed",
              "duration": 48291567
            }
          },
          {
            "keyword": "And ",
            "name": "all Internet traffic has only flowed through Tor or connectivity check service",
            "line": 81,
            "output": [
              "Warning: these queries were allowed but not needed: [\"fedoraproject.org.\"]"
            ],
            "match": {
              "location": "features/step_definitions/tor.rb:1020"
            },
            "result": {
              "status": "passed",
              "duration": 592799766
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:335"
            },
            "result": {
              "status": "passed",
              "duration": 861860815
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:104"
            },
            "result": {
              "status": "passed",
              "duration": 71813314
            }
          }
        ]
      },
      {
        "keyword": "Background",
        "name": "",
        "description": "",
        "line": 7,
        "type": "background",
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:270"
            },
            "result": {
              "status": "passed",
              "duration": 20769
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:277"
            },
            "result": {
              "status": "passed",
              "duration": 2708287
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails from DVD without network and logged in",
            "line": 8,
            "match": {
              "location": "features/step_definitions/snapshots.rb:172"
            },
            "result": {
              "status": "passed",
              "duration": 6653849076
            }
          },
          {
            "keyword": "And ",
            "name": "I capture all network traffic",
            "line": 9,
            "match": {
              "location": "features/step_definitions/common_steps.rb:185"
            },
            "result": {
              "status": "passed",
              "duration": 3390106
            }
          },
          {
            "keyword": "When ",
            "name": "the network is plugged",
            "line": 10,
            "match": {
              "location": "features/step_definitions/common_steps.rb:137"
            },
            "result": {
              "status": "passed",
              "duration": 17552487
            }
          },
          {
            "keyword": "Then ",
            "name": "the Tor Connection Assistant autostarts",
            "line": 11,
            "match": {
              "location": "features/step_definitions/tor.rb:370"
            },
            "result": {
              "status": "passed",
              "duration": 2245167340
            }
          }
        ]
      },
      {
        "id": "using-tor-bridges-and-pluggable-transports;reconnecting-from-an-unblocked-network-to-a-blocked-network-displays-an-error",
        "keyword": "Scenario",
        "name": "Reconnecting from an unblocked network to a blocked network displays an error",
        "description": "",
        "line": 83,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I configure a direct connection in the Tor Connection Assistant",
            "line": 84,
            "match": {
              "location": "features/step_definitions/tor.rb:513"
            },
            "result": {
              "status": "passed",
              "duration": 6252142815
            }
          },
          {
            "keyword": "And ",
            "name": "I wait until Tor is ready",
            "line": 85,
            "match": {
              "location": "features/step_definitions/common_steps.rb:705"
            },
            "result": {
              "status": "passed",
              "duration": 1912470333
            }
          },
          {
            "keyword": "And ",
            "name": "I disconnect the network through GNOME",
            "line": 86,
            "match": {
              "location": "features/step_definitions/common_steps.rb:155"
            },
            "result": {
              "status": "passed",
              "duration": 10422764373
            }
          },
          {
            "keyword": "And ",
            "name": "the Tor network and default bridges are blocked",
            "line": 87,
            "match": {
              "location": "features/step_definitions/tor.rb:1081"
            },
            "result": {
              "status": "passed",
              "duration": 1788074199
            }
          },
          {
            "keyword": "When ",
            "name": "I connect the network through GNOME",
            "line": 88,
            "match": {
              "location": "features/step_definitions/common_steps.rb:155"
            },
            "result": {
              "status": "passed",
              "duration": 10687331746
            }
          },
          {
            "keyword": "Then ",
            "name": "the Tor Connection Assistant reports that it failed to connect",
            "line": 89,
            "match": {
              "location": "features/step_definitions/tor.rb:875"
            },
            "result": {
              "status": "passed",
              "duration": 21342909850
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:335"
            },
            "result": {
              "status": "passed",
              "duration": 1210742945
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:104"
            },
            "result": {
              "status": "passed",
              "duration": 60848325
            }
          }
        ]
      },
      {
        "keyword": "Background",
        "name": "",
        "description": "",
        "line": 7,
        "type": "background",
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:270"
            },
            "result": {
              "status": "passed",
              "duration": 10940
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:277"
            },
            "result": {
              "status": "passed",
              "duration": 2764973
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails from DVD without network and logged in",
            "line": 8,
            "match": {
              "location": "features/step_definitions/snapshots.rb:172"
            },
            "result": {
              "status": "passed",
              "duration": 7007665360
            }
          },
          {
            "keyword": "And ",
            "name": "I capture all network traffic",
            "line": 9,
            "match": {
              "location": "features/step_definitions/common_steps.rb:185"
            },
            "result": {
              "status": "passed",
              "duration": 4195004
            }
          },
          {
            "keyword": "When ",
            "name": "the network is plugged",
            "line": 10,
            "match": {
              "location": "features/step_definitions/common_steps.rb:137"
            },
            "result": {
              "status": "passed",
              "duration": 30036742
            }
          },
          {
            "keyword": "Then ",
            "name": "the Tor Connection Assistant autostarts",
            "line": 11,
            "match": {
              "location": "features/step_definitions/tor.rb:370"
            },
            "result": {
              "status": "passed",
              "duration": 2382034853
            }
          }
        ]
      },
      {
        "id": "using-tor-bridges-and-pluggable-transports;tor-connection-honors-my-choice-of-using-default-bridges-on-retry,-too",
        "keyword": "Scenario",
        "name": "Tor Connection honors my choice of using default bridges on retry, too",
        "description": "",
        "line": 91,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "the Tor network and default bridges are blocked",
            "line": 92,
            "match": {
              "location": "features/step_definitions/tor.rb:1081"
            },
            "result": {
              "status": "passed",
              "duration": 1316371909
            }
          },
          {
            "keyword": "When ",
            "name": "I unsuccessfully configure some default bridges in the Tor Connection Assistant",
            "line": 93,
            "match": {
              "location": "features/step_definitions/tor.rb:750"
            },
            "result": {
              "status": "passed",
              "duration": 22195913439
            }
          },
          {
            "keyword": "Then ",
            "name": "the Tor Connection Assistant reports that it failed to connect",
            "line": 94,
            "match": {
              "location": "features/step_definitions/tor.rb:875"
            },
            "result": {
              "status": "passed",
              "duration": 114804191
            }
          },
          {
            "keyword": "Given ",
            "name": "the Tor network and default bridges are unblocked",
            "line": 95,
            "match": {
              "location": "features/step_definitions/tor.rb:1081"
            },
            "result": {
              "status": "passed",
              "duration": 1794363159
            }
          },
          {
            "keyword": "When ",
            "name": "I retry connecting to Tor",
            "line": 96,
            "match": {
              "location": "features/step_definitions/tor.rb:922"
            },
            "result": {
              "status": "passed",
              "duration": 1160181542
            }
          },
          {
            "keyword": "Then ",
            "name": "I wait until Tor is ready",
            "line": 97,
            "match": {
              "location": "features/step_definitions/common_steps.rb:705"
            },
            "result": {
              "status": "passed",
              "duration": 7298371879
            }
          },
          {
            "keyword": "And ",
            "name": "Tor is configured to use the default bridges",
            "line": 98,
            "match": {
              "location": "features/step_definitions/tor.rb:1120"
            },
            "result": {
              "status": "passed",
              "duration": 343533404
            }
          },
          {
            "keyword": "And ",
            "name": "all Internet traffic has only flowed through the default bridges or connectivity check service",
            "line": 99,
            "output": [
              "Warning: these queries were allowed but not needed: [\"fedoraproject.org.\"]"
            ],
            "match": {
              "location": "features/step_definitions/tor.rb:1020"
            },
            "result": {
              "status": "passed",
              "duration": 496240012
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:335"
            },
            "result": {
              "status": "passed",
              "duration": 646314967
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:104"
            },
            "result": {
              "status": "passed",
              "duration": 70079483
            }
          }
        ]
      },
      {
        "keyword": "Background",
        "name": "",
        "description": "",
        "line": 7,
        "type": "background",
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:270"
            },
            "result": {
              "status": "passed",
              "duration": 53850
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:277"
            },
            "result": {
              "status": "passed",
              "duration": 10034843
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails from DVD without network and logged in",
            "line": 8,
            "match": {
              "location": "features/step_definitions/snapshots.rb:172"
            },
            "result": {
              "status": "passed",
              "duration": 7230291525
            }
          },
          {
            "keyword": "And ",
            "name": "I capture all network traffic",
            "line": 9,
            "match": {
              "location": "features/step_definitions/common_steps.rb:185"
            },
            "result": {
              "status": "passed",
              "duration": 3083110
            }
          },
          {
            "keyword": "When ",
            "name": "the network is plugged",
            "line": 10,
            "match": {
              "location": "features/step_definitions/common_steps.rb:137"
            },
            "result": {
              "status": "passed",
              "duration": 24694465
            }
          },
          {
            "keyword": "Then ",
            "name": "the Tor Connection Assistant autostarts",
            "line": 11,
            "match": {
              "location": "features/step_definitions/tor.rb:370"
            },
            "result": {
              "status": "passed",
              "duration": 2416197668
            }
          }
        ]
      },
      {
        "id": "using-tor-bridges-and-pluggable-transports;asking-for-mocked-bridge-settings-with-automatic-region-detection-in-tor-connection",
        "keyword": "Scenario",
        "name": "Asking for mocked bridge settings with automatic region-detection in Tor Connection",
        "description": "",
        "line": 101,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "the Moat distributor responds with the default bridges",
            "line": 102,
            "match": {
              "location": "features/step_definitions/tor.rb:784"
            },
            "result": {
              "status": "passed",
              "duration": 90823291
            }
          },
          {
            "keyword": "When ",
            "name": "I configure Tor Connection to ask for bridge settings based on my location",
            "line": 103,
            "match": {
              "location": "features/step_definitions/tor.rb:816"
            },
            "result": {
              "status": "passed",
              "duration": 5761953483
            }
          },
          {
            "keyword": "And ",
            "name": "I wait until Tor is ready",
            "line": 104,
            "match": {
              "location": "features/step_definitions/common_steps.rb:705"
            },
            "result": {
              "status": "passed",
              "duration": 7117934584
            }
          },
          {
            "keyword": "And ",
            "name": "available upgrades have been checked",
            "line": 105,
            "match": {
              "location": "features/step_definitions/common_steps.rb:758"
            },
            "result": {
              "status": "passed",
              "duration": 1114171765
            }
          },
          {
            "keyword": "Then ",
            "name": "Tor is configured to use the default bridges",
            "line": 106,
            "match": {
              "location": "features/step_definitions/tor.rb:1120"
            },
            "result": {
              "status": "passed",
              "duration": 433071659
            }
          },
          {
            "keyword": "And ",
            "name": "all Internet traffic has only flowed through the default bridges or connectivity check service",
            "line": 107,
            "output": [
              "Warning: these queries were allowed but not needed: [\"fedoraproject.org.\"]"
            ],
            "match": {
              "location": "features/step_definitions/tor.rb:1020"
            },
            "result": {
              "status": "passed",
              "duration": 321996779
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:335"
            },
            "result": {
              "status": "passed",
              "duration": 938951238
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:104"
            },
            "result": {
              "status": "passed",
              "duration": 51818568
            }
          }
        ]
      },
      {
        "keyword": "Background",
        "name": "",
        "description": "",
        "line": 7,
        "type": "background",
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:270"
            },
            "result": {
              "status": "passed",
              "duration": 11742
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:277"
            },
            "result": {
              "status": "passed",
              "duration": 1748668
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails from DVD without network and logged in",
            "line": 8,
            "match": {
              "location": "features/step_definitions/snapshots.rb:172"
            },
            "result": {
              "status": "passed",
              "duration": 6626727665
            }
          },
          {
            "keyword": "And ",
            "name": "I capture all network traffic",
            "line": 9,
            "match": {
              "location": "features/step_definitions/common_steps.rb:185"
            },
            "result": {
              "status": "passed",
              "duration": 2505107
            }
          },
          {
            "keyword": "When ",
            "name": "the network is plugged",
            "line": 10,
            "match": {
              "location": "features/step_definitions/common_steps.rb:137"
            },
            "result": {
              "status": "passed",
              "duration": 21138801
            }
          },
          {
            "keyword": "Then ",
            "name": "the Tor Connection Assistant autostarts",
            "line": 11,
            "match": {
              "location": "features/step_definitions/tor.rb:370"
            },
            "result": {
              "status": "passed",
              "duration": 2304245002
            }
          }
        ]
      },
      {
        "id": "using-tor-bridges-and-pluggable-transports;asking-for-bridge-settings-but-receiving-a-mocked-api-error-in-tor-connection",
        "keyword": "Scenario",
        "name": "Asking for bridge settings but receiving a mocked API error in Tor Connection",
        "description": "",
        "line": 109,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "the Moat distributor responds with an API error",
            "line": 110,
            "match": {
              "location": "features/step_definitions/tor.rb:804"
            },
            "result": {
              "status": "passed",
              "duration": 14545619
            }
          },
          {
            "keyword": "When ",
            "name": "I configure Tor Connection to ask for bridge settings based on my location",
            "line": 111,
            "match": {
              "location": "features/step_definitions/tor.rb:816"
            },
            "result": {
              "status": "passed",
              "duration": 5818934350
            }
          },
          {
            "keyword": "Then ",
            "name": "the Tor Connection Assistant reports that it failed to connect",
            "line": 112,
            "match": {
              "location": "features/step_definitions/tor.rb:875"
            },
            "result": {
              "status": "passed",
              "duration": 138250077
            }
          },
          {
            "keyword": "And ",
            "name": "the Tor Connection Assistant reports the Moat API error",
            "line": 113,
            "match": {
              "location": "features/step_definitions/tor.rb:883"
            },
            "result": {
              "status": "passed",
              "duration": 3005649213
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:335"
            },
            "result": {
              "status": "passed",
              "duration": 1566823866
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:104"
            },
            "result": {
              "status": "passed",
              "duration": 38538691
            }
          }
        ]
      },
      {
        "keyword": "Background",
        "name": "",
        "description": "",
        "line": 7,
        "type": "background",
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:270"
            },
            "result": {
              "status": "passed",
              "duration": 19225
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:277"
            },
            "result": {
              "status": "passed",
              "duration": 2491761
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails from DVD without network and logged in",
            "line": 8,
            "match": {
              "location": "features/step_definitions/snapshots.rb:172"
            },
            "result": {
              "status": "passed",
              "duration": 6739289808
            }
          },
          {
            "keyword": "And ",
            "name": "I capture all network traffic",
            "line": 9,
            "match": {
              "location": "features/step_definitions/common_steps.rb:185"
            },
            "result": {
              "status": "passed",
              "duration": 2652432
            }
          },
          {
            "keyword": "When ",
            "name": "the network is plugged",
            "line": 10,
            "match": {
              "location": "features/step_definitions/common_steps.rb:137"
            },
            "result": {
              "status": "passed",
              "duration": 20252148
            }
          },
          {
            "keyword": "Then ",
            "name": "the Tor Connection Assistant autostarts",
            "line": 11,
            "match": {
              "location": "features/step_definitions/tor.rb:370"
            },
            "result": {
              "status": "passed",
              "duration": 2259769671
            }
          }
        ]
      },
      {
        "id": "using-tor-bridges-and-pluggable-transports;asking-for-real-bridge-settings-for-the-usa-in-tor-connection",
        "keyword": "Scenario",
        "name": "Asking for real bridge settings for the USA in Tor Connection",
        "description": "",
        "line": 115,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "no bridges are configured in torrc",
            "line": 116,
            "match": {
              "location": "features/step_definitions/tor.rb:1246"
            },
            "result": {
              "status": "passed",
              "duration": 5334230
            }
          },
          {
            "keyword": "When ",
            "name": "I configure Tor Connection to ask for bridge settings for \"United States of America\"",
            "line": 117,
            "match": {
              "location": "features/step_definitions/tor.rb:816"
            },
            "result": {
              "status": "passed",
              "duration": 5977651881
            }
          },
          {
            "keyword": "Then ",
            "name": "some real world bridges are eventually configured in torrc",
            "line": 118,
            "match": {
              "location": "features/step_definitions/tor.rb:1250"
            },
            "result": {
              "status": "passed",
              "duration": 1348797817
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:335"
            },
            "result": {
              "status": "passed",
              "duration": 904858830
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:104"
            },
            "result": {
              "status": "passed",
              "duration": 41917774
            }
          }
        ]
      }
    ]
  },
  {
    "uri": "features/erase_memory.feature",
    "id": "system-memory-erasure-on-shutdown",
    "keyword": "Feature",
    "name": "System memory erasure on shutdown",
    "description": "  As a Tails user\n  when I shutdown Tails\n  I want the system memory to be free from sensitive data.",
    "line": 2,
    "tags": [
      {
        "name": "@product",
        "line": 1
      },
      {
        "name": "@slow",
        "line": 1
      },
      {
        "name": "@not_release_blocker",
        "line": 1
      }
    ],
    "elements": [
      {
        "id": "system-memory-erasure-on-shutdown;erasure-of-memory-freed-by-killed-userspace-processes",
        "keyword": "Scenario",
        "name": "Erasure of memory freed by killed userspace processes",
        "description": "",
        "line": 13,
        "type": "scenario",
        "comments": [
          {
            "value": "# These tests rely on the Linux kernel's memory poisoning features.",
            "line": 7
          },
          {
            "value": "# The feature is called \"on shutdown\" as this is the security guarantee",
            "line": 8
          },
          {
            "value": "# we document, but in practice we test that some important bits of memory",
            "line": 9
          },
          {
            "value": "# are erased _before_ shutdown, while for some others we really test",
            "line": 10
          },
          {
            "value": "# behavior at shutdown time.",
            "line": 11
          }
        ],
        "tags": [
          {
            "name": "@product",
            "line": 1
          },
          {
            "name": "@slow",
            "line": 1
          },
          {
            "name": "@not_release_blocker",
            "line": 1
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:270"
            },
            "result": {
              "status": "passed",
              "duration": 10169
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:277"
            },
            "result": {
              "status": "passed",
              "duration": 2845607
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails from DVD without network and logged in",
            "line": 14,
            "match": {
              "location": "features/step_definitions/snapshots.rb:172"
            },
            "result": {
              "status": "passed",
              "duration": 6654289148
            }
          },
          {
            "keyword": "And ",
            "name": "I prepare Tails for memory erasure tests",
            "line": 15,
            "match": {
              "location": "features/step_definitions/erase_memory.rb:66"
            },
            "result": {
              "status": "passed",
              "duration": 433064616
            }
          },
          {
            "keyword": "When ",
            "name": "I start a process allocating 128 MiB of memory with a known pattern",
            "line": 16,
            "match": {
              "location": "features/step_definitions/erase_memory.rb:84"
            },
            "result": {
              "status": "passed",
              "duration": 1166423577
            }
          },
          {
            "keyword": "Then ",
            "name": "patterns cover at least 127 MiB in the guest's memory",
            "line": 18,
            "comments": [
              {
                "value": "# Since Debian Trixie we only get 99.610% coverage (tails#21012)",
                "line": 17
              }
            ],
            "output": [
              "Pattern coverage: 100.395% (127 MiB out of 127 MiB reference memory)"
            ],
            "match": {
              "location": "features/step_definitions/erase_memory.rb:182"
            },
            "result": {
              "status": "passed",
              "duration": 2049327422
            }
          },
          {
            "keyword": "When ",
            "name": "I kill the allocating process",
            "line": 19,
            "match": {
              "location": "features/step_definitions/erase_memory.rb:103"
            },
            "result": {
              "status": "passed",
              "duration": 233827601
            }
          },
          {
            "keyword": "Then ",
            "name": "I find very few patterns in the guest's memory after 5 seconds",
            "line": 20,
            "output": [
              "Pattern coverage: 0.000% (0 MiB out of 1485 MiB reference memory)"
            ],
            "match": {
              "location": "features/step_definitions/erase_memory.rb:214"
            },
            "result": {
              "status": "passed",
              "duration": 6821203220
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:335"
            },
            "result": {
              "status": "passed",
              "duration": 1005373155
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:104"
            },
            "result": {
              "status": "passed",
              "duration": 43444
            }
          }
        ]
      },
      {
        "id": "system-memory-erasure-on-shutdown;erasure-of-tmpfs-data-on-unmount",
        "keyword": "Scenario",
        "name": "Erasure of tmpfs data on unmount",
        "description": "",
        "line": 22,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          },
          {
            "name": "@slow",
            "line": 1
          },
          {
            "name": "@not_release_blocker",
            "line": 1
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:270"
            },
            "result": {
              "status": "passed",
              "duration": 12073
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:277"
            },
            "result": {
              "status": "passed",
              "duration": 1558947
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails from DVD without network and logged in",
            "line": 23,
            "match": {
              "location": "features/step_definitions/snapshots.rb:172"
            },
            "result": {
              "status": "passed",
              "duration": 6798783094
            }
          },
          {
            "keyword": "And ",
            "name": "I prepare Tails for memory erasure tests",
            "line": 24,
            "match": {
              "location": "features/step_definitions/erase_memory.rb:66"
            },
            "result": {
              "status": "passed",
              "duration": 478339352
            }
          },
          {
            "keyword": "And ",
            "name": "I find very few patterns in the guest's memory",
            "line": 25,
            "output": [
              "Pattern coverage: 0.000% (0 MiB out of 1472 MiB reference memory)"
            ],
            "match": {
              "location": "features/step_definitions/erase_memory.rb:214"
            },
            "result": {
              "status": "passed",
              "duration": 1923073235
            }
          },
          {
            "keyword": "When ",
            "name": "I mount a 128 MiB tmpfs on \"/mnt\" and fill it with a known pattern",
            "line": 26,
            "match": {
              "location": "features/step_definitions/erase_memory.rb:149"
            },
            "result": {
              "status": "passed",
              "duration": 1593811378
            }
          },
          {
            "keyword": "Then ",
            "name": "patterns cover at least 99% of the test FS size in the guest's memory",
            "line": 27,
            "output": [
              "Pattern coverage: 100.000% (128 MiB out of 128 MiB reference memory)"
            ],
            "match": {
              "location": "features/step_definitions/erase_memory.rb:166"
            },
            "result": {
              "status": "passed",
              "duration": 2134757773
            }
          },
          {
            "keyword": "When ",
            "name": "I umount \"/mnt\"",
            "line": 28,
            "match": {
              "location": "features/step_definitions/erase_memory.rb:210"
            },
            "result": {
              "status": "passed",
              "duration": 337229917
            }
          },
          {
            "keyword": "Then ",
            "name": "I find very few patterns in the guest's memory after 3 seconds",
            "line": 29,
            "output": [
              "Pattern coverage: 0.000% (0 MiB out of 1472 MiB reference memory)"
            ],
            "match": {
              "location": "features/step_definitions/erase_memory.rb:214"
            },
            "result": {
              "status": "passed",
              "duration": 4808132156
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:335"
            },
            "result": {
              "status": "passed",
              "duration": 685646392
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:104"
            },
            "result": {
              "status": "passed",
              "duration": 26500
            }
          }
        ]
      },
      {
        "id": "system-memory-erasure-on-shutdown;erasure-of-read-and-write-disk-caches-on-unmount:-vfat",
        "keyword": "Scenario",
        "name": "Erasure of read and write disk caches on unmount: vfat",
        "description": "",
        "line": 31,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          },
          {
            "name": "@slow",
            "line": 1
          },
          {
            "name": "@not_release_blocker",
            "line": 1
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:270"
            },
            "result": {
              "status": "passed",
              "duration": 12764
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:277"
            },
            "result": {
              "status": "passed",
              "duration": 2324378
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails from DVD without network and logged in",
            "line": 32,
            "match": {
              "location": "features/step_definitions/snapshots.rb:172"
            },
            "result": {
              "status": "passed",
              "duration": 7534495746
            }
          },
          {
            "keyword": "And ",
            "name": "I prepare Tails for memory erasure tests",
            "line": 33,
            "match": {
              "location": "features/step_definitions/erase_memory.rb:66"
            },
            "result": {
              "status": "passed",
              "duration": 430697405
            }
          },
          {
            "keyword": "When ",
            "name": "I plug and mount a 128 MiB USB drive with a vfat filesystem",
            "line": 34,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1530"
            },
            "result": {
              "status": "passed",
              "duration": 5724706160
            }
          },
          {
            "keyword": "Then ",
            "name": "I find very few patterns in the guest's memory",
            "line": 35,
            "output": [
              "Pattern coverage: 0.000% (0 MiB out of 1480 MiB reference memory)"
            ],
            "match": {
              "location": "features/step_definitions/erase_memory.rb:214"
            },
            "result": {
              "status": "passed",
              "duration": 1840743016
            }
          },
          {
            "keyword": "When ",
            "name": "I fill the USB drive with a known pattern",
            "line": 37,
            "comments": [
              {
                "value": "# write cache",
                "line": 36
              }
            ],
            "match": {
              "location": "features/step_definitions/erase_memory.rb:158"
            },
            "result": {
              "status": "passed",
              "duration": 2710987588
            }
          },
          {
            "keyword": "Then ",
            "name": "patterns cover at least 75% of the test FS size in the guest's memory",
            "line": 38,
            "output": [
              "Pattern coverage: 100.000% (127 MiB out of 127 MiB reference memory)"
            ],
            "match": {
              "location": "features/step_definitions/erase_memory.rb:166"
            },
            "result": {
              "status": "passed",
              "duration": 2110073506
            }
          },
          {
            "keyword": "When ",
            "name": "I umount the USB drive",
            "line": 39,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1568"
            },
            "result": {
              "status": "passed",
              "duration": 827459069
            }
          },
          {
            "keyword": "Then ",
            "name": "I find very few patterns in the guest's memory after 3 seconds",
            "line": 40,
            "output": [
              "Pattern coverage: 0.000% (0 MiB out of 1480 MiB reference memory)"
            ],
            "match": {
              "location": "features/step_definitions/erase_memory.rb:214"
            },
            "result": {
              "status": "passed",
              "duration": 5091545649
            }
          },
          {
            "keyword": "When ",
            "name": "I mount the USB drive again",
            "line": 42,
            "comments": [
              {
                "value": "# read cache",
                "line": 41
              }
            ],
            "match": {
              "location": "features/step_definitions/common_steps.rb:1563"
            },
            "result": {
              "status": "passed",
              "duration": 216309880
            }
          },
          {
            "keyword": "And ",
            "name": "I read the content of the test FS",
            "line": 43,
            "match": {
              "location": "features/step_definitions/erase_memory.rb:162"
            },
            "result": {
              "status": "passed",
              "duration": 539509933
            }
          },
          {
            "keyword": "Then ",
            "name": "patterns cover at least 99% of the test FS size in the guest's memory",
            "line": 44,
            "output": [
              "Pattern coverage: 100.000% (127 MiB out of 127 MiB reference memory)"
            ],
            "match": {
              "location": "features/step_definitions/erase_memory.rb:166"
            },
            "result": {
              "status": "passed",
              "duration": 2515030130
            }
          },
          {
            "keyword": "When ",
            "name": "I umount the USB drive",
            "line": 45,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1568"
            },
            "result": {
              "status": "passed",
              "duration": 405713204
            }
          },
          {
            "keyword": "Then ",
            "name": "I find very few patterns in the guest's memory after 3 seconds",
            "line": 46,
            "output": [
              "Pattern coverage: 0.000% (0 MiB out of 1480 MiB reference memory)"
            ],
            "match": {
              "location": "features/step_definitions/erase_memory.rb:214"
            },
            "result": {
              "status": "passed",
              "duration": 4746877772
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:335"
            },
            "result": {
              "status": "passed",
              "duration": 1037674186
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:104"
            },
            "result": {
              "status": "passed",
              "duration": 349084
            }
          }
        ]
      },
      {
        "id": "system-memory-erasure-on-shutdown;erasure-of-read-and-write-disk-caches-on-unmount:-luks-encrypted-ext4",
        "keyword": "Scenario",
        "name": "Erasure of read and write disk caches on unmount: LUKS-encrypted ext4",
        "description": "",
        "line": 48,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          },
          {
            "name": "@slow",
            "line": 1
          },
          {
            "name": "@not_release_blocker",
            "line": 1
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:270"
            },
            "result": {
              "status": "passed",
              "duration": 20488
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:277"
            },
            "result": {
              "status": "passed",
              "duration": 2908191
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails from DVD without network and logged in",
            "line": 49,
            "match": {
              "location": "features/step_definitions/snapshots.rb:172"
            },
            "result": {
              "status": "passed",
              "duration": 6959371949
            }
          },
          {
            "keyword": "And ",
            "name": "I prepare Tails for memory erasure tests",
            "line": 50,
            "match": {
              "location": "features/step_definitions/erase_memory.rb:66"
            },
            "result": {
              "status": "passed",
              "duration": 468337680
            }
          },
          {
            "keyword": "When ",
            "name": "I plug and mount a 128 MiB USB drive with an ext4 filesystem encrypted with password \"asdf\"",
            "line": 51,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1530"
            },
            "result": {
              "status": "passed",
              "duration": 29306470112
            }
          },
          {
            "keyword": "Then ",
            "name": "I find very few patterns in the guest's memory",
            "line": 52,
            "output": [
              "Pattern coverage: 0.000% (0 MiB out of 1480 MiB reference memory)"
            ],
            "match": {
              "location": "features/step_definitions/erase_memory.rb:214"
            },
            "result": {
              "status": "passed",
              "duration": 1733414449
            }
          },
          {
            "keyword": "When ",
            "name": "I fill the USB drive with a known pattern",
            "line": 54,
            "comments": [
              {
                "value": "# write cache",
                "line": 53
              }
            ],
            "match": {
              "location": "features/step_definitions/erase_memory.rb:158"
            },
            "result": {
              "status": "passed",
              "duration": 1382799279
            }
          },
          {
            "keyword": "Then ",
            "name": "patterns cover at least 99% of the test FS size in the guest's memory",
            "line": 55,
            "output": [
              "Pattern coverage: 106.115% (97 MiB out of 91 MiB reference memory)"
            ],
            "match": {
              "location": "features/step_definitions/erase_memory.rb:166"
            },
            "result": {
              "status": "passed",
              "duration": 1967498250
            }
          },
          {
            "keyword": "When ",
            "name": "I umount the USB drive",
            "line": 56,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1568"
            },
            "result": {
              "status": "passed",
              "duration": 631420191
            }
          },
          {
            "keyword": "Then ",
            "name": "I find very few patterns in the guest's memory after 3 seconds",
            "line": 57,
            "output": [
              "Pattern coverage: 0.000% (0 MiB out of 1480 MiB reference memory)"
            ],
            "match": {
              "location": "features/step_definitions/erase_memory.rb:214"
            },
            "result": {
              "status": "passed",
              "duration": 4867420730
            }
          },
          {
            "keyword": "When ",
            "name": "I mount the USB drive again",
            "line": 59,
            "comments": [
              {
                "value": "# read cache",
                "line": 58
              }
            ],
            "match": {
              "location": "features/step_definitions/common_steps.rb:1563"
            },
            "result": {
              "status": "passed",
              "duration": 4411885010
            }
          },
          {
            "keyword": "And ",
            "name": "I read the content of the test FS",
            "line": 60,
            "match": {
              "location": "features/step_definitions/erase_memory.rb:162"
            },
            "result": {
              "status": "passed",
              "duration": 350595313
            }
          },
          {
            "keyword": "Then ",
            "name": "patterns cover at least 99% of the test FS size in the guest's memory",
            "line": 61,
            "output": [
              "Pattern coverage: 106.115% (97 MiB out of 91 MiB reference memory)"
            ],
            "match": {
              "location": "features/step_definitions/erase_memory.rb:166"
            },
            "result": {
              "status": "passed",
              "duration": 1992612340
            }
          },
          {
            "keyword": "When ",
            "name": "I umount the USB drive",
            "line": 62,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1568"
            },
            "result": {
              "status": "passed",
              "duration": 419405847
            }
          },
          {
            "keyword": "Then ",
            "name": "I find very few patterns in the guest's memory after 3 seconds",
            "line": 63,
            "output": [
              "Pattern coverage: 0.000% (0 MiB out of 1480 MiB reference memory)"
            ],
            "match": {
              "location": "features/step_definitions/erase_memory.rb:214"
            },
            "result": {
              "status": "passed",
              "duration": 4636942189
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:335"
            },
            "result": {
              "status": "passed",
              "duration": 676482401
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:104"
            },
            "result": {
              "status": "passed",
              "duration": 537457
            }
          }
        ]
      },
      {
        "id": "system-memory-erasure-on-shutdown;erasure-of-the-overlayfs-read-write-branch-on-shutdown",
        "keyword": "Scenario",
        "name": "Erasure of the overlayfs read-write branch on shutdown",
        "description": "",
        "line": 65,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          },
          {
            "name": "@slow",
            "line": 1
          },
          {
            "name": "@not_release_blocker",
            "line": 1
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:270"
            },
            "result": {
              "status": "passed",
              "duration": 16219
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:277"
            },
            "result": {
              "status": "passed",
              "duration": 3068752
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails from DVD without network and logged in",
            "line": 66,
            "match": {
              "location": "features/step_definitions/snapshots.rb:172"
            },
            "result": {
              "status": "passed",
              "duration": 6800988231
            }
          },
          {
            "keyword": "And ",
            "name": "I prepare Tails for memory erasure tests",
            "line": 67,
            "match": {
              "location": "features/step_definitions/erase_memory.rb:66"
            },
            "result": {
              "status": "passed",
              "duration": 488824677
            }
          },
          {
            "keyword": "When ",
            "name": "I fill a 128 MiB file with a known pattern on the root filesystem",
            "line": 68,
            "match": {
              "location": "features/step_definitions/erase_memory.rb:235"
            },
            "result": {
              "status": "passed",
              "duration": 25115956777
            }
          },
          {
            "keyword": "And ",
            "name": "I drop all kernel caches",
            "line": 70,
            "comments": [
              {
                "value": "# ensure the pattern is in memory due to tmpfs, not to disk cache",
                "line": 69
              }
            ],
            "match": {
              "location": "features/step_definitions/erase_memory.rb:251"
            },
            "result": {
              "status": "passed",
              "duration": 2321030643
            }
          },
          {
            "keyword": "Then ",
            "name": "patterns cover at least 128 MiB in the guest's memory",
            "line": 71,
            "output": [
              "Pattern coverage: 100.000% (128 MiB out of 128 MiB reference memory)"
            ],
            "match": {
              "location": "features/step_definitions/erase_memory.rb:182"
            },
            "result": {
              "status": "passed",
              "duration": 1558083161
            }
          },
          {
            "keyword": "When ",
            "name": "I trigger shutdown",
            "line": 72,
            "match": {
              "location": "features/step_definitions/erase_memory.rb:255"
            },
            "result": {
              "status": "passed",
              "duration": 6015777
            }
          },
          {
            "keyword": "Then ",
            "name": "I find very few patterns in the guest's memory after 20 seconds",
            "line": 73,
            "output": [
              "Pattern coverage: 0.000% (0 MiB out of 1481 MiB reference memory)"
            ],
            "match": {
              "location": "features/step_definitions/erase_memory.rb:214"
            },
            "result": {
              "status": "passed",
              "duration": 20612665075
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:335"
            },
            "result": {
              "status": "passed",
              "duration": 3688593054
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:104"
            },
            "result": {
              "status": "passed",
              "duration": 19857
            }
          }
        ]
      },
      {
        "id": "system-memory-erasure-on-shutdown;erasure-of-read-and-write-disk-caches-of-persistent-data-on-shutdown",
        "keyword": "Scenario",
        "name": "Erasure of read and write disk caches of persistent data on shutdown",
        "description": "",
        "line": 75,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          },
          {
            "name": "@slow",
            "line": 1
          },
          {
            "name": "@not_release_blocker",
            "line": 1
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:270"
            },
            "result": {
              "status": "passed",
              "duration": 11272
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:277"
            },
            "result": {
              "status": "passed",
              "duration": 2332303
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails without network from a USB drive with a persistent partition enabled and logged in",
            "line": 76,
            "match": {
              "location": "features/step_definitions/snapshots.rb:172"
            },
            "result": {
              "status": "passed",
              "duration": 233956500247
            }
          },
          {
            "keyword": "And ",
            "name": "I prepare Tails for memory erasure tests",
            "line": 77,
            "match": {
              "location": "features/step_definitions/erase_memory.rb:66"
            },
            "result": {
              "status": "passed",
              "duration": 414992023
            }
          },
          {
            "keyword": "When ",
            "name": "I fill a 128 MiB file with a known pattern on the persistent filesystem",
            "line": 78,
            "match": {
              "location": "features/step_definitions/erase_memory.rb:235"
            },
            "result": {
              "status": "passed",
              "duration": 19203126872
            }
          },
          {
            "keyword": "When ",
            "name": "I trigger shutdown",
            "line": 79,
            "match": {
              "location": "features/step_definitions/erase_memory.rb:255"
            },
            "result": {
              "status": "passed",
              "duration": 6073456
            }
          },
          {
            "keyword": "Then ",
            "name": "I find very few patterns in the guest's memory after 20 seconds",
            "line": 80,
            "output": [
              "Pattern coverage: 0.000% (0 MiB out of 1505 MiB reference memory)"
            ],
            "match": {
              "location": "features/step_definitions/erase_memory.rb:214"
            },
            "result": {
              "status": "passed",
              "duration": 20971008449
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:335"
            },
            "result": {
              "status": "passed",
              "duration": 3830135869
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:104"
            },
            "result": {
              "status": "passed",
              "duration": 9767552
            }
          }
        ]
      }
    ]
  },
  {
    "uri": "features/usb_install.feature",
    "id": "installing-tails-to-a-usb-drive",
    "keyword": "Feature",
    "name": "Installing Tails to a USB drive",
    "description": "  As a Tails user\n  I want to install Tails to a suitable USB drive",
    "line": 2,
    "tags": [
      {
        "name": "@product",
        "line": 1
      }
    ],
    "elements": [
      {
        "id": "installing-tails-to-a-usb-drive;try-installing-tails-to-a-too-small-usb-drive-with-gpt-and-a-fat-partition",
        "keyword": "Scenario",
        "name": "Try installing Tails to a too small USB drive with GPT and a FAT partition",
        "description": "",
        "line": 7,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          },
          {
            "name": "@not_release_blocker",
            "line": 6
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:270"
            },
            "result": {
              "status": "passed",
              "duration": 17063
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:277"
            },
            "result": {
              "status": "passed",
              "duration": 1557540
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails from DVD without network and logged in",
            "line": 8,
            "match": {
              "location": "features/step_definitions/snapshots.rb:172"
            },
            "result": {
              "status": "passed",
              "duration": 6756560048
            }
          },
          {
            "keyword": "And ",
            "name": "I temporarily create a 4 GiB disk named \"gptfat\"",
            "line": 9,
            "match": {
              "location": "features/step_definitions/common_steps.rb:111"
            },
            "result": {
              "status": "passed",
              "duration": 51013551
            }
          },
          {
            "keyword": "And ",
            "name": "I create a gpt partition with a vfat filesystem on disk \"gptfat\"",
            "line": 10,
            "match": {
              "location": "features/step_definitions/untrusted_partitions.rb:23"
            },
            "result": {
              "status": "passed",
              "duration": 3374232263
            }
          },
          {
            "keyword": "And ",
            "name": "I plug USB drive \"gptfat\"",
            "line": 11,
            "match": {
              "location": "features/step_definitions/common_steps.rb:123"
            },
            "result": {
              "status": "passed",
              "duration": 2337827945
            }
          },
          {
            "keyword": "When ",
            "name": "I start Tails Installer",
            "line": 12,
            "match": {
              "location": "features/step_definitions/usb.rb:143"
            },
            "result": {
              "status": "passed",
              "duration": 8985926785
            }
          },
          {
            "keyword": "Then ",
            "name": "I am told by Tails Installer that the destination device \"is too small\"",
            "line": 13,
            "match": {
              "location": "features/step_definitions/usb.rb:159"
            },
            "result": {
              "status": "passed",
              "duration": 28993428
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:335"
            },
            "result": {
              "status": "passed",
              "duration": 935753556
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:104"
            },
            "result": {
              "status": "passed",
              "duration": 1048747
            }
          }
        ]
      },
      {
        "id": "installing-tails-to-a-usb-drive;detecting-when-a-target-usb-drive-is-inserted-or-removed",
        "keyword": "Scenario",
        "name": "Detecting when a target USB drive is inserted or removed",
        "description": "",
        "line": 15,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:270"
            },
            "result": {
              "status": "passed",
              "duration": 11322
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:277"
            },
            "result": {
              "status": "passed",
              "duration": 2764282
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails from DVD without network and logged in",
            "line": 16,
            "match": {
              "location": "features/step_definitions/snapshots.rb:172"
            },
            "result": {
              "status": "passed",
              "duration": 7034913137
            }
          },
          {
            "keyword": "And ",
            "name": "I temporarily create a 7200 MiB disk named \"temp\"",
            "line": 17,
            "match": {
              "location": "features/step_definitions/common_steps.rb:111"
            },
            "result": {
              "status": "passed",
              "duration": 19405751
            }
          },
          {
            "keyword": "And ",
            "name": "I start Tails Installer",
            "line": 18,
            "match": {
              "location": "features/step_definitions/usb.rb:143"
            },
            "result": {
              "status": "passed",
              "duration": 9007336293
            }
          },
          {
            "keyword": "But ",
            "name": "a suitable USB device is not found",
            "line": 19,
            "match": {
              "location": "features/step_definitions/usb.rb:165"
            },
            "result": {
              "status": "passed",
              "duration": 25256672
            }
          },
          {
            "keyword": "When ",
            "name": "I plug USB drive \"temp\"",
            "line": 20,
            "match": {
              "location": "features/step_definitions/common_steps.rb:123"
            },
            "result": {
              "status": "passed",
              "duration": 2613338850
            }
          },
          {
            "keyword": "Then ",
            "name": "the \"temp\" USB drive is selected",
            "line": 21,
            "match": {
              "location": "features/step_definitions/usb.rb:171"
            },
            "result": {
              "status": "passed",
              "duration": 57723487
            }
          },
          {
            "keyword": "When ",
            "name": "I unplug USB drive \"temp\"",
            "line": 22,
            "match": {
              "location": "features/step_definitions/usb.rb:120"
            },
            "result": {
              "status": "passed",
              "duration": 168902779
            }
          },
          {
            "keyword": "Then ",
            "name": "a suitable USB device is not found",
            "line": 23,
            "match": {
              "location": "features/step_definitions/usb.rb:165"
            },
            "result": {
              "status": "passed",
              "duration": 28414515
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:335"
            },
            "result": {
              "status": "passed",
              "duration": 851957635
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:104"
            },
            "result": {
              "status": "passed",
              "duration": 254323
            }
          }
        ]
      },
      {
        "id": "installing-tails-to-a-usb-drive;installing-tails-with-tails-installer-to-a-used-usb-drive",
        "keyword": "Scenario",
        "name": "Installing Tails with Tails Installer to a used USB drive",
        "description": "",
        "line": 25,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:270"
            },
            "result": {
              "status": "passed",
              "duration": 14757
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:277"
            },
            "result": {
              "status": "passed",
              "duration": 1844378
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails from DVD without network and logged in",
            "line": 26,
            "match": {
              "location": "features/step_definitions/snapshots.rb:172"
            },
            "result": {
              "status": "passed",
              "duration": 6762322670
            }
          },
          {
            "keyword": "And ",
            "name": "I temporarily create a 7200 MiB disk named \"install\"",
            "line": 27,
            "match": {
              "location": "features/step_definitions/common_steps.rb:111"
            },
            "result": {
              "status": "passed",
              "duration": 14941613
            }
          },
          {
            "keyword": "And ",
            "name": "I create a gpt partition with a vfat filesystem on disk \"install\"",
            "line": 28,
            "match": {
              "location": "features/step_definitions/untrusted_partitions.rb:23"
            },
            "result": {
              "status": "passed",
              "duration": 3179399007
            }
          },
          {
            "keyword": "And ",
            "name": "I plug USB drive \"install\"",
            "line": 29,
            "match": {
              "location": "features/step_definitions/common_steps.rb:123"
            },
            "result": {
              "status": "passed",
              "duration": 2334072323
            }
          },
          {
            "keyword": "And ",
            "name": "I install Tails to USB drive \"install\" by cloning",
            "line": 30,
            "match": {
              "location": "features/step_definitions/usb.rb:186"
            },
            "result": {
              "status": "passed",
              "duration": 99114167964
            }
          },
          {
            "keyword": "Then ",
            "name": "the running Tails is installed on USB drive \"install\"",
            "line": 31,
            "match": {
              "location": "features/step_definitions/usb.rb:601"
            },
            "result": {
              "status": "passed",
              "duration": 13664767853
            }
          },
          {
            "keyword": "And ",
            "name": "there is a random seed on USB drive \"install\"",
            "line": 32,
            "match": {
              "location": "features/step_definitions/random_seed.rb:31"
            },
            "result": {
              "status": "passed",
              "duration": 2650375170
            }
          },
          {
            "keyword": "But ",
            "name": "there is no persistence partition on USB drive \"install\"",
            "line": 33,
            "match": {
              "location": "features/step_definitions/usb.rb:606"
            },
            "result": {
              "status": "passed",
              "duration": 58865472
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:335"
            },
            "result": {
              "status": "passed",
              "duration": 1370823849
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:104"
            },
            "result": {
              "status": "passed",
              "duration": 128249263
            }
          }
        ]
      },
      {
        "id": "installing-tails-to-a-usb-drive;installing-tails-with-tails-installer-to-a-pristine-usb-drive",
        "keyword": "Scenario",
        "name": "Installing Tails with Tails Installer to a pristine USB drive",
        "description": "",
        "line": 35,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:270"
            },
            "result": {
              "status": "passed",
              "duration": 33433
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:277"
            },
            "result": {
              "status": "passed",
              "duration": 2227597
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails from DVD without network and logged in",
            "line": 36,
            "match": {
              "location": "features/step_definitions/snapshots.rb:172"
            },
            "result": {
              "status": "passed",
              "duration": 6876442598
            }
          },
          {
            "keyword": "And ",
            "name": "I temporarily create a 7200 MiB disk named \"install\"",
            "line": 37,
            "match": {
              "location": "features/step_definitions/common_steps.rb:111"
            },
            "result": {
              "status": "passed",
              "duration": 10958054
            }
          },
          {
            "keyword": "And ",
            "name": "I plug USB drive \"install\"",
            "line": 38,
            "match": {
              "location": "features/step_definitions/common_steps.rb:123"
            },
            "result": {
              "status": "passed",
              "duration": 2262333548
            }
          },
          {
            "keyword": "And ",
            "name": "I install Tails to USB drive \"install\" by cloning",
            "line": 39,
            "match": {
              "location": "features/step_definitions/usb.rb:186"
            },
            "result": {
              "status": "passed",
              "duration": 97294799104
            }
          },
          {
            "keyword": "Then ",
            "name": "the running Tails is installed on USB drive \"install\"",
            "line": 40,
            "match": {
              "location": "features/step_definitions/usb.rb:601"
            },
            "result": {
              "status": "passed",
              "duration": 13556999843
            }
          },
          {
            "keyword": "And ",
            "name": "there is a random seed on USB drive \"install\"",
            "line": 41,
            "match": {
              "location": "features/step_definitions/random_seed.rb:31"
            },
            "result": {
              "status": "passed",
              "duration": 2645349938
            }
          },
          {
            "keyword": "But ",
            "name": "there is no persistence partition on USB drive \"install\"",
            "line": 42,
            "match": {
              "location": "features/step_definitions/usb.rb:606"
            },
            "result": {
              "status": "passed",
              "duration": 54342883
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:335"
            },
            "result": {
              "status": "passed",
              "duration": 867310196
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:104"
            },
            "result": {
              "status": "passed",
              "duration": 145029072
            }
          }
        ]
      },
      {
        "id": "installing-tails-to-a-usb-drive;installing-tails-with-tails-installer-to-a-used-usb-drive,-cloning-the-persistent-storage",
        "keyword": "Scenario",
        "name": "Installing Tails with Tails Installer to a used USB drive, cloning the Persistent Storage",
        "description": "",
        "line": 44,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:270"
            },
            "result": {
              "status": "passed",
              "duration": 16801
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:277"
            },
            "result": {
              "status": "passed",
              "duration": 2042069
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails without network from a USB drive with a persistent partition enabled and logged in",
            "line": 45,
            "match": {
              "location": "features/step_definitions/snapshots.rb:172"
            },
            "result": {
              "status": "passed",
              "duration": 8655442992
            }
          },
          {
            "keyword": "And ",
            "name": "I create a file in the Persistent directory",
            "line": 46,
            "match": {
              "location": "features/step_definitions/usb.rb:1712"
            },
            "result": {
              "status": "passed",
              "duration": 55406545
            }
          },
          {
            "keyword": "And ",
            "name": "I temporarily create a 7200 MiB disk named \"install\"",
            "line": 47,
            "match": {
              "location": "features/step_definitions/common_steps.rb:111"
            },
            "result": {
              "status": "passed",
              "duration": 9332118
            }
          },
          {
            "keyword": "And ",
            "name": "I create a gpt partition with a vfat filesystem on disk \"install\"",
            "line": 48,
            "match": {
              "location": "features/step_definitions/untrusted_partitions.rb:23"
            },
            "result": {
              "status": "passed",
              "duration": 3332245576
            }
          },
          {
            "keyword": "And ",
            "name": "I plug USB drive \"install\"",
            "line": 49,
            "match": {
              "location": "features/step_definitions/common_steps.rb:123"
            },
            "result": {
              "status": "passed",
              "duration": 2278187299
            }
          },
          {
            "keyword": "And ",
            "name": "I install Tails with Persistent Storage to USB drive \"install\" by cloning",
            "line": 50,
            "match": {
              "location": "features/step_definitions/usb.rb:186"
            },
            "result": {
              "status": "passed",
              "duration": 115849729130
            }
          },
          {
            "keyword": "Then ",
            "name": "the running Tails is installed on USB drive \"install\"",
            "line": 51,
            "match": {
              "location": "features/step_definitions/usb.rb:601"
            },
            "result": {
              "status": "passed",
              "duration": 17030300653
            }
          },
          {
            "keyword": "And ",
            "name": "there is a random seed on USB drive \"install\"",
            "line": 52,
            "match": {
              "location": "features/step_definitions/random_seed.rb:31"
            },
            "result": {
              "status": "passed",
              "duration": 2737881848
            }
          },
          {
            "keyword": "And ",
            "name": "there is a persistence partition on USB drive \"install\"",
            "line": 53,
            "match": {
              "location": "features/step_definitions/usb.rb:612"
            },
            "result": {
              "status": "passed",
              "duration": 51698102
            }
          },
          {
            "keyword": "And ",
            "name": "the USB drive \"install\" contains the same files as my persistent storage",
            "line": 54,
            "match": {
              "location": "features/step_definitions/backup.rb:22"
            },
            "result": {
              "status": "passed",
              "duration": 3612880694
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:335"
            },
            "result": {
              "status": "passed",
              "duration": 838349496
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:104"
            },
            "result": {
              "status": "passed",
              "duration": 153449884
            }
          }
        ]
      },
      {
        "id": "installing-tails-to-a-usb-drive;installing-tails-with-tails-installer-to-a-pristine-usb-drive,-without-cloning-the-persistent-storage",
        "keyword": "Scenario",
        "name": "Installing Tails with Tails Installer to a pristine USB drive, without cloning the Persistent Storage",
        "description": "",
        "line": 56,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:270"
            },
            "result": {
              "status": "passed",
              "duration": 33383
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:277"
            },
            "result": {
              "status": "passed",
              "duration": 6627785
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails without network from a USB drive with a persistent partition enabled and logged in",
            "line": 57,
            "match": {
              "location": "features/step_definitions/snapshots.rb:172"
            },
            "result": {
              "status": "passed",
              "duration": 7566114423
            }
          },
          {
            "keyword": "And ",
            "name": "I temporarily create a 7200 MiB disk named \"install\"",
            "line": 58,
            "match": {
              "location": "features/step_definitions/common_steps.rb:111"
            },
            "result": {
              "status": "passed",
              "duration": 9266894
            }
          },
          {
            "keyword": "And ",
            "name": "I plug USB drive \"install\"",
            "line": 59,
            "match": {
              "location": "features/step_definitions/common_steps.rb:123"
            },
            "result": {
              "status": "passed",
              "duration": 2233559903
            }
          },
          {
            "keyword": "And ",
            "name": "I install Tails to USB drive \"install\" by cloning",
            "line": 60,
            "match": {
              "location": "features/step_definitions/usb.rb:186"
            },
            "result": {
              "status": "passed",
              "duration": 113220327795
            }
          },
          {
            "keyword": "Then ",
            "name": "the running Tails is installed on USB drive \"install\"",
            "line": 61,
            "match": {
              "location": "features/step_definitions/usb.rb:601"
            },
            "result": {
              "status": "passed",
              "duration": 17430530468
            }
          },
          {
            "keyword": "And ",
            "name": "there is a random seed on USB drive \"install\"",
            "line": 62,
            "match": {
              "location": "features/step_definitions/random_seed.rb:31"
            },
            "result": {
              "status": "passed",
              "duration": 2848773921
            }
          },
          {
            "keyword": "And ",
            "name": "there is no persistence partition on USB drive \"install\"",
            "line": 63,
            "match": {
              "location": "features/step_definitions/usb.rb:606"
            },
            "result": {
              "status": "passed",
              "duration": 78299911
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:335"
            },
            "result": {
              "status": "passed",
              "duration": 991850028
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:104"
            },
            "result": {
              "status": "passed",
              "duration": 135002694
            }
          }
        ]
      },
      {
        "id": "installing-tails-to-a-usb-drive;re-installing-tails-over-an-existing-usb-installation-with-a-persistent-partition",
        "keyword": "Scenario",
        "name": "Re-installing Tails over an existing USB installation with a persistent partition",
        "description": "",
        "line": 65,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:270"
            },
            "result": {
              "status": "passed",
              "duration": 14486
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:277"
            },
            "result": {
              "status": "passed",
              "duration": 1912461
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails without network from a USB drive with a persistent partition enabled and logged in",
            "line": 70,
            "comments": [
              {
                "value": "# We reach this first checkpoint only to ensure that the ' __internal' disk has reached the state (Tails installed + persistent partition set up) we need before we clone it below.",
                "line": 66
              },
              {
                "value": "# This first part is done without Tails Installer (install from Tails USB image)",
                "line": 67
              },
              {
                "value": "# Note: the \"__internal\" disk will keep its state across scenarios",
                "line": 68
              },
              {
                "value": "# and features until one of its snapshots is restored.",
                "line": 69
              }
            ],
            "match": {
              "location": "features/step_definitions/snapshots.rb:172"
            },
            "result": {
              "status": "passed",
              "duration": 7435934877
            }
          },
          {
            "keyword": "And ",
            "name": "I have started Tails from DVD without network and logged in",
            "line": 71,
            "match": {
              "location": "features/step_definitions/snapshots.rb:172"
            },
            "result": {
              "status": "passed",
              "duration": 7325876549
            }
          },
          {
            "keyword": "And ",
            "name": "I clone USB drive \"__internal\" to a temporary USB drive \"install\"",
            "line": 72,
            "match": {
              "location": "features/step_definitions/usb.rb:113"
            },
            "result": {
              "status": "passed",
              "duration": 811333050
            }
          },
          {
            "keyword": "And ",
            "name": "I plug USB drive \"install\"",
            "line": 73,
            "match": {
              "location": "features/step_definitions/common_steps.rb:123"
            },
            "result": {
              "status": "passed",
              "duration": 2388803938
            }
          },
          {
            "keyword": "When ",
            "name": "I reinstall Tails to USB drive \"install\" by cloning",
            "line": 75,
            "comments": [
              {
                "value": "# This second part is done with Tails Installer, that's what this scenario is about",
                "line": 74
              }
            ],
            "match": {
              "location": "features/step_definitions/usb.rb:186"
            },
            "result": {
              "status": "passed",
              "duration": 99050100316
            }
          },
          {
            "keyword": "Then ",
            "name": "the running Tails is installed on USB drive \"install\"",
            "line": 76,
            "match": {
              "location": "features/step_definitions/usb.rb:601"
            },
            "result": {
              "status": "passed",
              "duration": 13587754993
            }
          },
          {
            "keyword": "And ",
            "name": "there is a random seed on USB drive \"install\"",
            "line": 77,
            "match": {
              "location": "features/step_definitions/random_seed.rb:31"
            },
            "result": {
              "status": "passed",
              "duration": 2792706195
            }
          },
          {
            "keyword": "And ",
            "name": "there is no persistence partition on USB drive \"install\"",
            "line": 78,
            "match": {
              "location": "features/step_definitions/usb.rb:606"
            },
            "result": {
              "status": "passed",
              "duration": 53677105
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:335"
            },
            "result": {
              "status": "passed",
              "duration": 1093387366
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:104"
            },
            "result": {
              "status": "passed",
              "duration": 127528224
            }
          }
        ]
      },
      {
        "id": "installing-tails-to-a-usb-drive;booting-tails-from-a-usb-drive-in-uefi-mode",
        "keyword": "Scenario",
        "name": "Booting Tails from a USB drive in UEFI mode",
        "description": "",
        "line": 81,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          },
          {
            "name": "@uefi",
            "line": 80
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:270"
            },
            "result": {
              "status": "passed",
              "duration": 16961
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:277"
            },
            "result": {
              "status": "passed",
              "duration": 2610742
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails without network from a USB drive without a persistent partition and stopped at Tails Greeter's login screen",
            "line": 82,
            "match": {
              "location": "features/step_definitions/snapshots.rb:172"
            },
            "result": {
              "status": "passed",
              "duration": 8831091482
            }
          },
          {
            "keyword": "And ",
            "name": "I power off the computer",
            "line": 83,
            "match": {
              "location": "features/step_definitions/common_steps.rb:273"
            },
            "result": {
              "status": "passed",
              "duration": 257033229
            }
          },
          {
            "keyword": "And ",
            "name": "the computer is set to boot in UEFI mode",
            "line": 84,
            "match": {
              "location": "features/step_definitions/usb.rb:124"
            },
            "result": {
              "status": "passed",
              "duration": 12949437
            }
          },
          {
            "keyword": "When ",
            "name": "I start Tails from USB drive \"__internal\" with network unplugged and I login",
            "line": 85,
            "match": {
              "location": "features/step_definitions/common_steps.rb:232"
            },
            "result": {
              "status": "passed",
              "duration": 66155140750
            }
          },
          {
            "keyword": "Then ",
            "name": "Tails is running from USB drive \"__internal\"",
            "line": 86,
            "match": {
              "location": "features/step_definitions/usb.rb:935"
            },
            "result": {
              "status": "passed",
              "duration": 280687548
            }
          },
          {
            "keyword": "And ",
            "name": "the boot device has safe access rights",
            "line": 87,
            "match": {
              "location": "features/step_definitions/usb.rb:949"
            },
            "result": {
              "status": "passed",
              "duration": 3345608249
            }
          },
          {
            "keyword": "And ",
            "name": "Tails has started in UEFI mode",
            "line": 88,
            "match": {
              "location": "features/step_definitions/usb.rb:1213"
            },
            "result": {
              "status": "passed",
              "duration": 38476978
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:335"
            },
            "result": {
              "status": "passed",
              "duration": 1085970957
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:104"
            },
            "result": {
              "status": "passed",
              "duration": 5885183
            }
          }
        ]
      },
      {
        "id": "installing-tails-to-a-usb-drive;installing-tails-with-gnome-disks-from-a-usb-image",
        "keyword": "Scenario",
        "name": "Installing Tails with GNOME Disks from a USB image",
        "description": "",
        "line": 90,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:270"
            },
            "result": {
              "status": "passed",
              "duration": 14267
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:277"
            },
            "result": {
              "status": "passed",
              "duration": 1588609
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails from DVD without network and logged in",
            "line": 91,
            "match": {
              "location": "features/step_definitions/snapshots.rb:172"
            },
            "result": {
              "status": "passed",
              "duration": 6880507521
            }
          },
          {
            "keyword": "And ",
            "name": "I plug and mount a USB drive containing a Tails USB image",
            "line": 92,
            "match": {
              "location": "features/step_definitions/usb.rb:273"
            },
            "result": {
              "status": "passed",
              "duration": 22062362281
            }
          },
          {
            "keyword": "And ",
            "name": "I create a 7200 MiB disk named \"usbimage\"",
            "line": 93,
            "match": {
              "location": "features/step_definitions/common_steps.rb:111"
            },
            "result": {
              "status": "passed",
              "duration": 12233248
            }
          },
          {
            "keyword": "And ",
            "name": "I plug USB drive \"usbimage\"",
            "line": 94,
            "match": {
              "location": "features/step_definitions/common_steps.rb:123"
            },
            "result": {
              "status": "passed",
              "duration": 2240251826
            }
          },
          {
            "keyword": "And ",
            "name": "I install a Tails USB image to the 7200 MiB disk with GNOME Disks",
            "line": 95,
            "match": {
              "location": "features/step_definitions/usb.rb:1552"
            },
            "result": {
              "status": "passed",
              "duration": 21960439603
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:335"
            },
            "result": {
              "status": "passed",
              "duration": 1126614855
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:104"
            },
            "result": {
              "status": "passed",
              "duration": 109147455
            }
          }
        ]
      },
      {
        "id": "installing-tails-to-a-usb-drive;the-system-partition-is-updated-when-booting-from-a-usb-drive-where-a-tails-usb-image-was-copied",
        "keyword": "Scenario",
        "name": "The system partition is updated when booting from a USB drive where a Tails USB image was copied",
        "description": "",
        "line": 98,
        "type": "scenario",
        "comments": [
          {
            "value": "# Depends on scenario: Installing Tails with GNOME Disks from a USB image",
            "line": 97
          }
        ],
        "tags": [
          {
            "name": "@product",
            "line": 1
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:270"
            },
            "result": {
              "status": "passed",
              "duration": 16410
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:277"
            },
            "result": {
              "status": "passed",
              "duration": 2085967
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "a computer",
            "line": 99,
            "match": {
              "location": "features/step_definitions/common_steps.rb:98"
            },
            "result": {
              "status": "passed",
              "duration": 56135315
            }
          },
          {
            "keyword": "And ",
            "name": "I start Tails from USB drive \"usbimage\" with network unplugged and I login",
            "line": 100,
            "match": {
              "location": "features/step_definitions/common_steps.rb:232"
            },
            "result": {
              "status": "passed",
              "duration": 64460453525
            }
          },
          {
            "keyword": "Then ",
            "name": "Tails is running from USB drive \"usbimage\"",
            "line": 101,
            "match": {
              "location": "features/step_definitions/usb.rb:935"
            },
            "result": {
              "status": "passed",
              "duration": 233170671
            }
          },
          {
            "keyword": "And ",
            "name": "the label of the system partition on \"usbimage\" is \"Tails\"",
            "line": 102,
            "match": {
              "location": "features/step_definitions/usb.rb:1453"
            },
            "result": {
              "status": "passed",
              "duration": 205240606
            }
          },
          {
            "keyword": "And ",
            "name": "the system partition on \"usbimage\" is an EFI system partition",
            "line": 103,
            "match": {
              "location": "features/step_definitions/usb.rb:1461"
            },
            "result": {
              "status": "passed",
              "duration": 163646863
            }
          },
          {
            "keyword": "And ",
            "name": "the FAT filesystem on the system partition on \"usbimage\" is at least 4000M large",
            "line": 104,
            "match": {
              "location": "features/step_definitions/usb.rb:1470"
            },
            "result": {
              "status": "passed",
              "duration": 85807607
            }
          },
          {
            "keyword": "And ",
            "name": "the UUID of the FAT filesystem on the system partition on \"usbimage\" was randomized",
            "line": 105,
            "match": {
              "location": "features/step_definitions/usb.rb:1498"
            },
            "result": {
              "status": "passed",
              "duration": 81249309
            }
          },
          {
            "keyword": "And ",
            "name": "the label of the FAT filesystem on the system partition on \"usbimage\" is \"TAILS\"",
            "line": 106,
            "match": {
              "location": "features/step_definitions/usb.rb:1515"
            },
            "result": {
              "status": "passed",
              "duration": 59939298
            }
          },
          {
            "keyword": "And ",
            "name": "the system partition on \"usbimage\" has the expected flags",
            "line": 107,
            "match": {
              "location": "features/step_definitions/usb.rb:1532"
            },
            "result": {
              "status": "passed",
              "duration": 65924358
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:335"
            },
            "result": {
              "status": "passed",
              "duration": 909807458
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:104"
            },
            "result": {
              "status": "passed",
              "duration": 23520318
            }
          }
        ]
      }
    ]
  },
  {
    "uri": "features/additional_software_packages.feature",
    "id": "additional-software",
    "keyword": "Feature",
    "name": "Additional software",
    "description": "  As a Tails user\n  I may want to install software not shipped in Tails\n  And have them installed automatically when I enable persistence in the Greeter",
    "line": 3,
    "tags": [
      {
        "name": "@product",
        "line": 1
      },
      {
        "name": "@check_tor_leaks",
        "line": 1
      },
      {
        "name": "@slow",
        "line": 1
      }
    ],
    "elements": [
      {
        "id": "additional-software;i-am-warned-i-can-not-use-additional-software-when-i-start-tails-from-a-dvd-and-install-a-package",
        "keyword": "Scenario",
        "name": "I am warned I can not use Additional Software when I start Tails from a DVD and install a package",
        "description": "",
        "line": 14,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          },
          {
            "name": "@check_tor_leaks",
            "line": 1
          },
          {
            "name": "@slow",
            "line": 1
          },
          {
            "name": "@not_release_blocker",
            "line": 13
          },
          {
            "name": "@fragile",
            "line": 13
          },
          {
            "name": "@doc",
            "line": 13
          }
        ],
        "comments": [
          {
            "value": "# An issue with this feature is that scenarios depend on each",
            "line": 8
          },
          {
            "value": "# other. When editing this feature, make sure you understand these",
            "line": 9
          },
          {
            "value": "# dependencies (which are documented below).",
            "line": 10
          },
          {
            "value": "#18852",
            "line": 12
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:270"
            },
            "result": {
              "status": "passed",
              "duration": 19276
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:277"
            },
            "result": {
              "status": "passed",
              "duration": 1743909
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:523"
            },
            "result": {
              "status": "passed",
              "duration": 2155792
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails from DVD and logged in with an administration password and the network is connected",
            "line": 15,
            "match": {
              "location": "features/step_definitions/snapshots.rb:172"
            },
            "result": {
              "status": "passed",
              "duration": 81309655988
            }
          },
          {
            "keyword": "And ",
            "name": "I update the APT lists using apt",
            "line": 16,
            "match": {
              "location": "features/step_definitions/apt.rb:54"
            },
            "result": {
              "status": "passed",
              "duration": 6177989086
            }
          },
          {
            "keyword": "When ",
            "name": "I install \"popularity-contest\" using apt",
            "line": 17,
            "match": {
              "location": "features/step_definitions/apt.rb:76"
            },
            "result": {
              "status": "passed",
              "duration": 6371105648
            }
          },
          {
            "keyword": "Then ",
            "name": "I am notified I can not use Additional Software for \"popularity-contest\"",
            "line": 18,
            "match": {
              "location": "features/step_definitions/additional_software_packages.rb:15"
            },
            "result": {
              "status": "passed",
              "duration": 2459378812
            }
          },
          {
            "keyword": "And ",
            "name": "I can open the Additional Software documentation from the notification",
            "line": 19,
            "match": {
              "location": "features/step_definitions/additional_software_packages.rb:134"
            },
            "result": {
              "status": "passed",
              "duration": 11571062729
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:531"
            },
            "result": {
              "status": "passed",
              "duration": 8672448886
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:335"
            },
            "result": {
              "status": "passed",
              "duration": 1286908858
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:104"
            },
            "result": {
              "status": "passed",
              "duration": 2669124
            }
          }
        ]
      },
      {
        "id": "additional-software;i-set-up-additional-software-when-installing-a-package-without-persistent-partition-and-the-package-is-installed-next-time-i-start-tails",
        "keyword": "Scenario",
        "name": "I set up Additional Software when installing a package without persistent partition and the package is installed next time I start Tails",
        "description": "",
        "line": 27,
        "type": "scenario",
        "comments": [
          {
            "value": "# Here we install the popularity-contest package to test if debconf does not prevent",
            "line": 21
          },
          {
            "value": "# Additional Software from automatically installing packages.",
            "line": 22
          },
          {
            "value": "# This scenario also sets up the \"__internal\" drive that the following",
            "line": 23
          },
          {
            "value": "# scenarios will reuse.",
            "line": 24
          },
          {
            "value": "# Note: the \"__internal\" drive will keep its state across scenarios",
            "line": 25
          },
          {
            "value": "# and features until one of its snapshots is restored.",
            "line": 26
          }
        ],
        "tags": [
          {
            "name": "@product",
            "line": 1
          },
          {
            "name": "@check_tor_leaks",
            "line": 1
          },
          {
            "name": "@slow",
            "line": 1
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:270"
            },
            "result": {
              "status": "passed",
              "duration": 10078
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:277"
            },
            "result": {
              "status": "passed",
              "duration": 5178347
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:523"
            },
            "result": {
              "status": "passed",
              "duration": 5298205
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I start Tails from a freshly installed USB drive with an administration password and the network is plugged and I login",
            "line": 28,
            "match": {
              "location": "features/step_definitions/common_steps.rb:261"
            },
            "result": {
              "status": "passed",
              "duration": 50916449854
            }
          },
          {
            "keyword": "And ",
            "name": "I update the APT lists using apt",
            "line": 29,
            "match": {
              "location": "features/step_definitions/apt.rb:54"
            },
            "result": {
              "status": "passed",
              "duration": 6031002475
            }
          },
          {
            "keyword": "And ",
            "name": "I install \"popularity-contest\" using apt",
            "line": 30,
            "match": {
              "location": "features/step_definitions/apt.rb:76"
            },
            "result": {
              "status": "passed",
              "duration": 6269997400
            }
          },
          {
            "keyword": "Then ",
            "name": "I am proposed to add the \"popularity-contest\" package to my Additional Software",
            "line": 31,
            "match": {
              "location": "features/step_definitions/additional_software_packages.rb:25"
            },
            "result": {
              "status": "passed",
              "duration": 3430941496
            }
          },
          {
            "keyword": "When ",
            "name": "I create a persistent storage and activate the Additional Software feature",
            "line": 32,
            "match": {
              "location": "features/step_definitions/additional_software_packages.rb:38"
            },
            "result": {
              "status": "passed",
              "duration": 19142135001
            }
          },
          {
            "keyword": "Then ",
            "name": "Additional Software is correctly configured for package \"popularity-contest\"",
            "line": 33,
            "match": {
              "location": "features/step_definitions/additional_software_packages.rb:53"
            },
            "result": {
              "status": "passed",
              "duration": 737825922
            }
          },
          {
            "keyword": "When ",
            "name": "I shutdown Tails and wait for the computer to power off",
            "line": 34,
            "match": {
              "location": "features/step_definitions/common_steps.rb:904"
            },
            "result": {
              "status": "passed",
              "duration": 8241848053
            }
          },
          {
            "keyword": "And ",
            "name": "I start Tails from USB drive \"__internal\" with network unplugged",
            "line": 35,
            "match": {
              "location": "features/step_definitions/common_steps.rb:232"
            },
            "result": {
              "status": "passed",
              "duration": 40881005791
            }
          },
          {
            "keyword": "And ",
            "name": "I enable persistence",
            "line": 36,
            "match": {
              "location": "features/step_definitions/usb.rb:721"
            },
            "result": {
              "status": "passed",
              "duration": 17061142470
            }
          },
          {
            "keyword": "And ",
            "name": "I log in to a new session",
            "line": 37,
            "match": {
              "location": "features/step_definitions/common_steps.rb:514"
            },
            "result": {
              "status": "passed",
              "duration": 11704789171
            }
          },
          {
            "keyword": "And ",
            "name": "the Additional Software installation service has started",
            "line": 38,
            "match": {
              "location": "features/step_definitions/additional_software_packages.rb:1"
            },
            "result": {
              "status": "passed",
              "duration": 10159951192
            }
          },
          {
            "keyword": "Then ",
            "name": "I am notified that the installation succeeded",
            "line": 39,
            "match": {
              "location": "features/step_definitions/additional_software_packages.rb:20"
            },
            "result": {
              "status": "passed",
              "duration": 1764896532
            }
          },
          {
            "keyword": "And ",
            "name": "Additional Software is correctly configured for package \"popularity-contest\"",
            "line": 40,
            "match": {
              "location": "features/step_definitions/additional_software_packages.rb:53"
            },
            "result": {
              "status": "passed",
              "duration": 649257814
            }
          },
          {
            "keyword": "And ",
            "name": "the package \"popularity-contest\" is installed after Additional Software has been installed",
            "line": 41,
            "match": {
              "location": "features/step_definitions/common_steps.rb:937"
            },
            "result": {
              "status": "passed",
              "duration": 124343931
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:531"
            },
            "result": {
              "status": "passed",
              "duration": 9002758423
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:335"
            },
            "result": {
              "status": "passed",
              "duration": 701532052
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:104"
            },
            "result": {
              "status": "passed",
              "duration": 10776614
            }
          }
        ]
      },
      {
        "id": "additional-software;the-additional-software-dpkg-hook-notices-when-persistence-is-locked-down-while-installing-a-package",
        "keyword": "Scenario",
        "name": "The Additional Software dpkg hook notices when persistence is locked down while installing a package",
        "description": "",
        "line": 44,
        "type": "scenario",
        "comments": [
          {
            "value": "# Depends on scenario: I set up Additional Software when installing a package without persistent partition and the package is installed next time I start Tails",
            "line": 43
          }
        ],
        "tags": [
          {
            "name": "@product",
            "line": 1
          },
          {
            "name": "@check_tor_leaks",
            "line": 1
          },
          {
            "name": "@slow",
            "line": 1
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:270"
            },
            "result": {
              "status": "passed",
              "duration": 21941
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:277"
            },
            "result": {
              "status": "passed",
              "duration": 3778815
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:523"
            },
            "result": {
              "status": "passed",
              "duration": 2693911
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "a computer",
            "line": 45,
            "match": {
              "location": "features/step_definitions/common_steps.rb:98"
            },
            "result": {
              "status": "passed",
              "duration": 70357472
            }
          },
          {
            "keyword": "And ",
            "name": "I start Tails from USB drive \"__internal\" and I login with an administration password",
            "line": 46,
            "match": {
              "location": "features/step_definitions/common_steps.rb:232"
            },
            "result": {
              "status": "passed",
              "duration": 73932249752
            }
          },
          {
            "keyword": "And ",
            "name": "I update the APT lists using apt",
            "line": 47,
            "match": {
              "location": "features/step_definitions/apt.rb:54"
            },
            "result": {
              "status": "passed",
              "duration": 5360595736
            }
          },
          {
            "keyword": "When ",
            "name": "I install \"ripgrep\" using apt",
            "line": 48,
            "match": {
              "location": "features/step_definitions/apt.rb:76"
            },
            "result": {
              "status": "passed",
              "duration": 6300793325
            }
          },
          {
            "keyword": "Then ",
            "name": "the Additional Software dpkg hook has been run for package \"ripgrep\" and notices the persistence is locked",
            "line": 49,
            "match": {
              "location": "features/step_definitions/additional_software_packages.rb:144"
            },
            "result": {
              "status": "passed",
              "duration": 2146409882
            }
          },
          {
            "keyword": "And ",
            "name": "the package \"ripgrep\" is installed",
            "line": 50,
            "match": {
              "location": "features/step_definitions/common_steps.rb:937"
            },
            "result": {
              "status": "passed",
              "duration": 59032407
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:531"
            },
            "result": {
              "status": "passed",
              "duration": 9835507767
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:335"
            },
            "result": {
              "status": "passed",
              "duration": 653734176
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:104"
            },
            "result": {
              "status": "passed",
              "duration": 12823341
            }
          }
        ]
      },
      {
        "id": "additional-software;my-additional-software-list-is-configurable-through-a-gui-or-through-notifications-when-i-install-or-remove-packages-with-apt-or-synaptic",
        "keyword": "Scenario",
        "name": "My Additional Software list is configurable through a GUI or through notifications when I install or remove packages with APT or Synaptic",
        "description": "",
        "line": 53,
        "type": "scenario",
        "comments": [
          {
            "value": "# Depends on scenario: I set up Additional Software when installing a package without persistent partition and the package is installed next time I start Tails",
            "line": 52
          }
        ],
        "tags": [
          {
            "name": "@product",
            "line": 1
          },
          {
            "name": "@check_tor_leaks",
            "line": 1
          },
          {
            "name": "@slow",
            "line": 1
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:270"
            },
            "result": {
              "status": "passed",
              "duration": 21781
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:277"
            },
            "result": {
              "status": "passed",
              "duration": 2921136
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:523"
            },
            "result": {
              "status": "passed",
              "duration": 5398290
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "a computer",
            "line": 54,
            "match": {
              "location": "features/step_definitions/common_steps.rb:98"
            },
            "result": {
              "status": "passed",
              "duration": 58872498
            }
          },
          {
            "keyword": "And ",
            "name": "I start Tails from USB drive \"__internal\" and I login with persistence enabled and an administration password",
            "line": 55,
            "match": {
              "location": "features/step_definitions/common_steps.rb:232"
            },
            "result": {
              "status": "passed",
              "duration": 103861707172
            }
          },
          {
            "keyword": "When ",
            "name": "I uninstall \"popularity-contest\" using apt",
            "line": 56,
            "match": {
              "location": "features/step_definitions/apt.rb:101"
            },
            "result": {
              "status": "passed",
              "duration": 3163018228
            }
          },
          {
            "keyword": "And ",
            "name": "I accept removing \"popularity-contest\" from Additional Software",
            "line": 57,
            "match": {
              "location": "features/step_definitions/additional_software_packages.rb:79"
            },
            "result": {
              "status": "passed",
              "duration": 2422632926
            }
          },
          {
            "keyword": "Then ",
            "name": "\"popularity-contest\" is not in the list of Additional Software",
            "line": 58,
            "match": {
              "location": "features/step_definitions/additional_software_packages.rb:71"
            },
            "result": {
              "status": "passed",
              "duration": 601161197
            }
          },
          {
            "keyword": "When ",
            "name": "I start Synaptic",
            "line": 59,
            "match": {
              "location": "features/step_definitions/apt.rb:136"
            },
            "result": {
              "status": "passed",
              "duration": 12741012657
            }
          },
          {
            "keyword": "And ",
            "name": "I update the APT lists using Synaptic",
            "line": 60,
            "match": {
              "location": "features/step_definitions/apt.rb:142"
            },
            "result": {
              "status": "passed",
              "duration": 21566690991
            }
          },
          {
            "keyword": "And ",
            "name": "I install \"cowsay\" using Synaptic",
            "line": 61,
            "match": {
              "location": "features/step_definitions/apt.rb:164"
            },
            "result": {
              "status": "passed",
              "duration": 8733301157
            }
          },
          {
            "keyword": "And ",
            "name": "I accept adding \"cowsay\" to Additional Software",
            "line": 62,
            "match": {
              "location": "features/step_definitions/additional_software_packages.rb:79"
            },
            "result": {
              "status": "passed",
              "duration": 2532340496
            }
          },
          {
            "keyword": "Then ",
            "name": "Additional Software is correctly configured for package \"cowsay\"",
            "line": 63,
            "match": {
              "location": "features/step_definitions/additional_software_packages.rb:53"
            },
            "result": {
              "status": "passed",
              "duration": 725767970
            }
          },
          {
            "keyword": "When ",
            "name": "I uninstall \"cowsay\" using apt",
            "line": 64,
            "match": {
              "location": "features/step_definitions/apt.rb:101"
            },
            "result": {
              "status": "passed",
              "duration": 3186987694
            }
          },
          {
            "keyword": "And ",
            "name": "I refuse removing \"cowsay\" from Additional Software",
            "line": 65,
            "match": {
              "location": "features/step_definitions/additional_software_packages.rb:79"
            },
            "result": {
              "status": "passed",
              "duration": 2428085743
            }
          },
          {
            "keyword": "Then ",
            "name": "Additional Software is correctly configured for package \"cowsay\"",
            "line": 66,
            "match": {
              "location": "features/step_definitions/additional_software_packages.rb:53"
            },
            "result": {
              "status": "passed",
              "duration": 632797402
            }
          },
          {
            "keyword": "When ",
            "name": "I start \"Additional Software\" via GNOME Activities Overview",
            "line": 67,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1165"
            },
            "result": {
              "status": "passed",
              "duration": 9275985973
            }
          },
          {
            "keyword": "And ",
            "name": "I remove \"cowsay\" from the list of Additional Software using Additional Software GUI",
            "line": 68,
            "match": {
              "location": "features/step_definitions/additional_software_packages.rb:102"
            },
            "result": {
              "status": "passed",
              "duration": 3491948986
            }
          },
          {
            "keyword": "Then ",
            "name": "\"cowsay\" is not in the list of Additional Software",
            "line": 69,
            "match": {
              "location": "features/step_definitions/additional_software_packages.rb:71"
            },
            "result": {
              "status": "passed",
              "duration": 852763453
            }
          },
          {
            "keyword": "When ",
            "name": "I install \"cowsay\" using apt",
            "line": 70,
            "match": {
              "location": "features/step_definitions/apt.rb:76"
            },
            "result": {
              "status": "passed",
              "duration": 3262082131
            }
          },
          {
            "keyword": "And ",
            "name": "I refuse adding \"cowsay\" to Additional Software",
            "line": 71,
            "match": {
              "location": "features/step_definitions/additional_software_packages.rb:79"
            },
            "result": {
              "status": "passed",
              "duration": 1534789567
            }
          },
          {
            "keyword": "Then ",
            "name": "\"cowsay\" is not in the list of Additional Software",
            "line": 72,
            "match": {
              "location": "features/step_definitions/additional_software_packages.rb:71"
            },
            "result": {
              "status": "passed",
              "duration": 656460285
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:531"
            },
            "result": {
              "status": "passed",
              "duration": 626950798
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:335"
            },
            "result": {
              "status": "passed",
              "duration": 1057683680
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:104"
            },
            "result": {
              "status": "passed",
              "duration": 7565835
            }
          }
        ]
      },
      {
        "id": "additional-software;recovering-in-offline-mode-after-additional-software-previously-failed-to-upgrade-and-then-succeed-to-upgrade-when-online",
        "keyword": "Scenario",
        "name": "Recovering in offline mode after Additional Software previously failed to upgrade and then succeed to upgrade when online",
        "description": "",
        "line": 77,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          },
          {
            "name": "@check_tor_leaks",
            "line": 1
          },
          {
            "name": "@slow",
            "line": 1
          },
          {
            "name": "@not_release_blocker",
            "line": 76
          }
        ],
        "comments": [
          {
            "value": "# Depends on scenario: My Additional Software list is configurable through a GUI or through notifications when I install or remove packages with APT or Synaptic",
            "line": 74
          },
          {
            "value": "# See https://tails.net/blueprint/additional_software_packages/offline_mode/#incomplete-online-upgrade for high level logic",
            "line": 75
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:270"
            },
            "result": {
              "status": "passed",
              "duration": 20298
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:277"
            },
            "result": {
              "status": "passed",
              "duration": 3127795
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:523"
            },
            "result": {
              "status": "passed",
              "duration": 2067637
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "a computer",
            "line": 78,
            "match": {
              "location": "features/step_definitions/common_steps.rb:98"
            },
            "result": {
              "status": "passed",
              "duration": 62176603
            }
          },
          {
            "keyword": "And ",
            "name": "I start Tails from USB drive \"__internal\" and I login with persistence enabled and an administration password",
            "line": 79,
            "match": {
              "location": "features/step_definitions/common_steps.rb:232"
            },
            "result": {
              "status": "passed",
              "duration": 80781110478
            }
          },
          {
            "keyword": "And ",
            "name": "I configure APT to prefer an old version of cowsay",
            "line": 80,
            "match": {
              "location": "features/step_definitions/apt.rb:106"
            },
            "result": {
              "status": "passed",
              "duration": 5392149
            }
          },
          {
            "keyword": "When ",
            "name": "I install an old version \"3.03+dfsg2-1\" of the cowsay package using apt",
            "line": 81,
            "match": {
              "location": "features/step_definitions/apt.rb:112"
            },
            "result": {
              "status": "passed",
              "duration": 9066818793
            }
          },
          {
            "keyword": "And ",
            "name": "I accept adding \"cowsay\" to Additional Software",
            "line": 82,
            "match": {
              "location": "features/step_definitions/additional_software_packages.rb:79"
            },
            "result": {
              "status": "passed",
              "duration": 5061794029
            }
          },
          {
            "keyword": "And ",
            "name": "Additional Software is correctly configured for package \"cowsay\"",
            "line": 83,
            "match": {
              "location": "features/step_definitions/additional_software_packages.rb:53"
            },
            "result": {
              "status": "passed",
              "duration": 776194396
            }
          },
          {
            "keyword": "And ",
            "name": "I shutdown Tails and wait for the computer to power off",
            "line": 84,
            "match": {
              "location": "features/step_definitions/common_steps.rb:904"
            },
            "result": {
              "status": "passed",
              "duration": 8017802732
            }
          },
          {
            "keyword": "And ",
            "name": "I start Tails from USB drive \"__internal\" with network unplugged",
            "line": 85,
            "match": {
              "location": "features/step_definitions/common_steps.rb:232"
            },
            "result": {
              "status": "passed",
              "duration": 38877711842
            }
          },
          {
            "keyword": "And ",
            "name": "I enable persistence",
            "line": 86,
            "match": {
              "location": "features/step_definitions/usb.rb:721"
            },
            "result": {
              "status": "passed",
              "duration": 7020550556
            }
          },
          {
            "keyword": "And ",
            "name": "I configure APT to prefer an old version of cowsay",
            "line": 89,
            "comments": [
              {
                "value": "# We need to add back this custom APT source for the Additional Software",
                "line": 87
              },
              {
                "value": "# install step, as it was not saved in persistence",
                "line": 88
              }
            ],
            "match": {
              "location": "features/step_definitions/apt.rb:106"
            },
            "result": {
              "status": "passed",
              "duration": 24499885
            }
          },
          {
            "keyword": "And ",
            "name": "I disable the tails-virt-notify-user.service user unit",
            "line": 92,
            "comments": [
              {
                "value": "# Prevent the \"Warning: virtual machine detected!\" notification from racing",
                "line": 90
              },
              {
                "value": "# with the one we'll be interacting with below.",
                "line": 91
              }
            ],
            "match": {
              "location": "features/step_definitions/common_steps.rb:1663"
            },
            "result": {
              "status": "passed",
              "duration": 113664417
            }
          },
          {
            "keyword": "And ",
            "name": "I log in to a new session",
            "line": 93,
            "match": {
              "location": "features/step_definitions/common_steps.rb:514"
            },
            "result": {
              "status": "passed",
              "duration": 12049373757
            }
          },
          {
            "keyword": "And ",
            "name": "the installed version of package \"cowsay\" is \"3.03+dfsg2-1\" after Additional Software has been installed",
            "line": 94,
            "match": {
              "location": "features/step_definitions/apt.rb:124"
            },
            "result": {
              "status": "passed",
              "duration": 10214829157
            }
          },
          {
            "keyword": "And ",
            "name": "I revert the APT tweaks that made it prefer an old version of cowsay",
            "line": 95,
            "match": {
              "location": "features/step_definitions/apt.rb:118"
            },
            "result": {
              "status": "passed",
              "duration": 62371673
            }
          },
          {
            "keyword": "And ",
            "name": "I prepare the Additional Software upgrade process to fail",
            "line": 98,
            "comments": [
              {
                "value": "# We remove the newest package after it has been downloaded and before",
                "line": 96
              },
              {
                "value": "# it is installed, so that the upgrade process fails",
                "line": 97
              }
            ],
            "match": {
              "location": "features/step_definitions/additional_software_packages.rb:115"
            },
            "result": {
              "status": "passed",
              "duration": 81176760
            }
          },
          {
            "keyword": "And ",
            "name": "the network is plugged",
            "line": 99,
            "match": {
              "location": "features/step_definitions/common_steps.rb:137"
            },
            "result": {
              "status": "passed",
              "duration": 53649348
            }
          },
          {
            "keyword": "And ",
            "name": "Tor is ready",
            "line": 100,
            "match": {
              "location": "features/step_definitions/common_steps.rb:650"
            },
            "result": {
              "status": "passed",
              "duration": 13059896598
            }
          },
          {
            "keyword": "And ",
            "name": "available upgrades have been checked",
            "line": 101,
            "match": {
              "location": "features/step_definitions/common_steps.rb:758"
            },
            "result": {
              "status": "passed",
              "duration": 1099606606
            }
          },
          {
            "keyword": "And ",
            "name": "I see the \"The upgrade of your additional software failed\" notification after at most 300 seconds",
            "line": 102,
            "match": {
              "location": "features/step_definitions/common_steps.rb:629"
            },
            "result": {
              "status": "passed",
              "duration": 1527417483
            }
          },
          {
            "keyword": "And ",
            "name": "I can open the Additional Software configuration window from the notification",
            "line": 103,
            "match": {
              "location": "features/step_definitions/additional_software_packages.rb:159"
            },
            "result": {
              "status": "passed",
              "duration": 2568017339
            }
          },
          {
            "keyword": "And ",
            "name": "I shutdown Tails and wait for the computer to power off",
            "line": 104,
            "match": {
              "location": "features/step_definitions/common_steps.rb:904"
            },
            "result": {
              "status": "passed",
              "duration": 17843818950
            }
          },
          {
            "keyword": "And ",
            "name": "I start Tails from USB drive \"__internal\" with network unplugged",
            "line": 105,
            "match": {
              "location": "features/step_definitions/common_steps.rb:232"
            },
            "result": {
              "status": "passed",
              "duration": 39664136390
            }
          },
          {
            "keyword": "And ",
            "name": "I enable persistence",
            "line": 106,
            "match": {
              "location": "features/step_definitions/usb.rb:721"
            },
            "result": {
              "status": "passed",
              "duration": 7455048898
            }
          },
          {
            "keyword": "And ",
            "name": "I configure APT to prefer an old version of cowsay",
            "line": 109,
            "comments": [
              {
                "value": "# We need to add back this custom APT source for the Additional Software",
                "line": 107
              },
              {
                "value": "# install step, as it was not saved in persistence",
                "line": 108
              }
            ],
            "match": {
              "location": "features/step_definitions/apt.rb:106"
            },
            "result": {
              "status": "passed",
              "duration": 4897131
            }
          },
          {
            "keyword": "And ",
            "name": "I log in to a new session",
            "line": 110,
            "match": {
              "location": "features/step_definitions/common_steps.rb:514"
            },
            "result": {
              "status": "passed",
              "duration": 10898824848
            }
          },
          {
            "keyword": "And ",
            "name": "the installed version of package \"cowsay\" is \"3.03+dfsg2-1\" after Additional Software has been installed",
            "line": 111,
            "match": {
              "location": "features/step_definitions/apt.rb:124"
            },
            "result": {
              "status": "passed",
              "duration": 10240054595
            }
          },
          {
            "keyword": "And ",
            "name": "I revert the APT tweaks that made it prefer an old version of cowsay",
            "line": 112,
            "match": {
              "location": "features/step_definitions/apt.rb:118"
            },
            "result": {
              "status": "passed",
              "duration": 86015662
            }
          },
          {
            "keyword": "And ",
            "name": "the network is plugged",
            "line": 113,
            "match": {
              "location": "features/step_definitions/common_steps.rb:137"
            },
            "result": {
              "status": "passed",
              "duration": 21577666
            }
          },
          {
            "keyword": "And ",
            "name": "Tor is ready",
            "line": 114,
            "match": {
              "location": "features/step_definitions/common_steps.rb:650"
            },
            "result": {
              "status": "passed",
              "duration": 16362479835
            }
          },
          {
            "keyword": "Then ",
            "name": "the Additional Software upgrade service has started",
            "line": 115,
            "match": {
              "location": "features/step_definitions/additional_software_packages.rb:1"
            },
            "result": {
              "status": "passed",
              "duration": 47047066
            }
          },
          {
            "keyword": "And ",
            "name": "the installed version of package \"cowsay\" is newer than \"3.03+dfsg2-1\"",
            "line": 116,
            "match": {
              "location": "features/step_definitions/apt.rb:124"
            },
            "result": {
              "status": "passed",
              "duration": 64696676
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:531"
            },
            "result": {
              "status": "passed",
              "duration": 781440698
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:335"
            },
            "result": {
              "status": "passed",
              "duration": 954853091
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:104"
            },
            "result": {
              "status": "passed",
              "duration": 25084220
            }
          }
        ]
      },
      {
        "id": "additional-software;i-am-notified-when-additional-software-fails-to-install-a-package",
        "keyword": "Scenario",
        "name": "I am notified when Additional Software fails to install a package",
        "description": "",
        "line": 120,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          },
          {
            "name": "@check_tor_leaks",
            "line": 1
          },
          {
            "name": "@slow",
            "line": 1
          },
          {
            "name": "@not_release_blocker_inherited",
            "line": 119
          }
        ],
        "comments": [
          {
            "value": "# Depends on scenario: Recovering in offline mode after Additional Software previously failed to upgrade and then succeed to upgrade when online",
            "line": 118
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:270"
            },
            "result": {
              "status": "passed",
              "duration": 16110
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:277"
            },
            "result": {
              "status": "passed",
              "duration": 4073697
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:523"
            },
            "result": {
              "status": "passed",
              "duration": 4489407
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "a computer",
            "line": 121,
            "match": {
              "location": "features/step_definitions/common_steps.rb:98"
            },
            "result": {
              "status": "passed",
              "duration": 70190478
            }
          },
          {
            "keyword": "And ",
            "name": "I start Tails from USB drive \"__internal\" with network unplugged",
            "line": 122,
            "match": {
              "location": "features/step_definitions/common_steps.rb:232"
            },
            "result": {
              "status": "passed",
              "duration": 39239139108
            }
          },
          {
            "keyword": "And ",
            "name": "I enable persistence",
            "line": 123,
            "match": {
              "location": "features/step_definitions/usb.rb:721"
            },
            "result": {
              "status": "passed",
              "duration": 6807841379
            }
          },
          {
            "keyword": "And ",
            "name": "I remove the \"cowsay\" deb files from the APT cache",
            "line": 124,
            "match": {
              "location": "features/step_definitions/additional_software_packages.rb:128"
            },
            "result": {
              "status": "passed",
              "duration": 38449137
            }
          },
          {
            "keyword": "And ",
            "name": "I log in to a new session",
            "line": 125,
            "match": {
              "location": "features/step_definitions/common_steps.rb:514"
            },
            "result": {
              "status": "passed",
              "duration": 11191895748
            }
          },
          {
            "keyword": "Then ",
            "name": "I see the \"The installation of your additional software failed\" notification after at most 300 seconds",
            "line": 126,
            "match": {
              "location": "features/step_definitions/common_steps.rb:629"
            },
            "result": {
              "status": "passed",
              "duration": 1808474612
            }
          },
          {
            "keyword": "And ",
            "name": "I can open the Additional Software log file from the notification",
            "line": 127,
            "match": {
              "location": "features/step_definitions/additional_software_packages.rb:164"
            },
            "result": {
              "status": "passed",
              "duration": 6151066649
            }
          },
          {
            "keyword": "And ",
            "name": "the package \"cowsay\" is not installed",
            "line": 128,
            "match": {
              "location": "features/step_definitions/common_steps.rb:937"
            },
            "result": {
              "status": "passed",
              "duration": 112829929
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:531"
            },
            "result": {
              "status": "passed",
              "duration": 84253224
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:335"
            },
            "result": {
              "status": "passed",
              "duration": 788679662
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:104"
            },
            "result": {
              "status": "passed",
              "duration": 7644373
            }
          }
        ]
      }
    ]
  },
  {
    "uri": "features/usb_upgrade.feature",
    "id": "upgrading-an-old-tails-usb-installation",
    "keyword": "Feature",
    "name": "Upgrading an old Tails USB installation",
    "description": "  As a Tails user\n  If I have an old version of Tails installed on a USB device\n  and the USB device has a Persistent Storage\n  I want to upgrade Tails on it\n  and keep my Persistent Storage in the process",
    "line": 2,
    "tags": [
      {
        "name": "@product",
        "line": 1
      }
    ],
    "elements": [
      {
        "id": "upgrading-an-old-tails-usb-installation;installing-an-old-version-of-tails-to-a-pristine-usb-drive",
        "keyword": "Scenario",
        "name": "Installing an old version of Tails to a pristine USB drive",
        "description": "",
        "line": 20,
        "type": "scenario",
        "comments": [
          {
            "value": "# An issue with this feature is that scenarios depend on each",
            "line": 9
          },
          {
            "value": "# other. When editing this feature, make sure you understand these",
            "line": 10
          },
          {
            "value": "# dependencies (which are documented below).",
            "line": 11
          },
          {
            "value": "# Installation method inspired by the usb-install-tails-greeter",
            "line": 13
          },
          {
            "value": "# checkpoint, variations are using the old Tails USB image and a",
            "line": 14
          },
          {
            "value": "# different device name (\"old\" instead of \"__internal\")",
            "line": 15
          },
          {
            "value": "#",
            "line": 16
          },
          {
            "value": "# Boot the system to make sure resizing has happened, and to check",
            "line": 17
          },
          {
            "value": "# the system is sane (safe access rights, no persistence, etc.); end",
            "line": 18
          },
          {
            "value": "# with unplugging to get both a clean state and a stopped machine.",
            "line": 19
          }
        ],
        "tags": [
          {
            "name": "@product",
            "line": 1
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:270"
            },
            "result": {
              "status": "passed",
              "duration": 23945
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:277"
            },
            "result": {
              "status": "passed",
              "duration": 4079789
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "a computer",
            "line": 21,
            "match": {
              "location": "features/step_definitions/common_steps.rb:98"
            },
            "result": {
              "status": "passed",
              "duration": 67914450
            }
          },
          {
            "keyword": "And ",
            "name": "I create a 7200 MiB disk named \"old\"",
            "line": 22,
            "match": {
              "location": "features/step_definitions/common_steps.rb:111"
            },
            "result": {
              "status": "passed",
              "duration": 13948090
            }
          },
          {
            "keyword": "And ",
            "name": "I plug USB drive \"old\"",
            "line": 23,
            "match": {
              "location": "features/step_definitions/common_steps.rb:123"
            },
            "result": {
              "status": "passed",
              "duration": 1022624262
            }
          },
          {
            "keyword": "And ",
            "name": "I write an old version of the Tails USB image to disk \"old\"",
            "line": 24,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1766"
            },
            "result": {
              "status": "passed",
              "duration": 14336967054
            }
          },
          {
            "keyword": "When ",
            "name": "I start Tails from USB drive \"old\" with network unplugged",
            "line": 25,
            "match": {
              "location": "features/step_definitions/common_steps.rb:232"
            },
            "result": {
              "status": "passed",
              "duration": 53677396594
            }
          },
          {
            "keyword": "Then ",
            "name": "the boot device has safe access rights",
            "line": 26,
            "match": {
              "location": "features/step_definitions/usb.rb:949"
            },
            "result": {
              "status": "passed",
              "duration": 3205163964
            }
          },
          {
            "keyword": "And ",
            "name": "Tails is running from USB drive \"old\"",
            "line": 27,
            "match": {
              "location": "features/step_definitions/usb.rb:935"
            },
            "result": {
              "status": "passed",
              "duration": 294773564
            }
          },
          {
            "keyword": "And ",
            "name": "there is no persistence partition on USB drive \"old\"",
            "line": 28,
            "match": {
              "location": "features/step_definitions/usb.rb:606"
            },
            "result": {
              "status": "passed",
              "duration": 44456331
            }
          },
          {
            "keyword": "And ",
            "name": "process \"udev-watchdog\" is running",
            "line": 29,
            "match": {
              "location": "features/step_definitions/common_steps.rb:857"
            },
            "result": {
              "status": "passed",
              "duration": 75123818
            }
          },
          {
            "keyword": "And ",
            "name": "udev-watchdog is monitoring the correct device",
            "line": 30,
            "match": {
              "location": "features/step_definitions/erase_memory.rb:23"
            },
            "result": {
              "status": "passed",
              "duration": 221452114
            }
          },
          {
            "keyword": "And ",
            "name": "I unplug USB drive \"old\"",
            "line": 31,
            "match": {
              "location": "features/step_definitions/usb.rb:120"
            },
            "result": {
              "status": "passed",
              "duration": 150716575
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:335"
            },
            "result": {
              "status": "passed",
              "duration": 1412227160
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:104"
            },
            "result": {
              "status": "passed",
              "duration": 6192461
            }
          }
        ]
      },
      {
        "id": "upgrading-an-old-tails-usb-installation;creating-a-persistent-partition-with-the-old-tails-usb-installation",
        "keyword": "Scenario",
        "name": "Creating a persistent partition with the old Tails USB installation",
        "description": "",
        "line": 34,
        "type": "scenario",
        "comments": [
          {
            "value": "# Depends on scenario: Installing an old version of Tails to a pristine USB drive",
            "line": 33
          }
        ],
        "tags": [
          {
            "name": "@product",
            "line": 1
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:270"
            },
            "result": {
              "status": "passed",
              "duration": 16901
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:277"
            },
            "result": {
              "status": "passed",
              "duration": 2042098
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "a computer",
            "line": 35,
            "match": {
              "location": "features/step_definitions/common_steps.rb:98"
            },
            "result": {
              "status": "passed",
              "duration": 82205755
            }
          },
          {
            "keyword": "And ",
            "name": "I start Tails from USB drive \"old\" with network unplugged and I login",
            "line": 36,
            "match": {
              "location": "features/step_definitions/common_steps.rb:232"
            },
            "result": {
              "status": "passed",
              "duration": 57047142966
            }
          },
          {
            "keyword": "Then ",
            "name": "Tails is running from USB drive \"old\"",
            "line": 37,
            "match": {
              "location": "features/step_definitions/usb.rb:935"
            },
            "result": {
              "status": "passed",
              "duration": 263953440
            }
          },
          {
            "keyword": "And ",
            "name": "I create a persistent partition",
            "line": 38,
            "match": {
              "location": "features/step_definitions/usb.rb:341"
            },
            "result": {
              "status": "passed",
              "duration": 25125099823
            }
          },
          {
            "keyword": "And ",
            "name": "I take note of which tps features are available",
            "line": 39,
            "match": {
              "location": "features/step_definitions/usb.rb:1115"
            },
            "result": {
              "status": "passed",
              "duration": 550715647
            }
          },
          {
            "keyword": "Then ",
            "name": "a Tails persistence partition exists on USB drive \"old\"",
            "line": 40,
            "match": {
              "location": "features/step_definitions/usb.rb:648"
            },
            "result": {
              "status": "passed",
              "duration": 595080797
            }
          },
          {
            "keyword": "And ",
            "name": "I shutdown Tails and wait for the computer to power off",
            "line": 41,
            "match": {
              "location": "features/step_definitions/common_steps.rb:904"
            },
            "result": {
              "status": "passed",
              "duration": 8064676568
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:335"
            },
            "result": {
              "status": "passed",
              "duration": 594709790
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:104"
            },
            "result": {
              "status": "passed",
              "duration": 6767227
            }
          }
        ]
      },
      {
        "id": "upgrading-an-old-tails-usb-installation;writing-files-to-a-read/write-enabled-persistent-partition-with-the-old-tails-usb-installation",
        "keyword": "Scenario",
        "name": "Writing files to a read/write-enabled persistent partition with the old Tails USB installation",
        "description": "",
        "line": 44,
        "type": "scenario",
        "comments": [
          {
            "value": "# Depends on scenario: Creating a persistent partition with the old Tails USB installation",
            "line": 43
          }
        ],
        "tags": [
          {
            "name": "@product",
            "line": 1
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:270"
            },
            "result": {
              "status": "passed",
              "duration": 17853
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:277"
            },
            "result": {
              "status": "passed",
              "duration": 3230076
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "a computer",
            "line": 45,
            "match": {
              "location": "features/step_definitions/common_steps.rb:98"
            },
            "result": {
              "status": "passed",
              "duration": 63523318
            }
          },
          {
            "keyword": "And ",
            "name": "I start Tails from USB drive \"old\" with network unplugged and I login with persistence enabled",
            "line": 46,
            "match": {
              "location": "features/step_definitions/common_steps.rb:232"
            },
            "result": {
              "status": "passed",
              "duration": 67412787467
            }
          },
          {
            "keyword": "Then ",
            "name": "Tails is running from USB drive \"old\"",
            "line": 47,
            "match": {
              "location": "features/step_definitions/usb.rb:935"
            },
            "result": {
              "status": "passed",
              "duration": 300367870
            }
          },
          {
            "keyword": "And ",
            "name": "all tps features are active",
            "line": 48,
            "match": {
              "location": "features/step_definitions/usb.rb:778"
            },
            "result": {
              "status": "passed",
              "duration": 1473477622
            }
          },
          {
            "keyword": "When ",
            "name": "I write some files expected to persist",
            "line": 49,
            "match": {
              "location": "features/step_definitions/usb.rb:1075"
            },
            "result": {
              "status": "passed",
              "duration": 1329429305
            }
          },
          {
            "keyword": "And ",
            "name": "all persistent filesystems have safe access rights",
            "line": 51,
            "comments": [
              {
                "value": "# Verify that our baseline for the next scenarios is sane",
                "line": 50
              }
            ],
            "match": {
              "location": "features/step_definitions/usb.rb:992"
            },
            "result": {
              "status": "passed",
              "duration": 311333379
            }
          },
          {
            "keyword": "And ",
            "name": "all persistence configuration files have safe access rights",
            "line": 52,
            "match": {
              "location": "features/step_definitions/usb.rb:1009"
            },
            "result": {
              "status": "passed",
              "duration": 325589337
            }
          },
          {
            "keyword": "And ",
            "name": "all persistent directories from the old Tails version have safe access rights",
            "line": 53,
            "match": {
              "location": "features/step_definitions/usb.rb:1037"
            },
            "result": {
              "status": "passed",
              "duration": 1887230064
            }
          },
          {
            "keyword": "And ",
            "name": "I take note of which tps features are available",
            "line": 54,
            "match": {
              "location": "features/step_definitions/usb.rb:1115"
            },
            "result": {
              "status": "passed",
              "duration": 170089300
            }
          },
          {
            "keyword": "And ",
            "name": "I shutdown Tails and wait for the computer to power off",
            "line": 55,
            "match": {
              "location": "features/step_definitions/common_steps.rb:904"
            },
            "result": {
              "status": "passed",
              "duration": 4241158645
            }
          },
          {
            "keyword": "Then ",
            "name": "only the expected files are present on the persistence partition on USB drive \"old\"",
            "line": 57,
            "comments": [
              {
                "value": "# XXX: how does guestfs work vs snapshots? (tails/tails#10330)",
                "line": 56
              }
            ],
            "match": {
              "location": "features/step_definitions/usb.rb:1154"
            },
            "result": {
              "status": "passed",
              "duration": 12597999831
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:335"
            },
            "result": {
              "status": "passed",
              "duration": 360920891
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:104"
            },
            "result": {
              "status": "passed",
              "duration": 7525920
            }
          }
        ]
      },
      {
        "id": "upgrading-an-old-tails-usb-installation;upgrading-an-old-tails-usb-installation-from-another-tails-usb-drive",
        "keyword": "Scenario",
        "name": "Upgrading an old Tails USB installation from another Tails USB drive",
        "description": "",
        "line": 60,
        "type": "scenario",
        "comments": [
          {
            "value": "# Depends on scenario: Writing files to a read/write-enabled persistent partition with the old Tails USB installation",
            "line": 59
          }
        ],
        "tags": [
          {
            "name": "@product",
            "line": 1
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:270"
            },
            "result": {
              "status": "passed",
              "duration": 17603
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:277"
            },
            "result": {
              "status": "passed",
              "duration": 2512751
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails without network from a USB drive without a persistent partition and stopped at Tails Greeter's login screen",
            "line": 61,
            "match": {
              "location": "features/step_definitions/snapshots.rb:172"
            },
            "result": {
              "status": "passed",
              "duration": 7967026253
            }
          },
          {
            "keyword": "And ",
            "name": "I log in to a new session",
            "line": 62,
            "match": {
              "location": "features/step_definitions/common_steps.rb:514"
            },
            "result": {
              "status": "passed",
              "duration": 13602082823
            }
          },
          {
            "keyword": "And ",
            "name": "I clone USB drive \"old\" to a new USB drive \"to_upgrade\"",
            "line": 63,
            "match": {
              "location": "features/step_definitions/usb.rb:113"
            },
            "result": {
              "status": "passed",
              "duration": 776173795
            }
          },
          {
            "keyword": "And ",
            "name": "I plug USB drive \"to_upgrade\"",
            "line": 64,
            "match": {
              "location": "features/step_definitions/common_steps.rb:123"
            },
            "result": {
              "status": "passed",
              "duration": 2249867832
            }
          },
          {
            "keyword": "When ",
            "name": "I upgrade Tails to USB drive \"to_upgrade\" by cloning",
            "line": 65,
            "match": {
              "location": "features/step_definitions/usb.rb:186"
            },
            "result": {
              "status": "passed",
              "duration": 91982043516
            }
          },
          {
            "keyword": "Then ",
            "name": "the running Tails is installed on USB drive \"to_upgrade\"",
            "line": 66,
            "match": {
              "location": "features/step_definitions/usb.rb:601"
            },
            "result": {
              "status": "passed",
              "duration": 17990197267
            }
          },
          {
            "keyword": "And ",
            "name": "I unplug USB drive \"to_upgrade\"",
            "line": 67,
            "match": {
              "location": "features/step_definitions/usb.rb:120"
            },
            "result": {
              "status": "passed",
              "duration": 174887119
            }
          },
          {
            "keyword": "And ",
            "name": "I unplug USB drive \"__internal\"",
            "line": 68,
            "match": {
              "location": "features/step_definitions/usb.rb:120"
            },
            "result": {
              "status": "passed",
              "duration": 171448092
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:335"
            },
            "result": {
              "status": "passed",
              "duration": 2153868907
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:104"
            },
            "result": {
              "status": "passed",
              "duration": 23153
            }
          }
        ]
      },
      {
        "id": "upgrading-an-old-tails-usb-installation;booting-tails-from-a-usb-drive-upgraded-from-usb-with-persistence-enabled",
        "keyword": "Scenario",
        "name": "Booting Tails from a USB drive upgraded from USB with persistence enabled",
        "description": "",
        "line": 71,
        "type": "scenario",
        "comments": [
          {
            "value": "# Depends on scenario: Upgrading an old Tails USB installation from another Tails USB drive",
            "line": 70
          }
        ],
        "tags": [
          {
            "name": "@product",
            "line": 1
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:270"
            },
            "result": {
              "status": "passed",
              "duration": 14207
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:277"
            },
            "result": {
              "status": "passed",
              "duration": 4996559
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "a computer",
            "line": 72,
            "match": {
              "location": "features/step_definitions/common_steps.rb:98"
            },
            "result": {
              "status": "passed",
              "duration": 75722399
            }
          },
          {
            "keyword": "And ",
            "name": "I start Tails from USB drive \"to_upgrade\" with network unplugged and I login with persistence enabled",
            "line": 73,
            "match": {
              "location": "features/step_definitions/common_steps.rb:232"
            },
            "result": {
              "status": "passed",
              "duration": 64997008954
            }
          },
          {
            "keyword": "Then ",
            "name": "all tps features from the old Tails version are active",
            "line": 74,
            "match": {
              "location": "features/step_definitions/usb.rb:778"
            },
            "result": {
              "status": "passed",
              "duration": 1005732402
            }
          },
          {
            "keyword": "And ",
            "name": "Tails is running from USB drive \"to_upgrade\"",
            "line": 75,
            "match": {
              "location": "features/step_definitions/usb.rb:935"
            },
            "result": {
              "status": "passed",
              "duration": 256848821
            }
          },
          {
            "keyword": "And ",
            "name": "the boot device has safe access rights",
            "line": 76,
            "match": {
              "location": "features/step_definitions/usb.rb:949"
            },
            "result": {
              "status": "passed",
              "duration": 2750134243
            }
          },
          {
            "keyword": "And ",
            "name": "the expected persistent files created with the old Tails version are present in the filesystem",
            "line": 77,
            "match": {
              "location": "features/step_definitions/usb.rb:1121"
            },
            "result": {
              "status": "passed",
              "duration": 1257334817
            }
          },
          {
            "keyword": "And ",
            "name": "all persistent directories from the old Tails version have safe access rights",
            "line": 78,
            "match": {
              "location": "features/step_definitions/usb.rb:1037"
            },
            "result": {
              "status": "passed",
              "duration": 2264110881
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:335"
            },
            "result": {
              "status": "passed",
              "duration": 828159183
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:104"
            },
            "result": {
              "status": "passed",
              "duration": 20767843
            }
          }
        ]
      },
      {
        "id": "upgrading-an-old-tails-usb-installation;upgrading-an-initial-tails-installation-with-an-incremental-upgrade",
        "keyword": "Scenario",
        "name": "Upgrading an initial Tails installation with an incremental upgrade",
        "description": "",
        "line": 81,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          },
          {
            "name": "@automatic_upgrade",
            "line": 80
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:270"
            },
            "result": {
              "status": "passed",
              "duration": 77703
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:277"
            },
            "result": {
              "status": "passed",
              "duration": 16179229
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails without network from a USB drive with a persistent partition enabled and logged in",
            "line": 82,
            "match": {
              "location": "features/step_definitions/snapshots.rb:172"
            },
            "result": {
              "status": "passed",
              "duration": 9065351949
            }
          },
          {
            "keyword": "And ",
            "name": "no SquashFS delta is installed",
            "line": 83,
            "match": {
              "location": "features/step_definitions/usb.rb:1443"
            },
            "result": {
              "status": "passed",
              "duration": 97885383
            }
          },
          {
            "keyword": "And ",
            "name": "Tails is fooled to think that version 6.0~testoverlayfs was initially installed",
            "line": 84,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1444"
            },
            "result": {
              "status": "passed",
              "duration": 350207776
            }
          },
          {
            "keyword": "And ",
            "name": "Tails is fooled to think it is running version 6.0~testoverlayfs",
            "line": 85,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1436"
            },
            "result": {
              "status": "passed",
              "duration": 64260770
            }
          },
          {
            "keyword": "And ",
            "name": "the file system changes introduced in version 6.2~testoverlayfs are not present",
            "line": 86,
            "match": {
              "location": "features/step_definitions/usb.rb:1291"
            },
            "result": {
              "status": "passed",
              "duration": 345210798
            }
          },
          {
            "keyword": "And ",
            "name": "the file system changes introduced in version 6.3~testoverlayfs are not present",
            "line": 87,
            "match": {
              "location": "features/step_definitions/usb.rb:1291"
            },
            "result": {
              "status": "passed",
              "duration": 457315971
            }
          },
          {
            "keyword": "When ",
            "name": "the network is plugged",
            "line": 88,
            "match": {
              "location": "features/step_definitions/common_steps.rb:137"
            },
            "result": {
              "status": "passed",
              "duration": 18272660
            }
          },
          {
            "keyword": "And ",
            "name": "Tor is ready",
            "line": 89,
            "match": {
              "location": "features/step_definitions/common_steps.rb:650"
            },
            "result": {
              "status": "passed",
              "duration": 13868283510
            }
          },
          {
            "keyword": "Then ",
            "name": "I am proposed to install an incremental upgrade to version 6.2~testoverlayfs",
            "line": 90,
            "match": {
              "location": "features/step_definitions/usb.rb:1327"
            },
            "result": {
              "status": "passed",
              "duration": 2997838743
            }
          },
          {
            "keyword": "And ",
            "name": "I can successfully install the incremental upgrade to version 6.2~testoverlayfs",
            "line": 91,
            "match": {
              "location": "features/step_definitions/usb.rb:1346"
            },
            "result": {
              "status": "passed",
              "duration": 5015782192
            }
          },
          {
            "keyword": "Given ",
            "name": "I shutdown Tails and wait for the computer to power off",
            "line": 92,
            "match": {
              "location": "features/step_definitions/common_steps.rb:904"
            },
            "result": {
              "status": "passed",
              "duration": 10136356257
            }
          },
          {
            "keyword": "When ",
            "name": "I start Tails from USB drive \"__internal\" with network unplugged and I login with persistence enabled",
            "line": 93,
            "match": {
              "location": "features/step_definitions/common_steps.rb:232"
            },
            "result": {
              "status": "passed",
              "duration": 67960751568
            }
          },
          {
            "keyword": "Then ",
            "name": "Tails is running version 6.2~testoverlayfs",
            "line": 94,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1467"
            },
            "result": {
              "status": "passed",
              "duration": 6079119
            }
          },
          {
            "keyword": "And ",
            "name": "all tps features are active",
            "line": 95,
            "match": {
              "location": "features/step_definitions/usb.rb:778"
            },
            "result": {
              "status": "passed",
              "duration": 1103304552
            }
          },
          {
            "keyword": "And ",
            "name": "the file system changes introduced in version 6.2~testoverlayfs are present",
            "line": 96,
            "match": {
              "location": "features/step_definitions/usb.rb:1291"
            },
            "result": {
              "status": "passed",
              "duration": 272766606
            }
          },
          {
            "keyword": "And ",
            "name": "only the 6.2~testoverlayfs SquashFS delta is installed",
            "line": 97,
            "match": {
              "location": "features/step_definitions/usb.rb:1443"
            },
            "result": {
              "status": "passed",
              "duration": 70253557
            }
          },
          {
            "keyword": "Given ",
            "name": "Tails system time is magically synchronized",
            "line": 99,
            "comments": [
              {
                "value": "# Our IUK sets a release date that can make Tor bootstrapping impossible",
                "line": 98
              }
            ],
            "match": {
              "location": "features/step_definitions/common_steps.rb:1578"
            },
            "result": {
              "status": "passed",
              "duration": 153914893
            }
          },
          {
            "keyword": "And ",
            "name": "Tails is fooled to think that version 6.1~testoverlayfs was initially installed",
            "line": 103,
            "comments": [
              {
                "value": "# We'll really install Tails_amd64_6.0~testoverlayfs_to_6.3~testoverlayfs.iuk",
                "line": 100
              },
              {
                "value": "# but we need some way to force upgrading a second time in a row",
                "line": 101
              },
              {
                "value": "# even if only the initially installed version is considered",
                "line": 102
              }
            ],
            "match": {
              "location": "features/step_definitions/common_steps.rb:1444"
            },
            "result": {
              "status": "passed",
              "duration": 197658938
            }
          },
          {
            "keyword": "When ",
            "name": "the network is plugged",
            "line": 104,
            "match": {
              "location": "features/step_definitions/common_steps.rb:137"
            },
            "result": {
              "status": "passed",
              "duration": 20859740
            }
          },
          {
            "keyword": "And ",
            "name": "Tor is ready",
            "line": 105,
            "match": {
              "location": "features/step_definitions/common_steps.rb:650"
            },
            "result": {
              "status": "passed",
              "duration": 11630639296
            }
          },
          {
            "keyword": "Then ",
            "name": "I am proposed to install an incremental upgrade to version 6.3~testoverlayfs",
            "line": 106,
            "match": {
              "location": "features/step_definitions/usb.rb:1327"
            },
            "result": {
              "status": "passed",
              "duration": 2612176988
            }
          },
          {
            "keyword": "And ",
            "name": "I can successfully install the incremental upgrade to version 6.3~testoverlayfs",
            "line": 107,
            "match": {
              "location": "features/step_definitions/usb.rb:1346"
            },
            "result": {
              "status": "passed",
              "duration": 5045274328
            }
          },
          {
            "keyword": "Given ",
            "name": "I shutdown Tails and wait for the computer to power off",
            "line": 108,
            "match": {
              "location": "features/step_definitions/common_steps.rb:904"
            },
            "result": {
              "status": "passed",
              "duration": 8086478175
            }
          },
          {
            "keyword": "When ",
            "name": "I start Tails from USB drive \"__internal\" with network unplugged and I login with persistence enabled",
            "line": 109,
            "match": {
              "location": "features/step_definitions/common_steps.rb:232"
            },
            "result": {
              "status": "passed",
              "duration": 68214464967
            }
          },
          {
            "keyword": "Then ",
            "name": "Tails is running version 6.3~testoverlayfs",
            "line": 110,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1467"
            },
            "result": {
              "status": "passed",
              "duration": 14094185
            }
          },
          {
            "keyword": "And ",
            "name": "all tps features are active",
            "line": 111,
            "match": {
              "location": "features/step_definitions/usb.rb:778"
            },
            "result": {
              "status": "passed",
              "duration": 1494675442
            }
          },
          {
            "keyword": "And ",
            "name": "the file system changes introduced in version 6.3~testoverlayfs are present",
            "line": 112,
            "match": {
              "location": "features/step_definitions/usb.rb:1291"
            },
            "result": {
              "status": "passed",
              "duration": 444902878
            }
          },
          {
            "keyword": "And ",
            "name": "only the 6.3~testoverlayfs SquashFS delta is installed",
            "line": 113,
            "match": {
              "location": "features/step_definitions/usb.rb:1443"
            },
            "result": {
              "status": "passed",
              "duration": 57406169
            }
          },
          {
            "keyword": "Given ",
            "name": "Tails system time is magically synchronized",
            "line": 116,
            "comments": [
              {
                "value": "# Regression test for #17425 (i.e. the Upgrader would propose",
                "line": 114
              },
              {
                "value": "# upgrading to the version that's already running)",
                "line": 115
              }
            ],
            "match": {
              "location": "features/step_definitions/common_steps.rb:1578"
            },
            "result": {
              "status": "passed",
              "duration": 163152871
            }
          },
          {
            "keyword": "And ",
            "name": "Tails is fooled to think that version 6.1~testoverlayfs was initially installed",
            "line": 117,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1444"
            },
            "result": {
              "status": "passed",
              "duration": 205643848
            }
          },
          {
            "keyword": "When ",
            "name": "the network is plugged",
            "line": 118,
            "match": {
              "location": "features/step_definitions/common_steps.rb:137"
            },
            "result": {
              "status": "passed",
              "duration": 17385676
            }
          },
          {
            "keyword": "And ",
            "name": "Tor is ready",
            "line": 119,
            "match": {
              "location": "features/step_definitions/common_steps.rb:650"
            },
            "result": {
              "status": "passed",
              "duration": 10904788728
            }
          },
          {
            "keyword": "Then ",
            "name": "the Upgrader considers the system as up-to-date",
            "line": 120,
            "match": {
              "location": "features/step_definitions/usb.rb:1413"
            },
            "result": {
              "status": "passed",
              "duration": 10526722974
            }
          },
          {
            "keyword": "And ",
            "name": "I successfully start the Unsafe Browser",
            "line": 122,
            "comments": [
              {
                "value": "# Regression test on #8158 (i.e. the IUK's filesystem is not part of the Unsafe Browser's chroot)",
                "line": 121
              }
            ],
            "match": {
              "location": "features/step_definitions/browser.rb:109"
            },
            "result": {
              "status": "passed",
              "duration": 3780920299
            }
          },
          {
            "keyword": "And ",
            "name": "the file system changes introduced in version 6.3~testoverlayfs are present in the Unsafe Browser's chroot",
            "line": 123,
            "match": {
              "location": "features/step_definitions/usb.rb:1291"
            },
            "result": {
              "status": "passed",
              "duration": 397635535
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:335"
            },
            "result": {
              "status": "passed",
              "duration": 814991595
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:104"
            },
            "result": {
              "status": "passed",
              "duration": 15348948
            }
          }
        ]
      },
      {
        "id": "upgrading-an-old-tails-usb-installation;upgrading-a-tails-whose-signing-key-is-outdated",
        "keyword": "Scenario",
        "name": "Upgrading a Tails whose signing key is outdated",
        "description": "",
        "line": 126,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          },
          {
            "name": "@automatic_upgrade",
            "line": 125
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:270"
            },
            "result": {
              "status": "passed",
              "duration": 18484
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:277"
            },
            "result": {
              "status": "passed",
              "duration": 5307742
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails without network from a USB drive with a persistent partition enabled and logged in",
            "line": 127,
            "match": {
              "location": "features/step_definitions/snapshots.rb:172"
            },
            "result": {
              "status": "passed",
              "duration": 7673535739
            }
          },
          {
            "keyword": "And ",
            "name": "Tails is fooled to think that version 6.0~testoverlayfs was initially installed",
            "line": 128,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1444"
            },
            "result": {
              "status": "passed",
              "duration": 218821158
            }
          },
          {
            "keyword": "And ",
            "name": "Tails is fooled to think it is running version 6.0~testoverlayfs",
            "line": 129,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1436"
            },
            "result": {
              "status": "passed",
              "duration": 46941371
            }
          },
          {
            "keyword": "And ",
            "name": "the signing key used by the Upgrader is outdated",
            "line": 130,
            "match": {
              "location": "features/step_definitions/usb.rb:1426"
            },
            "result": {
              "status": "passed",
              "duration": 52411716
            }
          },
          {
            "keyword": "But ",
            "name": "a current signing key is available on our website",
            "line": 131,
            "match": {
              "location": "features/step_definitions/usb.rb:1437"
            },
            "result": {
              "status": "passed",
              "duration": 22854
            }
          },
          {
            "keyword": "When ",
            "name": "the network is plugged",
            "line": 132,
            "match": {
              "location": "features/step_definitions/common_steps.rb:137"
            },
            "result": {
              "status": "passed",
              "duration": 14673090
            }
          },
          {
            "keyword": "And ",
            "name": "Tor is ready",
            "line": 133,
            "match": {
              "location": "features/step_definitions/common_steps.rb:650"
            },
            "result": {
              "status": "passed",
              "duration": 10301847189
            }
          },
          {
            "keyword": "Then ",
            "name": "I am proposed to install an incremental upgrade to version 6.2~testoverlayfs",
            "line": 134,
            "match": {
              "location": "features/step_definitions/usb.rb:1327"
            },
            "result": {
              "status": "passed",
              "duration": 2682155138
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:335"
            },
            "result": {
              "status": "passed",
              "duration": 764069049
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:104"
            },
            "result": {
              "status": "passed",
              "duration": 19847
            }
          }
        ]
      }
    ]
  },
  {
    "uri": "features/emergency_shutdown.feature",
    "id": "emergency-shutdown",
    "keyword": "Feature",
    "name": "Emergency shutdown",
    "description": "  As a Tails user\n  when I unplug my Tails device to trigger emergency shutdown\n  I want the system memory to be free from sensitive data.",
    "line": 2,
    "tags": [
      {
        "name": "@product",
        "line": 1
      },
      {
        "name": "@not_release_blocker",
        "line": 1
      }
    ],
    "elements": [
      {
        "id": "emergency-shutdown;tails-shuts-down-on-dvd-boot-medium-removal",
        "keyword": "Scenario",
        "name": "Tails shuts down on DVD boot medium removal",
        "description": "",
        "line": 11,
        "type": "scenario",
        "comments": [
          {
            "value": "# Test something close to real-world usage, without interfering,",
            "line": 7
          },
          {
            "value": "# i.e. without the \"I prepare Tails for memory erasure tests\" step;",
            "line": 8
          },
          {
            "value": "# and test that Tails eventually shuts down, which we don't do in",
            "line": 9
          },
          {
            "value": "# the following scenarios for test suite performance reasons.",
            "line": 10
          }
        ],
        "tags": [
          {
            "name": "@product",
            "line": 1
          },
          {
            "name": "@not_release_blocker",
            "line": 1
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:270"
            },
            "result": {
              "status": "passed",
              "duration": 18546
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:277"
            },
            "result": {
              "status": "passed",
              "duration": 3780809
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails from DVD and logged in and the network is connected",
            "line": 12,
            "match": {
              "location": "features/step_definitions/snapshots.rb:172"
            },
            "result": {
              "status": "passed",
              "duration": 36753185573
            }
          },
          {
            "keyword": "When ",
            "name": "I eject the boot medium",
            "line": 13,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1422"
            },
            "result": {
              "status": "passed",
              "duration": 286767672
            }
          },
          {
            "keyword": "Then ",
            "name": "Tails eventually shuts down",
            "line": 14,
            "match": {
              "location": "features/step_definitions/common_steps.rb:886"
            },
            "result": {
              "status": "passed",
              "duration": 5572960124
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:335"
            },
            "result": {
              "status": "passed",
              "duration": 317077516
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:104"
            },
            "result": {
              "status": "passed",
              "duration": 35519
            }
          }
        ]
      },
      {
        "id": "emergency-shutdown;tails-erases-memory-on-dvd-boot-medium-removal:-overlayfs-read-write-branch",
        "keyword": "Scenario",
        "name": "Tails erases memory on DVD boot medium removal: overlayfs read-write branch",
        "description": "",
        "line": 16,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          },
          {
            "name": "@not_release_blocker",
            "line": 1
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:270"
            },
            "result": {
              "status": "passed",
              "duration": 21090
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:277"
            },
            "result": {
              "status": "passed",
              "duration": 6245743
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails from DVD without network and logged in",
            "line": 17,
            "match": {
              "location": "features/step_definitions/snapshots.rb:172"
            },
            "result": {
              "status": "passed",
              "duration": 7003692559
            }
          },
          {
            "keyword": "And ",
            "name": "I prepare Tails for memory erasure tests",
            "line": 18,
            "match": {
              "location": "features/step_definitions/erase_memory.rb:66"
            },
            "result": {
              "status": "passed",
              "duration": 547080505
            }
          },
          {
            "keyword": "And ",
            "name": "I fill a 128 MiB file with a known pattern on the root filesystem",
            "line": 19,
            "match": {
              "location": "features/step_definitions/erase_memory.rb:235"
            },
            "result": {
              "status": "passed",
              "duration": 22337149246
            }
          },
          {
            "keyword": "And ",
            "name": "patterns cover at least 128 MiB in the guest's memory",
            "line": 20,
            "output": [
              "Pattern coverage: 100.000% (128 MiB out of 128 MiB reference memory)"
            ],
            "match": {
              "location": "features/step_definitions/erase_memory.rb:182"
            },
            "result": {
              "status": "passed",
              "duration": 1967167673
            }
          },
          {
            "keyword": "When ",
            "name": "I eject the boot medium",
            "line": 21,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1422"
            },
            "result": {
              "status": "passed",
              "duration": 213425617
            }
          },
          {
            "keyword": "And ",
            "name": "I wait for Tails to finish wiping the memory",
            "line": 22,
            "match": {
              "location": "features/step_definitions/erase_memory.rb:231"
            },
            "result": {
              "status": "passed",
              "duration": 5175203679
            }
          },
          {
            "keyword": "Then ",
            "name": "I find very few patterns in the guest's memory",
            "line": 23,
            "output": [
              "Pattern coverage: 0.000% (0 MiB out of 1480 MiB reference memory)"
            ],
            "match": {
              "location": "features/step_definitions/erase_memory.rb:214"
            },
            "result": {
              "status": "passed",
              "duration": 576042299
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:335"
            },
            "result": {
              "status": "passed",
              "duration": 3784044199
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:104"
            },
            "result": {
              "status": "passed",
              "duration": 23564
            }
          }
        ]
      },
      {
        "id": "emergency-shutdown;tails-erases-memory-on-dvd-boot-medium-removal:-vfat",
        "keyword": "Scenario",
        "name": "Tails erases memory on DVD boot medium removal: vfat",
        "description": "",
        "line": 25,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          },
          {
            "name": "@not_release_blocker",
            "line": 1
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:270"
            },
            "result": {
              "status": "passed",
              "duration": 16191
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:277"
            },
            "result": {
              "status": "passed",
              "duration": 2881462
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails from DVD without network and logged in",
            "line": 26,
            "match": {
              "location": "features/step_definitions/snapshots.rb:172"
            },
            "result": {
              "status": "passed",
              "duration": 7124350269
            }
          },
          {
            "keyword": "And ",
            "name": "I prepare Tails for memory erasure tests",
            "line": 27,
            "match": {
              "location": "features/step_definitions/erase_memory.rb:66"
            },
            "result": {
              "status": "passed",
              "duration": 344076412
            }
          },
          {
            "keyword": "And ",
            "name": "I plug and mount a 128 MiB USB drive with a vfat filesystem",
            "line": 28,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1530"
            },
            "result": {
              "status": "passed",
              "duration": 5238458267
            }
          },
          {
            "keyword": "And ",
            "name": "I fill the USB drive with a known pattern",
            "line": 29,
            "match": {
              "location": "features/step_definitions/erase_memory.rb:158"
            },
            "result": {
              "status": "passed",
              "duration": 2645637498
            }
          },
          {
            "keyword": "And ",
            "name": "I read the content of the test FS",
            "line": 30,
            "match": {
              "location": "features/step_definitions/erase_memory.rb:162"
            },
            "result": {
              "status": "passed",
              "duration": 60432923
            }
          },
          {
            "keyword": "And ",
            "name": "patterns cover at least 90% of the test FS size in the guest's memory",
            "line": 31,
            "output": [
              "Pattern coverage: 100.000% (127 MiB out of 127 MiB reference memory)"
            ],
            "match": {
              "location": "features/step_definitions/erase_memory.rb:166"
            },
            "result": {
              "status": "passed",
              "duration": 2488634585
            }
          },
          {
            "keyword": "When ",
            "name": "I eject the boot medium",
            "line": 32,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1422"
            },
            "result": {
              "status": "passed",
              "duration": 247072357
            }
          },
          {
            "keyword": "And ",
            "name": "I wait for Tails to finish wiping the memory",
            "line": 33,
            "match": {
              "location": "features/step_definitions/erase_memory.rb:231"
            },
            "result": {
              "status": "passed",
              "duration": 5940238854
            }
          },
          {
            "keyword": "Then ",
            "name": "I find very few patterns in the guest's memory",
            "line": 34,
            "output": [
              "Pattern coverage: 0.000% (0 MiB out of 1481 MiB reference memory)"
            ],
            "match": {
              "location": "features/step_definitions/erase_memory.rb:214"
            },
            "result": {
              "status": "passed",
              "duration": 641516572
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:335"
            },
            "result": {
              "status": "passed",
              "duration": 4085473904
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:104"
            },
            "result": {
              "status": "passed",
              "duration": 595977
            }
          }
        ]
      },
      {
        "id": "emergency-shutdown;tails-erases-memory-on-dvd-boot-medium-removal:-luks-encrypted-ext4",
        "keyword": "Scenario",
        "name": "Tails erases memory on DVD boot medium removal: LUKS-encrypted ext4",
        "description": "",
        "line": 36,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          },
          {
            "name": "@not_release_blocker",
            "line": 1
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:270"
            },
            "result": {
              "status": "passed",
              "duration": 15970
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:277"
            },
            "result": {
              "status": "passed",
              "duration": 3417247
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails from DVD without network and logged in",
            "line": 37,
            "match": {
              "location": "features/step_definitions/snapshots.rb:172"
            },
            "result": {
              "status": "passed",
              "duration": 6719965395
            }
          },
          {
            "keyword": "And ",
            "name": "I prepare Tails for memory erasure tests",
            "line": 38,
            "match": {
              "location": "features/step_definitions/erase_memory.rb:66"
            },
            "result": {
              "status": "passed",
              "duration": 409885117
            }
          },
          {
            "keyword": "And ",
            "name": "I plug and mount a 128 MiB USB drive with an ext4 filesystem encrypted with password \"asdf\"",
            "line": 39,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1530"
            },
            "result": {
              "status": "passed",
              "duration": 29972846406
            }
          },
          {
            "keyword": "And ",
            "name": "I fill the USB drive with a known pattern",
            "line": 40,
            "match": {
              "location": "features/step_definitions/erase_memory.rb:158"
            },
            "result": {
              "status": "passed",
              "duration": 1256308507
            }
          },
          {
            "keyword": "And ",
            "name": "I read the content of the test FS",
            "line": 41,
            "match": {
              "location": "features/step_definitions/erase_memory.rb:162"
            },
            "result": {
              "status": "passed",
              "duration": 89078589
            }
          },
          {
            "keyword": "And ",
            "name": "patterns cover at least 99% of the test FS size in the guest's memory",
            "line": 42,
            "output": [
              "Pattern coverage: 106.115% (97 MiB out of 91 MiB reference memory)"
            ],
            "match": {
              "location": "features/step_definitions/erase_memory.rb:166"
            },
            "result": {
              "status": "passed",
              "duration": 1877326116
            }
          },
          {
            "keyword": "When ",
            "name": "I eject the boot medium",
            "line": 43,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1422"
            },
            "result": {
              "status": "passed",
              "duration": 241740799
            }
          },
          {
            "keyword": "And ",
            "name": "I wait for Tails to finish wiping the memory",
            "line": 44,
            "match": {
              "location": "features/step_definitions/erase_memory.rb:231"
            },
            "result": {
              "status": "passed",
              "duration": 5219505419
            }
          },
          {
            "keyword": "Then ",
            "name": "I find very few patterns in the guest's memory",
            "line": 45,
            "output": [
              "Pattern coverage: 0.000% (0 MiB out of 1473 MiB reference memory)"
            ],
            "match": {
              "location": "features/step_definitions/erase_memory.rb:214"
            },
            "result": {
              "status": "passed",
              "duration": 593707095
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:335"
            },
            "result": {
              "status": "passed",
              "duration": 3723922287
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:104"
            },
            "result": {
              "status": "passed",
              "duration": 323947
            }
          }
        ]
      },
      {
        "id": "emergency-shutdown;tails-erases-memory-and-shuts-down-on-usb-boot-medium-removal:-persistent-data",
        "keyword": "Scenario",
        "name": "Tails erases memory and shuts down on USB boot medium removal: persistent data",
        "description": "",
        "line": 47,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          },
          {
            "name": "@not_release_blocker",
            "line": 1
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:270"
            },
            "result": {
              "status": "passed",
              "duration": 14277
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:277"
            },
            "result": {
              "status": "passed",
              "duration": 2552867
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails without network from a USB drive with a persistent partition enabled and logged in",
            "line": 48,
            "match": {
              "location": "features/step_definitions/snapshots.rb:172"
            },
            "result": {
              "status": "passed",
              "duration": 7735170099
            }
          },
          {
            "keyword": "And ",
            "name": "I prepare Tails for memory erasure tests",
            "line": 49,
            "match": {
              "location": "features/step_definitions/erase_memory.rb:66"
            },
            "result": {
              "status": "passed",
              "duration": 399779722
            }
          },
          {
            "keyword": "And ",
            "name": "I fill a 128 MiB file with a known pattern on the persistent filesystem",
            "line": 50,
            "match": {
              "location": "features/step_definitions/erase_memory.rb:235"
            },
            "result": {
              "status": "passed",
              "duration": 18179065941
            }
          },
          {
            "keyword": "And ",
            "name": "patterns cover at least 100 MiB in the guest's memory",
            "line": 51,
            "output": [
              "Pattern coverage: 128.000% (128 MiB out of 100 MiB reference memory)"
            ],
            "match": {
              "location": "features/step_definitions/erase_memory.rb:182"
            },
            "result": {
              "status": "passed",
              "duration": 2294350739
            }
          },
          {
            "keyword": "When ",
            "name": "I eject the boot medium",
            "line": 52,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1422"
            },
            "result": {
              "status": "passed",
              "duration": 330257065
            }
          },
          {
            "keyword": "And ",
            "name": "I wait for Tails to finish wiping the memory",
            "line": 53,
            "match": {
              "location": "features/step_definitions/erase_memory.rb:231"
            },
            "result": {
              "status": "passed",
              "duration": 10715872672
            }
          },
          {
            "keyword": "Then ",
            "name": "I find very few patterns in the guest's memory",
            "line": 54,
            "output": [
              "Pattern coverage: 0.000% (0 MiB out of 1508 MiB reference memory)"
            ],
            "match": {
              "location": "features/step_definitions/erase_memory.rb:214"
            },
            "result": {
              "status": "passed",
              "duration": 582584753
            }
          },
          {
            "keyword": "And ",
            "name": "Tails eventually shuts down",
            "line": 55,
            "match": {
              "location": "features/step_definitions/common_steps.rb:886"
            },
            "result": {
              "status": "passed",
              "duration": 90022427794
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:335"
            },
            "result": {
              "status": "passed",
              "duration": 134944728
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:104"
            },
            "result": {
              "status": "passed",
              "duration": 16923
            }
          }
        ]
      }
    ]
  },
  {
    "uri": "features/apt.feature",
    "id": "apt-sources-are-correctly-configured",
    "keyword": "Feature",
    "name": "APT sources are correctly configured",
    "description": "  As a Tails user\n  I want APT to be configured to use hidden services",
    "line": 2,
    "tags": [
      {
        "name": "@product",
        "line": 1
      }
    ],
    "elements": [
      {
        "id": "apt-sources-are-correctly-configured;apt-sources-are-configured-correctly",
        "keyword": "Scenario",
        "name": "APT sources are configured correctly",
        "description": "",
        "line": 6,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:270"
            },
            "result": {
              "status": "passed",
              "duration": 14017
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:277"
            },
            "result": {
              "status": "passed",
              "duration": 3826995
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "a computer",
            "line": 7,
            "match": {
              "location": "features/step_definitions/common_steps.rb:98"
            },
            "result": {
              "status": "passed",
              "duration": 82424901
            }
          },
          {
            "keyword": "And ",
            "name": "I start Tails from DVD with network unplugged",
            "line": 8,
            "match": {
              "location": "features/step_definitions/common_steps.rb:211"
            },
            "result": {
              "status": "passed",
              "duration": 37342916144
            }
          },
          {
            "keyword": "Then ",
            "name": "the only hosts in APT sources are \"cloudfront.debian.net,deb.tails.boum.org,deb.torproject.org\"",
            "line": 9,
            "match": {
              "location": "features/step_definitions/apt.rb:9"
            },
            "result": {
              "status": "passed",
              "duration": 323234508
            }
          },
          {
            "keyword": "And ",
            "name": "no proposed-updates APT suite is enabled",
            "line": 10,
            "match": {
              "location": "features/step_definitions/apt.rb:19"
            },
            "result": {
              "status": "passed",
              "duration": 40382820
            }
          },
          {
            "keyword": "And ",
            "name": "no experimental APT suite is enabled for deb.torproject.org",
            "line": 11,
            "match": {
              "location": "features/step_definitions/apt.rb:23"
            },
            "result": {
              "status": "passed",
              "duration": 36814130
            }
          },
          {
            "keyword": "And ",
            "name": "if releasing, no unversioned Tails APT source is enabled",
            "line": 12,
            "output": [
              "Not on a tag ⇒ skipping this step"
            ],
            "match": {
              "location": "features/step_definitions/apt.rb:42"
            },
            "result": {
              "status": "passed",
              "duration": 119512315
            }
          },
          {
            "keyword": "And ",
            "name": "if releasing, the tagged Tails APT source is enabled",
            "line": 13,
            "output": [
              "Not on a tag ⇒ skipping this step"
            ],
            "match": {
              "location": "features/step_definitions/apt.rb:30"
            },
            "result": {
              "status": "passed",
              "duration": 11079722
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:335"
            },
            "result": {
              "status": "passed",
              "duration": 771148488
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:104"
            },
            "result": {
              "status": "passed",
              "duration": 7016255
            }
          }
        ]
      }
    ]
  },
  {
    "uri": "features/backup.feature",
    "id": "backing-up-the-persistent-storage",
    "keyword": "Feature",
    "name": "Backing up the persistent storage",
    "description": "  As a Tails user\n  I want to backup my persistent storage\n  And easily keep that backup updated",
    "line": 2,
    "tags": [
      {
        "name": "@product",
        "line": 1
      }
    ],
    "elements": [
      {
        "id": "backing-up-the-persistent-storage;using-tails'-custom-backup-tool-to-backup-a-newly-added-file",
        "keyword": "Scenario",
        "name": "Using Tails' custom backup tool to backup a newly added file",
        "description": "",
        "line": 7,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:270"
            },
            "result": {
              "status": "passed",
              "duration": 18375
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:277"
            },
            "result": {
              "status": "passed",
              "duration": 2605465
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails without network from a USB drive with a persistent partition enabled and logged in",
            "line": 8,
            "match": {
              "location": "features/step_definitions/snapshots.rb:172"
            },
            "result": {
              "status": "passed",
              "duration": 8328099657
            }
          },
          {
            "keyword": "And ",
            "name": "I shutdown Tails and wait for the computer to power off",
            "line": 10,
            "comments": [
              {
                "value": "# The volume cannot be in use when GuestFs clones it, which we do below",
                "line": 9
              }
            ],
            "match": {
              "location": "features/step_definitions/common_steps.rb:904"
            },
            "result": {
              "status": "passed",
              "duration": 9752553715
            }
          },
          {
            "keyword": "And ",
            "name": "I clone USB drive \"__internal\" to a temporary USB drive \"backup\"",
            "line": 11,
            "match": {
              "location": "features/step_definitions/usb.rb:113"
            },
            "result": {
              "status": "passed",
              "duration": 904289859
            }
          },
          {
            "keyword": "Given ",
            "name": "I have started Tails without network from a USB drive with a persistent partition enabled and logged in",
            "line": 12,
            "match": {
              "location": "features/step_definitions/snapshots.rb:172"
            },
            "result": {
              "status": "passed",
              "duration": 7868306897
            }
          },
          {
            "keyword": "And ",
            "name": "I write a file \"/live/persistence/TailsData_unlocked/new\" with contents \"foo\"",
            "line": 13,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1726"
            },
            "result": {
              "status": "passed",
              "duration": 7762102
            }
          },
          {
            "keyword": "When ",
            "name": "I start Tails' custom backup tool",
            "line": 14,
            "match": {
              "location": "features/step_definitions/backup.rb:1"
            },
            "result": {
              "status": "passed",
              "duration": 2452310776
            }
          },
          {
            "keyword": "Then ",
            "name": "the backup tool displays \"Plug in your backup Tails USB stick\"",
            "line": 15,
            "match": {
              "location": "features/step_definitions/backup.rb:5"
            },
            "result": {
              "status": "passed",
              "duration": 178836306
            }
          },
          {
            "keyword": "When ",
            "name": "I plug USB drive \"backup\"",
            "line": 16,
            "match": {
              "location": "features/step_definitions/common_steps.rb:123"
            },
            "result": {
              "status": "passed",
              "duration": 2354432435
            }
          },
          {
            "keyword": "And ",
            "name": "I give the Persistent Storage on drive \"backup\" its own UUID",
            "line": 17,
            "match": {
              "location": "features/step_definitions/usb.rb:1705"
            },
            "result": {
              "status": "passed",
              "duration": 174472071
            }
          },
          {
            "keyword": "And ",
            "name": "I click \"Retry\" in the backup tool",
            "line": 18,
            "match": {
              "location": "features/step_definitions/backup.rb:13"
            },
            "result": {
              "status": "passed",
              "duration": 3190804231
            }
          },
          {
            "keyword": "Then ",
            "name": "the backup tool displays \"Do you want to back up your Persistent Storage now?\"",
            "line": 19,
            "match": {
              "location": "features/step_definitions/backup.rb:5"
            },
            "result": {
              "status": "passed",
              "duration": 139926552
            }
          },
          {
            "keyword": "When ",
            "name": "I click \"Back Up\" in the backup tool",
            "line": 20,
            "match": {
              "location": "features/step_definitions/backup.rb:13"
            },
            "result": {
              "status": "passed",
              "duration": 3145277497
            }
          },
          {
            "keyword": "And ",
            "name": "I enter my persistent storage passphrase into the polkit prompt",
            "line": 21,
            "match": {
              "location": "features/step_definitions/backup.rb:17"
            },
            "result": {
              "status": "passed",
              "duration": 2104312351
            }
          },
          {
            "keyword": "Then ",
            "name": "the backup tool displays \"Your Persistent Storage was backed up successfully to your backup Tails USB stick!\"",
            "line": 22,
            "match": {
              "location": "features/step_definitions/backup.rb:5"
            },
            "result": {
              "status": "passed",
              "duration": 11777060279
            }
          },
          {
            "keyword": "When ",
            "name": "I unplug USB drive \"backup\"",
            "line": 24,
            "comments": [
              {
                "value": "# The backup tool ejects the drive, so we have to replug it",
                "line": 23
              }
            ],
            "match": {
              "location": "features/step_definitions/usb.rb:120"
            },
            "result": {
              "status": "passed",
              "duration": 148594629
            }
          },
          {
            "keyword": "And ",
            "name": "I plug USB drive \"backup\"",
            "line": 25,
            "match": {
              "location": "features/step_definitions/common_steps.rb:123"
            },
            "result": {
              "status": "passed",
              "duration": 1866440158
            }
          },
          {
            "keyword": "Then ",
            "name": "the USB drive \"backup\" contains the same files as my persistent storage",
            "line": 26,
            "match": {
              "location": "features/step_definitions/backup.rb:22"
            },
            "result": {
              "status": "passed",
              "duration": 3659965447
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:335"
            },
            "result": {
              "status": "passed",
              "duration": 1077438890
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:104"
            },
            "result": {
              "status": "passed",
              "duration": 113439001
            }
          }
        ]
      }
    ]
  },
  {
    "uri": "features/build.feature",
    "id": "custom-apt-sources-to-build-branches",
    "keyword": "Feature",
    "name": "custom APT sources to build branches",
    "description": "  As a Tails developer, when I build Tails, I'd be happy if\n  the proper APT sources were automatically picked depending\n  on which Git branch I am working on.",
    "line": 2,
    "tags": [
      {
        "name": "@source",
        "line": 1
      }
    ],
    "elements": [
      {
        "id": "custom-apt-sources-to-build-branches;build-from-an-untagged-stable-branch-where-the-config/apt_overlays.d-directory-is-empty",
        "keyword": "Scenario",
        "name": "build from an untagged stable branch where the config/APT_overlays.d directory is empty",
        "description": "",
        "line": 7,
        "type": "scenario",
        "tags": [
          {
            "name": "@source",
            "line": 1
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:270"
            },
            "result": {
              "status": "passed",
              "duration": 20528
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:548"
            },
            "result": {
              "status": "passed",
              "duration": 126969
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I am working on the stable base branch",
            "line": 8,
            "match": {
              "location": "features/step_definitions/build.rb:73"
            },
            "result": {
              "status": "passed",
              "duration": 41907667
            }
          },
          {
            "keyword": "And ",
            "name": "the last version mentioned in debian/changelog is 1.0",
            "line": 9,
            "match": {
              "location": "features/step_definitions/build.rb:38"
            },
            "result": {
              "status": "passed",
              "duration": 100155748
            }
          },
          {
            "keyword": "And ",
            "name": "Tails 1.0 has not been released yet",
            "line": 10,
            "match": {
              "location": "features/step_definitions/build.rb:34"
            },
            "result": {
              "status": "passed",
              "duration": 109696
            }
          },
          {
            "keyword": "And ",
            "name": "the config/APT_overlays.d directory is empty",
            "line": 11,
            "match": {
              "location": "features/step_definitions/build.rb:126"
            },
            "result": {
              "status": "passed",
              "duration": 46957
            }
          },
          {
            "keyword": "When ",
            "name": "I successfully run tails-custom-apt-sources",
            "line": 12,
            "match": {
              "location": "features/step_definitions/build.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 37724815
            }
          },
          {
            "keyword": "Then ",
            "name": "I should see only the 'stable' suite",
            "line": 13,
            "match": {
              "location": "features/step_definitions/build.rb:117"
            },
            "result": {
              "status": "passed",
              "duration": 11818718
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:555"
            },
            "result": {
              "status": "passed",
              "duration": 1176196
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:104"
            },
            "result": {
              "status": "passed",
              "duration": 9437
            }
          }
        ]
      },
      {
        "id": "custom-apt-sources-to-build-branches;build-from-an-untagged-stable-branch-where-config/apt_overlays.d-is-not-empty",
        "keyword": "Scenario",
        "name": "build from an untagged stable branch where config/APT_overlays.d is not empty",
        "description": "",
        "line": 15,
        "type": "scenario",
        "tags": [
          {
            "name": "@source",
            "line": 1
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:270"
            },
            "result": {
              "status": "passed",
              "duration": 11361
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:548"
            },
            "result": {
              "status": "passed",
              "duration": 96902
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I am working on the stable base branch",
            "line": 16,
            "match": {
              "location": "features/step_definitions/build.rb:73"
            },
            "result": {
              "status": "passed",
              "duration": 37845311
            }
          },
          {
            "keyword": "And ",
            "name": "the last version mentioned in debian/changelog is 1.0",
            "line": 17,
            "match": {
              "location": "features/step_definitions/build.rb:38"
            },
            "result": {
              "status": "passed",
              "duration": 74555342
            }
          },
          {
            "keyword": "And ",
            "name": "Tails 1.0 has not been released yet",
            "line": 18,
            "match": {
              "location": "features/step_definitions/build.rb:34"
            },
            "result": {
              "status": "passed",
              "duration": 45125
            }
          },
          {
            "keyword": "And ",
            "name": "config/APT_overlays.d contains 'feature-foo'",
            "line": 19,
            "match": {
              "location": "features/step_definitions/build.rb:131"
            },
            "result": {
              "status": "passed",
              "duration": 70943
            }
          },
          {
            "keyword": "And ",
            "name": "config/APT_overlays.d contains 'bugfix-bar'",
            "line": 20,
            "match": {
              "location": "features/step_definitions/build.rb:131"
            },
            "result": {
              "status": "passed",
              "duration": 34274
            }
          },
          {
            "keyword": "When ",
            "name": "I successfully run tails-custom-apt-sources",
            "line": 21,
            "match": {
              "location": "features/step_definitions/build.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 43257967
            }
          },
          {
            "keyword": "Then ",
            "name": "I should see the 'stable' suite",
            "line": 22,
            "match": {
              "location": "features/step_definitions/build.rb:113"
            },
            "result": {
              "status": "passed",
              "duration": 194754
            }
          },
          {
            "keyword": "And ",
            "name": "I should see the 'feature-foo' suite",
            "line": 23,
            "match": {
              "location": "features/step_definitions/build.rb:113"
            },
            "result": {
              "status": "passed",
              "duration": 69079
            }
          },
          {
            "keyword": "And ",
            "name": "I should see the 'bugfix-bar' suite",
            "line": 24,
            "match": {
              "location": "features/step_definitions/build.rb:113"
            },
            "result": {
              "status": "passed",
              "duration": 60494
            }
          },
          {
            "keyword": "But ",
            "name": "I should not see the '1.0' suite",
            "line": 25,
            "match": {
              "location": "features/step_definitions/build.rb:122"
            },
            "result": {
              "status": "passed",
              "duration": 93035
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:555"
            },
            "result": {
              "status": "passed",
              "duration": 1001697
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:104"
            },
            "result": {
              "status": "passed",
              "duration": 9358
            }
          }
        ]
      },
      {
        "id": "custom-apt-sources-to-build-branches;build-from-an-untagged-stable-branch-with-no-encoded-time-based-snapshot",
        "keyword": "Scenario",
        "name": "build from an untagged stable branch with no encoded time-based snapshot",
        "description": "",
        "line": 27,
        "type": "scenario",
        "tags": [
          {
            "name": "@source",
            "line": 1
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:270"
            },
            "result": {
              "status": "passed",
              "duration": 14197
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:548"
            },
            "result": {
              "status": "passed",
              "duration": 103554
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I am working on the stable base branch",
            "line": 28,
            "match": {
              "location": "features/step_definitions/build.rb:73"
            },
            "result": {
              "status": "passed",
              "duration": 32598884
            }
          },
          {
            "keyword": "And ",
            "name": "Tails 0.10 has been released",
            "line": 29,
            "match": {
              "location": "features/step_definitions/build.rb:3"
            },
            "result": {
              "status": "passed",
              "duration": 19579297
            }
          },
          {
            "keyword": "And ",
            "name": "the last versions mentioned in debian/changelog are 0.10 and 1.0",
            "line": 30,
            "match": {
              "location": "features/step_definitions/build.rb:48"
            },
            "result": {
              "status": "passed",
              "duration": 104308894
            }
          },
          {
            "keyword": "And ",
            "name": "Tails 1.0 has not been released yet",
            "line": 31,
            "match": {
              "location": "features/step_definitions/build.rb:34"
            },
            "result": {
              "status": "passed",
              "duration": 45194
            }
          },
          {
            "keyword": "And ",
            "name": "no frozen APT snapshot is encoded in config/APT_snapshots.d",
            "line": 32,
            "match": {
              "location": "features/step_definitions/build.rb:53"
            },
            "result": {
              "status": "passed",
              "duration": 81073
            }
          },
          {
            "keyword": "When ",
            "name": "I successfully run \"apt-snapshots-serials prepare-build\"",
            "line": 33,
            "match": {
              "location": "features/step_definitions/build.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 992733897
            }
          },
          {
            "keyword": "And ",
            "name": "I run \"apt-mirror debian\"",
            "line": 34,
            "match": {
              "location": "features/step_definitions/build.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 9106492
            }
          },
          {
            "keyword": "Then ",
            "name": "it should fail",
            "line": 35,
            "match": {
              "location": "features/step_definitions/build.rb:135"
            },
            "result": {
              "status": "passed",
              "duration": 44735
            }
          },
          {
            "keyword": "When ",
            "name": "I run \"apt-mirror torproject\"",
            "line": 36,
            "match": {
              "location": "features/step_definitions/build.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 7944514
            }
          },
          {
            "keyword": "Then ",
            "name": "it should fail",
            "line": 37,
            "match": {
              "location": "features/step_definitions/build.rb:135"
            },
            "result": {
              "status": "passed",
              "duration": 30026
            }
          },
          {
            "keyword": "When ",
            "name": "I successfully run \"apt-mirror debian-security\"",
            "line": 38,
            "match": {
              "location": "features/step_definitions/build.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 67620933
            }
          },
          {
            "keyword": "Then ",
            "name": "I should see a time-based snapshot",
            "line": 39,
            "match": {
              "location": "features/step_definitions/build.rb:155"
            },
            "result": {
              "status": "passed",
              "duration": 250049
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:555"
            },
            "result": {
              "status": "passed",
              "duration": 1985453
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:104"
            },
            "result": {
              "status": "passed",
              "duration": 15519
            }
          }
        ]
      },
      {
        "id": "custom-apt-sources-to-build-branches;build-from-an-untagged-stable-branch-with-encoded-time-based-snapshots",
        "keyword": "Scenario",
        "name": "build from an untagged stable branch with encoded time-based snapshots",
        "description": "",
        "line": 41,
        "type": "scenario",
        "tags": [
          {
            "name": "@source",
            "line": 1
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:270"
            },
            "result": {
              "status": "passed",
              "duration": 19666
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:548"
            },
            "result": {
              "status": "passed",
              "duration": 118412
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I am working on the stable base branch",
            "line": 42,
            "match": {
              "location": "features/step_definitions/build.rb:73"
            },
            "result": {
              "status": "passed",
              "duration": 34047812
            }
          },
          {
            "keyword": "And ",
            "name": "Tails 0.10 has been released",
            "line": 43,
            "match": {
              "location": "features/step_definitions/build.rb:3"
            },
            "result": {
              "status": "passed",
              "duration": 15366528
            }
          },
          {
            "keyword": "And ",
            "name": "the last versions mentioned in debian/changelog are 0.10 and 1.0",
            "line": 44,
            "match": {
              "location": "features/step_definitions/build.rb:48"
            },
            "result": {
              "status": "passed",
              "duration": 101626384
            }
          },
          {
            "keyword": "And ",
            "name": "Tails 1.0 has not been released yet",
            "line": 45,
            "match": {
              "location": "features/step_definitions/build.rb:34"
            },
            "result": {
              "status": "passed",
              "duration": 49623
            }
          },
          {
            "keyword": "And ",
            "name": "frozen APT snapshots are encoded in config/APT_snapshots.d",
            "line": 46,
            "match": {
              "location": "features/step_definitions/build.rb:61"
            },
            "result": {
              "status": "passed",
              "duration": 115877
            }
          },
          {
            "keyword": "When ",
            "name": "I successfully run \"apt-snapshots-serials prepare-build\"",
            "line": 47,
            "match": {
              "location": "features/step_definitions/build.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 974695020
            }
          },
          {
            "keyword": "And ",
            "name": "I successfully run \"apt-mirror debian\"",
            "line": 48,
            "match": {
              "location": "features/step_definitions/build.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 73606905
            }
          },
          {
            "keyword": "Then ",
            "name": "I should see a time-based snapshot",
            "line": 49,
            "match": {
              "location": "features/step_definitions/build.rb:155"
            },
            "result": {
              "status": "passed",
              "duration": 669786
            }
          },
          {
            "keyword": "When ",
            "name": "I successfully run \"apt-mirror torproject\"",
            "line": 50,
            "match": {
              "location": "features/step_definitions/build.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 69876652
            }
          },
          {
            "keyword": "Then ",
            "name": "I should see a time-based snapshot",
            "line": 51,
            "match": {
              "location": "features/step_definitions/build.rb:155"
            },
            "result": {
              "status": "passed",
              "duration": 180117
            }
          },
          {
            "keyword": "When ",
            "name": "I successfully run \"apt-mirror debian-security\"",
            "line": 52,
            "match": {
              "location": "features/step_definitions/build.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 67577062
            }
          },
          {
            "keyword": "Then ",
            "name": "I should see a time-based snapshot",
            "line": 53,
            "match": {
              "location": "features/step_definitions/build.rb:155"
            },
            "result": {
              "status": "passed",
              "duration": 223808
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:555"
            },
            "result": {
              "status": "passed",
              "duration": 1715386
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:104"
            },
            "result": {
              "status": "passed",
              "duration": 6433
            }
          }
        ]
      },
      {
        "id": "custom-apt-sources-to-build-branches;build-from-a-tagged-stable-branch-where-the-config/apt_overlays.d-directory-is-empty",
        "keyword": "Scenario",
        "name": "build from a tagged stable branch where the config/APT_overlays.d directory is empty",
        "description": "",
        "line": 55,
        "type": "scenario",
        "tags": [
          {
            "name": "@source",
            "line": 1
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:270"
            },
            "result": {
              "status": "passed",
              "duration": 12583
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:548"
            },
            "result": {
              "status": "passed",
              "duration": 90771
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "Tails 0.10 has been released",
            "line": 56,
            "match": {
              "location": "features/step_definitions/build.rb:3"
            },
            "result": {
              "status": "passed",
              "duration": 32930377
            }
          },
          {
            "keyword": "And ",
            "name": "the last version mentioned in debian/changelog is 0.10",
            "line": 57,
            "match": {
              "location": "features/step_definitions/build.rb:38"
            },
            "result": {
              "status": "passed",
              "duration": 27064921
            }
          },
          {
            "keyword": "And ",
            "name": "I am working on the stable base branch",
            "line": 58,
            "match": {
              "location": "features/step_definitions/build.rb:73"
            },
            "result": {
              "status": "passed",
              "duration": 5080734
            }
          },
          {
            "keyword": "And ",
            "name": "I checkout the 0.10 tag",
            "line": 59,
            "match": {
              "location": "features/step_definitions/build.rb:83"
            },
            "result": {
              "status": "passed",
              "duration": 5769095
            }
          },
          {
            "keyword": "And ",
            "name": "the config/APT_overlays.d directory is empty",
            "line": 60,
            "match": {
              "location": "features/step_definitions/build.rb:126"
            },
            "result": {
              "status": "passed",
              "duration": 36910
            }
          },
          {
            "keyword": "When ",
            "name": "I successfully run tails-custom-apt-sources",
            "line": 61,
            "match": {
              "location": "features/step_definitions/build.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 70845428
            }
          },
          {
            "keyword": "Then ",
            "name": "I should see only the '0.10' suite",
            "line": 62,
            "match": {
              "location": "features/step_definitions/build.rb:117"
            },
            "result": {
              "status": "passed",
              "duration": 189364
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:555"
            },
            "result": {
              "status": "passed",
              "duration": 1085386
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:104"
            },
            "result": {
              "status": "passed",
              "duration": 6252
            }
          }
        ]
      },
      {
        "id": "custom-apt-sources-to-build-branches;build-from-a-tagged-stable-branch-where-config/apt_overlays.d-is-not-empty",
        "keyword": "Scenario",
        "name": "build from a tagged stable branch where config/APT_overlays.d is not empty",
        "description": "",
        "line": 64,
        "type": "scenario",
        "tags": [
          {
            "name": "@source",
            "line": 1
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:270"
            },
            "result": {
              "status": "passed",
              "duration": 12203
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:548"
            },
            "result": {
              "status": "passed",
              "duration": 72576
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "Tails 0.10 has been released",
            "line": 65,
            "match": {
              "location": "features/step_definitions/build.rb:3"
            },
            "result": {
              "status": "passed",
              "duration": 32054334
            }
          },
          {
            "keyword": "And ",
            "name": "the last version mentioned in debian/changelog is 0.10",
            "line": 66,
            "match": {
              "location": "features/step_definitions/build.rb:38"
            },
            "result": {
              "status": "passed",
              "duration": 25816209
            }
          },
          {
            "keyword": "And ",
            "name": "I am working on the stable base branch",
            "line": 67,
            "match": {
              "location": "features/step_definitions/build.rb:73"
            },
            "result": {
              "status": "passed",
              "duration": 3263218
            }
          },
          {
            "keyword": "And ",
            "name": "I checkout the 0.10 tag",
            "line": 68,
            "match": {
              "location": "features/step_definitions/build.rb:83"
            },
            "result": {
              "status": "passed",
              "duration": 3031915
            }
          },
          {
            "keyword": "And ",
            "name": "config/APT_overlays.d contains 'feature-foo'",
            "line": 69,
            "match": {
              "location": "features/step_definitions/build.rb:131"
            },
            "result": {
              "status": "passed",
              "duration": 52658
            }
          },
          {
            "keyword": "When ",
            "name": "I run tails-custom-apt-sources",
            "line": 70,
            "match": {
              "location": "features/step_definitions/build.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 35599300
            }
          },
          {
            "keyword": "Then ",
            "name": "it should fail",
            "line": 71,
            "match": {
              "location": "features/step_definitions/build.rb:135"
            },
            "result": {
              "status": "passed",
              "duration": 41719
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:555"
            },
            "result": {
              "status": "passed",
              "duration": 1317320
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:104"
            },
            "result": {
              "status": "passed",
              "duration": 6682
            }
          }
        ]
      },
      {
        "id": "custom-apt-sources-to-build-branches;build-from-a-tagged-stable-branch-with-no-encoded-time-based-snapshot",
        "keyword": "Scenario",
        "name": "build from a tagged stable branch with no encoded time-based snapshot",
        "description": "",
        "line": 73,
        "type": "scenario",
        "tags": [
          {
            "name": "@source",
            "line": 1
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:270"
            },
            "result": {
              "status": "passed",
              "duration": 11632
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:548"
            },
            "result": {
              "status": "passed",
              "duration": 86271
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I am working on the stable base branch",
            "line": 74,
            "match": {
              "location": "features/step_definitions/build.rb:73"
            },
            "result": {
              "status": "passed",
              "duration": 48157915
            }
          },
          {
            "keyword": "And ",
            "name": "Tails 0.10 has been released",
            "line": 75,
            "match": {
              "location": "features/step_definitions/build.rb:3"
            },
            "result": {
              "status": "passed",
              "duration": 25457206
            }
          },
          {
            "keyword": "And ",
            "name": "the last version mentioned in debian/changelog is 0.10",
            "line": 76,
            "match": {
              "location": "features/step_definitions/build.rb:38"
            },
            "result": {
              "status": "passed",
              "duration": 29111036
            }
          },
          {
            "keyword": "And ",
            "name": "no frozen APT snapshot is encoded in config/APT_snapshots.d",
            "line": 77,
            "match": {
              "location": "features/step_definitions/build.rb:53"
            },
            "result": {
              "status": "passed",
              "duration": 93245
            }
          },
          {
            "keyword": "And ",
            "name": "I checkout the 0.10 tag",
            "line": 78,
            "match": {
              "location": "features/step_definitions/build.rb:83"
            },
            "result": {
              "status": "passed",
              "duration": 6053819
            }
          },
          {
            "keyword": "When ",
            "name": "I successfully run \"apt-snapshots-serials prepare-build\"",
            "line": 79,
            "match": {
              "location": "features/step_definitions/build.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 978246157
            }
          },
          {
            "keyword": "And ",
            "name": "I run \"apt-mirror debian\"",
            "line": 80,
            "match": {
              "location": "features/step_definitions/build.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 9572396
            }
          },
          {
            "keyword": "Then ",
            "name": "it should fail",
            "line": 81,
            "match": {
              "location": "features/step_definitions/build.rb:135"
            },
            "result": {
              "status": "passed",
              "duration": 44063
            }
          },
          {
            "keyword": "When ",
            "name": "I run \"apt-mirror torproject\"",
            "line": 82,
            "match": {
              "location": "features/step_definitions/build.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 8468385
            }
          },
          {
            "keyword": "Then ",
            "name": "it should fail",
            "line": 83,
            "match": {
              "location": "features/step_definitions/build.rb:135"
            },
            "result": {
              "status": "passed",
              "duration": 34634
            }
          },
          {
            "keyword": "When ",
            "name": "I successfully run \"apt-mirror debian-security\"",
            "line": 84,
            "match": {
              "location": "features/step_definitions/build.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 69573854
            }
          },
          {
            "keyword": "Then ",
            "name": "I should see the 0.10 tagged snapshot",
            "line": 85,
            "match": {
              "location": "features/step_definitions/build.rb:151"
            },
            "result": {
              "status": "passed",
              "duration": 329839
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:555"
            },
            "result": {
              "status": "passed",
              "duration": 1570124
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:104"
            },
            "result": {
              "status": "passed",
              "duration": 15349
            }
          }
        ]
      },
      {
        "id": "custom-apt-sources-to-build-branches;build-from-a-tagged-stable-branch-with-encoded-time-based-snapshots",
        "keyword": "Scenario",
        "name": "build from a tagged stable branch with encoded time-based snapshots",
        "description": "",
        "line": 87,
        "type": "scenario",
        "tags": [
          {
            "name": "@source",
            "line": 1
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:270"
            },
            "result": {
              "status": "passed",
              "duration": 23273
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:548"
            },
            "result": {
              "status": "passed",
              "duration": 112050
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I am working on the stable base branch",
            "line": 88,
            "match": {
              "location": "features/step_definitions/build.rb:73"
            },
            "result": {
              "status": "passed",
              "duration": 61932879
            }
          },
          {
            "keyword": "And ",
            "name": "Tails 0.10 has been released",
            "line": 89,
            "match": {
              "location": "features/step_definitions/build.rb:3"
            },
            "result": {
              "status": "passed",
              "duration": 18303363
            }
          },
          {
            "keyword": "And ",
            "name": "the last version mentioned in debian/changelog is 0.10",
            "line": 90,
            "match": {
              "location": "features/step_definitions/build.rb:38"
            },
            "result": {
              "status": "passed",
              "duration": 30652326
            }
          },
          {
            "keyword": "And ",
            "name": "frozen APT snapshots are encoded in config/APT_snapshots.d",
            "line": 91,
            "match": {
              "location": "features/step_definitions/build.rb:61"
            },
            "result": {
              "status": "passed",
              "duration": 154861
            }
          },
          {
            "keyword": "And ",
            "name": "I checkout the 0.10 tag",
            "line": 92,
            "match": {
              "location": "features/step_definitions/build.rb:83"
            },
            "result": {
              "status": "passed",
              "duration": 5690119
            }
          },
          {
            "keyword": "When ",
            "name": "I successfully run \"apt-snapshots-serials prepare-build\"",
            "line": 93,
            "match": {
              "location": "features/step_definitions/build.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 978726951
            }
          },
          {
            "keyword": "And ",
            "name": "I successfully run \"apt-mirror debian\"",
            "line": 94,
            "match": {
              "location": "features/step_definitions/build.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 73276044
            }
          },
          {
            "keyword": "Then ",
            "name": "I should see the 0.10 tagged snapshot",
            "line": 95,
            "match": {
              "location": "features/step_definitions/build.rb:151"
            },
            "result": {
              "status": "passed",
              "duration": 230051
            }
          },
          {
            "keyword": "When ",
            "name": "I successfully run \"apt-mirror torproject\"",
            "line": 96,
            "match": {
              "location": "features/step_definitions/build.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 80451226
            }
          },
          {
            "keyword": "Then ",
            "name": "I should see the 0.10 tagged snapshot",
            "line": 97,
            "match": {
              "location": "features/step_definitions/build.rb:151"
            },
            "result": {
              "status": "passed",
              "duration": 229350
            }
          },
          {
            "keyword": "When ",
            "name": "I successfully run \"apt-mirror debian-security\"",
            "line": 98,
            "match": {
              "location": "features/step_definitions/build.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 76285007
            }
          },
          {
            "keyword": "Then ",
            "name": "I should see the 0.10 tagged snapshot",
            "line": 99,
            "match": {
              "location": "features/step_definitions/build.rb:151"
            },
            "result": {
              "status": "passed",
              "duration": 340398
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:555"
            },
            "result": {
              "status": "passed",
              "duration": 1598738
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:104"
            },
            "result": {
              "status": "passed",
              "duration": 14657
            }
          }
        ]
      },
      {
        "id": "custom-apt-sources-to-build-branches;build-from-a-bugfix-branch-without-overlays-for-a-stable-release",
        "keyword": "Scenario",
        "name": "build from a bugfix branch without overlays for a stable release",
        "description": "",
        "line": 101,
        "type": "scenario",
        "tags": [
          {
            "name": "@source",
            "line": 1
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:270"
            },
            "result": {
              "status": "passed",
              "duration": 15970
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:548"
            },
            "result": {
              "status": "passed",
              "duration": 116107
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "Tails 0.10 has been released",
            "line": 102,
            "match": {
              "location": "features/step_definitions/build.rb:3"
            },
            "result": {
              "status": "passed",
              "duration": 50033600
            }
          },
          {
            "keyword": "And ",
            "name": "the last version mentioned in debian/changelog is 0.10.1",
            "line": 103,
            "match": {
              "location": "features/step_definitions/build.rb:38"
            },
            "result": {
              "status": "passed",
              "duration": 90804877
            }
          },
          {
            "keyword": "And ",
            "name": "Tails 0.10.1 has not been released yet",
            "line": 104,
            "match": {
              "location": "features/step_definitions/build.rb:34"
            },
            "result": {
              "status": "passed",
              "duration": 66725
            }
          },
          {
            "keyword": "And ",
            "name": "I am working on the bugfix/disable_gdomap branch based on stable",
            "line": 105,
            "match": {
              "location": "features/step_definitions/build.rb:88"
            },
            "result": {
              "status": "passed",
              "duration": 13858020
            }
          },
          {
            "keyword": "And ",
            "name": "the config/APT_overlays.d directory is empty",
            "line": 106,
            "match": {
              "location": "features/step_definitions/build.rb:126"
            },
            "result": {
              "status": "passed",
              "duration": 67958
            }
          },
          {
            "keyword": "When ",
            "name": "I successfully run tails-custom-apt-sources",
            "line": 107,
            "match": {
              "location": "features/step_definitions/build.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 40500308
            }
          },
          {
            "keyword": "Then ",
            "name": "I should see only the 'stable' suite",
            "line": 108,
            "match": {
              "location": "features/step_definitions/build.rb:117"
            },
            "result": {
              "status": "passed",
              "duration": 205225
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:555"
            },
            "result": {
              "status": "passed",
              "duration": 1147641
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:104"
            },
            "result": {
              "status": "passed",
              "duration": 7034
            }
          }
        ]
      },
      {
        "id": "custom-apt-sources-to-build-branches;build-from-a-bugfix-branch-with-overlays-for-a-stable-release",
        "keyword": "Scenario",
        "name": "build from a bugfix branch with overlays for a stable release",
        "description": "",
        "line": 110,
        "type": "scenario",
        "tags": [
          {
            "name": "@source",
            "line": 1
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:270"
            },
            "result": {
              "status": "passed",
              "duration": 11883
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:548"
            },
            "result": {
              "status": "passed",
              "duration": 77716
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "Tails 0.10 has been released",
            "line": 111,
            "match": {
              "location": "features/step_definitions/build.rb:3"
            },
            "result": {
              "status": "passed",
              "duration": 94866362
            }
          },
          {
            "keyword": "And ",
            "name": "the last version mentioned in debian/changelog is 0.10.1",
            "line": 112,
            "match": {
              "location": "features/step_definitions/build.rb:38"
            },
            "result": {
              "status": "passed",
              "duration": 71998770
            }
          },
          {
            "keyword": "And ",
            "name": "Tails 0.10.1 has not been released yet",
            "line": 113,
            "match": {
              "location": "features/step_definitions/build.rb:34"
            },
            "result": {
              "status": "passed",
              "duration": 57579
            }
          },
          {
            "keyword": "And ",
            "name": "I am working on the bugfix/disable_gdomap branch based on stable",
            "line": 114,
            "match": {
              "location": "features/step_definitions/build.rb:88"
            },
            "result": {
              "status": "passed",
              "duration": 9128183
            }
          },
          {
            "keyword": "And ",
            "name": "config/APT_overlays.d contains 'bugfix-disable-gdomap'",
            "line": 115,
            "match": {
              "location": "features/step_definitions/build.rb:131"
            },
            "result": {
              "status": "passed",
              "duration": 99366
            }
          },
          {
            "keyword": "And ",
            "name": "config/APT_overlays.d contains 'bugfix-bar'",
            "line": 116,
            "match": {
              "location": "features/step_definitions/build.rb:131"
            },
            "result": {
              "status": "passed",
              "duration": 46687
            }
          },
          {
            "keyword": "When ",
            "name": "I successfully run tails-custom-apt-sources",
            "line": 117,
            "match": {
              "location": "features/step_definitions/build.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 38017314
            }
          },
          {
            "keyword": "Then ",
            "name": "I should see the 'stable' suite",
            "line": 118,
            "match": {
              "location": "features/step_definitions/build.rb:113"
            },
            "result": {
              "status": "passed",
              "duration": 240782
            }
          },
          {
            "keyword": "And ",
            "name": "I should see the 'bugfix-disable-gdomap' suite",
            "line": 119,
            "match": {
              "location": "features/step_definitions/build.rb:113"
            },
            "result": {
              "status": "passed",
              "duration": 149380
            }
          },
          {
            "keyword": "And ",
            "name": "I should see the 'bugfix-bar' suite",
            "line": 120,
            "match": {
              "location": "features/step_definitions/build.rb:113"
            },
            "result": {
              "status": "passed",
              "duration": 122029
            }
          },
          {
            "keyword": "But ",
            "name": "I should not see the '0.10' suite",
            "line": 121,
            "match": {
              "location": "features/step_definitions/build.rb:122"
            },
            "result": {
              "status": "passed",
              "duration": 104116
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:555"
            },
            "result": {
              "status": "passed",
              "duration": 1575675
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:104"
            },
            "result": {
              "status": "passed",
              "duration": 14297
            }
          }
        ]
      },
      {
        "id": "custom-apt-sources-to-build-branches;build-from-a-bugfix-branch-with-no-encoded-time-based-snapshot-for-a-stable-release",
        "keyword": "Scenario",
        "name": "build from a bugfix branch with no encoded time-based snapshot for a stable release",
        "description": "",
        "line": 123,
        "type": "scenario",
        "tags": [
          {
            "name": "@source",
            "line": 1
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:270"
            },
            "result": {
              "status": "passed",
              "duration": 14598
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:548"
            },
            "result": {
              "status": "passed",
              "duration": 107121
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "Tails 0.10 has been released",
            "line": 124,
            "match": {
              "location": "features/step_definitions/build.rb:3"
            },
            "result": {
              "status": "passed",
              "duration": 63876573
            }
          },
          {
            "keyword": "And ",
            "name": "the last version mentioned in debian/changelog is 0.10.1",
            "line": 125,
            "match": {
              "location": "features/step_definitions/build.rb:38"
            },
            "result": {
              "status": "passed",
              "duration": 109195857
            }
          },
          {
            "keyword": "And ",
            "name": "Tails 0.10.1 has not been released yet",
            "line": 126,
            "match": {
              "location": "features/step_definitions/build.rb:34"
            },
            "result": {
              "status": "passed",
              "duration": 49022
            }
          },
          {
            "keyword": "And ",
            "name": "I am working on the bugfix/disable_gdomap branch based on stable",
            "line": 127,
            "match": {
              "location": "features/step_definitions/build.rb:88"
            },
            "result": {
              "status": "passed",
              "duration": 14956339
            }
          },
          {
            "keyword": "And ",
            "name": "no frozen APT snapshot is encoded in config/APT_snapshots.d",
            "line": 128,
            "match": {
              "location": "features/step_definitions/build.rb:53"
            },
            "result": {
              "status": "passed",
              "duration": 69158
            }
          },
          {
            "keyword": "When ",
            "name": "I successfully run \"apt-snapshots-serials prepare-build\"",
            "line": 129,
            "match": {
              "location": "features/step_definitions/build.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 980068583
            }
          },
          {
            "keyword": "And ",
            "name": "I run \"apt-mirror debian\"",
            "line": 130,
            "match": {
              "location": "features/step_definitions/build.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 9112913
            }
          },
          {
            "keyword": "Then ",
            "name": "it should fail",
            "line": 131,
            "match": {
              "location": "features/step_definitions/build.rb:135"
            },
            "result": {
              "status": "passed",
              "duration": 42679
            }
          },
          {
            "keyword": "When ",
            "name": "I run \"apt-mirror torproject\"",
            "line": 132,
            "match": {
              "location": "features/step_definitions/build.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 8913832
            }
          },
          {
            "keyword": "Then ",
            "name": "it should fail",
            "line": 133,
            "match": {
              "location": "features/step_definitions/build.rb:135"
            },
            "result": {
              "status": "passed",
              "duration": 39133
            }
          },
          {
            "keyword": "When ",
            "name": "I successfully run \"apt-mirror debian-security\"",
            "line": 134,
            "match": {
              "location": "features/step_definitions/build.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 70931299
            }
          },
          {
            "keyword": "Then ",
            "name": "I should see a time-based snapshot",
            "line": 135,
            "match": {
              "location": "features/step_definitions/build.rb:155"
            },
            "result": {
              "status": "passed",
              "duration": 163987
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:555"
            },
            "result": {
              "status": "passed",
              "duration": 1309856
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:104"
            },
            "result": {
              "status": "passed",
              "duration": 10048
            }
          }
        ]
      },
      {
        "id": "custom-apt-sources-to-build-branches;build-from-a-bugfix-branch-with-encoded-time-based-snapshots-for-a-stable-release",
        "keyword": "Scenario",
        "name": "build from a bugfix branch with encoded time-based snapshots for a stable release",
        "description": "",
        "line": 137,
        "type": "scenario",
        "tags": [
          {
            "name": "@source",
            "line": 1
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:270"
            },
            "result": {
              "status": "passed",
              "duration": 11682
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:548"
            },
            "result": {
              "status": "passed",
              "duration": 86793
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "Tails 0.10 has been released",
            "line": 138,
            "match": {
              "location": "features/step_definitions/build.rb:3"
            },
            "result": {
              "status": "passed",
              "duration": 72912194
            }
          },
          {
            "keyword": "And ",
            "name": "the last version mentioned in debian/changelog is 0.10.1",
            "line": 139,
            "match": {
              "location": "features/step_definitions/build.rb:38"
            },
            "result": {
              "status": "passed",
              "duration": 80015049
            }
          },
          {
            "keyword": "And ",
            "name": "Tails 0.10.1 has not been released yet",
            "line": 140,
            "match": {
              "location": "features/step_definitions/build.rb:34"
            },
            "result": {
              "status": "passed",
              "duration": 51125
            }
          },
          {
            "keyword": "And ",
            "name": "I am working on the bugfix/disable_gdomap branch based on stable",
            "line": 141,
            "match": {
              "location": "features/step_definitions/build.rb:88"
            },
            "result": {
              "status": "passed",
              "duration": 11787428
            }
          },
          {
            "keyword": "And ",
            "name": "frozen APT snapshots are encoded in config/APT_snapshots.d",
            "line": 142,
            "match": {
              "location": "features/step_definitions/build.rb:61"
            },
            "result": {
              "status": "passed",
              "duration": 91772
            }
          },
          {
            "keyword": "When ",
            "name": "I successfully run \"apt-snapshots-serials prepare-build\"",
            "line": 143,
            "match": {
              "location": "features/step_definitions/build.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 982667877
            }
          },
          {
            "keyword": "And ",
            "name": "I successfully run \"apt-mirror debian\"",
            "line": 144,
            "match": {
              "location": "features/step_definitions/build.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 56588679
            }
          },
          {
            "keyword": "Then ",
            "name": "I should see a time-based snapshot",
            "line": 145,
            "match": {
              "location": "features/step_definitions/build.rb:155"
            },
            "result": {
              "status": "passed",
              "duration": 146624
            }
          },
          {
            "keyword": "When ",
            "name": "I successfully run \"apt-mirror torproject\"",
            "line": 146,
            "match": {
              "location": "features/step_definitions/build.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 70363655
            }
          },
          {
            "keyword": "Then ",
            "name": "I should see a time-based snapshot",
            "line": 147,
            "match": {
              "location": "features/step_definitions/build.rb:155"
            },
            "result": {
              "status": "passed",
              "duration": 183945
            }
          },
          {
            "keyword": "When ",
            "name": "I successfully run \"apt-mirror debian-security\"",
            "line": 148,
            "match": {
              "location": "features/step_definitions/build.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 78349898
            }
          },
          {
            "keyword": "Then ",
            "name": "I should see a time-based snapshot",
            "line": 149,
            "match": {
              "location": "features/step_definitions/build.rb:155"
            },
            "result": {
              "status": "passed",
              "duration": 244719
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:555"
            },
            "result": {
              "status": "passed",
              "duration": 2067467
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:104"
            },
            "result": {
              "status": "passed",
              "duration": 15839
            }
          }
        ]
      },
      {
        "id": "custom-apt-sources-to-build-branches;build-from-an-untagged-testing-branch-where-the-config/apt_overlays.d-directory-is-empty",
        "keyword": "Scenario",
        "name": "build from an untagged testing branch where the config/APT_overlays.d directory is empty",
        "description": "",
        "line": 151,
        "type": "scenario",
        "tags": [
          {
            "name": "@source",
            "line": 1
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:270"
            },
            "result": {
              "status": "passed",
              "duration": 16872
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:548"
            },
            "result": {
              "status": "passed",
              "duration": 111188
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I am working on the testing base branch",
            "line": 152,
            "match": {
              "location": "features/step_definitions/build.rb:73"
            },
            "result": {
              "status": "passed",
              "duration": 77991335
            }
          },
          {
            "keyword": "And ",
            "name": "the last version mentioned in debian/changelog is 0.11",
            "line": 153,
            "match": {
              "location": "features/step_definitions/build.rb:38"
            },
            "result": {
              "status": "passed",
              "duration": 91330191
            }
          },
          {
            "keyword": "And ",
            "name": "Tails 0.11 has not been released yet",
            "line": 154,
            "match": {
              "location": "features/step_definitions/build.rb:34"
            },
            "result": {
              "status": "passed",
              "duration": 135544
            }
          },
          {
            "keyword": "And ",
            "name": "the config/APT_overlays.d directory is empty",
            "line": 155,
            "match": {
              "location": "features/step_definitions/build.rb:126"
            },
            "result": {
              "status": "passed",
              "duration": 377919
            }
          },
          {
            "keyword": "When ",
            "name": "I successfully run tails-custom-apt-sources",
            "line": 156,
            "match": {
              "location": "features/step_definitions/build.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 76656794
            }
          },
          {
            "keyword": "Then ",
            "name": "I should see the 'testing' suite",
            "line": 157,
            "match": {
              "location": "features/step_definitions/build.rb:113"
            },
            "result": {
              "status": "passed",
              "duration": 227698
            }
          },
          {
            "keyword": "And ",
            "name": "I should not see the '0.11' suite",
            "line": 158,
            "match": {
              "location": "features/step_definitions/build.rb:122"
            },
            "result": {
              "status": "passed",
              "duration": 104465
            }
          },
          {
            "keyword": "And ",
            "name": "I should not see the 'feature-foo' suite",
            "line": 159,
            "match": {
              "location": "features/step_definitions/build.rb:122"
            },
            "result": {
              "status": "passed",
              "duration": 71122
            }
          },
          {
            "keyword": "And ",
            "name": "I should not see the 'bugfix-bar' suite",
            "line": 160,
            "match": {
              "location": "features/step_definitions/build.rb:122"
            },
            "result": {
              "status": "passed",
              "duration": 67076
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:555"
            },
            "result": {
              "status": "passed",
              "duration": 1287053
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:104"
            },
            "result": {
              "status": "passed",
              "duration": 7775
            }
          }
        ]
      },
      {
        "id": "custom-apt-sources-to-build-branches;build-from-an-untagged-testing-branch-where-config/apt_overlays.d-is-not-empty",
        "keyword": "Scenario",
        "name": "build from an untagged testing branch where config/APT_overlays.d is not empty",
        "description": "",
        "line": 162,
        "type": "scenario",
        "tags": [
          {
            "name": "@source",
            "line": 1
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:270"
            },
            "result": {
              "status": "passed",
              "duration": 12554
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:548"
            },
            "result": {
              "status": "passed",
              "duration": 126867
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I am working on the testing base branch",
            "line": 163,
            "match": {
              "location": "features/step_definitions/build.rb:73"
            },
            "result": {
              "status": "passed",
              "duration": 44842709
            }
          },
          {
            "keyword": "And ",
            "name": "the last version mentioned in debian/changelog is 0.11",
            "line": 164,
            "match": {
              "location": "features/step_definitions/build.rb:38"
            },
            "result": {
              "status": "passed",
              "duration": 95253878
            }
          },
          {
            "keyword": "And ",
            "name": "Tails 0.11 has not been released yet",
            "line": 165,
            "match": {
              "location": "features/step_definitions/build.rb:34"
            },
            "result": {
              "status": "passed",
              "duration": 132439
            }
          },
          {
            "keyword": "And ",
            "name": "config/APT_overlays.d contains 'feature-foo'",
            "line": 166,
            "match": {
              "location": "features/step_definitions/build.rb:131"
            },
            "result": {
              "status": "passed",
              "duration": 2871874
            }
          },
          {
            "keyword": "And ",
            "name": "config/APT_overlays.d contains 'bugfix-bar'",
            "line": 167,
            "match": {
              "location": "features/step_definitions/build.rb:131"
            },
            "result": {
              "status": "passed",
              "duration": 60513
            }
          },
          {
            "keyword": "When ",
            "name": "I successfully run tails-custom-apt-sources",
            "line": 168,
            "match": {
              "location": "features/step_definitions/build.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 99542157
            }
          },
          {
            "keyword": "Then ",
            "name": "I should see the 'testing' suite",
            "line": 169,
            "match": {
              "location": "features/step_definitions/build.rb:113"
            },
            "result": {
              "status": "passed",
              "duration": 830768
            }
          },
          {
            "keyword": "And ",
            "name": "I should see the 'feature-foo' suite",
            "line": 170,
            "match": {
              "location": "features/step_definitions/build.rb:113"
            },
            "result": {
              "status": "passed",
              "duration": 163948
            }
          },
          {
            "keyword": "And ",
            "name": "I should see the 'bugfix-bar' suite",
            "line": 171,
            "match": {
              "location": "features/step_definitions/build.rb:113"
            },
            "result": {
              "status": "passed",
              "duration": 156324
            }
          },
          {
            "keyword": "But ",
            "name": "I should not see the '0.11' suite",
            "line": 172,
            "match": {
              "location": "features/step_definitions/build.rb:122"
            },
            "result": {
              "status": "passed",
              "duration": 155662
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:555"
            },
            "result": {
              "status": "passed",
              "duration": 2884146
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:104"
            },
            "result": {
              "status": "passed",
              "duration": 51778
            }
          }
        ]
      },
      {
        "id": "custom-apt-sources-to-build-branches;build-from-an-untagged-testing-branch-with-no-encoded-time-based-snapshot",
        "keyword": "Scenario",
        "name": "build from an untagged testing branch with no encoded time-based snapshot",
        "description": "",
        "line": 174,
        "type": "scenario",
        "tags": [
          {
            "name": "@source",
            "line": 1
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:270"
            },
            "result": {
              "status": "passed",
              "duration": 37761
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:548"
            },
            "result": {
              "status": "passed",
              "duration": 473458
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I am working on the testing base branch",
            "line": 175,
            "match": {
              "location": "features/step_definitions/build.rb:73"
            },
            "result": {
              "status": "passed",
              "duration": 221958880
            }
          },
          {
            "keyword": "And ",
            "name": "Tails 0.10 has been released",
            "line": 176,
            "match": {
              "location": "features/step_definitions/build.rb:3"
            },
            "result": {
              "status": "passed",
              "duration": 38361208
            }
          },
          {
            "keyword": "And ",
            "name": "the last versions mentioned in debian/changelog are 0.10 and 1.0",
            "line": 177,
            "match": {
              "location": "features/step_definitions/build.rb:48"
            },
            "result": {
              "status": "passed",
              "duration": 147580759
            }
          },
          {
            "keyword": "And ",
            "name": "Tails 1.0 has not been released yet",
            "line": 178,
            "match": {
              "location": "features/step_definitions/build.rb:34"
            },
            "result": {
              "status": "passed",
              "duration": 121959
            }
          },
          {
            "keyword": "And ",
            "name": "no frozen APT snapshot is encoded in config/APT_snapshots.d",
            "line": 179,
            "match": {
              "location": "features/step_definitions/build.rb:53"
            },
            "result": {
              "status": "passed",
              "duration": 223068
            }
          },
          {
            "keyword": "When ",
            "name": "I successfully run \"apt-snapshots-serials prepare-build\"",
            "line": 180,
            "match": {
              "location": "features/step_definitions/build.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 987316663
            }
          },
          {
            "keyword": "And ",
            "name": "I run \"apt-mirror debian\"",
            "line": 181,
            "match": {
              "location": "features/step_definitions/build.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 7402249
            }
          },
          {
            "keyword": "Then ",
            "name": "it should fail",
            "line": 182,
            "match": {
              "location": "features/step_definitions/build.rb:135"
            },
            "result": {
              "status": "passed",
              "duration": 30557
            }
          },
          {
            "keyword": "When ",
            "name": "I run \"apt-mirror torproject\"",
            "line": 183,
            "match": {
              "location": "features/step_definitions/build.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 5696249
            }
          },
          {
            "keyword": "Then ",
            "name": "it should fail",
            "line": 184,
            "match": {
              "location": "features/step_definitions/build.rb:135"
            },
            "result": {
              "status": "passed",
              "duration": 13757
            }
          },
          {
            "keyword": "When ",
            "name": "I successfully run \"apt-mirror debian-security\"",
            "line": 185,
            "match": {
              "location": "features/step_definitions/build.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 31786912
            }
          },
          {
            "keyword": "Then ",
            "name": "I should see a time-based snapshot",
            "line": 186,
            "match": {
              "location": "features/step_definitions/build.rb:155"
            },
            "result": {
              "status": "passed",
              "duration": 155041
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:555"
            },
            "result": {
              "status": "passed",
              "duration": 1239283
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:104"
            },
            "result": {
              "status": "passed",
              "duration": 7064
            }
          }
        ]
      },
      {
        "id": "custom-apt-sources-to-build-branches;build-from-an-untagged-testing-branch-with-encoded-time-based-snapshots",
        "keyword": "Scenario",
        "name": "build from an untagged testing branch with encoded time-based snapshots",
        "description": "",
        "line": 188,
        "type": "scenario",
        "tags": [
          {
            "name": "@source",
            "line": 1
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:270"
            },
            "result": {
              "status": "passed",
              "duration": 11622
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:548"
            },
            "result": {
              "status": "passed",
              "duration": 91242
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I am working on the testing base branch",
            "line": 189,
            "match": {
              "location": "features/step_definitions/build.rb:73"
            },
            "result": {
              "status": "passed",
              "duration": 29883865
            }
          },
          {
            "keyword": "And ",
            "name": "Tails 0.10 has been released",
            "line": 190,
            "match": {
              "location": "features/step_definitions/build.rb:3"
            },
            "result": {
              "status": "passed",
              "duration": 60832988
            }
          },
          {
            "keyword": "And ",
            "name": "the last versions mentioned in debian/changelog are 0.10 and 1.0",
            "line": 191,
            "match": {
              "location": "features/step_definitions/build.rb:48"
            },
            "result": {
              "status": "passed",
              "duration": 117104303
            }
          },
          {
            "keyword": "And ",
            "name": "Tails 1.0 has not been released yet",
            "line": 192,
            "match": {
              "location": "features/step_definitions/build.rb:34"
            },
            "result": {
              "status": "passed",
              "duration": 45165
            }
          },
          {
            "keyword": "And ",
            "name": "frozen APT snapshots are encoded in config/APT_snapshots.d",
            "line": 193,
            "match": {
              "location": "features/step_definitions/build.rb:61"
            },
            "result": {
              "status": "passed",
              "duration": 117710
            }
          },
          {
            "keyword": "When ",
            "name": "I successfully run \"apt-snapshots-serials prepare-build\"",
            "line": 194,
            "match": {
              "location": "features/step_definitions/build.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 1006118472
            }
          },
          {
            "keyword": "And ",
            "name": "I successfully run \"apt-mirror debian\"",
            "line": 195,
            "match": {
              "location": "features/step_definitions/build.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 42991228
            }
          },
          {
            "keyword": "Then ",
            "name": "I should see a time-based snapshot",
            "line": 196,
            "match": {
              "location": "features/step_definitions/build.rb:155"
            },
            "result": {
              "status": "passed",
              "duration": 158827
            }
          },
          {
            "keyword": "When ",
            "name": "I successfully run \"apt-mirror torproject\"",
            "line": 197,
            "match": {
              "location": "features/step_definitions/build.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 36719712
            }
          },
          {
            "keyword": "Then ",
            "name": "I should see a time-based snapshot",
            "line": 198,
            "match": {
              "location": "features/step_definitions/build.rb:155"
            },
            "result": {
              "status": "passed",
              "duration": 147545
            }
          },
          {
            "keyword": "When ",
            "name": "I successfully run \"apt-mirror debian-security\"",
            "line": 199,
            "match": {
              "location": "features/step_definitions/build.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 37627632
            }
          },
          {
            "keyword": "Then ",
            "name": "I should see a time-based snapshot",
            "line": 200,
            "match": {
              "location": "features/step_definitions/build.rb:155"
            },
            "result": {
              "status": "passed",
              "duration": 160150
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:555"
            },
            "result": {
              "status": "passed",
              "duration": 1546349
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:104"
            },
            "result": {
              "status": "passed",
              "duration": 7054
            }
          }
        ]
      },
      {
        "id": "custom-apt-sources-to-build-branches;build-from-a-tagged-testing-branch-where-the-config/apt_overlays.d-directory-is-empty",
        "keyword": "Scenario",
        "name": "build from a tagged testing branch where the config/APT_overlays.d directory is empty",
        "description": "",
        "line": 202,
        "type": "scenario",
        "tags": [
          {
            "name": "@source",
            "line": 1
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:270"
            },
            "result": {
              "status": "passed",
              "duration": 11551
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:548"
            },
            "result": {
              "status": "passed",
              "duration": 91100
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I am working on the testing base branch",
            "line": 203,
            "match": {
              "location": "features/step_definitions/build.rb:73"
            },
            "result": {
              "status": "passed",
              "duration": 56809954
            }
          },
          {
            "keyword": "And ",
            "name": "the last version mentioned in debian/changelog is 0.11",
            "line": 204,
            "match": {
              "location": "features/step_definitions/build.rb:38"
            },
            "result": {
              "status": "passed",
              "duration": 81004315
            }
          },
          {
            "keyword": "And ",
            "name": "Tails 0.11 has been released",
            "line": 205,
            "match": {
              "location": "features/step_definitions/build.rb:3"
            },
            "result": {
              "status": "passed",
              "duration": 26554423
            }
          },
          {
            "keyword": "And ",
            "name": "the config/APT_overlays.d directory is empty",
            "line": 206,
            "match": {
              "location": "features/step_definitions/build.rb:126"
            },
            "result": {
              "status": "passed",
              "duration": 70062
            }
          },
          {
            "keyword": "And ",
            "name": "I checkout the 0.11 tag",
            "line": 207,
            "match": {
              "location": "features/step_definitions/build.rb:83"
            },
            "result": {
              "status": "passed",
              "duration": 2292388
            }
          },
          {
            "keyword": "When ",
            "name": "I successfully run tails-custom-apt-sources",
            "line": 208,
            "match": {
              "location": "features/step_definitions/build.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 60939247
            }
          },
          {
            "keyword": "Then ",
            "name": "I should see only the '0.11' suite",
            "line": 209,
            "match": {
              "location": "features/step_definitions/build.rb:117"
            },
            "result": {
              "status": "passed",
              "duration": 179356
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:555"
            },
            "result": {
              "status": "passed",
              "duration": 1050329
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:104"
            },
            "result": {
              "status": "passed",
              "duration": 6301
            }
          }
        ]
      },
      {
        "id": "custom-apt-sources-to-build-branches;build-from-a-tagged-testing-branch-where-config/apt_overlays.d-is-not-empty",
        "keyword": "Scenario",
        "name": "build from a tagged testing branch where config/APT_overlays.d is not empty",
        "description": "",
        "line": 211,
        "type": "scenario",
        "tags": [
          {
            "name": "@source",
            "line": 1
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:270"
            },
            "result": {
              "status": "passed",
              "duration": 14066
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:548"
            },
            "result": {
              "status": "passed",
              "duration": 81854
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I am working on the testing base branch",
            "line": 212,
            "match": {
              "location": "features/step_definitions/build.rb:73"
            },
            "result": {
              "status": "passed",
              "duration": 76813276
            }
          },
          {
            "keyword": "And ",
            "name": "the last version mentioned in debian/changelog is 0.11",
            "line": 213,
            "match": {
              "location": "features/step_definitions/build.rb:38"
            },
            "result": {
              "status": "passed",
              "duration": 95411645
            }
          },
          {
            "keyword": "And ",
            "name": "Tails 0.11 has been released",
            "line": 214,
            "match": {
              "location": "features/step_definitions/build.rb:3"
            },
            "result": {
              "status": "passed",
              "duration": 39071160
            }
          },
          {
            "keyword": "And ",
            "name": "config/APT_overlays.d contains 'feature-foo'",
            "line": 215,
            "match": {
              "location": "features/step_definitions/build.rb:131"
            },
            "result": {
              "status": "passed",
              "duration": 64952
            }
          },
          {
            "keyword": "And ",
            "name": "I checkout the 0.11 tag",
            "line": 216,
            "match": {
              "location": "features/step_definitions/build.rb:83"
            },
            "result": {
              "status": "passed",
              "duration": 6944490
            }
          },
          {
            "keyword": "When ",
            "name": "I run tails-custom-apt-sources",
            "line": 217,
            "match": {
              "location": "features/step_definitions/build.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 44834374
            }
          },
          {
            "keyword": "Then ",
            "name": "it should fail",
            "line": 218,
            "match": {
              "location": "features/step_definitions/build.rb:135"
            },
            "result": {
              "status": "passed",
              "duration": 59631
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:555"
            },
            "result": {
              "status": "passed",
              "duration": 1747586
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:104"
            },
            "result": {
              "status": "passed",
              "duration": 16721
            }
          }
        ]
      },
      {
        "id": "custom-apt-sources-to-build-branches;build-from-a-tagged-testing-branch-with-no-encoded-time-based-snapshot",
        "keyword": "Scenario",
        "name": "build from a tagged testing branch with no encoded time-based snapshot",
        "description": "",
        "line": 220,
        "type": "scenario",
        "tags": [
          {
            "name": "@source",
            "line": 1
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:270"
            },
            "result": {
              "status": "passed",
              "duration": 20529
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:548"
            },
            "result": {
              "status": "passed",
              "duration": 209914
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I am working on the testing base branch",
            "line": 221,
            "match": {
              "location": "features/step_definitions/build.rb:73"
            },
            "result": {
              "status": "passed",
              "duration": 50125765
            }
          },
          {
            "keyword": "And ",
            "name": "the last version mentioned in debian/changelog is 0.11",
            "line": 222,
            "match": {
              "location": "features/step_definitions/build.rb:38"
            },
            "result": {
              "status": "passed",
              "duration": 74507604
            }
          },
          {
            "keyword": "And ",
            "name": "Tails 0.11 has been released",
            "line": 223,
            "match": {
              "location": "features/step_definitions/build.rb:3"
            },
            "result": {
              "status": "passed",
              "duration": 30384504
            }
          },
          {
            "keyword": "And ",
            "name": "no frozen APT snapshot is encoded in config/APT_snapshots.d",
            "line": 224,
            "match": {
              "location": "features/step_definitions/build.rb:53"
            },
            "result": {
              "status": "passed",
              "duration": 95761
            }
          },
          {
            "keyword": "And ",
            "name": "I checkout the 0.11 tag",
            "line": 225,
            "match": {
              "location": "features/step_definitions/build.rb:83"
            },
            "result": {
              "status": "passed",
              "duration": 6957114
            }
          },
          {
            "keyword": "When ",
            "name": "I successfully run \"apt-snapshots-serials prepare-build\"",
            "line": 226,
            "match": {
              "location": "features/step_definitions/build.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 978551280
            }
          },
          {
            "keyword": "And ",
            "name": "I run \"apt-mirror debian\"",
            "line": 227,
            "match": {
              "location": "features/step_definitions/build.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 6465301
            }
          },
          {
            "keyword": "Then ",
            "name": "it should fail",
            "line": 228,
            "match": {
              "location": "features/step_definitions/build.rb:135"
            },
            "result": {
              "status": "passed",
              "duration": 30768
            }
          },
          {
            "keyword": "When ",
            "name": "I run \"apt-mirror torproject\"",
            "line": 229,
            "match": {
              "location": "features/step_definitions/build.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 6132124
            }
          },
          {
            "keyword": "Then ",
            "name": "it should fail",
            "line": 230,
            "match": {
              "location": "features/step_definitions/build.rb:135"
            },
            "result": {
              "status": "passed",
              "duration": 13295
            }
          },
          {
            "keyword": "When ",
            "name": "I successfully run \"apt-mirror debian-security\"",
            "line": 231,
            "match": {
              "location": "features/step_definitions/build.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 65627296
            }
          },
          {
            "keyword": "Then ",
            "name": "I should see the 0.11 tagged snapshot",
            "line": 232,
            "match": {
              "location": "features/step_definitions/build.rb:151"
            },
            "result": {
              "status": "passed",
              "duration": 183153
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:555"
            },
            "result": {
              "status": "passed",
              "duration": 1855698
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:104"
            },
            "result": {
              "status": "passed",
              "duration": 19486
            }
          }
        ]
      },
      {
        "id": "custom-apt-sources-to-build-branches;build-from-a-tagged-testing-branch-with-encoded-time-based-snapshots",
        "keyword": "Scenario",
        "name": "build from a tagged testing branch with encoded time-based snapshots",
        "description": "",
        "line": 234,
        "type": "scenario",
        "tags": [
          {
            "name": "@source",
            "line": 1
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:270"
            },
            "result": {
              "status": "passed",
              "duration": 14968
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:548"
            },
            "result": {
              "status": "passed",
              "duration": 87764
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I am working on the testing base branch",
            "line": 235,
            "match": {
              "location": "features/step_definitions/build.rb:73"
            },
            "result": {
              "status": "passed",
              "duration": 37461912
            }
          },
          {
            "keyword": "And ",
            "name": "the last version mentioned in debian/changelog is 0.11",
            "line": 236,
            "match": {
              "location": "features/step_definitions/build.rb:38"
            },
            "result": {
              "status": "passed",
              "duration": 69766587
            }
          },
          {
            "keyword": "And ",
            "name": "Tails 0.11 has been released",
            "line": 237,
            "match": {
              "location": "features/step_definitions/build.rb:3"
            },
            "result": {
              "status": "passed",
              "duration": 30617240
            }
          },
          {
            "keyword": "And ",
            "name": "frozen APT snapshots are encoded in config/APT_snapshots.d",
            "line": 238,
            "match": {
              "location": "features/step_definitions/build.rb:61"
            },
            "result": {
              "status": "passed",
              "duration": 67737
            }
          },
          {
            "keyword": "And ",
            "name": "I checkout the 0.11 tag",
            "line": 239,
            "match": {
              "location": "features/step_definitions/build.rb:83"
            },
            "result": {
              "status": "passed",
              "duration": 2426369
            }
          },
          {
            "keyword": "When ",
            "name": "I successfully run \"apt-snapshots-serials prepare-build\"",
            "line": 240,
            "match": {
              "location": "features/step_definitions/build.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 980905863
            }
          },
          {
            "keyword": "And ",
            "name": "I successfully run \"apt-mirror debian\"",
            "line": 241,
            "match": {
              "location": "features/step_definitions/build.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 67544982
            }
          },
          {
            "keyword": "Then ",
            "name": "I should see the 0.11 tagged snapshot",
            "line": 242,
            "match": {
              "location": "features/step_definitions/build.rb:151"
            },
            "result": {
              "status": "passed",
              "duration": 181561
            }
          },
          {
            "keyword": "When ",
            "name": "I successfully run \"apt-mirror torproject\"",
            "line": 243,
            "match": {
              "location": "features/step_definitions/build.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 74935166
            }
          },
          {
            "keyword": "Then ",
            "name": "I should see the 0.11 tagged snapshot",
            "line": 244,
            "match": {
              "location": "features/step_definitions/build.rb:151"
            },
            "result": {
              "status": "passed",
              "duration": 138740
            }
          },
          {
            "keyword": "When ",
            "name": "I successfully run \"apt-mirror debian-security\"",
            "line": 245,
            "match": {
              "location": "features/step_definitions/build.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 59092134
            }
          },
          {
            "keyword": "Then ",
            "name": "I should see the 0.11 tagged snapshot",
            "line": 246,
            "match": {
              "location": "features/step_definitions/build.rb:151"
            },
            "result": {
              "status": "passed",
              "duration": 168215
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:555"
            },
            "result": {
              "status": "passed",
              "duration": 1791879
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:104"
            },
            "result": {
              "status": "passed",
              "duration": 8726
            }
          }
        ]
      },
      {
        "id": "custom-apt-sources-to-build-branches;build-a-release-candidate-from-a-tagged-testing-branch",
        "keyword": "Scenario",
        "name": "build a release candidate from a tagged testing branch",
        "description": "",
        "line": 248,
        "type": "scenario",
        "tags": [
          {
            "name": "@source",
            "line": 1
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:270"
            },
            "result": {
              "status": "passed",
              "duration": 11722
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:548"
            },
            "result": {
              "status": "passed",
              "duration": 75061
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I am working on the testing base branch",
            "line": 249,
            "match": {
              "location": "features/step_definitions/build.rb:73"
            },
            "result": {
              "status": "passed",
              "duration": 27507560
            }
          },
          {
            "keyword": "And ",
            "name": "Tails 0.11 has been released",
            "line": 250,
            "match": {
              "location": "features/step_definitions/build.rb:3"
            },
            "result": {
              "status": "passed",
              "duration": 44177402
            }
          },
          {
            "keyword": "And ",
            "name": "the last version mentioned in debian/changelog is 0.12~rc1",
            "line": 251,
            "match": {
              "location": "features/step_definitions/build.rb:38"
            },
            "result": {
              "status": "passed",
              "duration": 79655534
            }
          },
          {
            "keyword": "And ",
            "name": "Tails 0.12-rc1 has been tagged",
            "line": 252,
            "match": {
              "location": "features/step_definitions/build.rb:30"
            },
            "result": {
              "status": "passed",
              "duration": 3750421
            }
          },
          {
            "keyword": "And ",
            "name": "the config/APT_overlays.d directory is empty",
            "line": 253,
            "match": {
              "location": "features/step_definitions/build.rb:126"
            },
            "result": {
              "status": "passed",
              "duration": 817923
            }
          },
          {
            "keyword": "And ",
            "name": "I checkout the 0.12-rc1 tag",
            "line": 254,
            "match": {
              "location": "features/step_definitions/build.rb:83"
            },
            "result": {
              "status": "passed",
              "duration": 3422486
            }
          },
          {
            "keyword": "When ",
            "name": "I successfully run tails-custom-apt-sources",
            "line": 255,
            "match": {
              "location": "features/step_definitions/build.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 57574038
            }
          },
          {
            "keyword": "Then ",
            "name": "I should see only the '0.12-rc1' suite",
            "line": 256,
            "match": {
              "location": "features/step_definitions/build.rb:117"
            },
            "result": {
              "status": "passed",
              "duration": 243686
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:555"
            },
            "result": {
              "status": "passed",
              "duration": 1665433
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:104"
            },
            "result": {
              "status": "passed",
              "duration": 7634
            }
          }
        ]
      },
      {
        "id": "custom-apt-sources-to-build-branches;build-a-release-candidate-from-a-tagged-testing-branch-where-config/apt_overlays.d-is-not-empty",
        "keyword": "Scenario",
        "name": "build a release candidate from a tagged testing branch where config/APT_overlays.d is not empty",
        "description": "",
        "line": 258,
        "type": "scenario",
        "tags": [
          {
            "name": "@source",
            "line": 1
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:270"
            },
            "result": {
              "status": "passed",
              "duration": 17031
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:548"
            },
            "result": {
              "status": "passed",
              "duration": 343463
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I am working on the testing base branch",
            "line": 259,
            "match": {
              "location": "features/step_definitions/build.rb:73"
            },
            "result": {
              "status": "passed",
              "duration": 28702591
            }
          },
          {
            "keyword": "And ",
            "name": "Tails 0.11 has been released",
            "line": 260,
            "match": {
              "location": "features/step_definitions/build.rb:3"
            },
            "result": {
              "status": "passed",
              "duration": 17592922
            }
          },
          {
            "keyword": "And ",
            "name": "the last version mentioned in debian/changelog is 0.12~rc1",
            "line": 261,
            "match": {
              "location": "features/step_definitions/build.rb:38"
            },
            "result": {
              "status": "passed",
              "duration": 92174003
            }
          },
          {
            "keyword": "And ",
            "name": "Tails 0.12-rc1 has been tagged",
            "line": 262,
            "match": {
              "location": "features/step_definitions/build.rb:30"
            },
            "result": {
              "status": "passed",
              "duration": 5383975
            }
          },
          {
            "keyword": "And ",
            "name": "config/APT_overlays.d contains 'bugfix-bar'",
            "line": 263,
            "match": {
              "location": "features/step_definitions/build.rb:131"
            },
            "result": {
              "status": "passed",
              "duration": 342121
            }
          },
          {
            "keyword": "And ",
            "name": "I checkout the 0.12-rc1 tag",
            "line": 264,
            "match": {
              "location": "features/step_definitions/build.rb:83"
            },
            "result": {
              "status": "passed",
              "duration": 7515400
            }
          },
          {
            "keyword": "When ",
            "name": "I run tails-custom-apt-sources",
            "line": 265,
            "match": {
              "location": "features/step_definitions/build.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 44110737
            }
          },
          {
            "keyword": "Then ",
            "name": "it should fail",
            "line": 266,
            "match": {
              "location": "features/step_definitions/build.rb:135"
            },
            "result": {
              "status": "passed",
              "duration": 34374
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:555"
            },
            "result": {
              "status": "passed",
              "duration": 1209146
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:104"
            },
            "result": {
              "status": "passed",
              "duration": 6231
            }
          }
        ]
      },
      {
        "id": "custom-apt-sources-to-build-branches;build-from-a-bugfix-branch-with-no-encoded-time-based-snapshot-for-a-major-release",
        "keyword": "Scenario",
        "name": "build from a bugfix branch with no encoded time-based snapshot for a major release",
        "description": "",
        "line": 268,
        "type": "scenario",
        "tags": [
          {
            "name": "@source",
            "line": 1
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:270"
            },
            "result": {
              "status": "passed",
              "duration": 13405
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:548"
            },
            "result": {
              "status": "passed",
              "duration": 72936
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I am working on the testing base branch",
            "line": 269,
            "match": {
              "location": "features/step_definitions/build.rb:73"
            },
            "result": {
              "status": "passed",
              "duration": 66769588
            }
          },
          {
            "keyword": "And ",
            "name": "Tails 0.10~rc1 has been released",
            "line": 270,
            "match": {
              "location": "features/step_definitions/build.rb:3"
            },
            "result": {
              "status": "passed",
              "duration": 30598906
            }
          },
          {
            "keyword": "And ",
            "name": "the last versions mentioned in debian/changelog are 0.10~rc1 and 0.10",
            "line": 271,
            "match": {
              "location": "features/step_definitions/build.rb:48"
            },
            "result": {
              "status": "passed",
              "duration": 129697551
            }
          },
          {
            "keyword": "And ",
            "name": "Tails 0.10 has not been released yet",
            "line": 272,
            "match": {
              "location": "features/step_definitions/build.rb:34"
            },
            "result": {
              "status": "passed",
              "duration": 62557
            }
          },
          {
            "keyword": "And ",
            "name": "I am working on the bugfix/disable_gdomap branch based on testing",
            "line": 273,
            "match": {
              "location": "features/step_definitions/build.rb:88"
            },
            "result": {
              "status": "passed",
              "duration": 9643179
            }
          },
          {
            "keyword": "And ",
            "name": "no frozen APT snapshot is encoded in config/APT_snapshots.d",
            "line": 274,
            "match": {
              "location": "features/step_definitions/build.rb:53"
            },
            "result": {
              "status": "passed",
              "duration": 132107
            }
          },
          {
            "keyword": "When ",
            "name": "I successfully run \"apt-snapshots-serials prepare-build\"",
            "line": 275,
            "match": {
              "location": "features/step_definitions/build.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 979725363
            }
          },
          {
            "keyword": "And ",
            "name": "I run \"apt-mirror debian\"",
            "line": 276,
            "match": {
              "location": "features/step_definitions/build.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 10080138
            }
          },
          {
            "keyword": "Then ",
            "name": "it should fail",
            "line": 277,
            "match": {
              "location": "features/step_definitions/build.rb:135"
            },
            "result": {
              "status": "passed",
              "duration": 49704
            }
          },
          {
            "keyword": "When ",
            "name": "I run \"apt-mirror torproject\"",
            "line": 278,
            "match": {
              "location": "features/step_definitions/build.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 9943462
            }
          },
          {
            "keyword": "Then ",
            "name": "it should fail",
            "line": 279,
            "match": {
              "location": "features/step_definitions/build.rb:135"
            },
            "result": {
              "status": "passed",
              "duration": 27703
            }
          },
          {
            "keyword": "When ",
            "name": "I successfully run \"apt-mirror debian-security\"",
            "line": 280,
            "match": {
              "location": "features/step_definitions/build.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 35756725
            }
          },
          {
            "keyword": "Then ",
            "name": "I should see a time-based snapshot",
            "line": 281,
            "match": {
              "location": "features/step_definitions/build.rb:155"
            },
            "result": {
              "status": "passed",
              "duration": 246582
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:555"
            },
            "result": {
              "status": "passed",
              "duration": 1969462
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:104"
            },
            "result": {
              "status": "passed",
              "duration": 10931
            }
          }
        ]
      },
      {
        "id": "custom-apt-sources-to-build-branches;build-from-a-bugfix-branch-with-encoded-time-based-snapshots-for-a-major-release",
        "keyword": "Scenario",
        "name": "build from a bugfix branch with encoded time-based snapshots for a major release",
        "description": "",
        "line": 283,
        "type": "scenario",
        "tags": [
          {
            "name": "@source",
            "line": 1
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:270"
            },
            "result": {
              "status": "passed",
              "duration": 17644
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:548"
            },
            "result": {
              "status": "passed",
              "duration": 193112
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I am working on the testing base branch",
            "line": 284,
            "match": {
              "location": "features/step_definitions/build.rb:73"
            },
            "result": {
              "status": "passed",
              "duration": 53495522
            }
          },
          {
            "keyword": "And ",
            "name": "Tails 0.10~rc1 has been released",
            "line": 285,
            "match": {
              "location": "features/step_definitions/build.rb:3"
            },
            "result": {
              "status": "passed",
              "duration": 19236293
            }
          },
          {
            "keyword": "And ",
            "name": "the last versions mentioned in debian/changelog are 0.10~rc1 and 0.10",
            "line": 286,
            "match": {
              "location": "features/step_definitions/build.rb:48"
            },
            "result": {
              "status": "passed",
              "duration": 114310674
            }
          },
          {
            "keyword": "And ",
            "name": "Tails 0.10 has not been released yet",
            "line": 287,
            "match": {
              "location": "features/step_definitions/build.rb:34"
            },
            "result": {
              "status": "passed",
              "duration": 50294
            }
          },
          {
            "keyword": "And ",
            "name": "I am working on the bugfix/disable_gdomap branch based on testing",
            "line": 288,
            "match": {
              "location": "features/step_definitions/build.rb:88"
            },
            "result": {
              "status": "passed",
              "duration": 9809971
            }
          },
          {
            "keyword": "And ",
            "name": "frozen APT snapshots are encoded in config/APT_snapshots.d",
            "line": 289,
            "match": {
              "location": "features/step_definitions/build.rb:61"
            },
            "result": {
              "status": "passed",
              "duration": 82704
            }
          },
          {
            "keyword": "When ",
            "name": "I successfully run \"apt-snapshots-serials prepare-build\"",
            "line": 290,
            "match": {
              "location": "features/step_definitions/build.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 979349195
            }
          },
          {
            "keyword": "And ",
            "name": "I successfully run \"apt-mirror debian\"",
            "line": 291,
            "match": {
              "location": "features/step_definitions/build.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 40888516
            }
          },
          {
            "keyword": "Then ",
            "name": "I should see a time-based snapshot",
            "line": 292,
            "match": {
              "location": "features/step_definitions/build.rb:155"
            },
            "result": {
              "status": "passed",
              "duration": 142776
            }
          },
          {
            "keyword": "When ",
            "name": "I successfully run \"apt-mirror torproject\"",
            "line": 293,
            "match": {
              "location": "features/step_definitions/build.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 30825330
            }
          },
          {
            "keyword": "Then ",
            "name": "I should see a time-based snapshot",
            "line": 294,
            "match": {
              "location": "features/step_definitions/build.rb:155"
            },
            "result": {
              "status": "passed",
              "duration": 82676
            }
          },
          {
            "keyword": "When ",
            "name": "I successfully run \"apt-mirror debian-security\"",
            "line": 295,
            "match": {
              "location": "features/step_definitions/build.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 32264718
            }
          },
          {
            "keyword": "Then ",
            "name": "I should see a time-based snapshot",
            "line": 296,
            "match": {
              "location": "features/step_definitions/build.rb:155"
            },
            "result": {
              "status": "passed",
              "duration": 93586
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:555"
            },
            "result": {
              "status": "passed",
              "duration": 1460368
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:104"
            },
            "result": {
              "status": "passed",
              "duration": 6863
            }
          }
        ]
      },
      {
        "id": "custom-apt-sources-to-build-branches;build-from-the-devel-branch-without-overlays",
        "keyword": "Scenario",
        "name": "build from the devel branch without overlays",
        "description": "",
        "line": 298,
        "type": "scenario",
        "tags": [
          {
            "name": "@source",
            "line": 1
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:270"
            },
            "result": {
              "status": "passed",
              "duration": 11291
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:548"
            },
            "result": {
              "status": "passed",
              "duration": 113513
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I am working on the devel base branch",
            "line": 299,
            "match": {
              "location": "features/step_definitions/build.rb:73"
            },
            "result": {
              "status": "passed",
              "duration": 28387149
            }
          },
          {
            "keyword": "And ",
            "name": "the config/APT_overlays.d directory is empty",
            "line": 300,
            "match": {
              "location": "features/step_definitions/build.rb:126"
            },
            "result": {
              "status": "passed",
              "duration": 97923
            }
          },
          {
            "keyword": "When ",
            "name": "I successfully run tails-custom-apt-sources",
            "line": 301,
            "match": {
              "location": "features/step_definitions/build.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 36796866
            }
          },
          {
            "keyword": "Then ",
            "name": "I should see only the 'devel' suite",
            "line": 302,
            "match": {
              "location": "features/step_definitions/build.rb:117"
            },
            "result": {
              "status": "passed",
              "duration": 179145
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:555"
            },
            "result": {
              "status": "passed",
              "duration": 1624826
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:104"
            },
            "result": {
              "status": "passed",
              "duration": 8086
            }
          }
        ]
      },
      {
        "id": "custom-apt-sources-to-build-branches;build-from-the-devel-branch-with-overlays",
        "keyword": "Scenario",
        "name": "build from the devel branch with overlays",
        "description": "",
        "line": 304,
        "type": "scenario",
        "tags": [
          {
            "name": "@source",
            "line": 1
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:270"
            },
            "result": {
              "status": "passed",
              "duration": 18996
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:548"
            },
            "result": {
              "status": "passed",
              "duration": 206918
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I am working on the devel base branch",
            "line": 305,
            "match": {
              "location": "features/step_definitions/build.rb:73"
            },
            "result": {
              "status": "passed",
              "duration": 63285876
            }
          },
          {
            "keyword": "And ",
            "name": "config/APT_overlays.d contains 'feature-foo'",
            "line": 306,
            "match": {
              "location": "features/step_definitions/build.rb:131"
            },
            "result": {
              "status": "passed",
              "duration": 141826
            }
          },
          {
            "keyword": "And ",
            "name": "config/APT_overlays.d contains 'bugfix-bar'",
            "line": 307,
            "match": {
              "location": "features/step_definitions/build.rb:131"
            },
            "result": {
              "status": "passed",
              "duration": 36729
            }
          },
          {
            "keyword": "When ",
            "name": "I successfully run tails-custom-apt-sources",
            "line": 308,
            "match": {
              "location": "features/step_definitions/build.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 44661931
            }
          },
          {
            "keyword": "Then ",
            "name": "I should see the 'devel' suite",
            "line": 309,
            "match": {
              "location": "features/step_definitions/build.rb:113"
            },
            "result": {
              "status": "passed",
              "duration": 150141
            }
          },
          {
            "keyword": "And ",
            "name": "I should see the 'feature-foo' suite",
            "line": 310,
            "match": {
              "location": "features/step_definitions/build.rb:113"
            },
            "result": {
              "status": "passed",
              "duration": 62366
            }
          },
          {
            "keyword": "And ",
            "name": "I should see the 'bugfix-bar' suite",
            "line": 311,
            "match": {
              "location": "features/step_definitions/build.rb:113"
            },
            "result": {
              "status": "passed",
              "duration": 58620
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:555"
            },
            "result": {
              "status": "passed",
              "duration": 973825
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:104"
            },
            "result": {
              "status": "passed",
              "duration": 6153
            }
          }
        ]
      },
      {
        "id": "custom-apt-sources-to-build-branches;build-from-the-devel-branch-with-no-encoded-time-based-snapshot",
        "keyword": "Scenario",
        "name": "build from the devel branch with no encoded time-based snapshot",
        "description": "",
        "line": 313,
        "type": "scenario",
        "tags": [
          {
            "name": "@source",
            "line": 1
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:270"
            },
            "result": {
              "status": "passed",
              "duration": 11101
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:548"
            },
            "result": {
              "status": "passed",
              "duration": 82975
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I am working on the devel base branch",
            "line": 314,
            "match": {
              "location": "features/step_definitions/build.rb:73"
            },
            "result": {
              "status": "passed",
              "duration": 31755854
            }
          },
          {
            "keyword": "And ",
            "name": "no frozen APT snapshot is encoded in config/APT_snapshots.d",
            "line": 315,
            "match": {
              "location": "features/step_definitions/build.rb:53"
            },
            "result": {
              "status": "passed",
              "duration": 165630
            }
          },
          {
            "keyword": "When ",
            "name": "I successfully run \"apt-snapshots-serials prepare-build\"",
            "line": 316,
            "match": {
              "location": "features/step_definitions/build.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 989296063
            }
          },
          {
            "keyword": "And ",
            "name": "I successfully run \"apt-mirror debian\"",
            "line": 317,
            "match": {
              "location": "features/step_definitions/build.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 23186138
            }
          },
          {
            "keyword": "Then ",
            "name": "I should see a time-based snapshot",
            "line": 318,
            "match": {
              "location": "features/step_definitions/build.rb:155"
            },
            "result": {
              "status": "passed",
              "duration": 202139
            }
          },
          {
            "keyword": "When ",
            "name": "I successfully run \"apt-mirror torproject\"",
            "line": 319,
            "match": {
              "location": "features/step_definitions/build.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 12173863
            }
          },
          {
            "keyword": "Then ",
            "name": "I should see a time-based snapshot",
            "line": 320,
            "match": {
              "location": "features/step_definitions/build.rb:155"
            },
            "result": {
              "status": "passed",
              "duration": 535083
            }
          },
          {
            "keyword": "When ",
            "name": "I successfully run \"apt-mirror debian-security\"",
            "line": 321,
            "match": {
              "location": "features/step_definitions/build.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 23480310
            }
          },
          {
            "keyword": "Then ",
            "name": "I should see a time-based snapshot",
            "line": 322,
            "match": {
              "location": "features/step_definitions/build.rb:155"
            },
            "result": {
              "status": "passed",
              "duration": 204624
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:555"
            },
            "result": {
              "status": "passed",
              "duration": 1617583
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:104"
            },
            "result": {
              "status": "passed",
              "duration": 16481
            }
          }
        ]
      },
      {
        "id": "custom-apt-sources-to-build-branches;build-from-the-devel-branch-with-encoded-time-based-snapshots",
        "keyword": "Scenario",
        "name": "build from the devel branch with encoded time-based snapshots",
        "description": "",
        "line": 324,
        "type": "scenario",
        "tags": [
          {
            "name": "@source",
            "line": 1
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:270"
            },
            "result": {
              "status": "passed",
              "duration": 13866
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:548"
            },
            "result": {
              "status": "passed",
              "duration": 117340
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I am working on the devel base branch",
            "line": 325,
            "match": {
              "location": "features/step_definitions/build.rb:73"
            },
            "result": {
              "status": "passed",
              "duration": 58148825
            }
          },
          {
            "keyword": "And ",
            "name": "frozen APT snapshots are encoded in config/APT_snapshots.d",
            "line": 326,
            "match": {
              "location": "features/step_definitions/build.rb:61"
            },
            "result": {
              "status": "passed",
              "duration": 84910
            }
          },
          {
            "keyword": "When ",
            "name": "I successfully run \"apt-snapshots-serials prepare-build\"",
            "line": 327,
            "match": {
              "location": "features/step_definitions/build.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 972095536
            }
          },
          {
            "keyword": "And ",
            "name": "I run \"apt-mirror debian\"",
            "line": 328,
            "match": {
              "location": "features/step_definitions/build.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 10704038
            }
          },
          {
            "keyword": "Then ",
            "name": "it should fail",
            "line": 329,
            "match": {
              "location": "features/step_definitions/build.rb:135"
            },
            "result": {
              "status": "passed",
              "duration": 22823
            }
          },
          {
            "keyword": "When ",
            "name": "I run \"apt-mirror torproject\"",
            "line": 330,
            "match": {
              "location": "features/step_definitions/build.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 12557403
            }
          },
          {
            "keyword": "Then ",
            "name": "it should fail",
            "line": 331,
            "match": {
              "location": "features/step_definitions/build.rb:135"
            },
            "result": {
              "status": "passed",
              "duration": 12714
            }
          },
          {
            "keyword": "When ",
            "name": "I successfully run \"apt-mirror debian-security\"",
            "line": 332,
            "match": {
              "location": "features/step_definitions/build.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 15054444
            }
          },
          {
            "keyword": "Then ",
            "name": "I should see a time-based snapshot",
            "line": 333,
            "match": {
              "location": "features/step_definitions/build.rb:155"
            },
            "result": {
              "status": "passed",
              "duration": 130854
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:555"
            },
            "result": {
              "status": "passed",
              "duration": 1073231
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:104"
            },
            "result": {
              "status": "passed",
              "duration": 6743
            }
          }
        ]
      },
      {
        "id": "custom-apt-sources-to-build-branches;build-from-the-feature/jessie-branch-without-overlays",
        "keyword": "Scenario",
        "name": "build from the feature/jessie branch without overlays",
        "description": "",
        "line": 335,
        "type": "scenario",
        "tags": [
          {
            "name": "@source",
            "line": 1
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:270"
            },
            "result": {
              "status": "passed",
              "duration": 12123
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:548"
            },
            "result": {
              "status": "passed",
              "duration": 75230
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I am working on the feature/jessie base branch",
            "line": 336,
            "match": {
              "location": "features/step_definitions/build.rb:73"
            },
            "result": {
              "status": "passed",
              "duration": 76130005
            }
          },
          {
            "keyword": "And ",
            "name": "the config/APT_overlays.d directory is empty",
            "line": 337,
            "match": {
              "location": "features/step_definitions/build.rb:126"
            },
            "result": {
              "status": "passed",
              "duration": 33743
            }
          },
          {
            "keyword": "When ",
            "name": "I successfully run tails-custom-apt-sources",
            "line": 338,
            "match": {
              "location": "features/step_definitions/build.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 44937588
            }
          },
          {
            "keyword": "Then ",
            "name": "I should see only the 'feature-jessie' suite",
            "line": 339,
            "match": {
              "location": "features/step_definitions/build.rb:117"
            },
            "result": {
              "status": "passed",
              "duration": 207990
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:555"
            },
            "result": {
              "status": "passed",
              "duration": 967894
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:104"
            },
            "result": {
              "status": "passed",
              "duration": 5861
            }
          }
        ]
      },
      {
        "id": "custom-apt-sources-to-build-branches;build-from-the-feature/jessie-branch-with-overlays",
        "keyword": "Scenario",
        "name": "build from the feature/jessie branch with overlays",
        "description": "",
        "line": 341,
        "type": "scenario",
        "tags": [
          {
            "name": "@source",
            "line": 1
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:270"
            },
            "result": {
              "status": "passed",
              "duration": 11511
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:548"
            },
            "result": {
              "status": "passed",
              "duration": 82454
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I am working on the feature/jessie base branch",
            "line": 342,
            "match": {
              "location": "features/step_definitions/build.rb:73"
            },
            "result": {
              "status": "passed",
              "duration": 64047954
            }
          },
          {
            "keyword": "And ",
            "name": "config/APT_overlays.d contains 'feature-7756-reintroduce-whisperback'",
            "line": 343,
            "match": {
              "location": "features/step_definitions/build.rb:131"
            },
            "result": {
              "status": "passed",
              "duration": 51988
            }
          },
          {
            "keyword": "When ",
            "name": "I successfully run tails-custom-apt-sources",
            "line": 344,
            "match": {
              "location": "features/step_definitions/build.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 37165667
            }
          },
          {
            "keyword": "Then ",
            "name": "I should see the 'feature-jessie' suite",
            "line": 345,
            "match": {
              "location": "features/step_definitions/build.rb:113"
            },
            "result": {
              "status": "passed",
              "duration": 134000
            }
          },
          {
            "keyword": "And ",
            "name": "I should see the 'feature-7756-reintroduce-whisperback' suite",
            "line": 346,
            "match": {
              "location": "features/step_definitions/build.rb:113"
            },
            "result": {
              "status": "passed",
              "duration": 65763
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:555"
            },
            "result": {
              "status": "passed",
              "duration": 907861
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:104"
            },
            "result": {
              "status": "passed",
              "duration": 5630
            }
          }
        ]
      },
      {
        "id": "custom-apt-sources-to-build-branches;build-from-a-feature-branch-with-overlays-based-on-devel",
        "keyword": "Scenario",
        "name": "build from a feature branch with overlays based on devel",
        "description": "",
        "line": 348,
        "type": "scenario",
        "tags": [
          {
            "name": "@source",
            "line": 1
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:270"
            },
            "result": {
              "status": "passed",
              "duration": 11802
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:548"
            },
            "result": {
              "status": "passed",
              "duration": 165489
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I am working on the feature/thunderbird branch based on devel",
            "line": 349,
            "match": {
              "location": "features/step_definitions/build.rb:88"
            },
            "result": {
              "status": "passed",
              "duration": 34493427
            }
          },
          {
            "keyword": "And ",
            "name": "config/APT_overlays.d contains 'feature-thunderbird'",
            "line": 350,
            "match": {
              "location": "features/step_definitions/build.rb:131"
            },
            "result": {
              "status": "passed",
              "duration": 228639
            }
          },
          {
            "keyword": "And ",
            "name": "config/APT_overlays.d contains 'bugfix-bar'",
            "line": 351,
            "match": {
              "location": "features/step_definitions/build.rb:131"
            },
            "result": {
              "status": "passed",
              "duration": 37381
            }
          },
          {
            "keyword": "When ",
            "name": "I successfully run tails-custom-apt-sources",
            "line": 352,
            "match": {
              "location": "features/step_definitions/build.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 35927725
            }
          },
          {
            "keyword": "Then ",
            "name": "I should see the 'devel' suite",
            "line": 353,
            "match": {
              "location": "features/step_definitions/build.rb:113"
            },
            "result": {
              "status": "passed",
              "duration": 490449
            }
          },
          {
            "keyword": "And ",
            "name": "I should see the 'feature-thunderbird' suite",
            "line": 354,
            "match": {
              "location": "features/step_definitions/build.rb:113"
            },
            "result": {
              "status": "passed",
              "duration": 67977
            }
          },
          {
            "keyword": "And ",
            "name": "I should see the 'bugfix-bar' suite",
            "line": 355,
            "match": {
              "location": "features/step_definitions/build.rb:113"
            },
            "result": {
              "status": "passed",
              "duration": 179056
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:555"
            },
            "result": {
              "status": "passed",
              "duration": 1054918
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:104"
            },
            "result": {
              "status": "passed",
              "duration": 6412
            }
          }
        ]
      },
      {
        "id": "custom-apt-sources-to-build-branches;build-from-a-feature-branch-without-overlays-based-on-devel",
        "keyword": "Scenario",
        "name": "build from a feature branch without overlays based on devel",
        "description": "",
        "line": 357,
        "type": "scenario",
        "tags": [
          {
            "name": "@source",
            "line": 1
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:270"
            },
            "result": {
              "status": "passed",
              "duration": 9818
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:548"
            },
            "result": {
              "status": "passed",
              "duration": 73007
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I am working on the feature/thunderbird branch based on devel",
            "line": 358,
            "match": {
              "location": "features/step_definitions/build.rb:88"
            },
            "result": {
              "status": "passed",
              "duration": 42818495
            }
          },
          {
            "keyword": "And ",
            "name": "the config/APT_overlays.d directory is empty",
            "line": 359,
            "match": {
              "location": "features/step_definitions/build.rb:126"
            },
            "result": {
              "status": "passed",
              "duration": 189926
            }
          },
          {
            "keyword": "When ",
            "name": "I successfully run tails-custom-apt-sources",
            "line": 360,
            "match": {
              "location": "features/step_definitions/build.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 40956655
            }
          },
          {
            "keyword": "Then ",
            "name": "I should see only the 'devel' suite",
            "line": 361,
            "match": {
              "location": "features/step_definitions/build.rb:117"
            },
            "result": {
              "status": "passed",
              "duration": 249507
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:555"
            },
            "result": {
              "status": "passed",
              "duration": 1557621
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:104"
            },
            "result": {
              "status": "passed",
              "duration": 8436
            }
          }
        ]
      },
      {
        "id": "custom-apt-sources-to-build-branches;build-from-a-feature-branch-based-on-devel-with-no-encoded-time-based-snapshot",
        "keyword": "Scenario",
        "name": "build from a feature branch based on devel with no encoded time-based snapshot",
        "description": "",
        "line": 363,
        "type": "scenario",
        "tags": [
          {
            "name": "@source",
            "line": 1
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:270"
            },
            "result": {
              "status": "passed",
              "duration": 16110
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:548"
            },
            "result": {
              "status": "passed",
              "duration": 161282
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I am working on the feature/thunderbird branch based on devel",
            "line": 364,
            "match": {
              "location": "features/step_definitions/build.rb:88"
            },
            "result": {
              "status": "passed",
              "duration": 69028372
            }
          },
          {
            "keyword": "And ",
            "name": "no frozen APT snapshot is encoded in config/APT_snapshots.d",
            "line": 365,
            "match": {
              "location": "features/step_definitions/build.rb:53"
            },
            "result": {
              "status": "passed",
              "duration": 75662
            }
          },
          {
            "keyword": "When ",
            "name": "I successfully run \"apt-snapshots-serials prepare-build\"",
            "line": 366,
            "match": {
              "location": "features/step_definitions/build.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 973751300
            }
          },
          {
            "keyword": "And ",
            "name": "I successfully run \"apt-mirror debian\"",
            "line": 367,
            "match": {
              "location": "features/step_definitions/build.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 14013803
            }
          },
          {
            "keyword": "Then ",
            "name": "I should see a time-based snapshot",
            "line": 368,
            "match": {
              "location": "features/step_definitions/build.rb:155"
            },
            "result": {
              "status": "passed",
              "duration": 129944
            }
          },
          {
            "keyword": "When ",
            "name": "I successfully run \"apt-mirror torproject\"",
            "line": 369,
            "match": {
              "location": "features/step_definitions/build.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 13359627
            }
          },
          {
            "keyword": "Then ",
            "name": "I should see a time-based snapshot",
            "line": 370,
            "match": {
              "location": "features/step_definitions/build.rb:155"
            },
            "result": {
              "status": "passed",
              "duration": 67867
            }
          },
          {
            "keyword": "When ",
            "name": "I successfully run \"apt-mirror debian-security\"",
            "line": 371,
            "match": {
              "location": "features/step_definitions/build.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 13187152
            }
          },
          {
            "keyword": "Then ",
            "name": "I should see a time-based snapshot",
            "line": 372,
            "match": {
              "location": "features/step_definitions/build.rb:155"
            },
            "result": {
              "status": "passed",
              "duration": 73489
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:555"
            },
            "result": {
              "status": "passed",
              "duration": 1516824
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:104"
            },
            "result": {
              "status": "passed",
              "duration": 6512
            }
          }
        ]
      },
      {
        "id": "custom-apt-sources-to-build-branches;build-from-a-feature-branch-based-on-devel-with-encoded-time-based-snapshots",
        "keyword": "Scenario",
        "name": "build from a feature branch based on devel with encoded time-based snapshots",
        "description": "",
        "line": 374,
        "type": "scenario",
        "tags": [
          {
            "name": "@source",
            "line": 1
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:270"
            },
            "result": {
              "status": "passed",
              "duration": 12062
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:548"
            },
            "result": {
              "status": "passed",
              "duration": 109084
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I am working on the feature/thunderbird branch based on devel",
            "line": 375,
            "match": {
              "location": "features/step_definitions/build.rb:88"
            },
            "result": {
              "status": "passed",
              "duration": 65220503
            }
          },
          {
            "keyword": "And ",
            "name": "frozen APT snapshots are encoded in config/APT_snapshots.d",
            "line": 376,
            "match": {
              "location": "features/step_definitions/build.rb:61"
            },
            "result": {
              "status": "passed",
              "duration": 166321
            }
          },
          {
            "keyword": "When ",
            "name": "I successfully run \"apt-snapshots-serials prepare-build\"",
            "line": 377,
            "match": {
              "location": "features/step_definitions/build.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 973435969
            }
          },
          {
            "keyword": "And ",
            "name": "I run \"apt-mirror debian\"",
            "line": 378,
            "match": {
              "location": "features/step_definitions/build.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 12020946
            }
          },
          {
            "keyword": "Then ",
            "name": "it should fail",
            "line": 379,
            "match": {
              "location": "features/step_definitions/build.rb:135"
            },
            "result": {
              "status": "passed",
              "duration": 46356
            }
          },
          {
            "keyword": "When ",
            "name": "I run \"apt-mirror torproject\"",
            "line": 380,
            "match": {
              "location": "features/step_definitions/build.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 12126083
            }
          },
          {
            "keyword": "Then ",
            "name": "it should fail",
            "line": 381,
            "match": {
              "location": "features/step_definitions/build.rb:135"
            },
            "result": {
              "status": "passed",
              "duration": 152205
            }
          },
          {
            "keyword": "When ",
            "name": "I successfully run \"apt-mirror debian-security\"",
            "line": 382,
            "match": {
              "location": "features/step_definitions/build.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 12703486
            }
          },
          {
            "keyword": "Then ",
            "name": "I should see a time-based snapshot",
            "line": 383,
            "match": {
              "location": "features/step_definitions/build.rb:155"
            },
            "result": {
              "status": "passed",
              "duration": 148538
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:555"
            },
            "result": {
              "status": "passed",
              "duration": 1378434
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:104"
            },
            "result": {
              "status": "passed",
              "duration": 7884
            }
          }
        ]
      },
      {
        "id": "custom-apt-sources-to-build-branches;build-from-a-feature-branch-with-overlays-based-on-feature/jessie",
        "keyword": "Scenario",
        "name": "build from a feature branch with overlays based on feature/jessie",
        "description": "",
        "line": 385,
        "type": "scenario",
        "tags": [
          {
            "name": "@source",
            "line": 1
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:270"
            },
            "result": {
              "status": "passed",
              "duration": 12103
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:548"
            },
            "result": {
              "status": "passed",
              "duration": 78958
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I am working on the feature/7756-reintroduce-whisperback branch based on feature/jessie",
            "line": 386,
            "match": {
              "location": "features/step_definitions/build.rb:88"
            },
            "result": {
              "status": "passed",
              "duration": 49814102
            }
          },
          {
            "keyword": "And ",
            "name": "config/APT_overlays.d contains 'feature-7756-reintroduce-whisperback'",
            "line": 387,
            "match": {
              "location": "features/step_definitions/build.rb:131"
            },
            "result": {
              "status": "passed",
              "duration": 136413
            }
          },
          {
            "keyword": "And ",
            "name": "config/APT_overlays.d contains 'bugfix-bar'",
            "line": 388,
            "match": {
              "location": "features/step_definitions/build.rb:131"
            },
            "result": {
              "status": "passed",
              "duration": 51805
            }
          },
          {
            "keyword": "When ",
            "name": "I successfully run tails-custom-apt-sources",
            "line": 389,
            "match": {
              "location": "features/step_definitions/build.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 49249227
            }
          },
          {
            "keyword": "Then ",
            "name": "I should see the 'feature-jessie' suite",
            "line": 390,
            "match": {
              "location": "features/step_definitions/build.rb:113"
            },
            "result": {
              "status": "passed",
              "duration": 350730
            }
          },
          {
            "keyword": "And ",
            "name": "I should see the 'feature-7756-reintroduce-whisperback' suite",
            "line": 391,
            "match": {
              "location": "features/step_definitions/build.rb:113"
            },
            "result": {
              "status": "passed",
              "duration": 73606
            }
          },
          {
            "keyword": "And ",
            "name": "I should see the 'bugfix-bar' suite",
            "line": 392,
            "match": {
              "location": "features/step_definitions/build.rb:113"
            },
            "result": {
              "status": "passed",
              "duration": 66303
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:555"
            },
            "result": {
              "status": "passed",
              "duration": 1389417
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:104"
            },
            "result": {
              "status": "passed",
              "duration": 6131
            }
          }
        ]
      },
      {
        "id": "custom-apt-sources-to-build-branches;build-from-a-feature-branch-without-overlays-based-on-feature/jessie",
        "keyword": "Scenario",
        "name": "build from a feature branch without overlays based on feature/jessie",
        "description": "",
        "line": 394,
        "type": "scenario",
        "tags": [
          {
            "name": "@source",
            "line": 1
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:270"
            },
            "result": {
              "status": "passed",
              "duration": 12594
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:548"
            },
            "result": {
              "status": "passed",
              "duration": 110004
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I am working on the feature/thunderbird branch based on feature/jessie",
            "line": 395,
            "match": {
              "location": "features/step_definitions/build.rb:88"
            },
            "result": {
              "status": "passed",
              "duration": 56023132
            }
          },
          {
            "keyword": "And ",
            "name": "the config/APT_overlays.d directory is empty",
            "line": 396,
            "match": {
              "location": "features/step_definitions/build.rb:126"
            },
            "result": {
              "status": "passed",
              "duration": 140971
            }
          },
          {
            "keyword": "When ",
            "name": "I successfully run tails-custom-apt-sources",
            "line": 397,
            "match": {
              "location": "features/step_definitions/build.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 45734718
            }
          },
          {
            "keyword": "Then ",
            "name": "I should see only the 'feature-jessie' suite",
            "line": 398,
            "match": {
              "location": "features/step_definitions/build.rb:117"
            },
            "result": {
              "status": "passed",
              "duration": 186346
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:555"
            },
            "result": {
              "status": "passed",
              "duration": 1661442
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:104"
            },
            "result": {
              "status": "passed",
              "duration": 11952
            }
          }
        ]
      },
      {
        "id": "custom-apt-sources-to-build-branches;build-from-a-feature-branch-based-on-devel-with-dots-in-its-name",
        "keyword": "Scenario",
        "name": "build from a feature branch based on devel with dots in its name",
        "description": "",
        "line": 400,
        "type": "scenario",
        "tags": [
          {
            "name": "@source",
            "line": 1
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:270"
            },
            "result": {
              "status": "passed",
              "duration": 12654
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:548"
            },
            "result": {
              "status": "passed",
              "duration": 95689
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I am working on the feature/live-boot-3.x branch based on devel",
            "line": 401,
            "match": {
              "location": "features/step_definitions/build.rb:88"
            },
            "result": {
              "status": "passed",
              "duration": 52798960
            }
          },
          {
            "keyword": "And ",
            "name": "config/APT_overlays.d contains 'feature-live-boot-3.x'",
            "line": 402,
            "match": {
              "location": "features/step_definitions/build.rb:131"
            },
            "result": {
              "status": "passed",
              "duration": 100286
            }
          },
          {
            "keyword": "When ",
            "name": "I successfully run tails-custom-apt-sources",
            "line": 403,
            "match": {
              "location": "features/step_definitions/build.rb:100"
            },
            "result": {
              "status": "passed",
              "duration": 43011668
            }
          },
          {
            "keyword": "Then ",
            "name": "I should see the 'devel' suite",
            "line": 404,
            "match": {
              "location": "features/step_definitions/build.rb:113"
            },
            "result": {
              "status": "passed",
              "duration": 612506
            }
          },
          {
            "keyword": "And ",
            "name": "I should see the 'feature-live-boot-3.x' suite",
            "line": 405,
            "match": {
              "location": "features/step_definitions/build.rb:113"
            },
            "result": {
              "status": "passed",
              "duration": 111857
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:555"
            },
            "result": {
              "status": "passed",
              "duration": 1696216
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:104"
            },
            "result": {
              "status": "passed",
              "duration": 7975
            }
          }
        ]
      },
      {
        "id": "custom-apt-sources-to-build-branches;build-from-a-branch-that-has-no-config/apt_overlays.d-directory",
        "keyword": "Scenario",
        "name": "build from a branch that has no config/APT_overlays.d directory",
        "description": "",
        "line": 407,
        "type": "scenario",
        "tags": [
          {
            "name": "@source",
            "line": 1
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:270"
            },
            "result": {
              "status": "passed",
              "duration": 19877
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:548"
            },
            "result": {
              "status": "passed",
              "duration": 157683
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I am working on the stable base branch",
            "line": 408,
            "match": {
              "location": "features/step_definitions/build.rb:73"
            },
            "result": {
              "status": "passed",
              "duration": 30260768
            }
          },
          {
            "keyword": "And ",
            "name": "the config/APT_overlays.d directory does not exist",
            "line": 409,
            "match": {
              "location": "features/step_definitions/build.rb:143"
            },
            "result": {
              "status": "passed",
              "duration": 114603
            }
          },
          {
            "keyword": "When ",
            "name": "I run tails-custom-apt-sources",
            "line": 410,
            "match": {
              "location": "features/step_definitions/build.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 4175614
            }
          },
          {
            "keyword": "Then ",
            "name": "it should fail",
            "line": 411,
            "match": {
              "location": "features/step_definitions/build.rb:135"
            },
            "result": {
              "status": "passed",
              "duration": 33161
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:555"
            },
            "result": {
              "status": "passed",
              "duration": 1542341
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:104"
            },
            "result": {
              "status": "passed",
              "duration": 8625
            }
          }
        ]
      },
      {
        "id": "custom-apt-sources-to-build-branches;build-from-a-branch-that-has-no-config/base_branch-file",
        "keyword": "Scenario",
        "name": "build from a branch that has no config/base_branch file",
        "description": "",
        "line": 413,
        "type": "scenario",
        "tags": [
          {
            "name": "@source",
            "line": 1
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:270"
            },
            "result": {
              "status": "passed",
              "duration": 12464
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:548"
            },
            "result": {
              "status": "passed",
              "duration": 84177
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I am working on the stable base branch",
            "line": 414,
            "match": {
              "location": "features/step_definitions/build.rb:73"
            },
            "result": {
              "status": "passed",
              "duration": 27896813
            }
          },
          {
            "keyword": "And ",
            "name": "the config/base_branch file does not exist",
            "line": 415,
            "match": {
              "location": "features/step_definitions/build.rb:139"
            },
            "result": {
              "status": "passed",
              "duration": 53890
            }
          },
          {
            "keyword": "When ",
            "name": "I run tails-custom-apt-sources",
            "line": 416,
            "match": {
              "location": "features/step_definitions/build.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 3929217
            }
          },
          {
            "keyword": "Then ",
            "name": "it should fail",
            "line": 417,
            "match": {
              "location": "features/step_definitions/build.rb:135"
            },
            "result": {
              "status": "passed",
              "duration": 23203
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:555"
            },
            "result": {
              "status": "passed",
              "duration": 1072248
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:104"
            },
            "result": {
              "status": "passed",
              "duration": 6793
            }
          }
        ]
      },
      {
        "id": "custom-apt-sources-to-build-branches;build-from-a-branch-where-config/base_branch-is-empty",
        "keyword": "Scenario",
        "name": "build from a branch where config/base_branch is empty",
        "description": "",
        "line": 419,
        "type": "scenario",
        "tags": [
          {
            "name": "@source",
            "line": 1
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:270"
            },
            "result": {
              "status": "passed",
              "duration": 11532
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:548"
            },
            "result": {
              "status": "passed",
              "duration": 76191
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I am working on the stable base branch",
            "line": 420,
            "match": {
              "location": "features/step_definitions/build.rb:73"
            },
            "result": {
              "status": "passed",
              "duration": 27372970
            }
          },
          {
            "keyword": "And ",
            "name": "the config/base_branch file is empty",
            "line": 421,
            "match": {
              "location": "features/step_definitions/build.rb:147"
            },
            "result": {
              "status": "passed",
              "duration": 63969
            }
          },
          {
            "keyword": "When ",
            "name": "I run tails-custom-apt-sources",
            "line": 422,
            "match": {
              "location": "features/step_definitions/build.rb:108"
            },
            "result": {
              "status": "passed",
              "duration": 5151695
            }
          },
          {
            "keyword": "Then ",
            "name": "it should fail",
            "line": 423,
            "match": {
              "location": "features/step_definitions/build.rb:135"
            },
            "result": {
              "status": "passed",
              "duration": 28422
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:555"
            },
            "result": {
              "status": "passed",
              "duration": 1005716
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:104"
            },
            "result": {
              "status": "passed",
              "duration": 6863
            }
          }
        ]
      }
    ]
  },
  {
    "uri": "features/dhcp.feature",
    "id": "getting-a-dhcp-lease-without-leaking-too-much-information",
    "keyword": "Feature",
    "name": "Getting a DHCP lease without leaking too much information",
    "description": "  As a Tails user\n  when I connect to a network with a DHCP server\n  I should be able to connect to the Internet\n  and the hostname should not have been leaked on the network.",
    "line": 2,
    "tags": [
      {
        "name": "@product",
        "line": 1
      }
    ],
    "elements": [
      {
        "keyword": "Background",
        "name": "",
        "description": "",
        "line": 8,
        "type": "background",
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:270"
            },
            "result": {
              "status": "passed",
              "duration": 12363
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:277"
            },
            "result": {
              "status": "passed",
              "duration": 2616132
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails from DVD without network and logged in",
            "line": 9,
            "match": {
              "location": "features/step_definitions/snapshots.rb:172"
            },
            "result": {
              "status": "passed",
              "duration": 7432075181
            }
          },
          {
            "keyword": "And ",
            "name": "I capture all network traffic",
            "line": 10,
            "match": {
              "location": "features/step_definitions/common_steps.rb:185"
            },
            "result": {
              "status": "passed",
              "duration": 11158485
            }
          },
          {
            "keyword": "And ",
            "name": "the network is plugged",
            "line": 11,
            "match": {
              "location": "features/step_definitions/common_steps.rb:137"
            },
            "result": {
              "status": "passed",
              "duration": 36975811
            }
          },
          {
            "keyword": "And ",
            "name": "Tor is ready",
            "line": 12,
            "match": {
              "location": "features/step_definitions/common_steps.rb:650"
            },
            "result": {
              "status": "passed",
              "duration": 10925534953
            }
          },
          {
            "keyword": "And ",
            "name": "all notifications have disappeared",
            "line": 13,
            "match": {
              "location": "features/step_definitions/common_steps.rb:762"
            },
            "result": {
              "status": "passed",
              "duration": 7385725120
            }
          },
          {
            "keyword": "And ",
            "name": "available upgrades have been checked",
            "line": 14,
            "match": {
              "location": "features/step_definitions/common_steps.rb:758"
            },
            "result": {
              "status": "passed",
              "duration": 50303105
            }
          }
        ]
      },
      {
        "id": "getting-a-dhcp-lease-without-leaking-too-much-information;getting-a-dhcp-lease-with-the-default-networkmanager-connection",
        "keyword": "Scenario",
        "name": "Getting a DHCP lease with the default NetworkManager connection",
        "description": "",
        "line": 16,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          }
        ],
        "steps": [
          {
            "keyword": "Then ",
            "name": "the hostname should not have been leaked on the network",
            "line": 17,
            "match": {
              "location": "features/step_definitions/dhcp.rb:4"
            },
            "result": {
              "status": "passed",
              "duration": 152617128
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:335"
            },
            "result": {
              "status": "passed",
              "duration": 871418039
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:104"
            },
            "result": {
              "status": "passed",
              "duration": 58367875
            }
          }
        ]
      },
      {
        "keyword": "Background",
        "name": "",
        "description": "",
        "line": 8,
        "type": "background",
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:270"
            },
            "result": {
              "status": "passed",
              "duration": 18063
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:277"
            },
            "result": {
              "status": "passed",
              "duration": 4077364
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails from DVD without network and logged in",
            "line": 9,
            "match": {
              "location": "features/step_definitions/snapshots.rb:172"
            },
            "result": {
              "status": "passed",
              "duration": 6998354487
            }
          },
          {
            "keyword": "And ",
            "name": "I capture all network traffic",
            "line": 10,
            "match": {
              "location": "features/step_definitions/common_steps.rb:185"
            },
            "result": {
              "status": "passed",
              "duration": 3919127
            }
          },
          {
            "keyword": "And ",
            "name": "the network is plugged",
            "line": 11,
            "match": {
              "location": "features/step_definitions/common_steps.rb:137"
            },
            "result": {
              "status": "passed",
              "duration": 26218093
            }
          },
          {
            "keyword": "And ",
            "name": "Tor is ready",
            "line": 12,
            "match": {
              "location": "features/step_definitions/common_steps.rb:650"
            },
            "result": {
              "status": "passed",
              "duration": 11065372761
            }
          },
          {
            "keyword": "And ",
            "name": "all notifications have disappeared",
            "line": 13,
            "match": {
              "location": "features/step_definitions/common_steps.rb:762"
            },
            "result": {
              "status": "passed",
              "duration": 7594427883
            }
          },
          {
            "keyword": "And ",
            "name": "available upgrades have been checked",
            "line": 14,
            "match": {
              "location": "features/step_definitions/common_steps.rb:758"
            },
            "result": {
              "status": "passed",
              "duration": 45872950
            }
          }
        ]
      },
      {
        "id": "getting-a-dhcp-lease-without-leaking-too-much-information;getting-a-dhcp-lease-with-a-manually-configured-networkmanager-connection",
        "keyword": "Scenario",
        "name": "Getting a DHCP lease with a manually configured NetworkManager connection",
        "description": "",
        "line": 19,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          }
        ],
        "steps": [
          {
            "keyword": "When ",
            "name": "I add a wired DHCP NetworkManager connection called \"manually-added-con\"",
            "line": 20,
            "match": {
              "location": "features/step_definitions/common_steps.rb:955"
            },
            "result": {
              "status": "passed",
              "duration": 134730153
            }
          },
          {
            "keyword": "And ",
            "name": "I switch to the \"manually-added-con\" NetworkManager connection",
            "line": 21,
            "match": {
              "location": "features/step_definitions/common_steps.rb:970"
            },
            "result": {
              "status": "passed",
              "duration": 421900996
            }
          },
          {
            "keyword": "Then ",
            "name": "the hostname should not have been leaked on the network",
            "line": 22,
            "match": {
              "location": "features/step_definitions/dhcp.rb:4"
            },
            "result": {
              "status": "passed",
              "duration": 169706286
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:335"
            },
            "result": {
              "status": "passed",
              "duration": 1020136232
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:104"
            },
            "result": {
              "status": "passed",
              "duration": 40841046
            }
          }
        ]
      }
    ]
  },
  {
    "uri": "features/documentation.feature",
    "id": "tails-documentation",
    "keyword": "Feature",
    "name": "Tails documentation",
    "description": "",
    "line": 2,
    "tags": [
      {
        "name": "@product",
        "line": 1
      },
      {
        "name": "@doc",
        "line": 1
      },
      {
        "name": "@not_release_blocker",
        "line": 1
      }
    ],
    "elements": [
      {
        "id": "tails-documentation;the-tails-documentation-launcher-works-when-offline",
        "keyword": "Scenario",
        "name": "The Tails documentation launcher works when offline",
        "description": "",
        "line": 4,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          },
          {
            "name": "@doc",
            "line": 1
          },
          {
            "name": "@not_release_blocker",
            "line": 1
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:270"
            },
            "result": {
              "status": "passed",
              "duration": 16471
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:277"
            },
            "result": {
              "status": "passed",
              "duration": 4803845
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails from DVD without network and logged in",
            "line": 5,
            "match": {
              "location": "features/step_definitions/snapshots.rb:172"
            },
            "result": {
              "status": "passed",
              "duration": 6787731286
            }
          },
          {
            "keyword": "When ",
            "name": "I start \"Tails Documentation\" via GNOME Activities Overview",
            "line": 6,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1165"
            },
            "result": {
              "status": "passed",
              "duration": 9691591955
            }
          },
          {
            "keyword": "Then ",
            "name": "the Tor Browser has started",
            "line": 7,
            "match": {
              "location": "features/step_definitions/browser.rb:501"
            },
            "result": {
              "status": "passed",
              "duration": 8155557941
            }
          },
          {
            "keyword": "And ",
            "name": "\"Tails - Documentation\" has loaded in the Tor Browser",
            "line": 8,
            "match": {
              "location": "features/step_definitions/browser.rb:274"
            },
            "result": {
              "status": "passed",
              "duration": 1053494634
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:335"
            },
            "result": {
              "status": "passed",
              "duration": 1222621123
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:104"
            },
            "result": {
              "status": "passed",
              "duration": 26259
            }
          }
        ]
      },
      {
        "id": "tails-documentation;the-tails-documentation-launcher-works-when-online",
        "keyword": "Scenario",
        "name": "The Tails documentation launcher works when online",
        "description": "",
        "line": 10,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          },
          {
            "name": "@doc",
            "line": 1
          },
          {
            "name": "@not_release_blocker",
            "line": 1
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:270"
            },
            "result": {
              "status": "passed",
              "duration": 12864
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:277"
            },
            "result": {
              "status": "passed",
              "duration": 5019511
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails from DVD and logged in and the network is connected",
            "line": 11,
            "match": {
              "location": "features/step_definitions/snapshots.rb:172"
            },
            "result": {
              "status": "passed",
              "duration": 10325000396
            }
          },
          {
            "keyword": "When ",
            "name": "I start \"Tails Documentation\" via GNOME Activities Overview",
            "line": 12,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1165"
            },
            "result": {
              "status": "passed",
              "duration": 9626330333
            }
          },
          {
            "keyword": "Then ",
            "name": "the Tor Browser has started",
            "line": 13,
            "match": {
              "location": "features/step_definitions/browser.rb:501"
            },
            "result": {
              "status": "passed",
              "duration": 12400804889
            }
          },
          {
            "keyword": "And ",
            "name": "\"Tails - Documentation\" has loaded in the Tor Browser",
            "line": 14,
            "match": {
              "location": "features/step_definitions/browser.rb:274"
            },
            "result": {
              "status": "passed",
              "duration": 626541538
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:335"
            },
            "result": {
              "status": "passed",
              "duration": 1052873132
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:104"
            },
            "result": {
              "status": "passed",
              "duration": 22041
            }
          }
        ]
      }
    ]
  },
  {
    "uri": "features/electrum.feature",
    "id": "electrum-bitcoin-client",
    "keyword": "Feature",
    "name": "Electrum Bitcoin client",
    "description": "  As a Tails user\n  I might want to use a Bitcoin client\n  And all Internet traffic should flow only through Tor",
    "line": 2,
    "tags": [
      {
        "name": "@product",
        "line": 1
      },
      {
        "name": "@check_tor_leaks",
        "line": 1
      }
    ],
    "elements": [
      {
        "id": "electrum-bitcoin-client;i-am-warned-if-electrum-is-not-persistent",
        "keyword": "Scenario",
        "name": "I am warned if Electrum is not persistent",
        "description": "",
        "line": 7,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          },
          {
            "name": "@check_tor_leaks",
            "line": 1
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:270"
            },
            "result": {
              "status": "passed",
              "duration": 15990
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:277"
            },
            "result": {
              "status": "passed",
              "duration": 4690654
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:523"
            },
            "result": {
              "status": "passed",
              "duration": 2692097
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails from DVD without network and logged in",
            "line": 8,
            "match": {
              "location": "features/step_definitions/snapshots.rb:172"
            },
            "result": {
              "status": "passed",
              "duration": 6811157944
            }
          },
          {
            "keyword": "When ",
            "name": "I start Electrum through the GNOME menu",
            "line": 9,
            "match": {
              "location": "features/step_definitions/electrum.rb:13"
            },
            "result": {
              "status": "passed",
              "duration": 10358809348
            }
          },
          {
            "keyword": "But ",
            "name": "the \"electrum\" tps feature is not enabled",
            "line": 10,
            "match": {
              "location": "features/step_definitions/usb.rb:822"
            },
            "result": {
              "status": "passed",
              "duration": 811573917
            }
          },
          {
            "keyword": "And ",
            "name": "I see a warning that Electrum is not persistent",
            "line": 11,
            "match": {
              "location": "features/step_definitions/electrum.rb:78"
            },
            "result": {
              "status": "passed",
              "duration": 251493540
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:531"
            },
            "result": {
              "status": "passed",
              "duration": 77212046
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:335"
            },
            "result": {
              "status": "passed",
              "duration": 1200753249
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:104"
            },
            "result": {
              "status": "passed",
              "duration": 59452
            }
          }
        ]
      }
    ]
  },
  {
    "uri": "features/evince.feature",
    "id": "using-evince",
    "keyword": "Feature",
    "name": "Using Evince",
    "description": "  As a Tails user\n  I want to view and print PDF files in Evince",
    "line": 2,
    "tags": [
      {
        "name": "@product",
        "line": 1
      }
    ],
    "elements": [
      {
        "id": "using-evince;i-can-view-and-print-a-pdf-file-stored-in-/usr/share",
        "keyword": "Scenario",
        "name": "I can view and print a PDF file stored in /usr/share",
        "description": "",
        "line": 6,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:270"
            },
            "result": {
              "status": "passed",
              "duration": 17032
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:277"
            },
            "result": {
              "status": "passed",
              "duration": 3707432
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails from DVD without network and logged in",
            "line": 7,
            "match": {
              "location": "features/step_definitions/snapshots.rb:172"
            },
            "result": {
              "status": "passed",
              "duration": 6636017150
            }
          },
          {
            "keyword": "When ",
            "name": "I open \"/usr/share/cups/data/default-testpage.pdf\" with Evince",
            "line": 8,
            "match": {
              "location": "features/step_definitions/evince.rb:1"
            },
            "result": {
              "status": "passed",
              "duration": 4355058264
            }
          },
          {
            "keyword": "Then ",
            "name": "I see \"CupsTestPage.png\" after at most 40 seconds",
            "line": 9,
            "match": {
              "location": "features/step_definitions/common_steps.rb:798"
            },
            "result": {
              "status": "passed",
              "duration": 1066561847
            }
          },
          {
            "keyword": "And ",
            "name": "I can print the current document to \"/home/amnesia/output.pdf\"",
            "line": 10,
            "match": {
              "location": "features/step_definitions/evince.rb:5"
            },
            "result": {
              "status": "passed",
              "duration": 4365078892
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:335"
            },
            "result": {
              "status": "passed",
              "duration": 1089283446
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:104"
            },
            "result": {
              "status": "passed",
              "duration": 79209
            }
          }
        ]
      },
      {
        "id": "using-evince;i-can-view-and-print-a-pdf-file-stored-in-non-persistent-/home/amnesia",
        "keyword": "Scenario",
        "name": "I can view and print a PDF file stored in non-persistent /home/amnesia",
        "description": "",
        "line": 12,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:270"
            },
            "result": {
              "status": "passed",
              "duration": 33312
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:277"
            },
            "result": {
              "status": "passed",
              "duration": 6954679
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails from DVD without network and logged in",
            "line": 13,
            "match": {
              "location": "features/step_definitions/snapshots.rb:172"
            },
            "result": {
              "status": "passed",
              "duration": 6722531830
            }
          },
          {
            "keyword": "And ",
            "name": "I copy \"/usr/share/cups/data/default-testpage.pdf\" to \"/home/amnesia\" as user \"amnesia\"",
            "line": 14,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1038"
            },
            "result": {
              "status": "passed",
              "duration": 63088338
            }
          },
          {
            "keyword": "When ",
            "name": "I open \"/home/amnesia/default-testpage.pdf\" with Evince",
            "line": 15,
            "match": {
              "location": "features/step_definitions/evince.rb:1"
            },
            "result": {
              "status": "passed",
              "duration": 4412036027
            }
          },
          {
            "keyword": "Then ",
            "name": "I see \"CupsTestPage.png\" after at most 40 seconds",
            "line": 16,
            "match": {
              "location": "features/step_definitions/common_steps.rb:798"
            },
            "result": {
              "status": "passed",
              "duration": 1182426223
            }
          },
          {
            "keyword": "And ",
            "name": "I can print the current document to \"/home/amnesia/output.pdf\"",
            "line": 17,
            "match": {
              "location": "features/step_definitions/evince.rb:5"
            },
            "result": {
              "status": "passed",
              "duration": 4560466242
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:335"
            },
            "result": {
              "status": "passed",
              "duration": 944412369
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:104"
            },
            "result": {
              "status": "passed",
              "duration": 21199
            }
          }
        ]
      },
      {
        "id": "using-evince;i-can-view-and-print-a-pdf-file-stored-in-persistent-/home/amnesia/persistent",
        "keyword": "Scenario",
        "name": "I can view and print a PDF file stored in persistent /home/amnesia/Persistent",
        "description": "",
        "line": 19,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:270"
            },
            "result": {
              "status": "passed",
              "duration": 11722
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:277"
            },
            "result": {
              "status": "passed",
              "duration": 3076298
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails without network from a USB drive with a persistent partition enabled and logged in",
            "line": 20,
            "match": {
              "location": "features/step_definitions/snapshots.rb:172"
            },
            "result": {
              "status": "passed",
              "duration": 8458382442
            }
          },
          {
            "keyword": "And ",
            "name": "I copy \"/usr/share/cups/data/default-testpage.pdf\" to \"/home/amnesia/Persistent\" as user \"amnesia\"",
            "line": 21,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1038"
            },
            "result": {
              "status": "passed",
              "duration": 82837554
            }
          },
          {
            "keyword": "Then ",
            "name": "the file \"/home/amnesia/Persistent/default-testpage.pdf\" exists",
            "line": 22,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1007"
            },
            "result": {
              "status": "passed",
              "duration": 45553313
            }
          },
          {
            "keyword": "When ",
            "name": "I open \"/home/amnesia/Persistent/default-testpage.pdf\" with Evince",
            "line": 23,
            "match": {
              "location": "features/step_definitions/evince.rb:1"
            },
            "result": {
              "status": "passed",
              "duration": 4357814330
            }
          },
          {
            "keyword": "Then ",
            "name": "I see \"CupsTestPage.png\" after at most 40 seconds",
            "line": 24,
            "match": {
              "location": "features/step_definitions/common_steps.rb:798"
            },
            "result": {
              "status": "passed",
              "duration": 1170600879
            }
          },
          {
            "keyword": "And ",
            "name": "I can print the current document to \"/home/amnesia/Persistent/output.pdf\"",
            "line": 25,
            "match": {
              "location": "features/step_definitions/evince.rb:5"
            },
            "result": {
              "status": "passed",
              "duration": 4329749841
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:335"
            },
            "result": {
              "status": "passed",
              "duration": 877133778
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:104"
            },
            "result": {
              "status": "passed",
              "duration": 21059
            }
          }
        ]
      }
    ]
  },
  {
    "uri": "features/gnome.feature",
    "id": "gnome-is-well-integrated-into-tails",
    "keyword": "Feature",
    "name": "GNOME is well-integrated into Tails",
    "description": "",
    "line": 2,
    "tags": [
      {
        "name": "@product",
        "line": 1
      }
    ],
    "elements": [
      {
        "id": "gnome-is-well-integrated-into-tails;a-screenshot-is-taken-when-the-printscreen-key-is-pressed",
        "keyword": "Scenario",
        "name": "A screenshot is taken when the PRINTSCREEN key is pressed",
        "description": "",
        "line": 5,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          },
          {
            "name": "@not_release_blocker",
            "line": 4
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:270"
            },
            "result": {
              "status": "passed",
              "duration": 13185
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:277"
            },
            "result": {
              "status": "passed",
              "duration": 3567108
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails from DVD without network and logged in",
            "line": 6,
            "match": {
              "location": "features/step_definitions/snapshots.rb:172"
            },
            "result": {
              "status": "passed",
              "duration": 6946287627
            }
          },
          {
            "keyword": "And ",
            "name": "I wait 10 seconds",
            "line": 7,
            "output": [
              "Slept for 10 seconds"
            ],
            "match": {
              "location": "features/step_definitions/common_steps.rb:1370"
            },
            "result": {
              "status": "passed",
              "duration": 10000165217
            }
          },
          {
            "keyword": "And ",
            "name": "there is no screenshot in the live user's Pictures directory",
            "line": 8,
            "match": {
              "location": "features/step_definitions/gnome.rb:7"
            },
            "result": {
              "status": "passed",
              "duration": 51580463
            }
          },
          {
            "keyword": "When ",
            "name": "I press the \"PRINTSCREEN\" key",
            "line": 9,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1264"
            },
            "result": {
              "status": "passed",
              "duration": 121145350
            }
          },
          {
            "keyword": "And ",
            "name": "GNOME offers me various screenshot options",
            "line": 10,
            "match": {
              "location": "features/step_definitions/gnome.rb:1"
            },
            "result": {
              "status": "passed",
              "duration": 870625884
            }
          },
          {
            "keyword": "And ",
            "name": "I press the \"Return\" key",
            "line": 11,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1264"
            },
            "result": {
              "status": "passed",
              "duration": 120777090
            }
          },
          {
            "keyword": "Then ",
            "name": "a screenshot is saved to the live user's Pictures directory",
            "line": 12,
            "match": {
              "location": "features/step_definitions/gnome.rb:17"
            },
            "result": {
              "status": "passed",
              "duration": 42220684
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:335"
            },
            "result": {
              "status": "passed",
              "duration": 568997817
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:104"
            },
            "result": {
              "status": "passed",
              "duration": 21811
            }
          }
        ]
      },
      {
        "id": "gnome-is-well-integrated-into-tails;gnome-notifications-are-shown-to-the-user",
        "keyword": "Scenario",
        "name": "GNOME notifications are shown to the user",
        "description": "",
        "line": 14,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:270"
            },
            "result": {
              "status": "passed",
              "duration": 13525
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:277"
            },
            "result": {
              "status": "passed",
              "duration": 3717550
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails from DVD without network and logged in",
            "line": 15,
            "match": {
              "location": "features/step_definitions/snapshots.rb:172"
            },
            "result": {
              "status": "passed",
              "duration": 7038077726
            }
          },
          {
            "keyword": "When ",
            "name": "the \"Dogtail rules!\" notification is sent",
            "line": 16,
            "match": {
              "location": "features/step_definitions/gnome.rb:26"
            },
            "result": {
              "status": "passed",
              "duration": 195167068
            }
          },
          {
            "keyword": "Then ",
            "name": "the \"Dogtail rules!\" notification is shown to the user",
            "line": 17,
            "match": {
              "location": "features/step_definitions/gnome.rb:30"
            },
            "result": {
              "status": "passed",
              "duration": 367595619
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:335"
            },
            "result": {
              "status": "passed",
              "duration": 572728013
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:104"
            },
            "result": {
              "status": "passed",
              "duration": 29405
            }
          }
        ]
      },
      {
        "id": "gnome-is-well-integrated-into-tails;i-can-launch-various-apps-via-gnome-activities-overview",
        "keyword": "Scenario",
        "name": "I can launch various apps via GNOME Activities Overview",
        "description": "",
        "line": 19,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:270"
            },
            "result": {
              "status": "passed",
              "duration": 13806
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:277"
            },
            "result": {
              "status": "passed",
              "duration": 3968822
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails without network from a USB drive with a persistent partition enabled and logged in",
            "line": 22,
            "comments": [
              {
                "value": "# Some apps (Electrum and Persistent Storage Backup) only start when",
                "line": 20
              },
              {
                "value": "# a Persistent Storage is available.",
                "line": 21
              }
            ],
            "match": {
              "location": "features/step_definitions/snapshots.rb:172"
            },
            "result": {
              "status": "passed",
              "duration": 7323593135
            }
          },
          {
            "keyword": "And ",
            "name": "the network is plugged",
            "line": 24,
            "comments": [
              {
                "value": "# Some apps (Tor Browser) only start when the network is plugged.",
                "line": 23
              }
            ],
            "match": {
              "location": "features/step_definitions/common_steps.rb:137"
            },
            "result": {
              "status": "passed",
              "duration": 21625244
            }
          },
          {
            "keyword": "And ",
            "name": "Tor is ready",
            "line": 25,
            "match": {
              "location": "features/step_definitions/common_steps.rb:650"
            },
            "result": {
              "status": "passed",
              "duration": 10635563735
            }
          },
          {
            "keyword": "And ",
            "name": "all notifications have disappeared",
            "line": 26,
            "match": {
              "location": "features/step_definitions/common_steps.rb:762"
            },
            "result": {
              "status": "passed",
              "duration": 7073500845
            }
          },
          {
            "keyword": "When ",
            "name": "I start \"Additional Software\" via GNOME Activities Overview",
            "line": 27,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1165"
            },
            "result": {
              "status": "passed",
              "duration": 9602530509
            }
          },
          {
            "keyword": "And ",
            "name": "I close the \"tails-additional-software-config\" window",
            "line": 28,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1203"
            },
            "result": {
              "status": "passed",
              "duration": 1741837698
            }
          },
          {
            "keyword": "When ",
            "name": "I start \"Disks\" via GNOME Activities Overview",
            "line": 29,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1165"
            },
            "result": {
              "status": "passed",
              "duration": 7907092608
            }
          },
          {
            "keyword": "And ",
            "name": "I close the \"gnome-disks\" window via Alt+F4",
            "line": 31,
            "comments": [
              {
                "value": "# The close button of GNOME Disks is not accessible",
                "line": 30
              }
            ],
            "match": {
              "location": "features/step_definitions/common_steps.rb:1234"
            },
            "result": {
              "status": "passed",
              "duration": 374170294
            }
          },
          {
            "keyword": "When ",
            "name": "I start \"Console\" via GNOME Activities Overview",
            "line": 32,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1165"
            },
            "result": {
              "status": "passed",
              "duration": 8212250892
            }
          },
          {
            "keyword": "And ",
            "name": "I close Console",
            "line": 33,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1246"
            },
            "result": {
              "status": "passed",
              "duration": 2832301920
            }
          },
          {
            "keyword": "When ",
            "name": "I start \"Files\" via GNOME Activities Overview",
            "line": 34,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1165"
            },
            "result": {
              "status": "passed",
              "duration": 7990509703
            }
          },
          {
            "keyword": "And ",
            "name": "I close the \"org.gnome.Nautilus\" window",
            "line": 35,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1203"
            },
            "result": {
              "status": "passed",
              "duration": 16131344563
            }
          },
          {
            "keyword": "When ",
            "name": "I start \"Persistent Storage\" via GNOME Activities Overview",
            "line": 36,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1165"
            },
            "result": {
              "status": "passed",
              "duration": 9899597263
            }
          },
          {
            "keyword": "And ",
            "name": "I close the \"tps-frontend\" window",
            "line": 37,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1203"
            },
            "result": {
              "status": "passed",
              "duration": 2299937668
            }
          },
          {
            "keyword": "When ",
            "name": "I start \"Back Up Persistent Storage\" via GNOME Activities Overview",
            "line": 38,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1165"
            },
            "result": {
              "status": "passed",
              "duration": 10738366279
            }
          },
          {
            "keyword": "And ",
            "name": "I close the \"zenity\" window",
            "line": 39,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1203"
            },
            "result": {
              "status": "passed",
              "duration": 1954272190
            }
          },
          {
            "keyword": "When ",
            "name": "I start \"Pidgin\" via GNOME Activities Overview",
            "line": 40,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1165"
            },
            "result": {
              "status": "passed",
              "duration": 7848511518
            }
          },
          {
            "keyword": "And ",
            "name": "I close the \"Pidgin\" window via Alt+F4",
            "line": 41,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1234"
            },
            "result": {
              "status": "passed",
              "duration": 2101154941
            }
          },
          {
            "keyword": "When ",
            "name": "I start \"Thunderbird\" via GNOME Activities Overview",
            "line": 42,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1165"
            },
            "result": {
              "status": "passed",
              "duration": 8519246442
            }
          },
          {
            "keyword": "And ",
            "name": "I click \"Learn More\" in the \"Install Thunderbird\" zenity dialog",
            "line": 43,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1912"
            },
            "result": {
              "status": "passed",
              "duration": 3740636609
            }
          },
          {
            "keyword": "And ",
            "name": "I close the \"Firefox\" window",
            "line": 44,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1203"
            },
            "result": {
              "status": "passed",
              "duration": 7409943444
            }
          },
          {
            "keyword": "When ",
            "name": "I start \"Tor Browser\" via GNOME Activities Overview",
            "line": 45,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1165"
            },
            "result": {
              "status": "passed",
              "duration": 8377142044
            }
          },
          {
            "keyword": "And ",
            "name": "I close the \"Firefox\" window",
            "line": 46,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1203"
            },
            "result": {
              "status": "passed",
              "duration": 3079403410
            }
          },
          {
            "keyword": "When ",
            "name": "I start \"Unlock VeraCrypt Volumes\" via GNOME Activities Overview",
            "line": 47,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1165"
            },
            "result": {
              "status": "passed",
              "duration": 10005675557
            }
          },
          {
            "keyword": "And ",
            "name": "I close the \"unlock-veracrypt-volumes\" window",
            "line": 48,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1203"
            },
            "result": {
              "status": "passed",
              "duration": 1751897915
            }
          },
          {
            "keyword": "When ",
            "name": "I start \"Unsafe Browser\" via GNOME Activities Overview",
            "line": 49,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1165"
            },
            "result": {
              "status": "passed",
              "duration": 8797833088
            }
          },
          {
            "keyword": "And ",
            "name": "I close the \"Firefox\" window",
            "line": 50,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1203"
            },
            "result": {
              "status": "passed",
              "duration": 4467491309
            }
          },
          {
            "keyword": "When ",
            "name": "I start \"Secrets\" via GNOME Activities Overview",
            "line": 51,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1165"
            },
            "result": {
              "status": "passed",
              "duration": 7988321690
            }
          },
          {
            "keyword": "And ",
            "name": "I close the \"secrets\" window",
            "line": 52,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1203"
            },
            "result": {
              "status": "passed",
              "duration": 2790788609
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:335"
            },
            "result": {
              "status": "passed",
              "duration": 1224469011
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:104"
            },
            "result": {
              "status": "passed",
              "duration": 29095
            }
          }
        ]
      }
    ]
  },
  {
    "uri": "features/hardware_failure.feature",
    "id": "hardware-failures",
    "keyword": "Feature",
    "name": "Hardware failures",
    "description": "  In order to update my failing hardware before I lose data\n  As a Tails user\n  I want to be warned about hardware failures",
    "line": 2,
    "tags": [
      {
        "name": "@product",
        "line": 1
      }
    ],
    "elements": [
      {
        "id": "hardware-failures;alerting-about-disk-read-failures-before-reaching-the-welcome-screen;;2",
        "keyword": "Scenario Outline",
        "name": "Alerting about disk read failures before reaching the Welcome Screen",
        "description": "",
        "line": 16,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          },
          {
            "name": "@broken_welcome_screen",
            "line": 7
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:270"
            },
            "result": {
              "status": "passed",
              "duration": 23944
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:277"
            },
            "result": {
              "status": "passed",
              "duration": 4658083
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "a computer",
            "line": 16,
            "match": {
              "location": "features/step_definitions/common_steps.rb:98"
            },
            "result": {
              "status": "passed",
              "duration": 65294216
            }
          },
          {
            "keyword": "And ",
            "name": "SquashFS is damaged in a way that some read operations fail",
            "line": 16,
            "match": {
              "location": "features/step_definitions/hardware.rb:32"
            },
            "result": {
              "status": "passed",
              "duration": 28934
            }
          },
          {
            "keyword": "When ",
            "name": "I start the computer",
            "line": 16,
            "match": {
              "location": "features/step_definitions/common_steps.rb:202"
            },
            "result": {
              "status": "passed",
              "duration": 760457766
            }
          },
          {
            "keyword": "Then ",
            "name": "the computer boots Tails",
            "line": 16,
            "match": {
              "location": "features/step_definitions/common_steps.rb:402"
            },
            "result": {
              "status": "passed",
              "duration": 27926309736
            }
          },
          {
            "keyword": "And ",
            "name": "I see a disk failure message on the splash screen",
            "line": 16,
            "match": {
              "location": "features/step_definitions/hardware.rb:42"
            },
            "result": {
              "status": "passed",
              "duration": 1707795099
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:335"
            },
            "result": {
              "status": "passed",
              "duration": 854213352
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:104"
            },
            "result": {
              "status": "passed",
              "duration": 9626488
            }
          }
        ]
      },
      {
        "id": "hardware-failures;alerting-about-disk-read-failures-before-reaching-the-welcome-screen;;3",
        "keyword": "Scenario Outline",
        "name": "Alerting about disk read failures before reaching the Welcome Screen",
        "description": "",
        "line": 17,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          },
          {
            "name": "@broken_welcome_screen",
            "line": 7
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:270"
            },
            "result": {
              "status": "passed",
              "duration": 25528
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:277"
            },
            "result": {
              "status": "passed",
              "duration": 5877078
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "a computer",
            "line": 17,
            "match": {
              "location": "features/step_definitions/common_steps.rb:98"
            },
            "result": {
              "status": "passed",
              "duration": 114722758
            }
          },
          {
            "keyword": "And ",
            "name": "boot device is damaged in a way that some read operations fail",
            "line": 17,
            "match": {
              "location": "features/step_definitions/hardware.rb:32"
            },
            "result": {
              "status": "passed",
              "duration": 50675
            }
          },
          {
            "keyword": "When ",
            "name": "I start the computer",
            "line": 17,
            "match": {
              "location": "features/step_definitions/common_steps.rb:202"
            },
            "result": {
              "status": "passed",
              "duration": 929115252
            }
          },
          {
            "keyword": "Then ",
            "name": "the computer boots Tails",
            "line": 17,
            "match": {
              "location": "features/step_definitions/common_steps.rb:402"
            },
            "result": {
              "status": "passed",
              "duration": 27355411113
            }
          },
          {
            "keyword": "And ",
            "name": "I see a disk failure message on the splash screen",
            "line": 17,
            "match": {
              "location": "features/step_definitions/hardware.rb:42"
            },
            "result": {
              "status": "passed",
              "duration": 1490291996
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:335"
            },
            "result": {
              "status": "passed",
              "duration": 963238291
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:104"
            },
            "result": {
              "status": "passed",
              "duration": 8227946
            }
          }
        ]
      },
      {
        "id": "hardware-failures;alerting-about-disk-read-failures-before-reaching-the-welcome-screen;;4",
        "keyword": "Scenario Outline",
        "name": "Alerting about disk read failures before reaching the Welcome Screen",
        "description": "",
        "line": 18,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          },
          {
            "name": "@broken_welcome_screen",
            "line": 7
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:270"
            },
            "result": {
              "status": "passed",
              "duration": 39474
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:277"
            },
            "result": {
              "status": "passed",
              "duration": 4925585
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "a computer",
            "line": 18,
            "match": {
              "location": "features/step_definitions/common_steps.rb:98"
            },
            "result": {
              "status": "passed",
              "duration": 97748454
            }
          },
          {
            "keyword": "And ",
            "name": "boot device with a target error is damaged in a way that some read operations fail",
            "line": 18,
            "match": {
              "location": "features/step_definitions/hardware.rb:32"
            },
            "result": {
              "status": "passed",
              "duration": 42430
            }
          },
          {
            "keyword": "When ",
            "name": "I start the computer",
            "line": 18,
            "match": {
              "location": "features/step_definitions/common_steps.rb:202"
            },
            "result": {
              "status": "passed",
              "duration": 795436259
            }
          },
          {
            "keyword": "Then ",
            "name": "the computer boots Tails",
            "line": 18,
            "match": {
              "location": "features/step_definitions/common_steps.rb:402"
            },
            "result": {
              "status": "passed",
              "duration": 26887732790
            }
          },
          {
            "keyword": "And ",
            "name": "I see a disk failure message on the splash screen",
            "line": 18,
            "match": {
              "location": "features/step_definitions/hardware.rb:42"
            },
            "result": {
              "status": "passed",
              "duration": 3745455845
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:335"
            },
            "result": {
              "status": "passed",
              "duration": 733110013
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:104"
            },
            "result": {
              "status": "passed",
              "duration": 6563335
            }
          }
        ]
      },
      {
        "id": "hardware-failures;alerting-about-disk-read-failures-in-gnome;;2",
        "keyword": "Scenario Outline",
        "name": "Alerting about disk read failures in GNOME",
        "description": "",
        "line": 29,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          },
          {
            "name": "@doc",
            "line": 20
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:270"
            },
            "result": {
              "status": "passed",
              "duration": 14176
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:277"
            },
            "result": {
              "status": "passed",
              "duration": 1915211
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "a computer",
            "line": 29,
            "match": {
              "location": "features/step_definitions/common_steps.rb:98"
            },
            "result": {
              "status": "passed",
              "duration": 90152282
            }
          },
          {
            "keyword": "And ",
            "name": "I have started Tails without network from a USB drive with a persistent partition enabled and logged in",
            "line": 29,
            "match": {
              "location": "features/step_definitions/snapshots.rb:172"
            },
            "result": {
              "status": "passed",
              "duration": 7789715002
            }
          },
          {
            "keyword": "When ",
            "name": "Tails detects disk read failures on the SquashFS",
            "line": 29,
            "match": {
              "location": "features/step_definitions/hardware.rb:5"
            },
            "result": {
              "status": "passed",
              "duration": 1328396572
            }
          },
          {
            "keyword": "Then ",
            "name": "I see a disk failure message",
            "line": 29,
            "match": {
              "location": "features/step_definitions/hardware.rb:38"
            },
            "result": {
              "status": "passed",
              "duration": 804827006
            }
          },
          {
            "keyword": "Then ",
            "name": "I can open the hardware failure documentation from the disk failure message",
            "line": 29,
            "match": {
              "location": "features/step_definitions/hardware.rb:46"
            },
            "result": {
              "status": "passed",
              "duration": 18412979872
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:335"
            },
            "result": {
              "status": "passed",
              "duration": 1394550579
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:104"
            },
            "result": {
              "status": "passed",
              "duration": 25909
            }
          }
        ]
      },
      {
        "id": "hardware-failures;alerting-about-disk-read-failures-in-gnome;;3",
        "keyword": "Scenario Outline",
        "name": "Alerting about disk read failures in GNOME",
        "description": "",
        "line": 30,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          },
          {
            "name": "@doc",
            "line": 20
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:270"
            },
            "result": {
              "status": "passed",
              "duration": 24927
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:277"
            },
            "result": {
              "status": "passed",
              "duration": 4689522
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "a computer",
            "line": 30,
            "match": {
              "location": "features/step_definitions/common_steps.rb:98"
            },
            "result": {
              "status": "passed",
              "duration": 62336861
            }
          },
          {
            "keyword": "And ",
            "name": "I have started Tails without network from a USB drive with a persistent partition enabled and logged in",
            "line": 30,
            "match": {
              "location": "features/step_definitions/snapshots.rb:172"
            },
            "result": {
              "status": "passed",
              "duration": 8069939613
            }
          },
          {
            "keyword": "When ",
            "name": "Tails detects disk read failures on the boot device",
            "line": 30,
            "match": {
              "location": "features/step_definitions/hardware.rb:5"
            },
            "result": {
              "status": "passed",
              "duration": 379976154
            }
          },
          {
            "keyword": "Then ",
            "name": "I see a disk failure message",
            "line": 30,
            "match": {
              "location": "features/step_definitions/hardware.rb:38"
            },
            "result": {
              "status": "passed",
              "duration": 1594375035
            }
          },
          {
            "keyword": "Then ",
            "name": "I can open the hardware failure documentation from the disk failure message",
            "line": 30,
            "match": {
              "location": "features/step_definitions/hardware.rb:46"
            },
            "result": {
              "status": "passed",
              "duration": 16375427451
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:335"
            },
            "result": {
              "status": "passed",
              "duration": 1722438629
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:104"
            },
            "result": {
              "status": "passed",
              "duration": 25728
            }
          }
        ]
      },
      {
        "id": "hardware-failures;alerting-about-disk-read-failures-in-gnome;;4",
        "keyword": "Scenario Outline",
        "name": "Alerting about disk read failures in GNOME",
        "description": "",
        "line": 31,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          },
          {
            "name": "@doc",
            "line": 20
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:270"
            },
            "result": {
              "status": "passed",
              "duration": 19557
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:277"
            },
            "result": {
              "status": "passed",
              "duration": 4579907
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "a computer",
            "line": 31,
            "match": {
              "location": "features/step_definitions/common_steps.rb:98"
            },
            "result": {
              "status": "passed",
              "duration": 87069452
            }
          },
          {
            "keyword": "And ",
            "name": "I have started Tails without network from a USB drive with a persistent partition enabled and logged in",
            "line": 31,
            "match": {
              "location": "features/step_definitions/snapshots.rb:172"
            },
            "result": {
              "status": "passed",
              "duration": 8173207677
            }
          },
          {
            "keyword": "When ",
            "name": "Tails detects disk read failures on the boot device with a target error",
            "line": 31,
            "match": {
              "location": "features/step_definitions/hardware.rb:5"
            },
            "result": {
              "status": "passed",
              "duration": 406550553
            }
          },
          {
            "keyword": "Then ",
            "name": "I see a disk failure message",
            "line": 31,
            "match": {
              "location": "features/step_definitions/hardware.rb:38"
            },
            "result": {
              "status": "passed",
              "duration": 1718778257
            }
          },
          {
            "keyword": "Then ",
            "name": "I can open the hardware failure documentation from the disk failure message",
            "line": 31,
            "match": {
              "location": "features/step_definitions/hardware.rb:46"
            },
            "result": {
              "status": "passed",
              "duration": 17777631846
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:335"
            },
            "result": {
              "status": "passed",
              "duration": 1158316054
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:104"
            },
            "result": {
              "status": "passed",
              "duration": 22963
            }
          }
        ]
      },
      {
        "id": "hardware-failures;gpt-backup-corruption-with-a-persistent-partition;;2",
        "keyword": "Scenario Outline",
        "name": "GPT backup corruption with a persistent partition",
        "description": "",
        "line": 45,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:270"
            },
            "result": {
              "status": "passed",
              "duration": 13114
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:277"
            },
            "result": {
              "status": "passed",
              "duration": 3002649
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails without network from a USB drive with a persistent partition and stopped at Tails Greeter's login screen",
            "line": 45,
            "match": {
              "location": "features/step_definitions/snapshots.rb:172"
            },
            "result": {
              "status": "passed",
              "duration": 9380766992
            }
          },
          {
            "keyword": "And ",
            "name": "I corrupt the boot device's GPT backup header",
            "line": 45,
            "match": {
              "location": "features/step_definitions/hardware.rb:56"
            },
            "result": {
              "status": "passed",
              "duration": 280523845
            }
          },
          {
            "keyword": "And ",
            "name": "I power off the computer",
            "line": 45,
            "match": {
              "location": "features/step_definitions/common_steps.rb:273"
            },
            "result": {
              "status": "passed",
              "duration": 275961641
            }
          },
          {
            "keyword": "When ",
            "name": "I start the computer",
            "line": 45,
            "match": {
              "location": "features/step_definitions/common_steps.rb:202"
            },
            "result": {
              "status": "passed",
              "duration": 773158442
            }
          },
          {
            "keyword": "Then ",
            "name": "the computer boots Tails",
            "line": 45,
            "match": {
              "location": "features/step_definitions/common_steps.rb:402"
            },
            "result": {
              "status": "passed",
              "duration": 42607113553
            }
          },
          {
            "keyword": "When ",
            "name": "I log in to a new session",
            "line": 45,
            "match": {
              "location": "features/step_definitions/common_steps.rb:514"
            },
            "result": {
              "status": "passed",
              "duration": 11320745234
            }
          },
          {
            "keyword": "And ",
            "name": "all notifications have disappeared",
            "line": 45,
            "match": {
              "location": "features/step_definitions/common_steps.rb:762"
            },
            "result": {
              "status": "passed",
              "duration": 7124274034
            }
          },
          {
            "keyword": "Then ",
            "name": "I am recommended to migrate to a new USB stick due to partitioning errors",
            "line": 45,
            "match": {
              "location": "features/step_definitions/hardware.rb:82"
            },
            "result": {
              "status": "passed",
              "duration": 187611968
            }
          },
          {
            "keyword": "And ",
            "name": "Tails detected partitioning error partitioning-corruption",
            "line": 45,
            "match": {
              "location": "features/step_definitions/hardware.rb:129"
            },
            "result": {
              "status": "passed",
              "duration": 21845936
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:335"
            },
            "result": {
              "status": "passed",
              "duration": 803233603
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:104"
            },
            "result": {
              "status": "passed",
              "duration": 15479181
            }
          }
        ]
      },
      {
        "id": "hardware-failures;gpt-backup-corruption-with-a-persistent-partition;;3",
        "keyword": "Scenario Outline",
        "name": "GPT backup corruption with a persistent partition",
        "description": "",
        "line": 46,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:270"
            },
            "result": {
              "status": "passed",
              "duration": 118521
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:277"
            },
            "result": {
              "status": "passed",
              "duration": 8218147
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails without network from a USB drive with a persistent partition and stopped at Tails Greeter's login screen",
            "line": 46,
            "match": {
              "location": "features/step_definitions/snapshots.rb:172"
            },
            "result": {
              "status": "passed",
              "duration": 7919520549
            }
          },
          {
            "keyword": "And ",
            "name": "I corrupt the boot device's GPT backup partition table",
            "line": 46,
            "match": {
              "location": "features/step_definitions/hardware.rb:56"
            },
            "result": {
              "status": "passed",
              "duration": 321800094
            }
          },
          {
            "keyword": "And ",
            "name": "I power off the computer",
            "line": 46,
            "match": {
              "location": "features/step_definitions/common_steps.rb:273"
            },
            "result": {
              "status": "passed",
              "duration": 485455889
            }
          },
          {
            "keyword": "When ",
            "name": "I start the computer",
            "line": 46,
            "match": {
              "location": "features/step_definitions/common_steps.rb:202"
            },
            "result": {
              "status": "passed",
              "duration": 782667194
            }
          },
          {
            "keyword": "Then ",
            "name": "the computer boots Tails",
            "line": 46,
            "match": {
              "location": "features/step_definitions/common_steps.rb:402"
            },
            "result": {
              "status": "passed",
              "duration": 40153446944
            }
          },
          {
            "keyword": "When ",
            "name": "I log in to a new session",
            "line": 46,
            "match": {
              "location": "features/step_definitions/common_steps.rb:514"
            },
            "result": {
              "status": "passed",
              "duration": 12644484950
            }
          },
          {
            "keyword": "And ",
            "name": "all notifications have disappeared",
            "line": 46,
            "match": {
              "location": "features/step_definitions/common_steps.rb:762"
            },
            "result": {
              "status": "passed",
              "duration": 6967701390
            }
          },
          {
            "keyword": "Then ",
            "name": "I am recommended to migrate to a new USB stick due to partitioning errors",
            "line": 46,
            "match": {
              "location": "features/step_definitions/hardware.rb:82"
            },
            "result": {
              "status": "passed",
              "duration": 129849372
            }
          },
          {
            "keyword": "And ",
            "name": "Tails detected partitioning error partitioning-corruption",
            "line": 46,
            "match": {
              "location": "features/step_definitions/hardware.rb:129"
            },
            "result": {
              "status": "passed",
              "duration": 4828584
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:335"
            },
            "result": {
              "status": "passed",
              "duration": 840152401
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:104"
            },
            "result": {
              "status": "passed",
              "duration": 7916916
            }
          }
        ]
      },
      {
        "id": "hardware-failures;gpt-backup-corruption-without-a-persistent-partition",
        "keyword": "Scenario",
        "name": "GPT backup corruption without a persistent partition",
        "description": "",
        "line": 48,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:270"
            },
            "result": {
              "status": "passed",
              "duration": 19786
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:277"
            },
            "result": {
              "status": "passed",
              "duration": 3674492
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "a computer",
            "line": 49,
            "match": {
              "location": "features/step_definitions/common_steps.rb:98"
            },
            "result": {
              "status": "passed",
              "duration": 65947918
            }
          },
          {
            "keyword": "And ",
            "name": "I set Tails to boot with options \"test_gpt_corruption=gpt_backup,gpt_backup_table\"",
            "line": 50,
            "match": {
              "location": "features/step_definitions/common_steps.rb:194"
            },
            "result": {
              "status": "passed",
              "duration": 36866
            }
          },
          {
            "keyword": "And ",
            "name": "I temporarily create a 7200 MiB disk named \"temp\"",
            "line": 51,
            "match": {
              "location": "features/step_definitions/common_steps.rb:111"
            },
            "result": {
              "status": "passed",
              "duration": 9180203
            }
          },
          {
            "keyword": "And ",
            "name": "I plug USB drive \"temp\"",
            "line": 52,
            "match": {
              "location": "features/step_definitions/common_steps.rb:123"
            },
            "result": {
              "status": "passed",
              "duration": 1023103558
            }
          },
          {
            "keyword": "And ",
            "name": "I write the Tails USB image to disk \"temp\"",
            "line": 53,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1766"
            },
            "result": {
              "status": "passed",
              "duration": 14459313074
            }
          },
          {
            "keyword": "When ",
            "name": "I start Tails from USB drive \"temp\" with network unplugged",
            "line": 54,
            "match": {
              "location": "features/step_definitions/common_steps.rb:232"
            },
            "result": {
              "status": "passed",
              "duration": 71503632738
            }
          },
          {
            "keyword": "Then ",
            "name": "Tails is running from USB drive \"temp\"",
            "line": 55,
            "match": {
              "location": "features/step_definitions/usb.rb:935"
            },
            "result": {
              "status": "passed",
              "duration": 642290501
            }
          },
          {
            "keyword": "And ",
            "name": "the Greeter forbids creating a persistent partition",
            "line": 56,
            "match": {
              "location": "features/step_definitions/hardware.rb:97"
            },
            "result": {
              "status": "passed",
              "duration": 104179255
            }
          },
          {
            "keyword": "When ",
            "name": "I log in to a new session",
            "line": 57,
            "match": {
              "location": "features/step_definitions/common_steps.rb:514"
            },
            "result": {
              "status": "passed",
              "duration": 10074695036
            }
          },
          {
            "keyword": "And ",
            "name": "all notifications have disappeared",
            "line": 58,
            "match": {
              "location": "features/step_definitions/common_steps.rb:762"
            },
            "result": {
              "status": "passed",
              "duration": 7216746051
            }
          },
          {
            "keyword": "Then ",
            "name": "I am recommended to reinstall Tails due to partitioning errors",
            "line": 59,
            "match": {
              "location": "features/step_definitions/hardware.rb:90"
            },
            "result": {
              "status": "passed",
              "duration": 183468755
            }
          },
          {
            "keyword": "And ",
            "name": "I close the \"zenity\" window",
            "line": 62,
            "comments": [
              {
                "value": "# We are gonna verify the dialog again so we need to clean up the",
                "line": 60
              },
              {
                "value": "# first instance.",
                "line": 61
              }
            ],
            "match": {
              "location": "features/step_definitions/common_steps.rb:1203"
            },
            "result": {
              "status": "passed",
              "duration": 1208627121
            }
          },
          {
            "keyword": "And ",
            "name": "I am told that Persistent Storage cannot be created",
            "line": 63,
            "match": {
              "location": "features/step_definitions/hardware.rb:124"
            },
            "result": {
              "status": "passed",
              "duration": 1764086110
            }
          },
          {
            "keyword": "And ",
            "name": "Tails detected partitioning error partitioning-corruption",
            "line": 64,
            "match": {
              "location": "features/step_definitions/hardware.rb:129"
            },
            "result": {
              "status": "passed",
              "duration": 7333158
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:335"
            },
            "result": {
              "status": "passed",
              "duration": 1105005322
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:104"
            },
            "result": {
              "status": "passed",
              "duration": 131195845
            }
          }
        ]
      },
      {
        "id": "hardware-failures;disk-partitioning-errors-without-a-persistent-partition;;2",
        "keyword": "Scenario Outline",
        "name": "Disk partitioning errors without a persistent partition",
        "description": "",
        "line": 80,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:270"
            },
            "result": {
              "status": "passed",
              "duration": 23534
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:277"
            },
            "result": {
              "status": "passed",
              "duration": 9464264
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "a computer",
            "line": 80,
            "match": {
              "location": "features/step_definitions/common_steps.rb:98"
            },
            "result": {
              "status": "passed",
              "duration": 76556868
            }
          },
          {
            "keyword": "And ",
            "name": "I set Tails to boot with options \"test_partitioning_errors=guid\"",
            "line": 80,
            "match": {
              "location": "features/step_definitions/common_steps.rb:194"
            },
            "result": {
              "status": "passed",
              "duration": 28764
            }
          },
          {
            "keyword": "And ",
            "name": "I temporarily create a 7200 MiB disk named \"temp\"",
            "line": 80,
            "match": {
              "location": "features/step_definitions/common_steps.rb:111"
            },
            "result": {
              "status": "passed",
              "duration": 10972091
            }
          },
          {
            "keyword": "And ",
            "name": "I plug USB drive \"temp\"",
            "line": 80,
            "match": {
              "location": "features/step_definitions/common_steps.rb:123"
            },
            "result": {
              "status": "passed",
              "duration": 1016535439
            }
          },
          {
            "keyword": "And ",
            "name": "I write the Tails USB image to disk \"temp\"",
            "line": 80,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1766"
            },
            "result": {
              "status": "passed",
              "duration": 14017570358
            }
          },
          {
            "keyword": "When ",
            "name": "I start Tails from USB drive \"temp\" with network unplugged",
            "line": 80,
            "match": {
              "location": "features/step_definitions/common_steps.rb:232"
            },
            "result": {
              "status": "passed",
              "duration": 53644774485
            }
          },
          {
            "keyword": "Then ",
            "name": "Tails is running from USB drive \"temp\"",
            "line": 80,
            "match": {
              "location": "features/step_definitions/usb.rb:935"
            },
            "result": {
              "status": "passed",
              "duration": 588342804
            }
          },
          {
            "keyword": "And ",
            "name": "the Greeter recommends reinstalling Tails due to partitioning errors",
            "line": 80,
            "match": {
              "location": "features/step_definitions/hardware.rb:74"
            },
            "result": {
              "status": "passed",
              "duration": 65961694
            }
          },
          {
            "keyword": "And ",
            "name": "the Greeter forbids starting Tails",
            "line": 80,
            "match": {
              "location": "features/step_definitions/hardware.rb:103"
            },
            "result": {
              "status": "passed",
              "duration": 47644464
            }
          },
          {
            "keyword": "And ",
            "name": "the Greeter forbids all settings but language",
            "line": 80,
            "match": {
              "location": "features/step_definitions/hardware.rb:109"
            },
            "result": {
              "status": "passed",
              "duration": 178044608
            }
          },
          {
            "keyword": "And ",
            "name": "Tails detected partitioning error guid-not-randomized",
            "line": 80,
            "match": {
              "location": "features/step_definitions/hardware.rb:129"
            },
            "result": {
              "status": "passed",
              "duration": 6519342
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:335"
            },
            "result": {
              "status": "passed",
              "duration": 599870216
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:104"
            },
            "result": {
              "status": "passed",
              "duration": 146551975
            }
          }
        ]
      },
      {
        "id": "hardware-failures;disk-partitioning-errors-without-a-persistent-partition;;3",
        "keyword": "Scenario Outline",
        "name": "Disk partitioning errors without a persistent partition",
        "description": "",
        "line": 81,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:270"
            },
            "result": {
              "status": "passed",
              "duration": 20759
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:277"
            },
            "result": {
              "status": "passed",
              "duration": 3274709
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "a computer",
            "line": 81,
            "match": {
              "location": "features/step_definitions/common_steps.rb:98"
            },
            "result": {
              "status": "passed",
              "duration": 92232527
            }
          },
          {
            "keyword": "And ",
            "name": "I set Tails to boot with options \"test_partitioning_errors=part_resize\"",
            "line": 81,
            "match": {
              "location": "features/step_definitions/common_steps.rb:194"
            },
            "result": {
              "status": "passed",
              "duration": 43682
            }
          },
          {
            "keyword": "And ",
            "name": "I temporarily create a 7200 MiB disk named \"temp\"",
            "line": 81,
            "match": {
              "location": "features/step_definitions/common_steps.rb:111"
            },
            "result": {
              "status": "passed",
              "duration": 14570296
            }
          },
          {
            "keyword": "And ",
            "name": "I plug USB drive \"temp\"",
            "line": 81,
            "match": {
              "location": "features/step_definitions/common_steps.rb:123"
            },
            "result": {
              "status": "passed",
              "duration": 1022980971
            }
          },
          {
            "keyword": "And ",
            "name": "I write the Tails USB image to disk \"temp\"",
            "line": 81,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1766"
            },
            "result": {
              "status": "passed",
              "duration": 14183376800
            }
          },
          {
            "keyword": "When ",
            "name": "I start Tails from USB drive \"temp\" with network unplugged",
            "line": 81,
            "match": {
              "location": "features/step_definitions/common_steps.rb:232"
            },
            "result": {
              "status": "passed",
              "duration": 49102850320
            }
          },
          {
            "keyword": "Then ",
            "name": "Tails is running from USB drive \"temp\"",
            "line": 81,
            "match": {
              "location": "features/step_definitions/usb.rb:935"
            },
            "result": {
              "status": "passed",
              "duration": 532573425
            }
          },
          {
            "keyword": "And ",
            "name": "the Greeter recommends reinstalling Tails due to partitioning errors",
            "line": 81,
            "match": {
              "location": "features/step_definitions/hardware.rb:74"
            },
            "result": {
              "status": "passed",
              "duration": 50681949
            }
          },
          {
            "keyword": "And ",
            "name": "the Greeter forbids starting Tails",
            "line": 81,
            "match": {
              "location": "features/step_definitions/hardware.rb:103"
            },
            "result": {
              "status": "passed",
              "duration": 75410109
            }
          },
          {
            "keyword": "And ",
            "name": "the Greeter forbids all settings but language",
            "line": 81,
            "match": {
              "location": "features/step_definitions/hardware.rb:109"
            },
            "result": {
              "status": "passed",
              "duration": 284784432
            }
          },
          {
            "keyword": "And ",
            "name": "Tails detected partitioning error system-partition-not-resized",
            "line": 81,
            "match": {
              "location": "features/step_definitions/hardware.rb:129"
            },
            "result": {
              "status": "passed",
              "duration": 18880958
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:335"
            },
            "result": {
              "status": "passed",
              "duration": 959423040
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:104"
            },
            "result": {
              "status": "passed",
              "duration": 166523307
            }
          }
        ]
      },
      {
        "id": "hardware-failures;disk-partitioning-errors-without-a-persistent-partition;;4",
        "keyword": "Scenario Outline",
        "name": "Disk partitioning errors without a persistent partition",
        "description": "",
        "line": 82,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:270"
            },
            "result": {
              "status": "passed",
              "duration": 18856
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:277"
            },
            "result": {
              "status": "passed",
              "duration": 4288259
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "a computer",
            "line": 82,
            "match": {
              "location": "features/step_definitions/common_steps.rb:98"
            },
            "result": {
              "status": "passed",
              "duration": 82066778
            }
          },
          {
            "keyword": "And ",
            "name": "I set Tails to boot with options \"test_partitioning_errors=fs_resize\"",
            "line": 82,
            "match": {
              "location": "features/step_definitions/common_steps.rb:194"
            },
            "result": {
              "status": "passed",
              "duration": 34325
            }
          },
          {
            "keyword": "And ",
            "name": "I temporarily create a 7200 MiB disk named \"temp\"",
            "line": 82,
            "match": {
              "location": "features/step_definitions/common_steps.rb:111"
            },
            "result": {
              "status": "passed",
              "duration": 14649645
            }
          },
          {
            "keyword": "And ",
            "name": "I plug USB drive \"temp\"",
            "line": 82,
            "match": {
              "location": "features/step_definitions/common_steps.rb:123"
            },
            "result": {
              "status": "passed",
              "duration": 1022613458
            }
          },
          {
            "keyword": "And ",
            "name": "I write the Tails USB image to disk \"temp\"",
            "line": 82,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1766"
            },
            "result": {
              "status": "passed",
              "duration": 14128052784
            }
          },
          {
            "keyword": "When ",
            "name": "I start Tails from USB drive \"temp\" with network unplugged",
            "line": 82,
            "match": {
              "location": "features/step_definitions/common_steps.rb:232"
            },
            "result": {
              "status": "passed",
              "duration": 57055187876
            }
          },
          {
            "keyword": "Then ",
            "name": "Tails is running from USB drive \"temp\"",
            "line": 82,
            "match": {
              "location": "features/step_definitions/usb.rb:935"
            },
            "result": {
              "status": "passed",
              "duration": 670841462
            }
          },
          {
            "keyword": "And ",
            "name": "the Greeter recommends reinstalling Tails due to partitioning errors",
            "line": 82,
            "match": {
              "location": "features/step_definitions/hardware.rb:74"
            },
            "result": {
              "status": "passed",
              "duration": 51722179
            }
          },
          {
            "keyword": "And ",
            "name": "the Greeter forbids starting Tails",
            "line": 82,
            "match": {
              "location": "features/step_definitions/hardware.rb:103"
            },
            "result": {
              "status": "passed",
              "duration": 34202243
            }
          },
          {
            "keyword": "And ",
            "name": "the Greeter forbids all settings but language",
            "line": 82,
            "match": {
              "location": "features/step_definitions/hardware.rb:109"
            },
            "result": {
              "status": "passed",
              "duration": 186512163
            }
          },
          {
            "keyword": "And ",
            "name": "Tails detected partitioning error fs-not-resized",
            "line": 82,
            "match": {
              "location": "features/step_definitions/hardware.rb:129"
            },
            "result": {
              "status": "passed",
              "duration": 5386509
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:335"
            },
            "result": {
              "status": "passed",
              "duration": 979488843
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:104"
            },
            "result": {
              "status": "passed",
              "duration": 317239620
            }
          }
        ]
      }
    ]
  },
  {
    "uri": "features/hardware_support.feature",
    "id": "hardware-support",
    "keyword": "Feature",
    "name": "Hardware support",
    "description": "  In order to understand why Tails does not work\n  As someone using a computer that is not supported by Tails\n  I want to be informed that my hardware is not supported",
    "line": 2,
    "tags": [
      {
        "name": "@product",
        "line": 1
      }
    ],
    "elements": [
      {
        "id": "hardware-support;alerting-about-unsupported-graphics-card-before-reaching-the-welcome-screen",
        "keyword": "Scenario",
        "name": "Alerting about unsupported graphics card before reaching the Welcome Screen",
        "description": "",
        "line": 8,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          },
          {
            "name": "@broken_welcome_screen",
            "line": 7
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:270"
            },
            "result": {
              "status": "passed",
              "duration": 82485
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:277"
            },
            "result": {
              "status": "passed",
              "duration": 19829585
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "a computer",
            "line": 9,
            "match": {
              "location": "features/step_definitions/common_steps.rb:98"
            },
            "result": {
              "status": "passed",
              "duration": 446275066
            }
          },
          {
            "keyword": "And ",
            "name": "the computer has an unsupported graphics card",
            "line": 10,
            "match": {
              "location": "features/step_definitions/hardware.rb:1"
            },
            "result": {
              "status": "passed",
              "duration": 105558
            }
          },
          {
            "keyword": "When ",
            "name": "I start the computer",
            "line": 11,
            "match": {
              "location": "features/step_definitions/common_steps.rb:202"
            },
            "result": {
              "status": "passed",
              "duration": 864704194
            }
          },
          {
            "keyword": "Then ",
            "name": "the computer boots Tails",
            "line": 12,
            "match": {
              "location": "features/step_definitions/common_steps.rb:402"
            },
            "result": {
              "status": "passed",
              "duration": 28639640449
            }
          },
          {
            "keyword": "Then ",
            "name": "I see a graphics card failure message on the splash screen",
            "line": 13,
            "match": {
              "location": "features/step_definitions/hardware.rb:52"
            },
            "result": {
              "status": "passed",
              "duration": 11765732518
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:335"
            },
            "result": {
              "status": "passed",
              "duration": 922852587
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:104"
            },
            "result": {
              "status": "passed",
              "duration": 9205714
            }
          }
        ]
      }
    ]
  },
  {
    "uri": "features/keys.feature",
    "id": "tails-related-cryptographic-keys-are-up-to-date",
    "keyword": "Feature",
    "name": "Tails-related cryptographic keys are up-to-date",
    "description": "",
    "line": 2,
    "tags": [
      {
        "name": "@product",
        "line": 1
      }
    ],
    "elements": [
      {
        "id": "tails-related-cryptographic-keys-are-up-to-date;the-included-openpgp-keys-are-up-to-date",
        "keyword": "Scenario",
        "name": "The included OpenPGP keys are up-to-date",
        "description": "",
        "line": 5,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          },
          {
            "name": "@doc",
            "line": 4
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:270"
            },
            "result": {
              "status": "passed",
              "duration": 20059
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:277"
            },
            "result": {
              "status": "passed",
              "duration": 3164207
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails from DVD without network and logged in",
            "line": 6,
            "match": {
              "location": "features/step_definitions/snapshots.rb:172"
            },
            "result": {
              "status": "passed",
              "duration": 7581850146
            }
          },
          {
            "keyword": "Then ",
            "name": "the included OpenPGP keys are valid for the next 1 month",
            "line": 7,
            "match": {
              "location": "features/step_definitions/checks.rb:3"
            },
            "result": {
              "status": "passed",
              "duration": 1783952036
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:335"
            },
            "result": {
              "status": "passed",
              "duration": 856775915
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:104"
            },
            "result": {
              "status": "passed",
              "duration": 19847
            }
          }
        ]
      },
      {
        "id": "tails-related-cryptographic-keys-are-up-to-date;the-included-apt-repository-keys-are-up-to-date",
        "keyword": "Scenario",
        "name": "The included APT repository keys are up-to-date",
        "description": "",
        "line": 9,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:270"
            },
            "result": {
              "status": "passed",
              "duration": 10460
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:277"
            },
            "result": {
              "status": "passed",
              "duration": 4896140
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails from DVD without network and logged in",
            "line": 10,
            "match": {
              "location": "features/step_definitions/snapshots.rb:172"
            },
            "result": {
              "status": "passed",
              "duration": 6758789591
            }
          },
          {
            "keyword": "Then ",
            "name": "the keys trusted by APT are valid for the next 3 months",
            "line": 11,
            "match": {
              "location": "features/step_definitions/checks.rb:7"
            },
            "result": {
              "status": "passed",
              "duration": 1810963807
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:335"
            },
            "result": {
              "status": "passed",
              "duration": 781992652
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:104"
            },
            "result": {
              "status": "passed",
              "duration": 28684
            }
          }
        ]
      }
    ]
  },
  {
    "uri": "features/localization.feature",
    "id": "localization",
    "keyword": "Feature",
    "name": "Localization",
    "description": "  As a Tails user\n  I want Tails to be localized in my native language\n  And various Tails features should still work",
    "line": 2,
    "tags": [
      {
        "name": "@product",
        "line": 1
      }
    ],
    "elements": [
      {
        "id": "localization;do-not-localize-the-xdg-user-dirs-to-be-able-to-use-those-dirs-in-tor-browser-(#19255);;2",
        "keyword": "Scenario Outline",
        "name": "Do not localize the XDG User Dirs to be able to use those dirs in Tor Browser (#19255)",
        "description": "",
        "line": 14,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:270"
            },
            "result": {
              "status": "passed",
              "duration": 27873
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:277"
            },
            "result": {
              "status": "passed",
              "duration": 5866136
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails from DVD without network and stopped at Tails Greeter's login screen",
            "line": 14,
            "match": {
              "location": "features/step_definitions/snapshots.rb:172"
            },
            "result": {
              "status": "passed",
              "duration": 9096797074
            }
          },
          {
            "keyword": "And ",
            "name": "I log in to a new session in German (de)",
            "line": 14,
            "match": {
              "location": "features/step_definitions/common_steps.rb:514"
            },
            "result": {
              "status": "passed",
              "duration": 26923854594
            }
          },
          {
            "keyword": "Then ",
            "name": "the live user's Documents directory exists",
            "line": 14,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1268"
            },
            "result": {
              "status": "passed",
              "duration": 81761485
            }
          },
          {
            "keyword": "And ",
            "name": "there is a GNOME bookmark for the Documents directory",
            "line": 14,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1272"
            },
            "result": {
              "status": "passed",
              "duration": 15258423979
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:335"
            },
            "result": {
              "status": "passed",
              "duration": 1200055658
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:104"
            },
            "result": {
              "status": "passed",
              "duration": 21790
            }
          }
        ]
      },
      {
        "id": "localization;do-not-localize-the-xdg-user-dirs-to-be-able-to-use-those-dirs-in-tor-browser-(#19255);;3",
        "keyword": "Scenario Outline",
        "name": "Do not localize the XDG User Dirs to be able to use those dirs in Tor Browser (#19255)",
        "description": "",
        "line": 15,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:270"
            },
            "result": {
              "status": "passed",
              "duration": 12594
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:277"
            },
            "result": {
              "status": "passed",
              "duration": 4787977
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails from DVD without network and stopped at Tails Greeter's login screen",
            "line": 15,
            "match": {
              "location": "features/step_definitions/snapshots.rb:172"
            },
            "result": {
              "status": "passed",
              "duration": 7625085651
            }
          },
          {
            "keyword": "And ",
            "name": "I log in to a new session in German (de)",
            "line": 15,
            "match": {
              "location": "features/step_definitions/common_steps.rb:514"
            },
            "result": {
              "status": "passed",
              "duration": 29151628705
            }
          },
          {
            "keyword": "Then ",
            "name": "the live user's Downloads directory exists",
            "line": 15,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1268"
            },
            "result": {
              "status": "passed",
              "duration": 48773891
            }
          },
          {
            "keyword": "And ",
            "name": "there is a GNOME bookmark for the Downloads directory",
            "line": 15,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1272"
            },
            "result": {
              "status": "passed",
              "duration": 14854545215
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:335"
            },
            "result": {
              "status": "passed",
              "duration": 1046030092
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:104"
            },
            "result": {
              "status": "passed",
              "duration": 21169
            }
          }
        ]
      },
      {
        "id": "localization;do-not-localize-the-xdg-user-dirs-to-be-able-to-use-those-dirs-in-tor-browser-(#19255);;4",
        "keyword": "Scenario Outline",
        "name": "Do not localize the XDG User Dirs to be able to use those dirs in Tor Browser (#19255)",
        "description": "",
        "line": 16,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:270"
            },
            "result": {
              "status": "passed",
              "duration": 12634
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:277"
            },
            "result": {
              "status": "passed",
              "duration": 4735918
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails from DVD without network and stopped at Tails Greeter's login screen",
            "line": 16,
            "match": {
              "location": "features/step_definitions/snapshots.rb:172"
            },
            "result": {
              "status": "passed",
              "duration": 7542240931
            }
          },
          {
            "keyword": "And ",
            "name": "I log in to a new session in German (de)",
            "line": 16,
            "match": {
              "location": "features/step_definitions/common_steps.rb:514"
            },
            "result": {
              "status": "passed",
              "duration": 27927451372
            }
          },
          {
            "keyword": "Then ",
            "name": "the live user's Music directory exists",
            "line": 16,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1268"
            },
            "result": {
              "status": "passed",
              "duration": 50828162
            }
          },
          {
            "keyword": "And ",
            "name": "there is a GNOME bookmark for the Music directory",
            "line": 16,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1272"
            },
            "result": {
              "status": "passed",
              "duration": 14833146948
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:335"
            },
            "result": {
              "status": "passed",
              "duration": 1175033295
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:104"
            },
            "result": {
              "status": "passed",
              "duration": 25077
            }
          }
        ]
      },
      {
        "id": "localization;do-not-localize-the-xdg-user-dirs-to-be-able-to-use-those-dirs-in-tor-browser-(#19255);;5",
        "keyword": "Scenario Outline",
        "name": "Do not localize the XDG User Dirs to be able to use those dirs in Tor Browser (#19255)",
        "description": "",
        "line": 17,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:270"
            },
            "result": {
              "status": "passed",
              "duration": 12784
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:277"
            },
            "result": {
              "status": "passed",
              "duration": 3310266
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails from DVD without network and stopped at Tails Greeter's login screen",
            "line": 17,
            "match": {
              "location": "features/step_definitions/snapshots.rb:172"
            },
            "result": {
              "status": "passed",
              "duration": 8259306643
            }
          },
          {
            "keyword": "And ",
            "name": "I log in to a new session in German (de)",
            "line": 17,
            "match": {
              "location": "features/step_definitions/common_steps.rb:514"
            },
            "result": {
              "status": "passed",
              "duration": 27945690833
            }
          },
          {
            "keyword": "Then ",
            "name": "the live user's Pictures directory exists",
            "line": 17,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1268"
            },
            "result": {
              "status": "passed",
              "duration": 41751236
            }
          },
          {
            "keyword": "And ",
            "name": "there is a GNOME bookmark for the Pictures directory",
            "line": 17,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1272"
            },
            "result": {
              "status": "passed",
              "duration": 14716328748
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:335"
            },
            "result": {
              "status": "passed",
              "duration": 1020059380
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:104"
            },
            "result": {
              "status": "passed",
              "duration": 23013
            }
          }
        ]
      },
      {
        "id": "localization;do-not-localize-the-xdg-user-dirs-to-be-able-to-use-those-dirs-in-tor-browser-(#19255);;6",
        "keyword": "Scenario Outline",
        "name": "Do not localize the XDG User Dirs to be able to use those dirs in Tor Browser (#19255)",
        "description": "",
        "line": 18,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:270"
            },
            "result": {
              "status": "passed",
              "duration": 11702
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:277"
            },
            "result": {
              "status": "passed",
              "duration": 2948238
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails from DVD without network and stopped at Tails Greeter's login screen",
            "line": 18,
            "match": {
              "location": "features/step_definitions/snapshots.rb:172"
            },
            "result": {
              "status": "passed",
              "duration": 7150584904
            }
          },
          {
            "keyword": "And ",
            "name": "I log in to a new session in German (de)",
            "line": 18,
            "match": {
              "location": "features/step_definitions/common_steps.rb:514"
            },
            "result": {
              "status": "passed",
              "duration": 27871002671
            }
          },
          {
            "keyword": "Then ",
            "name": "the live user's Videos directory exists",
            "line": 18,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1268"
            },
            "result": {
              "status": "passed",
              "duration": 41997675
            }
          },
          {
            "keyword": "And ",
            "name": "there is a GNOME bookmark for the Videos directory",
            "line": 18,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1272"
            },
            "result": {
              "status": "passed",
              "duration": 14646552942
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:335"
            },
            "result": {
              "status": "passed",
              "duration": 973508435
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:104"
            },
            "result": {
              "status": "passed",
              "duration": 23616
            }
          }
        ]
      },
      {
        "id": "localization;tails-is-localized-for-every-tier-1-language;;2",
        "keyword": "Scenario Outline",
        "name": "Tails is localized for every tier-1 language",
        "description": "",
        "line": 46,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          },
          {
            "name": "@doc",
            "line": 20
          },
          {
            "name": "@slow",
            "line": 20
          },
          {
            "name": "@not_release_blocker",
            "line": 20
          }
        ],
        "comments": [
          {
            "value": "# This list has to be kept in sync' with our list of tier-1 languages:",
            "line": 39
          },
          {
            "value": "#   https://tails.net/contribute/how/translate/#tier-1-languages",
            "line": 40
          },
          {
            "value": "# Known issues, that this step effectively verifies are still present:",
            "line": 42
          },
          {
            "value": "#  - Not all localized layouts exist in the GNOME screen keyboard: #8444",
            "line": 43
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:270"
            },
            "result": {
              "status": "passed",
              "duration": 16110
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:277"
            },
            "result": {
              "status": "passed",
              "duration": 4926963
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails from DVD without network and stopped at Tails Greeter's login screen",
            "line": 46,
            "match": {
              "location": "features/step_definitions/snapshots.rb:172"
            },
            "result": {
              "status": "passed",
              "duration": 7769408779
            }
          },
          {
            "keyword": "And ",
            "name": "I set an administration password",
            "line": 46,
            "match": {
              "location": "features/step_definitions/common_steps.rb:576"
            },
            "result": {
              "status": "passed",
              "duration": 6834909804
            }
          },
          {
            "keyword": "When ",
            "name": "I log in to a new session in Arabic (ar)",
            "line": 46,
            "match": {
              "location": "features/step_definitions/common_steps.rb:514"
            },
            "result": {
              "status": "passed",
              "duration": 28574485747
            }
          },
          {
            "keyword": "Then ",
            "name": "the keyboard layout is set to \"eg\"",
            "line": 46,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1676"
            },
            "result": {
              "status": "passed",
              "duration": 88671819
            }
          },
          {
            "keyword": "And ",
            "name": "tpsd is localized to the selected locale",
            "line": 46,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1706"
            },
            "result": {
              "status": "passed",
              "duration": 89251446
            }
          },
          {
            "keyword": "Given ",
            "name": "the network is plugged",
            "line": 46,
            "match": {
              "location": "features/step_definitions/common_steps.rb:137"
            },
            "result": {
              "status": "passed",
              "duration": 55860896
            }
          },
          {
            "keyword": "And ",
            "name": "Tor is ready",
            "line": 46,
            "match": {
              "location": "features/step_definitions/common_steps.rb:650"
            },
            "result": {
              "status": "passed",
              "duration": 12140432632
            }
          },
          {
            "keyword": "Then ",
            "name": "I successfully start the Unsafe Browser",
            "line": 46,
            "match": {
              "location": "features/step_definitions/browser.rb:109"
            },
            "result": {
              "status": "passed",
              "duration": 6725389836
            }
          },
          {
            "keyword": "And ",
            "name": "I kill the Unsafe Browser",
            "line": 46,
            "match": {
              "location": "features/step_definitions/browser.rb:121"
            },
            "result": {
              "status": "passed",
              "duration": 5314618310
            }
          },
          {
            "keyword": "Given ",
            "name": "Thunderbird is installed",
            "line": 46,
            "match": {
              "location": "features/step_definitions/thunderbird.rb:280"
            },
            "result": {
              "status": "passed",
              "duration": 28449546330
            }
          },
          {
            "keyword": "When ",
            "name": "I enable the screen keyboard",
            "line": 46,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1694"
            },
            "result": {
              "status": "passed",
              "duration": 73757378
            }
          },
          {
            "keyword": "Then ",
            "name": "the screen keyboard works in Tor Browser",
            "line": 46,
            "match": {
              "location": "features/step_definitions/browser.rb:447"
            },
            "result": {
              "status": "passed",
              "duration": 13366905623
            }
          },
          {
            "keyword": "And ",
            "name": "DuckDuckGo is the default search engine",
            "line": 46,
            "match": {
              "location": "features/step_definitions/browser.rb:436"
            },
            "result": {
              "status": "passed",
              "duration": 5046189688
            }
          },
          {
            "keyword": "And ",
            "name": "I kill the Tor Browser",
            "line": 46,
            "match": {
              "location": "features/step_definitions/browser.rb:121"
            },
            "result": {
              "status": "passed",
              "duration": 5212031532
            }
          },
          {
            "keyword": "And ",
            "name": "the screen keyboard works in Thunderbird",
            "line": 46,
            "match": {
              "location": "features/step_definitions/thunderbird.rb:211"
            },
            "result": {
              "status": "passed",
              "duration": 5402020530
            }
          },
          {
            "keyword": "And ",
            "name": "the layout of the screen keyboard is set to \"us\"",
            "line": 46,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1702"
            },
            "result": {
              "status": "passed",
              "duration": 426285352
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:335"
            },
            "result": {
              "status": "passed",
              "duration": 1549891182
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:104"
            },
            "result": {
              "status": "passed",
              "duration": 21270
            }
          }
        ]
      },
      {
        "id": "localization;tails-is-localized-for-every-tier-1-language;;3",
        "keyword": "Scenario Outline",
        "name": "Tails is localized for every tier-1 language",
        "description": "",
        "line": 47,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          },
          {
            "name": "@doc",
            "line": 20
          },
          {
            "name": "@slow",
            "line": 20
          },
          {
            "name": "@not_release_blocker",
            "line": 20
          }
        ],
        "comments": [
          {
            "value": "# This list has to be kept in sync' with our list of tier-1 languages:",
            "line": 39
          },
          {
            "value": "#   https://tails.net/contribute/how/translate/#tier-1-languages",
            "line": 40
          },
          {
            "value": "# Known issues, that this step effectively verifies are still present:",
            "line": 42
          },
          {
            "value": "#  - Not all localized layouts exist in the GNOME screen keyboard: #8444",
            "line": 43
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:270"
            },
            "result": {
              "status": "passed",
              "duration": 13615
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:277"
            },
            "result": {
              "status": "passed",
              "duration": 5989550
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails from DVD without network and stopped at Tails Greeter's login screen",
            "line": 47,
            "match": {
              "location": "features/step_definitions/snapshots.rb:172"
            },
            "result": {
              "status": "passed",
              "duration": 7550268982
            }
          },
          {
            "keyword": "And ",
            "name": "I set an administration password",
            "line": 47,
            "match": {
              "location": "features/step_definitions/common_steps.rb:576"
            },
            "result": {
              "status": "passed",
              "duration": 6891570760
            }
          },
          {
            "keyword": "When ",
            "name": "I log in to a new session in Chinese (zh_CN)",
            "line": 47,
            "match": {
              "location": "features/step_definitions/common_steps.rb:514"
            },
            "result": {
              "status": "passed",
              "duration": 28489790723
            }
          },
          {
            "keyword": "Then ",
            "name": "the keyboard layout is set to \"cn\"",
            "line": 47,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1676"
            },
            "result": {
              "status": "passed",
              "duration": 88651310
            }
          },
          {
            "keyword": "And ",
            "name": "tpsd is localized to the selected locale",
            "line": 47,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1706"
            },
            "result": {
              "status": "passed",
              "duration": 101890901
            }
          },
          {
            "keyword": "Given ",
            "name": "the network is plugged",
            "line": 47,
            "match": {
              "location": "features/step_definitions/common_steps.rb:137"
            },
            "result": {
              "status": "passed",
              "duration": 15764234
            }
          },
          {
            "keyword": "And ",
            "name": "Tor is ready",
            "line": 47,
            "match": {
              "location": "features/step_definitions/common_steps.rb:650"
            },
            "result": {
              "status": "passed",
              "duration": 13003606301
            }
          },
          {
            "keyword": "Then ",
            "name": "I successfully start the Unsafe Browser",
            "line": 47,
            "match": {
              "location": "features/step_definitions/browser.rb:109"
            },
            "result": {
              "status": "passed",
              "duration": 6170568349
            }
          },
          {
            "keyword": "And ",
            "name": "I kill the Unsafe Browser",
            "line": 47,
            "match": {
              "location": "features/step_definitions/browser.rb:121"
            },
            "result": {
              "status": "passed",
              "duration": 5212837591
            }
          },
          {
            "keyword": "Given ",
            "name": "Thunderbird is installed",
            "line": 47,
            "match": {
              "location": "features/step_definitions/thunderbird.rb:280"
            },
            "result": {
              "status": "passed",
              "duration": 29566116508
            }
          },
          {
            "keyword": "When ",
            "name": "I enable the screen keyboard",
            "line": 47,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1694"
            },
            "result": {
              "status": "passed",
              "duration": 62230387
            }
          },
          {
            "keyword": "Then ",
            "name": "the screen keyboard works in Tor Browser",
            "line": 47,
            "match": {
              "location": "features/step_definitions/browser.rb:447"
            },
            "result": {
              "status": "passed",
              "duration": 12352014181
            }
          },
          {
            "keyword": "And ",
            "name": "DuckDuckGo is the default search engine",
            "line": 47,
            "match": {
              "location": "features/step_definitions/browser.rb:436"
            },
            "result": {
              "status": "passed",
              "duration": 6230308406
            }
          },
          {
            "keyword": "And ",
            "name": "I kill the Tor Browser",
            "line": 47,
            "match": {
              "location": "features/step_definitions/browser.rb:121"
            },
            "result": {
              "status": "passed",
              "duration": 5309585584
            }
          },
          {
            "keyword": "And ",
            "name": "the screen keyboard works in Thunderbird",
            "line": 47,
            "match": {
              "location": "features/step_definitions/thunderbird.rb:211"
            },
            "result": {
              "status": "passed",
              "duration": 4904959387
            }
          },
          {
            "keyword": "And ",
            "name": "the layout of the screen keyboard is set to \"us\"",
            "line": 47,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1702"
            },
            "result": {
              "status": "passed",
              "duration": 441016959
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:335"
            },
            "result": {
              "status": "passed",
              "duration": 1813341237
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:104"
            },
            "result": {
              "status": "passed",
              "duration": 309389
            }
          }
        ]
      },
      {
        "id": "localization;tails-is-localized-for-every-tier-1-language;;4",
        "keyword": "Scenario Outline",
        "name": "Tails is localized for every tier-1 language",
        "description": "",
        "line": 48,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          },
          {
            "name": "@doc",
            "line": 20
          },
          {
            "name": "@slow",
            "line": 20
          },
          {
            "name": "@not_release_blocker",
            "line": 20
          }
        ],
        "comments": [
          {
            "value": "# This list has to be kept in sync' with our list of tier-1 languages:",
            "line": 39
          },
          {
            "value": "#   https://tails.net/contribute/how/translate/#tier-1-languages",
            "line": 40
          },
          {
            "value": "# Known issues, that this step effectively verifies are still present:",
            "line": 42
          },
          {
            "value": "#  - Not all localized layouts exist in the GNOME screen keyboard: #8444",
            "line": 43
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:270"
            },
            "result": {
              "status": "passed",
              "duration": 53019
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:277"
            },
            "result": {
              "status": "passed",
              "duration": 8791451
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails from DVD without network and stopped at Tails Greeter's login screen",
            "line": 48,
            "match": {
              "location": "features/step_definitions/snapshots.rb:172"
            },
            "result": {
              "status": "passed",
              "duration": 8536047438
            }
          },
          {
            "keyword": "And ",
            "name": "I set an administration password",
            "line": 48,
            "match": {
              "location": "features/step_definitions/common_steps.rb:576"
            },
            "result": {
              "status": "passed",
              "duration": 6897491658
            }
          },
          {
            "keyword": "When ",
            "name": "I log in to a new session in English (en)",
            "line": 48,
            "match": {
              "location": "features/step_definitions/common_steps.rb:514"
            },
            "result": {
              "status": "passed",
              "duration": 12272985443
            }
          },
          {
            "keyword": "Then ",
            "name": "the keyboard layout is set to \"us\"",
            "line": 48,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1676"
            },
            "result": {
              "status": "passed",
              "duration": 168710332
            }
          },
          {
            "keyword": "And ",
            "name": "tpsd is localized to the selected locale",
            "line": 48,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1706"
            },
            "result": {
              "status": "passed",
              "duration": 152342960
            }
          },
          {
            "keyword": "Given ",
            "name": "the network is plugged",
            "line": 48,
            "match": {
              "location": "features/step_definitions/common_steps.rb:137"
            },
            "result": {
              "status": "passed",
              "duration": 16152755
            }
          },
          {
            "keyword": "And ",
            "name": "Tor is ready",
            "line": 48,
            "match": {
              "location": "features/step_definitions/common_steps.rb:650"
            },
            "result": {
              "status": "passed",
              "duration": 12103912417
            }
          },
          {
            "keyword": "Then ",
            "name": "I successfully start the Unsafe Browser",
            "line": 48,
            "match": {
              "location": "features/step_definitions/browser.rb:109"
            },
            "result": {
              "status": "passed",
              "duration": 5941306156
            }
          },
          {
            "keyword": "And ",
            "name": "I kill the Unsafe Browser",
            "line": 48,
            "match": {
              "location": "features/step_definitions/browser.rb:121"
            },
            "result": {
              "status": "passed",
              "duration": 5237893933
            }
          },
          {
            "keyword": "Given ",
            "name": "Thunderbird is installed",
            "line": 48,
            "match": {
              "location": "features/step_definitions/thunderbird.rb:280"
            },
            "result": {
              "status": "passed",
              "duration": 28939313789
            }
          },
          {
            "keyword": "When ",
            "name": "I enable the screen keyboard",
            "line": 48,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1694"
            },
            "result": {
              "status": "passed",
              "duration": 302266999
            }
          },
          {
            "keyword": "Then ",
            "name": "the screen keyboard works in Tor Browser",
            "line": 48,
            "match": {
              "location": "features/step_definitions/browser.rb:447"
            },
            "result": {
              "status": "passed",
              "duration": 11998156914
            }
          },
          {
            "keyword": "And ",
            "name": "DuckDuckGo is the default search engine",
            "line": 48,
            "match": {
              "location": "features/step_definitions/browser.rb:436"
            },
            "result": {
              "status": "passed",
              "duration": 4100048231
            }
          },
          {
            "keyword": "And ",
            "name": "I kill the Tor Browser",
            "line": 48,
            "match": {
              "location": "features/step_definitions/browser.rb:121"
            },
            "result": {
              "status": "passed",
              "duration": 5217078109
            }
          },
          {
            "keyword": "And ",
            "name": "the screen keyboard works in Thunderbird",
            "line": 48,
            "match": {
              "location": "features/step_definitions/thunderbird.rb:211"
            },
            "result": {
              "status": "passed",
              "duration": 6191149645
            }
          },
          {
            "keyword": "And ",
            "name": "the layout of the screen keyboard is set to \"us\"",
            "line": 48,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1702"
            },
            "result": {
              "status": "passed",
              "duration": 425226766
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:335"
            },
            "result": {
              "status": "passed",
              "duration": 1441561879
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:104"
            },
            "result": {
              "status": "passed",
              "duration": 33341
            }
          }
        ]
      },
      {
        "id": "localization;tails-is-localized-for-every-tier-1-language;;5",
        "keyword": "Scenario Outline",
        "name": "Tails is localized for every tier-1 language",
        "description": "",
        "line": 49,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          },
          {
            "name": "@doc",
            "line": 20
          },
          {
            "name": "@slow",
            "line": 20
          },
          {
            "name": "@not_release_blocker",
            "line": 20
          }
        ],
        "comments": [
          {
            "value": "# This list has to be kept in sync' with our list of tier-1 languages:",
            "line": 39
          },
          {
            "value": "#   https://tails.net/contribute/how/translate/#tier-1-languages",
            "line": 40
          },
          {
            "value": "# Known issues, that this step effectively verifies are still present:",
            "line": 42
          },
          {
            "value": "#  - Not all localized layouts exist in the GNOME screen keyboard: #8444",
            "line": 43
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:270"
            },
            "result": {
              "status": "passed",
              "duration": 12723
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:277"
            },
            "result": {
              "status": "passed",
              "duration": 3145770
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails from DVD without network and stopped at Tails Greeter's login screen",
            "line": 49,
            "match": {
              "location": "features/step_definitions/snapshots.rb:172"
            },
            "result": {
              "status": "passed",
              "duration": 7542472795
            }
          },
          {
            "keyword": "And ",
            "name": "I set an administration password",
            "line": 49,
            "match": {
              "location": "features/step_definitions/common_steps.rb:576"
            },
            "result": {
              "status": "passed",
              "duration": 7160242907
            }
          },
          {
            "keyword": "When ",
            "name": "I log in to a new session in French (fr)",
            "line": 49,
            "match": {
              "location": "features/step_definitions/common_steps.rb:514"
            },
            "result": {
              "status": "passed",
              "duration": 29551307441
            }
          },
          {
            "keyword": "Then ",
            "name": "the keyboard layout is set to \"fr\"",
            "line": 49,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1676"
            },
            "result": {
              "status": "passed",
              "duration": 120947342
            }
          },
          {
            "keyword": "And ",
            "name": "tpsd is localized to the selected locale",
            "line": 49,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1706"
            },
            "result": {
              "status": "passed",
              "duration": 114671545
            }
          },
          {
            "keyword": "Given ",
            "name": "the network is plugged",
            "line": 49,
            "match": {
              "location": "features/step_definitions/common_steps.rb:137"
            },
            "result": {
              "status": "passed",
              "duration": 18545688
            }
          },
          {
            "keyword": "And ",
            "name": "Tor is ready",
            "line": 49,
            "match": {
              "location": "features/step_definitions/common_steps.rb:650"
            },
            "result": {
              "status": "passed",
              "duration": 12719391499
            }
          },
          {
            "keyword": "Then ",
            "name": "I successfully start the Unsafe Browser",
            "line": 49,
            "match": {
              "location": "features/step_definitions/browser.rb:109"
            },
            "result": {
              "status": "passed",
              "duration": 6404258299
            }
          },
          {
            "keyword": "And ",
            "name": "I kill the Unsafe Browser",
            "line": 49,
            "match": {
              "location": "features/step_definitions/browser.rb:121"
            },
            "result": {
              "status": "passed",
              "duration": 5227798918
            }
          },
          {
            "keyword": "Given ",
            "name": "Thunderbird is installed",
            "line": 49,
            "match": {
              "location": "features/step_definitions/thunderbird.rb:280"
            },
            "result": {
              "status": "passed",
              "duration": 28629492440
            }
          },
          {
            "keyword": "When ",
            "name": "I enable the screen keyboard",
            "line": 49,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1694"
            },
            "result": {
              "status": "passed",
              "duration": 58906717
            }
          },
          {
            "keyword": "Then ",
            "name": "the screen keyboard works in Tor Browser",
            "line": 49,
            "match": {
              "location": "features/step_definitions/browser.rb:447"
            },
            "result": {
              "status": "passed",
              "duration": 10824178489
            }
          },
          {
            "keyword": "And ",
            "name": "DuckDuckGo is the default search engine",
            "line": 49,
            "match": {
              "location": "features/step_definitions/browser.rb:436"
            },
            "result": {
              "status": "passed",
              "duration": 6516271008
            }
          },
          {
            "keyword": "And ",
            "name": "I kill the Tor Browser",
            "line": 49,
            "match": {
              "location": "features/step_definitions/browser.rb:121"
            },
            "result": {
              "status": "passed",
              "duration": 5278463928
            }
          },
          {
            "keyword": "And ",
            "name": "the screen keyboard works in Thunderbird",
            "line": 49,
            "match": {
              "location": "features/step_definitions/thunderbird.rb:211"
            },
            "result": {
              "status": "passed",
              "duration": 4653675796
            }
          },
          {
            "keyword": "And ",
            "name": "the layout of the screen keyboard is set to \"fr\"",
            "line": 49,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1702"
            },
            "result": {
              "status": "passed",
              "duration": 361875250
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:335"
            },
            "result": {
              "status": "passed",
              "duration": 1253535580
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:104"
            },
            "result": {
              "status": "passed",
              "duration": 23925
            }
          }
        ]
      },
      {
        "id": "localization;tails-is-localized-for-every-tier-1-language;;6",
        "keyword": "Scenario Outline",
        "name": "Tails is localized for every tier-1 language",
        "description": "",
        "line": 50,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          },
          {
            "name": "@doc",
            "line": 20
          },
          {
            "name": "@slow",
            "line": 20
          },
          {
            "name": "@not_release_blocker",
            "line": 20
          }
        ],
        "comments": [
          {
            "value": "# This list has to be kept in sync' with our list of tier-1 languages:",
            "line": 39
          },
          {
            "value": "#   https://tails.net/contribute/how/translate/#tier-1-languages",
            "line": 40
          },
          {
            "value": "# Known issues, that this step effectively verifies are still present:",
            "line": 42
          },
          {
            "value": "#  - Not all localized layouts exist in the GNOME screen keyboard: #8444",
            "line": 43
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:270"
            },
            "result": {
              "status": "passed",
              "duration": 14287
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:277"
            },
            "result": {
              "status": "passed",
              "duration": 3124357
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails from DVD without network and stopped at Tails Greeter's login screen",
            "line": 50,
            "match": {
              "location": "features/step_definitions/snapshots.rb:172"
            },
            "result": {
              "status": "passed",
              "duration": 7866312843
            }
          },
          {
            "keyword": "And ",
            "name": "I set an administration password",
            "line": 50,
            "match": {
              "location": "features/step_definitions/common_steps.rb:576"
            },
            "result": {
              "status": "passed",
              "duration": 6894160375
            }
          },
          {
            "keyword": "When ",
            "name": "I log in to a new session in German (de)",
            "line": 50,
            "match": {
              "location": "features/step_definitions/common_steps.rb:514"
            },
            "result": {
              "status": "passed",
              "duration": 26866791120
            }
          },
          {
            "keyword": "Then ",
            "name": "the keyboard layout is set to \"de\"",
            "line": 50,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1676"
            },
            "result": {
              "status": "passed",
              "duration": 120005644
            }
          },
          {
            "keyword": "And ",
            "name": "tpsd is localized to the selected locale",
            "line": 50,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1706"
            },
            "result": {
              "status": "passed",
              "duration": 111179499
            }
          },
          {
            "keyword": "Given ",
            "name": "the network is plugged",
            "line": 50,
            "match": {
              "location": "features/step_definitions/common_steps.rb:137"
            },
            "result": {
              "status": "passed",
              "duration": 21776636
            }
          },
          {
            "keyword": "And ",
            "name": "Tor is ready",
            "line": 50,
            "match": {
              "location": "features/step_definitions/common_steps.rb:650"
            },
            "result": {
              "status": "passed",
              "duration": 12169344042
            }
          },
          {
            "keyword": "Then ",
            "name": "I successfully start the Unsafe Browser",
            "line": 50,
            "match": {
              "location": "features/step_definitions/browser.rb:109"
            },
            "result": {
              "status": "passed",
              "duration": 5419983936
            }
          },
          {
            "keyword": "And ",
            "name": "I kill the Unsafe Browser",
            "line": 50,
            "match": {
              "location": "features/step_definitions/browser.rb:121"
            },
            "result": {
              "status": "passed",
              "duration": 5218892498
            }
          },
          {
            "keyword": "Given ",
            "name": "Thunderbird is installed",
            "line": 50,
            "match": {
              "location": "features/step_definitions/thunderbird.rb:280"
            },
            "result": {
              "status": "passed",
              "duration": 28825598051
            }
          },
          {
            "keyword": "When ",
            "name": "I enable the screen keyboard",
            "line": 50,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1694"
            },
            "result": {
              "status": "passed",
              "duration": 108297855
            }
          },
          {
            "keyword": "Then ",
            "name": "the screen keyboard works in Tor Browser",
            "line": 50,
            "match": {
              "location": "features/step_definitions/browser.rb:447"
            },
            "result": {
              "status": "passed",
              "duration": 11296722354
            }
          },
          {
            "keyword": "And ",
            "name": "DuckDuckGo is the default search engine",
            "line": 50,
            "match": {
              "location": "features/step_definitions/browser.rb:436"
            },
            "result": {
              "status": "passed",
              "duration": 6572697749
            }
          },
          {
            "keyword": "And ",
            "name": "I kill the Tor Browser",
            "line": 50,
            "match": {
              "location": "features/step_definitions/browser.rb:121"
            },
            "result": {
              "status": "passed",
              "duration": 5219723642
            }
          },
          {
            "keyword": "And ",
            "name": "the screen keyboard works in Thunderbird",
            "line": 50,
            "match": {
              "location": "features/step_definitions/thunderbird.rb:211"
            },
            "result": {
              "status": "passed",
              "duration": 4366558265
            }
          },
          {
            "keyword": "And ",
            "name": "the layout of the screen keyboard is set to \"de\"",
            "line": 50,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1702"
            },
            "result": {
              "status": "passed",
              "duration": 384717366
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:335"
            },
            "result": {
              "status": "passed",
              "duration": 1576414430
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:104"
            },
            "result": {
              "status": "passed",
              "duration": 24597
            }
          }
        ]
      },
      {
        "id": "localization;tails-is-localized-for-every-tier-1-language;;7",
        "keyword": "Scenario Outline",
        "name": "Tails is localized for every tier-1 language",
        "description": "",
        "line": 51,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          },
          {
            "name": "@doc",
            "line": 20
          },
          {
            "name": "@slow",
            "line": 20
          },
          {
            "name": "@not_release_blocker",
            "line": 20
          }
        ],
        "comments": [
          {
            "value": "# This list has to be kept in sync' with our list of tier-1 languages:",
            "line": 39
          },
          {
            "value": "#   https://tails.net/contribute/how/translate/#tier-1-languages",
            "line": 40
          },
          {
            "value": "# Known issues, that this step effectively verifies are still present:",
            "line": 42
          },
          {
            "value": "#  - Not all localized layouts exist in the GNOME screen keyboard: #8444",
            "line": 43
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:270"
            },
            "result": {
              "status": "passed",
              "duration": 17673
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:277"
            },
            "result": {
              "status": "passed",
              "duration": 3653119
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails from DVD without network and stopped at Tails Greeter's login screen",
            "line": 51,
            "match": {
              "location": "features/step_definitions/snapshots.rb:172"
            },
            "result": {
              "status": "passed",
              "duration": 7694904108
            }
          },
          {
            "keyword": "And ",
            "name": "I set an administration password",
            "line": 51,
            "match": {
              "location": "features/step_definitions/common_steps.rb:576"
            },
            "result": {
              "status": "passed",
              "duration": 6997648308
            }
          },
          {
            "keyword": "When ",
            "name": "I log in to a new session in Hindi (hi)",
            "line": 51,
            "match": {
              "location": "features/step_definitions/common_steps.rb:514"
            },
            "result": {
              "status": "passed",
              "duration": 26982777622
            }
          },
          {
            "keyword": "Then ",
            "name": "the keyboard layout is set to \"in\"",
            "line": 51,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1676"
            },
            "result": {
              "status": "passed",
              "duration": 107744587
            }
          },
          {
            "keyword": "And ",
            "name": "tpsd is localized to the selected locale",
            "line": 51,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1706"
            },
            "result": {
              "status": "passed",
              "duration": 101518935
            }
          },
          {
            "keyword": "Given ",
            "name": "the network is plugged",
            "line": 51,
            "match": {
              "location": "features/step_definitions/common_steps.rb:137"
            },
            "result": {
              "status": "passed",
              "duration": 15506783
            }
          },
          {
            "keyword": "And ",
            "name": "Tor is ready",
            "line": 51,
            "match": {
              "location": "features/step_definitions/common_steps.rb:650"
            },
            "result": {
              "status": "passed",
              "duration": 12564658486
            }
          },
          {
            "keyword": "Then ",
            "name": "I successfully start the Unsafe Browser",
            "line": 51,
            "match": {
              "location": "features/step_definitions/browser.rb:109"
            },
            "result": {
              "status": "passed",
              "duration": 5575994473
            }
          },
          {
            "keyword": "And ",
            "name": "I kill the Unsafe Browser",
            "line": 51,
            "match": {
              "location": "features/step_definitions/browser.rb:121"
            },
            "result": {
              "status": "passed",
              "duration": 5218948165
            }
          },
          {
            "keyword": "Given ",
            "name": "Thunderbird is installed",
            "line": 51,
            "match": {
              "location": "features/step_definitions/thunderbird.rb:280"
            },
            "result": {
              "status": "passed",
              "duration": 27937844407
            }
          },
          {
            "keyword": "When ",
            "name": "I enable the screen keyboard",
            "line": 51,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1694"
            },
            "result": {
              "status": "passed",
              "duration": 143311787
            }
          },
          {
            "keyword": "Then ",
            "name": "the screen keyboard works in Tor Browser",
            "line": 51,
            "match": {
              "location": "features/step_definitions/browser.rb:447"
            },
            "result": {
              "status": "passed",
              "duration": 11061631762
            }
          },
          {
            "keyword": "And ",
            "name": "DuckDuckGo is the default search engine",
            "line": 51,
            "match": {
              "location": "features/step_definitions/browser.rb:436"
            },
            "result": {
              "status": "passed",
              "duration": 5972177636
            }
          },
          {
            "keyword": "And ",
            "name": "I kill the Tor Browser",
            "line": 51,
            "match": {
              "location": "features/step_definitions/browser.rb:121"
            },
            "result": {
              "status": "passed",
              "duration": 5232034669
            }
          },
          {
            "keyword": "And ",
            "name": "the screen keyboard works in Thunderbird",
            "line": 51,
            "match": {
              "location": "features/step_definitions/thunderbird.rb:211"
            },
            "result": {
              "status": "passed",
              "duration": 4694083360
            }
          },
          {
            "keyword": "And ",
            "name": "the layout of the screen keyboard is set to \"us\"",
            "line": 51,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1702"
            },
            "result": {
              "status": "passed",
              "duration": 494228586
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:335"
            },
            "result": {
              "status": "passed",
              "duration": 1619715346
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:104"
            },
            "result": {
              "status": "passed",
              "duration": 23844
            }
          }
        ]
      },
      {
        "id": "localization;tails-is-localized-for-every-tier-1-language;;8",
        "keyword": "Scenario Outline",
        "name": "Tails is localized for every tier-1 language",
        "description": "",
        "line": 52,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          },
          {
            "name": "@doc",
            "line": 20
          },
          {
            "name": "@slow",
            "line": 20
          },
          {
            "name": "@not_release_blocker",
            "line": 20
          }
        ],
        "comments": [
          {
            "value": "# This list has to be kept in sync' with our list of tier-1 languages:",
            "line": 39
          },
          {
            "value": "#   https://tails.net/contribute/how/translate/#tier-1-languages",
            "line": 40
          },
          {
            "value": "# Known issues, that this step effectively verifies are still present:",
            "line": 42
          },
          {
            "value": "#  - Not all localized layouts exist in the GNOME screen keyboard: #8444",
            "line": 43
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:270"
            },
            "result": {
              "status": "passed",
              "duration": 15889
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:277"
            },
            "result": {
              "status": "passed",
              "duration": 3783143
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails from DVD without network and stopped at Tails Greeter's login screen",
            "line": 52,
            "match": {
              "location": "features/step_definitions/snapshots.rb:172"
            },
            "result": {
              "status": "passed",
              "duration": 8238152642
            }
          },
          {
            "keyword": "And ",
            "name": "I set an administration password",
            "line": 52,
            "match": {
              "location": "features/step_definitions/common_steps.rb:576"
            },
            "result": {
              "status": "passed",
              "duration": 6885652897
            }
          },
          {
            "keyword": "When ",
            "name": "I log in to a new session in Indonesian (id)",
            "line": 52,
            "match": {
              "location": "features/step_definitions/common_steps.rb:514"
            },
            "result": {
              "status": "passed",
              "duration": 27603952844
            }
          },
          {
            "keyword": "Then ",
            "name": "the keyboard layout is set to \"id\"",
            "line": 52,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1676"
            },
            "result": {
              "status": "passed",
              "duration": 100726206
            }
          },
          {
            "keyword": "And ",
            "name": "tpsd is localized to the selected locale",
            "line": 52,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1706"
            },
            "result": {
              "status": "passed",
              "duration": 93191290
            }
          },
          {
            "keyword": "Given ",
            "name": "the network is plugged",
            "line": 52,
            "match": {
              "location": "features/step_definitions/common_steps.rb:137"
            },
            "result": {
              "status": "passed",
              "duration": 21034556
            }
          },
          {
            "keyword": "And ",
            "name": "Tor is ready",
            "line": 52,
            "match": {
              "location": "features/step_definitions/common_steps.rb:650"
            },
            "result": {
              "status": "passed",
              "duration": 12042902197
            }
          },
          {
            "keyword": "Then ",
            "name": "I successfully start the Unsafe Browser",
            "line": 52,
            "match": {
              "location": "features/step_definitions/browser.rb:109"
            },
            "result": {
              "status": "passed",
              "duration": 7223379804
            }
          },
          {
            "keyword": "And ",
            "name": "I kill the Unsafe Browser",
            "line": 52,
            "match": {
              "location": "features/step_definitions/browser.rb:121"
            },
            "result": {
              "status": "passed",
              "duration": 5366293607
            }
          },
          {
            "keyword": "Given ",
            "name": "Thunderbird is installed",
            "line": 52,
            "match": {
              "location": "features/step_definitions/thunderbird.rb:280"
            },
            "result": {
              "status": "passed",
              "duration": 28269691618
            }
          },
          {
            "keyword": "When ",
            "name": "I enable the screen keyboard",
            "line": 52,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1694"
            },
            "result": {
              "status": "passed",
              "duration": 76602383
            }
          },
          {
            "keyword": "Then ",
            "name": "the screen keyboard works in Tor Browser",
            "line": 52,
            "match": {
              "location": "features/step_definitions/browser.rb:447"
            },
            "result": {
              "status": "passed",
              "duration": 13362911995
            }
          },
          {
            "keyword": "And ",
            "name": "DuckDuckGo is the default search engine",
            "line": 52,
            "match": {
              "location": "features/step_definitions/browser.rb:436"
            },
            "result": {
              "status": "passed",
              "duration": 5533359810
            }
          },
          {
            "keyword": "And ",
            "name": "I kill the Tor Browser",
            "line": 52,
            "match": {
              "location": "features/step_definitions/browser.rb:121"
            },
            "result": {
              "status": "passed",
              "duration": 5256327476
            }
          },
          {
            "keyword": "And ",
            "name": "the screen keyboard works in Thunderbird",
            "line": 52,
            "match": {
              "location": "features/step_definitions/thunderbird.rb:211"
            },
            "result": {
              "status": "passed",
              "duration": 6213704630
            }
          },
          {
            "keyword": "And ",
            "name": "the layout of the screen keyboard is set to \"us\"",
            "line": 52,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1702"
            },
            "result": {
              "status": "passed",
              "duration": 464102955
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:335"
            },
            "result": {
              "status": "passed",
              "duration": 1436522619
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:104"
            },
            "result": {
              "status": "passed",
              "duration": 36048
            }
          }
        ]
      },
      {
        "id": "localization;tails-is-localized-for-every-tier-1-language;;9",
        "keyword": "Scenario Outline",
        "name": "Tails is localized for every tier-1 language",
        "description": "",
        "line": 53,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          },
          {
            "name": "@doc",
            "line": 20
          },
          {
            "name": "@slow",
            "line": 20
          },
          {
            "name": "@not_release_blocker",
            "line": 20
          }
        ],
        "comments": [
          {
            "value": "# This list has to be kept in sync' with our list of tier-1 languages:",
            "line": 39
          },
          {
            "value": "#   https://tails.net/contribute/how/translate/#tier-1-languages",
            "line": 40
          },
          {
            "value": "# Known issues, that this step effectively verifies are still present:",
            "line": 42
          },
          {
            "value": "#  - Not all localized layouts exist in the GNOME screen keyboard: #8444",
            "line": 43
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:270"
            },
            "result": {
              "status": "passed",
              "duration": 15640
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:277"
            },
            "result": {
              "status": "passed",
              "duration": 14827159
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails from DVD without network and stopped at Tails Greeter's login screen",
            "line": 53,
            "match": {
              "location": "features/step_definitions/snapshots.rb:172"
            },
            "result": {
              "status": "passed",
              "duration": 7565543154
            }
          },
          {
            "keyword": "And ",
            "name": "I set an administration password",
            "line": 53,
            "match": {
              "location": "features/step_definitions/common_steps.rb:576"
            },
            "result": {
              "status": "passed",
              "duration": 6949527226
            }
          },
          {
            "keyword": "When ",
            "name": "I log in to a new session in Italian (it)",
            "line": 53,
            "match": {
              "location": "features/step_definitions/common_steps.rb:514"
            },
            "result": {
              "status": "passed",
              "duration": 29020602856
            }
          },
          {
            "keyword": "Then ",
            "name": "the keyboard layout is set to \"it\"",
            "line": 53,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1676"
            },
            "result": {
              "status": "passed",
              "duration": 110495346
            }
          },
          {
            "keyword": "And ",
            "name": "tpsd is localized to the selected locale",
            "line": 53,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1706"
            },
            "result": {
              "status": "passed",
              "duration": 119978108
            }
          },
          {
            "keyword": "Given ",
            "name": "the network is plugged",
            "line": 53,
            "match": {
              "location": "features/step_definitions/common_steps.rb:137"
            },
            "result": {
              "status": "passed",
              "duration": 25889339
            }
          },
          {
            "keyword": "And ",
            "name": "Tor is ready",
            "line": 53,
            "match": {
              "location": "features/step_definitions/common_steps.rb:650"
            },
            "result": {
              "status": "passed",
              "duration": 12591629772
            }
          },
          {
            "keyword": "Then ",
            "name": "I successfully start the Unsafe Browser",
            "line": 53,
            "match": {
              "location": "features/step_definitions/browser.rb:109"
            },
            "result": {
              "status": "passed",
              "duration": 5936887743
            }
          },
          {
            "keyword": "And ",
            "name": "I kill the Unsafe Browser",
            "line": 53,
            "match": {
              "location": "features/step_definitions/browser.rb:121"
            },
            "result": {
              "status": "passed",
              "duration": 5259013917
            }
          },
          {
            "keyword": "Given ",
            "name": "Thunderbird is installed",
            "line": 53,
            "match": {
              "location": "features/step_definitions/thunderbird.rb:280"
            },
            "result": {
              "status": "passed",
              "duration": 28642135736
            }
          },
          {
            "keyword": "When ",
            "name": "I enable the screen keyboard",
            "line": 53,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1694"
            },
            "result": {
              "status": "passed",
              "duration": 58451692
            }
          },
          {
            "keyword": "Then ",
            "name": "the screen keyboard works in Tor Browser",
            "line": 53,
            "match": {
              "location": "features/step_definitions/browser.rb:447"
            },
            "result": {
              "status": "passed",
              "duration": 11292423069
            }
          },
          {
            "keyword": "And ",
            "name": "DuckDuckGo is the default search engine",
            "line": 53,
            "match": {
              "location": "features/step_definitions/browser.rb:436"
            },
            "result": {
              "status": "passed",
              "duration": 5682580671
            }
          },
          {
            "keyword": "And ",
            "name": "I kill the Tor Browser",
            "line": 53,
            "match": {
              "location": "features/step_definitions/browser.rb:121"
            },
            "result": {
              "status": "passed",
              "duration": 5311084200
            }
          },
          {
            "keyword": "And ",
            "name": "the screen keyboard works in Thunderbird",
            "line": 53,
            "match": {
              "location": "features/step_definitions/thunderbird.rb:211"
            },
            "result": {
              "status": "passed",
              "duration": 4983287240
            }
          },
          {
            "keyword": "And ",
            "name": "the layout of the screen keyboard is set to \"us\"",
            "line": 53,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1702"
            },
            "result": {
              "status": "passed",
              "duration": 389483375
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:335"
            },
            "result": {
              "status": "passed",
              "duration": 1333917127
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:104"
            },
            "result": {
              "status": "passed",
              "duration": 26581
            }
          }
        ]
      },
      {
        "id": "localization;tails-is-localized-for-every-tier-1-language;;10",
        "keyword": "Scenario Outline",
        "name": "Tails is localized for every tier-1 language",
        "description": "",
        "line": 54,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          },
          {
            "name": "@doc",
            "line": 20
          },
          {
            "name": "@slow",
            "line": 20
          },
          {
            "name": "@not_release_blocker",
            "line": 20
          }
        ],
        "comments": [
          {
            "value": "# This list has to be kept in sync' with our list of tier-1 languages:",
            "line": 39
          },
          {
            "value": "#   https://tails.net/contribute/how/translate/#tier-1-languages",
            "line": 40
          },
          {
            "value": "# Known issues, that this step effectively verifies are still present:",
            "line": 42
          },
          {
            "value": "#  - Not all localized layouts exist in the GNOME screen keyboard: #8444",
            "line": 43
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:270"
            },
            "result": {
              "status": "passed",
              "duration": 13365
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:277"
            },
            "result": {
              "status": "passed",
              "duration": 6277530
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails from DVD without network and stopped at Tails Greeter's login screen",
            "line": 54,
            "match": {
              "location": "features/step_definitions/snapshots.rb:172"
            },
            "result": {
              "status": "passed",
              "duration": 7600076424
            }
          },
          {
            "keyword": "And ",
            "name": "I set an administration password",
            "line": 54,
            "match": {
              "location": "features/step_definitions/common_steps.rb:576"
            },
            "result": {
              "status": "passed",
              "duration": 7052436039
            }
          },
          {
            "keyword": "When ",
            "name": "I log in to a new session in Persian (fa)",
            "line": 54,
            "match": {
              "location": "features/step_definitions/common_steps.rb:514"
            },
            "result": {
              "status": "passed",
              "duration": 27148854759
            }
          },
          {
            "keyword": "Then ",
            "name": "the keyboard layout is set to \"ir\"",
            "line": 54,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1676"
            },
            "result": {
              "status": "passed",
              "duration": 101610061
            }
          },
          {
            "keyword": "And ",
            "name": "tpsd is localized to the selected locale",
            "line": 54,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1706"
            },
            "result": {
              "status": "passed",
              "duration": 105868034
            }
          },
          {
            "keyword": "Given ",
            "name": "the network is plugged",
            "line": 54,
            "match": {
              "location": "features/step_definitions/common_steps.rb:137"
            },
            "result": {
              "status": "passed",
              "duration": 18519984
            }
          },
          {
            "keyword": "And ",
            "name": "Tor is ready",
            "line": 54,
            "match": {
              "location": "features/step_definitions/common_steps.rb:650"
            },
            "result": {
              "status": "passed",
              "duration": 12095563934
            }
          },
          {
            "keyword": "Then ",
            "name": "I successfully start the Unsafe Browser",
            "line": 54,
            "match": {
              "location": "features/step_definitions/browser.rb:109"
            },
            "result": {
              "status": "passed",
              "duration": 6209731000
            }
          },
          {
            "keyword": "And ",
            "name": "I kill the Unsafe Browser",
            "line": 54,
            "match": {
              "location": "features/step_definitions/browser.rb:121"
            },
            "result": {
              "status": "passed",
              "duration": 5212214225
            }
          },
          {
            "keyword": "Given ",
            "name": "Thunderbird is installed",
            "line": 54,
            "match": {
              "location": "features/step_definitions/thunderbird.rb:280"
            },
            "result": {
              "status": "passed",
              "duration": 28381290279
            }
          },
          {
            "keyword": "When ",
            "name": "I enable the screen keyboard",
            "line": 54,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1694"
            },
            "result": {
              "status": "passed",
              "duration": 76464109
            }
          },
          {
            "keyword": "Then ",
            "name": "the screen keyboard works in Tor Browser",
            "line": 54,
            "match": {
              "location": "features/step_definitions/browser.rb:447"
            },
            "result": {
              "status": "passed",
              "duration": 12264286132
            }
          },
          {
            "keyword": "And ",
            "name": "DuckDuckGo is the default search engine",
            "line": 54,
            "match": {
              "location": "features/step_definitions/browser.rb:436"
            },
            "result": {
              "status": "passed",
              "duration": 6181970633
            }
          },
          {
            "keyword": "And ",
            "name": "I kill the Tor Browser",
            "line": 54,
            "match": {
              "location": "features/step_definitions/browser.rb:121"
            },
            "result": {
              "status": "passed",
              "duration": 5277173689
            }
          },
          {
            "keyword": "And ",
            "name": "the screen keyboard works in Thunderbird",
            "line": 54,
            "match": {
              "location": "features/step_definitions/thunderbird.rb:211"
            },
            "result": {
              "status": "passed",
              "duration": 4404780571
            }
          },
          {
            "keyword": "And ",
            "name": "the layout of the screen keyboard is set to \"ir\"",
            "line": 54,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1702"
            },
            "result": {
              "status": "passed",
              "duration": 417612740
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:335"
            },
            "result": {
              "status": "passed",
              "duration": 1514376792
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:104"
            },
            "result": {
              "status": "passed",
              "duration": 24617
            }
          }
        ]
      },
      {
        "id": "localization;tails-is-localized-for-every-tier-1-language;;11",
        "keyword": "Scenario Outline",
        "name": "Tails is localized for every tier-1 language",
        "description": "",
        "line": 55,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          },
          {
            "name": "@doc",
            "line": 20
          },
          {
            "name": "@slow",
            "line": 20
          },
          {
            "name": "@not_release_blocker",
            "line": 20
          }
        ],
        "comments": [
          {
            "value": "# This list has to be kept in sync' with our list of tier-1 languages:",
            "line": 39
          },
          {
            "value": "#   https://tails.net/contribute/how/translate/#tier-1-languages",
            "line": 40
          },
          {
            "value": "# Known issues, that this step effectively verifies are still present:",
            "line": 42
          },
          {
            "value": "#  - Not all localized layouts exist in the GNOME screen keyboard: #8444",
            "line": 43
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:270"
            },
            "result": {
              "status": "passed",
              "duration": 17071
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:277"
            },
            "result": {
              "status": "passed",
              "duration": 5500924
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails from DVD without network and stopped at Tails Greeter's login screen",
            "line": 55,
            "match": {
              "location": "features/step_definitions/snapshots.rb:172"
            },
            "result": {
              "status": "passed",
              "duration": 7912987095
            }
          },
          {
            "keyword": "And ",
            "name": "I set an administration password",
            "line": 55,
            "match": {
              "location": "features/step_definitions/common_steps.rb:576"
            },
            "result": {
              "status": "passed",
              "duration": 6959362892
            }
          },
          {
            "keyword": "When ",
            "name": "I log in to a new session in Portuguese (pt)",
            "line": 55,
            "match": {
              "location": "features/step_definitions/common_steps.rb:514"
            },
            "result": {
              "status": "passed",
              "duration": 27235732634
            }
          },
          {
            "keyword": "Then ",
            "name": "the keyboard layout is set to \"pt\"",
            "line": 55,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1676"
            },
            "result": {
              "status": "passed",
              "duration": 117196522
            }
          },
          {
            "keyword": "And ",
            "name": "tpsd is localized to the selected locale",
            "line": 55,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1706"
            },
            "result": {
              "status": "passed",
              "duration": 126316043
            }
          },
          {
            "keyword": "Given ",
            "name": "the network is plugged",
            "line": 55,
            "match": {
              "location": "features/step_definitions/common_steps.rb:137"
            },
            "result": {
              "status": "passed",
              "duration": 15798091
            }
          },
          {
            "keyword": "And ",
            "name": "Tor is ready",
            "line": 55,
            "match": {
              "location": "features/step_definitions/common_steps.rb:650"
            },
            "result": {
              "status": "passed",
              "duration": 12222587158
            }
          },
          {
            "keyword": "Then ",
            "name": "I successfully start the Unsafe Browser",
            "line": 55,
            "match": {
              "location": "features/step_definitions/browser.rb:109"
            },
            "result": {
              "status": "passed",
              "duration": 5085148687
            }
          },
          {
            "keyword": "And ",
            "name": "I kill the Unsafe Browser",
            "line": 55,
            "match": {
              "location": "features/step_definitions/browser.rb:121"
            },
            "result": {
              "status": "passed",
              "duration": 5223481703
            }
          },
          {
            "keyword": "Given ",
            "name": "Thunderbird is installed",
            "line": 55,
            "match": {
              "location": "features/step_definitions/thunderbird.rb:280"
            },
            "result": {
              "status": "passed",
              "duration": 28262686003
            }
          },
          {
            "keyword": "When ",
            "name": "I enable the screen keyboard",
            "line": 55,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1694"
            },
            "result": {
              "status": "passed",
              "duration": 67426585
            }
          },
          {
            "keyword": "Then ",
            "name": "the screen keyboard works in Tor Browser",
            "line": 55,
            "match": {
              "location": "features/step_definitions/browser.rb:447"
            },
            "result": {
              "status": "passed",
              "duration": 11994653001
            }
          },
          {
            "keyword": "And ",
            "name": "DuckDuckGo is the default search engine",
            "line": 55,
            "match": {
              "location": "features/step_definitions/browser.rb:436"
            },
            "result": {
              "status": "passed",
              "duration": 6120941705
            }
          },
          {
            "keyword": "And ",
            "name": "I kill the Tor Browser",
            "line": 55,
            "match": {
              "location": "features/step_definitions/browser.rb:121"
            },
            "result": {
              "status": "passed",
              "duration": 5257334091
            }
          },
          {
            "keyword": "And ",
            "name": "the screen keyboard works in Thunderbird",
            "line": 55,
            "match": {
              "location": "features/step_definitions/thunderbird.rb:211"
            },
            "result": {
              "status": "passed",
              "duration": 5356580772
            }
          },
          {
            "keyword": "And ",
            "name": "the layout of the screen keyboard is set to \"us\"",
            "line": 55,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1702"
            },
            "result": {
              "status": "passed",
              "duration": 375383059
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:335"
            },
            "result": {
              "status": "passed",
              "duration": 2108460869
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:104"
            },
            "result": {
              "status": "passed",
              "duration": 28673
            }
          }
        ]
      },
      {
        "id": "localization;tails-is-localized-for-every-tier-1-language;;12",
        "keyword": "Scenario Outline",
        "name": "Tails is localized for every tier-1 language",
        "description": "",
        "line": 56,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          },
          {
            "name": "@doc",
            "line": 20
          },
          {
            "name": "@slow",
            "line": 20
          },
          {
            "name": "@not_release_blocker",
            "line": 20
          }
        ],
        "comments": [
          {
            "value": "# This list has to be kept in sync' with our list of tier-1 languages:",
            "line": 39
          },
          {
            "value": "#   https://tails.net/contribute/how/translate/#tier-1-languages",
            "line": 40
          },
          {
            "value": "# Known issues, that this step effectively verifies are still present:",
            "line": 42
          },
          {
            "value": "#  - Not all localized layouts exist in the GNOME screen keyboard: #8444",
            "line": 43
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:270"
            },
            "result": {
              "status": "passed",
              "duration": 20739
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:277"
            },
            "result": {
              "status": "passed",
              "duration": 5175318
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails from DVD without network and stopped at Tails Greeter's login screen",
            "line": 56,
            "match": {
              "location": "features/step_definitions/snapshots.rb:172"
            },
            "result": {
              "status": "passed",
              "duration": 7815244841
            }
          },
          {
            "keyword": "And ",
            "name": "I set an administration password",
            "line": 56,
            "match": {
              "location": "features/step_definitions/common_steps.rb:576"
            },
            "result": {
              "status": "passed",
              "duration": 6832123479
            }
          },
          {
            "keyword": "When ",
            "name": "I log in to a new session in Russian (ru)",
            "line": 56,
            "match": {
              "location": "features/step_definitions/common_steps.rb:514"
            },
            "result": {
              "status": "passed",
              "duration": 27554948015
            }
          },
          {
            "keyword": "Then ",
            "name": "the keyboard layout is set to \"ru\"",
            "line": 56,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1676"
            },
            "result": {
              "status": "passed",
              "duration": 81718889
            }
          },
          {
            "keyword": "And ",
            "name": "tpsd is localized to the selected locale",
            "line": 56,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1706"
            },
            "result": {
              "status": "passed",
              "duration": 119472095
            }
          },
          {
            "keyword": "Given ",
            "name": "the network is plugged",
            "line": 56,
            "match": {
              "location": "features/step_definitions/common_steps.rb:137"
            },
            "result": {
              "status": "passed",
              "duration": 24705502
            }
          },
          {
            "keyword": "And ",
            "name": "Tor is ready",
            "line": 56,
            "match": {
              "location": "features/step_definitions/common_steps.rb:650"
            },
            "result": {
              "status": "passed",
              "duration": 11869720581
            }
          },
          {
            "keyword": "Then ",
            "name": "I successfully start the Unsafe Browser",
            "line": 56,
            "match": {
              "location": "features/step_definitions/browser.rb:109"
            },
            "result": {
              "status": "passed",
              "duration": 6159616028
            }
          },
          {
            "keyword": "And ",
            "name": "I kill the Unsafe Browser",
            "line": 56,
            "match": {
              "location": "features/step_definitions/browser.rb:121"
            },
            "result": {
              "status": "passed",
              "duration": 5224347758
            }
          },
          {
            "keyword": "Given ",
            "name": "Thunderbird is installed",
            "line": 56,
            "match": {
              "location": "features/step_definitions/thunderbird.rb:280"
            },
            "result": {
              "status": "passed",
              "duration": 27598832610
            }
          },
          {
            "keyword": "When ",
            "name": "I enable the screen keyboard",
            "line": 56,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1694"
            },
            "result": {
              "status": "passed",
              "duration": 110928388
            }
          },
          {
            "keyword": "Then ",
            "name": "the screen keyboard works in Tor Browser",
            "line": 56,
            "match": {
              "location": "features/step_definitions/browser.rb:447"
            },
            "result": {
              "status": "passed",
              "duration": 12234367914
            }
          },
          {
            "keyword": "And ",
            "name": "DuckDuckGo is the default search engine",
            "line": 56,
            "match": {
              "location": "features/step_definitions/browser.rb:436"
            },
            "result": {
              "status": "passed",
              "duration": 5311074774
            }
          },
          {
            "keyword": "And ",
            "name": "I kill the Tor Browser",
            "line": 56,
            "match": {
              "location": "features/step_definitions/browser.rb:121"
            },
            "result": {
              "status": "passed",
              "duration": 5207332034
            }
          },
          {
            "keyword": "And ",
            "name": "the screen keyboard works in Thunderbird",
            "line": 56,
            "match": {
              "location": "features/step_definitions/thunderbird.rb:211"
            },
            "result": {
              "status": "passed",
              "duration": 5304380089
            }
          },
          {
            "keyword": "And ",
            "name": "the layout of the screen keyboard is set to \"ru\"",
            "line": 56,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1702"
            },
            "result": {
              "status": "passed",
              "duration": 475458116
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:335"
            },
            "result": {
              "status": "passed",
              "duration": 1442833117
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:104"
            },
            "result": {
              "status": "passed",
              "duration": 20749
            }
          }
        ]
      },
      {
        "id": "localization;tails-is-localized-for-every-tier-1-language;;13",
        "keyword": "Scenario Outline",
        "name": "Tails is localized for every tier-1 language",
        "description": "",
        "line": 57,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          },
          {
            "name": "@doc",
            "line": 20
          },
          {
            "name": "@slow",
            "line": 20
          },
          {
            "name": "@not_release_blocker",
            "line": 20
          }
        ],
        "comments": [
          {
            "value": "# This list has to be kept in sync' with our list of tier-1 languages:",
            "line": 39
          },
          {
            "value": "#   https://tails.net/contribute/how/translate/#tier-1-languages",
            "line": 40
          },
          {
            "value": "# Known issues, that this step effectively verifies are still present:",
            "line": 42
          },
          {
            "value": "#  - Not all localized layouts exist in the GNOME screen keyboard: #8444",
            "line": 43
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:270"
            },
            "result": {
              "status": "passed",
              "duration": 16250
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:277"
            },
            "result": {
              "status": "passed",
              "duration": 3931872
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails from DVD without network and stopped at Tails Greeter's login screen",
            "line": 57,
            "match": {
              "location": "features/step_definitions/snapshots.rb:172"
            },
            "result": {
              "status": "passed",
              "duration": 7674794915
            }
          },
          {
            "keyword": "And ",
            "name": "I set an administration password",
            "line": 57,
            "match": {
              "location": "features/step_definitions/common_steps.rb:576"
            },
            "result": {
              "status": "passed",
              "duration": 6906180438
            }
          },
          {
            "keyword": "When ",
            "name": "I log in to a new session in Spanish (es)",
            "line": 57,
            "match": {
              "location": "features/step_definitions/common_steps.rb:514"
            },
            "result": {
              "status": "passed",
              "duration": 28571660213
            }
          },
          {
            "keyword": "Then ",
            "name": "the keyboard layout is set to \"es\"",
            "line": 57,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1676"
            },
            "result": {
              "status": "passed",
              "duration": 105952501
            }
          },
          {
            "keyword": "And ",
            "name": "tpsd is localized to the selected locale",
            "line": 57,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1706"
            },
            "result": {
              "status": "passed",
              "duration": 115319005
            }
          },
          {
            "keyword": "Given ",
            "name": "the network is plugged",
            "line": 57,
            "match": {
              "location": "features/step_definitions/common_steps.rb:137"
            },
            "result": {
              "status": "passed",
              "duration": 18199503
            }
          },
          {
            "keyword": "And ",
            "name": "Tor is ready",
            "line": 57,
            "match": {
              "location": "features/step_definitions/common_steps.rb:650"
            },
            "result": {
              "status": "passed",
              "duration": 12150559498
            }
          },
          {
            "keyword": "Then ",
            "name": "I successfully start the Unsafe Browser",
            "line": 57,
            "match": {
              "location": "features/step_definitions/browser.rb:109"
            },
            "result": {
              "status": "passed",
              "duration": 6139032569
            }
          },
          {
            "keyword": "And ",
            "name": "I kill the Unsafe Browser",
            "line": 57,
            "match": {
              "location": "features/step_definitions/browser.rb:121"
            },
            "result": {
              "status": "passed",
              "duration": 5257818804
            }
          },
          {
            "keyword": "Given ",
            "name": "Thunderbird is installed",
            "line": 57,
            "match": {
              "location": "features/step_definitions/thunderbird.rb:280"
            },
            "result": {
              "status": "passed",
              "duration": 28671144123
            }
          },
          {
            "keyword": "When ",
            "name": "I enable the screen keyboard",
            "line": 57,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1694"
            },
            "result": {
              "status": "passed",
              "duration": 227376064
            }
          },
          {
            "keyword": "Then ",
            "name": "the screen keyboard works in Tor Browser",
            "line": 57,
            "match": {
              "location": "features/step_definitions/browser.rb:447"
            },
            "result": {
              "status": "passed",
              "duration": 12034007424
            }
          },
          {
            "keyword": "And ",
            "name": "DuckDuckGo is the default search engine",
            "line": 57,
            "match": {
              "location": "features/step_definitions/browser.rb:436"
            },
            "result": {
              "status": "passed",
              "duration": 5955709393
            }
          },
          {
            "keyword": "And ",
            "name": "I kill the Tor Browser",
            "line": 57,
            "match": {
              "location": "features/step_definitions/browser.rb:121"
            },
            "result": {
              "status": "passed",
              "duration": 5248111722
            }
          },
          {
            "keyword": "And ",
            "name": "the screen keyboard works in Thunderbird",
            "line": 57,
            "match": {
              "location": "features/step_definitions/thunderbird.rb:211"
            },
            "result": {
              "status": "passed",
              "duration": 4626890861
            }
          },
          {
            "keyword": "And ",
            "name": "the layout of the screen keyboard is set to \"us\"",
            "line": 57,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1702"
            },
            "result": {
              "status": "passed",
              "duration": 427620586
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:335"
            },
            "result": {
              "status": "passed",
              "duration": 1521151067
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:104"
            },
            "result": {
              "status": "passed",
              "duration": 22562
            }
          }
        ]
      },
      {
        "id": "localization;tails-is-localized-for-every-tier-1-language;;14",
        "keyword": "Scenario Outline",
        "name": "Tails is localized for every tier-1 language",
        "description": "",
        "line": 58,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          },
          {
            "name": "@doc",
            "line": 20
          },
          {
            "name": "@slow",
            "line": 20
          },
          {
            "name": "@not_release_blocker",
            "line": 20
          }
        ],
        "comments": [
          {
            "value": "# This list has to be kept in sync' with our list of tier-1 languages:",
            "line": 39
          },
          {
            "value": "#   https://tails.net/contribute/how/translate/#tier-1-languages",
            "line": 40
          },
          {
            "value": "# Known issues, that this step effectively verifies are still present:",
            "line": 42
          },
          {
            "value": "#  - Not all localized layouts exist in the GNOME screen keyboard: #8444",
            "line": 43
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:270"
            },
            "result": {
              "status": "passed",
              "duration": 12364
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:277"
            },
            "result": {
              "status": "passed",
              "duration": 2883536
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails from DVD without network and stopped at Tails Greeter's login screen",
            "line": 58,
            "match": {
              "location": "features/step_definitions/snapshots.rb:172"
            },
            "result": {
              "status": "passed",
              "duration": 7233678801
            }
          },
          {
            "keyword": "And ",
            "name": "I set an administration password",
            "line": 58,
            "match": {
              "location": "features/step_definitions/common_steps.rb:576"
            },
            "result": {
              "status": "passed",
              "duration": 7048420065
            }
          },
          {
            "keyword": "When ",
            "name": "I log in to a new session in Turkish (tr)",
            "line": 58,
            "match": {
              "location": "features/step_definitions/common_steps.rb:514"
            },
            "result": {
              "status": "passed",
              "duration": 27692061029
            }
          },
          {
            "keyword": "Then ",
            "name": "the keyboard layout is set to \"tr\"",
            "line": 58,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1676"
            },
            "result": {
              "status": "passed",
              "duration": 107159806
            }
          },
          {
            "keyword": "And ",
            "name": "tpsd is localized to the selected locale",
            "line": 58,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1706"
            },
            "result": {
              "status": "passed",
              "duration": 117551370
            }
          },
          {
            "keyword": "Given ",
            "name": "the network is plugged",
            "line": 58,
            "match": {
              "location": "features/step_definitions/common_steps.rb:137"
            },
            "result": {
              "status": "passed",
              "duration": 16677080
            }
          },
          {
            "keyword": "And ",
            "name": "Tor is ready",
            "line": 58,
            "match": {
              "location": "features/step_definitions/common_steps.rb:650"
            },
            "result": {
              "status": "passed",
              "duration": 13473172189
            }
          },
          {
            "keyword": "Then ",
            "name": "I successfully start the Unsafe Browser",
            "line": 58,
            "match": {
              "location": "features/step_definitions/browser.rb:109"
            },
            "result": {
              "status": "passed",
              "duration": 5632746475
            }
          },
          {
            "keyword": "And ",
            "name": "I kill the Unsafe Browser",
            "line": 58,
            "match": {
              "location": "features/step_definitions/browser.rb:121"
            },
            "result": {
              "status": "passed",
              "duration": 5232474924
            }
          },
          {
            "keyword": "Given ",
            "name": "Thunderbird is installed",
            "line": 58,
            "match": {
              "location": "features/step_definitions/thunderbird.rb:280"
            },
            "result": {
              "status": "passed",
              "duration": 24677868666
            }
          },
          {
            "keyword": "When ",
            "name": "I enable the screen keyboard",
            "line": 58,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1694"
            },
            "result": {
              "status": "passed",
              "duration": 100201220
            }
          },
          {
            "keyword": "Then ",
            "name": "the screen keyboard works in Tor Browser",
            "line": 58,
            "match": {
              "location": "features/step_definitions/browser.rb:447"
            },
            "result": {
              "status": "passed",
              "duration": 12007828327
            }
          },
          {
            "keyword": "And ",
            "name": "DuckDuckGo is the default search engine",
            "line": 58,
            "match": {
              "location": "features/step_definitions/browser.rb:436"
            },
            "result": {
              "status": "passed",
              "duration": 5876817377
            }
          },
          {
            "keyword": "And ",
            "name": "I kill the Tor Browser",
            "line": 58,
            "match": {
              "location": "features/step_definitions/browser.rb:121"
            },
            "result": {
              "status": "passed",
              "duration": 5304595589
            }
          },
          {
            "keyword": "And ",
            "name": "the screen keyboard works in Thunderbird",
            "line": 58,
            "match": {
              "location": "features/step_definitions/thunderbird.rb:211"
            },
            "result": {
              "status": "passed",
              "duration": 4959566174
            }
          },
          {
            "keyword": "And ",
            "name": "the layout of the screen keyboard is set to \"us\"",
            "line": 58,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1702"
            },
            "result": {
              "status": "passed",
              "duration": 383691382
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:335"
            },
            "result": {
              "status": "passed",
              "duration": 1641406373
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:104"
            },
            "result": {
              "status": "passed",
              "duration": 33894
            }
          }
        ]
      },
      {
        "id": "localization;tails-doesn't-store-localization-preferences-in-cleartext-unless-it's-asked-to",
        "keyword": "Scenario",
        "name": "Tails doesn't store localization preferences in cleartext unless it's asked to",
        "description": "",
        "line": 60,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:270"
            },
            "result": {
              "status": "passed",
              "duration": 48161
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:277"
            },
            "result": {
              "status": "passed",
              "duration": 7725205
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails without network from a USB drive without a persistent partition and stopped at Tails Greeter's login screen",
            "line": 61,
            "match": {
              "location": "features/step_definitions/snapshots.rb:172"
            },
            "result": {
              "status": "passed",
              "duration": 8785439139
            }
          },
          {
            "keyword": "When ",
            "name": "I set the language to Italian (it)",
            "line": 62,
            "match": {
              "location": "features/step_definitions/common_steps.rb:482"
            },
            "result": {
              "status": "passed",
              "duration": 5692305370
            }
          },
          {
            "keyword": "Then ",
            "name": "the language and keyboard have not been saved in cleartext storage",
            "line": 63,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1854"
            },
            "result": {
              "status": "passed",
              "duration": 2143690544
            }
          },
          {
            "keyword": "When ",
            "name": "I shutdown Tails and wait for the computer to power off",
            "line": 64,
            "match": {
              "location": "features/step_definitions/common_steps.rb:904"
            },
            "result": {
              "status": "passed",
              "duration": 7221391930
            }
          },
          {
            "keyword": "And ",
            "name": "I start Tails from USB drive \"__internal\" with network unplugged",
            "line": 65,
            "match": {
              "location": "features/step_definitions/common_steps.rb:232"
            },
            "result": {
              "status": "passed",
              "duration": 43579650041
            }
          },
          {
            "keyword": "Then ",
            "name": "the Welcome Screen's language is set to English",
            "line": 66,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1883"
            },
            "result": {
              "status": "passed",
              "duration": 413185546
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:335"
            },
            "result": {
              "status": "passed",
              "duration": 1382199401
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:104"
            },
            "result": {
              "status": "passed",
              "duration": 13195531
            }
          }
        ]
      },
      {
        "id": "localization;tails-stores-localization-preferences-when-it's-asked-to",
        "keyword": "Scenario",
        "name": "Tails stores localization preferences when it's asked to",
        "description": "",
        "line": 68,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:270"
            },
            "result": {
              "status": "passed",
              "duration": 21791
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:277"
            },
            "result": {
              "status": "passed",
              "duration": 4140153
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails without network from a USB drive without a persistent partition and stopped at Tails Greeter's login screen",
            "line": 69,
            "match": {
              "location": "features/step_definitions/snapshots.rb:172"
            },
            "result": {
              "status": "passed",
              "duration": 8515306580
            }
          },
          {
            "keyword": "When ",
            "name": "I set the language to Italian (it)",
            "line": 70,
            "match": {
              "location": "features/step_definitions/common_steps.rb:482"
            },
            "result": {
              "status": "passed",
              "duration": 5641636306
            }
          },
          {
            "keyword": "And ",
            "name": "I save the language and keyboard options in cleartext storage",
            "line": 71,
            "match": {
              "location": "features/step_definitions/common_steps.rb:501"
            },
            "result": {
              "status": "passed",
              "duration": 2413881443
            }
          },
          {
            "keyword": "Then ",
            "name": "the \"it\" language and keyboard have been saved in cleartext storage",
            "line": 72,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1862"
            },
            "result": {
              "status": "passed",
              "duration": 142306193
            }
          },
          {
            "keyword": "When ",
            "name": "I set the language to French (fr)",
            "line": 73,
            "match": {
              "location": "features/step_definitions/common_steps.rb:482"
            },
            "result": {
              "status": "passed",
              "duration": 4514358912
            }
          },
          {
            "keyword": "Then ",
            "name": "the \"fr\" language and keyboard have been saved in cleartext storage",
            "line": 74,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1862"
            },
            "result": {
              "status": "passed",
              "duration": 126102351
            }
          },
          {
            "keyword": "And ",
            "name": "I shutdown Tails and wait for the computer to power off",
            "line": 75,
            "match": {
              "location": "features/step_definitions/common_steps.rb:904"
            },
            "result": {
              "status": "passed",
              "duration": 5975726529
            }
          },
          {
            "keyword": "And ",
            "name": "I start Tails from USB drive \"__internal\" with network unplugged",
            "line": 76,
            "match": {
              "location": "features/step_definitions/common_steps.rb:232"
            },
            "result": {
              "status": "passed",
              "duration": 47918206491
            }
          },
          {
            "keyword": "Then ",
            "name": "the \"fr\" language and keyboard have been saved in cleartext storage",
            "line": 77,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1862"
            },
            "result": {
              "status": "passed",
              "duration": 527447270
            }
          },
          {
            "keyword": "And ",
            "name": "the Welcome Screen's language is set to French",
            "line": 78,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1883"
            },
            "result": {
              "status": "passed",
              "duration": 794417990
            }
          },
          {
            "keyword": "When ",
            "name": "I log in to a new session",
            "line": 79,
            "match": {
              "location": "features/step_definitions/common_steps.rb:514"
            },
            "result": {
              "status": "passed",
              "duration": 11686642900
            }
          },
          {
            "keyword": "Then ",
            "name": "the language is set to French",
            "line": 80,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1900"
            },
            "result": {
              "status": "passed",
              "duration": 70703929
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:335"
            },
            "result": {
              "status": "passed",
              "duration": 1013408457
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:104"
            },
            "result": {
              "status": "passed",
              "duration": 24520876
            }
          }
        ]
      },
      {
        "id": "localization;cleartext-localization-preferences-have-priority-over-persistent-storage",
        "keyword": "Scenario",
        "name": "Cleartext localization preferences have priority over Persistent Storage",
        "description": "",
        "line": 82,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:270"
            },
            "result": {
              "status": "passed",
              "duration": 23604
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:277"
            },
            "result": {
              "status": "passed",
              "duration": 4020908
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails without network from a USB drive without a persistent partition and logged in",
            "line": 83,
            "match": {
              "location": "features/step_definitions/snapshots.rb:172"
            },
            "result": {
              "status": "passed",
              "duration": 8855301026
            }
          },
          {
            "keyword": "Then ",
            "name": "Tails is running from USB drive \"__internal\"",
            "line": 85,
            "comments": [
              {
                "value": "# The first boot simulates a legacy Tails, where locale is only saved in Persistent Storage",
                "line": 84
              }
            ],
            "match": {
              "location": "features/step_definitions/usb.rb:935"
            },
            "result": {
              "status": "passed",
              "duration": 844505585
            }
          },
          {
            "keyword": "And ",
            "name": "I create a persistent partition",
            "line": 86,
            "match": {
              "location": "features/step_definitions/usb.rb:341"
            },
            "result": {
              "status": "passed",
              "duration": 33429181989
            }
          },
          {
            "keyword": "And ",
            "name": "I manually store legacy localization settings in Persistent Storage",
            "line": 87,
            "match": {
              "location": "features/step_definitions/usb.rb:1603"
            },
            "result": {
              "status": "passed",
              "duration": 234995147
            }
          },
          {
            "keyword": "When ",
            "name": "I shutdown Tails and wait for the computer to power off",
            "line": 88,
            "match": {
              "location": "features/step_definitions/common_steps.rb:904"
            },
            "result": {
              "status": "passed",
              "duration": 9880870135
            }
          },
          {
            "keyword": "And ",
            "name": "I start Tails from USB drive \"__internal\" with network unplugged",
            "line": 90,
            "comments": [
              {
                "value": "# The second boot verifies that the legacy setting still works",
                "line": 89
              }
            ],
            "match": {
              "location": "features/step_definitions/common_steps.rb:232"
            },
            "result": {
              "status": "passed",
              "duration": 42055317776
            }
          },
          {
            "keyword": "Then ",
            "name": "the Welcome Screen's language is set to English",
            "line": 91,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1883"
            },
            "result": {
              "status": "passed",
              "duration": 289656373
            }
          },
          {
            "keyword": "And ",
            "name": "the Welcome Screen's formats is set to United States",
            "line": 92,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1893"
            },
            "result": {
              "status": "passed",
              "duration": 184375152
            }
          },
          {
            "keyword": "When ",
            "name": "I enable persistence",
            "line": 93,
            "match": {
              "location": "features/step_definitions/usb.rb:721"
            },
            "result": {
              "status": "passed",
              "duration": 8489638205
            }
          },
          {
            "keyword": "Then ",
            "name": "the Welcome Screen's language is set to German",
            "line": 94,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1883"
            },
            "result": {
              "status": "passed",
              "duration": 564071145
            }
          },
          {
            "keyword": "And ",
            "name": "the Welcome Screen's formats is set to France",
            "line": 95,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1893"
            },
            "result": {
              "status": "passed",
              "duration": 262788474
            }
          },
          {
            "keyword": "When ",
            "name": "I set the language to Italian (it)",
            "line": 96,
            "match": {
              "location": "features/step_definitions/common_steps.rb:482"
            },
            "result": {
              "status": "passed",
              "duration": 4563724559
            }
          },
          {
            "keyword": "Then ",
            "name": "the language and keyboard have not been saved in cleartext storage",
            "line": 97,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1854"
            },
            "result": {
              "status": "passed",
              "duration": 2076247808
            }
          },
          {
            "keyword": "When ",
            "name": "I save the language and keyboard options in cleartext storage",
            "line": 98,
            "match": {
              "location": "features/step_definitions/common_steps.rb:501"
            },
            "result": {
              "status": "passed",
              "duration": 2391357065
            }
          },
          {
            "keyword": "Then ",
            "name": "the \"it\" language and keyboard have been saved in cleartext storage",
            "line": 99,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1862"
            },
            "result": {
              "status": "passed",
              "duration": 121544723
            }
          },
          {
            "keyword": "And ",
            "name": "I shutdown Tails and wait for the computer to power off",
            "line": 100,
            "match": {
              "location": "features/step_definitions/common_steps.rb:904"
            },
            "result": {
              "status": "passed",
              "duration": 2798354337
            }
          },
          {
            "keyword": "And ",
            "name": "I start Tails from USB drive \"__internal\" with network unplugged",
            "line": 102,
            "comments": [
              {
                "value": "# The third boot verifies that cleartext has priority",
                "line": 101
              }
            ],
            "match": {
              "location": "features/step_definitions/common_steps.rb:232"
            },
            "result": {
              "status": "passed",
              "duration": 41161650876
            }
          },
          {
            "keyword": "Then ",
            "name": "the Welcome Screen's language is set to Italian",
            "line": 103,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1883"
            },
            "result": {
              "status": "passed",
              "duration": 598927115
            }
          },
          {
            "keyword": "And ",
            "name": "the Welcome Screen's formats is set to Italy",
            "line": 104,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1893"
            },
            "result": {
              "status": "passed",
              "duration": 208458972
            }
          },
          {
            "keyword": "When ",
            "name": "I enable persistence",
            "line": 105,
            "match": {
              "location": "features/step_definitions/usb.rb:721"
            },
            "result": {
              "status": "passed",
              "duration": 10588129446
            }
          },
          {
            "keyword": "Then ",
            "name": "the Welcome Screen's formats is set to France",
            "line": 107,
            "comments": [
              {
                "value": "# Only formats are loaded from persistence",
                "line": 106
              }
            ],
            "match": {
              "location": "features/step_definitions/common_steps.rb:1893"
            },
            "result": {
              "status": "passed",
              "duration": 270280736
            }
          },
          {
            "keyword": "And ",
            "name": "the Welcome Screen's language is set to Italian",
            "line": 108,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1883"
            },
            "result": {
              "status": "passed",
              "duration": 822168714
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:335"
            },
            "result": {
              "status": "passed",
              "duration": 736470111
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:104"
            },
            "result": {
              "status": "passed",
              "duration": 25553562
            }
          }
        ]
      }
    ]
  },
  {
    "uri": "features/mac_spoofing.feature",
    "id": "spoofing-mac-addresses",
    "keyword": "Feature",
    "name": "Spoofing MAC addresses",
    "description": "  In order to not reveal information about the physical location\n  As a Tails user\n  I want to be able to control whether my network devices MAC addresses should be spoofed\n  And I want this feature to fail safe and notify me in case of errors",
    "line": 2,
    "tags": [
      {
        "name": "@product",
        "line": 1
      }
    ],
    "elements": [
      {
        "id": "spoofing-mac-addresses;mac-address-spoofing-is-disabled",
        "keyword": "Scenario",
        "name": "MAC address spoofing is disabled",
        "description": "",
        "line": 8,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:270"
            },
            "result": {
              "status": "passed",
              "duration": 32943
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:277"
            },
            "result": {
              "status": "passed",
              "duration": 6055955
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails from DVD without network and stopped at Tails Greeter's login screen",
            "line": 9,
            "match": {
              "location": "features/step_definitions/snapshots.rb:172"
            },
            "result": {
              "status": "passed",
              "duration": 7962335151
            }
          },
          {
            "keyword": "And ",
            "name": "I capture all network traffic",
            "line": 10,
            "match": {
              "location": "features/step_definitions/common_steps.rb:185"
            },
            "result": {
              "status": "passed",
              "duration": 9186224
            }
          },
          {
            "keyword": "When ",
            "name": "I disable MAC spoofing in Tails Greeter",
            "line": 11,
            "match": {
              "location": "features/step_definitions/mac_spoofing.rb:10"
            },
            "result": {
              "status": "passed",
              "duration": 7977845685
            }
          },
          {
            "keyword": "And ",
            "name": "I log in to a new session",
            "line": 12,
            "match": {
              "location": "features/step_definitions/common_steps.rb:514"
            },
            "result": {
              "status": "passed",
              "duration": 13950227113
            }
          },
          {
            "keyword": "And ",
            "name": "the network is plugged",
            "line": 13,
            "match": {
              "location": "features/step_definitions/common_steps.rb:137"
            },
            "result": {
              "status": "passed",
              "duration": 24019733
            }
          },
          {
            "keyword": "And ",
            "name": "Tor is ready",
            "line": 14,
            "match": {
              "location": "features/step_definitions/common_steps.rb:650"
            },
            "result": {
              "status": "passed",
              "duration": 10420368477
            }
          },
          {
            "keyword": "Then ",
            "name": "1 network interface is enabled",
            "line": 15,
            "match": {
              "location": "features/step_definitions/mac_spoofing.rb:83"
            },
            "result": {
              "status": "passed",
              "duration": 68775255
            }
          },
          {
            "keyword": "And ",
            "name": "the 1st network device has its real MAC address configured",
            "line": 16,
            "match": {
              "location": "features/step_definitions/mac_spoofing.rb:18"
            },
            "result": {
              "status": "passed",
              "duration": 65996234
            }
          },
          {
            "keyword": "When ",
            "name": "I hotplug a network device and wait for it to be initialized",
            "line": 17,
            "match": {
              "location": "features/step_definitions/mac_spoofing.rb:106"
            },
            "result": {
              "status": "passed",
              "duration": 312809412
            }
          },
          {
            "keyword": "Then ",
            "name": "2 network interfaces are enabled",
            "line": 18,
            "match": {
              "location": "features/step_definitions/mac_spoofing.rb:83"
            },
            "result": {
              "status": "passed",
              "duration": 125972861
            }
          },
          {
            "keyword": "And ",
            "name": "the 2nd network device has its real MAC address configured",
            "line": 19,
            "match": {
              "location": "features/step_definitions/mac_spoofing.rb:18"
            },
            "result": {
              "status": "passed",
              "duration": 120232447
            }
          },
          {
            "keyword": "And ",
            "name": "some network device leaked the real MAC address",
            "line": 20,
            "match": {
              "location": "features/step_definitions/mac_spoofing.rb:51"
            },
            "result": {
              "status": "passed",
              "duration": 164493868
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:335"
            },
            "result": {
              "status": "passed",
              "duration": 1222875477
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:104"
            },
            "result": {
              "status": "passed",
              "duration": 48327594
            }
          }
        ]
      },
      {
        "id": "spoofing-mac-addresses;mac-address-spoofing-is-successful",
        "keyword": "Scenario",
        "name": "MAC address spoofing is successful",
        "description": "",
        "line": 22,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:270"
            },
            "result": {
              "status": "passed",
              "duration": 10991
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:277"
            },
            "result": {
              "status": "passed",
              "duration": 6533711
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails from DVD without network and stopped at Tails Greeter's login screen",
            "line": 23,
            "match": {
              "location": "features/step_definitions/snapshots.rb:172"
            },
            "result": {
              "status": "passed",
              "duration": 7744442280
            }
          },
          {
            "keyword": "And ",
            "name": "I capture all network traffic",
            "line": 24,
            "match": {
              "location": "features/step_definitions/common_steps.rb:185"
            },
            "result": {
              "status": "passed",
              "duration": 5567529
            }
          },
          {
            "keyword": "When ",
            "name": "I log in to a new session",
            "line": 25,
            "match": {
              "location": "features/step_definitions/common_steps.rb:514"
            },
            "result": {
              "status": "passed",
              "duration": 13573258152
            }
          },
          {
            "keyword": "And ",
            "name": "the network is plugged",
            "line": 26,
            "match": {
              "location": "features/step_definitions/common_steps.rb:137"
            },
            "result": {
              "status": "passed",
              "duration": 15633148
            }
          },
          {
            "keyword": "And ",
            "name": "Tor is ready",
            "line": 27,
            "match": {
              "location": "features/step_definitions/common_steps.rb:650"
            },
            "result": {
              "status": "passed",
              "duration": 13146750215
            }
          },
          {
            "keyword": "Then ",
            "name": "1 network interface is enabled",
            "line": 28,
            "match": {
              "location": "features/step_definitions/mac_spoofing.rb:83"
            },
            "result": {
              "status": "passed",
              "duration": 56751713
            }
          },
          {
            "keyword": "And ",
            "name": "the 1st network device has a spoofed MAC address configured",
            "line": 29,
            "match": {
              "location": "features/step_definitions/mac_spoofing.rb:18"
            },
            "result": {
              "status": "passed",
              "duration": 59425827
            }
          },
          {
            "keyword": "When ",
            "name": "I hotplug a network device and wait for it to be initialized",
            "line": 30,
            "match": {
              "location": "features/step_definitions/mac_spoofing.rb:106"
            },
            "result": {
              "status": "passed",
              "duration": 478747387
            }
          },
          {
            "keyword": "Then ",
            "name": "2 network interfaces are enabled",
            "line": 31,
            "match": {
              "location": "features/step_definitions/mac_spoofing.rb:83"
            },
            "result": {
              "status": "passed",
              "duration": 92440762
            }
          },
          {
            "keyword": "And ",
            "name": "the 2nd network device has a spoofed MAC address configured",
            "line": 32,
            "match": {
              "location": "features/step_definitions/mac_spoofing.rb:18"
            },
            "result": {
              "status": "passed",
              "duration": 55779659
            }
          },
          {
            "keyword": "And ",
            "name": "no network device leaked the real MAC address",
            "line": 33,
            "match": {
              "location": "features/step_definitions/mac_spoofing.rb:42"
            },
            "result": {
              "status": "passed",
              "duration": 293059894
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:335"
            },
            "result": {
              "status": "passed",
              "duration": 838716789
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:104"
            },
            "result": {
              "status": "passed",
              "duration": 54632819
            }
          }
        ]
      },
      {
        "id": "spoofing-mac-addresses;mac-address-spoofing-fails-and-macchanger-returns-false",
        "keyword": "Scenario",
        "name": "MAC address spoofing fails and macchanger returns false",
        "description": "",
        "line": 35,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:270"
            },
            "result": {
              "status": "passed",
              "duration": 24967
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:277"
            },
            "result": {
              "status": "passed",
              "duration": 13849328
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails from DVD without network and stopped at Tails Greeter's login screen",
            "line": 36,
            "match": {
              "location": "features/step_definitions/snapshots.rb:172"
            },
            "result": {
              "status": "passed",
              "duration": 7951919601
            }
          },
          {
            "keyword": "And ",
            "name": "I capture all network traffic",
            "line": 37,
            "match": {
              "location": "features/step_definitions/common_steps.rb:185"
            },
            "result": {
              "status": "passed",
              "duration": 5521152
            }
          },
          {
            "keyword": "And ",
            "name": "the network is plugged",
            "line": 38,
            "match": {
              "location": "features/step_definitions/common_steps.rb:137"
            },
            "result": {
              "status": "passed",
              "duration": 44781187
            }
          },
          {
            "keyword": "And ",
            "name": "macchanger will fail by not spoofing and always returns false",
            "line": 39,
            "match": {
              "location": "features/step_definitions/mac_spoofing.rb:57"
            },
            "result": {
              "status": "passed",
              "duration": 119334309
            }
          },
          {
            "keyword": "When ",
            "name": "I log in to a new session",
            "line": 40,
            "match": {
              "location": "features/step_definitions/common_steps.rb:514"
            },
            "result": {
              "status": "passed",
              "duration": 13203832957
            }
          },
          {
            "keyword": "Then ",
            "name": "no network interfaces are enabled",
            "line": 41,
            "match": {
              "location": "features/step_definitions/mac_spoofing.rb:83"
            },
            "result": {
              "status": "passed",
              "duration": 59715559
            }
          },
          {
            "keyword": "And ",
            "name": "no network device leaked the real MAC address",
            "line": 42,
            "match": {
              "location": "features/step_definitions/mac_spoofing.rb:42"
            },
            "result": {
              "status": "passed",
              "duration": 7548934
            }
          },
          {
            "keyword": "And ",
            "name": "I see the \"Wired Network Disabled\" notification after at most 60 seconds",
            "line": 43,
            "match": {
              "location": "features/step_definitions/common_steps.rb:629"
            },
            "result": {
              "status": "passed",
              "duration": 1680396997
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:335"
            },
            "result": {
              "status": "passed",
              "duration": 921543214
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:104"
            },
            "result": {
              "status": "passed",
              "duration": 42970421
            }
          }
        ]
      },
      {
        "id": "spoofing-mac-addresses;mac-address-spoofing-fails-and-macchanger-returns-true",
        "keyword": "Scenario",
        "name": "MAC address spoofing fails and macchanger returns true",
        "description": "",
        "line": 45,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:270"
            },
            "result": {
              "status": "passed",
              "duration": 15949
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:277"
            },
            "result": {
              "status": "passed",
              "duration": 5154224
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails from DVD without network and stopped at Tails Greeter's login screen",
            "line": 46,
            "match": {
              "location": "features/step_definitions/snapshots.rb:172"
            },
            "result": {
              "status": "passed",
              "duration": 7645872667
            }
          },
          {
            "keyword": "And ",
            "name": "I capture all network traffic",
            "line": 47,
            "match": {
              "location": "features/step_definitions/common_steps.rb:185"
            },
            "result": {
              "status": "passed",
              "duration": 4902915
            }
          },
          {
            "keyword": "And ",
            "name": "the network is plugged",
            "line": 48,
            "match": {
              "location": "features/step_definitions/common_steps.rb:137"
            },
            "result": {
              "status": "passed",
              "duration": 26781817
            }
          },
          {
            "keyword": "And ",
            "name": "macchanger will fail by not spoofing and always returns true",
            "line": 49,
            "match": {
              "location": "features/step_definitions/mac_spoofing.rb:57"
            },
            "result": {
              "status": "passed",
              "duration": 87791192
            }
          },
          {
            "keyword": "When ",
            "name": "I log in to a new session",
            "line": 50,
            "match": {
              "location": "features/step_definitions/common_steps.rb:514"
            },
            "result": {
              "status": "passed",
              "duration": 13760925079
            }
          },
          {
            "keyword": "Then ",
            "name": "no network interfaces are enabled",
            "line": 51,
            "match": {
              "location": "features/step_definitions/mac_spoofing.rb:83"
            },
            "result": {
              "status": "passed",
              "duration": 72479542
            }
          },
          {
            "keyword": "And ",
            "name": "no network device leaked the real MAC address",
            "line": 52,
            "match": {
              "location": "features/step_definitions/mac_spoofing.rb:42"
            },
            "result": {
              "status": "passed",
              "duration": 5279519
            }
          },
          {
            "keyword": "And ",
            "name": "I see the \"Wired Network Disabled\" notification after at most 60 seconds",
            "line": 53,
            "match": {
              "location": "features/step_definitions/common_steps.rb:629"
            },
            "result": {
              "status": "passed",
              "duration": 1746877866
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:335"
            },
            "result": {
              "status": "passed",
              "duration": 935802311
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:104"
            },
            "result": {
              "status": "passed",
              "duration": 46881173
            }
          }
        ]
      },
      {
        "id": "spoofing-mac-addresses;mac-address-spoofing-fails-and-the-module-is-not-removed",
        "keyword": "Scenario",
        "name": "MAC address spoofing fails and the module is not removed",
        "description": "",
        "line": 55,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:270"
            },
            "result": {
              "status": "passed",
              "duration": 15197
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:277"
            },
            "result": {
              "status": "passed",
              "duration": 3510012
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails from DVD without network and stopped at Tails Greeter's login screen",
            "line": 56,
            "match": {
              "location": "features/step_definitions/snapshots.rb:172"
            },
            "result": {
              "status": "passed",
              "duration": 7287998168
            }
          },
          {
            "keyword": "And ",
            "name": "I capture all network traffic",
            "line": 57,
            "match": {
              "location": "features/step_definitions/common_steps.rb:185"
            },
            "result": {
              "status": "passed",
              "duration": 5001718
            }
          },
          {
            "keyword": "And ",
            "name": "the network is plugged",
            "line": 58,
            "match": {
              "location": "features/step_definitions/common_steps.rb:137"
            },
            "result": {
              "status": "passed",
              "duration": 29616281
            }
          },
          {
            "keyword": "And ",
            "name": "macchanger will fail by not spoofing and always returns true",
            "line": 59,
            "match": {
              "location": "features/step_definitions/mac_spoofing.rb:57"
            },
            "result": {
              "status": "passed",
              "duration": 88746393
            }
          },
          {
            "keyword": "And ",
            "name": "no network interface modules can be unloaded",
            "line": 60,
            "match": {
              "location": "features/step_definitions/mac_spoofing.rb:62"
            },
            "result": {
              "status": "passed",
              "duration": 188840763
            }
          },
          {
            "keyword": "When ",
            "name": "I log in to a new session",
            "line": 61,
            "match": {
              "location": "features/step_definitions/common_steps.rb:514"
            },
            "result": {
              "status": "passed",
              "duration": 15304412431
            }
          },
          {
            "keyword": "Then ",
            "name": "1 network interface is enabled",
            "line": 62,
            "match": {
              "location": "features/step_definitions/mac_spoofing.rb:83"
            },
            "result": {
              "status": "passed",
              "duration": 69051034
            }
          },
          {
            "keyword": "But ",
            "name": "the MAC spoofing panic mode disabled networking",
            "line": 63,
            "match": {
              "location": "features/step_definitions/mac_spoofing.rb:90"
            },
            "result": {
              "status": "passed",
              "duration": 291468177
            }
          },
          {
            "keyword": "And ",
            "name": "no network device leaked the real MAC address",
            "line": 64,
            "match": {
              "location": "features/step_definitions/mac_spoofing.rb:42"
            },
            "result": {
              "status": "passed",
              "duration": 8092044
            }
          },
          {
            "keyword": "And ",
            "name": "I see the \"All Networking Disabled\" notification after at most 60 seconds",
            "line": 65,
            "match": {
              "location": "features/step_definitions/common_steps.rb:629"
            },
            "result": {
              "status": "passed",
              "duration": 1635646795
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:335"
            },
            "result": {
              "status": "passed",
              "duration": 1025433697
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:104"
            },
            "result": {
              "status": "passed",
              "duration": 66689826
            }
          }
        ]
      },
      {
        "id": "spoofing-mac-addresses;the-mac-address-is-not-leaked-when-booting-tails",
        "keyword": "Scenario",
        "name": "The MAC address is not leaked when booting Tails",
        "description": "",
        "line": 67,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:270"
            },
            "result": {
              "status": "passed",
              "duration": 16371
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:277"
            },
            "result": {
              "status": "passed",
              "duration": 3490513
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "a computer",
            "line": 68,
            "match": {
              "location": "features/step_definitions/common_steps.rb:98"
            },
            "result": {
              "status": "passed",
              "duration": 87540803
            }
          },
          {
            "keyword": "And ",
            "name": "I capture all network traffic",
            "line": 69,
            "match": {
              "location": "features/step_definitions/common_steps.rb:185"
            },
            "result": {
              "status": "passed",
              "duration": 24934724
            }
          },
          {
            "keyword": "When ",
            "name": "I start the computer",
            "line": 70,
            "match": {
              "location": "features/step_definitions/common_steps.rb:202"
            },
            "result": {
              "status": "passed",
              "duration": 786492350
            }
          },
          {
            "keyword": "Then ",
            "name": "the computer boots Tails",
            "line": 71,
            "match": {
              "location": "features/step_definitions/common_steps.rb:402"
            },
            "result": {
              "status": "passed",
              "duration": 38115256780
            }
          },
          {
            "keyword": "And ",
            "name": "no network interfaces are enabled",
            "line": 72,
            "match": {
              "location": "features/step_definitions/mac_spoofing.rb:83"
            },
            "result": {
              "status": "passed",
              "duration": 433383020
            }
          },
          {
            "keyword": "And ",
            "name": "no network device leaked the real MAC address",
            "line": 73,
            "match": {
              "location": "features/step_definitions/mac_spoofing.rb:42"
            },
            "result": {
              "status": "passed",
              "duration": 5775680
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:335"
            },
            "result": {
              "status": "passed",
              "duration": 825071853
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:104"
            },
            "result": {
              "status": "passed",
              "duration": 82184978
            }
          }
        ]
      }
    ]
  },
  {
    "uri": "features/mat.feature",
    "id": "metadata-anonymization-toolkit",
    "keyword": "Feature",
    "name": "Metadata Anonymization Toolkit",
    "description": "  As a Tails user\n  I want to be able to remove leaky metadata from documents and media files",
    "line": 2,
    "tags": [
      {
        "name": "@product",
        "line": 1
      }
    ],
    "elements": [
      {
        "id": "metadata-anonymization-toolkit;mat-can-clean-a-png-file",
        "keyword": "Scenario",
        "name": "MAT can clean a PNG file",
        "description": "",
        "line": 7,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          },
          {
            "name": "@not_release_blocker",
            "line": 6
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:270"
            },
            "result": {
              "status": "passed",
              "duration": 18465
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:277"
            },
            "result": {
              "status": "passed",
              "duration": 3359650
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "a computer",
            "line": 8,
            "match": {
              "location": "features/step_definitions/common_steps.rb:98"
            },
            "result": {
              "status": "passed",
              "duration": 84029056
            }
          },
          {
            "keyword": "And ",
            "name": "I start Tails from DVD with network unplugged and I login",
            "line": 9,
            "match": {
              "location": "features/step_definitions/common_steps.rb:211"
            },
            "result": {
              "status": "passed",
              "duration": 55410148954
            }
          },
          {
            "keyword": "And ",
            "name": "I plug and mount a USB drive containing a sample PNG",
            "line": 10,
            "match": {
              "location": "features/step_definitions/checks.rb:258"
            },
            "result": {
              "status": "passed",
              "duration": 9189029570
            }
          },
          {
            "keyword": "Then ",
            "name": "MAT can clean some sample PNG file",
            "line": 11,
            "match": {
              "location": "features/step_definitions/checks.rb:267"
            },
            "result": {
              "status": "passed",
              "duration": 1274229765
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:335"
            },
            "result": {
              "status": "passed",
              "duration": 892111773
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:104"
            },
            "result": {
              "status": "passed",
              "duration": 13989080
            }
          }
        ]
      }
    ]
  },
  {
    "uri": "features/needed_package_updates.feature",
    "id": "packages-are-up-to-date",
    "keyword": "Feature",
    "name": "Packages are up-to-date",
    "description": "  On Tails branches that use frozen APT sources,\n  packages we install from frozen distributions (e.g. the Linux kernel\n  installed from testing/sid),\n  and packages forked from Debian that we install from our custom APT repository,\n  can become outdated.\n  As a Tails developer, I want to ensure we don't miss important updates.",
    "line": 3,
    "tags": [
      {
        "name": "@source",
        "line": 2
      },
      {
        "name": "@fragile",
        "line": 2
      }
    ],
    "comments": [
      {
        "value": "# This fails too loudly so let's run it on fewer branches (tails/tails#21316)",
        "line": 1
      }
    ],
    "elements": [
      {
        "id": "packages-are-up-to-date;all-packages-are-up-to-date",
        "keyword": "Scenario",
        "name": "All packages are up-to-date",
        "description": "",
        "line": 11,
        "type": "scenario",
        "tags": [
          {
            "name": "@source",
            "line": 2
          },
          {
            "name": "@fragile",
            "line": 2
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:270"
            },
            "result": {
              "status": "passed",
              "duration": 21280
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:548"
            },
            "result": {
              "status": "passed",
              "duration": 92192
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have the build manifest for the image under test",
            "line": 12,
            "match": {
              "location": "features/step_definitions/needed_package_updates.rb:3"
            },
            "result": {
              "status": "passed",
              "duration": 345030
            }
          },
          {
            "keyword": "Then ",
            "name": "all packages listed in the build manifest are up-to-date",
            "line": 13,
            "match": {
              "location": "features/step_definitions/needed_package_updates.rb:7"
            },
            "result": {
              "status": "passed",
              "duration": 493041576
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:555"
            },
            "result": {
              "status": "passed",
              "duration": 134811
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:104"
            },
            "result": {
              "status": "passed",
              "duration": 6072
            }
          }
        ]
      }
    ]
  },
  {
    "uri": "features/networking.feature",
    "id": "networking",
    "keyword": "Feature",
    "name": "Networking",
    "description": "",
    "line": 2,
    "tags": [
      {
        "name": "@product",
        "line": 1
      }
    ],
    "elements": [
      {
        "id": "networking;no-initial-network",
        "keyword": "Scenario",
        "name": "No initial network",
        "description": "",
        "line": 4,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:270"
            },
            "result": {
              "status": "passed",
              "duration": 13024
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:277"
            },
            "result": {
              "status": "passed",
              "duration": 3801451
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails from DVD without network and logged in",
            "line": 5,
            "match": {
              "location": "features/step_definitions/snapshots.rb:172"
            },
            "result": {
              "status": "passed",
              "duration": 7537523968
            }
          },
          {
            "keyword": "And ",
            "name": "I wait between 30 and 60 seconds",
            "line": 6,
            "output": [
              "Slept for 45 seconds"
            ],
            "match": {
              "location": "features/step_definitions/common_steps.rb:1370"
            },
            "result": {
              "status": "passed",
              "duration": 45000108618
            }
          },
          {
            "keyword": "Then ",
            "name": "the Tor Status icon tells me that Tor is not usable",
            "line": 7,
            "match": {
              "location": "features/step_definitions/checks.rb:333"
            },
            "result": {
              "status": "passed",
              "duration": 391301910
            }
          },
          {
            "keyword": "When ",
            "name": "the network is plugged",
            "line": 8,
            "match": {
              "location": "features/step_definitions/common_steps.rb:137"
            },
            "result": {
              "status": "passed",
              "duration": 24505869
            }
          },
          {
            "keyword": "Then ",
            "name": "I successfully configure Tor",
            "line": 9,
            "match": {
              "location": "features/step_definitions/common_steps.rb:675"
            },
            "result": {
              "status": "passed",
              "duration": 10690077798
            }
          },
          {
            "keyword": "And ",
            "name": "the Tor Status icon tells me that Tor is usable",
            "line": 10,
            "match": {
              "location": "features/step_definitions/checks.rb:333"
            },
            "result": {
              "status": "passed",
              "duration": 357678153
            }
          },
          {
            "keyword": "And ",
            "name": "all notifications have disappeared",
            "line": 11,
            "match": {
              "location": "features/step_definitions/common_steps.rb:762"
            },
            "result": {
              "status": "passed",
              "duration": 7083775786
            }
          },
          {
            "keyword": "And ",
            "name": "the time has synced",
            "line": 12,
            "match": {
              "location": "features/step_definitions/common_steps.rb:752"
            },
            "result": {
              "status": "passed",
              "duration": 54383964
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:335"
            },
            "result": {
              "status": "passed",
              "duration": 614631448
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:104"
            },
            "result": {
              "status": "passed",
              "duration": 21652
            }
          }
        ]
      },
      {
        "id": "networking;the-tails-greeter-\"disable-all-networking\"-option-disables-networking-within-tails",
        "keyword": "Scenario",
        "name": "The Tails Greeter \"disable all networking\" option disables networking within Tails",
        "description": "",
        "line": 15,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          },
          {
            "name": "@not_release_blocker",
            "line": 14
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:270"
            },
            "result": {
              "status": "passed",
              "duration": 12353
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:277"
            },
            "result": {
              "status": "passed",
              "duration": 3087139
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails from DVD without network and stopped at Tails Greeter's login screen",
            "line": 16,
            "match": {
              "location": "features/step_definitions/snapshots.rb:172"
            },
            "result": {
              "status": "passed",
              "duration": 7467625736
            }
          },
          {
            "keyword": "And ",
            "name": "I disable networking in Tails Greeter",
            "line": 17,
            "match": {
              "location": "features/step_definitions/common_steps.rb:568"
            },
            "result": {
              "status": "passed",
              "duration": 7999472032
            }
          },
          {
            "keyword": "And ",
            "name": "I log in to a new session",
            "line": 18,
            "match": {
              "location": "features/step_definitions/common_steps.rb:514"
            },
            "result": {
              "status": "passed",
              "duration": 13478654140
            }
          },
          {
            "keyword": "Then ",
            "name": "no network interfaces are enabled",
            "line": 19,
            "match": {
              "location": "features/step_definitions/mac_spoofing.rb:83"
            },
            "result": {
              "status": "passed",
              "duration": 59599925
            }
          },
          {
            "keyword": "When ",
            "name": "I hotplug a network device",
            "line": 20,
            "match": {
              "location": "features/step_definitions/mac_spoofing.rb:106"
            },
            "result": {
              "status": "passed",
              "duration": 121500174
            }
          },
          {
            "keyword": "And ",
            "name": "I wait 10 seconds",
            "line": 21,
            "output": [
              "Slept for 10 seconds"
            ],
            "match": {
              "location": "features/step_definitions/common_steps.rb:1370"
            },
            "result": {
              "status": "passed",
              "duration": 10000141019
            }
          },
          {
            "keyword": "Then ",
            "name": "no network interfaces are enabled",
            "line": 22,
            "match": {
              "location": "features/step_definitions/mac_spoofing.rb:83"
            },
            "result": {
              "status": "passed",
              "duration": 353088793
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:335"
            },
            "result": {
              "status": "passed",
              "duration": 812908167
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:104"
            },
            "result": {
              "status": "passed",
              "duration": 47700
            }
          }
        ]
      }
    ]
  },
  {
    "uri": "features/onioncircuits.feature",
    "id": "onion-circuits",
    "keyword": "Feature",
    "name": "Onion Circuits",
    "description": "",
    "line": 2,
    "tags": [
      {
        "name": "@product",
        "line": 1
      }
    ],
    "elements": [
      {
        "id": "onion-circuits;onion-circuits-shows-some-circuits",
        "keyword": "Scenario",
        "name": "Onion Circuits shows some circuits",
        "description": "",
        "line": 4,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:270"
            },
            "result": {
              "status": "passed",
              "duration": 23935
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:277"
            },
            "result": {
              "status": "passed",
              "duration": 5809152
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails from DVD and logged in and the network is connected",
            "line": 5,
            "match": {
              "location": "features/step_definitions/snapshots.rb:172"
            },
            "result": {
              "status": "passed",
              "duration": 11750827596
            }
          },
          {
            "keyword": "When ",
            "name": "I start \"Onion Circuits\" via GNOME Activities Overview",
            "line": 6,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1165"
            },
            "result": {
              "status": "passed",
              "duration": 9160607600
            }
          },
          {
            "keyword": "Then ",
            "name": "Onion Circuits starts",
            "line": 7,
            "match": {
              "location": "features/step_definitions/onioncircuits.rb:5"
            },
            "result": {
              "status": "passed",
              "duration": 724223698
            }
          },
          {
            "keyword": "And ",
            "name": "Onion Circuits shows some circuits",
            "line": 8,
            "match": {
              "location": "features/step_definitions/onioncircuits.rb:9"
            },
            "result": {
              "status": "passed",
              "duration": 384137420
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:335"
            },
            "result": {
              "status": "passed",
              "duration": 1383392241
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:104"
            },
            "result": {
              "status": "passed",
              "duration": 22213
            }
          }
        ]
      }
    ]
  },
  {
    "uri": "features/persistence.feature",
    "id": "tails-persistence",
    "keyword": "Feature",
    "name": "Tails persistence",
    "description": "  As a Tails user\n  I want to use a Persistent Storage",
    "line": 2,
    "tags": [
      {
        "name": "@product",
        "line": 1
      }
    ],
    "elements": [
      {
        "id": "tails-persistence;tails-persistent-storage-behave-tests",
        "keyword": "Scenario",
        "name": "Tails Persistent Storage behave tests",
        "description": "",
        "line": 6,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:270"
            },
            "result": {
              "status": "passed",
              "duration": 15621
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:277"
            },
            "result": {
              "status": "passed",
              "duration": 4022041
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails from DVD and logged in with an administration password and the network is connected",
            "line": 7,
            "match": {
              "location": "features/step_definitions/snapshots.rb:172"
            },
            "result": {
              "status": "passed",
              "duration": 86005420587
            }
          },
          {
            "keyword": "And ",
            "name": "I update the APT lists using apt",
            "line": 8,
            "match": {
              "location": "features/step_definitions/apt.rb:54"
            },
            "result": {
              "status": "passed",
              "duration": 6758747879
            }
          },
          {
            "keyword": "And ",
            "name": "I install \"python3-behave\" using apt",
            "line": 9,
            "match": {
              "location": "features/step_definitions/apt.rb:76"
            },
            "result": {
              "status": "passed",
              "duration": 6258874616
            }
          },
          {
            "keyword": "Then ",
            "name": "the Tails Persistent Storage behave tests pass",
            "line": 10,
            "match": {
              "location": "features/step_definitions/usb.rb:1699"
            },
            "result": {
              "status": "passed",
              "duration": 1008742238
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:335"
            },
            "result": {
              "status": "passed",
              "duration": 975573962
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:104"
            },
            "result": {
              "status": "passed",
              "duration": 20558
            }
          }
        ]
      },
      {
        "id": "tails-persistence;booting-tails-from-a-usb-drive-with-a-disabled-persistent-partition",
        "keyword": "Scenario",
        "name": "Booting Tails from a USB drive with a disabled persistent partition",
        "description": "",
        "line": 12,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:270"
            },
            "result": {
              "status": "passed",
              "duration": 12213
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:277"
            },
            "result": {
              "status": "passed",
              "duration": 3304427
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails without network from a USB drive with a persistent partition and stopped at Tails Greeter's login screen",
            "line": 13,
            "match": {
              "location": "features/step_definitions/snapshots.rb:172"
            },
            "result": {
              "status": "passed",
              "duration": 10207712531
            }
          },
          {
            "keyword": "When ",
            "name": "I log in to a new session without activating the Persistent Storage",
            "line": 14,
            "match": {
              "location": "features/step_definitions/common_steps.rb:514"
            },
            "result": {
              "status": "passed",
              "duration": 17335660528
            }
          },
          {
            "keyword": "Then ",
            "name": "Tails is running from USB drive \"__internal\"",
            "line": 15,
            "match": {
              "location": "features/step_definitions/usb.rb:935"
            },
            "result": {
              "status": "passed",
              "duration": 413210073
            }
          },
          {
            "keyword": "And ",
            "name": "persistence is disabled",
            "line": 16,
            "match": {
              "location": "features/step_definitions/usb.rb:847"
            },
            "result": {
              "status": "passed",
              "duration": 103728139
            }
          },
          {
            "keyword": "But ",
            "name": "a Tails persistence partition exists on USB drive \"__internal\"",
            "line": 17,
            "match": {
              "location": "features/step_definitions/usb.rb:648"
            },
            "result": {
              "status": "passed",
              "duration": 5144547466
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:335"
            },
            "result": {
              "status": "passed",
              "duration": 846280552
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:104"
            },
            "result": {
              "status": "passed",
              "duration": 33092
            }
          }
        ]
      },
      {
        "id": "tails-persistence;creating-a-persistent-storage",
        "keyword": "Scenario",
        "name": "Creating a Persistent Storage",
        "description": "",
        "line": 19,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:270"
            },
            "result": {
              "status": "passed",
              "duration": 24817
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:277"
            },
            "result": {
              "status": "passed",
              "duration": 6355376
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails without network from a USB drive without a persistent partition and logged in",
            "line": 20,
            "match": {
              "location": "features/step_definitions/snapshots.rb:172"
            },
            "result": {
              "status": "passed",
              "duration": 9990029607
            }
          },
          {
            "keyword": "Then ",
            "name": "Tails is running from USB drive \"__internal\"",
            "line": 21,
            "match": {
              "location": "features/step_definitions/usb.rb:935"
            },
            "result": {
              "status": "passed",
              "duration": 406741275
            }
          },
          {
            "keyword": "When ",
            "name": "I create a file in the Persistent directory",
            "line": 22,
            "match": {
              "location": "features/step_definitions/usb.rb:1712"
            },
            "result": {
              "status": "passed",
              "duration": 123895361
            }
          },
          {
            "keyword": "And ",
            "name": "I create a persistent partition with the default settings",
            "line": 23,
            "match": {
              "location": "features/step_definitions/usb.rb:341"
            },
            "result": {
              "status": "passed",
              "duration": 20217632388
            }
          },
          {
            "keyword": "Then ",
            "name": "the file I created was copied to the Persistent Storage",
            "line": 24,
            "match": {
              "location": "features/step_definitions/usb.rb:1719"
            },
            "result": {
              "status": "passed",
              "duration": 57526395
            }
          },
          {
            "keyword": "When ",
            "name": "I shutdown Tails and wait for the computer to power off",
            "line": 25,
            "match": {
              "location": "features/step_definitions/common_steps.rb:904"
            },
            "result": {
              "status": "passed",
              "duration": 5726991880
            }
          },
          {
            "keyword": "And ",
            "name": "I start Tails from USB drive \"__internal\" with network unplugged and I login with persistence enabled",
            "line": 26,
            "match": {
              "location": "features/step_definitions/common_steps.rb:232"
            },
            "result": {
              "status": "passed",
              "duration": 67300838099
            }
          },
          {
            "keyword": "Then ",
            "name": "persistence for \"Persistent\" is active",
            "line": 27,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1049"
            },
            "result": {
              "status": "passed",
              "duration": 197298504
            }
          },
          {
            "keyword": "And ",
            "name": "the file I created in the Persistent directory exists",
            "line": 28,
            "match": {
              "location": "features/step_definitions/usb.rb:1730"
            },
            "result": {
              "status": "passed",
              "duration": 55666389
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:335"
            },
            "result": {
              "status": "passed",
              "duration": 768331020
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:104"
            },
            "result": {
              "status": "passed",
              "duration": 32892129
            }
          }
        ]
      },
      {
        "id": "tails-persistence;creating-a-persistent-storage-when-system-is-low-on-memory",
        "keyword": "Scenario",
        "name": "Creating a Persistent Storage when system is low on memory",
        "description": "",
        "line": 30,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:270"
            },
            "result": {
              "status": "passed",
              "duration": 20197
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:277"
            },
            "result": {
              "status": "passed",
              "duration": 3226098
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails without network from a USB drive without a persistent partition and logged in",
            "line": 31,
            "match": {
              "location": "features/step_definitions/snapshots.rb:172"
            },
            "result": {
              "status": "passed",
              "duration": 9536933953
            }
          },
          {
            "keyword": "And ",
            "name": "the system is very low on memory",
            "line": 32,
            "match": {
              "location": "features/step_definitions/usb.rb:387"
            },
            "result": {
              "status": "passed",
              "duration": 4421931798
            }
          },
          {
            "keyword": "When ",
            "name": "I create a file in the Persistent directory",
            "line": 33,
            "match": {
              "location": "features/step_definitions/usb.rb:1712"
            },
            "result": {
              "status": "passed",
              "duration": 312976025
            }
          },
          {
            "keyword": "When ",
            "name": "I try to create a persistent partition",
            "line": 34,
            "match": {
              "location": "features/step_definitions/usb.rb:365"
            },
            "result": {
              "status": "passed",
              "duration": 5000854779
            }
          },
          {
            "keyword": "Then ",
            "name": "The Persistent Storage app shows the error message \"Not enough memory to create Persistent Storage\"",
            "line": 35,
            "match": {
              "location": "features/step_definitions/usb.rb:458"
            },
            "result": {
              "status": "passed",
              "duration": 122190644
            }
          },
          {
            "keyword": "When ",
            "name": "I close the Persistent Storage app",
            "line": 36,
            "match": {
              "location": "features/step_definitions/usb.rb:434"
            },
            "result": {
              "status": "passed",
              "duration": 2822741673
            }
          },
          {
            "keyword": "And ",
            "name": "I free up some memory",
            "line": 37,
            "match": {
              "location": "features/step_definitions/usb.rb:427"
            },
            "result": {
              "status": "passed",
              "duration": 980436309
            }
          },
          {
            "keyword": "And ",
            "name": "I create a persistent partition with the default settings",
            "line": 38,
            "match": {
              "location": "features/step_definitions/usb.rb:341"
            },
            "result": {
              "status": "passed",
              "duration": 10616380562
            }
          },
          {
            "keyword": "Then ",
            "name": "the file I created was copied to the Persistent Storage",
            "line": 39,
            "match": {
              "location": "features/step_definitions/usb.rb:1719"
            },
            "result": {
              "status": "passed",
              "duration": 60709493
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:335"
            },
            "result": {
              "status": "passed",
              "duration": 1098150053
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:104"
            },
            "result": {
              "status": "passed",
              "duration": 24496
            }
          }
        ]
      },
      {
        "id": "tails-persistence;booting-tails-from-a-usb-drive-with-an-enabled-persistent-partition-and-reconfiguring-it",
        "keyword": "Scenario",
        "name": "Booting Tails from a USB drive with an enabled persistent partition and reconfiguring it",
        "description": "",
        "line": 41,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:270"
            },
            "result": {
              "status": "passed",
              "duration": 11952
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:277"
            },
            "result": {
              "status": "passed",
              "duration": 3395826
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails without network from a USB drive with a persistent partition enabled and logged in",
            "line": 42,
            "match": {
              "location": "features/step_definitions/snapshots.rb:172"
            },
            "result": {
              "status": "passed",
              "duration": 8761290411
            }
          },
          {
            "keyword": "Then ",
            "name": "Tails is running from USB drive \"__internal\"",
            "line": 43,
            "match": {
              "location": "features/step_definitions/usb.rb:935"
            },
            "result": {
              "status": "passed",
              "duration": 361555621
            }
          },
          {
            "keyword": "And ",
            "name": "all tps features are active",
            "line": 44,
            "match": {
              "location": "features/step_definitions/usb.rb:778"
            },
            "result": {
              "status": "passed",
              "duration": 1609091362
            }
          },
          {
            "keyword": "And ",
            "name": "all persistent directories have safe access rights",
            "line": 45,
            "match": {
              "location": "features/step_definitions/usb.rb:1037"
            },
            "result": {
              "status": "passed",
              "duration": 2527908647
            }
          },
          {
            "keyword": "When ",
            "name": "I disable the first tps feature",
            "line": 46,
            "match": {
              "location": "features/step_definitions/usb.rb:294"
            },
            "result": {
              "status": "passed",
              "duration": 3121788384
            }
          },
          {
            "keyword": "Then ",
            "name": "all tps features but the first one are active",
            "line": 47,
            "match": {
              "location": "features/step_definitions/usb.rb:778"
            },
            "result": {
              "status": "passed",
              "duration": 1343606680
            }
          },
          {
            "keyword": "And ",
            "name": "I shutdown Tails and wait for the computer to power off",
            "line": 48,
            "match": {
              "location": "features/step_definitions/common_steps.rb:904"
            },
            "result": {
              "status": "passed",
              "duration": 11874182573
            }
          },
          {
            "keyword": "And ",
            "name": "I start Tails from USB drive \"__internal\" with network unplugged and I login with persistence enabled",
            "line": 49,
            "match": {
              "location": "features/step_definitions/common_steps.rb:232"
            },
            "result": {
              "status": "passed",
              "duration": 72709946548
            }
          },
          {
            "keyword": "Then ",
            "name": "all tps features but the first one are active",
            "line": 50,
            "match": {
              "location": "features/step_definitions/usb.rb:778"
            },
            "result": {
              "status": "passed",
              "duration": 1547384703
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:335"
            },
            "result": {
              "status": "passed",
              "duration": 976836091
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:104"
            },
            "result": {
              "status": "passed",
              "duration": 7822455
            }
          }
        ]
      },
      {
        "id": "tails-persistence;activating-and-deactivating-persistent-storage-features",
        "keyword": "Scenario",
        "name": "Activating and deactivating Persistent Storage features",
        "description": "",
        "line": 52,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:270"
            },
            "result": {
              "status": "passed",
              "duration": 14417
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:277"
            },
            "result": {
              "status": "passed",
              "duration": 4313787
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails without network from a USB drive with a persistent partition enabled and logged in",
            "line": 53,
            "match": {
              "location": "features/step_definitions/snapshots.rb:172"
            },
            "result": {
              "status": "passed",
              "duration": 8222465454
            }
          },
          {
            "keyword": "Then ",
            "name": "persistence for \"Persistent\" is active",
            "line": 54,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1049"
            },
            "result": {
              "status": "passed",
              "duration": 69588511
            }
          },
          {
            "keyword": "And ",
            "name": "I create a file in the Persistent directory",
            "line": 55,
            "match": {
              "location": "features/step_definitions/usb.rb:1712"
            },
            "result": {
              "status": "passed",
              "duration": 85468463
            }
          },
          {
            "keyword": "Then ",
            "name": "the file I created was copied to the Persistent Storage",
            "line": 56,
            "match": {
              "location": "features/step_definitions/usb.rb:1719"
            },
            "result": {
              "status": "passed",
              "duration": 73256563
            }
          },
          {
            "keyword": "When ",
            "name": "I disable the first tps feature",
            "line": 57,
            "match": {
              "location": "features/step_definitions/usb.rb:294"
            },
            "result": {
              "status": "passed",
              "duration": 3155776461
            }
          },
          {
            "keyword": "Then ",
            "name": "persistence for \"Persistent\" is not active",
            "line": 58,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1049"
            },
            "result": {
              "status": "passed",
              "duration": 57900038
            }
          },
          {
            "keyword": "And ",
            "name": "the Persistent directory does not exist",
            "line": 59,
            "match": {
              "location": "features/step_definitions/usb.rb:1736"
            },
            "result": {
              "status": "passed",
              "duration": 57017583
            }
          },
          {
            "keyword": "When ",
            "name": "I enable the first tps feature",
            "line": 60,
            "match": {
              "location": "features/step_definitions/usb.rb:294"
            },
            "result": {
              "status": "passed",
              "duration": 2444713134
            }
          },
          {
            "keyword": "Then ",
            "name": "persistence for \"Persistent\" is active",
            "line": 61,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1049"
            },
            "result": {
              "status": "passed",
              "duration": 51952154
            }
          },
          {
            "keyword": "And ",
            "name": "the file I created in the Persistent directory exists",
            "line": 62,
            "match": {
              "location": "features/step_definitions/usb.rb:1730"
            },
            "result": {
              "status": "passed",
              "duration": 66980299
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:335"
            },
            "result": {
              "status": "passed",
              "duration": 933169921
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:104"
            },
            "result": {
              "status": "passed",
              "duration": 28373
            }
          }
        ]
      },
      {
        "id": "tails-persistence;deleting-data-of-a-persistent-storage-feature",
        "keyword": "Scenario",
        "name": "Deleting data of a Persistent Storage feature",
        "description": "",
        "line": 64,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:270"
            },
            "result": {
              "status": "passed",
              "duration": 11872
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:277"
            },
            "result": {
              "status": "passed",
              "duration": 2972764
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails without network from a USB drive with a persistent partition enabled and logged in",
            "line": 65,
            "match": {
              "location": "features/step_definitions/snapshots.rb:172"
            },
            "result": {
              "status": "passed",
              "duration": 7955775566
            }
          },
          {
            "keyword": "Then ",
            "name": "persistence for \"Persistent\" is active",
            "line": 66,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1049"
            },
            "result": {
              "status": "passed",
              "duration": 100190794
            }
          },
          {
            "keyword": "When ",
            "name": "I create a file in the Persistent directory",
            "line": 67,
            "match": {
              "location": "features/step_definitions/usb.rb:1712"
            },
            "result": {
              "status": "passed",
              "duration": 117742250
            }
          },
          {
            "keyword": "And ",
            "name": "I disable the first tps feature",
            "line": 68,
            "match": {
              "location": "features/step_definitions/usb.rb:294"
            },
            "result": {
              "status": "passed",
              "duration": 2889411987
            }
          },
          {
            "keyword": "And ",
            "name": "I delete the data of the Persistent Folder feature",
            "line": 69,
            "match": {
              "location": "features/step_definitions/usb.rb:1740"
            },
            "result": {
              "status": "passed",
              "duration": 2964375683
            }
          },
          {
            "keyword": "Then ",
            "name": "the file I created does not exist on the Persistent Storage",
            "line": 70,
            "match": {
              "location": "features/step_definitions/usb.rb:1725"
            },
            "result": {
              "status": "passed",
              "duration": 46837153
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:335"
            },
            "result": {
              "status": "passed",
              "duration": 819238109
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:104"
            },
            "result": {
              "status": "passed",
              "duration": 23484
            }
          }
        ]
      },
      {
        "id": "tails-persistence;writing-files-to-a-read/write-enabled-persistent-partition",
        "keyword": "Scenario",
        "name": "Writing files to a read/write-enabled persistent partition",
        "description": "",
        "line": 72,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:270"
            },
            "result": {
              "status": "passed",
              "duration": 15398
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:277"
            },
            "result": {
              "status": "passed",
              "duration": 4569246
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails without network from a USB drive with a persistent partition enabled and logged in",
            "line": 73,
            "match": {
              "location": "features/step_definitions/snapshots.rb:172"
            },
            "result": {
              "status": "passed",
              "duration": 7713596636
            }
          },
          {
            "keyword": "And ",
            "name": "the network is plugged",
            "line": 74,
            "match": {
              "location": "features/step_definitions/common_steps.rb:137"
            },
            "result": {
              "status": "passed",
              "duration": 21866347
            }
          },
          {
            "keyword": "And ",
            "name": "Tor is ready",
            "line": 75,
            "match": {
              "location": "features/step_definitions/common_steps.rb:650"
            },
            "result": {
              "status": "passed",
              "duration": 12948631407
            }
          },
          {
            "keyword": "And ",
            "name": "I take note of which tps features are available",
            "line": 76,
            "match": {
              "location": "features/step_definitions/usb.rb:1115"
            },
            "result": {
              "status": "passed",
              "duration": 304322445
            }
          },
          {
            "keyword": "When ",
            "name": "I write some files expected to persist",
            "line": 77,
            "match": {
              "location": "features/step_definitions/usb.rb:1075"
            },
            "result": {
              "status": "passed",
              "duration": 1282925800
            }
          },
          {
            "keyword": "And ",
            "name": "I shutdown Tails and wait for the computer to power off",
            "line": 78,
            "match": {
              "location": "features/step_definitions/common_steps.rb:904"
            },
            "result": {
              "status": "passed",
              "duration": 9943319272
            }
          },
          {
            "keyword": "Then ",
            "name": "only the expected files are present on the persistence partition on USB drive \"__internal\"",
            "line": 80,
            "comments": [
              {
                "value": "# XXX: The next step succeeds (and the --debug output confirms that it's actually looking for the files) but will fail in a subsequent scenario restoring the same snapshot. This exactly what we want, but why does it work? What is guestfs's behaviour when qcow2 internal snapshots are involved? (tails/tails#10330)",
                "line": 79
              }
            ],
            "match": {
              "location": "features/step_definitions/usb.rb:1154"
            },
            "result": {
              "status": "passed",
              "duration": 13044340594
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:335"
            },
            "result": {
              "status": "passed",
              "duration": 611947893
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:104"
            },
            "result": {
              "status": "passed",
              "duration": 19708
            }
          }
        ]
      },
      {
        "id": "tails-persistence;creating-and-using-a-persistent-networkmanager-connection",
        "keyword": "Scenario",
        "name": "Creating and using a persistent NetworkManager connection",
        "description": "",
        "line": 82,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:270"
            },
            "result": {
              "status": "passed",
              "duration": 28985
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:277"
            },
            "result": {
              "status": "passed",
              "duration": 5470136
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails without network from a USB drive with a persistent partition enabled and logged in",
            "line": 83,
            "match": {
              "location": "features/step_definitions/snapshots.rb:172"
            },
            "result": {
              "status": "passed",
              "duration": 8028288716
            }
          },
          {
            "keyword": "And ",
            "name": "the network is plugged",
            "line": 84,
            "match": {
              "location": "features/step_definitions/common_steps.rb:137"
            },
            "result": {
              "status": "passed",
              "duration": 33623008
            }
          },
          {
            "keyword": "And ",
            "name": "Tor is ready",
            "line": 85,
            "match": {
              "location": "features/step_definitions/common_steps.rb:650"
            },
            "result": {
              "status": "passed",
              "duration": 10682024763
            }
          },
          {
            "keyword": "And ",
            "name": "I add a wired DHCP NetworkManager connection called \"persistent-con-current\"",
            "line": 86,
            "match": {
              "location": "features/step_definitions/common_steps.rb:955"
            },
            "result": {
              "status": "passed",
              "duration": 126310977
            }
          },
          {
            "keyword": "And ",
            "name": "I shutdown Tails and wait for the computer to power off",
            "line": 87,
            "match": {
              "location": "features/step_definitions/common_steps.rb:904"
            },
            "result": {
              "status": "passed",
              "duration": 9571891176
            }
          },
          {
            "keyword": "Given ",
            "name": "I start Tails from USB drive \"__internal\" with network unplugged and I login with persistence enabled",
            "line": 88,
            "match": {
              "location": "features/step_definitions/common_steps.rb:232"
            },
            "result": {
              "status": "passed",
              "duration": 70732968301
            }
          },
          {
            "keyword": "And ",
            "name": "I capture all network traffic",
            "line": 89,
            "match": {
              "location": "features/step_definitions/common_steps.rb:185"
            },
            "result": {
              "status": "passed",
              "duration": 4122990
            }
          },
          {
            "keyword": "And ",
            "name": "the network is plugged",
            "line": 90,
            "match": {
              "location": "features/step_definitions/common_steps.rb:137"
            },
            "result": {
              "status": "passed",
              "duration": 24462824
            }
          },
          {
            "keyword": "And ",
            "name": "Tor is ready",
            "line": 91,
            "match": {
              "location": "features/step_definitions/common_steps.rb:650"
            },
            "result": {
              "status": "passed",
              "duration": 12340249761
            }
          },
          {
            "keyword": "And ",
            "name": "I switch to the \"persistent-con-current\" NetworkManager connection",
            "line": 92,
            "match": {
              "location": "features/step_definitions/common_steps.rb:970"
            },
            "result": {
              "status": "passed",
              "duration": 452367842
            }
          },
          {
            "keyword": "And ",
            "name": "the 1st network device has a spoofed MAC address configured",
            "line": 93,
            "match": {
              "location": "features/step_definitions/mac_spoofing.rb:18"
            },
            "result": {
              "status": "passed",
              "duration": 88033609
            }
          },
          {
            "keyword": "And ",
            "name": "no network device leaked the real MAC address",
            "line": 94,
            "match": {
              "location": "features/step_definitions/mac_spoofing.rb:42"
            },
            "result": {
              "status": "passed",
              "duration": 109199664
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:335"
            },
            "result": {
              "status": "passed",
              "duration": 779838950
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:104"
            },
            "result": {
              "status": "passed",
              "duration": 44270010
            }
          }
        ]
      },
      {
        "id": "tails-persistence;creating-persistence-from-the-welcome-screen",
        "keyword": "Scenario",
        "name": "Creating persistence from the Welcome Screen",
        "description": "",
        "line": 96,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:270"
            },
            "result": {
              "status": "passed",
              "duration": 21220
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:277"
            },
            "result": {
              "status": "passed",
              "duration": 3985471
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails without network from a USB drive without a persistent partition and stopped at Tails Greeter's login screen",
            "line": 97,
            "match": {
              "location": "features/step_definitions/snapshots.rb:172"
            },
            "result": {
              "status": "passed",
              "duration": 9284769997
            }
          },
          {
            "keyword": "And ",
            "name": "I enable persistence creation in Tails Greeter",
            "line": 98,
            "match": {
              "location": "features/step_definitions/usb.rb:322"
            },
            "result": {
              "status": "passed",
              "duration": 1098428832
            }
          },
          {
            "keyword": "And ",
            "name": "I log in to a new session expecting no warning about the Persistent Storage not being activated",
            "line": 99,
            "match": {
              "location": "features/step_definitions/common_steps.rb:514"
            },
            "result": {
              "status": "passed",
              "duration": 15498310588
            }
          },
          {
            "keyword": "Then ",
            "name": "I create a persistent partition with the default settings using the wizard that was already open",
            "line": 100,
            "match": {
              "location": "features/step_definitions/usb.rb:341"
            },
            "result": {
              "status": "passed",
              "duration": 19744901951
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:335"
            },
            "result": {
              "status": "passed",
              "duration": 1207872664
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:104"
            },
            "result": {
              "status": "passed",
              "duration": 28173
            }
          }
        ]
      },
      {
        "id": "tails-persistence;persistent-greeter-options",
        "keyword": "Scenario",
        "name": "Persistent Greeter options",
        "description": "",
        "line": 102,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:270"
            },
            "result": {
              "status": "passed",
              "duration": 25357
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:277"
            },
            "result": {
              "status": "passed",
              "duration": 12362718
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails without network from a USB drive with a persistent partition and stopped at Tails Greeter's login screen",
            "line": 103,
            "match": {
              "location": "features/step_definitions/snapshots.rb:172"
            },
            "result": {
              "status": "passed",
              "duration": 10298970465
            }
          },
          {
            "keyword": "When ",
            "name": "I enable persistence",
            "line": 104,
            "match": {
              "location": "features/step_definitions/usb.rb:721"
            },
            "result": {
              "status": "passed",
              "duration": 16764820182
            }
          },
          {
            "keyword": "Then ",
            "name": "no persistent Greeter options were restored",
            "line": 105,
            "match": {
              "location": "features/step_definitions/usb.rb:1687"
            },
            "result": {
              "status": "passed",
              "duration": 13582555719
            }
          },
          {
            "keyword": "When ",
            "name": "I set all Greeter options to non-default values",
            "line": 106,
            "match": {
              "location": "features/step_definitions/usb.rb:1627"
            },
            "result": {
              "status": "passed",
              "duration": 39080099676
            }
          },
          {
            "keyword": "Then ",
            "name": "the Welcome Screen's language is set to English",
            "line": 107,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1883"
            },
            "result": {
              "status": "passed",
              "duration": 398543798
            }
          },
          {
            "keyword": "And ",
            "name": "the Welcome Screen's formats is set to United States",
            "line": 108,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1893"
            },
            "result": {
              "status": "passed",
              "duration": 287297829
            }
          },
          {
            "keyword": "When ",
            "name": "I set the formats to \"Belgien - Deutsch\"",
            "line": 110,
            "comments": [
              {
                "value": "# We need to set a format explicitly, or it won't be restored later",
                "line": 109
              }
            ],
            "match": {
              "location": "features/step_definitions/common_steps.rb:468"
            },
            "result": {
              "status": "passed",
              "duration": 4620736982
            }
          },
          {
            "keyword": "When ",
            "name": "I log in to a new session in German (de) after having activated the Persistent Storage",
            "line": 111,
            "match": {
              "location": "features/step_definitions/common_steps.rb:514"
            },
            "result": {
              "status": "passed",
              "duration": 27170105302
            }
          },
          {
            "keyword": "Then ",
            "name": "all Persistent Greeter options are set to non-default values",
            "line": 112,
            "match": {
              "location": "features/step_definitions/usb.rb:1651"
            },
            "result": {
              "status": "passed",
              "duration": 188897591
            }
          },
          {
            "keyword": "When ",
            "name": "I cold reboot the computer",
            "line": 113,
            "match": {
              "location": "features/step_definitions/common_steps.rb:279"
            },
            "result": {
              "status": "passed",
              "duration": 10761576872
            }
          },
          {
            "keyword": "And ",
            "name": "the computer reboots Tails",
            "line": 114,
            "match": {
              "location": "features/step_definitions/common_steps.rb:402"
            },
            "result": {
              "status": "passed",
              "duration": 41039207277
            }
          },
          {
            "keyword": "Then ",
            "name": "the Welcome Screen's language is set to English",
            "line": 115,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1883"
            },
            "result": {
              "status": "passed",
              "duration": 272950249
            }
          },
          {
            "keyword": "And ",
            "name": "the Welcome Screen's formats is set to United States",
            "line": 116,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1893"
            },
            "result": {
              "status": "passed",
              "duration": 203167579
            }
          },
          {
            "keyword": "Given ",
            "name": "I enable persistence",
            "line": 117,
            "match": {
              "location": "features/step_definitions/usb.rb:721"
            },
            "result": {
              "status": "passed",
              "duration": 8940470476
            }
          },
          {
            "keyword": "Then ",
            "name": "persistent Greeter options were restored",
            "line": 118,
            "match": {
              "location": "features/step_definitions/usb.rb:1687"
            },
            "result": {
              "status": "passed",
              "duration": 80761474
            }
          },
          {
            "keyword": "And ",
            "name": "the Welcome Screen's formats is set to Belgium",
            "line": 119,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1893"
            },
            "result": {
              "status": "passed",
              "duration": 255868591
            }
          },
          {
            "keyword": "When ",
            "name": "I log in to a new session after having activated the Persistent Storage",
            "line": 120,
            "match": {
              "location": "features/step_definitions/common_steps.rb:514"
            },
            "result": {
              "status": "passed",
              "duration": 11690445898
            }
          },
          {
            "keyword": "Then ",
            "name": "all Persistent Greeter options are set to non-default values",
            "line": 121,
            "match": {
              "location": "features/step_definitions/usb.rb:1651"
            },
            "result": {
              "status": "passed",
              "duration": 222047952
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:335"
            },
            "result": {
              "status": "passed",
              "duration": 1320490472
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:104"
            },
            "result": {
              "status": "passed",
              "duration": 11180049
            }
          }
        ]
      },
      {
        "id": "tails-persistence;changing-the-persistent-storage-passphrase",
        "keyword": "Scenario",
        "name": "Changing the Persistent Storage passphrase",
        "description": "",
        "line": 123,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:270"
            },
            "result": {
              "status": "passed",
              "duration": 27201
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:277"
            },
            "result": {
              "status": "passed",
              "duration": 5137642
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails without network from a USB drive with a persistent partition enabled and logged in",
            "line": 124,
            "match": {
              "location": "features/step_definitions/snapshots.rb:172"
            },
            "result": {
              "status": "passed",
              "duration": 8832854562
            }
          },
          {
            "keyword": "When ",
            "name": "I change the passphrase of the Persistent Storage",
            "line": 128,
            "comments": [
              {
                "value": "# Note that if anything fails after the passphrase was changed and",
                "line": 125
              },
              {
                "value": "# before it's changed back below, subsequent scenarios might fail",
                "line": 126
              },
              {
                "value": "# because the Persistent Storage doesn't have the expected passphrase.",
                "line": 127
              }
            ],
            "match": {
              "location": "features/step_definitions/usb.rb:462"
            },
            "result": {
              "status": "passed",
              "duration": 26511823751
            }
          },
          {
            "keyword": "And ",
            "name": "I shutdown Tails and wait for the computer to power off",
            "line": 129,
            "match": {
              "location": "features/step_definitions/common_steps.rb:904"
            },
            "result": {
              "status": "passed",
              "duration": 8553745579
            }
          },
          {
            "keyword": "Then ",
            "name": "I start Tails from USB drive \"__internal\" with network unplugged and I login with the changed persistence passphrase",
            "line": 130,
            "match": {
              "location": "features/step_definitions/common_steps.rb:232"
            },
            "result": {
              "status": "passed",
              "duration": 70475721626
            }
          },
          {
            "keyword": "And ",
            "name": "I change the passphrase of the Persistent Storage back to the original",
            "line": 131,
            "match": {
              "location": "features/step_definitions/usb.rb:462"
            },
            "result": {
              "status": "passed",
              "duration": 22597674534
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:335"
            },
            "result": {
              "status": "passed",
              "duration": 1497493362
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:104"
            },
            "result": {
              "status": "passed",
              "duration": 8274523
            }
          }
        ]
      },
      {
        "id": "tails-persistence;deleting-a-tails-persistent-partition",
        "keyword": "Scenario",
        "name": "Deleting a Tails persistent partition",
        "description": "",
        "line": 133,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:270"
            },
            "result": {
              "status": "passed",
              "duration": 18715
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:277"
            },
            "result": {
              "status": "passed",
              "duration": 2269175
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails without network from a USB drive with a persistent partition and stopped at Tails Greeter's login screen",
            "line": 134,
            "match": {
              "location": "features/step_definitions/snapshots.rb:172"
            },
            "result": {
              "status": "passed",
              "duration": 8239252423
            }
          },
          {
            "keyword": "And ",
            "name": "I log in to a new session without activating the Persistent Storage",
            "line": 135,
            "match": {
              "location": "features/step_definitions/common_steps.rb:514"
            },
            "result": {
              "status": "passed",
              "duration": 15263499370
            }
          },
          {
            "keyword": "Then ",
            "name": "persistence is disabled",
            "line": 136,
            "match": {
              "location": "features/step_definitions/usb.rb:847"
            },
            "result": {
              "status": "passed",
              "duration": 143346630
            }
          },
          {
            "keyword": "But ",
            "name": "a Tails persistence partition exists on USB drive \"__internal\"",
            "line": 137,
            "match": {
              "location": "features/step_definitions/usb.rb:648"
            },
            "result": {
              "status": "passed",
              "duration": 4945668460
            }
          },
          {
            "keyword": "And ",
            "name": "all notifications have disappeared",
            "line": 138,
            "match": {
              "location": "features/step_definitions/common_steps.rb:762"
            },
            "result": {
              "status": "passed",
              "duration": 8042735488
            }
          },
          {
            "keyword": "When ",
            "name": "I delete the persistent partition",
            "line": 139,
            "match": {
              "location": "features/step_definitions/usb.rb:1194"
            },
            "result": {
              "status": "passed",
              "duration": 3408752537
            }
          },
          {
            "keyword": "Then ",
            "name": "there is no persistence partition on USB drive \"__internal\"",
            "line": 140,
            "match": {
              "location": "features/step_definitions/usb.rb:606"
            },
            "result": {
              "status": "passed",
              "duration": 363823605
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:335"
            },
            "result": {
              "status": "passed",
              "duration": 866791531
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:104"
            },
            "result": {
              "status": "passed",
              "duration": 21750
            }
          }
        ]
      },
      {
        "id": "tails-persistence;dotfiles-persistence",
        "keyword": "Scenario",
        "name": "Dotfiles persistence",
        "description": "",
        "line": 142,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:270"
            },
            "result": {
              "status": "passed",
              "duration": 12252
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:277"
            },
            "result": {
              "status": "passed",
              "duration": 3497898
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails without network from a USB drive with a persistent partition enabled and logged in",
            "line": 143,
            "match": {
              "location": "features/step_definitions/snapshots.rb:172"
            },
            "result": {
              "status": "passed",
              "duration": 9111268348
            }
          },
          {
            "keyword": "When ",
            "name": "I write some dotfile expected to persist",
            "line": 144,
            "match": {
              "location": "features/step_definitions/usb.rb:1085"
            },
            "result": {
              "status": "passed",
              "duration": 48773419
            }
          },
          {
            "keyword": "And ",
            "name": "I shutdown Tails and wait for the computer to power off",
            "line": 145,
            "match": {
              "location": "features/step_definitions/common_steps.rb:904"
            },
            "result": {
              "status": "passed",
              "duration": 10422765659
            }
          },
          {
            "keyword": "And ",
            "name": "I start Tails from USB drive \"__internal\" with network unplugged and I login with persistence enabled",
            "line": 146,
            "match": {
              "location": "features/step_definitions/common_steps.rb:232"
            },
            "result": {
              "status": "passed",
              "duration": 73593241014
            }
          },
          {
            "keyword": "Then ",
            "name": "the expected persistent dotfile is present in the filesystem",
            "line": 147,
            "match": {
              "location": "features/step_definitions/usb.rb:1140"
            },
            "result": {
              "status": "passed",
              "duration": 255793184
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:335"
            },
            "result": {
              "status": "passed",
              "duration": 867633092
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:104"
            },
            "result": {
              "status": "passed",
              "duration": 27910045
            }
          }
        ]
      },
      {
        "id": "tails-persistence;feature-activation-fails",
        "keyword": "Scenario",
        "name": "Feature activation fails",
        "description": "",
        "line": 149,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:270"
            },
            "result": {
              "status": "passed",
              "duration": 22773
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:277"
            },
            "result": {
              "status": "passed",
              "duration": 4622015
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails without network from a USB drive with a persistent partition and stopped at Tails Greeter's login screen",
            "line": 150,
            "match": {
              "location": "features/step_definitions/snapshots.rb:172"
            },
            "result": {
              "status": "passed",
              "duration": 8062088033
            }
          },
          {
            "keyword": "And ",
            "name": "I create a symlink \"/home/amnesia/Persistent\" to \"/etc\"",
            "line": 151,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1734"
            },
            "result": {
              "status": "passed",
              "duration": 99081742
            }
          },
          {
            "keyword": "When ",
            "name": "I try to enable persistence",
            "line": 152,
            "match": {
              "location": "features/step_definitions/usb.rb:690"
            },
            "result": {
              "status": "passed",
              "duration": 1194016849
            }
          },
          {
            "keyword": "Then ",
            "name": "the Welcome Screen tells me that the Persistent Folder feature couldn't be activated",
            "line": 153,
            "match": {
              "location": "features/step_definitions/usb.rb:1773"
            },
            "result": {
              "status": "passed",
              "duration": 11122948338
            }
          },
          {
            "keyword": "When ",
            "name": "I log in to a new session after having activated the Persistent Storage",
            "line": 154,
            "match": {
              "location": "features/step_definitions/common_steps.rb:514"
            },
            "result": {
              "status": "passed",
              "duration": 11914029022
            }
          },
          {
            "keyword": "And ",
            "name": "all notifications have disappeared",
            "line": 155,
            "match": {
              "location": "features/step_definitions/common_steps.rb:762"
            },
            "result": {
              "status": "passed",
              "duration": 7873560038
            }
          },
          {
            "keyword": "Then ",
            "name": "the Persistent Storage settings tell me that the Persistent Folder feature couldn't be activated",
            "line": 156,
            "match": {
              "location": "features/step_definitions/usb.rb:1796"
            },
            "result": {
              "status": "passed",
              "duration": 1305929059
            }
          },
          {
            "keyword": "And ",
            "name": "all tps features are enabled",
            "line": 157,
            "match": {
              "location": "features/step_definitions/usb.rb:798"
            },
            "result": {
              "status": "passed",
              "duration": 1045909155
            }
          },
          {
            "keyword": "And ",
            "name": "all tps features but the first one are active",
            "line": 158,
            "match": {
              "location": "features/step_definitions/usb.rb:778"
            },
            "result": {
              "status": "passed",
              "duration": 1310658153
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:335"
            },
            "result": {
              "status": "passed",
              "duration": 887870416
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:104"
            },
            "result": {
              "status": "passed",
              "duration": 21490
            }
          }
        ]
      },
      {
        "id": "tails-persistence;luks-header-is-automatically-upgraded-when-unlocking-the-persistent-storage",
        "keyword": "Scenario",
        "name": "LUKS header is automatically upgraded when unlocking the Persistent Storage",
        "description": "",
        "line": 160,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:270"
            },
            "result": {
              "status": "passed",
              "duration": 12053
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:277"
            },
            "result": {
              "status": "passed",
              "duration": 2783418
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails without network from a USB drive with a LUKS 1 persistent partition and stopped at Tails Greeter's login screen",
            "line": 161,
            "match": {
              "location": "features/step_definitions/snapshots.rb:172"
            },
            "result": {
              "status": "passed",
              "duration": 32053420205
            }
          },
          {
            "keyword": "And ",
            "name": "I enable persistence",
            "line": 162,
            "match": {
              "location": "features/step_definitions/usb.rb:721"
            },
            "result": {
              "status": "passed",
              "duration": 22261476594
            }
          },
          {
            "keyword": "And ",
            "name": "I log in to a new session after having activated the Persistent Storage",
            "line": 163,
            "match": {
              "location": "features/step_definitions/common_steps.rb:514"
            },
            "result": {
              "status": "passed",
              "duration": 13015614331
            }
          },
          {
            "keyword": "Then ",
            "name": "a Tails persistence partition with LUKS version 2 and argon2id exists on USB drive \"__internal\"",
            "line": 164,
            "match": {
              "location": "features/step_definitions/usb.rb:636"
            },
            "result": {
              "status": "passed",
              "duration": 613919695
            }
          },
          {
            "keyword": "And ",
            "name": "persistence is enabled",
            "line": 165,
            "match": {
              "location": "features/step_definitions/usb.rb:851"
            },
            "result": {
              "status": "passed",
              "duration": 1848886207
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:335"
            },
            "result": {
              "status": "passed",
              "duration": 1202766726
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:104"
            },
            "result": {
              "status": "passed",
              "duration": 23774
            }
          }
        ]
      },
      {
        "id": "tails-persistence;luks-backup-header-is-restored-if-something-goes-wrong-during-upgrade",
        "keyword": "Scenario",
        "name": "LUKS backup header is restored if something goes wrong during upgrade",
        "description": "",
        "line": 167,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:270"
            },
            "result": {
              "status": "passed",
              "duration": 13626
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:277"
            },
            "result": {
              "status": "passed",
              "duration": 3572457
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails without network from a USB drive with a LUKS 1 persistent partition and stopped at Tails Greeter's login screen",
            "line": 168,
            "match": {
              "location": "features/step_definitions/snapshots.rb:172"
            },
            "result": {
              "status": "passed",
              "duration": 7342439912
            }
          },
          {
            "keyword": "And ",
            "name": "I enable persistence but something goes wrong during the LUKS header upgrade",
            "line": 169,
            "match": {
              "location": "features/step_definitions/usb.rb:726"
            },
            "result": {
              "status": "passed",
              "duration": 16792308507
            }
          },
          {
            "keyword": "Then ",
            "name": "the Tails persistence partition on USB drive \"__internal\" still has LUKS version 1",
            "line": 170,
            "match": {
              "location": "features/step_definitions/usb.rb:643"
            },
            "result": {
              "status": "passed",
              "duration": 635789734
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:335"
            },
            "result": {
              "status": "passed",
              "duration": 1120212647
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:104"
            },
            "result": {
              "status": "passed",
              "duration": 25910
            }
          }
        ]
      },
      {
        "id": "tails-persistence;automatic-filesystem-repair",
        "keyword": "Scenario",
        "name": "Automatic filesystem repair",
        "description": "",
        "line": 172,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:270"
            },
            "result": {
              "status": "passed",
              "duration": 29366
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:277"
            },
            "result": {
              "status": "passed",
              "duration": 19044968
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails without network from a USB drive with a persistent partition and stopped at Tails Greeter's login screen",
            "line": 173,
            "match": {
              "location": "features/step_definitions/snapshots.rb:172"
            },
            "result": {
              "status": "passed",
              "duration": 8868015639
            }
          },
          {
            "keyword": "And ",
            "name": "I corrupt the Persistent Storage filesystem on USB drive \"__internal\"",
            "line": 174,
            "match": {
              "location": "features/step_definitions/usb.rb:1823"
            },
            "result": {
              "status": "passed",
              "duration": 9052327068
            }
          },
          {
            "keyword": "When ",
            "name": "I enable persistence",
            "line": 175,
            "match": {
              "location": "features/step_definitions/usb.rb:721"
            },
            "result": {
              "status": "passed",
              "duration": 8593669743
            }
          },
          {
            "keyword": "Then ",
            "name": "the filesystem of the Persistent Storage was repaired",
            "line": 176,
            "match": {
              "location": "features/step_definitions/usb.rb:1865"
            },
            "result": {
              "status": "passed",
              "duration": 74176861
            }
          },
          {
            "keyword": "And ",
            "name": "persistence is successfully enabled",
            "line": 177,
            "match": {
              "location": "features/step_definitions/usb.rb:701"
            },
            "result": {
              "status": "passed",
              "duration": 2454451479
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:335"
            },
            "result": {
              "status": "passed",
              "duration": 739860043
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:104"
            },
            "result": {
              "status": "passed",
              "duration": 24496
            }
          }
        ]
      },
      {
        "id": "tails-persistence;manual-filesystem-repair-is-successful",
        "keyword": "Scenario",
        "name": "Manual filesystem repair is successful",
        "description": "",
        "line": 179,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:270"
            },
            "result": {
              "status": "passed",
              "duration": 13726
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:277"
            },
            "result": {
              "status": "passed",
              "duration": 2987381
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails without network from a USB drive with a persistent partition and stopped at Tails Greeter's login screen",
            "line": 180,
            "match": {
              "location": "features/step_definitions/snapshots.rb:172"
            },
            "result": {
              "status": "passed",
              "duration": 7731398142
            }
          },
          {
            "keyword": "And ",
            "name": "I corrupt the Persistent Storage filesystem on USB drive \"__internal\" in a way which can't be automatically repaired",
            "line": 181,
            "match": {
              "location": "features/step_definitions/usb.rb:1823"
            },
            "result": {
              "status": "passed",
              "duration": 8621014678
            }
          },
          {
            "keyword": "When ",
            "name": "I try to enable persistence",
            "line": 182,
            "match": {
              "location": "features/step_definitions/usb.rb:690"
            },
            "result": {
              "status": "passed",
              "duration": 1326606155
            }
          },
          {
            "keyword": "Then ",
            "name": "the Welcome Screen tells me that filesystem errors were found on the Persistent Storage",
            "line": 183,
            "match": {
              "location": "features/step_definitions/usb.rb:1781"
            },
            "result": {
              "status": "passed",
              "duration": 5570227089
            }
          },
          {
            "keyword": "When ",
            "name": "I repair the filesystem of the Persistent Storage",
            "line": 184,
            "match": {
              "location": "features/step_definitions/usb.rb:1873"
            },
            "result": {
              "status": "passed",
              "duration": 1176107858
            }
          },
          {
            "keyword": "Then ",
            "name": "the Welcome Screen tells me that the filesystem was repaired successfully",
            "line": 185,
            "match": {
              "location": "features/step_definitions/usb.rb:1877"
            },
            "result": {
              "status": "passed",
              "duration": 416383039
            }
          },
          {
            "keyword": "And ",
            "name": "the filesystem of the Persistent Storage was repaired",
            "line": 186,
            "match": {
              "location": "features/step_definitions/usb.rb:1865"
            },
            "result": {
              "status": "passed",
              "duration": 76193688
            }
          },
          {
            "keyword": "When ",
            "name": "I close the filesystem repair dialog",
            "line": 187,
            "match": {
              "location": "features/step_definitions/usb.rb:1883"
            },
            "result": {
              "status": "passed",
              "duration": 1169025882
            }
          },
          {
            "keyword": "Then ",
            "name": "persistence is successfully enabled",
            "line": 188,
            "match": {
              "location": "features/step_definitions/usb.rb:701"
            },
            "result": {
              "status": "passed",
              "duration": 1292142198
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:335"
            },
            "result": {
              "status": "passed",
              "duration": 1026454135
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:104"
            },
            "result": {
              "status": "passed",
              "duration": 24305
            }
          }
        ]
      },
      {
        "id": "tails-persistence;manual-filesystem-repair-fails",
        "keyword": "Scenario",
        "name": "Manual filesystem repair fails",
        "description": "",
        "line": 191,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          },
          {
            "name": "@doc",
            "line": 190
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:270"
            },
            "result": {
              "status": "passed",
              "duration": 15328
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:277"
            },
            "result": {
              "status": "passed",
              "duration": 3726266
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails without network from a USB drive with a persistent partition and stopped at Tails Greeter's login screen",
            "line": 192,
            "match": {
              "location": "features/step_definitions/snapshots.rb:172"
            },
            "result": {
              "status": "passed",
              "duration": 7848386656
            }
          },
          {
            "keyword": "And ",
            "name": "the Persistent Storage filesystem is corrupted beyond what e2fsck can repair",
            "line": 193,
            "match": {
              "location": "features/step_definitions/usb.rb:1856"
            },
            "result": {
              "status": "passed",
              "duration": 73611963
            }
          },
          {
            "keyword": "When ",
            "name": "I try to enable persistence",
            "line": 194,
            "match": {
              "location": "features/step_definitions/usb.rb:690"
            },
            "result": {
              "status": "passed",
              "duration": 1230573365
            }
          },
          {
            "keyword": "Then ",
            "name": "the Welcome Screen tells me that filesystem errors were found on the Persistent Storage",
            "line": 195,
            "match": {
              "location": "features/step_definitions/usb.rb:1781"
            },
            "result": {
              "status": "passed",
              "duration": 9470645577
            }
          },
          {
            "keyword": "When ",
            "name": "I repair the filesystem of the Persistent Storage",
            "line": 196,
            "match": {
              "location": "features/step_definitions/usb.rb:1873"
            },
            "result": {
              "status": "passed",
              "duration": 1231186627
            }
          },
          {
            "keyword": "Then ",
            "name": "the Welcome Screen tells me that it failed to repair the Persistent Storage",
            "line": 197,
            "match": {
              "location": "features/step_definitions/usb.rb:1788"
            },
            "result": {
              "status": "passed",
              "duration": 62507938
            }
          },
          {
            "keyword": "When ",
            "name": "I log in to a new session",
            "line": 198,
            "match": {
              "location": "features/step_definitions/common_steps.rb:514"
            },
            "result": {
              "status": "passed",
              "duration": 14693947869
            }
          },
          {
            "keyword": "And ",
            "name": "all notifications have disappeared",
            "line": 199,
            "match": {
              "location": "features/step_definitions/common_steps.rb:762"
            },
            "result": {
              "status": "passed",
              "duration": 9696871510
            }
          },
          {
            "keyword": "Then ",
            "name": "WhisperBack is prefilled for fsck with summary: \"Failed to repair the file system of your Persistent Storage\"",
            "line": 205,
            "comments": [
              {
                "value": "# Now both WhisperBack and Tor Browser has started at the same",
                "line": 200
              },
              {
                "value": "# time, so we do not know which window is focused. The steps about",
                "line": 201
              },
              {
                "value": "# Tor Browser care about that, but the ones about WhisperBack do",
                "line": 202
              },
              {
                "value": "# not, so we first deal with WhisperBack and then kill it to",
                "line": 203
              },
              {
                "value": "# ensure that Tor Browser is focused.",
                "line": 204
              }
            ],
            "match": {
              "location": "features/step_definitions/common_steps.rb:1843"
            },
            "result": {
              "status": "passed",
              "duration": 342982624
            }
          },
          {
            "keyword": "And ",
            "name": "the file \"/var/lib/gdm3/post-greeter-whisperback.json\" is empty",
            "line": 206,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1021"
            },
            "result": {
              "status": "passed",
              "duration": 702680045
            }
          },
          {
            "keyword": "When ",
            "name": "I close the \"whisperback\" window",
            "line": 207,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1203"
            },
            "result": {
              "status": "passed",
              "duration": 1592233197
            }
          },
          {
            "keyword": "Then ",
            "name": "the Tor Browser starts",
            "line": 208,
            "match": {
              "location": "features/step_definitions/browser.rb:501"
            },
            "result": {
              "status": "passed",
              "duration": 1951404493
            }
          },
          {
            "keyword": "And ",
            "name": "\"Tails - Recovering data from the Persistent Storage when it has file system errors\" has loaded in the Tor Browser",
            "line": 209,
            "match": {
              "location": "features/step_definitions/browser.rb:274"
            },
            "result": {
              "status": "passed",
              "duration": 764503357
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:335"
            },
            "result": {
              "status": "passed",
              "duration": 818420258
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:104"
            },
            "result": {
              "status": "passed",
              "duration": 20909
            }
          }
        ]
      },
      {
        "id": "tails-persistence;filesystem-and-i/o-errors",
        "keyword": "Scenario",
        "name": "Filesystem and I/O errors",
        "description": "",
        "line": 212,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          },
          {
            "name": "@doc",
            "line": 211
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:270"
            },
            "result": {
              "status": "passed",
              "duration": 29525
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:277"
            },
            "result": {
              "status": "passed",
              "duration": 4268374
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails without network from a USB drive with a persistent partition and stopped at Tails Greeter's login screen",
            "line": 213,
            "match": {
              "location": "features/step_definitions/snapshots.rb:172"
            },
            "result": {
              "status": "passed",
              "duration": 8033286097
            }
          },
          {
            "keyword": "And ",
            "name": "I corrupt the Persistent Storage filesystem on USB drive \"__internal\" in a way which can't be automatically repaired",
            "line": 214,
            "match": {
              "location": "features/step_definitions/usb.rb:1823"
            },
            "result": {
              "status": "passed",
              "duration": 8985105526
            }
          },
          {
            "keyword": "And ",
            "name": "Tails detects disk read failures on the boot device",
            "line": 215,
            "match": {
              "location": "features/step_definitions/hardware.rb:5"
            },
            "result": {
              "status": "passed",
              "duration": 1422642899
            }
          },
          {
            "keyword": "When ",
            "name": "I try to enable persistence",
            "line": 216,
            "match": {
              "location": "features/step_definitions/usb.rb:690"
            },
            "result": {
              "status": "passed",
              "duration": 1222591498
            }
          },
          {
            "keyword": "Then ",
            "name": "the Welcome Screen tells me that my hardware is probably failing",
            "line": 217,
            "match": {
              "location": "features/step_definitions/usb.rb:1891"
            },
            "result": {
              "status": "passed",
              "duration": 4048633788
            }
          },
          {
            "keyword": "When ",
            "name": "I log in to a new session",
            "line": 218,
            "match": {
              "location": "features/step_definitions/common_steps.rb:514"
            },
            "result": {
              "status": "passed",
              "duration": 13099132512
            }
          },
          {
            "keyword": "And ",
            "name": "all notifications have disappeared",
            "line": 219,
            "match": {
              "location": "features/step_definitions/common_steps.rb:762"
            },
            "result": {
              "status": "passed",
              "duration": 9145119333
            }
          },
          {
            "keyword": "Then ",
            "name": "the Tor Browser starts",
            "line": 220,
            "match": {
              "location": "features/step_definitions/browser.rb:501"
            },
            "result": {
              "status": "passed",
              "duration": 1444293132
            }
          },
          {
            "keyword": "And ",
            "name": "\"Tails - Recovering data from the Persistent Storage when it has file system errors\" has loaded in the Tor Browser",
            "line": 221,
            "match": {
              "location": "features/step_definitions/browser.rb:274"
            },
            "result": {
              "status": "passed",
              "duration": 795487988
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:335"
            },
            "result": {
              "status": "passed",
              "duration": 947406986
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:104"
            },
            "result": {
              "status": "passed",
              "duration": 31789
            }
          }
        ]
      }
    ]
  },
  {
    "uri": "features/persistent_tor_bridges.feature",
    "id": "using-persistent-tor-bridges-and-pluggable-transports",
    "keyword": "Feature",
    "name": "Using persistent Tor bridges and pluggable transports",
    "description": "  As a Tails user\n  I want to save Tor bridges in Persistent Storage\n  And be given the option to use them again",
    "line": 2,
    "tags": [
      {
        "name": "@product",
        "line": 1
      }
    ],
    "elements": [
      {
        "keyword": "Background",
        "name": "",
        "description": "",
        "line": 7,
        "type": "background",
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:270"
            },
            "result": {
              "status": "passed",
              "duration": 19677
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:277"
            },
            "result": {
              "status": "passed",
              "duration": 5232679
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails without network from a USB drive without a persistent partition and logged in",
            "line": 8,
            "match": {
              "location": "features/step_definitions/snapshots.rb:172"
            },
            "result": {
              "status": "passed",
              "duration": 9091348804
            }
          },
          {
            "keyword": "And ",
            "name": "I create a persistent partition with the default settings",
            "line": 9,
            "match": {
              "location": "features/step_definitions/usb.rb:341"
            },
            "result": {
              "status": "passed",
              "duration": 19885671303
            }
          },
          {
            "keyword": "Then ",
            "name": "the \"TorConfiguration\" tps feature is not enabled",
            "line": 10,
            "match": {
              "location": "features/step_definitions/usb.rb:822"
            },
            "result": {
              "status": "passed",
              "duration": 326376555
            }
          },
          {
            "keyword": "When ",
            "name": "the network is plugged",
            "line": 11,
            "match": {
              "location": "features/step_definitions/common_steps.rb:137"
            },
            "result": {
              "status": "passed",
              "duration": 36560833
            }
          },
          {
            "keyword": "And ",
            "name": "the Tor Connection Assistant autostarts",
            "line": 12,
            "match": {
              "location": "features/step_definitions/tor.rb:370"
            },
            "result": {
              "status": "passed",
              "duration": 5204801481
            }
          },
          {
            "keyword": "And ",
            "name": "I configure some persistent obfs4 bridges in the Tor Connection Assistant",
            "line": 13,
            "match": {
              "location": "features/step_definitions/tor.rb:616"
            },
            "result": {
              "status": "passed",
              "duration": 11650149800
            }
          },
          {
            "keyword": "And ",
            "name": "I wait until Tor is ready",
            "line": 14,
            "match": {
              "location": "features/step_definitions/common_steps.rb:705"
            },
            "result": {
              "status": "passed",
              "duration": 1162453438
            }
          },
          {
            "keyword": "Then ",
            "name": "tca.conf includes the configured bridges",
            "line": 15,
            "match": {
              "location": "features/step_definitions/tor.rb:1161"
            },
            "result": {
              "status": "passed",
              "duration": 12525993
            }
          },
          {
            "keyword": "And ",
            "name": "the \"TorConfiguration\" tps feature is enabled and active",
            "line": 16,
            "match": {
              "location": "features/step_definitions/usb.rb:842"
            },
            "result": {
              "status": "passed",
              "duration": 775906929
            }
          },
          {
            "keyword": "When ",
            "name": "I cold reboot the computer",
            "line": 17,
            "match": {
              "location": "features/step_definitions/common_steps.rb:279"
            },
            "result": {
              "status": "passed",
              "duration": 6504439457
            }
          },
          {
            "keyword": "And ",
            "name": "the computer reboots Tails",
            "line": 18,
            "match": {
              "location": "features/step_definitions/common_steps.rb:402"
            },
            "result": {
              "status": "passed",
              "duration": 39867906224
            }
          },
          {
            "keyword": "And ",
            "name": "I enable persistence",
            "line": 19,
            "match": {
              "location": "features/step_definitions/usb.rb:721"
            },
            "result": {
              "status": "passed",
              "duration": 6903022824
            }
          },
          {
            "keyword": "And ",
            "name": "I capture all network traffic",
            "line": 20,
            "match": {
              "location": "features/step_definitions/common_steps.rb:185"
            },
            "result": {
              "status": "passed",
              "duration": 6291615
            }
          },
          {
            "keyword": "And ",
            "name": "I log in to a new session",
            "line": 21,
            "match": {
              "location": "features/step_definitions/common_steps.rb:514"
            },
            "result": {
              "status": "passed",
              "duration": 11194838840
            }
          },
          {
            "keyword": "Then ",
            "name": "tca.conf includes the configured bridges",
            "line": 22,
            "match": {
              "location": "features/step_definitions/tor.rb:1161"
            },
            "result": {
              "status": "passed",
              "duration": 6459258
            }
          },
          {
            "keyword": "When ",
            "name": "the network is plugged",
            "line": 23,
            "match": {
              "location": "features/step_definitions/common_steps.rb:137"
            },
            "result": {
              "status": "passed",
              "duration": 20603205
            }
          },
          {
            "keyword": "And ",
            "name": "the Tor Connection Assistant autostarts",
            "line": 24,
            "match": {
              "location": "features/step_definitions/tor.rb:370"
            },
            "result": {
              "status": "passed",
              "duration": 4512503642
            }
          }
        ]
      },
      {
        "id": "using-persistent-tor-bridges-and-pluggable-transports;using-persistent-tor-bridges",
        "keyword": "Scenario",
        "name": "Using Persistent Tor bridges",
        "description": "",
        "line": 26,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          }
        ],
        "steps": [
          {
            "keyword": "When ",
            "name": "I choose to connect to Tor automatically",
            "line": 27,
            "match": {
              "location": "features/step_definitions/tor.rb:509"
            },
            "result": {
              "status": "passed",
              "duration": 1489551758
            }
          },
          {
            "keyword": "And ",
            "name": "I accept Tor Connection's offer to use my persistent bridges",
            "line": 28,
            "match": {
              "location": "features/step_definitions/tor.rb:841"
            },
            "result": {
              "status": "passed",
              "duration": 1893990265
            }
          },
          {
            "keyword": "And ",
            "name": "I click \"Connect to Tor\"",
            "line": 29,
            "match": {
              "location": "features/step_definitions/tor.rb:922"
            },
            "result": {
              "status": "passed",
              "duration": 1300748555
            }
          },
          {
            "keyword": "Then ",
            "name": "I wait until Tor is ready",
            "line": 30,
            "match": {
              "location": "features/step_definitions/common_steps.rb:705"
            },
            "result": {
              "status": "passed",
              "duration": 7245649030
            }
          },
          {
            "keyword": "And ",
            "name": "tca.conf includes the configured bridges",
            "line": 31,
            "match": {
              "location": "features/step_definitions/tor.rb:1161"
            },
            "result": {
              "status": "passed",
              "duration": 6435516
            }
          },
          {
            "keyword": "And ",
            "name": "the \"TorConfiguration\" tps feature is enabled and active",
            "line": 32,
            "match": {
              "location": "features/step_definitions/usb.rb:842"
            },
            "result": {
              "status": "passed",
              "duration": 543360840
            }
          },
          {
            "keyword": "And ",
            "name": "all Internet traffic has only flowed through the configured bridges or connectivity check service",
            "line": 33,
            "output": [
              "Warning: these queries were allowed but not needed: [\"fedoraproject.org.\"]"
            ],
            "match": {
              "location": "features/step_definitions/tor.rb:1020"
            },
            "result": {
              "status": "passed",
              "duration": 560189459
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:335"
            },
            "result": {
              "status": "passed",
              "duration": 830293925
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:104"
            },
            "result": {
              "status": "passed",
              "duration": 50968964
            }
          }
        ]
      },
      {
        "keyword": "Background",
        "name": "",
        "description": "",
        "line": 7,
        "type": "background",
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:270"
            },
            "result": {
              "status": "passed",
              "duration": 26630
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:277"
            },
            "result": {
              "status": "passed",
              "duration": 4618009
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails without network from a USB drive without a persistent partition and logged in",
            "line": 8,
            "match": {
              "location": "features/step_definitions/snapshots.rb:172"
            },
            "result": {
              "status": "passed",
              "duration": 8005002164
            }
          },
          {
            "keyword": "And ",
            "name": "I create a persistent partition with the default settings",
            "line": 9,
            "match": {
              "location": "features/step_definitions/usb.rb:341"
            },
            "result": {
              "status": "passed",
              "duration": 19468471373
            }
          },
          {
            "keyword": "Then ",
            "name": "the \"TorConfiguration\" tps feature is not enabled",
            "line": 10,
            "match": {
              "location": "features/step_definitions/usb.rb:822"
            },
            "result": {
              "status": "passed",
              "duration": 342309017
            }
          },
          {
            "keyword": "When ",
            "name": "the network is plugged",
            "line": 11,
            "match": {
              "location": "features/step_definitions/common_steps.rb:137"
            },
            "result": {
              "status": "passed",
              "duration": 25265586
            }
          },
          {
            "keyword": "And ",
            "name": "the Tor Connection Assistant autostarts",
            "line": 12,
            "match": {
              "location": "features/step_definitions/tor.rb:370"
            },
            "result": {
              "status": "passed",
              "duration": 2191527592
            }
          },
          {
            "keyword": "And ",
            "name": "I configure some persistent obfs4 bridges in the Tor Connection Assistant",
            "line": 13,
            "match": {
              "location": "features/step_definitions/tor.rb:616"
            },
            "result": {
              "status": "passed",
              "duration": 10913573237
            }
          },
          {
            "keyword": "And ",
            "name": "I wait until Tor is ready",
            "line": 14,
            "match": {
              "location": "features/step_definitions/common_steps.rb:705"
            },
            "result": {
              "status": "passed",
              "duration": 1714855132
            }
          },
          {
            "keyword": "Then ",
            "name": "tca.conf includes the configured bridges",
            "line": 15,
            "match": {
              "location": "features/step_definitions/tor.rb:1161"
            },
            "result": {
              "status": "passed",
              "duration": 6040835
            }
          },
          {
            "keyword": "And ",
            "name": "the \"TorConfiguration\" tps feature is enabled and active",
            "line": 16,
            "match": {
              "location": "features/step_definitions/usb.rb:842"
            },
            "result": {
              "status": "passed",
              "duration": 785542667
            }
          },
          {
            "keyword": "When ",
            "name": "I cold reboot the computer",
            "line": 17,
            "match": {
              "location": "features/step_definitions/common_steps.rb:279"
            },
            "result": {
              "status": "passed",
              "duration": 9574251252
            }
          },
          {
            "keyword": "And ",
            "name": "the computer reboots Tails",
            "line": 18,
            "match": {
              "location": "features/step_definitions/common_steps.rb:402"
            },
            "result": {
              "status": "passed",
              "duration": 40548658400
            }
          },
          {
            "keyword": "And ",
            "name": "I enable persistence",
            "line": 19,
            "match": {
              "location": "features/step_definitions/usb.rb:721"
            },
            "result": {
              "status": "passed",
              "duration": 7609007206
            }
          },
          {
            "keyword": "And ",
            "name": "I capture all network traffic",
            "line": 20,
            "match": {
              "location": "features/step_definitions/common_steps.rb:185"
            },
            "result": {
              "status": "passed",
              "duration": 5283997
            }
          },
          {
            "keyword": "And ",
            "name": "I log in to a new session",
            "line": 21,
            "match": {
              "location": "features/step_definitions/common_steps.rb:514"
            },
            "result": {
              "status": "passed",
              "duration": 9890702766
            }
          },
          {
            "keyword": "Then ",
            "name": "tca.conf includes the configured bridges",
            "line": 22,
            "match": {
              "location": "features/step_definitions/tor.rb:1161"
            },
            "result": {
              "status": "passed",
              "duration": 6241500
            }
          },
          {
            "keyword": "When ",
            "name": "the network is plugged",
            "line": 23,
            "match": {
              "location": "features/step_definitions/common_steps.rb:137"
            },
            "result": {
              "status": "passed",
              "duration": 20282744
            }
          },
          {
            "keyword": "And ",
            "name": "the Tor Connection Assistant autostarts",
            "line": 24,
            "match": {
              "location": "features/step_definitions/tor.rb:370"
            },
            "result": {
              "status": "passed",
              "duration": 5235360870
            }
          }
        ]
      },
      {
        "id": "using-persistent-tor-bridges-and-pluggable-transports;disabling-persistence-of-tor-bridges",
        "keyword": "Scenario",
        "name": "Disabling persistence of Tor bridges",
        "description": "",
        "line": 35,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          }
        ],
        "steps": [
          {
            "keyword": "When ",
            "name": "I choose to connect to Tor automatically",
            "line": 36,
            "match": {
              "location": "features/step_definitions/tor.rb:509"
            },
            "result": {
              "status": "passed",
              "duration": 1641222594
            }
          },
          {
            "keyword": "And ",
            "name": "I accept Tor Connection's offer to use my persistent bridges",
            "line": 37,
            "match": {
              "location": "features/step_definitions/tor.rb:841"
            },
            "result": {
              "status": "passed",
              "duration": 1899792405
            }
          },
          {
            "keyword": "And ",
            "name": "I disable saving bridges to Persistent Storage",
            "line": 38,
            "match": {
              "location": "features/step_definitions/tor.rb:740"
            },
            "result": {
              "status": "passed",
              "duration": 1281574907
            }
          },
          {
            "keyword": "And ",
            "name": "I configure a direct connection in the Tor Connection Assistant",
            "line": 39,
            "match": {
              "location": "features/step_definitions/tor.rb:513"
            },
            "result": {
              "status": "passed",
              "duration": 6697617382
            }
          },
          {
            "keyword": "Then ",
            "name": "I wait until Tor is ready",
            "line": 40,
            "match": {
              "location": "features/step_definitions/common_steps.rb:705"
            },
            "result": {
              "status": "passed",
              "duration": 689921845
            }
          },
          {
            "keyword": "And ",
            "name": "tca.conf includes no bridge",
            "line": 41,
            "match": {
              "location": "features/step_definitions/tor.rb:1157"
            },
            "result": {
              "status": "passed",
              "duration": 7787029
            }
          },
          {
            "keyword": "And ",
            "name": "the \"TorConfiguration\" tps feature is not enabled and not active",
            "line": 42,
            "match": {
              "location": "features/step_definitions/usb.rb:842"
            },
            "result": {
              "status": "passed",
              "duration": 609539543
            }
          },
          {
            "keyword": "And ",
            "name": "all Internet traffic has only flowed through Tor or connectivity check service",
            "line": 43,
            "output": [
              "Warning: these queries were allowed but not needed: [\"fedoraproject.org.\"]"
            ],
            "match": {
              "location": "features/step_definitions/tor.rb:1020"
            },
            "result": {
              "status": "passed",
              "duration": 429896646
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:335"
            },
            "result": {
              "status": "passed",
              "duration": 804834482
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:104"
            },
            "result": {
              "status": "passed",
              "duration": 46931343
            }
          }
        ]
      }
    ]
  },
  {
    "uri": "features/pidgin.feature",
    "id": "chatting-anonymously-using-pidgin",
    "keyword": "Feature",
    "name": "Chatting anonymously using Pidgin",
    "description": "  As a Tails user\n  when I chat using Pidgin\n  I should be able to persist my Pidgin configuration\n  And all Internet traffic should flow only through Tor",
    "line": 3,
    "tags": [
      {
        "name": "@product",
        "line": 2
      },
      {
        "name": "@fragile",
        "line": 2
      }
    ],
    "comments": [
      {
        "value": "#19040",
        "line": 1
      }
    ],
    "elements": [
      {
        "id": "chatting-anonymously-using-pidgin;make-sure-pidgin's-d-bus-interface-is-blocked",
        "keyword": "Scenario",
        "name": "Make sure Pidgin's D-Bus interface is blocked",
        "description": "",
        "line": 9,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 2
          },
          {
            "name": "@fragile",
            "line": 2
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:270"
            },
            "result": {
              "status": "passed",
              "duration": 23775
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:277"
            },
            "result": {
              "status": "passed",
              "duration": 5018699
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails from DVD without network and logged in",
            "line": 10,
            "match": {
              "location": "features/step_definitions/snapshots.rb:172"
            },
            "result": {
              "status": "passed",
              "duration": 7516219596
            }
          },
          {
            "keyword": "When ",
            "name": "I start \"Pidgin Internet Messenger\" via GNOME Activities Overview",
            "line": 11,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1165"
            },
            "result": {
              "status": "passed",
              "duration": 10460645978
            }
          },
          {
            "keyword": "Then ",
            "name": "I see Pidgin's account manager window",
            "line": 12,
            "match": {
              "location": "features/step_definitions/pidgin.rb:232"
            },
            "result": {
              "status": "passed",
              "duration": 1326747679
            }
          },
          {
            "keyword": "And ",
            "name": "Pidgin's D-Bus interface is not available",
            "line": 13,
            "match": {
              "location": "features/step_definitions/pidgin.rb:260"
            },
            "result": {
              "status": "passed",
              "duration": 914150230
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:335"
            },
            "result": {
              "status": "passed",
              "duration": 994048305
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:104"
            },
            "result": {
              "status": "passed",
              "duration": 21622
            }
          }
        ]
      },
      {
        "id": "chatting-anonymously-using-pidgin;chatting-with-some-friend-over-xmpp",
        "keyword": "Scenario",
        "name": "Chatting with some friend over XMPP",
        "description": "",
        "line": 16,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 2
          },
          {
            "name": "@fragile",
            "line": 2
          },
          {
            "name": "@check_tor_leaks",
            "line": 15
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:270"
            },
            "result": {
              "status": "passed",
              "duration": 19357
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:277"
            },
            "result": {
              "status": "passed",
              "duration": 4214373
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:523"
            },
            "result": {
              "status": "passed",
              "duration": 2117756
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails from DVD and logged in and the network is connected",
            "line": 17,
            "match": {
              "location": "features/step_definitions/snapshots.rb:172"
            },
            "result": {
              "status": "passed",
              "duration": 13101424890
            }
          },
          {
            "keyword": "When ",
            "name": "I start \"Pidgin Internet Messenger\" via GNOME Activities Overview",
            "line": 18,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1165"
            },
            "result": {
              "status": "passed",
              "duration": 10257967563
            }
          },
          {
            "keyword": "Then ",
            "name": "I see Pidgin's account manager window",
            "line": 19,
            "match": {
              "location": "features/step_definitions/pidgin.rb:232"
            },
            "result": {
              "status": "passed",
              "duration": 1298642849
            }
          },
          {
            "keyword": "When ",
            "name": "I create my XMPP account",
            "line": 20,
            "match": {
              "location": "features/step_definitions/pidgin.rb:115"
            },
            "result": {
              "status": "passed",
              "duration": 12757018000
            }
          },
          {
            "keyword": "And ",
            "name": "I close Pidgin's account manager window",
            "line": 21,
            "match": {
              "location": "features/step_definitions/pidgin.rb:236"
            },
            "result": {
              "status": "passed",
              "duration": 571321418
            }
          },
          {
            "keyword": "Then ",
            "name": "Pidgin automatically enables my XMPP account",
            "line": 22,
            "match": {
              "location": "features/step_definitions/pidgin.rb:141"
            },
            "result": {
              "status": "passed",
              "duration": 17063189503
            }
          },
          {
            "keyword": "Given ",
            "name": "my XMPP friend goes online",
            "line": 23,
            "match": {
              "location": "features/step_definitions/pidgin.rb:151"
            },
            "result": {
              "status": "failed",
              "error_message": "Known issue #21440: XMPP friend failed to go online (RuntimeError)\n./features/step_definitions/pidgin.rb:166:in `rescue in block in <top (required)>'\n./features/step_definitions/pidgin.rb:163:in `/^my XMPP friend goes online$/'\nfeatures/pidgin.feature:23:in `Given my XMPP friend goes online'",
              "duration": 75379038325
            }
          },
          {
            "keyword": "When ",
            "name": "I start a conversation with my friend",
            "line": 24,
            "match": {
              "location": "features/step_definitions/pidgin.rb:170"
            },
            "result": {
              "status": "skipped"
            }
          },
          {
            "keyword": "And ",
            "name": "I say something to my friend",
            "line": 25,
            "match": {
              "location": "features/step_definitions/pidgin.rb:188"
            },
            "result": {
              "status": "skipped"
            }
          },
          {
            "keyword": "Then ",
            "name": "I receive a response from my friend",
            "line": 26,
            "match": {
              "location": "features/step_definitions/pidgin.rb:195"
            },
            "result": {
              "status": "skipped"
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:531"
            },
            "result": {
              "status": "passed",
              "duration": 31702832
            }
          },
          {
            "output": [
              "SCENARIO FAILED: 'Chatting with some friend over XMPP' (at time 02:51:09)",
              "",
              "Boot log: https://jenkins.tails.boum.org/job/test_Tails_ISO_stable/6395/artifact/build-artifacts/02:51:09_Chatting_with_some_friend_over_XMPP.file_content_var_log_boot.log",
              "",
              "Screenshot: https://jenkins.tails.boum.org/job/test_Tails_ISO_stable/6395/artifact/build-artifacts/02:51:09_Chatting_with_some_friend_over_XMPP.png",
              "",
              "Video: https://jenkins.tails.boum.org/job/test_Tails_ISO_stable/6395/artifact/build-artifacts/02:51:09_Chatting_with_some_friend_over_XMPP.mkv",
              "",
              "Systemd journal: https://jenkins.tails.boum.org/job/test_Tails_ISO_stable/6395/artifact/build-artifacts/02:51:09_Chatting_with_some_friend_over_XMPP.journal"
            ],
            "match": {
              "location": "features/support/hooks.rb:335"
            },
            "result": {
              "status": "passed",
              "duration": 5645575897
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:104"
            },
            "result": {
              "status": "passed",
              "duration": 2613469
            }
          }
        ]
      },
      {
        "id": "chatting-anonymously-using-pidgin;using-a-persistent-pidgin-configuration",
        "keyword": "Scenario",
        "name": "Using a persistent Pidgin configuration",
        "description": "",
        "line": 29,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 2
          },
          {
            "name": "@fragile",
            "line": 2
          },
          {
            "name": "@check_tor_leaks",
            "line": 28
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:270"
            },
            "result": {
              "status": "passed",
              "duration": 47799
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:277"
            },
            "result": {
              "status": "passed",
              "duration": 14999249
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:523"
            },
            "result": {
              "status": "passed",
              "duration": 5836381
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails without network from a USB drive with a persistent partition enabled and logged in",
            "line": 30,
            "match": {
              "location": "features/step_definitions/snapshots.rb:172"
            },
            "result": {
              "status": "passed",
              "duration": 9728896558
            }
          },
          {
            "keyword": "And ",
            "name": "the network is plugged",
            "line": 31,
            "match": {
              "location": "features/step_definitions/common_steps.rb:137"
            },
            "result": {
              "status": "passed",
              "duration": 22632638
            }
          },
          {
            "keyword": "And ",
            "name": "Tor is ready",
            "line": 32,
            "match": {
              "location": "features/step_definitions/common_steps.rb:650"
            },
            "result": {
              "status": "passed",
              "duration": 10711398426
            }
          },
          {
            "keyword": "And ",
            "name": "available upgrades have been checked",
            "line": 33,
            "match": {
              "location": "features/step_definitions/common_steps.rb:758"
            },
            "result": {
              "status": "passed",
              "duration": 1084570137
            }
          },
          {
            "keyword": "And ",
            "name": "all notifications have disappeared",
            "line": 34,
            "match": {
              "location": "features/step_definitions/common_steps.rb:762"
            },
            "result": {
              "status": "passed",
              "duration": 7573894222
            }
          },
          {
            "keyword": "When ",
            "name": "I start \"Pidgin Internet Messenger\" via GNOME Activities Overview",
            "line": 35,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1165"
            },
            "result": {
              "status": "passed",
              "duration": 10634384167
            }
          },
          {
            "keyword": "Then ",
            "name": "I see Pidgin's account manager window",
            "line": 36,
            "match": {
              "location": "features/step_definitions/pidgin.rb:232"
            },
            "result": {
              "status": "passed",
              "duration": 1346568383
            }
          },
          {
            "keyword": "When ",
            "name": "I create my XMPP account",
            "line": 37,
            "match": {
              "location": "features/step_definitions/pidgin.rb:115"
            },
            "result": {
              "status": "passed",
              "duration": 14463350900
            }
          },
          {
            "keyword": "And ",
            "name": "I close Pidgin's account manager window",
            "line": 38,
            "match": {
              "location": "features/step_definitions/pidgin.rb:236"
            },
            "result": {
              "status": "passed",
              "duration": 473957154
            }
          },
          {
            "keyword": "Then ",
            "name": "Pidgin automatically enables my XMPP account",
            "line": 39,
            "match": {
              "location": "features/step_definitions/pidgin.rb:141"
            },
            "result": {
              "status": "passed",
              "duration": 16786450499
            }
          },
          {
            "keyword": "When ",
            "name": "I close Pidgin",
            "line": 40,
            "match": {
              "location": "features/step_definitions/pidgin.rb:240"
            },
            "result": {
              "status": "passed",
              "duration": 16208764383
            }
          },
          {
            "keyword": "And ",
            "name": "I take note of the configured Pidgin accounts",
            "line": 41,
            "match": {
              "location": "features/step_definitions/pidgin.rb:246"
            },
            "result": {
              "status": "passed",
              "duration": 8863946
            }
          },
          {
            "keyword": "And ",
            "name": "I shutdown Tails and wait for the computer to power off",
            "line": 42,
            "match": {
              "location": "features/step_definitions/common_steps.rb:904"
            },
            "result": {
              "status": "passed",
              "duration": 8603707069
            }
          },
          {
            "keyword": "Given ",
            "name": "a computer",
            "line": 43,
            "match": {
              "location": "features/step_definitions/common_steps.rb:98"
            },
            "result": {
              "status": "passed",
              "duration": 85476268
            }
          },
          {
            "keyword": "And ",
            "name": "I start Tails from USB drive \"__internal\" and I login with persistence enabled",
            "line": 44,
            "match": {
              "location": "features/step_definitions/common_steps.rb:232"
            },
            "result": {
              "status": "passed",
              "duration": 80721789769
            }
          },
          {
            "keyword": "And ",
            "name": "Pidgin has the expected persistent accounts configured",
            "line": 45,
            "match": {
              "location": "features/step_definitions/pidgin.rb:250"
            },
            "result": {
              "status": "passed",
              "duration": 14975986
            }
          },
          {
            "keyword": "When ",
            "name": "I start \"Pidgin Internet Messenger\" via GNOME Activities Overview",
            "line": 46,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1165"
            },
            "result": {
              "status": "passed",
              "duration": 10394793616
            }
          },
          {
            "keyword": "Then ",
            "name": "Pidgin automatically enables my XMPP account",
            "line": 47,
            "match": {
              "location": "features/step_definitions/pidgin.rb:141"
            },
            "result": {
              "status": "passed",
              "duration": 16958893073
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:531"
            },
            "result": {
              "status": "passed",
              "duration": 626024592
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:335"
            },
            "result": {
              "status": "passed",
              "duration": 1305176622
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:104"
            },
            "result": {
              "status": "passed",
              "duration": 8392733
            }
          }
        ]
      }
    ]
  },
  {
    "uri": "features/qt.feature",
    "id": "the-right-version-of-qt-packages-are-installed",
    "keyword": "Feature",
    "name": "The right version of Qt packages are installed",
    "description": "    We don't ship software which depends on Qt5.\n    As a Tails developer, I want to ensure we don't ship Qt5.",
    "line": 2,
    "tags": [
      {
        "name": "@source",
        "line": 1
      }
    ],
    "elements": [
      {
        "id": "the-right-version-of-qt-packages-are-installed;no-qt5-package-is-installed",
        "keyword": "Scenario",
        "name": "No Qt5 package is installed",
        "description": "",
        "line": 6,
        "type": "scenario",
        "tags": [
          {
            "name": "@source",
            "line": 1
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:270"
            },
            "result": {
              "status": "passed",
              "duration": 18465
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:548"
            },
            "result": {
              "status": "passed",
              "duration": 85552
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have the build manifest for the image under test",
            "line": 7,
            "match": {
              "location": "features/step_definitions/needed_package_updates.rb:3"
            },
            "result": {
              "status": "passed",
              "duration": 46497
            }
          },
          {
            "keyword": "Then ",
            "name": "no Qt5 package is installed",
            "line": 8,
            "match": {
              "location": "features/step_definitions/needed_package_updates.rb:13"
            },
            "result": {
              "status": "passed",
              "duration": 72897200
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:555"
            },
            "result": {
              "status": "passed",
              "duration": 128380
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:104"
            },
            "result": {
              "status": "passed",
              "duration": 8787
            }
          }
        ]
      }
    ]
  },
  {
    "uri": "features/random_seed.feature",
    "id": "random-seed",
    "keyword": "Feature",
    "name": "Random Seed",
    "description": "  As a Tails user\n  I want Tails to use secure random numbers",
    "line": 2,
    "tags": [
      {
        "name": "@product",
        "line": 1
      }
    ],
    "elements": [
      {
        "id": "random-seed;a-random-seed-is-read-during-boot-and-written-during-boot-and-shutdown",
        "keyword": "Scenario",
        "name": "A random seed is read during boot and written during boot and shutdown",
        "description": "",
        "line": 6,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:270"
            },
            "result": {
              "status": "passed",
              "duration": 8777
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:277"
            },
            "result": {
              "status": "passed",
              "duration": 4937106
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "a computer",
            "line": 7,
            "match": {
              "location": "features/step_definitions/common_steps.rb:98"
            },
            "result": {
              "status": "passed",
              "duration": 75529704
            }
          },
          {
            "keyword": "And ",
            "name": "I temporarily create a 7200 MiB disk named \"temp\"",
            "line": 8,
            "match": {
              "location": "features/step_definitions/common_steps.rb:111"
            },
            "result": {
              "status": "passed",
              "duration": 25086821
            }
          },
          {
            "keyword": "And ",
            "name": "I plug USB drive \"temp\"",
            "line": 9,
            "match": {
              "location": "features/step_definitions/common_steps.rb:123"
            },
            "result": {
              "status": "passed",
              "duration": 1019625662
            }
          },
          {
            "keyword": "And ",
            "name": "I write the Tails USB image to disk \"temp\"",
            "line": 10,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1766"
            },
            "result": {
              "status": "passed",
              "duration": 13997829391
            }
          },
          {
            "keyword": "Then ",
            "name": "there is no random seed on USB drive \"temp\"",
            "line": 11,
            "match": {
              "location": "features/step_definitions/random_seed.rb:31"
            },
            "result": {
              "status": "passed",
              "duration": 2852216212
            }
          },
          {
            "keyword": "When ",
            "name": "I start Tails from USB drive \"temp\" with network unplugged",
            "line": 12,
            "match": {
              "location": "features/step_definitions/common_steps.rb:232"
            },
            "result": {
              "status": "passed",
              "duration": 55099467938
            }
          },
          {
            "keyword": "Then ",
            "name": "the random seed was written multiple times on first boot",
            "line": 13,
            "match": {
              "location": "features/step_definitions/random_seed.rb:72"
            },
            "result": {
              "status": "passed",
              "duration": 411261513
            }
          },
          {
            "keyword": "And ",
            "name": "there is a random seed on USB drive \"temp\"",
            "line": 14,
            "match": {
              "location": "features/step_definitions/random_seed.rb:31"
            },
            "result": {
              "status": "passed",
              "duration": 2706980959
            }
          },
          {
            "keyword": "When ",
            "name": "I log in to a new session",
            "line": 15,
            "match": {
              "location": "features/step_definitions/common_steps.rb:514"
            },
            "result": {
              "status": "passed",
              "duration": 12300084660
            }
          },
          {
            "keyword": "And ",
            "name": "I wait for the random seed to be updated",
            "line": 16,
            "match": {
              "location": "features/step_definitions/random_seed.rb:22"
            },
            "result": {
              "status": "passed",
              "duration": 1069204287
            }
          },
          {
            "keyword": "Then ",
            "name": "there is a random seed on USB drive \"temp\"",
            "line": 17,
            "match": {
              "location": "features/step_definitions/random_seed.rb:31"
            },
            "result": {
              "status": "passed",
              "duration": 2632663283
            }
          },
          {
            "keyword": "And ",
            "name": "the random seed is different from the previous one",
            "line": 18,
            "match": {
              "location": "features/step_definitions/random_seed.rb:65"
            },
            "result": {
              "status": "passed",
              "duration": 36709
            }
          },
          {
            "keyword": "And ",
            "name": "I shutdown Tails and wait for the computer to power off",
            "line": 19,
            "match": {
              "location": "features/step_definitions/common_steps.rb:904"
            },
            "result": {
              "status": "passed",
              "duration": 8311372202
            }
          },
          {
            "keyword": "Then ",
            "name": "there is a random seed on USB drive \"temp\"",
            "line": 20,
            "match": {
              "location": "features/step_definitions/random_seed.rb:31"
            },
            "result": {
              "status": "passed",
              "duration": 2764964936
            }
          },
          {
            "keyword": "And ",
            "name": "the random seed is different from the previous one",
            "line": 21,
            "match": {
              "location": "features/step_definitions/random_seed.rb:65"
            },
            "result": {
              "status": "passed",
              "duration": 35275
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:335"
            },
            "result": {
              "status": "passed",
              "duration": 108725543
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:104"
            },
            "result": {
              "status": "passed",
              "duration": 171116305
            }
          }
        ]
      }
    ]
  },
  {
    "uri": "features/sane_defaults.feature",
    "id": "tails-has-a-sane-default-configuration",
    "keyword": "Feature",
    "name": "Tails has a sane default configuration",
    "description": "",
    "line": 2,
    "tags": [
      {
        "name": "@product",
        "line": 1
      }
    ],
    "elements": [
      {
        "id": "tails-has-a-sane-default-configuration;users-are-set-up-correctly",
        "keyword": "Scenario",
        "name": "Users are set up correctly",
        "description": "",
        "line": 4,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:270"
            },
            "result": {
              "status": "passed",
              "duration": 19655
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:277"
            },
            "result": {
              "status": "passed",
              "duration": 4026279
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails from DVD without network and logged in",
            "line": 5,
            "match": {
              "location": "features/step_definitions/snapshots.rb:172"
            },
            "result": {
              "status": "passed",
              "duration": 7706647763
            }
          },
          {
            "keyword": "Then ",
            "name": "the live user has been setup by live-boot",
            "line": 6,
            "match": {
              "location": "features/step_definitions/checks.rb:112"
            },
            "result": {
              "status": "passed",
              "duration": 99064706
            }
          },
          {
            "keyword": "And ",
            "name": "the live user is a member of only its own group and \"cdrom dialout floppy video plugdev netdev scanner lp lpadmin users\"",
            "line": 7,
            "match": {
              "location": "features/step_definitions/checks.rb:122"
            },
            "result": {
              "status": "passed",
              "duration": 59827659
            }
          },
          {
            "keyword": "And ",
            "name": "the live user owns its home directory which has strict permissions",
            "line": 8,
            "match": {
              "location": "features/step_definitions/checks.rb:135"
            },
            "result": {
              "status": "passed",
              "duration": 166817372
            }
          },
          {
            "keyword": "And ",
            "name": "the root user owns its home directory which has strict permissions",
            "line": 9,
            "match": {
              "location": "features/step_definitions/checks.rb:135"
            },
            "result": {
              "status": "passed",
              "duration": 164998643
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:335"
            },
            "result": {
              "status": "passed",
              "duration": 1009772999
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:104"
            },
            "result": {
              "status": "passed",
              "duration": 24786
            }
          }
        ]
      },
      {
        "id": "tails-has-a-sane-default-configuration;no-unexpected-network-services",
        "keyword": "Scenario",
        "name": "No unexpected network services",
        "description": "",
        "line": 12,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          },
          {
            "name": "@not_release_blocker",
            "line": 11
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:270"
            },
            "result": {
              "status": "passed",
              "duration": 28403
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:277"
            },
            "result": {
              "status": "passed",
              "duration": 6716382
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails from DVD and logged in and the network is connected",
            "line": 13,
            "match": {
              "location": "features/step_definitions/snapshots.rb:172"
            },
            "result": {
              "status": "passed",
              "duration": 11347977404
            }
          },
          {
            "keyword": "Then ",
            "name": "no unexpected services are listening for network connections",
            "line": 14,
            "output": [
              "Service 'tor' is listening on 10.200.1.1:9050 but has an exception",
              "Service 'onion-grater' is listening on 0.0.0.0:951 but has an exception"
            ],
            "match": {
              "location": "features/step_definitions/checks.rb:177"
            },
            "result": {
              "status": "passed",
              "duration": 143268385
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:335"
            },
            "result": {
              "status": "passed",
              "duration": 768351570
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:104"
            },
            "result": {
              "status": "passed",
              "duration": 20198
            }
          }
        ]
      },
      {
        "id": "tails-has-a-sane-default-configuration;the-live-user-can-only-access-the-expected-local-services",
        "keyword": "Scenario",
        "name": "The live user can only access the expected local services",
        "description": "",
        "line": 16,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:270"
            },
            "result": {
              "status": "passed",
              "duration": 12873
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:277"
            },
            "result": {
              "status": "passed",
              "duration": 4415607
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails from DVD and logged in and the network is connected",
            "line": 17,
            "match": {
              "location": "features/step_definitions/snapshots.rb:172"
            },
            "result": {
              "status": "passed",
              "duration": 10283262547
            }
          },
          {
            "keyword": "Then ",
            "name": "the live user can only access allowed local services",
            "line": 18,
            "output": [
              "amnesia could access tor on 127.0.0.1:5353 (UDP) as expected",
              "amnesia could access tor on 10.200.1.1:9050 (TCP) as expected",
              "amnesia could access onion-grater on 0.0.0.0:951 (TCP) as expected",
              "amnesia could not access tor on 127.0.0.1:9052 (TCP) as expected",
              "amnesia could access tor on 127.0.0.1:9050 (TCP) as expected",
              "amnesia could access tor on 127.0.0.1:9040 (TCP) as expected",
              "amnesia could not access tor on 127.0.0.1:9063 (TCP) as expected",
              "amnesia could access tor on 127.0.0.1:9062 (TCP) as expected",
              "amnesia could access cupsd on 127.0.0.1:631 (TCP) as expected"
            ],
            "match": {
              "location": "features/step_definitions/checks.rb:192"
            },
            "result": {
              "status": "passed",
              "duration": 5823828474
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:335"
            },
            "result": {
              "status": "passed",
              "duration": 709759098
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:104"
            },
            "result": {
              "status": "passed",
              "duration": 25297
            }
          }
        ]
      },
      {
        "id": "tails-has-a-sane-default-configuration;no-unexpected-error-messages-in-the-journal-after-booting-from-dvd",
        "keyword": "Scenario",
        "name": "No unexpected error messages in the journal after booting from DVD",
        "description": "",
        "line": 20,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:270"
            },
            "result": {
              "status": "passed",
              "duration": 18374
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:277"
            },
            "result": {
              "status": "passed",
              "duration": 9170864
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails from DVD without network and logged in",
            "line": 21,
            "match": {
              "location": "features/step_definitions/snapshots.rb:172"
            },
            "result": {
              "status": "passed",
              "duration": 7110269076
            }
          },
          {
            "keyword": "Then ",
            "name": "there are no unexpected messages of priority \"err\" or higher in the journal",
            "line": 22,
            "match": {
              "location": "features/step_definitions/checks.rb:234"
            },
            "result": {
              "status": "passed",
              "duration": 54922854
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:335"
            },
            "result": {
              "status": "passed",
              "duration": 598289815
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:104"
            },
            "result": {
              "status": "passed",
              "duration": 22411
            }
          }
        ]
      },
      {
        "id": "tails-has-a-sane-default-configuration;no-unexpected-error-messages-in-the-journal-after-booting-from-usb-drive",
        "keyword": "Scenario",
        "name": "No unexpected error messages in the journal after booting from USB drive",
        "description": "",
        "line": 24,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:270"
            },
            "result": {
              "status": "passed",
              "duration": 13806
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:277"
            },
            "result": {
              "status": "passed",
              "duration": 4812722
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails without network from a USB drive with a persistent partition enabled and logged in",
            "line": 25,
            "match": {
              "location": "features/step_definitions/snapshots.rb:172"
            },
            "result": {
              "status": "passed",
              "duration": 8027904945
            }
          },
          {
            "keyword": "Then ",
            "name": "there are no unexpected messages of priority \"err\" or higher in the journal",
            "line": 26,
            "match": {
              "location": "features/step_definitions/checks.rb:234"
            },
            "result": {
              "status": "passed",
              "duration": 54123046
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:335"
            },
            "result": {
              "status": "passed",
              "duration": 695744385
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:104"
            },
            "result": {
              "status": "passed",
              "duration": 30027
            }
          }
        ]
      }
    ]
  },
  {
    "uri": "features/secrets.feature",
    "id": "using-secrets",
    "keyword": "Feature",
    "name": "Using Secrets",
    "description": "",
    "line": 2,
    "tags": [
      {
        "name": "@product",
        "line": 1
      }
    ],
    "elements": [
      {
        "id": "using-secrets;i-can-easily-access-kdbx-files-in-/home/amnesia/persistent",
        "keyword": "Scenario",
        "name": "I can easily access kdbx files in /home/amnesia/Persistent",
        "description": "",
        "line": 4,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:270"
            },
            "result": {
              "status": "passed",
              "duration": 13935
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:277"
            },
            "result": {
              "status": "passed",
              "duration": 3709042
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails without network from a USB drive with a persistent partition and stopped at Tails Greeter's login screen",
            "line": 5,
            "match": {
              "location": "features/step_definitions/snapshots.rb:172"
            },
            "result": {
              "status": "passed",
              "duration": 9313864347
            }
          },
          {
            "keyword": "And ",
            "name": "I enable persistence",
            "line": 6,
            "match": {
              "location": "features/step_definitions/usb.rb:721"
            },
            "result": {
              "status": "passed",
              "duration": 18281507692
            }
          },
          {
            "keyword": "And ",
            "name": "I write a file \"/home/amnesia/Persistent/Passwords.kdbx\" with contents \"\"",
            "line": 7,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1726"
            },
            "result": {
              "status": "passed",
              "duration": 7348187
            }
          },
          {
            "keyword": "And ",
            "name": "I change ownership of file \"/home/amnesia/Persistent/Passwords.kdbx\" to \"amnesia:\"",
            "line": 8,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1730"
            },
            "result": {
              "status": "passed",
              "duration": 65465642
            }
          },
          {
            "keyword": "And ",
            "name": "I log in to a new session",
            "line": 9,
            "match": {
              "location": "features/step_definitions/common_steps.rb:514"
            },
            "result": {
              "status": "passed",
              "duration": 12789339924
            }
          },
          {
            "keyword": "When ",
            "name": "I start \"Secrets\" via GNOME Activities Overview",
            "line": 10,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1165"
            },
            "result": {
              "status": "passed",
              "duration": 10728927184
            }
          },
          {
            "keyword": "Then ",
            "name": "Secrets tries to open \"/home/amnesia/Persistent/Passwords.kdbx\"",
            "line": 11,
            "match": {
              "location": "features/step_definitions/secrets.rb:5"
            },
            "result": {
              "status": "passed",
              "duration": 2810515222
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:335"
            },
            "result": {
              "status": "passed",
              "duration": 1617423058
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:104"
            },
            "result": {
              "status": "passed",
              "duration": 23193
            }
          }
        ]
      },
      {
        "id": "using-secrets;i-can-open-kdbx-files-in-secrets",
        "keyword": "Scenario",
        "name": "I can open kdbx files in Secrets",
        "description": "",
        "line": 13,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:270"
            },
            "result": {
              "status": "passed",
              "duration": 20819
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:277"
            },
            "result": {
              "status": "passed",
              "duration": 11803969
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails from DVD without network and logged in",
            "line": 14,
            "match": {
              "location": "features/step_definitions/snapshots.rb:172"
            },
            "result": {
              "status": "passed",
              "duration": 7027578976
            }
          },
          {
            "keyword": "And ",
            "name": "I have a \"MyPass.kdbx\" file in my home",
            "line": 15,
            "match": {
              "location": "features/step_definitions/secrets.rb:9"
            },
            "result": {
              "status": "passed",
              "duration": 9420120
            }
          },
          {
            "keyword": "When ",
            "name": "I start \"Files\" via GNOME Activities Overview",
            "line": 16,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1165"
            },
            "result": {
              "status": "passed",
              "duration": 8278909229
            }
          },
          {
            "keyword": "And ",
            "name": "I open \"MyPass.kdbx\" in Files",
            "line": 17,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1916"
            },
            "result": {
              "status": "passed",
              "duration": 6099804705
            }
          },
          {
            "keyword": "Then ",
            "name": "Secrets tries to open \"/home/amnesia/MyPass.kdbx\"",
            "line": 18,
            "match": {
              "location": "features/step_definitions/secrets.rb:5"
            },
            "result": {
              "status": "passed",
              "duration": 4319580399
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:335"
            },
            "result": {
              "status": "passed",
              "duration": 1823171202
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:104"
            },
            "result": {
              "status": "passed",
              "duration": 23434
            }
          }
        ]
      }
    ]
  },
  {
    "uri": "features/shutdown_applet.feature",
    "id": "shutdown-buttons-in-the-system-menu",
    "keyword": "Feature",
    "name": "Shutdown buttons in the system menu",
    "description": "",
    "line": 2,
    "tags": [
      {
        "name": "@product",
        "line": 1
      }
    ],
    "elements": [
      {
        "id": "shutdown-buttons-in-the-system-menu;i-can-shutdown-tails-via-the-system-menu",
        "keyword": "Scenario",
        "name": "I can shutdown Tails via the system menu",
        "description": "",
        "line": 4,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:270"
            },
            "result": {
              "status": "passed",
              "duration": 19538
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:277"
            },
            "result": {
              "status": "passed",
              "duration": 3893620
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails from DVD and logged in and the network is connected",
            "line": 5,
            "match": {
              "location": "features/step_definitions/snapshots.rb:172"
            },
            "result": {
              "status": "passed",
              "duration": 11193958614
            }
          },
          {
            "keyword": "When ",
            "name": "I request a shutdown using the system menu",
            "line": 6,
            "match": {
              "location": "features/step_definitions/common_steps.rb:919"
            },
            "result": {
              "status": "passed",
              "duration": 3258647967
            }
          },
          {
            "keyword": "Then ",
            "name": "Tails eventually shuts down",
            "line": 7,
            "match": {
              "location": "features/step_definitions/common_steps.rb:886"
            },
            "result": {
              "status": "passed",
              "duration": 7309654429
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:335"
            },
            "result": {
              "status": "passed",
              "duration": 652814523
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:104"
            },
            "result": {
              "status": "passed",
              "duration": 19867
            }
          }
        ]
      },
      {
        "id": "shutdown-buttons-in-the-system-menu;i-can-reboot-tails-via-the-system-menu",
        "keyword": "Scenario",
        "name": "I can reboot Tails via the system menu",
        "description": "",
        "line": 10,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          },
          {
            "name": "@not_release_blocker",
            "line": 9
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:270"
            },
            "result": {
              "status": "passed",
              "duration": 21010
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:277"
            },
            "result": {
              "status": "passed",
              "duration": 5440690
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails from DVD and logged in and the network is connected",
            "line": 11,
            "match": {
              "location": "features/step_definitions/snapshots.rb:172"
            },
            "result": {
              "status": "passed",
              "duration": 10627591477
            }
          },
          {
            "keyword": "When ",
            "name": "I request a reboot using the system menu",
            "line": 12,
            "match": {
              "location": "features/step_definitions/common_steps.rb:919"
            },
            "result": {
              "status": "passed",
              "duration": 3469158867
            }
          },
          {
            "keyword": "Then ",
            "name": "Tails eventually restarts",
            "line": 13,
            "match": {
              "location": "features/step_definitions/common_steps.rb:886"
            },
            "result": {
              "status": "passed",
              "duration": 47779913420
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:335"
            },
            "result": {
              "status": "passed",
              "duration": 3840863388
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:104"
            },
            "result": {
              "status": "passed",
              "duration": 28523
            }
          }
        ]
      }
    ]
  },
  {
    "uri": "features/ssh.feature",
    "id": "logging-in-via-ssh",
    "keyword": "Feature",
    "name": "Logging in via SSH",
    "description": "  As a Tails user\n  When I connect to SSH servers on the Internet\n  all Internet traffic should flow only through Tor",
    "line": 2,
    "tags": [
      {
        "name": "@product",
        "line": 1
      }
    ],
    "elements": [
      {
        "keyword": "Background",
        "name": "",
        "description": "",
        "line": 7,
        "type": "background",
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:270"
            },
            "result": {
              "status": "passed",
              "duration": 19467
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:277"
            },
            "result": {
              "status": "passed",
              "duration": 4755255
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:523"
            },
            "result": {
              "status": "passed",
              "duration": 3004652
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails from DVD and logged in and the network is connected",
            "line": 8,
            "match": {
              "location": "features/step_definitions/snapshots.rb:172"
            },
            "result": {
              "status": "passed",
              "duration": 11285175923
            }
          }
        ]
      },
      {
        "id": "logging-in-via-ssh;connecting-to-an-ssh-server-on-the-internet-works-and-uses-the-default-socksport",
        "keyword": "Scenario",
        "name": "Connecting to an SSH server on the Internet works and uses the default SocksPort",
        "description": "",
        "line": 11,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          },
          {
            "name": "@check_tor_leaks",
            "line": 10
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I monitor the network connections of SSH",
            "line": 12,
            "match": {
              "location": "features/step_definitions/tor.rb:315"
            },
            "result": {
              "status": "passed",
              "duration": 74212251
            }
          },
          {
            "keyword": "And ",
            "name": "I have the SSH key pair for an SSH server",
            "line": 13,
            "match": {
              "location": "features/step_definitions/ssh.rb:37"
            },
            "result": {
              "status": "passed",
              "duration": 386470523
            }
          },
          {
            "keyword": "When ",
            "name": "I connect to an SSH server on the Internet",
            "line": 14,
            "match": {
              "location": "features/step_definitions/ssh.rb:87"
            },
            "result": {
              "status": "passed",
              "duration": 8323387267
            }
          },
          {
            "keyword": "Then ",
            "name": "I have successfully logged into the SSH server",
            "line": 15,
            "match": {
              "location": "features/step_definitions/ssh.rb:115"
            },
            "result": {
              "status": "passed",
              "duration": 2368974644
            }
          },
          {
            "keyword": "And ",
            "name": "I see that SSH is properly stream isolated",
            "line": 16,
            "match": {
              "location": "features/step_definitions/tor.rb:327"
            },
            "result": {
              "status": "passed",
              "duration": 17151164
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:531"
            },
            "result": {
              "status": "passed",
              "duration": 247170769
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:335"
            },
            "result": {
              "status": "passed",
              "duration": 1108850240
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:104"
            },
            "result": {
              "status": "passed",
              "duration": 75232
            }
          }
        ]
      },
      {
        "keyword": "Background",
        "name": "",
        "description": "",
        "line": 7,
        "type": "background",
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:270"
            },
            "result": {
              "status": "passed",
              "duration": 13837
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:277"
            },
            "result": {
              "status": "passed",
              "duration": 3458625
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:523"
            },
            "result": {
              "status": "passed",
              "duration": 2261671
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails from DVD and logged in and the network is connected",
            "line": 8,
            "match": {
              "location": "features/step_definitions/snapshots.rb:172"
            },
            "result": {
              "status": "passed",
              "duration": 10598169946
            }
          }
        ]
      },
      {
        "id": "logging-in-via-ssh;connecting-to-an-ssh-server-on-the-lan",
        "keyword": "Scenario",
        "name": "Connecting to an SSH server on the LAN",
        "description": "",
        "line": 19,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          },
          {
            "name": "@check_tor_leaks",
            "line": 18
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have the SSH key pair for an SSH server",
            "line": 20,
            "match": {
              "location": "features/step_definitions/ssh.rb:37"
            },
            "result": {
              "status": "passed",
              "duration": 234166729
            }
          },
          {
            "keyword": "And ",
            "name": "an SSH server is running on the LAN",
            "line": 21,
            "match": {
              "location": "features/step_definitions/ssh.rb:78"
            },
            "result": {
              "status": "passed",
              "duration": 113795342
            }
          },
          {
            "keyword": "When ",
            "name": "I connect to an SSH server on the LAN",
            "line": 22,
            "match": {
              "location": "features/step_definitions/ssh.rb:87"
            },
            "result": {
              "status": "passed",
              "duration": 6464339253
            }
          },
          {
            "keyword": "Then ",
            "name": "I am prompted to verify the SSH fingerprint for the SSH server",
            "line": 23,
            "match": {
              "location": "features/step_definitions/ssh.rb:61"
            },
            "result": {
              "status": "passed",
              "duration": 1624061104
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:531"
            },
            "result": {
              "status": "passed",
              "duration": 213914653
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:335"
            },
            "result": {
              "status": "passed",
              "duration": 1069873255
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:104"
            },
            "result": {
              "status": "passed",
              "duration": 1038677
            }
          }
        ]
      }
    ]
  },
  {
    "uri": "features/thunderbird.feature",
    "id": "thunderbird-email-client",
    "keyword": "Feature",
    "name": "Thunderbird email client",
    "description": "  As a Tails user\n  I may want to use an email client",
    "line": 2,
    "tags": [
      {
        "name": "@product",
        "line": 1
      },
      {
        "name": "@check_tor_leaks",
        "line": 1
      }
    ],
    "elements": [
      {
        "keyword": "Background",
        "name": "",
        "description": "",
        "line": 6,
        "type": "background",
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:270"
            },
            "result": {
              "status": "passed",
              "duration": 18034
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:277"
            },
            "result": {
              "status": "passed",
              "duration": 4153617
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:523"
            },
            "result": {
              "status": "passed",
              "duration": 3182377
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails from DVD and logged in with an administration password and the network is connected",
            "line": 7,
            "match": {
              "location": "features/step_definitions/snapshots.rb:172"
            },
            "result": {
              "status": "passed",
              "duration": 87883325102
            }
          },
          {
            "keyword": "And ",
            "name": "I have not configured an email account yet",
            "line": 8,
            "match": {
              "location": "features/step_definitions/thunderbird.rb:36"
            },
            "result": {
              "status": "passed",
              "duration": 63166105
            }
          },
          {
            "keyword": "And ",
            "name": "Thunderbird is installed",
            "line": 9,
            "match": {
              "location": "features/step_definitions/thunderbird.rb:280"
            },
            "result": {
              "status": "passed",
              "duration": 28921084247
            }
          },
          {
            "keyword": "When ",
            "name": "I start Thunderbird",
            "line": 10,
            "match": {
              "location": "features/step_definitions/thunderbird.rb:23"
            },
            "result": {
              "status": "passed",
              "duration": 2473193678
            }
          },
          {
            "keyword": "Then ",
            "name": "I am prompted to setup an email account",
            "line": 11,
            "match": {
              "location": "features/step_definitions/thunderbird.rb:44"
            },
            "result": {
              "status": "passed",
              "duration": 1015583303
            }
          }
        ]
      },
      {
        "id": "thunderbird-email-client;no-add-ons-are-installed",
        "keyword": "Scenario",
        "name": "No add-ons are installed",
        "description": "",
        "line": 13,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          },
          {
            "name": "@check_tor_leaks",
            "line": 1
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I cancel setting up an email account",
            "line": 14,
            "match": {
              "location": "features/step_definitions/thunderbird.rb:48"
            },
            "result": {
              "status": "passed",
              "duration": 2277624972
            }
          },
          {
            "keyword": "When ",
            "name": "I open Thunderbird's Add-ons Manager",
            "line": 15,
            "match": {
              "location": "features/step_definitions/thunderbird.rb:53"
            },
            "result": {
              "status": "passed",
              "duration": 1684544448
            }
          },
          {
            "keyword": "And ",
            "name": "I open the Extensions tab",
            "line": 16,
            "match": {
              "location": "features/step_definitions/thunderbird.rb:67"
            },
            "result": {
              "status": "passed",
              "duration": 1132403923
            }
          },
          {
            "keyword": "Then ",
            "name": "I see that no add-ons are enabled in Thunderbird",
            "line": 17,
            "match": {
              "location": "features/step_definitions/thunderbird.rb:81"
            },
            "result": {
              "status": "passed",
              "duration": 10365819161
            }
          },
          {
            "keyword": "And ",
            "name": "no unexpected connection has leaked from Thunderbird",
            "line": 18,
            "match": {
              "location": "features/step_definitions/thunderbird.rb:248"
            },
            "result": {
              "status": "passed",
              "duration": 644846612
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:531"
            },
            "result": {
              "status": "passed",
              "duration": 29332681343
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:335"
            },
            "result": {
              "status": "passed",
              "duration": 1135913329
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:104"
            },
            "result": {
              "status": "passed",
              "duration": 7122553
            }
          }
        ]
      },
      {
        "keyword": "Background",
        "name": "",
        "description": "",
        "line": 6,
        "type": "background",
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:270"
            },
            "result": {
              "status": "passed",
              "duration": 13525
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:277"
            },
            "result": {
              "status": "passed",
              "duration": 10714568
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:523"
            },
            "result": {
              "status": "passed",
              "duration": 10726321
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails from DVD and logged in with an administration password and the network is connected",
            "line": 7,
            "match": {
              "location": "features/step_definitions/snapshots.rb:172"
            },
            "result": {
              "status": "passed",
              "duration": 10323910644
            }
          },
          {
            "keyword": "And ",
            "name": "I have not configured an email account yet",
            "line": 8,
            "match": {
              "location": "features/step_definitions/thunderbird.rb:36"
            },
            "result": {
              "status": "passed",
              "duration": 31438782
            }
          },
          {
            "keyword": "And ",
            "name": "Thunderbird is installed",
            "line": 9,
            "match": {
              "location": "features/step_definitions/thunderbird.rb:280"
            },
            "result": {
              "status": "passed",
              "duration": 30181514286
            }
          },
          {
            "keyword": "When ",
            "name": "I start Thunderbird",
            "line": 10,
            "match": {
              "location": "features/step_definitions/thunderbird.rb:23"
            },
            "result": {
              "status": "passed",
              "duration": 2483739388
            }
          },
          {
            "keyword": "Then ",
            "name": "I am prompted to setup an email account",
            "line": 11,
            "match": {
              "location": "features/step_definitions/thunderbird.rb:44"
            },
            "result": {
              "status": "passed",
              "duration": 909660801
            }
          }
        ]
      },
      {
        "id": "thunderbird-email-client;i-can-send-emails,-and-receive-emails-over-imap",
        "keyword": "Scenario",
        "name": "I can send emails, and receive emails over IMAP",
        "description": "",
        "line": 20,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          },
          {
            "name": "@check_tor_leaks",
            "line": 1
          }
        ],
        "steps": [
          {
            "keyword": "When ",
            "name": "I enter my email credentials into the autoconfiguration wizard",
            "line": 21,
            "match": {
              "location": "features/step_definitions/thunderbird.rb:85"
            },
            "result": {
              "status": "passed",
              "duration": 8633214325
            }
          },
          {
            "keyword": "Then ",
            "name": "the autoconfiguration wizard's choice for the incoming server is secure IMAP",
            "line": 22,
            "match": {
              "location": "features/step_definitions/thunderbird.rb:109"
            },
            "result": {
              "status": "passed",
              "duration": 212483411
            }
          },
          {
            "keyword": "And ",
            "name": "the autoconfiguration wizard's choice for the outgoing server is secure SMTP",
            "line": 23,
            "match": {
              "location": "features/step_definitions/thunderbird.rb:109"
            },
            "result": {
              "status": "passed",
              "duration": 173253825
            }
          },
          {
            "keyword": "When ",
            "name": "I accept the autoconfiguration wizard's configuration",
            "line": 24,
            "match": {
              "location": "features/step_definitions/thunderbird.rb:132"
            },
            "result": {
              "status": "passed",
              "duration": 15981620031
            }
          },
          {
            "keyword": "And ",
            "name": "I send an email to myself",
            "line": 25,
            "match": {
              "location": "features/step_definitions/thunderbird.rb:167"
            },
            "result": {
              "status": "passed",
              "duration": 5717310363
            }
          },
          {
            "keyword": "And ",
            "name": "I fetch my email",
            "line": 26,
            "match": {
              "location": "features/step_definitions/thunderbird.rb:127"
            },
            "result": {
              "status": "passed",
              "duration": 1533759759
            }
          },
          {
            "keyword": "Then ",
            "name": "I can find the email I sent to myself in my inbox",
            "line": 27,
            "match": {
              "location": "features/step_definitions/thunderbird.rb:188"
            },
            "result": {
              "status": "passed",
              "duration": 5684602397
            }
          },
          {
            "keyword": "And ",
            "name": "the system only established connections with my email server",
            "line": 28,
            "match": {
              "location": "features/step_definitions/thunderbird.rb:256"
            },
            "result": {
              "status": "passed",
              "duration": 689582680
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:531"
            },
            "result": {
              "status": "passed",
              "duration": 28532755828
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:335"
            },
            "result": {
              "status": "passed",
              "duration": 1419909340
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:104"
            },
            "result": {
              "status": "passed",
              "duration": 7650714
            }
          }
        ]
      }
    ]
  },
  {
    "uri": "features/tor_connection.feature",
    "id": "tor-connection-helps-the-user-in-connecting-to-tor",
    "keyword": "Feature",
    "name": "Tor Connection helps the user in connecting to Tor",
    "description": "    As a Tails user\n    I want to use Tor",
    "line": 2,
    "tags": [
      {
        "name": "@product",
        "line": 1
      }
    ],
    "elements": [
      {
        "keyword": "Background",
        "name": "",
        "description": "",
        "line": 6,
        "type": "background",
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:270"
            },
            "result": {
              "status": "passed",
              "duration": 22272
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:277"
            },
            "result": {
              "status": "passed",
              "duration": 10326901
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails from DVD without network and logged in",
            "line": 7,
            "match": {
              "location": "features/step_definitions/snapshots.rb:172"
            },
            "result": {
              "status": "passed",
              "duration": 7948489497
            }
          }
        ]
      },
      {
        "id": "tor-connection-helps-the-user-in-connecting-to-tor;starting-tor-connection-before-connecting-to-wi-fi",
        "keyword": "Scenario",
        "name": "Starting Tor Connection before connecting to Wi-Fi",
        "description": "",
        "line": 9,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          }
        ],
        "steps": [
          {
            "keyword": "When ",
            "name": "I start \"Tor Connection\" via GNOME Activities Overview",
            "line": 10,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1165"
            },
            "result": {
              "status": "passed",
              "duration": 9291924034
            }
          },
          {
            "keyword": "Then ",
            "name": "the Tor Connection Assistant reports that I am not connected to a local network",
            "line": 11,
            "match": {
              "location": "features/step_definitions/tor.rb:1208"
            },
            "result": {
              "status": "passed",
              "duration": 1286732987
            }
          },
          {
            "keyword": "When ",
            "name": "I plug a Wi-Fi adapter",
            "line": 12,
            "match": {
              "location": "features/step_definitions/tor.rb:1211"
            },
            "result": {
              "status": "passed",
              "duration": 643303666
            }
          },
          {
            "keyword": "Then ",
            "name": "Tor Connection suggests me to connect to Wi-Fi",
            "line": 13,
            "match": {
              "location": "features/step_definitions/tor.rb:1215"
            },
            "result": {
              "status": "passed",
              "duration": 814504463
            }
          },
          {
            "keyword": "And ",
            "name": "I click on the Wi-Fi settings",
            "line": 14,
            "match": {
              "location": "features/step_definitions/tor.rb:1220"
            },
            "result": {
              "status": "passed",
              "duration": 1107680691
            }
          },
          {
            "keyword": "And ",
            "name": "The Wi-Fi settings are displayed",
            "line": 15,
            "match": {
              "location": "features/step_definitions/tor.rb:1224"
            },
            "result": {
              "status": "passed",
              "duration": 1973927288
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:335"
            },
            "result": {
              "status": "passed",
              "duration": 1240371017
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:104"
            },
            "result": {
              "status": "passed",
              "duration": 23773
            }
          }
        ]
      },
      {
        "keyword": "Background",
        "name": "",
        "description": "",
        "line": 6,
        "type": "background",
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:270"
            },
            "result": {
              "status": "passed",
              "duration": 17012
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:277"
            },
            "result": {
              "status": "passed",
              "duration": 7980736
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails from DVD without network and logged in",
            "line": 7,
            "match": {
              "location": "features/step_definitions/snapshots.rb:172"
            },
            "result": {
              "status": "passed",
              "duration": 7454217668
            }
          }
        ]
      },
      {
        "id": "tor-connection-helps-the-user-in-connecting-to-tor;time-syncing-works-even-if-the-user-waits-a-lot-before-connecting",
        "keyword": "Scenario",
        "name": "Time syncing works even if the user waits a lot before connecting",
        "description": "",
        "line": 35,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          },
          {
            "name": "@slow",
            "line": 34
          },
          {
            "name": "@not_release_blocker",
            "line": 34
          },
          {
            "name": "@skip_by_default",
            "line": 34
          }
        ],
        "comments": [
          {
            "value": "# # this is not great, but it's the current status",
            "line": 17
          },
          {
            "value": "# Scenario: switching to a network with no Internet doesn't yield any error message",
            "line": 18
          },
          {
            "value": "#     Given the network is plugged",
            "line": 19
          },
          {
            "value": "#     And Tor is ready",
            "line": 20
          },
          {
            "value": "#     And I close \"Tor Connection\"",
            "line": 21
          },
          {
            "value": "#     When the network is unplugged",
            "line": 22
          },
          {
            "value": "#     And the Tor network and default bridges are blocked",
            "line": 23
          },
          {
            "value": "#     And I start \"Tor Connection\" via GNOME Activities Overview",
            "line": 24
          },
          {
            "value": "#     Then \"Tor Connection\" shows the success screen",
            "line": 25
          },
          {
            "value": "# Scenario: Close Tor Connection and open again",
            "line": 27
          },
          {
            "value": "#     Given Tor is ready",
            "line": 28
          },
          {
            "value": "#     When I close \"Tor Connection\"",
            "line": 29
          },
          {
            "value": "#     And I start \"Tor Connection\" via GNOME Activities Overview",
            "line": 30
          },
          {
            "value": "#     Then \"Tor Connection\" shows the success screen",
            "line": 31
          },
          {
            "value": "# regression test for #18868",
            "line": 33
          }
        ],
        "steps": [
          {
            "keyword": "When ",
            "name": "the network is plugged",
            "line": 36,
            "match": {
              "location": "features/step_definitions/common_steps.rb:137"
            },
            "result": {
              "status": "passed",
              "duration": 36083556
            }
          },
          {
            "keyword": "And ",
            "name": "I wait 720 seconds",
            "line": 37,
            "output": [
              "Slept for 720 seconds"
            ],
            "match": {
              "location": "features/step_definitions/common_steps.rb:1370"
            },
            "result": {
              "status": "passed",
              "duration": 720000225891
            }
          },
          {
            "keyword": "Then ",
            "name": "I successfully configure Tor",
            "line": 38,
            "match": {
              "location": "features/step_definitions/common_steps.rb:675"
            },
            "result": {
              "status": "passed",
              "duration": 7391258499
            }
          },
          {
            "keyword": "And ",
            "name": "the time has synced",
            "line": 39,
            "match": {
              "location": "features/step_definitions/common_steps.rb:752"
            },
            "result": {
              "status": "passed",
              "duration": 43988187
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:335"
            },
            "result": {
              "status": "passed",
              "duration": 981133440
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:104"
            },
            "result": {
              "status": "passed",
              "duration": 49021
            }
          }
        ]
      },
      {
        "keyword": "Background",
        "name": "",
        "description": "",
        "line": 6,
        "type": "background",
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:270"
            },
            "result": {
              "status": "passed",
              "duration": 68058
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:277"
            },
            "result": {
              "status": "passed",
              "duration": 19605630
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails from DVD without network and logged in",
            "line": 7,
            "match": {
              "location": "features/step_definitions/snapshots.rb:172"
            },
            "result": {
              "status": "passed",
              "duration": 7742013104
            }
          }
        ]
      },
      {
        "id": "tor-connection-helps-the-user-in-connecting-to-tor;bridges-are-not-enabled-in-automatic-mode-when-going-back-from-hiding-tor",
        "keyword": "Scenario",
        "name": "Bridges are not enabled in automatic mode when going back from hiding Tor",
        "description": "",
        "line": 43,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          },
          {
            "name": "@not_release_blocker",
            "line": 42
          }
        ],
        "comments": [
          {
            "value": "# regression test for #18546",
            "line": 41
          }
        ],
        "steps": [
          {
            "keyword": "When ",
            "name": "the network is plugged",
            "line": 44,
            "match": {
              "location": "features/step_definitions/common_steps.rb:137"
            },
            "result": {
              "status": "passed",
              "duration": 28059621
            }
          },
          {
            "keyword": "And ",
            "name": "the Tor Connection Assistant autostarts",
            "line": 45,
            "match": {
              "location": "features/step_definitions/tor.rb:370"
            },
            "result": {
              "status": "passed",
              "duration": 2654110749
            }
          },
          {
            "keyword": "And ",
            "name": "I look at the hide mode but then I go back",
            "line": 46,
            "match": {
              "location": "features/step_definitions/tor.rb:517"
            },
            "result": {
              "status": "passed",
              "duration": 3858696447
            }
          },
          {
            "keyword": "And ",
            "name": "I choose to connect to Tor automatically",
            "line": 47,
            "match": {
              "location": "features/step_definitions/tor.rb:509"
            },
            "result": {
              "status": "passed",
              "duration": 1305092075
            }
          },
          {
            "keyword": "Then ",
            "name": "Tor Connection does not propose me to use Tor bridges",
            "line": 48,
            "match": {
              "location": "features/step_definitions/tor.rb:860"
            },
            "result": {
              "status": "passed",
              "duration": 118567461
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:335"
            },
            "result": {
              "status": "passed",
              "duration": 1041181219
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:104"
            },
            "result": {
              "status": "passed",
              "duration": 21240
            }
          }
        ]
      },
      {
        "keyword": "Background",
        "name": "",
        "description": "",
        "line": 6,
        "type": "background",
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:270"
            },
            "result": {
              "status": "passed",
              "duration": 14697
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:277"
            },
            "result": {
              "status": "passed",
              "duration": 9011979
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails from DVD without network and logged in",
            "line": 7,
            "match": {
              "location": "features/step_definitions/snapshots.rb:172"
            },
            "result": {
              "status": "passed",
              "duration": 8033586574
            }
          }
        ]
      },
      {
        "id": "tor-connection-helps-the-user-in-connecting-to-tor;i-can-use-a-network-with-captive-portal",
        "keyword": "Scenario",
        "name": "I can use a network with captive portal",
        "description": "",
        "line": 50,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "the Tor network and default bridges are blocked",
            "line": 51,
            "match": {
              "location": "features/step_definitions/tor.rb:1081"
            },
            "result": {
              "status": "passed",
              "duration": 1644232496
            }
          },
          {
            "keyword": "And ",
            "name": "the network is plugged",
            "line": 52,
            "match": {
              "location": "features/step_definitions/common_steps.rb:137"
            },
            "result": {
              "status": "passed",
              "duration": 19253292
            }
          },
          {
            "keyword": "And ",
            "name": "I make sure time sync before Tor connects indicates a captive portal",
            "line": 53,
            "match": {
              "location": "features/step_definitions/time_syncing.rb:54"
            },
            "result": {
              "status": "passed",
              "duration": 1184031709
            }
          },
          {
            "keyword": "And ",
            "name": "the Tor Connection Assistant autostarts",
            "line": 54,
            "match": {
              "location": "features/step_definitions/tor.rb:370"
            },
            "result": {
              "status": "passed",
              "duration": 1396827841
            }
          },
          {
            "keyword": "When ",
            "name": "I choose to connect to Tor automatically",
            "line": 55,
            "match": {
              "location": "features/step_definitions/tor.rb:509"
            },
            "result": {
              "status": "passed",
              "duration": 1382328748
            }
          },
          {
            "keyword": "And ",
            "name": "I click \"Connect to Tor\"",
            "line": 56,
            "match": {
              "location": "features/step_definitions/tor.rb:922"
            },
            "result": {
              "status": "passed",
              "duration": 1233411953
            }
          },
          {
            "keyword": "Then ",
            "name": "the Tor Connection Assistant fails to connect to Tor",
            "line": 57,
            "match": {
              "location": "features/step_definitions/tor.rb:423"
            },
            "result": {
              "status": "passed",
              "duration": 27359607871
            }
          },
          {
            "keyword": "And ",
            "name": "the Tor Connection Assistant knows that it's not the time sync that failed",
            "line": 58,
            "match": {
              "location": "features/step_definitions/tor.rb:435"
            },
            "result": {
              "status": "passed",
              "duration": 10713043527
            }
          },
          {
            "keyword": "And ",
            "name": "the Tor Connection Assistant knows that there might be a captive portal",
            "line": 59,
            "match": {
              "location": "features/step_definitions/tor.rb:441"
            },
            "result": {
              "status": "passed",
              "duration": 92725096
            }
          },
          {
            "keyword": "When ",
            "name": "I open the Unsafe Browser from Tor Connection",
            "line": 60,
            "match": {
              "location": "features/step_definitions/tor.rb:1176"
            },
            "result": {
              "status": "passed",
              "duration": 5438143831
            }
          },
          {
            "keyword": "And ",
            "name": "I log-in to the Captive Portal",
            "line": 61,
            "match": {
              "location": "features/step_definitions/browser.rb:470"
            },
            "result": {
              "status": "passed",
              "duration": 5254790929
            }
          },
          {
            "keyword": "And ",
            "name": "I close the Unsafe Browser",
            "line": 62,
            "match": {
              "location": "features/step_definitions/browser.rb:117"
            },
            "result": {
              "status": "passed",
              "duration": 121778103
            }
          },
          {
            "keyword": "And ",
            "name": "the Tor network and default bridges are unblocked",
            "line": 63,
            "match": {
              "location": "features/step_definitions/tor.rb:1081"
            },
            "result": {
              "status": "passed",
              "duration": 1257819022
            }
          },
          {
            "keyword": "And ",
            "name": "I allow time sync before Tor connects to work again",
            "line": 64,
            "match": {
              "location": "features/step_definitions/time_syncing.rb:48"
            },
            "result": {
              "status": "passed",
              "duration": 86865084
            }
          },
          {
            "keyword": "And ",
            "name": "I click \"Connect to Tor\"",
            "line": 65,
            "match": {
              "location": "features/step_definitions/tor.rb:922"
            },
            "result": {
              "status": "passed",
              "duration": 1148609383
            }
          },
          {
            "keyword": "Then ",
            "name": "I wait until Tor is ready",
            "line": 66,
            "match": {
              "location": "features/step_definitions/common_steps.rb:705"
            },
            "result": {
              "status": "passed",
              "duration": 5144710392
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:335"
            },
            "result": {
              "status": "passed",
              "duration": 908398184
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:104"
            },
            "result": {
              "status": "passed",
              "duration": 2862056
            }
          }
        ]
      }
    ]
  },
  {
    "uri": "features/tor_enforcement.feature",
    "id": "the-tor-enforcement-is-effective",
    "keyword": "Feature",
    "name": "The Tor enforcement is effective",
    "description": "  As a Tails user\n  I want all direct Internet connections I do by mistake or applications do by misconfiguration or buggy leaks to be blocked\n  And as a Tails developer\n  I want to ensure that the automated test suite detects firewall leaks reliably",
    "line": 2,
    "tags": [
      {
        "name": "@product",
        "line": 1
      }
    ],
    "elements": [
      {
        "id": "the-tor-enforcement-is-effective;the-firewall-configuration-is-very-restrictive",
        "keyword": "Scenario",
        "name": "The firewall configuration is very restrictive",
        "description": "",
        "line": 8,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:270"
            },
            "result": {
              "status": "passed",
              "duration": 26260
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:277"
            },
            "result": {
              "status": "passed",
              "duration": 11254910
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails from DVD and logged in and the network is connected",
            "line": 9,
            "match": {
              "location": "features/step_definitions/snapshots.rb:172"
            },
            "result": {
              "status": "passed",
              "duration": 12148613594
            }
          },
          {
            "keyword": "Then ",
            "name": "the firewall's policy is to drop all IPv4 traffic",
            "line": 10,
            "match": {
              "location": "features/step_definitions/tor.rb:64"
            },
            "result": {
              "status": "passed",
              "duration": 63831928
            }
          },
          {
            "keyword": "And ",
            "name": "the firewall is configured to only allow the clearnet and debian-tor users to connect directly to the Internet over IPv4",
            "line": 11,
            "match": {
              "location": "features/step_definitions/tor.rb:74"
            },
            "result": {
              "status": "passed",
              "duration": 157998853
            }
          },
          {
            "keyword": "And ",
            "name": "the firewall's NAT rules only redirect traffic for the Unsafe Browser, Tor's TransPort, and DNSPort",
            "line": 12,
            "match": {
              "location": "features/step_definitions/tor.rb:133"
            },
            "result": {
              "status": "passed",
              "duration": 53573244
            }
          },
          {
            "keyword": "And ",
            "name": "the firewall is configured to block all external IPv6 traffic",
            "line": 13,
            "match": {
              "location": "features/step_definitions/tor.rb:182"
            },
            "result": {
              "status": "passed",
              "duration": 115608917
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:335"
            },
            "result": {
              "status": "passed",
              "duration": 921745923
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:104"
            },
            "result": {
              "status": "passed",
              "duration": 31750
            }
          }
        ]
      },
      {
        "id": "the-tor-enforcement-is-effective;anti-test:-detecting-tcp-leaks-from-the-unsafe-browser-with-the-firewall-leak-detector",
        "keyword": "Scenario",
        "name": "Anti test: Detecting TCP leaks from the Unsafe Browser with the firewall leak detector",
        "description": "",
        "line": 16,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          },
          {
            "name": "@doc",
            "line": 15
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:270"
            },
            "result": {
              "status": "passed",
              "duration": 76276
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:277"
            },
            "result": {
              "status": "passed",
              "duration": 26513732
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails from DVD and logged in and the network is connected",
            "line": 17,
            "match": {
              "location": "features/step_definitions/snapshots.rb:172"
            },
            "result": {
              "status": "passed",
              "duration": 11685447136
            }
          },
          {
            "keyword": "And ",
            "name": "I capture all network traffic",
            "line": 18,
            "match": {
              "location": "features/step_definitions/common_steps.rb:185"
            },
            "result": {
              "status": "passed",
              "duration": 9769476
            }
          },
          {
            "keyword": "When ",
            "name": "I successfully start the Unsafe Browser",
            "line": 19,
            "match": {
              "location": "features/step_definitions/browser.rb:109"
            },
            "result": {
              "status": "passed",
              "duration": 6667204705
            }
          },
          {
            "keyword": "And ",
            "name": "I open the Tails homepage in the Unsafe Browser",
            "line": 20,
            "match": {
              "location": "features/step_definitions/browser.rb:364"
            },
            "result": {
              "status": "passed",
              "duration": 7683550451
            }
          },
          {
            "keyword": "And ",
            "name": "the Tails homepage loads in the Unsafe Browser",
            "line": 21,
            "match": {
              "location": "features/step_definitions/unsafe_browser.rb:140"
            },
            "result": {
              "status": "passed",
              "duration": 330676770
            }
          },
          {
            "keyword": "Then ",
            "name": "the firewall leak detector has detected leaks",
            "line": 22,
            "match": {
              "location": "features/step_definitions/firewall_leaks.rb:1"
            },
            "result": {
              "status": "passed",
              "duration": 350291988
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:335"
            },
            "result": {
              "status": "passed",
              "duration": 1117373119
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:104"
            },
            "result": {
              "status": "passed",
              "duration": 53174928
            }
          }
        ]
      },
      {
        "id": "the-tor-enforcement-is-effective;anti-test:-detecting-tcp-leaks-of-dns-lookups-with-the-firewall-leak-detector",
        "keyword": "Scenario",
        "name": "Anti test: Detecting TCP leaks of DNS lookups with the firewall leak detector",
        "description": "",
        "line": 24,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:270"
            },
            "result": {
              "status": "passed",
              "duration": 17382
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:277"
            },
            "result": {
              "status": "passed",
              "duration": 8527527
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails from DVD and logged in and the network is connected",
            "line": 25,
            "match": {
              "location": "features/step_definitions/snapshots.rb:172"
            },
            "result": {
              "status": "passed",
              "duration": 10618113471
            }
          },
          {
            "keyword": "And ",
            "name": "I capture all network traffic",
            "line": 26,
            "match": {
              "location": "features/step_definitions/common_steps.rb:185"
            },
            "result": {
              "status": "passed",
              "duration": 11270110
            }
          },
          {
            "keyword": "And ",
            "name": "I disable Tails' firewall",
            "line": 27,
            "match": {
              "location": "features/step_definitions/firewall_leaks.rb:7"
            },
            "result": {
              "status": "passed",
              "duration": 129021954
            }
          },
          {
            "keyword": "When ",
            "name": "I do a TCP DNS lookup of \"torproject.org\"",
            "line": 28,
            "match": {
              "location": "features/step_definitions/firewall_leaks.rb:19"
            },
            "result": {
              "status": "passed",
              "duration": 218682150
            }
          },
          {
            "keyword": "Then ",
            "name": "the firewall leak detector has detected leaks",
            "line": 29,
            "match": {
              "location": "features/step_definitions/firewall_leaks.rb:1"
            },
            "result": {
              "status": "passed",
              "duration": 46450161
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:335"
            },
            "result": {
              "status": "passed",
              "duration": 731338595
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:104"
            },
            "result": {
              "status": "passed",
              "duration": 43630804
            }
          }
        ]
      },
      {
        "id": "the-tor-enforcement-is-effective;anti-test:-detecting-udp-leaks-of-dns-lookups-with-the-firewall-leak-detector",
        "keyword": "Scenario",
        "name": "Anti test: Detecting UDP leaks of DNS lookups with the firewall leak detector",
        "description": "",
        "line": 31,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:270"
            },
            "result": {
              "status": "passed",
              "duration": 18174
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:277"
            },
            "result": {
              "status": "passed",
              "duration": 16962354
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails from DVD and logged in and the network is connected",
            "line": 32,
            "match": {
              "location": "features/step_definitions/snapshots.rb:172"
            },
            "result": {
              "status": "passed",
              "duration": 10924974580
            }
          },
          {
            "keyword": "And ",
            "name": "I capture all network traffic",
            "line": 33,
            "match": {
              "location": "features/step_definitions/common_steps.rb:185"
            },
            "result": {
              "status": "passed",
              "duration": 10014407
            }
          },
          {
            "keyword": "And ",
            "name": "I disable Tails' firewall",
            "line": 34,
            "match": {
              "location": "features/step_definitions/firewall_leaks.rb:7"
            },
            "result": {
              "status": "passed",
              "duration": 143573628
            }
          },
          {
            "keyword": "When ",
            "name": "I do a UDP DNS lookup of \"torproject.org\"",
            "line": 35,
            "match": {
              "location": "features/step_definitions/firewall_leaks.rb:25"
            },
            "result": {
              "status": "passed",
              "duration": 162987056
            }
          },
          {
            "keyword": "Then ",
            "name": "the firewall leak detector has detected leaks",
            "line": 36,
            "match": {
              "location": "features/step_definitions/firewall_leaks.rb:1"
            },
            "result": {
              "status": "passed",
              "duration": 36651369
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:335"
            },
            "result": {
              "status": "passed",
              "duration": 917530098
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:104"
            },
            "result": {
              "status": "passed",
              "duration": 50609158
            }
          }
        ]
      },
      {
        "id": "the-tor-enforcement-is-effective;anti-test:-detecting-icmp-leaks-of-ping-with-the-firewall-leak-detector",
        "keyword": "Scenario",
        "name": "Anti test: Detecting ICMP leaks of ping with the firewall leak detector",
        "description": "",
        "line": 38,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:270"
            },
            "result": {
              "status": "passed",
              "duration": 17422
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:277"
            },
            "result": {
              "status": "passed",
              "duration": 8114333
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails from DVD and logged in and the network is connected",
            "line": 39,
            "match": {
              "location": "features/step_definitions/snapshots.rb:172"
            },
            "result": {
              "status": "passed",
              "duration": 9931198473
            }
          },
          {
            "keyword": "And ",
            "name": "I capture all network traffic",
            "line": 40,
            "match": {
              "location": "features/step_definitions/common_steps.rb:185"
            },
            "result": {
              "status": "passed",
              "duration": 9540056
            }
          },
          {
            "keyword": "And ",
            "name": "I disable Tails' firewall",
            "line": 41,
            "match": {
              "location": "features/step_definitions/firewall_leaks.rb:7"
            },
            "result": {
              "status": "passed",
              "duration": 162099231
            }
          },
          {
            "keyword": "When ",
            "name": "I send some ICMP pings",
            "line": 42,
            "match": {
              "location": "features/step_definitions/firewall_leaks.rb:30"
            },
            "result": {
              "status": "passed",
              "duration": 4107281822
            }
          },
          {
            "keyword": "Then ",
            "name": "the firewall leak detector has detected leaks",
            "line": 43,
            "match": {
              "location": "features/step_definitions/firewall_leaks.rb:1"
            },
            "result": {
              "status": "passed",
              "duration": 137730031
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:335"
            },
            "result": {
              "status": "passed",
              "duration": 901970224
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:104"
            },
            "result": {
              "status": "passed",
              "duration": 54778064
            }
          }
        ]
      },
      {
        "id": "the-tor-enforcement-is-effective;the-tor-enforcement-is-effective-at-blocking-untorified-tcp-connection-attempts",
        "keyword": "Scenario",
        "name": "The Tor enforcement is effective at blocking untorified TCP connection attempts",
        "description": "",
        "line": 46,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          },
          {
            "name": "@check_tor_leaks",
            "line": 45
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:270"
            },
            "result": {
              "status": "passed",
              "duration": 19457
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:277"
            },
            "result": {
              "status": "passed",
              "duration": 12541003
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:523"
            },
            "result": {
              "status": "passed",
              "duration": 10731291
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails from DVD and logged in and the network is connected",
            "line": 47,
            "match": {
              "location": "features/step_definitions/snapshots.rb:172"
            },
            "result": {
              "status": "passed",
              "duration": 10328365427
            }
          },
          {
            "keyword": "When ",
            "name": "I open an untorified TCP connection to 1.2.3.4 on port 42",
            "line": 48,
            "match": {
              "location": "features/step_definitions/tor.rb:216"
            },
            "result": {
              "status": "passed",
              "duration": 1273742183
            }
          },
          {
            "keyword": "Then ",
            "name": "the untorified connection fails",
            "line": 49,
            "match": {
              "location": "features/step_definitions/tor.rb:246"
            },
            "result": {
              "status": "passed",
              "duration": 57147
            }
          },
          {
            "keyword": "And ",
            "name": "the untorified connection is logged as dropped by the firewall",
            "line": 50,
            "match": {
              "location": "features/step_definitions/tor.rb:260"
            },
            "result": {
              "status": "passed",
              "duration": 76115510
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:531"
            },
            "result": {
              "status": "passed",
              "duration": 176426705
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:335"
            },
            "result": {
              "status": "passed",
              "duration": 1397731622
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:104"
            },
            "result": {
              "status": "passed",
              "duration": 394360
            }
          }
        ]
      },
      {
        "id": "the-tor-enforcement-is-effective;the-tor-enforcement-is-effective-at-blocking-untorified-udp-connection-attempts",
        "keyword": "Scenario",
        "name": "The Tor enforcement is effective at blocking untorified UDP connection attempts",
        "description": "",
        "line": 53,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          },
          {
            "name": "@check_tor_leaks",
            "line": 52
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:270"
            },
            "result": {
              "status": "passed",
              "duration": 20097
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:277"
            },
            "result": {
              "status": "passed",
              "duration": 16287577
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:523"
            },
            "result": {
              "status": "passed",
              "duration": 19413809
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails from DVD and logged in and the network is connected",
            "line": 54,
            "match": {
              "location": "features/step_definitions/snapshots.rb:172"
            },
            "result": {
              "status": "passed",
              "duration": 10585788233
            }
          },
          {
            "keyword": "When ",
            "name": "I open an untorified UDP connection to 1.2.3.4 on port 42",
            "line": 55,
            "match": {
              "location": "features/step_definitions/tor.rb:216"
            },
            "result": {
              "status": "passed",
              "duration": 1213775114
            }
          },
          {
            "keyword": "Then ",
            "name": "the untorified connection fails",
            "line": 56,
            "match": {
              "location": "features/step_definitions/tor.rb:246"
            },
            "result": {
              "status": "passed",
              "duration": 58980
            }
          },
          {
            "keyword": "And ",
            "name": "the untorified connection is logged as dropped by the firewall",
            "line": 57,
            "match": {
              "location": "features/step_definitions/tor.rb:260"
            },
            "result": {
              "status": "passed",
              "duration": 81103222
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:531"
            },
            "result": {
              "status": "passed",
              "duration": 173938420
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:335"
            },
            "result": {
              "status": "passed",
              "duration": 646628504
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:104"
            },
            "result": {
              "status": "passed",
              "duration": 93084
            }
          }
        ]
      },
      {
        "id": "the-tor-enforcement-is-effective;the-tor-enforcement-is-effective-at-blocking-untorified-icmp-connection-attempts",
        "keyword": "Scenario",
        "name": "The Tor enforcement is effective at blocking untorified ICMP connection attempts",
        "description": "",
        "line": 60,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          },
          {
            "name": "@check_tor_leaks",
            "line": 59
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:270"
            },
            "result": {
              "status": "passed",
              "duration": 18796
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:277"
            },
            "result": {
              "status": "passed",
              "duration": 7360101
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:523"
            },
            "result": {
              "status": "passed",
              "duration": 7226818
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails from DVD and logged in and the network is connected",
            "line": 61,
            "match": {
              "location": "features/step_definitions/snapshots.rb:172"
            },
            "result": {
              "status": "passed",
              "duration": 10249744131
            }
          },
          {
            "keyword": "When ",
            "name": "I open an untorified ICMP connection to 1.2.3.4",
            "line": 62,
            "match": {
              "location": "features/step_definitions/tor.rb:216"
            },
            "result": {
              "status": "passed",
              "duration": 5377608414
            }
          },
          {
            "keyword": "Then ",
            "name": "the untorified connection fails",
            "line": 63,
            "match": {
              "location": "features/step_definitions/tor.rb:246"
            },
            "result": {
              "status": "passed",
              "duration": 46498
            }
          },
          {
            "keyword": "And ",
            "name": "the untorified connection is logged as dropped by the firewall",
            "line": 64,
            "match": {
              "location": "features/step_definitions/tor.rb:260"
            },
            "result": {
              "status": "passed",
              "duration": 124957284
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:531"
            },
            "result": {
              "status": "passed",
              "duration": 240478286
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:335"
            },
            "result": {
              "status": "passed",
              "duration": 749578205
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:104"
            },
            "result": {
              "status": "passed",
              "duration": 73878
            }
          }
        ]
      },
      {
        "id": "the-tor-enforcement-is-effective;the-system-dns-is-always-set-up-to-use-tor's-dnsport",
        "keyword": "Scenario",
        "name": "The system DNS is always set up to use Tor's DNSPort",
        "description": "",
        "line": 66,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:270"
            },
            "result": {
              "status": "passed",
              "duration": 14658
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:277"
            },
            "result": {
              "status": "passed",
              "duration": 7481367
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails from DVD without network and logged in",
            "line": 67,
            "match": {
              "location": "features/step_definitions/snapshots.rb:172"
            },
            "result": {
              "status": "passed",
              "duration": 6752151646
            }
          },
          {
            "keyword": "And ",
            "name": "the system DNS is using the local DNS resolver",
            "line": 68,
            "match": {
              "location": "features/step_definitions/tor.rb:271"
            },
            "result": {
              "status": "passed",
              "duration": 18176960
            }
          },
          {
            "keyword": "And ",
            "name": "the network is plugged",
            "line": 69,
            "match": {
              "location": "features/step_definitions/common_steps.rb:137"
            },
            "result": {
              "status": "passed",
              "duration": 33675789
            }
          },
          {
            "keyword": "And ",
            "name": "I successfully configure Tor",
            "line": 70,
            "match": {
              "location": "features/step_definitions/common_steps.rb:675"
            },
            "result": {
              "status": "passed",
              "duration": 10384212467
            }
          },
          {
            "keyword": "Then ",
            "name": "the system DNS is still using the local DNS resolver",
            "line": 71,
            "match": {
              "location": "features/step_definitions/tor.rb:271"
            },
            "result": {
              "status": "passed",
              "duration": 6524968
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:335"
            },
            "result": {
              "status": "passed",
              "duration": 1122455785
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:104"
            },
            "result": {
              "status": "passed",
              "duration": 23605
            }
          }
        ]
      }
    ]
  },
  {
    "uri": "features/tor_stream_isolation.feature",
    "id": "tor-stream-isolation-is-effective",
    "keyword": "Feature",
    "name": "Tor stream isolation is effective",
    "description": "  As a Tails user\n  I want my Tor streams to be sensibly isolated from each other to prevent identity correlation",
    "line": 2,
    "tags": [
      {
        "name": "@product",
        "line": 1
      },
      {
        "name": "@check_tor_leaks",
        "line": 1
      }
    ],
    "elements": [
      {
        "keyword": "Background",
        "name": "",
        "description": "",
        "line": 6,
        "type": "background",
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:270"
            },
            "result": {
              "status": "passed",
              "duration": 18274
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:277"
            },
            "result": {
              "status": "passed",
              "duration": 9468162
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:523"
            },
            "result": {
              "status": "passed",
              "duration": 8657976
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails from DVD and logged in and the network is connected",
            "line": 7,
            "match": {
              "location": "features/step_definitions/snapshots.rb:172"
            },
            "result": {
              "status": "passed",
              "duration": 10409356876
            }
          }
        ]
      },
      {
        "id": "tor-stream-isolation-is-effective;tails-security-check-is-using-the-tails-specific-socksport",
        "keyword": "Scenario",
        "name": "tails-security-check is using the Tails-specific SocksPort",
        "description": "",
        "line": 10,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          },
          {
            "name": "@check_tor_leaks",
            "line": 1
          },
          {
            "name": "@not_release_blocker",
            "line": 9
          }
        ],
        "steps": [
          {
            "keyword": "When ",
            "name": "I monitor the network connections of tails-security-check",
            "line": 11,
            "match": {
              "location": "features/step_definitions/tor.rb:315"
            },
            "result": {
              "status": "passed",
              "duration": 55299091
            }
          },
          {
            "keyword": "And ",
            "name": "I re-run tails-security-check",
            "line": 12,
            "match": {
              "location": "features/step_definitions/tor.rb:346"
            },
            "result": {
              "status": "passed",
              "duration": 133452359
            }
          },
          {
            "keyword": "Then ",
            "name": "I see that tails-security-check is properly stream isolated after 10 seconds",
            "line": 13,
            "match": {
              "location": "features/step_definitions/tor.rb:327"
            },
            "result": {
              "status": "passed",
              "duration": 10018927851
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:531"
            },
            "result": {
              "status": "passed",
              "duration": 222303177
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:335"
            },
            "result": {
              "status": "passed",
              "duration": 1661782818
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:104"
            },
            "result": {
              "status": "passed",
              "duration": 95087
            }
          }
        ]
      },
      {
        "keyword": "Background",
        "name": "",
        "description": "",
        "line": 6,
        "type": "background",
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:270"
            },
            "result": {
              "status": "passed",
              "duration": 20038
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:277"
            },
            "result": {
              "status": "passed",
              "duration": 9246867
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:523"
            },
            "result": {
              "status": "passed",
              "duration": 5220156
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails from DVD and logged in and the network is connected",
            "line": 7,
            "match": {
              "location": "features/step_definitions/snapshots.rb:172"
            },
            "result": {
              "status": "passed",
              "duration": 10145277595
            }
          }
        ]
      },
      {
        "id": "tor-stream-isolation-is-effective;htpdate-is-using-the-tails-specific-socksport",
        "keyword": "Scenario",
        "name": "htpdate is using the Tails-specific SocksPort",
        "description": "",
        "line": 16,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          },
          {
            "name": "@check_tor_leaks",
            "line": 1
          },
          {
            "name": "@not_release_blocker",
            "line": 15
          }
        ],
        "steps": [
          {
            "keyword": "When ",
            "name": "I monitor the network connections of htpdate",
            "line": 17,
            "match": {
              "location": "features/step_definitions/tor.rb:315"
            },
            "result": {
              "status": "passed",
              "duration": 64210839
            }
          },
          {
            "keyword": "And ",
            "name": "I re-run htpdate",
            "line": 18,
            "match": {
              "location": "features/step_definitions/tor.rb:353"
            },
            "result": {
              "status": "passed",
              "duration": 1389239527
            }
          },
          {
            "keyword": "Then ",
            "name": "I see that htpdate is properly stream isolated",
            "line": 19,
            "match": {
              "location": "features/step_definitions/tor.rb:327"
            },
            "result": {
              "status": "passed",
              "duration": 10497893
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:531"
            },
            "result": {
              "status": "passed",
              "duration": 271493996
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:335"
            },
            "result": {
              "status": "passed",
              "duration": 1039327287
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:104"
            },
            "result": {
              "status": "passed",
              "duration": 97373
            }
          }
        ]
      },
      {
        "keyword": "Background",
        "name": "",
        "description": "",
        "line": 6,
        "type": "background",
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:270"
            },
            "result": {
              "status": "passed",
              "duration": 16050
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:277"
            },
            "result": {
              "status": "passed",
              "duration": 9512304
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:523"
            },
            "result": {
              "status": "passed",
              "duration": 8322093
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails from DVD and logged in and the network is connected",
            "line": 7,
            "match": {
              "location": "features/step_definitions/snapshots.rb:172"
            },
            "result": {
              "status": "passed",
              "duration": 10548089852
            }
          }
        ]
      },
      {
        "id": "tor-stream-isolation-is-effective;tails-upgrade-frontend-wrapper-is-using-the-tails-specific-socksport",
        "keyword": "Scenario",
        "name": "tails-upgrade-frontend-wrapper is using the Tails-specific SocksPort",
        "description": "",
        "line": 22,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          },
          {
            "name": "@check_tor_leaks",
            "line": 1
          },
          {
            "name": "@not_release_blocker",
            "line": 21
          }
        ],
        "steps": [
          {
            "keyword": "When ",
            "name": "I monitor the network connections of tails-upgrade-frontend-wrapper",
            "line": 23,
            "match": {
              "location": "features/step_definitions/tor.rb:315"
            },
            "result": {
              "status": "passed",
              "duration": 77075579
            }
          },
          {
            "keyword": "And ",
            "name": "I re-run tails-upgrade-frontend-wrapper",
            "line": 24,
            "match": {
              "location": "features/step_definitions/tor.rb:360"
            },
            "result": {
              "status": "passed",
              "duration": 33604199140
            }
          },
          {
            "keyword": "Then ",
            "name": "I see that tails-upgrade-frontend-wrapper is properly stream isolated",
            "line": 25,
            "match": {
              "location": "features/step_definitions/tor.rb:327"
            },
            "result": {
              "status": "passed",
              "duration": 6207869
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:531"
            },
            "result": {
              "status": "passed",
              "duration": 233289186
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:335"
            },
            "result": {
              "status": "passed",
              "duration": 1317423219
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:104"
            },
            "result": {
              "status": "passed",
              "duration": 85591
            }
          }
        ]
      },
      {
        "keyword": "Background",
        "name": "",
        "description": "",
        "line": 6,
        "type": "background",
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:270"
            },
            "result": {
              "status": "passed",
              "duration": 12163
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:277"
            },
            "result": {
              "status": "passed",
              "duration": 6536014
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:523"
            },
            "result": {
              "status": "passed",
              "duration": 4389410
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails from DVD and logged in and the network is connected",
            "line": 7,
            "match": {
              "location": "features/step_definitions/snapshots.rb:172"
            },
            "result": {
              "status": "passed",
              "duration": 10253091107
            }
          }
        ]
      },
      {
        "id": "tor-stream-isolation-is-effective;the-tor-browser-is-using-the-web-browser-specific-socksport",
        "keyword": "Scenario",
        "name": "The Tor Browser is using the web browser-specific SocksPort",
        "description": "",
        "line": 27,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          },
          {
            "name": "@check_tor_leaks",
            "line": 1
          }
        ],
        "steps": [
          {
            "keyword": "When ",
            "name": "I monitor the network connections of Tor Browser",
            "line": 28,
            "match": {
              "location": "features/step_definitions/tor.rb:315"
            },
            "result": {
              "status": "passed",
              "duration": 98823756
            }
          },
          {
            "keyword": "And ",
            "name": "I start the Tor Browser",
            "line": 29,
            "match": {
              "location": "features/step_definitions/browser.rb:492"
            },
            "result": {
              "status": "passed",
              "duration": 10920524366
            }
          },
          {
            "keyword": "And ",
            "name": "I open the Tails homepage in the Tor Browser",
            "line": 30,
            "match": {
              "location": "features/step_definitions/browser.rb:364"
            },
            "result": {
              "status": "passed",
              "duration": 10899528681
            }
          },
          {
            "keyword": "Then ",
            "name": "the Tor Browser loads the Tails homepage",
            "line": 31,
            "match": {
              "location": "features/step_definitions/browser.rb:601"
            },
            "result": {
              "status": "passed",
              "duration": 366855805
            }
          },
          {
            "keyword": "And ",
            "name": "I see that Tor Browser is properly stream isolated",
            "line": 32,
            "match": {
              "location": "features/step_definitions/tor.rb:327"
            },
            "result": {
              "status": "passed",
              "duration": 38249275
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:531"
            },
            "result": {
              "status": "passed",
              "duration": 708109656
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:335"
            },
            "result": {
              "status": "passed",
              "duration": 1911973363
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:104"
            },
            "result": {
              "status": "passed",
              "duration": 253385
            }
          }
        ]
      }
    ]
  },
  {
    "uri": "features/torified_browsing.feature",
    "id": "browsing-the-web-using-the-tor-browser",
    "keyword": "Feature",
    "name": "Browsing the web using the Tor Browser",
    "description": "  As a Tails user\n  when I browse the web using the Tor Browser\n  all Internet traffic should flow only through Tor",
    "line": 2,
    "tags": [
      {
        "name": "@product",
        "line": 1
      }
    ],
    "elements": [
      {
        "id": "browsing-the-web-using-the-tor-browser;the-tor-browser-cannot-access-the-lan",
        "keyword": "Scenario",
        "name": "The Tor Browser cannot access the LAN",
        "description": "",
        "line": 7,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:270"
            },
            "result": {
              "status": "passed",
              "duration": 11912
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:277"
            },
            "result": {
              "status": "passed",
              "duration": 7887137
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails from DVD and logged in and the network is connected",
            "line": 8,
            "match": {
              "location": "features/step_definitions/snapshots.rb:172"
            },
            "result": {
              "status": "passed",
              "duration": 10389573644
            }
          },
          {
            "keyword": "And ",
            "name": "a web server is running on the LAN",
            "line": 9,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1291"
            },
            "result": {
              "status": "passed",
              "duration": 1041068401
            }
          },
          {
            "keyword": "And ",
            "name": "I capture all network traffic",
            "line": 10,
            "match": {
              "location": "features/step_definitions/common_steps.rb:185"
            },
            "result": {
              "status": "passed",
              "duration": 13746773
            }
          },
          {
            "keyword": "When ",
            "name": "I start the Tor Browser",
            "line": 11,
            "match": {
              "location": "features/step_definitions/browser.rb:492"
            },
            "result": {
              "status": "passed",
              "duration": 9077800284
            }
          },
          {
            "keyword": "And ",
            "name": "I open a page on the LAN web server in the Tor Browser",
            "line": 12,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1360"
            },
            "result": {
              "status": "passed",
              "duration": 4986706859
            }
          },
          {
            "keyword": "Then ",
            "name": "the Tor Browser shows the \"Unable to connect\" error",
            "line": 13,
            "match": {
              "location": "features/step_definitions/browser.rb:376"
            },
            "result": {
              "status": "passed",
              "duration": 117035074
            }
          },
          {
            "keyword": "And ",
            "name": "no traffic was sent to the web server on the LAN",
            "line": 14,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1364"
            },
            "result": {
              "status": "passed",
              "duration": 22273328
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:335"
            },
            "result": {
              "status": "passed",
              "duration": 678281218
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:104"
            },
            "result": {
              "status": "passed",
              "duration": 41110025
            }
          }
        ]
      },
      {
        "id": "browsing-the-web-using-the-tor-browser;the-downloads-directory-is-usable-in-tor-browser",
        "keyword": "Scenario",
        "name": "The Downloads directory is usable in Tor Browser",
        "description": "",
        "line": 17,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          },
          {
            "name": "@check_tor_leaks",
            "line": 16
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:270"
            },
            "result": {
              "status": "passed",
              "duration": 14528
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:277"
            },
            "result": {
              "status": "passed",
              "duration": 9600230
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:523"
            },
            "result": {
              "status": "passed",
              "duration": 12612797
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails from DVD and logged in and the network is connected",
            "line": 18,
            "match": {
              "location": "features/step_definitions/snapshots.rb:172"
            },
            "result": {
              "status": "passed",
              "duration": 10183515180
            }
          },
          {
            "keyword": "Then ",
            "name": "the live user's Downloads directory exists",
            "line": 19,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1268"
            },
            "result": {
              "status": "passed",
              "duration": 63810056
            }
          },
          {
            "keyword": "And ",
            "name": "there is a GNOME bookmark for the Downloads directory",
            "line": 20,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1272"
            },
            "result": {
              "status": "passed",
              "duration": 15557592667
            }
          },
          {
            "keyword": "When ",
            "name": "I start the Tor Browser",
            "line": 21,
            "match": {
              "location": "features/step_definitions/browser.rb:492"
            },
            "result": {
              "status": "passed",
              "duration": 9761518747
            }
          },
          {
            "keyword": "Then ",
            "name": "I can save the current page as \"index.html\" to the Downloads directory",
            "line": 22,
            "match": {
              "location": "features/step_definitions/browser.rb:649"
            },
            "result": {
              "status": "passed",
              "duration": 4617488854
            }
          },
          {
            "keyword": "And ",
            "name": "I can print the current page as \"output.pdf\" to the Downloads directory",
            "line": 23,
            "match": {
              "location": "features/step_definitions/browser.rb:638"
            },
            "result": {
              "status": "passed",
              "duration": 3175445712
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:531"
            },
            "result": {
              "status": "passed",
              "duration": 221601710
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:335"
            },
            "result": {
              "status": "passed",
              "duration": 703948958
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:104"
            },
            "result": {
              "status": "passed",
              "duration": 86432
            }
          }
        ]
      },
      {
        "id": "browsing-the-web-using-the-tor-browser;downloading-files-with-the-tor-browser",
        "keyword": "Scenario",
        "name": "Downloading files with the Tor Browser",
        "description": "",
        "line": 26,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          },
          {
            "name": "@check_tor_leaks",
            "line": 25
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:270"
            },
            "result": {
              "status": "passed",
              "duration": 18925
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:277"
            },
            "result": {
              "status": "passed",
              "duration": 7621629
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:523"
            },
            "result": {
              "status": "passed",
              "duration": 10899495
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails from DVD and logged in and the network is connected",
            "line": 27,
            "match": {
              "location": "features/step_definitions/snapshots.rb:172"
            },
            "result": {
              "status": "passed",
              "duration": 10599001924
            }
          },
          {
            "keyword": "When ",
            "name": "I start the Tor Browser",
            "line": 28,
            "match": {
              "location": "features/step_definitions/browser.rb:492"
            },
            "result": {
              "status": "passed",
              "duration": 8461648687
            }
          },
          {
            "keyword": "When ",
            "name": "I download some file in the Tor Browser to the Downloads directory",
            "line": 29,
            "match": {
              "location": "features/step_definitions/browser.rb:338"
            },
            "result": {
              "status": "passed",
              "duration": 13457624304
            }
          },
          {
            "keyword": "Then ",
            "name": "the file is saved to the Downloads directory",
            "line": 30,
            "match": {
              "location": "features/step_definitions/browser.rb:359"
            },
            "result": {
              "status": "passed",
              "duration": 445683636
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:531"
            },
            "result": {
              "status": "passed",
              "duration": 559420697
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:335"
            },
            "result": {
              "status": "passed",
              "duration": 1000513757
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:104"
            },
            "result": {
              "status": "passed",
              "duration": 868007
            }
          }
        ]
      },
      {
        "id": "browsing-the-web-using-the-tor-browser;playing-an-ogg-audio-track",
        "keyword": "Scenario",
        "name": "Playing an Ogg audio track",
        "description": "",
        "line": 33,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          },
          {
            "name": "@check_tor_leaks",
            "line": 32
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:270"
            },
            "result": {
              "status": "passed",
              "duration": 81341
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:277"
            },
            "result": {
              "status": "passed",
              "duration": 8445143
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:523"
            },
            "result": {
              "status": "passed",
              "duration": 7269889
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails from DVD and logged in and the network is connected",
            "line": 34,
            "match": {
              "location": "features/step_definitions/snapshots.rb:172"
            },
            "result": {
              "status": "passed",
              "duration": 10487407056
            }
          },
          {
            "keyword": "When ",
            "name": "I start the Tor Browser",
            "line": 35,
            "match": {
              "location": "features/step_definitions/browser.rb:492"
            },
            "result": {
              "status": "passed",
              "duration": 8870469338
            }
          },
          {
            "keyword": "Then ",
            "name": "I can listen to an Ogg audio track in Tor Browser",
            "line": 36,
            "match": {
              "location": "features/step_definitions/browser.rb:400"
            },
            "result": {
              "status": "passed",
              "duration": 37312759701
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:531"
            },
            "result": {
              "status": "passed",
              "duration": 7768111304
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:335"
            },
            "result": {
              "status": "passed",
              "duration": 1465073213
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:104"
            },
            "result": {
              "status": "passed",
              "duration": 3333281
            }
          }
        ]
      },
      {
        "id": "browsing-the-web-using-the-tor-browser;watching-a-webm-video",
        "keyword": "Scenario",
        "name": "Watching a WebM video",
        "description": "",
        "line": 39,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          },
          {
            "name": "@check_tor_leaks",
            "line": 38
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:270"
            },
            "result": {
              "status": "passed",
              "duration": 17843
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:277"
            },
            "result": {
              "status": "passed",
              "duration": 8164988
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:523"
            },
            "result": {
              "status": "passed",
              "duration": 5981154
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails from DVD and logged in and the network is connected",
            "line": 40,
            "match": {
              "location": "features/step_definitions/snapshots.rb:172"
            },
            "result": {
              "status": "passed",
              "duration": 10541064888
            }
          },
          {
            "keyword": "When ",
            "name": "I start the Tor Browser",
            "line": 41,
            "match": {
              "location": "features/step_definitions/browser.rb:492"
            },
            "result": {
              "status": "passed",
              "duration": 7981022582
            }
          },
          {
            "keyword": "Then ",
            "name": "I can watch a WebM video in Tor Browser",
            "line": 42,
            "match": {
              "location": "features/step_definitions/browser.rb:419"
            },
            "result": {
              "status": "passed",
              "duration": 7853631581
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:531"
            },
            "result": {
              "status": "passed",
              "duration": 265929949
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:335"
            },
            "result": {
              "status": "passed",
              "duration": 841119035
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:104"
            },
            "result": {
              "status": "passed",
              "duration": 78407
            }
          }
        ]
      },
      {
        "id": "browsing-the-web-using-the-tor-browser;i-can-view-a-file-stored-in-\"~/downloads\"-but-not-in-~/.gnupg",
        "keyword": "Scenario",
        "name": "I can view a file stored in \"~/Downloads\" but not in ~/.gnupg",
        "description": "",
        "line": 44,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:270"
            },
            "result": {
              "status": "passed",
              "duration": 15730
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:277"
            },
            "result": {
              "status": "passed",
              "duration": 8719329
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails from DVD and logged in and the network is connected",
            "line": 45,
            "match": {
              "location": "features/step_definitions/snapshots.rb:172"
            },
            "result": {
              "status": "passed",
              "duration": 10497559601
            }
          },
          {
            "keyword": "And ",
            "name": "I copy \"/usr/share/synaptic/html/index.html\" to \"/home/amnesia/Downloads/synaptic.html\" as user \"amnesia\"",
            "line": 46,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1038"
            },
            "result": {
              "status": "passed",
              "duration": 53876319
            }
          },
          {
            "keyword": "And ",
            "name": "I copy \"/usr/share/synaptic/html/index.html\" to \"/home/amnesia/.gnupg/synaptic.html\" as user \"amnesia\"",
            "line": 47,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1038"
            },
            "result": {
              "status": "passed",
              "duration": 49134931
            }
          },
          {
            "keyword": "And ",
            "name": "I copy \"/usr/share/synaptic/html/index.html\" to \"/tmp/synaptic.html\" as user \"amnesia\"",
            "line": 48,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1038"
            },
            "result": {
              "status": "passed",
              "duration": 54724931
            }
          },
          {
            "keyword": "Then ",
            "name": "the file \"/home/amnesia/.gnupg/synaptic.html\" exists",
            "line": 49,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1007"
            },
            "result": {
              "status": "passed",
              "duration": 61103992
            }
          },
          {
            "keyword": "And ",
            "name": "the file \"/lib/live/mount/overlay/rw/home/amnesia/.gnupg/synaptic.html\" exists",
            "line": 50,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1007"
            },
            "result": {
              "status": "passed",
              "duration": 39138098
            }
          },
          {
            "keyword": "And ",
            "name": "the file \"/live/overlay/rw/home/amnesia/.gnupg/synaptic.html\" exists",
            "line": 51,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1007"
            },
            "result": {
              "status": "passed",
              "duration": 38777893
            }
          },
          {
            "keyword": "And ",
            "name": "the file \"/tmp/synaptic.html\" exists",
            "line": 52,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1007"
            },
            "result": {
              "status": "passed",
              "duration": 35075742
            }
          },
          {
            "keyword": "Given ",
            "name": "I start monitoring the AppArmor log of \"torbrowser_firefox\"",
            "line": 53,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1380"
            },
            "result": {
              "status": "passed",
              "duration": 96830131
            }
          },
          {
            "keyword": "When ",
            "name": "I start the Tor Browser",
            "line": 54,
            "match": {
              "location": "features/step_definitions/browser.rb:492"
            },
            "result": {
              "status": "passed",
              "duration": 9598067918
            }
          },
          {
            "keyword": "And ",
            "name": "I open the address \"file:///home/amnesia/Downloads/synaptic.html\" in the Tor Browser",
            "line": 55,
            "match": {
              "location": "features/step_definitions/browser.rb:210"
            },
            "result": {
              "status": "passed",
              "duration": 7675591018
            }
          },
          {
            "keyword": "Then ",
            "name": "I see \"TorBrowserSynapticManual.png\" after at most 5 seconds",
            "line": 56,
            "match": {
              "location": "features/step_definitions/common_steps.rb:798"
            },
            "result": {
              "status": "passed",
              "duration": 429170699
            }
          },
          {
            "keyword": "And ",
            "name": "AppArmor has not denied \"torbrowser_firefox\" from opening \"/home/amnesia/Downloads/synaptic.html\"",
            "line": 57,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1393"
            },
            "result": {
              "status": "passed",
              "duration": 50001836
            }
          },
          {
            "keyword": "When ",
            "name": "I open the address \"file:///home/amnesia/.gnupg/synaptic.html\" in the Tor Browser",
            "line": 58,
            "match": {
              "location": "features/step_definitions/browser.rb:210"
            },
            "result": {
              "status": "passed",
              "duration": 4313334932
            }
          },
          {
            "keyword": "Then ",
            "name": "I do not see \"TorBrowserSynapticManual.png\" after at most 5 seconds",
            "line": 59,
            "match": {
              "location": "features/step_definitions/common_steps.rb:798"
            },
            "result": {
              "status": "passed",
              "duration": 496317810
            }
          },
          {
            "keyword": "When ",
            "name": "I open the address \"file:///lib/live/mount/overlay/rw/home/amnesia/.gnupg/synaptic.html\" in the Tor Browser",
            "line": 60,
            "match": {
              "location": "features/step_definitions/browser.rb:210"
            },
            "result": {
              "status": "passed",
              "duration": 4974434243
            }
          },
          {
            "keyword": "Then ",
            "name": "I do not see \"TorBrowserSynapticManual.png\" after at most 5 seconds",
            "line": 61,
            "match": {
              "location": "features/step_definitions/common_steps.rb:798"
            },
            "result": {
              "status": "passed",
              "duration": 490000687
            }
          },
          {
            "keyword": "When ",
            "name": "I open the address \"file:///live/overlay/rw/home/amnesia/.gnupg/synaptic.html\" in the Tor Browser",
            "line": 62,
            "match": {
              "location": "features/step_definitions/browser.rb:210"
            },
            "result": {
              "status": "passed",
              "duration": 4647547072
            }
          },
          {
            "keyword": "Then ",
            "name": "I do not see \"TorBrowserSynapticManual.png\" after at most 5 seconds",
            "line": 63,
            "match": {
              "location": "features/step_definitions/common_steps.rb:798"
            },
            "result": {
              "status": "passed",
              "duration": 520485654
            }
          },
          {
            "keyword": "When ",
            "name": "I open the address \"file:///tmp/synaptic.html\" in the Tor Browser",
            "line": 64,
            "match": {
              "location": "features/step_definitions/browser.rb:210"
            },
            "result": {
              "status": "passed",
              "duration": 4510127811
            }
          },
          {
            "keyword": "Then ",
            "name": "I do not see \"TorBrowserSynapticManual.png\" after at most 5 seconds",
            "line": 65,
            "match": {
              "location": "features/step_definitions/common_steps.rb:798"
            },
            "result": {
              "status": "passed",
              "duration": 379686398
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:335"
            },
            "result": {
              "status": "passed",
              "duration": 976424073
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:104"
            },
            "result": {
              "status": "passed",
              "duration": 29285
            }
          }
        ]
      },
      {
        "id": "browsing-the-web-using-the-tor-browser;the-tor-browser-uses-tbb's-shared-libraries",
        "keyword": "Scenario",
        "name": "The Tor Browser uses TBB's shared libraries",
        "description": "",
        "line": 67,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:270"
            },
            "result": {
              "status": "passed",
              "duration": 30166
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:277"
            },
            "result": {
              "status": "passed",
              "duration": 9934175
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails from DVD and logged in and the network is connected",
            "line": 68,
            "match": {
              "location": "features/step_definitions/snapshots.rb:172"
            },
            "result": {
              "status": "passed",
              "duration": 10470846178
            }
          },
          {
            "keyword": "When ",
            "name": "I start the Tor Browser",
            "line": 69,
            "match": {
              "location": "features/step_definitions/browser.rb:492"
            },
            "result": {
              "status": "passed",
              "duration": 8595112080
            }
          },
          {
            "keyword": "Then ",
            "name": "the Tor Browser uses all expected TBB shared libraries",
            "line": 70,
            "match": {
              "location": "features/step_definitions/browser.rb:306"
            },
            "result": {
              "status": "passed",
              "duration": 865814088
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:335"
            },
            "result": {
              "status": "passed",
              "duration": 839780909
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:104"
            },
            "result": {
              "status": "passed",
              "duration": 21089
            }
          }
        ]
      },
      {
        "id": "browsing-the-web-using-the-tor-browser;the-tor-browser's-\"new-identity\"-feature-works-as-expected",
        "keyword": "Scenario",
        "name": "The Tor Browser's \"New identity\" feature works as expected",
        "description": "",
        "line": 73,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          },
          {
            "name": "@check_tor_leaks",
            "line": 72
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:270"
            },
            "result": {
              "status": "passed",
              "duration": 11871
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:277"
            },
            "result": {
              "status": "passed",
              "duration": 7079421
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:523"
            },
            "result": {
              "status": "passed",
              "duration": 4619672
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails from DVD and logged in and the network is connected",
            "line": 74,
            "match": {
              "location": "features/step_definitions/snapshots.rb:172"
            },
            "result": {
              "status": "passed",
              "duration": 10497098984
            }
          },
          {
            "keyword": "When ",
            "name": "I start the Tor Browser",
            "line": 75,
            "match": {
              "location": "features/step_definitions/browser.rb:492"
            },
            "result": {
              "status": "passed",
              "duration": 8405826703
            }
          },
          {
            "keyword": "When ",
            "name": "I open the address \"https://example.com/\" in the Tor Browser",
            "line": 76,
            "match": {
              "location": "features/step_definitions/browser.rb:210"
            },
            "result": {
              "status": "passed",
              "duration": 7099271809
            }
          },
          {
            "keyword": "Then ",
            "name": "Tor Browser displays a \"Example Domain\" heading on the \"Example Domain\" page",
            "line": 77,
            "match": {
              "location": "features/step_definitions/browser.rb:388"
            },
            "result": {
              "status": "passed",
              "duration": 146136593
            }
          },
          {
            "keyword": "And ",
            "name": "the Tor Browser has 2 tabs open",
            "line": 78,
            "match": {
              "location": "features/step_definitions/browser.rb:670"
            },
            "result": {
              "status": "passed",
              "duration": 63445891
            }
          },
          {
            "keyword": "When ",
            "name": "I request a new identity in Tor Browser",
            "line": 79,
            "match": {
              "location": "features/step_definitions/browser.rb:664"
            },
            "result": {
              "status": "passed",
              "duration": 3176179645
            }
          },
          {
            "keyword": "Then ",
            "name": "the Tor Browser loads about:tor",
            "line": 80,
            "match": {
              "location": "features/step_definitions/browser.rb:521"
            },
            "result": {
              "status": "passed",
              "duration": 2225998232
            }
          },
          {
            "keyword": "And ",
            "name": "the Tor Browser has 1 tab open",
            "line": 81,
            "match": {
              "location": "features/step_definitions/browser.rb:670"
            },
            "result": {
              "status": "passed",
              "duration": 112394543
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:531"
            },
            "result": {
              "status": "passed",
              "duration": 266173217
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:335"
            },
            "result": {
              "status": "passed",
              "duration": 1556969629
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:104"
            },
            "result": {
              "status": "passed",
              "duration": 119280
            }
          }
        ]
      },
      {
        "id": "browsing-the-web-using-the-tor-browser;the-tor-browser's-circuit-view-feature-works-as-expected",
        "keyword": "Scenario",
        "name": "The Tor Browser's circuit view feature works as expected",
        "description": "",
        "line": 86,
        "type": "scenario",
        "comments": [
          {
            "value": "# If you think that the \"the Tor Browser loads the Tails homepage\" implies @doc, think",
            "line": 83
          },
          {
            "value": "# again: it depends on reaching the public website, not on using the copy of the",
            "line": 84
          },
          {
            "value": "# website which is bundled in.",
            "line": 85
          }
        ],
        "tags": [
          {
            "name": "@product",
            "line": 1
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:270"
            },
            "result": {
              "status": "passed",
              "duration": 18715
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:277"
            },
            "result": {
              "status": "passed",
              "duration": 13225339
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails from DVD and logged in and the network is connected",
            "line": 87,
            "match": {
              "location": "features/step_definitions/snapshots.rb:172"
            },
            "result": {
              "status": "passed",
              "duration": 10507948173
            }
          },
          {
            "keyword": "When ",
            "name": "I start the Tor Browser",
            "line": 88,
            "match": {
              "location": "features/step_definitions/browser.rb:492"
            },
            "result": {
              "status": "passed",
              "duration": 9555443641
            }
          },
          {
            "keyword": "And ",
            "name": "I open the Tails homepage in the Tor Browser",
            "line": 89,
            "match": {
              "location": "features/step_definitions/browser.rb:364"
            },
            "result": {
              "status": "passed",
              "duration": 10576878680
            }
          },
          {
            "keyword": "Then ",
            "name": "the Tor Browser loads the Tails homepage",
            "line": 90,
            "match": {
              "location": "features/step_definitions/browser.rb:601"
            },
            "result": {
              "status": "passed",
              "duration": 308484328
            }
          },
          {
            "keyword": "And ",
            "name": "Tor Browser's circuit view is working",
            "line": 91,
            "match": {
              "location": "features/step_definitions/browser.rb:482"
            },
            "result": {
              "status": "passed",
              "duration": 1600760320
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:335"
            },
            "result": {
              "status": "passed",
              "duration": 1398007814
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:104"
            },
            "result": {
              "status": "passed",
              "duration": 63839
            }
          }
        ]
      },
      {
        "id": "browsing-the-web-using-the-tor-browser;webrtc-is-disabled-in-tor-browser",
        "keyword": "Scenario",
        "name": "WebRTC is disabled in Tor Browser",
        "description": "",
        "line": 93,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:270"
            },
            "result": {
              "status": "passed",
              "duration": 17663
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:277"
            },
            "result": {
              "status": "passed",
              "duration": 12772026
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails from DVD and logged in and the network is connected",
            "line": 94,
            "match": {
              "location": "features/step_definitions/snapshots.rb:172"
            },
            "result": {
              "status": "passed",
              "duration": 10736552891
            }
          },
          {
            "keyword": "When ",
            "name": "I start the Tor Browser",
            "line": 95,
            "match": {
              "location": "features/step_definitions/browser.rb:492"
            },
            "result": {
              "status": "passed",
              "duration": 8998535451
            }
          },
          {
            "keyword": "When ",
            "name": "I open the address \"https://net.ipcalf.com/\" in the Tor Browser",
            "line": 96,
            "match": {
              "location": "features/step_definitions/browser.rb:210"
            },
            "result": {
              "status": "passed",
              "duration": 7807357572
            }
          },
          {
            "keyword": "Then ",
            "name": "Tor Browser displays a 'ifconfig | grep inet | grep -v inet6 | cut -d\" \" -f2 | tail -n1' heading on the \"Network IP Address via ipcalf.com\" page",
            "line": 97,
            "match": {
              "location": "features/step_definitions/browser.rb:394"
            },
            "result": {
              "status": "passed",
              "duration": 146624127
            }
          },
          {
            "keyword": "When ",
            "name": "I open the address \"https://mozilla.github.io/webrtc-landing/pc_test.html\" in the Tor Browser",
            "line": 98,
            "match": {
              "location": "features/step_definitions/browser.rb:210"
            },
            "result": {
              "status": "passed",
              "duration": 7107340686
            }
          },
          {
            "keyword": "Then ",
            "name": "Tor Browser displays a \"RTCPeerConnection is missing!\" heading on the \"Simple RTCPeerConnection Video Test\" page",
            "line": 99,
            "match": {
              "location": "features/step_definitions/browser.rb:388"
            },
            "result": {
              "status": "passed",
              "duration": 172309241
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:335"
            },
            "result": {
              "status": "passed",
              "duration": 865822807
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:104"
            },
            "result": {
              "status": "passed",
              "duration": 38271
            }
          }
        ]
      },
      {
        "id": "browsing-the-web-using-the-tor-browser;the-persistent-directory-is-usable-in-tor-browser",
        "keyword": "Scenario",
        "name": "The Persistent directory is usable in Tor Browser",
        "description": "",
        "line": 101,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:270"
            },
            "result": {
              "status": "passed",
              "duration": 18766
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:277"
            },
            "result": {
              "status": "passed",
              "duration": 20372745
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails without network from a USB drive with a persistent partition enabled and logged in",
            "line": 102,
            "match": {
              "location": "features/step_definitions/snapshots.rb:172"
            },
            "result": {
              "status": "passed",
              "duration": 9478016886
            }
          },
          {
            "keyword": "And ",
            "name": "the network is plugged",
            "line": 103,
            "match": {
              "location": "features/step_definitions/common_steps.rb:137"
            },
            "result": {
              "status": "passed",
              "duration": 17968819
            }
          },
          {
            "keyword": "And ",
            "name": "I successfully configure Tor",
            "line": 104,
            "match": {
              "location": "features/step_definitions/common_steps.rb:675"
            },
            "result": {
              "status": "passed",
              "duration": 10337842980
            }
          },
          {
            "keyword": "And ",
            "name": "available upgrades have been checked",
            "line": 105,
            "match": {
              "location": "features/step_definitions/common_steps.rb:758"
            },
            "result": {
              "status": "passed",
              "duration": 1085175922
            }
          },
          {
            "keyword": "And ",
            "name": "all notifications have disappeared",
            "line": 106,
            "match": {
              "location": "features/step_definitions/common_steps.rb:762"
            },
            "result": {
              "status": "passed",
              "duration": 7486833128
            }
          },
          {
            "keyword": "And ",
            "name": "there is a GNOME bookmark for the Persistent directory",
            "line": 107,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1272"
            },
            "result": {
              "status": "passed",
              "duration": 15035333085
            }
          },
          {
            "keyword": "When ",
            "name": "I start the Tor Browser",
            "line": 108,
            "match": {
              "location": "features/step_definitions/browser.rb:492"
            },
            "result": {
              "status": "passed",
              "duration": 10798119213
            }
          },
          {
            "keyword": "And ",
            "name": "I download some file in the Tor Browser to the Persistent directory",
            "line": 109,
            "match": {
              "location": "features/step_definitions/browser.rb:338"
            },
            "result": {
              "status": "passed",
              "duration": 11849024634
            }
          },
          {
            "keyword": "Then ",
            "name": "the file is saved to the Persistent directory",
            "line": 110,
            "match": {
              "location": "features/step_definitions/browser.rb:359"
            },
            "result": {
              "status": "passed",
              "duration": 459845061
            }
          },
          {
            "keyword": "When ",
            "name": "I open the address \"https://tails.net/about\" in the Tor Browser",
            "line": 111,
            "match": {
              "location": "features/step_definitions/browser.rb:210"
            },
            "result": {
              "status": "passed",
              "duration": 7357582977
            }
          },
          {
            "keyword": "Then ",
            "name": "\"Tails - How Tails works\" has loaded in the Tor Browser",
            "line": 112,
            "match": {
              "location": "features/step_definitions/browser.rb:274"
            },
            "result": {
              "status": "passed",
              "duration": 477508829
            }
          },
          {
            "keyword": "And ",
            "name": "I can print the current page as \"output.pdf\" to the Persistent directory",
            "line": 113,
            "match": {
              "location": "features/step_definitions/browser.rb:638"
            },
            "result": {
              "status": "passed",
              "duration": 9150678623
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:335"
            },
            "result": {
              "status": "passed",
              "duration": 934853854
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:104"
            },
            "result": {
              "status": "passed",
              "duration": 22873
            }
          }
        ]
      },
      {
        "id": "browsing-the-web-using-the-tor-browser;the-default-xdg-directories-are-usable-in-tor-browser;;2",
        "keyword": "Scenario Outline",
        "name": "The default XDG directories are usable in Tor Browser",
        "description": "",
        "line": 123,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:270"
            },
            "result": {
              "status": "passed",
              "duration": 18825
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:277"
            },
            "result": {
              "status": "passed",
              "duration": 7401427
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails from DVD without network and logged in",
            "line": 123,
            "match": {
              "location": "features/step_definitions/snapshots.rb:172"
            },
            "result": {
              "status": "passed",
              "duration": 7249193576
            }
          },
          {
            "keyword": "Then ",
            "name": "the live user's Documents directory exists",
            "line": 123,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1268"
            },
            "result": {
              "status": "passed",
              "duration": 81932448
            }
          },
          {
            "keyword": "And ",
            "name": "there is a GNOME bookmark for the Documents directory",
            "line": 123,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1272"
            },
            "result": {
              "status": "passed",
              "duration": 15223519716
            }
          },
          {
            "keyword": "Then ",
            "name": "I start the Tor Browser in offline mode",
            "line": 123,
            "match": {
              "location": "features/step_definitions/browser.rb:492"
            },
            "result": {
              "status": "passed",
              "duration": 12190532365
            }
          },
          {
            "keyword": "And ",
            "name": "I can save the current page as \"index.html\" to the Documents GNOME bookmark",
            "line": 123,
            "match": {
              "location": "features/step_definitions/browser.rb:649"
            },
            "result": {
              "status": "passed",
              "duration": 8632001719
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:335"
            },
            "result": {
              "status": "passed",
              "duration": 1285600085
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:104"
            },
            "result": {
              "status": "passed",
              "duration": 23323
            }
          }
        ]
      },
      {
        "id": "browsing-the-web-using-the-tor-browser;the-default-xdg-directories-are-usable-in-tor-browser;;3",
        "keyword": "Scenario Outline",
        "name": "The default XDG directories are usable in Tor Browser",
        "description": "",
        "line": 124,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:270"
            },
            "result": {
              "status": "passed",
              "duration": 20659
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:277"
            },
            "result": {
              "status": "passed",
              "duration": 16564676
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails from DVD without network and logged in",
            "line": 124,
            "match": {
              "location": "features/step_definitions/snapshots.rb:172"
            },
            "result": {
              "status": "passed",
              "duration": 7241281808
            }
          },
          {
            "keyword": "Then ",
            "name": "the live user's Downloads directory exists",
            "line": 124,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1268"
            },
            "result": {
              "status": "passed",
              "duration": 42978333
            }
          },
          {
            "keyword": "And ",
            "name": "there is a GNOME bookmark for the Downloads directory",
            "line": 124,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1272"
            },
            "result": {
              "status": "passed",
              "duration": 15456936953
            }
          },
          {
            "keyword": "Then ",
            "name": "I start the Tor Browser in offline mode",
            "line": 124,
            "match": {
              "location": "features/step_definitions/browser.rb:492"
            },
            "result": {
              "status": "passed",
              "duration": 12089195374
            }
          },
          {
            "keyword": "And ",
            "name": "I can save the current page as \"index.html\" to the Downloads GNOME bookmark",
            "line": 124,
            "match": {
              "location": "features/step_definitions/browser.rb:649"
            },
            "result": {
              "status": "passed",
              "duration": 9029287920
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:335"
            },
            "result": {
              "status": "passed",
              "duration": 924531273
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:104"
            },
            "result": {
              "status": "passed",
              "duration": 20619
            }
          }
        ]
      },
      {
        "id": "browsing-the-web-using-the-tor-browser;the-default-xdg-directories-are-usable-in-tor-browser;;4",
        "keyword": "Scenario Outline",
        "name": "The default XDG directories are usable in Tor Browser",
        "description": "",
        "line": 125,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:270"
            },
            "result": {
              "status": "passed",
              "duration": 14277
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:277"
            },
            "result": {
              "status": "passed",
              "duration": 6935764
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails from DVD without network and logged in",
            "line": 125,
            "match": {
              "location": "features/step_definitions/snapshots.rb:172"
            },
            "result": {
              "status": "passed",
              "duration": 6746192710
            }
          },
          {
            "keyword": "Then ",
            "name": "the live user's Music directory exists",
            "line": 125,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1268"
            },
            "result": {
              "status": "passed",
              "duration": 44195950
            }
          },
          {
            "keyword": "And ",
            "name": "there is a GNOME bookmark for the Music directory",
            "line": 125,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1272"
            },
            "result": {
              "status": "passed",
              "duration": 15943402300
            }
          },
          {
            "keyword": "Then ",
            "name": "I start the Tor Browser in offline mode",
            "line": 125,
            "match": {
              "location": "features/step_definitions/browser.rb:492"
            },
            "result": {
              "status": "passed",
              "duration": 12009102023
            }
          },
          {
            "keyword": "And ",
            "name": "I can save the current page as \"index.html\" to the Music GNOME bookmark",
            "line": 125,
            "match": {
              "location": "features/step_definitions/browser.rb:649"
            },
            "result": {
              "status": "passed",
              "duration": 8558574705
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:335"
            },
            "result": {
              "status": "passed",
              "duration": 1021923729
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:104"
            },
            "result": {
              "status": "passed",
              "duration": 21511
            }
          }
        ]
      },
      {
        "id": "browsing-the-web-using-the-tor-browser;the-default-xdg-directories-are-usable-in-tor-browser;;5",
        "keyword": "Scenario Outline",
        "name": "The default XDG directories are usable in Tor Browser",
        "description": "",
        "line": 126,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:270"
            },
            "result": {
              "status": "passed",
              "duration": 13334
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:277"
            },
            "result": {
              "status": "passed",
              "duration": 9893809
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails from DVD without network and logged in",
            "line": 126,
            "match": {
              "location": "features/step_definitions/snapshots.rb:172"
            },
            "result": {
              "status": "passed",
              "duration": 7132332044
            }
          },
          {
            "keyword": "Then ",
            "name": "the live user's Pictures directory exists",
            "line": 126,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1268"
            },
            "result": {
              "status": "passed",
              "duration": 70852648
            }
          },
          {
            "keyword": "And ",
            "name": "there is a GNOME bookmark for the Pictures directory",
            "line": 126,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1272"
            },
            "result": {
              "status": "passed",
              "duration": 15663512174
            }
          },
          {
            "keyword": "Then ",
            "name": "I start the Tor Browser in offline mode",
            "line": 126,
            "match": {
              "location": "features/step_definitions/browser.rb:492"
            },
            "result": {
              "status": "passed",
              "duration": 11697783213
            }
          },
          {
            "keyword": "And ",
            "name": "I can save the current page as \"index.html\" to the Pictures GNOME bookmark",
            "line": 126,
            "match": {
              "location": "features/step_definitions/browser.rb:649"
            },
            "result": {
              "status": "passed",
              "duration": 8630856949
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:335"
            },
            "result": {
              "status": "passed",
              "duration": 822822341
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:104"
            },
            "result": {
              "status": "passed",
              "duration": 21873
            }
          }
        ]
      },
      {
        "id": "browsing-the-web-using-the-tor-browser;the-default-xdg-directories-are-usable-in-tor-browser;;6",
        "keyword": "Scenario Outline",
        "name": "The default XDG directories are usable in Tor Browser",
        "description": "",
        "line": 127,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:270"
            },
            "result": {
              "status": "passed",
              "duration": 12254
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:277"
            },
            "result": {
              "status": "passed",
              "duration": 5173685
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails from DVD without network and logged in",
            "line": 127,
            "match": {
              "location": "features/step_definitions/snapshots.rb:172"
            },
            "result": {
              "status": "passed",
              "duration": 7578615316
            }
          },
          {
            "keyword": "Then ",
            "name": "the live user's Videos directory exists",
            "line": 127,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1268"
            },
            "result": {
              "status": "passed",
              "duration": 50609073
            }
          },
          {
            "keyword": "And ",
            "name": "there is a GNOME bookmark for the Videos directory",
            "line": 127,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1272"
            },
            "result": {
              "status": "passed",
              "duration": 15240136582
            }
          },
          {
            "keyword": "Then ",
            "name": "I start the Tor Browser in offline mode",
            "line": 127,
            "match": {
              "location": "features/step_definitions/browser.rb:492"
            },
            "result": {
              "status": "passed",
              "duration": 11632966660
            }
          },
          {
            "keyword": "And ",
            "name": "I can save the current page as \"index.html\" to the Videos GNOME bookmark",
            "line": 127,
            "match": {
              "location": "features/step_definitions/browser.rb:649"
            },
            "result": {
              "status": "passed",
              "duration": 8801655631
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:335"
            },
            "result": {
              "status": "passed",
              "duration": 1130159722
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:104"
            },
            "result": {
              "status": "passed",
              "duration": 22942
            }
          }
        ]
      },
      {
        "id": "browsing-the-web-using-the-tor-browser;persistent-browser-bookmarks",
        "keyword": "Scenario",
        "name": "Persistent browser bookmarks",
        "description": "",
        "line": 129,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:270"
            },
            "result": {
              "status": "passed",
              "duration": 13865
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:277"
            },
            "result": {
              "status": "passed",
              "duration": 7787796
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails without network from a USB drive with a persistent partition enabled and logged in",
            "line": 130,
            "match": {
              "location": "features/step_definitions/snapshots.rb:172"
            },
            "result": {
              "status": "passed",
              "duration": 7896633353
            }
          },
          {
            "keyword": "And ",
            "name": "all tps features are active",
            "line": 131,
            "match": {
              "location": "features/step_definitions/usb.rb:778"
            },
            "result": {
              "status": "passed",
              "duration": 1303609939
            }
          },
          {
            "keyword": "And ",
            "name": "all persistent filesystems have safe access rights",
            "line": 132,
            "match": {
              "location": "features/step_definitions/usb.rb:992"
            },
            "result": {
              "status": "passed",
              "duration": 196922866
            }
          },
          {
            "keyword": "And ",
            "name": "all persistence configuration files have safe access rights",
            "line": 133,
            "match": {
              "location": "features/step_definitions/usb.rb:1009"
            },
            "result": {
              "status": "passed",
              "duration": 301069592
            }
          },
          {
            "keyword": "And ",
            "name": "all persistent directories have safe access rights",
            "line": 134,
            "match": {
              "location": "features/step_definitions/usb.rb:1037"
            },
            "result": {
              "status": "passed",
              "duration": 2381845279
            }
          },
          {
            "keyword": "When ",
            "name": "I start the Tor Browser in offline mode",
            "line": 135,
            "match": {
              "location": "features/step_definitions/browser.rb:492"
            },
            "result": {
              "status": "passed",
              "duration": 14548077629
            }
          },
          {
            "keyword": "And ",
            "name": "I add a bookmark to eff.org in the Tor Browser",
            "line": 136,
            "match": {
              "location": "features/step_definitions/browser.rb:621"
            },
            "result": {
              "status": "passed",
              "duration": 8773609113
            }
          },
          {
            "keyword": "And ",
            "name": "I cold reboot the computer",
            "line": 137,
            "match": {
              "location": "features/step_definitions/common_steps.rb:279"
            },
            "result": {
              "status": "passed",
              "duration": 7324083759
            }
          },
          {
            "keyword": "And ",
            "name": "the computer reboots Tails",
            "line": 138,
            "match": {
              "location": "features/step_definitions/common_steps.rb:402"
            },
            "result": {
              "status": "passed",
              "duration": 42605785757
            }
          },
          {
            "keyword": "And ",
            "name": "I enable persistence",
            "line": 139,
            "match": {
              "location": "features/step_definitions/usb.rb:721"
            },
            "result": {
              "status": "passed",
              "duration": 7774578312
            }
          },
          {
            "keyword": "And ",
            "name": "I log in to a new session",
            "line": 140,
            "match": {
              "location": "features/step_definitions/common_steps.rb:514"
            },
            "result": {
              "status": "passed",
              "duration": 12974806637
            }
          },
          {
            "keyword": "And ",
            "name": "all notifications have disappeared",
            "line": 141,
            "match": {
              "location": "features/step_definitions/common_steps.rb:762"
            },
            "result": {
              "status": "passed",
              "duration": 8064434099
            }
          },
          {
            "keyword": "And ",
            "name": "I start the Tor Browser in offline mode",
            "line": 142,
            "match": {
              "location": "features/step_definitions/browser.rb:492"
            },
            "result": {
              "status": "passed",
              "duration": 10473490212
            }
          },
          {
            "keyword": "Then ",
            "name": "the Tor Browser has a bookmark to eff.org",
            "line": 143,
            "match": {
              "location": "features/step_definitions/browser.rb:633"
            },
            "result": {
              "status": "passed",
              "duration": 739656058
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:335"
            },
            "result": {
              "status": "passed",
              "duration": 1100727361
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:104"
            },
            "result": {
              "status": "passed",
              "duration": 13099479
            }
          }
        ]
      }
    ]
  },
  {
    "uri": "features/torified_git.feature",
    "id": "cloning-a-git-repository",
    "keyword": "Feature",
    "name": "Cloning a Git repository",
    "description": "  As a Tails user\n  when I clone a Git repository\n  all Internet traffic should flow only through Tor",
    "line": 2,
    "tags": [
      {
        "name": "@product",
        "line": 1
      },
      {
        "name": "@check_tor_leaks",
        "line": 1
      }
    ],
    "elements": [
      {
        "keyword": "Background",
        "name": "",
        "description": "",
        "line": 7,
        "type": "background",
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:270"
            },
            "result": {
              "status": "passed",
              "duration": 19888
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:277"
            },
            "result": {
              "status": "passed",
              "duration": 8444552
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:523"
            },
            "result": {
              "status": "passed",
              "duration": 9939875
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails from DVD and logged in and the network is connected",
            "line": 8,
            "match": {
              "location": "features/step_definitions/snapshots.rb:172"
            },
            "result": {
              "status": "passed",
              "duration": 10360967330
            }
          }
        ]
      },
      {
        "id": "cloning-a-git-repository;cloning-a-git-repository-anonymously-over-https",
        "keyword": "Scenario",
        "name": "Cloning a Git repository anonymously over HTTPS",
        "description": "",
        "line": 10,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          },
          {
            "name": "@check_tor_leaks",
            "line": 1
          }
        ],
        "steps": [
          {
            "keyword": "When ",
            "name": "I clone the Git repository \"https://github.com/intrigeri/Dist-Zilla-Plugin-LocaleMsgfmt.git\" in Console",
            "line": 11,
            "match": {
              "location": "features/step_definitions/git.rb:1"
            },
            "result": {
              "status": "passed",
              "duration": 5910918286
            }
          },
          {
            "keyword": "Then ",
            "name": "the Git repository \"Dist-Zilla-Plugin-LocaleMsgfmt\" has been cloned successfully",
            "line": 12,
            "match": {
              "location": "features/step_definitions/git.rb:26"
            },
            "result": {
              "status": "passed",
              "duration": 203312117
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:531"
            },
            "result": {
              "status": "passed",
              "duration": 200866831
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:335"
            },
            "result": {
              "status": "passed",
              "duration": 592966123
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:104"
            },
            "result": {
              "status": "passed",
              "duration": 79911
            }
          }
        ]
      },
      {
        "keyword": "Background",
        "name": "",
        "description": "",
        "line": 7,
        "type": "background",
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:270"
            },
            "result": {
              "status": "passed",
              "duration": 12193
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:277"
            },
            "result": {
              "status": "passed",
              "duration": 8338965
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:523"
            },
            "result": {
              "status": "passed",
              "duration": 9162408
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails from DVD and logged in and the network is connected",
            "line": 8,
            "match": {
              "location": "features/step_definitions/snapshots.rb:172"
            },
            "result": {
              "status": "passed",
              "duration": 10497294516
            }
          }
        ]
      },
      {
        "id": "cloning-a-git-repository;cloning-git-repository-over-ssh",
        "keyword": "Scenario",
        "name": "Cloning git repository over SSH",
        "description": "",
        "line": 14,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          },
          {
            "name": "@check_tor_leaks",
            "line": 1
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have the SSH key pair for a Git repository",
            "line": 15,
            "match": {
              "location": "features/step_definitions/ssh.rb:37"
            },
            "result": {
              "status": "passed",
              "duration": 157978822
            }
          },
          {
            "keyword": "When ",
            "name": "I clone the Git repository \"ssh://gitolite3@lizard.tails.boum.org:3004/myprivatekeyispublic/testing.git\" in Console",
            "line": 16,
            "match": {
              "location": "features/step_definitions/git.rb:1"
            },
            "result": {
              "status": "passed",
              "duration": 10034478875
            }
          },
          {
            "keyword": "Then ",
            "name": "the Git repository \"testing\" has been cloned successfully",
            "line": 17,
            "match": {
              "location": "features/step_definitions/git.rb:26"
            },
            "result": {
              "status": "passed",
              "duration": 284827164
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:531"
            },
            "result": {
              "status": "passed",
              "duration": 250485163
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:335"
            },
            "result": {
              "status": "passed",
              "duration": 971104228
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:104"
            },
            "result": {
              "status": "passed",
              "duration": 72133
            }
          }
        ]
      }
    ]
  },
  {
    "uri": "features/torified_misc.feature",
    "id": "various-checks-for-torified-software",
    "keyword": "Feature",
    "name": "Various checks for torified software",
    "description": "",
    "line": 2,
    "tags": [
      {
        "name": "@product",
        "line": 1
      },
      {
        "name": "@check_tor_leaks",
        "line": 1
      }
    ],
    "elements": [
      {
        "keyword": "Background",
        "name": "",
        "description": "",
        "line": 4,
        "type": "background",
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:270"
            },
            "result": {
              "status": "passed",
              "duration": 12793
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:277"
            },
            "result": {
              "status": "passed",
              "duration": 7540744
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:523"
            },
            "result": {
              "status": "passed",
              "duration": 5404284
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails from DVD and logged in and the network is connected",
            "line": 5,
            "match": {
              "location": "features/step_definitions/snapshots.rb:172"
            },
            "result": {
              "status": "passed",
              "duration": 10240180624
            }
          }
        ]
      },
      {
        "id": "various-checks-for-torified-software;wget(1)-should-work-for-https-and-go-through-tor",
        "keyword": "Scenario",
        "name": "wget(1) should work for HTTPS and go through Tor",
        "description": "",
        "line": 7,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          },
          {
            "name": "@check_tor_leaks",
            "line": 1
          }
        ],
        "steps": [
          {
            "keyword": "When ",
            "name": "I wget \"https://example.com/\" to stdout",
            "line": 8,
            "match": {
              "location": "features/step_definitions/torified_misc.rb:3"
            },
            "result": {
              "status": "passed",
              "duration": 407150654
            }
          },
          {
            "keyword": "Then ",
            "name": "the wget command is successful",
            "line": 9,
            "match": {
              "location": "features/step_definitions/torified_misc.rb:19"
            },
            "result": {
              "status": "passed",
              "duration": 232396
            }
          },
          {
            "keyword": "And ",
            "name": "the wget standard output contains \"Example Domain\"",
            "line": 10,
            "match": {
              "location": "features/step_definitions/torified_misc.rb:28"
            },
            "result": {
              "status": "passed",
              "duration": 138451
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:531"
            },
            "result": {
              "status": "passed",
              "duration": 203407481
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:335"
            },
            "result": {
              "status": "passed",
              "duration": 986602540
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:104"
            },
            "result": {
              "status": "passed",
              "duration": 168945
            }
          }
        ]
      },
      {
        "keyword": "Background",
        "name": "",
        "description": "",
        "line": 4,
        "type": "background",
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:270"
            },
            "result": {
              "status": "passed",
              "duration": 33472
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:277"
            },
            "result": {
              "status": "passed",
              "duration": 10941012
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:523"
            },
            "result": {
              "status": "passed",
              "duration": 9776730
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails from DVD and logged in and the network is connected",
            "line": 5,
            "match": {
              "location": "features/step_definitions/snapshots.rb:172"
            },
            "result": {
              "status": "passed",
              "duration": 10679882735
            }
          }
        ]
      },
      {
        "id": "various-checks-for-torified-software;curl-should-work-for-https-and-go-through-tor",
        "keyword": "Scenario",
        "name": "curl should work for HTTPS and go through Tor",
        "description": "",
        "line": 12,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          },
          {
            "name": "@check_tor_leaks",
            "line": 1
          }
        ],
        "steps": [
          {
            "keyword": "When ",
            "name": "I curl \"https://example.com/\" to stdout",
            "line": 13,
            "match": {
              "location": "features/step_definitions/torified_misc.rb:3"
            },
            "result": {
              "status": "passed",
              "duration": 142760922
            }
          },
          {
            "keyword": "Then ",
            "name": "the curl command is successful",
            "line": 14,
            "match": {
              "location": "features/step_definitions/torified_misc.rb:19"
            },
            "result": {
              "status": "passed",
              "duration": 41668
            }
          },
          {
            "keyword": "And ",
            "name": "the curl standard output contains \"Example Domain\"",
            "line": 15,
            "match": {
              "location": "features/step_definitions/torified_misc.rb:28"
            },
            "result": {
              "status": "passed",
              "duration": 15699
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:531"
            },
            "result": {
              "status": "passed",
              "duration": 174276228
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:335"
            },
            "result": {
              "status": "passed",
              "duration": 711119397
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:104"
            },
            "result": {
              "status": "passed",
              "duration": 102512
            }
          }
        ]
      }
    ]
  },
  {
    "uri": "features/totem.feature",
    "id": "using-totem",
    "keyword": "Feature",
    "name": "Using Totem",
    "description": "  As a Tails user\n  I want to watch local and remote videos in Totem\n  And all Internet traffic should flow only through Tor",
    "line": 2,
    "tags": [
      {
        "name": "@product",
        "line": 1
      }
    ],
    "elements": [
      {
        "keyword": "Background",
        "name": "",
        "description": "",
        "line": 7,
        "type": "background",
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:270"
            },
            "result": {
              "status": "passed",
              "duration": 15939
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:277"
            },
            "result": {
              "status": "passed",
              "duration": 10286986
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I create sample videos",
            "line": 8,
            "match": {
              "location": "features/step_definitions/totem.rb:4"
            },
            "result": {
              "status": "passed",
              "duration": 206146188
            }
          }
        ]
      },
      {
        "id": "using-totem;watching-a-mp4-video-stored-on-the-non-persistent-filesystem",
        "keyword": "Scenario",
        "name": "Watching a MP4 video stored on the non-persistent filesystem",
        "description": "",
        "line": 10,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails from DVD without network and logged in",
            "line": 11,
            "match": {
              "location": "features/step_definitions/snapshots.rb:172"
            },
            "result": {
              "status": "passed",
              "duration": 7900430424
            }
          },
          {
            "keyword": "And ",
            "name": "I plug and mount a USB drive containing sample videos",
            "line": 12,
            "match": {
              "location": "features/step_definitions/totem.rb:15"
            },
            "result": {
              "status": "passed",
              "duration": 8546469765
            }
          },
          {
            "keyword": "And ",
            "name": "I copy the sample videos to \"/home/amnesia\" as user \"amnesia\"",
            "line": 13,
            "match": {
              "location": "features/step_definitions/totem.rb:21"
            },
            "result": {
              "status": "passed",
              "duration": 53462283
            }
          },
          {
            "keyword": "And ",
            "name": "the file \"/home/amnesia/video.mp4\" exists",
            "line": 14,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1007"
            },
            "result": {
              "status": "passed",
              "duration": 41290151
            }
          },
          {
            "keyword": "When ",
            "name": "I open \"/home/amnesia/video.mp4\" with Totem",
            "line": 15,
            "match": {
              "location": "features/step_definitions/totem.rb:30"
            },
            "result": {
              "status": "passed",
              "duration": 4060455617
            }
          },
          {
            "keyword": "Then ",
            "name": "I see \"SampleLocalMp4VideoFrame.png\" after at most 40 seconds",
            "line": 16,
            "match": {
              "location": "features/step_definitions/common_steps.rb:798"
            },
            "result": {
              "status": "passed",
              "duration": 2084018992
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:335"
            },
            "result": {
              "status": "passed",
              "duration": 1012856764
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:104"
            },
            "result": {
              "status": "passed",
              "duration": 667472
            }
          }
        ]
      },
      {
        "keyword": "Background",
        "name": "",
        "description": "",
        "line": 7,
        "type": "background",
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:270"
            },
            "result": {
              "status": "passed",
              "duration": 17483
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:277"
            },
            "result": {
              "status": "passed",
              "duration": 7520780
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:523"
            },
            "result": {
              "status": "passed",
              "duration": 4437370
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I create sample videos",
            "line": 8,
            "match": {
              "location": "features/step_definitions/totem.rb:4"
            },
            "result": {
              "status": "passed",
              "duration": 134015957
            }
          }
        ]
      },
      {
        "id": "using-totem;watching-a-webm-video-over-https",
        "keyword": "Scenario",
        "name": "Watching a WebM video over HTTPS",
        "description": "",
        "line": 19,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          },
          {
            "name": "@check_tor_leaks",
            "line": 18
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails from DVD and logged in and the network is connected",
            "line": 20,
            "match": {
              "location": "features/step_definitions/snapshots.rb:172"
            },
            "result": {
              "status": "passed",
              "duration": 10953225900
            }
          },
          {
            "keyword": "Then ",
            "name": "I can watch a WebM video over HTTPs",
            "line": 21,
            "match": {
              "location": "features/step_definitions/totem.rb:38"
            },
            "result": {
              "status": "passed",
              "duration": 9514271524
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:531"
            },
            "result": {
              "status": "passed",
              "duration": 304818989
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:335"
            },
            "result": {
              "status": "passed",
              "duration": 1506918020
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:104"
            },
            "result": {
              "status": "passed",
              "duration": 528553
            }
          }
        ]
      },
      {
        "keyword": "Background",
        "name": "",
        "description": "",
        "line": 7,
        "type": "background",
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:270"
            },
            "result": {
              "status": "passed",
              "duration": 18814
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:277"
            },
            "result": {
              "status": "passed",
              "duration": 13610312
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I create sample videos",
            "line": 8,
            "match": {
              "location": "features/step_definitions/totem.rb:4"
            },
            "result": {
              "status": "passed",
              "duration": 243357064
            }
          }
        ]
      },
      {
        "id": "using-totem;watching-mp4-videos-stored-in-the-persistent-storage",
        "keyword": "Scenario",
        "name": "Watching MP4 videos stored in the Persistent Storage",
        "description": "",
        "line": 23,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails without network from a USB drive with a persistent partition enabled and logged in",
            "line": 24,
            "match": {
              "location": "features/step_definitions/snapshots.rb:172"
            },
            "result": {
              "status": "passed",
              "duration": 8250777643
            }
          },
          {
            "keyword": "And ",
            "name": "I plug and mount a USB drive containing sample videos",
            "line": 25,
            "match": {
              "location": "features/step_definitions/totem.rb:15"
            },
            "result": {
              "status": "passed",
              "duration": 8151912362
            }
          },
          {
            "keyword": "And ",
            "name": "I copy the sample videos to \"/home/amnesia/Persistent\" as user \"amnesia\"",
            "line": 26,
            "match": {
              "location": "features/step_definitions/totem.rb:21"
            },
            "result": {
              "status": "passed",
              "duration": 52043776
            }
          },
          {
            "keyword": "When ",
            "name": "I open \"/home/amnesia/Persistent/video.mp4\" with Totem",
            "line": 27,
            "match": {
              "location": "features/step_definitions/totem.rb:30"
            },
            "result": {
              "status": "passed",
              "duration": 4401104011
            }
          },
          {
            "keyword": "Then ",
            "name": "I see \"SampleLocalMp4VideoFrame.png\" after at most 40 seconds",
            "line": 28,
            "match": {
              "location": "features/step_definitions/common_steps.rb:798"
            },
            "result": {
              "status": "passed",
              "duration": 1897184067
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:335"
            },
            "result": {
              "status": "passed",
              "duration": 887893302
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:104"
            },
            "result": {
              "status": "passed",
              "duration": 658115
            }
          }
        ]
      }
    ]
  },
  {
    "uri": "features/uefi_ca.feature",
    "id": "user-gets-actionable-info-about-uefi-ca-expiry",
    "keyword": "Feature",
    "name": "User gets actionable info about UEFI CA expiry",
    "description": "  As a Tails user\n  When I'm using a computer which has Secure Boot, but doesn't have the Microsoft 2023 CA\n  Then I get a notification telling me what to do",
    "line": 2,
    "tags": [
      {
        "name": "@product",
        "line": 1
      }
    ],
    "elements": [
      {
        "id": "user-gets-actionable-info-about-uefi-ca-expiry;i-am-warned-about-uefi-ca-expiry",
        "keyword": "Scenario",
        "name": "I am warned about UEFI CA expiry",
        "description": "",
        "line": 7,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:270"
            },
            "result": {
              "status": "passed",
              "duration": 15038
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:277"
            },
            "result": {
              "status": "passed",
              "duration": 6580076
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails from DVD without network and stopped at Tails Greeter's login screen",
            "line": 8,
            "match": {
              "location": "features/step_definitions/snapshots.rb:172"
            },
            "result": {
              "status": "passed",
              "duration": 9405021871
            }
          },
          {
            "keyword": "And ",
            "name": "I simulate a computer with old UEFI CA",
            "line": 9,
            "match": {
              "location": "features/step_definitions/hardware.rb:136"
            },
            "result": {
              "status": "passed",
              "duration": 11968396
            }
          },
          {
            "keyword": "And ",
            "name": "I log in to a new session",
            "line": 10,
            "match": {
              "location": "features/step_definitions/common_steps.rb:514"
            },
            "result": {
              "status": "passed",
              "duration": 14611204104
            }
          },
          {
            "keyword": "And ",
            "name": "all notifications have disappeared",
            "line": 11,
            "match": {
              "location": "features/step_definitions/common_steps.rb:762"
            },
            "result": {
              "status": "passed",
              "duration": 7727163181
            }
          },
          {
            "keyword": "And ",
            "name": "I unblock tails-uefi-ca-notify",
            "line": 12,
            "match": {
              "location": "features/step_definitions/hardware.rb:152"
            },
            "result": {
              "status": "passed",
              "duration": 43134440
            }
          },
          {
            "keyword": "Then ",
            "name": "I see the \"Secure Boot Update Needed\" notification after at most 20 seconds",
            "line": 13,
            "match": {
              "location": "features/step_definitions/common_steps.rb:629"
            },
            "result": {
              "status": "passed",
              "duration": 1235468920
            }
          },
          {
            "keyword": "And ",
            "name": "I can open the Secure Boot documentation from the notification",
            "line": 14,
            "match": {
              "location": "features/step_definitions/additional_software_packages.rb:134"
            },
            "result": {
              "status": "passed",
              "duration": 14514950642
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:335"
            },
            "result": {
              "status": "passed",
              "duration": 1505502760
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:104"
            },
            "result": {
              "status": "passed",
              "duration": 21080
            }
          }
        ]
      },
      {
        "id": "user-gets-actionable-info-about-uefi-ca-expiry;i-am-not-warned-if-the-uefi-ca-is-up-to-date",
        "keyword": "Scenario",
        "name": "I am not warned if the UEFI CA is up-to-date",
        "description": "",
        "line": 16,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:270"
            },
            "result": {
              "status": "passed",
              "duration": 18064
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:277"
            },
            "result": {
              "status": "passed",
              "duration": 8833572
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails from DVD without network and stopped at Tails Greeter's login screen",
            "line": 17,
            "match": {
              "location": "features/step_definitions/snapshots.rb:172"
            },
            "result": {
              "status": "passed",
              "duration": 7836996542
            }
          },
          {
            "keyword": "And ",
            "name": "I simulate a computer with new UEFI CA",
            "line": 18,
            "match": {
              "location": "features/step_definitions/hardware.rb:136"
            },
            "result": {
              "status": "passed",
              "duration": 21839885
            }
          },
          {
            "keyword": "And ",
            "name": "I log in to a new session",
            "line": 19,
            "match": {
              "location": "features/step_definitions/common_steps.rb:514"
            },
            "result": {
              "status": "passed",
              "duration": 13556376673
            }
          },
          {
            "keyword": "And ",
            "name": "all notifications have disappeared",
            "line": 20,
            "match": {
              "location": "features/step_definitions/common_steps.rb:762"
            },
            "result": {
              "status": "passed",
              "duration": 8125961421
            }
          },
          {
            "keyword": "And ",
            "name": "I unblock tails-uefi-ca-notify",
            "line": 21,
            "match": {
              "location": "features/step_definitions/hardware.rb:152"
            },
            "result": {
              "status": "passed",
              "duration": 47977982
            }
          },
          {
            "keyword": "Then ",
            "name": "I wait until amnesia's tails-uefi-ca-notify-user.service has completed",
            "line": 22,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1922"
            },
            "result": {
              "status": "passed",
              "duration": 1136299549
            }
          },
          {
            "keyword": "And ",
            "name": "I don't see the \"Secure Boot Update Needed\" notification after at most 10 seconds",
            "line": 23,
            "match": {
              "location": "features/step_definitions/common_steps.rb:629"
            },
            "result": {
              "status": "passed",
              "duration": 10792407005
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:335"
            },
            "result": {
              "status": "passed",
              "duration": 1495342788
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:104"
            },
            "result": {
              "status": "passed",
              "duration": 20810
            }
          }
        ]
      }
    ]
  },
  {
    "uri": "features/unsafe_browser.feature",
    "id": "browsing-the-web-using-the-unsafe-browser",
    "keyword": "Feature",
    "name": "Browsing the web using the Unsafe Browser",
    "description": "  As a Tails user\n  when I browse the web using the Unsafe Browser\n  I should have direct access to the web",
    "line": 2,
    "tags": [
      {
        "name": "@product",
        "line": 1
      }
    ],
    "elements": [
      {
        "id": "browsing-the-web-using-the-unsafe-browser;the-unsafe-browser-can-be-disabled",
        "keyword": "Scenario",
        "name": "The Unsafe Browser can be disabled",
        "description": "",
        "line": 7,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:270"
            },
            "result": {
              "status": "passed",
              "duration": 12283
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:277"
            },
            "result": {
              "status": "passed",
              "duration": 8440875
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails from DVD without network and stopped at Tails Greeter's login screen",
            "line": 8,
            "match": {
              "location": "features/step_definitions/snapshots.rb:172"
            },
            "result": {
              "status": "passed",
              "duration": 7800583865
            }
          },
          {
            "keyword": "And ",
            "name": "I disable the Unsafe Browser",
            "line": 9,
            "match": {
              "location": "features/step_definitions/common_steps.rb:585"
            },
            "result": {
              "status": "passed",
              "duration": 7991969113
            }
          },
          {
            "keyword": "And ",
            "name": "I log in to a new session",
            "line": 10,
            "match": {
              "location": "features/step_definitions/common_steps.rb:514"
            },
            "result": {
              "status": "passed",
              "duration": 13655712442
            }
          },
          {
            "keyword": "And ",
            "name": "the network is plugged",
            "line": 11,
            "match": {
              "location": "features/step_definitions/common_steps.rb:137"
            },
            "result": {
              "status": "passed",
              "duration": 40263884
            }
          },
          {
            "keyword": "And ",
            "name": "all notifications have disappeared",
            "line": 12,
            "match": {
              "location": "features/step_definitions/common_steps.rb:762"
            },
            "result": {
              "status": "passed",
              "duration": 8033360950
            }
          },
          {
            "keyword": "When ",
            "name": "I try to start the Unsafe Browser",
            "line": 13,
            "match": {
              "location": "features/step_definitions/browser.rb:105"
            },
            "result": {
              "status": "passed",
              "duration": 68972962
            }
          },
          {
            "keyword": "Then ",
            "name": "the Unsafe Browser complains that it is disabled",
            "line": 14,
            "match": {
              "location": "features/step_definitions/unsafe_browser.rb:110"
            },
            "result": {
              "status": "passed",
              "duration": 1199454421
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:335"
            },
            "result": {
              "status": "passed",
              "duration": 1597623170
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:104"
            },
            "result": {
              "status": "passed",
              "duration": 24165
            }
          }
        ]
      },
      {
        "id": "browsing-the-web-using-the-unsafe-browser;the-unsafe-browser-can-access-the-lan",
        "keyword": "Scenario",
        "name": "The Unsafe Browser can access the LAN",
        "description": "",
        "line": 16,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:270"
            },
            "result": {
              "status": "passed",
              "duration": 14857
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:277"
            },
            "result": {
              "status": "passed",
              "duration": 9680930
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails from DVD and logged in and the network is connected",
            "line": 17,
            "match": {
              "location": "features/step_definitions/snapshots.rb:172"
            },
            "result": {
              "status": "passed",
              "duration": 10275847678
            }
          },
          {
            "keyword": "And ",
            "name": "a web server is running on the LAN",
            "line": 18,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1291"
            },
            "result": {
              "status": "passed",
              "duration": 1037392071
            }
          },
          {
            "keyword": "When ",
            "name": "I successfully start the Unsafe Browser",
            "line": 19,
            "match": {
              "location": "features/step_definitions/browser.rb:109"
            },
            "result": {
              "status": "passed",
              "duration": 6718273548
            }
          },
          {
            "keyword": "And ",
            "name": "I open a page on the LAN web server in the Unsafe Browser",
            "line": 20,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1360"
            },
            "result": {
              "status": "passed",
              "duration": 4755473860
            }
          },
          {
            "keyword": "Then ",
            "name": "the Unsafe Browser displays the LAN web server hello message",
            "line": 21,
            "match": {
              "location": "features/step_definitions/unsafe_browser.rb:48"
            },
            "result": {
              "status": "passed",
              "duration": 219784936
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:335"
            },
            "result": {
              "status": "passed",
              "duration": 1023241981
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:104"
            },
            "result": {
              "status": "passed",
              "duration": 1454356
            }
          }
        ]
      },
      {
        "id": "browsing-the-web-using-the-unsafe-browser;starting-the-unsafe-browser-works-as-it-should",
        "keyword": "Scenario",
        "name": "Starting the Unsafe Browser works as it should",
        "description": "",
        "line": 24,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          },
          {
            "name": "@doc",
            "line": 23
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:270"
            },
            "result": {
              "status": "passed",
              "duration": 19286
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:277"
            },
            "result": {
              "status": "passed",
              "duration": 21742212
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails from DVD and logged in and the network is connected",
            "line": 25,
            "match": {
              "location": "features/step_definitions/snapshots.rb:172"
            },
            "result": {
              "status": "passed",
              "duration": 11192117618
            }
          },
          {
            "keyword": "When ",
            "name": "I successfully start the Unsafe Browser",
            "line": 26,
            "match": {
              "location": "features/step_definitions/browser.rb:109"
            },
            "result": {
              "status": "passed",
              "duration": 6899874293
            }
          },
          {
            "keyword": "Then ",
            "name": "the Unsafe Browser runs as the expected user",
            "line": 27,
            "match": {
              "location": "features/step_definitions/browser.rb:324"
            },
            "result": {
              "status": "passed",
              "duration": 277454740
            }
          },
          {
            "keyword": "And ",
            "name": "the Unsafe Browser has a red theme",
            "line": 28,
            "match": {
              "location": "features/step_definitions/unsafe_browser.rb:44"
            },
            "result": {
              "status": "passed",
              "duration": 637112345
            }
          },
          {
            "keyword": "And ",
            "name": "the Unsafe Browser shows a warning as its start page",
            "line": 29,
            "match": {
              "location": "features/step_definitions/unsafe_browser.rb:55"
            },
            "result": {
              "status": "passed",
              "duration": 475165291
            }
          },
          {
            "keyword": "And ",
            "name": "the Unsafe Browser has no add-ons installed",
            "line": 30,
            "match": {
              "location": "features/step_definitions/unsafe_browser.rb:1"
            },
            "result": {
              "status": "passed",
              "duration": 5796180384
            }
          },
          {
            "keyword": "And ",
            "name": "the Unsafe Browser has no bookmarks",
            "line": 31,
            "match": {
              "location": "features/step_definitions/unsafe_browser.rb:11"
            },
            "result": {
              "status": "passed",
              "duration": 4121192881
            }
          },
          {
            "keyword": "And ",
            "name": "the Unsafe Browser uses all expected TBB shared libraries",
            "line": 32,
            "match": {
              "location": "features/step_definitions/browser.rb:306"
            },
            "result": {
              "status": "passed",
              "duration": 798490087
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:335"
            },
            "result": {
              "status": "passed",
              "duration": 659457114
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:104"
            },
            "result": {
              "status": "passed",
              "duration": 24417
            }
          }
        ]
      },
      {
        "id": "browsing-the-web-using-the-unsafe-browser;the-unsafe-browser-can-load-a-web-page-from-the-internet",
        "keyword": "Scenario",
        "name": "The Unsafe Browser can load a web page from the Internet",
        "description": "",
        "line": 35,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          },
          {
            "name": "@doc",
            "line": 34
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:270"
            },
            "result": {
              "status": "passed",
              "duration": 17484
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:277"
            },
            "result": {
              "status": "passed",
              "duration": 11057301
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails from DVD and logged in and the network is connected",
            "line": 36,
            "match": {
              "location": "features/step_definitions/snapshots.rb:172"
            },
            "result": {
              "status": "passed",
              "duration": 10453872608
            }
          },
          {
            "keyword": "When ",
            "name": "I successfully start the Unsafe Browser",
            "line": 37,
            "match": {
              "location": "features/step_definitions/browser.rb:109"
            },
            "result": {
              "status": "passed",
              "duration": 8221711527
            }
          },
          {
            "keyword": "When ",
            "name": "I open the Tails homepage in the Unsafe Browser",
            "line": 38,
            "match": {
              "location": "features/step_definitions/browser.rb:364"
            },
            "result": {
              "status": "passed",
              "duration": 7129133204
            }
          },
          {
            "keyword": "Then ",
            "name": "the Tails homepage loads in the Unsafe Browser",
            "line": 39,
            "match": {
              "location": "features/step_definitions/unsafe_browser.rb:140"
            },
            "result": {
              "status": "passed",
              "duration": 463218613
            }
          },
          {
            "keyword": "And ",
            "name": "the Unsafe Browser has sent packets out to the Internet",
            "line": 40,
            "match": {
              "location": "features/step_definitions/unsafe_browser.rb:130"
            },
            "result": {
              "status": "passed",
              "duration": 55401719
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:335"
            },
            "result": {
              "status": "passed",
              "duration": 1176409359
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:104"
            },
            "result": {
              "status": "passed",
              "duration": 56205
            }
          }
        ]
      },
      {
        "id": "browsing-the-web-using-the-unsafe-browser;closing-the-unsafe-browser-shows-a-stop-notification-and-properly-tears-down-the-chroot",
        "keyword": "Scenario",
        "name": "Closing the Unsafe Browser shows a stop notification and properly tears down the chroot",
        "description": "",
        "line": 43,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          },
          {
            "name": "@not_release_blocker",
            "line": 42
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:270"
            },
            "result": {
              "status": "passed",
              "duration": 24996
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:277"
            },
            "result": {
              "status": "passed",
              "duration": 27208241
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails from DVD and logged in and the network is connected",
            "line": 44,
            "match": {
              "location": "features/step_definitions/snapshots.rb:172"
            },
            "result": {
              "status": "passed",
              "duration": 11098853112
            }
          },
          {
            "keyword": "When ",
            "name": "I successfully start the Unsafe Browser",
            "line": 45,
            "match": {
              "location": "features/step_definitions/browser.rb:109"
            },
            "result": {
              "status": "passed",
              "duration": 6675147823
            }
          },
          {
            "keyword": "And ",
            "name": "I close the Unsafe Browser",
            "line": 46,
            "match": {
              "location": "features/step_definitions/browser.rb:117"
            },
            "result": {
              "status": "passed",
              "duration": 122089285
            }
          },
          {
            "keyword": "Then ",
            "name": "I see the \"Shutting down the Unsafe Browser...\" notification after at most 60 seconds",
            "line": 47,
            "match": {
              "location": "features/step_definitions/common_steps.rb:629"
            },
            "result": {
              "status": "passed",
              "duration": 1134309749
            }
          },
          {
            "keyword": "And ",
            "name": "the Unsafe Browser chroot is torn down",
            "line": 48,
            "match": {
              "location": "features/step_definitions/browser.rb:316"
            },
            "result": {
              "status": "passed",
              "duration": 83035706
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:335"
            },
            "result": {
              "status": "passed",
              "duration": 886691407
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:104"
            },
            "result": {
              "status": "passed",
              "duration": 60182
            }
          }
        ]
      },
      {
        "id": "browsing-the-web-using-the-unsafe-browser;starting-a-second-instance-of-the-unsafe-browser-results-in-an-error-message-being-shown",
        "keyword": "Scenario",
        "name": "Starting a second instance of the Unsafe Browser results in an error message being shown",
        "description": "",
        "line": 51,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          },
          {
            "name": "@not_release_blocker",
            "line": 50
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:270"
            },
            "result": {
              "status": "passed",
              "duration": 29424
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:277"
            },
            "result": {
              "status": "passed",
              "duration": 12568042
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails from DVD and logged in and the network is connected",
            "line": 52,
            "match": {
              "location": "features/step_definitions/snapshots.rb:172"
            },
            "result": {
              "status": "passed",
              "duration": 10675051670
            }
          },
          {
            "keyword": "When ",
            "name": "I successfully start the Unsafe Browser",
            "line": 53,
            "match": {
              "location": "features/step_definitions/browser.rb:109"
            },
            "result": {
              "status": "passed",
              "duration": 6677173978
            }
          },
          {
            "keyword": "And ",
            "name": "I wait 10 seconds",
            "line": 58,
            "comments": [
              {
                "value": "# Wait for whatever facility the GNOME Activities Overview uses to",
                "line": 54
              },
              {
                "value": "# learn about which applications are running to \"settle\". Without",
                "line": 55
              },
              {
                "value": "# this sleep, it is confused and it's impossible to start a new",
                "line": 56
              },
              {
                "value": "# instance (it will just switch to the one we already started).",
                "line": 57
              }
            ],
            "output": [
              "Slept for 10 seconds"
            ],
            "match": {
              "location": "features/step_definitions/common_steps.rb:1370"
            },
            "result": {
              "status": "passed",
              "duration": 10000156447
            }
          },
          {
            "keyword": "And ",
            "name": "I try to start the Unsafe Browser",
            "line": 59,
            "match": {
              "location": "features/step_definitions/browser.rb:105"
            },
            "result": {
              "status": "passed",
              "duration": 67378252
            }
          },
          {
            "keyword": "Then ",
            "name": "I see a warning about another instance already running",
            "line": 60,
            "match": {
              "location": "features/step_definitions/unsafe_browser.rb:68"
            },
            "result": {
              "status": "passed",
              "duration": 1665551531
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:335"
            },
            "result": {
              "status": "passed",
              "duration": 1371517922
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:104"
            },
            "result": {
              "status": "passed",
              "duration": 24125
            }
          }
        ]
      },
      {
        "id": "browsing-the-web-using-the-unsafe-browser;the-unsafe-browser-is-not-allowed-to-use-a-local-proxy",
        "keyword": "Scenario",
        "name": "The Unsafe Browser is not allowed to use a local proxy",
        "description": "",
        "line": 62,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:270"
            },
            "result": {
              "status": "passed",
              "duration": 13675
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:277"
            },
            "result": {
              "status": "passed",
              "duration": 12390450
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails from DVD and logged in and the network is connected",
            "line": 63,
            "match": {
              "location": "features/step_definitions/snapshots.rb:172"
            },
            "result": {
              "status": "passed",
              "duration": 10236389328
            }
          },
          {
            "keyword": "When ",
            "name": "I configure the Unsafe Browser to use a local proxy",
            "line": 64,
            "match": {
              "location": "features/step_definitions/unsafe_browser.rb:81"
            },
            "result": {
              "status": "passed",
              "duration": 122794631
            }
          },
          {
            "keyword": "And ",
            "name": "I successfully start the Unsafe Browser",
            "line": 65,
            "match": {
              "location": "features/step_definitions/browser.rb:109"
            },
            "result": {
              "status": "passed",
              "duration": 7299686163
            }
          },
          {
            "keyword": "And ",
            "name": "I open the Tails homepage in the Unsafe Browser",
            "line": 66,
            "match": {
              "location": "features/step_definitions/browser.rb:364"
            },
            "result": {
              "status": "passed",
              "duration": 4116933589
            }
          },
          {
            "keyword": "Then ",
            "name": "the Unsafe Browser shows the \"The proxy server is refusing connections\" error",
            "line": 67,
            "match": {
              "location": "features/step_definitions/browser.rb:376"
            },
            "result": {
              "status": "passed",
              "duration": 184439780
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:335"
            },
            "result": {
              "status": "passed",
              "duration": 852564040
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:104"
            },
            "result": {
              "status": "passed",
              "duration": 23764
            }
          }
        ]
      },
      {
        "id": "browsing-the-web-using-the-unsafe-browser;the-unsafe-browser-only-makes-user-initiated-non-torified-connections",
        "keyword": "Scenario",
        "name": "The Unsafe Browser only makes user-initiated non-Torified connections",
        "description": "",
        "line": 70,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          },
          {
            "name": "@not_release_blocker",
            "line": 69
          },
          {
            "name": "@check_tor_leaks",
            "line": 69
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:270"
            },
            "result": {
              "status": "passed",
              "duration": 20749
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:277"
            },
            "result": {
              "status": "passed",
              "duration": 8024374
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:523"
            },
            "result": {
              "status": "passed",
              "duration": 9036582
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails from DVD and logged in and the network is connected",
            "line": 71,
            "match": {
              "location": "features/step_definitions/snapshots.rb:172"
            },
            "result": {
              "status": "passed",
              "duration": 10395644258
            }
          },
          {
            "keyword": "And ",
            "name": "I capture all network traffic",
            "line": 72,
            "match": {
              "location": "features/step_definitions/common_steps.rb:185"
            },
            "result": {
              "status": "passed",
              "duration": 17877857
            }
          },
          {
            "keyword": "And ",
            "name": "I configure the Unsafe Browser to check for updates more frequently",
            "line": 73,
            "match": {
              "location": "features/step_definitions/unsafe_browser.rb:118"
            },
            "result": {
              "status": "passed",
              "duration": 40270820
            }
          },
          {
            "keyword": "But ",
            "name": "checking for updates is disabled in the Unsafe Browser's configuration",
            "line": 74,
            "match": {
              "location": "features/step_definitions/unsafe_browser.rb:125"
            },
            "result": {
              "status": "passed",
              "duration": 6168575
            }
          },
          {
            "keyword": "When ",
            "name": "I successfully start the Unsafe Browser",
            "line": 75,
            "match": {
              "location": "features/step_definitions/browser.rb:109"
            },
            "result": {
              "status": "passed",
              "duration": 6749431419
            }
          },
          {
            "keyword": "And ",
            "name": "I wait 120 seconds",
            "line": 76,
            "output": [
              "Slept for 120 seconds"
            ],
            "match": {
              "location": "features/step_definitions/common_steps.rb:1370"
            },
            "result": {
              "status": "passed",
              "duration": 120000161044
            }
          },
          {
            "keyword": "Then ",
            "name": "the Unsafe Browser has not sent packets out to the Internet",
            "line": 77,
            "match": {
              "location": "features/step_definitions/unsafe_browser.rb:130"
            },
            "result": {
              "status": "passed",
              "duration": 436943765
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:531"
            },
            "result": {
              "status": "passed",
              "duration": 290041909
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:335"
            },
            "result": {
              "status": "passed",
              "duration": 920013126
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:104"
            },
            "result": {
              "status": "passed",
              "duration": 37255218
            }
          }
        ]
      },
      {
        "id": "browsing-the-web-using-the-unsafe-browser;the-unsafe-browser-cannot-be-started-when-i-am-offline",
        "keyword": "Scenario",
        "name": "The Unsafe Browser cannot be started when I am offline",
        "description": "",
        "line": 80,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          },
          {
            "name": "@not_release_blocker",
            "line": 79
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:270"
            },
            "result": {
              "status": "passed",
              "duration": 28033
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:277"
            },
            "result": {
              "status": "passed",
              "duration": 9594558
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails from DVD and logged in and the network is connected",
            "line": 81,
            "match": {
              "location": "features/step_definitions/snapshots.rb:172"
            },
            "result": {
              "status": "passed",
              "duration": 10207343540
            }
          },
          {
            "keyword": "And ",
            "name": "the network is unplugged",
            "line": 82,
            "match": {
              "location": "features/step_definitions/common_steps.rb:151"
            },
            "result": {
              "status": "passed",
              "duration": 9841822
            }
          },
          {
            "keyword": "And ",
            "name": "I wait 10 seconds",
            "line": 84,
            "comments": [
              {
                "value": "# NetworkManager apparently needs some time to notice that the connection is now off",
                "line": 83
              }
            ],
            "output": [
              "Slept for 10 seconds"
            ],
            "match": {
              "location": "features/step_definitions/common_steps.rb:1370"
            },
            "result": {
              "status": "passed",
              "duration": 10000132189
            }
          },
          {
            "keyword": "When ",
            "name": "I try to start the Unsafe Browser",
            "line": 85,
            "match": {
              "location": "features/step_definitions/browser.rb:105"
            },
            "result": {
              "status": "passed",
              "duration": 101223146
            }
          },
          {
            "keyword": "Then ",
            "name": "I am told I cannot start the Unsafe Browser when I am offline",
            "line": 86,
            "match": {
              "location": "features/step_definitions/unsafe_browser.rb:102"
            },
            "result": {
              "status": "passed",
              "duration": 3414655716
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:335"
            },
            "result": {
              "status": "passed",
              "duration": 1511705653
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:104"
            },
            "result": {
              "status": "passed",
              "duration": 23635
            }
          }
        ]
      }
    ]
  },
  {
    "uri": "features/veracrypt.feature",
    "id": "using-veracrypt-encrypted-volumes",
    "keyword": "Feature",
    "name": "Using VeraCrypt encrypted volumes",
    "description": "  In order to collaborate with non-Tails users\n  As a Tails user\n  I want to unlock VeraCrypt encrypted volumes",
    "line": 2,
    "tags": [
      {
        "name": "@product",
        "line": 1
      },
      {
        "name": "@not_release_blocker",
        "line": 1
      }
    ],
    "elements": [
      {
        "keyword": "Background",
        "name": "",
        "description": "",
        "line": 7,
        "type": "background",
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:270"
            },
            "result": {
              "status": "passed",
              "duration": 15549
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:277"
            },
            "result": {
              "status": "passed",
              "duration": 7017236
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails from DVD without network and logged in",
            "line": 8,
            "match": {
              "location": "features/step_definitions/snapshots.rb:172"
            },
            "result": {
              "status": "passed",
              "duration": 7578984129
            }
          }
        ]
      },
      {
        "id": "using-veracrypt-encrypted-volumes;use-unlock-veracrypt-volumes-to-unlock-a-usb-drive-that-has-a-basic-veracrypt-volume",
        "keyword": "Scenario",
        "name": "Use Unlock VeraCrypt Volumes to unlock a USB drive that has a basic VeraCrypt volume",
        "description": "",
        "line": 12,
        "type": "scenario",
        "comments": [
          {
            "value": "### Unlock VeraCrypt Volumes",
            "line": 10
          }
        ],
        "tags": [
          {
            "name": "@product",
            "line": 1
          },
          {
            "name": "@not_release_blocker",
            "line": 1
          }
        ],
        "steps": [
          {
            "keyword": "When ",
            "name": "I plug a USB drive containing a basic VeraCrypt volume",
            "line": 13,
            "match": {
              "location": "features/step_definitions/veracrypt.rb:124"
            },
            "result": {
              "status": "passed",
              "duration": 10677770030
            }
          },
          {
            "keyword": "And ",
            "name": "I cancel the GNOME authentication prompt",
            "line": 14,
            "match": {
              "location": "features/step_definitions/common_steps.rb:851"
            },
            "result": {
              "status": "passed",
              "duration": 1546404667
            }
          },
          {
            "keyword": "And ",
            "name": "I unlock and mount this VeraCrypt volume with Unlock VeraCrypt Volumes",
            "line": 15,
            "match": {
              "location": "features/step_definitions/veracrypt.rb:156"
            },
            "result": {
              "status": "passed",
              "duration": 5003202551
            }
          },
          {
            "keyword": "And ",
            "name": "I open this VeraCrypt volume in GNOME Files",
            "line": 16,
            "match": {
              "location": "features/step_definitions/veracrypt.rb:316"
            },
            "result": {
              "status": "passed",
              "duration": 2308700915
            }
          },
          {
            "keyword": "Then ",
            "name": "I see the expected contents in this VeraCrypt volume",
            "line": 17,
            "match": {
              "location": "features/step_definitions/veracrypt.rb:321"
            },
            "result": {
              "status": "passed",
              "duration": 107303537
            }
          },
          {
            "keyword": "When ",
            "name": "I lock the currently opened VeraCrypt volume",
            "line": 18,
            "match": {
              "location": "features/step_definitions/veracrypt.rb:326"
            },
            "result": {
              "status": "passed",
              "duration": 1267941978
            }
          },
          {
            "keyword": "Then ",
            "name": "the VeraCrypt volume has been unmounted and locked",
            "line": 19,
            "match": {
              "location": "features/step_definitions/veracrypt.rb:335"
            },
            "result": {
              "status": "passed",
              "duration": 96236488
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:335"
            },
            "result": {
              "status": "passed",
              "duration": 633365999
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:104"
            },
            "result": {
              "status": "passed",
              "duration": 571241
            }
          }
        ]
      },
      {
        "keyword": "Background",
        "name": "",
        "description": "",
        "line": 7,
        "type": "background",
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:270"
            },
            "result": {
              "status": "passed",
              "duration": 11522
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:277"
            },
            "result": {
              "status": "passed",
              "duration": 8529952
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails from DVD without network and logged in",
            "line": 8,
            "match": {
              "location": "features/step_definitions/snapshots.rb:172"
            },
            "result": {
              "status": "passed",
              "duration": 6999412043
            }
          }
        ]
      },
      {
        "id": "using-veracrypt-encrypted-volumes;use-unlock-veracrypt-volumes-to-unlock-a-usb-drive-that-has-a-hidden-veracrypt-volume",
        "keyword": "Scenario",
        "name": "Use Unlock VeraCrypt Volumes to unlock a USB drive that has a hidden VeraCrypt volume",
        "description": "",
        "line": 21,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          },
          {
            "name": "@not_release_blocker",
            "line": 1
          }
        ],
        "steps": [
          {
            "keyword": "When ",
            "name": "I plug a USB drive containing a hidden VeraCrypt volume",
            "line": 22,
            "match": {
              "location": "features/step_definitions/veracrypt.rb:124"
            },
            "result": {
              "status": "passed",
              "duration": 20260438718
            }
          },
          {
            "keyword": "And ",
            "name": "I cancel the GNOME authentication prompt",
            "line": 23,
            "match": {
              "location": "features/step_definitions/common_steps.rb:851"
            },
            "result": {
              "status": "passed",
              "duration": 1364915200
            }
          },
          {
            "keyword": "And ",
            "name": "I unlock and mount this VeraCrypt volume with Unlock VeraCrypt Volumes",
            "line": 24,
            "match": {
              "location": "features/step_definitions/veracrypt.rb:156"
            },
            "result": {
              "status": "passed",
              "duration": 5960032771
            }
          },
          {
            "keyword": "And ",
            "name": "I open this VeraCrypt volume in GNOME Files",
            "line": 25,
            "match": {
              "location": "features/step_definitions/veracrypt.rb:316"
            },
            "result": {
              "status": "passed",
              "duration": 1930572266
            }
          },
          {
            "keyword": "Then ",
            "name": "I see the expected contents in this VeraCrypt volume",
            "line": 26,
            "match": {
              "location": "features/step_definitions/veracrypt.rb:321"
            },
            "result": {
              "status": "passed",
              "duration": 126548977
            }
          },
          {
            "keyword": "When ",
            "name": "I lock the currently opened VeraCrypt volume",
            "line": 27,
            "match": {
              "location": "features/step_definitions/veracrypt.rb:326"
            },
            "result": {
              "status": "passed",
              "duration": 1266520284
            }
          },
          {
            "keyword": "Then ",
            "name": "the VeraCrypt volume has been unmounted and locked",
            "line": 28,
            "match": {
              "location": "features/step_definitions/veracrypt.rb:335"
            },
            "result": {
              "status": "passed",
              "duration": 99871371
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:335"
            },
            "result": {
              "status": "passed",
              "duration": 823722359
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:104"
            },
            "result": {
              "status": "passed",
              "duration": 810820
            }
          }
        ]
      },
      {
        "keyword": "Background",
        "name": "",
        "description": "",
        "line": 7,
        "type": "background",
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:270"
            },
            "result": {
              "status": "passed",
              "duration": 18905
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:277"
            },
            "result": {
              "status": "passed",
              "duration": 23068600
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails from DVD without network and logged in",
            "line": 8,
            "match": {
              "location": "features/step_definitions/snapshots.rb:172"
            },
            "result": {
              "status": "passed",
              "duration": 6860482578
            }
          }
        ]
      },
      {
        "id": "using-veracrypt-encrypted-volumes;use-unlock-veracrypt-volumes-to-unlock-a-basic-veracrypt-file-container-with-a-pim",
        "keyword": "Scenario",
        "name": "Use Unlock VeraCrypt Volumes to unlock a basic VeraCrypt file container with a PIM",
        "description": "",
        "line": 30,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          },
          {
            "name": "@not_release_blocker",
            "line": 1
          }
        ],
        "steps": [
          {
            "keyword": "When ",
            "name": "I plug and mount a USB drive containing a basic VeraCrypt file container with a PIM",
            "line": 31,
            "match": {
              "location": "features/step_definitions/veracrypt.rb:129"
            },
            "result": {
              "status": "passed",
              "duration": 8604409223
            }
          },
          {
            "keyword": "And ",
            "name": "I unlock and mount this VeraCrypt file container with Unlock VeraCrypt Volumes",
            "line": 32,
            "match": {
              "location": "features/step_definitions/veracrypt.rb:156"
            },
            "result": {
              "status": "passed",
              "duration": 6640157456
            }
          },
          {
            "keyword": "And ",
            "name": "I open this VeraCrypt volume in GNOME Files",
            "line": 33,
            "match": {
              "location": "features/step_definitions/veracrypt.rb:316"
            },
            "result": {
              "status": "passed",
              "duration": 1969037460
            }
          },
          {
            "keyword": "Then ",
            "name": "I see the expected contents in this VeraCrypt volume",
            "line": 34,
            "match": {
              "location": "features/step_definitions/veracrypt.rb:321"
            },
            "result": {
              "status": "passed",
              "duration": 119379914
            }
          },
          {
            "keyword": "When ",
            "name": "I lock the currently opened VeraCrypt file container",
            "line": 35,
            "match": {
              "location": "features/step_definitions/veracrypt.rb:326"
            },
            "result": {
              "status": "passed",
              "duration": 1365479056
            }
          },
          {
            "keyword": "Then ",
            "name": "the VeraCrypt file container has been unmounted and locked",
            "line": 36,
            "match": {
              "location": "features/step_definitions/veracrypt.rb:335"
            },
            "result": {
              "status": "passed",
              "duration": 98084058
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:335"
            },
            "result": {
              "status": "passed",
              "duration": 660794039
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:104"
            },
            "result": {
              "status": "passed",
              "duration": 696276
            }
          }
        ]
      },
      {
        "keyword": "Background",
        "name": "",
        "description": "",
        "line": 7,
        "type": "background",
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:270"
            },
            "result": {
              "status": "passed",
              "duration": 14537
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:277"
            },
            "result": {
              "status": "passed",
              "duration": 7951679
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails from DVD without network and logged in",
            "line": 8,
            "match": {
              "location": "features/step_definitions/snapshots.rb:172"
            },
            "result": {
              "status": "passed",
              "duration": 6893343840
            }
          }
        ]
      },
      {
        "id": "using-veracrypt-encrypted-volumes;use-unlock-veracrypt-volumes-to-unlock-a-hidden-veracrypt-file-container",
        "keyword": "Scenario",
        "name": "Use Unlock VeraCrypt Volumes to unlock a hidden VeraCrypt file container",
        "description": "",
        "line": 38,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          },
          {
            "name": "@not_release_blocker",
            "line": 1
          }
        ],
        "steps": [
          {
            "keyword": "When ",
            "name": "I plug and mount a USB drive containing a hidden VeraCrypt file container",
            "line": 39,
            "match": {
              "location": "features/step_definitions/veracrypt.rb:129"
            },
            "result": {
              "status": "passed",
              "duration": 27850129084
            }
          },
          {
            "keyword": "And ",
            "name": "I unlock and mount this VeraCrypt file container with Unlock VeraCrypt Volumes",
            "line": 40,
            "match": {
              "location": "features/step_definitions/veracrypt.rb:156"
            },
            "result": {
              "status": "passed",
              "duration": 7754274464
            }
          },
          {
            "keyword": "And ",
            "name": "I open this VeraCrypt volume in GNOME Files",
            "line": 41,
            "match": {
              "location": "features/step_definitions/veracrypt.rb:316"
            },
            "result": {
              "status": "passed",
              "duration": 1876100469
            }
          },
          {
            "keyword": "Then ",
            "name": "I see the expected contents in this VeraCrypt volume",
            "line": 42,
            "match": {
              "location": "features/step_definitions/veracrypt.rb:321"
            },
            "result": {
              "status": "passed",
              "duration": 139319678
            }
          },
          {
            "keyword": "When ",
            "name": "I lock the currently opened VeraCrypt file container",
            "line": 43,
            "match": {
              "location": "features/step_definitions/veracrypt.rb:326"
            },
            "result": {
              "status": "passed",
              "duration": 1307746854
            }
          },
          {
            "keyword": "Then ",
            "name": "the VeraCrypt file container has been unmounted and locked",
            "line": 44,
            "match": {
              "location": "features/step_definitions/veracrypt.rb:335"
            },
            "result": {
              "status": "passed",
              "duration": 97732270
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:335"
            },
            "result": {
              "status": "passed",
              "duration": 870553970
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:104"
            },
            "result": {
              "status": "passed",
              "duration": 9902776
            }
          }
        ]
      },
      {
        "keyword": "Background",
        "name": "",
        "description": "",
        "line": 7,
        "type": "background",
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:270"
            },
            "result": {
              "status": "passed",
              "duration": 16361
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:277"
            },
            "result": {
              "status": "passed",
              "duration": 7525289
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails from DVD without network and logged in",
            "line": 8,
            "match": {
              "location": "features/step_definitions/snapshots.rb:172"
            },
            "result": {
              "status": "passed",
              "duration": 7329743392
            }
          }
        ]
      },
      {
        "id": "using-veracrypt-encrypted-volumes;use-gnome-disks-to-unlock-a-usb-drive-that-has-a-basic-veracrypt-volume-with-a-keyfile",
        "keyword": "Scenario",
        "name": "Use GNOME Disks to unlock a USB drive that has a basic VeraCrypt volume with a keyfile",
        "description": "",
        "line": 48,
        "type": "scenario",
        "comments": [
          {
            "value": "### GNOME Disks",
            "line": 46
          }
        ],
        "tags": [
          {
            "name": "@product",
            "line": 1
          },
          {
            "name": "@not_release_blocker",
            "line": 1
          }
        ],
        "steps": [
          {
            "keyword": "When ",
            "name": "I plug a USB drive containing a basic VeraCrypt volume with a keyfile",
            "line": 49,
            "match": {
              "location": "features/step_definitions/veracrypt.rb:124"
            },
            "result": {
              "status": "passed",
              "duration": 20530732417
            }
          },
          {
            "keyword": "And ",
            "name": "I cancel the GNOME authentication prompt",
            "line": 50,
            "match": {
              "location": "features/step_definitions/common_steps.rb:851"
            },
            "result": {
              "status": "passed",
              "duration": 1478510602
            }
          },
          {
            "keyword": "And ",
            "name": "I unlock and mount this VeraCrypt volume with GNOME Disks",
            "line": 51,
            "match": {
              "location": "features/step_definitions/veracrypt.rb:194"
            },
            "result": {
              "status": "passed",
              "duration": 9521669200
            }
          },
          {
            "keyword": "And ",
            "name": "I open this VeraCrypt volume in GNOME Files",
            "line": 52,
            "match": {
              "location": "features/step_definitions/veracrypt.rb:316"
            },
            "result": {
              "status": "passed",
              "duration": 1852503139
            }
          },
          {
            "keyword": "Then ",
            "name": "I see the expected contents in this VeraCrypt volume",
            "line": 53,
            "match": {
              "location": "features/step_definitions/veracrypt.rb:321"
            },
            "result": {
              "status": "passed",
              "duration": 118282797
            }
          },
          {
            "keyword": "When ",
            "name": "I lock the currently opened VeraCrypt volume",
            "line": 54,
            "match": {
              "location": "features/step_definitions/veracrypt.rb:326"
            },
            "result": {
              "status": "passed",
              "duration": 1278364318
            }
          },
          {
            "keyword": "Then ",
            "name": "the VeraCrypt volume has been unmounted and locked",
            "line": 55,
            "match": {
              "location": "features/step_definitions/veracrypt.rb:335"
            },
            "result": {
              "status": "passed",
              "duration": 95561000
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:335"
            },
            "result": {
              "status": "passed",
              "duration": 1095320018
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:104"
            },
            "result": {
              "status": "passed",
              "duration": 374663
            }
          }
        ]
      },
      {
        "keyword": "Background",
        "name": "",
        "description": "",
        "line": 7,
        "type": "background",
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:270"
            },
            "result": {
              "status": "passed",
              "duration": 11882
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:277"
            },
            "result": {
              "status": "passed",
              "duration": 7176514
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails from DVD without network and logged in",
            "line": 8,
            "match": {
              "location": "features/step_definitions/snapshots.rb:172"
            },
            "result": {
              "status": "passed",
              "duration": 6898413026
            }
          }
        ]
      },
      {
        "id": "using-veracrypt-encrypted-volumes;use-gnome-disks-to-unlock-a-usb-drive-that-has-a-hidden-veracrypt-volume",
        "keyword": "Scenario",
        "name": "Use GNOME Disks to unlock a USB drive that has a hidden VeraCrypt volume",
        "description": "",
        "line": 57,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          },
          {
            "name": "@not_release_blocker",
            "line": 1
          }
        ],
        "steps": [
          {
            "keyword": "When ",
            "name": "I plug a USB drive containing a hidden VeraCrypt volume",
            "line": 58,
            "match": {
              "location": "features/step_definitions/veracrypt.rb:124"
            },
            "result": {
              "status": "passed",
              "duration": 20234907356
            }
          },
          {
            "keyword": "And ",
            "name": "I cancel the GNOME authentication prompt",
            "line": 59,
            "match": {
              "location": "features/step_definitions/common_steps.rb:851"
            },
            "result": {
              "status": "passed",
              "duration": 1414647868
            }
          },
          {
            "keyword": "And ",
            "name": "I unlock and mount this VeraCrypt volume with GNOME Disks",
            "line": 60,
            "match": {
              "location": "features/step_definitions/veracrypt.rb:194"
            },
            "result": {
              "status": "passed",
              "duration": 8274989338
            }
          },
          {
            "keyword": "And ",
            "name": "I open this VeraCrypt volume in GNOME Files",
            "line": 61,
            "match": {
              "location": "features/step_definitions/veracrypt.rb:316"
            },
            "result": {
              "status": "passed",
              "duration": 2126440094
            }
          },
          {
            "keyword": "Then ",
            "name": "I see the expected contents in this VeraCrypt volume",
            "line": 62,
            "match": {
              "location": "features/step_definitions/veracrypt.rb:321"
            },
            "result": {
              "status": "passed",
              "duration": 110880941
            }
          },
          {
            "keyword": "When ",
            "name": "I lock the currently opened VeraCrypt volume",
            "line": 63,
            "match": {
              "location": "features/step_definitions/veracrypt.rb:326"
            },
            "result": {
              "status": "passed",
              "duration": 1259865981
            }
          },
          {
            "keyword": "Then ",
            "name": "the VeraCrypt volume has been unmounted and locked",
            "line": 64,
            "match": {
              "location": "features/step_definitions/veracrypt.rb:335"
            },
            "result": {
              "status": "passed",
              "duration": 133744844
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:335"
            },
            "result": {
              "status": "passed",
              "duration": 843981957
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:104"
            },
            "result": {
              "status": "passed",
              "duration": 519694
            }
          }
        ]
      },
      {
        "keyword": "Background",
        "name": "",
        "description": "",
        "line": 7,
        "type": "background",
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:270"
            },
            "result": {
              "status": "passed",
              "duration": 30979
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:277"
            },
            "result": {
              "status": "passed",
              "duration": 34904149
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails from DVD without network and logged in",
            "line": 8,
            "match": {
              "location": "features/step_definitions/snapshots.rb:172"
            },
            "result": {
              "status": "passed",
              "duration": 7244160995
            }
          }
        ]
      },
      {
        "id": "using-veracrypt-encrypted-volumes;use-gnome-disks-to-unlock-a-basic-veracrypt-file-container-with-a-keyfile",
        "keyword": "Scenario",
        "name": "Use GNOME Disks to unlock a basic VeraCrypt file container with a keyfile",
        "description": "",
        "line": 66,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          },
          {
            "name": "@not_release_blocker",
            "line": 1
          }
        ],
        "steps": [
          {
            "keyword": "When ",
            "name": "I plug and mount a USB drive containing a basic VeraCrypt file container with a keyfile",
            "line": 67,
            "match": {
              "location": "features/step_definitions/veracrypt.rb:129"
            },
            "result": {
              "status": "passed",
              "duration": 28377582943
            }
          },
          {
            "keyword": "And ",
            "name": "I unlock and mount this VeraCrypt file container with GNOME Disks",
            "line": 68,
            "match": {
              "location": "features/step_definitions/veracrypt.rb:194"
            },
            "result": {
              "status": "passed",
              "duration": 19572225139
            }
          },
          {
            "keyword": "And ",
            "name": "I open this VeraCrypt volume in GNOME Files",
            "line": 69,
            "match": {
              "location": "features/step_definitions/veracrypt.rb:316"
            },
            "result": {
              "status": "passed",
              "duration": 2078953088
            }
          },
          {
            "keyword": "Then ",
            "name": "I see the expected contents in this VeraCrypt volume",
            "line": 70,
            "match": {
              "location": "features/step_definitions/veracrypt.rb:321"
            },
            "result": {
              "status": "passed",
              "duration": 285085724
            }
          },
          {
            "keyword": "When ",
            "name": "I lock the currently opened VeraCrypt file container",
            "line": 71,
            "match": {
              "location": "features/step_definitions/veracrypt.rb:326"
            },
            "result": {
              "status": "passed",
              "duration": 1220232072
            }
          },
          {
            "keyword": "Then ",
            "name": "the VeraCrypt file container has been unmounted and locked",
            "line": 72,
            "match": {
              "location": "features/step_definitions/veracrypt.rb:335"
            },
            "result": {
              "status": "passed",
              "duration": 118458659
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:335"
            },
            "result": {
              "status": "passed",
              "duration": 985345402
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:104"
            },
            "result": {
              "status": "passed",
              "duration": 9234714
            }
          }
        ]
      },
      {
        "keyword": "Background",
        "name": "",
        "description": "",
        "line": 7,
        "type": "background",
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:270"
            },
            "result": {
              "status": "passed",
              "duration": 20288
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:277"
            },
            "result": {
              "status": "passed",
              "duration": 7405023
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails from DVD without network and logged in",
            "line": 8,
            "match": {
              "location": "features/step_definitions/snapshots.rb:172"
            },
            "result": {
              "status": "passed",
              "duration": 7239391633
            }
          }
        ]
      },
      {
        "id": "using-veracrypt-encrypted-volumes;use-gnome-disks-to-unlock-a-hidden-veracrypt-file-container",
        "keyword": "Scenario",
        "name": "Use GNOME Disks to unlock a hidden VeraCrypt file container",
        "description": "",
        "line": 74,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          },
          {
            "name": "@not_release_blocker",
            "line": 1
          }
        ],
        "steps": [
          {
            "keyword": "When ",
            "name": "I plug and mount a USB drive containing a hidden VeraCrypt file container",
            "line": 75,
            "match": {
              "location": "features/step_definitions/veracrypt.rb:129"
            },
            "result": {
              "status": "passed",
              "duration": 27110934800
            }
          },
          {
            "keyword": "And ",
            "name": "I unlock and mount this VeraCrypt file container with GNOME Disks",
            "line": 76,
            "match": {
              "location": "features/step_definitions/veracrypt.rb:194"
            },
            "result": {
              "status": "passed",
              "duration": 19474433201
            }
          },
          {
            "keyword": "And ",
            "name": "I open this VeraCrypt volume in GNOME Files",
            "line": 77,
            "match": {
              "location": "features/step_definitions/veracrypt.rb:316"
            },
            "result": {
              "status": "passed",
              "duration": 1737024404
            }
          },
          {
            "keyword": "Then ",
            "name": "I see the expected contents in this VeraCrypt volume",
            "line": 78,
            "match": {
              "location": "features/step_definitions/veracrypt.rb:321"
            },
            "result": {
              "status": "passed",
              "duration": 107625495
            }
          },
          {
            "keyword": "When ",
            "name": "I lock the currently opened VeraCrypt file container",
            "line": 79,
            "match": {
              "location": "features/step_definitions/veracrypt.rb:326"
            },
            "result": {
              "status": "passed",
              "duration": 1241293016
            }
          },
          {
            "keyword": "Then ",
            "name": "the VeraCrypt file container has been unmounted and locked",
            "line": 80,
            "match": {
              "location": "features/step_definitions/veracrypt.rb:335"
            },
            "result": {
              "status": "passed",
              "duration": 97391191
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:335"
            },
            "result": {
              "status": "passed",
              "duration": 827705747
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:104"
            },
            "result": {
              "status": "passed",
              "duration": 11901408
            }
          }
        ]
      },
      {
        "keyword": "Background",
        "name": "",
        "description": "",
        "line": 7,
        "type": "background",
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:270"
            },
            "result": {
              "status": "passed",
              "duration": 20567
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:277"
            },
            "result": {
              "status": "passed",
              "duration": 7899782
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails from DVD without network and logged in",
            "line": 8,
            "match": {
              "location": "features/step_definitions/snapshots.rb:172"
            },
            "result": {
              "status": "passed",
              "duration": 7001125126
            }
          }
        ]
      },
      {
        "id": "using-veracrypt-encrypted-volumes;use-gnome-disks-to-unlock-a-basic-veracrypt-file-container-with-a-pim",
        "keyword": "Scenario",
        "name": "Use GNOME Disks to unlock a basic VeraCrypt file container with a PIM",
        "description": "",
        "line": 82,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          },
          {
            "name": "@not_release_blocker",
            "line": 1
          }
        ],
        "steps": [
          {
            "keyword": "When ",
            "name": "I plug and mount a USB drive containing a basic VeraCrypt file container with a PIM",
            "line": 83,
            "match": {
              "location": "features/step_definitions/veracrypt.rb:129"
            },
            "result": {
              "status": "passed",
              "duration": 8256763152
            }
          },
          {
            "keyword": "And ",
            "name": "I unlock and mount this VeraCrypt file container with GNOME Disks",
            "line": 84,
            "match": {
              "location": "features/step_definitions/veracrypt.rb:194"
            },
            "result": {
              "status": "passed",
              "duration": 16433518238
            }
          },
          {
            "keyword": "And ",
            "name": "I open this VeraCrypt volume in GNOME Files",
            "line": 85,
            "match": {
              "location": "features/step_definitions/veracrypt.rb:316"
            },
            "result": {
              "status": "passed",
              "duration": 1775408832
            }
          },
          {
            "keyword": "Then ",
            "name": "I see the expected contents in this VeraCrypt volume",
            "line": 86,
            "match": {
              "location": "features/step_definitions/veracrypt.rb:321"
            },
            "result": {
              "status": "passed",
              "duration": 111083392
            }
          },
          {
            "keyword": "When ",
            "name": "I lock the currently opened VeraCrypt file container",
            "line": 87,
            "match": {
              "location": "features/step_definitions/veracrypt.rb:326"
            },
            "result": {
              "status": "passed",
              "duration": 1285149852
            }
          },
          {
            "keyword": "Then ",
            "name": "the VeraCrypt file container has been unmounted and locked",
            "line": 88,
            "match": {
              "location": "features/step_definitions/veracrypt.rb:335"
            },
            "result": {
              "status": "passed",
              "duration": 119585710
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:335"
            },
            "result": {
              "status": "passed",
              "duration": 799034608
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:104"
            },
            "result": {
              "status": "passed",
              "duration": 447074
            }
          }
        ]
      }
    ]
  },
  {
    "uri": "features/webtunnel.feature",
    "id": "using-webtunnel-tor-bridges",
    "keyword": "Feature",
    "name": "Using WebTunnel Tor bridges",
    "description": "  As a Tails user\n  I want to circumvent censorship of Tor by using WebTunnel bridges\n  And avoid connecting directly to the Tor Network",
    "line": 2,
    "tags": [
      {
        "name": "@product",
        "line": 1
      }
    ],
    "elements": [
      {
        "keyword": "Background",
        "name": "",
        "description": "",
        "line": 7,
        "type": "background",
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:270"
            },
            "result": {
              "status": "passed",
              "duration": 12303
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:277"
            },
            "result": {
              "status": "passed",
              "duration": 10035052
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:523"
            },
            "result": {
              "status": "passed",
              "duration": 6786376
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "a computer",
            "line": 8,
            "match": {
              "location": "features/step_definitions/common_steps.rb:98"
            },
            "result": {
              "status": "passed",
              "duration": 61836078
            }
          },
          {
            "keyword": "And ",
            "name": "I set Tails to run with real Tor network",
            "line": 9,
            "match": {
              "location": "features/step_definitions/common_steps.rb:198"
            },
            "result": {
              "status": "passed",
              "duration": 21110
            }
          },
          {
            "keyword": "And ",
            "name": "I start the computer",
            "line": 10,
            "match": {
              "location": "features/step_definitions/common_steps.rb:202"
            },
            "result": {
              "status": "passed",
              "duration": 856561388
            }
          },
          {
            "keyword": "And ",
            "name": "the computer boots Tails",
            "line": 11,
            "match": {
              "location": "features/step_definitions/common_steps.rb:402"
            },
            "result": {
              "status": "passed",
              "duration": 37274336112
            }
          },
          {
            "keyword": "And ",
            "name": "I bump the system time with \"+8 hours +15 minutes\"",
            "line": 13,
            "comments": [
              {
                "value": "# Let's be sure WebTunnel bridges work with a clock East of UTC",
                "line": 12
              }
            ],
            "match": {
              "location": "features/step_definitions/time_syncing.rb:20"
            },
            "result": {
              "status": "passed",
              "duration": 426741866
            }
          },
          {
            "keyword": "And ",
            "name": "I log in to a new session",
            "line": 14,
            "match": {
              "location": "features/step_definitions/common_steps.rb:514"
            },
            "result": {
              "status": "passed",
              "duration": 9064793510
            }
          },
          {
            "keyword": "And ",
            "name": "all notifications have disappeared",
            "line": 15,
            "match": {
              "location": "features/step_definitions/common_steps.rb:762"
            },
            "result": {
              "status": "passed",
              "duration": 7876110160
            }
          },
          {
            "keyword": "When ",
            "name": "the network is plugged",
            "line": 16,
            "match": {
              "location": "features/step_definitions/common_steps.rb:137"
            },
            "result": {
              "status": "passed",
              "duration": 8629169
            }
          },
          {
            "keyword": "Then ",
            "name": "the Tor Connection Assistant autostarts",
            "line": 17,
            "match": {
              "location": "features/step_definitions/tor.rb:370"
            },
            "result": {
              "status": "passed",
              "duration": 4741406818
            }
          }
        ]
      },
      {
        "id": "using-webtunnel-tor-bridges;configuring-webtunnel-with-qr-code",
        "keyword": "Scenario",
        "name": "Configuring WebTunnel with QR code",
        "description": "",
        "line": 20,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          },
          {
            "name": "@supports_real_tor",
            "line": 19
          },
          {
            "name": "@check_tor_leaks",
            "line": 19
          }
        ],
        "steps": [
          {
            "keyword": "When ",
            "name": "I configure some webtunnel bridges from a QR code in the Tor Connection Assistant in hide mode",
            "line": 21,
            "match": {
              "location": "features/step_definitions/tor.rb:616"
            },
            "result": {
              "status": "passed",
              "duration": 30156402081
            }
          },
          {
            "keyword": "Then ",
            "name": "I wait until Tor is ready",
            "line": 22,
            "match": {
              "location": "features/step_definitions/common_steps.rb:705"
            },
            "result": {
              "status": "passed",
              "duration": 2164913035
            }
          },
          {
            "keyword": "And ",
            "name": "available upgrades have been checked",
            "line": 23,
            "match": {
              "location": "features/step_definitions/common_steps.rb:758"
            },
            "result": {
              "status": "passed",
              "duration": 2135762531
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:531"
            },
            "result": {
              "status": "passed",
              "duration": 1613842218
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:335"
            },
            "result": {
              "status": "passed",
              "duration": 945579047
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:104"
            },
            "result": {
              "status": "passed",
              "duration": 18962300
            }
          }
        ]
      },
      {
        "keyword": "Background",
        "name": "",
        "description": "",
        "line": 7,
        "type": "background",
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:270"
            },
            "result": {
              "status": "passed",
              "duration": 26550
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:277"
            },
            "result": {
              "status": "passed",
              "duration": 10233004
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "a computer",
            "line": 8,
            "match": {
              "location": "features/step_definitions/common_steps.rb:98"
            },
            "result": {
              "status": "passed",
              "duration": 94895953
            }
          },
          {
            "keyword": "And ",
            "name": "I set Tails to run with real Tor network",
            "line": 9,
            "match": {
              "location": "features/step_definitions/common_steps.rb:198"
            },
            "result": {
              "status": "passed",
              "duration": 46007
            }
          },
          {
            "keyword": "And ",
            "name": "I start the computer",
            "line": 10,
            "match": {
              "location": "features/step_definitions/common_steps.rb:202"
            },
            "result": {
              "status": "passed",
              "duration": 857358019
            }
          },
          {
            "keyword": "And ",
            "name": "the computer boots Tails",
            "line": 11,
            "match": {
              "location": "features/step_definitions/common_steps.rb:402"
            },
            "result": {
              "status": "passed",
              "duration": 36757409400
            }
          },
          {
            "keyword": "And ",
            "name": "I bump the system time with \"+8 hours +15 minutes\"",
            "line": 13,
            "comments": [
              {
                "value": "# Let's be sure WebTunnel bridges work with a clock East of UTC",
                "line": 12
              }
            ],
            "match": {
              "location": "features/step_definitions/time_syncing.rb:20"
            },
            "result": {
              "status": "passed",
              "duration": 439513319
            }
          },
          {
            "keyword": "And ",
            "name": "I log in to a new session",
            "line": 14,
            "match": {
              "location": "features/step_definitions/common_steps.rb:514"
            },
            "result": {
              "status": "passed",
              "duration": 9606109240
            }
          },
          {
            "keyword": "And ",
            "name": "all notifications have disappeared",
            "line": 15,
            "match": {
              "location": "features/step_definitions/common_steps.rb:762"
            },
            "result": {
              "status": "passed",
              "duration": 7958350703
            }
          },
          {
            "keyword": "When ",
            "name": "the network is plugged",
            "line": 16,
            "match": {
              "location": "features/step_definitions/common_steps.rb:137"
            },
            "result": {
              "status": "passed",
              "duration": 8596919
            }
          },
          {
            "keyword": "Then ",
            "name": "the Tor Connection Assistant autostarts",
            "line": 17,
            "match": {
              "location": "features/step_definitions/tor.rb:370"
            },
            "result": {
              "status": "passed",
              "duration": 5185633723
            }
          }
        ]
      },
      {
        "id": "using-webtunnel-tor-bridges;typing-webtunnel-pluggable-transports-directly",
        "keyword": "Scenario",
        "name": "Typing WebTunnel pluggable transports directly",
        "description": "",
        "line": 25,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          }
        ],
        "steps": [
          {
            "keyword": "When ",
            "name": "I configure some webtunnel bridges in the Tor Connection Assistant in hide mode without connecting",
            "line": 26,
            "match": {
              "location": "features/step_definitions/tor.rb:616"
            },
            "result": {
              "status": "passed",
              "duration": 4814052831
            }
          },
          {
            "keyword": "Then ",
            "name": "I can click the \"Connect to Tor\" button",
            "line": 31,
            "comments": [
              {
                "value": "# We could actually click to Connect to Tor, which would exercise a slightly different code path, but:",
                "line": 27
              },
              {
                "value": "#  - this would use the real tor network, on which we expect more problems, so let's avoid",
                "line": 28
              },
              {
                "value": "#  - \"Configuring WebTunnel with QR code\" is already testing webtunnel bridges",
                "line": 29
              },
              {
                "value": "# So let's not",
                "line": 30
              }
            ],
            "match": {
              "location": "features/step_definitions/tor.rb:926"
            },
            "result": {
              "status": "passed",
              "duration": 279164653
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:335"
            },
            "result": {
              "status": "passed",
              "duration": 764447899
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:104"
            },
            "result": {
              "status": "passed",
              "duration": 14371484
            }
          }
        ]
      }
    ]
  },
  {
    "uri": "features/whisperback.feature",
    "id": "i-can-report-a-bug-with-whisperback",
    "keyword": "Feature",
    "name": "I can report a bug with WhisperBack",
    "description": "  As a Tails user\n  When I experience a bug in Tails\n  I want to send a complete bug report to the Tails team",
    "line": 2,
    "tags": [
      {
        "name": "@product",
        "line": 1
      }
    ],
    "elements": [
      {
        "id": "i-can-report-a-bug-with-whisperback;the-amnesia-user-cannot-run-tails-debugging-info-as-root",
        "keyword": "Scenario",
        "name": "The amnesia user cannot run tails-debugging-info as root",
        "description": "",
        "line": 8,
        "type": "scenario",
        "comments": [
          {
            "value": "# Anti-test: tails-debugging-info is not available to amnesia",
            "line": 7
          }
        ],
        "tags": [
          {
            "name": "@product",
            "line": 1
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:270"
            },
            "result": {
              "status": "passed",
              "duration": 124383
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:277"
            },
            "result": {
              "status": "passed",
              "duration": 22464948
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails from DVD without network and logged in",
            "line": 9,
            "match": {
              "location": "features/step_definitions/snapshots.rb:172"
            },
            "result": {
              "status": "passed",
              "duration": 7177906621
            }
          },
          {
            "keyword": "Then ",
            "name": "running \"sudo /usr/local/sbin/tails-debugging-info\" as user \"amnesia\" fails",
            "line": 10,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1809"
            },
            "result": {
              "status": "passed",
              "duration": 98604419
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:335"
            },
            "result": {
              "status": "passed",
              "duration": 935907319
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:104"
            },
            "result": {
              "status": "passed",
              "duration": 27142
            }
          }
        ]
      },
      {
        "id": "i-can-report-a-bug-with-whisperback;all-debugging-information-can-be-retrieved",
        "keyword": "Scenario",
        "name": "All debugging information can be retrieved",
        "description": "",
        "line": 12,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:270"
            },
            "result": {
              "status": "passed",
              "duration": 25177
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:277"
            },
            "result": {
              "status": "passed",
              "duration": 9498328
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails from DVD without network and logged in",
            "line": 13,
            "match": {
              "location": "features/step_definitions/snapshots.rb:172"
            },
            "result": {
              "status": "passed",
              "duration": 6930207455
            }
          },
          {
            "keyword": "Then ",
            "name": "running \"/usr/local/sbin/tails-debugging-info --strict\" as user \"root\" succeeds",
            "line": 14,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1804"
            },
            "result": {
              "status": "passed",
              "duration": 791276347
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:335"
            },
            "result": {
              "status": "passed",
              "duration": 1020360126
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:104"
            },
            "result": {
              "status": "passed",
              "duration": 20058
            }
          }
        ]
      },
      {
        "id": "i-can-report-a-bug-with-whisperback;whisperback-has-access-to-debugging-information",
        "keyword": "Scenario",
        "name": "WhisperBack has access to debugging information",
        "description": "",
        "line": 16,
        "type": "scenario",
        "tags": [
          {
            "name": "@product",
            "line": 1
          }
        ],
        "before": [
          {
            "match": {
              "location": "features/support/hooks.rb:270"
            },
            "result": {
              "status": "passed",
              "duration": 16823
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:277"
            },
            "result": {
              "status": "passed",
              "duration": 7316139
            }
          }
        ],
        "steps": [
          {
            "keyword": "Given ",
            "name": "I have started Tails from DVD without network and logged in",
            "line": 17,
            "match": {
              "location": "features/step_definitions/snapshots.rb:172"
            },
            "result": {
              "status": "passed",
              "duration": 7143345574
            }
          },
          {
            "keyword": "When ",
            "name": "I start \"WhisperBack\" via GNOME Activities Overview",
            "line": 18,
            "match": {
              "location": "features/step_definitions/common_steps.rb:1165"
            },
            "result": {
              "status": "passed",
              "duration": 8774850438
            }
          },
          {
            "keyword": "Then ",
            "name": "WhisperBack has debugging information",
            "line": 19,
            "match": {
              "location": "features/step_definitions/whisperback.rb:9"
            },
            "result": {
              "status": "passed",
              "duration": 2531970383
            }
          }
        ],
        "after": [
          {
            "match": {
              "location": "features/support/hooks.rb:335"
            },
            "result": {
              "status": "passed",
              "duration": 1241116349
            }
          },
          {
            "match": {
              "location": "features/support/hooks.rb:104"
            },
            "result": {
              "status": "passed",
              "duration": 21360
            }
          }
        ]
      }
    ]
  }
]