{"action":"created","comment":{"url":"https://api.github.com/repos/project-rig/rig/pulls/comments/29044425","id":29044425,"diff_hunk":"@@ -0,0 +1,349 @@\n+.. py:module::rig.machine_control\n+\n+Machine Control Tutorials\n+=========================\n+\n+SpiNNaker machines consist of a network of SpiNNaker chips and, in larger\n+systems, a set of Board Management Processors (BMPs) which control and monitor\n+systems' power and temperature. SpiNNaker (and BMPs) are controlled using `SCP`_\n+packets (a protocol built on top of `SDP`_) sent over the network to a machine.\n+Rig includes a set of high-level wrappers around the low-level SCP commands\n+which are tailored towards SpiNNaker application developers.\n+\n+.. _SCP: https://spinnaker.cs.man.ac.uk/tiki-download_wiki_attachment.php?attId=17&page=Application%20note%205%20-%20SCP%20Specification&download=y\n+\n+.. _SDP: https://spinnaker.cs.man.ac.uk/tiki-download_wiki_attachment.php?attId=16&page=Application%20note%204%20-%20SDP%20Specification&download=y\n+\n+.. note::\n+    Rig does not aim to provide a complete Python implementation of the full\n+    (low-level) SCP command set. Users who encounter missing functionality as a\n+    result of this are encouraged to submit a patch or open an issue as the\n+    developers are open to (reasonable) suggestions!\n+\n+The two high-level interfaces are:\n+\n+:py:class:`.MachineController`\n+    Interact with and control SpiNNaker chips, e.g. boot, load applications,\n+    read/write memory.\n+:py:class:`.BMPController`\n+    Interact with and control BMPs, e.g. control power-supplies, monitor\n+    system temperature, read/write FPGA registers. Only applicable to machines\n+    based on SpiNN-5 boards.\n+\n+A tutorial for each of these interfaces is presented below.\n+\n+For those wishing to extend these interfaces or directly use SCP or SDP packets,\n+the underlying advanced APIs are also very briefly introduced.\n+\n+:py:class:`.MachineController` Tutorial\n+---------------------------------------\n+\n+To get started, lets instantiate a :py:class:`.MachineController` which is as\n+simple as giving the hostname or IP address of the machine::\n+\n+    >>> from rig.machine_control import MachineController\n+    >>> mc = MachineController(\"spinnaker_hostname\")\n+\n+.. note::\n+    If you're using a multi-board machine, give the hostname of the (0, 0) chip.\n+    Support for connecting to multiple Ethernet ports of a SpiNNaker machine is\n+    not currently available but should be automatic. \n+\n+Booting\n+^^^^^^^\n+\n+You can :py:meth:`~.MachineController.boot` boot the system like so::\n+\n+    >>> mc.boot(12, 12)  # For a 12x12 machine\n+\n+If you're using a SpiNN-2 or SpiNN-3 board booted with no further arguments,\n+only LED 0 will be usable. To enable the other LEDs, instead boot the machine\n+using one of the pre-defined boot option dictionaries in\n+:py:mod:`rig.machine_control.boot`, for example::\n+\n+    >>> from rig.machine_control.boot import spin3_boot_options\n+    >>> mc.boot(**spin3_boot_options)\n+\n+To check that the system has been booted successfully, you can query it to\n+retrieve its software version with\n+:py:meth:`~.MachineController.get_software_version` which returns a\n+:py:class:`~rig.machine_control.machine_controller.CoreInfo` named tuple::\n+\n+    >>> core_info = mc.get_software_version(0, 0)  # Asks chip (0, 0)\n+    >>> core_info.version\n+    1.33\n+\n+Probing for Available Resources\n+^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n+\n+The :py:meth:`~.MachineController.get_machine` method returns a\n+:py:class:`~rig.machine.Machine` object describing which chips, links and cores\n+are alive and also the SDRAM available::\n+\n+    >>> machine = mc.get_machine()\n+\n+This object can be directly passed to Rig's place and route utilities (e.g.\n+:py:class:`rig.place_and_route.wrapper`).\n+\n+.. note::\n+    This method simply lists *working* resources, it does not (for example)\n+    exclude cores and memory which are already in use (e.g. monitor cores).\n+\n+Loading Applications\n+^^^^^^^^^^^^^^^^^^^^\n+\n+The :py:meth:`~.MachineController.load_application` method unsurprisingly will\n+load an application onto an arbitrary set of SpiNNaker cores. For example, the\n+following code loads the specified APLX file to cores 1, 2 and 3 of chip (0, 0)\n+and cores 10 and 11 of chip (0, 1)::\n+\n+    >>> targets = {(0, 0): set([1, 2, 3]),\n+    ...            (0, 1): set([10, 11])}\n+    >>> mc.load_application(\"/path/to/app.aplx\", targets)\n+\n+This method alternatively accepts dictionaries mapping applications to targets,\n+such as those produced by :py:class:`rig.place_and_route.wrapper`.\n+\n+:py:meth:`~.MachineController.load_application` verifies that all applications\n+have been successfully loaded (re-attempting a small number of times if\n+necessary). If not all applications could be loaded, a\n+:py:exc:`~rig.machine_control.machine_controller.SpiNNakerLoadingError`\n+exception is raised.\n+\n+Many applications require the `sync0` signal to be sent to start the\n+application's event handler after loading. We can wait for all cores to reach\n+the `sync0` barrier using\n+:py:class:`~.MachineController.wait_for_cores_to_reach_state` and then send the\n+`sync0` signal using :py:class:`~.MachineController.send_signal`::\n+\n+    >>> # In the example above we loaded 5 cores so we expect 5 cores to reach\n+    >>> # sync0.\n+    >>> mc.wait_for_cores_to_reach_state(\"sync0\", 5)\n+    5\n+    >>> mc.send_signal(\"sync0\")\n+\n+Similarly, after application execution, the application can be killed with::\n+\n+    >>> mc.send_signal(\"stop\")\n+\n+Since the stop signal also cleans up allocated resources in a SpiNNaker machine\n+(e.g. stray processes, routing entries and allocated SDRAM), it is desireable\n+for this signal to reliably get sent, even if something crashes in the host\n+application. To facilitate this, you can use the\n+:py:meth:`~.MachineController.application` context manager::\n+\n+    >>> with mc.application():\n+    ...     # Main application code goes here, e.g. loading applications,\n+    ...     # routing tables and SDRAM.\n+    >>> # When the above block exits (even if due to an exception), the stop\n+    >>> # signal will be sent to the application.\n+\n+.. note::\n+    Many application-oriented methods accept an `app_id` argument which is given\n+    a sensible default value. If the :py:meth:`.MachineController.application`\n+    context manager is given an app ID as its argument, this app ID will become\n+    the default `app_id` within the `with` block. See the section on context\n+    managers below for more details.\n+\n+Loading Routing Tables\n+^^^^^^^^^^^^^^^^^^^^^^\n+\n+Routing table entries can be loaded using\n+:py:meth:`~.MachineController.load_routing_tables` like so::\n+\n+    >>> routing_tables = {\n+    ...     (0, 0): [RoutingTableEntry(...), ...],\n+    ...     (0, 1): [RoutingTableEntry(...), ...],\n+    ...     ...\n+    ... }\n+    >>> mc.load_routing_tables(routing_tables)\n+\n+This command allocates and then loads the requested routing table entries onto\n+each of the supplied chips. The supplied data structure matches that produced by\n+:py:func:`rig.place_and_route.wrapper`.\n+\n+Allocating/Writing/Reading SDRAM\n+^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n+\n+Many SpiNNaker applications require the writing and reading of large blocks of\n+SDRAM data used by the application. The recommended way of doing this is to\n+allocate blocks of SDRAM using :py:meth:`~.MachineController.sdram_alloc` with\n+an identifying 'tag'. The The SpiNNaker application can later use this tag\n+number to look up the address of the allocated block of SDRAM. Not only does\n+this avoid the need to explicitly communicate SDRAM locations to the application\n+it also allows SARK to safely allocate memory in the SDRAM.\n+\n+:py:meth:`~.MachineController.read` and :py:meth:`~.MachineController.write`\n+methods are provided which can read and write arbitrarily large blocks of data\n+to and from memory in SpiNNaker::\n+\n+    >>> # Allocate 1024 bytes of SDRAM with tag '3' on chip (0, 0)\n+    >>> block_addr = mc.sdram_alloc(1024, 3, 0, 0)\n+    >>> mc.write(block_addr, b\"Hello, world!\")\n+    >>> mc.read(block_addr, 13)\n+    b\"Hello, world!\"\n+\n+Rig also provides a file-like I/O wrapper\n+(:py:class:`~rig.machine_control.MemoryIO`) which may prove easier to integrate\n+into applications and also ensures reads and writes are constrained only to the\n+allocated region. For example::\n+\n+    >>> # Allocate 1024 bytes of SDRAM with tag '3' on chip (0, 0)\n+    >>> block = mc.sdram_alloc_as_filelike(1024, 3, 0, 0)\n+    >>> block.write(b\"Hello, world!\")\n+    >>> block.seek(0)\n+    >>> block.read(13)\n+    b\"Hello, world!\"","path":"docs/source/control_tutorials.rst","position":196,"original_position":196,"commit_id":"a7d46e10cb24c145f2f02fa0fdced0124537213a","original_commit_id":"bba5adb9f60fb8094742c7afee71b9b851a2b841","user":{"login":"mossblaser","id":193514,"avatar_url":"https://avatars.githubusercontent.com/u/193514?v=3","gravatar_id":"","url":"https://api.github.com/users/mossblaser","html_url":"https://github.com/mossblaser","followers_url":"https://api.github.com/users/mossblaser/followers","following_url":"https://api.github.com/users/mossblaser/following{/other_user}","gists_url":"https://api.github.com/users/mossblaser/gists{/gist_id}","starred_url":"https://api.github.com/users/mossblaser/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/mossblaser/subscriptions","organizations_url":"https://api.github.com/users/mossblaser/orgs","repos_url":"https://api.github.com/users/mossblaser/repos","events_url":"https://api.github.com/users/mossblaser/events{/privacy}","received_events_url":"https://api.github.com/users/mossblaser/received_events","type":"User","site_admin":false},"body":"Done!","created_at":"2015-04-24T12:33:32Z","updated_at":"2015-04-24T12:33:32Z","html_url":"https://github.com/project-rig/rig/pull/111#discussion_r29044425","pull_request_url":"https://api.github.com/repos/project-rig/rig/pulls/111","_links":{"self":{"href":"https://api.github.com/repos/project-rig/rig/pulls/comments/29044425"},"html":{"href":"https://github.com/project-rig/rig/pull/111#discussion_r29044425"},"pull_request":{"href":"https://api.github.com/repos/project-rig/rig/pulls/111"}}},"pull_request":{"url":"https://api.github.com/repos/project-rig/rig/pulls/111","id":34038152,"html_url":"https://github.com/project-rig/rig/pull/111","diff_url":"https://github.com/project-rig/rig/pull/111.diff","patch_url":"https://github.com/project-rig/rig/pull/111.patch","issue_url":"https://api.github.com/repos/project-rig/rig/issues/111","number":111,"state":"open","locked":false,"title":"Improve top-level documentation.","user":{"login":"mossblaser","id":193514,"avatar_url":"https://avatars.githubusercontent.com/u/193514?v=3","gravatar_id":"","url":"https://api.github.com/users/mossblaser","html_url":"https://github.com/mossblaser","followers_url":"https://api.github.com/users/mossblaser/followers","following_url":"https://api.github.com/users/mossblaser/following{/other_user}","gists_url":"https://api.github.com/users/mossblaser/gists{/gist_id}","starred_url":"https://api.github.com/users/mossblaser/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/mossblaser/subscriptions","organizations_url":"https://api.github.com/users/mossblaser/orgs","repos_url":"https://api.github.com/users/mossblaser/repos","events_url":"https://api.github.com/users/mossblaser/events{/privacy}","received_events_url":"https://api.github.com/users/mossblaser/received_events","type":"User","site_admin":false},"body":"Covers most issues in issue #110.","created_at":"2015-04-24T10:55:34Z","updated_at":"2015-04-24T12:33:32Z","closed_at":null,"merged_at":null,"merge_commit_sha":"05b1e8f4b554a0a723c95511c69e727863ee8cbe","assignee":null,"milestone":null,"commits_url":"https://api.github.com/repos/project-rig/rig/pulls/111/commits","review_comments_url":"https://api.github.com/repos/project-rig/rig/pulls/111/comments","review_comment_url":"https://api.github.com/repos/project-rig/rig/pulls/comments{/number}","comments_url":"https://api.github.com/repos/project-rig/rig/issues/111/comments","statuses_url":"https://api.github.com/repos/project-rig/rig/statuses/a7d46e10cb24c145f2f02fa0fdced0124537213a","head":{"label":"project-rig:overview-docs","ref":"overview-docs","sha":"a7d46e10cb24c145f2f02fa0fdced0124537213a","user":{"login":"project-rig","id":11227885,"avatar_url":"https://avatars.githubusercontent.com/u/11227885?v=3","gravatar_id":"","url":"https://api.github.com/users/project-rig","html_url":"https://github.com/project-rig","followers_url":"https://api.github.com/users/project-rig/followers","following_url":"https://api.github.com/users/project-rig/following{/other_user}","gists_url":"https://api.github.com/users/project-rig/gists{/gist_id}","starred_url":"https://api.github.com/users/project-rig/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/project-rig/subscriptions","organizations_url":"https://api.github.com/users/project-rig/orgs","repos_url":"https://api.github.com/users/project-rig/repos","events_url":"https://api.github.com/users/project-rig/events{/privacy}","received_events_url":"https://api.github.com/users/project-rig/received_events","type":"Organization","site_admin":false},"repo":{"id":29497314,"name":"rig","full_name":"project-rig/rig","owner":{"login":"project-rig","id":11227885,"avatar_url":"https://avatars.githubusercontent.com/u/11227885?v=3","gravatar_id":"","url":"https://api.github.com/users/project-rig","html_url":"https://github.com/project-rig","followers_url":"https://api.github.com/users/project-rig/followers","following_url":"https://api.github.com/users/project-rig/following{/other_user}","gists_url":"https://api.github.com/users/project-rig/gists{/gist_id}","starred_url":"https://api.github.com/users/project-rig/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/project-rig/subscriptions","organizations_url":"https://api.github.com/users/project-rig/orgs","repos_url":"https://api.github.com/users/project-rig/repos","events_url":"https://api.github.com/users/project-rig/events{/privacy}","received_events_url":"https://api.github.com/users/project-rig/received_events","type":"Organization","site_admin":false},"private":false,"html_url":"https://github.com/project-rig/rig","description":"A set of tools for rigging SpiNNaker programs.","fork":false,"url":"https://api.github.com/repos/project-rig/rig","forks_url":"https://api.github.com/repos/project-rig/rig/forks","keys_url":"https://api.github.com/repos/project-rig/rig/keys{/key_id}","collaborators_url":"https://api.github.com/repos/project-rig/rig/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/project-rig/rig/teams","hooks_url":"https://api.github.com/repos/project-rig/rig/hooks","issue_events_url":"https://api.github.com/repos/project-rig/rig/issues/events{/number}","events_url":"https://api.github.com/repos/project-rig/rig/events","assignees_url":"https://api.github.com/repos/project-rig/rig/assignees{/user}","branches_url":"https://api.github.com/repos/project-rig/rig/branches{/branch}","tags_url":"https://api.github.com/repos/project-rig/rig/tags","blobs_url":"https://api.github.com/repos/project-rig/rig/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/project-rig/rig/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/project-rig/rig/git/refs{/sha}","trees_url":"https://api.github.com/repos/project-rig/rig/git/trees{/sha}","statuses_url":"https://api.github.com/repos/project-rig/rig/statuses/{sha}","languages_url":"https://api.github.com/repos/project-rig/rig/languages","stargazers_url":"https://api.github.com/repos/project-rig/rig/stargazers","contributors_url":"https://api.github.com/repos/project-rig/rig/contributors","subscribers_url":"https://api.github.com/repos/project-rig/rig/subscribers","subscription_url":"https://api.github.com/repos/project-rig/rig/subscription","commits_url":"https://api.github.com/repos/project-rig/rig/commits{/sha}","git_commits_url":"https://api.github.com/repos/project-rig/rig/git/commits{/sha}","comments_url":"https://api.github.com/repos/project-rig/rig/comments{/number}","issue_comment_url":"https://api.github.com/repos/project-rig/rig/issues/comments{/number}","contents_url":"https://api.github.com/repos/project-rig/rig/contents/{+path}","compare_url":"https://api.github.com/repos/project-rig/rig/compare/{base}...{head}","merges_url":"https://api.github.com/repos/project-rig/rig/merges","archive_url":"https://api.github.com/repos/project-rig/rig/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/project-rig/rig/downloads","issues_url":"https://api.github.com/repos/project-rig/rig/issues{/number}","pulls_url":"https://api.github.com/repos/project-rig/rig/pulls{/number}","milestones_url":"https://api.github.com/repos/project-rig/rig/milestones{/number}","notifications_url":"https://api.github.com/repos/project-rig/rig/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/project-rig/rig/labels{/name}","releases_url":"https://api.github.com/repos/project-rig/rig/releases{/id}","created_at":"2015-01-19T21:20:40Z","updated_at":"2015-04-23T12:53:55Z","pushed_at":"2015-04-24T12:33:20Z","git_url":"git://github.com/project-rig/rig.git","ssh_url":"git@github.com:project-rig/rig.git","clone_url":"https://github.com/project-rig/rig.git","svn_url":"https://github.com/project-rig/rig","homepage":"","size":3303,"stargazers_count":0,"watchers_count":0,"language":"Python","has_issues":true,"has_downloads":true,"has_wiki":false,"has_pages":false,"forks_count":1,"mirror_url":null,"open_issues_count":5,"forks":1,"open_issues":5,"watchers":0,"default_branch":"master"}},"base":{"label":"project-rig:master","ref":"master","sha":"794c7354bdd92d91dd212ed7c44d49348dca070a","user":{"login":"project-rig","id":11227885,"avatar_url":"https://avatars.githubusercontent.com/u/11227885?v=3","gravatar_id":"","url":"https://api.github.com/users/project-rig","html_url":"https://github.com/project-rig","followers_url":"https://api.github.com/users/project-rig/followers","following_url":"https://api.github.com/users/project-rig/following{/other_user}","gists_url":"https://api.github.com/users/project-rig/gists{/gist_id}","starred_url":"https://api.github.com/users/project-rig/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/project-rig/subscriptions","organizations_url":"https://api.github.com/users/project-rig/orgs","repos_url":"https://api.github.com/users/project-rig/repos","events_url":"https://api.github.com/users/project-rig/events{/privacy}","received_events_url":"https://api.github.com/users/project-rig/received_events","type":"Organization","site_admin":false},"repo":{"id":29497314,"name":"rig","full_name":"project-rig/rig","owner":{"login":"project-rig","id":11227885,"avatar_url":"https://avatars.githubusercontent.com/u/11227885?v=3","gravatar_id":"","url":"https://api.github.com/users/project-rig","html_url":"https://github.com/project-rig","followers_url":"https://api.github.com/users/project-rig/followers","following_url":"https://api.github.com/users/project-rig/following{/other_user}","gists_url":"https://api.github.com/users/project-rig/gists{/gist_id}","starred_url":"https://api.github.com/users/project-rig/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/project-rig/subscriptions","organizations_url":"https://api.github.com/users/project-rig/orgs","repos_url":"https://api.github.com/users/project-rig/repos","events_url":"https://api.github.com/users/project-rig/events{/privacy}","received_events_url":"https://api.github.com/users/project-rig/received_events","type":"Organization","site_admin":false},"private":false,"html_url":"https://github.com/project-rig/rig","description":"A set of tools for rigging SpiNNaker programs.","fork":false,"url":"https://api.github.com/repos/project-rig/rig","forks_url":"https://api.github.com/repos/project-rig/rig/forks","keys_url":"https://api.github.com/repos/project-rig/rig/keys{/key_id}","collaborators_url":"https://api.github.com/repos/project-rig/rig/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/project-rig/rig/teams","hooks_url":"https://api.github.com/repos/project-rig/rig/hooks","issue_events_url":"https://api.github.com/repos/project-rig/rig/issues/events{/number}","events_url":"https://api.github.com/repos/project-rig/rig/events","assignees_url":"https://api.github.com/repos/project-rig/rig/assignees{/user}","branches_url":"https://api.github.com/repos/project-rig/rig/branches{/branch}","tags_url":"https://api.github.com/repos/project-rig/rig/tags","blobs_url":"https://api.github.com/repos/project-rig/rig/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/project-rig/rig/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/project-rig/rig/git/refs{/sha}","trees_url":"https://api.github.com/repos/project-rig/rig/git/trees{/sha}","statuses_url":"https://api.github.com/repos/project-rig/rig/statuses/{sha}","languages_url":"https://api.github.com/repos/project-rig/rig/languages","stargazers_url":"https://api.github.com/repos/project-rig/rig/stargazers","contributors_url":"https://api.github.com/repos/project-rig/rig/contributors","subscribers_url":"https://api.github.com/repos/project-rig/rig/subscribers","subscription_url":"https://api.github.com/repos/project-rig/rig/subscription","commits_url":"https://api.github.com/repos/project-rig/rig/commits{/sha}","git_commits_url":"https://api.github.com/repos/project-rig/rig/git/commits{/sha}","comments_url":"https://api.github.com/repos/project-rig/rig/comments{/number}","issue_comment_url":"https://api.github.com/repos/project-rig/rig/issues/comments{/number}","contents_url":"https://api.github.com/repos/project-rig/rig/contents/{+path}","compare_url":"https://api.github.com/repos/project-rig/rig/compare/{base}...{head}","merges_url":"https://api.github.com/repos/project-rig/rig/merges","archive_url":"https://api.github.com/repos/project-rig/rig/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/project-rig/rig/downloads","issues_url":"https://api.github.com/repos/project-rig/rig/issues{/number}","pulls_url":"https://api.github.com/repos/project-rig/rig/pulls{/number}","milestones_url":"https://api.github.com/repos/project-rig/rig/milestones{/number}","notifications_url":"https://api.github.com/repos/project-rig/rig/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/project-rig/rig/labels{/name}","releases_url":"https://api.github.com/repos/project-rig/rig/releases{/id}","created_at":"2015-01-19T21:20:40Z","updated_at":"2015-04-23T12:53:55Z","pushed_at":"2015-04-24T12:33:20Z","git_url":"git://github.com/project-rig/rig.git","ssh_url":"git@github.com:project-rig/rig.git","clone_url":"https://github.com/project-rig/rig.git","svn_url":"https://github.com/project-rig/rig","homepage":"","size":3303,"stargazers_count":0,"watchers_count":0,"language":"Python","has_issues":true,"has_downloads":true,"has_wiki":false,"has_pages":false,"forks_count":1,"mirror_url":null,"open_issues_count":5,"forks":1,"open_issues":5,"watchers":0,"default_branch":"master"}},"_links":{"self":{"href":"https://api.github.com/repos/project-rig/rig/pulls/111"},"html":{"href":"https://github.com/project-rig/rig/pull/111"},"issue":{"href":"https://api.github.com/repos/project-rig/rig/issues/111"},"comments":{"href":"https://api.github.com/repos/project-rig/rig/issues/111/comments"},"review_comments":{"href":"https://api.github.com/repos/project-rig/rig/pulls/111/comments"},"review_comment":{"href":"https://api.github.com/repos/project-rig/rig/pulls/comments{/number}"},"commits":{"href":"https://api.github.com/repos/project-rig/rig/pulls/111/commits"},"statuses":{"href":"https://api.github.com/repos/project-rig/rig/statuses/a7d46e10cb24c145f2f02fa0fdced0124537213a"}}}}