{"action":"created","comment":{"url":"https://api.github.com/repos/yuzu-emu/yuzu/pulls/comments/197345575","pull_request_review_id":131071860,"id":197345575,"node_id":"MDI0OlB1bGxSZXF1ZXN0UmV2aWV3Q29tbWVudDE5NzM0NTU3NQ==","diff_hunk":"@@ -0,0 +1,174 @@\n+// Copyright 2018 yuzu emulator team\n+// Licensed under GPLv2 or any later version\n+// Refer to the license.txt file included.\n+\n+#include \"common/assert.h\"\n+#include \"common/common_funcs.h\"\n+#include \"common/common_types.h\"\n+#include \"core/core.h\"\n+#include \"core/hle/kernel/errors.h\"\n+#include \"core/hle/kernel/kernel.h\"\n+#include \"core/hle/kernel/process.h\"\n+#include \"core/hle/kernel/thread.h\"\n+#include \"core/hle/lock.h\"\n+#include \"core/memory.h\"\n+\n+namespace Kernel {\n+namespace AddressArbiter {\n+\n+// Performs actual address waiting logic.\n+ResultCode WaitForAddress(VAddr address, s64 timeout) {\n+    SharedPtr<Thread> current_thread = GetCurrentThread();\n+    current_thread->arb_wait_address = address;\n+    current_thread->status = THREADSTATUS_WAIT_ARB;\n+    current_thread->wakeup_callback = nullptr;\n+\n+    current_thread->WakeAfterDelay(timeout);\n+\n+    Core::System::GetInstance().CpuCore(current_thread->processor_id).PrepareReschedule();\n+    // This should never actually execute.\n+    return RESULT_SUCCESS;\n+}\n+\n+// Gets the threads waiting on an address.\n+void GetThreadsWaitingOnAddress(std::vector<SharedPtr<Thread>>& waiting_threads, VAddr address) {\n+    auto RetrieveWaitingThreads =\n+        [](size_t core_index, std::vector<SharedPtr<Thread>>& waiting_threads, VAddr arb_addr) {\n+            const auto& scheduler = Core::System::GetInstance().Scheduler(core_index);\n+            auto& thread_list = scheduler->GetThreadList();\n+\n+            for (auto& thread : thread_list) {\n+                if (thread->arb_wait_address == arb_addr)\n+                    waiting_threads.push_back(thread);\n+            }\n+        };\n+\n+    // Retrieve a list of all threads that are waiting for this address.\n+    RetrieveWaitingThreads(0, waiting_threads, address);\n+    RetrieveWaitingThreads(1, waiting_threads, address);\n+    RetrieveWaitingThreads(2, waiting_threads, address);\n+    RetrieveWaitingThreads(3, waiting_threads, address);\n+    // Sort them by priority, such that the highest priority ones come first.\n+    std::sort(waiting_threads.begin(), waiting_threads.end(),\n+              [](const SharedPtr<Thread>& lhs, const SharedPtr<Thread>& rhs) {\n+                  return lhs->current_priority < rhs->current_priority;\n+              });\n+}\n+\n+// Wake up num_to_wake (or all) threads in a vector.\n+void WakeThreads(std::vector<SharedPtr<Thread>>& waiting_threads, s32 num_to_wake) {\n+    // Only process up to 'target' threads, unless 'target' is <= 0, in which case process\n+    // them all.\n+    size_t last = waiting_threads.size();\n+    if (num_to_wake > 0)\n+        last = num_to_wake;\n+\n+    // Signal the waiting threads.\n+    // TODO: Rescheduling should not occur while waking threads. How can it be prevented?\n+    for (size_t i = 0; i < last; i++) {\n+        ASSERT(waiting_threads[i]->status = THREADSTATUS_WAIT_ARB);\n+        waiting_threads[i]->SetWaitSynchronizationResult(RESULT_SUCCESS);\n+        waiting_threads[i]->arb_wait_address = 0;\n+        waiting_threads[i]->ResumeFromWait();\n+    }\n+}\n+\n+// Signals an address being waited on.\n+ResultCode SignalToAddress(VAddr address, s32 num_to_wake) {\n+    // Get threads waiting on the address.\n+    std::vector<SharedPtr<Thread>> waiting_threads;\n+    GetThreadsWaitingOnAddress(waiting_threads, address);\n+\n+    WakeThreads(waiting_threads, num_to_wake);\n+    return RESULT_SUCCESS;\n+}\n+\n+// Signals an address being waited on and increments its value if equal to the value argument.\n+ResultCode IncrementAndSignalToAddressIfEqual(VAddr address, s32 value, s32 num_to_wake) {\n+    // Ensure that we can write to the address.\n+    if (!Memory::IsValidVirtualAddress(address)) {\n+        return ERR_INVALID_ADDRESS_STATE;\n+    }\n+\n+    if ((s32)Memory::Read32(address) == value) {\n+        Memory::Write32(address, (u32)(value + 1));\n+    } else {\n+        return ERR_INVALID_STATE;\n+    }\n+\n+    return SignalToAddress(address, num_to_wake);\n+}\n+\n+// Signals an address being waited on and modifies its value based on waiting thread count if equal\n+// to the value argument.\n+ResultCode ModifyByWaitingCountAndSignalToAddressIfEqual(VAddr address, s32 value,\n+                                                         s32 num_to_wake) {\n+    // Ensure that we can write to the address.\n+    if (!Memory::IsValidVirtualAddress(address)) {\n+        return ERR_INVALID_ADDRESS_STATE;\n+    }\n+\n+    // Get threads waiting on the address.\n+    std::vector<SharedPtr<Thread>> waiting_threads;\n+    GetThreadsWaitingOnAddress(waiting_threads, address);\n+\n+    // Determine the modified value depending on the waiting count.\n+    s32 updated_value;\n+    if (waiting_threads.size() == 0) {\n+        updated_value = value - 1;\n+    } else if (num_to_wake <= 0 || waiting_threads.size() <= num_to_wake) {\n+        updated_value = value + 1;\n+    } else {\n+        updated_value = value;\n+    }\n+\n+    if ((s32)Memory::Read32(address) == value) {\n+        Memory::Write32(address, (u32)(updated_value));\n+    } else {\n+        return ERR_INVALID_STATE;\n+    }\n+\n+    WakeThreads(waiting_threads, num_to_wake);\n+    return RESULT_SUCCESS;\n+}\n+\n+// Waits on an address if the value passed is less than the argument value, optionally decrementing.\n+ResultCode WaitForAddressIfLessThan(VAddr address, s32 value, s64 timeout, bool should_decrement) {\n+    // Ensure that we can read the address.\n+    if (!Memory::IsValidVirtualAddress(address)) {\n+        return ERR_INVALID_ADDRESS_STATE;\n+    }\n+\n+    s32 cur_value = (s32)Memory::Read32(address);\n+    if (cur_value < value) {\n+        Memory::Write32(address, (u32)(cur_value - 1));","path":"src/core/hle/kernel/address_arbiter.cpp","position":144,"original_position":144,"commit_id":"5f8aa02584eb8a5fdba583a192d551a2db707fb7","original_commit_id":"5f8aa02584eb8a5fdba583a192d551a2db707fb7","user":{"login":"Subv","id":357072,"node_id":"MDQ6VXNlcjM1NzA3Mg==","avatar_url":"https://avatars2.githubusercontent.com/u/357072?v=4","gravatar_id":"","url":"https://api.github.com/users/Subv","html_url":"https://github.com/Subv","followers_url":"https://api.github.com/users/Subv/followers","following_url":"https://api.github.com/users/Subv/following{/other_user}","gists_url":"https://api.github.com/users/Subv/gists{/gist_id}","starred_url":"https://api.github.com/users/Subv/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/Subv/subscriptions","organizations_url":"https://api.github.com/users/Subv/orgs","repos_url":"https://api.github.com/users/Subv/repos","events_url":"https://api.github.com/users/Subv/events{/privacy}","received_events_url":"https://api.github.com/users/Subv/received_events","type":"User","site_admin":false},"body":"static_cast","created_at":"2018-06-22T05:44:35Z","updated_at":"2018-06-22T05:46:20Z","html_url":"https://github.com/yuzu-emu/yuzu/pull/579#discussion_r197345575","pull_request_url":"https://api.github.com/repos/yuzu-emu/yuzu/pulls/579","author_association":"CONTRIBUTOR","_links":{"self":{"href":"https://api.github.com/repos/yuzu-emu/yuzu/pulls/comments/197345575"},"html":{"href":"https://github.com/yuzu-emu/yuzu/pull/579#discussion_r197345575"},"pull_request":{"href":"https://api.github.com/repos/yuzu-emu/yuzu/pulls/579"}}},"pull_request":{"url":"https://api.github.com/repos/yuzu-emu/yuzu/pulls/579","id":196623281,"node_id":"MDExOlB1bGxSZXF1ZXN0MTk2NjIzMjgx","html_url":"https://github.com/yuzu-emu/yuzu/pull/579","diff_url":"https://github.com/yuzu-emu/yuzu/pull/579.diff","patch_url":"https://github.com/yuzu-emu/yuzu/pull/579.patch","issue_url":"https://api.github.com/repos/yuzu-emu/yuzu/issues/579","number":579,"state":"open","locked":false,"title":"svc: Fully implement svcSignalToAddress and svcWaitForAddress","user":{"login":"SciresM","id":8676005,"node_id":"MDQ6VXNlcjg2NzYwMDU=","avatar_url":"https://avatars3.githubusercontent.com/u/8676005?v=4","gravatar_id":"","url":"https://api.github.com/users/SciresM","html_url":"https://github.com/SciresM","followers_url":"https://api.github.com/users/SciresM/followers","following_url":"https://api.github.com/users/SciresM/following{/other_user}","gists_url":"https://api.github.com/users/SciresM/gists{/gist_id}","starred_url":"https://api.github.com/users/SciresM/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/SciresM/subscriptions","organizations_url":"https://api.github.com/users/SciresM/orgs","repos_url":"https://api.github.com/users/SciresM/repos","events_url":"https://api.github.com/users/SciresM/events{/privacy}","received_events_url":"https://api.github.com/users/SciresM/received_events","type":"User","site_admin":false},"body":"These SVCs were introduced in 4.0.0, and are used by newer games to implement intra-process Event primitives (Mario Tennis Aces uses them, for example).\r\n\r\nI also modified the \"MisalignedAddress\" error code to reflect its true meaning as \"InvalidAddress\", and further filled in several ERR_ definitions to return console-accurate codes.","created_at":"2018-06-22T02:32:27Z","updated_at":"2018-06-22T05:46:20Z","closed_at":null,"merged_at":null,"merge_commit_sha":"ed62b5d6650cc0fafbf9d5bbd5e7cb096bc0ea87","assignee":null,"assignees":[],"requested_reviewers":[],"requested_teams":[],"labels":[],"milestone":null,"commits_url":"https://api.github.com/repos/yuzu-emu/yuzu/pulls/579/commits","review_comments_url":"https://api.github.com/repos/yuzu-emu/yuzu/pulls/579/comments","review_comment_url":"https://api.github.com/repos/yuzu-emu/yuzu/pulls/comments{/number}","comments_url":"https://api.github.com/repos/yuzu-emu/yuzu/issues/579/comments","statuses_url":"https://api.github.com/repos/yuzu-emu/yuzu/statuses/5f8aa02584eb8a5fdba583a192d551a2db707fb7","head":{"label":"SciresM:master","ref":"master","sha":"5f8aa02584eb8a5fdba583a192d551a2db707fb7","user":{"login":"SciresM","id":8676005,"node_id":"MDQ6VXNlcjg2NzYwMDU=","avatar_url":"https://avatars3.githubusercontent.com/u/8676005?v=4","gravatar_id":"","url":"https://api.github.com/users/SciresM","html_url":"https://github.com/SciresM","followers_url":"https://api.github.com/users/SciresM/followers","following_url":"https://api.github.com/users/SciresM/following{/other_user}","gists_url":"https://api.github.com/users/SciresM/gists{/gist_id}","starred_url":"https://api.github.com/users/SciresM/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/SciresM/subscriptions","organizations_url":"https://api.github.com/users/SciresM/orgs","repos_url":"https://api.github.com/users/SciresM/repos","events_url":"https://api.github.com/users/SciresM/events{/privacy}","received_events_url":"https://api.github.com/users/SciresM/received_events","type":"User","site_admin":false},"repo":{"id":138105781,"node_id":"MDEwOlJlcG9zaXRvcnkxMzgxMDU3ODE=","name":"yuzu","full_name":"SciresM/yuzu","owner":{"login":"SciresM","id":8676005,"node_id":"MDQ6VXNlcjg2NzYwMDU=","avatar_url":"https://avatars3.githubusercontent.com/u/8676005?v=4","gravatar_id":"","url":"https://api.github.com/users/SciresM","html_url":"https://github.com/SciresM","followers_url":"https://api.github.com/users/SciresM/followers","following_url":"https://api.github.com/users/SciresM/following{/other_user}","gists_url":"https://api.github.com/users/SciresM/gists{/gist_id}","starred_url":"https://api.github.com/users/SciresM/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/SciresM/subscriptions","organizations_url":"https://api.github.com/users/SciresM/orgs","repos_url":"https://api.github.com/users/SciresM/repos","events_url":"https://api.github.com/users/SciresM/events{/privacy}","received_events_url":"https://api.github.com/users/SciresM/received_events","type":"User","site_admin":false},"private":false,"html_url":"https://github.com/SciresM/yuzu","description":"Nintendo Switch Emulator","fork":true,"url":"https://api.github.com/repos/SciresM/yuzu","forks_url":"https://api.github.com/repos/SciresM/yuzu/forks","keys_url":"https://api.github.com/repos/SciresM/yuzu/keys{/key_id}","collaborators_url":"https://api.github.com/repos/SciresM/yuzu/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/SciresM/yuzu/teams","hooks_url":"https://api.github.com/repos/SciresM/yuzu/hooks","issue_events_url":"https://api.github.com/repos/SciresM/yuzu/issues/events{/number}","events_url":"https://api.github.com/repos/SciresM/yuzu/events","assignees_url":"https://api.github.com/repos/SciresM/yuzu/assignees{/user}","branches_url":"https://api.github.com/repos/SciresM/yuzu/branches{/branch}","tags_url":"https://api.github.com/repos/SciresM/yuzu/tags","blobs_url":"https://api.github.com/repos/SciresM/yuzu/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/SciresM/yuzu/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/SciresM/yuzu/git/refs{/sha}","trees_url":"https://api.github.com/repos/SciresM/yuzu/git/trees{/sha}","statuses_url":"https://api.github.com/repos/SciresM/yuzu/statuses/{sha}","languages_url":"https://api.github.com/repos/SciresM/yuzu/languages","stargazers_url":"https://api.github.com/repos/SciresM/yuzu/stargazers","contributors_url":"https://api.github.com/repos/SciresM/yuzu/contributors","subscribers_url":"https://api.github.com/repos/SciresM/yuzu/subscribers","subscription_url":"https://api.github.com/repos/SciresM/yuzu/subscription","commits_url":"https://api.github.com/repos/SciresM/yuzu/commits{/sha}","git_commits_url":"https://api.github.com/repos/SciresM/yuzu/git/commits{/sha}","comments_url":"https://api.github.com/repos/SciresM/yuzu/comments{/number}","issue_comment_url":"https://api.github.com/repos/SciresM/yuzu/issues/comments{/number}","contents_url":"https://api.github.com/repos/SciresM/yuzu/contents/{+path}","compare_url":"https://api.github.com/repos/SciresM/yuzu/compare/{base}...{head}","merges_url":"https://api.github.com/repos/SciresM/yuzu/merges","archive_url":"https://api.github.com/repos/SciresM/yuzu/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/SciresM/yuzu/downloads","issues_url":"https://api.github.com/repos/SciresM/yuzu/issues{/number}","pulls_url":"https://api.github.com/repos/SciresM/yuzu/pulls{/number}","milestones_url":"https://api.github.com/repos/SciresM/yuzu/milestones{/number}","notifications_url":"https://api.github.com/repos/SciresM/yuzu/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/SciresM/yuzu/labels{/name}","releases_url":"https://api.github.com/repos/SciresM/yuzu/releases{/id}","deployments_url":"https://api.github.com/repos/SciresM/yuzu/deployments","created_at":"2018-06-21T01:48:36Z","updated_at":"2018-06-22T03:13:17Z","pushed_at":"2018-06-22T03:13:15Z","git_url":"git://github.com/SciresM/yuzu.git","ssh_url":"git@github.com:SciresM/yuzu.git","clone_url":"https://github.com/SciresM/yuzu.git","svn_url":"https://github.com/SciresM/yuzu","homepage":"","size":18879,"stargazers_count":0,"watchers_count":0,"language":"C++","has_issues":false,"has_projects":true,"has_downloads":true,"has_wiki":true,"has_pages":false,"forks_count":0,"mirror_url":null,"archived":false,"open_issues_count":0,"license":{"key":"gpl-2.0","name":"GNU General Public License v2.0","spdx_id":"GPL-2.0","url":"https://api.github.com/licenses/gpl-2.0","node_id":"MDc6TGljZW5zZTg="},"forks":0,"open_issues":0,"watchers":0,"default_branch":"master"}},"base":{"label":"yuzu-emu:master","ref":"master","sha":"63f26d5c40adb49094b03b232528672f526afe49","user":{"login":"yuzu-emu","id":35075882,"node_id":"MDEyOk9yZ2FuaXphdGlvbjM1MDc1ODgy","avatar_url":"https://avatars1.githubusercontent.com/u/35075882?v=4","gravatar_id":"","url":"https://api.github.com/users/yuzu-emu","html_url":"https://github.com/yuzu-emu","followers_url":"https://api.github.com/users/yuzu-emu/followers","following_url":"https://api.github.com/users/yuzu-emu/following{/other_user}","gists_url":"https://api.github.com/users/yuzu-emu/gists{/gist_id}","starred_url":"https://api.github.com/users/yuzu-emu/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/yuzu-emu/subscriptions","organizations_url":"https://api.github.com/users/yuzu-emu/orgs","repos_url":"https://api.github.com/users/yuzu-emu/repos","events_url":"https://api.github.com/users/yuzu-emu/events{/privacy}","received_events_url":"https://api.github.com/users/yuzu-emu/received_events","type":"Organization","site_admin":false},"repo":{"id":116167731,"node_id":"MDEwOlJlcG9zaXRvcnkxMTYxNjc3MzE=","name":"yuzu","full_name":"yuzu-emu/yuzu","owner":{"login":"yuzu-emu","id":35075882,"node_id":"MDEyOk9yZ2FuaXphdGlvbjM1MDc1ODgy","avatar_url":"https://avatars1.githubusercontent.com/u/35075882?v=4","gravatar_id":"","url":"https://api.github.com/users/yuzu-emu","html_url":"https://github.com/yuzu-emu","followers_url":"https://api.github.com/users/yuzu-emu/followers","following_url":"https://api.github.com/users/yuzu-emu/following{/other_user}","gists_url":"https://api.github.com/users/yuzu-emu/gists{/gist_id}","starred_url":"https://api.github.com/users/yuzu-emu/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/yuzu-emu/subscriptions","organizations_url":"https://api.github.com/users/yuzu-emu/orgs","repos_url":"https://api.github.com/users/yuzu-emu/repos","events_url":"https://api.github.com/users/yuzu-emu/events{/privacy}","received_events_url":"https://api.github.com/users/yuzu-emu/received_events","type":"Organization","site_admin":false},"private":false,"html_url":"https://github.com/yuzu-emu/yuzu","description":"Nintendo Switch Emulator","fork":false,"url":"https://api.github.com/repos/yuzu-emu/yuzu","forks_url":"https://api.github.com/repos/yuzu-emu/yuzu/forks","keys_url":"https://api.github.com/repos/yuzu-emu/yuzu/keys{/key_id}","collaborators_url":"https://api.github.com/repos/yuzu-emu/yuzu/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/yuzu-emu/yuzu/teams","hooks_url":"https://api.github.com/repos/yuzu-emu/yuzu/hooks","issue_events_url":"https://api.github.com/repos/yuzu-emu/yuzu/issues/events{/number}","events_url":"https://api.github.com/repos/yuzu-emu/yuzu/events","assignees_url":"https://api.github.com/repos/yuzu-emu/yuzu/assignees{/user}","branches_url":"https://api.github.com/repos/yuzu-emu/yuzu/branches{/branch}","tags_url":"https://api.github.com/repos/yuzu-emu/yuzu/tags","blobs_url":"https://api.github.com/repos/yuzu-emu/yuzu/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/yuzu-emu/yuzu/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/yuzu-emu/yuzu/git/refs{/sha}","trees_url":"https://api.github.com/repos/yuzu-emu/yuzu/git/trees{/sha}","statuses_url":"https://api.github.com/repos/yuzu-emu/yuzu/statuses/{sha}","languages_url":"https://api.github.com/repos/yuzu-emu/yuzu/languages","stargazers_url":"https://api.github.com/repos/yuzu-emu/yuzu/stargazers","contributors_url":"https://api.github.com/repos/yuzu-emu/yuzu/contributors","subscribers_url":"https://api.github.com/repos/yuzu-emu/yuzu/subscribers","subscription_url":"https://api.github.com/repos/yuzu-emu/yuzu/subscription","commits_url":"https://api.github.com/repos/yuzu-emu/yuzu/commits{/sha}","git_commits_url":"https://api.github.com/repos/yuzu-emu/yuzu/git/commits{/sha}","comments_url":"https://api.github.com/repos/yuzu-emu/yuzu/comments{/number}","issue_comment_url":"https://api.github.com/repos/yuzu-emu/yuzu/issues/comments{/number}","contents_url":"https://api.github.com/repos/yuzu-emu/yuzu/contents/{+path}","compare_url":"https://api.github.com/repos/yuzu-emu/yuzu/compare/{base}...{head}","merges_url":"https://api.github.com/repos/yuzu-emu/yuzu/merges","archive_url":"https://api.github.com/repos/yuzu-emu/yuzu/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/yuzu-emu/yuzu/downloads","issues_url":"https://api.github.com/repos/yuzu-emu/yuzu/issues{/number}","pulls_url":"https://api.github.com/repos/yuzu-emu/yuzu/pulls{/number}","milestones_url":"https://api.github.com/repos/yuzu-emu/yuzu/milestones{/number}","notifications_url":"https://api.github.com/repos/yuzu-emu/yuzu/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/yuzu-emu/yuzu/labels{/name}","releases_url":"https://api.github.com/repos/yuzu-emu/yuzu/releases{/id}","deployments_url":"https://api.github.com/repos/yuzu-emu/yuzu/deployments","created_at":"2018-01-03T18:13:57Z","updated_at":"2018-06-22T02:40:41Z","pushed_at":"2018-06-22T05:32:38Z","git_url":"git://github.com/yuzu-emu/yuzu.git","ssh_url":"git@github.com:yuzu-emu/yuzu.git","clone_url":"https://github.com/yuzu-emu/yuzu.git","svn_url":"https://github.com/yuzu-emu/yuzu","homepage":"","size":18877,"stargazers_count":4619,"watchers_count":4619,"language":"C++","has_issues":true,"has_projects":true,"has_downloads":true,"has_wiki":true,"has_pages":false,"forks_count":228,"mirror_url":null,"archived":false,"open_issues_count":22,"license":{"key":"gpl-2.0","name":"GNU General Public License v2.0","spdx_id":"GPL-2.0","url":"https://api.github.com/licenses/gpl-2.0","node_id":"MDc6TGljZW5zZTg="},"forks":228,"open_issues":22,"watchers":4619,"default_branch":"master"}},"_links":{"self":{"href":"https://api.github.com/repos/yuzu-emu/yuzu/pulls/579"},"html":{"href":"https://github.com/yuzu-emu/yuzu/pull/579"},"issue":{"href":"https://api.github.com/repos/yuzu-emu/yuzu/issues/579"},"comments":{"href":"https://api.github.com/repos/yuzu-emu/yuzu/issues/579/comments"},"review_comments":{"href":"https://api.github.com/repos/yuzu-emu/yuzu/pulls/579/comments"},"review_comment":{"href":"https://api.github.com/repos/yuzu-emu/yuzu/pulls/comments{/number}"},"commits":{"href":"https://api.github.com/repos/yuzu-emu/yuzu/pulls/579/commits"},"statuses":{"href":"https://api.github.com/repos/yuzu-emu/yuzu/statuses/5f8aa02584eb8a5fdba583a192d551a2db707fb7"}},"author_association":"NONE"}}
{"actor":{"display_login":"Subv"}}